<?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>Uploads</name>
	<version>1.19.1</version>
  <mincmsversion>1.11.13</mincmsversion>
	<help><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkl0IGlzIGEgbW9kdWxlIGZvciBhbGxvd2luZyBwZW9wbGUgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmaWxlcyB0byBhbmQgZnJvbSB5b3VyIHNpdGUuICBJdCBrZWVwcyB0cmFjayBvZiB3aG8gdXBsb2FkZWQgYSBmaWxlLCBhbmQgd2hvIGhhcyBkb3dubG9hZGVkIGl0LiAgQXMgd2VsbCwgeW91IGNhbiBzb3J0IGZpbGVzIGludG8gY2F0ZWdvcmllcywgYW5kIG1hbmFnZSB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVwbG9hZGVkIGxpa2UgZXZlcnkgYWRtaW5pc3RyYXRvciB3b3VsZCBkbzwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlRvIHVzZSB0aGlzIG1vZHVsZSwgdG8gYWxsb3cgdXNlcnMgdG8gdXBsb2FkIGZpbGVzIHRvIHlvdXIgc2l0ZSwgeW91IHNob3VsZCBpbnN0YWxsIHRoZSBtb2R1bGUsIGFuZCB0aGVuIGNyZWF0ZSBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIChhLmsuYSkgZGlyZWN0b3JpZXMgZm9yIHRoZSB1cGxvYWRlZCBmaWxlcyB0byBnbyBpbnRvLiBUaGVuIGFkZCBhIHRhZyBpbnRvIGEgcGFnZSBvciB0ZW1wbGF0ZSBzb21ld2hlcmUgbGlrZSB7Y21zX21vZHVsZSBtb2R1bGU9IlVwbG9hZHMiIGNhdGVnb3J5PSJzb21lY2F0ZWdvcnkiIG1vZGU9InNvbWVtb2RlIn0uICBXaGVyZSBtb2RlIG1hdGNoZXMgb25lIG9mIHRoZSBtb2RlcyBsaXN0ZWQgYmVsb3cuICBUaGUgb3V0cHV0IHdpbGwgZGlmZmVyIGRlcGVuZGluZyB1cG9uIHdoaWNoIG1vZGUgeW91IHNlbGVjdC48L3A+CjxwPlRoaXMgbW9kdWxlIGNhbiB1c2UgdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIChvcHRpb25hbCkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIHRvIHBhcnRseSBmaWxsIGluIHRoZSBmb3JtIHdoZW4gdXBsb2FkaW5nIGZpbGVzOzwvcD4KPGgzPlBlcm1pc3Npb25zPC9oMz4KPHVsPgo8bGk+PGVtPk1hbmFnZSBVcGxvYWRzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgdG8gbWFuYWdlIGNhdGVnb3JpZXMsIGFuZCB0aGUgZmlsZXMgd2l0aGluIHRoZW0uPC9saT4KPGxpPjxlbT5Nb2RpZnkgVGVtcGxhdGVzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgZWRpdCBhbnkgb2YgdGhlIHRlbXBsYXRlcy48L2xpPgo8bGk+PGVtPk1vZGlmeSBTaXRlIFByZWZlcmVuY2VzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgYW55IG9mIHRoZSBmaWxlIHNldHRpbmdzLjwvbGk+CjwvdWw+CjxoMz5DYXRlZ29yeSBCcm93c2luZzwvaDM+CjxwPlBsYWNpbmcgYSB0YWcgbGlrZSB7Y21zX21vZHVsZSBtb2R1bGU9IlVwbG9hZHMiIGFjdGlvbj0iY2F0ZWdvcnlzdW1tYXJ5IiB0ZW1wbGF0ZT0ic3VtbWFyeXRlbXBsYXRlIiBzb3J0b3JkZXI9Im5hbWVfYXNjIiBsaXN0aW5ndGVtcGxhdGU9Imxpc3R0ZW1wbGF0ZSIgbGlzdGluZ3NvcnRvcmRlcj0ibGlzdHNvcnRvcmRlciJ9CmFsbG93cyB5b3UgdG8gZGlzcGxheSBhbiBpbnRlcmFjdGl2ZSBjYXRlZ29yeSBicm93c2VyLiBzb3J0b3JkZXIgY2FuIGJlOiBuYW1lX2FzYywgbmFtZV9kZXNjLCBzdW1tX2FzYywgc3VtbV9kZXNjLCBvciByYW5kb20uCmxpc3Rpbmd0ZW1wbGF0ZSBhbmQgbGlzdGluZ3NvcnRvcmRlciBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgc29ydG9yZGVyIHBhcmFtZXRlcnMgZm9yCnRoZSAic3VtbWFyeSIgbW9kZS48L3A+CjxoMz5BdXRvbWF0aWMgU2Nhbm5pbmc8L2gzPgo8cD5UaGlzIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2NhbiBmb3IgbmV3IGZpbGVzIGluIGEgZGlyZWN0b3J5IHdoZW4gYSBzdW1tYXJ5IG1vZGUgdGFnIGZvciBhIHNwZWNpZmljIGNhdGVnb3J5IGlzIHVzZWQgb24gYSBDTVNNUyBwYWdlLiAgaS5lOiA8Y29kZT57VXBsb2FkcyBjYXRlZ29yeT1jYXRlZ29yeV9uYW1lfTwvY29kZT4gd2lsbCBwZXJmb3JtIGEgc2Nhbi4gIGJ1dCA8Y29kZT57VXBsb2FkcyBjYXRlZ29yeT1hbGx9PC9jb2RlPiB3aWxsIG5vdC48L3A+CjxoMz5UaHVtYm5haWwgR2VuZXJhdGlvbiAtIERlcHJlY2F0ZWQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBmb3IgY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gIFRoZXJlIGFyZSBwcmVmZXJlbmNlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdGFiIG9mIHRoZSBVcGxvYWRzIG1vZHVsZSBhZG1pbmlzdHJhdGlvbiBwYW5lbCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBmaWxlcyB0aGF0IGFsbG93IGF1dG9tYXRpYyB0aHVtYm5haWwgZ2VuZXJhdGlvbiwgYW5kIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgdGh1bWJuYWlsIChwcmVzZXJ2aW5nIGFzcGVjdCByYXRpbykuICAgVGh1bWJuYWlscyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgdXBvbiB1cGxvYWQsIGFuZCBjYW4gYmUgZ2VuZXJhdGVkIG1hbnVhbGx5IGJ5IHNlbGVjdGluZyB0aGUgJnF1b3Q7R2VuZXJhdGUgVGh1bWJuYWlscyZxdW90OyBvcHRpb24gaW4gdGhlIGVkaXQgY2F0ZWdvcnkgZm9ybXMuLi4gYnV0IGFyZSBub3QgZ2VuZXJhdGVkIHdoZW4gbmV3IGZpbGVzIGFyZSBkZXRlY3RlZCBieSBhdXRvbWF0aWMgc2Nhbm5pbmcuPC9wPgo8aDM+WW91IFNlbmQgSXQ8L2gzPgo8cD5JdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgJnF1b3Q7eW91c2VuZGl0JnF1b3Q7IGxpa2UgZnVuY3Rpb25hbGl0eSB0byBhbGxvdyBhdXRvbWF0aWNhbGx5IGVtYWlsaW5nIHNlbGVjdGVkIHBlb3BsZSB3aXRoIGEgbGluayB0byBhIG5ld2x5IHVwbG9hZGVkIGZpbGUuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBhIHRhZyBsaWtlOiA8Y29kZT57VXBsb2FkcyBhY3Rpb249eW91c2VuZGl0IGNhdGVnb3J5PWNhdGVnb3J5bmFtZX08L2NvZGU+LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIGFsbG93aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS48L3A+CjxoMz5UaW1lIExpbWl0ZWQgQWNjZXNzPC9oMz4KPHA+VGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIG5vdGlvbiBvZiB1bmlxdWUga2V5cyB0byBhbGxvdyB0aW1lIGxpbWl0ZWQgYWNjZXNzIHRvIGNlcnRhaW4gZmlsZXMuICBUaGUgZnVuY3Rpb25hbGl0eSBhbGxvd3Mgc3BlY2lmeWluZyBhIHRpbWUgbGltaXQgKGluIGhvdXJzKSBmb3Igd2hpY2ggdGhlIGtleSBpcyB2YWxpZCwgYW5kIGEgbWF4aW11bSBudW1iZXIgb2YgZG93bmxvYWRzIG9yIGRvd25sb2FkIGF0ZW1wdHMuICBBbiBlbWFpbCBpcyBzZW50IHRvIHRoZSBkZXNpcmVkIHVzZXJzIHdpdGggdGhlIHVuaXF1ZSBVUkwuICBBZnRlciB0aGUgdGltZSBsaW1pdCwgb3IgdGhlIG51bWJlciBvZiBkb3dubG9hZHMgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIFVSTCBpcyBubyBsb25nZXIgdmFsaWQuICBUaGVzZSB1bmlxdWUgdGltZSBsaW1pdGVkIGtleXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSBhZnRlciBleHBpcnkuPC9wPgo8aDM+UmVzdHJpY2luZyBBY2Nlc3Mgd2l0aCBGRVU8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGludGVncmF0aW5nIHdpdGggdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIHRvIHJlc3RyaWN0IHRoZSB2aXNpYmlsaXR5IG9mIGNhdGVnb3JpZXMgKGRpcmVjdG9yaWVzKSB0byBjZXJ0YWluIGFsbG93ZWQgRkVVIGdyb3Vwcy4gIFlvdXIgdXNlcnMgd291bGQgaGF2ZSB0byBiZSBsb2dnZWQgaW4gdG8geW91ciB3ZWJzaXRlICh1c2luZyBGRVUpIGFuZCBhbHNvIGEgbWVtYmVyIG9mIG9uZSBvZiB0aGUgYWxsb3dlZCBncm91cHMgdG8gb2J0YWluIGFjY2Vzcy4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGluIHRoZSBjYXRlZ29yeSBlZGl0IGZvcm0uICBZb3UgY2FuIHNlbGVjdCBhIGxpc3Qgb2YgRkVVIGdyb3VwcyB3aGljaCBhcmUgYWxsb3dlZCB0byB2aWV3IGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuPC9wPgo8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgYWxzbyBhcHBsaWVzIHRvIHRoZSAmcXVvdFRpbWUgTGltaXRlZCBBY2Nlc3MmcXVvdCBmdW5jdGlvbmFsaXR5LiAgQWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgdGhhdCBjZXJ0YWluIHBlb3BsZSwgd2hvIGFsc28gaGF2ZSB0byBiZSBsb2dnZWQgaW4gdG8geW91ciB3ZWJzaXRlIGNhbiBoYXZlIGFjY2VzcyB0byBjZXJ0YWluIGZpbGVzIGZvciBhIGxpbWl0ZWQgYW1vdW50IG9mIHRpbWUuPC9wPgo8aDM+RW1haWxpbmc8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW4gZW1haWwgd2hlbmV2ZXIgYSBmaWxlIGlzIHVwbG9hZGVkLCBzZWUgdGhlIHByZWZlcmVuY2VzIHRhYi4gIEhvd2V2ZXIsIHRvIGRvIHRoaXMgdGhlIDxiPkNNU01haWxlcjwvYj4gcGEKY2thZ2UgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuICBUaGlzIGlzIGFuIDxlbT5vcHRpb25hbDwvZW0+IHN0ZXAsIGFuZCBpZiB0aGUgQ01TTWFpbGVyIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLCBub3RoaW5nIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCBvbmx5IGEgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byB0aGUgYWRtaW4gbG9nPC9wPgo8aDM+UmVwb3J0aW5nPC9oMz4KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmbGV4aWJsZSByZXBvcnRpbmcgbWVjaGFuaXNtIGZvciB2aWV3aW5nIHN0YXRpc3RjcyBhYm91dCBob3cgYSBmaWxlIHNoYXJlZCB3aXRoIHRoZSBVcGxvYWRzIG1vZHVsZSB3YXMgZG93bmxvYWRlZC4gIEl0IGluY2x1ZGVzIHRoZSBhYmlsaXR5IHRvIGN1c3RvbWl6ZSByZXBvcnQgdGVtcGxhdGVzLCBvdXRwdXQgZmllbGRzIGFuZCBmaWx0ZXJpbmcuICBGaWx0ZXJpbmcgaXMgcGVybWl0dGVkIGJ5IFVwbG9hZHMgY2F0ZWdvcnksIGZpbGVuYW1lLCBkb3dubG9hZCB1c2VyIG5hbWUsIG9yIHVzZXJuYW1lIHBhdHRlcm4sIGFuZCBieSBkYXRlLiAgSFRNTCByZXBvcnRzIGNhbiBiZSBnZW5lcmF0ZWQgaW4gdGhlIGJyb3dzZXIgd2luZG93LCBvciBlbWFpbGxlZC4gIEFkZGl0aW9uYWxseSB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydHMgQ1NWIGV4cG9ydC48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgYWJpbGl0eSB0byBzZWxlY3Qgb3V0cHV0IGZpZWxkcyBpbiB0aGUgcmVwb3J0cyBtYXkgZ2VuZXJhdGUgc29tZSBjb25mdXNpbmcgb3V0cHV0IGRlcGVuZGluZyB1cG9uIHRoZSBmaWVsZHMgY2hvc2VuIGFuZCB0aGUgcmVwb3J0IHR5cGUuICBpLmU6IGluIGEgc3VtbWFyeSByZXBvcnQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBkaXNwbGF5IGZpZWxkcyBsaWtlIGRvd25sb2FkIHVzZXJuYW1lLiAgV2hlcmVhcyBpbiBhIGRldGFpbCByZXBvcnQgaXQgZG9lcyBub3QgdXN1YWxseSBtYWtlIHNlbnNlIHRvIGRpc3BsYXkgdGhlIG51bWJlciBvZiBkb3dubG9hZHMuICBVc2UgY2F1dGlvbiB3aGVuIGdlbmVyYXRpbmcgcmVwb3J0cy48L3A+Cjx1bD4KICA8bGk+RG93bmxvYWRzIGJ5IFVzZXIKICAgIDx1bD4KICAgICAgPGxpPlN1bW1hcnkKICAgICAgICA8cD5UaGlzIHJlcG9ydCBnZW5lcmF0ZXMgb25lIGxpbmUgcGVyIG1hdGNoaW5nIHVzZXIgKHVzZXIgd2hvIGRvd25sb2FkZWQgc29tZXRoaW5nKS4gIEl0IGlzIGdyZWF0IGZvciBkaXNwbGF5aW5nIGhvdyBtdWNoIGEgdXNlciBkb3dubG9hZGVkLCBhbmQgdGhlIGxhc3QgdGltZSB0aGV5IGRvd25sb2FkZWQgYW55dGhpbmcuPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+RGV0YWlsCiAgICAgICAgPHA+VGhpcyByZXBvcnQgZ2VuZXJhdGVzIG9uZSBsaW5lIHBlciBkb3dubG9hZC4gIEl0IGRldGFpbHMgd2hhdCB0aGUgc2VsZWN0ZWQgdXNlcnMgZG93bmxvYWRlZCwgYW5kIHdoZW4uPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5Eb3dubG9hZHMgYnkgRmlsZQogICAgPHVsPgogICAgICA8bGk+U3VtbWFyeQogICAgICAgIDxwPlRoaXMgcmVwb3J0IGdlbmVyYXRlcyBvbmUgbGluZSBwZXIgbWF0Y2hpbmcgZmlsZS4gIEl0IGdyb3VwcyBldmVyeXRoaW5nIGJ5IHRoZSBmaWxlLiAgSXQgaXMgdXNlZCBmb3IgZGlzcGxheWluZyBob3cgbWFueSB0aW1lcyBhIGZpbGUgd2FzIGRvd25sb2FkZWQuPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+RGV0YWlsCiAgICAgICAgPHA+VGhpcyByZXBvcnQgZ2VuZXJhdGVzIG9uZSBsaW5lIHBlciBkb3dubG9hZC4gIEl0IGRldGFpbHMgd2hvIGRvd25sb2FkZWQgdGhlIHNlbGVjdGVkIGZpbGVzLCBhbmQgd2hlbi48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+CjxoMz5GaWxlIEluZGV4aW5nOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHN1cHBvcnRzIGluZGV4aW5nIHRoZSB3b3JkcyBvdXQgb2YgdGV4dCBhbmQgUERGIGRvY3VtZW50cyBhbmQgYWRkaW5nIHRoZSB3b3JkcyB0byB0aGUgc2VhcmNoIGluZGV4IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBtb2R1bGUuICBJbmRleGluZyB0ZXh0IGFuZCBQREYgZmlsZXMgY2FuIGJlIGEgdGltZSBjb25zdW1pbmcgYW5kIG1lbW9yeSBpbnRlbnNpdmUgb3BlcmF0aW4gKHBhcnRpY3VsYXJseSBmb3IgbGFyZ2UgZmlsZXMpIHNvIHNvbWUgc3BlY2lhbCBiZWhhdmlvciBoYXMgYmVlbiBhZGRlZCB0byBob3BlZnVsbHkgYWNjb21vZGF0ZSBtb3N0IHNpdGVzPC9wPgo8dWw+CiAgPGxpPkRvY3VtZW50cyB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgc2VhcmNoIGluZGV4IHZpYSB0aGUgYXV0b21hdGljIHNjYW5uaW5nIHByb2Nlc3MuICBUaGVyZWZvcmUgdXBsb2FkaW5nIGZpbGVzIHZpYSBGVFAgdG8gdGhlIGNhdGVnb3J5IGRpcmVjdG9yeSB3aWxsIGFsbG93IHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgYW5kIHNlbnQgYnkgY3VzdG9tZXJzLCBidXQgdGhlIGZpbGUgd2lsbCBub3QgYmUgaW5kZXhlZCBieSB0aGUgc2VhcmNoIGVuZ2luZS48L2xpPgogIDxsaT5UaGUgaW5kZXhpbmcgcHJvY2VzcyBmb3IgVGV4dCBmaWxlcyBpcyBsaW1pdGVkIHRvIHRoZSBmaXJzdCAxMCwwMDAgd29yZHMsIDUwMDAgbGluZXMsIG9yIDE1IHNlY29uZHMgb2YgcHJvY2Vzc2luZyAod2hpY2hldmVyIG9jY3VycyBmaXJzdCkuPC9saT4KICA8bGk+VGhlIGluZGV4aW5nIHByb2Nlc3MgZm9yIFBERiBmaWxlcyBpcyBsaW1pdGVkIHRvIHRoZSBmaXJzdCAxMCwwMDAgd29yZHMsIDEwMCBwYWdlcywgb3IgMTUgc2Vjb25kcyBvZiBwcm9jZXNzaW5nICh3aGljaGV2ZXIgb2NjdXJzIGZpcnN0KS48L2xpPgogIDxsaT5FZGl0aW5nIHRoZSB1cGxvYWQgd2lsbCBhbGxvdyB0aGUgdGV4dCBhbmQgcGRmIGZpbGVzIHRvIGJlIGluZGV4ZWQuPC9saT4KICA8bGk+VGhlIHNjYW4gYnV0dG9uIGluIHRoZSBhZGQvZWRpdCBjYXRlZ29yeSBwYW5lbHMgd2lsbCBhbGxvdyB0aGUgdGV4dCBhbmQgUERGIGZpbGVzIHRvIGJlIGluZGV4ZWQuICBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aW1lIGFuZCBzZXJ2ZXIgcmVzb3VyY2VzLjwvbGk+CiAgPGxpPlRoaXMgbW9kdWxlIGltcGxlbWVudHMgaW5kZXhpbmcgb2YgdGV4dCBhbmQgcGRmIGZpbGVzIHdoZW4gcmUtaW5kZXhpbmcgYWxsIGNvbnRlbnQuICBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIChtaW51dGVzIG9yIGhvdXJzKSBhbmQgc2VydmVyIHJlc291cmNlcyBkZXBlbmRpbmcgdXBvbiB0aGUgYW1vdW50IG9mIGZpbGVzIHN0b3JlZCB3aXRoaW4gdGhlIFVwbG9hZHMgbW9kdWxlLCB0aGVpciBzaXplLCBhbmQgdGhlIHZhcmlvdXMgb3B0aW9ucy48L2xpPgo8L3VsPgo8cD5UaGUgd29yZCwgbGluZSwgcGFnZSwgYW5kIHRpbWUgbGltaXRzIGRlc2NyaWJlZCBhYm92ZSBzaG91bGQgYmUgZW5vdWdoIHRvCjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBmdW5jdGlvbmFsaXR5IGV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgUERGIGRvY3VtZW50cywgc3BsaXRzIHRoZW0gaW50byAnd29yZHMnIGFuZCBhcHBsaWVzIHNvbWUgY2xlYW5pbmcgdG8gdGhlIHdvcmRzIGJlZm9yZSBwcm92aWRpbmcgdGhlbSB0byB0aGUgc2VhcmNoIG1vZHVsZS4gIEZ1bGwgdGV4dCBpbmRleGluZyBpcyBub3QgcHJvdmlkZWQsIHRoZXJlZm9yZSBwaHJhc2Ugc2VhcmNoaW5nIGlzIG5vdCBwb3NzaWJsZS4gICBBZGRpdGlvbmFsbHksIHRoZSBTZWFyY2ggbW9kdWxlIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgbGltaXRpbmcgYW5kIGNsZWFuaW5nIHRvIHRoZSB3b3JkcyBleHRyYWN0ZWQgZnJvbSBmaWxlcy48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IHBlcmZvcm0gT0NSIHRoZXJlZm9yZSB0ZXh0IGVtYmVkZGVkIGluc2lkZSBpbWFnZXMgd2hpY2ggYXJlIGVtYmVkZGVkIGluc2lkZSBQREYgZG9jdW1lbnRzIHdpbGwgbm90IGJlIGluZGV4ZWQuPC9wPgoKPGgzPlNtYXJ0eSBQbHVnaW5zOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgYWNjZXNzb3J5IHNtYXJ0eSBwbHVnaW5zIHRoYXQgYXJlIHVzZWZ1bCBmb3IgdmFyaW91cyBwdXJwb3NlcyB3aGVuIHdvcmtpbmcgd2l0aCBmaWxlcy48L3A+CjxoMz5Db250ZW50IEJsb2NrcyA8ZW0+KENNU01TIDEuNysgT25seSk8L2VtPjwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz57dXBsb2Fkc19jcmVhdGVfdGxfZmlsZX08L3N0cm9uZz4KICAgIDxwPkNvcHkgYW4gZXhpc3Rpbmcgc2VydmVyIGZpbGUgaW50byB0aGUgdXBsb2FkcyBtb2R1bGUgYW5kIGdlbmVyYXRlIGEgdGltZSBsaW1pdGVkIFVSTCBmb3IgaXQuIFRoaXMgcGx1Z2luIHdpbGwgYWxzbyB3YXRlcm1hcmssIGFuZCB0aHVtYm5haWwgaW1hZ2UgZmlsZXMgYXMgc3BlY2lmaWVkIGluIHRoZSBwcmVmZXJlbmNlcyAoZGVwcmVjYXRlZCkuPC9wPgogICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48c3Ryb25nPnNyYzwvc3Ryb25nPiAtIHN0cmluZyAtIHJlcXVpcmVkIC0gVGhlIGFic29sdXRlIHNlcnZlciBmaWxlIHNwZWNpZmljYXRpb24gdG8gdGhlIHNvdXJjZSBmaWxlLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPmNhdGVnb3J5PC9zdHJvbmc+IC0gbWl4ZWQgLSByZXF1aXJlZCAtIFRoZSBjYXRlZ29yeSBuYW1lIChzdHJpbmcpIG9yIGlkIChpbnRlZ2VyKSB0byB0aGUgZGVzdGluYXRpb24gVXBsb2FkcyBjYXRlZ29yeS48L2xpPgogICAgICA8bGk+cHJlZml4IC0gYm9vbGVhbiAtIG9wdGlvbnNsIC0gSW5kaWNhdGVzIHdldGhlciBmaWxlcyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBhIHN0cmluZyB0aGF0IGRlcGVuZHMgb24gdGhlIHNlcnZlciB0aW1lIChkZWZhdWx0IGlzIEZBTFNFKTwvbGk+CiAgICAgIDxsaT5lbWFpbCAtIHN0cmluZyAtIG9wdGlvbmFsIC0gVGllIHRoZSBnZW5lcmF0ZWQgdXJsIHRvIHRoZSBzdXBwbGllZCBlbWFpbCBhZGRyZXNzICh3b3JrIGluIHByb2dyZXNzKTwvbGk+CiAgICAgIDxsaT5ob3VycyAtIGludGVnZXIgLSBvcHRpb25hbCAtIFRoZSBudW1iZXIgb2YgaG91cnMgdGhpcyBVUkwgd2lsbCBiZSB2YWxpZCBmb3IsIGlmIG5vdCBzcGVjaWZpZWQgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC48L2xpPgogICAgICA8bGk+ZG93bmxvYWRzIC0gaW50ZWdlciAtIG9wdGlvbmFsIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkIHVzaW5nIHRoaXMgdXJsLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC48L2xpPgogICAgICA8bGk+YXNzaWduIC0gc3RyaW5nIC0gb3B0aW9uYWwgLSBBIHNtYXJ0eSB2YXJpYWJsZSBuYW1lIHRvIGFzc2lnbiB0aGUgb3V0cHV0IHRvLjwvbGk+CiAgICA8L3VsPgogICAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT57dXBsb2Fkc19jcmVhdGVfdGxfZmlsZSBzcmM9JnF1b3Q7L3RoZS9jb21wbGV0ZS9wYXRoL3RvL3RoZS9maWxlLmpwZyZxdW90OyBwcmVmaXg9dHJ1ZSBkb3dubG9hZHM9NSBob3Vycz03MiBjYXRlZ29yeT0mcXVvdDtzb21lIGNhdGVnb3J5JnF1b3Q7IGFzc2lnbj0mcXVvdDt0aGVfdXJsJnF1b3Q7fTwvcHJlPgogICAgPC9wPgogIDwvbGk+CjwvdWw+CjxwPkZvciBDTVNNUyAxLjcgdGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBjb250ZW50IGVkaXRvciBhbmQgZXhwb3J0aW5nIGEgY29udGVudCBibG9jayB0aGF0IGFsbG93cyBzZWxlY3RpbmcgYW4gdXBsb2FkcyBjYXRlZ29yeSB3aXRoaW4gdGhlIGVkaXQgY29udGVudCBwYWdlLCBmb3IgbGF0ZXIgdXNlIHdpdGhpbiB0aGUgdGVtcGxhdGUuPC9wPgo8cD5pLmU6IHBsYWNpbmcgdGhlIGZvbGxvd2luZyB0YWcgd2l0aGluIGEgcGFnZSB0ZW1wbGF0ZSA8Y29kZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYmxvY2s9JnF1b3Q7dXBsb2Fkc19jYXRlZ29yeSZxdW90OyB0eXBlPSZxdW90O2NhdGVnb3J5c2VsZWN0JnF1b3Q7fTwvY29kZT4sIHdpbGwgYWRkIGEgZHJvcGRvd24gYm94IGluIHRoZSBlZGl0IGNvbnRlbnQgdmlldyBvZiBhbnkgcGFnZSB1dGlsaXppbmcgdGhhdCBwYWdlIHRlbXBsYXRlLjwvcD4KPHA+VGhpcyBjb250ZW50IGJsb2NrIGFsc28gYWNjZXB0cyBzb21lIG9wdGlvbmFsIHBhcmFtZXRlcnM6PC9wPgo8dWw+CiAgPGxpPjx1PnNlbGVjdG9uZTwvdT4KICAgIDxwPlRoaXMgcGFyYW1ldGVyIGluc2VydHMgYSAmcXVvdDtTZWxlY3QgT25lJnF1b3Q7IGl0ZW0gaW50byB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzLCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gc2VsZWN0IGEgdmFsaWQgY2F0ZWdvcnkgd2hlbiB0aGUgY29udGVudCBwYWdlIGlzIHNhdmVkLjwvcD4KICA8L2xpPgogIDxsaT48dT5hbGxvd2FsbDwvdT4KICAgIDxwPlRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgY29udGVudCBlZGl0b3IgdG8gc2VsZWN0ICZxdW90O0FsbCZxdW90OyBhcyBhIGNhdGVnb3J5IGZvciB0aGUgdXBsb2FkcyBkaXNwbGF5LjwvcD4KICA8L2xpPgo8L3VsPgo8aDQ+SG93IHdvdWxkIEkgdXNlIGl0PzwvaDQ+CjxwPkhlcmUgaXMgc29tZSBleGFtcGxlIGNvZGU6PC9wPgo8cHJlPgp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYmxvY2s9JnF1b3Q7Y2F0ZWdvcnlzZWxlY3QmcXVvdDsgbGFiZWw9JnF1b3Q7U2VsZWN0IGFuIHVwbG9hZHMgY2F0ZWdvcnkmcXVvdDsgc2VsZWN0b25lPTEgYXNzaWduPSZxdW90O3RtcCZxdW90O30Ke1VwbG9hZHMgY2F0ZWdvcnk9JHRtcH0KPC9wcmU+CjxoMz5EZXByZWNhdGVkOjwvaDM+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIHRodW1ibmFpbCBhbmQgd2F0ZXJtYXJrIGNhcGFiaWxpdGllcyB0aGF0IGV4aXN0IGluIHRoaXMgbW9kdWxlIGFyZSBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIG92ZXIgdGltZS4gIFRoZSBDR1NtYXJ0SW1hZ2UgbW9kdWxlIHByb3ZpZGVzIGZvciBiZXR0ZXIgb24gZGVtYW5kLCBpbWFnZSBtYW5pcHVsYXRpb24sIGNhY2hpbmcsIGFuZCBlbWJlZGRpbmcuPC9wPgo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4KPHA+PGI+Tm90ZTo8L2I+IFRoaXMgbW9kdWxlIGRvZXMgbm90IGJ5cGFzcyBvciBnZXQgcGFzdCBhbnkgZmlsZSBzaXplIGxpbWl0YXRpb25zIGluIHBocC4gIEl0IHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlbS4gIFRoZXJlZm9yZSB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHlvdXIgcGhwLmluaSBmaWxlLCB5b3VyIENNU01TIGNvbmZpZy5waHAgZmlsZSBhbmQvb3IgeW91ciBodHRwZC5jb25mIGZpbGUocykgdG8gYWxsb3cgeW91IHRvIHVwbG9hZCBmaWxlcyBhcyBsYXJnZSBhcyB3aGF0IHlvdSBoYXZlIHNldCBpbiB0aGUgdXBsb2FkcyBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPgo8aDM+QXBhY2hlIE5vdGVzPC9oMz4KPHA+SW4gb3JkZXIgdG8gYWxsb3cgbGFyZ2UgZmlsZSB1cGxvYWRzLCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBpbiB5b3VyIHBocC5pbmkgIEluIGFkZGl0aW9uLCB0aGUgTGltaXRSZXF1ZXN0Qm9keSBwYXJhbWV0ZXIgaW4geW91ciBhcGFjaGUgY29uZmlndXJhdGlvbiwgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyPC9wPgo8cD5Ob3RlOiAgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIGtpbG9ieXRlcywgb3IgbWVnYWJ5dGVzLCBob3dldmVyIHRoZSBMaW1pdFJlcXVldEJvZHkgcGFyYW1ldGVyIGlzIG9ubHkgc3BlY2lmaWVkIGluIGJ5dGVzPC9wPgo8cD48c3Ryb25nIHN0eWxlPSJjb2xvcjogcmVkOyI+V2FybmluZzwvc3Ryb25nPiAtIFRoZSBwcm9wZXIgYmVoYXZpb3VyIG9mIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gbnVtZXJvdXMgcGhwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgVGhlc2UgaW5jbHVkZSA8ZW0+KGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pPC9lbT4sIHBocCdzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4KPHA+PHN0cm9uZyBzdHlsZT0iY29sb3I6IHJlZDsiPldhcm5pbmc8L3N0cm9uZz4gLSBVc2luZyB0aGlzIG1vZHVsZSB0byBhbGxvdyBzaXRlIHZpc2l0b3JzIHRvIHNlbmQgZmlsZXMgKGVpdGhlciB1c2luZyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIG9yIHRoZSB5b3VzZW5kaXQgbWVjaGFuaXNtKSBtYXkgbm90IHdvcmsgd2l0aCBvdXRwdXQgY29tcHJlc3Npb24gZW5hYmxlZC4gIFBsZWFzZSBlbnN1cmUgdGhhdCBvdXRwdXRfY29tcHJlc3Npb24gaXMgc2V0IHRvIGZhbHNlIGluIHRoZSBjb25maWcucGhwLjwvcD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhlIG1vZHVsZSBhdXRob3IgaXMgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5BIGJ1ZyB0cmFja2luZyBhbmQgZmVhdHVyZSByZXF1ZXN0IHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIG1vZHVsZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3VwbG9hZHMiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+CjxoMz5EZXBlbmRlbmNpZXM8L2gzPjx1bD48bGk+Q0dFeHRlbnNpb25zID0mZ3Q7IDEuNDYuMzwvbGk+PGxpPkNHU2ltcGxlU21hcnR5ID0mZ3Q7IDEuODwvbGk+PC91bD48aDM+UGFyYW1ldGVyczwvaDM+PHVsPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxhbmc9ImVuX1VTIiAtIFBhcmFtZXRlciBpcyB1c2VkIHRvIHNwZWNpZnkgd2hhdCBsYW5ndWFnZSB0byB1c2UgZm9yIGRpc3BsYXkgb24gdGhlIGZyb250ZW5kLiBOb3QgYWxsIG1vZHVsZXMgc3VwcG9ydCBvciBuZWVkIHRoaXMuPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBub2NhY2hlPSIwIiAtIC0tIE1pc3NpbmcgTGFuZ3VhZ2VzdHJpbmcgLSBtb2R1bGU6VXBsb2FkcyBzdHJpbmc6cGFyYW1fbm9jYWNoZS0tPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBrZXk9InZhbHVlIiAtIFByb3ZpZGUgYW4gYWRkaXRpb25hbCBrZXkgdG8gdGhlIG1vZHVsZSBmb3IgZnVydGhlciBvcmdhbml6aW5nIHVwbG9hZHMuICBUaGlzIGtleSBjb3VsZCBiZSBhbiBlbmNvZGVkIHN0cmluZyBsaWtlOiAnZmV1c2Vyczp1aWQnLCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBub2F1dGhvcj0iMSIgLSBIaWRlIHRoZSBhdXRob3IgZmllbGQgZnJvbSB0aGUgdXBsb2FkIGZvcm0uICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gbW9kZT0ndXBsb2FkJy4gIElmIFRoZSBGcm9udGVuZFVzZXJzIG1vZHVsZSBpcyBwcmVzZW50LCBhbmQgYSB1c2VyIGlzIGN1cnJlbnRseSBsb2dnZWQgaW4sIGEgaGlkZGVuIGZpZWxkIHdpbGwgaG9sZCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VybmFtZTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdXBsb2FkX2lkPSJpZCIgLSAKdXBsb2FkX2lkPSJpZCIgLSBzcGVjaWZ5IGEgc2luZ2xlIGZpbGUgZm9yIHRoZSB1cmwvbGluayxkZXRhaWxlZCBvciBzaW5nbGUgbW9kZXMgKGFib3ZlKTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gY291bnQ9IiIgLSBjb3VudD0iTiIgPHA+QSBwYXJhbWV0ZXIgdG8gbGltaXQgdGhlIHJlc3VsdHMgdG8gTiBlbnRyaWVzIHBlciBwYWdlLjwvcD48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHNvcnRvcmRlcj0iZGF0ZV9hc2MiIC0gCiAgPHA+U29ydCBPcmRlcnMKICA8dWw+CiAgPGxpPjxlbT5kYXRlX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGF0ZTwvbGk+CiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkYXRlPC9saT4KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBuYW1lPC9saT4KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIG5hbWU8L2xpPgogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIHNpemU8L2xpPgogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgc2l6ZTwvbGk+CiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBhdXRob3I8L2xpPgogIDxsaT48ZW0+YXV0aG9yX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBhdXRob3I8L2xpPgogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4KICA8bGk+PGVtPmlwX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+CiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+CiAgPGxpPjxlbT5kb3dubG9hZHNfYXNjPC9lbT4gLSBTb3J0IGJ5IGRvd25sb2FkIGNvdW50IGluIGFzY2VuZGluZyBvcmRlci48L2xpPgogIDxsaT48ZW0+ZG93bmxvYWRzX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZG93bmxvYWQgY291bnQgaW4gZGVzY2VuZGluZyBvcmRlci48L2xpPgogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBSYW5kb20gc29ydCBvcmRlcjwvbGk+CiAgPC91bD4KICA8L3A+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmaWxlX2V4dGVuc2lvbnM9ImV4dDEsZXh0MixleHQzIiAtIApmaWxlX2V4dGVuc2lvbnM9ImV4dDEsZXh0MixleHQzIgo8cD52YWxpZCBvbmx5IHdoZW4gbW9kZT11cGxvYWQsIHRoaXMgcGFyYW1ldGVyIGxpbWl0cyB0aGUgdHlwZXMgb2YgZmlsZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQuICBJdCBvdmVycmlkZXMgYW55IHNldHRpbmdzIGluIHRoZSBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPjwvbGk+PGxpPmNhdGVnb3J5PSJ1cGxvYWRfY2F0ZWdvcnkiIC0gCmNhdGVnb3J5PSJuYW1lIgo8cD48Yj5Ob3RlOjwvYj4gQ2F0ZWdvcnkgY2FuIGJlICJhbGwiLCB3aGljaCB3aWxsIGxpc3QgYWxsIG9mIHRoZSB1cGxvYWRzIGZyb20gYWxsIDxlbT5saXN0YWJsZTwvZW0+IGNhdGVnb3JpZXM8L3A+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmaWx0ZXI9IiIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIHN1bW1hcnkgdmlldywgdGhpcyBwYXJhbWV0ZXIgd2lsbCBlbmFibGUgZGlzcGxheSBvZiB0aGUgZmlsdGVyaW5nIGZvcm0uICBJZiB0aGlzIHBhcmFtZXRlciBpcyBzZXQgdG8gYW55IHZhbHVlIDxlbT4oYW5kIHRoZSBmaWVsZHMgc3RpbGwgYXBwZWFyIGluIHRoZSBzdW1tYXJ5IHRlbXBsYXRlKTwvZW0+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBub19pbml0aWFsPSIxIiAtIERvIG5vdCBkaXNwbGF5IGFueSBpbml0aWFsIHJlc3VsdHMgd2hlbiB0aGUgZmlsdGVyIGlzIG9uPC9saT48bGk+bW9kZT0ic3VtbWFyeSIgLSAKICA8dWw+CiAgPGxpPjxlbT5kZXRhaWxlZDwvZW0+IC0gRGlzcGxheSBhIGRldGFpbGVkIHJlcG9ydCBmb3IgYSBzaW5nbGUgdXBsb2FkLjwvbGk+CiAgPGxpPjxlbT5zaW5nbGU8L2VtPiAtIEFsaWFzIGZvciB0aGUgZGV0YWlsZWQgbW9kZS48L2xpPgogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBEaXNwbGF5IGEgZm9ybSB0byBhbGxvdyBhIGZyb250ZW5kIHVzZXIgdG8gdXBsb2FkIGEgZmlsZTwvbGk+CiAgPGxpPjxlbT51cmwgPGk+b3I8L2k+IGxpbms8L2VtPiAtIERpc3BsYXkgYSBsaW5rIHRvIGEgZmlsZTwvbGk+CiAgPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBEaXNwbGF5IGEgc3VtbWFyaXplZCBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgc3BlY2lmaWVkIGNhdGVnb3J5PC9saT4KICA8L3VsPjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gdGVtcGxhdGU9IiIgLSBVc2UgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBmb3IgdGhpcyByZXBvcnQgb3IgZm9ybS4gIFRoZSBtb2RlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiB0ZW1wbGF0ZSBpcyByZXF1aXJlcmQsIGFuZCB0aGVuIGEgbmFtZSBtYXRjaCBpcyBwZXJmb3JtZWQgd2l0aGluIHRoYXQgdHlwZS48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHRlbXBsYXRlPSIiIC0gVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoZSBkZXRhaWwgcmVwb3J0LjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbm9jYXB0Y2hhPSIiIC0gRGlzYWJsZSBjYXB0Y2hhIHN1cHBvcnQgKG9uIGJ5IGRlZmF1bHQpIGluIHRoZSB1cGxvYWQgZm9ybTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZmlsZXR5cGVzPSIiIC0gRGlzcGxheSBvbmx5IGZpbGVzIHdob3NlIHR5cGUgbWF0Y2hlcyB0aGlzIGNvbW1hIHNlcGFyYXRlZCBsaXN0PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBzZWxlY3RuYW1lPSIiIC0gd2hlbiB1c2luZyB0aGUgJ3NlbGVjdCcgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZDwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc2VsZWN0bm9uZT0iIiAtIFdoZW4gdXNpbmcgdGhlICdzZWxlY3QnIG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3ZXRoZXIgJ25vbmUnIGlzIGEgdmFsaWQgY2hvaWNlLjwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc2VsZWN0dmFsdWU9IiIgLSBXaGVuIHVzaW5nIHRoZSAnc2VsZWN0JyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgZmllbGQgdmFsdWU8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IHNlbGVjdGZvcm09IiIgLSBXaGVuIHVzaW5nIHRoZSAnc2VsZWN0JyBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyB0aGUgZm9ybWlkIG9mIHRoZSBwYXJlbnQgZm9ybS4gIFVzZWQgdG8gaGFuZGxlIHBhcmFtZXRlciBwYXNzaW5nPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBwcmVmaXg9IjAiIC0gQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdldGhlciBmaWxlIG5hbWVzIHNob3VsZCBiZSBwcmVmaXhlZDwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gcHJlZml4X2ZldT0iMCIgLSBBIGJvb2xlYW4gcGFyYW1ldGVyIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByZWZpeCBzaG91bGQgYmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBhdXRob3IsIGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBwcmVmaXggaXMgdGhlIGN1cnJlbnQgdGltZSAoaW4gZGVjaGV4IGZvcm1hdCk8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGRldGFpbHBhZ2U9IiIgLSBVc2VmdWwgZm9yIGRpc3BsYXlpbmcgYSBkZXRhaWwgcmVwb3J0IHVzaW5nIGEgZGlmZmVyZW50IHBhZ2UgdGVtcGxhdGUsIHRoaXMgcGFyYW1ldGVyIHRha2VzIHRoZSBwYWdlIGlkIG9yIHBhZ2UgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGV0YWlsIHJlcG9ydDwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gbGlzdGluZ3RlbXBsYXRlPSIiIC0gVGVtcGxhdGUgdG8gdXNlIGZvciBjYXRlZ29yeSBsaXN0aW5ncyBhZnRlciBjbGlja3Rocm91Z2ggZnJvbSBDYXRlZ29yeSBTdW1tYXJ5IHBhZ2U8L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGxpc3Rpbmdzb3J0b3JkZXI9IiIgLSBTb3J0IG9yZGVyIChhbGEgcGFyYW1fc29ydG9yZGVyKSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBzZW5kZmlsZXBhZ2U9IiIgLSBTcGVjaWZ5IHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgc2VuZCBhIGZpbGUgZm9ybTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gc3VtbWFyeXBhZ2U9IiIgLSBBcHBsaWNhYmxlIG9ubHkgdG8gdGhlIGNhdGVnb3J5bGlzdCBhY3Rpb24gdGhpcyBwYXJhbWV0ZXIgYWNjZXB0cyBhIHBhZ2UgYWxpYXMgb3IgaWQgb2YgdGhlIHBhZ2UgdG8gbGluayB0byBmb3Igc3BlY2lmaWMgY2F0ZWdvcnkgc3VtbWFyeSB2aWV3cy48L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGFjdGlvbj0iZGVmYXVsdCIgLSA8cD5TcGVjaWZpZXMgdGhlIGJlaGF2aW91ciBvZiB0aGUgbW9kdWxlIHRhZy4gIFBvc3NpYmxlIHZhbHVlcyBhcmU6PC9wPgo8dWw+CiAgPGxpPmNhdGVnb3J5bGlzdCAtIERpc3BsYXkgYSBsaXN0IG9mIGNhdGVnb3JpZXMgdGhhdCB0aGUgY3VycmVudCB1c2VyIGlzIGFibGUgdG8gYnJvd3NlIHRvLiAgTm90ZTogZHVlIHRvIHRoZSBmbGV4aWJpbGl0eSBvZiBwZXJtaXNzaW9ucyBhdmFpbGFibGUgdG8gZmlsZXMgYW5kIGNhdGVnb3JpZXMsIHRoZSBjYXRlZ29yeWxpc3QgYWN0aW9uIGRvZXMgTk9UIGRldGVjdCBpZiB0aGVyZSBhcmUgdmlld2FibGUgZmlsZXMgZm9yIHRoZSBzcGVjaWZpYyBjYXRlZ29yaWVzLDwvbGk+CiAgPGxpPmRlZmF1bHQgLSAodGhlIGRlZmFmYXVsdCBiZWhhdmlvcik8L2xpPgogIDxsaT5kZXRhaWwgLSB0byBkaXNwbGF5IGEgZGV0YWlsIHZpZXcgb2YgYSBzaW5nbGUgZmlsZSBiYXNlZCBvbiB0aGUgdXBsb2FkX2lkLjwvbGk+CiAgPGxpPnlvdXNlbmRpdCAtIHRvIGRpc3BsYXkgYSBmb3JtIHRvIGFsbG93IHVwbG9hZGluZyBhIGZpbGUsIGFuZCBzZW5kaW5nIGl0IHRvIG51bWVyb3VzIGFkZHJlc3NlcyBpbiBvbmUgc3RlcDwvbGk+CjwvdWw+PC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmaWVsZG5hbWU9IiIgLSAtLSBNaXNzaW5nIExhbmd1YWdlc3RyaW5nIC0gbW9kdWxlOlVwbG9hZHMgc3RyaW5nOnBhcmFtX2ZpZWxkbmFtZS0tPC9saT48bGk+PGVtPihvcHRpb25hbCk8L2VtPiBmaWVsZHZhbD0iIiAtIC0tIE1pc3NpbmcgTGFuZ3VhZ2VzdHJpbmcgLSBtb2R1bGU6VXBsb2FkcyBzdHJpbmc6cGFyYW1fZmllbGR2YWwtLTwvbGk+PGxpPjxlbT4ob3B0aW9uYWwpPC9lbT4gZmllbGRuYW1lMj0iIiAtIC0tIE1pc3NpbmcgTGFuZ3VhZ2VzdHJpbmcgLSBtb2R1bGU6VXBsb2FkcyBzdHJpbmc6cGFyYW1fZmllbGRuYW1lLS08L2xpPjxsaT48ZW0+KG9wdGlvbmFsKTwvZW0+IGZpZWxkdmFsMj0iIiAtIC0tIE1pc3NpbmcgTGFuZ3VhZ2VzdHJpbmcgLSBtb2R1bGU6VXBsb2FkcyBzdHJpbmc6cGFyYW1fZmllbGR2YWwtLTwvbGk+PC91bD4=]]></help>
	<about><![CDATA[PGJyIC8+QXV0aG9yOiBjYWxndXkxMDAwICZsdDtjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJmd0OzxiciAvPjxiciAvPlZlcnNpb246IDEuMTkuMTxiciAvPjxiciAvPkNoYW5nZSBIaXN0b3J5OjxiciAvPi9jaGFuZ2Vsb2cuaW5jPGJyIC8+]]></about>
	<description><![CDATA[A module that allows users to upload files, and allows you to manage them.]]></description>
	<requires>
	  <requiredname>CGExtensions</requiredname>
	  <requiredversion>1.46.3</requiredversion>
	</requires>
	<requires>
	  <requiredname>CGSimpleSmarty</requiredname>
	  <requiredversion>1.8</requiredversion>
	</requires>
	<file>
	  <filename>/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/.cms_ignore</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Y29tcG9zZXIuKgo=]]></data>
	</file>
	<file>
	  <filename>/action.addcategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpICkgcmV0dXJuOwoKLy8gcG9wdWxhdGUgdGhlIHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlJywgJHRoaXMtPkxhbmcgKCdhZGRjYXRlZ29yeScpKTsKJHNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCdkb19hZGRjYXRlZ29yeScsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7Cgokcm93ID0gYXJyYXkoJ3VwbG9hZF9jYXRlZ29yeV9pZCc9Pi0xLAoJICAgICAndXBsb2FkX2NhdGVnb3J5X25hbWUnPT4nJywKCSAgICAgJ3VwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbic9PicnLAoJICAgICAndXBsb2FkX2NhdGVnb3J5X3BhdGgnPT4nJywKCSAgICAgJ3VwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSc9PjEsCgkgICAgICd1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzJz0+JycsCgkgICAgICd1cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlJz0+MCwKCSAgICAgJ3VwbG9hZF9jYXRlZ29yeV9leHBpcmVzX2hycyc9PjAsCgkgICAgICd1cGxvYWRfY2F0ZWdvcnlfc2Nhbm5hYmxlJz0+MSwKCSAgICAgJ3VwbG9hZF9jYXRlZ29yeV91c2VycGVybXMnPT4wLAoJICAgICAndXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXMnPT4nJwoJICAgICApOwokc21hcnR5LT5hc3NpZ24oJ2RhdGEnLCRyb3cpOwoKJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKaWYoICRmZXVzZXJzICkgewogIC8vIGdldCBhIGxpc3Qgb2YgdGhlIGdyb3VwcyBpbiB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUKICAkZ3JvdXBzID0gJGZldXNlcnMtPkdldEdyb3VwTGlzdCgpOwogICRzZWxncm91cHMgPSBhcnJheSgpOwogIGlmKCBjb3VudCgkZ3JvdXBzKSA+IDAgKSB7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2dyb3VwbGlzdCcsJHNlbGdyb3Vwcyk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2ZldV9ncm91cHMnLGFycmF5X2ZsaXAoJGdyb3VwcykpOwogIH0KfQoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.addfiletype.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBVcGxvYWRzJykgKSByZXR1cm47CgppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkgJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsJHBhcmFtcyk7CgokaWNvbmxpc3QgPSBhcnJheSgpOwokZGlyID0gZGlybmFtZShfX0ZJTEVfXykuRElSRUNUT1JZX1NFUEFSQVRPUi4naW1hZ2VzJzsKaWYoIGlzX2RpciggJGRpciApICkgewogICAgaWYoICRkaCA9IG9wZW5kaXIoJGRpcikgKSB7CiAgICAgICAgd2hpbGUoKCRmaWxlID0gcmVhZGRpcigkZGgpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgaWYoIGlzX2ZpbGUoICRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZSApICkgJGljb25saXN0WyRmaWxlXSA9ICRmaWxlOwogICAgICAgIH0KICAgICAgICBjbG9zZWRpcigkZGgpOwogICAgfQp9CgokaGlkZGVuID0gJyc7CiRuYW1lID0gJyc7CiRleHRlbnNpb25zID0gJyc7CiRkZXNjcmlwdGlvbiA9ICcnOwokaWNvbiA9ICcnOwppZiggaXNzZXQoICRwYXJhbXNbJ3R5cGVpZCddICkgKSB7CiAgICAvLyBnZXQgdGhlIGRhdGEgb3V0IG9mIHRoZSBkYXRhYmFzZSwgd2UncmUgb2J2aW91c2x5IGVkaXRpbmcgc29tZXRoaW5nCiAgICAkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsJ3R5cGVpZCcsJHBhcmFtc1sndHlwZWlkJ10pOwogICAgJHEgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmlsZXR5cGVzIFdIRVJFIGlkID0gPyI7CiAgICAkcm93ID0gJGRiLT5HZXRSb3coICRxLCBhcnJheSggJHBhcmFtc1sndHlwZWlkJ10gKSApOwogICAgaWYoICEkcm93ICkgewogICAgICAgICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ub3N1Y2hyb3cnKSk7CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgJG5hbWUgPSAkcm93WyduYW1lJ107CiAgICAkZGVzY3JpcHRpb24gPSAkcm93WydkZXNjcmlwdGlvbiddOwogICAgJGV4dGVuc2lvbnMgPSAkcm93WydleHRlbnNpb25zJ107CiAgICAkaWNvbiA9ICRyb3dbJ2ltYWdlJ107Cn0KCi8vIGlmIGluIHRoZSBwYXJhbXMgYXJyYXksIHRoZW4gdGhlIHZhbHVlcyBpbiB0aGVyZQovLyB3aWxsIG92ZXJyaWRlIHRob3NlIGluIHRoZSBkYXRhYmFzZQppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfbmFtZSddKSApICRuYW1lID0gJHBhcmFtc1snaW5wdXRfbmFtZSddOwppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfZGVzY3JpcHRpb24nXSkgKSAkZGVzY3JpcHRpb24gPSAkcGFyYW1zWydpbnB1dF9kZXNjcmlwdGlvbiddOwppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfZXh0ZW5zaW9ucyddKSApICRleHRlbnNpb25zID0gJHBhcmFtc1snaW5wdXRfZXh0ZW5zaW9ucyddOwppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfaWNvbiddKSApICRpY29uID0gJHBhcmFtc1snaW5wdXRfaWNvbiddOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsKICAgIC8vIHRoZSBmb3JtIHdhcyBzdWJtaXR0ZWQKICAgIGlmKCB0cmltKCRuYW1lKSA9PSAnJyApIHsKICAgICAgICAkdGhpcy0+U2hvd0Vycm9ycygnZXJyb3JfbWlzc2luZ25hbWUnKTsKICAgIH0KICAgIGVsc2UgaWYoIHRyaW0oJGV4dGVuc2lvbnMpID09ICcnICkgewogICAgICAgICR0aGlzLT5TaG93RXJyb3JzKCdlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucycpOwogICAgfQogICAgZWxzZSBpZiggdHJpbSgkaWNvbikgPT0gJycgKSB7CiAgICAgICAgJHRoaXMtPlNob3dFcnJvcnMoJ2Vycm9yX21pc3NpbmdpY29uJyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1sndHlwZWlkJ10pICkgewogICAgICAgICAgICAvLyBVcGRhdGUgYW4gZXhpc3RpbmcgcmVjb3JkCiAgICAgICAgICAgICRxID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmlsZXR5cGVzIFNFVCBuYW1lPT8sZGVzY3JpcHRpb249PyxleHRlbnNpb25zPT8saW1hZ2U9PyBXSEVSRSBpZCA9ID8iOwogICAgICAgICAgICAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggdHJpbSgkbmFtZSksIHRyaW0oJGRlc2NyaXB0aW9uKSwgdHJpbSgkZXh0ZW5zaW9ucyksIHRyaW0oJGljb24pLCAkcGFyYW1zWyd0eXBlaWQnXSApICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAvLwogICAgICAgICAgICAvLyBJbnNlcnQgYSBuZXcgcmVjb3JkCiAgICAgICAgICAgIC8vCgogICAgICAgICAgICAvLyBHZXQgYSBuZXcgSUQKICAgICAgICAgICAgJG5ld2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlc19zZXEiKTsKCiAgICAgICAgICAgIC8vIEZpbmQgdGhlIG1heGltdW0gc29ydCBvcmRlcgogICAgICAgICAgICAkdHEgPSAiU0VMRUNUIG1heChzb3J0b3JkZXIpIGFzIHNvcnRvcmRlciBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWxldHlwZXMiOwogICAgICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coICR0cSApOwoKICAgICAgICAgICAgJHEgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlcyAoaWQsc29ydG9yZGVyLG5hbWUsZGVzY3JpcHRpb24sZXh0ZW5zaW9ucyxpbWFnZSkgVkFMVUVTICg/LD8sPyw/LD8sPykiOwogICAgICAgICAgICAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSgkbmV3aWQsJHJvd1snc29ydG9yZGVyJ10rMSwgdHJpbSgkbmFtZSksdHJpbSgkZGVzY3JpcHRpb24pLCB0cmltKCRleHRlbnNpb25zKSx0cmltKCRpY29uKSkpOwogICAgICAgIH0KCiAgICAgICAgLy8gcmVkaXJlY3QgYmFjayB0byB0aGUgdGFiCiAgICAgICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsJHBhcmFtcyk7CiAgICB9Cn0KCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwkcGFyYW1zWydhY3Rpb24nXSwkcmV0dXJuaWQsJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CiRzbWFydHktPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X25hbWUnLCR0aGlzLT5MYW5nKCduYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9kZXNjcmlwdGlvbicsJHRoaXMtPkxhbmcoJ2Rlc2NyaXB0aW9uJykpOwokc21hcnR5LT5hc3NpZ24oJ3Byb21wdF9leHRlbnNpb25zJywkdGhpcy0+TGFuZygnZXh0ZW5zaW9ucycpKTsKJHNtYXJ0eS0+YXNzaWduKCdwcm9tcHRfaWNvbicsJHRoaXMtPkxhbmcoJ2ljb24nKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfbmFtZScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X25hbWUnLCRuYW1lLDQwKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfZGVzY3JpcHRpb24nLCR0aGlzLT5DcmVhdGVUZXh0QXJlYSh0cnVlLCRpZCwkZGVzY3JpcHRpb24sJ2lucHV0X2Rlc2NyaXB0aW9uJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2V4dGVuc2lvbnMnLCR0aGlzLT5DcmVhdGVJbnB1dFRleHQoJGlkLCdpbnB1dF9leHRlbnNpb25zJywkZXh0ZW5zaW9ucyw0MCkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2ljb24nLCR0aGlzLT5DcmVhdGVJbnB1dERyb3Bkb3duKCRpZCwnaW5wdXRfaWNvbicsJGljb25saXN0LC0xLCRpY29uKSk7CmlmKCBpc3NldCgkcGFyYW1zWydhY3RpdmVfdGFiJ10pICkgJGhpZGRlbiAuPSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdhY3RpdmVfdGFiJywkcGFyYW1zWydhY3RpdmVfdGFiJ10pOwokc21hcnR5LT5hc3NpZ24oJ2hpZGRlbicsJGhpZGRlbik7CiRzbWFydHktPmFzc2lnbignc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2NhbmNlbCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnY2FuY2VsJywkdGhpcy0+TGFuZygnY2FuY2VsJykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRkZmlsZXR5cGUudHBsJyk7Ci8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_add_field.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSByZXR1cm47CgojCiMgSW5pdGlhbGl6YXRpb24KIwokdGhpcy0+U2V0Q3VycmVudFRhYignZmllbGRzJyk7CiRzdGF0dXMgPSAnJzsKJG1zZyA9ICcnOwokZmllbGQgPSBhcnJheSgnbmFtZSc9PicnLCd0eXBlJz0+J3RleHRpbnB1dCcsJ2F0dHJpYnMnPT4nJywnaW9yZGVyJz0+MSwncHVibGljJz0+MSk7CiRmaWVsZFsnYXR0cmliJ10gPSBhcnJheSgpOwokeWVzbm8gPSBhcnJheSgxPT4kdGhpcy0+TGFuZygneWVzJyksMD0+JHRoaXMtPkxhbmcoJ25vJykpOwokdHlwZXMgPSBhcnJheSgndGV4dGlucHV0Jz0+JHRoaXMtPkxhbmcoJ2ZpZWxkdHlwZV90ZXh0aW5wdXQnKSwKCSAgICAgICAndGV4dGFyZWEnPT4kdGhpcy0+TGFuZygnZmllbGR0eXBlX3RleHRhcmVhJyksCgkgICAgICAgJ2NoZWNrYm94Jz0+JHRoaXMtPkxhbmcoJ2ZpZWxkdHlwZV9jaGVja2JveCcpLAoJICAgICAgICdkcm9wZG93bic9PiR0aGlzLT5MYW5nKCdmaWVsZHR5cGVfZHJvcGRvd24nKSwKCSAgICAgICAnbXVsdGlzZWxlY3QnPT4kdGhpcy0+TGFuZygnZmllbGR0eXBlX211bHRpc2VsZWN0JykpOwoKIwojIFNldHVwCiMKCiMKIyBHZXQgdGhlIGRhdGEKIwppZiggaXNzZXQoJHBhcmFtc1snZmlkJ10pICkgewogICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBXSEVSRSBpZCA9ID8nOwogICAgJHRtcCA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgoaW50KSRwYXJhbXNbJ2ZpZCddKSk7CiAgICBpZiggJHRtcCApIHsKICAgICAgICAkZmllbGQgPSAkdG1wOwogICAgICAgICRmaWVsZFsnYXR0cmliJ10gPSB1bnNlcmlhbGl6ZSgkZmllbGRbJ2F0dHJpYnMnXSk7CiAgICB9Cn0KCiMKIyBQcm9jZXNzIGZvcm0gdmFsdWVzCiMKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApCiAgewogICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKICB9CmlmKCBpc3NldCgkcGFyYW1zWyduYW1lJ10pICkKICB7CiAgICAkZmllbGRbJ25hbWUnXSA9IHRyaW0oJHBhcmFtc1snbmFtZSddKTsKICB9CmlmKCBpc3NldCgkcGFyYW1zWyd0eXBlJ10pICkKICB7CiAgICAkZmllbGRbJ3R5cGUnXSA9ICRwYXJhbXNbJ3R5cGUnXTsKICB9CmlmKCBpc3NldCgkcGFyYW1zWydwdWJsaWMnXSkgKQogIHsKICAgICRmaWVsZFsncHVibGljJ10gPSAkcGFyYW1zWydwdWJsaWMnXTsKICB9CmZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKQp7CiAgaWYoICFzdGFydHN3aXRoKCRrZXksJ2F0dHJpYl8nKSApIGNvbnRpbnVlOwoKICAkYXR0cmliID0gc3Vic3RyKCRrZXksNyk7CiAgJGZpZWxkWydhdHRyaWInXVskYXR0cmliXSA9ICR2YWx1ZTsKfQppZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkKICB7CiAgICAvLyB2YWxpZGF0ZQogICAgaWYoICFpc3NldCgkZmllbGRbJ25hbWUnXSkgfHwgZW1wdHkoJGZpZWxkWyduYW1lJ10pICkKICAgICAgewoJJHN0YXR1cyA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ndmFsdWUnLCduYW1lJyk7CiAgICAgIH0KCiAgICBpZiggZW1wdHkoJHN0YXR1cykgKQogICAgICB7Cglzd2l0Y2goICRmaWVsZFsndHlwZSddICkKCSAgewoJICBjYXNlICd0ZXh0aW5wdXQnOgoJICAgIHsKCSAgICAgIGlmKCAhaXNzZXQoJGZpZWxkWydhdHRyaWInXVsnbGVuZ3RoJ10pIHx8ICRmaWVsZFsnYXR0cmliJ11bJ2xlbmd0aCddIDw9IDAgKQoJCXsKCQkgICRzdGF0dXMgPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3ZhbHVlJywnbGVuZ3RoJyk7CgkJfQoJICAgICAgZWxzZSBpZiggIWlzc2V0KCRmaWVsZFsnYXR0cmliJ11bJ21heGxlbmd0aCddKSB8fCAkZmllbGRbJ2F0dHJpYiddWydtYXhsZW5ndGgnXSA8PSAwICkKCQl7CgkJICAkc3RhdHVzID0gJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3Npbmd2YWx1ZScsJ21heGxlbmd0aCcpOwoJCX0KCSAgICB9CgkgICAgYnJlYWs7Ci8vIAkgIGNhc2UgJ2NoZWNrYm94JzoKLy8gCSAgICB7Ci8vIAkgICAgfQovLyAJICAgIGJyZWFrOwoJICBjYXNlICdkcm9wZG93bic6CgkgIGNhc2UgJ211bHRpc2VsZWN0JzoKCSAgICB7CgkgICAgICBpZiggIWlzc2V0KCRmaWVsZFsnYXR0cmliJ11bJ29wdGlvbnMnXSkgKQoJCXsKCQkgICRzdGF0dXMgPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3ZhbHVlJywnb3B0aW9ucycpOwoJCX0KCSAgICAgIGVsc2UKCQl7CgkJICAkdG1wID0gZXhwbG9kZSgiXG4iLCRmaWVsZFsnYXR0cmliJ11bJ29wdGlvbnMnXSk7CgkJICAkY291bnQgPSAwOwoJCSAgZm9yZWFjaCggJHRtcCBhcyAkb25lICkKCQkgICAgewoJCSAgICAgICR4ID0gdHJpbSgkb25lKTsKCQkgICAgICBpZiggIWVtcHR5KCR4KSApICRjb3VudCsrOwoJCSAgICB9CgkJICBpZiggJGNvdW50ID09IDAgKQoJCSAgICB7CgkJICAgICAgJHN0YXR1cyA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ndmFsdWUnLCdvcHRpb25zJyk7CgkJICAgIH0KCQl9CgkgICAgfQoJICAgIGJyZWFrOwoJICB9CiAgICAgIH0KCiAgICBpZiggZW1wdHkoJHN0YXR1cykgKQogICAgICB7CgkvLyBkb3VibGUgY2hlY2sgYSBmaWVsZCBieSB0aGlzIG5hbWUgZG9lc24ndCBhbHJlYWR5IGV4aXN0CglpZiggaXNzZXQoJGZpZWxkWydpZCddKSAmJiAkZmllbGRbJ2lkJ10gPiAwICkKCSAgewoJICAgICRxdWVyeSA9ICdTRUxFQ1QgaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIFdIRVJFIG5hbWUgPSA/IEFORCBpZCAhPSA/JzsKCSAgICAkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRmaWVsZFsnbmFtZSddLCRmaWVsZFsnaWQnXSkpOwoJICAgIGlmKCAkdG1wICkKCSAgICAgIHsKCQkkc3RhdHVzID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25hbWVleGlzdHMnKTsKCSAgICAgIH0KCSAgfQoJZWxzZQoJICB7CgkgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgV0hFUkUgbmFtZSA9ID8nOwoJICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJGZpZWxkWyduYW1lJ10pKTsKCSAgICBpZiggJHRtcCApCgkgICAgICB7CgkJJHN0YXR1cyA9ICR0aGlzLT5MYW5nKCdlcnJvcl9uYW1lZXhpc3RzJyk7CgkgICAgICB9CgkgIH0KICAgICAgfQoKICAgIC8vIG5vdyB3ZSdyZSByZWFkeSB0byBzYXZlLgogICAgaWYoIGVtcHR5KCRzdGF0dXMpICkKICAgICAgewoJJGZpZWxkWydhdHRyaWJzJ10gPSBzZXJpYWxpemUoJGZpZWxkWydhdHRyaWInXSk7Cgl1bnNldCgkZmllbGRbJ2F0dHJpYiddKTsKCgkkZGJyID0gJyc7CglpZiggaXNzZXQoJGZpZWxkWydpZCddKSAmJiAkZmllbGRbJ2lkJ10gPiAwICkKCSAgewoJICAgIC8vIGl0J3MgYW4gdXBkYXRlCgkgICAgJG1zZyA9ICR0aGlzLT5MYW5nKCdtc2dfZmllbGRfdXBkYXRlZCcpOwoJICAgICRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcwogICAgICAgICAgICAgICAgICAgICAgICAgU0VUIG5hbWUgPSA/LCB0eXBlID0gPywgYXR0cmlicyA9ID8sIHB1YmxpYyA9ID8KICAgICAgICAgICAgICAgICAgICAgICBXSEVSRSBpZCA9ID8nOwoJICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRmaWVsZFsnbmFtZSddLCRmaWVsZFsndHlwZSddLCRmaWVsZFsnYXR0cmlicyddLCRmaWVsZFsncHVibGljJ10sJGZpZWxkWydpZCddKSk7CgkgIH0KCWVsc2UKCSAgewoJICAgICRtc2cgPSAkdGhpcy0+TGFuZygnbXNnX2ZpZWxkX2FkZGVkJyk7CgkgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBNQVgoaW9yZGVyKSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMnOwoJICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnkpOwoJICAgIGlmIChlbXB0eSgkdG1wKSB8fCAkdG1wIDwgMCkgewoJCQkkZmllbGRbJ2lvcmRlciddID0gMTsKCQl9IGVsc2UgewoJCSAgICAkZmllbGRbJ2lvcmRlciddID0gJHRtcCArIDE7CgkJfQoJICAgIC8vIGl0J3MgYW4gaW5zZXJ0CgkgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMKICAgICAgICAgICAgICAgICAgICAgICAobmFtZSx0eXBlLGF0dHJpYnMsaW9yZGVyLHB1YmxpYykKICAgICAgICAgICAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sPyw/KSc7CgkgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGZpZWxkWyduYW1lJ10sJGZpZWxkWyd0eXBlJ10sJGZpZWxkWydhdHRyaWJzJ10sJGZpZWxkWydpb3JkZXInXSwKCQkJCQkgICAgICRmaWVsZFsncHVibGljJ10pKTsKCgkgIH0KCglpZiggISRkYnIgKQoJICB7CgkgICAgJHN0YXR1cyA9ICR0aGlzLT5MYW5nKCdlcnJvcl9kYmVycm9yJykuJzxici8+Jy4kZGItPnNxbC4nPGJyLz4nLiRkYi0+RXJyb3JNc2coKTsKCSAgfQogICAgICB9CgogICAgaWYoIGVtcHR5KCRzdGF0dXMpICkKICAgICAgewoJLy8gYWxsIGRvbmUKCSR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CiAgICAgIH0KICB9CgojCiMgR2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQojCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fYWRkX2ZpZWxkJywkcmV0dXJuaWQsJ3Bvc3QnLCcnLGZhbHNlLCcnLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd5ZXNubycsJHllc25vKTsKJHNtYXJ0eS0+YXNzaWduKCdmbGR0eXBlcycsJHR5cGVzKTsKJHNtYXJ0eS0+YXNzaWduKCdmbGQnLCRmaWVsZCk7CgojCiMgUHJvY2VzcyB0aGUgdGVtcGxhdGUKIwppZiggIWVtcHR5KCRzdGF0dXMpICkKICB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRzdGF0dXMpOwogIH0KZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9hZGRfZmllbGQudHBsJyk7CgojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/action.admin_add_timelimited.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0KCk7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFVwbG9hZHMnKSAmJiAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXBsb2FkIEZpbGVzIHRvIFVwbG9hZHMnKSkgcmV0dXJuOwoKIwojIEluaXRpYWxpemF0aW9uCiMKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2ZpbGVzJyk7CmlmKCAhaXNzZXQoJHBhcmFtc1sndXBsb2FkX2lkJ10pICkgewogICAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CiR1cGxvYWRfaWQgPSAoaW50KSRwYXJhbXNbJ3VwbG9hZF9pZCddOwokZW1haWwgPSAnJzsKJGhvdXJzID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX2hvdXJzJyw3Mik7CiRkb3dubG9hZHMgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGltZWxpbWl0ZWRfZG93bmxvYWRzJywwKTsKJHNlbmRpdCA9IDA7CiRlcnJvcnMgPSBhcnJheSgpOwoKIwojIFNldHVwCiMKJHVwbG9hZCA9ICR0aGlzLT5HZXRVcGxvYWREZXRhaWxzKCR1cGxvYWRfaWQpOwoKIwojIEhhbmRsZSBmb3JtIGRhdGEKIwppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkgewogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRtaW5fbWFuYWdlX3RpbWVsaW1pdGVkJywkcmV0dXJuaWQsIGFycmF5KCd1cGxvYWRfaWQnPT4kdXBsb2FkX2lkKSk7Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogICAgJGhvdXJzID0gKGludCkkcGFyYW1zWydob3VycyddOwogICAgJGRvd25sb2FkcyA9IChpbnQpJHBhcmFtc1snZG93bmxvYWRzJ107CiAgICAkZW1haWwgPSB0cmltKCRwYXJhbXNbJ2VtYWlsJ10pOwogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ3NlbmRpdCddKSApICRzZW5kaXQgPSAoaW50KSRwYXJhbXNbJ3NlbmRpdCddOwogICAgaWYoIGVtcHR5KCRlbWFpbCkgKSAkZXJyb3JzW10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ19pbnZhbGlkJywkdGhpcy0+TGFuZygnZW1haWxfYWRkcmVzcycpKTsKICAgIGlmKCAkZG93bmxvYWRzIDwgMCApICRlcnJvcnNbXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX2ludmFsaWQnLCR0aGlzLT5MYW5nKCdudW1fZG93bmxvYWRzJykpOwogICAgaWYoICRob3VycyA8IDAgKSAkZXJyb3JzW10gPSAkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ19pbnZhbGlkJywkdGhpcy0+TGFuZygnbnVtX2hvdXJzJykpOwoKICAgIGlmKCBlbXB0eSgkZXJyb3JzKSApIHsKICAgICAgICAkbm93ID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwogICAgICAgIGlmKCAkaG91cnMgPiAwICkgJGV4cGlyZXMgPSAkZGItPkRiVGltZVN0YW1wKHN0cnRvdGltZSgnKycuJGhvdXJzLicgaG91cnMnKSk7CiAgICAgICAgJHVybGtleSA9IHN1YnN0cihzdHJfc2h1ZmZsZShtZDUodGltZSgpLiR1cGxvYWRfaWQuJHVwbG9hZFsndXBsb2FkX25hbWUnXS4kbm93LiRlbWFpbC4kZXhwaXJlcykpLDAsMTYpOwogICAgICAgICRkYnIgPSAnJzsKICAgICAgICBpZiggJGhvdXJzID4gMCApIHsKICAgICAgICAgICAgJHF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc190aW1lbGltaXQgKHVwbG9hZF9pZCxlbWFpbCx1cmxfa2V5LGNyZWF0ZWQsZXhwaXJlcyxtYXhfZG93bmxvYWRzKSBWQUxVRVMgKD8sPyw/LCRub3csJGV4cGlyZXMsPykiOwogICAgICAgICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdXBsb2FkX2lkLCRlbWFpbCwkdXJsa2V5LCRkb3dubG9hZHMpKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfdGltZWxpbWl0ICh1cGxvYWRfaWQsZW1haWwsdXJsX2tleSxjcmVhdGVkLG1heF9kb3dubG9hZHMpIFZBTFVFUyAoPyw/LD8sJG5vdyw/KSI7CiAgICAgICAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR1cGxvYWRfaWQsJGVtYWlsLCR1cmxrZXksJGRvd25sb2FkcykpOwogICAgICAgIH0KICAgICAgICBpZiggISRkYnIgKSB7CiAgICAgICAgICAgIGRpZSgkZGItPnNxbC4nPGJyLz4nLiRkYi0+RXJyb3JNc2coKSk7CiAgICAgICAgICAgICRlcnJvcnNbXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CiAgICAgICAgfQogICAgfQoKICAgIGlmKCBlbXB0eSgkZXJyb3JzKSAmJiAkc2VuZGl0ICkgewogICAgICAgIC8vIG1heWJlIHNlbmQgYW4gZW1haWwKICAgICAgICAkY21zbWFpbGVyID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDTVNNYWlsZXInKTsKICAgICAgICBpZiggJGNtc21haWxlciApIHsKICAgICAgICAgICAgJHBhZ2VpZCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3NlbmRmaWxlcGFnZScpOwogICAgICAgICAgICBpZiggJHBhZ2VpZCA8PSAwICkgewogICAgICAgICAgICAgICAgJGNvbnRlbnRvcHMgPSAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKICAgICAgICAgICAgICAgICRwYWdlaWQgPSAkY29udGVudG9wcy0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJHRtcCA9ICR0aGlzLT5HZXRVcGxvYWREZXRhaWxzKCR1cGxvYWRfaWQsJHBhZ2VpZCk7CiAgICAgICAgICAgICR0bXBbJ2Rvd25sb2FkX3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2dldGZpbGUnLCRwYWdlaWQsCWFycmF5KCd1cmxfa2V5Jz0+JHVybGtleSksIGZhbHNlLCAkdGhpcy0+X2dldFRpbWVMaW1pdGVkVVJMKCR1cmxrZXkpKTsKCiAgICAgICAgICAgICR1cGxvYWRfaW5mID0gbmV3IFN0ZENsYXNzKCk7CiAgICAgICAgICAgIGZvcmVhY2goICR0bXAgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgICAgICBpZiggc3RhcnRzd2l0aCgka2V5LCd1cGxvYWRfJykgKSAka2V5ID0gc3Vic3RyKCRrZXksNyk7CiAgICAgICAgICAgICAgICBpZiggIWVtcHR5KCR2YWx1ZSkgKSAkdXBsb2FkX2luZm8tPiRrZXkgPSAkdmFsdWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdlbnRyeScsJHVwbG9hZF9pbmZvKTsKICAgICAgICAgICAgJHNtYXJ0eS0+YXNzaWduKCdub3RlcycsJycpOwogICAgICAgICAgICBpZiggJGRvd25sb2FkcyApICRzbWFydHktPmFzc2lnbignZG93bmxvYWRzJywkZG93bmxvYWRzKTsKICAgICAgICAgICAgaWYoICRob3VycyApICRzbWFydHktPmFzc2lnbignaG91cnMnLCRob3Vycyk7CiAgICAgICAgICAgICRzdWJqZWN0X3RwbCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9zdWJqZWN0JywkdGhpcy0+TGFuZygnZGZsdF90aW1lbGltaXRlZF9zdWJqZWN0JykpOwogICAgICAgICAgICAkc3ViamVjdCA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkc3ViamVjdF90cGwpOwoKICAgICAgICAgICAgJGNtc21haWxlci0+cmVzZXQoKTsKICAgICAgICAgICAgJGNtc21haWxlci0+U2V0U3ViamVjdCgkc3ViamVjdCk7CiAgICAgICAgICAgICRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsKICAgICAgICAgICAgJGNtc21haWxlci0+QWRkQWRkcmVzcygkZW1haWwpOwogICAgICAgICAgICAkYm9keSA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3VwbG9hZF9zZW5kZmlsZXJwdCcpOwogICAgICAgICAgICAkY21zbWFpbGVyLT5TZXRCb2R5KCRib2R5KTsKICAgICAgICAgICAgJGNtc21haWxlci0+U2VuZCgpOwogICAgICAgIH0KICAgIH0KCgogICAgaWYoIGVtcHR5KCRlcnJvcnMpICkgewogICAgICAgIC8vIGRvbmUuCiAgICAgICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ3RpbWVfbGltaXRlZF9rZXlfYWRkZWQnKSk7CiAgICAgICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRtaW5fbWFuYWdlX3RpbWVsaW1pdGVkJywkcmV0dXJuaWQsIGFycmF5KCd1cGxvYWRfaWQnPT4kdXBsb2FkX2lkKSk7CiAgICB9Cn0KCiMKIyBHaXZlIEV2ZXJ5dGhpbmcgdG8gU21hcnR5CiMKaWYoIGNvdW50KCRlcnJvcnMpICkgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZXJyb3JzKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX2FkZF90aW1lbGltaXRlZCcsJHJldHVybmlkLCBhcnJheSgndXBsb2FkX2lkJz0+JHVwbG9hZF9pZCkpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCd1cGxvYWQnLCR1cGxvYWQpOwokc21hcnR5LT5hc3NpZ24oJ2VtYWlsJywkZW1haWwpOwokc21hcnR5LT5hc3NpZ24oJ2hvdXJzJywkaG91cnMpOwokc21hcnR5LT5hc3NpZ24oJ2Rvd25sb2FkcycsJGRvd25sb2Fkcyk7CgojCiMgRGlzcGxheSB0aGUgdGVtcGxhdGUKIwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2FkZF90aW1lbGltaXRlZC50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_ajax_ops.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggIWlzc2V0KCRwYXJhbXNbJ29wJ10pICkgcmV0dXJuOwoKJG91dHB1dCA9IG51bGw7CnN3aXRjaCggJHBhcmFtc1snb3AnXSApIHsKIGNhc2UgJ3VzZXJfYXV0b2NvbXBsZXRlJzoKICAgJHRlcm0gPSB0cmltKCRwYXJhbXNbJ3Rlcm0nXSk7CiAgIGlmKCAhJHRlcm0gKSBicmVhazsKICAgJHF1ZXJ5ID0gJ1NFTEVDVCB1c2VybmFtZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfZmV1c2Vyc191c2VycyBXSEVSRSB1c2VybmFtZSBMSUtFID8nOwogICBpZiggc3RycG9zKCR0ZXJuLCcqJykgPT09IEZBTFNFICkgJHRlcm0gLj0gJyUnOwogICAkdGVybSA9IHN0cl9yZXBsYWNlKCcqJywnJScsJHRlcm0pOwogICAkdGVybSA9IHN0cl9yZXBsYWNlKCclJScsJyUnLCR0ZXJtKTsKICAgJHJlcyA9ICRkYi0+R2V0Q29sKCRxdWVyeSxhcnJheSgkdGVybSkpOwogICBpZiggaXNfYXJyYXkoJHJlcykgJiYgY291bnQoJHJlcykgKSAkb3V0cHV0ID0gJHJlczsKICAgYnJlYWs7CgogY2FzZSAnZmlsZV9hdXRvY29tcGxldGUnOgogICAkdGVybSA9IHRyaW0oJHBhcmFtc1sndGVybSddKTsKICAgaWYoICEkdGVybSApIGJyZWFrOwogICAkcXVlcnkgPSAnU0VMRUNUIERJU1RJTkNUIHVwbG9hZF9uYW1lIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9uYW1lIExJS0UgPyc7CiAgIGlmKCBzdHJwb3MoJHRlcm4sJyonKSA9PT0gRkFMU0UgKSAkdGVybSAuPSAnJSc7CiAgICR0ZXJtID0gc3RyX3JlcGxhY2UoJyonLCclJywkdGVybSk7CiAgICR0ZXJtID0gc3RyX3JlcGxhY2UoJyUlJywnJScsJHRlcm0pOwogICAkcmVzID0gJGRiLT5HZXRDb2woJHF1ZXJ5LGFycmF5KCR0ZXJtKSk7CiAgIGlmKCBpc19hcnJheSgkcmVzKSAmJiBjb3VudCgkcmVzKSApICRvdXRwdXQgPSAkcmVzOwogICBicmVhazsKCiBkZWZhdWx0OgogICAvLyBkbyBub3RoaW5nCiAgIGJyZWFrOwp9CgokaGFuZGxlcnMgPSBvYl9saXN0X2hhbmRsZXJzKCk7CmZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CmlmKCBpc3NldCgkcGFyYW1zWydqc29uJ10pICYmICRwYXJhbXNbJ2pzb24nXSApIHsKICAkb3V0cHV0ID0ganNvbl9lbmNvZGUoJG91dHB1dCk7CiAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nKTsKfQplY2hvICRvdXRwdXQ7CmV4aXQ7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_copycategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6ZQovLwokdGhpcy0+U2V0Q3VycmVudFRhYignY2F0ZWdvcmllcycpOwokZGVzdF9jYXRuYW1lID0gJyc7CiRkZXN0X2NhdGRlc2MgPSAnJzsKJGRlc3RfY2F0cGF0aCA9ICcnOwokb3JpZ19jYXRfaWQgPSAnJzsKJGNvbmZpZyA9ICRnQ21zLT5HZXRDb25maWcoKTsKJHNyY2RpciA9ICcnOwokZGVzdGRpciA9ICcnOwokY2F0aWQgPSAnJzsKJGF1dGhvciA9ICRfU0VTU0lPTlsnY21zX2FkbWluX3VzZXJuYW1lJ107CiRjb3B5ZmlsZXMgPSAwOwoKLy8KLy8gc2V0dXAKLy8KaWYoICFpc3NldCgkcGFyYW1zWydjYXRlZ29yeV9pZCddKSApIHsKCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3BhcmFtJykpOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQokY2F0ZWdvcnlfaWQgPSAoaW50KSRwYXJhbXNbJ2NhdGVnb3J5X2lkJ107CiRjYXRlZ29yeSA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeSgkY2F0ZWdvcnlfaWQpOwppZiggISRjYXRlZ29yeSApIHsKCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3BhcmFtJykpOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKLy8KLy8gaGFuZGxlIGZvcm0gZGF0YQovLwppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkgewoJJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ29wZXJhdGlvbl9jYW5jZWxsZWQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsKCS8vIHN1Ym1pdCBwcmVzc2VkLgoKCS8vIGdldCB0aGUgcGFyYW1ldGVycwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X25hbWUnXSkgKQkkZGVzdF9jYXRuYW1lID0gdHJpbSgkcGFyYW1zWydjYXRlZ29yeV9uYW1lJ10pOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X2Rlc2MnXSkgKSAkZGVzdF9jYXRkZXNjID0gdHJpbSgkcGFyYW1zWydjYXRlZ29yeV9kZXNjJ10pOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X3BhdGgnXSkgKQkkZGVzdF9jYXRwYXRoID0gdHJpbSgkcGFyYW1zWydjYXRlZ29yeV9wYXRoJ10pOwoJJGNvcHlmaWxlcyA9IChpbnQpJHBhcmFtc1snY29weWZpbGVzJ107CgoJVXBsb2Fkczo6bG9hZF9hZG1pbigpOwoJJGVycm9yID0gX3VwbG9hZHNfQ29weUNhdGVnb3J5KCR0aGlzLCRjYXRlZ29yeV9pZCwKCQkJCQkJCQkJCQkJCQkJCSAkZGVzdF9jYXRuYW1lLAoJCQkJCQkJCQkJCQkJCQkJICRkZXN0X2NhdHBhdGgsCgkJCQkJCQkJCQkJCQkJCQkgJGRlc3RfY2F0ZGVzYywKCQkJCQkJCQkJCQkJCQkJCSAkY29weWZpbGVzLCB0cnVlKTsKCWlmKCBlbXB0eSgkZXJyb3IpICkgewoJCSR0aGlzLT5TZXRNZXNzYWdlKCR0aGlzLT5MYW5nKCdjYXRlZ29yeV9jb3BpZWQnKSk7CgkJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCX0KCgllY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7Cn0gLy8gb24gc3VibWl0CgovLwovLyBnaXZlIGV2ZXJ5dGhpbmcgdG8gc21hcnR5Ci8vCiRzbWFydHktPmFzc2lnbignY2F0ZWdvcnknLCRjYXRlZ29yeSk7CiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0JywkdGhpcy0+Q0dDcmVhdGVGb3JtU3RhcnQoJGlkLCdhZG1pbl9jb3B5Y2F0ZWdvcnknLCRyZXR1cm5pZCwkcGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgovLwovLyBkaXNwbGF5IHRoZSB0ZW1wbGF0ZQovLwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX2NvcHljYXRlZ29yeS50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_del_field.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSByZXR1cm47CgojCiMgU2V0dXAKIwokdGhpcy0+U2V0Q3VycmVudFRhYignZmllbGRzJyk7CmlmKCAhaXNzZXQoJHBhcmFtc1snZmlkJ10pICkgewogICAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5ncGFyYW0nKSk7CiAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CgokcXVlcnkgPSAnU0VMRUNUIGlvcmRlciBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgV0hFUkUgaWQgPSA/JzsKJGlvcmRlciA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgoaW50KSRwYXJhbXNbJ2ZpZCddKSk7CmlmKCAkaW9yZGVyICkgewogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgV0hFUkUgZmxkX2lkID0gPyc7CiAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KChpbnQpJHBhcmFtc1snZmlkJ10pKTsKCiAgICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBXSEVSRSBpZCA9ID8nOwogICAgJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgoaW50KSRwYXJhbXNbJ2ZpZCddKSk7CgogICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIFNFVCBpb3JkZXI9aW9yZGVyLTEgV0hFUkUgaW9yZGVyID4gPyc7CiAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRpb3JkZXIpKTsKfQoKJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19maWVsZF9kZWxldGVkJykpOwokdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_del_timelimited.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBVcGxvYWRzJykgJiYgISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykpIHJldHVybjsKCiR0aGlzLT5TZXRDdXJyZW50VGFiKCdmaWxlcycpOwppZiggIWlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSB8fCAhaXNzZXQoJHBhcmFtc1sndGxfaWQnXSkgKSB7CiAgICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdwYXJhbScpKTsKICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KJHRsX2lkID0gKGludCkkcGFyYW1zWyd0bF9pZCddOwokdXBsb2FkX2lkID0gKGludCkkcGFyYW1zWyd1cGxvYWRfaWQnXTsKCiRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfdGltZWxpbWl0IFdIRVJFIHVwbG9hZF9pZCA9ID8gQU5EIHRsa2V5X2lkID0gPyc7CiRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR1cGxvYWRfaWQsJHRsX2lkKSk7CmlmKCAhJGRiciApIHsKICAgIGVjaG8gJGRiLT5zcWwuJzxici8+Jy4kZGItPkVycm9yTXNnKCkuJzxici8+JzsKICAgIGV4aXQoKTsKfQoKJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRtaW5fbWFuYWdlX3RpbWVsaW1pdGVkJywkcmV0dXJuaWQsYXJyYXkoJ3VwbG9hZF9pZCc9PiR1cGxvYWRfaWQpKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_manage_timelimited.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQppZiggIWlzc2V0KCRnQ21zKSApIGV4aXQoKTsKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVXBsb2FkcycpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVcGxvYWQgRmlsZXMgdG8gVXBsb2FkcycpKSByZXR1cm47CgokdGhpcy0+U2V0Q3VycmVudFRhYignZmlsZXMnKTsKaWYoICFpc3NldCgkcGFyYW1zWyd1cGxvYWRfaWQnXSkgKSB7CiAgICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdwYXJhbScpKTsKICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KCi8vIGF1dG8gZGVsZXRlIGVudHJpZXMKJG5ob3VycyA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9hdXRvZGVsZXRlJywwKTsKaWYoICRuaG91cnMgPiAwICkgewogICAgJHRpbWUgPSBzdHJ0b3RpbWUoJy0gJG5ob3VycyBob3VycycpOwogICAgJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgV0hFUkUgZXhwaXJlcyA8ICR0aW1lIjsKICAgICRkYi0+RXhlY3V0ZSgkcXVlcnkpOwp9CgokdXBsb2FkID0gJHRoaXMtPkdldFVwbG9hZERldGFpbHMoJHBhcmFtc1sndXBsb2FkX2lkJ10pOwokc21hcnR5LT5hc3NpZ24oJ3VwbG9hZCcsJHVwbG9hZCk7CiRzbWFydHktPmFzc2lnbignYWRka2V5X2xpbmsnLCR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9hZGRfdGltZWxpbWl0ZWQnLCRyZXR1cm5pZCwkdGhpcy0+TGFuZygnYWRkX3RpbWVsaW1pdGVkX2tleScpLCAnaWNvbnMvc3lzdGVtL25ld29iamVjdC5naWYnLCAkcGFyYW1zLCcnLCcnLGZhbHNlKSk7Cgokbm93ID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwokcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfdGltZWxpbWl0IFdIRVJFIHVwbG9hZF9pZCA9ID8gQU5EICgoZXhwaXJlcyA+ICRub3cpIE9SIChleHBpcmVzIElTIE5VTEwpKSI7CiR0ZGF0YSA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSk7CiRkYXRhID0gYXJyYXkoKTsKaWYoICR0ZGF0YSApIHsKICAgIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0ZGF0YSk7ICRpKysgKSB7CiAgICAgICAgJHJlYyA9JiAkdGRhdGFbJGldOwogICAgICAgIGlmKCBpc19udWxsKCRyZWNbJ3VybF9rZXknXSkgKSBjb250aW51ZTsKCiAgICAgICAgJHEyID0gJ1NFTEVDVCBDT1VOVChmaWxlX2lkKSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgV0hFUkUgZmlsZV9pZCA9ID8gQU5EIHVybF9rZXkgPSA/JzsKICAgICAgICAkcmVjWydkb3dubG9hZHMnXSA9ICRkYi0+R2V0T25lKCRxMixhcnJheSgkcmVjWyd1cGxvYWRfaWQnXSwkcmVjWyd1cmxfa2V5J10pKTsKICAgICAgICAkcmVjWydkb3dubG9hZF91cmwnXSA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdnZXRmaWxlJywkcmV0dXJuaWQsIGFycmF5KCd1cmxfa2V5Jz0+JHJlY1sndXJsX2tleSddKSwJZmFsc2UsICR0aGlzLT5fZ2V0VGltZUxpbWl0ZWRVUkwoJHJlY1sndXJsX2tleSddKSk7CiAgICAgICAgJHJlY1snZGVsZXRlX2xpbmsnXSA9ICR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl9kZWxfdGltZWxpbWl0ZWQnLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdkZWxldGUnKSwgJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywKCQkJCQkJCQkJCQkJCSBhcnJheSgndXBsb2FkX2lkJz0+JHBhcmFtc1sndXBsb2FkX2lkJ10sICd0bF9pZCc9PiRyZWNbJ3Rsa2V5X2lkJ10pKTsKCiAgICAgICAgJGRhdGFbXSA9ICRyZWM7CiAgICB9CgogICAgaWYoICRkYXRhICkJJHNtYXJ0eS0+YXNzaWduKCdkYXRhJywkZGF0YSk7Cn0KCiRzbWFydHktPmFzc2lnbignYmFja19saW5rJywkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdsYmxfYmFjaycpLCAnaWNvbnMvc3lzdGVtL2JhY2suZ2lmJywgYXJyYXkoKSwgJycsICcnLCBmYWxzZSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX21hbmFnZV90aW1lbGltaXRlZC50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_multicategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSBleGl0OwoKLy8KLy8gaW5pdGlhbGl6YXRpb24KLy8KJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2NhdGVnb3JpZXMnKTsKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CmlmKCAhaXNzZXQoJHBhcmFtc1snY2F0X211bHRpc2VsZWN0J10pICYmICFpc3NldCgkcGFyYW1zWydidWxrY29weV9zdWJtaXQnXSkgKSB7CgkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX25vdGhpbmdfc2VsZWN0ZWQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9Cgpzd2l0Y2goICRwYXJhbXNbJ211bHRpYWN0aW9uJ10gKSB7CmNhc2UgJ2RlbGV0ZSc6Cglmb3JlYWNoKCAkcGFyYW1zWydjYXRfbXVsdGlzZWxlY3QnXSBhcyAkb25lY2F0ZWdvcnkgKSB7CgkJJG1zZyA9ICR0aGlzLT5fQWRtaW5Eb0RlbGV0ZUNhdGVnb3J5KCRvbmVjYXRlZ29yeSk7CgkJaWYoICRtc2cgKSB7CgkJCSR0aGlzLT5TZXRFcnJvcigkbXNnKTsKCQkJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCQl9Cgl9CglicmVhazsKCmNhc2UgJ2NvcHknOgoJaWYoIGlzc2V0KCRwYXJhbXNbJ2J1bGtjb3B5X3N1Ym1pdCddKSApIHsKCQkvLyBkbyBkYXRhIHZhbGlkYXRpb24KCQkkZXJyb3IgPSAnJzsKCQlpZiggIWlzc2V0KCRwYXJhbXNbJ2NvcHljYXRlZ29yeSddKSApCSRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9taXNzaW5nX2ludmFsaWQnLCdjb3B5Y2F0ZWdvcnknKTsKCgkJaWYoIGVtcHR5KCRlcnJvcikgKSB7CgkJCWZvcmVhY2goICRwYXJhbXNbJ2NvcHljYXRlZ29yeSddIGFzICRjYXRlZ29yeV9pZCA9PiAmJG9uZWNhdCApIHsKCQkJCSRvbmVjYXRbJ25hbWUnXSA9IHRyaW0oJG9uZWNhdFsnbmFtZSddKTsKCQkJCSRvbmVjYXRbJ2Rlc2NyaXB0aW9uJ10gPSB0cmltKCRvbmVjYXRbJ2Rlc2NyaXB0aW9uJ10pOwoJCQkJJG9uZWNhdFsncGF0aCddID0gdHJpbSgkb25lY2F0WydwYXRoJ10pOwoKCQkJCVVwbG9hZHM6OmxvYWRfYWRtaW4oKTsKCQkJCSRlcnJvciA9IF91cGxvYWRzX0NvcHlDYXRlZ29yeSgkdGhpcywkY2F0ZWdvcnlfaWQsICRvbmVjYXRbJ25hbWUnXSwgJG9uZWNhdFsncGF0aCddLCAkb25lY2F0WydkZXNjcmlwdGlvbiddLCAkb25lY2F0Wydkb2ZpbGVzJ10sIHRydWUpOwoJCQkJaWYoICRlcnJvciApIGJyZWFrOwoJCQl9CgkJfQoKCQlpZiggIWVtcHR5KCRlcnJvcikgKSAkdGhpcy0+U2V0RXJyb3IoJGVycm9yKTsKCgkJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCX0gLy8gc3VibWl0CgoJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2lkIElOICgnLmltcGxvZGUoJywnLCRwYXJhbXNbJ2NhdF9tdWx0aXNlbGVjdCddKS4nKSc7CgkkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoJJHNtYXJ0eS0+YXNzaWduKCdjYXRlZ29yaWVzJywkdG1wKTsKCSRwYXJtcyA9IGFycmF5KCk7CgkkcGFybXNbJ211bHRpYWN0aW9uJ10gPSAkcGFyYW1zWydtdWx0aWFjdGlvbiddOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdF9tdWx0aXNlbGVjdCddKSApCSRwYXJtc1snY2F0ZWdvcmllcyddID0gIGltcGxvZGUoJywnLCRwYXJhbXNbJ2NhdF9tdWx0aXNlbGVjdCddKTsKCSRzbWFydHktPmFzc2lnbignY2F0ZWdvcnlfaWRzJywkcGFyYW1zWydjYXRfbXVsdGlzZWxlY3QnXSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fbXVsdGljYXRlZ29yeScsJHJldHVybmlkLCRwYXJtcykpOwoJJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fY2F0X2J1bGtjb3B5LnRwbCcpOwoJcmV0dXJuOwoKZGVmYXVsdDoKCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ19pbnZhbGlkJywnY2F0ZWdvcnlfaWQnKSk7CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CgoKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_order_field.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBTaXRlIFByZWZlcmVuY2VzJykgKSByZXR1cm47CgojCiMgU2V0dXAKIwokdGhpcy0+U2V0Q3VycmVudFRhYignZmllbGRzJyk7CmlmKCAhaXNzZXQoJHBhcmFtc1snZmlkJ10pIHx8ICFpc3NldCgkcGFyYW1zWydkaXInXSkgfHwgIWlzc2V0KCRwYXJhbXNbJ2N1ciddKSApIHsKICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfbWlzc2luZ3BhcmFtJykpOwogICAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKJGZpZCA9IChpbnQpJHBhcmFtc1snZmlkJ107CiRkaXIgPSBzdHJ0b2xvd2VyKHRyaW0oJHBhcmFtc1snZGlyJ10pKTsKJGN1cm9yZGVyID0gKGludCkkcGFyYW1zWydjdXInXTsKc3dpdGNoKCRkaXIpIHsKY2FzZSAndXAnOgogICAgLy8gc3dhcCBvcmRlciBpZCB3aXRoIHByZXZpb3VzIG9uZQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgV0hFUkUgaW9yZGVyID0gPyc7CiAgICAkcHJldl9pZCA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkY3Vyb3JkZXIgLSAxKSk7CiAgICBpZiggJHByZXZfaWQgKSB7CiAgICAgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIFNFVCBpb3JkZXIgPSA/IFdIRVJFIGlkID0gPyc7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkY3Vyb3JkZXIsJHByZXZfaWQpKTsKICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRjdXJvcmRlciAtIDEsJGZpZCkpOwoJfQogICAgYnJlYWs7CgpjYXNlICdkb3duJzoKICAgIC8vIHN3YXAgb3JkZXIgaWQgd2l0aCBuZXh0IG9uZQogICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgV0hFUkUgaW9yZGVyID0gPyc7CiAgICAkcHJldl9pZCA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkY3Vyb3JkZXIgKyAxKSk7CiAgICBpZiggJHByZXZfaWQgKSB7CiAgICAgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIFNFVCBpb3JkZXIgPSA/IFdIRVJFIGlkID0gPyc7CiAgICAgICAgJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkY3Vyb3JkZXIsJHByZXZfaWQpKTsKICAgICAgICAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRjdXJvcmRlciArIDEsJGZpZCkpOwoJfQogICAgYnJlYWs7Cn0KCiR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7CgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.admin_report_downloadsbyfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NyZWF0ZSBVcGxvYWRzIFJlcG9ydHMnKSApIHJldHVybjsKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3JlcG9ydHMnKTsKCi8vCi8vIHNldHVwCi8vCiRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX0ZST05URU5EVVNFUlMsJzEuMjEuMTUnKTsKaWYoICEkZmV1ICkgewogICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3Jfbm9mZXUnKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKLy8gZ2V0IHRoaXMgdXNlcnMgZW1haWwgYWRkcmVzcy4KJHVzZXJlbWFpbCA9ICcnOwokdXNlciA9IHVzZXJvcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+TG9hZFVzZXJCeUlkKGdldF91c2VyaWQoKSk7CmlmKCBpc19vYmplY3QoJHVzZXIpICYmICR1c2VyLT5lbWFpbCAhPSAnJyApICR1c2VyZW1haWwgPSAkdXNlci0+ZW1haWw7CgokcXVlcnkgPSAnU0VMRUNUIEYuaWQsIEYubmFtZSwgRi50eXBlLCBGLmF0dHJpYnMsIEYuaW9yZGVyIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBGIE9SREVSIEJZIGlvcmRlciBBU0MnOwokY3VzdG9tX2ZpZWxkcyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKCiRmZXVfcHJvcGRlZm5zID0gJGZldS0+R2V0UHJvcGVydHlEZWZucygpOwoKJGZpZWxkX2luZm8gPSBhcnJheSgpOwokZmllbGRfaW5mb1sndXBsb2FkX2lkJ10gPSBhcnJheSgnY29sdW1uJz0+J1UudXBsb2FkX2lkJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2lkJykpOwokZmllbGRfaW5mb1snY2F0ZWdvcnlfaWQnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfY2F0ZWdvcnlfaWQgQVMgY2F0ZWdvcnlfaWQnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfY2F0ZWdvcnlfaWQnKSk7CiRmaWVsZF9pbmZvWydjYXRlZ29yeV9uYW1lJ10gPSBhcnJheSgnY29sdW1uJz0+J1VDLnVwbG9hZF9jYXRlZ29yeV9uYW1lIEFTIGNhdGVnb3J5X25hbWUnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfY2F0ZWdvcnlfbmFtZScpKTsKJGZpZWxkX2luZm9bJ2NhdGVnb3J5X3BhdGgnXSA9IGFycmF5KCdjb2x1bW4nPT4nVUMudXBsb2FkX2NhdGVnb3J5X3BhdGggQVMgY2F0ZWdvcnlfcGF0aCcsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9wYXRoJykpOwokZmllbGRfaW5mb1sndXBsb2FkX25hbWUnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfbmFtZScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9uYW1lJykpOwokZmllbGRfaW5mb1snYXV0aG9yJ10gPSBhcnJheSgnY29sdW1uJz0+J1UudXBsb2FkX2F1dGhvciBBUyBhdXRob3InLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfYXV0aG9yJykpOwokZmllbGRfaW5mb1snc3VtbWFyeSddID0gYXJyYXkoJ2NvbHVtbic9PidVLnVwbG9hZF9zdW1tYXJ5IEFTIHN1bW1hcnknLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfc3VtbWFyeScpKTsKJGZpZWxkX2luZm9bJ2Rlc2NyaXB0aW9uJ10gPSBhcnJheSgnY29sdW1uJz0+J1UudXBsb2FkX2Rlc2NyaXB0aW9uIEFTIGRlc2NyaXB0aW9uJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2Rlc2NyaXB0aW9uJykpOwokZmllbGRfaW5mb1sndXBsb2FkX2lwJ10gPSBhcnJheSgnY29sdW1uJz0+J1UudXBsb2FkX2lwJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2lwJykpOwokZmllbGRfaW5mb1sndXBsb2FkX3NpemUnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfc2l6ZScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9zaXplJykpOwokZmllbGRfaW5mb1sndXBsb2FkX2RhdGUnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfZGF0ZScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9kYXRlJykpOwovLyRmaWVsZF9pbmZvWydkb3dubG9hZHMnXSA9IGFycmF5KCdjb2x1bW4nPT4nQ09VTlQoVUQuZG93bmxvYWRfaWQpIEFTIGRvd25sb2FkcycsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkcycpLCdkZXRhaWxycHQnPT4wKTsKJGZpZWxkX2luZm9bJ2Rvd25sb2FkcyddID0gYXJyYXkoJ2NvbHVtbic9PidEQy5kb3dubG9hZHMnLAoJCQkJICdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9kb3dubG9hZHMnKSwKCQkJCSAnam9pbic9PidMRUZUIEpPSU4gKFNFTEVDVCBmaWxlX2lkLENPVU5UKGRvd25sb2FkX2lkKSBBUyBkb3dubG9hZHMgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZG93bmxvYWRzIFdIRVJFIGRvd25sb2FkX2RhdGUgQkVUV0VFTiAlc3QlIEFORCAlZXQlICV1dyUgR1JPVVAgQlkgZmlsZV9pZCkgREMgT04gREMuZmlsZV9pZCA9IFUudXBsb2FkX2lkJyk7CiRmaWVsZF9pbmZvWydkb3dubG9hZF91c2VyJ10gPSBhcnJheSgnY29sdW1uJz0+J1VELmRvd25sb2FkX3VzZXInLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9kb3dubG9hZF91c2VyJyksJ3N1bW1hcnlycHQnPT4wKTsKJGZpZWxkX2luZm9bJ2Rvd25sb2FkX2RhdGUnXSA9IGFycmF5KCdjb2x1bW4nPT4nVUQuZG93bmxvYWRfZGF0ZScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkX2RhdGUnKSwnc3VtbWFyeXJwdCc9PjApOwokZmllbGRfaW5mb1snbGF0ZXN0X2Rvd25sb2FkJ10gPSBhcnJheSgnY29sdW1uJz0+J01BWChVRC5kb3dubG9hZF9kYXRlKSBBUyBsYXRlc3RfZG93bmxvYWQnLAoJCQkJICAgICAgICdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9sYXRlc3RfZG93bmxvYWQnKSwKCQkJCSAgICAgICAnZGV0YWlscnB0Jz0+MCk7CmlmKCBpc19hcnJheSgkY3VzdG9tX2ZpZWxkcykgJiYgY291bnQoJGN1c3RvbV9maWVsZHMpICkgewogICRpID0gMTsKICBmb3JlYWNoKCAkY3VzdG9tX2ZpZWxkcyBhcyAkb25lICkgewogICAgJGFsaWFzID0gJ0ZWJy4kaSsrOwogICAgJG5hbWUgPSBzdHJfcmVwbGFjZSgnICcsJ18nLCRvbmVbJ25hbWUnXSk7CiAgICAkZmllbGRfaW5mb1snZjonLiRuYW1lXSA9IGFycmF5KCdqb2luJz0+J0xFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzICRhbGlhcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT04gVS51cGxvYWRfaWQgPSB7JGFsaWFzfS51cGxvYWRfaWQgQU5EIHskYWxpYXN9LmZsZF9pZCA9ICIuKGludCkkb25lWydpZCddLAoJCQkJICAgICdjb2x1bW4nPT4kYWxpYXMuJy52YWx1ZSBBUyAnLiRuYW1lLAoJCQkJICAgICdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZCcpLic6ICcuJG9uZVsnbmFtZSddKTsKICB9Cn0KaWYoIGlzX2FycmF5KCRmZXVfcHJvcGRlZm5zKSAmJiBjb3VudCgkZmV1X3Byb3BkZWZucykgKSB7CiAgdXNvcnQoJGZldV9wcm9wZGVmbnMsZnVuY3Rpb24oJGEsJGIpeyByZXR1cm4gc3RyY21wKCRhWydwcm9tcHQnXSwkYlsncHJvbXB0J10pOyB9KTsKICAkaSA9IDE7CiAgZm9yZWFjaCggJGZldV9wcm9wZGVmbnMgYXMgJGtleSA9PiAkb25lICkgewogICAgaWYoICRvbmVbJ3R5cGUnXSA9PSAkZmV1OjpGSUVMRFRZUEVfREFUQSApIGNvbnRpbnVlOwogICAgJGFsaWFzID0gJ0ZFVScuJGkrKzsKICAgICRzdWJzZWxlY3QgPSAiTEVGVCBKT0lOIChTRUxFQ1QgRkVVLnVzZXJuYW1lLEZFVVYudGl0bGUsRkVVUC50eXBlLEZFVVYuZGF0YSBGUk9NIGNtc19tb2R1bGVfZmV1c2Vyc191c2VycyBGRVUgTEVGVCBKT0lOIGNtc19tb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIEZFVVYgT04gRkVVLmlkID0gRkVVVi51c2VyaWQgTEVGVCBKT0lOIGNtc19tb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiBGRVVQIE9OIEZFVVAubmFtZSA9IEZFVVYudGl0bGUgV0hFUkUgRkVVUC50eXBlICE9IDkgQU5EIEZFVVAubmFtZSA9ICclcycpICRhbGlhcyI7CiAgICAkZmllbGRfaW5mb1sncDonLiRvbmVbJ25hbWUnXV0gPSBhcnJheSgnY29sdW1uJz0+IiRhbGlhcy5kYXRhIEFTICIuJG9uZVsnbmFtZSddLAoJCQkJICAgJ2pvaW4nPT5zcHJpbnRmKCRzdWJzZWxlY3QsJG9uZVsnbmFtZSddKS4iIE9OIFVELmRvd25sb2FkX3VzZXIgPSAkYWxpYXMudXNlcm5hbWUiLAoJCQkJICAgJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ3VzZXJwcm9wJykuJzogJy4kb25lWydwcm9tcHQnXSk7CiAgfQp9Ci8vIHRvZG86IGFkZCBjdXN0b20gZmllbGRzIGluIGhlcmUuCgokc29ydGluZ3MgPSBhcnJheSgpOwokc29ydGluZ3NbJ3VwbG9hZF9pZCddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9pZCcpKTsKJHNvcnRpbmdzWydjYXRlZ29yeV9uYW1lJ10gPSBhcnJheSgnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2NhdGVnb3J5X25hbWUnKSwnc29ydGJ5Jz0+J2NhdGVnb3J5X25hbWUnKTsKJHNvcnRpbmdzWyd1cGxvYWRfbmFtZSddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9uYW1lJykpOwokc29ydGluZ3NbJ2F1dGhvciddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9hdXRob3InKSwnZGV0YWlscnB0Jz0+MCwnc29ydGJ5Jz0+J2F1dGhvcicpOwokc29ydGluZ3NbJ3VwbG9hZF9zaXplJ10gPSBhcnJheSgnZGZsdHNvcnRieSc9PidERVNDJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX3NpemUnKSk7CiRzb3J0aW5nc1sndXBsb2FkX2RhdGUnXSA9IGFycmF5KCdkZmx0c29ydGJ5Jz0+J0RFU0MnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfZGF0ZScpKTsKJHNvcnRpbmdzWydzdW1tYXJ5J10gPSBhcnJheSgnZGZsdHNvcnRieSc9PidBU0MnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfc3VtbWFyeScpLCdzb3J0YnknPT4nc3VtbWFyeScsJ3JlcWZpZWxkJz0+J3N1bW1hcnknKTsKJHNvcnRpbmdzWydkb3dubG9hZHMnXSA9IGFycmF5KCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9kb3dubG9hZHMnKSwncmVxZmllbGQnPT4nZG93bmxvYWRzJywnc29ydGJ5Jz0+J2Rvd25sb2FkcycsJ2RmbHRzb3J0YnknPT4nREVTQycsJ3NvcnRieTInPT4ndXBsb2FkX25hbWUnLCdkZmx0c29ydGJ5Mic9PidBU0MnKTsKLy8kc29ydGluZ3NbJ2Rvd25sb2FkcyddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkcycpLCdzb3J0YnknPT4nZG93bmxvYWRzJywnZGZsdHNvcnRieSc9PidERVNDJywnc29ydGJ5Mic9Pid1cGxvYWRfbmFtZScsJ2RmbHRzb3J0YnkyJz0+J0FTQycpOwokc29ydGluZ3NbJ2Rvd25sb2FkX3VzZXInXSA9IGFycmF5KCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9kb3dubG9hZF91c2VyJyksJ3N1bW1hcnlycHQnPT4wKTsKJHNvcnRpbmdzWydkb3dubG9hZF9kYXRlJ10gPSBhcnJheSgnZGZsdHNvcnRieSc9PidERVNDJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfZG93bmxvYWRfZGF0ZScpLCdzdW1tYXJ5cnB0Jz0+MCk7CmlmKCBpc19hcnJheSgkY3VzdG9tX2ZpZWxkcykgJiYgY291bnQoJGN1c3RvbV9maWVsZHMpICkgewogIGZvcmVhY2goICRjdXN0b21fZmllbGRzIGFzICRvbmUgKSB7CiAgICAkc29ydGluZ3NbJ2Y6Jy4kb25lWyduYW1lJ11dID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkJykuJzogJy4kb25lWyduYW1lJ10sJ3JlcWZpZWxkJz0+J2Y6Jy4kb25lWyduYW1lJ10pOwogIH0KfQppZiggaXNfYXJyYXkoJGZldV9wcm9wZGVmbnMpICYmIGNvdW50KCRmZXVfcHJvcGRlZm5zKSApIHsKICBmb3JlYWNoKCAkZmV1X3Byb3BkZWZucyBhcyAka2V5ID0+ICRvbmUgKSB7CiAgICBpZiggIWluX2FycmF5KCRvbmVbJ3R5cGUnXSxhcnJheSgkZmV1OjpGSUVMRFRZUEVfVEVYVCwkZmV1OjpGSUVMRFRZUEVfRU1BSUwsJGZldTo6RklFTERUWVBFX0RST1BET1dOLCRmZXU6OkZJRUxEVFlQRV9SQURJT0JVVE5TLAoJCQkJICAgICAkZmV1OjpGSUVMRFRZUEVfREFURSkpICkgY29udGludWU7CiAgICAkc29ydGluZ3NbJ3A6Jy4kb25lWyduYW1lJ11dID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ3VzZXJwcm9wJykuJzogJy4kb25lWyduYW1lJ10sJ3NvcnRieSc9PiRvbmVbJ25hbWUnXSwncmVxZmllbGQnPT4ncDonLiRvbmVbJ25hbWUnXSk7CiAgfQp9CgokZmV1X2dyb3VwcyA9IGFycmF5X2ZsaXAoJGZldS0+R2V0R3JvdXBMaXN0KCkpOwokdXBsb2FkX2NhdGVnb3JpZXMgPSBhcnJheV9mbGlwKCR0aGlzLT5nZXRDYXRlZ29yeUxpc3QoKSk7CiRyZXBvcnRfdHlwZXMgPSBhcnJheSgnc3VtbWFyeSc9PiR0aGlzLT5MYW5nKCdyZXBvcnRfc3VtbWFyeScpLCdkZXRhaWwnPT4kdGhpcy0+TGFuZygncmVwb3J0X2RldGFpbCcpKTsKJGZpcnN0X2RheV9vZl9tb250aCA9IG1rdGltZSgwLDAsMCxkYXRlKCdtJyksMSxkYXRlKCdZJykpOwokbGFzdF9kYXlfb2ZfbW9udGggPSBta3RpbWUoMjMsNTksNTksZGF0ZSgnbScpKzEsMCxkYXRlKCdZJykpOwokZGZsdF9mbGRzID0gYXJyYXkoJ3VwbG9hZF9uYW1lJywndXBsb2FkX2F1dGhvcicsJ3VwbG9hZF9zaXplJywndXBsb2FkX2RhdGUnLCdkb3dubG9hZHMnLCdkb3dubG9hZF91c2VyJyk7CgovL2J1aWxkIHVzZXIgcHJvZmlsZQokcHJvZmlsZSA9IGFycmF5KCdyZXBvcnRfdHlwZSc9PidzdW1tYXJ5JywgJ291dHB1dF90ZW1wbGF0ZSc9PicnLCAnY2F0ZWdvcmllcyc9PmFycmF5KCksICdmaWxlcyc9PicnLAoJCSAnZmV1X2dyb3Vwcyc9PmFycmF5KCksICdmZXVfdXNlcnMnPT4nJywgJ3N0YXJ0X2RhdGUnPT4kZmlyc3RfZGF5X29mX21vbnRoLCAnZW5kX2RhdGUnPT4kbGFzdF9kYXlfb2ZfbW9udGgsCgkJICd2aWV3X2ZpZWxkcyc9PmFycmF5X2tleXMoJGZpZWxkX2luZm8pLCAndmlld19zb3J0aW5nJz0+J2Rvd25sb2FkX3VzZXInLCAndmlld19zb3J0b3JkZXInPT4nKmRlZmF1bHQqJywKCQkgJ291dHB1dF90eXBlJz0+J2h0bWwnKTsKJHRtcCA9IGNtc191c2VycHJlZnM6OmdldCgkdGhpcy0+R2V0TmFtZSgpLidyZXBvcnRfZG93bmxvYWRzYnlmaWxlJyk7CmlmKCAkdG1wICkgJHByb2ZpbGUgPSB1bnNlcmlhbGl6ZSgkdG1wKTsKCi8vIGhhbmRsZSBidXR0b25zCmlmKCBpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkgKSB7CiAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ29wZXJhdGlvbl9jYW5jZWxsZWQnKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKLy8KLy8gZ2V0IHRoZSBwYXJhbXMuCi8vCmlmKCBpc3NldCgkcGFyYW1zWydyZXBvcnRfdHlwZSddKSApIHsKICAkcHJvZmlsZVsncmVwb3J0X3R5cGUnXSA9ICRwYXJhbXNbJ3JlcG9ydF90eXBlJ107CiAgJHByb2ZpbGVbJ291dHB1dF90ZW1wbGF0ZSddID0gJHBhcmFtc1snb3V0cHV0X3RlbXBsYXRlJ107CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ291dHB1dF90eXBlJ10pICkgJHByb2ZpbGVbJ291dHB1dF90eXBlJ10gPSAkcGFyYW1zWydvdXRwdXRfdHlwZSddOwogIGlmKCBpc3NldCgkcGFyYW1zWydzdGFydF9kYXRlWWVhciddKSApIHsKICAgICRwcm9maWxlWydzdGFydF9kYXRlJ10gPSBta3RpbWUoMCwwLDAsKGludCkkcGFyYW1zWydzdGFydF9kYXRlTW9udGgnXSwoaW50KSRwYXJhbXNbJ3N0YXJ0X2RhdGVEYXknXSwoaW50KSRwYXJhbXNbJ3N0YXJ0X2RhdGVZZWFyJ10pOwogIH0KICBpZiggaXNzZXQoJHBhcmFtc1snZW5kX2RhdGVZZWFyJ10pICkgewogICAgJHByb2ZpbGVbJ2VuZF9kYXRlJ10gPSBta3RpbWUoMjMsNTksNTksKGludCkkcGFyYW1zWydlbmRfZGF0ZU1vbnRoJ10sKGludCkkcGFyYW1zWydlbmRfZGF0ZURheSddLChpbnQpJHBhcmFtc1snZW5kX2RhdGVZZWFyJ10pOwogIH0KICBpZiggJHByb2ZpbGVbJ3N0YXJ0X2RhdGUnXSAhPSAnJyAmJiAkcHJvZmlsZVsnZW5kX2RhdGUnXSAhPSAnJyAmJgogICAgICAkcHJvZmlsZVsnc3RhcnRfZGF0ZSddID49ICRwcm9maWxlWydlbmRfZGF0ZSddICkgewogICAgLy8gZW5kIGRhdGUgYmVmb3JlIHN0YXJ0IGRhdGUsIGJlIHNtYXJ0IGFuZCBqdXN0IHN3YXAgZW0uCiAgICAkdG1wID0gJHByb2ZpbGVbJ3N0YXJ0X2RhdGUnXTsKICAgICRwcm9maWxlWydzdGFydF9kYXRlJ10gPSAkcHJvZmlsZVsnZW5kX2RhdGUnXTsKICAgICRwcm9maWxlWydlbmRfZGF0ZSddID0gJHRtcDsKICB9CgogIGlmKCBpc3NldCgkcGFyYW1zWyd2aWV3X2ZpZWxkcyddKSApIHsKICAgICRwcm9maWxlWyd2aWV3X2ZpZWxkcyddID0gJHBhcmFtc1sndmlld19maWVsZHMnXTsKICB9CiAgZWxzZSB7CiAgICAkcHJvZmlsZVsndmlld19maWVsZHMnXSA9ICRkZmx0X2ZsZHM7CiAgfQogIGlmKCBpc3NldCgkcGFyYW1zWyd2aWV3X3NvcnRpbmcnXSkgKSAgJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddID0gJHBhcmFtc1sndmlld19zb3J0aW5nJ107CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ3ZpZXdfc29ydG9yZGVyJ10pICkgJHByb2ZpbGVbJ3ZpZXdfc29ydG9yZGVyJ10gPSAkcGFyYW1zWyd2aWV3X3NvcnRvcmRlciddOwoKICAkcHJvZmlsZVsnY2F0ZWdvcmllcyddID0gYXJyYXkoKTsKICAkcHJvZmlsZVsnZmlsZXMnXSA9ICcnOwogIGlmKCBpc3NldCgkcGFyYW1zWydjYXRlZ29yaWVzJ10pICYmIGlzX2FycmF5KCRwYXJhbXNbJ2NhdGVnb3JpZXMnXSkgJiYgY291bnQoJHBhcmFtc1snY2F0ZWdvcmllcyddKSApIHsKICAgICRwcm9maWxlWydjYXRlZ29yaWVzJ10gPSAkcGFyYW1zWydjYXRlZ29yaWVzJ107CiAgfQogIGVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ2ZpbGVzJ10pICkgewogICAgJHByb2ZpbGVbJ2ZpbGVzJ10gPSAkcGFyYW1zWydmaWxlcyddOwogIH0KCiAgJHByb2ZpbGVbJ2ZldV9ncm91cHMnXSA9IGFycmF5KCk7CiAgJHByb2ZpbGVbJ2ZldV91c2VycyddID0gJyc7CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ZldV9ncm91cHMnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snZmV1X2dyb3VwcyddKSAmJiBjb3VudCgkcGFyYW1zWydmZXVfZ3JvdXBzJ10pICkgewogICAgJHByb2ZpbGVbJ2ZldV9ncm91cHMnXSA9ICRwYXJhbXNbJ2ZldV9ncm91cHMnXTsKICB9CiAgZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snZmV1X3VzZXJzJ10pICYmICRwYXJhbXNbJ2ZldV91c2VycyddICE9ICcnICkgewogICAgJHByb2ZpbGVbJ2ZldV91c2VycyddID0gJHBhcmFtc1snZmV1X3VzZXJzJ107CiAgfQp9CgovLwovLyBoYW5kbGUgc3VibWl0Ci8vCmlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgKSB7CiAgLy8gaWYgd2UgZ290IGhlcmUsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dAogIGNtc191c2VycHJlZnM6OnNldCgkdGhpcy0+R2V0TmFtZSgpLidyZXBvcnRfZG93bmxvYWRzYnlmaWxlJyxzZXJpYWxpemUoJHByb2ZpbGUpKTsKCiAgaWYoICRwcm9maWxlWydvdXRwdXRfdHlwZSddICE9ICdodG1sJyApIHsKICAgIC8vIGdlbmVyYXRlIHRoZSByZXBvcnQgZGlyZWN0bHkuCiAgICAkcGFyYW1zWydyZXBvcnQnXSA9IDE7CiAgfQogIGVsc2UgewogICAgLy8gZ290dGEgb3BlbiBhIG5ldyB3aW5kb3cgZmlyc3QuCiAgICAkdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdhZG1pbl9yZXBvcnRfZG93bmxvYWRzYnlmaWxlJywkcmV0dXJuaWQsYXJyYXkoJ3JlcG9ydCc9PjEpKTsKICAgICR1cmwgPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywkdXJsKS4nJnNob3d0ZW1wbGF0ZT1mYWxzZSc7CiAgICAkdHh0ID0gIndpbmRvdy5vcGVuKCd7JHVybH0nLCdyZXBvcnQnLCdzY3JvbGxiYXJzPXllcyxkaXJlY3Rvcmllcz0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHN0YXR1cz0wLHRvb2xiYXI9MCcpOyI7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2V4dHJhanMnLCR0eHQpOwogIH0KfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ3JlcG9ydCddKSApIHsKICAvLyBnZXQgdGhlIHVzZXJuYW1lcy4KICAkZXJyb3IgPSAnJzsKICAkdXNlcnMgPSBhcnJheSgpOwogICRkb191c2VycyA9IDA7CiAgaWYoIGNvdW50KCRwcm9maWxlWydmZXVfZ3JvdXBzJ10pID4gMCApIHsKICAgIC8vIGV4cGFuZCBncm91cHMgdG8gdXNlcnMKICAgICRkb191c2VycyA9IDE7CiAgICAkcXVlcnkgPSBuZXcgZmV1X3VzZXJfcXVlcnkoKTsKICAgICRxdWVyeS0+YWRkX2FuZF9vcHQoZmV1X3VzZXJfcXVlcnlfb3B0OjpNQVRDSF9HUk9VUElELCRwcm9maWxlWydmZXVfZ3JvdXBzJ10pOwogICAgJHJzID0gJHF1ZXJ5LT5leGVjdXRlKCk7CiAgICB3aGlsZSggISRycy0+RU9GKCkgKSB7CiAgICAgICR1c2Vyc1tdID0gJHJzLT5maWVsZHNbJ3VzZXJuYW1lJ107CiAgICAgICRycy0+TW92ZU5leHQoKTsKICAgIH0KICB9CiAgZWxzZSBpZiggJHByb2ZpbGVbJ2ZldV91c2VycyddICE9ICcnICkgewogICAgJGRvX3VzZXJzID0gMTsKICAgICR0bXAgPSBwcmVnX3NwbGl0KCcvW1xzLF0vJywkcHJvZmlsZVsnZmV1X3VzZXJzJ10pOwogICAgaWYoIGlzX2FycmF5KCR0bXApICYmIGNvdW50KCR0bXApICkgewogICAgICAkdG1wMiA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSRvbmUgPSB0cmltKCRvbmUpOwoJaWYoICEkb25lICkgY29udGludWU7CgkkdG1wMltdID0gJG9uZTsKICAgICAgfQogICAgICAkdXNlcnMgPSAkdG1wMjsKICAgIH0KICB9CiAgaWYoICRkb191c2VycyAmJiAhY291bnQoJHVzZXJzKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub3VzZXJzZm91bmQnKTsKCiAgaWYoICRlcnJvciA9PSAnJyApIHsKICAgIC8vIGdldCB0aGUgZmlsZXMuCiAgICAkZmlsZXMgPSBhcnJheSgpOwogICAgJGRvX2ZpbGVzID0gMDsKICAgIGlmKCBjb3VudCgkcHJvZmlsZVsnY2F0ZWdvcmllcyddKSA+IDAgKSAgewogICAgICAkZG9fZmlsZXMgPSAxOwogICAgICAkcXVlcnkgPSAnU0VMRUNUIFUudXBsb2FkX2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFUgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2lkIElOICgnLmltcGxvZGUoJywnLCRwcm9maWxlWydjYXRlZ29yaWVzJ10pLicpJzsKICAgICAgJGZpbGVzID0gJGRiLT5HZXRDb2woJHF1ZXJ5KTsKICAgIH0KICAgIGVsc2UgaWYoICRwcm9maWxlWydmaWxlcyddICE9ICcnICkgewogICAgICAkZG9fZmlsZXMgPSAxOwogICAgICAkdG1wID0gcHJlZ19zcGxpdCgnL1tccyxdLycsJHByb2ZpbGVbJ2ZpbGVzJ10pOwogICAgICBpZiggaXNfYXJyYXkoJHRtcCkgJiYgY291bnQoJHRtcCkgKSB7CgkkdG1wMiA9IGFycmF5KCk7IC8vIHJlZ3VsYXIgZmlsZW5hbWVzLgoJJHRtcDMgPSBhcnJheSgpOyAvLyB3aWxkY2FyZCBwYXR0ZXJucy4KCWZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgJG9uZSA9IHRyaW0oJG9uZSk7CgkgIGlmKCAhJG9uZSApIGNvbnRpbnVlOwoJICBpZiggc3RycG9zKCRvbmUsJyonKSAhPT0gRkFMU0UgfHwgc3RycG9zKCRvbmUsJyUnKSAhPT0gRkFMU0UgKSB7CgkgICAgJG9uZSA9IHN0cl9yZXBsYWNlKCcqJywnJScsJG9uZSk7CgkgICAgJG9uZSA9IHN0cl9yZXBsYWNlKCclJScsJyUnLCRvbmUpOwoJICAgICR0bXAzW10gPSAiKHVwbG9hZF9uYW1lIExJS0UgJyRvbmUnKSI7CgkgIH0KCSAgZWxzZSB7CgkgICAgJHRtcDJbXSA9ICInIi4kb25lLiInIjsKCSAgfQoJfQoJaWYoIGNvdW50KCR0bXAyKSApIHsKCSAgJHF1ZXJ5ID0gJ1NFTEVDVCB1cGxvYWRfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgV0hFUkUgdXBsb2FkX25hbWUgSU4gKCcuaW1wbG9kZSgkdG1wMikuJyknOwoJICAkZGJyID0gJGRiLT5HZXRDb2woJHF1ZXJ5KTsKCSAgaWYoIGlzX2FycmF5KCRkYnIpICYmIGNvdW50KCRkYnIpICkgJGZpbGVzID0gJGRicjsKCX0KCWlmKCBjb3VudCgkdG1wMykgKSB7CgkgICRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFdIRVJFICc7CgkgICRxdWVyeSAuPSBpbXBsb2RlKCcgT1IgJywkdG1wMyk7CgkgICRkYnIgPSAkZGItPkdldENvbCgkcXVlcnkpOwoJICBpZiggaXNfYXJyYXkoJGRicikgJiYgY291bnQoJGRicikgKSAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsJGRicik7Cgl9CgkkZmlsZXMgPSBhcnJheV91bmlxdWUoJGZpbGVzKTsKICAgICAgfQogICAgfQogICAgaWYoICRkb19maWxlcyAmJiAhY291bnQoJGZpbGVzKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9tYXRjaGluZ3JlY29yZHMnKTsKICB9CgogIGlmKCAkZXJyb3IgPT0gJycgKSB7CiAgICAvLwogICAgLy8gYnVpbGQgdGhlIHF1ZXJ5CiAgICAvLwogICAgJGpvaW5zID0gYXJyYXkoKTsKICAgICR3aGVyZSA9IGFycmF5KCk7CiAgICAkd2hlcmVwID0gYXJyYXkoKTsKICAgICR1c2Vyd2hlcmUgPSBudWxsOwogICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgJHJlcXVpcmVkX2NvbHVtbnMgPSBhcnJheSgpOwogICAgLy8gdmFyaWFibGVzIHdlIGNhbiByZXBsYWNlIGluIGFueSBqb2luLgogICAgJHN0ID0gJGRiLT5EYlRpbWVTdGFtcCgkcHJvZmlsZVsnc3RhcnRfZGF0ZSddKTsKICAgICRldCA9ICRkYi0+RGJUaW1lU3RhbXAoJHByb2ZpbGVbJ2VuZF9kYXRlJ10pOwogICAgJHJlcF92YXJzID0gYXJyYXkoKTsKICAgICRyZXBfdmFyc1snJXN0JSddID0gJHN0OwogICAgJHJlcF92YXJzWyclZXQlJ10gPSAkZXQ7CiAgICAkcmVwX3ZhcnNbJyV1dyUnXSA9ICcnOwoKICAgIC8vIGJ1aWxkIGEgdGltZSBsaW1pdGluZyB3aGVyZSBleHByZXNzaW9uCiAgICAkd2hlcmVbXSA9ICIoZG93bmxvYWRfZGF0ZSBCRVRXRUVOICRzdCBBTkQgJGV0KSI7CgogICAgLy8gYnVpbGQgYSBmaWxlcyB3aGVyZSBleHByZXNzaW9uCiAgICBpZiggY291bnQoJGZpbGVzKSApICR3aGVyZVtdID0gJ1UudXBsb2FkX2lkIElOICgnLmltcGxvZGUoJywnLCRmaWxlcykuJyknOwoKICAgIC8vIGJ1aWxkIGEgdXNlcnMgd2hlcmUgZXhwcmVzc2lvbgogICAgaWYoIGNvdW50KCR1c2VycykgKSB7CiAgICAgICR0bXAyID0gYXJyYXkoKTsgLy8gcmVndWxhciB1c2VybmFtZXMKICAgICAgJHRtcDMgPSBhcnJheSgpOyAvLyB3aWxkY2FyZCBwYXR0ZXJuCiAgICAgIGZvcmVhY2goICR1c2VycyBhcyAkdHVzZXIgKSB7CglpZiggc3RycG9zKCR0dXNlciwnKicpICE9PSBGQUxTRSB8fCBzdHJwb3MoJHR1c2VyLCclJykgIT09IEZBTFNFICkgewoJICAkdHVzZXIgPSBzdHJfcmVwbGFjZSgnKicsJyUnLCR0dXNlcik7CgkgICR0dXNlciA9IHN0cl9yZXBsYWNlKCclJScsJyUnLCR0dXNlcik7CgkgICR0bXAzW10gPSAiVUQuZG93bmxvYWRfdXNlciBMSUtFICckdHVzZXInIjsKCX0KCWVsc2UgewoJICAkdHVzZXIgPSAiJyIuJHR1c2VyLiInIjsKCSAgJHRtcDJbXSA9ICR0dXNlcjsKCX0KICAgICAgfQogICAgICAkd2ggPSBhcnJheSgpOwogICAgICBpZiggY291bnQoJHRtcDIpICkgJHdoW10gPSAnVUQuZG93bmxvYWRfdXNlciBJTiAoJy5pbXBsb2RlKCcsJywkdG1wMikuJyknOwogICAgICBpZiggY291bnQoJHRtcDMpICkgJHdoID0gYXJyYXlfbWVyZ2UoJHdoLCR0bXAzKTsKICAgICAgaWYoIGNvdW50KCR3aCkgKSB7CgkkdXNlcndoZXJlID0gJygnLiBpbXBsb2RlKCcgT1IgJywkd2gpLiAnKSc7CgkkcmVwX3ZhcnNbJyV1dyUnXSA9ICdBTkQgJy5zdHJfcmVwbGFjZSgnVUQuJywnJywkdXNlcndoZXJlKTsKCSR3aGVyZVtdID0gJHVzZXJ3aGVyZTsKICAgICAgfQogICAgfQoKICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGNvbHVtbnMgdG8gZGlzcGxheS4uIGFuZCBwcm9jZXNzIGN1c3RvbSBmaWVsZHMuCiAgICAvLyBtYWtlIHN1cmUgdXBsb2FkIGlkLCBhbmQgZG93bmxvYWQgbmFtZSBhcmUgaW4gdGhlIGxpc3QKICAgICR2aWV3X2ZpZWxkcyA9ICAkcHJvZmlsZVsndmlld19maWVsZHMnXTsKICAgIGlmKCBpc3NldCgkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsncmVxZmllbGQnXSkgJiYgIWluX2FycmF5KCRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXSwkdmlld19maWVsZHMpICkgewogICAgICAvLyBhZGRzIGNvbHVtbiB0byBjb2x1bW4gbGlzdCBpZiBpdHMgcmVxdWlyZWQgYnkgc29ydGluZy4KICAgICAgJGNvbCA9ICRzb3J0aW5nc1skcHJvZmlsZVsndmlld19zb3J0aW5nJ11dWydyZXFmaWVsZCddOwogICAgICAkcmVxdWlyZWRfY29sdW1uc1tdID0gJGNvbDsKICAgICAgJHZpZXdfZmllbGRzW10gPSAkY29sOwogICAgfQoKICAgICR2aWV3X2ZpZWxkcyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZShhcnJheSgndXBsb2FkX2lkJywndXBsb2FkX25hbWUnKSwkdmlld19maWVsZHMpKTsKCiAgICBmb3JlYWNoKCAkdmlld19maWVsZHMgYXMgJG9uZSApIHsKICAgICAgaWYoIGlzc2V0KCRmaWVsZF9pbmZvWyRvbmVdKSApIHsKCSRjb2x1bW5zW10gPSAkZmllbGRfaW5mb1skb25lXVsnY29sdW1uJ107CgkvL2lmKCBzdGFydHN3aXRoKCRvbmUsJ2Y6JykgfHwgc3RhcnRzd2l0aCgkb25lLCdwOicpICkgewoJaWYoIGlzc2V0KCRmaWVsZF9pbmZvWyRvbmVdWydqb2luJ10pICkgewoJICAkdG1wID0gJGZpZWxkX2luZm9bJG9uZV1bJ2pvaW4nXTsKCSAgJHRtcCA9IHN0cl9yZXBsYWNlKGFycmF5X2tleXMoJHJlcF92YXJzKSxhcnJheV92YWx1ZXMoJHJlcF92YXJzKSwkdG1wKTsKCSAgJGpvaW5zW10gPSAkdG1wOwoJfQogICAgICB9CiAgICB9CgogICAgLy8gYXNzZW1ibGUgdGhlIGJhc2ljIHF1ZXJ5CiAgICAkcXVlcnkgPSAnU0VMRUNUICcuaW1wbG9kZSgnLCcsJGNvbHVtbnMpLicgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgVQogICAgICAgICAgICAgIExFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZG93bmxvYWRzIFVEIE9OIFUudXBsb2FkX2lkID0gVUQuZmlsZV9pZAogICAgICAgICAgICAgIExFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBVQyBPTiBVLnVwbG9hZF9jYXRlZ29yeV9pZCA9IFVDLnVwbG9hZF9jYXRlZ29yeV9pZCc7CiAgICBpZiggY291bnQoJGpvaW5zKSApICRxdWVyeSAuPSAnICcuaW1wbG9kZSgnICcsJGpvaW5zKTsKICAgICRxdWVyeSAuPSAnIFdIRVJFICcuaW1wbG9kZSgnIEFORCAnLCR3aGVyZSk7CiAgICBpZiggJHByb2ZpbGVbJ3JlcG9ydF90eXBlJ10gPT0gJ3N1bW1hcnknICkgewogICAgICAvLyRxdWVyeSAuPSAnIEdST1VQIEJZIFUudXBsb2FkX2lkLFVELmRvd25sb2FkX3VzZXIgJzsKICAgICAgJHF1ZXJ5IC49ICcgR1JPVVAgQlkgVS51cGxvYWRfaWQgJzsKICAgIH0KCiAgICAvLyBhZGQgc29ydGluZwogICAgJHRtcCA9IGFycmF5KCk7CiAgICAkc29ydGJ5ID0gJGZpZWxkX2luZm9bJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnY29sdW1uJ107CiAgICBpZiggaXNzZXQoJHNvcnRpbmdzWyRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXV1bJ3NvcnRieSddKSApIHsKICAgICAgJHNvcnRieSA9ICRzb3J0aW5nc1skcHJvZmlsZVsndmlld19zb3J0aW5nJ11dWydzb3J0YnknXTsKICAgIH0KICAgICRzb3J0b3JkZXIgPSAkcHJvZmlsZVsndmlld19zb3J0b3JkZXInXTsKICAgIGlmKCAkc29ydG9yZGVyID09ICcqZGVmYXVsdConICkgewogICAgICAkc29ydG9yZGVyID0gJ0FTQyc7CiAgICAgIGlmKCBpc3NldCgkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnZGZsdHNvcnRieSddKSApICRzb3J0b3JkZXIgPSAkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnZGZsdHNvcnRieSddOwogICAgfQogICAgLy8gbm90ZTogcHJlcGVuZHMgc29ydCBieSB1cGxvYWQgbmFtZS4KICAgIC8vaWYoICRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXSAhPSAndXBsb2FkX25hbWUnICkgJHRtcFtdID0gJGZpZWxkX2luZm9bJ3VwbG9hZF9uYW1lJ11bJ2NvbHVtbiddLicgQVNDJzsKICAgICR0bXBbXSA9ICIkc29ydGJ5ICRzb3J0b3JkZXIiOwoKICAgIC8vIHNlY29uZCBzb3J0aW5nCiAgICBpZiggaXNzZXQoJHNvcnRpbmdzWyRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXV1bJ3NvcnRieTInXSkgKSB7CiAgICAgICRzb3J0YnkgPSAkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnc29ydGJ5MiddOwogICAgICAkc29ydG9yZGVyID0gJHByb2ZpbGVbJ3ZpZXdfc29ydG9yZGVyJ107CiAgICAgIGlmKCAkc29ydG9yZGVyID09ICcqZGVmYXVsdConICkgewoJJHNvcnRvcmRlciA9ICdBU0MnOwoJaWYoIGlzc2V0KCRzb3J0aW5nc1skcHJvZmlsZVsndmlld19zb3J0aW5nJ11dWydkZmx0c29ydGJ5MiddKSApICRzb3J0b3JkZXIgPSAkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnZGZsdHNvcnRieSddOwogICAgICB9CiAgICAgICR0bXBbXSA9ICIkc29ydGJ5ICRzb3J0b3JkZXIiOwogICAgfQogICAgJHF1ZXJ5IC49ICcgT1JERVIgQlkgJy5pbXBsb2RlKCcsICcsJHRtcCk7CgogICAgJGRiciA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KCR3aGVyZXApKTsKICAgIGlmKCAhaXNfYXJyYXkoJGRicikgfHwgY291bnQoJGRicikgPT0gMCApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9tYXRjaGluZ3JlY29yZHMnKTsKICB9CgogIHN3aXRjaCggJHByb2ZpbGVbJ291dHB1dF90eXBlJ10gKSB7CiAgY2FzZSAnY3N2JzoKICAgIGlmKCAkZXJyb3IgKSB7CiAgICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJGVycm9yKTsKICAgICAgYnJlYWs7CiAgICB9CiAgICAkaGFuZGxlcnMgPSBvYl9saXN0X2hhbmRsZXJzKCk7CiAgICBmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQogICAgaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT11cGxvYWRzLiIgLiBkYXRlKCJZLW0tZCIpIC4gIi5jc3YiKTsKICAgIGhlYWRlcigiQ29udGVudC10eXBlOiB0ZXh0L2NzdiIpOwogICAgZmx1c2goKTsKICAgICRoZHIgPSBhcnJheV9rZXlzKCRkYnJbMF0pOwogICAgZWNobyAnIycuY2dlX2FycmF5OjppbXBsb2RlX3F1b3RlZCgkaGRyKS4iXG4iOwogICAgZm9yZWFjaCggJGRiciBhcyAkcmVjICkgewogICAgICBlY2hvIGNnZV9hcnJheTo6aW1wbG9kZV9xdW90ZWQoYXJyYXlfdmFsdWVzKCRyZWMpKS4iXG4iOwogICAgfQogICAgZmx1c2goKTsKICAgIGV4aXQ7CiAgICBicmVhazsKCiAgY2FzZSAnaHRtbCc6CiAgICBpZiggJGVycm9yICkgewogICAgICAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkZXJyb3IpOwogICAgfQogICAgaWYoIGlzc2V0KCRkYnIpICYmIGlzX2FycmF5KCRkYnIpICYmIGNvdW50KCRkYnIpICkgewogICAgICAvLyBjcmVhdGUgbGFiZWxzLgogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgJHJlYyA9IGFycmF5X2tleXMoJGRiclswXSk7CiAgICAgIGZvcmVhY2goICRyZWMgYXMgJiRvbmUgKSB7CglpZiggaXNzZXQoJGZpZWxkX2luZm9bJG9uZV0pICkgewoJICAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJG9uZV1bJ2xhYmVsJ107CgkgIGNvbnRpbnVlOwoJfQoJaWYoIGlzc2V0KCRmaWVsZF9pbmZvWydmOicuJG9uZV0pICkgewoJICAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJ2Y6Jy4kb25lXVsnbGFiZWwnXTsKCSAgY29udGludWU7Cgl9CglpZiggaXNzZXQoJGZpZWxkX2luZm9bJ3A6Jy4kb25lXSkgKSB7CgkgICRvdXRbJG9uZV0gPSAkZmllbGRfaW5mb1sncDonLiRvbmVdWydsYWJlbCddOwoJfQogICAgICB9CiAgICAgICRzbWFydHktPmFzc2lnbignYXV0b19jb2x1bW5zJywkcmVxdWlyZWRfY29sdW1ucyk7CiAgICAgICRzbWFydHktPmFzc2lnbignbGFiZWxzJywkb3V0KTsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCdyZWNvcmRzJywkZGJyKTsKICAgIH0KICAgICRzbWFydHktPmFzc2lnbigndXNlcicsJHVzZXIpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdwcm9maWxlJywkcHJvZmlsZSk7CiAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3JkZl8nLiRwcm9maWxlWydvdXRwdXRfdGVtcGxhdGUnXSk7CiAgICBleGl0OwogICAgYnJlYWs7CgogIGNhc2UgJ2h0bWxlbWFpbCc6CiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCRlcnJvcik7CiAgICAgIGJyZWFrOwogICAgfQogICAgJG91dCA9IGFycmF5KCk7CiAgICAkcmVjID0gYXJyYXlfa2V5cygkZGJyWzBdKTsKICAgIGZvcmVhY2goICRyZWMgYXMgJiRvbmUgKSB7CiAgICAgIGlmKCBpc3NldCgkZmllbGRfaW5mb1skb25lXSkgKSAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJG9uZV1bJ2xhYmVsJ107CiAgICAgIGlmKCBpc3NldCgkZmllbGRfaW5mb1snZjonLiRvbmVdKSApICRvdXRbJG9uZV0gPSAkZmllbGRfaW5mb1snZjonLiRvbmVdWydsYWJlbCddOwogICAgICBpZiggaXNzZXQoJGZpZWxkX2luZm9bJ3A6Jy4kb25lXSkgKSAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJ3A6Jy4kb25lXVsnbGFiZWwnXTsKICAgIH0KICAgICRzbWFydHktPmFzc2lnbignYXV0b19jb2x1bW5zJywkcmVxdWlyZWRfY29sdW1ucyk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2xhYmVscycsJG91dCk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3VzZXInLCR1c2VyKTsKICAgICRzbWFydHktPmFzc2lnbigncHJvZmlsZScsJHByb2ZpbGUpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdyZWNvcmRzJywkZGJyKTsKICAgICRvdXQgPSAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGFiYXNlKCdyZGZfJy4kcHJvZmlsZVsnb3V0cHV0X3RlbXBsYXRlJ10pOwogICAgJG1haWxlciA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnQ01TTWFpbGVyJyk7CiAgICAkbWFpbGVyLT5BZGRBZGRyZXNzKCR1c2VyZW1haWwpOwogICAgJG1haWxlci0+U2V0U3ViamVjdCgkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlRnJvbURhdGEoJ3tzaXRlbmFtZX0gLSBEb3dubG9hZHMgYnkgRmlsZSBSZXBvcnQnKSk7CiAgICAkbWFpbGVyLT5TZXRCb2R5KCRvdXQpOwogICAgJG1haWxlci0+SXNIVE1MKFRSVUUpOwogICAgJG1haWxlci0+U2VuZCgpOwogICAgJG1haWxlci0+cmVzZXQoKTsKICAgIGVjaG8gJHRoaXMtPlNob3dNZXNzYWdlKCR0aGlzLT5MYW5nKCdtc2dfcmVwb3J0X3NlbnQnKSk7CiAgICBicmVhazsKICB9Cn0KCi8vCi8vIGJ1aWxkIHRoZSBmb3JtLgovLwokZmllbGRsaXN0ID0gYXJyYXkoKTsKZm9yZWFjaCggJGZpZWxkX2luZm8gYXMgJGtleSA9PiAkcmVjICkgewogICRzaG93ID0gMTsKICBzd2l0Y2ggKCAkcHJvZmlsZVsncmVwb3J0X3R5cGUnXSApIHsKICBjYXNlICdzdW1tYXJ5JzoKICAgIGlmKCBpc3NldCgkcmVjWydzdW1tYXJ5cnB0J10pICkgJHNob3cgPSAkcmVjWydzdW1tYXJ5cnB0J107CiAgICBicmVhazsKCiAgY2FzZSAnZGV0YWlsJzoKICAgIGlmKCBpc3NldCgkcmVjWydkZXRhaWxycHQnXSkgKSAkc2hvdyA9ICRyZWNbJ2RldGFpbHJwdCddOwogICAgYnJlYWs7CiAgfQogIGlmKCAhJHNob3cgKSBjb250aW51ZTsKICAkZmllbGRsaXN0WyRrZXldID0gJHJlY1snbGFiZWwnXTsKfQokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkbGlzdCcsJGZpZWxkbGlzdCk7Cgokc29ydGxpc3QgPSBhcnJheSgpOwpmb3JlYWNoKCAkc29ydGluZ3MgYXMgJGtleSA9PiAkcmVjICkgewogICRzaG93ID0gMTsKICBzd2l0Y2ggKCAkcHJvZmlsZVsncmVwb3J0X3R5cGUnXSApIHsKICBjYXNlICdzdW1tYXJ5JzoKICAgIGlmKCBpc3NldCgkcmVjWydzdW1tYXJ5cnB0J10pICkgJHNob3cgPSAkcmVjWydzdW1tYXJ5cnB0J107CiAgICBicmVhazsKCiAgY2FzZSAnZGV0YWlsJzoKICAgIGlmKCBpc3NldCgkcmVjWydkZXRhaWxycHQnXSkgKSAkc2hvdyA9ICRyZWNbJ2RldGFpbHJwdCddOwogICAgYnJlYWs7CiAgfQogIGlmKCAhJHNob3cgKSBjb250aW51ZTsKICAkc29ydGxpc3RbJGtleV0gPSAkcmVjWydsYWJlbCddOwp9CiRzbWFydHktPmFzc2lnbignc29ydGxpc3QnLCRzb3J0bGlzdCk7Cgokc29ydGJ5cyA9IGFycmF5KCcqZGVmYXVsdConPT4kdGhpcy0+TGFuZygncHJvbXB0X2RlZmF1bHQnKSwnQVNDJz0+JHRoaXMtPkxhbmcoJ3Byb21wdF9hc2NlbmRpbmcnKSwnREVTQyc9PiR0aGlzLT5MYW5nKCdwcm9tcHRfZGVzY2VuZGluZycpKTsKJHNtYXJ0eS0+YXNzaWduKCdzb3J0b3JkZXJzJywkc29ydGJ5cyk7Cgokc21hcnR5LT5hc3NpZ24oJ3N0YXJ0X3RpbWUnLCRmaXJzdF9kYXlfb2ZfbW9udGgpOwokc21hcnR5LT5hc3NpZ24oJ2VuZF90aW1lJywkbGFzdF9kYXlfb2ZfbW9udGgpOwoKJHVybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnYWRtaW5fYWpheF9vcHMnLCRyZXR1cm5pZCxhcnJheSgnb3AnPT4ndXNlcl9hdXRvY29tcGxldGUnKSkuJyZzaG93dGVtcGxhdGU9ZmFsc2UnOwokc21hcnR5LT5hc3NpZ24oJ3VybF9hamF4X2ZldV91c2Vycycsc3RyX3JlcGxhY2UoJyZhbXA7JywnJicsJHVybCkpOwokdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdhZG1pbl9hamF4X29wcycsJHJldHVybmlkLGFycmF5KCdvcCc9PidmaWxlX2F1dG9jb21wbGV0ZScpKS4nJnNob3d0ZW1wbGF0ZT1mYWxzZSc7CiRzbWFydHktPmFzc2lnbigndXJsX2FqYXhfZmlsZXMnLHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLCR1cmwpKTsKCiRzbWFydHktPmFzc2lnbigncHJvZmlsZScsJHByb2ZpbGUpOwokc21hcnR5LT5hc3NpZ24oJ2ZldV9ncm91cHMnLCRmZXVfZ3JvdXBzKTsKJHNtYXJ0eS0+YXNzaWduKCd1cGxvYWRfY2F0ZWdvcmllcycsJHVwbG9hZF9jYXRlZ29yaWVzKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXBvcnRfdHlwZXMnLCRyZXBvcnRfdHlwZXMpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKCiR0ZW1wbGF0ZXMgPSBjZ2VfdGVtcGxhdGVfdXRpbHM6OmdldF90ZW1wbGF0ZXNfYnlfcHJlZml4KCR0aGlzLCdyZGZfJyk7CmlmKCBpc19hcnJheSgkdGVtcGxhdGVzKSAmJiBjb3VudCgkdGVtcGxhdGVzKSApIHsKICAkb3V0ID0gYXJyYXkoKTsKICBmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0cGwgKSB7CiAgICAkdHBsID0gc3Vic3RyKCR0cGwsNCk7CiAgICAkb3V0WyR0cGxdID0gJHRwbDsKICB9CiAgJHNtYXJ0eS0+YXNzaWduKCdvdXRwdXRfdGVtcGxhdGVzJywkb3V0KTsKfQoKJG91dHB1dF90eXBlcyA9IGFycmF5KCdjc3YnPT4kdGhpcy0+TGFuZygnZXhwb3J0X2NzdicpLCdodG1sJz0+JHRoaXMtPkxhbmcoJ2V4cG9ydF9odG1sJykpOwppZiggJHVzZXJlbWFpbCApICRvdXRwdXRfdHlwZXNbJ2h0bWxlbWFpbCddID0gJHRoaXMtPkxhbmcoJ2V4cG9ydF9odG1sZW1haWwnKTsKJHNtYXJ0eS0+YXNzaWduKCdvdXRwdXRfdHlwZXMnLCRvdXRwdXRfdHlwZXMpOwoKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdhZG1pbl9yZXBvcnRfZG93bmxvYWRzYnlmaWxlLnRwbCcpOwoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.admin_report_downloadsbyuser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NyZWF0ZSBVcGxvYWRzIFJlcG9ydHMnKSApIHJldHVybjsKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ3JlcG9ydHMnKTsKCi8vCi8vIHNldHVwCi8vCiRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX0ZST05URU5EVVNFUlMsJzEuMjEuMTUnKTsKaWYoICEkZmV1ICkgewogICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3Jfbm9mZXUnKSk7CiAgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkKTsKfQoKLy8gZ2V0IHRoaXMgdXNlcnMgZW1haWwgYWRkcmVzcy4KJHVzZXJlbWFpbCA9ICcnOwokdXNlciA9IHVzZXJvcGVyYXRpb25zOjpnZXRfaW5zdGFuY2UoKS0+TG9hZFVzZXJCeUlkKGdldF91c2VyaWQoKSk7CmlmKCBpc19vYmplY3QoJHVzZXIpICYmICR1c2VyLT5lbWFpbCAhPSAnJyApICR1c2VyZW1haWwgPSAkdXNlci0+ZW1haWw7CgokcXVlcnkgPSAnU0VMRUNUIEYuaWQsIEYubmFtZSwgRi50eXBlLCBGLmF0dHJpYnMsIEYuaW9yZGVyIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBGIE9SREVSIEJZIGlvcmRlciBBU0MnOwokY3VzdG9tX2ZpZWxkcyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKCiRmZXVfcHJvcGRlZm5zID0gJGZldS0+R2V0UHJvcGVydHlEZWZucygpOwokZmllbGRfaW5mbyA9IGFycmF5KCk7CiRmaWVsZF9pbmZvWyd1cGxvYWRfaWQnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfaWQnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfaWQnKSk7CiRmaWVsZF9pbmZvWydjYXRlZ29yeV9pZCddID0gYXJyYXkoJ2NvbHVtbic9PidVLnVwbG9hZF9jYXRlZ29yeV9pZCBBUyBjYXRlZ29yeV9pZCcsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9pZCcpKTsKJGZpZWxkX2luZm9bJ2NhdGVnb3J5X25hbWUnXSA9IGFycmF5KCdjb2x1bW4nPT4nVUMudXBsb2FkX2NhdGVnb3J5X25hbWUgQVMgY2F0ZWdvcnlfbmFtZScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9uYW1lJykpOwokZmllbGRfaW5mb1snY2F0ZWdvcnlfcGF0aCddID0gYXJyYXkoJ2NvbHVtbic9PidVQy51cGxvYWRfY2F0ZWdvcnlfcGF0aCBBUyBjYXRlZ29yeV9wYXRoJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2NhdGVnb3J5X3BhdGgnKSk7CiRmaWVsZF9pbmZvWyd1cGxvYWRfbmFtZSddID0gYXJyYXkoJ2NvbHVtbic9PidVLnVwbG9hZF9uYW1lJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX25hbWUnKSk7CiRmaWVsZF9pbmZvWydhdXRob3InXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfYXV0aG9yIEFTIGF1dGhvcicsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9hdXRob3InKSk7CiRmaWVsZF9pbmZvWydzdW1tYXJ5J10gPSBhcnJheSgnY29sdW1uJz0+J1UudXBsb2FkX3N1bW1hcnkgQVMgc3VtbWFyeScsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9zdW1tYXJ5JykpOwokZmllbGRfaW5mb1snZGVzY3JpcHRpb24nXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfZGVzY3JpcHRpb24gQVMgZGVzY3JpcHRpb24nLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfZGVzY3JpcHRpb24nKSk7CiRmaWVsZF9pbmZvWyd1cGxvYWRfaXAnXSA9IGFycmF5KCdjb2x1bW4nPT4nVS51cGxvYWRfaXAnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfaXAnKSk7CiRmaWVsZF9pbmZvWyd1cGxvYWRfc2l6ZSddID0gYXJyYXkoJ2NvbHVtbic9PidVLnVwbG9hZF9zaXplJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX3NpemUnKSk7CiRmaWVsZF9pbmZvWyd1cGxvYWRfZGF0ZSddID0gYXJyYXkoJ2NvbHVtbic9PidVLnVwbG9hZF9kYXRlJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2RhdGUnKSk7CiRmaWVsZF9pbmZvWydkb3dubG9hZHMnXSA9IGFycmF5KCdjb2x1bW4nPT4nQ09VTlQoVUQuZG93bmxvYWRfaWQpIEFTIGRvd25sb2FkcycsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkcycpLCdkZXRhaWxycHQnPT4wKTsKJGZpZWxkX2luZm9bJ2Rvd25sb2FkX3VzZXInXSA9IGFycmF5KCdjb2x1bW4nPT4nVUQuZG93bmxvYWRfdXNlcicsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkX3VzZXInKSk7CiRmaWVsZF9pbmZvWydkb3dubG9hZF9kYXRlJ10gPSBhcnJheSgnY29sdW1uJz0+J1VELmRvd25sb2FkX2RhdGUnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF9kb3dubG9hZF9kYXRlJyksJ3N1bW1hcnlycHQnPT4wKTsKJGZpZWxkX2luZm9bJ2xhdGVzdF9kb3dubG9hZCddID0gYXJyYXkoJ2NvbHVtbic9PidNQVgoVUQuZG93bmxvYWRfZGF0ZSkgQVMgbGF0ZXN0X2Rvd25sb2FkJywKCQkJCSAgICAgICAnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfbGF0ZXN0X2Rvd25sb2FkJyksCgkJCQkgICAgICAgJ2RldGFpbHJwdCc9PjApOwppZiggaXNfYXJyYXkoJGN1c3RvbV9maWVsZHMpICYmIGNvdW50KCRjdXN0b21fZmllbGRzKSApIHsKICAkaSA9IDE7CiAgZm9yZWFjaCggJGN1c3RvbV9maWVsZHMgYXMgJG9uZSApIHsKICAgICRhbGlhcyA9ICdGVicuJGkrKzsKICAgICRuYW1lID0gc3RyX3JlcGxhY2UoJyAnLCdfJywkb25lWyduYW1lJ10pOwogICAgJGZpZWxkX2luZm9bJ2Y6Jy4kbmFtZV0gPQogICAgICBhcnJheSgnam9pbic9PidMRUZUIEpPSU4gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyAnLiRhbGlhcy4nCiAgICAgICAgICAgICBPTiBVLnVwbG9hZF9pZCA9ICcuJGFsaWFzLicudXBsb2FkX2lkIEFORCAnLiRhbGlhcy4nLmZsZF9pZCA9ICcuKGludCkkb25lWydpZCddLAoJICAgICdjb2x1bW4nPT4kYWxpYXMuJy52YWx1ZSBBUyAnLiRuYW1lLAoJICAgICdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZCcpLic6ICcuJG9uZVsnbmFtZSddKTsKICB9Cn0KaWYoIGlzX2FycmF5KCRmZXVfcHJvcGRlZm5zKSAmJiBjb3VudCgkZmV1X3Byb3BkZWZucykgKSB7CiAgJGkgPSAxOwogIHVzb3J0KCRmZXVfcHJvcGRlZm5zLGZ1bmN0aW9uKCRhLCRiKXsgcmV0dXJuIHN0cmNtcCgkYVsncHJvbXB0J10sJGJbJ3Byb21wdCddKTsgfSk7CiAgZm9yZWFjaCggJGZldV9wcm9wZGVmbnMgYXMgJGtleSA9PiAkb25lICkgewogICAgaWYoICRvbmVbJ3R5cGUnXSA9PSAkZmV1OjpGSUVMRFRZUEVfREFUQSApIGNvbnRpbnVlOwogICAgJGFsaWFzID0gJ0ZFVScuJGkrKzsKICAgICRzdWJzZWxlY3QgPSAiTEVGVCBKT0lOIChTRUxFQ1QgRkVVLnVzZXJuYW1lLEZFVVYudGl0bGUsRkVVUC50eXBlLEZFVVYuZGF0YSBGUk9NIGNtc19tb2R1bGVfZmV1c2Vyc191c2VycyBGRVUgTEVGVCBKT0lOIGNtc19tb2R1bGVfZmV1c2Vyc19wcm9wZXJ0aWVzIEZFVVYgT04gRkVVLmlkID0gRkVVVi51c2VyaWQgTEVGVCBKT0lOIGNtc19tb2R1bGVfZmV1c2Vyc19wcm9wZGVmbiBGRVVQIE9OIEZFVVAubmFtZSA9IEZFVVYudGl0bGUgV0hFUkUgRkVVUC50eXBlICE9IDkgQU5EIEZFVVAubmFtZSA9ICclcycpICRhbGlhcyI7CiAgICAkZmllbGRfaW5mb1sncDonLiRvbmVbJ25hbWUnXV0gPQogICAgICBhcnJheSgnY29sdW1uJz0+IiRhbGlhcy5kYXRhIEFTICIuJG9uZVsnbmFtZSddLAoJICAgICdqb2luJz0+c3ByaW50Zigkc3Vic2VsZWN0LCRvbmVbJ25hbWUnXSkuIiBPTiBVRC5kb3dubG9hZF91c2VyID0gJGFsaWFzLnVzZXJuYW1lIiwKCSAgICAnbGFiZWwnPT4kdGhpcy0+TGFuZygndXNlcnByb3AnKS4nOiAnLiRvbmVbJ3Byb21wdCddKTsKICB9Cn0KLy8gdG9kbzogYWRkIGN1c3RvbSBmaWVsZHMgaW4gaGVyZS4KCiRzb3J0aW5ncyA9IGFycmF5KCk7CiRzb3J0aW5nc1sndXBsb2FkX2lkJ10gPSBhcnJheSgnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2lkJykpOwokc29ydGluZ3NbJ2NhdGVnb3J5X25hbWUnXSA9IGFycmF5KCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfY2F0ZWdvcnlfbmFtZScpKTsKJHNvcnRpbmdzWyd1cGxvYWRfbmFtZSddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9uYW1lJykpOwokc29ydGluZ3NbJ2F1dGhvciddID0gYXJyYXkoJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX3VwbG9hZF9hdXRob3InKSwncmVxZmllbGQnPT4nYXV0aG9yJywnc29ydGJ5Jz0+J2F1dGhvcicpOwokc29ydGluZ3NbJ3NpemUnXSA9IGFycmF5KCdkZmx0c29ydGJ5Jz0+J0RFU0MnLCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZF91cGxvYWRfc2l6ZScpKTsKJHNvcnRpbmdzWydkYXRlJ10gPSBhcnJheSgnZGZsdHNvcnRieSc9PidERVNDJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX2RhdGUnKSk7CiRzb3J0aW5nc1snc3VtbWFyeSddID0gYXJyYXkoJ2RmbHRzb3J0YnknPT4nQVNDJywnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfdXBsb2FkX3N1bW1hcnknKSwnc29ydGJ5Jz0+J3N1bW1hcnknLCdyZXFmaWVsZCc9PidzdW1tYXJ5Jyk7CiRzb3J0aW5nc1snZG93bmxvYWRzJ10gPSBhcnJheSgnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfZG93bmxvYWRzJyksJ3JlcWZpZWxkJz0+J2Rvd25sb2FkcycsJ2RldGFpbHJwdCc9PjAsJ3NvcnRieSc9Pidkb3dubG9hZHMnKTsKJHNvcnRpbmdzWydkb3dubG9hZF91c2VyJ10gPSBhcnJheSgnbGFiZWwnPT4kdGhpcy0+TGFuZygnZmllbGRfZG93bmxvYWRfdXNlcicpLCdzdW1tYXJ5cnB0Jz0+MCk7CiRzb3J0aW5nc1snZG93bmxvYWRfZGF0ZSddID0gYXJyYXkoJ2RmbHRzb3J0YnknPT4nREVTQycsJ2xhYmVsJz0+JHRoaXMtPkxhbmcoJ2ZpZWxkX2Rvd25sb2FkX2RhdGUnKSwnc3VtbWFyeXJwdCc9PjApOwppZiggaXNfYXJyYXkoJGN1c3RvbV9maWVsZHMpICYmIGNvdW50KCRjdXN0b21fZmllbGRzKSApIHsKICBmb3JlYWNoKCAkY3VzdG9tX2ZpZWxkcyBhcyAkb25lICkgewogICAgJHNvcnRpbmdzWydmOicuJG9uZVsnbmFtZSddXSA9CiAgICAgIGFycmF5KCdsYWJlbCc9PiR0aGlzLT5MYW5nKCdmaWVsZCcpLic6ICcuJG9uZVsnbmFtZSddLAoJICAgICdyZXFmaWVsZCc9PidmOicuJG9uZVsnbmFtZSddKTsKICB9Cn0KaWYoIGlzX2FycmF5KCRmZXVfcHJvcGRlZm5zKSAmJiBjb3VudCgkZmV1X3Byb3BkZWZucykgKSB7CiAgZm9yZWFjaCggJGZldV9wcm9wZGVmbnMgYXMgJGtleSA9PiAkb25lICkgewogICAgaWYoICFpbl9hcnJheSgkb25lWyd0eXBlJ10sYXJyYXkoJGZldTo6RklFTERUWVBFX1RFWFQsJGZldTo6RklFTERUWVBFX0VNQUlMLAoJCQkJICAgICAkZmV1OjpGSUVMRFRZUEVfRFJPUERPV04sJGZldTo6RklFTERUWVBFX1JBRElPQlVUTlMsCgkJCQkgICAgICRmZXU6OkZJRUxEVFlQRV9EQVRFKSkgKSBjb250aW51ZTsKICAgICRzb3J0aW5nc1sncDonLiRvbmVbJ25hbWUnXV0gPSBhcnJheSgnbGFiZWwnPT4kdGhpcy0+TGFuZygndXNlcnByb3AnKS4nOiAnLiRvbmVbJ25hbWUnXSwKCQkJCQkgJ3NvcnRieSc9PiRvbmVbJ25hbWUnXSwgJ3JlcWZpZWxkJz0+J3A6Jy4kb25lWyduYW1lJ10pOwogIH0KfQovLyB0b2RvOiBhZGQgY3VzdG9tIGZpZWxkcyBoZXJlLgoKJGZldV9ncm91cHMgPSBhcnJheV9mbGlwKCRmZXUtPkdldEdyb3VwTGlzdCgpKTsKJHVwbG9hZF9jYXRlZ29yaWVzID0gYXJyYXlfZmxpcCgkdGhpcy0+Z2V0Q2F0ZWdvcnlMaXN0KCkpOwokcmVwb3J0X3R5cGVzID0gYXJyYXkoJ3N1bW1hcnknPT4kdGhpcy0+TGFuZygncmVwb3J0X3N1bW1hcnknKSwnZGV0YWlsJz0+JHRoaXMtPkxhbmcoJ3JlcG9ydF9kZXRhaWwnKSk7CiRmaXJzdF9kYXlfb2ZfbW9udGggPSBta3RpbWUoMCwwLDAsZGF0ZSgnbScpLDEsZGF0ZSgnWScpKTsKJGxhc3RfZGF5X29mX21vbnRoID0gbWt0aW1lKDIzLDU5LDU5LGRhdGUoJ20nKSsxLDAsZGF0ZSgnWScpKTsKJGRmbHRfZmxkcyA9IGFycmF5KCd1cGxvYWRfbmFtZScsJ3VwbG9hZF9hdXRob3InLCd1cGxvYWRfc2l6ZScsJ3VwbG9hZF9kYXRlJywnZG93bmxvYWRzJywnZG93bmxvYWRfdXNlcicpOwoKLy9idWlsZCB1c2VyIHByb2ZpbGUKJHByb2ZpbGUgPSBhcnJheSgncmVwb3J0X3R5cGUnPT4nc3VtbWFyeScsJ291dHB1dF90ZW1wbGF0ZSc9PicnLCdmZXVfZ3JvdXBzJz0+YXJyYXkoKSwnY2F0ZWdvcmllcyc9PmFycmF5KCksCgkJICdmZXVfdXNlcnMnPT4nJywnc3RhcnRfZGF0ZSc9PiRmaXJzdF9kYXlfb2ZfbW9udGgsJ2VuZF9kYXRlJz0+JGxhc3RfZGF5X29mX21vbnRoLAoJCSAndmlld19maWVsZHMnPT5hcnJheV9rZXlzKCRmaWVsZF9pbmZvKSwndmlld19zb3J0aW5nJz0+J2Rvd25sb2FkX3VzZXInLCd2aWV3X3NvcnRvcmRlcic9PicqZGVmYXVsdConLAoJCSAnb3V0cHV0X3R5cGUnPT4naHRtbCcpOwokdG1wID0gY21zX3VzZXJwcmVmczo6Z2V0KCR0aGlzLT5HZXROYW1lKCkuJ3JlcG9ydF9kb3dubG9hZHNieXVzZXInKTsKaWYoICR0bXAgKSAkcHJvZmlsZSA9IHVuc2VyaWFsaXplKCR0bXApOwoKLy8gaGFuZGxlIGJ1dHRvbnMKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApIHsKICAkdGhpcy0+U2V0TWVzc2FnZSgkdGhpcy0+TGFuZygnb3BlcmF0aW9uX2NhbmNlbGxlZCcpKTsKICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwp9CgovLwovLyBnZXQgdGhlIHBhcmFtcy4KLy8KaWYoIGlzc2V0KCRwYXJhbXNbJ3JlcG9ydF90eXBlJ10pICkgewogICRwcm9maWxlWydyZXBvcnRfdHlwZSddID0gJHBhcmFtc1sncmVwb3J0X3R5cGUnXTsKICAkcHJvZmlsZVsnb3V0cHV0X3RlbXBsYXRlJ10gPSAkcGFyYW1zWydvdXRwdXRfdGVtcGxhdGUnXTsKICBpZiggaXNzZXQoJHBhcmFtc1snb3V0cHV0X3R5cGUnXSkgKSAkcHJvZmlsZVsnb3V0cHV0X3R5cGUnXSA9ICRwYXJhbXNbJ291dHB1dF90eXBlJ107CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ3N0YXJ0X2RhdGVZZWFyJ10pICkgewogICAgJHByb2ZpbGVbJ3N0YXJ0X2RhdGUnXSA9IG1rdGltZSgwLDAsMCwoaW50KSRwYXJhbXNbJ3N0YXJ0X2RhdGVNb250aCddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZURheSddLChpbnQpJHBhcmFtc1snc3RhcnRfZGF0ZVllYXInXSk7CiAgfQogIGlmKCBpc3NldCgkcGFyYW1zWydlbmRfZGF0ZVllYXInXSkgKSB7CiAgICAkcHJvZmlsZVsnZW5kX2RhdGUnXSA9IG1rdGltZSgyMyw1OSw1OSwoaW50KSRwYXJhbXNbJ2VuZF9kYXRlTW9udGgnXSwoaW50KSRwYXJhbXNbJ2VuZF9kYXRlRGF5J10sKGludCkkcGFyYW1zWydlbmRfZGF0ZVllYXInXSk7CiAgfQogIGlmKCAkcHJvZmlsZVsnc3RhcnRfZGF0ZSddICE9ICcnICYmICRwcm9maWxlWydlbmRfZGF0ZSddICE9ICcnICYmICRwcm9maWxlWydzdGFydF9kYXRlJ10gPj0gJHByb2ZpbGVbJ2VuZF9kYXRlJ10gKSB7CiAgICAvLyBlbmQgZGF0ZSBiZWZvcmUgc3RhcnQgZGF0ZSwgYmUgc21hcnQgYW5kIGp1c3Qgc3dhcCBlbS4KICAgICR0bXAgPSAkcHJvZmlsZVsnc3RhcnRfZGF0ZSddOwogICAgJHByb2ZpbGVbJ3N0YXJ0X2RhdGUnXSA9ICRwcm9maWxlWydlbmRfZGF0ZSddOwogICAgJHByb2ZpbGVbJ2VuZF9kYXRlJ10gPSAkdG1wOwogIH0KCiAgaWYoIGlzc2V0KCRwYXJhbXNbJ3ZpZXdfZmllbGRzJ10pICkgewogICAgJHByb2ZpbGVbJ3ZpZXdfZmllbGRzJ10gPSAkcGFyYW1zWyd2aWV3X2ZpZWxkcyddOwogIH0KICBlbHNlIHsKICAgICRwcm9maWxlWyd2aWV3X2ZpZWxkcyddID0gJGRmbHRfZmxkczsKICB9CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ3ZpZXdfc29ydGluZyddKSApICAkcHJvZmlsZVsndmlld19zb3J0aW5nJ10gPSAkcGFyYW1zWyd2aWV3X3NvcnRpbmcnXTsKICBpZiggaXNzZXQoJHBhcmFtc1sndmlld19zb3J0b3JkZXInXSkgKSAkcHJvZmlsZVsndmlld19zb3J0b3JkZXInXSA9ICRwYXJhbXNbJ3ZpZXdfc29ydG9yZGVyJ107CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3JpZXMnXSkgKSB7CiAgICAkcHJvZmlsZVsnY2F0ZWdvcmllcyddID0gJHBhcmFtc1snY2F0ZWdvcmllcyddOwogIH0KICBlbHNlIHsKICAgICRwcm9maWxlWydjYXRlZ29yaWVzJ10gPSBhcnJheSgpOwogIH0KCiAgJHByb2ZpbGVbJ2ZldV9ncm91cHMnXSA9IGFycmF5KCk7CiAgJHByb2ZpbGVbJ2ZldV91c2VycyddID0gJyc7CiAgaWYoIGlzc2V0KCRwYXJhbXNbJ2ZldV9ncm91cHMnXSkgJiYgaXNfYXJyYXkoJHBhcmFtc1snZmV1X2dyb3VwcyddKSAmJiBjb3VudCgkcGFyYW1zWydmZXVfZ3JvdXBzJ10pICkgewogICAgJHByb2ZpbGVbJ2ZldV9ncm91cHMnXSA9ICRwYXJhbXNbJ2ZldV9ncm91cHMnXTsKICB9CiAgZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snZmV1X3VzZXJzJ10pICYmICRwYXJhbXNbJ2ZldV91c2VycyddICE9ICcnICkgewogICAgJHByb2ZpbGVbJ2ZldV91c2VycyddID0gJHBhcmFtc1snZmV1X3VzZXJzJ107CiAgfQp9CgovLwovLyBoYW5kbGUgc3VibWl0Ci8vCmlmKCBpc3NldCgkcGFyYW1zWydzdWJtaXQnXSkgKSB7CiAgLy8gaWYgd2UgZ290IGhlcmUsIGV2ZXJ5dGhpbmcgY2hlY2tzIG91dAogIGNtc191c2VycHJlZnM6OnNldCgkdGhpcy0+R2V0TmFtZSgpLidyZXBvcnRfZG93bmxvYWRzYnl1c2VyJyxzZXJpYWxpemUoJHByb2ZpbGUpKTsKCiAgaWYoICRwcm9maWxlWydvdXRwdXRfdHlwZSddICE9ICdodG1sJyApIHsKICAgIC8vIGdlbmVyYXRlIHRoZSByZXBvcnQgZGlyZWN0bHkuCiAgICAkcGFyYW1zWydyZXBvcnQnXSA9IDE7CiAgfQogIGVsc2UgewogICAgLy8gZ290dGEgb3BlbiBhIG5ldyB3aW5kb3cgZmlyc3QuCiAgICAkdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdhZG1pbl9yZXBvcnRfZG93bmxvYWRzYnl1c2VyJywkcmV0dXJuaWQsYXJyYXkoJ3JlcG9ydCc9PjEpKTsKICAgICR1cmwgPSBzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywkdXJsKS4nJnNob3d0ZW1wbGF0ZT1mYWxzZSc7CiAgICAkdHh0ID0gIndpbmRvdy5vcGVuKCd7JHVybH0nLCdyZXBvcnQnLCdzY3JvbGxiYXJzPXllcyxkaXJlY3Rvcmllcz0wLGxvY2F0aW9uPTAsbWVudWJhcj0wLHN0YXR1cz0wLHRvb2xiYXI9MCcpOyI7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2V4dHJhanMnLCR0eHQpOwogIH0KfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ3JlcG9ydCddKSApIHsKICAvLyBnZXQgdGhlIHVzZXJuYW1lcy4KICAkZXJyb3IgPSAnJzsKICAkdXNlcnMgPSBhcnJheSgpOwogICRkb191c2VycyA9IDA7CiAgaWYoIGNvdW50KCRwcm9maWxlWydmZXVfZ3JvdXBzJ10pID4gMCApIHsKICAgIC8vIGV4cGFuZCBncm91cHMgdG8gdXNlcnMKICAgICRkb191c2VycyA9IDE7CiAgICAkcXVlcnkgPSBuZXcgZmV1X3VzZXJfcXVlcnkoKTsKICAgICRxdWVyeS0+YWRkX2FuZF9vcHQoZmV1X3VzZXJfcXVlcnlfb3B0OjpNQVRDSF9HUk9VUElELCRwcm9maWxlWydmZXVfZ3JvdXBzJ10pOwogICAgJHJzID0gJHF1ZXJ5LT5leGVjdXRlKCk7CiAgICB3aGlsZSggISRycy0+RU9GKCkgKSB7CiAgICAgICR1c2Vyc1tdID0gJHJzLT5maWVsZHNbJ3VzZXJuYW1lJ107CiAgICAgICRycy0+TW92ZU5leHQoKTsKICAgIH0KICB9CiAgZWxzZSBpZiggJHByb2ZpbGVbJ2ZldV91c2VycyddICE9ICcnICkgewogICAgJGRvX3VzZXJzID0gMTsKICAgICR0bXAgPSBwcmVnX3NwbGl0KCcvW1xzLF0vJywkcHJvZmlsZVsnZmV1X3VzZXJzJ10pOwogICAgaWYoIGlzX2FycmF5KCR0bXApICYmIGNvdW50KCR0bXApICkgewogICAgICAkdG1wMiA9IGFycmF5KCk7CiAgICAgIGZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSRvbmUgPSB0cmltKCRvbmUpOwoJaWYoICEkb25lICkgY29udGludWU7CgkkdG1wMltdID0gJG9uZTsKICAgICAgfQogICAgICAkdXNlcnMgPSAkdG1wMjsKICAgIH0KICB9CiAgaWYoICRkb191c2VycyAmJiAhY291bnQoJHVzZXJzKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub3VzZXJzZm91bmQnKTsKCiAgaWYoICRlcnJvciA9PSAnJyApIHsKICAgIC8vCiAgICAvLyBidWlsZCB0aGUgcXVlcnkKICAgIC8vCiAgICAkam9pbnMgPSBhcnJheSgpOwogICAgJHdoZXJlID0gYXJyYXkoKTsKICAgICR3aGVyZXAgPSBhcnJheSgpOwogICAgJGNvbHVtbnMgPSBhcnJheSgpOwogICAgLy8gdmFyaWFibGVzIHdlIGNhbiByZXBsYWNlIGluIGFueSBqb2luLgogICAgJHN0ID0gJGRiLT5EYlRpbWVTdGFtcCgkcHJvZmlsZVsnc3RhcnRfZGF0ZSddKTsKICAgICRldCA9ICRkYi0+RGJUaW1lU3RhbXAoJHByb2ZpbGVbJ2VuZF9kYXRlJ10pOwogICAgJHJlcF92YXJzID0gYXJyYXkoKTsKICAgICRyZXBfdmFyc1snJXN0JSddID0gJHN0OwogICAgJHJlcF92YXJzWyclZXQlJ10gPSAkZXQ7CiAgICAkcmVwX3ZhcnNbJyV1dyUnXSA9ICcnOwoKICAgIGlmKCBpc19hcnJheSgkcHJvZmlsZVsnY2F0ZWdvcmllcyddKSAmJiBjb3VudCgkcHJvZmlsZVsnY2F0ZWdvcmllcyddKSApIHsKICAgICAgJHdoZXJlW10gPSAnVS51cGxvYWRfY2F0ZWdvcnlfaWQgSU4gKCcuaW1wbG9kZSgnLCcsJHByb2ZpbGVbJ2NhdGVnb3JpZXMnXSkuJyknOwogICAgfQoKICAgIC8vIGJ1aWxkIHRoZSBsaXN0IG9mIGNvbHVtbnMgdG8gZGlzcGxheS4uIGFuZCBwcm9jZXNzIGN1c3RvbSBmaWVsZHMuCiAgICAkdmlld19maWVsZHMgPSAgJHByb2ZpbGVbJ3ZpZXdfZmllbGRzJ107CiAgICBpZiggaXNzZXQoJHNvcnRpbmdzWyRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXV1bJ3JlcWZpZWxkJ10pICYmICFpbl9hcnJheSgkcHJvZmlsZVsndmlld19zb3J0aW5nJ10sJHZpZXdfZmllbGRzKSApIHsKICAgICAgLy8gYWRkcyBjb2x1bW4gdG8gY29sdW1uIGxpc3QgaWYgaXRzIHJlcXVpcmVkIGJ5IHNvcnRpbmcuCiAgICAgICRjb2wgPSAkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsncmVxZmllbGQnXTsKICAgICAgJHJlcXVpcmVkX2NvbHVtbnNbXSA9ICRjb2w7CiAgICAgICR2aWV3X2ZpZWxkc1tdID0gJGNvbDsKICAgIH0KCiAgICAkdmlld19maWVsZHMgPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoYXJyYXkoJ2Rvd25sb2FkX3VzZXInLCd1cGxvYWRfaWQnKSwkdmlld19maWVsZHMpKTsKCiAgICBmb3JlYWNoKCAkdmlld19maWVsZHMgYXMgJG9uZSApIHsKICAgICAgaWYoIGlzc2V0KCRmaWVsZF9pbmZvWyRvbmVdKSApIHsKCSRjb2x1bW5zW10gPSAkZmllbGRfaW5mb1skb25lXVsnY29sdW1uJ107CglpZiggaXNzZXQoJGZpZWxkX2luZm9bJG9uZV1bJ2pvaW4nXSkgKSB7CgkgICR0bXAgPSAkZmllbGRfaW5mb1skb25lXVsnam9pbiddOwoJICAkdG1wID0gc3RyX3JlcGxhY2UoYXJyYXlfa2V5cygkcmVwX3ZhcnMpLGFycmF5X3ZhbHVlcygkcmVwX3ZhcnMpLCR0bXApOwoJICAkam9pbnNbXSA9ICR0bXA7Cgl9CiAgICAgIH0KICAgIH0KCiAgICAvLyBwaWNrIGEgZGVmYXVsdCBzb3J0aW5nLgogICAgJHNvcnRpbmcgPSAnZG93bmxvYWRzJzsKICAgIGlmKCAkcHJvZmlsZVsncmVwb3J0X3R5cGUnXSA9PSAnc3VtbWFyeScgKSB7CiAgICAgICRzb3J0aW5nID0gJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddOwogICAgfQogICAgZWxzZSB7CiAgICAgICRzb3J0aW5nID0gJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddOwogICAgICBpZiggJHNvcnRpbmcgPT0gJ2Rvd25sb2FkcycgKSAkc29ydGluZyA9ICdkb3dubG9hZF91c2VyJzsKICAgIH0KICAgICRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXSA9ICRzb3J0aW5nOwogICAgaWYoIGlzc2V0KCRzb3J0aW5nc1skc29ydGluZ11bJ3JlcWZpZWxkJ10pICYmICFpbl9hcnJheSgkc29ydGluZywkdmlld19maWVsZHMpICkgewogICAgICAvLyBhZGRzIGNvbHVtbiB0byBjb2x1bW4gbGlzdCBpZiBpdHMgcmVxdWlyZWQgYnkgc29ydGluZy4KICAgICAgJGNvbCA9ICRzb3J0aW5nc1skc29ydGluZ11bJ3JlcWZpZWxkJ107CiAgICAgICRjb2x1bW5zW10gPSAkZmllbGRfaW5mb1skY29sXVsnY29sdW1uJ107CiAgICB9CgogICAgLy8gYnVpbGQgYSB0aW1lIGxpbWl0aW5nIHdoZXJlIGV4cHJlc3Npb24KICAgICRzdCA9ICRkYi0+RGJUaW1lU3RhbXAoJHByb2ZpbGVbJ3N0YXJ0X2RhdGUnXSk7CiAgICAkZXQgPSAkZGItPkRiVGltZVN0YW1wKCRwcm9maWxlWydlbmRfZGF0ZSddKTsKICAgICR3aGVyZVtdID0gIihkb3dubG9hZF9kYXRlIEJFVFdFRU4gJHN0IEFORCAkZXQpIjsKCiAgICAvLyBidWlsZCBhIHVzZXJzIHdoZXJlIGV4cHJlc3Npb24KICAgIGlmKCBjb3VudCgkdXNlcnMpICkgewogICAgICAkdG1wMiA9IGFycmF5KCk7IC8vIHJlZ3VsYXIgdXNlcm5hbWVzCiAgICAgICR0bXAzID0gYXJyYXkoKTsgLy8gd2lsZGNhcmQgcGF0dGVybgogICAgICBmb3JlYWNoKCAkdXNlcnMgYXMgJHR1c2VyICkgewoJaWYoIHN0cnBvcygkdHVzZXIsJyonKSAhPT0gRkFMU0UgfHwgc3RycG9zKCR0dXNlciwnJScpICE9PSBGQUxTRSApIHsKCSAgJHR1c2VyID0gc3RyX3JlcGxhY2UoJyonLCclJywkdHVzZXIpOwoJICAkdHVzZXIgPSBzdHJfcmVwbGFjZSgnJSUnLCclJywkdHVzZXIpOwoJICAkdG1wM1tdID0gIlVELmRvd25sb2FkX3VzZXIgTElLRSAnJHR1c2VyJyI7Cgl9CgllbHNlIHsKCSAgJHR1c2VyID0gIiciLiR0dXNlci4iJyI7CgkgICR0bXAyW10gPSAkdHVzZXI7Cgl9CiAgICAgIH0KICAgICAgJHdoID0gYXJyYXkoKTsKICAgICAgaWYoIGNvdW50KCR0bXAyKSApICR3aFtdID0gJ1VELmRvd25sb2FkX3VzZXIgSU4gKCcuaW1wbG9kZSgnLCcsJHRtcDIpLicpJzsKICAgICAgaWYoIGNvdW50KCR0bXAzKSApICR3aCA9IGFycmF5X21lcmdlKCR3aCwkdG1wMyk7CiAgICAgIGlmKCBjb3VudCgkd2gpICkgJHdoZXJlW10gPSAnKCcuIGltcGxvZGUoJyBPUiAnLCR3aCkuICcpJzsKLy8gICAgICAgZm9yZWFjaCggJHVzZXJzIGFzICYkdXNlciApICR1c2VyID0gIiciLiR1c2VyLiInIjsKLy8gICAgICAgJHdoZXJlW10gPSAnVUQuZG93bmxvYWRfdXNlciBJTiAoJy5pbXBsb2RlKCcsJywkdXNlcnMpLicpJzsKICAgIH0KCiAgICAvLyBhc3NlbWJsZSB0aGUgYmFzaWMgcXVlcnkKICAgICRxdWVyeSA9ICdTRUxFQ1QgJy5pbXBsb2RlKCcsJywkY29sdW1ucykuJyBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcyBVCiAgICAgICAgICAgICAgTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgVUQgT04gVS51cGxvYWRfaWQgPSBVRC5maWxlX2lkCiAgICAgICAgICAgICAgTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFVDIE9OIFUudXBsb2FkX2NhdGVnb3J5X2lkID0gVUMudXBsb2FkX2NhdGVnb3J5X2lkJzsKICAgIGlmKCBjb3VudCgkam9pbnMpICkgJHF1ZXJ5IC49ICcgJy5pbXBsb2RlKCcgJywkam9pbnMpOwogICAgJHF1ZXJ5IC49ICcgV0hFUkUgJy5pbXBsb2RlKCcgQU5EICcsJHdoZXJlKTsKICAgIC8vaWYoICRwcm9maWxlWydyZXBvcnRfdHlwZSddID09ICdzdW1tYXJ5JyApICRxdWVyeSAuPSAnIEdST1VQIEJZIFVELmRvd25sb2FkX3VzZXIsVS51cGxvYWRfaWQgJzsKICAgIGlmKCAkcHJvZmlsZVsncmVwb3J0X3R5cGUnXSA9PSAnc3VtbWFyeScgKSAkcXVlcnkgLj0gJyBHUk9VUCBCWSBVRC5kb3dubG9hZF91c2VyICc7CgogICAgLy8gYWRkIHNvcnRpbmcKICAgICRzb3J0YnkgPSAkZmllbGRfaW5mb1skcHJvZmlsZVsndmlld19zb3J0aW5nJ11dWydjb2x1bW4nXTsKICAgIGlmKCBpc3NldCgkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnc29ydGJ5J10pICkgJHNvcnRieSA9ICRzb3J0aW5nc1skcHJvZmlsZVsndmlld19zb3J0aW5nJ11dWydzb3J0YnknXTsKICAgICRzb3J0b3JkZXIgPSAkcHJvZmlsZVsndmlld19zb3J0b3JkZXInXTsKICAgIGlmKCAkc29ydG9yZGVyID09ICcqZGVmYXVsdConICkgewogICAgICAkc29ydG9yZGVyID0gJ0FTQyc7CiAgICAgIGlmKCBpc3NldCgkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnZGZsdHNvcnRieSddKSApICRzb3J0b3JkZXIgPSAkc29ydGluZ3NbJHByb2ZpbGVbJ3ZpZXdfc29ydGluZyddXVsnZGZsdHNvcnRieSddOwogICAgfQogICAgaWYoICRwcm9maWxlWydyZXBvcnRfdHlwZSddID09ICdzdW1tYXJ5JyApIHsKICAgICAgJHF1ZXJ5IC49ICIgT1JERVIgQlkgJHNvcnRieSAkc29ydG9yZGVyIjsKICAgICAgaWYoICRwcm9maWxlWyd2aWV3X3NvcnRpbmcnXSAhPSAndXBsb2FkX25hbWUnICkgJHF1ZXJ5IC49ICcsICcuJGZpZWxkX2luZm9bJ3VwbG9hZF9uYW1lJ11bJ2NvbHVtbiddLicgQVNDJzsKICAgIH0KICAgIGVsc2UgewogICAgICAkcXVlcnkgLj0gIiBPUkRFUiBCWSBVRC5kb3dubG9hZF91c2VyLCAkc29ydGJ5ICRzb3J0b3JkZXIiOwogICAgfQoKICAgICRkYnIgPSAkZGItPkdldEFycmF5KCRxdWVyeSxhcnJheSgkd2hlcmVwKSk7CiAgICBpZiggIWlzX2FycmF5KCRkYnIpIHx8IGNvdW50KCRkYnIpID09IDAgKSAkZXJyb3IgPSAkdGhpcy0+TGFuZygnZXJyb3JfbWF0Y2hpbmdyZWNvcmRzJyk7CiAgfQoKICBzd2l0Y2goICRwcm9maWxlWydvdXRwdXRfdHlwZSddICkgewogIGNhc2UgJ2Nzdic6CiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCk7CiAgICAgIGJyZWFrOwogICAgfQogICAgJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwogICAgZm9yICgkY250ID0gMDsgJGNudCA8IHNpemVvZigkaGFuZGxlcnMpOyAkY250KyspIHsgb2JfZW5kX2NsZWFuKCk7IH0KICAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9dXBsb2Fkcy4iIC4gZGF0ZSgiWS1tLWQiKSAuICIuY3N2Iik7CiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogdGV4dC9jc3YiKTsKICAgIGZsdXNoKCk7CiAgICAkaGRyID0gYXJyYXlfa2V5cygkZGJyWzBdKTsKICAgIGVjaG8gJyMnLmNnZV9hcnJheTo6aW1wbG9kZV9xdW90ZWQoJGhkcikuIlxuIjsKICAgIGZvcmVhY2goICRkYnIgYXMgJHJlYyApIHsKICAgICAgZWNobyBjZ2VfYXJyYXk6OmltcGxvZGVfcXVvdGVkKGFycmF5X3ZhbHVlcygkcmVjKSkuIlxuIjsKICAgIH0KICAgIGZsdXNoKCk7CiAgICBleGl0OwogICAgYnJlYWs7CgogIGNhc2UgJ2h0bWwnOgogICAgaWYoICRlcnJvciApICRzbWFydHktPmFzc2lnbignZXJyb3InLCRlcnJvcik7CiAgICAvLyBjcmVhdGUgbGFiZWxzLgogICAgaWYoIGlzX2FycmF5KCRkYnIpICYmIGNvdW50KCRkYnIpICkgewogICAgICAkb3V0ID0gYXJyYXkoKTsKICAgICAgJHJlYyA9IGFycmF5X2tleXMoJGRiclswXSk7CiAgICAgIGZvcmVhY2goICRyZWMgYXMgJiRvbmUgKSB7CglpZiggaXNzZXQoJGZpZWxkX2luZm9bJG9uZV0pICkgJG91dFskb25lXSA9ICRmaWVsZF9pbmZvWyRvbmVdWydsYWJlbCddOwoJaWYoIGlzc2V0KCRmaWVsZF9pbmZvWydmOicuJG9uZV0pICkgJG91dFskb25lXSA9ICRmaWVsZF9pbmZvWydmOicuJG9uZV1bJ2xhYmVsJ107CglpZiggaXNzZXQoJGZpZWxkX2luZm9bJ3A6Jy4kb25lXSkgKSAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJ3A6Jy4kb25lXVsnbGFiZWwnXTsKICAgICAgfQogICAgICAkc21hcnR5LT5hc3NpZ24oJ2xhYmVscycsJG91dCk7CiAgICAgICRzbWFydHktPmFzc2lnbigncmVjb3JkcycsJGRicik7CiAgICB9CiAgICAkc21hcnR5LT5hc3NpZ24oJ3VzZXInLCR1c2VyKTsKICAgICRzbWFydHktPmFzc2lnbigncHJvZmlsZScsJHByb2ZpbGUpOwogICAgICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3JkbF8nLiRwcm9maWxlWydvdXRwdXRfdGVtcGxhdGUnXSk7CiAgICBleGl0OwogICAgYnJlYWs7CgogIGNhc2UgJ2h0bWxlbWFpbCc6CiAgICBpZiggJGVycm9yICkgewogICAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCk7CiAgICAgIGJyZWFrOwogICAgfQogICAgJG91dCA9IGFycmF5KCk7CiAgICAkcmVjID0gYXJyYXlfa2V5cygkZGJyWzBdKTsKICAgIGZvcmVhY2goICRyZWMgYXMgJiRvbmUgKSB7CiAgICAgIGlmKCBpc3NldCgkZmllbGRfaW5mb1skb25lXSkgKSAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJG9uZV1bJ2xhYmVsJ107CiAgICAgIGlmKCBpc3NldCgkZmllbGRfaW5mb1snZjonLiRvbmVdKSApICRvdXRbJG9uZV0gPSAkZmllbGRfaW5mb1snZjonLiRvbmVdWydsYWJlbCddOwogICAgICBpZiggaXNzZXQoJGZpZWxkX2luZm9bJ3A6Jy4kb25lXSkgKSAkb3V0WyRvbmVdID0gJGZpZWxkX2luZm9bJ3A6Jy4kb25lXVsnbGFiZWwnXTsKICAgIH0KICAgICRzbWFydHktPmFzc2lnbignbGFiZWxzJywkb3V0KTsKICAgICRzbWFydHktPmFzc2lnbigndXNlcicsJHVzZXIpOwogICAgJHNtYXJ0eS0+YXNzaWduKCdwcm9maWxlJywkcHJvZmlsZSk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ3JlY29yZHMnLCRkYnIpOwogICAgJG91dCA9ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3JkZl8nLiRwcm9maWxlWydvdXRwdXRfdGVtcGxhdGUnXSk7CiAgICAkbWFpbGVyID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdDTVNNYWlsZXInKTsKICAgICRtYWlsZXItPkFkZEFkZHJlc3MoJHVzZXJlbWFpbCk7CiAgICAkbWFpbGVyLT5TZXRTdWJqZWN0KCR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgne3NpdGVuYW1lfSAtIERvd25sb2FkcyBieSBGaWxlIFJlcG9ydCcpKTsKICAgICRtYWlsZXItPlNldEJvZHkoJG91dCk7CiAgICAkbWFpbGVyLT5Jc0hUTUwoVFJVRSk7CiAgICAkbWFpbGVyLT5TZW5kKCk7CiAgICAkbWFpbGVyLT5yZXNldCgpOwogICAgZWNobyAkdGhpcy0+U2hvd01lc3NhZ2UoJHRoaXMtPkxhbmcoJ21zZ19yZXBvcnRfc2VudCcpKTsKICAgIGJyZWFrOwogIH0KfQoKLy8KLy8gYnVpbGQgdGhlIGZvcm0uCi8vCiRmaWVsZGxpc3QgPSBhcnJheSgpOwpmb3JlYWNoKCAkZmllbGRfaW5mbyBhcyAka2V5ID0+ICRyZWMgKSB7CiAgJHNob3cgPSAxOwogIHN3aXRjaCAoICRwcm9maWxlWydyZXBvcnRfdHlwZSddICkgewogIGNhc2UgJ3N1bW1hcnknOgogICAgaWYoIGlzc2V0KCRyZWNbJ3N1bW1hcnlycHQnXSkgKSAkc2hvdyA9ICRyZWNbJ3N1bW1hcnlycHQnXTsKICAgIGJyZWFrOwoKICBjYXNlICdkZXRhaWwnOgogICAgaWYoIGlzc2V0KCRyZWNbJ2RldGFpbHJwdCddKSApICRzaG93ID0gJHJlY1snZGV0YWlscnB0J107CiAgICBicmVhazsKICB9CiAgaWYoICEkc2hvdyApIGNvbnRpbnVlOwogICRmaWVsZGxpc3RbJGtleV0gPSAkcmVjWydsYWJlbCddOwp9CiRzbWFydHktPmFzc2lnbignZmllbGRsaXN0JywkZmllbGRsaXN0KTsKCiRzb3J0bGlzdCA9IGFycmF5KCk7CmZvcmVhY2goICRzb3J0aW5ncyBhcyAka2V5ID0+ICRyZWMgKSB7CiAgJHNob3cgPSAxOwogIHN3aXRjaCAoICRwcm9maWxlWydyZXBvcnRfdHlwZSddICkgewogIGNhc2UgJ3N1bW1hcnknOgogICAgaWYoIGlzc2V0KCRyZWNbJ3N1bW1hcnlycHQnXSkgKSAkc2hvdyA9ICRyZWNbJ3N1bW1hcnlycHQnXTsKICAgIGJyZWFrOwoKICBjYXNlICdkZXRhaWwnOgogICAgaWYoIGlzc2V0KCRyZWNbJ2RldGFpbHJwdCddKSApICRzaG93ID0gJHJlY1snZGV0YWlscnB0J107CiAgICBicmVhazsKICB9CiAgaWYoICEkc2hvdyApIGNvbnRpbnVlOwogICRzb3J0bGlzdFska2V5XSA9ICRyZWNbJ2xhYmVsJ107Cn0KJHNtYXJ0eS0+YXNzaWduKCdzb3J0bGlzdCcsJHNvcnRsaXN0KTsKCiRzb3J0YnlzID0gYXJyYXkoJypkZWZhdWx0Kic9PiR0aGlzLT5MYW5nKCdwcm9tcHRfZGVmYXVsdCcpLCdBU0MnPT4kdGhpcy0+TGFuZygncHJvbXB0X2FzY2VuZGluZycpLCdERVNDJz0+JHRoaXMtPkxhbmcoJ3Byb21wdF9kZXNjZW5kaW5nJykpOwokc21hcnR5LT5hc3NpZ24oJ3NvcnRvcmRlcnMnLCRzb3J0YnlzKTsKCiRzbWFydHktPmFzc2lnbignc3RhcnRfdGltZScsJGZpcnN0X2RheV9vZl9tb250aCk7CiRzbWFydHktPmFzc2lnbignZW5kX3RpbWUnLCRsYXN0X2RheV9vZl9tb250aCk7CgokdXJsID0gJHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdhZG1pbl9hamF4X29wcycsJHJldHVybmlkLGFycmF5KCdvcCc9Pid1c2VyX2F1dG9jb21wbGV0ZScpKS4nJnNob3d0ZW1wbGF0ZT1mYWxzZSc7CiRzbWFydHktPmFzc2lnbigndXJsX2FqYXhfZmV1X3VzZXJzJyxzdHJfcmVwbGFjZSgnJmFtcDsnLCcmJywkdXJsKSk7Cgokc21hcnR5LT5hc3NpZ24oJ3Byb2ZpbGUnLCRwcm9maWxlKTsKJHNtYXJ0eS0+YXNzaWduKCdmZXVfZ3JvdXBzJywkZmV1X2dyb3Vwcyk7CiRzbWFydHktPmFzc2lnbigndXBsb2FkX2NhdGVnb3JpZXMnLCR1cGxvYWRfY2F0ZWdvcmllcyk7CiRzbWFydHktPmFzc2lnbigncmVwb3J0X3R5cGVzJywkcmVwb3J0X3R5cGVzKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3Jtc3RhcnQnLCR0aGlzLT5DR0NyZWF0ZUZvcm1TdGFydCgkaWQsJ2FkbWluX3JlcG9ydF9kb3dubG9hZHNieXVzZXInKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CgokdGVtcGxhdGVzID0gY2dlX3RlbXBsYXRlX3V0aWxzOjpnZXRfdGVtcGxhdGVzX2J5X3ByZWZpeCgkdGhpcywncmRsXycpOwppZiggaXNfYXJyYXkoJHRlbXBsYXRlcykgJiYgY291bnQoJHRlbXBsYXRlcykgKSB7CiAgJG91dCA9IGFycmF5KCk7CiAgZm9yZWFjaCggJHRlbXBsYXRlcyBhcyAkdHBsICkgewogICAgJHRwbCA9IHN1YnN0cigkdHBsLDQpOwogICAgJG91dFskdHBsXSA9ICR0cGw7CiAgfQogICRzbWFydHktPmFzc2lnbignb3V0cHV0X3RlbXBsYXRlcycsJG91dCk7Cn0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fcmVwb3J0X2Rvd25sb2Fkc2J5dXNlci50cGwnKTsKCiMKIyBFT0YKIwo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/action.admin_templates.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKZWNobyAnPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7IHdpZHRoOiA4MCU7Ij4nLgokdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsCgkJICAgICAgICR0aGlzLT5MYW5nKCdsYmxfYmFjaycpLCdpY29ucy9zeXN0ZW0vYmFjay5naWYnLGFycmF5KCksJycsJycsZmFsc2UpLic8L2Rpdj48YnIvPic7CgppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHJldHVybjsKCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycyAoKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyICgndXBsb2FkZm9ybV90ZW1wbGF0ZScsICR0aGlzLT5MYW5nICgndXBsb2FkZm9ybV90ZW1wbGF0ZScpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyICgnc3VtbWFyeV90ZW1wbGF0ZScsICR0aGlzLT5MYW5nICgnc3VtbWFyeV90ZW1wbGF0ZScpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyICgnZGV0YWlsX3RlbXBsYXRlJywgJHRoaXMtPkxhbmcgKCdkZXRhaWxfdGVtcGxhdGUnKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciAoJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZScsICR0aGlzLT5MYW5nICgnc2VuZGZpbGVmb3JtX3RlbXBsYXRlJykpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCd5b3VzZW5kaXRmb3JtX3RlbXBsYXRlJywgJHRoaXMtPkxhbmcgKCd5b3VzZW5kaXRmb3JtX3RlbXBsYXRlJykpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdlbWFpbF90ZW1wbGF0ZScsICR0aGlzLT5MYW5nICgnZW1haWxfdGVtcGxhdGUnKSk7CmVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciAoJ2NhdGVnb3J5bGlzdF90ZW1wbGF0ZXMnLCR0aGlzLT5MYW5nKCdjYXRlZ29yeWxpc3RfdGVtcGxhdGVzJykpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdkZWZhdWx0X3RlbXBsYXRlcycsICR0aGlzLT5MYW5nKCdkZWZhdWx0X3RlbXBsYXRlcycpKTsKZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyICgnZG93bmxvYWRzYnl1c2VyX3JwdCcsJHRoaXMtPkxhbmcoJ3JwdF9kb3dubG9hZHNieXVzZXJfdHBsJykpOwplY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdkb3dubG9hZHNieWZpbGVfcnB0JywkdGhpcy0+TGFuZygncnB0X2Rvd25sb2Fkc2J5ZmlsZV90cGwnKSk7CgplY2hvICR0aGlzLT5FbmRUYWJIZWFkZXJzICgpOwplY2hvICR0aGlzLT5TdGFydFRhYkNvbnRlbnQgKCk7CgovLyB0aGUgdXBsb2FkIGZvcm0gdGVtcGxhdGUgdGFiCmVjaG8gJHRoaXMtPlN0YXJ0VGFiICgidXBsb2FkZm9ybV90ZW1wbGF0ZSIpOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCAkaWQsICRyZXR1cm5pZCwgJ3VwbG9hZGZvcm1fJywKCQkJICAgICAgJ3VwbG9hZGZvcm1fc3lzZGVmYXVsdCcsICd1cGxvYWRmb3JtX3RlbXBsYXRlJywKCQkJICAgICAgJ2RlZmF1bHRfdXBsb2FkZm9ybScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJyksJycsCgkJCSAgICAgICdhZG1pbl90ZW1wbGF0ZXMnKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgovLyB0aGUgc3VtbWFyeSB0ZW1wbGF0ZSB0YWIKZWNobyAkdGhpcy0+U3RhcnRUYWIgKCJzdW1tYXJ5X3RlbXBsYXRlIik7CmVjaG8gJHRoaXMtPlNob3dUZW1wbGF0ZUxpc3QoICRpZCwgJHJldHVybmlkLCAnc3VtbWFyeXJwdF8nLAoJCQkgICAgICAnc3VtbWFyeXJwdF9zeXNkZWZhdWx0JywgJ3N1bW1hcnlfdGVtcGxhdGUnLAoJCQkgICAgICAnZGVmYXVsdF9zdW1tYXJ5cnB0JywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX3N1bW1hcnlycHRfdGVtcGxhdGUnKSwnJywKCQkJICAgICAgJ2FkbWluX3RlbXBsYXRlcycpOwplY2hvICR0aGlzLT5FbmRUYWIgKCk7CgovLyB0aGUgZGV0YWlsIHRlbXBsYXRlIHRhYgplY2hvICR0aGlzLT5TdGFydFRhYiAoImRldGFpbF90ZW1wbGF0ZSIpOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCAkaWQsICRyZXR1cm5pZCwgJ2RldGFpbHJwdF8nLAoJCQkgICAgICAnZGV0YWlscnB0X3N5c2RlZmF1bHQnLCAnZGV0YWlsX3RlbXBsYXRlJywKCQkJICAgICAgJ2RlZmF1bHRfZGV0YWlscnB0JywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZScpLCcnLAoJCQkgICAgICAnYWRtaW5fdGVtcGxhdGVzJyk7CmVjaG8gJHRoaXMtPkVuZFRhYiAoKTsKCi8vIHRoZSBzZW5kZmlsZWZvcm0gdGVtcGxhdGUgdGFiCmVjaG8gJHRoaXMtPlN0YXJ0VGFiICgic2VuZGZpbGVmb3JtX3RlbXBsYXRlIik7CmVjaG8gJHRoaXMtPlNob3dUZW1wbGF0ZUxpc3QoICRpZCwgJHJldHVybmlkLCAnc2VuZGZpbGVmb3JtXycsCgkJCSAgICAgICdzZW5kZmlsZWZvcm1fc3lzZGVmYXVsdCcsICdzZW5kZmlsZWZvcm1fdGVtcGxhdGUnLAoJCQkgICAgICAnZGVmYXVsdF9zZW5kZmlsZWZvcm0nLAoJCQkgICAgICAkdGhpcy0+TGFuZygndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJyksJycsCgkJCSAgICAgICdhZG1pbl90ZW1wbGF0ZXMnKTsKZWNobyAkdGhpcy0+RW5kVGFiICgpOwoKLy8gdGhlIHlvdXNlbmRpdGZvcm0gdGVtcGxhdGUgdGFiCmVjaG8gJHRoaXMtPlN0YXJ0VGFiICgieW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSIpOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCAkaWQsICRyZXR1cm5pZCwgJ3lvdXNlbmRpdGZvcm1fJywKCQkJICAgICAgJ3lvdXNlbmRpdGZvcm1fc3lzZGVmYXVsdCcsICd5b3VzZW5kaXRmb3JtX3RlbXBsYXRlJywKCQkJICAgICAgJ2RlZmF1bHRfeW91c2VuZGl0Zm9ybScsCgkJCSAgICAgICR0aGlzLT5MYW5nKCd0aXRsZV95b3VzZW5kaXRmb3JtX3RlbXBsYXRlJyksJycsCgkJCSAgICAgICdhZG1pbl90ZW1wbGF0ZXMnKTsKZWNobyAkdGhpcy0+RW5kVGFiICgpOwoKLy8gdGhlIGVtYWlsIHRlbXBsYXRlIHRhYgplY2hvICR0aGlzLT5TdGFydFRhYignZW1haWxfdGVtcGxhdGUnKTsKaW5jbHVkZShfX0RJUl9fLicvZnVuY3Rpb24uYWRtaW5fZW1haWxfdGVtcGxhdGVfdGFiLnBocCcpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCi8vIGNhdGVnb3J5IGxpc3QgdGVtcGxhdGVzIHRhYgplY2hvICR0aGlzLT5TdGFydFRhYignY2F0ZWdvcnlsaXN0X3RlbXBsYXRlcycpOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCAkaWQsICRyZXR1cm5pZCwnY2F0ZWdvcnlsaXN0XycsCgkJCSAgICAgICdjYXRlZ29yeWxpc3Rfc3lzZGVmYXVsdCcsICdjYXRlZ29yeWxpc3RfdGVtcGxhdGUnLAoJCQkgICAgICAnZGZsdF9jYXRlZ29yeWxpc3QnLAoJCQkgICAgICAkdGhpcy0+TGFuZygndGl0bGVfY2F0ZWdvcnlsaXN0X3RlbXBsYXRlJyksJycsCgkJCSAgICAgICdhZG1pbl90ZW1wbGF0ZXMnKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgovLyB0aGUgZGVmYXVsdCB0ZW1wbGF0ZXMgdGFiCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkZWZhdWx0X3RlbXBsYXRlcycpOwplY2hvICR0aGlzLT5HZXREZWZhdWx0VGVtcGxhdGVGb3JtKCR0aGlzLCRpZCwkcmV0dXJuaWQsJ3VwbG9hZGZvcm1fc3lzZGVmYXVsdCcsCgkJCQkgICAnYWRtaW5fdGVtcGxhdGVzJywKCQkJCSAgICdkZWZhdWx0X3RlbXBsYXRlcycsCgkJCQkgICAkdGhpcy0+TGFuZygndGl0bGVfdXBsb2FkZm9ybV9zeXNkZWZhdWx0JyksCgkJCQkgICAnb3JpZ191cGxvYWRmb3JtX3RlbXBsYXRlLnRwbCcsCgkJCQkgICAkdGhpcy0+TGFuZygnaW5mb19zeXNkZWZhdWx0JykpOwoKZWNobyAnPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyB3aWR0aDogODAlOyI+PC9kaXY+JzsKCmVjaG8gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZUZvcm0oJHRoaXMsJGlkLCRyZXR1cm5pZCwnc3VtbWFyeXJwdF9zeXNkZWZhdWx0JywKCQkJCSAgICdhZG1pbl90ZW1wbGF0ZXMnLAoJCQkJICAgJ2RlZmF1bHRfdGVtcGxhdGVzJywKCQkJCSAgICR0aGlzLT5MYW5nKCd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnKSwKCQkJCSAgICdvcmlnX3N1bW1hcnlycHRfdGVtcGxhdGUudHBsJywKCQkJCSAgICR0aGlzLT5MYW5nKCdpbmZvX3N5c2RlZmF1bHQnKSk7CgplY2hvICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHdpZHRoOiA4MCU7Ij48L2Rpdj4nOwoKZWNobyAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlRm9ybSgkdGhpcywkaWQsJHJldHVybmlkLCdkZXRhaWxycHRfc3lzZGVmYXVsdCcsCgkJCQkJCQkJCQkJCQkJCQkJICdhZG1pbl90ZW1wbGF0ZXMnLAoJCQkJCQkJCQkJCQkJCQkJCSAnZGVmYXVsdF90ZW1wbGF0ZXMnLAoJCQkJCQkJCQkJCQkJCQkJCSAkdGhpcy0+TGFuZygndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnKSwKCQkJCQkJCQkJCQkJCQkJCQkgJ29yaWdfZGV0YWlscnB0X3RlbXBsYXRlLnRwbCcsCgkJCQkJCQkJCQkJCQkJCQkJICR0aGlzLT5MYW5nKCdpbmZvX3N5c2RlZmF1bHQnKSk7CgplY2hvICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHdpZHRoOiA4MCU7Ij48L2Rpdj4nOwoKZWNobyAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlRm9ybSgkdGhpcywkaWQsJHJldHVybmlkLCdjYXRlZ29yeWxpc3Rfc3lzZGVmYXVsdCcsCgkJCQkJCQkJCQkJCQkJCQkJICdhZG1pbl90ZW1wbGF0ZXMnLAoJCQkJCQkJCQkJCQkJCQkJCSAnZGVmYXVsdF90ZW1wbGF0ZXNfdGVtcGxhdGVzJywKCQkJCQkJCQkJCQkJCQkJCQkgJHRoaXMtPkxhbmcoJ3RpdGxlX2NhdGVnb3J5bGlzdF9zeXNkZWZhdWx0JyksCgkJCQkJCQkJCQkJCQkJCQkJICdvcmlnX2NhdGVnb3J5bGlzdF90ZW1wbGF0ZS50cGwnLAoJCQkJCQkJCQkJCQkJCQkJCSAkdGhpcy0+TGFuZygnaW5mb19zeXNkZWZhdWx0JykpOwoKZWNobyAnPGRpdiBzdHlsZT0iYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOyB3aWR0aDogODAlOyI+PC9kaXY+JzsKCmVjaG8gJHRoaXMtPkdldERlZmF1bHRUZW1wbGF0ZUZvcm0oJHRoaXMsJGlkLCRyZXR1cm5pZCwnc2VuZGZpbGVmb3JtX3N5c2RlZmF1bHQnLAoJCQkJICAgJ2FkbWluX3RlbXBsYXRlcycsCgkJCQkgICAnZGVmYXVsdF90ZW1wbGF0ZXMnLAoJCQkJICAgJHRoaXMtPkxhbmcoJ3RpdGxlX3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0JyksCgkJCQkgICAnb3JpZ19zZW5kZmlsZWZvcm1fdGVtcGxhdGUudHBsJywKCQkJCSAgICR0aGlzLT5MYW5nKCdpbmZvX3N5c2RlZmF1bHQnKSk7CgplY2hvICc8ZGl2IHN0eWxlPSJib3JkZXItYm90dG9tOiAxcHggc29saWQgYmxhY2s7IHdpZHRoOiA4MCU7Ij48L2Rpdj4nOwoKZWNobyAkdGhpcy0+R2V0RGVmYXVsdFRlbXBsYXRlRm9ybSgkdGhpcywkaWQsJHJldHVybmlkLCd5b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnLAoJCQkJICAgJ2FkbWluX3RlbXBsYXRlcycsCgkJCQkgICAnZGVmYXVsdF90ZW1wbGF0ZXMnLAoJCQkJICAgJHRoaXMtPkxhbmcoJ3RpdGxlX3lvdXNlbmRpdGZvcm1fc3lzZGVmYXVsdCcpLAoJCQkJICAgJ29yaWdfeW91c2VuZGl0Zm9ybV90ZW1wbGF0ZS50cGwnLAoJCQkJICAgJHRoaXMtPkxhbmcoJ2luZm9fc3lzZGVmYXVsdCcpKTsKZWNobyAkdGhpcy0+RW5kVGFiKCk7CgovLyBkb3dubG9hZHMgYnkgdXNlciByZXBvcnQgdGVtcGxhdGVzLgplY2hvICR0aGlzLT5TdGFydFRhYignZG93bmxvYWRzYnl1c2VyX3JwdCcpOwplY2hvICR0aGlzLT5TaG93VGVtcGxhdGVMaXN0KCAkaWQsICRyZXR1cm5pZCwgJ3JkbF8nLAoJCQkgICAgICAnb3JpZ19odG1scmVwb3J0X2Rvd25sb2Fkc2J5dXNlci50cGwnLCdkb3dubG9hZHNieXVzZXJfcnB0JywnJywKCQkJICAgICAgJHRoaXMtPkxhbmcoJ3RpdGxlX2Rvd25sb2Fkc2J5dXNlcl90cGwnKSwnJywKCQkJICAgICAgJ2FkbWluX3RlbXBsYXRlcycpOwplY2hvICR0aGlzLT5FbmRUYWIoKTsKCi8vIGRvd25sb2FkcyBieSBmaWxlIHJlcG9ydCB0ZW1wbGF0ZXMuCmVjaG8gJHRoaXMtPlN0YXJ0VGFiKCdkb3dubG9hZHNieWZpbGVfcnB0Jyk7CmVjaG8gJHRoaXMtPlNob3dUZW1wbGF0ZUxpc3QoICRpZCwgJHJldHVybmlkLCAncmRmXycsCgkJCSAgICAgICdvcmlnX2h0bWxyZXBvcnRfZG93bmxvYWRzYnlmaWxlLnRwbCcsJ2Rvd25sb2Fkc2J5ZmlsZV9ycHQnLCcnLAoJCQkgICAgICAkdGhpcy0+TGFuZygndGl0bGVfZG93bmxvYWRzYnlmaWxlX3RwbCcpLCcnLAoJCQkgICAgICAnYWRtaW5fdGVtcGxhdGVzJyk7CmVjaG8gJHRoaXMtPkVuZFRhYigpOwoKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCgpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.admin_upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0KCk7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFVwbG9hZHMnKSAmJiAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignVXBsb2FkIEZpbGVzIHRvIFVwbG9hZHMnKSkgcmV0dXJuOwoKIwojIEluaXRpYWxpemF0aW9uCiMKJHRoaXMtPlNldEN1cnJlbnRUYWIoJ2ZpbGVzJyk7CiRyZWNvcmQgPSBhcnJheSgnY2F0ZWdvcnlfaWQnPT4nJywKCQknZGVzdG5hbWUnPT4nJywKCQknYXV0aG9yJz0+JF9TRVNTSU9OWydjbXNfYWRtaW5fdXNlcm5hbWUnXSwKCQknc3VtbWFyeSc9PicnLAoJCSdkZXNjcmlwdGlvbic9PicnKTsKJGN1cmNhdGVnb3J5ID0gJyc7CgojCiMgU2V0dXAKIwoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pICkgewogICRjdXJjYXRlZ29yeSA9IChpbnQpJHBhcmFtc1snY2F0ZWdvcnlfaWQnXTsKfQplbHNlIGlmKCBpc3NldCgkcGFyYW1zWydjYXRlZ29yeSddKSApIHsKICAkY3VyY2F0ZWdvcnkgPSAkcGFyYW1zWydjYXRlZ29yeSddOwp9CiRjYXRlZ29yeWxpc3QgPSBhcnJheSgpOwp7CiAgJHF1ZXJ5ID0KICAgICJTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIEFTIGlkLCB1cGxvYWRfY2F0ZWdvcnlfbmFtZSBBUyBuYW1lIEZST00gIi5jbXNfZGJfcHJlZml4ICgpLgogICAgICAgIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgT1JERVIgQlkgdXBsb2FkX2NhdGVnb3J5X25hbWUgQVNDIjsKICAkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogIGZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXApOyAkaSsrICkgewogICAgJGNhdGVnb3J5bGlzdFskdG1wWyRpXVsnaWQnXV0gPSAkdG1wWyRpXVsnbmFtZSddOwogIH0KfQoKJGZpZWxkcyA9IGFycmF5KCk7CnsKICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIE9SREVSIEJZIGlvcmRlcic7CiAgJHRmaWVsZHMgPSAkZGItPkdldEFycmF5KCRxdWVyeSk7CiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRmaWVsZHMpOyAkaSsrICkgewogICAgJHRmaWVsZHNbJGldWydhdHRyaWInXSA9IHVuc2VyaWFsaXplKCR0ZmllbGRzWyRpXVsnYXR0cmlicyddKTsKICAgIHVuc2V0KCR0ZmllbGRzWyRpXVsnYXR0cmlicyddKTsKCiAgICBzd2l0Y2goJHRmaWVsZHNbJGldWyd0eXBlJ10pIHsKICAgIGNhc2UgJ3RleHRhcmVhJzoKICAgICAgJHRmaWVsZHNbJGldWydpbnB1dCddID0KCSR0aGlzLT5DcmVhdGVUZXh0QXJlYShpc3NldCgkdGZpZWxkc1skaV1bJ2F0dHJpYiddWyd1c2V3eXNpd3lnJ10pICYmICR0ZmllbGRzWyRpXVsnYXR0cmliJ11bJ3VzZXd5c2l3eWcnXSA9PSAxICYmCgkJCSAgICAgICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19jb21tZW50X3d5c2l3eWcnLDApLAoJCQkgICAgICAkaWQsCgkJCSAgICAgICR0ZmllbGRzWyRpXVsnYXR0cmliJ11bJ2RmbHRjb250ZW50J10sCgkJCSAgICAgICdmaWVsZF8nLiR0ZmllbGRzWyRpXVsnaWQnXSk7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnZHJvcGRvd24nOgogICAgY2FzZSAnbXVsdGlzZWxlY3QnOgogICAgICBpZiggaXNzZXQoJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddKSApIHsKCSR0bXAgPSBleHBsb2RlKCJcbiIsJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddKTsKCSR0bXAyID0gYXJyYXkoKTsKCWZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgJGtleSA9ICcnOwoJICAkdmFsdWUgPSAnJzsKCSAgaWYoIHN0cnN0cigkb25lLCc9JykgIT09IEZBTFNFICkKCSAgICBsaXN0KCRrZXksJHZhbHVlKSA9IGV4cGxvZGUoJz0nLHRyaW0oJG9uZSksMik7CgkgIGVsc2UgewoJICAgICR2YWx1ZSA9ICRvbmU7CgkgICAgJGtleSA9ICRvbmU7CgkgIH0KCSAgJHRtcDJbdHJpbSgkdmFsdWUpXSA9IHRyaW0oJGtleSk7Cgl9CgkkdGZpZWxkc1skaV1bJ2F0dHJpYiddWydvcHRpb25zJ10gPSAkdG1wMjsKICAgICAgfQogICAgICBicmVhazsKICAgIH0KCiAgICAkZmllbGRzWyR0ZmllbGRzWyRpXVsnaWQnXV0gPSAkdGZpZWxkc1skaV07CiAgfQp9CgoKIwojIEhhbmRsZSBGb3JtIFN1Ym1pc3Npb24KIwppZiggaXNzZXQoJHBhcmFtc1snY2FuY2VsJ10pICkgewogICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCk7Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1snc3VibWl0J10pICkgewogICRyZWNvcmRbJ2NhdGVnb3J5X2lkJ10gPSAoaW50KSRwYXJhbXNbJ2NhdGVnb3J5X2lkJ107CiAgJHJlY29yZFsnZGVzdG5hbWUnXSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZGVzdG5hbWUnXSk7CiAgJHJlY29yZFsnYXV0aG9yJ10gPSB0cmltKCRwYXJhbXNbJ2lucHV0X2F1dGhvciddKTsKICAkcmVjb3JkWydzdW1tYXJ5J10gPSB0cmltKCRwYXJhbXNbJ2lucHV0X3N1bW1hcnknXSk7CiAgJHJlY29yZFsnZGVzY3JpcHRpb24nXSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZGVzY3JpcHRpb24nXSk7CgogICR1c2VyaWQgPSBnZXRfdXNlcmlkKCk7CiAgJHVzZXJuYW1lID0gJF9TRVNTSU9OWydjbXNfYWRtaW5fdXNlcm5hbWUnXTsKCiAgJHJldCA9ICR0aGlzLT5BdHRlbXB0VXBsb2FkKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCApOwogIGlmKCAkcmV0WzBdID09IGZhbHNlICkgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkcmV0WzFdKTsKICB9CiAgZWxzZSB7CiAgICAkdXBsb2FkX2lkID0gJHJldFsxXTsKICAgICR0aGVuYW1lID0gJyc7CiAgICBpZiggY291bnQoJHJldCkgPT0gMyApICR0aGVuYW1lID0gJHJldFsyXTsKCiAgICAvLyBpdCB1cGxvYWRlZC4uLiBub3cgZm9yIHRoZSB0bCBzdHVmZgogICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd191cGxvYWRfc2VuZGZpbGUnLDApICYmCglpc3NldCgkcGFyYW1zWyd0bF9lbWFpbCddKSAmJiAhZW1wdHkoJHBhcmFtc1sndGxfZW1haWwnXSkgKSB7CiAgICAgIC8vIHdlJ3JlIGNyZWF0aW5nIHRpbWUgbGltaXRlZCBhY2Nlc3Mga2V5LgogICAgICAkaG91cnMgPSAoaW50KSRwYXJhbXNbJ3RsX2hvdXJzJ107CiAgICAgICRkb3dubG9hZHMgPSAoaW50KSRwYXJhbXNbJ3RsX2Rvd25sb2FkcyddOwogICAgICAkZW1haWwgPSB0cmltKCRwYXJhbXNbJ3RsX2VtYWlsJ10pOwogICAgICAkc2VuZGl0ID0gKGludCkkcGFyYW1zWyd0bF9zZW5kaXQnXTsKCiAgICAgICRkb3dubG9hZHMgPSBtYXgoJGRvd25sb2FkcywwKTsKICAgICAgJGhvdXJzID0gbWF4KCRob3VycywwKTsKCiAgICAgICRub3cgPSAkZGItPkRiVGltZVN0YW1wKHRpbWUoKSk7CiAgICAgICRleHBpcmVzID0gbnVsbDsKICAgICAgaWYoICRob3VycyA+IDAgKSB7CgkkZXhwaXJlcyA9ICRkYi0+RGJUaW1lU3RhbXAoc3RydG90aW1lKCcrJy4kaG91cnMuJyBob3VycycpKTsKICAgICAgfQogICAgICAkdXJsa2V5ID0gc3Vic3RyKHN0cl9zaHVmZmxlKG1kNSh0aW1lKCkuJHVwbG9hZF9pZC4kdGhlbmFtZS4kbm93LiRlbWFpbC4kZXhwaXJlcykpLDAsMTYpOwogICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX3RpbWVsaW1pdAogICAgICAgICAgICAgICAgKHVwbG9hZF9pZCxlbWFpbCx1cmxfa2V5LGNyZWF0ZWQsZXhwaXJlcyxtYXhfZG93bmxvYWRzKQogICAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPywkbm93LCRleHBpcmVzLD8pIjsKICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHVwbG9hZF9pZCwkZW1haWwsJHVybGtleSwkZG93bmxvYWRzKSk7CiAgICAgIGlmKCAkZGJyICkgewoJLy8gbWF5YmUgc2VuZCBhbiBlbWFpbAoJJGNtc21haWxlciA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ01TTWFpbGVyJyk7CglpZiggJGNtc21haWxlciApIHsKCSAgJGNvbnRlbnRvcHMgPSAkZ0Ntcy0+R2V0Q29udGVudE9wZXJhdGlvbnMoKTsKCSAgJHBhZ2VpZCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3NlbmRmaWxlcGFnZScpOwoJICBpZiggJHBhZ2VpZCA8PSAwICkgewoJICAgICRwYWdlaWQgPSAkY29udGVudG9wcy0+R2V0RGVmYXVsdENvbnRlbnQoKTsKCSAgfQoKCSAgJHRtcCA9ICR0aGlzLT5HZXRVcGxvYWREZXRhaWxzKCR1cGxvYWRfaWQsJHBhZ2VpZCk7CgkgICR0bXBbJ2Rvd25sb2FkX3VybCddID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2dldGZpbGUnLCRwYWdlaWQsCgkJCQkJCSAgYXJyYXkoJ3VybF9rZXknPT4kdXJsa2V5KSwKCQkJCQkJICBmYWxzZSwKCQkJCQkJICAkdGhpcy0+X2dldFRpbWVMaW1pdGVkVVJMKCR1cmxrZXkpKTsKCgkgICR1cGxvYWRfaW5mID0gbmV3IFN0ZENsYXNzKCk7CgkgIGZvcmVhY2goICR0bXAgYXMgJGtleSA9PiAkdmFsdWUgKSB7CgkgICAgaWYoIHN0YXJ0c3dpdGgoJGtleSwndXBsb2FkXycpICkgewoJICAgICAgJGtleSA9IHN1YnN0cigka2V5LDcpOwoJICAgIH0KCSAgICBpZiggIWVtcHR5KCR2YWx1ZSkgKSB7CgkgICAgICAkdXBsb2FkX2luZm8tPiRrZXkgPSAkdmFsdWU7CgkgICAgfQoJICB9CgkgICRzbWFydHktPmFzc2lnbignZW50cnknLCR1cGxvYWRfaW5mbyk7CgkgICRzbWFydHktPmFzc2lnbignbm90ZXMnLCcnKTsKCSAgaWYoICRkb3dubG9hZHMgKSB7CgkgICAgJHNtYXJ0eS0+YXNzaWduKCdkb3dubG9hZHMnLCRkb3dubG9hZHMpOwoJICB9CgkgIGlmKCAkaG91cnMgKSB7CgkgICAgJHNtYXJ0eS0+YXNzaWduKCdob3VycycsJGhvdXJzKTsKCSAgfQoKCSAgJHN1YmplY3RfdHBsID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX3N1YmplY3QnLAoJCQkJCSAgICAgICR0aGlzLT5MYW5nKCdkZmx0X3RpbWVsaW1pdGVkX3N1YmplY3QnKSk7CgkgICRzdWJqZWN0ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhKCRzdWJqZWN0X3RwbCk7CgoJICAkY21zbWFpbGVyLT5yZXNldCgpOwoJICAkY21zbWFpbGVyLT5TZXRTdWJqZWN0KCRzdWJqZWN0KTsKCSAgJGNtc21haWxlci0+SXNIVE1MKHRydWUpOwoJICAkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCRlbWFpbCk7CgkgICRib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgndXBsb2FkX3NlbmRmaWxlcnB0Jyk7CgkgICRjbXNtYWlsZXItPlNldEJvZHkoJGJvZHkpOwoJICAkY21zbWFpbGVyLT5TZW5kKCk7Cgl9CiAgICAgIH0KICAgIH0KCiAgICAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQpOwogIH0KfQoKIwojIEdpdmUgZXZlcnl0aGluZyB0byBzbWFydHkKIwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fdXBsb2FkJywkcmV0dXJuaWQsJHBhcmFtcyxmYWxzZSwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignY2F0ZWdvcmllcycsJGNhdGVnb3J5bGlzdCk7CmlmKCAhZW1wdHkoJGN1cmNhdGVnb3J5KSApIHsKICAkc21hcnR5LT5hc3NpZ24oJ2N1cmNhdGVnb3J5JywkY3VyY2F0ZWdvcnkpOwoJJHJvdyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeSgkY3VyY2F0ZWdvcnkpOwogIGlmKCAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddICE9ICcnICkgewogICAgJHJvd1sndXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSA9IGV4cGxvZGUoJywnLCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10pOwogIH0KICAkc21hcnR5LT5hc3NpZ24oJ2N1cmNhdGVnb3J5JywkY3VyY2F0ZWdvcnkpOwogIGlmKCBpc19hcnJheSgkcm93KSApICRzbWFydHktPmFzc2lnbignY2F0ZWdvcnlfaW5mbycsJHJvdyk7Cn0KJHNtYXJ0eS0+YXNzaWduKCdhbGxvd19yZXBsYWNlJywwKTsKJHNtYXJ0eS0+YXNzaWduKCd1cGxvYWQnLCRyZWNvcmQpOwppZiggY291bnQoJGZpZWxkcykgKSAkc21hcnR5LT5hc3NpZ24oJ2ZpZWxkcycsJGZpZWxkcyk7CiRzbWFydHktPmFzc2lnbigndGxfaG91cnMnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9ob3VycycsMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RsX2Rvd25sb2FkcycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX2Rvd25sb2FkcycsMCkpOwokc21hcnR5LT5hc3NpZ24oJ2FsbG93X3VwbG9hZF9zZW5kZmlsZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FsbG93X3VwbG9hZF9zZW5kZmlsZScsMCkpOwoKJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwppZiggaXNfb2JqZWN0KCRmZXUpICkgewogICRncm91cHMgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKICBpZiggaXNfYXJyYXkoJGdyb3VwcykgJiYgY291bnQoJGdyb3VwcykgKSAkc21hcnR5LT5hc3NpZ24oJ2ZldV9ncm91cGxpc3QnLGFycmF5X2ZsaXAoJGdyb3VwcykpOwp9CiMKIyBEaXNwbGF5IHRoZSB0ZW1wbGF0ZQojCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fdXBsb2FkLnRwbCcpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.categorylist.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7Cgokc3VtbWFyeXBhZ2UgPSAkcmV0dXJuaWQ7CiR0bXAgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3N1bW1hcnlwYWdlJyk7CmlmKCAkdG1wICkgewogICAgJHRtcCA9ICR0aGlzLT5yZXNvbHZlX2FsaWFzX29yX2lkKCR0bXApOwogICAgaWYoICR0bXAgKSAkc3VtbWFyeXBhZ2UgPSAkdG1wOwp9CgokZmV1ID0gXGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwokY2F0ZWdvcmllcyA9IG51bGw7CiR0bXAgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcmllcygpOwppZiggY291bnQoJHRtcCkgKSB7CiAgICAkY2F0ZWdvcmllcyA9IGFycmF5KCk7CiAgICBmb3JlYWNoKCAkdG1wIGFzICRyb3cgKSB7CiAgICAgICAgZm9yZWFjaCggJHJvdyBhcyAka2V5ID0+ICR2YWwgKSB7CiAgICAgICAgICAgIGlmKCBzdGFydHN3aXRoKCRrZXksJ3VwbG9hZF9jYXRlZ29yeV8nKSApIHsKICAgICAgICAgICAgICAgIHVuc2V0KCRyb3dbJGtleV0pOwogICAgICAgICAgICAgICAgJGtleSA9IHN1YnN0cigka2V5LHN0cmxlbigndXBsb2FkX2NhdGVnb3J5XycpKTsKICAgICAgICAgICAgICAgICRyb3dbJGtleV0gPSAkdmFsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmKCAhJHJvd1snbGlzdGFibGUnXSApIGNvbnRpbnVlOwogICAgICAgIGlmKCAkcm93Wydncm91cHMnXSApIHsKICAgICAgICAgICAgaWYoICEkZmV1ICkgY29udGludWU7IC8vIG5vIEZFVSBtb2R1bGUKICAgICAgICAgICAgJHVpZCA9ICRmZXUtPkxvZ2dlZEluSWQoKTsKICAgICAgICAgICAgaWYoICR1aWQgPCAxICkgY29udGludWU7IC8vIG5vdCBsb2dnZWQgaW4uCiAgICAgICAgICAgICRtZW1iZXJncm91cHMgPSAkZmV1LT5HZXRNZW1iZXJHcm91cHNBcnJheSgkdWlkKTsKICAgICAgICAgICAgaWYoICFjb3VudCgkbWVtYmVyZ3JvdXBzKSApIGNvbnRpbnVlOyAvLyBub3QgbWVtYmVyIG9mIGFueSBncm91cHMKCiAgICAgICAgICAgICRwZXJtaXR0ZWQgPSBmYWxzZTsKICAgICAgICAgICAgJGFsbG93ZWRfZ3JvdXBzID0gZXhwbG9kZSgnLCcsJHJvd1snZ3JvdXBzJ10pOwogICAgICAgICAgICBmb3JlYWNoKCAkbWVtYmVyZ3JvdXBzIGFzICRtZyApIHsKICAgICAgICAgICAgICAgIGlmKCBpbl9hcnJheSgkbWdbJ2dyb3VwaWQnXSwgJGFsbG93ZWRfZ3JvdXBzKSApIHsKICAgICAgICAgICAgICAgICAgICAkcGVybWl0dGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiggISRwZXJtaXR0ZWQgKSBjb250aW51ZTsKICAgICAgICB9CgogICAgICAgIC8vIGJ1aWxkIHRoZSBzdW1tYXJ5IHVybAogICAgICAgICRwYXJtcyA9ICRwYXJhbXM7CiAgICAgICAgJHBhcm1zWydjYXRlZ29yeSddID0gJHJvd1snaWQnXTsKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1snc3VtbWFyeXBhZ2UnXSkgKSB1bnNldCgkcGFyYW1zWydzdW1tYXJ5cGFnZSddKTsKICAgICAgICBpZiggaXNzZXQoJHBhcmFtc1snbGlzdGluZ3RlbXBsYXRlJ10pICkgdW5zZXQoJHBhcmFtc1snbGlzdGluZ3RlbXBsYXRlJ10pOwogICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydsaXN0aW5nc29ydG9yZGVyJ10pICkgdW5zZXQoJHBhcmFtc1snbGlzdGluZ3NvcnRvcmRlciddKTsKICAgICAgICAkcm93WydzdW1tYXJ5X3VybCddID0gJHRoaXMtPmNyZWF0ZV91cmwoJ2NudG50MDEnLCdkZWZhdWx0Jywkc3VtbWFyeXBhZ2UsJHBhcm1zKTsKICAgICAgICAkY2F0ZWdvcmllc1tdID0gJHJvdzsKICAgIH0KfQoKJHNvcnRpbmcgPSBcY2dlX3BhcmFtOjpnZXRfc3RyaW5nKCRwYXJhbXMsJ3NvcnRvcmRlcicsJ25hbWVfYXNjJyk7CiRzb3J0aW5nID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdsaXN0aW5nc29ydG9yZGVyJywkc29ydGluZyk7CnVzb3J0KCRjYXRlZ29yaWVzLGZ1bmN0aW9uKCRhLCRiKSB1c2UgKCRzb3J0aW5nKSB7CiAgICAgICAgc3dpdGNoKCAkc29ydGluZyApIHsKICAgICAgICBjYXNlICdzdW1tX2FzYyc6CiAgICAgICAgICAgIHJldHVybiBzdHJuYXRjbXAoJGFbJ2Rlc2NyaXB0aW9uJ10sJGJbJ2Rlc2NyaXB0aW9uJ10pOwoKICAgICAgICBjYXNlICdzdW1fZGVzYyc6CiAgICAgICAgICAgIHJldHVybiBzdHJuYXRjbXAoJGFbJ2Rlc2NyaXB0aW9uJ10sJGJbJ2Rlc2NyaXB0aW9uJ10pICogLTE7CgogICAgICAgIGNhc2UgJ25hbWVfZGVzYyc6CiAgICAgICAgICAgIHJldHVybiBzdHJuYXRjbXAoJGFbJ25hbWUnXSwkYlsnbmFtZSddKSAqIC0xOwoKICAgICAgICBjYXNlICduYW1lX2FzYyc6CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHN0cm5hdGNtcCgkYVsnbmFtZSddLCRiWyduYW1lJ10pOwogICAgICAgIH0KICAgIH0pOwoKJHRoZXRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RmbHRfY2F0ZWdvcnlsaXN0Jyk7CiR0aGV0ZW1wbGF0ZSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywnbGlzdGluZ3RlbXBsYXRlJywkdGhldGVtcGxhdGUpOwokdHBsID0gJHRoaXMtPkNyZWF0ZVNtYXJ0eVRlbXBsYXRlKCR0aGV0ZW1wbGF0ZSwnY2F0ZWdvcnlsaXN0XycpOwokdHBsLT5hc3NpZ24oJ2NhdGVnb3JpZXMnLCRjYXRlZ29yaWVzKTsKJHRwbC0+ZGlzcGxheSgpOwoKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.categorysummary.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKcmV0dXJuOyAvLyBubyBsb25nZXIgZnVuY3Rpb25hbAovLyB0cnkgdG8gZmlndXJlIG91dCBhIHNvcnQgb3JkZXIKJHNvcnRvcmRlciA9ICJPUkRFUiBCWSB1cGxvYWRfY2F0ZWdvcnlfbmFtZSBBU0MiOwppZiggaXNzZXQoJHBhcmFtc1snc29ydG9yZGVyJ10pICkgewoJc3dpdGNoKCB0cmltKCRwYXJhbXNbJ3NvcnRvcmRlciddKSApIHsKCWNhc2UgIm5hbWVfYXNjIjoKCQkvLyBhc2NlbmRpbmcgbmFtZQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2NhdGVnb3J5X25hbWUgQVNDIjsKCQlicmVhazsKCWNhc2UgIm5hbWVfZGVzYyI6CgkJLy8gZGVzY2VuZGluZyBuYW1lCgkJJHNvcnRvcmRlciA9ICJPUkRFUiBCWSB1cGxvYWRfY2F0ZWdvcnlfbmFtZSBERVNDIjsKCQlicmVhazsKCWNhc2UgInN1bW1fYXNjIjoKCQkvLyBhc2NlbmRpbmcgc3VtbWFyeQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uIEFTQyI7CgkJYnJlYWs7CgljYXNlICJzdW1tX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgc3VtbWFyeQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uIERFU0MiOwoJCWJyZWFrOwoJY2FzZSAicmFuZG9tIjoKCQkvLyByYW5kb20KCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHJhbmQoKSI7Cgl9CiB9CiRzb3J0b3JkZXIgPSAiICIuJHNvcnRvcmRlcjsKCi8vIGRldGVybWluZSBob3cgbWFueSB3ZSdyZSBnb2luZyB0byBkaXNwbGF5CiRjb3VudCA9ICIiOwppZiggaXNzZXQoICRwYXJhbXNbJ2NvdW50J10gKSApIHsKCSRjb3VudCA9ICIgTElNSVQgMCwiLihpbnQpdHJpbSgkcGFyYW1zWydjb3VudCddKTsKfQoKCiRxcGFybXMgPSBhcnJheSgpOwokcXVlcnkgPSAiU0VMRUNUIHVwbG9hZF9jYXRlZ29yeV9pZCwgdXBsb2FkX2NhdGVnb3J5X25hbWUsIHVwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSA9IDEiOwokcXVlcnkgLj0gJHNvcnRvcmRlci4kY291bnQ7CgokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSApOwppZiggJGRicmVzdWx0ICYmICRkYnJlc3VsdC0+UmVjb3JkQ291bnQoKSApIHsKCSRtYXRjaGVzID0gJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpOwp9CgovLyBzZXR1cCBzdHJpbmdzIC0gYXNzaWduIGEgYnVuY2ggYXMgYmxhbmssIGp1c3QgaW4gY2FzZSBzb21lb25lCi8vIHVzZXMgYSBzdGFuZGFyZCBzdW1tYXJ5IHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbignY2F0ZWdvcnknLCR0aGlzLT5MYW5nKCdjYXRlZ29yeScpKTsKJHNtYXJ0eS0+YXNzaWduKCdpZCcsJHRoaXMtPkxhbmcoJ2lkJykpOwokc21hcnR5LT5hc3NpZ24oJ25hbWUnLCR0aGlzLT5MYW5nKCduYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2RhdGUnLCcnKTsKJHNtYXJ0eS0+YXNzaWduKCdhdXRob3InLCcnKTsKJHNtYXJ0eS0+YXNzaWduKCdzaXplJywnJyk7CiRzbWFydHktPmFzc2lnbignZGV0YWlscycsJycpOwokc21hcnR5LT5hc3NpZ24oJ3N1bW1hcnknLCR0aGlzLT5MYW5nKCdzdW1tYXJ5JykpOwokc21hcnR5LT5hc3NpZ24oJ2Rlc2NyaXB0aW9uJywkdGhpcy0+TGFuZygnZGVzY3JpcHRpb24nKSk7CiRzbWFydHktPmFzc2lnbigndGh1bWJuYWlsJywnJyk7CiRzbWFydHktPmFzc2lnbignaWNvbicsJycpOwokc21hcnR5LT5hc3NpZ24oJ2ltYWdlJywnJyk7CiRzbWFydHktPmFzc2lnbignbnVtcGFnZXMnLDEpOwoKJHRlbXBsYXRlID0gJ3N1bW1hcnlycHRfJy4kdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9zdW1tYXJ5cnB0Jyk7CmlmKCBpc3NldCggJHBhcmFtc1sndGVtcGxhdGUnXSApICkgJHRlbXBsYXRlID0gJ3N1bW1hcnlycHRfJy4kcGFyYW1zWyd0ZW1wbGF0ZSddOwoKJHJvd2FycmF5PWFycmF5KCk7CndoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSB7Cgkkb25lcm93ID0gbmV3IHN0ZENsYXNzICgpOwoJJG9uZXJvdy0+aWQgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKCSRvbmVyb3ctPm5hbWUgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddOwoJJG9uZXJvdy0+dXBsb2FkX25hbWUgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddOwoJJG9uZXJvdy0+Y2F0ZWdvcnkgPSAnJzsKCSRvbmVyb3ctPmRvd25sb2FkX3VybCA9ICcnOwoKCSRlbmNvZGVkX25hbWUgPSB1cmxlbmNvZGUoJG9uZXJvdy0+bmFtZSk7CgkkcGFybXMgPSBhcnJheSgnY2F0ZWdvcnknPT4kZW5jb2RlZF9uYW1lLCdtb2RlJz0+J3N1bW1hcnknKTsKCWlmKCBpc3NldCgkcGFyYW1zWydsaXN0aW5nb3JkZXInXSkgKSAkcGFybXNbJ3NvcnRvcmRlciddID0gJHBhcmFtc1snbGlzdGluZ29yZGVyJ107CglpZiggaXNzZXQoJHBhcmFtc1snbGlzdGluZ3RlbXBsYXRlJ10pICkgJHBhcm1zWyd0ZW1wbGF0ZSddID0gJHBhcmFtc1snbGlzdGluZ3RlbXBsYXRlJ107Cgkkb25lcm93LT5uYW1lbGluayA9ICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdkZWZhdWx0JywgJHJldHVybmlkLCAkZW5jb2RlZF9uYW1lLCAkcGFybXMpOwoJJG9uZXJvdy0+bmFtZXVybCA9ICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCRwYXJtcyk7Cgkkb25lcm93LT5hdXRob3IgPSAnJzsKCSRvbmVyb3ctPmRldGFpbGxpbmsgPSAnJzsKCSRvbmVyb3ctPmRldGFpbHVybCA9ICcnOwoJJG9uZXJvdy0+c3VtbWFyeSA9ICRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbiddOwoJJG9uZXJvdy0+c3VtbWFyeWxpbmsgPSAnJzsKCSRvbmVyb3ctPnRodW1ibmFpbF91cmwgPSAnJzsKCSRvbmVyb3ctPmltYWdlX3VybCA9ICcnOwoJJG9uZXJvdy0+aWNvbnVybCA9ICcnOwoJJG9uZXJvdy0+ZmlsZXR5cGUgPSAnJzsKCSRvbmVyb3ctPmRlc2NyaXB0aW9uID0gJHJvd1sndXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uJ107Cgkkb25lcm93LT5pcCA9ICcnOwoJJG9uZXJvdy0+c2l6ZSA9ICcnOyAvLyBjb3VsZCBwb3B1bGF0ZSB3aXRoIGNvdW50Li4uCgkkb25lcm93LT5kYXRlID0gJyc7IC8vIGNvdWxkIHBvcHVsYXRlIHdpdGggZGF0YSAuLi4KCSRyb3dhcnJheVtdID0gJG9uZXJvdzsKfQoKJHNtYXJ0eS0+YXNzaWduICgnaXRlbXMnLCAkcm93YXJyYXkpOwokc21hcnR5LT5hc3NpZ24gKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKCiRzbWFydHktPmFzc2lnbiggJ21hdGNoZXMnLCAkbWF0Y2hlcyApOwoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSAoJHRlbXBsYXRlKTsKCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/action.default.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhZGVmaW5lZCgnQ01TX1ZFUlNJT04nKSApIGV4aXQ7Cgp7CgkkdG1wX3BhcmFtcyA9IGFycmF5KCk7CglpZiAoaXNzZXQgKCRwYXJhbXNbJ2hpZGRlbl9wYXJhbXMnXSkgKSAkdG1wX3BhcmFtcyA9IGNnZV9hcnJheTo6ZXhwbG9kZV93aXRoX2tleSgkcGFyYW1zWydoaWRkZW5fcGFyYW1zJ10pOwoJJHBhcmFtcyA9IGFycmF5X21lcmdlKCAkcGFyYW1zLCAkdG1wX3BhcmFtcyApOwp9CgovLyBjaGVjayBmb3IgcmVxdWlyZWQgYXJndW1lbnRzCmlmICghaXNzZXQgKCRwYXJhbXNbJ21vZGUnXSkgKSAkcGFyYW1zWydtb2RlJ10gPSAnc3VtbWFyeSc7CgovLyBzZXR1cAokdGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9zdW1tYXJ5cnB0Jyk7CiR0ZW1wbGF0ZSA9IFxjZ2VfcGFyYW06OmdldF9zdHJpbmcoJHBhcmFtcywndGVtcGxhdGUnLCR0ZW1wbGF0ZSk7CiRjb25maWcgPSAkZ0Ntcy0+R2V0Q29uZmlnKCk7CgovLyBoYW5kbGUgdGhlIHNlbmRmaWxlcGFnZSBwYXJhbWV0ZXIKJHNlbmRmaWxlcGFnZSA9ICRyZXR1cm5pZDsKaWYoIGlzc2V0KCRwYXJhbXNbJ3NlbmRmaWxlcGFnZSddKSApIHsKCSRtYW5hZ2VyID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKCSRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydzZW5kZmlsZXBhZ2UnXSk7CglpZiAoaXNzZXQoJG5vZGUpKSB7CgkJJGNvbnRlbnQgPSAkbm9kZS0+R2V0Q29udGVudCgpOwoJCWlmIChpc3NldCgkY29udGVudCkpICRzZW5kZmlsZXBhZ2UgPSAkY29udGVudC0+SWQoKTsKCX0KCWVsc2UgewoJCSRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlJZCgkcGFyYW1zWydzZW5kZmlsZXBhZ2UnXSk7CgkJaWYgKGlzc2V0KCRub2RlKSkgJHNlbmRmaWxlcGFnZSA9ICRwYXJhbXNbJ3NlbmRmaWxlcGFnZSddOwoJfQp9CmlmKCBlbXB0eSgkc2VuZGZpbGVwYWdlKSApIHsKCSRzZW5kZmlsZXBhZ2UgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9zZW5kZmlsZXBhZ2UnLC0xKTsKCWlmKCAkc2VuZGZpbGUgPCAxICkgJHNlbmRmaWxlcGFnZSA9ICRyZXR1cm5pZDsKfQoKLy8gaGFuZGxlIHRoZSBkZXRhaWxwYWdlIHBhcmFtZXRlcgokZGV0YWlscGFnZSA9ICcnOwppZiggaXNzZXQoJHBhcmFtc1snZGV0YWlscGFnZSddKSApIHsKCSRtYW5hZ2VyID0gJGdDbXMtPkdldEhpZXJhcmNoeU1hbmFnZXIoKTsKCSRub2RlID0gJG1hbmFnZXItPnN1cmVHZXROb2RlQnlBbGlhcygkcGFyYW1zWydkZXRhaWxwYWdlJ10pOwoJaWYgKGlzc2V0KCRub2RlKSkgewoJCSRjb250ZW50ID0gJG5vZGUtPkdldENvbnRlbnQoKTsKCQlpZiAoaXNzZXQoJGNvbnRlbnQpKSAkZGV0YWlscGFnZSA9ICRjb250ZW50LT5JZCgpOwoJfQoJZWxzZSB7CgkJJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUlkKCRwYXJhbXNbJ2RldGFpbHBhZ2UnXSk7CgkJaWYgKGlzc2V0KCRub2RlKSkgJGRldGFpbHBhZ2UgPSAkcGFyYW1zWydkZXRhaWxwYWdlJ107Cgl9Cgl1bnNldCggJHBhcmFtc1snZGV0YWlscGFnZSddICk7Cn0KaWYoICRkZXRhaWxwYWdlICE9ICcnICkgJHJldHVybmlkID0gJGRldGFpbHBhZ2U7CgovLyBtb2RlIGlzIHNldCwgbm93IGRlY2lkZSB3aGF0IHRvIGRvCi8vIGhhbmRsZSB0aGUgc2ltcGxlIHN0dWZmIChvbmUgc2luZ2xlIGxpbmspCmlmKCAkcGFyYW1zWydtb2RlJ10gPT0gJ3NpbmdsZScgfHwKICAgICRwYXJhbXNbJ21vZGUnXSA9PSAnZGV0YWlsZWQnIHx8CiAgICAkcGFyYW1zWydtb2RlJ10gPT0gJ2RldGFpbCcgfHwKICAgICRwYXJhbXNbJ21vZGUnXSA9PSAnc2luZ2xlc3VtbWFyeScgfHwKICAgICRwYXJhbXNbJ21vZGUnXSA9PSAnbGluaycgfHwKICAgICRwYXJhbXNbJ21vZGUnXSA9PSAndXJsJyApIHsKCWluY2x1ZGUoX19ESVJfXy4nL2FjdGlvbi5kZXRhaWwucGhwJyk7CglyZXR1cm47Cn0KZWxzZSBpZiggJHBhcmFtc1snbW9kZSddID09ICd1cGxvYWQnICkgewogICAgaW5jbHVkZShfX0RJUl9fLicvYWN0aW9uLnVwbG9hZC5waHAnKTsKICAgIHJldHVybjsKfQoKLy8KLy8gU2V0dXAgZGF0YSBmb3IgdGhlIGRlZmF1bHQgc3VtbWFyeSBtb2RlCi8vCiRzZWxlY3Rmb3JtID0gJGlkOwppZiggaXNzZXQoICRwYXJhbXNbJ3NlbGVjdGZvcm0nXSApICkgJHNlbGVjdGZvcm0gPSB0cmltKCRwYXJhbXNbJ3NlbGVjdGZvcm0nXSk7Cgokc2VsZWN0bmFtZSA9ICdmaWxlJzsKaWYoIGlzc2V0KCAkcGFyYW1zWydzZWxlY3RuYW1lJ10gKSApICRzZWxlY3RuYW1lID0gdHJpbSgkcGFyYW1zWydzZWxlY3RuYW1lJ10pOwoKJHNlbGVjdHZhbHVlID0gLTE7CmlmKCBpc3NldCggJHBhcmFtc1snc2VsZWN0dmFsdWUnXSApICkgJHNlbGVjdHZhbHVlID0gdHJpbSgkcGFyYW1zWydzZWxlY3R2YWx1ZSddKTsKCiRmaWxldHlwZXMgPSBudWxsOwppZiggaXNzZXQoICRwYXJhbXNbJ2ZpbGV0eXBlcyddICkgKSAkZmlsZXR5cGVzID0gdHJpbSgkcGFyYW1zWydmaWxldHlwZXMnXSk7CgokZmllbGRfbmFtZSA9IG51bGw7CmlmKCBpc3NldCggJHBhcmFtc1snZmllbGRuYW1lJ10gKSApICRmaWVsZF9uYW1lID0gdHJpbSgkcGFyYW1zWydmaWVsZG5hbWUnXSk7CgokZmllbGRfdmFsID0gbnVsbDsKaWYoIGlzc2V0KCAkcGFyYW1zWydmaWVsZHZhbCddICkgKSAkZmllbGRfdmFsID0gdHJpbSgkcGFyYW1zWydmaWVsZHZhbCddKTsKCiRmaWVsZF9uYW1lMiA9IG51bGw7CmlmKCBpc3NldCggJHBhcmFtc1snZmllbGRuYW1lMiddICkgKSAkZmllbGRfbmFtZTIgPSB0cmltKCRwYXJhbXNbJ2ZpZWxkbmFtZTInXSk7CgokZmllbGRfdmFsMiA9IG51bGw7CmlmKCBpc3NldCggJHBhcmFtc1snZmllbGR2YWwyJ10gKSApICRmaWVsZF92YWwyID0gdHJpbSgkcGFyYW1zWydmaWVsZHZhbDInXSk7Cgoka2V5ID0gbnVsbDsKaWYoIGlzc2V0KCAkcGFyYW1zWydrZXknXSApICkgJGtleSA9IHRyaW0oJHBhcmFtc1sna2V5J10pOwoKaWYoICFpc3NldCggJHBhcmFtc1snY2F0ZWdvcnknXSApICkgJHBhcmFtc1snY2F0ZWdvcnknXSA9ICdhbGwnOwoKLy8gdHJ5IHRvIGZpZ3VyZSBvdXQgYSBzb3J0IG9yZGVyCiRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2RhdGUgQVNDIjsKaWYoIGlzc2V0KCRwYXJhbXNbJ3NvcnRvcmRlciddKSApIHsKCXN3aXRjaCggdHJpbSgkcGFyYW1zWydzb3J0b3JkZXInXSkgKSB7CgljYXNlICJkYXRlX2FzYyI6CgkJLy8gYXNjZW5kaW5nIGRhdGUKCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHVwbG9hZF9kYXRlIEFTQyI7CgkJYnJlYWs7CgljYXNlICJkYXRlX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgZGF0ZQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2RhdGUgREVTQyI7CgkJYnJlYWs7CgljYXNlICJuYW1lX2FzYyI6CgkJLy8gYXNjZW5kaW5nIG5hbWUKCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHVwbG9hZF9uYW1lIEFTQyI7CgkJYnJlYWs7CgljYXNlICJuYW1lX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgbmFtZQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX25hbWUgREVTQyI7CgkJYnJlYWs7CgljYXNlICJzaXplX2FzYyI6CgkJLy8gYXNjZW5kaW5nIHNpemUKCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHVwbG9hZF9zaXplIEFTQyI7CgkJYnJlYWs7CgljYXNlICJzaXplX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgc2l6ZQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX3NpemUgREVTQyI7CgkJYnJlYWs7CgljYXNlICJzdW1tX2FzYyI6CgkJLy8gYXNjZW5kaW5nIHN1bW1hcnkKCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHVwbG9hZF9zdW1tYXJ5IEFTQyI7CgkJYnJlYWs7CgljYXNlICJzdW1tX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgc3VtbWFyeQoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX3N1bW1hcnkgREVTQyI7CgkJYnJlYWs7CgljYXNlICJhdXRob3JfYXNjIjoKCQkvLyBhc2NlbmRpbmcgYXV0aG9yCgkJJHNvcnRvcmRlciA9ICJPUkRFUiBCWSB1cGxvYWRfYXV0aG9yIEFTQyI7CgkJYnJlYWs7CgljYXNlICJhdXRob3JfZGVzYyI6CgkJLy8gZGVzY2VuZGluZyBhdXRob3IKCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHVwbG9hZF9hdXRob3IgREVTQyI7CgkJYnJlYWs7CgljYXNlICJpcF9hc2MiOgoJCS8vIGFzY2VuZGluZyBpcAoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2lwIEFTQyI7CgkJYnJlYWs7CgljYXNlICJpcF9kZXNjIjoKCQkvLyBkZXNjZW5kaW5nIGlwCgkJJHNvcnRvcmRlciA9ICJPUkRFUiBCWSB1cGxvYWRfaXAgREVTQyI7CgkJYnJlYWs7CgljYXNlICJkZXNjX2FzYyI6CgkJLy8gYXNjZW5kaW5nIGF1dGhvcgoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgdXBsb2FkX2Rlc2NyaXB0aW9uIEFTQyI7CgkJYnJlYWs7CgljYXNlICJkZXNjX2Rlc2MiOgoJCS8vIGRlc2NlbmRpbmcgYXV0aG9yCgkJJHNvcnRvcmRlciA9ICJPUkRFUiBCWSB1cGxvYWRfZGVzY3JpcHRpb24gREVTQyI7CgkJYnJlYWs7CiAgY2FzZSAnZG93bmxvYWRzX2FzYyc6CgkJLy8gYXNjZW5kaW5nIG9yZGVyIG9mIGRvd25sb2FkIGNvdW50CgkJJHNvcnRvcmRlciA9ICJPUkRFUiBCWSBkb3dubG9hZHMgQVNDIjsKCQlicmVhazsKICBjYXNlICdkb3dubG9hZHNfZGVzYyc6CgkJLy8gZGVzY2VuZGluZyBvcmRlciBvZiBkb3dubG9hZCBjb3VudAoJCSRzb3J0b3JkZXIgPSAiT1JERVIgQlkgZG93bmxvYWRzIERFU0MiOwoJCWJyZWFrOwoJY2FzZSAicmFuZG9tIjoKCQkvLyByYW5kb20KCQkkc29ydG9yZGVyID0gIk9SREVSIEJZIHJhbmQoKSI7Cgl9CiB9CiRzb3J0b3JkZXIgPSAiICIuJHNvcnRvcmRlcjsKCi8vIGRldGVybWluZSBob3cgbWFueSB3ZSdyZSBnb2luZyB0byBkaXNwbGF5CiRsaW1pdHN0ciA9ICIiOwokcGFnZWxpbWl0ID0gMTAwMDAwOwokcGFnZW51bSA9IDE7CiRudW1wYWdlcyA9IDE7CmlmKCBpc3NldCggJHBhcmFtc1snY291bnQnXSApICkgJHBhZ2VsaW1pdCA9IChpbnQpJHBhcmFtc1snY291bnQnXTsKaWYoIGlzc2V0KCAkcGFyYW1zWydwYWdlbnVtJ10gKSApICRwYWdlbnVtID0gKGludCkkcGFyYW1zWydwYWdlbnVtJ107CiRsaW1pdHN0ciA9ICIgTElNSVQgMCwkcGFnZWxpbWl0IjsKCiR0cGwgPSAkdGhpcy0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJHRlbXBsYXRlLCdzdW1tYXJ5cnB0XycpOwoKLy8gZ2V0IHRoZSBjYXRlZ29yeSBpZAokY2F0ZWdvcnkgPSBhcnJheSgpOwppZiggdHJpbSgkcGFyYW1zWydjYXRlZ29yeSddKSAhPSAnYWxsJyApIHsKCXRyeSB7CgkJJHBhcmFtc1snY2F0ZWdvcnknXSA9IGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snY2F0ZWdvcnknXSk7CgkJJGNhdGVnb3J5ID0gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCB0cmltKCRwYXJhbXNbJ2NhdGVnb3J5J10pICk7Cgl9CgljYXRjaCggRXhjZXB0aW9uICRlICkgewoJCWF1ZGl0KCcnLCR0aGlzLT5HZXROYW1lKCksJ0NvdWxkIG5vdCBnZXQgY2F0ZWdvcnkgaW5mb3JtYXRpb24gZm9yIHVwbG9hZHMgY2F0ZWdvcnkgJy4kcGFyYW1zWydjYXRlZ29yeSddKTsKCQkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnKSk7CgkJcmV0dXJuOwoJfQoJJHRwbC0+YXNzaWduKCdjYXRlZ29yeV9uYW1lJywkcGFyYW1zWydjYXRlZ29yeSddKTsKfQoKLy8gZ2V0IHRoZSBmaWx0ZXIgc3RyaW5nCiRmaWx0ZXIgPSAnJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X2ZpbHRlciddKSAmJiAkcGFyYW1zWydpbnB1dF9maWx0ZXInXSAhPSAnJyApICRmaWx0ZXIgPSB0cmltKCRwYXJhbXNbJ2lucHV0X2ZpbHRlciddKTsKaWYoICRmaWx0ZXIgPT0gJycgKSB1bnNldCgkcGFyYW1zWydoaWRkZW5fcGFyYW1zJ10pOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ2ZpbHRlciddKSApIHsKCS8vIG9wdGlvbmFsbHkgZGlzcGxheSB0aGUgZmlsdGVyIGZvcm0KCSR0cGwtPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwkbWV0aG9kPSdwb3N0JywgJycsIHRydWUpKTsKCSR0cGwtPmFzc2lnbigncHJvbXB0X2ZpbHRlcicsJHRoaXMtPkxhbmcoJ2ZpbHRlcicpKTsKCSR0cGwtPmFzc2lnbignaW5wdXRfZmlsdGVyJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfZmlsdGVyJywkZmlsdGVyLDE1KSk7CgkkdHBsLT5hc3NpZ24oJ2lucHV0X3N1Ym1pdCcsJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0KCRpZCwnaW5wdXRfc3VibWl0JywkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKCXVuc2V0KCAkcGFyYW1zWydpbnB1dF9maWx0ZXInXSApOwoJJHRwbC0+YXNzaWduKCdoaWRkZW5fcGFyYW1zJywkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oJGlkLCdoaWRkZW5fcGFyYW1zJyxjZ2VfYXJyYXk6OmltcGxvZGVfd2l0aF9rZXkoJHBhcmFtcykpKTsKCSR0cGwtPmFzc2lnbignZW5kZm9ybScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7Cn0KCiRkb19xdWVyeSA9IHRydWU7CmlmKCAoaXNzZXQoICRwYXJhbXNbJ25vX2luaXRpYWwnXSApICYmICRwYXJhbXNbJ25vX2luaXRpYWwnXSAhPSAnJykgJiYgKGlzc2V0KCAkcGFyYW1zWydoaWRkZW5fcGFyYW1zJ10pID09IGZhbHNlKSApIHsKCSRkb19xdWVyeSA9IGZhbHNlOwp9CgovLyBhZGp1c3QgdGhlIGZpbHRlcgokYWRqdXN0ZWRfZmlsdGVyID0gJGZpbHRlcjsKaWYoICRmaWx0ZXIgIT0gJycgKSB7CgkkdG1wID0gZXhwbG9kZSgnICcsJGFkanVzdGVkX2ZpbHRlcik7CgkkYWRqdXN0ZWRfZmlsdGVyID0gJyUnLiR0bXBbMF0uJyUnOwp9CgovLyBnZXQgcmVhZHkgZm9yIGFycmF5IHByb2Nlc3NpbmcKJHJvd2FycmF5ID0gYXJyYXkoKTsKJHF1ZXJ5ID0gJyc7CiRxdWVyeTEgPSAnJzsKJGRicmVzdWx0ID0gZmFsc2U7CiRxcGFybXMgPSBhcnJheSgpOwokdmFsaWRfY2F0cyA9IGFycmF5KCk7CgppZiggdHJpbSgkcGFyYW1zWydjYXRlZ29yeSddKSA9PSAnYWxsJyApIHsKCS8vCgkvLyBoYW5kbGUgZGlzcGxheSBhbGwgbGlzdGFibGUgY2F0ZWdvcmllcwoJLy8KCgkvLyBnZXQgYSBsaXN0IG9mIHRoZSBjYXRlZ29yaWVzIHdlJ3JlIGFsbG93ZWQgdG8gc2VlLgoJJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2xpc3RhYmxlJzsKCSRjYXRzID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoJJGFsbG93ZWRfY2F0cyA9IGFycmF5KCk7CglpZiggaXNfYXJyYXkoJGNhdHMpICkgewoJCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCRjYXRzKTsgJGkrKyApIHsKCQkJJG9uZWNhdCA9ICRjYXRzWyRpXTsKCQkJaWYoICEkb25lY2F0Wyd1cGxvYWRfY2F0ZWdvcnlfbGlzdGFibGUnXSApIGNvbnRpbnVlOwoKCQkJaWYoICR0aGlzLT5fQ2hlY2tEb3dubG9hZFNlY3VyaXR5KCRvbmVjYXQpICkgewoJCQkJLy8gd2UncmUgYWxsb3dlZCB0byB2aWV3IGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuCgkJCQkvLyBjYXN0IHRvIGludCwganVzdCBmb3IgcGFyYW5vaWEgcHVycG9zZXMuCgkJCQkkYWxsb3dlZF9jYXRzW10gPSAoaW50KSRvbmVjYXRbJ3VwbG9hZF9jYXRlZ29yeV9pZCddOwoJCQkJJHZhbGlkX2NhdHNbKGludCkkb25lY2F0Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXV0gPSAkb25lY2F0OwoJCQl9CgoJCQlpZiggJG9uZWNhdFsndXBsb2FkX2NhdGVnb3J5X3NjYW5uYWJsZSddICkgewoJCQkJLy8gbWF5IGFzIHdlbGwgc2NhbiBpdC4KCQkJCSRkaXIgPSBjbXNfam9pbl9wYXRoKCRnQ21zLT5jb25maWdbJ3VwbG9hZHNfcGF0aCddLCRvbmVjYXRbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10pOwoJCQkJJHRoaXMtPlNtYXJ0U2NhbkRpcmVjdG9yeSgkb25lY2F0Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSwkZGlyKTsKCQkJfQoJCX0KCX0KCgkvLyBhc3N1bWUgc3VtbWFyeSBtb2RlLgoJJHBhcmFtc1snbW9kZSddID0gJ3N1bW1hcnknOwoKCSRxdWVyeTEgPSAnU0VMRUNUIENPVU5UKEIudXBsb2FkX2lkKQogICAgICAgICAgICBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcyBCJzsKCSRxdWVyeSA9ICdTRUxFQ1QgU1FMX0NBTENfRk9VTkRfUk9XUyBCLnVwbG9hZF9pZCwgQi51cGxvYWRfY2F0ZWdvcnlfaWQsIEIudXBsb2FkX25hbWUsIEIudXBsb2FkX2F1dGhvciwgQi51cGxvYWRfc3VtbWFyeSwKICAgICAgICAgICAgICAgICAgIEIudXBsb2FkX2Rlc2NyaXB0aW9uLCBCLnVwbG9hZF9pcCwgQi51cGxvYWRfc2l6ZSwgQi51cGxvYWRfZGF0ZSwgQi51cGxvYWRfdGh1bWJuYWlsLCBCLnVwbG9hZF91c2VycGVybXMsIEMuZG93bmxvYWRzCiAgICAgICAgICAgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIEIKICAgICAgICAgICAgTEVGVCBPVVRFUiBKT0lOIChTRUxFQ1QgY291bnQoZG93bmxvYWRfaWQpIEFTIGRvd25sb2FkcyxmaWxlX2lkCiAgICAgICAgICAgICAgICAgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZG93bmxvYWRzIEdST1VQIEJZIGZpbGVfaWQpIEFTIEMKICAgICAgICAgICAgT04gQi51cGxvYWRfaWQgPSBDLmZpbGVfaWQnOwoKCWlmICgkZmllbGRfbmFtZSAhPSBudWxsICYmICRmaWVsZF92YWwgIT0gbnVsbCkgewoJCSRxdWVyeTEgLj0gIiBJTk5FUiBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgZnYgT04gZnYudXBsb2FkX2lkID0gQi51cGxvYWRfaWQgIjsKCQkkcXVlcnkxIC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkIE9OIGZkLmlkID0gZnYuZmxkX2lkICI7CgkJJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIGZ2IE9OIGZ2LnVwbG9hZF9pZCA9IEIudXBsb2FkX2lkICI7CgkJJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkIE9OIGZkLmlkID0gZnYuZmxkX2lkICI7Cgl9CgoJaWYgKCRmaWVsZF9uYW1lMiAhPSBudWxsICYmICRmaWVsZF92YWwyICE9IG51bGwpIHsKCQkkcXVlcnkxIC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIGZ2MiBPTiBmdjIudXBsb2FkX2lkID0gQi51cGxvYWRfaWQgIjsKCQkkcXVlcnkxIC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkMiBPTiBmZDIuaWQgPSBmdjIuZmxkX2lkICI7CgkJJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIGZ2MiBPTiBmdjIudXBsb2FkX2lkID0gQi51cGxvYWRfaWQgIjsKCQkkcXVlcnkgLj0gIiBJTk5FUiBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgZmQyIE9OIGZkMi5pZCA9IGZ2Mi5mbGRfaWQgIjsKCX0KCglpZiggY291bnQoJGFsbG93ZWRfY2F0cykgKSB7CgkJJHF1ZXJ5MSAuPSAnIFdIRVJFIEIudXBsb2FkX2NhdGVnb3J5X2lkIElOICgnLmltcGxvZGUoJywnLCRhbGxvd2VkX2NhdHMpLicpJzsKCQkkcXVlcnkgLj0gJyBXSEVSRSBCLnVwbG9hZF9jYXRlZ29yeV9pZCBJTiAoJy5pbXBsb2RlKCcsJywkYWxsb3dlZF9jYXRzKS4nKSc7Cgl9CgoJaWYoICRrZXkgIT0gbnVsbCApIHsKCQkkcXVlcnkxIC49ICIgQU5EIEIudXBsb2FkX2tleSA9ID8gIjsKCQkkcXVlcnkgLj0gIiBBTkQgQi51cGxvYWRfa2V5ID0gPyAiOwoJCSRxcGFybXNbXSA9ICRrZXk7Cgl9CgoJaWYoICRhZGp1c3RlZF9maWx0ZXIgIT0gJycgKSB7CgkJJHF1ZXJ5MSAuPSAiIEFORCBCLnVwbG9hZF9uYW1lIExJS0UgPyAiOwoJCSRxdWVyeSAuPSAiIEFORCBCLnVwbG9hZF9uYW1lIExJS0UgPyAiOwoJCSRxcGFybXNbXSA9ICRhZGp1c3RlZF9maWx0ZXI7Cgl9CgoJaWYgKCRmaWVsZF9uYW1lICE9IG51bGwgJiYgJGZpZWxkX3ZhbCAhPSBudWxsKSB7CgkJJHF1ZXJ5MSAuPSAiIEFORCBmZC5uYW1lID0gPyBBTkQgZnYudmFsdWUgTElLRSA/ICI7CgkJJHF1ZXJ5IC49ICIgQU5EIGZkLm5hbWUgPSA/IEFORCBmdi52YWx1ZSBMSUtFID8gIjsKCQkkcXBhcm1zW10gPSAkZmllbGRfbmFtZTsKCQkkcXBhcm1zW10gPSAnJScgLiAkZmllbGRfdmFsIC4gJyUnOwoJfQoKCWlmICgkZmllbGRfbmFtZTIgIT0gbnVsbCAmJiAkZmllbGRfdmFsMiAhPSBudWxsKSB7CgkJJHF1ZXJ5MSAuPSAiIEFORCBmZDIubmFtZSA9ID8gQU5EIGZ2Mi52YWx1ZSBMSUtFID8gIjsKCQkkcXVlcnkgLj0gIiBBTkQgZmQyLm5hbWUgPSA/IEFORCBmdjIudmFsdWUgTElLRSA/ICI7CgkJJHFwYXJtc1tdID0gJGZpZWxkX25hbWUyOwoJCSRxcGFybXNbXSA9ICclJyAuICRmaWVsZF92YWwyIC4gJyUnOwoJfQoKCSRxdWVyeSAgLj0gIiBHUk9VUCBCWSBCLnVwbG9hZF9pZCI7CgkkcXVlcnkgIC49ICRzb3J0b3JkZXI7CgkkZG9fcXVlcnkgPSB0cnVlOwogfQogZWxzZSB7CgkgLy8KCSAvLyBEZWFsaW5nIHdpdGggYSBzcGVjaWZpYyBjYXRlZ29yeQoJIC8vCgoJIC8vIGlmIHRoZSBjYXRlZ29yeSBpc24ndCBsaXN0YWJsZSwgd2UgY2FuIHN0b3AgaGVyZQoJIGlmKCAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSddID09IDAgKSByZXR1cm47CgkgJGNhdGVnb3J5X2lkID0gJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKCgkgLy8gY2hlY2sgZm9yIHBlcm1pc3Npb24sIGlmIEZFVSBtb2R1bGUgZXhpc3RzLCBhbmQgdGhlCgkgLy8gdXBsb2FkcyBncm91cGxpc3QgaXMKCSAvLyBub3QgbnVsbCwgYW5kIHRoZSByZXR1cm5pZCBpcyBub3QgZW1wdHkgKHdlJ3JlIG9uIHRoZSBmcm9udGVuZCkKCSAkcmVzdWx0ID0gJHRoaXMtPl9DaGVja0Rvd25sb2FkU2VjdXJpdHkoJGNhdGVnb3J5KTsKCSBpZiggISRyZXN1bHQgKSB7CgkJICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJykgKTsKCQkgcmV0dXJuOwoJIH0KCgkgLy8gd2UncmUgZ29ubmEgc2NhbiB0aGUgZGlyZWN0b3J5IGFuZCBzZWUgaWYgYW55Ym9keSB1cGxvYWRlZAoJIC8vIGFueSBmaWxlcyB2aWEgZnRwIG9yIHNjcCBvciBhbnl0aGluZyBzaWxseS4KCSAkY2F0cGF0aDEgPSAkdGhpcy0+Z2V0Q2F0ZWdvcnlQYXRoRnJvbUlEKCRjYXRlZ29yeV9pZCk7CgkgJGRpciA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aDEgKTsKCSBpZiggJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfc2Nhbm5hYmxlJ10gKSAkdGhpcy0+U21hcnRTY2FuRGlyZWN0b3J5KCAkY2F0ZWdvcnlfaWQsICRkaXIgKTsKCgkgLy8gTm93IGhhbmRsZSBvdXIgbW9kZQoJIHN3aXRjaCggdHJpbSgkcGFyYW1zWydtb2RlJ10gKSApIHsKCSBjYXNlICdzZWxlY3QnOiB7CgkJIC8vIGRpc3BsYXkgYSBkcm9wZG93biBsaXN0IG9mIGFsbCBvZiB0aGUgbWF0Y2hpbmcgZmlsZXMKCQkgJHF1ZXJ5ID0gIlNFTEVDVCBVLiosQy51cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlLEQubnVtIEFTIGRvd25sb2FkcwogICAgICAgICAgICAgICBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2FkcyBVCiAgICAgICAgICAgICAgIExFRlQgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBDCiAgICAgICAgICAgICAgIE9OIFUudXBsb2FkX2NhdGVnb3J5X2lkID0gQy51cGxvYWRfY2F0ZWdvcnlfaWQKICAgICAgICAgICAgICAgTEVGVCBKT0lOIChTRUxFQ1QgQ09VTlQoZG93bmxvYWRfaWQpIEFTIG51bSxmaWxlX2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2FkcyBHUk9VUCBCWSBmaWxlX2lkKSBBUyBECiAgICAgICAgICAgICAgIE9OIFUudXBsb2FkX2lkID0gRC5maWxlX2lkICI7CgoJCSBpZiAoJGZpZWxkX25hbWUgIT0gbnVsbCAmJiAkZmllbGRfdmFsICE9IG51bGwpIHsKCQkJICRxdWVyeSAuPSAiIElOTkVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyBmdiBPTiBmdi51cGxvYWRfaWQgPSBVLnVwbG9hZF9pZCAiOwoJCQkgJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkIE9OIGZkLmlkID0gZnYuZmxkX2lkICI7CgkJIH0KCgkJIGlmICgkZmllbGRfbmFtZTIgIT0gbnVsbCAmJiAkZmllbGRfdmFsMiAhPSBudWxsKSB7CgkJCSAkcXVlcnkgLj0gIiBJTk5FUiBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgZnYyIE9OIGZ2Mi51cGxvYWRfaWQgPSBVLnVwbG9hZF9pZCAiOwoJCQkgJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkMiBPTiBmZDIuaWQgPSBmdjIuZmxkX2lkICI7CgkJIH0KCgkJICRxdWVyeSAuPSAiIFdIRVJFIFUudXBsb2FkX2NhdGVnb3J5X2lkID0gPyAiOwoJCSAkcXBhcm1zW10gPSAkY2F0ZWdvcnlfaWQ7CgkJIGlmKCAka2V5ICE9IE5VTEwgKSB7CgkJCSAkcXVlcnkgLj0gIiBBTkQgdXBsb2FkX2tleSA9ID8iOwoJCQkgJHFwYXJtc1tdID0gJGtleTsKCQkgfQoJCSBpZiAoJGZpZWxkX25hbWUgIT0gbnVsbCAmJiAkZmllbGRfdmFsICE9IG51bGwpIHsKCQkJICRxdWVyeSAuPSAiIEFORCBmZC5uYW1lID0gPyBBTkQgZnYudmFsdWUgTElLRSA/ICI7CgkJCSAkcXBhcm1zW10gPSAkZmllbGRfbmFtZTsKCQkJICRxcGFybXNbXSA9ICclJyAuICRmaWVsZF92YWwgLiAnJSc7CgkJIH0KCQkgaWYgKCRmaWVsZF9uYW1lMiAhPSBudWxsICYmICRmaWVsZF92YWwyICE9IG51bGwpIHsKCQkJICRxdWVyeSAuPSAiIEFORCBmZDIubmFtZSA9ID8gQU5EIGZ2Mi52YWx1ZSBMSUtFID8gIjsKCQkJICRxcGFybXNbXSA9ICRmaWVsZF9uYW1lMjsKCQkJICRxcGFybXNbXSA9ICclJyAuICRmaWVsZF92YWwyIC4gJyUnOwoJCSB9CgkJIC8vJHF1ZXJ5IC49ICIgR1JPVVAgQlkgVS51cGxvYWRfaWQiOwoJCSAkcXVlcnkgLj0gJHNvcnRvcmRlci4kbGltaXRzdHI7CgkJICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSAoJHF1ZXJ5LCAkcXBhcm1zKTsKCQkgJGl0ZW1zID0gYXJyYXkoKTsKCQkgaWYoIGlzc2V0KCRwYXJhbXNbJ3NlbGVjdG5vbmUnXSkgKSB7CgkJCSAkaXRlbXNbJHRoaXMtPkxhbmcoJ25vbmUnKV0gPSAtMTsKCQkgfQoJCSB3aGlsZSggJGRicmVzdWx0ICYmICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpKSApIHsKCQkJICRpdGVtc1skcm93Wyd1cGxvYWRfbmFtZSddXSA9ICRyb3dbJ3VwbG9hZF9pZCddOwoJCSB9CgkJIGVjaG8gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJHNlbGVjdGZvcm0sJHNlbGVjdG5hbWUsJGl0ZW1zLC0xLCRzZWxlY3R2YWx1ZSk7CgkJICRkb19xdWVyeSA9IGZhbHNlOwoJIH0KCSBicmVhazsKCgkgY2FzZSAnc3VtbWFyeSc6IHsKCQkgLy8gZGlzcGxheSBpbmZvIGFib3V0IGFsbCBvZiB0aGUgZmlsZXMgaW4gdGhlIGNhdGVnb3J5CgkJIC8vIHBvc3NpYmx5IGxpbWl0ZWQgYnkgZmlsZXMgb2YgYSBzcGVjaWZjIHR5cGUKCQkgJHFwYXJtcyA9IGFycmF5KCRjYXRlZ29yeV9pZCk7CgkJICRxdWVyeTEgPSAiU0VMRUNUIGNvdW50KFUudXBsb2FkX2lkKSBBUyBjb3VudAogICAgICAgICAgICAgICAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMgVSAiOwoJCSAkcXVlcnkgPSAiU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgVS4qLEMudXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZSxELm51bSBBUyBkb3dubG9hZHMKICAgICAgICAgICAgICAgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMgVQogICAgICAgICAgICAgICBMRUZUIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgQwogICAgICAgICAgICAgICBPTiBVLnVwbG9hZF9jYXRlZ29yeV9pZCA9IEMudXBsb2FkX2NhdGVnb3J5X2lkCiAgICAgICAgICAgICAgIExFRlQgSk9JTiAoU0VMRUNUIGNvdW50KGRvd25sb2FkX2lkKSBBUyBudW0sZmlsZV9pZCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgR1JPVVAgQlkgZmlsZV9pZCkgQVMgRAogICAgICAgICAgICAgICBPTiBVLnVwbG9hZF9pZCA9IEQuZmlsZV9pZCI7CgkJIGlmICgkZmllbGRfbmFtZSAhPSBudWxsICYmICRmaWVsZF92YWwgIT0gbnVsbCkgewoJCQkgJHF1ZXJ5MSAuPSAiIElOTkVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyBmdiBPTiBmdi51cGxvYWRfaWQgPSBVLnVwbG9hZF9pZCAiOwoJCQkgJHF1ZXJ5MSAuPSAiIElOTkVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBmZCBPTiBmZC5pZCA9IGZ2LmZsZF9pZCAiOwoJCQkgJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIGZ2IE9OIGZ2LnVwbG9hZF9pZCA9IFUudXBsb2FkX2lkICI7CgkJCSAkcXVlcnkgLj0gIiBJTk5FUiBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgZmQgT04gZmQuaWQgPSBmdi5mbGRfaWQgIjsKCQkgfQoJCSBpZiAoJGZpZWxkX25hbWUyICE9IG51bGwgJiYgJGZpZWxkX3ZhbDIgIT0gbnVsbCkgewoJCQkgJHF1ZXJ5MSAuPSAiIElOTkVSIEpPSU4gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyBmdjIgT04gZnYyLnVwbG9hZF9pZCA9IFUudXBsb2FkX2lkICI7CgkJCSAkcXVlcnkxIC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkMiBPTiBmZDIuaWQgPSBmdjIuZmxkX2lkICI7CgkJCSAkcXVlcnkgLj0gIiBJTk5FUiBKT0lOICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgZnYyIE9OIGZ2Mi51cGxvYWRfaWQgPSBVLnVwbG9hZF9pZCAiOwoJCQkgJHF1ZXJ5IC49ICIgSU5ORVIgSk9JTiAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIGZkMiBPTiBmZDIuaWQgPSBmdjIuZmxkX2lkICI7CgkJIH0KCgkJICRxdWVyeSAuPSAiIFdIRVJFIFUudXBsb2FkX2NhdGVnb3J5X2lkID0gPyAiOwoJCSAkcXVlcnkxIC49ICIgV0hFUkUgVS51cGxvYWRfY2F0ZWdvcnlfaWQgPSA/ICI7CgkJIGlmKCAka2V5ICE9IG51bGwgKSB7CgkJCSAkcXVlcnkxIC49ICIgQU5EIHVwbG9hZF9rZXkgPSA/IjsKCQkJICRxdWVyeSAuPSAiIEFORCB1cGxvYWRfa2V5ID0gPyI7CgkJCSAkcXBhcm1zW10gPSAka2V5OwoJCSB9CgkJIGlmKCAkYWRqdXN0ZWRfZmlsdGVyICE9ICcnICkgewoJCQkgJHF1ZXJ5MSAuPSAiIEFORCB1cGxvYWRfbmFtZSBMSUtFID8iOwoJCQkgJHF1ZXJ5IC49ICIgQU5EIHVwbG9hZF9uYW1lIExJS0UgPyI7CgkJCSAkcXBhcm1zW10gPSAkYWRqdXN0ZWRfZmlsdGVyOwoJCSB9CgkJIGlmICgkZmllbGRfbmFtZSAhPSBudWxsICYmICRmaWVsZF92YWwgIT0gbnVsbCkgewoJCQkgJHF1ZXJ5MSAuPSAiIEFORCBmZC5uYW1lID0gPyBBTkQgZnYudmFsdWUgTElLRSA/ICI7CgkJCSAkcXVlcnkgLj0gIiBBTkQgZmQubmFtZSA9ID8gQU5EIGZ2LnZhbHVlIExJS0UgPyAiOwoJCQkgJHFwYXJtc1tdID0gJGZpZWxkX25hbWU7CgkJCSAkcXBhcm1zW10gPSAnJScgLiAkZmllbGRfdmFsIC4gJyUnOwoJCSB9CgkJIGlmICgkZmllbGRfbmFtZTIgIT0gbnVsbCAmJiAkZmllbGRfdmFsMiAhPSBudWxsKSB7CgkJCSAkcXVlcnkxIC49ICIgQU5EIGZkMi5uYW1lID0gPyBBTkQgZnYyLnZhbHVlIExJS0UgPyAiOwoJCQkgJHF1ZXJ5IC49ICIgQU5EIGZkMi5uYW1lID0gPyBBTkQgZnYyLnZhbHVlIExJS0UgPyAiOwoJCQkgJHFwYXJtc1tdID0gJGZpZWxkX25hbWUyOwoJCQkgJHFwYXJtc1tdID0gJyUnIC4gJGZpZWxkX3ZhbDIgLiAnJSc7CgkJIH0KCQkgLy8gYmxhaCBibGFoCgkJIC8vJHF1ZXJ5MSAuPSAiIEdST1VQIEJZIFUudXBsb2FkX2lkIjsKCQkgLy8kcXVlcnkxIC49ICRzb3J0b3JkZXI7CgkJICRxdWVyeSAuPSAiIEdST1VQIEJZIFUudXBsb2FkX2lkIjsKCQkgJHF1ZXJ5IC49ICRzb3J0b3JkZXI7CgkgfQoJIGJyZWFrOwoJIH0gLy8gc3dpdGNoCiB9CgokbWF0Y2hlcyA9IDA7CmlmKCAkZG9fcXVlcnkgPT0gdHJ1ZSApIHsKCS8vIGdldCB0aGUgdG90YWwgbnVtYmVyIG9mIHJvd3MKCS8vICRtYXRjaGVzID0gJGRiLT5HZXRPbmUoJHF1ZXJ5MSwgJHFwYXJtcyk7CgoJLy8gZG8gb3VyIHF1ZXJ5LgoJJHN0YXJ0b2Zmc2V0ID0gKCRwYWdlbnVtLTEpICogJHBhZ2VsaW1pdDsKCSRkYnJlc3VsdCA9ICRkYi0+U2VsZWN0TGltaXQoJHF1ZXJ5LCRwYWdlbGltaXQsJHN0YXJ0b2Zmc2V0LCRxcGFybXMpOwoKCS8vIGdldCB0b3RhbCBtYXRjaGVzIGFuZCBjYWxjdWxhdGUgdGhlIG51bWJlciBvZiBwYWdlcwoJJG1hdGNoZXMgPSAkZGItPkdldE9uZSgnU0VMRUNUIEZPVU5EX1JPV1MoKScpOwoJJG51bXBhZ2VzID0gKGludCkoJG1hdGNoZXMgLyAkcGFnZWxpbWl0KTsKCWlmKCAkbWF0Y2hlcyAlICRwYWdlbGltaXQgPiAwICkgJG51bXBhZ2VzKys7CgoJLy8gc2V0dXAgc3RyaW5ncwoJJHRwbC0+YXNzaWduKCdudW1wYWdlcycsJG51bXBhZ2VzKTsKCSR0cGwtPmFzc2lnbigncGFnZW51bScsJHBhZ2VudW0pOwoJJHRwbC0+YXNzaWduKCdwYWdlbGltaXQnLCRwYWdlbGltaXQpOwoJJHRwbC0+YXNzaWduKCdtYXRjaGVzJywgJG1hdGNoZXMgKTsKCWlmKCAkcGFnZW51bSA+IDEgKSB7CgkJJHBhcm1zID0gJHBhcmFtczsKCQkkcGFybXNbJ3BhZ2VudW0nXSA9IDE7CgkJJHRwbC0+YXNzaWduKCdmaXJzdHBhZ2VfdXJsJywkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHQnLCRyZXR1cm5pZCwnJywkcGFybXMsJycsdHJ1ZSkpOwoJCSRwYXJtcyA9ICRwYXJhbXM7CgkJJHBhcm1zWydwYWdlbnVtJ10gPSAkcGFnZW51bSAtIDE7CgkJJHRwbC0+YXNzaWduKCdwcmV2cGFnZV91cmwnLCR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnZGVmYXVsdCcsJHJldHVybmlkLCcnLCRwYXJtcywnJyx0cnVlKSk7Cgl9CglpZiggJHBhZ2VudW0gPCAkbnVtcGFnZXMgKSB7CgkJJHBhcm1zID0gJHBhcmFtczsKCQkkcGFybXNbJ3BhZ2VudW0nXSA9ICRudW1wYWdlczsKCQkkdHBsLT5hc3NpZ24oJ2xhc3RwYWdlX3VybCcsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJycsJHBhcm1zLCcnLHRydWUpKTsKCgkJJHBhcm1zID0gJHBhcmFtczsKCQkkcGFybXNbJ3BhZ2VudW0nXSA9ICRwYWdlbnVtICsgMTsKCQkkdHBsLT5hc3NpZ24oJ25leHRwYWdlX3VybCcsJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0JywkcmV0dXJuaWQsJycsJHBhcm1zLCcnLHRydWUpKTsKCX0KCSR0cGwtPmFzc2lnbignZmlyc3RwYWdlJywkdGhpcy0+TGFuZygnZmlyc3RwYWdlJykpOwoJJHRwbC0+YXNzaWduKCdmaXJzdHBhZ2VfYXJyb3cnLCR0aGlzLT5MYW5nKCdmaXJzdHBhZ2VfYXJyb3cnKSk7CgkkdHBsLT5hc3NpZ24oJ3ByZXZwYWdlJywkdGhpcy0+TGFuZygncHJldnBhZ2UnKSk7CgkkdHBsLT5hc3NpZ24oJ3ByZXZwYWdlX2Fycm93JywkdGhpcy0+TGFuZygncHJldnBhZ2VfYXJyb3cnKSk7CgkkdHBsLT5hc3NpZ24oJ25leHRwYWdlJywkdGhpcy0+TGFuZygnbmV4dHBhZ2UnKSk7CgkkdHBsLT5hc3NpZ24oJ25leHRwYWdlX2Fycm93JywkdGhpcy0+TGFuZygnbmV4dHBhZ2VfYXJyb3cnKSk7CgkkdHBsLT5hc3NpZ24oJ2xhc3RwYWdlJywkdGhpcy0+TGFuZygnbGFzdHBhZ2UnKSk7CgkkdHBsLT5hc3NpZ24oJ2xhc3RwYWdlX2Fycm93JywkdGhpcy0+TGFuZygnbGFzdHBhZ2VfYXJyb3cnKSk7CgkkdHBsLT5hc3NpZ24oJ3BhZ2V0ZXh0JywkdGhpcy0+TGFuZygncGFnZScpKTsKCSR0cGwtPmFzc2lnbignb2Z0ZXh0JywkdGhpcy0+TGFuZygnb2YnKSk7CgkkdHBsLT5hc3NpZ24oJ21hdGNoZXN0ZXh0JywkdGhpcy0+TGFuZygnbWF0Y2hlc2ZvdW5kJykpOwoJJHRwbC0+YXNzaWduKCdjYXRlZ29yeScsJHRoaXMtPkxhbmcoJ2NhdGVnb3J5JykpOwoJJHRwbC0+YXNzaWduKCdpZCcsJHRoaXMtPkxhbmcoJ2lkJykpOwoJJHRwbC0+YXNzaWduKCdkZWxldGUnLCR0aGlzLT5MYW5nKCdkZWxldGUnKSk7CgkkdHBsLT5hc3NpZ24oJ2FyZXlvdXN1cmUnLCR0aGlzLT5MYW5nKCdhcmV5b3VzdXJlJykpOwoJJHRwbC0+YXNzaWduKCduYW1lJywkdGhpcy0+TGFuZygnbmFtZScpKTsKCSR0cGwtPmFzc2lnbignZGF0ZScsJHRoaXMtPkxhbmcoJ2RhdGUnKSk7CgkkdHBsLT5hc3NpZ24oJ2F1dGhvcicsJHRoaXMtPkxhbmcoJ2F1dGhvcicpKTsKCSR0cGwtPmFzc2lnbignc2l6ZScsJHRoaXMtPkxhbmcoJ3NpemVrYicpKTsKCSR0cGwtPmFzc2lnbignZGV0YWlscycsJHRoaXMtPkxhbmcoJ2RldGFpbHMnKSk7CgkkdHBsLT5hc3NpZ24oJ3N1bW1hcnknLCR0aGlzLT5MYW5nKCdzdW1tYXJ5JykpOwoJJHRwbC0+YXNzaWduKCdkZXNjcmlwdGlvbicsJHRoaXMtPkxhbmcoJ2Rlc2NyaXB0aW9uJykpOwoJJHRwbC0+YXNzaWduKCd0aHVtYm5haWwnLCR0aGlzLT5MYW5nKCd0aHVtYm5haWwnKSk7CgkkdHBsLT5hc3NpZ24oJ2ljb24nLCR0aGlzLT5MYW5nKCdpY29uJykpOwoJJHRwbC0+YXNzaWduKCdpbWFnZScsJHRoaXMtPkxhbmcoJ2ltYWdlJykpOwoKCWlmICghJGRicmVzdWx0KSAkdHBsLT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCdlcnJvcl9ub2ZpbGVzJykpOwkvLyBtYXliZSB0aGVyZSBhcmUgbm8gZmlsZXMgaW4gdGhpcyBjYXRlZ29yeQoKCSRmaWVsZGRlZnMgPSBudWxsOwoJewoJCSRxdWVyeSA9ICdTRUxFQ1QgaWQsbmFtZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgT1JERVIgQlkgaW9yZGVyJzsKCQkkZmRfZGJyID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoJCWlmKCBpc19hcnJheSgkZmRfZGJyKSAmJiBjb3VudCgkZmRfZGJyKSApICRmaWVsZGRlZnMgPSBjZ2VfYXJyYXk6OnRvX2hhc2goJGZkX2RiciwnaWQnKTsKCX0KCgkkZmllbGR2YWxzID0gYXJyYXkoKTsKCWlmKCBpc19hcnJheSgkZmllbGRkZWZzKSAmJiBjb3VudCgkZmllbGRkZWZzKSApIHsKCQkkaWRsaXN0ID0gYXJyYXkoKTsKCQl3aGlsZSggISRkYnJlc3VsdC0+RU9GICkgewoJCQkkcm93ID0gJGRicmVzdWx0LT5maWVsZHM7CgkJCWlmKCAhaW5fYXJyYXkoKGludCkkcm93Wyd1cGxvYWRfaWQnXSwkaWRsaXN0KSApICRpZGxpc3RbXSA9IChpbnQpJHJvd1sndXBsb2FkX2lkJ107CgkJCSRkYnJlc3VsdC0+TW92ZU5leHQoKTsKCQl9CgkJJGRicmVzdWx0LT5Nb3ZlRmlyc3QoKTsKCgkJJHF1ZXJ5ID0gJ1NFTEVDVCB1cGxvYWRfaWQsZmxkX2lkLHZhbHVlIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscwogICAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9pZCBJTiAoJy5pbXBsb2RlKCcsJywkaWRsaXN0KS4nKSBPUkRFUiBCWSB1cGxvYWRfaWQsIGZsZF9pZCc7CgkJJGZ2X2RiciA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKCQlpZiggaXNfYXJyYXkoJGZ2X2RicikgJiYgY291bnQoJGZ2X2RicikgKSB7CgkJCWZvcmVhY2goICRmdl9kYnIgYXMgJHJvdyApIHsKCQkJCSR1cGxvYWRfaWQgPSAkcm93Wyd1cGxvYWRfaWQnXTsKCQkJCWlmKCAhaXNzZXQoJGZpZWxkZGVmc1skcm93WydmbGRfaWQnXV0pICkgY29udGludWU7CgkJCQlpZiggIWlzc2V0KCRmaWVsZHZhbHNbJHVwbG9hZF9pZF0pICkgJGZpZWxkdmFsc1skdXBsb2FkX2lkXSA9IGFycmF5KCk7CgkJCQkkcmVjID0gJGZpZWxkZGVmc1skcm93WydmbGRfaWQnXV07CgkJCQkkcmVjWyd2YWx1ZSddID0gJHJvd1sndmFsdWUnXTsKCQkJCSRmaWVsZHZhbHNbJHVwbG9hZF9pZF1bJHJlY1snbmFtZSddXSA9ICRyZWM7CgkJCX0KCQl9Cgl9CgoJLy8gZG8gdGhlIGxpc3QKCXdoaWxlICgkZGJyZXN1bHQgJiYgJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3coKSkgewoJCSRvbmVyb3cgPSBuZXcgU3RkQ2xhc3MgKCk7CgoJCS8vIGNoZWNrIGZpbGUgcGVybWlzc2lvbnMuCgkJJG9uZXJvdy0+dmlld2FibGUgPSAkdGhpcy0+X0NoZWNrRmlsZURvd25sb2FkU2VjdXJpdHkoJHJvdyk7CgkJZm9yZWFjaCggJHJvdyBhcyAka2V5ID0+ICR2YWx1ZSApIHsKCQkJJG9uZXJvdy0+JGtleSA9ICR2YWx1ZTsKCQl9CgoJCSRvbmVyb3ctPnN1bW1hcnkgPSAkcm93Wyd1cGxvYWRfc3VtbWFyeSddOwoJCSRvbmVyb3ctPmF1dGhvciA9ICRyb3dbJ3VwbG9hZF9hdXRob3InXTsKCQkkb25lcm93LT5kZXNjcmlwdGlvbiA9ICRyb3dbJ3VwbG9hZF9kZXNjcmlwdGlvbiddOwoJCSRvbmVyb3ctPmlwID0gJHJvd1sndXBsb2FkX2lwJ107CgkJJG9uZXJvdy0+c2l6ZSA9IGludHZhbCgkcm93Wyd1cGxvYWRfc2l6ZSddIC8gMTAyNC4wICsgMC41KTsKCQkkb25lcm93LT5kYXRlID0gJHJvd1sndXBsb2FkX2RhdGUnXTsKCgkJJG9uZXJvdy0+Y2F0ZWdvcnkgPSAkcGFyYW1zWydjYXRlZ29yeSddOwoJCWlmKCAkcGFyYW1zWydjYXRlZ29yeSddID09ICdhbGwnICkgJG9uZXJvdy0+Y2F0ZWdvcnkgPSAkdmFsaWRfY2F0c1skcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXV1bJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ107CgoJCS8vIHRodW1ibmFpbAoJCSRjYXRwYXRoID0gJHRoaXMtPmdldENhdGVnb3J5UGF0aEZyb21GaWxlSUQoJHJvd1sndXBsb2FkX2lkJ10pOwoJCWlmKCAhZW1wdHkoJHJvd1sndXBsb2FkX3RodW1ibmFpbCddKSApIHsKCQkJJHRuZmlsZSA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSApOwoJCQlpZiggZmlsZV9leGlzdHMoICR0bmZpbGUgKSApIHsKCQkJCSR0bnVybCA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uIi8iLiRjYXRwYXRoLiIvIi4kcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ107CgkJCQkkb25lcm93LT50aHVtYm5haWxfdXJsID0gJHRudXJsOwoJCQl9CgkJfQoKCQkvLyBub3cgaGFuZGxlIHRoZSBkZXRhaWwgbGluaywgZGV0YWlsIHVybAoJCSRwYXJtcyA9ICRwYXJhbXM7CgkJJHBhcm1zWydtb2RlJ10gPSAnc2luZ2xlJzsKCQkkcGFybXNbJ3VwbG9hZF9pZCddID0gJHJvd1sndXBsb2FkX2lkJ107CgkJJHByZXR0eXVybCA9ICJ1cGxvYWRzL2ZpbGUvJHJldHVybmlkLyIuJHJvd1sndXBsb2FkX2lkJ10uJy8nLnVybGVuY29kZSgkcm93Wyd1cGxvYWRfbmFtZSddKTsKCQkkb25lcm93LT5kZXRhaWxsaW5rID0JJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluayAoJGlkLCAkcmV0dXJuaWQsICdkZWZhdWx0JywgJHRoaXMtPkxhbmcoJ2RldGFpbHMnKSwgJHBhcm1zLCAnJywgZmFsc2UsIHRydWUsICcnLCBmYWxzZSwgJHByZXR0eXVybCApOwoJCSRvbmVyb3ctPmRldGFpbHVybCA9ICR0aGlzLT5DcmVhdGVGcm9udGVuZExpbmsgKCRpZCwgJHJldHVybmlkLCAnZGVmYXVsdCcsICR0aGlzLT5MYW5nKCdkZXRhaWxzJyksICRwYXJtcywgJycsIHRydWUsIGZhbHNlLCAnJywgZmFsc2UsICRwcmV0dHl1cmwgKTsKCgkJLy8gZmlsZXR5cGUKCQkkZmlsZXR5cGUgPSAkdGhpcy0+X0dldEZpbGVUeXBlKCAkcm93Wyd1cGxvYWRfbmFtZSddICk7CgkJJGltZ3BhdGggPSAnbW9kdWxlcy8nLmJhc2VuYW1lKF9fRElSX18pLicvaW1hZ2VzLyc7CgkJJG9uZXJvdy0+aWNvbnVybCA9ICRpbWdwYXRoLid1bmtub3duLnBuZyc7CgkJaWYoICRmaWxldHlwZSAhPT0gZmFsc2UgKSB7CgkJCSRvbmVyb3ctPmljb251cmwgPSAkaW1ncGF0aC4kZmlsZXR5cGVbJ2ltYWdlJ107CgkJCSRvbmVyb3ctPmZpbGV0eXBlID0gJGZpbGV0eXBlOwoJCX0KCgkJaWYoICRvbmVyb3ctPnZpZXdhYmxlICkgewoJCQkvLyBmaWxlcyB0aGF0IGFyZSB2aWV3YWJsZSBoYXZlIHRoZSBkb3dubG9hZCwgc2VuZGZpbGUsIGFuZCBkZWxldGUgbGlua3MgZXRjLgoJCQkvLyBvdGhlciBmaWxlcyB5b3UgY2FuIHNlZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQsIGJ1dCB0aGF0J3MgaXQuCgkJCSRvbmVyb3ctPnNlbmRmaWxlX3VybCA9CSR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdzZW5kZmlsZScsICRzZW5kZmlsZXBhZ2UsICcnLGFycmF5KCd1cGxvYWRfaWQnPT4kcm93Wyd1cGxvYWRfaWQnXSksJycsIHRydWUsIHRydWUsICcnLCBmYWxzZSk7CgkJCSRvbmVyb3ctPmRvd25sb2FkX3VybCA9CgkJCQkkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZ2V0ZmlsZScsICRyZXR1cm5pZCwgJycsIGFycmF5ICgndXBsb2FkX2lkJyA9PiAkcm93Wyd1cGxvYWRfaWQnXSksICcnLCB0cnVlLCB0cnVlLCAnJywgZmFsc2UsCgkJCQkJCQkJCQkJCQkgJHRoaXMtPl9nZXRGaWxlVVJMKCRyb3dbJ3VwbG9hZF9pZCddLCRyb3dbJ3VwbG9hZF9uYW1lJ10pKTsKCQkJJG9uZXJvdy0+bmFtZWxpbmsgPQoJCQkJJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2dldGZpbGUnLCAkcmV0dXJuaWQsICRyb3dbJ3VwbG9hZF9uYW1lJ10sCgkJCQkJCQkJCQkJCQkgYXJyYXkgKCd1cGxvYWRfaWQnID0+ICRyb3dbJ3VwbG9hZF9pZCddKSwgJycsIGZhbHNlLCB0cnVlLCAnJywgZmFsc2UsCgkJCQkJCQkJCQkJCQkgJHRoaXMtPl9nZXRGaWxlVVJMKCRyb3dbJ3VwbG9hZF9pZCddLCRyb3dbJ3VwbG9hZF9uYW1lJ10pKTsKCQkJaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kZWxldGUnLDApID09IDEgJiYgJHJvd1sndXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZSddID09IDEpIHsKCQkJCSRvbmVyb3ctPmRlbGV0ZV91cmwgPQkkdGhpcy0+Q3JlYXRlTGluayggJGlkLCAnZGVsZXRlX2ZpbGUnLCAkcmV0dXJuaWQsICcnLCBhcnJheSgndXBsb2FkX2lkJyA9PiAkcm93Wyd1cGxvYWRfaWQnXSksICcnLCB0cnVlICk7CgkJCX0KCgkJCWlmKCBpc3NldCggJHJvd1sndXBsb2FkX3N1bW1hcnknXSApICYmICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10gIT0gIiIgKSB7CgkJCQkkb25lcm93LT5zdW1tYXJ5bGluayA9CgkJCQkJJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2dldGZpbGUnLCAkcmV0dXJuaWQsICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10sCgkJCQkJCQkJCQkJCQkJIGFycmF5ICgndXBsb2FkX2lkJyA9PiAkcm93Wyd1cGxvYWRfaWQnXSksICcnLCBmYWxzZSwgdHJ1ZSwgJycsIGZhbHNlLAoJCQkJCQkJCQkJCQkJCSAkdGhpcy0+X2dldEZpbGVVUkwoJHJvd1sndXBsb2FkX2lkJ10sJHJvd1sndXBsb2FkX25hbWUnXSkpOzsKCQkJfQoKCQkJLy8gb3JpZ2luYWwgZmlsZSBVUkwKCQkJJG9uZXJvdy0+b3JpZ2ZpbGVfdXJsID0gJGNvbmZpZ1sndXBsb2Fkc191cmwnXS4iLyRjYXRwYXRoLyIuJHJvd1sndXBsb2FkX25hbWUnXTsKCgkJCS8vIGdldCB0aGUgZmlsZXMgZXh0ZW5zaW9uCgkJCS8vIHNlZSBpZiB3ZSdyZSBhbGxvd2VkIHRvIGRpc3BsYXkgaXQgYXMgYW4gaW1hZ2UKCQkJLy8gaWYgd2UgYXJlIHRoZW4gY3JlYXRlIHRoZSBpbWFnZV91cmwKCQkJJGZpbGVleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJHJvd1sndXBsb2FkX25hbWUnXSwnLicpKTsKCQkJJHRodW1iX2V4dF9hcnIgPSBleHBsb2RlKCIsIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJykpOwoKCQkJZm9yZWFjaCggJHRodW1iX2V4dF9hcnIgYXMgJHRodW1iX2V4dCApIHsKCQkJCWlmKCAiLiIuJHRodW1iX2V4dCA9PSAkZmlsZWV4dGVuc2lvbiApIHsKCQkJCQkkb25lcm93LT5pbWFnZV91cmwgPSAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZ2V0aW1hZ2UnLCAkcmV0dXJuaWQsICcnLCBhcnJheSAoJ3Nob3d0ZW1wbGF0ZSc9PidmYWxzZScsJ3VwbG9hZF9pZCc9PiRyb3dbJ3VwbG9hZF9pZCddKSwnJywgdHJ1ZSApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgoJCQlpZiggJGZpbGV0eXBlcyAhPSAnJyApIHsKCQkJCSRyZXMgPSBhcnJheV9zZWFyY2goICRmaWxldHlwZVsnbmFtZSddLCBleHBsb2RlKCcsJywkZmlsZXR5cGVzICkgKTsKCQkJCWlmKCAkcmVzID09PSBOVUxMIHx8ICRyZXMgPT09IEZBTFNFICkgY29udGludWU7CS8vIHdlIGhhdmUgZm91bmQgYSBmaWxlIHRoYXQgaXNuJ3QgYSB0eXBlIHdlIHJlcXVlc3RlZC4KCQkJfQoJCX0gLy8gdmlld2FibGUKCgkJLy8gZ2V0IGV4dHJhIGZpZWxkcy4KCQlpZiggaXNzZXQoJGZpZWxkdmFsc1skcm93Wyd1cGxvYWRfaWQnXV0pICkgJG9uZXJvdy0+ZmllbGRzID0gJGZpZWxkdmFsc1skcm93Wyd1cGxvYWRfaWQnXV07CgoJCSRyb3dhcnJheVtdID0gJG9uZXJvdzsKCX0KCgkkdHBsLT5hc3NpZ24gKCdpdGVtcycsICRyb3dhcnJheSk7CgkkdHBsLT5hc3NpZ24gKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKfQoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmlmKCRwYXJhbXNbJ21vZGUnXSAhPSAnc2VsZWN0JykgJHRwbC0+ZGlzcGxheSgpOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.defaultadmin.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwoKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIFVwbG9hZHMnKSkgewogIC8vIGdldCB0aGUgY3VycmVudCBjYXRlZ29yeSBmb3IgdGhlIGZpbHRlcgogICRjdXJjYXRlZ29yeSA9IChpc3NldCAoJHBhcmFtc1snY3VyY2F0ZWdvcnknXSkgPyAkcGFyYW1zWydjdXJjYXRlZ29yeSddIDogJycpOwogIGlmIChpc3NldCAoJHBhcmFtc1snc3VibWl0Y2F0ZWdvcnknXSkpIHsKICAgICRjdXJjYXRlZ29yeSA9IChpc3NldCAoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnknXSkgPyAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeSddIDogJycpOwogIH0KCiAgLy8gYXJlIHdlIHVwbG9hZGluZyBhIGZpbGUKICBpZiAoaXNzZXQoICRwYXJhbXNbJ3N1Ym1pdHVwbG9hZCddICkgKSB7CiAgICAkcGFyYW1zWydjYXRlZ29yeV9pZCddID0gJGN1cmNhdGVnb3J5OwoKICAgICRyZXQgPSAkdGhpcy0+QXR0ZW1wdFVwbG9hZCggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKICAgIGlmKCAkcmV0WzBdID09IGZhbHNlICkgewogICAgICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkcmV0WzFdICk7CiAgICAgIHJldHVybjsKICAgIH0KICB9Cn0KCi8vIHRvcCBuYXYKaWYoICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01vZGlmeSBUZW1wbGF0ZXMnKSApIHsKICBlY2hvICc8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsgd2lkdGg6IDgwJTsiPic7CiAgZWNobyAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fdGVtcGxhdGVzJywkcmV0dXJuaWQsJHRoaXMtPkxhbmcoJ2xibF90ZW1wbGF0ZXMnKSwKCQkJICAgICAgJ2ljb25zL3RvcGZpbGVzL3RlbXBsYXRlLmdpZicsYXJyYXkoKSwnJywnJyxmYWxzZSk7CiAgZWNobyAnPC9kaXY+PGJyLz4nOwp9CgovL1RoZSB0YWJzCmVjaG8gJHRoaXMtPlN0YXJ0VGFiSGVhZGVycyAoKTsKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykpIHsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdmaWxlcycsICR0aGlzLT5MYW5nICgnZmlsZXMnKSk7Cn0KaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyICgnY2F0ZWdvcmllcycsICR0aGlzLT5MYW5nICgnY2F0ZWdvcmllcycpKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQ3JlYXRlIFVwbG9hZHMgUmVwb3J0cycpICYmIGlzX29iamVjdCgkZmV1KSApIHsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIoJ3JlcG9ydHMnLCR0aGlzLT5MYW5nKCdyZXBvcnRzJykpOwp9CmlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgewogIGVjaG8gJHRoaXMtPlNldFRhYkhlYWRlciAoJ2ZpZWxkcycsICR0aGlzLT5MYW5nICgnZmllbGRfZGVmaW5pdGlvbnMnKSk7Cn0KaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSB7CiAgZWNobyAkdGhpcy0+U2V0VGFiSGVhZGVyKCAnZmlsZV90eXBlcycsICR0aGlzLT5MYW5nKCAnZmlsZV90eXBlcycpKTsKfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHsKICBlY2hvICR0aGlzLT5TZXRUYWJIZWFkZXIgKCdhZG1pbl9wcmVmcycsICR0aGlzLT5MYW5nICgncHJlZmVyZW5jZXMnKSk7Cn0KZWNobyAkdGhpcy0+RW5kVGFiSGVhZGVycyAoKTsKCi8vVGhlIGNvbnRlbnQgb2YgdGhlIHRhYnMKZWNobyAkdGhpcy0+U3RhcnRUYWJDb250ZW50ICgpOwoKaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykpIHsKICAvLyB0aGUgZmlsZXMgdGFiCiAgZWNobyAkdGhpcy0+U3RhcnRUYWIgKCJmaWxlcyIpOwogIGluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX2ZpbGVzdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYiAoKTsKfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoJ01hbmFnZSBVcGxvYWRzJykpIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYiAoImNhdGVnb3JpZXMiKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9jYXRlZ29yaWVzdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYiAoKTsKfQppZiggJHRoaXMtPkNoZWNrUGVybWlzc2lvbignQ3JlYXRlIFVwbG9hZHMgUmVwb3J0cycpICYmIGlzX29iamVjdCgkZmV1KSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYiAoInJlcG9ydHMiKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9yZXBvcnRzdGFiLnBocCcpOwogIGVjaG8gJHRoaXMtPkVuZFRhYiAoKTsKfQppZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSApIHsKICBlY2hvICR0aGlzLT5TdGFydFRhYiAoImZpZWxkcyIpOwogIGluY2x1ZGUoX19ESVJfXy4nL2Z1bmN0aW9uLmFkbWluX2ZpZWxkZGVmc3RhYi5waHAnKTsKICBlY2hvICR0aGlzLT5FbmRUYWIgKCk7Cn0KaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSB7CiAgZWNobyAkdGhpcy0+U3RhcnRUYWIoJ2ZpbGVfdHlwZXMnKTsKICBpbmNsdWRlKF9fRElSX18uJy9mdW5jdGlvbi5hZG1pbl9maWxldHlwZXN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiKCk7Cn0KCmlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpICkgewogIGVjaG8gJHRoaXMtPlN0YXJ0VGFiKCAnYWRtaW5fcHJlZnMnICk7CiAgaW5jbHVkZShfX0RJUl9fLicvZnVuY3Rpb24uYWRtaW5fcHJlZnN0YWIucGhwJyk7CiAgZWNobyAkdGhpcy0+RW5kVGFiICgpOwp9CgovLyBkb25lIHRhYnMKZWNobyAkdGhpcy0+RW5kVGFiQ29udGVudCAoKTsKcmV0dXJuOwoKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.deletecategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpICkgZXhpdDsKaWYoICFpc3NldCggJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSApICkgcmV0dXJuOwoKLy8gdGVzdCB0byBzZWUgaWYgdGhlcmUgYXJlIHN0aWxsIGZpbGVzIGxlZnQgaW4gdGhpcyBjYXRlZ29yeSwgaWYgdGhlcmUgYXJlLCB0aGVuIHB1a2UKLy8gb3RoZXJ3aXNlIGRlbGV0ZSB0aGUgZGlyZWN0b3J5IHRvbyAobWF5YmUpCiR0bXAgPSAkdGhpcy0+Z2V0X2NhdGVnb3J5X2ZpbGVfbGlzdCgkcGFyYW1zWydjYXRlZ29yeV9pZCddKTsKaWYoIGlzX2FycmF5KCR0bXApICYmIGNvdW50KCR0bXApICkgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcgKCdlcnJvcl9jYXRlZ29yeW5vdGVtcHR5JykpOwoJcmV0dXJuOwp9CgovLyBkaXNwbGF5IHNvbWV0aGluZyB0byBhbGxvdyB0aGUgdXNlciB0byBkZWxldGUgdGhlIGNhdGVnb3J5Li4uLiB3aWxsIChvcHRpb25hbGx5KSBkZWxldGUKLy8gYWxsIG9mIHRoZSAobWFuYWdlZCkgZmlsZXMgaW4gdGhlIGRpcmVjdG9yeSB0b28uCiR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3dhcm5pbmdfZGVsZXRlY2F0ZWdvcnknLCAkdGhpcy0+TGFuZygnd2FybmluZ19kZWxldGVjYXRlZ29yeScpICk7CiR0aGlzLT5zbWFydHktPmFzc2lnbiggJ3N0YXJ0Zm9ybScgLCAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0KCAkaWQsICdkb19kZWxldGVjYXRlZ29yeScsICRyZXR1cm5pZCkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oICdoaWRkZW4nLCAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4oICRpZCwgJ2NhdGVnb3J5X2lkJywgJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oICdwcm9tcHRfZGVsZXRlZGlyZWN0b3J5JywgJHRoaXMtPkxhbmcoJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknKSApOwokdGhpcy0+c21hcnR5LT5hc3NpZ24oICdpbnB1dF9kZWxldGVkaXJlY3RvcnknLCAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCggJGlkLCAnaW5wdXRfZGVsZXRlZGlyZWN0b3J5JywgMSwgMCApKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JykpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlKCdkZWxldGVjYXRlZ29yeS50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.deletetype.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBVcGxvYWRzJykgKSByZXR1cm47CgppZiggIWlzc2V0KCAkcGFyYW1zWyd0eXBlaWQnXSApICkgJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdwYXJhbXMnKSk7CgokdHlwZWlkID0gdHJpbSgkcGFyYW1zWyd0eXBlaWQnXSk7CiRkYi0+RXhlY3V0ZSggIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWxldHlwZXMgV0hFUkUgaWQgPSA/IiwgYXJyYXkoICRwYXJhbXNbJ3R5cGVpZCddICkgKTsKJHRoaXMtPlJlZGlyZWN0KCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsJHBhcmFtcyk7CgovLyBFT0YKPz4=]]></data>
	</file>
	<file>
	  <filename>/action.delete_file.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKdHJ5IHsKCWlmKCAhaXNzZXQoJHBhcmFtc1sndXBsb2FkX2lkJ10pICkgcmV0dXJuOwoJJHVwbG9hZF9pZCA9IChpbnQpJHBhcmFtc1sndXBsb2FkX2lkJ107CgoJJGRldGFpbHMgPSB1cGxvYWRzX3V0aWxzOjpnZXRfdXBsb2FkX2RldGFpbHMoJHVwbG9hZF9pZCk7CgkkY2F0ZWdvcnkgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJGRldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKTsKCSRkZWxldGFibGUgPSAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9kZWxldGFibGUnXTsKCi8vIDIuICBjaGVjayBpZiB3ZSBjYW4gZGVsZXRlCglpZiggISR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kZWxldGUnLDApID09IDEgfHwgISRkZWxldGFibGUgKSB7CgkJdGhyb3cgbmV3IEV4Y2VwdGlvbignQXR0ZW1wdCB0byBkZWxldGUgYSBmaWxlIGFnYWluc3QgcGVybWlzc2lvbnMnKTsKCX0KCgkkdGhpcy0+X0FkbWluRG9EZWxldGVVcGxvYWQoICR1cGxvYWRfaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgMCApOwoJJHRoaXMtPlJlZGlyZWN0Q29udGVudCgkcmV0dXJuaWQpOwp9CmNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CgkvLyB0b2RvOiBhdWRpdCBzb21ldGhpbmcuCgkkdGhpcy0+UmVkaXJlY3RDb250ZW50KCRyZXR1cm5pZCk7Cn0KCi8vCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.detail.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwokY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwokZGIgPSBjbXNtcygpLT5HZXREYigpOwoKLy8gY2hlY2sgaW5wdXQgZGF0YQppZiggIWlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSApIHsKCXRocm93IG5ldyBDbXNFcnJvcjQwNEV4Y2VwdGlvbignVXBsb2FkIGlkIG5vdCBzcGVjaWZpZWQnKTsKCXJldHVybjsKfQoKLy8gZ2V0IHRoZSB0ZW1wbGF0ZQokdGVtcGxhdGUgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9kZXRhaWxycHQnKTsKJHRlbXBsYXRlID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCdkZXRhaWx0ZW1wbGF0ZScsJHRlbXBsYXRlKTsKJHRlbXBsYXRlID0gXGNnZV9wYXJhbTo6Z2V0X3N0cmluZygkcGFyYW1zLCd0ZW1wbGF0ZScsJHRlbXBsYXRlKTsKCi8vIGhhbmRsZSB0aGUgc2VuZGZpbGVwYWdlIHBhcmFtZXRlcgokc2VuZGZpbGVwYWdlID0gJHJldHVybmlkOwppZiggaXNzZXQoJHBhcmFtc1snc2VuZGZpbGVwYWdlJ10pICkgewoJJG1hbmFnZXIgPSAkZ0Ntcy0+R2V0SGllcmFyY2h5TWFuYWdlcigpOwoJJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUFsaWFzKCRwYXJhbXNbJ3NlbmRmaWxlcGFnZSddKTsKCWlmIChpc3NldCgkbm9kZSkpIHsKCQkkY29udGVudCA9ICRub2RlLT5HZXRDb250ZW50KCk7CgkJaWYgKGlzc2V0KCRjb250ZW50KSkgJHNlbmRmaWxlcGFnZSA9ICRjb250ZW50LT5JZCgpOwoJfQoJZWxzZSB7CgkJJG5vZGUgPSAkbWFuYWdlci0+c3VyZUdldE5vZGVCeUlkKCRwYXJhbXNbJ3NlbmRmaWxlcGFnZSddKTsKCQlpZiAoaXNzZXQoJG5vZGUpKSAkc2VuZGZpbGVwYWdlID0gJHBhcmFtc1snc2VuZGZpbGVwYWdlJ107Cgl9Cn0KaWYoIGVtcHR5KCRzZW5kZmlsZXBhZ2UpICkgewoJJHNlbmRmaWxlcGFnZSA9ICRyZXR1cm5pZDsKCSR0bXAgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9zZW5kZmlsZXBhZ2UnLC0xKTsKCWlmKCAkdG1wID4gMCApICRzZW5kZmlsZXBhZ2UgPSAkdG1wOwp9CgovLwovLyBHZXQgdGhlIGRhdGEKLy8KJGltZ3BhdGggPSAnbW9kdWxlcy8nLmJhc2VuYW1lKGRpcm5hbWUoX19GSUxFX18pKS4nL2ltYWdlcy8nOwokcXVlcnkgPSAnU0VMRUNUIFUuKixDT1VOVChELmRvd25sb2FkX2lkKSBBUyBudW1fZG93bmxvYWRzIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFUKICAgICAgICAgIExFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZG93bmxvYWRzIEQgT04gVS51cGxvYWRfaWQgPSBELmZpbGVfaWQKICAgICAgICAgIFdIRVJFIFUudXBsb2FkX2lkID0gPyc7CiRkYXRhID0gJGRiLT5HZXRSb3coJHF1ZXJ5LGFycmF5KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSk7CiRjYXRlZ29yeSA9ICcnOwppZiggISRkYXRhICkgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZyAoJ2Vycm9yX25vc3VjaHJvdycpKTsKCXJldHVybjsKfQoKJGNhdGVnb3J5ID0gJHRoaXMtPl9nZXRVcGxvYWRDYXRlZ29yeURldGFpbHMoICRkYXRhWyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSApOwppZiggISR0aGlzLT5fQ2hlY2tEb3dubG9hZFNlY3VyaXR5KCRjYXRlZ29yeSkgKSB7CiAgYXVkaXQoJGRhdGFbJ3VwbG9hZF9pZCddLCR0aGlzLT5HZXROYW1lKCksJ0F0dGVtcHQgdG8gYWNjZXNzIGZpbGUgJy4kZmlsZS4nICB3aXRob3V0IHByb3BlciBwZXJtaXNzaW9ucycpOwoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlKCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnKSApOwogIHJldHVybjsKfQokY2FuX2Rvd25sb2FkID0gJHRoaXMtPl9DaGVja0ZpbGVEb3dubG9hZFNlY3VyaXR5KCRkYXRhKTsKCiRyb3cgPSBuZXcgU3RkQ2xhc3MoKTsKZm9yZWFjaCggJGRhdGEgYXMgJGtleSA9PiAkdmFsdWUgKSB7CglpZiggc3RhcnRzd2l0aCgka2V5LCd1cGxvYWRfJykgKSAka2V5ID0gc3Vic3RyKCRrZXksNyk7CglpZiggIWVtcHR5KCR2YWx1ZSkgKSAkcm93LT4ka2V5ID0gJHZhbHVlOwp9CiRyb3ctPmNhdGVnb3J5ID0gJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddOwokcm93LT5maWxldHlwZSA9ICR0aGlzLT5fR2V0RmlsZXR5cGUoICRkYXRhWyd1cGxvYWRfbmFtZSddICk7CiRyb3ctPmljb251cmwgPSAkaW1ncGF0aC4ndW5rbm93bi5wbmcnOwppZiggJHJvdy0+ZmlsZXR5cGUgIT09IGZhbHNlICkgJHJvdy0+aWNvbnVybCA9ICRpbWdwYXRoLiRyb3ctPmZpbGV0eXBlWydpbWFnZSddOwoKLy8gY2Fub25pY2FsIHVybC4KJHByZXR0eXVybCA9ICJ1cGxvYWRzL2ZpbGUvJHJldHVybmlkLyIuJGRhdGFbJ3VwbG9hZF9pZCddLicvJy51cmxlbmNvZGUoJGRhdGFbJ3VwbG9hZF9uYW1lJ10pOwokcm93LT5jYW5vbmljYWwgPSAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2RldGFpbCcsJycsCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQlhcnJheSgndXBsb2FkX2lkJz0+JHBhcmFtc1sndXBsb2FkX2lkJ10pLCAnJywgdHJ1ZSwgdHJ1ZSwgJycsIGZhbHNlLCAkcHJldHR5dXJsKTsKCiRyb3ctPnZpZXdhYmxlID0gJGNhbl9kb3dubG9hZDsKaWYoICRjYW5fZG93bmxvYWQgKSB7CglpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FsbG93X2RlbGV0ZScsMCkgPT0gMSAmJiAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9kZWxldGFibGUnXSA9PSAxKSB7CgkJJHJvdy0+ZGVsZXRlX3VybCA9ICR0aGlzLT5DcmVhdGVMaW5rKCAkaWQsICdkZWxldGVfZmlsZScsICRyZXR1cm5pZCwgJycsIGFycmF5KCd1cGxvYWRfaWQnID0+ICRyb3ctPmlkKSwgJycsIHRydWUgKTsKCX0KCSRyb3ctPnNlbmRmaWxlX3VybCA9ICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdzZW5kZmlsZScsICRzZW5kZmlsZXBhZ2UsICcnLCBhcnJheSgndXBsb2FkX2lkJz0+JHJvdy0+aWQpLCAnJywgdHJ1ZSwgdHJ1ZSwgJycsIGZhbHNlKTsKCSRyb3ctPmRvd25sb2FkX3VybCA9CgkJJHRoaXMtPkNyZWF0ZUZyb250ZW5kTGluaygkaWQsJHJldHVybmlkLCdnZXRmaWxlJywnJywKCQkJCQkJCQkJCQkJCQkJYXJyYXkoJ3VwbG9hZF9pZCc9PiRwYXJhbXNbJ3VwbG9hZF9pZCddKSwnJywgdHJ1ZSwgdHJ1ZSwgJycsIGZhbHNlLAoJCQkJCQkJCQkJCQkJCQkkdGhpcy0+X2dldEZpbGVVUkwoJGRhdGFbJ3VwbG9hZF9pZCddLCRkYXRhWyd1cGxvYWRfbmFtZSddKSk7Cgkkcm93LT5vcmlnZmlsZV91cmwgPSAkY29uZmlnWyd1cGxvYWRzX3VybCddLicvJy4kY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10uJy8nLiRkYXRhWyd1cGxvYWRfbmFtZSddOwoKCWlmKCAhZW1wdHkoJGRhdGFbJ3VwbG9hZF90aHVtYm5haWwnXSkgKSB7CgkJJHRuZmlsZSA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10uJy8nLiRkYXRhWyd1cGxvYWRfdGh1bWJuYWlsJ10pOwoJCWlmKCBAZmlsZV9leGlzdHMoJHRuZmlsZSkgKSB7CgkJCSR0bnVybCA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uJy8nLiRjYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXS4nLycuJGRhdGFbJ3VwbG9hZF90aHVtYm5haWwnXTsKCQkJJHJvdy0+dGh1bWJuYWlsX3VybCA9ICR0bnVybDsKCQl9Cgl9Cn0KCgovLyBnZXQgZXh0cmEgZmllbGRzLgp7CgkkcXVlcnkgPSAnU0VMRUNUIEEuaWQsQS5uYW1lLEEudHlwZSxCLnVwbG9hZF9pZCxCLnZhbHVlIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBBCiAgICAgICAgICAgICAgTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgQiBPTiBBLmlkID0gQi5mbGRfaWQKICAgICAgICAgICAgIFdIRVJFIEIudXBsb2FkX2lkID0gPyBBTkQgQS5wdWJsaWMgPSAxCiAgICAgICAgICAgICBPUkRFUiBCWSBBLmlvcmRlciBBU0MnOwoJJHRtcCA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LGFycmF5KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSk7CglpZiggJHRtcCApICRyb3ctPmZpZWxkcyA9IGNnZV9hcnJheTo6dG9faGFzaCgkdG1wLCduYW1lJyk7Cn0KCiR0cGwgPSAkdGhpcy0+Q3JlYXRlU21hcnR5VGVtcGxhdGUoJHRlbXBsYXRlLCdkZXRhaWxycHRfJyk7CgppZiggIWlzc2V0KCRwYXJhbXNbJ21vZGUnXSkgKSAkcGFyYW1zWydtb2RlJ10gPSAnbm9ybWFsJzsKc3dpdGNoKCRwYXJhbXNbJ21vZGUnXSkgewogY2FzZSAnbGluayc6CgkgZWNobyAkdGhpcy0+Q3JlYXRlRnJvbnRlbmRMaW5rKCRpZCwkcmV0dXJuaWQsJ2dldGZpbGUnLAoJCQkJCQkJCQkJCQkJCQkJCSRyb3ctPm5hbWUsIAlhcnJheSgndXBsb2FkX2lkJz0+JHBhcmFtc1sndXBsb2FkX2lkJ10pLAknJywgZmFsc2UsIHRydWUsICcnLCBmYWxzZSwKCQkJCQkJCQkJCQkJCQkJCQkkdGhpcy0+X2dldEZpbGVVUkwoJHJvdy0+aWQsJHJvdy0+bmFtZSkpOwoJIHJldHVybjsKCiBjYXNlICd1cmwnOgoJIGVjaG8gJHJvdy0+ZG93bmxvYWRfdXJsOwoJIHJldHVybjsKCiBkZWZhdWx0OgoJICRpdGVtcyA9IGFycmF5KCk7CgkgJGl0ZW1zW10gPSAkcm93OwoJICR0cGwtPmFzc2lnbignaXRlbXMnLCRpdGVtcyk7IC8vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5LgoJICR0cGwtPmFzc2lnbignZW50cnknLCRyb3cpOwp9CgoKLy8KLy8gR2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQovLwokdHBsLT5hc3NpZ24oJ2NhdGVnb3J5JywkdGhpcy0+TGFuZygnY2F0ZWdvcnknKSk7CiR0cGwtPmFzc2lnbignaWQnLCR0aGlzLT5MYW5nKCdpZCcpKTsKJHRwbC0+YXNzaWduKCduYW1lJywkdGhpcy0+TGFuZygnbmFtZScpKTsKJHRwbC0+YXNzaWduKCdhcmV5b3VzdXJlJywkdGhpcy0+TGFuZygnYXJleW91c3VyZScpKTsKJHRwbC0+YXNzaWduKCdkZWxldGUnLCR0aGlzLT5MYW5nKCdkZWxldGUnKSk7CiR0cGwtPmFzc2lnbignZGF0ZScsJHRoaXMtPkxhbmcoJ2RhdGUnKSk7CiR0cGwtPmFzc2lnbignYXV0aG9yJywkdGhpcy0+TGFuZygnYXV0aG9yJykpOwokdHBsLT5hc3NpZ24oJ3NpemUnLCR0aGlzLT5MYW5nKCdzaXplJykpOwokdHBsLT5hc3NpZ24oJ2RldGFpbHMnLCR0aGlzLT5MYW5nKCdkZXRhaWxzJykpOwokdHBsLT5hc3NpZ24oJ3N1bW1hcnknLCR0aGlzLT5MYW5nKCdzdW1tYXJ5JykpOwokdHBsLT5hc3NpZ24oJ2Rlc2NyaXB0aW9uJywkdGhpcy0+TGFuZygnZGVzY3JpcHRpb24nKSk7CiR0cGwtPmFzc2lnbigndGh1bWJuYWlsJywkdGhpcy0+TGFuZygndGh1bWJuYWlsJykpOwokdHBsLT5hc3NpZ24oJ2ljb24nLCR0aGlzLT5MYW5nKCdpY29uJykpOwokdHBsLT5hc3NpZ24oJ2ltYWdlJywkdGhpcy0+TGFuZygnaW1hZ2UnKSk7CgovLwovLyBQcm9jZXNzIFRoZSB0ZW1wbGF0ZQovLwppZiggIWlzc2V0KCRwYXJhbXNbJ25vb3V0cHV0J10pICkgJHRwbC0+ZGlzcGxheSgpOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_addcategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYgKCEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTWFuYWdlIFVwbG9hZHMnKSkgcmV0dXJuOwoKLy8gYXJlIHdlIGNhbmNlbGxpbmcKaWYgKGlzc2V0ICgkcGFyYW1zWydjYW5jZWwnXSkpICR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCwnY2F0ZWdvcmllcycpOwoKJGVycm9yID0gZmFsc2U7CgovLyBtYWtlIHN1cmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gd29yayB3aXRoCmlmICghaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bmFtZSddKSB8fCAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSA9PSAiIikgewogICAgJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9lbXB0eWNhdGVnb3J5JykpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkY2F0ZWdvcnknLCRyZXR1cm5pZCk7Cn0KZWxzZSBpZiAoIWlzc2V0ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeXBhdGgnXSkgfHwgdHJpbSgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeXBhdGgnXSkgPT0gIiIpIHsKICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfZW1wdHlwYXRoJykpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwnYWRkY2F0ZWdvcnknLCRyZXR1cm5pZCk7Cn0KZWxzZSB7CiAgLy8gY2hlY2sgaWYgdGhlIGNhdGVnb3J5IGRvZXNuJ3QgYWxyZWFkeSBleGlzdAogICRxdWVyeSA9ICJTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIGZyb20gIi5jbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9uYW1lID0gPyI7CiAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlICgkcXVlcnksIGFycmF5ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSkpOwoKICAvLyB5ZXAgaXQgZG9lcwogIGlmICgkZGJyZXN1bHQtPkZldGNoUm93ICgpKSB7CiAgICAgICR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfY2F0ZWdvcnlleGlzdHMnKSk7CiAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGNhdGVnb3J5JywkcmV0dXJuaWQpOwogIH0KICBlbHNlIHsKICAgICAgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnluYW1lJ10gPSB0cmltKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnluYW1lJ10pKTsKICAgICAgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10gPSB0cmltKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10pKTsKICAgICAgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlkZXNjJ10gPSB0cmltKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlkZXNjJ10pKTsKICAgICAgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10gPSB0cmltKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5cGF0aCddLCcvJyk7CiAgICAgIC8vIGNoZWNrIGlmIHRoZSBkaXJlY3RvcnkgaXMgYWxyZWFkeSBpbiB1c2UKICAgICAgJHF1ZXJ5ID0gIlNFTEVDVCB1cGxvYWRfY2F0ZWdvcnlfaWQgZnJvbSAiLmNtc19kYl9wcmVmaXggKCkuCiAgICAgICAgICAibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBXSEVSRSB1cGxvYWRfY2F0ZWdvcnlfcGF0aCA9ID8iOwogICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUgKCRxdWVyeSwgYXJyYXkgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5cGF0aCddKSk7CiAgICAgIGlmICgkZGJyZXN1bHQtPkZldGNoUm93ICgpKSB7CiAgICAgICAgICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX3BhdGhpbnVzZScpKTsKICAgICAgICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJ2FkZGNhdGVnb3J5JywkcmV0dXJuaWQpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgICAgLy8gQ3JlYXRlIHRoZSBkaXJlY3RvcnkgaWYgaXQgZG9lc24ndCBleGlzdAogICAgICAgICAgJGRvX3NjYW4gPSBmYWxzZTsKICAgICAgICAgICRkaXIgPSAkdGhpcy0+X2NhdGVnb3J5UGF0aCgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeXBhdGgnXSk7CgogICAgICAgICAgaWYoIGZpbGVfZXhpc3RzKCAkZGlyICkgKSB7CiAgICAgICAgICAgICAgJGRvX3NjYW4gPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgLy8gY3JlYXRlIHRoZSBkaXJlY3RvcnkKICAgICAgICAgICAgICAkcmVzdWx0ID0gY2dlX2Rpcjo6bWtkaXJyKCRkaXIpOwogICAgICAgICAgICAgIGlmICgkcmVzdWx0ID09PSBGQUxTRSkgewogICAgICAgICAgICAgICAgICAkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX2NhdGVnb3J5ZXhpc3RzJykpOwogICAgICAgICAgICAgICAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdhZGRjYXRlZ29yeScsJHJldHVybmlkKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgLy8gY3JlYXRlIGFuIGluZGV4Lmh0bWwgZmlsZSAoZW1wdHkpCiAgICAgICAgICAgICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfZHVtbXlfaW5kZXhfaHRtbCcpICkgewogICAgICAgICAgICAgICAgICB0b3VjaCggJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiJpbmRleC5odG1sIiApOwogICAgICAgICAgICAgIH0KICAgICAgICAgIH0KCiAgICAgICAgICAkZ3JvdXBzID0gbnVsbDsKICAgICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9ncm91cGxpc3QnXSkgKSAkZ3JvdXBzID0gaW1wbG9kZSgnLCcsJHBhcmFtc1snaW5wdXRfZ3JvdXBsaXN0J10pOwogICAgICAgICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSkgKSB7CiAgICAgICAgICAgICAgaWYoIGlzX2FycmF5KCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSkgKSB7CiAgICAgICAgICAgICAgICAgICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSA9IGltcGxvZGUoJywnLCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddID0gJyc7CiAgICAgICAgICB9CiAgICAgICAgICAkdXNlcnBlcm1zID0gMDsKICAgICAgICAgIGlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV91c2VycGVybXMnXSkgKSAkdXNlcnBlcm1zID0gKGludCkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV91c2VycGVybXMnXTsKICAgICAgICAgIC8vIEFkZCB0aGUgcmVjb3JkIHRvIHRoZSBjYXRlZ29yeSB0YWJsZQogICAgICAgICAgJGNhdGlkID0gJGRiLT5HZW5JRCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllc19zZXEiKTsKICAgICAgICAgICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gPSAkY2F0aWQ7CiAgICAgICAgICAkcXVlcnkgPSAiSU5TRVJUIElOVE8gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMKICAgICAgICAgICAgICAgICAgKHVwbG9hZF9jYXRlZ29yeV9pZCwgdXBsb2FkX2NhdGVnb3J5X25hbWUsIHVwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbiwKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9wYXRoLCB1cGxvYWRfY2F0ZWdvcnlfbGlzdGFibGUsIHVwbG9hZF9jYXRlZ29yeV9kZWxldGFibGUsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZXhwaXJlc19ocnMsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfc2Nhbm5hYmxlLAogICAgICAgICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2dyb3VwcywKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcykKICAgICAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8pIjsKICAgICAgICAgICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSAoJHF1ZXJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSAoJGNhdGlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHBhcmFtc1siaW5wdXRfY2F0ZWdvcnluYW1lIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWyJpbnB1dF9jYXRlZ29yeWRlc2MiXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJhbXNbImlucHV0X2NhdGVnb3J5cGF0aCJdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkkcGFyYW1zWyJpbnB1dF9jYXRlZ29yeWxpc3RhYmxlIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSRwYXJhbXNbImlucHV0X2NhdGVnb3J5ZGVsZXRhYmxlIl0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X3NjYW5uYWJsZSddLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGdyb3VwcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR1c2VycGVybXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10pKTsKICAgICAgICAgIGlmICghJGRicmVzdWx0KSB7CiAgICAgICAgICAgICAgJHRoaXMtPlNldEVycm9yKCRkYi0+c3FsLicgJy4kZGItPkVycm9yTXNnKCkpOwogICAgICAgICAgICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiKCk7CiAgICAgICAgICB9CgoKICAgICAgICAgIGlmKCAkZG9fc2NhbiApIHsKICAgICAgICAgICAgICAvLyBjYXRlZ29yeSBpcyBhZGRlZCwgYW5kIHRoZSBkaXJlY3RvcnkgYWxyZWFkeSBleGlzdGVkLi4uIHNvIG5vdwogICAgICAgICAgICAgIC8vIHdlJ3JlIGdvbm5hIHNjYW4gdGhlIGRpcmVjdG9yeSBhbmQgYWRkIGZpbGVzIHRvIHRoZSBkYXRhYmFzZQogICAgICAgICAgICAgICR0aGlzLT5TY2FuRGlyZWN0b3J5KCAkY2F0aWQsICRkaXIsIFRSVUUsIFRSVUUgKTsKICAgICAgICAgIH0KCiAgICAgICAgICAvLyBzZW5kIGFuIGV2ZW50CiAgICAgICAgICAkcGFybXMgPSBhcnJheSgpOwogICAgICAgICAgJHBhcm1zWyduYW1lJ10gPSAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXTsKICAgICAgICAgICRwYXJtc1snZGVzY3JpcHRpb24nXSA9ICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5ZGVzYyddOwogICAgICAgICAgJHBhcm1zWydwYXRoJ10gPSAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeXBhdGgnXTsKICAgICAgICAgICRwYXJtc1snbGlzdGFibGUnXSA9ICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bGlzdGFibGUnXTsKICAgICAgICAgICRwYXJtc1snZGVsZXRhYmxlJ10gPSAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeWRlbGV0YWJsZSddOwogICAgICAgICAgJHBhcm1zWydleHBpcmVzX2hycyddID0gJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlfZXhwaXJlc19ocnMnXTsKICAgICAgICAgICR0aGlzLT5TZW5kRXZlbnQoICdPbkNyZWF0ZUNhdGVnb3J5JywgJHBhcm1zICk7CgogICAgICAgICAgJHRoaXMtPlNldE1lc3NhZ2UoJHRoaXMtPkxhbmcoJ21lc3NhZ2VfY2F0ZWdvcnlhZGRlZCcpKTsKICAgICAgICAgICR0aGlzLT5SZWRpcmVjdFRvVGFiICgkaWQsICdjYXRlZ29yaWVzJyk7CiAgICAgIH0KICB9Cn0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.do_addtemplate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkZ0NtcyApIGV4aXQoKTsKaWYoICEgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpICkgcmV0dXJuOwoKaWYoIGlzc2V0KCAkcGFyYW1zWydjYW5jZWwnXSApICkgewogICAgaWYoIGlzc2V0KCAkcGFyYW1zWydhY3RpdmVfdGFiJ10gKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gIT0gJycgKSAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICRwYXJhbXNbJ2FjdGl2ZV90YWInXSk7CiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsKfQoKCiR0ZW1wbGF0ZSA9ICIiOwppZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApICR0ZW1wbGF0ZSA9IHRyaW0oJHBhcmFtc1sndGVtcGxhdGUnXSk7CgokcHJlZml4ID0gIiI7CmlmKCBpc3NldCggJHBhcmFtc1sncHJlZml4J10gKSApICRwcmVmaXggPSB0cmltKCRwYXJhbXNbJ3ByZWZpeCddKTsKCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlY29udGVudCddICkgKSB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnLCd0ZW1wbGF0ZWNvbnRlbnQnKTsKICAgICR0aGlzLT5SZWRpcmVjdCgkaWQsJHBhcmFtc1snb3JpZ2FjdGlvbiddLCcnLCRwYXJhbXMpOwogICAgcmV0dXJuOwp9CgppZiggJHRlbXBsYXRlID09ICIiIHx8ICRwcmVmaXggPT0gIiIgKSB7CiAgICAkcGFyYW1zWydlcnJvcnMnXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnLCcodGVtcGxhdGUgb3IgcHJlZml4KScpOwogICAgJHRoaXMtPlJlZGlyZWN0KCRpZCwkcGFyYW1zWydvcmlnYWN0aW9uJ10sJycsJHBhcmFtcyk7CiAgICByZXR1cm47Cn0KCgokbmV3dGVtcGxhdGUgPSAkcHJlZml4IC4gJHRlbXBsYXRlOwoKLy8gY2hlY2sgaWYgdGhpcyB0ZW1wbGF0ZSBhbHJlYWR5IGV4aXN0cwokdHh0ID0gdHJpbSgkdGhpcy0+R2V0VGVtcGxhdGUoJG5ld3RlbXBsYXRlKSk7CmlmKCAkdHh0ICE9ICIiICkgewogICAgJHBhcmFtc1snZXJyb3JzJ10gPSAkdGhpcy0+TGFuZygnZXJyb3JfdGVtcGxhdGVuYW1lZXhpc3RzJyk7CiAgICAkdGhpcy0+UmVkaXJlY3QoJGlkLCRwYXJhbXNbJ29yaWdhY3Rpb24nXSwnJywkcGFyYW1zKTsKICAgIHJldHVybjsKfQoKLy8gd2UncmUgcmVhZHkgdG8gc2V0IGl0CiR0aGlzLT5TZXRUZW1wbGF0ZSgkbmV3dGVtcGxhdGUsJHBhcmFtc1sndGVtcGxhdGVjb250ZW50J10pOwoKaWYoIGlzc2V0KCAkcGFyYW1zWydhY3RpdmVfdGFiJ10gKSAmJiAkcGFyYW1zWydhY3RpdmVfdGFiJ10gIT0gJycgKSAkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICRwYXJhbXNbJ2FjdGl2ZV90YWInXSApOwokdGhpcy0+UmVkaXJlY3QoJGlkLCdkZWZhdWx0YWRtaW4nKTsKCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_editcategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSByZXR1cm47CgovLyBhcmUgd2UgY2FuY2VsbGluZwppZiAoaXNzZXQgKCRwYXJhbXNbJ2NhbmNlbCddKSkgJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCAnY2F0ZWdvcmllcycpOwoKLy8gbWFrZSBzdXJlIHdlIGhhdmUgc29tZXRoaW5nIHRvIHdvcmsgd2l0aAppZiAoIWlzc2V0ICgkcGFyYW1zWydjYXRlZ29yeV9pZCddKSB8fCAkcGFyYW1zWydjYXRlZ29yeV9pZCddID09ICIiKSB7CiAgICBlY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcl9ub2NhdGVnb3J5aWQnKSk7Cn0KZWxzZSBpZiAoIWlzc2V0ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSkgfHwgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnluYW1lJ10gPT0gIiIpIHsKICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknKSk7Cn0KZWxzZSBpZiAoIWlzc2V0ICgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeXBhdGgnXSkgfHwgJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10gPT0gIiIpIHsKICAgIGVjaG8gJHRoaXMtPlNob3dFcnJvcnMoJHRoaXMtPkxhbmcoJ2Vycm9yX2VtcHR5cGF0aCcpKTsKfQplbHNlIGlmIChpc3NldCggJHBhcmFtc1snc2NhbiddICkgKSB7Cgkkcm93ID0gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pOwoJQHNldF90aW1lX2xpbWl0KDApOwoJJGRpciA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfcGF0aCddICk7CgkkdGhpcy0+U2NhbkRpcmVjdG9yeSggJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSwgJGRpciwgVFJVRSwgVFJVRSApOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCAnZmlsZXMnLCBhcnJheSgnaW5wdXRfY2F0ZWdvcnknID0+ICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pICk7CglyZXR1cm47Cn0KZWxzZSB7CgkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSA9IHRyaW0oY21zX2h0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeW5hbWUnXSkpOwoJJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10gPSB0cmltKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlwYXRoJ10pKTsKCSRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5ZGVzYyddID0gdHJpbShjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5ZGVzYyddKSk7CgoJLy8gbm93IHByZXBhcmUgdG8gdXBkYXRlIHRoZSByZWNvcmQKCSRncm91cHMgPSBudWxsOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X2dyb3VwbGlzdCddKSAmJiBpc19hcnJheSggJHBhcmFtc1snaW5wdXRfZ3JvdXBsaXN0J10gKSApIHsKCQkkZ3JvdXBzID0gaW1wbG9kZSgnLCcsJHBhcmFtc1snaW5wdXRfZ3JvdXBsaXN0J10pOwoJfQoKCWlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10pICkgewoJCWlmKCBpc19hcnJheSgkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10pICkgewoJCQkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10gPSBpbXBsb2RlKCcsJywkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10pOwoJCX0KCX0KCWVsc2UgewoJCSRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSA9ICcnOwoJfQoKCSRxdWVyeSA9CgkJIlVQREFURSAiLmNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMKICAgICAgIFNFVCB1cGxvYWRfY2F0ZWdvcnlfbmFtZSA9ID8sIHVwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbiA9ID8sIHVwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSA9ID8sCiAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzID0gPywgdXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZSA9ID8sCiAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZXhwaXJlc19ocnMgPSA/LCB1cGxvYWRfY2F0ZWdvcnlfc2Nhbm5hYmxlID0gPywKICAgICAgIHVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgPSA/LCB1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyA9ID8KICAgICAgIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwoJJGRicmVzdWx0ID0KCQkkZGItPkV4ZWN1dGUgKCRxdWVyeSwKCQkJCQkJCQkJYXJyYXkgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5bmFtZSddLCAkcGFyYW1zWydpbnB1dF9jYXRlZ29yeWRlc2MnXSwgKGludCkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeWxpc3RhYmxlJ10sICRncm91cHMsIChpbnQpJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlkZWxldGFibGUnXSwKCQkJCQkJCQkJCQkJIChpbnQpJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnlfZXhwaXJlc19ocnMnXSwgKGludCkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV9zY2FubmFibGUnXSwgKGludCkkcGFyYW1zWydpbnB1dF9jYXRlZ29yeV91c2VycGVybXMnXSwKCQkJCQkJCQkJCQkJICRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSwgJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpOwoJaWYgKCEkZGJyZXN1bHQpIHsKCQllY2hvICR0aGlzLT5TaG93RXJyb3JzKCR0aGlzLT5MYW5nKCdlcnJvcicpLic6ICcuJGRiLT5FcnJvck1zZygpKTsKCX0KCWVsc2UgewoJCSR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCwnY2F0ZWdvcmllcycpOwoJCXJldHVybjsKCX0KfQoKJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoImFkZGNhdGVnb3J5LnRwbCIpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_editupload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVXBsb2FkcycpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVcGxvYWQgRmlsZXMgdG8gVXBsb2FkcycpKSByZXR1cm47CgovLyBtYWtlIHN1cmUgd2UgaGF2ZSBhbGwgdGhlIHBhcmFtZXRlcnMgd2UgbmVlZAppZiggIWlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSB8fCAhaXNzZXQoJHBhcmFtc1snaW5wdXRfdXBsb2FkZGVzYyddKSB8fCAhaXNzZXQoJHBhcmFtc1snaW5wdXRfbW92ZWNhdGVnb3J5J10pICkgewoJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycsJ3VwbG9hZF9pZD8/JykpOwoJcmV0dXJuOwp9CgovLyBub3cgc2VlIGlmIHdlIGNhbiBmaW5kIHRoZSBkZXRhaWxzIGFib3V0IHRoaXMgdXBsb2FkCiRyb3cgPSB1cGxvYWRzX3V0aWxzOjpnZXRfdXBsb2FkX2RldGFpbHMoJHBhcmFtc1sndXBsb2FkX2lkJ10pOwppZiggISRyb3cgKSB7CiAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwogIHJldHVybjsKfQoKJG5ld25hbWUgPSAkcm93Wyd1cGxvYWRfbmFtZSddOwokbmV3Y2F0ZWdvcnkgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKJG5ld2F1dGhvciA9ICRyb3dbJ3VwbG9hZF9hdXRob3InXTsKJG5ld2Rlc2MgPSAkcm93Wyd1cGxvYWRfZGVzY3JpcHRpb24nXTsKJG5ld3N1bW1hcnkgPSAkcm93Wyd1cGxvYWRfc3VtbWFyeSddOwokbmV3dGh1bWIgPSAkcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ107CgovLyBHZXQgdGhlIGNhdGVnb3J5IHBhdGggZnJvbSB0aGUgY2F0ZWdvcnkgaWQKJGNhdHBhdGggPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnlfcGF0aCgkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSk7CiRmcm9tZmlsZSA9IHVwbG9hZHNfdXRpbHM6OmdldF9maWxlc3BlYygkcm93Wyd1cGxvYWRfaWQnXSkKCmlmKCBpc3NldCgkcGFyYW1zWydjYW5jZWwnXSkgKSB7CgkvLyBvcGVyYXRpb24gY2FuY2VsbGVkCgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICdmaWxlcycsIGFycmF5KCAnY3VyY2F0ZWdvcnknID0+ICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pICk7Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1sncmVwbGFjZSddKSApIHsKCS8vIHJlLXVwbG9hZCBleGlzdGluZyBmaWxlLi4uIGJ1dCB3ZSdyZSBub3QgZ29ubmEgdG91Y2ggdGhlCgkvLyBvdGhlciBpbmZvIChsaWtlIGF1dGhvci4uLiwgb3IgdGhlIGZpZWxkcykuCgkkZmlsZXNfa2V5ID0gJGlkLidyZXBsYWNlX2ZpbGUnOwoJaWYoICFpc3NldCgkX0ZJTEVTWyRmaWxlc19rZXldKSB8fAoJCQkoJF9GSUxFU1skZmlsZXNfa2V5XVsnbmFtZSddID09ICcnKSB8fAoJCQkoJF9GSUxFU1skZmlsZXNfa2V5XVsnc2l6ZSddID09IDApIHx8CgkJCSgkX0ZJTEVTWyRmaWxlc19rZXldWydlcnJvciddICE9IDAgKSApIHsKCQkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCcpKTsKCQkkdGhpcy0+Q0dSZWRpcmVjdCgkaWQsJ2VkaXR1cGxvYWQnLCRyZXR1cm5pZCwkcGFyYW1zKTsKCX0KCgkvLyBtYWtlIHN1cmUgaXQncyBhbiBhbGxvd2VkIGZpbGUgdHlwZQoJJG5ld2ZpbGVleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJF9GSUxFU1skZmlsZXNfa2V5XVsnbmFtZSddLCcuJykpOwoJaWYoICEkdGhpcy0+X2lzVmFsaWRGaWxlbmFtZSgkX0ZJTEVTWyRmaWxlc19rZXldWyduYW1lJ10pICkgewoJCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJywkX0ZJTEVTWyRmaWxlc19rZXldWyduYW1lJ10pKTsKCQkkdGhpcy0+Q0dSZWRpcmVjdCgkaWQsJ2VkaXR1cGxvYWQnLCRyZXR1cm5pZCwkcGFyYW1zKTsKCX0KCgkkZmlsZWV4dGVuc2lvbiA9IHN0cnRvbG93ZXIoc3RycmNocigkZnJvbWZpbGUsJy4nKSk7CglpZiggJGZpbGVleHRlbnNpb24gIT0gJG5ld2ZpbGVleHRlbnNpb24gKSB7CgkJLy8gdWhtLCB5b3UgY2FuJ3QgcmVwbGFjZSBhIGZpbGUgb2YgYSBkaWZmZXJlbnQgdHlwZQoJCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfcmVwbGFjZV9taXNtYXRjaGVkX2ZpbGVleHQnKSk7CgkJJHRoaXMtPkNHUmVkaXJlY3QoJGlkLCdlZGl0dXBsb2FkJywkcmV0dXJuaWQsJHBhcmFtcyk7Cgl9CgoJLy8gd2UncmUgYWxsIGdvb2QgdG8gZ28uCglpZiggZmlsZV9leGlzdHMoJGZyb21maWxlKSApIEB1bmxpbmsoJGZyb21maWxlKTsKCWNtc19tb3ZlX3VwbG9hZGVkX2ZpbGUoICRfRklMRVNbJGZpbGVzX2tleV1bJ3RtcF9uYW1lJ10sJGZyb21maWxlICk7CgoJLy8gbm93LCBpZiBpdCdzIGFuIGltYWdlIGZpbGUsIHdlIG1heSB3YW5uYSByZS1jcmVhdGUgdGhlIHRodW1ibmFpbAoJJHRodW1iX2V4dF9hcnIgPSBleHBsb2RlKCIsIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJykpOwoJZm9yZWFjaCggJHRodW1iX2V4dF9hcnIgYXMgJHRodW1iX2V4dCApIHsKCQlpZiggJy4nLiR0aHVtYl9leHQgIT0gJGZpbGVleHRlbnNpb24gKSBjb250aW51ZTsKCgkJLy8gaXQncyBhbiBpbWFnZSBmaWxlLgoKCQkvLyBkZWxldGUgYW55IHByZXZpb3VzIHRodW1ibmFpbAoJCWlmKCAhZW1wdHkoJHJvd1sndXBsb2FkX3RodW1ibmFpbCddKSApIHsKCQkJJG9sZGZpbGUgPSAkdGhpcy0+X3VwbG9hZFBhdGgoJGNhdHBhdGgsJHJvd1sndXBsb2FkX3RodW1ibmFpbCddKTsKCQkJQHVubGluaygkb2xkZmlsZSk7CgkJfQoKCQkvLyBnZW5lcmF0ZSBuZXcgdGh1bWJuYWlsCgkJJHRodW1ibmFtZSA9ICd0aHVtYl8nLiRyb3dbJ3VwbG9hZF9uYW1lJ107CgkJJHRodW1iZmlsZSA9ICR0aGlzLT5fdXBsb2FkUGF0aCgkY2F0cGF0aCwkdGh1bWJuYW1lKTsKCQkkdGhpcy0+aW1hZ2VUcmFuc2Zvcm0oJGZyb21maWxlLCR0aHVtYmZpbGUsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG90aHVtYm5haWxfc2l6ZScpKTsKCgkJLy8gdXBkYXRlIHRoZSByZWNvcmQuCgkJJHRodW1ibmFtZSA9ICd0aHVtYl8nLiRyb3dbJ3VwbG9hZF9uYW1lJ107CgkJJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMKICAgICAgICAgICAgICBTRVQgdXBsb2FkX3RodW1ibmFpbCA9ID8gV0hFUkUgdXBsb2FkX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGh1bWJuYW1lLCRwYXJhbXNbJ3VwbG9hZF9pZCddKSk7CgkJYnJlYWs7Cgl9Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1sndGh1bWJuYWlsJ10pICkgewoJLy8gd2UncmUgKHJlKWNyZWF0aW5nIGEgdGh1bWJuYWlsIGZvciB0aGlzIGltYWdlCgkkdG5kaXIgPSAkdGhpcy0+X2NhdGVnb3J5UGF0aCgkY2F0cGF0aCk7CgoJJGZpbGVleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJHJvd1sndXBsb2FkX25hbWUnXSwnLicpKTsKCSRkZXN0ID0gJHRuZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RodW1iXycuJHJvd1sndXBsb2FkX25hbWUnXTsKCSR0aHVtYl9leHRfYXJyID0gZXhwbG9kZSgiLCIsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucycpKTsKCWZvcmVhY2goICR0aHVtYl9leHRfYXJyIGFzICR0aHVtYl9leHQgKSB7CgkJaWYoICIuIi4kdGh1bWJfZXh0ID09ICRmaWxlZXh0ZW5zaW9uICkgewoJCQkvLyBkZWxldGUgYW55IHByZXZpb3VzIHRodW1ibmFpbAoJCQlpZiggIWVtcHR5KCRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSkgKSB7CgkJCQkkb2xkZmlsZSA9ICR0bmRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLid0aHVtYl8nLiRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXTsKCQkJCWlmKCBmaWxlX2V4aXN0cygkb2xkZmlsZSkgKSBAdW5saW5rKCRvbGRmaWxlKTsKCQkJfQoKCQkJLy8gZ2VuZXJhdGUgaXQuCgkJCSR0aGlzLT5pbWFnZVRyYW5zZm9ybSgkZnJvbWZpbGUsJGRlc3QsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG90aHVtYm5haWxfc2l6ZScpKTsKCgkJCS8vIHVwZGF0ZSB0aGUgcmVjb3JkLgoJCQkkbmV3dGh1bWIgPSAndGh1bWJfJy4kcm93Wyd1cGxvYWRfbmFtZSddOwoJCQkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcwogICAgICAgICAgICAgICAgU0VUIHVwbG9hZHNfdGh1bW5haWwgPSA/IFdIRVJFIHVwbG9hZF9pZCA9ID8nOwoJCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCRuZXd0aHVtYiwkcGFyYW1zWyd1cGxvYWRfaWQnXSkpOwoJCQlicmVhazsKCQl9Cgl9CgkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICdmaWxlcycsIGFycmF5KCAnY3VyY2F0ZWdvcnknID0+ICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pICk7Cn0KCgppZiggJHBhcmFtc1snaW5wdXRfbW92ZWNhdGVnb3J5J10gIT0gJHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10gfHwKICAgICRwYXJhbXNbJ2lucHV0X3VwbG9hZG5hbWUnXSAhPSAkcm93Wyd1cGxvYWRfbmFtZSddICkgewogIC8vIGxvb2tzIGxpa2Ugd2UgaGF2ZSB0byBtb3ZlIGl0CiAgLy8gZ2V0IHRoZSBpbmZvIGZvciB0aGUgbmV3IGNhdGVnb3J5CgkkY2F0MXJvdyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeSgkcGFyYW1zWydpbnB1dF9tb3ZlY2F0ZWdvcnknXSk7CiAgaWYoICEkY2F0MXJvdyApIHsKICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKICAgIHJldHVybjsKICB9CgogIC8vIGFuZCB0aGUgb2xkIGNhdGVnb3J5CgkkY2F0MnJvdyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeSgkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSk7CiAgaWYoICEkY2F0MnJvdyApIHsKICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKICAgIHJldHVybjsKICB9CgogIC8vIG5vdyB3ZSBjYW4gbW92ZSB0aGUgZmlsZSBmcm9tIGRpcmVjdG9yeSBvbmUgdG8gdHdvLgogIC8vIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5CgkkdG9uYW1lID0gdXBsb2Fkc191dGlsczo6Y2xlYW5fZmlsZW5hbWUoJHBhcmFtc1snaW5wdXRfdXBsb2FkbmFtZSddKTsKICAkdG9maWxlICAgPSAkdGhpcy0+X3VwbG9hZFBhdGgoICRjYXQxcm93Wyd1cGxvYWRfY2F0ZWdvcnlfcGF0aCddLCAkdG9uYW1lICk7CgogIC8vIG1vdmUgdGhlIGZpbGUKICBpZiggZmlsZV9leGlzdHMoICR0b2ZpbGUgKSApIHsKICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfZmlsZWV4aXN0cycsJHRvZmlsZSkpOwogICAgcmV0dXJuOwogIH0KCiAgaWYoICFyZW5hbWUoICRmcm9tZmlsZSwgJHRvZmlsZSApICkgewogICAgJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcgKCdlcnJvcl9jYW5ub3RyZW5hbWUnKSk7CiAgICByZXR1cm47CiAgfQoKICAvLyBhbmQgbW92ZSBhbnkgdGh1bWJuYWlsCglpZiggIWVtcHR5KCRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSkgKSB7CgkJJHRuX2Zyb21maWxlID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoICRjYXQycm93Wyd1cGxvYWRfY2F0ZWdvcnlfcGF0aCddLkRJUkVDVE9SWV9TRVBBUkFUT1IuCgkJCQkJCQkJCQkJCQkJCQkJCQkJICRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSApOwoJCSR0aHVtYl9leHQgPSBzdHJyY2hyKCRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSwnLicpOwoJCSRmbiA9ICR0b25hbWU7CgkJJHRtcCA9IHN0cnJwb3MoJGZuLCcuJyk7CgkJaWYoICR0bXAgIT09IEZBTFNFICkgJGZuID0gc3Vic3RyKCRmbiwwLCR0bXApOwoJCSRuZXd0aHVtYiA9ICd0aHVtYl8nLiRmbi4kdGh1bWJfZXh0OwoJCSRjYXRwYXRoID0gJGNhdDFyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ107CgkJJHRuX3RvZmlsZSAgID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoICRjYXRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG5ld3RodW1iKTsKCQkvLyBhbmQgcmVuYW1lIHRoZSB0aHVtYm5haWwKCQlAcmVuYW1lKCAkdG5fZnJvbWZpbGUsICR0bl90b2ZpbGUgKTsKCX0KCiAgJG5ld2NhdGVnb3J5ID0gJHBhcmFtc1snaW5wdXRfbW92ZWNhdGVnb3J5J107CiAgJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyksJHRoaXMtPkxhbmcoJ21vdmVkZmlsZScsICRmcm9tZmlsZSwgJHRvZmlsZSApKTsKfQoKaWYoICRwYXJhbXNbJ2lucHV0X3VwbG9hZGRlc2MnXSAhPSAkcm93Wyd1cGxvYWRfZGVzY3JpcHRpb24nXSApICRuZXdkZXNjID0gdHJpbSgkcGFyYW1zWydpbnB1dF91cGxvYWRkZXNjJ10pOwppZiggJHRvbmFtZSAhPSAkcm93Wyd1cGxvYWRfbmFtZSddICkgJG5ld25hbWUgPSAkdG9uYW1lOwppZiggJHBhcmFtc1snaW5wdXRfdXBsb2Fkc3VtbWFyeSddICE9ICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10gKSAkbmV3c3VtbWFyeSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXBsb2Fkc3VtbWFyeSddKTsKaWYoICRwYXJhbXNbJ2lucHV0X3VwbG9hZGF1dGhvciddICE9ICRyb3dbJ3VwbG9hZF9hdXRob3InXSApICRuZXdhdXRob3IgPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VwbG9hZGF1dGhvciddKTsKCiRxdWVyeSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzIFNFVAogICAgICAgICAgdXBsb2FkX25hbWUgPSA/LCB1cGxvYWRfYXV0aG9yID0gPywKICAgICAgICAgIHVwbG9hZF9zdW1tYXJ5ID0gPywgdXBsb2FkX2Rlc2NyaXB0aW9uID0gPywKICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8gLAogICAgICAgICAgdXBsb2FkX3RodW1ibmFpbCA9ID8KICAgICAgICAgIFdIRVJFIHVwbG9hZF9pZCA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRuZXduYW1lLCAkbmV3YXV0aG9yLCAkbmV3c3VtbWFyeSwgJG5ld2Rlc2MsICRuZXdjYXRlZ29yeSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkgJG5ld3RodW1iLCAkcGFyYW1zWyd1cGxvYWRfaWQnXSApICk7CgovLyBkZWxldGUgYW55IGV4aXN0aW5nIGN1c3RvbSBmaWVsZHMKJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgV0hFUkUgdXBsb2FkX2lkID0gPyc7CiRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHBhcmFtc1sndXBsb2FkX2lkJ10pKTsKCi8vIGhhbmRsZSBuZXcgY3VzdG9tIGZpZWxkIHZhbHVlcy4KJGlxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzCiAgICAgICAgICAgICAgICAgKHVwbG9hZF9pZCwgZmxkX2lkLCB2YWx1ZSkgVkFMVUVTICg/LD8sPyknOwpmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkgewoJaWYoICFzdGFydHN3aXRoKCRrZXksJ2ZpZWxkXycpICkgY29udGludWU7CgoJJGZpZWxkX2lkID0gKGludClzdWJzdHIoJGtleSw2KTsKCWlmKCBpc19hcnJheSggJHZhbHVlICkgKSAkdmFsdWUgPSBpbXBsb2RlKCcsJywkdmFsdWUpOwoJJGRiLT5FeGVjdXRlKCRpcXVlcnksYXJyYXkoJHBhcmFtc1sndXBsb2FkX2lkJ10sJGZpZWxkX2lkLCR2YWx1ZSkpOwp9CgokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5MYW5nKCdmcmllbmRseW5hbWUnKSwJJHRoaXMtPkxhbmcoJ2VkaXRlZCcsICRyb3dbJ3VwbG9hZF9uYW1lJ10pICk7CgojIGFsbG93IG5ldyB0aHVtYm5haWwgdG8gYmUgdXBsb2FkZWQKJHRtcCA9ICRpZC4naW5wdXRfbmV3dGh1bWJuYWlsJzsKaWYoIGlzc2V0KCRfRklMRVNbJHRtcF0pICYmICFlbXB0eSgkX0ZJTEVTWyR0bXBdWyduYW1lJ10pICYmCgkJJF9GSUxFU1skdG1wXVsnc2l6ZSddID4gMCAmJiRfRklMRVNbJHRtcF1bJ2Vycm9yJ10gPT0gMCApIHsKCSRuYW1lID0gJHJvd1sndXBsb2FkX25hbWUnXTsKCSR0aHVtYl9leHQgPSBzdHJyY2hyKCRfRklMRVNbJHRtcF1bJ25hbWUnXSwnLicpOwoJJGZpbGVfZXh0ID0gc3RycmNocigkbmFtZSwnLicpOwoJJGZuYW1lID0gc3Vic3RyKCRuYW1lLDAsc3RybGVuKCRuYW1lKS1zdHJsZW4oJGZpbGVfZXh0KSk7CgkkdGh1bWJfbmFtZSA9ICd0aHVtYl8nLiRmbmFtZS4kdGh1bWJfZXh0OwoJJHRuX29sZGZpbGUgPSAkdGhpcy0+X2NhdGVnb3J5UGF0aCggJGNhdHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ10pOwoKCWlmKCBmaWxlX2V4aXN0cyggJHRuX29sZGZpbGUgKSApIEB1bmxpbmsoJHRuX29sZGZpbGUpOwoJJHRuX25ld2ZpbGUgICA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aHVtYl9uYW1lKTsKCWlmKCBmaWxlX2V4aXN0cygkdG5fbmV3ZmlsZSkgKSBAdW5saW5rKCR0bl9uZXdmaWxlKTsKCWNtc19tb3ZlX3VwbG9hZGVkX2ZpbGUoICRfRklMRVNbJHRtcF1bJ3RtcF9uYW1lJ10sJHRuX25ld2ZpbGUgKTsKCgkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcwogICAgICAgICAgICBTRVQgdXBsb2FkX3RodW1ibmFpbCA9ID8gV0hFUkUgdXBsb2FkX2lkID0gPyc7CgkkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aHVtYl9uYW1lLCRyb3dbJ3VwbG9hZF9pZCddKSk7Cn0KCi8vIHVwZGF0ZSBzZWFyY2ggd29yZHMuCiRzZWFyY2ggPSBjbXNfdXRpbHM6OmdldF9zZWFyY2hfbW9kdWxlKCk7CmlmKCAkc2VhcmNoICkgdXBsb2Fkc191dGlsczo6aW5kZXhfdXBsb2FkKCRyb3dbJ3VwbG9hZF9pZCddLCRzZWFyY2gpOwoKLy8gZG9uZS4KJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCAnZmlsZXMnLCBhcnJheSggJ2N1cmNhdGVnb3J5JyA9PiAkcGFyYW1zWydjYXRlZ29yeV9pZCddKSApOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.do_upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0KCk7CgovLyBhIHVzZXIgaXMgdHJ5aW5nIHRvIHVwbG9hZCBzb21ldGhpbmcKLy8gZmlyc3QgY2hlY2sgaWYgY2FwdGNoYSB3YXMgc2V0CiRjYXB0Y2hhID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdDYXB0Y2hhJyk7CmlmKCBpc19vYmplY3QoJGNhcHRjaGEpICYmICFpc3NldCgkcGFyYW1zWydub2NhcHRjaGEnXSkgKSB7CiAgaWYgKCEkY2FwdGNoYS0+Q2hlY2tDYXB0Y2hhKCRwYXJhbXNbJ2lucHV0X2NhcHRjaGEnXSkpIHsKICAgICR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnKSk7CiAgICByZXR1cm47CiAgfQogfQoKJHBhcmFtc1snaW5wdXRfcmVwbGFjZSddID0gMDsgLy8gbm8gcmVwbGFjaW5nIGZpbGVzIGFsbG93ZWQuCiRyZXQgPSAkdGhpcy0+QXR0ZW1wdFVwbG9hZCAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwppZiggJHJldFswXSA9PSBGQUxTRSApIHsKICAkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkcmV0WzFdICk7CiAgcmV0dXJuOwp9CiRzdHIgPSAkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVkaXJlY3Rfb25fdXBsb2FkJyk7CiRpZCA9ICRyZXR1cm5pZDsKaWYoICRzdHIgIT0gJycgKSB7CiAgICAkaWQgPSBDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUFsaWFzKCAkc3RyICk7CiAgICBpZiggISRpZCApICRpZCA9ICRyZXR1cm5pZDsgLy8gcGFnZSBub3QgZm91bmQsIGlnbm9yZSBpdAp9CiR0aGlzLT5SZWRpcmVjdENvbnRlbnQoICRpZCApOwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editcategory.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSBleGl0OwoKJHNtYXJ0eS0+YXNzaWduICgndGl0bGUnLCAkdGhpcy0+TGFuZyAoJ2VkaXRjYXRlZ29yeScpKTsKCi8vIGNoZWNrIHRoaW5ncyBvdXQKaWYgKCFpc3NldCAoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpIHsKCSRzbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX25vY2F0ZWdvcnknKSk7Cgkkc21hcnR5LT5hc3NpZ24gKCdlcnJvcicsIDEpOwoJZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnYWRkY2F0ZWdvcnkudHBsJyk7CglyZXR1cm47Cn0KCi8vIGdldCB0aGUgY2F0ZWdvcnkgaW5mbyBmcm9tIHRoZSBkYXRhYmFzZSAoZm9yIHRoaXMgY2F0ZWdvcnkpCiRxdWVyeSA9CiAgIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4ICgpLgogICJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUgKCRxdWVyeSwgYXJyYXkoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkpOwppZiAoISRkYnJlc3VsdCkgewoJJHNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKCSRzbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgMSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdhZGRjYXRlZ29yeS50cGwnKTsKCXJldHVybjsKfQokcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdyAoKTsKaWYgKCEkcm93KSB7Cgkkc21hcnR5LT5hc3NpZ24gKCdtZXNzYWdlJywgJHRoaXMtPkxhbmcgKCdlcnJvcl9kYmVycm9yJykpOwoJJHNtYXJ0eS0+YXNzaWduICgnZXJyb3InLCAxKTsKCWVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwoJcmV0dXJuOwp9CgppZiggJHJvd1sndXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSAhPSAnJyApIHsKCSRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10gPSBleHBsb2RlKCcsJywkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddKTsKfQoKLy8gcG9wdWxhdGUgdGhlIHRlbXBsYXRlCiRzbWFydHktPmFzc2lnbiAoInN0YXJ0Zm9ybSIsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZG9fZWRpdGNhdGVnb3J5JywgJHJldHVybmlkLCdwb3N0JywnJyxmYWxzZSwnJywkcGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CiRzbWFydHktPmFzc2lnbignY2F0ZWdvcnlfaWQnLCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pOwokc21hcnR5LT5hc3NpZ24oJ2RhdGEnLCRyb3cpOwoKJHNtYXJ0eS0+YXNzaWduICgnc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdCcsICR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24gKCdjYW5jZWwnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnY2FuY2VsJywgJHRoaXMtPkxhbmcoJ2NhbmNlbCcpKSk7CgokYWRkdGV4dF90aHVtYm5haWxzID0gJ3RpdGxlPSInLiR0aGlzLT5MYW5nKCd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscycpLiciJzsKJHNtYXJ0eS0+YXNzaWduICgndGh1bWJuYWlscycsCgkJCQkJCQkJICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCggJGlkLCAndGh1bWJuYWlscycsCgkJCQkJCQkJCQkJCQkJCQkJCQkJCSAkdGhpcy0+TGFuZygnY3JlYXRlX3RodW1ibmFpbHMnKSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkJICRhZGR0ZXh0X3RodW1ibmFpbHMgKSk7Cgokc21hcnR5LT5hc3NpZ24gKCdoaWRkZW4nLAoJCSAgICAgICAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4gKCRpZCwgJ2NhdGVnb3J5X2lkJywkcGFyYW1zWydjYXRlZ29yeV9pZCddKSk7CgokZmV1c2VycyA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwppZiggJGZldXNlcnMgKSB7CgkvLyBnZXQgYSBsaXN0IG9mIHRoZSBncm91cHMgaW4gdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlCgkkZ3JvdXBzID0gJGZldXNlcnMtPkdldEdyb3VwTGlzdCgpOwoJJHNtYXJ0eS0+YXNzaWduKCdmZXVfZ3JvdXBzJyxhcnJheV9mbGlwKCRncm91cHMpKTsKCSRzZWxncm91cHMgPSBhcnJheSgpOwoJaWYoIGNvdW50KCRncm91cHMpID4gMCApIHsKCQkkc2VsZ3JvdXBzID0gYXJyYXkoKTsKCQlpZiggaXNzZXQoJHJvd1sndXBsb2FkX2NhdGVnb3J5X2dyb3VwcyddKSAmJiAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzJ10gIT0gJycgKSB7CgkJCSRzZWxncm91cHMgPSBleHBsb2RlKCcsJywkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzJ10pOwoJCX0KCQkkc21hcnR5LT5hc3NpZ24oJ2dyb3VwbGlzdCcsJHNlbGdyb3Vwcyk7Cgl9Cn0KCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkZGNhdGVnb3J5LnRwbCcpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.editupload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCmlmKCAhaXNzZXQoJGdDbXMpICkgZXhpdDsKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVXBsb2FkcycpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVcGxvYWQgRmlsZXMgdG8gVXBsb2FkcycpKSByZXR1cm47CgovLyBjaGVjayB0aGluZ3Mgb3V0CmlmICghaXNzZXQgKCRwYXJhbXNbJ3VwbG9hZF9pZCddKSkgewoJJHNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgnZXJyb3Jfbm9pZCcpKTsKCSRzbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgMSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdlZGl0dXBsb2FkLnRwbCcpOwoJcmV0dXJuOwp9CgovLyBnZXQgdGhlIGluZm8gZnJvbSB0aGUgZGF0YWJhc2UgKGZvciB0aGlzIGZpbGUpCiRyb3cgPSAkdGhpcy0+R2V0VXBsb2FkRGV0YWlscygkcGFyYW1zWyd1cGxvYWRfaWQnXSk7CmlmICghJHJvdykgewoJJHNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICR0aGlzLT5MYW5nICgnZXJyb3JfZGJlcnJvcicpKTsKCSRzbWFydHktPmFzc2lnbiAoJ2Vycm9yJywgMSk7CgllY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdlZGl0dXBsb2FkLnRwbCcpOwoJcmV0dXJuOwp9CmlmKCBpc3NldCgkcm93Wyd1cGxvYWRfdXNlcnBlcm1zJ10pICYmICRyb3dbJ3VwbG9hZF91c2VycGVybXMnXSApICRyb3dbJ3VwbG9hZF91c2VycGVybXMnXSA9IGV4cGxvZGUoJywnLCRyb3dbJ3VwbG9hZF91c2VycGVybXMnXSk7Cgokc2VsX2NhdGVnb3J5ID0gKGludCkkcGFyYW1zWydjYXRlZ29yeV9pZCddOwppZiggaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgKSAkc2VsX2NhdGVnb3J5ID0gKGludCkkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X21vdmVjYXRlZ29yeSddKSApICRzZWxfY2F0ZWdvcnkgPSAoaW50KSRwYXJhbXNbJ2lucHV0X21vdmVjYXRlZ29yeSddOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ2NhbmNlbCddKSApIHsKCSRwYXJtcyA9IGFycmF5KCk7CglpZiggaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgKSAkcGFybXNbJ2N1cmNhdGVnb3J5J10gPSAkcGFyYW1zWydjYXRlZ29yeV9pZCddOwoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCAnZmlsZXMnLCAkcGFybXMpOwp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3JlcGxhY2UnXSkgKSB7CgkvLyByZS11cGxvYWQgZXhpc3RpbmcgZmlsZS4uLiBidXQgd2UncmUgbm90IGdvbm5hIHRvdWNoIHRoZQoJLy8gb3RoZXIgaW5mbyAobGlrZSBhdXRob3IuLi4sIG9yIHRoZSBmaWVsZHMpLgoJJGZpbGVzX2tleSA9ICRpZC4ncmVwbGFjZV9maWxlJzsKCWlmKCAhaXNzZXQoJF9GSUxFU1skZmlsZXNfa2V5XSkgfHwgKCRfRklMRVNbJGZpbGVzX2tleV1bJ25hbWUnXSA9PSAnJykgfHwKCQkJKCRfRklMRVNbJGZpbGVzX2tleV1bJ3NpemUnXSA9PSAwKSB8fCAoJF9GSUxFU1skZmlsZXNfa2V5XVsnZXJyb3InXSAhPSAwICkgKSB7CgkJJHRoaXMtPlNldEVycm9yKCR0aGlzLT5MYW5nKCdlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnKSk7CgkJdW5zZXQoJHBhcmFtc1sncmVwbGFjZSddKTsKCQkkdGhpcy0+Q0dSZWRpcmVjdCgkaWQsJ2VkaXR1cGxvYWQnLCRyZXR1cm5pZCwkcGFyYW1zKTsKCX0KCgkvLyBtYWtlIHN1cmUgaXQncyBhbiBhbGxvd2VkIGZpbGUgdHlwZQoJJG5ld2ZpbGVleHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJF9GSUxFU1skZmlsZXNfa2V5XVsnbmFtZSddLCcuJykpOwoJaWYoICEkdGhpcy0+X2lzVmFsaWRGaWxlbmFtZSgkX0ZJTEVTWyRmaWxlc19rZXldWyduYW1lJ10pICkgewoJCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJywkX0ZJTEVTWyRmaWxlc19rZXldWyduYW1lJ10pKTsKCQl1bnNldCgkcGFyYW1zWydyZXBsYWNlJ10pOwoJCSR0aGlzLT5DR1JlZGlyZWN0KCRpZCwnZWRpdHVwbG9hZCcsJHJldHVybmlkLCRwYXJhbXMpOwoJfQoKCS8vIGFuZCB0aGUgb2xkIGNhdGVnb3J5CgkkY2F0MnJvdyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeSggJHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10pOwoJaWYoICEkY2F0MnJvdyApIHsKCQkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX2RiZXJyb3InKSk7CgkJdW5zZXQoJHBhcmFtc1sncmVwbGFjZSddKTsKCQkkdGhpcy0+Q0dSZWRpcmVjdCgkaWQsJ2VkaXR1cGxvYWQnLCRyZXR1cm5pZCwkcGFyYW1zKTsKCX0KCgkkZnJvbWZpbGUgPSAkdGhpcy0+X3VwbG9hZFBhdGgoICRjYXQycm93Wyd1cGxvYWRfY2F0ZWdvcnlfcGF0aCddLCB0cmltKCRyb3dbJ3VwbG9hZF9uYW1lJ10pICk7CgkkZmlsZWV4dGVuc2lvbiA9IHN0cnRvbG93ZXIoc3RycmNocigkZnJvbWZpbGUsJy4nKSk7CglpZiggJGZpbGVleHRlbnNpb24gIT0gJG5ld2ZpbGVleHRlbnNpb24gKSB7CgkJLy8gdWhtLCB5b3UgY2FuJ3QgcmVwbGFjZSBhIGZpbGUgb2YgYSBkaWZmZXJlbnQgdHlwZQoJCSR0aGlzLT5TZXRFcnJvcigkdGhpcy0+TGFuZygnZXJyb3JfcmVwbGFjZV9taXNtYXRjaGVkX2ZpbGVleHQnKSk7CgkJdW5zZXQoJHBhcmFtc1sncmVwbGFjZSddKTsKCQkkdGhpcy0+Q0dSZWRpcmVjdCgkaWQsJ2VkaXR1cGxvYWQnLCRyZXR1cm5pZCwkcGFyYW1zKTsKCX0KCgkvLyB3ZSdyZSBhbGwgZ29vZCB0byBnby4KCWlmKCBmaWxlX2V4aXN0cygkZnJvbWZpbGUpICkgQHVubGluaygkZnJvbWZpbGUpOwoJY21zX21vdmVfdXBsb2FkZWRfZmlsZSggJF9GSUxFU1skZmlsZXNfa2V5XVsndG1wX25hbWUnXSwkZnJvbWZpbGUgKTsKCgkvLyBub3csIGlmIGl0J3MgYW4gaW1hZ2UgZmlsZSwgd2UgbWF5IHdhbm5hIHJlLWNyZWF0ZSB0aGUgdGh1bWJuYWlsCgkkdGh1bWJfZXh0X2FyciA9IGV4cGxvZGUoIiwiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSk7Cglmb3JlYWNoKCAkdGh1bWJfZXh0X2FyciBhcyAkdGh1bWJfZXh0ICkgewoJCWlmKCAnLicuJHRodW1iX2V4dCAhPSAkZmlsZWV4dGVuc2lvbiApIGNvbnRpbnVlOwoKCQkvLyBpdCdzIGFuIGltYWdlIGZpbGUuCgoJCS8vIGRlbGV0ZSBhbnkgcHJldmlvdXMgdGh1bWJuYWlsCgkJJGNhdHBhdGggPSAkY2F0MnJvd1sndXBsb2FkX2NhdGVnb3J5X3BhdGgnXTsKCQlpZiggIWVtcHR5KCRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSkgKSB7CgkJCSRvbGRmaWxlID0gJHRoaXMtPl91cGxvYWRQYXRoKCRjYXRwYXRoLCRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSk7CgkJCUB1bmxpbmsoJG9sZGZpbGUpOwoJCX0KCgkJLy8gZ2VuZXJhdGUgbmV3IHRodW1ibmFpbAoJCSR0aHVtYm5hbWUgPSAndGh1bWJfJy4kcm93Wyd1cGxvYWRfbmFtZSddOwoJCSR0aHVtYmZpbGUgPSAkdGhpcy0+X3VwbG9hZFBhdGgoJGNhdHBhdGgsJHRodW1ibmFtZSk7CgkJJHRoaXMtPmltYWdlVHJhbnNmb3JtKCRmcm9tZmlsZSwkdGh1bWJmaWxlLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX3NpemUnKSk7CgoJCS8vIHVwZGF0ZSB0aGUgcmVjb3JkLgoJCSR0aHVtYm5hbWUgPSAndGh1bWJfJy4kcm93Wyd1cGxvYWRfbmFtZSddOwoJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFNFVCB1cGxvYWRfdGh1bWJuYWlsID0gPyBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0aHVtYm5hbWUsJHBhcmFtc1sndXBsb2FkX2lkJ10pKTsKCQlicmVhazsKCX0KfQplbHNlIGlmKCBpc3NldCgkcGFyYW1zWyd0aHVtYm5haWwnXSkgKSB7CgkvLyB3ZSdyZSAocmUpY3JlYXRpbmcgYSB0aHVtYm5haWwgZm9yIHRoaXMgaW1hZ2UKCSR0bmRpciA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCRjYXRwYXRoKTsKCgkkZmlsZWV4dGVuc2lvbiA9IHN0cnRvbG93ZXIoc3RycmNocigkcm93Wyd1cGxvYWRfbmFtZSddLCcuJykpOwoJJGRlc3QgPSAkdG5kaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4ndGh1bWJfJy4kcm93Wyd1cGxvYWRfbmFtZSddOwoJJHRodW1iX2V4dF9hcnIgPSBleHBsb2RlKCIsIiwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJykpOwoJZm9yZWFjaCggJHRodW1iX2V4dF9hcnIgYXMgJHRodW1iX2V4dCApIHsKCQlpZiggIi4iLiR0aHVtYl9leHQgPT0gJGZpbGVleHRlbnNpb24gKSB7CgkJCS8vIGRlbGV0ZSBhbnkgcHJldmlvdXMgdGh1bWJuYWlsCgkJCWlmKCAhZW1wdHkoJHJvd1sndXBsb2FkX3RodW1ibmFpbCddKSApIHsKCQkJCSRvbGRmaWxlID0gJHRuZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RodW1iXycuJHJvd1sndXBsb2FkX3RodW1ibmFpbCddOwoJCQkJaWYoIGZpbGVfZXhpc3RzKCRvbGRmaWxlKSApIEB1bmxpbmsoJG9sZGZpbGUpOwoJCQl9CgoJCQkvLyBnZW5lcmF0ZSBpdC4KCQkJJHRoaXMtPmltYWdlVHJhbnNmb3JtKCRmcm9tZmlsZSwkZGVzdCwkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXV0b3RodW1ibmFpbF9zaXplJykpOwoKCQkJLy8gdXBkYXRlIHRoZSByZWNvcmQuCgkJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFNFVCB1cGxvYWRzX3RodW1uYWlsID0gPyBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKCQkJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ10sJHBhcmFtc1sndXBsb2FkX2lkJ10pKTsKCQkJYnJlYWs7CgkJfQoJfQoJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCAnZmlsZXMnLCBhcnJheSggJ2N1cmNhdGVnb3J5JyA9PiAkcGFyYW1zWydjYXRlZ29yeV9pZCddKSApOwp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ3N1Ym1pdCddKSApIHsKCWlmKCAkcGFyYW1zWydpbnB1dF9tb3ZlY2F0ZWdvcnknXSAhPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSB8fCAkcGFyYW1zWydpbnB1dF91cGxvYWRuYW1lJ10gIT0gJHJvd1sndXBsb2FkX25hbWUnXSApIHsKCQkvLyBsb29rcyBsaWtlIHdlIGhhdmUgdG8gbW92ZSBpdAoJCS8vIGdldCB0aGUgaW5mbyBmb3IgdGhlIG5ldyBjYXRlZ29yeQoJCSRjYXQxcm93ID0gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCRwYXJhbXNbJ2lucHV0X21vdmVjYXRlZ29yeSddKTsKCQlpZiggISRjYXQxcm93ICkgewoJCQkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX2RiZXJyb3InKSk7CgkJCXJldHVybjsKCQl9CgoJCWlmKCAkY2F0MXJvd1sndXBsb2FkX2NhdGVnb3J5X3VzZXJwZXJtcyddICYmICRjYXQxcm93Wyd1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddICE9ICcnICkgewoJCQlpZiggJHJvd1sndXBsb2FkX3VzZXJwZXJtcyddID09ICcnICkgewoJCQkJLy8gdGhpcyBmaWxlIGRvZXMgbm90IGhhdmUgdXNlciBwZXJtaXNzaW9ucywgYnV0IHRoZSBkZXN0aW5hdGlvbiBjYXRlZ29yeSBkb2VzLgoJCQkJLy8gc28gY29weSB0aGVtIGZyb20gdGhlIGRlc3RpbmF0aW9uIGNhdGVnb3J5LgoJCQkJJHJvd1sndXBsb2FkX3VzZXJwZXJtcyddID0gJGNhdDFyb3dbJ3VwbG9hZF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ107CgkJCX0KCQl9CgoJCS8vIG5vdyB3ZSBjYW4gbW92ZSB0aGUgZmlsZSBmcm9tIGRpcmVjdG9yeSBvbmUgdG8gdHdvLgoJCS8vIGlmIGl0IGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBpbiB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5CgkJJGNhdHBhdGggID0gJGNhdDFyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ107CgkJJGZyb21maWxlID0gJHRoaXMtPl91cGxvYWRQYXRoKCAkdGhpcy0+Z2V0Q2F0ZWdvcnlQYXRoRnJvbUlEKCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKSwgdHJpbSgkcm93Wyd1cGxvYWRfbmFtZSddKSApOwoJCSR0b2ZpbGUgICA9ICR0aGlzLT5fdXBsb2FkUGF0aCggJGNhdDFyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10sIHRyaW0oJHBhcmFtc1snaW5wdXRfdXBsb2FkbmFtZSddKSApOwoKCQkvLyBtb3ZlIHRoZSBmaWxlCgkJaWYoIGZpbGVfZXhpc3RzKCAkdG9maWxlICkgKSB7CgkJCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfZmlsZWV4aXN0cycsJHRvZmlsZSkpOwoJCQlyZXR1cm47CgkJfQoKCQlpZiggJGZyb21maWxlID09ICR0b2ZpbGUgKSB7CgkJCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfZmlsZWV4aXN0cycsJHRvZmlsZSkpOwoJCQlyZXR1cm47CgkJfQoKCQlpZiggIXJlbmFtZSggJGZyb21maWxlLCAkdG9maWxlICkgKSB7CgkJCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfY2Fubm90cmVuYW1lJykpOwoJCQlyZXR1cm47CgkJfQoKCQkvLyBhbmQgbW92ZSBhbnkgdGh1bWJuYWlsCgkJaWYoICFlbXB0eSgkcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ10pICkgewoJCQkkdG5fZnJvbWZpbGUgPSAkdGhpcy0+X2NhdGVnb3J5UGF0aCggJGNhdDJyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ10gKTsKCQkJJHRodW1iX2V4dCA9IHN0cnJjaHIoJHJvd1sndXBsb2FkX3RodW1ibmFpbCddLCcuJyk7CgkJCSRmbiA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXBsb2FkbmFtZSddKTsKCQkJJHRtcCA9IHN0cnJwb3MoJGZuLCcuJyk7CgkJCWlmKCAkdG1wICE9PSBGQUxTRSApICRmbiA9IHN1YnN0cigkZm4sMCwkdG1wKTsKCQkJJHJvd1sndXBsb2FkX3RodW1ibmFpbCddID0gJ3RodW1iXycuJGZuLiR0aHVtYl9leHQ7CgkJCSRjYXRwYXRoID0gJGNhdDFyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ107CgkJCSR0bl90b2ZpbGUgICA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSk7CgkJCS8vIGFuZCByZW5hbWUgdGhlIHRodW1ibmFpbAoJCQlAcmVuYW1lKCAkdG5fZnJvbWZpbGUsICR0bl90b2ZpbGUgKTsKCQl9CgoJCS8vIHNldCB0aGUgbmV3IGNhdGVnb3J5IG5hbWUuCgkJJHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10gPSAkcGFyYW1zWydpbnB1dF9tb3ZlY2F0ZWdvcnknXTsKCX0KCglpZiggJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FsbG93X2NoYW5nZWRhdGUnKSApIHsKCQlpZiggaXNzZXQoJHBhcmFtc1sndXBsb2FkX2RhdGVfTW9udGgnXSkgJiYgaXNzZXQoJHBhcmFtc1sndXBsb2FkX2RhdGVfSG91ciddKSApIHsKCQkJJHRpbWUgPSBta3RpbWUoKGludCkkcGFyYW1zWyd1cGxvYWRfZGF0ZV9Ib3VyJ10sKGludCkkcGFyYW1zWyd1cGxvYWRfZGF0ZV9NaW51dGUnXSwoaW50KSRwYXJhbXNbJ3VwbG9hZF9kYXRlX1NlY29uZCddLAoJCQkJCQkJCQkJIChpbnQpJHBhcmFtc1sndXBsb2FkX2RhdGVfTW9udGgnXSwoaW50KSRwYXJhbXNbJ3VwbG9hZF9kYXRlX0RheSddLChpbnQpJHBhcmFtc1sndXBsb2FkX2RhdGVfWWVhciddKTsKCQkJJHJvd1sndXBsb2FkX2RhdGUnXSA9IHRyaW0oJGRiLT5EYlRpbWVTdGFtcCgkdGltZSksIiciKTsKCQl9Cgl9CgoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3VwbG9hZGRlc2MnXSkgKSAkcm93Wyd1cGxvYWRfZGVzY3JpcHRpb24nXSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXBsb2FkZGVzYyddKTsKCWlmKCAkcGFyYW1zWydpbnB1dF91cGxvYWRuYW1lJ10gIT0gJHJvd1sndXBsb2FkX25hbWUnXSApICRyb3dbJ3VwbG9hZF9uYW1lJ10gPSB0cmltKCRwYXJhbXNbJ2lucHV0X3VwbG9hZG5hbWUnXSk7CglpZiggJHBhcmFtc1snaW5wdXRfdXBsb2Fkc3VtbWFyeSddICE9ICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10gKSAkcm93Wyd1cGxvYWRfc3VtbWFyeSddID0gdHJpbSgkcGFyYW1zWydpbnB1dF91cGxvYWRzdW1tYXJ5J10pOwoJaWYoICRwYXJhbXNbJ2lucHV0X3VwbG9hZGF1dGhvciddICE9ICRyb3dbJ3VwbG9hZF9hdXRob3InXSApICRyb3dbJ3VwbG9hZF9hdXRob3InXSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfdXBsb2FkYXV0aG9yJ10pOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3VzZXJwZXJtc19zZXQnXSkgKSB7CgkJJHJvd1sndXBsb2FkX3VzZXJwZXJtcyddID0gJyc7CgkJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3VzZXJwZXJtcyddKSApICRyb3dbJ3VwbG9hZF91c2VycGVybXMnXSA9IGltcGxvZGUoJywnLCRwYXJhbXNbJ2lucHV0X3VzZXJwZXJtcyddKTsKCX0KCgkkcXVlcnkgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2FkcwogICAgICAgICAgICBTRVQgdXBsb2FkX25hbWUgPSA/LCB1cGxvYWRfYXV0aG9yID0gPywgdXBsb2FkX2RhdGUgPSA/LCB1cGxvYWRfc3VtbWFyeSA9ID8sIHVwbG9hZF9kZXNjcmlwdGlvbiA9ID8sCiAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8gLHVwbG9hZF90aHVtYm5haWwgPSA/LCB1cGxvYWRfdXNlcnBlcm1zID0gPyBXSEVSRSB1cGxvYWRfaWQgPSA/IjsKCSRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LAoJCQkJCQkJCQkJCQkJCWFycmF5KCAkcm93Wyd1cGxvYWRfbmFtZSddLCAkcm93Wyd1cGxvYWRfYXV0aG9yJ10sICRyb3dbJ3VwbG9hZF9kYXRlJ10sCgkJCQkJCQkJCQkJCQkJCQkJICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10sICRyb3dbJ3VwbG9hZF9kZXNjcmlwdGlvbiddLCAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSwgJHJvd1sndXBsb2FkX3RodW1ibmFpbCddLAoJCQkJCQkJCQkJCQkJCQkJCSAkcm93Wyd1cGxvYWRfdXNlcnBlcm1zJ10sICRwYXJhbXNbJ3VwbG9hZF9pZCddICkgKTsKCgkvLyBkZWxldGUgYW55IGV4aXN0aW5nIGN1c3RvbSBmaWVsZHMKCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIFdIRVJFIHVwbG9hZF9pZCA9ID8nOwoJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkcGFyYW1zWyd1cGxvYWRfaWQnXSkpOwoKCS8vIGhhbmRsZSBuZXcgY3VzdG9tIGZpZWxkIHZhbHVlcy4KCSRpcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyAodXBsb2FkX2lkLCBmbGRfaWQsIHZhbHVlKSBWQUxVRVMgKD8sPyw/KSc7Cglmb3JlYWNoKCAkcGFyYW1zIGFzICRrZXkgPT4gJHZhbHVlICkgewoJCWlmKCAhc3RhcnRzd2l0aCgka2V5LCdmaWVsZF8nKSApIGNvbnRpbnVlOwoKCQkkZmllbGRfaWQgPSAoaW50KXN1YnN0cigka2V5LDYpOwoJCWlmKCBpc19hcnJheSggJHZhbHVlICkgKSAkdmFsdWUgPSBpbXBsb2RlKCcsJywkdmFsdWUpOwoJCSRkYi0+RXhlY3V0ZSgkaXF1ZXJ5LGFycmF5KCRwYXJhbXNbJ3VwbG9hZF9pZCddLCRmaWVsZF9pZCwkdmFsdWUpKTsKCX0KCgkkdGhpcy0+QXVkaXQoJHJvd1sndXBsb2FkX2lkJ10sICR0aGlzLT5HZXROYW1lKCksICdGaWxlIEVkaXRlZCAnLiRyb3dbJ3VwbG9hZF9uYW1lJ10pOwoKCS8vIGFsbG93IG5ldyB0aHVtYm5haWwgdG8gYmUgdXBsb2FkZWQKCSR0bXAgPSAkaWQuJ2lucHV0X25ld3RodW1ibmFpbCc7CglpZiggaXNzZXQoJF9GSUxFU1skdG1wXSkgJiYgIWVtcHR5KCRfRklMRVNbJHRtcF1bJ25hbWUnXSkgJiYgJF9GSUxFU1skdG1wXVsnc2l6ZSddID4gMCAmJgkkX0ZJTEVTWyR0bXBdWydlcnJvciddID09IDAgKSB7CgkJJG5hbWUgPSAkcm93Wyd1cGxvYWRfbmFtZSddOwoJCSR0aHVtYl9leHQgPSBzdHJyY2hyKCRfRklMRVNbJHRtcF1bJ25hbWUnXSwnLicpOwoJCSRmaWxlX2V4dCA9IHN0cnJjaHIoJG5hbWUsJy4nKTsKCQkkZm5hbWUgPSBzdWJzdHIoJG5hbWUsMCxzdHJsZW4oJG5hbWUpLXN0cmxlbigkZmlsZV9leHQpKTsKCQkkdGh1bWJfbmFtZSA9ICd0aHVtYl8nLiRmbmFtZS4kdGh1bWJfZXh0OwoJCSR0bl9vbGRmaWxlID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoICRjYXRwYXRoLkRJUkVDVE9SWV9TRVBBUkFUT1IuJHJvd1sndXBsb2FkX3RodW1ibmFpbCddKTsKCgkJaWYoIGZpbGVfZXhpc3RzKCAkdG5fb2xkZmlsZSApICkgQHVubGluaygkdG5fb2xkZmlsZSk7CgkJJHRuX25ld2ZpbGUgICA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiR0aHVtYl9uYW1lKTsKCQlpZiggZmlsZV9leGlzdHMoJHRuX25ld2ZpbGUpICkgQHVubGluaygkdG5fbmV3ZmlsZSk7CgkJY21zX21vdmVfdXBsb2FkZWRfZmlsZSggJF9GSUxFU1skdG1wXVsndG1wX25hbWUnXSwkdG5fbmV3ZmlsZSApOwoKCQkkcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcyBTRVQgdXBsb2FkX3RodW1ibmFpbCA9ID8gV0hFUkUgdXBsb2FkX2lkID0gPyc7CgkJJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGh1bWJfbmFtZSwkcm93Wyd1cGxvYWRfaWQnXSkpOwoJfQoKCS8vIHVwZGF0ZSBzZWFyY2ggd29yZHMuCgkkc2VhcmNoID0gY21zX3V0aWxzOjpnZXRfc2VhcmNoX21vZHVsZSgpOwoJaWYoICRzZWFyY2ggKSB1cGxvYWRzX3V0aWxzOjppbmRleF91cGxvYWQoJHJvd1sndXBsb2FkX2lkJ10sJHNlYXJjaCk7CgoJLy8gZG9uZS4KCSR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCwgJ2ZpbGVzJywgYXJyYXkoICdjdXJjYXRlZ29yeScgPT4gJHBhcmFtc1snY2F0ZWdvcnlfaWQnXSkgKTsKfSAvLyBzdWJtaXQKZWxzZSB7CgkvLyBub3RoaW5nIGVsc2UgaGFwcGVuZWQuLi4gYXNzdW1lIHRoYXQgdGhpcyBpcyBhbiBhamF4eSByZXF1ZXN0IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuCn0KCgovLyBHZXQgdGhlIGZpbGVuYW1lIGFuZCBleHRlbnNpb24gb2YgdGhpcyBmaWxlCiRmaWxlZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdHJyY2hyKCRyb3dbJ3VwbG9hZF9uYW1lJ10sJy4nKSk7CiRjYW5fZ2VuX3RodW1ibmFpbCA9IDA7CnsKICAkdGh1bWJfZXh0X2FyciA9IGV4cGxvZGUoIiwiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSk7CiAgZm9yZWFjaCggJHRodW1iX2V4dF9hcnIgYXMgJHRodW1iX2V4dCApIHsKCQlpZiggIi4iLiR0aHVtYl9leHQgPT0gJGZpbGVleHRlbnNpb24gKSB7CgkJCSRjYW5fZ2VuX3RodW1ibmFpbCA9IDE7CgkJCWJyZWFrOwoJCX0KCX0KfQoKLy8KLy8gcG9wdWxhdGUgdGhlIHRlbXBsYXRlCi8vCgovLyBnZXQgdGhlIGZldSBncm91cCBsaXN0CiRmZXUgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ0Zyb250RW5kVXNlcnMnKTsKaWYoIGlzX29iamVjdCgkZmV1KSApIHsKCSRncm91cHMgPSAkZmV1LT5HZXRHcm91cExpc3QoKTsKCWlmKCBpc19hcnJheSgkZ3JvdXBzKSAmJiBjb3VudCgkZ3JvdXBzKSApICRzbWFydHktPmFzc2lnbignZmV1X2dyb3VwbGlzdCcsYXJyYXlfZmxpcCgkZ3JvdXBzKSk7Cn0KCi8vIGdldCB0aGUgY2F0ZWdvcnkgbGlzdAokY2F0ZWdvcnlsaXN0ID0gYXJyYXkgKCk7CnsKCSRkYnJlc3VsdCA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yaWVzKCk7CglpZiggaXNfYXJyYXkoJGRicmVzdWx0KSAmJiBjb3VudCgkZGJyZXN1bHQpICkgewoJCWZvcmVhY2goICRkYnJlc3VsdCBhcyAkY2F0cm93ICkgewoJCQlpZiggJGNhdHJvd1sndXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSAgIT0gJycgKSB7CgkJCQkkY2F0cm93Wyd1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddID0gZXhwbG9kZSgnLCcsJGNhdHJvd1sndXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSk7CgkJCX0KCQkJaWYoICRzZWxfY2F0ZWdvcnkgPT0gJGNhdHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10gKSAkc21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5X2luZm8nLCRjYXRyb3cpOwoJCQkkY2F0ZWdvcnlsaXN0WyRjYXRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ11dID0gJGNhdHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ107CgkJfQoJfQp9CgovLyBnZXQgY3VzdG9tIGZpZWxkIGluZm8uCiRmaWVsZHMgPSBhcnJheSgpOwp7CiAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBPUkRFUiBCWSBpb3JkZXInOwogICR0ZmllbGRzID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgV0hFUkUgdXBsb2FkX2lkID0gPyc7CgkkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnksYXJyYXkoJHBhcmFtc1sndXBsb2FkX2lkJ10pKTsKCSR0dmFscyA9IGNnZV9hcnJheTo6dG9faGFzaCgkdG1wLCdmbGRfaWQnKTsKCiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRmaWVsZHMpOyAkaSsrICkgewoJCSR0ZmllbGRzWyRpXVsnYXR0cmliJ10gPSB1bnNlcmlhbGl6ZSgkdGZpZWxkc1skaV1bJ2F0dHJpYnMnXSk7CgkJdW5zZXQoJHRmaWVsZHNbJGldWydhdHRyaWJzJ10pOwoJCSR0ZmllbGRzWyRpXVsndmFsdWUnXSA9ICcnOwoJCWlmKCBpc19hcnJheSgkdHZhbHMpICYmIGlzc2V0KCR0dmFsc1skdGZpZWxkc1skaV1bJ2lkJ11dKSApICR0ZmllbGRzWyRpXVsndmFsdWUnXSA9ICR0dmFsc1skdGZpZWxkc1skaV1bJ2lkJ11dWyd2YWx1ZSddOwoKCQlzd2l0Y2goJHRmaWVsZHNbJGldWyd0eXBlJ10pIHsKCQljYXNlICd0ZXh0YXJlYSc6CgkJCSR0ZmllbGRzWyRpXVsnaW5wdXQnXSA9CgkJCQkkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoaXNzZXQoJHRmaWVsZHNbJGldWydhdHRyaWInXVsndXNld3lzaXd5ZyddKSAmJiAkdGZpZWxkc1skaV1bJ2F0dHJpYiddWyd1c2V3eXNpd3lnJ10gPT0gMSAmJgoJCQkJCQkJCQkJCQkJCQkkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dfY29tbWVudF93eXNpd3lnJywwKSwKCQkJCQkJCQkJCQkJCQkJJGlkLCAkdGZpZWxkc1skaV1bJ3ZhbHVlJ10sJ2ZpZWxkXycuJHRmaWVsZHNbJGldWydpZCddKTsKCQkJYnJlYWs7CgkJY2FzZSAnZHJvcGRvd24nOgoJCWNhc2UgJ211bHRpc2VsZWN0JzoKCQkJaWYoIGlzc2V0KCR0ZmllbGRzWyRpXVsnYXR0cmliJ11bJ29wdGlvbnMnXSkgKSB7CgkJCQkkdG1wID0gZXhwbG9kZSgiXG4iLCR0ZmllbGRzWyRpXVsnYXR0cmliJ11bJ29wdGlvbnMnXSk7CgkJCQkkdG1wMiA9IGFycmF5KCk7CgkJCQlmb3JlYWNoKCAkdG1wIGFzICRvbmUgKSB7CgkJCQkJJGtleSA9ICR2YWx1ZSA9ICRvbmU7CgkJCQkJaWYoIHN0cnBvcygkb25lLCc9JykgIT09IEZBTFNFICkgbGlzdCgka2V5LCR2YWx1ZSkgPSBleHBsb2RlKCc9Jyx0cmltKCRvbmUpLDIpOwoJCQkJCSR0bXAyW3RyaW0oJHZhbHVlKV0gPSB0cmltKCRrZXkpOwoJCQkJfQoJCQkJJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddID0gJHRtcDI7CgkJCQkkdGZpZWxkc1skaV1bJ3ZhbHVlJ10gPSBjZ2VfYXJyYXk6OnNtYXJ0X2V4cGxvZGUoJHRmaWVsZHNbJGldWyd2YWx1ZSddKTsKCQkJfQoJCQlicmVhazsKCQl9CgoJCSRmaWVsZHNbJHRmaWVsZHNbJGldWydpZCddXSA9ICR0ZmllbGRzWyRpXTsKCX0KfQoKJHNtYXJ0eS0+YXNzaWduKCd1cGxvYWRfaW5mbycsJHJvdyk7CiRzbWFydHktPmFzc2lnbiAoInN0YXJ0Zm9ybSIsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZWRpdHVwbG9hZCcsICRyZXR1cm5pZCwgJ3Bvc3QnLCAnbXVsdGlwYXJ0L2Zvcm0tZGF0YScpKTsKJHNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKaWYoIGNvdW50KCRmaWVsZHMpICkgJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24gKCdjYW5fZ2VuX3RodW1ibmFpbCcsICRjYW5fZ2VuX3RodW1ibmFpbCApOwokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF91cGxvYWRuYW1lJywkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCRpZCwnaW5wdXRfdXBsb2FkbmFtZScsJHJvd1sndXBsb2FkX25hbWUnXSwgNTAsIDI1NSApKTsKLy8gYW5kIHRoZSBjYXRlZ29yeSBpbmZvIGZvciB0aGlzIGNhdGVnb3J5CiRjYXRwYXRoID0gJHRoaXMtPmdldENhdGVnb3J5UGF0aEZyb21JRCgkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSk7Ci8vIHRodW1ibmFpbD8KJHRuZmlsZSA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSApOwokY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwppZiggaXNfZmlsZSgkdG5maWxlKSApIHsKCSR0bnVybCA9ICRjb25maWdbJ3VwbG9hZHNfdXJsJ10uIi8iLiRjYXRwYXRoLicvJy4kcm93Wyd1cGxvYWRfdGh1bWJuYWlsJ107Cgkkc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfdGh1bWJuYWlsJywgJHRoaXMtPkxhbmcoJ3RodW1ibmFpbCcpLic6Jyk7Cgkkc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfbmV3dGh1bWJuYWlsJywgJHRoaXMtPkxhbmcoJ25ld3RodW1ibmFpbCcpLic6Jyk7Cgkkc21hcnR5LT5hc3NpZ24oICdpbnB1dF9uZXd0aHVtYm5haWwnLCR0aGlzLT5DcmVhdGVGaWxlVXBsb2FkSW5wdXQoJGlkLCdpbnB1dF9uZXd0aHVtYm5haWwnLCcnLDUwKSApOwoJJHNtYXJ0eS0+YXNzaWduKCd0aHVtYl91cmwnLCR0bnVybCk7Cgkkc21hcnR5LT5hc3NpZ24gKCdwaWNfdGh1bWJuYWlsJywgJzxpbWcgc3JjPSInLiR0bnVybC4nIiBib3JkZXI9IjAiLz4nKTsKfQokc21hcnR5LT5hc3NpZ24oJ3ZpZXdsaW5rJywkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnZ2V0bWltZWZpbGUnLCRyZXR1cm5pZCwkdGhpcy0+TGFuZygndmlldycpLCdpY29ucy9zeXN0ZW0vdmlldy5naWYnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd1cGxvYWRfaWQnPT4kcm93Wyd1cGxvYWRfaWQnXSksJycsJycsVFJVRSxGQUxTRSwndGFyZ2V0PSJfYmxhbmsiJykpOwokcmF3ZmlsZSA9ICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0cGF0aC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRyb3dbJ3VwbG9hZF9uYW1lJ10gKTsKJHNtYXJ0eS0+YXNzaWduICgnbmFtZW1lc3NhZ2UnLCAkdGhpcy0+TGFuZygncmVuYW1lbWVzc2FnZScpKTsKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VwbG9hZGRhdGUnLCAkdGhpcy0+TGFuZygnZGF0ZXVwbG9hZGVkJykpOwokc21hcnR5LT5hc3NpZ24gKCdkYXRhX3VwbG9hZGRhdGUnLCAkcm93Wyd1cGxvYWRfZGF0ZSddKTsKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VwbG9hZHNpemUnLCAkdGhpcy0+TGFuZygnc2l6ZWtiJykpOwokc21hcnR5LT5hc3NpZ24gKCdkYXRhX3VwbG9hZHNpemUnLCBpbnR2YWwoJHJvd1sndXBsb2FkX3NpemUnXSAvIDEwMjQuMCArIDAuNSkpOwokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfdXBsb2FkYXV0aG9yJywgJHRoaXMtPkxhbmcoJ2F1dGhvcicpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfdXBsb2FkYXV0aG9yJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsICdpbnB1dF91cGxvYWRhdXRob3InLCRyb3dbJ3VwbG9hZF9hdXRob3InXSwgMjAsIDI1NSkpOwokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfbW92ZWNhdGVnb3J5JywgJHRoaXMtPkxhbmcgKCdwcm9tcHRfY2F0ZWdvcnluYW1lJykpOwokc21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5bGlzdCcsYXJyYXlfZmxpcCgkY2F0ZWdvcnlsaXN0KSk7CiRzbWFydHktPmFzc2lnbignc2VsX2NhdGVnb3J5Jywkc2VsX2NhdGVnb3J5KTsKJHNtYXJ0eS0+YXNzaWduICgncGF0aG1lc3NhZ2UnLCAkdGhpcy0+TGFuZygncGF0aG1lc3NhZ2UnKSk7Cgokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfdXBsb2Fkc3VtbWFyeScsICR0aGlzLT5MYW5nICgnc3VtbWFyeScpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfdXBsb2Fkc3VtbWFyeScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfdXBsb2Fkc3VtbWFyeScsJHJvd1sndXBsb2FkX3N1bW1hcnknXSwgODAsIDI1NSkpOwoKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VwbG9hZGRlc2MnLCAkdGhpcy0+TGFuZyAoJ2Rlc2NyaXB0aW9uJykpOwokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF91cGxvYWRkZXNjJywkdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsICRyb3dbJ3VwbG9hZF9kZXNjcmlwdGlvbiddLCAnaW5wdXRfdXBsb2FkZGVzYycgKSk7Cgokc21hcnR5LT5hc3NpZ24gKCdoaWRkZW4nLAoJCSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4gKCRpZCwgJ3VwbG9hZF9pZCcsJHBhcmFtc1sndXBsb2FkX2lkJ10pLgoJCSAkdGhpcy0+Q3JlYXRlSW5wdXRIaWRkZW4gKCRpZCwgJ2NhdGVnb3J5X2lkJywkcGFyYW1zWydjYXRlZ29yeV9pZCddKSk7CgovLyBwb3B1bGF0ZSB0aGUgcm93cyBvZiBkb3dubG9hZCBpbmZvcm1hdGlvbgokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZG93bmxvYWRzIFdIRVJFIGZpbGVfaWQgPSA/IE9SREVSIEJZIGRvd25sb2FkX2RhdGUgREVTQyBMSU1JVCAxMDAiOwokZGJyZXN1bHQgPSAkZGItPkdldEFycmF5KCAkcXVlcnksIGFycmF5KCAkcGFyYW1zWyd1cGxvYWRfaWQnXSApICk7Cgokc21hcnR5LT5hc3NpZ24oJ2RhdGV0ZXh0JywgJHRoaXMtPkxhbmcoJ2RhdGUnKSk7CiRzbWFydHktPmFzc2lnbignaXB0ZXh0JywgJHRoaXMtPkxhbmcoJ2lwX2FkZHJlc3MnKSk7CiRzbWFydHktPmFzc2lnbigndXNlcnRleHQnLCAkdGhpcy0+TGFuZygndXNlcm5hbWUnKSk7CiRyb3dhcnJheSA9IGFycmF5KCk7CiRyb3djbGFzcyA9ICdyb3cxJzsKZm9yZWFjaCggJGRicmVzdWx0IGFzICRyb3cgKSB7Cgkkb25lcm93ID0gbmV3IHN0ZENsYXNzKCk7Cgkkb25lcm93LT5kYXRlID0gJHJvd1snZG93bmxvYWRfZGF0ZSddOwoJJG9uZXJvdy0+aXAgICA9ICRyb3dbJ2Rvd25sb2FkX2lwJ107Cgkkb25lcm93LT51c2VyID0gJHJvd1snZG93bmxvYWRfdXNlciddOwoJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJJHJvd2FycmF5W10gPSAkb25lcm93OwoJKCRyb3djbGFzcyA9PSAicm93MSIgPyAkcm93Y2xhc3MgPSAicm93MiIgOiAkcm93Y2xhc3MgPSAicm93MSIpOwp9Cgokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduKCdpdGVtY291bnQnLCBjb3VudCgkcm93YXJyYXkpKTsKJHNtYXJ0eS0+YXNzaWduKCdhbGxvd19jaGFuZ2VkYXRlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dfY2hhbmdlZGF0ZScsMCkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCdlZGl0dXBsb2FkLnRwbCcpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.getfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKJHBhZ2VpZCA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnZXRmaWxlX3Jlc3VsdHBhZ2UnKTsKaWYoICRwYWdlaWQgPD0gMCB8fCAkcmV0dXJuaWQgPD0gMCApIHsKICAkY29udGVudG9wcyA9ICRnQ21zLT5HZXRDb250ZW50T3BlcmF0aW9ucygpOwogICRwYWdlaWQgPSAkY29udGVudG9wcy0+R2V0RGVmYXVsdENvbnRlbnQoKTsKfQppZiggJHBhZ2VpZCA+PSAwICkgJHJldHVybmlkID0gJHBhZ2VpZDsKCmlmKCAhaXNzZXQoJHBhcmFtc1sndXBsb2FkX2lkJ10pICYmICFpc3NldCgkcGFyYW1zWyd1cmxfa2V5J10pICkgewogIGNnZV9yZWRpcmVjdDo6cmVkaXJlY3Rfd2l0aF9lcnJvcigkcmV0dXJuaWQsJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnLCd1cGxvYWRfaWQnKSk7CiAgcmV0dXJuOwp9CgovLyBnZXQgdGhlIGlkCiRmaWxlX2RldGFpbHMgPSAnJzsKJGZpbGVfaWQgPSAnJzsKJHVybF9rZXkgPSAnJzsKaWYoIGlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSApIHsKICAkZmlsZV9pZCA9IChpbnQpJHBhcmFtc1sndXBsb2FkX2lkJ107Cn0KZWxzZSBpZiggaXNzZXQoJHBhcmFtc1sndXJsX2tleSddKSApIHsKICAkdXJsX2tleSA9IHRyaW0oJHBhcmFtc1sndXJsX2tleSddKTsKICAkbm93ID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwogICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc190aW1lbGltaXQgV0hFUkUgdXJsX2tleSA9ID8gQU5EICgoZXhwaXJlcyA+ICRub3cpIE9SIChleHBpcmVzIElTIE5VTEwpKSI7CiAgJHRpbWVsaW1pdF9kZXRhaWxzID0gJGRiLT5HZXRSb3coJHF1ZXJ5LGFycmF5KCR1cmxfa2V5KSk7CgogIGlmKCAhJHRpbWVsaW1pdF9kZXRhaWxzICkgewogICAgLy8gYmFkIG9yIGV4cGlyZWQga2V5CiAgICBjZ2VfcmVkaXJlY3Q6OnJlZGlyZWN0X3dpdGhfZXJyb3IoJHJldHVybmlkLCR0aGlzLT5MYW5nICgnZXJyb3JfaW52YWxpZF9rZXknKSk7CiAgICByZXR1cm47CiAgfQoKICAkcXVlcnkgPSAnU0VMRUNUIGNvdW50KGZpbGVfaWQpIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2Rvd25sb2FkcyBXSEVSRSBmaWxlX2lkID0gPyBBTkQgdXJsX2tleSA9ID8nOwogICRjb3VudCA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkdGltZWxpbWl0X2RldGFpbHNbJ3VwbG9hZF9pZCddLCR1cmxfa2V5KSk7CiAgaWYoICRjb3VudCA+PSAkdGltZWxpbWl0X2RldGFpbHNbJ21heF9kb3dubG9hZHMnXSAmJiAkdGltZWxpbWl0X2RldGFpbHNbJ21heF9kb3dubG9hZHMnXSA+IDAgKSB7CiAgICAvLyBiYWQgb3IgZXhwaXJlZCBrZXkKICAgIGNnZV9yZWRpcmVjdDo6cmVkaXJlY3Rfd2l0aF9lcnJvcigkcmV0dXJuaWQsJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnZhbGlkX2tleScpKTsKICAgIHJldHVybjsKICB9CiAgJGZpbGVfaWQgPSAkdGltZWxpbWl0X2RldGFpbHNbJ3VwbG9hZF9pZCddOwp9CgokZmlsZV9kZXRhaWxzID0gJHRoaXMtPkdldFVwbG9hZERldGFpbHMoICRmaWxlX2lkLCAkcmV0dXJuaWQgKTsKLy8gZ2V0IHRoZSBkZXRhaWxzCmlmKCAhJGZpbGVfZGV0YWlsc1sndXBsb2FkX25hbWUnXSApIHsKICAvLyB0b2RvIGRpc3BsYXkgZXJyb3IKICBjZ2VfcmVkaXJlY3Q6OnJlZGlyZWN0X3dpdGhfZXJyb3IoJHJldHVybmlkLCR0aGlzLT5MYW5nKCAnZXJyb3JfZmlsZW5vdGZvdW5kJywgJGZpbGVfaWQgKSApOwogIHJldHVybjsKfQoKJGNhdGVnb3J5X2RldGFpbHMgPSAkdGhpcy0+X2dldFVwbG9hZENhdGVnb3J5RGV0YWlscyggJGZpbGVfZGV0YWlsc1sndXBsb2FkX2NhdGVnb3J5X2lkJ10gKTsKJHBhdGggPSAnLyc7CmlmKCAhJGNhdGVnb3J5X2RldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10gKSB7CiAgLy8gdG9kbyBkaXNwbGF5IGVycm9yCiAgY2dlX3JlZGlyZWN0OjpyZWRpcmVjdF93aXRoX2Vycm9yKCRyZXR1cm5pZCwkdGhpcy0+TGFuZyggJ2Vycm9yX2RiZXJyb3InICkgKTsKICByZXR1cm47Cn0KCgokZmlsZSA9ICR0aGlzLT5fdXBsb2FkUGF0aCggJGNhdGVnb3J5X2RldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10sIHN0cl9yZXBsYWNlKCBhcnJheSgnICcsJyUyMCcpLGFycmF5KCdfJywnXycpLCRmaWxlX2RldGFpbHNbJ3VwbG9hZF9uYW1lJ10gKSApOwppZiggIWZpbGVfZXhpc3RzKCAkZmlsZSApIHx8ICFpc19yZWFkYWJsZSggJGZpbGUgKSApIHsKICBjZ2VfcmVkaXJlY3Q6OnJlZGlyZWN0X3dpdGhfZXJyb3IoJHJldHVybmlkLCR0aGlzLT5MYW5nKCAnZXJyb3JfZmlsZW5vdGZvdW5kJywgJGZpbGUgKSApOwogIHJldHVybjsKfQoKCi8vIGNoZWNrIGZvciBwZXJtaXNzaW9uLCBpZiBGRVUgbW9kdWxlIGV4aXN0cywgYW5kIHRoZSB1cGxvYWRzIGdyb3VwbGlzdCBpcwovLyBub3QgbnVsbCwgYW5kIHRoZSByZXR1cm5pZCBpcyBub3QgZW1wdHkgKHdlJ3JlIG9uIHRoZSBmcm9udGVuZCkKJHJlc3VsdCA9ICR0aGlzLT5fQ2hlY2tEb3dubG9hZFNlY3VyaXR5KCRjYXRlZ29yeV9kZXRhaWxzKTsKaWYoICEkcmVzdWx0ICkgewogIGF1ZGl0KCRmaWxlX2RldGFpbHNbJ3VwbG9hZF9pZCddLCR0aGlzLT5HZXROYW1lKCksJ0F0dGVtcHQgdG8gYWNjZXNzIGZpbGUgJy4kZmlsZS4nICB3aXRob3V0IHByb3BlciBwZXJtaXNzaW9ucycpOwogIGNnZV9yZWRpcmVjdDo6cmVkaXJlY3Rfd2l0aF9lcnJvcigkcmV0dXJuaWQsJHRoaXMtPkxhbmcoJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnKSApOwogIHJldHVybjsKfQppZiggISR0aGlzLT5fQ2hlY2tGaWxlRG93bmxvYWRTZWN1cml0eSgkZmlsZV9kZXRhaWxzKSApIHsKICBhdWRpdCgkZmlsZV9kZXRhaWxzWyd1cGxvYWRfaWQnXSwkdGhpcy0+R2V0TmFtZSgpLCdBdHRlbXB0IHRvIGFjY2VzcyBmaWxlICcuJGZpbGUuJyAgd2l0aG91dCBwcm9wZXIgcGVybWlzc2lvbnMnKTsKICByZXR1cm47Cn0KCi8vIHR1cm4gb2ZmIHpsaWIgY29tcHJlc3Npb24KaWYoaW5pX2dldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nKSkgaW5pX3NldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nLCAnT2ZmJyk7CmlmKCFpbmlfZ2V0X2Jvb2xlYW4oJ3NhZmVfbW9kZScpKSBzZXRfdGltZV9saW1pdCg5OTk5KTsKCiRjaHVua3NpemUgPSBpbnR2YWwoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rvd25sb2FkX2NodW5rc2l6ZScsOCkpICogMTAyNDsKJGJuID0gYmFzZW5hbWUoJGZpbGUpOwoKJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwpmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQpoZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7CmhlYWRlcignRXhwaXJlczogMCcpOwpoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IG11c3QtcmV2YWxpZGF0ZSwgcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCcpOwpoZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHByaXZhdGUnLGZhbHNlKTsKaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CmhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nKTsKaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiRiblwiIiApOwpoZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwpoZWFkZXIoJ0NvbnRlbnQtTGVuZ3RoOiAnIC4gZmlsZXNpemUoJGZpbGUpKTsKCiRoYW5kbGU9Zm9wZW4oJGZpbGUsJ3JiJyk7CiRjb250ZW50cyA9ICcnOwpkbyB7CiAgJGRhdGEgPSBmcmVhZCgkaGFuZGxlLCRjaHVua3NpemUpOwogIGlmKCBzdHJsZW4oJGRhdGEpID09IDAgKSBicmVhazsKICBwcmludCgkZGF0YSk7Cn0gd2hpbGUodHJ1ZSk7CmZjbG9zZSgkaGFuZGxlKTsKCi8vIG5vdyB0byBhZGQgdGhlIGRvd25sb2FkIHNodHVmZiB0byB0aGUgZGF0YWJhc2UKLy8gaWYgd2UgYXJlIG5vdCBleGNsdWRpbmcgdGhpcyBzdWJuZXQKJHN1Ym5ldHMgPSBzcGxpdCgiLCIsJHRoaXMtPkdldFByZWZlcmVuY2UoInN1Ym5ldF9leGNsdXNpb24iKSk7CiR0ZXN0ID0gMDsKZm9yZWFjaCgkc3VibmV0cyBhcyAkc3VibmV0KSB7CiAgJHRlc3QgPSAkdGhpcy0+X3Rlc3RpcCggJHN1Ym5ldCwgZ2V0ZW52KCJSRU1PVEVfQUREUiIgKSApOwogIGlmKCAkdGVzdCApIGV4aXQoKTsgLy8gZG9uJ3QgYWxsb3cgYW55IG1vcmUgcHJvY2Vzc2luZwp9CgovLyBnZXQgYSBuZXcgdmFsdWUgZnJvbSB0aGUgc2VxdWVuY2UgZGF0YWJhc2UKJG5ld2lkID0gJGRiLT5HZW5JRCggY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHNfc2VxIiApOwoKLy8gZ2V0IGEgdXNlcm5hbWUKJHVzZXJuYW1lID0gJ2Fub255bW91cyc7CiRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CmlmKCAkZmV1c2VycyApIHsKICAkbmFtZSA9ICRmZXVzZXJzLT5Mb2dnZWRpbk5hbWUoKTsKICBpZiggJG5hbWUgIT0gIiIgKSAkdXNlcm5hbWUgPSAkbmFtZTsKfQoKLy8gaW5zZXJ0IHRoZSBkb3dubG9hZCByZWNvcmQKJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgKGRvd25sb2FkX2lkLCBmaWxlX2lkLCBkb3dubG9hZF9kYXRlLCBkb3dubG9hZF9pcCwgZG93bmxvYWRfdXNlciwgdXJsX2tleSkgVkFMVUVTICg/LD8sPyw/LD8sPykiOwokZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICRuZXdpZCwgJGZpbGVfaWQsIHRyaW0oJGRiLT5EQlRpbWVTdGFtcCh0aW1lKCkpLCInIiksIGdldGVudigiUkVNT1RFX0FERFIiKSwgJHVzZXJuYW1lLCAkdXJsX2tleSkgKTsKLyogSSB3b3VsZCBub3JtYWxseSBkaXNwbGF5IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBkb24ndCB3YW50IHBlb3BsZSB0byBuZWNlc3NhcmlseSBrbm93IEkgYW0gdHJhY2tpbmcgdGhlbSAqLwokdGhpcy0+QXVkaXQoIDAsICR0aGlzLT5sYW5nKCdmcmllbmRseW5hbWUnKSwgJHRoaXMtPmxhbmcoJ2Rvd25sb2FkZWQnLCAkZmlsZSkgKTsKCi8vIHNlbmQgYW4gZXZlbnQKJHBhcm1zID0gYXJyYXkoKTsKJHBhcm1zWydpZCddID0gJGZpbGVfaWQ7CiRwYXJtc1snbmFtZSddID0gJGZpbGU7CiRwYXJtc1snaXAnXSA9IGdldGVudigiUkVNT1RFX0FERFIiKTsKJHRoaXMtPlNlbmRFdmVudCggJ09uRG93bmxvYWQnLCAkcGFybXMgKTsKCi8vIGRvbid0IGFsbG93IGFueSBtb3JlIHByb2Nlc3NpbmcKZXhpdCgpOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.getimage.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKLy8gTm90ZTogVGhpcyBmaWxlIGlzIHZpcnR1YWxseSBpZGVudGljYWwgdG8gYWN0aW9uLmdldGZpbGUucGhwCi8vIGFuZCB0aGlzIHNob3VsZCBiZSBvcHRpbWl6ZWQKCmlmKCAhaXNzZXQoICRwYXJhbXNbJ3VwbG9hZF9pZCddICkgKSByZXR1cm47ICAvLyB0b2RvLCBhZGQgc29tZXRoaW5nIHRvIGFuIGVycm9yIGxvZwoKLy8gZ2V0IHRoZSBpZAokZmlsZV9pZCA9ICRwYXJhbXNbJ3VwbG9hZF9pZCddOwoKLy8gZ2V0IHRoZSBkZXRhaWxzCiRmaWxlX2RldGFpbHMgPSAkdGhpcy0+R2V0VXBsb2FkRGV0YWlscyggJGZpbGVfaWQgKTsKCmlmKCAhJGZpbGVfZGV0YWlsc1sndXBsb2FkX25hbWUnXSApIHJldHVybjsgIC8vIHRvZG8gZGlzcGxheSBlcnJvcgokY2F0ZWdvcnlfZGV0YWlscyA9ICR0aGlzLT5fZ2V0VXBsb2FkQ2F0ZWdvcnlEZXRhaWxzKCAkZmlsZV9kZXRhaWxzWyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSApOwokcGF0aCA9ICcvJzsKaWYoICEkY2F0ZWdvcnlfZGV0YWlsc1sndXBsb2FkX2NhdGVnb3J5X3BhdGgnXSApIHJldHVybjsgIC8vIHRvZG8gZGlzcGxheSBlcnJvcgoKJGZpbGUgPSAkdGhpcy0+X3VwbG9hZFBhdGgoICRjYXRlZ29yeV9kZXRhaWxzWyd1cGxvYWRfY2F0ZWdvcnlfcGF0aCddLCBzdHJfcmVwbGFjZSggYXJyYXkoJyAnLCclMjAnKSxhcnJheSgnXycsJ18nKSwkZmlsZV9kZXRhaWxzWyd1cGxvYWRfbmFtZSddICkgKTsKCmlmKCAhZmlsZV9leGlzdHMoICRmaWxlICkgfHwgIWlzX3JlYWRhYmxlKCAkZmlsZSApICkgcmV0dXJuOyAgLy8gdG9kbyBkaXNwbGF5IGVycm9yCgovLyBjaGVjayBmb3IgcGVybWlzc2lvbiwgaWYgRkVVIG1vZHVsZSBleGlzdHMsIGFuZCB0aGUgdXBsb2FkcyBncm91cGxpc3QgaXMKLy8gbm90IG51bGwsIGFuZCB0aGUgcmV0dXJuaWQgaXMgbm90IGVtcHR5ICh3ZSdyZSBvbiB0aGUgZnJvbnRlbmQpCiRyZXN1bHQgPSAkdGhpcy0+X0NoZWNrRG93bmxvYWRTZWN1cml0eSgkY2F0ZWdvcnlfZGV0YWlscyk7CmlmKCAhJHJlc3VsdCApIHsKICAvLyB0b2RvLCBkaXNwbGF5IGVycm9yIHNvbWVob3cKICBhdWRpdCgkZmlsZV9kZXRhaWxzWyd1cGxvYWRfaWQnXSwkdGhpcy0+R2V0TmFtZSgpLCdBdHRlbXB0IHRvIGFjY2VzcyBmaWxlICcuJGZpbGUuJyAgd2l0aG91dCBwcm9wZXIgcGVybWlzc2lvbnMnKTsKICByZXR1cm47Cn0KCmlmKCAhJHRoaXMtPl9DaGVja0ZpbGVEb3dubG9hZFNlY3VyaXR5KCRmaWxlX2RldGFpbHMpICkgewogIGF1ZGl0KCRmaWxlX2RldGFpbHNbJ3VwbG9hZF9pZCddLCR0aGlzLT5HZXROYW1lKCksJ0F0dGVtcHQgdG8gYWNjZXNzIGZpbGUgJy4kZmlsZS4nICB3aXRob3V0IHByb3BlciBwZXJtaXNzaW9ucycpOwogIHJldHVybjsKfQoKLy8gdHVybiBvZmYgemxpYiBjb21wcmVzc2lvbgppZihAaW5pX2dldCgnemxpYi5vdXRwdXRfY29tcHJlc3Npb24nKSkgIEBpbmlfc2V0KCd6bGliLm91dHB1dF9jb21wcmVzc2lvbicsICdPZmYnKTsKCmlmKCFAaW5pX2dldF9ib29sZWFuKCdzYWZlX21vZGUnKSkgIEBzZXRfdGltZV9saW1pdCgwKTsKCiRjaHVua3NpemUgPSBpbnR2YWwoJHRoaXMtPkdldFByZWZlcmVuY2UoJ2Rvd25sb2FkX2NodW5rc2l6ZScsOCkpICogMTAyNDsKJGhhbmRsZXJzID0gb2JfbGlzdF9oYW5kbGVycygpOwpmb3IgKCRjbnQgPSAwOyAkY250IDwgc2l6ZW9mKCRoYW5kbGVycyk7ICRjbnQrKykgeyBvYl9lbmRfY2xlYW4oKTsgfQoKaGVhZGVyKCdDb250ZW50LVR5cGU6IGltYWdlLyonKTsKaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlKSk7CiRoYW5kbGU9Zm9wZW4oJGZpbGUsJ3JiJyk7CiRjb250ZW50cyA9ICcnOwpkbyB7CiAgJGRhdGEgPSBmcmVhZCgkaGFuZGxlLCRjaHVua3NpemUpOwogIGlmKCBzdHJsZW4oJGRhdGEpID09IDAgKSBicmVhazsKICBwcmludCgkZGF0YSk7Cn0gd2hpbGUodHJ1ZSk7CmZjbG9zZSgkaGFuZGxlKTsKCi8vIG5vdyB0byBhZGQgdGhlIGRvd25sb2FkIHNodHVmZiB0byB0aGUgZGF0YWJhc2UKLy8gaWYgd2UgYXJlIG5vdCBleGNsdWRpbmcgdGhpcyBzdWJuZXQKJHN1Ym5ldHMgPSBzcGxpdCgiLCIsJHRoaXMtPkdldFByZWZlcmVuY2UoInN1Ym5ldF9leGNsdXNpb24iKSk7CiR0ZXN0ID0gMDsKZm9yZWFjaCgkc3VibmV0cyBhcyAkc3VibmV0KSB7CiAgJHRlc3QgPSAkdGhpcy0+X3Rlc3RpcCggJHN1Ym5ldCwgZ2V0ZW52KCJSRU1PVEVfQUREUiIgKSApOwogIGlmKCAkdGVzdCApIGV4aXQoKTsKfQoKLy8gZ2V0IGEgbmV3IHZhbHVlIGZyb20gdGhlIHNlcXVlbmNlIGRhdGFiYXNlCiRkYiA9ICR0aGlzLT5HZXREYigpOwokbmV3aWQgPSAkZGItPkdlbklEKCBjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2Fkc19zZXEiICk7CgovLyBnZXQgYSB1c2VybmFtZQokdXNlcm5hbWUgPSAndW5rbm93bic7CiRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CmlmKCAkZmV1c2VycyApIHsKICAkbmFtZSA9ICRmZXVzZXJzLT5Mb2dnZWRpbk5hbWUoKTsKICBpZiggJG5hbWUgIT0gIiIgKSAkdXNlcm5hbWUgPSAkbmFtZTsKfQoKLy8gaW5zZXJ0IHRoZSBkb3dubG9hZCByZWNvcmQKJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgVkFMVUVTICg/LD8sPyw/LD8pIjsKJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkbmV3aWQsICRmaWxlX2lkLCB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwiJyIpLCBnZXRlbnYoIlJFTU9URV9BRERSIiksICR1c2VybmFtZSkgKTsKCi8qIEkgd291bGQgbm9ybWFsbHkgZGlzcGxheSBhbiBlcnJvciBtZXNzYWdlLCBidXQgZG9uJ3Qgd2FudCBwZW9wbGUgdG8gbmVjZXNzYXJpbHkga25vdyBJIGFtIHRyYWNraW5nIHRoZW0gKi8KJHRoaXMtPkF1ZGl0KCAwLCAkdGhpcy0+bGFuZygnZnJpZW5kbHluYW1lJyksICR0aGlzLT5sYW5nKCdkb3dubG9hZGVkJywgJGZpbGUpICk7CgovLyBkb24ndCBhbGxvdyBhbnkgbW9yZSBwcm9jZXNzaW5nCmV4aXQoKTsKCi8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.getmimefile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ01hbmFnZSBVcGxvYWRzJykgJiYgISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykpIHJldHVybjsKCi8vCi8vIGluaXRpYWxpemF0aW9uCi8vCiR1cGxvYWRfaWQgPSAnJzsKCi8vCi8vIHNldHVwCi8vCmlmKCBpc3NldCgkcGFyYW1zWyd1cGxvYWRfaWQnXSkgKSAkdXBsb2FkX2lkID0gKGludCkkcGFyYW1zWyd1cGxvYWRfaWQnXTsKaWYoICR1cGxvYWRfaWQgPD0gMCApIGRpZSgnZXJyb3IgLi4uIG5vIHVwbG9hZCcpOwoKJHJvdyA9IHVwbG9hZHNfdXRpbHM6OmdldF91cGxvYWRfZGV0YWlscygkdXBsb2FkX2lkKTsKaWYoICFpc19hcnJheSgkcm93KSApIGRpZSgnZXJyb3IgLi4uIGNvdWxkIG5vdCBmaW5kIHVwbG9hZCcpOwoKJGNhdHBhdGggPSAkdGhpcy0+Z2V0Q2F0ZWdvcnlQYXRoRnJvbUlEKCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKTsKJGZuID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoJGNhdHBhdGguRElSRUNUT1JZX1NFUEFSQVRPUi4kcm93Wyd1cGxvYWRfbmFtZSddKTsKaWYoICFmaWxlX2V4aXN0cygkZm4pICkgZGllKCdlcnJvciAuLi4gZmlsZSBub3QgZm91bmQgJy4kZm4pOwoKJG1pbWV0eXBlID0gY2dlX3V0aWxzOjpnZXRfbWltZV90eXBlKCRmbik7CmlmKCAhJG1pbWV0eXBlICkgJG1pbWV0eXBlID0gJ2FwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSc7CmlmKGluaV9nZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJykpIGluaV9zZXQoJ3psaWIub3V0cHV0X2NvbXByZXNzaW9uJywgJ09mZicpOwoKJGJuID0gYmFzZW5hbWUoJGZuKTsKc2V0X3RpbWVfbGltaXQoOTk5KTsKJGNodW5rc2l6ZSA9IGludHZhbCgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZG93bmxvYWRfY2h1bmtzaXplJyw4KSkgKiAxMDI0OwokaGFuZGxlcnMgPSBvYl9saXN0X2hhbmRsZXJzKCk7CmZvciAoJGNudCA9IDA7ICRjbnQgPCBzaXplb2YoJGhhbmRsZXJzKTsgJGNudCsrKSB7IG9iX2VuZF9jbGVhbigpOyB9CgpoZWFkZXIoJ0NvbnRlbnQtVHlwZTogJy4kbWltZXR5cGUpOwpoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGlubGluZTsgZmlsZW5hbWU9XCIkYm5cIiIgKTsKCiRoYW5kbGU9Zm9wZW4oJGZuLCdyYicpOwokY29udGVudHMgPSAnJzsKZG8gewogICRkYXRhID0gZnJlYWQoJGhhbmRsZSwkY2h1bmtzaXplKTsKICBpZiggc3RybGVuKCRkYXRhKSA9PSAwICkgYnJlYWs7CiAgcHJpbnQoJGRhdGEpOwp9IHdoaWxlKHRydWUpOwpmY2xvc2UoJGhhbmRsZSk7CmV4aXQoKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.save_admin_prefs.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSByZXR1cm47CgokdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ2F1dG93YXRlcm1hcmsnLCRwYXJhbXNbJ2F1dG93YXRlcm1hcmsnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgndmFsaWRfdXBsb2FkZXh0ZW5zaW9ucycsIGlzc2V0ICgkcGFyYW1zWyd2YWxpZF91cGxvYWRleHRlbnNpb25zJ10pID8gJHBhcmFtc1sndmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddIDogJzAnKTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCdzdWJuZXRfZXhjbHVzaW9ucycsIGlzc2V0ICgkcGFyYW1zWydzdWJuZXRfZXhjbHVzaW9ucyddKSA/ICRwYXJhbXNbJ3N1Ym5ldF9leGNsdXNpb25zJ10gOiAnMCcpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ2NyZWF0ZV9kdW1teV9pbmRleF9odG1sJywgaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2R1bW15X2luZGV4X2h0bWwnXSkgPyAkcGFyYW1zWydpbnB1dF9kdW1teV9pbmRleF9odG1sJ10gOiAnMCcpOwokdGhpcy0+c2V0UHJlZmVyZW5jZSAoJ3NlbmRfdXBsb2FkX25vdGlmaWNhdGlvbnNfdG8nLCBpc3NldCAoJHBhcmFtc1snZW1haWxfb25fdXBsb2FkJ10pID8gJHBhcmFtc1snZW1haWxfb25fdXBsb2FkJ10gOiAnJyApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ3JlZGlyZWN0X29uX3VwbG9hZCcsIGlzc2V0ICgkcGFyYW1zWydyZWRpcmVjdF9vbl91cGxvYWQnXSkgPyAkcGFyYW1zWydyZWRpcmVjdF9vbl91cGxvYWQnXSA6ICcnICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgnYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJywgaXNzZXQgKCRwYXJhbXNbJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddKSA/ICRwYXJhbXNbJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddIDogJycgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCdhdXRvdGh1bWJuYWlsX3NpemUnLCBpc3NldCAoJHBhcmFtc1snYXV0b3RodW1ibmFpbF9zaXplJ10pID8gJHBhcmFtc1snYXV0b3RodW1ibmFpbF9zaXplJ10gOiAnJyApOwokdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ2Rvd25sb2FkX2NodW5rc2l6ZScsIGlzc2V0ICgkcGFyYW1zWydkb3dubG9hZF9jaHVua3NpemUnXSkgPyAkcGFyYW1zWydkb3dubG9hZF9jaHVua3NpemUnXSA6IDggKTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCdhbGxvd19kZWxldGUnLCBpc3NldCAoJHBhcmFtc1snYWxsb3dfZGVsZXRlJ10pID8gJHBhcmFtc1snYWxsb3dfZGVsZXRlJ10gOiAwICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgncmVkaXJlY3Rfb25fc2VuZGZpbGUnLCBpc3NldCAoJHBhcmFtc1sncmVkaXJlY3Rfb25fc2VuZGZpbGUnXSkgPyAkcGFyYW1zWydyZWRpcmVjdF9vbl9zZW5kZmlsZSddIDogJycgKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX2hvdXJzJywoaW50KSRwYXJhbXNbJ3RpbWVsaW1pdGVkX2hvdXJzJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgndGltZWxpbWl0ZWRfZG93bmxvYWRzJywoaW50KSRwYXJhbXNbJ3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2dldGZpbGVfcmVzdWx0cGFnZScsKGludCkkcGFyYW1zWydnZXRmaWxlX3Jlc3VsdHBhZ2UnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9hdXRvZGVsZXRlJywoaW50KSRwYXJhbXNbJ3RpbWVsaW1pdGVkX2F1dG9kZWxldGUnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9zdWJqZWN0Jyx0cmltKCRwYXJhbXNbJ3RpbWVsaW1pdGVkX3N1YmplY3QnXSkpOwoKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfc2VuZGZpbGVwYWdlJywkcGFyYW1zWydkZWZhdWx0X3NlbmRmaWxlcGFnZSddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2V4cGlyeScsKGludCkkcGFyYW1zWydjYXRlZ29yeV9leHBpcnknXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhbGxvd191cGxvYWRfc2VuZGZpbGUnLChpbnQpJHBhcmFtc1snYWxsb3dfdXBsb2FkX3NlbmRmaWxlJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnZnJpZW5kbHluYW1lJyx0cmltKCRwYXJhbXNbJ2ZyaWVuZGx5bmFtZSddKSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdhbGxvd19jaGFuZ2VkYXRlJywoaW50KSRwYXJhbXNbJ2FsbG93X2NoYW5nZWRhdGUnXSk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlKCdpbmRleF90eHRmaWxlcycsKGludCkkcGFyYW1zWydpbmRleF90eHRmaWxlcyddKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2luZGV4X3BkZmZpbGVzJywoaW50KSRwYXJhbXNbJ2luZGV4X3BkZmZpbGVzJ10pOwokdGhpcy0+U2V0UHJlZmVyZW5jZSgnaW5kZXhfdW5pcXVld29yZHMnLChpbnQpJHBhcmFtc1snaW5kZXhfdW5pcXVld29yZHMnXSk7CiR0aGlzLT5SZWRpcmVjdFRvVGFiKCAkaWQsICdhZG1pbl9wcmVmcycgKTsKCi8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.sendfile.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggIWlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSApIGV4aXQ7CgovLyBpbml0aWFsaXphdGlvbgokdXBsb2FkX2lkID0gKGludCkkcGFyYW1zWyd1cGxvYWRfaWQnXTsKJHRoZXRlbXBsYXRlID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfc2VuZGZpbGVmb3JtJyk7CiRub3RlcyA9ICcnOwokc2VuZHRvID0gJyc7CiRzdWJqZWN0ID0gJyc7CiRlcnJvciA9ICcnOwokbWVzc2FnZSA9ICcnOwoKLy8gc2V0dXAKJHVwbG9hZF9kYXRhID0gdXBsb2Fkc191dGlsczo6Z2V0X3VwbG9hZF9kZXRhaWxzKCR1cGxvYWRfaWQpOwoKJGNhdGVnb3J5ID0gJHRoaXMtPl9nZXRVcGxvYWRDYXRlZ29yeURldGFpbHMoICR1cGxvYWRfZGF0YVsndXBsb2FkX2NhdGVnb3J5X2lkJ10gKTsKaWYoICEkdGhpcy0+X0NoZWNrRG93bmxvYWRTZWN1cml0eSgkY2F0ZWdvcnkpICkgewogIGF1ZGl0KCR1cGxvYWRfZGF0YVsndXBsb2FkX2lkJ10sJHRoaXMtPkdldE5hbWUoKSwnQXR0ZW1wdCB0byBhY2Nlc3MgZmlsZSAnLiRmaWxlLicgIHdpdGhvdXQgcHJvcGVyIHBlcm1pc3Npb25zJyk7CgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UoICRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZygnZXJyb3JfcGVybWlzc2lvbmRlbmllZCcpICk7CiAgcmV0dXJuOwp9CmlmKCAhJHRoaXMtPl9DaGVja0ZpbGVEb3dubG9hZFNlY3VyaXR5KCR1cGxvYWRfZGF0YSkgKSB7CiAgYXVkaXQoJHVwbG9hZF9kYXRhWyd1cGxvYWRfaWQnXSwkdGhpcy0+R2V0TmFtZSgpLCdBdHRlbXB0IHRvIGFjY2VzcyBmaWxlICcuJGZpbGUuJyAgd2l0aG91dCBwcm9wZXIgcGVybWlzc2lvbnMnKTsKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSggJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nKCdlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJykgKTsKICByZXR1cm47Cn0KCmlmKCAhJHVwbG9hZF9kYXRhICkgcmV0dXJuOwokc21hcnR5LT5hc3NpZ24oJ21vZCcsJHRoaXMpOwokc21hcnR5LT5hc3NpZ24oJ2FjdGlvbmlkJywkaWQpOwoKLy8gaGFuZGxlIGZvcm0gZGF0YQppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfY2FuY2VsJ10pICkgewoJJHRoaXMtPlJlZGlyZWN0Q29udGVudCgkcmV0dXJuaWQpOwp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3N1Ym1pdCddKSApIHsKCSRub3RlcyA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbm90ZXMnXSk7Cgkkc2VuZHRvID0gdHJpbSgkcGFyYW1zWydpbnB1dF9zZW5kdG8nXSk7Cgkkc3ViamVjdCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfc3ViamVjdCddKTsKCSRhZGRyZXNzZXMgPSBhcnJheSgpOwoKCS8vIGNoZWNrIHRoZSBzdWJqZWN0CglpZiggZW1wdHkoJHN1YmplY3QpICkgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vc3ViamVjdCcpOwoKCWlmKCBlbXB0eSgkZXJyb3IpICYmIGVtcHR5KCRzZW5kdG8pICkgJGVycm9yID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vYWRkcmVzc2VzJyk7CgoJaWYoIGVtcHR5KCRlcnJvcikgKSB7CgkJJHRtcCA9IGV4cGxvZGUoJywnLCRzZW5kdG8pOwoJCWlmKCAhY291bnQoJHRtcCkgKSB7CgkJCSRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2FkZHJlc3NlcycpOwoJCX0KCQllbHNlIHsKCQkJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRtcCk7ICRpKysgKSB7CgkJCQkkdDIgPSB0cmltKCR0bXBbJGldKTsKCQkJCWlmKCAhZW1wdHkoJHQyKSApIHsKCQkJCQkkYWRkcmVzc2VzW10gPSAkdDI7CgkJCQl9CgkJCX0KCQkJaWYoICFjb3VudCgkYWRkcmVzc2VzKSApICRlcnJvciA9ICR0aGlzLT5MYW5nKCdlcnJvcl9ub2FkZHJlc3NlcycpOwoJCX0KCX0KCgkvLyBnb3QgYWxsIHRoZSBhZGRyZXNzZXMuCgkvLyBub3cgc2VuZCB0aGUgbWFpbC4KCWlmKCBlbXB0eSgkZXJyb3IpICkgewoJCSRjbXNtYWlsZXIgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NNU01haWxlcicpOwoKCQkvLyBnZXQgZXZlcnl0aGluZyBpbnRvIHNtYXJ0eS4KCQkkcGFyYW1zWydub291dHB1dCddID0gMTsKCQlpbmNsdWRlKF9fRElSX18uJy9hY3Rpb24uZGV0YWlsLnBocCcpOwoKCQkkY21zbWFpbGVyLT5yZXNldCgpOwoJCSRjbXNtYWlsZXItPlNldFN1YmplY3QoJHN1YmplY3QpOwoJCSRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsKCQlmb3JlYWNoKCAkYWRkcmVzc2VzIGFzICRvbmUgKSB7CgkJCSRjbXNtYWlsZXItPkFkZEFkZHJlc3MoJG9uZSk7CgkJfQoJCSRib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgndXBsb2FkX3NlbmRmaWxlcnB0Jyk7CgkJJGNtc21haWxlci0+U2V0Qm9keSgkYm9keSk7CgkJJGNtc21haWxlci0+U2VuZCgpOwoKCQkvLyBub3cgdHJ5IHRvIHJlZGlyZWN0IHRvIGEgZGlmZmVyZW50IHBhZ2UKCQkkc3RyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlZGlyZWN0X29uX3NlbmRmaWxlJyk7CgkJaWYoICRzdHIgIT0gJycgKSB7CgkJCSR0bXAgPSBDb250ZW50TWFuYWdlcjo6R2V0UGFnZUlERnJvbUFsaWFzKCRzdHIpOwoJCQlpZiggJHRtcCApIHsKCQkJCSR0aGlzLT5SZWRpcmVjdENvbnRlbnQoJHRtcCk7CgkJCQlyZXR1cm47CgkJCX0KCQl9CgoJCS8vIHJlZGlyZWN0IGlzbid0IHNldC4uLiBzbyBkaXNwbGF5IGEgbmljZSBtZXNzYWdlLgoJCSRtZXNzYWdlID0gJHRoaXMtPkxhbmcoJ21zZ19maWxlX3NlbnQnKTsKCX0KfQoKLy8gZ2l2ZSBldmVyeXRoaW5nIHRvIHNtYXJ0eQppZiggIWVtcHR5KCRlcnJvcikgKSAkc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywkZXJyb3IpOwppZiggIWVtcHR5KCRtZXNzYWdlKSApICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJG1lc3NhZ2UpOwokc21hcnR5LT5hc3NpZ24oJ3VwbG9hZF9pbmZvJywkdXBsb2FkX2RhdGEpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3NlbmRmaWxlJywkcmV0dXJuaWQsJ3Bvc3QnLCcnLGZhbHNlLCcnLCRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kJywkdGhpcy0+Q3JlYXRlRm9ybUVuZCgpKTsKJHNtYXJ0eS0+YXNzaWduKCdub3RlcycsJG5vdGVzKTsKJHNtYXJ0eS0+YXNzaWduKCdzZW5kdG8nLCRzZW5kdG8pOwokc21hcnR5LT5hc3NpZ24oJ3N1YmplY3QnLCRzdWJqZWN0KTsKCi8vIGRpc3BsYXkgdGhlIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgnc2VuZGZpbGVmb3JtXycuJHRoZXRlbXBsYXRlKTsKCiMgRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.upload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0KCk7CgppZiggIWlzc2V0KCAkcGFyYW1zWydjYXRlZ29yeSddICkgKSB7CgkvLyBpZiBtb2RlIG9yIGNhdGVnb3J5IGlzbid0IHNldC4uLiB3ZSBkb24ndCBkaXNwbGF5IGFueXRoaW5nCgkkdGhpcy0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcycsJ2NhdGVnb3J5JykpOwoJcmV0dXJuOwp9CgovLyBkaXNwbGF5IGEgZm9ybSB0byBhbGxvdyB0aGUgdXNlciB0byB1cGxvYWQgYSBmaWxlLi4uLiBidXQgbWF5IGhhdmUgdG8gaGF2ZSBwZXJtaXNzaW9uIGZpcnN0Ci8vIGhtbW0sIEknbGwgdGhpbmsgYWJvdXQgdGhlIHBlcm1pc3Npb24gc3R1ZmYgbGF0ZXIuCiR0ZW1wbGF0ZSA9ICd1cGxvYWRmb3JtXycuJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfdXBsb2FkZm9ybScpOwppZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApICR0ZW1wbGF0ZSA9ICd1cGxvYWRmb3JtXycuJHBhcmFtc1sndGVtcGxhdGUnXTsKCnsKCSRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X25hbWUgPSA/JzsKCSR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJHBhcmFtc1snY2F0ZWdvcnknXSkpOwoJaWYoICEkdG1wICkgIHsKCQkJJHRoaXMtPl9EaXNwbGF5RXJyb3JQYWdlICgkaWQsICRwYXJhbXMsICRyZXR1cm5pZCwgJHRoaXMtPkxhbmcgKCdlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnLCdjYXRlZ29yeScpKTsKCQkJcmV0dXJuOwoJfQoJdW5zZXQoJHBhcmFtc1snY2F0ZWdvcnknXSk7CgkkcGFyYW1zWydjYXRlZ29yeV9pZCddID0gJHRtcDsKfQoKaWYoIGlzc2V0KCRwYXJhbXNbJ2tleSddKSApIHsKCSRwYXJhbXNbJ2lucHV0X2tleSddID0gJHBhcmFtc1sna2V5J107Cgl1bnNldCgkcGFyYW1zWydrZXknXSk7Cn0KJHNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnZG9fdXBsb2FkJywgJHJldHVybmlkLCdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnLCAkcGFyYW1zKSk7CiRzbWFydHktPmFzc2lnbiAoJ3Byb21wdF91cGxvYWQnLCAkdGhpcy0+TGFuZyAoJ3VwbG9hZCcpKTsKCi8vIGdldCBjdXN0b20gZmllbGQgaW5mby4KJGZpZWxkcyA9IGFycmF5KCk7CnsKICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzIFdIRVJFIHB1YmxpYyA9IDEgT1JERVIgQlkgaW9yZGVyJzsKICAkdGZpZWxkcyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKCgkkdHZhbHMgPSBudWxsOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ3VwbG9hZF9pZCddKSApIHsKCQkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIFdIRVJFIHVwbG9hZF9pZCA9ID8nOwoJCSR0bXAgPSAkZGItPkdldEFycmF5KCRxdWVyeSxhcnJheSgkcGFyYW1zWyd1cGxvYWRfaWQnXSkpOwoJCSR0dmFscyA9IGNnZV9hcnJheTo6dG9faGFzaCgkdG1wLCdmbGRfaWQnKTsKCX0KCiAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRmaWVsZHMpOyAkaSsrICkgewoJCSR0ZmllbGRzWyRpXVsnYXR0cmliJ10gPSB1bnNlcmlhbGl6ZSgkdGZpZWxkc1skaV1bJ2F0dHJpYnMnXSk7CgkJdW5zZXQoJHRmaWVsZHNbJGldWydhdHRyaWJzJ10pOwoJCSR0ZmllbGRzWyRpXVsndmFsdWUnXSA9IG51bGw7CgkJaWYoIGlzc2V0KCR0dmFsc1skdGZpZWxkc1skaV1bJ2lkJ11dKSApICR0ZmllbGRzWyRpXVsndmFsdWUnXSA9ICR0dmFsc1skdGZpZWxkc1skaV1bJ2lkJ11dWyd2YWx1ZSddOwoKCQlzd2l0Y2goJHRmaWVsZHNbJGldWyd0eXBlJ10pIHsKCQljYXNlICd0ZXh0YXJlYSc6CgkJCSR0ZmllbGRzWyRpXVsnaW5wdXQnXSA9CgkJCQkkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoaXNzZXQoJHRmaWVsZHNbJGldWydhdHRyaWInXVsndXNld3lzaXd5ZyddKSAmJiAkdGZpZWxkc1skaV1bJ2F0dHJpYiddWyd1c2V3eXNpd3lnJ10gPT0gMSAmJgoJCQkJJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FsbG93X2NvbW1lbnRfd3lzaXd5ZycsMCksICRpZCwJJHRmaWVsZHNbJGldWyd2YWx1ZSddLCdmaWVsZF8nLiR0ZmllbGRzWyRpXVsnaWQnXSk7CgkJCWJyZWFrOwoKCQljYXNlICdkcm9wZG93bic6CgkJY2FzZSAnbXVsdGlzZWxlY3QnOgoJCQlpZiggaXNzZXQoJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddKSApIHsKCQkJCSR0bXAgPSBleHBsb2RlKCJcbiIsJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddKTsKCQkJCSR0bXAyID0gYXJyYXkoKTsKCQkJCWZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCQkJCQkkb25lID0gdHJpbSgkb25lKTsKCQkJCQlpZiggc3Ryc3RyKCRvbmUsJz0nKSAhPT0gRkFMU0UgKSB7CgkJCQkJCWxpc3QoJGtleSwkdmFsdWUpID0gZXhwbG9kZSgnPScsdHJpbSgkb25lKSwyKTsKCQkJCQkJJHRtcDJbdHJpbSgkdmFsdWUpXSA9IHRyaW0oJGtleSk7CgkJCQkJfQoJCQkJCWVsc2UgewoJCQkJCQkkdG1wMlskb25lXSA9ICRvbmU7CgkJCQkJfQoJCQkJfQoJCQkJJHRmaWVsZHNbJGldWydhdHRyaWInXVsnb3B0aW9ucyddID0gJHRtcDI7CgkJCX0KCQkJYnJlYWs7CgkJfQoKCQkkZmllbGRzWyR0ZmllbGRzWyRpXVsnbmFtZSddXSA9ICR0ZmllbGRzWyRpXTsKCX0KfQoKLy8gYXR0ZW1wdCB0byBnZXQgYW4gYXV0aG9yCiRhdXRob3IgPSAnYW5vbnltb3VzJzsKJGZldXNlcnMgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0Zyb250RW5kVXNlcnMnKTsKaWYoICRmZXVzZXJzICkgewoJJHRtcCA9ICRmZXVzZXJzLT5Mb2dnZWRJbk5hbWUoKTsKCWlmKCAkdG1wICkgJGF1dGhvciA9ICR0bXA7Cn0KCiRzbWFydHktPmFzc2lnbignYXV0aG9yJywkYXV0aG9yKTsKaWYoIGlzc2V0KCAkcGFyYW1zWydub2F1dGhvciddICkgKSB7Cgkkc21hcnR5LT5hc3NpZ24oJ2lucHV0X2F1dGhvcicsCSR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbigkaWQsICdpbnB1dF9hdXRob3InLCAkYXV0aG9yKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ25vYXV0aG9yJywxKTsKfQoKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2F1dGhvcicsICR0aGlzLT5MYW5nICgnYXV0aG9yJykpOwokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfc3VtbWFyeScsJHRoaXMtPkxhbmcgKCdzdW1tYXJ5JykpOwokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfZGVzdG5hbWUnLCR0aGlzLT5MYW5nICgnZGVzdG5hbWUnKSk7CiRzbWFydHktPmFzc2lnbiAoJ2luZm9fZGVzdG5hbWUnLCR0aGlzLT5MYW5nICgnaW5mb19kZXN0bmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2Rlc2NyaXB0aW9uJywkdGhpcy0+TGFuZyAoJ2Rlc2NyaXB0aW9uJykpOwppZiggaXNzZXQoICRwYXJhbXNbJ2ZpbGVfZXh0ZW5zaW9ucyddICkgKSAkaGlkZGVuIC49ICR0aGlzLT5DcmVhdGVJbnB1dEhpZGRlbiggJGlkLCAnZmlsZV9leHRlbnNpb25zJywgJHBhcmFtc1snZmlsZV9leHRlbnNpb25zJ10gKTsKCmlmKCAhaXNzZXQoJHBhcmFtc1snbm9jYXB0Y2hhJ10pICkgewoJJGNhcHRjaGEgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhcHRjaGEnKTsKCWlmKCBpc19vYmplY3QoJGNhcHRjaGEpICkgewoJCSRzbWFydHktPmFzc2lnbignY2FwdGNoYV90aXRsZScsICR0aGlzLT5MYW5nKCdjYXB0Y2hhX3RpdGxlJykpOwoJCSRzbWFydHktPmFzc2lnbignY2FwdGNoYScsICRjYXB0Y2hhLT5nZXRDYXB0Y2hhKCkpOwoJfQp9CiRzbWFydHktPmFzc2lnbiAoJ3Byb21wdF90aHVtYm5haWwnLCAkdGhpcy0+TGFuZyAoJ3RodW1ibmFpbCcpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5mb190aHVtYm5haWwnLCAkdGhpcy0+TGFuZyAoJ2luZm9fdGh1bWJuYWlsJykpOwokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF9zdWJtaXQnLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZG9fdXBsb2FkZmlsZScsCSR0aGlzLT5MYW5nICgnc3VibWl0JykpKTsKaWYoIGNvdW50KCRmaWVsZHMpICkgJHNtYXJ0eS0+YXNzaWduKCdmaWVsZHMnLCRmaWVsZHMpOwokc21hcnR5LT5hc3NpZ24oJ21heF91cGxvYWRzaXplJywkZ0Ntcy0+Y29uZmlnWydtYXhfdXBsb2FkX3NpemUnXSk7CiRzbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHRlbXBsYXRlKTsKCi8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/action.uploadicon.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0KCk7CmlmKCAhJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTWFuYWdlIFVwbG9hZHMnKSApIHJldHVybjsKCiRkaXIgPSBfX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ2ltYWdlcycuRElSRUNUT1JZX1NFUEFSQVRPUjsKJHJldCA9ICR0aGlzLT5faGFuZGxlVXBsb2FkKCRkaXIsICAkaWQuJ2lucHV0X3VwbG9hZF9pY29uJyk7CgokcGFybXMgPSBhcnJheSgpOwppZiggaXNfYXJyYXkoICRyZXQgKSAmJiAkcmV0WzBdID09PSBmYWxzZSApICRwYXJtc1snZXJyb3JzJ109JHJldFsxXTsKJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCRwYXJhbXNbJ2FjdGl2ZV90YWInXSwkcGFybXMpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/action.yousendit.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKLy8gZGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgdGhlIHVzZXIgdG8gdXBsb2FkIGEgZmlsZS4uLi4gYnV0IG1heSBoYXZlIHRvIGhhdmUgcGVybWlzc2lvbiBmaXJzdAovLyBobW1tLCBJJ2xsIHRoaW5rIGFib3V0IHRoZSBwZXJtaXNzaW9uIHN0dWZmIGxhdGVyLgoKLy8KLy8gaW5pdGlhbGl6YXRpb24KLy8KJHlzaV90ZW1wbGF0ZSA9ICd5b3VzZW5kaXRmb3JtXycuJHRoaXMtPkdldFByZWZlcmVuY2UoJ2RlZmF1bHRfeW91c2VuZGl0Zm9ybScpOwppZiggaXNzZXQoICRwYXJhbXNbJ3RlbXBsYXRlJ10gKSApIHsKCSR5c2lfdGVtcGxhdGUgPSAneW91c2VuZGl0Zm9ybV8nLiRwYXJhbXNbJ3RlbXBsYXRlJ107Cn0KJG5vdGVzID0gJyc7CiRzZW5kdG8gPSAnJzsKJHN1YmplY3QgPSAnJzsKJGVycm9yID0gYXJyYXkoKTsKJG1lc3NhZ2UgPSBhcnJheSgpOwokYXV0aG9yID0gJ2Fub255bW91cyc7CiRzdW1tYXJ5ID0gJyc7CiRkZXN0bmFtZSA9ICcnOwoka2V5ID0gJyc7CiRkZXNjcmlwdGlvbiA9ICcnOwokcmVwbGFjZSA9IDA7CiRmZXVzZXJzID0gJHRoaXMtPkdldE1vZHVsZUluc3RhbmNlKCdGcm9udEVuZFVzZXJzJyk7CmlmKCAkZmV1c2VycyApIHsKCSR0bXAgPSAkZmV1c2Vycy0+TG9nZ2VkSW5OYW1lKCk7CglpZiggIWVtcHR5KCR0bXApICkgJGF1dGhvciA9ICR0bXA7Cn0KJHBhcmFtc1snaW5wdXRfYXV0aG9yJ10gPSAkYXV0aG9yOwoKCi8vCi8vIFNldHVwCi8vCmlmKCAhaXNzZXQoICRwYXJhbXNbJ2NhdGVnb3J5J10gKSApIHsKCS8vIGlmIG1vZGUgb3IgY2F0ZWdvcnkgaXNuJ3Qgc2V0Li4uIHdlIGRvbid0IGRpc3BsYXkgYW55dGhpbmcKCSR0aGlzLT5fRGlzcGxheUVycm9yUGFnZSAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQsICR0aGlzLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJywnY2F0ZWdvcnknKSk7CglyZXR1cm47Cn0KaWYoIGlzc2V0KCAkcGFyYW1zWydrZXknXSApICkgewoJJGtleSA9ICRwYXJhbXNbJ2tleSddOwoJJHBhcmFtc1snaW5wdXRfa2V5J10gPSAka2V5OwoJdW5zZXQoJHBhcmFtc1sna2V5J10pOwp9CmVsc2UgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9rZXknXSApICkgewoJJGtleSA9ICRwYXJhbXNbJ2lucHV0X2tleSddOwp9CiRzbWFydHktPmFzc2lnbignbW9kJywkdGhpcyk7CiRzbWFydHktPmFzc2lnbignYWN0aW9uaWQnLCRpZCk7CgoKLy8KLy8gaGFuZGxlIGZvcm0gc3VibWlzc2lvbgovLwppZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfY2FuY2VsJ10pICkgewogICAgJHRoaXMtPlJlZGlyZWN0Q29udGVudCgkcmV0dXJuaWQpOwp9CmVsc2UgaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3N1Ym1pdCddKSApIHsKCWlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9hdXRob3InXSkgKSAkYXV0aG9yID0gdHJpbSgkcGFyYW1zWydpbnB1dF9hdXRob3InXSk7CglpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc3VtbWFyeSddKSApCSRzdW1tYXJ5ID0gdHJpbSgkcGFyYW1zWydpbnB1dF9zdW1tYXJ5J10pOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X2Rlc2NyaXB0aW9uJ10pICkgJGRlc2NyaXB0aW9uID0gdHJpbSgkcGFyYW1zWydpbnB1dF9kZXNjcmlwdGlvbiddKTsKCWlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9kZXN0bmFtZSddKSApICRkZXN0bmFtZSA9IHRyaW0oJHBhcmFtc1snaW5wdXRfZGVzdG5hbWUnXSk7CglpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfcmVwbGFjZSddKSApCSRyZXBsYWNlID0gKGludCkkcGFyYW1zWydpbnB1dF9yZXBsYWNlJ107CglpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfc2VuZHRvJ10pICkgJHNlbmR0byA9IHRyaW0oJHBhcmFtc1snaW5wdXRfc2VuZHRvJ10pOwoJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X3N1YmplY3QnXSkgKQkkc3ViamVjdCA9IHRyaW0oJHBhcmFtc1snaW5wdXRfc3ViamVjdCddKTsKCWlmKCBpc3NldCgkcGFyYW1zWydpbnB1dF9ub3RlcyddKSApCSRub3RlcyA9IHRyaW0oJHBhcmFtc1snaW5wdXRfbm90ZXMnXSk7CgoJLy8gZXJyb3IgY2hlY2tpbmcKCWlmKCBlbXB0eSgkc2VuZHRvKSApICRlcnJvcltdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vYWRkcmVzc2VzJyk7CglpZiggZW1wdHkoJHN1YmplY3QpICkJJGVycm9yW10gPSAkdGhpcy0+TGFuZygnZXJyb3Jfbm9zdWJqZWN0Jyk7CgogICAgLy8gdmFsaWRhdGUgYWRkcmVzc2VzCgkkYWRkcmVzc2VzID0gYXJyYXkoKTsKCXsKCQkkdG1wID0gZXhwbG9kZSgnLCcsJHNlbmR0byk7CgkJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJHRtcCk7ICRpKysgKSAJewoJCQkkdDIgPSB0cmltKCR0bXBbJGldKTsKCQkJaWYoICFlbXB0eSgkdDIpICkgJGFkZHJlc3Nlc1tdID0gJHQyOwoJCX0KCX0KCglpZiggIWNvdW50KCRhZGRyZXNzZXMpICYmICFlbXB0eSgkc2VuZHRvKSApCSRlcnJvcltdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX25vYWRkcmVzc2VzJykuJyAyJzsKCgkvLyBjaGVjayB0aGUgY2FwdGNoYQoJaWYoICFpc3NldCgkcGFyYW1zWydub2NhcHRjaGEnXSkgKSB7CgkJJGNhcHRjaGEgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhcHRjaGEnKTsKCQlpZiAoIGlzX29iamVjdCgkY2FwdGNoYSkgJiYgISRjYXB0Y2hhLT5DaGVja0NhcHRjaGEoJHBhcmFtc1snaW5wdXRfY2FwdGNoYSddKSkgewoJCQkkZXJyb3JbXSA9ICR0aGlzLT5MYW5nKCdlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnKTsKCQl9Cgl9CgoJLy8gZG8gdGhlIHVwbG9hZAoJaWYoICFjb3VudCgkZXJyb3IpICkgewoJCSRyZXQgPSAkdGhpcy0+QXR0ZW1wdFVwbG9hZCAoJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQpOwoJCWlmKCAkcmV0WzBdID09IEZBTFNFICkgewoJCQkkZXJyb3JbXSA9ICRyZXRbMV07CgkJfQoJCWVsc2UgewoJCQkkcGFyYW1zWyd1cGxvYWRfaWQnXSA9ICRyZXRbMV07CgkJCSRtZXNzYWdlW10gPSAkdGhpcy0+TGFuZygnZmlsZV91cGxvYWRlZCcpOwoJCX0KCX0KCgkvLyBzZW5kIHRoZSBtZXNzYWdlCglpZiggIWNvdW50KCRlcnJvcikgKSB7CgkJJGNtc21haWxlciA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnQ01TTWFpbGVyJyk7CgoJCS8vIGdldCBldmVyeXRoaW5nIGludG8gc21hcnR5LgoJCSRwYXJhbXNbJ25vb3V0cHV0J10gPSAxOwoJCWluY2x1ZGUoX19ESVJfXy4nL2FjdGlvbi5kZXRhaWwucGhwJyk7CgoJCSRjbXNtYWlsZXItPnJlc2V0KCk7CgkJJGNtc21haWxlci0+U2V0U3ViamVjdCgkc3ViamVjdCk7CgkJJGNtc21haWxlci0+SXNIVE1MKHRydWUpOwoJCWZvcmVhY2goICRhZGRyZXNzZXMgYXMgJG9uZSApIHsKCSAgICAkY21zbWFpbGVyLT5BZGRBZGRyZXNzKCRvbmUpOwoJICB9CgoJCSRzbWFydHktPmFzc2lnbignYXV0aG9yJywkYXV0aG9yKTsKCQkkc21hcnR5LT5hc3NpZ24oJ25vdGVzJywkbm90ZXMpOwoJCSRzbWFydHktPmFzc2lnbignc3ViamVjdCcsJHN1YmplY3QpOwoJCSRib2R5ID0gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZUZyb21EYXRhYmFzZSgndXBsb2FkX3NlbmRmaWxlcnB0Jyk7CgkJJGNtc21haWxlci0+U2V0Qm9keSgkYm9keSk7CgkJJGNtc21haWxlci0+U2VuZCgpOwoKCQkvLyBub3cgdHJ5IHRvIHJlZGlyZWN0IHRvIGEgZGlmZmVyZW50IHBhZ2UKCQkkc3RyID0gJHRoaXMtPkdldFByZWZlcmVuY2UoJ3JlZGlyZWN0X29uX3NlbmRmaWxlJyk7CgkJaWYoICRzdHIgIT0gJycgKSB7CgkgICAgJHRtcCA9IENvbnRlbnRNYW5hZ2VyOjpHZXRQYWdlSURGcm9tQWxpYXMoJHN0cik7CgkgICAgaWYoICR0bXAgKSB7CgkJCQkkdGhpcy0+UmVkaXJlY3RDb250ZW50KCR0bXApOwoJCQkJcmV0dXJuOwoJCQl9CgkgIH0KCgkJLy8gcmVkaXJlY3QgaXNuJ3Qgc2V0Li4uIHNvIGRpc3BsYXkgYSBuaWNlIG1lc3NhZ2UuCgkJJG1lc3NhZ2VbXSA9ICR0aGlzLT5MYW5nKCdtc2dfZmlsZV9zZW50Jyk7Cgl9Cgp9IC8vIGVuZCBmb3JtIHN1Ym1pc3Npb24KCgoKLy8KLy8gR2l2ZSBFdmVyeXRoaW5nIHRvIHNtYXJ0eQovLwppZiggY291bnQoJGVycm9yKSApICRzbWFydHktPmFzc2lnbignZXJyb3JzJywkZXJyb3IpOwppZiggY291bnQoJG1lc3NhZ2UpICkgJHNtYXJ0eS0+YXNzaWduKCdtZXNzYWdlcycsJG1lc3NhZ2UpOwokc21hcnR5LT5hc3NpZ24gKCdzdGFydGZvcm0nLAoJCQkJCQkJCSAkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICd5b3VzZW5kaXQnLCAkcmV0dXJuaWQsICdwb3N0JywKCQkJCQkJCQkJCQkJCQkJCQkJCQkgJ211bHRpcGFydC9mb3JtLWRhdGEnLCBmYWxzZSwgJycsICRwYXJhbXMpKTsKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3VwbG9hZCcsICR0aGlzLT5MYW5nICgndXBsb2FkJykpOwoKLy8gYXR0ZW1wdCB0byBnZXQgYW4gYXV0aG9yCmlmKCAhaXNzZXQoICRwYXJhbXNbJ25vYXV0aG9yJ10gKSApIHsKCSRzbWFydHktPmFzc2lnbiAoJ3Byb21wdF9hdXRob3InLCAkdGhpcy0+TGFuZyAoJ2F1dGhvcicpKTsKCSRzbWFydHktPmFzc2lnbiAoJ2lucHV0X2F1dGhvcicsCgkJCQkJCQkJCSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0ICgkaWQsICdpbnB1dF9hdXRob3InLCAkYXV0aG9yLCAyMCwgMjU1KSk7Cn0KJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3N1bW1hcnknLCR0aGlzLT5MYW5nICgnc3VtbWFyeScpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfc3VtbWFyeScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfc3VtbWFyeScsJHN1bW1hcnksIDQwLCAyNTUpKTsKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X2Rlc3RuYW1lJywkdGhpcy0+TGFuZyAoJ2Rlc3RuYW1lJykpOwokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF9kZXN0bmFtZScsJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAnaW5wdXRfZGVzdG5hbWUnLCRkZXN0bmFtZSwgNDAsIDI1NSkpOwokc21hcnR5LT5hc3NpZ24gKCdpbmZvX2Rlc3RuYW1lJywgJHRoaXMtPkxhbmcgKCdpbmZvX2Rlc3RuYW1lJykpOwokc21hcnR5LT5hc3NpZ24gKCdwcm9tcHRfZGVzY3JpcHRpb24nLCR0aGlzLT5MYW5nICgnZGVzY3JpcHRpb24nKSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X2Rlc2NyaXB0aW9uJywkdGhpcy0+Q3JlYXRlVGV4dEFyZWEoZmFsc2UsICRpZCwgJGRlc2NyaXB0aW9uLCAnaW5wdXRfZGVzY3JpcHRpb24nICkpOwoKJGNhcHRjaGEgPSAkdGhpcy0+R2V0TW9kdWxlSW5zdGFuY2UoJ0NhcHRjaGEnKTsKaWYoIGlzX29iamVjdCgkY2FwdGNoYSkgJiYgIWlzc2V0KCRwYXJhbXNbJ25vY2FwdGNoYSddKSApIHsKCSRzbWFydHktPmFzc2lnbignY2FwdGNoYV90aXRsZScsICR0aGlzLT5MYW5nKCdjYXB0Y2hhX3RpdGxlJykpOwoJJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9jYXB0Y2hhJywgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2lucHV0X2NhcHRjaGEnLCcnLDEwKSk7Cgkkc21hcnR5LT5hc3NpZ24oJ2NhcHRjaGEnLCAkY2FwdGNoYS0+Z2V0Q2FwdGNoYSgpKTsKfQoKJHNtYXJ0eS0+YXNzaWduICgncHJvbXB0X3RodW1ibmFpbCcsICR0aGlzLT5MYW5nICgndGh1bWJuYWlsJykpOwokc21hcnR5LT5hc3NpZ24gKCdpbmZvX3RodW1ibmFpbCcsICR0aGlzLT5MYW5nICgnaW5mb190aHVtYm5haWwnKSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X3RodW1ibmFpbCcsICAkdGhpcy0+Q3JlYXRlRmlsZVVwbG9hZElucHV0ICgkaWQsJ2lucHV0X3RodW1ibmFpbCcsJycsNTApKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfc3VibWl0JywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RvX3VwbG9hZGZpbGUnLCR0aGlzLT5MYW5nICgnc3VibWl0JykpKTsKJHNtYXJ0eS0+YXNzaWduICgnZW5kZm9ybScsICR0aGlzLT5DcmVhdGVGb3JtRW5kICgpKTsKCiRzbWFydHktPmFzc2lnbignYXV0aG9yJywkYXV0aG9yKTsKJHNtYXJ0eS0+YXNzaWduKCdzdW1tYXJ5Jywkc3VtbWFyeSk7CiRzbWFydHktPmFzc2lnbigna2V5Jywka2V5KTsKJHNtYXJ0eS0+YXNzaWduKCdkZXNjcmlwdGlvbicsJGRlc2NyaXB0aW9uKTsKJHNtYXJ0eS0+YXNzaWduKCdyZXBsYWNlJywkcmVwbGFjZSk7CiRzbWFydHktPmFzc2lnbignbm90ZXMnLCRub3Rlcyk7CiRzbWFydHktPmFzc2lnbignc2VuZHRvJywkc2VuZHRvKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJqZWN0Jywkc3ViamVjdCk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJHlzaV90ZW1wbGF0ZSk7CgojIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/changelog.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHVsPgo8bGk+CjxwPlZlcnNpb24gMS4wLiAtIFNlcHRlbWJlciAyMDA1LjwvcD4KPHA+IEluaXRpYWwgUmVsZWFzZS48L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjAxLiAtIFNlcHRlbWJlciAyMDA1PC9wPgo8cD5NaW5vciBmaXhlcy48L3A+PC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMDIuIC0gU2VwdGVtYmVyIDIwMDU8L3A+CjxwPkFkZGVkIGFiaWxpdHkgdG8gc3BlY2lmeSBzb3J0IG9yZGVyPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4wMy4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4KPHA+Rml4IHJlZ2FyZGluZyBjb25mbGljdCBpbiB0ZW1wbGF0ZSBuYW1lczwvcD4KPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMDQuIC0gU2VwdGVtYmVyIDIwMDU8L3A+CjxwPkFkZGVkIGFiaWxpdHkgdG8gcmUtc2NhbiBhIGRpcmVjdG9yeSwgYW5kIHRvIHVwbG9hZCBmaWxlcyBmcm9tIHRoZSBhZG1pbiBwYWdlPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4wNS4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4KPHA+Rml4ZWQgc29tZSBQSFAgdmFyaWFibGUgaXNzdWVzPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4wNi4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4KPHA+QWRkZWQgYXV0aG9yIGZpZWxkIHRvIHRoZSBhZG1pbiBwYW5lbCB1cGxvYWQgZm9ybSwgYWRkZWQgYSBzdW1tYXJ5IGZpZWxkLCBhbmQgbWFkZSBkZXNjcmlwdGlvbiBhIHRleHQgYXJlYSwgYW5kIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBmaWxlIG5hbWU8L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjA3LiAtIFNlcHRlbWJlciAyMDA1PC9wPgo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byByZW5hbWUgZmlsZXMgYW5kIGZpeGVkIGEgc2NhbiBlcnJvcjwvcD4KPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMDguIC0gU2VwdGVtYmVyIDIwMDU8L3A+CjxwPkJldHRlciBoYW5kbGluZyBvZiBuYW1lcyB3aXRoIHNwYWNlcywgYW5kIGEgZmV3IG1pbm9yIGVycm9ycyBmaXhlZC4gIEFkZGVkIHN3ZWRpc2ggdHJhbnNsYXRpb24gKHRoYW5rcyB3ZXN0aXMpPC9wPjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuMC4gLSBPY3RvYmVyIDIwMDU8L3A+CiA8dWw+CiAgIDxsaT5Nb2RpZmllZCBBdHRlbXB0VXBsb2FkIGZ1bmN0aW9uIHNvIGl0IGNvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5PC9saT4KICAgPGxpPkFkZGVkIEdldFVwbG9hZERldGFpbHMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFsbCBvZiB0aGUgZGV0YWlscyBhYm91dCBhIG1vZHVsZSwgaW5jbHVkaW5nIGEgbGluazwvbGk+CiAgIDxsaT5BZGRlZCBSZWRpcmVjdHMgc28gdGhhdCB3b3JraW5nIHdpdGggdGhlIG1vZHVsZSBpcyBhbG90IG5pY2VyLCBpdCByZXR1cm5zIHRvIHRoZSByaWdodCB0YWI8L2xpPgogICA8bGk+Q2hhbmdlZCB0aGUgZnJvbnQgdGVtcGxhdGUgdG8gbG9vayBhIGxpdHRsZSBiZXR0ZXIgYW5kIG1ha2UgbW9yZSBzZW5zZTwvbGk+CiAgIDxsaT5GaXhlcyB0byB0aGUgdXBsb2FkcyBzdHVmZiBzbyB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpcyBzZXQsIGFuZCBuYW1lIGFuZCBzdW1tYXJ5IGFyZSBwdXQgaW4gdGhlIHJpZ2h0IHBsYWNlPC9saT4KICAgPGxpPkZpeGVzIHRvIGV2ZW4gYmV0dGVyIGhhbmRsZSBzcGFjZXMgaW4gbmFtZXM8L2xpPgogICA8bGk+T3B0aW9uYWx5IHBsYWNlIGR1bW15IGluZGV4Lmh0bWwgZmlsZXMgaW4gZWFjaCB1cGxvYWQgZGlyZWN0b3J5PC9saT4KICAgPGxpPklmIHNwZWNpZnlpbmcgYSBkZXN0aW5hdGlvbiBuYW1lLCBhbmQgbm8gZXh0ZW5zaW9uIGlzIGdpdmVuLCB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBvcmlnaW5hdGluZyBmaWxlIChpZiBhbnkgZXhpc3RzIGlzIHVzZWQ8L2xpPgogPC91bD4KIDxwPjxlbT48Yj5JbXBvcnRhbnQhPC9iPjwvZW0+PGJyLz5JdCBpcyBub3QgcG9zc2libGUgdG8gdXBncmFkZSBmcm9tIGFueSBvdGhlciB2ZXJzaW9uIG9mIHRoZSBVcGxvYWRzIG1vZHVsZSB0byAxLjEuMC4gIFRoaXMgaXMgZHVlIHRvIHNvbWUgZXJyb3JzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBkYXRhYmFzZSByb3V0aW5lcywgYW5kIGV2ZW4gaW4gdGhlIHVwZ3JhZGUgcm91dGluZSBpbiAxLjAuNi4gIFlvdSBtdXN0IGRlLWluc3RhbGwgdGhlIG9sZCB2ZXJzaW9uLCBhbmQgdGhlbiByZS1pbnN0YWxsIHRoZSBuZXcgdmVyZXNpb24uIFRoaXMgd2lsbCBjYXVzZSBzaWduaWZpY2FudCBkaWZmaWN1bHR5IGlmIHlvdSBoYXZlIGRzY3JpcHRpb25zLCBldGMsIGluIHlvdXIgdGFibGVzPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4xLjEuIC0gT2N0b2JlciwgMjAwNTwvcD4KPHA+Rml4ZWQgYSBjb3VwbGUgb2YgbWlub3IgYnVncyBpbiB0aGUgR2V0VXBsb2FkRGV0YWlscyBhbmQgYWRkZWQgYW5vdGhlciBsaW5rIChvciBhIHVybCkgdG8gdGhlIHVwbG9hZGVkIGZpbGUuPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4xLjIuIC0gT2N0b2JlciwgMjAwNTwvcD4KPHA+Rml4ZWQgdGhlIFVSTCBmaWVsZCBpbiBHZXRVcGxvYWREZXRhaWxzIHRvIHJldHVybiBhIGRvd25sb2FkIGxpbmsgYW5kIGFkZGVkIGFuIGFic3VybCBmaWVsZCB3aGljaCByZXR1cm5zIHRoZSBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBmaWxlIG9uIHRoZSB3ZWJzZXJ2ZXIuICBDbGlja3Mgb24gdGhpcyBsaW5rIHdpbGwgbm90IGJlIGNvdW50ZWQ8L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuMy4gLSBPY3RvYmVyLCAyMDA1PC9wPgo8cD5GaXhlZCB0aGUgdXBncmFkZSBwcm9ibGVtIGZyb20gdGhlIDEuMC54IHNlcmllcy4gIFVzZXJzIG9mIHRoZSAxLjAueCBzZXJpZXMgc2hvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byAxLjEuMyBub3cgd2l0aCBubyBkaWZmaWN1bHR5LiA8Yj5UaG9zZSBhcmUgZmFtb3VzIGxhc3Qgd29yZHMsIHBsZWFzZSBiYWNrdXAgZmlyc3Q8L2I+LiBGaXhlZCB0aGUgY29udGVudCByZWRpcmVjdCB0aGluZ3MgdGhhdCB3ZXJlIGlycml0YXRpbmcgbWUuICBBbHNvIGFkZGVkIGNhdGVnb3J5PWFsbCB0byBsaXN0IGFsbCBvZiB0aGUgdXBsb2FkcyBpbiBhbGwgbGlzdGFibGUgY2F0ZWdvcmllcyA8ZW0+KGxldHMgYWxsIGhvcGUgSSBnb3QgdGhlIHNxbCBmaWd1cmVkIG91dCBwcm9wZXJseSk8L2VtPi48L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuNC4gLSBPY3RvYmVyLCAyMDA1PC9wPgo8cD5BZGRlZCB0aGUgY291bnQgcGFyYW1ldGVyIHRvIGxpc3Qgb25seSB0aGUgZmlyc3QgTiByZWNvcmRzLCBhbmQgYWRkZWQgInN1bW1hcnlsaW5rIiwgYW5kICJjYXRlZ29yeSIgdG8gdGhlIHRlbXBsYXRlcyBmb3Igd2VzdGlzLiAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byB1c2UgdGhlbSByZXNldCB5b3VyIHRlbXBsYXRlcyBiYWNrIHRvIGRlZmF1bHQuPC9wPjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuNS4gLSBOb3ZlbWJlciwgMjAwNTwvcD4KPHA+QWRkZWQgZW1haWwgbm90aWZpY2F0aW9uIGFuZCBzb21lIGJ1ZyBmaXhlczwvcD4KPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMS42LiAtIE5vdmVtYmVyLCAyMDA1PC9wPgo8cD5BZGRlZCBhbiBhcGkgZnVuY3Rpb24gYW5kIGZpeGVkIHNvbWUgcmVkaXJlY3Rpb24gc3R1ZmY8L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuNy4gLSBOb3ZlbWJlciwgMjAwNTwvcD4KPHA+TW9yZSBBUEkgZnVuY3Rpb25zLCBhbmQgbm93IGlnbm9yZSBkb3QgZmlsZXMgd2hlbiBzY2FubmluZy4gIEVtYWlsIG5vdGlmaWNhdGlvbiBpcyBub3cgaW4uPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4xLjguIC0gSmFudWFyeSwgMjAwNjwvcD4KPHA+KiBJbXByb3ZlZCBkb2NzIHdydCBhcGFjaGUgYW5kIHBocCBjb25maWdzLjwvcD4KPHA+KiBGaXhlZCBwcm9ibGVtIHdoZXJlIGZpbGVzaXplIHdhcyBzaG93aW5nIHVwIGFzIDAuPC9wPgo8cD4qIE1vZGlmaWVkIHBlcm1pc3Npb25zIHRvIGJlIG1vcmUgZ3JhbnVsYXI8L3A+CjxwPiogQWRkZWQgc29tZSBjb21tZW50cyBhbmQgdmVyYm9zaXR5IHRvIHRoZSBjYXRlZ29yeSBhbmQgdXBsb2FkcyBmb3JtcyBpbiB0aGUgYWRtaW4gc2VjdGlvbjwvcD4KPHA+KiBBZGRlZCAicmFuZG9tIiBzb3J0IG9yZGVyPC9wPgo8cD4qIFNvbWUgUEhQNSBmaXhlczwvcD4KPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMS45LiAtIEphbnVhcnksIDIwMDY8L3A+CjxwPiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXBsb2FkIGEgdGh1bWJuYWlsIGltYWdlPC9wPgo8cD4qIFNvbWUgaW1wcm92ZWQgYXVkaXRpbmc8L3A+CjxwPiogeG1sIG5vdyBhZGRlZCB0byB0aGUgZGVmYXVsdCBmaWxlIHR5cGVzIChuZXcgaW5zdGFsbHMgb25seSk8L3A+CjxwPiogQWRkZWQgYSBjb25maXJtYXRpb24gbWVzc2FnZSB0byB0aGUgcmVzZXQgdG8gZGVmYXVsdHMgYnV0dG9ucyBvZiB0aGUgdGVtcGxhdGUgcGFnZXMuPC9wPgo8cD4qIEFkZGVkIHRoZSBmaWxlX2V4dGVuc2lvbnMgcGFyYW1ldGVyIGZvciB0aGUgdXBsb2FkIGZvcm08L3A+CjxwPiogVGhlIGN1cnJlbnQgY2F0ZWdvcnkgc2VsZWN0ZWQgaW4gdGhlIGZpbGVzIGZpbHRlciBpcyBzdGlja3kuCjxwPiogQWRkZWQgYSBwcmVmZXJlbmNlIHRvIGVuZm9yaWNlIGZpbGVuYW1lIGV4dGVuc2lvbnMgKGRlZmF1bHRzIHRvIG9uKTwvcD4KPHA+KiBBZGRlZCBhIGxpbmsgdG8gdGhlIGVkaXQgcGFnZSwgaW4gdGhlIG5hbWUgY29sdW1uIG9mIHRoZSBmaWxlcyBsaXN0LjwvcD4KPHA+KiBNaW5vciBjaGFuZ2VzIHRvIHRoZSBsYXlvdXQgYW5kIHRleHQgdG8gYWRkIGNsYXJpdHkuPC9wPgo8cD4qIEFkZGVkIGRvd25sb2FkX3VybCBhcyBhbiBhdmFpbGFibGUgc21hcnR5IHRhZyBpbiB0aGUgdGVtcGxhdGVzPC9wPgo8bGk+CjxwPlZlcnNpb24gMS4xLjEwLiAtIEZlYnJ1YXJ5LCAyMDA2PC9wPgo8cD4qIFN1bW1hcnkgbm93IGRlZmF1bHRzIHRvIHRoZSBmaWxlbmFtZSAod2l0aG91dCB0aGUgZXh0ZW5zaW9uKSBpZiBub25lIGlzIHNwZWNpZmllZDwvcD4KPHA+KiBOb3cgY29ycmVjdGx5IGhhbmRsZSBpZiB0aGUgdGh1bWJuYWlsIGV4dGVuc2lvbiBpcyBub3QgaW4gdGhlIGFjY2VwdGVkIGV4dGVuc2lvbiBsaXN0PC9wPgo8cD4qIE5vIGxvbmdlciBkaXNwbGF5IGFueSBjb250ZW50IGluIHRoZSBmaWxlcyB0YWIgaWYgdGhlcmUgYXJlIG5vIGNhdGVnb3JpZXMgZGVmaW5lZDwvcD4KPHA+KiBEaXNwbGF5IGEgbGluayBpbiB0aGUgZXJyb3IgcGFnZSB0aGF0IHRha2VzIHlvdSBiYWNrIHRvIHRoZSBtYWluIGFkbWluIHBhbmVsPC9wPgo8cD4qIEFsbG93IGZvciByZXBsYWNpbmcgb2YgdXBsb2FkZWQgZmlsZXM8L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuMTEuIC0gTWFyY2gsIDIwMDY8L3A+CjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciBhIGxpbmsgdG8gYSBkZXRhaWxlZCBwYWdlIHdoZW4gaW4gc3VtbWFyeSBtb2RlLjwvcD4KPHA+U3BsaXQgdGhlIGRlZmF1bHQgYWN0aW9uIGFuZCBkZWZhdWx0YWRtaW4gYWN0aW9ucyBpbnRvIHNlcGFyYXRlIGZpbGVzLCBmb3IgYSBiaXQgb2YgbWVtb3J5IGltcHJvdmVtZW50LCBob3BlZnVsbHk8L3A+CjxwPkFkZCB0aGUgYWJpbGl0eSB0byByZWRpcmVjdCB0byBhbm90aGVyIHBhZ2UgYWZ0ZXIgYSBmcm9udGVuZCB1c2VyIHVwbG9hZGVkIGEgZmlsZTwvcD4KPC9saT4KPGxpPgo8cD5WZXJzaW9uIDEuMS4xMi4gLSBNYXJjaCwgMjAwNjwvcD4KPHA+QWRkZWQgdGhlIHNpbmdsZXN1bW1hcnkgbW9kZSB0byBkaXNwbGF5IGEgc2luZ2xlIHVwbG9hZCBpbiBzdW1tYXJ5IG1vZGU8L1A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjEuMTMuIC0gQXByaWwsIDIwMDY8L3A+CjxwPkFkZGVkIG9wdGlvbmFsIGZpbHRlcmluZyBvbiB0aGUgZnJvbnRlbmQsIGFuZCBhIGNvdXBsZSBvZiBleHRyYSBwYXJhbWV0ZXJzIHRvIGdvIHdpdGggaXQ8L3A+CjxwPkZpeGVkIGEgcHJvYmxlbSB3aGVyZSBpdCB3b3VsZCBhbGxvdyB5b3UgdG8gZW50ZXIgYSBibGFuayBwYXRoIHdoZW4gY3JlYXRpbmcgYSBjYXRlZ29yeTwvcD4KPHA+U3BsaXQgc3R1ZmYgaW50byAoc29tZSkgc2VwYXJhdGUgYWN0aW9uIGZpbGVzIGZvciBzb21lIGhvcGVmdWwgcGVyZm9ybWFuY2UgaW5jcmVhc2VzPC9wPgo8cD5BZGRlZCBjb3B5cmlnaHQgbm90aWNlczwvcD4KPHA+Q2hhbmdlZCAob3B0aW9uYWwpIGRlcGVuZGVuY3kgZnJvbSBVc2VySUQgdG8gRnJvbnRFbmRVc2VycyBNb2R1bGUuPC9wPgo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4yLjEgLSBBcHJpbCwgMjAwNjwvcD4KPHA+Q2hhbmdlZCBfc2NhbkRpcmVjdG9yeSB0byBhbiBBUEkgZnVuY3Rpb24gU2NhbkRpcmVjdG9yeSBhbmQgdGhlbiBhZGRlZCBTbWFydFNjYW5EaXJlY3RvcnkgdG8gc2NhbiB0aGUgZGlyZWN0b3J5IGJlZm9yZSBkaXNwbGF5aW5nIHRoZSBzdW1tYXJ5IG9yIGRldGFpbCBsaXN0aW5nIHRvIGhhbmRsZSB0aGUKY2FzZSB3aGVyZSBzb21lYm9keSB1cGxvYWRlZCBmaWxlcyB2aWEgRlRQIG9yIHNvbWV0aGluZyBhbmQgZGlkIG5vdCBnbyBpbnRvIHRoZSBhZG1pbiBzZWN0aW9uIHRvIHVwZGF0ZSB0aGUgY2F0ZWdvcmllcy48L3A+CjxwPkNvcnJlY3Rpb24gdG8gYWxsIGRiIGFjY2VzcyBzdHVmZi4gSG9wZWZ1bGx5IHByb3ZpZGVzIGEgcGVyZm9ybWFuY2UgaW5jcmVhc2UuPC9wPgo8cD5GaXhlcyB0byB0aGUgYWJvdXQgc3R1ZmYsIG5vdyB1c2UgQ3JlYXRlUGFyYW1ldGVyPC9wPgo8cD5BZGRlZCB0aGUgdXBsb2FkX3RlbXBsYXRlLCBzdW1tYXJ5X3RlbXBsYXRlLCBhbmQgZGV0YWlsX3RlbXBsYXRlIChvcHRpb25hbCkgcGFyYW1ldGVyPC9wPgo8cD5BZGRlZCB0aGUgbm9hdXRob3IgcGFyYW1ldGVyLCBhbmQgdGhlIGtleSBwYXJhbWV0ZXIuICBUaGUga2V5IHBhcmFtZXRlciBhbGxvd3MgdGhlIHVwbG9hZHMgbW9kdWxlIHRvIGJlIGVtYmVkZGVkIGludG8gb3RoZXIgbW9kdWxlczwvcD4KPHA+TW92ZWQgdG8gdW5kZXIgdGhlIGNvbnRlbnQgbWVudSwgYW5kIGVudGl0bGVkIFwnRmlsZXMgKFVwbG9hZCBNb2R1bGUpXCc8L3A+Owo8L2xpPgo8bGk+CjxwPlZlcnNpb24gMS4yLjIgLSBKdW5lLCAyMDA2CjxwPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGhhdmUgbXVsdGlwbGUgZGF0YWJhc2UgdGVtcGxhdGVzLCBhbmQgdG8gc2VsZWN0IG9uZSBvbiB0aGUgdGFnIHdpdGggdGhlIHRlbXBsYXRlIHBhcmFtZXRlci48L3A+CjxwPkZpeGVkIGFuIGlzc3VlIHdoZXJlIGZpbGVzIHdlcmUgZ2V0dGluZyBjb3JydXB0ZWQgb24gZG93bmxvYWQ8L3A+CjwvbGk+CjxsaT4KPHA+VmVyc2lvbiAxLjIuMyAtIEp1bmUsIDIwMDYKPHA+Rml4ZXMgdG8gdXNlIGFkb2RiLWxpdGUgcHJvcGVyLCByYXRoZXIgdGhhbiB0ZWRzIGhhY2s8L3A+CjxwPkRldGFpbCBsaW5rIG5vdyBkaXNwbGF5cyBpbmxpbmU8L3A+CjxwPk90aGVyIG1pbm9yIHR3ZWFrcyB0aGF0IEkgY2FudCByZW1lbWJlcjwvcD4KPC9saT4KPGxpPlZlcnNpb24gMS4zLjAgLSBTZXB0ZW1iZXIsIDIwMDcKPHVsPgo8bGk+Rml4ZXMgdG8gdGhlIERUIGZpZWxkIHR5cGU8L2xpPgo8bGk+VXNlIHRoZSBGRVUgdXNlcm5hbWUgKG9wdGlvbmFsbHkpIHNvIHRoYXQgd2UgY2FuIHRyYWNrIHdoZW4gYSBsb2dnZWQgaW4gdXNlciB1cGxvYWRzIGEgZmlsZTwvbGk+CjxsaT5BZGQgZmlsZXR5cGUgY2FwYWJpbGl0aWVzIHRvIGFzc29jaWF0ZSBhbiBpY29uIHdpdGggYSBwYXJ0aWN1bGFyIHVwbG9hZC4gIEFsc28gc3VwcG9ydCBhbiB1bmtub3duIGZpbGUgdHlwZSBmb3IgYW55dGhpbmcgdGhhdCBkb2VzIG5vdCBtYXRjaC48L2xpPgo8bGk+Q29tcGxldGVseSByZS13b3JrZWQgdGhlIG11bHRpcGxlIGRhdGFiYXNlIHRlbXBsYXRlIHN0dWZmLjwvbGk+CjxsaT5BZGp1c3RtZW50cyB0byB0aGUgZGVmYXVsdCB0ZW1wbGF0ZXM8L2xpPgo8bGk+Rml4ZXMgdG8gdXNpbmcgY2F0ZWdvcnk9ImFsbCI8L2xpPgo8bGk+R2VuZXJhdGUgdGh1bWJuYWlscyBhdXRvbWF0aWNhbGx5IChvcHRpb25hbGx5KSBmb3IgY2VydGFpbiBmaWxlIHR5cGVzLCBvbiB1cGxvYWQsIGFuZCBvbiBzY2FuLjwvbGk+CjxsaT5BZGQgY2FwdGNoYSBzdXBwb3J0IHRvIHRoZSB1cGxvYWQgZm9ybTwvbGk+CjxsaT5BZGQgYSBzYWZlIG1vZGUgd2FybmluZyBpbiB0aGUgYWRtaW4gcGFuZWw8L2xpPgo8bGk+VXNlcyBjaHVua2VkIGRvd25sb2Fkcy48L2xpPgo8bGk+QWRkcyBwcmVmaXggYW5kIHByZWZpeF9mZXUgY2FwYWJpbGl0eSB0byB1cGxvYWRlZCBmaWxlcy48L2xpPgo8bGk+QWRkZWQgdGhlIGRldGFpbHBhZ2UgcGFyYW0uPC9saT4KPGxpPkFkZGVkIHRoZSBhYmlsaXR5IHRvIGRpc3BsYXkgYW4gaW1hZ2UgaW4gZnVsbCBzaXplIChvciB3aGF0ZXZlciBzaXplIHdlIHdhbnQpLCBzbyB0aGF0IHRoZSB1cGxvYWRzIG1vZHVsZSBjYW4gYmUgdXNlZCBhcyBhIGdhbGxlcnkuPC9saT4KPGxpPkFkZGVkIHNlY3VyaXR5ICh2aWEgdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlKSB0byBjYXRlZ29yaWVzPC9saT4KPGxpPkFkZGVkIGEgc2VsZWN0IG1vZGUgdG8gZ2VuZXJhdGUgYSBwdWxsZG93biBvZiBmaWxlcyBpbiBhIGNhdGVnb3J5LCBmb3IgdXNlIHdoZW4gYXR0YWNoaW5nIHVwbG9hZHMgbW9kdWxlIHRvIHNvbWUgb3RoZXIgbW9kdWxlLjwvbGk+CjxsaT5BZGRzIGEgY2F0ZWdvcnkgYnJvd3NlciwgZml4ZXMgYSByZXcgbWlub3IgaXNzdWVzLCBhbmQgdHdlYWtzIHRoZSBhdmFpbGFibGUgZmlsZSB0eXBlIGljb25zPC9saT4KPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuNCAtIE5vdmVtYmVyIDIwMDgKPHVsPgo8bGk+TWFqb3IgY2xlYW51cCBvZiB0aGUgZGVmYXVsdCBhY3Rpb248L2xpPgo8bGk+QWRkcyBwYWdpbmF0aW9uIHRvIHN1bW1hcnkgdmlldzwvbGk+CjxsaT5BZGRzIHByZXR0eSB1cmxzIGZvciBmaWxlIGxpbmtzPC9saT4KPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gcmVwbGFjZSB0aHVtYm5haWxzIGFmdGVyIHRoZSBmaWxlIGlzIHVwbG9hZWQuPC9saT4KPGxpPkNoYW5nZSB0aHVtYm5haWxzIGZyb20gdXNpbmcgYSAudGh1bWJzIGRpcmVjdG9yeSB0byB1c2luZyBhIHN0YW5kYXJkIHRodW1iXyBwcmVmaXguPC9saT4KPGxpPk51bWVyb3VzIEJ1Z2ZpeGVzPC9saT4KPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuNCAtIEZlYnJ1YXJ5IDIwMDkKICA8dWw+CiAgICAgPGxpPkZpeCBwcm9ibGVtIHdpdGggc2Nhbm5pbmcgZGlyZWN0b3JpZXMsIGFuZCBjcmVhdGluZyB0aHVtYm5haWxzLjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuNS4xIC0gTWF5IDIwMDkKICA8dWw+CiAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZGVsZXRlIGZpbGVzIGZyb20gdGhlIGZyb250ZW5kLjwvbGk+CiAgICAgPGxpPkZpeGVzIHByb2JsZW0gd2l0aCBzY2FuIGRpcmVjdG9yeSB3aGVuIG5vdCBhbHNvIGxvZ2dlZCBpbiB0byB0aGUgYWRtaW4gcGFuZWwgaW4gdGhlIHNhbWUgYnJvd3NlciBzZXNzaW9uLjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuNiAtIEZlYnJ1YXJ5IDIwMDkKICA8dWw+CiAgICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZGlzcGxheSBhIGZvcm0gdG8gc2VuZCBhbiBlbWFpbCB0byBzZWxlY3RlZCBwZW9wbGUgd2l0aCBkZXRhaWxzIGFib3V0IGEgZmlsZS48L2xpPgogICAgIDxsaT5BZGRzIHRoZSB5b3VzZW5kaXQgY2FwYWJpbGl0eSB0byB1cGxvYWQgYSBmaWxlIGFuZCBzaW11bHRhbm9lb3VzbHkgc2VuZCBkZXRhaWxzIHRvIHNlbGVjdGVkIHBlb3BsZS48L2xpPgogIDwvdWw+CjwvbGk+Cgo8bGk+VmVyc2lvbiAxLjcgLSBKdWx5IDIwMDkKICA8dWw+CiAgICAgPGxpPk5vdyBkZXBlbmRzIG9uIENHRXh0ZW5zaW9ucyBmb3IgdGVtcGxhdGluZzwvbGk+CiAgICAgPGxpPkFkZHMgdGltZSBsaW1pdGVkIFVSTFM8L2xpPgogIDwvdWw+CjwvbGk+Cgo8bGk+VmVyc2lvbiAxLjcuMSAtIEp1bHkgMjAwOQogIDx1bD4KICAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuOCAtIEp1bHkgMjAwOQogIDx1bD4KICAgIDxsaT5NaW5vciBidWcgZml4ZXMuPC9saT4KICAgIDxsaT5BZGQgYSBjYXRlZ29yeSBzZWxlY3QgY29udGVudCBibG9jayBmb3IgQ01TIDEuNy48L2xpPgogIDwvdWw+CjwvbGk+Cgo8bGk+VmVyc2lvbiAxLjkgLSBKdWx5IDIwMDkKICA8dWw+CiAgICA8bGk+VXBkYXRlcyBmb3IgQ01TIDEuNzwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuOS4xIC0gU2VwdGVtYmVyIDIwMDkKICA8dWw+CiAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuOS4yIC0gU2VwdGVtYmVyIDIwMDkKICA8dWw+CiAgICA8bGk+TWlub3IgYnVnIGZpeGVzLjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuOS4zIC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICAgPGxpPk9uZSBtaW5vciBidWcgZml4LjwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuOS40IC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICAgPGxpPm1pbm9yIGJ1ZyBmaXhlczwvbGk+CiAgPC91bD4KPC9saT4KCjxsaT5WZXJzaW9uIDEuMTAgLSBPY3RvYmVyIDIwMDkKICA8dWw+CiAgICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byBhdXRvIGRlbGV0ZSBmaWxlcyBiZXNlZCBvbiBhIG1heCBhZ2Ugc3BlY2lmaWVkIGluIHRoZSBjYXRlZ29yeTwvbGk+CiAgICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byBhZGQgYSB0aW1lIGxpbWl0ZWQga2V5LCBhbmQgc2VuZCBhbiBlbWFpbCBhdXRvbWF0aWNhbGx5IG9uIHVwbG9hZCBpbiB0aGUgYWRtaW4uPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMC4xIC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICA8bGk+Rml4ZXMgYnVnIHdpdGggZGVsZXRlaW5nIGZpbGVzLiAtIHRoZSBkZWxldGUgdXJsIGlzIHN0aWxsIG5vdCBpbiB0aGUgZGVmYXVsdCBzdW1tYXJ5IHRlbXBsYXRlIChpbnRlbnRvbmFsbHkpPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMC4yIC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICA8bGk+QWRkcyBhIG5ldyBwZXJtaXNzaW9uIHRoYXQgYWxsb3dzIG9ubHkgYWNjZXNzIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9uIHRoZSBmaWxlcyB0YWIuPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMC4zIC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICA8bGk+TWlub3IgQnVnIEZpeGVzPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMC40IC0gT2N0b2JlciAyMDA5CiAgPHVsPgogICA8bGk+TWlub3IgQnVnIEZpeGVzPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMSAtIE1hcmNoLCAyMDEwCiAgPHVsPgogICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byBvcHRpb25hbGx5IGRpc2FibGUgc2Nhbm5pbmcgb2YgY2F0ZWdvcmllcy48L2xpPgogIDwvdWw+CjwvbGk+Cgo8bGk+VmVyc2lvbiAxLjExLjEgLSBNYXJjaCwgMjAxMAogIDx1bD4KICAgPGxpPkZpeCBtaW5vciBpc3N1ZXMuPC9saT4KICA8L3VsPgo8L2xpPgoKPGxpPlZlcnNpb24gMS4xMS4yIC0gTWFyY2gsIDIwMTAKICA8dWw+CiAgIDxsaT5GaXggbWlub3IgaXNzdWVzLjwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xMS4zIC0gQXByaWwsIDIwMTAKICA8dWw+CiAgIDxsaT5GaXggbWlub3IgaXNzdWVzLjwvbGk+CiAgIDxsaT5JbXByb3ZlbWVudHMgdG8gQ29weSBQcm9kdWN0IChUZWQpPC9saT4KICAgPGxpPkFkZHMgdGhlIGFiaWxpdHkgdG8gZmlsdGVyIHN1bW1hcnkgbGlzdCBieSBhZGRpdGlvbmFsIGZpZWxkcy4gKFRlZCk8L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTEuNCAtIEp1bHksIDIwMTAKICA8dWw+CiAgIDxsaT5GaXggbWlub3IgaXNzdWVzIHdpdGggY2F0ZWdvcnk9YWxsPC9saT4KICAgPGxpPkZpeGVzIHByb2JsZW0gd2l0aCBzZWFyY2ggaW5kZXhpbmcuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjExLjUgLSBTZXB0LCAyMDEwCiAgPHVsPgogICA8bGk+Rml4IG1pbm9yIGNvbXBhdGliaWxpdHkgaXNzdWUuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjExLjYgLSBKYW4sIDIwMTEKIDx1bD4KICA8bGk+Rml4ZXMgc2xvdyBxdWVyaWVzIGluIGRlZmF1bHQgbW9kZSB3aGVuIHRoZXJlIGFyZSBtYW55IGRvd25sb2FkcyB0byBnYXRoZXIgc3RhdGlzdGljcyBmb3IuPC9saT4KICA8bGk+TWlub3IgZml4ZXMgcmVsYXRlZCB0byBFX1NUUklDVC48L2xpPgogIDxsaT5NaW5vciB1cGRhdGVzIHRvIGhlbHAuPC9saT4KIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTIgLSBNYXksIDIwMTEKICA8dWw+CiAgICAgPGxpPkFkZHMgc29tZSBuZXcgQVBJIGNsYXNzZXMsIGFuZCBtaW5vciBvcHRpbWl6YXRpb25zLjwvbGk+CiAgICAgPGxpPkFkZHMgYSBzbWFydHkgcGx1Z2luIGZvciBjb3B5aW5nIGFueSBmaWxlIGludG8gdGhlIHVwbG9hZHMgbW9kdWxlIGFuZCBnZW5lcmF0aW5nIGEgdGltZSBsaW1pdGVkIFVSTDwvbGk+CiAgPC91bD4KPC9saT4KPGxpPlZlcnNpb24gMS4xMyAtIE1heSwgMjAxMQogIDx1bD4KICAgICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byB2aWV3IHRoZSB1cGxvYWRlZCBmaWxlcyBmcm9tIHdpdGhpbiB0aGUgYWRtaW4gaW50ZXJmYWNlLjwvbGk+CiAgICAgPGxpPkFkZHMgYWRtaW4gcGFnaW5hdGlvbi48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTQgLSBBdWd1c3QsIDIwMTEKICA8dWw+CiAgICAgPGxpPkFkZHMgcHJldHR5IHVybCBzdXBwb3J0IGZvciBkZXRhaWwgdXJscy48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTQuMyAtIEphbnVhcnksIDIwMTEKICA8dWw+CiAgICA8bGk+TWlub3IgZW5oYW5jZW1lbnRzIGFuZCBidWcgZml4ZXMuPC9saT4KICAgIDxsaT5Nb3ZlcyBoZWxwIGV4dGVybmFsLjwvbGk+CiAgICA8bGk+TWlub3Igb3B0aW1pemF0aW9ucyBmb3IgMS4xMS54PC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE2LngKICA8dWw+CiAgICA8bGk+TnVtZXJvdXMgbWlub3IgZW5oYW5jZW1lbnRzIGFuZCBidWcgZml4ZXMuPC9saT4KICAgIDxsaT5BZGRzIHJlcG9ydGluZyBvcHRpb25zLjwvbGk+CiAgICA8bGk+UGVyZm9ybWFuY2UgaW1wcm92ZW1udHMuPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE3LngKICA8dWw+CiAgICA8bGk+QWRkcyB0aGUgYWJpbGl0eSB0byAob3B0aW9uYWxsKSBjaGFuZ2UgdGhlIHVwbG9hZCBkYXRlIG9mIGEgZmlsZS48L2xpPgogIDwvdWw+CjwvbGk+CjxsaT5WZXJzaW9uIDEuMTgueAogIDx1bD4KCTxsaT5TaWduaWZpY2FudCBjbGVhbnVwIGFuZCBtZW1vcnkgb3B0aW1pemF0aW9uLjwvbGk+Cgk8bGk+QWRkcyBhYmlsaXR5IHRvIGluZGV4IHRleHQgYW5kIFBERiBmaWxlcy48L2xpPgoJPGxpPkNsZWFuIHVwIGVudGl0aWVzIGluIHRoZSBkZWZhdWx0LCBhZGQgY2F0ZWdvcnkgYW5kIGVkaXQgY2F0ZWdvcnkgYWN0aW9ucy48L2xpPgoJPGxpPkNsZWFuIHVwIGVudGl0aWVzIGFuZCBzYW5pdGl6ZSBpbnB1dCBpbiB0aGUgZGVmYXVsdCB1cGxvYWQgbW9kZS48L2xpPgoJPGxpPkFkZHMgYSBjbGFzcyBmb3IgbWFuYWdpbmcgY2F0ZWdvcmllcy4uLigxLjE4LjUpPC9saT4KICA8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE5Cgk8dWw+Cgk8bGk+QWRkcyB0aGUgY2F0ZWdvcnlsaXN0IGFjdGlvbiBhbmQgYXNzb2NpYXRlZCBwYXJhbWV0ZXJzLiAgUmVtb3ZlcyB0aGUgYnJva2VuIGNhdGVnb3J5c3VtbWFyeSB2aWV3LjwvbGk+Cgk8bGk+Q29udmVydHMgbW9zdCBzdW1tYXJ5IHZpZXdzLCBhbmQgdGhlIGRldGFpbCBhY3Rpb24gdG8gdXNlIHRoZSBzbWFydHkgdGVtcGxhdGUgb2JqZWN0IGluc3RlYWQgb2YgdGhlIGdsb2JhbCBzbWFydHkgb2JqZWN0LjwvbGk+Cgk8L3VsPgo8L2xpPgo8bGk+VmVyc2lvbiAxLjE5LjEKIAk8dWw+Cgk8bGk+TWlub3IgYnVnIGZpeC48L2xpPgoJPC91bD4KPC9saT4KPC91bD4K]]></data>
	</file>
	<file>
	  <filename>/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAicmVxdWlyZSI6IHsKICAgICAgInNtYWxvdC9wZGZwYXJzZXIiOiAiKiIKICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/composer.lock</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIl9yZWFkbWUiOiBbCiAgICAgICAgIlRoaXMgZmlsZSBsb2NrcyB0aGUgZGVwZW5kZW5jaWVzIG9mIHlvdXIgcHJvamVjdCB0byBhIGtub3duIHN0YXRlIiwKICAgICAgICAiUmVhZCBtb3JlIGFib3V0IGl0IGF0IGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcvZG9jLzAxLWJhc2ljLXVzYWdlLm1kI2NvbXBvc2VyLWxvY2stdGhlLWxvY2stZmlsZSIKICAgIF0sCiAgICAiaGFzaCI6ICJkM2MzNjNlZjM2M2I5YTlkNmU4OWNiZDI4ZDQwMzNhNSIsCiAgICAicGFja2FnZXMiOiBbCiAgICAgICAgewogICAgICAgICAgICAibmFtZSI6ICJzbWFsb3QvcGRmcGFyc2VyIiwKICAgICAgICAgICAgInZlcnNpb24iOiAidjAuOS4yMCIsCiAgICAgICAgICAgICJzb3VyY2UiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJnaXQiLAogICAgICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlci5naXQiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzNjUzNGFjNDYwYjA2MzU1OGZhNDQ1MWRiOWJiZjk0YjdkODE3ZGM2IgogICAgICAgICAgICB9LAogICAgICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInppcCIsCiAgICAgICAgICAgICAgICAidXJsIjogImh0dHBzOi8vYXBpLmdpdGh1Yi5jb20vcmVwb3Mvc21hbG90L3BkZnBhcnNlci96aXBiYWxsLzM2NTM0YWM0NjBiMDYzNTU4ZmE0NDUxZGI5YmJmOTRiN2Q4MTdkYzYiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzNjUzNGFjNDYwYjA2MzU1OGZhNDQ1MWRiOWJiZjk0YjdkODE3ZGM2IiwKICAgICAgICAgICAgICAgICJzaGFzdW0iOiAiIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIsCiAgICAgICAgICAgICAgICAidGVjbmljay5jb20vdGNwZGYiOiAiPj02LjAuMDUwIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICAgICAiYXRvdW0vYXRvdW0iOiAiZGV2LW1hc3RlciIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJwc3ItMCI6IHsKICAgICAgICAgICAgICAgICAgICAiU21hbG90XFxQZGZQYXJzZXJcXCI6ICJzcmMvIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkdQTC0zLjAiCiAgICAgICAgICAgIF0sCiAgICAgICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICJuYW1lIjogIlNlYmFzdGllbiBNQUxPVCIsCiAgICAgICAgICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGllbkBtYWxvdC5mciIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cubWFsb3QuZnIiLAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlBkZiBwYXJzZXIgbGlicmFyeS4gQ2FuIHJlYWQgYW5kIGV4dHJhY3QgaW5mb3JtYXRpb24gZnJvbSBwZGYgZmlsZS4iLAogICAgICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5wZGZwYXJzZXIub3JnIiwKICAgICAgICAgICAgInRpbWUiOiAiMjAxNC0wMi0xNiAyMzoxMDo0MSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAidGVjbmljay5jb20vdGNwZGYiLAogICAgICAgICAgICAidmVyc2lvbiI6ICI2LjAuMDcxIiwKICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogImdpdCIsCiAgICAgICAgICAgICAgICAidXJsIjogImdpdDovL2dpdC5jb2RlLnNmLm5ldC9wL3RjcGRmL2NvZGUiLAogICAgICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlODU1NjlmYzAzNTE1MDFlZDUxNjQzZGYxYjEyZjY2Njk2NzI3YjhhIgogICAgICAgICAgICB9LAogICAgICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgInR5cGUiOiAibGlicmFyeSIsCiAgICAgICAgICAgICJhdXRvbG9hZCI6IHsKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IFsKICAgICAgICAgICAgICAgICAgICAiZm9udHMiLAogICAgICAgICAgICAgICAgICAgICJjb25maWciLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlIiwKICAgICAgICAgICAgICAgICAgICAidGNwZGYucGhwIiwKICAgICAgICAgICAgICAgICAgICAidGNwZGZfcGFyc2VyLnBocCIsCiAgICAgICAgICAgICAgICAgICAgInRjcGRmX2ltcG9ydC5waHAiLAogICAgICAgICAgICAgICAgICAgICJ0Y3BkZl9iYXJjb2Rlc18xZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJ0Y3BkZl9iYXJjb2Rlc18yZC5waHAiLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2NvbG9ycy5waHAiLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2ZpbHRlcnMucGhwIiwKICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZS90Y3BkZl9mb250X2RhdGEucGhwIiwKICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZS90Y3BkZl9mb250cy5waHAiLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2ltYWdlcy5waHAiLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX3N0YXRpYy5waHAiLAogICAgICAgICAgICAgICAgICAgICJpbmNsdWRlL2JhcmNvZGVzL2RhdGFtYXRyaXgucGhwIiwKICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZS9iYXJjb2Rlcy9wZGY0MTcucGhwIiwKICAgICAgICAgICAgICAgICAgICAiaW5jbHVkZS9iYXJjb2Rlcy9xcmNvZGUucGhwIgogICAgICAgICAgICAgICAgXQogICAgICAgICAgICB9LAogICAgICAgICAgICAibm90aWZpY2F0aW9uLXVybCI6ICJodHRwczovL3BhY2thZ2lzdC5vcmcvZG93bmxvYWRzLyIsCiAgICAgICAgICAgICJsaWNlbnNlIjogWwogICAgICAgICAgICAgICAgIkxHUEx2MyIKICAgICAgICAgICAgXSwKICAgICAgICAgICAgImF1dGhvcnMiOiBbCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiAiTmljb2xhIEFzdW5pIiwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiAiaW5mb0B0ZWNuaWNrLmNvbSIsCiAgICAgICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9uaWNvbGFhc3VuaS50ZWNuaWNrLmNvbSIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRDUERGIGlzIGEgUEhQIGNsYXNzIGZvciBnZW5lcmF0aW5nIFBERiBkb2N1bWVudHMuIiwKICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cudGNwZGYub3JnLyIsCiAgICAgICAgICAgICJrZXl3b3JkcyI6IFsKICAgICAgICAgICAgICAgICJQREZEMzIwMDAtMjAwOCIsCiAgICAgICAgICAgICAgICAiVENQREYiLAogICAgICAgICAgICAgICAgImJhcmNvZGVzIiwKICAgICAgICAgICAgICAgICJkYXRhbWF0cml4IiwKICAgICAgICAgICAgICAgICJwZGYiLAogICAgICAgICAgICAgICAgInBkZjQxNyIsCiAgICAgICAgICAgICAgICAicXJjb2RlIgogICAgICAgICAgICBdLAogICAgICAgICAgICAidGltZSI6ICIyMDE0LTA0LTI1IDE4OjEzOjAyIgogICAgICAgIH0KICAgIF0sCiAgICAicGFja2FnZXMtZGV2IjogWwoKICAgIF0sCiAgICAiYWxpYXNlcyI6IFsKCiAgICBdLAogICAgIm1pbmltdW0tc3RhYmlsaXR5IjogInN0YWJsZSIsCiAgICAic3RhYmlsaXR5LWZsYWdzIjogWwoKICAgIF0sCiAgICAicGxhdGZvcm0iOiBbCgogICAgXSwKICAgICJwbGF0Zm9ybS1kZXYiOiBbCgogICAgXQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/composer.phar</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9lbnYgcGhwCjw/cGhwCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldwogKiB0aGUgbGljZW5zZSB0aGF0IGlzIGxvY2F0ZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGlzIGZpbGUuCiAqLwoKUGhhcjo6bWFwUGhhcignY29tcG9zZXIucGhhcicpOwpkZWZpbmUoJ0NPTVBPU0VSX0RFVl9XQVJOSU5HX1RJTUUnLCAxNDAxMTQ4ODA3KTsKcmVxdWlyZSAncGhhcjovL2NvbXBvc2VyLnBoYXIvYmluL2NvbXBvc2VyJzsKCl9fSEFMVF9DT01QSUxFUigpOyA/Pg0KS24AAFMBAAARAAAAAQANAAAAY29tcG9zZXIucGhhcgAAAAARAAAAc3JjL2Jvb3RzdHJhcC5waHDFAQAAh0hcU8UBAACorzKQtgEAAAAAAAAdAAAAc3JjL0NvbXBvc2VyL0lPL0NvbnNvbGVJTy5waHBHDwAAh0hcU0cPAAAeGq+XtgEAAAAAAAAaAAAAc3JjL0NvbXBvc2VyL0lPL051bGxJTy5waHAlAwAAh0hcUyUDAAB+YJ8EtgEAAAAAAAAfAAAAc3JjL0NvbXBvc2VyL0lPL0lPSW50ZXJmYWNlLnBocPYDAACHSFxT9gMAAEdqrzq2AQAAAAAAABoAAABzcmMvQ29tcG9zZXIvSU8vQmFzZUlPLnBocGQEAACHSFxTZAQAAOZH3NG2AQAAAAAAABwAAABzcmMvQ29tcG9zZXIvSU8vQnVmZmVySU8ucGhwKwQAAIdIXFMrBAAAXQsS7bYBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9Db21tYW5kL1J1blNjcmlwdENvbW1hbmQucGhwfAgAAIdIXFN8CAAA98wQ4rYBAAAAAAAAKAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0RpYWdub3NlQ29tbWFuZC5waHClLAAAh0hcU6UsAABx71gTtgEAAAAAAAAnAAAAc3JjL0NvbXBvc2VyL0NvbW1hbmQvQXJjaGl2ZUNvbW1hbmQucGhwjA8AAIdIXFOMDwAAtJDTvrYBAAAAAAAAIAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0NvbW1hbmQucGhwrAQAAIdIXFOsBAAASBcxL7YBAAAAAAAALQAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0NyZWF0ZVByb2plY3RDb21tYW5kLnBocEowAACHSFxTSjAAAGQSgT62AQAAAAAAACUAAABzcmMvQ29tcG9zZXIvQ29tbWFuZC9BYm91dENvbW1hbmQucGhwtwIAAIdIXFO3AgAAu03mKrYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL1Nob3dDb21tYW5kLnBocDwuAACHSFxTPC4AANd2AVC2AQAAAAAAACYAAABzcmMvQ29tcG9zZXIvQ29tbWFuZC9VcGRhdGVDb21tYW5kLnBocPIRAACHSFxT8hEAAHkaekO2AQAAAAAAACYAAABzcmMvQ29tcG9zZXIvQ29tbWFuZC9Db25maWdDb21tYW5kLnBocDcpAACHSFxTNykAAAvQBo62AQAAAAAAACcAAABzcmMvQ29tcG9zZXIvQ29tbWFuZC9JbnN0YWxsQ29tbWFuZC5waHDWEAAAh0hcU9YQAACe9c46tgEAAAAAAAAoAAAAc3JjL0NvbXBvc2VyL0NvbW1hbmQvVmFsaWRhdGVDb21tYW5kLnBocEcIAACHSFxTRwgAANkOO3K2AQAAAAAAACcAAABzcmMvQ29tcG9zZXIvQ29tbWFuZC9EZXBlbmRzQ29tbWFuZC5waHB1CgAAh0hcU3UKAACihLCZtgEAAAAAAAAmAAAAc3JjL0NvbXBvc2VyL0NvbW1hbmQvU2VhcmNoQ29tbWFuZC5waHBdCQAAh0hcU10JAACL1GtltgEAAAAAAAAqAAAAc3JjL0NvbXBvc2VyL0NvbW1hbmQvU2VsZlVwZGF0ZUNvbW1hbmQucGhwmRgAAIdIXFOZGAAAEQsiiLYBAAAAAAAAKAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0xpY2Vuc2VzQ29tbWFuZC5waHAvCgAAh0hcUy8KAABU3YHjtgEAAAAAAAAnAAAAc3JjL0NvbXBvc2VyL0NvbW1hbmQvUmVxdWlyZUNvbW1hbmQucGhwthMAAIdIXFO2EwAAcktC/rYBAAAAAAAALAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0R1bXBBdXRvbG9hZENvbW1hbmQucGhwuAYAAIdIXFO4BgAAfoDuvbYBAAAAAAAAJgAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0dsb2JhbENvbW1hbmQucGhwCQcAAIdIXFMJBwAAU7UWxrYBAAAAAAAALAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0hlbHBlci9EaWFsb2dIZWxwZXIucGhwngEAAIdIXFOeAQAAlYKMJrYBAAAAAAAAJgAAAHNyYy9Db21wb3Nlci9Db21tYW5kL1N0YXR1c0NvbW1hbmQucGhwRwkAAIdIXFNHCQAA6ASZS7YBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9Db21tYW5kL0luaXRDb21tYW5kLnBocFMxAACHSFxTUzEAAN+vABm2AQAAAAAAACkAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9WY3NEb3dubG9hZGVyLnBocE0PAACHSFxTTQ8AAC1FJsq2AQAAAAAAACkAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9SYXJEb3dubG9hZGVyLnBocMQHAACHSFxTxAcAAG6cMi62AQAAAAAAACoAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9GaWxlRG93bmxvYWRlci5waHBLFAAAh0hcU0sUAADHV9bRtgEAAAAAAAApAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvU3ZuRG93bmxvYWRlci5waHBfDwAAh0hcU18PAABJ8QPXtgEAAAAAAAAwAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvUGVhclBhY2thZ2VFeHRyYWN0b3IucGhwZRsAAIdIXFNlGwAA16FQurYBAAAAAAAAKwAAAHNyYy9Db21wb3Nlci9Eb3dubG9hZGVyL0Rvd25sb2FkTWFuYWdlci5waHCqEQAAh0hcU6oRAACwtX7ktgEAAAAAAAAvAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvRG93bmxvYWRlckludGVyZmFjZS5waHDKAQAAh0hcU8oBAABncyFstgEAAAAAAAAuAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvVHJhbnNwb3J0RXhjZXB0aW9uLnBocJYBAACHSFxTlgEAAGgiQnK2AQAAAAAAACoAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9QaGFyRG93bmxvYWRlci5waHDlAAAAh0hcU+UAAADeyR/ntgEAAAAAAAApAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvVGFyRG93bmxvYWRlci5waHDjAAAAh0hcU+MAAADNklg/tgEAAAAAAAAoAAAAc3JjL0NvbXBvc2VyL0Rvd25sb2FkZXIvSGdEb3dubG9hZGVyLnBocCQIAACHSFxTJAgAAMhjgO+2AQAAAAAAADEAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9DaGFuZ2VSZXBvcnRJbnRlcmZhY2UucGhwzAAAAIdIXFPMAAAAr+Cov7YBAAAAAAAALQAAAHNyYy9Db21wb3Nlci9Eb3dubG9hZGVyL0FyY2hpdmVEb3dubG9hZGVyLnBocC4MAACHSFxTLgwAAPWicuO2AQAAAAAAAC8AAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9GaWxlc3lzdGVtRXhjZXB0aW9uLnBocA8BAACHSFxTDwEAAF1UvYi2AQAAAAAAAC4AAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9QZXJmb3JjZURvd25sb2FkZXIucGhwYgcAAIdIXFNiBwAAEUlSt7YBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9Eb3dubG9hZGVyL1ppcERvd25sb2FkZXIucGhwuQoAAIdIXFO5CgAAHye/EbYBAAAAAAAAKgAAAHNyYy9Db21wb3Nlci9Eb3dubG9hZGVyL0d6aXBEb3dubG9hZGVyLnBocLcFAACHSFxTtwUAAFkjGd+2AQAAAAAAACkAAABzcmMvQ29tcG9zZXIvRG93bmxvYWRlci9HaXREb3dubG9hZGVyLnBocGA1AACHSFxTYDUAANGnDe62AQAAAAAAADYAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9JbnZhbGlkUmVwb3NpdG9yeUV4Y2VwdGlvbi5waHBuAAAAh0hcU24AAADgk+uYtgEAAAAAAAArAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvQXJyYXlSZXBvc2l0b3J5LnBocAcMAACHSFxTBwwAAGv/Yue2AQAAAAAAADAAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9GaWxlc3lzdGVtUmVwb3NpdG9yeS5waHC2BAAAh0hcU7YEAACOWZV6tgEAAAAAAAA3AAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvV3JpdGFibGVSZXBvc2l0b3J5SW50ZXJmYWNlLnBocIkBAACHSFxTiQEAAJEvc++2AQAAAAAAACoAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9QZWFyUmVwb3NpdG9yeS5waHBiFQAAh0hcU2IVAAAp9DgktgEAAAAAAAAtAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUmVwb3NpdG9yeU1hbmFnZXIucGhwswcAAIdIXFOzBwAAMzO477YBAAAAAAAAMwAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1dyaXRhYmxlQXJyYXlSZXBvc2l0b3J5LnBocA8DAACHSFxTDwMAAL5HFyq2AQAAAAAAACwAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9WY3MvR2l0SHViRHJpdmVyLnBocEAmAACHSFxTQCYAAFJ/Lei2AQAAAAAAADIAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9WY3MvR2l0Qml0YnVja2V0RHJpdmVyLnBocOYMAACHSFxT5gwAAFG8XRe2AQAAAAAAACkAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9WY3MvR2l0RHJpdmVyLnBocHAZAACHSFxTcBkAAErMm7K2AQAAAAAAAC4AAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9WY3MvUGVyZm9yY2VEcml2ZXIucGhwIQoAAIdIXFMhCgAAV5KftrYBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1Zjcy9Tdm5Ecml2ZXIucGhwqhgAAIdIXFOqGAAA+jdD/rYBAAAAAAAAMgAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1Zjcy9WY3NEcml2ZXJJbnRlcmZhY2UucGhwiQIAAIdIXFOJAgAAcE/jpLYBAAAAAAAAKAAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1Zjcy9IZ0RyaXZlci5waHDyEgAAh0hcU/ISAAAcosH3tgEAAAAAAAApAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvVmNzL1Zjc0RyaXZlci5waHA1BgAAh0hcUzUGAABk0hF+tgEAAAAAAAAxAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvVmNzL0hnQml0YnVja2V0RHJpdmVyLnBocO4NAACHSFxT7g0AANUPJ8O2AQAAAAAAADQAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9JbnN0YWxsZWRBcnJheVJlcG9zaXRvcnkucGhwowAAAIdIXFOjAAAAL/Z+PrYBAAAAAAAANwAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1JlcG9zaXRvcnlTZWN1cml0eUV4Y2VwdGlvbi5waHBvAAAAh0hcU28AAABw1auqtgEAAAAAAAA5AAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvU3RyZWFtYWJsZVJlcG9zaXRvcnlJbnRlcmZhY2UucGhwhAEAAIdIXFOEAQAAOP4BtrYBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1Zjc1JlcG9zaXRvcnkucGhw3xwAAIdIXFPfHAAAmKZ087YBAAAAAAAALgAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1BsYXRmb3JtUmVwb3NpdG9yeS5waHCeDgAAh0hcU54OAABoGJBvtgEAAAAAAAA5AAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvSW5zdGFsbGVkRmlsZXN5c3RlbVJlcG9zaXRvcnkucGhwowAAAIdIXFOjAAAAVgqVX7YBAAAAAAAALwAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L0NvbXBvc2l0ZVJlcG9zaXRvcnkucGhwCAkAAIdIXFMICQAANPoDRbYBAAAAAAAAOAAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L0luc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UucGhwhwAAAIdIXFOHAAAAGKM5cLYBAAAAAAAALgAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L0NvbXBvc2VyUmVwb3NpdG9yeS5waHAVOgAAh0hcUxU6AACeIgA1tgEAAAAAAAAvAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUGVhci9EZXBlbmRlbmN5SW5mby5waHBxAQAAh0hcU3EBAABmulTytgEAAAAAAAA4AAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUGVhci9QYWNrYWdlRGVwZW5kZW5jeVBhcnNlci5waHAhFgAAh0hcUyEWAAA9zPNGtgEAAAAAAAAsAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUGVhci9DaGFubmVsSW5mby5waHDEAQAAh0hcU8QBAAA6VCrJtgEAAAAAAAAuAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUGVhci9DaGFubmVsUmVhZGVyLnBocG4GAACHSFxTbgYAAByaOBW2AQAAAAAAACwAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9QZWFyL1BhY2thZ2VJbmZvLnBocLADAACHSFxTsAMAAJ8NuAy2AQAAAAAAADUAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9QZWFyL0RlcGVuZGVuY3lDb25zdHJhaW50LnBocHECAACHSFxTcQIAADkOFz22AQAAAAAAADQAAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9QZWFyL0NoYW5uZWxSZXN0MTFSZWFkZXIucGhwJgkAAIdIXFMmCQAA8lViCLYBAAAAAAAALAAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1BlYXIvUmVsZWFzZUluZm8ucGhwkgEAAIdIXFOSAQAAb5OKw7YBAAAAAAAAMgAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1BlYXIvQmFzZUNoYW5uZWxSZWFkZXIucGhwNgUAAIdIXFM2BQAALmZpIbYBAAAAAAAANAAAAHNyYy9Db21wb3Nlci9SZXBvc2l0b3J5L1BlYXIvQ2hhbm5lbFJlc3QxMFJlYWRlci5waHDBCQAAh0hcU8EJAAAET4DrtgEAAAAAAAAvAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvUmVwb3NpdG9yeUludGVyZmFjZS5waHDUAQAAh0hcU9QBAADykJ/JtgEAAAAAAAAuAAAAc3JjL0NvbXBvc2VyL1JlcG9zaXRvcnkvQXJ0aWZhY3RSZXBvc2l0b3J5LnBocN8KAACHSFxT3woAANMM4SS2AQAAAAAAAC0AAABzcmMvQ29tcG9zZXIvUmVwb3NpdG9yeS9QYWNrYWdlUmVwb3NpdG9yeS5waHBHAwAAh0hcU0cDAADtBDprtgEAAAAAAAAoAAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvQ29tcGxldGVQYWNrYWdlLnBocNgFAACHSFxT2AUAADhHbF22AQAAAAAAACsAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9EdW1wZXIvQXJyYXlEdW1wZXIucGhwawoAAIdIXFNrCgAAk7suHbYBAAAAAAAANwAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0xvYWRlci9JbnZhbGlkUGFja2FnZUV4Y2VwdGlvbi5waHBFAgAAh0hcU0UCAAB4YhO+tgEAAAAAAAAqAAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvTG9hZGVyL0pzb25Mb2FkZXIucGhw+QEAAIdIXFP5AQAAIX6Ie7YBAAAAAAAALwAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0xvYWRlci9Mb2FkZXJJbnRlcmZhY2UucGhwsgAAAIdIXFOyAAAApn36zrYBAAAAAAAAKwAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0xvYWRlci9BcnJheUxvYWRlci5waHABGAAAh0hcUwEYAACjQUlhtgEAAAAAAAA1AAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvTG9hZGVyL1ZhbGlkYXRpbmdBcnJheUxvYWRlci5waHD0LQAAh0hcU/QtAABr1xNztgEAAAAAAAAxAAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvTG9hZGVyL1Jvb3RQYWNrYWdlTG9hZGVyLnBocGIhAACHSFxTYiEAAIu/8ty2AQAAAAAAAB8AAABzcmMvQ29tcG9zZXIvUGFja2FnZS9Mb2NrZXIucGhw9BoAAIdIXFP0GgAApNOsSrYBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL1BhY2thZ2VJbnRlcmZhY2UucGhwlAYAAIdIXFOUBgAA8vUMxLYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0Jhc2VQYWNrYWdlLnBocFsKAACHSFxTWwoAACQItdK2AQAAAAAAAC4AAABzcmMvQ29tcG9zZXIvUGFja2FnZS9WZXJzaW9uL1ZlcnNpb25QYXJzZXIucGhwZiUAAIdIXFNmJQAA5ZABbrYBAAAAAAAAMQAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0NvbXBsZXRlUGFja2FnZUludGVyZmFjZS5waHChAQAAh0hcU6EBAACWzzKXtgEAAAAAAAAtAAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvUm9vdFBhY2thZ2VJbnRlcmZhY2UucGhwtAEAAIdIXFO0AQAA6nFL0LYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL1Jvb3RQYWNrYWdlLnBocG4EAACHSFxTbgQAAOFBQ0+2AQAAAAAAADMAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9BcmNoaXZlci9BcmNoaXZlckludGVyZmFjZS5waHDvAAAAh0hcU+8AAAAHPMq4tgEAAAAAAAA3AAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvQXJjaGl2ZXIvQ29tcG9zZXJFeGNsdWRlRmlsdGVyLnBocB8BAACHSFxTHwEAAItTWjC2AQAAAAAAAC4AAABzcmMvQ29tcG9zZXIvUGFja2FnZS9BcmNoaXZlci9QaGFyQXJjaGl2ZXIucGhwWwMAAIdIXFNbAwAAyjXN+LYBAAAAAAAAMwAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0FyY2hpdmVyL0Jhc2VFeGNsdWRlRmlsdGVyLnBocOQGAACHSFxT5AYAANsu60a2AQAAAAAAADIAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9BcmNoaXZlci9HaXRFeGNsdWRlRmlsdGVyLnBocHcDAACHSFxTdwMAAExnVbu2AQAAAAAAADcAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9BcmNoaXZlci9BcmNoaXZhYmxlRmlsZXNGaW5kZXIucGhwZQQAAIdIXFNlBAAAVOyMerYBAAAAAAAAMAAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0FyY2hpdmVyL0FyY2hpdmVNYW5hZ2VyLnBocEwLAACHSFxTTAsAAKUFEe+2AQAAAAAAADEAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9BcmNoaXZlci9IZ0V4Y2x1ZGVGaWx0ZXIucGhwEwUAAIdIXFMTBQAAfpQOuLYBAAAAAAAAKQAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL1Jvb3RBbGlhc1BhY2thZ2UucGhw3gMAAIdIXFPeAwAA1RI+BbYBAAAAAAAAIAAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL1BhY2thZ2UucGhwQRUAAIdIXFNBFQAAXiqdB7YBAAAAAAAAJQAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0FsaWFzUGFja2FnZS5waHCTEgAAh0hcU5MSAAB/TDentgEAAAAAAAAdAAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvTGluay5waHBRBQAAh0hcU1EFAACHzzkEtgEAAAAAAAA3AAAAc3JjL0NvbXBvc2VyL1BhY2thZ2UvTGlua0NvbnN0cmFpbnQvRW1wdHlDb25zdHJhaW50LnBocOoBAACHSFxT6gEAAADsG762AQAAAAAAADcAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9MaW5rQ29uc3RyYWludC9NdWx0aUNvbnN0cmFpbnQucGhwZwQAAIdIXFNnBAAAePUYOLYBAAAAAAAAOQAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0xpbmtDb25zdHJhaW50L1ZlcnNpb25Db25zdHJhaW50LnBocMkIAACHSFxTyQgAAHk/s9i2AQAAAAAAADoAAABzcmMvQ29tcG9zZXIvUGFja2FnZS9MaW5rQ29uc3RyYWludC9TcGVjaWZpY0NvbnN0cmFpbnQucGhwcQIAAIdIXFNxAgAAllOa+LYBAAAAAAAAPwAAAHNyYy9Db21wb3Nlci9QYWNrYWdlL0xpbmtDb25zdHJhaW50L0xpbmtDb25zdHJhaW50SW50ZXJmYWNlLnBocBUBAACHSFxTFQEAAOX+h6K2AQAAAAAAABYAAABzcmMvQ29tcG9zZXIvQ2FjaGUucGhwAw4AAIdIXFMDDgAAPkDkj7YBAAAAAAAAMwAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvUG9saWN5SW50ZXJmYWNlLnBocJEBAACHSFxTkQEAAEIYn7a2AQAAAAAAACsAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL1J1bGVTZXQucGhwmwkAAIdIXFObCQAASnkMwLYBAAAAAAAANgAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvU29sdmVyQnVnRXhjZXB0aW9uLnBocJgBAACHSFxTmAEAAH8icU62AQAAAAAAADEAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL0RlZmF1bHRQb2xpY3kucGhwrhgAAIdIXFOuGAAAJ6FW+LYBAAAAAAAALQAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvRGVjaXNpb25zLnBocFEPAACHSFxTUQ8AAD+YrCS2AQAAAAAAADEAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL1J1bGVXYXRjaE5vZGUucGhw6gMAAIdIXFPqAwAAEFr+DrYBAAAAAAAAOwAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvU29sdmVyUHJvYmxlbXNFeGNlcHRpb24ucGhwJQQAAIdIXFMlBAAAVBrtULYBAAAAAAAALwAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvVHJhbnNhY3Rpb24ucGhwQhQAAIdIXFNCFAAASLnqR7YBAAAAAAAAQAAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvT3BlcmF0aW9uL1VuaW5zdGFsbE9wZXJhdGlvbi5waHBJAgAAh0hcU0kCAABG+8LJtgEAAAAAAAA9AAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9PcGVyYXRpb24vVXBkYXRlT3BlcmF0aW9uLnBocGgDAACHSFxTaAMAAPZT1V22AQAAAAAAAEkAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL09wZXJhdGlvbi9NYXJrQWxpYXNJbnN0YWxsZWRPcGVyYXRpb24ucGhw0AIAAIdIXFPQAgAAeFVaYbYBAAAAAAAAPgAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvT3BlcmF0aW9uL0luc3RhbGxPcGVyYXRpb24ucGhwQwIAAIdIXFNDAgAAtFz1KrYBAAAAAAAAPQAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvT3BlcmF0aW9uL1NvbHZlck9wZXJhdGlvbi5waHDrAQAAh0hcU+sBAADEp92UtgEAAAAAAABLAAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9PcGVyYXRpb24vTWFya0FsaWFzVW5pbnN0YWxsZWRPcGVyYXRpb24ucGhw1gIAAIdIXFPWAgAAX2nHq7YBAAAAAAAAQAAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvT3BlcmF0aW9uL09wZXJhdGlvbkludGVyZmFjZS5waHDTAAAAh0hcU9MAAADZ4ibktgEAAAAAAAAoAAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9Qb29sLnBocCQtAACHSFxTJC0AAESYHhS2AQAAAAAAACgAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL1J1bGUucGhwxxQAAIdIXFPHFAAA+icQR7YBAAAAAAAANAAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvUnVsZVNldEdlbmVyYXRvci5waHBkHAAAh0hcU2QcAACOMQejtgEAAAAAAAAvAAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9EZWJ1Z1NvbHZlci5waHCJBgAAh0hcU4kGAACj0q2FtgEAAAAAAAAzAAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9SdWxlU2V0SXRlcmF0b3IucGhwFAYAAIdIXFMUBgAAffXH+bYBAAAAAAAAMgAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvUnVsZVdhdGNoQ2hhaW4ucGhwaQEAAIdIXFNpAQAAaO+aLLYBAAAAAAAAKgAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvU29sdmVyLnBocOw1AACHSFxT7DUAAJ5ugca2AQAAAAAAACsAAABzcmMvQ29tcG9zZXIvRGVwZW5kZW5jeVJlc29sdmVyL1JlcXVlc3QucGhwFwQAAIdIXFMXBAAAhD0bsrYBAAAAAAAAKwAAAHNyYy9Db21wb3Nlci9EZXBlbmRlbmN5UmVzb2x2ZXIvUHJvYmxlbS5waHAPEgAAh0hcUw8SAADvyGPxtgEAAAAAAAAyAAAAc3JjL0NvbXBvc2VyL0RlcGVuZGVuY3lSZXNvbHZlci9SdWxlV2F0Y2hHcmFwaC5waHDhBgAAh0hcU+EGAACJcvR2tgEAAAAAAAAtAAAAc3JjL0NvbXBvc2VyL0NvbmZpZy9Db25maWdTb3VyY2VJbnRlcmZhY2UucGhwjQEAAIdIXFONAQAAIZQCcLYBAAAAAAAAKAAAAHNyYy9Db21wb3Nlci9Db25maWcvSnNvbkNvbmZpZ1NvdXJjZS5waHCaCAAAh0hcU5oIAAC6ATHHtgEAAAAAAAAkAAAAc3JjL0NvbXBvc2VyL1BsdWdpbi9QbHVnaW5FdmVudHMucGhwpAAAAIdIXFOkAAAAMO/eWLYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9QbHVnaW4vQ29tbWFuZEV2ZW50LnBocKICAACHSFxTogIAAFnYXdO2AQAAAAAAACwAAABzcmMvQ29tcG9zZXIvUGx1Z2luL1ByZUZpbGVEb3dubG9hZEV2ZW50LnBocGACAACHSFxTYAIAAAA5Lc62AQAAAAAAACcAAABzcmMvQ29tcG9zZXIvUGx1Z2luL1BsdWdpbkludGVyZmFjZS5waHD0AAAAh0hcU/QAAAAMMYkltgEAAAAAAAAlAAAAc3JjL0NvbXBvc2VyL1BsdWdpbi9QbHVnaW5NYW5hZ2VyLnBocI4VAACHSFxTjhUAAErEKSm2AQAAAAAAABgAAABzcmMvQ29tcG9zZXIvRmFjdG9yeS5waHBAKgAAh0hcU0AqAAA20Rv/tgEAAAAAAAAgAAAAc3JjL0NvbXBvc2VyL1V0aWwvRmlsZXN5c3RlbS5waHDpGgAAh0hcU+kaAAAwN5yytgEAAAAAAAAcAAAAc3JjL0NvbXBvc2VyL1V0aWwvR2l0SHViLnBocLwQAACHSFxTvBAAAARdjMK2AQAAAAAAAB4AAABzcmMvQ29tcG9zZXIvVXRpbC9QZXJmb3JjZS5waHD8MgAAh0hcU/wyAABOqTh9tgEAAAAAAAAlAAAAc3JjL0NvbXBvc2VyL1V0aWwvUHJvY2Vzc0V4ZWN1dG9yLnBocFcGAACHSFxTVwYAANQVILi2AQAAAAAAABkAAABzcmMvQ29tcG9zZXIvVXRpbC9HaXQucGhwQwIAAIdIXFNDAgAAFo7jL7YBAAAAAAAAJgAAAHNyYy9Db21wb3Nlci9VdGlsL1JlbW90ZUZpbGVzeXN0ZW0ucGhwIiMAAIdIXFMiIwAAXru+qbYBAAAAAAAAKgAAAHNyYy9Db21wb3Nlci9VdGlsL1N0cmVhbUNvbnRleHRGYWN0b3J5LnBocGsLAACHSFxTawsAACpV9Dq2AQAAAAAAACUAAABzcmMvQ29tcG9zZXIvVXRpbC9Db25maWdWYWxpZGF0b3IucGhwVQ0AAIdIXFNVDQAA7qqZ6rYBAAAAAAAAIgAAAHNyYy9Db21wb3Nlci9VdGlsL0Vycm9ySGFuZGxlci5waHAUAgAAh0hcUxQCAAC0QIXmtgEAAAAAAAArAAAAc3JjL0NvbXBvc2VyL1V0aWwvU3BkeExpY2Vuc2VJZGVudGlmaWVyLnBocDYKAACHSFxTNgoAAMQ2u2+2AQAAAAAAACQAAABzcmMvQ29tcG9zZXIvVXRpbC9Ob1Byb3h5UGF0dGVybi5waHC9BgAAh0hcU70GAAB4DkZ+tgEAAAAAAAAZAAAAc3JjL0NvbXBvc2VyL1V0aWwvU3ZuLnBocOUNAACHSFxT5Q0AAJ1mhXS2AQAAAAAAABkAAABzcmMvQ29tcG9zZXIvQ29tcG9zZXIucGhwAQkAAIdIXFMBCQAAlP68QrYBAAAAAAAAJQAAAHNyYy9Db21wb3Nlci9Kc29uL0pzb25NYW5pcHVsYXRvci5waHAlIwAAh0hcUyUjAACS/sXotgEAAAAAAAAeAAAAc3JjL0NvbXBvc2VyL0pzb24vSnNvbkZpbGUucGhwGxAAAIdIXFMbEAAAK3XcwLYBAAAAAAAAIwAAAHNyYy9Db21wb3Nlci9Kc29uL0pzb25Gb3JtYXR0ZXIucGhwFwYAAIdIXFMXBgAAA8cT07YBAAAAAAAALQAAAHNyYy9Db21wb3Nlci9Kc29uL0pzb25WYWxpZGF0aW9uRXhjZXB0aW9uLnBocDIBAACHSFxTMgEAADlihDG2AQAAAAAAABcAAABzcmMvQ29tcG9zZXIvQ29uZmlnLnBocEoTAACHSFxTShMAAJFTwKm2AQAAAAAAADkAAABzcmMvQ29tcG9zZXIvRXZlbnREaXNwYXRjaGVyL0V2ZW50U3Vic2NyaWJlckludGVyZmFjZS5waHCpAAAAh0hcU6kAAABotwEwtgEAAAAAAAAmAAAAc3JjL0NvbXBvc2VyL0V2ZW50RGlzcGF0Y2hlci9FdmVudC5waHChAQAAh0hcU6EBAADOlLZMtgEAAAAAAAAwAAAAc3JjL0NvbXBvc2VyL0V2ZW50RGlzcGF0Y2hlci9FdmVudERpc3BhdGNoZXIucGhwZRIAAIdIXFNlEgAAJhGc87YBAAAAAAAAHQAAAHNyYy9Db21wb3Nlci9TY3JpcHQvRXZlbnQucGhwWgIAAIdIXFNaAgAAx+/oGbYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9TY3JpcHQvU2NyaXB0RXZlbnRzLnBocEkEAACHSFxTSQQAAP71zEW2AQAAAAAAACQAAABzcmMvQ29tcG9zZXIvU2NyaXB0L0NvbW1hbmRFdmVudC5waHBXAAAAh0hcU1cAAACjVlp0tgEAAAAAAAAkAAAAc3JjL0NvbXBvc2VyL1NjcmlwdC9QYWNrYWdlRXZlbnQucGhw9wEAAIdIXFP3AQAAYRaxCbYBAAAAAAAAKAAAAHNyYy9Db21wb3Nlci9JbnN0YWxsZXIvTm9vcEluc3RhbGxlci5waHArBQAAh0hcUysFAADAt019tgEAAAAAAAAvAAAAc3JjL0NvbXBvc2VyL0luc3RhbGxlci9NZXRhcGFja2FnZUluc3RhbGxlci5waHCcBAAAh0hcU5wEAADGEsUhtgEAAAAAAAAoAAAAc3JjL0NvbXBvc2VyL0luc3RhbGxlci9QZWFySW5zdGFsbGVyLnBocAkRAACHSFxTCREAAKgITWm2AQAAAAAAACsAAABzcmMvQ29tcG9zZXIvSW5zdGFsbGVyL1Byb2plY3RJbnN0YWxsZXIucGhwHQYAAIdIXFMdBgAAKjBAULYBAAAAAAAAKwAAAHNyYy9Db21wb3Nlci9JbnN0YWxsZXIvTGlicmFyeUluc3RhbGxlci5waHALHAAAh0hcUwscAAAB2hZktgEAAAAAAAAuAAAAc3JjL0NvbXBvc2VyL0luc3RhbGxlci9JbnN0YWxsYXRpb25NYW5hZ2VyLnBocGUUAACHSFxTZRQAALebEIe2AQAAAAAAACoAAABzcmMvQ29tcG9zZXIvSW5zdGFsbGVyL1BsdWdpbkluc3RhbGxlci5waHA/BgAAh0hcUz8GAABf/ti7tgEAAAAAAAAtAAAAc3JjL0NvbXBvc2VyL0luc3RhbGxlci9JbnN0YWxsZXJJbnRlcmZhY2UucGhwxQIAAIdIXFPFAgAASFOTobYBAAAAAAAAJAAAAHNyYy9Db21wb3Nlci9Db25zb2xlL0FwcGxpY2F0aW9uLnBocLUYAACHSFxTtRgAAPDyQP22AQAAAAAAACwAAABzcmMvQ29tcG9zZXIvQ29uc29sZS9IdG1sT3V0cHV0Rm9ybWF0dGVyLnBocNAFAACHSFxT0AUAAN1G1+q2AQAAAAAAACsAAABzcmMvQ29tcG9zZXIvQXV0b2xvYWQvQXV0b2xvYWRHZW5lcmF0b3IucGhwPkMAAIdIXFM+QwAAq0mtpbYBAAAAAAAAKwAAAHNyYy9Db21wb3Nlci9BdXRvbG9hZC9DbGFzc01hcEdlbmVyYXRvci5waHAxDQAAh0hcUzENAABsCxo6tgEAAAAAAAAaAAAAc3JjL0NvbXBvc2VyL0luc3RhbGxlci5waHANZgAAh0hcUw1mAACgKFXGtgEAAAAAAAAlAAAAc3JjL0NvbXBvc2VyL0F1dG9sb2FkL0NsYXNzTG9hZGVyLnBocDMtAACHSFxTMy0AABZn73e2AQAAAAAAABgAAAByZXMvc3BkeC1pZGVudGlmaWVyLmpzb25pCwAAh0hcU2kLAADml1IatgEAAAAAAAAYAAAAcmVzL2NvbXBvc2VyLXNjaGVtYS5qc29u+0sAAIdIXFP7SwAALzMWgLYBAAAAAAAAHwAAAHNyYy9Db21wb3Nlci9JTy9oaWRkZW5pbnB1dC5leGUAJAAAh0hcUwAkAACVjaV2tgEAAAAAAAA/AAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL1BocFByb2Nlc3MucGhwDwMAAIdIXFMPAwAAOFrUt7YBAAAAAAAARQAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvU3ltZm9ueS9Db21wb25lbnQvUHJvY2Vzcy9FeGVjdXRhYmxlRmluZGVyLnBocLMEAACHSFxTswQAAAlK7p+2AQAAAAAAADwAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1N5bWZvbnkvQ29tcG9uZW50L1Byb2Nlc3MvUHJvY2Vzcy5waHDQPQAAh0hcU9A9AACCkwmitgEAAAAAAABBAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL1Byb2Nlc3NQaXBlcy5waHC6EAAAh0hcU7oQAAAJJMW6tgEAAAAAAABDAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL1Byb2Nlc3NCdWlsZGVyLnBocEsJAACHSFxTSwkAAOBR5HK2AQAAAAAAAEEAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1N5bWZvbnkvQ29tcG9uZW50L1Byb2Nlc3MvUHJvY2Vzc1V0aWxzLnBocIcCAACHSFxThwIAADvwas62AQAAAAAAAFcAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1N5bWZvbnkvQ29tcG9uZW50L1Byb2Nlc3MvRXhjZXB0aW9uL1Byb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbi5waHAfBAAAh0hcUx8EAAAuCcPhtgEAAAAAAABRAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL0V4Y2VwdGlvbi9FeGNlcHRpb25JbnRlcmZhY2UucGhwZgAAAIdIXFNmAAAAXfY+VLYBAAAAAAAATwAAAHZlbmRvci9zeW1mb255L3Byb2Nlc3MvU3ltZm9ueS9Db21wb25lbnQvUHJvY2Vzcy9FeGNlcHRpb24vUnVudGltZUV4Y2VwdGlvbi5waHCYAAAAh0hcU5gAAACiG9g6tgEAAAAAAABNAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL0V4Y2VwdGlvbi9Mb2dpY0V4Y2VwdGlvbi5waHCUAAAAh0hcU5QAAAAgs+PxtgEAAAAAAABVAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL0V4Y2VwdGlvbi9Qcm9jZXNzRmFpbGVkRXhjZXB0aW9uLnBocO0CAACHSFxT7QIAAHzu56q2AQAAAAAAAFcAAAB2ZW5kb3Ivc3ltZm9ueS9wcm9jZXNzL1N5bWZvbnkvQ29tcG9uZW50L1Byb2Nlc3MvRXhjZXB0aW9uL0ludmFsaWRBcmd1bWVudEV4Y2VwdGlvbi5waHCoAAAAh0hcU6gAAADQwCtftgEAAAAAAABIAAAAdmVuZG9yL3N5bWZvbnkvcHJvY2Vzcy9TeW1mb255L0NvbXBvbmVudC9Qcm9jZXNzL1BocEV4ZWN1dGFibGVGaW5kZXIucGhwKAMAAIdIXFMoAwAACR0Mj7YBAAAAAAAANQAAAHZlbmRvci9zeW1mb255L3lhbWwvU3ltZm9ueS9Db21wb25lbnQvWWFtbC9QYXJzZXIucGhwWTMAAIdIXFNZMwAAsocfDrYBAAAAAAAAOAAAAHZlbmRvci9zeW1mb255L3lhbWwvU3ltZm9ueS9Db21wb25lbnQvWWFtbC9VbmVzY2FwZXIucGhwCQgAAIdIXFMJCAAAB9VxiLYBAAAAAAAAMwAAAHZlbmRvci9zeW1mb255L3lhbWwvU3ltZm9ueS9Db21wb25lbnQvWWFtbC9ZYW1sLnBocMsDAACHSFxTywMAABXk8wy2AQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS95YW1sL1N5bWZvbnkvQ29tcG9uZW50L1lhbWwvRHVtcGVyLnBocAkEAACHSFxTCQQAABeN/8e2AQAAAAAAAEcAAAB2ZW5kb3Ivc3ltZm9ueS95YW1sL1N5bWZvbnkvQ29tcG9uZW50L1lhbWwvRXhjZXB0aW9uL1BhcnNlRXhjZXB0aW9uLnBocMAGAACHSFxTwAYAAMzhjne2AQAAAAAAAEsAAAB2ZW5kb3Ivc3ltZm9ueS95YW1sL1N5bWZvbnkvQ29tcG9uZW50L1lhbWwvRXhjZXB0aW9uL0V4Y2VwdGlvbkludGVyZmFjZS5waHBlAAAAh0hcU2UAAADOY7oHtgEAAAAAAABJAAAAdmVuZG9yL3N5bWZvbnkveWFtbC9TeW1mb255L0NvbXBvbmVudC9ZYW1sL0V4Y2VwdGlvbi9SdW50aW1lRXhjZXB0aW9uLnBocJcAAACHSFxTlwAAAIcH9YG2AQAAAAAAAEYAAAB2ZW5kb3Ivc3ltZm9ueS95YW1sL1N5bWZvbnkvQ29tcG9uZW50L1lhbWwvRXhjZXB0aW9uL0R1bXBFeGNlcHRpb24ucGhwdQAAAIdIXFN1AAAAZQEqbrYBAAAAAAAANgAAAHZlbmRvci9zeW1mb255L3lhbWwvU3ltZm9ueS9Db21wb25lbnQvWWFtbC9Fc2NhcGVyLnBocL0FAACHSFxTvQUAALu1Mhi2AQAAAAAAADUAAAB2ZW5kb3Ivc3ltZm9ueS95YW1sL1N5bWZvbnkvQ29tcG9uZW50L1lhbWwvSW5saW5lLnBocL4hAACHSFxTviEAAM+WwcW2AQAAAAAAAEgAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvQ29tbWFuZC9IZWxwQ29tbWFuZC5waHAxBwAAh0hcUzEHAAD9HYCUtgEAAAAAAABEAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0NvbW1hbmQvQ29tbWFuZC5waHAHGQAAh0hcUwcZAABP3R2CtgEAAAAAAABIAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0NvbW1hbmQvTGlzdENvbW1hbmQucGhwswcAAIdIXFOzBwAAVgPT6bYBAAAAAAAATQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9UZXN0ZXIvQXBwbGljYXRpb25UZXN0ZXIucGhw1AUAAIdIXFPUBQAArOykZLYBAAAAAAAASQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9UZXN0ZXIvQ29tbWFuZFRlc3Rlci5waHCQBgAAh0hcU5AGAABIu+JgtgEAAAAAAABYAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJTdHlsZVN0YWNrLnBocAgFAACHSFxTCAUAAHkISSe2AQAAAAAAAFMAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlLnBocFUMAACHSFxTVQwAAHqo3O22AQAAAAAAAFwAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlLnBocI4BAACHSFxTjgEAAPbrxD22AQAAAAAAAE4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRm9ybWF0dGVyL091dHB1dEZvcm1hdHRlci5waHAADAAAh0hcUwAMAAB91+0ptgEAAAAAAABXAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0Zvcm1hdHRlci9PdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UucGhwmAEAAIdIXFOYAQAAM2x+tLYBAAAAAAAAQAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9BcHBsaWNhdGlvbi5waHAATgAAh0hcUwBOAAAE+/c9tgEAAAAAAABIAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0lucHV0L0lucHV0QXJndW1lbnQucGhwngUAAIdIXFOeBQAAS13sabYBAAAAAAAAQAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9JbnB1dC9JbnB1dC5waHAVCgAAh0hcUxUKAADbqeqqtgEAAAAAAABGAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0lucHV0L1N0cmluZ0lucHV0LnBocI8FAACHSFxTjwUAAMRddGi2AQAAAAAAAEYAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvSW5wdXQvSW5wdXRPcHRpb24ucGhwqgsAAIdIXFOqCwAA4vX+MbYBAAAAAAAARAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9JbnB1dC9Bcmd2SW5wdXQucGhwxRMAAIdIXFPFEwAAkCcX5LYBAAAAAAAASQAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9JbnB1dC9JbnB1dEludGVyZmFjZS5waHAgAwAAh0hcUyADAAA5lPjHtgEAAAAAAABFAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0lucHV0L0FycmF5SW5wdXQucGhw9wkAAIdIXFP3CQAA4CIYObYBAAAAAAAATgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9JbnB1dC9JbnB1dEF3YXJlSW50ZXJmYWNlLnBocJoAAACHSFxTmgAAAIdqVJ+2AQAAAAAAAEoAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvSW5wdXQvSW5wdXREZWZpbml0aW9uLnBocIUXAACHSFxThRcAACR+qEW2AQAAAAAAADoAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvU2hlbGwucGhwMQ8AAIdIXFMxDwAArt4k+7YBAAAAAAAAQgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9PdXRwdXQvT3V0cHV0LnBocKcIAACHSFxTpwgAABzaIF+2AQAAAAAAAEYAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvT3V0cHV0L051bGxPdXRwdXQucGhwBAMAAIdIXFMEAwAAsyiK97YBAAAAAAAAUgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9PdXRwdXQvQ29uc29sZU91dHB1dEludGVyZmFjZS5waHDlAAAAh0hcU+UAAAByTvQAtgEAAAAAAABIAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL091dHB1dC9TdHJlYW1PdXRwdXQucGhwqgQAAIdIXFOqBAAAsn/4G7YBAAAAAAAASgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9PdXRwdXQvQnVmZmVyZWRPdXRwdXQucGhwXwEAAIdIXFNfAQAA+0LNt7YBAAAAAAAASwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9PdXRwdXQvT3V0cHV0SW50ZXJmYWNlLnBocEkDAACHSFxTSQMAAMji40K2AQAAAAAAAEkAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvT3V0cHV0L0NvbnNvbGVPdXRwdXQucGhwCQUAAIdIXFMJBQAAcYI5nrYBAAAAAAAAUwAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9EZXNjcmlwdG9yL0Rlc2NyaXB0b3JJbnRlcmZhY2UucGhw/AAAAIdIXFP8AAAAsVEHtbYBAAAAAAAATgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9EZXNjcmlwdG9yL1RleHREZXNjcmlwdG9yLnBocJsXAACHSFxTmxcAAPUjYZG2AQAAAAAAAE0AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRGVzY3JpcHRvci9YbWxEZXNjcmlwdG9yLnBocJ4cAACHSFxTnhwAANKRpmq2AQAAAAAAAFIAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRGVzY3JpcHRvci9NYXJrZG93bkRlc2NyaXB0b3IucGhwFw4AAIdIXFMXDgAAP6jQerYBAAAAAAAAVgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9EZXNjcmlwdG9yL0FwcGxpY2F0aW9uRGVzY3JpcHRpb24ucGhw9wcAAIdIXFP3BwAAKUnf8LYBAAAAAAAASgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9EZXNjcmlwdG9yL0Rlc2NyaXB0b3IucGhwWgcAAIdIXFNaBwAAdjuD9rYBAAAAAAAATgAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9EZXNjcmlwdG9yL0pzb25EZXNjcmlwdG9yLnBocDANAACHSFxTMA0AAAtGxGC2AQAAAAAAAEsAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvSGVscGVyL0hlbHBlckludGVyZmFjZS5waHDvAAAAh0hcU+8AAAA9ZRsMtgEAAAAAAABHAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0hlbHBlci9UYWJsZUhlbHBlci5waHCNGwAAh0hcU40bAAA16E6ptgEAAAAAAABMAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0hlbHBlci9EZXNjcmlwdG9ySGVscGVyLnBocDkFAACHSFxTOQUAAPv55PC2AQAAAAAAAEsAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvSGVscGVyL0Zvcm1hdHRlckhlbHBlci5waHAeBAAAh0hcUx4EAACeSYKBtgEAAAAAAABFAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0hlbHBlci9IZWxwZXJTZXQucGhwLwQAAIdIXFMvBAAA4ncAZLYBAAAAAAAASAAAAHZlbmRvci9zeW1mb255L2NvbnNvbGUvU3ltZm9ueS9Db21wb25lbnQvQ29uc29sZS9IZWxwZXIvRGlhbG9nSGVscGVyLnBocL4bAACHSFxTvhsAALrvmem2AQAAAAAAAEIAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvSGVscGVyL0hlbHBlci5waHAiAgAAh0hcUyICAAAXqORVtgEAAAAAAABKAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0hlbHBlci9Qcm9ncmVzc0hlbHBlci5waHAhGQAAh0hcUyEZAADla65JtgEAAAAAAABMAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0hlbHBlci9JbnB1dEF3YXJlSGVscGVyLnBocGMBAACHSFxTYwEAAPH4kHy2AQAAAAAAAEcAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRXZlbnQvQ29uc29sZUV2ZW50LnBocMUCAACHSFxTxQIAANJ421y2AQAAAAAAAFAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRXZlbnQvQ29uc29sZVRlcm1pbmF0ZUV2ZW50LnBocHoCAACHSFxTegIAALMs7ky2AQAAAAAAAFAAAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRXZlbnQvQ29uc29sZUV4Y2VwdGlvbkV2ZW50LnBocBIDAACHSFxTEgMAAOEWMum2AQAAAAAAAE4AAAB2ZW5kb3Ivc3ltZm9ueS9jb25zb2xlL1N5bWZvbnkvQ29tcG9uZW50L0NvbnNvbGUvRXZlbnQvQ29uc29sZUNvbW1hbmRFdmVudC5waHB0AAAAh0hcU3QAAACYSpTttgEAAAAAAABCAAAAdmVuZG9yL3N5bWZvbnkvY29uc29sZS9TeW1mb255L0NvbXBvbmVudC9Db25zb2xlL0NvbnNvbGVFdmVudHMucGhw6QAAAIdIXFPpAAAAUtvUZbYBAAAAAAAAOQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvRmluZGVyLnBocMogAACHSFxTyiAAAIz+6Yi2AQAAAAAAAEAAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL1NoZWxsL0NvbW1hbmQucGhwqQoAAIdIXFOpCgAAVoKEarYBAAAAAAAAPgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvU2hlbGwvU2hlbGwucGhwogMAAIdIXFOiAwAARIVBCrYBAAAAAAAAQwAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvRXhwcmVzc2lvbi9SZWdleC5waHBaDgAAh0hcU1oOAABAgbJ+tgEAAAAAAABCAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9FeHByZXNzaW9uL0dsb2IucGhwoQcAAIdIXFOhBwAAICBWv7YBAAAAAAAASAAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvRXhwcmVzc2lvbi9FeHByZXNzaW9uLnBocH0FAACHSFxTfQUAAC+3Y/C2AQAAAAAAAEwAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0V4cHJlc3Npb24vVmFsdWVJbnRlcmZhY2UucGhwOwEAAIdIXFM7AQAAC+7j07YBAAAAAAAASwAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvQWRhcHRlci9BZGFwdGVySW50ZXJmYWNlLnBocK8DAACHSFxTrwMAAIsI6ci2AQAAAAAAAEkAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0FkYXB0ZXIvQnNkRmluZEFkYXB0ZXIucGhwewYAAIdIXFN7BgAAUSxEMrYBAAAAAAAASQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvQWRhcHRlci9HbnVGaW5kQWRhcHRlci5waHBeBgAAh0hcU14GAADfephytgEAAAAAAABKAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9BZGFwdGVyL0Fic3RyYWN0QWRhcHRlci5waHCnCgAAh0hcU6cKAAD+DG6GtgEAAAAAAABOAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9BZGFwdGVyL0Fic3RyYWN0RmluZEFkYXB0ZXIucGhwARkAAIdIXFMBGQAAt1nL/LYBAAAAAAAARQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvQWRhcHRlci9QaHBBZGFwdGVyLnBocCsHAACHSFxTKwcAACaY7tK2AQAAAAAAADcAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0dsb2IucGhwDQUAAIdIXFMNBQAAep34CrYBAAAAAAAAVAAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvRGVwdGhSYW5nZUZpbHRlckl0ZXJhdG9yLnBocPABAACHSFxT8AEAAN8wmQS2AQAAAAAAAEwAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0l0ZXJhdG9yL1NvcnRhYmxlSXRlcmF0b3IucGhw3gUAAIdIXFPeBQAAkhqUx7YBAAAAAAAAVQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvRmlsZWNvbnRlbnRGaWx0ZXJJdGVyYXRvci5waHAjAwAAh0hcUyMDAADaX1bHtgEAAAAAAABNAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9JdGVyYXRvci9GaWxlUGF0aHNJdGVyYXRvci5waHCNBQAAh0hcU40FAAD98uRRtgEAAAAAAABTAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9JdGVyYXRvci9TaXplUmFuZ2VGaWx0ZXJJdGVyYXRvci5waHBnAgAAh0hcU2cCAAAh1JfptgEAAAAAAABaAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9JdGVyYXRvci9FeGNsdWRlRGlyZWN0b3J5RmlsdGVySXRlcmF0b3IucGhwlAIAAIdIXFOUAgAAItbzwbYBAAAAAAAASgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvRmlsdGVySXRlcmF0b3IucGhwhgIAAIdIXFOGAgAAMKO+1LYBAAAAAAAAVgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvTXVsdGlwbGVQY3JlRmlsdGVySXRlcmF0b3IucGhw2AIAAIdIXFPYAgAABNL5k7YBAAAAAAAAUAAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvQ3VzdG9tRmlsdGVySXRlcmF0b3IucGhwXQIAAIdIXFNdAgAAdOCxtbYBAAAAAAAAUgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvSXRlcmF0b3IvRmlsZW5hbWVGaWx0ZXJJdGVyYXRvci5waHCIAgAAh0hcU4gCAADqQoNatgEAAAAAAABTAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9JdGVyYXRvci9EYXRlUmFuZ2VGaWx0ZXJJdGVyYXRvci5waHBnAgAAh0hcU2cCAACwyWUAtgEAAAAAAABSAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9JdGVyYXRvci9GaWxlVHlwZUZpbHRlckl0ZXJhdG9yLnBocFwCAACHSFxTXAIAAHCRJ5i2AQAAAAAAAFYAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0l0ZXJhdG9yL1JlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yLnBocNwFAACHSFxT3AUAAKq96fq2AQAAAAAAAE4AAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0l0ZXJhdG9yL1BhdGhGaWx0ZXJJdGVyYXRvci5waHDBAgAAh0hcU8ECAABf3EEVtgEAAAAAAABMAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9Db21wYXJhdG9yL0RhdGVDb21wYXJhdG9yLnBocCYDAACHSFxTJgMAAOloZLG2AQAAAAAAAE4AAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0NvbXBhcmF0b3IvTnVtYmVyQ29tcGFyYXRvci5waHB5AwAAh0hcU3kDAAAiYBTbtgEAAAAAAABIAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9Db21wYXJhdG9yL0NvbXBhcmF0b3IucGhwjAMAAIdIXFOMAwAAFnf+VLYBAAAAAAAAUgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvRXhjZXB0aW9uL0FjY2Vzc0RlbmllZEV4Y2VwdGlvbi5waHCEAAAAh0hcU4QAAAC9vnOctgEAAAAAAABPAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9FeGNlcHRpb24vRXhjZXB0aW9uSW50ZXJmYWNlLnBocIQAAACHSFxThAAAABxHei22AQAAAAAAAFoAAAB2ZW5kb3Ivc3ltZm9ueS9maW5kZXIvU3ltZm9ueS9Db21wb25lbnQvRmluZGVyL0V4Y2VwdGlvbi9PcGVyYXRpb25Ob3RQZXJtaXRlZEV4Y2VwdGlvbi5waHCKAAAAh0hcU4oAAABVEjg4tgEAAAAAAABUAAAAdmVuZG9yL3N5bWZvbnkvZmluZGVyL1N5bWZvbnkvQ29tcG9uZW50L0ZpbmRlci9FeGNlcHRpb24vQWRhcHRlckZhaWx1cmVFeGNlcHRpb24ucGhwFgIAAIdIXFMWAgAAbYxfLLYBAAAAAAAAWQAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvRXhjZXB0aW9uL1NoZWxsQ29tbWFuZEZhaWx1cmVFeGNlcHRpb24ucGhwJAIAAIdIXFMkAgAAQ5Rz07YBAAAAAAAAPgAAAHZlbmRvci9zeW1mb255L2ZpbmRlci9TeW1mb255L0NvbXBvbmVudC9GaW5kZXIvU3BsRmlsZUluZm8ucGhw+wIAAIdIXFP7AgAAkQWGNrYBAAAAAAAANAAAAHZlbmRvci9zZWxkL2pzb25saW50L3NyYy9TZWxkL0pzb25MaW50L1VuZGVmaW5lZC5waHA+AAAAh0hcUz4AAAD/cZ+ftgEAAAAAAAA1AAAAdmVuZG9yL3NlbGQvanNvbmxpbnQvc3JjL1NlbGQvSnNvbkxpbnQvSnNvblBhcnNlci5waHCpLQAAh0hcU6ktAACUZmO3tgEAAAAAAAAwAAAAdmVuZG9yL3NlbGQvanNvbmxpbnQvc3JjL1NlbGQvSnNvbkxpbnQvTGV4ZXIucGhwvw8AAIdIXFO/DwAAqwu6WbYBAAAAAAAAOwAAAHZlbmRvci9zZWxkL2pzb25saW50L3NyYy9TZWxkL0pzb25MaW50L1BhcnNpbmdFeGNlcHRpb24ucGhwHgEAAIdIXFMeAQAAibIQ8bYBAAAAAAAAPwAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL1JlZlJlc29sdmVyLnBocBcKAACHSFxTFwoAABU/nVC2AQAAAAAAAEkAAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9Db25zdHJhaW50cy9VbmRlZmluZWQucGhwjRYAAIdIXFONFgAAM8TLsLYBAAAAAAAARAAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL1R5cGUucGhwUAYAAIdIXFNQBgAA1derLrYBAAAAAAAARgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL1NjaGVtYS5waHAWAgAAh0hcUxYCAABdEtzZtgEAAAAAAABGAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvQ29uc3RyYWludHMvTnVtYmVyLnBocKsIAACHSFxTqwgAAJvnSSm2AQAAAAAAAEYAAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9Db25zdHJhaW50cy9PYmplY3QucGhwYwoAAIdIXFNjCgAAvbkSNrYBAAAAAAAAUwAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL0NvbnN0cmFpbnRJbnRlcmZhY2UucGhwTgEAAIdIXFNOAQAA+MZNebYBAAAAAAAASgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL0NvbnN0cmFpbnQucGhwVQ4AAIdIXFNVDgAAz5bwErYBAAAAAAAASgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL0NvbGxlY3Rpb24ucGhw/QgAAIdIXFP9CAAAxww7/7YBAAAAAAAARAAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL0VudW0ucGhw6AEAAIdIXFPoAQAA6hB2xLYBAAAAAAAARgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0NvbnN0cmFpbnRzL0Zvcm1hdC5waHDtDQAAh0hcU+0NAADhlBgNtgEAAAAAAABGAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvQ29uc3RyYWludHMvU3RyaW5nLnBocOwCAACHSFxT7AIAAJSjHgC2AQAAAAAAAFIAAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9FeGNlcHRpb24vVXJpUmVzb2x2ZXJFeGNlcHRpb24ucGhwagAAAIdIXFNqAAAAU9PHs7YBAAAAAAAAVwAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0V4Y2VwdGlvbi9SZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uLnBocG8AAACHSFxTbwAAAMYkIsW2AQAAAAAAAF0AAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9FeGNlcHRpb24vSW52YWxpZFNjaGVtYU1lZGlhVHlwZUV4Y2VwdGlvbi5waHB2AAAAh0hcU3YAAAACikPTtgEAAAAAAABXAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvRXhjZXB0aW9uL0ludmFsaWRTb3VyY2VVcmlFeGNlcHRpb24ucGhwdwAAAIdIXFN3AAAATi3yW7YBAAAAAAAAUwAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0V4Y2VwdGlvbi9Kc29uRGVjb2RpbmdFeGNlcHRpb24ucGhw3gIAAIdIXFPeAgAAhr6pkbYBAAAAAAAAVgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL0V4Y2VwdGlvbi9JbnZhbGlkQXJndW1lbnRFeGNlcHRpb24ucGhwdgAAAIdIXFN2AAAArCCrIrYBAAAAAAAAQwAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL1VyaS9VcmlSZXNvbHZlci5waHDOCQAAh0hcU84JAAD6edpHtgEAAAAAAABEAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvVXJpL1VyaVJldHJpZXZlci5waHCgEwAAh0hcU6ATAADGQCN0tgEAAAAAAABUAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvVXJpL1JldHJpZXZlcnMvQWJzdHJhY3RSZXRyaWV2ZXIucGhw3AAAAIdIXFPcAAAAG11qHLYBAAAAAAAAUgAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL1VyaS9SZXRyaWV2ZXJzL0ZpbGVHZXRDb250ZW50cy5waHDRBAAAh0hcU9EEAADmh6gStgEAAAAAAABYAAAAdmVuZG9yL2p1c3RpbnJhaW5ib3cvanNvbi1zY2hlbWEvc3JjL0pzb25TY2hlbWEvVXJpL1JldHJpZXZlcnMvVXJpUmV0cmlldmVySW50ZXJmYWNlLnBocKkAAACHSFxTqQAAAAYDQ0+2AQAAAAAAAEcAAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9VcmkvUmV0cmlldmVycy9DdXJsLnBocHQEAACHSFxTdAQAAEm3/QC2AQAAAAAAAFIAAAB2ZW5kb3IvanVzdGlucmFpbmJvdy9qc29uLXNjaGVtYS9zcmMvSnNvblNjaGVtYS9VcmkvUmV0cmlldmVycy9QcmVkZWZpbmVkQXJyYXkucGhwXgIAAIdIXFNeAgAAIt82b7YBAAAAAAAAPQAAAHZlbmRvci9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYy9Kc29uU2NoZW1hL1ZhbGlkYXRvci5waHBXAgAAh0hcU1cCAAD4TuIptgEAAAAAAAATAAAAdmVuZG9yL2F1dG9sb2FkLnBocJEAAACHSFxTkQAAANpCqvK2AQAAAAAAACcAAAB2ZW5kb3IvY29tcG9zZXIvYXV0b2xvYWRfbmFtZXNwYWNlcy5waHA0AgAAh0hcUzQCAAD1hcIXtgEAAAAAAAAhAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX3BzcjQucGhwZAAAAIdIXFNkAAAAWqGmSLYBAAAAAAAAJQAAAHZlbmRvci9jb21wb3Nlci9hdXRvbG9hZF9jbGFzc21hcC5waHBGhwAAh0hcU0aHAAAjtNIetgEAAAAAAAAhAAAAdmVuZG9yL2NvbXBvc2VyL2F1dG9sb2FkX3JlYWwucGhw6gQAAIdIXFPqBAAAvUC6vbYBAAAAAAAAIQAAAHZlbmRvci9jb21wb3Nlci9pbmNsdWRlX3BhdGhzLnBocJ8BAACHSFxTnwEAAKfF4aK2AQAAAAAAAB8AAAB2ZW5kb3IvY29tcG9zZXIvQ2xhc3NMb2FkZXIucGhwlxMAAIdIXFOXEwAAQqeGMLYBAAAAAAAADAAAAGJpbi9jb21wb3Nlcm4EAACHSFxTbgQAAB+WhVe2AQAAAAAAAAcAAABMSUNFTlNFMwQAAIdIXFMzBAAAC4EyC7YBAAAAAAAAPD9waHAKCgoKCgoKCgoKCgpmdW5jdGlvbiBpbmNsdWRlSWZFeGlzdHMoJGZpbGUpCnsKcmV0dXJuIGZpbGVfZXhpc3RzKCRmaWxlKSA/IGluY2x1ZGUgJGZpbGUgOiBmYWxzZTsKfQoKaWYgKCghJGxvYWRlciA9IGluY2x1ZGVJZkV4aXN0cyhfX0RJUl9fLicvLi4vdmVuZG9yL2F1dG9sb2FkLnBocCcpKSAmJiAoISRsb2FkZXIgPSBpbmNsdWRlSWZFeGlzdHMoX19ESVJfXy4nLy4uLy4uLy4uL2F1dG9sb2FkLnBocCcpKSkgewplY2hvICdZb3UgbXVzdCBzZXQgdXAgdGhlIHByb2plY3QgZGVwZW5kZW5jaWVzLCBydW4gdGhlIGZvbGxvd2luZyBjb21tYW5kczonLlBIUF9FT0wuCidjdXJsIC1zUyBodHRwczovL2dldGNvbXBvc2VyLm9yZy9pbnN0YWxsZXIgfCBwaHAnLlBIUF9FT0wuCidwaHAgY29tcG9zZXIucGhhciBpbnN0YWxsJy5QSFBfRU9MOwpleGl0KDEpOwp9CgpyZXR1cm4gJGxvYWRlcjsKPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSU87Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyXEhlbHBlclNldDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhlY3V0YWJsZUZpbmRlcjsKCgoKCgoKCmNsYXNzIENvbnNvbGVJTyBleHRlbmRzIEJhc2VJTwp7CnByb3RlY3RlZCAkaW5wdXQ7CnByb3RlY3RlZCAkb3V0cHV0Owpwcm90ZWN0ZWQgJGhlbHBlclNldDsKcHJvdGVjdGVkICRsYXN0TWVzc2FnZTsKcHJpdmF0ZSAkc3RhcnRUaW1lOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCBIZWxwZXJTZXQgJGhlbHBlclNldCkKewokdGhpcy0+aW5wdXQgPSAkaW5wdXQ7CiR0aGlzLT5vdXRwdXQgPSAkb3V0cHV0OwokdGhpcy0+aGVscGVyU2V0ID0gJGhlbHBlclNldDsKfQoKcHVibGljIGZ1bmN0aW9uIGVuYWJsZURlYnVnZ2luZygkc3RhcnRUaW1lKQp7CiR0aGlzLT5zdGFydFRpbWUgPSAkc3RhcnRUaW1lOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSgpCnsKcmV0dXJuICR0aGlzLT5pbnB1dC0+aXNJbnRlcmFjdGl2ZSgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZWNvcmF0ZWQoKQp7CnJldHVybiAkdGhpcy0+b3V0cHV0LT5pc0RlY29yYXRlZCgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWZXJib3NlKCkKewpyZXR1cm4gJHRoaXMtPm91dHB1dC0+Z2V0VmVyYm9zaXR5KCkgPj0gT3V0cHV0SW50ZXJmYWNlOjpWRVJCT1NJVFlfVkVSQk9TRTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzVmVyeVZlcmJvc2UoKQp7CnJldHVybiAkdGhpcy0+b3V0cHV0LT5nZXRWZXJib3NpdHkoKSA+PSAzOyAKIH0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RlYnVnKCkKewpyZXR1cm4gJHRoaXMtPm91dHB1dC0+Z2V0VmVyYm9zaXR5KCkgPj0gNDsgCiB9CgoKCgpwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJG1lc3NhZ2VzLCAkbmV3bGluZSA9IHRydWUpCnsKaWYgKG51bGwgIT09ICR0aGlzLT5zdGFydFRpbWUpIHsKJG1lc3NhZ2VzID0gKGFycmF5KSAkbWVzc2FnZXM7CiRtZXNzYWdlc1swXSA9IHNwcmludGYoCidbJS4xZk1CLyUuMmZzXSAlcycsCm1lbW9yeV9nZXRfdXNhZ2UoKSAvIDEwMjQgLyAxMDI0LAptaWNyb3RpbWUodHJ1ZSkgLSAkdGhpcy0+c3RhcnRUaW1lLAokbWVzc2FnZXNbMF0KKTsKfQokdGhpcy0+b3V0cHV0LT53cml0ZSgkbWVzc2FnZXMsICRuZXdsaW5lKTsKJHRoaXMtPmxhc3RNZXNzYWdlID0gam9pbigkbmV3bGluZSA/ICJcbiIgOiAnJywgKGFycmF5KSAkbWVzc2FnZXMpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gb3ZlcndyaXRlKCRtZXNzYWdlcywgJG5ld2xpbmUgPSB0cnVlLCAkc2l6ZSA9IG51bGwpCnsKCiAkbWVzc2FnZXMgPSBqb2luKCRuZXdsaW5lID8gIlxuIiA6ICcnLCAoYXJyYXkpICRtZXNzYWdlcyk7CgoKIGlmICghaXNzZXQoJHNpemUpKSB7CgogJHNpemUgPSBzdHJsZW4oc3RyaXBfdGFncygkdGhpcy0+bGFzdE1lc3NhZ2UpKTsKfQoKICR0aGlzLT53cml0ZShzdHJfcmVwZWF0KCJceDA4IiwgJHNpemUpLCBmYWxzZSk7CgoKICR0aGlzLT53cml0ZSgkbWVzc2FnZXMsIGZhbHNlKTsKCiRmaWxsID0gJHNpemUgLSBzdHJsZW4oc3RyaXBfdGFncygkbWVzc2FnZXMpKTsKaWYgKCRmaWxsID4gMCkgewoKICR0aGlzLT53cml0ZShzdHJfcmVwZWF0KCcgJywgJGZpbGwpLCBmYWxzZSk7CgogJHRoaXMtPndyaXRlKHN0cl9yZXBlYXQoIlx4MDgiLCAkZmlsbCksIGZhbHNlKTsKfQoKaWYgKCRuZXdsaW5lKSB7CiR0aGlzLT53cml0ZSgnJyk7Cn0KJHRoaXMtPmxhc3RNZXNzYWdlID0gJG1lc3NhZ2VzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYXNrKCRxdWVzdGlvbiwgJGRlZmF1bHQgPSBudWxsKQp7CnJldHVybiAkdGhpcy0+aGVscGVyU2V0LT5nZXQoJ2RpYWxvZycpLT5hc2soJHRoaXMtPm91dHB1dCwgJHF1ZXN0aW9uLCAkZGVmYXVsdCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBhc2tDb25maXJtYXRpb24oJHF1ZXN0aW9uLCAkZGVmYXVsdCA9IHRydWUpCnsKcmV0dXJuICR0aGlzLT5oZWxwZXJTZXQtPmdldCgnZGlhbG9nJyktPmFza0NvbmZpcm1hdGlvbigkdGhpcy0+b3V0cHV0LCAkcXVlc3Rpb24sICRkZWZhdWx0KTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZFZhbGlkYXRlKCRxdWVzdGlvbiwgJHZhbGlkYXRvciwgJGF0dGVtcHRzID0gZmFsc2UsICRkZWZhdWx0ID0gbnVsbCkKewpyZXR1cm4gJHRoaXMtPmhlbHBlclNldC0+Z2V0KCdkaWFsb2cnKS0+YXNrQW5kVmFsaWRhdGUoJHRoaXMtPm91dHB1dCwgJHF1ZXN0aW9uLCAkdmFsaWRhdG9yLCAkYXR0ZW1wdHMsICRkZWZhdWx0KTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZEhpZGVBbnN3ZXIoJHF1ZXN0aW9uKQp7CgogaWYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewokZmluZGVyID0gbmV3IEV4ZWN1dGFibGVGaW5kZXIoKTsKCgogaWYgKCRmaW5kZXItPmZpbmQoJ2Jhc2gnKSAmJiAkZmluZGVyLT5maW5kKCdzdHR5JykpIHsKJHRoaXMtPndyaXRlKCRxdWVzdGlvbiwgZmFsc2UpOwokdmFsdWUgPSBydHJpbShzaGVsbF9leGVjKCdiYXNoIC1jICJzdHR5IC1lY2hvOyByZWFkIC1yIG15cGFzc3dvcmQ7IHN0dHkgZWNobzsgZWNobyAkbXlwYXNzd29yZCInKSk7CiR0aGlzLT53cml0ZSgnJyk7CgpyZXR1cm4gJHZhbHVlOwp9CgoKICRleGUgPSBfX0RJUl9fLidcXGhpZGRlbmlucHV0LmV4ZSc7CgoKIGlmICgncGhhcjonID09PSBzdWJzdHIoX19GSUxFX18sIDAsIDUpKSB7CiR0bXBFeGUgPSBzeXNfZ2V0X3RlbXBfZGlyKCkuJy9oaWRkZW5pbnB1dC5leGUnOwoKCiAKICRzb3VyY2UgPSBmb3BlbihfX0RJUl9fLidcXGhpZGRlbmlucHV0LmV4ZScsICdyJyk7CiR0YXJnZXQgPSBmb3BlbigkdG1wRXhlLCAndysnKTsKc3RyZWFtX2NvcHlfdG9fc3RyZWFtKCRzb3VyY2UsICR0YXJnZXQpOwpmY2xvc2UoJHNvdXJjZSk7CmZjbG9zZSgkdGFyZ2V0KTsKdW5zZXQoJHNvdXJjZSwgJHRhcmdldCk7CgokZXhlID0gJHRtcEV4ZTsKfQoKJHRoaXMtPndyaXRlKCRxdWVzdGlvbiwgZmFsc2UpOwokdmFsdWUgPSBydHJpbShzaGVsbF9leGVjKCRleGUpKTsKJHRoaXMtPndyaXRlKCcnKTsKCgogaWYgKGlzc2V0KCR0bXBFeGUpKSB7CnVubGluaygkdG1wRXhlKTsKfQoKcmV0dXJuICR2YWx1ZTsKfQoKaWYgKGZpbGVfZXhpc3RzKCcvdXNyL2Jpbi9lbnYnKSkgewoKICR0ZXN0ID0gIi91c3IvYmluL2VudiAlcyAtYyAnZWNobyBPSycgMj4gL2Rldi9udWxsIjsKZm9yZWFjaCAoYXJyYXkoJ2Jhc2gnLCAnenNoJywgJ2tzaCcsICdjc2gnKSBhcyAkc2gpIHsKaWYgKCdPSycgPT09IHJ0cmltKHNoZWxsX2V4ZWMoc3ByaW50ZigkdGVzdCwgJHNoKSkpKSB7CiRzaGVsbCA9ICRzaDsKYnJlYWs7Cn0KfQppZiAoaXNzZXQoJHNoZWxsKSkgewokdGhpcy0+d3JpdGUoJHF1ZXN0aW9uLCBmYWxzZSk7CiRyZWFkQ21kID0gKCRzaGVsbCA9PT0gJ2NzaCcpID8gJ3NldCBteXBhc3N3b3JkID0gJDwnIDogJ3JlYWQgLXIgbXlwYXNzd29yZCc7CiRjb21tYW5kID0gc3ByaW50ZigiL3Vzci9iaW4vZW52ICVzIC1jICdzdHR5IC1lY2hvOyAlczsgc3R0eSBlY2hvOyBlY2hvIFwkbXlwYXNzd29yZCciLCAkc2hlbGwsICRyZWFkQ21kKTsKJHZhbHVlID0gcnRyaW0oc2hlbGxfZXhlYygkY29tbWFuZCkpOwokdGhpcy0+d3JpdGUoJycpOwoKcmV0dXJuICR2YWx1ZTsKfQp9CgoKIHJldHVybiAkdGhpcy0+YXNrKCRxdWVzdGlvbik7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxJTzsKCgoKCgoKY2xhc3MgTnVsbElPIGV4dGVuZHMgQmFzZUlPCnsKCgoKcHVibGljIGZ1bmN0aW9uIGlzSW50ZXJhY3RpdmUoKQp7CnJldHVybiBmYWxzZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzVmVyYm9zZSgpCnsKcmV0dXJuIGZhbHNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWZXJ5VmVyYm9zZSgpCnsKcmV0dXJuIGZhbHNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZWJ1ZygpCnsKcmV0dXJuIGZhbHNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZWNvcmF0ZWQoKQp7CnJldHVybiBmYWxzZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRtZXNzYWdlcywgJG5ld2xpbmUgPSB0cnVlKQp7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBvdmVyd3JpdGUoJG1lc3NhZ2VzLCAkbmV3bGluZSA9IHRydWUsICRzaXplID0gODApCnsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGFzaygkcXVlc3Rpb24sICRkZWZhdWx0ID0gbnVsbCkKewpyZXR1cm4gJGRlZmF1bHQ7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBhc2tDb25maXJtYXRpb24oJHF1ZXN0aW9uLCAkZGVmYXVsdCA9IHRydWUpCnsKcmV0dXJuICRkZWZhdWx0Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYXNrQW5kVmFsaWRhdGUoJHF1ZXN0aW9uLCAkdmFsaWRhdG9yLCAkYXR0ZW1wdHMgPSBmYWxzZSwgJGRlZmF1bHQgPSBudWxsKQp7CnJldHVybiAkZGVmYXVsdDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZEhpZGVBbnN3ZXIoJHF1ZXN0aW9uKQp7CnJldHVybiBudWxsOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSU87Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwoKCgoKCgppbnRlcmZhY2UgSU9JbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0ludGVyYWN0aXZlKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1ZlcmJvc2UoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzVmVyeVZlcmJvc2UoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzRGVidWcoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzRGVjb3JhdGVkKCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJG1lc3NhZ2VzLCAkbmV3bGluZSA9IHRydWUpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBvdmVyd3JpdGUoJG1lc3NhZ2VzLCAkbmV3bGluZSA9IHRydWUsICRzaXplID0gbnVsbCk7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFzaygkcXVlc3Rpb24sICRkZWZhdWx0ID0gbnVsbCk7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0NvbmZpcm1hdGlvbigkcXVlc3Rpb24sICRkZWZhdWx0ID0gdHJ1ZSk7CgoKCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZFZhbGlkYXRlKCRxdWVzdGlvbiwgJHZhbGlkYXRvciwgJGF0dGVtcHRzID0gZmFsc2UsICRkZWZhdWx0ID0gbnVsbCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZEhpZGVBbnN3ZXIoJHF1ZXN0aW9uKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0aW9ucygpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNBdXRoZW50aWNhdGlvbigkcmVwb3NpdG9yeU5hbWUpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBdXRoZW50aWNhdGlvbigkcmVwb3NpdG9yeU5hbWUpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBdXRoZW50aWNhdGlvbigkcmVwb3NpdG9yeU5hbWUsICR1c2VybmFtZSwgJHBhc3N3b3JkID0gbnVsbCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkQ29uZmlndXJhdGlvbihDb25maWcgJGNvbmZpZyk7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSU87Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwoKYWJzdHJhY3QgY2xhc3MgQmFzZUlPIGltcGxlbWVudHMgSU9JbnRlcmZhY2UKewpwcm90ZWN0ZWQgJGF1dGhlbnRpY2F0aW9ucyA9IGFycmF5KCk7CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aGVudGljYXRpb25zKCkKewpyZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc0F1dGhlbnRpY2F0aW9uKCRyZXBvc2l0b3J5TmFtZSkKewpyZXR1cm4gaXNzZXQoJHRoaXMtPmF1dGhlbnRpY2F0aW9uc1skcmVwb3NpdG9yeU5hbWVdKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEF1dGhlbnRpY2F0aW9uKCRyZXBvc2l0b3J5TmFtZSkKewppZiAoaXNzZXQoJHRoaXMtPmF1dGhlbnRpY2F0aW9uc1skcmVwb3NpdG9yeU5hbWVdKSkgewpyZXR1cm4gJHRoaXMtPmF1dGhlbnRpY2F0aW9uc1skcmVwb3NpdG9yeU5hbWVdOwp9CgpyZXR1cm4gYXJyYXkoJ3VzZXJuYW1lJyA9PiBudWxsLCAncGFzc3dvcmQnID0+IG51bGwpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QXV0aGVudGljYXRpb24oJHJlcG9zaXRvcnlOYW1lLCAkdXNlcm5hbWUsICRwYXNzd29yZCA9IG51bGwpCnsKJHRoaXMtPmF1dGhlbnRpY2F0aW9uc1skcmVwb3NpdG9yeU5hbWVdID0gYXJyYXkoJ3VzZXJuYW1lJyA9PiAkdXNlcm5hbWUsICdwYXNzd29yZCcgPT4gJHBhc3N3b3JkKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGxvYWRDb25maWd1cmF0aW9uKENvbmZpZyAkY29uZmlnKQp7CgogaWYgKCR0b2tlbnMgPSAkY29uZmlnLT5nZXQoJ2dpdGh1Yi1vYXV0aCcpKSB7CmZvcmVhY2ggKCR0b2tlbnMgYXMgJGRvbWFpbiA9PiAkdG9rZW4pIHsKaWYgKCFwcmVnX21hdGNoKCd7XlthLXowLTldKyR9JywgJHRva2VuKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignWW91ciBnaXRodWIgb2F1dGggdG9rZW4gZm9yICcuJGRvbWFpbi4nIGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVyczogIicuJHRva2VuLiciJyk7Cn0KJHRoaXMtPnNldEF1dGhlbnRpY2F0aW9uKCRkb21haW4sICR0b2tlbiwgJ3gtb2F1dGgtYmFzaWMnKTsKfQp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxJTzsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxTdHJlYW1PdXRwdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XFN0cmluZ0lucHV0Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXJcSGVscGVyU2V0OwoKCgoKY2xhc3MgQnVmZmVySU8gZXh0ZW5kcyBDb25zb2xlSU8KewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkaW5wdXQgPSAnJywgJHZlcmJvc2l0eSA9IG51bGwsIE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyID0gbnVsbCkKewokaW5wdXQgPSBuZXcgU3RyaW5nSW5wdXQoJGlucHV0KTsKJGlucHV0LT5zZXRJbnRlcmFjdGl2ZShmYWxzZSk7Cgokb3V0cHV0ID0gbmV3IFN0cmVhbU91dHB1dChmb3BlbigncGhwOi8vbWVtb3J5JywgJ3J3JyksICR2ZXJib3NpdHkgPT09IG51bGwgPyBTdHJlYW1PdXRwdXQ6OlZFUkJPU0lUWV9OT1JNQUwgOiAkdmVyYm9zaXR5LCAhZW1wdHkoJGZvcm1hdHRlciksICRmb3JtYXR0ZXIpOwoKcGFyZW50OjpfX2NvbnN0cnVjdCgkaW5wdXQsICRvdXRwdXQsIG5ldyBIZWxwZXJTZXQoYXJyYXkoKSkpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCkKewpmc2VlaygkdGhpcy0+b3V0cHV0LT5nZXRTdHJlYW0oKSwgMCk7Cgokb3V0cHV0ID0gc3RyZWFtX2dldF9jb250ZW50cygkdGhpcy0+b3V0cHV0LT5nZXRTdHJlYW0oKSk7Cgokb3V0cHV0ID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCJ7KD88PV58XG58XHgwOCkoLis/KShceDA4Kyl9IiwgZnVuY3Rpb24gKCRtYXRjaGVzKSB7CiRwcmUgPSBzdHJpcF90YWdzKCRtYXRjaGVzWzFdKTsKCmlmIChzdHJsZW4oJHByZSkgPT09IHN0cmxlbigkbWF0Y2hlc1syXSkpIHsKcmV0dXJuICcnOwp9CgoKIHJldHVybiBydHJpbSgkbWF0Y2hlc1sxXSkuIlxuIjsKfSwgJG91dHB1dCk7CgpyZXR1cm4gJG91dHB1dDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgQ29tcG9zZXJcU2NyaXB0XFNjcmlwdEV2ZW50czsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKY2xhc3MgUnVuU2NyaXB0Q29tbWFuZCBleHRlbmRzIENvbW1hbmQKewoKCgpwcm90ZWN0ZWQgJGNvbW1hbmRFdmVudHMgPSBhcnJheSgKU2NyaXB0RXZlbnRzOjpQUkVfSU5TVEFMTF9DTUQsClNjcmlwdEV2ZW50czo6UE9TVF9JTlNUQUxMX0NNRCwKU2NyaXB0RXZlbnRzOjpQUkVfVVBEQVRFX0NNRCwKU2NyaXB0RXZlbnRzOjpQT1NUX1VQREFURV9DTUQsClNjcmlwdEV2ZW50czo6UFJFX1NUQVRVU19DTUQsClNjcmlwdEV2ZW50czo6UE9TVF9TVEFUVVNfQ01ELApTY3JpcHRFdmVudHM6OlBPU1RfUk9PVF9QQUNLQUdFX0lOU1RBTEwsClNjcmlwdEV2ZW50czo6UE9TVF9DUkVBVEVfUFJPSkVDVF9DTUQKKTsKCgoKCnByb3RlY3RlZCAkc2NyaXB0RXZlbnRzID0gYXJyYXkoClNjcmlwdEV2ZW50czo6UFJFX0FSQ0hJVkVfQ01ELApTY3JpcHRFdmVudHM6OlBPU1RfQVJDSElWRV9DTUQsClNjcmlwdEV2ZW50czo6UFJFX0FVVE9MT0FEX0RVTVAsClNjcmlwdEV2ZW50czo6UE9TVF9BVVRPTE9BRF9EVU1QCik7Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcwotPnNldE5hbWUoJ3J1bi1zY3JpcHQnKQotPnNldERlc2NyaXB0aW9uKCdSdW4gdGhlIHNjcmlwdHMgZGVmaW5lZCBpbiBjb21wb3Nlci5qc29uLicpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0QXJndW1lbnQoJ3NjcmlwdCcsIElucHV0QXJndW1lbnQ6OlJFUVVJUkVELCAnU2NyaXB0IG5hbWUgdG8gcnVuLicpLApuZXcgSW5wdXRPcHRpb24oJ2RldicsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnU2V0cyB0aGUgZGV2IG1vZGUuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tZGV2JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEaXNhYmxlcyB0aGUgZGV2IG1vZGUuJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIDxpbmZvPnJ1bi1zY3JpcHQ8L2luZm8+IGNvbW1hbmQgcnVucyBzY3JpcHRzIGRlZmluZWQgaW4gY29tcG9zZXIuanNvbjoKCjxpbmZvPnBocCBjb21wb3Nlci5waGFyIHJ1bi1zY3JpcHQgcG9zdC11cGRhdGUtY21kPC9pbmZvPgpFT1QKKQo7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKJHNjcmlwdCA9ICRpbnB1dC0+Z2V0QXJndW1lbnQoJ3NjcmlwdCcpOwppZiAoIWluX2FycmF5KCRzY3JpcHQsICR0aGlzLT5jb21tYW5kRXZlbnRzKSAmJiAhaW5fYXJyYXkoJHNjcmlwdCwgJHRoaXMtPnNjcmlwdEV2ZW50cykpIHsKaWYgKGRlZmluZWQoJ0NvbXBvc2VyXFNjcmlwdFxTY3JpcHRFdmVudHM6Oicuc3RyX3JlcGxhY2UoJy0nLCAnXycsIHN0cnRvdXBwZXIoJHNjcmlwdCkpKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdTY3JpcHQgIiVzIiBjYW5ub3QgYmUgcnVuIHdpdGggdGhpcyBjb21tYW5kJywgJHNjcmlwdCkpOwp9Cgp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdTY3JpcHQgIiVzIiBkb2VzIG5vdCBleGlzdCcsICRzY3JpcHQpKTsKfQoKaWYgKGluX2FycmF5KCRzY3JpcHQsICR0aGlzLT5jb21tYW5kRXZlbnRzKSkgewokdGhpcy0+Z2V0Q29tcG9zZXIoKS0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmRpc3BhdGNoQ29tbWFuZEV2ZW50KCRzY3JpcHQsICRpbnB1dC0+Z2V0T3B0aW9uKCdkZXYnKSB8fCAhJGlucHV0LT5nZXRPcHRpb24oJ25vLWRldicpKTsKfSBlbHNlIHsKJHRoaXMtPmdldENvbXBvc2VyKCktPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaFNjcmlwdCgkc2NyaXB0LCAkaW5wdXQtPmdldE9wdGlvbignZGV2JykgfHwgISRpbnB1dC0+Z2V0T3B0aW9uKCduby1kZXYnKSk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgQ29tcG9zZXJcQ29tcG9zZXI7CnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxUcmFuc3BvcnRFeGNlcHRpb247CnVzZSBDb21wb3NlclxQbHVnaW5cQ29tbWFuZEV2ZW50Owp1c2UgQ29tcG9zZXJcUGx1Z2luXFBsdWdpbkV2ZW50czsKdXNlIENvbXBvc2VyXFV0aWxcQ29uZmlnVmFsaWRhdG9yOwp1c2UgQ29tcG9zZXJcVXRpbFxQcm9jZXNzRXhlY3V0b3I7CnVzZSBDb21wb3NlclxVdGlsXFJlbW90ZUZpbGVzeXN0ZW07CnVzZSBDb21wb3NlclxVdGlsXFN0cmVhbUNvbnRleHRGYWN0b3J5Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKCgoKCmNsYXNzIERpYWdub3NlQ29tbWFuZCBleHRlbmRzIENvbW1hbmQKewpwcm90ZWN0ZWQgJHJmczsKcHJvdGVjdGVkICRwcm9jZXNzOwpwcm90ZWN0ZWQgJGZhaWx1cmVzID0gMDsKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnZGlhZ25vc2UnKQotPnNldERlc2NyaXB0aW9uKCdEaWFnbm9zZXMgdGhlIHN5c3RlbSB0byBpZGVudGlmeSBjb21tb24gZXJyb3JzLicpCi0+c2V0SGVscCg8PDxFT1QKVGhlIDxpbmZvPmRpYWdub3NlPC9pbmZvPiBjb21tYW5kIGNoZWNrcyBjb21tb24gZXJyb3JzIHRvIGhlbHAgZGVidWdnaW5nIHByb2JsZW1zLgoKRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiRjb21wb3NlciA9ICR0aGlzLT5nZXRDb21wb3NlcihmYWxzZSk7CmlmICgkY29tcG9zZXIpIHsKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnZGlhZ25vc2UnLCAkaW5wdXQsICRvdXRwdXQpOwokY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaCgkY29tbWFuZEV2ZW50LT5nZXROYW1lKCksICRjb21tYW5kRXZlbnQpOwoKJG91dHB1dC0+d3JpdGUoJ0NoZWNraW5nIGNvbXBvc2VyLmpzb246ICcpOwokdGhpcy0+b3V0cHV0UmVzdWx0KCRvdXRwdXQsICR0aGlzLT5jaGVja0NvbXBvc2VyU2NoZW1hKCkpOwp9CgppZiAoJGNvbXBvc2VyKSB7CiRjb25maWcgPSAkY29tcG9zZXItPmdldENvbmZpZygpOwp9IGVsc2UgewokY29uZmlnID0gRmFjdG9yeTo6Y3JlYXRlQ29uZmlnKCk7Cn0KCiR0aGlzLT5yZnMgPSBuZXcgUmVtb3RlRmlsZXN5c3RlbSgkdGhpcy0+Z2V0SU8oKSwgJGNvbmZpZyk7CiR0aGlzLT5wcm9jZXNzID0gbmV3IFByb2Nlc3NFeGVjdXRvcigkdGhpcy0+Z2V0SU8oKSk7Cgokb3V0cHV0LT53cml0ZSgnQ2hlY2tpbmcgcGxhdGZvcm0gc2V0dGluZ3M6ICcpOwokdGhpcy0+b3V0cHV0UmVzdWx0KCRvdXRwdXQsICR0aGlzLT5jaGVja1BsYXRmb3JtKCkpOwoKJG91dHB1dC0+d3JpdGUoJ0NoZWNraW5nIGdpdCBzZXR0aW5nczogJyk7CiR0aGlzLT5vdXRwdXRSZXN1bHQoJG91dHB1dCwgJHRoaXMtPmNoZWNrR2l0KCkpOwoKJG91dHB1dC0+d3JpdGUoJ0NoZWNraW5nIGh0dHAgY29ubmVjdGl2aXR5OiAnKTsKJHRoaXMtPm91dHB1dFJlc3VsdCgkb3V0cHV0LCAkdGhpcy0+Y2hlY2tIdHRwKCkpOwoKJG9wdHMgPSBzdHJlYW1fY29udGV4dF9nZXRfb3B0aW9ucyhTdHJlYW1Db250ZXh0RmFjdG9yeTo6Z2V0Q29udGV4dCgnaHR0cDovL2V4YW1wbGUub3JnJykpOwppZiAoIWVtcHR5KCRvcHRzWydodHRwJ11bJ3Byb3h5J10pKSB7CiRvdXRwdXQtPndyaXRlKCdDaGVja2luZyBIVFRQIHByb3h5OiAnKTsKJHRoaXMtPm91dHB1dFJlc3VsdCgkb3V0cHV0LCAkdGhpcy0+Y2hlY2tIdHRwUHJveHkoKSk7CiRvdXRwdXQtPndyaXRlKCdDaGVja2luZyBIVFRQIHByb3h5IHN1cHBvcnQgZm9yIHJlcXVlc3RfZnVsbHVyaTogJyk7CiR0aGlzLT5vdXRwdXRSZXN1bHQoJG91dHB1dCwgJHRoaXMtPmNoZWNrSHR0cFByb3h5RnVsbFVyaVJlcXVlc3RQYXJhbSgpKTsKJG91dHB1dC0+d3JpdGUoJ0NoZWNraW5nIEhUVFBTIHByb3h5IHN1cHBvcnQgZm9yIHJlcXVlc3RfZnVsbHVyaTogJyk7CiR0aGlzLT5vdXRwdXRSZXN1bHQoJG91dHB1dCwgJHRoaXMtPmNoZWNrSHR0cHNQcm94eUZ1bGxVcmlSZXF1ZXN0UGFyYW0oKSk7Cn0KCmlmICgkb2F1dGggPSAkY29uZmlnLT5nZXQoJ2dpdGh1Yi1vYXV0aCcpKSB7CmZvcmVhY2ggKCRvYXV0aCBhcyAkZG9tYWluID0+ICR0b2tlbikgewokb3V0cHV0LT53cml0ZSgnQ2hlY2tpbmcgJy4kZG9tYWluLicgb2F1dGggYWNjZXNzOiAnKTsKJHRoaXMtPm91dHB1dFJlc3VsdCgkb3V0cHV0LCAkdGhpcy0+Y2hlY2tHaXRodWJPYXV0aCgkZG9tYWluLCAkdG9rZW4pKTsKfQp9Cgokb3V0cHV0LT53cml0ZSgnQ2hlY2tpbmcgZGlzayBmcmVlIHNwYWNlOiAnKTsKJHRoaXMtPm91dHB1dFJlc3VsdCgkb3V0cHV0LCAkdGhpcy0+Y2hlY2tEaXNrU3BhY2UoJGNvbmZpZykpOwoKJG91dHB1dC0+d3JpdGUoJ0NoZWNraW5nIGNvbXBvc2VyIHZlcnNpb246ICcpOwokdGhpcy0+b3V0cHV0UmVzdWx0KCRvdXRwdXQsICR0aGlzLT5jaGVja1ZlcnNpb24oKSk7CgpyZXR1cm4gJHRoaXMtPmZhaWx1cmVzOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrQ29tcG9zZXJTY2hlbWEoKQp7CiR2YWxpZGF0b3IgPSBuZXcgQ29uZmlnVmFsaWRhdG9yKCR0aGlzLT5nZXRJTygpKTsKbGlzdCgkZXJyb3JzLCAkcHVibGlzaEVycm9ycywgJHdhcm5pbmdzKSA9ICR2YWxpZGF0b3ItPnZhbGlkYXRlKEZhY3Rvcnk6OmdldENvbXBvc2VyRmlsZSgpKTsKCmlmICgkZXJyb3JzIHx8ICRwdWJsaXNoRXJyb3JzIHx8ICR3YXJuaW5ncykgewokbWVzc2FnZXMgPSBhcnJheSgKJ2Vycm9yJyA9PiBhcnJheV9tZXJnZSgkZXJyb3JzLCAkcHVibGlzaEVycm9ycyksCid3YXJuaW5nJyA9PiAkd2FybmluZ3MsCik7Cgokb3V0cHV0ID0gJyc7CmZvcmVhY2ggKCRtZXNzYWdlcyBhcyAkc3R5bGUgPT4gJG1zZ3MpIHsKZm9yZWFjaCAoJG1zZ3MgYXMgJG1zZykgewokb3V0cHV0IC49ICc8JyAuICRzdHlsZSAuICc+JyAuICRtc2cgLiAnPC8nIC4gJHN0eWxlIC4gJz4nIC4gUEhQX0VPTDsKfQp9CgpyZXR1cm4gcnRyaW0oJG91dHB1dCk7Cn0KCnJldHVybiB0cnVlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrR2l0KCkKewokdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnZ2l0IGNvbmZpZyBjb2xvci51aScsICRvdXRwdXQpOwppZiAoc3RydG9sb3dlcih0cmltKCRvdXRwdXQpKSA9PT0gJ2Fsd2F5cycpIHsKcmV0dXJuICc8d2FybmluZz5Zb3VyIGdpdCBjb2xvci51aSBzZXR0aW5nIGlzIHNldCB0byBhbHdheXMsIHRoaXMgaXMga25vd24gdG8gY3JlYXRlIGlzc3Vlcy4gVXNlICJnaXQgY29uZmlnIC0tZ2xvYmFsIGNvbG9yLnVpIHRydWUiIHRvIHNldCBpdCBjb3JyZWN0bHkuPC93YXJuaW5nPic7Cn0KCnJldHVybiB0cnVlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrSHR0cCgpCnsKJHByb3RvY29sID0gZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpID8gJ2h0dHBzJyA6ICdodHRwJzsKdHJ5IHsKJGpzb24gPSAkdGhpcy0+cmZzLT5nZXRDb250ZW50cygncGFja2FnaXN0Lm9yZycsICRwcm90b2NvbCAuICc6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzLmpzb24nLCBmYWxzZSk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKcmV0dXJuICRlOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBjaGVja0h0dHBQcm94eSgpCnsKJHByb3RvY29sID0gZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpID8gJ2h0dHBzJyA6ICdodHRwJzsKdHJ5IHsKJGpzb24gPSBqc29uX2RlY29kZSgkdGhpcy0+cmZzLT5nZXRDb250ZW50cygncGFja2FnaXN0Lm9yZycsICRwcm90b2NvbCAuICc6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzLmpzb24nLCBmYWxzZSksIHRydWUpOwokaGFzaCA9IHJlc2V0KCRqc29uWydwcm92aWRlci1pbmNsdWRlcyddKTsKJGhhc2ggPSAkaGFzaFsnc2hhMjU2J107CiRwYXRoID0gc3RyX3JlcGxhY2UoJyVoYXNoJScsICRoYXNoLCBrZXkoJGpzb25bJ3Byb3ZpZGVyLWluY2x1ZGVzJ10pKTsKJHByb3ZpZGVyID0gJHRoaXMtPnJmcy0+Z2V0Q29udGVudHMoJ3BhY2thZ2lzdC5vcmcnLCAkcHJvdG9jb2wgLiAnOi8vcGFja2FnaXN0Lm9yZy8nLiRwYXRoLCBmYWxzZSk7CgppZiAoaGFzaCgnc2hhMjU2JywgJHByb3ZpZGVyKSAhPT0gJGhhc2gpIHsKcmV0dXJuICdJdCBzZWVtcyB0aGF0IHlvdXIgcHJveHkgaXMgbW9kaWZ5aW5nIGh0dHAgdHJhZmZpYyBvbiB0aGUgZmx5JzsKfQp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CnJldHVybiAkZTsKfQoKcmV0dXJuIHRydWU7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrSHR0cFByb3h5RnVsbFVyaVJlcXVlc3RQYXJhbSgpCnsKJHVybCA9ICdodHRwOi8vcGFja2FnaXN0Lm9yZy9wYWNrYWdlcy5qc29uJzsKdHJ5IHsKJHRoaXMtPnJmcy0+Z2V0Q29udGVudHMoJ3BhY2thZ2lzdC5vcmcnLCAkdXJsLCBmYWxzZSk7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewp0cnkgewokdGhpcy0+cmZzLT5nZXRDb250ZW50cygncGFja2FnaXN0Lm9yZycsICR1cmwsIGZhbHNlLCBhcnJheSgnaHR0cCcgPT4gYXJyYXkoJ3JlcXVlc3RfZnVsbHVyaScgPT4gZmFsc2UpKSk7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewpyZXR1cm4gJ1VuYWJsZSB0byBhc3NlcnQgdGhlIHNpdHVhdGlvbiwgbWF5YmUgcGFja2FnaXN0Lm9yZyBpcyBkb3duICgnLiRlLT5nZXRNZXNzYWdlKCkuJyknOwp9CgpyZXR1cm4gJ0l0IHNlZW1zIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHlvdXIgcHJveHkgc2VydmVyLCB0cnkgc2V0dGluZyB0aGUgIkhUVFBfUFJPWFlfUkVRVUVTVF9GVUxMVVJJIiBhbmQgIkhUVFBTX1BST1hZX1JFUVVFU1RfRlVMTFVSSSIgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRvICJmYWxzZSInOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gY2hlY2tIdHRwc1Byb3h5RnVsbFVyaVJlcXVlc3RQYXJhbSgpCnsKaWYgKCFleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIHsKcmV0dXJuICdZb3UgbmVlZCB0aGUgb3BlbnNzbCBleHRlbnNpb24gaW5zdGFsbGVkIGZvciB0aGlzIGNoZWNrJzsKfQoKJHVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL1NlbGRhZWsvanNvbmxpbnQvemlwYmFsbC8xLjAuMCc7CnRyeSB7CiRyZmNSZXN1bHQgPSAkdGhpcy0+cmZzLT5nZXRDb250ZW50cygnYXBpLmdpdGh1Yi5jb20nLCAkdXJsLCBmYWxzZSk7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewp0cnkgewokdGhpcy0+cmZzLT5nZXRDb250ZW50cygnYXBpLmdpdGh1Yi5jb20nLCAkdXJsLCBmYWxzZSwgYXJyYXkoJ2h0dHAnID0+IGFycmF5KCdyZXF1ZXN0X2Z1bGx1cmknID0+IGZhbHNlKSkpOwp9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gJGUpIHsKcmV0dXJuICdVbmFibGUgdG8gYXNzZXJ0IHRoZSBzaXR1YXRpb24sIG1heWJlIGdpdGh1YiBpcyBkb3duICgnLiRlLT5nZXRNZXNzYWdlKCkuJyknOwp9CgpyZXR1cm4gJ0l0IHNlZW1zIHRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIHlvdXIgcHJveHkgc2VydmVyLCB0cnkgc2V0dGluZyB0aGUgIkhUVFBTX1BST1hZX1JFUVVFU1RfRlVMTFVSSSIgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gImZhbHNlIic7Cn0KCnJldHVybiB0cnVlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrR2l0aHViT2F1dGgoJGRvbWFpbiwgJHRva2VuKQp7CiR0aGlzLT5nZXRJTygpLT5zZXRBdXRoZW50aWNhdGlvbigkZG9tYWluLCAkdG9rZW4sICd4LW9hdXRoLWJhc2ljJyk7CnRyeSB7CiR1cmwgPSAkZG9tYWluID09PSAnZ2l0aHViLmNvbScgPyAnaHR0cHM6Ly9hcGkuJy4kZG9tYWluLicvdXNlci9yZXBvcycgOiAnaHR0cHM6Ly8nLiRkb21haW4uJy9hcGkvdjMvdXNlci9yZXBvcyc7CgpyZXR1cm4gJHRoaXMtPnJmcy0+Z2V0Q29udGVudHMoJGRvbWFpbiwgJHVybCwgZmFsc2UpID8gdHJ1ZSA6ICdVbmV4cGVjdGVkIGVycm9yJzsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewppZiAoJGUgaW5zdGFuY2VvZiBUcmFuc3BvcnRFeGNlcHRpb24gJiYgJGUtPmdldENvZGUoKSA9PT0gNDAxKSB7CnJldHVybiAnPHdhcm5pbmc+VGhlIG9hdXRoIHRva2VuIGZvciAnLiRkb21haW4uJyBzZWVtcyBpbnZhbGlkLCBydW4gImNvbXBvc2VyIGNvbmZpZyAtLWdsb2JhbCAtLXVuc2V0IGdpdGh1Yi1vYXV0aC4nLiRkb21haW4uJyIgdG8gcmVtb3ZlIGl0PC93YXJuaW5nPic7Cn0KCnJldHVybiAkZTsKfQp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrRGlza1NwYWNlKCRjb25maWcpCnsKJG1pblNwYWNlRnJlZSA9IDEwMjQqMTAyNDsKaWYgKCgoJGRmID0gQGRpc2tfZnJlZV9zcGFjZSgkZGlyID0gJGNvbmZpZy0+Z2V0KCdob21lJykpKSAhPT0gZmFsc2UgJiYgJGRmIDwgJG1pblNwYWNlRnJlZSkKfHwgKCgkZGYgPSBAZGlza19mcmVlX3NwYWNlKCRkaXIgPSAkY29uZmlnLT5nZXQoJ3ZlbmRvci1kaXInKSkpICE9PSBmYWxzZSAmJiAkZGYgPCAkbWluU3BhY2VGcmVlKQopIHsKcmV0dXJuICc8ZXJyb3I+VGhlIGRpc2sgaG9zdGluZyAnLiRkaXIuJyBpcyBmdWxsPC9lcnJvcj4nOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBjaGVja1ZlcnNpb24oKQp7CiRwcm90b2NvbCA9IGV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSA/ICdodHRwcycgOiAnaHR0cCc7CiRsYXRlc3QgPSB0cmltKCR0aGlzLT5yZnMtPmdldENvbnRlbnRzKCdnZXRjb21wb3Nlci5vcmcnLCAkcHJvdG9jb2wgLiAnOi8vZ2V0Y29tcG9zZXIub3JnL3ZlcnNpb24nLCBmYWxzZSkpOwoKaWYgKENvbXBvc2VyOjpWRVJTSU9OICE9PSAkbGF0ZXN0ICYmIENvbXBvc2VyOjpWRVJTSU9OICE9PSAnQHBhY2thZ2VfdmVyc2lvbkAnKSB7CnJldHVybiAnPHdhcm5pbmc+WW91ciBhcmUgbm90IHJ1bm5pbmcgdGhlIGxhdGVzdCB2ZXJzaW9uPC93YXJuaW5nPic7Cn0KCnJldHVybiB0cnVlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIG91dHB1dFJlc3VsdChPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHJlc3VsdCkKewppZiAodHJ1ZSA9PT0gJHJlc3VsdCkgewokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz5PSzwvaW5mbz4nKTsKfSBlbHNlIHsKJHRoaXMtPmZhaWx1cmVzKys7CiRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj5GQUlMPC9lcnJvcj4nKTsKaWYgKCRyZXN1bHQgaW5zdGFuY2VvZiBcRXhjZXB0aW9uKSB7CiRvdXRwdXQtPndyaXRlbG4oJ1snLmdldF9jbGFzcygkcmVzdWx0KS4nXSAnLiRyZXN1bHQtPmdldE1lc3NhZ2UoKSk7Cn0gZWxzZWlmICgkcmVzdWx0KSB7CiRvdXRwdXQtPndyaXRlbG4oJHJlc3VsdCk7Cn0KfQp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNoZWNrUGxhdGZvcm0oKQp7CiRvdXRwdXQgPSAnJzsKJG91dCA9IGZ1bmN0aW9uICgkbXNnLCAkc3R5bGUpIHVzZSAoJiRvdXRwdXQpIHsKJG91dHB1dCAuPSAnPCcuJHN0eWxlLic+Jy4kbXNnLic8LycuJHN0eWxlLic+JzsKfTsKCgogJGVycm9ycyA9IGFycmF5KCk7CiR3YXJuaW5ncyA9IGFycmF5KCk7CgokaW5pUGF0aCA9IHBocF9pbmlfbG9hZGVkX2ZpbGUoKTsKJGRpc3BsYXlJbmlNZXNzYWdlID0gZmFsc2U7CmlmICgkaW5pUGF0aCkgewokaW5pTWVzc2FnZSA9IFBIUF9FT0wuUEhQX0VPTC4nVGhlIHBocC5pbmkgdXNlZCBieSB5b3VyIGNvbW1hbmQtbGluZSBQSFAgaXM6ICcgLiAkaW5pUGF0aDsKfSBlbHNlIHsKJGluaU1lc3NhZ2UgPSBQSFBfRU9MLlBIUF9FT0wuJ0EgcGhwLmluaSBmaWxlIGRvZXMgbm90IGV4aXN0LiBZb3Ugd2lsbCBoYXZlIHRvIGNyZWF0ZSBvbmUuJzsKfQokaW5pTWVzc2FnZSAuPSBQSFBfRU9MLidJZiB5b3UgY2FuIG5vdCBtb2RpZnkgdGhlIGluaSBmaWxlLCB5b3UgY2FuIGFsc28gcnVuIGBwaHAgLWQgb3B0aW9uPXZhbHVlYCB0byBtb2RpZnkgaW5pIHZhbHVlcyBvbiB0aGUgZmx5LiBZb3UgY2FuIHVzZSAtZCBtdWx0aXBsZSB0aW1lcy4nOwoKaWYgKCFpbmlfZ2V0KCdhbGxvd191cmxfZm9wZW4nKSkgewokZXJyb3JzWydhbGxvd191cmxfZm9wZW4nXSA9IHRydWU7Cn0KCmlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjMuMicsICc8JykpIHsKJGVycm9yc1sncGhwJ10gPSBQSFBfVkVSU0lPTjsKfQoKaWYgKCFpc3NldCgkZXJyb3JzWydwaHAnXSkgJiYgdmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNS4zLjQnLCAnPCcpKSB7CiR3YXJuaW5nc1sncGhwJ10gPSBQSFBfVkVSU0lPTjsKfQoKaWYgKCFleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIHsKJHdhcm5pbmdzWydvcGVuc3NsJ10gPSB0cnVlOwp9CgppZiAoaW5pX2dldCgnYXBjLmVuYWJsZV9jbGknKSkgewokd2FybmluZ3NbJ2FwY19jbGknXSA9IHRydWU7Cn0KCmlmIChpbmlfZ2V0KCd4ZGVidWcucHJvZmlsZXJfZW5hYmxlZCcpKSB7CiR3YXJuaW5nc1sneGRlYnVnX3Byb2ZpbGUnXSA9IHRydWU7Cn0gZWxzZWlmIChleHRlbnNpb25fbG9hZGVkKCd4ZGVidWcnKSkgewokd2FybmluZ3NbJ3hkZWJ1Z19sb2FkZWQnXSA9IHRydWU7Cn0KCm9iX3N0YXJ0KCk7CnBocGluZm8oSU5GT19HRU5FUkFMKTsKJHBocGluZm8gPSBvYl9nZXRfY2xlYW4oKTsKaWYgKHByZWdfbWF0Y2goJ3tDb25maWd1cmUgQ29tbWFuZCg/OiAqPC90ZD48dGQgY2xhc3M9InYiPnwgKj0+ICopKC4qPykoPzo8L3RkPnwkKX1tJywgJHBocGluZm8sICRtYXRjaCkpIHsKJGNvbmZpZ3VyZSA9ICRtYXRjaFsxXTsKCmlmIChmYWxzZSAhPT0gc3RycG9zKCRjb25maWd1cmUsICctLWVuYWJsZS1zaWdjaGlsZCcpKSB7CiR3YXJuaW5nc1snc2lnY2hpbGQnXSA9IHRydWU7Cn0KCmlmIChmYWxzZSAhPT0gc3RycG9zKCRjb25maWd1cmUsICctLXdpdGgtY3VybHdyYXBwZXJzJykpIHsKJHdhcm5pbmdzWydjdXJsd3JhcHBlcnMnXSA9IHRydWU7Cn0KfQoKaWYgKCFlbXB0eSgkZXJyb3JzKSkgewpmb3JlYWNoICgkZXJyb3JzIGFzICRlcnJvciA9PiAkY3VycmVudCkgewpzd2l0Y2ggKCRlcnJvcikgewpjYXNlICdwaHAnOgokdGV4dCA9IFBIUF9FT0wuIllvdXIgUEhQICh7JGN1cnJlbnR9KSBpcyB0b28gb2xkLCB5b3UgbXVzdCB1cGdyYWRlIHRvIFBIUCA1LjMuMiBvciBoaWdoZXIuIjsKYnJlYWs7CgpjYXNlICdhbGxvd191cmxfZm9wZW4nOgokdGV4dCA9IFBIUF9FT0wuIlRoZSBhbGxvd191cmxfZm9wZW4gc2V0dGluZyBpcyBpbmNvcnJlY3QuIi5QSFBfRU9MOwokdGV4dCAuPSAiQWRkIHRoZSBmb2xsb3dpbmcgdG8gdGhlIGVuZCBvZiB5b3VyIGBwaHAuaW5pYDoiLlBIUF9FT0w7CiR0ZXh0IC49ICIgICAgYWxsb3dfdXJsX2ZvcGVuID0gT24iOwokZGlzcGxheUluaU1lc3NhZ2UgPSB0cnVlOwpicmVhazsKfQokb3V0KCR0ZXh0LCAnZXJyb3InKTsKfQoKJG91dHB1dCAuPSBQSFBfRU9MOwp9CgppZiAoIWVtcHR5KCR3YXJuaW5ncykpIHsKZm9yZWFjaCAoJHdhcm5pbmdzIGFzICR3YXJuaW5nID0+ICRjdXJyZW50KSB7CnN3aXRjaCAoJHdhcm5pbmcpIHsKY2FzZSAnYXBjX2NsaSc6CiR0ZXh0ID0gUEhQX0VPTC4iVGhlIGFwYy5lbmFibGVfY2xpIHNldHRpbmcgaXMgaW5jb3JyZWN0LiIuUEhQX0VPTDsKJHRleHQgLj0gIkFkZCB0aGUgZm9sbG93aW5nIHRvIHRoZSBlbmQgb2YgeW91ciBgcGhwLmluaWA6Ii5QSFBfRU9MOwokdGV4dCAuPSAiICAgIGFwYy5lbmFibGVfY2xpID0gT2ZmIjsKJGRpc3BsYXlJbmlNZXNzYWdlID0gdHJ1ZTsKYnJlYWs7CgpjYXNlICdzaWdjaGlsZCc6CiR0ZXh0ID0gUEhQX0VPTC4iUEhQIHdhcyBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXNpZ2NoaWxkIHdoaWNoIGNhbiBjYXVzZSBpc3N1ZXMgb24gc29tZSBwbGF0Zm9ybXMuIi5QSFBfRU9MOwokdGV4dCAuPSAiUmVjb21waWxlIGl0IHdpdGhvdXQgdGhpcyBmbGFnIGlmIHBvc3NpYmxlLCBzZWUgYWxzbzoiLlBIUF9FT0w7CiR0ZXh0IC49ICIgICAgaHR0cHM6Ly9idWdzLnBocC5uZXQvYnVnLnBocD9pZD0yMjk5OSI7CmJyZWFrOwoKY2FzZSAnY3VybHdyYXBwZXJzJzoKJHRleHQgPSBQSFBfRU9MLiJQSFAgd2FzIGNvbXBpbGVkIHdpdGggLS13aXRoLWN1cmx3cmFwcGVycyB3aGljaCB3aWxsIGNhdXNlIGlzc3VlcyB3aXRoIEhUVFAgYXV0aGVudGljYXRpb24gYW5kIEdpdEh1Yi4iLlBIUF9FT0w7CiR0ZXh0IC49ICJSZWNvbXBpbGUgaXQgd2l0aG91dCB0aGlzIGZsYWcgaWYgcG9zc2libGUiOwpicmVhazsKCmNhc2UgJ29wZW5zc2wnOgokdGV4dCA9IFBIUF9FT0wuIlRoZSBvcGVuc3NsIGV4dGVuc2lvbiBpcyBtaXNzaW5nLCB3aGljaCB3aWxsIHJlZHVjZSB0aGUgc2VjdXJpdHkgYW5kIHN0YWJpbGl0eSBvZiBDb21wb3Nlci4iLlBIUF9FT0w7CiR0ZXh0IC49ICJJZiBwb3NzaWJsZSB5b3Ugc2hvdWxkIGVuYWJsZSBpdCBvciByZWNvbXBpbGUgcGhwIHdpdGggLS13aXRoLW9wZW5zc2wiOwpicmVhazsKCmNhc2UgJ3BocCc6CiR0ZXh0ID0gUEhQX0VPTC4iWW91ciBQSFAgKHskY3VycmVudH0pIGlzIHF1aXRlIG9sZCwgdXBncmFkaW5nIHRvIFBIUCA1LjMuNCBvciBoaWdoZXIgaXMgcmVjb21tZW5kZWQuIi5QSFBfRU9MOwokdGV4dCAuPSAiQ29tcG9zZXIgd29ya3Mgd2l0aCA1LjMuMisgZm9yIG1vc3QgcGVvcGxlLCBidXQgdGhlcmUgbWlnaHQgYmUgZWRnZSBjYXNlIGlzc3Vlcy4iOwpicmVhazsKCmNhc2UgJ3hkZWJ1Z19sb2FkZWQnOgokdGV4dCA9IFBIUF9FT0wuIlRoZSB4ZGVidWcgZXh0ZW5zaW9uIGlzIGxvYWRlZCwgdGhpcyBjYW4gc2xvdyBkb3duIENvbXBvc2VyIGEgbGl0dGxlLiIuUEhQX0VPTDsKJHRleHQgLj0gIkRpc2FibGluZyBpdCB3aGVuIHVzaW5nIENvbXBvc2VyIGlzIHJlY29tbWVuZGVkLCBidXQgc2hvdWxkIG5vdCBjYXVzZSBpc3N1ZXMgYmV5b25kIHNsb3duZXNzLiI7CmJyZWFrOwoKY2FzZSAneGRlYnVnX3Byb2ZpbGUnOgokdGV4dCA9IFBIUF9FT0wuIlRoZSB4ZGVidWcucHJvZmlsZXJfZW5hYmxlZCBzZXR0aW5nIGlzIGVuYWJsZWQsIHRoaXMgY2FuIHNsb3cgZG93biBDb21wb3NlciBhIGxvdC4iLlBIUF9FT0w7CiR0ZXh0IC49ICJBZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIHlvdXIgYHBocC5pbmlgIHRvIGRpc2FibGUgaXQ6Ii5QSFBfRU9MOwokdGV4dCAuPSAiICAgIHhkZWJ1Zy5wcm9maWxlcl9lbmFibGVkID0gMCI7CiRkaXNwbGF5SW5pTWVzc2FnZSA9IHRydWU7CmJyZWFrOwp9CiRvdXQoJHRleHQsICd3YXJuaW5nJyk7Cn0KfQoKaWYgKCRkaXNwbGF5SW5pTWVzc2FnZSkgewokb3V0KCRpbmlNZXNzYWdlLCAnd2FybmluZycpOwp9CgpyZXR1cm4gISR3YXJuaW5ncyAmJiAhJGVycm9ycyA/IHRydWUgOiAkb3V0cHV0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcUG9vbDsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnRcVmVyc2lvbkNvbnN0cmFpbnQ7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2l0ZVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxTY3JpcHRcU2NyaXB0RXZlbnRzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBBcmNoaXZlQ29tbWFuZCBleHRlbmRzIENvbW1hbmQKewpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcwotPnNldE5hbWUoJ2FyY2hpdmUnKQotPnNldERlc2NyaXB0aW9uKCdDcmVhdGUgYW4gYXJjaGl2ZSBvZiB0aGlzIGNvbXBvc2VyIHBhY2thZ2UnKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dEFyZ3VtZW50KCdwYWNrYWdlJywgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICdUaGUgcGFja2FnZSB0byBhcmNoaXZlIGluc3RlYWQgb2YgdGhlIGN1cnJlbnQgcHJvamVjdCcpLApuZXcgSW5wdXRBcmd1bWVudCgndmVyc2lvbicsIElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnVGhlIHBhY2thZ2UgdmVyc2lvbiB0byBhcmNoaXZlJyksCm5ldyBJbnB1dE9wdGlvbignZm9ybWF0JywgJ2YnLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdGb3JtYXQgb2YgdGhlIHJlc3VsdGluZyBhcmNoaXZlOiB0YXIgb3IgemlwJywgJ3RhcicpLApuZXcgSW5wdXRPcHRpb24oJ2RpcicsIGZhbHNlLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdXcml0ZSB0aGUgYXJjaGl2ZSB0byB0aGlzIGRpcmVjdG9yeScsICcuJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIDxpbmZvPmFyY2hpdmU8L2luZm8+IGNvbW1hbmQgY3JlYXRlcyBhbiBhcmNoaXZlIG9mIHRoZSBzcGVjaWZpZWQgZm9ybWF0CmNvbnRhaW5pbmcgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBvZiB0aGUgQ29tcG9zZXIgcHJvamVjdCBvciB0aGUgc3BlY2lmaWVkCnBhY2thZ2UgaW4gdGhlIHNwZWNpZmllZCB2ZXJzaW9uIGFuZCB3cml0ZXMgaXQgdG8gdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkuCgo8aW5mbz5waHAgY29tcG9zZXIucGhhciBhcmNoaXZlIFstLWZvcm1hdD16aXBdIFstLWRpcj0vZm9vXSBbcGFja2FnZSBbdmVyc2lvbl1dPC9pbmZvPgoKRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiR0aGlzLT5nZXRDb21wb3NlcigpLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2hTY3JpcHQoU2NyaXB0RXZlbnRzOjpQUkVfQVJDSElWRV9DTUQpOwoKJHJldHVybkNvZGUgPSAkdGhpcy0+YXJjaGl2ZSgKJHRoaXMtPmdldElPKCksCiRpbnB1dC0+Z2V0QXJndW1lbnQoJ3BhY2thZ2UnKSwKJGlucHV0LT5nZXRBcmd1bWVudCgndmVyc2lvbicpLAokaW5wdXQtPmdldE9wdGlvbignZm9ybWF0JyksCiRpbnB1dC0+Z2V0T3B0aW9uKCdkaXInKQopOwoKaWYgKDAgPT09ICRyZXR1cm5Db2RlKSB7CiR0aGlzLT5nZXRDb21wb3NlcigpLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2hTY3JpcHQoU2NyaXB0RXZlbnRzOjpQT1NUX0FSQ0hJVkVfQ01EKTsKfQpyZXR1cm4gJHJldHVybkNvZGU7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBhcmNoaXZlKElPSW50ZXJmYWNlICRpbywgJHBhY2thZ2VOYW1lID0gbnVsbCwgJHZlcnNpb24gPSBudWxsLCAkZm9ybWF0ID0gJ3RhcicsICRkZXN0ID0gJy4nKQp7CiRjb25maWcgPSBGYWN0b3J5OjpjcmVhdGVDb25maWcoKTsKJGZhY3RvcnkgPSBuZXcgRmFjdG9yeTsKJGRvd25sb2FkTWFuYWdlciA9ICRmYWN0b3J5LT5jcmVhdGVEb3dubG9hZE1hbmFnZXIoJGlvLCAkY29uZmlnKTsKJGFyY2hpdmVNYW5hZ2VyID0gJGZhY3RvcnktPmNyZWF0ZUFyY2hpdmVNYW5hZ2VyKCRjb25maWcsICRkb3dubG9hZE1hbmFnZXIpOwoKaWYgKCRwYWNrYWdlTmFtZSkgewokcGFja2FnZSA9ICR0aGlzLT5zZWxlY3RQYWNrYWdlKCRpbywgJHBhY2thZ2VOYW1lLCAkdmVyc2lvbik7CgppZiAoISRwYWNrYWdlKSB7CnJldHVybiAxOwp9Cn0gZWxzZSB7CiRwYWNrYWdlID0gJHRoaXMtPmdldENvbXBvc2VyKCktPmdldFBhY2thZ2UoKTsKfQoKJGlvLT53cml0ZSgnPGluZm8+Q3JlYXRpbmcgdGhlIGFyY2hpdmUuPC9pbmZvPicpOwokYXJjaGl2ZU1hbmFnZXItPmFyY2hpdmUoJHBhY2thZ2UsICRmb3JtYXQsICRkZXN0KTsKCnJldHVybiAwOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2VsZWN0UGFja2FnZShJT0ludGVyZmFjZSAkaW8sICRwYWNrYWdlTmFtZSwgJHZlcnNpb24gPSBudWxsKQp7CiRpby0+d3JpdGUoJzxpbmZvPlNlYXJjaGluZyBmb3IgdGhlIHNwZWNpZmllZCBwYWNrYWdlLjwvaW5mbz4nKTsKCmlmICgkY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIoZmFsc2UpKSB7CiRsb2NhbFJlcG8gPSAkY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldExvY2FsUmVwb3NpdG9yeSgpOwokcmVwb3MgPSBuZXcgQ29tcG9zaXRlUmVwb3NpdG9yeShhcnJheV9tZXJnZShhcnJheSgkbG9jYWxSZXBvKSwgJGNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRSZXBvc2l0b3JpZXMoKSkpOwp9IGVsc2UgewokZGVmYXVsdFJlcG9zID0gRmFjdG9yeTo6Y3JlYXRlRGVmYXVsdFJlcG9zaXRvcmllcygkdGhpcy0+Z2V0SU8oKSk7CiRpby0+d3JpdGUoJ05vIGNvbXBvc2VyLmpzb24gZm91bmQgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5LCBzZWFyY2hpbmcgcGFja2FnZXMgZnJvbSAnIC4gaW1wbG9kZSgnLCAnLCBhcnJheV9rZXlzKCRkZWZhdWx0UmVwb3MpKSk7CiRyZXBvcyA9IG5ldyBDb21wb3NpdGVSZXBvc2l0b3J5KCRkZWZhdWx0UmVwb3MpOwp9CgokcG9vbCA9IG5ldyBQb29sKCk7CiRwb29sLT5hZGRSZXBvc2l0b3J5KCRyZXBvcyk7CgokY29uc3RyYWludCA9ICgkdmVyc2lvbikgPyBuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJz49JywgJHZlcnNpb24pIDogbnVsbDsKJHBhY2thZ2VzID0gJHBvb2wtPndoYXRQcm92aWRlcygkcGFja2FnZU5hbWUsICRjb25zdHJhaW50KTsKCmlmIChjb3VudCgkcGFja2FnZXMpID4gMSkgewokcGFja2FnZSA9ICRwYWNrYWdlc1swXTsKJGlvLT53cml0ZSgnPGluZm8+Rm91bmQgbXVsdGlwbGUgbWF0Y2hlcywgc2VsZWN0ZWQgJy4kcGFja2FnZS0+Z2V0UHJldHR5U3RyaW5nKCkuJy48L2luZm8+Jyk7CiRpby0+d3JpdGUoJ0FsdGVybmF0aXZlcyB3ZXJlICcuaW1wbG9kZSgnLCAnLCBhcnJheV9tYXAoZnVuY3Rpb24gKCRwKSB7IHJldHVybiAkcC0+Z2V0UHJldHR5U3RyaW5nKCk7IH0sICRwYWNrYWdlcykpLicuJyk7CiRpby0+d3JpdGUoJzxjb21tZW50PlBsZWFzZSB1c2UgYSBtb3JlIHNwZWNpZmljIGNvbnN0cmFpbnQgdG8gcGljayBhIGRpZmZlcmVudCBwYWNrYWdlLjwvY29tbWVudD4nKTsKfSBlbHNlaWYgKCRwYWNrYWdlcykgewokcGFja2FnZSA9ICRwYWNrYWdlc1swXTsKJGlvLT53cml0ZSgnPGluZm8+Rm91bmQgYW4gZXhhY3QgbWF0Y2ggJy4kcGFja2FnZS0+Z2V0UHJldHR5U3RyaW5nKCkuJy48L2luZm8+Jyk7Cn0gZWxzZSB7CiRpby0+d3JpdGUoJzxlcnJvcj5Db3VsZCBub3QgZmluZCBhIHBhY2thZ2UgbWF0Y2hpbmcgJy4kcGFja2FnZU5hbWUuJy48L2Vycm9yPicpOwoKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gJHBhY2thZ2U7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcQ29uc29sZVxBcHBsaWNhdGlvbjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcSU9cTnVsbElPOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQgYXMgQmFzZUNvbW1hbmQ7CgoKCgoKCgphYnN0cmFjdCBjbGFzcyBDb21tYW5kIGV4dGVuZHMgQmFzZUNvbW1hbmQKewoKCgpwcml2YXRlICRjb21wb3NlcjsKCgoKCnByaXZhdGUgJGlvOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VyKCRyZXF1aXJlZCA9IHRydWUsICRkaXNhYmxlUGx1Z2lucyA9IGZhbHNlKQp7CmlmIChudWxsID09PSAkdGhpcy0+Y29tcG9zZXIpIHsKJGFwcGxpY2F0aW9uID0gJHRoaXMtPmdldEFwcGxpY2F0aW9uKCk7CmlmICgkYXBwbGljYXRpb24gaW5zdGFuY2VvZiBBcHBsaWNhdGlvbikgewoKJHRoaXMtPmNvbXBvc2VyID0gJGFwcGxpY2F0aW9uLT5nZXRDb21wb3NlcigkcmVxdWlyZWQsICRkaXNhYmxlUGx1Z2lucyk7Cn0gZWxzZWlmICgkcmVxdWlyZWQpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAonQ291bGQgbm90IGNyZWF0ZSBhIENvbXBvc2VyXENvbXBvc2VyIGluc3RhbmNlLCB5b3UgbXVzdCBpbmplY3QgJy4KJ29uZSBpZiB0aGlzIGNvbW1hbmQgaXMgbm90IHVzZWQgd2l0aCBhIENvbXBvc2VyXENvbnNvbGVcQXBwbGljYXRpb24gaW5zdGFuY2UnCik7Cn0KfQoKcmV0dXJuICR0aGlzLT5jb21wb3NlcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldENvbXBvc2VyKENvbXBvc2VyICRjb21wb3NlcikKewokdGhpcy0+Y29tcG9zZXIgPSAkY29tcG9zZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJTygpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5pbykgewokYXBwbGljYXRpb24gPSAkdGhpcy0+Z2V0QXBwbGljYXRpb24oKTsKaWYgKCRhcHBsaWNhdGlvbiBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uKSB7CgokdGhpcy0+aW8gPSAkYXBwbGljYXRpb24tPmdldElPKCk7Cn0gZWxzZSB7CiR0aGlzLT5pbyA9IG5ldyBOdWxsSU8oKTsKfQp9CgpyZXR1cm4gJHRoaXMtPmlvOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SU8oSU9JbnRlcmZhY2UgJGlvKQp7CiR0aGlzLT5pbyA9ICRpbzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcRmFjdG9yeTsKdXNlIENvbXBvc2VyXEluc3RhbGxlcjsKdXNlIENvbXBvc2VyXEluc3RhbGxlclxQcm9qZWN0SW5zdGFsbGVyOwp1c2UgQ29tcG9zZXJcSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXI7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQmFzZVBhY2thZ2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXExpbmtDb25zdHJhaW50XFZlcnNpb25Db25zdHJhaW50Owp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXFBvb2w7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uXEluc3RhbGxPcGVyYXRpb247CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2VyUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcQ29tcG9zaXRlUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcRmlsZXN5c3RlbVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XEluc3RhbGxlZEZpbGVzeXN0ZW1SZXBvc2l0b3J5Owp1c2UgQ29tcG9zZXJcU2NyaXB0XFNjcmlwdEV2ZW50czsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEZpbmRlcjsKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxDb25maWdcSnNvbkNvbmZpZ1NvdXJjZTsKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwoKCgoKCgoKCgpjbGFzcyBDcmVhdGVQcm9qZWN0Q29tbWFuZCBleHRlbmRzIENvbW1hbmQKewpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcwotPnNldE5hbWUoJ2NyZWF0ZS1wcm9qZWN0JykKLT5zZXREZXNjcmlwdGlvbignQ3JlYXRlIG5ldyBwcm9qZWN0IGZyb20gYSBwYWNrYWdlIGludG8gZ2l2ZW4gZGlyZWN0b3J5LicpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0QXJndW1lbnQoJ3BhY2thZ2UnLCBJbnB1dEFyZ3VtZW50OjpPUFRJT05BTCwgJ1BhY2thZ2UgbmFtZSB0byBiZSBpbnN0YWxsZWQnKSwKbmV3IElucHV0QXJndW1lbnQoJ2RpcmVjdG9yeScsIElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnRGlyZWN0b3J5IHdoZXJlIHRoZSBmaWxlcyBzaG91bGQgYmUgY3JlYXRlZCcpLApuZXcgSW5wdXRBcmd1bWVudCgndmVyc2lvbicsIElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnVmVyc2lvbiwgd2lsbCBkZWZhdWx0IHRvIGxhdGVzdCcpLApuZXcgSW5wdXRPcHRpb24oJ3N0YWJpbGl0eScsICdzJywgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnTWluaW11bS1zdGFiaWxpdHkgYWxsb3dlZCAodW5sZXNzIGEgdmVyc2lvbiBpcyBzcGVjaWZpZWQpLicpLApuZXcgSW5wdXRPcHRpb24oJ3ByZWZlci1zb3VyY2UnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0ZvcmNlcyBpbnN0YWxsYXRpb24gZnJvbSBwYWNrYWdlIHNvdXJjZXMgd2hlbiBwb3NzaWJsZSwgaW5jbHVkaW5nIFZDUyBpbmZvcm1hdGlvbi4nKSwKbmV3IElucHV0T3B0aW9uKCdwcmVmZXItZGlzdCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRm9yY2VzIGluc3RhbGxhdGlvbiBmcm9tIHBhY2thZ2UgZGlzdCBldmVuIGZvciBkZXYgdmVyc2lvbnMuJyksCm5ldyBJbnB1dE9wdGlvbigncmVwb3NpdG9yeS11cmwnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdQaWNrIGEgZGlmZmVyZW50IHJlcG9zaXRvcnkgdXJsIHRvIGxvb2sgZm9yIHRoZSBwYWNrYWdlLicpLApuZXcgSW5wdXRPcHRpb24oJ2RldicsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRW5hYmxlcyBpbnN0YWxsYXRpb24gb2YgcmVxdWlyZS1kZXYgcGFja2FnZXMgKGVuYWJsZWQgYnkgZGVmYXVsdCwgb25seSBwcmVzZW50IGZvciBCQykuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tZGV2JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEaXNhYmxlcyBpbnN0YWxsYXRpb24gb2YgcmVxdWlyZS1kZXYgcGFja2FnZXMuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tcGx1Z2lucycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnV2hldGhlciB0byBkaXNhYmxlIHBsdWdpbnMuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tY3VzdG9tLWluc3RhbGxlcnMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0RFUFJFQ0FURUQ6IFVzZSBuby1wbHVnaW5zIGluc3RlYWQuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tc2NyaXB0cycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnV2hldGhlciB0byBwcmV2ZW50IGV4ZWN1dGlvbiBvZiBhbGwgZGVmaW5lZCBzY3JpcHRzIGluIHRoZSByb290IHBhY2thZ2UuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tcHJvZ3Jlc3MnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0RvIG5vdCBvdXRwdXQgZG93bmxvYWQgcHJvZ3Jlc3MuJyksCm5ldyBJbnB1dE9wdGlvbigna2VlcC12Y3MnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1doZXRoZXIgdG8gcHJldmVudCBkZWxldGlvbiB2Y3MgZm9sZGVyLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLWluc3RhbGwnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1doZXRoZXIgdG8gc2tpcCBpbnN0YWxsYXRpb24gb2YgdGhlIHBhY2thZ2UgZGVwZW5kZW5jaWVzLicpLAopKQotPnNldEhlbHAoPDw8RU9UClRoZSA8aW5mbz5jcmVhdGUtcHJvamVjdDwvaW5mbz4gY29tbWFuZCBjcmVhdGVzIGEgbmV3IHByb2plY3QgZnJvbSBhIGdpdmVuCnBhY2thZ2UgaW50byBhIG5ldyBkaXJlY3RvcnkuIElmIGV4ZWN1dGVkIHdpdGhvdXQgcGFyYW1zIGFuZCBpbiBhIGRpcmVjdG9yeQp3aXRoIGEgY29tcG9zZXIuanNvbiBmaWxlIGl0IGluc3RhbGxzIHRoZSBwYWNrYWdlcyBmb3IgdGhlIGN1cnJlbnQgcHJvamVjdC4KCllvdSBjYW4gdXNlIHRoaXMgY29tbWFuZCB0byBib290c3RyYXAgbmV3IHByb2plY3RzIG9yIHNldHVwIGEgY2xlYW4KdmVyc2lvbi1jb250cm9sbGVkIGluc3RhbGxhdGlvbiBmb3IgZGV2ZWxvcGVycyBvZiB5b3VyIHByb2plY3QuCgo8aW5mbz5waHAgY29tcG9zZXIucGhhciBjcmVhdGUtcHJvamVjdCB2ZW5kb3IvcHJvamVjdCB0YXJnZXQtZGlyZWN0b3J5IFt2ZXJzaW9uXTwvaW5mbz4KCllvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSB2ZXJzaW9uIHdpdGggdGhlIHBhY2thZ2UgbmFtZSB1c2luZyA9IG9yIDogYXMgc2VwYXJhdG9yLgoKVG8gaW5zdGFsbCB1bnN0YWJsZSBwYWNrYWdlcywgZWl0aGVyIHNwZWNpZnkgdGhlIHZlcnNpb24geW91IHdhbnQsIG9yIHVzZSB0aGUKLS1zdGFiaWxpdHk9ZGV2ICh3aGVyZSBkZXYgY2FuIGJlIG9uZSBvZiBSQywgYmV0YSwgYWxwaGEgb3IgZGV2KS4KClRvIHNldHVwIGEgZGV2ZWxvcGVyIHdvcmthYmxlIHZlcnNpb24geW91IHNob3VsZCBjcmVhdGUgdGhlIHByb2plY3QgdXNpbmcgdGhlIHNvdXJjZQpjb250cm9sbGVkIGNvZGUgYnkgYXBwZW5kaW5nIHRoZSA8aW5mbz4nLS1wcmVmZXItc291cmNlJzwvaW5mbz4gZmxhZy4KClRvIGluc3RhbGwgYSBwYWNrYWdlIGZyb20gYW5vdGhlciByZXBvc2l0b3J5IHRoYW4gdGhlIGRlZmF1bHQgb25lIHlvdQpjYW4gcGFzcyB0aGUgPGluZm8+Jy0tcmVwb3NpdG9yeS11cmw9aHR0cDovL215cmVwb3NpdG9yeS5vcmcnPC9pbmZvPiBmbGFnLgoKRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiRjb25maWcgPSBGYWN0b3J5OjpjcmVhdGVDb25maWcoKTsKCiRwcmVmZXJTb3VyY2UgPSBmYWxzZTsKJHByZWZlckRpc3QgPSBmYWxzZTsKJHRoaXMtPnVwZGF0ZVByZWZlcnJlZE9wdGlvbnMoJGNvbmZpZywgJGlucHV0LCAkcHJlZmVyU291cmNlLCAkcHJlZmVyRGlzdCk7CgppZiAoJGlucHV0LT5nZXRPcHRpb24oJ25vLWN1c3RvbS1pbnN0YWxsZXJzJykpIHsKJG91dHB1dC0+d3JpdGVsbignPHdhcm5pbmc+WW91IGFyZSB1c2luZyB0aGUgZGVwcmVjYXRlZCBvcHRpb24gIm5vLWN1c3RvbS1pbnN0YWxsZXJzIi4gVXNlICJuby1wbHVnaW5zIiBpbnN0ZWFkLjwvd2FybmluZz4nKTsKJGlucHV0LT5zZXRPcHRpb24oJ25vLXBsdWdpbnMnLCB0cnVlKTsKfQoKcmV0dXJuICR0aGlzLT5pbnN0YWxsUHJvamVjdCgKJHRoaXMtPmdldElPKCksCiRjb25maWcsCiRpbnB1dC0+Z2V0QXJndW1lbnQoJ3BhY2thZ2UnKSwKJGlucHV0LT5nZXRBcmd1bWVudCgnZGlyZWN0b3J5JyksCiRpbnB1dC0+Z2V0QXJndW1lbnQoJ3ZlcnNpb24nKSwKJGlucHV0LT5nZXRPcHRpb24oJ3N0YWJpbGl0eScpLAokcHJlZmVyU291cmNlLAokcHJlZmVyRGlzdCwKISRpbnB1dC0+Z2V0T3B0aW9uKCduby1kZXYnKSwKJGlucHV0LT5nZXRPcHRpb24oJ3JlcG9zaXRvcnktdXJsJyksCiRpbnB1dC0+Z2V0T3B0aW9uKCduby1wbHVnaW5zJyksCiRpbnB1dC0+Z2V0T3B0aW9uKCduby1zY3JpcHRzJyksCiRpbnB1dC0+Z2V0T3B0aW9uKCdrZWVwLXZjcycpLAokaW5wdXQtPmdldE9wdGlvbignbm8tcHJvZ3Jlc3MnKSwKJGlucHV0LT5nZXRPcHRpb24oJ25vLWluc3RhbGwnKSwKJGlucHV0Cik7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsUHJvamVjdChJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCAkcGFja2FnZU5hbWUsICRkaXJlY3RvcnkgPSBudWxsLCAkcGFja2FnZVZlcnNpb24gPSBudWxsLCAkc3RhYmlsaXR5ID0gJ3N0YWJsZScsICRwcmVmZXJTb3VyY2UgPSBmYWxzZSwgJHByZWZlckRpc3QgPSBmYWxzZSwgJGluc3RhbGxEZXZQYWNrYWdlcyA9IGZhbHNlLCAkcmVwb3NpdG9yeVVybCA9IG51bGwsICRkaXNhYmxlUGx1Z2lucyA9IGZhbHNlLCAkbm9TY3JpcHRzID0gZmFsc2UsICRrZWVwVmNzID0gZmFsc2UsICRub1Byb2dyZXNzID0gZmFsc2UsICRub0luc3RhbGwgPSBmYWxzZSwgSW5wdXRJbnRlcmZhY2UgJGlucHV0KQp7CiRvbGRDd2QgPSBnZXRjd2QoKTsKCmlmICgkcGFja2FnZU5hbWUgIT09IG51bGwpIHsKJGluc3RhbGxlZEZyb21WY3MgPSAkdGhpcy0+aW5zdGFsbFJvb3RQYWNrYWdlKCRpbywgJGNvbmZpZywgJHBhY2thZ2VOYW1lLCAkZGlyZWN0b3J5LCAkcGFja2FnZVZlcnNpb24sICRzdGFiaWxpdHksICRwcmVmZXJTb3VyY2UsICRwcmVmZXJEaXN0LCAkaW5zdGFsbERldlBhY2thZ2VzLCAkcmVwb3NpdG9yeVVybCwgJGRpc2FibGVQbHVnaW5zLCAkbm9TY3JpcHRzLCAka2VlcFZjcywgJG5vUHJvZ3Jlc3MpOwp9IGVsc2UgewokaW5zdGFsbGVkRnJvbVZjcyA9IGZhbHNlOwp9CgokY29tcG9zZXIgPSBGYWN0b3J5OjpjcmVhdGUoJGlvLCBudWxsLCAkZGlzYWJsZVBsdWdpbnMpOwokZnMgPSBuZXcgRmlsZXN5c3RlbSgpOwoKaWYgKCRub1NjcmlwdHMgPT09IGZhbHNlKSB7CgogJGNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2hDb21tYW5kRXZlbnQoU2NyaXB0RXZlbnRzOjpQT1NUX1JPT1RfUEFDS0FHRV9JTlNUQUxMLCAkaW5zdGFsbERldlBhY2thZ2VzKTsKfQoKJHJvb3RQYWNrYWdlQ29uZmlnID0gJGNvbXBvc2VyLT5nZXRDb25maWcoKTsKJHRoaXMtPnVwZGF0ZVByZWZlcnJlZE9wdGlvbnMoJHJvb3RQYWNrYWdlQ29uZmlnLCAkaW5wdXQsICRwcmVmZXJTb3VyY2UsICRwcmVmZXJEaXN0KTsKCgogaWYgKCRub0luc3RhbGwgPT09IGZhbHNlKSB7CiRpbnN0YWxsZXIgPSBJbnN0YWxsZXI6OmNyZWF0ZSgkaW8sICRjb21wb3Nlcik7CiRpbnN0YWxsZXItPnNldFByZWZlclNvdXJjZSgkcHJlZmVyU291cmNlKQotPnNldFByZWZlckRpc3QoJHByZWZlckRpc3QpCi0+c2V0RGV2TW9kZSgkaW5zdGFsbERldlBhY2thZ2VzKQotPnNldFJ1blNjcmlwdHMoICEgJG5vU2NyaXB0cyk7CgppZiAoJGRpc2FibGVQbHVnaW5zKSB7CiRpbnN0YWxsZXItPmRpc2FibGVQbHVnaW5zKCk7Cn0KCiRzdGF0dXMgPSAkaW5zdGFsbGVyLT5ydW4oKTsKaWYgKDAgIT09ICRzdGF0dXMpIHsKcmV0dXJuICRzdGF0dXM7Cn0KfQoKJGhhc1ZjcyA9ICRpbnN0YWxsZWRGcm9tVmNzOwppZiAoISRrZWVwVmNzICYmICRpbnN0YWxsZWRGcm9tVmNzCiYmICgKISRpby0+aXNJbnRlcmFjdGl2ZSgpCnx8ICRpby0+YXNrQ29uZmlybWF0aW9uKCc8aW5mbz5EbyB5b3Ugd2FudCB0byByZW1vdmUgdGhlIGV4aXN0aW5nIFZDUyAoLmdpdCwgLnN2bi4uKSBoaXN0b3J5PzwvaW5mbz4gWzxjb21tZW50PlksbjwvY29tbWVudD5dPyAnLCB0cnVlKQopCikgewokZmluZGVyID0gbmV3IEZpbmRlcigpOwokZmluZGVyLT5kZXB0aCgwKS0+ZGlyZWN0b3JpZXMoKS0+aW4oZ2V0Y3dkKCkpLT5pZ25vcmVWQ1MoZmFsc2UpLT5pZ25vcmVEb3RGaWxlcyhmYWxzZSk7CmZvcmVhY2ggKGFycmF5KCcuc3ZuJywgJ19zdm4nLCAnQ1ZTJywgJ19kYXJjcycsICcuYXJjaC1wYXJhbXMnLCAnLm1vbm90b25lJywgJy5ienInLCAnLmdpdCcsICcuaGcnKSBhcyAkdmNzTmFtZSkgewokZmluZGVyLT5uYW1lKCR2Y3NOYW1lKTsKfQoKdHJ5IHsKJGRpcnMgPSBpdGVyYXRvcl90b19hcnJheSgkZmluZGVyKTsKdW5zZXQoJGZpbmRlcik7CmZvcmVhY2ggKCRkaXJzIGFzICRkaXIpIHsKaWYgKCEkZnMtPnJlbW92ZURpcmVjdG9yeSgkZGlyKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCByZW1vdmUgJy4kZGlyKTsKfQp9Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKJGlvLT53cml0ZSgnPGVycm9yPkFuIGVycm9yIG9jY3VycmVkIHdoaWxlIHJlbW92aW5nIHRoZSBWQ1MgbWV0YWRhdGE6ICcuJGUtPmdldE1lc3NhZ2UoKS4nPC9lcnJvcj4nKTsKfQoKJGhhc1ZjcyA9IGZhbHNlOwp9CgoKIGlmICghJGhhc1ZjcykgewokcGFja2FnZSA9ICRjb21wb3Nlci0+Z2V0UGFja2FnZSgpOwokY29uZmlnU291cmNlID0gbmV3IEpzb25Db25maWdTb3VyY2UobmV3IEpzb25GaWxlKCdjb21wb3Nlci5qc29uJykpOwpmb3JlYWNoIChCYXNlUGFja2FnZTo6JHN1cHBvcnRlZExpbmtUeXBlcyBhcyAkdHlwZSA9PiAkbWV0YSkgewpmb3JlYWNoICgkcGFja2FnZS0+eydnZXQnLiRtZXRhWydtZXRob2QnXX0oKSBhcyAkbGluaykgewppZiAoJGxpbmstPmdldFByZXR0eUNvbnN0cmFpbnQoKSA9PT0gJ3NlbGYudmVyc2lvbicpIHsKJGNvbmZpZ1NvdXJjZS0+YWRkTGluaygkdHlwZSwgJGxpbmstPmdldFRhcmdldCgpLCAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpKTsKfQp9Cn0KfQoKaWYgKCRub1NjcmlwdHMgPT09IGZhbHNlKSB7CgogJGNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2hDb21tYW5kRXZlbnQoU2NyaXB0RXZlbnRzOjpQT1NUX0NSRUFURV9QUk9KRUNUX0NNRCwgJGluc3RhbGxEZXZQYWNrYWdlcyk7Cn0KCmNoZGlyKCRvbGRDd2QpOwokdmVuZG9yQ29tcG9zZXJEaXIgPSAkY29tcG9zZXItPmdldENvbmZpZygpLT5nZXQoJ3ZlbmRvci1kaXInKS4nL2NvbXBvc2VyJzsKaWYgKGlzX2RpcigkdmVuZG9yQ29tcG9zZXJEaXIpICYmICRmcy0+aXNEaXJFbXB0eSgkdmVuZG9yQ29tcG9zZXJEaXIpKSB7CkBybWRpcigkdmVuZG9yQ29tcG9zZXJEaXIpOwokdmVuZG9yRGlyID0gJGNvbXBvc2VyLT5nZXRDb25maWcoKS0+Z2V0KCd2ZW5kb3ItZGlyJyk7CmlmIChpc19kaXIoJHZlbmRvckRpcikgJiYgJGZzLT5pc0RpckVtcHR5KCR2ZW5kb3JEaXIpKSB7CkBybWRpcigkdmVuZG9yRGlyKTsKfQp9CgpyZXR1cm4gMDsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluc3RhbGxSb290UGFja2FnZShJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCAkcGFja2FnZU5hbWUsICRkaXJlY3RvcnkgPSBudWxsLCAkcGFja2FnZVZlcnNpb24gPSBudWxsLCAkc3RhYmlsaXR5ID0gJ3N0YWJsZScsICRwcmVmZXJTb3VyY2UgPSBmYWxzZSwgJHByZWZlckRpc3QgPSBmYWxzZSwgJGluc3RhbGxEZXZQYWNrYWdlcyA9IGZhbHNlLCAkcmVwb3NpdG9yeVVybCA9IG51bGwsICRkaXNhYmxlUGx1Z2lucyA9IGZhbHNlLCAkbm9TY3JpcHRzID0gZmFsc2UsICRrZWVwVmNzID0gZmFsc2UsICRub1Byb2dyZXNzID0gZmFsc2UpCnsKaWYgKG51bGwgPT09ICRyZXBvc2l0b3J5VXJsKSB7CiRzb3VyY2VSZXBvID0gbmV3IENvbXBvc2l0ZVJlcG9zaXRvcnkoRmFjdG9yeTo6Y3JlYXRlRGVmYXVsdFJlcG9zaXRvcmllcygkaW8sICRjb25maWcpKTsKfSBlbHNlaWYgKCJqc29uIiA9PT0gcGF0aGluZm8oJHJlcG9zaXRvcnlVcmwsIFBBVEhJTkZPX0VYVEVOU0lPTikpIHsKJHNvdXJjZVJlcG8gPSBuZXcgRmlsZXN5c3RlbVJlcG9zaXRvcnkobmV3IEpzb25GaWxlKCRyZXBvc2l0b3J5VXJsLCBuZXcgUmVtb3RlRmlsZXN5c3RlbSgkaW8sICRjb25maWcpKSk7Cn0gZWxzZWlmICgwID09PSBzdHJwb3MoJHJlcG9zaXRvcnlVcmwsICdodHRwJykpIHsKJHNvdXJjZVJlcG8gPSBuZXcgQ29tcG9zZXJSZXBvc2l0b3J5KGFycmF5KCd1cmwnID0+ICRyZXBvc2l0b3J5VXJsKSwgJGlvLCAkY29uZmlnKTsKfSBlbHNlIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkludmFsaWQgcmVwb3NpdG9yeSB1cmwgZ2l2ZW4uIEhhcyB0byBiZSBhIC5qc29uIGZpbGUgb3IgYW4gaHR0cCB1cmwuIik7Cn0KCiRwYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwokY2FuZGlkYXRlcyA9IGFycmF5KCk7CiRyZXF1aXJlbWVudHMgPSAkcGFyc2VyLT5wYXJzZU5hbWVWZXJzaW9uUGFpcnMoYXJyYXkoJHBhY2thZ2VOYW1lKSk7CiRuYW1lID0gc3RydG9sb3dlcigkcmVxdWlyZW1lbnRzWzBdWyduYW1lJ10pOwppZiAoISRwYWNrYWdlVmVyc2lvbiAmJiBpc3NldCgkcmVxdWlyZW1lbnRzWzBdWyd2ZXJzaW9uJ10pKSB7CiRwYWNrYWdlVmVyc2lvbiA9ICRyZXF1aXJlbWVudHNbMF1bJ3ZlcnNpb24nXTsKfQoKaWYgKG51bGwgPT09ICRzdGFiaWxpdHkpIHsKaWYgKHByZWdfbWF0Y2goJ3teW14sXHNdKj9AKCcuaW1wbG9kZSgnfCcsIGFycmF5X2tleXMoQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllcykpLicpJH1pJywgJHBhY2thZ2VWZXJzaW9uLCAkbWF0Y2gpKSB7CiRzdGFiaWxpdHkgPSAkbWF0Y2hbMV07Cn0gZWxzZSB7CiRzdGFiaWxpdHkgPSBWZXJzaW9uUGFyc2VyOjpwYXJzZVN0YWJpbGl0eSgkcGFja2FnZVZlcnNpb24pOwp9Cn0KCiRzdGFiaWxpdHkgPSBWZXJzaW9uUGFyc2VyOjpub3JtYWxpemVTdGFiaWxpdHkoJHN0YWJpbGl0eSk7CgppZiAoIWlzc2V0KEJhc2VQYWNrYWdlOjokc3RhYmlsaXRpZXNbJHN0YWJpbGl0eV0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdJbnZhbGlkIHN0YWJpbGl0eSBwcm92aWRlZCAoJy4kc3RhYmlsaXR5LicpLCBtdXN0IGJlIG9uZSBvZjogJy5pbXBsb2RlKCcsICcsIGFycmF5X2tleXMoQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllcykpKTsKfQoKJHBvb2wgPSBuZXcgUG9vbCgkc3RhYmlsaXR5KTsKJHBvb2wtPmFkZFJlcG9zaXRvcnkoJHNvdXJjZVJlcG8pOwoKJGNvbnN0cmFpbnQgPSAkcGFja2FnZVZlcnNpb24gPyAkcGFyc2VyLT5wYXJzZUNvbnN0cmFpbnRzKCRwYWNrYWdlVmVyc2lvbikgOiBudWxsOwokY2FuZGlkYXRlcyA9ICRwb29sLT53aGF0UHJvdmlkZXMoJG5hbWUsICRjb25zdHJhaW50KTsKZm9yZWFjaCAoJGNhbmRpZGF0ZXMgYXMgJGtleSA9PiAkY2FuZGlkYXRlKSB7CmlmICgkY2FuZGlkYXRlLT5nZXROYW1lKCkgIT09ICRuYW1lKSB7CnVuc2V0KCRjYW5kaWRhdGVzWyRrZXldKTsKfQp9CgppZiAoISRjYW5kaWRhdGVzKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJDb3VsZCBub3QgZmluZCBwYWNrYWdlICRuYW1lIiAuICgkcGFja2FnZVZlcnNpb24gPyAiIHdpdGggdmVyc2lvbiAkcGFja2FnZVZlcnNpb24uIiA6ICIgd2l0aCBzdGFiaWxpdHkgJHN0YWJpbGl0eS4iKSk7Cn0KCmlmIChudWxsID09PSAkZGlyZWN0b3J5KSB7CiRwYXJ0cyA9IGV4cGxvZGUoIi8iLCAkbmFtZSwgMik7CiRkaXJlY3RvcnkgPSBnZXRjd2QoKSAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBhcnJheV9wb3AoJHBhcnRzKTsKfQoKCiAkcGFja2FnZSA9IHJlc2V0KCRjYW5kaWRhdGVzKTsKZm9yZWFjaCAoJGNhbmRpZGF0ZXMgYXMgJGNhbmRpZGF0ZSkgewppZiAodmVyc2lvbl9jb21wYXJlKCRwYWNrYWdlLT5nZXRWZXJzaW9uKCksICRjYW5kaWRhdGUtPmdldFZlcnNpb24oKSwgJzwnKSkgewokcGFja2FnZSA9ICRjYW5kaWRhdGU7Cn0KfQp1bnNldCgkY2FuZGlkYXRlcyk7CgokaW8tPndyaXRlKCc8aW5mbz5JbnN0YWxsaW5nICcgLiAkcGFja2FnZS0+Z2V0TmFtZSgpIC4gJyAoJyAuIFZlcnNpb25QYXJzZXI6OmZvcm1hdFZlcnNpb24oJHBhY2thZ2UsIGZhbHNlKSAuICcpPC9pbmZvPicpOwoKaWYgKCRkaXNhYmxlUGx1Z2lucykgewokaW8tPndyaXRlKCc8aW5mbz5QbHVnaW5zIGhhdmUgYmVlbiBkaXNhYmxlZC48L2luZm8+Jyk7Cn0KCmlmICgwID09PSBzdHJwb3MoJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSwgJ2Rldi0nKSAmJiBpbl9hcnJheSgkcGFja2FnZS0+Z2V0U291cmNlVHlwZSgpLCBhcnJheSgnZ2l0JywgJ2hnJykpKSB7CiRwYWNrYWdlLT5zZXRTb3VyY2VSZWZlcmVuY2Uoc3Vic3RyKCRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCksIDQpKTsKfQoKJGRtID0gJHRoaXMtPmNyZWF0ZURvd25sb2FkTWFuYWdlcigkaW8sICRjb25maWcpOwokZG0tPnNldFByZWZlclNvdXJjZSgkcHJlZmVyU291cmNlKQotPnNldFByZWZlckRpc3QoJHByZWZlckRpc3QpCi0+c2V0T3V0cHV0UHJvZ3Jlc3MoISRub1Byb2dyZXNzKTsKCiRwcm9qZWN0SW5zdGFsbGVyID0gbmV3IFByb2plY3RJbnN0YWxsZXIoJGRpcmVjdG9yeSwgJGRtKTsKJGltID0gJHRoaXMtPmNyZWF0ZUluc3RhbGxhdGlvbk1hbmFnZXIoKTsKJGltLT5hZGRJbnN0YWxsZXIoJHByb2plY3RJbnN0YWxsZXIpOwokaW0tPmluc3RhbGwobmV3IEluc3RhbGxlZEZpbGVzeXN0ZW1SZXBvc2l0b3J5KG5ldyBKc29uRmlsZSgncGhwOi8vbWVtb3J5JykpLCBuZXcgSW5zdGFsbE9wZXJhdGlvbigkcGFja2FnZSkpOwokaW0tPm5vdGlmeUluc3RhbGxzKCk7CgokaW5zdGFsbGVkRnJvbVZjcyA9ICdzb3VyY2UnID09PSAkcGFja2FnZS0+Z2V0SW5zdGFsbGF0aW9uU291cmNlKCk7CgokaW8tPndyaXRlKCc8aW5mbz5DcmVhdGVkIHByb2plY3QgaW4gJyAuICRkaXJlY3RvcnkgLiAnPC9pbmZvPicpOwpjaGRpcigkZGlyZWN0b3J5KTsKCnB1dGVudignQ09NUE9TRVJfUk9PVF9WRVJTSU9OPScuJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSk7CgpyZXR1cm4gJGluc3RhbGxlZEZyb21WY3M7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVEb3dubG9hZE1hbmFnZXIoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZykKewokZmFjdG9yeSA9IG5ldyBGYWN0b3J5KCk7CgpyZXR1cm4gJGZhY3RvcnktPmNyZWF0ZURvd25sb2FkTWFuYWdlcigkaW8sICRjb25maWcpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlSW5zdGFsbGF0aW9uTWFuYWdlcigpCnsKcmV0dXJuIG5ldyBJbnN0YWxsYXRpb25NYW5hZ2VyKCk7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHVwZGF0ZVByZWZlcnJlZE9wdGlvbnMoQ29uZmlnICRjb25maWcsIElucHV0SW50ZXJmYWNlICRpbnB1dCwgJiRwcmVmZXJTb3VyY2UsICYkcHJlZmVyRGlzdCkKewpzd2l0Y2ggKCRjb25maWctPmdldCgncHJlZmVycmVkLWluc3RhbGwnKSkgewpjYXNlICdzb3VyY2UnOgokcHJlZmVyU291cmNlID0gdHJ1ZTsKJHByZWZlckRpc3QgPSBmYWxzZTsKYnJlYWs7CmNhc2UgJ2Rpc3QnOgokcHJlZmVyU291cmNlID0gZmFsc2U7CiRwcmVmZXJEaXN0ID0gdHJ1ZTsKYnJlYWs7CmNhc2UgJ2F1dG8nOgpkZWZhdWx0OgoKIGJyZWFrOwp9CgppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3ByZWZlci1zb3VyY2UnKSB8fCAkaW5wdXQtPmdldE9wdGlvbigncHJlZmVyLWRpc3QnKSkgewokcHJlZmVyU291cmNlID0gJGlucHV0LT5nZXRPcHRpb24oJ3ByZWZlci1zb3VyY2UnKTsKJHByZWZlckRpc3QgPSAkaW5wdXQtPmdldE9wdGlvbigncHJlZmVyLWRpc3QnKTsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKY2xhc3MgQWJvdXRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnYWJvdXQnKQotPnNldERlc2NyaXB0aW9uKCdTaG9ydCBpbmZvcm1hdGlvbiBhYm91dCBDb21wb3NlcicpCi0+c2V0SGVscCg8PDxFT1QKPGluZm8+cGhwIGNvbXBvc2VyLnBoYXIgYWJvdXQ8L2luZm8+CkVPVAopCjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokb3V0cHV0LT53cml0ZWxuKDw8PEVPVAo8aW5mbz5Db21wb3NlciAtIFBhY2thZ2UgTWFuYWdlbWVudCBmb3IgUEhQPC9pbmZvPgo8Y29tbWVudD5Db21wb3NlciBpcyBhIGRlcGVuZGVuY3kgbWFuYWdlciB0cmFja2luZyBsb2NhbCBkZXBlbmRlbmNpZXMgb2YgeW91ciBwcm9qZWN0cyBhbmQgbGlicmFyaWVzLgpTZWUgaHR0cDovL2dldGNvbXBvc2VyLm9yZy8gZm9yIG1vcmUgaW5mb3JtYXRpb24uPC9jb21tZW50PgpFT1QKKTsKCn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxQb29sOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXERlZmF1bHRQb2xpY3k7CnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgQ29tcG9zZXJcUGFja2FnZVxDb21wbGV0ZVBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFBsdWdpblxDb21tYW5kRXZlbnQ7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luRXZlbnRzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XEFycmF5UmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcQ29tcG9zaXRlUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcQ29tcG9zZXJSZXBvc2l0b3J5Owp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQbGF0Zm9ybVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFJlcG9zaXRvcnlJbnRlcmZhY2U7CgoKCgoKY2xhc3MgU2hvd0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCnsKcHJvdGVjdGVkICR2ZXJzaW9uUGFyc2VyOwoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbmZpZ3VyZSgpCnsKJHRoaXMKLT5zZXROYW1lKCdzaG93JykKLT5zZXREZXNjcmlwdGlvbignU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBwYWNrYWdlcycpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0QXJndW1lbnQoJ3BhY2thZ2UnLCBJbnB1dEFyZ3VtZW50OjpPUFRJT05BTCwgJ1BhY2thZ2UgdG8gaW5zcGVjdCcpLApuZXcgSW5wdXRBcmd1bWVudCgndmVyc2lvbicsIElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnVmVyc2lvbiBvciB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gaW5zcGVjdCcpLApuZXcgSW5wdXRPcHRpb24oJ2luc3RhbGxlZCcsICdpJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdMaXN0IGluc3RhbGxlZCBwYWNrYWdlcyBvbmx5JyksCm5ldyBJbnB1dE9wdGlvbigncGxhdGZvcm0nLCAncCcsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnTGlzdCBwbGF0Zm9ybSBwYWNrYWdlcyBvbmx5JyksCm5ldyBJbnB1dE9wdGlvbignYXZhaWxhYmxlJywgJ2EnLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0xpc3QgYXZhaWxhYmxlIHBhY2thZ2VzIG9ubHknKSwKbmV3IElucHV0T3B0aW9uKCdzZWxmJywgJ3MnLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1Nob3cgdGhlIHJvb3QgcGFja2FnZSBpbmZvcm1hdGlvbicpLApuZXcgSW5wdXRPcHRpb24oJ25hbWUtb25seScsICdOJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdMaXN0IHBhY2thZ2UgbmFtZXMgb25seScpLApuZXcgSW5wdXRPcHRpb24oJ3BhdGgnLCAnUCcsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnU2hvdyBwYWNrYWdlIHBhdGhzJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIHNob3cgY29tbWFuZCBkaXNwbGF5cyBkZXRhaWxlZCBpbmZvcm1hdGlvbiBhYm91dCBhIHBhY2thZ2UsIG9yCmxpc3RzIGFsbCBwYWNrYWdlcyBhdmFpbGFibGUuCgpFT1QKKQo7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKJHRoaXMtPnZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcjsKCgogJHBsYXRmb3JtUmVwbyA9IG5ldyBQbGF0Zm9ybVJlcG9zaXRvcnk7CgokY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIoZmFsc2UpOwppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3NlbGYnKSkgewokcGFja2FnZSA9ICR0aGlzLT5nZXRDb21wb3NlcigpLT5nZXRQYWNrYWdlKCk7CiRyZXBvcyA9ICRpbnN0YWxsZWRSZXBvID0gbmV3IEFycmF5UmVwb3NpdG9yeShhcnJheSgkcGFja2FnZSkpOwp9IGVsc2VpZiAoJGlucHV0LT5nZXRPcHRpb24oJ3BsYXRmb3JtJykpIHsKJHJlcG9zID0gJGluc3RhbGxlZFJlcG8gPSAkcGxhdGZvcm1SZXBvOwp9IGVsc2VpZiAoJGlucHV0LT5nZXRPcHRpb24oJ2luc3RhbGxlZCcpKSB7CiRyZXBvcyA9ICRpbnN0YWxsZWRSZXBvID0gJHRoaXMtPmdldENvbXBvc2VyKCktPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldExvY2FsUmVwb3NpdG9yeSgpOwp9IGVsc2VpZiAoJGlucHV0LT5nZXRPcHRpb24oJ2F2YWlsYWJsZScpKSB7CiRpbnN0YWxsZWRSZXBvID0gJHBsYXRmb3JtUmVwbzsKaWYgKCRjb21wb3NlcikgewokcmVwb3MgPSBuZXcgQ29tcG9zaXRlUmVwb3NpdG9yeSgkY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldFJlcG9zaXRvcmllcygpKTsKfSBlbHNlIHsKJGRlZmF1bHRSZXBvcyA9IEZhY3Rvcnk6OmNyZWF0ZURlZmF1bHRSZXBvc2l0b3JpZXMoJHRoaXMtPmdldElPKCkpOwokcmVwb3MgPSBuZXcgQ29tcG9zaXRlUmVwb3NpdG9yeSgkZGVmYXVsdFJlcG9zKTsKJG91dHB1dC0+d3JpdGVsbignTm8gY29tcG9zZXIuanNvbiBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHNob3dpbmcgYXZhaWxhYmxlIHBhY2thZ2VzIGZyb20gJyAuIGltcGxvZGUoJywgJywgYXJyYXlfa2V5cygkZGVmYXVsdFJlcG9zKSkpOwp9Cn0gZWxzZWlmICgkY29tcG9zZXIpIHsKJGxvY2FsUmVwbyA9ICRjb21wb3Nlci0+Z2V0UmVwb3NpdG9yeU1hbmFnZXIoKS0+Z2V0TG9jYWxSZXBvc2l0b3J5KCk7CiRpbnN0YWxsZWRSZXBvID0gbmV3IENvbXBvc2l0ZVJlcG9zaXRvcnkoYXJyYXkoJGxvY2FsUmVwbywgJHBsYXRmb3JtUmVwbykpOwokcmVwb3MgPSBuZXcgQ29tcG9zaXRlUmVwb3NpdG9yeShhcnJheV9tZXJnZShhcnJheSgkaW5zdGFsbGVkUmVwbyksICRjb21wb3Nlci0+Z2V0UmVwb3NpdG9yeU1hbmFnZXIoKS0+Z2V0UmVwb3NpdG9yaWVzKCkpKTsKfSBlbHNlIHsKJGRlZmF1bHRSZXBvcyA9IEZhY3Rvcnk6OmNyZWF0ZURlZmF1bHRSZXBvc2l0b3JpZXMoJHRoaXMtPmdldElPKCkpOwokb3V0cHV0LT53cml0ZWxuKCdObyBjb21wb3Nlci5qc29uIGZvdW5kIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeSwgc2hvd2luZyBhdmFpbGFibGUgcGFja2FnZXMgZnJvbSAnIC4gaW1wbG9kZSgnLCAnLCBhcnJheV9rZXlzKCRkZWZhdWx0UmVwb3MpKSk7CiRpbnN0YWxsZWRSZXBvID0gJHBsYXRmb3JtUmVwbzsKJHJlcG9zID0gbmV3IENvbXBvc2l0ZVJlcG9zaXRvcnkoYXJyYXlfbWVyZ2UoYXJyYXkoJGluc3RhbGxlZFJlcG8pLCAkZGVmYXVsdFJlcG9zKSk7Cn0KCmlmICgkY29tcG9zZXIpIHsKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnc2hvdycsICRpbnB1dCwgJG91dHB1dCk7CiRjb21wb3Nlci0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmRpc3BhdGNoKCRjb21tYW5kRXZlbnQtPmdldE5hbWUoKSwgJGNvbW1hbmRFdmVudCk7Cn0KCgogaWYgKCRpbnB1dC0+Z2V0QXJndW1lbnQoJ3BhY2thZ2UnKSB8fCAhZW1wdHkoJHBhY2thZ2UpKSB7CiR2ZXJzaW9ucyA9IGFycmF5KCk7CmlmIChlbXB0eSgkcGFja2FnZSkpIHsKbGlzdCgkcGFja2FnZSwgJHZlcnNpb25zKSA9ICR0aGlzLT5nZXRQYWNrYWdlKCRpbnN0YWxsZWRSZXBvLCAkcmVwb3MsICRpbnB1dC0+Z2V0QXJndW1lbnQoJ3BhY2thZ2UnKSwgJGlucHV0LT5nZXRBcmd1bWVudCgndmVyc2lvbicpKTsKCmlmICghJHBhY2thZ2UpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhY2thZ2UgJy4kaW5wdXQtPmdldEFyZ3VtZW50KCdwYWNrYWdlJykuJyBub3QgZm91bmQnKTsKfQp9IGVsc2UgewokdmVyc2lvbnMgPSBhcnJheSgkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpID0+ICRwYWNrYWdlLT5nZXRWZXJzaW9uKCkpOwp9CgokdGhpcy0+cHJpbnRNZXRhKCRpbnB1dCwgJG91dHB1dCwgJHBhY2thZ2UsICR2ZXJzaW9ucywgJGluc3RhbGxlZFJlcG8sICRyZXBvcyk7CiR0aGlzLT5wcmludExpbmtzKCRpbnB1dCwgJG91dHB1dCwgJHBhY2thZ2UsICdyZXF1aXJlcycpOwokdGhpcy0+cHJpbnRMaW5rcygkaW5wdXQsICRvdXRwdXQsICRwYWNrYWdlLCAnZGV2UmVxdWlyZXMnLCAncmVxdWlyZXMgKGRldiknKTsKaWYgKCRwYWNrYWdlLT5nZXRTdWdnZXN0cygpKSB7CiRvdXRwdXQtPndyaXRlbG4oIlxuPGluZm8+c3VnZ2VzdHM8L2luZm8+Iik7CmZvcmVhY2ggKCRwYWNrYWdlLT5nZXRTdWdnZXN0cygpIGFzICRzdWdnZXN0ZWQgPT4gJHJlYXNvbikgewokb3V0cHV0LT53cml0ZWxuKCRzdWdnZXN0ZWQgLiAnIDxjb21tZW50PicgLiAkcmVhc29uIC4gJzwvY29tbWVudD4nKTsKfQp9CiR0aGlzLT5wcmludExpbmtzKCRpbnB1dCwgJG91dHB1dCwgJHBhY2thZ2UsICdwcm92aWRlcycpOwokdGhpcy0+cHJpbnRMaW5rcygkaW5wdXQsICRvdXRwdXQsICRwYWNrYWdlLCAnY29uZmxpY3RzJyk7CiR0aGlzLT5wcmludExpbmtzKCRpbnB1dCwgJG91dHB1dCwgJHBhY2thZ2UsICdyZXBsYWNlcycpOwoKcmV0dXJuOwp9CgoKICRwYWNrYWdlcyA9IGFycmF5KCk7CgppZiAoJHJlcG9zIGluc3RhbmNlb2YgQ29tcG9zaXRlUmVwb3NpdG9yeSkgewokcmVwb3MgPSAkcmVwb3MtPmdldFJlcG9zaXRvcmllcygpOwp9IGVsc2VpZiAoIWlzX2FycmF5KCRyZXBvcykpIHsKJHJlcG9zID0gYXJyYXkoJHJlcG9zKTsKfQoKZm9yZWFjaCAoJHJlcG9zIGFzICRyZXBvKSB7CmlmICgkcmVwbyA9PT0gJHBsYXRmb3JtUmVwbykgewokdHlwZSA9ICc8aW5mbz5wbGF0Zm9ybTwvaW5mbz46JzsKfSBlbHNlaWYgKAokcmVwbyA9PT0gJGluc3RhbGxlZFJlcG8KfHwgKCRpbnN0YWxsZWRSZXBvIGluc3RhbmNlb2YgQ29tcG9zaXRlUmVwb3NpdG9yeSAmJiBpbl9hcnJheSgkcmVwbywgJGluc3RhbGxlZFJlcG8tPmdldFJlcG9zaXRvcmllcygpLCB0cnVlKSkKKSB7CiR0eXBlID0gJzxpbmZvPmluc3RhbGxlZDwvaW5mbz46JzsKfSBlbHNlIHsKJHR5cGUgPSAnPGNvbW1lbnQ+YXZhaWxhYmxlPC9jb21tZW50PjonOwp9CmlmICgkcmVwbyBpbnN0YW5jZW9mIENvbXBvc2VyUmVwb3NpdG9yeSAmJiAkcmVwby0+aGFzUHJvdmlkZXJzKCkpIHsKZm9yZWFjaCAoJHJlcG8tPmdldFByb3ZpZGVyTmFtZXMoKSBhcyAkbmFtZSkgewokcGFja2FnZXNbJHR5cGVdWyRuYW1lXSA9ICRuYW1lOwp9Cn0gZWxzZSB7CmZvcmVhY2ggKCRyZXBvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CmlmICghaXNzZXQoJHBhY2thZ2VzWyR0eXBlXVskcGFja2FnZS0+Z2V0TmFtZSgpXSkKfHwgIWlzX29iamVjdCgkcGFja2FnZXNbJHR5cGVdWyRwYWNrYWdlLT5nZXROYW1lKCldKQp8fCB2ZXJzaW9uX2NvbXBhcmUoJHBhY2thZ2VzWyR0eXBlXVskcGFja2FnZS0+Z2V0TmFtZSgpXS0+Z2V0VmVyc2lvbigpLCAkcGFja2FnZS0+Z2V0VmVyc2lvbigpLCAnPCcpCikgewokcGFja2FnZXNbJHR5cGVdWyRwYWNrYWdlLT5nZXROYW1lKCldID0gJHBhY2thZ2U7Cn0KfQp9Cn0KCiR0cmVlID0gISRpbnB1dC0+Z2V0T3B0aW9uKCdwbGF0Zm9ybScpICYmICEkaW5wdXQtPmdldE9wdGlvbignaW5zdGFsbGVkJykgJiYgISRpbnB1dC0+Z2V0T3B0aW9uKCdhdmFpbGFibGUnKTsKJGluZGVudCA9ICR0cmVlID8gJyAgJyA6ICcnOwpmb3JlYWNoIChhcnJheSgnPGluZm8+cGxhdGZvcm08L2luZm8+OicgPT4gdHJ1ZSwgJzxjb21tZW50PmF2YWlsYWJsZTwvY29tbWVudD46JyA9PiBmYWxzZSwgJzxpbmZvPmluc3RhbGxlZDwvaW5mbz46JyA9PiB0cnVlKSBhcyAkdHlwZSA9PiAkc2hvd1ZlcnNpb24pIHsKaWYgKGlzc2V0KCRwYWNrYWdlc1skdHlwZV0pKSB7CmlmICgkdHJlZSkgewokb3V0cHV0LT53cml0ZWxuKCR0eXBlKTsKfQprc29ydCgkcGFja2FnZXNbJHR5cGVdKTsKCiRuYW1lTGVuZ3RoID0gJHZlcnNpb25MZW5ndGggPSAwOwpmb3JlYWNoICgkcGFja2FnZXNbJHR5cGVdIGFzICRwYWNrYWdlKSB7CmlmIChpc19vYmplY3QoJHBhY2thZ2UpKSB7CiRuYW1lTGVuZ3RoID0gbWF4KCRuYW1lTGVuZ3RoLCBzdHJsZW4oJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKSkpOwokdmVyc2lvbkxlbmd0aCA9IG1heCgkdmVyc2lvbkxlbmd0aCwgc3RybGVuKCR0aGlzLT52ZXJzaW9uUGFyc2VyLT5mb3JtYXRWZXJzaW9uKCRwYWNrYWdlKSkpOwp9IGVsc2UgewokbmFtZUxlbmd0aCA9IG1heCgkbmFtZUxlbmd0aCwgJHBhY2thZ2UpOwp9Cn0KbGlzdCgkd2lkdGgpID0gJHRoaXMtPmdldEFwcGxpY2F0aW9uKCktPmdldFRlcm1pbmFsRGltZW5zaW9ucygpOwppZiAobnVsbCA9PT0gJHdpZHRoKSB7CgogCiAkd2lkdGggPSBQSFBfSU5UX01BWDsKfQppZiAoZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CiR3aWR0aC0tOwp9Cgokd3JpdGVQYXRoID0gISRpbnB1dC0+Z2V0T3B0aW9uKCduYW1lLW9ubHknKSAmJiAkaW5wdXQtPmdldE9wdGlvbigncGF0aCcpOwokd3JpdGVWZXJzaW9uID0gISRpbnB1dC0+Z2V0T3B0aW9uKCduYW1lLW9ubHknKSAmJiAhJGlucHV0LT5nZXRPcHRpb24oJ3BhdGgnKSAmJiAkc2hvd1ZlcnNpb24gJiYgKCRuYW1lTGVuZ3RoICsgJHZlcnNpb25MZW5ndGggKyAzIDw9ICR3aWR0aCk7CiR3cml0ZURlc2NyaXB0aW9uID0gISRpbnB1dC0+Z2V0T3B0aW9uKCduYW1lLW9ubHknKSAmJiAhJGlucHV0LT5nZXRPcHRpb24oJ3BhdGgnKSAmJiAoJG5hbWVMZW5ndGggKyAoJHNob3dWZXJzaW9uID8gJHZlcnNpb25MZW5ndGggOiAwKSArIDI0IDw9ICR3aWR0aCk7CmZvcmVhY2ggKCRwYWNrYWdlc1skdHlwZV0gYXMgJHBhY2thZ2UpIHsKaWYgKGlzX29iamVjdCgkcGFja2FnZSkpIHsKJG91dHB1dC0+d3JpdGUoJGluZGVudCAuIHN0cl9wYWQoJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKSwgJG5hbWVMZW5ndGgsICcgJyksIGZhbHNlKTsKCmlmICgkd3JpdGVWZXJzaW9uKSB7CiRvdXRwdXQtPndyaXRlKCcgJyAuIHN0cl9wYWQoJHRoaXMtPnZlcnNpb25QYXJzZXItPmZvcm1hdFZlcnNpb24oJHBhY2thZ2UpLCAkdmVyc2lvbkxlbmd0aCwgJyAnKSwgZmFsc2UpOwp9CgppZiAoJHdyaXRlRGVzY3JpcHRpb24pIHsKJGRlc2NyaXB0aW9uID0gc3RydG9rKCRwYWNrYWdlLT5nZXREZXNjcmlwdGlvbigpLCAiXHJcbiIpOwokcmVtYWluaW5nID0gJHdpZHRoIC0gJG5hbWVMZW5ndGggLSAkdmVyc2lvbkxlbmd0aCAtIDQ7CmlmIChzdHJsZW4oJGRlc2NyaXB0aW9uKSA+ICRyZW1haW5pbmcpIHsKJGRlc2NyaXB0aW9uID0gc3Vic3RyKCRkZXNjcmlwdGlvbiwgMCwgJHJlbWFpbmluZyAtIDMpIC4gJy4uLic7Cn0KJG91dHB1dC0+d3JpdGUoJyAnIC4gJGRlc2NyaXB0aW9uKTsKfQoKaWYgKCR3cml0ZVBhdGgpIHsKJHBhdGggPSBzdHJ0b2socmVhbHBhdGgoJGNvbXBvc2VyLT5nZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCktPmdldEluc3RhbGxQYXRoKCRwYWNrYWdlKSksICJcclxuIik7CiRvdXRwdXQtPndyaXRlKCcgJyAuICRwYXRoKTsKfQp9IGVsc2Ugewokb3V0cHV0LT53cml0ZSgkaW5kZW50IC4gJHBhY2thZ2UpOwp9CiRvdXRwdXQtPndyaXRlbG4oJycpOwp9CmlmICgkdHJlZSkgewokb3V0cHV0LT53cml0ZWxuKCcnKTsKfQp9Cn0KfQoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRQYWNrYWdlKFJlcG9zaXRvcnlJbnRlcmZhY2UgJGluc3RhbGxlZFJlcG8sIFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zLCAkbmFtZSwgJHZlcnNpb24gPSBudWxsKQp7CiRuYW1lID0gc3RydG9sb3dlcigkbmFtZSk7CiRjb25zdHJhaW50ID0gbnVsbDsKaWYgKCR2ZXJzaW9uKSB7CiRjb25zdHJhaW50ID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPnBhcnNlQ29uc3RyYWludHMoJHZlcnNpb24pOwp9CgokcG9saWN5ID0gbmV3IERlZmF1bHRQb2xpY3koKTsKJHBvb2wgPSBuZXcgUG9vbCgnZGV2Jyk7CiRwb29sLT5hZGRSZXBvc2l0b3J5KCRyZXBvcyk7CgokbWF0Y2hlZFBhY2thZ2UgPSBudWxsOwokdmVyc2lvbnMgPSBhcnJheSgpOwokbWF0Y2hlcyA9ICRwb29sLT53aGF0UHJvdmlkZXMoJG5hbWUsICRjb25zdHJhaW50KTsKZm9yZWFjaCAoJG1hdGNoZXMgYXMgJGluZGV4ID0+ICRwYWNrYWdlKSB7CgogaWYgKCRwYWNrYWdlLT5nZXROYW1lKCkgIT09ICRuYW1lKSB7CnVuc2V0KCRtYXRjaGVzWyRpbmRleF0pOwpjb250aW51ZTsKfQoKCiBpZiAobnVsbCA9PT0gJHZlcnNpb24gJiYgJGluc3RhbGxlZFJlcG8tPmhhc1BhY2thZ2UoJHBhY2thZ2UpKSB7CiRtYXRjaGVkUGFja2FnZSA9ICRwYWNrYWdlOwp9CgokdmVyc2lvbnNbJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKV0gPSAkcGFja2FnZS0+Z2V0VmVyc2lvbigpOwokbWF0Y2hlc1skaW5kZXhdID0gJHBhY2thZ2UtPmdldElkKCk7Cn0KCgogaWYgKCEkbWF0Y2hlZFBhY2thZ2UgJiYgJG1hdGNoZXMgJiYgJHByZWZlcmVkID0gJHBvbGljeS0+c2VsZWN0UHJlZmVyZWRQYWNrYWdlcygkcG9vbCwgYXJyYXkoKSwgJG1hdGNoZXMpKSB7CiRtYXRjaGVkUGFja2FnZSA9ICRwb29sLT5saXRlcmFsVG9QYWNrYWdlKCRwcmVmZXJlZFswXSk7Cn0KCnJldHVybiBhcnJheSgkbWF0Y2hlZFBhY2thZ2UsICR2ZXJzaW9ucyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcmludE1ldGEoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgQ29tcGxldGVQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCBhcnJheSAkdmVyc2lvbnMsIFJlcG9zaXRvcnlJbnRlcmZhY2UgJGluc3RhbGxlZFJlcG8sIFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zKQp7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPm5hbWU8L2luZm8+ICAgICA6ICcgLiAkcGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpKTsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+ZGVzY3JpcC48L2luZm8+IDogJyAuICRwYWNrYWdlLT5nZXREZXNjcmlwdGlvbigpKTsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+a2V5d29yZHM8L2luZm8+IDogJyAuIGpvaW4oJywgJywgJHBhY2thZ2UtPmdldEtleXdvcmRzKCkgPzogYXJyYXkoKSkpOwokdGhpcy0+cHJpbnRWZXJzaW9ucygkaW5wdXQsICRvdXRwdXQsICRwYWNrYWdlLCAkdmVyc2lvbnMsICRpbnN0YWxsZWRSZXBvLCAkcmVwb3MpOwokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz50eXBlPC9pbmZvPiAgICAgOiAnIC4gJHBhY2thZ2UtPmdldFR5cGUoKSk7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPmxpY2Vuc2U8L2luZm8+ICA6ICcgLiBpbXBsb2RlKCcsICcsICRwYWNrYWdlLT5nZXRMaWNlbnNlKCkpKTsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+c291cmNlPC9pbmZvPiAgIDogJyAuIHNwcmludGYoJ1slc10gPGNvbW1lbnQ+JXM8L2NvbW1lbnQ+ICVzJywgJHBhY2thZ2UtPmdldFNvdXJjZVR5cGUoKSwgJHBhY2thZ2UtPmdldFNvdXJjZVVybCgpLCAkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkpKTsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+ZGlzdDwvaW5mbz4gICAgIDogJyAuIHNwcmludGYoJ1slc10gPGNvbW1lbnQ+JXM8L2NvbW1lbnQ+ICVzJywgJHBhY2thZ2UtPmdldERpc3RUeXBlKCksICRwYWNrYWdlLT5nZXREaXN0VXJsKCksICRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkpKTsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+bmFtZXM8L2luZm8+ICAgIDogJyAuIGltcGxvZGUoJywgJywgJHBhY2thZ2UtPmdldE5hbWVzKCkpKTsKCmlmICgkcGFja2FnZS0+Z2V0U3VwcG9ydCgpKSB7CiRvdXRwdXQtPndyaXRlbG4oIlxuPGluZm8+c3VwcG9ydDwvaW5mbz4iKTsKZm9yZWFjaCAoJHBhY2thZ2UtPmdldFN1cHBvcnQoKSBhcyAkdHlwZSA9PiAkdmFsdWUpIHsKJG91dHB1dC0+d3JpdGVsbignPGNvbW1lbnQ+JyAuICR0eXBlIC4gJzwvY29tbWVudD4gOiAnLiR2YWx1ZSk7Cn0KfQoKaWYgKCRwYWNrYWdlLT5nZXRBdXRvbG9hZCgpKSB7CiRvdXRwdXQtPndyaXRlbG4oIlxuPGluZm8+YXV0b2xvYWQ8L2luZm8+Iik7CmZvcmVhY2ggKCRwYWNrYWdlLT5nZXRBdXRvbG9hZCgpIGFzICR0eXBlID0+ICRhdXRvbG9hZHMpIHsKJG91dHB1dC0+d3JpdGVsbignPGNvbW1lbnQ+JyAuICR0eXBlIC4gJzwvY29tbWVudD4nKTsKCmlmICgkdHlwZSA9PT0gJ3Bzci0wJykgewpmb3JlYWNoICgkYXV0b2xvYWRzIGFzICRuYW1lID0+ICRwYXRoKSB7CiRvdXRwdXQtPndyaXRlbG4oKCRuYW1lID86ICcqJykgLiAnID0+ICcgLiAoaXNfYXJyYXkoJHBhdGgpID8gaW1wbG9kZSgnLCAnLCAkcGF0aCkgOiAoJHBhdGggPzogJy4nKSkpOwp9Cn0gZWxzZWlmICgkdHlwZSA9PT0gJ3Bzci00Jykgewpmb3JlYWNoICgkYXV0b2xvYWRzIGFzICRuYW1lID0+ICRwYXRoKSB7CiRvdXRwdXQtPndyaXRlbG4oKCRuYW1lID86ICcqJykgLiAnID0+ICcgLiAoaXNfYXJyYXkoJHBhdGgpID8gaW1wbG9kZSgnLCAnLCAkcGF0aCkgOiAoJHBhdGggPzogJy4nKSkpOwp9Cn0gZWxzZWlmICgkdHlwZSA9PT0gJ2NsYXNzbWFwJykgewokb3V0cHV0LT53cml0ZWxuKGltcGxvZGUoJywgJywgJGF1dG9sb2FkcykpOwp9Cn0KaWYgKCRwYWNrYWdlLT5nZXRJbmNsdWRlUGF0aHMoKSkgewokb3V0cHV0LT53cml0ZWxuKCc8Y29tbWVudD5pbmNsdWRlLXBhdGg8L2NvbW1lbnQ+Jyk7CiRvdXRwdXQtPndyaXRlbG4oaW1wbG9kZSgnLCAnLCAkcGFja2FnZS0+Z2V0SW5jbHVkZVBhdGhzKCkpKTsKfQp9Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcmludFZlcnNpb25zKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsIENvbXBsZXRlUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgYXJyYXkgJHZlcnNpb25zLCBSZXBvc2l0b3J5SW50ZXJmYWNlICRpbnN0YWxsZWRSZXBvLCBSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvcykKewp1YXNvcnQoJHZlcnNpb25zLCAndmVyc2lvbl9jb21wYXJlJyk7CiR2ZXJzaW9ucyA9IGFycmF5X2tleXMoYXJyYXlfcmV2ZXJzZSgkdmVyc2lvbnMpKTsKCgogaWYgKCRpbnN0YWxsZWRSZXBvLT5oYXNQYWNrYWdlKCRwYWNrYWdlKSkgewokaW5zdGFsbGVkVmVyc2lvbiA9ICRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCk7CiRrZXkgPSBhcnJheV9zZWFyY2goJGluc3RhbGxlZFZlcnNpb24sICR2ZXJzaW9ucyk7CmlmIChmYWxzZSAhPT0gJGtleSkgewokdmVyc2lvbnNbJGtleV0gPSAnPGluZm8+KiAnIC4gJGluc3RhbGxlZFZlcnNpb24gLiAnPC9pbmZvPic7Cn0KfQoKJHZlcnNpb25zID0gaW1wbG9kZSgnLCAnLCAkdmVyc2lvbnMpOwoKJG91dHB1dC0+d3JpdGVsbignPGluZm8+dmVyc2lvbnM8L2luZm8+IDogJyAuICR2ZXJzaW9ucyk7Cn0KCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcmludExpbmtzKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsIENvbXBsZXRlUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJGxpbmtUeXBlLCAkdGl0bGUgPSBudWxsKQp7CiR0aXRsZSA9ICR0aXRsZSA/OiAkbGlua1R5cGU7CmlmICgkbGlua3MgPSAkcGFja2FnZS0+eydnZXQnLnVjZmlyc3QoJGxpbmtUeXBlKX0oKSkgewokb3V0cHV0LT53cml0ZWxuKCJcbjxpbmZvPiIgLiAkdGl0bGUgLiAiPC9pbmZvPiIpOwoKZm9yZWFjaCAoJGxpbmtzIGFzICRsaW5rKSB7CiRvdXRwdXQtPndyaXRlbG4oJGxpbmstPmdldFRhcmdldCgpIC4gJyA8Y29tbWVudD4nIC4gJGxpbmstPmdldFByZXR0eUNvbnN0cmFpbnQoKSAuICc8L2NvbW1lbnQ+Jyk7Cn0KfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBDb21wb3NlclxJbnN0YWxsZXI7CnVzZSBDb21wb3NlclxQbHVnaW5cQ29tbWFuZEV2ZW50Owp1c2UgQ29tcG9zZXJcUGx1Z2luXFBsdWdpbkV2ZW50czsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCmNsYXNzIFVwZGF0ZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCnsKcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbmZpZ3VyZSgpCnsKJHRoaXMKLT5zZXROYW1lKCd1cGRhdGUnKQotPnNldERlc2NyaXB0aW9uKCdVcGRhdGVzIHlvdXIgZGVwZW5kZW5jaWVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBhY2NvcmRpbmcgdG8gY29tcG9zZXIuanNvbiwgYW5kIHVwZGF0ZXMgdGhlIGNvbXBvc2VyLmxvY2sgZmlsZS4nKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dEFyZ3VtZW50KCdwYWNrYWdlcycsIElucHV0QXJndW1lbnQ6OklTX0FSUkFZIHwgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICdQYWNrYWdlcyB0aGF0IHNob3VsZCBiZSB1cGRhdGVkLCBpZiBub3QgcHJvdmlkZWQgYWxsIHBhY2thZ2VzIGFyZS4nKSwKbmV3IElucHV0T3B0aW9uKCdwcmVmZXItc291cmNlJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdGb3JjZXMgaW5zdGFsbGF0aW9uIGZyb20gcGFja2FnZSBzb3VyY2VzIHdoZW4gcG9zc2libGUsIGluY2x1ZGluZyBWQ1MgaW5mb3JtYXRpb24uJyksCm5ldyBJbnB1dE9wdGlvbigncHJlZmVyLWRpc3QnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0ZvcmNlcyBpbnN0YWxsYXRpb24gZnJvbSBwYWNrYWdlIGRpc3QgZXZlbiBmb3IgZGV2IHZlcnNpb25zLicpLApuZXcgSW5wdXRPcHRpb24oJ2RyeS1ydW4nLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ091dHB1dHMgdGhlIG9wZXJhdGlvbnMgYnV0IHdpbGwgbm90IGV4ZWN1dGUgYW55dGhpbmcgKGltcGxpY2l0bHkgZW5hYmxlcyAtLXZlcmJvc2UpLicpLApuZXcgSW5wdXRPcHRpb24oJ2RldicsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRW5hYmxlcyBpbnN0YWxsYXRpb24gb2YgcmVxdWlyZS1kZXYgcGFja2FnZXMgKGVuYWJsZWQgYnkgZGVmYXVsdCwgb25seSBwcmVzZW50IGZvciBCQykuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tZGV2JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEaXNhYmxlcyBpbnN0YWxsYXRpb24gb2YgcmVxdWlyZS1kZXYgcGFja2FnZXMuJyksCm5ldyBJbnB1dE9wdGlvbignbG9jaycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnT25seSB1cGRhdGVzIHRoZSBsb2NrIGZpbGUgaGFzaCB0byBzdXBwcmVzcyB3YXJuaW5nIGFib3V0IHRoZSBsb2NrIGZpbGUgYmVpbmcgb3V0IG9mIGRhdGUuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tcGx1Z2lucycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzYWJsZXMgYWxsIHBsdWdpbnMuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tY3VzdG9tLWluc3RhbGxlcnMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0RFUFJFQ0FURUQ6IFVzZSBuby1wbHVnaW5zIGluc3RlYWQuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tc2NyaXB0cycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnU2tpcHMgdGhlIGV4ZWN1dGlvbiBvZiBhbGwgc2NyaXB0cyBkZWZpbmVkIGluIGNvbXBvc2VyLmpzb24gZmlsZS4nKSwKbmV3IElucHV0T3B0aW9uKCduby1wcm9ncmVzcycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRG8gbm90IG91dHB1dCBkb3dubG9hZCBwcm9ncmVzcy4nKSwKbmV3IElucHV0T3B0aW9uKCd3aXRoLWRlcGVuZGVuY2llcycsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnQWRkIGFsc28gYWxsIGRlcGVuZGVuY2llcyBvZiB3aGl0ZWxpc3RlZCBwYWNrYWdlcyB0byB0aGUgd2hpdGVsaXN0LicpLApuZXcgSW5wdXRPcHRpb24oJ3ZlcmJvc2UnLCAndnx2dnx2dnYnLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1Nob3dzIG1vcmUgZGV0YWlscyBpbmNsdWRpbmcgbmV3IGNvbW1pdHMgcHVsbGVkIGluIHdoZW4gdXBkYXRpbmcgcGFja2FnZXMuJyksCm5ldyBJbnB1dE9wdGlvbignb3B0aW1pemUtYXV0b2xvYWRlcicsICdvJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdPcHRpbWl6ZSBhdXRvbG9hZGVyIGR1cmluZyBhdXRvbG9hZGVyIGR1bXAuJykKKSkKLT5zZXRIZWxwKDw8PEVPVApUaGUgPGluZm8+dXBkYXRlPC9pbmZvPiBjb21tYW5kIHJlYWRzIHRoZSBjb21wb3Nlci5qc29uIGZpbGUgZnJvbSB0aGUKY3VycmVudCBkaXJlY3RvcnksIHByb2Nlc3NlcyBpdCwgYW5kIHVwZGF0ZXMsIHJlbW92ZXMgb3IgaW5zdGFsbHMgYWxsIHRoZQpkZXBlbmRlbmNpZXMuCgo8aW5mbz5waHAgY29tcG9zZXIucGhhciB1cGRhdGU8L2luZm8+CgpUbyBsaW1pdCB0aGUgdXBkYXRlIG9wZXJhdGlvbiB0byBhIGZldyBwYWNrYWdlcywgeW91IGNhbiBsaXN0IHRoZSBwYWNrYWdlKHMpCnlvdSB3YW50IHRvIHVwZGF0ZSBhcyBzdWNoOgoKPGluZm8+cGhwIGNvbXBvc2VyLnBoYXIgdXBkYXRlIHZlbmRvci9wYWNrYWdlMSBmb28vbXlwYWNrYWdlIFsuLi5dPC9pbmZvPgpFT1QKKQo7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCduby1jdXN0b20taW5zdGFsbGVycycpKSB7CiRvdXRwdXQtPndyaXRlbG4oJzx3YXJuaW5nPllvdSBhcmUgdXNpbmcgdGhlIGRlcHJlY2F0ZWQgb3B0aW9uICJuby1jdXN0b20taW5zdGFsbGVycyIuIFVzZSAibm8tcGx1Z2lucyIgaW5zdGVhZC48L3dhcm5pbmc+Jyk7CiRpbnB1dC0+c2V0T3B0aW9uKCduby1wbHVnaW5zJywgdHJ1ZSk7Cn0KCiRjb21wb3NlciA9ICR0aGlzLT5nZXRDb21wb3Nlcih0cnVlLCAkaW5wdXQtPmdldE9wdGlvbignbm8tcGx1Z2lucycpKTsKJGNvbXBvc2VyLT5nZXREb3dubG9hZE1hbmFnZXIoKS0+c2V0T3V0cHV0UHJvZ3Jlc3MoISRpbnB1dC0+Z2V0T3B0aW9uKCduby1wcm9ncmVzcycpKTsKJGlvID0gJHRoaXMtPmdldElPKCk7CgokY29tbWFuZEV2ZW50ID0gbmV3IENvbW1hbmRFdmVudChQbHVnaW5FdmVudHM6OkNPTU1BTkQsICd1cGRhdGUnLCAkaW5wdXQsICRvdXRwdXQpOwokY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaCgkY29tbWFuZEV2ZW50LT5nZXROYW1lKCksICRjb21tYW5kRXZlbnQpOwoKJGluc3RhbGwgPSBJbnN0YWxsZXI6OmNyZWF0ZSgkaW8sICRjb21wb3Nlcik7CgokcHJlZmVyU291cmNlID0gZmFsc2U7CiRwcmVmZXJEaXN0ID0gZmFsc2U7CgokY29uZmlnID0gJGNvbXBvc2VyLT5nZXRDb25maWcoKTsKCnN3aXRjaCAoJGNvbmZpZy0+Z2V0KCdwcmVmZXJyZWQtaW5zdGFsbCcpKSB7CmNhc2UgJ3NvdXJjZSc6CiRwcmVmZXJTb3VyY2UgPSB0cnVlOwpicmVhazsKY2FzZSAnZGlzdCc6CiRwcmVmZXJEaXN0ID0gdHJ1ZTsKYnJlYWs7CmNhc2UgJ2F1dG8nOgpkZWZhdWx0OgoKIGJyZWFrOwp9CmlmICgkaW5wdXQtPmdldE9wdGlvbigncHJlZmVyLXNvdXJjZScpIHx8ICRpbnB1dC0+Z2V0T3B0aW9uKCdwcmVmZXItZGlzdCcpKSB7CiRwcmVmZXJTb3VyY2UgPSAkaW5wdXQtPmdldE9wdGlvbigncHJlZmVyLXNvdXJjZScpOwokcHJlZmVyRGlzdCA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdwcmVmZXItZGlzdCcpOwp9Cgokb3B0aW1pemUgPSAkaW5wdXQtPmdldE9wdGlvbignb3B0aW1pemUtYXV0b2xvYWRlcicpIHx8ICRjb25maWctPmdldCgnb3B0aW1pemUtYXV0b2xvYWRlcicpOwoKJGluc3RhbGwKLT5zZXREcnlSdW4oJGlucHV0LT5nZXRPcHRpb24oJ2RyeS1ydW4nKSkKLT5zZXRWZXJib3NlKCRpbnB1dC0+Z2V0T3B0aW9uKCd2ZXJib3NlJykpCi0+c2V0UHJlZmVyU291cmNlKCRwcmVmZXJTb3VyY2UpCi0+c2V0UHJlZmVyRGlzdCgkcHJlZmVyRGlzdCkKLT5zZXREZXZNb2RlKCEkaW5wdXQtPmdldE9wdGlvbignbm8tZGV2JykpCi0+c2V0UnVuU2NyaXB0cyghJGlucHV0LT5nZXRPcHRpb24oJ25vLXNjcmlwdHMnKSkKLT5zZXRPcHRpbWl6ZUF1dG9sb2FkZXIoJG9wdGltaXplKQotPnNldFVwZGF0ZSh0cnVlKQotPnNldFVwZGF0ZVdoaXRlbGlzdCgkaW5wdXQtPmdldE9wdGlvbignbG9jaycpID8gYXJyYXkoJ2xvY2snKSA6ICRpbnB1dC0+Z2V0QXJndW1lbnQoJ3BhY2thZ2VzJykpCi0+c2V0V2hpdGVsaXN0RGVwZW5kZW5jaWVzKCRpbnB1dC0+Z2V0T3B0aW9uKCd3aXRoLWRlcGVuZGVuY2llcycpKQo7CgppZiAoJGlucHV0LT5nZXRPcHRpb24oJ25vLXBsdWdpbnMnKSkgewokaW5zdGFsbC0+ZGlzYWJsZVBsdWdpbnMoKTsKfQoKcmV0dXJuICRpbnN0YWxsLT5ydW4oKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxDb25maWdcSnNvbkNvbmZpZ1NvdXJjZTsKdXNlIENvbXBvc2VyXEZhY3Rvcnk7CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwoKCgoKCmNsYXNzIENvbmZpZ0NvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCnsKCgoKcHJvdGVjdGVkICRjb25maWc7CgoKCgpwcm90ZWN0ZWQgJGNvbmZpZ0ZpbGU7CgoKCgpwcm90ZWN0ZWQgJGNvbmZpZ1NvdXJjZTsKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnY29uZmlnJykKLT5zZXREZXNjcmlwdGlvbignU2V0IGNvbmZpZyBvcHRpb25zJykKLT5zZXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRPcHRpb24oJ2dsb2JhbCcsICdnJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdBcHBseSBjb21tYW5kIHRvIHRoZSBnbG9iYWwgY29uZmlnIGZpbGUnKSwKbmV3IElucHV0T3B0aW9uKCdlZGl0b3InLCAnZScsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnT3BlbiBlZGl0b3InKSwKbmV3IElucHV0T3B0aW9uKCd1bnNldCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnVW5zZXQgdGhlIGdpdmVuIHNldHRpbmcta2V5JyksCm5ldyBJbnB1dE9wdGlvbignbGlzdCcsICdsJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdMaXN0IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MnKSwKbmV3IElucHV0T3B0aW9uKCdmaWxlJywgJ2YnLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdJZiB5b3Ugd2FudCB0byBjaG9vc2UgYSBkaWZmZXJlbnQgY29tcG9zZXIuanNvbiBvciBjb25maWcuanNvbicsICdjb21wb3Nlci5qc29uJyksCm5ldyBJbnB1dEFyZ3VtZW50KCdzZXR0aW5nLWtleScsIG51bGwsICdTZXR0aW5nIGtleScpLApuZXcgSW5wdXRBcmd1bWVudCgnc2V0dGluZy12YWx1ZScsIElucHV0QXJndW1lbnQ6OklTX0FSUkFZLCAnU2V0dGluZyB2YWx1ZScpLAopKQotPnNldEhlbHAoPDw8RU9UClRoaXMgY29tbWFuZCBhbGxvd3MgeW91IHRvIGVkaXQgc29tZSBiYXNpYyBjb21wb3NlciBzZXR0aW5ncyBpbiBlaXRoZXIgdGhlCmxvY2FsIGNvbXBvc2VyLmpzb24gZmlsZSBvciB0aGUgZ2xvYmFsIGNvbmZpZy5qc29uIGZpbGUuCgpUbyBlZGl0IHRoZSBnbG9iYWwgY29uZmlnLmpzb24gZmlsZToKCiAgICA8Y29tbWVudD4lY29tbWFuZC5mdWxsX25hbWUlIC0tZ2xvYmFsPC9jb21tZW50PgoKVG8gYWRkIGEgcmVwb3NpdG9yeToKCiAgICA8Y29tbWVudD4lY29tbWFuZC5mdWxsX25hbWUlIHJlcG9zaXRvcmllcy5mb28gdmNzIGh0dHA6Ly9iYXIuY29tPC9jb21tZW50PgoKWW91IGNhbiBhZGQgYSByZXBvc2l0b3J5IHRvIHRoZSBnbG9iYWwgY29uZmlnLmpzb24gZmlsZSBieSBwYXNzaW5nIGluIHRoZQo8aW5mbz4tLWdsb2JhbDwvaW5mbz4gb3B0aW9uLgoKVG8gZWRpdCB0aGUgZmlsZSBpbiBhbiBleHRlcm5hbCBlZGl0b3I6CgogICAgPGNvbW1lbnQ+JWNvbW1hbmQuZnVsbF9uYW1lJSAtLWVkaXRvcjwvY29tbWVudD4KClRvIGNob29zZSB5b3VyIGVkaXRvciB5b3UgY2FuIHNldCB0aGUgIkVESVRPUiIgZW52IHZhcmlhYmxlLgoKVG8gZ2V0IGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIHZhbHVlcyBpbiB0aGUgZmlsZToKCiAgICA8Y29tbWVudD4lY29tbWFuZC5mdWxsX25hbWUlIC0tbGlzdDwvY29tbWVudD4KCllvdSBjYW4gYWx3YXlzIHBhc3MgbW9yZSB0aGFuIG9uZSBvcHRpb24uIEFzIGFuIGV4YW1wbGUsIGlmIHlvdSB3YW50IHRvIGVkaXQgdGhlCmdsb2JhbCBjb25maWcuanNvbiBmaWxlLgoKICAgIDxjb21tZW50PiVjb21tYW5kLmZ1bGxfbmFtZSUgLS1lZGl0b3IgLS1nbG9iYWw8L2NvbW1lbnQ+CkVPVAopCjsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXRpYWxpemUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewppZiAoJGlucHV0LT5nZXRPcHRpb24oJ2dsb2JhbCcpICYmICdjb21wb3Nlci5qc29uJyAhPT0gJGlucHV0LT5nZXRPcHRpb24oJ2ZpbGUnKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJy0tZmlsZSBhbmQgLS1nbG9iYWwgY2FuIG5vdCBiZSBjb21iaW5lZCcpOwp9CgokdGhpcy0+Y29uZmlnID0gRmFjdG9yeTo6Y3JlYXRlQ29uZmlnKCk7CgoKIAogJGNvbmZpZ0ZpbGUgPSAkaW5wdXQtPmdldE9wdGlvbignZ2xvYmFsJykKPyAoJHRoaXMtPmNvbmZpZy0+Z2V0KCdob21lJykgLiAnL2NvbmZpZy5qc29uJykKOiAkaW5wdXQtPmdldE9wdGlvbignZmlsZScpOwoKJHRoaXMtPmNvbmZpZ0ZpbGUgPSBuZXcgSnNvbkZpbGUoJGNvbmZpZ0ZpbGUpOwokdGhpcy0+Y29uZmlnU291cmNlID0gbmV3IEpzb25Db25maWdTb3VyY2UoJHRoaXMtPmNvbmZpZ0ZpbGUpOwoKCiBpZiAoJGlucHV0LT5nZXRPcHRpb24oJ2dsb2JhbCcpICYmICEkdGhpcy0+Y29uZmlnRmlsZS0+ZXhpc3RzKCkpIHsKdG91Y2goJHRoaXMtPmNvbmZpZ0ZpbGUtPmdldFBhdGgoKSk7CiR0aGlzLT5jb25maWdGaWxlLT53cml0ZShhcnJheSgnY29uZmlnJyA9PiBuZXcgXEFycmF5T2JqZWN0KSk7CkBjaG1vZCgkdGhpcy0+Y29uZmlnRmlsZS0+Z2V0UGF0aCgpLCAwNjAwKTsKfQoKaWYgKCEkdGhpcy0+Y29uZmlnRmlsZS0+ZXhpc3RzKCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdObyBjb21wb3Nlci5qc29uIGZvdW5kIGluIHRoZSBjdXJyZW50IGRpcmVjdG9yeScpOwp9Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKCiBpZiAoJGlucHV0LT5nZXRPcHRpb24oJ2VkaXRvcicpKSB7CiRlZGl0b3IgPSBlc2NhcGVzaGVsbGNtZChnZXRlbnYoJ0VESVRPUicpKTsKaWYgKCEkZWRpdG9yKSB7CmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKJGVkaXRvciA9ICdub3RlcGFkJzsKfSBlbHNlIHsKZm9yZWFjaCAoYXJyYXkoJ3ZpbScsICd2aScsICduYW5vJywgJ3BpY28nLCAnZWQnKSBhcyAkY2FuZGlkYXRlKSB7CmlmIChleGVjKCd3aGljaCAnLiRjYW5kaWRhdGUpKSB7CiRlZGl0b3IgPSAkY2FuZGlkYXRlOwpicmVhazsKfQp9Cn0KfQoKc3lzdGVtKCRlZGl0b3IgLiAnICcgLiAkdGhpcy0+Y29uZmlnRmlsZS0+Z2V0UGF0aCgpIC4gKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSA/ICcnOiAnID4gYHR0eWAnKSk7CgpyZXR1cm4gMDsKfQoKaWYgKCEkaW5wdXQtPmdldE9wdGlvbignZ2xvYmFsJykpIHsKJHRoaXMtPmNvbmZpZy0+bWVyZ2UoJHRoaXMtPmNvbmZpZ0ZpbGUtPnJlYWQoKSk7Cn0KCgogaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCdsaXN0JykpIHsKJHRoaXMtPmxpc3RDb25maWd1cmF0aW9uKCR0aGlzLT5jb25maWctPmFsbCgpLCAkdGhpcy0+Y29uZmlnLT5yYXcoKSwgJG91dHB1dCk7CgpyZXR1cm4gMDsKfQoKJHNldHRpbmdLZXkgPSAkaW5wdXQtPmdldEFyZ3VtZW50KCdzZXR0aW5nLWtleScpOwppZiAoISRzZXR0aW5nS2V5KSB7CnJldHVybiAwOwp9CgoKIGlmIChhcnJheSgpICE9PSAkaW5wdXQtPmdldEFyZ3VtZW50KCdzZXR0aW5nLXZhbHVlJykgJiYgJGlucHV0LT5nZXRPcHRpb24oJ3Vuc2V0JykpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3UgY2FuIG5vdCBjb21iaW5lIGEgc2V0dGluZyB2YWx1ZSB3aXRoIC0tdW5zZXQnKTsKfQoKCiBpZiAoYXJyYXkoKSA9PT0gJGlucHV0LT5nZXRBcmd1bWVudCgnc2V0dGluZy12YWx1ZScpICYmICEkaW5wdXQtPmdldE9wdGlvbigndW5zZXQnKSkgewokZGF0YSA9ICR0aGlzLT5jb25maWctPmFsbCgpOwppZiAocHJlZ19tYXRjaCgnL15yZXBvcz8oPzppdG9yaWVzKT8oPzpcLiguKykpPy8nLCAkc2V0dGluZ0tleSwgJG1hdGNoZXMpKSB7CmlmIChlbXB0eSgkbWF0Y2hlc1sxXSkpIHsKJHZhbHVlID0gaXNzZXQoJGRhdGFbJ3JlcG9zaXRvcmllcyddKSA/ICRkYXRhWydyZXBvc2l0b3JpZXMnXSA6IGFycmF5KCk7Cn0gZWxzZSB7CmlmICghaXNzZXQoJGRhdGFbJ3JlcG9zaXRvcmllcyddWyRtYXRjaGVzWzFdXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZXJlIGlzIG5vICcuJG1hdGNoZXNbMV0uJyByZXBvc2l0b3J5IGRlZmluZWQnKTsKfQoKJHZhbHVlID0gJGRhdGFbJ3JlcG9zaXRvcmllcyddWyRtYXRjaGVzWzFdXTsKfQp9IGVsc2VpZiAoc3RycG9zKCRzZXR0aW5nS2V5LCAnLicpKSB7CiRiaXRzID0gZXhwbG9kZSgnLicsICRzZXR0aW5nS2V5KTsKJGRhdGEgPSAkZGF0YVsnY29uZmlnJ107CmZvcmVhY2ggKCRiaXRzIGFzICRiaXQpIHsKaWYgKGlzc2V0KCRkYXRhWyRiaXRdKSkgewokZGF0YSA9ICRkYXRhWyRiaXRdOwp9IGVsc2VpZiAoaXNzZXQoJGRhdGFbaW1wbG9kZSgnLicsICRiaXRzKV0pKSB7CgogJGRhdGEgPSAkZGF0YVtpbXBsb2RlKCcuJywgJGJpdHMpXTsKYnJlYWs7Cn0gZWxzZSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkc2V0dGluZ0tleS4nIGlzIG5vdCBkZWZpbmVkJyk7Cn0KYXJyYXlfc2hpZnQoJGJpdHMpOwp9CgokdmFsdWUgPSAkZGF0YTsKfSBlbHNlaWYgKGlzc2V0KCRkYXRhWydjb25maWcnXVskc2V0dGluZ0tleV0pKSB7CiR2YWx1ZSA9ICRkYXRhWydjb25maWcnXVskc2V0dGluZ0tleV07Cn0gZWxzZSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkc2V0dGluZ0tleS4nIGlzIG5vdCBkZWZpbmVkJyk7Cn0KCmlmIChpc19hcnJheSgkdmFsdWUpKSB7CiR2YWx1ZSA9IGpzb25fZW5jb2RlKCR2YWx1ZSk7Cn0KCiRvdXRwdXQtPndyaXRlbG4oJHZhbHVlKTsKCnJldHVybiAwOwp9CgokdmFsdWVzID0gJGlucHV0LT5nZXRBcmd1bWVudCgnc2V0dGluZy12YWx1ZScpOyAKCgogaWYgKHByZWdfbWF0Y2goJy9ecmVwb3M/KD86aXRvcmllcyk/XC4oLispLycsICRzZXR0aW5nS2V5LCAkbWF0Y2hlcykpIHsKaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCd1bnNldCcpKSB7CnJldHVybiAkdGhpcy0+Y29uZmlnU291cmNlLT5yZW1vdmVSZXBvc2l0b3J5KCRtYXRjaGVzWzFdKTsKfQoKaWYgKDIgIT09IGNvdW50KCR2YWx1ZXMpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91IG11c3QgcGFzcyB0aGUgdHlwZSBhbmQgYSB1cmwuIEV4YW1wbGU6IHBocCBjb21wb3Nlci5waGFyIGNvbmZpZyByZXBvc2l0b3JpZXMuZm9vIHZjcyBodHRwOi8vYmFyLmNvbScpOwp9CgpyZXR1cm4gJHRoaXMtPmNvbmZpZ1NvdXJjZS0+YWRkUmVwb3NpdG9yeSgkbWF0Y2hlc1sxXSwgYXJyYXkoCid0eXBlJyA9PiAkdmFsdWVzWzBdLAondXJsJyA9PiAkdmFsdWVzWzFdLAopKTsKfQoKCiBpZiAocHJlZ19tYXRjaCgnL15naXRodWItb2F1dGhcLiguKykvJywgJHNldHRpbmdLZXksICRtYXRjaGVzKSkgewppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3Vuc2V0JykpIHsKcmV0dXJuICR0aGlzLT5jb25maWdTb3VyY2UtPnJlbW92ZUNvbmZpZ1NldHRpbmcoJ2dpdGh1Yi1vYXV0aC4nLiRtYXRjaGVzWzFdKTsKfQoKaWYgKDEgIT09IGNvdW50KCR2YWx1ZXMpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVG9vIG1hbnkgYXJndW1lbnRzLCBleHBlY3RlZCBvbmx5IG9uZSB0b2tlbicpOwp9CgpyZXR1cm4gJHRoaXMtPmNvbmZpZ1NvdXJjZS0+YWRkQ29uZmlnU2V0dGluZygnZ2l0aHViLW9hdXRoLicuJG1hdGNoZXNbMV0sICR2YWx1ZXNbMF0pOwp9CgokYm9vbGVhblZhbGlkYXRvciA9IGZ1bmN0aW9uICgkdmFsKSB7IHJldHVybiBpbl9hcnJheSgkdmFsLCBhcnJheSgndHJ1ZScsICdmYWxzZScsICcxJywgJzAnKSwgdHJ1ZSk7IH07CiRib29sZWFuTm9ybWFsaXplciA9IGZ1bmN0aW9uICgkdmFsKSB7IHJldHVybiAkdmFsICE9PSAnZmFsc2UnICYmIChib29sKSAkdmFsOyB9OwoKCiAkdW5pcXVlQ29uZmlnVmFsdWVzID0gYXJyYXkoCidwcm9jZXNzLXRpbWVvdXQnID0+IGFycmF5KCdpc19udW1lcmljJywgJ2ludHZhbCcpLAondXNlLWluY2x1ZGUtcGF0aCcgPT4gYXJyYXkoJGJvb2xlYW5WYWxpZGF0b3IsICRib29sZWFuTm9ybWFsaXplciksCidwcmVmZXJyZWQtaW5zdGFsbCcgPT4gYXJyYXkoCmZ1bmN0aW9uICgkdmFsKSB7IHJldHVybiBpbl9hcnJheSgkdmFsLCBhcnJheSgnYXV0bycsICdzb3VyY2UnLCAnZGlzdCcpLCB0cnVlKTsgfSwKZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWw7IH0KKSwKJ25vdGlmeS1vbi1pbnN0YWxsJyA9PiBhcnJheSgkYm9vbGVhblZhbGlkYXRvciwgJGJvb2xlYW5Ob3JtYWxpemVyKSwKJ3ZlbmRvci1kaXInID0+IGFycmF5KCdpc19zdHJpbmcnLCBmdW5jdGlvbiAoJHZhbCkgeyByZXR1cm4gJHZhbDsgfSksCidiaW4tZGlyJyA9PiBhcnJheSgnaXNfc3RyaW5nJywgZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWw7IH0pLAonY2FjaGUtZGlyJyA9PiBhcnJheSgnaXNfc3RyaW5nJywgZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWw7IH0pLAonY2FjaGUtZmlsZXMtZGlyJyA9PiBhcnJheSgnaXNfc3RyaW5nJywgZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWw7IH0pLAonY2FjaGUtcmVwby1kaXInID0+IGFycmF5KCdpc19zdHJpbmcnLCBmdW5jdGlvbiAoJHZhbCkgeyByZXR1cm4gJHZhbDsgfSksCidjYWNoZS12Y3MtZGlyJyA9PiBhcnJheSgnaXNfc3RyaW5nJywgZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWw7IH0pLAonY2FjaGUtdHRsJyA9PiBhcnJheSgnaXNfbnVtZXJpYycsICdpbnR2YWwnKSwKJ2NhY2hlLWZpbGVzLXR0bCcgPT4gYXJyYXkoJ2lzX251bWVyaWMnLCAnaW50dmFsJyksCidjYWNoZS1maWxlcy1tYXhzaXplJyA9PiBhcnJheSgKZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuIHByZWdfbWF0Y2goJy9eXHMqKFswLTkuXSspXHMqKD86KFtrbWddKSg/Omk/Yik/KT9ccyokL2knLCAkdmFsKSA+IDA7IH0sCmZ1bmN0aW9uICgkdmFsKSB7IHJldHVybiAkdmFsOyB9CiksCidkaXNjYXJkLWNoYW5nZXMnID0+IGFycmF5KApmdW5jdGlvbiAoJHZhbCkgeyByZXR1cm4gaW5fYXJyYXkoJHZhbCwgYXJyYXkoJ3N0YXNoJywgJ3RydWUnLCAnZmFsc2UnLCAnMScsICcwJyksIHRydWUpOyB9LApmdW5jdGlvbiAoJHZhbCkgewppZiAoJ3N0YXNoJyA9PT0gJHZhbCkgewpyZXR1cm4gJ3N0YXNoJzsKfQoKcmV0dXJuICR2YWwgIT09ICdmYWxzZScgJiYgKGJvb2wpICR2YWw7Cn0KKSwKJ2F1dG9sb2FkZXItc3VmZml4JyA9PiBhcnJheSgnaXNfc3RyaW5nJywgZnVuY3Rpb24gKCR2YWwpIHsgcmV0dXJuICR2YWwgPT09ICdudWxsJyA/IG51bGwgOiAkdmFsOyB9KSwKJ29wdGltaXplLWF1dG9sb2FkZXInID0+IGFycmF5KCRib29sZWFuVmFsaWRhdG9yLCAkYm9vbGVhbk5vcm1hbGl6ZXIpLAoncHJlcGVuZC1hdXRvbG9hZGVyJyA9PiBhcnJheSgkYm9vbGVhblZhbGlkYXRvciwgJGJvb2xlYW5Ob3JtYWxpemVyKSwKKTsKJG11bHRpQ29uZmlnVmFsdWVzID0gYXJyYXkoCidnaXRodWItcHJvdG9jb2xzJyA9PiBhcnJheSgKZnVuY3Rpb24gKCR2YWxzKSB7CmlmICghaXNfYXJyYXkoJHZhbHMpKSB7CnJldHVybiAnYXJyYXkgZXhwZWN0ZWQnOwp9Cgpmb3JlYWNoICgkdmFscyBhcyAkdmFsKSB7CmlmICghaW5fYXJyYXkoJHZhbCwgYXJyYXkoJ2dpdCcsICdodHRwcycsICdzc2gnKSkpIHsKcmV0dXJuICd2YWxpZCBwcm90b2NvbHMgaW5jbHVkZTogZ2l0LCBodHRwcywgc3NoJzsKfQp9CgpyZXR1cm4gdHJ1ZTsKfSwKZnVuY3Rpb24gKCR2YWxzKSB7CnJldHVybiAkdmFsczsKfQopLAonZ2l0aHViLWRvbWFpbnMnID0+IGFycmF5KApmdW5jdGlvbiAoJHZhbHMpIHsKaWYgKCFpc19hcnJheSgkdmFscykpIHsKcmV0dXJuICdhcnJheSBleHBlY3RlZCc7Cn0KCnJldHVybiB0cnVlOwp9LApmdW5jdGlvbiAoJHZhbHMpIHsKcmV0dXJuICR2YWxzOwp9CiksCik7Cgpmb3JlYWNoICgkdW5pcXVlQ29uZmlnVmFsdWVzIGFzICRuYW1lID0+ICRjYWxsYmFja3MpIHsKaWYgKCRzZXR0aW5nS2V5ID09PSAkbmFtZSkgewppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3Vuc2V0JykpIHsKcmV0dXJuICR0aGlzLT5jb25maWdTb3VyY2UtPnJlbW92ZUNvbmZpZ1NldHRpbmcoJHNldHRpbmdLZXkpOwp9CgpsaXN0KCR2YWxpZGF0b3IsICRub3JtYWxpemVyKSA9ICRjYWxsYmFja3M7CmlmICgxICE9PSBjb3VudCgkdmFsdWVzKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1lvdSBjYW4gb25seSBwYXNzIG9uZSB2YWx1ZS4gRXhhbXBsZTogcGhwIGNvbXBvc2VyLnBoYXIgY29uZmlnIHByb2Nlc3MtdGltZW91dCAzMDAnKTsKfQoKaWYgKHRydWUgIT09ICR2YWxpZGF0aW9uID0gJHZhbGlkYXRvcigkdmFsdWVzWzBdKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZigKJyIlcyIgaXMgYW4gaW52YWxpZCB2YWx1ZScuKCR2YWxpZGF0aW9uID8gJyAoJy4kdmFsaWRhdGlvbi4nKScgOiAnJyksCiR2YWx1ZXNbMF0KKSk7Cn0KCnJldHVybiAkdGhpcy0+Y29uZmlnU291cmNlLT5hZGRDb25maWdTZXR0aW5nKCRzZXR0aW5nS2V5LCAkbm9ybWFsaXplcigkdmFsdWVzWzBdKSk7Cn0KfQoKZm9yZWFjaCAoJG11bHRpQ29uZmlnVmFsdWVzIGFzICRuYW1lID0+ICRjYWxsYmFja3MpIHsKaWYgKCRzZXR0aW5nS2V5ID09PSAkbmFtZSkgewppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3Vuc2V0JykpIHsKcmV0dXJuICR0aGlzLT5jb25maWdTb3VyY2UtPnJlbW92ZUNvbmZpZ1NldHRpbmcoJHNldHRpbmdLZXkpOwp9CgpsaXN0KCR2YWxpZGF0b3IsICRub3JtYWxpemVyKSA9ICRjYWxsYmFja3M7CmlmICh0cnVlICE9PSAkdmFsaWRhdGlvbiA9ICR2YWxpZGF0b3IoJHZhbHVlcykpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoCiclcyBpcyBhbiBpbnZhbGlkIHZhbHVlJy4oJHZhbGlkYXRpb24gPyAnICgnLiR2YWxpZGF0aW9uLicpJyA6ICcnKSwKanNvbl9lbmNvZGUoJHZhbHVlcykKKSk7Cn0KCnJldHVybiAkdGhpcy0+Y29uZmlnU291cmNlLT5hZGRDb25maWdTZXR0aW5nKCRzZXR0aW5nS2V5LCAkbm9ybWFsaXplcigkdmFsdWVzKSk7Cn0KfQoKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1NldHRpbmcgJy4kc2V0dGluZ0tleS4nIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBjb21tYW5kJyk7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGxpc3RDb25maWd1cmF0aW9uKGFycmF5ICRjb250ZW50cywgYXJyYXkgJHJhd0NvbnRlbnRzLCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJGsgPSBudWxsKQp7CiRvcmlnSyA9ICRrOwpmb3JlYWNoICgkY29udGVudHMgYXMgJGtleSA9PiAkdmFsdWUpIHsKaWYgKCRrID09PSBudWxsICYmICFpbl9hcnJheSgka2V5LCBhcnJheSgnY29uZmlnJywgJ3JlcG9zaXRvcmllcycpKSkgewpjb250aW51ZTsKfQoKJHJhd1ZhbCA9IGlzc2V0KCRyYXdDb250ZW50c1ska2V5XSkgPyAkcmF3Q29udGVudHNbJGtleV0gOiBudWxsOwoKaWYgKGlzX2FycmF5KCR2YWx1ZSkgJiYgKCFpc19udW1lcmljKGtleSgkdmFsdWUpKSB8fCAoJGtleSA9PT0gJ3JlcG9zaXRvcmllcycgJiYgbnVsbCA9PT0gJGspKSkgewokayAuPSBwcmVnX3JlcGxhY2UoJ3teY29uZmlnXC59JywgJycsICRrZXkgLiAnLicpOwokdGhpcy0+bGlzdENvbmZpZ3VyYXRpb24oJHZhbHVlLCAkcmF3VmFsLCAkb3V0cHV0LCAkayk7CgppZiAoc3Vic3RyX2NvdW50KCRrLCAnLicpID4gMSkgewokayA9IHN0cl9zcGxpdCgkaywgc3RycnBvcygkaywgJy4nLCAtMikpOwokayA9ICRrWzBdIC4gJy4nOwp9IGVsc2UgewokayA9ICRvcmlnSzsKfQoKY29udGludWU7Cn0KCmlmIChpc19hcnJheSgkdmFsdWUpKSB7CiR2YWx1ZSA9IGFycmF5X21hcChmdW5jdGlvbiAoJHZhbCkgewpyZXR1cm4gaXNfYXJyYXkoJHZhbCkgPyBqc29uX2VuY29kZSgkdmFsKSA6ICR2YWw7Cn0sICR2YWx1ZSk7CgokdmFsdWUgPSAnWycuaW1wbG9kZSgnLCAnLCAkdmFsdWUpLiddJzsKfQoKaWYgKGlzX2Jvb2woJHZhbHVlKSkgewokdmFsdWUgPSB2YXJfZXhwb3J0KCR2YWx1ZSwgdHJ1ZSk7Cn0KCmlmIChpc19zdHJpbmcoJHJhd1ZhbCkgJiYgJHJhd1ZhbCAhPSAkdmFsdWUpIHsKJG91dHB1dC0+d3JpdGVsbignWzxjb21tZW50PicgLiAkayAuICRrZXkgLiAnPC9jb21tZW50Pl0gPGluZm8+JyAuICRyYXdWYWwgLiAnICgnIC4gJHZhbHVlIC4gJyk8L2luZm8+Jyk7Cn0gZWxzZSB7CiRvdXRwdXQtPndyaXRlbG4oJ1s8Y29tbWVudD4nIC4gJGsgLiAka2V5IC4gJzwvY29tbWVudD5dIDxpbmZvPicgLiAkdmFsdWUgLiAnPC9pbmZvPicpOwp9Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgQ29tcG9zZXJcSW5zdGFsbGVyOwp1c2UgQ29tcG9zZXJcUGx1Z2luXENvbW1hbmRFdmVudDsKdXNlIENvbXBvc2VyXFBsdWdpblxQbHVnaW5FdmVudHM7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dE9wdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKCgoKCgoKCmNsYXNzIEluc3RhbGxDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnaW5zdGFsbCcpCi0+c2V0RGVzY3JpcHRpb24oJ0luc3RhbGxzIHRoZSBwcm9qZWN0IGRlcGVuZGVuY2llcyBmcm9tIHRoZSBjb21wb3Nlci5sb2NrIGZpbGUgaWYgcHJlc2VudCwgb3IgZmFsbHMgYmFjayBvbiB0aGUgY29tcG9zZXIuanNvbi4nKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dE9wdGlvbigncHJlZmVyLXNvdXJjZScsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRm9yY2VzIGluc3RhbGxhdGlvbiBmcm9tIHBhY2thZ2Ugc291cmNlcyB3aGVuIHBvc3NpYmxlLCBpbmNsdWRpbmcgVkNTIGluZm9ybWF0aW9uLicpLApuZXcgSW5wdXRPcHRpb24oJ3ByZWZlci1kaXN0JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdGb3JjZXMgaW5zdGFsbGF0aW9uIGZyb20gcGFja2FnZSBkaXN0IGV2ZW4gZm9yIGRldiB2ZXJzaW9ucy4nKSwKbmV3IElucHV0T3B0aW9uKCdkcnktcnVuJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdPdXRwdXRzIHRoZSBvcGVyYXRpb25zIGJ1dCB3aWxsIG5vdCBleGVjdXRlIGFueXRoaW5nIChpbXBsaWNpdGx5IGVuYWJsZXMgLS12ZXJib3NlKS4nKSwKbmV3IElucHV0T3B0aW9uKCdkZXYnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0VuYWJsZXMgaW5zdGFsbGF0aW9uIG9mIHJlcXVpcmUtZGV2IHBhY2thZ2VzIChlbmFibGVkIGJ5IGRlZmF1bHQsIG9ubHkgcHJlc2VudCBmb3IgQkMpLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLWRldicsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzYWJsZXMgaW5zdGFsbGF0aW9uIG9mIHJlcXVpcmUtZGV2IHBhY2thZ2VzLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLXBsdWdpbnMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0Rpc2FibGVzIGFsbCBwbHVnaW5zLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLWN1c3RvbS1pbnN0YWxsZXJzJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdERVBSRUNBVEVEOiBVc2Ugbm8tcGx1Z2lucyBpbnN0ZWFkLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLXNjcmlwdHMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1NraXBzIHRoZSBleGVjdXRpb24gb2YgYWxsIHNjcmlwdHMgZGVmaW5lZCBpbiBjb21wb3Nlci5qc29uIGZpbGUuJyksCm5ldyBJbnB1dE9wdGlvbignbm8tcHJvZ3Jlc3MnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0RvIG5vdCBvdXRwdXQgZG93bmxvYWQgcHJvZ3Jlc3MuJyksCm5ldyBJbnB1dE9wdGlvbigndmVyYm9zZScsICd2fHZ2fHZ2dicsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnU2hvd3MgbW9yZSBkZXRhaWxzIGluY2x1ZGluZyBuZXcgY29tbWl0cyBwdWxsZWQgaW4gd2hlbiB1cGRhdGluZyBwYWNrYWdlcy4nKSwKbmV3IElucHV0T3B0aW9uKCdvcHRpbWl6ZS1hdXRvbG9hZGVyJywgJ28nLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ09wdGltaXplIGF1dG9sb2FkZXIgZHVyaW5nIGF1dG9sb2FkZXIgZHVtcCcpLApuZXcgSW5wdXRBcmd1bWVudCgncGFja2FnZXMnLCBJbnB1dEFyZ3VtZW50OjpJU19BUlJBWSB8IElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnU2hvdWxkIG5vdCBiZSBwcm92aWRlZCwgdXNlIGNvbXBvc2VyIHJlcXVpcmUgaW5zdGVhZCB0byBhZGQgYSBnaXZlbiBwYWNrYWdlIHRvIGNvbXBvc2VyLmpzb24uJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIDxpbmZvPmluc3RhbGw8L2luZm8+IGNvbW1hbmQgcmVhZHMgdGhlIGNvbXBvc2VyLmxvY2sgZmlsZSBmcm9tCnRoZSBjdXJyZW50IGRpcmVjdG9yeSwgcHJvY2Vzc2VzIGl0LCBhbmQgZG93bmxvYWRzIGFuZCBpbnN0YWxscyBhbGwgdGhlCmxpYnJhcmllcyBhbmQgZGVwZW5kZW5jaWVzIG91dGxpbmVkIGluIHRoYXQgZmlsZS4gSWYgdGhlIGZpbGUgZG9lcyBub3QKZXhpc3QgaXQgd2lsbCBsb29rIGZvciBjb21wb3Nlci5qc29uIGFuZCBkbyB0aGUgc2FtZS4KCjxpbmZvPnBocCBjb21wb3Nlci5waGFyIGluc3RhbGw8L2luZm8+CgpFT1QKKQo7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKaWYgKCRhcmdzID0gJGlucHV0LT5nZXRBcmd1bWVudCgncGFja2FnZXMnKSkgewokb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+SW52YWxpZCBhcmd1bWVudCAnLmltcGxvZGUoJyAnLCAkYXJncykuJy4gVXNlICJjb21wb3NlciByZXF1aXJlICcuaW1wbG9kZSgnICcsICRhcmdzKS4nIiBpbnN0ZWFkIHRvIGFkZCBwYWNrYWdlcyB0byB5b3VyIGNvbXBvc2VyLmpzb24uPC9lcnJvcj4nKTsKcmV0dXJuIDE7Cn0KCmlmICgkaW5wdXQtPmdldE9wdGlvbignbm8tY3VzdG9tLWluc3RhbGxlcnMnKSkgewokb3V0cHV0LT53cml0ZWxuKCc8d2FybmluZz5Zb3UgYXJlIHVzaW5nIHRoZSBkZXByZWNhdGVkIG9wdGlvbiAibm8tY3VzdG9tLWluc3RhbGxlcnMiLiBVc2UgIm5vLXBsdWdpbnMiIGluc3RlYWQuPC93YXJuaW5nPicpOwokaW5wdXQtPnNldE9wdGlvbignbm8tcGx1Z2lucycsIHRydWUpOwp9CgokY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIodHJ1ZSwgJGlucHV0LT5nZXRPcHRpb24oJ25vLXBsdWdpbnMnKSk7CiRjb21wb3Nlci0+Z2V0RG93bmxvYWRNYW5hZ2VyKCktPnNldE91dHB1dFByb2dyZXNzKCEkaW5wdXQtPmdldE9wdGlvbignbm8tcHJvZ3Jlc3MnKSk7CiRpbyA9ICR0aGlzLT5nZXRJTygpOwoKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnaW5zdGFsbCcsICRpbnB1dCwgJG91dHB1dCk7CiRjb21wb3Nlci0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmRpc3BhdGNoKCRjb21tYW5kRXZlbnQtPmdldE5hbWUoKSwgJGNvbW1hbmRFdmVudCk7CgokaW5zdGFsbCA9IEluc3RhbGxlcjo6Y3JlYXRlKCRpbywgJGNvbXBvc2VyKTsKCiRwcmVmZXJTb3VyY2UgPSBmYWxzZTsKJHByZWZlckRpc3QgPSBmYWxzZTsKCiRjb25maWcgPSAkY29tcG9zZXItPmdldENvbmZpZygpOwoKc3dpdGNoICgkY29uZmlnLT5nZXQoJ3ByZWZlcnJlZC1pbnN0YWxsJykpIHsKY2FzZSAnc291cmNlJzoKJHByZWZlclNvdXJjZSA9IHRydWU7CmJyZWFrOwpjYXNlICdkaXN0JzoKJHByZWZlckRpc3QgPSB0cnVlOwpicmVhazsKY2FzZSAnYXV0byc6CmRlZmF1bHQ6CgogYnJlYWs7Cn0KaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCdwcmVmZXItc291cmNlJykgfHwgJGlucHV0LT5nZXRPcHRpb24oJ3ByZWZlci1kaXN0JykpIHsKJHByZWZlclNvdXJjZSA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdwcmVmZXItc291cmNlJyk7CiRwcmVmZXJEaXN0ID0gJGlucHV0LT5nZXRPcHRpb24oJ3ByZWZlci1kaXN0Jyk7Cn0KCiRvcHRpbWl6ZSA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdvcHRpbWl6ZS1hdXRvbG9hZGVyJykgfHwgJGNvbmZpZy0+Z2V0KCdvcHRpbWl6ZS1hdXRvbG9hZGVyJyk7CgokaW5zdGFsbAotPnNldERyeVJ1bigkaW5wdXQtPmdldE9wdGlvbignZHJ5LXJ1bicpKQotPnNldFZlcmJvc2UoJGlucHV0LT5nZXRPcHRpb24oJ3ZlcmJvc2UnKSkKLT5zZXRQcmVmZXJTb3VyY2UoJHByZWZlclNvdXJjZSkKLT5zZXRQcmVmZXJEaXN0KCRwcmVmZXJEaXN0KQotPnNldERldk1vZGUoISRpbnB1dC0+Z2V0T3B0aW9uKCduby1kZXYnKSkKLT5zZXRSdW5TY3JpcHRzKCEkaW5wdXQtPmdldE9wdGlvbignbm8tc2NyaXB0cycpKQotPnNldE9wdGltaXplQXV0b2xvYWRlcigkb3B0aW1pemUpCjsKCmlmICgkaW5wdXQtPmdldE9wdGlvbignbm8tcGx1Z2lucycpKSB7CiRpbnN0YWxsLT5kaXNhYmxlUGx1Z2lucygpOwp9CgpyZXR1cm4gJGluc3RhbGwtPnJ1bigpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBDb21wb3NlclxVdGlsXENvbmZpZ1ZhbGlkYXRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgoKCgpjbGFzcyBWYWxpZGF0ZUNvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCnsKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbmZpZ3VyZSgpCnsKJHRoaXMKLT5zZXROYW1lKCd2YWxpZGF0ZScpCi0+c2V0RGVzY3JpcHRpb24oJ1ZhbGlkYXRlcyBhIGNvbXBvc2VyLmpzb24nKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dEFyZ3VtZW50KCdmaWxlJywgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICdwYXRoIHRvIGNvbXBvc2VyLmpzb24gZmlsZScsICcuL2NvbXBvc2VyLmpzb24nKQopKQotPnNldEhlbHAoPDw8RU9UClRoZSB2YWxpZGF0ZSBjb21tYW5kIHZhbGlkYXRlcyBhIGdpdmVuIGNvbXBvc2VyLmpzb24KCkVPVAopOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiRmaWxlID0gJGlucHV0LT5nZXRBcmd1bWVudCgnZmlsZScpOwoKaWYgKCFmaWxlX2V4aXN0cygkZmlsZSkpIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPicgLiAkZmlsZSAuICcgbm90IGZvdW5kLjwvZXJyb3I+Jyk7CgpyZXR1cm4gMTsKfQppZiAoIWlzX3JlYWRhYmxlKCRmaWxlKSkgewokb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+JyAuICRmaWxlIC4gJyBpcyBub3QgcmVhZGFibGUuPC9lcnJvcj4nKTsKCnJldHVybiAxOwp9CgokdmFsaWRhdG9yID0gbmV3IENvbmZpZ1ZhbGlkYXRvcigkdGhpcy0+Z2V0SU8oKSk7Cmxpc3QoJGVycm9ycywgJHB1Ymxpc2hFcnJvcnMsICR3YXJuaW5ncykgPSAkdmFsaWRhdG9yLT52YWxpZGF0ZSgkZmlsZSk7CgoKIGlmICghJGVycm9ycyAmJiAhJHB1Ymxpc2hFcnJvcnMgJiYgISR3YXJuaW5ncykgewokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz4nIC4gJGZpbGUgLiAnIGlzIHZhbGlkPC9pbmZvPicpOwp9IGVsc2VpZiAoISRlcnJvcnMgJiYgISRwdWJsaXNoRXJyb3JzKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPicgLiAkZmlsZSAuICcgaXMgdmFsaWQsIGJ1dCB3aXRoIGEgZmV3IHdhcm5pbmdzPC9pbmZvPicpOwokb3V0cHV0LT53cml0ZWxuKCc8d2FybmluZz5TZWUgaHR0cDovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDQtc2NoZW1hLm1kIGZvciBkZXRhaWxzIG9uIHRoZSBzY2hlbWE8L3dhcm5pbmc+Jyk7Cn0gZWxzZWlmICghJGVycm9ycykgewokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz4nIC4gJGZpbGUgLiAnIGlzIHZhbGlkIGZvciBzaW1wbGUgdXNhZ2Ugd2l0aCBjb21wb3NlciBidXQgaGFzPC9pbmZvPicpOwokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz5zdHJpY3QgZXJyb3JzIHRoYXQgbWFrZSBpdCB1bmFibGUgdG8gYmUgcHVibGlzaGVkIGFzIGEgcGFja2FnZTo8L2luZm8+Jyk7CiRvdXRwdXQtPndyaXRlbG4oJzx3YXJuaW5nPlNlZSBodHRwOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy8wNC1zY2hlbWEubWQgZm9yIGRldGFpbHMgb24gdGhlIHNjaGVtYTwvd2FybmluZz4nKTsKfSBlbHNlIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPicgLiAkZmlsZSAuICcgaXMgaW52YWxpZCwgdGhlIGZvbGxvd2luZyBlcnJvcnMvd2FybmluZ3Mgd2VyZSBmb3VuZDo8L2Vycm9yPicpOwp9CgokbWVzc2FnZXMgPSBhcnJheSgKJ2Vycm9yJyA9PiBhcnJheV9tZXJnZSgkZXJyb3JzLCAkcHVibGlzaEVycm9ycyksCid3YXJuaW5nJyA9PiAkd2FybmluZ3MsCik7Cgpmb3JlYWNoICgkbWVzc2FnZXMgYXMgJHN0eWxlID0+ICRtc2dzKSB7CmZvcmVhY2ggKCRtc2dzIGFzICRtc2cpIHsKJG91dHB1dC0+d3JpdGVsbignPCcgLiAkc3R5bGUgLiAnPicgLiAkbXNnIC4gJzwvJyAuICRzdHlsZSAuICc+Jyk7Cn0KfQoKcmV0dXJuICRlcnJvcnMgfHwgJHB1Ymxpc2hFcnJvcnMgPyAxIDogMDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXFBvb2w7CnVzZSBDb21wb3NlclxQbHVnaW5cQ29tbWFuZEV2ZW50Owp1c2UgQ29tcG9zZXJcUGx1Z2luXFBsdWdpbkV2ZW50czsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCmNsYXNzIERlcGVuZHNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCAkbGlua1R5cGVzID0gYXJyYXkoCidyZXF1aXJlJyA9PiBhcnJheSgncmVxdWlyZXMnLCAncmVxdWlyZXMnKSwKJ3JlcXVpcmUtZGV2JyA9PiBhcnJheSgnZGV2UmVxdWlyZXMnLCAncmVxdWlyZXMgKGRldiknKSwKKTsKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnZGVwZW5kcycpCi0+c2V0RGVzY3JpcHRpb24oJ1Nob3dzIHdoaWNoIHBhY2thZ2VzIGRlcGVuZCBvbiB0aGUgZ2l2ZW4gcGFja2FnZScpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0QXJndW1lbnQoJ3BhY2thZ2UnLCBJbnB1dEFyZ3VtZW50OjpSRVFVSVJFRCwgJ1BhY2thZ2UgdG8gaW5zcGVjdCcpLApuZXcgSW5wdXRPcHRpb24oJ2xpbmstdHlwZScsICcnLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQgfCBJbnB1dE9wdGlvbjo6VkFMVUVfSVNfQVJSQVksICdMaW5rIHR5cGVzIHRvIHNob3cgKHJlcXVpcmUsIHJlcXVpcmUtZGV2KScsIGFycmF5X2tleXMoJHRoaXMtPmxpbmtUeXBlcykpLAopKQotPnNldEhlbHAoPDw8RU9UCkRpc3BsYXlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIGEgcGFja2FnZSBpcyByZWZlcmVuY2VkLgoKPGluZm8+cGhwIGNvbXBvc2VyLnBoYXIgZGVwZW5kcyBjb21wb3Nlci9jb21wb3NlcjwvaW5mbz4KCkVPVAopCjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIoKTsKCiRjb21tYW5kRXZlbnQgPSBuZXcgQ29tbWFuZEV2ZW50KFBsdWdpbkV2ZW50czo6Q09NTUFORCwgJ2RlcGVuZHMnLCAkaW5wdXQsICRvdXRwdXQpOwokY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaCgkY29tbWFuZEV2ZW50LT5nZXROYW1lKCksICRjb21tYW5kRXZlbnQpOwoKJHJlcG8gPSAkY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldExvY2FsUmVwb3NpdG9yeSgpOwokbmVlZGxlID0gJGlucHV0LT5nZXRBcmd1bWVudCgncGFja2FnZScpOwoKJHBvb2wgPSBuZXcgUG9vbCgpOwokcG9vbC0+YWRkUmVwb3NpdG9yeSgkcmVwbyk7CgokcGFja2FnZXMgPSAkcG9vbC0+d2hhdFByb3ZpZGVzKCRuZWVkbGUpOwppZiAoZW1wdHkoJHBhY2thZ2VzKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgcGFja2FnZSAiJy4kbmVlZGxlLiciIGluIHlvdXIgcHJvamVjdC4nKTsKfQoKJGxpbmtUeXBlcyA9ICR0aGlzLT5saW5rVHlwZXM7CgokdHlwZXMgPSBhcnJheV9tYXAoZnVuY3Rpb24gKCR0eXBlKSB1c2UgKCRsaW5rVHlwZXMpIHsKJHR5cGUgPSBydHJpbSgkdHlwZSwgJ3MnKTsKaWYgKCFpc3NldCgkbGlua1R5cGVzWyR0eXBlXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1VuZXhwZWN0ZWQgbGluayB0eXBlOiAnLiR0eXBlLicsIHZhbGlkIHR5cGVzOiAnLmltcGxvZGUoJywgJywgYXJyYXlfa2V5cygkbGlua1R5cGVzKSkpOwp9CgpyZXR1cm4gJHR5cGU7Cn0sICRpbnB1dC0+Z2V0T3B0aW9uKCdsaW5rLXR5cGUnKSk7CgokbWVzc2FnZXMgPSBhcnJheSgpOwokb3V0cHV0UGFja2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcmVwby0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewpmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpIHsKZm9yZWFjaCAoJHBhY2thZ2UtPnsnZ2V0Jy4kbGlua1R5cGVzWyR0eXBlXVswXX0oKSBhcyAkbGluaykgewppZiAoJGxpbmstPmdldFRhcmdldCgpID09PSAkbmVlZGxlKSB7CmlmICghaXNzZXQoJG91dHB1dFBhY2thZ2VzWyRwYWNrYWdlLT5nZXROYW1lKCldKSkgewokbWVzc2FnZXNbXSA9ICc8aW5mbz4nLiRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkgLiAnPC9pbmZvPiAnIC4gJGxpbmtUeXBlc1skdHlwZV1bMV0gLiAnICcgLiAkbmVlZGxlIC4nICg8aW5mbz4nIC4gJGxpbmstPmdldFByZXR0eUNvbnN0cmFpbnQoKSAuICc8L2luZm8+KSc7CiRvdXRwdXRQYWNrYWdlc1skcGFja2FnZS0+Z2V0TmFtZSgpXSA9IHRydWU7Cn0KfQp9Cn0KfQoKaWYgKCRtZXNzYWdlcykgewpzb3J0KCRtZXNzYWdlcyk7CiRvdXRwdXQtPndyaXRlbG4oJG1lc3NhZ2VzKTsKfSBlbHNlIHsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+VGhlcmUgaXMgbm8gaW5zdGFsbGVkIHBhY2thZ2UgZGVwZW5kaW5nIG9uICInLiRuZWVkbGUuJyIuPC9pbmZvPicpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxDb21wb3NpdGVSZXBvc2l0b3J5Owp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQbGF0Zm9ybVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgQ29tcG9zZXJcUGx1Z2luXENvbW1hbmRFdmVudDsKdXNlIENvbXBvc2VyXFBsdWdpblxQbHVnaW5FdmVudHM7CgoKCgpjbGFzcyBTZWFyY2hDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCAkbWF0Y2hlczsKcHJvdGVjdGVkICRsb3dNYXRjaGVzID0gYXJyYXkoKTsKcHJvdGVjdGVkICR0b2tlbnM7CnByb3RlY3RlZCAkb3V0cHV0Owpwcm90ZWN0ZWQgJG9ubHlOYW1lOwoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbmZpZ3VyZSgpCnsKJHRoaXMKLT5zZXROYW1lKCdzZWFyY2gnKQotPnNldERlc2NyaXB0aW9uKCdTZWFyY2ggZm9yIHBhY2thZ2VzJykKLT5zZXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRPcHRpb24oJ29ubHktbmFtZScsICdOJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdTZWFyY2ggb25seSBpbiBuYW1lJyksCm5ldyBJbnB1dEFyZ3VtZW50KCd0b2tlbnMnLCBJbnB1dEFyZ3VtZW50OjpJU19BUlJBWSB8IElucHV0QXJndW1lbnQ6OlJFUVVJUkVELCAndG9rZW5zIHRvIHNlYXJjaCBmb3InKSwKKSkKLT5zZXRIZWxwKDw8PEVPVApUaGUgc2VhcmNoIGNvbW1hbmQgc2VhcmNoZXMgZm9yIHBhY2thZ2VzIGJ5IGl0cyBuYW1lCjxpbmZvPnBocCBjb21wb3Nlci5waGFyIHNlYXJjaCBzeW1mb255IGNvbXBvc2VyPC9pbmZvPgoKRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CgogJHBsYXRmb3JtUmVwbyA9IG5ldyBQbGF0Zm9ybVJlcG9zaXRvcnk7CmlmICgkY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIoZmFsc2UpKSB7CiRsb2NhbFJlcG8gPSAkY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldExvY2FsUmVwb3NpdG9yeSgpOwokaW5zdGFsbGVkUmVwbyA9IG5ldyBDb21wb3NpdGVSZXBvc2l0b3J5KGFycmF5KCRsb2NhbFJlcG8sICRwbGF0Zm9ybVJlcG8pKTsKJHJlcG9zID0gbmV3IENvbXBvc2l0ZVJlcG9zaXRvcnkoYXJyYXlfbWVyZ2UoYXJyYXkoJGluc3RhbGxlZFJlcG8pLCAkY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldFJlcG9zaXRvcmllcygpKSk7Cn0gZWxzZSB7CiRkZWZhdWx0UmVwb3MgPSBGYWN0b3J5OjpjcmVhdGVEZWZhdWx0UmVwb3NpdG9yaWVzKCR0aGlzLT5nZXRJTygpKTsKJG91dHB1dC0+d3JpdGVsbignTm8gY29tcG9zZXIuanNvbiBmb3VuZCBpbiB0aGUgY3VycmVudCBkaXJlY3RvcnksIHNob3dpbmcgcGFja2FnZXMgZnJvbSAnIC4gaW1wbG9kZSgnLCAnLCBhcnJheV9rZXlzKCRkZWZhdWx0UmVwb3MpKSk7CiRpbnN0YWxsZWRSZXBvID0gJHBsYXRmb3JtUmVwbzsKJHJlcG9zID0gbmV3IENvbXBvc2l0ZVJlcG9zaXRvcnkoYXJyYXlfbWVyZ2UoYXJyYXkoJGluc3RhbGxlZFJlcG8pLCAkZGVmYXVsdFJlcG9zKSk7Cn0KCmlmICgkY29tcG9zZXIpIHsKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnc2VhcmNoJywgJGlucHV0LCAkb3V0cHV0KTsKJGNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2goJGNvbW1hbmRFdmVudC0+Z2V0TmFtZSgpLCAkY29tbWFuZEV2ZW50KTsKfQoKJG9ubHlOYW1lID0gJGlucHV0LT5nZXRPcHRpb24oJ29ubHktbmFtZScpOwoKJGZsYWdzID0gJG9ubHlOYW1lID8gUmVwb3NpdG9yeUludGVyZmFjZTo6U0VBUkNIX05BTUUgOiBSZXBvc2l0b3J5SW50ZXJmYWNlOjpTRUFSQ0hfRlVMTFRFWFQ7CiRyZXN1bHRzID0gJHJlcG9zLT5zZWFyY2goaW1wbG9kZSgnICcsICRpbnB1dC0+Z2V0QXJndW1lbnQoJ3Rva2VucycpKSwgJGZsYWdzKTsKCmZvcmVhY2ggKCRyZXN1bHRzIGFzICRyZXN1bHQpIHsKJG91dHB1dC0+d3JpdGVsbigkcmVzdWx0WyduYW1lJ10gLiAoaXNzZXQoJHJlc3VsdFsnZGVzY3JpcHRpb24nXSkgPyAnICcuICRyZXN1bHRbJ2Rlc2NyaXB0aW9uJ10gOiAnJykpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcRmFjdG9yeTsKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcRmlsZXN5c3RlbUV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBTZWxmVXBkYXRlQ29tbWFuZCBleHRlbmRzIENvbW1hbmQKewpjb25zdCBIT01FUEFHRSA9ICdnZXRjb21wb3Nlci5vcmcnOwpjb25zdCBPTERfSU5TVEFMTF9FWFQgPSAnLW9sZC5waGFyJzsKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnc2VsZi11cGRhdGUnKQotPnNldEFsaWFzZXMoYXJyYXkoJ3NlbGZ1cGRhdGUnKSkKLT5zZXREZXNjcmlwdGlvbignVXBkYXRlcyBjb21wb3Nlci5waGFyIHRvIHRoZSBsYXRlc3QgdmVyc2lvbi4nKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dE9wdGlvbigncm9sbGJhY2snLCAncicsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnUmV2ZXJ0IHRvIGFuIG9sZGVyIGluc3RhbGxhdGlvbiBvZiBjb21wb3NlcicpLApuZXcgSW5wdXRPcHRpb24oJ2NsZWFuLWJhY2t1cHMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0RlbGV0ZSBvbGQgYmFja3VwcyBkdXJpbmcgYW4gdXBkYXRlLiBUaGlzIG1ha2VzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgY29tcG9zZXIgdGhlIG9ubHkgYmFja3VwIGF2YWlsYWJsZSBhZnRlciB0aGUgdXBkYXRlJyksCm5ldyBJbnB1dEFyZ3VtZW50KCd2ZXJzaW9uJywgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICdUaGUgdmVyc2lvbiB0byB1cGRhdGUgdG8nKSwKKSkKLT5zZXRIZWxwKDw8PEVPVApUaGUgPGluZm8+c2VsZi11cGRhdGU8L2luZm8+IGNvbW1hbmQgY2hlY2tzIGdldGNvbXBvc2VyLm9yZyBmb3IgbmV3ZXIKdmVyc2lvbnMgb2YgY29tcG9zZXIgYW5kIGlmIGZvdW5kLCBpbnN0YWxscyB0aGUgbGF0ZXN0LgoKPGluZm8+cGhwIGNvbXBvc2VyLnBoYXIgc2VsZi11cGRhdGU8L2luZm8+CgpFT1QKKQo7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKJGJhc2VVcmwgPSAoZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpID8gJ2h0dHBzJyA6ICdodHRwJykgLiAnOi8vJyAuIHNlbGY6OkhPTUVQQUdFOwokY29uZmlnID0gRmFjdG9yeTo6Y3JlYXRlQ29uZmlnKCk7CiRyZW1vdGVGaWxlc3lzdGVtID0gbmV3IFJlbW90ZUZpbGVzeXN0ZW0oJHRoaXMtPmdldElPKCksICRjb25maWcpOwokY2FjaGVEaXIgPSAkY29uZmlnLT5nZXQoJ2NhY2hlLWRpcicpOwokcm9sbGJhY2tEaXIgPSAkY29uZmlnLT5nZXQoJ2hvbWUnKTsKJGxvY2FsRmlsZW5hbWUgPSByZWFscGF0aCgkX1NFUlZFUlsnYXJndiddWzBdKSA/OiAkX1NFUlZFUlsnYXJndiddWzBdOwoKCiAkdG1wRGlyID0gaXNfd3JpdGFibGUoZGlybmFtZSgkbG9jYWxGaWxlbmFtZSkpID8gZGlybmFtZSgkbG9jYWxGaWxlbmFtZSkgOiAkY2FjaGVEaXI7CgoKIGlmICghaXNfd3JpdGFibGUoJHRtcERpcikpIHsKdGhyb3cgbmV3IEZpbGVzeXN0ZW1FeGNlcHRpb24oJ0NvbXBvc2VyIHVwZGF0ZSBmYWlsZWQ6IHRoZSAiJy4kdG1wRGlyLiciIGRpcmVjdG9yeSB1c2VkIHRvIGRvd25sb2FkIHRoZSB0ZW1wIGZpbGUgY291bGQgbm90IGJlIHdyaXR0ZW4nKTsKfQppZiAoIWlzX3dyaXRhYmxlKCRsb2NhbEZpbGVuYW1lKSkgewp0aHJvdyBuZXcgRmlsZXN5c3RlbUV4Y2VwdGlvbignQ29tcG9zZXIgdXBkYXRlIGZhaWxlZDogdGhlICInLiRsb2NhbEZpbGVuYW1lLiciIGZpbGUgY291bGQgbm90IGJlIHdyaXR0ZW4nKTsKfQoKaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCdyb2xsYmFjaycpKSB7CnJldHVybiAkdGhpcy0+cm9sbGJhY2soJG91dHB1dCwgJHJvbGxiYWNrRGlyLCAkbG9jYWxGaWxlbmFtZSk7Cn0KCiRsYXRlc3RWZXJzaW9uID0gdHJpbSgkcmVtb3RlRmlsZXN5c3RlbS0+Z2V0Q29udGVudHMoc2VsZjo6SE9NRVBBR0UsICRiYXNlVXJsLiAnL3ZlcnNpb24nLCBmYWxzZSkpOwokdXBkYXRlVmVyc2lvbiA9ICRpbnB1dC0+Z2V0QXJndW1lbnQoJ3ZlcnNpb24nKSA/OiAkbGF0ZXN0VmVyc2lvbjsKCmlmIChwcmVnX21hdGNoKCd7XlswLTlhLWZdezQwfSR9JywgJHVwZGF0ZVZlcnNpb24pICYmICR1cGRhdGVWZXJzaW9uICE9PSAkbGF0ZXN0VmVyc2lvbikgewokb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+WW91IGNhbiBub3QgdXBkYXRlIHRvIGEgc3BlY2lmaWMgU0hBLTEgYXMgdGhvc2UgcGhhcnMgYXJlIG5vdCBhdmFpbGFibGUgZm9yIGRvd25sb2FkPC9lcnJvcj4nKTsKCnJldHVybiAxOwp9CgppZiAoQ29tcG9zZXI6OlZFUlNJT04gPT09ICR1cGRhdGVWZXJzaW9uKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPllvdSBhcmUgYWxyZWFkeSB1c2luZyBjb21wb3NlciB2ZXJzaW9uICcuJHVwZGF0ZVZlcnNpb24uJy48L2luZm8+Jyk7CgpyZXR1cm4gMDsKfQoKJHRlbXBGaWxlbmFtZSA9ICR0bXBEaXIgLiAnLycgLiBiYXNlbmFtZSgkbG9jYWxGaWxlbmFtZSwgJy5waGFyJykuJy10ZW1wLnBoYXInOwokYmFja3VwRmlsZSA9IHNwcmludGYoCiclcy8lcy0lcyVzJywKJHJvbGxiYWNrRGlyLApzdHJ0cihDb21wb3Nlcjo6UkVMRUFTRV9EQVRFLCAnIDonLCAnXy0nKSwKcHJlZ19yZXBsYWNlKCd7XihbMC05YS1mXXs3fSlbMC05YS1mXXszM30kfScsICckMScsIENvbXBvc2VyOjpWRVJTSU9OKSwKc2VsZjo6T0xEX0lOU1RBTExfRVhUCik7Cgokb3V0cHV0LT53cml0ZWxuKHNwcmludGYoIlVwZGF0aW5nIHRvIHZlcnNpb24gPGluZm8+JXM8L2luZm8+LiIsICR1cGRhdGVWZXJzaW9uKSk7CiRyZW1vdGVGaWxlbmFtZSA9ICRiYXNlVXJsIC4gKHByZWdfbWF0Y2goJ3teWzAtOWEtZl17NDB9JH0nLCAkdXBkYXRlVmVyc2lvbikgPyAnL2NvbXBvc2VyLnBoYXInIDogIi9kb3dubG9hZC97JHVwZGF0ZVZlcnNpb259L2NvbXBvc2VyLnBoYXIiKTsKJHJlbW90ZUZpbGVzeXN0ZW0tPmNvcHkoc2VsZjo6SE9NRVBBR0UsICRyZW1vdGVGaWxlbmFtZSwgJHRlbXBGaWxlbmFtZSk7CmlmICghZmlsZV9leGlzdHMoJHRlbXBGaWxlbmFtZSkpIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPlRoZSBkb3dubG9hZCBvZiB0aGUgbmV3IGNvbXBvc2VyIHZlcnNpb24gZmFpbGVkIGZvciBhbiB1bmV4cGVjdGVkIHJlYXNvbjwvZXJyb3I+Jyk7CgpyZXR1cm4gMTsKfQoKCiBpZiAoJGlucHV0LT5nZXRPcHRpb24oJ2NsZWFuLWJhY2t1cHMnKSkgewokZmlsZXMgPSAkdGhpcy0+Z2V0T2xkSW5zdGFsbGF0aW9uRmlsZXMoJHJvbGxiYWNrRGlyKTsKCmlmICghZW1wdHkoJGZpbGVzKSkgewokZnMgPSBuZXcgRmlsZXN5c3RlbTsKCmZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz5SZW1vdmluZzogJy4kZmlsZS4nPC9pbmZvPicpOwokZnMtPnJlbW92ZSgkZmlsZSk7Cn0KfQp9CgppZiAoJGVyciA9ICR0aGlzLT5zZXRMb2NhbFBoYXIoJGxvY2FsRmlsZW5hbWUsICR0ZW1wRmlsZW5hbWUsICRiYWNrdXBGaWxlKSkgewokb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+VGhlIGZpbGUgaXMgY29ycnVwdGVkICgnLiRlcnItPmdldE1lc3NhZ2UoKS4nKS48L2Vycm9yPicpOwokb3V0cHV0LT53cml0ZWxuKCc8ZXJyb3I+UGxlYXNlIHJlLXJ1biB0aGUgc2VsZi11cGRhdGUgY29tbWFuZCB0byB0cnkgYWdhaW4uPC9lcnJvcj4nKTsKCnJldHVybiAxOwp9CgppZiAoZmlsZV9leGlzdHMoJGJhY2t1cEZpbGUpKSB7CiRvdXRwdXQtPndyaXRlbG4oJ1VzZSA8aW5mbz5jb21wb3NlciBzZWxmLXVwZGF0ZSAtLXJvbGxiYWNrPC9pbmZvPiB0byByZXR1cm4gdG8gdmVyc2lvbiAnLkNvbXBvc2VyOjpWRVJTSU9OKTsKfSBlbHNlIHsKJG91dHB1dC0+d3JpdGVsbignPHdhcm5pbmc+QSBiYWNrdXAgb2YgdGhlIGN1cnJlbnQgdmVyc2lvbiBjb3VsZCBub3QgYmUgd3JpdHRlbiB0byAnLiRiYWNrdXBGaWxlLicsIG5vIHJvbGxiYWNrIHBvc3NpYmxlPC93YXJuaW5nPicpOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiByb2xsYmFjayhPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHJvbGxiYWNrRGlyLCAkbG9jYWxGaWxlbmFtZSkKewokcm9sbGJhY2tWZXJzaW9uID0gJHRoaXMtPmdldExhc3RCYWNrdXBWZXJzaW9uKCRyb2xsYmFja0Rpcik7CmlmICghJHJvbGxiYWNrVmVyc2lvbikgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignQ29tcG9zZXIgcm9sbGJhY2sgZmFpbGVkOiBubyBpbnN0YWxsYXRpb24gdG8gcm9sbCBiYWNrIHRvIGluICInLiRyb2xsYmFja0Rpci4nIicpOwp9CgppZiAoIWlzX3dyaXRhYmxlKCRyb2xsYmFja0RpcikpIHsKdGhyb3cgbmV3IEZpbGVzeXN0ZW1FeGNlcHRpb24oJ0NvbXBvc2VyIHJvbGxiYWNrIGZhaWxlZDogdGhlICInLiRyb2xsYmFja0Rpci4nIiBkaXIgY291bGQgbm90IGJlIHdyaXR0ZW4gdG8nKTsKfQoKJG9sZCA9ICRyb2xsYmFja0RpciAuICcvJyAuICRyb2xsYmFja1ZlcnNpb24gLiBzZWxmOjpPTERfSU5TVEFMTF9FWFQ7CgppZiAoIWlzX2ZpbGUoJG9sZCkpIHsKdGhyb3cgbmV3IEZpbGVzeXN0ZW1FeGNlcHRpb24oJ0NvbXBvc2VyIHJvbGxiYWNrIGZhaWxlZDogIicuJG9sZC4nIiBjb3VsZCBub3QgYmUgZm91bmQnKTsKfQppZiAoIWlzX3JlYWRhYmxlKCRvbGQpKSB7CnRocm93IG5ldyBGaWxlc3lzdGVtRXhjZXB0aW9uKCdDb21wb3NlciByb2xsYmFjayBmYWlsZWQ6ICInLiRvbGQuJyIgY291bGQgbm90IGJlIHJlYWQnKTsKfQoKJG9sZEZpbGUgPSAkcm9sbGJhY2tEaXIgLiAiL3skcm9sbGJhY2tWZXJzaW9ufSIgLiBzZWxmOjpPTERfSU5TVEFMTF9FWFQ7CiRvdXRwdXQtPndyaXRlbG4oc3ByaW50ZigiUm9sbGluZyBiYWNrIHRvIHZlcnNpb24gPGluZm8+JXM8L2luZm8+LiIsICRyb2xsYmFja1ZlcnNpb24pKTsKaWYgKCRlcnIgPSAkdGhpcy0+c2V0TG9jYWxQaGFyKCRsb2NhbEZpbGVuYW1lLCAkb2xkRmlsZSkpIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPlRoZSBiYWNrdXAgZmlsZSB3YXMgY29ycnVwdGVkICgnLiRlcnItPmdldE1lc3NhZ2UoKS4nKSBhbmQgaGFzIGJlZW4gcmVtb3ZlZC48L2Vycm9yPicpOwoKcmV0dXJuIDE7Cn0KCnJldHVybiAwOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0TG9jYWxQaGFyKCRsb2NhbEZpbGVuYW1lLCAkbmV3RmlsZW5hbWUsICRiYWNrdXBUYXJnZXQgPSBudWxsKQp7CnRyeSB7CkBjaG1vZCgkbmV3RmlsZW5hbWUsIDA3NzcgJiB+dW1hc2soKSk7CmlmICghaW5pX2dldCgncGhhci5yZWFkb25seScpKSB7CgogJHBoYXIgPSBuZXcgXFBoYXIoJG5ld0ZpbGVuYW1lKTsKCiB1bnNldCgkcGhhcik7Cn0KCgogaWYgKCRiYWNrdXBUYXJnZXQgJiYgZmlsZV9leGlzdHMoJGxvY2FsRmlsZW5hbWUpKSB7CkBjb3B5KCRsb2NhbEZpbGVuYW1lLCAkYmFja3VwVGFyZ2V0KTsKfQoKcmVuYW1lKCRuZXdGaWxlbmFtZSwgJGxvY2FsRmlsZW5hbWUpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CmlmICgkYmFja3VwVGFyZ2V0KSB7CkB1bmxpbmsoJG5ld0ZpbGVuYW1lKTsKfQppZiAoISRlIGluc3RhbmNlb2YgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAmJiAhJGUgaW5zdGFuY2VvZiBcUGhhckV4Y2VwdGlvbikgewp0aHJvdyAkZTsKfQoKcmV0dXJuICRlOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRMYXN0QmFja3VwVmVyc2lvbigkcm9sbGJhY2tEaXIpCnsKJGZpbGVzID0gJHRoaXMtPmdldE9sZEluc3RhbGxhdGlvbkZpbGVzKCRyb2xsYmFja0Rpcik7CmlmIChlbXB0eSgkZmlsZXMpKSB7CnJldHVybiBmYWxzZTsKfQoKc29ydCgkZmlsZXMpOwoKcmV0dXJuIGJhc2VuYW1lKGVuZCgkZmlsZXMpLCBzZWxmOjpPTERfSU5TVEFMTF9FWFQpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0T2xkSW5zdGFsbGF0aW9uRmlsZXMoJHJvbGxiYWNrRGlyKQp7CnJldHVybiBnbG9iKCRyb2xsYmFja0RpciAuICcvKicgLiBzZWxmOjpPTERfSU5TVEFMTF9FWFQpID86IGFycmF5KCk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFBsdWdpblxDb21tYW5kRXZlbnQ7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luRXZlbnRzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXJcVGFibGVIZWxwZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dE9wdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKCgoKCmNsYXNzIExpY2Vuc2VzQ29tbWFuZCBleHRlbmRzIENvbW1hbmQKewpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcwotPnNldE5hbWUoJ2xpY2Vuc2VzJykKLT5zZXREZXNjcmlwdGlvbignU2hvdyBpbmZvcm1hdGlvbiBhYm91dCBsaWNlbnNlcyBvZiBkZXBlbmRlbmNpZXMnKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dE9wdGlvbignZm9ybWF0JywgJ2YnLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdGb3JtYXQgb2YgdGhlIG91dHB1dDogdGV4dCBvciBqc29uJywgJ3RleHQnKSwKKSkKLT5zZXRIZWxwKDw8PEVPVApUaGUgbGljZW5zZSBjb21tYW5kIGRpc3BsYXlzIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaWNlbnNlcyBvZgp0aGUgaW5zdGFsbGVkIGRlcGVuZGVuY2llcy4KCkVPVAopCjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokY29tcG9zZXIgPSAkdGhpcy0+Z2V0Q29tcG9zZXIoKTsKCiRjb21tYW5kRXZlbnQgPSBuZXcgQ29tbWFuZEV2ZW50KFBsdWdpbkV2ZW50czo6Q09NTUFORCwgJ2xpY2Vuc2VzJywgJGlucHV0LCAkb3V0cHV0KTsKJGNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2goJGNvbW1hbmRFdmVudC0+Z2V0TmFtZSgpLCAkY29tbWFuZEV2ZW50KTsKCiRyb290ID0gJGNvbXBvc2VyLT5nZXRQYWNrYWdlKCk7CiRyZXBvID0gJGNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRMb2NhbFJlcG9zaXRvcnkoKTsKCiR2ZXJzaW9uUGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXI7CgokcGFja2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcmVwby0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewokcGFja2FnZXNbJHBhY2thZ2UtPmdldE5hbWUoKV0gPSAkcGFja2FnZTsKfQoKa3NvcnQoJHBhY2thZ2VzKTsKCnN3aXRjaCAoJGZvcm1hdCA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdmb3JtYXQnKSkgewpjYXNlICd0ZXh0JzoKJG91dHB1dC0+d3JpdGVsbignTmFtZTogPGNvbW1lbnQ+Jy4kcm9vdC0+Z2V0UHJldHR5TmFtZSgpLic8L2NvbW1lbnQ+Jyk7CiRvdXRwdXQtPndyaXRlbG4oJ1ZlcnNpb246IDxjb21tZW50PicuJHZlcnNpb25QYXJzZXItPmZvcm1hdFZlcnNpb24oJHJvb3QpLic8L2NvbW1lbnQ+Jyk7CiRvdXRwdXQtPndyaXRlbG4oJ0xpY2Vuc2VzOiA8Y29tbWVudD4nLihpbXBsb2RlKCcsICcsICRyb290LT5nZXRMaWNlbnNlKCkpID86ICdub25lJykuJzwvY29tbWVudD4nKTsKJG91dHB1dC0+d3JpdGVsbignRGVwZW5kZW5jaWVzOicpOwoKJHRhYmxlID0gJHRoaXMtPmdldEhlbHBlclNldCgpLT5nZXQoJ3RhYmxlJyk7CiR0YWJsZS0+c2V0TGF5b3V0KFRhYmxlSGVscGVyOjpMQVlPVVRfQk9SREVSTEVTUyk7CiR0YWJsZS0+c2V0SG9yaXpvbnRhbEJvcmRlckNoYXIoJycpOwpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2UpIHsKJHRhYmxlLT5hZGRSb3coYXJyYXkoCiRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCksCiR2ZXJzaW9uUGFyc2VyLT5mb3JtYXRWZXJzaW9uKCRwYWNrYWdlKSwKaW1wbG9kZSgnLCAnLCAkcGFja2FnZS0+Z2V0TGljZW5zZSgpKSA/OiAnbm9uZScsCikpOwp9CiR0YWJsZS0+cmVuZGVyKCRvdXRwdXQpOwpicmVhazsKCmNhc2UgJ2pzb24nOgpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2UpIHsKJGRlcGVuZGVuY2llc1skcGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpXSA9IGFycmF5KAondmVyc2lvbicgPT4gJHZlcnNpb25QYXJzZXItPmZvcm1hdFZlcnNpb24oJHBhY2thZ2UpLAonbGljZW5zZScgPT4gJHBhY2thZ2UtPmdldExpY2Vuc2UoKSwKKTsKfQoKJG91dHB1dC0+d3JpdGVsbihKc29uRmlsZTo6ZW5jb2RlKGFycmF5KAonbmFtZScgPT4gJHJvb3QtPmdldFByZXR0eU5hbWUoKSwKJ3ZlcnNpb24nID0+ICR2ZXJzaW9uUGFyc2VyLT5mb3JtYXRWZXJzaW9uKCRyb290KSwKJ2xpY2Vuc2UnID0+ICRyb290LT5nZXRMaWNlbnNlKCksCidkZXBlbmRlbmNpZXMnID0+ICRkZXBlbmRlbmNpZXMsCikpKTsKYnJlYWs7CgpkZWZhdWx0Ogp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVW5zdXBwb3J0ZWQgZm9ybWF0ICIlcyIuICBTZWUgaGVscCBmb3Igc3VwcG9ydGVkIGZvcm1hdHMuJywgJGZvcm1hdCkpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcRmFjdG9yeTsKdXNlIENvbXBvc2VyXEluc3RhbGxlcjsKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxKc29uXEpzb25NYW5pcHVsYXRvcjsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgQ29tcG9zZXJcUGx1Z2luXENvbW1hbmRFdmVudDsKdXNlIENvbXBvc2VyXFBsdWdpblxQbHVnaW5FdmVudHM7CgoKCgoKY2xhc3MgUmVxdWlyZUNvbW1hbmQgZXh0ZW5kcyBJbml0Q29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgncmVxdWlyZScpCi0+c2V0RGVzY3JpcHRpb24oJ0FkZHMgcmVxdWlyZWQgcGFja2FnZXMgdG8geW91ciBjb21wb3Nlci5qc29uIGFuZCBpbnN0YWxscyB0aGVtJykKLT5zZXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRBcmd1bWVudCgncGFja2FnZXMnLCBJbnB1dEFyZ3VtZW50OjpJU19BUlJBWSB8IElucHV0QXJndW1lbnQ6Ok9QVElPTkFMLCAnUmVxdWlyZWQgcGFja2FnZSB3aXRoIGEgdmVyc2lvbiBjb25zdHJhaW50LCBlLmcuIGZvby9iYXI6MS4wLjAgb3IgZm9vL2Jhcj0xLjAuMCBvciAiZm9vL2JhciAxLjAuMCInKSwKbmV3IElucHV0T3B0aW9uKCdkZXYnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0FkZCByZXF1aXJlbWVudCB0byByZXF1aXJlLWRldi4nKSwKbmV3IElucHV0T3B0aW9uKCdwcmVmZXItc291cmNlJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdGb3JjZXMgaW5zdGFsbGF0aW9uIGZyb20gcGFja2FnZSBzb3VyY2VzIHdoZW4gcG9zc2libGUsIGluY2x1ZGluZyBWQ1MgaW5mb3JtYXRpb24uJyksCm5ldyBJbnB1dE9wdGlvbigncHJlZmVyLWRpc3QnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0ZvcmNlcyBpbnN0YWxsYXRpb24gZnJvbSBwYWNrYWdlIGRpc3QgZXZlbiBmb3IgZGV2IHZlcnNpb25zLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLXByb2dyZXNzJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEbyBub3Qgb3V0cHV0IGRvd25sb2FkIHByb2dyZXNzLicpLApuZXcgSW5wdXRPcHRpb24oJ25vLXVwZGF0ZScsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzYWJsZXMgdGhlIGF1dG9tYXRpYyB1cGRhdGUgb2YgdGhlIGRlcGVuZGVuY2llcy4nKSwKbmV3IElucHV0T3B0aW9uKCd1cGRhdGUtbm8tZGV2JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdSdW4gdGhlIGRlcGVuZGVuY3kgdXBkYXRlIHdpdGggdGhlIC0tbm8tZGV2IG9wdGlvbi4nKSwKbmV3IElucHV0T3B0aW9uKCd1cGRhdGUtd2l0aC1kZXBlbmRlbmNpZXMnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0FsbG93cyBpbmhlcml0ZWQgZGVwZW5kZW5jaWVzIHRvIGJlIHVwZGF0ZWQgd2l0aCBleHBsaWNpdCBkZXBlbmRlbmNpZXMuJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIHJlcXVpcmUgY29tbWFuZCBhZGRzIHJlcXVpcmVkIHBhY2thZ2VzIHRvIHlvdXIgY29tcG9zZXIuanNvbiBhbmQgaW5zdGFsbHMgdGhlbQoKSWYgeW91IGRvIG5vdCB3YW50IHRvIGluc3RhbGwgdGhlIG5ldyBkZXBlbmRlbmNpZXMgaW1tZWRpYXRlbHkgeW91IGNhbiBjYWxsIGl0IHdpdGggLS1uby11cGRhdGUKCkVPVAopCjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokZmlsZSA9IEZhY3Rvcnk6OmdldENvbXBvc2VyRmlsZSgpOwoKaWYgKCFmaWxlX2V4aXN0cygkZmlsZSkgJiYgIWZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlLCAie1xufVxuIikpIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPicuJGZpbGUuJyBjb3VsZCBub3QgYmUgY3JlYXRlZC48L2Vycm9yPicpOwoKcmV0dXJuIDE7Cn0KaWYgKCFpc19yZWFkYWJsZSgkZmlsZSkpIHsKJG91dHB1dC0+d3JpdGVsbignPGVycm9yPicuJGZpbGUuJyBpcyBub3QgcmVhZGFibGUuPC9lcnJvcj4nKTsKCnJldHVybiAxOwp9CmlmICghaXNfd3JpdGFibGUoJGZpbGUpKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj4nLiRmaWxlLicgaXMgbm90IHdyaXRhYmxlLjwvZXJyb3I+Jyk7CgpyZXR1cm4gMTsKfQoKJGpzb24gPSBuZXcgSnNvbkZpbGUoJGZpbGUpOwokY29tcG9zZXIgPSAkanNvbi0+cmVhZCgpOwokY29tcG9zZXJCYWNrdXAgPSBmaWxlX2dldF9jb250ZW50cygkanNvbi0+Z2V0UGF0aCgpKTsKCiRyZXF1aXJlbWVudHMgPSAkdGhpcy0+ZGV0ZXJtaW5lUmVxdWlyZW1lbnRzKCRpbnB1dCwgJG91dHB1dCwgJGlucHV0LT5nZXRBcmd1bWVudCgncGFja2FnZXMnKSk7CgokcmVxdWlyZUtleSA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdkZXYnKSA/ICdyZXF1aXJlLWRldicgOiAncmVxdWlyZSc7CiRyZW1vdmVLZXkgPSAkaW5wdXQtPmdldE9wdGlvbignZGV2JykgPyAncmVxdWlyZScgOiAncmVxdWlyZS1kZXYnOwokYmFzZVJlcXVpcmVtZW50cyA9IGFycmF5X2tleV9leGlzdHMoJHJlcXVpcmVLZXksICRjb21wb3NlcikgPyAkY29tcG9zZXJbJHJlcXVpcmVLZXldIDogYXJyYXkoKTsKJHJlcXVpcmVtZW50cyA9ICR0aGlzLT5mb3JtYXRSZXF1aXJlbWVudHMoJHJlcXVpcmVtZW50cyk7CgoKICR2ZXJzaW9uUGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXIoKTsKZm9yZWFjaCAoJHJlcXVpcmVtZW50cyBhcyAkY29uc3RyYWludCkgewokdmVyc2lvblBhcnNlci0+cGFyc2VDb25zdHJhaW50cygkY29uc3RyYWludCk7Cn0KCmlmICghJHRoaXMtPnVwZGF0ZUZpbGVDbGVhbmx5KCRqc29uLCAkYmFzZVJlcXVpcmVtZW50cywgJHJlcXVpcmVtZW50cywgJHJlcXVpcmVLZXksICRyZW1vdmVLZXkpKSB7CmZvcmVhY2ggKCRyZXF1aXJlbWVudHMgYXMgJHBhY2thZ2UgPT4gJHZlcnNpb24pIHsKJGJhc2VSZXF1aXJlbWVudHNbJHBhY2thZ2VdID0gJHZlcnNpb247CgppZiAoaXNzZXQoJGNvbXBvc2VyWyRyZW1vdmVLZXldWyRwYWNrYWdlXSkpIHsKdW5zZXQoJGNvbXBvc2VyWyRyZW1vdmVLZXldWyRwYWNrYWdlXSk7Cn0KfQoKJGNvbXBvc2VyWyRyZXF1aXJlS2V5XSA9ICRiYXNlUmVxdWlyZW1lbnRzOwokanNvbi0+d3JpdGUoJGNvbXBvc2VyKTsKfQoKJG91dHB1dC0+d3JpdGVsbignPGluZm8+Jy4kZmlsZS4nIGhhcyBiZWVuIHVwZGF0ZWQ8L2luZm8+Jyk7CgppZiAoJGlucHV0LT5nZXRPcHRpb24oJ25vLXVwZGF0ZScpKSB7CnJldHVybiAwOwp9CiR1cGRhdGVEZXZNb2RlID0gISRpbnB1dC0+Z2V0T3B0aW9uKCd1cGRhdGUtbm8tZGV2Jyk7CgoKICRjb21wb3NlciA9ICR0aGlzLT5nZXRDb21wb3NlcigpOwokY29tcG9zZXItPmdldERvd25sb2FkTWFuYWdlcigpLT5zZXRPdXRwdXRQcm9ncmVzcyghJGlucHV0LT5nZXRPcHRpb24oJ25vLXByb2dyZXNzJykpOwokaW8gPSAkdGhpcy0+Z2V0SU8oKTsKCiRjb21tYW5kRXZlbnQgPSBuZXcgQ29tbWFuZEV2ZW50KFBsdWdpbkV2ZW50czo6Q09NTUFORCwgJ3JlcXVpcmUnLCAkaW5wdXQsICRvdXRwdXQpOwokY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaCgkY29tbWFuZEV2ZW50LT5nZXROYW1lKCksICRjb21tYW5kRXZlbnQpOwoKJGluc3RhbGwgPSBJbnN0YWxsZXI6OmNyZWF0ZSgkaW8sICRjb21wb3Nlcik7CgokaW5zdGFsbAotPnNldFZlcmJvc2UoJGlucHV0LT5nZXRPcHRpb24oJ3ZlcmJvc2UnKSkKLT5zZXRQcmVmZXJTb3VyY2UoJGlucHV0LT5nZXRPcHRpb24oJ3ByZWZlci1zb3VyY2UnKSkKLT5zZXRQcmVmZXJEaXN0KCRpbnB1dC0+Z2V0T3B0aW9uKCdwcmVmZXItZGlzdCcpKQotPnNldERldk1vZGUoJHVwZGF0ZURldk1vZGUpCi0+c2V0VXBkYXRlKHRydWUpCi0+c2V0VXBkYXRlV2hpdGVsaXN0KGFycmF5X2tleXMoJHJlcXVpcmVtZW50cykpCi0+c2V0V2hpdGVsaXN0RGVwZW5kZW5jaWVzKCRpbnB1dC0+Z2V0T3B0aW9uKCd1cGRhdGUtd2l0aC1kZXBlbmRlbmNpZXMnKSk7CjsKCiRzdGF0dXMgPSAkaW5zdGFsbC0+cnVuKCk7CmlmICgkc3RhdHVzICE9PSAwKSB7CiRvdXRwdXQtPndyaXRlbG4oIlxuIi4nPGVycm9yPkluc3RhbGxhdGlvbiBmYWlsZWQsIHJldmVydGluZyAnLiRmaWxlLicgdG8gaXRzIG9yaWdpbmFsIGNvbnRlbnQuPC9lcnJvcj4nKTsKZmlsZV9wdXRfY29udGVudHMoJGpzb24tPmdldFBhdGgoKSwgJGNvbXBvc2VyQmFja3VwKTsKfQoKcmV0dXJuICRzdGF0dXM7Cn0KCnByaXZhdGUgZnVuY3Rpb24gdXBkYXRlRmlsZUNsZWFubHkoJGpzb24sIGFycmF5ICRiYXNlLCBhcnJheSAkbmV3LCAkcmVxdWlyZUtleSwgJHJlbW92ZUtleSkKewokY29udGVudHMgPSBmaWxlX2dldF9jb250ZW50cygkanNvbi0+Z2V0UGF0aCgpKTsKCiRtYW5pcHVsYXRvciA9IG5ldyBKc29uTWFuaXB1bGF0b3IoJGNvbnRlbnRzKTsKCmZvcmVhY2ggKCRuZXcgYXMgJHBhY2thZ2UgPT4gJGNvbnN0cmFpbnQpIHsKaWYgKCEkbWFuaXB1bGF0b3ItPmFkZExpbmsoJHJlcXVpcmVLZXksICRwYWNrYWdlLCAkY29uc3RyYWludCkpIHsKcmV0dXJuIGZhbHNlOwp9CmlmICghJG1hbmlwdWxhdG9yLT5yZW1vdmVTdWJOb2RlKCRyZW1vdmVLZXksICRwYWNrYWdlKSkgewpyZXR1cm4gZmFsc2U7Cn0KfQoKZmlsZV9wdXRfY29udGVudHMoJGpzb24tPmdldFBhdGgoKSwgJG1hbmlwdWxhdG9yLT5nZXRDb250ZW50cygpKTsKCnJldHVybiB0cnVlOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW50ZXJhY3QoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewpyZXR1cm47Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb21tYW5kOwoKdXNlIENvbXBvc2VyXFBsdWdpblxDb21tYW5kRXZlbnQ7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luRXZlbnRzOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgpjbGFzcyBEdW1wQXV0b2xvYWRDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnZHVtcC1hdXRvbG9hZCcpCi0+c2V0QWxpYXNlcyhhcnJheSgnZHVtcGF1dG9sb2FkJykpCi0+c2V0RGVzY3JpcHRpb24oJ0R1bXBzIHRoZSBhdXRvbG9hZGVyJykKLT5zZXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRPcHRpb24oJ29wdGltaXplJywgJ28nLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ09wdGltaXplcyBQU1IwIHBhY2thZ2VzIHRvIGJlIGxvYWRlZCB3aXRoIGNsYXNzbWFwcyB0b28sIGdvb2QgZm9yIHByb2R1Y3Rpb24uJyksCm5ldyBJbnB1dE9wdGlvbignbm8tZGV2JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEaXNhYmxlcyBhdXRvbG9hZC1kZXYgcnVsZXMuJyksCikpCi0+c2V0SGVscCg8PDxFT1QKPGluZm8+cGhwIGNvbXBvc2VyLnBoYXIgZHVtcC1hdXRvbG9hZDwvaW5mbz4KRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiRjb21wb3NlciA9ICR0aGlzLT5nZXRDb21wb3NlcigpOwoKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnZHVtcC1hdXRvbG9hZCcsICRpbnB1dCwgJG91dHB1dCk7CiRjb21wb3Nlci0+Z2V0RXZlbnREaXNwYXRjaGVyKCktPmRpc3BhdGNoKCRjb21tYW5kRXZlbnQtPmdldE5hbWUoKSwgJGNvbW1hbmRFdmVudCk7CgokaW5zdGFsbGF0aW9uTWFuYWdlciA9ICRjb21wb3Nlci0+Z2V0SW5zdGFsbGF0aW9uTWFuYWdlcigpOwokbG9jYWxSZXBvID0gJGNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRMb2NhbFJlcG9zaXRvcnkoKTsKJHBhY2thZ2UgPSAkY29tcG9zZXItPmdldFBhY2thZ2UoKTsKJGNvbmZpZyA9ICRjb21wb3Nlci0+Z2V0Q29uZmlnKCk7Cgokb3B0aW1pemUgPSAkaW5wdXQtPmdldE9wdGlvbignb3B0aW1pemUnKSB8fCAkY29uZmlnLT5nZXQoJ29wdGltaXplLWF1dG9sb2FkZXInKTsKCmlmICgkb3B0aW1pemUpIHsKJG91dHB1dC0+d3JpdGVsbignPGluZm8+R2VuZXJhdGluZyBvcHRpbWl6ZWQgYXV0b2xvYWQgZmlsZXM8L2luZm8+Jyk7Cn0gZWxzZSB7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPkdlbmVyYXRpbmcgYXV0b2xvYWQgZmlsZXM8L2luZm8+Jyk7Cn0KCiRnZW5lcmF0b3IgPSAkY29tcG9zZXItPmdldEF1dG9sb2FkR2VuZXJhdG9yKCk7CiRnZW5lcmF0b3ItPnNldERldk1vZGUoISRpbnB1dC0+Z2V0T3B0aW9uKCduby1kZXYnKSk7CiRnZW5lcmF0b3ItPmR1bXAoJGNvbmZpZywgJGxvY2FsUmVwbywgJHBhY2thZ2UsICRpbnN0YWxsYXRpb25NYW5hZ2VyLCAnY29tcG9zZXInLCAkb3B0aW1pemUpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcU3RyaW5nSW5wdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgpjbGFzcyBHbG9iYWxDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnZ2xvYmFsJykKLT5zZXREZXNjcmlwdGlvbignQWxsb3dzIHJ1bm5pbmcgY29tbWFuZHMgaW4gdGhlIGdsb2JhbCBjb21wb3NlciBkaXIgKCRDT01QT1NFUl9IT01FKS4nKQotPnNldERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dEFyZ3VtZW50KCdjb21tYW5kLW5hbWUnLCBJbnB1dEFyZ3VtZW50OjpSRVFVSVJFRCwgJycpLApuZXcgSW5wdXRBcmd1bWVudCgnYXJncycsIElucHV0QXJndW1lbnQ6OklTX0FSUkFZIHwgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICcnKSwKKSkKLT5zZXRIZWxwKDw8PEVPVApVc2UgdGhpcyBjb21tYW5kIGFzIGEgd3JhcHBlciB0byBydW4gb3RoZXIgQ29tcG9zZXIgY29tbWFuZHMKd2l0aGluIHRoZSBnbG9iYWwgY29udGV4dCBvZiBDT01QT1NFUl9IT01FLgoKWW91IGNhbiB1c2UgdGhpcyB0byBpbnN0YWxsIENMSSB1dGlsaXRpZXMgZ2xvYmFsbHksIGFsbCB5b3UgbmVlZAppcyB0byBhZGQgdGhlIENPTVBPU0VSX0hPTUUvdmVuZG9yL2JpbiBkaXIgdG8geW91ciBQQVRIIGVudiB2YXIuCgpDT01QT1NFUl9IT01FIGlzIGM6XFVzZXJzXDx1c2VyPlxBcHBEYXRhXFJvYW1pbmdcQ29tcG9zZXIgb24gV2luZG93cwphbmQgL2hvbWUvPHVzZXI+Ly5jb21wb3NlciBvbiB1bml4IHN5c3RlbXMuCgpOb3RlOiBUaGlzIHBhdGggbWF5IHZhcnkgZGVwZW5kaW5nIG9uIGN1c3RvbWl6YXRpb25zIHRvIGJpbi1kaXIgaW4KY29tcG9zZXIuanNvbiBvciB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBDT01QT1NFUl9CSU5fRElSLgoKRU9UCikKOwp9CgpwdWJsaWMgZnVuY3Rpb24gcnVuKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKCiAkdG9rZW5zID0gcHJlZ19zcGxpdCgne1xzK30nLCAkaW5wdXQtPl9fdG9TdHJpbmcoKSk7CiRhcmdzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHRva2VucyBhcyAkdG9rZW4pIHsKaWYgKCR0b2tlbiAmJiAkdG9rZW5bMF0gIT09ICctJykgewokYXJnc1tdID0gJHRva2VuOwppZiAoY291bnQoJGFyZ3MpID49IDIpIHsKYnJlYWs7Cn0KfQp9CgoKIGlmIChjb3VudCgkYXJncykgPCAyKSB7CnJldHVybiBwYXJlbnQ6OnJ1bigkaW5wdXQsICRvdXRwdXQpOwp9CgoKICRjb25maWcgPSBGYWN0b3J5OjpjcmVhdGVDb25maWcoKTsKY2hkaXIoJGNvbmZpZy0+Z2V0KCdob21lJykpOwokb3V0cHV0LT53cml0ZWxuKCc8aW5mbz5DaGFuZ2VkIGN1cnJlbnQgZGlyZWN0b3J5IHRvICcuJGNvbmZpZy0+Z2V0KCdob21lJykuJzwvaW5mbz4nKTsKCgogJGlucHV0ID0gbmV3IFN0cmluZ0lucHV0KHByZWdfcmVwbGFjZSgne1xiZyg/OmwoPzpvKD86Yig/OmEoPzpsKT8pPyk/KT8pP1xifScsICcnLCAkaW5wdXQtPl9fdG9TdHJpbmcoKSwgMSkpOwoKcmV0dXJuICR0aGlzLT5nZXRBcHBsaWNhdGlvbigpLT5ydW4oJGlucHV0LCAkb3V0cHV0KTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmRcSGVscGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyXERpYWxvZ0hlbHBlciBhcyBCYXNlRGlhbG9nSGVscGVyOwoKY2xhc3MgRGlhbG9nSGVscGVyIGV4dGVuZHMgQmFzZURpYWxvZ0hlbHBlcgp7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFF1ZXN0aW9uKCRxdWVzdGlvbiwgJGRlZmF1bHQgPSBudWxsLCAkc2VwID0gJzonKQp7CnJldHVybiAkZGVmYXVsdCAhPT0gbnVsbCA/CnNwcmludGYoJzxpbmZvPiVzPC9pbmZvPiBbPGNvbW1lbnQ+JXM8L2NvbW1lbnQ+XSVzICcsICRxdWVzdGlvbiwgJGRlZmF1bHQsICRzZXApIDoKc3ByaW50ZignPGluZm8+JXM8L2luZm8+JXMgJywgJHF1ZXN0aW9uLCAkc2VwKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbW1hbmQ7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxEb3dubG9hZGVyXENoYW5nZVJlcG9ydEludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBsdWdpblxDb21tYW5kRXZlbnQ7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luRXZlbnRzOwp1c2UgQ29tcG9zZXJcU2NyaXB0XFNjcmlwdEV2ZW50czsKCgoKCgpjbGFzcyBTdGF0dXNDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnc3RhdHVzJykKLT5zZXREZXNjcmlwdGlvbignU2hvdyBhIGxpc3Qgb2YgbG9jYWxseSBtb2RpZmllZCBwYWNrYWdlcycpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0T3B0aW9uKCd2ZXJib3NlJywgJ3Z8dnZ8dnZ2JywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdTaG93IG1vZGlmaWVkIGZpbGVzIGZvciBlYWNoIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGNoYW5nZXMuJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIHN0YXR1cyBjb21tYW5kIGRpc3BsYXlzIGEgbGlzdCBvZiBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlCmJlZW4gbW9kaWZpZWQgbG9jYWxseS4KCkVPVAopCjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewoKICRjb21wb3NlciA9ICR0aGlzLT5nZXRDb21wb3NlcigpOwoKJGNvbW1hbmRFdmVudCA9IG5ldyBDb21tYW5kRXZlbnQoUGx1Z2luRXZlbnRzOjpDT01NQU5ELCAnc3RhdHVzJywgJGlucHV0LCAkb3V0cHV0KTsKJGNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+ZGlzcGF0Y2goJGNvbW1hbmRFdmVudC0+Z2V0TmFtZSgpLCAkY29tbWFuZEV2ZW50KTsKCiRpbnN0YWxsZWRSZXBvID0gJGNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRMb2NhbFJlcG9zaXRvcnkoKTsKCiRkbSA9ICRjb21wb3Nlci0+Z2V0RG93bmxvYWRNYW5hZ2VyKCk7CiRpbSA9ICRjb21wb3Nlci0+Z2V0SW5zdGFsbGF0aW9uTWFuYWdlcigpOwoKCiAkY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaENvbW1hbmRFdmVudChTY3JpcHRFdmVudHM6OlBSRV9TVEFUVVNfQ01ELCB0cnVlKTsKCiRlcnJvcnMgPSBhcnJheSgpOwoKCiBmb3JlYWNoICgkaW5zdGFsbGVkUmVwby0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewokZG93bmxvYWRlciA9ICRkbS0+Z2V0RG93bmxvYWRlckZvckluc3RhbGxlZFBhY2thZ2UoJHBhY2thZ2UpOwoKaWYgKCRkb3dubG9hZGVyIGluc3RhbmNlb2YgQ2hhbmdlUmVwb3J0SW50ZXJmYWNlKSB7CiR0YXJnZXREaXIgPSAkaW0tPmdldEluc3RhbGxQYXRoKCRwYWNrYWdlKTsKCmlmICgkY2hhbmdlcyA9ICRkb3dubG9hZGVyLT5nZXRMb2NhbENoYW5nZXMoJHBhY2thZ2UsICR0YXJnZXREaXIpKSB7CiRlcnJvcnNbJHRhcmdldERpcl0gPSAkY2hhbmdlczsKfQp9Cn0KCgogaWYgKCEkZXJyb3JzKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPk5vIGxvY2FsIGNoYW5nZXM8L2luZm8+Jyk7Cn0gZWxzZSB7CiRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj5Zb3UgaGF2ZSBjaGFuZ2VzIGluIHRoZSBmb2xsb3dpbmcgZGVwZW5kZW5jaWVzOjwvZXJyb3I+Jyk7Cn0KCmZvcmVhY2ggKCRlcnJvcnMgYXMgJHBhdGggPT4gJGNoYW5nZXMpIHsKaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCd2ZXJib3NlJykpIHsKJGluZGVudGVkQ2hhbmdlcyA9IGltcGxvZGUoIlxuIiwgYXJyYXlfbWFwKGZ1bmN0aW9uICgkbGluZSkgewpyZXR1cm4gJyAgICAnIC4gJGxpbmU7Cn0sIGV4cGxvZGUoIlxuIiwgJGNoYW5nZXMpKSk7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPicuJHBhdGguJzwvaW5mbz46Jyk7CiRvdXRwdXQtPndyaXRlbG4oJGluZGVudGVkQ2hhbmdlcyk7Cn0gZWxzZSB7CiRvdXRwdXQtPndyaXRlbG4oJHBhdGgpOwp9Cn0KCmlmICgkZXJyb3JzICYmICEkaW5wdXQtPmdldE9wdGlvbigndmVyYm9zZScpKSB7CiRvdXRwdXQtPndyaXRlbG4oJ1VzZSAtLXZlcmJvc2UgKC12KSB0byBzZWUgbW9kaWZpZWQgZmlsZXMnKTsKfQoKCiAkY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLT5kaXNwYXRjaENvbW1hbmRFdmVudChTY3JpcHRFdmVudHM6OlBPU1RfU1RBVFVTX0NNRCwgdHJ1ZSk7CgpyZXR1cm4gJGVycm9ycyA/IDEgOiAwOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29tbWFuZDsKCnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcRmFjdG9yeTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQmFzZVBhY2thZ2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2l0ZVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFBsYXRmb3JtUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFByb2Nlc3M7CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4ZWN1dGFibGVGaW5kZXI7CgoKCgoKY2xhc3MgSW5pdENvbW1hbmQgZXh0ZW5kcyBDb21tYW5kCnsKcHJpdmF0ZSAkZ2l0Q29uZmlnOwpwcml2YXRlICRyZXBvczsKCnB1YmxpYyBmdW5jdGlvbiBwYXJzZUF1dGhvclN0cmluZygkYXV0aG9yKQp7CmlmIChwcmVnX21hdGNoKCcvXig/UDxuYW1lPlstIFwuLFxwe0x9XCfigJldKykgPCg/UDxlbWFpbD4uKz8pPiQvdScsICRhdXRob3IsICRtYXRjaCkpIHsKaWYgKCR0aGlzLT5pc1ZhbGlkRW1haWwoJG1hdGNoWydlbWFpbCddKSkgewpyZXR1cm4gYXJyYXkoCiduYW1lJyA9PiB0cmltKCRtYXRjaFsnbmFtZSddKSwKJ2VtYWlsJyA9PiAkbWF0Y2hbJ2VtYWlsJ10KKTsKfQp9Cgp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKJ0ludmFsaWQgYXV0aG9yIHN0cmluZy4gIE11c3QgYmUgaW4gdGhlIGZvcm1hdDogJy4KJ0pvaG4gU21pdGggPGpvaG5AZXhhbXBsZS5jb20+JwopOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcwotPnNldE5hbWUoJ2luaXQnKQotPnNldERlc2NyaXB0aW9uKCdDcmVhdGVzIGEgYmFzaWMgY29tcG9zZXIuanNvbiBmaWxlIGluIGN1cnJlbnQgZGlyZWN0b3J5LicpCi0+c2V0RGVmaW5pdGlvbihhcnJheSgKbmV3IElucHV0T3B0aW9uKCduYW1lJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnTmFtZSBvZiB0aGUgcGFja2FnZScpLApuZXcgSW5wdXRPcHRpb24oJ2Rlc2NyaXB0aW9uJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnRGVzY3JpcHRpb24gb2YgcGFja2FnZScpLApuZXcgSW5wdXRPcHRpb24oJ2F1dGhvcicsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9SRVFVSVJFRCwgJ0F1dGhvciBuYW1lIG9mIHBhY2thZ2UnKSwKCiBuZXcgSW5wdXRPcHRpb24oJ2hvbWVwYWdlJywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnSG9tZXBhZ2Ugb2YgcGFja2FnZScpLApuZXcgSW5wdXRPcHRpb24oJ3JlcXVpcmUnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfSVNfQVJSQVkgfCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdQYWNrYWdlIHRvIHJlcXVpcmUgd2l0aCBhIHZlcnNpb24gY29uc3RyYWludCwgZS5nLiBmb28vYmFyOjEuMC4wIG9yIGZvby9iYXI9MS4wLjAgb3IgImZvby9iYXIgMS4wLjAiJyksCm5ldyBJbnB1dE9wdGlvbigncmVxdWlyZS1kZXYnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfSVNfQVJSQVkgfCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdQYWNrYWdlIHRvIHJlcXVpcmUgZm9yIGRldmVsb3BtZW50IHdpdGggYSB2ZXJzaW9uIGNvbnN0cmFpbnQsIGUuZy4gZm9vL2JhcjoxLjAuMCBvciBmb28vYmFyPTEuMC4wIG9yICJmb28vYmFyIDEuMC4wIicpLApuZXcgSW5wdXRPcHRpb24oJ3N0YWJpbGl0eScsICdzJywgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnTWluaW11bSBzdGFiaWxpdHkgKGVtcHR5IG9yIG9uZSBvZjogJy5pbXBsb2RlKCcsICcsIGFycmF5X2tleXMoQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllcykpLicpJyksCm5ldyBJbnB1dE9wdGlvbignbGljZW5zZScsICdsJywgSW5wdXRPcHRpb246OlZBTFVFX1JFUVVJUkVELCAnTGljZW5zZSBvZiBwYWNrYWdlJyksCikpCi0+c2V0SGVscCg8PDxFT1QKVGhlIDxpbmZvPmluaXQ8L2luZm8+IGNvbW1hbmQgY3JlYXRlcyBhIGJhc2ljIGNvbXBvc2VyLmpzb24gZmlsZQppbiB0aGUgY3VycmVudCBkaXJlY3RvcnkuCgo8aW5mbz5waHAgY29tcG9zZXIucGhhciBpbml0PC9pbmZvPgoKRU9UCikKOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiRkaWFsb2cgPSAkdGhpcy0+Z2V0SGVscGVyU2V0KCktPmdldCgnZGlhbG9nJyk7Cgokd2hpdGVsaXN0ID0gYXJyYXkoJ25hbWUnLCAnZGVzY3JpcHRpb24nLCAnYXV0aG9yJywgJ2hvbWVwYWdlJywgJ3JlcXVpcmUnLCAncmVxdWlyZS1kZXYnLCAnc3RhYmlsaXR5JywgJ2xpY2Vuc2UnKTsKCiRvcHRpb25zID0gYXJyYXlfZmlsdGVyKGFycmF5X2ludGVyc2VjdF9rZXkoJGlucHV0LT5nZXRPcHRpb25zKCksIGFycmF5X2ZsaXAoJHdoaXRlbGlzdCkpKTsKCmlmIChpc3NldCgkb3B0aW9uc1snYXV0aG9yJ10pKSB7CiRvcHRpb25zWydhdXRob3JzJ10gPSAkdGhpcy0+Zm9ybWF0QXV0aG9ycygkb3B0aW9uc1snYXV0aG9yJ10pOwp1bnNldCgkb3B0aW9uc1snYXV0aG9yJ10pOwp9CgppZiAoaXNzZXQoJG9wdGlvbnNbJ3N0YWJpbGl0eSddKSkgewokb3B0aW9uc1snbWluaW11bS1zdGFiaWxpdHknXSA9ICRvcHRpb25zWydzdGFiaWxpdHknXTsKdW5zZXQoJG9wdGlvbnNbJ3N0YWJpbGl0eSddKTsKfQoKJG9wdGlvbnNbJ3JlcXVpcmUnXSA9IGlzc2V0KCRvcHRpb25zWydyZXF1aXJlJ10pID8gJHRoaXMtPmZvcm1hdFJlcXVpcmVtZW50cygkb3B0aW9uc1sncmVxdWlyZSddKSA6IG5ldyBcc3RkQ2xhc3M7CmlmIChhcnJheSgpID09PSAkb3B0aW9uc1sncmVxdWlyZSddKSB7CiRvcHRpb25zWydyZXF1aXJlJ10gPSBuZXcgXHN0ZENsYXNzOwp9CgppZiAoaXNzZXQoJG9wdGlvbnNbJ3JlcXVpcmUtZGV2J10pKSB7CiRvcHRpb25zWydyZXF1aXJlLWRldiddID0gJHRoaXMtPmZvcm1hdFJlcXVpcmVtZW50cygkb3B0aW9uc1sncmVxdWlyZS1kZXYnXSkgOwppZiAoYXJyYXkoKSA9PT0gJG9wdGlvbnNbJ3JlcXVpcmUtZGV2J10pIHsKJG9wdGlvbnNbJ3JlcXVpcmUtZGV2J10gPSBuZXcgXHN0ZENsYXNzOwp9Cn0KCiRmaWxlID0gbmV3IEpzb25GaWxlKCdjb21wb3Nlci5qc29uJyk7CgokanNvbiA9ICRmaWxlLT5lbmNvZGUoJG9wdGlvbnMpOwoKaWYgKCRpbnB1dC0+aXNJbnRlcmFjdGl2ZSgpKSB7CiRvdXRwdXQtPndyaXRlbG4oYXJyYXkoCicnLAokanNvbiwKJycKKSk7CmlmICghJGRpYWxvZy0+YXNrQ29uZmlybWF0aW9uKCRvdXRwdXQsICRkaWFsb2ctPmdldFF1ZXN0aW9uKCdEbyB5b3UgY29uZmlybSBnZW5lcmF0aW9uJywgJ3llcycsICc/JyksIHRydWUpKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj5Db21tYW5kIGFib3J0ZWQ8L2Vycm9yPicpOwoKcmV0dXJuIDE7Cn0KfQoKJGZpbGUtPndyaXRlKCRvcHRpb25zKTsKCmlmICgkaW5wdXQtPmlzSW50ZXJhY3RpdmUoKSAmJiBpc19kaXIoJy5naXQnKSkgewokaWdub3JlRmlsZSA9IHJlYWxwYXRoKCcuZ2l0aWdub3JlJyk7CgppZiAoZmFsc2UgPT09ICRpZ25vcmVGaWxlKSB7CiRpZ25vcmVGaWxlID0gcmVhbHBhdGgoJy4nKSAuICcvLmdpdGlnbm9yZSc7Cn0KCmlmICghJHRoaXMtPmhhc1ZlbmRvcklnbm9yZSgkaWdub3JlRmlsZSkpIHsKJHF1ZXN0aW9uID0gJ1dvdWxkIHlvdSBsaWtlIHRoZSA8aW5mbz52ZW5kb3I8L2luZm8+IGRpcmVjdG9yeSBhZGRlZCB0byB5b3VyIDxpbmZvPi5naXRpZ25vcmU8L2luZm8+IFs8Y29tbWVudD55ZXM8L2NvbW1lbnQ+XT8nOwoKaWYgKCRkaWFsb2ctPmFza0NvbmZpcm1hdGlvbigkb3V0cHV0LCAkcXVlc3Rpb24sIHRydWUpKSB7CiR0aGlzLT5hZGRWZW5kb3JJZ25vcmUoJGlnbm9yZUZpbGUpOwp9Cn0KfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW50ZXJhY3QoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokZ2l0ID0gJHRoaXMtPmdldEdpdENvbmZpZygpOwoKJGRpYWxvZyA9ICR0aGlzLT5nZXRIZWxwZXJTZXQoKS0+Z2V0KCdkaWFsb2cnKTsKJGZvcm1hdHRlciA9ICR0aGlzLT5nZXRIZWxwZXJTZXQoKS0+Z2V0KCdmb3JtYXR0ZXInKTsKJG91dHB1dC0+d3JpdGVsbihhcnJheSgKJycsCiRmb3JtYXR0ZXItPmZvcm1hdEJsb2NrKCdXZWxjb21lIHRvIHRoZSBDb21wb3NlciBjb25maWcgZ2VuZXJhdG9yJywgJ2JnPWJsdWU7Zmc9d2hpdGUnLCB0cnVlKSwKJycKKSk7CgoKICRvdXRwdXQtPndyaXRlbG4oYXJyYXkoCicnLAonVGhpcyBjb21tYW5kIHdpbGwgZ3VpZGUgeW91IHRocm91Z2ggY3JlYXRpbmcgeW91ciBjb21wb3Nlci5qc29uIGNvbmZpZy4nLAonJywKKSk7CgokY3dkID0gcmVhbHBhdGgoIi4iKTsKCmlmICghJG5hbWUgPSAkaW5wdXQtPmdldE9wdGlvbignbmFtZScpKSB7CiRuYW1lID0gYmFzZW5hbWUoJGN3ZCk7CiRuYW1lID0gcHJlZ19yZXBsYWNlKCd7KD86KFthLXpdKShbQS1aXSl8KFtBLVpdKShbQS1aXVthLXpdKSl9JywgJ1xcMVxcMy1cXDJcXDQnLCAkbmFtZSk7CiRuYW1lID0gc3RydG9sb3dlcigkbmFtZSk7CmlmIChpc3NldCgkZ2l0WydnaXRodWIudXNlciddKSkgewokbmFtZSA9ICRnaXRbJ2dpdGh1Yi51c2VyJ10gLiAnLycgLiAkbmFtZTsKfSBlbHNlaWYgKCFlbXB0eSgkX1NFUlZFUlsnVVNFUk5BTUUnXSkpIHsKJG5hbWUgPSAkX1NFUlZFUlsnVVNFUk5BTUUnXSAuICcvJyAuICRuYW1lOwp9IGVsc2VpZiAoZ2V0X2N1cnJlbnRfdXNlcigpKSB7CiRuYW1lID0gZ2V0X2N1cnJlbnRfdXNlcigpIC4gJy8nIC4gJG5hbWU7Cn0gZWxzZSB7CgogJG5hbWUgPSAkbmFtZSAuICcvJyAuICRuYW1lOwp9Cn0gZWxzZSB7CmlmICghcHJlZ19tYXRjaCgne15bYS16MC05Xy4tXSsvW2EtejAtOV8uLV0rJH0nLCAkbmFtZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCidUaGUgcGFja2FnZSBuYW1lICcuJG5hbWUuJyBpcyBpbnZhbGlkLCBpdCBzaG91bGQgYmUgbG93ZXJjYXNlIGFuZCBoYXZlIGEgdmVuZG9yIG5hbWUsIGEgZm9yd2FyZCBzbGFzaCwgYW5kIGEgcGFja2FnZSBuYW1lLCBtYXRjaGluZzogW2EtejAtOV8uLV0rL1thLXowLTlfLi1dKycKKTsKfQp9CgokbmFtZSA9ICRkaWFsb2ctPmFza0FuZFZhbGlkYXRlKAokb3V0cHV0LAokZGlhbG9nLT5nZXRRdWVzdGlvbignUGFja2FnZSBuYW1lICg8dmVuZG9yPi88bmFtZT4pJywgJG5hbWUpLApmdW5jdGlvbiAoJHZhbHVlKSB1c2UgKCRuYW1lKSB7CmlmIChudWxsID09PSAkdmFsdWUpIHsKcmV0dXJuICRuYW1lOwp9CgppZiAoIXByZWdfbWF0Y2goJ3teW2EtejAtOV8uLV0rL1thLXowLTlfLi1dKyR9JywgJHZhbHVlKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKJ1RoZSBwYWNrYWdlIG5hbWUgJy4kdmFsdWUuJyBpcyBpbnZhbGlkLCBpdCBzaG91bGQgYmUgbG93ZXJjYXNlIGFuZCBoYXZlIGEgdmVuZG9yIG5hbWUsIGEgZm9yd2FyZCBzbGFzaCwgYW5kIGEgcGFja2FnZSBuYW1lLCBtYXRjaGluZzogW2EtejAtOV8uLV0rL1thLXowLTlfLi1dKycKKTsKfQoKcmV0dXJuICR2YWx1ZTsKfQopOwokaW5wdXQtPnNldE9wdGlvbignbmFtZScsICRuYW1lKTsKCiRkZXNjcmlwdGlvbiA9ICRpbnB1dC0+Z2V0T3B0aW9uKCdkZXNjcmlwdGlvbicpID86IGZhbHNlOwokZGVzY3JpcHRpb24gPSAkZGlhbG9nLT5hc2soCiRvdXRwdXQsCiRkaWFsb2ctPmdldFF1ZXN0aW9uKCdEZXNjcmlwdGlvbicsICRkZXNjcmlwdGlvbiksCiRkZXNjcmlwdGlvbgopOwokaW5wdXQtPnNldE9wdGlvbignZGVzY3JpcHRpb24nLCAkZGVzY3JpcHRpb24pOwoKaWYgKG51bGwgPT09ICRhdXRob3IgPSAkaW5wdXQtPmdldE9wdGlvbignYXV0aG9yJykpIHsKaWYgKGlzc2V0KCRnaXRbJ3VzZXIubmFtZSddKSAmJiBpc3NldCgkZ2l0Wyd1c2VyLmVtYWlsJ10pKSB7CiRhdXRob3IgPSBzcHJpbnRmKCclcyA8JXM+JywgJGdpdFsndXNlci5uYW1lJ10sICRnaXRbJ3VzZXIuZW1haWwnXSk7Cn0KfQoKJHNlbGYgPSAkdGhpczsKJGF1dGhvciA9ICRkaWFsb2ctPmFza0FuZFZhbGlkYXRlKAokb3V0cHV0LAokZGlhbG9nLT5nZXRRdWVzdGlvbignQXV0aG9yJywgJGF1dGhvciksCmZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHNlbGYsICRhdXRob3IpIHsKaWYgKG51bGwgPT09ICR2YWx1ZSkgewpyZXR1cm4gJGF1dGhvcjsKfQoKJGF1dGhvciA9ICRzZWxmLT5wYXJzZUF1dGhvclN0cmluZygkdmFsdWUpOwoKcmV0dXJuIHNwcmludGYoJyVzIDwlcz4nLCAkYXV0aG9yWyduYW1lJ10sICRhdXRob3JbJ2VtYWlsJ10pOwp9Cik7CiRpbnB1dC0+c2V0T3B0aW9uKCdhdXRob3InLCAkYXV0aG9yKTsKCiRtaW5pbXVtU3RhYmlsaXR5ID0gJGlucHV0LT5nZXRPcHRpb24oJ3N0YWJpbGl0eScpID86ICcnOwokbWluaW11bVN0YWJpbGl0eSA9ICRkaWFsb2ctPmFza0FuZFZhbGlkYXRlKAokb3V0cHV0LAokZGlhbG9nLT5nZXRRdWVzdGlvbignTWluaW11bSBTdGFiaWxpdHknLCAkbWluaW11bVN0YWJpbGl0eSksCmZ1bmN0aW9uICgkdmFsdWUpIHVzZSAoJHNlbGYsICRtaW5pbXVtU3RhYmlsaXR5KSB7CmlmIChudWxsID09PSAkdmFsdWUpIHsKcmV0dXJuICRtaW5pbXVtU3RhYmlsaXR5Owp9CgppZiAoIWlzc2V0KEJhc2VQYWNrYWdlOjokc3RhYmlsaXRpZXNbJHZhbHVlXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oCidJbnZhbGlkIG1pbmltdW0gc3RhYmlsaXR5ICInLiR2YWx1ZS4nIi4gTXVzdCBiZSBlbXB0eSBvciBvbmUgb2Y6ICcuCmltcGxvZGUoJywgJywgYXJyYXlfa2V5cyhCYXNlUGFja2FnZTo6JHN0YWJpbGl0aWVzKSkKKTsKfQoKcmV0dXJuICR2YWx1ZTsKfQopOwokaW5wdXQtPnNldE9wdGlvbignc3RhYmlsaXR5JywgJG1pbmltdW1TdGFiaWxpdHkpOwoKJGxpY2Vuc2UgPSAkaW5wdXQtPmdldE9wdGlvbignbGljZW5zZScpID86IGZhbHNlOwokbGljZW5zZSA9ICRkaWFsb2ctPmFzaygKJG91dHB1dCwKJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ0xpY2Vuc2UnLCAkbGljZW5zZSksCiRsaWNlbnNlCik7CiRpbnB1dC0+c2V0T3B0aW9uKCdsaWNlbnNlJywgJGxpY2Vuc2UpOwoKJG91dHB1dC0+d3JpdGVsbihhcnJheSgKJycsCidEZWZpbmUgeW91ciBkZXBlbmRlbmNpZXMuJywKJycKKSk7CgokcmVxdWlyZW1lbnRzID0gYXJyYXkoKTsKaWYgKCRkaWFsb2ctPmFza0NvbmZpcm1hdGlvbigkb3V0cHV0LCAkZGlhbG9nLT5nZXRRdWVzdGlvbignV291bGQgeW91IGxpa2UgdG8gZGVmaW5lIHlvdXIgZGVwZW5kZW5jaWVzIChyZXF1aXJlKSBpbnRlcmFjdGl2ZWx5JywgJ3llcycsICc/JyksIHRydWUpKSB7CiRyZXF1aXJlbWVudHMgPSAkdGhpcy0+ZGV0ZXJtaW5lUmVxdWlyZW1lbnRzKCRpbnB1dCwgJG91dHB1dCwgJGlucHV0LT5nZXRPcHRpb24oJ3JlcXVpcmUnKSk7Cn0KJGlucHV0LT5zZXRPcHRpb24oJ3JlcXVpcmUnLCAkcmVxdWlyZW1lbnRzKTsKJGRldlJlcXVpcmVtZW50cyA9IGFycmF5KCk7CmlmICgkZGlhbG9nLT5hc2tDb25maXJtYXRpb24oJG91dHB1dCwgJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ1dvdWxkIHlvdSBsaWtlIHRvIGRlZmluZSB5b3VyIGRldiBkZXBlbmRlbmNpZXMgKHJlcXVpcmUtZGV2KSBpbnRlcmFjdGl2ZWx5JywgJ3llcycsICc/JyksIHRydWUpKSB7CiRkZXZSZXF1aXJlbWVudHMgPSAkdGhpcy0+ZGV0ZXJtaW5lUmVxdWlyZW1lbnRzKCRpbnB1dCwgJG91dHB1dCwgJGlucHV0LT5nZXRPcHRpb24oJ3JlcXVpcmUtZGV2JykpOwp9CiRpbnB1dC0+c2V0T3B0aW9uKCdyZXF1aXJlLWRldicsICRkZXZSZXF1aXJlbWVudHMpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZmluZFBhY2thZ2VzKCRuYW1lKQp7CiRwYWNrYWdlcyA9IGFycmF5KCk7CgoKIGlmICghJHRoaXMtPnJlcG9zKSB7CiR0aGlzLT5yZXBvcyA9IG5ldyBDb21wb3NpdGVSZXBvc2l0b3J5KGFycmF5X21lcmdlKAphcnJheShuZXcgUGxhdGZvcm1SZXBvc2l0b3J5KSwKRmFjdG9yeTo6Y3JlYXRlRGVmYXVsdFJlcG9zaXRvcmllcygkdGhpcy0+Z2V0SU8oKSkKKSk7Cn0KCnJldHVybiAkdGhpcy0+cmVwb3MtPnNlYXJjaCgkbmFtZSk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBkZXRlcm1pbmVSZXF1aXJlbWVudHMoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHJlcXVpcmVzID0gYXJyYXkoKSkKewokZGlhbG9nID0gJHRoaXMtPmdldEhlbHBlclNldCgpLT5nZXQoJ2RpYWxvZycpOwokcHJvbXB0ID0gJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ1NlYXJjaCBmb3IgYSBwYWNrYWdlJywgZmFsc2UsICc6Jyk7CgppZiAoJHJlcXVpcmVzKSB7CiRyZXF1aXJlcyA9ICR0aGlzLT5ub3JtYWxpemVSZXF1aXJlbWVudHMoJHJlcXVpcmVzKTsKJHJlc3VsdCA9IGFycmF5KCk7Cgpmb3JlYWNoICgkcmVxdWlyZXMgYXMgJGtleSA9PiAkcmVxdWlyZW1lbnQpIHsKaWYgKCFpc3NldCgkcmVxdWlyZW1lbnRbJ3ZlcnNpb24nXSkgJiYgJGlucHV0LT5pc0ludGVyYWN0aXZlKCkpIHsKJHF1ZXN0aW9uID0gJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ1BsZWFzZSBwcm92aWRlIGEgdmVyc2lvbiBjb25zdHJhaW50IGZvciB0aGUgJy4kcmVxdWlyZW1lbnRbJ25hbWUnXS4nIHJlcXVpcmVtZW50Jyk7CmlmICgkY29uc3RyYWludCA9ICRkaWFsb2ctPmFzaygkb3V0cHV0LCAkcXVlc3Rpb24pKSB7CiRyZXF1aXJlbWVudFsndmVyc2lvbiddID0gJGNvbnN0cmFpbnQ7Cn0KfQppZiAoIWlzc2V0KCRyZXF1aXJlbWVudFsndmVyc2lvbiddKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHJlcXVpcmVtZW50ICcuJHJlcXVpcmVtZW50WyduYW1lJ10uJyBtdXN0IGNvbnRhaW4gYSB2ZXJzaW9uIGNvbnN0cmFpbnQnKTsKfQoKJHJlc3VsdFtdID0gJHJlcXVpcmVtZW50WyduYW1lJ10gLiAnICcgLiAkcmVxdWlyZW1lbnRbJ3ZlcnNpb24nXTsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCndoaWxlIChudWxsICE9PSAkcGFja2FnZSA9ICRkaWFsb2ctPmFzaygkb3V0cHV0LCAkcHJvbXB0KSkgewokbWF0Y2hlcyA9ICR0aGlzLT5maW5kUGFja2FnZXMoJHBhY2thZ2UpOwoKaWYgKGNvdW50KCRtYXRjaGVzKSkgewokb3V0cHV0LT53cml0ZWxuKGFycmF5KAonJywKc3ByaW50ZignRm91bmQgPGluZm8+JXM8L2luZm8+IHBhY2thZ2VzIG1hdGNoaW5nIDxpbmZvPiVzPC9pbmZvPicsIGNvdW50KCRtYXRjaGVzKSwgJHBhY2thZ2UpLAonJwopKTsKCiRleGFjdE1hdGNoID0gbnVsbDsKJGNob2ljZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkbWF0Y2hlcyBhcyAkcG9zaXRpb24gPT4gJHBhY2thZ2UpIHsKJGNob2ljZXNbXSA9IHNwcmludGYoJyA8aW5mbz4lNXM8L2luZm8+ICVzJywgIlskcG9zaXRpb25dIiwgJHBhY2thZ2VbJ25hbWUnXSk7CmlmICgkcGFja2FnZVsnbmFtZSddID09PSAkcGFja2FnZSkgewokZXhhY3RNYXRjaCA9IHRydWU7CmJyZWFrOwp9Cn0KCgogaWYgKCEkZXhhY3RNYXRjaCkgewokb3V0cHV0LT53cml0ZWxuKCRjaG9pY2VzKTsKJG91dHB1dC0+d3JpdGVsbignJyk7CgokdmFsaWRhdG9yID0gZnVuY3Rpb24gKCRzZWxlY3Rpb24pIHVzZSAoJG1hdGNoZXMpIHsKaWYgKCcnID09PSAkc2VsZWN0aW9uKSB7CnJldHVybiBmYWxzZTsKfQoKaWYgKCFpc19udW1lcmljKCRzZWxlY3Rpb24pICYmIHByZWdfbWF0Y2goJ3teXHMqKFxTKylccysoXFMuKilccyokfScsICRzZWxlY3Rpb24sICRtYXRjaGVzKSkgewpyZXR1cm4gJG1hdGNoZXNbMV0uJyAnLiRtYXRjaGVzWzJdOwp9CgppZiAoIWlzc2V0KCRtYXRjaGVzWyhpbnQpICRzZWxlY3Rpb25dKSkgewp0aHJvdyBuZXcgXEV4Y2VwdGlvbignTm90IGEgdmFsaWQgc2VsZWN0aW9uJyk7Cn0KCiRwYWNrYWdlID0gJG1hdGNoZXNbKGludCkgJHNlbGVjdGlvbl07CgpyZXR1cm4gJHBhY2thZ2VbJ25hbWUnXTsKfTsKCiRwYWNrYWdlID0gJGRpYWxvZy0+YXNrQW5kVmFsaWRhdGUoJG91dHB1dCwgJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ0VudGVyIHBhY2thZ2UgIyB0byBhZGQsIG9yIHRoZSBjb21wbGV0ZSBwYWNrYWdlIG5hbWUgaWYgaXQgaXMgbm90IGxpc3RlZCcsIGZhbHNlLCAnOicpLCAkdmFsaWRhdG9yLCAzKTsKfQoKCiBpZiAoZmFsc2UgIT09ICRwYWNrYWdlICYmIGZhbHNlID09PSBzdHJwb3MoJHBhY2thZ2UsICcgJykpIHsKJHZhbGlkYXRvciA9IGZ1bmN0aW9uICgkaW5wdXQpIHsKJGlucHV0ID0gdHJpbSgkaW5wdXQpOwoKcmV0dXJuICRpbnB1dCA/OiBmYWxzZTsKfTsKCiRjb25zdHJhaW50ID0gJGRpYWxvZy0+YXNrQW5kVmFsaWRhdGUoJG91dHB1dCwgJGRpYWxvZy0+Z2V0UXVlc3Rpb24oJ0VudGVyIHRoZSB2ZXJzaW9uIGNvbnN0cmFpbnQgdG8gcmVxdWlyZScsIGZhbHNlLCAnOicpLCAkdmFsaWRhdG9yLCAzKTsKaWYgKGZhbHNlID09PSAkY29uc3RyYWludCkgewpjb250aW51ZTsKfQoKJHBhY2thZ2UgLj0gJyAnLiRjb25zdHJhaW50Owp9CgppZiAoZmFsc2UgIT09ICRwYWNrYWdlKSB7CiRyZXF1aXJlc1tdID0gJHBhY2thZ2U7Cn0KfQp9CgpyZXR1cm4gJHJlcXVpcmVzOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZm9ybWF0QXV0aG9ycygkYXV0aG9yKQp7CnJldHVybiBhcnJheSgkdGhpcy0+cGFyc2VBdXRob3JTdHJpbmcoJGF1dGhvcikpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZm9ybWF0UmVxdWlyZW1lbnRzKGFycmF5ICRyZXF1aXJlbWVudHMpCnsKJHJlcXVpcmVzID0gYXJyYXkoKTsKJHJlcXVpcmVtZW50cyA9ICR0aGlzLT5ub3JtYWxpemVSZXF1aXJlbWVudHMoJHJlcXVpcmVtZW50cyk7CmZvcmVhY2ggKCRyZXF1aXJlbWVudHMgYXMgJHJlcXVpcmVtZW50KSB7CiRyZXF1aXJlc1skcmVxdWlyZW1lbnRbJ25hbWUnXV0gPSAkcmVxdWlyZW1lbnRbJ3ZlcnNpb24nXTsKfQoKcmV0dXJuICRyZXF1aXJlczsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEdpdENvbmZpZygpCnsKaWYgKG51bGwgIT09ICR0aGlzLT5naXRDb25maWcpIHsKcmV0dXJuICR0aGlzLT5naXRDb25maWc7Cn0KCiRmaW5kZXIgPSBuZXcgRXhlY3V0YWJsZUZpbmRlcigpOwokZ2l0QmluID0gJGZpbmRlci0+ZmluZCgnZ2l0Jyk7CgokY21kID0gbmV3IFByb2Nlc3Moc3ByaW50ZignJXMgY29uZmlnIC1sJywgZXNjYXBlc2hlbGxhcmcoJGdpdEJpbikpKTsKJGNtZC0+cnVuKCk7CgppZiAoJGNtZC0+aXNTdWNjZXNzZnVsKCkpIHsKJHRoaXMtPmdpdENvbmZpZyA9IGFycmF5KCk7CnByZWdfbWF0Y2hfYWxsKCd7XihbXj1dKyk9KC4qKSR9bScsICRjbWQtPmdldE91dHB1dCgpLCAkbWF0Y2hlcywgUFJFR19TRVRfT1JERVIpOwpmb3JlYWNoICgkbWF0Y2hlcyBhcyAkbWF0Y2gpIHsKJHRoaXMtPmdpdENvbmZpZ1skbWF0Y2hbMV1dID0gJG1hdGNoWzJdOwp9CgpyZXR1cm4gJHRoaXMtPmdpdENvbmZpZzsKfQoKcmV0dXJuICR0aGlzLT5naXRDb25maWcgPSBhcnJheSgpOwp9CgoKCgoKCgoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGhhc1ZlbmRvcklnbm9yZSgkaWdub3JlRmlsZSwgJHZlbmRvciA9ICd2ZW5kb3InKQp7CmlmICghZmlsZV9leGlzdHMoJGlnbm9yZUZpbGUpKSB7CnJldHVybiBmYWxzZTsKfQoKJHBhdHRlcm4gPSBzcHJpbnRmKCd7Xi8/JXMoL1wqPyk/JH0nLCBwcmVnX3F1b3RlKCR2ZW5kb3IpKTsKCiRsaW5lcyA9IGZpbGUoJGlnbm9yZUZpbGUsIEZJTEVfSUdOT1JFX05FV19MSU5FUyk7CmZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZSkgewppZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJGxpbmUpKSB7CnJldHVybiB0cnVlOwp9Cn0KCnJldHVybiBmYWxzZTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIG5vcm1hbGl6ZVJlcXVpcmVtZW50cyhhcnJheSAkcmVxdWlyZW1lbnRzKQp7CiRwYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwoKcmV0dXJuICRwYXJzZXItPnBhcnNlTmFtZVZlcnNpb25QYWlycygkcmVxdWlyZW1lbnRzKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZFZlbmRvcklnbm9yZSgkaWdub3JlRmlsZSwgJHZlbmRvciA9ICcvdmVuZG9yLycpCnsKJGNvbnRlbnRzID0gIiI7CmlmIChmaWxlX2V4aXN0cygkaWdub3JlRmlsZSkpIHsKJGNvbnRlbnRzID0gZmlsZV9nZXRfY29udGVudHMoJGlnbm9yZUZpbGUpOwoKaWYgKCJcbiIgIT09IHN1YnN0cigkY29udGVudHMsIDAsIC0xKSkgewokY29udGVudHMgLj0gIlxuIjsKfQp9CgpmaWxlX3B1dF9jb250ZW50cygkaWdub3JlRmlsZSwgJGNvbnRlbnRzIC4gJHZlbmRvci4gIlxuIik7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBpc1ZhbGlkRW1haWwoJGVtYWlsKQp7CgogaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2ZpbHRlcl92YXInKSkgewpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAodmVyc2lvbl9jb21wYXJlKFBIUF9WRVJTSU9OLCAnNS4zLjMnLCAnPCcpKSB7CnJldHVybiB0cnVlOwp9CgpyZXR1cm4gZmFsc2UgIT09IGZpbHRlcl92YXIoJGVtYWlsLCBGSUxURVJfVkFMSURBVEVfRU1BSUwpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFV0aWxcUHJvY2Vzc0V4ZWN1dG9yOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxVdGlsXEZpbGVzeXN0ZW07CgoKCgphYnN0cmFjdCBjbGFzcyBWY3NEb3dubG9hZGVyIGltcGxlbWVudHMgRG93bmxvYWRlckludGVyZmFjZSwgQ2hhbmdlUmVwb3J0SW50ZXJmYWNlCnsKcHJvdGVjdGVkICRpbzsKcHJvdGVjdGVkICRjb25maWc7CnByb3RlY3RlZCAkcHJvY2VzczsKcHJvdGVjdGVkICRmaWxlc3lzdGVtOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcyA9IG51bGwsIEZpbGVzeXN0ZW0gJGZzID0gbnVsbCkKewokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5jb25maWcgPSAkY29uZmlnOwokdGhpcy0+cHJvY2VzcyA9ICRwcm9jZXNzID86IG5ldyBQcm9jZXNzRXhlY3V0b3IoJGlvKTsKJHRoaXMtPmZpbGVzeXN0ZW0gPSAkZnMgPzogbmV3IEZpbGVzeXN0ZW07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25Tb3VyY2UoKQp7CnJldHVybiAnc291cmNlJzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGRvd25sb2FkKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CmlmICghJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYWNrYWdlICcuJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKS4nIGlzIG1pc3NpbmcgcmVmZXJlbmNlIGluZm9ybWF0aW9uJyk7Cn0KCiR0aGlzLT5pby0+d3JpdGUoIiAgLSBJbnN0YWxsaW5nIDxpbmZvPiIgLiAkcGFja2FnZS0+Z2V0TmFtZSgpIC4gIjwvaW5mbz4gKDxjb21tZW50PiIgLiBWZXJzaW9uUGFyc2VyOjpmb3JtYXRWZXJzaW9uKCRwYWNrYWdlKSAuICI8L2NvbW1lbnQ+KSIpOwokdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRwYXRoKTsKJHRoaXMtPmRvRG93bmxvYWQoJHBhY2thZ2UsICRwYXRoKTsKJHRoaXMtPmlvLT53cml0ZSgnJyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0LCAkcGF0aCkKewppZiAoISR0YXJnZXQtPmdldFNvdXJjZVJlZmVyZW5jZSgpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYWNrYWdlICcuJHRhcmdldC0+Z2V0UHJldHR5TmFtZSgpLicgaXMgbWlzc2luZyByZWZlcmVuY2UgaW5mb3JtYXRpb24nKTsKfQoKJG5hbWUgPSAkdGFyZ2V0LT5nZXROYW1lKCk7CmlmICgkaW5pdGlhbC0+Z2V0UHJldHR5VmVyc2lvbigpID09ICR0YXJnZXQtPmdldFByZXR0eVZlcnNpb24oKSkgewppZiAoJHRhcmdldC0+Z2V0U291cmNlVHlwZSgpID09PSAnc3ZuJykgewokZnJvbSA9ICRpbml0aWFsLT5nZXRTb3VyY2VSZWZlcmVuY2UoKTsKJHRvID0gJHRhcmdldC0+Z2V0U291cmNlUmVmZXJlbmNlKCk7Cn0gZWxzZSB7CiRmcm9tID0gc3Vic3RyKCRpbml0aWFsLT5nZXRTb3VyY2VSZWZlcmVuY2UoKSwgMCwgNyk7CiR0byA9IHN1YnN0cigkdGFyZ2V0LT5nZXRTb3VyY2VSZWZlcmVuY2UoKSwgMCwgNyk7Cn0KJG5hbWUgLj0gJyAnLiRpbml0aWFsLT5nZXRQcmV0dHlWZXJzaW9uKCk7Cn0gZWxzZSB7CiRmcm9tID0gVmVyc2lvblBhcnNlcjo6Zm9ybWF0VmVyc2lvbigkaW5pdGlhbCk7CiR0byA9IFZlcnNpb25QYXJzZXI6OmZvcm1hdFZlcnNpb24oJHRhcmdldCk7Cn0KCiR0aGlzLT5pby0+d3JpdGUoIiAgLSBVcGRhdGluZyA8aW5mbz4iIC4gJG5hbWUgLiAiPC9pbmZvPiAoPGNvbW1lbnQ+IiAuICRmcm9tIC4gIjwvY29tbWVudD4gPT4gPGNvbW1lbnQ+IiAuICR0byAuICI8L2NvbW1lbnQ+KSIpOwoKJHRoaXMtPmNsZWFuQ2hhbmdlcygkaW5pdGlhbCwgJHBhdGgsIHRydWUpOwp0cnkgewokdGhpcy0+ZG9VcGRhdGUoJGluaXRpYWwsICR0YXJnZXQsICRwYXRoKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewoKICR0aGlzLT5yZWFwcGx5Q2hhbmdlcygkcGF0aCk7Cgp0aHJvdyAkZTsKfQokdGhpcy0+cmVhcHBseUNoYW5nZXMoJHBhdGgpOwoKCiBpZiAoJHRoaXMtPmlvLT5pc1ZlcmJvc2UoKSkgewokbWVzc2FnZSA9ICdQdWxsaW5nIGluIGNoYW5nZXM6JzsKJGxvZ3MgPSAkdGhpcy0+Z2V0Q29tbWl0TG9ncygkaW5pdGlhbC0+Z2V0U291cmNlUmVmZXJlbmNlKCksICR0YXJnZXQtPmdldFNvdXJjZVJlZmVyZW5jZSgpLCAkcGF0aCk7CgppZiAoIXRyaW0oJGxvZ3MpKSB7CiRtZXNzYWdlID0gJ1JvbGxpbmcgYmFjayBjaGFuZ2VzOic7CiRsb2dzID0gJHRoaXMtPmdldENvbW1pdExvZ3MoJHRhcmdldC0+Z2V0U291cmNlUmVmZXJlbmNlKCksICRpbml0aWFsLT5nZXRTb3VyY2VSZWZlcmVuY2UoKSwgJHBhdGgpOwp9CgppZiAodHJpbSgkbG9ncykpIHsKJGxvZ3MgPSBpbXBsb2RlKCJcbiIsIGFycmF5X21hcChmdW5jdGlvbiAoJGxpbmUpIHsKcmV0dXJuICcgICAgICAnIC4gJGxpbmU7Cn0sIGV4cGxvZGUoIlxuIiwgJGxvZ3MpKSk7CgokdGhpcy0+aW8tPndyaXRlKCcgICAgJy4kbWVzc2FnZSk7CiR0aGlzLT5pby0+d3JpdGUoJGxvZ3MpOwp9Cn0KCiR0aGlzLT5pby0+d3JpdGUoJycpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CiR0aGlzLT5pby0+d3JpdGUoIiAgLSBSZW1vdmluZyA8aW5mbz4iIC4gJHBhY2thZ2UtPmdldE5hbWUoKSAuICI8L2luZm8+ICg8Y29tbWVudD4iIC4gJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSAuICI8L2NvbW1lbnQ+KSIpOwokdGhpcy0+Y2xlYW5DaGFuZ2VzKCRwYWNrYWdlLCAkcGF0aCwgZmFsc2UpOwppZiAoISR0aGlzLT5maWxlc3lzdGVtLT5yZW1vdmVEaXJlY3RvcnkoJHBhdGgpKSB7CgogaWYgKCFkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgfHwgKHVzbGVlcCgyNTApICYmICEkdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRwYXRoKSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgY29tcGxldGVseSBkZWxldGUgJy4kcGF0aC4nLCBhYm9ydGluZy4nKTsKfQp9Cn0KCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0T3V0cHV0UHJvZ3Jlc3MoJG91dHB1dFByb2dyZXNzKQp7CnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuQ2hhbmdlcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCwgJHVwZGF0ZSkKewoKIGlmIChudWxsICE9PSAkdGhpcy0+Z2V0TG9jYWxDaGFuZ2VzKCRwYWNrYWdlLCAkcGF0aCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdTb3VyY2UgZGlyZWN0b3J5ICcgLiAkcGF0aCAuICcgaGFzIHVuY29tbWl0dGVkIGNoYW5nZXMuJyk7Cn0KfQoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHJlYXBwbHlDaGFuZ2VzKCRwYXRoKQp7Cn0KCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkb0Rvd25sb2FkKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKTsKCgoKCgoKCgphYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZG9VcGRhdGUoUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0LCAkcGF0aCk7CgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRDb21taXRMb2dzKCRmcm9tUmVmZXJlbmNlLCAkdG9SZWZlcmVuY2UsICRwYXRoKTsKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKdXNlIENvbXBvc2VyXENvbmZpZzsKdXNlIENvbXBvc2VyXENhY2hlOwp1c2UgQ29tcG9zZXJcRXZlbnREaXNwYXRjaGVyXEV2ZW50RGlzcGF0Y2hlcjsKdXNlIENvbXBvc2VyXFV0aWxcUHJvY2Vzc0V4ZWN1dG9yOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBSYXJBcmNoaXZlOwoKCgoKCgoKCmNsYXNzIFJhckRvd25sb2FkZXIgZXh0ZW5kcyBBcmNoaXZlRG93bmxvYWRlcgp7CnByb3RlY3RlZCAkcHJvY2VzczsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCBFdmVudERpc3BhdGNoZXIgJGV2ZW50RGlzcGF0Y2hlciA9IG51bGwsIENhY2hlICRjYWNoZSA9IG51bGwsIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcyA9IG51bGwpCnsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCRpbyk7CnBhcmVudDo6X19jb25zdHJ1Y3QoJGlvLCAkY29uZmlnLCAkZXZlbnREaXNwYXRjaGVyLCAkY2FjaGUpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXh0cmFjdCgkZmlsZSwgJHBhdGgpCnsKJHByb2Nlc3NFcnJvciA9IG51bGw7CgoKIGlmICghZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CiRjb21tYW5kID0gJ3VucmFyIHggJyAuIGVzY2FwZXNoZWxsYXJnKCRmaWxlKSAuICcgJyAuIGVzY2FwZXNoZWxsYXJnKCRwYXRoKSAuICcgJiYgY2htb2QgLVIgdSt3ICcgLiBlc2NhcGVzaGVsbGFyZygkcGF0aCk7CgppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRpZ25vcmVkT3V0cHV0KSkgewpyZXR1cm47Cn0KCiRwcm9jZXNzRXJyb3IgPSAnRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCk7Cn0KCmlmICghY2xhc3NfZXhpc3RzKCdSYXJBcmNoaXZlJykpIHsKCiAkaW5pUGF0aCA9IHBocF9pbmlfbG9hZGVkX2ZpbGUoKTsKCmlmICgkaW5pUGF0aCkgewokaW5pTWVzc2FnZSA9ICdUaGUgcGhwLmluaSB1c2VkIGJ5IHlvdXIgY29tbWFuZC1saW5lIFBIUCBpczogJyAuICRpbmlQYXRoOwp9IGVsc2UgewokaW5pTWVzc2FnZSA9ICdBIHBocC5pbmkgZmlsZSBkb2VzIG5vdCBleGlzdC4gWW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgb25lLic7Cn0KCiRlcnJvciA9ICJDb3VsZCBub3QgZGVjb21wcmVzcyB0aGUgYXJjaGl2ZSwgZW5hYmxlIHRoZSBQSFAgcmFyIGV4dGVuc2lvbiBvciBpbnN0YWxsIHVucmFyLlxuIgouICRpbmlNZXNzYWdlIC4gIlxuIiAuICRwcm9jZXNzRXJyb3I7CgppZiAoIWRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewokZXJyb3IgPSAiQ291bGQgbm90IGRlY29tcHJlc3MgdGhlIGFyY2hpdmUsIGVuYWJsZSB0aGUgUEhQIHJhciBleHRlbnNpb24uXG4iIC4gJGluaU1lc3NhZ2U7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkZXJyb3IpOwp9CgokcmFyQXJjaGl2ZSA9IFJhckFyY2hpdmU6Om9wZW4oJGZpbGUpOwoKaWYgKGZhbHNlID09PSAkcmFyQXJjaGl2ZSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignQ291bGQgbm90IG9wZW4gUkFSIGFyY2hpdmU6ICcgLiAkZmlsZSk7Cn0KCiRlbnRyaWVzID0gJHJhckFyY2hpdmUtPmdldEVudHJpZXMoKTsKCmlmIChmYWxzZSA9PT0gJGVudHJpZXMpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgcmV0cmlldmUgUkFSIGFyY2hpdmUgZW50cmllcycpOwp9Cgpmb3JlYWNoICgkZW50cmllcyBhcyAkZW50cnkpIHsKaWYgKGZhbHNlID09PSAkZW50cnktPmV4dHJhY3QoJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGV4dHJhY3QgZW50cnknKTsKfQp9CgokcmFyQXJjaGl2ZS0+Y2xvc2UoKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERvd25sb2FkZXI7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcQ2FjaGU7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgQ29tcG9zZXJcUGx1Z2luXFBsdWdpbkV2ZW50czsKdXNlIENvbXBvc2VyXFBsdWdpblxQcmVGaWxlRG93bmxvYWRFdmVudDsKdXNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXI7CnVzZSBDb21wb3NlclxVdGlsXEZpbGVzeXN0ZW07CnVzZSBDb21wb3NlclxVdGlsXEdpdEh1YjsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKCgoKCgoKCgoKY2xhc3MgRmlsZURvd25sb2FkZXIgaW1wbGVtZW50cyBEb3dubG9hZGVySW50ZXJmYWNlCnsKcHJvdGVjdGVkICRpbzsKcHJvdGVjdGVkICRjb25maWc7CnByb3RlY3RlZCAkcmZzOwpwcm90ZWN0ZWQgJGZpbGVzeXN0ZW07CnByb3RlY3RlZCAkY2FjaGU7CnByb3RlY3RlZCAkb3V0cHV0UHJvZ3Jlc3MgPSB0cnVlOwoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCBFdmVudERpc3BhdGNoZXIgJGV2ZW50RGlzcGF0Y2hlciA9IG51bGwsIENhY2hlICRjYWNoZSA9IG51bGwsIFJlbW90ZUZpbGVzeXN0ZW0gJHJmcyA9IG51bGwsIEZpbGVzeXN0ZW0gJGZpbGVzeXN0ZW0gPSBudWxsKQp7CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPmNvbmZpZyA9ICRjb25maWc7CiR0aGlzLT5ldmVudERpc3BhdGNoZXIgPSAkZXZlbnREaXNwYXRjaGVyOwokdGhpcy0+cmZzID0gJHJmcyA/OiBuZXcgUmVtb3RlRmlsZXN5c3RlbSgkaW8sICRjb25maWcpOwokdGhpcy0+ZmlsZXN5c3RlbSA9ICRmaWxlc3lzdGVtID86IG5ldyBGaWxlc3lzdGVtKCk7CiR0aGlzLT5jYWNoZSA9ICRjYWNoZTsKCgppZiAoJHRoaXMtPmNhY2hlICYmICR0aGlzLT5jYWNoZS0+Z2NJc05lY2Vzc2FyeSgpKSB7CiR0aGlzLT5jYWNoZS0+Z2MoJGNvbmZpZy0+Z2V0KCdjYWNoZS1maWxlcy10dGwnKSwgJGNvbmZpZy0+Z2V0KCdjYWNoZS1maWxlcy1tYXhzaXplJykpOwp9Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsYXRpb25Tb3VyY2UoKQp7CnJldHVybiAnZGlzdCc7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBkb3dubG9hZChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewokdXJsID0gJHBhY2thZ2UtPmdldERpc3RVcmwoKTsKaWYgKCEkdXJsKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgZ2l2ZW4gcGFja2FnZSBpcyBtaXNzaW5nIHVybCBpbmZvcm1hdGlvbicpOwp9CgokdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRwYXRoKTsKJHRoaXMtPmZpbGVzeXN0ZW0tPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkcGF0aCk7CgokZmlsZU5hbWUgPSAkdGhpcy0+Z2V0RmlsZU5hbWUoJHBhY2thZ2UsICRwYXRoKTsKCiR0aGlzLT5pby0+d3JpdGUoIiAgLSBJbnN0YWxsaW5nIDxpbmZvPiIgLiAkcGFja2FnZS0+Z2V0TmFtZSgpIC4gIjwvaW5mbz4gKDxjb21tZW50PiIgLiBWZXJzaW9uUGFyc2VyOjpmb3JtYXRWZXJzaW9uKCRwYWNrYWdlKSAuICI8L2NvbW1lbnQ+KSIpOwoKJHByb2Nlc3NlZFVybCA9ICR0aGlzLT5wcm9jZXNzVXJsKCRwYWNrYWdlLCAkdXJsKTsKJGhvc3RuYW1lID0gcGFyc2VfdXJsKCRwcm9jZXNzZWRVcmwsIFBIUF9VUkxfSE9TVCk7CgokcHJlRmlsZURvd25sb2FkRXZlbnQgPSBuZXcgUHJlRmlsZURvd25sb2FkRXZlbnQoUGx1Z2luRXZlbnRzOjpQUkVfRklMRV9ET1dOTE9BRCwgJHRoaXMtPnJmcywgJHByb2Nlc3NlZFVybCk7CmlmICgkdGhpcy0+ZXZlbnREaXNwYXRjaGVyKSB7CiR0aGlzLT5ldmVudERpc3BhdGNoZXItPmRpc3BhdGNoKCRwcmVGaWxlRG93bmxvYWRFdmVudC0+Z2V0TmFtZSgpLCAkcHJlRmlsZURvd25sb2FkRXZlbnQpOwp9CiRyZnMgPSAkcHJlRmlsZURvd25sb2FkRXZlbnQtPmdldFJlbW90ZUZpbGVzeXN0ZW0oKTsKCmlmIChzdHJwb3MoJGhvc3RuYW1lLCAnLmdpdGh1Yi5jb20nKSA9PT0gKHN0cmxlbigkaG9zdG5hbWUpIC0gMTEpKSB7CiRob3N0bmFtZSA9ICdnaXRodWIuY29tJzsKfQoKdHJ5IHsKJGNoZWNrc3VtID0gJHBhY2thZ2UtPmdldERpc3RTaGExQ2hlY2tzdW0oKTsKJGNhY2hlS2V5ID0gJHRoaXMtPmdldENhY2hlS2V5KCRwYWNrYWdlKTsKCgogaWYgKCEkdGhpcy0+Y2FjaGUgfHwgKCRjaGVja3N1bSAmJiAkY2hlY2tzdW0gIT09ICR0aGlzLT5jYWNoZS0+c2hhMSgkY2FjaGVLZXkpKSB8fCAhJHRoaXMtPmNhY2hlLT5jb3B5VG8oJGNhY2hlS2V5LCAkZmlsZU5hbWUpKSB7CmlmICghJHRoaXMtPm91dHB1dFByb2dyZXNzKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICBEb3dubG9hZGluZycpOwp9CgoKICRyZXRyaWVzID0gMzsKd2hpbGUgKCRyZXRyaWVzLS0pIHsKdHJ5IHsKJHJmcy0+Y29weSgkaG9zdG5hbWUsICRwcm9jZXNzZWRVcmwsICRmaWxlTmFtZSwgJHRoaXMtPm91dHB1dFByb2dyZXNzKTsKYnJlYWs7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewoKIGlmICgoMCAhPT0gJGUtPmdldENvZGUoKSAmJiAhaW5fYXJyYXkoJGUtPmdldENvZGUoKSxhcnJheSg1MDAsIDUwMiwgNTAzLCA1MDQpKSkgfHwgISRyZXRyaWVzKSB7CnRocm93ICRlOwp9CmlmICgkdGhpcy0+aW8tPmlzVmVyYm9zZSgpKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICBEb3dubG9hZCBmYWlsZWQsIHJldHJ5aW5nLi4uJyk7Cn0KdXNsZWVwKDUwMDAwMCk7Cn0KfQoKaWYgKCR0aGlzLT5jYWNoZSkgewokdGhpcy0+Y2FjaGUtPmNvcHlGcm9tKCRjYWNoZUtleSwgJGZpbGVOYW1lKTsKfQp9IGVsc2UgewokdGhpcy0+aW8tPndyaXRlKCcgICAgTG9hZGluZyBmcm9tIGNhY2hlJyk7Cn0KCmlmICghZmlsZV9leGlzdHMoJGZpbGVOYW1lKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigkdXJsLicgY291bGQgbm90IGJlIHNhdmVkIHRvICcuJGZpbGVOYW1lLicsIG1ha2Ugc3VyZSB0aGUnCi4nIGRpcmVjdG9yeSBpcyB3cml0YWJsZSBhbmQgeW91IGhhdmUgaW50ZXJuZXQgY29ubmVjdGl2aXR5Jyk7Cn0KCmlmICgkY2hlY2tzdW0gJiYgaGFzaF9maWxlKCdzaGExJywgJGZpbGVOYW1lKSAhPT0gJGNoZWNrc3VtKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdUaGUgY2hlY2tzdW0gdmVyaWZpY2F0aW9uIG9mIHRoZSBmaWxlIGZhaWxlZCAoZG93bmxvYWRlZCBmcm9tICcuJHVybC4nKScpOwp9Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKCiAkdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRwYXRoKTsKJHRoaXMtPmNsZWFyQ2FjaGUoJHBhY2thZ2UsICRwYXRoKTsKdGhyb3cgJGU7Cn0KCnJldHVybiAkZmlsZU5hbWU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPdXRwdXRQcm9ncmVzcygkb3V0cHV0UHJvZ3Jlc3MpCnsKJHRoaXMtPm91dHB1dFByb2dyZXNzID0gJG91dHB1dFByb2dyZXNzOwoKcmV0dXJuICR0aGlzOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2xlYXJDYWNoZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewppZiAoJHRoaXMtPmNhY2hlKSB7CiRmaWxlTmFtZSA9ICR0aGlzLT5nZXRGaWxlTmFtZSgkcGFja2FnZSwgJHBhdGgpOwokdGhpcy0+Y2FjaGUtPnJlbW92ZSgkdGhpcy0+Z2V0Q2FjaGVLZXkoJHBhY2thZ2UpKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCwgJHBhdGgpCnsKJHRoaXMtPnJlbW92ZSgkaW5pdGlhbCwgJHBhdGgpOwokdGhpcy0+ZG93bmxvYWQoJHRhcmdldCwgJHBhdGgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CiR0aGlzLT5pby0+d3JpdGUoIiAgLSBSZW1vdmluZyA8aW5mbz4iIC4gJHBhY2thZ2UtPmdldE5hbWUoKSAuICI8L2luZm8+ICg8Y29tbWVudD4iIC4gVmVyc2lvblBhcnNlcjo6Zm9ybWF0VmVyc2lvbigkcGFja2FnZSkgLiAiPC9jb21tZW50PikiKTsKaWYgKCEkdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRwYXRoKSkgewoKIGlmICghZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpIHx8ICh1c2xlZXAoMjUwMDAwKSAmJiAhJHRoaXMtPmZpbGVzeXN0ZW0tPnJlbW92ZURpcmVjdG9yeSgkcGF0aCkpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGNvbXBsZXRlbHkgZGVsZXRlICcuJHBhdGguJywgYWJvcnRpbmcuJyk7Cn0KfQp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEZpbGVOYW1lKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CnJldHVybiAkcGF0aC4nLycucGF0aGluZm8ocGFyc2VfdXJsKCRwYWNrYWdlLT5nZXREaXN0VXJsKCksIFBIUF9VUkxfUEFUSCksIFBBVEhJTkZPX0JBU0VOQU1FKTsKfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHByb2Nlc3NVcmwoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHVybCkKewppZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSAmJiAwID09PSBzdHJwb3MoJHVybCwgJ2h0dHBzOicpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91IG11c3QgZW5hYmxlIHRoZSBvcGVuc3NsIGV4dGVuc2lvbiB0byBkb3dubG9hZCBmaWxlcyB2aWEgaHR0cHMnKTsKfQoKcmV0dXJuICR1cmw7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZ2V0Q2FjaGVLZXkoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewppZiAocHJlZ19tYXRjaCgne15bYS1mMC05XXs0MH0kfScsICRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkpKSB7CnJldHVybiAkcGFja2FnZS0+Z2V0TmFtZSgpLicvJy4kcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpLicuJy4kcGFja2FnZS0+Z2V0RGlzdFR5cGUoKTsKfQoKcmV0dXJuICRwYWNrYWdlLT5nZXROYW1lKCkuJy8nLiRwYWNrYWdlLT5nZXRWZXJzaW9uKCkuJy0nLiRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkuJy4nLiRwYWNrYWdlLT5nZXREaXN0VHlwZSgpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxVdGlsXFN2biBhcyBTdm5VdGlsOwoKCgoKCmNsYXNzIFN2bkRvd25sb2FkZXIgZXh0ZW5kcyBWY3NEb3dubG9hZGVyCnsKCgoKcHVibGljIGZ1bmN0aW9uIGRvRG93bmxvYWQoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgpCnsKU3ZuVXRpbDo6Y2xlYW5FbnYoKTsKJHVybCA9ICRwYWNrYWdlLT5nZXRTb3VyY2VVcmwoKTsKJHJlZiA9ICRwYWNrYWdlLT5nZXRTb3VyY2VSZWZlcmVuY2UoKTsKCiR0aGlzLT5pby0+d3JpdGUoIiAgICBDaGVja2luZyBvdXQgIi4kcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkpOwokdGhpcy0+ZXhlY3V0ZSgkdXJsLCAic3ZuIGNvIiwgc3ByaW50ZigiJXMvJXMiLCAkdXJsLCAkcmVmKSwgbnVsbCwgJHBhdGgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZG9VcGRhdGUoUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0LCAkcGF0aCkKewpTdm5VdGlsOjpjbGVhbkVudigpOwokdXJsID0gJHRhcmdldC0+Z2V0U291cmNlVXJsKCk7CiRyZWYgPSAkdGFyZ2V0LT5nZXRTb3VyY2VSZWZlcmVuY2UoKTsKCmlmICghaXNfZGlyKCRwYXRoLicvLnN2bicpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIC5zdm4gZGlyZWN0b3J5IGlzIG1pc3NpbmcgZnJvbSAnLiRwYXRoLicsIHNlZSBodHRwOi8vZ2V0Y29tcG9zZXIub3JnL2NvbW1pdC1kZXBzIGZvciBtb3JlIGluZm9ybWF0aW9uJyk7Cn0KCiRmbGFncyA9ICIiOwppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ3N2biAtLXZlcnNpb24nLCAkb3V0cHV0KSkgewppZiAocHJlZ19tYXRjaCgneyhcZCsoPzpcLlxkKykrKX0nLCAkb3V0cHV0LCAkbWF0Y2gpICYmIHZlcnNpb25fY29tcGFyZSgkbWF0Y2hbMV0sICcxLjcuMCcsICc+PScpKSB7CiRmbGFncyAuPSAnIC0taWdub3JlLWFuY2VzdHJ5JzsKfQp9CgokdGhpcy0+aW8tPndyaXRlKCIgICAgQ2hlY2tpbmcgb3V0ICIgLiAkcmVmKTsKJHRoaXMtPmV4ZWN1dGUoJHVybCwgInN2biBzd2l0Y2giIC4gJGZsYWdzLCBzcHJpbnRmKCIlcy8lcyIsICR1cmwsICRyZWYpLCAkcGF0aCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbENoYW5nZXMoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgpCnsKaWYgKCFpc19kaXIoJHBhdGguJy8uc3ZuJykpIHsKcmV0dXJuOwp9CgokdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnc3ZuIHN0YXR1cyAtLWlnbm9yZS1leHRlcm5hbHMnLCAkb3V0cHV0LCAkcGF0aCk7CgpyZXR1cm4gcHJlZ19tYXRjaCgne14gKlteWCBdICt9bScsICRvdXRwdXQpID8gJG91dHB1dCA6IG51bGw7Cn0KCgoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKCRiYXNlVXJsLCAkY29tbWFuZCwgJHVybCwgJGN3ZCA9IG51bGwsICRwYXRoID0gbnVsbCkKewokdXRpbCA9IG5ldyBTdm5VdGlsKCRiYXNlVXJsLCAkdGhpcy0+aW8pOwp0cnkgewpyZXR1cm4gJHV0aWwtPmV4ZWN1dGUoJGNvbW1hbmQsICR1cmwsICRjd2QsICRwYXRoLCAkdGhpcy0+aW8tPmlzVmVyYm9zZSgpKTsKfSBjYXRjaCAoXFJ1bnRpbWVFeGNlcHRpb24gJGUpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAonUGFja2FnZSBjb3VsZCBub3QgYmUgZG93bmxvYWRlZCwgJy4kZS0+Z2V0TWVzc2FnZSgpCik7Cn0KfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuQ2hhbmdlcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCwgJHVwZGF0ZSkKewppZiAoISRjaGFuZ2VzID0gJHRoaXMtPmdldExvY2FsQ2hhbmdlcygkcGFja2FnZSwgJHBhdGgpKSB7CnJldHVybjsKfQoKaWYgKCEkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSkgewppZiAodHJ1ZSA9PT0gJHRoaXMtPmNvbmZpZy0+Z2V0KCdkaXNjYXJkLWNoYW5nZXMnKSkgewpyZXR1cm4gJHRoaXMtPmRpc2NhcmRDaGFuZ2VzKCRwYXRoKTsKfQoKcmV0dXJuIHBhcmVudDo6Y2xlYW5DaGFuZ2VzKCRwYWNrYWdlLCAkcGF0aCwgJHVwZGF0ZSk7Cn0KCiRjaGFuZ2VzID0gYXJyYXlfbWFwKGZ1bmN0aW9uICgkZWxlbSkgewpyZXR1cm4gJyAgICAnLiRlbGVtOwp9LCBwcmVnX3NwbGl0KCd7XHMqXHI/XG5ccyp9JywgJGNoYW5nZXMpKTsKJHRoaXMtPmlvLT53cml0ZSgnICAgIDxlcnJvcj5UaGUgcGFja2FnZSBoYXMgbW9kaWZpZWQgZmlsZXM6PC9lcnJvcj4nKTsKJHRoaXMtPmlvLT53cml0ZShhcnJheV9zbGljZSgkY2hhbmdlcywgMCwgMTApKTsKaWYgKGNvdW50KCRjaGFuZ2VzKSA+IDEwKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICA8aW5mbz4nLmNvdW50KCRjaGFuZ2VzKSAtIDEwIC4gJyBtb3JlIGZpbGVzIG1vZGlmaWVkLCBjaG9vc2UgInYiIHRvIHZpZXcgdGhlIGZ1bGwgbGlzdDwvaW5mbz4nKTsKfQoKd2hpbGUgKHRydWUpIHsKc3dpdGNoICgkdGhpcy0+aW8tPmFzaygnICAgIDxpbmZvPkRpc2NhcmQgY2hhbmdlcyBbeSxuLHYsP10/PC9pbmZvPiAnLCAnPycpKSB7CmNhc2UgJ3knOgokdGhpcy0+ZGlzY2FyZENoYW5nZXMoJHBhdGgpOwpicmVhayAyOwoKY2FzZSAnbic6CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVXBkYXRlIGFib3J0ZWQnKTsKCmNhc2UgJ3YnOgokdGhpcy0+aW8tPndyaXRlKCRjaGFuZ2VzKTsKYnJlYWs7CgpjYXNlICc/JzoKZGVmYXVsdDoKJHRoaXMtPmlvLT53cml0ZShhcnJheSgKJyAgICB5IC0gZGlzY2FyZCBjaGFuZ2VzIGFuZCBhcHBseSB0aGUgJy4oJHVwZGF0ZSA/ICd1cGRhdGUnIDogJ3VuaW5zdGFsbCcpLAonICAgIG4gLSBhYm9ydCB0aGUgJy4oJHVwZGF0ZSA/ICd1cGRhdGUnIDogJ3VuaW5zdGFsbCcpLicgYW5kIGxldCB5b3UgbWFudWFsbHkgY2xlYW4gdGhpbmdzIHVwJywKJyAgICB2IC0gdmlldyBtb2RpZmllZCBmaWxlcycsCicgICAgPyAtIHByaW50IGhlbHAnLAopKTsKYnJlYWs7Cn0KfQp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q29tbWl0TG9ncygkZnJvbVJlZmVyZW5jZSwgJHRvUmVmZXJlbmNlLCAkcGF0aCkKewppZiAocHJlZ19tYXRjaCgney4qQChcZCspJH0nLCAkZnJvbVJlZmVyZW5jZSkgJiYgcHJlZ19tYXRjaCgney4qQChcZCspJH0nLCAkdG9SZWZlcmVuY2UpICkgewoKICRmcm9tUmV2aXNpb24gPSBwcmVnX3JlcGxhY2UoJ3suKkAoXGQrKSR9JywgJyQxJywgJGZyb21SZWZlcmVuY2UpOwokdG9SZXZpc2lvbiA9IHByZWdfcmVwbGFjZSgney4qQChcZCspJH0nLCAnJDEnLCAkdG9SZWZlcmVuY2UpOwoKJGNvbW1hbmQgPSBzcHJpbnRmKCdzdm4gbG9nIC1yJXM6JXMgLS1pbmNyZW1lbnRhbCcsICRmcm9tUmV2aXNpb24sICR0b1JldmlzaW9uKTsKCmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCwgJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigKJ0ZhaWxlZCB0byBleGVjdXRlICcgLiAkY29tbWFuZCAuICJcblxuIiAuICR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpCik7Cn0KfSBlbHNlIHsKJG91dHB1dCA9ICJDb3VsZCBub3QgcmV0cmlldmUgY2hhbmdlcyBiZXR3ZWVuICRmcm9tUmVmZXJlbmNlIGFuZCAkdG9SZWZlcmVuY2UgZHVlIHRvIG1pc3NpbmcgcmV2aXNpb24gaW5mb3JtYXRpb24iOwp9CgpyZXR1cm4gJG91dHB1dDsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRpc2NhcmRDaGFuZ2VzKCRwYXRoKQp7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnc3ZuIHJldmVydCAtUiAuJywgJG91dHB1dCwgJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IHJlc2V0IGNoYW5nZXNcblxuOiIuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKCgoKCgoKCgoKCmNsYXNzIFBlYXJQYWNrYWdlRXh0cmFjdG9yCnsKcHJpdmF0ZSBzdGF0aWMgJHJvbGVzV2l0aG91dFBhY2thZ2VOYW1lUHJlZml4ID0gYXJyYXkoJ3BocCcsICdzY3JpcHQnLCAnd3d3Jyk7Cgpwcml2YXRlICRmaWxlc3lzdGVtOwpwcml2YXRlICRmaWxlOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlKQp7CmlmICghaXNfZmlsZSgkZmlsZSkpIHsKdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1BFQVIgcGFja2FnZSBmaWxlIGlzIG5vdCBmb3VuZCBhdCAnLiRmaWxlKTsKfQoKJHRoaXMtPmZpbGVzeXN0ZW0gPSBuZXcgRmlsZXN5c3RlbSgpOwokdGhpcy0+ZmlsZSA9ICRmaWxlOwp9CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGV4dHJhY3RUbygkdGFyZ2V0LCBhcnJheSAkcm9sZXMgPSBhcnJheSgncGhwJyA9PiAnLycsICdzY3JpcHQnID0+ICcvYmluJyksICR2YXJzID0gYXJyYXkoKSkKewokZXh0cmFjdGlvblBhdGggPSAkdGFyZ2V0LicvdGFyYmFsbCc7Cgp0cnkgewokYXJjaGl2ZSA9IG5ldyBcUGhhckRhdGEoJHRoaXMtPmZpbGUpOwokYXJjaGl2ZS0+ZXh0cmFjdFRvKCRleHRyYWN0aW9uUGF0aCwgbnVsbCwgdHJ1ZSk7CgppZiAoIWlzX2ZpbGUoJHRoaXMtPmNvbWJpbmUoJGV4dHJhY3Rpb25QYXRoLCAnL3BhY2thZ2UueG1sJykpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignSW52YWxpZCBQRUFSIHBhY2thZ2UuIEl0IG11c3QgY29udGFpbiBwYWNrYWdlLnhtbCBmaWxlLicpOwp9CgokZmlsZUNvcHlBY3Rpb25zID0gJHRoaXMtPmJ1aWxkQ29weUFjdGlvbnMoJGV4dHJhY3Rpb25QYXRoLCAkcm9sZXMsICR2YXJzKTsKJHRoaXMtPmNvcHlGaWxlcygkZmlsZUNvcHlBY3Rpb25zLCAkZXh0cmFjdGlvblBhdGgsICR0YXJnZXQsICRyb2xlcywgJHZhcnMpOwokdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRleHRyYWN0aW9uUGF0aCk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGV4Y2VwdGlvbikgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbihzcHJpbnRmKCdGYWlsZWQgdG8gZXh0cmFjdCBQRUFSIHBhY2thZ2UgJXMgdG8gJXMuIFJlYXNvbjogJXMnLCAkdGhpcy0+ZmlsZSwgJHRhcmdldCwgJGV4Y2VwdGlvbi0+Z2V0TWVzc2FnZSgpKSwgMCwgJGV4Y2VwdGlvbik7Cn0KfQoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBjb3B5RmlsZXMoJGZpbGVzLCAkc291cmNlLCAkdGFyZ2V0LCAkcm9sZXMsICR2YXJzKQp7CmZvcmVhY2ggKCRmaWxlcyBhcyAkZmlsZSkgewokZnJvbSA9ICR0aGlzLT5jb21iaW5lKCRzb3VyY2UsICRmaWxlWydmcm9tJ10pOwokdG8gPSAkdGhpcy0+Y29tYmluZSgkdGFyZ2V0LCAkcm9sZXNbJGZpbGVbJ3JvbGUnXV0pOwokdG8gPSAkdGhpcy0+Y29tYmluZSgkdG8sICRmaWxlWyd0byddKTsKJHRhc2tzID0gJGZpbGVbJ3Rhc2tzJ107CiR0aGlzLT5jb3B5RmlsZSgkZnJvbSwgJHRvLCAkdGFza3MsICR2YXJzKTsKfQp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNvcHlGaWxlKCRmcm9tLCAkdG8sICR0YXNrcywgJHZhcnMpCnsKaWYgKCFpc19maWxlKCRmcm9tKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgUEVBUiBwYWNrYWdlLiBwYWNrYWdlLnhtbCBkZWZpbmVzIGZpbGUgdGhhdCBpcyBub3QgbG9jYXRlZCBpbnNpZGUgdGFyYmFsbC4nKTsKfQoKJHRoaXMtPmZpbGVzeXN0ZW0tPmVuc3VyZURpcmVjdG9yeUV4aXN0cyhkaXJuYW1lKCR0bykpOwoKaWYgKDAgPT0gY291bnQoJHRhc2tzKSkgewokY29waWVkID0gY29weSgkZnJvbSwgJHRvKTsKfSBlbHNlIHsKJGNvbnRlbnQgPSBmaWxlX2dldF9jb250ZW50cygkZnJvbSk7CiRyZXBsYWNlbWVudHMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGFza3MgYXMgJHRhc2spIHsKJHBhdHRlcm4gPSAkdGFza1snZnJvbSddOwokdmFyTmFtZSA9ICR0YXNrWyd0byddOwppZiAoaXNzZXQoJHZhcnNbJHZhck5hbWVdKSkgewppZiAoJHZhck5hbWUgPT09ICdwaHBfYmluJyAmJiBmYWxzZSA9PT0gc3RycG9zKCR0bywgJy5iYXQnKSkgewokcmVwbGFjZW1lbnRzWyRwYXR0ZXJuXSA9IHByZWdfcmVwbGFjZSgne1wuYmF0JH0nLCAnJywgJHZhcnNbJHZhck5hbWVdKTsKfSBlbHNlIHsKJHJlcGxhY2VtZW50c1skcGF0dGVybl0gPSAkdmFyc1skdmFyTmFtZV07Cn0KfQp9CiRjb250ZW50ID0gc3RydHIoJGNvbnRlbnQsICRyZXBsYWNlbWVudHMpOwoKJGNvcGllZCA9IGZpbGVfcHV0X2NvbnRlbnRzKCR0bywgJGNvbnRlbnQpOwp9CgppZiAoZmFsc2UgPT09ICRjb3BpZWQpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ0ZhaWxlZCB0byBjb3B5ICVzIHRvICVzJywgJGZyb20sICR0bykpOwp9Cn0KCgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQ29weUFjdGlvbnMoJHNvdXJjZSwgYXJyYXkgJHJvbGVzLCAkdmFycykKewoKJHBhY2thZ2UgPSBzaW1wbGV4bWxfbG9hZF9maWxlKCR0aGlzLT5jb21iaW5lKCRzb3VyY2UsICdwYWNrYWdlLnhtbCcpKTsKaWYoZmFsc2UgPT09ICRwYWNrYWdlKQp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1BhY2thZ2UgZGVmaW5pdGlvbiBmaWxlIGlzIG5vdCB2YWxpZC4nKTsKCiRwYWNrYWdlU2NoZW1hVmVyc2lvbiA9ICRwYWNrYWdlWyd2ZXJzaW9uJ107CmlmICgnMS4wJyA9PSAkcGFja2FnZVNjaGVtYVZlcnNpb24pIHsKJGNoaWxkcmVuID0gJHBhY2thZ2UtPnJlbGVhc2UtPmZpbGVsaXN0LT5jaGlsZHJlbigpOwokcGFja2FnZU5hbWUgPSAoc3RyaW5nKSAkcGFja2FnZS0+bmFtZTsKJHBhY2thZ2VWZXJzaW9uID0gKHN0cmluZykgJHBhY2thZ2UtPnJlbGVhc2UtPnZlcnNpb247CiRzb3VyY2VEaXIgPSAkcGFja2FnZU5hbWUgLiAnLScgLiAkcGFja2FnZVZlcnNpb247CiRyZXN1bHQgPSAkdGhpcy0+YnVpbGRTb3VyY2VMaXN0MTAoJGNoaWxkcmVuLCAkcm9sZXMsICRzb3VyY2VEaXIsICcnLCBudWxsLCAkcGFja2FnZU5hbWUpOwp9IGVsc2VpZiAoJzIuMCcgPT0gJHBhY2thZ2VTY2hlbWFWZXJzaW9uIHx8ICcyLjEnID09ICRwYWNrYWdlU2NoZW1hVmVyc2lvbikgewokY2hpbGRyZW4gPSAkcGFja2FnZS0+Y29udGVudHMtPmNoaWxkcmVuKCk7CiRwYWNrYWdlTmFtZSA9IChzdHJpbmcpICRwYWNrYWdlLT5uYW1lOwokcGFja2FnZVZlcnNpb24gPSAoc3RyaW5nKSAkcGFja2FnZS0+dmVyc2lvbi0+cmVsZWFzZTsKJHNvdXJjZURpciA9ICRwYWNrYWdlTmFtZSAuICctJyAuICRwYWNrYWdlVmVyc2lvbjsKJHJlc3VsdCA9ICR0aGlzLT5idWlsZFNvdXJjZUxpc3QyMCgkY2hpbGRyZW4sICRyb2xlcywgJHNvdXJjZURpciwgJycsIG51bGwsICRwYWNrYWdlTmFtZSk7CgokbmFtZXNwYWNlcyA9ICRwYWNrYWdlLT5nZXROYW1lc3BhY2VzKCk7CiRwYWNrYWdlLT5yZWdpc3RlclhQYXRoTmFtZXNwYWNlKCducycsICRuYW1lc3BhY2VzWycnXSk7CiRyZWxlYXNlTm9kZXMgPSAkcGFja2FnZS0+eHBhdGgoJ25zOnBocHJlbGVhc2UnKTsKJHRoaXMtPmFwcGx5UmVsZWFzZSgkcmVzdWx0LCAkcmVsZWFzZU5vZGVzLCAkdmFycyk7Cn0gZWxzZSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVW5zdXBwb3J0ZWQgc2NoZW1hIHZlcnNpb24gb2YgcGFja2FnZSBkZWZpbml0aW9uIGZpbGUuJyk7Cn0KCnJldHVybiAkcmVzdWx0Owp9Cgpwcml2YXRlIGZ1bmN0aW9uIGFwcGx5UmVsZWFzZSgmJGFjdGlvbnMsICRyZWxlYXNlTm9kZXMsICR2YXJzKQp7CmZvcmVhY2ggKCRyZWxlYXNlTm9kZXMgYXMgJHJlbGVhc2VOb2RlKSB7CiRyZXF1aXJlZE9zID0gJHJlbGVhc2VOb2RlLT5pbnN0YWxsY29uZGl0aW9ucyAmJiAkcmVsZWFzZU5vZGUtPmluc3RhbGxjb25kaXRpb25zLT5vcyAmJiAkcmVsZWFzZU5vZGUtPmluc3RhbGxjb25kaXRpb25zLT5vcy0+bmFtZSA/IChzdHJpbmcpICRyZWxlYXNlTm9kZS0+aW5zdGFsbGNvbmRpdGlvbnMtPm9zLT5uYW1lIDogJyc7CmlmICgkcmVxdWlyZWRPcyAmJiAkdmFyc1snb3MnXSAhPSAkcmVxdWlyZWRPcykgewpjb250aW51ZTsKfQoKaWYgKCRyZWxlYXNlTm9kZS0+ZmlsZWxpc3QpIHsKZm9yZWFjaCAoJHJlbGVhc2VOb2RlLT5maWxlbGlzdC0+Y2hpbGRyZW4oKSBhcyAkYWN0aW9uKSB7CmlmICgnaW5zdGFsbCcgPT0gJGFjdGlvbi0+Z2V0TmFtZSgpKSB7CiRuYW1lID0gKHN0cmluZykgJGFjdGlvblsnbmFtZSddOwokYXMgPSAoc3RyaW5nKSAkYWN0aW9uWydhcyddOwppZiAoaXNzZXQoJGFjdGlvbnNbJG5hbWVdKSkgewokYWN0aW9uc1skbmFtZV1bJ3RvJ10gPSAkYXM7Cn0KfSBlbHNlaWYgKCdpZ25vcmUnID09ICRhY3Rpb24tPmdldE5hbWUoKSkgewokbmFtZSA9IChzdHJpbmcpICRhY3Rpb25bJ25hbWUnXTsKdW5zZXQoJGFjdGlvbnNbJG5hbWVdKTsKfSBlbHNlIHsKCiB9Cn0KfQpicmVhazsKfQp9Cgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkU291cmNlTGlzdDEwKCRjaGlsZHJlbiwgJHRhcmdldFJvbGVzLCAkc291cmNlLCAkdGFyZ2V0LCAkcm9sZSwgJHBhY2thZ2VOYW1lKQp7CiRyZXN1bHQgPSBhcnJheSgpOwoKCiBmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKSB7CgppZiAoJGNoaWxkLT5nZXROYW1lKCkgPT0gJ2RpcicpIHsKJGRpclNvdXJjZSA9ICR0aGlzLT5jb21iaW5lKCRzb3VyY2UsIChzdHJpbmcpICRjaGlsZFsnbmFtZSddKTsKJGRpclRhcmdldCA9ICRjaGlsZFsnYmFzZWluc3RhbGxkaXInXSA/IDogJHRhcmdldDsKJGRpclJvbGUgPSAkY2hpbGRbJ3JvbGUnXSA/IDogJHJvbGU7CiRkaXJGaWxlcyA9ICR0aGlzLT5idWlsZFNvdXJjZUxpc3QxMCgkY2hpbGQtPmNoaWxkcmVuKCksICR0YXJnZXRSb2xlcywgJGRpclNvdXJjZSwgJGRpclRhcmdldCwgJGRpclJvbGUsICRwYWNrYWdlTmFtZSk7CiRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkZGlyRmlsZXMpOwp9IGVsc2VpZiAoJGNoaWxkLT5nZXROYW1lKCkgPT0gJ2ZpbGUnKSB7CiRmaWxlUm9sZSA9IChzdHJpbmcpICRjaGlsZFsncm9sZSddID8gOiAkcm9sZTsKaWYgKGlzc2V0KCR0YXJnZXRSb2xlc1skZmlsZVJvbGVdKSkgewokZmlsZU5hbWUgPSAoc3RyaW5nKSAoJGNoaWxkWyduYW1lJ10gPyA6ICRjaGlsZFswXSk7IAogJGZpbGVTb3VyY2UgPSAkdGhpcy0+Y29tYmluZSgkc291cmNlLCAkZmlsZU5hbWUpOwokZmlsZVRhcmdldCA9ICR0aGlzLT5jb21iaW5lKChzdHJpbmcpICRjaGlsZFsnYmFzZWluc3RhbGxkaXInXSA/IDogJHRhcmdldCwgJGZpbGVOYW1lKTsKaWYgKCFpbl9hcnJheSgkZmlsZVJvbGUsIHNlbGY6OiRyb2xlc1dpdGhvdXRQYWNrYWdlTmFtZVByZWZpeCkpIHsKJGZpbGVUYXJnZXQgPSAkcGFja2FnZU5hbWUgLiAnLycgLiAkZmlsZVRhcmdldDsKfQokcmVzdWx0WyhzdHJpbmcpICRjaGlsZFsnbmFtZSddXSA9IGFycmF5KCdmcm9tJyA9PiAkZmlsZVNvdXJjZSwgJ3RvJyA9PiAkZmlsZVRhcmdldCwgJ3JvbGUnID0+ICRmaWxlUm9sZSwgJ3Rhc2tzJyA9PiBhcnJheSgpKTsKfQp9Cn0KCnJldHVybiAkcmVzdWx0Owp9Cgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkU291cmNlTGlzdDIwKCRjaGlsZHJlbiwgJHRhcmdldFJvbGVzLCAkc291cmNlLCAkdGFyZ2V0LCAkcm9sZSwgJHBhY2thZ2VOYW1lKQp7CiRyZXN1bHQgPSBhcnJheSgpOwoKCiBmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKSB7CgppZiAoJ2RpcicgPT0gJGNoaWxkLT5nZXROYW1lKCkpIHsKJGRpclNvdXJjZSA9ICR0aGlzLT5jb21iaW5lKCRzb3VyY2UsICRjaGlsZFsnbmFtZSddKTsKJGRpclRhcmdldCA9ICRjaGlsZFsnYmFzZWluc3RhbGxkaXInXSA/IDogJHRhcmdldDsKJGRpclJvbGUgPSAkY2hpbGRbJ3JvbGUnXSA/IDogJHJvbGU7CiRkaXJGaWxlcyA9ICR0aGlzLT5idWlsZFNvdXJjZUxpc3QyMCgkY2hpbGQtPmNoaWxkcmVuKCksICR0YXJnZXRSb2xlcywgJGRpclNvdXJjZSwgJGRpclRhcmdldCwgJGRpclJvbGUsICRwYWNrYWdlTmFtZSk7CiRyZXN1bHQgPSBhcnJheV9tZXJnZSgkcmVzdWx0LCAkZGlyRmlsZXMpOwp9IGVsc2VpZiAoJ2ZpbGUnID09ICRjaGlsZC0+Z2V0TmFtZSgpKSB7CiRmaWxlUm9sZSA9IChzdHJpbmcpICRjaGlsZFsncm9sZSddID8gOiAkcm9sZTsKaWYgKGlzc2V0KCR0YXJnZXRSb2xlc1skZmlsZVJvbGVdKSkgewokZmlsZVNvdXJjZSA9ICR0aGlzLT5jb21iaW5lKCRzb3VyY2UsIChzdHJpbmcpICRjaGlsZFsnbmFtZSddKTsKJGZpbGVUYXJnZXQgPSAkdGhpcy0+Y29tYmluZSgoc3RyaW5nKSAoJGNoaWxkWydiYXNlaW5zdGFsbGRpciddID8gOiAkdGFyZ2V0KSwgKHN0cmluZykgJGNoaWxkWyduYW1lJ10pOwokZmlsZVRhc2tzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGNoaWxkLT5jaGlsZHJlbignaHR0cDovL3BlYXIucGhwLm5ldC9kdGQvdGFza3MtMS4wJykgYXMgJHRhc2tOb2RlKSB7CmlmICgncmVwbGFjZScgPT0gJHRhc2tOb2RlLT5nZXROYW1lKCkpIHsKJGZpbGVUYXNrc1tdID0gYXJyYXkoJ2Zyb20nID0+IChzdHJpbmcpICR0YXNrTm9kZS0+YXR0cmlidXRlcygpLT5mcm9tLCAndG8nID0+IChzdHJpbmcpICR0YXNrTm9kZS0+YXR0cmlidXRlcygpLT50byk7Cn0KfQppZiAoIWluX2FycmF5KCRmaWxlUm9sZSwgc2VsZjo6JHJvbGVzV2l0aG91dFBhY2thZ2VOYW1lUHJlZml4KSkgewokZmlsZVRhcmdldCA9ICRwYWNrYWdlTmFtZSAuICcvJyAuICRmaWxlVGFyZ2V0Owp9CiRyZXN1bHRbKHN0cmluZykgJGNoaWxkWyduYW1lJ11dID0gYXJyYXkoJ2Zyb20nID0+ICRmaWxlU291cmNlLCAndG8nID0+ICRmaWxlVGFyZ2V0LCAncm9sZScgPT4gJGZpbGVSb2xlLCAndGFza3MnID0+ICRmaWxlVGFza3MpOwp9Cn0KfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCnByaXZhdGUgZnVuY3Rpb24gY29tYmluZSgkbGVmdCwgJHJpZ2h0KQp7CnJldHVybiBydHJpbSgkbGVmdCwgJy8nKSAuICcvJyAuIGx0cmltKCRyaWdodCwgJy8nKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERvd25sb2FkZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxEb3dubG9hZGVySW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxVdGlsXEZpbGVzeXN0ZW07CgoKCgoKCmNsYXNzIERvd25sb2FkTWFuYWdlcgp7CnByaXZhdGUgJGlvOwpwcml2YXRlICRwcmVmZXJEaXN0ID0gZmFsc2U7CnByaXZhdGUgJHByZWZlclNvdXJjZSA9IGZhbHNlOwpwcml2YXRlICRmaWxlc3lzdGVtOwpwcml2YXRlICRkb3dubG9hZGVycyA9IGFycmF5KCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgJHByZWZlclNvdXJjZSA9IGZhbHNlLCBGaWxlc3lzdGVtICRmaWxlc3lzdGVtID0gbnVsbCkKewokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5wcmVmZXJTb3VyY2UgPSAkcHJlZmVyU291cmNlOwokdGhpcy0+ZmlsZXN5c3RlbSA9ICRmaWxlc3lzdGVtID86IG5ldyBGaWxlc3lzdGVtKCk7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRQcmVmZXJTb3VyY2UoJHByZWZlclNvdXJjZSkKewokdGhpcy0+cHJlZmVyU291cmNlID0gJHByZWZlclNvdXJjZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFByZWZlckRpc3QoJHByZWZlckRpc3QpCnsKJHRoaXMtPnByZWZlckRpc3QgPSAkcHJlZmVyRGlzdDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPdXRwdXRQcm9ncmVzcygkb3V0cHV0UHJvZ3Jlc3MpCnsKZm9yZWFjaCAoJHRoaXMtPmRvd25sb2FkZXJzIGFzICRkb3dubG9hZGVyKSB7CiRkb3dubG9hZGVyLT5zZXRPdXRwdXRQcm9ncmVzcygkb3V0cHV0UHJvZ3Jlc3MpOwp9CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RG93bmxvYWRlcigkdHlwZSwgRG93bmxvYWRlckludGVyZmFjZSAkZG93bmxvYWRlcikKewokdHlwZSA9IHN0cnRvbG93ZXIoJHR5cGUpOwokdGhpcy0+ZG93bmxvYWRlcnNbJHR5cGVdID0gJGRvd25sb2FkZXI7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERvd25sb2FkZXIoJHR5cGUpCnsKJHR5cGUgPSBzdHJ0b2xvd2VyKCR0eXBlKTsKaWYgKCFpc3NldCgkdGhpcy0+ZG93bmxvYWRlcnNbJHR5cGVdKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdVbmtub3duIGRvd25sb2FkZXIgdHlwZTogJXMuIEF2YWlsYWJsZSB0eXBlczogJXMuJywgJHR5cGUsIGltcGxvZGUoJywgJywgYXJyYXlfa2V5cygkdGhpcy0+ZG93bmxvYWRlcnMpKSkpOwp9CgpyZXR1cm4gJHRoaXMtPmRvd25sb2FkZXJzWyR0eXBlXTsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREb3dubG9hZGVyRm9ySW5zdGFsbGVkUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRpbnN0YWxsYXRpb25Tb3VyY2UgPSAkcGFja2FnZS0+Z2V0SW5zdGFsbGF0aW9uU291cmNlKCk7CgppZiAoJ21ldGFwYWNrYWdlJyA9PT0gJHBhY2thZ2UtPmdldFR5cGUoKSkgewpyZXR1cm47Cn0KCmlmICgnZGlzdCcgPT09ICRpbnN0YWxsYXRpb25Tb3VyY2UpIHsKJGRvd25sb2FkZXIgPSAkdGhpcy0+Z2V0RG93bmxvYWRlcigkcGFja2FnZS0+Z2V0RGlzdFR5cGUoKSk7Cn0gZWxzZWlmICgnc291cmNlJyA9PT0gJGluc3RhbGxhdGlvblNvdXJjZSkgewokZG93bmxvYWRlciA9ICR0aGlzLT5nZXREb3dubG9hZGVyKCRwYWNrYWdlLT5nZXRTb3VyY2VUeXBlKCkpOwp9IGVsc2Ugewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigKJ1BhY2thZ2UgJy4kcGFja2FnZS4nIHNlZW1zIG5vdCBiZWVuIGluc3RhbGxlZCBwcm9wZXJseScKKTsKfQoKaWYgKCRpbnN0YWxsYXRpb25Tb3VyY2UgIT09ICRkb3dubG9hZGVyLT5nZXRJbnN0YWxsYXRpb25Tb3VyY2UoKSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHNwcmludGYoCidEb3dubG9hZGVyICIlcyIgaXMgYSAlcyB0eXBlIGRvd25sb2FkZXIgYW5kIGNhbiBub3QgYmUgdXNlZCB0byBkb3dubG9hZCAlcycsCmdldF9jbGFzcygkZG93bmxvYWRlciksICRkb3dubG9hZGVyLT5nZXRJbnN0YWxsYXRpb25Tb3VyY2UoKSwgJGluc3RhbGxhdGlvblNvdXJjZQopKTsKfQoKcmV0dXJuICRkb3dubG9hZGVyOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZG93bmxvYWQoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHRhcmdldERpciwgJHByZWZlclNvdXJjZSA9IG51bGwpCnsKJHByZWZlclNvdXJjZSA9IG51bGwgIT09ICRwcmVmZXJTb3VyY2UgPyAkcHJlZmVyU291cmNlIDogJHRoaXMtPnByZWZlclNvdXJjZTsKJHNvdXJjZVR5cGUgPSAkcGFja2FnZS0+Z2V0U291cmNlVHlwZSgpOwokZGlzdFR5cGUgPSAkcGFja2FnZS0+Z2V0RGlzdFR5cGUoKTsKCiRzb3VyY2VzID0gYXJyYXkoKTsKaWYgKCRzb3VyY2VUeXBlKSB7CiRzb3VyY2VzW10gPSAnc291cmNlJzsKfQppZiAoJGRpc3RUeXBlKSB7CiRzb3VyY2VzW10gPSAnZGlzdCc7Cn0KCmlmIChlbXB0eSgkc291cmNlcykpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhY2thZ2UgJy4kcGFja2FnZS4nIG11c3QgaGF2ZSBhIHNvdXJjZSBvciBkaXN0IHNwZWNpZmllZCcpOwp9CgppZiAoKCEkcGFja2FnZS0+aXNEZXYoKSB8fCAkdGhpcy0+cHJlZmVyRGlzdCkgJiYgISRwcmVmZXJTb3VyY2UpIHsKJHNvdXJjZXMgPSBhcnJheV9yZXZlcnNlKCRzb3VyY2VzKTsKfQoKJHRoaXMtPmZpbGVzeXN0ZW0tPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkdGFyZ2V0RGlyKTsKCmZvcmVhY2ggKCRzb3VyY2VzIGFzICRpID0+ICRzb3VyY2UpIHsKaWYgKGlzc2V0KCRlKSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5Ob3cgdHJ5aW5nIHRvIGRvd25sb2FkIGZyb20gJyAuICRzb3VyY2UgLiAnPC93YXJuaW5nPicpOwp9CiRwYWNrYWdlLT5zZXRJbnN0YWxsYXRpb25Tb3VyY2UoJHNvdXJjZSk7CnRyeSB7CiRkb3dubG9hZGVyID0gJHRoaXMtPmdldERvd25sb2FkZXJGb3JJbnN0YWxsZWRQYWNrYWdlKCRwYWNrYWdlKTsKaWYgKCRkb3dubG9hZGVyKSB7CiRkb3dubG9hZGVyLT5kb3dubG9hZCgkcGFja2FnZSwgJHRhcmdldERpcik7Cn0KYnJlYWs7Cn0gY2F0Y2ggKFxSdW50aW1lRXhjZXB0aW9uICRlKSB7CmlmICgkaSA9PSBjb3VudCgkc291cmNlcykgLSAxKSB7CnRocm93ICRlOwp9CgokdGhpcy0+aW8tPndyaXRlKAonPHdhcm5pbmc+RmFpbGVkIHRvIGRvd25sb2FkICcuCiRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkuCicgZnJvbSAnIC4gJHNvdXJjZSAuICc6ICcuCiRlLT5nZXRNZXNzYWdlKCkuJzwvd2FybmluZz4nCik7Cn0KfQp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCwgJHRhcmdldERpcikKewokZG93bmxvYWRlciA9ICR0aGlzLT5nZXREb3dubG9hZGVyRm9ySW5zdGFsbGVkUGFja2FnZSgkaW5pdGlhbCk7CmlmICghJGRvd25sb2FkZXIpIHsKcmV0dXJuOwp9CgokaW5zdGFsbGF0aW9uU291cmNlID0gJGluaXRpYWwtPmdldEluc3RhbGxhdGlvblNvdXJjZSgpOwoKaWYgKCdkaXN0JyA9PT0gJGluc3RhbGxhdGlvblNvdXJjZSkgewokaW5pdGlhbFR5cGUgPSAkaW5pdGlhbC0+Z2V0RGlzdFR5cGUoKTsKJHRhcmdldFR5cGUgPSAkdGFyZ2V0LT5nZXREaXN0VHlwZSgpOwp9IGVsc2UgewokaW5pdGlhbFR5cGUgPSAkaW5pdGlhbC0+Z2V0U291cmNlVHlwZSgpOwokdGFyZ2V0VHlwZSA9ICR0YXJnZXQtPmdldFNvdXJjZVR5cGUoKTsKfQoKCiBpZiAoJHRhcmdldC0+aXNEZXYoKSAmJiAnZGlzdCcgPT09ICRpbnN0YWxsYXRpb25Tb3VyY2UpIHsKJGRvd25sb2FkZXItPnJlbW92ZSgkaW5pdGlhbCwgJHRhcmdldERpcik7CiR0aGlzLT5kb3dubG9hZCgkdGFyZ2V0LCAkdGFyZ2V0RGlyKTsKCnJldHVybjsKfQoKaWYgKCRpbml0aWFsVHlwZSA9PT0gJHRhcmdldFR5cGUpIHsKJHRhcmdldC0+c2V0SW5zdGFsbGF0aW9uU291cmNlKCRpbnN0YWxsYXRpb25Tb3VyY2UpOwokZG93bmxvYWRlci0+dXBkYXRlKCRpbml0aWFsLCAkdGFyZ2V0LCAkdGFyZ2V0RGlyKTsKfSBlbHNlIHsKJGRvd25sb2FkZXItPnJlbW92ZSgkaW5pdGlhbCwgJHRhcmdldERpcik7CiR0aGlzLT5kb3dubG9hZCgkdGFyZ2V0LCAkdGFyZ2V0RGlyLCAnc291cmNlJyA9PT0gJGluc3RhbGxhdGlvblNvdXJjZSk7Cn0KfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbW92ZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkdGFyZ2V0RGlyKQp7CiRkb3dubG9hZGVyID0gJHRoaXMtPmdldERvd25sb2FkZXJGb3JJbnN0YWxsZWRQYWNrYWdlKCRwYWNrYWdlKTsKaWYgKCRkb3dubG9hZGVyKSB7CiRkb3dubG9hZGVyLT5yZW1vdmUoJHBhY2thZ2UsICR0YXJnZXREaXIpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKCmludGVyZmFjZSBEb3dubG9hZGVySW50ZXJmYWNlCnsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGF0aW9uU291cmNlKCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZG93bmxvYWQoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0LCAkcGF0aCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPdXRwdXRQcm9ncmVzcygkb3V0cHV0UHJvZ3Jlc3MpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERvd25sb2FkZXI7CgoKCgpjbGFzcyBUcmFuc3BvcnRFeGNlcHRpb24gZXh0ZW5kcyBcUnVudGltZUV4Y2VwdGlvbgp7CnByb3RlY3RlZCAkaGVhZGVyczsKcHJvdGVjdGVkICRyZXNwb25zZTsKCnB1YmxpYyBmdW5jdGlvbiBzZXRIZWFkZXJzKCRoZWFkZXJzKQp7CiR0aGlzLT5oZWFkZXJzID0gJGhlYWRlcnM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJzKCkKewpyZXR1cm4gJHRoaXMtPmhlYWRlcnM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRSZXNwb25zZSgkcmVzcG9uc2UpCnsKJHRoaXMtPnJlc3BvbnNlID0gJHJlc3BvbnNlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVzcG9uc2UoKQp7CnJldHVybiAkdGhpcy0+cmVzcG9uc2U7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKCgoKCgpjbGFzcyBQaGFyRG93bmxvYWRlciBleHRlbmRzIEFyY2hpdmVEb3dubG9hZGVyCnsKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJhY3QoJGZpbGUsICRwYXRoKQp7CgogJGFyY2hpdmUgPSBuZXcgXFBoYXIoJGZpbGUpOwokYXJjaGl2ZS0+ZXh0cmFjdFRvKCRwYXRoLCBudWxsLCB0cnVlKTsKCgoKCgp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCgoKCgoKY2xhc3MgVGFyRG93bmxvYWRlciBleHRlbmRzIEFyY2hpdmVEb3dubG9hZGVyCnsKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4dHJhY3QoJGZpbGUsICRwYXRoKQp7CgogJGFyY2hpdmUgPSBuZXcgXFBoYXJEYXRhKCRmaWxlKTsKJGFyY2hpdmUtPmV4dHJhY3RUbygkcGF0aCwgbnVsbCwgdHJ1ZSk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCmNsYXNzIEhnRG93bmxvYWRlciBleHRlbmRzIFZjc0Rvd25sb2FkZXIKewoKCgpwdWJsaWMgZnVuY3Rpb24gZG9Eb3dubG9hZChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewokdXJsID0gZXNjYXBlc2hlbGxhcmcoJHBhY2thZ2UtPmdldFNvdXJjZVVybCgpKTsKJHJlZiA9IGVzY2FwZXNoZWxsYXJnKCRwYWNrYWdlLT5nZXRTb3VyY2VSZWZlcmVuY2UoKSk7CiR0aGlzLT5pby0+d3JpdGUoIiAgICBDbG9uaW5nICIuJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpKTsKJGNvbW1hbmQgPSBzcHJpbnRmKCdoZyBjbG9uZSAlcyAlcycsICR1cmwsIGVzY2FwZXNoZWxsYXJnKCRwYXRoKSk7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJGlnbm9yZWRPdXRwdXQpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9CiRjb21tYW5kID0gc3ByaW50ZignaGcgdXAgJXMnLCAkcmVmKTsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkaWdub3JlZE91dHB1dCwgcmVhbHBhdGgoJHBhdGgpKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBleGVjdXRlICcgLiAkY29tbWFuZCAuICJcblxuIiAuICR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZG9VcGRhdGUoUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0LCAkcGF0aCkKewokdXJsID0gZXNjYXBlc2hlbGxhcmcoJHRhcmdldC0+Z2V0U291cmNlVXJsKCkpOwokcmVmID0gZXNjYXBlc2hlbGxhcmcoJHRhcmdldC0+Z2V0U291cmNlUmVmZXJlbmNlKCkpOwokdGhpcy0+aW8tPndyaXRlKCIgICAgVXBkYXRpbmcgdG8gIi4kdGFyZ2V0LT5nZXRTb3VyY2VSZWZlcmVuY2UoKSk7CgppZiAoIWlzX2RpcigkcGF0aC4nLy5oZycpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIC5oZyBkaXJlY3RvcnkgaXMgbWlzc2luZyBmcm9tICcuJHBhdGguJywgc2VlIGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcvY29tbWl0LWRlcHMgZm9yIG1vcmUgaW5mb3JtYXRpb24nKTsKfQoKJGNvbW1hbmQgPSBzcHJpbnRmKCdoZyBwdWxsICVzICYmIGhnIHVwICVzJywgJHVybCwgJHJlZik7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJGlnbm9yZWRPdXRwdXQsIHJlYWxwYXRoKCRwYXRoKSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gZXhlY3V0ZSAnIC4gJGNvbW1hbmQgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSk7Cn0KfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldExvY2FsQ2hhbmdlcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewppZiAoIWlzX2RpcigkcGF0aC4nLy5oZycpKSB7CnJldHVybjsKfQoKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2hnIHN0JywgJG91dHB1dCwgcmVhbHBhdGgoJHBhdGgpKTsKCnJldHVybiB0cmltKCRvdXRwdXQpID86IG51bGw7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRDb21taXRMb2dzKCRmcm9tUmVmZXJlbmNlLCAkdG9SZWZlcmVuY2UsICRwYXRoKQp7CiRjb21tYW5kID0gc3ByaW50ZignaGcgbG9nIC1yICVzOiVzIC0tc3R5bGUgY29tcGFjdCcsICRmcm9tUmVmZXJlbmNlLCAkdG9SZWZlcmVuY2UpOwoKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkb3V0cHV0LCByZWFscGF0aCgkcGF0aCkpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9CgpyZXR1cm4gJG91dHB1dDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERvd25sb2FkZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwoKCgoKCgppbnRlcmZhY2UgQ2hhbmdlUmVwb3J0SW50ZXJmYWNlCnsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbENoYW5nZXMoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERvd25sb2FkZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwoKCgoKCgoKCmFic3RyYWN0IGNsYXNzIEFyY2hpdmVEb3dubG9hZGVyIGV4dGVuZHMgRmlsZURvd25sb2FkZXIKewoKCgpwdWJsaWMgZnVuY3Rpb24gZG93bmxvYWQoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgpCnsKJHRlbXBvcmFyeURpciA9ICR0aGlzLT5jb25maWctPmdldCgndmVuZG9yLWRpcicpLicvY29tcG9zZXIvJy5zdWJzdHIobWQ1KHVuaXFpZCgnJywgdHJ1ZSkpLCAwLCA4KTsKJHJldHJpZXMgPSAzOwp3aGlsZSAoJHJldHJpZXMtLSkgewokZmlsZU5hbWUgPSBwYXJlbnQ6OmRvd25sb2FkKCRwYWNrYWdlLCAkcGF0aCk7CgppZiAoJHRoaXMtPmlvLT5pc1ZlcmJvc2UoKSkgewokdGhpcy0+aW8tPndyaXRlKCcgICAgRXh0cmFjdGluZyBhcmNoaXZlJyk7Cn0KCnRyeSB7CiR0aGlzLT5maWxlc3lzdGVtLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoJHRlbXBvcmFyeURpcik7CnRyeSB7CiR0aGlzLT5leHRyYWN0KCRmaWxlTmFtZSwgJHRlbXBvcmFyeURpcik7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKCiBwYXJlbnQ6OmNsZWFyQ2FjaGUoJHBhY2thZ2UsICRwYXRoKTsKdGhyb3cgJGU7Cn0KCnVubGluaygkZmlsZU5hbWUpOwoKCiAkY29udGVudERpciA9ICR0aGlzLT5saXN0RmlsZXMoJHRlbXBvcmFyeURpcik7CgoKIGlmICgxID09PSBjb3VudCgkY29udGVudERpcikgJiYgIWlzX2ZpbGUoJGNvbnRlbnREaXJbMF0pKSB7CiRjb250ZW50RGlyID0gJHRoaXMtPmxpc3RGaWxlcygkY29udGVudERpclswXSk7Cn0KCgogZm9yZWFjaCAoJGNvbnRlbnREaXIgYXMgJGZpbGUpIHsKJHRoaXMtPmZpbGVzeXN0ZW0tPnJlbmFtZSgkZmlsZSwgJHBhdGggLiAnLycgLiBiYXNlbmFtZSgkZmlsZSkpOwp9CgokdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCR0ZW1wb3JhcnlEaXIpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CgogJHRoaXMtPmZpbGVzeXN0ZW0tPnJlbW92ZURpcmVjdG9yeSgkcGF0aCk7CiR0aGlzLT5maWxlc3lzdGVtLT5yZW1vdmVEaXJlY3RvcnkoJHRlbXBvcmFyeURpcik7CgoKIGlmICgkcmV0cmllcyAmJiAkZSBpbnN0YW5jZW9mIFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJiYgY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykgJiYgJGUtPmdldENvZGUoKSA9PT0gXFppcEFyY2hpdmU6OkVSX05PWklQKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICBJbnZhbGlkIHppcCBmaWxlLCByZXRyeWluZy4uLicpOwp1c2xlZXAoNTAwMDAwKTsKY29udGludWU7Cn0KCnRocm93ICRlOwp9CgpicmVhazsKfQoKJHRoaXMtPmlvLT53cml0ZSgnJyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRGaWxlTmFtZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewpyZXR1cm4gcnRyaW0oJHBhdGguJy8nLm1kNSgkcGF0aC5zcGxfb2JqZWN0X2hhc2goJHBhY2thZ2UpKS4nLicucGF0aGluZm8ocGFyc2VfdXJsKCRwYWNrYWdlLT5nZXREaXN0VXJsKCksIFBIUF9VUkxfUEFUSCksIFBBVEhJTkZPX0VYVEVOU0lPTiksICcuJyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcm9jZXNzVXJsKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICR1cmwpCnsKaWYgKCRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkgJiYgc3RycG9zKCR1cmwsICdnaXRodWIuY29tJykpIHsKaWYgKHByZWdfbWF0Y2goJ3teaHR0cHM/Oi8vKD86d3d3XC4pP2dpdGh1YlwuY29tLyhbXi9dKykvKFteL10rKS8oemlwfHRhciliYWxsLyguKykkfWknLCAkdXJsLCAkbWF0Y2gpKSB7CgogJHVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLycgLiAkbWF0Y2hbMV0gLiAnLycuICRtYXRjaFsyXSAuICcvJyAuICRtYXRjaFszXSAuICdiYWxsLycgLiAkcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpOwp9IGVsc2VpZiAoJHBhY2thZ2UtPmdldERpc3RSZWZlcmVuY2UoKSAmJiBwcmVnX21hdGNoKCd7Xmh0dHBzPzovLyg/Ond3d1wuKT9naXRodWJcLmNvbS8oW14vXSspLyhbXi9dKykvYXJjaGl2ZS8uK1wuKHppcHx0YXIpKD86XC5neik/JH1pJywgJHVybCwgJG1hdGNoKSkgewoKICR1cmwgPSAnaHR0cHM6Ly9hcGkuZ2l0aHViLmNvbS9yZXBvcy8nIC4gJG1hdGNoWzFdIC4gJy8nLiAkbWF0Y2hbMl0gLiAnLycgLiAkbWF0Y2hbM10gLiAnYmFsbC8nIC4gJHBhY2thZ2UtPmdldERpc3RSZWZlcmVuY2UoKTsKfSBlbHNlaWYgKCRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkgJiYgcHJlZ19tYXRjaCgne15odHRwcz86Ly9hcGlcLmdpdGh1YlwuY29tL3JlcG9zLyhbXi9dKykvKFteL10rKS8oemlwfHRhciliYWxsKD86Ly4rKT8kfWknLCAkdXJsLCAkbWF0Y2gpKSB7CgogJHVybCA9ICdodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zLycgLiAkbWF0Y2hbMV0gLiAnLycuICRtYXRjaFsyXSAuICcvJyAuICRtYXRjaFszXSAuICdiYWxsLycgLiAkcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpOwp9Cn0KCmlmICghZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpICYmICgwID09PSBzdHJwb3MoJHVybCwgJ2h0dHBzOicpIHx8IDAgPT09IHN0cnBvcygkdXJsLCAnaHR0cDovL2dpdGh1Yi5jb20nKSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3UgbXVzdCBlbmFibGUgdGhlIG9wZW5zc2wgZXh0ZW5zaW9uIHRvIGRvd25sb2FkIGZpbGVzIHZpYSBodHRwcycpOwp9CgpyZXR1cm4gcGFyZW50Ojpwcm9jZXNzVXJsKCRwYWNrYWdlLCAkdXJsKTsKfQoKCgoKCgoKCgphYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZXh0cmFjdCgkZmlsZSwgJHBhdGgpOwoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBsaXN0RmlsZXMoJGRpcikKewokZmlsZXMgPSBhcnJheV9tZXJnZShnbG9iKCRkaXIgLiAnLy4qJykgPzogYXJyYXkoKSwgZ2xvYigkZGlyIC4gJy8qJykgPzogYXJyYXkoKSk7CgpyZXR1cm4gYXJyYXlfdmFsdWVzKGFycmF5X2ZpbHRlcigkZmlsZXMsIGZ1bmN0aW9uICgkZWwpIHsKcmV0dXJuIGJhc2VuYW1lKCRlbCkgIT09ICcuJyAmJiBiYXNlbmFtZSgkZWwpICE9PSAnLi4nOwp9KSk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKCgoKCgpjbGFzcyBGaWxlc3lzdGVtRXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbgp7CnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWVzc2FnZSA9IG51bGwsICRjb2RlID0gbnVsbCwgXEV4Y2VwdGlvbiAkcHJldmlvdXMgPSBudWxsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoIkZpbGVzeXN0ZW0gZXhjZXB0aW9uOiBcbiIuJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFZjc1JlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxVdGlsXFBlcmZvcmNlOwoKCgoKY2xhc3MgUGVyZm9yY2VEb3dubG9hZGVyIGV4dGVuZHMgVmNzRG93bmxvYWRlcgp7CnByb3RlY3RlZCAkcGVyZm9yY2U7CgoKCgpwdWJsaWMgZnVuY3Rpb24gZG9Eb3dubG9hZChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewokcmVmID0gJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpOwokbGFiZWwgPSAkdGhpcy0+Z2V0TGFiZWxGcm9tU291cmNlUmVmZXJlbmNlKCRyZWYpOwoKJHRoaXMtPmlvLT53cml0ZSgnICAgIENsb25pbmcgJyAuICRyZWYpOwokdGhpcy0+aW5pdFBlcmZvcmNlKCRwYWNrYWdlLCAkcGF0aCk7CiR0aGlzLT5wZXJmb3JjZS0+c2V0U3RyZWFtKCRyZWYpOwokdGhpcy0+cGVyZm9yY2UtPnA0TG9naW4oJHRoaXMtPmlvKTsKJHRoaXMtPnBlcmZvcmNlLT53cml0ZVA0Q2xpZW50U3BlYygpOwokdGhpcy0+cGVyZm9yY2UtPmNvbm5lY3RDbGllbnQoKTsKJHRoaXMtPnBlcmZvcmNlLT5zeW5jQ29kZUJhc2UoJGxhYmVsKTsKJHRoaXMtPnBlcmZvcmNlLT5jbGVhbnVwQ2xpZW50U3BlYygpOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGdldExhYmVsRnJvbVNvdXJjZVJlZmVyZW5jZSgkcmVmKQp7CiRwb3MgPSBzdHJwb3MoJHJlZiwnQCcpOwppZiAoZmFsc2UgIT09ICRwb3MpCnsKcmV0dXJuIHN1YnN0cigkcmVmLCAkcG9zICsgMSk7Cn0KcmV0dXJuIG51bGw7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpbml0UGVyZm9yY2UoJHBhY2thZ2UsICRwYXRoKQp7CmlmICghZW1wdHkoJHRoaXMtPnBlcmZvcmNlKSkgewokdGhpcy0+cGVyZm9yY2UtPmluaXRpYWxpemVQYXRoKCRwYXRoKTsKcmV0dXJuOwp9CgokcmVwb3NpdG9yeSA9ICRwYWNrYWdlLT5nZXRSZXBvc2l0b3J5KCk7CiRyZXBvQ29uZmlnID0gbnVsbDsKaWYgKCRyZXBvc2l0b3J5IGluc3RhbmNlb2YgVmNzUmVwb3NpdG9yeSkgewokcmVwb0NvbmZpZyA9ICR0aGlzLT5nZXRSZXBvQ29uZmlnKCRyZXBvc2l0b3J5KTsKfQokdGhpcy0+cGVyZm9yY2UgPSBQZXJmb3JjZTo6Y3JlYXRlKCRyZXBvQ29uZmlnLCAkcGFja2FnZS0+Z2V0U291cmNlVXJsKCksICRwYXRoLCAkdGhpcy0+cHJvY2VzcywgJHRoaXMtPmlvKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBnZXRSZXBvQ29uZmlnKFZjc1JlcG9zaXRvcnkgJHJlcG9zaXRvcnkpCnsKcmV0dXJuICRyZXBvc2l0b3J5LT5nZXRSZXBvQ29uZmlnKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBkb1VwZGF0ZShQYWNrYWdlSW50ZXJmYWNlICRpbml0aWFsLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQsICRwYXRoKQp7CiR0aGlzLT5kb0Rvd25sb2FkKCR0YXJnZXQsICRwYXRoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldExvY2FsQ2hhbmdlcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkcGF0aCkKewokdGhpcy0+aW8tPndyaXRlKCdQZXJmb3JjZSBkcml2ZXIgZG9lcyBub3QgY2hlY2sgZm9yIGxvY2FsIGNoYW5nZXMgYmVmb3JlIG92ZXJyaWRpbmcnLCB0cnVlKTsKCnJldHVybjsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbW1pdExvZ3MoJGZyb21SZWZlcmVuY2UsICR0b1JlZmVyZW5jZSwgJHBhdGgpCnsKJGNvbW1pdExvZ3MgPSAkdGhpcy0+cGVyZm9yY2UtPmdldENvbW1pdExvZ3MoJGZyb21SZWZlcmVuY2UsICR0b1JlZmVyZW5jZSk7CgpyZXR1cm4gJGNvbW1pdExvZ3M7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRQZXJmb3JjZSgkcGVyZm9yY2UpCnsKJHRoaXMtPnBlcmZvcmNlID0gJHBlcmZvcmNlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxDYWNoZTsKdXNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXI7CnVzZSBDb21wb3NlclxVdGlsXFByb2Nlc3NFeGVjdXRvcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgWmlwQXJjaGl2ZTsKCgoKCmNsYXNzIFppcERvd25sb2FkZXIgZXh0ZW5kcyBBcmNoaXZlRG93bmxvYWRlcgp7CnByb3RlY3RlZCAkcHJvY2VzczsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCBFdmVudERpc3BhdGNoZXIgJGV2ZW50RGlzcGF0Y2hlciA9IG51bGwsIENhY2hlICRjYWNoZSA9IG51bGwsIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcyA9IG51bGwpCnsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCRpbyk7CnBhcmVudDo6X19jb25zdHJ1Y3QoJGlvLCAkY29uZmlnLCAkZXZlbnREaXNwYXRjaGVyLCAkY2FjaGUpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXh0cmFjdCgkZmlsZSwgJHBhdGgpCnsKJHByb2Nlc3NFcnJvciA9IG51bGw7CgoKIGlmICghZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CiRjb21tYW5kID0gJ3VuemlwICcuZXNjYXBlc2hlbGxhcmcoJGZpbGUpLicgLWQgJy5lc2NhcGVzaGVsbGFyZygkcGF0aCkgLiAnICYmIGNobW9kIC1SIHUrdyAnIC4gZXNjYXBlc2hlbGxhcmcoJHBhdGgpOwppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRpZ25vcmVkT3V0cHV0KSkgewpyZXR1cm47Cn0KCiRwcm9jZXNzRXJyb3IgPSAnRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCk7Cn0KCmlmICghY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsKCiAkaW5pUGF0aCA9IHBocF9pbmlfbG9hZGVkX2ZpbGUoKTsKCmlmICgkaW5pUGF0aCkgewokaW5pTWVzc2FnZSA9ICdUaGUgcGhwLmluaSB1c2VkIGJ5IHlvdXIgY29tbWFuZC1saW5lIFBIUCBpczogJyAuICRpbmlQYXRoOwp9IGVsc2UgewokaW5pTWVzc2FnZSA9ICdBIHBocC5pbmkgZmlsZSBkb2VzIG5vdCBleGlzdC4gWW91IHdpbGwgaGF2ZSB0byBjcmVhdGUgb25lLic7Cn0KCiRlcnJvciA9ICJDb3VsZCBub3QgZGVjb21wcmVzcyB0aGUgYXJjaGl2ZSwgZW5hYmxlIHRoZSBQSFAgemlwIGV4dGVuc2lvbiBvciBpbnN0YWxsIHVuemlwLlxuIgouICRpbmlNZXNzYWdlIC4gIlxuIiAuICRwcm9jZXNzRXJyb3I7CgppZiAoIWRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewokZXJyb3IgPSAiQ291bGQgbm90IGRlY29tcHJlc3MgdGhlIGFyY2hpdmUsIGVuYWJsZSB0aGUgUEhQIHppcCBleHRlbnNpb24uXG4iIC4gJGluaU1lc3NhZ2U7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkZXJyb3IpOwp9CgokemlwQXJjaGl2ZSA9IG5ldyBaaXBBcmNoaXZlKCk7CgppZiAodHJ1ZSAhPT0gKCRyZXR2YWwgPSAkemlwQXJjaGl2ZS0+b3BlbigkZmlsZSkpKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCR0aGlzLT5nZXRFcnJvck1lc3NhZ2UoJHJldHZhbCwgJGZpbGUpLCAkcmV0dmFsKTsKfQoKaWYgKHRydWUgIT09ICR6aXBBcmNoaXZlLT5leHRyYWN0VG8oJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVGhlcmUgd2FzIGFuIGVycm9yIGV4dHJhY3RpbmcgdGhlIFpJUCBmaWxlLiBDb3JydXB0IGZpbGU/Iik7Cn0KCiR6aXBBcmNoaXZlLT5jbG9zZSgpOwp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVycm9yTWVzc2FnZSgkcmV0dmFsLCAkZmlsZSkKewpzd2l0Y2ggKCRyZXR2YWwpIHsKY2FzZSBaaXBBcmNoaXZlOjpFUl9FWElTVFM6CnJldHVybiBzcHJpbnRmKCJGaWxlICclcycgYWxyZWFkeSBleGlzdHMuIiwgJGZpbGUpOwpjYXNlIFppcEFyY2hpdmU6OkVSX0lOQ09OUzoKcmV0dXJuIHNwcmludGYoIlppcCBhcmNoaXZlICclcycgaXMgaW5jb25zaXN0ZW50LiIsICRmaWxlKTsKY2FzZSBaaXBBcmNoaXZlOjpFUl9JTlZBTDoKcmV0dXJuIHNwcmludGYoIkludmFsaWQgYXJndW1lbnQgKCVzKSIsICRmaWxlKTsKY2FzZSBaaXBBcmNoaXZlOjpFUl9NRU1PUlk6CnJldHVybiBzcHJpbnRmKCJNYWxsb2MgZmFpbHVyZSAoJXMpIiwgJGZpbGUpOwpjYXNlIFppcEFyY2hpdmU6OkVSX05PRU5UOgpyZXR1cm4gc3ByaW50ZigiTm8gc3VjaCB6aXAgZmlsZTogJyVzJyIsICRmaWxlKTsKY2FzZSBaaXBBcmNoaXZlOjpFUl9OT1pJUDoKcmV0dXJuIHNwcmludGYoIiclcycgaXMgbm90IGEgemlwIGFyY2hpdmUuIiwgJGZpbGUpOwpjYXNlIFppcEFyY2hpdmU6OkVSX09QRU46CnJldHVybiBzcHJpbnRmKCJDYW4ndCBvcGVuIHppcCBmaWxlOiAlcyIsICRmaWxlKTsKY2FzZSBaaXBBcmNoaXZlOjpFUl9SRUFEOgpyZXR1cm4gc3ByaW50ZigiWmlwIHJlYWQgZXJyb3IgKCVzKSIsICRmaWxlKTsKY2FzZSBaaXBBcmNoaXZlOjpFUl9TRUVLOgpyZXR1cm4gc3ByaW50ZigiWmlwIHNlZWsgZXJyb3IgKCVzKSIsICRmaWxlKTsKZGVmYXVsdDoKcmV0dXJuIHNwcmludGYoIiclcycgaXMgbm90IGEgdmFsaWQgemlwIGFyY2hpdmUsIGdvdCBlcnJvciBjb2RlOiAlcyIsICRmaWxlLCAkcmV0dmFsKTsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRG93bmxvYWRlcjsKCnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxDYWNoZTsKdXNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXI7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxVdGlsXFByb2Nlc3NFeGVjdXRvcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBHemlwRG93bmxvYWRlciBleHRlbmRzIEFyY2hpdmVEb3dubG9hZGVyCnsKcHJvdGVjdGVkICRwcm9jZXNzOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIEV2ZW50RGlzcGF0Y2hlciAkZXZlbnREaXNwYXRjaGVyID0gbnVsbCwgQ2FjaGUgJGNhY2hlID0gbnVsbCwgUHJvY2Vzc0V4ZWN1dG9yICRwcm9jZXNzID0gbnVsbCkKewokdGhpcy0+cHJvY2VzcyA9ICRwcm9jZXNzID86IG5ldyBQcm9jZXNzRXhlY3V0b3IoJGlvKTsKcGFyZW50OjpfX2NvbnN0cnVjdCgkaW8sICRjb25maWcsICRldmVudERpc3BhdGNoZXIsICRjYWNoZSk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBleHRyYWN0KCRmaWxlLCAkcGF0aCkKewokdGFyZ2V0RmlsZXBhdGggPSAkcGF0aCAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiBiYXNlbmFtZShzdWJzdHIoJGZpbGUsIDAsIC0zKSk7CgoKIGlmICghZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CiRjb21tYW5kID0gJ2d6aXAgLWNkICcgLiBlc2NhcGVzaGVsbGFyZygkZmlsZSkgLiAnID4gJyAuIGVzY2FwZXNoZWxsYXJnKCR0YXJnZXRGaWxlcGF0aCk7CgppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRpZ25vcmVkT3V0cHV0KSkgewpyZXR1cm47Cn0KCiRwcm9jZXNzRXJyb3IgPSAnRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCk7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigkcHJvY2Vzc0Vycm9yKTsKfQoKCiAkYXJjaGl2ZUZpbGUgPSBnem9wZW4oJGZpbGUsICdyYicpOwokdGFyZ2V0RmlsZSA9IGZvcGVuKCR0YXJnZXRGaWxlcGF0aCwgJ3diJyk7CndoaWxlICgkc3RyaW5nID0gZ3pyZWFkKCRhcmNoaXZlRmlsZSwgNDA5NikpIHsKZndyaXRlKCR0YXJnZXRGaWxlLCAkc3RyaW5nLCBzdHJsZW4oJHN0cmluZykpOwp9Cmd6Y2xvc2UoJGFyY2hpdmVGaWxlKTsKZmNsb3NlKCR0YXJnZXRGaWxlKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEZpbGVOYW1lKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CnJldHVybiAkcGF0aC4nLycucGF0aGluZm8ocGFyc2VfdXJsKCRwYWNrYWdlLT5nZXREaXN0VXJsKCksIFBIUF9VUkxfUEFUSCksIFBBVEhJTkZPX0JBU0VOQU1FKTsKfQp9Cgo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEb3dubG9hZGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFV0aWxcR2l0SHViOwp1c2UgQ29tcG9zZXJcVXRpbFxHaXQgYXMgR2l0VXRpbDsKCgoKCmNsYXNzIEdpdERvd25sb2FkZXIgZXh0ZW5kcyBWY3NEb3dubG9hZGVyCnsKcHJpdmF0ZSAkaGFzU3Rhc2hlZENoYW5nZXMgPSBmYWxzZTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBkb0Rvd25sb2FkKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CiR0aGlzLT5jbGVhbkVudigpOwokcGF0aCA9ICR0aGlzLT5ub3JtYWxpemVQYXRoKCRwYXRoKTsKCiRyZWYgPSAkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCk7CiRmbGFnID0gZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9NQUpPUicpID8gJy9EICcgOiAnJzsKJGNvbW1hbmQgPSAnZ2l0IGNsb25lIC0tbm8tY2hlY2tvdXQgJXMgJXMgJiYgY2QgJy4kZmxhZy4nJTIkcyAmJiBnaXQgcmVtb3RlIGFkZCBjb21wb3NlciAlMSRzICYmIGdpdCBmZXRjaCBjb21wb3Nlcic7CiR0aGlzLT5pby0+d3JpdGUoIiAgICBDbG9uaW5nICIuJHJlZik7CgokY29tbWFuZENhbGxhYmxlID0gZnVuY3Rpb24oJHVybCkgdXNlICgkcmVmLCAkcGF0aCwgJGNvbW1hbmQpIHsKcmV0dXJuIHNwcmludGYoJGNvbW1hbmQsIGVzY2FwZXNoZWxsYXJnKCR1cmwpLCBlc2NhcGVzaGVsbGFyZygkcGF0aCksIGVzY2FwZXNoZWxsYXJnKCRyZWYpKTsKfTsKCiR0aGlzLT5ydW5Db21tYW5kKCRjb21tYW5kQ2FsbGFibGUsICRwYWNrYWdlLT5nZXRTb3VyY2VVcmwoKSwgJHBhdGgsIHRydWUpOwokdGhpcy0+c2V0UHVzaFVybCgkcGFja2FnZSwgJHBhdGgpOwoKaWYgKCRuZXdSZWYgPSAkdGhpcy0+dXBkYXRlVG9Db21taXQoJHBhdGgsICRyZWYsICRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCksICRwYWNrYWdlLT5nZXRSZWxlYXNlRGF0ZSgpKSkgewppZiAoJHBhY2thZ2UtPmdldERpc3RSZWZlcmVuY2UoKSA9PT0gJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpKSB7CiRwYWNrYWdlLT5zZXREaXN0UmVmZXJlbmNlKCRuZXdSZWYpOwp9CiRwYWNrYWdlLT5zZXRTb3VyY2VSZWZlcmVuY2UoJG5ld1JlZik7Cn0KfQoKCgoKcHVibGljIGZ1bmN0aW9uIGRvVXBkYXRlKFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCwgJHBhdGgpCnsKJHRoaXMtPmNsZWFuRW52KCk7CiRwYXRoID0gJHRoaXMtPm5vcm1hbGl6ZVBhdGgoJHBhdGgpOwppZiAoIWlzX2RpcigkcGF0aC4nLy5naXQnKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSAuZ2l0IGRpcmVjdG9yeSBpcyBtaXNzaW5nIGZyb20gJy4kcGF0aC4nLCBzZWUgaHR0cDovL2dldGNvbXBvc2VyLm9yZy9jb21taXQtZGVwcyBmb3IgbW9yZSBpbmZvcm1hdGlvbicpOwp9CgokcmVmID0gJHRhcmdldC0+Z2V0U291cmNlUmVmZXJlbmNlKCk7CiR0aGlzLT5pby0+d3JpdGUoIiAgICBDaGVja2luZyBvdXQgIi4kcmVmKTsKJGNvbW1hbmQgPSAnZ2l0IHJlbW90ZSBzZXQtdXJsIGNvbXBvc2VyICVzICYmIGdpdCBmZXRjaCBjb21wb3NlciAmJiBnaXQgZmV0Y2ggLS10YWdzIGNvbXBvc2VyJzsKCgogJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCByZW1vdGUgLXYnLCAkb3V0cHV0LCAkcGF0aCk7CmlmIChwcmVnX21hdGNoKCd7Xig/OmNvbXBvc2VyfG9yaWdpbilccytodHRwcz86Ly8oLispOiguKylAKFteL10rKX1pbScsICRvdXRwdXQsICRtYXRjaCkpIHsKJHRoaXMtPmlvLT5zZXRBdXRoZW50aWNhdGlvbigkbWF0Y2hbM10sIHVybGRlY29kZSgkbWF0Y2hbMV0pLCB1cmxkZWNvZGUoJG1hdGNoWzJdKSk7Cn0KCiRjb21tYW5kQ2FsbGFibGUgPSBmdW5jdGlvbigkdXJsKSB1c2UgKCRjb21tYW5kKSB7CnJldHVybiBzcHJpbnRmKCRjb21tYW5kLCBlc2NhcGVzaGVsbGFyZygkdXJsKSk7Cn07CgokdGhpcy0+cnVuQ29tbWFuZCgkY29tbWFuZENhbGxhYmxlLCAkdGFyZ2V0LT5nZXRTb3VyY2VVcmwoKSwgJHBhdGgpOwppZiAoJG5ld1JlZiA9ICR0aGlzLT51cGRhdGVUb0NvbW1pdCgkcGF0aCwgJHJlZiwgJHRhcmdldC0+Z2V0UHJldHR5VmVyc2lvbigpLCAkdGFyZ2V0LT5nZXRSZWxlYXNlRGF0ZSgpKSkgewppZiAoJHRhcmdldC0+Z2V0RGlzdFJlZmVyZW5jZSgpID09PSAkdGFyZ2V0LT5nZXRTb3VyY2VSZWZlcmVuY2UoKSkgewokdGFyZ2V0LT5zZXREaXN0UmVmZXJlbmNlKCRuZXdSZWYpOwp9CiR0YXJnZXQtPnNldFNvdXJjZVJlZmVyZW5jZSgkbmV3UmVmKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxDaGFuZ2VzKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CiR0aGlzLT5jbGVhbkVudigpOwokcGF0aCA9ICR0aGlzLT5ub3JtYWxpemVQYXRoKCRwYXRoKTsKaWYgKCFpc19kaXIoJHBhdGguJy8uZ2l0JykpIHsKcmV0dXJuOwp9CgokY29tbWFuZCA9ICdnaXQgc3RhdHVzIC0tcG9yY2VsYWluIC0tdW50cmFja2VkLWZpbGVzPW5vJzsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkb3V0cHV0LCAkcGF0aCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gZXhlY3V0ZSAnIC4gJGNvbW1hbmQgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSk7Cn0KCnJldHVybiB0cmltKCRvdXRwdXQpID86IG51bGw7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjbGVhbkNoYW5nZXMoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJHBhdGgsICR1cGRhdGUpCnsKJHRoaXMtPmNsZWFuRW52KCk7CiRwYXRoID0gJHRoaXMtPm5vcm1hbGl6ZVBhdGgoJHBhdGgpOwppZiAoISRjaGFuZ2VzID0gJHRoaXMtPmdldExvY2FsQ2hhbmdlcygkcGFja2FnZSwgJHBhdGgpKSB7CnJldHVybjsKfQoKaWYgKCEkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSkgewokZGlzY2FyZENoYW5nZXMgPSAkdGhpcy0+Y29uZmlnLT5nZXQoJ2Rpc2NhcmQtY2hhbmdlcycpOwppZiAodHJ1ZSA9PT0gJGRpc2NhcmRDaGFuZ2VzKSB7CnJldHVybiAkdGhpcy0+ZGlzY2FyZENoYW5nZXMoJHBhdGgpOwp9CmlmICgnc3Rhc2gnID09PSAkZGlzY2FyZENoYW5nZXMpIHsKaWYgKCEkdXBkYXRlKSB7CnJldHVybiBwYXJlbnQ6OmNsZWFuQ2hhbmdlcygkcGFja2FnZSwgJHBhdGgsICR1cGRhdGUpOwp9CgpyZXR1cm4gJHRoaXMtPnN0YXNoQ2hhbmdlcygkcGF0aCk7Cn0KCnJldHVybiBwYXJlbnQ6OmNsZWFuQ2hhbmdlcygkcGFja2FnZSwgJHBhdGgsICR1cGRhdGUpOwp9CgokY2hhbmdlcyA9IGFycmF5X21hcChmdW5jdGlvbiAoJGVsZW0pIHsKcmV0dXJuICcgICAgJy4kZWxlbTsKfSwgcHJlZ19zcGxpdCgne1xzKlxyP1xuXHMqfScsICRjaGFuZ2VzKSk7CiR0aGlzLT5pby0+d3JpdGUoJyAgICA8ZXJyb3I+VGhlIHBhY2thZ2UgaGFzIG1vZGlmaWVkIGZpbGVzOjwvZXJyb3I+Jyk7CiR0aGlzLT5pby0+d3JpdGUoYXJyYXlfc2xpY2UoJGNoYW5nZXMsIDAsIDEwKSk7CmlmIChjb3VudCgkY2hhbmdlcykgPiAxMCkgewokdGhpcy0+aW8tPndyaXRlKCcgICAgPGluZm8+Jy5jb3VudCgkY2hhbmdlcykgLSAxMCAuICcgbW9yZSBmaWxlcyBtb2RpZmllZCwgY2hvb3NlICJ2IiB0byB2aWV3IHRoZSBmdWxsIGxpc3Q8L2luZm8+Jyk7Cn0KCndoaWxlICh0cnVlKSB7CnN3aXRjaCAoJHRoaXMtPmlvLT5hc2soJyAgICA8aW5mbz5EaXNjYXJkIGNoYW5nZXMgW3ksbix2LCcuKCR1cGRhdGUgPyAncywnIDogJycpLic/XT88L2luZm8+ICcsICc/JykpIHsKY2FzZSAneSc6CiR0aGlzLT5kaXNjYXJkQ2hhbmdlcygkcGF0aCk7CmJyZWFrIDI7CgpjYXNlICdzJzoKaWYgKCEkdXBkYXRlKSB7CmdvdG8gaGVscDsKfQoKJHRoaXMtPnN0YXNoQ2hhbmdlcygkcGF0aCk7CmJyZWFrIDI7CgpjYXNlICduJzoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVcGRhdGUgYWJvcnRlZCcpOwoKY2FzZSAndic6CiR0aGlzLT5pby0+d3JpdGUoJGNoYW5nZXMpOwpicmVhazsKCmNhc2UgJz8nOgpkZWZhdWx0OgpoZWxwOgokdGhpcy0+aW8tPndyaXRlKGFycmF5KAonICAgIHkgLSBkaXNjYXJkIGNoYW5nZXMgYW5kIGFwcGx5IHRoZSAnLigkdXBkYXRlID8gJ3VwZGF0ZScgOiAndW5pbnN0YWxsJyksCicgICAgbiAtIGFib3J0IHRoZSAnLigkdXBkYXRlID8gJ3VwZGF0ZScgOiAndW5pbnN0YWxsJykuJyBhbmQgbGV0IHlvdSBtYW51YWxseSBjbGVhbiB0aGluZ3MgdXAnLAonICAgIHYgLSB2aWV3IG1vZGlmaWVkIGZpbGVzJywKKSk7CmlmICgkdXBkYXRlKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICBzIC0gc3Rhc2ggY2hhbmdlcyBhbmQgdHJ5IHRvIHJlYXBwbHkgdGhlbSBhZnRlciB0aGUgdXBkYXRlJyk7Cn0KJHRoaXMtPmlvLT53cml0ZSgnICAgID8gLSBwcmludCBoZWxwJyk7CmJyZWFrOwp9Cn0KfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHJlYXBwbHlDaGFuZ2VzKCRwYXRoKQp7CiRwYXRoID0gJHRoaXMtPm5vcm1hbGl6ZVBhdGgoJHBhdGgpOwppZiAoJHRoaXMtPmhhc1N0YXNoZWRDaGFuZ2VzKSB7CiR0aGlzLT5oYXNTdGFzaGVkQ2hhbmdlcyA9IGZhbHNlOwokdGhpcy0+aW8tPndyaXRlKCcgICAgPGluZm8+UmUtYXBwbHlpbmcgc3Rhc2hlZCBjaGFuZ2VzJyk7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnZ2l0IHN0YXNoIHBvcCcsICRvdXRwdXQsICRwYXRoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkZhaWxlZCB0byBhcHBseSBzdGFzaGVkIGNoYW5nZXM6XG5cbiIuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9Cn0KfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHVwZGF0ZVRvQ29tbWl0KCRwYXRoLCAkcmVmZXJlbmNlLCAkYnJhbmNoLCAkZGF0ZSkKewokdGVtcGxhdGUgPSAnZ2l0IGNoZWNrb3V0ICVzICYmIGdpdCByZXNldCAtLWhhcmQgJTEkcyc7CiRicmFuY2ggPSBwcmVnX3JlcGxhY2UoJ3soPzpeZGV2LXwoPzpcLngpPy1kZXYkKX1pJywgJycsICRicmFuY2gpOwoKJGJyYW5jaGVzID0gbnVsbDsKaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgYnJhbmNoIC1yJywgJG91dHB1dCwgJHBhdGgpKSB7CiRicmFuY2hlcyA9ICRvdXRwdXQ7Cn0KCgogJGdpdFJlZiA9ICRyZWZlcmVuY2U7CmlmICghcHJlZ19tYXRjaCgne15bYS1mMC05XXs0MH0kfScsICRyZWZlcmVuY2UpCiYmICRicmFuY2hlcwomJiBwcmVnX21hdGNoKCd7XlxzK2NvbXBvc2VyLycucHJlZ19xdW90ZSgkcmVmZXJlbmNlKS4nJH1tJywgJGJyYW5jaGVzKQopIHsKJGNvbW1hbmQgPSBzcHJpbnRmKCdnaXQgY2hlY2tvdXQgLUIgJXMgJXMgJiYgZ2l0IHJlc2V0IC0taGFyZCAlMiRzJywgZXNjYXBlc2hlbGxhcmcoJGJyYW5jaCksIGVzY2FwZXNoZWxsYXJnKCdjb21wb3Nlci8nLiRyZWZlcmVuY2UpKTsKaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkb3V0cHV0LCAkcGF0aCkpIHsKcmV0dXJuOwp9Cn0KCgogaWYgKHByZWdfbWF0Y2goJ3teW2EtZjAtOV17NDB9JH0nLCAkcmVmZXJlbmNlKSkgewoKIGlmICghcHJlZ19tYXRjaCgne15ccytjb21wb3Nlci8nLnByZWdfcXVvdGUoJGJyYW5jaCkuJyR9bScsICRicmFuY2hlcykgJiYgcHJlZ19tYXRjaCgne15ccytjb21wb3Nlci92Jy5wcmVnX3F1b3RlKCRicmFuY2gpLickfW0nLCAkYnJhbmNoZXMpKSB7CiRicmFuY2ggPSAndicgLiAkYnJhbmNoOwp9CgokY29tbWFuZCA9IHNwcmludGYoJ2dpdCBjaGVja291dCAlcycsIGVzY2FwZXNoZWxsYXJnKCRicmFuY2gpKTsKJGZhbGxiYWNrQ29tbWFuZCA9IHNwcmludGYoJ2dpdCBjaGVja291dCAtQiAlcyAlcycsIGVzY2FwZXNoZWxsYXJnKCRicmFuY2gpLCBlc2NhcGVzaGVsbGFyZygnY29tcG9zZXIvJy4kYnJhbmNoKSk7CmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCwgJHBhdGgpCnx8IDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRmYWxsYmFja0NvbW1hbmQsICRvdXRwdXQsICRwYXRoKQopIHsKJGNvbW1hbmQgPSBzcHJpbnRmKCdnaXQgcmVzZXQgLS1oYXJkICVzJywgZXNjYXBlc2hlbGxhcmcoJHJlZmVyZW5jZSkpOwppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRvdXRwdXQsICRwYXRoKSkgewpyZXR1cm47Cn0KfQp9CgokY29tbWFuZCA9IHNwcmludGYoJHRlbXBsYXRlLCBlc2NhcGVzaGVsbGFyZygkZ2l0UmVmKSk7CmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCwgJHBhdGgpKSB7CnJldHVybjsKfQoKCiBpZiAoJGRhdGUgJiYgZmFsc2UgIT09IHN0cnBvcygkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSwgJHJlZmVyZW5jZSkpIHsKJGRhdGUgPSAkZGF0ZS0+Zm9ybWF0KCdVJyk7CgoKICRjb21tYW5kID0gJ2dpdCBicmFuY2ggLXInOwppZiAoMCAhPT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRvdXRwdXQsICRwYXRoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBleGVjdXRlICcgLiAkY29tbWFuZCAuICJcblxuIiAuICR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpKTsKfQoKJGd1ZXNzVGVtcGxhdGUgPSAnZ2l0IGxvZyAtLXVudGlsPSVzIC0tZGF0ZT1yYXcgLW4xIC0tcHJldHR5PSUlSCAlcyc7CmZvcmVhY2ggKCR0aGlzLT5wcm9jZXNzLT5zcGxpdExpbmVzKCRvdXRwdXQpIGFzICRsaW5lKSB7CmlmIChwcmVnX21hdGNoKCd7XmNvbXBvc2VyLycucHJlZ19xdW90ZSgkYnJhbmNoKS4nKD86XC54KT8kfWknLCB0cmltKCRsaW5lKSkpIHsKCiBpZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoc3ByaW50ZigkZ3Vlc3NUZW1wbGF0ZSwgJGRhdGUsIGVzY2FwZXNoZWxsYXJnKHRyaW0oJGxpbmUpKSksICRvdXRwdXQsICRwYXRoKSkgewokbmV3UmVmZXJlbmNlID0gdHJpbSgkb3V0cHV0KTsKfQoKYnJlYWs7Cn0KfQoKaWYgKGVtcHR5KCRuZXdSZWZlcmVuY2UpKSB7CgogaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKHNwcmludGYoJGd1ZXNzVGVtcGxhdGUsICRkYXRlLCAnLS1hbGwnKSwgJG91dHB1dCwgJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICR0aGlzLT5zYW5pdGl6ZVVybCgkY29tbWFuZCkgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSk7Cn0KJG5ld1JlZmVyZW5jZSA9IHRyaW0oJG91dHB1dCk7Cn0KCgogJGNvbW1hbmQgPSBzcHJpbnRmKCR0ZW1wbGF0ZSwgZXNjYXBlc2hlbGxhcmcoJG5ld1JlZmVyZW5jZSkpOwppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNvbW1hbmQsICRvdXRwdXQsICRwYXRoKSkgewokdGhpcy0+aW8tPndyaXRlKCcgICAgJy4kcmVmZXJlbmNlLicgaXMgZ29uZSAoaGlzdG9yeSB3YXMgcmV3cml0dGVuPyksIHJlY292ZXJlZCBieSBjaGVja2luZyBvdXQgJy4kbmV3UmVmZXJlbmNlKTsKCnJldHVybiAkbmV3UmVmZXJlbmNlOwp9Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICR0aGlzLT5zYW5pdGl6ZVVybCgkY29tbWFuZCkgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSk7Cn0KCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gcnVuQ29tbWFuZCgkY29tbWFuZENhbGxhYmxlLCAkdXJsLCAkY3dkLCAkaW5pdGlhbENsb25lID0gZmFsc2UpCnsKaWYgKCRpbml0aWFsQ2xvbmUpIHsKJG9yaWdDd2QgPSAkY3dkOwokY3dkID0gbnVsbDsKfQoKaWYgKHByZWdfbWF0Y2goJ3tec3NoOi8vW15AXStAW146XSs6W14wLTldK30nLCAkdXJsKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHNvdXJjZSBVUkwgJy4kdXJsLicgaXMgaW52YWxpZCwgc3NoIFVSTHMgc2hvdWxkIGhhdmUgYSBwb3J0IG51bWJlciBhZnRlciAiOiIuJy4iXG4iLidVc2Ugc3NoOi8vZ2l0QGV4YW1wbGUuY29tOjIyL3BhdGggb3IganVzdCBnaXRAZXhhbXBsZS5jb206cGF0aCBpZiB5b3UgZG8gbm90IHdhbnQgdG8gcHJvdmlkZSBhIHBhc3N3b3JkIG9yIGN1c3RvbSBwb3J0LicpOwp9CgoKIGlmIChwcmVnX21hdGNoKCd7Xig/Omh0dHBzP3xnaXQpOi8vJy4kdGhpcy0+Z2V0R2l0SHViRG9tYWluc1JlZ2V4KCkuJy8oLiopfScsICR1cmwsICRtYXRjaCkpIHsKJHByb3RvY29scyA9ICR0aGlzLT5jb25maWctPmdldCgnZ2l0aHViLXByb3RvY29scycpOwppZiAoIWlzX2FycmF5KCRwcm90b2NvbHMpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ29uZmlnIHZhbHVlICJnaXRodWItcHJvdG9jb2xzIiBtdXN0IGJlIGFuIGFycmF5LCBnb3QgJy5nZXR0eXBlKCRwcm90b2NvbHMpKTsKfQokbWVzc2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcHJvdG9jb2xzIGFzICRwcm90b2NvbCkgewppZiAoJ3NzaCcgPT09ICRwcm90b2NvbCkgewokdXJsID0gImdpdEAiIC4gJG1hdGNoWzFdIC4gIjoiIC4gJG1hdGNoWzJdOwp9IGVsc2UgewokdXJsID0gJHByb3RvY29sIC4iOi8vIiAuICRtYXRjaFsxXSAuICIvIiAuICRtYXRjaFsyXTsKfQoKaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKGNhbGxfdXNlcl9mdW5jKCRjb21tYW5kQ2FsbGFibGUsICR1cmwpLCAkaWdub3JlZE91dHB1dCwgJGN3ZCkpIHsKcmV0dXJuOwp9CiRtZXNzYWdlc1tdID0gJy0gJyAuICR1cmwgLiAiXG4iIC4gcHJlZ19yZXBsYWNlKCcjXiNtJywgJyAgJywgJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwppZiAoJGluaXRpYWxDbG9uZSkgewokdGhpcy0+ZmlsZXN5c3RlbS0+cmVtb3ZlRGlyZWN0b3J5KCRvcmlnQ3dkKTsKfQp9CgoKICR0aGlzLT50aHJvd0V4Y2VwdGlvbignRmFpbGVkIHRvIGNsb25lICcgLiAkdGhpcy0+c2FuaXRpemVVcmwoJHVybCkgLicgdmlhICcuaW1wbG9kZSgnLCAnLCAkcHJvdG9jb2xzKS4nIHByb3RvY29scywgYWJvcnRpbmcuJyAuICJcblxuIiAuIGltcGxvZGUoIlxuIiwgJG1lc3NhZ2VzKSwgJHVybCk7Cn0KCiRjb21tYW5kID0gY2FsbF91c2VyX2Z1bmMoJGNvbW1hbmRDYWxsYWJsZSwgJHVybCk7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJGlnbm9yZWRPdXRwdXQsICRjd2QpKSB7CgogaWYgKHByZWdfbWF0Y2goJ3teZ2l0QCcuJHRoaXMtPmdldEdpdEh1YkRvbWFpbnNSZWdleCgpLic6KC4rPylcLmdpdCR9aScsICR1cmwsICRtYXRjaCkpIHsKaWYgKCEkdGhpcy0+aW8tPmhhc0F1dGhlbnRpY2F0aW9uKCRtYXRjaFsxXSkpIHsKJGdpdEh1YlV0aWwgPSBuZXcgR2l0SHViKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZywgJHRoaXMtPnByb2Nlc3MpOwokbWVzc2FnZSA9ICdDbG9uaW5nIGZhaWxlZCB1c2luZyBhbiBzc2gga2V5IGZvciBhdXRoZW50aWNhdGlvbiwgZW50ZXIgeW91ciBHaXRIdWIgY3JlZGVudGlhbHMgdG8gYWNjZXNzIHByaXZhdGUgcmVwb3MnOwoKaWYgKCEkZ2l0SHViVXRpbC0+YXV0aG9yaXplT0F1dGgoJG1hdGNoWzFdKSAmJiAkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSkgewokZ2l0SHViVXRpbC0+YXV0aG9yaXplT0F1dGhJbnRlcmFjdGl2ZWx5KCRtYXRjaFsxXSwgJG1lc3NhZ2UpOwp9Cn0KCmlmICgkdGhpcy0+aW8tPmhhc0F1dGhlbnRpY2F0aW9uKCRtYXRjaFsxXSkpIHsKJGF1dGggPSAkdGhpcy0+aW8tPmdldEF1dGhlbnRpY2F0aW9uKCRtYXRjaFsxXSk7CiR1cmwgPSAnaHR0cHM6Ly8nLnJhd3VybGVuY29kZSgkYXV0aFsndXNlcm5hbWUnXSkgLiAnOicgLiByYXd1cmxlbmNvZGUoJGF1dGhbJ3Bhc3N3b3JkJ10pIC4gJ0AnLiRtYXRjaFsxXS4nLycuJG1hdGNoWzJdLicuZ2l0JzsKCiRjb21tYW5kID0gY2FsbF91c2VyX2Z1bmMoJGNvbW1hbmRDYWxsYWJsZSwgJHVybCk7CmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJGlnbm9yZWRPdXRwdXQsICRjd2QpKSB7CnJldHVybjsKfQp9Cn0gZWxzZWlmICggCiAkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSAmJgpwcmVnX21hdGNoKCd7KGh0dHBzPzovLykoW14vXSspKC4qKSR9aScsICR1cmwsICRtYXRjaCkgJiYKc3RycG9zKCR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpLCAnZmF0YWw6IEF1dGhlbnRpY2F0aW9uIGZhaWxlZCcpICE9PSBmYWxzZQopIHsKCiBpZiAoJHRoaXMtPmlvLT5oYXNBdXRoZW50aWNhdGlvbigkbWF0Y2hbMl0pKSB7CiRhdXRoID0gJHRoaXMtPmlvLT5nZXRBdXRoZW50aWNhdGlvbigkbWF0Y2hbMl0pOwp9IGVsc2UgewokdGhpcy0+aW8tPndyaXRlKCR1cmwuJyByZXF1aXJlcyBBdXRoZW50aWNhdGlvbicpOwokYXV0aCA9IGFycmF5KAondXNlcm5hbWUnID0+ICR0aGlzLT5pby0+YXNrKCdVc2VybmFtZTogJyksCidwYXNzd29yZCcgPT4gJHRoaXMtPmlvLT5hc2tBbmRIaWRlQW5zd2VyKCdQYXNzd29yZDogJyksCik7Cn0KCiR1cmwgPSAkbWF0Y2hbMV0ucmF3dXJsZW5jb2RlKCRhdXRoWyd1c2VybmFtZSddKS4nOicucmF3dXJsZW5jb2RlKCRhdXRoWydwYXNzd29yZCddKS4nQCcuJG1hdGNoWzJdLiRtYXRjaFszXTsKCiRjb21tYW5kID0gY2FsbF91c2VyX2Z1bmMoJGNvbW1hbmRDYWxsYWJsZSwgJHVybCk7CmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJGlnbm9yZWRPdXRwdXQsICRjd2QpKSB7CiR0aGlzLT5pby0+c2V0QXV0aGVudGljYXRpb24oJG1hdGNoWzJdLCAkYXV0aFsndXNlcm5hbWUnXSwgJGF1dGhbJ3Bhc3N3b3JkJ10pOwoKcmV0dXJuOwp9Cn0KCmlmICgkaW5pdGlhbENsb25lKSB7CiR0aGlzLT5maWxlc3lzdGVtLT5yZW1vdmVEaXJlY3RvcnkoJG9yaWdDd2QpOwp9CiR0aGlzLT50aHJvd0V4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICR0aGlzLT5zYW5pdGl6ZVVybCgkY29tbWFuZCkgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSwgJHVybCk7Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEdpdEh1YkRvbWFpbnNSZWdleCgpCnsKcmV0dXJuICcoJy5pbXBsb2RlKCd8JywgYXJyYXlfbWFwKCdwcmVnX3F1b3RlJywgJHRoaXMtPmNvbmZpZy0+Z2V0KCdnaXRodWItZG9tYWlucycpKSkuJyknOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gdGhyb3dFeGNlcHRpb24oJG1lc3NhZ2UsICR1cmwpCnsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgLS12ZXJzaW9uJywgJGlnbm9yZWRPdXRwdXQpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGNsb25lICcuJHRoaXMtPnNhbml0aXplVXJsKCR1cmwpLicsIGdpdCB3YXMgbm90IGZvdW5kLCBjaGVjayB0aGF0IGl0IGlzIGluc3RhbGxlZCBhbmQgaW4geW91ciBQQVRIIGVudi4nIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9Cgp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJG1lc3NhZ2UpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2FuaXRpemVVcmwoJG1lc3NhZ2UpCnsKcmV0dXJuIHByZWdfcmVwbGFjZSgnezovLyhbXkBdKz8pOi4rP0B9JywgJzovLyQxOioqKkAnLCAkbWVzc2FnZSk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBzZXRQdXNoVXJsKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRwYXRoKQp7CgogaWYgKHByZWdfbWF0Y2goJ3teKD86aHR0cHM/fGdpdCk6Ly8nLiR0aGlzLT5nZXRHaXRIdWJEb21haW5zUmVnZXgoKS4nLyhbXi9dKykvKFteL10rPykoPzpcLmdpdCk/JH0nLCAkcGFja2FnZS0+Z2V0U291cmNlVXJsKCksICRtYXRjaCkpIHsKJHByb3RvY29scyA9ICR0aGlzLT5jb25maWctPmdldCgnZ2l0aHViLXByb3RvY29scycpOwokcHVzaFVybCA9ICdnaXRAJy4kbWF0Y2hbMV0uJzonLiRtYXRjaFsyXS4nLycuJG1hdGNoWzNdLicuZ2l0JzsKaWYgKCRwcm90b2NvbHNbMF0gIT09ICdnaXQnKSB7CiRwdXNoVXJsID0gJ2h0dHBzOi8vJyAuICRtYXRjaFsxXSAuICcvJy4kbWF0Y2hbMl0uJy8nLiRtYXRjaFszXS4nLmdpdCc7Cn0KJGNtZCA9IHNwcmludGYoJ2dpdCByZW1vdGUgc2V0LXVybCAtLXB1c2ggb3JpZ2luICVzJywgZXNjYXBlc2hlbGxhcmcoJHB1c2hVcmwpKTsKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJGNtZCwgJGlnbm9yZWRPdXRwdXQsICRwYXRoKTsKfQp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q29tbWl0TG9ncygkZnJvbVJlZmVyZW5jZSwgJHRvUmVmZXJlbmNlLCAkcGF0aCkKewokcGF0aCA9ICR0aGlzLT5ub3JtYWxpemVQYXRoKCRwYXRoKTsKJGNvbW1hbmQgPSBzcHJpbnRmKCdnaXQgbG9nICVzLi4lcyAtLXByZXR0eT1mb3JtYXQ6IiUlaCAtICUlYW46ICUlcyInLCAkZnJvbVJlZmVyZW5jZSwgJHRvUmVmZXJlbmNlKTsKCmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCwgJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgJyAuICRjb21tYW5kIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9CgpyZXR1cm4gJG91dHB1dDsKfQoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkaXNjYXJkQ2hhbmdlcygkcGF0aCkKewokcGF0aCA9ICR0aGlzLT5ub3JtYWxpemVQYXRoKCRwYXRoKTsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgcmVzZXQgLS1oYXJkJywgJG91dHB1dCwgJHBhdGgpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IHJlc2V0IGNoYW5nZXNcblxuOiIuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9Cn0KCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gc3Rhc2hDaGFuZ2VzKCRwYXRoKQp7CiRwYXRoID0gJHRoaXMtPm5vcm1hbGl6ZVBhdGgoJHBhdGgpOwppZiAoMCAhPT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCBzdGFzaCcsICRvdXRwdXQsICRwYXRoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIkNvdWxkIG5vdCBzdGFzaCBjaGFuZ2VzXG5cbjoiLiR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpKTsKfQoKJHRoaXMtPmhhc1N0YXNoZWRDaGFuZ2VzID0gdHJ1ZTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuRW52KCkKewokdXRpbCA9IG5ldyBHaXRVdGlsOwokdXRpbC0+Y2xlYW5FbnYoKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIG5vcm1hbGl6ZVBhdGgoJHBhdGgpCnsKaWYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fTUFKT1InKSAmJiBzdHJsZW4oJHBhdGgpID4gMCkgewokYmFzZVBhdGggPSAkcGF0aDsKJHJlbW92ZWQgPSBhcnJheSgpOwoKd2hpbGUgKCFpc19kaXIoJGJhc2VQYXRoKSAmJiAkYmFzZVBhdGggIT09ICdcXCcpIHsKYXJyYXlfdW5zaGlmdCgkcmVtb3ZlZCwgYmFzZW5hbWUoJGJhc2VQYXRoKSk7CiRiYXNlUGF0aCA9IGRpcm5hbWUoJGJhc2VQYXRoKTsKfQoKaWYgKCRiYXNlUGF0aCA9PT0gJ1xcJykgewpyZXR1cm4gJHBhdGg7Cn0KCiRwYXRoID0gcnRyaW0ocmVhbHBhdGgoJGJhc2VQYXRoKSAuICcvJyAuIGltcGxvZGUoJy8nLCAkcmVtb3ZlZCksICcvJyk7Cn0KCnJldHVybiAkcGF0aDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7CgoKCgoKCmNsYXNzIEludmFsaWRSZXBvc2l0b3J5RXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbgp7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQ29tcGxldGVQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxWZXJzaW9uXFZlcnNpb25QYXJzZXI7CgoKCgoKCmNsYXNzIEFycmF5UmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlcG9zaXRvcnlJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJHBhY2thZ2VzOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRwYWNrYWdlcyA9IGFycmF5KCkpCnsKZm9yZWFjaCAoJHBhY2thZ2VzIGFzICRwYWNrYWdlKSB7CiR0aGlzLT5hZGRQYWNrYWdlKCRwYWNrYWdlKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZFBhY2thZ2UoJG5hbWUsICR2ZXJzaW9uKQp7CgogJHZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwokdmVyc2lvbiA9ICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJHZlcnNpb24pOwokbmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOwoKZm9yZWFjaCAoJHRoaXMtPmdldFBhY2thZ2VzKCkgYXMgJHBhY2thZ2UpIHsKaWYgKCRuYW1lID09PSAkcGFja2FnZS0+Z2V0TmFtZSgpICYmICR2ZXJzaW9uID09PSAkcGFja2FnZS0+Z2V0VmVyc2lvbigpKSB7CnJldHVybiAkcGFja2FnZTsKfQp9Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBmaW5kUGFja2FnZXMoJG5hbWUsICR2ZXJzaW9uID0gbnVsbCkKewoKICRuYW1lID0gc3RydG9sb3dlcigkbmFtZSk7CgoKIGlmIChudWxsICE9PSAkdmVyc2lvbikgewokdmVyc2lvblBhcnNlciA9IG5ldyBWZXJzaW9uUGFyc2VyKCk7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkdmVyc2lvbik7Cn0KCiRwYWNrYWdlcyA9IGFycmF5KCk7Cgpmb3JlYWNoICgkdGhpcy0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewppZiAoJHBhY2thZ2UtPmdldE5hbWUoKSA9PT0gJG5hbWUgJiYgKG51bGwgPT09ICR2ZXJzaW9uIHx8ICR2ZXJzaW9uID09PSAkcGFja2FnZS0+Z2V0VmVyc2lvbigpKSkgewokcGFja2FnZXNbXSA9ICRwYWNrYWdlOwp9Cn0KCnJldHVybiAkcGFja2FnZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZWFyY2goJHF1ZXJ5LCAkbW9kZSA9IDApCnsKJHJlZ2V4ID0gJ3soPzonLmltcGxvZGUoJ3wnLCBwcmVnX3NwbGl0KCd7XHMrfScsICRxdWVyeSkpLicpfWknOwoKJG1hdGNoZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewokbmFtZSA9ICRwYWNrYWdlLT5nZXROYW1lKCk7CmlmIChpc3NldCgkbWF0Y2hlc1skbmFtZV0pKSB7CmNvbnRpbnVlOwp9CmlmIChwcmVnX21hdGNoKCRyZWdleCwgJG5hbWUpCnx8ICgkbW9kZSA9PT0gc2VsZjo6U0VBUkNIX0ZVTExURVhUICYmICRwYWNrYWdlIGluc3RhbmNlb2YgQ29tcGxldGVQYWNrYWdlSW50ZXJmYWNlICYmIHByZWdfbWF0Y2goJHJlZ2V4LCBpbXBsb2RlKCcgJywgKGFycmF5KSAkcGFja2FnZS0+Z2V0S2V5d29yZHMoKSkgLiAnICcgLiAkcGFja2FnZS0+Z2V0RGVzY3JpcHRpb24oKSkpCikgewokbWF0Y2hlc1skbmFtZV0gPSBhcnJheSgKJ25hbWUnID0+ICRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCksCidkZXNjcmlwdGlvbicgPT4gJHBhY2thZ2UtPmdldERlc2NyaXB0aW9uKCksCik7Cn0KfQoKcmV0dXJuICRtYXRjaGVzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRwYWNrYWdlSWQgPSAkcGFja2FnZS0+Z2V0VW5pcXVlTmFtZSgpOwoKZm9yZWFjaCAoJHRoaXMtPmdldFBhY2thZ2VzKCkgYXMgJHJlcG9QYWNrYWdlKSB7CmlmICgkcGFja2FnZUlkID09PSAkcmVwb1BhY2thZ2UtPmdldFVuaXF1ZU5hbWUoKSkgewpyZXR1cm4gdHJ1ZTsKfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFBhY2thZ2UoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewppZiAobnVsbCA9PT0gJHRoaXMtPnBhY2thZ2VzKSB7CiR0aGlzLT5pbml0aWFsaXplKCk7Cn0KJHBhY2thZ2UtPnNldFJlcG9zaXRvcnkoJHRoaXMpOwokdGhpcy0+cGFja2FnZXNbXSA9ICRwYWNrYWdlOwoKaWYgKCRwYWNrYWdlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSB7CiRhbGlhc2VkUGFja2FnZSA9ICRwYWNrYWdlLT5nZXRBbGlhc09mKCk7CmlmIChudWxsID09PSAkYWxpYXNlZFBhY2thZ2UtPmdldFJlcG9zaXRvcnkoKSkgewokdGhpcy0+YWRkUGFja2FnZSgkYWxpYXNlZFBhY2thZ2UpOwp9Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZUFsaWFzUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkYWxpYXMsICRwcmV0dHlBbGlhcykKewpyZXR1cm4gbmV3IEFsaWFzUGFja2FnZSgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSA/ICRwYWNrYWdlLT5nZXRBbGlhc09mKCkgOiAkcGFja2FnZSwgJGFsaWFzLCAkcHJldHR5QWxpYXMpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmVQYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHBhY2thZ2VJZCA9ICRwYWNrYWdlLT5nZXRVbmlxdWVOYW1lKCk7Cgpmb3JlYWNoICgkdGhpcy0+Z2V0UGFja2FnZXMoKSBhcyAka2V5ID0+ICRyZXBvUGFja2FnZSkgewppZiAoJHBhY2thZ2VJZCA9PT0gJHJlcG9QYWNrYWdlLT5nZXRVbmlxdWVOYW1lKCkpIHsKYXJyYXlfc3BsaWNlKCR0aGlzLT5wYWNrYWdlcywgJGtleSwgMSk7CgpyZXR1cm47Cn0KfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGFja2FnZXMoKQp7CmlmIChudWxsID09PSAkdGhpcy0+cGFja2FnZXMpIHsKJHRoaXMtPmluaXRpYWxpemUoKTsKfQoKcmV0dXJuICR0aGlzLT5wYWNrYWdlczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY291bnQoKQp7CnJldHVybiBjb3VudCgkdGhpcy0+cGFja2FnZXMpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKJHRoaXMtPnBhY2thZ2VzID0gYXJyYXkoKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7Cgp1c2UgQ29tcG9zZXJcSnNvblxKc29uRmlsZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyXEFycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxEdW1wZXJcQXJyYXlEdW1wZXI7CgoKCgoKCgpjbGFzcyBGaWxlc3lzdGVtUmVwb3NpdG9yeSBleHRlbmRzIFdyaXRhYmxlQXJyYXlSZXBvc2l0b3J5CnsKcHJpdmF0ZSAkZmlsZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEpzb25GaWxlICRyZXBvc2l0b3J5RmlsZSkKewokdGhpcy0+ZmlsZSA9ICRyZXBvc2l0b3J5RmlsZTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXRpYWxpemUoKQp7CnBhcmVudDo6aW5pdGlhbGl6ZSgpOwoKaWYgKCEkdGhpcy0+ZmlsZS0+ZXhpc3RzKCkpIHsKcmV0dXJuOwp9Cgp0cnkgewokcGFja2FnZXMgPSAkdGhpcy0+ZmlsZS0+cmVhZCgpOwoKaWYgKCFpc19hcnJheSgkcGFja2FnZXMpKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdDb3VsZCBub3QgcGFyc2UgcGFja2FnZSBsaXN0IGZyb20gdGhlIHJlcG9zaXRvcnknKTsKfQp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CnRocm93IG5ldyBJbnZhbGlkUmVwb3NpdG9yeUV4Y2VwdGlvbignSW52YWxpZCByZXBvc2l0b3J5IGRhdGEgaW4gJy4kdGhpcy0+ZmlsZS0+Z2V0UGF0aCgpLicsIHBhY2thZ2VzIGNvdWxkIG5vdCBiZSBsb2FkZWQ6IFsnLmdldF9jbGFzcygkZSkuJ10gJy4kZS0+Z2V0TWVzc2FnZSgpKTsKfQoKJGxvYWRlciA9IG5ldyBBcnJheUxvYWRlcigpOwpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2VEYXRhKSB7CiRwYWNrYWdlID0gJGxvYWRlci0+bG9hZCgkcGFja2FnZURhdGEpOwokdGhpcy0+YWRkUGFja2FnZSgkcGFja2FnZSk7Cn0KfQoKcHVibGljIGZ1bmN0aW9uIHJlbG9hZCgpCnsKJHRoaXMtPnBhY2thZ2VzID0gbnVsbDsKJHRoaXMtPmluaXRpYWxpemUoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHdyaXRlKCkKewokZGF0YSA9IGFycmF5KCk7CiRkdW1wZXIgPSBuZXcgQXJyYXlEdW1wZXIoKTsKCmZvcmVhY2ggKCR0aGlzLT5nZXRDYW5vbmljYWxQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CiRkYXRhW10gPSAkZHVtcGVyLT5kdW1wKCRwYWNrYWdlKTsKfQoKJHRoaXMtPmZpbGUtPndyaXRlKCRkYXRhKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwoKCgoKCgppbnRlcmZhY2UgV3JpdGFibGVSZXBvc2l0b3J5SW50ZXJmYWNlIGV4dGVuZHMgUmVwb3NpdG9yeUludGVyZmFjZQp7CgoKCnB1YmxpYyBmdW5jdGlvbiB3cml0ZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbW92ZVBhY2thZ2UoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDYW5vbmljYWxQYWNrYWdlcygpOwoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbG9hZCgpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7Cgp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUGVhclxDaGFubmVsUmVhZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxDb21wbGV0ZVBhY2thZ2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFBlYXJcQ2hhbm5lbEluZm87CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxWZXJzaW9uQ29uc3RyYWludDsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXENvbmZpZzsKCgoKCgoKCgoKCmNsYXNzIFBlYXJSZXBvc2l0b3J5IGV4dGVuZHMgQXJyYXlSZXBvc2l0b3J5CnsKcHJpdmF0ZSAkdXJsOwpwcml2YXRlICRpbzsKcHJpdmF0ZSAkcmZzOwpwcml2YXRlICR2ZXJzaW9uUGFyc2VyOwoKCgoKcHJpdmF0ZSAkdmVuZG9yQWxpYXM7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJHJlcG9Db25maWcsIElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIEV2ZW50RGlzcGF0Y2hlciAkZGlzcGF0Y2hlciA9IG51bGwsIFJlbW90ZUZpbGVzeXN0ZW0gJHJmcyA9IG51bGwpCnsKaWYgKCFwcmVnX21hdGNoKCd7Xmh0dHBzPzovL30nLCAkcmVwb0NvbmZpZ1sndXJsJ10pKSB7CiRyZXBvQ29uZmlnWyd1cmwnXSA9ICdodHRwOi8vJy4kcmVwb0NvbmZpZ1sndXJsJ107Cn0KCiR1cmxCaXRzID0gcGFyc2VfdXJsKCRyZXBvQ29uZmlnWyd1cmwnXSk7CmlmIChlbXB0eSgkdXJsQml0c1snc2NoZW1lJ10pIHx8IGVtcHR5KCR1cmxCaXRzWydob3N0J10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIHVybCBnaXZlbiBmb3IgUEVBUiByZXBvc2l0b3J5OiAnLiRyZXBvQ29uZmlnWyd1cmwnXSk7Cn0KCiR0aGlzLT51cmwgPSBydHJpbSgkcmVwb0NvbmZpZ1sndXJsJ10sICcvJyk7CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPnJmcyA9ICRyZnMgPzogbmV3IFJlbW90ZUZpbGVzeXN0ZW0oJHRoaXMtPmlvLCAkY29uZmlnKTsKJHRoaXMtPnZlbmRvckFsaWFzID0gaXNzZXQoJHJlcG9Db25maWdbJ3ZlbmRvci1hbGlhcyddKSA/ICRyZXBvQ29uZmlnWyd2ZW5kb3ItYWxpYXMnXSA6IG51bGw7CiR0aGlzLT52ZXJzaW9uUGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXIoKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXRpYWxpemUoKQp7CnBhcmVudDo6aW5pdGlhbGl6ZSgpOwoKJHRoaXMtPmlvLT53cml0ZSgnSW5pdGlhbGl6aW5nIFBFQVIgcmVwb3NpdG9yeSAnLiR0aGlzLT51cmwpOwoKJHJlYWRlciA9IG5ldyBDaGFubmVsUmVhZGVyKCR0aGlzLT5yZnMpOwp0cnkgewokY2hhbm5lbEluZm8gPSAkcmVhZGVyLT5yZWFkKCR0aGlzLT51cmwpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiR0aGlzLT5pby0+d3JpdGUoJzx3YXJuaW5nPlBFQVIgcmVwb3NpdG9yeSBmcm9tICcuJHRoaXMtPnVybC4nIGNvdWxkIG5vdCBiZSBsb2FkZWQuICcuJGUtPmdldE1lc3NhZ2UoKS4nPC93YXJuaW5nPicpOwoKcmV0dXJuOwp9CiRwYWNrYWdlcyA9ICR0aGlzLT5idWlsZENvbXBvc2VyUGFja2FnZXMoJGNoYW5uZWxJbmZvLCAkdGhpcy0+dmVyc2lvblBhcnNlcik7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewokdGhpcy0+YWRkUGFja2FnZSgkcGFja2FnZSk7Cn0KfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYnVpbGRDb21wb3NlclBhY2thZ2VzKENoYW5uZWxJbmZvICRjaGFubmVsSW5mbywgVmVyc2lvblBhcnNlciAkdmVyc2lvblBhcnNlcikKewokcmVzdWx0ID0gYXJyYXkoKTsKZm9yZWFjaCAoJGNoYW5uZWxJbmZvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlRGVmaW5pdGlvbikgewpmb3JlYWNoICgkcGFja2FnZURlZmluaXRpb24tPmdldFJlbGVhc2VzKCkgYXMgJHZlcnNpb24gPT4gJHJlbGVhc2VJbmZvKSB7CnRyeSB7CiRub3JtYWxpemVkVmVyc2lvbiA9ICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJHZlcnNpb24pOwp9IGNhdGNoIChcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uICRlKSB7CmlmICgkdGhpcy0+aW8tPmlzVmVyYm9zZSgpKSB7CiR0aGlzLT5pby0+d3JpdGUoJ0NvdWxkIG5vdCBsb2FkICcuJHBhY2thZ2VEZWZpbml0aW9uLT5nZXRQYWNrYWdlTmFtZSgpLicgJy4kdmVyc2lvbi4nOiAnLiRlLT5nZXRNZXNzYWdlKCkpOwp9CmNvbnRpbnVlOwp9CgokY29tcG9zZXJQYWNrYWdlTmFtZSA9ICR0aGlzLT5idWlsZENvbXBvc2VyUGFja2FnZU5hbWUoJHBhY2thZ2VEZWZpbml0aW9uLT5nZXRDaGFubmVsTmFtZSgpLCAkcGFja2FnZURlZmluaXRpb24tPmdldFBhY2thZ2VOYW1lKCkpOwoKCiAKICR1cmxCaXRzID0gcGFyc2VfdXJsKCR0aGlzLT51cmwpOwokc2NoZW1lID0gKGlzc2V0KCR1cmxCaXRzWydzY2hlbWUnXSkgJiYgJ2h0dHBzJyA9PT0gJHVybEJpdHNbJ3NjaGVtZSddICYmIGV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSkgPyAnaHR0cHMnIDogJ2h0dHAnOwokZGlzdFVybCA9ICJ7JHNjaGVtZX06Ly97JHBhY2thZ2VEZWZpbml0aW9uLT5nZXRDaGFubmVsTmFtZSgpfS9nZXQveyRwYWNrYWdlRGVmaW5pdGlvbi0+Z2V0UGFja2FnZU5hbWUoKX0teyR2ZXJzaW9ufS50Z3oiOwoKJHJlcXVpcmVzID0gYXJyYXkoKTsKJHN1Z2dlc3RzID0gYXJyYXkoKTsKJGNvbmZsaWN0cyA9IGFycmF5KCk7CiRyZXBsYWNlcyA9IGFycmF5KCk7CgoKIAogaWYgKCRjaGFubmVsSW5mby0+Z2V0TmFtZSgpID09ICRwYWNrYWdlRGVmaW5pdGlvbi0+Z2V0Q2hhbm5lbE5hbWUoKSkgewokY29tcG9zZXJQYWNrYWdlQWxpYXMgPSAkdGhpcy0+YnVpbGRDb21wb3NlclBhY2thZ2VOYW1lKCRjaGFubmVsSW5mby0+Z2V0QWxpYXMoKSwgJHBhY2thZ2VEZWZpbml0aW9uLT5nZXRQYWNrYWdlTmFtZSgpKTsKJGFsaWFzQ29uc3RyYWludCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPT0nLCAkbm9ybWFsaXplZFZlcnNpb24pOwokcmVwbGFjZXNbXSA9IG5ldyBMaW5rKCRjb21wb3NlclBhY2thZ2VOYW1lLCAkY29tcG9zZXJQYWNrYWdlQWxpYXMsICRhbGlhc0NvbnN0cmFpbnQsICdyZXBsYWNlcycsIChzdHJpbmcpICRhbGlhc0NvbnN0cmFpbnQpOwp9CgoKIGlmICghZW1wdHkoJHRoaXMtPnZlbmRvckFsaWFzKQomJiAoJHRoaXMtPnZlbmRvckFsaWFzICE9ICdwZWFyLScuJGNoYW5uZWxJbmZvLT5nZXRBbGlhcygpIHx8ICRjaGFubmVsSW5mby0+Z2V0TmFtZSgpICE9ICRwYWNrYWdlRGVmaW5pdGlvbi0+Z2V0Q2hhbm5lbE5hbWUoKSkKKSB7CiRjb21wb3NlclBhY2thZ2VBbGlhcyA9ICJ7JHRoaXMtPnZlbmRvckFsaWFzfS97JHBhY2thZ2VEZWZpbml0aW9uLT5nZXRQYWNrYWdlTmFtZSgpfSI7CiRhbGlhc0NvbnN0cmFpbnQgPSBuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJz09JywgJG5vcm1hbGl6ZWRWZXJzaW9uKTsKJHJlcGxhY2VzW10gPSBuZXcgTGluaygkY29tcG9zZXJQYWNrYWdlTmFtZSwgJGNvbXBvc2VyUGFja2FnZUFsaWFzLCAkYWxpYXNDb25zdHJhaW50LCAncmVwbGFjZXMnLCAoc3RyaW5nKSAkYWxpYXNDb25zdHJhaW50KTsKfQoKZm9yZWFjaCAoJHJlbGVhc2VJbmZvLT5nZXREZXBlbmRlbmN5SW5mbygpLT5nZXRSZXF1aXJlcygpIGFzICRkZXBlbmRlbmN5Q29uc3RyYWludCkgewokZGVwZW5kZW5jeVBhY2thZ2VOYW1lID0gJHRoaXMtPmJ1aWxkQ29tcG9zZXJQYWNrYWdlTmFtZSgkZGVwZW5kZW5jeUNvbnN0cmFpbnQtPmdldENoYW5uZWxOYW1lKCksICRkZXBlbmRlbmN5Q29uc3RyYWludC0+Z2V0UGFja2FnZU5hbWUoKSk7CiRjb25zdHJhaW50ID0gJHZlcnNpb25QYXJzZXItPnBhcnNlQ29uc3RyYWludHMoJGRlcGVuZGVuY3lDb25zdHJhaW50LT5nZXRDb25zdHJhaW50KCkpOwokbGluayA9IG5ldyBMaW5rKCRjb21wb3NlclBhY2thZ2VOYW1lLCAkZGVwZW5kZW5jeVBhY2thZ2VOYW1lLCAkY29uc3RyYWludCwgJGRlcGVuZGVuY3lDb25zdHJhaW50LT5nZXRUeXBlKCksICRkZXBlbmRlbmN5Q29uc3RyYWludC0+Z2V0Q29uc3RyYWludCgpKTsKc3dpdGNoICgkZGVwZW5kZW5jeUNvbnN0cmFpbnQtPmdldFR5cGUoKSkgewpjYXNlICdyZXF1aXJlZCc6CiRyZXF1aXJlc1tdID0gJGxpbms7CmJyZWFrOwpjYXNlICdjb25mbGljdHMnOgokY29uZmxpY3RzW10gPSAkbGluazsKYnJlYWs7CmNhc2UgJ3JlcGxhY2VzJzoKJHJlcGxhY2VzW10gPSAkbGluazsKYnJlYWs7Cn0KfQoKZm9yZWFjaCAoJHJlbGVhc2VJbmZvLT5nZXREZXBlbmRlbmN5SW5mbygpLT5nZXRPcHRpb25hbHMoKSBhcyAkZ3JvdXAgPT4gJGRlcGVuZGVuY3lDb25zdHJhaW50cykgewpmb3JlYWNoICgkZGVwZW5kZW5jeUNvbnN0cmFpbnRzIGFzICRkZXBlbmRlbmN5Q29uc3RyYWludCkgewokZGVwZW5kZW5jeVBhY2thZ2VOYW1lID0gJHRoaXMtPmJ1aWxkQ29tcG9zZXJQYWNrYWdlTmFtZSgkZGVwZW5kZW5jeUNvbnN0cmFpbnQtPmdldENoYW5uZWxOYW1lKCksICRkZXBlbmRlbmN5Q29uc3RyYWludC0+Z2V0UGFja2FnZU5hbWUoKSk7CiRzdWdnZXN0c1skZ3JvdXAuJy0nLiRkZXBlbmRlbmN5UGFja2FnZU5hbWVdID0gJGRlcGVuZGVuY3lDb25zdHJhaW50LT5nZXRDb25zdHJhaW50KCk7Cn0KfQoKJHBhY2thZ2UgPSBuZXcgQ29tcGxldGVQYWNrYWdlKCRjb21wb3NlclBhY2thZ2VOYW1lLCAkbm9ybWFsaXplZFZlcnNpb24sICR2ZXJzaW9uKTsKJHBhY2thZ2UtPnNldFR5cGUoJ3BlYXItbGlicmFyeScpOwokcGFja2FnZS0+c2V0RGVzY3JpcHRpb24oJHBhY2thZ2VEZWZpbml0aW9uLT5nZXREZXNjcmlwdGlvbigpKTsKJHBhY2thZ2UtPnNldERpc3RUeXBlKCdmaWxlJyk7CiRwYWNrYWdlLT5zZXREaXN0VXJsKCRkaXN0VXJsKTsKJHBhY2thZ2UtPnNldEF1dG9sb2FkKGFycmF5KCdjbGFzc21hcCcgPT4gYXJyYXkoJycpKSk7CiRwYWNrYWdlLT5zZXRJbmNsdWRlUGF0aHMoYXJyYXkoJy8nKSk7CiRwYWNrYWdlLT5zZXRSZXF1aXJlcygkcmVxdWlyZXMpOwokcGFja2FnZS0+c2V0Q29uZmxpY3RzKCRjb25mbGljdHMpOwokcGFja2FnZS0+c2V0U3VnZ2VzdHMoJHN1Z2dlc3RzKTsKJHBhY2thZ2UtPnNldFJlcGxhY2VzKCRyZXBsYWNlcyk7CiRyZXN1bHRbXSA9ICRwYWNrYWdlOwp9Cn0KCnJldHVybiAkcmVzdWx0Owp9Cgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkQ29tcG9zZXJQYWNrYWdlTmFtZSgkY2hhbm5lbE5hbWUsICRwYWNrYWdlTmFtZSkKewppZiAoJ3BocCcgPT09ICRjaGFubmVsTmFtZSkgewpyZXR1cm4gInBocCI7Cn0KaWYgKCdleHQnID09PSAkY2hhbm5lbE5hbWUpIHsKcmV0dXJuICJleHQteyRwYWNrYWdlTmFtZX0iOwp9CgpyZXR1cm4gInBlYXIteyRjaGFubmVsTmFtZX0veyRwYWNrYWdlTmFtZX0iOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXENvbmZpZzsKdXNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXI7CgoKCgoKCgoKY2xhc3MgUmVwb3NpdG9yeU1hbmFnZXIKewpwcml2YXRlICRsb2NhbFJlcG9zaXRvcnk7CnByaXZhdGUgJHJlcG9zaXRvcmllcyA9IGFycmF5KCk7CnByaXZhdGUgJHJlcG9zaXRvcnlDbGFzc2VzID0gYXJyYXkoKTsKcHJpdmF0ZSAkaW87CnByaXZhdGUgJGNvbmZpZzsKcHJpdmF0ZSAkZXZlbnREaXNwYXRjaGVyOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIEV2ZW50RGlzcGF0Y2hlciAkZXZlbnREaXNwYXRjaGVyID0gbnVsbCkKewokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5jb25maWcgPSAkY29uZmlnOwokdGhpcy0+ZXZlbnREaXNwYXRjaGVyID0gJGV2ZW50RGlzcGF0Y2hlcjsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZFBhY2thZ2UoJG5hbWUsICR2ZXJzaW9uKQp7CmZvcmVhY2ggKCR0aGlzLT5yZXBvc2l0b3JpZXMgYXMgJHJlcG9zaXRvcnkpIHsKaWYgKCRwYWNrYWdlID0gJHJlcG9zaXRvcnktPmZpbmRQYWNrYWdlKCRuYW1lLCAkdmVyc2lvbikpIHsKcmV0dXJuICRwYWNrYWdlOwp9Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZFBhY2thZ2VzKCRuYW1lLCAkdmVyc2lvbikKewokcGFja2FnZXMgPSBhcnJheSgpOwoKZm9yZWFjaCAoJHRoaXMtPnJlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeSkgewokcGFja2FnZXMgPSBhcnJheV9tZXJnZSgkcGFja2FnZXMsICRyZXBvc2l0b3J5LT5maW5kUGFja2FnZXMoJG5hbWUsICR2ZXJzaW9uKSk7Cn0KCnJldHVybiAkcGFja2FnZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFJlcG9zaXRvcnkoUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwb3NpdG9yeSkKewokdGhpcy0+cmVwb3NpdG9yaWVzW10gPSAkcmVwb3NpdG9yeTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY3JlYXRlUmVwb3NpdG9yeSgkdHlwZSwgJGNvbmZpZykKewppZiAoIWlzc2V0KCR0aGlzLT5yZXBvc2l0b3J5Q2xhc3Nlc1skdHlwZV0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdSZXBvc2l0b3J5IHR5cGUgaXMgbm90IHJlZ2lzdGVyZWQ6ICcuJHR5cGUpOwp9CgokY2xhc3MgPSAkdGhpcy0+cmVwb3NpdG9yeUNsYXNzZXNbJHR5cGVdOwoKcmV0dXJuIG5ldyAkY2xhc3MoJGNvbmZpZywgJHRoaXMtPmlvLCAkdGhpcy0+Y29uZmlnLCAkdGhpcy0+ZXZlbnREaXNwYXRjaGVyKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJlcG9zaXRvcnlDbGFzcygkdHlwZSwgJGNsYXNzKQp7CiR0aGlzLT5yZXBvc2l0b3J5Q2xhc3Nlc1skdHlwZV0gPSAkY2xhc3M7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlcG9zaXRvcmllcygpCnsKcmV0dXJuICR0aGlzLT5yZXBvc2l0b3JpZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldExvY2FsUmVwb3NpdG9yeShXcml0YWJsZVJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zaXRvcnkpCnsKJHRoaXMtPmxvY2FsUmVwb3NpdG9yeSA9ICRyZXBvc2l0b3J5Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb2NhbFJlcG9zaXRvcnkoKQp7CnJldHVybiAkdGhpcy0+bG9jYWxSZXBvc2l0b3J5Owp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TG9jYWxSZXBvc2l0b3JpZXMoKQp7CnRyaWdnZXJfZXJyb3IoJ1RoaXMgbWV0aG9kIGlzIGRlcHJlY2F0ZWQsIHVzZSBnZXRMb2NhbFJlcG9zaXRvcnkgaW5zdGVhZCBzaW5jZSB0aGUgZ2V0TG9jYWxEZXZSZXBvc2l0b3J5IGlzIG5vdyBnb25lJywgRV9VU0VSX0RFUFJFQ0FURUQpOwoKcmV0dXJuIGFycmF5KCR0aGlzLT5sb2NhbFJlcG9zaXRvcnkpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKCgoKCgoKY2xhc3MgV3JpdGFibGVBcnJheVJlcG9zaXRvcnkgZXh0ZW5kcyBBcnJheVJlcG9zaXRvcnkgaW1wbGVtZW50cyBXcml0YWJsZVJlcG9zaXRvcnlJbnRlcmZhY2UKewoKCgpwdWJsaWMgZnVuY3Rpb24gd3JpdGUoKQp7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZWxvYWQoKQp7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDYW5vbmljYWxQYWNrYWdlcygpCnsKJHBhY2thZ2VzID0gJHRoaXMtPmdldFBhY2thZ2VzKCk7CgoKICRwYWNrYWdlc0J5TmFtZSA9IGFycmF5KCk7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewppZiAoIWlzc2V0KCRwYWNrYWdlc0J5TmFtZVskcGFja2FnZS0+Z2V0TmFtZSgpXSkgfHwgJHBhY2thZ2VzQnlOYW1lWyRwYWNrYWdlLT5nZXROYW1lKCldIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSB7CiRwYWNrYWdlc0J5TmFtZVskcGFja2FnZS0+Z2V0TmFtZSgpXSA9ICRwYWNrYWdlOwp9Cn0KCiRjYW5vbmljYWxQYWNrYWdlcyA9IGFycmF5KCk7CgoKIGZvcmVhY2ggKCRwYWNrYWdlc0J5TmFtZSBhcyAkcGFja2FnZSkgewp3aGlsZSAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJHBhY2thZ2UgPSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpOwp9CgokY2Fub25pY2FsUGFja2FnZXNbXSA9ICRwYWNrYWdlOwp9CgpyZXR1cm4gJGNhbm9uaWNhbFBhY2thZ2VzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3M7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxUcmFuc3BvcnRFeGNlcHRpb247CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcQ2FjaGU7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFV0aWxcR2l0SHViOwoKCgoKY2xhc3MgR2l0SHViRHJpdmVyIGV4dGVuZHMgVmNzRHJpdmVyCnsKcHJvdGVjdGVkICRjYWNoZTsKcHJvdGVjdGVkICRvd25lcjsKcHJvdGVjdGVkICRyZXBvc2l0b3J5Owpwcm90ZWN0ZWQgJHRhZ3M7CnByb3RlY3RlZCAkYnJhbmNoZXM7CnByb3RlY3RlZCAkcm9vdElkZW50aWZpZXI7CnByb3RlY3RlZCAkaGFzSXNzdWVzOwpwcm90ZWN0ZWQgJGluZm9DYWNoZSA9IGFycmF5KCk7CnByb3RlY3RlZCAkaXNQcml2YXRlID0gZmFsc2U7CgoKCgoKCnByb3RlY3RlZCAkZ2l0RHJpdmVyOwoKCgoKcHVibGljIGZ1bmN0aW9uIGluaXRpYWxpemUoKQp7CnByZWdfbWF0Y2goJyNeKD86KD86aHR0cHM/fGdpdCk6Ly8oW14vXSspL3xnaXRAKFteOl0rKTopKFteL10rKS8oLis/KSg/OlwuZ2l0KT8kIycsICR0aGlzLT51cmwsICRtYXRjaCk7CiR0aGlzLT5vd25lciA9ICRtYXRjaFszXTsKJHRoaXMtPnJlcG9zaXRvcnkgPSAkbWF0Y2hbNF07CiR0aGlzLT5vcmlnaW5VcmwgPSAhZW1wdHkoJG1hdGNoWzFdKSA/ICRtYXRjaFsxXSA6ICRtYXRjaFsyXTsKJHRoaXMtPmNhY2hlID0gbmV3IENhY2hlKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZy0+Z2V0KCdjYWNoZS1yZXBvLWRpcicpLicvJy4kdGhpcy0+b3JpZ2luVXJsLicvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5KTsKCmlmIChpc3NldCgkdGhpcy0+cmVwb0NvbmZpZ1snbm8tYXBpJ10pICYmICR0aGlzLT5yZXBvQ29uZmlnWyduby1hcGknXSkgewokdGhpcy0+c2V0dXBHaXREcml2ZXIoJHRoaXMtPnVybCk7CnJldHVybjsKfQoKJHRoaXMtPmZldGNoUm9vdElkZW50aWZpZXIoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJvb3RJZGVudGlmaWVyKCkKewppZiAoJHRoaXMtPmdpdERyaXZlcikgewpyZXR1cm4gJHRoaXMtPmdpdERyaXZlci0+Z2V0Um9vdElkZW50aWZpZXIoKTsKfQoKcmV0dXJuICR0aGlzLT5yb290SWRlbnRpZmllcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFVybCgpCnsKaWYgKCR0aGlzLT5naXREcml2ZXIpIHsKcmV0dXJuICR0aGlzLT5naXREcml2ZXItPmdldFVybCgpOwp9CgpyZXR1cm4gJ2h0dHBzOi8vJyAuICR0aGlzLT5vcmlnaW5VcmwgLiAnLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nLmdpdCc7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRBcGlVcmwoKQp7CmlmICgnZ2l0aHViLmNvbScgPT09ICR0aGlzLT5vcmlnaW5VcmwpIHsKJGFwaVVybCA9ICdhcGkuZ2l0aHViLmNvbSc7Cn0gZWxzZSB7CiRhcGlVcmwgPSAkdGhpcy0+b3JpZ2luVXJsIC4gJy9hcGkvdjMnOwp9CgpyZXR1cm4gJ2h0dHBzOi8vJyAuICRhcGlVcmw7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2UoJGlkZW50aWZpZXIpCnsKaWYgKCR0aGlzLT5naXREcml2ZXIpIHsKcmV0dXJuICR0aGlzLT5naXREcml2ZXItPmdldFNvdXJjZSgkaWRlbnRpZmllcik7Cn0KaWYgKCR0aGlzLT5pc1ByaXZhdGUpIHsKCiAKICR1cmwgPSAkdGhpcy0+Z2VuZXJhdGVTc2hVcmwoKTsKfSBlbHNlIHsKJHVybCA9ICR0aGlzLT5nZXRVcmwoKTsKfQoKcmV0dXJuIGFycmF5KCd0eXBlJyA9PiAnZ2l0JywgJ3VybCcgPT4gJHVybCwgJ3JlZmVyZW5jZScgPT4gJGlkZW50aWZpZXIpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdCgkaWRlbnRpZmllcikKewokdXJsID0gJHRoaXMtPmdldEFwaVVybCgpIC4gJy9yZXBvcy8nLiR0aGlzLT5vd25lci4nLycuJHRoaXMtPnJlcG9zaXRvcnkuJy96aXBiYWxsLycuJGlkZW50aWZpZXI7CgpyZXR1cm4gYXJyYXkoJ3R5cGUnID0+ICd6aXAnLCAndXJsJyA9PiAkdXJsLCAncmVmZXJlbmNlJyA9PiAkaWRlbnRpZmllciwgJ3NoYXN1bScgPT4gJycpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcikKewppZiAoJHRoaXMtPmdpdERyaXZlcikgewpyZXR1cm4gJHRoaXMtPmdpdERyaXZlci0+Z2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcik7Cn0KCmlmIChwcmVnX21hdGNoKCd7W2EtZjAtOV17NDB9fWknLCAkaWRlbnRpZmllcikgJiYgJHJlcyA9ICR0aGlzLT5jYWNoZS0+cmVhZCgkaWRlbnRpZmllcikpIHsKJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl0gPSBKc29uRmlsZTo6cGFyc2VKc29uKCRyZXMpOwp9CgppZiAoIWlzc2V0KCR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdKSkgewokbm90Rm91bmRSZXRyaWVzID0gMjsKd2hpbGUgKCRub3RGb3VuZFJldHJpZXMpIHsKdHJ5IHsKJHJlc291cmNlID0gJHRoaXMtPmdldEFwaVVybCgpIC4gJy9yZXBvcy8nLiR0aGlzLT5vd25lci4nLycuJHRoaXMtPnJlcG9zaXRvcnkuJy9jb250ZW50cy9jb21wb3Nlci5qc29uP3JlZj0nLnVybGVuY29kZSgkaWRlbnRpZmllcik7CiRjb21wb3NlciA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHRoaXMtPmdldENvbnRlbnRzKCRyZXNvdXJjZSkpOwppZiAoZW1wdHkoJGNvbXBvc2VyWydjb250ZW50J10pIHx8ICRjb21wb3NlclsnZW5jb2RpbmcnXSAhPT0gJ2Jhc2U2NCcgfHwgISgkY29tcG9zZXIgPSBiYXNlNjRfZGVjb2RlKCRjb21wb3NlclsnY29udGVudCddKSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDb3VsZCBub3QgcmV0cmlldmUgY29tcG9zZXIuanNvbiBmcm9tICcuJHJlc291cmNlKTsKfQpicmVhazsKfSBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uICRlKSB7CmlmICg0MDQgIT09ICRlLT5nZXRDb2RlKCkpIHsKdGhyb3cgJGU7Cn0KCgogCiAkbm90Rm91bmRSZXRyaWVzLS07CiRjb21wb3NlciA9IGZhbHNlOwp9Cn0KCmlmICgkY29tcG9zZXIpIHsKJGNvbXBvc2VyID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkY29tcG9zZXIsICRyZXNvdXJjZSk7CgppZiAoIWlzc2V0KCRjb21wb3NlclsndGltZSddKSkgewokcmVzb3VyY2UgPSAkdGhpcy0+Z2V0QXBpVXJsKCkgLiAnL3JlcG9zLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nL2NvbW1pdHMvJy51cmxlbmNvZGUoJGlkZW50aWZpZXIpOwokY29tbWl0ID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Z2V0Q29udGVudHMoJHJlc291cmNlKSwgJHJlc291cmNlKTsKJGNvbXBvc2VyWyd0aW1lJ10gPSAkY29tbWl0Wydjb21taXQnXVsnY29tbWl0dGVyJ11bJ2RhdGUnXTsKfQppZiAoIWlzc2V0KCRjb21wb3Nlclsnc3VwcG9ydCddWydzb3VyY2UnXSkpIHsKJGxhYmVsID0gYXJyYXlfc2VhcmNoKCRpZGVudGlmaWVyLCAkdGhpcy0+Z2V0VGFncygpKSA/OiBhcnJheV9zZWFyY2goJGlkZW50aWZpZXIsICR0aGlzLT5nZXRCcmFuY2hlcygpKSA/OiAkaWRlbnRpZmllcjsKJGNvbXBvc2VyWydzdXBwb3J0J11bJ3NvdXJjZSddID0gc3ByaW50ZignaHR0cHM6Ly8lcy8lcy8lcy90cmVlLyVzJywgJHRoaXMtPm9yaWdpblVybCwgJHRoaXMtPm93bmVyLCAkdGhpcy0+cmVwb3NpdG9yeSwgJGxhYmVsKTsKfQppZiAoIWlzc2V0KCRjb21wb3Nlclsnc3VwcG9ydCddWydpc3N1ZXMnXSkgJiYgJHRoaXMtPmhhc0lzc3VlcykgewokY29tcG9zZXJbJ3N1cHBvcnQnXVsnaXNzdWVzJ10gPSBzcHJpbnRmKCdodHRwczovLyVzLyVzLyVzL2lzc3VlcycsICR0aGlzLT5vcmlnaW5VcmwsICR0aGlzLT5vd25lciwgJHRoaXMtPnJlcG9zaXRvcnkpOwp9Cn0KCmlmIChwcmVnX21hdGNoKCd7W2EtZjAtOV17NDB9fWknLCAkaWRlbnRpZmllcikpIHsKJHRoaXMtPmNhY2hlLT53cml0ZSgkaWRlbnRpZmllciwganNvbl9lbmNvZGUoJGNvbXBvc2VyKSk7Cn0KCiR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdID0gJGNvbXBvc2VyOwp9CgpyZXR1cm4gJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUYWdzKCkKewppZiAoJHRoaXMtPmdpdERyaXZlcikgewpyZXR1cm4gJHRoaXMtPmdpdERyaXZlci0+Z2V0VGFncygpOwp9CmlmIChudWxsID09PSAkdGhpcy0+dGFncykgewokdGhpcy0+dGFncyA9IGFycmF5KCk7CiRyZXNvdXJjZSA9ICR0aGlzLT5nZXRBcGlVcmwoKSAuICcvcmVwb3MvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5LicvdGFncz9wZXJfcGFnZT0xMDAnOwoKZG8gewokdGFnc0RhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpLCAkcmVzb3VyY2UpOwpmb3JlYWNoICgkdGFnc0RhdGEgYXMgJHRhZykgewokdGhpcy0+dGFnc1skdGFnWyduYW1lJ11dID0gJHRhZ1snY29tbWl0J11bJ3NoYSddOwp9CgokcmVzb3VyY2UgPSAkdGhpcy0+Z2V0TmV4dFBhZ2UoKTsKfSB3aGlsZSAoJHJlc291cmNlKTsKfQoKcmV0dXJuICR0aGlzLT50YWdzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QnJhbmNoZXMoKQp7CmlmICgkdGhpcy0+Z2l0RHJpdmVyKSB7CnJldHVybiAkdGhpcy0+Z2l0RHJpdmVyLT5nZXRCcmFuY2hlcygpOwp9CmlmIChudWxsID09PSAkdGhpcy0+YnJhbmNoZXMpIHsKJHRoaXMtPmJyYW5jaGVzID0gYXJyYXkoKTsKJHJlc291cmNlID0gJHRoaXMtPmdldEFwaVVybCgpIC4gJy9yZXBvcy8nLiR0aGlzLT5vd25lci4nLycuJHRoaXMtPnJlcG9zaXRvcnkuJy9naXQvcmVmcy9oZWFkcz9wZXJfcGFnZT0xMDAnOwoKZG8gewokYnJhbmNoRGF0YSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHRoaXMtPmdldENvbnRlbnRzKCRyZXNvdXJjZSksICRyZXNvdXJjZSk7CmZvcmVhY2ggKCRicmFuY2hEYXRhIGFzICRicmFuY2gpIHsKJG5hbWUgPSBzdWJzdHIoJGJyYW5jaFsncmVmJ10sIDExKTsKJHRoaXMtPmJyYW5jaGVzWyRuYW1lXSA9ICRicmFuY2hbJ29iamVjdCddWydzaGEnXTsKfQoKJHJlc291cmNlID0gJHRoaXMtPmdldE5leHRQYWdlKCk7Cn0gd2hpbGUgKCRyZXNvdXJjZSk7Cn0KCnJldHVybiAkdGhpcy0+YnJhbmNoZXM7Cn0KCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHMoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgJHVybCwgJGRlZXAgPSBmYWxzZSkKewppZiAoIXByZWdfbWF0Y2goJyNeKCg/Omh0dHBzP3xnaXQpOi8vKFteL10rKS98Z2l0QChbXjpdKyk6KShbXi9dKykvKC4rPykoPzpcLmdpdCk/JCMnLCAkdXJsLCAkbWF0Y2hlcykpIHsKcmV0dXJuIGZhbHNlOwp9Cgokb3JpZ2luVXJsID0gIWVtcHR5KCRtYXRjaGVzWzJdKSA/ICRtYXRjaGVzWzJdIDogJG1hdGNoZXNbM107CmlmICghaW5fYXJyYXkoJG9yaWdpblVybCwgJGNvbmZpZy0+Z2V0KCdnaXRodWItZG9tYWlucycpKSkgewpyZXR1cm4gZmFsc2U7Cn0KCmlmICghZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpKSB7CmlmICgkaW8tPmlzVmVyYm9zZSgpKSB7CiRpby0+d3JpdGUoJ1NraXBwaW5nIEdpdEh1YiBkcml2ZXIgZm9yICcuJHVybC4nIGJlY2F1c2UgdGhlIE9wZW5TU0wgUEhQIGV4dGVuc2lvbiBpcyBtaXNzaW5nLicpOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCnJldHVybiB0cnVlOwp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZVNzaFVybCgpCnsKcmV0dXJuICdnaXRAJyAuICR0aGlzLT5vcmlnaW5VcmwgLiAnOicuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nLmdpdCc7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRDb250ZW50cygkdXJsLCAkZmV0Y2hpbmdSZXBvRGF0YSA9IGZhbHNlKQp7CnRyeSB7CnJldHVybiBwYXJlbnQ6OmdldENvbnRlbnRzKCR1cmwpOwp9IGNhdGNoIChUcmFuc3BvcnRFeGNlcHRpb24gJGUpIHsKJGdpdEh1YlV0aWwgPSBuZXcgR2l0SHViKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZywgJHRoaXMtPnByb2Nlc3MsICR0aGlzLT5yZW1vdGVGaWxlc3lzdGVtKTsKCnN3aXRjaCAoJGUtPmdldENvZGUoKSkgewpjYXNlIDQwMToKY2FzZSA0MDQ6CgogaWYgKCEkZmV0Y2hpbmdSZXBvRGF0YSkgewp0aHJvdyAkZTsKfQoKaWYgKCRnaXRIdWJVdGlsLT5hdXRob3JpemVPQXV0aCgkdGhpcy0+b3JpZ2luVXJsKSkgewpyZXR1cm4gcGFyZW50OjpnZXRDb250ZW50cygkdXJsKTsKfQoKaWYgKCEkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSkgewpyZXR1cm4gJHRoaXMtPmF0dGVtcHRDbG9uZUZhbGxiYWNrKCk7Cn0KCiRnaXRIdWJVdGlsLT5hdXRob3JpemVPQXV0aEludGVyYWN0aXZlbHkoJHRoaXMtPm9yaWdpblVybCwgJ1lvdXIgR2l0SHViIGNyZWRlbnRpYWxzIGFyZSByZXF1aXJlZCB0byBmZXRjaCBwcml2YXRlIHJlcG9zaXRvcnkgbWV0YWRhdGEgKDxpbmZvPicuJHRoaXMtPnVybC4nPC9pbmZvPiknKTsKCnJldHVybiBwYXJlbnQ6OmdldENvbnRlbnRzKCR1cmwpOwoKY2FzZSA0MDM6CmlmICghJHRoaXMtPmlvLT5oYXNBdXRoZW50aWNhdGlvbigkdGhpcy0+b3JpZ2luVXJsKSAmJiAkZ2l0SHViVXRpbC0+YXV0aG9yaXplT0F1dGgoJHRoaXMtPm9yaWdpblVybCkpIHsKcmV0dXJuIHBhcmVudDo6Z2V0Q29udGVudHMoJHVybCk7Cn0KCmlmICghJHRoaXMtPmlvLT5pc0ludGVyYWN0aXZlKCkgJiYgJGZldGNoaW5nUmVwb0RhdGEpIHsKcmV0dXJuICR0aGlzLT5hdHRlbXB0Q2xvbmVGYWxsYmFjaygpOwp9CgokcmF0ZUxpbWl0ZWQgPSBmYWxzZTsKZm9yZWFjaCAoJGUtPmdldEhlYWRlcnMoKSBhcyAkaGVhZGVyKSB7CmlmIChwcmVnX21hdGNoKCd7XlgtUmF0ZUxpbWl0LVJlbWFpbmluZzogKjAkfWknLCB0cmltKCRoZWFkZXIpKSkgewokcmF0ZUxpbWl0ZWQgPSB0cnVlOwp9Cn0KCmlmICghJHRoaXMtPmlvLT5oYXNBdXRoZW50aWNhdGlvbigkdGhpcy0+b3JpZ2luVXJsKSkgewppZiAoISR0aGlzLT5pby0+aXNJbnRlcmFjdGl2ZSgpKSB7CiR0aGlzLT5pby0+d3JpdGUoJzxlcnJvcj5HaXRIdWIgQVBJIGxpbWl0IGV4aGF1c3RlZC4gRmFpbGVkIHRvIGdldCBtZXRhZGF0YSBmb3IgdGhlICcuJHRoaXMtPnVybC4nIHJlcG9zaXRvcnksIHRyeSBydW5uaW5nIGluIGludGVyYWN0aXZlIG1vZGUgc28gdGhhdCB5b3UgY2FuIGVudGVyIHlvdXIgR2l0SHViIGNyZWRlbnRpYWxzIHRvIGluY3JlYXNlIHRoZSBBUEkgbGltaXQ8L2Vycm9yPicpOwp0aHJvdyAkZTsKfQoKJGdpdEh1YlV0aWwtPmF1dGhvcml6ZU9BdXRoSW50ZXJhY3RpdmVseSgkdGhpcy0+b3JpZ2luVXJsLCAnQVBJIGxpbWl0IGV4aGF1c3RlZC4gRW50ZXIgeW91ciBHaXRIdWIgY3JlZGVudGlhbHMgdG8gZ2V0IGEgbGFyZ2VyIEFQSSBsaW1pdCAoPGluZm8+Jy4kdGhpcy0+dXJsLic8L2luZm8+KScpOwoKcmV0dXJuIHBhcmVudDo6Z2V0Q29udGVudHMoJHVybCk7Cn0KCmlmICgkcmF0ZUxpbWl0ZWQpIHsKJHJhdGVMaW1pdCA9ICR0aGlzLT5nZXRSYXRlTGltaXQoJGUtPmdldEhlYWRlcnMoKSk7CiR0aGlzLT5pby0+d3JpdGUoc3ByaW50ZigKJzxlcnJvcj5HaXRIdWIgQVBJIGxpbWl0ICglZCBjYWxscy9ocikgaXMgZXhoYXVzdGVkLiBZb3UgYXJlIGFscmVhZHkgYXV0aG9yaXplZCBzbyB5b3UgaGF2ZSB0byB3YWl0IHVudGlsICVzIGJlZm9yZSBkb2luZyBtb3JlIHJlcXVlc3RzPC9lcnJvcj4nLAokcmF0ZUxpbWl0WydsaW1pdCddLAokcmF0ZUxpbWl0WydyZXNldCddCikpOwp9Cgp0aHJvdyAkZTsKCmRlZmF1bHQ6CnRocm93ICRlOwp9Cn0KfQoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRSYXRlTGltaXQoYXJyYXkgJGhlYWRlcnMpCnsKJHJhdGVMaW1pdCA9IGFycmF5KAonbGltaXQnID0+ICc/JywKJ3Jlc2V0JyA9PiAnPycsCik7Cgpmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKSB7CiRoZWFkZXIgPSB0cmltKCRoZWFkZXIpOwppZiAoZmFsc2UgPT09IHN0cnBvcygkaGVhZGVyLCAnWC1SYXRlTGltaXQtJykpIHsKY29udGludWU7Cn0KbGlzdCgkdHlwZSwgJHZhbHVlKSA9IGV4cGxvZGUoJzonLCAkaGVhZGVyLCAyKTsKc3dpdGNoICgkdHlwZSkgewpjYXNlICdYLVJhdGVMaW1pdC1MaW1pdCc6CiRyYXRlTGltaXRbJ2xpbWl0J10gPSAoaW50KSB0cmltKCR2YWx1ZSk7CmJyZWFrOwpjYXNlICdYLVJhdGVMaW1pdC1SZXNldCc6CiRyYXRlTGltaXRbJ3Jlc2V0J10gPSBkYXRlKCdZLW0tZCBIOmk6cycsIChpbnQpIHRyaW0oJHZhbHVlKSk7CmJyZWFrOwp9Cn0KCnJldHVybiAkcmF0ZUxpbWl0Owp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBmZXRjaFJvb3RJZGVudGlmaWVyKCkKewokcmVwb0RhdGFVcmwgPSAkdGhpcy0+Z2V0QXBpVXJsKCkgLiAnL3JlcG9zLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeTsKCiRyZXBvRGF0YSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHRoaXMtPmdldENvbnRlbnRzKCRyZXBvRGF0YVVybCwgdHJ1ZSksICRyZXBvRGF0YVVybCk7CmlmIChudWxsID09PSAkcmVwb0RhdGEgJiYgbnVsbCAhPT0gJHRoaXMtPmdpdERyaXZlcikgewpyZXR1cm47Cn0KCiR0aGlzLT5pc1ByaXZhdGUgPSAhZW1wdHkoJHJlcG9EYXRhWydwcml2YXRlJ10pOwppZiAoaXNzZXQoJHJlcG9EYXRhWydkZWZhdWx0X2JyYW5jaCddKSkgewokdGhpcy0+cm9vdElkZW50aWZpZXIgPSAkcmVwb0RhdGFbJ2RlZmF1bHRfYnJhbmNoJ107Cn0gZWxzZWlmIChpc3NldCgkcmVwb0RhdGFbJ21hc3Rlcl9icmFuY2gnXSkpIHsKJHRoaXMtPnJvb3RJZGVudGlmaWVyID0gJHJlcG9EYXRhWydtYXN0ZXJfYnJhbmNoJ107Cn0gZWxzZSB7CiR0aGlzLT5yb290SWRlbnRpZmllciA9ICdtYXN0ZXInOwp9CiR0aGlzLT5oYXNJc3N1ZXMgPSAhZW1wdHkoJHJlcG9EYXRhWydoYXNfaXNzdWVzJ10pOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gYXR0ZW1wdENsb25lRmFsbGJhY2soKQp7CiR0aGlzLT5pc1ByaXZhdGUgPSB0cnVlOwoKdHJ5IHsKCiAKIAogCiAkdGhpcy0+c2V0dXBHaXREcml2ZXIoJHRoaXMtPmdlbmVyYXRlU3NoVXJsKCkpOwoKcmV0dXJuOwp9IGNhdGNoIChcUnVudGltZUV4Y2VwdGlvbiAkZSkgewokdGhpcy0+Z2l0RHJpdmVyID0gbnVsbDsKCiR0aGlzLT5pby0+d3JpdGUoJzxlcnJvcj5GYWlsZWQgdG8gY2xvbmUgdGhlICcuJHRoaXMtPmdlbmVyYXRlU3NoVXJsKCkuJyByZXBvc2l0b3J5LCB0cnkgcnVubmluZyBpbiBpbnRlcmFjdGl2ZSBtb2RlIHNvIHRoYXQgeW91IGNhbiBlbnRlciB5b3VyIEdpdEh1YiBjcmVkZW50aWFsczwvZXJyb3I+Jyk7CnRocm93ICRlOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBzZXR1cEdpdERyaXZlcigkdXJsKQp7CiR0aGlzLT5naXREcml2ZXIgPSBuZXcgR2l0RHJpdmVyKAphcnJheSgndXJsJyA9PiAkdXJsKSwKJHRoaXMtPmlvLAokdGhpcy0+Y29uZmlnLAokdGhpcy0+cHJvY2VzcywKJHRoaXMtPnJlbW90ZUZpbGVzeXN0ZW0KKTsKJHRoaXMtPmdpdERyaXZlci0+aW5pdGlhbGl6ZSgpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TmV4dFBhZ2UoKQp7CiRoZWFkZXJzID0gJHRoaXMtPnJlbW90ZUZpbGVzeXN0ZW0tPmdldExhc3RIZWFkZXJzKCk7CmZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsKaWYgKHN1YnN0cigkaGVhZGVyLCAwLCA1KSA9PT0gJ0xpbms6JykgewokbGlua3MgPSBleHBsb2RlKCcsJywgc3Vic3RyKCRoZWFkZXIsIDUpKTsKZm9yZWFjaCAoJGxpbmtzIGFzICRsaW5rKSB7CmlmIChwcmVnX21hdGNoKCd7PCguKz8pPjsgKnJlbD0ibmV4dCJ9JywgJGxpbmssICRtYXRjaCkpIHsKcmV0dXJuICRtYXRjaFsxXTsKfQp9Cn0KfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3M7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcSnNvblxKc29uRmlsZTsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKY2xhc3MgR2l0Qml0YnVja2V0RHJpdmVyIGV4dGVuZHMgVmNzRHJpdmVyIGltcGxlbWVudHMgVmNzRHJpdmVySW50ZXJmYWNlCnsKcHJvdGVjdGVkICRvd25lcjsKcHJvdGVjdGVkICRyZXBvc2l0b3J5Owpwcm90ZWN0ZWQgJHRhZ3M7CnByb3RlY3RlZCAkYnJhbmNoZXM7CnByb3RlY3RlZCAkcm9vdElkZW50aWZpZXI7CnByb3RlY3RlZCAkaW5mb0NhY2hlID0gYXJyYXkoKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCkKewpwcmVnX21hdGNoKCcjXmh0dHBzOi8vYml0YnVja2V0XC5vcmcvKFteL10rKS8oLis/KVwuZ2l0JCMnLCAkdGhpcy0+dXJsLCAkbWF0Y2gpOwokdGhpcy0+b3duZXIgPSAkbWF0Y2hbMV07CiR0aGlzLT5yZXBvc2l0b3J5ID0gJG1hdGNoWzJdOwokdGhpcy0+b3JpZ2luVXJsID0gJ2JpdGJ1Y2tldC5vcmcnOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Um9vdElkZW50aWZpZXIoKQp7CmlmIChudWxsID09PSAkdGhpcy0+cm9vdElkZW50aWZpZXIpIHsKJHJlc291cmNlID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2FwaS5iaXRidWNrZXQub3JnLzEuMC9yZXBvc2l0b3JpZXMvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5OwokcmVwb0RhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpLCAkcmVzb3VyY2UpOwokdGhpcy0+cm9vdElkZW50aWZpZXIgPSAhZW1wdHkoJHJlcG9EYXRhWydtYWluX2JyYW5jaCddKSA/ICRyZXBvRGF0YVsnbWFpbl9icmFuY2gnXSA6ICdtYXN0ZXInOwp9CgpyZXR1cm4gJHRoaXMtPnJvb3RJZGVudGlmaWVyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VXJsKCkKewpyZXR1cm4gJHRoaXMtPnVybDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZSgkaWRlbnRpZmllcikKewpyZXR1cm4gYXJyYXkoJ3R5cGUnID0+ICdnaXQnLCAndXJsJyA9PiAkdGhpcy0+Z2V0VXJsKCksICdyZWZlcmVuY2UnID0+ICRpZGVudGlmaWVyKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERpc3QoJGlkZW50aWZpZXIpCnsKJHVybCA9ICR0aGlzLT5nZXRTY2hlbWUoKSAuICc6Ly9iaXRidWNrZXQub3JnLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nL2dldC8nLiRpZGVudGlmaWVyLicuemlwJzsKCnJldHVybiBhcnJheSgndHlwZScgPT4gJ3ppcCcsICd1cmwnID0+ICR1cmwsICdyZWZlcmVuY2UnID0+ICRpZGVudGlmaWVyLCAnc2hhc3VtJyA9PiAnJyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb21wb3NlckluZm9ybWF0aW9uKCRpZGVudGlmaWVyKQp7CmlmICghaXNzZXQoJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl0pKSB7CiRyZXNvdXJjZSA9ICR0aGlzLT5nZXRTY2hlbWUoKSAuICc6Ly9iaXRidWNrZXQub3JnLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nL3Jhdy8nLiRpZGVudGlmaWVyLicvY29tcG9zZXIuanNvbic7CiRjb21wb3NlciA9ICR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpOwppZiAoISRjb21wb3NlcikgewpyZXR1cm47Cn0KCiRjb21wb3NlciA9IEpzb25GaWxlOjpwYXJzZUpzb24oJGNvbXBvc2VyLCAkcmVzb3VyY2UpOwoKaWYgKCFpc3NldCgkY29tcG9zZXJbJ3RpbWUnXSkpIHsKJHJlc291cmNlID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2FwaS5iaXRidWNrZXQub3JnLzEuMC9yZXBvc2l0b3JpZXMvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5LicvY2hhbmdlc2V0cy8nLiRpZGVudGlmaWVyOwokY2hhbmdlc2V0ID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Z2V0Q29udGVudHMoJHJlc291cmNlKSwgJHJlc291cmNlKTsKJGNvbXBvc2VyWyd0aW1lJ10gPSAkY2hhbmdlc2V0Wyd0aW1lc3RhbXAnXTsKfQokdGhpcy0+aW5mb0NhY2hlWyRpZGVudGlmaWVyXSA9ICRjb21wb3NlcjsKfQoKcmV0dXJuICR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VGFncygpCnsKaWYgKG51bGwgPT09ICR0aGlzLT50YWdzKSB7CiRyZXNvdXJjZSA9ICR0aGlzLT5nZXRTY2hlbWUoKSAuICc6Ly9hcGkuYml0YnVja2V0Lm9yZy8xLjAvcmVwb3NpdG9yaWVzLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nL3RhZ3MnOwokdGFnc0RhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpLCAkcmVzb3VyY2UpOwokdGhpcy0+dGFncyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0YWdzRGF0YSBhcyAkdGFnID0+ICRkYXRhKSB7CiR0aGlzLT50YWdzWyR0YWddID0gJGRhdGFbJ3Jhd19ub2RlJ107Cn0KfQoKcmV0dXJuICR0aGlzLT50YWdzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QnJhbmNoZXMoKQp7CmlmIChudWxsID09PSAkdGhpcy0+YnJhbmNoZXMpIHsKJHJlc291cmNlID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2FwaS5iaXRidWNrZXQub3JnLzEuMC9yZXBvc2l0b3JpZXMvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5LicvYnJhbmNoZXMnOwokYnJhbmNoRGF0YSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHRoaXMtPmdldENvbnRlbnRzKCRyZXNvdXJjZSksICRyZXNvdXJjZSk7CiR0aGlzLT5icmFuY2hlcyA9IGFycmF5KCk7CmZvcmVhY2ggKCRicmFuY2hEYXRhIGFzICRicmFuY2ggPT4gJGRhdGEpIHsKJHRoaXMtPmJyYW5jaGVzWyRicmFuY2hdID0gJGRhdGFbJ3Jhd19ub2RlJ107Cn0KfQoKcmV0dXJuICR0aGlzLT5icmFuY2hlczsKfQoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0cyhJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCAkdXJsLCAkZGVlcCA9IGZhbHNlKQp7CmlmICghcHJlZ19tYXRjaCgnI15odHRwczovL2JpdGJ1Y2tldFwub3JnLyhbXi9dKykvKC4rPylcLmdpdCQjJywgJHVybCkpIHsKcmV0dXJuIGZhbHNlOwp9CgppZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSkgewppZiAoJGlvLT5pc1ZlcmJvc2UoKSkgewokaW8tPndyaXRlKCdTa2lwcGluZyBCaXRidWNrZXQgZ2l0IGRyaXZlciBmb3IgJy4kdXJsLicgYmVjYXVzZSB0aGUgT3BlblNTTCBQSFAgZXh0ZW5zaW9uIGlzIG1pc3NpbmcuJyk7Cn0KCnJldHVybiBmYWxzZTsKfQoKcmV0dXJuIHRydWU7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFZjczsKCnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcVXRpbFxQcm9jZXNzRXhlY3V0b3I7CnVzZSBDb21wb3NlclxVdGlsXEZpbGVzeXN0ZW07CnVzZSBDb21wb3NlclxVdGlsXEdpdCBhcyBHaXRVdGlsOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxDYWNoZTsKdXNlIENvbXBvc2VyXENvbmZpZzsKCgoKCmNsYXNzIEdpdERyaXZlciBleHRlbmRzIFZjc0RyaXZlcgp7CnByb3RlY3RlZCAkY2FjaGU7CnByb3RlY3RlZCAkdGFnczsKcHJvdGVjdGVkICRicmFuY2hlczsKcHJvdGVjdGVkICRyb290SWRlbnRpZmllcjsKcHJvdGVjdGVkICRyZXBvRGlyOwpwcm90ZWN0ZWQgJGluZm9DYWNoZSA9IGFycmF5KCk7CgoKCgpwdWJsaWMgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKaWYgKHN0YXRpYzo6aXNMb2NhbFVybCgkdGhpcy0+dXJsKSkgewokdGhpcy0+cmVwb0RpciA9IHN0cl9yZXBsYWNlKCdmaWxlOi8vJywgJycsICR0aGlzLT51cmwpOwp9IGVsc2UgewokdGhpcy0+cmVwb0RpciA9ICR0aGlzLT5jb25maWctPmdldCgnY2FjaGUtdmNzLWRpcicpIC4gJy8nIC4gcHJlZ19yZXBsYWNlKCd7W15hLXowLTkuXX1pJywgJy0nLCAkdGhpcy0+dXJsKSAuICcvJzsKCiR1dGlsID0gbmV3IEdpdFV0aWw7CiR1dGlsLT5jbGVhbkVudigpOwoKJGZzID0gbmV3IEZpbGVzeXN0ZW0oKTsKJGZzLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoZGlybmFtZSgkdGhpcy0+cmVwb0RpcikpOwoKaWYgKCFpc193cml0YWJsZShkaXJuYW1lKCR0aGlzLT5yZXBvRGlyKSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdDYW4gbm90IGNsb25lICcuJHRoaXMtPnVybC4nIHRvIGFjY2VzcyBwYWNrYWdlIGluZm9ybWF0aW9uLiBUaGUgIicuZGlybmFtZSgkdGhpcy0+cmVwb0RpcikuJyIgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSBieSB0aGUgY3VycmVudCB1c2VyLicpOwp9CgppZiAocHJlZ19tYXRjaCgne15zc2g6Ly9bXkBdK0BbXjpdKzpbXjAtOV0rfScsICR0aGlzLT51cmwpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgc291cmNlIFVSTCAnLiR0aGlzLT51cmwuJyBpcyBpbnZhbGlkLCBzc2ggVVJMcyBzaG91bGQgaGF2ZSBhIHBvcnQgbnVtYmVyIGFmdGVyICI6Ii4nLiJcbiIuJ1VzZSBzc2g6Ly9naXRAZXhhbXBsZS5jb206MjIvcGF0aCBvciBqdXN0IGdpdEBleGFtcGxlLmNvbTpwYXRoIGlmIHlvdSBkbyBub3Qgd2FudCB0byBwcm92aWRlIGEgcGFzc3dvcmQgb3IgY3VzdG9tIHBvcnQuJyk7Cn0KCgogaWYgKGlzX2RpcigkdGhpcy0+cmVwb0RpcikgJiYgMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCByZW1vdGUnLCAkb3V0cHV0LCAkdGhpcy0+cmVwb0RpcikpIHsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgcmVtb3RlIHVwZGF0ZSAtLXBydW5lIG9yaWdpbicsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKSkgewokdGhpcy0+aW8tPndyaXRlKCc8ZXJyb3I+RmFpbGVkIHRvIHVwZGF0ZSAnLiR0aGlzLT51cmwuJywgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgcmVwb3NpdG9yeSBtYXkgYmUgb3V0ZGF0ZWQgKCcuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkuJyk8L2Vycm9yPicpOwp9Cn0gZWxzZSB7CgogJGZzLT5yZW1vdmVEaXJlY3RvcnkoJHRoaXMtPnJlcG9EaXIpOwoKJGNvbW1hbmQgPSBzcHJpbnRmKCdnaXQgY2xvbmUgLS1taXJyb3IgJXMgJXMnLCBlc2NhcGVzaGVsbGFyZygkdGhpcy0+dXJsKSwgZXNjYXBlc2hlbGxhcmcoJHRoaXMtPnJlcG9EaXIpKTsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkb3V0cHV0KSkgewokb3V0cHV0ID0gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCk7CgppZiAoMCAhPT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCAtLXZlcnNpb24nLCAkaWdub3JlZE91dHB1dCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gY2xvbmUgJy4kdGhpcy0+dXJsLicsIGdpdCB3YXMgbm90IGZvdW5kLCBjaGVjayB0aGF0IGl0IGlzIGluc3RhbGxlZCBhbmQgaW4geW91ciBQQVRIIGVudi4nIC4gIlxuXG4iIC4gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkpOwp9CgppZiAoCiR0aGlzLT5pby0+aXNJbnRlcmFjdGl2ZSgpICYmCnByZWdfbWF0Y2goJ3soaHR0cHM/Oi8vKShbXi9dKykoLiopJH1pJywgJHRoaXMtPnVybCwgJG1hdGNoKSAmJgpzdHJwb3MoJG91dHB1dCwgJ2ZhdGFsOiBBdXRoZW50aWNhdGlvbiBmYWlsZWQnKSAhPT0gZmFsc2UKKSB7CmlmICgkdGhpcy0+aW8tPmhhc0F1dGhlbnRpY2F0aW9uKCRtYXRjaFsyXSkpIHsKJGF1dGggPSAkdGhpcy0+aW8tPmdldEF1dGhlbnRpY2F0aW9uKCRtYXRjaFsyXSk7Cn0gZWxzZSB7CiR0aGlzLT5pby0+d3JpdGUoJHRoaXMtPnVybC4nIHJlcXVpcmVzIEF1dGhlbnRpY2F0aW9uJyk7CiRhdXRoID0gYXJyYXkoCid1c2VybmFtZScgPT4gJHRoaXMtPmlvLT5hc2soJ1VzZXJuYW1lOiAnKSwKJ3Bhc3N3b3JkJyA9PiAkdGhpcy0+aW8tPmFza0FuZEhpZGVBbnN3ZXIoJ1Bhc3N3b3JkOiAnKSwKKTsKfQoKJHVybCA9ICRtYXRjaFsxXS5yYXd1cmxlbmNvZGUoJGF1dGhbJ3VzZXJuYW1lJ10pLic6Jy5yYXd1cmxlbmNvZGUoJGF1dGhbJ3Bhc3N3b3JkJ10pLidAJy4kbWF0Y2hbMl0uJG1hdGNoWzNdOwoKJGNvbW1hbmQgPSBzcHJpbnRmKCdnaXQgY2xvbmUgLS1taXJyb3IgJXMgJXMnLCBlc2NhcGVzaGVsbGFyZygkdXJsKSwgZXNjYXBlc2hlbGxhcmcoJHRoaXMtPnJlcG9EaXIpKTsKCmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCkpIHsKJHRoaXMtPmlvLT5zZXRBdXRoZW50aWNhdGlvbigkbWF0Y2hbMl0sICRhdXRoWyd1c2VybmFtZSddLCAkYXV0aFsncGFzc3dvcmQnXSk7Cn0gZWxzZSB7CiRvdXRwdXQgPSAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKTsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gY2xvbmUgJy4kdGhpcy0+dXJsLicsIGNvdWxkIG5vdCByZWFkIHBhY2thZ2VzIGZyb20gaXQnIC4gIlxuXG4iIC4kb3V0cHV0KTsKfQp9IGVsc2Ugewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBjbG9uZSAnLiR0aGlzLT51cmwuJywgY291bGQgbm90IHJlYWQgcGFja2FnZXMgZnJvbSBpdCcgLiAiXG5cbiIgLiRvdXRwdXQpOwp9Cn0KfQp9CgokdGhpcy0+Z2V0VGFncygpOwokdGhpcy0+Z2V0QnJhbmNoZXMoKTsKCiR0aGlzLT5jYWNoZSA9IG5ldyBDYWNoZSgkdGhpcy0+aW8sICR0aGlzLT5jb25maWctPmdldCgnY2FjaGUtcmVwby1kaXInKS4nLycucHJlZ19yZXBsYWNlKCd7W15hLXowLTkuXX1pJywgJy0nLCAkdGhpcy0+dXJsKSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSb290SWRlbnRpZmllcigpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5yb290SWRlbnRpZmllcikgewokdGhpcy0+cm9vdElkZW50aWZpZXIgPSAnbWFzdGVyJzsKCgogJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCBicmFuY2ggLS1uby1jb2xvcicsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKJGJyYW5jaGVzID0gJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCk7CmlmICghaW5fYXJyYXkoJyogbWFzdGVyJywgJGJyYW5jaGVzKSkgewpmb3JlYWNoICgkYnJhbmNoZXMgYXMgJGJyYW5jaCkgewppZiAoJGJyYW5jaCAmJiBwcmVnX21hdGNoKCd7XlwqICsoXFMrKX0nLCAkYnJhbmNoLCAkbWF0Y2gpKSB7CiR0aGlzLT5yb290SWRlbnRpZmllciA9ICRtYXRjaFsxXTsKYnJlYWs7Cn0KfQp9Cn0KCnJldHVybiAkdGhpcy0+cm9vdElkZW50aWZpZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVcmwoKQp7CnJldHVybiAkdGhpcy0+dXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlKCRpZGVudGlmaWVyKQp7CnJldHVybiBhcnJheSgndHlwZScgPT4gJ2dpdCcsICd1cmwnID0+ICR0aGlzLT5nZXRVcmwoKSwgJ3JlZmVyZW5jZScgPT4gJGlkZW50aWZpZXIpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdCgkaWRlbnRpZmllcikKewpyZXR1cm4gbnVsbDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VySW5mb3JtYXRpb24oJGlkZW50aWZpZXIpCnsKaWYgKHByZWdfbWF0Y2goJ3tbYS1mMC05XXs0MH19aScsICRpZGVudGlmaWVyKSAmJiAkcmVzID0gJHRoaXMtPmNhY2hlLT5yZWFkKCRpZGVudGlmaWVyKSkgewokdGhpcy0+aW5mb0NhY2hlWyRpZGVudGlmaWVyXSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHJlcyk7Cn0KCmlmICghaXNzZXQoJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl0pKSB7CiRyZXNvdXJjZSA9IHNwcmludGYoJyVzOmNvbXBvc2VyLmpzb24nLCBlc2NhcGVzaGVsbGFyZygkaWRlbnRpZmllcikpOwokdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZShzcHJpbnRmKCdnaXQgc2hvdyAlcycsICRyZXNvdXJjZSksICRjb21wb3NlciwgJHRoaXMtPnJlcG9EaXIpOwoKaWYgKCF0cmltKCRjb21wb3NlcikpIHsKcmV0dXJuOwp9CgokY29tcG9zZXIgPSBKc29uRmlsZTo6cGFyc2VKc29uKCRjb21wb3NlciwgJHJlc291cmNlKTsKCmlmICghaXNzZXQoJGNvbXBvc2VyWyd0aW1lJ10pKSB7CiR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKHNwcmludGYoJ2dpdCBsb2cgLTEgLS1mb3JtYXQ9JSVhdCAlcycsIGVzY2FwZXNoZWxsYXJnKCRpZGVudGlmaWVyKSksICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKJGRhdGUgPSBuZXcgXERhdGVUaW1lKCdAJy50cmltKCRvdXRwdXQpLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwokY29tcG9zZXJbJ3RpbWUnXSA9ICRkYXRlLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyk7Cn0KCmlmIChwcmVnX21hdGNoKCd7W2EtZjAtOV17NDB9fWknLCAkaWRlbnRpZmllcikpIHsKJHRoaXMtPmNhY2hlLT53cml0ZSgkaWRlbnRpZmllciwganNvbl9lbmNvZGUoJGNvbXBvc2VyKSk7Cn0KCiR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdID0gJGNvbXBvc2VyOwp9CgpyZXR1cm4gJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUYWdzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnRhZ3MpIHsKJHRoaXMtPnRhZ3MgPSBhcnJheSgpOwoKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCBzaG93LXJlZiAtLXRhZ3MnLCAkb3V0cHV0LCAkdGhpcy0+cmVwb0Rpcik7CmZvcmVhY2ggKCRvdXRwdXQgPSAkdGhpcy0+cHJvY2Vzcy0+c3BsaXRMaW5lcygkb3V0cHV0KSBhcyAkdGFnKSB7CmlmICgkdGFnICYmIHByZWdfbWF0Y2goJ3teKFthLWYwLTldezQwfSkgcmVmcy90YWdzLyhcUyspJH0nLCAkdGFnLCAkbWF0Y2gpKSB7CiR0aGlzLT50YWdzWyRtYXRjaFsyXV0gPSAkbWF0Y2hbMV07Cn0KfQp9CgpyZXR1cm4gJHRoaXMtPnRhZ3M7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hlcygpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5icmFuY2hlcykgewokYnJhbmNoZXMgPSBhcnJheSgpOwoKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCBicmFuY2ggLS1uby1jb2xvciAtLW5vLWFiYnJldiAtdicsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGJyYW5jaCkgewppZiAoJGJyYW5jaCAmJiAhcHJlZ19tYXRjaCgne14gKlteL10rL0hFQUQgfScsICRicmFuY2gpKSB7CmlmIChwcmVnX21hdGNoKCd7Xig/OlwqICk/ICooXFMrKSAqKFthLWYwLTldKykgLiokfScsICRicmFuY2gsICRtYXRjaCkpIHsKJGJyYW5jaGVzWyRtYXRjaFsxXV0gPSAkbWF0Y2hbMl07Cn0KfQp9CgokdGhpcy0+YnJhbmNoZXMgPSAkYnJhbmNoZXM7Cn0KCnJldHVybiAkdGhpcy0+YnJhbmNoZXM7Cn0KCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHMoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgJHVybCwgJGRlZXAgPSBmYWxzZSkKewppZiAocHJlZ19tYXRjaCgnIyheZ2l0Oi8vfFwuZ2l0JHxnaXQoPzpvbGl0ZSk/QHwvL2dpdFwufC8vZ2l0aHViLmNvbS8pI2knLCAkdXJsKSkgewpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAoc3RhdGljOjppc0xvY2FsVXJsKCR1cmwpKSB7CmlmICghaXNfZGlyKCR1cmwpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0OiAnLiR1cmwpOwp9CgokcHJvY2VzcyA9IG5ldyBQcm9jZXNzRXhlY3V0b3IoKTsKJHVybCA9IHN0cl9yZXBsYWNlKCdmaWxlOi8vJywgJycsICR1cmwpOwoKIGlmICgkcHJvY2Vzcy0+ZXhlY3V0ZSgnZ2l0IHRhZycsICRvdXRwdXQsICR1cmwpID09PSAwKSB7CnJldHVybiB0cnVlOwp9Cn0KCmlmICghJGRlZXApIHsKcmV0dXJuIGZhbHNlOwp9CgoKIHJldHVybiBmYWxzZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnlcVmNzOwoKdXNlIENvbXBvc2VyXENvbmZpZzsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcVXRpbFxQcm9jZXNzRXhlY3V0b3I7CnVzZSBDb21wb3NlclxVdGlsXFBlcmZvcmNlOwoKCgoKY2xhc3MgUGVyZm9yY2VEcml2ZXIgZXh0ZW5kcyBWY3NEcml2ZXIKewpwcm90ZWN0ZWQgJGRlcG90Owpwcm90ZWN0ZWQgJGJyYW5jaDsKcHJvdGVjdGVkICRwZXJmb3JjZTsKcHJvdGVjdGVkICRjb21wb3NlckluZm87CnByb3RlY3RlZCAkY29tcG9zZXJJbmZvSWRlbnRpZmllcjsKCgoKCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCkKewokdGhpcy0+ZGVwb3QgPSAkdGhpcy0+cmVwb0NvbmZpZ1snZGVwb3QnXTsKJHRoaXMtPmJyYW5jaCA9ICcnOwppZiAoIWVtcHR5KCR0aGlzLT5yZXBvQ29uZmlnWydicmFuY2gnXSkpIHsKJHRoaXMtPmJyYW5jaCA9ICR0aGlzLT5yZXBvQ29uZmlnWydicmFuY2gnXTsKfQoKJHRoaXMtPmluaXRQZXJmb3JjZSgkdGhpcy0+cmVwb0NvbmZpZyk7CiR0aGlzLT5wZXJmb3JjZS0+cDRMb2dpbigkdGhpcy0+aW8pOwokdGhpcy0+cGVyZm9yY2UtPmNoZWNrU3RyZWFtKCR0aGlzLT5kZXBvdCk7CgokdGhpcy0+cGVyZm9yY2UtPndyaXRlUDRDbGllbnRTcGVjKCk7CiR0aGlzLT5wZXJmb3JjZS0+Y29ubmVjdENsaWVudCgpOwoKcmV0dXJuIHRydWU7Cn0KCnByaXZhdGUgZnVuY3Rpb24gaW5pdFBlcmZvcmNlKCRyZXBvQ29uZmlnKQp7CmlmICghZW1wdHkoJHRoaXMtPnBlcmZvcmNlKSkgewpyZXR1cm47Cn0KCiRyZXBvRGlyID0gJHRoaXMtPmNvbmZpZy0+Z2V0KCdjYWNoZS12Y3MtZGlyJykgLiAnLycgLiAkdGhpcy0+ZGVwb3Q7CiR0aGlzLT5wZXJmb3JjZSA9IFBlcmZvcmNlOjpjcmVhdGUoJHJlcG9Db25maWcsICR0aGlzLT5nZXRVcmwoKSwgJHJlcG9EaXIsICR0aGlzLT5wcm9jZXNzLCAkdGhpcy0+aW8pOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcikKewppZiAoIWVtcHR5KCR0aGlzLT5jb21wb3NlckluZm9JZGVudGlmaWVyKSkgewppZiAoc3RyY21wKCRpZGVudGlmaWVyLCAkdGhpcy0+Y29tcG9zZXJJbmZvSWRlbnRpZmllcikgPT09IDApIHsKcmV0dXJuICR0aGlzLT5jb21wb3NlckluZm87Cn0KfQokY29tcG9zZXJfaW5mbyA9ICR0aGlzLT5wZXJmb3JjZS0+Z2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcik7CgpyZXR1cm4gJGNvbXBvc2VyX2luZm87Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSb290SWRlbnRpZmllcigpCnsKcmV0dXJuICR0aGlzLT5icmFuY2g7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hlcygpCnsKJGJyYW5jaGVzID0gJHRoaXMtPnBlcmZvcmNlLT5nZXRCcmFuY2hlcygpOwoKcmV0dXJuICRicmFuY2hlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRhZ3MoKQp7CiR0YWdzID0gJHRoaXMtPnBlcmZvcmNlLT5nZXRUYWdzKCk7CgpyZXR1cm4gJHRhZ3M7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0KCRpZGVudGlmaWVyKQp7CnJldHVybiBudWxsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlKCRpZGVudGlmaWVyKQp7CiRzb3VyY2UgPSBhcnJheSgKJ3R5cGUnID0+ICdwZXJmb3JjZScsCid1cmwnID0+ICR0aGlzLT5yZXBvQ29uZmlnWyd1cmwnXSwKJ3JlZmVyZW5jZScgPT4gJGlkZW50aWZpZXIsCidwNHVzZXInID0+ICR0aGlzLT5wZXJmb3JjZS0+Z2V0VXNlcigpCik7CgpyZXR1cm4gJHNvdXJjZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFVybCgpCnsKcmV0dXJuICR0aGlzLT51cmw7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNDb21wb3NlckZpbGUoJGlkZW50aWZpZXIpCnsKJHRoaXMtPmNvbXBvc2VySW5mbyA9ICR0aGlzLT5wZXJmb3JjZS0+Z2V0Q29tcG9zZXJJbmZvcm1hdGlvbignLy8nIC4gJHRoaXMtPmRlcG90IC4gJy8nIC4gJGlkZW50aWZpZXIpOwokdGhpcy0+Y29tcG9zZXJJbmZvSWRlbnRpZmllciA9ICRpZGVudGlmaWVyOwpyZXR1cm4gIWVtcHR5KCR0aGlzLT5jb21wb3NlckluZm8pOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoJHVybCkKewpyZXR1cm4gZmFsc2U7Cn0KCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHMoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgJHVybCwgJGRlZXAgPSBmYWxzZSkKewppZiAoJGRlZXAgfHwgcHJlZ19tYXRjaCgnI1xiKHBlcmZvcmNlfHA0KVxiI2knLCAkdXJsKSkgewpyZXR1cm4gUGVyZm9yY2U6OmNoZWNrU2VydmVyRXhpc3RzKCR1cmwsIG5ldyBQcm9jZXNzRXhlY3V0b3IoJGlvKSk7Cn0KCnJldHVybiBmYWxzZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGNsZWFudXAoKQp7CiR0aGlzLT5wZXJmb3JjZS0+Y2xlYW51cENsaWVudFNwZWMoKTsKJHRoaXMtPnBlcmZvcmNlID0gbnVsbDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldERlcG90KCkKewpyZXR1cm4gJHRoaXMtPmRlcG90Owp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0QnJhbmNoKCkKewpyZXR1cm4gJHRoaXMtPmJyYW5jaDsKfQoKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFZjczsKCnVzZSBDb21wb3NlclxDYWNoZTsKdXNlIENvbXBvc2VyXENvbmZpZzsKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxVdGlsXFByb2Nlc3NFeGVjdXRvcjsKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXFV0aWxcU3ZuIGFzIFN2blV0aWw7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcVHJhbnNwb3J0RXhjZXB0aW9uOwoKCgoKCmNsYXNzIFN2bkRyaXZlciBleHRlbmRzIFZjc0RyaXZlcgp7CnByb3RlY3RlZCAkY2FjaGU7CnByb3RlY3RlZCAkYmFzZVVybDsKcHJvdGVjdGVkICR0YWdzOwpwcm90ZWN0ZWQgJGJyYW5jaGVzOwpwcm90ZWN0ZWQgJHJvb3RJZGVudGlmaWVyOwpwcm90ZWN0ZWQgJGluZm9DYWNoZSA9IGFycmF5KCk7Cgpwcm90ZWN0ZWQgJHRydW5rUGF0aCA9ICd0cnVuayc7CnByb3RlY3RlZCAkYnJhbmNoZXNQYXRoID0gJ2JyYW5jaGVzJzsKcHJvdGVjdGVkICR0YWdzUGF0aCA9ICd0YWdzJzsKcHJvdGVjdGVkICRwYWNrYWdlUGF0aCA9ICcnOwoKCgoKcHJpdmF0ZSAkdXRpbDsKCgoKCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCkKewokdGhpcy0+dXJsID0gJHRoaXMtPmJhc2VVcmwgPSBydHJpbShzZWxmOjpub3JtYWxpemVVcmwoJHRoaXMtPnVybCksICcvJyk7CgpTdm5VdGlsOjpjbGVhbkVudigpOwoKaWYgKGlzc2V0KCR0aGlzLT5yZXBvQ29uZmlnWyd0cnVuay1wYXRoJ10pKSB7CiR0aGlzLT50cnVua1BhdGggPSAkdGhpcy0+cmVwb0NvbmZpZ1sndHJ1bmstcGF0aCddOwp9CmlmIChpc3NldCgkdGhpcy0+cmVwb0NvbmZpZ1snYnJhbmNoZXMtcGF0aCddKSkgewokdGhpcy0+YnJhbmNoZXNQYXRoID0gJHRoaXMtPnJlcG9Db25maWdbJ2JyYW5jaGVzLXBhdGgnXTsKfQppZiAoaXNzZXQoJHRoaXMtPnJlcG9Db25maWdbJ3RhZ3MtcGF0aCddKSkgewokdGhpcy0+dGFnc1BhdGggPSAkdGhpcy0+cmVwb0NvbmZpZ1sndGFncy1wYXRoJ107Cn0KaWYgKGlzc2V0KCR0aGlzLT5yZXBvQ29uZmlnWydwYWNrYWdlLXBhdGgnXSkpIHsKJHRoaXMtPnBhY2thZ2VQYXRoID0gJy8nIC4gdHJpbSgkdGhpcy0+cmVwb0NvbmZpZ1sncGFja2FnZS1wYXRoJ10sICcvJyk7Cn0KCmlmIChmYWxzZSAhPT0gKCRwb3MgPSBzdHJycG9zKCR0aGlzLT51cmwsICcvJyAuICR0aGlzLT50cnVua1BhdGgpKSkgewokdGhpcy0+YmFzZVVybCA9IHN1YnN0cigkdGhpcy0+dXJsLCAwLCAkcG9zKTsKfQoKJHRoaXMtPmNhY2hlID0gbmV3IENhY2hlKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZy0+Z2V0KCdjYWNoZS1yZXBvLWRpcicpLicvJy5wcmVnX3JlcGxhY2UoJ3tbXmEtejAtOS5dfWknLCAnLScsICR0aGlzLT5iYXNlVXJsKSk7CgokdGhpcy0+Z2V0QnJhbmNoZXMoKTsKJHRoaXMtPmdldFRhZ3MoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJvb3RJZGVudGlmaWVyKCkKewpyZXR1cm4gJHRoaXMtPnJvb3RJZGVudGlmaWVyID86ICR0aGlzLT50cnVua1BhdGg7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVcmwoKQp7CnJldHVybiAkdGhpcy0+dXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlKCRpZGVudGlmaWVyKQp7CnJldHVybiBhcnJheSgndHlwZScgPT4gJ3N2bicsICd1cmwnID0+ICR0aGlzLT5iYXNlVXJsLCAncmVmZXJlbmNlJyA9PiAkaWRlbnRpZmllcik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0KCRpZGVudGlmaWVyKQp7CnJldHVybiBudWxsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcikKewokaWRlbnRpZmllciA9ICcvJyAuIHRyaW0oJGlkZW50aWZpZXIsICcvJykgLiAnLyc7CgppZiAoJHJlcyA9ICR0aGlzLT5jYWNoZS0+cmVhZCgkaWRlbnRpZmllci4nLmpzb24nKSkgewokdGhpcy0+aW5mb0NhY2hlWyRpZGVudGlmaWVyXSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHJlcyk7Cn0KCmlmICghaXNzZXQoJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl0pKSB7CnByZWdfbWF0Y2goJ3teKC4rPykoQFxkKyk/LyR9JywgJGlkZW50aWZpZXIsICRtYXRjaCk7CmlmICghZW1wdHkoJG1hdGNoWzJdKSkgewokcGF0aCA9ICRtYXRjaFsxXTsKJHJldiA9ICRtYXRjaFsyXTsKfSBlbHNlIHsKJHBhdGggPSAkaWRlbnRpZmllcjsKJHJldiA9ICcnOwp9Cgp0cnkgewokcmVzb3VyY2UgPSAkcGF0aC4nY29tcG9zZXIuanNvbic7CiRvdXRwdXQgPSAkdGhpcy0+ZXhlY3V0ZSgnc3ZuIGNhdCcsICR0aGlzLT5iYXNlVXJsIC4gJHJlc291cmNlIC4gJHJldik7CmlmICghdHJpbSgkb3V0cHV0KSkgewpyZXR1cm47Cn0KfSBjYXRjaCAoXFJ1bnRpbWVFeGNlcHRpb24gJGUpIHsKdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpKTsKfQoKJGNvbXBvc2VyID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkb3V0cHV0LCAkdGhpcy0+YmFzZVVybCAuICRyZXNvdXJjZSAuICRyZXYpOwoKaWYgKCFpc3NldCgkY29tcG9zZXJbJ3RpbWUnXSkpIHsKJG91dHB1dCA9ICR0aGlzLT5leGVjdXRlKCdzdm4gaW5mbycsICR0aGlzLT5iYXNlVXJsIC4gJHBhdGggLiAkcmV2KTsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGxpbmUpIHsKaWYgKCRsaW5lICYmIHByZWdfbWF0Y2goJ3teTGFzdCBDaGFuZ2VkIERhdGU6IChbXihdKyl9JywgJGxpbmUsICRtYXRjaCkpIHsKJGRhdGUgPSBuZXcgXERhdGVUaW1lKCRtYXRjaFsxXSwgbmV3IFxEYXRlVGltZVpvbmUoJ1VUQycpKTsKJGNvbXBvc2VyWyd0aW1lJ10gPSAkZGF0ZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpOwpicmVhazsKfQp9Cn0KCiR0aGlzLT5jYWNoZS0+d3JpdGUoJGlkZW50aWZpZXIuJy5qc29uJywganNvbl9lbmNvZGUoJGNvbXBvc2VyKSk7CiR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdID0gJGNvbXBvc2VyOwp9CgpyZXR1cm4gJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUYWdzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnRhZ3MpIHsKJHRoaXMtPnRhZ3MgPSBhcnJheSgpOwoKaWYgKCR0aGlzLT50YWdzUGF0aCAhPT0gZmFsc2UpIHsKJG91dHB1dCA9ICR0aGlzLT5leGVjdXRlKCdzdm4gbHMgLS12ZXJib3NlJywgJHRoaXMtPmJhc2VVcmwgLiAnLycgLiAkdGhpcy0+dGFnc1BhdGgpOwppZiAoJG91dHB1dCkgewpmb3JlYWNoICgkdGhpcy0+cHJvY2Vzcy0+c3BsaXRMaW5lcygkb3V0cHV0KSBhcyAkbGluZSkgewokbGluZSA9IHRyaW0oJGxpbmUpOwppZiAoJGxpbmUgJiYgcHJlZ19tYXRjaCgne15ccyooXFMrKS4qPyhcUyspXHMqJH0nLCAkbGluZSwgJG1hdGNoKSkgewppZiAoaXNzZXQoJG1hdGNoWzFdKSAmJiBpc3NldCgkbWF0Y2hbMl0pICYmICRtYXRjaFsyXSAhPT0gJy4vJykgewokdGhpcy0+dGFnc1tydHJpbSgkbWF0Y2hbMl0sICcvJyldID0gJHRoaXMtPmJ1aWxkSWRlbnRpZmllcigKJy8nIC4gJHRoaXMtPnRhZ3NQYXRoIC4gJy8nIC4gJG1hdGNoWzJdLAokbWF0Y2hbMV0KKTsKfQp9Cn0KfQp9Cn0KCnJldHVybiAkdGhpcy0+dGFnczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEJyYW5jaGVzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPmJyYW5jaGVzKSB7CiR0aGlzLT5icmFuY2hlcyA9IGFycmF5KCk7CgppZiAoZmFsc2UgPT09ICR0aGlzLT50cnVua1BhdGgpIHsKJHRydW5rUGFyZW50ID0gJHRoaXMtPmJhc2VVcmwgLiAnLyc7Cn0gZWxzZSB7CiR0cnVua1BhcmVudCA9ICR0aGlzLT5iYXNlVXJsIC4gJy8nIC4gJHRoaXMtPnRydW5rUGF0aDsKfQoKJG91dHB1dCA9ICR0aGlzLT5leGVjdXRlKCdzdm4gbHMgLS12ZXJib3NlJywgJHRydW5rUGFyZW50KTsKaWYgKCRvdXRwdXQpIHsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGxpbmUpIHsKJGxpbmUgPSB0cmltKCRsaW5lKTsKaWYgKCRsaW5lICYmIHByZWdfbWF0Y2goJ3teXHMqKFxTKykuKj8oXFMrKVxzKiR9JywgJGxpbmUsICRtYXRjaCkpIHsKaWYgKGlzc2V0KCRtYXRjaFsxXSkgJiYgaXNzZXQoJG1hdGNoWzJdKSAmJiAkbWF0Y2hbMl0gPT09ICcuLycpIHsKJHRoaXMtPmJyYW5jaGVzWyd0cnVuayddID0gJHRoaXMtPmJ1aWxkSWRlbnRpZmllcigKJy8nIC4gJHRoaXMtPnRydW5rUGF0aCwKJG1hdGNoWzFdCik7CiR0aGlzLT5yb290SWRlbnRpZmllciA9ICR0aGlzLT5icmFuY2hlc1sndHJ1bmsnXTsKYnJlYWs7Cn0KfQp9Cn0KdW5zZXQoJG91dHB1dCk7CgppZiAoJHRoaXMtPmJyYW5jaGVzUGF0aCAhPT0gZmFsc2UpIHsKJG91dHB1dCA9ICR0aGlzLT5leGVjdXRlKCdzdm4gbHMgLS12ZXJib3NlJywgJHRoaXMtPmJhc2VVcmwgLiAnLycgLiAkdGhpcy0+YnJhbmNoZXNQYXRoKTsKaWYgKCRvdXRwdXQpIHsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXModHJpbSgkb3V0cHV0KSkgYXMgJGxpbmUpIHsKJGxpbmUgPSB0cmltKCRsaW5lKTsKaWYgKCRsaW5lICYmIHByZWdfbWF0Y2goJ3teXHMqKFxTKykuKj8oXFMrKVxzKiR9JywgJGxpbmUsICRtYXRjaCkpIHsKaWYgKGlzc2V0KCRtYXRjaFsxXSkgJiYgaXNzZXQoJG1hdGNoWzJdKSAmJiAkbWF0Y2hbMl0gIT09ICcuLycpIHsKJHRoaXMtPmJyYW5jaGVzW3J0cmltKCRtYXRjaFsyXSwgJy8nKV0gPSAkdGhpcy0+YnVpbGRJZGVudGlmaWVyKAonLycgLiAkdGhpcy0+YnJhbmNoZXNQYXRoIC4gJy8nIC4gJG1hdGNoWzJdLAokbWF0Y2hbMV0KKTsKfQp9Cn0KfQp9Cn0KCnJldHVybiAkdGhpcy0+YnJhbmNoZXM7Cn0KCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHMoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgJHVybCwgJGRlZXAgPSBmYWxzZSkKewokdXJsID0gc2VsZjo6bm9ybWFsaXplVXJsKCR1cmwpOwppZiAocHJlZ19tYXRjaCgnIyhec3ZuOi8vfF5zdm5cK3NzaDovL3xzdm5cLikjaScsICR1cmwpKSB7CnJldHVybiB0cnVlOwp9CgoKIGlmICghJGRlZXAgJiYgIXN0YXRpYzo6aXNMb2NhbFVybCgkdXJsKSkgewpyZXR1cm4gZmFsc2U7Cn0KCiRwcm9jZXNzRXhlY3V0b3IgPSBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCk7CgokZXhpdCA9ICRwcm9jZXNzRXhlY3V0b3ItPmV4ZWN1dGUoCiJzdm4gaW5mbyAtLW5vbi1pbnRlcmFjdGl2ZSB7JHVybH0iLAokaWdub3JlZE91dHB1dAopOwoKaWYgKCRleGl0ID09PSAwKSB7CgogcmV0dXJuIHRydWU7Cn0KCmlmIChmYWxzZSAhPT0gc3RyaXBvcygkcHJvY2Vzc0V4ZWN1dG9yLT5nZXRFcnJvck91dHB1dCgpLCAnYXV0aG9yaXphdGlvbiBmYWlsZWQ6JykpIHsKCiAKIHJldHVybiB0cnVlOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVVybCgkdXJsKQp7CiRmcyA9IG5ldyBGaWxlc3lzdGVtKCk7CmlmICgkZnMtPmlzQWJzb2x1dGVQYXRoKCR1cmwpKSB7CnJldHVybiAnZmlsZTovLycgLiBzdHJ0cigkdXJsLCAnXFwnLCAnLycpOwp9CgpyZXR1cm4gJHVybDsKfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGUoJGNvbW1hbmQsICR1cmwpCnsKaWYgKG51bGwgPT09ICR0aGlzLT51dGlsKSB7CiR0aGlzLT51dGlsID0gbmV3IFN2blV0aWwoJHRoaXMtPmJhc2VVcmwsICR0aGlzLT5pbywgJHRoaXMtPnByb2Nlc3MpOwp9Cgp0cnkgewpyZXR1cm4gJHRoaXMtPnV0aWwtPmV4ZWN1dGUoJGNvbW1hbmQsICR1cmwpOwp9IGNhdGNoIChcUnVudGltZUV4Y2VwdGlvbiAkZSkgewppZiAoMCAhPT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ3N2biAtLXZlcnNpb24nLCAkaWdub3JlZE91dHB1dCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gbG9hZCAnLiR0aGlzLT51cmwuJywgc3ZuIHdhcyBub3QgZm91bmQsIGNoZWNrIHRoYXQgaXQgaXMgaW5zdGFsbGVkIGFuZCBpbiB5b3VyIFBBVEggZW52LicgLiAiXG5cbiIgLiAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKSk7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigKJ1JlcG9zaXRvcnkgJy4kdGhpcy0+dXJsLicgY291bGQgbm90IGJlIHByb2Nlc3NlZCwgJy4kZS0+Z2V0TWVzc2FnZSgpCik7Cn0KfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRJZGVudGlmaWVyKCRiYXNlRGlyLCAkcmV2aXNpb24pCnsKcmV0dXJuIHJ0cmltKCRiYXNlRGlyLCAnLycpIC4gJHRoaXMtPnBhY2thZ2VQYXRoIC4gJy9AJyAuICRyZXZpc2lvbjsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnlcVmNzOwoKdXNlIENvbXBvc2VyXENvbmZpZzsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKaW50ZXJmYWNlIFZjc0RyaXZlckludGVyZmFjZQp7CgoKCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcik7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSb290SWRlbnRpZmllcigpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QnJhbmNoZXMoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRhZ3MoKTsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdCgkaWRlbnRpZmllcik7CgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZSgkaWRlbnRpZmllcik7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVcmwoKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzQ29tcG9zZXJGaWxlKCRpZGVudGlmaWVyKTsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY2xlYW51cCgpOwoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzdXBwb3J0cyhJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCAkdXJsLCAkZGVlcCA9IGZhbHNlKTsKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFZjczsKCnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcVXRpbFxQcm9jZXNzRXhlY3V0b3I7CnVzZSBDb21wb3NlclxVdGlsXEZpbGVzeXN0ZW07CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKCgoKCmNsYXNzIEhnRHJpdmVyIGV4dGVuZHMgVmNzRHJpdmVyCnsKcHJvdGVjdGVkICR0YWdzOwpwcm90ZWN0ZWQgJGJyYW5jaGVzOwpwcm90ZWN0ZWQgJHJvb3RJZGVudGlmaWVyOwpwcm90ZWN0ZWQgJHJlcG9EaXI7CnByb3RlY3RlZCAkaW5mb0NhY2hlID0gYXJyYXkoKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCkKewppZiAoc3RhdGljOjppc0xvY2FsVXJsKCR0aGlzLT51cmwpKSB7CiR0aGlzLT5yZXBvRGlyID0gc3RyX3JlcGxhY2UoJ2ZpbGU6Ly8nLCAnJywgJHRoaXMtPnVybCk7Cn0gZWxzZSB7CiRjYWNoZURpciA9ICR0aGlzLT5jb25maWctPmdldCgnY2FjaGUtdmNzLWRpcicpOwokdGhpcy0+cmVwb0RpciA9ICRjYWNoZURpciAuICcvJyAuIHByZWdfcmVwbGFjZSgne1teYS16MC05XX1pJywgJy0nLCAkdGhpcy0+dXJsKSAuICcvJzsKCiRmcyA9IG5ldyBGaWxlc3lzdGVtKCk7CiRmcy0+ZW5zdXJlRGlyZWN0b3J5RXhpc3RzKCRjYWNoZURpcik7CgppZiAoIWlzX3dyaXRhYmxlKGRpcm5hbWUoJHRoaXMtPnJlcG9EaXIpKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NhbiBub3QgY2xvbmUgJy4kdGhpcy0+dXJsLicgdG8gYWNjZXNzIHBhY2thZ2UgaW5mb3JtYXRpb24uIFRoZSAiJy4kY2FjaGVEaXIuJyIgZGlyZWN0b3J5IGlzIG5vdCB3cml0YWJsZSBieSB0aGUgY3VycmVudCB1c2VyLicpOwp9CgoKIGlmIChpc19kaXIoJHRoaXMtPnJlcG9EaXIpICYmIDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdoZyBzdW1tYXJ5JywgJG91dHB1dCwgJHRoaXMtPnJlcG9EaXIpKSB7CmlmICgwICE9PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnaGcgcHVsbCcsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKSkgewokdGhpcy0+aW8tPndyaXRlKCc8ZXJyb3I+RmFpbGVkIHRvIHVwZGF0ZSAnLiR0aGlzLT51cmwuJywgcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIHRoaXMgcmVwb3NpdG9yeSBtYXkgYmUgb3V0ZGF0ZWQgKCcuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCkuJyk8L2Vycm9yPicpOwp9Cn0gZWxzZSB7CgogJGZzLT5yZW1vdmVEaXJlY3RvcnkoJHRoaXMtPnJlcG9EaXIpOwoKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKHNwcmludGYoJ2hnIGNsb25lIC0tbm91cGRhdGUgJXMgJXMnLCBlc2NhcGVzaGVsbGFyZygkdGhpcy0+dXJsKSwgZXNjYXBlc2hlbGxhcmcoJHRoaXMtPnJlcG9EaXIpKSwgJG91dHB1dCwgJGNhY2hlRGlyKSkgewokb3V0cHV0ID0gJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCk7CgppZiAoMCAhPT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2hnIC0tdmVyc2lvbicsICRpZ25vcmVkT3V0cHV0KSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBjbG9uZSAnLiR0aGlzLT51cmwuJywgaGcgd2FzIG5vdCBmb3VuZCwgY2hlY2sgdGhhdCBpdCBpcyBpbnN0YWxsZWQgYW5kIGluIHlvdXIgUEFUSCBlbnYuJyAuICJcblxuIiAuICR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpKTsKfQoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gY2xvbmUgJy4kdGhpcy0+dXJsLicsIGNvdWxkIG5vdCByZWFkIHBhY2thZ2VzIGZyb20gaXQnIC4gIlxuXG4iIC4kb3V0cHV0KTsKfQp9Cn0KCiR0aGlzLT5nZXRUYWdzKCk7CiR0aGlzLT5nZXRCcmFuY2hlcygpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Um9vdElkZW50aWZpZXIoKQp7CmlmIChudWxsID09PSAkdGhpcy0+cm9vdElkZW50aWZpZXIpIHsKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoc3ByaW50ZignaGcgdGlwIC0tdGVtcGxhdGUgIntub2RlfSInKSwgJG91dHB1dCwgJHRoaXMtPnJlcG9EaXIpOwokb3V0cHV0ID0gJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCk7CiR0aGlzLT5yb290SWRlbnRpZmllciA9ICRvdXRwdXRbMF07Cn0KCnJldHVybiAkdGhpcy0+cm9vdElkZW50aWZpZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVcmwoKQp7CnJldHVybiAkdGhpcy0+dXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlKCRpZGVudGlmaWVyKQp7CnJldHVybiBhcnJheSgndHlwZScgPT4gJ2hnJywgJ3VybCcgPT4gJHRoaXMtPmdldFVybCgpLCAncmVmZXJlbmNlJyA9PiAkaWRlbnRpZmllcik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0KCRpZGVudGlmaWVyKQp7CnJldHVybiBudWxsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkaWRlbnRpZmllcikKewppZiAoIWlzc2V0KCR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdKSkgewokdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZShzcHJpbnRmKCdoZyBjYXQgLXIgJXMgY29tcG9zZXIuanNvbicsIGVzY2FwZXNoZWxsYXJnKCRpZGVudGlmaWVyKSksICRjb21wb3NlciwgJHRoaXMtPnJlcG9EaXIpOwoKaWYgKCF0cmltKCRjb21wb3NlcikpIHsKcmV0dXJuOwp9CgokY29tcG9zZXIgPSBKc29uRmlsZTo6cGFyc2VKc29uKCRjb21wb3NlciwgJGlkZW50aWZpZXIpOwoKaWYgKCFpc3NldCgkY29tcG9zZXJbJ3RpbWUnXSkpIHsKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoc3ByaW50ZignaGcgbG9nIC0tdGVtcGxhdGUgIntkYXRlfHJmYzMzMzlkYXRlfSIgLXIgJXMnLCBlc2NhcGVzaGVsbGFyZygkaWRlbnRpZmllcikpLCAkb3V0cHV0LCAkdGhpcy0+cmVwb0Rpcik7CiRkYXRlID0gbmV3IFxEYXRlVGltZSh0cmltKCRvdXRwdXQpLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwokY29tcG9zZXJbJ3RpbWUnXSA9ICRkYXRlLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyk7Cn0KJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl0gPSAkY29tcG9zZXI7Cn0KCnJldHVybiAkdGhpcy0+aW5mb0NhY2hlWyRpZGVudGlmaWVyXTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRhZ3MoKQp7CmlmIChudWxsID09PSAkdGhpcy0+dGFncykgewokdGFncyA9IGFycmF5KCk7CgokdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnaGcgdGFncycsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJHRhZykgewppZiAoJHRhZyAmJiBwcmVnX21hdGNoKCcoXihbXlxzXSspXHMrXGQrOiguKikkKScsICR0YWcsICRtYXRjaCkpIHsKJHRhZ3NbJG1hdGNoWzFdXSA9ICRtYXRjaFsyXTsKfQp9CnVuc2V0KCR0YWdzWyd0aXAnXSk7CgokdGhpcy0+dGFncyA9ICR0YWdzOwp9CgpyZXR1cm4gJHRoaXMtPnRhZ3M7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hlcygpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5icmFuY2hlcykgewokYnJhbmNoZXMgPSBhcnJheSgpOwokYm9va21hcmtzID0gYXJyYXkoKTsKCiR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdoZyBicmFuY2hlcycsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGJyYW5jaCkgewppZiAoJGJyYW5jaCAmJiBwcmVnX21hdGNoKCcoXihbXlxzXSspXHMrXGQrOihbYS1mMC05XSspKScsICRicmFuY2gsICRtYXRjaCkpIHsKJGJyYW5jaGVzWyRtYXRjaFsxXV0gPSAkbWF0Y2hbMl07Cn0KfQoKJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2hnIGJvb2ttYXJrcycsICRvdXRwdXQsICR0aGlzLT5yZXBvRGlyKTsKZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGJyYW5jaCkgewppZiAoJGJyYW5jaCAmJiBwcmVnX21hdGNoKCcoXig/OltccypdKikoW15cc10rKVxzK1xkKzooLiopJCknLCAkYnJhbmNoLCAkbWF0Y2gpKSB7CiRib29rbWFya3NbJG1hdGNoWzFdXSA9ICRtYXRjaFsyXTsKfQp9CgoKICR0aGlzLT5icmFuY2hlcyA9IGFycmF5X21lcmdlKCRib29rbWFya3MsICRicmFuY2hlcyk7Cn0KCnJldHVybiAkdGhpcy0+YnJhbmNoZXM7Cn0KCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3VwcG9ydHMoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgJHVybCwgJGRlZXAgPSBmYWxzZSkKewppZiAocHJlZ19tYXRjaCgnIyheKD86aHR0cHM/fHNzaCk6Ly8oPzpbXkBdQCk/Yml0YnVja2V0Lm9yZ3xodHRwczovLyg/Oi4qPylcLmtpbG5oZy5jb20pI2knLCAkdXJsKSkgewpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAoc3RhdGljOjppc0xvY2FsVXJsKCR1cmwpKSB7CmlmICghaXNfZGlyKCR1cmwpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0OiAnLiR1cmwpOwp9CgokcHJvY2VzcyA9IG5ldyBQcm9jZXNzRXhlY3V0b3IoKTsKJHVybCA9IHN0cl9yZXBsYWNlKCdmaWxlOi8vJywgJycsICR1cmwpOwoKIGlmICgkcHJvY2Vzcy0+ZXhlY3V0ZSgnaGcgc3VtbWFyeScsICRvdXRwdXQsICR1cmwpID09PSAwKSB7CnJldHVybiB0cnVlOwp9Cn0KCmlmICghJGRlZXApIHsKcmV0dXJuIGZhbHNlOwp9CgokcHJvY2Vzc0V4ZWN1dG9yID0gbmV3IFByb2Nlc3NFeGVjdXRvcigpOwokZXhpdCA9ICRwcm9jZXNzRXhlY3V0b3ItPmV4ZWN1dGUoc3ByaW50ZignaGcgaWRlbnRpZnkgJXMnLCBlc2NhcGVzaGVsbGFyZygkdXJsKSksICRpZ25vcmVkKTsKCnJldHVybiAkZXhpdCA9PT0gMDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnlcVmNzOwoKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcVHJhbnNwb3J0RXhjZXB0aW9uOwp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxVdGlsXFByb2Nlc3NFeGVjdXRvcjsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKCgoKCgoKYWJzdHJhY3QgY2xhc3MgVmNzRHJpdmVyIGltcGxlbWVudHMgVmNzRHJpdmVySW50ZXJmYWNlCnsKcHJvdGVjdGVkICR1cmw7CnByb3RlY3RlZCAkb3JpZ2luVXJsOwpwcm90ZWN0ZWQgJHJlcG9Db25maWc7CnByb3RlY3RlZCAkaW87CnByb3RlY3RlZCAkY29uZmlnOwpwcm90ZWN0ZWQgJHByb2Nlc3M7CnByb3RlY3RlZCAkcmVtb3RlRmlsZXN5c3RlbTsKCgoKCgoKCgoKCmZpbmFsIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVwb0NvbmZpZywgSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgUHJvY2Vzc0V4ZWN1dG9yICRwcm9jZXNzID0gbnVsbCwgUmVtb3RlRmlsZXN5c3RlbSAkcmVtb3RlRmlsZXN5c3RlbSA9IG51bGwpCnsKCmlmIChzZWxmOjppc0xvY2FsVXJsKCRyZXBvQ29uZmlnWyd1cmwnXSkpIHsKJHJlcG9Db25maWdbJ3VybCddID0gcmVhbHBhdGgoCnByZWdfcmVwbGFjZSgnL15maWxlOlwvXC8vJywgJycsICRyZXBvQ29uZmlnWyd1cmwnXSkKKTsKfQoKJHRoaXMtPnVybCA9ICRyZXBvQ29uZmlnWyd1cmwnXTsKJHRoaXMtPm9yaWdpblVybCA9ICRyZXBvQ29uZmlnWyd1cmwnXTsKJHRoaXMtPnJlcG9Db25maWcgPSAkcmVwb0NvbmZpZzsKJHRoaXMtPmlvID0gJGlvOwokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCRpbyk7CiR0aGlzLT5yZW1vdGVGaWxlc3lzdGVtID0gJHJlbW90ZUZpbGVzeXN0ZW0gPzogbmV3IFJlbW90ZUZpbGVzeXN0ZW0oJGlvLCAkY29uZmlnKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc0NvbXBvc2VyRmlsZSgkaWRlbnRpZmllcikKewp0cnkgewpyZXR1cm4gKGJvb2wpICR0aGlzLT5nZXRDb21wb3NlckluZm9ybWF0aW9uKCRpZGVudGlmaWVyKTsKfSBjYXRjaCAoVHJhbnNwb3J0RXhjZXB0aW9uICRlKSB7Cn0KCnJldHVybiBmYWxzZTsKfQoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRTY2hlbWUoKQp7CmlmIChleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIHsKcmV0dXJuICdodHRwcyc7Cn0KCnJldHVybiAnaHR0cCc7Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q29udGVudHMoJHVybCkKewpyZXR1cm4gJHRoaXMtPnJlbW90ZUZpbGVzeXN0ZW0tPmdldENvbnRlbnRzKCR0aGlzLT5vcmlnaW5VcmwsICR1cmwsIGZhbHNlKTsKfQoKCgoKCgoKcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBpc0xvY2FsVXJsKCR1cmwpCnsKcmV0dXJuIChib29sKSBwcmVnX21hdGNoKCd7XihmaWxlOi8vfC98W2Etel06W1xcXFwvXSl9aScsICR1cmwpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gY2xlYW51cCgpCnsKcmV0dXJuOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3M7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcSnNvblxKc29uRmlsZTsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKY2xhc3MgSGdCaXRidWNrZXREcml2ZXIgZXh0ZW5kcyBWY3NEcml2ZXIKewpwcm90ZWN0ZWQgJG93bmVyOwpwcm90ZWN0ZWQgJHJlcG9zaXRvcnk7CnByb3RlY3RlZCAkdGFnczsKcHJvdGVjdGVkICRicmFuY2hlczsKcHJvdGVjdGVkICRyb290SWRlbnRpZmllcjsKcHJvdGVjdGVkICRpbmZvQ2FjaGUgPSBhcnJheSgpOwoKCgoKcHVibGljIGZ1bmN0aW9uIGluaXRpYWxpemUoKQp7CnByZWdfbWF0Y2goJyNeaHR0cHM6Ly9iaXRidWNrZXRcLm9yZy8oW14vXSspLyhbXi9dKykvPyQjJywgJHRoaXMtPnVybCwgJG1hdGNoKTsKJHRoaXMtPm93bmVyID0gJG1hdGNoWzFdOwokdGhpcy0+cmVwb3NpdG9yeSA9ICRtYXRjaFsyXTsKJHRoaXMtPm9yaWdpblVybCA9ICdiaXRidWNrZXQub3JnJzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJvb3RJZGVudGlmaWVyKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnJvb3RJZGVudGlmaWVyKSB7CiRyZXNvdXJjZSA9ICR0aGlzLT5nZXRTY2hlbWUoKSAuICc6Ly9iaXRidWNrZXQub3JnL2FwaS8xLjAvcmVwb3NpdG9yaWVzLycuJHRoaXMtPm93bmVyLicvJy4kdGhpcy0+cmVwb3NpdG9yeS4nL3RhZ3MnOwokcmVwb0RhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpLCAkcmVzb3VyY2UpOwppZiAoYXJyYXkoKSA9PT0gJHJlcG9EYXRhIHx8ICFpc3NldCgkcmVwb0RhdGFbJ3RpcCddKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJHRoaXMtPnVybC4nIGRvZXMgbm90IGFwcGVhciB0byBiZSBhIG1lcmN1cmlhbCByZXBvc2l0b3J5LCB1c2UgJy4kdGhpcy0+dXJsLicuZ2l0IGlmIHRoaXMgaXMgYSBnaXQgYml0YnVja2V0IHJlcG9zaXRvcnknKTsKfQokdGhpcy0+cm9vdElkZW50aWZpZXIgPSAkcmVwb0RhdGFbJ3RpcCddWydyYXdfbm9kZSddOwp9CgpyZXR1cm4gJHRoaXMtPnJvb3RJZGVudGlmaWVyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VXJsKCkKewpyZXR1cm4gJHRoaXMtPnVybDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZSgkaWRlbnRpZmllcikKewpyZXR1cm4gYXJyYXkoJ3R5cGUnID0+ICdoZycsICd1cmwnID0+ICR0aGlzLT5nZXRVcmwoKSwgJ3JlZmVyZW5jZScgPT4gJGlkZW50aWZpZXIpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdCgkaWRlbnRpZmllcikKewokdXJsID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2JpdGJ1Y2tldC5vcmcvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5LicvZ2V0LycuJGlkZW50aWZpZXIuJy56aXAnOwoKcmV0dXJuIGFycmF5KCd0eXBlJyA9PiAnemlwJywgJ3VybCcgPT4gJHVybCwgJ3JlZmVyZW5jZScgPT4gJGlkZW50aWZpZXIsICdzaGFzdW0nID0+ICcnKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VySW5mb3JtYXRpb24oJGlkZW50aWZpZXIpCnsKaWYgKCFpc3NldCgkdGhpcy0+aW5mb0NhY2hlWyRpZGVudGlmaWVyXSkpIHsKJHJlc291cmNlID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2JpdGJ1Y2tldC5vcmcvYXBpLzEuMC9yZXBvc2l0b3JpZXMvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5Licvc3JjLycuJGlkZW50aWZpZXIuJy9jb21wb3Nlci5qc29uJzsKJHJlcG9EYXRhID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Z2V0Q29udGVudHMoJHJlc291cmNlKSwgJHJlc291cmNlKTsKCgogCiAKIAoKaWYgKCFhcnJheV9rZXlfZXhpc3RzKCdkYXRhJywgJHJlcG9EYXRhKSkgewpyZXR1cm47Cn0KCiRjb21wb3NlciA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHJlcG9EYXRhWydkYXRhJ10sICRyZXNvdXJjZSk7CgppZiAoIWlzc2V0KCRjb21wb3NlclsndGltZSddKSkgewokcmVzb3VyY2UgPSAkdGhpcy0+Z2V0U2NoZW1lKCkgLiAnOi8vYml0YnVja2V0Lm9yZy9hcGkvMS4wL3JlcG9zaXRvcmllcy8nLiR0aGlzLT5vd25lci4nLycuJHRoaXMtPnJlcG9zaXRvcnkuJy9jaGFuZ2VzZXRzLycuJGlkZW50aWZpZXI7CiRjaGFuZ2VzZXQgPSBKc29uRmlsZTo6cGFyc2VKc29uKCR0aGlzLT5nZXRDb250ZW50cygkcmVzb3VyY2UpLCAkcmVzb3VyY2UpOwokY29tcG9zZXJbJ3RpbWUnXSA9ICRjaGFuZ2VzZXRbJ3RpbWVzdGFtcCddOwp9CiR0aGlzLT5pbmZvQ2FjaGVbJGlkZW50aWZpZXJdID0gJGNvbXBvc2VyOwp9CgpyZXR1cm4gJHRoaXMtPmluZm9DYWNoZVskaWRlbnRpZmllcl07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUYWdzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnRhZ3MpIHsKJHJlc291cmNlID0gJHRoaXMtPmdldFNjaGVtZSgpIC4gJzovL2JpdGJ1Y2tldC5vcmcvYXBpLzEuMC9yZXBvc2l0b3JpZXMvJy4kdGhpcy0+b3duZXIuJy8nLiR0aGlzLT5yZXBvc2l0b3J5LicvdGFncyc7CiR0YWdzRGF0YSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJHRoaXMtPmdldENvbnRlbnRzKCRyZXNvdXJjZSksICRyZXNvdXJjZSk7CiR0aGlzLT50YWdzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHRhZ3NEYXRhIGFzICR0YWcgPT4gJGRhdGEpIHsKJHRoaXMtPnRhZ3NbJHRhZ10gPSAkZGF0YVsncmF3X25vZGUnXTsKfQp1bnNldCgkdGhpcy0+dGFnc1sndGlwJ10pOwp9CgpyZXR1cm4gJHRoaXMtPnRhZ3M7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hlcygpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5icmFuY2hlcykgewokcmVzb3VyY2UgPSAkdGhpcy0+Z2V0U2NoZW1lKCkgLiAnOi8vYml0YnVja2V0Lm9yZy9hcGkvMS4wL3JlcG9zaXRvcmllcy8nLiR0aGlzLT5vd25lci4nLycuJHRoaXMtPnJlcG9zaXRvcnkuJy9icmFuY2hlcyc7CiRicmFuY2hEYXRhID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Z2V0Q29udGVudHMoJHJlc291cmNlKSwgJHJlc291cmNlKTsKJHRoaXMtPmJyYW5jaGVzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGJyYW5jaERhdGEgYXMgJGJyYW5jaCA9PiAkZGF0YSkgewokdGhpcy0+YnJhbmNoZXNbJGJyYW5jaF0gPSAkZGF0YVsncmF3X25vZGUnXTsKfQp9CgpyZXR1cm4gJHRoaXMtPmJyYW5jaGVzOwp9CgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHN1cHBvcnRzKElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsICR1cmwsICRkZWVwID0gZmFsc2UpCnsKaWYgKCFwcmVnX21hdGNoKCcjXmh0dHBzOi8vYml0YnVja2V0XC5vcmcvKFteL10rKS8oW14vXSspLz8kIycsICR1cmwpKSB7CnJldHVybiBmYWxzZTsKfQoKaWYgKCFleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIHsKaWYgKCRpby0+aXNWZXJib3NlKCkpIHsKJGlvLT53cml0ZSgnU2tpcHBpbmcgQml0YnVja2V0IGhnIGRyaXZlciBmb3IgJy4kdXJsLicgYmVjYXVzZSB0aGUgT3BlblNTTCBQSFAgZXh0ZW5zaW9uIGlzIG1pc3NpbmcuJyk7Cn0KCnJldHVybiBmYWxzZTsKfQoKcmV0dXJuIHRydWU7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5OwoKCgoKCgoKCmNsYXNzIEluc3RhbGxlZEFycmF5UmVwb3NpdG9yeSBleHRlbmRzIFdyaXRhYmxlQXJyYXlSZXBvc2l0b3J5IGltcGxlbWVudHMgSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZQp7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCgoKCgoKY2xhc3MgUmVwb3NpdG9yeVNlY3VyaXR5RXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbgp7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCmludGVyZmFjZSBTdHJlYW1hYmxlUmVwb3NpdG9yeUludGVyZmFjZSBleHRlbmRzIFJlcG9zaXRvcnlJbnRlcmZhY2UKewoKCgoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRNaW5pbWFsUGFja2FnZXMoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkUGFja2FnZShhcnJheSAkZGF0YSk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGxvYWRBbGlhc1BhY2thZ2UoYXJyYXkgJGRhdGEsIFBhY2thZ2VJbnRlcmZhY2UgJGFsaWFzT2YpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7Cgp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxUcmFuc3BvcnRFeGNlcHRpb247CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFZjc1xWY3NEcml2ZXJJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyXEFycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcVmFsaWRhdGluZ0FycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcSW52YWxpZFBhY2thZ2VFeGNlcHRpb247CnVzZSBDb21wb3NlclxQYWNrYWdlXExvYWRlclxMb2FkZXJJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxDb25maWc7CgoKCgpjbGFzcyBWY3NSZXBvc2l0b3J5IGV4dGVuZHMgQXJyYXlSZXBvc2l0b3J5CnsKcHJvdGVjdGVkICR1cmw7CnByb3RlY3RlZCAkcGFja2FnZU5hbWU7CnByb3RlY3RlZCAkdmVyYm9zZTsKcHJvdGVjdGVkICRpbzsKcHJvdGVjdGVkICRjb25maWc7CnByb3RlY3RlZCAkdmVyc2lvblBhcnNlcjsKcHJvdGVjdGVkICR0eXBlOwpwcm90ZWN0ZWQgJGxvYWRlcjsKcHJvdGVjdGVkICRyZXBvQ29uZmlnOwpwcm90ZWN0ZWQgJGJyYW5jaEVycm9yT2NjdXJyZWQgPSBmYWxzZTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVwb0NvbmZpZywgSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgRXZlbnREaXNwYXRjaGVyICRkaXNwYXRjaGVyID0gbnVsbCwgYXJyYXkgJGRyaXZlcnMgPSBudWxsKQp7CiR0aGlzLT5kcml2ZXJzID0gJGRyaXZlcnMgPzogYXJyYXkoCidnaXRodWInID0+ICdDb21wb3NlclxSZXBvc2l0b3J5XFZjc1xHaXRIdWJEcml2ZXInLAonZ2l0LWJpdGJ1Y2tldCcgPT4gJ0NvbXBvc2VyXFJlcG9zaXRvcnlcVmNzXEdpdEJpdGJ1Y2tldERyaXZlcicsCidnaXQnID0+ICdDb21wb3NlclxSZXBvc2l0b3J5XFZjc1xHaXREcml2ZXInLAonaGctYml0YnVja2V0JyA9PiAnQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3NcSGdCaXRidWNrZXREcml2ZXInLAonaGcnID0+ICdDb21wb3NlclxSZXBvc2l0b3J5XFZjc1xIZ0RyaXZlcicsCidwZXJmb3JjZScgPT4gJ0NvbXBvc2VyXFJlcG9zaXRvcnlcVmNzXFBlcmZvcmNlRHJpdmVyJywKCiAnc3ZuJyA9PiAnQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3NcU3ZuRHJpdmVyJywKKTsKCiR0aGlzLT51cmwgPSAkcmVwb0NvbmZpZ1sndXJsJ107CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPnR5cGUgPSBpc3NldCgkcmVwb0NvbmZpZ1sndHlwZSddKSA/ICRyZXBvQ29uZmlnWyd0eXBlJ10gOiAndmNzJzsKJHRoaXMtPnZlcmJvc2UgPSAkaW8tPmlzVmVyYm9zZSgpOwokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKJHRoaXMtPnJlcG9Db25maWcgPSAkcmVwb0NvbmZpZzsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFJlcG9Db25maWcoKQp7CnJldHVybiAkdGhpcy0+cmVwb0NvbmZpZzsKfQoKcHVibGljIGZ1bmN0aW9uIHNldExvYWRlcihMb2FkZXJJbnRlcmZhY2UgJGxvYWRlcikKewokdGhpcy0+bG9hZGVyID0gJGxvYWRlcjsKfQoKcHVibGljIGZ1bmN0aW9uIGdldERyaXZlcigpCnsKaWYgKGlzc2V0KCR0aGlzLT5kcml2ZXJzWyR0aGlzLT50eXBlXSkpIHsKJGNsYXNzID0gJHRoaXMtPmRyaXZlcnNbJHRoaXMtPnR5cGVdOwokZHJpdmVyID0gbmV3ICRjbGFzcygkdGhpcy0+cmVwb0NvbmZpZywgJHRoaXMtPmlvLCAkdGhpcy0+Y29uZmlnKTsKJGRyaXZlci0+aW5pdGlhbGl6ZSgpOwoKcmV0dXJuICRkcml2ZXI7Cn0KCmZvcmVhY2ggKCR0aGlzLT5kcml2ZXJzIGFzICRkcml2ZXIpIHsKaWYgKCRkcml2ZXI6OnN1cHBvcnRzKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZywgJHRoaXMtPnVybCkpIHsKJGRyaXZlciA9IG5ldyAkZHJpdmVyKCR0aGlzLT5yZXBvQ29uZmlnLCAkdGhpcy0+aW8sICR0aGlzLT5jb25maWcpOwokZHJpdmVyLT5pbml0aWFsaXplKCk7CgpyZXR1cm4gJGRyaXZlcjsKfQp9Cgpmb3JlYWNoICgkdGhpcy0+ZHJpdmVycyBhcyAkZHJpdmVyKSB7CmlmICgkZHJpdmVyOjpzdXBwb3J0cygkdGhpcy0+aW8sICR0aGlzLT5jb25maWcsICR0aGlzLT51cmwsIHRydWUpKSB7CiRkcml2ZXIgPSBuZXcgJGRyaXZlcigkdGhpcy0+cmVwb0NvbmZpZywgJHRoaXMtPmlvLCAkdGhpcy0+Y29uZmlnKTsKJGRyaXZlci0+aW5pdGlhbGl6ZSgpOwoKcmV0dXJuICRkcml2ZXI7Cn0KfQp9CgpwdWJsaWMgZnVuY3Rpb24gaGFkSW52YWxpZEJyYW5jaGVzKCkKewpyZXR1cm4gJHRoaXMtPmJyYW5jaEVycm9yT2NjdXJyZWQ7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBpbml0aWFsaXplKCkKewpwYXJlbnQ6OmluaXRpYWxpemUoKTsKCiR2ZXJib3NlID0gJHRoaXMtPnZlcmJvc2U7CgokZHJpdmVyID0gJHRoaXMtPmdldERyaXZlcigpOwppZiAoISRkcml2ZXIpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ05vIGRyaXZlciBmb3VuZCB0byBoYW5kbGUgVkNTIHJlcG9zaXRvcnkgJy4kdGhpcy0+dXJsKTsKfQoKJHRoaXMtPnZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcjsKaWYgKCEkdGhpcy0+bG9hZGVyKSB7CiR0aGlzLT5sb2FkZXIgPSBuZXcgQXJyYXlMb2FkZXIoJHRoaXMtPnZlcnNpb25QYXJzZXIpOwp9Cgp0cnkgewppZiAoJGRyaXZlci0+aGFzQ29tcG9zZXJGaWxlKCRkcml2ZXItPmdldFJvb3RJZGVudGlmaWVyKCkpKSB7CiRkYXRhID0gJGRyaXZlci0+Z2V0Q29tcG9zZXJJbmZvcm1hdGlvbigkZHJpdmVyLT5nZXRSb290SWRlbnRpZmllcigpKTsKJHRoaXMtPnBhY2thZ2VOYW1lID0gIWVtcHR5KCRkYXRhWyduYW1lJ10pID8gJGRhdGFbJ25hbWUnXSA6IG51bGw7Cn0KfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnPGVycm9yPlNraXBwZWQgcGFyc2luZyAnLiRkcml2ZXItPmdldFJvb3RJZGVudGlmaWVyKCkuJywgJy4kZS0+Z2V0TWVzc2FnZSgpLic8L2Vycm9yPicpOwp9Cn0KCmZvcmVhY2ggKCRkcml2ZXItPmdldFRhZ3MoKSBhcyAkdGFnID0+ICRpZGVudGlmaWVyKSB7CiRtc2cgPSAnUmVhZGluZyBjb21wb3Nlci5qc29uIG9mIDxpbmZvPicgLiAoJHRoaXMtPnBhY2thZ2VOYW1lID86ICR0aGlzLT51cmwpIC4gJzwvaW5mbz4gKDxjb21tZW50PicgLiAkdGFnIC4gJzwvY29tbWVudD4pJzsKaWYgKCR2ZXJib3NlKSB7CiR0aGlzLT5pby0+d3JpdGUoJG1zZyk7Cn0gZWxzZSB7CiR0aGlzLT5pby0+b3ZlcndyaXRlKCRtc2csIGZhbHNlKTsKfQoKCiAkdGFnID0gc3RyX3JlcGxhY2UoJ3JlbGVhc2UtJywgJycsICR0YWcpOwoKaWYgKCEkcGFyc2VkVGFnID0gJHRoaXMtPnZhbGlkYXRlVGFnKCR0YWcpKSB7CmlmICgkdmVyYm9zZSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5Ta2lwcGVkIHRhZyAnLiR0YWcuJywgaW52YWxpZCB0YWcgbmFtZTwvd2FybmluZz4nKTsKfQpjb250aW51ZTsKfQoKdHJ5IHsKaWYgKCEkZGF0YSA9ICRkcml2ZXItPmdldENvbXBvc2VySW5mb3JtYXRpb24oJGlkZW50aWZpZXIpKSB7CmlmICgkdmVyYm9zZSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5Ta2lwcGVkIHRhZyAnLiR0YWcuJywgbm8gY29tcG9zZXIgZmlsZTwvd2FybmluZz4nKTsKfQpjb250aW51ZTsKfQoKCiBpZiAoaXNzZXQoJGRhdGFbJ3ZlcnNpb24nXSkpIHsKJGRhdGFbJ3ZlcnNpb25fbm9ybWFsaXplZCddID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkZGF0YVsndmVyc2lvbiddKTsKfSBlbHNlIHsKCiAkZGF0YVsndmVyc2lvbiddID0gJHRhZzsKJGRhdGFbJ3ZlcnNpb25fbm9ybWFsaXplZCddID0gJHBhcnNlZFRhZzsKfQoKCiAkZGF0YVsndmVyc2lvbiddID0gcHJlZ19yZXBsYWNlKCd7Wy4tXT9kZXYkfWknLCAnJywgJGRhdGFbJ3ZlcnNpb24nXSk7CiRkYXRhWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXSA9IHByZWdfcmVwbGFjZSgneyheZGV2LXxbLi1dP2RldiQpfWknLCAnJywgJGRhdGFbJ3ZlcnNpb25fbm9ybWFsaXplZCddKTsKCgogaWYgKCRkYXRhWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXSAhPT0gJHBhcnNlZFRhZykgewppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnPHdhcm5pbmc+U2tpcHBlZCB0YWcgJy4kdGFnLicsIHRhZyAoJy4kcGFyc2VkVGFnLicpIGRvZXMgbm90IG1hdGNoIHZlcnNpb24gKCcuJGRhdGFbJ3ZlcnNpb25fbm9ybWFsaXplZCddLicpIGluIGNvbXBvc2VyLmpzb248L3dhcm5pbmc+Jyk7Cn0KY29udGludWU7Cn0KCmlmICgkdmVyYm9zZSkgewokdGhpcy0+aW8tPndyaXRlKCdJbXBvcnRpbmcgdGFnICcuJHRhZy4nICgnLiRkYXRhWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXS4nKScpOwp9CgokdGhpcy0+YWRkUGFja2FnZSgkdGhpcy0+bG9hZGVyLT5sb2FkKCR0aGlzLT5wcmVQcm9jZXNzKCRkcml2ZXIsICRkYXRhLCAkaWRlbnRpZmllcikpKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnPHdhcm5pbmc+U2tpcHBlZCB0YWcgJy4kdGFnLicsICcuKCRlIGluc3RhbmNlb2YgVHJhbnNwb3J0RXhjZXB0aW9uID8gJ25vIGNvbXBvc2VyIGZpbGUgd2FzIGZvdW5kJyA6ICRlLT5nZXRNZXNzYWdlKCkpLic8L3dhcm5pbmc+Jyk7Cn0KY29udGludWU7Cn0KfQoKaWYgKCEkdmVyYm9zZSkgewokdGhpcy0+aW8tPm92ZXJ3cml0ZSgnJywgZmFsc2UpOwp9Cgpmb3JlYWNoICgkZHJpdmVyLT5nZXRCcmFuY2hlcygpIGFzICRicmFuY2ggPT4gJGlkZW50aWZpZXIpIHsKJG1zZyA9ICdSZWFkaW5nIGNvbXBvc2VyLmpzb24gb2YgPGluZm8+JyAuICgkdGhpcy0+cGFja2FnZU5hbWUgPzogJHRoaXMtPnVybCkgLiAnPC9pbmZvPiAoPGNvbW1lbnQ+JyAuICRicmFuY2ggLiAnPC9jb21tZW50PiknOwppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgkbXNnKTsKfSBlbHNlIHsKJHRoaXMtPmlvLT5vdmVyd3JpdGUoJG1zZywgZmFsc2UpOwp9CgppZiAoISRwYXJzZWRCcmFuY2ggPSAkdGhpcy0+dmFsaWRhdGVCcmFuY2goJGJyYW5jaCkpIHsKaWYgKCR2ZXJib3NlKSB7CiR0aGlzLT5pby0+d3JpdGUoJzx3YXJuaW5nPlNraXBwZWQgYnJhbmNoICcuJGJyYW5jaC4nLCBpbnZhbGlkIG5hbWU8L3dhcm5pbmc+Jyk7Cn0KY29udGludWU7Cn0KCnRyeSB7CmlmICghJGRhdGEgPSAkZHJpdmVyLT5nZXRDb21wb3NlckluZm9ybWF0aW9uKCRpZGVudGlmaWVyKSkgewppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnPHdhcm5pbmc+U2tpcHBlZCBicmFuY2ggJy4kYnJhbmNoLicsIG5vIGNvbXBvc2VyIGZpbGU8L3dhcm5pbmc+Jyk7Cn0KY29udGludWU7Cn0KCgogJGRhdGFbJ3ZlcnNpb24nXSA9ICRicmFuY2g7CiRkYXRhWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXSA9ICRwYXJzZWRCcmFuY2g7CgoKIGlmICgnZGV2LScgPT09IHN1YnN0cigkcGFyc2VkQnJhbmNoLCAwLCA0KSB8fCAnOTk5OTk5OS1kZXYnID09PSAkcGFyc2VkQnJhbmNoKSB7CiRkYXRhWyd2ZXJzaW9uJ10gPSAnZGV2LScgLiAkZGF0YVsndmVyc2lvbiddOwp9IGVsc2UgewokZGF0YVsndmVyc2lvbiddID0gcHJlZ19yZXBsYWNlKCd7KFwuOXs3fSkrfScsICcueCcsICRwYXJzZWRCcmFuY2gpOwp9CgppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnSW1wb3J0aW5nIGJyYW5jaCAnLiRicmFuY2guJyAoJy4kZGF0YVsndmVyc2lvbiddLicpJyk7Cn0KCiRwYWNrYWdlRGF0YSA9ICR0aGlzLT5wcmVQcm9jZXNzKCRkcml2ZXIsICRkYXRhLCAkaWRlbnRpZmllcik7CiRwYWNrYWdlID0gJHRoaXMtPmxvYWRlci0+bG9hZCgkcGFja2FnZURhdGEpOwppZiAoJHRoaXMtPmxvYWRlciBpbnN0YW5jZW9mIFZhbGlkYXRpbmdBcnJheUxvYWRlciAmJiAkdGhpcy0+bG9hZGVyLT5nZXRXYXJuaW5ncygpKSB7CnRocm93IG5ldyBJbnZhbGlkUGFja2FnZUV4Y2VwdGlvbigkdGhpcy0+bG9hZGVyLT5nZXRFcnJvcnMoKSwgJHRoaXMtPmxvYWRlci0+Z2V0V2FybmluZ3MoKSwgJHBhY2thZ2VEYXRhKTsKfQokdGhpcy0+YWRkUGFja2FnZSgkcGFja2FnZSk7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewppZiAoJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnPHdhcm5pbmc+U2tpcHBlZCBicmFuY2ggJy4kYnJhbmNoLicsIG5vIGNvbXBvc2VyIGZpbGUgd2FzIGZvdW5kPC93YXJuaW5nPicpOwp9CmNvbnRpbnVlOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CmlmICghJHZlcmJvc2UpIHsKJHRoaXMtPmlvLT53cml0ZSgnJyk7Cn0KJHRoaXMtPmJyYW5jaEVycm9yT2NjdXJyZWQgPSB0cnVlOwokdGhpcy0+aW8tPndyaXRlKCc8ZXJyb3I+U2tpcHBlZCBicmFuY2ggJy4kYnJhbmNoLicsICcuJGUtPmdldE1lc3NhZ2UoKS4nPC9lcnJvcj4nKTsKJHRoaXMtPmlvLT53cml0ZSgnJyk7CmNvbnRpbnVlOwp9Cn0KJGRyaXZlci0+Y2xlYW51cCgpOwoKaWYgKCEkdmVyYm9zZSkgewokdGhpcy0+aW8tPm92ZXJ3cml0ZSgnJywgZmFsc2UpOwp9CgppZiAoISR0aGlzLT5nZXRQYWNrYWdlcygpKSB7CnRocm93IG5ldyBJbnZhbGlkUmVwb3NpdG9yeUV4Y2VwdGlvbignTm8gdmFsaWQgY29tcG9zZXIuanNvbiB3YXMgZm91bmQgaW4gYW55IGJyYW5jaCBvciB0YWcgb2YgJy4kdGhpcy0+dXJsLicsIGNvdWxkIG5vdCBsb2FkIGEgcGFja2FnZSBmcm9tIGl0LicpOwp9Cn0KCnByaXZhdGUgZnVuY3Rpb24gcHJlUHJvY2VzcyhWY3NEcml2ZXJJbnRlcmZhY2UgJGRyaXZlciwgYXJyYXkgJGRhdGEsICRpZGVudGlmaWVyKQp7CgogJGRhdGFbJ25hbWUnXSA9ICR0aGlzLT5wYWNrYWdlTmFtZSA/OiAkZGF0YVsnbmFtZSddOwoKaWYgKCFpc3NldCgkZGF0YVsnZGlzdCddKSkgewokZGF0YVsnZGlzdCddID0gJGRyaXZlci0+Z2V0RGlzdCgkaWRlbnRpZmllcik7Cn0KaWYgKCFpc3NldCgkZGF0YVsnc291cmNlJ10pKSB7CiRkYXRhWydzb3VyY2UnXSA9ICRkcml2ZXItPmdldFNvdXJjZSgkaWRlbnRpZmllcik7Cn0KCnJldHVybiAkZGF0YTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUJyYW5jaCgkYnJhbmNoKQp7CnRyeSB7CnJldHVybiAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplQnJhbmNoKCRicmFuY2gpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7Cn0KCnJldHVybiBmYWxzZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZVRhZygkdmVyc2lvbikKewp0cnkgewpyZXR1cm4gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkdmVyc2lvbik7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKfQoKcmV0dXJuIGZhbHNlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxQYWNrYWdlXENvbXBsZXRlUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgQ29tcG9zZXJcUGx1Z2luXFBsdWdpbkludGVyZmFjZTsKCgoKCmNsYXNzIFBsYXRmb3JtUmVwb3NpdG9yeSBleHRlbmRzIEFycmF5UmVwb3NpdG9yeQp7CmNvbnN0IFBMQVRGT1JNX1BBQ0tBR0VfUkVHRVggPSAne14oPzpwaHAoPzotNjRiaXQpP3xoaHZtfCg/OmV4dHxsaWIpLVteL10rKSR9aSc7Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKcGFyZW50Ojppbml0aWFsaXplKCk7CgokdmVyc2lvblBhcnNlciA9IG5ldyBWZXJzaW9uUGFyc2VyKCk7CgokcHJldHR5VmVyc2lvbiA9IFBsdWdpbkludGVyZmFjZTo6UExVR0lOX0FQSV9WRVJTSU9OOwokdmVyc2lvbiA9ICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJHByZXR0eVZlcnNpb24pOwokY29tcG9zZXJQbHVnaW5BcGkgPSBuZXcgQ29tcGxldGVQYWNrYWdlKCdjb21wb3Nlci1wbHVnaW4tYXBpJywgJHZlcnNpb24sICRwcmV0dHlWZXJzaW9uKTsKJGNvbXBvc2VyUGx1Z2luQXBpLT5zZXREZXNjcmlwdGlvbignVGhlIENvbXBvc2VyIFBsdWdpbiBBUEknKTsKcGFyZW50OjphZGRQYWNrYWdlKCRjb21wb3NlclBsdWdpbkFwaSk7Cgp0cnkgewokcHJldHR5VmVyc2lvbiA9IFBIUF9WRVJTSU9OOwokdmVyc2lvbiA9ICR2ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJHByZXR0eVZlcnNpb24pOwp9IGNhdGNoIChcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uICRlKSB7CiRwcmV0dHlWZXJzaW9uID0gcHJlZ19yZXBsYWNlKCcjXihbXn4rLV0rKS4qJCMnLCAnJDEnLCBQSFBfVkVSU0lPTik7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0KCiRwaHAgPSBuZXcgQ29tcGxldGVQYWNrYWdlKCdwaHAnLCAkdmVyc2lvbiwgJHByZXR0eVZlcnNpb24pOwokcGhwLT5zZXREZXNjcmlwdGlvbignVGhlIFBIUCBpbnRlcnByZXRlcicpOwpwYXJlbnQ6OmFkZFBhY2thZ2UoJHBocCk7CgppZiAoUEhQX0lOVF9TSVpFID09PSA4KSB7CiRwaHA2NCA9IG5ldyBDb21wbGV0ZVBhY2thZ2UoJ3BocC02NGJpdCcsICR2ZXJzaW9uLCAkcHJldHR5VmVyc2lvbik7CiRwaHA2NC0+c2V0RGVzY3JpcHRpb24oJ1RoZSBQSFAgaW50ZXJwcmV0ZXIgKDY0Yml0KScpOwpwYXJlbnQ6OmFkZFBhY2thZ2UoJHBocDY0KTsKfQoKJGxvYWRlZEV4dGVuc2lvbnMgPSBnZXRfbG9hZGVkX2V4dGVuc2lvbnMoKTsKCgogZm9yZWFjaCAoJGxvYWRlZEV4dGVuc2lvbnMgYXMgJG5hbWUpIHsKaWYgKGluX2FycmF5KCRuYW1lLCBhcnJheSgnc3RhbmRhcmQnLCAnQ29yZScpKSkgewpjb250aW51ZTsKfQoKJHJlZmxFeHQgPSBuZXcgXFJlZmxlY3Rpb25FeHRlbnNpb24oJG5hbWUpOwp0cnkgewokcHJldHR5VmVyc2lvbiA9ICRyZWZsRXh0LT5nZXRWZXJzaW9uKCk7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0gY2F0Y2ggKFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKJHByZXR0eVZlcnNpb24gPSAnMCc7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0KCiRwYWNrYWdlTmFtZSA9ICR0aGlzLT5idWlsZFBhY2thZ2VOYW1lKCRuYW1lKTsKJGV4dCA9IG5ldyBDb21wbGV0ZVBhY2thZ2UoJHBhY2thZ2VOYW1lLCAkdmVyc2lvbiwgJHByZXR0eVZlcnNpb24pOwokZXh0LT5zZXREZXNjcmlwdGlvbignVGhlICcuJG5hbWUuJyBQSFAgZXh0ZW5zaW9uJyk7CnBhcmVudDo6YWRkUGFja2FnZSgkZXh0KTsKfQoKCiAKIAogZm9yZWFjaCAoJGxvYWRlZEV4dGVuc2lvbnMgYXMgJG5hbWUpIHsKJHByZXR0eVZlcnNpb24gPSBudWxsOwpzd2l0Y2ggKCRuYW1lKSB7CmNhc2UgJ2N1cmwnOgokY3VybFZlcnNpb24gPSBjdXJsX3ZlcnNpb24oKTsKJHByZXR0eVZlcnNpb24gPSAkY3VybFZlcnNpb25bJ3ZlcnNpb24nXTsKYnJlYWs7CgpjYXNlICdpY29udic6CiRwcmV0dHlWZXJzaW9uID0gSUNPTlZfVkVSU0lPTjsKYnJlYWs7CgpjYXNlICdpbnRsJzoKJG5hbWUgPSAnSUNVJzsKaWYgKGRlZmluZWQoJ0lOVExfSUNVX1ZFUlNJT04nKSkgewokcHJldHR5VmVyc2lvbiA9IElOVExfSUNVX1ZFUlNJT047Cn0gZWxzZSB7CiRyZWZsZWN0b3IgPSBuZXcgXFJlZmxlY3Rpb25FeHRlbnNpb24oJ2ludGwnKTsKCm9iX3N0YXJ0KCk7CiRyZWZsZWN0b3ItPmluZm8oKTsKJG91dHB1dCA9IG9iX2dldF9jbGVhbigpOwoKcHJlZ19tYXRjaCgnL15JQ1UgdmVyc2lvbiA9PiAoLiopJC9tJywgJG91dHB1dCwgJG1hdGNoZXMpOwokcHJldHR5VmVyc2lvbiA9ICRtYXRjaGVzWzFdOwp9CgpicmVhazsKCmNhc2UgJ2xpYnhtbCc6CiRwcmV0dHlWZXJzaW9uID0gTElCWE1MX0RPVFRFRF9WRVJTSU9OOwpicmVhazsKCmNhc2UgJ29wZW5zc2wnOgokcHJldHR5VmVyc2lvbiA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygne14oPzpPcGVuU1NMXHMqKT8oWzAtOS5dKykoW2Etel0/KS4qfScsIGZ1bmN0aW9uICgkbWF0Y2gpIHsKcmV0dXJuICRtYXRjaFsxXSAuIChlbXB0eSgkbWF0Y2hbMl0pID8gJycgOiAnLicuKG9yZCgkbWF0Y2hbMl0pIC0gOTYpKTsKfSwgT1BFTlNTTF9WRVJTSU9OX1RFWFQpOwpicmVhazsKCmNhc2UgJ3BjcmUnOgokcHJldHR5VmVyc2lvbiA9IHByZWdfcmVwbGFjZSgne14oXFMrKS4qfScsICckMScsIFBDUkVfVkVSU0lPTik7CmJyZWFrOwoKY2FzZSAndXVpZCc6CiRwcmV0dHlWZXJzaW9uID0gcGhwdmVyc2lvbigndXVpZCcpOwpicmVhazsKCmNhc2UgJ3hzbCc6CiRwcmV0dHlWZXJzaW9uID0gTElCWFNMVF9ET1RURURfVkVSU0lPTjsKYnJlYWs7CgpkZWZhdWx0OgoKIGNvbnRpbnVlIDI7Cn0KCnRyeSB7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0gY2F0Y2ggKFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKY29udGludWU7Cn0KCiRsaWIgPSBuZXcgQ29tcGxldGVQYWNrYWdlKCdsaWItJy4kbmFtZSwgJHZlcnNpb24sICRwcmV0dHlWZXJzaW9uKTsKJGxpYi0+c2V0RGVzY3JpcHRpb24oJ1RoZSAnLiRuYW1lLicgUEhQIGxpYnJhcnknKTsKcGFyZW50OjphZGRQYWNrYWdlKCRsaWIpOwp9CgppZiAoZGVmaW5lZCgnSEhWTV9WRVJTSU9OJykpIHsKdHJ5IHsKJHByZXR0eVZlcnNpb24gPSBISFZNX1ZFUlNJT047CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0gY2F0Y2ggKFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24gJGUpIHsKJHByZXR0eVZlcnNpb24gPSBwcmVnX3JlcGxhY2UoJyNeKFtefistXSspLiokIycsICckMScsIEhIVk1fVkVSU0lPTik7CiR2ZXJzaW9uID0gJHZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkcHJldHR5VmVyc2lvbik7Cn0KCiRoaHZtID0gbmV3IENvbXBsZXRlUGFja2FnZSgnaGh2bScsICR2ZXJzaW9uLCAkcHJldHR5VmVyc2lvbik7CiRoaHZtLT5zZXREZXNjcmlwdGlvbignVGhlIEhIVk0gUnVudGltZSAoNjRiaXQpJyk7CnBhcmVudDo6YWRkUGFja2FnZSgkaGh2bSk7Cn0KfQoKCnByaXZhdGUgZnVuY3Rpb24gYnVpbGRQYWNrYWdlTmFtZSgkbmFtZSkKewpyZXR1cm4gJ2V4dC0nIC4gc3RyX3JlcGxhY2UoJyAnLCAnLScsICRuYW1lKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7CgoKCgoKCmNsYXNzIEluc3RhbGxlZEZpbGVzeXN0ZW1SZXBvc2l0b3J5IGV4dGVuZHMgRmlsZXN5c3RlbVJlcG9zaXRvcnkgaW1wbGVtZW50cyBJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlCnsKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5OwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKY2xhc3MgQ29tcG9zaXRlUmVwb3NpdG9yeSBpbXBsZW1lbnRzIFJlcG9zaXRvcnlJbnRlcmZhY2UKewoKCgoKcHJpdmF0ZSAkcmVwb3NpdG9yaWVzOwoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVwb3NpdG9yaWVzKQp7CiR0aGlzLT5yZXBvc2l0b3JpZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcmVwb3NpdG9yaWVzIGFzICRyZXBvKSB7CiR0aGlzLT5hZGRSZXBvc2l0b3J5KCRyZXBvKTsKfQp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXBvc2l0b3JpZXMoKQp7CnJldHVybiAkdGhpcy0+cmVwb3NpdG9yaWVzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CmZvcmVhY2ggKCR0aGlzLT5yZXBvc2l0b3JpZXMgYXMgJHJlcG9zaXRvcnkpIHsKCmlmICgkcmVwb3NpdG9yeS0+aGFzUGFja2FnZSgkcGFja2FnZSkpIHsKcmV0dXJuIHRydWU7Cn0KfQoKcmV0dXJuIGZhbHNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZFBhY2thZ2UoJG5hbWUsICR2ZXJzaW9uKQp7CmZvcmVhY2ggKCR0aGlzLT5yZXBvc2l0b3JpZXMgYXMgJHJlcG9zaXRvcnkpIHsKCiRwYWNrYWdlID0gJHJlcG9zaXRvcnktPmZpbmRQYWNrYWdlKCRuYW1lLCAkdmVyc2lvbik7CmlmIChudWxsICE9PSAkcGFja2FnZSkgewpyZXR1cm4gJHBhY2thZ2U7Cn0KfQoKcmV0dXJuIG51bGw7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBmaW5kUGFja2FnZXMoJG5hbWUsICR2ZXJzaW9uID0gbnVsbCkKewokcGFja2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+cmVwb3NpdG9yaWVzIGFzICRyZXBvc2l0b3J5KSB7CgokcGFja2FnZXNbXSA9ICRyZXBvc2l0b3J5LT5maW5kUGFja2FnZXMoJG5hbWUsICR2ZXJzaW9uKTsKfQoKcmV0dXJuICRwYWNrYWdlcyA/IGNhbGxfdXNlcl9mdW5jX2FycmF5KCdhcnJheV9tZXJnZScsICRwYWNrYWdlcykgOiBhcnJheSgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2VhcmNoKCRxdWVyeSwgJG1vZGUgPSAwKQp7CiRtYXRjaGVzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHRoaXMtPnJlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeSkgewoKJG1hdGNoZXNbXSA9ICRyZXBvc2l0b3J5LT5zZWFyY2goJHF1ZXJ5LCAkbW9kZSk7Cn0KCnJldHVybiAkbWF0Y2hlcyA/IGNhbGxfdXNlcl9mdW5jX2FycmF5KCdhcnJheV9tZXJnZScsICRtYXRjaGVzKSA6IGFycmF5KCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBmaWx0ZXJQYWNrYWdlcygkY2FsbGJhY2ssICRjbGFzcyA9ICdDb21wb3NlclxQYWNrYWdlXFBhY2thZ2UnKQp7CmZvcmVhY2ggKCR0aGlzLT5yZXBvc2l0b3JpZXMgYXMgJHJlcG9zaXRvcnkpIHsKaWYgKGZhbHNlID09PSAkcmVwb3NpdG9yeS0+ZmlsdGVyUGFja2FnZXMoJGNhbGxiYWNrLCAkY2xhc3MpKSB7CnJldHVybiBmYWxzZTsKfQp9CgpyZXR1cm4gdHJ1ZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhY2thZ2VzKCkKewokcGFja2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+cmVwb3NpdG9yaWVzIGFzICRyZXBvc2l0b3J5KSB7CgokcGFja2FnZXNbXSA9ICRyZXBvc2l0b3J5LT5nZXRQYWNrYWdlcygpOwp9CgpyZXR1cm4gJHBhY2thZ2VzID8gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHBhY2thZ2VzKSA6IGFycmF5KCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmVQYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKZm9yZWFjaCAoJHRoaXMtPnJlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeSkgewoKJHJlcG9zaXRvcnktPnJlbW92ZVBhY2thZ2UoJHBhY2thZ2UpOwp9Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBjb3VudCgpCnsKJHRvdGFsID0gMDsKZm9yZWFjaCAoJHRoaXMtPnJlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeSkgewoKJHRvdGFsICs9ICRyZXBvc2l0b3J5LT5jb3VudCgpOwp9CgpyZXR1cm4gJHRvdGFsOwp9CgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFJlcG9zaXRvcnkoUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwb3NpdG9yeSkKewppZiAoJHJlcG9zaXRvcnkgaW5zdGFuY2VvZiBzZWxmKSB7CmZvcmVhY2ggKCRyZXBvc2l0b3J5LT5nZXRSZXBvc2l0b3JpZXMoKSBhcyAkcmVwbykgewokdGhpcy0+YWRkUmVwb3NpdG9yeSgkcmVwbyk7Cn0KfSBlbHNlIHsKJHRoaXMtPnJlcG9zaXRvcmllc1tdID0gJHJlcG9zaXRvcnk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7CgoKCgoKCgoKaW50ZXJmYWNlIEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgZXh0ZW5kcyBXcml0YWJsZVJlcG9zaXRvcnlJbnRlcmZhY2UKewp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnk7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcQXJyYXlMb2FkZXI7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXFBvb2w7CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcQ2FjaGU7CnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXFBsdWdpblxQbHVnaW5FdmVudHM7CnVzZSBDb21wb3NlclxQbHVnaW5cUHJlRmlsZURvd25sb2FkRXZlbnQ7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwoKCgoKY2xhc3MgQ29tcG9zZXJSZXBvc2l0b3J5IGV4dGVuZHMgQXJyYXlSZXBvc2l0b3J5IGltcGxlbWVudHMgU3RyZWFtYWJsZVJlcG9zaXRvcnlJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJGNvbmZpZzsKcHJvdGVjdGVkICRvcHRpb25zOwpwcm90ZWN0ZWQgJHVybDsKcHJvdGVjdGVkICRiYXNlVXJsOwpwcm90ZWN0ZWQgJGlvOwpwcm90ZWN0ZWQgJHJmczsKcHJvdGVjdGVkICRjYWNoZTsKcHJvdGVjdGVkICRub3RpZnlVcmw7CnByb3RlY3RlZCAkc2VhcmNoVXJsOwpwcm90ZWN0ZWQgJGhhc1Byb3ZpZGVycyA9IGZhbHNlOwpwcm90ZWN0ZWQgJHByb3ZpZGVyc1VybDsKcHJvdGVjdGVkICRwcm92aWRlckxpc3Rpbmc7CnByb3RlY3RlZCAkcHJvdmlkZXJzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRwcm92aWRlcnNCeVVpZCA9IGFycmF5KCk7CnByb3RlY3RlZCAkbG9hZGVyOwpwcm90ZWN0ZWQgJHJvb3RBbGlhc2VzOwpwcm90ZWN0ZWQgJGFsbG93U3NsRG93bmdyYWRlID0gZmFsc2U7CnByb3RlY3RlZCAkZXZlbnREaXNwYXRjaGVyOwpwcml2YXRlICRyYXdEYXRhOwpwcml2YXRlICRtaW5pbWFsUGFja2FnZXM7CnByaXZhdGUgJGRlZ3JhZGVkTW9kZSA9IGZhbHNlOwpwcml2YXRlICRyb290RGF0YTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcmVwb0NvbmZpZywgSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgRXZlbnREaXNwYXRjaGVyICRldmVudERpc3BhdGNoZXIgPSBudWxsKQp7CmlmICghcHJlZ19tYXRjaCgne15bXHcuXStcPz86Ly99JywgJHJlcG9Db25maWdbJ3VybCddKSkgewoKICRyZXBvQ29uZmlnWyd1cmwnXSA9ICdodHRwOi8vJy4kcmVwb0NvbmZpZ1sndXJsJ107Cn0KJHJlcG9Db25maWdbJ3VybCddID0gcnRyaW0oJHJlcG9Db25maWdbJ3VybCddLCAnLycpOwoKaWYgKCdodHRwcz8nID09PSBzdWJzdHIoJHJlcG9Db25maWdbJ3VybCddLCAwLCA2KSkgewokcmVwb0NvbmZpZ1sndXJsJ10gPSAoZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpID8gJ2h0dHBzJyA6ICdodHRwJykgLiBzdWJzdHIoJHJlcG9Db25maWdbJ3VybCddLCA2KTsKfQoKJHVybEJpdHMgPSBwYXJzZV91cmwoJHJlcG9Db25maWdbJ3VybCddKTsKaWYgKCR1cmxCaXRzID09PSBmYWxzZSB8fCBlbXB0eSgkdXJsQml0c1snc2NoZW1lJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIHVybCBnaXZlbiBmb3IgQ29tcG9zZXIgcmVwb3NpdG9yeTogJy4kcmVwb0NvbmZpZ1sndXJsJ10pOwp9CgppZiAoIWlzc2V0KCRyZXBvQ29uZmlnWydvcHRpb25zJ10pKSB7CiRyZXBvQ29uZmlnWydvcHRpb25zJ10gPSBhcnJheSgpOwp9CmlmIChpc3NldCgkcmVwb0NvbmZpZ1snYWxsb3dfc3NsX2Rvd25ncmFkZSddKSAmJiB0cnVlID09PSAkcmVwb0NvbmZpZ1snYWxsb3dfc3NsX2Rvd25ncmFkZSddKSB7CiR0aGlzLT5hbGxvd1NzbERvd25ncmFkZSA9IHRydWU7Cn0KCiR0aGlzLT5jb25maWcgPSAkY29uZmlnOwokdGhpcy0+b3B0aW9ucyA9ICRyZXBvQ29uZmlnWydvcHRpb25zJ107CiR0aGlzLT51cmwgPSAkcmVwb0NvbmZpZ1sndXJsJ107CiR0aGlzLT5iYXNlVXJsID0gcnRyaW0ocHJlZ19yZXBsYWNlKCd7XiguKikoPzovcGFja2FnZXMuanNvbik/KD86Wz8jXS4qKT8kfScsICckMScsICR0aGlzLT51cmwpLCAnLycpOwokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5jYWNoZSA9IG5ldyBDYWNoZSgkaW8sICRjb25maWctPmdldCgnY2FjaGUtcmVwby1kaXInKS4nLycucHJlZ19yZXBsYWNlKCd7W15hLXowLTkuXX1pJywgJy0nLCAkdGhpcy0+dXJsKSwgJ2EtejAtOS4kJyk7CiR0aGlzLT5sb2FkZXIgPSBuZXcgQXJyYXlMb2FkZXIoKTsKJHRoaXMtPnJmcyA9IG5ldyBSZW1vdGVGaWxlc3lzdGVtKCR0aGlzLT5pbywgJHRoaXMtPmNvbmZpZywgJHRoaXMtPm9wdGlvbnMpOwokdGhpcy0+ZXZlbnREaXNwYXRjaGVyID0gJGV2ZW50RGlzcGF0Y2hlcjsKfQoKcHVibGljIGZ1bmN0aW9uIHNldFJvb3RBbGlhc2VzKGFycmF5ICRyb290QWxpYXNlcykKewokdGhpcy0+cm9vdEFsaWFzZXMgPSAkcm9vdEFsaWFzZXM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQYWNrYWdlcygpCnsKaWYgKCR0aGlzLT5oYXNQcm92aWRlcnMoKSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDb21wb3NlciByZXBvc2l0b3JpZXMgdGhhdCBoYXZlIHByb3ZpZGVycyBjYW4gbm90IGxvYWQgdGhlIGNvbXBsZXRlIGxpc3Qgb2YgcGFja2FnZXMsIHVzZSBnZXRQcm92aWRlck5hbWVzIGluc3RlYWQuJyk7Cn0KCnJldHVybiBwYXJlbnQ6OmdldFBhY2thZ2VzKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRNaW5pbWFsUGFja2FnZXMoKQp7CmlmIChpc3NldCgkdGhpcy0+bWluaW1hbFBhY2thZ2VzKSkgewpyZXR1cm4gJHRoaXMtPm1pbmltYWxQYWNrYWdlczsKfQoKaWYgKG51bGwgPT09ICR0aGlzLT5yYXdEYXRhKSB7CiR0aGlzLT5yYXdEYXRhID0gJHRoaXMtPmxvYWREYXRhRnJvbVNlcnZlcigpOwp9CgokdGhpcy0+bWluaW1hbFBhY2thZ2VzID0gYXJyYXkoKTsKJHZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcjsKCmZvcmVhY2ggKCR0aGlzLT5yYXdEYXRhIGFzICRwYWNrYWdlKSB7CiR2ZXJzaW9uID0gIWVtcHR5KCRwYWNrYWdlWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXSkgPyAkcGFja2FnZVsndmVyc2lvbl9ub3JtYWxpemVkJ10gOiAkdmVyc2lvblBhcnNlci0+bm9ybWFsaXplKCRwYWNrYWdlWyd2ZXJzaW9uJ10pOwokZGF0YSA9IGFycmF5KAonbmFtZScgPT4gc3RydG9sb3dlcigkcGFja2FnZVsnbmFtZSddKSwKJ3JlcG8nID0+ICR0aGlzLAondmVyc2lvbicgPT4gJHZlcnNpb24sCidyYXcnID0+ICRwYWNrYWdlLAopOwppZiAoIWVtcHR5KCRwYWNrYWdlWydyZXBsYWNlJ10pKSB7CiRkYXRhWydyZXBsYWNlJ10gPSAkcGFja2FnZVsncmVwbGFjZSddOwp9CmlmICghZW1wdHkoJHBhY2thZ2VbJ3Byb3ZpZGUnXSkpIHsKJGRhdGFbJ3Byb3ZpZGUnXSA9ICRwYWNrYWdlWydwcm92aWRlJ107Cn0KCgogaWYgKCRhbGlhc05vcm1hbGl6ZWQgPSAkdGhpcy0+bG9hZGVyLT5nZXRCcmFuY2hBbGlhcygkcGFja2FnZSkpIHsKJGRhdGFbJ2FsaWFzJ10gPSBwcmVnX3JlcGxhY2UoJ3soXC45ezd9KSt9JywgJy54JywgJGFsaWFzTm9ybWFsaXplZCk7CiRkYXRhWydhbGlhc19ub3JtYWxpemVkJ10gPSAkYWxpYXNOb3JtYWxpemVkOwp9CgokdGhpcy0+bWluaW1hbFBhY2thZ2VzW10gPSAkZGF0YTsKfQoKcmV0dXJuICR0aGlzLT5taW5pbWFsUGFja2FnZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZWFyY2goJHF1ZXJ5LCAkbW9kZSA9IDApCnsKJHRoaXMtPmxvYWRSb290U2VydmVyRmlsZSgpOwoKaWYgKCR0aGlzLT5zZWFyY2hVcmwgJiYgJG1vZGUgPT09IHNlbGY6OlNFQVJDSF9GVUxMVEVYVCkgewokdXJsID0gc3RyX3JlcGxhY2UoJyVxdWVyeSUnLCAkcXVlcnksICR0aGlzLT5zZWFyY2hVcmwpOwoKJGpzb24gPSAkdGhpcy0+cmZzLT5nZXRDb250ZW50cygkdXJsLCAkdXJsLCBmYWxzZSk7CiRyZXN1bHRzID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkanNvbiwgJHVybCk7CgpyZXR1cm4gJHJlc3VsdHNbJ3Jlc3VsdHMnXTsKfQoKaWYgKCR0aGlzLT5oYXNQcm92aWRlcnMoKSkgewokcmVzdWx0cyA9IGFycmF5KCk7CiRyZWdleCA9ICd7KD86Jy5pbXBsb2RlKCd8JywgcHJlZ19zcGxpdCgne1xzK30nLCAkcXVlcnkpKS4nKX1pJzsKCmZvcmVhY2ggKCR0aGlzLT5nZXRQcm92aWRlck5hbWVzKCkgYXMgJG5hbWUpIHsKaWYgKHByZWdfbWF0Y2goJHJlZ2V4LCAkbmFtZSkpIHsKJHJlc3VsdHNbXSA9IGFycmF5KCduYW1lJyA9PiAkbmFtZSk7Cn0KfQoKcmV0dXJuICRyZXN1bHRzOwp9CgpyZXR1cm4gcGFyZW50OjpzZWFyY2goJHF1ZXJ5LCAkbW9kZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcm92aWRlck5hbWVzKCkKewokdGhpcy0+bG9hZFJvb3RTZXJ2ZXJGaWxlKCk7CgppZiAobnVsbCA9PT0gJHRoaXMtPnByb3ZpZGVyTGlzdGluZykgewokdGhpcy0+bG9hZFByb3ZpZGVyTGlzdGluZ3MoJHRoaXMtPmxvYWRSb290U2VydmVyRmlsZSgpKTsKfQoKaWYgKCR0aGlzLT5wcm92aWRlcnNVcmwpIHsKcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPnByb3ZpZGVyTGlzdGluZyk7Cn0KCgogJHByb3ZpZGVycyA9IGFycmF5KCk7CmZvcmVhY2ggKGFycmF5X2tleXMoJHRoaXMtPnByb3ZpZGVyTGlzdGluZykgYXMgJHByb3ZpZGVyKSB7CiRwcm92aWRlcnNbXSA9IHN1YnN0cigkcHJvdmlkZXIsIDIsIC01KTsKfQoKcmV0dXJuICRwcm92aWRlcnM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkUGFja2FnZShhcnJheSAkZGF0YSkKewokcGFja2FnZSA9ICR0aGlzLT5jcmVhdGVQYWNrYWdlKCRkYXRhWydyYXcnXSwgJ0NvbXBvc2VyXFBhY2thZ2VcUGFja2FnZScpOwppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJHBhY2thZ2UgPSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpOwp9CiRwYWNrYWdlLT5zZXRSZXBvc2l0b3J5KCR0aGlzKTsKCnJldHVybiAkcGFja2FnZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGxvYWRBbGlhc1BhY2thZ2UoYXJyYXkgJGRhdGEsIFBhY2thZ2VJbnRlcmZhY2UgJGFsaWFzT2YpCnsKJGFsaWFzUGFja2FnZSA9ICR0aGlzLT5jcmVhdGVBbGlhc1BhY2thZ2UoJGFsaWFzT2YsICRkYXRhWyd2ZXJzaW9uJ10sICRkYXRhWydhbGlhcyddKTsKJGFsaWFzUGFja2FnZS0+c2V0UmVwb3NpdG9yeSgkdGhpcyk7CgpyZXR1cm4gJGFsaWFzUGFja2FnZTsKfQoKcHVibGljIGZ1bmN0aW9uIGhhc1Byb3ZpZGVycygpCnsKJHRoaXMtPmxvYWRSb290U2VydmVyRmlsZSgpOwoKcmV0dXJuICR0aGlzLT5oYXNQcm92aWRlcnM7Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXNldFBhY2thZ2VJZHMoKQp7CmZvcmVhY2ggKCR0aGlzLT5wcm92aWRlcnNCeVVpZCBhcyAkcGFja2FnZSkgewppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJHBhY2thZ2UtPmdldEFsaWFzT2YoKS0+c2V0SWQoLTEpOwp9CiRwYWNrYWdlLT5zZXRJZCgtMSk7Cn0KfQoKcHVibGljIGZ1bmN0aW9uIHdoYXRQcm92aWRlcyhQb29sICRwb29sLCAkbmFtZSkKewppZiAoaXNzZXQoJHRoaXMtPnByb3ZpZGVyc1skbmFtZV0pKSB7CnJldHVybiAkdGhpcy0+cHJvdmlkZXJzWyRuYW1lXTsKfQoKCiBpZiAocHJlZ19tYXRjaChQbGF0Zm9ybVJlcG9zaXRvcnk6OlBMQVRGT1JNX1BBQ0tBR0VfUkVHRVgsICRuYW1lKSB8fCAnX19yb290X18nID09PSAkbmFtZSkgewpyZXR1cm4gYXJyYXkoKTsKfQoKaWYgKG51bGwgPT09ICR0aGlzLT5wcm92aWRlckxpc3RpbmcpIHsKJHRoaXMtPmxvYWRQcm92aWRlckxpc3RpbmdzKCR0aGlzLT5sb2FkUm9vdFNlcnZlckZpbGUoKSk7Cn0KCmlmICgkdGhpcy0+cHJvdmlkZXJzVXJsKSB7CgogaWYgKCFpc3NldCgkdGhpcy0+cHJvdmlkZXJMaXN0aW5nWyRuYW1lXSkpIHsKcmV0dXJuIGFycmF5KCk7Cn0KCiRoYXNoID0gJHRoaXMtPnByb3ZpZGVyTGlzdGluZ1skbmFtZV1bJ3NoYTI1NiddOwokdXJsID0gc3RyX3JlcGxhY2UoYXJyYXkoJyVwYWNrYWdlJScsICclaGFzaCUnKSwgYXJyYXkoJG5hbWUsICRoYXNoKSwgJHRoaXMtPnByb3ZpZGVyc1VybCk7CiRjYWNoZUtleSA9ICdwcm92aWRlci0nLnN0cnRyKCRuYW1lLCAnLycsICckJykuJy5qc29uJzsKfSBlbHNlIHsKCiAkdXJsID0gJ3AvJy4kbmFtZS4nLmpzb24nOwoKCiBpZiAoIWlzc2V0KCR0aGlzLT5wcm92aWRlckxpc3RpbmdbJHVybF0pKSB7CnJldHVybiBhcnJheSgpOwp9CiRoYXNoID0gJHRoaXMtPnByb3ZpZGVyTGlzdGluZ1skdXJsXVsnc2hhMjU2J107CiRjYWNoZUtleSA9IG51bGw7Cn0KCmlmICgkdGhpcy0+Y2FjaGUtPnNoYTI1NigkY2FjaGVLZXkpID09PSAkaGFzaCkgewokcGFja2FnZXMgPSBqc29uX2RlY29kZSgkdGhpcy0+Y2FjaGUtPnJlYWQoJGNhY2hlS2V5KSwgdHJ1ZSk7Cn0gZWxzZSB7CiRwYWNrYWdlcyA9ICR0aGlzLT5mZXRjaEZpbGUoJHVybCwgJGNhY2hlS2V5LCAkaGFzaCk7Cn0KCiR0aGlzLT5wcm92aWRlcnNbJG5hbWVdID0gYXJyYXkoKTsKZm9yZWFjaCAoJHBhY2thZ2VzWydwYWNrYWdlcyddIGFzICR2ZXJzaW9ucykgewpmb3JlYWNoICgkdmVyc2lvbnMgYXMgJHZlcnNpb24pIHsKCiBpZiAoaXNzZXQoJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXV0pKSB7CgogaWYgKCFpc3NldCgkdGhpcy0+cHJvdmlkZXJzWyRuYW1lXVskdmVyc2lvblsndWlkJ11dKSkgewoKIGlmICgkdGhpcy0+cHJvdmlkZXJzQnlVaWRbJHZlcnNpb25bJ3VpZCddXSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewokdGhpcy0+cHJvdmlkZXJzWyRuYW1lXVskdmVyc2lvblsndWlkJ11dID0gJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXV0tPmdldEFsaWFzT2YoKTsKJHRoaXMtPnByb3ZpZGVyc1skbmFtZV1bJHZlcnNpb25bJ3VpZCddLictYWxpYXMnXSA9ICR0aGlzLT5wcm92aWRlcnNCeVVpZFskdmVyc2lvblsndWlkJ11dOwp9IGVsc2UgewokdGhpcy0+cHJvdmlkZXJzWyRuYW1lXVskdmVyc2lvblsndWlkJ11dID0gJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXV07Cn0KCiBpZiAoaXNzZXQoJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXS4nLXJvb3QnXSkpIHsKJHRoaXMtPnByb3ZpZGVyc1skbmFtZV1bJHZlcnNpb25bJ3VpZCddLictcm9vdCddID0gJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXS4nLXJvb3QnXTsKfQp9Cn0gZWxzZSB7CmlmIChpc3NldCgkdmVyc2lvblsncHJvdmlkZSddKSB8fCBpc3NldCgkdmVyc2lvblsncmVwbGFjZSddKSkgewoKICRuYW1lcyA9IGFycmF5KApzdHJ0b2xvd2VyKCR2ZXJzaW9uWyduYW1lJ10pID0+IHRydWUsCik7CmlmIChpc3NldCgkdmVyc2lvblsncHJvdmlkZSddKSkgewpmb3JlYWNoICgkdmVyc2lvblsncHJvdmlkZSddIGFzICR0YXJnZXQgPT4gJGNvbnN0cmFpbnQpIHsKJG5hbWVzW3N0cnRvbG93ZXIoJHRhcmdldCldID0gdHJ1ZTsKfQp9CmlmIChpc3NldCgkdmVyc2lvblsncmVwbGFjZSddKSkgewpmb3JlYWNoICgkdmVyc2lvblsncmVwbGFjZSddIGFzICR0YXJnZXQgPT4gJGNvbnN0cmFpbnQpIHsKJG5hbWVzW3N0cnRvbG93ZXIoJHRhcmdldCldID0gdHJ1ZTsKfQp9CiRuYW1lcyA9IGFycmF5X2tleXMoJG5hbWVzKTsKfSBlbHNlIHsKJG5hbWVzID0gYXJyYXkoc3RydG9sb3dlcigkdmVyc2lvblsnbmFtZSddKSk7Cn0KaWYgKCEkcG9vbC0+aXNQYWNrYWdlQWNjZXB0YWJsZShzdHJ0b2xvd2VyKCR2ZXJzaW9uWyduYW1lJ10pLCBWZXJzaW9uUGFyc2VyOjpwYXJzZVN0YWJpbGl0eSgkdmVyc2lvblsndmVyc2lvbiddKSkpIHsKY29udGludWU7Cn0KCgogJHBhY2thZ2UgPSAkdGhpcy0+Y3JlYXRlUGFja2FnZSgkdmVyc2lvbiwgJ0NvbXBvc2VyXFBhY2thZ2VcUGFja2FnZScpOwokcGFja2FnZS0+c2V0UmVwb3NpdG9yeSgkdGhpcyk7CgppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJGFsaWFzZWQgPSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpOwokYWxpYXNlZC0+c2V0UmVwb3NpdG9yeSgkdGhpcyk7CgokdGhpcy0+cHJvdmlkZXJzWyRuYW1lXVskdmVyc2lvblsndWlkJ11dID0gJGFsaWFzZWQ7CiR0aGlzLT5wcm92aWRlcnNbJG5hbWVdWyR2ZXJzaW9uWyd1aWQnXS4nLWFsaWFzJ10gPSAkcGFja2FnZTsKCgogJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXV0gPSAkcGFja2FnZTsKfSBlbHNlIHsKJHRoaXMtPnByb3ZpZGVyc1skbmFtZV1bJHZlcnNpb25bJ3VpZCddXSA9ICRwYWNrYWdlOwokdGhpcy0+cHJvdmlkZXJzQnlVaWRbJHZlcnNpb25bJ3VpZCddXSA9ICRwYWNrYWdlOwp9CgoKIHVuc2V0KCRyb290QWxpYXNEYXRhKTsKCmlmIChpc3NldCgkdGhpcy0+cm9vdEFsaWFzZXNbJG5hbWVdWyRwYWNrYWdlLT5nZXRWZXJzaW9uKCldKSkgewokcm9vdEFsaWFzRGF0YSA9ICR0aGlzLT5yb290QWxpYXNlc1skbmFtZV1bJHBhY2thZ2UtPmdldFZlcnNpb24oKV07Cn0gZWxzZWlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSAmJiBpc3NldCgkdGhpcy0+cm9vdEFsaWFzZXNbJG5hbWVdWyRwYWNrYWdlLT5nZXRBbGlhc09mKCktPmdldFZlcnNpb24oKV0pKSB7CiRyb290QWxpYXNEYXRhID0gJHRoaXMtPnJvb3RBbGlhc2VzWyRuYW1lXVskcGFja2FnZS0+Z2V0QWxpYXNPZigpLT5nZXRWZXJzaW9uKCldOwp9CgppZiAoaXNzZXQoJHJvb3RBbGlhc0RhdGEpKSB7CiRhbGlhcyA9ICR0aGlzLT5jcmVhdGVBbGlhc1BhY2thZ2UoJHBhY2thZ2UsICRyb290QWxpYXNEYXRhWydhbGlhc19ub3JtYWxpemVkJ10sICRyb290QWxpYXNEYXRhWydhbGlhcyddKTsKJGFsaWFzLT5zZXRSZXBvc2l0b3J5KCR0aGlzKTsKCiR0aGlzLT5wcm92aWRlcnNbJG5hbWVdWyR2ZXJzaW9uWyd1aWQnXS4nLXJvb3QnXSA9ICRhbGlhczsKJHRoaXMtPnByb3ZpZGVyc0J5VWlkWyR2ZXJzaW9uWyd1aWQnXS4nLXJvb3QnXSA9ICRhbGlhczsKfQp9Cn0KfQoKcmV0dXJuICR0aGlzLT5wcm92aWRlcnNbJG5hbWVdOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKcGFyZW50Ojppbml0aWFsaXplKCk7CgokcmVwb0RhdGEgPSAkdGhpcy0+bG9hZERhdGFGcm9tU2VydmVyKCk7Cgpmb3JlYWNoICgkcmVwb0RhdGEgYXMgJHBhY2thZ2UpIHsKJHRoaXMtPmFkZFBhY2thZ2UoJHRoaXMtPmNyZWF0ZVBhY2thZ2UoJHBhY2thZ2UsICdDb21wb3NlclxQYWNrYWdlXENvbXBsZXRlUGFja2FnZScpKTsKfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gbG9hZFJvb3RTZXJ2ZXJGaWxlKCkKewppZiAobnVsbCAhPT0gJHRoaXMtPnJvb3REYXRhKSB7CnJldHVybiAkdGhpcy0+cm9vdERhdGE7Cn0KCmlmICghZXh0ZW5zaW9uX2xvYWRlZCgnb3BlbnNzbCcpICYmICdodHRwcycgPT09IHN1YnN0cigkdGhpcy0+dXJsLCAwLCA1KSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1lvdSBtdXN0IGVuYWJsZSB0aGUgb3BlbnNzbCBleHRlbnNpb24gaW4geW91ciBwaHAuaW5pIHRvIGxvYWQgaW5mb3JtYXRpb24gZnJvbSAnLiR0aGlzLT51cmwpOwp9CgokanNvblVybFBhcnRzID0gcGFyc2VfdXJsKCR0aGlzLT51cmwpOwoKaWYgKGlzc2V0KCRqc29uVXJsUGFydHNbJ3BhdGgnXSkgJiYgZmFsc2UgIT09IHN0cnBvcygkanNvblVybFBhcnRzWydwYXRoJ10sICcvcGFja2FnZXMuanNvbicpKSB7CiRqc29uVXJsID0gJHRoaXMtPnVybDsKfSBlbHNlIHsKJGpzb25VcmwgPSAkdGhpcy0+dXJsIC4gJy9wYWNrYWdlcy5qc29uJzsKfQoKJGRhdGEgPSAkdGhpcy0+ZmV0Y2hGaWxlKCRqc29uVXJsLCAncGFja2FnZXMuanNvbicpOwoKaWYgKCFlbXB0eSgkZGF0YVsnbm90aWZ5LWJhdGNoJ10pKSB7CiR0aGlzLT5ub3RpZnlVcmwgPSAkdGhpcy0+Y2Fub25pY2FsaXplVXJsKCRkYXRhWydub3RpZnktYmF0Y2gnXSk7Cn0gZWxzZWlmICghZW1wdHkoJGRhdGFbJ25vdGlmeV9iYXRjaCddKSkgewoKICR0aGlzLT5ub3RpZnlVcmwgPSAkdGhpcy0+Y2Fub25pY2FsaXplVXJsKCRkYXRhWydub3RpZnlfYmF0Y2gnXSk7Cn0gZWxzZWlmICghZW1wdHkoJGRhdGFbJ25vdGlmeSddKSkgewokdGhpcy0+bm90aWZ5VXJsID0gJHRoaXMtPmNhbm9uaWNhbGl6ZVVybCgkZGF0YVsnbm90aWZ5J10pOwp9CgppZiAoIWVtcHR5KCRkYXRhWydzZWFyY2gnXSkpIHsKJHRoaXMtPnNlYXJjaFVybCA9ICR0aGlzLT5jYW5vbmljYWxpemVVcmwoJGRhdGFbJ3NlYXJjaCddKTsKfQoKaWYgKCR0aGlzLT5hbGxvd1NzbERvd25ncmFkZSkgewokdGhpcy0+dXJsID0gc3RyX3JlcGxhY2UoJ2h0dHBzOi8vJywgJ2h0dHA6Ly8nLCAkdGhpcy0+dXJsKTsKfQoKaWYgKCFlbXB0eSgkZGF0YVsncHJvdmlkZXJzLXVybCddKSkgewokdGhpcy0+cHJvdmlkZXJzVXJsID0gJHRoaXMtPmNhbm9uaWNhbGl6ZVVybCgkZGF0YVsncHJvdmlkZXJzLXVybCddKTsKJHRoaXMtPmhhc1Byb3ZpZGVycyA9IHRydWU7Cn0KCmlmICghZW1wdHkoJGRhdGFbJ3Byb3ZpZGVycyddKSB8fCAhZW1wdHkoJGRhdGFbJ3Byb3ZpZGVycy1pbmNsdWRlcyddKSkgewokdGhpcy0+aGFzUHJvdmlkZXJzID0gdHJ1ZTsKfQoKcmV0dXJuICR0aGlzLT5yb290RGF0YSA9ICRkYXRhOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2Fub25pY2FsaXplVXJsKCR1cmwpCnsKaWYgKCcvJyA9PT0gJHVybFswXSkgewpyZXR1cm4gcHJlZ19yZXBsYWNlKCd7KGh0dHBzPzovL1teL10rKS4qfWknLCAnJDEnIC4gJHVybCwgJHRoaXMtPnVybCk7Cn0KCnJldHVybiAkdXJsOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gbG9hZERhdGFGcm9tU2VydmVyKCkKewokZGF0YSA9ICR0aGlzLT5sb2FkUm9vdFNlcnZlckZpbGUoKTsKCnJldHVybiAkdGhpcy0+bG9hZEluY2x1ZGVzKCRkYXRhKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRQcm92aWRlckxpc3RpbmdzKCRkYXRhKQp7CmlmIChpc3NldCgkZGF0YVsncHJvdmlkZXJzJ10pKSB7CmlmICghaXNfYXJyYXkoJHRoaXMtPnByb3ZpZGVyTGlzdGluZykpIHsKJHRoaXMtPnByb3ZpZGVyTGlzdGluZyA9IGFycmF5KCk7Cn0KJHRoaXMtPnByb3ZpZGVyTGlzdGluZyA9IGFycmF5X21lcmdlKCR0aGlzLT5wcm92aWRlckxpc3RpbmcsICRkYXRhWydwcm92aWRlcnMnXSk7Cn0KCmlmICgkdGhpcy0+cHJvdmlkZXJzVXJsICYmIGlzc2V0KCRkYXRhWydwcm92aWRlci1pbmNsdWRlcyddKSkgewokaW5jbHVkZXMgPSAkZGF0YVsncHJvdmlkZXItaW5jbHVkZXMnXTsKZm9yZWFjaCAoJGluY2x1ZGVzIGFzICRpbmNsdWRlID0+ICRtZXRhZGF0YSkgewokdXJsID0gJHRoaXMtPmJhc2VVcmwgLiAnLycgLiBzdHJfcmVwbGFjZSgnJWhhc2glJywgJG1ldGFkYXRhWydzaGEyNTYnXSwgJGluY2x1ZGUpOwokY2FjaGVLZXkgPSBzdHJfcmVwbGFjZShhcnJheSgnJWhhc2glJywnJCcpLCAnJywgJGluY2x1ZGUpOwppZiAoJHRoaXMtPmNhY2hlLT5zaGEyNTYoJGNhY2hlS2V5KSA9PT0gJG1ldGFkYXRhWydzaGEyNTYnXSkgewokaW5jbHVkZWREYXRhID0ganNvbl9kZWNvZGUoJHRoaXMtPmNhY2hlLT5yZWFkKCRjYWNoZUtleSksIHRydWUpOwp9IGVsc2UgewokaW5jbHVkZWREYXRhID0gJHRoaXMtPmZldGNoRmlsZSgkdXJsLCAkY2FjaGVLZXksICRtZXRhZGF0YVsnc2hhMjU2J10pOwp9CgokdGhpcy0+bG9hZFByb3ZpZGVyTGlzdGluZ3MoJGluY2x1ZGVkRGF0YSk7Cn0KfSBlbHNlaWYgKGlzc2V0KCRkYXRhWydwcm92aWRlcnMtaW5jbHVkZXMnXSkpIHsKCiAkaW5jbHVkZXMgPSAkZGF0YVsncHJvdmlkZXJzLWluY2x1ZGVzJ107CmZvcmVhY2ggKCRpbmNsdWRlcyBhcyAkaW5jbHVkZSA9PiAkbWV0YWRhdGEpIHsKaWYgKCR0aGlzLT5jYWNoZS0+c2hhMjU2KCRpbmNsdWRlKSA9PT0gJG1ldGFkYXRhWydzaGEyNTYnXSkgewokaW5jbHVkZWREYXRhID0ganNvbl9kZWNvZGUoJHRoaXMtPmNhY2hlLT5yZWFkKCRpbmNsdWRlKSwgdHJ1ZSk7Cn0gZWxzZSB7CiRpbmNsdWRlZERhdGEgPSAkdGhpcy0+ZmV0Y2hGaWxlKCRpbmNsdWRlLCBudWxsLCAkbWV0YWRhdGFbJ3NoYTI1NiddKTsKfQoKJHRoaXMtPmxvYWRQcm92aWRlckxpc3RpbmdzKCRpbmNsdWRlZERhdGEpOwp9Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGxvYWRJbmNsdWRlcygkZGF0YSkKewokcGFja2FnZXMgPSBhcnJheSgpOwoKCiBpZiAoIWlzc2V0KCRkYXRhWydwYWNrYWdlcyddKSAmJiAhaXNzZXQoJGRhdGFbJ2luY2x1ZGVzJ10pKSB7CmZvcmVhY2ggKCRkYXRhIGFzICRwa2cpIHsKZm9yZWFjaCAoJHBrZ1sndmVyc2lvbnMnXSBhcyAkbWV0YWRhdGEpIHsKJHBhY2thZ2VzW10gPSAkbWV0YWRhdGE7Cn0KfQoKcmV0dXJuICRwYWNrYWdlczsKfQoKaWYgKGlzc2V0KCRkYXRhWydwYWNrYWdlcyddKSkgewpmb3JlYWNoICgkZGF0YVsncGFja2FnZXMnXSBhcyAkcGFja2FnZSA9PiAkdmVyc2lvbnMpIHsKZm9yZWFjaCAoJHZlcnNpb25zIGFzICR2ZXJzaW9uID0+ICRtZXRhZGF0YSkgewokcGFja2FnZXNbXSA9ICRtZXRhZGF0YTsKfQp9Cn0KCmlmIChpc3NldCgkZGF0YVsnaW5jbHVkZXMnXSkpIHsKZm9yZWFjaCAoJGRhdGFbJ2luY2x1ZGVzJ10gYXMgJGluY2x1ZGUgPT4gJG1ldGFkYXRhKSB7CmlmICgkdGhpcy0+Y2FjaGUtPnNoYTEoJGluY2x1ZGUpID09PSAkbWV0YWRhdGFbJ3NoYTEnXSkgewokaW5jbHVkZWREYXRhID0ganNvbl9kZWNvZGUoJHRoaXMtPmNhY2hlLT5yZWFkKCRpbmNsdWRlKSwgdHJ1ZSk7Cn0gZWxzZSB7CiRpbmNsdWRlZERhdGEgPSAkdGhpcy0+ZmV0Y2hGaWxlKCRpbmNsdWRlKTsKfQokcGFja2FnZXMgPSBhcnJheV9tZXJnZSgkcGFja2FnZXMsICR0aGlzLT5sb2FkSW5jbHVkZXMoJGluY2x1ZGVkRGF0YSkpOwp9Cn0KCnJldHVybiAkcGFja2FnZXM7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVQYWNrYWdlKGFycmF5ICRkYXRhLCAkY2xhc3MpCnsKdHJ5IHsKaWYgKCFpc3NldCgkZGF0YVsnbm90aWZpY2F0aW9uLXVybCddKSkgewokZGF0YVsnbm90aWZpY2F0aW9uLXVybCddID0gJHRoaXMtPm5vdGlmeVVybDsKfQoKcmV0dXJuICR0aGlzLT5sb2FkZXItPmxvYWQoJGRhdGEsICdDb21wb3NlclxQYWNrYWdlXENvbXBsZXRlUGFja2FnZScpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGxvYWQgcGFja2FnZSAnLihpc3NldCgkZGF0YVsnbmFtZSddKSA/ICRkYXRhWyduYW1lJ10gOiBqc29uX2VuY29kZSgkZGF0YSkpLicgaW4gJy4kdGhpcy0+dXJsLic6IFsnLmdldF9jbGFzcygkZSkuJ10gJy4kZS0+Z2V0TWVzc2FnZSgpLCAwLCAkZSk7Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoRmlsZSgkZmlsZW5hbWUsICRjYWNoZUtleSA9IG51bGwsICRzaGEyNTYgPSBudWxsKQp7CmlmICghJGNhY2hlS2V5KSB7CiRjYWNoZUtleSA9ICRmaWxlbmFtZTsKJGZpbGVuYW1lID0gJHRoaXMtPmJhc2VVcmwuJy8nLiRmaWxlbmFtZTsKfQoKJHJldHJpZXMgPSAzOwp3aGlsZSAoJHJldHJpZXMtLSkgewp0cnkgewokcHJlRmlsZURvd25sb2FkRXZlbnQgPSBuZXcgUHJlRmlsZURvd25sb2FkRXZlbnQoUGx1Z2luRXZlbnRzOjpQUkVfRklMRV9ET1dOTE9BRCwgJHRoaXMtPnJmcywgJGZpbGVuYW1lKTsKaWYgKCR0aGlzLT5ldmVudERpc3BhdGNoZXIpIHsKJHRoaXMtPmV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2goJHByZUZpbGVEb3dubG9hZEV2ZW50LT5nZXROYW1lKCksICRwcmVGaWxlRG93bmxvYWRFdmVudCk7Cn0KJGpzb24gPSAkcHJlRmlsZURvd25sb2FkRXZlbnQtPmdldFJlbW90ZUZpbGVzeXN0ZW0oKS0+Z2V0Q29udGVudHMoJGZpbGVuYW1lLCAkZmlsZW5hbWUsIGZhbHNlKTsKaWYgKCRzaGEyNTYgJiYgJHNoYTI1NiAhPT0gaGFzaCgnc2hhMjU2JywgJGpzb24pKSB7CmlmICgkcmV0cmllcykgewp1c2xlZXAoMTAwMDAwKTsKCmNvbnRpbnVlOwp9CgoKIHRocm93IG5ldyBSZXBvc2l0b3J5U2VjdXJpdHlFeGNlcHRpb24oJ1RoZSBjb250ZW50cyBvZiAnLiRmaWxlbmFtZS4nIGRvIG5vdCBtYXRjaCBpdHMgc2lnbmF0dXJlLiBUaGlzIHNob3VsZCBpbmRpY2F0ZSBhIG1hbi1pbi10aGUtbWlkZGxlIGF0dGFjay4gVHJ5IHJ1bm5pbmcgY29tcG9zZXIgYWdhaW4gYW5kIHJlcG9ydCB0aGlzIGlmIHlvdSB0aGluayBpdCBpcyBhIG1pc3Rha2UuJyk7Cn0KJGRhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCRqc29uLCAkZmlsZW5hbWUpOwokdGhpcy0+Y2FjaGUtPndyaXRlKCRjYWNoZUtleSwgJGpzb24pOwoKYnJlYWs7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKaWYgKCRyZXRyaWVzKSB7CnVzbGVlcCgxMDAwMDApOwpjb250aW51ZTsKfQoKaWYgKCRlIGluc3RhbmNlb2YgUmVwb3NpdG9yeVNlY3VyaXR5RXhjZXB0aW9uKSB7CnRocm93ICRlOwp9CgppZiAoJGNvbnRlbnRzID0gJHRoaXMtPmNhY2hlLT5yZWFkKCRjYWNoZUtleSkpIHsKaWYgKCEkdGhpcy0+ZGVncmFkZWRNb2RlKSB7CiR0aGlzLT5pby0+d3JpdGUoJzx3YXJuaW5nPicuJGUtPmdldE1lc3NhZ2UoKS4nPC93YXJuaW5nPicpOwokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz4nLiR0aGlzLT51cmwuJyBjb3VsZCBub3QgYmUgZnVsbHkgbG9hZGVkLCBwYWNrYWdlIGluZm9ybWF0aW9uIHdhcyBsb2FkZWQgZnJvbSB0aGUgbG9jYWwgY2FjaGUgYW5kIG1heSBiZSBvdXQgb2YgZGF0ZTwvd2FybmluZz4nKTsKfQokdGhpcy0+ZGVncmFkZWRNb2RlID0gdHJ1ZTsKJGRhdGEgPSBKc29uRmlsZTo6cGFyc2VKc29uKCRjb250ZW50cywgJHRoaXMtPmNhY2hlLT5nZXRSb290KCkuJGNhY2hlS2V5KTsKCmJyZWFrOwp9Cgp0aHJvdyAkZTsKfQp9CgpyZXR1cm4gJGRhdGE7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFBlYXI7CgoKCgoKCmNsYXNzIERlcGVuZGVuY3lJbmZvCnsKcHJpdmF0ZSAkcmVxdWlyZXM7CnByaXZhdGUgJG9wdGlvbmFsczsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJlcXVpcmVzLCAkb3B0aW9uYWxzKQp7CiR0aGlzLT5yZXF1aXJlcyA9ICRyZXF1aXJlczsKJHRoaXMtPm9wdGlvbmFscyA9ICRvcHRpb25hbHM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1aXJlcygpCnsKcmV0dXJuICR0aGlzLT5yZXF1aXJlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbmFscygpCnsKcmV0dXJuICR0aGlzLT5vcHRpb25hbHM7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFBlYXI7CgoKCgoKCmNsYXNzIFBhY2thZ2VEZXBlbmRlbmN5UGFyc2VyCnsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGJ1aWxkRGVwZW5kZW5jeUluZm8oJGRlcEFycmF5KQp7CmlmICghaXNfYXJyYXkoJGRlcEFycmF5KSkgewpyZXR1cm4gbmV3IERlcGVuZGVuY3lJbmZvKGFycmF5KCksIGFycmF5KCkpOwp9CmlmICghJHRoaXMtPmlzSGFzaCgkZGVwQXJyYXkpKSB7CnJldHVybiBuZXcgRGVwZW5kZW5jeUluZm8oJHRoaXMtPmJ1aWxkRGVwZW5kZW5jeTEwSW5mbygkZGVwQXJyYXkpLCBhcnJheSgpKTsKfQoKcmV0dXJuICR0aGlzLT5idWlsZERlcGVuZGVuY3kyMEluZm8oJGRlcEFycmF5KTsKfQoKCgoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZERlcGVuZGVuY3kxMEluZm8oJGRlcEFycmF5KQp7CnN0YXRpYyAkZGVwMTB0b09wZXJhdG9yTWFwID0gYXJyYXkoJ2hhcyc9Pic9PScsICdlcScgPT4gJz09JywgJ2dlJyA9PiAnPj0nLCAnZ3QnID0+ICc+JywgJ2xlJyA9PiAnPD0nLCAnbHQnID0+ICc8JywgJ25vdCcgPT4gJyE9Jyk7CgokcmVzdWx0ID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRkZXBBcnJheSBhcyAkZGVwSXRlbSkgewppZiAoZW1wdHkoJGRlcEl0ZW1bJ3JlbCddKSB8fCAhYXJyYXlfa2V5X2V4aXN0cygkZGVwSXRlbVsncmVsJ10sICRkZXAxMHRvT3BlcmF0b3JNYXApKSB7CgogY29udGludWU7Cn0KCiRkZXBUeXBlID0gIWVtcHR5KCRkZXBJdGVtWydvcHRpb25hbCddKSAmJiAneWVzJyA9PSAkZGVwSXRlbVsnb3B0aW9uYWwnXQo/ICdvcHRpb25hbCcKOiAncmVxdWlyZWQnOwokZGVwVHlwZSA9ICdub3QnID09ICRkZXBJdGVtWydyZWwnXQo/ICdjb25mbGljdHMnCjogJGRlcFR5cGU7CgokZGVwVmVyc2lvbiA9ICFlbXB0eSgkZGVwSXRlbVsndmVyc2lvbiddKSA/ICR0aGlzLT5wYXJzZVZlcnNpb24oJGRlcEl0ZW1bJ3ZlcnNpb24nXSkgOiAnKic7CgoKICRkZXBWZXJzaW9uQ29uc3RyYWludCA9ICgnaGFzJyA9PSAkZGVwSXRlbVsncmVsJ10gfHwgJ25vdCcgPT0gJGRlcEl0ZW1bJ3JlbCddKSAmJiAnKicgPT0gJGRlcFZlcnNpb24KPyAnKicKOiAkZGVwMTB0b09wZXJhdG9yTWFwWyRkZXBJdGVtWydyZWwnXV0gLiAkZGVwVmVyc2lvbjsKCnN3aXRjaCAoJGRlcEl0ZW1bJ3R5cGUnXSkgewpjYXNlICdwaHAnOgokZGVwQ2hhbm5lbE5hbWUgPSAncGhwJzsKJGRlcFBhY2thZ2VOYW1lID0gJyc7CmJyZWFrOwpjYXNlICdwa2cnOgokZGVwQ2hhbm5lbE5hbWUgPSAhZW1wdHkoJGRlcEl0ZW1bJ2NoYW5uZWwnXSkgPyAkZGVwSXRlbVsnY2hhbm5lbCddIDogJ3BlYXIucGhwLm5ldCc7CiRkZXBQYWNrYWdlTmFtZSA9ICRkZXBJdGVtWyduYW1lJ107CmJyZWFrOwpjYXNlICdleHQnOgokZGVwQ2hhbm5lbE5hbWUgPSAnZXh0JzsKJGRlcFBhY2thZ2VOYW1lID0gJGRlcEl0ZW1bJ25hbWUnXTsKYnJlYWs7CmNhc2UgJ29zJzoKY2FzZSAnc2FwaSc6CiRkZXBDaGFubmVsTmFtZSA9ICcnOwokZGVwUGFja2FnZU5hbWUgPSAnJzsKYnJlYWs7CmRlZmF1bHQ6CiRkZXBDaGFubmVsTmFtZSA9ICcnOwokZGVwUGFja2FnZU5hbWUgPSAnJzsKYnJlYWs7Cn0KCmlmICgnJyAhPSAkZGVwQ2hhbm5lbE5hbWUpIHsKJHJlc3VsdFtdID0gbmV3IERlcGVuZGVuY3lDb25zdHJhaW50KAokZGVwVHlwZSwKJGRlcFZlcnNpb25Db25zdHJhaW50LAokZGVwQ2hhbm5lbE5hbWUsCiRkZXBQYWNrYWdlTmFtZQopOwp9Cn0KCnJldHVybiAkcmVzdWx0Owp9CgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkRGVwZW5kZW5jeTIwSW5mbygkZGVwQXJyYXkpCnsKJHJlc3VsdCA9IGFycmF5KCk7CiRvcHRpb25hbHMgPSBhcnJheSgpOwokZGVmYXVsdE9wdGlvbmFscyA9IGFycmF5KCk7CmZvcmVhY2ggKCRkZXBBcnJheSBhcyAkZGVwVHlwZSA9PiAkZGVwVHlwZUdyb3VwKSB7CmlmICghaXNfYXJyYXkoJGRlcFR5cGVHcm91cCkpIHsKY29udGludWU7Cn0KaWYgKCdyZXF1aXJlZCcgPT0gJGRlcFR5cGUgfHwgJ29wdGlvbmFsJyA9PSAkZGVwVHlwZSkgewpmb3JlYWNoICgkZGVwVHlwZUdyb3VwIGFzICRkZXBJdGVtVHlwZSA9PiAkZGVwSXRlbSkgewpzd2l0Y2ggKCRkZXBJdGVtVHlwZSkgewpjYXNlICdwaHAnOgokcmVzdWx0W10gPSBuZXcgRGVwZW5kZW5jeUNvbnN0cmFpbnQoCiRkZXBUeXBlLAokdGhpcy0+cGFyc2UyMFZlcnNpb25Db25zdHJhaW50KCRkZXBJdGVtKSwKJ3BocCcsCicnCik7CmJyZWFrOwpjYXNlICdwYWNrYWdlJzoKJGRlcHMgPSAkdGhpcy0+YnVpbGREZXBQYWNrYWdlQ29uc3RyYWludHMoJGRlcEl0ZW0sICRkZXBUeXBlKTsKJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsICRkZXBzKTsKYnJlYWs7CmNhc2UgJ2V4dGVuc2lvbic6CiRkZXBzID0gJHRoaXMtPmJ1aWxkRGVwRXh0ZW5zaW9uQ29uc3RyYWludHMoJGRlcEl0ZW0sICRkZXBUeXBlKTsKJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsICRkZXBzKTsKYnJlYWs7CmNhc2UgJ3N1YnBhY2thZ2UnOgokZGVwcyA9ICR0aGlzLT5idWlsZERlcFBhY2thZ2VDb25zdHJhaW50cygkZGVwSXRlbSwgJ3JlcGxhY2VzJyk7CiRkZWZhdWx0T3B0aW9uYWxzICs9ICRkZXBzOwpicmVhazsKY2FzZSAnb3MnOgpjYXNlICdwZWFyaW5zdGFsbGVyJzoKYnJlYWs7CmRlZmF1bHQ6CmJyZWFrOwp9Cn0KfSBlbHNlaWYgKCdncm91cCcgPT0gJGRlcFR5cGUpIHsKaWYgKCR0aGlzLT5pc0hhc2goJGRlcFR5cGVHcm91cCkpIHsKJGRlcFR5cGVHcm91cCA9IGFycmF5KCRkZXBUeXBlR3JvdXApOwp9Cgpmb3JlYWNoICgkZGVwVHlwZUdyb3VwIGFzICRkZXBJdGVtKSB7CiRncm91cE5hbWUgPSAkZGVwSXRlbVsnYXR0cmlicyddWyduYW1lJ107CmlmICghaXNzZXQoJG9wdGlvbmFsc1skZ3JvdXBOYW1lXSkpIHsKJG9wdGlvbmFsc1skZ3JvdXBOYW1lXSA9IGFycmF5KCk7Cn0KCmlmIChpc3NldCgkZGVwSXRlbVsnc3VicGFja2FnZSddKSkgewokb3B0aW9uYWxzWyRncm91cE5hbWVdICs9ICR0aGlzLT5idWlsZERlcFBhY2thZ2VDb25zdHJhaW50cygkZGVwSXRlbVsnc3VicGFja2FnZSddLCAncmVwbGFjZXMnKTsKfSBlbHNlIHsKJHJlc3VsdCArPSAkdGhpcy0+YnVpbGREZXBQYWNrYWdlQ29uc3RyYWludHMoJGRlcEl0ZW1bJ3BhY2thZ2UnXSwgJ29wdGlvbmFsJyk7Cn0KfQp9Cn0KCmlmIChjb3VudCgkZGVmYXVsdE9wdGlvbmFscykgPiAwKSB7CiRvcHRpb25hbHNbJyonXSA9ICRkZWZhdWx0T3B0aW9uYWxzOwp9CgpyZXR1cm4gbmV3IERlcGVuZGVuY3lJbmZvKCRyZXN1bHQsICRvcHRpb25hbHMpOwp9CgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZERlcEV4dGVuc2lvbkNvbnN0cmFpbnRzKCRkZXBJdGVtLCAkZGVwVHlwZSkKewppZiAoJHRoaXMtPmlzSGFzaCgkZGVwSXRlbSkpIHsKJGRlcEl0ZW0gPSBhcnJheSgkZGVwSXRlbSk7Cn0KCiRyZXN1bHQgPSBhcnJheSgpOwpmb3JlYWNoICgkZGVwSXRlbSBhcyAkc3ViRGVwSXRlbSkgewokZGVwQ2hhbm5lbE5hbWUgPSAnZXh0JzsKJGRlcFBhY2thZ2VOYW1lID0gJHN1YkRlcEl0ZW1bJ25hbWUnXTsKJGRlcFZlcnNpb25Db25zdHJhaW50ID0gJHRoaXMtPnBhcnNlMjBWZXJzaW9uQ29uc3RyYWludCgkc3ViRGVwSXRlbSk7CgokcmVzdWx0W10gPSBuZXcgRGVwZW5kZW5jeUNvbnN0cmFpbnQoCiRkZXBUeXBlLAokZGVwVmVyc2lvbkNvbnN0cmFpbnQsCiRkZXBDaGFubmVsTmFtZSwKJGRlcFBhY2thZ2VOYW1lCik7Cn0KCnJldHVybiAkcmVzdWx0Owp9CgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZERlcFBhY2thZ2VDb25zdHJhaW50cygkZGVwSXRlbSwgJGRlcFR5cGUpCnsKaWYgKCR0aGlzLT5pc0hhc2goJGRlcEl0ZW0pKSB7CiRkZXBJdGVtID0gYXJyYXkoJGRlcEl0ZW0pOwp9CgokcmVzdWx0ID0gYXJyYXkoKTsKZm9yZWFjaCAoJGRlcEl0ZW0gYXMgJHN1YkRlcEl0ZW0pIHsKJGRlcENoYW5uZWxOYW1lID0gJHN1YkRlcEl0ZW1bJ2NoYW5uZWwnXTsKJGRlcFBhY2thZ2VOYW1lID0gJHN1YkRlcEl0ZW1bJ25hbWUnXTsKJGRlcFZlcnNpb25Db25zdHJhaW50ID0gJHRoaXMtPnBhcnNlMjBWZXJzaW9uQ29uc3RyYWludCgkc3ViRGVwSXRlbSk7CmlmIChpc3NldCgkc3ViRGVwSXRlbVsnY29uZmxpY3RzJ10pKSB7CiRkZXBUeXBlID0gJ2NvbmZsaWN0cyc7Cn0KCiRyZXN1bHRbXSA9IG5ldyBEZXBlbmRlbmN5Q29uc3RyYWludCgKJGRlcFR5cGUsCiRkZXBWZXJzaW9uQ29uc3RyYWludCwKJGRlcENoYW5uZWxOYW1lLAokZGVwUGFja2FnZU5hbWUKKTsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcGFyc2UyMFZlcnNpb25Db25zdHJhaW50KGFycmF5ICRkYXRhKQp7CnN0YXRpYyAkZGVwMjB0b09wZXJhdG9yTWFwID0gYXJyYXkoJ2hhcyc9Pic9PScsICdtaW4nID0+ICc+PScsICdtYXgnID0+ICc8PScsICdleGNsdWRlJyA9PiAnIT0nKTsKCiR2ZXJzaW9ucyA9IGFycmF5KCk7CiR2YWx1ZXMgPSBhcnJheV9pbnRlcnNlY3Rfa2V5KCRkYXRhLCAkZGVwMjB0b09wZXJhdG9yTWFwKTsKaWYgKDAgPT0gY291bnQoJHZhbHVlcykpIHsKcmV0dXJuICcqJzsKfQppZiAoaXNzZXQoJHZhbHVlc1snbWluJ10pICYmIGlzc2V0KCR2YWx1ZXNbJ2V4Y2x1ZGUnXSkgJiYgJGRhdGFbJ21pbiddID09ICRkYXRhWydleGNsdWRlJ10pIHsKJHZlcnNpb25zW10gPSAnPicgLiAkdGhpcy0+cGFyc2VWZXJzaW9uKCR2YWx1ZXNbJ21pbiddKTsKfSBlbHNlaWYgKGlzc2V0KCR2YWx1ZXNbJ21heCddKSAmJiBpc3NldCgkdmFsdWVzWydleGNsdWRlJ10pICYmICRkYXRhWydtYXgnXSA9PSAkZGF0YVsnZXhjbHVkZSddKSB7CiR2ZXJzaW9uc1tdID0gJzwnIC4gJHRoaXMtPnBhcnNlVmVyc2lvbigkdmFsdWVzWydtYXgnXSk7Cn0gZWxzZSB7CmZvcmVhY2ggKCR2YWx1ZXMgYXMgJG9wID0+ICR2ZXJzaW9uKSB7CmlmICgnZXhjbHVkZScgPT0gJG9wICYmIGlzX2FycmF5KCR2ZXJzaW9uKSkgewpmb3JlYWNoICgkdmVyc2lvbiBhcyAkdmVyc2lvblBhcnQpIHsKJHZlcnNpb25zW10gPSAkZGVwMjB0b09wZXJhdG9yTWFwWyRvcF0gLiAkdGhpcy0+cGFyc2VWZXJzaW9uKCR2ZXJzaW9uUGFydCk7Cn0KfSBlbHNlIHsKJHZlcnNpb25zW10gPSAkZGVwMjB0b09wZXJhdG9yTWFwWyRvcF0gLiAkdGhpcy0+cGFyc2VWZXJzaW9uKCR2ZXJzaW9uKTsKfQp9Cn0KCnJldHVybiBpbXBsb2RlKCcsJywgJHZlcnNpb25zKTsKfQoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVZlcnNpb24oJHZlcnNpb24pCnsKaWYgKHByZWdfbWF0Y2goJ3tedj8oXGR7MSwzfSkoXC5cZCspPyhcLlxkKyk/KFwuXGQrKT99aScsICR2ZXJzaW9uLCAkbWF0Y2hlcykpIHsKJHZlcnNpb24gPSAkbWF0Y2hlc1sxXQouKCFlbXB0eSgkbWF0Y2hlc1syXSkgPyAkbWF0Y2hlc1syXSA6ICcuMCcpCi4oIWVtcHR5KCRtYXRjaGVzWzNdKSA/ICRtYXRjaGVzWzNdIDogJy4wJykKLighZW1wdHkoJG1hdGNoZXNbNF0pID8gJG1hdGNoZXNbNF0gOiAnLjAnKTsKCnJldHVybiAkdmVyc2lvbjsKfQoKcmV0dXJuIG51bGw7Cn0KCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gaXNIYXNoKGFycmF5ICRhcnJheSkKewpyZXR1cm4gIWFycmF5X2tleV9leGlzdHMoMSwgJGFycmF5KSAmJiAhYXJyYXlfa2V5X2V4aXN0cygwLCAkYXJyYXkpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQZWFyOwoKCgoKCgpjbGFzcyBDaGFubmVsSW5mbwp7CnByaXZhdGUgJG5hbWU7CnByaXZhdGUgJGFsaWFzOwpwcml2YXRlICRwYWNrYWdlczsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCAkYWxpYXMsIGFycmF5ICRwYWNrYWdlcykKewokdGhpcy0+bmFtZSA9ICRuYW1lOwokdGhpcy0+YWxpYXMgPSAkYWxpYXM7CiR0aGlzLT5wYWNrYWdlcyA9ICRwYWNrYWdlczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpCnsKcmV0dXJuICR0aGlzLT5uYW1lOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBbGlhcygpCnsKcmV0dXJuICR0aGlzLT5hbGlhczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGFja2FnZXMoKQp7CnJldHVybiAkdGhpcy0+cGFja2FnZXM7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFBlYXI7Cgp1c2UgQ29tcG9zZXJcVXRpbFxSZW1vdGVGaWxlc3lzdGVtOwoKCgoKCgoKCmNsYXNzIENoYW5uZWxSZWFkZXIgZXh0ZW5kcyBCYXNlQ2hhbm5lbFJlYWRlcgp7Cgpwcml2YXRlICRyZWFkZXJNYXA7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUmVtb3RlRmlsZXN5c3RlbSAkcmZzKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHJmcyk7CgokcmVzdDEwcmVhZGVyID0gbmV3IENoYW5uZWxSZXN0MTBSZWFkZXIoJHJmcyk7CiRyZXN0MTFyZWFkZXIgPSBuZXcgQ2hhbm5lbFJlc3QxMVJlYWRlcigkcmZzKTsKCiR0aGlzLT5yZWFkZXJNYXAgPSBhcnJheSgKJ1JFU1QxLjMnID0+ICRyZXN0MTFyZWFkZXIsCidSRVNUMS4yJyA9PiAkcmVzdDExcmVhZGVyLAonUkVTVDEuMScgPT4gJHJlc3QxMXJlYWRlciwKJ1JFU1QxLjAnID0+ICRyZXN0MTByZWFkZXIsCik7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVhZCgkdXJsKQp7CiR4bWwgPSAkdGhpcy0+cmVxdWVzdFhtbCgkdXJsLCAiL2NoYW5uZWwueG1sIik7CgokY2hhbm5lbE5hbWUgPSAoc3RyaW5nKSAkeG1sLT5uYW1lOwokY2hhbm5lbFN1bW1hcnkgPSAoc3RyaW5nKSAkeG1sLT5zdW1tYXJ5OwokY2hhbm5lbEFsaWFzID0gKHN0cmluZykgJHhtbC0+c3VnZ2VzdGVkYWxpYXM7Cgokc3VwcG9ydGVkVmVyc2lvbnMgPSBhcnJheV9rZXlzKCR0aGlzLT5yZWFkZXJNYXApOwokc2VsZWN0ZWRSZXN0VmVyc2lvbiA9ICR0aGlzLT5zZWxlY3RSZXN0VmVyc2lvbigkeG1sLCAkc3VwcG9ydGVkVmVyc2lvbnMpOwppZiAoISRzZWxlY3RlZFJlc3RWZXJzaW9uKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKHNwcmludGYoJ1BFQVIgcmVwb3NpdG9yeSAlcyBkb2VzIG5vdCBzdXBwb3J0cyBhbnkgb2YgJXMgcHJvdG9jb2xzLicsICR1cmwsIGltcGxvZGUoJywgJywgJHN1cHBvcnRlZFZlcnNpb25zKSkpOwp9CgokcmVhZGVyID0gJHRoaXMtPnJlYWRlck1hcFskc2VsZWN0ZWRSZXN0VmVyc2lvblsndmVyc2lvbiddXTsKJHBhY2thZ2VEZWZpbml0aW9ucyA9ICRyZWFkZXItPnJlYWQoJHNlbGVjdGVkUmVzdFZlcnNpb25bJ2Jhc2VVcmwnXSk7CgpyZXR1cm4gbmV3IENoYW5uZWxJbmZvKCRjaGFubmVsTmFtZSwgJGNoYW5uZWxBbGlhcywgJHBhY2thZ2VEZWZpbml0aW9ucyk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHNlbGVjdFJlc3RWZXJzaW9uKCRjaGFubmVsWG1sLCAkc3VwcG9ydGVkVmVyc2lvbnMpCnsKJGNoYW5uZWxYbWwtPnJlZ2lzdGVyWFBhdGhOYW1lc3BhY2UoJ25zJywgc2VsZjo6Q0hBTk5FTF9OUyk7Cgpmb3JlYWNoICgkc3VwcG9ydGVkVmVyc2lvbnMgYXMgJHZlcnNpb24pIHsKJHhwYXRoVGVzdCA9ICJuczpzZXJ2ZXJzL25zOnByaW1hcnkvbnM6cmVzdC9uczpiYXNldXJsW0B0eXBlPSd7JHZlcnNpb259J10iOwokdGVzdFJlc3VsdCA9ICRjaGFubmVsWG1sLT54cGF0aCgkeHBhdGhUZXN0KTsKaWYgKGNvdW50KCR0ZXN0UmVzdWx0KSA+IDApIHsKcmV0dXJuIGFycmF5KCd2ZXJzaW9uJyA9PiAkdmVyc2lvbiwgJ2Jhc2VVcmwnID0+IChzdHJpbmcpICR0ZXN0UmVzdWx0WzBdKTsKfQp9CgpyZXR1cm4gbnVsbDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUGVhcjsKCgoKCgoKY2xhc3MgUGFja2FnZUluZm8Kewpwcml2YXRlICRjaGFubmVsTmFtZTsKcHJpdmF0ZSAkcGFja2FnZU5hbWU7CnByaXZhdGUgJGxpY2Vuc2U7CnByaXZhdGUgJHNob3J0RGVzY3JpcHRpb247CnByaXZhdGUgJGRlc2NyaXB0aW9uOwpwcml2YXRlICRyZWxlYXNlczsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjaGFubmVsTmFtZSwgJHBhY2thZ2VOYW1lLCAkbGljZW5zZSwgJHNob3J0RGVzY3JpcHRpb24sICRkZXNjcmlwdGlvbiwgJHJlbGVhc2VzKQp7CiR0aGlzLT5jaGFubmVsTmFtZSA9ICRjaGFubmVsTmFtZTsKJHRoaXMtPnBhY2thZ2VOYW1lID0gJHBhY2thZ2VOYW1lOwokdGhpcy0+bGljZW5zZSA9ICRsaWNlbnNlOwokdGhpcy0+c2hvcnREZXNjcmlwdGlvbiA9ICRzaG9ydERlc2NyaXB0aW9uOwokdGhpcy0+ZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb247CiR0aGlzLT5yZWxlYXNlcyA9ICRyZWxlYXNlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENoYW5uZWxOYW1lKCkKewpyZXR1cm4gJHRoaXMtPmNoYW5uZWxOYW1lOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGFja2FnZU5hbWUoKQp7CnJldHVybiAkdGhpcy0+cGFja2FnZU5hbWU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbigpCnsKcmV0dXJuICR0aGlzLT5kZXNjcmlwdGlvbjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNob3J0RGVzY3JpcHRpb24oKQp7CnJldHVybiAkdGhpcy0+c2hvcnREZXNjcmlwdGlvbjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldExpY2Vuc2UoKQp7CnJldHVybiAkdGhpcy0+bGljZW5zZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlbGVhc2VzKCkKewpyZXR1cm4gJHRoaXMtPnJlbGVhc2VzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQZWFyOwoKCgoKCgpjbGFzcyBEZXBlbmRlbmN5Q29uc3RyYWludAp7CnByaXZhdGUgJHR5cGU7CnByaXZhdGUgJGNvbnN0cmFpbnQ7CnByaXZhdGUgJGNoYW5uZWxOYW1lOwpwcml2YXRlICRwYWNrYWdlTmFtZTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdHlwZSwgJGNvbnN0cmFpbnQsICRjaGFubmVsTmFtZSwgJHBhY2thZ2VOYW1lKQp7CiR0aGlzLT50eXBlID0gJHR5cGU7CiR0aGlzLT5jb25zdHJhaW50ID0gJGNvbnN0cmFpbnQ7CiR0aGlzLT5jaGFubmVsTmFtZSA9ICRjaGFubmVsTmFtZTsKJHRoaXMtPnBhY2thZ2VOYW1lID0gJHBhY2thZ2VOYW1lOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q2hhbm5lbE5hbWUoKQp7CnJldHVybiAkdGhpcy0+Y2hhbm5lbE5hbWU7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRDb25zdHJhaW50KCkKewpyZXR1cm4gJHRoaXMtPmNvbnN0cmFpbnQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQYWNrYWdlTmFtZSgpCnsKcmV0dXJuICR0aGlzLT5wYWNrYWdlTmFtZTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQp7CnJldHVybiAkdGhpcy0+dHlwZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUGVhcjsKCgoKCgoKCgoKCmNsYXNzIENoYW5uZWxSZXN0MTFSZWFkZXIgZXh0ZW5kcyBCYXNlQ2hhbm5lbFJlYWRlcgp7CnByaXZhdGUgJGRlcGVuZGVuY3lSZWFkZXI7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJmcykKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRyZnMpOwoKJHRoaXMtPmRlcGVuZGVuY3lSZWFkZXIgPSBuZXcgUGFja2FnZURlcGVuZGVuY3lQYXJzZXIoKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZWFkKCRiYXNlVXJsKQp7CnJldHVybiAkdGhpcy0+cmVhZENoYW5uZWxQYWNrYWdlcygkYmFzZVVybCk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHJlYWRDaGFubmVsUGFja2FnZXMoJGJhc2VVcmwpCnsKJHJlc3VsdCA9IGFycmF5KCk7CgokeG1sID0gJHRoaXMtPnJlcXVlc3RYbWwoJGJhc2VVcmwsICIvYy9jYXRlZ29yaWVzLnhtbCIpOwokeG1sLT5yZWdpc3RlclhQYXRoTmFtZXNwYWNlKCducycsIHNlbGY6OkFMTF9DQVRFR09SSUVTX05TKTsKZm9yZWFjaCAoJHhtbC0+eHBhdGgoJ25zOmMnKSBhcyAkbm9kZSkgewokY2F0ZWdvcnlOYW1lID0gKHN0cmluZykgJG5vZGU7CiRjYXRlZ29yeVBhY2thZ2VzID0gJHRoaXMtPnJlYWRDYXRlZ29yeVBhY2thZ2VzKCRiYXNlVXJsLCAkY2F0ZWdvcnlOYW1lKTsKJHJlc3VsdCA9IGFycmF5X21lcmdlKCRyZXN1bHQsICRjYXRlZ29yeVBhY2thZ2VzKTsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZWFkQ2F0ZWdvcnlQYWNrYWdlcygkYmFzZVVybCwgJGNhdGVnb3J5TmFtZSkKewokcmVzdWx0ID0gYXJyYXkoKTsKCiRjYXRlZ29yeVBhdGggPSAnL2MvJy51cmxlbmNvZGUoJGNhdGVnb3J5TmFtZSkuJy9wYWNrYWdlc2luZm8ueG1sJzsKJHhtbCA9ICR0aGlzLT5yZXF1ZXN0WG1sKCRiYXNlVXJsLCAkY2F0ZWdvcnlQYXRoKTsKJHhtbC0+cmVnaXN0ZXJYUGF0aE5hbWVzcGFjZSgnbnMnLCBzZWxmOjpDQVRFR09SWV9QQUNLQUdFU19JTkZPX05TKTsKZm9yZWFjaCAoJHhtbC0+eHBhdGgoJ25zOnBpJykgYXMgJG5vZGUpIHsKJHBhY2thZ2VJbmZvID0gJHRoaXMtPnBhcnNlUGFja2FnZSgkbm9kZSk7CiRyZXN1bHRbXSA9ICRwYWNrYWdlSW5mbzsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcGFyc2VQYWNrYWdlKCRwYWNrYWdlSW5mbykKewokcGFja2FnZUluZm8tPnJlZ2lzdGVyWFBhdGhOYW1lc3BhY2UoJ25zJywgc2VsZjo6Q0FURUdPUllfUEFDS0FHRVNfSU5GT19OUyk7CiRjaGFubmVsTmFtZSA9IChzdHJpbmcpICRwYWNrYWdlSW5mby0+cC0+YzsKJHBhY2thZ2VOYW1lID0gKHN0cmluZykgJHBhY2thZ2VJbmZvLT5wLT5uOwokbGljZW5zZSA9IChzdHJpbmcpICRwYWNrYWdlSW5mby0+cC0+bDsKJHNob3J0RGVzY3JpcHRpb24gPSAoc3RyaW5nKSAkcGFja2FnZUluZm8tPnAtPnM7CiRkZXNjcmlwdGlvbiA9IChzdHJpbmcpICRwYWNrYWdlSW5mby0+cC0+ZDsKCiRkZXBlbmRlbmNpZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcGFja2FnZUluZm8tPnhwYXRoKCduczpkZXBzJykgYXMgJG5vZGUpIHsKJGRlcGVuZGVuY3lWZXJzaW9uID0gKHN0cmluZykgJG5vZGUtPnY7CiRkZXBlbmRlbmN5QXJyYXkgPSB1bnNlcmlhbGl6ZSgoc3RyaW5nKSAkbm9kZS0+ZCk7CgokZGVwZW5kZW5jeUluZm8gPSAkdGhpcy0+ZGVwZW5kZW5jeVJlYWRlci0+YnVpbGREZXBlbmRlbmN5SW5mbygkZGVwZW5kZW5jeUFycmF5KTsKCiRkZXBlbmRlbmNpZXNbJGRlcGVuZGVuY3lWZXJzaW9uXSA9ICRkZXBlbmRlbmN5SW5mbzsKfQoKJHJlbGVhc2VzID0gYXJyYXkoKTsKJHJlbGVhc2VzSW5mbyA9ICRwYWNrYWdlSW5mby0+eHBhdGgoJ25zOmEvbnM6cicpOwppZiAoJHJlbGVhc2VzSW5mbykgewpmb3JlYWNoICgkcmVsZWFzZXNJbmZvIGFzICRub2RlKSB7CiRyZWxlYXNlVmVyc2lvbiA9IChzdHJpbmcpICRub2RlLT52OwokcmVsZWFzZVN0YWJpbGl0eSA9IChzdHJpbmcpICRub2RlLT5zOwokcmVsZWFzZXNbJHJlbGVhc2VWZXJzaW9uXSA9IG5ldyBSZWxlYXNlSW5mbygKJHJlbGVhc2VTdGFiaWxpdHksCmlzc2V0KCRkZXBlbmRlbmNpZXNbJHJlbGVhc2VWZXJzaW9uXSkgPyAkZGVwZW5kZW5jaWVzWyRyZWxlYXNlVmVyc2lvbl0gOiBuZXcgRGVwZW5kZW5jeUluZm8oYXJyYXkoKSwgYXJyYXkoKSkKKTsKfQp9CgpyZXR1cm4gbmV3IFBhY2thZ2VJbmZvKAokY2hhbm5lbE5hbWUsCiRwYWNrYWdlTmFtZSwKJGxpY2Vuc2UsCiRzaG9ydERlc2NyaXB0aW9uLAokZGVzY3JpcHRpb24sCiRyZWxlYXNlcwopOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQZWFyOwoKCgoKCgpjbGFzcyBSZWxlYXNlSW5mbwp7CnByaXZhdGUgJHN0YWJpbGl0eTsKcHJpdmF0ZSAkZGVwZW5kZW5jeUluZm87CgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzdGFiaWxpdHksICRkZXBlbmRlbmN5SW5mbykKewokdGhpcy0+c3RhYmlsaXR5ID0gJHN0YWJpbGl0eTsKJHRoaXMtPmRlcGVuZGVuY3lJbmZvID0gJGRlcGVuZGVuY3lJbmZvOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGVwZW5kZW5jeUluZm8oKQp7CnJldHVybiAkdGhpcy0+ZGVwZW5kZW5jeUluZm87Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHkoKQp7CnJldHVybiAkdGhpcy0+c3RhYmlsaXR5Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxQZWFyOwoKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKCgoKCgoKCgphYnN0cmFjdCBjbGFzcyBCYXNlQ2hhbm5lbFJlYWRlcgp7CgoKCmNvbnN0IENIQU5ORUxfTlMgPSAnaHR0cDovL3BlYXIucGhwLm5ldC9jaGFubmVsLTEuMCc7CmNvbnN0IEFMTF9DQVRFR09SSUVTX05TID0gJ2h0dHA6Ly9wZWFyLnBocC5uZXQvZHRkL3Jlc3QuYWxsY2F0ZWdvcmllcyc7CmNvbnN0IENBVEVHT1JZX1BBQ0tBR0VTX0lORk9fTlMgPSAnaHR0cDovL3BlYXIucGhwLm5ldC9kdGQvcmVzdC5jYXRlZ29yeXBhY2thZ2VpbmZvJzsKY29uc3QgQUxMX1BBQ0tBR0VTX05TID0gJ2h0dHA6Ly9wZWFyLnBocC5uZXQvZHRkL3Jlc3QuYWxscGFja2FnZXMnOwpjb25zdCBBTExfUkVMRUFTRVNfTlMgPSAnaHR0cDovL3BlYXIucGhwLm5ldC9kdGQvcmVzdC5hbGxyZWxlYXNlcyc7CmNvbnN0IFBBQ0tBR0VfSU5GT19OUyA9ICdodHRwOi8vcGVhci5waHAubmV0L2R0ZC9yZXN0LnBhY2thZ2UnOwoKCnByaXZhdGUgJHJmczsKCnByb3RlY3RlZCBmdW5jdGlvbiBfX2NvbnN0cnVjdChSZW1vdGVGaWxlc3lzdGVtICRyZnMpCnsKJHRoaXMtPnJmcyA9ICRyZnM7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHJlcXVlc3RDb250ZW50KCRvcmlnaW4sICRwYXRoKQp7CiR1cmwgPSBydHJpbSgkb3JpZ2luLCAnLycpIC4gJy8nIC4gbHRyaW0oJHBhdGgsICcvJyk7CiRjb250ZW50ID0gJHRoaXMtPnJmcy0+Z2V0Q29udGVudHMoJG9yaWdpbiwgJHVybCwgZmFsc2UpOwppZiAoISRjb250ZW50KSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdUaGUgUEVBUiBjaGFubmVsIGF0ICcgLiAkdXJsIC4gJyBkaWQgbm90IHJlc3BvbmQuJyk7Cn0KCnJldHVybiAkY29udGVudDsKfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gcmVxdWVzdFhtbCgkb3JpZ2luLCAkcGF0aCkKewoKICR4bWwgPSBzaW1wbGV4bWxfbG9hZF9zdHJpbmcoJHRoaXMtPnJlcXVlc3RDb250ZW50KCRvcmlnaW4sICRwYXRoKSwgIlNpbXBsZVhNTEVsZW1lbnQiLCBMSUJYTUxfTk9FUlJPUik7CgppZiAoZmFsc2UgPT0gJHhtbCkgewokdXJsID0gcnRyaW0oJG9yaWdpbiwgJy8nKSAuICcvJyAuIGx0cmltKCRwYXRoLCAnLycpOwp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgUEVBUiBjaGFubmVsIGF0ICcgLiAkb3JpZ2luIC4gJyBpcyBicm9rZW4uIChJbnZhbGlkIFhNTCBhdCBmaWxlIGAlc2ApJywgJHBhdGgpKTsKfQoKcmV0dXJuICR4bWw7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5XFBlYXI7Cgp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxUcmFuc3BvcnRFeGNlcHRpb247CgoKCgoKCgoKCgoKCmNsYXNzIENoYW5uZWxSZXN0MTBSZWFkZXIgZXh0ZW5kcyBCYXNlQ2hhbm5lbFJlYWRlcgp7CnByaXZhdGUgJGRlcGVuZGVuY3lSZWFkZXI7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJmcykKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRyZnMpOwoKJHRoaXMtPmRlcGVuZGVuY3lSZWFkZXIgPSBuZXcgUGFja2FnZURlcGVuZGVuY3lQYXJzZXIoKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZWFkKCRiYXNlVXJsKQp7CnJldHVybiAkdGhpcy0+cmVhZFBhY2thZ2VzKCRiYXNlVXJsKTsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVhZFBhY2thZ2VzKCRiYXNlVXJsKQp7CiRyZXN1bHQgPSBhcnJheSgpOwoKJHhtbFBhdGggPSAnL3AvcGFja2FnZXMueG1sJzsKJHhtbCA9ICR0aGlzLT5yZXF1ZXN0WG1sKCRiYXNlVXJsLCAkeG1sUGF0aCk7CiR4bWwtPnJlZ2lzdGVyWFBhdGhOYW1lc3BhY2UoJ25zJywgc2VsZjo6QUxMX1BBQ0tBR0VTX05TKTsKZm9yZWFjaCAoJHhtbC0+eHBhdGgoJ25zOnAnKSBhcyAkbm9kZSkgewokcGFja2FnZU5hbWUgPSAoc3RyaW5nKSAkbm9kZTsKJHBhY2thZ2VJbmZvID0gJHRoaXMtPnJlYWRQYWNrYWdlKCRiYXNlVXJsLCAkcGFja2FnZU5hbWUpOwokcmVzdWx0W10gPSAkcGFja2FnZUluZm87Cn0KCnJldHVybiAkcmVzdWx0Owp9CgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVhZFBhY2thZ2UoJGJhc2VVcmwsICRwYWNrYWdlTmFtZSkKewokeG1sUGF0aCA9ICcvcC8nIC4gc3RydG9sb3dlcigkcGFja2FnZU5hbWUpIC4gJy9pbmZvLnhtbCc7CiR4bWwgPSAkdGhpcy0+cmVxdWVzdFhtbCgkYmFzZVVybCwgJHhtbFBhdGgpOwokeG1sLT5yZWdpc3RlclhQYXRoTmFtZXNwYWNlKCducycsIHNlbGY6OlBBQ0tBR0VfSU5GT19OUyk7CgokY2hhbm5lbE5hbWUgPSAoc3RyaW5nKSAkeG1sLT5jOwokcGFja2FnZU5hbWUgPSAoc3RyaW5nKSAkeG1sLT5uOwokbGljZW5zZSA9IChzdHJpbmcpICR4bWwtPmw7CiRzaG9ydERlc2NyaXB0aW9uID0gKHN0cmluZykgJHhtbC0+czsKJGRlc2NyaXB0aW9uID0gKHN0cmluZykgJHhtbC0+ZDsKCnJldHVybiBuZXcgUGFja2FnZUluZm8oCiRjaGFubmVsTmFtZSwKJHBhY2thZ2VOYW1lLAokbGljZW5zZSwKJHNob3J0RGVzY3JpcHRpb24sCiRkZXNjcmlwdGlvbiwKJHRoaXMtPnJlYWRQYWNrYWdlUmVsZWFzZXMoJGJhc2VVcmwsICRwYWNrYWdlTmFtZSkKKTsKfQoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZWFkUGFja2FnZVJlbGVhc2VzKCRiYXNlVXJsLCAkcGFja2FnZU5hbWUpCnsKJHJlc3VsdCA9IGFycmF5KCk7Cgp0cnkgewokeG1sUGF0aCA9ICcvci8nIC4gc3RydG9sb3dlcigkcGFja2FnZU5hbWUpIC4gJy9hbGxyZWxlYXNlcy54bWwnOwokeG1sID0gJHRoaXMtPnJlcXVlc3RYbWwoJGJhc2VVcmwsICR4bWxQYXRoKTsKJHhtbC0+cmVnaXN0ZXJYUGF0aE5hbWVzcGFjZSgnbnMnLCBzZWxmOjpBTExfUkVMRUFTRVNfTlMpOwpmb3JlYWNoICgkeG1sLT54cGF0aCgnbnM6cicpIGFzICRub2RlKSB7CiRyZWxlYXNlVmVyc2lvbiA9IChzdHJpbmcpICRub2RlLT52OwokcmVsZWFzZVN0YWJpbGl0eSA9IChzdHJpbmcpICRub2RlLT5zOwoKdHJ5IHsKJHJlc3VsdFskcmVsZWFzZVZlcnNpb25dID0gbmV3IFJlbGVhc2VJbmZvKAokcmVsZWFzZVN0YWJpbGl0eSwKJHRoaXMtPnJlYWRQYWNrYWdlUmVsZWFzZURlcGVuZGVuY2llcygkYmFzZVVybCwgJHBhY2thZ2VOYW1lLCAkcmVsZWFzZVZlcnNpb24pCik7Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CmlmICgkZXhjZXB0aW9uLT5nZXRDb2RlKCkgIT0gNDA0KSB7CnRocm93ICRleGNlcHRpb247Cn0KfQp9Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7CmlmICgkZXhjZXB0aW9uLT5nZXRDb2RlKCkgIT0gNDA0KSB7CnRocm93ICRleGNlcHRpb247Cn0KfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVhZFBhY2thZ2VSZWxlYXNlRGVwZW5kZW5jaWVzKCRiYXNlVXJsLCAkcGFja2FnZU5hbWUsICR2ZXJzaW9uKQp7CiRkZXBlbmRlbmN5UmVhZGVyID0gbmV3IFBhY2thZ2VEZXBlbmRlbmN5UGFyc2VyKCk7CgokZGVwdGhQYXRoID0gJy9yLycgLiBzdHJ0b2xvd2VyKCRwYWNrYWdlTmFtZSkgLiAnL2RlcHMuJyAuICR2ZXJzaW9uIC4gJy50eHQnOwokY29udGVudCA9ICR0aGlzLT5yZXF1ZXN0Q29udGVudCgkYmFzZVVybCwgJGRlcHRoUGF0aCk7CiRkZXBlbmRlbmN5QXJyYXkgPSB1bnNlcmlhbGl6ZSgkY29udGVudCk7CiRyZXN1bHQgPSAkZGVwZW5kZW5jeVJlYWRlci0+YnVpbGREZXBlbmRlbmN5SW5mbygkZGVwZW5kZW5jeUFycmF5KTsKCnJldHVybiAkcmVzdWx0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CgoKCgoKCgoKaW50ZXJmYWNlIFJlcG9zaXRvcnlJbnRlcmZhY2UgZXh0ZW5kcyBcQ291bnRhYmxlCnsKY29uc3QgU0VBUkNIX0ZVTExURVhUID0gMDsKY29uc3QgU0VBUkNIX05BTUUgPSAxOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNQYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpOwoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZFBhY2thZ2UoJG5hbWUsICR2ZXJzaW9uKTsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbmRQYWNrYWdlcygkbmFtZSwgJHZlcnNpb24gPSBudWxsKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhY2thZ2VzKCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNlYXJjaCgkcXVlcnksICRtb2RlID0gMCk7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUmVwb3NpdG9yeTsKCnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxQYWNrYWdlXExvYWRlclxBcnJheUxvYWRlcjsKCgoKCmNsYXNzIEFydGlmYWN0UmVwb3NpdG9yeSBleHRlbmRzIEFycmF5UmVwb3NpdG9yeQp7Cgpwcm90ZWN0ZWQgJGxvYWRlcjsKCnByb3RlY3RlZCAkbG9va3VwOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRyZXBvQ29uZmlnLCBJT0ludGVyZmFjZSAkaW8pCnsKaWYgKCFleHRlbnNpb25fbG9hZGVkKCd6aXAnKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBhcnRpZmFjdCByZXBvc2l0b3J5IHJlcXVpcmVzIFBIUFwncyB6aXAgZXh0ZW5zaW9uJyk7Cn0KCiR0aGlzLT5sb2FkZXIgPSBuZXcgQXJyYXlMb2FkZXIoKTsKJHRoaXMtPmxvb2t1cCA9ICRyZXBvQ29uZmlnWyd1cmwnXTsKJHRoaXMtPmlvID0gJGlvOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKcGFyZW50Ojppbml0aWFsaXplKCk7CgokdGhpcy0+c2NhbkRpcmVjdG9yeSgkdGhpcy0+bG9va3VwKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBzY2FuRGlyZWN0b3J5KCRwYXRoKQp7CiRpbyA9ICR0aGlzLT5pbzsKCiRkaXJlY3RvcnkgPSBuZXcgXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRwYXRoKTsKJGl0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKCRkaXJlY3RvcnkpOwokcmVnZXggPSBuZXcgXFJlZ2V4SXRlcmF0b3IoJGl0ZXJhdG9yLCAnL14uK1wuKHppcHxwaGFyKSQvaScpOwpmb3JlYWNoICgkcmVnZXggYXMgJGZpbGUpIHsKCmlmICghJGZpbGUtPmlzRmlsZSgpKSB7CmNvbnRpbnVlOwp9CgokcGFja2FnZSA9ICR0aGlzLT5nZXRDb21wb3NlckluZm9ybWF0aW9uKCRmaWxlKTsKaWYgKCEkcGFja2FnZSkgewppZiAoJGlvLT5pc1ZlcmJvc2UoKSkgewokaW8tPndyaXRlKCJGaWxlIDxjb21tZW50PnskZmlsZS0+Z2V0QmFzZW5hbWUoKX08L2NvbW1lbnQ+IGRvZXNuJ3Qgc2VlbSB0byBob2xkIGEgcGFja2FnZSIpOwp9CmNvbnRpbnVlOwp9CgppZiAoJGlvLT5pc1ZlcmJvc2UoKSkgewokdGVtcGxhdGUgPSAnRm91bmQgcGFja2FnZSA8aW5mbz4lczwvaW5mbz4gKDxjb21tZW50PiVzPC9jb21tZW50PikgaW4gZmlsZSA8aW5mbz4lczwvaW5mbz4nOwokaW8tPndyaXRlKHNwcmludGYoJHRlbXBsYXRlLCAkcGFja2FnZS0+Z2V0TmFtZSgpLCAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpLCAkZmlsZS0+Z2V0QmFzZW5hbWUoKSkpOwp9CgokdGhpcy0+YWRkUGFja2FnZSgkcGFja2FnZSk7Cn0KfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gbG9jYXRlRmlsZShcWmlwQXJjaGl2ZSAkemlwLCAkZmlsZW5hbWUpIHsKJGluZGV4T2ZTaG9ydGVzdE1hdGNoID0gZmFsc2U7CiRsZW5ndGhPZlNob3J0ZXN0TWF0Y2ggPSAtMTsKCmZvciAoJGkgPSAwOyAkaSA8ICR6aXAtPm51bUZpbGVzOyAkaSsrICl7CiRzdGF0ID0gJHppcC0+c3RhdEluZGV4KCRpKTsKaWYgKHN0cmNtcChiYXNlbmFtZSgkc3RhdFsnbmFtZSddKSwgJGZpbGVuYW1lKSA9PT0gMCl7CiRkaXJlY3RvcnlOYW1lID0gZGlybmFtZSgkc3RhdFsnbmFtZSddKTsKaWYgKCRkaXJlY3RvcnlOYW1lID09ICcuJykgewoKIAogcmV0dXJuICRpOwp9CgppZihzdHJwb3MoJGRpcmVjdG9yeU5hbWUsICdcXCcpICE9PSBmYWxzZSB8fApzdHJwb3MoJGRpcmVjdG9yeU5hbWUsICcvJykgIT09IGZhbHNlKSB7CgogY29udGludWU7Cn0KCiRsZW5ndGggPSBzdHJsZW4oJHN0YXRbJ25hbWUnXSk7CmlmICgkaW5kZXhPZlNob3J0ZXN0TWF0Y2ggPT0gZmFsc2UgfHwgJGxlbmd0aCA8ICRsZW5ndGhPZlNob3J0ZXN0TWF0Y2gpIHsKCiAkY29udGVudHMgPSAkemlwLT5nZXRGcm9tSW5kZXgoJGkpOwppZiAoJGNvbnRlbnRzICE9PSBmYWxzZSkgewokaW5kZXhPZlNob3J0ZXN0TWF0Y2ggPSAkaTsKJGxlbmd0aE9mU2hvcnRlc3RNYXRjaCA9ICRsZW5ndGg7Cn0KfQp9Cn0KCnJldHVybiAkaW5kZXhPZlNob3J0ZXN0TWF0Y2g7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbihcU3BsRmlsZUluZm8gJGZpbGUpCnsKJHppcCA9IG5ldyBcWmlwQXJjaGl2ZSgpOwokemlwLT5vcGVuKCRmaWxlLT5nZXRQYXRobmFtZSgpKTsKCmlmICgwID09ICR6aXAtPm51bUZpbGVzKSB7CnJldHVybiBmYWxzZTsKfQoKJGZvdW5kRmlsZUluZGV4ID0gJHRoaXMtPmxvY2F0ZUZpbGUoJHppcCwgJ2NvbXBvc2VyLmpzb24nKTsKaWYgKGZhbHNlID09PSAkZm91bmRGaWxlSW5kZXgpIHsKcmV0dXJuIGZhbHNlOwp9CgokY29uZmlndXJhdGlvbkZpbGVOYW1lID0gJHppcC0+Z2V0TmFtZUluZGV4KCRmb3VuZEZpbGVJbmRleCk7CgokY29tcG9zZXJGaWxlID0gInppcDovL3skZmlsZS0+Z2V0UGF0aG5hbWUoKX0jJGNvbmZpZ3VyYXRpb25GaWxlTmFtZSI7CiRqc29uID0gZmlsZV9nZXRfY29udGVudHMoJGNvbXBvc2VyRmlsZSk7CgokcGFja2FnZSA9IEpzb25GaWxlOjpwYXJzZUpzb24oJGpzb24sICRjb21wb3NlckZpbGUpOwokcGFja2FnZVsnZGlzdCddID0gYXJyYXkoCid0eXBlJyA9PiAnemlwJywKJ3VybCcgPT4gJGZpbGUtPmdldFJlYWxQYXRoKCksCidzaGFzdW0nID0+IHNoYTFfZmlsZSgkZmlsZS0+Z2V0UmVhbFBhdGgoKSkKKTsKCiRwYWNrYWdlID0gJHRoaXMtPmxvYWRlci0+bG9hZCgkcGFja2FnZSk7CgpyZXR1cm4gJHBhY2thZ2U7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxSZXBvc2l0b3J5OwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyXEFycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcVmFsaWRhdGluZ0FycmF5TG9hZGVyOwoKCgoKCgpjbGFzcyBQYWNrYWdlUmVwb3NpdG9yeSBleHRlbmRzIEFycmF5UmVwb3NpdG9yeQp7CnByaXZhdGUgJGNvbmZpZzsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRjb25maWcpCnsKJHRoaXMtPmNvbmZpZyA9ICRjb25maWdbJ3BhY2thZ2UnXTsKCgogaWYgKCFpc19udW1lcmljKGtleSgkdGhpcy0+Y29uZmlnKSkpIHsKJHRoaXMtPmNvbmZpZyA9IGFycmF5KCR0aGlzLT5jb25maWcpOwp9Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBpbml0aWFsaXplKCkKewpwYXJlbnQ6OmluaXRpYWxpemUoKTsKCiRsb2FkZXIgPSBuZXcgVmFsaWRhdGluZ0FycmF5TG9hZGVyKG5ldyBBcnJheUxvYWRlciwgZmFsc2UpOwpmb3JlYWNoICgkdGhpcy0+Y29uZmlnIGFzICRwYWNrYWdlKSB7CnRyeSB7CiRwYWNrYWdlID0gJGxvYWRlci0+bG9hZCgkcGFja2FnZSk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKdGhyb3cgbmV3IEludmFsaWRSZXBvc2l0b3J5RXhjZXB0aW9uKCdBIHJlcG9zaXRvcnkgb2YgdHlwZSAicGFja2FnZSIgY29udGFpbnMgYW4gaW52YWxpZCBwYWNrYWdlIGRlZmluaXRpb246ICcuJGUtPmdldE1lc3NhZ2UoKS4iXG5cbkludmFsaWQgcGFja2FnZSBkZWZpbml0aW9uOlxuIi5qc29uX2VuY29kZSgkcGFja2FnZSkpOwp9CgokdGhpcy0+YWRkUGFja2FnZSgkcGFja2FnZSk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2U7CgoKCgoKCmNsYXNzIENvbXBsZXRlUGFja2FnZSBleHRlbmRzIFBhY2thZ2UgaW1wbGVtZW50cyBDb21wbGV0ZVBhY2thZ2VJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJHJlcG9zaXRvcmllczsKcHJvdGVjdGVkICRsaWNlbnNlID0gYXJyYXkoKTsKcHJvdGVjdGVkICRrZXl3b3JkczsKcHJvdGVjdGVkICRhdXRob3JzOwpwcm90ZWN0ZWQgJGRlc2NyaXB0aW9uOwpwcm90ZWN0ZWQgJGhvbWVwYWdlOwpwcm90ZWN0ZWQgJHNjcmlwdHMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHN1cHBvcnQgPSBhcnJheSgpOwoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNjcmlwdHMoYXJyYXkgJHNjcmlwdHMpCnsKJHRoaXMtPnNjcmlwdHMgPSAkc2NyaXB0czsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNjcmlwdHMoKQp7CnJldHVybiAkdGhpcy0+c2NyaXB0czsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UmVwb3NpdG9yaWVzKCRyZXBvc2l0b3JpZXMpCnsKJHRoaXMtPnJlcG9zaXRvcmllcyA9ICRyZXBvc2l0b3JpZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXBvc2l0b3JpZXMoKQp7CnJldHVybiAkdGhpcy0+cmVwb3NpdG9yaWVzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRMaWNlbnNlKGFycmF5ICRsaWNlbnNlKQp7CiR0aGlzLT5saWNlbnNlID0gJGxpY2Vuc2U7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMaWNlbnNlKCkKewpyZXR1cm4gJHRoaXMtPmxpY2Vuc2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEtleXdvcmRzKGFycmF5ICRrZXl3b3JkcykKewokdGhpcy0+a2V5d29yZHMgPSAka2V5d29yZHM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRLZXl3b3JkcygpCnsKcmV0dXJuICR0aGlzLT5rZXl3b3JkczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QXV0aG9ycyhhcnJheSAkYXV0aG9ycykKewokdGhpcy0+YXV0aG9ycyA9ICRhdXRob3JzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXV0aG9ycygpCnsKcmV0dXJuICR0aGlzLT5hdXRob3JzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZXNjcmlwdGlvbigkZGVzY3JpcHRpb24pCnsKJHRoaXMtPmRlc2NyaXB0aW9uID0gJGRlc2NyaXB0aW9uOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRpb24oKQp7CnJldHVybiAkdGhpcy0+ZGVzY3JpcHRpb247Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEhvbWVwYWdlKCRob21lcGFnZSkKewokdGhpcy0+aG9tZXBhZ2UgPSAkaG9tZXBhZ2U7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRIb21lcGFnZSgpCnsKcmV0dXJuICR0aGlzLT5ob21lcGFnZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0U3VwcG9ydChhcnJheSAkc3VwcG9ydCkKewokdGhpcy0+c3VwcG9ydCA9ICRzdXBwb3J0Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3VwcG9ydCgpCnsKcmV0dXJuICR0aGlzLT5zdXBwb3J0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxEdW1wZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxCYXNlUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQ29tcGxldGVQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxSb290UGFja2FnZUludGVyZmFjZTsKCgoKCgpjbGFzcyBBcnJheUR1bXBlcgp7CnB1YmxpYyBmdW5jdGlvbiBkdW1wKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJGtleXMgPSBhcnJheSgKJ2JpbmFyaWVzJyA9PiAnYmluJywKJ3R5cGUnLAonZXh0cmEnLAonaW5zdGFsbGF0aW9uU291cmNlJyA9PiAnaW5zdGFsbGF0aW9uLXNvdXJjZScsCidhdXRvbG9hZCcsCidkZXZBdXRvbG9hZCcgPT4gJ2F1dG9sb2FkLWRldicsCidub3RpZmljYXRpb25VcmwnID0+ICdub3RpZmljYXRpb24tdXJsJywKJ2luY2x1ZGVQYXRocycgPT4gJ2luY2x1ZGUtcGF0aCcsCik7CgokZGF0YSA9IGFycmF5KCk7CiRkYXRhWyduYW1lJ10gPSAkcGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpOwokZGF0YVsndmVyc2lvbiddID0gJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKTsKJGRhdGFbJ3ZlcnNpb25fbm9ybWFsaXplZCddID0gJHBhY2thZ2UtPmdldFZlcnNpb24oKTsKCmlmICgkcGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCkpIHsKJGRhdGFbJ3RhcmdldC1kaXInXSA9ICRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKTsKfQoKaWYgKCRwYWNrYWdlLT5nZXRTb3VyY2VUeXBlKCkpIHsKJGRhdGFbJ3NvdXJjZSddWyd0eXBlJ10gPSAkcGFja2FnZS0+Z2V0U291cmNlVHlwZSgpOwokZGF0YVsnc291cmNlJ11bJ3VybCddID0gJHBhY2thZ2UtPmdldFNvdXJjZVVybCgpOwokZGF0YVsnc291cmNlJ11bJ3JlZmVyZW5jZSddID0gJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpOwp9CgppZiAoJHBhY2thZ2UtPmdldERpc3RUeXBlKCkpIHsKJGRhdGFbJ2Rpc3QnXVsndHlwZSddID0gJHBhY2thZ2UtPmdldERpc3RUeXBlKCk7CiRkYXRhWydkaXN0J11bJ3VybCddID0gJHBhY2thZ2UtPmdldERpc3RVcmwoKTsKJGRhdGFbJ2Rpc3QnXVsncmVmZXJlbmNlJ10gPSAkcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpOwokZGF0YVsnZGlzdCddWydzaGFzdW0nXSA9ICRwYWNrYWdlLT5nZXREaXN0U2hhMUNoZWNrc3VtKCk7Cn0KCmlmICgkcGFja2FnZS0+Z2V0QXJjaGl2ZUV4Y2x1ZGVzKCkpIHsKJGRhdGFbJ2FyY2hpdmUnXVsnZXhjbHVkZSddID0gJHBhY2thZ2UtPmdldEFyY2hpdmVFeGNsdWRlcygpOwp9Cgpmb3JlYWNoIChCYXNlUGFja2FnZTo6JHN1cHBvcnRlZExpbmtUeXBlcyBhcyAkdHlwZSA9PiAkb3B0cykgewppZiAoJGxpbmtzID0gJHBhY2thZ2UtPnsnZ2V0Jy51Y2ZpcnN0KCRvcHRzWydtZXRob2QnXSl9KCkpIHsKZm9yZWFjaCAoJGxpbmtzIGFzICRsaW5rKSB7CiRkYXRhWyR0eXBlXVskbGluay0+Z2V0VGFyZ2V0KCldID0gJGxpbmstPmdldFByZXR0eUNvbnN0cmFpbnQoKTsKfQprc29ydCgkZGF0YVskdHlwZV0pOwp9Cn0KCmlmICgkcGFja2FnZXMgPSAkcGFja2FnZS0+Z2V0U3VnZ2VzdHMoKSkgewprc29ydCgkcGFja2FnZXMpOwokZGF0YVsnc3VnZ2VzdCddID0gJHBhY2thZ2VzOwp9CgppZiAoJHBhY2thZ2UtPmdldFJlbGVhc2VEYXRlKCkpIHsKJGRhdGFbJ3RpbWUnXSA9ICRwYWNrYWdlLT5nZXRSZWxlYXNlRGF0ZSgpLT5mb3JtYXQoJ1ktbS1kIEg6aTpzJyk7Cn0KCiRkYXRhID0gJHRoaXMtPmR1bXBWYWx1ZXMoJHBhY2thZ2UsICRrZXlzLCAkZGF0YSk7CgppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBDb21wbGV0ZVBhY2thZ2VJbnRlcmZhY2UpIHsKJGtleXMgPSBhcnJheSgKJ3NjcmlwdHMnLAonbGljZW5zZScsCidhdXRob3JzJywKJ2Rlc2NyaXB0aW9uJywKJ2hvbWVwYWdlJywKJ2tleXdvcmRzJywKJ3JlcG9zaXRvcmllcycsCidzdXBwb3J0JywKKTsKCiRkYXRhID0gJHRoaXMtPmR1bXBWYWx1ZXMoJHBhY2thZ2UsICRrZXlzLCAkZGF0YSk7CgppZiAoaXNzZXQoJGRhdGFbJ2tleXdvcmRzJ10pICYmIGlzX2FycmF5KCRkYXRhWydrZXl3b3JkcyddKSkgewpzb3J0KCRkYXRhWydrZXl3b3JkcyddKTsKfQp9CgppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBSb290UGFja2FnZUludGVyZmFjZSkgewokbWluaW11bVN0YWJpbGl0eSA9ICRwYWNrYWdlLT5nZXRNaW5pbXVtU3RhYmlsaXR5KCk7CmlmICgkbWluaW11bVN0YWJpbGl0eSkgewokZGF0YVsnbWluaW11bS1zdGFiaWxpdHknXSA9ICRtaW5pbXVtU3RhYmlsaXR5Owp9Cn0KCnJldHVybiAkZGF0YTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBkdW1wVmFsdWVzKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsIGFycmF5ICRrZXlzLCBhcnJheSAkZGF0YSkKewpmb3JlYWNoICgka2V5cyBhcyAkbWV0aG9kID0+ICRrZXkpIHsKaWYgKGlzX251bWVyaWMoJG1ldGhvZCkpIHsKJG1ldGhvZCA9ICRrZXk7Cn0KCiRnZXR0ZXIgPSAnZ2V0Jy51Y2ZpcnN0KCRtZXRob2QpOwokdmFsdWUgPSAkcGFja2FnZS0+JGdldHRlcigpOwoKaWYgKG51bGwgIT09ICR2YWx1ZSAmJiAhKGlzX2FycmF5KCR2YWx1ZSkgJiYgMCA9PT0gY291bnQoJHZhbHVlKSkpIHsKJGRhdGFbJGtleV0gPSAkdmFsdWU7Cn0KfQoKcmV0dXJuICRkYXRhOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXI7CgoKCgpjbGFzcyBJbnZhbGlkUGFja2FnZUV4Y2VwdGlvbiBleHRlbmRzIFxFeGNlcHRpb24Kewpwcml2YXRlICRlcnJvcnM7CnByaXZhdGUgJHdhcm5pbmdzOwpwcml2YXRlICRkYXRhOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRlcnJvcnMsIGFycmF5ICR3YXJuaW5ncywgYXJyYXkgJGRhdGEpCnsKJHRoaXMtPmVycm9ycyA9ICRlcnJvcnM7CiR0aGlzLT53YXJuaW5ncyA9ICR3YXJuaW5nczsKJHRoaXMtPmRhdGEgPSAkZGF0YTsKcGFyZW50OjpfX2NvbnN0cnVjdCgiSW52YWxpZCBwYWNrYWdlIGluZm9ybWF0aW9uOiBcbiIuaW1wbG9kZSgiXG4iLCBhcnJheV9tZXJnZSgkZXJyb3JzLCAkd2FybmluZ3MpKSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXREYXRhKCkKewpyZXR1cm4gJHRoaXMtPmRhdGE7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQp7CnJldHVybiAkdGhpcy0+ZXJyb3JzOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0V2FybmluZ3MoKQp7CnJldHVybiAkdGhpcy0+d2FybmluZ3M7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXExvYWRlcjsKCnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwoKCgoKY2xhc3MgSnNvbkxvYWRlcgp7CnByaXZhdGUgJGxvYWRlcjsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChMb2FkZXJJbnRlcmZhY2UgJGxvYWRlcikKewokdGhpcy0+bG9hZGVyID0gJGxvYWRlcjsKfQoKCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkKCRqc29uKQp7CmlmICgkanNvbiBpbnN0YW5jZW9mIEpzb25GaWxlKSB7CiRjb25maWcgPSAkanNvbi0+cmVhZCgpOwp9IGVsc2VpZiAoZmlsZV9leGlzdHMoJGpzb24pKSB7CiRjb25maWcgPSBKc29uRmlsZTo6cGFyc2VKc29uKGZpbGVfZ2V0X2NvbnRlbnRzKCRqc29uKSwgJGpzb24pOwp9IGVsc2VpZiAoaXNfc3RyaW5nKCRqc29uKSkgewokY29uZmlnID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkanNvbik7Cn0KCnJldHVybiAkdGhpcy0+bG9hZGVyLT5sb2FkKCRjb25maWcpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXI7CgoKCgoKCmludGVyZmFjZSBMb2FkZXJJbnRlcmZhY2UKewoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJHBhY2thZ2UsICRjbGFzcyA9ICdDb21wb3NlclxQYWNrYWdlXENvbXBsZXRlUGFja2FnZScpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUm9vdEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUm9vdFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKCgoKCgpjbGFzcyBBcnJheUxvYWRlciBpbXBsZW1lbnRzIExvYWRlckludGVyZmFjZQp7CnByb3RlY3RlZCAkdmVyc2lvblBhcnNlcjsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChWZXJzaW9uUGFyc2VyICRwYXJzZXIgPSBudWxsKQp7CmlmICghJHBhcnNlcikgewokcGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXI7Cn0KJHRoaXMtPnZlcnNpb25QYXJzZXIgPSAkcGFyc2VyOwp9CgpwdWJsaWMgZnVuY3Rpb24gbG9hZChhcnJheSAkY29uZmlnLCAkY2xhc3MgPSAnQ29tcG9zZXJcUGFja2FnZVxDb21wbGV0ZVBhY2thZ2UnKQp7CmlmICghaXNzZXQoJGNvbmZpZ1snbmFtZSddKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignVW5rbm93biBwYWNrYWdlIGhhcyBubyBuYW1lIGRlZmluZWQgKCcuanNvbl9lbmNvZGUoJGNvbmZpZykuJykuJyk7Cn0KaWYgKCFpc3NldCgkY29uZmlnWyd2ZXJzaW9uJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdQYWNrYWdlICcuJGNvbmZpZ1snbmFtZSddLicgaGFzIG5vIHZlcnNpb24gZGVmaW5lZC4nKTsKfQoKCiBpZiAoaXNzZXQoJGNvbmZpZ1sndmVyc2lvbl9ub3JtYWxpemVkJ10pKSB7CiR2ZXJzaW9uID0gJGNvbmZpZ1sndmVyc2lvbl9ub3JtYWxpemVkJ107Cn0gZWxzZSB7CiR2ZXJzaW9uID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgkY29uZmlnWyd2ZXJzaW9uJ10pOwp9CiRwYWNrYWdlID0gbmV3ICRjbGFzcygkY29uZmlnWyduYW1lJ10sICR2ZXJzaW9uLCAkY29uZmlnWyd2ZXJzaW9uJ10pOwokcGFja2FnZS0+c2V0VHlwZShpc3NldCgkY29uZmlnWyd0eXBlJ10pID8gc3RydG9sb3dlcigkY29uZmlnWyd0eXBlJ10pIDogJ2xpYnJhcnknKTsKCmlmIChpc3NldCgkY29uZmlnWyd0YXJnZXQtZGlyJ10pKSB7CiRwYWNrYWdlLT5zZXRUYXJnZXREaXIoJGNvbmZpZ1sndGFyZ2V0LWRpciddKTsKfQoKaWYgKGlzc2V0KCRjb25maWdbJ2V4dHJhJ10pICYmIGlzX2FycmF5KCRjb25maWdbJ2V4dHJhJ10pKSB7CiRwYWNrYWdlLT5zZXRFeHRyYSgkY29uZmlnWydleHRyYSddKTsKfQoKaWYgKGlzc2V0KCRjb25maWdbJ2JpbiddKSkgewppZiAoIWlzX2FycmF5KCRjb25maWdbJ2JpbiddKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbignUGFja2FnZSAnLiRjb25maWdbJ25hbWUnXS4nXCdzIGJpbiBrZXkgc2hvdWxkIGJlIGFuIGFycmF5LCAnLmdldHR5cGUoJGNvbmZpZ1snYmluJ10pLicgZ2l2ZW4uJyk7Cn0KZm9yZWFjaCAoJGNvbmZpZ1snYmluJ10gYXMgJGtleSA9PiAkYmluKSB7CiRjb25maWdbJ2JpbiddWyRrZXldPSBsdHJpbSgkYmluLCAnLycpOwp9CiRwYWNrYWdlLT5zZXRCaW5hcmllcygkY29uZmlnWydiaW4nXSk7Cn0KCmlmIChpc3NldCgkY29uZmlnWydpbnN0YWxsYXRpb24tc291cmNlJ10pKSB7CiRwYWNrYWdlLT5zZXRJbnN0YWxsYXRpb25Tb3VyY2UoJGNvbmZpZ1snaW5zdGFsbGF0aW9uLXNvdXJjZSddKTsKfQoKaWYgKGlzc2V0KCRjb25maWdbJ3NvdXJjZSddKSkgewppZiAoIWlzc2V0KCRjb25maWdbJ3NvdXJjZSddWyd0eXBlJ10pIHx8ICFpc3NldCgkY29uZmlnWydzb3VyY2UnXVsndXJsJ10pIHx8ICFpc3NldCgkY29uZmlnWydzb3VyY2UnXVsncmVmZXJlbmNlJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKHNwcmludGYoCiJQYWNrYWdlICVzJ3Mgc291cmNlIGtleSBzaG91bGQgYmUgc3BlY2lmaWVkIGFzIHtcInR5cGVcIjogLi4uLCBcInVybFwiOiAuLi4sIFwicmVmZXJlbmNlXCI6IC4uLn0sXG4lcyBnaXZlbi4iLAokY29uZmlnWyduYW1lJ10sCmpzb25fZW5jb2RlKCRjb25maWdbJ3NvdXJjZSddKQopKTsKfQokcGFja2FnZS0+c2V0U291cmNlVHlwZSgkY29uZmlnWydzb3VyY2UnXVsndHlwZSddKTsKJHBhY2thZ2UtPnNldFNvdXJjZVVybCgkY29uZmlnWydzb3VyY2UnXVsndXJsJ10pOwokcGFja2FnZS0+c2V0U291cmNlUmVmZXJlbmNlKCRjb25maWdbJ3NvdXJjZSddWydyZWZlcmVuY2UnXSk7Cn0KCmlmIChpc3NldCgkY29uZmlnWydkaXN0J10pKSB7CmlmICghaXNzZXQoJGNvbmZpZ1snZGlzdCddWyd0eXBlJ10pCnx8ICFpc3NldCgkY29uZmlnWydkaXN0J11bJ3VybCddKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbihzcHJpbnRmKAoiUGFja2FnZSAlcydzIGRpc3Qga2V5IHNob3VsZCBiZSBzcGVjaWZpZWQgYXMgIi4KIntcInR5cGVcIjogLi4uLCBcInVybFwiOiAuLi4sIFwicmVmZXJlbmNlXCI6IC4uLiwgXCJzaGFzdW1cIjogLi4ufSxcbiVzIGdpdmVuLiIsCiRjb25maWdbJ25hbWUnXSwKanNvbl9lbmNvZGUoJGNvbmZpZ1snZGlzdCddKQopKTsKfQokcGFja2FnZS0+c2V0RGlzdFR5cGUoJGNvbmZpZ1snZGlzdCddWyd0eXBlJ10pOwokcGFja2FnZS0+c2V0RGlzdFVybCgkY29uZmlnWydkaXN0J11bJ3VybCddKTsKJHBhY2thZ2UtPnNldERpc3RSZWZlcmVuY2UoaXNzZXQoJGNvbmZpZ1snZGlzdCddWydyZWZlcmVuY2UnXSkgPyAkY29uZmlnWydkaXN0J11bJ3JlZmVyZW5jZSddIDogbnVsbCk7CiRwYWNrYWdlLT5zZXREaXN0U2hhMUNoZWNrc3VtKGlzc2V0KCRjb25maWdbJ2Rpc3QnXVsnc2hhc3VtJ10pID8gJGNvbmZpZ1snZGlzdCddWydzaGFzdW0nXSA6IG51bGwpOwp9Cgpmb3JlYWNoIChQYWNrYWdlXEJhc2VQYWNrYWdlOjokc3VwcG9ydGVkTGlua1R5cGVzIGFzICR0eXBlID0+ICRvcHRzKSB7CmlmIChpc3NldCgkY29uZmlnWyR0eXBlXSkpIHsKJG1ldGhvZCA9ICdzZXQnLnVjZmlyc3QoJG9wdHNbJ21ldGhvZCddKTsKJHBhY2thZ2UtPnskbWV0aG9kfSgKJHRoaXMtPnZlcnNpb25QYXJzZXItPnBhcnNlTGlua3MoCiRwYWNrYWdlLT5nZXROYW1lKCksCiRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCksCiRvcHRzWydkZXNjcmlwdGlvbiddLAokY29uZmlnWyR0eXBlXQopCik7Cn0KfQoKaWYgKGlzc2V0KCRjb25maWdbJ3N1Z2dlc3QnXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1snc3VnZ2VzdCddKSkgewpmb3JlYWNoICgkY29uZmlnWydzdWdnZXN0J10gYXMgJHRhcmdldCA9PiAkcmVhc29uKSB7CmlmICgnc2VsZi52ZXJzaW9uJyA9PT0gdHJpbSgkcmVhc29uKSkgewokY29uZmlnWydzdWdnZXN0J11bJHRhcmdldF0gPSAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpOwp9Cn0KJHBhY2thZ2UtPnNldFN1Z2dlc3RzKCRjb25maWdbJ3N1Z2dlc3QnXSk7Cn0KCmlmIChpc3NldCgkY29uZmlnWydhdXRvbG9hZCddKSkgewokcGFja2FnZS0+c2V0QXV0b2xvYWQoJGNvbmZpZ1snYXV0b2xvYWQnXSk7Cn0KCmlmIChpc3NldCgkY29uZmlnWydhdXRvbG9hZC1kZXYnXSkpIHsKJHBhY2thZ2UtPnNldERldkF1dG9sb2FkKCRjb25maWdbJ2F1dG9sb2FkLWRldiddKTsKfQoKaWYgKGlzc2V0KCRjb25maWdbJ2luY2x1ZGUtcGF0aCddKSkgewokcGFja2FnZS0+c2V0SW5jbHVkZVBhdGhzKCRjb25maWdbJ2luY2x1ZGUtcGF0aCddKTsKfQoKaWYgKCFlbXB0eSgkY29uZmlnWyd0aW1lJ10pKSB7CiR0aW1lID0gY3R5cGVfZGlnaXQoJGNvbmZpZ1sndGltZSddKSA/ICdAJy4kY29uZmlnWyd0aW1lJ10gOiAkY29uZmlnWyd0aW1lJ107Cgp0cnkgewokZGF0ZSA9IG5ldyBcRGF0ZVRpbWUoJHRpbWUsIG5ldyBcRGF0ZVRpbWVab25lKCdVVEMnKSk7CiRwYWNrYWdlLT5zZXRSZWxlYXNlRGF0ZSgkZGF0ZSk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKfQp9CgppZiAoIWVtcHR5KCRjb25maWdbJ25vdGlmaWNhdGlvbi11cmwnXSkpIHsKJHBhY2thZ2UtPnNldE5vdGlmaWNhdGlvblVybCgkY29uZmlnWydub3RpZmljYXRpb24tdXJsJ10pOwp9CgppZiAoIWVtcHR5KCRjb25maWdbJ2FyY2hpdmUnXVsnZXhjbHVkZSddKSkgewokcGFja2FnZS0+c2V0QXJjaGl2ZUV4Y2x1ZGVzKCRjb25maWdbJ2FyY2hpdmUnXVsnZXhjbHVkZSddKTsKfQoKaWYgKCRwYWNrYWdlIGluc3RhbmNlb2YgUGFja2FnZVxDb21wbGV0ZVBhY2thZ2VJbnRlcmZhY2UpIHsKaWYgKGlzc2V0KCRjb25maWdbJ3NjcmlwdHMnXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1snc2NyaXB0cyddKSkgewpmb3JlYWNoICgkY29uZmlnWydzY3JpcHRzJ10gYXMgJGV2ZW50ID0+ICRsaXN0ZW5lcnMpIHsKJGNvbmZpZ1snc2NyaXB0cyddWyRldmVudF0gPSAoYXJyYXkpICRsaXN0ZW5lcnM7Cn0KJHBhY2thZ2UtPnNldFNjcmlwdHMoJGNvbmZpZ1snc2NyaXB0cyddKTsKfQoKaWYgKCFlbXB0eSgkY29uZmlnWydkZXNjcmlwdGlvbiddKSAmJiBpc19zdHJpbmcoJGNvbmZpZ1snZGVzY3JpcHRpb24nXSkpIHsKJHBhY2thZ2UtPnNldERlc2NyaXB0aW9uKCRjb25maWdbJ2Rlc2NyaXB0aW9uJ10pOwp9CgppZiAoIWVtcHR5KCRjb25maWdbJ2hvbWVwYWdlJ10pICYmIGlzX3N0cmluZygkY29uZmlnWydob21lcGFnZSddKSkgewokcGFja2FnZS0+c2V0SG9tZXBhZ2UoJGNvbmZpZ1snaG9tZXBhZ2UnXSk7Cn0KCmlmICghZW1wdHkoJGNvbmZpZ1sna2V5d29yZHMnXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1sna2V5d29yZHMnXSkpIHsKJHBhY2thZ2UtPnNldEtleXdvcmRzKCRjb25maWdbJ2tleXdvcmRzJ10pOwp9CgppZiAoIWVtcHR5KCRjb25maWdbJ2xpY2Vuc2UnXSkpIHsKJHBhY2thZ2UtPnNldExpY2Vuc2UoaXNfYXJyYXkoJGNvbmZpZ1snbGljZW5zZSddKSA/ICRjb25maWdbJ2xpY2Vuc2UnXSA6IGFycmF5KCRjb25maWdbJ2xpY2Vuc2UnXSkpOwp9CgppZiAoIWVtcHR5KCRjb25maWdbJ2F1dGhvcnMnXSkgJiYgaXNfYXJyYXkoJGNvbmZpZ1snYXV0aG9ycyddKSkgewokcGFja2FnZS0+c2V0QXV0aG9ycygkY29uZmlnWydhdXRob3JzJ10pOwp9CgppZiAoaXNzZXQoJGNvbmZpZ1snc3VwcG9ydCddKSkgewokcGFja2FnZS0+c2V0U3VwcG9ydCgkY29uZmlnWydzdXBwb3J0J10pOwp9Cn0KCmlmICgkYWxpYXNOb3JtYWxpemVkID0gJHRoaXMtPmdldEJyYW5jaEFsaWFzKCRjb25maWcpKSB7CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIFJvb3RQYWNrYWdlSW50ZXJmYWNlKSB7CiRwYWNrYWdlID0gbmV3IFJvb3RBbGlhc1BhY2thZ2UoJHBhY2thZ2UsICRhbGlhc05vcm1hbGl6ZWQsIHByZWdfcmVwbGFjZSgneyhcLjl7N30pK30nLCAnLngnLCAkYWxpYXNOb3JtYWxpemVkKSk7Cn0gZWxzZSB7CiRwYWNrYWdlID0gbmV3IEFsaWFzUGFja2FnZSgkcGFja2FnZSwgJGFsaWFzTm9ybWFsaXplZCwgcHJlZ19yZXBsYWNlKCd7KFwuOXs3fSkrfScsICcueCcsICRhbGlhc05vcm1hbGl6ZWQpKTsKfQp9CgpyZXR1cm4gJHBhY2thZ2U7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hBbGlhcyhhcnJheSAkY29uZmlnKQp7CmlmICgnZGV2LScgIT09IHN1YnN0cigkY29uZmlnWyd2ZXJzaW9uJ10sIDAsIDQpCnx8ICFpc3NldCgkY29uZmlnWydleHRyYSddWydicmFuY2gtYWxpYXMnXSkKfHwgIWlzX2FycmF5KCRjb25maWdbJ2V4dHJhJ11bJ2JyYW5jaC1hbGlhcyddKQopIHsKcmV0dXJuOwp9Cgpmb3JlYWNoICgkY29uZmlnWydleHRyYSddWydicmFuY2gtYWxpYXMnXSBhcyAkc291cmNlQnJhbmNoID0+ICR0YXJnZXRCcmFuY2gpIHsKCiBpZiAoJy1kZXYnICE9PSBzdWJzdHIoJHRhcmdldEJyYW5jaCwgLTQpKSB7CmNvbnRpbnVlOwp9CgoKICR2YWxpZGF0ZWRUYXJnZXRCcmFuY2ggPSAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplQnJhbmNoKHN1YnN0cigkdGFyZ2V0QnJhbmNoLCAwLCAtNCkpOwppZiAoJy1kZXYnICE9PSBzdWJzdHIoJHZhbGlkYXRlZFRhcmdldEJyYW5jaCwgLTQpKSB7CmNvbnRpbnVlOwp9CgoKIGlmIChzdHJ0b2xvd2VyKCRjb25maWdbJ3ZlcnNpb24nXSkgIT09IHN0cnRvbG93ZXIoJHNvdXJjZUJyYW5jaCkpIHsKY29udGludWU7Cn0KCnJldHVybiAkdmFsaWRhdGVkVGFyZ2V0QnJhbmNoOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXExvYWRlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxCYXNlUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnRcVmVyc2lvbkNvbnN0cmFpbnQ7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUGxhdGZvcm1SZXBvc2l0b3J5OwoKCgoKY2xhc3MgVmFsaWRhdGluZ0FycmF5TG9hZGVyIGltcGxlbWVudHMgTG9hZGVySW50ZXJmYWNlCnsKY29uc3QgQ0hFQ0tfQUxMID0gMTsKY29uc3QgQ0hFQ0tfVU5CT1VORF9DT05TVFJBSU5UUyA9IDE7Cgpwcml2YXRlICRsb2FkZXI7CnByaXZhdGUgJHZlcnNpb25QYXJzZXI7CnByaXZhdGUgJGVycm9yczsKcHJpdmF0ZSAkd2FybmluZ3M7CnByaXZhdGUgJGNvbmZpZzsKcHJpdmF0ZSAkc3RyaWN0TmFtZTsKcHJpdmF0ZSAkZmxhZ3M7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoTG9hZGVySW50ZXJmYWNlICRsb2FkZXIsICRzdHJpY3ROYW1lID0gdHJ1ZSwgVmVyc2lvblBhcnNlciAkcGFyc2VyID0gbnVsbCwgJGZsYWdzID0gMCkKewokdGhpcy0+bG9hZGVyID0gJGxvYWRlcjsKJHRoaXMtPnZlcnNpb25QYXJzZXIgPSAkcGFyc2VyID86IG5ldyBWZXJzaW9uUGFyc2VyKCk7CiR0aGlzLT5zdHJpY3ROYW1lID0gJHN0cmljdE5hbWU7CiR0aGlzLT5mbGFncyA9ICRmbGFnczsKfQoKcHVibGljIGZ1bmN0aW9uIGxvYWQoYXJyYXkgJGNvbmZpZywgJGNsYXNzID0gJ0NvbXBvc2VyXFBhY2thZ2VcQ29tcGxldGVQYWNrYWdlJykKewokdGhpcy0+ZXJyb3JzID0gYXJyYXkoKTsKJHRoaXMtPndhcm5pbmdzID0gYXJyYXkoKTsKJHRoaXMtPmNvbmZpZyA9ICRjb25maWc7CgppZiAoJHRoaXMtPnN0cmljdE5hbWUpIHsKJHRoaXMtPnZhbGlkYXRlUmVnZXgoJ25hbWUnLCAnW0EtWmEtejAtOV1bQS1aYS16MC05Xy4tXSovW0EtWmEtejAtOV1bQS1aYS16MC05Xy4tXSonLCB0cnVlKTsKfSBlbHNlIHsKJHRoaXMtPnZhbGlkYXRlU3RyaW5nKCduYW1lJywgdHJ1ZSk7Cn0KCmlmICghZW1wdHkoJHRoaXMtPmNvbmZpZ1sndmVyc2lvbiddKSkgewp0cnkgewokdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplKCR0aGlzLT5jb25maWdbJ3ZlcnNpb24nXSk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKdW5zZXQoJHRoaXMtPmNvbmZpZ1sndmVyc2lvbiddKTsKJHRoaXMtPmVycm9yc1tdID0gJ3ZlcnNpb24gOiBpbnZhbGlkIHZhbHVlICgnLiR0aGlzLT5jb25maWdbJ3ZlcnNpb24nXS4nKTogJy4kZS0+Z2V0TWVzc2FnZSgpOwp9Cn0KCiR0aGlzLT52YWxpZGF0ZVJlZ2V4KCd0eXBlJywgJ1tBLVphLXowLTktXSsnKTsKJHRoaXMtPnZhbGlkYXRlU3RyaW5nKCd0YXJnZXQtZGlyJyk7CiR0aGlzLT52YWxpZGF0ZUFycmF5KCdleHRyYScpOwokdGhpcy0+dmFsaWRhdGVGbGF0QXJyYXkoJ2JpbicpOwokdGhpcy0+dmFsaWRhdGVBcnJheSgnc2NyaXB0cycpOyAKICR0aGlzLT52YWxpZGF0ZVN0cmluZygnZGVzY3JpcHRpb24nKTsKJHRoaXMtPnZhbGlkYXRlVXJsKCdob21lcGFnZScpOwokdGhpcy0+dmFsaWRhdGVGbGF0QXJyYXkoJ2tleXdvcmRzJywgJ1tBLVphLXowLTkgLl8tXSsnKTsKCmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWydsaWNlbnNlJ10pKSB7CmlmIChpc19zdHJpbmcoJHRoaXMtPmNvbmZpZ1snbGljZW5zZSddKSkgewokdGhpcy0+dmFsaWRhdGVSZWdleCgnbGljZW5zZScsICdbQS1aYS16MC05Ky4gKCktXSsnKTsKfSBlbHNlIHsKJHRoaXMtPnZhbGlkYXRlRmxhdEFycmF5KCdsaWNlbnNlJywgJ1tBLVphLXowLTkrLiAoKS1dKycpOwp9Cn0KCiR0aGlzLT52YWxpZGF0ZVN0cmluZygndGltZScpOwppZiAoIWVtcHR5KCR0aGlzLT5jb25maWdbJ3RpbWUnXSkpIHsKdHJ5IHsKJGRhdGUgPSBuZXcgXERhdGVUaW1lKCR0aGlzLT5jb25maWdbJ3RpbWUnXSwgbmV3IFxEYXRlVGltZVpvbmUoJ1VUQycpKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewokdGhpcy0+ZXJyb3JzW10gPSAndGltZSA6IGludmFsaWQgdmFsdWUgKCcuJHRoaXMtPmNvbmZpZ1sndGltZSddLicpOiAnLiRlLT5nZXRNZXNzYWdlKCk7CnVuc2V0KCR0aGlzLT5jb25maWdbJ3RpbWUnXSk7Cn0KfQoKaWYgKCR0aGlzLT52YWxpZGF0ZUFycmF5KCdhdXRob3JzJykgJiYgIWVtcHR5KCR0aGlzLT5jb25maWdbJ2F1dGhvcnMnXSkpIHsKZm9yZWFjaCAoJHRoaXMtPmNvbmZpZ1snYXV0aG9ycyddIGFzICRrZXkgPT4gJGF1dGhvcikgewppZiAoIWlzX2FycmF5KCRhdXRob3IpKSB7CiR0aGlzLT5lcnJvcnNbXSA9ICdhdXRob3JzLicuJGtleS4nIDogc2hvdWxkIGJlIGFuIGFycmF5LCAnLmdldHR5cGUoJGF1dGhvcikuJyBnaXZlbic7CnVuc2V0KCR0aGlzLT5jb25maWdbJ2F1dGhvcnMnXVska2V5XSk7CmNvbnRpbnVlOwp9CmZvcmVhY2ggKGFycmF5KCdob21lcGFnZScsICdlbWFpbCcsICduYW1lJywgJ3JvbGUnKSBhcyAkYXV0aG9yRGF0YSkgewppZiAoaXNzZXQoJGF1dGhvclskYXV0aG9yRGF0YV0pICYmICFpc19zdHJpbmcoJGF1dGhvclskYXV0aG9yRGF0YV0pKSB7CiR0aGlzLT5lcnJvcnNbXSA9ICdhdXRob3JzLicuJGtleS4nLicuJGF1dGhvckRhdGEuJyA6IGludmFsaWQgdmFsdWUsIG11c3QgYmUgYSBzdHJpbmcnOwp1bnNldCgkdGhpcy0+Y29uZmlnWydhdXRob3JzJ11bJGtleV1bJGF1dGhvckRhdGFdKTsKfQp9CmlmIChpc3NldCgkYXV0aG9yWydob21lcGFnZSddKSAmJiAhJHRoaXMtPmZpbHRlclVybCgkYXV0aG9yWydob21lcGFnZSddKSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICdhdXRob3JzLicuJGtleS4nLmhvbWVwYWdlIDogaW52YWxpZCB2YWx1ZSAoJy4kYXV0aG9yWydob21lcGFnZSddLicpLCBtdXN0IGJlIGFuIGh0dHAvaHR0cHMgVVJMJzsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snYXV0aG9ycyddWyRrZXldWydob21lcGFnZSddKTsKfQppZiAoaXNzZXQoJGF1dGhvclsnZW1haWwnXSkgJiYgIWZpbHRlcl92YXIoJGF1dGhvclsnZW1haWwnXSwgRklMVEVSX1ZBTElEQVRFX0VNQUlMKSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICdhdXRob3JzLicuJGtleS4nLmVtYWlsIDogaW52YWxpZCB2YWx1ZSAoJy4kYXV0aG9yWydlbWFpbCddLicpLCBtdXN0IGJlIGEgdmFsaWQgZW1haWwgYWRkcmVzcyc7CnVuc2V0KCR0aGlzLT5jb25maWdbJ2F1dGhvcnMnXVska2V5XVsnZW1haWwnXSk7Cn0KaWYgKGVtcHR5KCR0aGlzLT5jb25maWdbJ2F1dGhvcnMnXVska2V5XSkpIHsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snYXV0aG9ycyddWyRrZXldKTsKfQp9CmlmIChlbXB0eSgkdGhpcy0+Y29uZmlnWydhdXRob3JzJ10pKSB7CnVuc2V0KCR0aGlzLT5jb25maWdbJ2F1dGhvcnMnXSk7Cn0KfQoKaWYgKCR0aGlzLT52YWxpZGF0ZUFycmF5KCdzdXBwb3J0JykgJiYgIWVtcHR5KCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXSkpIHsKZm9yZWFjaCAoYXJyYXkoJ2lzc3VlcycsICdmb3J1bScsICd3aWtpJywgJ3NvdXJjZScsICdlbWFpbCcsICdpcmMnKSBhcyAka2V5KSB7CmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWydzdXBwb3J0J11bJGtleV0pICYmICFpc19zdHJpbmcoJHRoaXMtPmNvbmZpZ1snc3VwcG9ydCddWyRrZXldKSkgewokdGhpcy0+ZXJyb3JzW10gPSAnc3VwcG9ydC4nLiRrZXkuJyA6IGludmFsaWQgdmFsdWUsIG11c3QgYmUgYSBzdHJpbmcnOwp1bnNldCgkdGhpcy0+Y29uZmlnWydzdXBwb3J0J11bJGtleV0pOwp9Cn0KCmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWydzdXBwb3J0J11bJ2VtYWlsJ10pICYmICFmaWx0ZXJfdmFyKCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXVsnZW1haWwnXSwgRklMVEVSX1ZBTElEQVRFX0VNQUlMKSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICdzdXBwb3J0LmVtYWlsIDogaW52YWxpZCB2YWx1ZSAoJy4kdGhpcy0+Y29uZmlnWydzdXBwb3J0J11bJ2VtYWlsJ10uJyksIG11c3QgYmUgYSB2YWxpZCBlbWFpbCBhZGRyZXNzJzsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snc3VwcG9ydCddWydlbWFpbCddKTsKfQoKaWYgKGlzc2V0KCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXVsnaXJjJ10pICYmICEkdGhpcy0+ZmlsdGVyVXJsKCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXVsnaXJjJ10sIGFycmF5KCdpcmMnKSkpIHsKJHRoaXMtPndhcm5pbmdzW10gPSAnc3VwcG9ydC5pcmMgOiBpbnZhbGlkIHZhbHVlICgnLiR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXVsnaXJjJ10uJyksIG11c3QgYmUgYSBpcmM6Ly88c2VydmVyPi88Y2hhbm5lbD4gVVJMJzsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snc3VwcG9ydCddWydpcmMnXSk7Cn0KCmZvcmVhY2ggKGFycmF5KCdpc3N1ZXMnLCAnZm9ydW0nLCAnd2lraScsICdzb3VyY2UnKSBhcyAka2V5KSB7CmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWydzdXBwb3J0J11bJGtleV0pICYmICEkdGhpcy0+ZmlsdGVyVXJsKCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXVska2V5XSkpIHsKJHRoaXMtPndhcm5pbmdzW10gPSAnc3VwcG9ydC4nLiRrZXkuJyA6IGludmFsaWQgdmFsdWUgKCcuJHRoaXMtPmNvbmZpZ1snc3VwcG9ydCddWyRrZXldLicpLCBtdXN0IGJlIGFuIGh0dHAvaHR0cHMgVVJMJzsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snc3VwcG9ydCddWyRrZXldKTsKfQp9CmlmIChlbXB0eSgkdGhpcy0+Y29uZmlnWydzdXBwb3J0J10pKSB7CnVuc2V0KCR0aGlzLT5jb25maWdbJ3N1cHBvcnQnXSk7Cn0KfQoKJHVuYm91bmRDb25zdHJhaW50ID0gbmV3IFZlcnNpb25Db25zdHJhaW50KCc9JywgJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSgnZGV2LW1hc3RlcicpKTsKCmZvcmVhY2ggKGFycmF5X2tleXMoQmFzZVBhY2thZ2U6OiRzdXBwb3J0ZWRMaW5rVHlwZXMpIGFzICRsaW5rVHlwZSkgewppZiAoJHRoaXMtPnZhbGlkYXRlQXJyYXkoJGxpbmtUeXBlKSAmJiBpc3NldCgkdGhpcy0+Y29uZmlnWyRsaW5rVHlwZV0pKSB7CmZvcmVhY2ggKCR0aGlzLT5jb25maWdbJGxpbmtUeXBlXSBhcyAkcGFja2FnZSA9PiAkY29uc3RyYWludCkgewppZiAoIXByZWdfbWF0Y2goJ3teW0EtWmEtejAtOV8uLy1dKyR9JywgJHBhY2thZ2UpKSB7CiR0aGlzLT53YXJuaW5nc1tdID0gJGxpbmtUeXBlLicuJy4kcGFja2FnZS4nIDogaW52YWxpZCBrZXksIHBhY2thZ2UgbmFtZXMgbXVzdCBiZSBzdHJpbmdzIGNvbnRhaW5pbmcgb25seSBbQS1aYS16MC05Xy4vLV0nOwp9CmlmICghaXNfc3RyaW5nKCRjb25zdHJhaW50KSkgewokdGhpcy0+ZXJyb3JzW10gPSAkbGlua1R5cGUuJy4nLiRwYWNrYWdlLicgOiBpbnZhbGlkIHZhbHVlLCBtdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB2ZXJzaW9uIGNvbnN0cmFpbnQnOwp1bnNldCgkdGhpcy0+Y29uZmlnWyRsaW5rVHlwZV1bJHBhY2thZ2VdKTsKfSBlbHNlaWYgKCdzZWxmLnZlcnNpb24nICE9PSAkY29uc3RyYWludCkgewp0cnkgewokbGlua0NvbnN0cmFpbnQgPSAkdGhpcy0+dmVyc2lvblBhcnNlci0+cGFyc2VDb25zdHJhaW50cygkY29uc3RyYWludCk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKJHRoaXMtPmVycm9yc1tdID0gJGxpbmtUeXBlLicuJy4kcGFja2FnZS4nIDogaW52YWxpZCB2ZXJzaW9uIGNvbnN0cmFpbnQgKCcuJGUtPmdldE1lc3NhZ2UoKS4nKSc7CnVuc2V0KCR0aGlzLT5jb25maWdbJGxpbmtUeXBlXVskcGFja2FnZV0pOwpjb250aW51ZTsKfQoKCiBpZiAoCigkdGhpcy0+ZmxhZ3MgJiBzZWxmOjpDSEVDS19VTkJPVU5EX0NPTlNUUkFJTlRTKQomJiAncmVxdWlyZScgPT09ICRsaW5rVHlwZQomJiAkbGlua0NvbnN0cmFpbnQtPm1hdGNoZXMoJHVuYm91bmRDb25zdHJhaW50KQomJiAhcHJlZ19tYXRjaChQbGF0Zm9ybVJlcG9zaXRvcnk6OlBMQVRGT1JNX1BBQ0tBR0VfUkVHRVgsICRwYWNrYWdlKQopIHsKJHRoaXMtPndhcm5pbmdzW10gPSAkbGlua1R5cGUuJy4nLiRwYWNrYWdlLicgOiB1bmJvdW5kIHZlcnNpb24gY29uc3RyYWludHMgKCcuJGNvbnN0cmFpbnQuJykgc2hvdWxkIGJlIGF2b2lkZWQnOwp9Cn0KfQp9Cn0KCmlmICgkdGhpcy0+dmFsaWRhdGVBcnJheSgnc3VnZ2VzdCcpICYmICFlbXB0eSgkdGhpcy0+Y29uZmlnWydzdWdnZXN0J10pKSB7CmZvcmVhY2ggKCR0aGlzLT5jb25maWdbJ3N1Z2dlc3QnXSBhcyAkcGFja2FnZSA9PiAkZGVzY3JpcHRpb24pIHsKaWYgKCFpc19zdHJpbmcoJGRlc2NyaXB0aW9uKSkgewokdGhpcy0+ZXJyb3JzW10gPSAnc3VnZ2VzdC4nLiRwYWNrYWdlLicgOiBpbnZhbGlkIHZhbHVlLCBtdXN0IGJlIGEgc3RyaW5nIGRlc2NyaWJpbmcgd2h5IHRoZSBwYWNrYWdlIGlzIHN1Z2dlc3RlZCc7CnVuc2V0KCR0aGlzLT5jb25maWdbJ3N1Z2dlc3QnXVskcGFja2FnZV0pOwp9Cn0KfQoKaWYgKCR0aGlzLT52YWxpZGF0ZVN0cmluZygnbWluaW11bS1zdGFiaWxpdHknKSAmJiAhZW1wdHkoJHRoaXMtPmNvbmZpZ1snbWluaW11bS1zdGFiaWxpdHknXSkpIHsKaWYgKCFpc3NldChCYXNlUGFja2FnZTo6JHN0YWJpbGl0aWVzWyR0aGlzLT5jb25maWdbJ21pbmltdW0tc3RhYmlsaXR5J11dKSkgewokdGhpcy0+ZXJyb3JzW10gPSAnbWluaW11bS1zdGFiaWxpdHkgOiBpbnZhbGlkIHZhbHVlICgnLiR0aGlzLT5jb25maWdbJ21pbmltdW0tc3RhYmlsaXR5J10uJyksIG11c3QgYmUgb25lIG9mICcuaW1wbG9kZSgnLCAnLCBhcnJheV9rZXlzKEJhc2VQYWNrYWdlOjokc3RhYmlsaXRpZXMpKTsKdW5zZXQoJHRoaXMtPmNvbmZpZ1snbWluaW11bS1zdGFiaWxpdHknXSk7Cn0KfQoKaWYgKCR0aGlzLT52YWxpZGF0ZUFycmF5KCdhdXRvbG9hZCcpICYmICFlbXB0eSgkdGhpcy0+Y29uZmlnWydhdXRvbG9hZCddKSkgewokdHlwZXMgPSBhcnJheSgncHNyLTAnLCAncHNyLTQnLCAnY2xhc3NtYXAnLCAnZmlsZXMnKTsKZm9yZWFjaCAoJHRoaXMtPmNvbmZpZ1snYXV0b2xvYWQnXSBhcyAkdHlwZSA9PiAkdHlwZUNvbmZpZykgewppZiAoIWluX2FycmF5KCR0eXBlLCAkdHlwZXMpKSB7CiR0aGlzLT5lcnJvcnNbXSA9ICdhdXRvbG9hZCA6IGludmFsaWQgdmFsdWUgKCcuJHR5cGUuJyksIG11c3QgYmUgb25lIG9mICcuaW1wbG9kZSgnLCAnLCAkdHlwZXMpOwp1bnNldCgkdGhpcy0+Y29uZmlnWydhdXRvbG9hZCddWyR0eXBlXSk7Cn0KaWYgKCR0eXBlID09PSAncHNyLTQnKSB7CmZvcmVhY2ggKCR0eXBlQ29uZmlnIGFzICRuYW1lc3BhY2UgPT4gJGRpcnMpIHsKaWYgKCRuYW1lc3BhY2UgIT09ICcnICYmICdcXCcgIT09IHN1YnN0cigkbmFtZXNwYWNlLCAtMSkpIHsKJHRoaXMtPmVycm9yc1tdID0gJ2F1dG9sb2FkLnBzci00IDogaW52YWxpZCB2YWx1ZSAoJy4kbmFtZXNwYWNlLicpLCBuYW1lc3BhY2VzIG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLCBzaG91bGQgYmUgJy4kbmFtZXNwYWNlLidcXCc7Cn0KfQp9Cn0KfQoKaWYgKCFlbXB0eSgkdGhpcy0+Y29uZmlnWydhdXRvbG9hZCddWydwc3ItNCddKSAmJiAhZW1wdHkoJHRoaXMtPmNvbmZpZ1sndGFyZ2V0LWRpciddKSkgewokdGhpcy0+ZXJyb3JzW10gPSAndGFyZ2V0LWRpciA6IHRoaXMgY2FuIG5vdCBiZSB1c2VkIHRvZ2V0aGVyIHdpdGggdGhlIGF1dG9sb2FkLnBzci00IHNldHRpbmcsIHJlbW92ZSB0YXJnZXQtZGlyIHRvIHVwZ3JhZGUgdG8gcHNyLTQnOwoKIAogdW5zZXQoJHRoaXMtPmNvbmZpZ1snYXV0b2xvYWQnXVsncHNyLTQnXSk7Cn0KCgogCgoKIAoKJHRoaXMtPnZhbGlkYXRlRmxhdEFycmF5KCdpbmNsdWRlLXBhdGgnKTsKCgogaWYgKGlzc2V0KCR0aGlzLT5jb25maWdbJ2V4dHJhJ11bJ2JyYW5jaC1hbGlhcyddKSkgewppZiAoIWlzX2FycmF5KCR0aGlzLT5jb25maWdbJ2V4dHJhJ11bJ2JyYW5jaC1hbGlhcyddKSkgewokdGhpcy0+ZXJyb3JzW10gPSAnZXh0cmEuYnJhbmNoLWFsaWFzIDogbXVzdCBiZSBhbiBhcnJheSBvZiB2ZXJzaW9ucyA9PiBhbGlhc2VzJzsKfSBlbHNlIHsKZm9yZWFjaCAoJHRoaXMtPmNvbmZpZ1snZXh0cmEnXVsnYnJhbmNoLWFsaWFzJ10gYXMgJHNvdXJjZUJyYW5jaCA9PiAkdGFyZ2V0QnJhbmNoKSB7CgogaWYgKCctZGV2JyAhPT0gc3Vic3RyKCR0YXJnZXRCcmFuY2gsIC00KSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICdleHRyYS5icmFuY2gtYWxpYXMuJy4kc291cmNlQnJhbmNoLicgOiB0aGUgdGFyZ2V0IGJyYW5jaCAoJy4kdGFyZ2V0QnJhbmNoLicpIG11c3QgZW5kIGluIC1kZXYnOwp1bnNldCgkdGhpcy0+Y29uZmlnWydleHRyYSddWydicmFuY2gtYWxpYXMnXVskc291cmNlQnJhbmNoXSk7Cgpjb250aW51ZTsKfQoKCiAkdmFsaWRhdGVkVGFyZ2V0QnJhbmNoID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZUJyYW5jaChzdWJzdHIoJHRhcmdldEJyYW5jaCwgMCwgLTQpKTsKaWYgKCctZGV2JyAhPT0gc3Vic3RyKCR2YWxpZGF0ZWRUYXJnZXRCcmFuY2gsIC00KSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICdleHRyYS5icmFuY2gtYWxpYXMuJy4kc291cmNlQnJhbmNoLicgOiB0aGUgdGFyZ2V0IGJyYW5jaCAoJy4kdGFyZ2V0QnJhbmNoLicpIG11c3QgYmUgYSBwYXJzZWFibGUgbnVtYmVyIGxpa2UgMi4wLWRldic7CnVuc2V0KCR0aGlzLT5jb25maWdbJ2V4dHJhJ11bJ2JyYW5jaC1hbGlhcyddWyRzb3VyY2VCcmFuY2hdKTsKfQp9Cn0KfQoKaWYgKCR0aGlzLT5lcnJvcnMpIHsKdGhyb3cgbmV3IEludmFsaWRQYWNrYWdlRXhjZXB0aW9uKCR0aGlzLT5lcnJvcnMsICR0aGlzLT53YXJuaW5ncywgJGNvbmZpZyk7Cn0KCiRwYWNrYWdlID0gJHRoaXMtPmxvYWRlci0+bG9hZCgkdGhpcy0+Y29uZmlnLCAkY2xhc3MpOwokdGhpcy0+Y29uZmlnID0gbnVsbDsKCnJldHVybiAkcGFja2FnZTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFdhcm5pbmdzKCkKewpyZXR1cm4gJHRoaXMtPndhcm5pbmdzOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKCkKewpyZXR1cm4gJHRoaXMtPmVycm9yczsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZVJlZ2V4KCRwcm9wZXJ0eSwgJHJlZ2V4LCAkbWFuZGF0b3J5ID0gZmFsc2UpCnsKaWYgKCEkdGhpcy0+dmFsaWRhdGVTdHJpbmcoJHByb3BlcnR5LCAkbWFuZGF0b3J5KSkgewpyZXR1cm4gZmFsc2U7Cn0KCmlmICghcHJlZ19tYXRjaCgne14nLiRyZWdleC4nJH11JywgJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKSkgewokbWVzc2FnZSA9ICRwcm9wZXJ0eS4nIDogaW52YWxpZCB2YWx1ZSAoJy4kdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0uJyksIG11c3QgbWF0Y2ggJy4kcmVnZXg7CmlmICgkbWFuZGF0b3J5KSB7CiR0aGlzLT5lcnJvcnNbXSA9ICRtZXNzYWdlOwp9IGVsc2UgewokdGhpcy0+d2FybmluZ3NbXSA9ICRtZXNzYWdlOwp9CnVuc2V0KCR0aGlzLT5jb25maWdbJHByb3BlcnR5XSk7CgpyZXR1cm4gZmFsc2U7Cn0KCnJldHVybiB0cnVlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlU3RyaW5nKCRwcm9wZXJ0eSwgJG1hbmRhdG9yeSA9IGZhbHNlKQp7CmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pICYmICFpc19zdHJpbmcoJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKSkgewokdGhpcy0+ZXJyb3JzW10gPSAkcHJvcGVydHkuJyA6IHNob3VsZCBiZSBhIHN0cmluZywgJy5nZXR0eXBlKCR0aGlzLT5jb25maWdbJHByb3BlcnR5XSkuJyBnaXZlbic7CnVuc2V0KCR0aGlzLT5jb25maWdbJHByb3BlcnR5XSk7CgpyZXR1cm4gZmFsc2U7Cn0KCmlmICghaXNzZXQoJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKSB8fCB0cmltKCR0aGlzLT5jb25maWdbJHByb3BlcnR5XSkgPT09ICcnKSB7CmlmICgkbWFuZGF0b3J5KSB7CiR0aGlzLT5lcnJvcnNbXSA9ICRwcm9wZXJ0eS4nIDogbXVzdCBiZSBwcmVzZW50JzsKfQp1bnNldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pOwoKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUFycmF5KCRwcm9wZXJ0eSwgJG1hbmRhdG9yeSA9IGZhbHNlKQp7CmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pICYmICFpc19hcnJheSgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pKSB7CiR0aGlzLT5lcnJvcnNbXSA9ICRwcm9wZXJ0eS4nIDogc2hvdWxkIGJlIGFuIGFycmF5LCAnLmdldHR5cGUoJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKS4nIGdpdmVuJzsKdW5zZXQoJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKTsKCnJldHVybiBmYWxzZTsKfQoKaWYgKCFpc3NldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pIHx8ICFjb3VudCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pKSB7CmlmICgkbWFuZGF0b3J5KSB7CiR0aGlzLT5lcnJvcnNbXSA9ICRwcm9wZXJ0eS4nIDogbXVzdCBiZSBwcmVzZW50IGFuZCBjb250YWluIGF0IGxlYXN0IG9uZSBlbGVtZW50JzsKfQp1bnNldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pOwoKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB2YWxpZGF0ZUZsYXRBcnJheSgkcHJvcGVydHksICRyZWdleCA9IG51bGwsICRtYW5kYXRvcnkgPSBmYWxzZSkKewppZiAoISR0aGlzLT52YWxpZGF0ZUFycmF5KCRwcm9wZXJ0eSwgJG1hbmRhdG9yeSkpIHsKcmV0dXJuIGZhbHNlOwp9CgokcGFzcyA9IHRydWU7CmZvcmVhY2ggKCR0aGlzLT5jb25maWdbJHByb3BlcnR5XSBhcyAka2V5ID0+ICR2YWx1ZSkgewppZiAoIWlzX3N0cmluZygkdmFsdWUpICYmICFpc19udW1lcmljKCR2YWx1ZSkpIHsKJHRoaXMtPmVycm9yc1tdID0gJHByb3BlcnR5LicuJy4ka2V5LicgOiBtdXN0IGJlIGEgc3RyaW5nIG9yIGludCwgJy5nZXR0eXBlKCR2YWx1ZSkuJyBnaXZlbic7CnVuc2V0KCR0aGlzLT5jb25maWdbJHByb3BlcnR5XVska2V5XSk7CiRwYXNzID0gZmFsc2U7Cgpjb250aW51ZTsKfQoKaWYgKCRyZWdleCAmJiAhcHJlZ19tYXRjaCgne14nLiRyZWdleC4nJH11JywgJHZhbHVlKSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICRwcm9wZXJ0eS4nLicuJGtleS4nIDogaW52YWxpZCB2YWx1ZSAoJy4kdmFsdWUuJyksIG11c3QgbWF0Y2ggJy4kcmVnZXg7CnVuc2V0KCR0aGlzLT5jb25maWdbJHByb3BlcnR5XVska2V5XSk7CiRwYXNzID0gZmFsc2U7Cn0KfQoKcmV0dXJuICRwYXNzOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlVXJsKCRwcm9wZXJ0eSwgJG1hbmRhdG9yeSA9IGZhbHNlKQp7CmlmICghJHRoaXMtPnZhbGlkYXRlU3RyaW5nKCRwcm9wZXJ0eSwgJG1hbmRhdG9yeSkpIHsKcmV0dXJuIGZhbHNlOwp9CgppZiAoISR0aGlzLT5maWx0ZXJVcmwoJHRoaXMtPmNvbmZpZ1skcHJvcGVydHldKSkgewokdGhpcy0+d2FybmluZ3NbXSA9ICRwcm9wZXJ0eS4nIDogaW52YWxpZCB2YWx1ZSAoJy4kdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0uJyksIG11c3QgYmUgYW4gaHR0cC9odHRwcyBVUkwnOwp1bnNldCgkdGhpcy0+Y29uZmlnWyRwcm9wZXJ0eV0pOwoKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBmaWx0ZXJVcmwoJHZhbHVlLCBhcnJheSAkc2NoZW1lcyA9IGFycmF5KCdodHRwJywgJ2h0dHBzJykpCnsKaWYgKCR2YWx1ZSA9PT0gJycpIHsKcmV0dXJuIHRydWU7Cn0KCiRiaXRzID0gcGFyc2VfdXJsKCR2YWx1ZSk7CmlmIChlbXB0eSgkYml0c1snc2NoZW1lJ10pIHx8IGVtcHR5KCRiaXRzWydob3N0J10pKSB7CnJldHVybiBmYWxzZTsKfQoKaWYgKCFpbl9hcnJheSgkYml0c1snc2NoZW1lJ10sICRzY2hlbWVzLCB0cnVlKSkgewpyZXR1cm4gZmFsc2U7Cn0KCnJldHVybiB0cnVlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxCYXNlUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcRmFjdG9yeTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5TWFuYWdlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcVmNzXEhnRHJpdmVyOwp1c2UgQ29tcG9zZXJcSU9cTnVsbElPOwp1c2UgQ29tcG9zZXJcVXRpbFxQcm9jZXNzRXhlY3V0b3I7CnVzZSBDb21wb3NlclxVdGlsXEdpdCBhcyBHaXRVdGlsOwp1c2UgQ29tcG9zZXJcVXRpbFxTdm4gYXMgU3ZuVXRpbDsKCgoKCgoKCgpjbGFzcyBSb290UGFja2FnZUxvYWRlciBleHRlbmRzIEFycmF5TG9hZGVyCnsKcHJpdmF0ZSAkbWFuYWdlcjsKcHJpdmF0ZSAkY29uZmlnOwpwcml2YXRlICRwcm9jZXNzOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFJlcG9zaXRvcnlNYW5hZ2VyICRtYW5hZ2VyLCBDb25maWcgJGNvbmZpZywgVmVyc2lvblBhcnNlciAkcGFyc2VyID0gbnVsbCwgUHJvY2Vzc0V4ZWN1dG9yICRwcm9jZXNzID0gbnVsbCkKewokdGhpcy0+bWFuYWdlciA9ICRtYW5hZ2VyOwokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCk7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHBhcnNlcik7Cn0KCnB1YmxpYyBmdW5jdGlvbiBsb2FkKGFycmF5ICRjb25maWcsICRjbGFzcyA9ICdDb21wb3NlclxQYWNrYWdlXFJvb3RQYWNrYWdlJykKewppZiAoIWlzc2V0KCRjb25maWdbJ25hbWUnXSkpIHsKJGNvbmZpZ1snbmFtZSddID0gJ19fcm9vdF9fJzsKfQppZiAoIWlzc2V0KCRjb25maWdbJ3ZlcnNpb24nXSkpIHsKCiBpZiAoZ2V0ZW52KCdDT01QT1NFUl9ST09UX1ZFUlNJT04nKSkgewokdmVyc2lvbiA9IGdldGVudignQ09NUE9TRVJfUk9PVF9WRVJTSU9OJyk7Cn0gZWxzZSB7CiR2ZXJzaW9uID0gJHRoaXMtPmd1ZXNzVmVyc2lvbigkY29uZmlnKTsKfQoKaWYgKCEkdmVyc2lvbikgewokdmVyc2lvbiA9ICcxLjAuMCc7Cn0KCiRjb25maWdbJ3ZlcnNpb24nXSA9ICR2ZXJzaW9uOwp9CgokcmVhbFBhY2thZ2UgPSAkcGFja2FnZSA9IHBhcmVudDo6bG9hZCgkY29uZmlnLCAkY2xhc3MpOwoKaWYgKCRyZWFsUGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewokcmVhbFBhY2thZ2UgPSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpOwp9CgppZiAoaXNzZXQoJGNvbmZpZ1snbWluaW11bS1zdGFiaWxpdHknXSkpIHsKJHJlYWxQYWNrYWdlLT5zZXRNaW5pbXVtU3RhYmlsaXR5KFZlcnNpb25QYXJzZXI6Om5vcm1hbGl6ZVN0YWJpbGl0eSgkY29uZmlnWydtaW5pbXVtLXN0YWJpbGl0eSddKSk7Cn0KCiRhbGlhc2VzID0gYXJyYXkoKTsKJHN0YWJpbGl0eUZsYWdzID0gYXJyYXkoKTsKJHJlZmVyZW5jZXMgPSBhcnJheSgpOwpmb3JlYWNoIChhcnJheSgncmVxdWlyZScsICdyZXF1aXJlLWRldicpIGFzICRsaW5rVHlwZSkgewppZiAoaXNzZXQoJGNvbmZpZ1skbGlua1R5cGVdKSkgewokbGlua0luZm8gPSBCYXNlUGFja2FnZTo6JHN1cHBvcnRlZExpbmtUeXBlc1skbGlua1R5cGVdOwokbWV0aG9kID0gJ2dldCcudWNmaXJzdCgkbGlua0luZm9bJ21ldGhvZCddKTsKJGxpbmtzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHJlYWxQYWNrYWdlLT4kbWV0aG9kKCkgYXMgJGxpbmspIHsKJGxpbmtzWyRsaW5rLT5nZXRUYXJnZXQoKV0gPSAkbGluay0+Z2V0Q29uc3RyYWludCgpLT5nZXRQcmV0dHlTdHJpbmcoKTsKfQokYWxpYXNlcyA9ICR0aGlzLT5leHRyYWN0QWxpYXNlcygkbGlua3MsICRhbGlhc2VzKTsKJHN0YWJpbGl0eUZsYWdzID0gJHRoaXMtPmV4dHJhY3RTdGFiaWxpdHlGbGFncygkbGlua3MsICRzdGFiaWxpdHlGbGFncywgJHJlYWxQYWNrYWdlLT5nZXRNaW5pbXVtU3RhYmlsaXR5KCkpOwokcmVmZXJlbmNlcyA9ICR0aGlzLT5leHRyYWN0UmVmZXJlbmNlcygkbGlua3MsICRyZWZlcmVuY2VzKTsKfQp9CgokcmVhbFBhY2thZ2UtPnNldEFsaWFzZXMoJGFsaWFzZXMpOwokcmVhbFBhY2thZ2UtPnNldFN0YWJpbGl0eUZsYWdzKCRzdGFiaWxpdHlGbGFncyk7CiRyZWFsUGFja2FnZS0+c2V0UmVmZXJlbmNlcygkcmVmZXJlbmNlcyk7CgppZiAoaXNzZXQoJGNvbmZpZ1sncHJlZmVyLXN0YWJsZSddKSkgewokcmVhbFBhY2thZ2UtPnNldFByZWZlclN0YWJsZSgoYm9vbCkgJGNvbmZpZ1sncHJlZmVyLXN0YWJsZSddKTsKfQoKJHJlcG9zID0gRmFjdG9yeTo6Y3JlYXRlRGVmYXVsdFJlcG9zaXRvcmllcyhudWxsLCAkdGhpcy0+Y29uZmlnLCAkdGhpcy0+bWFuYWdlcik7CmZvcmVhY2ggKCRyZXBvcyBhcyAkcmVwbykgewokdGhpcy0+bWFuYWdlci0+YWRkUmVwb3NpdG9yeSgkcmVwbyk7Cn0KJHJlYWxQYWNrYWdlLT5zZXRSZXBvc2l0b3JpZXMoJHRoaXMtPmNvbmZpZy0+Z2V0UmVwb3NpdG9yaWVzKCkpOwoKcmV0dXJuICRwYWNrYWdlOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RBbGlhc2VzKGFycmF5ICRyZXF1aXJlcywgYXJyYXkgJGFsaWFzZXMpCnsKZm9yZWFjaCAoJHJlcXVpcmVzIGFzICRyZXFOYW1lID0+ICRyZXFWZXJzaW9uKSB7CmlmIChwcmVnX21hdGNoKCd7XihbXixccyNdKykoPzojW14gXSspPyArYXMgKyhbXixcc10rKSR9JywgJHJlcVZlcnNpb24sICRtYXRjaCkpIHsKJGFsaWFzZXNbXSA9IGFycmF5KAoncGFja2FnZScgPT4gc3RydG9sb3dlcigkcmVxTmFtZSksCid2ZXJzaW9uJyA9PiAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplKCRtYXRjaFsxXSwgJHJlcVZlcnNpb24pLAonYWxpYXMnID0+ICRtYXRjaFsyXSwKJ2FsaWFzX25vcm1hbGl6ZWQnID0+ICR0aGlzLT52ZXJzaW9uUGFyc2VyLT5ub3JtYWxpemUoJG1hdGNoWzJdLCAkcmVxVmVyc2lvbiksCik7Cn0KfQoKcmV0dXJuICRhbGlhc2VzOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGV4dHJhY3RTdGFiaWxpdHlGbGFncyhhcnJheSAkcmVxdWlyZXMsIGFycmF5ICRzdGFiaWxpdHlGbGFncywgJG1pbmltdW1TdGFiaWxpdHkpCnsKJHN0YWJpbGl0aWVzID0gQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllczsKJG1pbmltdW1TdGFiaWxpdHkgPSAkc3RhYmlsaXRpZXNbJG1pbmltdW1TdGFiaWxpdHldOwpmb3JlYWNoICgkcmVxdWlyZXMgYXMgJHJlcU5hbWUgPT4gJHJlcVZlcnNpb24pIHsKCiBpZiAocHJlZ19tYXRjaCgne15bXixcc10qP0AoJy5pbXBsb2RlKCd8JywgYXJyYXlfa2V5cygkc3RhYmlsaXRpZXMpKS4nKSR9aScsICRyZXFWZXJzaW9uLCAkbWF0Y2gpKSB7CiRuYW1lID0gc3RydG9sb3dlcigkcmVxTmFtZSk7CiRzdGFiaWxpdHkgPSAkc3RhYmlsaXRpZXNbVmVyc2lvblBhcnNlcjo6bm9ybWFsaXplU3RhYmlsaXR5KCRtYXRjaFsxXSldOwoKaWYgKGlzc2V0KCRzdGFiaWxpdHlGbGFnc1skbmFtZV0pICYmICRzdGFiaWxpdHlGbGFnc1skbmFtZV0gPiAkc3RhYmlsaXR5KSB7CmNvbnRpbnVlOwp9CiRzdGFiaWxpdHlGbGFnc1skbmFtZV0gPSAkc3RhYmlsaXR5OwoKY29udGludWU7Cn0KCgogCiAkcmVxVmVyc2lvbiA9IHByZWdfcmVwbGFjZSgne14oW14sXHNAXSspIGFzIC4rJH0nLCAnJDEnLCAkcmVxVmVyc2lvbik7CmlmIChwcmVnX21hdGNoKCd7XlteLFxzQF0rJH0nLCAkcmVxVmVyc2lvbikgJiYgJ3N0YWJsZScgIT09ICgkc3RhYmlsaXR5TmFtZSA9IFZlcnNpb25QYXJzZXI6OnBhcnNlU3RhYmlsaXR5KCRyZXFWZXJzaW9uKSkpIHsKJG5hbWUgPSBzdHJ0b2xvd2VyKCRyZXFOYW1lKTsKJHN0YWJpbGl0eSA9ICRzdGFiaWxpdGllc1skc3RhYmlsaXR5TmFtZV07CmlmICgoaXNzZXQoJHN0YWJpbGl0eUZsYWdzWyRuYW1lXSkgJiYgJHN0YWJpbGl0eUZsYWdzWyRuYW1lXSA+ICRzdGFiaWxpdHkpIHx8ICgkbWluaW11bVN0YWJpbGl0eSA+ICRzdGFiaWxpdHkpKSB7CmNvbnRpbnVlOwp9CiRzdGFiaWxpdHlGbGFnc1skbmFtZV0gPSAkc3RhYmlsaXR5Owp9Cn0KCnJldHVybiAkc3RhYmlsaXR5RmxhZ3M7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZXh0cmFjdFJlZmVyZW5jZXMoYXJyYXkgJHJlcXVpcmVzLCBhcnJheSAkcmVmZXJlbmNlcykKewpmb3JlYWNoICgkcmVxdWlyZXMgYXMgJHJlcU5hbWUgPT4gJHJlcVZlcnNpb24pIHsKJHJlcVZlcnNpb24gPSBwcmVnX3JlcGxhY2UoJ3teKFteLFxzQF0rKSBhcyAuKyR9JywgJyQxJywgJHJlcVZlcnNpb24pOwppZiAocHJlZ19tYXRjaCgne15bXixcc0BdKz8jKFthLWYwLTldKykkfScsICRyZXFWZXJzaW9uLCAkbWF0Y2gpICYmICdkZXYnID09PSAoJHN0YWJpbGl0eU5hbWUgPSBWZXJzaW9uUGFyc2VyOjpwYXJzZVN0YWJpbGl0eSgkcmVxVmVyc2lvbikpKSB7CiRuYW1lID0gc3RydG9sb3dlcigkcmVxTmFtZSk7CiRyZWZlcmVuY2VzWyRuYW1lXSA9ICRtYXRjaFsxXTsKfQp9CgpyZXR1cm4gJHJlZmVyZW5jZXM7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZ3Vlc3NWZXJzaW9uKGFycmF5ICRjb25maWcpCnsKaWYgKGZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKJHZlcnNpb24gPSAkdGhpcy0+Z3Vlc3NHaXRWZXJzaW9uKCRjb25maWcpOwppZiAobnVsbCAhPT0gJHZlcnNpb24pIHsKcmV0dXJuICR2ZXJzaW9uOwp9CgokdmVyc2lvbiA9ICR0aGlzLT5ndWVzc0hnVmVyc2lvbigkY29uZmlnKTsKaWYgKG51bGwgIT09ICR2ZXJzaW9uKSB7CnJldHVybiAkdmVyc2lvbjsKfQoKcmV0dXJuICR0aGlzLT5ndWVzc1N2blZlcnNpb24oJGNvbmZpZyk7Cn0KfQoKcHJpdmF0ZSBmdW5jdGlvbiBndWVzc0dpdFZlcnNpb24oYXJyYXkgJGNvbmZpZykKewokdXRpbCA9IG5ldyBHaXRVdGlsOwokdXRpbC0+Y2xlYW5FbnYoKTsKCgogaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgZGVzY3JpYmUgLS1leGFjdC1tYXRjaCAtLXRhZ3MnLCAkb3V0cHV0KSkgewp0cnkgewpyZXR1cm4gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZSh0cmltKCRvdXRwdXQpKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewp9Cn0KCgogaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgYnJhbmNoIC0tbm8tY29sb3IgLS1uby1hYmJyZXYgLXYnLCAkb3V0cHV0KSkgewokYnJhbmNoZXMgPSBhcnJheSgpOwokaXNGZWF0dXJlQnJhbmNoID0gZmFsc2U7CiR2ZXJzaW9uID0gbnVsbDsKCgogZm9yZWFjaCAoJHRoaXMtPnByb2Nlc3MtPnNwbGl0TGluZXMoJG91dHB1dCkgYXMgJGJyYW5jaCkgewppZiAoJGJyYW5jaCAmJiBwcmVnX21hdGNoKCd7Xig/OlwqICkgKihcKG5vIGJyYW5jaFwpfFwoZGV0YWNoZWQgZnJvbSBcUytcKXxcUyspICooW2EtZjAtOV0rKSAuKiR9JywgJGJyYW5jaCwgJG1hdGNoKSkgewppZiAoJG1hdGNoWzFdID09PSAnKG5vIGJyYW5jaCknIHx8IHN1YnN0cigkbWF0Y2hbMV0sIDAsIDEwKSA9PT0gJyhkZXRhY2hlZCAnKSB7CiR2ZXJzaW9uID0gJ2Rldi0nLiRtYXRjaFsyXTsKJGlzRmVhdHVyZUJyYW5jaCA9IHRydWU7Cn0gZWxzZSB7CiR2ZXJzaW9uID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZUJyYW5jaCgkbWF0Y2hbMV0pOwokaXNGZWF0dXJlQnJhbmNoID0gMCA9PT0gc3RycG9zKCR2ZXJzaW9uLCAnZGV2LScpOwppZiAoJzk5OTk5OTktZGV2JyA9PT0gJHZlcnNpb24pIHsKJHZlcnNpb24gPSAnZGV2LScuJG1hdGNoWzFdOwp9Cn0KfQoKaWYgKCRicmFuY2ggJiYgIXByZWdfbWF0Y2goJ3teICpbXi9dKy9IRUFEIH0nLCAkYnJhbmNoKSkgewppZiAocHJlZ19tYXRjaCgne14oPzpcKiApPyAqKFxTKykgKihbYS1mMC05XSspIC4qJH0nLCAkYnJhbmNoLCAkbWF0Y2gpKSB7CiRicmFuY2hlc1tdID0gJG1hdGNoWzFdOwp9Cn0KfQoKaWYgKCEkaXNGZWF0dXJlQnJhbmNoKSB7CnJldHVybiAkdmVyc2lvbjsKfQoKCiAkdmVyc2lvbiA9ICR0aGlzLT5ndWVzc0ZlYXR1cmVWZXJzaW9uKCRjb25maWcsICR2ZXJzaW9uLCAkYnJhbmNoZXMsICdnaXQgcmV2LWxpc3QgJWNhbmRpZGF0ZSUuLiVicmFuY2glJyk7CgpyZXR1cm4gJHZlcnNpb247Cn0KfQoKcHJpdmF0ZSBmdW5jdGlvbiBndWVzc0hnVmVyc2lvbihhcnJheSAkY29uZmlnKQp7CgogaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdoZyBicmFuY2gnLCAkb3V0cHV0KSkgewokYnJhbmNoID0gdHJpbSgkb3V0cHV0KTsKJHZlcnNpb24gPSAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplQnJhbmNoKCRicmFuY2gpOwokaXNGZWF0dXJlQnJhbmNoID0gMCA9PT0gc3RycG9zKCR2ZXJzaW9uLCAnZGV2LScpOwoKaWYgKCc5OTk5OTk5LWRldicgPT09ICR2ZXJzaW9uKSB7CiR2ZXJzaW9uID0gJ2Rldi0nLiRicmFuY2g7Cn0KCmlmICghJGlzRmVhdHVyZUJyYW5jaCkgewpyZXR1cm4gJHZlcnNpb247Cn0KCgogJGNvbmZpZyA9IGFycmF5KCd1cmwnID0+IGdldGN3ZCgpKTsKJGRyaXZlciA9IG5ldyBIZ0RyaXZlcigkY29uZmlnLCBuZXcgTnVsbElPKCksICR0aGlzLT5jb25maWcsICR0aGlzLT5wcm9jZXNzKTsKJGJyYW5jaGVzID0gYXJyYXlfa2V5cygkZHJpdmVyLT5nZXRCcmFuY2hlcygpKTsKCgogJHZlcnNpb24gPSAkdGhpcy0+Z3Vlc3NGZWF0dXJlVmVyc2lvbigkY29uZmlnLCAkdmVyc2lvbiwgJGJyYW5jaGVzLCAnaGcgbG9nIC1yICJub3QgYW5jZXN0b3JzKFwnJWNhbmRpZGF0ZSVcJykgYW5kIGFuY2VzdG9ycyhcJyVicmFuY2glXCcpIiAtLXRlbXBsYXRlICJ7bm9kZX1cXG4iJyk7CgpyZXR1cm4gJHZlcnNpb247Cn0KfQoKcHJpdmF0ZSBmdW5jdGlvbiBndWVzc0ZlYXR1cmVWZXJzaW9uKGFycmF5ICRjb25maWcsICR2ZXJzaW9uLCBhcnJheSAkYnJhbmNoZXMsICRzY21DbWRsaW5lKQp7CgogCiBpZiAoKGlzc2V0KCRjb25maWdbJ2V4dHJhJ11bJ2JyYW5jaC1hbGlhcyddKSAmJiAhaXNzZXQoJGNvbmZpZ1snZXh0cmEnXVsnYnJhbmNoLWFsaWFzJ11bJHZlcnNpb25dKSkKfHwgc3RycG9zKGpzb25fZW5jb2RlKCRjb25maWcpLCAnInNlbGYudmVyc2lvbiInKQopIHsKJGJyYW5jaCA9IHByZWdfcmVwbGFjZSgne15kZXYtfScsICcnLCAkdmVyc2lvbik7CiRsZW5ndGggPSBQSFBfSU5UX01BWDsKZm9yZWFjaCAoJGJyYW5jaGVzIGFzICRjYW5kaWRhdGUpIHsKCiBpZiAoJGNhbmRpZGF0ZSA9PT0gJGJyYW5jaCB8fCAhcHJlZ19tYXRjaCgne14obWFzdGVyfHRydW5rfGRlZmF1bHR8ZGV2ZWxvcHxcZCtcLi4rKSR9JywgJGNhbmRpZGF0ZSwgJG1hdGNoKSkgewpjb250aW51ZTsKfQoKJGNtZExpbmUgPSBzdHJfcmVwbGFjZShhcnJheSgnJWNhbmRpZGF0ZSUnLCAnJWJyYW5jaCUnKSwgYXJyYXkoJGNhbmRpZGF0ZSwgJGJyYW5jaCksICRzY21DbWRsaW5lKTsKaWYgKDAgIT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjbWRMaW5lLCAkb3V0cHV0KSkgewpjb250aW51ZTsKfQoKaWYgKHN0cmxlbigkb3V0cHV0KSA8ICRsZW5ndGgpIHsKJGxlbmd0aCA9IHN0cmxlbigkb3V0cHV0KTsKJHZlcnNpb24gPSAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplQnJhbmNoKCRjYW5kaWRhdGUpOwppZiAoJzk5OTk5OTktZGV2JyA9PT0gJHZlcnNpb24pIHsKJHZlcnNpb24gPSAnZGV2LScuJG1hdGNoWzFdOwp9Cn0KfQp9CgpyZXR1cm4gJHZlcnNpb247Cn0KCnByaXZhdGUgZnVuY3Rpb24gZ3Vlc3NTdm5WZXJzaW9uKGFycmF5ICRjb25maWcpCnsKU3ZuVXRpbDo6Y2xlYW5FbnYoKTsKCgogaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdzdm4gaW5mbyAtLXhtbCcsICRvdXRwdXQpKSB7CiR0cnVua1BhdGggPSBpc3NldCgkY29uZmlnWyd0cnVuay1wYXRoJ10pID8gcHJlZ19xdW90ZSgkY29uZmlnWyd0cnVuay1wYXRoJ10sICcjJykgOiAndHJ1bmsnOwokYnJhbmNoZXNQYXRoID0gaXNzZXQoJGNvbmZpZ1snYnJhbmNoZXMtcGF0aCddKSA/IHByZWdfcXVvdGUoJGNvbmZpZ1snYnJhbmNoZXMtcGF0aCddLCAnIycpIDogJ2JyYW5jaGVzJzsKJHRhZ3NQYXRoID0gaXNzZXQoJGNvbmZpZ1sndGFncy1wYXRoJ10pID8gcHJlZ19xdW90ZSgkY29uZmlnWyd0YWdzLXBhdGgnXSwgJyMnKSA6ICd0YWdzJzsKCiR1cmxQYXR0ZXJuID0gJyM8dXJsPi4qLygnLiR0cnVua1BhdGguJ3woJy4kYnJhbmNoZXNQYXRoLid8Jy4gJHRhZ3NQYXRoIC4nKS8oLiopKTwvdXJsPiMnOwoKaWYgKHByZWdfbWF0Y2goJHVybFBhdHRlcm4sICRvdXRwdXQsICRtYXRjaGVzKSkgewppZiAoaXNzZXQoJG1hdGNoZXNbMl0pICYmICgkYnJhbmNoZXNQYXRoID09PSAkbWF0Y2hlc1syXSB8fCAkdGFnc1BhdGggPT09ICRtYXRjaGVzWzJdKSkgewoKICR2ZXJzaW9uID0gJHRoaXMtPnZlcnNpb25QYXJzZXItPm5vcm1hbGl6ZUJyYW5jaCgkbWF0Y2hlc1szXSk7CmlmICgnOTk5OTk5OS1kZXYnID09PSAkdmVyc2lvbikgewokdmVyc2lvbiA9ICdkZXYtJy4kbWF0Y2hlc1szXTsKfQpyZXR1cm4gJHZlcnNpb247Cn0KCnJldHVybiAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplKHRyaW0oJG1hdGNoZXNbMV0pKTsKfQp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlOwoKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CnVzZSBDb21wb3NlclxJbnN0YWxsZXJcSW5zdGFsbGF0aW9uTWFuYWdlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUmVwb3NpdG9yeU1hbmFnZXI7CnVzZSBDb21wb3NlclxVdGlsXFByb2Nlc3NFeGVjdXRvcjsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxBcnJheVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxQYWNrYWdlXER1bXBlclxBcnJheUR1bXBlcjsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyXEFycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxWZXJzaW9uXFZlcnNpb25QYXJzZXI7CnVzZSBDb21wb3NlclxVdGlsXEdpdCBhcyBHaXRVdGlsOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CgoKCgoKCgpjbGFzcyBMb2NrZXIKewpwcml2YXRlICRsb2NrRmlsZTsKcHJpdmF0ZSAkcmVwb3NpdG9yeU1hbmFnZXI7CnByaXZhdGUgJGluc3RhbGxhdGlvbk1hbmFnZXI7CnByaXZhdGUgJGhhc2g7CnByaXZhdGUgJGxvYWRlcjsKcHJpdmF0ZSAkZHVtcGVyOwpwcml2YXRlICRwcm9jZXNzOwpwcml2YXRlICRsb2NrRGF0YUNhY2hlOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgSnNvbkZpbGUgJGxvY2tGaWxlLCBSZXBvc2l0b3J5TWFuYWdlciAkcmVwb3NpdG9yeU1hbmFnZXIsIEluc3RhbGxhdGlvbk1hbmFnZXIgJGluc3RhbGxhdGlvbk1hbmFnZXIsICRoYXNoKQp7CiR0aGlzLT5sb2NrRmlsZSA9ICRsb2NrRmlsZTsKJHRoaXMtPnJlcG9zaXRvcnlNYW5hZ2VyID0gJHJlcG9zaXRvcnlNYW5hZ2VyOwokdGhpcy0+aW5zdGFsbGF0aW9uTWFuYWdlciA9ICRpbnN0YWxsYXRpb25NYW5hZ2VyOwokdGhpcy0+aGFzaCA9ICRoYXNoOwokdGhpcy0+bG9hZGVyID0gbmV3IEFycmF5TG9hZGVyKCk7CiR0aGlzLT5kdW1wZXIgPSBuZXcgQXJyYXlEdW1wZXIoKTsKJHRoaXMtPnByb2Nlc3MgPSBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCRpbyk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzTG9ja2VkKCkKewppZiAoISR0aGlzLT5sb2NrRmlsZS0+ZXhpc3RzKCkpIHsKcmV0dXJuIGZhbHNlOwp9CgokZGF0YSA9ICR0aGlzLT5nZXRMb2NrRGF0YSgpOwoKcmV0dXJuIGlzc2V0KCRkYXRhWydwYWNrYWdlcyddKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNGcmVzaCgpCnsKJGxvY2sgPSAkdGhpcy0+bG9ja0ZpbGUtPnJlYWQoKTsKCnJldHVybiAkdGhpcy0+aGFzaCA9PT0gJGxvY2tbJ2hhc2gnXTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb2NrZWRSZXBvc2l0b3J5KCR3aXRoRGV2UmVxcyA9IGZhbHNlKQp7CiRsb2NrRGF0YSA9ICR0aGlzLT5nZXRMb2NrRGF0YSgpOwokcGFja2FnZXMgPSBuZXcgQXJyYXlSZXBvc2l0b3J5KCk7CgokbG9ja2VkUGFja2FnZXMgPSAkbG9ja0RhdGFbJ3BhY2thZ2VzJ107CmlmICgkd2l0aERldlJlcXMpIHsKaWYgKGlzc2V0KCRsb2NrRGF0YVsncGFja2FnZXMtZGV2J10pKSB7CiRsb2NrZWRQYWNrYWdlcyA9IGFycmF5X21lcmdlKCRsb2NrZWRQYWNrYWdlcywgJGxvY2tEYXRhWydwYWNrYWdlcy1kZXYnXSk7Cn0gZWxzZSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIGxvY2sgZmlsZSBkb2VzIG5vdCBjb250YWluIHJlcXVpcmUtZGV2IGluZm9ybWF0aW9uLCBydW4gaW5zdGFsbCB3aXRoIHRoZSAtLW5vLWRldiBvcHRpb24gb3IgcnVuIHVwZGF0ZSB0byBpbnN0YWxsIHRob3NlIHBhY2thZ2VzLicpOwp9Cn0KCmlmIChlbXB0eSgkbG9ja2VkUGFja2FnZXMpKSB7CnJldHVybiAkcGFja2FnZXM7Cn0KCmlmIChpc3NldCgkbG9ja2VkUGFja2FnZXNbMF1bJ25hbWUnXSkpIHsKZm9yZWFjaCAoJGxvY2tlZFBhY2thZ2VzIGFzICRpbmZvKSB7CiRwYWNrYWdlcy0+YWRkUGFja2FnZSgkdGhpcy0+bG9hZGVyLT5sb2FkKCRpbmZvKSk7Cn0KCnJldHVybiAkcGFja2FnZXM7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91ciBjb21wb3Nlci5sb2NrIHdhcyBjcmVhdGVkIGJlZm9yZSAyMDEyLTA5LTE1LCBhbmQgaXMgbm90IHN1cHBvcnRlZCBhbnltb3JlLiBSdW4gImNvbXBvc2VyIHVwZGF0ZSIgdG8gZ2VuZXJhdGUgYSBuZXcgb25lLicpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGxhdGZvcm1SZXF1aXJlbWVudHMoJHdpdGhEZXZSZXFzID0gZmFsc2UpCnsKJGxvY2tEYXRhID0gJHRoaXMtPmdldExvY2tEYXRhKCk7CiR2ZXJzaW9uUGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXIoKTsKJHJlcXVpcmVtZW50cyA9IGFycmF5KCk7CgppZiAoIWVtcHR5KCRsb2NrRGF0YVsncGxhdGZvcm0nXSkpIHsKJHJlcXVpcmVtZW50cyA9ICR2ZXJzaW9uUGFyc2VyLT5wYXJzZUxpbmtzKAonX19ST09UX18nLAonMS4wLjAnLAoncmVxdWlyZXMnLAppc3NldCgkbG9ja0RhdGFbJ3BsYXRmb3JtJ10pID8gJGxvY2tEYXRhWydwbGF0Zm9ybSddIDogYXJyYXkoKQopOwp9CgppZiAoJHdpdGhEZXZSZXFzICYmICFlbXB0eSgkbG9ja0RhdGFbJ3BsYXRmb3JtLWRldiddKSkgewokZGV2UmVxdWlyZW1lbnRzID0gJHZlcnNpb25QYXJzZXItPnBhcnNlTGlua3MoCidfX1JPT1RfXycsCicxLjAuMCcsCidyZXF1aXJlcycsCmlzc2V0KCRsb2NrRGF0YVsncGxhdGZvcm0tZGV2J10pID8gJGxvY2tEYXRhWydwbGF0Zm9ybS1kZXYnXSA6IGFycmF5KCkKKTsKCiRyZXF1aXJlbWVudHMgPSBhcnJheV9tZXJnZSgkcmVxdWlyZW1lbnRzLCAkZGV2UmVxdWlyZW1lbnRzKTsKfQoKcmV0dXJuICRyZXF1aXJlbWVudHM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRNaW5pbXVtU3RhYmlsaXR5KCkKewokbG9ja0RhdGEgPSAkdGhpcy0+Z2V0TG9ja0RhdGEoKTsKCnJldHVybiBpc3NldCgkbG9ja0RhdGFbJ21pbmltdW0tc3RhYmlsaXR5J10pID8gJGxvY2tEYXRhWydtaW5pbXVtLXN0YWJpbGl0eSddIDogJ3N0YWJsZSc7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHlGbGFncygpCnsKJGxvY2tEYXRhID0gJHRoaXMtPmdldExvY2tEYXRhKCk7CgpyZXR1cm4gaXNzZXQoJGxvY2tEYXRhWydzdGFiaWxpdHktZmxhZ3MnXSkgPyAkbG9ja0RhdGFbJ3N0YWJpbGl0eS1mbGFncyddIDogYXJyYXkoKTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEFsaWFzZXMoKQp7CiRsb2NrRGF0YSA9ICR0aGlzLT5nZXRMb2NrRGF0YSgpOwoKcmV0dXJuIGlzc2V0KCRsb2NrRGF0YVsnYWxpYXNlcyddKSA/ICRsb2NrRGF0YVsnYWxpYXNlcyddIDogYXJyYXkoKTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldExvY2tEYXRhKCkKewppZiAobnVsbCAhPT0gJHRoaXMtPmxvY2tEYXRhQ2FjaGUpIHsKcmV0dXJuICR0aGlzLT5sb2NrRGF0YUNhY2hlOwp9CgppZiAoISR0aGlzLT5sb2NrRmlsZS0+ZXhpc3RzKCkpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignTm8gbG9ja2ZpbGUgZm91bmQuIFVuYWJsZSB0byByZWFkIGxvY2tlZCBwYWNrYWdlcycpOwp9CgpyZXR1cm4gJHRoaXMtPmxvY2tEYXRhQ2FjaGUgPSAkdGhpcy0+bG9ja0ZpbGUtPnJlYWQoKTsKfQoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRMb2NrRGF0YShhcnJheSAkcGFja2FnZXMsICRkZXZQYWNrYWdlcywgYXJyYXkgJHBsYXRmb3JtUmVxcywgJHBsYXRmb3JtRGV2UmVxcywgYXJyYXkgJGFsaWFzZXMsICRtaW5pbXVtU3RhYmlsaXR5LCBhcnJheSAkc3RhYmlsaXR5RmxhZ3MpCnsKJGxvY2sgPSBhcnJheSgKJ19yZWFkbWUnID0+IGFycmF5KCdUaGlzIGZpbGUgbG9ja3MgdGhlIGRlcGVuZGVuY2llcyBvZiB5b3VyIHByb2plY3QgdG8gYSBrbm93biBzdGF0ZScsICdSZWFkIG1vcmUgYWJvdXQgaXQgYXQgaHR0cDovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDEtYmFzaWMtdXNhZ2UubWQjY29tcG9zZXItbG9jay10aGUtbG9jay1maWxlJyksCidoYXNoJyA9PiAkdGhpcy0+aGFzaCwKJ3BhY2thZ2VzJyA9PiBudWxsLAoncGFja2FnZXMtZGV2JyA9PiBudWxsLAonYWxpYXNlcycgPT4gYXJyYXkoKSwKJ21pbmltdW0tc3RhYmlsaXR5JyA9PiAkbWluaW11bVN0YWJpbGl0eSwKJ3N0YWJpbGl0eS1mbGFncycgPT4gJHN0YWJpbGl0eUZsYWdzLAopOwoKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJHBhY2thZ2UgPT4gJHZlcnNpb25zKSB7CmZvcmVhY2ggKCR2ZXJzaW9ucyBhcyAkdmVyc2lvbiA9PiAkYWxpYXMpIHsKJGxvY2tbJ2FsaWFzZXMnXVtdID0gYXJyYXkoCidhbGlhcycgPT4gJGFsaWFzWydhbGlhcyddLAonYWxpYXNfbm9ybWFsaXplZCcgPT4gJGFsaWFzWydhbGlhc19ub3JtYWxpemVkJ10sCid2ZXJzaW9uJyA9PiAkdmVyc2lvbiwKJ3BhY2thZ2UnID0+ICRwYWNrYWdlLAopOwp9Cn0KCiRsb2NrWydwYWNrYWdlcyddID0gJHRoaXMtPmxvY2tQYWNrYWdlcygkcGFja2FnZXMpOwppZiAobnVsbCAhPT0gJGRldlBhY2thZ2VzKSB7CiRsb2NrWydwYWNrYWdlcy1kZXYnXSA9ICR0aGlzLT5sb2NrUGFja2FnZXMoJGRldlBhY2thZ2VzKTsKfQoKaWYgKGVtcHR5KCRsb2NrWydwYWNrYWdlcyddKSAmJiBlbXB0eSgkbG9ja1sncGFja2FnZXMtZGV2J10pKSB7CmlmICgkdGhpcy0+bG9ja0ZpbGUtPmV4aXN0cygpKSB7CnVubGluaygkdGhpcy0+bG9ja0ZpbGUtPmdldFBhdGgoKSk7Cn0KCnJldHVybiBmYWxzZTsKfQoKJGxvY2tbJ3BsYXRmb3JtJ10gPSAkcGxhdGZvcm1SZXFzOwokbG9ja1sncGxhdGZvcm0tZGV2J10gPSAkcGxhdGZvcm1EZXZSZXFzOwoKaWYgKCEkdGhpcy0+aXNMb2NrZWQoKSB8fCAkbG9jayAhPT0gJHRoaXMtPmdldExvY2tEYXRhKCkpIHsKJHRoaXMtPmxvY2tGaWxlLT53cml0ZSgkbG9jayk7CiR0aGlzLT5sb2NrRGF0YUNhY2hlID0gbnVsbDsKCnJldHVybiB0cnVlOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCnByaXZhdGUgZnVuY3Rpb24gbG9ja1BhY2thZ2VzKGFycmF5ICRwYWNrYWdlcykKewokbG9ja2VkID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKY29udGludWU7Cn0KCiRuYW1lID0gJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKTsKJHZlcnNpb24gPSAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpOwoKaWYgKCEkbmFtZSB8fCAhJHZlcnNpb24pIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKAonUGFja2FnZSAiJXMiIGhhcyBubyB2ZXJzaW9uIG9yIG5hbWUgYW5kIGNhbiBub3QgYmUgbG9ja2VkJywgJHBhY2thZ2UKKSk7Cn0KCiRzcGVjID0gJHRoaXMtPmR1bXBlci0+ZHVtcCgkcGFja2FnZSk7CnVuc2V0KCRzcGVjWyd2ZXJzaW9uX25vcm1hbGl6ZWQnXSk7CgoKICR0aW1lID0gaXNzZXQoJHNwZWNbJ3RpbWUnXSkgPyAkc3BlY1sndGltZSddIDogbnVsbDsKdW5zZXQoJHNwZWNbJ3RpbWUnXSk7CmlmICgkcGFja2FnZS0+aXNEZXYoKSAmJiAkcGFja2FnZS0+Z2V0SW5zdGFsbGF0aW9uU291cmNlKCkgPT09ICdzb3VyY2UnKSB7CgogJHRpbWUgPSAkdGhpcy0+Z2V0UGFja2FnZVRpbWUoJHBhY2thZ2UpID86ICR0aW1lOwp9CmlmIChudWxsICE9PSAkdGltZSkgewokc3BlY1sndGltZSddID0gJHRpbWU7Cn0KCnVuc2V0KCRzcGVjWydpbnN0YWxsYXRpb24tc291cmNlJ10pOwoKJGxvY2tlZFtdID0gJHNwZWM7Cn0KCnVzb3J0KCRsb2NrZWQsIGZ1bmN0aW9uICgkYSwgJGIpIHsKJGNvbXBhcmlzb24gPSBzdHJjbXAoJGFbJ25hbWUnXSwgJGJbJ25hbWUnXSk7CgppZiAoMCAhPT0gJGNvbXBhcmlzb24pIHsKcmV0dXJuICRjb21wYXJpc29uOwp9CgoKIHJldHVybiBzdHJjbXAoJGFbJ3ZlcnNpb24nXSwgJGJbJ3ZlcnNpb24nXSk7Cn0pOwoKcmV0dXJuICRsb2NrZWQ7Cn0KCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0UGFja2FnZVRpbWUoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKcmV0dXJuIG51bGw7Cn0KCiRwYXRoID0gcmVhbHBhdGgoJHRoaXMtPmluc3RhbGxhdGlvbk1hbmFnZXItPmdldEluc3RhbGxQYXRoKCRwYWNrYWdlKSk7CiRzb3VyY2VUeXBlID0gJHBhY2thZ2UtPmdldFNvdXJjZVR5cGUoKTsKJGRhdGV0aW1lID0gbnVsbDsKCmlmICgkcGF0aCAmJiBpbl9hcnJheSgkc291cmNlVHlwZSwgYXJyYXkoJ2dpdCcsICdoZycpKSkgewokc291cmNlUmVmID0gJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpID86ICRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCk7CnN3aXRjaCAoJHNvdXJjZVR5cGUpIHsKY2FzZSAnZ2l0JzoKJHV0aWwgPSBuZXcgR2l0VXRpbDsKJHV0aWwtPmNsZWFuRW52KCk7CgppZiAoMCA9PT0gJHRoaXMtPnByb2Nlc3MtPmV4ZWN1dGUoJ2dpdCBsb2cgLW4xIC0tcHJldHR5PSVjdCAnLmVzY2FwZXNoZWxsYXJnKCRzb3VyY2VSZWYpLCAkb3V0cHV0LCAkcGF0aCkgJiYgcHJlZ19tYXRjaCgne15ccypcZCtccyokfScsICRvdXRwdXQpKSB7CiRkYXRldGltZSA9IG5ldyBcRGF0ZVRpbWUoJ0AnLnRyaW0oJG91dHB1dCksIG5ldyBcRGF0ZVRpbWVab25lKCdVVEMnKSk7Cn0KYnJlYWs7CgpjYXNlICdoZyc6CmlmICgwID09PSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgnaGcgbG9nIC0tdGVtcGxhdGUgIntkYXRlfGhnZGF0ZX0iIC1yICcuZXNjYXBlc2hlbGxhcmcoJHNvdXJjZVJlZiksICRvdXRwdXQsICRwYXRoKSAmJiBwcmVnX21hdGNoKCd7XlxzKihcZCspXHMqfScsICRvdXRwdXQsICRtYXRjaCkpIHsKJGRhdGV0aW1lID0gbmV3IFxEYXRlVGltZSgnQCcuJG1hdGNoWzFdLCBuZXcgXERhdGVUaW1lWm9uZSgnVVRDJykpOwp9CmJyZWFrOwp9Cn0KCnJldHVybiAkZGF0ZXRpbWUgPyAkZGF0ZXRpbWUtPmZvcm1hdCgnWS1tLWQgSDppOnMnKSA6IG51bGw7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlOwoKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUmVwb3NpdG9yeUludGVyZmFjZTsKCgoKCgoKaW50ZXJmYWNlIFBhY2thZ2VJbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmV0dHlOYW1lKCk7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lcygpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SWQoJGlkKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldElkKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RldigpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VGFyZ2V0RGlyKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRFeHRyYSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SW5zdGFsbGF0aW9uU291cmNlKCR0eXBlKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluc3RhbGxhdGlvblNvdXJjZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlVHlwZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlVXJsKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2VSZWZlcmVuY2UoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERpc3RUeXBlKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0VXJsKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0UmVmZXJlbmNlKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0U2hhMUNoZWNrc3VtKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmV0dHlWZXJzaW9uKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZWxlYXNlRGF0ZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhYmlsaXR5KCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWlyZXMoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb25mbGljdHMoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcm92aWRlcygpOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlcGxhY2VzKCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGV2UmVxdWlyZXMoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdWdnZXN0cygpOwoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBdXRvbG9hZCgpOwoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZXZBdXRvbG9hZCgpOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluY2x1ZGVQYXRocygpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UmVwb3NpdG9yeShSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvc2l0b3J5KTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlcG9zaXRvcnkoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEJpbmFyaWVzKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVbmlxdWVOYW1lKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROb3RpZmljYXRpb25VcmwoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVN0cmluZygpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXJjaGl2ZUV4Y2x1ZGVzKCk7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZTsKCnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFBsYXRmb3JtUmVwb3NpdG9yeTsKCgoKCgoKYWJzdHJhY3QgY2xhc3MgQmFzZVBhY2thZ2UgaW1wbGVtZW50cyBQYWNrYWdlSW50ZXJmYWNlCnsKcHVibGljIHN0YXRpYyAkc3VwcG9ydGVkTGlua1R5cGVzID0gYXJyYXkoCidyZXF1aXJlJyA9PiBhcnJheSgnZGVzY3JpcHRpb24nID0+ICdyZXF1aXJlcycsICdtZXRob2QnID0+ICdyZXF1aXJlcycpLAonY29uZmxpY3QnID0+IGFycmF5KCdkZXNjcmlwdGlvbicgPT4gJ2NvbmZsaWN0cycsICdtZXRob2QnID0+ICdjb25mbGljdHMnKSwKJ3Byb3ZpZGUnID0+IGFycmF5KCdkZXNjcmlwdGlvbicgPT4gJ3Byb3ZpZGVzJywgJ21ldGhvZCcgPT4gJ3Byb3ZpZGVzJyksCidyZXBsYWNlJyA9PiBhcnJheSgnZGVzY3JpcHRpb24nID0+ICdyZXBsYWNlcycsICdtZXRob2QnID0+ICdyZXBsYWNlcycpLAoncmVxdWlyZS1kZXYnID0+IGFycmF5KCdkZXNjcmlwdGlvbicgPT4gJ3JlcXVpcmVzIChmb3IgZGV2ZWxvcG1lbnQpJywgJ21ldGhvZCcgPT4gJ2RldlJlcXVpcmVzJyksCik7Cgpjb25zdCBTVEFCSUxJVFlfU1RBQkxFID0gMDsKY29uc3QgU1RBQklMSVRZX1JDID0gNTsKY29uc3QgU1RBQklMSVRZX0JFVEEgPSAxMDsKY29uc3QgU1RBQklMSVRZX0FMUEhBID0gMTU7CmNvbnN0IFNUQUJJTElUWV9ERVYgPSAyMDsKCnB1YmxpYyBzdGF0aWMgJHN0YWJpbGl0aWVzID0gYXJyYXkoCidzdGFibGUnID0+IHNlbGY6OlNUQUJJTElUWV9TVEFCTEUsCidSQycgPT4gc2VsZjo6U1RBQklMSVRZX1JDLAonYmV0YScgPT4gc2VsZjo6U1RBQklMSVRZX0JFVEEsCidhbHBoYScgPT4gc2VsZjo6U1RBQklMSVRZX0FMUEhBLAonZGV2JyA9PiBzZWxmOjpTVEFCSUxJVFlfREVWLAopOwoKcHJvdGVjdGVkICRuYW1lOwpwcm90ZWN0ZWQgJHByZXR0eU5hbWU7Cgpwcm90ZWN0ZWQgJHJlcG9zaXRvcnk7CnByb3RlY3RlZCAkaWQ7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSkKewokdGhpcy0+cHJldHR5TmFtZSA9ICRuYW1lOwokdGhpcy0+bmFtZSA9IHN0cnRvbG93ZXIoJG5hbWUpOwokdGhpcy0+aWQgPSAtMTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAkdGhpcy0+bmFtZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eU5hbWUoKQp7CnJldHVybiAkdGhpcy0+cHJldHR5TmFtZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWVzKCkKewokbmFtZXMgPSBhcnJheSgKJHRoaXMtPmdldE5hbWUoKSA9PiB0cnVlLAopOwoKZm9yZWFjaCAoJHRoaXMtPmdldFByb3ZpZGVzKCkgYXMgJGxpbmspIHsKJG5hbWVzWyRsaW5rLT5nZXRUYXJnZXQoKV0gPSB0cnVlOwp9Cgpmb3JlYWNoICgkdGhpcy0+Z2V0UmVwbGFjZXMoKSBhcyAkbGluaykgewokbmFtZXNbJGxpbmstPmdldFRhcmdldCgpXSA9IHRydWU7Cn0KCnJldHVybiBhcnJheV9rZXlzKCRuYW1lcyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRJZCgkaWQpCnsKJHRoaXMtPmlkID0gJGlkOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQp7CnJldHVybiAkdGhpcy0+aWQ7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRSZXBvc2l0b3J5KFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG9zaXRvcnkpCnsKaWYgKCR0aGlzLT5yZXBvc2l0b3J5ICYmICRyZXBvc2l0b3J5ICE9PSAkdGhpcy0+cmVwb3NpdG9yeSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdBIHBhY2thZ2UgY2FuIG9ubHkgYmUgYWRkZWQgdG8gb25lIHJlcG9zaXRvcnknKTsKfQokdGhpcy0+cmVwb3NpdG9yeSA9ICRyZXBvc2l0b3J5Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVwb3NpdG9yeSgpCnsKcmV0dXJuICR0aGlzLT5yZXBvc2l0b3J5Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1BsYXRmb3JtKCkKewpyZXR1cm4gJHRoaXMtPmdldFJlcG9zaXRvcnkoKSBpbnN0YW5jZW9mIFBsYXRmb3JtUmVwb3NpdG9yeTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VW5pcXVlTmFtZSgpCnsKcmV0dXJuICR0aGlzLT5nZXROYW1lKCkuJy0nLiR0aGlzLT5nZXRWZXJzaW9uKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokc2VsZiA9ICR0aGlzOwppZiAoJHRoaXMgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJHNlbGYgPSAkdGhpcy0+Z2V0QWxpYXNPZigpOwp9CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewokcGFja2FnZSA9ICRwYWNrYWdlLT5nZXRBbGlhc09mKCk7Cn0KCnJldHVybiAkcGFja2FnZSA9PT0gJHNlbGY7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CnJldHVybiAkdGhpcy0+Z2V0VW5pcXVlTmFtZSgpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCkKewpyZXR1cm4gJHRoaXMtPmdldFByZXR0eU5hbWUoKS4nICcuJHRoaXMtPmdldFByZXR0eVZlcnNpb24oKTsKfQoKcHVibGljIGZ1bmN0aW9uIF9fY2xvbmUoKQp7CiR0aGlzLT5yZXBvc2l0b3J5ID0gbnVsbDsKJHRoaXMtPmlkID0gLTE7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb247Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxCYXNlUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGluazsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnRcRW1wdHlDb25zdHJhaW50Owp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxNdWx0aUNvbnN0cmFpbnQ7CnVzZSBDb21wb3NlclxQYWNrYWdlXExpbmtDb25zdHJhaW50XFZlcnNpb25Db25zdHJhaW50OwoKCgoKCgpjbGFzcyBWZXJzaW9uUGFyc2VyCnsKcHJpdmF0ZSBzdGF0aWMgJG1vZGlmaWVyUmVnZXggPSAnWy5fLV0/KD86KHN0YWJsZXxiZXRhfGJ8UkN8YWxwaGF8YXxwYXRjaHxwbHxwKSg/OlsuLV0/KFxkKykpPyk/KFsuLV0/ZGV2KT8nOwoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVN0YWJpbGl0eSgkdmVyc2lvbikKewokdmVyc2lvbiA9IHByZWdfcmVwbGFjZSgneyMuKyR9aScsICcnLCAkdmVyc2lvbik7CgppZiAoJ2Rldi0nID09PSBzdWJzdHIoJHZlcnNpb24sIDAsIDQpIHx8ICctZGV2JyA9PT0gc3Vic3RyKCR2ZXJzaW9uLCAtNCkpIHsKcmV0dXJuICdkZXYnOwp9CgpwcmVnX21hdGNoKCd7Jy5zZWxmOjokbW9kaWZpZXJSZWdleC4nJH1pJywgc3RydG9sb3dlcigkdmVyc2lvbiksICRtYXRjaCk7CmlmICghZW1wdHkoJG1hdGNoWzNdKSkgewpyZXR1cm4gJ2Rldic7Cn0KCmlmICghZW1wdHkoJG1hdGNoWzFdKSkgewppZiAoJ2JldGEnID09PSAkbWF0Y2hbMV0gfHwgJ2InID09PSAkbWF0Y2hbMV0pIHsKcmV0dXJuICdiZXRhJzsKfQppZiAoJ2FscGhhJyA9PT0gJG1hdGNoWzFdIHx8ICdhJyA9PT0gJG1hdGNoWzFdKSB7CnJldHVybiAnYWxwaGEnOwp9CmlmICgncmMnID09PSAkbWF0Y2hbMV0pIHsKcmV0dXJuICdSQyc7Cn0KfQoKcmV0dXJuICdzdGFibGUnOwp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIG5vcm1hbGl6ZVN0YWJpbGl0eSgkc3RhYmlsaXR5KQp7CiRzdGFiaWxpdHkgPSBzdHJ0b2xvd2VyKCRzdGFiaWxpdHkpOwoKcmV0dXJuICRzdGFiaWxpdHkgPT09ICdyYycgPyAnUkMnIDogJHN0YWJpbGl0eTsKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICR0cnVuY2F0ZSA9IHRydWUpCnsKaWYgKCEkcGFja2FnZS0+aXNEZXYoKSB8fCAhaW5fYXJyYXkoJHBhY2thZ2UtPmdldFNvdXJjZVR5cGUoKSwgYXJyYXkoJ2hnJywgJ2dpdCcpKSkgewpyZXR1cm4gJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKTsKfQoKCiBpZiAoJHRydW5jYXRlICYmIHN0cmxlbigkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkpID09PSA0MCkgewpyZXR1cm4gJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSAuICcgJyAuIHN1YnN0cigkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCksIDAsIDcpOwp9CgpyZXR1cm4gJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSAuICcgJyAuICRwYWNrYWdlLT5nZXRTb3VyY2VSZWZlcmVuY2UoKTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplKCR2ZXJzaW9uLCAkZnVsbFZlcnNpb24gPSBudWxsKQp7CiR2ZXJzaW9uID0gdHJpbSgkdmVyc2lvbik7CmlmIChudWxsID09PSAkZnVsbFZlcnNpb24pIHsKJGZ1bGxWZXJzaW9uID0gJHZlcnNpb247Cn0KCgogaWYgKHByZWdfbWF0Y2goJ3teKFteLFxzXSspICthcyArKFteLFxzXSspJH0nLCAkdmVyc2lvbiwgJG1hdGNoKSkgewokdmVyc2lvbiA9ICRtYXRjaFsxXTsKfQoKCiBpZiAocHJlZ19tYXRjaCgne14oPzpkZXYtKT8oPzptYXN0ZXJ8dHJ1bmt8ZGVmYXVsdCkkfWknLCAkdmVyc2lvbikpIHsKcmV0dXJuICc5OTk5OTk5LWRldic7Cn0KCmlmICgnZGV2LScgPT09IHN0cnRvbG93ZXIoc3Vic3RyKCR2ZXJzaW9uLCAwLCA0KSkpIHsKcmV0dXJuICdkZXYtJy5zdWJzdHIoJHZlcnNpb24sIDQpOwp9CgoKIGlmIChwcmVnX21hdGNoKCd7XnY/KFxkezEsM30pKFwuXGQrKT8oXC5cZCspPyhcLlxkKyk/Jy5zZWxmOjokbW9kaWZpZXJSZWdleC4nJH1pJywgJHZlcnNpb24sICRtYXRjaGVzKSkgewokdmVyc2lvbiA9ICRtYXRjaGVzWzFdCi4oIWVtcHR5KCRtYXRjaGVzWzJdKSA/ICRtYXRjaGVzWzJdIDogJy4wJykKLighZW1wdHkoJG1hdGNoZXNbM10pID8gJG1hdGNoZXNbM10gOiAnLjAnKQouKCFlbXB0eSgkbWF0Y2hlc1s0XSkgPyAkbWF0Y2hlc1s0XSA6ICcuMCcpOwokaW5kZXggPSA1Owp9IGVsc2VpZiAocHJlZ19tYXRjaCgne152PyhcZHs0fSg/OlsuOi1dP1xkezJ9KXsxLDZ9KD86Wy46LV0/XGR7MSwzfSk/KScuc2VsZjo6JG1vZGlmaWVyUmVnZXguJyR9aScsICR2ZXJzaW9uLCAkbWF0Y2hlcykpIHsgCiAkdmVyc2lvbiA9IHByZWdfcmVwbGFjZSgne1xEfScsICctJywgJG1hdGNoZXNbMV0pOwokaW5kZXggPSAyOwp9CgoKIGlmIChpc3NldCgkaW5kZXgpKSB7CmlmICghZW1wdHkoJG1hdGNoZXNbJGluZGV4XSkpIHsKaWYgKCdzdGFibGUnID09PSAkbWF0Y2hlc1skaW5kZXhdKSB7CnJldHVybiAkdmVyc2lvbjsKfQokdmVyc2lvbiAuPSAnLScgLiAkdGhpcy0+ZXhwYW5kU3RhYmlsaXR5KCRtYXRjaGVzWyRpbmRleF0pIC4gKCFlbXB0eSgkbWF0Y2hlc1skaW5kZXgrMV0pID8gJG1hdGNoZXNbJGluZGV4KzFdIDogJycpOwp9CgppZiAoIWVtcHR5KCRtYXRjaGVzWyRpbmRleCsyXSkpIHsKJHZlcnNpb24gLj0gJy1kZXYnOwp9CgpyZXR1cm4gJHZlcnNpb247Cn0KCgogaWYgKHByZWdfbWF0Y2goJ3soLio/KVsuLV0/ZGV2JH1pJywgJHZlcnNpb24sICRtYXRjaCkpIHsKdHJ5IHsKcmV0dXJuICR0aGlzLT5ub3JtYWxpemVCcmFuY2goJG1hdGNoWzFdKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkge30KfQoKJGV4dHJhTWVzc2FnZSA9ICcnOwppZiAocHJlZ19tYXRjaCgneyArYXMgKycucHJlZ19xdW90ZSgkdmVyc2lvbikuJyR9JywgJGZ1bGxWZXJzaW9uKSkgewokZXh0cmFNZXNzYWdlID0gJyBpbiAiJy4kZnVsbFZlcnNpb24uJyIsIHRoZSBhbGlhcyBtdXN0IGJlIGFuIGV4YWN0IHZlcnNpb24nOwp9IGVsc2VpZiAocHJlZ19tYXRjaCgne14nLnByZWdfcXVvdGUoJHZlcnNpb24pLicgK2FzICt9JywgJGZ1bGxWZXJzaW9uKSkgewokZXh0cmFNZXNzYWdlID0gJyBpbiAiJy4kZnVsbFZlcnNpb24uJyIsIHRoZSBhbGlhcyBzb3VyY2UgbXVzdCBiZSBhbiBleGFjdCB2ZXJzaW9uLCBpZiBpdCBpcyBhIGJyYW5jaCBuYW1lIHlvdSBzaG91bGQgcHJlZml4IGl0IHdpdGggZGV2LSc7Cn0KCnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdJbnZhbGlkIHZlcnNpb24gc3RyaW5nICInLiR2ZXJzaW9uLiciJy4kZXh0cmFNZXNzYWdlKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG5vcm1hbGl6ZUJyYW5jaCgkbmFtZSkKewokbmFtZSA9IHRyaW0oJG5hbWUpOwoKaWYgKGluX2FycmF5KCRuYW1lLCBhcnJheSgnbWFzdGVyJywgJ3RydW5rJywgJ2RlZmF1bHQnKSkpIHsKcmV0dXJuICR0aGlzLT5ub3JtYWxpemUoJG5hbWUpOwp9CgppZiAocHJlZ19tYXRjaCgnI152PyhcZCspKFwuKD86XGQrfFt4Kl0pKT8oXC4oPzpcZCt8W3gqXSkpPyhcLig/OlxkK3xbeCpdKSk/JCNpJywgJG5hbWUsICRtYXRjaGVzKSkgewokdmVyc2lvbiA9ICcnOwpmb3IgKCRpID0gMTsgJGkgPCA1OyAkaSsrKSB7CiR2ZXJzaW9uIC49IGlzc2V0KCRtYXRjaGVzWyRpXSkgPyBzdHJfcmVwbGFjZSgnKicsICd4JywgJG1hdGNoZXNbJGldKSA6ICcueCc7Cn0KCnJldHVybiBzdHJfcmVwbGFjZSgneCcsICc5OTk5OTk5JywgJHZlcnNpb24pLictZGV2JzsKfQoKcmV0dXJuICdkZXYtJy4kbmFtZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBwYXJzZUxpbmtzKCRzb3VyY2UsICRzb3VyY2VWZXJzaW9uLCAkZGVzY3JpcHRpb24sICRsaW5rcykKewokcmVzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGxpbmtzIGFzICR0YXJnZXQgPT4gJGNvbnN0cmFpbnQpIHsKaWYgKCdzZWxmLnZlcnNpb24nID09PSAkY29uc3RyYWludCkgewokcGFyc2VkQ29uc3RyYWludCA9ICR0aGlzLT5wYXJzZUNvbnN0cmFpbnRzKCRzb3VyY2VWZXJzaW9uKTsKfSBlbHNlIHsKJHBhcnNlZENvbnN0cmFpbnQgPSAkdGhpcy0+cGFyc2VDb25zdHJhaW50cygkY29uc3RyYWludCk7Cn0KJHJlc1tzdHJ0b2xvd2VyKCR0YXJnZXQpXSA9IG5ldyBMaW5rKCRzb3VyY2UsICR0YXJnZXQsICRwYXJzZWRDb25zdHJhaW50LCAkZGVzY3JpcHRpb24sICRjb25zdHJhaW50KTsKfQoKcmV0dXJuICRyZXM7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBwYXJzZUNvbnN0cmFpbnRzKCRjb25zdHJhaW50cykKewokcHJldHR5Q29uc3RyYWludCA9ICRjb25zdHJhaW50czsKCmlmIChwcmVnX21hdGNoKCd7XihbXixcc10qPylAKCcuaW1wbG9kZSgnfCcsIGFycmF5X2tleXMoQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllcykpLicpJH1pJywgJGNvbnN0cmFpbnRzLCAkbWF0Y2gpKSB7CiRjb25zdHJhaW50cyA9IGVtcHR5KCRtYXRjaFsxXSkgPyAnKicgOiAkbWF0Y2hbMV07Cn0KCmlmIChwcmVnX21hdGNoKCd7XihkZXYtW14sXHNAXSs/fFteLFxzQF0rP1wueC1kZXYpIy4rJH1pJywgJGNvbnN0cmFpbnRzLCAkbWF0Y2gpKSB7CiRjb25zdHJhaW50cyA9ICRtYXRjaFsxXTsKfQoKJG9yQ29uc3RyYWludHMgPSBwcmVnX3NwbGl0KCd7XHMqXHxccyp9JywgdHJpbSgkY29uc3RyYWludHMpKTsKJG9yR3JvdXBzID0gYXJyYXkoKTsKZm9yZWFjaCAoJG9yQ29uc3RyYWludHMgYXMgJGNvbnN0cmFpbnRzKSB7CiRhbmRDb25zdHJhaW50cyA9IHByZWdfc3BsaXQoJ3tccyosXHMqfScsICRjb25zdHJhaW50cyk7CgppZiAoY291bnQoJGFuZENvbnN0cmFpbnRzKSA+IDEpIHsKJGNvbnN0cmFpbnRPYmplY3RzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGFuZENvbnN0cmFpbnRzIGFzICRjb25zdHJhaW50KSB7CiRjb25zdHJhaW50T2JqZWN0cyA9IGFycmF5X21lcmdlKCRjb25zdHJhaW50T2JqZWN0cywgJHRoaXMtPnBhcnNlQ29uc3RyYWludCgkY29uc3RyYWludCkpOwp9Cn0gZWxzZSB7CiRjb25zdHJhaW50T2JqZWN0cyA9ICR0aGlzLT5wYXJzZUNvbnN0cmFpbnQoJGFuZENvbnN0cmFpbnRzWzBdKTsKfQoKaWYgKDEgPT09IGNvdW50KCRjb25zdHJhaW50T2JqZWN0cykpIHsKJGNvbnN0cmFpbnQgPSAkY29uc3RyYWludE9iamVjdHNbMF07Cn0gZWxzZSB7CiRjb25zdHJhaW50ID0gbmV3IE11bHRpQ29uc3RyYWludCgkY29uc3RyYWludE9iamVjdHMpOwp9Cgokb3JHcm91cHNbXSA9ICRjb25zdHJhaW50Owp9CgppZiAoMSA9PT0gY291bnQoJG9yR3JvdXBzKSkgewokY29uc3RyYWludCA9ICRvckdyb3Vwc1swXTsKfSBlbHNlIHsKJGNvbnN0cmFpbnQgPSBuZXcgTXVsdGlDb25zdHJhaW50KCRvckdyb3VwcywgZmFsc2UpOwp9CgokY29uc3RyYWludC0+c2V0UHJldHR5U3RyaW5nKCRwcmV0dHlDb25zdHJhaW50KTsKCnJldHVybiAkY29uc3RyYWludDsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZUNvbnN0cmFpbnQoJGNvbnN0cmFpbnQpCnsKaWYgKHByZWdfbWF0Y2goJ3teKFteLFxzXSs/KUAoJy5pbXBsb2RlKCd8JywgYXJyYXlfa2V5cyhCYXNlUGFja2FnZTo6JHN0YWJpbGl0aWVzKSkuJykkfWknLCAkY29uc3RyYWludCwgJG1hdGNoKSkgewokY29uc3RyYWludCA9ICRtYXRjaFsxXTsKaWYgKCRtYXRjaFsyXSAhPT0gJ3N0YWJsZScpIHsKJHN0YWJpbGl0eU1vZGlmaWVyID0gJG1hdGNoWzJdOwp9Cn0KCmlmIChwcmVnX21hdGNoKCd7Xlt4Kl0oXC5beCpdKSokfWknLCAkY29uc3RyYWludCkpIHsKcmV0dXJuIGFycmF5KG5ldyBFbXB0eUNvbnN0cmFpbnQpOwp9CgoKIAogCiAKIAogaWYgKHByZWdfbWF0Y2goJ3tefj4/KFxkKykoPzpcLihcZCspKT8oPzpcLihcZCspKT8oPzpcLihcZCspKT8nLnNlbGY6OiRtb2RpZmllclJlZ2V4Lic/JH1pJywgJGNvbnN0cmFpbnQsICRtYXRjaGVzKSkgewppZiAoc3Vic3RyKCRjb25zdHJhaW50LCAwLCAyKSA9PT0gJ34+Jykgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigKJ0NvdWxkIG5vdCBwYXJzZSB2ZXJzaW9uIGNvbnN0cmFpbnQgJy4kY29uc3RyYWludC4nOiAnLgonSW52YWxpZCBvcGVyYXRvciAifj4iLCB5b3UgcHJvYmFibHkgbWVhbnQgdG8gdXNlIHRoZSAifiIgb3BlcmF0b3InCik7Cn0KCgogaWYgKGlzc2V0KCRtYXRjaGVzWzRdKSAmJiAnJyAhPT0gJG1hdGNoZXNbNF0pIHsKJHBvc2l0aW9uID0gNDsKfSBlbHNlaWYgKGlzc2V0KCRtYXRjaGVzWzNdKSAmJiAnJyAhPT0gJG1hdGNoZXNbM10pIHsKJHBvc2l0aW9uID0gMzsKfSBlbHNlaWYgKGlzc2V0KCRtYXRjaGVzWzJdKSAmJiAnJyAhPT0gJG1hdGNoZXNbMl0pIHsKJHBvc2l0aW9uID0gMjsKfSBlbHNlIHsKJHBvc2l0aW9uID0gMTsKfQoKCiAkc3RhYmlsaXR5U3VmZml4ID0gJyc7CmlmICghZW1wdHkoJG1hdGNoZXNbNV0pKSB7CiRzdGFiaWxpdHlTdWZmaXggLj0gJy0nIC4gJHRoaXMtPmV4cGFuZFN0YWJpbGl0eSgkbWF0Y2hlc1s1XSkgLiAoIWVtcHR5KCRtYXRjaGVzWzZdKSA/ICRtYXRjaGVzWzZdIDogJycpOwp9CgppZiAoIWVtcHR5KCRtYXRjaGVzWzddKSkgewokc3RhYmlsaXR5U3VmZml4IC49ICctZGV2JzsKfQoKaWYgKCEkc3RhYmlsaXR5U3VmZml4KSB7CiRzdGFiaWxpdHlTdWZmaXggPSAiLWRldiI7Cn0KJGxvd1ZlcnNpb24gPSAkdGhpcy0+bWFuaXB1bGF0ZVZlcnNpb25TdHJpbmcoJG1hdGNoZXMsICRwb3NpdGlvbiwgMCkgLiAkc3RhYmlsaXR5U3VmZml4OwokbG93ZXJCb3VuZCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPj0nLCAkbG93VmVyc2lvbik7CgoKIAogJGhpZ2hQb3NpdGlvbiA9IG1heCgxLCAkcG9zaXRpb24gLSAxKTsKJGhpZ2hWZXJzaW9uID0gJHRoaXMtPm1hbmlwdWxhdGVWZXJzaW9uU3RyaW5nKCRtYXRjaGVzLCAkaGlnaFBvc2l0aW9uLCAxKSAuICctZGV2JzsKJHVwcGVyQm91bmQgPSBuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pOwoKcmV0dXJuIGFycmF5KAokbG93ZXJCb3VuZCwKJHVwcGVyQm91bmQKKTsKfQoKCiBpZiAocHJlZ19tYXRjaCgne14oXGQrKSg/OlwuKFxkKykpPyg/OlwuKFxkKykpP1wuW3gqXSR9JywgJGNvbnN0cmFpbnQsICRtYXRjaGVzKSkgewppZiAoaXNzZXQoJG1hdGNoZXNbM10pICYmICcnICE9PSAkbWF0Y2hlc1szXSkgewokcG9zaXRpb24gPSAzOwp9IGVsc2VpZiAoaXNzZXQoJG1hdGNoZXNbMl0pICYmICcnICE9PSAkbWF0Y2hlc1syXSkgewokcG9zaXRpb24gPSAyOwp9IGVsc2UgewokcG9zaXRpb24gPSAxOwp9CgokbG93VmVyc2lvbiA9ICR0aGlzLT5tYW5pcHVsYXRlVmVyc2lvblN0cmluZygkbWF0Y2hlcywgJHBvc2l0aW9uKSAuICItZGV2IjsKJGhpZ2hWZXJzaW9uID0gJHRoaXMtPm1hbmlwdWxhdGVWZXJzaW9uU3RyaW5nKCRtYXRjaGVzLCAkcG9zaXRpb24sIDEpIC4gIi1kZXYiOwoKaWYgKCRsb3dWZXJzaW9uID09PSAiMC4wLjAuMC1kZXYiKSB7CnJldHVybiBhcnJheShuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pKTsKfQoKcmV0dXJuIGFycmF5KApuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJz49JywgJGxvd1ZlcnNpb24pLApuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJzwnLCAkaGlnaFZlcnNpb24pLAopOwp9CgoKIGlmIChwcmVnX21hdGNoKCd7Xig8PnwhPXw+PT98PD0/fD09Pyk/XHMqKC4qKX0nLCAkY29uc3RyYWludCwgJG1hdGNoZXMpKSB7CnRyeSB7CiR2ZXJzaW9uID0gJHRoaXMtPm5vcm1hbGl6ZSgkbWF0Y2hlc1syXSk7CgppZiAoIWVtcHR5KCRzdGFiaWxpdHlNb2RpZmllcikgJiYgJHRoaXMtPnBhcnNlU3RhYmlsaXR5KCR2ZXJzaW9uKSA9PT0gJ3N0YWJsZScpIHsKJHZlcnNpb24gLj0gJy0nIC4gJHN0YWJpbGl0eU1vZGlmaWVyOwp9IGVsc2VpZiAoJzwnID09PSAkbWF0Y2hlc1sxXSkgewppZiAoIXByZWdfbWF0Y2goJy8tc3RhYmxlJC8nLCBzdHJ0b2xvd2VyKCRtYXRjaGVzWzJdKSkpIHsKJHZlcnNpb24gLj0gJy1kZXYnOwp9Cn0KCnJldHVybiBhcnJheShuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJG1hdGNoZXNbMV0gPzogJz0nLCAkdmVyc2lvbikpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7IH0KfQoKJG1lc3NhZ2UgPSAnQ291bGQgbm90IHBhcnNlIHZlcnNpb24gY29uc3RyYWludCAnLiRjb25zdHJhaW50OwppZiAoaXNzZXQoJGUpKSB7CiRtZXNzYWdlIC49ICc6ICcuICRlLT5nZXRNZXNzYWdlKCk7Cn0KCnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCRtZXNzYWdlKTsKfQoKCgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIG1hbmlwdWxhdGVWZXJzaW9uU3RyaW5nKCRtYXRjaGVzLCAkcG9zaXRpb24sICRpbmNyZW1lbnQgPSAwLCAkcGFkID0gJzAnKQp7CmZvciAoJGkgPSA0OyAkaSA+IDA7ICRpLS0pIHsKaWYgKCRpID4gJHBvc2l0aW9uKSB7CiRtYXRjaGVzWyRpXSA9ICRwYWQ7Cn0gZWxzZWlmICgkaSA9PSAkcG9zaXRpb24gJiYgJGluY3JlbWVudCkgewokbWF0Y2hlc1skaV0gKz0gJGluY3JlbWVudDsKCiBpZiAoJG1hdGNoZXNbJGldIDwgMCkgewokbWF0Y2hlc1skaV0gPSAkcGFkOwokcG9zaXRpb24tLTsKCgogaWYgKCRpID09IDEpIHsKcmV0dXJuOwp9Cn0KfQp9CgpyZXR1cm4gJG1hdGNoZXNbMV0gLiAnLicgLiAkbWF0Y2hlc1syXSAuICcuJyAuICRtYXRjaGVzWzNdIC4gJy4nIC4gJG1hdGNoZXNbNF07Cn0KCnByaXZhdGUgZnVuY3Rpb24gZXhwYW5kU3RhYmlsaXR5KCRzdGFiaWxpdHkpCnsKJHN0YWJpbGl0eSA9IHN0cnRvbG93ZXIoJHN0YWJpbGl0eSk7Cgpzd2l0Y2ggKCRzdGFiaWxpdHkpIHsKY2FzZSAnYSc6CnJldHVybiAnYWxwaGEnOwpjYXNlICdiJzoKcmV0dXJuICdiZXRhJzsKY2FzZSAncCc6CmNhc2UgJ3BsJzoKcmV0dXJuICdwYXRjaCc7CmNhc2UgJ3JjJzoKcmV0dXJuICdSQyc7CmRlZmF1bHQ6CnJldHVybiAkc3RhYmlsaXR5Owp9Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBwYXJzZU5hbWVWZXJzaW9uUGFpcnMoYXJyYXkgJHBhaXJzKQp7CiRwYWlycyA9IGFycmF5X3ZhbHVlcygkcGFpcnMpOwokcmVzdWx0ID0gYXJyYXkoKTsKCmZvciAoJGkgPSAwLCAkY291bnQgPSBjb3VudCgkcGFpcnMpOyAkaSA8ICRjb3VudDsgJGkrKykgewokcGFpciA9IHByZWdfcmVwbGFjZSgne14oW149OiBdKylbPTogXSguKikkfScsICckMSAkMicsIHRyaW0oJHBhaXJzWyRpXSkpOwppZiAoZmFsc2UgPT09IHN0cnBvcygkcGFpciwgJyAnKSAmJiBpc3NldCgkcGFpcnNbJGkrMV0pICYmIGZhbHNlID09PSBzdHJwb3MoJHBhaXJzWyRpKzFdLCAnLycpKSB7CiRwYWlyIC49ICcgJy4kcGFpcnNbJGkrMV07CiRpKys7Cn0KCmlmIChzdHJwb3MoJHBhaXIsICcgJykpIHsKbGlzdCgkbmFtZSwgJHZlcnNpb24pID0gZXhwbG9kZSgiICIsICRwYWlyLCAyKTsKJHJlc3VsdFtdID0gYXJyYXkoJ25hbWUnID0+ICRuYW1lLCAndmVyc2lvbicgPT4gJHZlcnNpb24pOwp9IGVsc2UgewokcmVzdWx0W10gPSBhcnJheSgnbmFtZScgPT4gJHBhaXIpOwp9Cn0KCnJldHVybiAkcmVzdWx0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZTsKCgoKCgoKaW50ZXJmYWNlIENvbXBsZXRlUGFja2FnZUludGVyZmFjZSBleHRlbmRzIFBhY2thZ2VJbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTY3JpcHRzKCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlcG9zaXRvcmllcygpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TGljZW5zZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0S2V5d29yZHMoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERlc2NyaXB0aW9uKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRIb21lcGFnZSgpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JzKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdXBwb3J0KCk7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZTsKCgoKCgoKaW50ZXJmYWNlIFJvb3RQYWNrYWdlSW50ZXJmYWNlIGV4dGVuZHMgQ29tcGxldGVQYWNrYWdlSW50ZXJmYWNlCnsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QWxpYXNlcygpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TWluaW11bVN0YWJpbGl0eSgpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHlGbGFncygpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZWZlcmVuY2VzKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmZXJTdGFibGUoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJlcXVpcmVzKGFycmF5ICRyZXF1aXJlcyk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZXZSZXF1aXJlcyhhcnJheSAkZGV2UmVxdWlyZXMpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2U7CgoKCgoKCmNsYXNzIFJvb3RQYWNrYWdlIGV4dGVuZHMgQ29tcGxldGVQYWNrYWdlIGltcGxlbWVudHMgUm9vdFBhY2thZ2VJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJG1pbmltdW1TdGFiaWxpdHkgPSAnc3RhYmxlJzsKcHJvdGVjdGVkICRwcmVmZXJTdGFibGUgPSBmYWxzZTsKcHJvdGVjdGVkICRzdGFiaWxpdHlGbGFncyA9IGFycmF5KCk7CnByb3RlY3RlZCAkcmVmZXJlbmNlcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkYWxpYXNlcyA9IGFycmF5KCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRNaW5pbXVtU3RhYmlsaXR5KCRtaW5pbXVtU3RhYmlsaXR5KQp7CiR0aGlzLT5taW5pbXVtU3RhYmlsaXR5ID0gJG1pbmltdW1TdGFiaWxpdHk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRNaW5pbXVtU3RhYmlsaXR5KCkKewpyZXR1cm4gJHRoaXMtPm1pbmltdW1TdGFiaWxpdHk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFN0YWJpbGl0eUZsYWdzKGFycmF5ICRzdGFiaWxpdHlGbGFncykKewokdGhpcy0+c3RhYmlsaXR5RmxhZ3MgPSAkc3RhYmlsaXR5RmxhZ3M7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHlGbGFncygpCnsKcmV0dXJuICR0aGlzLT5zdGFiaWxpdHlGbGFnczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UHJlZmVyU3RhYmxlKCRwcmVmZXJTdGFibGUpCnsKJHRoaXMtPnByZWZlclN0YWJsZSA9ICRwcmVmZXJTdGFibGU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmZXJTdGFibGUoKQp7CnJldHVybiAkdGhpcy0+cHJlZmVyU3RhYmxlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRSZWZlcmVuY2VzKGFycmF5ICRyZWZlcmVuY2VzKQp7CiR0aGlzLT5yZWZlcmVuY2VzID0gJHJlZmVyZW5jZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZWZlcmVuY2VzKCkKewpyZXR1cm4gJHRoaXMtPnJlZmVyZW5jZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEFsaWFzZXMoYXJyYXkgJGFsaWFzZXMpCnsKJHRoaXMtPmFsaWFzZXMgPSAkYWxpYXNlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFsaWFzZXMoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNlczsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2VcQXJjaGl2ZXI7CgoKCgoKCmludGVyZmFjZSBBcmNoaXZlckludGVyZmFjZQp7CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYXJjaGl2ZSgkc291cmNlcywgJHRhcmdldCwgJGZvcm1hdCwgYXJyYXkgJGV4Y2x1ZGVzID0gYXJyYXkoKSk7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzdXBwb3J0cygkZm9ybWF0LCAkc291cmNlVHlwZSk7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxBcmNoaXZlcjsKCgoKCgoKY2xhc3MgQ29tcG9zZXJFeGNsdWRlRmlsdGVyIGV4dGVuZHMgQmFzZUV4Y2x1ZGVGaWx0ZXIKewoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzb3VyY2VQYXRoLCBhcnJheSAkZXhjbHVkZVJ1bGVzKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHNvdXJjZVBhdGgpOwokdGhpcy0+ZXhjbHVkZVBhdHRlcm5zID0gJHRoaXMtPmdlbmVyYXRlUGF0dGVybnMoJGV4Y2x1ZGVSdWxlcyk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXEFyY2hpdmVyOwoKCgoKCgpjbGFzcyBQaGFyQXJjaGl2ZXIgaW1wbGVtZW50cyBBcmNoaXZlckludGVyZmFjZQp7CnByb3RlY3RlZCBzdGF0aWMgJGZvcm1hdHMgPSBhcnJheSgKJ3ppcCcgPT4gXFBoYXI6OlpJUCwKJ3RhcicgPT4gXFBoYXI6OlRBUiwKKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBhcmNoaXZlKCRzb3VyY2VzLCAkdGFyZ2V0LCAkZm9ybWF0LCBhcnJheSAkZXhjbHVkZXMgPSBhcnJheSgpKQp7CiRzb3VyY2VzID0gcmVhbHBhdGgoJHNvdXJjZXMpOwoKCiBpZiAoZmlsZV9leGlzdHMoJHRhcmdldCkpIHsKdW5saW5rKCR0YXJnZXQpOwp9Cgp0cnkgewokcGhhciA9IG5ldyBcUGhhckRhdGEoJHRhcmdldCwgbnVsbCwgbnVsbCwgc3RhdGljOjokZm9ybWF0c1skZm9ybWF0XSk7CiRmaWxlcyA9IG5ldyBBcmNoaXZhYmxlRmlsZXNGaW5kZXIoJHNvdXJjZXMsICRleGNsdWRlcyk7CiRwaGFyLT5idWlsZEZyb21JdGVyYXRvcigkZmlsZXMsICRzb3VyY2VzKTsKCnJldHVybiAkdGFyZ2V0Owp9IGNhdGNoIChcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uICRlKSB7CiRtZXNzYWdlID0gc3ByaW50ZigiQ291bGQgbm90IGNyZWF0ZSBhcmNoaXZlICclcycgZnJvbSAnJXMnOiAlcyIsCiR0YXJnZXQsCiRzb3VyY2VzLAokZS0+Z2V0TWVzc2FnZSgpCik7Cgp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJG1lc3NhZ2UsICRlLT5nZXRDb2RlKCksICRlKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc3VwcG9ydHMoJGZvcm1hdCwgJHNvdXJjZVR5cGUpCnsKcmV0dXJuIGlzc2V0KHN0YXRpYzo6JGZvcm1hdHNbJGZvcm1hdF0pOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxBcmNoaXZlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXI7CgoKCgphYnN0cmFjdCBjbGFzcyBCYXNlRXhjbHVkZUZpbHRlcgp7CgoKCnByb3RlY3RlZCAkc291cmNlUGF0aDsKCgoKCnByb3RlY3RlZCAkZXhjbHVkZVBhdHRlcm5zOwoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzb3VyY2VQYXRoKQp7CiR0aGlzLT5zb3VyY2VQYXRoID0gJHNvdXJjZVBhdGg7CiR0aGlzLT5leGNsdWRlUGF0dGVybnMgPSBhcnJheSgpOwp9CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbHRlcigkcmVsYXRpdmVQYXRoLCAkZXhjbHVkZSkKewpmb3JlYWNoICgkdGhpcy0+ZXhjbHVkZVBhdHRlcm5zIGFzICRwYXR0ZXJuRGF0YSkgewpsaXN0KCRwYXR0ZXJuLCAkbmVnYXRlLCAkc3RyaXBMZWFkaW5nU2xhc2gpID0gJHBhdHRlcm5EYXRhOwoKaWYgKCRzdHJpcExlYWRpbmdTbGFzaCkgewokcGF0aCA9IHN1YnN0cigkcmVsYXRpdmVQYXRoLCAxKTsKfSBlbHNlIHsKJHBhdGggPSAkcmVsYXRpdmVQYXRoOwp9CgppZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJHBhdGgpKSB7CiRleGNsdWRlID0gISRuZWdhdGU7Cn0KfQoKcmV0dXJuICRleGNsdWRlOwp9CgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZUxpbmVzKGFycmF5ICRsaW5lcywgJGxpbmVQYXJzZXIpCnsKcmV0dXJuIGFycmF5X2ZpbHRlcigKYXJyYXlfbWFwKApmdW5jdGlvbiAoJGxpbmUpIHVzZSAoJGxpbmVQYXJzZXIpIHsKJGxpbmUgPSB0cmltKCRsaW5lKTsKCiRjb21tZW50SGFzaCA9IHN0cnBvcygkbGluZSwgJyMnKTsKaWYgKCRjb21tZW50SGFzaCAhPT0gZmFsc2UpIHsKJGxpbmUgPSBzdWJzdHIoJGxpbmUsIDAsICRjb21tZW50SGFzaCk7Cn0KCmlmICgkbGluZSkgewpyZXR1cm4gY2FsbF91c2VyX2Z1bmMoJGxpbmVQYXJzZXIsICRsaW5lKTsKfQoKcmV0dXJuIG51bGw7Cn0sICRsaW5lcyksCmZ1bmN0aW9uICgkcGF0dGVybikgewpyZXR1cm4gJHBhdHRlcm4gIT09IG51bGw7Cn0KKTsKfQoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZVBhdHRlcm5zKCRydWxlcykKewokcGF0dGVybnMgPSBhcnJheSgpOwpmb3JlYWNoICgkcnVsZXMgYXMgJHJ1bGUpIHsKJHBhdHRlcm5zW10gPSAkdGhpcy0+Z2VuZXJhdGVQYXR0ZXJuKCRydWxlKTsKfQoKcmV0dXJuICRwYXR0ZXJuczsKfQoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZVBhdHRlcm4oJHJ1bGUpCnsKJG5lZ2F0ZSA9IGZhbHNlOwokcGF0dGVybiA9ICcjJzsKCmlmIChzdHJsZW4oJHJ1bGUpICYmICRydWxlWzBdID09PSAnIScpIHsKJG5lZ2F0ZSA9IHRydWU7CiRydWxlID0gc3Vic3RyKCRydWxlLCAxKTsKfQoKaWYgKHN0cmxlbigkcnVsZSkgJiYgJHJ1bGVbMF0gPT09ICcvJykgewokcGF0dGVybiAuPSAnXi8nOwokcnVsZSA9IHN1YnN0cigkcnVsZSwgMSk7Cn0gZWxzZWlmIChzdHJsZW4oJHJ1bGUpIC0gMSA9PT0gc3RycG9zKCRydWxlLCAnLycpKSB7CiRwYXR0ZXJuIC49ICcvJzsKJHJ1bGUgPSBzdWJzdHIoJHJ1bGUsIDAsIC0xKTsKfSBlbHNlaWYgKGZhbHNlID09PSBzdHJwb3MoJHJ1bGUsICcvJykpIHsKJHBhdHRlcm4gLj0gJy8nOwp9CgoKICRwYXR0ZXJuIC49IHN1YnN0cihGaW5kZXJcR2xvYjo6dG9SZWdleCgkcnVsZSksIDIsIC0yKSAuICcoPz0kfC8pJzsKCnJldHVybiBhcnJheSgkcGF0dGVybiAuICcjJywgJG5lZ2F0ZSwgZmFsc2UpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxBcmNoaXZlcjsKCgoKCgoKCgpjbGFzcyBHaXRFeGNsdWRlRmlsdGVyIGV4dGVuZHMgQmFzZUV4Y2x1ZGVGaWx0ZXIKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc291cmNlUGF0aCkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRzb3VyY2VQYXRoKTsKCmlmIChmaWxlX2V4aXN0cygkc291cmNlUGF0aC4nLy5naXRpZ25vcmUnKSkgewokdGhpcy0+ZXhjbHVkZVBhdHRlcm5zID0gJHRoaXMtPnBhcnNlTGluZXMoCmZpbGUoJHNvdXJjZVBhdGguJy8uZ2l0aWdub3JlJyksCmFycmF5KCR0aGlzLCAncGFyc2VHaXRJZ25vcmVMaW5lJykKKTsKfQppZiAoZmlsZV9leGlzdHMoJHNvdXJjZVBhdGguJy8uZ2l0YXR0cmlidXRlcycpKSB7CiR0aGlzLT5leGNsdWRlUGF0dGVybnMgPSBhcnJheV9tZXJnZSgKJHRoaXMtPmV4Y2x1ZGVQYXR0ZXJucywKJHRoaXMtPnBhcnNlTGluZXMoCmZpbGUoJHNvdXJjZVBhdGguJy8uZ2l0YXR0cmlidXRlcycpLAphcnJheSgkdGhpcywgJ3BhcnNlR2l0QXR0cmlidXRlc0xpbmUnKQopKTsKfQp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlR2l0SWdub3JlTGluZSgkbGluZSkKewpyZXR1cm4gJHRoaXMtPmdlbmVyYXRlUGF0dGVybigkbGluZSk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcGFyc2VHaXRBdHRyaWJ1dGVzTGluZSgkbGluZSkKewokcGFydHMgPSBwcmVnX3NwbGl0KCcjXHMrIycsICRsaW5lKTsKCmlmIChjb3VudCgkcGFydHMpICE9IDIpIHsKcmV0dXJuIG51bGw7Cn0KCmlmICgkcGFydHNbMV0gPT09ICdleHBvcnQtaWdub3JlJykgewpyZXR1cm4gJHRoaXMtPmdlbmVyYXRlUGF0dGVybigkcGFydHNbMF0pOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXEFyY2hpdmVyOwoKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKCnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXI7CgoKCgoKCgoKCmNsYXNzIEFyY2hpdmFibGVGaWxlc0ZpbmRlciBleHRlbmRzIFxGaWx0ZXJJdGVyYXRvcgp7CgoKCnByb3RlY3RlZCAkZmluZGVyOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzb3VyY2VzLCBhcnJheSAkZXhjbHVkZXMpCnsKJGZzID0gbmV3IEZpbGVzeXN0ZW0oKTsKCiRzb3VyY2VzID0gJGZzLT5ub3JtYWxpemVQYXRoKCRzb3VyY2VzKTsKCiRmaWx0ZXJzID0gYXJyYXkoCm5ldyBIZ0V4Y2x1ZGVGaWx0ZXIoJHNvdXJjZXMpLApuZXcgR2l0RXhjbHVkZUZpbHRlcigkc291cmNlcyksCm5ldyBDb21wb3NlckV4Y2x1ZGVGaWx0ZXIoJHNvdXJjZXMsICRleGNsdWRlcyksCik7CgokdGhpcy0+ZmluZGVyID0gbmV3IEZpbmRlclxGaW5kZXIoKTsKCiRmaWx0ZXIgPSBmdW5jdGlvbiAoXFNwbEZpbGVJbmZvICRmaWxlKSB1c2UgKCRzb3VyY2VzLCAkZmlsdGVycywgJGZzKSB7CiRyZWxhdGl2ZVBhdGggPSBwcmVnX3JlcGxhY2UoCicjXicucHJlZ19xdW90ZSgkc291cmNlcywgJyMnKS4nIycsCicnLAokZnMtPm5vcm1hbGl6ZVBhdGgoJGZpbGUtPmdldFJlYWxQYXRoKCkpCik7CgokZXhjbHVkZSA9IGZhbHNlOwpmb3JlYWNoICgkZmlsdGVycyBhcyAkZmlsdGVyKSB7CiRleGNsdWRlID0gJGZpbHRlci0+ZmlsdGVyKCRyZWxhdGl2ZVBhdGgsICRleGNsdWRlKTsKfQoKcmV0dXJuICEkZXhjbHVkZTsKfTsKCmlmIChtZXRob2RfZXhpc3RzKCRmaWx0ZXIsICdiaW5kVG8nKSkgewokZmlsdGVyID0gJGZpbHRlci0+YmluZFRvKG51bGwpOwp9CgokdGhpcy0+ZmluZGVyCi0+aW4oJHNvdXJjZXMpCi0+ZmlsdGVyKCRmaWx0ZXIpCi0+aWdub3JlVkNTKHRydWUpCi0+aWdub3JlRG90RmlsZXMoZmFsc2UpOwoKcGFyZW50OjpfX2NvbnN0cnVjdCgkdGhpcy0+ZmluZGVyLT5nZXRJdGVyYXRvcigpKTsKfQoKcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgpCnsKcmV0dXJuICEkdGhpcy0+Z2V0SW5uZXJJdGVyYXRvcigpLT5jdXJyZW50KCktPmlzRGlyKCk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXEFyY2hpdmVyOwoKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcRG93bmxvYWRNYW5hZ2VyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxSb290UGFja2FnZTsKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CgoKCgoKY2xhc3MgQXJjaGl2ZU1hbmFnZXIKewpwcm90ZWN0ZWQgJGRvd25sb2FkTWFuYWdlcjsKCnByb3RlY3RlZCAkYXJjaGl2ZXJzID0gYXJyYXkoKTsKCgoKCnByb3RlY3RlZCAkb3ZlcndyaXRlRmlsZXMgPSB0cnVlOwoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KERvd25sb2FkTWFuYWdlciAkZG93bmxvYWRNYW5hZ2VyKQp7CiR0aGlzLT5kb3dubG9hZE1hbmFnZXIgPSAkZG93bmxvYWRNYW5hZ2VyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkQXJjaGl2ZXIoQXJjaGl2ZXJJbnRlcmZhY2UgJGFyY2hpdmVyKQp7CiR0aGlzLT5hcmNoaXZlcnNbXSA9ICRhcmNoaXZlcjsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPdmVyd3JpdGVGaWxlcygkb3ZlcndyaXRlRmlsZXMpCnsKJHRoaXMtPm92ZXJ3cml0ZUZpbGVzID0gJG92ZXJ3cml0ZUZpbGVzOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhY2thZ2VGaWxlbmFtZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRuYW1lUGFydHMgPSBhcnJheShwcmVnX3JlcGxhY2UoJyNbXmEtejAtOS1fXSNpJywgJy0nLCAkcGFja2FnZS0+Z2V0TmFtZSgpKSk7CgppZiAocHJlZ19tYXRjaCgne15bYS1mMC05XXs0MH0kfScsICRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkpKSB7CiRuYW1lUGFydHMgPSBhcnJheV9tZXJnZSgkbmFtZVBhcnRzLCBhcnJheSgkcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpLCAkcGFja2FnZS0+Z2V0RGlzdFR5cGUoKSkpOwp9IGVsc2UgewokbmFtZVBhcnRzID0gYXJyYXlfbWVyZ2UoJG5hbWVQYXJ0cywgYXJyYXkoJHBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSwgJHBhY2thZ2UtPmdldERpc3RSZWZlcmVuY2UoKSkpOwp9CgppZiAoJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpKSB7CiRuYW1lUGFydHNbXSA9IHN1YnN0cihzaGExKCRwYWNrYWdlLT5nZXRTb3VyY2VSZWZlcmVuY2UoKSksIDAsIDYpOwp9CgokbmFtZSA9IGltcGxvZGUoJy0nLCBhcnJheV9maWx0ZXIoJG5hbWVQYXJ0cywgZnVuY3Rpb24gKCRwKSB7CnJldHVybiAhZW1wdHkoJHApOwp9KSk7CgpyZXR1cm4gc3RyX3JlcGxhY2UoJy8nLCAnLScsICRuYW1lKTsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhcmNoaXZlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRmb3JtYXQsICR0YXJnZXREaXIpCnsKaWYgKGVtcHR5KCRmb3JtYXQpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdGb3JtYXQgbXVzdCBiZSBzcGVjaWZpZWQnKTsKfQoKCiAkdXNhYmxlQXJjaGl2ZXIgPSBudWxsOwpmb3JlYWNoICgkdGhpcy0+YXJjaGl2ZXJzIGFzICRhcmNoaXZlcikgewppZiAoJGFyY2hpdmVyLT5zdXBwb3J0cygkZm9ybWF0LCAkcGFja2FnZS0+Z2V0U291cmNlVHlwZSgpKSkgewokdXNhYmxlQXJjaGl2ZXIgPSAkYXJjaGl2ZXI7CmJyZWFrOwp9Cn0KCgogaWYgKG51bGwgPT09ICR1c2FibGVBcmNoaXZlcikgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignTm8gYXJjaGl2ZXIgZm91bmQgdG8gc3VwcG9ydCAlcyBmb3JtYXQnLCAkZm9ybWF0KSk7Cn0KCiRmaWxlc3lzdGVtID0gbmV3IEZpbGVzeXN0ZW0oKTsKJHBhY2thZ2VOYW1lID0gJHRoaXMtPmdldFBhY2thZ2VGaWxlbmFtZSgkcGFja2FnZSk7CgoKICRmaWxlc3lzdGVtLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoJHRhcmdldERpcik7CiR0YXJnZXQgPSByZWFscGF0aCgkdGFyZ2V0RGlyKS4nLycuJHBhY2thZ2VOYW1lLicuJy4kZm9ybWF0OwokZmlsZXN5c3RlbS0+ZW5zdXJlRGlyZWN0b3J5RXhpc3RzKGRpcm5hbWUoJHRhcmdldCkpOwoKaWYgKCEkdGhpcy0+b3ZlcndyaXRlRmlsZXMgJiYgZmlsZV9leGlzdHMoJHRhcmdldCkpIHsKcmV0dXJuICR0YXJnZXQ7Cn0KCmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIFJvb3RQYWNrYWdlKSB7CiRzb3VyY2VQYXRoID0gcmVhbHBhdGgoJy4nKTsKfSBlbHNlIHsKCiAkc291cmNlUGF0aCA9IHN5c19nZXRfdGVtcF9kaXIoKS4nL2NvbXBvc2VyX2FyY2hpdmVyLycuJHBhY2thZ2VOYW1lOwokZmlsZXN5c3RlbS0+ZW5zdXJlRGlyZWN0b3J5RXhpc3RzKCRzb3VyY2VQYXRoKTsKCgogJHRoaXMtPmRvd25sb2FkTWFuYWdlci0+ZG93bmxvYWQoJHBhY2thZ2UsICRzb3VyY2VQYXRoKTsKCgogaWYgKGZpbGVfZXhpc3RzKCRjb21wb3Nlckpzb25QYXRoID0gJHNvdXJjZVBhdGguJy9jb21wb3Nlci5qc29uJykpIHsKJGpzb25GaWxlID0gbmV3IEpzb25GaWxlKCRjb21wb3Nlckpzb25QYXRoKTsKJGpzb25EYXRhID0gJGpzb25GaWxlLT5yZWFkKCk7CmlmICghZW1wdHkoJGpzb25EYXRhWydhcmNoaXZlJ11bJ2V4Y2x1ZGUnXSkpIHsKJHBhY2thZ2UtPnNldEFyY2hpdmVFeGNsdWRlcygkanNvbkRhdGFbJ2FyY2hpdmUnXVsnZXhjbHVkZSddKTsKfQp9Cn0KCgogJGFyY2hpdmVQYXRoID0gJHVzYWJsZUFyY2hpdmVyLT5hcmNoaXZlKCRzb3VyY2VQYXRoLCAkdGFyZ2V0LCAkZm9ybWF0LCAkcGFja2FnZS0+Z2V0QXJjaGl2ZUV4Y2x1ZGVzKCkpOwoKCiBpZiAoISRwYWNrYWdlIGluc3RhbmNlb2YgUm9vdFBhY2thZ2UpIHsKJGZpbGVzeXN0ZW0tPnJlbW92ZURpcmVjdG9yeSgkc291cmNlUGF0aCk7Cn0KCnJldHVybiAkYXJjaGl2ZVBhdGg7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXEFyY2hpdmVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlcjsKCgoKCgoKY2xhc3MgSGdFeGNsdWRlRmlsdGVyIGV4dGVuZHMgQmFzZUV4Y2x1ZGVGaWx0ZXIKewpjb25zdCBIR19JR05PUkVfUkVHRVggPSAxOwpjb25zdCBIR19JR05PUkVfR0xPQiA9IDI7CgoKCgoKcHJvdGVjdGVkICRwYXR0ZXJuTW9kZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzb3VyY2VQYXRoKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHNvdXJjZVBhdGgpOwoKJHRoaXMtPnBhdHRlcm5Nb2RlID0gc2VsZjo6SEdfSUdOT1JFX1JFR0VYOwoKaWYgKGZpbGVfZXhpc3RzKCRzb3VyY2VQYXRoLicvLmhnaWdub3JlJykpIHsKJHRoaXMtPmV4Y2x1ZGVQYXR0ZXJucyA9ICR0aGlzLT5wYXJzZUxpbmVzKApmaWxlKCRzb3VyY2VQYXRoLicvLmhnaWdub3JlJyksCmFycmF5KCR0aGlzLCAncGFyc2VIZ0lnbm9yZUxpbmUnKQopOwp9Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcGFyc2VIZ0lnbm9yZUxpbmUoJGxpbmUpCnsKaWYgKHByZWdfbWF0Y2goJyNec3ludGF4XHMqOlxzKihnbG9ifHJlZ2V4cCkkIycsICRsaW5lLCAkbWF0Y2hlcykpIHsKaWYgKCRtYXRjaGVzWzFdID09PSAnZ2xvYicpIHsKJHRoaXMtPnBhdHRlcm5Nb2RlID0gc2VsZjo6SEdfSUdOT1JFX0dMT0I7Cn0gZWxzZSB7CiR0aGlzLT5wYXR0ZXJuTW9kZSA9IHNlbGY6OkhHX0lHTk9SRV9SRUdFWDsKfQoKcmV0dXJuIG51bGw7Cn0KCmlmICgkdGhpcy0+cGF0dGVybk1vZGUgPT0gc2VsZjo6SEdfSUdOT1JFX0dMT0IpIHsKcmV0dXJuICR0aGlzLT5wYXR0ZXJuRnJvbUdsb2IoJGxpbmUpOwp9IGVsc2UgewpyZXR1cm4gJHRoaXMtPnBhdHRlcm5Gcm9tUmVnZXgoJGxpbmUpOwp9Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gcGF0dGVybkZyb21HbG9iKCRsaW5lKQp7CiRwYXR0ZXJuID0gJyMnLnN1YnN0cihGaW5kZXJcR2xvYjo6dG9SZWdleCgkbGluZSksIDIsIC0xKS4nIyc7CiRwYXR0ZXJuID0gc3RyX3JlcGxhY2UoJ1teL10qJywgJy4qJywgJHBhdHRlcm4pOwoKcmV0dXJuIGFycmF5KCRwYXR0ZXJuLCBmYWxzZSwgdHJ1ZSk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcGF0dGVybkZyb21SZWdleCgkbGluZSkKewoKICRwYXR0ZXJuID0gJyMnLnByZWdfcmVwbGFjZSgnLygoPzpcXFxcXFxcXCkqKShcXFxcPykjLycsICdcMVwyXDJcXCMnLCAkbGluZSkuJyMnOwoKcmV0dXJuIGFycmF5KCRwYXR0ZXJuLCBmYWxzZSwgdHJ1ZSk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlOwoKCgoKY2xhc3MgUm9vdEFsaWFzUGFja2FnZSBleHRlbmRzIEFsaWFzUGFja2FnZSBpbXBsZW1lbnRzIFJvb3RQYWNrYWdlSW50ZXJmYWNlCnsKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFJvb3RQYWNrYWdlSW50ZXJmYWNlICRhbGlhc09mLCAkdmVyc2lvbiwgJHByZXR0eVZlcnNpb24pCnsKcGFyZW50OjpfX2NvbnN0cnVjdCgkYWxpYXNPZiwgJHZlcnNpb24sICRwcmV0dHlWZXJzaW9uKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFsaWFzZXMoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0QWxpYXNlcygpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TWluaW11bVN0YWJpbGl0eSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRNaW5pbXVtU3RhYmlsaXR5KCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHlGbGFncygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRTdGFiaWxpdHlGbGFncygpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVmZXJlbmNlcygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRSZWZlcmVuY2VzKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmZXJTdGFibGUoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0UHJlZmVyU3RhYmxlKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRSZXF1aXJlcyhhcnJheSAkcmVxdWlyZSkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPnNldFJlcXVpcmVzKCRyZXF1aXJlKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERldlJlcXVpcmVzKGFycmF5ICRkZXZSZXF1aXJlKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+c2V0RGV2UmVxdWlyZXMoJGRldlJlcXVpcmUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gX19jbG9uZSgpCnsKcGFyZW50OjpfX2Nsb25lKCk7CiR0aGlzLT5hbGlhc09mID0gY2xvbmUgJHRoaXMtPmFsaWFzT2Y7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwoKCgoKCgpjbGFzcyBQYWNrYWdlIGV4dGVuZHMgQmFzZVBhY2thZ2UKewpwcm90ZWN0ZWQgJHR5cGU7CnByb3RlY3RlZCAkdGFyZ2V0RGlyOwpwcm90ZWN0ZWQgJGluc3RhbGxhdGlvblNvdXJjZTsKcHJvdGVjdGVkICRzb3VyY2VUeXBlOwpwcm90ZWN0ZWQgJHNvdXJjZVVybDsKcHJvdGVjdGVkICRzb3VyY2VSZWZlcmVuY2U7CnByb3RlY3RlZCAkZGlzdFR5cGU7CnByb3RlY3RlZCAkZGlzdFVybDsKcHJvdGVjdGVkICRkaXN0UmVmZXJlbmNlOwpwcm90ZWN0ZWQgJGRpc3RTaGExQ2hlY2tzdW07CnByb3RlY3RlZCAkdmVyc2lvbjsKcHJvdGVjdGVkICRwcmV0dHlWZXJzaW9uOwpwcm90ZWN0ZWQgJHJlbGVhc2VEYXRlOwpwcm90ZWN0ZWQgJGV4dHJhID0gYXJyYXkoKTsKcHJvdGVjdGVkICRiaW5hcmllcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkZGV2Owpwcm90ZWN0ZWQgJHN0YWJpbGl0eTsKcHJvdGVjdGVkICRub3RpZmljYXRpb25Vcmw7Cgpwcm90ZWN0ZWQgJHJlcXVpcmVzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRjb25mbGljdHMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHByb3ZpZGVzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRyZXBsYWNlcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkZGV2UmVxdWlyZXMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHN1Z2dlc3RzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRhdXRvbG9hZCA9IGFycmF5KCk7CnByb3RlY3RlZCAkZGV2QXV0b2xvYWQgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJGluY2x1ZGVQYXRocyA9IGFycmF5KCk7CnByb3RlY3RlZCAkYXJjaGl2ZUV4Y2x1ZGVzID0gYXJyYXkoKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICR2ZXJzaW9uLCAkcHJldHR5VmVyc2lvbikKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRuYW1lKTsKCiR0aGlzLT52ZXJzaW9uID0gJHZlcnNpb247CiR0aGlzLT5wcmV0dHlWZXJzaW9uID0gJHByZXR0eVZlcnNpb247CgokdGhpcy0+c3RhYmlsaXR5ID0gVmVyc2lvblBhcnNlcjo6cGFyc2VTdGFiaWxpdHkoJHZlcnNpb24pOwokdGhpcy0+ZGV2ID0gJHRoaXMtPnN0YWJpbGl0eSA9PT0gJ2Rldic7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RldigpCnsKcmV0dXJuICR0aGlzLT5kZXY7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRUeXBlKCR0eXBlKQp7CiR0aGlzLT50eXBlID0gJHR5cGU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKewpyZXR1cm4gJHRoaXMtPnR5cGUgPzogJ2xpYnJhcnknOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhYmlsaXR5KCkKewpyZXR1cm4gJHRoaXMtPnN0YWJpbGl0eTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFRhcmdldERpcigkdGFyZ2V0RGlyKQp7CiR0aGlzLT50YXJnZXREaXIgPSAkdGFyZ2V0RGlyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VGFyZ2V0RGlyKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnRhcmdldERpcikgewpyZXR1cm47Cn0KCnJldHVybiBsdHJpbShwcmVnX3JlcGxhY2UoJ3sgKD86XnxbXFxcXC9dKykgXC5cLj8gKD86W1xcXFwvXSt8JCkgKD86XC5cLj8gKD86W1xcXFwvXSt8JCkgKSp9eCcsICcvJywgJHRoaXMtPnRhcmdldERpciksICcvJyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFeHRyYShhcnJheSAkZXh0cmEpCnsKJHRoaXMtPmV4dHJhID0gJGV4dHJhOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RXh0cmEoKQp7CnJldHVybiAkdGhpcy0+ZXh0cmE7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRCaW5hcmllcyhhcnJheSAkYmluYXJpZXMpCnsKJHRoaXMtPmJpbmFyaWVzID0gJGJpbmFyaWVzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QmluYXJpZXMoKQp7CnJldHVybiAkdGhpcy0+YmluYXJpZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRJbnN0YWxsYXRpb25Tb3VyY2UoJHR5cGUpCnsKJHRoaXMtPmluc3RhbGxhdGlvblNvdXJjZSA9ICR0eXBlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGF0aW9uU291cmNlKCkKewpyZXR1cm4gJHRoaXMtPmluc3RhbGxhdGlvblNvdXJjZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVR5cGUoJHR5cGUpCnsKJHRoaXMtPnNvdXJjZVR5cGUgPSAkdHlwZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZVR5cGUoKQp7CnJldHVybiAkdGhpcy0+c291cmNlVHlwZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVVybCgkdXJsKQp7CiR0aGlzLT5zb3VyY2VVcmwgPSAkdXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlVXJsKCkKewpyZXR1cm4gJHRoaXMtPnNvdXJjZVVybDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVJlZmVyZW5jZSgkcmVmZXJlbmNlKQp7CiR0aGlzLT5zb3VyY2VSZWZlcmVuY2UgPSAkcmVmZXJlbmNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlUmVmZXJlbmNlKCkKewpyZXR1cm4gJHRoaXMtPnNvdXJjZVJlZmVyZW5jZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERpc3RUeXBlKCR0eXBlKQp7CiR0aGlzLT5kaXN0VHlwZSA9ICR0eXBlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdFR5cGUoKQp7CnJldHVybiAkdGhpcy0+ZGlzdFR5cGU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREaXN0VXJsKCR1cmwpCnsKJHRoaXMtPmRpc3RVcmwgPSAkdXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdFVybCgpCnsKcmV0dXJuICR0aGlzLT5kaXN0VXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGlzdFJlZmVyZW5jZSgkcmVmZXJlbmNlKQp7CiR0aGlzLT5kaXN0UmVmZXJlbmNlID0gJHJlZmVyZW5jZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERpc3RSZWZlcmVuY2UoKQp7CnJldHVybiAkdGhpcy0+ZGlzdFJlZmVyZW5jZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERpc3RTaGExQ2hlY2tzdW0oJHNoYTFjaGVja3N1bSkKewokdGhpcy0+ZGlzdFNoYTFDaGVja3N1bSA9ICRzaGExY2hlY2tzdW07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0U2hhMUNoZWNrc3VtKCkKewpyZXR1cm4gJHRoaXMtPmRpc3RTaGExQ2hlY2tzdW07Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkKewpyZXR1cm4gJHRoaXMtPnZlcnNpb247Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmV0dHlWZXJzaW9uKCkKewpyZXR1cm4gJHRoaXMtPnByZXR0eVZlcnNpb247Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJlbGVhc2VEYXRlKFxEYXRlVGltZSAkcmVsZWFzZURhdGUpCnsKJHRoaXMtPnJlbGVhc2VEYXRlID0gJHJlbGVhc2VEYXRlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVsZWFzZURhdGUoKQp7CnJldHVybiAkdGhpcy0+cmVsZWFzZURhdGU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJlcXVpcmVzKGFycmF5ICRyZXF1aXJlcykKewokdGhpcy0+cmVxdWlyZXMgPSAkcmVxdWlyZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXF1aXJlcygpCnsKcmV0dXJuICR0aGlzLT5yZXF1aXJlczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q29uZmxpY3RzKGFycmF5ICRjb25mbGljdHMpCnsKJHRoaXMtPmNvbmZsaWN0cyA9ICRjb25mbGljdHM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb25mbGljdHMoKQp7CnJldHVybiAkdGhpcy0+Y29uZmxpY3RzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRQcm92aWRlcyhhcnJheSAkcHJvdmlkZXMpCnsKJHRoaXMtPnByb3ZpZGVzID0gJHByb3ZpZGVzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdmlkZXMoKQp7CnJldHVybiAkdGhpcy0+cHJvdmlkZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJlcGxhY2VzKGFycmF5ICRyZXBsYWNlcykKewokdGhpcy0+cmVwbGFjZXMgPSAkcmVwbGFjZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXBsYWNlcygpCnsKcmV0dXJuICR0aGlzLT5yZXBsYWNlczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGV2UmVxdWlyZXMoYXJyYXkgJGRldlJlcXVpcmVzKQp7CiR0aGlzLT5kZXZSZXF1aXJlcyA9ICRkZXZSZXF1aXJlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERldlJlcXVpcmVzKCkKewpyZXR1cm4gJHRoaXMtPmRldlJlcXVpcmVzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRTdWdnZXN0cyhhcnJheSAkc3VnZ2VzdHMpCnsKJHRoaXMtPnN1Z2dlc3RzID0gJHN1Z2dlc3RzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3VnZ2VzdHMoKQp7CnJldHVybiAkdGhpcy0+c3VnZ2VzdHM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEF1dG9sb2FkKGFycmF5ICRhdXRvbG9hZCkKewokdGhpcy0+YXV0b2xvYWQgPSAkYXV0b2xvYWQ7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBdXRvbG9hZCgpCnsKcmV0dXJuICR0aGlzLT5hdXRvbG9hZDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGV2QXV0b2xvYWQoYXJyYXkgJGRldkF1dG9sb2FkKQp7CiR0aGlzLT5kZXZBdXRvbG9hZCA9ICRkZXZBdXRvbG9hZDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERldkF1dG9sb2FkKCkKewpyZXR1cm4gJHRoaXMtPmRldkF1dG9sb2FkOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRJbmNsdWRlUGF0aHMoYXJyYXkgJGluY2x1ZGVQYXRocykKewokdGhpcy0+aW5jbHVkZVBhdGhzID0gJGluY2x1ZGVQYXRoczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluY2x1ZGVQYXRocygpCnsKcmV0dXJuICR0aGlzLT5pbmNsdWRlUGF0aHM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE5vdGlmaWNhdGlvblVybCgkbm90aWZpY2F0aW9uVXJsKQp7CiR0aGlzLT5ub3RpZmljYXRpb25VcmwgPSAkbm90aWZpY2F0aW9uVXJsOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Tm90aWZpY2F0aW9uVXJsKCkKewpyZXR1cm4gJHRoaXMtPm5vdGlmaWNhdGlvblVybDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QXJjaGl2ZUV4Y2x1ZGVzKGFycmF5ICRleGNsdWRlcykKewokdGhpcy0+YXJjaGl2ZUV4Y2x1ZGVzID0gJGV4Y2x1ZGVzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXJjaGl2ZUV4Y2x1ZGVzKCkKewpyZXR1cm4gJHRoaXMtPmFyY2hpdmVFeGNsdWRlczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXBsYWNlVmVyc2lvbigkdmVyc2lvbiwgJHByZXR0eVZlcnNpb24pCnsKJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsKJHRoaXMtPnByZXR0eVZlcnNpb24gPSAkcHJldHR5VmVyc2lvbjsKCiR0aGlzLT5zdGFiaWxpdHkgPSBWZXJzaW9uUGFyc2VyOjpwYXJzZVN0YWJpbGl0eSgkdmVyc2lvbik7CiR0aGlzLT5kZXYgPSAkdGhpcy0+c3RhYmlsaXR5ID09PSAnZGV2JzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2U7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxWZXJzaW9uQ29uc3RyYWludDsKdXNlIENvbXBvc2VyXFBhY2thZ2VcVmVyc2lvblxWZXJzaW9uUGFyc2VyOwoKCgoKY2xhc3MgQWxpYXNQYWNrYWdlIGV4dGVuZHMgQmFzZVBhY2thZ2UgaW1wbGVtZW50cyBDb21wbGV0ZVBhY2thZ2VJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJHZlcnNpb247CnByb3RlY3RlZCAkcHJldHR5VmVyc2lvbjsKcHJvdGVjdGVkICRkZXY7CnByb3RlY3RlZCAkYWxpYXNPZjsKcHJvdGVjdGVkICRyb290UGFja2FnZUFsaWFzID0gZmFsc2U7CnByb3RlY3RlZCAkc3RhYmlsaXR5OwoKcHJvdGVjdGVkICRyZXF1aXJlczsKcHJvdGVjdGVkICRjb25mbGljdHM7CnByb3RlY3RlZCAkcHJvdmlkZXM7CnByb3RlY3RlZCAkcmVwbGFjZXM7CnByb3RlY3RlZCAkcmVjb21tZW5kczsKcHJvdGVjdGVkICRzdWdnZXN0czsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUGFja2FnZUludGVyZmFjZSAkYWxpYXNPZiwgJHZlcnNpb24sICRwcmV0dHlWZXJzaW9uKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJGFsaWFzT2YtPmdldE5hbWUoKSk7CgokdGhpcy0+dmVyc2lvbiA9ICR2ZXJzaW9uOwokdGhpcy0+cHJldHR5VmVyc2lvbiA9ICRwcmV0dHlWZXJzaW9uOwokdGhpcy0+YWxpYXNPZiA9ICRhbGlhc09mOwokdGhpcy0+c3RhYmlsaXR5ID0gVmVyc2lvblBhcnNlcjo6cGFyc2VTdGFiaWxpdHkoJHZlcnNpb24pOwokdGhpcy0+ZGV2ID0gJHRoaXMtPnN0YWJpbGl0eSA9PT0gJ2Rldic7CgoKIGZvcmVhY2ggKGFycmF5KCdyZXF1aXJlcycsICdkZXZSZXF1aXJlcycpIGFzICR0eXBlKSB7CiRsaW5rcyA9ICRhbGlhc09mLT57J2dldCcudWNmaXJzdCgkdHlwZSl9KCk7CmZvcmVhY2ggKCRsaW5rcyBhcyAkaW5kZXggPT4gJGxpbmspIHsKCiBpZiAoJ3NlbGYudmVyc2lvbicgPT09ICRsaW5rLT5nZXRQcmV0dHlDb25zdHJhaW50KCkpIHsKJGxpbmtzWyRpbmRleF0gPSBuZXcgTGluaygkbGluay0+Z2V0U291cmNlKCksICRsaW5rLT5nZXRUYXJnZXQoKSwgbmV3IFZlcnNpb25Db25zdHJhaW50KCc9JywgJHRoaXMtPnZlcnNpb24pLCAkdHlwZSwgJHByZXR0eVZlcnNpb24pOwp9Cn0KJHRoaXMtPiR0eXBlID0gJGxpbmtzOwp9CgoKIGZvcmVhY2ggKGFycmF5KCdjb25mbGljdHMnLCAncHJvdmlkZXMnLCAncmVwbGFjZXMnKSBhcyAkdHlwZSkgewokbGlua3MgPSAkYWxpYXNPZi0+eydnZXQnLnVjZmlyc3QoJHR5cGUpfSgpOwokbmV3TGlua3MgPSBhcnJheSgpOwpmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspIHsKCiBpZiAoJ3NlbGYudmVyc2lvbicgPT09ICRsaW5rLT5nZXRQcmV0dHlDb25zdHJhaW50KCkpIHsKJG5ld0xpbmtzW10gPSBuZXcgTGluaygkbGluay0+Z2V0U291cmNlKCksICRsaW5rLT5nZXRUYXJnZXQoKSwgbmV3IFZlcnNpb25Db25zdHJhaW50KCc9JywgJHRoaXMtPnZlcnNpb24pLCAkdHlwZSwgJHByZXR0eVZlcnNpb24pOwp9Cn0KJHRoaXMtPiR0eXBlID0gYXJyYXlfbWVyZ2UoJGxpbmtzLCAkbmV3TGlua3MpOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRBbGlhc09mKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2Y7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRWZXJzaW9uKCkKewpyZXR1cm4gJHRoaXMtPnZlcnNpb247Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdGFiaWxpdHkoKQp7CnJldHVybiAkdGhpcy0+c3RhYmlsaXR5Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5VmVyc2lvbigpCnsKcmV0dXJuICR0aGlzLT5wcmV0dHlWZXJzaW9uOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZXYoKQp7CnJldHVybiAkdGhpcy0+ZGV2Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVxdWlyZXMoKQp7CnJldHVybiAkdGhpcy0+cmVxdWlyZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb25mbGljdHMoKQp7CnJldHVybiAkdGhpcy0+Y29uZmxpY3RzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvdmlkZXMoKQp7CnJldHVybiAkdGhpcy0+cHJvdmlkZXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXBsYWNlcygpCnsKcmV0dXJuICR0aGlzLT5yZXBsYWNlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERldlJlcXVpcmVzKCkKewpyZXR1cm4gJHRoaXMtPmRldlJlcXVpcmVzOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Um9vdFBhY2thZ2VBbGlhcygkdmFsdWUpCnsKcmV0dXJuICR0aGlzLT5yb290UGFja2FnZUFsaWFzID0gJHZhbHVlOwp9CgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzUm9vdFBhY2thZ2VBbGlhcygpCnsKcmV0dXJuICR0aGlzLT5yb290UGFja2FnZUFsaWFzOwp9CgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0VHlwZSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRUYXJnZXREaXIoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0VGFyZ2V0RGlyKCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldEV4dHJhKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldEV4dHJhKCk7Cn0KcHVibGljIGZ1bmN0aW9uIHNldEluc3RhbGxhdGlvblNvdXJjZSgkdHlwZSkKewokdGhpcy0+YWxpYXNPZi0+c2V0SW5zdGFsbGF0aW9uU291cmNlKCR0eXBlKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGF0aW9uU291cmNlKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldEluc3RhbGxhdGlvblNvdXJjZSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2VUeXBlKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldFNvdXJjZVR5cGUoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0U291cmNlVXJsKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldFNvdXJjZVVybCgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRTb3VyY2VSZWZlcmVuY2UoKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0U291cmNlUmVmZXJlbmNlKCk7Cn0KcHVibGljIGZ1bmN0aW9uIHNldFNvdXJjZVJlZmVyZW5jZSgkcmVmZXJlbmNlKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+c2V0U291cmNlUmVmZXJlbmNlKCRyZWZlcmVuY2UpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0VHlwZSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXREaXN0VHlwZSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXREaXN0VXJsKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldERpc3RVcmwoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0RGlzdFJlZmVyZW5jZSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXREaXN0UmVmZXJlbmNlKCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldERpc3RTaGExQ2hlY2tzdW0oKQp7CnJldHVybiAkdGhpcy0+YWxpYXNPZi0+Z2V0RGlzdFNoYTFDaGVja3N1bSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRTY3JpcHRzKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldFNjcmlwdHMoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0TGljZW5zZSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRMaWNlbnNlKCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldEF1dG9sb2FkKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldEF1dG9sb2FkKCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldERldkF1dG9sb2FkKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldERldkF1dG9sb2FkKCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldEluY2x1ZGVQYXRocygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRJbmNsdWRlUGF0aHMoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVwb3NpdG9yaWVzKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldFJlcG9zaXRvcmllcygpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRSZWxlYXNlRGF0ZSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRSZWxlYXNlRGF0ZSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRCaW5hcmllcygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRCaW5hcmllcygpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRLZXl3b3JkcygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRLZXl3b3JkcygpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbigpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXREZXNjcmlwdGlvbigpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRIb21lcGFnZSgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRIb21lcGFnZSgpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRTdWdnZXN0cygpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRTdWdnZXN0cygpOwp9CnB1YmxpYyBmdW5jdGlvbiBnZXRBdXRob3JzKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldEF1dGhvcnMoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0U3VwcG9ydCgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXRTdXBwb3J0KCk7Cn0KcHVibGljIGZ1bmN0aW9uIGdldE5vdGlmaWNhdGlvblVybCgpCnsKcmV0dXJuICR0aGlzLT5hbGlhc09mLT5nZXROb3RpZmljYXRpb25VcmwoKTsKfQpwdWJsaWMgZnVuY3Rpb24gZ2V0QXJjaGl2ZUV4Y2x1ZGVzKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzT2YtPmdldEFyY2hpdmVFeGNsdWRlcygpOwp9CnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewpyZXR1cm4gcGFyZW50OjpfX3RvU3RyaW5nKCkuJyAoYWxpYXMgb2YgJy4kdGhpcy0+YWxpYXNPZi0+Z2V0VmVyc2lvbigpLicpJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2U7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxMaW5rQ29uc3RyYWludEludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKY2xhc3MgTGluawp7CnByb3RlY3RlZCAkc291cmNlOwpwcm90ZWN0ZWQgJHRhcmdldDsKcHJvdGVjdGVkICRjb25zdHJhaW50Owpwcm90ZWN0ZWQgJGRlc2NyaXB0aW9uOwpwcm90ZWN0ZWQgJHByZXR0eUNvbnN0cmFpbnQ7CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNvdXJjZSwgJHRhcmdldCwgTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UgJGNvbnN0cmFpbnQgPSBudWxsLCAkZGVzY3JpcHRpb24gPSAncmVsYXRlcyB0bycsICRwcmV0dHlDb25zdHJhaW50ID0gbnVsbCkKewokdGhpcy0+c291cmNlID0gc3RydG9sb3dlcigkc291cmNlKTsKJHRoaXMtPnRhcmdldCA9IHN0cnRvbG93ZXIoJHRhcmdldCk7CiR0aGlzLT5jb25zdHJhaW50ID0gJGNvbnN0cmFpbnQ7CiR0aGlzLT5kZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbjsKJHRoaXMtPnByZXR0eUNvbnN0cmFpbnQgPSAkcHJldHR5Q29uc3RyYWludDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFNvdXJjZSgpCnsKcmV0dXJuICR0aGlzLT5zb3VyY2U7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRUYXJnZXQoKQp7CnJldHVybiAkdGhpcy0+dGFyZ2V0Owp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29uc3RyYWludCgpCnsKcmV0dXJuICR0aGlzLT5jb25zdHJhaW50Owp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5Q29uc3RyYWludCgpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5wcmV0dHlDb25zdHJhaW50KSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKHNwcmludGYoJ0xpbmsgJXMgaGFzIGJlZW4gbWlzY29uZmlndXJlZCBhbmQgaGFkIG5vIHByZXR0eUNvbnN0cmFpbnQgZ2l2ZW4uJywgJHRoaXMpKTsKfQoKcmV0dXJuICR0aGlzLT5wcmV0dHlDb25zdHJhaW50Owp9CgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCnsKcmV0dXJuICR0aGlzLT5zb3VyY2UuJyAnLiR0aGlzLT5kZXNjcmlwdGlvbi4nICcuJHRoaXMtPnRhcmdldC4nICgnLiR0aGlzLT5jb25zdHJhaW50LicpJzsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVN0cmluZyhQYWNrYWdlSW50ZXJmYWNlICRzb3VyY2VQYWNrYWdlKQp7CnJldHVybiAkc291cmNlUGFja2FnZS0+Z2V0UHJldHR5U3RyaW5nKCkuJyAnLiR0aGlzLT5kZXNjcmlwdGlvbi4nICcuJHRoaXMtPnRhcmdldC4nICcuJHRoaXMtPmNvbnN0cmFpbnQtPmdldFByZXR0eVN0cmluZygpLicnOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludDsKCgoKCgoKY2xhc3MgRW1wdHlDb25zdHJhaW50IGltcGxlbWVudHMgTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJHByZXR0eVN0cmluZzsKCnB1YmxpYyBmdW5jdGlvbiBtYXRjaGVzKExpbmtDb25zdHJhaW50SW50ZXJmYWNlICRwcm92aWRlcikKewpyZXR1cm4gdHJ1ZTsKfQoKcHVibGljIGZ1bmN0aW9uIHNldFByZXR0eVN0cmluZygkcHJldHR5U3RyaW5nKQp7CiR0aGlzLT5wcmV0dHlTdHJpbmcgPSAkcHJldHR5U3RyaW5nOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCkKewppZiAoJHRoaXMtPnByZXR0eVN0cmluZykgewpyZXR1cm4gJHRoaXMtPnByZXR0eVN0cmluZzsKfQoKcmV0dXJuICR0aGlzLT5fX3RvU3RyaW5nKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewpyZXR1cm4gJ1tdJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnQ7CgoKCgoKCgpjbGFzcyBNdWx0aUNvbnN0cmFpbnQgaW1wbGVtZW50cyBMaW5rQ29uc3RyYWludEludGVyZmFjZQp7CnByb3RlY3RlZCAkY29uc3RyYWludHM7CnByb3RlY3RlZCAkcHJldHR5U3RyaW5nOwpwcm90ZWN0ZWQgJGNvbmp1bmN0aXZlOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRjb25zdHJhaW50cywgJGNvbmp1bmN0aXZlID0gdHJ1ZSkKewokdGhpcy0+Y29uc3RyYWludHMgPSAkY29uc3RyYWludHM7CiR0aGlzLT5jb25qdW5jdGl2ZSA9ICRjb25qdW5jdGl2ZTsKfQoKcHVibGljIGZ1bmN0aW9uIG1hdGNoZXMoTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKQp7CmlmIChmYWxzZSA9PT0gJHRoaXMtPmNvbmp1bmN0aXZlKSB7CmZvcmVhY2ggKCR0aGlzLT5jb25zdHJhaW50cyBhcyAkY29uc3RyYWludCkgewppZiAoJGNvbnN0cmFpbnQtPm1hdGNoZXMoJHByb3ZpZGVyKSkgewpyZXR1cm4gdHJ1ZTsKfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCmZvcmVhY2ggKCR0aGlzLT5jb25zdHJhaW50cyBhcyAkY29uc3RyYWludCkgewppZiAoISRjb25zdHJhaW50LT5tYXRjaGVzKCRwcm92aWRlcikpIHsKcmV0dXJuIGZhbHNlOwp9Cn0KCnJldHVybiB0cnVlOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0UHJldHR5U3RyaW5nKCRwcmV0dHlTdHJpbmcpCnsKJHRoaXMtPnByZXR0eVN0cmluZyA9ICRwcmV0dHlTdHJpbmc7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmV0dHlTdHJpbmcoKQp7CmlmICgkdGhpcy0+cHJldHR5U3RyaW5nKSB7CnJldHVybiAkdGhpcy0+cHJldHR5U3RyaW5nOwp9CgpyZXR1cm4gJHRoaXMtPl9fdG9TdHJpbmcoKTsKfQoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CiRjb25zdHJhaW50cyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0aGlzLT5jb25zdHJhaW50cyBhcyAkY29uc3RyYWludCkgewokY29uc3RyYWludHNbXSA9ICRjb25zdHJhaW50LT5fX3RvU3RyaW5nKCk7Cn0KCnJldHVybiAnWycuaW1wbG9kZSgkdGhpcy0+Y29uanVuY3RpdmUgPyAnLCAnIDogJyB8ICcsICRjb25zdHJhaW50cykuJ10nOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludDsKCgoKCgoKCgpjbGFzcyBWZXJzaW9uQ29uc3RyYWludCBleHRlbmRzIFNwZWNpZmljQ29uc3RyYWludAp7CnByaXZhdGUgJG9wZXJhdG9yOwpwcml2YXRlICR2ZXJzaW9uOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRvcGVyYXRvciwgJHZlcnNpb24pCnsKaWYgKCc9JyA9PT0gJG9wZXJhdG9yKSB7CiRvcGVyYXRvciA9ICc9PSc7Cn0KCmlmICgnPD4nID09PSAkb3BlcmF0b3IpIHsKJG9wZXJhdG9yID0gJyE9JzsKfQoKJHRoaXMtPm9wZXJhdG9yID0gJG9wZXJhdG9yOwokdGhpcy0+dmVyc2lvbiA9ICR2ZXJzaW9uOwp9CgpwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbkNvbXBhcmUoJGEsICRiLCAkb3BlcmF0b3IsICRjb21wYXJlQnJhbmNoZXMgPSBmYWxzZSkKewokYUlzQnJhbmNoID0gJ2Rldi0nID09PSBzdWJzdHIoJGEsIDAsIDQpOwokYklzQnJhbmNoID0gJ2Rldi0nID09PSBzdWJzdHIoJGIsIDAsIDQpOwppZiAoJGFJc0JyYW5jaCAmJiAkYklzQnJhbmNoKSB7CnJldHVybiAkb3BlcmF0b3IgPT0gJz09JyAmJiAkYSA9PT0gJGI7Cn0KCgogaWYgKCEkY29tcGFyZUJyYW5jaGVzICYmICgkYUlzQnJhbmNoIHx8ICRiSXNCcmFuY2gpKSB7CnJldHVybiBmYWxzZTsKfQoKcmV0dXJuIHZlcnNpb25fY29tcGFyZSgkYSwgJGIsICRvcGVyYXRvcik7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIG1hdGNoU3BlY2lmaWMoVmVyc2lvbkNvbnN0cmFpbnQgJHByb3ZpZGVyLCAkY29tcGFyZUJyYW5jaGVzID0gZmFsc2UpCnsKc3RhdGljICRjYWNoZSA9IGFycmF5KCk7CmlmIChpc3NldCgkY2FjaGVbJHRoaXMtPm9wZXJhdG9yXVskdGhpcy0+dmVyc2lvbl1bJHByb3ZpZGVyLT5vcGVyYXRvcl1bJHByb3ZpZGVyLT52ZXJzaW9uXVskY29tcGFyZUJyYW5jaGVzXSkpIHsKcmV0dXJuICRjYWNoZVskdGhpcy0+b3BlcmF0b3JdWyR0aGlzLT52ZXJzaW9uXVskcHJvdmlkZXItPm9wZXJhdG9yXVskcHJvdmlkZXItPnZlcnNpb25dWyRjb21wYXJlQnJhbmNoZXNdOwp9CgpyZXR1cm4gJGNhY2hlWyR0aGlzLT5vcGVyYXRvcl1bJHRoaXMtPnZlcnNpb25dWyRwcm92aWRlci0+b3BlcmF0b3JdWyRwcm92aWRlci0+dmVyc2lvbl1bJGNvbXBhcmVCcmFuY2hlc10gPQokdGhpcy0+ZG9NYXRjaFNwZWNpZmljKCRwcm92aWRlciwgJGNvbXBhcmVCcmFuY2hlcyk7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBkb01hdGNoU3BlY2lmaWMoVmVyc2lvbkNvbnN0cmFpbnQgJHByb3ZpZGVyLCAkY29tcGFyZUJyYW5jaGVzID0gZmFsc2UpCnsKJG5vRXF1YWxPcCA9IHN0cl9yZXBsYWNlKCc9JywgJycsICR0aGlzLT5vcGVyYXRvcik7CiRwcm92aWRlck5vRXF1YWxPcCA9IHN0cl9yZXBsYWNlKCc9JywgJycsICRwcm92aWRlci0+b3BlcmF0b3IpOwoKJGlzRXF1YWxPcCA9ICc9PScgPT09ICR0aGlzLT5vcGVyYXRvcjsKJGlzTm9uRXF1YWxPcCA9ICchPScgPT09ICR0aGlzLT5vcGVyYXRvcjsKJGlzUHJvdmlkZXJFcXVhbE9wID0gJz09JyA9PT0gJHByb3ZpZGVyLT5vcGVyYXRvcjsKJGlzUHJvdmlkZXJOb25FcXVhbE9wID0gJyE9JyA9PT0gJHByb3ZpZGVyLT5vcGVyYXRvcjsKCgogCiBpZiAoJGlzTm9uRXF1YWxPcCB8fCAkaXNQcm92aWRlck5vbkVxdWFsT3ApIHsKcmV0dXJuICEkaXNFcXVhbE9wICYmICEkaXNQcm92aWRlckVxdWFsT3AKfHwgJHRoaXMtPnZlcnNpb25Db21wYXJlKCRwcm92aWRlci0+dmVyc2lvbiwgJHRoaXMtPnZlcnNpb24sICchPScsICRjb21wYXJlQnJhbmNoZXMpOwp9CgoKIAogaWYgKCR0aGlzLT5vcGVyYXRvciAhPSAnPT0nICYmICRub0VxdWFsT3AgPT0gJHByb3ZpZGVyTm9FcXVhbE9wKSB7CnJldHVybiB0cnVlOwp9CgppZiAoJHRoaXMtPnZlcnNpb25Db21wYXJlKCRwcm92aWRlci0+dmVyc2lvbiwgJHRoaXMtPnZlcnNpb24sICR0aGlzLT5vcGVyYXRvciwgJGNvbXBhcmVCcmFuY2hlcykpIHsKCiAKIGlmICgkcHJvdmlkZXItPnZlcnNpb24gPT0gJHRoaXMtPnZlcnNpb24gJiYgJHByb3ZpZGVyLT5vcGVyYXRvciA9PSAkcHJvdmlkZXJOb0VxdWFsT3AgJiYgJHRoaXMtPm9wZXJhdG9yICE9ICRub0VxdWFsT3ApIHsKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcmV0dXJuIGZhbHNlOwp9CgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCnsKcmV0dXJuICR0aGlzLT5vcGVyYXRvci4nICcuJHRoaXMtPnZlcnNpb247Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQYWNrYWdlXExpbmtDb25zdHJhaW50OwoKCgoKCgphYnN0cmFjdCBjbGFzcyBTcGVjaWZpY0NvbnN0cmFpbnQgaW1wbGVtZW50cyBMaW5rQ29uc3RyYWludEludGVyZmFjZQp7CnByb3RlY3RlZCAkcHJldHR5U3RyaW5nOwoKcHVibGljIGZ1bmN0aW9uIG1hdGNoZXMoTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKQp7CmlmICgkcHJvdmlkZXIgaW5zdGFuY2VvZiBNdWx0aUNvbnN0cmFpbnQpIHsKCiByZXR1cm4gJHByb3ZpZGVyLT5tYXRjaGVzKCR0aGlzKTsKfSBlbHNlaWYgKCRwcm92aWRlciBpbnN0YW5jZW9mICR0aGlzKSB7CnJldHVybiAkdGhpcy0+bWF0Y2hTcGVjaWZpYygkcHJvdmlkZXIpOwp9CgpyZXR1cm4gdHJ1ZTsKfQoKcHVibGljIGZ1bmN0aW9uIHNldFByZXR0eVN0cmluZygkcHJldHR5U3RyaW5nKQp7CiR0aGlzLT5wcmV0dHlTdHJpbmcgPSAkcHJldHR5U3RyaW5nOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKCkKewppZiAoJHRoaXMtPnByZXR0eVN0cmluZykgewpyZXR1cm4gJHRoaXMtPnByZXR0eVN0cmluZzsKfQoKcmV0dXJuICR0aGlzLT5fX3RvU3RyaW5nKCk7Cn0KCgogCiAKCn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludDsKCgoKCgoKaW50ZXJmYWNlIExpbmtDb25zdHJhaW50SW50ZXJmYWNlCnsKcHVibGljIGZ1bmN0aW9uIG1hdGNoZXMoTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UgJHByb3ZpZGVyKTsKcHVibGljIGZ1bmN0aW9uIHNldFByZXR0eVN0cmluZygkcHJldHR5U3RyaW5nKTsKcHVibGljIGZ1bmN0aW9uIGdldFByZXR0eVN0cmluZygpOwpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyOwoKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcVXRpbFxGaWxlc3lzdGVtOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEZpbmRlcjsKCgoKCgoKY2xhc3MgQ2FjaGUKewpwcml2YXRlIHN0YXRpYyAkY2FjaGVDb2xsZWN0ZWQgPSBmYWxzZTsKcHJpdmF0ZSAkaW87CnByaXZhdGUgJHJvb3Q7CnByaXZhdGUgJGVuYWJsZWQgPSB0cnVlOwpwcml2YXRlICR3aGl0ZWxpc3Q7CnByaXZhdGUgJGZpbGVzeXN0ZW07CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSU9JbnRlcmZhY2UgJGlvLCAkY2FjaGVEaXIsICR3aGl0ZWxpc3QgPSAnYS16MC05LicsIEZpbGVzeXN0ZW0gJGZpbGVzeXN0ZW0gPSBudWxsKQp7CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPnJvb3QgPSBydHJpbSgkY2FjaGVEaXIsICcvXFwnKSAuICcvJzsKJHRoaXMtPndoaXRlbGlzdCA9ICR3aGl0ZWxpc3Q7CiR0aGlzLT5maWxlc3lzdGVtID0gJGZpbGVzeXN0ZW0gPzogbmV3IEZpbGVzeXN0ZW0oKTsKCmlmICghaXNfZGlyKCR0aGlzLT5yb290KSkgewppZiAoIUBta2RpcigkdGhpcy0+cm9vdCwgMDc3NywgdHJ1ZSkpIHsKJHRoaXMtPmVuYWJsZWQgPSBmYWxzZTsKfQp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0VuYWJsZWQoKQp7CnJldHVybiAkdGhpcy0+ZW5hYmxlZDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFJvb3QoKQp7CnJldHVybiAkdGhpcy0+cm9vdDsKfQoKcHVibGljIGZ1bmN0aW9uIHJlYWQoJGZpbGUpCnsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CmlmICgkdGhpcy0+ZW5hYmxlZCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+cm9vdCAuICRmaWxlKSkgewppZiAoJHRoaXMtPmlvLT5pc0RlYnVnKCkpIHsKJHRoaXMtPmlvLT53cml0ZSgnUmVhZGluZyAnLiR0aGlzLT5yb290IC4gJGZpbGUuJyBmcm9tIGNhY2hlJyk7Cn0KCnJldHVybiBmaWxlX2dldF9jb250ZW50cygkdGhpcy0+cm9vdCAuICRmaWxlKTsKfQoKcmV0dXJuIGZhbHNlOwp9CgpwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGZpbGUsICRjb250ZW50cykKewppZiAoJHRoaXMtPmVuYWJsZWQpIHsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CgppZiAoJHRoaXMtPmlvLT5pc0RlYnVnKCkpIHsKJHRoaXMtPmlvLT53cml0ZSgnV3JpdGluZyAnLiR0aGlzLT5yb290IC4gJGZpbGUuJyBpbnRvIGNhY2hlJyk7Cn0KCnJldHVybiBmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+cm9vdCAuICRmaWxlLCAkY29udGVudHMpOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBjb3B5RnJvbSgkZmlsZSwgJHNvdXJjZSkKewppZiAoJHRoaXMtPmVuYWJsZWQpIHsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CiR0aGlzLT5maWxlc3lzdGVtLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoZGlybmFtZSgkdGhpcy0+cm9vdCAuICRmaWxlKSk7CgppZiAoJHRoaXMtPmlvLT5pc0RlYnVnKCkpIHsKJHRoaXMtPmlvLT53cml0ZSgnV3JpdGluZyAnLiR0aGlzLT5yb290IC4gJGZpbGUuJyBpbnRvIGNhY2hlJyk7Cn0KCnJldHVybiBjb3B5KCRzb3VyY2UsICR0aGlzLT5yb290IC4gJGZpbGUpOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBjb3B5VG8oJGZpbGUsICR0YXJnZXQpCnsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CmlmICgkdGhpcy0+ZW5hYmxlZCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+cm9vdCAuICRmaWxlKSkgewp0b3VjaCgkdGhpcy0+cm9vdCAuICRmaWxlKTsKCmlmICgkdGhpcy0+aW8tPmlzRGVidWcoKSkgewokdGhpcy0+aW8tPndyaXRlKCdSZWFkaW5nICcuJHRoaXMtPnJvb3QgLiAkZmlsZS4nIGZyb20gY2FjaGUnKTsKfQoKcmV0dXJuIGNvcHkoJHRoaXMtPnJvb3QgLiAkZmlsZSwgJHRhcmdldCk7Cn0KCnJldHVybiBmYWxzZTsKfQoKcHVibGljIGZ1bmN0aW9uIGdjSXNOZWNlc3NhcnkoKQp7CnJldHVybiAoIXNlbGY6OiRjYWNoZUNvbGxlY3RlZCAmJiAhbXRfcmFuZCgwLCA1MCkpOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlKCRmaWxlKQp7CiRmaWxlID0gcHJlZ19yZXBsYWNlKCd7W14nLiR0aGlzLT53aGl0ZWxpc3QuJ119aScsICctJywgJGZpbGUpOwppZiAoJHRoaXMtPmVuYWJsZWQgJiYgZmlsZV9leGlzdHMoJHRoaXMtPnJvb3QgLiAkZmlsZSkpIHsKcmV0dXJuIHVubGluaygkdGhpcy0+cm9vdCAuICRmaWxlKTsKfQoKcmV0dXJuIGZhbHNlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2MoJHR0bCwgJG1heFNpemUpCnsKaWYgKCR0aGlzLT5lbmFibGVkKQp7CiRleHBpcmUgPSBuZXcgXERhdGVUaW1lKCk7CiRleHBpcmUtPm1vZGlmeSgnLScuJHR0bC4nIHNlY29uZHMnKTsKCiRmaW5kZXIgPSAkdGhpcy0+Z2V0RmluZGVyKCktPmRhdGUoJ3VudGlsICcuJGV4cGlyZS0+Zm9ybWF0KCdZLW0tZCBIOmk6cycpKTsKZm9yZWFjaCAoJGZpbmRlciBhcyAkZmlsZSkgewp1bmxpbmsoJGZpbGUtPmdldFBhdGhuYW1lKCkpOwp9CgokdG90YWxTaXplID0gJHRoaXMtPmZpbGVzeXN0ZW0tPnNpemUoJHRoaXMtPnJvb3QpOwppZiAoJHRvdGFsU2l6ZSA+ICRtYXhTaXplKSB7CiRpdGVyYXRvciA9ICR0aGlzLT5nZXRGaW5kZXIoKS0+c29ydEJ5QWNjZXNzZWRUaW1lKCktPmdldEl0ZXJhdG9yKCk7CndoaWxlICgkdG90YWxTaXplID4gJG1heFNpemUgJiYgJGl0ZXJhdG9yLT52YWxpZCgpKSB7CiRmaWxlcGF0aCA9ICRpdGVyYXRvci0+Y3VycmVudCgpLT5nZXRQYXRobmFtZSgpOwokdG90YWxTaXplIC09ICR0aGlzLT5maWxlc3lzdGVtLT5zaXplKCRmaWxlcGF0aCk7CnVubGluaygkZmlsZXBhdGgpOwokaXRlcmF0b3ItPm5leHQoKTsKfQp9CgpzZWxmOjokY2FjaGVDb2xsZWN0ZWQgPSB0cnVlOwoKcmV0dXJuIHRydWU7Cn0KCnJldHVybiBmYWxzZTsKfQoKcHVibGljIGZ1bmN0aW9uIHNoYTEoJGZpbGUpCnsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CmlmICgkdGhpcy0+ZW5hYmxlZCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+cm9vdCAuICRmaWxlKSkgewpyZXR1cm4gc2hhMV9maWxlKCR0aGlzLT5yb290IC4gJGZpbGUpOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzaGEyNTYoJGZpbGUpCnsKJGZpbGUgPSBwcmVnX3JlcGxhY2UoJ3tbXicuJHRoaXMtPndoaXRlbGlzdC4nXX1pJywgJy0nLCAkZmlsZSk7CmlmICgkdGhpcy0+ZW5hYmxlZCAmJiBmaWxlX2V4aXN0cygkdGhpcy0+cm9vdCAuICRmaWxlKSkgewpyZXR1cm4gaGFzaF9maWxlKCdzaGEyNTYnLCAkdGhpcy0+cm9vdCAuICRmaWxlKTsKfQoKcmV0dXJuIGZhbHNlOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RmluZGVyKCkKewpyZXR1cm4gRmluZGVyOjpjcmVhdGUoKS0+aW4oJHRoaXMtPnJvb3QpLT5maWxlcygpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCmludGVyZmFjZSBQb2xpY3lJbnRlcmZhY2UKewpwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbkNvbXBhcmUoUGFja2FnZUludGVyZmFjZSAkYSwgUGFja2FnZUludGVyZmFjZSAkYiwgJG9wZXJhdG9yKTsKcHVibGljIGZ1bmN0aW9uIGZpbmRVcGRhdGVQYWNrYWdlcyhQb29sICRwb29sLCBhcnJheSAkaW5zdGFsbGVkTWFwLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKTsKcHVibGljIGZ1bmN0aW9uIHNlbGVjdFByZWZlcmVkUGFja2FnZXMoUG9vbCAkcG9vbCwgYXJyYXkgJGluc3RhbGxlZE1hcCwgYXJyYXkgJGxpdGVyYWxzKTsKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXI7CgoKCgpjbGFzcyBSdWxlU2V0IGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlLCBcQ291bnRhYmxlCnsKCiBjb25zdCBUWVBFX1BBQ0tBR0UgPSAwOwpjb25zdCBUWVBFX0pPQiA9IDE7CmNvbnN0IFRZUEVfTEVBUk5FRCA9IDQ7Cgpwcm90ZWN0ZWQgc3RhdGljICR0eXBlcyA9IGFycmF5KAotMSA9PiAnVU5LTk9XTicsCnNlbGY6OlRZUEVfUEFDS0FHRSA9PiAnUEFDS0FHRScsCnNlbGY6OlRZUEVfSk9CID0+ICdKT0InLApzZWxmOjpUWVBFX0xFQVJORUQgPT4gJ0xFQVJORUQnLAopOwoKcHJvdGVjdGVkICRydWxlczsKcHJvdGVjdGVkICRydWxlQnlJZDsKcHJvdGVjdGVkICRuZXh0UnVsZUlkOwoKcHJvdGVjdGVkICRydWxlc0J5SGFzaDsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCnsKJHRoaXMtPm5leHRSdWxlSWQgPSAwOwoKZm9yZWFjaCAoJHRoaXMtPmdldFR5cGVzKCkgYXMgJHR5cGUpIHsKJHRoaXMtPnJ1bGVzWyR0eXBlXSA9IGFycmF5KCk7Cn0KCiR0aGlzLT5ydWxlc0J5SGFzaCA9IGFycmF5KCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBhZGQoUnVsZSAkcnVsZSwgJHR5cGUpCnsKaWYgKCFpc3NldChzZWxmOjokdHlwZXNbJHR5cGVdKSkgewp0aHJvdyBuZXcgXE91dE9mQm91bmRzRXhjZXB0aW9uKCdVbmtub3duIHJ1bGUgdHlwZTogJyAuICR0eXBlKTsKfQoKaWYgKCFpc3NldCgkdGhpcy0+cnVsZXNbJHR5cGVdKSkgewokdGhpcy0+cnVsZXNbJHR5cGVdID0gYXJyYXkoKTsKfQoKJHRoaXMtPnJ1bGVzWyR0eXBlXVtdID0gJHJ1bGU7CiR0aGlzLT5ydWxlQnlJZFskdGhpcy0+bmV4dFJ1bGVJZF0gPSAkcnVsZTsKJHJ1bGUtPnNldFR5cGUoJHR5cGUpOwoKJHJ1bGUtPnNldElkKCR0aGlzLT5uZXh0UnVsZUlkKTsKJHRoaXMtPm5leHRSdWxlSWQrKzsKCiRoYXNoID0gJHJ1bGUtPmdldEhhc2goKTsKaWYgKCFpc3NldCgkdGhpcy0+cnVsZXNCeUhhc2hbJGhhc2hdKSkgewokdGhpcy0+cnVsZXNCeUhhc2hbJGhhc2hdID0gYXJyYXkoJHJ1bGUpOwp9IGVsc2UgewokdGhpcy0+cnVsZXNCeUhhc2hbJGhhc2hdW10gPSAkcnVsZTsKfQp9CgpwdWJsaWMgZnVuY3Rpb24gY291bnQoKQp7CnJldHVybiAkdGhpcy0+bmV4dFJ1bGVJZDsKfQoKcHVibGljIGZ1bmN0aW9uIHJ1bGVCeUlkKCRpZCkKewpyZXR1cm4gJHRoaXMtPnJ1bGVCeUlkWyRpZF07Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRSdWxlcygpCnsKcmV0dXJuICR0aGlzLT5ydWxlczsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKewpyZXR1cm4gbmV3IFJ1bGVTZXRJdGVyYXRvcigkdGhpcy0+Z2V0UnVsZXMoKSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvckZvcigkdHlwZXMpCnsKaWYgKCFpc19hcnJheSgkdHlwZXMpKSB7CiR0eXBlcyA9IGFycmF5KCR0eXBlcyk7Cn0KCiRhbGxSdWxlcyA9ICR0aGlzLT5nZXRSdWxlcygpOwokcnVsZXMgPSBhcnJheSgpOwoKZm9yZWFjaCAoJHR5cGVzIGFzICR0eXBlKSB7CiRydWxlc1skdHlwZV0gPSAkYWxsUnVsZXNbJHR5cGVdOwp9CgpyZXR1cm4gbmV3IFJ1bGVTZXRJdGVyYXRvcigkcnVsZXMpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3JXaXRob3V0KCR0eXBlcykKewppZiAoIWlzX2FycmF5KCR0eXBlcykpIHsKJHR5cGVzID0gYXJyYXkoJHR5cGVzKTsKfQoKJHJ1bGVzID0gJHRoaXMtPmdldFJ1bGVzKCk7Cgpmb3JlYWNoICgkdHlwZXMgYXMgJHR5cGUpIHsKdW5zZXQoJHJ1bGVzWyR0eXBlXSk7Cn0KCnJldHVybiBuZXcgUnVsZVNldEl0ZXJhdG9yKCRydWxlcyk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlcygpCnsKJHR5cGVzID0gc2VsZjo6JHR5cGVzOwp1bnNldCgkdHlwZXNbLTFdKTsKCnJldHVybiBhcnJheV9rZXlzKCR0eXBlcyk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBjb250YWluc0VxdWFsKCRydWxlKQp7CmlmIChpc3NldCgkdGhpcy0+cnVsZXNCeUhhc2hbJHJ1bGUtPmdldEhhc2goKV0pKSB7CiRwb3RlbnRpYWxEdXBsaWNhdGVzID0gJHRoaXMtPnJ1bGVzQnlIYXNoWyRydWxlLT5nZXRIYXNoKCldOwpmb3JlYWNoICgkcG90ZW50aWFsRHVwbGljYXRlcyBhcyAkcG90ZW50aWFsRHVwbGljYXRlKSB7CmlmICgkcnVsZS0+ZXF1YWxzKCRwb3RlbnRpYWxEdXBsaWNhdGUpKSB7CnJldHVybiB0cnVlOwp9Cn0KfQoKcmV0dXJuIGZhbHNlOwp9CgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCnsKJHN0cmluZyA9ICJcbiI7CmZvcmVhY2ggKCR0aGlzLT5ydWxlcyBhcyAkdHlwZSA9PiAkcnVsZXMpIHsKJHN0cmluZyAuPSBzdHJfcGFkKHNlbGY6OiR0eXBlc1skdHlwZV0sIDgsICcgJykgLiAiOiAiOwpmb3JlYWNoICgkcnVsZXMgYXMgJHJ1bGUpIHsKJHN0cmluZyAuPSAkcnVsZS4iXG4iOwp9CiRzdHJpbmcgLj0gIlxuXG4iOwp9CgpyZXR1cm4gJHN0cmluZzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCmNsYXNzIFNvbHZlckJ1Z0V4Y2VwdGlvbiBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uCnsKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoCiRtZXNzYWdlLiJcblRoaXMgZXhjZXB0aW9uIHdhcyBtb3N0IGxpa2VseSBjYXVzZWQgYnkgYSBidWcgaW4gQ29tcG9zZXIuXG4iLgoiUGxlYXNlIHJlcG9ydCB0aGUgY29tbWFuZCB5b3UgcmFuLCB0aGUgZXhhY3QgZXJyb3IgeW91IHJlY2VpdmVkLCBhbmQgeW91ciBjb21wb3Nlci5qc29uIG9uIGh0dHBzOi8vZ2l0aHViLmNvbS9jb21wb3Nlci9jb21wb3Nlci9pc3N1ZXMgLSB0aGFuayB5b3UhXG4iKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQmFzZVBhY2thZ2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXExpbmtDb25zdHJhaW50XFZlcnNpb25Db25zdHJhaW50OwoKCgoKCmNsYXNzIERlZmF1bHRQb2xpY3kgaW1wbGVtZW50cyBQb2xpY3lJbnRlcmZhY2UKewpwcml2YXRlICRwcmVmZXJTdGFibGU7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHByZWZlclN0YWJsZSA9IGZhbHNlKQp7CiR0aGlzLT5wcmVmZXJTdGFibGUgPSAkcHJlZmVyU3RhYmxlOwp9CgpwdWJsaWMgZnVuY3Rpb24gdmVyc2lvbkNvbXBhcmUoUGFja2FnZUludGVyZmFjZSAkYSwgUGFja2FnZUludGVyZmFjZSAkYiwgJG9wZXJhdG9yKQp7CmlmICgkdGhpcy0+cHJlZmVyU3RhYmxlICYmICgkc3RhYkEgPSAkYS0+Z2V0U3RhYmlsaXR5KCkpICE9PSAoJHN0YWJCID0gJGItPmdldFN0YWJpbGl0eSgpKSkgewpyZXR1cm4gQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllc1skc3RhYkFdIDwgQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllc1skc3RhYkJdOwp9CgokY29uc3RyYWludCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgkb3BlcmF0b3IsICRiLT5nZXRWZXJzaW9uKCkpOwokdmVyc2lvbiA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPT0nLCAkYS0+Z2V0VmVyc2lvbigpKTsKCnJldHVybiAkY29uc3RyYWludC0+bWF0Y2hTcGVjaWZpYygkdmVyc2lvbiwgdHJ1ZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBmaW5kVXBkYXRlUGFja2FnZXMoUG9vbCAkcG9vbCwgYXJyYXkgJGluc3RhbGxlZE1hcCwgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSwgJG11c3RNYXRjaE5hbWUgPSBmYWxzZSkKewokcGFja2FnZXMgPSBhcnJheSgpOwoKZm9yZWFjaCAoJHBvb2wtPndoYXRQcm92aWRlcygkcGFja2FnZS0+Z2V0TmFtZSgpLCBudWxsLCAkbXVzdE1hdGNoTmFtZSkgYXMgJGNhbmRpZGF0ZSkgewppZiAoJGNhbmRpZGF0ZSAhPT0gJHBhY2thZ2UpIHsKJHBhY2thZ2VzW10gPSAkY2FuZGlkYXRlOwp9Cn0KCnJldHVybiAkcGFja2FnZXM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmlvcml0eShQb29sICRwb29sLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiAkcG9vbC0+Z2V0UHJpb3JpdHkoJHBhY2thZ2UtPmdldFJlcG9zaXRvcnkoKSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZWxlY3RQcmVmZXJlZFBhY2thZ2VzKFBvb2wgJHBvb2wsIGFycmF5ICRpbnN0YWxsZWRNYXAsIGFycmF5ICRsaXRlcmFscywgJHJlcXVpcmVkUGFja2FnZSA9IG51bGwpCnsKJHBhY2thZ2VzID0gJHRoaXMtPmdyb3VwTGl0ZXJhbHNCeU5hbWVQcmVmZXJJbnN0YWxsZWQoJHBvb2wsICRpbnN0YWxsZWRNYXAsICRsaXRlcmFscyk7Cgpmb3JlYWNoICgkcGFja2FnZXMgYXMgJiRsaXRlcmFscykgewokcG9saWN5ID0gJHRoaXM7CnVzb3J0KCRsaXRlcmFscywgZnVuY3Rpb24gKCRhLCAkYikgdXNlICgkcG9saWN5LCAkcG9vbCwgJGluc3RhbGxlZE1hcCwgJHJlcXVpcmVkUGFja2FnZSkgewpyZXR1cm4gJHBvbGljeS0+Y29tcGFyZUJ5UHJpb3JpdHlQcmVmZXJJbnN0YWxsZWQoJHBvb2wsICRpbnN0YWxsZWRNYXAsICRwb29sLT5saXRlcmFsVG9QYWNrYWdlKCRhKSwgJHBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGIpLCAkcmVxdWlyZWRQYWNrYWdlLCB0cnVlKTsKfSk7Cn0KCmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAmJGxpdGVyYWxzKSB7CiRsaXRlcmFscyA9ICR0aGlzLT5wcnVuZVRvQmVzdFZlcnNpb24oJHBvb2wsICRsaXRlcmFscyk7CgokbGl0ZXJhbHMgPSAkdGhpcy0+cHJ1bmVUb0hpZ2hlc3RQcmlvcml0eU9ySW5zdGFsbGVkKCRwb29sLCAkaW5zdGFsbGVkTWFwLCAkbGl0ZXJhbHMpOwoKJGxpdGVyYWxzID0gJHRoaXMtPnBydW5lUmVtb3RlQWxpYXNlcygkcG9vbCwgJGxpdGVyYWxzKTsKfQoKJHNlbGVjdGVkID0gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHBhY2thZ2VzKTsKCgogdXNvcnQoJHNlbGVjdGVkLCBmdW5jdGlvbiAoJGEsICRiKSB1c2UgKCRwb2xpY3ksICRwb29sLCAkaW5zdGFsbGVkTWFwLCAkcmVxdWlyZWRQYWNrYWdlKSB7CnJldHVybiAkcG9saWN5LT5jb21wYXJlQnlQcmlvcml0eVByZWZlckluc3RhbGxlZCgkcG9vbCwgJGluc3RhbGxlZE1hcCwgJHBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGEpLCAkcG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkYiksICRyZXF1aXJlZFBhY2thZ2UpOwp9KTsKCnJldHVybiAkc2VsZWN0ZWQ7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBncm91cExpdGVyYWxzQnlOYW1lUHJlZmVySW5zdGFsbGVkKFBvb2wgJHBvb2wsIGFycmF5ICRpbnN0YWxsZWRNYXAsICRsaXRlcmFscykKewokcGFja2FnZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKJHBhY2thZ2VOYW1lID0gJHBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpLT5nZXROYW1lKCk7CgppZiAoIWlzc2V0KCRwYWNrYWdlc1skcGFja2FnZU5hbWVdKSkgewokcGFja2FnZXNbJHBhY2thZ2VOYW1lXSA9IGFycmF5KCk7Cn0KCmlmIChpc3NldCgkaW5zdGFsbGVkTWFwW2FicygkbGl0ZXJhbCldKSkgewphcnJheV91bnNoaWZ0KCRwYWNrYWdlc1skcGFja2FnZU5hbWVdLCAkbGl0ZXJhbCk7Cn0gZWxzZSB7CiRwYWNrYWdlc1skcGFja2FnZU5hbWVdW10gPSAkbGl0ZXJhbDsKfQp9CgpyZXR1cm4gJHBhY2thZ2VzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gY29tcGFyZUJ5UHJpb3JpdHlQcmVmZXJJbnN0YWxsZWQoUG9vbCAkcG9vbCwgYXJyYXkgJGluc3RhbGxlZE1hcCwgUGFja2FnZUludGVyZmFjZSAkYSwgUGFja2FnZUludGVyZmFjZSAkYiwgJHJlcXVpcmVkUGFja2FnZSA9IG51bGwsICRpZ25vcmVSZXBsYWNlID0gZmFsc2UpCnsKaWYgKCRhLT5nZXRSZXBvc2l0b3J5KCkgPT09ICRiLT5nZXRSZXBvc2l0b3J5KCkpIHsKCiBpZiAoJGEtPmdldE5hbWUoKSA9PT0gJGItPmdldE5hbWUoKSkgewokYUFsaWFzZWQgPSAkYSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZTsKJGJBbGlhc2VkID0gJGIgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2U7CmlmICgkYUFsaWFzZWQgJiYgISRiQWxpYXNlZCkgewpyZXR1cm4gLTE7IAogfQppZiAoISRhQWxpYXNlZCAmJiAkYkFsaWFzZWQpIHsKcmV0dXJuIDE7IAogfQp9CgppZiAoISRpZ25vcmVSZXBsYWNlKSB7CgogaWYgKCR0aGlzLT5yZXBsYWNlcygkYSwgJGIpKSB7CnJldHVybiAxOyAKIH0KaWYgKCR0aGlzLT5yZXBsYWNlcygkYiwgJGEpKSB7CnJldHVybiAtMTsgCiB9CgoKIAogaWYgKCRyZXF1aXJlZFBhY2thZ2UgJiYgZmFsc2UgIT09ICgkcG9zID0gc3RycG9zKCRyZXF1aXJlZFBhY2thZ2UsICcvJykpKSB7CiRyZXF1aXJlZFZlbmRvciA9IHN1YnN0cigkcmVxdWlyZWRQYWNrYWdlLCAwLCAkcG9zKTsKCiRhSXNTYW1lVmVuZG9yID0gc3Vic3RyKCRhLT5nZXROYW1lKCksIDAsICRwb3MpID09PSAkcmVxdWlyZWRWZW5kb3I7CiRiSXNTYW1lVmVuZG9yID0gc3Vic3RyKCRiLT5nZXROYW1lKCksIDAsICRwb3MpID09PSAkcmVxdWlyZWRWZW5kb3I7CgppZiAoJGJJc1NhbWVWZW5kb3IgIT09ICRhSXNTYW1lVmVuZG9yKSB7CnJldHVybiAkYUlzU2FtZVZlbmRvciA/IC0xIDogMTsKfQp9Cn0KCgogaWYgKCRhLT5nZXRJZCgpID09PSAkYi0+Z2V0SWQoKSkgewpyZXR1cm4gMDsKfQoKcmV0dXJuICgkYS0+Z2V0SWQoKSA8ICRiLT5nZXRJZCgpKSA/IC0xIDogMTsKfQoKaWYgKGlzc2V0KCRpbnN0YWxsZWRNYXBbJGEtPmdldElkKCldKSkgewpyZXR1cm4gLTE7Cn0KCmlmIChpc3NldCgkaW5zdGFsbGVkTWFwWyRiLT5nZXRJZCgpXSkpIHsKcmV0dXJuIDE7Cn0KCnJldHVybiAoJHRoaXMtPmdldFByaW9yaXR5KCRwb29sLCAkYSkgPiAkdGhpcy0+Z2V0UHJpb3JpdHkoJHBvb2wsICRiKSkgPyAtMSA6IDE7Cn0KCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gcmVwbGFjZXMoUGFja2FnZUludGVyZmFjZSAkc291cmNlLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQpCnsKZm9yZWFjaCAoJHNvdXJjZS0+Z2V0UmVwbGFjZXMoKSBhcyAkbGluaykgewppZiAoJGxpbmstPmdldFRhcmdldCgpID09PSAkdGFyZ2V0LT5nZXROYW1lKCkKCgogKSB7CnJldHVybiB0cnVlOwp9Cn0KCnJldHVybiBmYWxzZTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHBydW5lVG9CZXN0VmVyc2lvbihQb29sICRwb29sLCAkbGl0ZXJhbHMpCnsKJGJlc3RMaXRlcmFscyA9IGFycmF5KCRsaXRlcmFsc1swXSk7CiRiZXN0UGFja2FnZSA9ICRwb29sLT5saXRlcmFsVG9QYWNrYWdlKCRsaXRlcmFsc1swXSk7CmZvcmVhY2ggKCRsaXRlcmFscyBhcyAkaSA9PiAkbGl0ZXJhbCkgewppZiAoMCA9PT0gJGkpIHsKY29udGludWU7Cn0KCiRwYWNrYWdlID0gJHBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwoKaWYgKCR0aGlzLT52ZXJzaW9uQ29tcGFyZSgkcGFja2FnZSwgJGJlc3RQYWNrYWdlLCAnPicpKSB7CiRiZXN0UGFja2FnZSA9ICRwYWNrYWdlOwokYmVzdExpdGVyYWxzID0gYXJyYXkoJGxpdGVyYWwpOwp9IGVsc2VpZiAoJHRoaXMtPnZlcnNpb25Db21wYXJlKCRwYWNrYWdlLCAkYmVzdFBhY2thZ2UsICc9PScpKSB7CiRiZXN0TGl0ZXJhbHNbXSA9ICRsaXRlcmFsOwp9Cn0KCnJldHVybiAkYmVzdExpdGVyYWxzOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2VsZWN0TmV3ZXN0UGFja2FnZXMoYXJyYXkgJGluc3RhbGxlZE1hcCwgYXJyYXkgJGxpdGVyYWxzKQp7CiRtYXhMaXRlcmFscyA9IGFycmF5KCRsaXRlcmFsc1swXSk7CiRtYXhQYWNrYWdlID0gJGxpdGVyYWxzWzBdLT5nZXRQYWNrYWdlKCk7CmZvcmVhY2ggKCRsaXRlcmFscyBhcyAkaSA9PiAkbGl0ZXJhbCkgewppZiAoMCA9PT0gJGkpIHsKY29udGludWU7Cn0KCmlmICgkdGhpcy0+dmVyc2lvbkNvbXBhcmUoJGxpdGVyYWwtPmdldFBhY2thZ2UoKSwgJG1heFBhY2thZ2UsICc+JykpIHsKJG1heFBhY2thZ2UgPSAkbGl0ZXJhbC0+Z2V0UGFja2FnZSgpOwokbWF4TGl0ZXJhbHMgPSBhcnJheSgkbGl0ZXJhbCk7Cn0gZWxzZWlmICgkdGhpcy0+dmVyc2lvbkNvbXBhcmUoJGxpdGVyYWwtPmdldFBhY2thZ2UoKSwgJG1heFBhY2thZ2UsICc9PScpKSB7CiRtYXhMaXRlcmFsc1tdID0gJGxpdGVyYWw7Cn0KfQoKcmV0dXJuICRtYXhMaXRlcmFsczsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHBydW5lVG9IaWdoZXN0UHJpb3JpdHlPckluc3RhbGxlZChQb29sICRwb29sLCBhcnJheSAkaW5zdGFsbGVkTWFwLCBhcnJheSAkbGl0ZXJhbHMpCnsKJHNlbGVjdGVkID0gYXJyYXkoKTsKCiRwcmlvcml0eSA9IG51bGw7Cgpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKJHBhY2thZ2UgPSAkcG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCk7CgppZiAoaXNzZXQoJGluc3RhbGxlZE1hcFskcGFja2FnZS0+Z2V0SWQoKV0pKSB7CiRzZWxlY3RlZFtdID0gJGxpdGVyYWw7CmNvbnRpbnVlOwp9CgppZiAobnVsbCA9PT0gJHByaW9yaXR5KSB7CiRwcmlvcml0eSA9ICR0aGlzLT5nZXRQcmlvcml0eSgkcG9vbCwgJHBhY2thZ2UpOwp9CgppZiAoJHRoaXMtPmdldFByaW9yaXR5KCRwb29sLCAkcGFja2FnZSkgIT0gJHByaW9yaXR5KSB7CmJyZWFrOwp9Cgokc2VsZWN0ZWRbXSA9ICRsaXRlcmFsOwp9CgpyZXR1cm4gJHNlbGVjdGVkOwp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcnVuZVJlbW90ZUFsaWFzZXMoUG9vbCAkcG9vbCwgYXJyYXkgJGxpdGVyYWxzKQp7CiRoYXNMb2NhbEFsaWFzID0gZmFsc2U7Cgpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKJHBhY2thZ2UgPSAkcG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCk7CgppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UgJiYgJHBhY2thZ2UtPmlzUm9vdFBhY2thZ2VBbGlhcygpKSB7CiRoYXNMb2NhbEFsaWFzID0gdHJ1ZTsKYnJlYWs7Cn0KfQoKaWYgKCEkaGFzTG9jYWxBbGlhcykgewpyZXR1cm4gJGxpdGVyYWxzOwp9Cgokc2VsZWN0ZWQgPSBhcnJheSgpOwpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKJHBhY2thZ2UgPSAkcG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCk7CgppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UgJiYgJHBhY2thZ2UtPmlzUm9vdFBhY2thZ2VBbGlhcygpKSB7CiRzZWxlY3RlZFtdID0gJGxpdGVyYWw7Cn0KfQoKcmV0dXJuICRzZWxlY3RlZDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCgoKY2xhc3MgRGVjaXNpb25zIGltcGxlbWVudHMgXEl0ZXJhdG9yLCBcQ291bnRhYmxlCnsKY29uc3QgREVDSVNJT05fTElURVJBTCA9IDA7CmNvbnN0IERFQ0lTSU9OX1JFQVNPTiA9IDE7Cgpwcm90ZWN0ZWQgJHBvb2w7CnByb3RlY3RlZCAkZGVjaXNpb25NYXA7CnByb3RlY3RlZCAkZGVjaXNpb25RdWV1ZSA9IGFycmF5KCk7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBvb2wpCnsKJHRoaXMtPnBvb2wgPSAkcG9vbDsKJHRoaXMtPmRlY2lzaW9uTWFwID0gYXJyYXkoKTsKfQoKcHVibGljIGZ1bmN0aW9uIGRlY2lkZSgkbGl0ZXJhbCwgJGxldmVsLCAkd2h5KQp7CiR0aGlzLT5hZGREZWNpc2lvbigkbGl0ZXJhbCwgJGxldmVsKTsKJHRoaXMtPmRlY2lzaW9uUXVldWVbXSA9IGFycmF5KApzZWxmOjpERUNJU0lPTl9MSVRFUkFMID0+ICRsaXRlcmFsLApzZWxmOjpERUNJU0lPTl9SRUFTT04gPT4gJHdoeSwKKTsKfQoKcHVibGljIGZ1bmN0aW9uIHNhdGlzZnkoJGxpdGVyYWwpCnsKJHBhY2thZ2VJZCA9IGFicygkbGl0ZXJhbCk7CgpyZXR1cm4gKAokbGl0ZXJhbCA+IDAgJiYgaXNzZXQoJHRoaXMtPmRlY2lzaW9uTWFwWyRwYWNrYWdlSWRdKSAmJiAkdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0gPiAwIHx8CiRsaXRlcmFsIDwgMCAmJiBpc3NldCgkdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0pICYmICR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSA8IDAKKTsKfQoKcHVibGljIGZ1bmN0aW9uIGNvbmZsaWN0KCRsaXRlcmFsKQp7CiRwYWNrYWdlSWQgPSBhYnMoJGxpdGVyYWwpOwoKcmV0dXJuICgKKGlzc2V0KCR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSkgJiYgJHRoaXMtPmRlY2lzaW9uTWFwWyRwYWNrYWdlSWRdID4gMCAmJiAkbGl0ZXJhbCA8IDApIHx8Cihpc3NldCgkdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0pICYmICR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSA8IDAgJiYgJGxpdGVyYWwgPiAwKQopOwp9CgpwdWJsaWMgZnVuY3Rpb24gZGVjaWRlZCgkbGl0ZXJhbE9yUGFja2FnZUlkKQp7CnJldHVybiAhZW1wdHkoJHRoaXMtPmRlY2lzaW9uTWFwW2FicygkbGl0ZXJhbE9yUGFja2FnZUlkKV0pOwp9CgpwdWJsaWMgZnVuY3Rpb24gdW5kZWNpZGVkKCRsaXRlcmFsT3JQYWNrYWdlSWQpCnsKcmV0dXJuIGVtcHR5KCR0aGlzLT5kZWNpc2lvbk1hcFthYnMoJGxpdGVyYWxPclBhY2thZ2VJZCldKTsKfQoKcHVibGljIGZ1bmN0aW9uIGRlY2lkZWRJbnN0YWxsKCRsaXRlcmFsT3JQYWNrYWdlSWQpCnsKJHBhY2thZ2VJZCA9IGFicygkbGl0ZXJhbE9yUGFja2FnZUlkKTsKCnJldHVybiBpc3NldCgkdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0pICYmICR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSA+IDA7Cn0KCnB1YmxpYyBmdW5jdGlvbiBkZWNpc2lvbkxldmVsKCRsaXRlcmFsT3JQYWNrYWdlSWQpCnsKJHBhY2thZ2VJZCA9IGFicygkbGl0ZXJhbE9yUGFja2FnZUlkKTsKaWYgKGlzc2V0KCR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSkpIHsKcmV0dXJuIGFicygkdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0pOwp9CgpyZXR1cm4gMDsKfQoKcHVibGljIGZ1bmN0aW9uIGRlY2lzaW9uUnVsZSgkbGl0ZXJhbE9yUGFja2FnZUlkKQp7CiRwYWNrYWdlSWQgPSBhYnMoJGxpdGVyYWxPclBhY2thZ2VJZCk7Cgpmb3JlYWNoICgkdGhpcy0+ZGVjaXNpb25RdWV1ZSBhcyAkaSA9PiAkZGVjaXNpb24pIHsKaWYgKCRwYWNrYWdlSWQgPT09IGFicygkZGVjaXNpb25bc2VsZjo6REVDSVNJT05fTElURVJBTF0pKSB7CnJldHVybiAkZGVjaXNpb25bc2VsZjo6REVDSVNJT05fUkVBU09OXTsKfQp9CgpyZXR1cm4gbnVsbDsKfQoKcHVibGljIGZ1bmN0aW9uIGF0T2Zmc2V0KCRxdWV1ZU9mZnNldCkKewpyZXR1cm4gJHRoaXMtPmRlY2lzaW9uUXVldWVbJHF1ZXVlT2Zmc2V0XTsKfQoKcHVibGljIGZ1bmN0aW9uIHZhbGlkT2Zmc2V0KCRxdWV1ZU9mZnNldCkKewpyZXR1cm4gJHF1ZXVlT2Zmc2V0ID49IDAgJiYgJHF1ZXVlT2Zmc2V0IDwgY291bnQoJHRoaXMtPmRlY2lzaW9uUXVldWUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gbGFzdFJlYXNvbigpCnsKcmV0dXJuICR0aGlzLT5kZWNpc2lvblF1ZXVlW2NvdW50KCR0aGlzLT5kZWNpc2lvblF1ZXVlKSAtIDFdW3NlbGY6OkRFQ0lTSU9OX1JFQVNPTl07Cn0KCnB1YmxpYyBmdW5jdGlvbiBsYXN0TGl0ZXJhbCgpCnsKcmV0dXJuICR0aGlzLT5kZWNpc2lvblF1ZXVlW2NvdW50KCR0aGlzLT5kZWNpc2lvblF1ZXVlKSAtIDFdW3NlbGY6OkRFQ0lTSU9OX0xJVEVSQUxdOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVzZXQoKQp7CndoaWxlICgkZGVjaXNpb24gPSBhcnJheV9wb3AoJHRoaXMtPmRlY2lzaW9uUXVldWUpKSB7CiR0aGlzLT5kZWNpc2lvbk1hcFthYnMoJGRlY2lzaW9uW3NlbGY6OkRFQ0lTSU9OX0xJVEVSQUxdKV0gPSAwOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXNldFRvT2Zmc2V0KCRvZmZzZXQpCnsKd2hpbGUgKGNvdW50KCR0aGlzLT5kZWNpc2lvblF1ZXVlKSA+ICRvZmZzZXQgKyAxKSB7CiRkZWNpc2lvbiA9IGFycmF5X3BvcCgkdGhpcy0+ZGVjaXNpb25RdWV1ZSk7CiR0aGlzLT5kZWNpc2lvbk1hcFthYnMoJGRlY2lzaW9uW3NlbGY6OkRFQ0lTSU9OX0xJVEVSQUxdKV0gPSAwOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXZlcnRMYXN0KCkKewokdGhpcy0+ZGVjaXNpb25NYXBbYWJzKCR0aGlzLT5sYXN0TGl0ZXJhbCgpKV0gPSAwOwphcnJheV9wb3AoJHRoaXMtPmRlY2lzaW9uUXVldWUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gY291bnQoKQp7CnJldHVybiBjb3VudCgkdGhpcy0+ZGVjaXNpb25RdWV1ZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQp7CmVuZCgkdGhpcy0+ZGVjaXNpb25RdWV1ZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkKewpyZXR1cm4gY3VycmVudCgkdGhpcy0+ZGVjaXNpb25RdWV1ZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBrZXkoKQp7CnJldHVybiBrZXkoJHRoaXMtPmRlY2lzaW9uUXVldWUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gbmV4dCgpCnsKcmV0dXJuIHByZXYoJHRoaXMtPmRlY2lzaW9uUXVldWUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQp7CnJldHVybiBmYWxzZSAhPT0gY3VycmVudCgkdGhpcy0+ZGVjaXNpb25RdWV1ZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0VtcHR5KCkKewpyZXR1cm4gY291bnQoJHRoaXMtPmRlY2lzaW9uUXVldWUpID09PSAwOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkRGVjaXNpb24oJGxpdGVyYWwsICRsZXZlbCkKewokcGFja2FnZUlkID0gYWJzKCRsaXRlcmFsKTsKCiRwcmV2aW91c0RlY2lzaW9uID0gaXNzZXQoJHRoaXMtPmRlY2lzaW9uTWFwWyRwYWNrYWdlSWRdKSA/ICR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSA6IG51bGw7CmlmICgkcHJldmlvdXNEZWNpc2lvbiAhPSAwKSB7CiRsaXRlcmFsU3RyaW5nID0gJHRoaXMtPnBvb2wtPmxpdGVyYWxUb1N0cmluZygkbGl0ZXJhbCk7CiRwYWNrYWdlID0gJHRoaXMtPnBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwp0aHJvdyBuZXcgU29sdmVyQnVnRXhjZXB0aW9uKAoiVHJ5aW5nIHRvIGRlY2lkZSAkbGl0ZXJhbFN0cmluZyBvbiBsZXZlbCAkbGV2ZWwsIGV2ZW4gdGhvdWdoICRwYWNrYWdlIHdhcyBwcmV2aW91c2x5IGRlY2lkZWQgYXMgIi4oaW50KSAkcHJldmlvdXNEZWNpc2lvbi4iLiIKKTsKfQoKaWYgKCRsaXRlcmFsID4gMCkgewokdGhpcy0+ZGVjaXNpb25NYXBbJHBhY2thZ2VJZF0gPSAkbGV2ZWw7Cn0gZWxzZSB7CiR0aGlzLT5kZWNpc2lvbk1hcFskcGFja2FnZUlkXSA9IC0kbGV2ZWw7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCgoKCgpjbGFzcyBSdWxlV2F0Y2hOb2RlCnsKcHVibGljICR3YXRjaDE7CnB1YmxpYyAkd2F0Y2gyOwoKcHJvdGVjdGVkICRydWxlOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJ1bGUpCnsKJHRoaXMtPnJ1bGUgPSAkcnVsZTsKCiRsaXRlcmFscyA9ICRydWxlLT5nZXRMaXRlcmFscygpOwoKJHRoaXMtPndhdGNoMSA9IGNvdW50KCRsaXRlcmFscykgPiAwID8gJGxpdGVyYWxzWzBdIDogMDsKJHRoaXMtPndhdGNoMiA9IGNvdW50KCRsaXRlcmFscykgPiAxID8gJGxpdGVyYWxzWzFdIDogMDsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gd2F0Y2gyT25IaWdoZXN0KERlY2lzaW9ucyAkZGVjaXNpb25zKQp7CiRsaXRlcmFscyA9ICR0aGlzLT5ydWxlLT5nZXRMaXRlcmFscygpOwoKCiBpZiAoJGxpdGVyYWxzIDwgMykgewpyZXR1cm47Cn0KCiR3YXRjaExldmVsID0gMDsKCmZvcmVhY2ggKCRsaXRlcmFscyBhcyAkbGl0ZXJhbCkgewokbGV2ZWwgPSAkZGVjaXNpb25zLT5kZWNpc2lvbkxldmVsKCRsaXRlcmFsKTsKCmlmICgkbGV2ZWwgPiAkd2F0Y2hMZXZlbCkgewokdGhpcy0+d2F0Y2gyID0gJGxpdGVyYWw7CiR3YXRjaExldmVsID0gJGxldmVsOwp9Cn0KfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UnVsZSgpCnsKcmV0dXJuICR0aGlzLT5ydWxlOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3RoZXJXYXRjaCgkbGl0ZXJhbCkKewppZiAoJHRoaXMtPndhdGNoMSA9PSAkbGl0ZXJhbCkgewpyZXR1cm4gJHRoaXMtPndhdGNoMjsKfSBlbHNlIHsKcmV0dXJuICR0aGlzLT53YXRjaDE7Cn0KfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG1vdmVXYXRjaCgkZnJvbSwgJHRvKQp7CmlmICgkdGhpcy0+d2F0Y2gxID09ICRmcm9tKSB7CiR0aGlzLT53YXRjaDEgPSAkdG87Cn0gZWxzZSB7CiR0aGlzLT53YXRjaDIgPSAkdG87Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCmNsYXNzIFNvbHZlclByb2JsZW1zRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24Kewpwcm90ZWN0ZWQgJHByb2JsZW1zOwpwcm90ZWN0ZWQgJGluc3RhbGxlZE1hcDsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcHJvYmxlbXMsIGFycmF5ICRpbnN0YWxsZWRNYXApCnsKJHRoaXMtPnByb2JsZW1zID0gJHByb2JsZW1zOwokdGhpcy0+aW5zdGFsbGVkTWFwID0gJGluc3RhbGxlZE1hcDsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJHRoaXMtPmNyZWF0ZU1lc3NhZ2UoKSwgMik7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVNZXNzYWdlKCkKewokdGV4dCA9ICJcbiI7CmZvcmVhY2ggKCR0aGlzLT5wcm9ibGVtcyBhcyAkaSA9PiAkcHJvYmxlbSkgewokdGV4dCAuPSAiICBQcm9ibGVtICIuKCRpKzEpLiRwcm9ibGVtLT5nZXRQcmV0dHlTdHJpbmcoJHRoaXMtPmluc3RhbGxlZE1hcCkuIlxuIjsKfQoKaWYgKHN0cnBvcygkdGV4dCwgJ2NvdWxkIG5vdCBiZSBmb3VuZCcpIHx8IHN0cnBvcygkdGV4dCwgJ25vIG1hdGNoaW5nIHBhY2thZ2UgZm91bmQnKSkgewokdGV4dCAuPSAiXG5Qb3RlbnRpYWwgY2F1c2VzOlxuIC0gQSB0eXBvIGluIHRoZSBwYWNrYWdlIG5hbWVcbiAtIFRoZSBwYWNrYWdlIGlzIG5vdCBhdmFpbGFibGUgaW4gYSBzdGFibGUtZW5vdWdoIHZlcnNpb24gYWNjb3JkaW5nIHRvIHlvdXIgbWluaW11bS1zdGFiaWxpdHkgc2V0dGluZ1xuICAgc2VlIDxodHRwczovL2dyb3Vwcy5nb29nbGUuY29tL2QvdG9waWMvY29tcG9zZXItZGV2L19nM0FTZUlGbHJjL2Rpc2N1c3Npb24+IGZvciBtb3JlIGRldGFpbHMuXG5cblJlYWQgPGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcvZG9jL2FydGljbGVzL3Ryb3VibGVzaG9vdGluZy5tZD4gZm9yIGZ1cnRoZXIgY29tbW9uIHByb2JsZW1zLiI7Cn0KCnJldHVybiAkdGV4dDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFByb2JsZW1zKCkKewpyZXR1cm4gJHRoaXMtPnByb2JsZW1zOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvbjsKCgoKCmNsYXNzIFRyYW5zYWN0aW9uCnsKcHJvdGVjdGVkICRwb2xpY3k7CnByb3RlY3RlZCAkcG9vbDsKcHJvdGVjdGVkICRpbnN0YWxsZWRNYXA7CnByb3RlY3RlZCAkZGVjaXNpb25zOwpwcm90ZWN0ZWQgJHRyYW5zYWN0aW9uOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwb2xpY3ksICRwb29sLCAkaW5zdGFsbGVkTWFwLCAkZGVjaXNpb25zKQp7CiR0aGlzLT5wb2xpY3kgPSAkcG9saWN5OwokdGhpcy0+cG9vbCA9ICRwb29sOwokdGhpcy0+aW5zdGFsbGVkTWFwID0gJGluc3RhbGxlZE1hcDsKJHRoaXMtPmRlY2lzaW9ucyA9ICRkZWNpc2lvbnM7CiR0aGlzLT50cmFuc2FjdGlvbiA9IGFycmF5KCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRPcGVyYXRpb25zKCkKewokaW5zdGFsbE1lYW5zVXBkYXRlTWFwID0gJHRoaXMtPmZpbmRVcGRhdGVzKCk7CgokdXBkYXRlTWFwID0gYXJyYXkoKTsKJGluc3RhbGxNYXAgPSBhcnJheSgpOwokdW5pbnN0YWxsTWFwID0gYXJyYXkoKTsKCmZvcmVhY2ggKCR0aGlzLT5kZWNpc2lvbnMgYXMgJGkgPT4gJGRlY2lzaW9uKSB7CiRsaXRlcmFsID0gJGRlY2lzaW9uW0RlY2lzaW9uczo6REVDSVNJT05fTElURVJBTF07CiRyZWFzb24gPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9SRUFTT05dOwoKJHBhY2thZ2UgPSAkdGhpcy0+cG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCk7CgoKIGlmICgoJGxpdGVyYWwgPiAwKSA9PSAoaXNzZXQoJHRoaXMtPmluc3RhbGxlZE1hcFskcGFja2FnZS0+Z2V0SWQoKV0pKSkgewpjb250aW51ZTsKfQoKaWYgKCRsaXRlcmFsID4gMCkgewppZiAoaXNzZXQoJGluc3RhbGxNZWFuc1VwZGF0ZU1hcFthYnMoJGxpdGVyYWwpXSkgJiYgISRwYWNrYWdlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSB7Cgokc291cmNlID0gJGluc3RhbGxNZWFuc1VwZGF0ZU1hcFthYnMoJGxpdGVyYWwpXTsKCiR1cGRhdGVNYXBbJHBhY2thZ2UtPmdldElkKCldID0gYXJyYXkoCidwYWNrYWdlJyA9PiAkcGFja2FnZSwKJ3NvdXJjZScgPT4gJHNvdXJjZSwKJ3JlYXNvbicgPT4gJHJlYXNvbiwKKTsKCgogdW5zZXQoJGluc3RhbGxNZWFuc1VwZGF0ZU1hcFthYnMoJGxpdGVyYWwpXSk7CiRpZ25vcmVSZW1vdmVbJHNvdXJjZS0+Z2V0SWQoKV0gPSB0cnVlOwp9IGVsc2UgewokaW5zdGFsbE1hcFskcGFja2FnZS0+Z2V0SWQoKV0gPSBhcnJheSgKJ3BhY2thZ2UnID0+ICRwYWNrYWdlLAoncmVhc29uJyA9PiAkcmVhc29uLAopOwp9Cn0KfQoKZm9yZWFjaCAoJHRoaXMtPmRlY2lzaW9ucyBhcyAkaSA9PiAkZGVjaXNpb24pIHsKJGxpdGVyYWwgPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9MSVRFUkFMXTsKJHJlYXNvbiA9ICRkZWNpc2lvbltEZWNpc2lvbnM6OkRFQ0lTSU9OX1JFQVNPTl07CiRwYWNrYWdlID0gJHRoaXMtPnBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwoKaWYgKCRsaXRlcmFsIDw9IDAgJiYKaXNzZXQoJHRoaXMtPmluc3RhbGxlZE1hcFskcGFja2FnZS0+Z2V0SWQoKV0pICYmCiFpc3NldCgkaWdub3JlUmVtb3ZlWyRwYWNrYWdlLT5nZXRJZCgpXSkpIHsKJHVuaW5zdGFsbE1hcFskcGFja2FnZS0+Z2V0SWQoKV0gPSBhcnJheSgKJ3BhY2thZ2UnID0+ICRwYWNrYWdlLAoncmVhc29uJyA9PiAkcmVhc29uLAopOwoKfQp9CgokdGhpcy0+dHJhbnNhY3Rpb25Gcm9tTWFwcygkaW5zdGFsbE1hcCwgJHVwZGF0ZU1hcCwgJHVuaW5zdGFsbE1hcCk7CgpyZXR1cm4gJHRoaXMtPnRyYW5zYWN0aW9uOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gdHJhbnNhY3Rpb25Gcm9tTWFwcygkaW5zdGFsbE1hcCwgJHVwZGF0ZU1hcCwgJHVuaW5zdGFsbE1hcCkKewokcXVldWUgPSBhcnJheV9tYXAoZnVuY3Rpb24gKCRvcGVyYXRpb24pIHsKcmV0dXJuICRvcGVyYXRpb25bJ3BhY2thZ2UnXTsKfSwKJHRoaXMtPmZpbmRSb290UGFja2FnZXMoJGluc3RhbGxNYXAsICR1cGRhdGVNYXApCik7CgokdmlzaXRlZCA9IGFycmF5KCk7Cgp3aGlsZSAoIWVtcHR5KCRxdWV1ZSkpIHsKJHBhY2thZ2UgPSBhcnJheV9wb3AoJHF1ZXVlKTsKJHBhY2thZ2VJZCA9ICRwYWNrYWdlLT5nZXRJZCgpOwoKaWYgKCFpc3NldCgkdmlzaXRlZFskcGFja2FnZUlkXSkpIHsKYXJyYXlfcHVzaCgkcXVldWUsICRwYWNrYWdlKTsKCmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewphcnJheV9wdXNoKCRxdWV1ZSwgJHBhY2thZ2UtPmdldEFsaWFzT2YoKSk7Cn0gZWxzZSB7CmZvcmVhY2ggKCRwYWNrYWdlLT5nZXRSZXF1aXJlcygpIGFzICRsaW5rKSB7CiRwb3NzaWJsZVJlcXVpcmVzID0gJHRoaXMtPnBvb2wtPndoYXRQcm92aWRlcygkbGluay0+Z2V0VGFyZ2V0KCksICRsaW5rLT5nZXRDb25zdHJhaW50KCkpOwoKZm9yZWFjaCAoJHBvc3NpYmxlUmVxdWlyZXMgYXMgJHJlcXVpcmUpIHsKYXJyYXlfcHVzaCgkcXVldWUsICRyZXF1aXJlKTsKfQp9Cn0KCiR2aXNpdGVkWyRwYWNrYWdlLT5nZXRJZCgpXSA9IHRydWU7Cn0gZWxzZSB7CmlmIChpc3NldCgkaW5zdGFsbE1hcFskcGFja2FnZUlkXSkpIHsKJHRoaXMtPmluc3RhbGwoCiRpbnN0YWxsTWFwWyRwYWNrYWdlSWRdWydwYWNrYWdlJ10sCiRpbnN0YWxsTWFwWyRwYWNrYWdlSWRdWydyZWFzb24nXQopOwp1bnNldCgkaW5zdGFsbE1hcFskcGFja2FnZUlkXSk7Cn0KaWYgKGlzc2V0KCR1cGRhdGVNYXBbJHBhY2thZ2VJZF0pKSB7CiR0aGlzLT51cGRhdGUoCiR1cGRhdGVNYXBbJHBhY2thZ2VJZF1bJ3NvdXJjZSddLAokdXBkYXRlTWFwWyRwYWNrYWdlSWRdWydwYWNrYWdlJ10sCiR1cGRhdGVNYXBbJHBhY2thZ2VJZF1bJ3JlYXNvbiddCik7CnVuc2V0KCR1cGRhdGVNYXBbJHBhY2thZ2VJZF0pOwp9Cn0KfQoKZm9yZWFjaCAoJHVuaW5zdGFsbE1hcCBhcyAkdW5pbnN0YWxsKSB7CiR0aGlzLT51bmluc3RhbGwoJHVuaW5zdGFsbFsncGFja2FnZSddLCAkdW5pbnN0YWxsWydyZWFzb24nXSk7Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbmRSb290UGFja2FnZXMoJGluc3RhbGxNYXAsICR1cGRhdGVNYXApCnsKJHBhY2thZ2VzID0gJGluc3RhbGxNYXAgKyAkdXBkYXRlTWFwOwokcm9vdHMgPSAkcGFja2FnZXM7Cgpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2VJZCA9PiAkb3BlcmF0aW9uKSB7CiRwYWNrYWdlID0gJG9wZXJhdGlvblsncGFja2FnZSddOwoKaWYgKCFpc3NldCgkcm9vdHNbJHBhY2thZ2VJZF0pKSB7CmNvbnRpbnVlOwp9Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSBhcyAkbGluaykgewokcG9zc2libGVSZXF1aXJlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGxpbmstPmdldFRhcmdldCgpLCAkbGluay0+Z2V0Q29uc3RyYWludCgpKTsKCmZvcmVhY2ggKCRwb3NzaWJsZVJlcXVpcmVzIGFzICRyZXF1aXJlKSB7CnVuc2V0KCRyb290c1skcmVxdWlyZS0+Z2V0SWQoKV0pOwp9Cn0KfQoKcmV0dXJuICRyb290czsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbmRVcGRhdGVzKCkKewokaW5zdGFsbE1lYW5zVXBkYXRlTWFwID0gYXJyYXkoKTsKCmZvcmVhY2ggKCR0aGlzLT5kZWNpc2lvbnMgYXMgJGkgPT4gJGRlY2lzaW9uKSB7CiRsaXRlcmFsID0gJGRlY2lzaW9uW0RlY2lzaW9uczo6REVDSVNJT05fTElURVJBTF07CiRwYWNrYWdlID0gJHRoaXMtPnBvb2wtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwoKaWYgKCRwYWNrYWdlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSB7CmNvbnRpbnVlOwp9CgoKIGlmICgkbGl0ZXJhbCA8PSAwICYmIGlzc2V0KCR0aGlzLT5pbnN0YWxsZWRNYXBbJHBhY2thZ2UtPmdldElkKCldKSkgewokdXBkYXRlcyA9ICR0aGlzLT5wb2xpY3ktPmZpbmRVcGRhdGVQYWNrYWdlcygkdGhpcy0+cG9vbCwgJHRoaXMtPmluc3RhbGxlZE1hcCwgJHBhY2thZ2UpOwoKJGxpdGVyYWxzID0gYXJyYXkoJHBhY2thZ2UtPmdldElkKCkpOwoKZm9yZWFjaCAoJHVwZGF0ZXMgYXMgJHVwZGF0ZSkgewokbGl0ZXJhbHNbXSA9ICR1cGRhdGUtPmdldElkKCk7Cn0KCmZvcmVhY2ggKCRsaXRlcmFscyBhcyAkdXBkYXRlTGl0ZXJhbCkgewppZiAoJHVwZGF0ZUxpdGVyYWwgIT09ICRsaXRlcmFsKSB7CiRpbnN0YWxsTWVhbnNVcGRhdGVNYXBbYWJzKCR1cGRhdGVMaXRlcmFsKV0gPSAkcGFja2FnZTsKfQp9Cn0KfQoKcmV0dXJuICRpbnN0YWxsTWVhbnNVcGRhdGVNYXA7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBpbnN0YWxsKCRwYWNrYWdlLCAkcmVhc29uKQp7CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewpyZXR1cm4gJHRoaXMtPm1hcmtBbGlhc0luc3RhbGxlZCgkcGFja2FnZSwgJHJlYXNvbik7Cn0KCiR0aGlzLT50cmFuc2FjdGlvbltdID0gbmV3IE9wZXJhdGlvblxJbnN0YWxsT3BlcmF0aW9uKCRwYWNrYWdlLCAkcmVhc29uKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHVwZGF0ZSgkZnJvbSwgJHRvLCAkcmVhc29uKQp7CiR0aGlzLT50cmFuc2FjdGlvbltdID0gbmV3IE9wZXJhdGlvblxVcGRhdGVPcGVyYXRpb24oJGZyb20sICR0bywgJHJlYXNvbik7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB1bmluc3RhbGwoJHBhY2thZ2UsICRyZWFzb24pCnsKaWYgKCRwYWNrYWdlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSB7CnJldHVybiAkdGhpcy0+bWFya0FsaWFzVW5pbnN0YWxsZWQoJHBhY2thZ2UsICRyZWFzb24pOwp9CgokdGhpcy0+dHJhbnNhY3Rpb25bXSA9IG5ldyBPcGVyYXRpb25cVW5pbnN0YWxsT3BlcmF0aW9uKCRwYWNrYWdlLCAkcmVhc29uKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIG1hcmtBbGlhc0luc3RhbGxlZCgkcGFja2FnZSwgJHJlYXNvbikKewokdGhpcy0+dHJhbnNhY3Rpb25bXSA9IG5ldyBPcGVyYXRpb25cTWFya0FsaWFzSW5zdGFsbGVkT3BlcmF0aW9uKCRwYWNrYWdlLCAkcmVhc29uKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIG1hcmtBbGlhc1VuaW5zdGFsbGVkKCRwYWNrYWdlLCAkcmVhc29uKQp7CiR0aGlzLT50cmFuc2FjdGlvbltdID0gbmV3IE9wZXJhdGlvblxNYXJrQWxpYXNVbmluc3RhbGxlZE9wZXJhdGlvbigkcGFja2FnZSwgJHJlYXNvbik7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKY2xhc3MgVW5pbnN0YWxsT3BlcmF0aW9uIGV4dGVuZHMgU29sdmVyT3BlcmF0aW9uCnsKcHJvdGVjdGVkICRwYWNrYWdlOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRyZWFzb24gPSBudWxsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHJlYXNvbik7CgokdGhpcy0+cGFja2FnZSA9ICRwYWNrYWdlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQYWNrYWdlKCkKewpyZXR1cm4gJHRoaXMtPnBhY2thZ2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEpvYlR5cGUoKQp7CnJldHVybiAndW5pbnN0YWxsJzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CnJldHVybiAnVW5pbnN0YWxsaW5nICcuJHRoaXMtPnBhY2thZ2UtPmdldFByZXR0eU5hbWUoKS4nICgnLiR0aGlzLT5mb3JtYXRWZXJzaW9uKCR0aGlzLT5wYWNrYWdlKS4nKSc7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKY2xhc3MgVXBkYXRlT3BlcmF0aW9uIGV4dGVuZHMgU29sdmVyT3BlcmF0aW9uCnsKcHJvdGVjdGVkICRpbml0aWFsUGFja2FnZTsKcHJvdGVjdGVkICR0YXJnZXRQYWNrYWdlOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChQYWNrYWdlSW50ZXJmYWNlICRpbml0aWFsLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQsICRyZWFzb24gPSBudWxsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHJlYXNvbik7CgokdGhpcy0+aW5pdGlhbFBhY2thZ2UgPSAkaW5pdGlhbDsKJHRoaXMtPnRhcmdldFBhY2thZ2UgPSAkdGFyZ2V0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbml0aWFsUGFja2FnZSgpCnsKcmV0dXJuICR0aGlzLT5pbml0aWFsUGFja2FnZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VGFyZ2V0UGFja2FnZSgpCnsKcmV0dXJuICR0aGlzLT50YXJnZXRQYWNrYWdlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRKb2JUeXBlKCkKewpyZXR1cm4gJ3VwZGF0ZSc7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewpyZXR1cm4gJ1VwZGF0aW5nICcuJHRoaXMtPmluaXRpYWxQYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkuJyAoJy4kdGhpcy0+Zm9ybWF0VmVyc2lvbigkdGhpcy0+aW5pdGlhbFBhY2thZ2UpLicpIHRvICcuCiR0aGlzLT50YXJnZXRQYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkuICcgKCcuJHRoaXMtPmZvcm1hdFZlcnNpb24oJHRoaXMtPnRhcmdldFBhY2thZ2UpLicpJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb247Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxBbGlhc1BhY2thZ2U7CgoKCgoKCmNsYXNzIE1hcmtBbGlhc0luc3RhbGxlZE9wZXJhdGlvbiBleHRlbmRzIFNvbHZlck9wZXJhdGlvbgp7CnByb3RlY3RlZCAkcGFja2FnZTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBbGlhc1BhY2thZ2UgJHBhY2thZ2UsICRyZWFzb24gPSBudWxsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHJlYXNvbik7CgokdGhpcy0+cGFja2FnZSA9ICRwYWNrYWdlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQYWNrYWdlKCkKewpyZXR1cm4gJHRoaXMtPnBhY2thZ2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEpvYlR5cGUoKQp7CnJldHVybiAnbWFya0FsaWFzSW5zdGFsbGVkJzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CnJldHVybiAnTWFya2luZyAnLiR0aGlzLT5wYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkuJyAoJy4kdGhpcy0+Zm9ybWF0VmVyc2lvbigkdGhpcy0+cGFja2FnZSkuJykgYXMgaW5zdGFsbGVkLCBhbGlhcyBvZiAnLiR0aGlzLT5wYWNrYWdlLT5nZXRBbGlhc09mKCktPmdldFByZXR0eU5hbWUoKS4nICgnLiR0aGlzLT5mb3JtYXRWZXJzaW9uKCR0aGlzLT5wYWNrYWdlLT5nZXRBbGlhc09mKCkpLicpJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb247Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBJbnN0YWxsT3BlcmF0aW9uIGV4dGVuZHMgU29sdmVyT3BlcmF0aW9uCnsKcHJvdGVjdGVkICRwYWNrYWdlOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRyZWFzb24gPSBudWxsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJHJlYXNvbik7CgokdGhpcy0+cGFja2FnZSA9ICRwYWNrYWdlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQYWNrYWdlKCkKewpyZXR1cm4gJHRoaXMtPnBhY2thZ2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEpvYlR5cGUoKQp7CnJldHVybiAnaW5zdGFsbCc7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewpyZXR1cm4gJ0luc3RhbGxpbmcgJy4kdGhpcy0+cGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpLicgKCcuJHRoaXMtPmZvcm1hdFZlcnNpb24oJHRoaXMtPnBhY2thZ2UpLicpJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb247Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxWZXJzaW9uXFZlcnNpb25QYXJzZXI7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CgoKCgoKCmFic3RyYWN0IGNsYXNzIFNvbHZlck9wZXJhdGlvbiBpbXBsZW1lbnRzIE9wZXJhdGlvbkludGVyZmFjZQp7CnByb3RlY3RlZCAkcmVhc29uOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJlYXNvbiA9IG51bGwpCnsKJHRoaXMtPnJlYXNvbiA9ICRyZWFzb247Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvbigpCnsKcmV0dXJuICR0aGlzLT5yZWFzb247Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBmb3JtYXRWZXJzaW9uKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKcmV0dXJuIFZlcnNpb25QYXJzZXI6OmZvcm1hdFZlcnNpb24oJHBhY2thZ2UpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvbjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKCgoKCgoKY2xhc3MgTWFya0FsaWFzVW5pbnN0YWxsZWRPcGVyYXRpb24gZXh0ZW5kcyBTb2x2ZXJPcGVyYXRpb24Kewpwcm90ZWN0ZWQgJHBhY2thZ2U7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQWxpYXNQYWNrYWdlICRwYWNrYWdlLCAkcmVhc29uID0gbnVsbCkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRyZWFzb24pOwoKJHRoaXMtPnBhY2thZ2UgPSAkcGFja2FnZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGFja2FnZSgpCnsKcmV0dXJuICR0aGlzLT5wYWNrYWdlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRKb2JUeXBlKCkKewpyZXR1cm4gJ21hcmtBbGlhc1VuaW5zdGFsbGVkJzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CnJldHVybiAnTWFya2luZyAnLiR0aGlzLT5wYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkuJyAoJy4kdGhpcy0+Zm9ybWF0VmVyc2lvbigkdGhpcy0+cGFja2FnZSkuJykgYXMgdW5pbnN0YWxsZWQsIGFsaWFzIG9mICcuJHRoaXMtPnBhY2thZ2UtPmdldEFsaWFzT2YoKS0+Z2V0UHJldHR5TmFtZSgpLicgKCcuJHRoaXMtPmZvcm1hdFZlcnNpb24oJHRoaXMtPnBhY2thZ2UtPmdldEFsaWFzT2YoKSkuJyknOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvbjsKCgoKCgoKaW50ZXJmYWNlIE9wZXJhdGlvbkludGVyZmFjZQp7CgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEpvYlR5cGUoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvbigpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXEJhc2VQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxBbGlhc1BhY2thZ2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGluazsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnRcTGlua0NvbnN0cmFpbnRJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXExpbmtDb25zdHJhaW50XFZlcnNpb25Db25zdHJhaW50Owp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxFbXB0eUNvbnN0cmFpbnQ7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2l0ZVJlcG9zaXRvcnk7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2VyUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcU3RyZWFtYWJsZVJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFBsYXRmb3JtUmVwb3NpdG9yeTsKCgoKCgoKCmNsYXNzIFBvb2wKewpjb25zdCBNQVRDSF9OQU1FID0gLTE7CmNvbnN0IE1BVENIX05PTkUgPSAwOwpjb25zdCBNQVRDSCA9IDE7CmNvbnN0IE1BVENIX1BST1ZJREUgPSAyOwpjb25zdCBNQVRDSF9SRVBMQUNFID0gMzsKY29uc3QgTUFUQ0hfRklMVEVSRUQgPSA0OwoKcHJvdGVjdGVkICRyZXBvc2l0b3JpZXMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHByb3ZpZGVyUmVwb3MgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHBhY2thZ2VzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRwYWNrYWdlQnlOYW1lID0gYXJyYXkoKTsKcHJvdGVjdGVkICRhY2NlcHRhYmxlU3RhYmlsaXRpZXM7CnByb3RlY3RlZCAkc3RhYmlsaXR5RmxhZ3M7CnByb3RlY3RlZCAkdmVyc2lvblBhcnNlcjsKcHJvdGVjdGVkICRwcm92aWRlckNhY2hlID0gYXJyYXkoKTsKcHJvdGVjdGVkICRmaWx0ZXJSZXF1aXJlczsKcHJvdGVjdGVkICR3aGl0ZWxpc3QgPSBudWxsOwpwcm90ZWN0ZWQgJGlkID0gMTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWluaW11bVN0YWJpbGl0eSA9ICdzdGFibGUnLCBhcnJheSAkc3RhYmlsaXR5RmxhZ3MgPSBhcnJheSgpLCBhcnJheSAkZmlsdGVyUmVxdWlyZXMgPSBhcnJheSgpKQp7CiRzdGFiaWxpdGllcyA9IEJhc2VQYWNrYWdlOjokc3RhYmlsaXRpZXM7CiR0aGlzLT52ZXJzaW9uUGFyc2VyID0gbmV3IFZlcnNpb25QYXJzZXI7CiR0aGlzLT5hY2NlcHRhYmxlU3RhYmlsaXRpZXMgPSBhcnJheSgpOwpmb3JlYWNoIChCYXNlUGFja2FnZTo6JHN0YWJpbGl0aWVzIGFzICRzdGFiaWxpdHkgPT4gJHZhbHVlKSB7CmlmICgkdmFsdWUgPD0gQmFzZVBhY2thZ2U6OiRzdGFiaWxpdGllc1skbWluaW11bVN0YWJpbGl0eV0pIHsKJHRoaXMtPmFjY2VwdGFibGVTdGFiaWxpdGllc1skc3RhYmlsaXR5XSA9ICR2YWx1ZTsKfQp9CiR0aGlzLT5zdGFiaWxpdHlGbGFncyA9ICRzdGFiaWxpdHlGbGFnczsKJHRoaXMtPmZpbHRlclJlcXVpcmVzID0gJGZpbHRlclJlcXVpcmVzOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0V2hpdGVsaXN0KCR3aGl0ZWxpc3QpCnsKJHRoaXMtPndoaXRlbGlzdCA9ICR3aGl0ZWxpc3Q7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRSZXBvc2l0b3J5KFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sICRyb290QWxpYXNlcyA9IGFycmF5KCkpCnsKaWYgKCRyZXBvIGluc3RhbmNlb2YgQ29tcG9zaXRlUmVwb3NpdG9yeSkgewokcmVwb3MgPSAkcmVwby0+Z2V0UmVwb3NpdG9yaWVzKCk7Cn0gZWxzZSB7CiRyZXBvcyA9IGFycmF5KCRyZXBvKTsKfQoKZm9yZWFjaCAoJHJlcG9zIGFzICRyZXBvKSB7CiR0aGlzLT5yZXBvc2l0b3JpZXNbXSA9ICRyZXBvOwoKJGV4ZW1wdCA9ICRyZXBvIGluc3RhbmNlb2YgUGxhdGZvcm1SZXBvc2l0b3J5IHx8ICRyZXBvIGluc3RhbmNlb2YgSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKCmlmICgkcmVwbyBpbnN0YW5jZW9mIENvbXBvc2VyUmVwb3NpdG9yeSAmJiAkcmVwby0+aGFzUHJvdmlkZXJzKCkpIHsKJHRoaXMtPnByb3ZpZGVyUmVwb3NbXSA9ICRyZXBvOwokcmVwby0+c2V0Um9vdEFsaWFzZXMoJHJvb3RBbGlhc2VzKTsKJHJlcG8tPnJlc2V0UGFja2FnZUlkcygpOwp9IGVsc2VpZiAoJHJlcG8gaW5zdGFuY2VvZiBTdHJlYW1hYmxlUmVwb3NpdG9yeUludGVyZmFjZSkgewpmb3JlYWNoICgkcmVwby0+Z2V0TWluaW1hbFBhY2thZ2VzKCkgYXMgJHBhY2thZ2UpIHsKJG5hbWUgPSAkcGFja2FnZVsnbmFtZSddOwokdmVyc2lvbiA9ICRwYWNrYWdlWyd2ZXJzaW9uJ107CiRzdGFiaWxpdHkgPSBWZXJzaW9uUGFyc2VyOjpwYXJzZVN0YWJpbGl0eSgkdmVyc2lvbik7CgoKICRuYW1lcyA9IGFycmF5KAokbmFtZSA9PiB0cnVlLAopOwppZiAoaXNzZXQoJHBhY2thZ2VbJ3Byb3ZpZGUnXSkpIHsKZm9yZWFjaCAoJHBhY2thZ2VbJ3Byb3ZpZGUnXSBhcyAkdGFyZ2V0ID0+ICRjb25zdHJhaW50KSB7CiRuYW1lc1skdGFyZ2V0XSA9IHRydWU7Cn0KfQppZiAoaXNzZXQoJHBhY2thZ2VbJ3JlcGxhY2UnXSkpIHsKZm9yZWFjaCAoJHBhY2thZ2VbJ3JlcGxhY2UnXSBhcyAkdGFyZ2V0ID0+ICRjb25zdHJhaW50KSB7CiRuYW1lc1skdGFyZ2V0XSA9IHRydWU7Cn0KfQokbmFtZXMgPSBhcnJheV9rZXlzKCRuYW1lcyk7CgppZiAoJGV4ZW1wdCB8fCAkdGhpcy0+aXNQYWNrYWdlQWNjZXB0YWJsZSgkbmFtZXMsICRzdGFiaWxpdHkpKSB7CiRwYWNrYWdlWydpZCddID0gJHRoaXMtPmlkKys7CiRwYWNrYWdlWydzdGFiaWxpdHknXSA9ICRzdGFiaWxpdHk7CiR0aGlzLT5wYWNrYWdlc1tdID0gJHBhY2thZ2U7Cgpmb3JlYWNoICgkbmFtZXMgYXMgJHByb3ZpZGVkKSB7CiR0aGlzLT5wYWNrYWdlQnlOYW1lWyRwcm92aWRlZF1bJHBhY2thZ2VbJ2lkJ11dID0gJHRoaXMtPnBhY2thZ2VzWyR0aGlzLT5pZCAtIDJdOwp9CgoKIHVuc2V0KCRyb290QWxpYXNEYXRhKTsKaWYgKGlzc2V0KCRyb290QWxpYXNlc1skbmFtZV1bJHZlcnNpb25dKSkgewokcm9vdEFsaWFzRGF0YSA9ICRyb290QWxpYXNlc1skbmFtZV1bJHZlcnNpb25dOwp9IGVsc2VpZiAoaXNzZXQoJHBhY2thZ2VbJ2FsaWFzX25vcm1hbGl6ZWQnXSkgJiYgaXNzZXQoJHJvb3RBbGlhc2VzWyRuYW1lXVskcGFja2FnZVsnYWxpYXNfbm9ybWFsaXplZCddXSkpIHsKJHJvb3RBbGlhc0RhdGEgPSAkcm9vdEFsaWFzZXNbJG5hbWVdWyRwYWNrYWdlWydhbGlhc19ub3JtYWxpemVkJ11dOwp9CgppZiAoaXNzZXQoJHJvb3RBbGlhc0RhdGEpKSB7CiRhbGlhcyA9ICRwYWNrYWdlOwp1bnNldCgkYWxpYXNbJ3JhdyddKTsKJGFsaWFzWyd2ZXJzaW9uJ10gPSAkcm9vdEFsaWFzRGF0YVsnYWxpYXNfbm9ybWFsaXplZCddOwokYWxpYXNbJ2FsaWFzJ10gPSAkcm9vdEFsaWFzRGF0YVsnYWxpYXMnXTsKJGFsaWFzWydhbGlhc19vZiddID0gJHBhY2thZ2VbJ2lkJ107CiRhbGlhc1snaWQnXSA9ICR0aGlzLT5pZCsrOwokYWxpYXNbJ3Jvb3RfYWxpYXMnXSA9IHRydWU7CiR0aGlzLT5wYWNrYWdlc1tdID0gJGFsaWFzOwoKZm9yZWFjaCAoJG5hbWVzIGFzICRwcm92aWRlZCkgewokdGhpcy0+cGFja2FnZUJ5TmFtZVskcHJvdmlkZWRdWyRhbGlhc1snaWQnXV0gPSAkdGhpcy0+cGFja2FnZXNbJHRoaXMtPmlkIC0gMl07Cn0KfQoKCiBpZiAoaXNzZXQoJHBhY2thZ2VbJ2FsaWFzJ10pKSB7CiRhbGlhcyA9ICRwYWNrYWdlOwp1bnNldCgkYWxpYXNbJ3JhdyddKTsKJGFsaWFzWyd2ZXJzaW9uJ10gPSAkcGFja2FnZVsnYWxpYXNfbm9ybWFsaXplZCddOwokYWxpYXNbJ2FsaWFzJ10gPSAkcGFja2FnZVsnYWxpYXMnXTsKJGFsaWFzWydhbGlhc19vZiddID0gJHBhY2thZ2VbJ2lkJ107CiRhbGlhc1snaWQnXSA9ICR0aGlzLT5pZCsrOwokdGhpcy0+cGFja2FnZXNbXSA9ICRhbGlhczsKCmZvcmVhY2ggKCRuYW1lcyBhcyAkcHJvdmlkZWQpIHsKJHRoaXMtPnBhY2thZ2VCeU5hbWVbJHByb3ZpZGVkXVskYWxpYXNbJ2lkJ11dID0gJHRoaXMtPnBhY2thZ2VzWyR0aGlzLT5pZCAtIDJdOwp9Cn0KfQp9Cn0gZWxzZSB7CmZvcmVhY2ggKCRyZXBvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CiRuYW1lcyA9ICRwYWNrYWdlLT5nZXROYW1lcygpOwokc3RhYmlsaXR5ID0gJHBhY2thZ2UtPmdldFN0YWJpbGl0eSgpOwppZiAoJGV4ZW1wdCB8fCAkdGhpcy0+aXNQYWNrYWdlQWNjZXB0YWJsZSgkbmFtZXMsICRzdGFiaWxpdHkpKSB7CiRwYWNrYWdlLT5zZXRJZCgkdGhpcy0+aWQrKyk7CiR0aGlzLT5wYWNrYWdlc1tdID0gJHBhY2thZ2U7Cgpmb3JlYWNoICgkbmFtZXMgYXMgJHByb3ZpZGVkKSB7CiR0aGlzLT5wYWNrYWdlQnlOYW1lWyRwcm92aWRlZF1bXSA9ICRwYWNrYWdlOwp9CgoKICRuYW1lID0gJHBhY2thZ2UtPmdldE5hbWUoKTsKaWYgKGlzc2V0KCRyb290QWxpYXNlc1skbmFtZV1bJHBhY2thZ2UtPmdldFZlcnNpb24oKV0pKSB7CiRhbGlhcyA9ICRyb290QWxpYXNlc1skbmFtZV1bJHBhY2thZ2UtPmdldFZlcnNpb24oKV07CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewokcGFja2FnZSA9ICRwYWNrYWdlLT5nZXRBbGlhc09mKCk7Cn0KJGFsaWFzUGFja2FnZSA9IG5ldyBBbGlhc1BhY2thZ2UoJHBhY2thZ2UsICRhbGlhc1snYWxpYXNfbm9ybWFsaXplZCddLCAkYWxpYXNbJ2FsaWFzJ10pOwokYWxpYXNQYWNrYWdlLT5zZXRSb290UGFja2FnZUFsaWFzKHRydWUpOwokYWxpYXNQYWNrYWdlLT5zZXRJZCgkdGhpcy0+aWQrKyk7CgokcGFja2FnZS0+Z2V0UmVwb3NpdG9yeSgpLT5hZGRQYWNrYWdlKCRhbGlhc1BhY2thZ2UpOwokdGhpcy0+cGFja2FnZXNbXSA9ICRhbGlhc1BhY2thZ2U7Cgpmb3JlYWNoICgkYWxpYXNQYWNrYWdlLT5nZXROYW1lcygpIGFzICRuYW1lKSB7CiR0aGlzLT5wYWNrYWdlQnlOYW1lWyRuYW1lXVtdID0gJGFsaWFzUGFja2FnZTsKfQp9Cn0KfQp9Cn0KfQoKcHVibGljIGZ1bmN0aW9uIGdldFByaW9yaXR5KFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8pCnsKJHByaW9yaXR5ID0gYXJyYXlfc2VhcmNoKCRyZXBvLCAkdGhpcy0+cmVwb3NpdG9yaWVzLCB0cnVlKTsKCmlmIChmYWxzZSA9PT0gJHByaW9yaXR5KSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiQ291bGQgbm90IGRldGVybWluZSByZXBvc2l0b3J5IHByaW9yaXR5LiBUaGUgcmVwb3NpdG9yeSB3YXMgbm90IHJlZ2lzdGVyZWQgaW4gdGhlIHBvb2wuIik7Cn0KCnJldHVybiAtJHByaW9yaXR5Owp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcGFja2FnZUJ5SWQoJGlkKQp7CnJldHVybiAkdGhpcy0+ZW5zdXJlUGFja2FnZUlzTG9hZGVkKCR0aGlzLT5wYWNrYWdlc1skaWQgLSAxXSk7Cn0KCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gd2hhdFByb3ZpZGVzKCRuYW1lLCBMaW5rQ29uc3RyYWludEludGVyZmFjZSAkY29uc3RyYWludCA9IG51bGwsICRtdXN0TWF0Y2hOYW1lID0gZmFsc2UpCnsKJGtleSA9ICgoaW50KSAkbXVzdE1hdGNoTmFtZSkuJGNvbnN0cmFpbnQ7CmlmIChpc3NldCgkdGhpcy0+cHJvdmlkZXJDYWNoZVskbmFtZV1bJGtleV0pKSB7CnJldHVybiAkdGhpcy0+cHJvdmlkZXJDYWNoZVskbmFtZV1bJGtleV07Cn0KCnJldHVybiAkdGhpcy0+cHJvdmlkZXJDYWNoZVskbmFtZV1bJGtleV0gPSAkdGhpcy0+Y29tcHV0ZVdoYXRQcm92aWRlcygkbmFtZSwgJGNvbnN0cmFpbnQsICRtdXN0TWF0Y2hOYW1lKTsKfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBjb21wdXRlV2hhdFByb3ZpZGVzKCRuYW1lLCAkY29uc3RyYWludCwgJG11c3RNYXRjaE5hbWUgPSBmYWxzZSkKewokY2FuZGlkYXRlcyA9IGFycmF5KCk7Cgpmb3JlYWNoICgkdGhpcy0+cHJvdmlkZXJSZXBvcyBhcyAkcmVwbykgewpmb3JlYWNoICgkcmVwby0+d2hhdFByb3ZpZGVzKCR0aGlzLCAkbmFtZSkgYXMgJGNhbmRpZGF0ZSkgewokY2FuZGlkYXRlc1tdID0gJGNhbmRpZGF0ZTsKaWYgKCRjYW5kaWRhdGUtPmdldElkKCkgPCAxKSB7CiRjYW5kaWRhdGUtPnNldElkKCR0aGlzLT5pZCsrKTsKJHRoaXMtPnBhY2thZ2VzWyR0aGlzLT5pZCAtIDJdID0gJGNhbmRpZGF0ZTsKfQp9Cn0KCmlmIChpc3NldCgkdGhpcy0+cGFja2FnZUJ5TmFtZVskbmFtZV0pKSB7CiRjYW5kaWRhdGVzID0gYXJyYXlfbWVyZ2UoJGNhbmRpZGF0ZXMsICR0aGlzLT5wYWNrYWdlQnlOYW1lWyRuYW1lXSk7Cn0KCiRtYXRjaGVzID0gJHByb3ZpZGVNYXRjaGVzID0gYXJyYXkoKTsKJG5hbWVNYXRjaCA9IGZhbHNlOwoKZm9yZWFjaCAoJGNhbmRpZGF0ZXMgYXMgJGNhbmRpZGF0ZSkgewokYWxpYXNPZkNhbmRpZGF0ZSA9IG51bGw7CgoKIAogaWYgKCRjYW5kaWRhdGUgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKJGFsaWFzT2ZDYW5kaWRhdGUgPSAkY2FuZGlkYXRlLT5nZXRBbGlhc09mKCk7Cn0KCmlmICgkdGhpcy0+d2hpdGVsaXN0ICE9PSBudWxsICYmICgKKGlzX2FycmF5KCRjYW5kaWRhdGUpICYmIGlzc2V0KCRjYW5kaWRhdGVbJ2lkJ10pICYmICFpc3NldCgkdGhpcy0+d2hpdGVsaXN0WyRjYW5kaWRhdGVbJ2lkJ11dKSkgfHwKKGlzX29iamVjdCgkY2FuZGlkYXRlKSAmJiAhKCRjYW5kaWRhdGUgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpICYmICFpc3NldCgkdGhpcy0+d2hpdGVsaXN0WyRjYW5kaWRhdGUtPmdldElkKCldKSkgfHwKKGlzX29iamVjdCgkY2FuZGlkYXRlKSAmJiAkY2FuZGlkYXRlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlICYmICFpc3NldCgkdGhpcy0+d2hpdGVsaXN0WyRhbGlhc09mQ2FuZGlkYXRlLT5nZXRJZCgpXSkpCikpIHsKY29udGludWU7Cn0Kc3dpdGNoICgkdGhpcy0+bWF0Y2goJGNhbmRpZGF0ZSwgJG5hbWUsICRjb25zdHJhaW50KSkgewpjYXNlIHNlbGY6Ok1BVENIX05PTkU6CmJyZWFrOwoKY2FzZSBzZWxmOjpNQVRDSF9OQU1FOgokbmFtZU1hdGNoID0gdHJ1ZTsKYnJlYWs7CgpjYXNlIHNlbGY6Ok1BVENIOgokbmFtZU1hdGNoID0gdHJ1ZTsKJG1hdGNoZXNbXSA9ICR0aGlzLT5lbnN1cmVQYWNrYWdlSXNMb2FkZWQoJGNhbmRpZGF0ZSk7CmJyZWFrOwoKY2FzZSBzZWxmOjpNQVRDSF9QUk9WSURFOgokcHJvdmlkZU1hdGNoZXNbXSA9ICR0aGlzLT5lbnN1cmVQYWNrYWdlSXNMb2FkZWQoJGNhbmRpZGF0ZSk7CmJyZWFrOwoKY2FzZSBzZWxmOjpNQVRDSF9SRVBMQUNFOgokbWF0Y2hlc1tdID0gJHRoaXMtPmVuc3VyZVBhY2thZ2VJc0xvYWRlZCgkY2FuZGlkYXRlKTsKYnJlYWs7CgpjYXNlIHNlbGY6Ok1BVENIX0ZJTFRFUkVEOgpicmVhazsKCmRlZmF1bHQ6CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdVbmV4cGVjdGVkIG1hdGNoIHR5cGUnKTsKfQp9CgppZiAoJG11c3RNYXRjaE5hbWUpIHsKcmV0dXJuIGFycmF5X2ZpbHRlcigkbWF0Y2hlcywgZnVuY3Rpb24gKCRtYXRjaCkgdXNlICgkbmFtZSkgewpyZXR1cm4gJG1hdGNoLT5nZXROYW1lKCkgPT0gJG5hbWU7Cn0pOwp9CgoKIGlmICgkbmFtZU1hdGNoKSB7CnJldHVybiAkbWF0Y2hlczsKfQoKcmV0dXJuIGFycmF5X21lcmdlKCRtYXRjaGVzLCAkcHJvdmlkZU1hdGNoZXMpOwp9CgpwdWJsaWMgZnVuY3Rpb24gbGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCkKewokcGFja2FnZUlkID0gYWJzKCRsaXRlcmFsKTsKCnJldHVybiAkdGhpcy0+cGFja2FnZUJ5SWQoJHBhY2thZ2VJZCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBsaXRlcmFsVG9TdHJpbmcoJGxpdGVyYWwpCnsKcmV0dXJuICgkbGl0ZXJhbCA+IDAgPyAnKycgOiAnLScpIC4gJHRoaXMtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwp9CgpwdWJsaWMgZnVuY3Rpb24gbGl0ZXJhbFRvUHJldHR5U3RyaW5nKCRsaXRlcmFsLCAkaW5zdGFsbGVkTWFwKQp7CiRwYWNrYWdlID0gJHRoaXMtPmxpdGVyYWxUb1BhY2thZ2UoJGxpdGVyYWwpOwoKaWYgKGlzc2V0KCRpbnN0YWxsZWRNYXBbJHBhY2thZ2UtPmdldElkKCldKSkgewokcHJlZml4ID0gKCRsaXRlcmFsID4gMCA/ICdrZWVwJyA6ICdyZW1vdmUnKTsKfSBlbHNlIHsKJHByZWZpeCA9ICgkbGl0ZXJhbCA+IDAgPyAnaW5zdGFsbCcgOiAnZG9uXCd0IGluc3RhbGwnKTsKfQoKcmV0dXJuICRwcmVmaXguJyAnLiRwYWNrYWdlLT5nZXRQcmV0dHlTdHJpbmcoKTsKfQoKcHVibGljIGZ1bmN0aW9uIGlzUGFja2FnZUFjY2VwdGFibGUoJG5hbWUsICRzdGFiaWxpdHkpCnsKZm9yZWFjaCAoKGFycmF5KSAkbmFtZSBhcyAkbikgewoKIGlmICghaXNzZXQoJHRoaXMtPnN0YWJpbGl0eUZsYWdzWyRuXSkgJiYgaXNzZXQoJHRoaXMtPmFjY2VwdGFibGVTdGFiaWxpdGllc1skc3RhYmlsaXR5XSkpIHsKcmV0dXJuIHRydWU7Cn0KCgogaWYgKGlzc2V0KCR0aGlzLT5zdGFiaWxpdHlGbGFnc1skbl0pICYmIEJhc2VQYWNrYWdlOjokc3RhYmlsaXRpZXNbJHN0YWJpbGl0eV0gPD0gJHRoaXMtPnN0YWJpbGl0eUZsYWdzWyRuXSkgewpyZXR1cm4gdHJ1ZTsKfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZW5zdXJlUGFja2FnZUlzTG9hZGVkKCRkYXRhKQp7CmlmIChpc19hcnJheSgkZGF0YSkpIHsKaWYgKGlzc2V0KCRkYXRhWydhbGlhc19vZiddKSkgewokYWxpYXNPZiA9ICR0aGlzLT5wYWNrYWdlQnlJZCgkZGF0YVsnYWxpYXNfb2YnXSk7CiRwYWNrYWdlID0gJHRoaXMtPnBhY2thZ2VzWyRkYXRhWydpZCddIC0gMV0gPSAkZGF0YVsncmVwbyddLT5sb2FkQWxpYXNQYWNrYWdlKCRkYXRhLCAkYWxpYXNPZik7CiRwYWNrYWdlLT5zZXRSb290UGFja2FnZUFsaWFzKCFlbXB0eSgkZGF0YVsncm9vdF9hbGlhcyddKSk7Cn0gZWxzZSB7CiRwYWNrYWdlID0gJHRoaXMtPnBhY2thZ2VzWyRkYXRhWydpZCddIC0gMV0gPSAkZGF0YVsncmVwbyddLT5sb2FkUGFja2FnZSgkZGF0YSk7Cn0KCmZvcmVhY2ggKCRwYWNrYWdlLT5nZXROYW1lcygpIGFzICRuYW1lKSB7CiR0aGlzLT5wYWNrYWdlQnlOYW1lWyRuYW1lXVskZGF0YVsnaWQnXV0gPSAkcGFja2FnZTsKfQokcGFja2FnZS0+c2V0SWQoJGRhdGFbJ2lkJ10pOwoKcmV0dXJuICRwYWNrYWdlOwp9CgpyZXR1cm4gJGRhdGE7Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gbWF0Y2goJGNhbmRpZGF0ZSwgJG5hbWUsIExpbmtDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50ID0gbnVsbCkKewoKIGlmIChpc19hcnJheSgkY2FuZGlkYXRlKSkgewokY2FuZGlkYXRlTmFtZSA9ICRjYW5kaWRhdGVbJ25hbWUnXTsKJGNhbmRpZGF0ZVZlcnNpb24gPSAkY2FuZGlkYXRlWyd2ZXJzaW9uJ107CiRpc0RldiA9ICRjYW5kaWRhdGVbJ3N0YWJpbGl0eSddID09PSAnZGV2JzsKJGlzQWxpYXMgPSBpc3NldCgkY2FuZGlkYXRlWydhbGlhc19vZiddKTsKfSBlbHNlIHsKCiAkY2FuZGlkYXRlTmFtZSA9ICRjYW5kaWRhdGUtPmdldE5hbWUoKTsKJGNhbmRpZGF0ZVZlcnNpb24gPSAkY2FuZGlkYXRlLT5nZXRWZXJzaW9uKCk7CiRpc0RldiA9ICRjYW5kaWRhdGUtPmdldFN0YWJpbGl0eSgpID09PSAnZGV2JzsKJGlzQWxpYXMgPSAkY2FuZGlkYXRlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlOwp9CgppZiAoISRpc0RldiAmJiAhJGlzQWxpYXMgJiYgaXNzZXQoJHRoaXMtPmZpbHRlclJlcXVpcmVzWyRuYW1lXSkpIHsKJHJlcXVpcmVGaWx0ZXIgPSAkdGhpcy0+ZmlsdGVyUmVxdWlyZXNbJG5hbWVdOwp9IGVsc2UgewokcmVxdWlyZUZpbHRlciA9IG5ldyBFbXB0eUNvbnN0cmFpbnQ7Cn0KCmlmICgkY2FuZGlkYXRlTmFtZSA9PT0gJG5hbWUpIHsKJHBrZ0NvbnN0cmFpbnQgPSBuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJz09JywgJGNhbmRpZGF0ZVZlcnNpb24pOwoKaWYgKCRjb25zdHJhaW50ID09PSBudWxsIHx8ICRjb25zdHJhaW50LT5tYXRjaGVzKCRwa2dDb25zdHJhaW50KSkgewpyZXR1cm4gJHJlcXVpcmVGaWx0ZXItPm1hdGNoZXMoJHBrZ0NvbnN0cmFpbnQpID8gc2VsZjo6TUFUQ0ggOiBzZWxmOjpNQVRDSF9GSUxURVJFRDsKfQoKcmV0dXJuIHNlbGY6Ok1BVENIX05BTUU7Cn0KCmlmIChpc19hcnJheSgkY2FuZGlkYXRlKSkgewokcHJvdmlkZXMgPSBpc3NldCgkY2FuZGlkYXRlWydwcm92aWRlJ10pCj8gJHRoaXMtPnZlcnNpb25QYXJzZXItPnBhcnNlTGlua3MoJGNhbmRpZGF0ZU5hbWUsICRjYW5kaWRhdGVWZXJzaW9uLCAncHJvdmlkZXMnLCAkY2FuZGlkYXRlWydwcm92aWRlJ10pCjogYXJyYXkoKTsKJHJlcGxhY2VzID0gaXNzZXQoJGNhbmRpZGF0ZVsncmVwbGFjZSddKQo/ICR0aGlzLT52ZXJzaW9uUGFyc2VyLT5wYXJzZUxpbmtzKCRjYW5kaWRhdGVOYW1lLCAkY2FuZGlkYXRlVmVyc2lvbiwgJ3JlcGxhY2VzJywgJGNhbmRpZGF0ZVsncmVwbGFjZSddKQo6IGFycmF5KCk7Cn0gZWxzZSB7CiRwcm92aWRlcyA9ICRjYW5kaWRhdGUtPmdldFByb3ZpZGVzKCk7CiRyZXBsYWNlcyA9ICRjYW5kaWRhdGUtPmdldFJlcGxhY2VzKCk7Cn0KCgogaWYgKGlzc2V0KCRyZXBsYWNlc1swXSkgfHwgaXNzZXQoJHByb3ZpZGVzWzBdKSkgewpmb3JlYWNoICgkcHJvdmlkZXMgYXMgJGxpbmspIHsKaWYgKCRsaW5rLT5nZXRUYXJnZXQoKSA9PT0gJG5hbWUgJiYgKCRjb25zdHJhaW50ID09PSBudWxsIHx8ICRjb25zdHJhaW50LT5tYXRjaGVzKCRsaW5rLT5nZXRDb25zdHJhaW50KCkpKSkgewpyZXR1cm4gJHJlcXVpcmVGaWx0ZXItPm1hdGNoZXMoJGxpbmstPmdldENvbnN0cmFpbnQoKSkgPyBzZWxmOjpNQVRDSF9QUk9WSURFIDogc2VsZjo6TUFUQ0hfRklMVEVSRUQ7Cn0KfQoKZm9yZWFjaCAoJHJlcGxhY2VzIGFzICRsaW5rKSB7CmlmICgkbGluay0+Z2V0VGFyZ2V0KCkgPT09ICRuYW1lICYmICgkY29uc3RyYWludCA9PT0gbnVsbCB8fCAkY29uc3RyYWludC0+bWF0Y2hlcygkbGluay0+Z2V0Q29uc3RyYWludCgpKSkpIHsKcmV0dXJuICRyZXF1aXJlRmlsdGVyLT5tYXRjaGVzKCRsaW5rLT5nZXRDb25zdHJhaW50KCkpID8gc2VsZjo6TUFUQ0hfUkVQTEFDRSA6IHNlbGY6Ok1BVENIX0ZJTFRFUkVEOwp9Cn0KCnJldHVybiBzZWxmOjpNQVRDSF9OT05FOwp9CgppZiAoaXNzZXQoJHByb3ZpZGVzWyRuYW1lXSkgJiYgKCRjb25zdHJhaW50ID09PSBudWxsIHx8ICRjb25zdHJhaW50LT5tYXRjaGVzKCRwcm92aWRlc1skbmFtZV0tPmdldENvbnN0cmFpbnQoKSkpKSB7CnJldHVybiAkcmVxdWlyZUZpbHRlci0+bWF0Y2hlcygkcHJvdmlkZXNbJG5hbWVdLT5nZXRDb25zdHJhaW50KCkpID8gc2VsZjo6TUFUQ0hfUFJPVklERSA6IHNlbGY6Ok1BVENIX0ZJTFRFUkVEOwp9CgppZiAoaXNzZXQoJHJlcGxhY2VzWyRuYW1lXSkgJiYgKCRjb25zdHJhaW50ID09PSBudWxsIHx8ICRjb25zdHJhaW50LT5tYXRjaGVzKCRyZXBsYWNlc1skbmFtZV0tPmdldENvbnN0cmFpbnQoKSkpKSB7CnJldHVybiAkcmVxdWlyZUZpbHRlci0+bWF0Y2hlcygkcmVwbGFjZXNbJG5hbWVdLT5nZXRDb25zdHJhaW50KCkpID8gc2VsZjo6TUFUQ0hfUkVQTEFDRSA6IHNlbGY6Ok1BVENIX0ZJTFRFUkVEOwp9CgpyZXR1cm4gc2VsZjo6TUFUQ0hfTk9ORTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCmNsYXNzIFJ1bGUKewpjb25zdCBSVUxFX0lOVEVSTkFMX0FMTE9XX1VQREFURSA9IDE7CmNvbnN0IFJVTEVfSk9CX0lOU1RBTEwgPSAyOwpjb25zdCBSVUxFX0pPQl9SRU1PVkUgPSAzOwpjb25zdCBSVUxFX1BBQ0tBR0VfQ09ORkxJQ1QgPSA2Owpjb25zdCBSVUxFX1BBQ0tBR0VfUkVRVUlSRVMgPSA3Owpjb25zdCBSVUxFX1BBQ0tBR0VfT0JTT0xFVEVTID0gODsKY29uc3QgUlVMRV9JTlNUQUxMRURfUEFDS0FHRV9PQlNPTEVURVMgPSA5Owpjb25zdCBSVUxFX1BBQ0tBR0VfU0FNRV9OQU1FID0gMTA7CmNvbnN0IFJVTEVfUEFDS0FHRV9JTVBMSUNJVF9PQlNPTEVURVMgPSAxMTsKY29uc3QgUlVMRV9MRUFSTkVEID0gMTI7CmNvbnN0IFJVTEVfUEFDS0FHRV9BTElBUyA9IDEzOwoKcHJvdGVjdGVkICRwb29sOwoKcHJvdGVjdGVkICRkaXNhYmxlZDsKcHJvdGVjdGVkICRsaXRlcmFsczsKcHJvdGVjdGVkICR0eXBlOwpwcm90ZWN0ZWQgJGlkOwpwcm90ZWN0ZWQgJHJlYXNvbjsKcHJvdGVjdGVkICRyZWFzb25EYXRhOwoKcHJvdGVjdGVkICRqb2I7Cgpwcm90ZWN0ZWQgJHJ1bGVIYXNoOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBvb2wgJHBvb2wsIGFycmF5ICRsaXRlcmFscywgJHJlYXNvbiwgJHJlYXNvbkRhdGEsICRqb2IgPSBudWxsKQp7CiR0aGlzLT5wb29sID0gJHBvb2w7CgoKIHNvcnQoJGxpdGVyYWxzKTsKCiR0aGlzLT5saXRlcmFscyA9ICRsaXRlcmFsczsKJHRoaXMtPnJlYXNvbiA9ICRyZWFzb247CiR0aGlzLT5yZWFzb25EYXRhID0gJHJlYXNvbkRhdGE7CgokdGhpcy0+ZGlzYWJsZWQgPSBmYWxzZTsKCiR0aGlzLT5qb2IgPSAkam9iOwoKJHRoaXMtPnR5cGUgPSAtMTsKCiR0aGlzLT5ydWxlSGFzaCA9IHN1YnN0cihtZDUoaW1wbG9kZSgnLCcsICR0aGlzLT5saXRlcmFscykpLCAwLCA1KTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEhhc2goKQp7CnJldHVybiAkdGhpcy0+cnVsZUhhc2g7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRJZCgkaWQpCnsKJHRoaXMtPmlkID0gJGlkOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0SWQoKQp7CnJldHVybiAkdGhpcy0+aWQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRKb2IoKQp7CnJldHVybiAkdGhpcy0+am9iOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVhc29uKCkKewpyZXR1cm4gJHRoaXMtPnJlYXNvbjsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFJlYXNvbkRhdGEoKQp7CnJldHVybiAkdGhpcy0+cmVhc29uRGF0YTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFJlcXVpcmVkUGFja2FnZSgpCnsKaWYgKCR0aGlzLT5yZWFzb24gPT09IHNlbGY6OlJVTEVfSk9CX0lOU1RBTEwpIHsKcmV0dXJuICR0aGlzLT5yZWFzb25EYXRhOwp9CgppZiAoJHRoaXMtPnJlYXNvbiA9PT0gc2VsZjo6UlVMRV9QQUNLQUdFX1JFUVVJUkVTKSB7CnJldHVybiAkdGhpcy0+cmVhc29uRGF0YS0+Z2V0VGFyZ2V0KCk7Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKFJ1bGUgJHJ1bGUpCnsKaWYgKCR0aGlzLT5ydWxlSGFzaCAhPT0gJHJ1bGUtPnJ1bGVIYXNoKSB7CnJldHVybiBmYWxzZTsKfQoKaWYgKGNvdW50KCR0aGlzLT5saXRlcmFscykgIT0gY291bnQoJHJ1bGUtPmxpdGVyYWxzKSkgewpyZXR1cm4gZmFsc2U7Cn0KCmZvciAoJGkgPSAwLCAkbiA9IGNvdW50KCR0aGlzLT5saXRlcmFscyk7ICRpIDwgJG47ICRpKyspIHsKaWYgKCR0aGlzLT5saXRlcmFsc1skaV0gIT09ICRydWxlLT5saXRlcmFsc1skaV0pIHsKcmV0dXJuIGZhbHNlOwp9Cn0KCnJldHVybiB0cnVlOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0VHlwZSgkdHlwZSkKewokdGhpcy0+dHlwZSA9ICR0eXBlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCnsKcmV0dXJuICR0aGlzLT50eXBlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZSgpCnsKJHRoaXMtPmRpc2FibGVkID0gdHJ1ZTsKfQoKcHVibGljIGZ1bmN0aW9uIGVuYWJsZSgpCnsKJHRoaXMtPmRpc2FibGVkID0gZmFsc2U7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0Rpc2FibGVkKCkKewpyZXR1cm4gJHRoaXMtPmRpc2FibGVkOwp9CgpwdWJsaWMgZnVuY3Rpb24gaXNFbmFibGVkKCkKewpyZXR1cm4gISR0aGlzLT5kaXNhYmxlZDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldExpdGVyYWxzKCkKewpyZXR1cm4gJHRoaXMtPmxpdGVyYWxzOwp9CgpwdWJsaWMgZnVuY3Rpb24gaXNBc3NlcnRpb24oKQp7CnJldHVybiAxID09PSBjb3VudCgkdGhpcy0+bGl0ZXJhbHMpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJldHR5U3RyaW5nKGFycmF5ICRpbnN0YWxsZWRNYXAgPSBhcnJheSgpKQp7CiRydWxlVGV4dCA9ICcnOwpmb3JlYWNoICgkdGhpcy0+bGl0ZXJhbHMgYXMgJGkgPT4gJGxpdGVyYWwpIHsKaWYgKCRpICE9IDApIHsKJHJ1bGVUZXh0IC49ICd8JzsKfQokcnVsZVRleHQgLj0gJHRoaXMtPnBvb2wtPmxpdGVyYWxUb1ByZXR0eVN0cmluZygkbGl0ZXJhbCwgJGluc3RhbGxlZE1hcCk7Cn0KCnN3aXRjaCAoJHRoaXMtPnJlYXNvbikgewpjYXNlIHNlbGY6OlJVTEVfSU5URVJOQUxfQUxMT1dfVVBEQVRFOgpyZXR1cm4gJHJ1bGVUZXh0OwoKY2FzZSBzZWxmOjpSVUxFX0pPQl9JTlNUQUxMOgpyZXR1cm4gIkluc3RhbGwgY29tbWFuZCBydWxlICgkcnVsZVRleHQpIjsKCmNhc2Ugc2VsZjo6UlVMRV9KT0JfUkVNT1ZFOgpyZXR1cm4gIlJlbW92ZSBjb21tYW5kIHJ1bGUgKCRydWxlVGV4dCkiOwoKY2FzZSBzZWxmOjpSVUxFX1BBQ0tBR0VfQ09ORkxJQ1Q6CiRwYWNrYWdlMSA9ICR0aGlzLT5wb29sLT5saXRlcmFsVG9QYWNrYWdlKCR0aGlzLT5saXRlcmFsc1swXSk7CiRwYWNrYWdlMiA9ICR0aGlzLT5wb29sLT5saXRlcmFsVG9QYWNrYWdlKCR0aGlzLT5saXRlcmFsc1sxXSk7CgpyZXR1cm4gJHBhY2thZ2UxLT5nZXRQcmV0dHlTdHJpbmcoKS4nIGNvbmZsaWN0cyB3aXRoICcuJHRoaXMtPmZvcm1hdFBhY2thZ2VzVW5pcXVlKGFycmF5KCRwYWNrYWdlMikpLicuJzsKCmNhc2Ugc2VsZjo6UlVMRV9QQUNLQUdFX1JFUVVJUkVTOgokbGl0ZXJhbHMgPSAkdGhpcy0+bGl0ZXJhbHM7CiRzb3VyY2VMaXRlcmFsID0gYXJyYXlfc2hpZnQoJGxpdGVyYWxzKTsKJHNvdXJjZVBhY2thZ2UgPSAkdGhpcy0+cG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkc291cmNlTGl0ZXJhbCk7CgokcmVxdWlyZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKJHJlcXVpcmVzW10gPSAkdGhpcy0+cG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkbGl0ZXJhbCk7Cn0KCiR0ZXh0ID0gJHRoaXMtPnJlYXNvbkRhdGEtPmdldFByZXR0eVN0cmluZygkc291cmNlUGFja2FnZSk7CmlmICgkcmVxdWlyZXMpIHsKJHRleHQgLj0gJyAtPiBzYXRpc2ZpYWJsZSBieSAnIC4gJHRoaXMtPmZvcm1hdFBhY2thZ2VzVW5pcXVlKCRyZXF1aXJlcykgLiAnLic7Cn0gZWxzZSB7CiR0YXJnZXROYW1lID0gJHRoaXMtPnJlYXNvbkRhdGEtPmdldFRhcmdldCgpOwoKCiBpZiAoMCA9PT0gc3RycG9zKCR0YXJnZXROYW1lLCAnZXh0LScpKSB7CiRleHQgPSBzdWJzdHIoJHRhcmdldE5hbWUsIDQpOwokZXJyb3IgPSBleHRlbnNpb25fbG9hZGVkKCRleHQpID8gJ2hhcyB0aGUgd3JvbmcgdmVyc2lvbiAoJy4ocGhwdmVyc2lvbigkZXh0KSA/OiAnMCcpLicpIGluc3RhbGxlZCcgOiAnaXMgbWlzc2luZyBmcm9tIHlvdXIgc3lzdGVtJzsKCiR0ZXh0IC49ICcgLT4gdGhlIHJlcXVlc3RlZCBQSFAgZXh0ZW5zaW9uICcuJGV4dC4nICcuJGVycm9yLicuJzsKfSBlbHNlaWYgKDAgPT09IHN0cnBvcygkdGFyZ2V0TmFtZSwgJ2xpYi0nKSkgewoKICRsaWIgPSBzdWJzdHIoJHRhcmdldE5hbWUsIDQpOwoKJHRleHQgLj0gJyAtPiB0aGUgcmVxdWVzdGVkIGxpbmtlZCBsaWJyYXJ5ICcuJGxpYi4nIGhhcyB0aGUgd3JvbmcgdmVyc2lvbiBpbnN0YWxsZWQgb3IgaXMgbWlzc2luZyBmcm9tIHlvdXIgc3lzdGVtLCBtYWtlIHN1cmUgdG8gaGF2ZSB0aGUgZXh0ZW5zaW9uIHByb3ZpZGluZyBpdC4nOwp9IGVsc2UgewokdGV4dCAuPSAnIC0+IG5vIG1hdGNoaW5nIHBhY2thZ2UgZm91bmQuJzsKfQp9CgpyZXR1cm4gJHRleHQ7CgpjYXNlIHNlbGY6OlJVTEVfUEFDS0FHRV9PQlNPTEVURVM6CnJldHVybiAkcnVsZVRleHQ7CmNhc2Ugc2VsZjo6UlVMRV9JTlNUQUxMRURfUEFDS0FHRV9PQlNPTEVURVM6CnJldHVybiAkcnVsZVRleHQ7CmNhc2Ugc2VsZjo6UlVMRV9QQUNLQUdFX1NBTUVfTkFNRToKcmV0dXJuICdDYW4gb25seSBpbnN0YWxsIG9uZSBvZjogJyAuICR0aGlzLT5mb3JtYXRQYWNrYWdlc1VuaXF1ZSgkdGhpcy0+bGl0ZXJhbHMpIC4gJy4nOwpjYXNlIHNlbGY6OlJVTEVfUEFDS0FHRV9JTVBMSUNJVF9PQlNPTEVURVM6CnJldHVybiAkcnVsZVRleHQ7CmNhc2Ugc2VsZjo6UlVMRV9MRUFSTkVEOgpyZXR1cm4gJ0NvbmNsdXNpb246ICcuJHJ1bGVUZXh0OwpjYXNlIHNlbGY6OlJVTEVfUEFDS0FHRV9BTElBUzoKcmV0dXJuICRydWxlVGV4dDsKfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZm9ybWF0UGFja2FnZXNVbmlxdWUoYXJyYXkgJHBhY2thZ2VzKQp7CiRwcmVwYXJlZCA9IGFycmF5KCk7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewppZiAoIWlzX29iamVjdCgkcGFja2FnZSkpIHsKJHBhY2thZ2UgPSAkdGhpcy0+cG9vbC0+bGl0ZXJhbFRvUGFja2FnZSgkcGFja2FnZSk7Cn0KJHByZXBhcmVkWyRwYWNrYWdlLT5nZXROYW1lKCldWyduYW1lJ10gPSAkcGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpOwokcHJlcGFyZWRbJHBhY2thZ2UtPmdldE5hbWUoKV1bJ3ZlcnNpb25zJ11bJHBhY2thZ2UtPmdldFZlcnNpb24oKV0gPSAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpOwp9CmZvcmVhY2ggKCRwcmVwYXJlZCBhcyAkbmFtZSA9PiAkcGFja2FnZSkgewokcHJlcGFyZWRbJG5hbWVdID0gJHBhY2thZ2VbJ25hbWUnXS4nWycuaW1wbG9kZSgnLCAnLCAkcGFja2FnZVsndmVyc2lvbnMnXSkuJ10nOwp9CgpyZXR1cm4gaW1wbG9kZSgnLCAnLCAkcHJlcGFyZWQpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewokcmVzdWx0ID0gKCR0aGlzLT5pc0Rpc2FibGVkKCkpID8gJ2Rpc2FibGVkKCcgOiAnKCc7Cgpmb3JlYWNoICgkdGhpcy0+bGl0ZXJhbHMgYXMgJGkgPT4gJGxpdGVyYWwpIHsKaWYgKCRpICE9IDApIHsKJHJlc3VsdCAuPSAnfCc7Cn0KJHJlc3VsdCAuPSAkdGhpcy0+cG9vbC0+bGl0ZXJhbFRvU3RyaW5nKCRsaXRlcmFsKTsKfQoKJHJlc3VsdCAuPSAnKSc7CgpyZXR1cm4gJHJlc3VsdDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXEFsaWFzUGFja2FnZTsKCgoKCmNsYXNzIFJ1bGVTZXRHZW5lcmF0b3IKewpwcm90ZWN0ZWQgJHBvbGljeTsKcHJvdGVjdGVkICRwb29sOwpwcm90ZWN0ZWQgJHJ1bGVzOwpwcm90ZWN0ZWQgJGpvYnM7CnByb3RlY3RlZCAkaW5zdGFsbGVkTWFwOwpwcm90ZWN0ZWQgJHdoaXRlbGlzdGVkTWFwOwpwcm90ZWN0ZWQgJGFkZGVkTWFwOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBvbGljeUludGVyZmFjZSAkcG9saWN5LCBQb29sICRwb29sKQp7CiR0aGlzLT5wb2xpY3kgPSAkcG9saWN5OwokdGhpcy0+cG9vbCA9ICRwb29sOwp9CgoKCgoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZXF1aXJlUnVsZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCBhcnJheSAkcHJvdmlkZXJzLCAkcmVhc29uLCAkcmVhc29uRGF0YSA9IG51bGwpCnsKJGxpdGVyYWxzID0gYXJyYXkoLSRwYWNrYWdlLT5nZXRJZCgpKTsKCmZvcmVhY2ggKCRwcm92aWRlcnMgYXMgJHByb3ZpZGVyKSB7CgogaWYgKCRwcm92aWRlciA9PT0gJHBhY2thZ2UpIHsKcmV0dXJuIG51bGw7Cn0KJGxpdGVyYWxzW10gPSAkcHJvdmlkZXItPmdldElkKCk7Cn0KCnJldHVybiBuZXcgUnVsZSgkdGhpcy0+cG9vbCwgJGxpdGVyYWxzLCAkcmVhc29uLCAkcmVhc29uRGF0YSk7Cn0KCgoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVJbnN0YWxsT25lT2ZSdWxlKGFycmF5ICRwYWNrYWdlcywgJHJlYXNvbiwgJGpvYikKewokbGl0ZXJhbHMgPSBhcnJheSgpOwpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2UpIHsKJGxpdGVyYWxzW10gPSAkcGFja2FnZS0+Z2V0SWQoKTsKfQoKcmV0dXJuIG5ldyBSdWxlKCR0aGlzLT5wb29sLCAkbGl0ZXJhbHMsICRyZWFzb24sICRqb2JbJ3BhY2thZ2VOYW1lJ10sICRqb2IpOwp9CgoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZW1vdmVSdWxlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UsICRyZWFzb24sICRqb2IpCnsKcmV0dXJuIG5ldyBSdWxlKCR0aGlzLT5wb29sLCBhcnJheSgtJHBhY2thZ2UtPmdldElkKCkpLCAkcmVhc29uLCAkam9iWydwYWNrYWdlTmFtZSddLCAkam9iKTsKfQoKCgoKCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlQ29uZmxpY3RSdWxlKFBhY2thZ2VJbnRlcmZhY2UgJGlzc3VlciwgUGFja2FnZUludGVyZmFjZSAkcHJvdmlkZXIsICRyZWFzb24sICRyZWFzb25EYXRhID0gbnVsbCkKewoKIGlmICgkaXNzdWVyID09PSAkcHJvdmlkZXIpIHsKcmV0dXJuIG51bGw7Cn0KCnJldHVybiBuZXcgUnVsZSgkdGhpcy0+cG9vbCwgYXJyYXkoLSRpc3N1ZXItPmdldElkKCksIC0kcHJvdmlkZXItPmdldElkKCkpLCAkcmVhc29uLCAkcmVhc29uRGF0YSk7Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYWRkUnVsZSgkdHlwZSwgUnVsZSAkbmV3UnVsZSA9IG51bGwpCnsKaWYgKCEkbmV3UnVsZSB8fCAkdGhpcy0+cnVsZXMtPmNvbnRhaW5zRXF1YWwoJG5ld1J1bGUpKSB7CnJldHVybjsKfQoKJHRoaXMtPnJ1bGVzLT5hZGQoJG5ld1J1bGUsICR0eXBlKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHdoaXRlbGlzdEZyb21QYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHdvcmtRdWV1ZSA9IG5ldyBcU3BsUXVldWU7CiR3b3JrUXVldWUtPmVucXVldWUoJHBhY2thZ2UpOwoKd2hpbGUgKCEkd29ya1F1ZXVlLT5pc0VtcHR5KCkpIHsKJHBhY2thZ2UgPSAkd29ya1F1ZXVlLT5kZXF1ZXVlKCk7CmlmIChpc3NldCgkdGhpcy0+d2hpdGVsaXN0ZWRNYXBbJHBhY2thZ2UtPmdldElkKCldKSkgewpjb250aW51ZTsKfQoKJHRoaXMtPndoaXRlbGlzdGVkTWFwWyRwYWNrYWdlLT5nZXRJZCgpXSA9IHRydWU7Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSBhcyAkbGluaykgewokcG9zc2libGVSZXF1aXJlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGxpbmstPmdldFRhcmdldCgpLCAkbGluay0+Z2V0Q29uc3RyYWludCgpLCB0cnVlKTsKCmZvcmVhY2ggKCRwb3NzaWJsZVJlcXVpcmVzIGFzICRyZXF1aXJlKSB7CiR3b3JrUXVldWUtPmVucXVldWUoJHJlcXVpcmUpOwp9Cn0KCiRvYnNvbGV0ZVByb3ZpZGVycyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJHBhY2thZ2UtPmdldE5hbWUoKSwgbnVsbCwgdHJ1ZSk7Cgpmb3JlYWNoICgkb2Jzb2xldGVQcm92aWRlcnMgYXMgJHByb3ZpZGVyKSB7CmlmICgkcHJvdmlkZXIgPT09ICRwYWNrYWdlKSB7CmNvbnRpbnVlOwp9CgppZiAoKCRwYWNrYWdlIGluc3RhbmNlb2YgQWxpYXNQYWNrYWdlKSAmJiAkcGFja2FnZS0+Z2V0QWxpYXNPZigpID09PSAkcHJvdmlkZXIpIHsKJHdvcmtRdWV1ZS0+ZW5xdWV1ZSgkcHJvdmlkZXIpOwp9Cn0KfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkUnVsZXNGb3JQYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHdvcmtRdWV1ZSA9IG5ldyBcU3BsUXVldWU7CiR3b3JrUXVldWUtPmVucXVldWUoJHBhY2thZ2UpOwoKd2hpbGUgKCEkd29ya1F1ZXVlLT5pc0VtcHR5KCkpIHsKJHBhY2thZ2UgPSAkd29ya1F1ZXVlLT5kZXF1ZXVlKCk7CmlmIChpc3NldCgkdGhpcy0+YWRkZWRNYXBbJHBhY2thZ2UtPmdldElkKCldKSkgewpjb250aW51ZTsKfQoKJHRoaXMtPmFkZGVkTWFwWyRwYWNrYWdlLT5nZXRJZCgpXSA9IHRydWU7Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSBhcyAkbGluaykgewokcG9zc2libGVSZXF1aXJlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGxpbmstPmdldFRhcmdldCgpLCAkbGluay0+Z2V0Q29uc3RyYWludCgpKTsKCiR0aGlzLT5hZGRSdWxlKFJ1bGVTZXQ6OlRZUEVfUEFDS0FHRSwgJHJ1bGUgPSAkdGhpcy0+Y3JlYXRlUmVxdWlyZVJ1bGUoJHBhY2thZ2UsICRwb3NzaWJsZVJlcXVpcmVzLCBSdWxlOjpSVUxFX1BBQ0tBR0VfUkVRVUlSRVMsICRsaW5rKSk7Cgpmb3JlYWNoICgkcG9zc2libGVSZXF1aXJlcyBhcyAkcmVxdWlyZSkgewokd29ya1F1ZXVlLT5lbnF1ZXVlKCRyZXF1aXJlKTsKfQp9Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0Q29uZmxpY3RzKCkgYXMgJGxpbmspIHsKJHBvc3NpYmxlQ29uZmxpY3RzID0gJHRoaXMtPnBvb2wtPndoYXRQcm92aWRlcygkbGluay0+Z2V0VGFyZ2V0KCksICRsaW5rLT5nZXRDb25zdHJhaW50KCkpOwoKZm9yZWFjaCAoJHBvc3NpYmxlQ29uZmxpY3RzIGFzICRjb25mbGljdCkgewokdGhpcy0+YWRkUnVsZShSdWxlU2V0OjpUWVBFX1BBQ0tBR0UsICR0aGlzLT5jcmVhdGVDb25mbGljdFJ1bGUoJHBhY2thZ2UsICRjb25mbGljdCwgUnVsZTo6UlVMRV9QQUNLQUdFX0NPTkZMSUNULCAkbGluaykpOwp9Cn0KCgogJGlzSW5zdGFsbGVkID0gKGlzc2V0KCR0aGlzLT5pbnN0YWxsZWRNYXBbJHBhY2thZ2UtPmdldElkKCldKSk7Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0UmVwbGFjZXMoKSBhcyAkbGluaykgewokb2Jzb2xldGVQcm92aWRlcnMgPSAkdGhpcy0+cG9vbC0+d2hhdFByb3ZpZGVzKCRsaW5rLT5nZXRUYXJnZXQoKSwgJGxpbmstPmdldENvbnN0cmFpbnQoKSk7Cgpmb3JlYWNoICgkb2Jzb2xldGVQcm92aWRlcnMgYXMgJHByb3ZpZGVyKSB7CmlmICgkcHJvdmlkZXIgPT09ICRwYWNrYWdlKSB7CmNvbnRpbnVlOwp9CgppZiAoISR0aGlzLT5vYnNvbGV0ZUltcG9zc2libGVGb3JBbGlhcygkcGFja2FnZSwgJHByb3ZpZGVyKSkgewokcmVhc29uID0gKCRpc0luc3RhbGxlZCkgPyBSdWxlOjpSVUxFX0lOU1RBTExFRF9QQUNLQUdFX09CU09MRVRFUyA6IFJ1bGU6OlJVTEVfUEFDS0FHRV9PQlNPTEVURVM7CiR0aGlzLT5hZGRSdWxlKFJ1bGVTZXQ6OlRZUEVfUEFDS0FHRSwgJHRoaXMtPmNyZWF0ZUNvbmZsaWN0UnVsZSgkcGFja2FnZSwgJHByb3ZpZGVyLCAkcmVhc29uLCAkbGluaykpOwp9Cn0KfQoKJG9ic29sZXRlUHJvdmlkZXJzID0gJHRoaXMtPnBvb2wtPndoYXRQcm92aWRlcygkcGFja2FnZS0+Z2V0TmFtZSgpLCBudWxsKTsKCmZvcmVhY2ggKCRvYnNvbGV0ZVByb3ZpZGVycyBhcyAkcHJvdmlkZXIpIHsKaWYgKCRwcm92aWRlciA9PT0gJHBhY2thZ2UpIHsKY29udGludWU7Cn0KCmlmICgoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpICYmICRwYWNrYWdlLT5nZXRBbGlhc09mKCkgPT09ICRwcm92aWRlcikgewokdGhpcy0+YWRkUnVsZShSdWxlU2V0OjpUWVBFX1BBQ0tBR0UsICRydWxlID0gJHRoaXMtPmNyZWF0ZVJlcXVpcmVSdWxlKCRwYWNrYWdlLCBhcnJheSgkcHJvdmlkZXIpLCBSdWxlOjpSVUxFX1BBQ0tBR0VfQUxJQVMsICRwYWNrYWdlKSk7Cn0gZWxzZWlmICghJHRoaXMtPm9ic29sZXRlSW1wb3NzaWJsZUZvckFsaWFzKCRwYWNrYWdlLCAkcHJvdmlkZXIpKSB7CiRyZWFzb24gPSAoJHBhY2thZ2UtPmdldE5hbWUoKSA9PSAkcHJvdmlkZXItPmdldE5hbWUoKSkgPyBSdWxlOjpSVUxFX1BBQ0tBR0VfU0FNRV9OQU1FIDogUnVsZTo6UlVMRV9QQUNLQUdFX0lNUExJQ0lUX09CU09MRVRFUzsKJHRoaXMtPmFkZFJ1bGUoUnVsZVNldDo6VFlQRV9QQUNLQUdFLCAkcnVsZSA9ICR0aGlzLT5jcmVhdGVDb25mbGljdFJ1bGUoJHBhY2thZ2UsICRwcm92aWRlciwgJHJlYXNvbiwgJHBhY2thZ2UpKTsKfQp9Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIG9ic29sZXRlSW1wb3NzaWJsZUZvckFsaWFzKCRwYWNrYWdlLCAkcHJvdmlkZXIpCnsKJHBhY2thZ2VJc0FsaWFzID0gJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2U7CiRwcm92aWRlcklzQWxpYXMgPSAkcHJvdmlkZXIgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2U7CgokaW1wb3NzaWJsZSA9ICgKKCRwYWNrYWdlSXNBbGlhcyAmJiAkcGFja2FnZS0+Z2V0QWxpYXNPZigpID09PSAkcHJvdmlkZXIpIHx8CigkcHJvdmlkZXJJc0FsaWFzICYmICRwcm92aWRlci0+Z2V0QWxpYXNPZigpID09PSAkcGFja2FnZSkgfHwKKCRwYWNrYWdlSXNBbGlhcyAmJiAkcHJvdmlkZXJJc0FsaWFzICYmICRwcm92aWRlci0+Z2V0QWxpYXNPZigpID09PSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpKQopOwoKcmV0dXJuICRpbXBvc3NpYmxlOwp9CgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGFkZFJ1bGVzRm9yVXBkYXRlUGFja2FnZXMoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokdXBkYXRlcyA9ICR0aGlzLT5wb2xpY3ktPmZpbmRVcGRhdGVQYWNrYWdlcygkdGhpcy0+cG9vbCwgJHRoaXMtPmluc3RhbGxlZE1hcCwgJHBhY2thZ2UpOwoKZm9yZWFjaCAoJHVwZGF0ZXMgYXMgJHVwZGF0ZSkgewokdGhpcy0+YWRkUnVsZXNGb3JQYWNrYWdlKCR1cGRhdGUpOwp9Cn0KCnByaXZhdGUgZnVuY3Rpb24gd2hpdGVsaXN0RnJvbVVwZGF0ZVBhY2thZ2VzKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHVwZGF0ZXMgPSAkdGhpcy0+cG9saWN5LT5maW5kVXBkYXRlUGFja2FnZXMoJHRoaXMtPnBvb2wsICR0aGlzLT5pbnN0YWxsZWRNYXAsICRwYWNrYWdlLCB0cnVlKTsKCmZvcmVhY2ggKCR1cGRhdGVzIGFzICR1cGRhdGUpIHsKJHRoaXMtPndoaXRlbGlzdEZyb21QYWNrYWdlKCR1cGRhdGUpOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB3aGl0ZWxpc3RGcm9tSm9icygpCnsKZm9yZWFjaCAoJHRoaXMtPmpvYnMgYXMgJGpvYikgewpzd2l0Y2ggKCRqb2JbJ2NtZCddKSB7CmNhc2UgJ2luc3RhbGwnOgokcGFja2FnZXMgPSAkdGhpcy0+cG9vbC0+d2hhdFByb3ZpZGVzKCRqb2JbJ3BhY2thZ2VOYW1lJ10sICRqb2JbJ2NvbnN0cmFpbnQnXSwgdHJ1ZSk7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewokdGhpcy0+d2hpdGVsaXN0RnJvbVBhY2thZ2UoJHBhY2thZ2UpOwp9CmJyZWFrOwp9Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZFJ1bGVzRm9ySm9icygpCnsKZm9yZWFjaCAoJHRoaXMtPmpvYnMgYXMgJGpvYikgewpzd2l0Y2ggKCRqb2JbJ2NtZCddKSB7CmNhc2UgJ2luc3RhbGwnOgokcGFja2FnZXMgPSAkdGhpcy0+cG9vbC0+d2hhdFByb3ZpZGVzKCRqb2JbJ3BhY2thZ2VOYW1lJ10sICRqb2JbJ2NvbnN0cmFpbnQnXSk7CmlmICgkcGFja2FnZXMpIHsKZm9yZWFjaCAoJHBhY2thZ2VzIGFzICRwYWNrYWdlKSB7CmlmICghaXNzZXQoJHRoaXMtPmluc3RhbGxlZE1hcFskcGFja2FnZS0+Z2V0SWQoKV0pKSB7CiR0aGlzLT5hZGRSdWxlc0ZvclBhY2thZ2UoJHBhY2thZ2UpOwp9Cn0KCiRydWxlID0gJHRoaXMtPmNyZWF0ZUluc3RhbGxPbmVPZlJ1bGUoJHBhY2thZ2VzLCBSdWxlOjpSVUxFX0pPQl9JTlNUQUxMLCAkam9iKTsKJHRoaXMtPmFkZFJ1bGUoUnVsZVNldDo6VFlQRV9KT0IsICRydWxlKTsKfQpicmVhazsKY2FzZSAncmVtb3ZlJzoKCiAKICRwYWNrYWdlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGpvYlsncGFja2FnZU5hbWUnXSwgJGpvYlsnY29uc3RyYWludCddKTsKZm9yZWFjaCAoJHBhY2thZ2VzIGFzICRwYWNrYWdlKSB7CiRydWxlID0gJHRoaXMtPmNyZWF0ZVJlbW92ZVJ1bGUoJHBhY2thZ2UsIFJ1bGU6OlJVTEVfSk9CX1JFTU9WRSwgJGpvYik7CiR0aGlzLT5hZGRSdWxlKFJ1bGVTZXQ6OlRZUEVfSk9CLCAkcnVsZSk7Cn0KYnJlYWs7Cn0KfQp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UnVsZXNGb3IoJGpvYnMsICRpbnN0YWxsZWRNYXApCnsKJHRoaXMtPmpvYnMgPSAkam9iczsKJHRoaXMtPnJ1bGVzID0gbmV3IFJ1bGVTZXQ7CiR0aGlzLT5pbnN0YWxsZWRNYXAgPSAkaW5zdGFsbGVkTWFwOwoKJHRoaXMtPndoaXRlbGlzdGVkTmFtZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+aW5zdGFsbGVkTWFwIGFzICRwYWNrYWdlKSB7CiR0aGlzLT53aGl0ZWxpc3RGcm9tUGFja2FnZSgkcGFja2FnZSk7CiR0aGlzLT53aGl0ZWxpc3RGcm9tVXBkYXRlUGFja2FnZXMoJHBhY2thZ2UpOwp9CiR0aGlzLT53aGl0ZWxpc3RGcm9tSm9icygpOwoKJHRoaXMtPnBvb2wtPnNldFdoaXRlbGlzdCgkdGhpcy0+d2hpdGVsaXN0ZWRNYXApOwoKJHRoaXMtPmFkZGVkTWFwID0gYXJyYXkoKTsKZm9yZWFjaCAoJHRoaXMtPmluc3RhbGxlZE1hcCBhcyAkcGFja2FnZSkgewokdGhpcy0+YWRkUnVsZXNGb3JQYWNrYWdlKCRwYWNrYWdlKTsKJHRoaXMtPmFkZFJ1bGVzRm9yVXBkYXRlUGFja2FnZXMoJHBhY2thZ2UpOwp9CgokdGhpcy0+YWRkUnVsZXNGb3JKb2JzKCk7CgpyZXR1cm4gJHRoaXMtPnJ1bGVzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKCgoKY2xhc3MgRGVidWdTb2x2ZXIgZXh0ZW5kcyBTb2x2ZXIKewpwcm90ZWN0ZWQgZnVuY3Rpb24gcHJpbnREZWNpc2lvbk1hcCgpCnsKZWNobyAiXG5EZWNpc2lvbk1hcDogXG4iOwpmb3JlYWNoICgkdGhpcy0+ZGVjaXNpb25NYXAgYXMgJHBhY2thZ2VJZCA9PiAkbGV2ZWwpIHsKaWYgKCRwYWNrYWdlSWQgPT09IDApIHsKY29udGludWU7Cn0KaWYgKCRsZXZlbCA+IDApIHsKZWNobyAnICAgICsnIC4gJHRoaXMtPnBvb2wtPnBhY2thZ2VCeUlkKCRwYWNrYWdlSWQpLiJcbiI7Cn0gZWxzZWlmICgkbGV2ZWwgPCAwKSB7CmVjaG8gJyAgICAtJyAuICR0aGlzLT5wb29sLT5wYWNrYWdlQnlJZCgkcGFja2FnZUlkKS4iXG4iOwp9IGVsc2UgewplY2hvICcgICAgPycgLiAkdGhpcy0+cG9vbC0+cGFja2FnZUJ5SWQoJHBhY2thZ2VJZCkuIlxuIjsKfQp9CmVjaG8gIlxuIjsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHByaW50RGVjaXNpb25RdWV1ZSgpCnsKZWNobyAiRGVjaXNpb25RdWV1ZTogXG4iOwpmb3JlYWNoICgkdGhpcy0+ZGVjaXNpb25RdWV1ZSBhcyAkaSA9PiAkbGl0ZXJhbCkgewplY2hvICcgICAgJyAuICR0aGlzLT5wb29sLT5saXRlcmFsVG9TdHJpbmcoJGxpdGVyYWwpIC4gJyAnIC4gJHRoaXMtPmRlY2lzaW9uUXVldWVXaHlbJGldLiIgbGV2ZWwgIi4kdGhpcy0+ZGVjaXNpb25NYXBbYWJzKCRsaXRlcmFsKV0uIlxuIjsKfQplY2hvICJcbiI7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBwcmludFdhdGNoZXMoKQp7CmVjaG8gIlxuV2F0Y2hlczpcbiI7CmZvcmVhY2ggKCR0aGlzLT53YXRjaGVzIGFzICRsaXRlcmFsSWQgPT4gJHdhdGNoKSB7CmVjaG8gJyAgJy4kdGhpcy0+bGl0ZXJhbEZyb21JZCgkbGl0ZXJhbElkKS4iXG4iOwokcXVldWUgPSBhcnJheShhcnJheSgnICAgICcsICR3YXRjaCkpOwoKd2hpbGUgKCFlbXB0eSgkcXVldWUpKSB7Cmxpc3QoJGluZGVudCwgJHdhdGNoKSA9IGFycmF5X3BvcCgkcXVldWUpOwoKZWNobyAkaW5kZW50LiR3YXRjaDsKCmlmICgkd2F0Y2gpIHsKZWNobyAnIFtpZD0nLiR3YXRjaC0+Z2V0SWQoKS4nLHdhdGNoMT0nLiR0aGlzLT5saXRlcmFsRnJvbUlkKCR3YXRjaC0+d2F0Y2gxKS4nLHdhdGNoMj0nLiR0aGlzLT5saXRlcmFsRnJvbUlkKCR3YXRjaC0+d2F0Y2gyKS4iXSI7Cn0KCmVjaG8gIlxuIjsKCmlmICgkd2F0Y2ggJiYgKCR3YXRjaC0+bmV4dDEgPT0gJHdhdGNoIHx8ICR3YXRjaC0+bmV4dDIgPT0gJHdhdGNoKSkgewppZiAoJHdhdGNoLT5uZXh0MSA9PSAkd2F0Y2gpIHsKZWNobyAkaW5kZW50LiIgICAgMSAqUkVDVVJTSU9OKiI7Cn0KaWYgKCR3YXRjaC0+bmV4dDIgPT0gJHdhdGNoKSB7CmVjaG8gJGluZGVudC4iICAgIDIgKlJFQ1VSU0lPTioiOwp9Cn0gZWxzZWlmICgkd2F0Y2ggJiYgKCR3YXRjaC0+bmV4dDEgfHwgJHdhdGNoLT5uZXh0MikpIHsKJGluZGVudCA9IHN0cl9yZXBsYWNlKGFycmF5KCcxJywgJzInKSwgJyAnLCAkaW5kZW50KTsKCmFycmF5X3B1c2goJHF1ZXVlLCBhcnJheSgkaW5kZW50LicgICAgMiAnLCAkd2F0Y2gtPm5leHQyKSk7CmFycmF5X3B1c2goJHF1ZXVlLCBhcnJheSgkaW5kZW50LicgICAgMSAnLCAkd2F0Y2gtPm5leHQxKSk7Cn0KfQoKZWNobyAiXG4iOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXI7CgoKCgpjbGFzcyBSdWxlU2V0SXRlcmF0b3IgaW1wbGVtZW50cyBcSXRlcmF0b3IKewpwcm90ZWN0ZWQgJHJ1bGVzOwpwcm90ZWN0ZWQgJHR5cGVzOwoKcHJvdGVjdGVkICRjdXJyZW50T2Zmc2V0Owpwcm90ZWN0ZWQgJGN1cnJlbnRUeXBlOwpwcm90ZWN0ZWQgJGN1cnJlbnRUeXBlT2Zmc2V0OwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRydWxlcykKewokdGhpcy0+cnVsZXMgPSAkcnVsZXM7CiR0aGlzLT50eXBlcyA9IGFycmF5X2tleXMoJHJ1bGVzKTsKc29ydCgkdGhpcy0+dHlwZXMpOwoKJHRoaXMtPnJld2luZCgpOwp9CgpwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpCnsKcmV0dXJuICR0aGlzLT5ydWxlc1skdGhpcy0+Y3VycmVudFR5cGVdWyR0aGlzLT5jdXJyZW50T2Zmc2V0XTsKfQoKcHVibGljIGZ1bmN0aW9uIGtleSgpCnsKcmV0dXJuICR0aGlzLT5jdXJyZW50VHlwZTsKfQoKcHVibGljIGZ1bmN0aW9uIG5leHQoKQp7CiR0aGlzLT5jdXJyZW50T2Zmc2V0Kys7CgppZiAoIWlzc2V0KCR0aGlzLT5ydWxlc1skdGhpcy0+Y3VycmVudFR5cGVdKSkgewpyZXR1cm47Cn0KCmlmICgkdGhpcy0+Y3VycmVudE9mZnNldCA+PSBzaXplb2YoJHRoaXMtPnJ1bGVzWyR0aGlzLT5jdXJyZW50VHlwZV0pKSB7CiR0aGlzLT5jdXJyZW50T2Zmc2V0ID0gMDsKCmRvIHsKJHRoaXMtPmN1cnJlbnRUeXBlT2Zmc2V0Kys7CgppZiAoIWlzc2V0KCR0aGlzLT50eXBlc1skdGhpcy0+Y3VycmVudFR5cGVPZmZzZXRdKSkgewokdGhpcy0+Y3VycmVudFR5cGUgPSAtMTsKYnJlYWs7Cn0KCiR0aGlzLT5jdXJyZW50VHlwZSA9ICR0aGlzLT50eXBlc1skdGhpcy0+Y3VycmVudFR5cGVPZmZzZXRdOwp9IHdoaWxlIChpc3NldCgkdGhpcy0+dHlwZXNbJHRoaXMtPmN1cnJlbnRUeXBlT2Zmc2V0XSkgJiYgIXNpemVvZigkdGhpcy0+cnVsZXNbJHRoaXMtPmN1cnJlbnRUeXBlXSkpOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQp7CiR0aGlzLT5jdXJyZW50T2Zmc2V0ID0gMDsKCiR0aGlzLT5jdXJyZW50VHlwZU9mZnNldCA9IC0xOwokdGhpcy0+Y3VycmVudFR5cGUgPSAtMTsKCmRvIHsKJHRoaXMtPmN1cnJlbnRUeXBlT2Zmc2V0Kys7CgppZiAoIWlzc2V0KCR0aGlzLT50eXBlc1skdGhpcy0+Y3VycmVudFR5cGVPZmZzZXRdKSkgewokdGhpcy0+Y3VycmVudFR5cGUgPSAtMTsKYnJlYWs7Cn0KCiR0aGlzLT5jdXJyZW50VHlwZSA9ICR0aGlzLT50eXBlc1skdGhpcy0+Y3VycmVudFR5cGVPZmZzZXRdOwp9IHdoaWxlIChpc3NldCgkdGhpcy0+dHlwZXNbJHRoaXMtPmN1cnJlbnRUeXBlT2Zmc2V0XSkgJiYgIXNpemVvZigkdGhpcy0+cnVsZXNbJHRoaXMtPmN1cnJlbnRUeXBlXSkpOwp9CgpwdWJsaWMgZnVuY3Rpb24gdmFsaWQoKQp7CnJldHVybiBpc3NldCgkdGhpcy0+cnVsZXNbJHRoaXMtPmN1cnJlbnRUeXBlXSkKJiYgaXNzZXQoJHRoaXMtPnJ1bGVzWyR0aGlzLT5jdXJyZW50VHlwZV1bJHRoaXMtPmN1cnJlbnRPZmZzZXRdKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlcjsKCgoKCgoKCgoKY2xhc3MgUnVsZVdhdGNoQ2hhaW4gZXh0ZW5kcyBcU3BsRG91Ymx5TGlua2VkTGlzdAp7CnByb3RlY3RlZCAkb2Zmc2V0ID0gMDsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNlZWsoJG9mZnNldCkKewokdGhpcy0+cmV3aW5kKCk7CmZvciAoJGkgPSAwOyAkaSA8ICRvZmZzZXQ7ICRpKyssICR0aGlzLT5uZXh0KCkpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmUoKQp7CiRvZmZzZXQgPSAkdGhpcy0+a2V5KCk7CiR0aGlzLT5vZmZzZXRVbnNldCgkb2Zmc2V0KTsKJHRoaXMtPnNlZWsoJG9mZnNldCk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXI7Cgp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5SW50ZXJmYWNlOwoKCgoKY2xhc3MgU29sdmVyCnsKY29uc3QgQlJBTkNIX0xJVEVSQUxTID0gMDsKY29uc3QgQlJBTkNIX0xFVkVMID0gMTsKCnByb3RlY3RlZCAkcG9saWN5Owpwcm90ZWN0ZWQgJHBvb2w7CnByb3RlY3RlZCAkaW5zdGFsbGVkOwpwcm90ZWN0ZWQgJHJ1bGVzOwpwcm90ZWN0ZWQgJHJ1bGVTZXRHZW5lcmF0b3I7CnByb3RlY3RlZCAkdXBkYXRlQWxsOwoKcHJvdGVjdGVkICRhZGRlZE1hcCA9IGFycmF5KCk7CnByb3RlY3RlZCAkdXBkYXRlTWFwID0gYXJyYXkoKTsKcHJvdGVjdGVkICR3YXRjaEdyYXBoOwpwcm90ZWN0ZWQgJGRlY2lzaW9uczsKcHJvdGVjdGVkICRpbnN0YWxsZWRNYXA7Cgpwcm90ZWN0ZWQgJHByb3BhZ2F0ZUluZGV4Owpwcm90ZWN0ZWQgJGJyYW5jaGVzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRwcm9ibGVtcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkbGVhcm5lZFBvb2wgPSBhcnJheSgpOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KFBvbGljeUludGVyZmFjZSAkcG9saWN5LCBQb29sICRwb29sLCBSZXBvc2l0b3J5SW50ZXJmYWNlICRpbnN0YWxsZWQpCnsKJHRoaXMtPnBvbGljeSA9ICRwb2xpY3k7CiR0aGlzLT5wb29sID0gJHBvb2w7CiR0aGlzLT5pbnN0YWxsZWQgPSAkaW5zdGFsbGVkOwokdGhpcy0+cnVsZVNldEdlbmVyYXRvciA9IG5ldyBSdWxlU2V0R2VuZXJhdG9yKCRwb2xpY3ksICRwb29sKTsKfQoKCiBwcml2YXRlIGZ1bmN0aW9uIG1ha2VBc3NlcnRpb25SdWxlRGVjaXNpb25zKCkKewokZGVjaXNpb25TdGFydCA9IGNvdW50KCR0aGlzLT5kZWNpc2lvbnMpIC0gMTsKCiRydWxlc0NvdW50ID0gY291bnQoJHRoaXMtPnJ1bGVzKTsKZm9yICgkcnVsZUluZGV4ID0gMDsgJHJ1bGVJbmRleCA8ICRydWxlc0NvdW50OyAkcnVsZUluZGV4KyspIHsKJHJ1bGUgPSAkdGhpcy0+cnVsZXMtPnJ1bGVCeUlkKCRydWxlSW5kZXgpOwoKaWYgKCEkcnVsZS0+aXNBc3NlcnRpb24oKSB8fCAkcnVsZS0+aXNEaXNhYmxlZCgpKSB7CmNvbnRpbnVlOwp9CgokbGl0ZXJhbHMgPSAkcnVsZS0+Z2V0TGl0ZXJhbHMoKTsKJGxpdGVyYWwgPSAkbGl0ZXJhbHNbMF07CgppZiAoISR0aGlzLT5kZWNpc2lvbnMtPmRlY2lkZWQoYWJzKCRsaXRlcmFsKSkpIHsKJHRoaXMtPmRlY2lzaW9ucy0+ZGVjaWRlKCRsaXRlcmFsLCAxLCAkcnVsZSk7CmNvbnRpbnVlOwp9CgppZiAoJHRoaXMtPmRlY2lzaW9ucy0+c2F0aXNmeSgkbGl0ZXJhbCkpIHsKY29udGludWU7Cn0KCgogaWYgKFJ1bGVTZXQ6OlRZUEVfTEVBUk5FRCA9PT0gJHJ1bGUtPmdldFR5cGUoKSkgewokcnVsZS0+ZGlzYWJsZSgpOwpjb250aW51ZTsKfQoKJGNvbmZsaWN0ID0gJHRoaXMtPmRlY2lzaW9ucy0+ZGVjaXNpb25SdWxlKCRsaXRlcmFsKTsKCmlmICgkY29uZmxpY3QgJiYgUnVsZVNldDo6VFlQRV9QQUNLQUdFID09PSAkY29uZmxpY3QtPmdldFR5cGUoKSkgewoKJHByb2JsZW0gPSBuZXcgUHJvYmxlbSgkdGhpcy0+cG9vbCk7CgokcHJvYmxlbS0+YWRkUnVsZSgkcnVsZSk7CiRwcm9ibGVtLT5hZGRSdWxlKCRjb25mbGljdCk7CiR0aGlzLT5kaXNhYmxlUHJvYmxlbSgkcnVsZSk7CiR0aGlzLT5wcm9ibGVtc1tdID0gJHByb2JsZW07CmNvbnRpbnVlOwp9CgoKICRwcm9ibGVtID0gbmV3IFByb2JsZW0oJHRoaXMtPnBvb2wpOwokcHJvYmxlbS0+YWRkUnVsZSgkcnVsZSk7CiRwcm9ibGVtLT5hZGRSdWxlKCRjb25mbGljdCk7CgoKIAogZm9yZWFjaCAoJHRoaXMtPnJ1bGVzLT5nZXRJdGVyYXRvckZvcihSdWxlU2V0OjpUWVBFX0pPQikgYXMgJGFzc2VydFJ1bGUpIHsKaWYgKCRhc3NlcnRSdWxlLT5pc0Rpc2FibGVkKCkgfHwgISRhc3NlcnRSdWxlLT5pc0Fzc2VydGlvbigpKSB7CmNvbnRpbnVlOwp9CgokYXNzZXJ0UnVsZUxpdGVyYWxzID0gJGFzc2VydFJ1bGUtPmdldExpdGVyYWxzKCk7CiRhc3NlcnRSdWxlTGl0ZXJhbCA9ICRhc3NlcnRSdWxlTGl0ZXJhbHNbMF07CgppZiAoYWJzKCRsaXRlcmFsKSAhPT0gYWJzKCRhc3NlcnRSdWxlTGl0ZXJhbCkpIHsKY29udGludWU7Cn0KCiRwcm9ibGVtLT5hZGRSdWxlKCRhc3NlcnRSdWxlKTsKJHRoaXMtPmRpc2FibGVQcm9ibGVtKCRhc3NlcnRSdWxlKTsKfQokdGhpcy0+cHJvYmxlbXNbXSA9ICRwcm9ibGVtOwoKJHRoaXMtPmRlY2lzaW9ucy0+cmVzZXRUb09mZnNldCgkZGVjaXNpb25TdGFydCk7CiRydWxlSW5kZXggPSAtMTsKfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0dXBJbnN0YWxsZWRNYXAoKQp7CiR0aGlzLT5pbnN0YWxsZWRNYXAgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+aW5zdGFsbGVkLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CiR0aGlzLT5pbnN0YWxsZWRNYXBbJHBhY2thZ2UtPmdldElkKCldID0gJHBhY2thZ2U7Cn0KCmZvcmVhY2ggKCR0aGlzLT5qb2JzIGFzICRqb2IpIHsKc3dpdGNoICgkam9iWydjbWQnXSkgewpjYXNlICd1cGRhdGUnOgokcGFja2FnZXMgPSAkdGhpcy0+cG9vbC0+d2hhdFByb3ZpZGVzKCRqb2JbJ3BhY2thZ2VOYW1lJ10sICRqb2JbJ2NvbnN0cmFpbnQnXSk7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewppZiAoaXNzZXQoJHRoaXMtPmluc3RhbGxlZE1hcFskcGFja2FnZS0+Z2V0SWQoKV0pKSB7CiR0aGlzLT51cGRhdGVNYXBbJHBhY2thZ2UtPmdldElkKCldID0gdHJ1ZTsKfQp9CmJyZWFrOwoKY2FzZSAndXBkYXRlLWFsbCc6CmZvcmVhY2ggKCR0aGlzLT5pbnN0YWxsZWRNYXAgYXMgJHBhY2thZ2UpIHsKJHRoaXMtPnVwZGF0ZU1hcFskcGFja2FnZS0+Z2V0SWQoKV0gPSB0cnVlOwp9CmJyZWFrOwoKY2FzZSAnaW5zdGFsbCc6CmlmICghJHRoaXMtPnBvb2wtPndoYXRQcm92aWRlcygkam9iWydwYWNrYWdlTmFtZSddLCAkam9iWydjb25zdHJhaW50J10pKSB7CiRwcm9ibGVtID0gbmV3IFByb2JsZW0oJHRoaXMtPnBvb2wpOwokcHJvYmxlbS0+YWRkUnVsZShuZXcgUnVsZSgkdGhpcy0+cG9vbCwgYXJyYXkoKSwgbnVsbCwgbnVsbCwgJGpvYikpOwokdGhpcy0+cHJvYmxlbXNbXSA9ICRwcm9ibGVtOwp9CmJyZWFrOwp9Cn0KfQoKcHVibGljIGZ1bmN0aW9uIHNvbHZlKFJlcXVlc3QgJHJlcXVlc3QpCnsKJHRoaXMtPmpvYnMgPSAkcmVxdWVzdC0+Z2V0Sm9icygpOwoKJHRoaXMtPnNldHVwSW5zdGFsbGVkTWFwKCk7CgokdGhpcy0+ZGVjaXNpb25zID0gbmV3IERlY2lzaW9ucygkdGhpcy0+cG9vbCk7CgokdGhpcy0+cnVsZXMgPSAkdGhpcy0+cnVsZVNldEdlbmVyYXRvci0+Z2V0UnVsZXNGb3IoJHRoaXMtPmpvYnMsICR0aGlzLT5pbnN0YWxsZWRNYXApOwokdGhpcy0+d2F0Y2hHcmFwaCA9IG5ldyBSdWxlV2F0Y2hHcmFwaDsKCmZvcmVhY2ggKCR0aGlzLT5ydWxlcyBhcyAkcnVsZSkgewokdGhpcy0+d2F0Y2hHcmFwaC0+aW5zZXJ0KG5ldyBSdWxlV2F0Y2hOb2RlKCRydWxlKSk7Cn0KCgokdGhpcy0+bWFrZUFzc2VydGlvblJ1bGVEZWNpc2lvbnMoKTsKCiR0aGlzLT5ydW5TYXQodHJ1ZSk7CgoKIGZvcmVhY2ggKCR0aGlzLT5pbnN0YWxsZWRNYXAgYXMgJHBhY2thZ2VJZCA9PiAkdm9pZCkgewppZiAoJHRoaXMtPmRlY2lzaW9ucy0+dW5kZWNpZGVkKCRwYWNrYWdlSWQpKSB7CiR0aGlzLT5kZWNpc2lvbnMtPmRlY2lkZSgtJHBhY2thZ2VJZCwgMSwgbnVsbCk7Cn0KfQoKaWYgKCR0aGlzLT5wcm9ibGVtcykgewp0aHJvdyBuZXcgU29sdmVyUHJvYmxlbXNFeGNlcHRpb24oJHRoaXMtPnByb2JsZW1zLCAkdGhpcy0+aW5zdGFsbGVkTWFwKTsKfQoKJHRyYW5zYWN0aW9uID0gbmV3IFRyYW5zYWN0aW9uKCR0aGlzLT5wb2xpY3ksICR0aGlzLT5wb29sLCAkdGhpcy0+aW5zdGFsbGVkTWFwLCAkdGhpcy0+ZGVjaXNpb25zKTsKCnJldHVybiAkdHJhbnNhY3Rpb24tPmdldE9wZXJhdGlvbnMoKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGxpdGVyYWxGcm9tSWQoJGlkKQp7CiRwYWNrYWdlID0gJHRoaXMtPnBvb2wtPnBhY2thZ2VCeUlkKGFicygkaWQpKTsKCnJldHVybiBuZXcgTGl0ZXJhbCgkcGFja2FnZSwgJGlkID4gMCk7Cn0KCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwcm9wYWdhdGUoJGxldmVsKQp7CndoaWxlICgkdGhpcy0+ZGVjaXNpb25zLT52YWxpZE9mZnNldCgkdGhpcy0+cHJvcGFnYXRlSW5kZXgpKSB7CiRkZWNpc2lvbiA9ICR0aGlzLT5kZWNpc2lvbnMtPmF0T2Zmc2V0KCR0aGlzLT5wcm9wYWdhdGVJbmRleCk7CgokY29uZmxpY3QgPSAkdGhpcy0+d2F0Y2hHcmFwaC0+cHJvcGFnYXRlTGl0ZXJhbCgKJGRlY2lzaW9uW0RlY2lzaW9uczo6REVDSVNJT05fTElURVJBTF0sCiRsZXZlbCwKJHRoaXMtPmRlY2lzaW9ucwopOwoKJHRoaXMtPnByb3BhZ2F0ZUluZGV4Kys7CgppZiAoJGNvbmZsaWN0KSB7CnJldHVybiAkY29uZmxpY3Q7Cn0KfQoKcmV0dXJuIG51bGw7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gcmV2ZXJ0KCRsZXZlbCkKewp3aGlsZSAoISR0aGlzLT5kZWNpc2lvbnMtPmlzRW1wdHkoKSkgewokbGl0ZXJhbCA9ICR0aGlzLT5kZWNpc2lvbnMtPmxhc3RMaXRlcmFsKCk7CgppZiAoJHRoaXMtPmRlY2lzaW9ucy0+dW5kZWNpZGVkKCRsaXRlcmFsKSkgewpicmVhazsKfQoKJGRlY2lzaW9uTGV2ZWwgPSAkdGhpcy0+ZGVjaXNpb25zLT5kZWNpc2lvbkxldmVsKCRsaXRlcmFsKTsKCmlmICgkZGVjaXNpb25MZXZlbCA8PSAkbGV2ZWwpIHsKYnJlYWs7Cn0KCiR0aGlzLT5kZWNpc2lvbnMtPnJldmVydExhc3QoKTsKJHRoaXMtPnByb3BhZ2F0ZUluZGV4ID0gY291bnQoJHRoaXMtPmRlY2lzaW9ucyk7Cn0KCndoaWxlICghZW1wdHkoJHRoaXMtPmJyYW5jaGVzKSAmJiAkdGhpcy0+YnJhbmNoZXNbY291bnQoJHRoaXMtPmJyYW5jaGVzKSAtIDFdW3NlbGY6OkJSQU5DSF9MRVZFTF0gPj0gJGxldmVsKSB7CmFycmF5X3BvcCgkdGhpcy0+YnJhbmNoZXMpOwp9Cn0KCgoKCgoKCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gc2V0UHJvcGFnYXRlTGVhcm4oJGxldmVsLCAkbGl0ZXJhbCwgJGRpc2FibGVSdWxlcywgUnVsZSAkcnVsZSkKewokbGV2ZWwrKzsKCiR0aGlzLT5kZWNpc2lvbnMtPmRlY2lkZSgkbGl0ZXJhbCwgJGxldmVsLCAkcnVsZSk7Cgp3aGlsZSAodHJ1ZSkgewokcnVsZSA9ICR0aGlzLT5wcm9wYWdhdGUoJGxldmVsKTsKCmlmICghJHJ1bGUpIHsKYnJlYWs7Cn0KCmlmICgkbGV2ZWwgPT0gMSkgewpyZXR1cm4gJHRoaXMtPmFuYWx5emVVbnNvbHZhYmxlKCRydWxlLCAkZGlzYWJsZVJ1bGVzKTsKfQoKCiBsaXN0KCRsZWFybkxpdGVyYWwsICRuZXdMZXZlbCwgJG5ld1J1bGUsICR3aHkpID0gJHRoaXMtPmFuYWx5emUoJGxldmVsLCAkcnVsZSk7CgppZiAoJG5ld0xldmVsIDw9IDAgfHwgJG5ld0xldmVsID49ICRsZXZlbCkgewp0aHJvdyBuZXcgU29sdmVyQnVnRXhjZXB0aW9uKAoiVHJ5aW5nIHRvIHJldmVydCB0byBpbnZhbGlkIGxldmVsICIuKGludCkgJG5ld0xldmVsLiIgZnJvbSBsZXZlbCAiLihpbnQpICRsZXZlbC4iLiIKKTsKfSBlbHNlaWYgKCEkbmV3UnVsZSkgewp0aHJvdyBuZXcgU29sdmVyQnVnRXhjZXB0aW9uKAoiTm8gcnVsZSB3YXMgbGVhcm5lZCBmcm9tIGFuYWx5emluZyAkcnVsZSBhdCBsZXZlbCAkbGV2ZWwuIgopOwp9CgokbGV2ZWwgPSAkbmV3TGV2ZWw7CgokdGhpcy0+cmV2ZXJ0KCRsZXZlbCk7CgokdGhpcy0+cnVsZXMtPmFkZCgkbmV3UnVsZSwgUnVsZVNldDo6VFlQRV9MRUFSTkVEKTsKCiR0aGlzLT5sZWFybmVkV2h5WyRuZXdSdWxlLT5nZXRJZCgpXSA9ICR3aHk7CgokcnVsZU5vZGUgPSBuZXcgUnVsZVdhdGNoTm9kZSgkbmV3UnVsZSk7CiRydWxlTm9kZS0+d2F0Y2gyT25IaWdoZXN0KCR0aGlzLT5kZWNpc2lvbnMpOwokdGhpcy0+d2F0Y2hHcmFwaC0+aW5zZXJ0KCRydWxlTm9kZSk7CgokdGhpcy0+ZGVjaXNpb25zLT5kZWNpZGUoJGxlYXJuTGl0ZXJhbCwgJGxldmVsLCAkbmV3UnVsZSk7Cn0KCnJldHVybiAkbGV2ZWw7Cn0KCnByaXZhdGUgZnVuY3Rpb24gc2VsZWN0QW5kSW5zdGFsbCgkbGV2ZWwsIGFycmF5ICRkZWNpc2lvblF1ZXVlLCAkZGlzYWJsZVJ1bGVzLCBSdWxlICRydWxlKQp7CgogJGxpdGVyYWxzID0gJHRoaXMtPnBvbGljeS0+c2VsZWN0UHJlZmVyZWRQYWNrYWdlcygkdGhpcy0+cG9vbCwgJHRoaXMtPmluc3RhbGxlZE1hcCwgJGRlY2lzaW9uUXVldWUsICRydWxlLT5nZXRSZXF1aXJlZFBhY2thZ2UoKSk7Cgokc2VsZWN0ZWRMaXRlcmFsID0gYXJyYXlfc2hpZnQoJGxpdGVyYWxzKTsKCgogaWYgKGNvdW50KCRsaXRlcmFscykpIHsKJHRoaXMtPmJyYW5jaGVzW10gPSBhcnJheSgkbGl0ZXJhbHMsICRsZXZlbCk7Cn0KCnJldHVybiAkdGhpcy0+c2V0UHJvcGFnYXRlTGVhcm4oJGxldmVsLCAkc2VsZWN0ZWRMaXRlcmFsLCAkZGlzYWJsZVJ1bGVzLCAkcnVsZSk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBhbmFseXplKCRsZXZlbCwgJHJ1bGUpCnsKJGFuYWx5emVkUnVsZSA9ICRydWxlOwokcnVsZUxldmVsID0gMTsKJG51bSA9IDA7CiRsMW51bSA9IDA7CiRzZWVuID0gYXJyYXkoKTsKJGxlYXJuZWRMaXRlcmFscyA9IGFycmF5KG51bGwpOwoKJGRlY2lzaW9uSWQgPSBjb3VudCgkdGhpcy0+ZGVjaXNpb25zKTsKCiR0aGlzLT5sZWFybmVkUG9vbFtdID0gYXJyYXkoKTsKCndoaWxlICh0cnVlKSB7CiR0aGlzLT5sZWFybmVkUG9vbFtjb3VudCgkdGhpcy0+bGVhcm5lZFBvb2wpIC0gMV1bXSA9ICRydWxlOwoKZm9yZWFjaCAoJHJ1bGUtPmdldExpdGVyYWxzKCkgYXMgJGxpdGVyYWwpIHsKCiBpZiAoJHRoaXMtPmRlY2lzaW9ucy0+c2F0aXNmeSgkbGl0ZXJhbCkpIHsKY29udGludWU7Cn0KCmlmIChpc3NldCgkc2VlblthYnMoJGxpdGVyYWwpXSkpIHsKY29udGludWU7Cn0KJHNlZW5bYWJzKCRsaXRlcmFsKV0gPSB0cnVlOwoKJGwgPSAkdGhpcy0+ZGVjaXNpb25zLT5kZWNpc2lvbkxldmVsKCRsaXRlcmFsKTsKCmlmICgxID09PSAkbCkgewokbDFudW0rKzsKfSBlbHNlaWYgKCRsZXZlbCA9PT0gJGwpIHsKJG51bSsrOwp9IGVsc2UgewoKICRsZWFybmVkTGl0ZXJhbHNbXSA9ICRsaXRlcmFsOwoKaWYgKCRsID4gJHJ1bGVMZXZlbCkgewokcnVsZUxldmVsID0gJGw7Cn0KfQp9CgokbDFyZXRyeSA9IHRydWU7CndoaWxlICgkbDFyZXRyeSkgewokbDFyZXRyeSA9IGZhbHNlOwoKaWYgKCEkbnVtICYmICEtLSRsMW51bSkgewoKIGJyZWFrIDI7Cn0KCndoaWxlICh0cnVlKSB7CmlmICgkZGVjaXNpb25JZCA8PSAwKSB7CnRocm93IG5ldyBTb2x2ZXJCdWdFeGNlcHRpb24oCiJSZWFjaGVkIGludmFsaWQgZGVjaXNpb24gaWQgJGRlY2lzaW9uSWQgd2hpbGUgbG9va2luZyB0aHJvdWdoICRydWxlIGZvciBhIGxpdGVyYWwgcHJlc2VudCBpbiB0aGUgYW5hbHl6ZWQgcnVsZSAkYW5hbHl6ZWRSdWxlLiIKKTsKfQoKJGRlY2lzaW9uSWQtLTsKCiRkZWNpc2lvbiA9ICR0aGlzLT5kZWNpc2lvbnMtPmF0T2Zmc2V0KCRkZWNpc2lvbklkKTsKJGxpdGVyYWwgPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9MSVRFUkFMXTsKCmlmIChpc3NldCgkc2VlblthYnMoJGxpdGVyYWwpXSkpIHsKYnJlYWs7Cn0KfQoKdW5zZXQoJHNlZW5bYWJzKCRsaXRlcmFsKV0pOwoKaWYgKCRudW0gJiYgMCA9PT0gLS0kbnVtKSB7CiRsZWFybmVkTGl0ZXJhbHNbMF0gPSAtYWJzKCRsaXRlcmFsKTsKCmlmICghJGwxbnVtKSB7CmJyZWFrIDI7Cn0KCmZvcmVhY2ggKCRsZWFybmVkTGl0ZXJhbHMgYXMgJGkgPT4gJGxlYXJuZWRMaXRlcmFsKSB7CmlmICgkaSAhPT0gMCkgewp1bnNldCgkc2VlblthYnMoJGxlYXJuZWRMaXRlcmFsKV0pOwp9Cn0KCiAkbDFudW0rKzsKJGwxcmV0cnkgPSB0cnVlOwp9Cn0KCiRkZWNpc2lvbiA9ICR0aGlzLT5kZWNpc2lvbnMtPmF0T2Zmc2V0KCRkZWNpc2lvbklkKTsKJHJ1bGUgPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9SRUFTT05dOwp9Cgokd2h5ID0gY291bnQoJHRoaXMtPmxlYXJuZWRQb29sKSAtIDE7CgppZiAoISRsZWFybmVkTGl0ZXJhbHNbMF0pIHsKdGhyb3cgbmV3IFNvbHZlckJ1Z0V4Y2VwdGlvbigKIkRpZCBub3QgZmluZCBhIGxlYXJuYWJsZSBsaXRlcmFsIGluIGFuYWx5emVkIHJ1bGUgJGFuYWx5emVkUnVsZS4iCik7Cn0KCiRuZXdSdWxlID0gbmV3IFJ1bGUoJHRoaXMtPnBvb2wsICRsZWFybmVkTGl0ZXJhbHMsIFJ1bGU6OlJVTEVfTEVBUk5FRCwgJHdoeSk7CgpyZXR1cm4gYXJyYXkoJGxlYXJuZWRMaXRlcmFsc1swXSwgJHJ1bGVMZXZlbCwgJG5ld1J1bGUsICR3aHkpOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGFuYWx5emVVbnNvbHZhYmxlUnVsZSgkcHJvYmxlbSwgJGNvbmZsaWN0UnVsZSkKewokd2h5ID0gJGNvbmZsaWN0UnVsZS0+Z2V0SWQoKTsKCmlmICgkY29uZmxpY3RSdWxlLT5nZXRUeXBlKCkgPT0gUnVsZVNldDo6VFlQRV9MRUFSTkVEKSB7CiRsZWFybmVkV2h5ID0gJHRoaXMtPmxlYXJuZWRXaHlbJHdoeV07CiRwcm9ibGVtUnVsZXMgPSAkdGhpcy0+bGVhcm5lZFBvb2xbJGxlYXJuZWRXaHldOwoKZm9yZWFjaCAoJHByb2JsZW1SdWxlcyBhcyAkcHJvYmxlbVJ1bGUpIHsKJHRoaXMtPmFuYWx5emVVbnNvbHZhYmxlUnVsZSgkcHJvYmxlbSwgJHByb2JsZW1SdWxlKTsKfQoKcmV0dXJuOwp9CgppZiAoJGNvbmZsaWN0UnVsZS0+Z2V0VHlwZSgpID09IFJ1bGVTZXQ6OlRZUEVfUEFDS0FHRSkgewoKIHJldHVybjsKfQoKJHByb2JsZW0tPm5leHRTZWN0aW9uKCk7CiRwcm9ibGVtLT5hZGRSdWxlKCRjb25mbGljdFJ1bGUpOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGFuYWx5emVVbnNvbHZhYmxlKCRjb25mbGljdFJ1bGUsICRkaXNhYmxlUnVsZXMpCnsKJHByb2JsZW0gPSBuZXcgUHJvYmxlbSgkdGhpcy0+cG9vbCk7CiRwcm9ibGVtLT5hZGRSdWxlKCRjb25mbGljdFJ1bGUpOwoKJHRoaXMtPmFuYWx5emVVbnNvbHZhYmxlUnVsZSgkcHJvYmxlbSwgJGNvbmZsaWN0UnVsZSk7CgokdGhpcy0+cHJvYmxlbXNbXSA9ICRwcm9ibGVtOwoKJHNlZW4gPSBhcnJheSgpOwokbGl0ZXJhbHMgPSAkY29uZmxpY3RSdWxlLT5nZXRMaXRlcmFscygpOwoKZm9yZWFjaCAoJGxpdGVyYWxzIGFzICRsaXRlcmFsKSB7CgogaWYgKCR0aGlzLT5kZWNpc2lvbnMtPnNhdGlzZnkoJGxpdGVyYWwpKSB7CmNvbnRpbnVlOwp9CiRzZWVuW2FicygkbGl0ZXJhbCldID0gdHJ1ZTsKfQoKZm9yZWFjaCAoJHRoaXMtPmRlY2lzaW9ucyBhcyAkZGVjaXNpb24pIHsKJGxpdGVyYWwgPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9MSVRFUkFMXTsKCgogaWYgKCFpc3NldCgkc2VlblthYnMoJGxpdGVyYWwpXSkpIHsKY29udGludWU7Cn0KCiR3aHkgPSAkZGVjaXNpb25bRGVjaXNpb25zOjpERUNJU0lPTl9SRUFTT05dOwoKJHByb2JsZW0tPmFkZFJ1bGUoJHdoeSk7CiR0aGlzLT5hbmFseXplVW5zb2x2YWJsZVJ1bGUoJHByb2JsZW0sICR3aHkpOwoKJGxpdGVyYWxzID0gJHdoeS0+Z2V0TGl0ZXJhbHMoKTsKCmZvcmVhY2ggKCRsaXRlcmFscyBhcyAkbGl0ZXJhbCkgewoKIGlmICgkdGhpcy0+ZGVjaXNpb25zLT5zYXRpc2Z5KCRsaXRlcmFsKSkgewpjb250aW51ZTsKfQokc2VlblthYnMoJGxpdGVyYWwpXSA9IHRydWU7Cn0KfQoKaWYgKCRkaXNhYmxlUnVsZXMpIHsKZm9yZWFjaCAoJHRoaXMtPnByb2JsZW1zW2NvdW50KCR0aGlzLT5wcm9ibGVtcykgLSAxXSBhcyAkcmVhc29uKSB7CiR0aGlzLT5kaXNhYmxlUHJvYmxlbSgkcmVhc29uWydydWxlJ10pOwp9CgokdGhpcy0+cmVzZXRTb2x2ZXIoKTsKCnJldHVybiAxOwp9CgpyZXR1cm4gMDsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBkaXNhYmxlUHJvYmxlbSgkd2h5KQp7CiRqb2IgPSAkd2h5LT5nZXRKb2IoKTsKCmlmICghJGpvYikgewokd2h5LT5kaXNhYmxlKCk7CgpyZXR1cm47Cn0KCgogZm9yZWFjaCAoJHRoaXMtPnJ1bGVzIGFzICRydWxlKSB7CmlmICgkam9iID09PSAkcnVsZS0+Z2V0Sm9iKCkpIHsKJHJ1bGUtPmRpc2FibGUoKTsKfQp9Cn0KCnByaXZhdGUgZnVuY3Rpb24gcmVzZXRTb2x2ZXIoKQp7CiR0aGlzLT5kZWNpc2lvbnMtPnJlc2V0KCk7CgokdGhpcy0+cHJvcGFnYXRlSW5kZXggPSAwOwokdGhpcy0+YnJhbmNoZXMgPSBhcnJheSgpOwoKJHRoaXMtPmVuYWJsZURpc2FibGVMZWFybmVkUnVsZXMoKTsKJHRoaXMtPm1ha2VBc3NlcnRpb25SdWxlRGVjaXNpb25zKCk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGVuYWJsZURpc2FibGVMZWFybmVkUnVsZXMoKQp7CmZvcmVhY2ggKCR0aGlzLT5ydWxlcy0+Z2V0SXRlcmF0b3JGb3IoUnVsZVNldDo6VFlQRV9MRUFSTkVEKSBhcyAkcnVsZSkgewokd2h5ID0gJHRoaXMtPmxlYXJuZWRXaHlbJHJ1bGUtPmdldElkKCldOwokcHJvYmxlbVJ1bGVzID0gJHRoaXMtPmxlYXJuZWRQb29sWyR3aHldOwoKJGZvdW5kRGlzYWJsZWQgPSBmYWxzZTsKZm9yZWFjaCAoJHByb2JsZW1SdWxlcyBhcyAkcHJvYmxlbVJ1bGUpIHsKaWYgKCRwcm9ibGVtUnVsZS0+aXNEaXNhYmxlZCgpKSB7CiRmb3VuZERpc2FibGVkID0gdHJ1ZTsKYnJlYWs7Cn0KfQoKaWYgKCRmb3VuZERpc2FibGVkICYmICRydWxlLT5pc0VuYWJsZWQoKSkgewokcnVsZS0+ZGlzYWJsZSgpOwp9IGVsc2VpZiAoISRmb3VuZERpc2FibGVkICYmICRydWxlLT5pc0Rpc2FibGVkKCkpIHsKJHJ1bGUtPmVuYWJsZSgpOwp9Cn0KfQoKcHJpdmF0ZSBmdW5jdGlvbiBydW5TYXQoJGRpc2FibGVSdWxlcyA9IHRydWUpCnsKJHRoaXMtPnByb3BhZ2F0ZUluZGV4ID0gMDsKCgogCiAKIAogCiAKIAogCiAKCiRkZWNpc2lvblF1ZXVlID0gYXJyYXkoKTsKJGRlY2lzaW9uU3VwcGxlbWVudFF1ZXVlID0gYXJyYXkoKTsKJGRpc2FibGVSdWxlcyA9IGFycmF5KCk7CgokbGV2ZWwgPSAxOwokc3lzdGVtTGV2ZWwgPSAkbGV2ZWwgKyAxOwokaW5zdGFsbGVkUG9zID0gMDsKCndoaWxlICh0cnVlKSB7CgppZiAoMSA9PT0gJGxldmVsKSB7CiRjb25mbGljdFJ1bGUgPSAkdGhpcy0+cHJvcGFnYXRlKCRsZXZlbCk7CmlmIChudWxsICE9PSAkY29uZmxpY3RSdWxlKSB7CmlmICgkdGhpcy0+YW5hbHl6ZVVuc29sdmFibGUoJGNvbmZsaWN0UnVsZSwgJGRpc2FibGVSdWxlcykpIHsKY29udGludWU7Cn0KCnJldHVybjsKfQp9CgoKIGlmICgkbGV2ZWwgPCAkc3lzdGVtTGV2ZWwpIHsKJGl0ZXJhdG9yID0gJHRoaXMtPnJ1bGVzLT5nZXRJdGVyYXRvckZvcihSdWxlU2V0OjpUWVBFX0pPQik7CmZvcmVhY2ggKCRpdGVyYXRvciBhcyAkcnVsZSkgewppZiAoJHJ1bGUtPmlzRW5hYmxlZCgpKSB7CiRkZWNpc2lvblF1ZXVlID0gYXJyYXkoKTsKJG5vbmVTYXRpc2ZpZWQgPSB0cnVlOwoKZm9yZWFjaCAoJHJ1bGUtPmdldExpdGVyYWxzKCkgYXMgJGxpdGVyYWwpIHsKaWYgKCR0aGlzLT5kZWNpc2lvbnMtPnNhdGlzZnkoJGxpdGVyYWwpKSB7CiRub25lU2F0aXNmaWVkID0gZmFsc2U7CmJyZWFrOwp9CmlmICgkbGl0ZXJhbCA+IDAgJiYgJHRoaXMtPmRlY2lzaW9ucy0+dW5kZWNpZGVkKCRsaXRlcmFsKSkgewokZGVjaXNpb25RdWV1ZVtdID0gJGxpdGVyYWw7Cn0KfQoKaWYgKCRub25lU2F0aXNmaWVkICYmIGNvdW50KCRkZWNpc2lvblF1ZXVlKSkgewoKIAogaWYgKGNvdW50KCR0aGlzLT5pbnN0YWxsZWQpICE9IGNvdW50KCR0aGlzLT51cGRhdGVNYXApKSB7CiRwcnVuZWRRdWV1ZSA9IGFycmF5KCk7CmZvcmVhY2ggKCRkZWNpc2lvblF1ZXVlIGFzICRsaXRlcmFsKSB7CmlmIChpc3NldCgkdGhpcy0+aW5zdGFsbGVkTWFwW2FicygkbGl0ZXJhbCldKSkgewokcHJ1bmVkUXVldWVbXSA9ICRsaXRlcmFsOwppZiAoaXNzZXQoJHRoaXMtPnVwZGF0ZU1hcFthYnMoJGxpdGVyYWwpXSkpIHsKJHBydW5lZFF1ZXVlID0gJGRlY2lzaW9uUXVldWU7CmJyZWFrOwp9Cn0KfQokZGVjaXNpb25RdWV1ZSA9ICRwcnVuZWRRdWV1ZTsKfQp9CgppZiAoJG5vbmVTYXRpc2ZpZWQgJiYgY291bnQoJGRlY2lzaW9uUXVldWUpKSB7Cgokb0xldmVsID0gJGxldmVsOwokbGV2ZWwgPSAkdGhpcy0+c2VsZWN0QW5kSW5zdGFsbCgkbGV2ZWwsICRkZWNpc2lvblF1ZXVlLCAkZGlzYWJsZVJ1bGVzLCAkcnVsZSk7CgppZiAoMCA9PT0gJGxldmVsKSB7CnJldHVybjsKfQppZiAoJGxldmVsIDw9ICRvTGV2ZWwpIHsKYnJlYWs7Cn0KfQp9Cn0KCiRzeXN0ZW1MZXZlbCA9ICRsZXZlbCArIDE7CgoKICRpdGVyYXRvci0+bmV4dCgpOwppZiAoJGl0ZXJhdG9yLT52YWxpZCgpKSB7CmNvbnRpbnVlOwp9Cn0KCmlmICgkbGV2ZWwgPCAkc3lzdGVtTGV2ZWwpIHsKJHN5c3RlbUxldmVsID0gJGxldmVsOwp9Cgpmb3IgKCRpID0gMCwgJG4gPSAwOyAkbiA8IGNvdW50KCR0aGlzLT5ydWxlcyk7ICRpKyssICRuKyspIHsKaWYgKCRpID09IGNvdW50KCR0aGlzLT5ydWxlcykpIHsKJGkgPSAwOwp9CgokcnVsZSA9ICR0aGlzLT5ydWxlcy0+cnVsZUJ5SWQoJGkpOwokbGl0ZXJhbHMgPSAkcnVsZS0+Z2V0TGl0ZXJhbHMoKTsKCmlmICgkcnVsZS0+aXNEaXNhYmxlZCgpKSB7CmNvbnRpbnVlOwp9CgokZGVjaXNpb25RdWV1ZSA9IGFycmF5KCk7CgoKIAogCiAKIAogCiBmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJGxpdGVyYWwpIHsKaWYgKCRsaXRlcmFsIDw9IDApIHsKaWYgKCEkdGhpcy0+ZGVjaXNpb25zLT5kZWNpZGVkSW5zdGFsbChhYnMoJGxpdGVyYWwpKSkgewpjb250aW51ZSAyOyAKIH0KfSBlbHNlIHsKaWYgKCR0aGlzLT5kZWNpc2lvbnMtPmRlY2lkZWRJbnN0YWxsKGFicygkbGl0ZXJhbCkpKSB7CmNvbnRpbnVlIDI7IAogfQppZiAoJHRoaXMtPmRlY2lzaW9ucy0+dW5kZWNpZGVkKGFicygkbGl0ZXJhbCkpKSB7CiRkZWNpc2lvblF1ZXVlW10gPSAkbGl0ZXJhbDsKfQp9Cn0KCgogaWYgKGNvdW50KCRkZWNpc2lvblF1ZXVlKSA8IDIpIHsKY29udGludWU7Cn0KCiRvTGV2ZWwgPSAkbGV2ZWw7CiRsZXZlbCA9ICR0aGlzLT5zZWxlY3RBbmRJbnN0YWxsKCRsZXZlbCwgJGRlY2lzaW9uUXVldWUsICRkaXNhYmxlUnVsZXMsICRydWxlKTsKCmlmICgwID09PSAkbGV2ZWwpIHsKcmV0dXJuOwp9CgoKICRuID0gLTE7Cn0KCmlmICgkbGV2ZWwgPCAkc3lzdGVtTGV2ZWwpIHsKY29udGludWU7Cn0KCgogaWYgKGNvdW50KCR0aGlzLT5icmFuY2hlcykpIHsKCiRsYXN0TGl0ZXJhbCA9IG51bGw7CiRsYXN0TGV2ZWwgPSBudWxsOwokbGFzdEJyYW5jaEluZGV4ID0gMDsKJGxhc3RCcmFuY2hPZmZzZXQgPSAwOwokbCA9IDA7Cgpmb3IgKCRpID0gY291bnQoJHRoaXMtPmJyYW5jaGVzKSAtIDE7ICRpID49IDA7ICRpLS0pIHsKbGlzdCgkbGl0ZXJhbHMsICRsKSA9ICR0aGlzLT5icmFuY2hlc1skaV07Cgpmb3JlYWNoICgkbGl0ZXJhbHMgYXMgJG9mZnNldCA9PiAkbGl0ZXJhbCkgewppZiAoJGxpdGVyYWwgJiYgJGxpdGVyYWwgPiAwICYmICR0aGlzLT5kZWNpc2lvbnMtPmRlY2lzaW9uTGV2ZWwoJGxpdGVyYWwpID4gJGwgKyAxKSB7CiRsYXN0TGl0ZXJhbCA9ICRsaXRlcmFsOwokbGFzdEJyYW5jaEluZGV4ID0gJGk7CiRsYXN0QnJhbmNoT2Zmc2V0ID0gJG9mZnNldDsKJGxhc3RMZXZlbCA9ICRsOwp9Cn0KfQoKaWYgKCRsYXN0TGl0ZXJhbCkgewp1bnNldCgkdGhpcy0+YnJhbmNoZXNbJGxhc3RCcmFuY2hJbmRleF1bc2VsZjo6QlJBTkNIX0xJVEVSQUxTXVskbGFzdEJyYW5jaE9mZnNldF0pOwoKJGxldmVsID0gJGxhc3RMZXZlbDsKJHRoaXMtPnJldmVydCgkbGV2ZWwpOwoKJHdoeSA9ICR0aGlzLT5kZWNpc2lvbnMtPmxhc3RSZWFzb24oKTsKCiRvTGV2ZWwgPSAkbGV2ZWw7CiRsZXZlbCA9ICR0aGlzLT5zZXRQcm9wYWdhdGVMZWFybigkbGV2ZWwsICRsYXN0TGl0ZXJhbCwgJGRpc2FibGVSdWxlcywgJHdoeSk7CgppZiAoJGxldmVsID09IDApIHsKcmV0dXJuOwp9Cgpjb250aW51ZTsKfQp9CgpicmVhazsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcTGlua0NvbnN0cmFpbnRcTGlua0NvbnN0cmFpbnRJbnRlcmZhY2U7CgoKCgpjbGFzcyBSZXF1ZXN0CnsKcHJvdGVjdGVkICRqb2JzOwpwcm90ZWN0ZWQgJHBvb2w7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUG9vbCAkcG9vbCkKewokdGhpcy0+cG9vbCA9ICRwb29sOwokdGhpcy0+am9icyA9IGFycmF5KCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKCRwYWNrYWdlTmFtZSwgTGlua0NvbnN0cmFpbnRJbnRlcmZhY2UgJGNvbnN0cmFpbnQgPSBudWxsKQp7CiR0aGlzLT5hZGRKb2IoJHBhY2thZ2VOYW1lLCAnaW5zdGFsbCcsICRjb25zdHJhaW50KTsKfQoKcHVibGljIGZ1bmN0aW9uIHVwZGF0ZSgkcGFja2FnZU5hbWUsIExpbmtDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50ID0gbnVsbCkKewokdGhpcy0+YWRkSm9iKCRwYWNrYWdlTmFtZSwgJ3VwZGF0ZScsICRjb25zdHJhaW50KTsKfQoKcHVibGljIGZ1bmN0aW9uIHJlbW92ZSgkcGFja2FnZU5hbWUsIExpbmtDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50ID0gbnVsbCkKewokdGhpcy0+YWRkSm9iKCRwYWNrYWdlTmFtZSwgJ3JlbW92ZScsICRjb25zdHJhaW50KTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZEpvYigkcGFja2FnZU5hbWUsICRjbWQsIExpbmtDb25zdHJhaW50SW50ZXJmYWNlICRjb25zdHJhaW50ID0gbnVsbCkKewokcGFja2FnZU5hbWUgPSBzdHJ0b2xvd2VyKCRwYWNrYWdlTmFtZSk7CgokdGhpcy0+am9ic1tdID0gYXJyYXkoCidjbWQnID0+ICRjbWQsCidwYWNrYWdlTmFtZScgPT4gJHBhY2thZ2VOYW1lLAonY29uc3RyYWludCcgPT4gJGNvbnN0cmFpbnQsCik7Cn0KCnB1YmxpYyBmdW5jdGlvbiB1cGRhdGVBbGwoKQp7CiR0aGlzLT5qb2JzW10gPSBhcnJheSgnY21kJyA9PiAndXBkYXRlLWFsbCcpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Sm9icygpCnsKcmV0dXJuICR0aGlzLT5qb2JzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKCgoKCgpjbGFzcyBQcm9ibGVtCnsKCgoKCnByb3RlY3RlZCAkcmVhc29uU2VlbjsKCgoKCgpwcm90ZWN0ZWQgJHJlYXNvbnMgPSBhcnJheSgpOwoKcHJvdGVjdGVkICRzZWN0aW9uID0gMDsKCnByb3RlY3RlZCAkcG9vbDsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChQb29sICRwb29sKQp7CiR0aGlzLT5wb29sID0gJHBvb2w7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFJ1bGUoUnVsZSAkcnVsZSkKewokdGhpcy0+YWRkUmVhc29uKCRydWxlLT5nZXRJZCgpLCBhcnJheSgKJ3J1bGUnID0+ICRydWxlLAonam9iJyA9PiAkcnVsZS0+Z2V0Sm9iKCksCikpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZWFzb25zKCkKewpyZXR1cm4gJHRoaXMtPnJlYXNvbnM7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmV0dHlTdHJpbmcoYXJyYXkgJGluc3RhbGxlZE1hcCA9IGFycmF5KCkpCnsKJHJlYXNvbnMgPSBjYWxsX3VzZXJfZnVuY19hcnJheSgnYXJyYXlfbWVyZ2UnLCBhcnJheV9yZXZlcnNlKCR0aGlzLT5yZWFzb25zKSk7CgppZiAoY291bnQoJHJlYXNvbnMpID09PSAxKSB7CnJlc2V0KCRyZWFzb25zKTsKJHJlYXNvbiA9IGN1cnJlbnQoJHJlYXNvbnMpOwoKJHJ1bGUgPSAkcmVhc29uWydydWxlJ107CiRqb2IgPSAkcmVhc29uWydqb2InXTsKCmlmIChpc3NldCgkam9iWydjb25zdHJhaW50J10pKSB7CiRwYWNrYWdlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGpvYlsncGFja2FnZU5hbWUnXSwgJGpvYlsnY29uc3RyYWludCddKTsKfSBlbHNlIHsKJHBhY2thZ2VzID0gYXJyYXkoKTsKfQoKaWYgKCRqb2IgJiYgJGpvYlsnY21kJ10gPT09ICdpbnN0YWxsJyAmJiBlbXB0eSgkcGFja2FnZXMpKSB7CgogaWYgKDAgPT09IHN0cmlwb3MoJGpvYlsncGFja2FnZU5hbWUnXSwgJ2V4dC0nKSkgewokZXh0ID0gc3Vic3RyKCRqb2JbJ3BhY2thZ2VOYW1lJ10sIDQpOwokZXJyb3IgPSBleHRlbnNpb25fbG9hZGVkKCRleHQpID8gJ2hhcyB0aGUgd3JvbmcgdmVyc2lvbiAoJy4ocGhwdmVyc2lvbigkZXh0KSA/OiAnMCcpLicpIGluc3RhbGxlZCcgOiAnaXMgbWlzc2luZyBmcm9tIHlvdXIgc3lzdGVtJzsKCnJldHVybiAiXG4gICAgLSBUaGUgcmVxdWVzdGVkIFBIUCBleHRlbnNpb24gIi4kam9iWydwYWNrYWdlTmFtZSddLiR0aGlzLT5jb25zdHJhaW50VG9UZXh0KCRqb2JbJ2NvbnN0cmFpbnQnXSkuJyAnLiRlcnJvci4nLic7Cn0KCgogaWYgKDAgPT09IHN0cmlwb3MoJGpvYlsncGFja2FnZU5hbWUnXSwgJ2xpYi0nKSkgewppZiAoc3RydG9sb3dlcigkam9iWydwYWNrYWdlTmFtZSddKSA9PT0gJ2xpYi1pY3UnKSB7CiRlcnJvciA9IGV4dGVuc2lvbl9sb2FkZWQoJ2ludGwnKSA/ICdoYXMgdGhlIHdyb25nIHZlcnNpb24gaW5zdGFsbGVkLCB0cnkgdXBncmFkaW5nIHRoZSBpbnRsIGV4dGVuc2lvbi4nIDogJ2lzIG1pc3NpbmcgZnJvbSB5b3VyIHN5c3RlbSwgbWFrZSBzdXJlIHRoZSBpbnRsIGV4dGVuc2lvbiBpcyBsb2FkZWQuJzsKCnJldHVybiAiXG4gICAgLSBUaGUgcmVxdWVzdGVkIGxpbmtlZCBsaWJyYXJ5ICIuJGpvYlsncGFja2FnZU5hbWUnXS4kdGhpcy0+Y29uc3RyYWludFRvVGV4dCgkam9iWydjb25zdHJhaW50J10pLicgJy4kZXJyb3I7Cn0KCnJldHVybiAiXG4gICAgLSBUaGUgcmVxdWVzdGVkIGxpbmtlZCBsaWJyYXJ5ICIuJGpvYlsncGFja2FnZU5hbWUnXS4kdGhpcy0+Y29uc3RyYWludFRvVGV4dCgkam9iWydjb25zdHJhaW50J10pLicgaGFzIHRoZSB3cm9uZyB2ZXJzaW9uIGluc3RhbGxlZCBvciBpcyBtaXNzaW5nIGZyb20geW91ciBzeXN0ZW0sIG1ha2Ugc3VyZSB0byBsb2FkIHRoZSBleHRlbnNpb24gcHJvdmlkaW5nIGl0Lic7Cn0KCmlmICghcHJlZ19tYXRjaCgne15bQS1aYS16MC05Xy4vLV0rJH0nLCAkam9iWydwYWNrYWdlTmFtZSddKSkgewokaWxsZWdhbENoYXJzID0gcHJlZ19yZXBsYWNlKCd7W0EtWmEtejAtOV8uLy1dK30nLCAnJywgJGpvYlsncGFja2FnZU5hbWUnXSk7CgpyZXR1cm4gIlxuICAgIC0gVGhlIHJlcXVlc3RlZCBwYWNrYWdlICIuJGpvYlsncGFja2FnZU5hbWUnXS4nIGNvdWxkIG5vdCBiZSBmb3VuZCwgaXQgbG9va3MgbGlrZSBpdHMgbmFtZSBpcyBpbnZhbGlkLCAiJy4kaWxsZWdhbENoYXJzLiciIGlzIG5vdCBhbGxvd2VkIGluIHBhY2thZ2UgbmFtZXMuJzsKfQoKaWYgKCEkdGhpcy0+cG9vbC0+d2hhdFByb3ZpZGVzKCRqb2JbJ3BhY2thZ2VOYW1lJ10pKSB7CnJldHVybiAiXG4gICAgLSBUaGUgcmVxdWVzdGVkIHBhY2thZ2UgIi4kam9iWydwYWNrYWdlTmFtZSddLicgY291bGQgbm90IGJlIGZvdW5kIGluIGFueSB2ZXJzaW9uLCB0aGVyZSBtYXkgYmUgYSB0eXBvIGluIHRoZSBwYWNrYWdlIG5hbWUuJzsKfQoKcmV0dXJuICJcbiAgICAtIFRoZSByZXF1ZXN0ZWQgcGFja2FnZSAiLiRqb2JbJ3BhY2thZ2VOYW1lJ10uJHRoaXMtPmNvbnN0cmFpbnRUb1RleHQoJGpvYlsnY29uc3RyYWludCddKS4nIGNvdWxkIG5vdCBiZSBmb3VuZC4nOwp9Cn0KCiRtZXNzYWdlcyA9IGFycmF5KCk7Cgpmb3JlYWNoICgkcmVhc29ucyBhcyAkcmVhc29uKSB7CiRydWxlID0gJHJlYXNvblsncnVsZSddOwokam9iID0gJHJlYXNvblsnam9iJ107CgppZiAoJGpvYikgewokbWVzc2FnZXNbXSA9ICR0aGlzLT5qb2JUb1RleHQoJGpvYik7Cn0gZWxzZWlmICgkcnVsZSkgewppZiAoJHJ1bGUgaW5zdGFuY2VvZiBSdWxlKSB7CiRtZXNzYWdlc1tdID0gJHJ1bGUtPmdldFByZXR0eVN0cmluZygkaW5zdGFsbGVkTWFwKTsKfQp9Cn0KCnJldHVybiAiXG4gICAgLSAiLmltcGxvZGUoIlxuICAgIC0gIiwgJG1lc3NhZ2VzKTsKfQoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZFJlYXNvbigkaWQsICRyZWFzb24pCnsKaWYgKCFpc3NldCgkdGhpcy0+cmVhc29uU2VlblskaWRdKSkgewokdGhpcy0+cmVhc29uU2VlblskaWRdID0gdHJ1ZTsKJHRoaXMtPnJlYXNvbnNbJHRoaXMtPnNlY3Rpb25dW10gPSAkcmVhc29uOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBuZXh0U2VjdGlvbigpCnsKJHRoaXMtPnNlY3Rpb24rKzsKfQoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGpvYlRvVGV4dCgkam9iKQp7CnN3aXRjaCAoJGpvYlsnY21kJ10pIHsKY2FzZSAnaW5zdGFsbCc6CiRwYWNrYWdlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGpvYlsncGFja2FnZU5hbWUnXSwgJGpvYlsnY29uc3RyYWludCddKTsKaWYgKCEkcGFja2FnZXMpIHsKcmV0dXJuICdObyBwYWNrYWdlIGZvdW5kIHRvIHNhdGlzZnkgaW5zdGFsbCByZXF1ZXN0IGZvciAnLiRqb2JbJ3BhY2thZ2VOYW1lJ10uJHRoaXMtPmNvbnN0cmFpbnRUb1RleHQoJGpvYlsnY29uc3RyYWludCddKTsKfQoKcmV0dXJuICdJbnN0YWxsYXRpb24gcmVxdWVzdCBmb3IgJy4kam9iWydwYWNrYWdlTmFtZSddLiR0aGlzLT5jb25zdHJhaW50VG9UZXh0KCRqb2JbJ2NvbnN0cmFpbnQnXSkuJyAtPiBzYXRpc2ZpYWJsZSBieSAnLiR0aGlzLT5nZXRQYWNrYWdlTGlzdCgkcGFja2FnZXMpLicuJzsKY2FzZSAndXBkYXRlJzoKcmV0dXJuICdVcGRhdGUgcmVxdWVzdCBmb3IgJy4kam9iWydwYWNrYWdlTmFtZSddLiR0aGlzLT5jb25zdHJhaW50VG9UZXh0KCRqb2JbJ2NvbnN0cmFpbnQnXSkuJy4nOwpjYXNlICdyZW1vdmUnOgpyZXR1cm4gJ1JlbW92YWwgcmVxdWVzdCBmb3IgJy4kam9iWydwYWNrYWdlTmFtZSddLiR0aGlzLT5jb25zdHJhaW50VG9UZXh0KCRqb2JbJ2NvbnN0cmFpbnQnXSkuJyc7Cn0KCmlmIChpc3NldCgkam9iWydjb25zdHJhaW50J10pKSB7CiRwYWNrYWdlcyA9ICR0aGlzLT5wb29sLT53aGF0UHJvdmlkZXMoJGpvYlsncGFja2FnZU5hbWUnXSwgJGpvYlsnY29uc3RyYWludCddKTsKfSBlbHNlIHsKJHBhY2thZ2VzID0gYXJyYXkoKTsKfQoKcmV0dXJuICdKb2IoY21kPScuJGpvYlsnY21kJ10uJywgdGFyZ2V0PScuJGpvYlsncGFja2FnZU5hbWUnXS4nLCBwYWNrYWdlcz1bJy4kdGhpcy0+Z2V0UGFja2FnZUxpc3QoJHBhY2thZ2VzKS4nXSknOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UGFja2FnZUxpc3QoJHBhY2thZ2VzKQp7CiRwcmVwYXJlZCA9IGFycmF5KCk7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewokcHJlcGFyZWRbJHBhY2thZ2UtPmdldE5hbWUoKV1bJ25hbWUnXSA9ICRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCk7CiRwcmVwYXJlZFskcGFja2FnZS0+Z2V0TmFtZSgpXVsndmVyc2lvbnMnXVskcGFja2FnZS0+Z2V0VmVyc2lvbigpXSA9ICRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCk7Cn0KZm9yZWFjaCAoJHByZXBhcmVkIGFzICRuYW1lID0+ICRwYWNrYWdlKSB7CiRwcmVwYXJlZFskbmFtZV0gPSAkcGFja2FnZVsnbmFtZSddLidbJy5pbXBsb2RlKCcsICcsICRwYWNrYWdlWyd2ZXJzaW9ucyddKS4nXSc7Cn0KCnJldHVybiBpbXBsb2RlKCcsICcsICRwcmVwYXJlZCk7Cn0KCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25zdHJhaW50VG9UZXh0KCRjb25zdHJhaW50KQp7CnJldHVybiAoJGNvbnN0cmFpbnQpID8gJyAnLiRjb25zdHJhaW50LT5nZXRQcmV0dHlTdHJpbmcoKSA6ICcnOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyOwoKCgoKCgoKCgoKCmNsYXNzIFJ1bGVXYXRjaEdyYXBoCnsKcHJvdGVjdGVkICR3YXRjaENoYWlucyA9IGFycmF5KCk7CgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaW5zZXJ0KFJ1bGVXYXRjaE5vZGUgJG5vZGUpCnsKaWYgKCRub2RlLT5nZXRSdWxlKCktPmlzQXNzZXJ0aW9uKCkpIHsKcmV0dXJuOwp9Cgpmb3JlYWNoIChhcnJheSgkbm9kZS0+d2F0Y2gxLCAkbm9kZS0+d2F0Y2gyKSBhcyAkbGl0ZXJhbCkgewppZiAoIWlzc2V0KCR0aGlzLT53YXRjaENoYWluc1skbGl0ZXJhbF0pKSB7CiR0aGlzLT53YXRjaENoYWluc1skbGl0ZXJhbF0gPSBuZXcgUnVsZVdhdGNoQ2hhaW47Cn0KCiR0aGlzLT53YXRjaENoYWluc1skbGl0ZXJhbF0tPnVuc2hpZnQoJG5vZGUpOwp9Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHByb3BhZ2F0ZUxpdGVyYWwoJGRlY2lkZWRMaXRlcmFsLCAkbGV2ZWwsICRkZWNpc2lvbnMpCnsKCiAKIAogJGxpdGVyYWwgPSAtJGRlY2lkZWRMaXRlcmFsOwoKaWYgKCFpc3NldCgkdGhpcy0+d2F0Y2hDaGFpbnNbJGxpdGVyYWxdKSkgewpyZXR1cm4gbnVsbDsKfQoKJGNoYWluID0gJHRoaXMtPndhdGNoQ2hhaW5zWyRsaXRlcmFsXTsKCiRjaGFpbi0+cmV3aW5kKCk7CndoaWxlICgkY2hhaW4tPnZhbGlkKCkpIHsKJG5vZGUgPSAkY2hhaW4tPmN1cnJlbnQoKTsKJG90aGVyV2F0Y2ggPSAkbm9kZS0+Z2V0T3RoZXJXYXRjaCgkbGl0ZXJhbCk7CgppZiAoISRub2RlLT5nZXRSdWxlKCktPmlzRGlzYWJsZWQoKSAmJiAhJGRlY2lzaW9ucy0+c2F0aXNmeSgkb3RoZXJXYXRjaCkpIHsKJHJ1bGVMaXRlcmFscyA9ICRub2RlLT5nZXRSdWxlKCktPmdldExpdGVyYWxzKCk7CgokYWx0ZXJuYXRpdmVMaXRlcmFscyA9IGFycmF5X2ZpbHRlcigkcnVsZUxpdGVyYWxzLCBmdW5jdGlvbiAoJHJ1bGVMaXRlcmFsKSB1c2UgKCRsaXRlcmFsLCAkb3RoZXJXYXRjaCwgJGRlY2lzaW9ucykgewpyZXR1cm4gJGxpdGVyYWwgIT09ICRydWxlTGl0ZXJhbCAmJgokb3RoZXJXYXRjaCAhPT0gJHJ1bGVMaXRlcmFsICYmCiEkZGVjaXNpb25zLT5jb25mbGljdCgkcnVsZUxpdGVyYWwpOwp9KTsKCmlmICgkYWx0ZXJuYXRpdmVMaXRlcmFscykgewpyZXNldCgkYWx0ZXJuYXRpdmVMaXRlcmFscyk7CiR0aGlzLT5tb3ZlV2F0Y2goJGxpdGVyYWwsIGN1cnJlbnQoJGFsdGVybmF0aXZlTGl0ZXJhbHMpLCAkbm9kZSk7CmNvbnRpbnVlOwp9CgppZiAoJGRlY2lzaW9ucy0+Y29uZmxpY3QoJG90aGVyV2F0Y2gpKSB7CnJldHVybiAkbm9kZS0+Z2V0UnVsZSgpOwp9CgokZGVjaXNpb25zLT5kZWNpZGUoJG90aGVyV2F0Y2gsICRsZXZlbCwgJG5vZGUtPmdldFJ1bGUoKSk7Cn0KCiRjaGFpbi0+bmV4dCgpOwp9CgpyZXR1cm4gbnVsbDsKfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIG1vdmVXYXRjaCgkZnJvbUxpdGVyYWwsICR0b0xpdGVyYWwsICRub2RlKQp7CmlmICghaXNzZXQoJHRoaXMtPndhdGNoQ2hhaW5zWyR0b0xpdGVyYWxdKSkgewokdGhpcy0+d2F0Y2hDaGFpbnNbJHRvTGl0ZXJhbF0gPSBuZXcgUnVsZVdhdGNoQ2hhaW47Cn0KCiRub2RlLT5tb3ZlV2F0Y2goJGZyb21MaXRlcmFsLCAkdG9MaXRlcmFsKTsKJHRoaXMtPndhdGNoQ2hhaW5zWyRmcm9tTGl0ZXJhbF0tPnJlbW92ZSgpOwokdGhpcy0+d2F0Y2hDaGFpbnNbJHRvTGl0ZXJhbF0tPnVuc2hpZnQoJG5vZGUpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQ29uZmlnOwoKCgoKCgoKaW50ZXJmYWNlIENvbmZpZ1NvdXJjZUludGVyZmFjZQp7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRSZXBvc2l0b3J5KCRuYW1lLCAkY29uZmlnKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbW92ZVJlcG9zaXRvcnkoJG5hbWUpOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZENvbmZpZ1NldHRpbmcoJG5hbWUsICR2YWx1ZSk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmVDb25maWdTZXR0aW5nKCRuYW1lKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkTGluaygkdHlwZSwgJG5hbWUsICR2YWx1ZSk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlTGluaygkdHlwZSwgJG5hbWUpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbmZpZzsKCnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcSnNvblxKc29uTWFuaXB1bGF0b3I7CgoKCgoKCgpjbGFzcyBKc29uQ29uZmlnU291cmNlIGltcGxlbWVudHMgQ29uZmlnU291cmNlSW50ZXJmYWNlCnsKCgoKcHJpdmF0ZSAkZmlsZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEpzb25GaWxlICRmaWxlKQp7CiR0aGlzLT5maWxlID0gJGZpbGU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRSZXBvc2l0b3J5KCRuYW1lLCAkY29uZmlnKQp7CiR0aGlzLT5tYW5pcHVsYXRlSnNvbignYWRkUmVwb3NpdG9yeScsICRuYW1lLCAkY29uZmlnLCBmdW5jdGlvbiAoJiRjb25maWcsICRyZXBvLCAkcmVwb0NvbmZpZykgewokY29uZmlnWydyZXBvc2l0b3JpZXMnXVskcmVwb10gPSAkcmVwb0NvbmZpZzsKfSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmVSZXBvc2l0b3J5KCRuYW1lKQp7CiR0aGlzLT5tYW5pcHVsYXRlSnNvbigncmVtb3ZlUmVwb3NpdG9yeScsICRuYW1lLCBmdW5jdGlvbiAoJiRjb25maWcsICRyZXBvKSB7CnVuc2V0KCRjb25maWdbJ3JlcG9zaXRvcmllcyddWyRyZXBvXSk7Cn0pOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkQ29uZmlnU2V0dGluZygkbmFtZSwgJHZhbHVlKQp7CiR0aGlzLT5tYW5pcHVsYXRlSnNvbignYWRkQ29uZmlnU2V0dGluZycsICRuYW1lLCAkdmFsdWUsIGZ1bmN0aW9uICgmJGNvbmZpZywgJGtleSwgJHZhbCkgewokY29uZmlnWydjb25maWcnXVska2V5XSA9ICR2YWw7Cn0pOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQ29uZmlnU2V0dGluZygkbmFtZSkKewokdGhpcy0+bWFuaXB1bGF0ZUpzb24oJ3JlbW92ZUNvbmZpZ1NldHRpbmcnLCAkbmFtZSwgZnVuY3Rpb24gKCYkY29uZmlnLCAka2V5KSB7CnVuc2V0KCRjb25maWdbJ2NvbmZpZyddWyRrZXldKTsKfSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRMaW5rKCR0eXBlLCAkbmFtZSwgJHZhbHVlKQp7CiR0aGlzLT5tYW5pcHVsYXRlSnNvbignYWRkTGluaycsICR0eXBlLCAkbmFtZSwgJHZhbHVlLCBmdW5jdGlvbiAoJiRjb25maWcsICR0eXBlLCAkbmFtZSwgJHZhbHVlKSB7CiRjb25maWdbJHR5cGVdWyRuYW1lXSA9ICR2YWx1ZTsKfSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZW1vdmVMaW5rKCR0eXBlLCAkbmFtZSkKewokdGhpcy0+bWFuaXB1bGF0ZUpzb24oJ3JlbW92ZVN1Yk5vZGUnLCAkdHlwZSwgJG5hbWUsIGZ1bmN0aW9uICgmJGNvbmZpZywgJHR5cGUsICRuYW1lKSB7CnVuc2V0KCRjb25maWdbJHR5cGVdWyRuYW1lXSk7Cn0pOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gbWFuaXB1bGF0ZUpzb24oJG1ldGhvZCwgJGFyZ3MsICRmYWxsYmFjaykKewokYXJncyA9IGZ1bmNfZ2V0X2FyZ3MoKTsKCiBhcnJheV9zaGlmdCgkYXJncyk7CiRmYWxsYmFjayA9IGFycmF5X3BvcCgkYXJncyk7CgppZiAoJHRoaXMtPmZpbGUtPmV4aXN0cygpKSB7CiRjb250ZW50cyA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5maWxlLT5nZXRQYXRoKCkpOwp9IGVsc2UgewokY29udGVudHMgPSAie1xuICAgIFwiY29uZmlnXCI6IHtcbiAgICB9XG59XG4iOwp9CiRtYW5pcHVsYXRvciA9IG5ldyBKc29uTWFuaXB1bGF0b3IoJGNvbnRlbnRzKTsKCiRuZXdGaWxlID0gISR0aGlzLT5maWxlLT5leGlzdHMoKTsKCgogaWYgKGNhbGxfdXNlcl9mdW5jX2FycmF5KGFycmF5KCRtYW5pcHVsYXRvciwgJG1ldGhvZCksICRhcmdzKSkgewpmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+ZmlsZS0+Z2V0UGF0aCgpLCAkbWFuaXB1bGF0b3ItPmdldENvbnRlbnRzKCkpOwp9IGVsc2UgewoKICRjb25maWcgPSAkdGhpcy0+ZmlsZS0+cmVhZCgpOwokdGhpcy0+YXJyYXlfdW5zaGlmdF9yZWYoJGFyZ3MsICRjb25maWcpOwpjYWxsX3VzZXJfZnVuY19hcnJheSgkZmFsbGJhY2ssICRhcmdzKTsKJHRoaXMtPmZpbGUtPndyaXRlKCRjb25maWcpOwp9CgppZiAoJG5ld0ZpbGUpIHsKQGNobW9kKCR0aGlzLT5maWxlLT5nZXRQYXRoKCksIDA2MDApOwp9Cn0KCgoKCgoKCgpmdW5jdGlvbiBhcnJheV91bnNoaWZ0X3JlZigmJGFycmF5LCAmJHZhbHVlKQp7CiRyZXR1cm4gPSBhcnJheV91bnNoaWZ0KCRhcnJheSwgJycpOwokYXJyYXlbMF0gPSYgJHZhbHVlOwpyZXR1cm4gJHJldHVybjsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBsdWdpbjsKCgoKCgoKY2xhc3MgUGx1Z2luRXZlbnRzCnsKCgoKCgoKCgpjb25zdCBDT01NQU5EID0gJ2NvbW1hbmQnOwoKCgoKCgoKCgpjb25zdCBQUkVfRklMRV9ET1dOTE9BRCA9ICdwcmUtZmlsZS1kb3dubG9hZCc7Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcUGx1Z2luOwoKdXNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlclxFdmVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgoKCmNsYXNzIENvbW1hbmRFdmVudCBleHRlbmRzIEV2ZW50CnsKCgoKcHJpdmF0ZSAkY29tbWFuZE5hbWU7CgoKCgpwcml2YXRlICRpbnB1dDsKCgoKCnByaXZhdGUgJG91dHB1dDsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCAkY29tbWFuZE5hbWUsICRpbnB1dCwgJG91dHB1dCkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRuYW1lKTsKJHRoaXMtPmNvbW1hbmROYW1lID0gJGNvbW1hbmROYW1lOwokdGhpcy0+aW5wdXQgPSAkaW5wdXQ7CiR0aGlzLT5vdXRwdXQgPSAkb3V0cHV0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnB1dCgpCnsKcmV0dXJuICR0aGlzLT5pbnB1dDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCkKewpyZXR1cm4gJHRoaXMtPm91dHB1dDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tbWFuZE5hbWUoKQp7CnJldHVybiAkdGhpcy0+Y29tbWFuZE5hbWU7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQbHVnaW47Cgp1c2UgQ29tcG9zZXJcRXZlbnREaXNwYXRjaGVyXEV2ZW50Owp1c2UgQ29tcG9zZXJcVXRpbFxSZW1vdGVGaWxlc3lzdGVtOwoKCgoKCgpjbGFzcyBQcmVGaWxlRG93bmxvYWRFdmVudCBleHRlbmRzIEV2ZW50CnsKCgoKcHJpdmF0ZSAkcmZzOwoKCgoKcHJpdmF0ZSAkcHJvY2Vzc2VkVXJsOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgUmVtb3RlRmlsZXN5c3RlbSAkcmZzLCAkcHJvY2Vzc2VkVXJsKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJG5hbWUpOwokdGhpcy0+cmZzID0gJHJmczsKJHRoaXMtPnByb2Nlc3NlZFVybCA9ICRwcm9jZXNzZWRVcmw7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlbW90ZUZpbGVzeXN0ZW0oKQp7CnJldHVybiAkdGhpcy0+cmZzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRSZW1vdGVGaWxlc3lzdGVtKFJlbW90ZUZpbGVzeXN0ZW0gJHJmcykKewokdGhpcy0+cmZzID0gJHJmczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvY2Vzc2VkVXJsKCkKewpyZXR1cm4gJHRoaXMtPnByb2Nlc3NlZFVybDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFBsdWdpbjsKCnVzZSBDb21wb3NlclxDb21wb3NlcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKCgppbnRlcmZhY2UgUGx1Z2luSW50ZXJmYWNlCnsKCgoKCgpjb25zdCBQTFVHSU5fQVBJX1ZFUlNJT04gPSAnMS4wLjAnOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFjdGl2YXRlKENvbXBvc2VyICRjb21wb3NlciwgSU9JbnRlcmZhY2UgJGlvKTsKfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxQbHVnaW47Cgp1c2UgQ29tcG9zZXJcQ29tcG9zZXI7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnRTdWJzY3JpYmVySW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxWZXJzaW9uQ29uc3RyYWludDsKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxQb29sOwoKCgoKCgpjbGFzcyBQbHVnaW5NYW5hZ2VyCnsKcHJvdGVjdGVkICRjb21wb3NlcjsKcHJvdGVjdGVkICRpbzsKcHJvdGVjdGVkICRnbG9iYWxSZXBvc2l0b3J5Owpwcm90ZWN0ZWQgJHZlcnNpb25QYXJzZXI7Cgpwcm90ZWN0ZWQgJHBsdWdpbnMgPSBhcnJheSgpOwoKcHJpdmF0ZSBzdGF0aWMgJGNsYXNzQ291bnRlciA9IDA7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbXBvc2VyICRjb21wb3NlciwgSU9JbnRlcmZhY2UgJGlvLCBSZXBvc2l0b3J5SW50ZXJmYWNlICRnbG9iYWxSZXBvc2l0b3J5ID0gbnVsbCkKewokdGhpcy0+Y29tcG9zZXIgPSAkY29tcG9zZXI7CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPmdsb2JhbFJlcG9zaXRvcnkgPSAkZ2xvYmFsUmVwb3NpdG9yeTsKJHRoaXMtPnZlcnNpb25QYXJzZXIgPSBuZXcgVmVyc2lvblBhcnNlcigpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gbG9hZEluc3RhbGxlZFBsdWdpbnMoKQp7CiRyZXBvID0gJHRoaXMtPmNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRMb2NhbFJlcG9zaXRvcnkoKTsKCmlmICgkcmVwbykgewokdGhpcy0+bG9hZFJlcG9zaXRvcnkoJHJlcG8pOwp9CmlmICgkdGhpcy0+Z2xvYmFsUmVwb3NpdG9yeSkgewokdGhpcy0+bG9hZFJlcG9zaXRvcnkoJHRoaXMtPmdsb2JhbFJlcG9zaXRvcnkpOwp9Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFBsdWdpbihQbHVnaW5JbnRlcmZhY2UgJHBsdWdpbikKewokdGhpcy0+cGx1Z2luc1tdID0gJHBsdWdpbjsKJHBsdWdpbi0+YWN0aXZhdGUoJHRoaXMtPmNvbXBvc2VyLCAkdGhpcy0+aW8pOwoKaWYgKCRwbHVnaW4gaW5zdGFuY2VvZiBFdmVudFN1YnNjcmliZXJJbnRlcmZhY2UpIHsKJHRoaXMtPmNvbXBvc2VyLT5nZXRFdmVudERpc3BhdGNoZXIoKS0+YWRkU3Vic2NyaWJlcigkcGx1Z2luKTsKfQp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQbHVnaW5zKCkKewpyZXR1cm4gJHRoaXMtPnBsdWdpbnM7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkUmVwb3NpdG9yeShSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvKQp7CmZvcmVhY2ggKCRyZXBvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewpjb250aW51ZTsKfQppZiAoJ2NvbXBvc2VyLXBsdWdpbicgPT09ICRwYWNrYWdlLT5nZXRUeXBlKCkpIHsKJHJlcXVpcmVzQ29tcG9zZXIgPSBudWxsOwpmb3JlYWNoICgkcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSBhcyAkbGluaykgewppZiAoJGxpbmstPmdldFRhcmdldCgpID09ICdjb21wb3Nlci1wbHVnaW4tYXBpJykgewokcmVxdWlyZXNDb21wb3NlciA9ICRsaW5rLT5nZXRDb25zdHJhaW50KCk7Cn0KfQoKaWYgKCEkcmVxdWlyZXNDb21wb3Nlcikgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIlBsdWdpbiAiLiRwYWNrYWdlLT5nZXROYW1lKCkuIiBpcyBtaXNzaW5nIGEgcmVxdWlyZSBzdGF0ZW1lbnQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgY29tcG9zZXItcGx1Z2luLWFwaSBwYWNrYWdlLiIpOwp9CgppZiAoISRyZXF1aXJlc0NvbXBvc2VyLT5tYXRjaGVzKG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPT0nLCAkdGhpcy0+dmVyc2lvblBhcnNlci0+bm9ybWFsaXplKFBsdWdpbkludGVyZmFjZTo6UExVR0lOX0FQSV9WRVJTSU9OKSkpKSB7CiR0aGlzLT5pby0+d3JpdGUoIjx3YXJuaW5nPlRoZSBwbHVnaW4gIi4kcGFja2FnZS0+Z2V0TmFtZSgpLiIgcmVxdWlyZXMgYSB2ZXJzaW9uIG9mIGNvbXBvc2VyLXBsdWdpbi1hcGkgdGhhdCBkb2VzIG5vdCBtYXRjaCB5b3VyIGNvbXBvc2VyIGluc3RhbGxhdGlvbi4gWW91IG1heSBuZWVkIHRvIHJ1biBjb21wb3NlciB1cGRhdGUgd2l0aCB0aGUgJy0tbm8tcGx1Z2lucycgb3B0aW9uLjwvd2FybmluZz4iKTsKfQoKJHRoaXMtPnJlZ2lzdGVyUGFja2FnZSgkcGFja2FnZSk7Cn0KCiBpZiAoJ2NvbXBvc2VyLWluc3RhbGxlcicgPT09ICRwYWNrYWdlLT5nZXRUeXBlKCkpIHsKJHRoaXMtPnJlZ2lzdGVyUGFja2FnZSgkcGFja2FnZSk7Cn0KfQp9CgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY29sbGVjdERlcGVuZGVuY2llcyhQb29sICRwb29sLCBhcnJheSAkY29sbGVjdGVkLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRyZXF1aXJlcyA9IGFycmF5X21lcmdlKAokcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSwKJHBhY2thZ2UtPmdldERldlJlcXVpcmVzKCkKKTsKCmZvcmVhY2ggKCRyZXF1aXJlcyBhcyAkcmVxdWlyZUxpbmspIHsKJHJlcXVpcmVkUGFja2FnZSA9ICR0aGlzLT5sb29rdXBJbnN0YWxsZWRQYWNrYWdlKCRwb29sLCAkcmVxdWlyZUxpbmspOwppZiAoJHJlcXVpcmVkUGFja2FnZSAmJiAhaXNzZXQoJGNvbGxlY3RlZFskcmVxdWlyZWRQYWNrYWdlLT5nZXROYW1lKCldKSkgewokY29sbGVjdGVkWyRyZXF1aXJlZFBhY2thZ2UtPmdldE5hbWUoKV0gPSAkcmVxdWlyZWRQYWNrYWdlOwokY29sbGVjdGVkID0gJHRoaXMtPmNvbGxlY3REZXBlbmRlbmNpZXMoJHBvb2wsICRjb2xsZWN0ZWQsICRyZXF1aXJlZFBhY2thZ2UpOwp9Cn0KCnJldHVybiAkY29sbGVjdGVkOwp9CgoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGxvb2t1cEluc3RhbGxlZFBhY2thZ2UoUG9vbCAkcG9vbCwgTGluayAkbGluaykKewokcGFja2FnZXMgPSAkcG9vbC0+d2hhdFByb3ZpZGVzKCRsaW5rLT5nZXRUYXJnZXQoKSwgJGxpbmstPmdldENvbnN0cmFpbnQoKSk7CgpyZXR1cm4gKCFlbXB0eSgkcGFja2FnZXMpKSA/ICRwYWNrYWdlc1swXSA6IG51bGw7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyUGFja2FnZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRvbGRJbnN0YWxsZXJQbHVnaW4gPSAoJHBhY2thZ2UtPmdldFR5cGUoKSA9PT0gJ2NvbXBvc2VyLWluc3RhbGxlcicpOwoKJGV4dHJhID0gJHBhY2thZ2UtPmdldEV4dHJhKCk7CmlmIChlbXB0eSgkZXh0cmFbJ2NsYXNzJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdFcnJvciB3aGlsZSBpbnN0YWxsaW5nICcuJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKS4nLCBjb21wb3Nlci1wbHVnaW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYSBjbGFzcyBkZWZpbmVkIGluIHRoZWlyIGV4dHJhIGtleSB0byBiZSB1c2FibGUuJyk7Cn0KJGNsYXNzZXMgPSBpc19hcnJheSgkZXh0cmFbJ2NsYXNzJ10pID8gJGV4dHJhWydjbGFzcyddIDogYXJyYXkoJGV4dHJhWydjbGFzcyddKTsKCiRwb29sID0gbmV3IFBvb2woJ2RldicpOwokbG9jYWxSZXBvID0gJHRoaXMtPmNvbXBvc2VyLT5nZXRSZXBvc2l0b3J5TWFuYWdlcigpLT5nZXRMb2NhbFJlcG9zaXRvcnkoKTsKJHBvb2wtPmFkZFJlcG9zaXRvcnkoJGxvY2FsUmVwbyk7CmlmICgkdGhpcy0+Z2xvYmFsUmVwb3NpdG9yeSkgewokcG9vbC0+YWRkUmVwb3NpdG9yeSgkdGhpcy0+Z2xvYmFsUmVwb3NpdG9yeSk7Cn0KCiRhdXRvbG9hZFBhY2thZ2VzID0gYXJyYXkoJHBhY2thZ2UtPmdldE5hbWUoKSA9PiAkcGFja2FnZSk7CiRhdXRvbG9hZFBhY2thZ2VzID0gJHRoaXMtPmNvbGxlY3REZXBlbmRlbmNpZXMoJHBvb2wsICRhdXRvbG9hZFBhY2thZ2VzLCAkcGFja2FnZSk7CgokZ2VuZXJhdG9yID0gJHRoaXMtPmNvbXBvc2VyLT5nZXRBdXRvbG9hZEdlbmVyYXRvcigpOwokYXV0b2xvYWRzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGF1dG9sb2FkUGFja2FnZXMgYXMgJGF1dG9sb2FkUGFja2FnZSkgewokZG93bmxvYWRQYXRoID0gJHRoaXMtPmdldEluc3RhbGxQYXRoKCRhdXRvbG9hZFBhY2thZ2UsICgkdGhpcy0+Z2xvYmFsUmVwb3NpdG9yeSAmJiAkdGhpcy0+Z2xvYmFsUmVwb3NpdG9yeS0+aGFzUGFja2FnZSgkYXV0b2xvYWRQYWNrYWdlKSkpOwokYXV0b2xvYWRzW10gPSBhcnJheSgkYXV0b2xvYWRQYWNrYWdlLCAkZG93bmxvYWRQYXRoKTsKfQoKJG1hcCA9ICRnZW5lcmF0b3ItPnBhcnNlQXV0b2xvYWRzKCRhdXRvbG9hZHMsIG5ldyBQYWNrYWdlKCdkdW1teScsICcxLjAuMC4wJywgJzEuMC4wJykpOwokY2xhc3NMb2FkZXIgPSAkZ2VuZXJhdG9yLT5jcmVhdGVMb2FkZXIoJG1hcCk7CiRjbGFzc0xvYWRlci0+cmVnaXN0ZXIoKTsKCmZvcmVhY2ggKCRjbGFzc2VzIGFzICRjbGFzcykgewppZiAoY2xhc3NfZXhpc3RzKCRjbGFzcywgZmFsc2UpKSB7CiRjb2RlID0gZmlsZV9nZXRfY29udGVudHMoJGNsYXNzTG9hZGVyLT5maW5kRmlsZSgkY2xhc3MpKTsKJGNvZGUgPSBwcmVnX3JlcGxhY2UoJ3teKFxzKiljbGFzc1xzKyhcUyspfW1pJywgJyQxY2xhc3MgJDJfY29tcG9zZXJfdG1wJy5zZWxmOjokY2xhc3NDb3VudGVyLCAkY29kZSk7CmV2YWwoJz8+Jy4kY29kZSk7CiRjbGFzcyAuPSAnX2NvbXBvc2VyX3RtcCcuc2VsZjo6JGNsYXNzQ291bnRlcjsKc2VsZjo6JGNsYXNzQ291bnRlcisrOwp9CgppZiAoJG9sZEluc3RhbGxlclBsdWdpbikgewokaW5zdGFsbGVyID0gbmV3ICRjbGFzcygkdGhpcy0+aW8sICR0aGlzLT5jb21wb3Nlcik7CiR0aGlzLT5jb21wb3Nlci0+Z2V0SW5zdGFsbGF0aW9uTWFuYWdlcigpLT5hZGRJbnN0YWxsZXIoJGluc3RhbGxlcik7Cn0gZWxzZSB7CiRwbHVnaW4gPSBuZXcgJGNsYXNzKCk7CiR0aGlzLT5hZGRQbHVnaW4oJHBsdWdpbik7Cn0KfQp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsUGF0aChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCAkZ2xvYmFsID0gZmFsc2UpCnsKaWYgKCEkZ2xvYmFsKSB7CnJldHVybiAkdGhpcy0+Y29tcG9zZXItPmdldEluc3RhbGxhdGlvbk1hbmFnZXIoKS0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpOwp9CgokdGFyZ2V0RGlyID0gJHBhY2thZ2UtPmdldFRhcmdldERpcigpOwokdmVuZG9yRGlyID0gJHRoaXMtPmNvbXBvc2VyLT5nZXRDb25maWcoKS0+Z2V0KCdob21lJykuJy92ZW5kb3InOwoKcmV0dXJuICgkdmVuZG9yRGlyID8gJHZlbmRvckRpci4nLycgOiAnJykuJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKS4oJHRhcmdldERpciA/ICcvJy4kdGFyZ2V0RGlyIDogJycpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXI7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnXEpzb25Db25maWdTb3VyY2U7CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXEFyY2hpdmVyOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5TWFuYWdlcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFV0aWxcUHJvY2Vzc0V4ZWN1dG9yOwp1c2UgQ29tcG9zZXJcVXRpbFxSZW1vdGVGaWxlc3lzdGVtOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxGb3JtYXR0ZXJcT3V0cHV0Rm9ybWF0dGVyU3R5bGU7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwp1c2UgQ29tcG9zZXJcQXV0b2xvYWRcQXV0b2xvYWRHZW5lcmF0b3I7CnVzZSBDb21wb3NlclxQYWNrYWdlXFZlcnNpb25cVmVyc2lvblBhcnNlcjsKCgoKCgoKCgoKY2xhc3MgRmFjdG9yeQp7CgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZUNvbmZpZygpCnsKCiAkaG9tZSA9IGdldGVudignQ09NUE9TRVJfSE9NRScpOwokY2FjaGVEaXIgPSBnZXRlbnYoJ0NPTVBPU0VSX0NBQ0hFX0RJUicpOwppZiAoISRob21lKSB7CmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX01BSk9SJykpIHsKaWYgKCFnZXRlbnYoJ0FQUERBVEEnKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBBUFBEQVRBIG9yIENPTVBPU0VSX0hPTUUgZW52aXJvbm1lbnQgdmFyaWFibGUgbXVzdCBiZSBzZXQgZm9yIGNvbXBvc2VyIHRvIHJ1biBjb3JyZWN0bHknKTsKfQokaG9tZSA9IHN0cnRyKGdldGVudignQVBQREFUQScpLCAnXFwnLCAnLycpIC4gJy9Db21wb3Nlcic7Cn0gZWxzZSB7CmlmICghZ2V0ZW52KCdIT01FJykpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdUaGUgSE9NRSBvciBDT01QT1NFUl9IT01FIGVudmlyb25tZW50IHZhcmlhYmxlIG11c3QgYmUgc2V0IGZvciBjb21wb3NlciB0byBydW4gY29ycmVjdGx5Jyk7Cn0KJGhvbWUgPSBydHJpbShnZXRlbnYoJ0hPTUUnKSwgJy8nKSAuICcvLmNvbXBvc2VyJzsKfQp9CmlmICghJGNhY2hlRGlyKSB7CmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX01BSk9SJykpIHsKaWYgKCRjYWNoZURpciA9IGdldGVudignTE9DQUxBUFBEQVRBJykpIHsKJGNhY2hlRGlyIC49ICcvQ29tcG9zZXInOwp9IGVsc2UgewokY2FjaGVEaXIgPSAkaG9tZSAuICcvY2FjaGUnOwp9CiRjYWNoZURpciA9IHN0cnRyKCRjYWNoZURpciwgJ1xcJywgJy8nKTsKfSBlbHNlIHsKJGNhY2hlRGlyID0gJGhvbWUuJy9jYWNoZSc7Cn0KfQoKCiAKIAogZm9yZWFjaCAoYXJyYXkoJGhvbWUsICRjYWNoZURpcikgYXMgJGRpcikgewppZiAoIWZpbGVfZXhpc3RzKCRkaXIgLiAnLy5odGFjY2VzcycpKSB7CmlmICghaXNfZGlyKCRkaXIpKSB7CkBta2RpcigkZGlyLCAwNzc3LCB0cnVlKTsKfQpAZmlsZV9wdXRfY29udGVudHMoJGRpciAuICcvLmh0YWNjZXNzJywgJ0RlbnkgZnJvbSBhbGwnKTsKfQp9CgokY29uZmlnID0gbmV3IENvbmZpZygpOwoKCiAkY29uZmlnLT5tZXJnZShhcnJheSgnY29uZmlnJyA9PiBhcnJheSgnaG9tZScgPT4gJGhvbWUsICdjYWNoZS1kaXInID0+ICRjYWNoZURpcikpKTsKCiRmaWxlID0gbmV3IEpzb25GaWxlKCRob21lLicvY29uZmlnLmpzb24nKTsKaWYgKCRmaWxlLT5leGlzdHMoKSkgewokY29uZmlnLT5tZXJnZSgkZmlsZS0+cmVhZCgpKTsKfQokY29uZmlnLT5zZXRDb25maWdTb3VyY2UobmV3IEpzb25Db25maWdTb3VyY2UoJGZpbGUpKTsKCgogJGxlZ2FjeVBhdGhzID0gYXJyYXkoCidjYWNoZS1yZXBvLWRpcicgPT4gYXJyYXkoJy9jYWNoZScgPT4gJy9odHRwKicsICcvY2FjaGUuc3ZuJyA9PiAnLyonLCAnL2NhY2hlLmdpdGh1YicgPT4gJy8qJyksCidjYWNoZS12Y3MtZGlyJyA9PiBhcnJheSgnL2NhY2hlLmdpdCcgPT4gJy8qJywgJy9jYWNoZS5oZycgPT4gJy8qJyksCidjYWNoZS1maWxlcy1kaXInID0+IGFycmF5KCcvY2FjaGUuZmlsZXMnID0+ICcvKicpLAopOwpmb3JlYWNoICgkbGVnYWN5UGF0aHMgYXMgJGtleSA9PiAkb2xkUGF0aHMpIHsKZm9yZWFjaCAoJG9sZFBhdGhzIGFzICRvbGRQYXRoID0+ICRtYXRjaCkgewokZGlyID0gJGNvbmZpZy0+Z2V0KCRrZXkpOwppZiAoJy9jYWNoZS5naXRodWInID09PSAkb2xkUGF0aCkgewokZGlyIC49ICcvZ2l0aHViLmNvbSc7Cn0KJG9sZFBhdGggPSAkY29uZmlnLT5nZXQoJ2hvbWUnKS4kb2xkUGF0aDsKJG9sZFBhdGhNYXRjaCA9ICRvbGRQYXRoIC4gJG1hdGNoOwppZiAoaXNfZGlyKCRvbGRQYXRoKSAmJiAkZGlyICE9PSAkb2xkUGF0aCkgewppZiAoIWlzX2RpcigkZGlyKSkgewppZiAoIUBta2RpcigkZGlyLCAwNzc3LCB0cnVlKSkgewpjb250aW51ZTsKfQp9CmlmIChpc19hcnJheSgkY2hpbGRyZW4gPSBnbG9iKCRvbGRQYXRoTWF0Y2gpKSkgewpmb3JlYWNoICgkY2hpbGRyZW4gYXMgJGNoaWxkKSB7CkByZW5hbWUoJGNoaWxkLCAkZGlyLicvJy5iYXNlbmFtZSgkY2hpbGQpKTsKfQp9CmlmICgkY29uZmlnLT5nZXQoJ2NhY2hlLWRpcicpICE9ICRvbGRQYXRoKSB7CkBybWRpcigkb2xkUGF0aCk7Cn0KfQp9Cn0KCnJldHVybiAkY29uZmlnOwp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldENvbXBvc2VyRmlsZSgpCnsKcmV0dXJuIHRyaW0oZ2V0ZW52KCdDT01QT1NFUicpKSA/OiAnLi9jb21wb3Nlci5qc29uJzsKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVBZGRpdGlvbmFsU3R5bGVzKCkKewpyZXR1cm4gYXJyYXkoCidoaWdobGlnaHQnID0+IG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZSgncmVkJyksCid3YXJuaW5nJyA9PiBuZXcgT3V0cHV0Rm9ybWF0dGVyU3R5bGUoJ2JsYWNrJywgJ3llbGxvdycpLAopOwp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZURlZmF1bHRSZXBvc2l0b3JpZXMoSU9JbnRlcmZhY2UgJGlvID0gbnVsbCwgQ29uZmlnICRjb25maWcgPSBudWxsLCBSZXBvc2l0b3J5TWFuYWdlciAkcm0gPSBudWxsKQp7CiRyZXBvcyA9IGFycmF5KCk7CgppZiAoISRjb25maWcpIHsKJGNvbmZpZyA9IHN0YXRpYzo6Y3JlYXRlQ29uZmlnKCk7Cn0KaWYgKCEkcm0pIHsKaWYgKCEkaW8pIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoaXMgZnVuY3Rpb24gcmVxdWlyZXMgZWl0aGVyIGFuIElPSW50ZXJmYWNlIG9yIGEgUmVwb3NpdG9yeU1hbmFnZXInKTsKfQokZmFjdG9yeSA9IG5ldyBzdGF0aWM7CiRybSA9ICRmYWN0b3J5LT5jcmVhdGVSZXBvc2l0b3J5TWFuYWdlcigkaW8sICRjb25maWcpOwp9Cgpmb3JlYWNoICgkY29uZmlnLT5nZXRSZXBvc2l0b3JpZXMoKSBhcyAkaW5kZXggPT4gJHJlcG8pIHsKaWYgKCFpc19hcnJheSgkcmVwbykpIHsKdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ1JlcG9zaXRvcnkgJy4kaW5kZXguJyAoJy5qc29uX2VuY29kZSgkcmVwbykuJykgc2hvdWxkIGJlIGFuIGFycmF5LCAnLmdldHR5cGUoJHJlcG8pLicgZ2l2ZW4nKTsKfQppZiAoIWlzc2V0KCRyZXBvWyd0eXBlJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdSZXBvc2l0b3J5ICcuJGluZGV4LicgKCcuanNvbl9lbmNvZGUoJHJlcG8pLicpIG11c3QgaGF2ZSBhIHR5cGUgZGVmaW5lZCcpOwp9CiRuYW1lID0gaXNfaW50KCRpbmRleCkgJiYgaXNzZXQoJHJlcG9bJ3VybCddKSA/IHByZWdfcmVwbGFjZSgne15odHRwcz86Ly99aScsICcnLCAkcmVwb1sndXJsJ10pIDogJGluZGV4Owp3aGlsZSAoaXNzZXQoJHJlcG9zWyRuYW1lXSkpIHsKJG5hbWUgLj0gJzInOwp9CiRyZXBvc1skbmFtZV0gPSAkcm0tPmNyZWF0ZVJlcG9zaXRvcnkoJHJlcG9bJ3R5cGUnXSwgJHJlcG8pOwp9CgpyZXR1cm4gJHJlcG9zOwp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjcmVhdGVDb21wb3NlcihJT0ludGVyZmFjZSAkaW8sICRsb2NhbENvbmZpZyA9IG51bGwsICRkaXNhYmxlUGx1Z2lucyA9IGZhbHNlKQp7CgogaWYgKG51bGwgPT09ICRsb2NhbENvbmZpZykgewokbG9jYWxDb25maWcgPSBzdGF0aWM6OmdldENvbXBvc2VyRmlsZSgpOwp9CgppZiAoaXNfc3RyaW5nKCRsb2NhbENvbmZpZykpIHsKJGNvbXBvc2VyRmlsZSA9ICRsb2NhbENvbmZpZzsKJGZpbGUgPSBuZXcgSnNvbkZpbGUoJGxvY2FsQ29uZmlnLCBuZXcgUmVtb3RlRmlsZXN5c3RlbSgkaW8pKTsKCmlmICghJGZpbGUtPmV4aXN0cygpKSB7CmlmICgkbG9jYWxDb25maWcgPT09ICcuL2NvbXBvc2VyLmpzb24nIHx8ICRsb2NhbENvbmZpZyA9PT0gJ2NvbXBvc2VyLmpzb24nKSB7CiRtZXNzYWdlID0gJ0NvbXBvc2VyIGNvdWxkIG5vdCBmaW5kIGEgY29tcG9zZXIuanNvbiBmaWxlIGluICcuZ2V0Y3dkKCk7Cn0gZWxzZSB7CiRtZXNzYWdlID0gJ0NvbXBvc2VyIGNvdWxkIG5vdCBmaW5kIHRoZSBjb25maWcgZmlsZTogJy4kbG9jYWxDb25maWc7Cn0KJGluc3RydWN0aW9ucyA9ICdUbyBpbml0aWFsaXplIGEgcHJvamVjdCwgcGxlYXNlIGNyZWF0ZSBhIGNvbXBvc2VyLmpzb24gZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlIGh0dHA6Ly9nZXRjb21wb3Nlci5vcmcvICJHZXR0aW5nIFN0YXJ0ZWQiIHNlY3Rpb24nOwp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigkbWVzc2FnZS5QSFBfRU9MLiRpbnN0cnVjdGlvbnMpOwp9CgokZmlsZS0+dmFsaWRhdGVTY2hlbWEoSnNvbkZpbGU6OkxBWF9TQ0hFTUEpOwokbG9jYWxDb25maWcgPSAkZmlsZS0+cmVhZCgpOwp9CgoKICRjb25maWcgPSBzdGF0aWM6OmNyZWF0ZUNvbmZpZygpOwokY29uZmlnLT5tZXJnZSgkbG9jYWxDb25maWcpOwokaW8tPmxvYWRDb25maWd1cmF0aW9uKCRjb25maWcpOwoKJHZlbmRvckRpciA9ICRjb25maWctPmdldCgndmVuZG9yLWRpcicpOwokYmluRGlyID0gJGNvbmZpZy0+Z2V0KCdiaW4tZGlyJyk7CgoKIFByb2Nlc3NFeGVjdXRvcjo6c2V0VGltZW91dCgoaW50KSAkY29uZmlnLT5nZXQoJ3Byb2Nlc3MtdGltZW91dCcpKTsKCgogJGNvbXBvc2VyID0gbmV3IENvbXBvc2VyKCk7CiRjb21wb3Nlci0+c2V0Q29uZmlnKCRjb25maWcpOwoKCiAkZGlzcGF0Y2hlciA9IG5ldyBFdmVudERpc3BhdGNoZXIoJGNvbXBvc2VyLCAkaW8pOwoKCiAkcm0gPSAkdGhpcy0+Y3JlYXRlUmVwb3NpdG9yeU1hbmFnZXIoJGlvLCAkY29uZmlnLCAkZGlzcGF0Y2hlcik7CgoKICR0aGlzLT5hZGRMb2NhbFJlcG9zaXRvcnkoJHJtLCAkdmVuZG9yRGlyKTsKCgogJHBhcnNlciA9IG5ldyBWZXJzaW9uUGFyc2VyOwokbG9hZGVyID0gbmV3IFBhY2thZ2VcTG9hZGVyXFJvb3RQYWNrYWdlTG9hZGVyKCRybSwgJGNvbmZpZywgJHBhcnNlciwgbmV3IFByb2Nlc3NFeGVjdXRvcigkaW8pKTsKJHBhY2thZ2UgPSAkbG9hZGVyLT5sb2FkKCRsb2NhbENvbmZpZyk7CgoKICRpbSA9ICR0aGlzLT5jcmVhdGVJbnN0YWxsYXRpb25NYW5hZ2VyKCk7CgoKICRjb21wb3Nlci0+c2V0UGFja2FnZSgkcGFja2FnZSk7CiRjb21wb3Nlci0+c2V0UmVwb3NpdG9yeU1hbmFnZXIoJHJtKTsKJGNvbXBvc2VyLT5zZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCRpbSk7CgoKICRkbSA9ICR0aGlzLT5jcmVhdGVEb3dubG9hZE1hbmFnZXIoJGlvLCAkY29uZmlnLCAkZGlzcGF0Y2hlcik7CgokY29tcG9zZXItPnNldERvd25sb2FkTWFuYWdlcigkZG0pOwokY29tcG9zZXItPnNldEV2ZW50RGlzcGF0Y2hlcigkZGlzcGF0Y2hlcik7CgoKICRnZW5lcmF0b3IgPSBuZXcgQXV0b2xvYWRHZW5lcmF0b3IoJGRpc3BhdGNoZXIsICRpbyk7CiRjb21wb3Nlci0+c2V0QXV0b2xvYWRHZW5lcmF0b3IoJGdlbmVyYXRvcik7CgoKICR0aGlzLT5jcmVhdGVEZWZhdWx0SW5zdGFsbGVycygkaW0sICRjb21wb3NlciwgJGlvKTsKCiRnbG9iYWxSZXBvc2l0b3J5ID0gJHRoaXMtPmNyZWF0ZUdsb2JhbFJlcG9zaXRvcnkoJGNvbmZpZywgJHZlbmRvckRpcik7CiRwbSA9ICR0aGlzLT5jcmVhdGVQbHVnaW5NYW5hZ2VyKCRjb21wb3NlciwgJGlvLCAkZ2xvYmFsUmVwb3NpdG9yeSk7CiRjb21wb3Nlci0+c2V0UGx1Z2luTWFuYWdlcigkcG0pOwoKaWYgKCEkZGlzYWJsZVBsdWdpbnMpIHsKJHBtLT5sb2FkSW5zdGFsbGVkUGx1Z2lucygpOwp9CgoKICR0aGlzLT5wdXJnZVBhY2thZ2VzKCRybSwgJGltKTsKCgogaWYgKGlzc2V0KCRjb21wb3NlckZpbGUpKSB7CiRsb2NrRmlsZSA9ICJqc29uIiA9PT0gcGF0aGluZm8oJGNvbXBvc2VyRmlsZSwgUEFUSElORk9fRVhURU5TSU9OKQo/IHN1YnN0cigkY29tcG9zZXJGaWxlLCAwLCAtNCkuJ2xvY2snCjogJGNvbXBvc2VyRmlsZSAuICcubG9jayc7CiRsb2NrZXIgPSBuZXcgUGFja2FnZVxMb2NrZXIoJGlvLCBuZXcgSnNvbkZpbGUoJGxvY2tGaWxlLCBuZXcgUmVtb3RlRmlsZXN5c3RlbSgkaW8sICRjb25maWcpKSwgJHJtLCAkaW0sIG1kNV9maWxlKCRjb21wb3NlckZpbGUpKTsKJGNvbXBvc2VyLT5zZXRMb2NrZXIoJGxvY2tlcik7Cn0KCnJldHVybiAkY29tcG9zZXI7Cn0KCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjcmVhdGVSZXBvc2l0b3J5TWFuYWdlcihJT0ludGVyZmFjZSAkaW8sIENvbmZpZyAkY29uZmlnLCBFdmVudERpc3BhdGNoZXIgJGV2ZW50RGlzcGF0Y2hlciA9IG51bGwpCnsKJHJtID0gbmV3IFJlcG9zaXRvcnlNYW5hZ2VyKCRpbywgJGNvbmZpZywgJGV2ZW50RGlzcGF0Y2hlcik7CiRybS0+c2V0UmVwb3NpdG9yeUNsYXNzKCdjb21wb3NlcicsICdDb21wb3NlclxSZXBvc2l0b3J5XENvbXBvc2VyUmVwb3NpdG9yeScpOwokcm0tPnNldFJlcG9zaXRvcnlDbGFzcygndmNzJywgJ0NvbXBvc2VyXFJlcG9zaXRvcnlcVmNzUmVwb3NpdG9yeScpOwokcm0tPnNldFJlcG9zaXRvcnlDbGFzcygncGFja2FnZScsICdDb21wb3NlclxSZXBvc2l0b3J5XFBhY2thZ2VSZXBvc2l0b3J5Jyk7CiRybS0+c2V0UmVwb3NpdG9yeUNsYXNzKCdwZWFyJywgJ0NvbXBvc2VyXFJlcG9zaXRvcnlcUGVhclJlcG9zaXRvcnknKTsKJHJtLT5zZXRSZXBvc2l0b3J5Q2xhc3MoJ2dpdCcsICdDb21wb3NlclxSZXBvc2l0b3J5XFZjc1JlcG9zaXRvcnknKTsKJHJtLT5zZXRSZXBvc2l0b3J5Q2xhc3MoJ3N2bicsICdDb21wb3NlclxSZXBvc2l0b3J5XFZjc1JlcG9zaXRvcnknKTsKJHJtLT5zZXRSZXBvc2l0b3J5Q2xhc3MoJ3BlcmZvcmNlJywgJ0NvbXBvc2VyXFJlcG9zaXRvcnlcVmNzUmVwb3NpdG9yeScpOwokcm0tPnNldFJlcG9zaXRvcnlDbGFzcygnaGcnLCAnQ29tcG9zZXJcUmVwb3NpdG9yeVxWY3NSZXBvc2l0b3J5Jyk7CiRybS0+c2V0UmVwb3NpdG9yeUNsYXNzKCdhcnRpZmFjdCcsICdDb21wb3NlclxSZXBvc2l0b3J5XEFydGlmYWN0UmVwb3NpdG9yeScpOwoKcmV0dXJuICRybTsKfQoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBhZGRMb2NhbFJlcG9zaXRvcnkoUmVwb3NpdG9yeU1hbmFnZXIgJHJtLCAkdmVuZG9yRGlyKQp7CiRybS0+c2V0TG9jYWxSZXBvc2l0b3J5KG5ldyBSZXBvc2l0b3J5XEluc3RhbGxlZEZpbGVzeXN0ZW1SZXBvc2l0b3J5KG5ldyBKc29uRmlsZSgkdmVuZG9yRGlyLicvY29tcG9zZXIvaW5zdGFsbGVkLmpzb24nKSkpOwp9CgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZUdsb2JhbFJlcG9zaXRvcnkoQ29uZmlnICRjb25maWcsICR2ZW5kb3JEaXIpCnsKaWYgKCRjb25maWctPmdldCgnaG9tZScpID09ICR2ZW5kb3JEaXIpIHsKcmV0dXJuIG51bGw7Cn0KCiRwYXRoID0gJGNvbmZpZy0+Z2V0KCdob21lJykuJy92ZW5kb3IvY29tcG9zZXIvaW5zdGFsbGVkLmpzb24nOwppZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkgewpyZXR1cm4gbnVsbDsKfQoKcmV0dXJuIG5ldyBSZXBvc2l0b3J5XEluc3RhbGxlZEZpbGVzeXN0ZW1SZXBvc2l0b3J5KG5ldyBKc29uRmlsZSgkcGF0aCkpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY3JlYXRlRG93bmxvYWRNYW5hZ2VyKElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIEV2ZW50RGlzcGF0Y2hlciAkZXZlbnREaXNwYXRjaGVyID0gbnVsbCkKewokY2FjaGUgPSBudWxsOwppZiAoJGNvbmZpZy0+Z2V0KCdjYWNoZS1maWxlcy10dGwnKSA+IDApIHsKJGNhY2hlID0gbmV3IENhY2hlKCRpbywgJGNvbmZpZy0+Z2V0KCdjYWNoZS1maWxlcy1kaXInKSwgJ2EtejAtOV8uLycpOwp9CgokZG0gPSBuZXcgRG93bmxvYWRlclxEb3dubG9hZE1hbmFnZXIoJGlvKTsKc3dpdGNoICgkY29uZmlnLT5nZXQoJ3ByZWZlcnJlZC1pbnN0YWxsJykpIHsKY2FzZSAnZGlzdCc6CiRkbS0+c2V0UHJlZmVyRGlzdCh0cnVlKTsKYnJlYWs7CmNhc2UgJ3NvdXJjZSc6CiRkbS0+c2V0UHJlZmVyU291cmNlKHRydWUpOwpicmVhazsKY2FzZSAnYXV0byc6CmRlZmF1bHQ6CgogYnJlYWs7Cn0KCiRkbS0+c2V0RG93bmxvYWRlcignZ2l0JywgbmV3IERvd25sb2FkZXJcR2l0RG93bmxvYWRlcigkaW8sICRjb25maWcpKTsKJGRtLT5zZXREb3dubG9hZGVyKCdzdm4nLCBuZXcgRG93bmxvYWRlclxTdm5Eb3dubG9hZGVyKCRpbywgJGNvbmZpZykpOwokZG0tPnNldERvd25sb2FkZXIoJ2hnJywgbmV3IERvd25sb2FkZXJcSGdEb3dubG9hZGVyKCRpbywgJGNvbmZpZykpOwokZG0tPnNldERvd25sb2FkZXIoJ3BlcmZvcmNlJywgbmV3IERvd25sb2FkZXJcUGVyZm9yY2VEb3dubG9hZGVyKCRpbywgJGNvbmZpZykpOwokZG0tPnNldERvd25sb2FkZXIoJ3ppcCcsIG5ldyBEb3dubG9hZGVyXFppcERvd25sb2FkZXIoJGlvLCAkY29uZmlnLCAkZXZlbnREaXNwYXRjaGVyLCAkY2FjaGUpKTsKJGRtLT5zZXREb3dubG9hZGVyKCdyYXInLCBuZXcgRG93bmxvYWRlclxSYXJEb3dubG9hZGVyKCRpbywgJGNvbmZpZywgJGV2ZW50RGlzcGF0Y2hlciwgJGNhY2hlKSk7CiRkbS0+c2V0RG93bmxvYWRlcigndGFyJywgbmV3IERvd25sb2FkZXJcVGFyRG93bmxvYWRlcigkaW8sICRjb25maWcsICRldmVudERpc3BhdGNoZXIsICRjYWNoZSkpOwokZG0tPnNldERvd25sb2FkZXIoJ2d6aXAnLCBuZXcgRG93bmxvYWRlclxHemlwRG93bmxvYWRlcigkaW8sICRjb25maWcsICRldmVudERpc3BhdGNoZXIsICRjYWNoZSkpOwokZG0tPnNldERvd25sb2FkZXIoJ3BoYXInLCBuZXcgRG93bmxvYWRlclxQaGFyRG93bmxvYWRlcigkaW8sICRjb25maWcsICRldmVudERpc3BhdGNoZXIsICRjYWNoZSkpOwokZG0tPnNldERvd25sb2FkZXIoJ2ZpbGUnLCBuZXcgRG93bmxvYWRlclxGaWxlRG93bmxvYWRlcigkaW8sICRjb25maWcsICRldmVudERpc3BhdGNoZXIsICRjYWNoZSkpOwoKcmV0dXJuICRkbTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGNyZWF0ZUFyY2hpdmVNYW5hZ2VyKENvbmZpZyAkY29uZmlnLCBEb3dubG9hZGVyXERvd25sb2FkTWFuYWdlciAkZG0gPSBudWxsKQp7CmlmIChudWxsID09PSAkZG0pIHsKJGlvID0gbmV3IElPXE51bGxJTygpOwokaW8tPmxvYWRDb25maWd1cmF0aW9uKCRjb25maWcpOwokZG0gPSAkdGhpcy0+Y3JlYXRlRG93bmxvYWRNYW5hZ2VyKCRpbywgJGNvbmZpZyk7Cn0KCiRhbSA9IG5ldyBBcmNoaXZlclxBcmNoaXZlTWFuYWdlcigkZG0pOwokYW0tPmFkZEFyY2hpdmVyKG5ldyBBcmNoaXZlclxQaGFyQXJjaGl2ZXIpOwoKcmV0dXJuICRhbTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZVBsdWdpbk1hbmFnZXIoQ29tcG9zZXIgJGNvbXBvc2VyLCBJT0ludGVyZmFjZSAkaW8sIFJlcG9zaXRvcnlJbnRlcmZhY2UgJGdsb2JhbFJlcG9zaXRvcnkgPSBudWxsKQp7CnJldHVybiBuZXcgUGx1Z2luXFBsdWdpbk1hbmFnZXIoJGNvbXBvc2VyLCAkaW8sICRnbG9iYWxSZXBvc2l0b3J5KTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNyZWF0ZUluc3RhbGxhdGlvbk1hbmFnZXIoKQp7CnJldHVybiBuZXcgSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXIoKTsKfQoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlRGVmYXVsdEluc3RhbGxlcnMoSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXIgJGltLCBDb21wb3NlciAkY29tcG9zZXIsIElPSW50ZXJmYWNlICRpbykKewokaW0tPmFkZEluc3RhbGxlcihuZXcgSW5zdGFsbGVyXExpYnJhcnlJbnN0YWxsZXIoJGlvLCAkY29tcG9zZXIsIG51bGwpKTsKJGltLT5hZGRJbnN0YWxsZXIobmV3IEluc3RhbGxlclxQZWFySW5zdGFsbGVyKCRpbywgJGNvbXBvc2VyLCAncGVhci1saWJyYXJ5JykpOwokaW0tPmFkZEluc3RhbGxlcihuZXcgSW5zdGFsbGVyXFBsdWdpbkluc3RhbGxlcigkaW8sICRjb21wb3NlcikpOwokaW0tPmFkZEluc3RhbGxlcihuZXcgSW5zdGFsbGVyXE1ldGFwYWNrYWdlSW5zdGFsbGVyKCRpbykpOwp9CgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHB1cmdlUGFja2FnZXMoUmVwb3NpdG9yeVxSZXBvc2l0b3J5TWFuYWdlciAkcm0sIEluc3RhbGxlclxJbnN0YWxsYXRpb25NYW5hZ2VyICRpbSkKewokcmVwbyA9ICRybS0+Z2V0TG9jYWxSZXBvc2l0b3J5KCk7CmZvcmVhY2ggKCRyZXBvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CmlmICghJGltLT5pc1BhY2thZ2VJbnN0YWxsZWQoJHJlcG8sICRwYWNrYWdlKSkgewokcmVwby0+cmVtb3ZlUGFja2FnZSgkcGFja2FnZSk7Cn0KfQp9CgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoSU9JbnRlcmZhY2UgJGlvLCAkY29uZmlnID0gbnVsbCwgJGRpc2FibGVQbHVnaW5zID0gZmFsc2UpCnsKJGZhY3RvcnkgPSBuZXcgc3RhdGljKCk7CgpyZXR1cm4gJGZhY3RvcnktPmNyZWF0ZUNvbXBvc2VyKCRpbywgJGNvbmZpZywgJGRpc2FibGVQbHVnaW5zKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7Cgp1c2UgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I7CnVzZSBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOwoKCgoKCmNsYXNzIEZpbGVzeXN0ZW0Kewpwcml2YXRlICRwcm9jZXNzRXhlY3V0b3I7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHJvY2Vzc0V4ZWN1dG9yICRleGVjdXRvciA9IG51bGwpCnsKJHRoaXMtPnByb2Nlc3NFeGVjdXRvciA9ICRleGVjdXRvciA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiByZW1vdmUoJGZpbGUpCnsKaWYgKGlzX2RpcigkZmlsZSkpIHsKcmV0dXJuICR0aGlzLT5yZW1vdmVEaXJlY3RvcnkoJGZpbGUpOwp9CgppZiAoZmlsZV9leGlzdHMoJGZpbGUpKSB7CnJldHVybiB1bmxpbmsoJGZpbGUpOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RpckVtcHR5KCRkaXIpCnsKJGRpciA9IHJ0cmltKCRkaXIsICcvXFwnKTsKCnJldHVybiBjb3VudChnbG9iKCRkaXIuJy8qJykgPzogYXJyYXkoKSkgPT09IDAgJiYgY291bnQoZ2xvYigkZGlyLicvLionKSA/OiBhcnJheSgpKSA9PT0gMjsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbW92ZURpcmVjdG9yeSgkZGlyZWN0b3J5KQp7CmlmICghaXNfZGlyKCRkaXJlY3RvcnkpKSB7CnJldHVybiB0cnVlOwp9CgppZiAocHJlZ19tYXRjaCgne14oPzpbYS16XTopP1svXFxcXF0rJH1pJywgJGRpcmVjdG9yeSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdBYm9ydGluZyBhbiBhdHRlbXB0ZWQgZGVsZXRpb24gb2YgJy4kZGlyZWN0b3J5LicsIHRoaXMgd2FzIHByb2JhYmx5IG5vdCBpbnRlbmRlZCwgaWYgaXQgaXMgYSByZWFsIHVzZSBjYXNlIHBsZWFzZSByZXBvcnQgaXQuJyk7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdwcm9jX29wZW4nKSkgewpyZXR1cm4gJHRoaXMtPnJlbW92ZURpcmVjdG9yeVBocCgkZGlyZWN0b3J5KTsKfQoKaWYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewokY21kID0gc3ByaW50Zigncm1kaXIgL1MgL1EgJXMnLCBlc2NhcGVzaGVsbGFyZyhyZWFscGF0aCgkZGlyZWN0b3J5KSkpOwp9IGVsc2UgewokY21kID0gc3ByaW50Zigncm0gLXJmICVzJywgZXNjYXBlc2hlbGxhcmcoJGRpcmVjdG9yeSkpOwp9CgokcmVzdWx0ID0gJHRoaXMtPmdldFByb2Nlc3MoKS0+ZXhlY3V0ZSgkY21kLCAkb3V0cHV0KSA9PT0gMDsKCgogY2xlYXJzdGF0Y2FjaGUoKTsKCnJldHVybiAkcmVzdWx0ICYmICFpc19kaXIoJGRpcmVjdG9yeSk7Cn0KCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlRGlyZWN0b3J5UGhwKCRkaXJlY3RvcnkpCnsKJGl0ID0gbmV3IFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yKCRkaXJlY3RvcnksIFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yOjpTS0lQX0RPVFMpOwokcmkgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcigkaXQsIFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3I6OkNISUxEX0ZJUlNUKTsKCmZvcmVhY2ggKCRyaSBhcyAkZmlsZSkgewppZiAoJGZpbGUtPmlzRGlyKCkpIHsKcm1kaXIoJGZpbGUtPmdldFBhdGhuYW1lKCkpOwp9IGVsc2Ugewp1bmxpbmsoJGZpbGUtPmdldFBhdGhuYW1lKCkpOwp9Cn0KCnJldHVybiBybWRpcigkZGlyZWN0b3J5KTsKfQoKcHVibGljIGZ1bmN0aW9uIGVuc3VyZURpcmVjdG9yeUV4aXN0cygkZGlyZWN0b3J5KQp7CmlmICghaXNfZGlyKCRkaXJlY3RvcnkpKSB7CmlmIChmaWxlX2V4aXN0cygkZGlyZWN0b3J5KSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oCiRkaXJlY3RvcnkuJyBleGlzdHMgYW5kIGlzIG5vdCBhIGRpcmVjdG9yeS4nCik7Cn0KaWYgKCFAbWtkaXIoJGRpcmVjdG9yeSwgMDc3NywgdHJ1ZSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAokZGlyZWN0b3J5LicgZG9lcyBub3QgZXhpc3QgYW5kIGNvdWxkIG5vdCBiZSBjcmVhdGVkLicKKTsKfQp9Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjb3B5VGhlblJlbW92ZSgkc291cmNlLCAkdGFyZ2V0KQp7CiRpdCA9IG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkc291cmNlLCBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcjo6U0tJUF9ET1RTKTsKJHJpID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoJGl0LCBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpTRUxGX0ZJUlNUKTsKJHRoaXMtPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkdGFyZ2V0KTsKCmZvcmVhY2ggKCRyaSBhcyAkZmlsZSkgewokdGFyZ2V0UGF0aCA9ICR0YXJnZXQgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJHJpLT5nZXRTdWJQYXRoTmFtZSgpOwppZiAoJGZpbGUtPmlzRGlyKCkpIHsKJHRoaXMtPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkdGFyZ2V0UGF0aCk7Cn0gZWxzZSB7CmNvcHkoJGZpbGUtPmdldFBhdGhuYW1lKCksICR0YXJnZXRQYXRoKTsKfQp9CgokdGhpcy0+cmVtb3ZlRGlyZWN0b3J5UGhwKCRzb3VyY2UpOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVuYW1lKCRzb3VyY2UsICR0YXJnZXQpCnsKaWYgKHRydWUgPT09IEByZW5hbWUoJHNvdXJjZSwgJHRhcmdldCkpIHsKcmV0dXJuOwp9CgppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKcmV0dXJuICR0aGlzLT5jb3B5VGhlblJlbW92ZSgkc291cmNlLCAkdGFyZ2V0KTsKfQoKaWYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkgewoKICRjb21tYW5kID0gc3ByaW50ZigneGNvcHkgJXMgJXMgL0UgL0kgL1EnLCBlc2NhcGVzaGVsbGFyZygkc291cmNlKSwgZXNjYXBlc2hlbGxhcmcoJHRhcmdldCkpOwokcmVzdWx0ID0gJHRoaXMtPnByb2Nlc3NFeGVjdXRvci0+ZXhlY3V0ZSgkY29tbWFuZCwgJG91dHB1dCk7CgoKIGNsZWFyc3RhdGNhY2hlKCk7CgppZiAoMCA9PT0gJHJlc3VsdCkgewokdGhpcy0+cmVtb3ZlKCRzb3VyY2UpOwoKcmV0dXJuOwp9Cn0gZWxzZSB7CgogCiAkY29tbWFuZCA9IHNwcmludGYoJ212ICVzICVzJywgZXNjYXBlc2hlbGxhcmcoJHNvdXJjZSksIGVzY2FwZXNoZWxsYXJnKCR0YXJnZXQpKTsKJHJlc3VsdCA9ICR0aGlzLT5wcm9jZXNzRXhlY3V0b3ItPmV4ZWN1dGUoJGNvbW1hbmQsICRvdXRwdXQpOwoKCiBjbGVhcnN0YXRjYWNoZSgpOwoKaWYgKDAgPT09ICRyZXN1bHQpIHsKcmV0dXJuOwp9Cn0KCnJldHVybiAkdGhpcy0+Y29weVRoZW5SZW1vdmUoJHNvdXJjZSwgJHRhcmdldCk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBmaW5kU2hvcnRlc3RQYXRoKCRmcm9tLCAkdG8sICRkaXJlY3RvcmllcyA9IGZhbHNlKQp7CmlmICghJHRoaXMtPmlzQWJzb2x1dGVQYXRoKCRmcm9tKSB8fCAhJHRoaXMtPmlzQWJzb2x1dGVQYXRoKCR0bykpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignJGZyb20gKCVzKSBhbmQgJHRvICglcykgbXVzdCBiZSBhYnNvbHV0ZSBwYXRocy4nLCAkZnJvbSwgJHRvKSk7Cn0KCiRmcm9tID0gbGNmaXJzdCgkdGhpcy0+bm9ybWFsaXplUGF0aCgkZnJvbSkpOwokdG8gPSBsY2ZpcnN0KCR0aGlzLT5ub3JtYWxpemVQYXRoKCR0bykpOwoKaWYgKCRkaXJlY3RvcmllcykgewokZnJvbSAuPSAnL2R1bW15X2ZpbGUnOwp9CgppZiAoZGlybmFtZSgkZnJvbSkgPT09IGRpcm5hbWUoJHRvKSkgewpyZXR1cm4gJy4vJy5iYXNlbmFtZSgkdG8pOwp9CgokY29tbW9uUGF0aCA9ICR0bzsKd2hpbGUgKHN0cnBvcygkZnJvbS4nLycsICRjb21tb25QYXRoLicvJykgIT09IDAgJiYgJy8nICE9PSAkY29tbW9uUGF0aCAmJiAhcHJlZ19tYXRjaCgne15bYS16XTovPyR9aScsICRjb21tb25QYXRoKSkgewokY29tbW9uUGF0aCA9IHN0cnRyKGRpcm5hbWUoJGNvbW1vblBhdGgpLCAnXFwnLCAnLycpOwp9CgppZiAoMCAhPT0gc3RycG9zKCRmcm9tLCAkY29tbW9uUGF0aCkgfHwgJy8nID09PSAkY29tbW9uUGF0aCkgewpyZXR1cm4gJHRvOwp9CgokY29tbW9uUGF0aCA9IHJ0cmltKCRjb21tb25QYXRoLCAnLycpIC4gJy8nOwokc291cmNlUGF0aERlcHRoID0gc3Vic3RyX2NvdW50KHN1YnN0cigkZnJvbSwgc3RybGVuKCRjb21tb25QYXRoKSksICcvJyk7CiRjb21tb25QYXRoQ29kZSA9IHN0cl9yZXBlYXQoJy4uLycsICRzb3VyY2VQYXRoRGVwdGgpOwoKcmV0dXJuICgkY29tbW9uUGF0aENvZGUgLiBzdWJzdHIoJHRvLCBzdHJsZW4oJGNvbW1vblBhdGgpKSkgPzogJy4vJzsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbmRTaG9ydGVzdFBhdGhDb2RlKCRmcm9tLCAkdG8sICRkaXJlY3RvcmllcyA9IGZhbHNlKQp7CmlmICghJHRoaXMtPmlzQWJzb2x1dGVQYXRoKCRmcm9tKSB8fCAhJHRoaXMtPmlzQWJzb2x1dGVQYXRoKCR0bykpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignJGZyb20gKCVzKSBhbmQgJHRvICglcykgbXVzdCBiZSBhYnNvbHV0ZSBwYXRocy4nLCAkZnJvbSwgJHRvKSk7Cn0KCiRmcm9tID0gbGNmaXJzdCgkdGhpcy0+bm9ybWFsaXplUGF0aCgkZnJvbSkpOwokdG8gPSBsY2ZpcnN0KCR0aGlzLT5ub3JtYWxpemVQYXRoKCR0bykpOwoKaWYgKCRmcm9tID09PSAkdG8pIHsKcmV0dXJuICRkaXJlY3RvcmllcyA/ICdfX0RJUl9fJyA6ICdfX0ZJTEVfXyc7Cn0KCiRjb21tb25QYXRoID0gJHRvOwp3aGlsZSAoc3RycG9zKCRmcm9tLicvJywgJGNvbW1vblBhdGguJy8nKSAhPT0gMCAmJiAnLycgIT09ICRjb21tb25QYXRoICYmICFwcmVnX21hdGNoKCd7XlthLXpdOi8/JH1pJywgJGNvbW1vblBhdGgpICYmICcuJyAhPT0gJGNvbW1vblBhdGgpIHsKJGNvbW1vblBhdGggPSBzdHJ0cihkaXJuYW1lKCRjb21tb25QYXRoKSwgJ1xcJywgJy8nKTsKfQoKaWYgKDAgIT09IHN0cnBvcygkZnJvbSwgJGNvbW1vblBhdGgpIHx8ICcvJyA9PT0gJGNvbW1vblBhdGggfHwgJy4nID09PSAkY29tbW9uUGF0aCkgewpyZXR1cm4gdmFyX2V4cG9ydCgkdG8sIHRydWUpOwp9CgokY29tbW9uUGF0aCA9IHJ0cmltKCRjb21tb25QYXRoLCAnLycpIC4gJy8nOwppZiAoc3RycG9zKCR0bywgJGZyb20uJy8nKSA9PT0gMCkgewpyZXR1cm4gJ19fRElSX18gLiAnLnZhcl9leHBvcnQoc3Vic3RyKCR0bywgc3RybGVuKCRmcm9tKSksIHRydWUpOwp9CiRzb3VyY2VQYXRoRGVwdGggPSBzdWJzdHJfY291bnQoc3Vic3RyKCRmcm9tLCBzdHJsZW4oJGNvbW1vblBhdGgpKSwgJy8nKSArICRkaXJlY3RvcmllczsKJGNvbW1vblBhdGhDb2RlID0gc3RyX3JlcGVhdCgnZGlybmFtZSgnLCAkc291cmNlUGF0aERlcHRoKS4nX19ESVJfXycuc3RyX3JlcGVhdCgnKScsICRzb3VyY2VQYXRoRGVwdGgpOwokcmVsVGFyZ2V0ID0gc3Vic3RyKCR0bywgc3RybGVuKCRjb21tb25QYXRoKSk7CgpyZXR1cm4gJGNvbW1vblBhdGhDb2RlIC4gKHN0cmxlbigkcmVsVGFyZ2V0KSA/ICcuJyAuIHZhcl9leHBvcnQoJy8nIC4gJHJlbFRhcmdldCwgdHJ1ZSkgOiAnJyk7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0Fic29sdXRlUGF0aCgkcGF0aCkKewpyZXR1cm4gc3Vic3RyKCRwYXRoLCAwLCAxKSA9PT0gJy8nIHx8IHN1YnN0cigkcGF0aCwgMSwgMSkgPT09ICc6JzsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2l6ZSgkcGF0aCkKewppZiAoIWZpbGVfZXhpc3RzKCRwYXRoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIiRwYXRoIGRvZXMgbm90IGV4aXN0LiIpOwp9CmlmIChpc19kaXIoJHBhdGgpKSB7CnJldHVybiAkdGhpcy0+ZGlyZWN0b3J5U2l6ZSgkcGF0aCk7Cn0KCnJldHVybiBmaWxlc2l6ZSgkcGF0aCk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbm9ybWFsaXplUGF0aCgkcGF0aCkKewokcGFydHMgPSBhcnJheSgpOwokcGF0aCA9IHN0cnRyKCRwYXRoLCAnXFwnLCAnLycpOwokcHJlZml4ID0gJyc7CiRhYnNvbHV0ZSA9IGZhbHNlOwoKaWYgKHByZWdfbWF0Y2goJ3teKFswLTlhLXpdKzooPzovLyg/OlthLXpdOik/KT8pfWknLCAkcGF0aCwgJG1hdGNoKSkgewokcHJlZml4ID0gJG1hdGNoWzFdOwokcGF0aCA9IHN1YnN0cigkcGF0aCwgc3RybGVuKCRwcmVmaXgpKTsKfQoKaWYgKHN1YnN0cigkcGF0aCwgMCwgMSkgPT09ICcvJykgewokYWJzb2x1dGUgPSB0cnVlOwokcGF0aCA9IHN1YnN0cigkcGF0aCwgMSk7Cn0KCiR1cCA9IGZhbHNlOwpmb3JlYWNoIChleHBsb2RlKCcvJywgJHBhdGgpIGFzICRjaHVuaykgewppZiAoJy4uJyA9PT0gJGNodW5rICYmICgkYWJzb2x1dGUgfHwgJHVwKSkgewphcnJheV9wb3AoJHBhcnRzKTsKJHVwID0gIShlbXB0eSgkcGFydHMpIHx8ICcuLicgPT09IGVuZCgkcGFydHMpKTsKfSBlbHNlaWYgKCcuJyAhPT0gJGNodW5rICYmICcnICE9PSAkY2h1bmspIHsKJHBhcnRzW10gPSAkY2h1bms7CiR1cCA9ICcuLicgIT09ICRjaHVuazsKfQp9CgpyZXR1cm4gJHByZWZpeC4oJGFic29sdXRlID8gJy8nIDogJycpLmltcGxvZGUoJy8nLCAkcGFydHMpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGlyZWN0b3J5U2l6ZSgkZGlyZWN0b3J5KQp7CiRpdCA9IG5ldyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcigkZGlyZWN0b3J5LCBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcjo6U0tJUF9ET1RTKTsKJHJpID0gbmV3IFJlY3Vyc2l2ZUl0ZXJhdG9ySXRlcmF0b3IoJGl0LCBSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yOjpDSElMRF9GSVJTVCk7Cgokc2l6ZSA9IDA7CmZvcmVhY2ggKCRyaSBhcyAkZmlsZSkgewppZiAoJGZpbGUtPmlzRmlsZSgpKSB7CiRzaXplICs9ICRmaWxlLT5nZXRTaXplKCk7Cn0KfQoKcmV0dXJuICRzaXplOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UHJvY2VzcygpCnsKcmV0dXJuIG5ldyBQcm9jZXNzRXhlY3V0b3I7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxVdGlsOwoKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcQ29uZmlnOwp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxUcmFuc3BvcnRFeGNlcHRpb247CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwoKCgoKY2xhc3MgR2l0SHViCnsKcHJvdGVjdGVkICRpbzsKcHJvdGVjdGVkICRjb25maWc7CnByb3RlY3RlZCAkcHJvY2VzczsKcHJvdGVjdGVkICRyZW1vdGVGaWxlc3lzdGVtOwoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSU9JbnRlcmZhY2UgJGlvLCBDb25maWcgJGNvbmZpZywgUHJvY2Vzc0V4ZWN1dG9yICRwcm9jZXNzID0gbnVsbCwgUmVtb3RlRmlsZXN5c3RlbSAkcmVtb3RlRmlsZXN5c3RlbSA9IG51bGwpCnsKJHRoaXMtPmlvID0gJGlvOwokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yOwokdGhpcy0+cmVtb3RlRmlsZXN5c3RlbSA9ICRyZW1vdGVGaWxlc3lzdGVtID86IG5ldyBSZW1vdGVGaWxlc3lzdGVtKCRpbywgJGNvbmZpZyk7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVPQXV0aCgkb3JpZ2luVXJsKQp7CmlmICghaW5fYXJyYXkoJG9yaWdpblVybCwgJHRoaXMtPmNvbmZpZy0+Z2V0KCdnaXRodWItZG9tYWlucycpKSkgewpyZXR1cm4gZmFsc2U7Cn0KCgogaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdnaXQgY29uZmlnIGdpdGh1Yi5hY2Nlc3N0b2tlbicsICRvdXRwdXQpKSB7CiR0aGlzLT5pby0+c2V0QXV0aGVudGljYXRpb24oJG9yaWdpblVybCwgdHJpbSgkb3V0cHV0KSwgJ3gtb2F1dGgtYmFzaWMnKTsKCnJldHVybiB0cnVlOwp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhdXRob3JpemVPQXV0aEludGVyYWN0aXZlbHkoJG9yaWdpblVybCwgJG1lc3NhZ2UgPSBudWxsKQp7CiRhdHRlbXB0Q291bnRlciA9IDA7CgokYXBpVXJsID0gKCdnaXRodWIuY29tJyA9PT0gJG9yaWdpblVybCkgPyAnYXBpLmdpdGh1Yi5jb20nIDogJG9yaWdpblVybCAuICcvYXBpL3YzJzsKCmlmICgkbWVzc2FnZSkgewokdGhpcy0+aW8tPndyaXRlKCRtZXNzYWdlKTsKfQokdGhpcy0+aW8tPndyaXRlKCdUaGUgY3JlZGVudGlhbHMgd2lsbCBiZSBzd2FwcGVkIGZvciBhbiBPQXV0aCB0b2tlbiBzdG9yZWQgaW4gJy4kdGhpcy0+Y29uZmlnLT5nZXQoJ2hvbWUnKS4nL2NvbmZpZy5qc29uLCB5b3VyIHBhc3N3b3JkIHdpbGwgbm90IGJlIHN0b3JlZCcpOwokdGhpcy0+aW8tPndyaXRlKCdUbyByZXZva2UgYWNjZXNzIHRvIHRoaXMgdG9rZW4geW91IGNhbiB2aXNpdCBodHRwczovL2dpdGh1Yi5jb20vc2V0dGluZ3MvYXBwbGljYXRpb25zJyk7CndoaWxlICgkYXR0ZW1wdENvdW50ZXIrKyA8IDUpIHsKdHJ5IHsKaWYgKGVtcHR5KCRvdHApIHx8ICEkdGhpcy0+aW8tPmhhc0F1dGhlbnRpY2F0aW9uKCRvcmlnaW5VcmwpKSB7CiR1c2VybmFtZSA9ICR0aGlzLT5pby0+YXNrKCdVc2VybmFtZTogJyk7CiRwYXNzd29yZCA9ICR0aGlzLT5pby0+YXNrQW5kSGlkZUFuc3dlcignUGFzc3dvcmQ6ICcpOwokb3RwID0gbnVsbDsKCiR0aGlzLT5pby0+c2V0QXV0aGVudGljYXRpb24oJG9yaWdpblVybCwgJHVzZXJuYW1lLCAkcGFzc3dvcmQpOwp9CgoKICRhcHBOYW1lID0gJ0NvbXBvc2VyJzsKaWYgKDAgPT09ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCdob3N0bmFtZScsICRvdXRwdXQpKSB7CiRhcHBOYW1lIC49ICcgb24gJyAuIHRyaW0oJG91dHB1dCk7Cn0KCiRoZWFkZXJzID0gYXJyYXkoKTsKaWYgKCRvdHApIHsKJGhlYWRlcnMgPSBhcnJheSgnWC1HaXRIdWItT1RQOiAnIC4gJG90cCk7Cn0KCgogJGNvbnRlbnRzID0gbnVsbDsKJGF1dGhzID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+cmVtb3RlRmlsZXN5c3RlbS0+Z2V0Q29udGVudHMoJG9yaWdpblVybCwgJ2h0dHBzOi8vJy4gJGFwaVVybCAuICcvYXV0aG9yaXphdGlvbnMnLCBmYWxzZSwgYXJyYXkoCidyZXRyeS1hdXRoLWZhaWx1cmUnID0+IGZhbHNlLAonaHR0cCcgPT4gYXJyYXkoCidoZWFkZXInID0+ICRoZWFkZXJzCikKKSkpOwpmb3JlYWNoICgkYXV0aHMgYXMgJGF1dGgpIHsKaWYgKAppc3NldCgkYXV0aFsnYXBwJ11bJ25hbWUnXSkKJiYgMCA9PT0gc3RycG9zKCRhdXRoWydhcHAnXVsnbmFtZSddLCAkYXBwTmFtZSkKJiYgJGF1dGhbJ2FwcCddWyd1cmwnXSA9PT0gJ2h0dHBzOi8vZ2V0Y29tcG9zZXIub3JnLycKKSB7CiR0aGlzLT5pby0+d3JpdGUoJ0FuIGV4aXN0aW5nIE9BdXRoIHRva2VuIGZvciBDb21wb3NlciBpcyBwcmVzZW50IGFuZCB3aWxsIGJlIHJldXNlZCcpOwoKJGNvbnRlbnRzWyd0b2tlbiddID0gJGF1dGhbJ3Rva2VuJ107CmJyZWFrOwp9Cn0KCgogaWYgKGVtcHR5KCRjb250ZW50c1sndG9rZW4nXSkpIHsKJGhlYWRlcnNbXSA9ICdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2pzb24nOwoKJGNvbnRlbnRzID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+cmVtb3RlRmlsZXN5c3RlbS0+Z2V0Q29udGVudHMoJG9yaWdpblVybCwgJ2h0dHBzOi8vJy4gJGFwaVVybCAuICcvYXV0aG9yaXphdGlvbnMnLCBmYWxzZSwgYXJyYXkoCidyZXRyeS1hdXRoLWZhaWx1cmUnID0+IGZhbHNlLAonaHR0cCcgPT4gYXJyYXkoCidtZXRob2QnID0+ICdQT1NUJywKJ2ZvbGxvd19sb2NhdGlvbicgPT4gZmFsc2UsCidoZWFkZXInID0+ICRoZWFkZXJzLAonY29udGVudCcgPT4ganNvbl9lbmNvZGUoYXJyYXkoCidzY29wZXMnID0+IGFycmF5KCdyZXBvJyksCidub3RlJyA9PiAkYXBwTmFtZSwKJ25vdGVfdXJsJyA9PiAnaHR0cHM6Ly9nZXRjb21wb3Nlci5vcmcvJywKKSksCikKKSkpOwokdGhpcy0+aW8tPndyaXRlKCdUb2tlbiBzdWNjZXNzZnVsbHkgY3JlYXRlZCcpOwp9Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewppZiAoaW5fYXJyYXkoJGUtPmdldENvZGUoKSwgYXJyYXkoNDAzLCA0MDEpKSkgewoKIGlmICgkdGhpcy0+aW8tPmhhc0F1dGhlbnRpY2F0aW9uKCRvcmlnaW5VcmwpKSB7CiRoZWFkZXJOYW1lcyA9IGFycmF5X21hcChmdW5jdGlvbigkaGVhZGVyKSB7CnJldHVybiBzdHJ0b2xvd2VyKHN0cnN0cigkaGVhZGVyLCAnOicsIHRydWUpKTsKfSwgJGUtPmdldEhlYWRlcnMoKSk7CgppZiAoJGtleSA9IGFycmF5X3NlYXJjaCgneC1naXRodWItb3RwJywgJGhlYWRlck5hbWVzKSkgewokaGVhZGVycyA9ICRlLT5nZXRIZWFkZXJzKCk7Cmxpc3QoJHJlcXVpcmVkLCAkbWV0aG9kKSA9IGFycmF5X21hcCgndHJpbScsIGV4cGxvZGUoJzsnLCBzdWJzdHIoc3Ryc3RyKCRoZWFkZXJzWyRrZXldLCAnOicpLCAxKSkpOwoKaWYgKCdyZXF1aXJlZCcgPT09ICRyZXF1aXJlZCkgewokdGhpcy0+aW8tPndyaXRlKCdUd28tZmFjdG9yIEF1dGhlbnRpY2F0aW9uJyk7CgppZiAoJ2FwcCcgPT09ICRtZXRob2QpIHsKJHRoaXMtPmlvLT53cml0ZSgnT3BlbiB0aGUgdHdvLWZhY3RvciBhdXRoZW50aWNhdGlvbiBhcHAgb24geW91ciBkZXZpY2UgdG8gdmlldyB5b3VyIGF1dGhlbnRpY2F0aW9uIGNvZGUgYW5kIHZlcmlmeSB5b3VyIGlkZW50aXR5LicpOwp9CgppZiAoJ3NtcycgPT09ICRtZXRob2QpIHsKJHRoaXMtPmlvLT53cml0ZSgnWW91IGhhdmUgYmVlbiBzZW50IGFuIFNNUyBtZXNzYWdlIHdpdGggYW4gYXV0aGVudGljYXRpb24gY29kZSB0byB2ZXJpZnkgeW91ciBpZGVudGl0eS4nKTsKfQoKJG90cCA9ICR0aGlzLT5pby0+YXNrKCdBdXRoZW50aWNhdGlvbiBDb2RlOiAnKTsKCmNvbnRpbnVlOwp9Cn0KfQoKJHRoaXMtPmlvLT53cml0ZSgnSW52YWxpZCBjcmVkZW50aWFscy4nKTsKY29udGludWU7Cn0KCnRocm93ICRlOwp9CgokdGhpcy0+aW8tPnNldEF1dGhlbnRpY2F0aW9uKCRvcmlnaW5VcmwsICRjb250ZW50c1sndG9rZW4nXSwgJ3gtb2F1dGgtYmFzaWMnKTsKCgogJGdpdGh1YlRva2VucyA9ICR0aGlzLT5jb25maWctPmdldCgnZ2l0aHViLW9hdXRoJykgPzogYXJyYXkoKTsKJGdpdGh1YlRva2Vuc1skb3JpZ2luVXJsXSA9ICRjb250ZW50c1sndG9rZW4nXTsKJHRoaXMtPmNvbmZpZy0+Z2V0Q29uZmlnU291cmNlKCktPmFkZENvbmZpZ1NldHRpbmcoJ2dpdGh1Yi1vYXV0aCcsICRnaXRodWJUb2tlbnMpOwoKcmV0dXJuIHRydWU7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiSW52YWxpZCBHaXRIdWIgY3JlZGVudGlhbHMgNSB0aW1lcyBpbiBhIHJvdywgYWJvcnRpbmcuIik7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxVdGlsOwoKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzOwoKCgoKY2xhc3MgUGVyZm9yY2UKewpwcm90ZWN0ZWQgJHBhdGg7CnByb3RlY3RlZCAkcDREZXBvdDsKcHJvdGVjdGVkICRwNENsaWVudDsKcHJvdGVjdGVkICRwNFVzZXI7CnByb3RlY3RlZCAkcDRQYXNzd29yZDsKcHJvdGVjdGVkICRwNFBvcnQ7CnByb3RlY3RlZCAkcDRTdHJlYW07CnByb3RlY3RlZCAkcDRDbGllbnRTcGVjOwpwcm90ZWN0ZWQgJHA0RGVwb3RUeXBlOwpwcm90ZWN0ZWQgJHA0QnJhbmNoOwpwcm90ZWN0ZWQgJHByb2Nlc3M7CnByb3RlY3RlZCAkdW5pcXVlUGVyZm9yY2VDbGllbnROYW1lOwpwcm90ZWN0ZWQgJHdpbmRvd3NGbGFnOwpwcm90ZWN0ZWQgJGNvbW1hbmRSZXN1bHQ7Cgpwcm90ZWN0ZWQgJGlvOwoKcHJvdGVjdGVkICRmaWxlc3lzdGVtOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRyZXBvQ29uZmlnLCAkcG9ydCwgJHBhdGgsIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcywgJGlzV2luZG93cywgSU9JbnRlcmZhY2UgJGlvKQp7CiR0aGlzLT53aW5kb3dzRmxhZyA9ICRpc1dpbmRvd3M7CiR0aGlzLT5wNFBvcnQgPSAkcG9ydDsKJHRoaXMtPmluaXRpYWxpemVQYXRoKCRwYXRoKTsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzczsKJHRoaXMtPmluaXRpYWxpemUoJHJlcG9Db25maWcpOwokdGhpcy0+aW8gPSAkaW87Cn0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCRyZXBvQ29uZmlnLCAkcG9ydCwgJHBhdGgsIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcywgSU9JbnRlcmZhY2UgJGlvKQp7CiRpc1dpbmRvd3MgPSBkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJyk7CiRwZXJmb3JjZSA9IG5ldyBQZXJmb3JjZSgkcmVwb0NvbmZpZywgJHBvcnQsICRwYXRoLCAkcHJvY2VzcywgJGlzV2luZG93cywgJGlvKTsKcmV0dXJuICRwZXJmb3JjZTsKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjaGVja1NlcnZlckV4aXN0cygkdXJsLCBQcm9jZXNzRXhlY3V0b3IgJHByb2Nlc3NFeGVjdXRvcikKewokb3V0cHV0ID0gbnVsbDsKcmV0dXJuIDAgPT09ICRwcm9jZXNzRXhlY3V0b3ItPmV4ZWN1dGUoJ3A0IC1wICcgLiAkdXJsIC4gJyBpbmZvIC1zJywgJG91dHB1dCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplKCRyZXBvQ29uZmlnKQp7CiR0aGlzLT51bmlxdWVQZXJmb3JjZUNsaWVudE5hbWUgPSAkdGhpcy0+Z2VuZXJhdGVVbmlxdWVQZXJmb3JjZUNsaWVudE5hbWUoKTsKaWYgKG51bGwgPT0gJHJlcG9Db25maWcpIHsKcmV0dXJuOwp9CmlmIChpc3NldCgkcmVwb0NvbmZpZ1sndW5pcXVlX3BlcmZvcmNlX2NsaWVudF9uYW1lJ10pKSB7CiR0aGlzLT51bmlxdWVQZXJmb3JjZUNsaWVudE5hbWUgPSAkcmVwb0NvbmZpZ1sndW5pcXVlX3BlcmZvcmNlX2NsaWVudF9uYW1lJ107Cn0KCmlmIChpc3NldCgkcmVwb0NvbmZpZ1snZGVwb3QnXSkpIHsKJHRoaXMtPnA0RGVwb3QgPSAkcmVwb0NvbmZpZ1snZGVwb3QnXTsKfQppZiAoaXNzZXQoJHJlcG9Db25maWdbJ2JyYW5jaCddKSkgewokdGhpcy0+cDRCcmFuY2ggPSAkcmVwb0NvbmZpZ1snYnJhbmNoJ107Cn0KaWYgKGlzc2V0KCRyZXBvQ29uZmlnWydwNHVzZXInXSkpIHsKJHRoaXMtPnA0VXNlciA9ICRyZXBvQ29uZmlnWydwNHVzZXInXTsKfSBlbHNlIHsKJHRoaXMtPnA0VXNlciA9ICR0aGlzLT5nZXRQNHZhcmlhYmxlKCdQNFVTRVInKTsKfQppZiAoaXNzZXQoJHJlcG9Db25maWdbJ3A0cGFzc3dvcmQnXSkpIHsKJHRoaXMtPnA0UGFzc3dvcmQgPSAkcmVwb0NvbmZpZ1sncDRwYXNzd29yZCddOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBpbml0aWFsaXplRGVwb3RBbmRCcmFuY2goJGRlcG90LCAkYnJhbmNoKQp7CmlmIChpc3NldCgkZGVwb3QpKSB7CiR0aGlzLT5wNERlcG90ID0gJGRlcG90Owp9CmlmIChpc3NldCgkYnJhbmNoKSkgewokdGhpcy0+cDRCcmFuY2ggPSAkYnJhbmNoOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZW5lcmF0ZVVuaXF1ZVBlcmZvcmNlQ2xpZW50TmFtZSgpCnsKcmV0dXJuIGdldGhvc3RuYW1lKCkgLiAiXyIgLiB0aW1lKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBjbGVhbnVwQ2xpZW50U3BlYygpCnsKJGNsaWVudCA9ICR0aGlzLT5nZXRDbGllbnQoKTsKJHRhc2sgPSAnY2xpZW50IC1kICcgLiAkY2xpZW50OwokdXNlUDRDbGllbnQgPSBmYWxzZTsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJHRhc2ssICR1c2VQNENsaWVudCk7CiR0aGlzLT5leGVjdXRlQ29tbWFuZCgkY29tbWFuZCk7CiRjbGllbnRTcGVjID0gJHRoaXMtPmdldFA0Q2xpZW50U3BlYygpOwokZmlsZVN5c3RlbSA9ICR0aGlzLT5nZXRGaWxlc3lzdGVtKCk7CiRmaWxlU3lzdGVtLT5yZW1vdmUoJGNsaWVudFNwZWMpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZUNvbW1hbmQoJGNvbW1hbmQpCnsKJHRoaXMtPmNvbW1hbmRSZXN1bHQgPSAiIjsKJGV4aXRfY29kZSA9ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjb21tYW5kLCAkdGhpcy0+Y29tbWFuZFJlc3VsdCk7CnJldHVybiAkZXhpdF9jb2RlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xpZW50KCkKewppZiAoIWlzc2V0KCR0aGlzLT5wNENsaWVudCkpIHsKJGNsZWFuU3RyZWFtTmFtZSA9IHN0cl9yZXBsYWNlKCdAJywgJycsIHN0cl9yZXBsYWNlKCcvJywgJ18nLCBzdHJfcmVwbGFjZSgnLy8nLCAnJywgJHRoaXMtPmdldFN0cmVhbSgpKSkpOwokdGhpcy0+cDRDbGllbnQgPSAnY29tcG9zZXJfcGVyZm9yY2VfJyAuICR0aGlzLT51bmlxdWVQZXJmb3JjZUNsaWVudE5hbWUgLiAnXycgLiAkY2xlYW5TdHJlYW1OYW1lOwp9CgpyZXR1cm4gJHRoaXMtPnA0Q2xpZW50Owp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UGF0aCgpCnsKcmV0dXJuICR0aGlzLT5wYXRoOwp9CgpwdWJsaWMgZnVuY3Rpb24gaW5pdGlhbGl6ZVBhdGgoJHBhdGgpCnsKJHRoaXMtPnBhdGggPSAkcGF0aDsKJGZzID0gJHRoaXMtPmdldEZpbGVzeXN0ZW0oKTsKJGZzLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoJHBhdGgpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UG9ydCgpCnsKcmV0dXJuICR0aGlzLT5wNFBvcnQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRTdHJlYW0oJHN0cmVhbSkKewokdGhpcy0+cDRTdHJlYW0gPSAkc3RyZWFtOwokaW5kZXggPSBzdHJycG9zKCRzdHJlYW0sICcvJyk7CgogaWYgKCRpbmRleCA+IDIpIHsKJHRoaXMtPnA0RGVwb3RUeXBlID0gJ3N0cmVhbSc7Cn0KfQoKcHVibGljIGZ1bmN0aW9uIGlzU3RyZWFtKCkKewpyZXR1cm4gKHN0cmNtcCgkdGhpcy0+cDREZXBvdFR5cGUsICdzdHJlYW0nKSA9PT0gMCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRTdHJlYW0oKQp7CmlmICghaXNzZXQoJHRoaXMtPnA0U3RyZWFtKSkgewppZiAoJHRoaXMtPmlzU3RyZWFtKCkpIHsKJHRoaXMtPnA0U3RyZWFtID0gJy8vJyAuICR0aGlzLT5wNERlcG90IC4gJy8nIC4gJHRoaXMtPnA0QnJhbmNoOwp9IGVsc2UgewokdGhpcy0+cDRTdHJlYW0gPSAnLy8nIC4gJHRoaXMtPnA0RGVwb3Q7Cn0KfQoKcmV0dXJuICR0aGlzLT5wNFN0cmVhbTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFN0cmVhbVdpdGhvdXRMYWJlbCgkc3RyZWFtKQp7CiRpbmRleCA9IHN0cnBvcygkc3RyZWFtLCAnQCcpOwppZiAoJGluZGV4ID09PSBmYWxzZSkgewpyZXR1cm4gJHN0cmVhbTsKfQoKcmV0dXJuIHN1YnN0cigkc3RyZWFtLCAwLCAkaW5kZXgpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UDRDbGllbnRTcGVjKCkKewokcDRjbGllbnRTcGVjID0gJHRoaXMtPnBhdGggLiAnLycgLiAkdGhpcy0+Z2V0Q2xpZW50KCkgLiAnLnA0LnNwZWMnOwoKcmV0dXJuICRwNGNsaWVudFNwZWM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRVc2VyKCkKewpyZXR1cm4gJHRoaXMtPnA0VXNlcjsKfQoKcHVibGljIGZ1bmN0aW9uIHNldFVzZXIoJHVzZXIpCnsKJHRoaXMtPnA0VXNlciA9ICR1c2VyOwp9CgpwdWJsaWMgZnVuY3Rpb24gcXVlcnlQNFVzZXIoKQp7CiR0aGlzLT5nZXRVc2VyKCk7CmlmIChzdHJsZW4oJHRoaXMtPnA0VXNlcikgPiAwKSB7CnJldHVybjsKfQokdGhpcy0+cDRVc2VyID0gJHRoaXMtPmdldFA0dmFyaWFibGUoJ1A0VVNFUicpOwppZiAoc3RybGVuKCR0aGlzLT5wNFVzZXIpID4gMCkgewpyZXR1cm47Cn0KJHRoaXMtPnA0VXNlciA9ICR0aGlzLT5pby0+YXNrKCdFbnRlciBQNCBVc2VyOicpOwppZiAoJHRoaXMtPndpbmRvd3NGbGFnKSB7CiRjb21tYW5kID0gJ3A0IHNldCBQNFVTRVI9JyAuICR0aGlzLT5wNFVzZXI7Cn0gZWxzZSB7CiRjb21tYW5kID0gJ2V4cG9ydCBQNFVTRVI9JyAuICR0aGlzLT5wNFVzZXI7Cn0KJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFA0dmFyaWFibGUoJG5hbWUpCnsKaWYgKCR0aGlzLT53aW5kb3dzRmxhZykgewokY29tbWFuZCA9ICdwNCBzZXQnOwokdGhpcy0+ZXhlY3V0ZUNvbW1hbmQoJGNvbW1hbmQpOwokcmVzdWx0ID0gdHJpbSgkdGhpcy0+Y29tbWFuZFJlc3VsdCk7CiRyZXNBcnJheSA9IGV4cGxvZGUoUEhQX0VPTCwgJHJlc3VsdCk7CmZvcmVhY2ggKCRyZXNBcnJheSBhcyAkbGluZSkgewokZmllbGRzID0gZXhwbG9kZSgnPScsICRsaW5lKTsKaWYgKHN0cmNtcCgkbmFtZSwgJGZpZWxkc1swXSkgPT0gMCkgewokaW5kZXggPSBzdHJwb3MoJGZpZWxkc1sxXSwgJyAnKTsKaWYgKCRpbmRleCA9PT0gZmFsc2UpIHsKJHZhbHVlID0gJGZpZWxkc1sxXTsKfSBlbHNlIHsKJHZhbHVlID0gc3Vic3RyKCRmaWVsZHNbMV0sIDAsICRpbmRleCk7Cn0KJHZhbHVlID0gdHJpbSgkdmFsdWUpOwoKcmV0dXJuICR2YWx1ZTsKfQp9Cn0gZWxzZSB7CiRjb21tYW5kID0gJ2VjaG8gJCcgLiAkbmFtZTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9IHRyaW0oJHRoaXMtPmNvbW1hbmRSZXN1bHQpOwpyZXR1cm4gJHJlc3VsdDsKfQp9CgpwdWJsaWMgZnVuY3Rpb24gcXVlcnlQNFBhc3N3b3JkKCkKewppZiAoaXNzZXQoJHRoaXMtPnA0UGFzc3dvcmQpKSB7CnJldHVybiAkdGhpcy0+cDRQYXNzd29yZDsKfQokcGFzc3dvcmQgPSAkdGhpcy0+Z2V0UDR2YXJpYWJsZSgnUDRQQVNTV0QnKTsKaWYgKHN0cmxlbigkcGFzc3dvcmQpIDw9IDApIHsKJHBhc3N3b3JkID0gJHRoaXMtPmlvLT5hc2tBbmRIaWRlQW5zd2VyKCdFbnRlciBwYXNzd29yZCBmb3IgUGVyZm9yY2UgdXNlciAnIC4gJHRoaXMtPmdldFVzZXIoKSAuICc6ICcpOwp9CiR0aGlzLT5wNFBhc3N3b3JkID0gJHBhc3N3b3JkOwoKcmV0dXJuICRwYXNzd29yZDsKfQoKcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlUDRDb21tYW5kKCRjb21tYW5kLCAkdXNlQ2xpZW50ID0gdHJ1ZSkKewokcDRDb21tYW5kID0gJ3A0ICc7CiRwNENvbW1hbmQgPSAkcDRDb21tYW5kIC4gJy11ICcgLiAkdGhpcy0+Z2V0VXNlcigpIC4gJyAnOwppZiAoJHVzZUNsaWVudCkgewokcDRDb21tYW5kID0gJHA0Q29tbWFuZCAuICctYyAnIC4gJHRoaXMtPmdldENsaWVudCgpIC4gJyAnOwp9CiRwNENvbW1hbmQgPSAkcDRDb21tYW5kIC4gJy1wICcgLiAkdGhpcy0+Z2V0UG9ydCgpIC4gJyAnOwokcDRDb21tYW5kID0gJHA0Q29tbWFuZCAuICRjb21tYW5kOwoKcmV0dXJuICRwNENvbW1hbmQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0xvZ2dlZEluKCkKewokY29tbWFuZCA9ICR0aGlzLT5nZW5lcmF0ZVA0Q29tbWFuZCgnbG9naW4gLXMnLCBmYWxzZSk7CiRleGl0Q29kZSA9ICR0aGlzLT5leGVjdXRlQ29tbWFuZCgkY29tbWFuZCk7CmlmICgkZXhpdENvZGUpewokZXJyb3JPdXRwdXQgPSAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKTsKJGluZGV4ID0gc3RycG9zKCRlcnJvck91dHB1dCwgJHRoaXMtPmdldFVzZXIoKSk7CmlmICgkaW5kZXggPT09IGZhbHNlKXsKJGluZGV4ID0gc3RycG9zKCRlcnJvck91dHB1dCwgJ3A0Jyk7CmlmICgkaW5kZXg9PT1mYWxzZSl7CnJldHVybiBmYWxzZTsKfQp0aHJvdyBuZXcgXEV4Y2VwdGlvbigncDQgY29tbWFuZCBub3QgZm91bmQgaW4gcGF0aDogJyAuICRlcnJvck91dHB1dCk7Cn0KdGhyb3cgbmV3IFxFeGNlcHRpb24oJ0ludmFsaWQgdXNlciBuYW1lOiAnIC4gJHRoaXMtPmdldFVzZXIoKSApOwp9CnJldHVybiB0cnVlOwp9CgpwdWJsaWMgZnVuY3Rpb24gY29ubmVjdENsaWVudCgpCnsKJHA0Q3JlYXRlQ2xpZW50Q29tbWFuZCA9ICR0aGlzLT5nZW5lcmF0ZVA0Q29tbWFuZCgnY2xpZW50IC1pIDwgJyAuIHN0cl9yZXBsYWNlKCAiICIsICJcXCAiLCAkdGhpcy0+Z2V0UDRDbGllbnRTcGVjKCkgKSk7CiR0aGlzLT5leGVjdXRlQ29tbWFuZCgkcDRDcmVhdGVDbGllbnRDb21tYW5kKTsKfQoKcHVibGljIGZ1bmN0aW9uIHN5bmNDb2RlQmFzZSgkc291cmNlUmVmZXJlbmNlKQp7CiRwcmV2RGlyID0gZ2V0Y3dkKCk7CmNoZGlyKCR0aGlzLT5wYXRoKTsKJHA0U3luY0NvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJ3N5bmMgLWYgJyk7CmlmIChudWxsICE9ICRzb3VyY2VSZWZlcmVuY2UpIHsKJHA0U3luY0NvbW1hbmQgPSAkcDRTeW5jQ29tbWFuZCAuICdAJyAuICRzb3VyY2VSZWZlcmVuY2U7Cn0KJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRwNFN5bmNDb21tYW5kKTsKY2hkaXIoJHByZXZEaXIpOwp9CgpwdWJsaWMgZnVuY3Rpb24gd3JpdGVDbGllbnRTcGVjVG9GaWxlKCRzcGVjKQp7CmZ3cml0ZSgkc3BlYywgJ0NsaWVudDogJyAuICR0aGlzLT5nZXRDbGllbnQoKSAuIFBIUF9FT0wgLiBQSFBfRU9MKTsKZndyaXRlKCRzcGVjLCAnVXBkYXRlOiAnIC4gZGF0ZSgnWS9tL2QgSDppOnMnKSAuIFBIUF9FT0wgLiBQSFBfRU9MKTsKZndyaXRlKCRzcGVjLCAnQWNjZXNzOiAnIC4gZGF0ZSgnWS9tL2QgSDppOnMnKSAuIFBIUF9FT0wpOwpmd3JpdGUoJHNwZWMsICdPd25lcjogICcgLiAkdGhpcy0+Z2V0VXNlcigpIC4gUEhQX0VPTCAuIFBIUF9FT0wpOwpmd3JpdGUoJHNwZWMsICdEZXNjcmlwdGlvbjonIC4gUEhQX0VPTCk7CmZ3cml0ZSgkc3BlYywgJyAgQ3JlYXRlZCBieSAnIC4gJHRoaXMtPmdldFVzZXIoKSAuICcgZnJvbSBjb21wb3Nlci4nIC4gUEhQX0VPTCAuIFBIUF9FT0wpOwpmd3JpdGUoJHNwZWMsICdSb290OiAnIC4gJHRoaXMtPmdldFBhdGgoKSAuIFBIUF9FT0wgLiBQSFBfRU9MKTsKZndyaXRlKCRzcGVjLCAnT3B0aW9uczogIG5vYWxsd3JpdGUgbm9jbG9iYmVyIG5vY29tcHJlc3MgdW5sb2NrZWQgbW9kdGltZSBybWRpcicgLiBQSFBfRU9MIC4gUEhQX0VPTCk7CmZ3cml0ZSgkc3BlYywgJ1N1Ym1pdE9wdGlvbnM6ICByZXZlcnR1bmNoYW5nZWQnIC4gUEhQX0VPTCAuIFBIUF9FT0wpOwpmd3JpdGUoJHNwZWMsICdMaW5lRW5kOiAgbG9jYWwnIC4gUEhQX0VPTCAuIFBIUF9FT0wpOwppZiAoJHRoaXMtPmlzU3RyZWFtKCkpIHsKZndyaXRlKCRzcGVjLCAnU3RyZWFtOicgLiBQSFBfRU9MKTsKZndyaXRlKCRzcGVjLCAnICAnIC4gJHRoaXMtPmdldFN0cmVhbVdpdGhvdXRMYWJlbCgkdGhpcy0+cDRTdHJlYW0pIC4gUEhQX0VPTCk7Cn0gZWxzZSB7CmZ3cml0ZSgKJHNwZWMsCidWaWV3OiAgJyAuICR0aGlzLT5nZXRTdHJlYW0oKSAuICcvLi4uICAvLycgLiAkdGhpcy0+Z2V0Q2xpZW50KCkgLiAnLy4uLiAnIC4gUEhQX0VPTAopOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiB3cml0ZVA0Q2xpZW50U3BlYygpCnsKJGNsaWVudFNwZWMgPSAkdGhpcy0+Z2V0UDRDbGllbnRTcGVjKCk7CiRzcGVjID0gZm9wZW4oJGNsaWVudFNwZWMsICd3Jyk7CnRyeSB7CiR0aGlzLT53cml0ZUNsaWVudFNwZWNUb0ZpbGUoJHNwZWMpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CmZjbG9zZSgkc3BlYyk7CnRocm93ICRlOwp9CmZjbG9zZSgkc3BlYyk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiByZWFkKCRwaXBlLCAkbmFtZSkKewppZiAoZmVvZigkcGlwZSkpIHsKcmV0dXJuOwp9CiRsaW5lID0gZmdldHMoJHBpcGUpOwp3aGlsZSAoJGxpbmUgIT0gZmFsc2UpIHsKJGxpbmUgPSBmZ2V0cygkcGlwZSk7Cn0KCnJldHVybjsKfQoKcHVibGljIGZ1bmN0aW9uIHdpbmRvd3NMb2dpbigkcGFzc3dvcmQpCnsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJyBsb2dpbiAtYScpOwokcHJvY2VzcyA9IG5ldyBQcm9jZXNzKCRjb21tYW5kLCBudWxsLCBudWxsLCAkcGFzc3dvcmQpOwoKcmV0dXJuICRwcm9jZXNzLT5ydW4oKTsKfQoKcHVibGljIGZ1bmN0aW9uIHA0TG9naW4oKQp7CiR0aGlzLT5xdWVyeVA0VXNlcigpOwppZiAoISR0aGlzLT5pc0xvZ2dlZEluKCkpIHsKJHBhc3N3b3JkID0gJHRoaXMtPnF1ZXJ5UDRQYXNzd29yZCgpOwppZiAoJHRoaXMtPndpbmRvd3NGbGFnKSB7CiR0aGlzLT53aW5kb3dzTG9naW4oJHBhc3N3b3JkKTsKfSBlbHNlIHsKJGNvbW1hbmQgPSAnZWNobyAnIC4gJHBhc3N3b3JkIC4gJyB8ICcgLiAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJyBsb2dpbiAtYScsIGZhbHNlKTsKJGV4aXRDb2RlID0gJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9IHRyaW0oJHRoaXMtPmNvbW1hbmRSZXN1bHQpOwppZiAoJGV4aXRDb2RlKXsKdGhyb3cgbmV3IFxFeGNlcHRpb24oIkVycm9yIGxvZ2dpbmcgaW46IiAuICR0aGlzLT5wcm9jZXNzLT5nZXRFcnJvck91dHB1dCgpKTsKfQp9Cn0KfQoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VySW5mb3JtYXRpb24oJGlkZW50aWZpZXIpCnsKJGluZGV4ID0gc3RycG9zKCRpZGVudGlmaWVyLCAnQCcpOwppZiAoJGluZGV4ID09PSBmYWxzZSkgewokY29tcG9zZXJKc29uID0gJGlkZW50aWZpZXIuICcvY29tcG9zZXIuanNvbic7CgpyZXR1cm4gJHRoaXMtPmdldENvbXBvc2VySW5mb3JtYXRpb25Gcm9tUGF0aCgkY29tcG9zZXJKc29uKTsKfQoKcmV0dXJuICR0aGlzLT5nZXRDb21wb3NlckluZm9ybWF0aW9uRnJvbUxhYmVsKCRpZGVudGlmaWVyLCAkaW5kZXgpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXJJbmZvcm1hdGlvbkZyb21QYXRoKCRjb21wb3Nlckpzb24pCnsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJyBwcmludCAnIC4gJGNvbXBvc2VySnNvbik7CiR0aGlzLT5leGVjdXRlQ29tbWFuZCgkY29tbWFuZCk7CiRyZXN1bHQgPSAkdGhpcy0+Y29tbWFuZFJlc3VsdDsKJGluZGV4ID0gc3RycG9zKCRyZXN1bHQsICd7Jyk7CmlmICgkaW5kZXggPT09IGZhbHNlKSB7CnJldHVybiAnJzsKfQppZiAoJGluZGV4ID49IDApIHsKJHJhd0RhdGEgPSBzdWJzdHIoJHJlc3VsdCwgJGluZGV4KTsKJGNvbXBvc2VyX2luZm8gPSBqc29uX2RlY29kZSgkcmF3RGF0YSwgdHJ1ZSk7CgpyZXR1cm4gJGNvbXBvc2VyX2luZm87Cn0KCnJldHVybiAnJzsKfQoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VySW5mb3JtYXRpb25Gcm9tTGFiZWwoJGlkZW50aWZpZXIsICRpbmRleCkKewokY29tcG9zZXJKc29uUGF0aCA9IHN1YnN0cigkaWRlbnRpZmllciwgMCwgJGluZGV4KSAuICcvY29tcG9zZXIuanNvbicgLiBzdWJzdHIoJGlkZW50aWZpZXIsICRpbmRleCk7CiRjb21tYW5kID0gJHRoaXMtPmdlbmVyYXRlUDRDb21tYW5kKCcgZmlsZXMgJyAuICRjb21wb3Nlckpzb25QYXRoLCBmYWxzZSk7CiR0aGlzLT5leGVjdXRlQ29tbWFuZCgkY29tbWFuZCk7CiRyZXN1bHQgPSAkdGhpcy0+Y29tbWFuZFJlc3VsdDsKJGluZGV4MiA9IHN0cnBvcygkcmVzdWx0LCAnbm8gc3VjaCBmaWxlKHMpLicpOwppZiAoJGluZGV4MiA9PT0gZmFsc2UpIHsKJGluZGV4MyA9IHN0cnBvcygkcmVzdWx0LCAnY2hhbmdlJyk7CmlmICghKCRpbmRleDMgPT09IGZhbHNlKSkgewokcGhyYXNlID0gdHJpbShzdWJzdHIoJHJlc3VsdCwgJGluZGV4MykpOwokZmllbGRzID0gZXhwbG9kZSgnICcsICRwaHJhc2UpOwokaWQgPSAkZmllbGRzWzFdOwokY29tcG9zZXJKc29uID0gc3Vic3RyKCRpZGVudGlmaWVyLCAwLCAkaW5kZXgpIC4gJy9jb21wb3Nlci5qc29uQCcgLiAkaWQ7CgpyZXR1cm4gJHRoaXMtPmdldENvbXBvc2VySW5mb3JtYXRpb25Gcm9tUGF0aCgkY29tcG9zZXJKc29uKTsKfQp9CgpyZXR1cm4gIiI7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRCcmFuY2hlcygpCnsKJHBvc3NpYmxlQnJhbmNoZXMgPSBhcnJheSgpOwppZiAoISR0aGlzLT5pc1N0cmVhbSgpKSB7CiRwb3NzaWJsZUJyYW5jaGVzWyR0aGlzLT5wNEJyYW5jaF0gPSAkdGhpcy0+Z2V0U3RyZWFtKCk7Cn0gZWxzZSB7CiRjb21tYW5kID0gJHRoaXMtPmdlbmVyYXRlUDRDb21tYW5kKCdzdHJlYW1zIC8vJyAuICR0aGlzLT5wNERlcG90IC4gJy8uLi4nKTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9ICR0aGlzLT5jb21tYW5kUmVzdWx0OwokcmVzQXJyYXkgPSBleHBsb2RlKFBIUF9FT0wsICRyZXN1bHQpOwpmb3JlYWNoICgkcmVzQXJyYXkgYXMgJGxpbmUpIHsKJHJlc0JpdHMgPSBleHBsb2RlKCcgJywgJGxpbmUpOwppZiAoY291bnQoJHJlc0JpdHMpID4gNCkgewokYnJhbmNoID0gcHJlZ19yZXBsYWNlKCcvW15BLVphLXowLTkgXS8nLCAnJywgJHJlc0JpdHNbNF0pOwokcG9zc2libGVCcmFuY2hlc1skYnJhbmNoXSA9ICRyZXNCaXRzWzFdOwp9Cn0KfQokY29tbWFuZCA9ICR0aGlzLT5nZW5lcmF0ZVA0Q29tbWFuZCgnY2hhbmdlcyAnLiAkdGhpcy0+Z2V0U3RyZWFtKCkgLiAnLy4uLicsIGZhbHNlKTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9ICR0aGlzLT5jb21tYW5kUmVzdWx0OwokcmVzQXJyYXkgPSBleHBsb2RlKFBIUF9FT0wsICRyZXN1bHQpOwokbGFzdENvbW1pdCA9ICRyZXNBcnJheVswXTsKJGxhc3RDb21taXRBcnIgPSBleHBsb2RlKCcgJywgJGxhc3RDb21taXQpOwokbGFzdENvbW1pdE51bSA9ICRsYXN0Q29tbWl0QXJyWzFdOwoKJGJyYW5jaGVzID0gYXJyYXkoJ21hc3RlcicgPT4gJHBvc3NpYmxlQnJhbmNoZXNbJHRoaXMtPnA0QnJhbmNoXSAuICdAJy4gJGxhc3RDb21taXROdW0pOwpyZXR1cm4gJGJyYW5jaGVzOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0VGFncygpCnsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJ2xhYmVscycpOwokdGhpcy0+ZXhlY3V0ZUNvbW1hbmQoJGNvbW1hbmQpOwokcmVzdWx0ID0gJHRoaXMtPmNvbW1hbmRSZXN1bHQ7CiRyZXNBcnJheSA9IGV4cGxvZGUoUEhQX0VPTCwgJHJlc3VsdCk7CiR0YWdzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHJlc0FycmF5IGFzICRsaW5lKSB7CiRpbmRleCA9IHN0cnBvcygkbGluZSwgJ0xhYmVsJyk7CmlmICghKCRpbmRleCA9PT0gZmFsc2UpKSB7CiRmaWVsZHMgPSBleHBsb2RlKCcgJywgJGxpbmUpOwokdGFnc1skZmllbGRzWzFdXSA9ICR0aGlzLT5nZXRTdHJlYW0oKSAuICdAJyAuICRmaWVsZHNbMV07Cn0KfQpyZXR1cm4gJHRhZ3M7Cn0KCnB1YmxpYyBmdW5jdGlvbiBjaGVja1N0cmVhbSgpCnsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJ2RlcG90cycsIGZhbHNlKTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9ICR0aGlzLT5jb21tYW5kUmVzdWx0OwokcmVzQXJyYXkgPSBleHBsb2RlKFBIUF9FT0wsICRyZXN1bHQpOwpmb3JlYWNoICgkcmVzQXJyYXkgYXMgJGxpbmUpIHsKJGluZGV4ID0gc3RycG9zKCRsaW5lLCAnRGVwb3QnKTsKaWYgKCEoJGluZGV4ID09PSBmYWxzZSkpIHsKJGZpZWxkcyA9IGV4cGxvZGUoJyAnLCAkbGluZSk7CmlmIChzdHJjbXAoJHRoaXMtPnA0RGVwb3QsICRmaWVsZHNbMV0pID09PSAwKSB7CiR0aGlzLT5wNERlcG90VHlwZSA9ICRmaWVsZHNbM107CgpyZXR1cm4gJHRoaXMtPmlzU3RyZWFtKCk7Cn0KfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRDaGFuZ2VMaXN0KCRyZWZlcmVuY2UpCnsKJGluZGV4ID0gc3RycG9zKCRyZWZlcmVuY2UsICdAJyk7CmlmICgkaW5kZXggPT09IGZhbHNlKSB7CnJldHVybjsKfQokbGFiZWwgPSBzdWJzdHIoJHJlZmVyZW5jZSwgJGluZGV4KTsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJyBjaGFuZ2VzIC1tMSAnIC4gJGxhYmVsKTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJGNoYW5nZXMgPSAkdGhpcy0+Y29tbWFuZFJlc3VsdDsKaWYgKHN0cnBvcygkY2hhbmdlcywgJ0NoYW5nZScpICE9PSAwKSB7CnJldHVybjsKfQokZmllbGRzID0gZXhwbG9kZSgnICcsICRjaGFuZ2VzKTsKJGNoYW5nZUxpc3QgPSAkZmllbGRzWzFdOwoKcmV0dXJuICRjaGFuZ2VMaXN0Owp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tbWl0TG9ncygkZnJvbVJlZmVyZW5jZSwgJHRvUmVmZXJlbmNlKQp7CiRmcm9tQ2hhbmdlTGlzdCA9ICR0aGlzLT5nZXRDaGFuZ2VMaXN0KCRmcm9tUmVmZXJlbmNlKTsKaWYgKCRmcm9tQ2hhbmdlTGlzdCA9PSBudWxsKSB7CnJldHVybjsKfQokdG9DaGFuZ2VMaXN0ID0gJHRoaXMtPmdldENoYW5nZUxpc3QoJHRvUmVmZXJlbmNlKTsKaWYgKCR0b0NoYW5nZUxpc3QgPT0gbnVsbCkgewpyZXR1cm47Cn0KJGluZGV4ID0gc3RycG9zKCRmcm9tUmVmZXJlbmNlLCAnQCcpOwokbWFpbiA9IHN1YnN0cigkZnJvbVJlZmVyZW5jZSwgMCwgJGluZGV4KSAuICcvLi4uJzsKJGNvbW1hbmQgPSAkdGhpcy0+Z2VuZXJhdGVQNENvbW1hbmQoJ2ZpbGVsb2cgJyAuICRtYWluIC4gJ0AnIC4gJGZyb21DaGFuZ2VMaXN0LiAnLCcgLiAkdG9DaGFuZ2VMaXN0KTsKJHRoaXMtPmV4ZWN1dGVDb21tYW5kKCRjb21tYW5kKTsKJHJlc3VsdCA9ICR0aGlzLT5jb21tYW5kUmVzdWx0OwoKcmV0dXJuICRyZXN1bHQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRGaWxlc3lzdGVtKCkKewppZiAoZW1wdHkoJHRoaXMtPmZpbGVzeXN0ZW0pKQp7CiR0aGlzLT5maWxlc3lzdGVtID0gbmV3IEZpbGVzeXN0ZW0oJHRoaXMtPnByb2Nlc3MpOwp9CnJldHVybiAkdGhpcy0+ZmlsZXN5c3RlbTsKfQoKCnB1YmxpYyBmdW5jdGlvbiBzZXRGaWxlc3lzdGVtKEZpbGVzeXN0ZW0gJGZzKQp7CiR0aGlzLT5maWxlc3lzdGVtID0gJGZzOwp9Cgp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CgoKCgpjbGFzcyBQcm9jZXNzRXhlY3V0b3IKewpwcm90ZWN0ZWQgc3RhdGljICR0aW1lb3V0ID0gMzAwOwoKcHJvdGVjdGVkICRjYXB0dXJlT3V0cHV0Owpwcm90ZWN0ZWQgJGVycm9yT3V0cHV0Owpwcm90ZWN0ZWQgJGlvOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbyA9IG51bGwpCnsKJHRoaXMtPmlvID0gJGlvOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkY29tbWFuZCwgJiRvdXRwdXQgPSBudWxsLCAkY3dkID0gbnVsbCkKewppZiAoJHRoaXMtPmlvICYmICR0aGlzLT5pby0+aXNEZWJ1ZygpKSB7CiRzYWZlQ29tbWFuZCA9IHByZWdfcmVwbGFjZSgneyg6Ly9bXjovXHNdKzopW15AXHMvXSt9aScsICckMSoqKionLCAkY29tbWFuZCk7CiR0aGlzLT5pby0+d3JpdGUoJ0V4ZWN1dGluZyBjb21tYW5kICgnLigkY3dkID86ICdDV0QnKS4nKTogJy4kc2FmZUNvbW1hbmQpOwp9CgoKIAogaWYgKG51bGwgPT09ICRjd2QgJiYgZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpICYmIGZhbHNlICE9PSBzdHJwb3MoJGNvbW1hbmQsICdnaXQnKSAmJiBnZXRjd2QoKSkgewokY3dkID0gcmVhbHBhdGgoZ2V0Y3dkKCkpOwp9CgokdGhpcy0+Y2FwdHVyZU91dHB1dCA9IGNvdW50KGZ1bmNfZ2V0X2FyZ3MoKSkgPiAxOwokdGhpcy0+ZXJyb3JPdXRwdXQgPSBudWxsOwokcHJvY2VzcyA9IG5ldyBQcm9jZXNzKCRjb21tYW5kLCAkY3dkLCBudWxsLCBudWxsLCBzdGF0aWM6OmdldFRpbWVvdXQoKSk7CgokY2FsbGJhY2sgPSBpc19jYWxsYWJsZSgkb3V0cHV0KSA/ICRvdXRwdXQgOiBhcnJheSgkdGhpcywgJ291dHB1dEhhbmRsZXInKTsKJHByb2Nlc3MtPnJ1bigkY2FsbGJhY2spOwoKaWYgKCR0aGlzLT5jYXB0dXJlT3V0cHV0ICYmICFpc19jYWxsYWJsZSgkb3V0cHV0KSkgewokb3V0cHV0ID0gJHByb2Nlc3MtPmdldE91dHB1dCgpOwp9CgokdGhpcy0+ZXJyb3JPdXRwdXQgPSAkcHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKTsKCnJldHVybiAkcHJvY2Vzcy0+Z2V0RXhpdENvZGUoKTsKfQoKcHVibGljIGZ1bmN0aW9uIHNwbGl0TGluZXMoJG91dHB1dCkKewokb3V0cHV0ID0gdHJpbSgkb3V0cHV0KTsKCnJldHVybiAoKHN0cmluZykgJG91dHB1dCA9PT0gJycpID8gYXJyYXkoKSA6IHByZWdfc3BsaXQoJ3tccj9cbn0nLCAkb3V0cHV0KTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JPdXRwdXQoKQp7CnJldHVybiAkdGhpcy0+ZXJyb3JPdXRwdXQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBvdXRwdXRIYW5kbGVyKCR0eXBlLCAkYnVmZmVyKQp7CmlmICgkdGhpcy0+Y2FwdHVyZU91dHB1dCkgewpyZXR1cm47Cn0KCmVjaG8gJGJ1ZmZlcjsKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCkKewpyZXR1cm4gc3RhdGljOjokdGltZW91dDsKfQoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KCR0aW1lb3V0KQp7CnN0YXRpYzo6JHRpbWVvdXQgPSAkdGltZW91dDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7CgoKCgpjbGFzcyBHaXQKewpwdWJsaWMgZnVuY3Rpb24gY2xlYW5FbnYoKQp7CmlmIChpbmlfZ2V0KCdzYWZlX21vZGUnKSAmJiBmYWxzZSA9PT0gc3RycG9zKGluaV9nZXQoJ3NhZmVfbW9kZV9hbGxvd2VkX2Vudl92YXJzJyksICdHSVRfQVNLUEFTUycpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignc2FmZV9tb2RlIGlzIGVuYWJsZWQgYW5kIHNhZmVfbW9kZV9hbGxvd2VkX2Vudl92YXJzIGRvZXMgbm90IGNvbnRhaW4gR0lUX0FTS1BBU1MsIGNhbiBub3Qgc2V0IGVudiB2YXIuIFlvdSBjYW4gZGlzYWJsZSBzYWZlX21vZGUgd2l0aCAiLWRzYWZlX21vZGU9MCIgd2hlbiBydW5uaW5nIGNvbXBvc2VyJyk7Cn0KCgogaWYgKGdldGVudignR0lUX0FTS1BBU1MnKSAhPT0gJ2VjaG8nKSB7CnB1dGVudignR0lUX0FTS1BBU1M9ZWNobycpOwp9CgoKIGlmIChnZXRlbnYoJ0dJVF9ESVInKSkgewpwdXRlbnYoJ0dJVF9ESVInKTsKfQppZiAoZ2V0ZW52KCdHSVRfV09SS19UUkVFJykpIHsKcHV0ZW52KCdHSVRfV09SS19UUkVFJyk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7Cgp1c2UgQ29tcG9zZXJcQ29tcG9zZXI7CnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcVHJhbnNwb3J0RXhjZXB0aW9uOwoKCgoKCgpjbGFzcyBSZW1vdGVGaWxlc3lzdGVtCnsKcHJpdmF0ZSAkaW87CnByaXZhdGUgJGNvbmZpZzsKcHJpdmF0ZSAkZmlyc3RDYWxsOwpwcml2YXRlICRieXRlc01heDsKcHJpdmF0ZSAkb3JpZ2luVXJsOwpwcml2YXRlICRmaWxlVXJsOwpwcml2YXRlICRmaWxlTmFtZTsKcHJpdmF0ZSAkcmV0cnk7CnByaXZhdGUgJHByb2dyZXNzOwpwcml2YXRlICRsYXN0UHJvZ3Jlc3M7CnByaXZhdGUgJG9wdGlvbnM7CnByaXZhdGUgJHJldHJ5QXV0aEZhaWx1cmU7CnByaXZhdGUgJGxhc3RIZWFkZXJzOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcgPSBudWxsLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPmlvID0gJGlvOwokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKJHRoaXMtPm9wdGlvbnMgPSAkb3B0aW9uczsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY29weSgkb3JpZ2luVXJsLCAkZmlsZVVybCwgJGZpbGVOYW1lLCAkcHJvZ3Jlc3MgPSB0cnVlLCAkb3B0aW9ucyA9IGFycmF5KCkpCnsKcmV0dXJuICR0aGlzLT5nZXQoJG9yaWdpblVybCwgJGZpbGVVcmwsICRvcHRpb25zLCAkZmlsZU5hbWUsICRwcm9ncmVzcyk7Cn0KCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudHMoJG9yaWdpblVybCwgJGZpbGVVcmwsICRwcm9ncmVzcyA9IHRydWUsICRvcHRpb25zID0gYXJyYXkoKSkKewpyZXR1cm4gJHRoaXMtPmdldCgkb3JpZ2luVXJsLCAkZmlsZVVybCwgJG9wdGlvbnMsIG51bGwsICRwcm9ncmVzcyk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbnMoKQp7CnJldHVybiAkdGhpcy0+b3B0aW9uczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TGFzdEhlYWRlcnMoKQp7CnJldHVybiAkdGhpcy0+bGFzdEhlYWRlcnM7Cn0KCgoKCgoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldCgkb3JpZ2luVXJsLCAkZmlsZVVybCwgJGFkZGl0aW9uYWxPcHRpb25zID0gYXJyYXkoKSwgJGZpbGVOYW1lID0gbnVsbCwgJHByb2dyZXNzID0gdHJ1ZSkKewokdGhpcy0+Ynl0ZXNNYXggPSAwOwokdGhpcy0+b3JpZ2luVXJsID0gJG9yaWdpblVybDsKJHRoaXMtPmZpbGVVcmwgPSAkZmlsZVVybDsKJHRoaXMtPmZpbGVOYW1lID0gJGZpbGVOYW1lOwokdGhpcy0+cHJvZ3Jlc3MgPSAkcHJvZ3Jlc3M7CiR0aGlzLT5sYXN0UHJvZ3Jlc3MgPSBudWxsOwokdGhpcy0+cmV0cnlBdXRoRmFpbHVyZSA9IHRydWU7CiR0aGlzLT5sYXN0SGVhZGVycyA9IGFycmF5KCk7CgoKIGlmIChwcmVnX21hdGNoKCd7Xmh0dHBzPzovLyguKyk6KC4rKUAoW14vXSspfWknLCAkZmlsZVVybCwgJG1hdGNoKSkgewokdGhpcy0+aW8tPnNldEF1dGhlbnRpY2F0aW9uKCRvcmlnaW5VcmwsIHVybGRlY29kZSgkbWF0Y2hbMV0pLCB1cmxkZWNvZGUoJG1hdGNoWzJdKSk7Cn0KCmlmIChpc3NldCgkYWRkaXRpb25hbE9wdGlvbnNbJ3JldHJ5LWF1dGgtZmFpbHVyZSddKSkgewokdGhpcy0+cmV0cnlBdXRoRmFpbHVyZSA9IChib29sKSAkYWRkaXRpb25hbE9wdGlvbnNbJ3JldHJ5LWF1dGgtZmFpbHVyZSddOwoKdW5zZXQoJGFkZGl0aW9uYWxPcHRpb25zWydyZXRyeS1hdXRoLWZhaWx1cmUnXSk7Cn0KCiRvcHRpb25zID0gJHRoaXMtPmdldE9wdGlvbnNGb3JVcmwoJG9yaWdpblVybCwgJGFkZGl0aW9uYWxPcHRpb25zKTsKCmlmICgkdGhpcy0+aW8tPmlzRGVidWcoKSkgewokdGhpcy0+aW8tPndyaXRlKChzdWJzdHIoJGZpbGVVcmwsIDAsIDQpID09PSAnaHR0cCcgPyAnRG93bmxvYWRpbmcgJyA6ICdSZWFkaW5nICcpIC4gJGZpbGVVcmwpOwp9CmlmIChpc3NldCgkb3B0aW9uc1snZ2l0aHViLXRva2VuJ10pKSB7CiRmaWxlVXJsIC49IChmYWxzZSA9PT0gc3RycG9zKCRmaWxlVXJsLCAnPycpID8gJz8nIDogJyYnKSAuICdhY2Nlc3NfdG9rZW49Jy4kb3B0aW9uc1snZ2l0aHViLXRva2VuJ107CnVuc2V0KCRvcHRpb25zWydnaXRodWItdG9rZW4nXSk7Cn0KaWYgKGlzc2V0KCRvcHRpb25zWydodHRwJ10pKSB7CiRvcHRpb25zWydodHRwJ11bJ2lnbm9yZV9lcnJvcnMnXSA9IHRydWU7Cn0KJGN0eCA9IFN0cmVhbUNvbnRleHRGYWN0b3J5OjpnZXRDb250ZXh0KCRmaWxlVXJsLCAkb3B0aW9ucywgYXJyYXkoJ25vdGlmaWNhdGlvbicgPT4gYXJyYXkoJHRoaXMsICdjYWxsYmFja0dldCcpKSk7CgppZiAoJHRoaXMtPnByb2dyZXNzKSB7CiR0aGlzLT5pby0+d3JpdGUoIiAgICBEb3dubG9hZGluZzogPGNvbW1lbnQ+Y29ubmVjdGlvbi4uLjwvY29tbWVudD4iLCBmYWxzZSk7Cn0KCiRlcnJvck1lc3NhZ2UgPSAnJzsKJGVycm9yQ29kZSA9IDA7CiRyZXN1bHQgPSBmYWxzZTsKc2V0X2Vycm9yX2hhbmRsZXIoZnVuY3Rpb24gKCRjb2RlLCAkbXNnKSB1c2UgKCYkZXJyb3JNZXNzYWdlKSB7CmlmICgkZXJyb3JNZXNzYWdlKSB7CiRlcnJvck1lc3NhZ2UgLj0gIlxuIjsKfQokZXJyb3JNZXNzYWdlIC49IHByZWdfcmVwbGFjZSgne15maWxlX2dldF9jb250ZW50c1woLio/XCk6IH0nLCAnJywgJG1zZyk7Cn0pOwp0cnkgewokcmVzdWx0ID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGVVcmwsIGZhbHNlLCAkY3R4KTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewppZiAoJGUgaW5zdGFuY2VvZiBUcmFuc3BvcnRFeGNlcHRpb24gJiYgIWVtcHR5KCRodHRwX3Jlc3BvbnNlX2hlYWRlclswXSkpIHsKJGUtPnNldEhlYWRlcnMoJGh0dHBfcmVzcG9uc2VfaGVhZGVyKTsKfQppZiAoJGUgaW5zdGFuY2VvZiBUcmFuc3BvcnRFeGNlcHRpb24gJiYgJHJlc3VsdCAhPT0gZmFsc2UpIHsKJGUtPnNldFJlc3BvbnNlKCRyZXN1bHQpOwp9CiRyZXN1bHQgPSBmYWxzZTsKfQppZiAoJGVycm9yTWVzc2FnZSAmJiAhaW5pX2dldCgnYWxsb3dfdXJsX2ZvcGVuJykpIHsKJGVycm9yTWVzc2FnZSA9ICdhbGxvd191cmxfZm9wZW4gbXVzdCBiZSBlbmFibGVkIGluIHBocC5pbmkgKCcuJGVycm9yTWVzc2FnZS4nKSc7Cn0KcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CmlmIChpc3NldCgkZSkgJiYgISR0aGlzLT5yZXRyeSkgewp0aHJvdyAkZTsKfQoKCiBpZiAoIWVtcHR5KCRodHRwX3Jlc3BvbnNlX2hlYWRlclswXSkgJiYgcHJlZ19tYXRjaCgne15IVFRQL1xTKyAoWzQ1XVxkXGQpfWknLCAkaHR0cF9yZXNwb25zZV9oZWFkZXJbMF0sICRtYXRjaCkpIHsKJGVycm9yQ29kZSA9ICRtYXRjaFsxXTsKaWYgKCEkdGhpcy0+cmV0cnkpIHsKJGUgPSBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKCdUaGUgIicuJHRoaXMtPmZpbGVVcmwuJyIgZmlsZSBjb3VsZCBub3QgYmUgZG93bmxvYWRlZCAoJy4kaHR0cF9yZXNwb25zZV9oZWFkZXJbMF0uJyknLCAkZXJyb3JDb2RlKTsKJGUtPnNldEhlYWRlcnMoJGh0dHBfcmVzcG9uc2VfaGVhZGVyKTsKJGUtPnNldFJlc3BvbnNlKCRyZXN1bHQpOwp0aHJvdyAkZTsKfQokcmVzdWx0ID0gZmFsc2U7Cn0KCgogaWYgKCRyZXN1bHQgJiYgZXh0ZW5zaW9uX2xvYWRlZCgnemxpYicpICYmIHN1YnN0cigkZmlsZVVybCwgMCwgNCkgPT09ICdodHRwJykgewokZGVjb2RlID0gZmFsc2U7CmZvcmVhY2ggKCRodHRwX3Jlc3BvbnNlX2hlYWRlciBhcyAkaGVhZGVyKSB7CmlmIChwcmVnX21hdGNoKCd7XmNvbnRlbnQtZW5jb2Rpbmc6ICpnemlwICokfWknLCAkaGVhZGVyKSkgewokZGVjb2RlID0gdHJ1ZTsKY29udGludWU7Cn0gZWxzZWlmIChwcmVnX21hdGNoKCd7XkhUVFAvfWknLCAkaGVhZGVyKSkgewokZGVjb2RlID0gZmFsc2U7Cn0KfQoKaWYgKCRkZWNvZGUpIHsKaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzUuNC4wJywgJz49JykpIHsKJHJlc3VsdCA9IHpsaWJfZGVjb2RlKCRyZXN1bHQpOwp9IGVsc2UgewoKICRyZXN1bHQgPSBmaWxlX2dldF9jb250ZW50cygnY29tcHJlc3MuemxpYjovL2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnLmJhc2U2NF9lbmNvZGUoJHJlc3VsdCkpOwp9Cn0KfQoKaWYgKCR0aGlzLT5wcm9ncmVzcykgewokdGhpcy0+aW8tPm92ZXJ3cml0ZSgiICAgIERvd25sb2FkaW5nOiA8Y29tbWVudD4xMDAlPC9jb21tZW50PiIpOwp9CgoKIGlmIChmYWxzZSAhPT0gJHJlc3VsdCAmJiBudWxsICE9PSAkZmlsZU5hbWUpIHsKaWYgKCcnID09PSAkcmVzdWx0KSB7CnRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oJyInLiR0aGlzLT5maWxlVXJsLiciIGFwcGVhcnMgYnJva2VuLCBhbmQgcmV0dXJuZWQgYW4gZW1wdHkgMjAwIHJlc3BvbnNlJyk7Cn0KCiRlcnJvck1lc3NhZ2UgPSAnJzsKc2V0X2Vycm9yX2hhbmRsZXIoZnVuY3Rpb24gKCRjb2RlLCAkbXNnKSB1c2UgKCYkZXJyb3JNZXNzYWdlKSB7CmlmICgkZXJyb3JNZXNzYWdlKSB7CiRlcnJvck1lc3NhZ2UgLj0gIlxuIjsKfQokZXJyb3JNZXNzYWdlIC49IHByZWdfcmVwbGFjZSgne15maWxlX3B1dF9jb250ZW50c1woLio/XCk6IH0nLCAnJywgJG1zZyk7Cn0pOwokcmVzdWx0ID0gKGJvb2wpIGZpbGVfcHV0X2NvbnRlbnRzKCRmaWxlTmFtZSwgJHJlc3VsdCk7CnJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwppZiAoZmFsc2UgPT09ICRyZXN1bHQpIHsKdGhyb3cgbmV3IFRyYW5zcG9ydEV4Y2VwdGlvbignVGhlICInLiR0aGlzLT5maWxlVXJsLiciIGZpbGUgY291bGQgbm90IGJlIHdyaXR0ZW4gdG8gJy4kZmlsZU5hbWUuJzogJy4kZXJyb3JNZXNzYWdlKTsKfQp9CgppZiAoJHRoaXMtPnJldHJ5KSB7CiR0aGlzLT5yZXRyeSA9IGZhbHNlOwoKcmV0dXJuICR0aGlzLT5nZXQoJHRoaXMtPm9yaWdpblVybCwgJHRoaXMtPmZpbGVVcmwsICRhZGRpdGlvbmFsT3B0aW9ucywgJHRoaXMtPmZpbGVOYW1lLCAkdGhpcy0+cHJvZ3Jlc3MpOwp9CgppZiAoZmFsc2UgPT09ICRyZXN1bHQpIHsKJGUgPSBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKCdUaGUgIicuJHRoaXMtPmZpbGVVcmwuJyIgZmlsZSBjb3VsZCBub3QgYmUgZG93bmxvYWRlZDogJy4kZXJyb3JNZXNzYWdlLCAkZXJyb3JDb2RlKTsKaWYgKCFlbXB0eSgkaHR0cF9yZXNwb25zZV9oZWFkZXJbMF0pKSB7CiRlLT5zZXRIZWFkZXJzKCRodHRwX3Jlc3BvbnNlX2hlYWRlcik7Cn0KCnRocm93ICRlOwp9CgppZiAoIWVtcHR5KCRodHRwX3Jlc3BvbnNlX2hlYWRlclswXSkpIHsKJHRoaXMtPmxhc3RIZWFkZXJzID0gJGh0dHBfcmVzcG9uc2VfaGVhZGVyOwp9CgpyZXR1cm4gJHJlc3VsdDsKfQoKCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2FsbGJhY2tHZXQoJG5vdGlmaWNhdGlvbkNvZGUsICRzZXZlcml0eSwgJG1lc3NhZ2UsICRtZXNzYWdlQ29kZSwgJGJ5dGVzVHJhbnNmZXJyZWQsICRieXRlc01heCkKewpzd2l0Y2ggKCRub3RpZmljYXRpb25Db2RlKSB7CmNhc2UgU1RSRUFNX05PVElGWV9GQUlMVVJFOgpjYXNlIFNUUkVBTV9OT1RJRllfQVVUSF9SRVFVSVJFRDoKaWYgKDQwMSA9PT0gJG1lc3NhZ2VDb2RlKSB7CgogaWYgKCEkdGhpcy0+cmV0cnlBdXRoRmFpbHVyZSkgewpicmVhazsKfQoKJHRoaXMtPnByb21wdEF1dGhBbmRSZXRyeSgkbWVzc2FnZUNvZGUpOwpicmVhazsKfQpicmVhazsKCmNhc2UgU1RSRUFNX05PVElGWV9BVVRIX1JFU1VMVDoKaWYgKDQwMyA9PT0gJG1lc3NhZ2VDb2RlKSB7CiR0aGlzLT5wcm9tcHRBdXRoQW5kUmV0cnkoJG1lc3NhZ2VDb2RlLCAkbWVzc2FnZSk7CmJyZWFrOwp9CmJyZWFrOwoKY2FzZSBTVFJFQU1fTk9USUZZX0ZJTEVfU0laRV9JUzoKaWYgKCR0aGlzLT5ieXRlc01heCA8ICRieXRlc01heCkgewokdGhpcy0+Ynl0ZXNNYXggPSAkYnl0ZXNNYXg7Cn0KYnJlYWs7CgpjYXNlIFNUUkVBTV9OT1RJRllfUFJPR1JFU1M6CmlmICgkdGhpcy0+Ynl0ZXNNYXggPiAwICYmICR0aGlzLT5wcm9ncmVzcykgewokcHJvZ3Jlc3Npb24gPSAwOwoKaWYgKCR0aGlzLT5ieXRlc01heCA+IDApIHsKJHByb2dyZXNzaW9uID0gcm91bmQoJGJ5dGVzVHJhbnNmZXJyZWQgLyAkdGhpcy0+Ynl0ZXNNYXggKiAxMDApOwp9CgppZiAoKDAgPT09ICRwcm9ncmVzc2lvbiAlIDUpICYmICRwcm9ncmVzc2lvbiAhPT0gJHRoaXMtPmxhc3RQcm9ncmVzcykgewokdGhpcy0+bGFzdFByb2dyZXNzID0gJHByb2dyZXNzaW9uOwokdGhpcy0+aW8tPm92ZXJ3cml0ZSgiICAgIERvd25sb2FkaW5nOiA8Y29tbWVudD4kcHJvZ3Jlc3Npb24lPC9jb21tZW50PiIsIGZhbHNlKTsKfQp9CmJyZWFrOwoKZGVmYXVsdDoKYnJlYWs7Cn0KfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHByb21wdEF1dGhBbmRSZXRyeSgkaHR0cFN0YXR1cywgJHJlYXNvbiA9IG51bGwpCnsKaWYgKCR0aGlzLT5jb25maWcgJiYgaW5fYXJyYXkoJHRoaXMtPm9yaWdpblVybCwgJHRoaXMtPmNvbmZpZy0+Z2V0KCdnaXRodWItZG9tYWlucycpLCB0cnVlKSkgewokbWVzc2FnZSA9ICJcbiIuJ0NvdWxkIG5vdCBmZXRjaCAnLiR0aGlzLT5maWxlVXJsLicsIGVudGVyIHlvdXIgR2l0SHViIGNyZWRlbnRpYWxzICcuKCRodHRwU3RhdHVzID09PSA0MDQgPyAndG8gYWNjZXNzIHByaXZhdGUgcmVwb3MnIDogJ3RvIGdvIG92ZXIgdGhlIEFQSSByYXRlIGxpbWl0Jyk7CiRnaXRIdWJVdGlsID0gbmV3IEdpdEh1YigkdGhpcy0+aW8sICR0aGlzLT5jb25maWcsIG51bGwsICR0aGlzKTsKaWYgKCEkZ2l0SHViVXRpbC0+YXV0aG9yaXplT0F1dGgoJHRoaXMtPm9yaWdpblVybCkKJiYgKCEkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSB8fCAhJGdpdEh1YlV0aWwtPmF1dGhvcml6ZU9BdXRoSW50ZXJhY3RpdmVseSgkdGhpcy0+b3JpZ2luVXJsLCAkbWVzc2FnZSkpCikgewp0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKCdDb3VsZCBub3QgYXV0aGVudGljYXRlIGFnYWluc3QgJy4kdGhpcy0+b3JpZ2luVXJsKTsKfQp9IGVsc2UgewoKIGlmICgkaHR0cFN0YXR1cyA9PT0gNDA0KSB7CnJldHVybjsKfQoKCiBpZiAoISR0aGlzLT5pby0+aXNJbnRlcmFjdGl2ZSgpKSB7CmlmICgkaHR0cFN0YXR1cyA9PT0gNDAxKSB7CiRtZXNzYWdlID0gIlRoZSAnIiAuICR0aGlzLT5maWxlVXJsIC4gIicgVVJMIHJlcXVpcmVkIGF1dGhlbnRpY2F0aW9uLlxuWW91IG11c3QgYmUgdXNpbmcgdGhlIGludGVyYWN0aXZlIGNvbnNvbGUgdG8gYXV0aGVudGljYXRlIjsKfQppZiAoJGh0dHBTdGF0dXMgPT09IDQwMykgewokbWVzc2FnZSA9ICJUaGUgJyIgLiAkdGhpcy0+ZmlsZVVybCAuICInIFVSTCBjb3VsZCBub3QgYmUgYWNjZXNzZWQ6ICIgLiAkcmVhc29uOwp9Cgp0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKCRtZXNzYWdlLCAkaHR0cFN0YXR1cyk7Cn0KCiBpZiAoJHRoaXMtPmlvLT5oYXNBdXRoZW50aWNhdGlvbigkdGhpcy0+b3JpZ2luVXJsKSkgewp0aHJvdyBuZXcgVHJhbnNwb3J0RXhjZXB0aW9uKCJJbnZhbGlkIGNyZWRlbnRpYWxzIGZvciAnIiAuICR0aGlzLT5maWxlVXJsIC4gIicsIGFib3J0aW5nLiIsICRodHRwU3RhdHVzKTsKfQoKJHRoaXMtPmlvLT5vdmVyd3JpdGUoJyAgICBBdXRoZW50aWNhdGlvbiByZXF1aXJlZCAoPGluZm8+Jy5wYXJzZV91cmwoJHRoaXMtPmZpbGVVcmwsIFBIUF9VUkxfSE9TVCkuJzwvaW5mbz4pOicpOwokdXNlcm5hbWUgPSAkdGhpcy0+aW8tPmFzaygnICAgICAgVXNlcm5hbWU6ICcpOwokcGFzc3dvcmQgPSAkdGhpcy0+aW8tPmFza0FuZEhpZGVBbnN3ZXIoJyAgICAgIFBhc3N3b3JkOiAnKTsKJHRoaXMtPmlvLT5zZXRBdXRoZW50aWNhdGlvbigkdGhpcy0+b3JpZ2luVXJsLCAkdXNlcm5hbWUsICRwYXNzd29yZCk7Cn0KCiR0aGlzLT5yZXRyeSA9IHRydWU7CnRocm93IG5ldyBUcmFuc3BvcnRFeGNlcHRpb24oJ1JFVFJZJyk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRPcHRpb25zRm9yVXJsKCRvcmlnaW5VcmwsICRhZGRpdGlvbmFsT3B0aW9ucykKewokaGVhZGVycyA9IGFycmF5KApzcHJpbnRmKAonVXNlci1BZ2VudDogQ29tcG9zZXIvJXMgKCVzOyAlczsgUEhQICVzLiVzLiVzKScsCkNvbXBvc2VyOjpWRVJTSU9OID09PSAnQHBhY2thZ2VfdmVyc2lvbkAnID8gJ3NvdXJjZScgOiBDb21wb3Nlcjo6VkVSU0lPTiwKcGhwX3VuYW1lKCdzJyksCnBocF91bmFtZSgncicpLApQSFBfTUFKT1JfVkVSU0lPTiwKUEhQX01JTk9SX1ZFUlNJT04sClBIUF9SRUxFQVNFX1ZFUlNJT04KKQopOwoKaWYgKGV4dGVuc2lvbl9sb2FkZWQoJ3psaWInKSkgewokaGVhZGVyc1tdID0gJ0FjY2VwdC1FbmNvZGluZzogZ3ppcCc7Cn0KCiRvcHRpb25zID0gYXJyYXlfcmVwbGFjZV9yZWN1cnNpdmUoJHRoaXMtPm9wdGlvbnMsICRhZGRpdGlvbmFsT3B0aW9ucyk7CgppZiAoJHRoaXMtPmlvLT5oYXNBdXRoZW50aWNhdGlvbigkb3JpZ2luVXJsKSkgewokYXV0aCA9ICR0aGlzLT5pby0+Z2V0QXV0aGVudGljYXRpb24oJG9yaWdpblVybCk7CmlmICgnZ2l0aHViLmNvbScgPT09ICRvcmlnaW5VcmwgJiYgJ3gtb2F1dGgtYmFzaWMnID09PSAkYXV0aFsncGFzc3dvcmQnXSkgewokb3B0aW9uc1snZ2l0aHViLXRva2VuJ10gPSAkYXV0aFsndXNlcm5hbWUnXTsKfSBlbHNlIHsKJGF1dGhTdHIgPSBiYXNlNjRfZW5jb2RlKCRhdXRoWyd1c2VybmFtZSddIC4gJzonIC4gJGF1dGhbJ3Bhc3N3b3JkJ10pOwokaGVhZGVyc1tdID0gJ0F1dGhvcml6YXRpb246IEJhc2ljICcuJGF1dGhTdHI7Cn0KfQoKaWYgKGlzc2V0KCRvcHRpb25zWydodHRwJ11bJ2hlYWRlciddKSAmJiAhaXNfYXJyYXkoJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ10pKSB7CiRvcHRpb25zWydodHRwJ11bJ2hlYWRlciddID0gZXhwbG9kZSgiXHJcbiIsIHRyaW0oJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ10sICJcclxuIikpOwp9CmZvcmVhY2ggKCRoZWFkZXJzIGFzICRoZWFkZXIpIHsKJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ11bXSA9ICRoZWFkZXI7Cn0KCnJldHVybiAkb3B0aW9uczsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7CgoKCgoKCgpmaW5hbCBjbGFzcyBTdHJlYW1Db250ZXh0RmFjdG9yeQp7CgoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q29udGV4dCgkdXJsLCBhcnJheSAkZGVmYXVsdE9wdGlvbnMgPSBhcnJheSgpLCBhcnJheSAkZGVmYXVsdFBhcmFtcyA9IGFycmF5KCkpCnsKJG9wdGlvbnMgPSBhcnJheSgnaHR0cCcgPT4gYXJyYXkoCgogJ2ZvbGxvd19sb2NhdGlvbicgPT4gMSwKJ21heF9yZWRpcmVjdHMnID0+IDIwLAopKTsKCgogaWYgKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9QUk9YWSddKSB8fCAhZW1wdHkoJF9TRVJWRVJbJ2h0dHBfcHJveHknXSkpIHsKCiAkcHJveHkgPSBwYXJzZV91cmwoIWVtcHR5KCRfU0VSVkVSWydodHRwX3Byb3h5J10pID8gJF9TRVJWRVJbJ2h0dHBfcHJveHknXSA6ICRfU0VSVkVSWydIVFRQX1BST1hZJ10pOwp9CgppZiAoIWVtcHR5KCRwcm94eSkpIHsKJHByb3h5VVJMID0gaXNzZXQoJHByb3h5WydzY2hlbWUnXSkgPyAkcHJveHlbJ3NjaGVtZSddIC4gJzovLycgOiAnJzsKJHByb3h5VVJMIC49IGlzc2V0KCRwcm94eVsnaG9zdCddKSA/ICRwcm94eVsnaG9zdCddIDogJyc7CgppZiAoaXNzZXQoJHByb3h5Wydwb3J0J10pKSB7CiRwcm94eVVSTCAuPSAiOiIgLiAkcHJveHlbJ3BvcnQnXTsKfSBlbHNlaWYgKCdodHRwOi8vJyA9PSBzdWJzdHIoJHByb3h5VVJMLCAwLCA3KSkgewokcHJveHlVUkwgLj0gIjo4MCI7Cn0gZWxzZWlmICgnaHR0cHM6Ly8nID09IHN1YnN0cigkcHJveHlVUkwsIDAsIDgpKSB7CiRwcm94eVVSTCAuPSAiOjQ0MyI7Cn0KCgogJHByb3h5VVJMID0gc3RyX3JlcGxhY2UoYXJyYXkoJ2h0dHA6Ly8nLCAnaHR0cHM6Ly8nKSwgYXJyYXkoJ3RjcDovLycsICdzc2w6Ly8nKSwgJHByb3h5VVJMKTsKCmlmICgwID09PSBzdHJwb3MoJHByb3h5VVJMLCAnc3NsOicpICYmICFleHRlbnNpb25fbG9hZGVkKCdvcGVuc3NsJykpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3UgbXVzdCBlbmFibGUgdGhlIG9wZW5zc2wgZXh0ZW5zaW9uIHRvIHVzZSBhIHByb3h5IG92ZXIgaHR0cHMnKTsKfQoKJG9wdGlvbnNbJ2h0dHAnXVsncHJveHknXSA9ICRwcm94eVVSTDsKCgogaWYgKCFlbXB0eSgkX1NFUlZFUlsnbm9fcHJveHknXSkgJiYgcGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfSE9TVCkpIHsKJHBhdHRlcm4gPSBuZXcgTm9Qcm94eVBhdHRlcm4oJF9TRVJWRVJbJ25vX3Byb3h5J10pOwppZiAoJHBhdHRlcm4tPnRlc3QoJHVybCkpIHsKdW5zZXQoJG9wdGlvbnNbJ2h0dHAnXVsncHJveHknXSk7Cn0KfQoKCiBpZiAoIWVtcHR5KCRvcHRpb25zWydodHRwJ11bJ3Byb3h5J10pKSB7Cgogc3dpdGNoIChwYXJzZV91cmwoJHVybCwgUEhQX1VSTF9TQ0hFTUUpKSB7CmNhc2UgJ2h0dHAnOiAKICRyZXFGdWxsVXJpRW52ID0gZ2V0ZW52KCdIVFRQX1BST1hZX1JFUVVFU1RfRlVMTFVSSScpOwppZiAoJHJlcUZ1bGxVcmlFbnYgPT09IGZhbHNlIHx8ICRyZXFGdWxsVXJpRW52ID09PSAnJyB8fCAoc3RydG9sb3dlcigkcmVxRnVsbFVyaUVudikgIT09ICdmYWxzZScgJiYgKGJvb2wpICRyZXFGdWxsVXJpRW52KSkgewokb3B0aW9uc1snaHR0cCddWydyZXF1ZXN0X2Z1bGx1cmknXSA9IHRydWU7Cn0KYnJlYWs7CmNhc2UgJ2h0dHBzJzogCiAkcmVxRnVsbFVyaUVudiA9IGdldGVudignSFRUUFNfUFJPWFlfUkVRVUVTVF9GVUxMVVJJJyk7CmlmICgkcmVxRnVsbFVyaUVudiA9PT0gZmFsc2UgfHwgJHJlcUZ1bGxVcmlFbnYgPT09ICcnIHx8IChzdHJ0b2xvd2VyKCRyZXFGdWxsVXJpRW52KSAhPT0gJ2ZhbHNlJyAmJiAoYm9vbCkgJHJlcUZ1bGxVcmlFbnYpKSB7CiRvcHRpb25zWydodHRwJ11bJ3JlcXVlc3RfZnVsbHVyaSddID0gdHJ1ZTsKfQpicmVhazsKfQoKaWYgKGlzc2V0KCRwcm94eVsndXNlciddKSkgewokYXV0aCA9IHVybGRlY29kZSgkcHJveHlbJ3VzZXInXSk7CmlmIChpc3NldCgkcHJveHlbJ3Bhc3MnXSkpIHsKJGF1dGggLj0gJzonIC4gdXJsZGVjb2RlKCRwcm94eVsncGFzcyddKTsKfQokYXV0aCA9IGJhc2U2NF9lbmNvZGUoJGF1dGgpOwoKCiBpZiAoaXNzZXQoJGRlZmF1bHRPcHRpb25zWydodHRwJ11bJ2hlYWRlciddKSkgewppZiAoaXNfc3RyaW5nKCRkZWZhdWx0T3B0aW9uc1snaHR0cCddWydoZWFkZXInXSkpIHsKJGRlZmF1bHRPcHRpb25zWydodHRwJ11bJ2hlYWRlciddID0gYXJyYXkoJGRlZmF1bHRPcHRpb25zWydodHRwJ11bJ2hlYWRlciddKTsKfQokZGVmYXVsdE9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ11bXSA9ICJQcm94eS1BdXRob3JpemF0aW9uOiBCYXNpYyB7JGF1dGh9IjsKfSBlbHNlIHsKJG9wdGlvbnNbJ2h0dHAnXVsnaGVhZGVyJ10gPSBhcnJheSgiUHJveHktQXV0aG9yaXphdGlvbjogQmFzaWMgeyRhdXRofSIpOwp9Cn0KfQp9Cgokb3B0aW9ucyA9IGFycmF5X3JlcGxhY2VfcmVjdXJzaXZlKCRvcHRpb25zLCAkZGVmYXVsdE9wdGlvbnMpOwoKaWYgKGlzc2V0KCRvcHRpb25zWydodHRwJ11bJ2hlYWRlciddKSkgewokb3B0aW9uc1snaHR0cCddWydoZWFkZXInXSA9IHNlbGY6OmZpeEh0dHBIZWFkZXJGaWVsZCgkb3B0aW9uc1snaHR0cCddWydoZWFkZXInXSk7Cn0KCnJldHVybiBzdHJlYW1fY29udGV4dF9jcmVhdGUoJG9wdGlvbnMsICRkZWZhdWx0UGFyYW1zKTsKfQoKCgoKCgoKCgoKCnByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZpeEh0dHBIZWFkZXJGaWVsZCgkaGVhZGVyKQp7CmlmICghaXNfYXJyYXkoJGhlYWRlcikpIHsKJGhlYWRlciA9IGV4cGxvZGUoIlxyXG4iLCAkaGVhZGVyKTsKfQp1YXNvcnQoJGhlYWRlciwgZnVuY3Rpb24gKCRlbCkgewpyZXR1cm4gcHJlZ19tYXRjaCgne15jb250ZW50LXR5cGV9aScsICRlbCkgPyAxIDogLTE7Cn0pOwoKcmV0dXJuICRoZWFkZXI7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxVdGlsOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9hZGVyXEFycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcVmFsaWRhdGluZ0FycmF5TG9hZGVyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2FkZXJcSW52YWxpZFBhY2thZ2VFeGNlcHRpb247CnVzZSBDb21wb3NlclxKc29uXEpzb25WYWxpZGF0aW9uRXhjZXB0aW9uOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxKc29uXEpzb25GaWxlOwoKCgoKCgoKY2xhc3MgQ29uZmlnVmFsaWRhdG9yCnsKcHJpdmF0ZSAkaW87CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSU9JbnRlcmZhY2UgJGlvKQp7CiR0aGlzLT5pbyA9ICRpbzsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgkZmlsZSkKewokZXJyb3JzID0gYXJyYXkoKTsKJHB1Ymxpc2hFcnJvcnMgPSBhcnJheSgpOwokd2FybmluZ3MgPSBhcnJheSgpOwoKCiAkbGF4VmFsaWQgPSBmYWxzZTsKdHJ5IHsKJGpzb24gPSBuZXcgSnNvbkZpbGUoJGZpbGUsIG5ldyBSZW1vdGVGaWxlc3lzdGVtKCR0aGlzLT5pbykpOwokbWFuaWZlc3QgPSAkanNvbi0+cmVhZCgpOwoKJGpzb24tPnZhbGlkYXRlU2NoZW1hKEpzb25GaWxlOjpMQVhfU0NIRU1BKTsKJGxheFZhbGlkID0gdHJ1ZTsKJGpzb24tPnZhbGlkYXRlU2NoZW1hKCk7Cn0gY2F0Y2ggKEpzb25WYWxpZGF0aW9uRXhjZXB0aW9uICRlKSB7CmZvcmVhY2ggKCRlLT5nZXRFcnJvcnMoKSBhcyAkbWVzc2FnZSkgewppZiAoJGxheFZhbGlkKSB7CiRwdWJsaXNoRXJyb3JzW10gPSAkbWVzc2FnZTsKfSBlbHNlIHsKJGVycm9yc1tdID0gJG1lc3NhZ2U7Cn0KfQp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiRlcnJvcnNbXSA9ICRlLT5nZXRNZXNzYWdlKCk7CgpyZXR1cm4gYXJyYXkoJGVycm9ycywgJHB1Ymxpc2hFcnJvcnMsICR3YXJuaW5ncyk7Cn0KCgogaWYgKCFlbXB0eSgkbWFuaWZlc3RbJ2xpY2Vuc2UnXSkpIHsKCiBpZiAoaXNfYXJyYXkoJG1hbmlmZXN0WydsaWNlbnNlJ10pKSB7CmZvcmVhY2ggKCRtYW5pZmVzdFsnbGljZW5zZSddIGFzICRrZXkgPT4gJGxpY2Vuc2UpIHsKaWYgKCdwcm9wcmlldGFyeScgPT09ICRsaWNlbnNlKSB7CnVuc2V0KCRtYW5pZmVzdFsnbGljZW5zZSddWyRrZXldKTsKfQp9Cn0KCiRsaWNlbnNlVmFsaWRhdG9yID0gbmV3IFNwZHhMaWNlbnNlSWRlbnRpZmllcigpOwppZiAoJ3Byb3ByaWV0YXJ5JyAhPT0gJG1hbmlmZXN0WydsaWNlbnNlJ10gJiYgYXJyYXkoKSAhPT0gJG1hbmlmZXN0WydsaWNlbnNlJ10gJiYgISRsaWNlbnNlVmFsaWRhdG9yLT52YWxpZGF0ZSgkbWFuaWZlc3RbJ2xpY2Vuc2UnXSkpIHsKJHdhcm5pbmdzW10gPSBzcHJpbnRmKAonTGljZW5zZSAlcyBpcyBub3QgYSB2YWxpZCBTUERYIGxpY2Vuc2UgaWRlbnRpZmllciwgc2VlIGh0dHA6Ly93d3cuc3BkeC5vcmcvbGljZW5zZXMvIGlmIHlvdSB1c2UgYW4gb3BlbiBsaWNlbnNlLicKLiJcbklmIHRoZSBzb2Z0d2FyZSBpcyBjbG9zZWQtc291cmNlLCB5b3UgbWF5IHVzZSBcInByb3ByaWV0YXJ5XCIgYXMgbGljZW5zZS4iLApqc29uX2VuY29kZSgkbWFuaWZlc3RbJ2xpY2Vuc2UnXSkKKTsKfQp9IGVsc2Ugewokd2FybmluZ3NbXSA9ICdObyBsaWNlbnNlIHNwZWNpZmllZCwgaXQgaXMgcmVjb21tZW5kZWQgdG8gZG8gc28uIEZvciBjbG9zZWQtc291cmNlIHNvZnR3YXJlIHlvdSBtYXkgdXNlICJwcm9wcmlldGFyeSIgYXMgbGljZW5zZS4nOwp9CgppZiAoIWVtcHR5KCRtYW5pZmVzdFsnbmFtZSddKSAmJiBwcmVnX21hdGNoKCd7W0EtWl19JywgJG1hbmlmZXN0WyduYW1lJ10pKSB7CiRzdWdnZXN0TmFtZSA9IHByZWdfcmVwbGFjZSgneyg/OihbYS16XSkoW0EtWl0pfChbQS1aXSkoW0EtWl1bYS16XSkpfScsICdcXDFcXDMtXFwyXFw0JywgJG1hbmlmZXN0WyduYW1lJ10pOwokc3VnZ2VzdE5hbWUgPSBzdHJ0b2xvd2VyKCRzdWdnZXN0TmFtZSk7Cgokd2FybmluZ3NbXSA9IHNwcmludGYoCidOYW1lICIlcyIgZG9lcyBub3QgbWF0Y2ggdGhlIGJlc3QgcHJhY3RpY2UgKGUuZy4gbG93ZXItY2FzZWQvd2l0aC1kYXNoZXMpLiBXZSBzdWdnZXN0IHVzaW5nICIlcyIgaW5zdGVhZC4gQXMgc3VjaCB5b3Ugd2lsbCBub3QgYmUgYWJsZSB0byBzdWJtaXQgaXQgdG8gUGFja2FnaXN0LicsCiRtYW5pZmVzdFsnbmFtZSddLAokc3VnZ2VzdE5hbWUKKTsKfQoKaWYgKCFlbXB0eSgkbWFuaWZlc3RbJ3R5cGUnXSkgJiYgJG1hbmlmZXN0Wyd0eXBlJ10gPT0gJ2NvbXBvc2VyLWluc3RhbGxlcicpIHsKJHdhcm5pbmdzW10gPSAiVGhlIHBhY2thZ2UgdHlwZSAnY29tcG9zZXItaW5zdGFsbGVyJyBpcyBkZXByZWNhdGVkLiBQbGVhc2UgZGlzdHJpYnV0ZSB5b3VyIGN1c3RvbSBpbnN0YWxsZXJzIGFzIHBsdWdpbnMgZnJvbSBub3cgb24uIFNlZSBodHRwOi8vZ2V0Y29tcG9zZXIub3JnL2RvYy9hcnRpY2xlcy9wbHVnaW5zLm1kIGZvciBwbHVnaW4gZG9jdW1lbnRhdGlvbi4iOwp9CgoKIGlmIChpc3NldCgkbWFuaWZlc3RbJ3JlcXVpcmUnXSkgJiYgaXNzZXQoJG1hbmlmZXN0WydyZXF1aXJlLWRldiddKSkgewokcmVxdWlyZU92ZXJyaWRlcyA9IGFycmF5X2ludGVyc2VjdF9rZXkoJG1hbmlmZXN0WydyZXF1aXJlJ10sICRtYW5pZmVzdFsncmVxdWlyZS1kZXYnXSk7CgppZiAoIWVtcHR5KCRyZXF1aXJlT3ZlcnJpZGVzKSkgewokcGx1cmFsID0gKGNvdW50KCRyZXF1aXJlT3ZlcnJpZGVzKSA+IDEpID8gJ2FyZScgOiAnaXMnOwokd2FybmluZ3NbXSA9IGltcGxvZGUoJywgJywgYXJyYXlfa2V5cygkcmVxdWlyZU92ZXJyaWRlcykpLiAiIHskcGx1cmFsfSByZXF1aXJlZCBib3RoIGluIHJlcXVpcmUgYW5kIHJlcXVpcmUtZGV2LCB0aGlzIGNhbiBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IiOwp9Cn0KCnRyeSB7CiRsb2FkZXIgPSBuZXcgVmFsaWRhdGluZ0FycmF5TG9hZGVyKG5ldyBBcnJheUxvYWRlcigpLCB0cnVlLCBudWxsLCBWYWxpZGF0aW5nQXJyYXlMb2FkZXI6OkNIRUNLX0FMTCk7CmlmICghaXNzZXQoJG1hbmlmZXN0Wyd2ZXJzaW9uJ10pKSB7CiRtYW5pZmVzdFsndmVyc2lvbiddID0gJzEuMC4wJzsKfQppZiAoIWlzc2V0KCRtYW5pZmVzdFsnbmFtZSddKSkgewokbWFuaWZlc3RbJ25hbWUnXSA9ICdkdW1teS9kdW1teSc7Cn0KJGxvYWRlci0+bG9hZCgkbWFuaWZlc3QpOwp9IGNhdGNoIChJbnZhbGlkUGFja2FnZUV4Y2VwdGlvbiAkZSkgewokZXJyb3JzID0gYXJyYXlfbWVyZ2UoJGVycm9ycywgJGUtPmdldEVycm9ycygpKTsKfQoKJHdhcm5pbmdzID0gYXJyYXlfbWVyZ2UoJHdhcm5pbmdzLCAkbG9hZGVyLT5nZXRXYXJuaW5ncygpKTsKCnJldHVybiBhcnJheSgkZXJyb3JzLCAkcHVibGlzaEVycm9ycywgJHdhcm5pbmdzKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFV0aWw7CgoKCgoKCmNsYXNzIEVycm9ySGFuZGxlcgp7CgoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBoYW5kbGUoJGxldmVsLCAkbWVzc2FnZSwgJGZpbGUsICRsaW5lKQp7CgogaWYgKCFlcnJvcl9yZXBvcnRpbmcoKSkgewpyZXR1cm47Cn0KCmlmIChpbmlfZ2V0KCd4ZGVidWcuc2NyZWFtJykpIHsKJG1lc3NhZ2UgLj0gIlxuXG5XYXJuaW5nOiBZb3UgaGF2ZSB4ZGVidWcuc2NyZWFtIGVuYWJsZWQsIHRoZSB3YXJuaW5nIGFib3ZlIG1heSBiZSIuCiJcbmEgbGVnaXRpbWF0ZWx5IHN1cHByZXNzZWQgZXJyb3IgdGhhdCB5b3Ugd2VyZSBub3Qgc3VwcG9zZWQgdG8gc2VlLiI7Cn0KCnRocm93IG5ldyBcRXJyb3JFeGNlcHRpb24oJG1lc3NhZ2UsIDAsICRsZXZlbCwgJGZpbGUsICRsaW5lKTsKfQoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCkKewpzZXRfZXJyb3JfaGFuZGxlcihhcnJheShfX0NMQVNTX18sICdoYW5kbGUnKSk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxVdGlsOwoKdXNlIENvbXBvc2VyXEpzb25cSnNvbkZpbGU7CgoKCgoKCgpjbGFzcyBTcGR4TGljZW5zZUlkZW50aWZpZXIKewoKCgpwcml2YXRlICRpZGVudGlmaWVyczsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCnsKJHRoaXMtPmluaXRJZGVudGlmaWVycygpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoJGxpY2Vuc2UpCnsKaWYgKGlzX2FycmF5KCRsaWNlbnNlKSkgewokY291bnQgPSBjb3VudCgkbGljZW5zZSk7CmlmICgkY291bnQgIT09IGNvdW50KGFycmF5X2ZpbHRlcigkbGljZW5zZSwgJ2lzX3N0cmluZycpKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQXJyYXkgb2Ygc3RyaW5ncyBleHBlY3RlZC4nKTsKfQokbGljZW5zZSA9ICRjb3VudCA+IDEgPyAnKCcuaW1wbG9kZSgnIG9yICcsICRsaWNlbnNlKS4nKScgOiAoc3RyaW5nKSByZXNldCgkbGljZW5zZSk7Cn0KaWYgKCFpc19zdHJpbmcoJGxpY2Vuc2UpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCidBcnJheSBvciBTdHJpbmcgZXhwZWN0ZWQsICVzIGdpdmVuLicsIGdldHR5cGUoJGxpY2Vuc2UpCikpOwp9CgpyZXR1cm4gJHRoaXMtPmlzVmFsaWRMaWNlbnNlU3RyaW5nKCRsaWNlbnNlKTsKfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBpbml0SWRlbnRpZmllcnMoKQp7CiRqc29uRmlsZSA9IG5ldyBKc29uRmlsZShfX0RJUl9fIC4gJy8uLi8uLi8uLi9yZXMvc3BkeC1pZGVudGlmaWVyLmpzb24nKTsKJHRoaXMtPmlkZW50aWZpZXJzID0gJGpzb25GaWxlLT5yZWFkKCk7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBpc1ZhbGlkTGljZW5zZUlkZW50aWZpZXIoJGlkZW50aWZpZXIpCnsKcmV0dXJuIGluX2FycmF5KCRpZGVudGlmaWVyLCAkdGhpcy0+aWRlbnRpZmllcnMpOwp9CgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGlzVmFsaWRMaWNlbnNlU3RyaW5nKCRsaWNlbnNlKQp7CiR0b2tlbnMgPSBhcnJheSgKJ3BvJyA9PiAnXCgnLAoncGMnID0+ICdcKScsCidvcCcgPT4gJyg/Om9yfGFuZCknLAonbGl4JyA9PiAnKD86Tk9ORXxOT0FTU0VSVElPTiknLAonbGlyJyA9PiAnTGljZW5zZVJlZi1cZCsnLAonbGljJyA9PiAnWy0rXy5hLXpBLVowLTldezMsfScsCid3cycgPT4gJ1xzKycsCidfJyA9PiAnLicsCik7CgokbmV4dCA9IGZ1bmN0aW9uICgpIHVzZSAoJGxpY2Vuc2UsICR0b2tlbnMpIHsKc3RhdGljICRvZmZzZXQgPSAwOwoKaWYgKCRvZmZzZXQgPj0gc3RybGVuKCRsaWNlbnNlKSkgewpyZXR1cm4gbnVsbDsKfQoKZm9yZWFjaCAoJHRva2VucyBhcyAkbmFtZSA9PiAkdG9rZW4pIHsKaWYgKGZhbHNlID09PSAkciA9IHByZWdfbWF0Y2goJ3snIC4gJHRva2VuIC4gJ30nLCAkbGljZW5zZSwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUsICRvZmZzZXQpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignUGF0dGVybiBmb3IgdG9rZW4gJXMgZmFpbGVkIChyZWdleCBlcnJvcikuJywgJG5hbWUpOwp9CmlmICgkciA9PT0gMCkgewpjb250aW51ZTsKfQppZiAoJG1hdGNoZXNbMF1bMV0gIT09ICRvZmZzZXQpIHsKY29udGludWU7Cn0KJG9mZnNldCArPSBzdHJsZW4oJG1hdGNoZXNbMF1bMF0pOwoKcmV0dXJuIGFycmF5KCRuYW1lLCAkbWF0Y2hlc1swXVswXSk7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQXQgbGVhc3QgdGhlIGxhc3QgcGF0dGVybiBuZWVkcyB0byBtYXRjaCwgYnV0IGl0IGRpZCBub3QgKGRvdC1tYXRjaC1hbGwgaXMgbWlzc2luZz8pLicpOwp9OwoKJG9wZW4gPSAwOwokcmVxdWlyZSA9IDE7CiRsYXN0b3AgPSBudWxsOwoKd2hpbGUgKGxpc3QoJHRva2VuLCAkc3RyaW5nKSA9ICRuZXh0KCkpIHsKc3dpdGNoICgkdG9rZW4pIHsKY2FzZSAncG8nOgppZiAoJG9wZW4gfHwgISRyZXF1aXJlKSB7CnJldHVybiBmYWxzZTsKfQokb3BlbiA9IDE7CmJyZWFrOwpjYXNlICdwYyc6CmlmICgkb3BlbiAhPT0gMSB8fCAkcmVxdWlyZSB8fCAhJGxhc3RvcCkgewpyZXR1cm4gZmFsc2U7Cn0KJG9wZW4gPSAyOwpicmVhazsKY2FzZSAnb3AnOgppZiAoJHJlcXVpcmUgfHwgISRvcGVuKSB7CnJldHVybiBmYWxzZTsKfQokbGFzdG9wIHx8ICRsYXN0b3AgPSAkc3RyaW5nOwppZiAoJGxhc3RvcCAhPT0gJHN0cmluZykgewpyZXR1cm4gZmFsc2U7Cn0KJHJlcXVpcmUgPSAxOwpicmVhazsKY2FzZSAnbGl4JzoKaWYgKCRvcGVuKSB7CnJldHVybiBmYWxzZTsKfQpnb3RvIGxpcjsKY2FzZSAnbGljJzoKaWYgKCEkdGhpcy0+aXNWYWxpZExpY2Vuc2VJZGVudGlmaWVyKCRzdHJpbmcpKSB7CnJldHVybiBmYWxzZTsKfQoKIGNhc2UgJ2xpcic6CmxpcjoKaWYgKCEkcmVxdWlyZSkgewpyZXR1cm4gZmFsc2U7Cn0KJHJlcXVpcmUgPSAwOwpicmVhazsKY2FzZSAnd3MnOgpicmVhazsKY2FzZSAnXyc6CnJldHVybiBmYWxzZTsKZGVmYXVsdDoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ1VucGFyc2VkIHRva2VuOiAlcy4nLCBwcmludF9yKCR0b2tlbiwgdHJ1ZSkpKTsKfQp9CgpyZXR1cm4gISgkb3BlbiAlIDIgfHwgJHJlcXVpcmUpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcVXRpbDsKCgoKCmNsYXNzIE5vUHJveHlQYXR0ZXJuCnsKCgoKcHJvdGVjdGVkICRydWxlcyA9IGFycmF5KCk7CgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhdHRlcm4pCnsKJHRoaXMtPnJ1bGVzID0gcHJlZ19zcGxpdCgiL1tccyxdKy8iLCAkcGF0dGVybik7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdGVzdCgkdXJsKQp7CiRob3N0ID0gcGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfSE9TVCk7CiRwb3J0ID0gcGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfUE9SVCk7CgppZiAoZW1wdHkoJHBvcnQpKSB7CnN3aXRjaCAocGFyc2VfdXJsKCR1cmwsIFBIUF9VUkxfU0NIRU1FKSkgewpjYXNlICdodHRwJzoKJHBvcnQgPSA4MDsKYnJlYWs7CmNhc2UgJ2h0dHBzJzoKJHBvcnQgPSA0NDM7CmJyZWFrOwp9Cn0KCmZvcmVhY2ggKCR0aGlzLT5ydWxlcyBhcyAkcnVsZSkgewppZiAoJHJ1bGUgPT0gJyonKSB7CnJldHVybiB0cnVlOwp9CgokbWF0Y2ggPSBmYWxzZTsKCmxpc3QoJHJ1bGVIb3N0KSA9IGV4cGxvZGUoJzonLCAkcnVsZSk7Cmxpc3QoJGJhc2UpID0gZXhwbG9kZSgnLycsICRydWxlSG9zdCk7CgppZiAoZmlsdGVyX3ZhcigkYmFzZSwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfRkxBR19JUFY0KSkgewoKCmlmICghaXNzZXQoJGlwKSkgewokaXAgPSBnZXRob3N0YnluYW1lKCRob3N0KTsKfQoKaWYgKHN0cnBvcygkcnVsZUhvc3QsICcvJykgPT09IGZhbHNlKSB7CiRtYXRjaCA9ICRpcCA9PT0gJHJ1bGVIb3N0Owp9IGVsc2UgewoKIAogaWYgKCRpcCA9PT0gJGhvc3QpIHsKJG1hdGNoID0gZmFsc2U7Cn0gZWxzZSB7CgogJG1hdGNoID0gc2VsZjo6aW5DSURSQmxvY2soJHJ1bGVIb3N0LCAkaXApOwp9Cn0KfSBlbHNlIHsKCgokaGF5c3RhY2sgPSAnLicgLiB0cmltKCRob3N0LCAnLicpIC4gJy4nOwokbmVlZGxlID0gJy4nLiB0cmltKCRydWxlSG9zdCwgJy4nKSAuJy4nOwokbWF0Y2ggPSBzdHJpcG9zKHN0cnJldigkaGF5c3RhY2spLCBzdHJyZXYoJG5lZWRsZSkpID09PSAwOwp9CgoKIGlmICgkbWF0Y2ggJiYgc3RycG9zKCRydWxlLCAnOicpICE9PSBmYWxzZSkgewpsaXN0KCwgJHJ1bGVQb3J0KSA9IGV4cGxvZGUoJzonLCAkcnVsZSk7CmlmICghZW1wdHkoJHJ1bGVQb3J0KSAmJiAkcG9ydCAhPSAkcnVsZVBvcnQpIHsKJG1hdGNoID0gZmFsc2U7Cn0KfQoKaWYgKCRtYXRjaCkgewpyZXR1cm4gdHJ1ZTsKfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCgoKCgpwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBpbkNJRFJCbG9jaygkY2lkciwgJGlwKQp7CgogbGlzdCgkYmFzZSwgJGJpdHMpID0gZXhwbG9kZSgnLycsICRjaWRyKTsKCgogbGlzdCgkYSwgJGIsICRjLCAkZCkgPSBleHBsb2RlKCcuJywgJGJhc2UpOwoKCiAkaSA9ICgkYSA8PCAyNCkgKyAoJGIgPDwgMTYpICsgKCRjIDw8IDgpICsgJGQ7CiRtYXNrID0gJGJpdHMgPT0gMCA/IDA6ICh+MCA8PCAoMzIgLSAkYml0cykpOwoKCiAkbG93ID0gJGkgJiAkbWFzazsKCgogJGhpZ2ggPSAkaSB8ICh+JG1hc2sgJiAweEZGRkZGRkZGKTsKCgogbGlzdCgkYSwgJGIsICRjLCAkZCkgPSBleHBsb2RlKCcuJywgJGlwKTsKCgogJGNoZWNrID0gKCRhIDw8IDI0KSArICgkYiA8PCAxNikgKyAoJGMgPDwgOCkgKyAkZDsKCgogCiByZXR1cm4gJGNoZWNrID49ICRsb3cgJiYgJGNoZWNrIDw9ICRoaWdoOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcVXRpbDsKCnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKCgoKCgpjbGFzcyBTdm4Kewpjb25zdCBNQVhfUVRZX0FVVEhfVFJJRVMgPSA1OwoKCgoKcHJvdGVjdGVkICRjcmVkZW50aWFsczsKCgoKCnByb3RlY3RlZCAkaGFzQXV0aDsKCgoKCnByb3RlY3RlZCAkaW87CgoKCgpwcm90ZWN0ZWQgJHVybDsKCgoKCnByb3RlY3RlZCAkY2FjaGVDcmVkZW50aWFscyA9IHRydWU7CgoKCgpwcm90ZWN0ZWQgJHByb2Nlc3M7CgoKCgpwcm90ZWN0ZWQgJHF0eUF1dGhUcmllcyA9IDA7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdXJsLCBJT0ludGVyZmFjZSAkaW8sIFByb2Nlc3NFeGVjdXRvciAkcHJvY2VzcyA9IG51bGwpCnsKJHRoaXMtPnVybCA9ICR1cmw7CiR0aGlzLT5pbyA9ICRpbzsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzcyA/OiBuZXcgUHJvY2Vzc0V4ZWN1dG9yOwp9CgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNsZWFuRW52KCkKewoKIHB1dGVudigiRFlMRF9MSUJSQVJZX1BBVEgiKTsKfQoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgkY29tbWFuZCwgJHVybCwgJGN3ZCA9IG51bGwsICRwYXRoID0gbnVsbCwgJHZlcmJvc2UgPSBmYWxzZSkKewokc3ZuQ29tbWFuZCA9ICR0aGlzLT5nZXRDb21tYW5kKCRjb21tYW5kLCAkdXJsLCAkcGF0aCk7CiRvdXRwdXQgPSBudWxsOwokaW8gPSAkdGhpcy0+aW87CiRoYW5kbGVyID0gZnVuY3Rpb24gKCR0eXBlLCAkYnVmZmVyKSB1c2UgKCYkb3V0cHV0LCAkaW8sICR2ZXJib3NlKSB7CmlmICgkdHlwZSAhPT0gJ291dCcpIHsKcmV0dXJuOwp9CmlmICgnUmVkaXJlY3RpbmcgdG8gVVJMICcgPT09IHN1YnN0cigkYnVmZmVyLCAwLCAxOSkpIHsKcmV0dXJuOwp9CiRvdXRwdXQgLj0gJGJ1ZmZlcjsKaWYgKCR2ZXJib3NlKSB7CiRpby0+d3JpdGUoJGJ1ZmZlciwgZmFsc2UpOwp9Cn07CiRzdGF0dXMgPSAkdGhpcy0+cHJvY2Vzcy0+ZXhlY3V0ZSgkc3ZuQ29tbWFuZCwgJGhhbmRsZXIsICRjd2QpOwppZiAoMCA9PT0gJHN0YXR1cykgewpyZXR1cm4gJG91dHB1dDsKfQoKaWYgKGVtcHR5KCRvdXRwdXQpKSB7CiRvdXRwdXQgPSAkdGhpcy0+cHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKTsKfQoKCiBpZiAoZmFsc2UgPT09IHN0cmlwb3MoJG91dHB1dCwgJ0NvdWxkIG5vdCBhdXRoZW50aWNhdGUgdG8gc2VydmVyOicpCiYmIGZhbHNlID09PSBzdHJpcG9zKCRvdXRwdXQsICdhdXRob3JpemF0aW9uIGZhaWxlZCcpCiYmIGZhbHNlID09PSBzdHJpcG9zKCRvdXRwdXQsICdzdm46IEUxNzAwMDE6JykKJiYgZmFsc2UgPT09IHN0cmlwb3MoJG91dHB1dCwgJ3N2bjogRTIxNTAwNDonKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJG91dHB1dCk7Cn0KCgogaWYgKCEkdGhpcy0+aW8tPmlzSW50ZXJhY3RpdmUoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oCidjYW4gbm90IGFzayBmb3IgYXV0aGVudGljYXRpb24gaW4gbm9uIGludGVyYWN0aXZlIG1vZGUgKCcuJG91dHB1dC4nKScKKTsKfQoKCiBpZiAoJHRoaXMtPnF0eUF1dGhUcmllcysrIDwgc2VsZjo6TUFYX1FUWV9BVVRIX1RSSUVTIHx8ICEkdGhpcy0+aGFzQXV0aCgpKSB7CiR0aGlzLT5kb0F1dGhEYW5jZSgpOwoKCiByZXR1cm4gJHRoaXMtPmV4ZWN1dGUoJGNvbW1hbmQsICR1cmwsICRjd2QsICRwYXRoLCAkdmVyYm9zZSk7Cn0KCnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigKJ3dyb25nIGNyZWRlbnRpYWxzIHByb3ZpZGVkICgnLiRvdXRwdXQuJyknCik7Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRvQXV0aERhbmNlKCkKewokdGhpcy0+aW8tPndyaXRlKCJUaGUgU3VidmVyc2lvbiBzZXJ2ZXIgKHskdGhpcy0+dXJsfSkgcmVxdWVzdGVkIGNyZWRlbnRpYWxzOiIpOwoKJHRoaXMtPmhhc0F1dGggPSB0cnVlOwokdGhpcy0+Y3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10gPSAkdGhpcy0+aW8tPmFzaygiVXNlcm5hbWU6ICIpOwokdGhpcy0+Y3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ10gPSAkdGhpcy0+aW8tPmFza0FuZEhpZGVBbnN3ZXIoIlBhc3N3b3JkOiAiKTsKCiR0aGlzLT5jYWNoZUNyZWRlbnRpYWxzID0gJHRoaXMtPmlvLT5hc2tDb25maXJtYXRpb24oIlNob3VsZCBTdWJ2ZXJzaW9uIGNhY2hlIHRoZXNlIGNyZWRlbnRpYWxzPyAoeWVzL25vKSAiLCB0cnVlKTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbW1hbmQoJGNtZCwgJHVybCwgJHBhdGggPSBudWxsKQp7CiRjbWQgPSBzcHJpbnRmKCclcyAlcyVzICVzJywKJGNtZCwKJy0tbm9uLWludGVyYWN0aXZlICcsCiR0aGlzLT5nZXRDcmVkZW50aWFsU3RyaW5nKCksCmVzY2FwZXNoZWxsYXJnKCR1cmwpCik7CgppZiAoJHBhdGgpIHsKJGNtZCAuPSAnICcgLiBlc2NhcGVzaGVsbGFyZygkcGF0aCk7Cn0KCnJldHVybiAkY21kOwp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENyZWRlbnRpYWxTdHJpbmcoKQp7CmlmICghJHRoaXMtPmhhc0F1dGgoKSkgewpyZXR1cm4gJyc7Cn0KCnJldHVybiBzcHJpbnRmKAonICVzLS11c2VybmFtZSAlcyAtLXBhc3N3b3JkICVzICcsCiR0aGlzLT5nZXRBdXRoQ2FjaGUoKSwKZXNjYXBlc2hlbGxhcmcoJHRoaXMtPmdldFVzZXJuYW1lKCkpLAplc2NhcGVzaGVsbGFyZygkdGhpcy0+Z2V0UGFzc3dvcmQoKSkKKTsKfQoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBhc3N3b3JkKCkKewppZiAoJHRoaXMtPmNyZWRlbnRpYWxzID09PSBudWxsKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oIk5vIHN2biBhdXRoIGRldGVjdGVkLiIpOwp9CgpyZXR1cm4gaXNzZXQoJHRoaXMtPmNyZWRlbnRpYWxzWydwYXNzd29yZCddKSA/ICR0aGlzLT5jcmVkZW50aWFsc1sncGFzc3dvcmQnXSA6ICcnOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0VXNlcm5hbWUoKQp7CmlmICgkdGhpcy0+Y3JlZGVudGlhbHMgPT09IG51bGwpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbigiTm8gc3ZuIGF1dGggZGV0ZWN0ZWQuIik7Cn0KCnJldHVybiAkdGhpcy0+Y3JlZGVudGlhbHNbJ3VzZXJuYW1lJ107Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGhhc0F1dGgoKQp7CmlmIChudWxsICE9PSAkdGhpcy0+aGFzQXV0aCkgewpyZXR1cm4gJHRoaXMtPmhhc0F1dGg7Cn0KCiR1cmkgPSBwYXJzZV91cmwoJHRoaXMtPnVybCk7CmlmIChlbXB0eSgkdXJpWyd1c2VyJ10pKSB7CnJldHVybiAkdGhpcy0+aGFzQXV0aCA9IGZhbHNlOwp9CgokdGhpcy0+Y3JlZGVudGlhbHNbJ3VzZXJuYW1lJ10gPSAkdXJpWyd1c2VyJ107CmlmICghZW1wdHkoJHVyaVsncGFzcyddKSkgewokdGhpcy0+Y3JlZGVudGlhbHNbJ3Bhc3N3b3JkJ10gPSAkdXJpWydwYXNzJ107Cn0KCnJldHVybiAkdGhpcy0+aGFzQXV0aCA9IHRydWU7Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEF1dGhDYWNoZSgpCnsKcmV0dXJuICR0aGlzLT5jYWNoZUNyZWRlbnRpYWxzID8gJycgOiAnLS1uby1hdXRoLWNhY2hlICc7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlcjsKCnVzZSBDb21wb3NlclxQYWNrYWdlXFJvb3RQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMb2NrZXI7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XFJlcG9zaXRvcnlNYW5hZ2VyOwp1c2UgQ29tcG9zZXJcSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXI7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luTWFuYWdlcjsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcRG93bmxvYWRNYW5hZ2VyOwp1c2UgQ29tcG9zZXJcRXZlbnREaXNwYXRjaGVyXEV2ZW50RGlzcGF0Y2hlcjsKdXNlIENvbXBvc2VyXEF1dG9sb2FkXEF1dG9sb2FkR2VuZXJhdG9yOwoKCgoKCgpjbGFzcyBDb21wb3Nlcgp7CmNvbnN0IFZFUlNJT04gPSAnZWViZmZhY2Q5ZjU0YzQ1Mjc0NDg0MzQzMjk3NjVmODQ1ZThlZTNlZCc7CmNvbnN0IFJFTEVBU0VfREFURSA9ICcyMDE0LTA0LTI0IDE0OjQxOjQyJzsKCgoKCnByaXZhdGUgJHBhY2thZ2U7CgoKCgpwcml2YXRlICRsb2NrZXI7CgoKCgpwcml2YXRlICRyZXBvc2l0b3J5TWFuYWdlcjsKCgoKCnByaXZhdGUgJGRvd25sb2FkTWFuYWdlcjsKCgoKCnByaXZhdGUgJGluc3RhbGxhdGlvbk1hbmFnZXI7CgoKCgpwcml2YXRlICRwbHVnaW5NYW5hZ2VyOwoKCgoKcHJpdmF0ZSAkY29uZmlnOwoKCgoKcHJpdmF0ZSAkZXZlbnREaXNwYXRjaGVyOwoKCgoKcHJpdmF0ZSAkYXV0b2xvYWRHZW5lcmF0b3I7CgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFBhY2thZ2UoUm9vdFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHRoaXMtPnBhY2thZ2UgPSAkcGFja2FnZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhY2thZ2UoKQp7CnJldHVybiAkdGhpcy0+cGFja2FnZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldENvbmZpZyhDb25maWcgJGNvbmZpZykKewokdGhpcy0+Y29uZmlnID0gJGNvbmZpZzsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbmZpZygpCnsKcmV0dXJuICR0aGlzLT5jb25maWc7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRMb2NrZXIoTG9ja2VyICRsb2NrZXIpCnsKJHRoaXMtPmxvY2tlciA9ICRsb2NrZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb2NrZXIoKQp7CnJldHVybiAkdGhpcy0+bG9ja2VyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UmVwb3NpdG9yeU1hbmFnZXIoUmVwb3NpdG9yeU1hbmFnZXIgJG1hbmFnZXIpCnsKJHRoaXMtPnJlcG9zaXRvcnlNYW5hZ2VyID0gJG1hbmFnZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRSZXBvc2l0b3J5TWFuYWdlcigpCnsKcmV0dXJuICR0aGlzLT5yZXBvc2l0b3J5TWFuYWdlcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERvd25sb2FkTWFuYWdlcihEb3dubG9hZE1hbmFnZXIgJG1hbmFnZXIpCnsKJHRoaXMtPmRvd25sb2FkTWFuYWdlciA9ICRtYW5hZ2VyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RG93bmxvYWRNYW5hZ2VyKCkKewpyZXR1cm4gJHRoaXMtPmRvd25sb2FkTWFuYWdlcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEluc3RhbGxhdGlvbk1hbmFnZXIoSW5zdGFsbGF0aW9uTWFuYWdlciAkbWFuYWdlcikKewokdGhpcy0+aW5zdGFsbGF0aW9uTWFuYWdlciA9ICRtYW5hZ2VyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbGF0aW9uTWFuYWdlcigpCnsKcmV0dXJuICR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UGx1Z2luTWFuYWdlcihQbHVnaW5NYW5hZ2VyICRtYW5hZ2VyKQp7CiR0aGlzLT5wbHVnaW5NYW5hZ2VyID0gJG1hbmFnZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQbHVnaW5NYW5hZ2VyKCkKewpyZXR1cm4gJHRoaXMtPnBsdWdpbk1hbmFnZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFdmVudERpc3BhdGNoZXIoRXZlbnREaXNwYXRjaGVyICRldmVudERpc3BhdGNoZXIpCnsKJHRoaXMtPmV2ZW50RGlzcGF0Y2hlciA9ICRldmVudERpc3BhdGNoZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRFdmVudERpc3BhdGNoZXIoKQp7CnJldHVybiAkdGhpcy0+ZXZlbnREaXNwYXRjaGVyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QXV0b2xvYWRHZW5lcmF0b3IoQXV0b2xvYWRHZW5lcmF0b3IgJGF1dG9sb2FkR2VuZXJhdG9yKQp7CiR0aGlzLT5hdXRvbG9hZEdlbmVyYXRvciA9ICRhdXRvbG9hZEdlbmVyYXRvcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEF1dG9sb2FkR2VuZXJhdG9yKCkKewpyZXR1cm4gJHRoaXMtPmF1dG9sb2FkR2VuZXJhdG9yOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSnNvbjsKCgoKCmNsYXNzIEpzb25NYW5pcHVsYXRvcgp7CnByaXZhdGUgc3RhdGljICRSRUNVUlNFX0JMT0NLUzsKcHJpdmF0ZSBzdGF0aWMgJEpTT05fVkFMVUU7CnByaXZhdGUgc3RhdGljICRKU09OX1NUUklORzsKCnByaXZhdGUgJGNvbnRlbnRzOwpwcml2YXRlICRuZXdsaW5lOwpwcml2YXRlICRpbmRlbnQ7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbnRlbnRzKQp7CmlmICghc2VsZjo6JFJFQ1VSU0VfQkxPQ0tTKSB7CnNlbGY6OiRSRUNVUlNFX0JMT0NLUyA9ICcoPzpbXnt9XSp8XHsoPzpbXnt9XSp8XHsoPzpbXnt9XSp8XHsoPzpbXnt9XSp8XHtbXnt9XSpcfSkqXH0pKlx9KSpcfSkqJzsKc2VsZjo6JEpTT05fU1RSSU5HID0gJyIoPzpcXFxcWyJiZm5ydC9cXFxcXXxcXFxcdVthLWZBLUYwLTldezR9fFteXDAtXHgwOVx4MGEtXHgxZlxcXFwiXSkqIic7CnNlbGY6OiRKU09OX1ZBTFVFID0gJyg/OlswLTkuXSt8bnVsbHx0cnVlfGZhbHNlfCcuc2VsZjo6JEpTT05fU1RSSU5HLid8XFtbXlxdXSpcXXxceycuc2VsZjo6JFJFQ1VSU0VfQkxPQ0tTLidcfSknOwp9CgokY29udGVudHMgPSB0cmltKCRjb250ZW50cyk7CmlmICghJHRoaXMtPnByZWdNYXRjaCgnI15ceyguKilcfSQjcycsICRjb250ZW50cykpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1RoZSBqc29uIGZpbGUgbXVzdCBiZSBhbiBvYmplY3QgKHt9KScpOwp9CiR0aGlzLT5uZXdsaW5lID0gZmFsc2UgIT09IHN0cnBvcygkY29udGVudHMsICJcclxuIikgPyAiXHJcbiI6ICJcbiI7CiR0aGlzLT5jb250ZW50cyA9ICRjb250ZW50cyA9PT0gJ3t9JyA/ICd7JyAuICR0aGlzLT5uZXdsaW5lIC4gJ30nIDogJGNvbnRlbnRzOwokdGhpcy0+ZGV0ZWN0SW5kZW50aW5nKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCnsKcmV0dXJuICR0aGlzLT5jb250ZW50cyAuICR0aGlzLT5uZXdsaW5lOwp9CgpwdWJsaWMgZnVuY3Rpb24gYWRkTGluaygkdHlwZSwgJHBhY2thZ2UsICRjb25zdHJhaW50KQp7CiRkZWNvZGVkID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Y29udGVudHMpOwoKCiBpZiAoIWlzc2V0KCRkZWNvZGVkWyR0eXBlXSkpIHsKcmV0dXJuICR0aGlzLT5hZGRNYWluS2V5KCR0eXBlLCBhcnJheSgkcGFja2FnZSA9PiAkY29uc3RyYWludCkpOwp9CgokcmVnZXggPSAne14oXHMqXHtccyooPzonLnNlbGY6OiRKU09OX1NUUklORy4nXHMqOlxzKicuc2VsZjo6JEpTT05fVkFMVUUuJ1xzKixccyopKj8pJy4KJygnLnByZWdfcXVvdGUoSnNvbkZpbGU6OmVuY29kZSgkdHlwZSkpLidccyo6XHMqKSgnLnNlbGY6OiRKU09OX1ZBTFVFLicpKC4qKX1zJzsKaWYgKCEkdGhpcy0+cHJlZ01hdGNoKCRyZWdleCwgJHRoaXMtPmNvbnRlbnRzLCAkbWF0Y2hlcykpIHsKcmV0dXJuIGZhbHNlOwp9CgokbGlua3MgPSAkbWF0Y2hlc1szXTsKCmlmIChpc3NldCgkZGVjb2RlZFskdHlwZV1bJHBhY2thZ2VdKSkgewoKICRwYWNrYWdlUmVnZXggPSBzdHJfcmVwbGFjZSgnLycsICdcXFxcPy8nLCBwcmVnX3F1b3RlKCRwYWNrYWdlKSk7CgogJGxpbmtzID0gcHJlZ19yZXBsYWNlKCd7IicuJHBhY2thZ2VSZWdleC4nIihccyo6XHMqKScuc2VsZjo6JEpTT05fU1RSSU5HLid9aScsIGFkZGNzbGFzaGVzKEpzb25GaWxlOjplbmNvZGUoJHBhY2thZ2UpLickezF9IicuJGNvbnN0cmFpbnQuJyInLCAnXFwnKSwgJGxpbmtzKTsKfSBlbHNlIHsKaWYgKCR0aGlzLT5wcmVnTWF0Y2goJyNeXHMqXHtccypcUysuKj8oXHMqXH1ccyopJCNzJywgJGxpbmtzLCAkbWF0Y2gpKSB7CgogJGxpbmtzID0gcHJlZ19yZXBsYWNlKAoneycucHJlZ19xdW90ZSgkbWF0Y2hbMV0pLickfScsCmFkZGNzbGFzaGVzKCcsJyAuICR0aGlzLT5uZXdsaW5lIC4gJHRoaXMtPmluZGVudCAuICR0aGlzLT5pbmRlbnQgLiBKc29uRmlsZTo6ZW5jb2RlKCRwYWNrYWdlKS4nOiAnLkpzb25GaWxlOjplbmNvZGUoJGNvbnN0cmFpbnQpIC4gJG1hdGNoWzFdLCAnXFwnKSwKJGxpbmtzCik7Cn0gZWxzZSB7CgogJGxpbmtzID0gJ3snIC4gJHRoaXMtPm5ld2xpbmUgLgokdGhpcy0+aW5kZW50IC4gJHRoaXMtPmluZGVudCAuIEpzb25GaWxlOjplbmNvZGUoJHBhY2thZ2UpLic6ICcuSnNvbkZpbGU6OmVuY29kZSgkY29uc3RyYWludCkgLiAkdGhpcy0+bmV3bGluZSAuCiR0aGlzLT5pbmRlbnQgLiAnfSc7Cn0KfQoKJHRoaXMtPmNvbnRlbnRzID0gJG1hdGNoZXNbMV0gLiAkbWF0Y2hlc1syXSAuICRsaW5rcyAuICRtYXRjaGVzWzRdOwoKcmV0dXJuIHRydWU7Cn0KCnB1YmxpYyBmdW5jdGlvbiBhZGRSZXBvc2l0b3J5KCRuYW1lLCAkY29uZmlnKQp7CnJldHVybiAkdGhpcy0+YWRkU3ViTm9kZSgncmVwb3NpdG9yaWVzJywgJG5hbWUsICRjb25maWcpOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlUmVwb3NpdG9yeSgkbmFtZSkKewpyZXR1cm4gJHRoaXMtPnJlbW92ZVN1Yk5vZGUoJ3JlcG9zaXRvcmllcycsICRuYW1lKTsKfQoKcHVibGljIGZ1bmN0aW9uIGFkZENvbmZpZ1NldHRpbmcoJG5hbWUsICR2YWx1ZSkKewpyZXR1cm4gJHRoaXMtPmFkZFN1Yk5vZGUoJ2NvbmZpZycsICRuYW1lLCAkdmFsdWUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQ29uZmlnU2V0dGluZygkbmFtZSkKewpyZXR1cm4gJHRoaXMtPnJlbW92ZVN1Yk5vZGUoJ2NvbmZpZycsICRuYW1lKTsKfQoKcHVibGljIGZ1bmN0aW9uIGFkZFN1Yk5vZGUoJG1haW5Ob2RlLCAkbmFtZSwgJHZhbHVlKQp7CiRkZWNvZGVkID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Y29udGVudHMpOwoKCiBpZiAoIWlzc2V0KCRkZWNvZGVkWyRtYWluTm9kZV0pKSB7CiR0aGlzLT5hZGRNYWluS2V5KCRtYWluTm9kZSwgYXJyYXkoJG5hbWUgPT4gJHZhbHVlKSk7CgpyZXR1cm4gdHJ1ZTsKfQoKJHN1Yk5hbWUgPSBudWxsOwppZiAoZmFsc2UgIT09IHN0cnBvcygkbmFtZSwgJy4nKSkgewpsaXN0KCRuYW1lLCAkc3ViTmFtZSkgPSBleHBsb2RlKCcuJywgJG5hbWUsIDIpOwp9CgoKICRub2RlUmVnZXggPSAnIygiJy4kbWFpbk5vZGUuJyI6XHMqXHspKCcuc2VsZjo6JFJFQ1VSU0VfQkxPQ0tTLicpKFx9KSNzJzsKaWYgKCEkdGhpcy0+cHJlZ01hdGNoKCRub2RlUmVnZXgsICR0aGlzLT5jb250ZW50cywgJG1hdGNoKSkgewpyZXR1cm4gZmFsc2U7Cn0KCiRjaGlsZHJlbiA9ICRtYXRjaFsyXTsKCgogaWYgKCFAanNvbl9kZWNvZGUoJ3snLiRjaGlsZHJlbi4nfScpKSB7CnJldHVybiBmYWxzZTsKfQoKJHRoYXQgPSAkdGhpczsKCgogaWYgKCR0aGlzLT5wcmVnTWF0Y2goJ3soIicucHJlZ19xdW90ZSgkbmFtZSkuJyJccyo6XHMqKSgnLnNlbGY6OiRKU09OX1ZBTFVFLicpKCw/KX0nLCAkY2hpbGRyZW4sICRtYXRjaGVzKSkgewokY2hpbGRyZW4gPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJ3soIicucHJlZ19xdW90ZSgkbmFtZSkuJyJccyo6XHMqKSgnLnNlbGY6OiRKU09OX1ZBTFVFLicpKCw/KX0nLCBmdW5jdGlvbiAoJG1hdGNoZXMpIHVzZSAoJG5hbWUsICRzdWJOYW1lLCAkdmFsdWUsICR0aGF0KSB7CmlmICgkc3ViTmFtZSAhPT0gbnVsbCkgewokY3VyVmFsID0ganNvbl9kZWNvZGUoJG1hdGNoZXNbMl0sIHRydWUpOwokY3VyVmFsWyRzdWJOYW1lXSA9ICR2YWx1ZTsKJHZhbHVlID0gJGN1clZhbDsKfQoKcmV0dXJuICRtYXRjaGVzWzFdIC4gJHRoYXQtPmZvcm1hdCgkdmFsdWUsIDEpIC4gJG1hdGNoZXNbM107Cn0sICRjaGlsZHJlbik7Cn0gZWxzZWlmICgkdGhpcy0+cHJlZ01hdGNoKCcjW15cc10oXHMqKSQjJywgJGNoaWxkcmVuLCAkbWF0Y2gpKSB7CmlmICgkc3ViTmFtZSAhPT0gbnVsbCkgewokdmFsdWUgPSBhcnJheSgkc3ViTmFtZSA9PiAkdmFsdWUpOwp9CgoKICRjaGlsZHJlbiA9IHByZWdfcmVwbGFjZSgKJyMnLiRtYXRjaFsxXS4nJCMnLAphZGRjc2xhc2hlcygnLCcgLiAkdGhpcy0+bmV3bGluZSAuICR0aGlzLT5pbmRlbnQgLiAkdGhpcy0+aW5kZW50IC4gSnNvbkZpbGU6OmVuY29kZSgkbmFtZSkuJzogJy4kdGhpcy0+Zm9ybWF0KCR2YWx1ZSwgMSkgLiAkbWF0Y2hbMV0sICdcXCcpLAokY2hpbGRyZW4KKTsKfSBlbHNlIHsKaWYgKCRzdWJOYW1lICE9PSBudWxsKSB7CiR2YWx1ZSA9IGFycmF5KCRzdWJOYW1lID0+ICR2YWx1ZSk7Cn0KCgogJGNoaWxkcmVuID0gJHRoaXMtPm5ld2xpbmUgLiAkdGhpcy0+aW5kZW50IC4gJHRoaXMtPmluZGVudCAuIEpzb25GaWxlOjplbmNvZGUoJG5hbWUpLic6ICcuJHRoaXMtPmZvcm1hdCgkdmFsdWUsIDEpIC4gJGNoaWxkcmVuOwp9CgokdGhpcy0+Y29udGVudHMgPSBwcmVnX3JlcGxhY2UoJG5vZGVSZWdleCwgYWRkY3NsYXNoZXMoJyR7MX0nLiRjaGlsZHJlbi4nJDMnLCAnXFwnKSwgJHRoaXMtPmNvbnRlbnRzKTsKCnJldHVybiB0cnVlOwp9CgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlU3ViTm9kZSgkbWFpbk5vZGUsICRuYW1lKQp7CiRkZWNvZGVkID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Y29udGVudHMpOwoKCiBpZiAoZW1wdHkoJGRlY29kZWRbJG1haW5Ob2RlXSkpIHsKcmV0dXJuIHRydWU7Cn0KCgogJG5vZGVSZWdleCA9ICcjKCInLiRtYWluTm9kZS4nIjpccypceykoJy5zZWxmOjokUkVDVVJTRV9CTE9DS1MuJykoXH0pI3MnOwppZiAoISR0aGlzLT5wcmVnTWF0Y2goJG5vZGVSZWdleCwgJHRoaXMtPmNvbnRlbnRzLCAkbWF0Y2gpKSB7CnJldHVybiBmYWxzZTsKfQoKJGNoaWxkcmVuID0gJG1hdGNoWzJdOwoKCiBpZiAoIUBqc29uX2RlY29kZSgneycuJGNoaWxkcmVuLid9JykpIHsKcmV0dXJuIGZhbHNlOwp9Cgokc3ViTmFtZSA9IG51bGw7CmlmIChmYWxzZSAhPT0gc3RycG9zKCRuYW1lLCAnLicpKSB7Cmxpc3QoJG5hbWUsICRzdWJOYW1lKSA9IGV4cGxvZGUoJy4nLCAkbmFtZSwgMik7Cn0KCgogaWYgKCFpc3NldCgkZGVjb2RlZFskbWFpbk5vZGVdWyRuYW1lXSkgfHwgKCRzdWJOYW1lICYmICFpc3NldCgkZGVjb2RlZFskbWFpbk5vZGVdWyRuYW1lXVskc3ViTmFtZV0pKSkgewpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAoJHRoaXMtPnByZWdNYXRjaCgneyInLnByZWdfcXVvdGUoJG5hbWUpLiciXHMqOn1pJywgJGNoaWxkcmVuKSkgewoKIGlmIChwcmVnX21hdGNoX2FsbCgneyInLnByZWdfcXVvdGUoJG5hbWUpLiciXHMqOlxzKig/Oicuc2VsZjo6JEpTT05fVkFMVUUuJyl9JywgJGNoaWxkcmVuLCAkbWF0Y2hlcykpIHsKJGJlc3RNYXRjaCA9ICcnOwpmb3JlYWNoICgkbWF0Y2hlc1swXSBhcyAkbWF0Y2gpIHsKaWYgKHN0cmxlbigkYmVzdE1hdGNoKSA8IHN0cmxlbigkbWF0Y2gpKSB7CiRiZXN0TWF0Y2ggPSAkbWF0Y2g7Cn0KfQokY2hpbGRyZW5DbGVhbiA9IHByZWdfcmVwbGFjZSgneyxccyonLnByZWdfcXVvdGUoJGJlc3RNYXRjaCkuJ31pJywgJycsICRjaGlsZHJlbiwgLTEsICRjb3VudCk7CmlmICgxICE9PSAkY291bnQpIHsKJGNoaWxkcmVuQ2xlYW4gPSBwcmVnX3JlcGxhY2UoJ3snLnByZWdfcXVvdGUoJGJlc3RNYXRjaCkuJ1xzKiw/XHMqfWknLCAnJywgJGNoaWxkcmVuQ2xlYW4sIC0xLCAkY291bnQpOwppZiAoMSAhPT0gJGNvdW50KSB7CnJldHVybiBmYWxzZTsKfQp9Cn0KfSBlbHNlIHsKJGNoaWxkcmVuQ2xlYW4gPSAkY2hpbGRyZW47Cn0KCgogaWYgKCF0cmltKCRjaGlsZHJlbkNsZWFuKSkgewokdGhpcy0+Y29udGVudHMgPSBwcmVnX3JlcGxhY2UoJG5vZGVSZWdleCwgJyQxJy4kdGhpcy0+bmV3bGluZS4kdGhpcy0+aW5kZW50Lid9JywgJHRoaXMtPmNvbnRlbnRzKTsKCgogaWYgKCRzdWJOYW1lICE9PSBudWxsKSB7CiRjdXJWYWwgPSBqc29uX2RlY29kZSgneycuJGNoaWxkcmVuLid9JywgdHJ1ZSk7CnVuc2V0KCRjdXJWYWxbJG5hbWVdWyRzdWJOYW1lXSk7CiR0aGlzLT5hZGRTdWJOb2RlKCRtYWluTm9kZSwgJG5hbWUsICRjdXJWYWxbJG5hbWVdKTsKfQoKcmV0dXJuIHRydWU7Cn0KCiR0aGF0ID0gJHRoaXM7CiR0aGlzLT5jb250ZW50cyA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygkbm9kZVJlZ2V4LCBmdW5jdGlvbiAoJG1hdGNoZXMpIHVzZSAoJHRoYXQsICRuYW1lLCAkc3ViTmFtZSwgJGNoaWxkcmVuQ2xlYW4pIHsKaWYgKCRzdWJOYW1lICE9PSBudWxsKSB7CiRjdXJWYWwgPSBqc29uX2RlY29kZSgneycuJG1hdGNoZXNbMl0uJ30nLCB0cnVlKTsKdW5zZXQoJGN1clZhbFskbmFtZV1bJHN1Yk5hbWVdKTsKJGNoaWxkcmVuQ2xlYW4gPSBzdWJzdHIoJHRoYXQtPmZvcm1hdCgkY3VyVmFsLCAwKSwgMSwgLTEpOwp9CgpyZXR1cm4gJG1hdGNoZXNbMV0gLiAkY2hpbGRyZW5DbGVhbiAuICRtYXRjaGVzWzNdOwp9LCAkdGhpcy0+Y29udGVudHMpOwoKcmV0dXJuIHRydWU7Cn0KCnB1YmxpYyBmdW5jdGlvbiBhZGRNYWluS2V5KCRrZXksICRjb250ZW50KQp7CiRkZWNvZGVkID0gSnNvbkZpbGU6OnBhcnNlSnNvbigkdGhpcy0+Y29udGVudHMpOwokY29udGVudCA9ICR0aGlzLT5mb3JtYXQoJGNvbnRlbnQpOwoKCiAkcmVnZXggPSAne14oXHMqXHtccyooPzonLnNlbGY6OiRKU09OX1NUUklORy4nXHMqOlxzKicuc2VsZjo6JEpTT05fVkFMVUUuJ1xzKixccyopKj8pJy4KJygnLnByZWdfcXVvdGUoSnNvbkZpbGU6OmVuY29kZSgka2V5KSkuJ1xzKjpccyonLnNlbGY6OiRKU09OX1ZBTFVFLicpKC4qKX1zJzsKaWYgKGlzc2V0KCRkZWNvZGVkWyRrZXldKSAmJiAkdGhpcy0+cHJlZ01hdGNoKCRyZWdleCwgJHRoaXMtPmNvbnRlbnRzLCAkbWF0Y2hlcykpIHsKCiBpZiAoIUBqc29uX2RlY29kZSgneycuJG1hdGNoZXNbMl0uJ30nKSkgewpyZXR1cm4gZmFsc2U7Cn0KCiR0aGlzLT5jb250ZW50cyA9ICRtYXRjaGVzWzFdIC4gSnNvbkZpbGU6OmVuY29kZSgka2V5KS4nOiAnLiRjb250ZW50IC4gJG1hdGNoZXNbM107CgpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAoJHRoaXMtPnByZWdNYXRjaCgnI1tee1xzXShccyopXH0kIycsICR0aGlzLT5jb250ZW50cywgJG1hdGNoKSkgewokdGhpcy0+Y29udGVudHMgPSBwcmVnX3JlcGxhY2UoCicjJy4kbWF0Y2hbMV0uJ1x9JCMnLAphZGRjc2xhc2hlcygnLCcgLiAkdGhpcy0+bmV3bGluZSAuICR0aGlzLT5pbmRlbnQgLiBKc29uRmlsZTo6ZW5jb2RlKCRrZXkpLiAnOiAnLiAkY29udGVudCAuICR0aGlzLT5uZXdsaW5lIC4gJ30nLCAnXFwnKSwKJHRoaXMtPmNvbnRlbnRzCik7CgpyZXR1cm4gdHJ1ZTsKfQoKCiAkdGhpcy0+Y29udGVudHMgPSBwcmVnX3JlcGxhY2UoCicjXH0kIycsCmFkZGNzbGFzaGVzKCR0aGlzLT5pbmRlbnQgLiBKc29uRmlsZTo6ZW5jb2RlKCRrZXkpLiAnOiAnLiRjb250ZW50IC4gJHRoaXMtPm5ld2xpbmUgLiAnfScsICdcXCcpLAokdGhpcy0+Y29udGVudHMKKTsKCnJldHVybiB0cnVlOwp9CgpwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRkYXRhLCAkZGVwdGggPSAwKQp7CmlmIChpc19hcnJheSgkZGF0YSkpIHsKcmVzZXQoJGRhdGEpOwoKaWYgKGlzX251bWVyaWMoa2V5KCRkYXRhKSkpIHsKZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKSB7CiRkYXRhWyRrZXldID0gJHRoaXMtPmZvcm1hdCgkdmFsLCAkZGVwdGggKyAxKTsKfQoKcmV0dXJuICdbJy5pbXBsb2RlKCcsICcsICRkYXRhKS4nXSc7Cn0KCiRvdXQgPSAneycgLiAkdGhpcy0+bmV3bGluZTsKJGVsZW1zID0gYXJyYXkoKTsKZm9yZWFjaCAoJGRhdGEgYXMgJGtleSA9PiAkdmFsKSB7CiRlbGVtc1tdID0gc3RyX3JlcGVhdCgkdGhpcy0+aW5kZW50LCAkZGVwdGggKyAyKSAuIEpzb25GaWxlOjplbmNvZGUoJGtleSkuICc6ICcuJHRoaXMtPmZvcm1hdCgkdmFsLCAkZGVwdGggKyAxKTsKfQoKcmV0dXJuICRvdXQgLiBpbXBsb2RlKCcsJy4kdGhpcy0+bmV3bGluZSwgJGVsZW1zKSAuICR0aGlzLT5uZXdsaW5lIC4gc3RyX3JlcGVhdCgkdGhpcy0+aW5kZW50LCAkZGVwdGggKyAxKSAuICd9JzsKfQoKcmV0dXJuIEpzb25GaWxlOjplbmNvZGUoJGRhdGEpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGV0ZWN0SW5kZW50aW5nKCkKewppZiAoJHRoaXMtPnByZWdNYXRjaCgne14oXHMrKSJ9bScsICR0aGlzLT5jb250ZW50cywgJG1hdGNoKSkgewokdGhpcy0+aW5kZW50ID0gJG1hdGNoWzFdOwp9IGVsc2UgewokdGhpcy0+aW5kZW50ID0gJyAgICAnOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBwcmVnTWF0Y2goJHJlLCAkc3RyLCAmJG1hdGNoZXMgPSBhcnJheSgpKQp7CiRjb3VudCA9IHByZWdfbWF0Y2goJHJlLCAkc3RyLCAkbWF0Y2hlcyk7CgppZiAoJGNvdW50ID09PSBmYWxzZSkgewpzd2l0Y2ggKHByZWdfbGFzdF9lcnJvcigpKSB7CmNhc2UgUFJFR19OT19FUlJPUjoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gZXhlY3V0ZSByZWdleDogUFJFR19OT19FUlJPUicpOwpjYXNlIFBSRUdfSU5URVJOQUxfRVJST1I6CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgcmVnZXg6IFBSRUdfSU5URVJOQUxfRVJST1InKTsKY2FzZSBQUkVHX0JBQ0tUUkFDS19MSU1JVF9FUlJPUjoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gZXhlY3V0ZSByZWdleDogUFJFR19CQUNLVFJBQ0tfTElNSVRfRVJST1InKTsKY2FzZSBQUkVHX1JFQ1VSU0lPTl9MSU1JVF9FUlJPUjoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdGYWlsZWQgdG8gZXhlY3V0ZSByZWdleDogUFJFR19SRUNVUlNJT05fTElNSVRfRVJST1InKTsKY2FzZSBQUkVHX0JBRF9VVEY4X0VSUk9SOgp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ZhaWxlZCB0byBleGVjdXRlIHJlZ2V4OiBQUkVHX0JBRF9VVEY4X0VSUk9SJyk7CmNhc2UgUFJFR19CQURfVVRGOF9PRkZTRVRfRVJST1I6CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgcmVnZXg6IFBSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SJyk7CmRlZmF1bHQ6CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRmFpbGVkIHRvIGV4ZWN1dGUgcmVnZXg6IFVua25vd24gZXJyb3InKTsKfQp9CgpyZXR1cm4gJGNvdW50Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSnNvbjsKCnVzZSBKc29uU2NoZW1hXFZhbGlkYXRvcjsKdXNlIEpzb25TY2hlbWFcVXJpXFVyaVJldHJpZXZlcjsKdXNlIFNlbGRcSnNvbkxpbnRcSnNvblBhcnNlcjsKdXNlIFNlbGRcSnNvbkxpbnRcUGFyc2luZ0V4Y2VwdGlvbjsKdXNlIENvbXBvc2VyXFV0aWxcUmVtb3RlRmlsZXN5c3RlbTsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcVHJhbnNwb3J0RXhjZXB0aW9uOwoKCgoKCgoKY2xhc3MgSnNvbkZpbGUKewpjb25zdCBMQVhfU0NIRU1BID0gMTsKY29uc3QgU1RSSUNUX1NDSEVNQSA9IDI7Cgpjb25zdCBKU09OX1VORVNDQVBFRF9TTEFTSEVTID0gNjQ7CmNvbnN0IEpTT05fUFJFVFRZX1BSSU5UID0gMTI4Owpjb25zdCBKU09OX1VORVNDQVBFRF9VTklDT0RFID0gMjU2OwoKcHJpdmF0ZSAkcGF0aDsKcHJpdmF0ZSAkcmZzOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGF0aCwgUmVtb3RlRmlsZXN5c3RlbSAkcmZzID0gbnVsbCkKewokdGhpcy0+cGF0aCA9ICRwYXRoOwoKaWYgKG51bGwgPT09ICRyZnMgJiYgcHJlZ19tYXRjaCgne15odHRwcz86Ly99aScsICRwYXRoKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignaHR0cCB1cmxzIHJlcXVpcmUgYSBSZW1vdGVGaWxlc3lzdGVtIGluc3RhbmNlIHRvIGJlIHBhc3NlZCcpOwp9CiR0aGlzLT5yZnMgPSAkcmZzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGF0aCgpCnsKcmV0dXJuICR0aGlzLT5wYXRoOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBleGlzdHMoKQp7CnJldHVybiBpc19maWxlKCR0aGlzLT5wYXRoKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlYWQoKQp7CnRyeSB7CmlmICgkdGhpcy0+cmZzKSB7CiRqc29uID0gJHRoaXMtPnJmcy0+Z2V0Q29udGVudHMoJHRoaXMtPnBhdGgsICR0aGlzLT5wYXRoLCBmYWxzZSk7Cn0gZWxzZSB7CiRqc29uID0gZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPnBhdGgpOwp9Cn0gY2F0Y2ggKFRyYW5zcG9ydEV4Y2VwdGlvbiAkZSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJGUtPmdldE1lc3NhZ2UoKSwgMCwgJGUpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IHJlYWQgJy4kdGhpcy0+cGF0aC4iXG5cbiIuJGUtPmdldE1lc3NhZ2UoKSk7Cn0KCnJldHVybiBzdGF0aWM6OnBhcnNlSnNvbigkanNvbiwgJHRoaXMtPnBhdGgpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHdyaXRlKGFycmF5ICRoYXNoLCAkb3B0aW9ucyA9IDQ0OCkKewokZGlyID0gZGlybmFtZSgkdGhpcy0+cGF0aCk7CmlmICghaXNfZGlyKCRkaXIpKSB7CmlmIChmaWxlX2V4aXN0cygkZGlyKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigKJGRpci4nIGV4aXN0cyBhbmQgaXMgbm90IGEgZGlyZWN0b3J5LicKKTsKfQppZiAoIUBta2RpcigkZGlyLCAwNzc3LCB0cnVlKSkgewp0aHJvdyBuZXcgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbigKJGRpci4nIGRvZXMgbm90IGV4aXN0IGFuZCBjb3VsZCBub3QgYmUgY3JlYXRlZC4nCik7Cn0KfQoKJHJldHJpZXMgPSAzOwp3aGlsZSAoJHJldHJpZXMtLSkgewp0cnkgewpmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+cGF0aCwgc3RhdGljOjplbmNvZGUoJGhhc2gsICRvcHRpb25zKS4gKCRvcHRpb25zICYgc2VsZjo6SlNPTl9QUkVUVFlfUFJJTlQgPyAiXG4iIDogJycpKTsKYnJlYWs7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKaWYgKCRyZXRyaWVzKSB7CnVzbGVlcCg1MDAwMDApOwpjb250aW51ZTsKfQoKdGhyb3cgJGU7Cn0KfQp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlU2NoZW1hKCRzY2hlbWEgPSBzZWxmOjpTVFJJQ1RfU0NIRU1BKQp7CiRjb250ZW50ID0gZmlsZV9nZXRfY29udGVudHMoJHRoaXMtPnBhdGgpOwokZGF0YSA9IGpzb25fZGVjb2RlKCRjb250ZW50KTsKCmlmIChudWxsID09PSAkZGF0YSAmJiAnbnVsbCcgIT09ICRjb250ZW50KSB7CnNlbGY6OnZhbGlkYXRlU3ludGF4KCRjb250ZW50LCAkdGhpcy0+cGF0aCk7Cn0KCiRzY2hlbWFGaWxlID0gX19ESVJfXyAuICcvLi4vLi4vLi4vcmVzL2NvbXBvc2VyLXNjaGVtYS5qc29uJzsKJHNjaGVtYURhdGEgPSBqc29uX2RlY29kZShmaWxlX2dldF9jb250ZW50cygkc2NoZW1hRmlsZSkpOwoKaWYgKCRzY2hlbWEgPT09IHNlbGY6OkxBWF9TQ0hFTUEpIHsKCiAkc2NoZW1hRGF0YS0+YWRkaXRpb25hbFByb3BlcnRpZXMgPSAob2JqZWN0KSBhcnJheSgndHlwZScgPT4gYXJyYXkoJ29iamVjdCcsICdzdHJpbmcnLCAnYXJyYXknLCAnbnVtYmVyJywgJ251bGwnLCAnYm9vbGVhbicpKTsKJHNjaGVtYURhdGEtPnByb3BlcnRpZXMtPm5hbWUtPnJlcXVpcmVkID0gZmFsc2U7CiRzY2hlbWFEYXRhLT5wcm9wZXJ0aWVzLT5kZXNjcmlwdGlvbi0+cmVxdWlyZWQgPSBmYWxzZTsKfQoKJHZhbGlkYXRvciA9IG5ldyBWYWxpZGF0b3IoKTsKJHZhbGlkYXRvci0+Y2hlY2soJGRhdGEsICRzY2hlbWFEYXRhKTsKCgoKaWYgKCEkdmFsaWRhdG9yLT5pc1ZhbGlkKCkpIHsKJGVycm9ycyA9IGFycmF5KCk7CmZvcmVhY2ggKChhcnJheSkgJHZhbGlkYXRvci0+Z2V0RXJyb3JzKCkgYXMgJGVycm9yKSB7CiRlcnJvcnNbXSA9ICgkZXJyb3JbJ3Byb3BlcnR5J10gPyAkZXJyb3JbJ3Byb3BlcnR5J10uJyA6ICcgOiAnJykuJGVycm9yWydtZXNzYWdlJ107Cn0KdGhyb3cgbmV3IEpzb25WYWxpZGF0aW9uRXhjZXB0aW9uKCciJy4kdGhpcy0+cGF0aC4nIiBkb2VzIG5vdCBtYXRjaCB0aGUgZXhwZWN0ZWQgSlNPTiBzY2hlbWEnLCAkZXJyb3JzKTsKfQoKcmV0dXJuIHRydWU7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZSgkZGF0YSwgJG9wdGlvbnMgPSA0NDgpCnsKaWYgKHZlcnNpb25fY29tcGFyZShQSFBfVkVSU0lPTiwgJzUuNCcsICc+PScpKSB7CnJldHVybiBqc29uX2VuY29kZSgkZGF0YSwgJG9wdGlvbnMpOwp9CgokanNvbiA9IGpzb25fZW5jb2RlKCRkYXRhKTsKCiRwcmV0dHlQcmludCA9IChib29sKSAoJG9wdGlvbnMgJiBzZWxmOjpKU09OX1BSRVRUWV9QUklOVCk7CiR1bmVzY2FwZVVuaWNvZGUgPSAoYm9vbCkgKCRvcHRpb25zICYgc2VsZjo6SlNPTl9VTkVTQ0FQRURfVU5JQ09ERSk7CiR1bmVzY2FwZVNsYXNoZXMgPSAoYm9vbCkgKCRvcHRpb25zICYgc2VsZjo6SlNPTl9VTkVTQ0FQRURfU0xBU0hFUyk7CgppZiAoISRwcmV0dHlQcmludCAmJiAhJHVuZXNjYXBlVW5pY29kZSAmJiAhJHVuZXNjYXBlU2xhc2hlcykgewpyZXR1cm4gJGpzb247Cn0KCiRyZXN1bHQgPSBKc29uRm9ybWF0dGVyOjpmb3JtYXQoJGpzb24sICR1bmVzY2FwZVVuaWNvZGUsICR1bmVzY2FwZVNsYXNoZXMpOwoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZUpzb24oJGpzb24sICRmaWxlID0gbnVsbCkKewokZGF0YSA9IGpzb25fZGVjb2RlKCRqc29uLCB0cnVlKTsKaWYgKG51bGwgPT09ICRkYXRhICYmIEpTT05fRVJST1JfTk9ORSAhPT0ganNvbl9sYXN0X2Vycm9yKCkpIHsKc2VsZjo6dmFsaWRhdGVTeW50YXgoJGpzb24sICRmaWxlKTsKfQoKcmV0dXJuICRkYXRhOwp9CgoKCgoKCgoKCgoKcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiB2YWxpZGF0ZVN5bnRheCgkanNvbiwgJGZpbGUgPSBudWxsKQp7CiRwYXJzZXIgPSBuZXcgSnNvblBhcnNlcigpOwokcmVzdWx0ID0gJHBhcnNlci0+bGludCgkanNvbik7CmlmIChudWxsID09PSAkcmVzdWx0KSB7CmlmIChkZWZpbmVkKCdKU09OX0VSUk9SX1VURjgnKSAmJiBKU09OX0VSUk9SX1VURjggPT09IGpzb25fbGFzdF9lcnJvcigpKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCciJy4kZmlsZS4nIiBpcyBub3QgVVRGLTgsIGNvdWxkIG5vdCBwYXJzZSBhcyBKU09OJyk7Cn0KCnJldHVybiB0cnVlOwp9Cgp0aHJvdyBuZXcgUGFyc2luZ0V4Y2VwdGlvbignIicuJGZpbGUuJyIgZG9lcyBub3QgY29udGFpbiB2YWxpZCBKU09OJy4iXG4iLiRyZXN1bHQtPmdldE1lc3NhZ2UoKSwgJHJlc3VsdC0+Z2V0RGV0YWlscygpKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXEpzb247CgoKCgoKCgoKCmNsYXNzIEpzb25Gb3JtYXR0ZXIKewoKCgoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXQoJGpzb24sICR1bmVzY2FwZVVuaWNvZGUsICR1bmVzY2FwZVNsYXNoZXMpCnsKJHJlc3VsdCA9ICcnOwokcG9zID0gMDsKJHN0ckxlbiA9IHN0cmxlbigkanNvbik7CiRpbmRlbnRTdHIgPSAnICAgICc7CiRuZXdMaW5lID0gIlxuIjsKJG91dE9mUXVvdGVzID0gdHJ1ZTsKJGJ1ZmZlciA9ICcnOwokbm9lc2NhcGUgPSB0cnVlOwoKZm9yICgkaSA9IDA7ICRpIDwgJHN0ckxlbjsgJGkrKykgewoKICRjaGFyID0gc3Vic3RyKCRqc29uLCAkaSwgMSk7CgoKIGlmICgnIicgPT09ICRjaGFyICYmICRub2VzY2FwZSkgewokb3V0T2ZRdW90ZXMgPSAhJG91dE9mUXVvdGVzOwp9CgppZiAoISRvdXRPZlF1b3RlcykgewokYnVmZmVyIC49ICRjaGFyOwokbm9lc2NhcGUgPSAnXFwnID09PSAkY2hhciA/ICEkbm9lc2NhcGUgOiB0cnVlOwpjb250aW51ZTsKfSBlbHNlaWYgKCcnICE9PSAkYnVmZmVyKSB7CmlmICgkdW5lc2NhcGVTbGFzaGVzKSB7CiRidWZmZXIgPSBzdHJfcmVwbGFjZSgnXFwvJywgJy8nLCAkYnVmZmVyKTsKfQoKaWYgKCR1bmVzY2FwZVVuaWNvZGUgJiYgZnVuY3Rpb25fZXhpc3RzKCdtYl9jb252ZXJ0X2VuY29kaW5nJykpIHsKCiAkYnVmZmVyID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcvKFxcXFwrKXUoWzAtOWEtZl17NH0pL2knLCBmdW5jdGlvbigkbWF0Y2gpIHsKJGwgPSBzdHJsZW4oJG1hdGNoWzFdKTsKCmlmICgkbCAlIDIpIHsKcmV0dXJuIHN0cl9yZXBlYXQoJ1xcJywgJGwgLSAxKSAuIG1iX2NvbnZlcnRfZW5jb2RpbmcoCnBhY2soJ0gqJywgJG1hdGNoWzJdKSwKJ1VURi04JywKJ1VDUy0yQkUnCik7Cn0KcmV0dXJuICRtYXRjaFswXTsKfSwgJGJ1ZmZlcik7Cn0KCiRyZXN1bHQgLj0gJGJ1ZmZlci4kY2hhcjsKJGJ1ZmZlciA9ICcnOwpjb250aW51ZTsKfQoKaWYgKCc6JyA9PT0gJGNoYXIpIHsKCiAkY2hhciAuPSAnICc7Cn0gZWxzZWlmICgoJ30nID09PSAkY2hhciB8fCAnXScgPT09ICRjaGFyKSkgewokcG9zLS07CiRwcmV2Q2hhciA9IHN1YnN0cigkanNvbiwgJGkgLSAxLCAxKTsKCmlmICgneycgIT09ICRwcmV2Q2hhciAmJiAnWycgIT09ICRwcmV2Q2hhcikgewoKIAogJHJlc3VsdCAuPSAkbmV3TGluZTsKZm9yICgkaiA9IDA7ICRqIDwgJHBvczsgJGorKykgewokcmVzdWx0IC49ICRpbmRlbnRTdHI7Cn0KfSBlbHNlIHsKCiAkcmVzdWx0ID0gcnRyaW0oJHJlc3VsdCkuIlxuXG4iLiRpbmRlbnRTdHI7Cn0KfQoKJHJlc3VsdCAuPSAkY2hhcjsKCgogCiBpZiAoJywnID09PSAkY2hhciB8fCAneycgPT09ICRjaGFyIHx8ICdbJyA9PT0gJGNoYXIpIHsKJHJlc3VsdCAuPSAkbmV3TGluZTsKCmlmICgneycgPT09ICRjaGFyIHx8ICdbJyA9PT0gJGNoYXIpIHsKJHBvcysrOwp9Cgpmb3IgKCRqID0gMDsgJGogPCAkcG9zOyAkaisrKSB7CiRyZXN1bHQgLj0gJGluZGVudFN0cjsKfQp9Cn0KCnJldHVybiAkcmVzdWx0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSnNvbjsKCnVzZSBFeGNlcHRpb247CgoKCgpjbGFzcyBKc29uVmFsaWRhdGlvbkV4Y2VwdGlvbiBleHRlbmRzIEV4Y2VwdGlvbgp7CnByb3RlY3RlZCAkZXJyb3JzOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRtZXNzYWdlLCAkZXJyb3JzID0gYXJyYXkoKSkKewokdGhpcy0+ZXJyb3JzID0gJGVycm9yczsKcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKQp7CnJldHVybiAkdGhpcy0+ZXJyb3JzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXI7Cgp1c2UgQ29tcG9zZXJcQ29uZmlnXENvbmZpZ1NvdXJjZUludGVyZmFjZTsKCgoKCmNsYXNzIENvbmZpZwp7CnB1YmxpYyBzdGF0aWMgJGRlZmF1bHRDb25maWcgPSBhcnJheSgKJ3Byb2Nlc3MtdGltZW91dCcgPT4gMzAwLAondXNlLWluY2x1ZGUtcGF0aCcgPT4gZmFsc2UsCidwcmVmZXJyZWQtaW5zdGFsbCcgPT4gJ2F1dG8nLAonbm90aWZ5LW9uLWluc3RhbGwnID0+IHRydWUsCidnaXRodWItcHJvdG9jb2xzJyA9PiBhcnJheSgnZ2l0JywgJ2h0dHBzJywgJ3NzaCcpLAondmVuZG9yLWRpcicgPT4gJ3ZlbmRvcicsCidiaW4tZGlyJyA9PiAneyR2ZW5kb3ItZGlyfS9iaW4nLAonY2FjaGUtZGlyJyA9PiAneyRob21lfS9jYWNoZScsCidjYWNoZS1maWxlcy1kaXInID0+ICd7JGNhY2hlLWRpcn0vZmlsZXMnLAonY2FjaGUtcmVwby1kaXInID0+ICd7JGNhY2hlLWRpcn0vcmVwbycsCidjYWNoZS12Y3MtZGlyJyA9PiAneyRjYWNoZS1kaXJ9L3ZjcycsCidjYWNoZS10dGwnID0+IDE1NTUyMDAwLCAKICdjYWNoZS1maWxlcy10dGwnID0+IG51bGwsIAogJ2NhY2hlLWZpbGVzLW1heHNpemUnID0+ICczMDBNaUInLAonZGlzY2FyZC1jaGFuZ2VzJyA9PiBmYWxzZSwKJ2F1dG9sb2FkZXItc3VmZml4JyA9PiBudWxsLAonb3B0aW1pemUtYXV0b2xvYWRlcicgPT4gZmFsc2UsCidwcmVwZW5kLWF1dG9sb2FkZXInID0+IHRydWUsCidnaXRodWItZG9tYWlucycgPT4gYXJyYXkoJ2dpdGh1Yi5jb20nKSwKKTsKCnB1YmxpYyBzdGF0aWMgJGRlZmF1bHRSZXBvc2l0b3JpZXMgPSBhcnJheSgKJ3BhY2thZ2lzdCcgPT4gYXJyYXkoCid0eXBlJyA9PiAnY29tcG9zZXInLAondXJsJyA9PiAnaHR0cHM/Oi8vcGFja2FnaXN0Lm9yZycsCidhbGxvd19zc2xfZG93bmdyYWRlJyA9PiB0cnVlLAopCik7Cgpwcml2YXRlICRjb25maWc7CnByaXZhdGUgJHJlcG9zaXRvcmllczsKcHJpdmF0ZSAkY29uZmlnU291cmNlOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKewoKICR0aGlzLT5jb25maWcgPSBzdGF0aWM6OiRkZWZhdWx0Q29uZmlnOwokdGhpcy0+cmVwb3NpdG9yaWVzID0gc3RhdGljOjokZGVmYXVsdFJlcG9zaXRvcmllczsKfQoKcHVibGljIGZ1bmN0aW9uIHNldENvbmZpZ1NvdXJjZShDb25maWdTb3VyY2VJbnRlcmZhY2UgJHNvdXJjZSkKewokdGhpcy0+Y29uZmlnU291cmNlID0gJHNvdXJjZTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldENvbmZpZ1NvdXJjZSgpCnsKcmV0dXJuICR0aGlzLT5jb25maWdTb3VyY2U7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIG1lcmdlKGFycmF5ICRjb25maWcpCnsKCiBpZiAoIWVtcHR5KCRjb25maWdbJ2NvbmZpZyddKSAmJiBpc19hcnJheSgkY29uZmlnWydjb25maWcnXSkpIHsKZm9yZWFjaCAoJGNvbmZpZ1snY29uZmlnJ10gYXMgJGtleSA9PiAkdmFsKSB7CmlmIChpbl9hcnJheSgka2V5LCBhcnJheSgnZ2l0aHViLW9hdXRoJykpICYmIGlzc2V0KCR0aGlzLT5jb25maWdbJGtleV0pKSB7CiR0aGlzLT5jb25maWdbJGtleV0gPSBhcnJheV9tZXJnZSgkdGhpcy0+Y29uZmlnWyRrZXldLCAkdmFsKTsKfSBlbHNlIHsKJHRoaXMtPmNvbmZpZ1ska2V5XSA9ICR2YWw7Cn0KfQp9CgppZiAoIWVtcHR5KCRjb25maWdbJ3JlcG9zaXRvcmllcyddKSAmJiBpc19hcnJheSgkY29uZmlnWydyZXBvc2l0b3JpZXMnXSkpIHsKJHRoaXMtPnJlcG9zaXRvcmllcyA9IGFycmF5X3JldmVyc2UoJHRoaXMtPnJlcG9zaXRvcmllcywgdHJ1ZSk7CiRuZXdSZXBvcyA9IGFycmF5X3JldmVyc2UoJGNvbmZpZ1sncmVwb3NpdG9yaWVzJ10sIHRydWUpOwpmb3JlYWNoICgkbmV3UmVwb3MgYXMgJG5hbWUgPT4gJHJlcG9zaXRvcnkpIHsKCiBpZiAoZmFsc2UgPT09ICRyZXBvc2l0b3J5KSB7CnVuc2V0KCR0aGlzLT5yZXBvc2l0b3JpZXNbJG5hbWVdKTsKY29udGludWU7Cn0KCgogaWYgKDEgPT09IGNvdW50KCRyZXBvc2l0b3J5KSAmJiBmYWxzZSA9PT0gY3VycmVudCgkcmVwb3NpdG9yeSkpIHsKdW5zZXQoJHRoaXMtPnJlcG9zaXRvcmllc1trZXkoJHJlcG9zaXRvcnkpXSk7CmNvbnRpbnVlOwp9CgoKIGlmIChpc19pbnQoJG5hbWUpKSB7CiR0aGlzLT5yZXBvc2l0b3JpZXNbXSA9ICRyZXBvc2l0b3J5Owp9IGVsc2UgewokdGhpcy0+cmVwb3NpdG9yaWVzWyRuYW1lXSA9ICRyZXBvc2l0b3J5Owp9Cn0KJHRoaXMtPnJlcG9zaXRvcmllcyA9IGFycmF5X3JldmVyc2UoJHRoaXMtPnJlcG9zaXRvcmllcywgdHJ1ZSk7Cn0KfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlcG9zaXRvcmllcygpCnsKcmV0dXJuICR0aGlzLT5yZXBvc2l0b3JpZXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0KCRrZXkpCnsKc3dpdGNoICgka2V5KSB7CmNhc2UgJ3ZlbmRvci1kaXInOgpjYXNlICdiaW4tZGlyJzoKY2FzZSAncHJvY2Vzcy10aW1lb3V0JzoKY2FzZSAnY2FjaGUtZGlyJzoKY2FzZSAnY2FjaGUtZmlsZXMtZGlyJzoKY2FzZSAnY2FjaGUtcmVwby1kaXInOgpjYXNlICdjYWNoZS12Y3MtZGlyJzoKCiAkZW52ID0gJ0NPTVBPU0VSXycgLiBzdHJ0b3VwcGVyKHN0cnRyKCRrZXksICctJywgJ18nKSk7CgpyZXR1cm4gcnRyaW0oJHRoaXMtPnByb2Nlc3MoZ2V0ZW52KCRlbnYpID86ICR0aGlzLT5jb25maWdbJGtleV0pLCAnL1xcJyk7CgpjYXNlICdjYWNoZS10dGwnOgpyZXR1cm4gKGludCkgJHRoaXMtPmNvbmZpZ1ska2V5XTsKCmNhc2UgJ2NhY2hlLWZpbGVzLW1heHNpemUnOgppZiAoIXByZWdfbWF0Y2goJy9eXHMqKFswLTkuXSspXHMqKD86KFtrbWddKSg/Omk/Yik/KT9ccyokL2knLCAkdGhpcy0+Y29uZmlnWyRrZXldLCAkbWF0Y2hlcykpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAoiQ291bGQgbm90IHBhcnNlIHRoZSB2YWx1ZSBvZiAnY2FjaGUtZmlsZXMtbWF4c2l6ZSc6IHskdGhpcy0+Y29uZmlnWyRrZXldfSIKKTsKfQokc2l6ZSA9ICRtYXRjaGVzWzFdOwppZiAoaXNzZXQoJG1hdGNoZXNbMl0pKSB7CnN3aXRjaCAoc3RydG9sb3dlcigkbWF0Y2hlc1syXSkpIHsKY2FzZSAnZyc6CiRzaXplICo9IDEwMjQ7CgogY2FzZSAnbSc6CiRzaXplICo9IDEwMjQ7CgogY2FzZSAnayc6CiRzaXplICo9IDEwMjQ7CmJyZWFrOwp9Cn0KCnJldHVybiAkc2l6ZTsKCmNhc2UgJ2NhY2hlLWZpbGVzLXR0bCc6CmlmIChpc3NldCgkdGhpcy0+Y29uZmlnWyRrZXldKSkgewpyZXR1cm4gKGludCkgJHRoaXMtPmNvbmZpZ1ska2V5XTsKfQoKcmV0dXJuIChpbnQpICR0aGlzLT5jb25maWdbJ2NhY2hlLXR0bCddOwoKY2FzZSAnaG9tZSc6CnJldHVybiBydHJpbSgkdGhpcy0+cHJvY2VzcygkdGhpcy0+Y29uZmlnWyRrZXldKSwgJy9cXCcpOwoKY2FzZSAnZGlzY2FyZC1jaGFuZ2VzJzoKaWYgKCRlbnYgPSBnZXRlbnYoJ0NPTVBPU0VSX0RJU0NBUkRfQ0hBTkdFUycpKSB7CmlmICghaW5fYXJyYXkoJGVudiwgYXJyYXkoJ3N0YXNoJywgJ3RydWUnLCAnZmFsc2UnLCAnMScsICcwJyksIHRydWUpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigKIkludmFsaWQgdmFsdWUgZm9yIENPTVBPU0VSX0RJU0NBUkRfQ0hBTkdFUzogeyRlbnZ9LiBFeHBlY3RlZCAxLCAwLCB0cnVlLCBmYWxzZSBvciBzdGFzaCIKKTsKfQppZiAoJ3N0YXNoJyA9PT0gJGVudikgewpyZXR1cm4gJ3N0YXNoJzsKfQoKCiByZXR1cm4gJGVudiAhPT0gJ2ZhbHNlJyAmJiAoYm9vbCkgJGVudjsKfQoKaWYgKCFpbl9hcnJheSgkdGhpcy0+Y29uZmlnWyRrZXldLCBhcnJheSh0cnVlLCBmYWxzZSwgJ3N0YXNoJyksIHRydWUpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigKIkludmFsaWQgdmFsdWUgZm9yICdkaXNjYXJkLWNoYW5nZXMnOiB7JHRoaXMtPmNvbmZpZ1ska2V5XX0uIEV4cGVjdGVkIHRydWUsIGZhbHNlIG9yIHN0YXNoIgopOwp9CgpyZXR1cm4gJHRoaXMtPmNvbmZpZ1ska2V5XTsKCmNhc2UgJ2dpdGh1Yi1wcm90b2NvbHMnOgppZiAocmVzZXQoJHRoaXMtPmNvbmZpZ1snZ2l0aHViLXByb3RvY29scyddKSA9PT0gJ2h0dHAnKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhlIGh0dHAgcHJvdG9jb2wgZm9yIGdpdGh1YiBpcyBub3QgYXZhaWxhYmxlIGFueW1vcmUsIHVwZGF0ZSB5b3VyIGNvbmZpZ1wncyBnaXRodWItcHJvdG9jb2xzIHRvIHVzZSAiaHR0cHMiLCAiZ2l0IiBvciAic3NoIicpOwp9CgpyZXR1cm4gJHRoaXMtPmNvbmZpZ1ska2V5XTsKCmRlZmF1bHQ6CmlmICghaXNzZXQoJHRoaXMtPmNvbmZpZ1ska2V5XSkpIHsKcmV0dXJuIG51bGw7Cn0KCnJldHVybiAkdGhpcy0+cHJvY2VzcygkdGhpcy0+Y29uZmlnWyRrZXldKTsKfQp9CgpwdWJsaWMgZnVuY3Rpb24gYWxsKCkKewokYWxsID0gYXJyYXkoCidyZXBvc2l0b3JpZXMnID0+ICR0aGlzLT5nZXRSZXBvc2l0b3JpZXMoKSwKKTsKZm9yZWFjaCAoYXJyYXlfa2V5cygkdGhpcy0+Y29uZmlnKSBhcyAka2V5KSB7CiRhbGxbJ2NvbmZpZyddWyRrZXldID0gJHRoaXMtPmdldCgka2V5KTsKfQoKcmV0dXJuICRhbGw7Cn0KCnB1YmxpYyBmdW5jdGlvbiByYXcoKQp7CnJldHVybiBhcnJheSgKJ3JlcG9zaXRvcmllcycgPT4gJHRoaXMtPmdldFJlcG9zaXRvcmllcygpLAonY29uZmlnJyA9PiAkdGhpcy0+Y29uZmlnLAopOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzKCRrZXkpCnsKcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJGtleSwgJHRoaXMtPmNvbmZpZyk7Cn0KCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcHJvY2VzcygkdmFsdWUpCnsKJGNvbmZpZyA9ICR0aGlzOwoKaWYgKCFpc19zdHJpbmcoJHZhbHVlKSkgewpyZXR1cm4gJHZhbHVlOwp9CgpyZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCcjXHtcJCguKylcfSMnLCBmdW5jdGlvbiAoJG1hdGNoKSB1c2UgKCRjb25maWcpIHsKcmV0dXJuICRjb25maWctPmdldCgkbWF0Y2hbMV0pOwp9LCAkdmFsdWUpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcRXZlbnREaXNwYXRjaGVyOwoKCgoKCgoKCgoKCgoKaW50ZXJmYWNlIEV2ZW50U3Vic2NyaWJlckludGVyZmFjZQp7CgoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0U3Vic2NyaWJlZEV2ZW50cygpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlcjsKCgoKCgoKY2xhc3MgRXZlbnQKewoKCgpwcm90ZWN0ZWQgJG5hbWU7CgoKCgpwcml2YXRlICRwcm9wYWdhdGlvblN0b3BwZWQgPSBmYWxzZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lKQp7CiR0aGlzLT5uYW1lID0gJG5hbWU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAkdGhpcy0+bmFtZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNQcm9wYWdhdGlvblN0b3BwZWQoKQp7CnJldHVybiAkdGhpcy0+cHJvcGFnYXRpb25TdG9wcGVkOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc3RvcFByb3BhZ2F0aW9uKCkKewokdGhpcy0+cHJvcGFnYXRpb25TdG9wcGVkID0gdHJ1ZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXEV2ZW50RGlzcGF0Y2hlcjsKCnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvblxPcGVyYXRpb25JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxTY3JpcHQ7CnVzZSBDb21wb3NlclxTY3JpcHRcQ29tbWFuZEV2ZW50Owp1c2UgQ29tcG9zZXJcU2NyaXB0XFBhY2thZ2VFdmVudDsKdXNlIENvbXBvc2VyXFV0aWxcUHJvY2Vzc0V4ZWN1dG9yOwoKCgoKCgoKCgoKCgoKCmNsYXNzIEV2ZW50RGlzcGF0Y2hlcgp7CnByb3RlY3RlZCAkY29tcG9zZXI7CnByb3RlY3RlZCAkaW87CnByb3RlY3RlZCAkbG9hZGVyOwpwcm90ZWN0ZWQgJHByb2Nlc3M7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbXBvc2VyICRjb21wb3NlciwgSU9JbnRlcmZhY2UgJGlvLCBQcm9jZXNzRXhlY3V0b3IgJHByb2Nlc3MgPSBudWxsKQp7CiR0aGlzLT5jb21wb3NlciA9ICRjb21wb3NlcjsKJHRoaXMtPmlvID0gJGlvOwokdGhpcy0+cHJvY2VzcyA9ICRwcm9jZXNzID86IG5ldyBQcm9jZXNzRXhlY3V0b3IoJGlvKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGRpc3BhdGNoKCRldmVudE5hbWUsIEV2ZW50ICRldmVudCA9IG51bGwpCnsKaWYgKG51bGwgPT0gJGV2ZW50KSB7CiRldmVudCA9IG5ldyBFdmVudCgkZXZlbnROYW1lKTsKfQoKJHRoaXMtPmRvRGlzcGF0Y2goJGV2ZW50KTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGRpc3BhdGNoU2NyaXB0KCRldmVudE5hbWUsICRkZXZNb2RlID0gZmFsc2UpCnsKJHRoaXMtPmRvRGlzcGF0Y2gobmV3IFNjcmlwdFxFdmVudCgkZXZlbnROYW1lLCAkdGhpcy0+Y29tcG9zZXIsICR0aGlzLT5pbywgJGRldk1vZGUpKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBkaXNwYXRjaFBhY2thZ2VFdmVudCgkZXZlbnROYW1lLCAkZGV2TW9kZSwgT3BlcmF0aW9uSW50ZXJmYWNlICRvcGVyYXRpb24pCnsKJHRoaXMtPmRvRGlzcGF0Y2gobmV3IFBhY2thZ2VFdmVudCgkZXZlbnROYW1lLCAkdGhpcy0+Y29tcG9zZXIsICR0aGlzLT5pbywgJGRldk1vZGUsICRvcGVyYXRpb24pKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGRpc3BhdGNoQ29tbWFuZEV2ZW50KCRldmVudE5hbWUsICRkZXZNb2RlKQp7CiR0aGlzLT5kb0Rpc3BhdGNoKG5ldyBDb21tYW5kRXZlbnQoJGV2ZW50TmFtZSwgJHRoaXMtPmNvbXBvc2VyLCAkdGhpcy0+aW8sICRkZXZNb2RlKSk7Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZG9EaXNwYXRjaChFdmVudCAkZXZlbnQpCnsKJGxpc3RlbmVycyA9ICR0aGlzLT5nZXRMaXN0ZW5lcnMoJGV2ZW50KTsKCmZvcmVhY2ggKCRsaXN0ZW5lcnMgYXMgJGNhbGxhYmxlKSB7CmlmICghaXNfc3RyaW5nKCRjYWxsYWJsZSkgJiYgaXNfY2FsbGFibGUoJGNhbGxhYmxlKSkgewpjYWxsX3VzZXJfZnVuYygkY2FsbGFibGUsICRldmVudCk7Cn0gZWxzZWlmICgkdGhpcy0+aXNQaHBTY3JpcHQoJGNhbGxhYmxlKSkgewokY2xhc3NOYW1lID0gc3Vic3RyKCRjYWxsYWJsZSwgMCwgc3RycG9zKCRjYWxsYWJsZSwgJzo6JykpOwokbWV0aG9kTmFtZSA9IHN1YnN0cigkY2FsbGFibGUsIHN0cnBvcygkY2FsbGFibGUsICc6OicpICsgMik7CgppZiAoIWNsYXNzX2V4aXN0cygkY2xhc3NOYW1lKSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5DbGFzcyAnLiRjbGFzc05hbWUuJyBpcyBub3QgYXV0b2xvYWRhYmxlLCBjYW4gbm90IGNhbGwgJy4kZXZlbnQtPmdldE5hbWUoKS4nIHNjcmlwdDwvd2FybmluZz4nKTsKY29udGludWU7Cn0KaWYgKCFpc19jYWxsYWJsZSgkY2FsbGFibGUpKSB7CiR0aGlzLT5pby0+d3JpdGUoJzx3YXJuaW5nPk1ldGhvZCAnLiRjYWxsYWJsZS4nIGlzIG5vdCBjYWxsYWJsZSwgY2FuIG5vdCBjYWxsICcuJGV2ZW50LT5nZXROYW1lKCkuJyBzY3JpcHQ8L3dhcm5pbmc+Jyk7CmNvbnRpbnVlOwp9Cgp0cnkgewokdGhpcy0+ZXhlY3V0ZUV2ZW50UGhwU2NyaXB0KCRjbGFzc05hbWUsICRtZXRob2ROYW1lLCAkZXZlbnQpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiRtZXNzYWdlID0gIlNjcmlwdCAlcyBoYW5kbGluZyB0aGUgJXMgZXZlbnQgdGVybWluYXRlZCB3aXRoIGFuIGV4Y2VwdGlvbiI7CiR0aGlzLT5pby0+d3JpdGUoJzxlcnJvcj4nLnNwcmludGYoJG1lc3NhZ2UsICRjYWxsYWJsZSwgJGV2ZW50LT5nZXROYW1lKCkpLic8L2Vycm9yPicpOwp0aHJvdyAkZTsKfQp9IGVsc2UgewppZiAoMCAhPT0gKCRleGl0Q29kZSA9ICR0aGlzLT5wcm9jZXNzLT5leGVjdXRlKCRjYWxsYWJsZSkpKSB7CiRldmVudC0+Z2V0SU8oKS0+d3JpdGUoc3ByaW50ZignPGVycm9yPlNjcmlwdCAlcyBoYW5kbGluZyB0aGUgJXMgZXZlbnQgcmV0dXJuZWQgd2l0aCBhbiBlcnJvcjwvZXJyb3I+JywgJGNhbGxhYmxlLCAkZXZlbnQtPmdldE5hbWUoKSkpOwoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdFcnJvciBPdXRwdXQ6ICcuJHRoaXMtPnByb2Nlc3MtPmdldEVycm9yT3V0cHV0KCksICRleGl0Q29kZSk7Cn0KfQoKaWYgKCRldmVudC0+aXNQcm9wYWdhdGlvblN0b3BwZWQoKSkgewpicmVhazsKfQp9Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGV4ZWN1dGVFdmVudFBocFNjcmlwdCgkY2xhc3NOYW1lLCAkbWV0aG9kTmFtZSwgRXZlbnQgJGV2ZW50KQp7CiRjbGFzc05hbWU6OiRtZXRob2ROYW1lKCRldmVudCk7Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gYWRkTGlzdGVuZXIoJGV2ZW50TmFtZSwgJGxpc3RlbmVyLCAkcHJpb3JpdHkgPSAwKQp7CiR0aGlzLT5saXN0ZW5lcnNbJGV2ZW50TmFtZV1bJHByaW9yaXR5XVtdID0gJGxpc3RlbmVyOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFN1YnNjcmliZXIoRXZlbnRTdWJzY3JpYmVySW50ZXJmYWNlICRzdWJzY3JpYmVyKQp7CmZvcmVhY2ggKCRzdWJzY3JpYmVyLT5nZXRTdWJzY3JpYmVkRXZlbnRzKCkgYXMgJGV2ZW50TmFtZSA9PiAkcGFyYW1zKSB7CmlmIChpc19zdHJpbmcoJHBhcmFtcykpIHsKJHRoaXMtPmFkZExpc3RlbmVyKCRldmVudE5hbWUsIGFycmF5KCRzdWJzY3JpYmVyLCAkcGFyYW1zKSk7Cn0gZWxzZWlmIChpc19zdHJpbmcoJHBhcmFtc1swXSkpIHsKJHRoaXMtPmFkZExpc3RlbmVyKCRldmVudE5hbWUsIGFycmF5KCRzdWJzY3JpYmVyLCAkcGFyYW1zWzBdKSwgaXNzZXQoJHBhcmFtc1sxXSkgPyAkcGFyYW1zWzFdIDogMCk7Cn0gZWxzZSB7CmZvcmVhY2ggKCRwYXJhbXMgYXMgJGxpc3RlbmVyKSB7CiR0aGlzLT5hZGRMaXN0ZW5lcigkZXZlbnROYW1lLCBhcnJheSgkc3Vic2NyaWJlciwgJGxpc3RlbmVyWzBdKSwgaXNzZXQoJGxpc3RlbmVyWzFdKSA/ICRsaXN0ZW5lclsxXSA6IDApOwp9Cn0KfQp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0TGlzdGVuZXJzKEV2ZW50ICRldmVudCkKewokc2NyaXB0TGlzdGVuZXJzID0gJHRoaXMtPmdldFNjcmlwdExpc3RlbmVycygkZXZlbnQpOwoKaWYgKCFpc3NldCgkdGhpcy0+bGlzdGVuZXJzWyRldmVudC0+Z2V0TmFtZSgpXVswXSkpIHsKJHRoaXMtPmxpc3RlbmVyc1skZXZlbnQtPmdldE5hbWUoKV1bMF0gPSBhcnJheSgpOwp9Cmtyc29ydCgkdGhpcy0+bGlzdGVuZXJzWyRldmVudC0+Z2V0TmFtZSgpXSk7CgokbGlzdGVuZXJzID0gJHRoaXMtPmxpc3RlbmVyczsKJGxpc3RlbmVyc1skZXZlbnQtPmdldE5hbWUoKV1bMF0gPSBhcnJheV9tZXJnZSgkbGlzdGVuZXJzWyRldmVudC0+Z2V0TmFtZSgpXVswXSwgJHNjcmlwdExpc3RlbmVycyk7CgpyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJGxpc3RlbmVyc1skZXZlbnQtPmdldE5hbWUoKV0pOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0U2NyaXB0TGlzdGVuZXJzKEV2ZW50ICRldmVudCkKewokcGFja2FnZSA9ICR0aGlzLT5jb21wb3Nlci0+Z2V0UGFja2FnZSgpOwokc2NyaXB0cyA9ICRwYWNrYWdlLT5nZXRTY3JpcHRzKCk7CgppZiAoZW1wdHkoJHNjcmlwdHNbJGV2ZW50LT5nZXROYW1lKCldKSkgewpyZXR1cm4gYXJyYXkoKTsKfQoKaWYgKCR0aGlzLT5sb2FkZXIpIHsKJHRoaXMtPmxvYWRlci0+dW5yZWdpc3RlcigpOwp9CgokZ2VuZXJhdG9yID0gJHRoaXMtPmNvbXBvc2VyLT5nZXRBdXRvbG9hZEdlbmVyYXRvcigpOwokcGFja2FnZXMgPSAkdGhpcy0+Y29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCktPmdldExvY2FsUmVwb3NpdG9yeSgpLT5nZXRDYW5vbmljYWxQYWNrYWdlcygpOwokcGFja2FnZU1hcCA9ICRnZW5lcmF0b3ItPmJ1aWxkUGFja2FnZU1hcCgkdGhpcy0+Y29tcG9zZXItPmdldEluc3RhbGxhdGlvbk1hbmFnZXIoKSwgJHBhY2thZ2UsICRwYWNrYWdlcyk7CiRtYXAgPSAkZ2VuZXJhdG9yLT5wYXJzZUF1dG9sb2FkcygkcGFja2FnZU1hcCwgJHBhY2thZ2UpOwokdGhpcy0+bG9hZGVyID0gJGdlbmVyYXRvci0+Y3JlYXRlTG9hZGVyKCRtYXApOwokdGhpcy0+bG9hZGVyLT5yZWdpc3RlcigpOwoKcmV0dXJuICRzY3JpcHRzWyRldmVudC0+Z2V0TmFtZSgpXTsKfQoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGlzUGhwU2NyaXB0KCRjYWxsYWJsZSkKewpyZXR1cm4gZmFsc2UgPT09IHN0cnBvcygkY2FsbGFibGUsICcgJykgJiYgZmFsc2UgIT09IHN0cnBvcygkY2FsbGFibGUsICc6OicpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcU2NyaXB0OwoKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CgoKCgoKCgpjbGFzcyBFdmVudCBleHRlbmRzIFxDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnQKewoKCgpwcml2YXRlICRjb21wb3NlcjsKCgoKCnByaXZhdGUgJGlvOwoKCgoKcHJpdmF0ZSAkZGV2TW9kZTsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCBDb21wb3NlciAkY29tcG9zZXIsIElPSW50ZXJmYWNlICRpbywgJGRldk1vZGUgPSBmYWxzZSkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRuYW1lKTsKJHRoaXMtPmNvbXBvc2VyID0gJGNvbXBvc2VyOwokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5kZXZNb2RlID0gJGRldk1vZGU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbXBvc2VyKCkKewpyZXR1cm4gJHRoaXMtPmNvbXBvc2VyOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJTygpCnsKcmV0dXJuICR0aGlzLT5pbzsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZXZNb2RlKCkKewpyZXR1cm4gJHRoaXMtPmRldk1vZGU7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxTY3JpcHQ7CgoKCgoKCgpjbGFzcyBTY3JpcHRFdmVudHMKewoKCgoKCgoKY29uc3QgUFJFX0lOU1RBTExfQ01EID0gJ3ByZS1pbnN0YWxsLWNtZCc7CgoKCgoKCgoKY29uc3QgUE9TVF9JTlNUQUxMX0NNRCA9ICdwb3N0LWluc3RhbGwtY21kJzsKCgoKCgoKCgpjb25zdCBQUkVfVVBEQVRFX0NNRCA9ICdwcmUtdXBkYXRlLWNtZCc7CgoKCgoKCgoKY29uc3QgUE9TVF9VUERBVEVfQ01EID0gJ3Bvc3QtdXBkYXRlLWNtZCc7CgoKCgoKCgoKY29uc3QgUFJFX1NUQVRVU19DTUQgPSAncHJlLXN0YXR1cy1jbWQnOwoKCgoKCgoKCmNvbnN0IFBPU1RfU1RBVFVTX0NNRCA9ICdwb3N0LXN0YXR1cy1jbWQnOwoKCgoKCgoKCmNvbnN0IFBSRV9QQUNLQUdFX0lOU1RBTEwgPSAncHJlLXBhY2thZ2UtaW5zdGFsbCc7CgoKCgoKCgoKY29uc3QgUE9TVF9QQUNLQUdFX0lOU1RBTEwgPSAncG9zdC1wYWNrYWdlLWluc3RhbGwnOwoKCgoKCgoKCmNvbnN0IFBSRV9QQUNLQUdFX1VQREFURSA9ICdwcmUtcGFja2FnZS11cGRhdGUnOwoKCgoKCgoKCmNvbnN0IFBPU1RfUEFDS0FHRV9VUERBVEUgPSAncG9zdC1wYWNrYWdlLXVwZGF0ZSc7CgoKCgoKCgoKY29uc3QgUFJFX1BBQ0tBR0VfVU5JTlNUQUxMID0gJ3ByZS1wYWNrYWdlLXVuaW5zdGFsbCc7CgoKCgoKCgoKY29uc3QgUE9TVF9QQUNLQUdFX1VOSU5TVEFMTCA9ICdwb3N0LXBhY2thZ2UtdW5pbnN0YWxsJzsKCgoKCgoKCgpjb25zdCBQUkVfQVVUT0xPQURfRFVNUCA9ICdwcmUtYXV0b2xvYWQtZHVtcCc7CgoKCgoKCgoKY29uc3QgUE9TVF9BVVRPTE9BRF9EVU1QID0gJ3Bvc3QtYXV0b2xvYWQtZHVtcCc7CgoKCgoKCgoKY29uc3QgUE9TVF9ST09UX1BBQ0tBR0VfSU5TVEFMTCA9ICdwb3N0LXJvb3QtcGFja2FnZS1pbnN0YWxsJzsKCgoKCgoKCgoKY29uc3QgUE9TVF9DUkVBVEVfUFJPSkVDVF9DTUQgPSAncG9zdC1jcmVhdGUtcHJvamVjdC1jbWQnOwoKCgoKCgoKCmNvbnN0IFBSRV9BUkNISVZFX0NNRCA9ICdwcmUtYXJjaGl2ZS1jbWQnOwoKCgoKCgoKCmNvbnN0IFBPU1RfQVJDSElWRV9DTUQgPSAncG9zdC1hcmNoaXZlLWNtZCc7Cgp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFNjcmlwdDsKCgoKCgoKY2xhc3MgQ29tbWFuZEV2ZW50IGV4dGVuZHMgRXZlbnQKewp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXFNjcmlwdDsKCnVzZSBDb21wb3NlclxDb21wb3NlcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvblxPcGVyYXRpb25JbnRlcmZhY2U7CgoKCgoKCmNsYXNzIFBhY2thZ2VFdmVudCBleHRlbmRzIEV2ZW50CnsKCgoKcHJpdmF0ZSAkb3BlcmF0aW9uOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRuYW1lLCBDb21wb3NlciAkY29tcG9zZXIsIElPSW50ZXJmYWNlICRpbywgJGRldk1vZGUsIE9wZXJhdGlvbkludGVyZmFjZSAkb3BlcmF0aW9uKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QoJG5hbWUsICRjb21wb3NlciwgJGlvLCAkZGV2TW9kZSk7CiR0aGlzLT5vcGVyYXRpb24gPSAkb3BlcmF0aW9uOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcGVyYXRpb24oKQp7CnJldHVybiAkdGhpcy0+b3BlcmF0aW9uOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSW5zdGFsbGVyOwoKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKCgpjbGFzcyBOb29wSW5zdGFsbGVyIGltcGxlbWVudHMgSW5zdGFsbGVySW50ZXJmYWNlCnsKCgoKcHVibGljIGZ1bmN0aW9uIHN1cHBvcnRzKCRwYWNrYWdlVHlwZSkKewpyZXR1cm4gdHJ1ZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzSW5zdGFsbGVkKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKcmV0dXJuICRyZXBvLT5oYXNQYWNrYWdlKCRwYWNrYWdlKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewppZiAoISRyZXBvLT5oYXNQYWNrYWdlKCRwYWNrYWdlKSkgewokcmVwby0+YWRkUGFja2FnZShjbG9uZSAkcGFja2FnZSk7Cn0KfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVwZGF0ZShJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRpbml0aWFsLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQpCnsKaWYgKCEkcmVwby0+aGFzUGFja2FnZSgkaW5pdGlhbCkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhY2thZ2UgaXMgbm90IGluc3RhbGxlZDogJy4kaW5pdGlhbCk7Cn0KCiRyZXBvLT5yZW1vdmVQYWNrYWdlKCRpbml0aWFsKTsKaWYgKCEkcmVwby0+aGFzUGFja2FnZSgkdGFyZ2V0KSkgewokcmVwby0+YWRkUGFja2FnZShjbG9uZSAkdGFyZ2V0KTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gdW5pbnN0YWxsKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKaWYgKCEkcmVwby0+aGFzUGFja2FnZSgkcGFja2FnZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ1BhY2thZ2UgaXMgbm90IGluc3RhbGxlZDogJy4kcGFja2FnZSk7Cn0KJHJlcG8tPnJlbW92ZVBhY2thZ2UoJHBhY2thZ2UpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbFBhdGgoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokdGFyZ2V0RGlyID0gJHBhY2thZ2UtPmdldFRhcmdldERpcigpOwoKcmV0dXJuICRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCkgLiAoJHRhcmdldERpciA/ICcvJy4kdGFyZ2V0RGlyIDogJycpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSW5zdGFsbGVyOwoKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKY2xhc3MgTWV0YXBhY2thZ2VJbnN0YWxsZXIgaW1wbGVtZW50cyBJbnN0YWxsZXJJbnRlcmZhY2UKewoKCgpwdWJsaWMgZnVuY3Rpb24gc3VwcG9ydHMoJHBhY2thZ2VUeXBlKQp7CnJldHVybiAkcGFja2FnZVR5cGUgPT09ICdtZXRhcGFja2FnZSc7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0luc3RhbGxlZChJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiAkcmVwby0+aGFzUGFja2FnZSgkcGFja2FnZSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJHJlcG8tPmFkZFBhY2thZ2UoY2xvbmUgJHBhY2thZ2UpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCkKewppZiAoISRyZXBvLT5oYXNQYWNrYWdlKCRpbml0aWFsKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUGFja2FnZSBpcyBub3QgaW5zdGFsbGVkOiAnLiRpbml0aWFsKTsKfQoKJHJlcG8tPnJlbW92ZVBhY2thZ2UoJGluaXRpYWwpOwokcmVwby0+YWRkUGFja2FnZShjbG9uZSAkdGFyZ2V0KTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVuaW5zdGFsbChJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CmlmICghJHJlcG8tPmhhc1BhY2thZ2UoJHBhY2thZ2UpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdQYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQ6ICcuJHBhY2thZ2UpOwp9CgokcmVwby0+cmVtb3ZlUGFja2FnZSgkcGFja2FnZSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsUGF0aChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiAnJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXEluc3RhbGxlcjsKCnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxQZWFyUGFja2FnZUV4dHJhY3RvcjsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKCgoKCgoKCmNsYXNzIFBlYXJJbnN0YWxsZXIgZXh0ZW5kcyBMaWJyYXJ5SW5zdGFsbGVyCnsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChJT0ludGVyZmFjZSAkaW8sIENvbXBvc2VyICRjb21wb3NlciwgJHR5cGUgPSAncGVhci1saWJyYXJ5JykKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRpbywgJGNvbXBvc2VyLCAkdHlwZSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiB1cGRhdGUoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkaW5pdGlhbCwgUGFja2FnZUludGVyZmFjZSAkdGFyZ2V0KQp7CiR0aGlzLT51bmluc3RhbGwoJHJlcG8sICRpbml0aWFsKTsKJHRoaXMtPmluc3RhbGwoJHJlcG8sICR0YXJnZXQpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zdGFsbENvZGUoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewpwYXJlbnQ6Omluc3RhbGxDb2RlKCRwYWNrYWdlKTsKcGFyZW50Ojppbml0aWFsaXplQmluRGlyKCk7CgokaXNXaW5kb3dzID0gZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpOwokcGhwX2JpbiA9ICR0aGlzLT5iaW5EaXIgLiAoJGlzV2luZG93cyA/ICcvY29tcG9zZXItcGhwLmJhdCcgOiAnL2NvbXBvc2VyLXBocCcpOwoKaWYgKCEkaXNXaW5kb3dzKSB7CiRwaHBfYmluID0gJy91c3IvYmluL2VudiAnIC4gJHBocF9iaW47Cn0KCiRpbnN0YWxsUGF0aCA9ICR0aGlzLT5nZXRJbnN0YWxsUGF0aCgkcGFja2FnZSk7CiR2YXJzID0gYXJyYXkoCidvcycgPT4gJGlzV2luZG93cyA/ICd3aW5kb3dzJyA6ICdsaW51eCcsCidwaHBfYmluJyA9PiAkcGhwX2JpbiwKJ3BlYXJfcGhwJyA9PiAkaW5zdGFsbFBhdGgsCidwaHBfZGlyJyA9PiAkaW5zdGFsbFBhdGgsCidiaW5fZGlyJyA9PiAkaW5zdGFsbFBhdGggLiAnL2JpbicsCidkYXRhX2RpcicgPT4gJGluc3RhbGxQYXRoIC4gJy9kYXRhJywKJ3ZlcnNpb24nID0+ICRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCksCik7CgokcGFja2FnZUFyY2hpdmUgPSAkdGhpcy0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpLicvJy5wYXRoaW5mbygkcGFja2FnZS0+Z2V0RGlzdFVybCgpLCBQQVRISU5GT19CQVNFTkFNRSk7CiRwZWFyRXh0cmFjdG9yID0gbmV3IFBlYXJQYWNrYWdlRXh0cmFjdG9yKCRwYWNrYWdlQXJjaGl2ZSk7CiRwZWFyRXh0cmFjdG9yLT5leHRyYWN0VG8oJHRoaXMtPmdldEluc3RhbGxQYXRoKCRwYWNrYWdlKSwgYXJyYXkoJ3BocCcgPT4gJy8nLCAnc2NyaXB0JyA9PiAnL2JpbicsICdkYXRhJyA9PiAnL2RhdGEnKSwgJHZhcnMpOwoKaWYgKCR0aGlzLT5pby0+aXNWZXJib3NlKCkpIHsKJHRoaXMtPmlvLT53cml0ZSgnICAgIENsZWFuaW5nIHVwJyk7Cn0KdW5saW5rKCRwYWNrYWdlQXJjaGl2ZSk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRCaW5hcmllcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRiaW5hcmllc1BhdGggPSAkdGhpcy0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpIC4gJy9iaW4vJzsKJGJpbmFyaWVzID0gYXJyYXkoKTsKaWYgKGZpbGVfZXhpc3RzKCRiaW5hcmllc1BhdGgpKSB7CmZvcmVhY2ggKG5ldyBcRmlsZXN5c3RlbUl0ZXJhdG9yKCRiaW5hcmllc1BhdGgsIFxGaWxlc3lzdGVtSXRlcmF0b3I6OktFWV9BU19GSUxFTkFNRSB8IFxGaWxlc3lzdGVtSXRlcmF0b3I6OkNVUlJFTlRfQVNfRklMRUlORk8pIGFzICRmaWxlTmFtZSA9PiAkdmFsdWUpIHsKaWYgKCEkdmFsdWUtPmlzRGlyKCkpIHsKJGJpbmFyaWVzW10gPSAnYmluLycuJGZpbGVOYW1lOwp9Cn0KfQoKcmV0dXJuICRiaW5hcmllczsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXRpYWxpemVCaW5EaXIoKQp7CnBhcmVudDo6aW5pdGlhbGl6ZUJpbkRpcigpOwpmaWxlX3B1dF9jb250ZW50cygkdGhpcy0+YmluRGlyLicvY29tcG9zZXItcGhwJywgJHRoaXMtPmdlbmVyYXRlVW5peHlQaHBQcm94eUNvZGUoKSk7CkBjaG1vZCgkdGhpcy0+YmluRGlyLicvY29tcG9zZXItcGhwJywgMDc3Nyk7CmZpbGVfcHV0X2NvbnRlbnRzKCR0aGlzLT5iaW5EaXIuJy9jb21wb3Nlci1waHAuYmF0JywgJHRoaXMtPmdlbmVyYXRlV2luZG93c1BocFByb3h5Q29kZSgpKTsKQGNobW9kKCR0aGlzLT5iaW5EaXIuJy9jb21wb3Nlci1waHAuYmF0JywgMDc3Nyk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZVdpbmRvd3NQcm94eUNvZGUoJGJpbiwgJGxpbmspCnsKJGJpblBhdGggPSAkdGhpcy0+ZmlsZXN5c3RlbS0+ZmluZFNob3J0ZXN0UGF0aCgkbGluaywgJGJpbik7CmlmICgnLmJhdCcgPT09IHN1YnN0cigkYmluLCAtNCkpIHsKJGNhbGxlciA9ICdjYWxsJzsKfSBlbHNlIHsKJGhhbmRsZSA9IGZvcGVuKCRiaW4sICdyJyk7CiRsaW5lID0gZmdldHMoJGhhbmRsZSk7CmZjbG9zZSgkaGFuZGxlKTsKaWYgKHByZWdfbWF0Y2goJ3teIyEvKD86dXNyL2Jpbi9lbnYgKT8oPzpbXi9dKy8pKiguKykkfW0nLCAkbGluZSwgJG1hdGNoKSkgewokY2FsbGVyID0gdHJpbSgkbWF0Y2hbMV0pOwp9IGVsc2UgewokY2FsbGVyID0gJ3BocCc7Cn0KCmlmICgkY2FsbGVyID09PSAncGhwJykgewpyZXR1cm4gIkBlY2hvIG9mZlxyXG4iLgoicHVzaGQgLlxyXG4iLgoiY2QgJX5kcDBcclxuIi4KInNldCBQSFBfUFJPWFk9JUNEJVxcY29tcG9zZXItcGhwLmJhdFxyXG4iLgoiY2QgIi5lc2NhcGVzaGVsbGFyZyhkaXJuYW1lKCRiaW5QYXRoKSkuIlxyXG4iLgoic2V0IEJJTl9UQVJHRVQ9JUNEJVxcIi5iYXNlbmFtZSgkYmluUGF0aCkuIlxyXG4iLgoicG9wZFxyXG4iLgoiJVBIUF9QUk9YWSUgXCIlQklOX1RBUkdFVCVcIiAlKlxyXG4iOwp9Cn0KCnJldHVybiAiQGVjaG8gb2ZmXHJcbiIuCiJwdXNoZCAuXHJcbiIuCiJjZCAlfmRwMFxyXG4iLgoiY2QgIi5lc2NhcGVzaGVsbGFyZyhkaXJuYW1lKCRiaW5QYXRoKSkuIlxyXG4iLgoic2V0IEJJTl9UQVJHRVQ9JUNEJVxcIi5iYXNlbmFtZSgkYmluUGF0aCkuIlxyXG4iLgoicG9wZFxyXG4iLgokY2FsbGVyLiIgXCIlQklOX1RBUkdFVCVcIiAlKlxyXG4iOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlV2luZG93c1BocFByb3h5Q29kZSgpCnsKJGJpblRvVmVuZG9yID0gJHRoaXMtPmZpbGVzeXN0ZW0tPmZpbmRTaG9ydGVzdFBhdGgoJHRoaXMtPmJpbkRpciwgJHRoaXMtPnZlbmRvckRpciwgdHJ1ZSk7CgpyZXR1cm4KIkBlY2hvIG9mZlxyXG4iIC4KInNldGxvY2FsIGVuYWJsZWRlbGF5ZWRleHBhbnNpb25cclxuIiAuCiJzZXQgQklOX0RJUj0lfmRwMFxyXG4iIC4KInNldCBWRU5ET1JfRElSPSVCSU5fRElSJVxcIi4kYmluVG9WZW5kb3IuIlxyXG4iIC4KInNldCBESVJTPS5cclxuIiAuCiJGT1IgL0QgJSVWIElOICglVkVORE9SX0RJUiVcXCopIERPIChcclxuIiAuCiIgICAgRk9SIC9EICUlUCBJTiAoJSVWXFwqKSBETyAoXHJcbiIgLgoiICAgICAgICBzZXQgRElSUz0hRElSUyE7JSV+ZlBcclxuIiAuCiIgICAgKVxyXG4iIC4KIilcclxuIiAuCiJwaHAuZXhlIC1kIGluY2x1ZGVfcGF0aD0hRElSUyEgJSpcclxuIjsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBnZW5lcmF0ZVVuaXh5UGhwUHJveHlDb2RlKCkKewokYmluVG9WZW5kb3IgPSAkdGhpcy0+ZmlsZXN5c3RlbS0+ZmluZFNob3J0ZXN0UGF0aCgkdGhpcy0+YmluRGlyLCAkdGhpcy0+dmVuZG9yRGlyLCB0cnVlKTsKCnJldHVybgoiIyEvdXNyL2Jpbi9lbnYgc2hcbiIuCiJTUkNfRElSPWBwd2RgXG4iLgoiQklOX0RJUj1gZGlybmFtZSAkMGBcbiIuCiJWRU5ET1JfRElSPVwkQklOX0RJUi8iLmVzY2FwZXNoZWxsYXJnKCRiaW5Ub1ZlbmRvcikuIlxuIi4KIkRJUlM9XCJcIlxuIi4KImZvciB2ZW5kb3IgaW4gXCRWRU5ET1JfRElSLyo7IGRvXG4iLgoiICAgIGlmIFsgLWQgXCJcJHZlbmRvclwiIF07IHRoZW5cbiIuCiIgICAgICAgIGZvciBwYWNrYWdlIGluIFwkdmVuZG9yLyo7IGRvXG4iLgoiICAgICAgICAgICAgaWYgWyAtZCBcIlwkcGFja2FnZVwiIF07IHRoZW5cbiIuCiIgICAgICAgICAgICAgICAgRElSUz1cIlwke0RJUlN9Olwke3BhY2thZ2V9XCJcbiIuCiIgICAgICAgICAgICBmaVxuIi4KIiAgICAgICAgZG9uZVxuIi4KIiAgICBmaVxuIi4KImRvbmVcbiIuCiJwaHAgLWQgaW5jbHVkZV9wYXRoPVwiLlwkRElSU1wiICRAXG4iOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSW5zdGFsbGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXERvd25sb2FkZXJcRG93bmxvYWRNYW5hZ2VyOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcVXRpbFxGaWxlc3lzdGVtOwoKCgoKCgoKY2xhc3MgUHJvamVjdEluc3RhbGxlciBpbXBsZW1lbnRzIEluc3RhbGxlckludGVyZmFjZQp7CnByaXZhdGUgJGluc3RhbGxQYXRoOwpwcml2YXRlICRkb3dubG9hZE1hbmFnZXI7CnByaXZhdGUgJGZpbGVzeXN0ZW07CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGluc3RhbGxQYXRoLCBEb3dubG9hZE1hbmFnZXIgJGRtKQp7CiR0aGlzLT5pbnN0YWxsUGF0aCA9IHJ0cmltKHN0cnRyKCRpbnN0YWxsUGF0aCwgJ1xcJywgJy8nKSwgJy8nKS4nLyc7CiR0aGlzLT5kb3dubG9hZE1hbmFnZXIgPSAkZG07CiR0aGlzLT5maWxlc3lzdGVtID0gbmV3IEZpbGVzeXN0ZW07Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzdXBwb3J0cygkcGFja2FnZVR5cGUpCnsKcmV0dXJuIHRydWU7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0luc3RhbGxlZChJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiBmYWxzZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokaW5zdGFsbFBhdGggPSAkdGhpcy0+aW5zdGFsbFBhdGg7CmlmIChmaWxlX2V4aXN0cygkaW5zdGFsbFBhdGgpICYmICEkdGhpcy0+ZmlsZXN5c3RlbS0+aXNEaXJFbXB0eSgkaW5zdGFsbFBhdGgpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJQcm9qZWN0IGRpcmVjdG9yeSAkaW5zdGFsbFBhdGggaXMgbm90IGVtcHR5LiIpOwp9CmlmICghaXNfZGlyKCRpbnN0YWxsUGF0aCkpIHsKbWtkaXIoJGluc3RhbGxQYXRoLCAwNzc3LCB0cnVlKTsKfQokdGhpcy0+ZG93bmxvYWRNYW5hZ2VyLT5kb3dubG9hZCgkcGFja2FnZSwgJGluc3RhbGxQYXRoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVwZGF0ZShJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRpbml0aWFsLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQpCnsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIm5vdCBzdXBwb3J0ZWQiKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVuaW5zdGFsbChJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJub3Qgc3VwcG9ydGVkIik7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsUGF0aChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiAkdGhpcy0+aW5zdGFsbFBhdGg7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxJbnN0YWxsZXI7Cgp1c2UgQ29tcG9zZXJcQ29tcG9zZXI7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFV0aWxcRmlsZXN5c3RlbTsKCgoKCgoKCmNsYXNzIExpYnJhcnlJbnN0YWxsZXIgaW1wbGVtZW50cyBJbnN0YWxsZXJJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJGNvbXBvc2VyOwpwcm90ZWN0ZWQgJHZlbmRvckRpcjsKcHJvdGVjdGVkICRiaW5EaXI7CnByb3RlY3RlZCAkZG93bmxvYWRNYW5hZ2VyOwpwcm90ZWN0ZWQgJGlvOwpwcm90ZWN0ZWQgJHR5cGU7CnByb3RlY3RlZCAkZmlsZXN5c3RlbTsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29tcG9zZXIgJGNvbXBvc2VyLCAkdHlwZSA9ICdsaWJyYXJ5JywgRmlsZXN5c3RlbSAkZmlsZXN5c3RlbSA9IG51bGwpCnsKJHRoaXMtPmNvbXBvc2VyID0gJGNvbXBvc2VyOwokdGhpcy0+ZG93bmxvYWRNYW5hZ2VyID0gJGNvbXBvc2VyLT5nZXREb3dubG9hZE1hbmFnZXIoKTsKJHRoaXMtPmlvID0gJGlvOwokdGhpcy0+dHlwZSA9ICR0eXBlOwoKJHRoaXMtPmZpbGVzeXN0ZW0gPSAkZmlsZXN5c3RlbSA/OiBuZXcgRmlsZXN5c3RlbSgpOwokdGhpcy0+dmVuZG9yRGlyID0gcnRyaW0oJGNvbXBvc2VyLT5nZXRDb25maWcoKS0+Z2V0KCd2ZW5kb3ItZGlyJyksICcvJyk7CiR0aGlzLT5iaW5EaXIgPSBydHJpbSgkY29tcG9zZXItPmdldENvbmZpZygpLT5nZXQoJ2Jpbi1kaXInKSwgJy8nKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHN1cHBvcnRzKCRwYWNrYWdlVHlwZSkKewpyZXR1cm4gJHBhY2thZ2VUeXBlID09PSAkdGhpcy0+dHlwZSB8fCBudWxsID09PSAkdGhpcy0+dHlwZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzSW5zdGFsbGVkKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKcmV0dXJuICRyZXBvLT5oYXNQYWNrYWdlKCRwYWNrYWdlKSAmJiBpc19yZWFkYWJsZSgkdGhpcy0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokdGhpcy0+aW5pdGlhbGl6ZVZlbmRvckRpcigpOwokZG93bmxvYWRQYXRoID0gJHRoaXMtPmdldEluc3RhbGxQYXRoKCRwYWNrYWdlKTsKCgogaWYgKCFpc19yZWFkYWJsZSgkZG93bmxvYWRQYXRoKSAmJiAkcmVwby0+aGFzUGFja2FnZSgkcGFja2FnZSkpIHsKJHRoaXMtPnJlbW92ZUJpbmFyaWVzKCRwYWNrYWdlKTsKfQoKJHRoaXMtPmluc3RhbGxDb2RlKCRwYWNrYWdlKTsKJHRoaXMtPmluc3RhbGxCaW5hcmllcygkcGFja2FnZSk7CmlmICghJHJlcG8tPmhhc1BhY2thZ2UoJHBhY2thZ2UpKSB7CiRyZXBvLT5hZGRQYWNrYWdlKGNsb25lICRwYWNrYWdlKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCkKewppZiAoISRyZXBvLT5oYXNQYWNrYWdlKCRpbml0aWFsKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUGFja2FnZSBpcyBub3QgaW5zdGFsbGVkOiAnLiRpbml0aWFsKTsKfQoKJHRoaXMtPmluaXRpYWxpemVWZW5kb3JEaXIoKTsKCiR0aGlzLT5yZW1vdmVCaW5hcmllcygkaW5pdGlhbCk7CiR0aGlzLT51cGRhdGVDb2RlKCRpbml0aWFsLCAkdGFyZ2V0KTsKJHRoaXMtPmluc3RhbGxCaW5hcmllcygkdGFyZ2V0KTsKJHJlcG8tPnJlbW92ZVBhY2thZ2UoJGluaXRpYWwpOwppZiAoISRyZXBvLT5oYXNQYWNrYWdlKCR0YXJnZXQpKSB7CiRyZXBvLT5hZGRQYWNrYWdlKGNsb25lICR0YXJnZXQpOwp9Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiB1bmluc3RhbGwoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewppZiAoISRyZXBvLT5oYXNQYWNrYWdlKCRwYWNrYWdlKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignUGFja2FnZSBpcyBub3QgaW5zdGFsbGVkOiAnLiRwYWNrYWdlKTsKfQoKJHRoaXMtPnJlbW92ZUNvZGUoJHBhY2thZ2UpOwokdGhpcy0+cmVtb3ZlQmluYXJpZXMoJHBhY2thZ2UpOwokcmVwby0+cmVtb3ZlUGFja2FnZSgkcGFja2FnZSk7CgokZG93bmxvYWRQYXRoID0gJHRoaXMtPmdldFBhY2thZ2VCYXNlUGF0aCgkcGFja2FnZSk7CmlmIChzdHJwb3MoJHBhY2thZ2UtPmdldE5hbWUoKSwgJy8nKSkgewokcGFja2FnZVZlbmRvckRpciA9IGRpcm5hbWUoJGRvd25sb2FkUGF0aCk7CmlmIChpc19kaXIoJHBhY2thZ2VWZW5kb3JEaXIpICYmICFnbG9iKCRwYWNrYWdlVmVuZG9yRGlyLicvKicpKSB7CkBybWRpcigkcGFja2FnZVZlbmRvckRpcik7Cn0KfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5zdGFsbFBhdGgoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokdGFyZ2V0RGlyID0gJHBhY2thZ2UtPmdldFRhcmdldERpcigpOwoKcmV0dXJuICR0aGlzLT5nZXRQYWNrYWdlQmFzZVBhdGgoJHBhY2thZ2UpIC4gKCR0YXJnZXREaXIgPyAnLycuJHRhcmdldERpciA6ICcnKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBhY2thZ2VCYXNlUGF0aChQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiR0aGlzLT5pbml0aWFsaXplVmVuZG9yRGlyKCk7CgpyZXR1cm4gKCR0aGlzLT52ZW5kb3JEaXIgPyAkdGhpcy0+dmVuZG9yRGlyLicvJyA6ICcnKSAuICRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBpbnN0YWxsQ29kZShQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRkb3dubG9hZFBhdGggPSAkdGhpcy0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpOwokdGhpcy0+ZG93bmxvYWRNYW5hZ2VyLT5kb3dubG9hZCgkcGFja2FnZSwgJGRvd25sb2FkUGF0aCk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB1cGRhdGVDb2RlKFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCkKewokaW5pdGlhbERvd25sb2FkUGF0aCA9ICR0aGlzLT5nZXRJbnN0YWxsUGF0aCgkaW5pdGlhbCk7CiR0YXJnZXREb3dubG9hZFBhdGggPSAkdGhpcy0+Z2V0SW5zdGFsbFBhdGgoJHRhcmdldCk7CmlmICgkdGFyZ2V0RG93bmxvYWRQYXRoICE9PSAkaW5pdGlhbERvd25sb2FkUGF0aCkgewoKIAogaWYgKHN1YnN0cigkaW5pdGlhbERvd25sb2FkUGF0aCwgMCwgc3RybGVuKCR0YXJnZXREb3dubG9hZFBhdGgpKSA9PT0gJHRhcmdldERvd25sb2FkUGF0aAp8fCBzdWJzdHIoJHRhcmdldERvd25sb2FkUGF0aCwgMCwgc3RybGVuKCRpbml0aWFsRG93bmxvYWRQYXRoKSkgPT09ICRpbml0aWFsRG93bmxvYWRQYXRoCikgewokdGhpcy0+cmVtb3ZlQ29kZSgkaW5pdGlhbCk7CiR0aGlzLT5pbnN0YWxsQ29kZSgkdGFyZ2V0KTsKCnJldHVybjsKfQoKJHRoaXMtPmZpbGVzeXN0ZW0tPnJlbmFtZSgkaW5pdGlhbERvd25sb2FkUGF0aCwgJHRhcmdldERvd25sb2FkUGF0aCk7Cn0KJHRoaXMtPmRvd25sb2FkTWFuYWdlci0+dXBkYXRlKCRpbml0aWFsLCAkdGFyZ2V0LCAkdGFyZ2V0RG93bmxvYWRQYXRoKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHJlbW92ZUNvZGUoUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSkKewokZG93bmxvYWRQYXRoID0gJHRoaXMtPmdldFBhY2thZ2VCYXNlUGF0aCgkcGFja2FnZSk7CiR0aGlzLT5kb3dubG9hZE1hbmFnZXItPnJlbW92ZSgkcGFja2FnZSwgJGRvd25sb2FkUGF0aCk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRCaW5hcmllcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CnJldHVybiAkcGFja2FnZS0+Z2V0QmluYXJpZXMoKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluc3RhbGxCaW5hcmllcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRiaW5hcmllcyA9ICR0aGlzLT5nZXRCaW5hcmllcygkcGFja2FnZSk7CmlmICghJGJpbmFyaWVzKSB7CnJldHVybjsKfQpmb3JlYWNoICgkYmluYXJpZXMgYXMgJGJpbikgewokYmluUGF0aCA9ICR0aGlzLT5nZXRJbnN0YWxsUGF0aCgkcGFja2FnZSkuJy8nLiRiaW47CmlmICghZmlsZV9leGlzdHMoJGJpblBhdGgpKSB7CiR0aGlzLT5pby0+d3JpdGUoJyAgICA8d2FybmluZz5Ta2lwcGVkIGluc3RhbGxhdGlvbiBvZiBiaW4gJy4kYmluLicgZm9yIHBhY2thZ2UgJy4kcGFja2FnZS0+Z2V0TmFtZSgpLic6IGZpbGUgbm90IGZvdW5kIGluIHBhY2thZ2U8L3dhcm5pbmc+Jyk7CmNvbnRpbnVlOwp9CgoKIAogCiAKICRiaW5QYXRoID0gcmVhbHBhdGgoJGJpblBhdGgpOwoKJHRoaXMtPmluaXRpYWxpemVCaW5EaXIoKTsKJGxpbmsgPSAkdGhpcy0+YmluRGlyLicvJy5iYXNlbmFtZSgkYmluKTsKaWYgKGZpbGVfZXhpc3RzKCRsaW5rKSkgewppZiAoaXNfbGluaygkbGluaykpIHsKCiAKIAogQGNobW9kKCRsaW5rLCAwNzc3ICYgfnVtYXNrKCkpOwp9CiR0aGlzLT5pby0+d3JpdGUoJyAgICBTa2lwcGVkIGluc3RhbGxhdGlvbiBvZiBiaW4gJy4kYmluLicgZm9yIHBhY2thZ2UgJy4kcGFja2FnZS0+Z2V0TmFtZSgpLic6IG5hbWUgY29uZmxpY3RzIHdpdGggYW4gZXhpc3RpbmcgZmlsZScpOwpjb250aW51ZTsKfQppZiAoZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CgogaWYgKCcuYmF0JyAhPT0gc3Vic3RyKCRiaW5QYXRoLCAtNCkpIHsKZmlsZV9wdXRfY29udGVudHMoJGxpbmssICR0aGlzLT5nZW5lcmF0ZVVuaXh5UHJveHlDb2RlKCRiaW5QYXRoLCAkbGluaykpOwpAY2htb2QoJGxpbmssIDA3NzcgJiB+dW1hc2soKSk7CiRsaW5rIC49ICcuYmF0JzsKaWYgKGZpbGVfZXhpc3RzKCRsaW5rKSkgewokdGhpcy0+aW8tPndyaXRlKCcgICAgU2tpcHBlZCBpbnN0YWxsYXRpb24gb2YgYmluICcuJGJpbi4nLmJhdCBwcm94eSBmb3IgcGFja2FnZSAnLiRwYWNrYWdlLT5nZXROYW1lKCkuJzogYSAuYmF0IHByb3h5IHdhcyBhbHJlYWR5IGluc3RhbGxlZCcpOwp9Cn0KaWYgKCFmaWxlX2V4aXN0cygkbGluaykpIHsKZmlsZV9wdXRfY29udGVudHMoJGxpbmssICR0aGlzLT5nZW5lcmF0ZVdpbmRvd3NQcm94eUNvZGUoJGJpblBhdGgsICRsaW5rKSk7Cn0KfSBlbHNlIHsKJGN3ZCA9IGdldGN3ZCgpOwp0cnkgewoKIAogJHJlbGF0aXZlQmluID0gJHRoaXMtPmZpbGVzeXN0ZW0tPmZpbmRTaG9ydGVzdFBhdGgoJGxpbmssICRiaW5QYXRoKTsKY2hkaXIoZGlybmFtZSgkbGluaykpOwppZiAoZmFsc2UgPT09IHN5bWxpbmsoJHJlbGF0aXZlQmluLCAkbGluaykpIHsKdGhyb3cgbmV3IFxFcnJvckV4Y2VwdGlvbigpOwp9Cn0gY2F0Y2ggKFxFcnJvckV4Y2VwdGlvbiAkZSkgewpmaWxlX3B1dF9jb250ZW50cygkbGluaywgJHRoaXMtPmdlbmVyYXRlVW5peHlQcm94eUNvZGUoJGJpblBhdGgsICRsaW5rKSk7Cn0KY2hkaXIoJGN3ZCk7Cn0KQGNobW9kKCRsaW5rLCAwNzc3ICYgfnVtYXNrKCkpOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiByZW1vdmVCaW5hcmllcyhQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CiRiaW5hcmllcyA9ICR0aGlzLT5nZXRCaW5hcmllcygkcGFja2FnZSk7CmlmICghJGJpbmFyaWVzKSB7CnJldHVybjsKfQpmb3JlYWNoICgkYmluYXJpZXMgYXMgJGJpbikgewokbGluayA9ICR0aGlzLT5iaW5EaXIuJy8nLmJhc2VuYW1lKCRiaW4pOwppZiAoaXNfbGluaygkbGluaykgfHwgZmlsZV9leGlzdHMoJGxpbmspKSB7CnVubGluaygkbGluayk7Cn0KaWYgKGZpbGVfZXhpc3RzKCRsaW5rLicuYmF0JykpIHsKdW5saW5rKCRsaW5rLicuYmF0Jyk7Cn0KfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZVZlbmRvckRpcigpCnsKJHRoaXMtPmZpbGVzeXN0ZW0tPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkdGhpcy0+dmVuZG9yRGlyKTsKJHRoaXMtPnZlbmRvckRpciA9IHJlYWxwYXRoKCR0aGlzLT52ZW5kb3JEaXIpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZUJpbkRpcigpCnsKJHRoaXMtPmZpbGVzeXN0ZW0tPmVuc3VyZURpcmVjdG9yeUV4aXN0cygkdGhpcy0+YmluRGlyKTsKJHRoaXMtPmJpbkRpciA9IHJlYWxwYXRoKCR0aGlzLT5iaW5EaXIpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2VuZXJhdGVXaW5kb3dzUHJveHlDb2RlKCRiaW4sICRsaW5rKQp7CiRiaW5QYXRoID0gJHRoaXMtPmZpbGVzeXN0ZW0tPmZpbmRTaG9ydGVzdFBhdGgoJGxpbmssICRiaW4pOwppZiAoJy5iYXQnID09PSBzdWJzdHIoJGJpbiwgLTQpIHx8ICcuZXhlJyA9PT0gc3Vic3RyKCRiaW4sIC00KSkgewokY2FsbGVyID0gJ2NhbGwnOwp9IGVsc2UgewokaGFuZGxlID0gZm9wZW4oJGJpbiwgJ3InKTsKJGxpbmUgPSBmZ2V0cygkaGFuZGxlKTsKZmNsb3NlKCRoYW5kbGUpOwppZiAocHJlZ19tYXRjaCgne14jIS8oPzp1c3IvYmluL2VudiApPyg/OlteL10rLykqKC4rKSR9bScsICRsaW5lLCAkbWF0Y2gpKSB7CiRjYWxsZXIgPSB0cmltKCRtYXRjaFsxXSk7Cn0gZWxzZSB7CiRjYWxsZXIgPSAncGhwJzsKfQp9CgpyZXR1cm4gIkBFQ0hPIE9GRlxyXG4iLgoiU0VUIEJJTl9UQVJHRVQ9JX5kcDAvIi50cmltKGVzY2FwZXNoZWxsYXJnKCRiaW5QYXRoKSwgJyInKS4iXHJcbiIuCiJ7JGNhbGxlcn0gXCIlQklOX1RBUkdFVCVcIiAlKlxyXG4iOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2VuZXJhdGVVbml4eVByb3h5Q29kZSgkYmluLCAkbGluaykKewokYmluUGF0aCA9ICR0aGlzLT5maWxlc3lzdGVtLT5maW5kU2hvcnRlc3RQYXRoKCRsaW5rLCAkYmluKTsKCnJldHVybiAiIyEvdXNyL2Jpbi9lbnYgc2hcbiIuCidTUkNfRElSPSJgcHdkYCInLiJcbiIuCidjZCAiYGRpcm5hbWUgIiQwImAiJy4iXG4iLgonY2QgJy5lc2NhcGVzaGVsbGFyZyhkaXJuYW1lKCRiaW5QYXRoKSkuIlxuIi4KJ0JJTl9UQVJHRVQ9ImBwd2RgLycuYmFzZW5hbWUoJGJpblBhdGgpLiJcIlxuIi4KJ2NkICIkU1JDX0RJUiInLiJcbiIuCiciJEJJTl9UQVJHRVQiICIkQCInLiJcbiI7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxJbnN0YWxsZXI7Cgp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxBbGlhc1BhY2thZ2U7CnVzZSBDb21wb3NlclxQbHVnaW5cUGx1Z2luSW5zdGFsbGVyOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvblxPcGVyYXRpb25JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uXEluc3RhbGxPcGVyYXRpb247CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uXFVwZGF0ZU9wZXJhdGlvbjsKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb25cVW5pbnN0YWxsT3BlcmF0aW9uOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvblxNYXJrQWxpYXNJbnN0YWxsZWRPcGVyYXRpb247CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uXE1hcmtBbGlhc1VuaW5zdGFsbGVkT3BlcmF0aW9uOwp1c2UgQ29tcG9zZXJcVXRpbFxTdHJlYW1Db250ZXh0RmFjdG9yeTsKCgoKCgoKCgpjbGFzcyBJbnN0YWxsYXRpb25NYW5hZ2VyCnsKcHJpdmF0ZSAkaW5zdGFsbGVycyA9IGFycmF5KCk7CnByaXZhdGUgJGNhY2hlID0gYXJyYXkoKTsKcHJpdmF0ZSAkbm90aWZpYWJsZVBhY2thZ2VzID0gYXJyYXkoKTsKCnB1YmxpYyBmdW5jdGlvbiByZXNldCgpCnsKJHRoaXMtPm5vdGlmaWFibGVQYWNrYWdlcyA9IGFycmF5KCk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZEluc3RhbGxlcihJbnN0YWxsZXJJbnRlcmZhY2UgJGluc3RhbGxlcikKewphcnJheV91bnNoaWZ0KCR0aGlzLT5pbnN0YWxsZXJzLCAkaW5zdGFsbGVyKTsKJHRoaXMtPmNhY2hlID0gYXJyYXkoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlSW5zdGFsbGVyKEluc3RhbGxlckludGVyZmFjZSAkaW5zdGFsbGVyKQp7CmlmIChmYWxzZSAhPT0gKCRrZXkgPSBhcnJheV9zZWFyY2goJGluc3RhbGxlciwgJHRoaXMtPmluc3RhbGxlcnMsIHRydWUpKSkgewphcnJheV9zcGxpY2UoJHRoaXMtPmluc3RhbGxlcnMsICRrZXksIDEpOwokdGhpcy0+Y2FjaGUgPSBhcnJheSgpOwp9Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZGlzYWJsZVBsdWdpbnMoKQp7CmZvcmVhY2ggKCR0aGlzLT5pbnN0YWxsZXJzIGFzICRpID0+ICRpbnN0YWxsZXIpIHsKaWYgKCEkaW5zdGFsbGVyIGluc3RhbmNlb2YgUGx1Z2luSW5zdGFsbGVyKSB7CmNvbnRpbnVlOwp9Cgp1bnNldCgkdGhpcy0+aW5zdGFsbGVyc1skaV0pOwp9Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnN0YWxsZXIoJHR5cGUpCnsKJHR5cGUgPSBzdHJ0b2xvd2VyKCR0eXBlKTsKCmlmIChpc3NldCgkdGhpcy0+Y2FjaGVbJHR5cGVdKSkgewpyZXR1cm4gJHRoaXMtPmNhY2hlWyR0eXBlXTsKfQoKZm9yZWFjaCAoJHRoaXMtPmluc3RhbGxlcnMgYXMgJGluc3RhbGxlcikgewppZiAoJGluc3RhbGxlci0+c3VwcG9ydHMoJHR5cGUpKSB7CnJldHVybiAkdGhpcy0+Y2FjaGVbJHR5cGVdID0gJGluc3RhbGxlcjsKfQp9Cgp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVW5rbm93biBpbnN0YWxsZXIgdHlwZTogJy4kdHlwZSk7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzUGFja2FnZUluc3RhbGxlZChJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlKQp7CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewpyZXR1cm4gJHJlcG8tPmhhc1BhY2thZ2UoJHBhY2thZ2UpICYmICR0aGlzLT5pc1BhY2thZ2VJbnN0YWxsZWQoJHJlcG8sICRwYWNrYWdlLT5nZXRBbGlhc09mKCkpOwp9CgpyZXR1cm4gJHRoaXMtPmdldEluc3RhbGxlcigkcGFja2FnZS0+Z2V0VHlwZSgpKS0+aXNJbnN0YWxsZWQoJHJlcG8sICRwYWNrYWdlKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGV4ZWN1dGUoUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgT3BlcmF0aW9uSW50ZXJmYWNlICRvcGVyYXRpb24pCnsKJG1ldGhvZCA9ICRvcGVyYXRpb24tPmdldEpvYlR5cGUoKTsKJHRoaXMtPiRtZXRob2QoJHJlcG8sICRvcGVyYXRpb24pOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaW5zdGFsbChSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBJbnN0YWxsT3BlcmF0aW9uICRvcGVyYXRpb24pCnsKJHBhY2thZ2UgPSAkb3BlcmF0aW9uLT5nZXRQYWNrYWdlKCk7CiRpbnN0YWxsZXIgPSAkdGhpcy0+Z2V0SW5zdGFsbGVyKCRwYWNrYWdlLT5nZXRUeXBlKCkpOwokaW5zdGFsbGVyLT5pbnN0YWxsKCRyZXBvLCAkcGFja2FnZSk7CiR0aGlzLT5tYXJrRm9yTm90aWZpY2F0aW9uKCRwYWNrYWdlKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVwZGF0ZShSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBVcGRhdGVPcGVyYXRpb24gJG9wZXJhdGlvbikKewokaW5pdGlhbCA9ICRvcGVyYXRpb24tPmdldEluaXRpYWxQYWNrYWdlKCk7CiR0YXJnZXQgPSAkb3BlcmF0aW9uLT5nZXRUYXJnZXRQYWNrYWdlKCk7CgokaW5pdGlhbFR5cGUgPSAkaW5pdGlhbC0+Z2V0VHlwZSgpOwokdGFyZ2V0VHlwZSA9ICR0YXJnZXQtPmdldFR5cGUoKTsKCmlmICgkaW5pdGlhbFR5cGUgPT09ICR0YXJnZXRUeXBlKSB7CiRpbnN0YWxsZXIgPSAkdGhpcy0+Z2V0SW5zdGFsbGVyKCRpbml0aWFsVHlwZSk7CiRpbnN0YWxsZXItPnVwZGF0ZSgkcmVwbywgJGluaXRpYWwsICR0YXJnZXQpOwokdGhpcy0+bWFya0Zvck5vdGlmaWNhdGlvbigkdGFyZ2V0KTsKfSBlbHNlIHsKJHRoaXMtPmdldEluc3RhbGxlcigkaW5pdGlhbFR5cGUpLT51bmluc3RhbGwoJHJlcG8sICRpbml0aWFsKTsKJHRoaXMtPmdldEluc3RhbGxlcigkdGFyZ2V0VHlwZSktPmluc3RhbGwoJHJlcG8sICR0YXJnZXQpOwp9Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiB1bmluc3RhbGwoUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgVW5pbnN0YWxsT3BlcmF0aW9uICRvcGVyYXRpb24pCnsKJHBhY2thZ2UgPSAkb3BlcmF0aW9uLT5nZXRQYWNrYWdlKCk7CiRpbnN0YWxsZXIgPSAkdGhpcy0+Z2V0SW5zdGFsbGVyKCRwYWNrYWdlLT5nZXRUeXBlKCkpOwokaW5zdGFsbGVyLT51bmluc3RhbGwoJHJlcG8sICRwYWNrYWdlKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG1hcmtBbGlhc0luc3RhbGxlZChSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBNYXJrQWxpYXNJbnN0YWxsZWRPcGVyYXRpb24gJG9wZXJhdGlvbikKewokcGFja2FnZSA9ICRvcGVyYXRpb24tPmdldFBhY2thZ2UoKTsKCmlmICghJHJlcG8tPmhhc1BhY2thZ2UoJHBhY2thZ2UpKSB7CiRyZXBvLT5hZGRQYWNrYWdlKGNsb25lICRwYWNrYWdlKTsKfQp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbWFya0FsaWFzVW5pbnN0YWxsZWQoUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgTWFya0FsaWFzVW5pbnN0YWxsZWRPcGVyYXRpb24gJG9wZXJhdGlvbikKewokcGFja2FnZSA9ICRvcGVyYXRpb24tPmdldFBhY2thZ2UoKTsKCiRyZXBvLT5yZW1vdmVQYWNrYWdlKCRwYWNrYWdlKTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluc3RhbGxQYXRoKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJGluc3RhbGxlciA9ICR0aGlzLT5nZXRJbnN0YWxsZXIoJHBhY2thZ2UtPmdldFR5cGUoKSk7CgpyZXR1cm4gJGluc3RhbGxlci0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpOwp9CgpwdWJsaWMgZnVuY3Rpb24gbm90aWZ5SW5zdGFsbHMoKQp7CmZvcmVhY2ggKCR0aGlzLT5ub3RpZmlhYmxlUGFja2FnZXMgYXMgJHJlcG9VcmwgPT4gJHBhY2thZ2VzKSB7CgogaWYgKHN0cnBvcygkcmVwb1VybCwgJyVwYWNrYWdlJScpKSB7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewokdXJsID0gc3RyX3JlcGxhY2UoJyVwYWNrYWdlJScsICRwYWNrYWdlLT5nZXRQcmV0dHlOYW1lKCksICRyZXBvVXJsKTsKCiRwYXJhbXMgPSBhcnJheSgKJ3ZlcnNpb24nID0+ICRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCksCid2ZXJzaW9uX25vcm1hbGl6ZWQnID0+ICRwYWNrYWdlLT5nZXRWZXJzaW9uKCksCik7CiRvcHRzID0gYXJyYXkoJ2h0dHAnID0+CmFycmF5KAonbWV0aG9kJyA9PiAnUE9TVCcsCidoZWFkZXInID0+IGFycmF5KCdDb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCcpLAonY29udGVudCcgPT4gaHR0cF9idWlsZF9xdWVyeSgkcGFyYW1zLCAnJywgJyYnKSwKJ3RpbWVvdXQnID0+IDMsCikKKTsKCiRjb250ZXh0ID0gU3RyZWFtQ29udGV4dEZhY3Rvcnk6OmdldENvbnRleHQoJHVybCwgJG9wdHMpOwpAZmlsZV9nZXRfY29udGVudHMoJHVybCwgZmFsc2UsICRjb250ZXh0KTsKfQoKY29udGludWU7Cn0KCiRwb3N0RGF0YSA9IGFycmF5KCdkb3dubG9hZHMnID0+IGFycmF5KCkpOwpmb3JlYWNoICgkcGFja2FnZXMgYXMgJHBhY2thZ2UpIHsKJHBvc3REYXRhWydkb3dubG9hZHMnXVtdID0gYXJyYXkoCiduYW1lJyA9PiAkcGFja2FnZS0+Z2V0UHJldHR5TmFtZSgpLAondmVyc2lvbicgPT4gJHBhY2thZ2UtPmdldFZlcnNpb24oKSwKKTsKfQoKJG9wdHMgPSBhcnJheSgnaHR0cCcgPT4KYXJyYXkoCidtZXRob2QnID0+ICdQT1NUJywKJ2hlYWRlcicgPT4gYXJyYXkoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbicpLAonY29udGVudCcgPT4ganNvbl9lbmNvZGUoJHBvc3REYXRhKSwKJ3RpbWVvdXQnID0+IDYsCikKKTsKCiRjb250ZXh0ID0gU3RyZWFtQ29udGV4dEZhY3Rvcnk6OmdldENvbnRleHQoJHJlcG9VcmwsICRvcHRzKTsKQGZpbGVfZ2V0X2NvbnRlbnRzKCRyZXBvVXJsLCBmYWxzZSwgJGNvbnRleHQpOwp9CgokdGhpcy0+cmVzZXQoKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBtYXJrRm9yTm90aWZpY2F0aW9uKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKaWYgKCRwYWNrYWdlLT5nZXROb3RpZmljYXRpb25VcmwoKSkgewokdGhpcy0+bm90aWZpYWJsZVBhY2thZ2VzWyRwYWNrYWdlLT5nZXROb3RpZmljYXRpb25VcmwoKV1bJHBhY2thZ2UtPmdldE5hbWUoKV0gPSAkcGFja2FnZTsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSW5zdGFsbGVyOwoKdXNlIENvbXBvc2VyXENvbXBvc2VyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlOwp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxSZXBvc2l0b3J5XEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2U7CnVzZSBDb21wb3NlclxQYWNrYWdlXFBhY2thZ2VJbnRlcmZhY2U7CgoKCgoKCgpjbGFzcyBQbHVnaW5JbnN0YWxsZXIgZXh0ZW5kcyBMaWJyYXJ5SW5zdGFsbGVyCnsKcHJpdmF0ZSAkaW5zdGFsbGF0aW9uTWFuYWdlcjsKcHJpdmF0ZSBzdGF0aWMgJGNsYXNzQ291bnRlciA9IDA7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29tcG9zZXIgJGNvbXBvc2VyLCAkdHlwZSA9ICdsaWJyYXJ5JykKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRpbywgJGNvbXBvc2VyLCAnY29tcG9zZXItcGx1Z2luJyk7CiR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyID0gJGNvbXBvc2VyLT5nZXRJbnN0YWxsYXRpb25NYW5hZ2VyKCk7Cgp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc3VwcG9ydHMoJHBhY2thZ2VUeXBlKQp7CnJldHVybiAkcGFja2FnZVR5cGUgPT09ICdjb21wb3Nlci1wbHVnaW4nIHx8ICRwYWNrYWdlVHlwZSA9PT0gJ2NvbXBvc2VyLWluc3RhbGxlcic7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpbnN0YWxsKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJGV4dHJhID0gJHBhY2thZ2UtPmdldEV4dHJhKCk7CmlmIChlbXB0eSgkZXh0cmFbJ2NsYXNzJ10pKSB7CnRocm93IG5ldyBcVW5leHBlY3RlZFZhbHVlRXhjZXB0aW9uKCdFcnJvciB3aGlsZSBpbnN0YWxsaW5nICcuJHBhY2thZ2UtPmdldFByZXR0eU5hbWUoKS4nLCBjb21wb3Nlci1wbHVnaW4gcGFja2FnZXMgc2hvdWxkIGhhdmUgYSBjbGFzcyBkZWZpbmVkIGluIHRoZWlyIGV4dHJhIGtleSB0byBiZSB1c2FibGUuJyk7Cn0KCnBhcmVudDo6aW5zdGFsbCgkcmVwbywgJHBhY2thZ2UpOwokdGhpcy0+Y29tcG9zZXItPmdldFBsdWdpbk1hbmFnZXIoKS0+cmVnaXN0ZXJQYWNrYWdlKCRwYWNrYWdlKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVwZGF0ZShJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlICRyZXBvLCBQYWNrYWdlSW50ZXJmYWNlICRpbml0aWFsLCBQYWNrYWdlSW50ZXJmYWNlICR0YXJnZXQpCnsKJGV4dHJhID0gJHRhcmdldC0+Z2V0RXh0cmEoKTsKaWYgKGVtcHR5KCRleHRyYVsnY2xhc3MnXSkpIHsKdGhyb3cgbmV3IFxVbmV4cGVjdGVkVmFsdWVFeGNlcHRpb24oJ0Vycm9yIHdoaWxlIGluc3RhbGxpbmcgJy4kdGFyZ2V0LT5nZXRQcmV0dHlOYW1lKCkuJywgY29tcG9zZXItcGx1Z2luIHBhY2thZ2VzIHNob3VsZCBoYXZlIGEgY2xhc3MgZGVmaW5lZCBpbiB0aGVpciBleHRyYSBrZXkgdG8gYmUgdXNhYmxlLicpOwp9CgpwYXJlbnQ6OnVwZGF0ZSgkcmVwbywgJGluaXRpYWwsICR0YXJnZXQpOwokdGhpcy0+Y29tcG9zZXItPmdldFBsdWdpbk1hbmFnZXIoKS0+cmVnaXN0ZXJQYWNrYWdlKCR0YXJnZXQpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcSW5zdGFsbGVyOwoKdXNlIENvbXBvc2VyXFBhY2thZ2VcUGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZTsKCgoKCgoKCmludGVyZmFjZSBJbnN0YWxsZXJJbnRlcmZhY2UKewoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc3VwcG9ydHMoJHBhY2thZ2VUeXBlKTsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzSW5zdGFsbGVkKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGluc3RhbGwoSW5zdGFsbGVkUmVwb3NpdG9yeUludGVyZmFjZSAkcmVwbywgUGFja2FnZUludGVyZmFjZSAkcGFja2FnZSk7CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdXBkYXRlKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJGluaXRpYWwsIFBhY2thZ2VJbnRlcmZhY2UgJHRhcmdldCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdW5pbnN0YWxsKEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJHJlcG8sIFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluc3RhbGxQYXRoKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpOwp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXENvbnNvbGU7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxBcHBsaWNhdGlvbiBhcyBCYXNlQXBwbGljYXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dE9wdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XENvbnNvbGVPdXRwdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXI7CnVzZSBDb21wb3NlclxDb21tYW5kOwp1c2UgQ29tcG9zZXJcQ29tbWFuZFxIZWxwZXJcRGlhbG9nSGVscGVyOwp1c2UgQ29tcG9zZXJcQ29tcG9zZXI7CnVzZSBDb21wb3NlclxGYWN0b3J5Owp1c2UgQ29tcG9zZXJcSU9cSU9JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxJT1xDb25zb2xlSU87CnVzZSBDb21wb3NlclxKc29uXEpzb25WYWxpZGF0aW9uRXhjZXB0aW9uOwp1c2UgQ29tcG9zZXJcVXRpbFxFcnJvckhhbmRsZXI7CgoKCgoKCgoKY2xhc3MgQXBwbGljYXRpb24gZXh0ZW5kcyBCYXNlQXBwbGljYXRpb24KewoKCgpwcm90ZWN0ZWQgJGNvbXBvc2VyOwoKCgoKcHJvdGVjdGVkICRpbzsKCnByaXZhdGUgc3RhdGljICRsb2dvID0gJyAgIF9fX19fXwogIC8gX19fXy9fX18gIF9fX18gX19fICBfX19fICBfX19fICBfX19fX19fXyAgX19fX18KIC8gLyAgIC8gX18gXC8gX18gYF9fIFwvIF9fIFwvIF9fIFwvIF9fXy8gXyBcLyBfX18vCi8gL19fXy8gL18vIC8gLyAvIC8gLyAvIC9fLyAvIC9fLyAoX18gICkgIF9fLyAvClxfX19fL1xfX19fL18vIC9fLyAvXy8gLl9fXy9cX19fXy9fX19fL1xfX18vXy8KICAgICAgICAgICAgICAgICAgICAvXy8KJzsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCnsKaWYgKGZ1bmN0aW9uX2V4aXN0cygnaW5pX3NldCcpKSB7CmluaV9zZXQoJ3hkZWJ1Zy5zaG93X2V4Y2VwdGlvbl90cmFjZScsIGZhbHNlKTsKaW5pX3NldCgneGRlYnVnLnNjcmVhbScsIGZhbHNlKTsKCn0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnZGF0ZV9kZWZhdWx0X3RpbWV6b25lX3NldCcpICYmIGZ1bmN0aW9uX2V4aXN0cygnZGF0ZV9kZWZhdWx0X3RpbWV6b25lX2dldCcpKSB7CmRhdGVfZGVmYXVsdF90aW1lem9uZV9zZXQoQGRhdGVfZGVmYXVsdF90aW1lem9uZV9nZXQoKSk7Cn0KCkVycm9ySGFuZGxlcjo6cmVnaXN0ZXIoKTsKcGFyZW50OjpfX2NvbnN0cnVjdCgnQ29tcG9zZXInLCBDb21wb3Nlcjo6VkVSU0lPTik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBydW4oSW5wdXRJbnRlcmZhY2UgJGlucHV0ID0gbnVsbCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQgPSBudWxsKQp7CmlmIChudWxsID09PSAkb3V0cHV0KSB7CiRzdHlsZXMgPSBGYWN0b3J5OjpjcmVhdGVBZGRpdGlvbmFsU3R5bGVzKCk7CiRmb3JtYXR0ZXIgPSBuZXcgT3V0cHV0Rm9ybWF0dGVyKG51bGwsICRzdHlsZXMpOwokb3V0cHV0ID0gbmV3IENvbnNvbGVPdXRwdXQoQ29uc29sZU91dHB1dDo6VkVSQk9TSVRZX05PUk1BTCwgbnVsbCwgJGZvcm1hdHRlcik7Cn0KCnJldHVybiBwYXJlbnQ6OnJ1bigkaW5wdXQsICRvdXRwdXQpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZG9SdW4oSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewokdGhpcy0+aW8gPSBuZXcgQ29uc29sZUlPKCRpbnB1dCwgJG91dHB1dCwgJHRoaXMtPmdldEhlbHBlclNldCgpKTsKCmlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjMuMicsICc8JykpIHsKJG91dHB1dC0+d3JpdGVsbignPHdhcm5pbmc+Q29tcG9zZXIgb25seSBvZmZpY2lhbGx5IHN1cHBvcnRzIFBIUCA1LjMuMiBhbmQgYWJvdmUsIHlvdSB3aWxsIG1vc3QgbGlrZWx5IGVuY291bnRlciBwcm9ibGVtcyB3aXRoIHlvdXIgUEhQICcuUEhQX1ZFUlNJT04uJywgdXBncmFkaW5nIGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkLjwvd2FybmluZz4nKTsKfQoKaWYgKGRlZmluZWQoJ0NPTVBPU0VSX0RFVl9XQVJOSU5HX1RJTUUnKSAmJiAkdGhpcy0+Z2V0Q29tbWFuZE5hbWUoJGlucHV0KSAhPT0gJ3NlbGYtdXBkYXRlJyAmJiAkdGhpcy0+Z2V0Q29tbWFuZE5hbWUoJGlucHV0KSAhPT0gJ3NlbGZ1cGRhdGUnKSB7CmlmICh0aW1lKCkgPiBDT01QT1NFUl9ERVZfV0FSTklOR19USU1FKSB7CiRvdXRwdXQtPndyaXRlbG4oc3ByaW50ZignPHdhcm5pbmc+V2FybmluZzogVGhpcyBkZXZlbG9wbWVudCBidWlsZCBvZiBjb21wb3NlciBpcyBvdmVyIDMwIGRheXMgb2xkLiBJdCBpcyByZWNvbW1lbmRlZCB0byB1cGRhdGUgaXQgYnkgcnVubmluZyAiJXMgc2VsZi11cGRhdGUiIHRvIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24uPC93YXJuaW5nPicsICRfU0VSVkVSWydQSFBfU0VMRiddKSk7Cn0KfQoKaWYgKGdldGVudignQ09NUE9TRVJfTk9fSU5URVJBQ1RJT04nKSkgewokaW5wdXQtPnNldEludGVyYWN0aXZlKGZhbHNlKTsKfQoKaWYgKCRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctLXByb2ZpbGUnKSkgewokc3RhcnRUaW1lID0gbWljcm90aW1lKHRydWUpOwokdGhpcy0+aW8tPmVuYWJsZURlYnVnZ2luZygkc3RhcnRUaW1lKTsKfQoKaWYgKCRuZXdXb3JrRGlyID0gJHRoaXMtPmdldE5ld1dvcmtpbmdEaXIoJGlucHV0KSkgewokb2xkV29ya2luZ0RpciA9IGdldGN3ZCgpOwpjaGRpcigkbmV3V29ya0Rpcik7Cn0KCiRyZXN1bHQgPSBwYXJlbnQ6OmRvUnVuKCRpbnB1dCwgJG91dHB1dCk7CgppZiAoaXNzZXQoJG9sZFdvcmtpbmdEaXIpKSB7CmNoZGlyKCRvbGRXb3JraW5nRGlyKTsKfQoKaWYgKGlzc2V0KCRzdGFydFRpbWUpKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxpbmZvPk1lbW9yeSB1c2FnZTogJy5yb3VuZChtZW1vcnlfZ2V0X3VzYWdlKCkgLyAxMDI0IC8gMTAyNCwgMikuJ01CIChwZWFrOiAnLnJvdW5kKG1lbW9yeV9nZXRfcGVha191c2FnZSgpIC8gMTAyNCAvIDEwMjQsIDIpLidNQiksIHRpbWU6ICcucm91bmQobWljcm90aW1lKHRydWUpIC0gJHN0YXJ0VGltZSwgMikuJ3MnKTsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldE5ld1dvcmtpbmdEaXIoSW5wdXRJbnRlcmZhY2UgJGlucHV0KQp7CiR3b3JraW5nRGlyID0gJGlucHV0LT5nZXRQYXJhbWV0ZXJPcHRpb24oYXJyYXkoJy0td29ya2luZy1kaXInLCAnLWQnKSk7CmlmIChmYWxzZSAhPT0gJHdvcmtpbmdEaXIgJiYgIWlzX2Rpcigkd29ya2luZ0RpcikpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdJbnZhbGlkIHdvcmtpbmcgZGlyZWN0b3J5IHNwZWNpZmllZC4nKTsKfQoKcmV0dXJuICR3b3JraW5nRGlyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVuZGVyRXhjZXB0aW9uKCRleGNlcHRpb24sICRvdXRwdXQpCnsKdHJ5IHsKJGNvbXBvc2VyID0gJHRoaXMtPmdldENvbXBvc2VyKGZhbHNlKTsKaWYgKCRjb21wb3NlcikgewokY29uZmlnID0gJGNvbXBvc2VyLT5nZXRDb25maWcoKTsKCiRtaW5TcGFjZUZyZWUgPSAxMDI0KjEwMjQ7CmlmICgoKCRkZiA9IEBkaXNrX2ZyZWVfc3BhY2UoJGRpciA9ICRjb25maWctPmdldCgnaG9tZScpKSkgIT09IGZhbHNlICYmICRkZiA8ICRtaW5TcGFjZUZyZWUpCnx8ICgoJGRmID0gQGRpc2tfZnJlZV9zcGFjZSgkZGlyID0gJGNvbmZpZy0+Z2V0KCd2ZW5kb3ItZGlyJykpKSAhPT0gZmFsc2UgJiYgJGRmIDwgJG1pblNwYWNlRnJlZSkKKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxlcnJvcj5UaGUgZGlzayBob3N0aW5nICcuJGRpci4nIGlzIGZ1bGwsIHRoaXMgbWF5IGJlIHRoZSBjYXVzZSBvZiB0aGUgZm9sbG93aW5nIGV4Y2VwdGlvbjwvZXJyb3I+Jyk7Cn0KfQp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7fQoKcmV0dXJuIHBhcmVudDo6cmVuZGVyRXhjZXB0aW9uKCRleGNlcHRpb24sICRvdXRwdXQpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29tcG9zZXIoJHJlcXVpcmVkID0gdHJ1ZSwgJGRpc2FibGVQbHVnaW5zID0gZmFsc2UpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5jb21wb3Nlcikgewp0cnkgewokdGhpcy0+Y29tcG9zZXIgPSBGYWN0b3J5OjpjcmVhdGUoJHRoaXMtPmlvLCBudWxsLCAkZGlzYWJsZVBsdWdpbnMpOwp9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CmlmICgkcmVxdWlyZWQpIHsKJHRoaXMtPmlvLT53cml0ZSgkZS0+Z2V0TWVzc2FnZSgpKTsKZXhpdCgxKTsKfQp9IGNhdGNoIChKc29uVmFsaWRhdGlvbkV4Y2VwdGlvbiAkZSkgewokZXJyb3JzID0gJyAtICcgLiBpbXBsb2RlKFBIUF9FT0wgLiAnIC0gJywgJGUtPmdldEVycm9ycygpKTsKJG1lc3NhZ2UgPSAkZS0+Z2V0TWVzc2FnZSgpIC4gJzonIC4gUEhQX0VPTCAuICRlcnJvcnM7CnRocm93IG5ldyBKc29uVmFsaWRhdGlvbkV4Y2VwdGlvbigkbWVzc2FnZSk7Cn0KCn0KCnJldHVybiAkdGhpcy0+Y29tcG9zZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJTygpCnsKcmV0dXJuICR0aGlzLT5pbzsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEhlbHAoKQp7CnJldHVybiBzZWxmOjokbG9nbyAuIHBhcmVudDo6Z2V0SGVscCgpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RGVmYXVsdENvbW1hbmRzKCkKewokY29tbWFuZHMgPSBwYXJlbnQ6OmdldERlZmF1bHRDb21tYW5kcygpOwokY29tbWFuZHNbXSA9IG5ldyBDb21tYW5kXEFib3V0Q29tbWFuZCgpOwokY29tbWFuZHNbXSA9IG5ldyBDb21tYW5kXENvbmZpZ0NvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxEZXBlbmRzQ29tbWFuZCgpOwokY29tbWFuZHNbXSA9IG5ldyBDb21tYW5kXEluaXRDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcSW5zdGFsbENvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxDcmVhdGVQcm9qZWN0Q29tbWFuZCgpOwokY29tbWFuZHNbXSA9IG5ldyBDb21tYW5kXFVwZGF0ZUNvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxTZWFyY2hDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcVmFsaWRhdGVDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcU2hvd0NvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxSZXF1aXJlQ29tbWFuZCgpOwokY29tbWFuZHNbXSA9IG5ldyBDb21tYW5kXER1bXBBdXRvbG9hZENvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxTdGF0dXNDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcQXJjaGl2ZUNvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxEaWFnbm9zZUNvbW1hbmQoKTsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxSdW5TY3JpcHRDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcTGljZW5zZXNDb21tYW5kKCk7CiRjb21tYW5kc1tdID0gbmV3IENvbW1hbmRcR2xvYmFsQ29tbWFuZCgpOwoKaWYgKCdwaGFyOicgPT09IHN1YnN0cihfX0ZJTEVfXywgMCwgNSkpIHsKJGNvbW1hbmRzW10gPSBuZXcgQ29tbWFuZFxTZWxmVXBkYXRlQ29tbWFuZCgpOwp9CgpyZXR1cm4gJGNvbW1hbmRzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TG9uZ1ZlcnNpb24oKQp7CnJldHVybiBwYXJlbnQ6OmdldExvbmdWZXJzaW9uKCkgLiAnICcgLiBDb21wb3Nlcjo6UkVMRUFTRV9EQVRFOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RGVmYXVsdElucHV0RGVmaW5pdGlvbigpCnsKJGRlZmluaXRpb24gPSBwYXJlbnQ6OmdldERlZmF1bHRJbnB1dERlZmluaXRpb24oKTsKJGRlZmluaXRpb24tPmFkZE9wdGlvbihuZXcgSW5wdXRPcHRpb24oJy0tcHJvZmlsZScsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzcGxheSB0aW1pbmcgYW5kIG1lbW9yeSB1c2FnZSBpbmZvcm1hdGlvbicpKTsKJGRlZmluaXRpb24tPmFkZE9wdGlvbihuZXcgSW5wdXRPcHRpb24oJy0td29ya2luZy1kaXInLCAnLWQnLCBJbnB1dE9wdGlvbjo6VkFMVUVfUkVRVUlSRUQsICdJZiBzcGVjaWZpZWQsIHVzZSB0aGUgZ2l2ZW4gZGlyZWN0b3J5IGFzIHdvcmtpbmcgZGlyZWN0b3J5LicpKTsKCnJldHVybiAkZGVmaW5pdGlvbjsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRIZWxwZXJTZXQoKQp7CiRoZWxwZXJTZXQgPSBwYXJlbnQ6OmdldERlZmF1bHRIZWxwZXJTZXQoKTsKCiRoZWxwZXJTZXQtPnNldChuZXcgRGlhbG9nSGVscGVyKCkpOwoKcmV0dXJuICRoZWxwZXJTZXQ7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxDb25zb2xlOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyXE91dHB1dEZvcm1hdHRlcjsKCgoKCmNsYXNzIEh0bWxPdXRwdXRGb3JtYXR0ZXIgZXh0ZW5kcyBPdXRwdXRGb3JtYXR0ZXIKewpwcml2YXRlIHN0YXRpYyAkYXZhaWxhYmxlRm9yZWdyb3VuZENvbG9ycyA9IGFycmF5KAozMCA9PiAnYmxhY2snLAozMSA9PiAncmVkJywKMzIgPT4gJ2dyZWVuJywKMzMgPT4gJ3llbGxvdycsCjM0ID0+ICdibHVlJywKMzUgPT4gJ21hZ2VudGEnLAozNiA9PiAnY3lhbicsCjM3ID0+ICd3aGl0ZScKKTsKcHJpdmF0ZSBzdGF0aWMgJGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnMgPSBhcnJheSgKNDAgPT4gJ2JsYWNrJywKNDEgPT4gJ3JlZCcsCjQyID0+ICdncmVlbicsCjQzID0+ICd5ZWxsb3cnLAo0NCA9PiAnYmx1ZScsCjQ1ID0+ICdtYWdlbnRhJywKNDYgPT4gJ2N5YW4nLAo0NyA9PiAnd2hpdGUnCik7CnByaXZhdGUgc3RhdGljICRhdmFpbGFibGVPcHRpb25zID0gYXJyYXkoCjEgPT4gJ2JvbGQnLAo0ID0+ICd1bmRlcnNjb3JlJywKCiAKIAogKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkc3R5bGVzID0gYXJyYXkoKSkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KHRydWUsICRzdHlsZXMpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRtZXNzYWdlKQp7CiRmb3JtYXR0ZWQgPSBwYXJlbnQ6OmZvcm1hdCgkbWVzc2FnZSk7CgpyZXR1cm4gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKCJ7XDAzM1xbKFswLTk7XSspbSguKj8pXDAzM1xbMG19cyIsIGFycmF5KCR0aGlzLCAnZm9ybWF0SHRtbCcpLCAkZm9ybWF0dGVkKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBmb3JtYXRIdG1sKCRtYXRjaGVzKQp7CiRvdXQgPSAnPHNwYW4gc3R5bGU9Iic7CmZvcmVhY2ggKGV4cGxvZGUoJzsnLCAkbWF0Y2hlc1sxXSkgYXMgJGNvZGUpIHsKaWYgKGlzc2V0KHNlbGY6OiRhdmFpbGFibGVGb3JlZ3JvdW5kQ29sb3JzWyRjb2RlXSkpIHsKJG91dCAuPSAnY29sb3I6Jy5zZWxmOjokYXZhaWxhYmxlRm9yZWdyb3VuZENvbG9yc1skY29kZV0uJzsnOwp9IGVsc2VpZiAoaXNzZXQoc2VsZjo6JGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnNbJGNvZGVdKSkgewokb3V0IC49ICdiYWNrZ3JvdW5kLWNvbG9yOicuc2VsZjo6JGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnNbJGNvZGVdLic7JzsKfSBlbHNlaWYgKGlzc2V0KHNlbGY6OiRhdmFpbGFibGVPcHRpb25zWyRjb2RlXSkpIHsKc3dpdGNoIChzZWxmOjokYXZhaWxhYmxlT3B0aW9uc1skY29kZV0pIHsKY2FzZSAnYm9sZCc6CiRvdXQgLj0gJ2ZvbnQtd2VpZ2h0OmJvbGQ7JzsKYnJlYWs7CgpjYXNlICd1bmRlcnNjb3JlJzoKJG91dCAuPSAndGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTsnOwpicmVhazsKfQp9Cn0KCnJldHVybiAkb3V0IC4gJyI+Jy4kbWF0Y2hlc1syXS4nPC9zcGFuPic7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCm5hbWVzcGFjZSBDb21wb3NlclxBdXRvbG9hZDsKCnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwp1c2UgQ29tcG9zZXJcSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXI7CnVzZSBDb21wb3NlclxJT1xJT0ludGVyZmFjZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxJbnN0YWxsZWRSZXBvc2l0b3J5SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcVXRpbFxGaWxlc3lzdGVtOwp1c2UgQ29tcG9zZXJcU2NyaXB0XFNjcmlwdEV2ZW50czsKCgoKCgpjbGFzcyBBdXRvbG9hZEdlbmVyYXRvcgp7CgoKCnByaXZhdGUgJGV2ZW50RGlzcGF0Y2hlcjsKCgoKCnByaXZhdGUgJGlvOwoKcHJpdmF0ZSAkZGV2TW9kZSA9IGZhbHNlOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEV2ZW50RGlzcGF0Y2hlciAkZXZlbnREaXNwYXRjaGVyLCBJT0ludGVyZmFjZSAkaW8gPSBudWxsKQp7CiR0aGlzLT5ldmVudERpc3BhdGNoZXIgPSAkZXZlbnREaXNwYXRjaGVyOwokdGhpcy0+aW8gPSAkaW87Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXREZXZNb2RlKCRkZXZNb2RlID0gdHJ1ZSkKewokdGhpcy0+ZGV2TW9kZSA9IChib29sZWFuKSAkZGV2TW9kZTsKfQoKcHVibGljIGZ1bmN0aW9uIGR1bXAoQ29uZmlnICRjb25maWcsIEluc3RhbGxlZFJlcG9zaXRvcnlJbnRlcmZhY2UgJGxvY2FsUmVwbywgUGFja2FnZUludGVyZmFjZSAkbWFpblBhY2thZ2UsIEluc3RhbGxhdGlvbk1hbmFnZXIgJGluc3RhbGxhdGlvbk1hbmFnZXIsICR0YXJnZXREaXIsICRzY2FuUHNyMFBhY2thZ2VzID0gZmFsc2UsICRzdWZmaXggPSAnJykKewokdGhpcy0+ZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFNjcmlwdChTY3JpcHRFdmVudHM6OlBSRV9BVVRPTE9BRF9EVU1QLCAkdGhpcy0+ZGV2TW9kZSk7CgokZmlsZXN5c3RlbSA9IG5ldyBGaWxlc3lzdGVtKCk7CiRmaWxlc3lzdGVtLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoJGNvbmZpZy0+Z2V0KCd2ZW5kb3ItZGlyJykpOwokYmFzZVBhdGggPSAkZmlsZXN5c3RlbS0+bm9ybWFsaXplUGF0aChyZWFscGF0aChnZXRjd2QoKSkpOwokdmVuZG9yUGF0aCA9ICRmaWxlc3lzdGVtLT5ub3JtYWxpemVQYXRoKHJlYWxwYXRoKCRjb25maWctPmdldCgndmVuZG9yLWRpcicpKSk7CiR1c2VHbG9iYWxJbmNsdWRlUGF0aCA9IChib29sKSAkY29uZmlnLT5nZXQoJ3VzZS1pbmNsdWRlLXBhdGgnKTsKJHByZXBlbmRBdXRvbG9hZGVyID0gJGNvbmZpZy0+Z2V0KCdwcmVwZW5kLWF1dG9sb2FkZXInKSA9PT0gZmFsc2UgPyAnZmFsc2UnIDogJ3RydWUnOwokdGFyZ2V0RGlyID0gJHZlbmRvclBhdGguJy8nLiR0YXJnZXREaXI7CiRmaWxlc3lzdGVtLT5lbnN1cmVEaXJlY3RvcnlFeGlzdHMoJHRhcmdldERpcik7CgokdmVuZG9yUGF0aENvZGUgPSAkZmlsZXN5c3RlbS0+ZmluZFNob3J0ZXN0UGF0aENvZGUocmVhbHBhdGgoJHRhcmdldERpciksICR2ZW5kb3JQYXRoLCB0cnVlKTsKJHZlbmRvclBhdGhDb2RlNTIgPSBzdHJfcmVwbGFjZSgnX19ESVJfXycsICdkaXJuYW1lKF9fRklMRV9fKScsICR2ZW5kb3JQYXRoQ29kZSk7CiR2ZW5kb3JQYXRoVG9UYXJnZXREaXJDb2RlID0gJGZpbGVzeXN0ZW0tPmZpbmRTaG9ydGVzdFBhdGhDb2RlKCR2ZW5kb3JQYXRoLCByZWFscGF0aCgkdGFyZ2V0RGlyKSwgdHJ1ZSk7CgokYXBwQmFzZURpckNvZGUgPSAkZmlsZXN5c3RlbS0+ZmluZFNob3J0ZXN0UGF0aENvZGUoJHZlbmRvclBhdGgsICRiYXNlUGF0aCwgdHJ1ZSk7CiRhcHBCYXNlRGlyQ29kZSA9IHN0cl9yZXBsYWNlKCdfX0RJUl9fJywgJyR2ZW5kb3JEaXInLCAkYXBwQmFzZURpckNvZGUpOwoKJG5hbWVzcGFjZXNGaWxlID0gPDw8RU9GCjw/cGhwCgovLyBhdXRvbG9hZF9uYW1lc3BhY2VzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpcJHZlbmRvckRpciA9ICR2ZW5kb3JQYXRoQ29kZTUyOwpcJGJhc2VEaXIgPSAkYXBwQmFzZURpckNvZGU7CgpyZXR1cm4gYXJyYXkoCgpFT0Y7CgokcHNyNEZpbGUgPSA8PDxFT0YKPD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKClwkdmVuZG9yRGlyID0gJHZlbmRvclBhdGhDb2RlNTI7ClwkYmFzZURpciA9ICRhcHBCYXNlRGlyQ29kZTsKCnJldHVybiBhcnJheSgKCkVPRjsKCgogJHBhY2thZ2VNYXAgPSAkdGhpcy0+YnVpbGRQYWNrYWdlTWFwKCRpbnN0YWxsYXRpb25NYW5hZ2VyLCAkbWFpblBhY2thZ2UsICRsb2NhbFJlcG8tPmdldENhbm9uaWNhbFBhY2thZ2VzKCkpOwokYXV0b2xvYWRzID0gJHRoaXMtPnBhcnNlQXV0b2xvYWRzKCRwYWNrYWdlTWFwLCAkbWFpblBhY2thZ2UpOwoKCiBmb3JlYWNoICgkYXV0b2xvYWRzWydwc3ItMCddIGFzICRuYW1lc3BhY2UgPT4gJHBhdGhzKSB7CiRleHBvcnRlZFBhdGhzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHBhdGhzIGFzICRwYXRoKSB7CiRleHBvcnRlZFBhdGhzW10gPSAkdGhpcy0+Z2V0UGF0aENvZGUoJGZpbGVzeXN0ZW0sICRiYXNlUGF0aCwgJHZlbmRvclBhdGgsICRwYXRoKTsKfQokZXhwb3J0ZWRQcmVmaXggPSB2YXJfZXhwb3J0KCRuYW1lc3BhY2UsIHRydWUpOwokbmFtZXNwYWNlc0ZpbGUgLj0gIiAgICAkZXhwb3J0ZWRQcmVmaXggPT4gIjsKJG5hbWVzcGFjZXNGaWxlIC49ICJhcnJheSgiLmltcGxvZGUoJywgJywgJGV4cG9ydGVkUGF0aHMpLiIpLFxuIjsKfQokbmFtZXNwYWNlc0ZpbGUgLj0gIik7XG4iOwoKCiBmb3JlYWNoICgkYXV0b2xvYWRzWydwc3ItNCddIGFzICRuYW1lc3BhY2UgPT4gJHBhdGhzKSB7CiRleHBvcnRlZFBhdGhzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHBhdGhzIGFzICRwYXRoKSB7CiRleHBvcnRlZFBhdGhzW10gPSAkdGhpcy0+Z2V0UGF0aENvZGUoJGZpbGVzeXN0ZW0sICRiYXNlUGF0aCwgJHZlbmRvclBhdGgsICRwYXRoKTsKfQokZXhwb3J0ZWRQcmVmaXggPSB2YXJfZXhwb3J0KCRuYW1lc3BhY2UsIHRydWUpOwokcHNyNEZpbGUgLj0gIiAgICAkZXhwb3J0ZWRQcmVmaXggPT4gIjsKJHBzcjRGaWxlIC49ICJhcnJheSgiLmltcGxvZGUoJywgJywgJGV4cG9ydGVkUGF0aHMpLiIpLFxuIjsKfQokcHNyNEZpbGUgLj0gIik7XG4iOwoKJGNsYXNzbWFwRmlsZSA9IDw8PEVPRgo8P3BocAoKLy8gYXV0b2xvYWRfY2xhc3NtYXAucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKClwkdmVuZG9yRGlyID0gJHZlbmRvclBhdGhDb2RlNTI7ClwkYmFzZURpciA9ICRhcHBCYXNlRGlyQ29kZTsKCnJldHVybiBhcnJheSgKCkVPRjsKCgogJHRhcmdldERpckxvYWRlciA9IG51bGw7CiRtYWluQXV0b2xvYWQgPSAkbWFpblBhY2thZ2UtPmdldEF1dG9sb2FkKCk7CmlmICgkbWFpblBhY2thZ2UtPmdldFRhcmdldERpcigpICYmICFlbXB0eSgkbWFpbkF1dG9sb2FkWydwc3ItMCddKSkgewokbGV2ZWxzID0gY291bnQoZXhwbG9kZSgnLycsICRmaWxlc3lzdGVtLT5ub3JtYWxpemVQYXRoKCRtYWluUGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCkpKSk7CiRwcmVmaXhlcyA9IGltcGxvZGUoJywgJywgYXJyYXlfbWFwKGZ1bmN0aW9uICgkcHJlZml4KSB7CnJldHVybiB2YXJfZXhwb3J0KCRwcmVmaXgsIHRydWUpOwp9LCBhcnJheV9rZXlzKCRtYWluQXV0b2xvYWRbJ3Bzci0wJ10pKSk7CiRiYXNlRGlyRnJvbVRhcmdldERpckNvZGUgPSAkZmlsZXN5c3RlbS0+ZmluZFNob3J0ZXN0UGF0aENvZGUoJHRhcmdldERpciwgJGJhc2VQYXRoLCB0cnVlKTsKCiR0YXJnZXREaXJMb2FkZXIgPSA8PDxFT0YKCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGF1dG9sb2FkKFwkY2xhc3MpCiAgICB7CiAgICAgICAgXCRkaXIgPSAkYmFzZURpckZyb21UYXJnZXREaXJDb2RlIC4gJy8nOwogICAgICAgIFwkcHJlZml4ZXMgPSBhcnJheSgkcHJlZml4ZXMpOwogICAgICAgIGZvcmVhY2ggKFwkcHJlZml4ZXMgYXMgXCRwcmVmaXgpIHsKICAgICAgICAgICAgaWYgKDAgIT09IHN0cnBvcyhcJGNsYXNzLCBcJHByZWZpeCkpIHsKICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFwkcGF0aCA9IFwkZGlyIC4gaW1wbG9kZSgnLycsIGFycmF5X3NsaWNlKGV4cGxvZGUoJ1xcXFwnLCBcJGNsYXNzKSwgJGxldmVscykpLicucGhwJzsKICAgICAgICAgICAgaWYgKCFcJHBhdGggPSBzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoXCRwYXRoKSkgewogICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlcXVpcmUgXCRwYXRoOwoKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgfQoKRU9GOwp9CgoKICRjbGFzc01hcCA9IGFycmF5KCk7CmlmICgkc2NhblBzcjBQYWNrYWdlcykgewoKIGZvcmVhY2ggKGFycmF5KCdwc3ItMCcsICdwc3ItNCcpIGFzICRwc3JUeXBlKSB7CmZvcmVhY2ggKCRhdXRvbG9hZHNbJHBzclR5cGVdIGFzICRuYW1lc3BhY2UgPT4gJHBhdGhzKSB7CmZvcmVhY2ggKCRwYXRocyBhcyAkZGlyKSB7CiRkaXIgPSAkZmlsZXN5c3RlbS0+bm9ybWFsaXplUGF0aCgkZmlsZXN5c3RlbS0+aXNBYnNvbHV0ZVBhdGgoJGRpcikgPyAkZGlyIDogJGJhc2VQYXRoLicvJy4kZGlyKTsKaWYgKCFpc19kaXIoJGRpcikpIHsKY29udGludWU7Cn0KJHdoaXRlbGlzdCA9IHNwcmludGYoCid7JXMvJXMuKyg/PCEoPzwhLylUZXN0XC5waHApJH0nLApwcmVnX3F1b3RlKCRkaXIpLAooJHBzclR5cGUgPT09ICdwc3ItMCcgJiYgc3RycG9zKCRuYW1lc3BhY2UsICdfJykgPT09IGZhbHNlKSA/IHByZWdfcXVvdGUoc3RydHIoJG5hbWVzcGFjZSwgJ1xcJywgJy8nKSkgOiAnJwopOwpmb3JlYWNoIChDbGFzc01hcEdlbmVyYXRvcjo6Y3JlYXRlTWFwKCRkaXIsICR3aGl0ZWxpc3QsICR0aGlzLT5pbykgYXMgJGNsYXNzID0+ICRwYXRoKSB7CmlmICgnJyA9PT0gJG5hbWVzcGFjZSB8fCAwID09PSBzdHJwb3MoJGNsYXNzLCAkbmFtZXNwYWNlKSkgewppZiAoIWlzc2V0KCRjbGFzc01hcFskY2xhc3NdKSkgewokcGF0aCA9ICR0aGlzLT5nZXRQYXRoQ29kZSgkZmlsZXN5c3RlbSwgJGJhc2VQYXRoLCAkdmVuZG9yUGF0aCwgJHBhdGgpOwokY2xhc3NNYXBbJGNsYXNzXSA9ICRwYXRoLiIsXG4iOwp9Cn0KfQp9Cn0KfQp9Cgpmb3JlYWNoICgkYXV0b2xvYWRzWydjbGFzc21hcCddIGFzICRkaXIpIHsKZm9yZWFjaCAoQ2xhc3NNYXBHZW5lcmF0b3I6OmNyZWF0ZU1hcCgkZGlyLCBudWxsLCAkdGhpcy0+aW8pIGFzICRjbGFzcyA9PiAkcGF0aCkgewokcGF0aCA9ICR0aGlzLT5nZXRQYXRoQ29kZSgkZmlsZXN5c3RlbSwgJGJhc2VQYXRoLCAkdmVuZG9yUGF0aCwgJHBhdGgpOwokY2xhc3NNYXBbJGNsYXNzXSA9ICRwYXRoLiIsXG4iOwp9Cn0KCmtzb3J0KCRjbGFzc01hcCk7CmZvcmVhY2ggKCRjbGFzc01hcCBhcyAkY2xhc3MgPT4gJGNvZGUpIHsKJGNsYXNzbWFwRmlsZSAuPSAnICAgICcudmFyX2V4cG9ydCgkY2xhc3MsIHRydWUpLicgPT4gJy4kY29kZTsKfQokY2xhc3NtYXBGaWxlIC49ICIpO1xuIjsKCmlmICghJHN1ZmZpeCkgewokc3VmZml4ID0gJGNvbmZpZy0+Z2V0KCdhdXRvbG9hZGVyLXN1ZmZpeCcpID86IG1kNSh1bmlxaWQoJycsIHRydWUpKTsKfQoKZmlsZV9wdXRfY29udGVudHMoJHRhcmdldERpci4nL2F1dG9sb2FkX25hbWVzcGFjZXMucGhwJywgJG5hbWVzcGFjZXNGaWxlKTsKZmlsZV9wdXRfY29udGVudHMoJHRhcmdldERpci4nL2F1dG9sb2FkX3BzcjQucGhwJywgJHBzcjRGaWxlKTsKZmlsZV9wdXRfY29udGVudHMoJHRhcmdldERpci4nL2F1dG9sb2FkX2NsYXNzbWFwLnBocCcsICRjbGFzc21hcEZpbGUpOwppZiAoJGluY2x1ZGVQYXRoRmlsZSA9ICR0aGlzLT5nZXRJbmNsdWRlUGF0aHNGaWxlKCRwYWNrYWdlTWFwLCAkZmlsZXN5c3RlbSwgJGJhc2VQYXRoLCAkdmVuZG9yUGF0aCwgJHZlbmRvclBhdGhDb2RlNTIsICRhcHBCYXNlRGlyQ29kZSkpIHsKZmlsZV9wdXRfY29udGVudHMoJHRhcmdldERpci4nL2luY2x1ZGVfcGF0aHMucGhwJywgJGluY2x1ZGVQYXRoRmlsZSk7Cn0KaWYgKCRpbmNsdWRlRmlsZXNGaWxlID0gJHRoaXMtPmdldEluY2x1ZGVGaWxlc0ZpbGUoJGF1dG9sb2Fkc1snZmlsZXMnXSwgJGZpbGVzeXN0ZW0sICRiYXNlUGF0aCwgJHZlbmRvclBhdGgsICR2ZW5kb3JQYXRoQ29kZTUyLCAkYXBwQmFzZURpckNvZGUpKSB7CmZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXREaXIuJy9hdXRvbG9hZF9maWxlcy5waHAnLCAkaW5jbHVkZUZpbGVzRmlsZSk7Cn0KZmlsZV9wdXRfY29udGVudHMoJHZlbmRvclBhdGguJy9hdXRvbG9hZC5waHAnLCAkdGhpcy0+Z2V0QXV0b2xvYWRGaWxlKCR2ZW5kb3JQYXRoVG9UYXJnZXREaXJDb2RlLCAkc3VmZml4KSk7CmZpbGVfcHV0X2NvbnRlbnRzKCR0YXJnZXREaXIuJy9hdXRvbG9hZF9yZWFsLnBocCcsICR0aGlzLT5nZXRBdXRvbG9hZFJlYWxGaWxlKHRydWUsIChib29sKSAkaW5jbHVkZVBhdGhGaWxlLCAkdGFyZ2V0RGlyTG9hZGVyLCAoYm9vbCkgJGluY2x1ZGVGaWxlc0ZpbGUsICR2ZW5kb3JQYXRoQ29kZSwgJGFwcEJhc2VEaXJDb2RlLCAkc3VmZml4LCAkdXNlR2xvYmFsSW5jbHVkZVBhdGgsICRwcmVwZW5kQXV0b2xvYWRlcikpOwoKCiAKICRzb3VyY2VMb2FkZXIgPSBmb3BlbihfX0RJUl9fLicvQ2xhc3NMb2FkZXIucGhwJywgJ3InKTsKJHRhcmdldExvYWRlciA9IGZvcGVuKCR0YXJnZXREaXIuJy9DbGFzc0xvYWRlci5waHAnLCAndysnKTsKc3RyZWFtX2NvcHlfdG9fc3RyZWFtKCRzb3VyY2VMb2FkZXIsICR0YXJnZXRMb2FkZXIpOwpmY2xvc2UoJHNvdXJjZUxvYWRlcik7CmZjbG9zZSgkdGFyZ2V0TG9hZGVyKTsKdW5zZXQoJHNvdXJjZUxvYWRlciwgJHRhcmdldExvYWRlcik7CgokdGhpcy0+ZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFNjcmlwdChTY3JpcHRFdmVudHM6OlBPU1RfQVVUT0xPQURfRFVNUCwgJHRoaXMtPmRldk1vZGUpOwp9CgpwdWJsaWMgZnVuY3Rpb24gYnVpbGRQYWNrYWdlTWFwKEluc3RhbGxhdGlvbk1hbmFnZXIgJGluc3RhbGxhdGlvbk1hbmFnZXIsIFBhY2thZ2VJbnRlcmZhY2UgJG1haW5QYWNrYWdlLCBhcnJheSAkcGFja2FnZXMpCnsKCiAkcGFja2FnZU1hcCA9IGFycmF5KGFycmF5KCRtYWluUGFja2FnZSwgJycpKTsKCmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewppZiAoJHBhY2thZ2UgaW5zdGFuY2VvZiBBbGlhc1BhY2thZ2UpIHsKY29udGludWU7Cn0KJHRoaXMtPnZhbGlkYXRlUGFja2FnZSgkcGFja2FnZSk7CgokcGFja2FnZU1hcFtdID0gYXJyYXkoCiRwYWNrYWdlLAokaW5zdGFsbGF0aW9uTWFuYWdlci0+Z2V0SW5zdGFsbFBhdGgoJHBhY2thZ2UpCik7Cn0KCnJldHVybiAkcGFja2FnZU1hcDsKfQoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVQYWNrYWdlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKJGF1dG9sb2FkID0gJHBhY2thZ2UtPmdldEF1dG9sb2FkKCk7CmlmICghZW1wdHkoJGF1dG9sb2FkWydwc3ItNCddKSAmJiBudWxsICE9PSAkcGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCkpIHsKJG5hbWUgPSAkcGFja2FnZS0+Z2V0TmFtZSgpOwokcGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCk7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJQU1ItNCBhdXRvbG9hZGluZyBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0LWRpciBwcm9wZXJ0eSwgcmVtb3ZlIHRoZSB0YXJnZXQtZGlyIGluIHBhY2thZ2UgJyRuYW1lJy4iKTsKfQppZiAoIWVtcHR5KCRhdXRvbG9hZFsncHNyLTQnXSkpIHsKZm9yZWFjaCAoJGF1dG9sb2FkWydwc3ItNCddIGFzICRuYW1lc3BhY2UgPT4gJGRpcnMpIHsKaWYgKCRuYW1lc3BhY2UgIT09ICcnICYmICdcXCcgIT09IHN1YnN0cigkbmFtZXNwYWNlLCAtMSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oInBzci00IG5hbWVzcGFjZXMgbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IsICckbmFtZXNwYWNlJyBkb2VzIG5vdCwgdXNlICckbmFtZXNwYWNlXFwnLiIpOwp9Cn0KfQp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlQXV0b2xvYWRzKGFycmF5ICRwYWNrYWdlTWFwLCBQYWNrYWdlSW50ZXJmYWNlICRtYWluUGFja2FnZSkKewokbWFpblBhY2thZ2VNYXAgPSBhcnJheV9zaGlmdCgkcGFja2FnZU1hcCk7CiRzb3J0ZWRQYWNrYWdlTWFwID0gJHRoaXMtPnNvcnRQYWNrYWdlTWFwKCRwYWNrYWdlTWFwKTsKJHNvcnRlZFBhY2thZ2VNYXBbXSA9ICRtYWluUGFja2FnZU1hcDsKYXJyYXlfdW5zaGlmdCgkcGFja2FnZU1hcCwgJG1haW5QYWNrYWdlTWFwKTsKCiRwc3IwID0gJHRoaXMtPnBhcnNlQXV0b2xvYWRzVHlwZSgkcGFja2FnZU1hcCwgJ3Bzci0wJywgJG1haW5QYWNrYWdlKTsKJHBzcjQgPSAkdGhpcy0+cGFyc2VBdXRvbG9hZHNUeXBlKCRwYWNrYWdlTWFwLCAncHNyLTQnLCAkbWFpblBhY2thZ2UpOwokY2xhc3NtYXAgPSAkdGhpcy0+cGFyc2VBdXRvbG9hZHNUeXBlKCRzb3J0ZWRQYWNrYWdlTWFwLCAnY2xhc3NtYXAnLCAkbWFpblBhY2thZ2UpOwokZmlsZXMgPSAkdGhpcy0+cGFyc2VBdXRvbG9hZHNUeXBlKCRzb3J0ZWRQYWNrYWdlTWFwLCAnZmlsZXMnLCAkbWFpblBhY2thZ2UpOwoKa3Jzb3J0KCRwc3IwKTsKa3Jzb3J0KCRwc3I0KTsKCnJldHVybiBhcnJheSgncHNyLTAnID0+ICRwc3IwLCAncHNyLTQnID0+ICRwc3I0LCAnY2xhc3NtYXAnID0+ICRjbGFzc21hcCwgJ2ZpbGVzJyA9PiAkZmlsZXMpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY3JlYXRlTG9hZGVyKGFycmF5ICRhdXRvbG9hZHMpCnsKJGxvYWRlciA9IG5ldyBDbGFzc0xvYWRlcigpOwoKaWYgKGlzc2V0KCRhdXRvbG9hZHNbJ3Bzci0wJ10pKSB7CmZvcmVhY2ggKCRhdXRvbG9hZHNbJ3Bzci0wJ10gYXMgJG5hbWVzcGFjZSA9PiAkcGF0aCkgewokbG9hZGVyLT5hZGQoJG5hbWVzcGFjZSwgJHBhdGgpOwp9Cn0KCmlmIChpc3NldCgkYXV0b2xvYWRzWydwc3ItNCddKSkgewpmb3JlYWNoICgkYXV0b2xvYWRzWydwc3ItNCddIGFzICRuYW1lc3BhY2UgPT4gJHBhdGgpIHsKJGxvYWRlci0+YWRkUHNyNCgkbmFtZXNwYWNlLCAkcGF0aCk7Cn0KfQoKcmV0dXJuICRsb2FkZXI7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRJbmNsdWRlUGF0aHNGaWxlKGFycmF5ICRwYWNrYWdlTWFwLCBGaWxlc3lzdGVtICRmaWxlc3lzdGVtLCAkYmFzZVBhdGgsICR2ZW5kb3JQYXRoLCAkdmVuZG9yUGF0aENvZGUsICRhcHBCYXNlRGlyQ29kZSkKewokaW5jbHVkZVBhdGhzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYWNrYWdlTWFwIGFzICRpdGVtKSB7Cmxpc3QoJHBhY2thZ2UsICRpbnN0YWxsUGF0aCkgPSAkaXRlbTsKCmlmIChudWxsICE9PSAkcGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCkgJiYgc3RybGVuKCRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKSkgPiAwKSB7CiRpbnN0YWxsUGF0aCA9IHN1YnN0cigkaW5zdGFsbFBhdGgsIDAsIC1zdHJsZW4oJy8nLiRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKSkpOwp9Cgpmb3JlYWNoICgkcGFja2FnZS0+Z2V0SW5jbHVkZVBhdGhzKCkgYXMgJGluY2x1ZGVQYXRoKSB7CiRpbmNsdWRlUGF0aCA9IHRyaW0oJGluY2x1ZGVQYXRoLCAnLycpOwokaW5jbHVkZVBhdGhzW10gPSBlbXB0eSgkaW5zdGFsbFBhdGgpID8gJGluY2x1ZGVQYXRoIDogJGluc3RhbGxQYXRoLicvJy4kaW5jbHVkZVBhdGg7Cn0KfQoKaWYgKCEkaW5jbHVkZVBhdGhzKSB7CnJldHVybjsKfQoKJGluY2x1ZGVQYXRoc0NvZGUgPSAnJzsKZm9yZWFjaCAoJGluY2x1ZGVQYXRocyBhcyAkcGF0aCkgewokaW5jbHVkZVBhdGhzQ29kZSAuPSAiICAgICIgLiAkdGhpcy0+Z2V0UGF0aENvZGUoJGZpbGVzeXN0ZW0sICRiYXNlUGF0aCwgJHZlbmRvclBhdGgsICRwYXRoKSAuICIsXG4iOwp9CgpyZXR1cm4gPDw8RU9GCjw/cGhwCgovLyBpbmNsdWRlX3BhdGhzLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpcJHZlbmRvckRpciA9ICR2ZW5kb3JQYXRoQ29kZTsKXCRiYXNlRGlyID0gJGFwcEJhc2VEaXJDb2RlOwoKcmV0dXJuIGFycmF5KAokaW5jbHVkZVBhdGhzQ29kZSk7CgpFT0Y7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRJbmNsdWRlRmlsZXNGaWxlKGFycmF5ICRmaWxlcywgRmlsZXN5c3RlbSAkZmlsZXN5c3RlbSwgJGJhc2VQYXRoLCAkdmVuZG9yUGF0aCwgJHZlbmRvclBhdGhDb2RlLCAkYXBwQmFzZURpckNvZGUpCnsKJGZpbGVzQ29kZSA9ICcnOwpmb3JlYWNoICgkZmlsZXMgYXMgJGZ1bmN0aW9uRmlsZSkgewokZmlsZXNDb2RlIC49ICcgICAgJy4kdGhpcy0+Z2V0UGF0aENvZGUoJGZpbGVzeXN0ZW0sICRiYXNlUGF0aCwgJHZlbmRvclBhdGgsICRmdW5jdGlvbkZpbGUpLiIsXG4iOwp9CgppZiAoISRmaWxlc0NvZGUpIHsKcmV0dXJuIEZBTFNFOwp9CgpyZXR1cm4gPDw8RU9GCjw/cGhwCgovLyBhdXRvbG9hZF9maWxlcy5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKXCR2ZW5kb3JEaXIgPSAkdmVuZG9yUGF0aENvZGU7ClwkYmFzZURpciA9ICRhcHBCYXNlRGlyQ29kZTsKCnJldHVybiBhcnJheSgKJGZpbGVzQ29kZSk7CgpFT0Y7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRQYXRoQ29kZShGaWxlc3lzdGVtICRmaWxlc3lzdGVtLCAkYmFzZVBhdGgsICR2ZW5kb3JQYXRoLCAkcGF0aCkKewppZiAoISRmaWxlc3lzdGVtLT5pc0Fic29sdXRlUGF0aCgkcGF0aCkpIHsKJHBhdGggPSAkYmFzZVBhdGggLiAnLycgLiAkcGF0aDsKfQokcGF0aCA9ICRmaWxlc3lzdGVtLT5ub3JtYWxpemVQYXRoKCRwYXRoKTsKCiRiYXNlRGlyID0gJyc7CmlmIChzdHJwb3MoJHBhdGguJy8nLCAkdmVuZG9yUGF0aC4nLycpID09PSAwKSB7CiRwYXRoID0gc3Vic3RyKCRwYXRoLCBzdHJsZW4oJHZlbmRvclBhdGgpKTsKJGJhc2VEaXIgPSAnJHZlbmRvckRpcic7CgppZiAoJHBhdGggIT09IGZhbHNlKSB7CiRiYXNlRGlyIC49ICIgLiAiOwp9Cn0gZWxzZSB7CiRwYXRoID0gJGZpbGVzeXN0ZW0tPm5vcm1hbGl6ZVBhdGgoJGZpbGVzeXN0ZW0tPmZpbmRTaG9ydGVzdFBhdGgoJGJhc2VQYXRoLCAkcGF0aCwgdHJ1ZSkpOwppZiAoISRmaWxlc3lzdGVtLT5pc0Fic29sdXRlUGF0aCgkcGF0aCkpIHsKJGJhc2VEaXIgPSAnJGJhc2VEaXIgLiAnOwokcGF0aCA9ICcvJyAuICRwYXRoOwp9Cn0KCmlmIChwcmVnX21hdGNoKCcvXC5waGFyJC8nLCAkcGF0aCkpIHsKJGJhc2VEaXIgPSAiJ3BoYXI6Ly8nIC4gIiAuICRiYXNlRGlyOwp9CgpyZXR1cm4gJGJhc2VEaXIgLiAoKCRwYXRoICE9PSBmYWxzZSkgPyB2YXJfZXhwb3J0KCRwYXRoLCB0cnVlKSA6ICIiKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEF1dG9sb2FkRmlsZSgkdmVuZG9yUGF0aFRvVGFyZ2V0RGlyQ29kZSwgJHN1ZmZpeCkKewpyZXR1cm4gPDw8QVVUT0xPQUQKPD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpyZXF1aXJlX29uY2UgJHZlbmRvclBhdGhUb1RhcmdldERpckNvZGUgLiAnL2F1dG9sb2FkX3JlYWwucGhwJzsKCnJldHVybiBDb21wb3NlckF1dG9sb2FkZXJJbml0JHN1ZmZpeDo6Z2V0TG9hZGVyKCk7CgpBVVRPTE9BRDsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEF1dG9sb2FkUmVhbEZpbGUoJHVzZUNsYXNzTWFwLCAkdXNlSW5jbHVkZVBhdGgsICR0YXJnZXREaXJMb2FkZXIsICR1c2VJbmNsdWRlRmlsZXMsICR2ZW5kb3JQYXRoQ29kZSwgJGFwcEJhc2VEaXJDb2RlLCAkc3VmZml4LCAkdXNlR2xvYmFsSW5jbHVkZVBhdGgsICRwcmVwZW5kQXV0b2xvYWRlcikKewoKIAogCiAKIAogCgokZmlsZSA9IDw8PEhFQURFUgo8P3BocAoKLy8gYXV0b2xvYWRfcmVhbC5waHAgQGdlbmVyYXRlZCBieSBDb21wb3NlcgoKY2xhc3MgQ29tcG9zZXJBdXRvbG9hZGVySW5pdCRzdWZmaXgKewogICAgcHJpdmF0ZSBzdGF0aWMgXCRsb2FkZXI7CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ2xhc3NMb2FkZXIoXCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXFxBdXRvbG9hZFxcQ2xhc3NMb2FkZXInID09PSBcJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2FkZXIoKQogICAgewogICAgICAgIGlmIChudWxsICE9PSBzZWxmOjpcJGxvYWRlcikgewogICAgICAgICAgICByZXR1cm4gc2VsZjo6XCRsb2FkZXI7CiAgICAgICAgfQoKICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJ0NvbXBvc2VyQXV0b2xvYWRlckluaXQkc3VmZml4JywgJ2xvYWRDbGFzc0xvYWRlcicpLCB0cnVlLCAkcHJlcGVuZEF1dG9sb2FkZXIpOwogICAgICAgIHNlbGY6OlwkbG9hZGVyID0gXCRsb2FkZXIgPSBuZXcgXFxDb21wb3NlclxcQXV0b2xvYWRcXENsYXNzTG9hZGVyKCk7CiAgICAgICAgc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJ0NvbXBvc2VyQXV0b2xvYWRlckluaXQkc3VmZml4JywgJ2xvYWRDbGFzc0xvYWRlcicpKTsKCiAgICAgICAgXCR2ZW5kb3JEaXIgPSAkdmVuZG9yUGF0aENvZGU7CiAgICAgICAgXCRiYXNlRGlyID0gJGFwcEJhc2VEaXJDb2RlOwoKCkhFQURFUjsKCmlmICgkdXNlSW5jbHVkZVBhdGgpIHsKJGZpbGUgLj0gPDw8J0lOQ0xVREVfUEFUSCcKICAgICAgICAkaW5jbHVkZVBhdGhzID0gcmVxdWlyZSBfX0RJUl9fIC4gJy9pbmNsdWRlX3BhdGhzLnBocCc7CiAgICAgICAgYXJyYXlfcHVzaCgkaW5jbHVkZVBhdGhzLCBnZXRfaW5jbHVkZV9wYXRoKCkpOwogICAgICAgIHNldF9pbmNsdWRlX3BhdGgoam9pbihQQVRIX1NFUEFSQVRPUiwgJGluY2x1ZGVQYXRocykpOwoKCklOQ0xVREVfUEFUSDsKfQoKJGZpbGUgLj0gPDw8J1BTUjAnCiAgICAgICAgJG1hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfbmFtZXNwYWNlcy5waHAnOwogICAgICAgIGZvcmVhY2ggKCRtYXAgYXMgJG5hbWVzcGFjZSA9PiAkcGF0aCkgewogICAgICAgICAgICAkbG9hZGVyLT5zZXQoJG5hbWVzcGFjZSwgJHBhdGgpOwogICAgICAgIH0KCgpQU1IwOwoKJGZpbGUgLj0gPDw8J1BTUjQnCiAgICAgICAgJG1hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfcHNyNC5waHAnOwogICAgICAgIGZvcmVhY2ggKCRtYXAgYXMgJG5hbWVzcGFjZSA9PiAkcGF0aCkgewogICAgICAgICAgICAkbG9hZGVyLT5zZXRQc3I0KCRuYW1lc3BhY2UsICRwYXRoKTsKICAgICAgICB9CgoKUFNSNDsKCmlmICgkdXNlQ2xhc3NNYXApIHsKJGZpbGUgLj0gPDw8J0NMQVNTTUFQJwogICAgICAgICRjbGFzc01hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfY2xhc3NtYXAucGhwJzsKICAgICAgICBpZiAoJGNsYXNzTWFwKSB7CiAgICAgICAgICAgICRsb2FkZXItPmFkZENsYXNzTWFwKCRjbGFzc01hcCk7CiAgICAgICAgfQoKCkNMQVNTTUFQOwp9CgppZiAoJHVzZUdsb2JhbEluY2x1ZGVQYXRoKSB7CiRmaWxlIC49IDw8PCdJTkNMVURFUEFUSCcKICAgICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKCklOQ0xVREVQQVRIOwp9CgppZiAoJHRhcmdldERpckxvYWRlcikgewokZmlsZSAuPSA8PDxSRUdJU1RFUl9BVVRPTE9BRAogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgnQ29tcG9zZXJBdXRvbG9hZGVySW5pdCRzdWZmaXgnLCAnYXV0b2xvYWQnKSwgdHJ1ZSwgdHJ1ZSk7CgoKUkVHSVNURVJfQVVUT0xPQUQ7Cgp9CgokZmlsZSAuPSA8PDxSRUdJU1RFUl9MT0FERVIKICAgICAgICBcJGxvYWRlci0+cmVnaXN0ZXIoJHByZXBlbmRBdXRvbG9hZGVyKTsKCgpSRUdJU1RFUl9MT0FERVI7CgppZiAoJHVzZUluY2x1ZGVGaWxlcykgewokZmlsZSAuPSA8PDxJTkNMVURFX0ZJTEVTCiAgICAgICAgXCRpbmNsdWRlRmlsZXMgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX2ZpbGVzLnBocCc7CiAgICAgICAgZm9yZWFjaCAoXCRpbmNsdWRlRmlsZXMgYXMgXCRmaWxlKSB7CiAgICAgICAgICAgIGNvbXBvc2VyUmVxdWlyZSRzdWZmaXgoXCRmaWxlKTsKICAgICAgICB9CgoKSU5DTFVERV9GSUxFUzsKCn0KCiRmaWxlIC49IDw8PE1FVEhPRF9GT09URVIKICAgICAgICByZXR1cm4gXCRsb2FkZXI7CiAgICB9CgpNRVRIT0RfRk9PVEVSOwoKJGZpbGUgLj0gJHRhcmdldERpckxvYWRlcjsKCnJldHVybiAkZmlsZSAuIDw8PEZPT1RFUgp9CgpmdW5jdGlvbiBjb21wb3NlclJlcXVpcmUkc3VmZml4KFwkZmlsZSkKewogICAgcmVxdWlyZSBcJGZpbGU7Cn0KCkZPT1RFUjsKCn0KCnByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZUF1dG9sb2Fkc1R5cGUoYXJyYXkgJHBhY2thZ2VNYXAsICR0eXBlLCBQYWNrYWdlSW50ZXJmYWNlICRtYWluUGFja2FnZSkKewokYXV0b2xvYWRzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYWNrYWdlTWFwIGFzICRpdGVtKSB7Cmxpc3QoJHBhY2thZ2UsICRpbnN0YWxsUGF0aCkgPSAkaXRlbTsKCiRhdXRvbG9hZCA9ICRwYWNrYWdlLT5nZXRBdXRvbG9hZCgpOwppZiAoJHRoaXMtPmRldk1vZGUgJiYgJHBhY2thZ2UgPT09ICRtYWluUGFja2FnZSkgewokYXV0b2xvYWQgPSBhcnJheV9tZXJnZV9yZWN1cnNpdmUoJGF1dG9sb2FkLCAkcGFja2FnZS0+Z2V0RGV2QXV0b2xvYWQoKSk7Cn0KCgogaWYgKCFpc3NldCgkYXV0b2xvYWRbJHR5cGVdKSB8fCAhaXNfYXJyYXkoJGF1dG9sb2FkWyR0eXBlXSkpIHsKY29udGludWU7Cn0KaWYgKG51bGwgIT09ICRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKSAmJiAkcGFja2FnZSAhPT0gJG1haW5QYWNrYWdlKSB7CiRpbnN0YWxsUGF0aCA9IHN1YnN0cigkaW5zdGFsbFBhdGgsIDAsIC1zdHJsZW4oJy8nLiRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKSkpOwp9Cgpmb3JlYWNoICgkYXV0b2xvYWRbJHR5cGVdIGFzICRuYW1lc3BhY2UgPT4gJHBhdGhzKSB7CmZvcmVhY2ggKChhcnJheSkgJHBhdGhzIGFzICRwYXRoKSB7CmlmICgoJHR5cGUgPT09ICdmaWxlcycgfHwgJHR5cGUgPT09ICdjbGFzc21hcCcpICYmICRwYWNrYWdlLT5nZXRUYXJnZXREaXIoKSAmJiAhaXNfcmVhZGFibGUoJGluc3RhbGxQYXRoLicvJy4kcGF0aCkpIHsKCiBpZiAoJHBhY2thZ2UgPT09ICRtYWluUGFja2FnZSkgewokdGFyZ2V0RGlyID0gc3RyX3JlcGxhY2UoJ1xcPGRpcnNlcFxcPicsICdbXFxcXC9dJywgcHJlZ19xdW90ZShzdHJfcmVwbGFjZShhcnJheSgnLycsICdcXCcpLCAnPGRpcnNlcD4nLCAkcGFja2FnZS0+Z2V0VGFyZ2V0RGlyKCkpKSk7CiRwYXRoID0gbHRyaW0ocHJlZ19yZXBsYWNlKCd7XicuJHRhcmdldERpci4nfScsICcnLCBsdHJpbSgkcGF0aCwgJ1xcLycpKSwgJ1xcLycpOwp9IGVsc2UgewoKICRwYXRoID0gJHBhY2thZ2UtPmdldFRhcmdldERpcigpIC4gJy8nIC4gJHBhdGg7Cn0KfQoKJHJlbGF0aXZlUGF0aCA9IGVtcHR5KCRpbnN0YWxsUGF0aCkgPyAoZW1wdHkoJHBhdGgpID8gJy4nIDogJHBhdGgpIDogJGluc3RhbGxQYXRoLicvJy4kcGF0aDsKCmlmICgkdHlwZSA9PT0gJ2ZpbGVzJyB8fCAkdHlwZSA9PT0gJ2NsYXNzbWFwJykgewokYXV0b2xvYWRzW10gPSAkcmVsYXRpdmVQYXRoOwpjb250aW51ZTsKfQoKJGF1dG9sb2Fkc1skbmFtZXNwYWNlXVtdID0gJHJlbGF0aXZlUGF0aDsKfQp9Cn0KCnJldHVybiAkYXV0b2xvYWRzOwp9CgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBzb3J0UGFja2FnZU1hcChhcnJheSAkcGFja2FnZU1hcCkKewokcGFja2FnZXMgPSBhcnJheSgpOwokcGF0aHMgPSBhcnJheSgpOwokdXNhZ2VMaXN0ID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYWNrYWdlTWFwIGFzICRpdGVtKSB7Cmxpc3QoJHBhY2thZ2UsICRwYXRoKSA9ICRpdGVtOwokbmFtZSA9ICRwYWNrYWdlLT5nZXROYW1lKCk7CiRwYWNrYWdlc1skbmFtZV0gPSAkcGFja2FnZTsKJHBhdGhzWyRuYW1lXSA9ICRwYXRoOwoKZm9yZWFjaCAoYXJyYXlfbWVyZ2UoJHBhY2thZ2UtPmdldFJlcXVpcmVzKCksICRwYWNrYWdlLT5nZXREZXZSZXF1aXJlcygpKSBhcyAkbGluaykgewokdGFyZ2V0ID0gJGxpbmstPmdldFRhcmdldCgpOwokdXNhZ2VMaXN0WyR0YXJnZXRdW10gPSAkbmFtZTsKfQp9CgokY29tcHV0aW5nID0gYXJyYXkoKTsKJGNvbXB1dGVkID0gYXJyYXkoKTsKJGNvbXB1dGVJbXBvcnRhbmNlID0gZnVuY3Rpb24oJG5hbWUpIHVzZSgmJGNvbXB1dGVJbXBvcnRhbmNlLCAmJGNvbXB1dGluZywgJiRjb21wdXRlZCwgJHVzYWdlTGlzdCkgewoKIGlmIChpc3NldCgkY29tcHV0ZWRbJG5hbWVdKSkgewpyZXR1cm4gJGNvbXB1dGVkWyRuYW1lXTsKfQoKCiBpZiAoaXNzZXQoJGNvbXB1dGluZ1skbmFtZV0pKSB7CnJldHVybiAwOwp9CgokY29tcHV0aW5nWyRuYW1lXSA9IHRydWU7CiR3ZWlnaHQgPSAwOwoKaWYgKGlzc2V0KCR1c2FnZUxpc3RbJG5hbWVdKSkgewpmb3JlYWNoICgkdXNhZ2VMaXN0WyRuYW1lXSBhcyAkdXNlcikgewokd2VpZ2h0IC09IDEgLSAkY29tcHV0ZUltcG9ydGFuY2UoJHVzZXIpOwp9Cn0KCnVuc2V0KCRjb21wdXRpbmdbJG5hbWVdKTsKJGNvbXB1dGVkWyRuYW1lXSA9ICR3ZWlnaHQ7CgpyZXR1cm4gJHdlaWdodDsKfTsKCiR3ZWlnaHRMaXN0ID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkbmFtZSA9PiAkcGFja2FnZSkgewokd2VpZ2h0ID0gJGNvbXB1dGVJbXBvcnRhbmNlKCRuYW1lKTsKJHdlaWdodExpc3RbJG5hbWVdID0gJHdlaWdodDsKfQoKJHN0YWJsZV9zb3J0ID0gZnVuY3Rpb24oJiRhcnJheSkgewpzdGF0aWMgJHRyYW5zZm9ybSwgJHJlc3RvcmU7CgokaSA9IDA7CgppZiAoISR0cmFuc2Zvcm0pIHsKJHRyYW5zZm9ybSA9IGZ1bmN0aW9uKCYkdiwgJGspIHVzZSgmJGkpIHsKJHYgPSBhcnJheSgkdiwgKyskaSwgJGssICR2KTsKfTsKCiRyZXN0b3JlID0gZnVuY3Rpb24oJiR2LCAkaykgewokdiA9ICR2WzNdOwp9Owp9CgphcnJheV93YWxrKCRhcnJheSwgJHRyYW5zZm9ybSk7CmFzb3J0KCRhcnJheSk7CmFycmF5X3dhbGsoJGFycmF5LCAkcmVzdG9yZSk7Cn07Cgokc3RhYmxlX3NvcnQoJHdlaWdodExpc3QpOwoKJHNvcnRlZFBhY2thZ2VNYXAgPSBhcnJheSgpOwoKZm9yZWFjaCAoYXJyYXlfa2V5cygkd2VpZ2h0TGlzdCkgYXMgJG5hbWUpIHsKJHNvcnRlZFBhY2thZ2VNYXBbXSA9IGFycmF5KCRwYWNrYWdlc1skbmFtZV0sICRwYXRoc1skbmFtZV0pOwp9CgpyZXR1cm4gJHNvcnRlZFBhY2thZ2VNYXA7Cn0KfQo8P3BocAoKCgoKCgoKCgoKCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEZpbmRlcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwoKCgoKCgoKY2xhc3MgQ2xhc3NNYXBHZW5lcmF0b3IKewoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGR1bXAoJGRpcnMsICRmaWxlKQp7CiRtYXBzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRkaXJzIGFzICRkaXIpIHsKJG1hcHMgPSBhcnJheV9tZXJnZSgkbWFwcywgc3RhdGljOjpjcmVhdGVNYXAoJGRpcikpOwp9CgpmaWxlX3B1dF9jb250ZW50cygkZmlsZSwgc3ByaW50ZignPD9waHAgcmV0dXJuICVzOycsIHZhcl9leHBvcnQoJG1hcHMsIHRydWUpKSk7Cn0KCgoKCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZU1hcCgkcGF0aCwgJHdoaXRlbGlzdCA9IG51bGwsIElPSW50ZXJmYWNlICRpbyA9IG51bGwpCnsKaWYgKGlzX3N0cmluZygkcGF0aCkpIHsKaWYgKGlzX2ZpbGUoJHBhdGgpKSB7CiRwYXRoID0gYXJyYXkobmV3IFxTcGxGaWxlSW5mbygkcGF0aCkpOwp9IGVsc2VpZiAoaXNfZGlyKCRwYXRoKSkgewokcGF0aCA9IEZpbmRlcjo6Y3JlYXRlKCktPmZpbGVzKCktPmZvbGxvd0xpbmtzKCktPm5hbWUoJy9cLihwaHB8aW5jfGhoKSQvJyktPmluKCRwYXRoKTsKfSBlbHNlIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKAonQ291bGQgbm90IHNjYW4gZm9yIGNsYXNzZXMgaW5zaWRlICInLiRwYXRoLgonIiB3aGljaCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgYSBmaWxlIG5vciBhIGZvbGRlcicKKTsKfQp9CgokbWFwID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRwYXRoIGFzICRmaWxlKSB7CiRmaWxlUGF0aCA9ICRmaWxlLT5nZXRSZWFsUGF0aCgpOwoKaWYgKCFpbl9hcnJheShwYXRoaW5mbygkZmlsZVBhdGgsIFBBVEhJTkZPX0VYVEVOU0lPTiksIGFycmF5KCdwaHAnLCAnaW5jJywgJ2hoJykpKSB7CmNvbnRpbnVlOwp9CgppZiAoJHdoaXRlbGlzdCAmJiAhcHJlZ19tYXRjaCgkd2hpdGVsaXN0LCBzdHJ0cigkZmlsZVBhdGgsICdcXCcsICcvJykpKSB7CmNvbnRpbnVlOwp9CgokY2xhc3NlcyA9IHNlbGY6OmZpbmRDbGFzc2VzKCRmaWxlUGF0aCk7Cgpmb3JlYWNoICgkY2xhc3NlcyBhcyAkY2xhc3MpIHsKaWYgKCFpc3NldCgkbWFwWyRjbGFzc10pKSB7CiRtYXBbJGNsYXNzXSA9ICRmaWxlUGF0aDsKfSBlbHNlaWYgKCRpbyAmJiAkbWFwWyRjbGFzc10gIT09ICRmaWxlUGF0aCAmJiAhcHJlZ19tYXRjaCgney8odGVzdHxmaXh0dXJlfGV4YW1wbGUpcz8vfWknLCBzdHJ0cigkbWFwWyRjbGFzc10uJyAnLiRmaWxlUGF0aCwgJ1xcJywgJy8nKSkpIHsKJGlvLT53cml0ZSgKJzx3YXJuaW5nPldhcm5pbmc6IEFtYmlndW91cyBjbGFzcyByZXNvbHV0aW9uLCAiJy4kY2xhc3MuJyInLgonIHdhcyBmb3VuZCBpbiBib3RoICInLiRtYXBbJGNsYXNzXS4nIiBhbmQgIicuJGZpbGVQYXRoLiciLCB0aGUgZmlyc3Qgd2lsbCBiZSB1c2VkLjwvd2FybmluZz4nCik7Cn0KfQp9CgpyZXR1cm4gJG1hcDsKfQoKCgoKCgoKCnByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGZpbmRDbGFzc2VzKCRwYXRoKQp7CiR0cmFpdHMgPSB2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjQnLCAnPCcpID8gJycgOiAnfHRyYWl0JzsKCnRyeSB7CiRjb250ZW50cyA9IHBocF9zdHJpcF93aGl0ZXNwYWNlKCRwYXRoKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NvdWxkIG5vdCBzY2FuIGZvciBjbGFzc2VzIGluc2lkZSAnLiRwYXRoLiI6IFxuIi4kZS0+Z2V0TWVzc2FnZSgpLCAwLCAkZSk7Cn0KCgogaWYgKCFwcmVnX21hdGNoKCd7XGIoPzpjbGFzc3xpbnRlcmZhY2UnLiR0cmFpdHMuJylcc31pJywgJGNvbnRlbnRzKSkgewpyZXR1cm4gYXJyYXkoKTsKfQoKCiAkY29udGVudHMgPSBwcmVnX3JlcGxhY2UoJ3s8PDxcJz8oXHcrKVwnPyg/OlxyXG58XG58XHIpKD86Lio/KSg/OlxyXG58XG58XHIpXFwxKD89XHJcbnxcbnxccnw7KX1zJywgJ251bGwnLCAkY29udGVudHMpOwoKICRjb250ZW50cyA9IHByZWdfcmVwbGFjZSgneyJbXiJcXFxcXSooXFxcXC5bXiJcXFxcXSopKiJ8XCdbXlwnXFxcXF0qKFxcXFwuW15cJ1xcXFxdKikqXCd9cycsICdudWxsJywgJGNvbnRlbnRzKTsKCiBpZiAoc3Vic3RyKCRjb250ZW50cywgMCwgMikgIT09ICc8PycpIHsKJGNvbnRlbnRzID0gcHJlZ19yZXBsYWNlKCd7Xi4rPzxcP31zJywgJzw/JywgJGNvbnRlbnRzLCAxLCAkcmVwbGFjZW1lbnRzKTsKaWYgKCRyZXBsYWNlbWVudHMgPT09IDApIHsKcmV0dXJuIGFycmF5KCk7Cn0KfQoKICRjb250ZW50cyA9IHByZWdfcmVwbGFjZSgne1w/Pi4rPFw/fXMnLCAnPz48PycsICRjb250ZW50cyk7CgogJHBvcyA9IHN0cnJwb3MoJGNvbnRlbnRzLCAnPz4nKTsKaWYgKGZhbHNlICE9PSAkcG9zICYmIGZhbHNlID09PSBzdHJwb3Moc3Vic3RyKCRjb250ZW50cywgJHBvcyksICc8PycpKSB7CiRjb250ZW50cyA9IHN1YnN0cigkY29udGVudHMsIDAsICRwb3MpOwp9CgpwcmVnX21hdGNoX2FsbCgnewogICAgICAgICAgICAoPzoKICAgICAgICAgICAgICAgICBcYig/PCFbXCQ6Pl0pKD9QPHR5cGU+Y2xhc3N8aW50ZXJmYWNlJy4kdHJhaXRzLicpIFxzKyAoP1A8bmFtZT5bYS16QS1aX1x4N2YtXHhmZjpdW2EtekEtWjAtOV9ceDdmLVx4ZmY6XSopCiAgICAgICAgICAgICAgIHwgXGIoPzwhW1wkOj5dKSg/UDxucz5uYW1lc3BhY2UpICg/UDxuc25hbWU+XHMrW2EtekEtWl9ceDdmLVx4ZmZdW2EtekEtWjAtOV9ceDdmLVx4ZmZdKig/OlxzKlxcXFxccypbYS16QS1aX1x4N2YtXHhmZl1bYS16QS1aMC05X1x4N2YtXHhmZl0qKSopPyBccypbXHs7XQogICAgICAgICAgICApCiAgICAgICAgfWl4JywgJGNvbnRlbnRzLCAkbWF0Y2hlcyk7CgokY2xhc3NlcyA9IGFycmF5KCk7CiRuYW1lc3BhY2UgPSAnJzsKCmZvciAoJGkgPSAwLCAkbGVuID0gY291bnQoJG1hdGNoZXNbJ3R5cGUnXSk7ICRpIDwgJGxlbjsgJGkrKykgewppZiAoIWVtcHR5KCRtYXRjaGVzWyducyddWyRpXSkpIHsKJG5hbWVzcGFjZSA9IHN0cl9yZXBsYWNlKGFycmF5KCcgJywgIlx0IiwgIlxyIiwgIlxuIiksICcnLCAkbWF0Y2hlc1snbnNuYW1lJ11bJGldKSAuICdcXCc7Cn0gZWxzZSB7CiRuYW1lID0gJG1hdGNoZXNbJ25hbWUnXVskaV07CmlmICgkbmFtZVswXSA9PT0gJzonKSB7CgogJG5hbWUgPSAneGhwJy5zdWJzdHIoc3RyX3JlcGxhY2UoYXJyYXkoJy0nLCAnOicpLCBhcnJheSgnXycsICdfXycpLCAkbmFtZSksIDEpOwp9CiRjbGFzc2VzW10gPSBsdHJpbSgkbmFtZXNwYWNlIC4gJG5hbWUsICdcXCcpOwp9Cn0KCnJldHVybiAkY2xhc3NlczsKfQp9Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyOwoKdXNlIENvbXBvc2VyXEF1dG9sb2FkXEF1dG9sb2FkR2VuZXJhdG9yOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXERlZmF1bHRQb2xpY3k7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcT3BlcmF0aW9uXFVwZGF0ZU9wZXJhdGlvbjsKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb25cSW5zdGFsbE9wZXJhdGlvbjsKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxPcGVyYXRpb25cVW5pbnN0YWxsT3BlcmF0aW9uOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXE9wZXJhdGlvblxPcGVyYXRpb25JbnRlcmZhY2U7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcUG9vbDsKdXNlIENvbXBvc2VyXERlcGVuZGVuY3lSZXNvbHZlclxSZXF1ZXN0Owp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXFJ1bGU7CnVzZSBDb21wb3NlclxEZXBlbmRlbmN5UmVzb2x2ZXJcU29sdmVyOwp1c2UgQ29tcG9zZXJcRGVwZW5kZW5jeVJlc29sdmVyXFNvbHZlclByb2JsZW1zRXhjZXB0aW9uOwp1c2UgQ29tcG9zZXJcRG93bmxvYWRlclxEb3dubG9hZE1hbmFnZXI7CnVzZSBDb21wb3NlclxFdmVudERpc3BhdGNoZXJcRXZlbnREaXNwYXRjaGVyOwp1c2UgQ29tcG9zZXJcSW5zdGFsbGVyXEluc3RhbGxhdGlvbk1hbmFnZXI7CnVzZSBDb21wb3NlclxDb25maWc7CnVzZSBDb21wb3NlclxJbnN0YWxsZXJcTm9vcEluc3RhbGxlcjsKdXNlIENvbXBvc2VyXElPXElPSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcSnNvblxKc29uRmlsZTsKdXNlIENvbXBvc2VyXFBhY2thZ2VcQWxpYXNQYWNrYWdlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxMaW5rQ29uc3RyYWludFxWZXJzaW9uQ29uc3RyYWludDsKdXNlIENvbXBvc2VyXFBhY2thZ2VcTG9ja2VyOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxQYWNrYWdlSW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUGFja2FnZVxSb290UGFja2FnZUludGVyZmFjZTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcQ29tcG9zaXRlUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcSW5zdGFsbGVkQXJyYXlSZXBvc2l0b3J5Owp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxJbnN0YWxsZWRGaWxlc3lzdGVtUmVwb3NpdG9yeTsKdXNlIENvbXBvc2VyXFJlcG9zaXRvcnlcUGxhdGZvcm1SZXBvc2l0b3J5Owp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5SW50ZXJmYWNlOwp1c2UgQ29tcG9zZXJcUmVwb3NpdG9yeVxSZXBvc2l0b3J5TWFuYWdlcjsKdXNlIENvbXBvc2VyXFNjcmlwdFxTY3JpcHRFdmVudHM7CgoKCgoKCgpjbGFzcyBJbnN0YWxsZXIKewoKCgpwcm90ZWN0ZWQgJGlvOwoKCgoKcHJvdGVjdGVkICRjb25maWc7CgoKCgpwcm90ZWN0ZWQgJHBhY2thZ2U7CgoKCgpwcm90ZWN0ZWQgJGRvd25sb2FkTWFuYWdlcjsKCgoKCnByb3RlY3RlZCAkcmVwb3NpdG9yeU1hbmFnZXI7CgoKCgpwcm90ZWN0ZWQgJGxvY2tlcjsKCgoKCnByb3RlY3RlZCAkaW5zdGFsbGF0aW9uTWFuYWdlcjsKCgoKCnByb3RlY3RlZCAkZXZlbnREaXNwYXRjaGVyOwoKCgoKcHJvdGVjdGVkICRhdXRvbG9hZEdlbmVyYXRvcjsKCnByb3RlY3RlZCAkcHJlZmVyU291cmNlID0gZmFsc2U7CnByb3RlY3RlZCAkcHJlZmVyRGlzdCA9IGZhbHNlOwpwcm90ZWN0ZWQgJG9wdGltaXplQXV0b2xvYWRlciA9IGZhbHNlOwpwcm90ZWN0ZWQgJGRldk1vZGUgPSBmYWxzZTsKcHJvdGVjdGVkICRkcnlSdW4gPSBmYWxzZTsKcHJvdGVjdGVkICR2ZXJib3NlID0gZmFsc2U7CnByb3RlY3RlZCAkdXBkYXRlID0gZmFsc2U7CnByb3RlY3RlZCAkcnVuU2NyaXB0cyA9IHRydWU7CgoKCgoKcHJvdGVjdGVkICR1cGRhdGVXaGl0ZWxpc3QgPSBudWxsOwpwcm90ZWN0ZWQgJHdoaXRlbGlzdERlcGVuZGVuY2llcyA9IGZhbHNlOwoKCgoKcHJvdGVjdGVkICRzdWdnZXN0ZWRQYWNrYWdlczsKCgoKCnByb3RlY3RlZCAkYWRkaXRpb25hbEluc3RhbGxlZFJlcG9zaXRvcnk7CgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KElPSW50ZXJmYWNlICRpbywgQ29uZmlnICRjb25maWcsIFJvb3RQYWNrYWdlSW50ZXJmYWNlICRwYWNrYWdlLCBEb3dubG9hZE1hbmFnZXIgJGRvd25sb2FkTWFuYWdlciwgUmVwb3NpdG9yeU1hbmFnZXIgJHJlcG9zaXRvcnlNYW5hZ2VyLCBMb2NrZXIgJGxvY2tlciwgSW5zdGFsbGF0aW9uTWFuYWdlciAkaW5zdGFsbGF0aW9uTWFuYWdlciwgRXZlbnREaXNwYXRjaGVyICRldmVudERpc3BhdGNoZXIsIEF1dG9sb2FkR2VuZXJhdG9yICRhdXRvbG9hZEdlbmVyYXRvcikKewokdGhpcy0+aW8gPSAkaW87CiR0aGlzLT5jb25maWcgPSAkY29uZmlnOwokdGhpcy0+cGFja2FnZSA9ICRwYWNrYWdlOwokdGhpcy0+ZG93bmxvYWRNYW5hZ2VyID0gJGRvd25sb2FkTWFuYWdlcjsKJHRoaXMtPnJlcG9zaXRvcnlNYW5hZ2VyID0gJHJlcG9zaXRvcnlNYW5hZ2VyOwokdGhpcy0+bG9ja2VyID0gJGxvY2tlcjsKJHRoaXMtPmluc3RhbGxhdGlvbk1hbmFnZXIgPSAkaW5zdGFsbGF0aW9uTWFuYWdlcjsKJHRoaXMtPmV2ZW50RGlzcGF0Y2hlciA9ICRldmVudERpc3BhdGNoZXI7CiR0aGlzLT5hdXRvbG9hZEdlbmVyYXRvciA9ICRhdXRvbG9hZEdlbmVyYXRvcjsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcnVuKCkKewppZiAoJHRoaXMtPmRyeVJ1bikgewokdGhpcy0+dmVyYm9zZSA9IHRydWU7CiR0aGlzLT5ydW5TY3JpcHRzID0gZmFsc2U7CiR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyLT5hZGRJbnN0YWxsZXIobmV3IE5vb3BJbnN0YWxsZXIpOwokdGhpcy0+bW9ja0xvY2FsUmVwb3NpdG9yaWVzKCR0aGlzLT5yZXBvc2l0b3J5TWFuYWdlcik7Cn0KCgogCiAkZGV2UmVwbyA9IG5ldyBJbnN0YWxsZWRGaWxlc3lzdGVtUmVwb3NpdG9yeShuZXcgSnNvbkZpbGUoJHRoaXMtPmNvbmZpZy0+Z2V0KCd2ZW5kb3ItZGlyJykuJy9jb21wb3Nlci9pbnN0YWxsZWRfZGV2Lmpzb24nKSk7CmlmICgkZGV2UmVwby0+Z2V0UGFja2FnZXMoKSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5CQyBOb3RpY2U6IFJlbW92aW5nIG9sZCBkZXYgcGFja2FnZXMgdG8gbWlncmF0ZSB0byB0aGUgbmV3IHJlcXVpcmUtZGV2IGhhbmRsaW5nLjwvd2FybmluZz4nKTsKZm9yZWFjaCAoJGRldlJlcG8tPmdldFBhY2thZ2VzKCkgYXMgJHBhY2thZ2UpIHsKaWYgKCR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyLT5pc1BhY2thZ2VJbnN0YWxsZWQoJGRldlJlcG8sICRwYWNrYWdlKSkgewokdGhpcy0+aW5zdGFsbGF0aW9uTWFuYWdlci0+dW5pbnN0YWxsKCRkZXZSZXBvLCBuZXcgVW5pbnN0YWxsT3BlcmF0aW9uKCRwYWNrYWdlKSk7Cn0KfQp1bmxpbmsoJHRoaXMtPmNvbmZpZy0+Z2V0KCd2ZW5kb3ItZGlyJykuJy9jb21wb3Nlci9pbnN0YWxsZWRfZGV2Lmpzb24nKTsKfQp1bnNldCgkZGV2UmVwbywgJHBhY2thZ2UpOwoKCmlmICgkdGhpcy0+cnVuU2NyaXB0cykgewoKICRldmVudE5hbWUgPSAkdGhpcy0+dXBkYXRlID8gU2NyaXB0RXZlbnRzOjpQUkVfVVBEQVRFX0NNRCA6IFNjcmlwdEV2ZW50czo6UFJFX0lOU1RBTExfQ01EOwokdGhpcy0+ZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaENvbW1hbmRFdmVudCgkZXZlbnROYW1lLCAkdGhpcy0+ZGV2TW9kZSk7Cn0KCiR0aGlzLT5kb3dubG9hZE1hbmFnZXItPnNldFByZWZlclNvdXJjZSgkdGhpcy0+cHJlZmVyU291cmNlKTsKJHRoaXMtPmRvd25sb2FkTWFuYWdlci0+c2V0UHJlZmVyRGlzdCgkdGhpcy0+cHJlZmVyRGlzdCk7CgoKIAogCiAkaW5zdGFsbGVkUm9vdFBhY2thZ2UgPSBjbG9uZSAkdGhpcy0+cGFja2FnZTsKJGluc3RhbGxlZFJvb3RQYWNrYWdlLT5zZXRSZXF1aXJlcyhhcnJheSgpKTsKJGluc3RhbGxlZFJvb3RQYWNrYWdlLT5zZXREZXZSZXF1aXJlcyhhcnJheSgpKTsKCgogJGxvY2FsUmVwbyA9ICR0aGlzLT5yZXBvc2l0b3J5TWFuYWdlci0+Z2V0TG9jYWxSZXBvc2l0b3J5KCk7CiRwbGF0Zm9ybVJlcG8gPSBuZXcgUGxhdGZvcm1SZXBvc2l0b3J5KCk7CiRyZXBvcyA9IGFycmF5KAokbG9jYWxSZXBvLApuZXcgSW5zdGFsbGVkQXJyYXlSZXBvc2l0b3J5KGFycmF5KCRpbnN0YWxsZWRSb290UGFja2FnZSkpLAokcGxhdGZvcm1SZXBvLAopOwokaW5zdGFsbGVkUmVwbyA9IG5ldyBDb21wb3NpdGVSZXBvc2l0b3J5KCRyZXBvcyk7CmlmICgkdGhpcy0+YWRkaXRpb25hbEluc3RhbGxlZFJlcG9zaXRvcnkpIHsKJGluc3RhbGxlZFJlcG8tPmFkZFJlcG9zaXRvcnkoJHRoaXMtPmFkZGl0aW9uYWxJbnN0YWxsZWRSZXBvc2l0b3J5KTsKfQoKJGFsaWFzZXMgPSAkdGhpcy0+Z2V0Um9vdEFsaWFzZXMoKTsKJHRoaXMtPmFsaWFzUGxhdGZvcm1QYWNrYWdlcygkcGxhdGZvcm1SZXBvLCAkYWxpYXNlcyk7Cgp0cnkgewokdGhpcy0+c3VnZ2VzdGVkUGFja2FnZXMgPSBhcnJheSgpOwokcmVzID0gJHRoaXMtPmRvSW5zdGFsbCgkbG9jYWxSZXBvLCAkaW5zdGFsbGVkUmVwbywgJHBsYXRmb3JtUmVwbywgJGFsaWFzZXMsICR0aGlzLT5kZXZNb2RlKTsKaWYgKCRyZXMgIT09IDApIHsKcmV0dXJuICRyZXM7Cn0KfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewokdGhpcy0+aW5zdGFsbGF0aW9uTWFuYWdlci0+bm90aWZ5SW5zdGFsbHMoKTsKCnRocm93ICRlOwp9CiR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyLT5ub3RpZnlJbnN0YWxscygpOwoKCiBpZiAoJHRoaXMtPmRldk1vZGUpIHsKZm9yZWFjaCAoJHRoaXMtPnN1Z2dlc3RlZFBhY2thZ2VzIGFzICRzdWdnZXN0aW9uKSB7CiR0YXJnZXQgPSAkc3VnZ2VzdGlvblsndGFyZ2V0J107CmZvcmVhY2ggKCRpbnN0YWxsZWRSZXBvLT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CmlmIChpbl9hcnJheSgkdGFyZ2V0LCAkcGFja2FnZS0+Z2V0TmFtZXMoKSkpIHsKY29udGludWUgMjsKfQp9CgokdGhpcy0+aW8tPndyaXRlKCRzdWdnZXN0aW9uWydzb3VyY2UnXS4nIHN1Z2dlc3RzIGluc3RhbGxpbmcgJy4kc3VnZ2VzdGlvblsndGFyZ2V0J10uJyAoJy4kc3VnZ2VzdGlvblsncmVhc29uJ10uJyknKTsKfQp9CgppZiAoISR0aGlzLT5kcnlSdW4pIHsKCiBpZiAoJHRoaXMtPnVwZGF0ZSB8fCAhJHRoaXMtPmxvY2tlci0+aXNMb2NrZWQoKSkgewokbG9jYWxSZXBvLT5yZWxvYWQoKTsKCgogCiAkZGV2UGFja2FnZXMgPSAoJHRoaXMtPmRldk1vZGUgfHwgISR0aGlzLT5wYWNrYWdlLT5nZXREZXZSZXF1aXJlcygpKSA/IGFycmF5KCkgOiBudWxsOwoKCiBpZiAoJHRoaXMtPmRldk1vZGUgJiYgJHRoaXMtPnBhY2thZ2UtPmdldERldlJlcXVpcmVzKCkpIHsKJHBvbGljeSA9ICR0aGlzLT5jcmVhdGVQb2xpY3koKTsKJHBvb2wgPSAkdGhpcy0+Y3JlYXRlUG9vbCh0cnVlKTsKJHBvb2wtPmFkZFJlcG9zaXRvcnkoJGluc3RhbGxlZFJlcG8sICRhbGlhc2VzKTsKCgogJHJlcXVlc3QgPSAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkcG9vbCwgJHRoaXMtPnBhY2thZ2UsICRwbGF0Zm9ybVJlcG8pOwokcmVxdWVzdC0+dXBkYXRlQWxsKCk7CmZvcmVhY2ggKCR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpIGFzICRsaW5rKSB7CiRyZXF1ZXN0LT5pbnN0YWxsKCRsaW5rLT5nZXRUYXJnZXQoKSwgJGxpbmstPmdldENvbnN0cmFpbnQoKSk7Cn0KCiRzb2x2ZXIgPSBuZXcgU29sdmVyKCRwb2xpY3ksICRwb29sLCAkaW5zdGFsbGVkUmVwbyk7CiRvcHMgPSAkc29sdmVyLT5zb2x2ZSgkcmVxdWVzdCk7CmZvcmVhY2ggKCRvcHMgYXMgJG9wKSB7CmlmICgkb3AtPmdldEpvYlR5cGUoKSA9PT0gJ3VuaW5zdGFsbCcpIHsKJGRldlBhY2thZ2VzW10gPSAkb3AtPmdldFBhY2thZ2UoKTsKfQp9Cn0KCiRwbGF0Zm9ybVJlcXMgPSAkdGhpcy0+ZXh0cmFjdFBsYXRmb3JtUmVxdWlyZW1lbnRzKCR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpKTsKJHBsYXRmb3JtRGV2UmVxcyA9ICR0aGlzLT5kZXZNb2RlID8gJHRoaXMtPmV4dHJhY3RQbGF0Zm9ybVJlcXVpcmVtZW50cygkdGhpcy0+cGFja2FnZS0+Z2V0RGV2UmVxdWlyZXMoKSkgOiBhcnJheSgpOwoKJHVwZGF0ZWRMb2NrID0gJHRoaXMtPmxvY2tlci0+c2V0TG9ja0RhdGEoCmFycmF5X2RpZmYoJGxvY2FsUmVwby0+Z2V0Q2Fub25pY2FsUGFja2FnZXMoKSwgKGFycmF5KSAkZGV2UGFja2FnZXMpLAokZGV2UGFja2FnZXMsCiRwbGF0Zm9ybVJlcXMsCiRwbGF0Zm9ybURldlJlcXMsCiRhbGlhc2VzLAokdGhpcy0+cGFja2FnZS0+Z2V0TWluaW11bVN0YWJpbGl0eSgpLAokdGhpcy0+cGFja2FnZS0+Z2V0U3RhYmlsaXR5RmxhZ3MoKQopOwppZiAoJHVwZGF0ZWRMb2NrKSB7CiR0aGlzLT5pby0+d3JpdGUoJzxpbmZvPldyaXRpbmcgbG9jayBmaWxlPC9pbmZvPicpOwp9Cn0KCgogaWYgKCR0aGlzLT5vcHRpbWl6ZUF1dG9sb2FkZXIpIHsKJHRoaXMtPmlvLT53cml0ZSgnPGluZm8+R2VuZXJhdGluZyBvcHRpbWl6ZWQgYXV0b2xvYWQgZmlsZXM8L2luZm8+Jyk7Cn0gZWxzZSB7CiR0aGlzLT5pby0+d3JpdGUoJzxpbmZvPkdlbmVyYXRpbmcgYXV0b2xvYWQgZmlsZXM8L2luZm8+Jyk7Cn0KCiR0aGlzLT5hdXRvbG9hZEdlbmVyYXRvci0+c2V0RGV2TW9kZSgkdGhpcy0+ZGV2TW9kZSk7CiR0aGlzLT5hdXRvbG9hZEdlbmVyYXRvci0+ZHVtcCgkdGhpcy0+Y29uZmlnLCAkbG9jYWxSZXBvLCAkdGhpcy0+cGFja2FnZSwgJHRoaXMtPmluc3RhbGxhdGlvbk1hbmFnZXIsICdjb21wb3NlcicsICR0aGlzLT5vcHRpbWl6ZUF1dG9sb2FkZXIpOwoKaWYgKCR0aGlzLT5ydW5TY3JpcHRzKSB7CgogJGV2ZW50TmFtZSA9ICR0aGlzLT51cGRhdGUgPyBTY3JpcHRFdmVudHM6OlBPU1RfVVBEQVRFX0NNRCA6IFNjcmlwdEV2ZW50czo6UE9TVF9JTlNUQUxMX0NNRDsKJHRoaXMtPmV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2hDb21tYW5kRXZlbnQoJGV2ZW50TmFtZSwgJHRoaXMtPmRldk1vZGUpOwp9CgokdmVuZG9yRGlyID0gJHRoaXMtPmNvbmZpZy0+Z2V0KCd2ZW5kb3ItZGlyJyk7CmlmIChpc19kaXIoJHZlbmRvckRpcikpIHsKdG91Y2goJHZlbmRvckRpcik7Cn0KfQoKcmV0dXJuIDA7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBkb0luc3RhbGwoJGxvY2FsUmVwbywgJGluc3RhbGxlZFJlcG8sICRwbGF0Zm9ybVJlcG8sICRhbGlhc2VzLCAkd2l0aERldlJlcXMpCnsKCiAkbG9ja2VkUmVwb3NpdG9yeSA9IG51bGw7CiRyZXBvc2l0b3JpZXMgPSBudWxsOwoKCiAkaW5zdGFsbEZyb21Mb2NrID0gZmFsc2U7CmlmICghJHRoaXMtPnVwZGF0ZSAmJiAkdGhpcy0+bG9ja2VyLT5pc0xvY2tlZCgpKSB7CiRpbnN0YWxsRnJvbUxvY2sgPSB0cnVlOwp0cnkgewokbG9ja2VkUmVwb3NpdG9yeSA9ICR0aGlzLT5sb2NrZXItPmdldExvY2tlZFJlcG9zaXRvcnkoJHdpdGhEZXZSZXFzKTsKfSBjYXRjaCAoXFJ1bnRpbWVFeGNlcHRpb24gJGUpIHsKCiBpZiAoJHRoaXMtPnBhY2thZ2UtPmdldERldlJlcXVpcmVzKCkpIHsKdGhyb3cgJGU7Cn0KCiAkbG9ja2VkUmVwb3NpdG9yeSA9ICR0aGlzLT5sb2NrZXItPmdldExvY2tlZFJlcG9zaXRvcnkoKTsKfQp9CgokdGhpcy0+d2hpdGVsaXN0VXBkYXRlRGVwZW5kZW5jaWVzKAokbG9jYWxSZXBvLAokd2l0aERldlJlcXMsCiR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpLAokdGhpcy0+cGFja2FnZS0+Z2V0RGV2UmVxdWlyZXMoKQopOwoKJHRoaXMtPmlvLT53cml0ZSgnPGluZm8+TG9hZGluZyBjb21wb3NlciByZXBvc2l0b3JpZXMgd2l0aCBwYWNrYWdlIGluZm9ybWF0aW9uPC9pbmZvPicpOwoKCiAkcG9saWN5ID0gJHRoaXMtPmNyZWF0ZVBvbGljeSgpOwokcG9vbCA9ICR0aGlzLT5jcmVhdGVQb29sKCR3aXRoRGV2UmVxcyk7CiRwb29sLT5hZGRSZXBvc2l0b3J5KCRpbnN0YWxsZWRSZXBvLCAkYWxpYXNlcyk7CmlmICgkaW5zdGFsbEZyb21Mb2NrKSB7CiRwb29sLT5hZGRSZXBvc2l0b3J5KCRsb2NrZWRSZXBvc2l0b3J5LCAkYWxpYXNlcyk7Cn0KCmlmICghJGluc3RhbGxGcm9tTG9jaykgewokcmVwb3NpdG9yaWVzID0gJHRoaXMtPnJlcG9zaXRvcnlNYW5hZ2VyLT5nZXRSZXBvc2l0b3JpZXMoKTsKZm9yZWFjaCAoJHJlcG9zaXRvcmllcyBhcyAkcmVwb3NpdG9yeSkgewokcG9vbC0+YWRkUmVwb3NpdG9yeSgkcmVwb3NpdG9yeSwgJGFsaWFzZXMpOwp9Cn0KCgogJHJlcXVlc3QgPSAkdGhpcy0+Y3JlYXRlUmVxdWVzdCgkcG9vbCwgJHRoaXMtPnBhY2thZ2UsICRwbGF0Zm9ybVJlcG8pOwoKaWYgKCEkaW5zdGFsbEZyb21Mb2NrKSB7CgogJHJlbW92ZWRVbnN0YWJsZVBhY2thZ2VzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGxvY2FsUmVwby0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewppZiAoCiEkcG9vbC0+aXNQYWNrYWdlQWNjZXB0YWJsZSgkcGFja2FnZS0+Z2V0TmFtZXMoKSwgJHBhY2thZ2UtPmdldFN0YWJpbGl0eSgpKQomJiAkdGhpcy0+aW5zdGFsbGF0aW9uTWFuYWdlci0+aXNQYWNrYWdlSW5zdGFsbGVkKCRsb2NhbFJlcG8sICRwYWNrYWdlKQopIHsKJHJlbW92ZWRVbnN0YWJsZVBhY2thZ2VzWyRwYWNrYWdlLT5nZXROYW1lKCldID0gdHJ1ZTsKJHJlcXVlc3QtPnJlbW92ZSgkcGFja2FnZS0+Z2V0TmFtZSgpLCBuZXcgVmVyc2lvbkNvbnN0cmFpbnQoJz0nLCAkcGFja2FnZS0+Z2V0VmVyc2lvbigpKSk7Cn0KfQp9CgppZiAoJHRoaXMtPnVwZGF0ZSkgewokdGhpcy0+aW8tPndyaXRlKCc8aW5mbz5VcGRhdGluZyBkZXBlbmRlbmNpZXMnLigkd2l0aERldlJlcXM/JyAoaW5jbHVkaW5nIHJlcXVpcmUtZGV2KSc6JycpLic8L2luZm8+Jyk7CgokcmVxdWVzdC0+dXBkYXRlQWxsKCk7CgppZiAoJHdpdGhEZXZSZXFzKSB7CiRsaW5rcyA9IGFycmF5X21lcmdlKCR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpLCAkdGhpcy0+cGFja2FnZS0+Z2V0RGV2UmVxdWlyZXMoKSk7Cn0gZWxzZSB7CiRsaW5rcyA9ICR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpOwp9Cgpmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspIHsKJHJlcXVlc3QtPmluc3RhbGwoJGxpbmstPmdldFRhcmdldCgpLCAkbGluay0+Z2V0Q29uc3RyYWludCgpKTsKfQoKCiAKIGlmICgkdGhpcy0+dXBkYXRlV2hpdGVsaXN0KSB7CmlmICgkdGhpcy0+bG9ja2VyLT5pc0xvY2tlZCgpKSB7CnRyeSB7CiRjdXJyZW50UGFja2FnZXMgPSAkdGhpcy0+bG9ja2VyLT5nZXRMb2NrZWRSZXBvc2l0b3J5KCR3aXRoRGV2UmVxcyktPmdldFBhY2thZ2VzKCk7Cn0gY2F0Y2ggKFxSdW50aW1lRXhjZXB0aW9uICRlKSB7CgogJGN1cnJlbnRQYWNrYWdlcyA9ICR0aGlzLT5sb2NrZXItPmdldExvY2tlZFJlcG9zaXRvcnkoKS0+Z2V0UGFja2FnZXMoKTsKfQp9IGVsc2UgewokY3VycmVudFBhY2thZ2VzID0gJGluc3RhbGxlZFJlcG8tPmdldFBhY2thZ2VzKCk7Cn0KCgogJGNhbmRpZGF0ZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspIHsKJGNhbmRpZGF0ZXNbJGxpbmstPmdldFRhcmdldCgpXSA9IHRydWU7Cn0KZm9yZWFjaCAoJGxvY2FsUmVwby0+Z2V0UGFja2FnZXMoKSBhcyAkcGFja2FnZSkgewokY2FuZGlkYXRlc1skcGFja2FnZS0+Z2V0TmFtZSgpXSA9IHRydWU7Cn0KCgogZm9yZWFjaCAoJGNhbmRpZGF0ZXMgYXMgJGNhbmRpZGF0ZSA9PiAkZHVtbXkpIHsKZm9yZWFjaCAoJGN1cnJlbnRQYWNrYWdlcyBhcyAkY3VyUGFja2FnZSkgewppZiAoJGN1clBhY2thZ2UtPmdldE5hbWUoKSA9PT0gJGNhbmRpZGF0ZSkgewppZiAoISR0aGlzLT5pc1VwZGF0ZWFibGUoJGN1clBhY2thZ2UpICYmICFpc3NldCgkcmVtb3ZlZFVuc3RhYmxlUGFja2FnZXNbJGN1clBhY2thZ2UtPmdldE5hbWUoKV0pKSB7CiRjb25zdHJhaW50ID0gbmV3IFZlcnNpb25Db25zdHJhaW50KCc9JywgJGN1clBhY2thZ2UtPmdldFZlcnNpb24oKSk7CiRyZXF1ZXN0LT5pbnN0YWxsKCRjdXJQYWNrYWdlLT5nZXROYW1lKCksICRjb25zdHJhaW50KTsKfQpicmVhazsKfQp9Cn0KfQp9IGVsc2VpZiAoJGluc3RhbGxGcm9tTG9jaykgewokdGhpcy0+aW8tPndyaXRlKCc8aW5mbz5JbnN0YWxsaW5nIGRlcGVuZGVuY2llcycuKCR3aXRoRGV2UmVxcz8nIChpbmNsdWRpbmcgcmVxdWlyZS1kZXYpJzonJykuJyBmcm9tIGxvY2sgZmlsZTwvaW5mbz4nKTsKCmlmICghJHRoaXMtPmxvY2tlci0+aXNGcmVzaCgpKSB7CiR0aGlzLT5pby0+d3JpdGUoJzx3YXJuaW5nPldhcm5pbmc6IFRoZSBsb2NrIGZpbGUgaXMgbm90IHVwIHRvIGRhdGUgd2l0aCB0aGUgbGF0ZXN0IGNoYW5nZXMgaW4gY29tcG9zZXIuanNvbi4gWW91IG1heSBiZSBnZXR0aW5nIG91dGRhdGVkIGRlcGVuZGVuY2llcy4gUnVuIHVwZGF0ZSB0byB1cGRhdGUgdGhlbS48L3dhcm5pbmc+Jyk7Cn0KCmZvcmVhY2ggKCRsb2NrZWRSZXBvc2l0b3J5LT5nZXRQYWNrYWdlcygpIGFzICRwYWNrYWdlKSB7CiR2ZXJzaW9uID0gJHBhY2thZ2UtPmdldFZlcnNpb24oKTsKaWYgKGlzc2V0KCRhbGlhc2VzWyRwYWNrYWdlLT5nZXROYW1lKCldWyR2ZXJzaW9uXSkpIHsKJHZlcnNpb24gPSAkYWxpYXNlc1skcGFja2FnZS0+Z2V0TmFtZSgpXVskdmVyc2lvbl1bJ2FsaWFzX25vcm1hbGl6ZWQnXTsKfQokY29uc3RyYWludCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPScsICR2ZXJzaW9uKTsKJGNvbnN0cmFpbnQtPnNldFByZXR0eVN0cmluZygkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpKTsKJHJlcXVlc3QtPmluc3RhbGwoJHBhY2thZ2UtPmdldE5hbWUoKSwgJGNvbnN0cmFpbnQpOwp9Cgpmb3JlYWNoICgkdGhpcy0+bG9ja2VyLT5nZXRQbGF0Zm9ybVJlcXVpcmVtZW50cygkd2l0aERldlJlcXMpIGFzICRsaW5rKSB7CiRyZXF1ZXN0LT5pbnN0YWxsKCRsaW5rLT5nZXRUYXJnZXQoKSwgJGxpbmstPmdldENvbnN0cmFpbnQoKSk7Cn0KfSBlbHNlIHsKJHRoaXMtPmlvLT53cml0ZSgnPGluZm8+SW5zdGFsbGluZyBkZXBlbmRlbmNpZXMnLigkd2l0aERldlJlcXM/JyAoaW5jbHVkaW5nIHJlcXVpcmUtZGV2KSc6JycpLic8L2luZm8+Jyk7CgppZiAoJHdpdGhEZXZSZXFzKSB7CiRsaW5rcyA9IGFycmF5X21lcmdlKCR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpLCAkdGhpcy0+cGFja2FnZS0+Z2V0RGV2UmVxdWlyZXMoKSk7Cn0gZWxzZSB7CiRsaW5rcyA9ICR0aGlzLT5wYWNrYWdlLT5nZXRSZXF1aXJlcygpOwp9Cgpmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspIHsKJHJlcXVlc3QtPmluc3RhbGwoJGxpbmstPmdldFRhcmdldCgpLCAkbGluay0+Z2V0Q29uc3RyYWludCgpKTsKfQp9CgoKICR0aGlzLT5wcm9jZXNzRGV2UGFja2FnZXMoJGxvY2FsUmVwbywgJHBvb2wsICRwb2xpY3ksICRyZXBvc2l0b3JpZXMsICRsb2NrZWRSZXBvc2l0b3J5LCAkaW5zdGFsbEZyb21Mb2NrLCAnZm9yY2UtbGlua3MnKTsKCgogJHNvbHZlciA9IG5ldyBTb2x2ZXIoJHBvbGljeSwgJHBvb2wsICRpbnN0YWxsZWRSZXBvKTsKdHJ5IHsKJG9wZXJhdGlvbnMgPSAkc29sdmVyLT5zb2x2ZSgkcmVxdWVzdCk7Cn0gY2F0Y2ggKFNvbHZlclByb2JsZW1zRXhjZXB0aW9uICRlKSB7CiR0aGlzLT5pby0+d3JpdGUoJzxlcnJvcj5Zb3VyIHJlcXVpcmVtZW50cyBjb3VsZCBub3QgYmUgcmVzb2x2ZWQgdG8gYW4gaW5zdGFsbGFibGUgc2V0IG9mIHBhY2thZ2VzLjwvZXJyb3I+Jyk7CiR0aGlzLT5pby0+d3JpdGUoJGUtPmdldE1lc3NhZ2UoKSk7CgpyZXR1cm4gbWF4KDEsICRlLT5nZXRDb2RlKCkpOwp9CgoKICRvcGVyYXRpb25zID0gJHRoaXMtPnByb2Nlc3NEZXZQYWNrYWdlcygkbG9jYWxSZXBvLCAkcG9vbCwgJHBvbGljeSwgJHJlcG9zaXRvcmllcywgJGxvY2tlZFJlcG9zaXRvcnksICRpbnN0YWxsRnJvbUxvY2ssICdmb3JjZS11cGRhdGVzJywgJG9wZXJhdGlvbnMpOwoKCiBpZiAoISRvcGVyYXRpb25zKSB7CiR0aGlzLT5pby0+d3JpdGUoJ05vdGhpbmcgdG8gaW5zdGFsbCBvciB1cGRhdGUnKTsKfQoKJG9wZXJhdGlvbnMgPSAkdGhpcy0+bW92ZVBsdWdpbnNUb0Zyb250KCRvcGVyYXRpb25zKTsKJG9wZXJhdGlvbnMgPSAkdGhpcy0+bW92ZVVuaW5zdGFsbHNUb0Zyb250KCRvcGVyYXRpb25zKTsKCmZvcmVhY2ggKCRvcGVyYXRpb25zIGFzICRvcGVyYXRpb24pIHsKCiBpZiAoJ2luc3RhbGwnID09PSAkb3BlcmF0aW9uLT5nZXRKb2JUeXBlKCkpIHsKZm9yZWFjaCAoJG9wZXJhdGlvbi0+Z2V0UGFja2FnZSgpLT5nZXRTdWdnZXN0cygpIGFzICR0YXJnZXQgPT4gJHJlYXNvbikgewokdGhpcy0+c3VnZ2VzdGVkUGFja2FnZXNbXSA9IGFycmF5KAonc291cmNlJyA9PiAkb3BlcmF0aW9uLT5nZXRQYWNrYWdlKCktPmdldFByZXR0eU5hbWUoKSwKJ3RhcmdldCcgPT4gJHRhcmdldCwKJ3JlYXNvbicgPT4gJHJlYXNvbiwKKTsKfQp9CgokZXZlbnQgPSAnQ29tcG9zZXJcU2NyaXB0XFNjcmlwdEV2ZW50czo6UFJFX1BBQ0tBR0VfJy5zdHJ0b3VwcGVyKCRvcGVyYXRpb24tPmdldEpvYlR5cGUoKSk7CmlmIChkZWZpbmVkKCRldmVudCkgJiYgJHRoaXMtPnJ1blNjcmlwdHMpIHsKJHRoaXMtPmV2ZW50RGlzcGF0Y2hlci0+ZGlzcGF0Y2hQYWNrYWdlRXZlbnQoY29uc3RhbnQoJGV2ZW50KSwgJHRoaXMtPmRldk1vZGUsICRvcGVyYXRpb24pOwp9CgoKIGlmICghJGluc3RhbGxGcm9tTG9jaykgewokcGFja2FnZSA9IG51bGw7CmlmICgndXBkYXRlJyA9PT0gJG9wZXJhdGlvbi0+Z2V0Sm9iVHlwZSgpKSB7CiRwYWNrYWdlID0gJG9wZXJhdGlvbi0+Z2V0VGFyZ2V0UGFja2FnZSgpOwp9IGVsc2VpZiAoJ2luc3RhbGwnID09PSAkb3BlcmF0aW9uLT5nZXRKb2JUeXBlKCkpIHsKJHBhY2thZ2UgPSAkb3BlcmF0aW9uLT5nZXRQYWNrYWdlKCk7Cn0KaWYgKCRwYWNrYWdlICYmICRwYWNrYWdlLT5pc0RldigpKSB7CiRyZWZlcmVuY2VzID0gJHRoaXMtPnBhY2thZ2UtPmdldFJlZmVyZW5jZXMoKTsKaWYgKGlzc2V0KCRyZWZlcmVuY2VzWyRwYWNrYWdlLT5nZXROYW1lKCldKSkgewokcGFja2FnZS0+c2V0U291cmNlUmVmZXJlbmNlKCRyZWZlcmVuY2VzWyRwYWNrYWdlLT5nZXROYW1lKCldKTsKJHBhY2thZ2UtPnNldERpc3RSZWZlcmVuY2UoJHJlZmVyZW5jZXNbJHBhY2thZ2UtPmdldE5hbWUoKV0pOwp9Cn0KfQoKCiBpZiAoJHRoaXMtPmRyeVJ1biAmJiBmYWxzZSA9PT0gc3RycG9zKCRvcGVyYXRpb24tPmdldEpvYlR5cGUoKSwgJ0FsaWFzJykpIHsKJHRoaXMtPmlvLT53cml0ZSgnICAtICcgLiAkb3BlcmF0aW9uKTsKJHRoaXMtPmlvLT53cml0ZSgnJyk7Cn0gZWxzZWlmICgkdGhpcy0+aW8tPmlzRGVidWcoKSAmJiBmYWxzZSAhPT0gc3RycG9zKCRvcGVyYXRpb24tPmdldEpvYlR5cGUoKSwgJ0FsaWFzJykpIHsKJHRoaXMtPmlvLT53cml0ZSgnICAtICcgLiAkb3BlcmF0aW9uKTsKJHRoaXMtPmlvLT53cml0ZSgnJyk7Cn0KCiR0aGlzLT5pbnN0YWxsYXRpb25NYW5hZ2VyLT5leGVjdXRlKCRsb2NhbFJlcG8sICRvcGVyYXRpb24pOwoKCiBpZiAoJHRoaXMtPnZlcmJvc2UgJiYgJHRoaXMtPmlvLT5pc1ZlcnlWZXJib3NlKCkgJiYgaW5fYXJyYXkoJG9wZXJhdGlvbi0+Z2V0Sm9iVHlwZSgpLCBhcnJheSgnaW5zdGFsbCcsICd1cGRhdGUnKSkpIHsKJHJlYXNvbiA9ICRvcGVyYXRpb24tPmdldFJlYXNvbigpOwppZiAoJHJlYXNvbiBpbnN0YW5jZW9mIFJ1bGUpIHsKc3dpdGNoICgkcmVhc29uLT5nZXRSZWFzb24oKSkgewpjYXNlIFJ1bGU6OlJVTEVfSk9CX0lOU1RBTEw6CiR0aGlzLT5pby0+d3JpdGUoJyAgICBSRUFTT046IFJlcXVpcmVkIGJ5IHJvb3Q6ICcuJHJlYXNvbi0+Z2V0UmVxdWlyZWRQYWNrYWdlKCkpOwokdGhpcy0+aW8tPndyaXRlKCcnKTsKYnJlYWs7CmNhc2UgUnVsZTo6UlVMRV9QQUNLQUdFX1JFUVVJUkVTOgokdGhpcy0+aW8tPndyaXRlKCcgICAgUkVBU09OOiAnLiRyZWFzb24tPmdldFByZXR0eVN0cmluZygpKTsKJHRoaXMtPmlvLT53cml0ZSgnJyk7CmJyZWFrOwp9Cn0KfQoKJGV2ZW50ID0gJ0NvbXBvc2VyXFNjcmlwdFxTY3JpcHRFdmVudHM6OlBPU1RfUEFDS0FHRV8nLnN0cnRvdXBwZXIoJG9wZXJhdGlvbi0+Z2V0Sm9iVHlwZSgpKTsKaWYgKGRlZmluZWQoJGV2ZW50KSAmJiAkdGhpcy0+cnVuU2NyaXB0cykgewokdGhpcy0+ZXZlbnREaXNwYXRjaGVyLT5kaXNwYXRjaFBhY2thZ2VFdmVudChjb25zdGFudCgkZXZlbnQpLCAkdGhpcy0+ZGV2TW9kZSwgJG9wZXJhdGlvbik7Cn0KCmlmICghJHRoaXMtPmRyeVJ1bikgewokbG9jYWxSZXBvLT53cml0ZSgpOwp9Cn0KCnJldHVybiAwOwp9CgoKCgoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBtb3ZlUGx1Z2luc1RvRnJvbnQoYXJyYXkgJG9wZXJhdGlvbnMpCnsKJGluc3RhbGxlck9wcyA9IGFycmF5KCk7CmZvcmVhY2ggKCRvcGVyYXRpb25zIGFzICRpZHggPT4gJG9wKSB7CmlmICgkb3AgaW5zdGFuY2VvZiBJbnN0YWxsT3BlcmF0aW9uKSB7CiRwYWNrYWdlID0gJG9wLT5nZXRQYWNrYWdlKCk7Cn0gZWxzZWlmICgkb3AgaW5zdGFuY2VvZiBVcGRhdGVPcGVyYXRpb24pIHsKJHBhY2thZ2UgPSAkb3AtPmdldFRhcmdldFBhY2thZ2UoKTsKfSBlbHNlIHsKY29udGludWU7Cn0KCmlmICgkcGFja2FnZS0+Z2V0UmVxdWlyZXMoKSA9PT0gYXJyYXkoKSAmJiAoJHBhY2thZ2UtPmdldFR5cGUoKSA9PT0gJ2NvbXBvc2VyLXBsdWdpbicgfHwgJHBhY2thZ2UtPmdldFR5cGUoKSA9PT0gJ2NvbXBvc2VyLWluc3RhbGxlcicpKSB7CiRpbnN0YWxsZXJPcHNbXSA9ICRvcDsKdW5zZXQoJG9wZXJhdGlvbnNbJGlkeF0pOwp9Cn0KCnJldHVybiBhcnJheV9tZXJnZSgkaW5zdGFsbGVyT3BzLCAkb3BlcmF0aW9ucyk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIG1vdmVVbmluc3RhbGxzVG9Gcm9udChhcnJheSAkb3BlcmF0aW9ucykKewokdW5pbnN0T3BzID0gYXJyYXkoKTsKZm9yZWFjaCAoJG9wZXJhdGlvbnMgYXMgJGlkeCA9PiAkb3ApIHsKaWYgKCRvcCBpbnN0YW5jZW9mIFVuaW5zdGFsbE9wZXJhdGlvbikgewokdW5pbnN0T3BzW10gPSAkb3A7CnVuc2V0KCRvcGVyYXRpb25zWyRpZHhdKTsKfQp9CgpyZXR1cm4gYXJyYXlfbWVyZ2UoJHVuaW5zdE9wcywgJG9wZXJhdGlvbnMpOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVBvb2woJHdpdGhEZXZSZXFzKQp7CiRtaW5pbXVtU3RhYmlsaXR5ID0gJHRoaXMtPnBhY2thZ2UtPmdldE1pbmltdW1TdGFiaWxpdHkoKTsKJHN0YWJpbGl0eUZsYWdzID0gJHRoaXMtPnBhY2thZ2UtPmdldFN0YWJpbGl0eUZsYWdzKCk7CgppZiAoISR0aGlzLT51cGRhdGUgJiYgJHRoaXMtPmxvY2tlci0+aXNMb2NrZWQoKSkgewokbWluaW11bVN0YWJpbGl0eSA9ICR0aGlzLT5sb2NrZXItPmdldE1pbmltdW1TdGFiaWxpdHkoKTsKJHN0YWJpbGl0eUZsYWdzID0gJHRoaXMtPmxvY2tlci0+Z2V0U3RhYmlsaXR5RmxhZ3MoKTsKfQoKJHJlcXVpcmVzID0gJHRoaXMtPnBhY2thZ2UtPmdldFJlcXVpcmVzKCk7CmlmICgkd2l0aERldlJlcXMpIHsKJHJlcXVpcmVzID0gYXJyYXlfbWVyZ2UoJHJlcXVpcmVzLCAkdGhpcy0+cGFja2FnZS0+Z2V0RGV2UmVxdWlyZXMoKSk7Cn0KJHJvb3RDb25zdHJhaW50cyA9IGFycmF5KCk7CmZvcmVhY2ggKCRyZXF1aXJlcyBhcyAkcmVxID0+ICRjb25zdHJhaW50KSB7CiRyb290Q29uc3RyYWludHNbJHJlcV0gPSAkY29uc3RyYWludC0+Z2V0Q29uc3RyYWludCgpOwp9CgpyZXR1cm4gbmV3IFBvb2woJG1pbmltdW1TdGFiaWxpdHksICRzdGFiaWxpdHlGbGFncywgJHJvb3RDb25zdHJhaW50cyk7Cn0KCnByaXZhdGUgZnVuY3Rpb24gY3JlYXRlUG9saWN5KCkKewpyZXR1cm4gbmV3IERlZmF1bHRQb2xpY3koJHRoaXMtPnBhY2thZ2UtPmdldFByZWZlclN0YWJsZSgpKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBjcmVhdGVSZXF1ZXN0KFBvb2wgJHBvb2wsIFJvb3RQYWNrYWdlSW50ZXJmYWNlICRyb290UGFja2FnZSwgUGxhdGZvcm1SZXBvc2l0b3J5ICRwbGF0Zm9ybVJlcG8pCnsKJHJlcXVlc3QgPSBuZXcgUmVxdWVzdCgkcG9vbCk7CgokY29uc3RyYWludCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPScsICRyb290UGFja2FnZS0+Z2V0VmVyc2lvbigpKTsKJGNvbnN0cmFpbnQtPnNldFByZXR0eVN0cmluZygkcm9vdFBhY2thZ2UtPmdldFByZXR0eVZlcnNpb24oKSk7CiRyZXF1ZXN0LT5pbnN0YWxsKCRyb290UGFja2FnZS0+Z2V0TmFtZSgpLCAkY29uc3RyYWludCk7CgokZml4ZWRQYWNrYWdlcyA9ICRwbGF0Zm9ybVJlcG8tPmdldFBhY2thZ2VzKCk7CmlmICgkdGhpcy0+YWRkaXRpb25hbEluc3RhbGxlZFJlcG9zaXRvcnkpIHsKJGFkZGl0aW9uYWxGaXhlZFBhY2thZ2VzID0gJHRoaXMtPmFkZGl0aW9uYWxJbnN0YWxsZWRSZXBvc2l0b3J5LT5nZXRQYWNrYWdlcygpOwokZml4ZWRQYWNrYWdlcyA9IGFycmF5X21lcmdlKCRmaXhlZFBhY2thZ2VzLCAkYWRkaXRpb25hbEZpeGVkUGFja2FnZXMpOwp9CgoKIAogJHByb3ZpZGVkID0gJHJvb3RQYWNrYWdlLT5nZXRQcm92aWRlcygpOwpmb3JlYWNoICgkZml4ZWRQYWNrYWdlcyBhcyAkcGFja2FnZSkgewokY29uc3RyYWludCA9IG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPScsICRwYWNrYWdlLT5nZXRWZXJzaW9uKCkpOwokY29uc3RyYWludC0+c2V0UHJldHR5U3RyaW5nKCRwYWNrYWdlLT5nZXRQcmV0dHlWZXJzaW9uKCkpOwoKCiBpZiAoJHBhY2thZ2UtPmdldFJlcG9zaXRvcnkoKSAhPT0gJHBsYXRmb3JtUmVwbwp8fCAhaXNzZXQoJHByb3ZpZGVkWyRwYWNrYWdlLT5nZXROYW1lKCldKQp8fCAhJHByb3ZpZGVkWyRwYWNrYWdlLT5nZXROYW1lKCldLT5nZXRDb25zdHJhaW50KCktPm1hdGNoZXMoJGNvbnN0cmFpbnQpCikgewokcmVxdWVzdC0+aW5zdGFsbCgkcGFja2FnZS0+Z2V0TmFtZSgpLCAkY29uc3RyYWludCk7Cn0KfQoKcmV0dXJuICRyZXF1ZXN0Owp9Cgpwcml2YXRlIGZ1bmN0aW9uIHByb2Nlc3NEZXZQYWNrYWdlcygkbG9jYWxSZXBvLCAkcG9vbCwgJHBvbGljeSwgJHJlcG9zaXRvcmllcywgJGxvY2tlZFJlcG9zaXRvcnksICRpbnN0YWxsRnJvbUxvY2ssICR0YXNrLCBhcnJheSAkb3BlcmF0aW9ucyA9IG51bGwpCnsKaWYgKCR0YXNrID09PSAnZm9yY2UtdXBkYXRlcycgJiYgbnVsbCA9PT0gJG9wZXJhdGlvbnMpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ01pc3Npbmcgb3BlcmF0aW9ucyBhcmd1bWVudCcpOwp9CmlmICgkdGFzayA9PT0gJ2ZvcmNlLWxpbmtzJykgewokb3BlcmF0aW9ucyA9IGFycmF5KCk7Cn0KCmZvcmVhY2ggKCRsb2NhbFJlcG8tPmdldENhbm9uaWNhbFBhY2thZ2VzKCkgYXMgJHBhY2thZ2UpIHsKCiBpZiAoISRwYWNrYWdlLT5pc0RldigpKSB7CmNvbnRpbnVlOwp9CgoKIGZvcmVhY2ggKCRvcGVyYXRpb25zIGFzICRvcGVyYXRpb24pIHsKaWYgKCgndXBkYXRlJyA9PT0gJG9wZXJhdGlvbi0+Z2V0Sm9iVHlwZSgpICYmICRvcGVyYXRpb24tPmdldEluaXRpYWxQYWNrYWdlKCktPmVxdWFscygkcGFja2FnZSkpCnx8ICgndW5pbnN0YWxsJyA9PT0gJG9wZXJhdGlvbi0+Z2V0Sm9iVHlwZSgpICYmICRvcGVyYXRpb24tPmdldFBhY2thZ2UoKS0+ZXF1YWxzKCRwYWNrYWdlKSkKKSB7CmNvbnRpbnVlIDI7Cn0KfQoKCiBpZiAoJGluc3RhbGxGcm9tTG9jaykgewpmb3JlYWNoICgkbG9ja2VkUmVwb3NpdG9yeS0+ZmluZFBhY2thZ2VzKCRwYWNrYWdlLT5nZXROYW1lKCkpIGFzICRsb2NrZWRQYWNrYWdlKSB7CmlmICgkbG9ja2VkUGFja2FnZS0+aXNEZXYoKSAmJiAkbG9ja2VkUGFja2FnZS0+Z2V0VmVyc2lvbigpID09PSAkcGFja2FnZS0+Z2V0VmVyc2lvbigpKSB7CmlmICgkdGFzayA9PT0gJ2ZvcmNlLWxpbmtzJykgewokcGFja2FnZS0+c2V0UmVxdWlyZXMoJGxvY2tlZFBhY2thZ2UtPmdldFJlcXVpcmVzKCkpOwokcGFja2FnZS0+c2V0Q29uZmxpY3RzKCRsb2NrZWRQYWNrYWdlLT5nZXRDb25mbGljdHMoKSk7CiRwYWNrYWdlLT5zZXRQcm92aWRlcygkbG9ja2VkUGFja2FnZS0+Z2V0UHJvdmlkZXMoKSk7CiRwYWNrYWdlLT5zZXRSZXBsYWNlcygkbG9ja2VkUGFja2FnZS0+Z2V0UmVwbGFjZXMoKSk7Cn0gZWxzZWlmICgkdGFzayA9PT0gJ2ZvcmNlLXVwZGF0ZXMnKSB7CmlmICgoJGxvY2tlZFBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpICYmICRsb2NrZWRQYWNrYWdlLT5nZXRTb3VyY2VSZWZlcmVuY2UoKSAhPT0gJHBhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpKQp8fCAoJGxvY2tlZFBhY2thZ2UtPmdldERpc3RSZWZlcmVuY2UoKSAmJiAkbG9ja2VkUGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpICE9PSAkcGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpKQopIHsKJG9wZXJhdGlvbnNbXSA9IG5ldyBVcGRhdGVPcGVyYXRpb24oJHBhY2thZ2UsICRsb2NrZWRQYWNrYWdlKTsKfQp9CgpicmVhazsKfQp9Cn0gZWxzZSB7CgogaWYgKCR0aGlzLT51cGRhdGUpIHsKCiBpZiAoJHRoaXMtPnVwZGF0ZVdoaXRlbGlzdCAmJiAhJHRoaXMtPmlzVXBkYXRlYWJsZSgkcGFja2FnZSkpIHsKY29udGludWU7Cn0KCgogJG1hdGNoZXMgPSAkcG9vbC0+d2hhdFByb3ZpZGVzKCRwYWNrYWdlLT5nZXROYW1lKCksIG5ldyBWZXJzaW9uQ29uc3RyYWludCgnPScsICRwYWNrYWdlLT5nZXRWZXJzaW9uKCkpKTsKZm9yZWFjaCAoJG1hdGNoZXMgYXMgJGluZGV4ID0+ICRtYXRjaCkgewoKIGlmICghaW5fYXJyYXkoJG1hdGNoLT5nZXRSZXBvc2l0b3J5KCksICRyZXBvc2l0b3JpZXMsIHRydWUpKSB7CnVuc2V0KCRtYXRjaGVzWyRpbmRleF0pOwpjb250aW51ZTsKfQoKCiBpZiAoJG1hdGNoLT5nZXROYW1lKCkgIT09ICRwYWNrYWdlLT5nZXROYW1lKCkpIHsKdW5zZXQoJG1hdGNoZXNbJGluZGV4XSk7CmNvbnRpbnVlOwp9CgokbWF0Y2hlc1skaW5kZXhdID0gJG1hdGNoLT5nZXRJZCgpOwp9CgoKIGlmICgkbWF0Y2hlcyAmJiAkbWF0Y2hlcyA9ICRwb2xpY3ktPnNlbGVjdFByZWZlcmVkUGFja2FnZXMoJHBvb2wsIGFycmF5KCksICRtYXRjaGVzKSkgewokbmV3UGFja2FnZSA9ICRwb29sLT5saXRlcmFsVG9QYWNrYWdlKCRtYXRjaGVzWzBdKTsKCmlmICgkdGFzayA9PT0gJ2ZvcmNlLWxpbmtzJyAmJiAkbmV3UGFja2FnZSkgewokcGFja2FnZS0+c2V0UmVxdWlyZXMoJG5ld1BhY2thZ2UtPmdldFJlcXVpcmVzKCkpOwokcGFja2FnZS0+c2V0Q29uZmxpY3RzKCRuZXdQYWNrYWdlLT5nZXRDb25mbGljdHMoKSk7CiRwYWNrYWdlLT5zZXRQcm92aWRlcygkbmV3UGFja2FnZS0+Z2V0UHJvdmlkZXMoKSk7CiRwYWNrYWdlLT5zZXRSZXBsYWNlcygkbmV3UGFja2FnZS0+Z2V0UmVwbGFjZXMoKSk7Cn0KCmlmICgkdGFzayA9PT0gJ2ZvcmNlLXVwZGF0ZXMnICYmICRuZXdQYWNrYWdlICYmICgKKCgkbmV3UGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkgJiYgJG5ld1BhY2thZ2UtPmdldFNvdXJjZVJlZmVyZW5jZSgpICE9PSAkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkpCnx8ICgkbmV3UGFja2FnZS0+Z2V0RGlzdFJlZmVyZW5jZSgpICYmICRuZXdQYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkgIT09ICRwYWNrYWdlLT5nZXREaXN0UmVmZXJlbmNlKCkpCikKKSkgewokb3BlcmF0aW9uc1tdID0gbmV3IFVwZGF0ZU9wZXJhdGlvbigkcGFja2FnZSwgJG5ld1BhY2thZ2UpOwp9Cn0KfQoKaWYgKCR0YXNrID09PSAnZm9yY2UtdXBkYXRlcycpIHsKCiAkcmVmZXJlbmNlcyA9ICR0aGlzLT5wYWNrYWdlLT5nZXRSZWZlcmVuY2VzKCk7CgppZiAoaXNzZXQoJHJlZmVyZW5jZXNbJHBhY2thZ2UtPmdldE5hbWUoKV0pICYmICRyZWZlcmVuY2VzWyRwYWNrYWdlLT5nZXROYW1lKCldICE9PSAkcGFja2FnZS0+Z2V0U291cmNlUmVmZXJlbmNlKCkpIHsKCiAkb3BlcmF0aW9uc1tdID0gbmV3IFVwZGF0ZU9wZXJhdGlvbigkcGFja2FnZSwgY2xvbmUgJHBhY2thZ2UpOwp9Cn0KfQp9CgpyZXR1cm4gJG9wZXJhdGlvbnM7Cn0KCnByaXZhdGUgZnVuY3Rpb24gZ2V0Um9vdEFsaWFzZXMoKQp7CmlmICghJHRoaXMtPnVwZGF0ZSAmJiAkdGhpcy0+bG9ja2VyLT5pc0xvY2tlZCgpKSB7CiRhbGlhc2VzID0gJHRoaXMtPmxvY2tlci0+Z2V0QWxpYXNlcygpOwp9IGVsc2UgewokYWxpYXNlcyA9ICR0aGlzLT5wYWNrYWdlLT5nZXRBbGlhc2VzKCk7Cn0KCiRub3JtYWxpemVkQWxpYXNlcyA9IGFycmF5KCk7Cgpmb3JlYWNoICgkYWxpYXNlcyBhcyAkYWxpYXMpIHsKJG5vcm1hbGl6ZWRBbGlhc2VzWyRhbGlhc1sncGFja2FnZSddXVskYWxpYXNbJ3ZlcnNpb24nXV0gPSBhcnJheSgKJ2FsaWFzJyA9PiAkYWxpYXNbJ2FsaWFzJ10sCidhbGlhc19ub3JtYWxpemVkJyA9PiAkYWxpYXNbJ2FsaWFzX25vcm1hbGl6ZWQnXQopOwp9CgpyZXR1cm4gJG5vcm1hbGl6ZWRBbGlhc2VzOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGFsaWFzUGxhdGZvcm1QYWNrYWdlcyhQbGF0Zm9ybVJlcG9zaXRvcnkgJHBsYXRmb3JtUmVwbywgJGFsaWFzZXMpCnsKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJHBhY2thZ2UgPT4gJHZlcnNpb25zKSB7CmZvcmVhY2ggKCR2ZXJzaW9ucyBhcyAkdmVyc2lvbiA9PiAkYWxpYXMpIHsKJHBhY2thZ2VzID0gJHBsYXRmb3JtUmVwby0+ZmluZFBhY2thZ2VzKCRwYWNrYWdlLCAkdmVyc2lvbik7CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAkcGFja2FnZSkgewokYWxpYXNQYWNrYWdlID0gbmV3IEFsaWFzUGFja2FnZSgkcGFja2FnZSwgJGFsaWFzWydhbGlhc19ub3JtYWxpemVkJ10sICRhbGlhc1snYWxpYXMnXSk7CiRhbGlhc1BhY2thZ2UtPnNldFJvb3RQYWNrYWdlQWxpYXModHJ1ZSk7CiRwbGF0Zm9ybVJlcG8tPmFkZFBhY2thZ2UoJGFsaWFzUGFja2FnZSk7Cn0KfQp9Cn0KCnByaXZhdGUgZnVuY3Rpb24gaXNVcGRhdGVhYmxlKFBhY2thZ2VJbnRlcmZhY2UgJHBhY2thZ2UpCnsKaWYgKCEkdGhpcy0+dXBkYXRlV2hpdGVsaXN0KSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ2lzVXBkYXRlYWJsZSBzaG91bGQgb25seSBiZSBjYWxsZWQgd2hlbiBhIHdoaXRlbGlzdCBpcyBwcmVzZW50Jyk7Cn0KCmZvcmVhY2ggKCR0aGlzLT51cGRhdGVXaGl0ZWxpc3QgYXMgJHdoaXRlTGlzdGVkUGF0dGVybiA9PiAkdm9pZCkgewokcGF0dGVyblJlZ2V4cCA9ICR0aGlzLT5wYWNrYWdlTmFtZVRvUmVnZXhwKCR3aGl0ZUxpc3RlZFBhdHRlcm4pOwppZiAocHJlZ19tYXRjaCgkcGF0dGVyblJlZ2V4cCwgJHBhY2thZ2UtPmdldE5hbWUoKSkpIHsKcmV0dXJuIHRydWU7Cn0KfQoKcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHBhY2thZ2VOYW1lVG9SZWdleHAoJHdoaXRlTGlzdGVkUGF0dGVybikKewokY2xlYW5lZFdoaXRlTGlzdGVkUGF0dGVybiA9IHN0cl9yZXBsYWNlKCdcXConLCAnLionLCBwcmVnX3F1b3RlKCR3aGl0ZUxpc3RlZFBhdHRlcm4pKTsKCnJldHVybiAie14iIC4gJGNsZWFuZWRXaGl0ZUxpc3RlZFBhdHRlcm4gLiAiJH1pIjsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBleHRyYWN0UGxhdGZvcm1SZXF1aXJlbWVudHMoJGxpbmtzKQp7CiRwbGF0Zm9ybVJlcXMgPSBhcnJheSgpOwpmb3JlYWNoICgkbGlua3MgYXMgJGxpbmspIHsKaWYgKHByZWdfbWF0Y2goUGxhdGZvcm1SZXBvc2l0b3J5OjpQTEFURk9STV9QQUNLQUdFX1JFR0VYLCAkbGluay0+Z2V0VGFyZ2V0KCkpKSB7CiRwbGF0Zm9ybVJlcXNbJGxpbmstPmdldFRhcmdldCgpXSA9ICRsaW5rLT5nZXRQcmV0dHlDb25zdHJhaW50KCk7Cn0KfQoKcmV0dXJuICRwbGF0Zm9ybVJlcXM7Cn0KCgoKCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gd2hpdGVsaXN0VXBkYXRlRGVwZW5kZW5jaWVzKCRsb2NhbFJlcG8sICRkZXZNb2RlLCBhcnJheSAkcm9vdFJlcXVpcmVzLCBhcnJheSAkcm9vdERldlJlcXVpcmVzKQp7CmlmICghJHRoaXMtPnVwZGF0ZVdoaXRlbGlzdCkgewpyZXR1cm47Cn0KCiRyZXF1aXJlZFBhY2thZ2VOYW1lcyA9IGFycmF5KCk7CmZvcmVhY2ggKGFycmF5X21lcmdlKCRyb290UmVxdWlyZXMsICRyb290RGV2UmVxdWlyZXMpIGFzICRyZXF1aXJlKSB7CiRyZXF1aXJlZFBhY2thZ2VOYW1lc1tdID0gJHJlcXVpcmUtPmdldFRhcmdldCgpOwp9CgppZiAoJGRldk1vZGUpIHsKJHJvb3RSZXF1aXJlcyA9IGFycmF5X21lcmdlKCRyb290UmVxdWlyZXMsICRyb290RGV2UmVxdWlyZXMpOwp9Cgokc2tpcFBhY2thZ2VzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHJvb3RSZXF1aXJlcyBhcyAkcmVxdWlyZSkgewokc2tpcFBhY2thZ2VzWyRyZXF1aXJlLT5nZXRUYXJnZXQoKV0gPSB0cnVlOwp9CgokcG9vbCA9IG5ldyBQb29sOwokcG9vbC0+YWRkUmVwb3NpdG9yeSgkbG9jYWxSZXBvKTsKCiRzZWVuID0gYXJyYXkoKTsKCiRyb290UmVxdWlyZWRQYWNrYWdlTmFtZXMgPSBhcnJheV9rZXlzKCRyb290UmVxdWlyZXMpOwoKZm9yZWFjaCAoJHRoaXMtPnVwZGF0ZVdoaXRlbGlzdCBhcyAkcGFja2FnZU5hbWUgPT4gJHZvaWQpIHsKJHBhY2thZ2VRdWV1ZSA9IG5ldyBcU3BsUXVldWU7CgokZGVwUGFja2FnZXMgPSAkcG9vbC0+d2hhdFByb3ZpZGVzKCRwYWNrYWdlTmFtZSk7CgokbmFtZU1hdGNoZXNSZXF1aXJlZFBhY2thZ2UgPSBpbl9hcnJheSgkcGFja2FnZU5hbWUsICRyZXF1aXJlZFBhY2thZ2VOYW1lcywgdHJ1ZSk7CgoKIGlmICghJG5hbWVNYXRjaGVzUmVxdWlyZWRQYWNrYWdlKSB7CiR3aGl0ZWxpc3RQYXR0ZXJuUmVnZXhwID0gJHRoaXMtPnBhY2thZ2VOYW1lVG9SZWdleHAoJHBhY2thZ2VOYW1lKTsKZm9yZWFjaCAoJHJvb3RSZXF1aXJlZFBhY2thZ2VOYW1lcyBhcyAkcm9vdFJlcXVpcmVkUGFja2FnZU5hbWUpIHsKaWYgKHByZWdfbWF0Y2goJHdoaXRlbGlzdFBhdHRlcm5SZWdleHAsICRyb290UmVxdWlyZWRQYWNrYWdlTmFtZSkpIHsKJG5hbWVNYXRjaGVzUmVxdWlyZWRQYWNrYWdlID0gdHJ1ZTsKYnJlYWs7Cn0KfQp9CgppZiAoY291bnQoJGRlcFBhY2thZ2VzKSA9PSAwICYmICEkbmFtZU1hdGNoZXNSZXF1aXJlZFBhY2thZ2UgJiYgIWluX2FycmF5KCRwYWNrYWdlTmFtZSwgYXJyYXkoJ25vdGhpbmcnLCAnbG9jaycpKSkgewokdGhpcy0+aW8tPndyaXRlKCc8d2FybmluZz5QYWNrYWdlICInIC4gJHBhY2thZ2VOYW1lIC4gJyIgbGlzdGVkIGZvciB1cGRhdGUgaXMgbm90IGluc3RhbGxlZC4gSWdub3JpbmcuPC93YXJuaW5nPicpOwp9Cgpmb3JlYWNoICgkZGVwUGFja2FnZXMgYXMgJGRlcFBhY2thZ2UpIHsKJHBhY2thZ2VRdWV1ZS0+ZW5xdWV1ZSgkZGVwUGFja2FnZSk7Cn0KCndoaWxlICghJHBhY2thZ2VRdWV1ZS0+aXNFbXB0eSgpKSB7CiRwYWNrYWdlID0gJHBhY2thZ2VRdWV1ZS0+ZGVxdWV1ZSgpOwppZiAoaXNzZXQoJHNlZW5bJHBhY2thZ2UtPmdldElkKCldKSkgewpjb250aW51ZTsKfQoKJHNlZW5bJHBhY2thZ2UtPmdldElkKCldID0gdHJ1ZTsKJHRoaXMtPnVwZGF0ZVdoaXRlbGlzdFskcGFja2FnZS0+Z2V0TmFtZSgpXSA9IHRydWU7CgppZiAoISR0aGlzLT53aGl0ZWxpc3REZXBlbmRlbmNpZXMpIHsKY29udGludWU7Cn0KCiRyZXF1aXJlcyA9ICRwYWNrYWdlLT5nZXRSZXF1aXJlcygpOwoKZm9yZWFjaCAoJHJlcXVpcmVzIGFzICRyZXF1aXJlKSB7CiRyZXF1aXJlUGFja2FnZXMgPSAkcG9vbC0+d2hhdFByb3ZpZGVzKCRyZXF1aXJlLT5nZXRUYXJnZXQoKSk7Cgpmb3JlYWNoICgkcmVxdWlyZVBhY2thZ2VzIGFzICRyZXF1aXJlUGFja2FnZSkgewppZiAoaXNzZXQoJHNraXBQYWNrYWdlc1skcmVxdWlyZVBhY2thZ2UtPmdldE5hbWUoKV0pKSB7CmNvbnRpbnVlOwp9CiRwYWNrYWdlUXVldWUtPmVucXVldWUoJHJlcXVpcmVQYWNrYWdlKTsKfQp9Cn0KfQp9CgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBtb2NrTG9jYWxSZXBvc2l0b3JpZXMoUmVwb3NpdG9yeU1hbmFnZXIgJHJtKQp7CiRwYWNrYWdlcyA9IGFycmF5KCk7CmZvcmVhY2ggKCRybS0+Z2V0TG9jYWxSZXBvc2l0b3J5KCktPmdldFBhY2thZ2VzKCkgYXMgJHBhY2thZ2UpIHsKJHBhY2thZ2VzWyhzdHJpbmcpICRwYWNrYWdlXSA9IGNsb25lICRwYWNrYWdlOwp9CmZvcmVhY2ggKCRwYWNrYWdlcyBhcyAka2V5ID0+ICRwYWNrYWdlKSB7CmlmICgkcGFja2FnZSBpbnN0YW5jZW9mIEFsaWFzUGFja2FnZSkgewokYWxpYXMgPSAoc3RyaW5nKSAkcGFja2FnZS0+Z2V0QWxpYXNPZigpOwokcGFja2FnZXNbJGtleV0gPSBuZXcgQWxpYXNQYWNrYWdlKCRwYWNrYWdlc1skYWxpYXNdLCAkcGFja2FnZS0+Z2V0VmVyc2lvbigpLCAkcGFja2FnZS0+Z2V0UHJldHR5VmVyc2lvbigpKTsKfQp9CiRybS0+c2V0TG9jYWxSZXBvc2l0b3J5KApuZXcgSW5zdGFsbGVkQXJyYXlSZXBvc2l0b3J5KCRwYWNrYWdlcykKKTsKfQoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKElPSW50ZXJmYWNlICRpbywgQ29tcG9zZXIgJGNvbXBvc2VyKQp7CnJldHVybiBuZXcgc3RhdGljKAokaW8sCiRjb21wb3Nlci0+Z2V0Q29uZmlnKCksCiRjb21wb3Nlci0+Z2V0UGFja2FnZSgpLAokY29tcG9zZXItPmdldERvd25sb2FkTWFuYWdlcigpLAokY29tcG9zZXItPmdldFJlcG9zaXRvcnlNYW5hZ2VyKCksCiRjb21wb3Nlci0+Z2V0TG9ja2VyKCksCiRjb21wb3Nlci0+Z2V0SW5zdGFsbGF0aW9uTWFuYWdlcigpLAokY29tcG9zZXItPmdldEV2ZW50RGlzcGF0Y2hlcigpLAokY29tcG9zZXItPmdldEF1dG9sb2FkR2VuZXJhdG9yKCkKKTsKfQoKcHVibGljIGZ1bmN0aW9uIHNldEFkZGl0aW9uYWxJbnN0YWxsZWRSZXBvc2l0b3J5KFJlcG9zaXRvcnlJbnRlcmZhY2UgJGFkZGl0aW9uYWxJbnN0YWxsZWRSZXBvc2l0b3J5KQp7CiR0aGlzLT5hZGRpdGlvbmFsSW5zdGFsbGVkUmVwb3NpdG9yeSA9ICRhZGRpdGlvbmFsSW5zdGFsbGVkUmVwb3NpdG9yeTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERyeVJ1bigkZHJ5UnVuID0gdHJ1ZSkKewokdGhpcy0+ZHJ5UnVuID0gKGJvb2xlYW4pICRkcnlSdW47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRQcmVmZXJTb3VyY2UoJHByZWZlclNvdXJjZSA9IHRydWUpCnsKJHRoaXMtPnByZWZlclNvdXJjZSA9IChib29sZWFuKSAkcHJlZmVyU291cmNlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UHJlZmVyRGlzdCgkcHJlZmVyRGlzdCA9IHRydWUpCnsKJHRoaXMtPnByZWZlckRpc3QgPSAoYm9vbGVhbikgJHByZWZlckRpc3Q7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpbWl6ZUF1dG9sb2FkZXIoJG9wdGltaXplQXV0b2xvYWRlciA9IGZhbHNlKQp7CiR0aGlzLT5vcHRpbWl6ZUF1dG9sb2FkZXIgPSAoYm9vbGVhbikgJG9wdGltaXplQXV0b2xvYWRlcjsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFVwZGF0ZSgkdXBkYXRlID0gdHJ1ZSkKewokdGhpcy0+dXBkYXRlID0gKGJvb2xlYW4pICR1cGRhdGU7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZXZNb2RlKCRkZXZNb2RlID0gdHJ1ZSkKewokdGhpcy0+ZGV2TW9kZSA9IChib29sZWFuKSAkZGV2TW9kZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFJ1blNjcmlwdHMoJHJ1blNjcmlwdHMgPSB0cnVlKQp7CiR0aGlzLT5ydW5TY3JpcHRzID0gKGJvb2xlYW4pICRydW5TY3JpcHRzOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q29uZmlnKENvbmZpZyAkY29uZmlnKQp7CiR0aGlzLT5jb25maWcgPSAkY29uZmlnOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0VmVyYm9zZSgkdmVyYm9zZSA9IHRydWUpCnsKJHRoaXMtPnZlcmJvc2UgPSAoYm9vbGVhbikgJHZlcmJvc2U7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0VXBkYXRlV2hpdGVsaXN0KGFycmF5ICRwYWNrYWdlcykKewokdGhpcy0+dXBkYXRlV2hpdGVsaXN0ID0gYXJyYXlfZmxpcChhcnJheV9tYXAoJ3N0cnRvbG93ZXInLCAkcGFja2FnZXMpKTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFdoaXRlbGlzdERlcGVuZGVuY2llcygkdXBkYXRlRGVwZW5kZW5jaWVzID0gdHJ1ZSkKewokdGhpcy0+d2hpdGVsaXN0RGVwZW5kZW5jaWVzID0gKGJvb2xlYW4pICR1cGRhdGVEZXBlbmRlbmNpZXM7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBkaXNhYmxlUGx1Z2lucygpCnsKJHRoaXMtPmluc3RhbGxhdGlvbk1hbmFnZXItPmRpc2FibGVQbHVnaW5zKCk7CgpyZXR1cm4gJHRoaXM7Cn0KfQo8P3BocAoKLyoKICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgQ29tcG9zZXIuCiAqCiAqIChjKSBOaWxzIEFkZXJtYW5uIDxuYWRlcm1hbkBuYWRlcm1hbi5kZT4KICogICAgIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqCiAqIEZvciB0aGUgZnVsbCBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UgaW5mb3JtYXRpb24sIHBsZWFzZSB2aWV3IHRoZSBMSUNFTlNFCiAqIGZpbGUgdGhhdCB3YXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIHNvdXJjZSBjb2RlLgogKi8KCm5hbWVzcGFjZSBDb21wb3NlclxBdXRvbG9hZDsKCi8qKgogKiBDbGFzc0xvYWRlciBpbXBsZW1lbnRzIGEgUFNSLTAgY2xhc3MgbG9hZGVyCiAqCiAqIFNlZSBodHRwczovL2dpdGh1Yi5jb20vcGhwLWZpZy9maWctc3RhbmRhcmRzL2Jsb2IvbWFzdGVyL2FjY2VwdGVkL1BTUi0wLm1kCiAqCiAqICAgICAkbG9hZGVyID0gbmV3IFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcigpOwogKgogKiAgICAgLy8gcmVnaXN0ZXIgY2xhc3NlcyB3aXRoIG5hbWVzcGFjZXMKICogICAgICRsb2FkZXItPmFkZCgnU3ltZm9ueVxDb21wb25lbnQnLCBfX0RJUl9fLicvY29tcG9uZW50Jyk7CiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnknLCAgICAgICAgICAgX19ESVJfXy4nL2ZyYW1ld29yaycpOwogKgogKiAgICAgLy8gYWN0aXZhdGUgdGhlIGF1dG9sb2FkZXIKICogICAgICRsb2FkZXItPnJlZ2lzdGVyKCk7CiAqCiAqICAgICAvLyB0byBlbmFibGUgc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggKGVnLiBmb3IgUEVBUiBwYWNrYWdlcykKICogICAgICRsb2FkZXItPnNldFVzZUluY2x1ZGVQYXRoKHRydWUpOwogKgogKiBJbiB0aGlzIGV4YW1wbGUsIGlmIHlvdSB0cnkgdG8gdXNlIGEgY2xhc3MgaW4gdGhlIFN5bWZvbnlcQ29tcG9uZW50CiAqIG5hbWVzcGFjZSBvciBvbmUgb2YgaXRzIGNoaWxkcmVuIChTeW1mb255XENvbXBvbmVudFxDb25zb2xlIGZvciBpbnN0YW5jZSksCiAqIHRoZSBhdXRvbG9hZGVyIHdpbGwgZmlyc3QgbG9vayBmb3IgdGhlIGNsYXNzIHVuZGVyIHRoZSBjb21wb25lbnQvCiAqIGRpcmVjdG9yeSwgYW5kIGl0IHdpbGwgdGhlbiBmYWxsYmFjayB0byB0aGUgZnJhbWV3b3JrLyBkaXJlY3RvcnkgaWYgbm90CiAqIGZvdW5kIGJlZm9yZSBnaXZpbmcgdXAuCiAqCiAqIFRoaXMgY2xhc3MgaXMgbG9vc2VseSBiYXNlZCBvbiB0aGUgU3ltZm9ueSBVbml2ZXJzYWxDbGFzc0xvYWRlci4KICoKICogQGF1dGhvciBGYWJpZW4gUG90ZW5jaWVyIDxmYWJpZW5Ac3ltZm9ueS5jb20+CiAqIEBhdXRob3IgSm9yZGkgQm9nZ2lhbm8gPGouYm9nZ2lhbm9Ac2VsZC5iZT4KICovCmNsYXNzIENsYXNzTG9hZGVyCnsKICAgIC8vIFBTUi00CiAgICBwcml2YXRlICRwcmVmaXhMZW5ndGhzUHNyNCA9IGFycmF5KCk7CiAgICBwcml2YXRlICRwcmVmaXhEaXJzUHNyNCA9IGFycmF5KCk7CiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3I0ID0gYXJyYXkoKTsKCiAgICAvLyBQU1ItMAogICAgcHJpdmF0ZSAkcHJlZml4ZXNQc3IwID0gYXJyYXkoKTsKICAgIHByaXZhdGUgJGZhbGxiYWNrRGlyc1BzcjAgPSBhcnJheSgpOwoKICAgIHByaXZhdGUgJHVzZUluY2x1ZGVQYXRoID0gZmFsc2U7CiAgICBwcml2YXRlICRjbGFzc01hcCA9IGFycmF5KCk7CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzKCkKICAgIHsKICAgICAgICByZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHRoaXMtPnByZWZpeGVzUHNyMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzUHNyNCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5wcmVmaXhEaXJzUHNyNDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RmFsbGJhY2tEaXJzKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjA7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlyc1BzcjQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNDsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q2xhc3NNYXAoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Y2xhc3NNYXA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNsYXNzTWFwIENsYXNzIHRvIGZpbGVuYW1lIG1hcAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkQ2xhc3NNYXAoYXJyYXkgJGNsYXNzTWFwKQogICAgewogICAgICAgIGlmICgkdGhpcy0+Y2xhc3NNYXApIHsKICAgICAgICAgICAgJHRoaXMtPmNsYXNzTWFwID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmNsYXNzTWFwLCAkY2xhc3NNYXApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5jbGFzc01hcCA9ICRjbGFzc01hcDsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTAgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gcHJlZml4LCBlaXRoZXIKICAgICAqIGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHRvIHRoZSBvbmVzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRwcmVmaXggIFRoZSBwcmVmaXgKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJHBhdGhzICAgVGhlIFBTUi0wIHJvb3QgZGlyZWN0b3JpZXMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBkaXJlY3RvcmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkKCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCwKICAgICAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KCiAgICAgICAgJGZpcnN0ID0gJHByZWZpeFswXTsKICAgICAgICBpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSkpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CgogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzLAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0sCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocwogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItNCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UsIGVpdGhlcgogICAgICogYXBwZW5kaW5nIG9yIHByZXBlbmRpbmcgdG8gdGhlIG9uZXMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgbmFtZXNwYWNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTAgYmFzZSBkaXJlY3RvcmllcwogICAgICogQHBhcmFtIGJvb2wgICAgICAgICAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGRpcmVjdG9yaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBhZGRQc3I0KCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZGlyZWN0b3JpZXMgZm9yIHRoZSByb290IG5hbWVzcGFjZS4KICAgICAgICAgICAgaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzLAogICAgICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0CiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCwKICAgICAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocwogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICghaXNzZXQoJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdKSkgewogICAgICAgICAgICAvLyBSZWdpc3RlciBkaXJlY3RvcmllcyBmb3IgYSBuZXcgbmFtZXNwYWNlLgogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfSBlbHNlaWYgKCRwcmVwZW5kKSB7CiAgICAgICAgICAgIC8vIFByZXBlbmQgZGlyZWN0b3JpZXMgZm9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBuYW1lc3BhY2UuCiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMsCiAgICAgICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0KICAgICAgICAgICAgKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBBcHBlbmQgZGlyZWN0b3JpZXMgZm9yIGFuIGFscmVhZHkgcmVnaXN0ZXJlZCBuYW1lc3BhY2UuCiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdLAogICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTAgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gcHJlZml4LAogICAgICogcmVwbGFjaW5nIGFueSBvdGhlcnMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgcHJlZml4LgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHByZWZpeCBUaGUgcHJlZml4CiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwYXRocyAgVGhlIFBTUi0wIGJhc2UgZGlyZWN0b3JpZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldCgkcHJlZml4LCAkcGF0aHMpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskcHJlZml4WzBdXVskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyBhIHNldCBvZiBQU1ItNCBkaXJlY3RvcmllcyBmb3IgYSBnaXZlbiBuYW1lc3BhY2UsCiAgICAgKiByZXBsYWNpbmcgYW55IG90aGVycyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBuYW1lc3BhY2UuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4L25hbWVzcGFjZSwgd2l0aCB0cmFpbGluZyAnXFwnCiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwYXRocyAgIFRoZSBQU1ItNCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRQc3I0KCRwcmVmaXgsICRwYXRocykgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHByZWZpeCk7CiAgICAgICAgICAgIGlmICgnXFwnICE9PSAkcHJlZml4WyRsZW5ndGggLSAxXSkgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkEgbm9uLWVtcHR5IFBTUi00IHByZWZpeCBtdXN0IGVuZCB3aXRoIGEgbmFtZXNwYWNlIHNlcGFyYXRvci4iKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJHByZWZpeFswXV1bJHByZWZpeF0gPSAkbGVuZ3RoOwogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBUdXJucyBvbiBzZWFyY2hpbmcgdGhlIGluY2x1ZGUgcGF0aCBmb3IgY2xhc3MgZmlsZXMuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHVzZUluY2x1ZGVQYXRoCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXRVc2VJbmNsdWRlUGF0aCgkdXNlSW5jbHVkZVBhdGgpCiAgICB7CiAgICAgICAgJHRoaXMtPnVzZUluY2x1ZGVQYXRoID0gJHVzZUluY2x1ZGVQYXRoOwogICAgfQoKICAgIC8qKgogICAgICogQ2FuIGJlIHVzZWQgdG8gY2hlY2sgaWYgdGhlIGF1dG9sb2FkZXIgdXNlcyB0aGUgaW5jbHVkZSBwYXRoIHRvIGNoZWNrCiAgICAgKiBmb3IgY2xhc3Nlcy4KICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFVzZUluY2x1ZGVQYXRoKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPnVzZUluY2x1ZGVQYXRoOwogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIHRoaXMgaW5zdGFuY2UgYXMgYW4gYXV0b2xvYWRlci4KICAgICAqCiAgICAgKiBAcGFyYW0gYm9vbCAkcHJlcGVuZCBXaGV0aGVyIHRvIHByZXBlbmQgdGhlIGF1dG9sb2FkZXIgb3Igbm90CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiByZWdpc3RlcigkcHJlcGVuZCA9IGZhbHNlKQogICAgewogICAgICAgIHNwbF9hdXRvbG9hZF9yZWdpc3RlcihhcnJheSgkdGhpcywgJ2xvYWRDbGFzcycpLCB0cnVlLCAkcHJlcGVuZCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBVbnJlZ2lzdGVycyB0aGlzIGluc3RhbmNlIGFzIGFuIGF1dG9sb2FkZXIuCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB1bnJlZ2lzdGVyKCkKICAgIHsKICAgICAgICBzcGxfYXV0b2xvYWRfdW5yZWdpc3RlcihhcnJheSgkdGhpcywgJ2xvYWRDbGFzcycpKTsKICAgIH0KCiAgICAvKioKICAgICAqIExvYWRzIHRoZSBnaXZlbiBjbGFzcyBvciBpbnRlcmZhY2UuCiAgICAgKgogICAgICogQHBhcmFtICBzdHJpbmcgICAgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogICAgICogQHJldHVybiBib29sfG51bGwgVHJ1ZSBpZiBsb2FkZWQsIG51bGwgb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBsb2FkQ2xhc3MoJGNsYXNzKQogICAgewogICAgICAgIGlmICgkZmlsZSA9ICR0aGlzLT5maW5kRmlsZSgkY2xhc3MpKSB7CiAgICAgICAgICAgIGluY2x1ZGVGaWxlKCRmaWxlKTsKCiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEZpbmRzIHRoZSBwYXRoIHRvIHRoZSBmaWxlIHdoZXJlIHRoZSBjbGFzcyBpcyBkZWZpbmVkLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGNsYXNzIFRoZSBuYW1lIG9mIHRoZSBjbGFzcwogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nfGZhbHNlIFRoZSBwYXRoIGlmIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGZpbmRGaWxlKCRjbGFzcykKICAgIHsKICAgICAgICAvLyB3b3JrIGFyb3VuZCBmb3IgUEhQIDUuMy4wIC0gNS4zLjIgaHR0cHM6Ly9idWdzLnBocC5uZXQvNTA3MzEKICAgICAgICBpZiAoJ1xcJyA9PSAkY2xhc3NbMF0pIHsKICAgICAgICAgICAgJGNsYXNzID0gc3Vic3RyKCRjbGFzcywgMSk7CiAgICAgICAgfQoKICAgICAgICAvLyBjbGFzcyBtYXAgbG9va3VwCiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5jbGFzc01hcFskY2xhc3NdKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNsYXNzTWFwWyRjbGFzc107CiAgICAgICAgfQoKICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLnBocCcpOwoKICAgICAgICAvLyBTZWFyY2ggZm9yIEhhY2sgZmlsZXMgaWYgd2UgYXJlIHJ1bm5pbmcgb24gSEhWTQogICAgICAgIGlmICgkZmlsZSA9PT0gbnVsbCAmJiBkZWZpbmVkKCdISFZNX1ZFUlNJT04nKSkgewogICAgICAgICAgICAkZmlsZSA9ICR0aGlzLT5maW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAnLmhoJyk7CiAgICAgICAgfQoKICAgICAgICBpZiAoJGZpbGUgPT09IG51bGwpIHsKICAgICAgICAgICAgLy8gUmVtZW1iZXIgdGhhdCB0aGlzIGNsYXNzIGRvZXMgbm90IGV4aXN0LgogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmNsYXNzTWFwWyRjbGFzc10gPSBmYWxzZTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkZmlsZTsKICAgIH0KCiAgICBwcml2YXRlIGZ1bmN0aW9uIGZpbmRGaWxlV2l0aEV4dGVuc2lvbigkY2xhc3MsICRleHQpCiAgICB7CiAgICAgICAgLy8gUFNSLTQgbG9va3VwCiAgICAgICAgJGxvZ2ljYWxQYXRoUHNyNCA9IHN0cnRyKCRjbGFzcywgJ1xcJywgRElSRUNUT1JZX1NFUEFSQVRPUikgLiAkZXh0OwoKICAgICAgICAkZmlyc3QgPSAkY2xhc3NbMF07CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskZmlyc3RdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJGZpcnN0XSBhcyAkcHJlZml4ID0+ICRsZW5ndGgpIHsKICAgICAgICAgICAgICAgIGlmICgwID09PSBzdHJwb3MoJGNsYXNzLCAkcHJlZml4KSkgewogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc3Vic3RyKCRsb2dpY2FsUGF0aFBzcjQsICRsZW5ndGgpKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItNCBmYWxsYmFjayBkaXJzCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgYXMgJGRpcikgewogICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjQpKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGxvb2t1cAogICAgICAgIGlmIChmYWxzZSAhPT0gJHBvcyA9IHN0cnJwb3MoJGNsYXNzLCAnXFwnKSkgewogICAgICAgICAgICAvLyBuYW1lc3BhY2VkIGNsYXNzIG5hbWUKICAgICAgICAgICAgJGxvZ2ljYWxQYXRoUHNyMCA9IHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAwLCAkcG9zICsgMSkKICAgICAgICAgICAgICAgIC4gc3RydHIoc3Vic3RyKCRsb2dpY2FsUGF0aFBzcjQsICRwb3MgKyAxKSwgJ18nLCBESVJFQ1RPUllfU0VQQVJBVE9SKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAvLyBQRUFSLWxpa2UgY2xhc3MgbmFtZQogICAgICAgICAgICAkbG9naWNhbFBhdGhQc3IwID0gc3RydHIoJGNsYXNzLCAnXycsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gJGV4dDsKICAgICAgICB9CgogICAgICAgIGlmIChpc3NldCgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0pKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XSBhcyAkcHJlZml4ID0+ICRkaXJzKSB7CiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRjbGFzcywgJHByZWZpeCkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgZmFsbGJhY2sgZGlycwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mYWxsYmFja0RpcnNQc3IwIGFzICRkaXIpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3IwKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBpbmNsdWRlIHBhdGhzLgogICAgICAgIGlmICgkdGhpcy0+dXNlSW5jbHVkZVBhdGggJiYgJGZpbGUgPSBzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgIH0KICAgIH0KfQoKLyoqCiAqIFNjb3BlIGlzb2xhdGVkIGluY2x1ZGUuCiAqCiAqIFByZXZlbnRzIGFjY2VzcyB0byAkdGhpcy9zZWxmIGZyb20gaW5jbHVkZWQgZmlsZXMuCiAqLwpmdW5jdGlvbiBpbmNsdWRlRmlsZSgkZmlsZSkKewogICAgaW5jbHVkZSAkZmlsZTsKfQpbCiAgICAiQUZMLTEuMSIsICJBRkwtMS4yIiwgIkFGTC0yLjAiLCAiQUZMLTIuMSIsICJBRkwtMy4wIiwgIkFQTC0xLjAiLCAiQWxhZGRpbiIsCiAgICAiQU5UTFItUEQiLCAiQXBhY2hlLTEuMCIsICJBcGFjaGUtMS4xIiwgIkFwYWNoZS0yLjAiLCAiQVBTTC0xLjAiLAogICAgIkFQU0wtMS4xIiwgIkFQU0wtMS4yIiwgIkFQU0wtMi4wIiwgIkFydGlzdGljLTEuMCIsICJBcnRpc3RpYy0yLjAiLCAiQUFMIiwKICAgICJCaXRUb3JyZW50LTEuMCIsICJCaXRUb3JyZW50LTEuMSIsICJCU0wtMS4wIiwgIkJTRC0zLUNsYXVzZS1DbGVhciIsCiAgICAiQlNELTItQ2xhdXNlIiwgIkJTRC0yLUNsYXVzZS1GcmVlQlNEIiwgIkJTRC0yLUNsYXVzZS1OZXRCU0QiLAogICAgIkJTRC0zLUNsYXVzZSIsICJCU0QtNC1DbGF1c2UiLCAiQlNELTQtQ2xhdXNlLVVDIiwgIkNFQ0lMTC0xLjAiLAogICAgIkNFQ0lMTC0xLjEiLCAiQ0VDSUxMLTIuMCIsICJDRUNJTEwtQiIsICJDRUNJTEwtQyIsICJDbEFydGlzdGljIiwKICAgICJDTlJJLVB5dGhvbiIsICJDTlJJLVB5dGhvbi1HUEwtQ29tcGF0aWJsZSIsICJDRERMLTEuMCIsICJDRERMLTEuMSIsCiAgICAiQ1BBTC0xLjAiLCAiQ1BMLTEuMCIsICJDQVRPU0wtMS4xIiwgIkNvbmRvci0xLjEiLCAiQ0MtQlktMS4wIiwgIkNDLUJZLTIuMCIsCiAgICAiQ0MtQlktMi41IiwgIkNDLUJZLTMuMCIsICJDQy1CWS1ORC0xLjAiLCAiQ0MtQlktTkQtMi4wIiwgIkNDLUJZLU5ELTIuNSIsCiAgICAiQ0MtQlktTkQtMy4wIiwgIkNDLUJZLU5DLTEuMCIsICJDQy1CWS1OQy0yLjAiLCAiQ0MtQlktTkMtMi41IiwKICAgICJDQy1CWS1OQy0zLjAiLCAiQ0MtQlktTkMtTkQtMS4wIiwgIkNDLUJZLU5DLU5ELTIuMCIsICJDQy1CWS1OQy1ORC0yLjUiLAogICAgIkNDLUJZLU5DLU5ELTMuMCIsICJDQy1CWS1OQy1TQS0xLjAiLCAiQ0MtQlktTkMtU0EtMi4wIiwgIkNDLUJZLU5DLVNBLTIuNSIsCiAgICAiQ0MtQlktTkMtU0EtMy4wIiwgIkNDLUJZLVNBLTEuMCIsICJDQy1CWS1TQS0yLjAiLCAiQ0MtQlktU0EtMi41IiwKICAgICJDQy1CWS1TQS0zLjAiLCAiQ0MwLTEuMCIsICJDVUEtT1BMLTEuMCIsICJXVEZQTCIsICJFUEwtMS4wIiwgImVDb3MtMi4wIiwKICAgICJFQ0wtMS4wIiwgIkVDTC0yLjAiLCAiRUZMLTEuMCIsICJFRkwtMi4wIiwgIkVudGVzc2EiLCAiRXJsUEwtMS4xIiwKICAgICJFVURhdGFncmlkIiwgIkVVUEwtMS4wIiwgIkVVUEwtMS4xIiwgIkZhaXIiLCAiRnJhbWV3b3J4LTEuMCIsICJGVEwiLAogICAgIkFHUEwtMy4wIiwgIkdGREwtMS4xIiwgIkdGREwtMS4yIiwgIkdGREwtMS4zIiwgIkdQTC0xLjAiLCAiR1BMLTEuMCsiLAogICAgIkdQTC0yLjAiLCAiR1BMLTIuMCsiLCAiR1BMLTIuMC13aXRoLWF1dG9jb25mLWV4Y2VwdGlvbiIsCiAgICAiR1BMLTIuMC13aXRoLWJpc29uLWV4Y2VwdGlvbiIsICJHUEwtMi4wLXdpdGgtY2xhc3NwYXRoLWV4Y2VwdGlvbiIsCiAgICAiR1BMLTIuMC13aXRoLWZvbnQtZXhjZXB0aW9uIiwgIkdQTC0yLjAtd2l0aC1HQ0MtZXhjZXB0aW9uIiwgIkdQTC0zLjAiLAogICAgIkdQTC0zLjArIiwgIkdQTC0zLjAtd2l0aC1hdXRvY29uZi1leGNlcHRpb24iLCAiR1BMLTMuMC13aXRoLUdDQy1leGNlcHRpb24iLAogICAgIkxHUEwtMi4xIiwgIkxHUEwtMi4xKyIsICJMR1BMLTMuMCIsICJMR1BMLTMuMCsiLCAiTEdQTC0yLjAiLCAiTEdQTC0yLjArIiwKICAgICJnU09BUC0xLjNiIiwgIkhQTkQiLCAiSVBMLTEuMCIsICJJbWxpYjIiLCAiSUpHIiwgIkludGVsIiwgIklQQSIsICJJU0MiLAogICAgIkpTT04iLCAiTFBQTC0xLjNhIiwgIkxQUEwtMS4wIiwgIkxQUEwtMS4xIiwgIkxQUEwtMS4yIiwgIkxQUEwtMS4zYyIsCiAgICAiTGlicG5nIiwgIkxQTC0xLjAyIiwgIkxQTC0xLjAiLCAiTVMtUEwiLCAiTVMtUkwiLCAiTWlyT1MiLCAiTUlUIiwKICAgICJNb3Rvc290byIsICJNUEwtMS4wIiwgIk1QTC0xLjEiLCAiTVBMLTIuMCIsCiAgICAiTVBMLTIuMC1uby1jb3B5bGVmdC1leGNlcHRpb24iLCAiTXVsdGljcyIsICJOQVNBLTEuMyIsICJOYXVtZW4iLAogICAgIk5CUEwtMS4wIiwgIk5HUEwiLCAiTk9TTCIsICJOUEwtMS4wIiwgIk5QTC0xLjEiLCAiTm9raWEiLCAiTlBPU0wtMy4wIiwKICAgICJOVFAiLCAiT0NMQy0yLjAiLCAiT0RiTC0xLjAiLCAiUERETC0xLjAiLCAiT0dUU0wiLCAiT0xEQVAtMi4yLjIiLAogICAgIk9MREFQLTEuMSIsICJPTERBUC0xLjIiLCAiT0xEQVAtMS4zIiwgIk9MREFQLTEuNCIsICJPTERBUC0yLjAiLAogICAgIk9MREFQLTIuMC4xIiwgIk9MREFQLTIuMSIsICJPTERBUC0yLjIiLCAiT0xEQVAtMi4yLjEiLCAiT0xEQVAtMi4zIiwKICAgICJPTERBUC0yLjQiLCAiT0xEQVAtMi41IiwgIk9MREFQLTIuNiIsICJPTERBUC0yLjciLCAiT1BMLTEuMCIsICJPU0wtMS4wIiwKICAgICJPU0wtMi4wIiwgIk9TTC0yLjEiLCAiT1NMLTMuMCIsICJPTERBUC0yLjgiLCAiT3BlblNTTCIsICJQSFAtMy4wIiwKICAgICJQSFAtMy4wMSIsICJQb3N0Z3JlU1FMIiwgIlB5dGhvbi0yLjAiLCAiUVBMLTEuMCIsICJSUFNMLTEuMCIsICJSUEwtMS41IiwKICAgICJSSGVDb3MtMS4xIiwgIlJTQ1BMIiwgIlJ1YnkiLCAiU0FYLVBEIiwgIlNHSS1CLTEuMCIsICJTR0ktQi0xLjEiLAogICAgIlNHSS1CLTIuMCIsICJPRkwtMS4wIiwgIk9GTC0xLjEiLCAiU2ltUEwtMi4wIiwgIlNsZWVweWNhdCIsICJTTUxOSiIsCiAgICAiU3VnYXJDUk0tMS4xLjMiLCAiU0lTU0wiLCAiU1BMLTEuMCIsICJXYXRjb20tMS4wIiwgIk5DU0EiLCAiVlNMLTEuMCIsCiAgICAiVzNDIiwgIldYd2luZG93cyIsICJYbmV0IiwgIlgxMSIsICJYRnJlZTg2LTEuMSIsICJZUEwtMS4wIiwgIllQTC0xLjEiLAogICAgIlppbWJyYS0xLjMiLCAiWmxpYiIsICJaUEwtMS4xIiwgIlpQTC0yLjAiLCAiWlBMLTIuMSIKXXsKICAgICJuYW1lIjogIlBhY2thZ2UiLAogICAgInR5cGUiOiAib2JqZWN0IiwKICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IGZhbHNlLAogICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWNrYWdlIG5hbWUsIGluY2x1ZGluZyAndmVuZG9yLW5hbWUvJyBwcmVmaXguIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgInR5cGUiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJQYWNrYWdlIHR5cGUsIGVpdGhlciAnbGlicmFyeScgZm9yIGNvbW1vbiBwYWNrYWdlcywgJ2NvbXBvc2VyLXBsdWdpbicgZm9yIHBsdWdpbnMsICdtZXRhcGFja2FnZScgZm9yIGVtcHR5IHBhY2thZ2VzLCBvciBhIGN1c3RvbSB0eXBlIChbYS16MC05LV0rKSBkZWZpbmVkIGJ5IHdoYXRldmVyIHByb2plY3QgdGhpcyBwYWNrYWdlIGFwcGxpZXMgdG8uIiwKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgIH0sCiAgICAgICAgInRhcmdldC1kaXIiOiB7CiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJERVBSRUNBVEVEOiBGb3JjZXMgdGhlIHBhY2thZ2UgdG8gYmUgaW5zdGFsbGVkIGludG8gdGhlIGdpdmVuIHN1YmRpcmVjdG9yeSBwYXRoLiBUaGlzIGlzIHVzZWQgZm9yIGF1dG9sb2FkaW5nIFBTUi0wIHBhY2thZ2VzIHRoYXQgZG8gbm90IGNvbnRhaW4gdGhlaXIgZnVsbCBwYXRoLiBVc2UgZm9yd2FyZCBzbGFzaGVzIGZvciBjcm9zcy1wbGF0Zm9ybSBjb21wYXRpYmlsaXR5LiIsCiAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIKICAgICAgICB9LAogICAgICAgICJkZXNjcmlwdGlvbiI6IHsKICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlNob3J0IHBhY2thZ2UgZGVzY3JpcHRpb24uIiwKICAgICAgICAgICAgInJlcXVpcmVkIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImtleXdvcmRzIjogewogICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSB0YWcva2V5d29yZCB0aGF0IHRoaXMgcGFja2FnZSByZWxhdGVzIHRvLiIKICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImhvbWVwYWdlIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSG9tZXBhZ2UgVVJMIGZvciB0aGUgcHJvamVjdC4iLAogICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAgICAgICB9LAogICAgICAgICJ2ZXJzaW9uIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGFja2FnZSB2ZXJzaW9uLCBzZWUgaHR0cDovL2dldGNvbXBvc2VyLm9yZy9kb2MvMDQtc2NoZW1hLm1kI3ZlcnNpb24gZm9yIG1vcmUgaW5mbyBvbiB2YWxpZCBzY2hlbWVzLiIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogewogICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGFja2FnZSByZWxlYXNlIGRhdGUsIGluICdZWVlZLU1NLUREJyBvciAnWVlZWS1NTS1ERCBISDpNTTpTUycgZm9ybWF0LiIKICAgICAgICB9LAogICAgICAgICJsaWNlbnNlIjogewogICAgICAgICAgICAidHlwZSI6IFsic3RyaW5nIiwgImFycmF5Il0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJMaWNlbnNlIG5hbWUuIE9yIGFuIGFycmF5IG9mIGxpY2Vuc2UgbmFtZXMuIgogICAgICAgIH0sCiAgICAgICAgImF1dGhvcnMiOiB7CiAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkxpc3Qgb2YgYXV0aG9ycyB0aGF0IGNvbnRyaWJ1dGVkIHRvIHRoZSBwYWNrYWdlLiBUaGlzIGlzIHR5cGljYWxseSB0aGUgbWFpbiBtYWludGFpbmVycywgbm90IHRoZSBmdWxsIGxpc3QuIiwKICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IGZhbHNlLAogICAgICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgICAgICAgICAgICAgIm5hbWUiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJGdWxsIG5hbWUgb2YgdGhlIGF1dGhvci4iLAogICAgICAgICAgICAgICAgICAgICAgICAicmVxdWlyZWQiOiB0cnVlCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICAiZW1haWwiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJFbWFpbCBhZGRyZXNzIG9mIHRoZSBhdXRob3IuIiwKICAgICAgICAgICAgICAgICAgICAgICAgImZvcm1hdCI6ICJlbWFpbCIKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICJob21lcGFnZSI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkhvbWVwYWdlIFVSTCBmb3IgdGhlIGF1dGhvci4iLAogICAgICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAgICAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgICAgICJyb2xlIjogewogICAgICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQXV0aG9yJ3Mgcm9sZSBpbiB0aGUgcHJvamVjdC4iCiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIHBhY2thZ2UgbmFtZSAoa2V5cykgYW5kIHZlcnNpb24gY29uc3RyYWludHMgKHZhbHVlcykgdGhhdCBhcmUgcmVxdWlyZWQgdG8gcnVuIHRoaXMgcGFja2FnZS4iLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicmVwbGFjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIHBhY2thZ2UgbmFtZSAoa2V5cykgYW5kIHZlcnNpb24gY29uc3RyYWludHMgKHZhbHVlcykgdGhhdCBjYW4gYmUgcmVwbGFjZWQgYnkgdGhpcyBwYWNrYWdlLiIsCiAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IHRydWUKICAgICAgICB9LAogICAgICAgICJjb25mbGljdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIHBhY2thZ2UgbmFtZSAoa2V5cykgYW5kIHZlcnNpb24gY29uc3RyYWludHMgKHZhbHVlcykgdGhhdCBjb25mbGljdCB3aXRoIHRoaXMgcGFja2FnZS4iLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicHJvdmlkZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIHBhY2thZ2UgbmFtZSAoa2V5cykgYW5kIHZlcnNpb24gY29uc3RyYWludHMgKHZhbHVlcykgdGhhdCB0aGlzIHBhY2thZ2UgcHJvdmlkZXMgaW4gYWRkaXRpb24gdG8gdGhpcyBwYWNrYWdlJ3MgbmFtZS4iLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIGlzIGEgaGFzaCBvZiBwYWNrYWdlIG5hbWUgKGtleXMpIGFuZCB2ZXJzaW9uIGNvbnN0cmFpbnRzICh2YWx1ZXMpIHRoYXQgdGhpcyBwYWNrYWdlIHJlcXVpcmVzIGZvciBkZXZlbG9waW5nIGl0ICh0ZXN0aW5nIHRvb2xzIGFuZCBzdWNoKS4iLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAic3VnZ2VzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIHBhY2thZ2UgbmFtZSAoa2V5cykgYW5kIGRlc2NyaXB0aW9ucyAodmFsdWVzKSB0aGF0IHRoaXMgcGFja2FnZSBzdWdnZXN0cyB3b3JrIHdlbGwgd2l0aCBpdCAodGhpcyB3aWxsIGJlIHN1Z2dlc3RlZCB0byB0aGUgdXNlciBkdXJpbmcgaW5zdGFsbGF0aW9uKS4iLAogICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgfSwKICAgICAgICAiY29uZmlnIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tcG9zZXIgb3B0aW9ucy4iLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAgICJwcm9jZXNzLXRpbWVvdXQiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSB0aW1lb3V0IGluIHNlY29uZHMgZm9yIHByb2Nlc3MgZXhlY3V0aW9ucywgZGVmYXVsdHMgdG8gMzAwICg1bWlucykuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJ1c2UtaW5jbHVkZS1wYXRoIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImJvb2xlYW4iLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiB0cnVlLCB0aGUgQ29tcG9zZXIgYXV0b2xvYWRlciB3aWxsIGFsc28gbG9vayBmb3IgY2xhc3NlcyBpbiB0aGUgUEhQIGluY2x1ZGUgcGF0aC4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInByZWZlcnJlZC1pbnN0YWxsIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBpbnN0YWxsIG1ldGhvZCBDb21wb3NlciB3aWxsIHByZWZlciB0byB1c2UsIGRlZmF1bHRzIHRvIGF1dG8gYW5kIGNhbiBiZSBhbnkgb2Ygc291cmNlLCBkaXN0IG9yIGF1dG8uIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJub3RpZnktb24taW5zdGFsbCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQ29tcG9zZXIgYWxsb3dzIHJlcG9zaXRvcmllcyB0byBkZWZpbmUgYSBub3RpZmljYXRpb24gVVJMLCBzbyB0aGF0IHRoZXkgZ2V0IG5vdGlmaWVkIHdoZW5ldmVyIGEgcGFja2FnZSBmcm9tIHRoYXQgcmVwb3NpdG9yeSBpcyBpbnN0YWxsZWQuIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gZGlzYWJsZSB0aGF0IGJlaGF2aW91ciwgZGVmYXVsdHMgdG8gdHJ1ZS4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImdpdGh1Yi1wcm90b2NvbHMiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGxpc3Qgb2YgcHJvdG9jb2xzIHRvIHVzZSBmb3IgZ2l0aHViLmNvbSBjbG9uZXMsIGluIHByaW9yaXR5IG9yZGVyLCBkZWZhdWx0cyB0byBbXCJnaXRcIiwgXCJodHRwc1wiLCBcImh0dHBcIl0uIiwKICAgICAgICAgICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImdpdGh1Yi1vYXV0aCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGhhc2ggb2YgZG9tYWluIG5hbWUgPT4gZ2l0aHViIEFQSSBvYXV0aCB0b2tlbnMsIHR5cGljYWxseSB7XCJnaXRodWIuY29tXCI6XCI8dG9rZW4+XCJ9LiIsCiAgICAgICAgICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJ2ZW5kb3ItZGlyIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBsb2NhdGlvbiB3aGVyZSBhbGwgcGFja2FnZXMgYXJlIGluc3RhbGxlZCwgZGVmYXVsdHMgdG8gXCJ2ZW5kb3JcIi4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImJpbi1kaXIiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGxvY2F0aW9uIHdoZXJlIGFsbCBiaW5hcmllcyBhcmUgbGlua2VkLCBkZWZhdWx0cyB0byBcInZlbmRvci9iaW5cIi4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNhY2hlLWRpciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgbG9jYXRpb24gd2hlcmUgYWxsIGNhY2hlcyBhcmUgbG9jYXRlZCwgZGVmYXVsdHMgdG8gXCJ+Ly5jb21wb3Nlci9jYWNoZVwiIG9uICpuaXggYW5kIFwiJUxPQ0FMQVBQREFUQSVcXENvbXBvc2VyXCIgb24gd2luZG93cy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNhY2hlLWZpbGVzLWRpciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgbG9jYXRpb24gd2hlcmUgZmlsZXMgKHppcCBkb3dubG9hZHMpIGFyZSBjYWNoZWQsIGRlZmF1bHRzIHRvIFwieyRjYWNoZS1kaXJ9L2ZpbGVzXCIuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjYWNoZS1yZXBvLWRpciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgbG9jYXRpb24gd2hlcmUgcmVwbyAoZ2l0L2hnIHJlcG8gY2xvbmVzKSBhcmUgY2FjaGVkLCBkZWZhdWx0cyB0byBcInskY2FjaGUtZGlyfS9yZXBvXCIuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjYWNoZS12Y3MtZGlyIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBsb2NhdGlvbiB3aGVyZSB2Y3MgaW5mb3MgKGdpdCBjbG9uZXMsIGdpdGh1YiBhcGkgY2FsbHMsIGV0Yy4gd2hlbiByZWFkaW5nIHZjcyByZXBvcykgYXJlIGNhY2hlZCwgZGVmYXVsdHMgdG8gXCJ7JGNhY2hlLWRpcn0vdmNzXCIuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjYWNoZS10dGwiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiaW50ZWdlciIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoZSBkZWZhdWx0IGNhY2hlIHRpbWUtdG8tbGl2ZSwgZGVmYXVsdHMgdG8gMTU1NTIwMDAgKDYgbW9udGhzKS4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNhY2hlLWZpbGVzLXR0bCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJpbnRlZ2VyIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGNhY2hlIHRpbWUtdG8tbGl2ZSBmb3IgZmlsZXMsIGRlZmF1bHRzIHRvIHRoZSB2YWx1ZSBvZiBjYWNoZS10dGwuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjYWNoZS1maWxlcy1tYXhzaXplIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogWyJzdHJpbmciLCAiaW50ZWdlciJdLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgY2FjaGUgbWF4IHNpemUgZm9yIHRoZSBmaWxlcyBjYWNoZSwgZGVmYXVsdHMgdG8gXCIzMDBNaUJcIi4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImRpc2NhcmQtY2hhbmdlcyI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsic3RyaW5nIiwgImJvb2xlYW4iXSwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhlIGRlZmF1bHQgc3R5bGUgb2YgaGFuZGxpbmcgZGlydHkgdXBkYXRlcywgZGVmYXVsdHMgdG8gZmFsc2UgYW5kIGNhbiBiZSBhbnkgb2YgdHJ1ZSwgZmFsc2Ugb3IgXCJzdGFzaFwiLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiYXV0b2xvYWRlci1zdWZmaXgiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3B0aW9uYWwgc3RyaW5nIHRvIGJlIHVzZWQgYXMgYSBzdWZmaXggZm9yIHRoZSBnZW5lcmF0ZWQgQ29tcG9zZXIgYXV0b2xvYWRlci4gV2hlbiBudWxsIGEgcmFuZG9tIG9uZSB3aWxsIGJlIGdlbmVyYXRlZC4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgIm9wdGltaXplLWF1dG9sb2FkZXIiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYm9vbGVhbiIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkFsd2F5cyBvcHRpbWl6ZSB3aGVuIGR1bXBpbmcgdGhlIGF1dG9sb2FkZXIiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInByZXBlbmQtYXV0b2xvYWRlciI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJib29sZWFuIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSWYgZmFsc2UsIHRoZSBjb21wb3NlciBhdXRvbG9hZGVyIHdpbGwgbm90IGJlIHByZXBlbmRlZCB0byBleGlzdGluZyBhdXRvbG9hZGVycywgZGVmYXVsdHMgdG8gdHJ1ZS4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImdpdGh1Yi1kb21haW5zIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiQSBsaXN0IG9mIGRvbWFpbnMgdG8gdXNlIGluIGdpdGh1YiBtb2RlLiBUaGlzIGlzIHVzZWQgZm9yIEdpdEh1YiBFbnRlcnByaXNlIHNldHVwcywgZGVmYXVsdHMgdG8gW1wiZ2l0aHViLmNvbVwiXS4iLAogICAgICAgICAgICAgICAgICAgICJpdGVtcyI6IHsKICAgICAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgImV4dHJhIjogewogICAgICAgICAgICAidHlwZSI6IFsib2JqZWN0IiwgImFycmF5Il0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBcmJpdHJhcnkgZXh0cmEgZGF0YSB0aGF0IGNhbiBiZSB1c2VkIGJ5IHBsdWdpbnMsIGZvciBleGFtcGxlLCBwYWNrYWdlIG9mIHR5cGUgY29tcG9zZXItcGx1Z2luIG1heSBoYXZlIGEgJ2NsYXNzJyBrZXkgZGVmaW5pbmcgYW4gaW5zdGFsbGVyIGNsYXNzIG5hbWUuIiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRGVzY3JpcHRpb24gb2YgaG93IHRoZSBwYWNrYWdlIGNhbiBiZSBhdXRvbG9hZGVkLiIsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAgInBzci0wIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIG5hbWVzcGFjZXMgKGtleXMpIGFuZCB0aGUgZGlyZWN0b3JpZXMgdGhleSBjYW4gYmUgZm91bmQgaW50byAodmFsdWVzLCBjYW4gYmUgYXJyYXlzIG9mIHBhdGhzKSBieSB0aGUgYXV0b2xvYWRlci4iLAogICAgICAgICAgICAgICAgICAgICJhZGRpdGlvbmFsUHJvcGVydGllcyI6IHRydWUKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicHNyLTQiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyBhIGhhc2ggb2YgbmFtZXNwYWNlcyAoa2V5cykgYW5kIHRoZSBQU1ItNCBkaXJlY3RvcmllcyB0aGV5IGNhbiBtYXAgdG8gKHZhbHVlcywgY2FuIGJlIGFycmF5cyBvZiBwYXRocykgYnkgdGhlIGF1dG9sb2FkZXIuIiwKICAgICAgICAgICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImNsYXNzbWFwIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyBhbiBhcnJheSBvZiBkaXJlY3RvcmllcyB0aGF0IGNvbnRhaW4gY2xhc3NlcyB0byBiZSBpbmNsdWRlZCBpbiB0aGUgY2xhc3MtbWFwIGdlbmVyYXRpb24gcHJvY2Vzcy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImZpbGVzIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogImFycmF5IiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVGhpcyBpcyBhbiBhcnJheSBvZiBmaWxlcyB0aGF0IGFyZSBhbHdheXMgcmVxdWlyZWQgb24gZXZlcnkgcmVxdWVzdC4iCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJhdXRvbG9hZC1kZXYiOiB7CiAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJEZXNjcmlwdGlvbiBvZiBhZGRpdGlvbmFsIGF1dG9sb2FkIHJ1bGVzIGZvciBkZXZlbG9wbWVudCBwdXJwb3NlIChlZy4gYSB0ZXN0IHN1aXRlKS4iLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAgICJwc3ItMCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJvYmplY3QiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGlzIGlzIGEgaGFzaCBvZiBuYW1lc3BhY2VzIChrZXlzKSBhbmQgdGhlIGRpcmVjdG9yaWVzIHRoZXkgY2FuIGJlIGZvdW5kIGludG8gKHZhbHVlcywgY2FuIGJlIGFycmF5cyBvZiBwYXRocykgYnkgdGhlIGF1dG9sb2FkZXIuIiwKICAgICAgICAgICAgICAgICAgICAiYWRkaXRpb25hbFByb3BlcnRpZXMiOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInBzci00IjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogIm9iamVjdCIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYSBoYXNoIG9mIG5hbWVzcGFjZXMgKGtleXMpIGFuZCB0aGUgUFNSLTQgZGlyZWN0b3JpZXMgdGhleSBjYW4gbWFwIHRvICh2YWx1ZXMsIGNhbiBiZSBhcnJheXMgb2YgcGF0aHMpIGJ5IHRoZSBhdXRvbG9hZGVyLiIsCiAgICAgICAgICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJjbGFzc21hcCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYW4gYXJyYXkgb2YgZGlyZWN0b3JpZXMgdGhhdCBjb250YWluIGNsYXNzZXMgdG8gYmUgaW5jbHVkZWQgaW4gdGhlIGNsYXNzLW1hcCBnZW5lcmF0aW9uIHByb2Nlc3MuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJmaWxlcyI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJhcnJheSIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlRoaXMgaXMgYW4gYXJyYXkgb2YgZmlsZXMgdGhhdCBhcmUgYWx3YXlzIHJlcXVpcmVkIG9uIGV2ZXJ5IHJlcXVlc3QuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAiYXJjaGl2ZSI6IHsKICAgICAgICAgICAgInR5cGUiOiBbIm9iamVjdCJdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT3B0aW9ucyBmb3IgY3JlYXRpbmcgcGFja2FnZSBhcmNoaXZlcyBmb3IgZGlzdHJpYnV0aW9uLiIsCiAgICAgICAgICAgICJwcm9wZXJ0aWVzIjogewogICAgICAgICAgICAgICAgImV4Y2x1ZGUiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAiYXJyYXkiLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIGxpc3Qgb2YgcGF0dGVybnMgZm9yIHBhdGhzIHRvIGV4Y2x1ZGUgb3IgaW5jbHVkZSBpZiBwcmVmaXhlZCB3aXRoIGFuIGV4Y2xhbWF0aW9uIG1hcmsuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAicmVwb3NpdG9yaWVzIjogewogICAgICAgICAgICAidHlwZSI6IFsib2JqZWN0IiwgImFycmF5Il0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJBIHNldCBvZiBhZGRpdGlvbmFsIHJlcG9zaXRvcmllcyB3aGVyZSBwYWNrYWdlcyBjYW4gYmUgZm91bmQuIiwKICAgICAgICAgICAgImFkZGl0aW9uYWxQcm9wZXJ0aWVzIjogdHJ1ZQogICAgICAgIH0sCiAgICAgICAgIm1pbmltdW0tc3RhYmlsaXR5IjogewogICAgICAgICAgICAidHlwZSI6IFsic3RyaW5nIl0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJUaGUgbWluaW11bSBzdGFiaWxpdHkgdGhlIHBhY2thZ2VzIG11c3QgaGF2ZSB0byBiZSBpbnN0YWxsLWFibGUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6IGRldiwgYWxwaGEsIGJldGEsIFJDLCBzdGFibGUuIgogICAgICAgIH0sCiAgICAgICAgInByZWZlci1zdGFibGUiOiB7CiAgICAgICAgICAgICJ0eXBlIjogWyJib29sZWFuIl0sCiAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJJZiBzZXQgdG8gdHJ1ZSwgc3RhYmxlIHBhY2thZ2VzIHdpbGwgYmUgcHJlZmVyZWQgdG8gZGV2IHBhY2thZ2VzIHdoZW4gcG9zc2libGUsIGV2ZW4gaWYgdGhlIG1pbmltdW0tc3RhYmlsaXR5IGFsbG93cyB1bnN0YWJsZSBwYWNrYWdlcy4iCiAgICAgICAgfSwKICAgICAgICAiYmluIjogewogICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiXSwKICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIkEgc2V0IG9mIGZpbGVzIHRoYXQgc2hvdWxkIGJlIHRyZWF0ZWQgYXMgYmluYXJpZXMgYW5kIHN5bWxpbmtlZCBpbnRvIGJpbi1kaXIgKGZyb20gY29uZmlnKS4iLAogICAgICAgICAgICAiaXRlbXMiOiB7CiAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJpbmNsdWRlLXBhdGgiOiB7CiAgICAgICAgICAgICJ0eXBlIjogWyJhcnJheSJdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiREVQUkVDQVRFRDogQSBsaXN0IG9mIGRpcmVjdG9yaWVzIHdoaWNoIHNob3VsZCBnZXQgYWRkZWQgdG8gUEhQJ3MgaW5jbHVkZSBwYXRoLiBUaGlzIGlzIG9ubHkgcHJlc2VudCB0byBzdXBwb3J0IGxlZ2FjeSBwcm9qZWN0cywgYW5kIGFsbCBuZXcgY29kZSBzaG91bGQgcHJlZmVyYWJseSB1c2UgYXV0b2xvYWRpbmcuIiwKICAgICAgICAgICAgIml0ZW1zIjogewogICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIgogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAic2NyaXB0cyI6IHsKICAgICAgICAgICAgInR5cGUiOiBbIm9iamVjdCJdLAogICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiU2NyaXB0cyBsaXN0ZW5lcnMgdGhhdCB3aWxsIGJlIGV4ZWN1dGVkIGJlZm9yZS9hZnRlciBzb21lIGV2ZW50cy4iLAogICAgICAgICAgICAicHJvcGVydGllcyI6IHsKICAgICAgICAgICAgICAgICJwcmUtaW5zdGFsbC1jbWQiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiBbImFycmF5IiwgInN0cmluZyJdLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPY2N1cnMgYmVmb3JlIHRoZSBpbnN0YWxsIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGNvbnRhaW5zIG9uZSBvciBtb3JlIENsYXNzOjptZXRob2QgY2FsbGFibGVzIG9yIHNoZWxsIGNvbW1hbmRzLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicG9zdC1pbnN0YWxsLWNtZCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciB0aGUgaW5zdGFsbCBjb21tYW5kIGlzIGV4ZWN1dGVkLCBjb250YWlucyBvbmUgb3IgbW9yZSBDbGFzczo6bWV0aG9kIGNhbGxhYmxlcyBvciBzaGVsbCBjb21tYW5kcy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInByZS11cGRhdGUtY21kIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogWyJhcnJheSIsICJzdHJpbmciXSwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2NjdXJzIGJlZm9yZSB0aGUgdXBkYXRlIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGNvbnRhaW5zIG9uZSBvciBtb3JlIENsYXNzOjptZXRob2QgY2FsbGFibGVzIG9yIHNoZWxsIGNvbW1hbmRzLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicG9zdC11cGRhdGUtY21kIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogWyJhcnJheSIsICJzdHJpbmciXSwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2NjdXJzIGFmdGVyIHRoZSB1cGRhdGUgY29tbWFuZCBpcyBleGVjdXRlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwcmUtc3RhdHVzLWNtZCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBiZWZvcmUgdGhlIHN0YXR1cyBjb21tYW5kIGlzIGV4ZWN1dGVkLCBjb250YWlucyBvbmUgb3IgbW9yZSBDbGFzczo6bWV0aG9kIGNhbGxhYmxlcyBvciBzaGVsbCBjb21tYW5kcy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInBvc3Qtc3RhdHVzLWNtZCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciB0aGUgc3RhdHVzIGNvbW1hbmQgaXMgZXhlY3V0ZWQsIGNvbnRhaW5zIG9uZSBvciBtb3JlIENsYXNzOjptZXRob2QgY2FsbGFibGVzIG9yIHNoZWxsIGNvbW1hbmRzLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicHJlLXBhY2thZ2UtaW5zdGFsbCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBiZWZvcmUgYSBwYWNrYWdlIGlzIGluc3RhbGxlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwb3N0LXBhY2thZ2UtaW5zdGFsbCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciBhIHBhY2thZ2UgaXMgaW5zdGFsbGVkLCBjb250YWlucyBvbmUgb3IgbW9yZSBDbGFzczo6bWV0aG9kIGNhbGxhYmxlcyBvciBzaGVsbCBjb21tYW5kcy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInByZS1wYWNrYWdlLXVwZGF0ZSI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBiZWZvcmUgYSBwYWNrYWdlIGlzIHVwZGF0ZWQsIGNvbnRhaW5zIG9uZSBvciBtb3JlIENsYXNzOjptZXRob2QgY2FsbGFibGVzIG9yIHNoZWxsIGNvbW1hbmRzLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicG9zdC1wYWNrYWdlLXVwZGF0ZSI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciBhIHBhY2thZ2UgaXMgdXBkYXRlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwcmUtcGFja2FnZS11bmluc3RhbGwiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiBbImFycmF5IiwgInN0cmluZyJdLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJPY2N1cnMgYmVmb3JlIGEgcGFja2FnZSBoYXMgYmVlbiB1bmluc3RhbGxlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwb3N0LXBhY2thZ2UtdW5pbnN0YWxsIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogWyJhcnJheSIsICJzdHJpbmciXSwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiT2NjdXJzIGFmdGVyIGEgcGFja2FnZSBoYXMgYmVlbiB1bmluc3RhbGxlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwcmUtYXV0b2xvYWQtZHVtcCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBiZWZvcmUgdGhlIGF1dG9sb2FkZXIgaXMgZHVtcGVkLCBjb250YWlucyBvbmUgb3IgbW9yZSBDbGFzczo6bWV0aG9kIGNhbGxhYmxlcyBvciBzaGVsbCBjb21tYW5kcy4iCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInBvc3QtYXV0b2xvYWQtZHVtcCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciB0aGUgYXV0b2xvYWRlciBpcyBkdW1wZWQsIGNvbnRhaW5zIG9uZSBvciBtb3JlIENsYXNzOjptZXRob2QgY2FsbGFibGVzIG9yIHNoZWxsIGNvbW1hbmRzLiIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAicG9zdC1yb290LXBhY2thZ2UtaW5zdGFsbCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciB0aGUgcm9vdC1wYWNrYWdlIGlzIGluc3RhbGxlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJwb3N0LWNyZWF0ZS1wcm9qZWN0LWNtZCI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6IFsiYXJyYXkiLCAic3RyaW5nIl0sCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIk9jY3VycyBhZnRlciB0aGUgY3JlYXRlLXByb2plY3QgY29tbWFuZCBpcyBleGVjdXRlZCwgY29udGFpbnMgb25lIG9yIG1vcmUgQ2xhc3M6Om1ldGhvZCBjYWxsYWJsZXMgb3Igc2hlbGwgY29tbWFuZHMuIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICAic3VwcG9ydCI6IHsKICAgICAgICAgICAgInR5cGUiOiAib2JqZWN0IiwKICAgICAgICAgICAgInByb3BlcnRpZXMiOiB7CiAgICAgICAgICAgICAgICAiZW1haWwiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiRW1haWwgYWRkcmVzcyBmb3Igc3VwcG9ydC4iLAogICAgICAgICAgICAgICAgICAgICJmb3JtYXQiOiAiZW1haWwiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgImlzc3VlcyI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVUkwgdG8gdGhlIElzc3VlIFRyYWNrZXIuIiwKICAgICAgICAgICAgICAgICAgICAiZm9ybWF0IjogInVyaSIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAiZm9ydW0iOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiVVJMIHRvIHRoZSBGb3J1bS4iLAogICAgICAgICAgICAgICAgICAgICJmb3JtYXQiOiAidXJpIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJ3aWtpIjogewogICAgICAgICAgICAgICAgICAgICJ0eXBlIjogInN0cmluZyIsCiAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogIlVSTCB0byB0aGUgV2lraS4iLAogICAgICAgICAgICAgICAgICAgICJmb3JtYXQiOiAidXJpIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICJpcmMiOiB7CiAgICAgICAgICAgICAgICAgICAgInR5cGUiOiAic3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiSVJDIGNoYW5uZWwgZm9yIHN1cHBvcnQsIGFzIGlyYzovL3NlcnZlci9jaGFubmVsLiIsCiAgICAgICAgICAgICAgICAgICAgImZvcm1hdCI6ICJ1cmkiCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgICAgICAgICAidHlwZSI6ICJzdHJpbmciLAogICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJVUkwgdG8gYnJvd3NlIG9yIGRvd25sb2FkIHRoZSBzb3VyY2VzLiIsCiAgICAgICAgICAgICAgICAgICAgImZvcm1hdCI6ICJ1cmkiCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KTVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5vdCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAAB/xizNO6dCnjunQp47p0KeMt/XnjqnQp4y38GeLadCnjLfxp45p0KeMt/Rnj+nQp4cYTmeOKdCnjunQ54Ip0KeMt/InjqnQp4y39aeOqdCnjLf0546p0KeUmljaDunQp4AAAAAAAAAAFBFAABMAQUArE1vTwAAAAAAAAAA4AACAQsBCQAACgAAABYAAAAAAAA4EwAAABAAAAAgAAAAAEAAABAAAAACAAAFAAAAAAAAAAUAAAAAAAAAAGAAAAAEAAA/nAAAAwBAgQAAEAAAEAAAAAAQAAAQAAAAAAAAEAAAAAAAAAAAAAAAkCIAAFAAAAAAQAAAIAYAAAAAAAAAAAAAAAAAAAAAAAAAUAAAcAEAAAAhAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOCEAAEAAAAAAAAAAAAAAAAAgAADYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALnRleHQAAAALCQAAABAAAAAKAAAABAAAAAAAAAAAAAAAAAAAIAAAYC5yZGF0YQAAzgkAAAAgAAAACgAAAA4AAAAAAAAAAAAAAAAAAEAAAEAuZGF0YQAAAJADAAAAMAAAAAIAAAAYAAAAAAAAAAAAAAAAAABAAADALnJzcmMAAAAgBgAAAEAAAAAIAAAAGgAAAAAAAAAAAAAAAAAAQAAAQC5yZWxvYwAAzAEAAABQAAAAAgAAACIAAAAAAAAAAAAAAAAAAEAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGokuOYYQADoeAgAAGr2/xUIIEAAg2XQAIvwjUXQUFb/FQAgQACLRdCD4PtQVv8VBCBAAI1N1P8VWCBAAINl/ACNRdRQ/zVIIEAA/xVMIEAAWVn/NVwgQACNRdRQ/zVgIEAA/xVEIEAAWVmLyP8VUCBAAINN/P+NTdT/FVQgQAAzwOhICAAAwzsNADBAAHUC88PprAIAAGiAFUAA6KMEAAChbDNAAMcEJDQwQAD/NWgzQACjNDBAAGgkMEAAaCgwQABoIDBAAP8VoCBAAIPEFKMwMEAAhcB9CGoI6LkDAABZw2oQaAgiQADoHwYAADPbiV38ZKEYAAAAi3AEiV3kv4AzQABTVlf/FTAgQAA7w3QZO8Z1CDP2Rol15OsQaOgDAAD/FTQgQADr2jP2RqF8M0AAO8Z1Cmof6FwDAABZ6zuhfDNAAIXAdSyJNXwzQABo8CBAAGjkIEAA6KcFAABZWYXAdBfHRfz+////uP8AAADp3QAAAIk1PDBAAKF8M0AAO8Z1G2jgIEAAaNggQADobAUAAFlZxwV8M0AAAgAAADld5HUIU1f/FTggQAA5HYwzQAB0GWiMM0AA6IMEAABZhcB0ClNqAlP/FYwzQAChJDBAAIsNvCBAAIkB/zUkMEAA/zUoMEAA/zUgMEAA6BD+//+DxAyjODBAADkdLDBAAHU3UP8VwCBAAItF7IsIiwmJTeBQUeiOAwAAWVnDi2Xoi0XgozgwQAAz2zkdLDBAAHUHUP8VaCBAADkdPDBAAHUG/xWcIEAAx0X8/v///6E4MEAA6PsEAADDuE1aAABmOQUAAEAAdAQzwOtNoTwAQACNgAAAQACBOFBFAAB16Q+3SBiB+QsBAAB0G4H5CwIAAHXVg7iEAAAADnbMM8k5iPgAAADrDoN4dA52vDPJOYjoAAAAD5XBi8FqAaMsMEAA/xVwIEAAav//FWwgQABZWaOEM0AAo4gzQAD/FcwgQACLDXQzQACJCP8ViCBAAIsNcDNAAIkIoaggQACLAKN4M0AA6FYCAADorAQAAIM9FDBAAAB1DGi1F0AA/xWsIEAAWehnBAAAgz0QMEAA/3UJav//FbAgQABZM8DD6HsEAADpn/3//4v/VYvsgewoAwAAo0gxQACJDUQxQACJFUAxQACJHTwxQACJNTgxQACJPTQxQABmjBVgMUAAZowNVDFAAGaMHTAxQABmjAUsMUAAZowlKDFAAGaMLSQxQACcjwVYMUAAi0UAo0wxQACLRQSjUDFAAI1FCKNcMUAAi4Xg/P//xwWYMEAAAQABAKFQMUAAo0wwQADHBUAwQAAJBADAxwVEMEAAAQAAAKEAMEAAiYXY/P//oQQwQACJhdz8////FRwgQACjkDBAAGoB6D8EAABZagD/FSAgQABoHCFAAP8VJCBAAIM9kDBAAAB1CGoB6BsEAABZaAkEAMD/FSggQABQ/xUsIEAAycOL/1WL7ItFCIsAgThjc23gdSqDeBADdSSLQBQ9IAWTGXQVPSEFkxl0Dj0iBZMZdAc9AECZAXUF6NADAAAzwF3CBABoSBRAAP8VICBAADPAw/8lpCBAAGoUaCgiQADoYgIAAP81iDNAAIs1jCBAAP/WWYlF5IP4/3UM/3UI/xXEIEAAWetnagjokgMAAFmDZfwA/zWIM0AA/9aJReT/NYQzQAD/1llZiUXgjUXgUI1F5FD/dQiLNWwgQAD/1llQ6FUDAACJRdz/deT/1qOIM0AA/3Xg/9aDxBSjhDNAAMdF/P7////oCQAAAItF3OgYAgAAw2oI6BkDAABZw4v/VYvs/3UI6E7////32BvA99hZSF3Di/9WuPwhQAC+/CFAAFeL+DvGcw+LB4XAdAL/0IPHBDv+cvFfXsOL/1a4BCJAAL4EIkAAV4v4O8ZzD4sHhcB0Av/Qg8cEO/5y8V9ew/8lyCBAAMzMzMyL/1WL7ItNCLhNWgAAZjkBdAQzwF3Di0E8A8GBOFBFAAB17zPSuQsBAABmOUgYD5TCi8Jdw8zMzMzMzMzMzMzMi/9Vi+yLRQiLSDwDyA+3QRRTVg+3cQYz0leNRAgYhfZ2G4t9DItIDDv5cgmLWAgD2Tv7cgpCg8AoO9Zy6DPAX15bXcPMzMzMzMzMzMzMzMyL/1WL7Gr+aEgiQABoZRdAAGShAAAAAFCD7AhTVlehADBAADFF+DPFUI1F8GSjAAAAAIll6MdF/AAAAABoAABAAOgq////g8QEhcB0VYtFCC0AAEAAUGgAAEAA6FD///+DxAiFwHQ7i0Akwegf99CD4AHHRfz+////i03wZIkNAAAAAFlfXluL5V3Di0XsiwiLATPSPQUAAMAPlMKLwsOLZejHRfz+////M8CLTfBkiQ0AAAAAWV9eW4vlXcPM/yW4IEAA/yW0IEAAzMxoZRdAAGT/NQAAAACLRCQQiWwkEI1sJBAr4FNWV6EAMEAAMUX8M8VQiWXo/3X4i0X8x0X8/v///4lF+I1F8GSjAAAAAMOLTfBkiQ0AAAAAWV9fXluL5V1Rw4v/VYvs/3UU/3UQ/3UM/3UIaIcQQABoADBAAOjnAAAAg8QYXcOL/1ZoAAADAGgAAAEAM/ZW6NkAAACDxAyFwHQNVlZWVlbowgAAAIPEFF7DM8DDi/9Vi+yD7BChADBAAINl+ACDZfwAU1e/TuZAu7sAAP//O8d0DYXDdAn30KMEMEAA62BWjUX4UP8VPCBAAIt1/DN1+P8VDCBAADPw/xUQIEAAM/D/FRQgQAAz8I1F8FD/FRggQACLRfQzRfAz8Dv3dQe+T+ZAu+sLhfN1B4vGweAQC/CJNQAwQAD31ok1BDBAAF5fW8nD/yV0IEAA/yV4IEAA/yV8IEAA/yWAIEAA/yWEIEAA/yWQIEAA/yWUIEAA/yWYIEAA/yXQIEAAUGT/NQAAAACNRCQMK2QkDFNWV4koi+ihADBAADPFUIlF8P91/MdF/P////+NRfRkowAAAADDi030ZIkNAAAAAFlfX15bi+VdUcOLTfAzzeiv9///6d3///+NTdT/JVQgQACLVCQIjUIMi0rMM8jokPf//4tK/DPI6Ib3//+4bCJAAOlz////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4IwAAyiMAANwjAACIKQAAcikAAGIpAABIKQAANCkAABYpAAD6KAAA5igAANIoAAC0KAAArCgAAJYoAACeKQAAAAAAAPojAADgJAAAGiUAAMolAAAaJgAAZCYAAK4mAACkJAAAAAAAACgnAADEJwAA1icAAOgnAAD+JwAAHigAACgoAAA2KAAApicAAEgoAABaKAAAdCgAAIYoAAAeJwAADicAAAAnAACWJwAAgicAAGwnAABeJwAAUicAAEYnAAA+JwAAPigAADAnAAC2JwAAuCkAAAAAAAAAAAAAlhBAAAAAAAAAAAAAVxJAAIoUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAKxNb08AAAAAAgAAAGwAAACAIQAAgA8AAEAwQACYMEAAYmFkIGFsbG9jYXRpb24AAAAAAABIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMEAA8CFAAAIAAABSU0RT0YyzELSPAUqoIfbM60xaAAEAAABjOlx1c2Vyc1xzZWxkXGRvY3VtZW50c1x2aXN1YWwgc3R1ZGlvIDIwMTBcUHJvamVjdHNcaGlkZGVuaW5wXFJlbGVhc2VcaGlkZGVuaW5wLnBkYgAAAAAAZRcAAOYYAAAAAAAAAAAAAAAAAAAAAAAA/v///wAAAADQ////AAAAAP7///8HEkAAGxJAAAAAAAD+////AAAAAMz///8AAAAA/v///wAAAAA6FUAAAAAAAP7///8AAAAA2P///wAAAAD+////yxZAAN8WQAD/////3RhAACIFkxkBAAAAZCJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAOAiAAAAAAAAAAAAAOwjAAAAIAAAJCMAAAAAAAAAAAAA9CYAAEQgAABIIwAAAAAAAAAAAAASKAAAaCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuCMAAMojAADcIwAAiCkAAHIpAABiKQAASCkAADQpAAAWKQAA+igAAOYoAADSKAAAtCgAAKwoAACWKAAAnikAAAAAAAD6IwAA4CQAABolAADKJQAAGiYAAGQmAACuJgAApCQAAAAAAAAoJwAAxCcAANYnAADoJwAA/icAAB4oAAAoKAAANigAAKYnAABIKAAAWigAAHQoAACGKAAAHicAAA4nAAAAJwAAlicAAIInAABsJwAAXicAAFInAABGJwAAPicAAD4oAAAwJwAAticAALgpAAAAAAAAlQFHZXRDb25zb2xlTW9kZQAAtwNTZXRDb25zb2xlTW9kZQAAOwJHZXRTdGRIYW5kbGUAAEtFUk5FTDMyLmRsbAAAFgA/PyQ/NkRVPyRjaGFyX3RyYWl0c0BEQHN0ZEBAVj8kYWxsb2NhdG9yQERAMUBAc3RkQEBZQUFBVj8kYmFzaWNfb3N0cmVhbUBEVT8kY2hhcl90cmFpdHNAREBzdGRAQEAwQEFBVjEwQEFCVj8kYmFzaWNfc3RyaW5nQERVPyRjaGFyX3RyYWl0c0BEQHN0ZEBAVj8kYWxsb2NhdG9yQERAMkBAMEBAWgCRBj9jb3V0QHN0ZEBAM1Y/JGJhc2ljX29zdHJlYW1ARFU/JGNoYXJfdHJhaXRzQERAc3RkQEBAMUBBAABKBj9jaW5Ac3RkQEAzVj8kYmFzaWNfaXN0cmVhbUBEVT8kY2hhcl90cmFpdHNAREBzdGRAQEAxQEEAwgA/PyRnZXRsaW5lQERVPyRjaGFyX3RyYWl0c0BEQHN0ZEBAVj8kYWxsb2NhdG9yQERAMkBAc3RkQEBZQUFBVj8kYmFzaWNfaXN0cmVhbUBEVT8kY2hhcl90cmFpdHNAREBzdGRAQEAwQEFBVjEwQEFBVj8kYmFzaWNfc3RyaW5nQERVPyRjaGFyX3RyYWl0c0BEQHN0ZEBAVj8kYWxsb2NhdG9yQERAMkBAMEBAWgAdAz8/Nj8kYmFzaWNfb3N0cmVhbUBEVT8kY2hhcl90cmFpdHNAREBzdGRAQEBzdGRAQFFBRUFBVjAxQFA2QUFBVjAxQEFBVjAxQEBaQFoAAF8CPz8xPyRiYXNpY19zdHJpbmdARFU/JGNoYXJfdHJhaXRzQERAc3RkQEBWPyRhbGxvY2F0b3JAREAyQEBzdGRAQFFBRUBYWgAAewE/PzA/JGJhc2ljX3N0cmluZ0BEVT8kY2hhcl90cmFpdHNAREBzdGRAQFY/JGFsbG9jYXRvckBEQDJAQHN0ZEBAUUFFQFhaAACzBz9lbmRsQHN0ZEBAWUFBQVY/JGJhc2ljX29zdHJlYW1ARFU/JGNoYXJfdHJhaXRzQERAc3RkQEBAMUBBQVYyMUBAWgAATVNWQ1A5MC5kbGwAFQFfYW1zZ19leGl0AACfAF9fZ2V0bWFpbmFyZ3MALAFfY2V4aXQAAHwBX2V4aXQAZgBfWGNwdEZpbHRlcgDMBGV4aXQAAKAAX19pbml0ZW52AAQCX2luaXR0ZXJtAAUCX2luaXR0ZXJtX2UAPAFfY29uZmlndGhyZWFkbG9jYWxlAOMAX19zZXR1c2VybWF0aGVycgAACwFfYWRqdXN0X2ZkaXYAAMsAX19wX19jb21tb2RlAADPAF9fcF9fZm1vZGUAAGoBX2VuY29kZV9wb2ludGVyAOAAX19zZXRfYXBwX3R5cGUAAEsBX2NydF9kZWJ1Z2dlcl9ob29rAABDAD90ZXJtaW5hdGVAQFlBWFhaAE1TVkNSOTAuZGxsAOYDX3VubG9jawCWAF9fZGxsb25leGl0AHYCX2xvY2sAHANfb25leGl0AGABX2RlY29kZV9wb2ludGVyAHMBX2V4Y2VwdF9oYW5kbGVyNF9jb21tb24ACwJfaW52b2tlX3dhdHNvbgAAPwFfY29udHJvbGZwX3MAAL0CSW50ZXJsb2NrZWRFeGNoYW5nZQAhBFNsZWVwALoCSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2UAAC0EVGVybWluYXRlUHJvY2VzcwAAqQFHZXRDdXJyZW50UHJvY2VzcwA+BFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRlcgAAFQRTZXRVbmhhbmRsZWRFeGNlcHRpb25GaWx0ZXIA0QJJc0RlYnVnZ2VyUHJlc2VudABUA1F1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyAGYCR2V0VGlja0NvdW50AACtAUdldEN1cnJlbnRUaHJlYWRJZAAAqgFHZXRDdXJyZW50UHJvY2Vzc0lkAE8CR2V0U3lzdGVtVGltZUFzRmlsZVRpbWUAcwBfX0N4eEZyYW1lSGFuZGxlcjMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAATuZAu7EZv0T///////////7///8BAAAAJCFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAIAEAAAACAAAIAYAAAAOAAAgAAAAAAAAAAABAAAAAAAAQABAAAAUAAAgAAAAAAAAAAABAAAAAAAAQABAAAAaAAAgAAAAAAAAAAABAAAAAAAAQAJBAAAgAAAAAAAAAAAAAAABAAAAAAAAQAJBAAAkAAAAKBAAAAoAwAA5AQAAAAAAADIQwAAVgIAAOQEAAAAAAAAKAM0AAAAVgBTAF8AVgBFAFIAUwBJAE8ATgBfAEkATgBGAE8AAAAAAL0E7/4AAAEAAAABAAAAAAAAAAEAAAAAABcAAAAAAAAABAAAAAEAAAAAAAAAAAAAAAAAAACGAgAAAQBTAHQAcgBpAG4AZwBGAGkAbABlAEkAbgBmAG8AAABiAgAAAQAwADQAMAA5ADAANABiADAAAADKAFEAAQBGAGkAbABlAEQAZQBzAGMAcgBpAHAAdABpAG8AbgAAAAAAUgBlAGEAZABzACAAZgByAG8AbQAgAHMAdABkAGkAbgAgAHcAaQB0AGgAbwB1AHQAIABsAGUAYQBrAGkAbgBnACAAaQBuAGYAbwAgAHQAbwAgAHQAaABlACAAdABlAHIAbQBpAG4AYQBsACAAYQBuAGQAIABvAHUAdABwAHUAdABzACAAYgBhAGMAawAgAHQAbwAgAHMAdABkAG8AdQB0AAAAAAA2AAsAAQBGAGkAbABlAFYAZQByAHMAaQBvAG4AAAAAADEALAAgADAALAAgADAALAAgADAAAAAAADgADAABAEkAbgB0AGUAcgBuAGEAbABOAGEAbQBlAAAAaABpAGQAZABlAG4AaQBuAHAAdQB0AAAAUAAWAAEATABlAGcAYQBsAEMAbwBwAHkAcgBpAGcAaAB0AAAASgBvAHIAZABpACAAQgBvAGcAZwBpAGEAbgBvACAALQAgADIAMAAxADIAAABIABAAAQBPAHIAaQBnAGkAbgBhAGwARgBpAGwAZQBuAGEAbQBlAAAAaABpAGQAZABlAG4AaQBuAHAAdQB0AC4AZQB4AGUAAAA6AA0AAQBQAHIAbwBkAHUAYwB0AE4AYQBtAGUAAAAAAEgAaQBkAGQAZQBuACAASQBuAHAAdQB0AAAAAAA6AAsAAQBQAHIAbwBkAHUAYwB0AFYAZQByAHMAaQBvAG4AAAAxACwAIAAwACwAIAAwACwAIAAwAAAAAABEAAAAAQBWAGEAcgBGAGkAbABlAEkAbgBmAG8AAAAAACQABAAAAFQAcgBhAG4AcwBsAGEAdABpAG8AbgAAAAAACQSwBDxhc3NlbWJseSB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjEiIG1hbmlmZXN0VmVyc2lvbj0iMS4wIj4NCiAgPHRydXN0SW5mbyB4bWxucz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTphc20udjMiPg0KICAgIDxzZWN1cml0eT4NCiAgICAgIDxyZXF1ZXN0ZWRQcml2aWxlZ2VzPg0KICAgICAgICA8cmVxdWVzdGVkRXhlY3V0aW9uTGV2ZWwgbGV2ZWw9ImFzSW52b2tlciIgdWlBY2Nlc3M9ImZhbHNlIj48L3JlcXVlc3RlZEV4ZWN1dGlvbkxldmVsPg0KICAgICAgPC9yZXF1ZXN0ZWRQcml2aWxlZ2VzPg0KICAgIDwvc2VjdXJpdHk+DQogIDwvdHJ1c3RJbmZvPg0KICA8ZGVwZW5kZW5jeT4NCiAgICA8ZGVwZW5kZW50QXNzZW1ibHk+DQogICAgICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgbmFtZT0iTWljcm9zb2Z0LlZDOTAuQ1JUIiB2ZXJzaW9uPSI5LjAuMjEwMjIuOCIgcHJvY2Vzc29yQXJjaGl0ZWN0dXJlPSJ4ODYiIHB1YmxpY0tleVRva2VuPSIxZmM4YjNiOWExZTE4ZTNiIj48L2Fzc2VtYmx5SWRlbnRpdHk+DQogICAgPC9kZXBlbmRlbnRBc3NlbWJseT4NCiAgPC9kZXBlbmRlbmN5Pg0KPC9hc3NlbWJseT5QQVBBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElOR1BBRERJTkdYWFBBRERJTkdQQURESU5HWFhQQURESU5HUEFERElOR1hYUEFERElORwAQAABAAQAAAzAQMCEwLzA4MEYwTDBUMF4wZDBuMHswiTCXMKEwqDCuMLMwuDC9MMIwyDDQMOQw/zAIMSMxLTFAMUoxTzFUMXYxezGEMYkxljGnMa0xtDHIMc0x0zHbMeEx5zH0MfoxAzIiMioyMzI5MkEyTTJfMmoycDK5Mr8yxzLOMtMy2TLfMucy7TL0MvsyCzMTMxkzJTMwM04zVDNaM2AzZjNsM3MzejOBM4gzjzOWM50zpTOtM7UzwTPKM88z1TPfM+gz8zP/MwQ0FDQZNB80JTQ7NEI0izSRNJo0oTSsNLI0xjTbNOY0/jQUNSE1XjVjNYQ1iTWoNUg2TTZfNn02kTaXNgA3BjcNNyo3dzd8N8E35DfxN/03BTgNOBk4PThFOFA4VjhcOGI4aDhuOHQ4ejiAOJw44jgCOQAAACAAACQAAADcMOgw7DAcMSAxdDF4MRwyIDJAMlwyYDJoMnQyADAAAAwAAAAYMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXFJ1bnRpbWVFeGNlcHRpb247CgoKCgoKCgoKCgoKCmNsYXNzIFBocFByb2Nlc3MgZXh0ZW5kcyBQcm9jZXNzCnsKcHJpdmF0ZSAkZXhlY3V0YWJsZUZpbmRlcjsKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzY3JpcHQsICRjd2QgPSBudWxsLCBhcnJheSAkZW52ID0gYXJyYXkoKSwgJHRpbWVvdXQgPSA2MCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CnBhcmVudDo6X19jb25zdHJ1Y3QobnVsbCwgJGN3ZCwgJGVudiwgJHNjcmlwdCwgJHRpbWVvdXQsICRvcHRpb25zKTsKCiR0aGlzLT5leGVjdXRhYmxlRmluZGVyID0gbmV3IFBocEV4ZWN1dGFibGVGaW5kZXIoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UGhwQmluYXJ5KCRwaHApCnsKJHRoaXMtPnNldENvbW1hbmRMaW5lKCRwaHApOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc3RhcnQoJGNhbGxiYWNrID0gbnVsbCkKewppZiAobnVsbCA9PT0gJHRoaXMtPmdldENvbW1hbmRMaW5lKCkpIHsKaWYgKGZhbHNlID09PSAkcGhwID0gJHRoaXMtPmV4ZWN1dGFibGVGaW5kZXItPmZpbmQoKSkgewp0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGZpbmQgdGhlIFBIUCBleGVjdXRhYmxlLicpOwp9CiR0aGlzLT5zZXRDb21tYW5kTGluZSgkcGhwKTsKfQoKcGFyZW50OjpzdGFydCgkY2FsbGJhY2spOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKCgoKCgoKY2xhc3MgRXhlY3V0YWJsZUZpbmRlcgp7CnByaXZhdGUgJHN1ZmZpeGVzID0gYXJyYXkoJy5leGUnLCAnLmJhdCcsICcuY21kJywgJy5jb20nKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFN1ZmZpeGVzKGFycmF5ICRzdWZmaXhlcykKewokdGhpcy0+c3VmZml4ZXMgPSAkc3VmZml4ZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZFN1ZmZpeCgkc3VmZml4KQp7CiR0aGlzLT5zdWZmaXhlc1tdID0gJHN1ZmZpeDsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbmQoJG5hbWUsICRkZWZhdWx0ID0gbnVsbCwgYXJyYXkgJGV4dHJhRGlycyA9IGFycmF5KCkpCnsKaWYgKGluaV9nZXQoJ29wZW5fYmFzZWRpcicpKSB7CiRzZWFyY2hQYXRoID0gZXhwbG9kZShQQVRIX1NFUEFSQVRPUiwgZ2V0ZW52KCdvcGVuX2Jhc2VkaXInKSk7CiRkaXJzID0gYXJyYXkoKTsKZm9yZWFjaCAoJHNlYXJjaFBhdGggYXMgJHBhdGgpIHsKaWYgKGlzX2RpcigkcGF0aCkpIHsKJGRpcnNbXSA9ICRwYXRoOwp9IGVsc2UgewokZmlsZSA9IHN0cl9yZXBsYWNlKGRpcm5hbWUoJHBhdGgpLCAnJywgJHBhdGgpOwppZiAoJGZpbGUgPT0gJG5hbWUgJiYgaXNfZXhlY3V0YWJsZSgkcGF0aCkpIHsKcmV0dXJuICRwYXRoOwp9Cn0KfQp9IGVsc2UgewokZGlycyA9IGFycmF5X21lcmdlKApleHBsb2RlKFBBVEhfU0VQQVJBVE9SLCBnZXRlbnYoJ1BBVEgnKSA/OiBnZXRlbnYoJ1BhdGgnKSksCiRleHRyYURpcnMKKTsKfQoKJHN1ZmZpeGVzID0gYXJyYXkoJycpOwppZiAoZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpKSB7CiRwYXRoRXh0ID0gZ2V0ZW52KCdQQVRIRVhUJyk7CiRzdWZmaXhlcyA9ICRwYXRoRXh0ID8gZXhwbG9kZShQQVRIX1NFUEFSQVRPUiwgJHBhdGhFeHQpIDogJHRoaXMtPnN1ZmZpeGVzOwp9CmZvcmVhY2ggKCRzdWZmaXhlcyBhcyAkc3VmZml4KSB7CmZvcmVhY2ggKCRkaXJzIGFzICRkaXIpIHsKaWYgKGlzX2ZpbGUoJGZpbGUgPSAkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG5hbWUuJHN1ZmZpeCkgJiYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSB8fCBpc19leGVjdXRhYmxlKCRmaWxlKSkpIHsKcmV0dXJuICRmaWxlOwp9Cn0KfQoKcmV0dXJuICRkZWZhdWx0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbjsKCgoKCgoKCgoKY2xhc3MgUHJvY2Vzcwp7CmNvbnN0IEVSUiA9ICdlcnInOwpjb25zdCBPVVQgPSAnb3V0JzsKCmNvbnN0IFNUQVRVU19SRUFEWSA9ICdyZWFkeSc7CmNvbnN0IFNUQVRVU19TVEFSVEVEID0gJ3N0YXJ0ZWQnOwpjb25zdCBTVEFUVVNfVEVSTUlOQVRFRCA9ICd0ZXJtaW5hdGVkJzsKCmNvbnN0IFNURElOID0gMDsKY29uc3QgU1RET1VUID0gMTsKY29uc3QgU1RERVJSID0gMjsKCgogY29uc3QgVElNRU9VVF9QUkVDSVNJT04gPSAwLjI7Cgpwcml2YXRlICRjYWxsYmFjazsKcHJpdmF0ZSAkY29tbWFuZGxpbmU7CnByaXZhdGUgJGN3ZDsKcHJpdmF0ZSAkZW52Owpwcml2YXRlICRzdGRpbjsKcHJpdmF0ZSAkc3RhcnR0aW1lOwpwcml2YXRlICRsYXN0T3V0cHV0VGltZTsKcHJpdmF0ZSAkdGltZW91dDsKcHJpdmF0ZSAkaWRsZVRpbWVvdXQ7CnByaXZhdGUgJG9wdGlvbnM7CnByaXZhdGUgJGV4aXRjb2RlOwpwcml2YXRlICRmYWxsYmFja0V4aXRjb2RlOwpwcml2YXRlICRwcm9jZXNzSW5mb3JtYXRpb247CnByaXZhdGUgJHN0ZG91dDsKcHJpdmF0ZSAkc3RkZXJyOwpwcml2YXRlICRlbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHk7CnByaXZhdGUgJGVuaGFuY2VTaWdjaGlsZENvbXBhdGliaWxpdHk7CnByaXZhdGUgJHByb2Nlc3M7CnByaXZhdGUgJHN0YXR1cyA9IHNlbGY6OlNUQVRVU19SRUFEWTsKcHJpdmF0ZSAkaW5jcmVtZW50YWxPdXRwdXRPZmZzZXQ7CnByaXZhdGUgJGluY3JlbWVudGFsRXJyb3JPdXRwdXRPZmZzZXQ7CnByaXZhdGUgJHR0eTsKCnByaXZhdGUgJHVzZUZpbGVIYW5kbGVzID0gZmFsc2U7Cgpwcml2YXRlICRwcm9jZXNzUGlwZXM7Cgpwcml2YXRlIHN0YXRpYyAkc2lnY2hpbGQ7CgoKCgoKCgoKcHVibGljIHN0YXRpYyAkZXhpdENvZGVzID0gYXJyYXkoCjAgPT4gJ09LJywKMSA9PiAnR2VuZXJhbCBlcnJvcicsCjIgPT4gJ01pc3VzZSBvZiBzaGVsbCBidWlsdGlucycsCgoxMjYgPT4gJ0ludm9rZWQgY29tbWFuZCBjYW5ub3QgZXhlY3V0ZScsCjEyNyA9PiAnQ29tbWFuZCBub3QgZm91bmQnLAoxMjggPT4gJ0ludmFsaWQgZXhpdCBhcmd1bWVudCcsCgoKIDEyOSA9PiAnSGFuZ3VwJywKMTMwID0+ICdJbnRlcnJ1cHQnLAoxMzEgPT4gJ1F1aXQgYW5kIGR1bXAgY29yZScsCjEzMiA9PiAnSWxsZWdhbCBpbnN0cnVjdGlvbicsCjEzMyA9PiAnVHJhY2UvYnJlYWtwb2ludCB0cmFwJywKMTM0ID0+ICdQcm9jZXNzIGFib3J0ZWQnLAoxMzUgPT4gJ0J1cyBlcnJvcjogImFjY2VzcyB0byB1bmRlZmluZWQgcG9ydGlvbiBvZiBtZW1vcnkgb2JqZWN0IicsCjEzNiA9PiAnRmxvYXRpbmcgcG9pbnQgZXhjZXB0aW9uOiAiZXJyb25lb3VzIGFyaXRobWV0aWMgb3BlcmF0aW9uIicsCjEzNyA9PiAnS2lsbCAodGVybWluYXRlIGltbWVkaWF0ZWx5KScsCjEzOCA9PiAnVXNlci1kZWZpbmVkIDEnLAoxMzkgPT4gJ1NlZ21lbnRhdGlvbiB2aW9sYXRpb24nLAoxNDAgPT4gJ1VzZXItZGVmaW5lZCAyJywKMTQxID0+ICdXcml0ZSB0byBwaXBlIHdpdGggbm8gb25lIHJlYWRpbmcnLAoxNDIgPT4gJ1NpZ25hbCByYWlzZWQgYnkgYWxhcm0nLAoxNDMgPT4gJ1Rlcm1pbmF0aW9uIChyZXF1ZXN0IHRvIHRlcm1pbmF0ZSknLAoKIDE0NSA9PiAnQ2hpbGQgcHJvY2VzcyB0ZXJtaW5hdGVkLCBzdG9wcGVkIChvciBjb250aW51ZWQqKScsCjE0NiA9PiAnQ29udGludWUgaWYgc3RvcHBlZCcsCjE0NyA9PiAnU3RvcCBleGVjdXRpbmcgdGVtcG9yYXJpbHknLAoxNDggPT4gJ1Rlcm1pbmFsIHN0b3Agc2lnbmFsJywKMTQ5ID0+ICdCYWNrZ3JvdW5kIHByb2Nlc3MgYXR0ZW1wdGluZyB0byByZWFkIGZyb20gdHR5ICgiaW4iKScsCjE1MCA9PiAnQmFja2dyb3VuZCBwcm9jZXNzIGF0dGVtcHRpbmcgdG8gd3JpdGUgdG8gdHR5ICgib3V0IiknLAoxNTEgPT4gJ1VyZ2VudCBkYXRhIGF2YWlsYWJsZSBvbiBzb2NrZXQnLAoxNTIgPT4gJ0NQVSB0aW1lIGxpbWl0IGV4Y2VlZGVkJywKMTUzID0+ICdGaWxlIHNpemUgbGltaXQgZXhjZWVkZWQnLAoxNTQgPT4gJ1NpZ25hbCByYWlzZWQgYnkgdGltZXIgY291bnRpbmcgdmlydHVhbCB0aW1lOiAidmlydHVhbCB0aW1lciBleHBpcmVkIicsCjE1NSA9PiAnUHJvZmlsaW5nIHRpbWVyIGV4cGlyZWQnLAoKIDE1NyA9PiAnUG9sbGFibGUgZXZlbnQnLAoKIDE1OSA9PiAnQmFkIHN5c2NhbGwnLAopOwoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvbW1hbmRsaW5lLCAkY3dkID0gbnVsbCwgYXJyYXkgJGVudiA9IG51bGwsICRzdGRpbiA9IG51bGwsICR0aW1lb3V0ID0gNjAsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RoZSBQcm9jZXNzIGNsYXNzIHJlbGllcyBvbiBwcm9jX29wZW4sIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgb24geW91ciBQSFAgaW5zdGFsbGF0aW9uLicpOwp9CgokdGhpcy0+Y29tbWFuZGxpbmUgPSAkY29tbWFuZGxpbmU7CiR0aGlzLT5jd2QgPSAkY3dkOwoKCiAKIAogCgppZiAobnVsbCA9PT0gJHRoaXMtPmN3ZCAmJiAoZGVmaW5lZCgnWkVORF9USFJFQURfU0FGRScpIHx8IGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSkpIHsKJHRoaXMtPmN3ZCA9IGdldGN3ZCgpOwp9CmlmIChudWxsICE9PSAkZW52KSB7CiR0aGlzLT5zZXRFbnYoJGVudik7Cn0gZWxzZSB7CiR0aGlzLT5lbnYgPSBudWxsOwp9CiR0aGlzLT5zdGRpbiA9ICRzdGRpbjsKJHRoaXMtPnNldFRpbWVvdXQoJHRpbWVvdXQpOwokdGhpcy0+dXNlRmlsZUhhbmRsZXMgPSBkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJyk7CiR0aGlzLT5lbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkgPSB0cnVlOwokdGhpcy0+ZW5oYW5jZVNpZ2NoaWxkQ29tcGF0aWJpbGl0eSA9ICFkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgJiYgJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCk7CiR0aGlzLT5vcHRpb25zID0gYXJyYXlfcmVwbGFjZShhcnJheSgnc3VwcHJlc3NfZXJyb3JzJyA9PiB0cnVlLCAnYmluYXJ5X3BpcGVzJyA9PiB0cnVlKSwgJG9wdGlvbnMpOwp9CgpwdWJsaWMgZnVuY3Rpb24gX19kZXN0cnVjdCgpCnsKCiAkdGhpcy0+c3RvcCgpOwp9CgpwdWJsaWMgZnVuY3Rpb24gX19jbG9uZSgpCnsKJHRoaXMtPnJlc2V0UHJvY2Vzc0RhdGEoKTsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBydW4oJGNhbGxiYWNrID0gbnVsbCkKewokdGhpcy0+c3RhcnQoJGNhbGxiYWNrKTsKCnJldHVybiAkdGhpcy0+d2FpdCgpOwp9CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzdGFydCgkY2FsbGJhY2sgPSBudWxsKQp7CmlmICgkdGhpcy0+aXNSdW5uaW5nKCkpIHsKdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1Byb2Nlc3MgaXMgYWxyZWFkeSBydW5uaW5nJyk7Cn0KCiR0aGlzLT5yZXNldFByb2Nlc3NEYXRhKCk7CiR0aGlzLT5zdGFydHRpbWUgPSAkdGhpcy0+bGFzdE91dHB1dFRpbWUgPSBtaWNyb3RpbWUodHJ1ZSk7CiR0aGlzLT5jYWxsYmFjayA9ICR0aGlzLT5idWlsZENhbGxiYWNrKCRjYWxsYmFjayk7CiRkZXNjcmlwdG9ycyA9ICR0aGlzLT5nZXREZXNjcmlwdG9ycygpOwoKJGNvbW1hbmRsaW5lID0gJHRoaXMtPmNvbW1hbmRsaW5lOwoKaWYgKGRlZmluZWQoJ1BIUF9XSU5ET1dTX1ZFUlNJT05fQlVJTEQnKSAmJiAkdGhpcy0+ZW5oYW5jZVdpbmRvd3NDb21wYXRpYmlsaXR5KSB7CiRjb21tYW5kbGluZSA9ICdjbWQgL1Y6T04gL0U6T04gL0MgIicuJGNvbW1hbmRsaW5lLiciJzsKaWYgKCFpc3NldCgkdGhpcy0+b3B0aW9uc1snYnlwYXNzX3NoZWxsJ10pKSB7CiR0aGlzLT5vcHRpb25zWydieXBhc3Nfc2hlbGwnXSA9IHRydWU7Cn0KfQoKJHRoaXMtPnByb2Nlc3MgPSBwcm9jX29wZW4oJGNvbW1hbmRsaW5lLCAkZGVzY3JpcHRvcnMsICR0aGlzLT5wcm9jZXNzUGlwZXMtPnBpcGVzLCAkdGhpcy0+Y3dkLCAkdGhpcy0+ZW52LCAkdGhpcy0+b3B0aW9ucyk7CgppZiAoIWlzX3Jlc291cmNlKCR0aGlzLT5wcm9jZXNzKSkgewp0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVW5hYmxlIHRvIGxhdW5jaCBhIG5ldyBwcm9jZXNzLicpOwp9CiR0aGlzLT5zdGF0dXMgPSBzZWxmOjpTVEFUVVNfU1RBUlRFRDsKCiR0aGlzLT5wcm9jZXNzUGlwZXMtPnVuYmxvY2soKTsKCmlmICgkdGhpcy0+dHR5KSB7CiR0aGlzLT5zdGF0dXMgPSBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRDsKCnJldHVybjsKfQoKJHRoaXMtPnByb2Nlc3NQaXBlcy0+d3JpdGUoZmFsc2UsICR0aGlzLT5zdGRpbik7CiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwokdGhpcy0+Y2hlY2tUaW1lb3V0KCk7Cn0KCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXN0YXJ0KCRjYWxsYmFjayA9IG51bGwpCnsKaWYgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewp0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignUHJvY2VzcyBpcyBhbHJlYWR5IHJ1bm5pbmcnKTsKfQoKJHByb2Nlc3MgPSBjbG9uZSAkdGhpczsKJHByb2Nlc3MtPnN0YXJ0KCRjYWxsYmFjayk7CgpyZXR1cm4gJHByb2Nlc3M7Cn0KCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHdhaXQoJGNhbGxiYWNrID0gbnVsbCkKewokdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKaWYgKG51bGwgIT09ICRjYWxsYmFjaykgewokdGhpcy0+Y2FsbGJhY2sgPSAkdGhpcy0+YnVpbGRDYWxsYmFjaygkY2FsbGJhY2spOwp9CgpkbyB7CiR0aGlzLT5jaGVja1RpbWVvdXQoKTsKJHJ1bm5pbmcgPSBkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgPyAkdGhpcy0+aXNSdW5uaW5nKCkgOiAkdGhpcy0+cHJvY2Vzc1BpcGVzLT5oYXNPcGVuSGFuZGxlcygpOwokY2xvc2UgPSAhZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpIHx8ICEkcnVubmluZzs7CiR0aGlzLT5yZWFkUGlwZXModHJ1ZSwgJGNsb3NlKTsKfSB3aGlsZSAoJHJ1bm5pbmcpOwoKd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSkgewp1c2xlZXAoMTAwMCk7Cn0KCmlmICgkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddKSB7CmlmICgkdGhpcy0+aXNTaWdjaGlsZEVuYWJsZWQoKSkgewp0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVGhlIHByb2Nlc3MgaGFzIGJlZW4gc2lnbmFsZWQuJyk7Cn0KCnRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ1RoZSBwcm9jZXNzIGhhcyBiZWVuIHNpZ25hbGVkIHdpdGggc2lnbmFsICIlcyIuJywgJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsndGVybXNpZyddKSk7Cn0KCnJldHVybiAkdGhpcy0+ZXhpdGNvZGU7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGlkKCkKewppZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkpIHsKdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RoaXMgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggLS1lbmFibGUtc2lnY2hpbGQuIFRoZSBwcm9jZXNzIGlkZW50aWZpZXIgY2FuIG5vdCBiZSByZXRyaWV2ZWQuJyk7Cn0KCiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKcmV0dXJuICR0aGlzLT5pc1J1bm5pbmcoKSA/ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3BpZCddIDogbnVsbDsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzaWduYWwoJHNpZ25hbCkKewppZiAoISR0aGlzLT5pc1J1bm5pbmcoKSkgewp0aHJvdyBuZXcgTG9naWNFeGNlcHRpb24oJ0NhbiBub3Qgc2VuZCBzaWduYWwgb24gYSBub24gcnVubmluZyBwcm9jZXNzLicpOwp9CgppZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkpIHsKdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RoaXMgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggLS1lbmFibGUtc2lnY2hpbGQuIFRoZSBwcm9jZXNzIGNhbiBub3QgYmUgc2lnbmFsZWQuJyk7Cn0KCmlmICh0cnVlICE9PSBAcHJvY190ZXJtaW5hdGUoJHRoaXMtPnByb2Nlc3MsICRzaWduYWwpKSB7CnRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ0Vycm9yIHdoaWxlIHNlbmRpbmcgc2lnbmFsIGAlZGAuJywgJHNpZ25hbCkpOwp9CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3V0cHV0KCkKewokdGhpcy0+cmVhZFBpcGVzKGZhbHNlLCBkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgPyAhJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsncnVubmluZyddIDogdHJ1ZSk7CgpyZXR1cm4gJHRoaXMtPnN0ZG91dDsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5jcmVtZW50YWxPdXRwdXQoKQp7CiRkYXRhID0gJHRoaXMtPmdldE91dHB1dCgpOwoKJGxhdGVzdCA9IHN1YnN0cigkZGF0YSwgJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0KTsKJHRoaXMtPmluY3JlbWVudGFsT3V0cHV0T2Zmc2V0ID0gc3RybGVuKCRkYXRhKTsKCnJldHVybiAkbGF0ZXN0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjbGVhck91dHB1dCgpCnsKJHRoaXMtPnN0ZG91dCA9ICcnOwokdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQgPSAwOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEVycm9yT3V0cHV0KCkKewokdGhpcy0+cmVhZFBpcGVzKGZhbHNlLCBkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykgPyAhJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsncnVubmluZyddIDogdHJ1ZSk7CgpyZXR1cm4gJHRoaXMtPnN0ZGVycjsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEluY3JlbWVudGFsRXJyb3JPdXRwdXQoKQp7CiRkYXRhID0gJHRoaXMtPmdldEVycm9yT3V0cHV0KCk7CgokbGF0ZXN0ID0gc3Vic3RyKCRkYXRhLCAkdGhpcy0+aW5jcmVtZW50YWxFcnJvck91dHB1dE9mZnNldCk7CiR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0ID0gc3RybGVuKCRkYXRhKTsKCnJldHVybiAkbGF0ZXN0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjbGVhckVycm9yT3V0cHV0KCkKewokdGhpcy0+c3RkZXJyID0gJyc7CiR0aGlzLT5pbmNyZW1lbnRhbEVycm9yT3V0cHV0T2Zmc2V0ID0gMDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlKCkKewppZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkgJiYgISR0aGlzLT5lbmhhbmNlU2lnY2hpbGRDb21wYXRpYmlsaXR5KSB7CnRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdUaGlzIFBIUCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIC0tZW5hYmxlLXNpZ2NoaWxkLiBZb3UgbXVzdCB1c2Ugc2V0RW5oYW5jZVNpZ2NoaWxkQ29tcGF0aWJpbGl0eSgpIHRvIHVzZSB0aGlzIG1ldGhvZCcpOwp9CgokdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKCnJldHVybiAkdGhpcy0+ZXhpdGNvZGU7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlVGV4dCgpCnsKJGV4aXRjb2RlID0gJHRoaXMtPmdldEV4aXRDb2RlKCk7CgpyZXR1cm4gaXNzZXQoc2VsZjo6JGV4aXRDb2Rlc1skZXhpdGNvZGVdKSA/IHNlbGY6OiRleGl0Q29kZXNbJGV4aXRjb2RlXSA6ICdVbmtub3duIGVycm9yJzsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1N1Y2Nlc3NmdWwoKQp7CnJldHVybiAwID09PSAkdGhpcy0+Z2V0RXhpdENvZGUoKTsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzQmVlblNpZ25hbGVkKCkKewppZiAoJHRoaXMtPmlzU2lnY2hpbGRFbmFibGVkKCkpIHsKdGhyb3cgbmV3IFJ1bnRpbWVFeGNlcHRpb24oJ1RoaXMgUEhQIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggLS1lbmFibGUtc2lnY2hpbGQuIFRlcm0gc2lnbmFsIGNhbiBub3QgYmUgcmV0cmlldmVkJyk7Cn0KCiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKcmV0dXJuICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3NpZ25hbGVkJ107Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRlcm1TaWduYWwoKQp7CmlmICgkdGhpcy0+aXNTaWdjaGlsZEVuYWJsZWQoKSkgewp0aHJvdyBuZXcgUnVudGltZUV4Y2VwdGlvbignVGhpcyBQSFAgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCAtLWVuYWJsZS1zaWdjaGlsZC4gVGVybSBzaWduYWwgY2FuIG5vdCBiZSByZXRyaWV2ZWQnKTsKfQoKJHRoaXMtPnVwZGF0ZVN0YXR1cyhmYWxzZSk7CgpyZXR1cm4gJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvblsndGVybXNpZyddOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzQmVlblN0b3BwZWQoKQp7CiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKcmV0dXJuICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3N0b3BwZWQnXTsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN0b3BTaWduYWwoKQp7CiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKcmV0dXJuICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3N0b3BzaWcnXTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNSdW5uaW5nKCkKewppZiAoc2VsZjo6U1RBVFVTX1NUQVJURUQgIT09ICR0aGlzLT5zdGF0dXMpIHsKcmV0dXJuIGZhbHNlOwp9CgokdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKCnJldHVybiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydydW5uaW5nJ107Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzU3RhcnRlZCgpCnsKcmV0dXJuICR0aGlzLT5zdGF0dXMgIT0gc2VsZjo6U1RBVFVTX1JFQURZOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1Rlcm1pbmF0ZWQoKQp7CiR0aGlzLT51cGRhdGVTdGF0dXMoZmFsc2UpOwoKcmV0dXJuICR0aGlzLT5zdGF0dXMgPT0gc2VsZjo6U1RBVFVTX1RFUk1JTkFURUQ7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3RhdHVzKCkKewokdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKCnJldHVybiAkdGhpcy0+c3RhdHVzOwp9CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHN0b3AoJHRpbWVvdXQgPSAxMCwgJHNpZ25hbCA9IG51bGwpCnsKJHRpbWVvdXRNaWNybyA9IG1pY3JvdGltZSh0cnVlKSArICR0aW1lb3V0OwppZiAoJHRoaXMtPmlzUnVubmluZygpKSB7CnByb2NfdGVybWluYXRlKCR0aGlzLT5wcm9jZXNzKTsKZG8gewp1c2xlZXAoMTAwMCk7Cn0gd2hpbGUgKCR0aGlzLT5pc1J1bm5pbmcoKSAmJiBtaWNyb3RpbWUodHJ1ZSkgPCAkdGltZW91dE1pY3JvKTsKCmlmICgkdGhpcy0+aXNSdW5uaW5nKCkgJiYgISR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CmlmIChudWxsICE9PSAkc2lnbmFsIHx8IGRlZmluZWQoJ1NJR0tJTEwnKSkgewokdGhpcy0+c2lnbmFsKCRzaWduYWwgPzogU0lHS0lMTCk7Cn0KfQp9CgokdGhpcy0+dXBkYXRlU3RhdHVzKGZhbHNlKTsKaWYgKCR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3J1bm5pbmcnXSkgewokdGhpcy0+Y2xvc2UoKTsKfQoKJHRoaXMtPnN0YXR1cyA9IHNlbGY6OlNUQVRVU19URVJNSU5BVEVEOwoKcmV0dXJuICR0aGlzLT5leGl0Y29kZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkT3V0cHV0KCRsaW5lKQp7CiR0aGlzLT5sYXN0T3V0cHV0VGltZSA9IG1pY3JvdGltZSh0cnVlKTsKJHRoaXMtPnN0ZG91dCAuPSAkbGluZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkRXJyb3JPdXRwdXQoJGxpbmUpCnsKJHRoaXMtPmxhc3RPdXRwdXRUaW1lID0gbWljcm90aW1lKHRydWUpOwokdGhpcy0+c3RkZXJyIC49ICRsaW5lOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb21tYW5kTGluZSgpCnsKcmV0dXJuICR0aGlzLT5jb21tYW5kbGluZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRDb21tYW5kTGluZSgkY29tbWFuZGxpbmUpCnsKJHRoaXMtPmNvbW1hbmRsaW5lID0gJGNvbW1hbmRsaW5lOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUaW1lb3V0KCkKewpyZXR1cm4gJHRoaXMtPnRpbWVvdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldElkbGVUaW1lb3V0KCkKewpyZXR1cm4gJHRoaXMtPmlkbGVUaW1lb3V0Owp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRUaW1lb3V0KCR0aW1lb3V0KQp7CiR0aGlzLT50aW1lb3V0ID0gJHRoaXMtPnZhbGlkYXRlVGltZW91dCgkdGltZW91dCk7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldElkbGVUaW1lb3V0KCR0aW1lb3V0KQp7CiR0aGlzLT5pZGxlVGltZW91dCA9ICR0aGlzLT52YWxpZGF0ZVRpbWVvdXQoJHRpbWVvdXQpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFR0eSgkdHR5KQp7CiR0aGlzLT50dHkgPSAoQm9vbGVhbikgJHR0eTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNUdHkoKQp7CnJldHVybiAkdGhpcy0+dHR5Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRXb3JraW5nRGlyZWN0b3J5KCkKewppZiAobnVsbCA9PT0gJHRoaXMtPmN3ZCkgewoKIAogcmV0dXJuIGdldGN3ZCgpID86IG51bGw7Cn0KCnJldHVybiAkdGhpcy0+Y3dkOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFdvcmtpbmdEaXJlY3RvcnkoJGN3ZCkKewokdGhpcy0+Y3dkID0gJGN3ZDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RW52KCkKewpyZXR1cm4gJHRoaXMtPmVudjsKfQoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFbnYoYXJyYXkgJGVudikKewoKICRlbnYgPSBhcnJheV9maWx0ZXIoJGVudiwgZnVuY3Rpb24gKCR2YWx1ZSkgeyBpZiAoIWlzX2FycmF5KCR2YWx1ZSkpIHsgcmV0dXJuIHRydWU7IH0gfSk7CgokdGhpcy0+ZW52ID0gYXJyYXkoKTsKZm9yZWFjaCAoJGVudiBhcyAka2V5ID0+ICR2YWx1ZSkgewokdGhpcy0+ZW52WyhiaW5hcnkpICRrZXldID0gKGJpbmFyeSkgJHZhbHVlOwp9CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN0ZGluKCkKewpyZXR1cm4gJHRoaXMtPnN0ZGluOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFN0ZGluKCRzdGRpbikKewokdGhpcy0+c3RkaW4gPSAkc3RkaW47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE9wdGlvbnMoKQp7CnJldHVybiAkdGhpcy0+b3B0aW9uczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb25zKGFycmF5ICRvcHRpb25zKQp7CiR0aGlzLT5vcHRpb25zID0gJG9wdGlvbnM7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RW5oYW5jZVdpbmRvd3NDb21wYXRpYmlsaXR5KCkKewpyZXR1cm4gJHRoaXMtPmVuaGFuY2VXaW5kb3dzQ29tcGF0aWJpbGl0eTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFbmhhbmNlV2luZG93c0NvbXBhdGliaWxpdHkoJGVuaGFuY2UpCnsKJHRoaXMtPmVuaGFuY2VXaW5kb3dzQ29tcGF0aWJpbGl0eSA9IChCb29sZWFuKSAkZW5oYW5jZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RW5oYW5jZVNpZ2NoaWxkQ29tcGF0aWJpbGl0eSgpCnsKcmV0dXJuICR0aGlzLT5lbmhhbmNlU2lnY2hpbGRDb21wYXRpYmlsaXR5Owp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFbmhhbmNlU2lnY2hpbGRDb21wYXRpYmlsaXR5KCRlbmhhbmNlKQp7CiR0aGlzLT5lbmhhbmNlU2lnY2hpbGRDb21wYXRpYmlsaXR5ID0gKEJvb2xlYW4pICRlbmhhbmNlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjaGVja1RpbWVvdXQoKQp7CmlmIChudWxsICE9PSAkdGhpcy0+dGltZW91dCAmJiAkdGhpcy0+dGltZW91dCA8IG1pY3JvdGltZSh0cnVlKSAtICR0aGlzLT5zdGFydHRpbWUpIHsKJHRoaXMtPnN0b3AoMCk7Cgp0aHJvdyBuZXcgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uKCR0aGlzLCBQcm9jZXNzVGltZWRPdXRFeGNlcHRpb246OlRZUEVfR0VORVJBTCk7Cn0KCmlmIChudWxsICE9PSAkdGhpcy0+aWRsZVRpbWVvdXQgJiYgJHRoaXMtPmlkbGVUaW1lb3V0IDwgbWljcm90aW1lKHRydWUpIC0gJHRoaXMtPmxhc3RPdXRwdXRUaW1lKSB7CiR0aGlzLT5zdG9wKDApOwoKdGhyb3cgbmV3IFByb2Nlc3NUaW1lZE91dEV4Y2VwdGlvbigkdGhpcywgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uOjpUWVBFX0lETEUpOwp9Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBnZXREZXNjcmlwdG9ycygpCnsKJHRoaXMtPnByb2Nlc3NQaXBlcyA9IG5ldyBQcm9jZXNzUGlwZXMoJHRoaXMtPnVzZUZpbGVIYW5kbGVzLCAkdGhpcy0+dHR5KTsKJGRlc2NyaXB0b3JzID0gJHRoaXMtPnByb2Nlc3NQaXBlcy0+Z2V0RGVzY3JpcHRvcnMoKTsKCmlmICghJHRoaXMtPnVzZUZpbGVIYW5kbGVzICYmICR0aGlzLT5lbmhhbmNlU2lnY2hpbGRDb21wYXRpYmlsaXR5ICYmICR0aGlzLT5pc1NpZ2NoaWxkRW5hYmxlZCgpKSB7CgogJGRlc2NyaXB0b3JzID0gYXJyYXlfbWVyZ2UoJGRlc2NyaXB0b3JzLCBhcnJheShhcnJheSgncGlwZScsICd3JykpKTsKCiR0aGlzLT5jb21tYW5kbGluZSA9ICcoJy4kdGhpcy0+Y29tbWFuZGxpbmUuJykgMz4vZGV2L251bGw7IGNvZGU9JD87IGVjaG8gJGNvZGUgPiYzOyBleGl0ICRjb2RlJzsKfQoKcmV0dXJuICRkZXNjcmlwdG9yczsKfQoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENhbGxiYWNrKCRjYWxsYmFjaykKewokdGhhdCA9ICR0aGlzOwokb3V0ID0gc2VsZjo6T1VUOwokZXJyID0gc2VsZjo6RVJSOwokY2FsbGJhY2sgPSBmdW5jdGlvbiAoJHR5cGUsICRkYXRhKSB1c2UgKCR0aGF0LCAkY2FsbGJhY2ssICRvdXQsICRlcnIpIHsKaWYgKCRvdXQgPT0gJHR5cGUpIHsKJHRoYXQtPmFkZE91dHB1dCgkZGF0YSk7Cn0gZWxzZSB7CiR0aGF0LT5hZGRFcnJvck91dHB1dCgkZGF0YSk7Cn0KCmlmIChudWxsICE9PSAkY2FsbGJhY2spIHsKY2FsbF91c2VyX2Z1bmMoJGNhbGxiYWNrLCAkdHlwZSwgJGRhdGEpOwp9Cn07CgpyZXR1cm4gJGNhbGxiYWNrOwp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiB1cGRhdGVTdGF0dXMoJGJsb2NraW5nKQp7CmlmIChzZWxmOjpTVEFUVVNfU1RBUlRFRCAhPT0gJHRoaXMtPnN0YXR1cykgewpyZXR1cm47Cn0KCiR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb24gPSBwcm9jX2dldF9zdGF0dXMoJHRoaXMtPnByb2Nlc3MpOwokdGhpcy0+Y2FwdHVyZUV4aXRDb2RlKCk7CgokdGhpcy0+cmVhZFBpcGVzKCRibG9ja2luZywgZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9CVUlMRCcpID8gISR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ3J1bm5pbmcnXSA6IHRydWUpOwoKaWYgKCEkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydydW5uaW5nJ10pIHsKJHRoaXMtPmNsb3NlKCk7CiR0aGlzLT5zdGF0dXMgPSBzZWxmOjpTVEFUVVNfVEVSTUlOQVRFRDsKfQp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBpc1NpZ2NoaWxkRW5hYmxlZCgpCnsKaWYgKG51bGwgIT09IHNlbGY6OiRzaWdjaGlsZCkgewpyZXR1cm4gc2VsZjo6JHNpZ2NoaWxkOwp9CgpvYl9zdGFydCgpOwpwaHBpbmZvKElORk9fR0VORVJBTCk7CgpyZXR1cm4gc2VsZjo6JHNpZ2NoaWxkID0gZmFsc2UgIT09IHN0cnBvcyhvYl9nZXRfY2xlYW4oKSwgJy0tZW5hYmxlLXNpZ2NoaWxkJyk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlVGltZW91dCgkdGltZW91dCkKewokdGltZW91dCA9IChmbG9hdCkgJHRpbWVvdXQ7CgppZiAoMC4wID09PSAkdGltZW91dCkgewokdGltZW91dCA9IG51bGw7Cn0gZWxzZWlmICgkdGltZW91dCA8IDApIHsKdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIHRpbWVvdXQgdmFsdWUgbXVzdCBiZSBhIHZhbGlkIHBvc2l0aXZlIGludGVnZXIgb3IgZmxvYXQgbnVtYmVyLicpOwp9CgpyZXR1cm4gJHRpbWVvdXQ7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZWFkUGlwZXMoJGJsb2NraW5nLCAkY2xvc2UpCnsKaWYgKCRjbG9zZSkgewokcmVzdWx0ID0gJHRoaXMtPnByb2Nlc3NQaXBlcy0+cmVhZEFuZENsb3NlSGFuZGxlcygkYmxvY2tpbmcpOwp9IGVsc2UgewokcmVzdWx0ID0gJHRoaXMtPnByb2Nlc3NQaXBlcy0+cmVhZCgkYmxvY2tpbmcpOwp9Cgpmb3JlYWNoICgkcmVzdWx0IGFzICR0eXBlID0+ICRkYXRhKSB7CmlmICgzID09ICR0eXBlKSB7CiR0aGlzLT5mYWxsYmFja0V4aXRjb2RlID0gKGludCkgJGRhdGE7Cn0gZWxzZSB7CmNhbGxfdXNlcl9mdW5jKCR0aGlzLT5jYWxsYmFjaywgJHR5cGUgPT09IHNlbGY6OlNURE9VVCA/IHNlbGY6Ok9VVCA6IHNlbGY6OkVSUiwgJGRhdGEpOwp9Cn0KfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBjYXB0dXJlRXhpdENvZGUoKQp7CmlmIChpc3NldCgkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddKSAmJiAtMSAhPSAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydleGl0Y29kZSddKSB7CiR0aGlzLT5leGl0Y29kZSA9ICR0aGlzLT5wcm9jZXNzSW5mb3JtYXRpb25bJ2V4aXRjb2RlJ107Cn0KfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGNsb3NlKCkKewokZXhpdGNvZGUgPSAtMTsKCiR0aGlzLT5wcm9jZXNzUGlwZXMtPmNsb3NlKCk7CmlmIChpc19yZXNvdXJjZSgkdGhpcy0+cHJvY2VzcykpIHsKJGV4aXRjb2RlID0gcHJvY19jbG9zZSgkdGhpcy0+cHJvY2Vzcyk7Cn0KCiR0aGlzLT5leGl0Y29kZSA9ICR0aGlzLT5leGl0Y29kZSAhPT0gbnVsbCA/ICR0aGlzLT5leGl0Y29kZSA6IC0xOwokdGhpcy0+ZXhpdGNvZGUgPSAtMSAhPSAkZXhpdGNvZGUgPyAkZXhpdGNvZGUgOiAkdGhpcy0+ZXhpdGNvZGU7CgppZiAoLTEgPT0gJHRoaXMtPmV4aXRjb2RlICYmIG51bGwgIT09ICR0aGlzLT5mYWxsYmFja0V4aXRjb2RlKSB7CiR0aGlzLT5leGl0Y29kZSA9ICR0aGlzLT5mYWxsYmFja0V4aXRjb2RlOwp9IGVsc2VpZiAoLTEgPT09ICR0aGlzLT5leGl0Y29kZSAmJiAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWydzaWduYWxlZCddICYmIDAgPCAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ10pIHsKCiAkdGhpcy0+ZXhpdGNvZGUgPSAxMjggKyAkdGhpcy0+cHJvY2Vzc0luZm9ybWF0aW9uWyd0ZXJtc2lnJ107Cn0KCnJldHVybiAkdGhpcy0+ZXhpdGNvZGU7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVzZXRQcm9jZXNzRGF0YSgpCnsKJHRoaXMtPnN0YXJ0dGltZSA9IG51bGw7CiR0aGlzLT5jYWxsYmFjayA9IG51bGw7CiR0aGlzLT5leGl0Y29kZSA9IG51bGw7CiR0aGlzLT5mYWxsYmFja0V4aXRjb2RlID0gbnVsbDsKJHRoaXMtPnByb2Nlc3NJbmZvcm1hdGlvbiA9IG51bGw7CiR0aGlzLT5zdGRvdXQgPSBudWxsOwokdGhpcy0+c3RkZXJyID0gbnVsbDsKJHRoaXMtPnByb2Nlc3MgPSBudWxsOwokdGhpcy0+c3RhdHVzID0gc2VsZjo6U1RBVFVTX1JFQURZOwokdGhpcy0+aW5jcmVtZW50YWxPdXRwdXRPZmZzZXQgPSAwOwokdGhpcy0+aW5jcmVtZW50YWxFcnJvck91dHB1dE9mZnNldCA9IDA7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3M7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb25cUnVudGltZUV4Y2VwdGlvbjsKCgoKCmNsYXNzIFByb2Nlc3NQaXBlcwp7CgpwdWJsaWMgJHBpcGVzID0gYXJyYXkoKTsKCnByaXZhdGUgJGZpbGVIYW5kbGVzID0gYXJyYXkoKTsKCnByaXZhdGUgJHJlYWRCeXRlcyA9IGFycmF5KCk7Cgpwcml2YXRlICR1c2VGaWxlczsKCnByaXZhdGUgJHR0eU1vZGU7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHVzZUZpbGVzLCAkdHR5TW9kZSkKewokdGhpcy0+dXNlRmlsZXMgPSAoQm9vbGVhbikgJHVzZUZpbGVzOwokdGhpcy0+dHR5TW9kZSA9IChCb29sZWFuKSAkdHR5TW9kZTsKCgogCiAKIAogCiAKIAogCiBpZiAoJHRoaXMtPnVzZUZpbGVzKSB7CiR0aGlzLT5maWxlSGFuZGxlcyA9IGFycmF5KApQcm9jZXNzOjpTVERPVVQgPT4gdG1wZmlsZSgpLAopOwppZiAoZmFsc2UgPT09ICR0aGlzLT5maWxlSGFuZGxlc1tQcm9jZXNzOjpTVERPVVRdKSB7CnRocm93IG5ldyBSdW50aW1lRXhjZXB0aW9uKCdBIHRlbXBvcmFyeSBmaWxlIGNvdWxkIG5vdCBiZSBvcGVuZWQgdG8gd3JpdGUgdGhlIHByb2Nlc3Mgb3V0cHV0IHRvLCB2ZXJpZnkgdGhhdCB5b3VyIFRFTVAgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgd3JpdGFibGUnKTsKfQokdGhpcy0+cmVhZEJ5dGVzID0gYXJyYXkoClByb2Nlc3M6OlNURE9VVCA9PiAwLAopOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBfX2Rlc3RydWN0KCkKewokdGhpcy0+Y2xvc2UoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHVuYmxvY2soKQp7CmZvcmVhY2ggKCR0aGlzLT5waXBlcyBhcyAkcGlwZSkgewpzdHJlYW1fc2V0X2Jsb2NraW5nKCRwaXBlLCAwKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gY2xvc2UoKQp7CiR0aGlzLT5jbG9zZVVuaXhQaXBlcygpOwpmb3JlYWNoICgkdGhpcy0+ZmlsZUhhbmRsZXMgYXMgJG9mZnNldCA9PiAkaGFuZGxlKSB7CmZjbG9zZSgkaGFuZGxlKTsKfQokdGhpcy0+ZmlsZUhhbmRsZXMgPSBhcnJheSgpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjbG9zZVVuaXhQaXBlcygpCnsKZm9yZWFjaCAoJHRoaXMtPnBpcGVzIGFzICRwaXBlKSB7CmZjbG9zZSgkcGlwZSk7Cn0KJHRoaXMtPnBpcGVzID0gYXJyYXkoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGVzY3JpcHRvcnMoKQp7CmlmICgkdGhpcy0+dXNlRmlsZXMpIHsKcmV0dXJuIGFycmF5KAphcnJheSgncGlwZScsICdyJyksCiR0aGlzLT5maWxlSGFuZGxlc1tQcm9jZXNzOjpTVERPVVRdLAoKIGFycmF5KCdwaXBlJywgJ3cnKSwKKTsKfQoKaWYgKCR0aGlzLT50dHlNb2RlKSB7CnJldHVybiBhcnJheSgKYXJyYXkoJ2ZpbGUnLCAnL2Rldi90dHknLCAncicpLAphcnJheSgnZmlsZScsICcvZGV2L3R0eScsICd3JyksCmFycmF5KCdmaWxlJywgJy9kZXYvdHR5JywgJ3cnKSwKKTsKfQoKcmV0dXJuIGFycmF5KAphcnJheSgncGlwZScsICdyJyksIAogYXJyYXkoJ3BpcGUnLCAndycpLCAKIGFycmF5KCdwaXBlJywgJ3cnKSwgCiApOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlYWQoJGJsb2NraW5nKQp7CnJldHVybiBhcnJheV9yZXBsYWNlKCR0aGlzLT5yZWFkU3RyZWFtcygkYmxvY2tpbmcpLCAkdGhpcy0+cmVhZEZpbGVIYW5kbGVzKCkpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlYWRBbmRDbG9zZUhhbmRsZXMoJGJsb2NraW5nKQp7CnJldHVybiBhcnJheV9yZXBsYWNlKCR0aGlzLT5yZWFkU3RyZWFtcygkYmxvY2tpbmcsIHRydWUpLCAkdGhpcy0+cmVhZEZpbGVIYW5kbGVzKHRydWUpKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzT3BlbkhhbmRsZXMoKQp7CmlmICghJHRoaXMtPnVzZUZpbGVzKSB7CnJldHVybiAoQm9vbGVhbikgJHRoaXMtPnBpcGVzOwp9CgpyZXR1cm4gKEJvb2xlYW4pICR0aGlzLT5waXBlcyAmJiAoQm9vbGVhbikgJHRoaXMtPmZpbGVIYW5kbGVzOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gd3JpdGUoJGJsb2NraW5nLCAkc3RkaW4pCnsKaWYgKG51bGwgPT09ICRzdGRpbikgewpmY2xvc2UoJHRoaXMtPnBpcGVzWzBdKTsKdW5zZXQoJHRoaXMtPnBpcGVzWzBdKTsKCnJldHVybjsKfQoKJHdyaXRlUGlwZXMgPSBhcnJheSgkdGhpcy0+cGlwZXNbMF0pOwp1bnNldCgkdGhpcy0+cGlwZXNbMF0pOwokc3RkaW5MZW4gPSBzdHJsZW4oJHN0ZGluKTsKJHN0ZGluT2Zmc2V0ID0gMDsKCndoaWxlICgkd3JpdGVQaXBlcykgewokciA9IG51bGw7CiR3ID0gJHdyaXRlUGlwZXM7CiRlID0gbnVsbDsKCmlmIChmYWxzZSA9PT0gJG4gPSBAc3RyZWFtX3NlbGVjdCgkciwgJHcsICRlLCAwLCAkYmxvY2tpbmcgPyBjZWlsKFByb2Nlc3M6OlRJTUVPVVRfUFJFQ0lTSU9OICogMUU2KSA6IDApKSB7CgogaWYgKCR0aGlzLT5oYXNTeXN0ZW1DYWxsQmVlbkludGVycnVwdGVkKCkpIHsKY29udGludWU7Cn0KYnJlYWs7Cn0KCgogaWYgKDAgPT09ICRuKSB7CmNvbnRpbnVlOwp9CgppZiAoJHcpIHsKJHdyaXR0ZW4gPSBmd3JpdGUoJHdyaXRlUGlwZXNbMF0sIChiaW5hcnkpIHN1YnN0cigkc3RkaW4sICRzdGRpbk9mZnNldCksIDgxOTIpOwppZiAoZmFsc2UgIT09ICR3cml0dGVuKSB7CiRzdGRpbk9mZnNldCArPSAkd3JpdHRlbjsKfQppZiAoJHN0ZGluT2Zmc2V0ID49ICRzdGRpbkxlbikgewpmY2xvc2UoJHdyaXRlUGlwZXNbMF0pOwokd3JpdGVQaXBlcyA9IG51bGw7Cn0KfQp9Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZWFkRmlsZUhhbmRsZXMoJGNsb3NlID0gZmFsc2UpCnsKJHJlYWQgPSBhcnJheSgpOwokZmggPSAkdGhpcy0+ZmlsZUhhbmRsZXM7CmZvcmVhY2ggKCRmaCBhcyAkdHlwZSA9PiAkZmlsZUhhbmRsZSkgewppZiAoMCAhPT0gZnNlZWsoJGZpbGVIYW5kbGUsICR0aGlzLT5yZWFkQnl0ZXNbJHR5cGVdKSkgewpjb250aW51ZTsKfQokZGF0YSA9ICcnOwokZGF0YXJlYWQgPSBudWxsOwp3aGlsZSAoIWZlb2YoJGZpbGVIYW5kbGUpKSB7CmlmIChmYWxzZSAhPT0gJGRhdGFyZWFkID0gZnJlYWQoJGZpbGVIYW5kbGUsIDE2MzkyKSkgewokZGF0YSAuPSAkZGF0YXJlYWQ7Cn0KfQppZiAoMCA8ICRsZW5ndGggPSBzdHJsZW4oJGRhdGEpKSB7CiR0aGlzLT5yZWFkQnl0ZXNbJHR5cGVdICs9ICRsZW5ndGg7CiRyZWFkWyR0eXBlXSA9ICRkYXRhOwp9CgppZiAoZmFsc2UgPT09ICRkYXRhcmVhZCB8fCAodHJ1ZSA9PT0gJGNsb3NlICYmIGZlb2YoJGZpbGVIYW5kbGUpICYmICcnID09PSAkZGF0YSkpIHsKZmNsb3NlKCR0aGlzLT5maWxlSGFuZGxlc1skdHlwZV0pOwp1bnNldCgkdGhpcy0+ZmlsZUhhbmRsZXNbJHR5cGVdKTsKfQp9CgpyZXR1cm4gJHJlYWQ7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHJlYWRTdHJlYW1zKCRibG9ja2luZywgJGNsb3NlID0gZmFsc2UpCnsKaWYgKGVtcHR5KCR0aGlzLT5waXBlcykpIHsKcmV0dXJuIGFycmF5KCk7Cn0KCiRyZWFkID0gYXJyYXkoKTsKCiRyID0gJHRoaXMtPnBpcGVzOwokdyA9IG51bGw7CiRlID0gbnVsbDsKCgogaWYgKGZhbHNlID09PSAkbiA9IEBzdHJlYW1fc2VsZWN0KCRyLCAkdywgJGUsIDAsICRibG9ja2luZyA/IGNlaWwoUHJvY2Vzczo6VElNRU9VVF9QUkVDSVNJT04gKiAxRTYpIDogMCkpIHsKCiAKIGlmICghJHRoaXMtPmhhc1N5c3RlbUNhbGxCZWVuSW50ZXJydXB0ZWQoKSkgewokdGhpcy0+cGlwZXMgPSBhcnJheSgpOwp9CgpyZXR1cm4gJHJlYWQ7Cn0KCgogaWYgKDAgPT09ICRuKSB7CnJldHVybiAkcmVhZDsKfQoKZm9yZWFjaCAoJHIgYXMgJHBpcGUpIHsKJHR5cGUgPSBhcnJheV9zZWFyY2goJHBpcGUsICR0aGlzLT5waXBlcyk7CiRkYXRhID0gZnJlYWQoJHBpcGUsIDgxOTIpOwoKaWYgKHN0cmxlbigkZGF0YSkgPiAwKSB7CiRyZWFkWyR0eXBlXSA9ICRkYXRhOwp9CgppZiAoZmFsc2UgPT09ICRkYXRhIHx8ICh0cnVlID09PSAkY2xvc2UgJiYgZmVvZigkcGlwZSkgJiYgJycgPT09ICRkYXRhKSkgewpmY2xvc2UoJHRoaXMtPnBpcGVzWyR0eXBlXSk7CnVuc2V0KCR0aGlzLT5waXBlc1skdHlwZV0pOwp9Cn0KCnJldHVybiAkcmVhZDsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGhhc1N5c3RlbUNhbGxCZWVuSW50ZXJydXB0ZWQoKQp7CiRsYXN0RXJyb3IgPSBlcnJvcl9nZXRfbGFzdCgpOwoKCiByZXR1cm4gaXNzZXQoJGxhc3RFcnJvclsnbWVzc2FnZSddKSAmJiBmYWxzZSAhPT0gc3RyaXBvcygkbGFzdEVycm9yWydtZXNzYWdlJ10sICdpbnRlcnJ1cHRlZCBzeXN0ZW0gY2FsbCcpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uXExvZ2ljRXhjZXB0aW9uOwoKCgoKCgpjbGFzcyBQcm9jZXNzQnVpbGRlcgp7CnByaXZhdGUgJGFyZ3VtZW50czsKcHJpdmF0ZSAkY3dkOwpwcml2YXRlICRlbnYgPSBhcnJheSgpOwpwcml2YXRlICRzdGRpbjsKcHJpdmF0ZSAkdGltZW91dCA9IDYwOwpwcml2YXRlICRvcHRpb25zID0gYXJyYXkoKTsKcHJpdmF0ZSAkaW5oZXJpdEVudiA9IHRydWU7CnByaXZhdGUgJHByZWZpeCA9IGFycmF5KCk7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGFyZ3VtZW50cyA9IGFycmF5KCkpCnsKJHRoaXMtPmFyZ3VtZW50cyA9ICRhcmd1bWVudHM7Cn0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKGFycmF5ICRhcmd1bWVudHMgPSBhcnJheSgpKQp7CnJldHVybiBuZXcgc3RhdGljKCRhcmd1bWVudHMpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZCgkYXJndW1lbnQpCnsKJHRoaXMtPmFyZ3VtZW50c1tdID0gJGFyZ3VtZW50OwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UHJlZml4KCRwcmVmaXgpCnsKJHRoaXMtPnByZWZpeCA9IGlzX2FycmF5KCRwcmVmaXgpID8gJHByZWZpeCA6IGFycmF5KCRwcmVmaXgpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudHMoYXJyYXkgJGFyZ3VtZW50cykKewokdGhpcy0+YXJndW1lbnRzID0gJGFyZ3VtZW50czsKCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIHNldFdvcmtpbmdEaXJlY3RvcnkoJGN3ZCkKewokdGhpcy0+Y3dkID0gJGN3ZDsKCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIGluaGVyaXRFbnZpcm9ubWVudFZhcmlhYmxlcygkaW5oZXJpdEVudiA9IHRydWUpCnsKJHRoaXMtPmluaGVyaXRFbnYgPSAkaW5oZXJpdEVudjsKCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIHNldEVudigkbmFtZSwgJHZhbHVlKQp7CiR0aGlzLT5lbnZbJG5hbWVdID0gJHZhbHVlOwoKcmV0dXJuICR0aGlzOwp9CgpwdWJsaWMgZnVuY3Rpb24gYWRkRW52aXJvbm1lbnRWYXJpYWJsZXMoYXJyYXkgJHZhcmlhYmxlcykKewokdGhpcy0+ZW52ID0gYXJyYXlfcmVwbGFjZSgkdGhpcy0+ZW52LCAkdmFyaWFibGVzKTsKCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIHNldElucHV0KCRzdGRpbikKewokdGhpcy0+c3RkaW4gPSAkc3RkaW47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFRpbWVvdXQoJHRpbWVvdXQpCnsKaWYgKG51bGwgPT09ICR0aW1lb3V0KSB7CiR0aGlzLT50aW1lb3V0ID0gbnVsbDsKCnJldHVybiAkdGhpczsKfQoKJHRpbWVvdXQgPSAoZmxvYXQpICR0aW1lb3V0OwoKaWYgKCR0aW1lb3V0IDwgMCkgewp0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgdGltZW91dCB2YWx1ZSBtdXN0IGJlIGEgdmFsaWQgcG9zaXRpdmUgaW50ZWdlciBvciBmbG9hdCBudW1iZXIuJyk7Cn0KCiR0aGlzLT50aW1lb3V0ID0gJHRpbWVvdXQ7CgpyZXR1cm4gJHRoaXM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb24oJG5hbWUsICR2YWx1ZSkKewokdGhpcy0+b3B0aW9uc1skbmFtZV0gPSAkdmFsdWU7CgpyZXR1cm4gJHRoaXM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcm9jZXNzKCkKewppZiAoMCA9PT0gY291bnQoJHRoaXMtPnByZWZpeCkgJiYgMCA9PT0gY291bnQoJHRoaXMtPmFyZ3VtZW50cykpIHsKdGhyb3cgbmV3IExvZ2ljRXhjZXB0aW9uKCdZb3UgbXVzdCBhZGQoKSBjb21tYW5kIGFyZ3VtZW50cyBiZWZvcmUgY2FsbGluZyBnZXRQcm9jZXNzKCkuJyk7Cn0KCiRvcHRpb25zID0gJHRoaXMtPm9wdGlvbnM7CgokYXJndW1lbnRzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPnByZWZpeCwgJHRoaXMtPmFyZ3VtZW50cyk7CiRzY3JpcHQgPSBpbXBsb2RlKCcgJywgYXJyYXlfbWFwKGFycmF5KF9fTkFNRVNQQUNFX18uJ1xcUHJvY2Vzc1V0aWxzJywgJ2VzY2FwZUFyZ3VtZW50JyksICRhcmd1bWVudHMpKTsKCmlmICgkdGhpcy0+aW5oZXJpdEVudikgewoKICRlbnYgPSBhcnJheV9yZXBsYWNlKCRfRU5WLCAkX1NFUlZFUiwgJHRoaXMtPmVudik7Cn0gZWxzZSB7CiRlbnYgPSAkdGhpcy0+ZW52Owp9CgpyZXR1cm4gbmV3IFByb2Nlc3MoJHNjcmlwdCwgJHRoaXMtPmN3ZCwgJGVudiwgJHRoaXMtPnN0ZGluLCAkdGhpcy0+dGltZW91dCwgJG9wdGlvbnMpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKCgoKCgoKCmNsYXNzIFByb2Nlc3NVdGlscwp7CgoKCnByaXZhdGUgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQp7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVzY2FwZUFyZ3VtZW50KCRhcmd1bWVudCkKewoKIAogCiAKIGlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKaWYgKCcnID09PSAkYXJndW1lbnQpIHsKcmV0dXJuIGVzY2FwZXNoZWxsYXJnKCRhcmd1bWVudCk7Cn0KCiRlc2NhcGVkQXJndW1lbnQgPSAnJzsKZm9yZWFjaCAocHJlZ19zcGxpdCgnLyhbJSJdKS9pJywgJGFyZ3VtZW50LCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSB8IFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSkgYXMgJHBhcnQpIHsKaWYgKCciJyA9PT0gJHBhcnQpIHsKJGVzY2FwZWRBcmd1bWVudCAuPSAnXFwiJzsKfSBlbHNlaWYgKCclJyA9PT0gJHBhcnQpIHsKJGVzY2FwZWRBcmd1bWVudCAuPSAnXiUnOwp9IGVsc2UgewokZXNjYXBlZEFyZ3VtZW50IC49IGVzY2FwZXNoZWxsYXJnKCRwYXJ0KTsKfQp9CgpyZXR1cm4gJGVzY2FwZWRBcmd1bWVudDsKfQoKcmV0dXJuIGVzY2FwZXNoZWxsYXJnKCRhcmd1bWVudCk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcRXhjZXB0aW9uOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2VzczsKCgoKCgoKY2xhc3MgUHJvY2Vzc1RpbWVkT3V0RXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7CmNvbnN0IFRZUEVfR0VORVJBTCA9IDE7CmNvbnN0IFRZUEVfSURMRSA9IDI7Cgpwcml2YXRlICRwcm9jZXNzOwpwcml2YXRlICR0aW1lb3V0VHlwZTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChQcm9jZXNzICRwcm9jZXNzLCAkdGltZW91dFR5cGUpCnsKJHRoaXMtPnByb2Nlc3MgPSAkcHJvY2VzczsKJHRoaXMtPnRpbWVvdXRUeXBlID0gJHRpbWVvdXRUeXBlOwoKcGFyZW50OjpfX2NvbnN0cnVjdChzcHJpbnRmKAonVGhlIHByb2Nlc3MgIiVzIiBleGNlZWRlZCB0aGUgdGltZW91dCBvZiAlcyBzZWNvbmRzLicsCiRwcm9jZXNzLT5nZXRDb21tYW5kTGluZSgpLAokdGhpcy0+Z2V0RXhjZWVkZWRUaW1lb3V0KCkKKSk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcm9jZXNzKCkKewpyZXR1cm4gJHRoaXMtPnByb2Nlc3M7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0dlbmVyYWxUaW1lb3V0KCkKewpyZXR1cm4gJHRoaXMtPnRpbWVvdXRUeXBlID09PSBzZWxmOjpUWVBFX0dFTkVSQUw7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc0lkbGVUaW1lb3V0KCkKewpyZXR1cm4gJHRoaXMtPnRpbWVvdXRUeXBlID09PSBzZWxmOjpUWVBFX0lETEU7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRFeGNlZWRlZFRpbWVvdXQoKQp7CnN3aXRjaCAoJHRoaXMtPnRpbWVvdXRUeXBlKSB7CmNhc2Ugc2VsZjo6VFlQRV9HRU5FUkFMOgpyZXR1cm4gJHRoaXMtPnByb2Nlc3MtPmdldFRpbWVvdXQoKTsKCmNhc2Ugc2VsZjo6VFlQRV9JRExFOgpyZXR1cm4gJHRoaXMtPnByb2Nlc3MtPmdldElkbGVUaW1lb3V0KCk7CgpkZWZhdWx0Ogp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ1Vua25vd24gdGltZW91dCB0eXBlICIlZCIuJywgJHRoaXMtPnRpbWVvdXRUeXBlKSk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb247CgoKCgoKCmludGVyZmFjZSBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb247CgoKCgoKCmNsYXNzIFJ1bnRpbWVFeGNlcHRpb24gZXh0ZW5kcyBcUnVudGltZUV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCgoKCgoKY2xhc3MgTG9naWNFeGNlcHRpb24gZXh0ZW5kcyBcTG9naWNFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xFeGNlcHRpb247Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcUHJvY2Vzc1xQcm9jZXNzOwoKCgoKCgpjbGFzcyBQcm9jZXNzRmFpbGVkRXhjZXB0aW9uIGV4dGVuZHMgUnVudGltZUV4Y2VwdGlvbgp7CnByaXZhdGUgJHByb2Nlc3M7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoUHJvY2VzcyAkcHJvY2VzcykKewppZiAoJHByb2Nlc3MtPmlzU3VjY2Vzc2Z1bCgpKSB7CnRocm93IG5ldyBJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0V4cGVjdGVkIGEgZmFpbGVkIHByb2Nlc3MsIGJ1dCB0aGUgZ2l2ZW4gcHJvY2VzcyB3YXMgc3VjY2Vzc2Z1bC4nKTsKfQoKcGFyZW50OjpfX2NvbnN0cnVjdCgKc3ByaW50ZigKJ1RoZSBjb21tYW5kICIlcyIgZmFpbGVkLicuIlxuRXhpdCBDb2RlOiAlcyglcylcblxuT3V0cHV0OlxuPT09PT09PT09PT09PT09PVxuJXNcblxuRXJyb3IgT3V0cHV0OlxuPT09PT09PT09PT09PT09PVxuJXMiLAokcHJvY2Vzcy0+Z2V0Q29tbWFuZExpbmUoKSwKJHByb2Nlc3MtPmdldEV4aXRDb2RlKCksCiRwcm9jZXNzLT5nZXRFeGl0Q29kZVRleHQoKSwKJHByb2Nlc3MtPmdldE91dHB1dCgpLAokcHJvY2Vzcy0+Z2V0RXJyb3JPdXRwdXQoKQopCik7CgokdGhpcy0+cHJvY2VzcyA9ICRwcm9jZXNzOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvY2VzcygpCnsKcmV0dXJuICR0aGlzLT5wcm9jZXNzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXEV4Y2VwdGlvbjsKCgoKCgoKY2xhc3MgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uIGV4dGVuZHMgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBpbXBsZW1lbnRzIEV4Y2VwdGlvbkludGVyZmFjZQp7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzOwoKCgoKCgoKY2xhc3MgUGhwRXhlY3V0YWJsZUZpbmRlcgp7CnByaXZhdGUgJGV4ZWN1dGFibGVGaW5kZXI7CgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQp7CiR0aGlzLT5leGVjdXRhYmxlRmluZGVyID0gbmV3IEV4ZWN1dGFibGVGaW5kZXIoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluZCgpCnsKCiBpZiAoZGVmaW5lZCgnSEhWTV9WRVJTSU9OJykgJiYgZmFsc2UgIT09ICRoaHZtID0gZ2V0ZW52KCdQSFBfQklOQVJZJykpIHsKcmV0dXJuICRoaHZtOwp9CgoKIGlmIChkZWZpbmVkKCdQSFBfQklOQVJZJykgJiYgUEhQX0JJTkFSWSAmJiBpbl9hcnJheShQSFBfU0FQSSwgYXJyYXkoJ2NsaScsICdjbGktc2VydmVyJykpICYmIGlzX2ZpbGUoUEhQX0JJTkFSWSkpIHsKcmV0dXJuIFBIUF9CSU5BUlk7Cn0KCmlmICgkcGhwID0gZ2V0ZW52KCdQSFBfUEFUSCcpKSB7CmlmICghaXNfZXhlY3V0YWJsZSgkcGhwKSkgewpyZXR1cm4gZmFsc2U7Cn0KCnJldHVybiAkcGhwOwp9CgppZiAoJHBocCA9IGdldGVudignUEhQX1BFQVJfUEhQX0JJTicpKSB7CmlmIChpc19leGVjdXRhYmxlKCRwaHApKSB7CnJldHVybiAkcGhwOwp9Cn0KCiRkaXJzID0gYXJyYXkoUEhQX0JJTkRJUik7CmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKJGRpcnNbXSA9ICdDOlx4YW1wcFxwaHBcXCc7Cn0KCnJldHVybiAkdGhpcy0+ZXhlY3V0YWJsZUZpbmRlci0+ZmluZCgncGhwJywgZmFsc2UsICRkaXJzKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcWWFtbDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxZYW1sXEV4Y2VwdGlvblxQYXJzZUV4Y2VwdGlvbjsKCgoKCgoKY2xhc3MgUGFyc2VyCnsKY29uc3QgRk9MREVEX1NDQUxBUl9QQVRURVJOID0gJyg/UDxzZXBhcmF0b3I+XHx8PikoP1A8bW9kaWZpZXJzPlwrfFwtfFxkK3xcK1xkK3xcLVxkK3xcZCtcK3xcZCtcLSk/KD9QPGNvbW1lbnRzPiArIy4qKT8nOwoKcHJpdmF0ZSAkb2Zmc2V0ID0gMDsKcHJpdmF0ZSAkbGluZXMgPSBhcnJheSgpOwpwcml2YXRlICRjdXJyZW50TGluZU5iID0gLTE7CnByaXZhdGUgJGN1cnJlbnRMaW5lID0gJyc7CnByaXZhdGUgJHJlZnMgPSBhcnJheSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9mZnNldCA9IDApCnsKJHRoaXMtPm9mZnNldCA9ICRvZmZzZXQ7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlKCR2YWx1ZSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgJG9iamVjdFN1cHBvcnQgPSBmYWxzZSkKewokdGhpcy0+Y3VycmVudExpbmVOYiA9IC0xOwokdGhpcy0+Y3VycmVudExpbmUgPSAnJzsKJHRoaXMtPmxpbmVzID0gZXhwbG9kZSgiXG4iLCAkdGhpcy0+Y2xlYW51cCgkdmFsdWUpKTsKCmlmIChmdW5jdGlvbl9leGlzdHMoJ21iX2RldGVjdF9lbmNvZGluZycpICYmIGZhbHNlID09PSBtYl9kZXRlY3RfZW5jb2RpbmcoJHZhbHVlLCAnVVRGLTgnLCB0cnVlKSkgewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oJ1RoZSBZQU1MIHZhbHVlIGRvZXMgbm90IGFwcGVhciB0byBiZSB2YWxpZCBVVEYtOC4nKTsKfQoKaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfaW50ZXJuYWxfZW5jb2RpbmcnKSAmJiAoKGludCkgaW5pX2dldCgnbWJzdHJpbmcuZnVuY19vdmVybG9hZCcpKSAmIDIpIHsKJG1iRW5jb2RpbmcgPSBtYl9pbnRlcm5hbF9lbmNvZGluZygpOwptYl9pbnRlcm5hbF9lbmNvZGluZygnVVRGLTgnKTsKfQoKJGRhdGEgPSBhcnJheSgpOwokY29udGV4dCA9IG51bGw7CndoaWxlICgkdGhpcy0+bW92ZVRvTmV4dExpbmUoKSkgewppZiAoJHRoaXMtPmlzQ3VycmVudExpbmVFbXB0eSgpKSB7CmNvbnRpbnVlOwp9CgoKIGlmICgiXHQiID09PSAkdGhpcy0+Y3VycmVudExpbmVbMF0pIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCdBIFlBTUwgZmlsZSBjYW5ub3QgY29udGFpbiB0YWJzIGFzIGluZGVudGF0aW9uLicsICR0aGlzLT5nZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSwgJHRoaXMtPmN1cnJlbnRMaW5lKTsKfQoKJGlzUmVmID0gJGlzSW5QbGFjZSA9ICRpc1Byb2Nlc3NlZCA9IGZhbHNlOwppZiAocHJlZ19tYXRjaCgnI15cLSgoP1A8bGVhZHNwYWNlcz5ccyspKD9QPHZhbHVlPi4rPykpP1xzKiQjdScsICR0aGlzLT5jdXJyZW50TGluZSwgJHZhbHVlcykpIHsKaWYgKCRjb250ZXh0ICYmICdtYXBwaW5nJyA9PSAkY29udGV4dCkgewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oJ1lvdSBjYW5ub3QgZGVmaW5lIGEgc2VxdWVuY2UgaXRlbSB3aGVuIGluIGEgbWFwcGluZycpOwp9CiRjb250ZXh0ID0gJ3NlcXVlbmNlJzsKCmlmIChpc3NldCgkdmFsdWVzWyd2YWx1ZSddKSAmJiBwcmVnX21hdGNoKCcjXiYoP1A8cmVmPlteIF0rKSAqKD9QPHZhbHVlPi4qKSN1JywgJHZhbHVlc1sndmFsdWUnXSwgJG1hdGNoZXMpKSB7CiRpc1JlZiA9ICRtYXRjaGVzWydyZWYnXTsKJHZhbHVlc1sndmFsdWUnXSA9ICRtYXRjaGVzWyd2YWx1ZSddOwp9CgoKIGlmICghaXNzZXQoJHZhbHVlc1sndmFsdWUnXSkgfHwgJycgPT0gdHJpbSgkdmFsdWVzWyd2YWx1ZSddLCAnICcpIHx8IDAgPT09IHN0cnBvcyhsdHJpbSgkdmFsdWVzWyd2YWx1ZSddLCAnICcpLCAnIycpKSB7CiRjID0gJHRoaXMtPmdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxOwokcGFyc2VyID0gbmV3IFBhcnNlcigkYyk7CiRwYXJzZXItPnJlZnMgPSYgJHRoaXMtPnJlZnM7CiRkYXRhW10gPSAkcGFyc2VyLT5wYXJzZSgkdGhpcy0+Z2V0TmV4dEVtYmVkQmxvY2soKSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfSBlbHNlIHsKaWYgKGlzc2V0KCR2YWx1ZXNbJ2xlYWRzcGFjZXMnXSkKJiYgJyAnID09ICR2YWx1ZXNbJ2xlYWRzcGFjZXMnXQomJiBwcmVnX21hdGNoKCcjXig/UDxrZXk+Jy5JbmxpbmU6OlJFR0VYX1FVT1RFRF9TVFJJTkcuJ3xbXiBcJyJce1xbXS4qPykgKlw6KFxzKyg/UDx2YWx1ZT4uKz8pKT9ccyokI3UnLCAkdmFsdWVzWyd2YWx1ZSddLCAkbWF0Y2hlcykKKSB7CgogJGMgPSAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKTsKJHBhcnNlciA9IG5ldyBQYXJzZXIoJGMpOwokcGFyc2VyLT5yZWZzID0mICR0aGlzLT5yZWZzOwoKJGJsb2NrID0gJHZhbHVlc1sndmFsdWUnXTsKaWYgKCR0aGlzLT5pc05leHRMaW5lSW5kZW50ZWQoKSkgewokYmxvY2sgLj0gIlxuIi4kdGhpcy0+Z2V0TmV4dEVtYmVkQmxvY2soJHRoaXMtPmdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKSArIDIpOwp9CgokZGF0YVtdID0gJHBhcnNlci0+cGFyc2UoJGJsb2NrLCAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgJG9iamVjdFN1cHBvcnQpOwp9IGVsc2UgewokZGF0YVtdID0gJHRoaXMtPnBhcnNlVmFsdWUoJHZhbHVlc1sndmFsdWUnXSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfQp9Cn0gZWxzZWlmIChwcmVnX21hdGNoKCcjXig/UDxrZXk+Jy5JbmxpbmU6OlJFR0VYX1FVT1RFRF9TVFJJTkcuJ3xbXiBcJyJcW1x7XS4qPykgKlw6KFxzKyg/UDx2YWx1ZT4uKz8pKT9ccyokI3UnLCAkdGhpcy0+Y3VycmVudExpbmUsICR2YWx1ZXMpICYmIGZhbHNlID09PSBzdHJwb3MoJHZhbHVlc1sna2V5J10sJyAjJykpIHsKaWYgKCRjb250ZXh0ICYmICdzZXF1ZW5jZScgPT0gJGNvbnRleHQpIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCdZb3UgY2Fubm90IGRlZmluZSBhIG1hcHBpbmcgaXRlbSB3aGVuIGluIGEgc2VxdWVuY2UnKTsKfQokY29udGV4dCA9ICdtYXBwaW5nJzsKCgogSW5saW5lOjpwYXJzZShudWxsLCAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgJG9iamVjdFN1cHBvcnQpOwp0cnkgewoka2V5ID0gSW5saW5lOjpwYXJzZVNjYWxhcigkdmFsdWVzWydrZXknXSk7Cn0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uICRlKSB7CiRlLT5zZXRQYXJzZWRMaW5lKCR0aGlzLT5nZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSk7CiRlLT5zZXRTbmlwcGV0KCR0aGlzLT5jdXJyZW50TGluZSk7Cgp0aHJvdyAkZTsKfQoKaWYgKCc8PCcgPT09ICRrZXkpIHsKaWYgKGlzc2V0KCR2YWx1ZXNbJ3ZhbHVlJ10pICYmIDAgPT09IHN0cnBvcygkdmFsdWVzWyd2YWx1ZSddLCAnKicpKSB7CiRpc0luUGxhY2UgPSBzdWJzdHIoJHZhbHVlc1sndmFsdWUnXSwgMSk7CmlmICghYXJyYXlfa2V5X2V4aXN0cygkaXNJblBsYWNlLCAkdGhpcy0+cmVmcykpIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKHNwcmludGYoJ1JlZmVyZW5jZSAiJXMiIGRvZXMgbm90IGV4aXN0LicsICRpc0luUGxhY2UpLCAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsICR0aGlzLT5jdXJyZW50TGluZSk7Cn0KfSBlbHNlIHsKaWYgKGlzc2V0KCR2YWx1ZXNbJ3ZhbHVlJ10pICYmICR2YWx1ZXNbJ3ZhbHVlJ10gIT09ICcnKSB7CiR2YWx1ZSA9ICR2YWx1ZXNbJ3ZhbHVlJ107Cn0gZWxzZSB7CiR2YWx1ZSA9ICR0aGlzLT5nZXROZXh0RW1iZWRCbG9jaygpOwp9CiRjID0gJHRoaXMtPmdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxOwokcGFyc2VyID0gbmV3IFBhcnNlcigkYyk7CiRwYXJzZXItPnJlZnMgPSYgJHRoaXMtPnJlZnM7CiRwYXJzZWQgPSAkcGFyc2VyLT5wYXJzZSgkdmFsdWUsICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCk7CgokbWVyZ2VkID0gYXJyYXkoKTsKaWYgKCFpc19hcnJheSgkcGFyc2VkKSkgewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oJ1lBTUwgbWVyZ2Uga2V5cyB1c2VkIHdpdGggYSBzY2FsYXIgdmFsdWUgaW5zdGVhZCBvZiBhbiBhcnJheS4nLCAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsICR0aGlzLT5jdXJyZW50TGluZSk7Cn0gZWxzZWlmIChpc3NldCgkcGFyc2VkWzBdKSkgewoKIGZvcmVhY2ggKGFycmF5X3JldmVyc2UoJHBhcnNlZCkgYXMgJHBhcnNlZEl0ZW0pIHsKaWYgKCFpc19hcnJheSgkcGFyc2VkSXRlbSkpIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCdNZXJnZSBpdGVtcyBtdXN0IGJlIGFycmF5cy4nLCAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsICRwYXJzZWRJdGVtKTsKfQokbWVyZ2VkID0gYXJyYXlfbWVyZ2UoJHBhcnNlZEl0ZW0sICRtZXJnZWQpOwp9Cn0gZWxzZSB7CgogJG1lcmdlZCA9IGFycmF5X21lcmdlKCRtZXJnZWQsICRwYXJzZWQpOwp9CgokaXNQcm9jZXNzZWQgPSAkbWVyZ2VkOwp9Cn0gZWxzZWlmIChpc3NldCgkdmFsdWVzWyd2YWx1ZSddKSAmJiBwcmVnX21hdGNoKCcjXiYoP1A8cmVmPlteIF0rKSAqKD9QPHZhbHVlPi4qKSN1JywgJHZhbHVlc1sndmFsdWUnXSwgJG1hdGNoZXMpKSB7CiRpc1JlZiA9ICRtYXRjaGVzWydyZWYnXTsKJHZhbHVlc1sndmFsdWUnXSA9ICRtYXRjaGVzWyd2YWx1ZSddOwp9CgppZiAoJGlzUHJvY2Vzc2VkKSB7CgogJGRhdGEgPSAkaXNQcm9jZXNzZWQ7CgogfSBlbHNlaWYgKCFpc3NldCgkdmFsdWVzWyd2YWx1ZSddKSB8fCAnJyA9PSB0cmltKCR2YWx1ZXNbJ3ZhbHVlJ10sICcgJykgfHwgMCA9PT0gc3RycG9zKGx0cmltKCR2YWx1ZXNbJ3ZhbHVlJ10sICcgJyksICcjJykpIHsKCiBpZiAoISR0aGlzLT5pc05leHRMaW5lSW5kZW50ZWQoKSAmJiAhJHRoaXMtPmlzTmV4dExpbmVVbkluZGVudGVkQ29sbGVjdGlvbigpKSB7CiRkYXRhWyRrZXldID0gbnVsbDsKfSBlbHNlIHsKJGMgPSAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDE7CiRwYXJzZXIgPSBuZXcgUGFyc2VyKCRjKTsKJHBhcnNlci0+cmVmcyA9JiAkdGhpcy0+cmVmczsKJGRhdGFbJGtleV0gPSAkcGFyc2VyLT5wYXJzZSgkdGhpcy0+Z2V0TmV4dEVtYmVkQmxvY2soKSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfQp9IGVsc2UgewppZiAoJGlzSW5QbGFjZSkgewokZGF0YSA9ICR0aGlzLT5yZWZzWyRpc0luUGxhY2VdOwp9IGVsc2UgewokZGF0YVska2V5XSA9ICR0aGlzLT5wYXJzZVZhbHVlKCR2YWx1ZXNbJ3ZhbHVlJ10sICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCk7Cn0KfQp9IGVsc2UgewoKICRsaW5lQ291bnQgPSBjb3VudCgkdGhpcy0+bGluZXMpOwppZiAoMSA9PT0gJGxpbmVDb3VudCB8fCAoMiA9PT0gJGxpbmVDb3VudCAmJiBlbXB0eSgkdGhpcy0+bGluZXNbMV0pKSkgewp0cnkgewokdmFsdWUgPSBJbmxpbmU6OnBhcnNlKCR0aGlzLT5saW5lc1swXSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gJGUpIHsKJGUtPnNldFBhcnNlZExpbmUoJHRoaXMtPmdldFJlYWxDdXJyZW50TGluZU5iKCkgKyAxKTsKJGUtPnNldFNuaXBwZXQoJHRoaXMtPmN1cnJlbnRMaW5lKTsKCnRocm93ICRlOwp9CgppZiAoaXNfYXJyYXkoJHZhbHVlKSkgewokZmlyc3QgPSByZXNldCgkdmFsdWUpOwppZiAoaXNfc3RyaW5nKCRmaXJzdCkgJiYgMCA9PT0gc3RycG9zKCRmaXJzdCwgJyonKSkgewokZGF0YSA9IGFycmF5KCk7CmZvcmVhY2ggKCR2YWx1ZSBhcyAkYWxpYXMpIHsKJGRhdGFbXSA9ICR0aGlzLT5yZWZzW3N1YnN0cigkYWxpYXMsIDEpXTsKfQokdmFsdWUgPSAkZGF0YTsKfQp9CgppZiAoaXNzZXQoJG1iRW5jb2RpbmcpKSB7Cm1iX2ludGVybmFsX2VuY29kaW5nKCRtYkVuY29kaW5nKTsKfQoKcmV0dXJuICR2YWx1ZTsKfQoKc3dpdGNoIChwcmVnX2xhc3RfZXJyb3IoKSkgewpjYXNlIFBSRUdfSU5URVJOQUxfRVJST1I6CiRlcnJvciA9ICdJbnRlcm5hbCBQQ1JFIGVycm9yLic7CmJyZWFrOwpjYXNlIFBSRUdfQkFDS1RSQUNLX0xJTUlUX0VSUk9SOgokZXJyb3IgPSAncGNyZS5iYWNrdHJhY2tfbGltaXQgcmVhY2hlZC4nOwpicmVhazsKY2FzZSBQUkVHX1JFQ1VSU0lPTl9MSU1JVF9FUlJPUjoKJGVycm9yID0gJ3BjcmUucmVjdXJzaW9uX2xpbWl0IHJlYWNoZWQuJzsKYnJlYWs7CmNhc2UgUFJFR19CQURfVVRGOF9FUlJPUjoKJGVycm9yID0gJ01hbGZvcm1lZCBVVEYtOCBkYXRhLic7CmJyZWFrOwpjYXNlIFBSRUdfQkFEX1VURjhfT0ZGU0VUX0VSUk9SOgokZXJyb3IgPSAnT2Zmc2V0IGRvZXNuXCd0IGNvcnJlc3BvbmQgdG8gdGhlIGJlZ2luIG9mIGEgdmFsaWQgVVRGLTggY29kZSBwb2ludC4nOwpicmVhazsKZGVmYXVsdDoKJGVycm9yID0gJ1VuYWJsZSB0byBwYXJzZS4nOwp9Cgp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oJGVycm9yLCAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsICR0aGlzLT5jdXJyZW50TGluZSk7Cn0KCmlmICgkaXNSZWYpIHsKJHRoaXMtPnJlZnNbJGlzUmVmXSA9IGVuZCgkZGF0YSk7Cn0KfQoKaWYgKGlzc2V0KCRtYkVuY29kaW5nKSkgewptYl9pbnRlcm5hbF9lbmNvZGluZygkbWJFbmNvZGluZyk7Cn0KCnJldHVybiBlbXB0eSgkZGF0YSkgPyBudWxsIDogJGRhdGE7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBnZXRSZWFsQ3VycmVudExpbmVOYigpCnsKcmV0dXJuICR0aGlzLT5jdXJyZW50TGluZU5iICsgJHRoaXMtPm9mZnNldDsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKQp7CnJldHVybiBzdHJsZW4oJHRoaXMtPmN1cnJlbnRMaW5lKSAtIHN0cmxlbihsdHJpbSgkdGhpcy0+Y3VycmVudExpbmUsICcgJykpOwp9CgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldE5leHRFbWJlZEJsb2NrKCRpbmRlbnRhdGlvbiA9IG51bGwpCnsKJHRoaXMtPm1vdmVUb05leHRMaW5lKCk7CgppZiAobnVsbCA9PT0gJGluZGVudGF0aW9uKSB7CiRuZXdJbmRlbnQgPSAkdGhpcy0+Z2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpOwoKJHVuaW5kZW50ZWRFbWJlZEJsb2NrID0gJHRoaXMtPmlzU3RyaW5nVW5JbmRlbnRlZENvbGxlY3Rpb25JdGVtKCR0aGlzLT5jdXJyZW50TGluZSk7CgppZiAoISR0aGlzLT5pc0N1cnJlbnRMaW5lRW1wdHkoKSAmJiAwID09PSAkbmV3SW5kZW50ICYmICEkdW5pbmRlbnRlZEVtYmVkQmxvY2spIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKCdJbmRlbnRhdGlvbiBwcm9ibGVtLicsICR0aGlzLT5nZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSwgJHRoaXMtPmN1cnJlbnRMaW5lKTsKfQp9IGVsc2UgewokbmV3SW5kZW50ID0gJGluZGVudGF0aW9uOwp9CgokZGF0YSA9IGFycmF5KHN1YnN0cigkdGhpcy0+Y3VycmVudExpbmUsICRuZXdJbmRlbnQpKTsKCiRpc0l0VW5pbmRlbnRlZENvbGxlY3Rpb24gPSAkdGhpcy0+aXNTdHJpbmdVbkluZGVudGVkQ29sbGVjdGlvbkl0ZW0oJHRoaXMtPmN1cnJlbnRMaW5lKTsKCgogJHJlbW92ZUNvbW1lbnRzUGF0dGVybiA9ICd+Jy5zZWxmOjpGT0xERURfU0NBTEFSX1BBVFRFUk4uJyR+JzsKJHJlbW92ZUNvbW1lbnRzID0gIXByZWdfbWF0Y2goJHJlbW92ZUNvbW1lbnRzUGF0dGVybiwgJHRoaXMtPmN1cnJlbnRMaW5lKTsKCndoaWxlICgkdGhpcy0+bW92ZVRvTmV4dExpbmUoKSkgewppZiAoJHRoaXMtPmdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKSA9PT0gJG5ld0luZGVudCkgewokcmVtb3ZlQ29tbWVudHMgPSAhcHJlZ19tYXRjaCgkcmVtb3ZlQ29tbWVudHNQYXR0ZXJuLCAkdGhpcy0+Y3VycmVudExpbmUpOwp9CgppZiAoJGlzSXRVbmluZGVudGVkQ29sbGVjdGlvbiAmJiAhJHRoaXMtPmlzU3RyaW5nVW5JbmRlbnRlZENvbGxlY3Rpb25JdGVtKCR0aGlzLT5jdXJyZW50TGluZSkpIHsKJHRoaXMtPm1vdmVUb1ByZXZpb3VzTGluZSgpOwpicmVhazsKfQoKaWYgKCRyZW1vdmVDb21tZW50cyAmJiAkdGhpcy0+aXNDdXJyZW50TGluZUVtcHR5KCkgfHwgJHRoaXMtPmlzQ3VycmVudExpbmVCbGFuaygpKSB7CmlmICgkdGhpcy0+aXNDdXJyZW50TGluZUJsYW5rKCkpIHsKJGRhdGFbXSA9IHN1YnN0cigkdGhpcy0+Y3VycmVudExpbmUsICRuZXdJbmRlbnQpOwp9Cgpjb250aW51ZTsKfQoKJGluZGVudCA9ICR0aGlzLT5nZXRDdXJyZW50TGluZUluZGVudGF0aW9uKCk7CgppZiAocHJlZ19tYXRjaCgnI14oP1A8dGV4dD4gKikkIycsICR0aGlzLT5jdXJyZW50TGluZSwgJG1hdGNoKSkgewoKICRkYXRhW10gPSAkbWF0Y2hbJ3RleHQnXTsKfSBlbHNlaWYgKCRpbmRlbnQgPj0gJG5ld0luZGVudCkgewokZGF0YVtdID0gc3Vic3RyKCR0aGlzLT5jdXJyZW50TGluZSwgJG5ld0luZGVudCk7Cn0gZWxzZWlmICgwID09ICRpbmRlbnQpIHsKJHRoaXMtPm1vdmVUb1ByZXZpb3VzTGluZSgpOwoKYnJlYWs7Cn0gZWxzZSB7CnRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbignSW5kZW50YXRpb24gcHJvYmxlbS4nLCAkdGhpcy0+Z2V0UmVhbEN1cnJlbnRMaW5lTmIoKSArIDEsICR0aGlzLT5jdXJyZW50TGluZSk7Cn0KfQoKcmV0dXJuIGltcGxvZGUoIlxuIiwgJGRhdGEpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gbW92ZVRvTmV4dExpbmUoKQp7CmlmICgkdGhpcy0+Y3VycmVudExpbmVOYiA+PSBjb3VudCgkdGhpcy0+bGluZXMpIC0gMSkgewpyZXR1cm4gZmFsc2U7Cn0KCiR0aGlzLT5jdXJyZW50TGluZSA9ICR0aGlzLT5saW5lc1srKyR0aGlzLT5jdXJyZW50TGluZU5iXTsKCnJldHVybiB0cnVlOwp9CgoKCgpwcml2YXRlIGZ1bmN0aW9uIG1vdmVUb1ByZXZpb3VzTGluZSgpCnsKJHRoaXMtPmN1cnJlbnRMaW5lID0gJHRoaXMtPmxpbmVzWy0tJHRoaXMtPmN1cnJlbnRMaW5lTmJdOwp9CgoKCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcGFyc2VWYWx1ZSgkdmFsdWUsICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCkKewppZiAoMCA9PT0gc3RycG9zKCR2YWx1ZSwgJyonKSkgewppZiAoZmFsc2UgIT09ICRwb3MgPSBzdHJwb3MoJHZhbHVlLCAnIycpKSB7CiR2YWx1ZSA9IHN1YnN0cigkdmFsdWUsIDEsICRwb3MgLSAyKTsKfSBlbHNlIHsKJHZhbHVlID0gc3Vic3RyKCR2YWx1ZSwgMSk7Cn0KCmlmICghYXJyYXlfa2V5X2V4aXN0cygkdmFsdWUsICR0aGlzLT5yZWZzKSkgewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oc3ByaW50ZignUmVmZXJlbmNlICIlcyIgZG9lcyBub3QgZXhpc3QuJywgJHZhbHVlKSwgJHRoaXMtPmN1cnJlbnRMaW5lKTsKfQoKcmV0dXJuICR0aGlzLT5yZWZzWyR2YWx1ZV07Cn0KCmlmIChwcmVnX21hdGNoKCcvXicuc2VsZjo6Rk9MREVEX1NDQUxBUl9QQVRURVJOLickLycsICR2YWx1ZSwgJG1hdGNoZXMpKSB7CiRtb2RpZmllcnMgPSBpc3NldCgkbWF0Y2hlc1snbW9kaWZpZXJzJ10pID8gJG1hdGNoZXNbJ21vZGlmaWVycyddIDogJyc7CgpyZXR1cm4gJHRoaXMtPnBhcnNlRm9sZGVkU2NhbGFyKCRtYXRjaGVzWydzZXBhcmF0b3InXSwgcHJlZ19yZXBsYWNlKCcjXGQrIycsICcnLCAkbW9kaWZpZXJzKSwgaW50dmFsKGFicygkbW9kaWZpZXJzKSkpOwp9Cgp0cnkgewpyZXR1cm4gSW5saW5lOjpwYXJzZSgkdmFsdWUsICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCk7Cn0gY2F0Y2ggKFBhcnNlRXhjZXB0aW9uICRlKSB7CiRlLT5zZXRQYXJzZWRMaW5lKCR0aGlzLT5nZXRSZWFsQ3VycmVudExpbmVOYigpICsgMSk7CiRlLT5zZXRTbmlwcGV0KCR0aGlzLT5jdXJyZW50TGluZSk7Cgp0aHJvdyAkZTsKfQp9CgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHBhcnNlRm9sZGVkU2NhbGFyKCRzZXBhcmF0b3IsICRpbmRpY2F0b3IgPSAnJywgJGluZGVudGF0aW9uID0gMCkKewokbm90RU9GID0gJHRoaXMtPm1vdmVUb05leHRMaW5lKCk7CmlmICghJG5vdEVPRikgewpyZXR1cm4gJyc7Cn0KCiRpc0N1cnJlbnRMaW5lQmxhbmsgPSAkdGhpcy0+aXNDdXJyZW50TGluZUJsYW5rKCk7CiR0ZXh0ID0gJyc7CgoKIHdoaWxlICgkbm90RU9GICYmICRpc0N1cnJlbnRMaW5lQmxhbmspIHsKCiBpZiAoJG5vdEVPRiA9ICR0aGlzLT5tb3ZlVG9OZXh0TGluZSgpKSB7CiR0ZXh0IC49ICJcbiI7CiRpc0N1cnJlbnRMaW5lQmxhbmsgPSAkdGhpcy0+aXNDdXJyZW50TGluZUJsYW5rKCk7Cn0KfQoKCiBpZiAoMCA9PT0gJGluZGVudGF0aW9uKSB7CmlmIChwcmVnX21hdGNoKCcvXiArLycsICR0aGlzLT5jdXJyZW50TGluZSwgJG1hdGNoZXMpKSB7CiRpbmRlbnRhdGlvbiA9IHN0cmxlbigkbWF0Y2hlc1swXSk7Cn0KfQoKaWYgKCRpbmRlbnRhdGlvbiA+IDApIHsKJHBhdHRlcm4gPSBzcHJpbnRmKCcvXiB7JWR9KC4qKSQvJywgJGluZGVudGF0aW9uKTsKCndoaWxlICgKJG5vdEVPRiAmJiAoCiRpc0N1cnJlbnRMaW5lQmxhbmsgfHwKcHJlZ19tYXRjaCgkcGF0dGVybiwgJHRoaXMtPmN1cnJlbnRMaW5lLCAkbWF0Y2hlcykKKQopIHsKaWYgKCRpc0N1cnJlbnRMaW5lQmxhbmspIHsKJHRleHQgLj0gc3Vic3RyKCR0aGlzLT5jdXJyZW50TGluZSwgJGluZGVudGF0aW9uKTsKfSBlbHNlIHsKJHRleHQgLj0gJG1hdGNoZXNbMV07Cn0KCgogaWYgKCRub3RFT0YgPSAkdGhpcy0+bW92ZVRvTmV4dExpbmUoKSkgewokdGV4dCAuPSAiXG4iOwokaXNDdXJyZW50TGluZUJsYW5rID0gJHRoaXMtPmlzQ3VycmVudExpbmVCbGFuaygpOwp9Cn0KfSBlbHNlaWYgKCRub3RFT0YpIHsKJHRleHQgLj0gIlxuIjsKfQoKaWYgKCRub3RFT0YpIHsKJHRoaXMtPm1vdmVUb1ByZXZpb3VzTGluZSgpOwp9CgoKIGlmICgnPicgPT09ICRzZXBhcmF0b3IpIHsKcHJlZ19tYXRjaCgnLyhcbiopJC8nLCAkdGV4dCwgJG1hdGNoZXMpOwokdGV4dCA9IHByZWdfcmVwbGFjZSgnLyg/PCFcbilcbig/IVxuKS8nLCAnICcsIHJ0cmltKCR0ZXh0LCAiXG4iKSk7CiR0ZXh0IC49ICRtYXRjaGVzWzFdOwp9CgoKIGlmICgnJyA9PT0gJGluZGljYXRvcikgewokdGV4dCA9IHByZWdfcmVwbGFjZSgnL1xuKyQvcycsICJcbiIsICR0ZXh0KTsKfSBlbHNlaWYgKCctJyA9PT0gJGluZGljYXRvcikgewokdGV4dCA9IHByZWdfcmVwbGFjZSgnL1xuKyQvcycsICcnLCAkdGV4dCk7Cn0KCnJldHVybiAkdGV4dDsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGlzTmV4dExpbmVJbmRlbnRlZCgpCnsKJGN1cnJlbnRJbmRlbnRhdGlvbiA9ICR0aGlzLT5nZXRDdXJyZW50TGluZUluZGVudGF0aW9uKCk7CiRFT0YgPSAhJHRoaXMtPm1vdmVUb05leHRMaW5lKCk7Cgp3aGlsZSAoISRFT0YgJiYgJHRoaXMtPmlzQ3VycmVudExpbmVFbXB0eSgpKSB7CiRFT0YgPSAhJHRoaXMtPm1vdmVUb05leHRMaW5lKCk7Cn0KCmlmICgkRU9GKSB7CnJldHVybiBmYWxzZTsKfQoKJHJldCA9IGZhbHNlOwppZiAoJHRoaXMtPmdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKSA+ICRjdXJyZW50SW5kZW50YXRpb24pIHsKJHJldCA9IHRydWU7Cn0KCiR0aGlzLT5tb3ZlVG9QcmV2aW91c0xpbmUoKTsKCnJldHVybiAkcmV0Owp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gaXNDdXJyZW50TGluZUVtcHR5KCkKewpyZXR1cm4gJHRoaXMtPmlzQ3VycmVudExpbmVCbGFuaygpIHx8ICR0aGlzLT5pc0N1cnJlbnRMaW5lQ29tbWVudCgpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gaXNDdXJyZW50TGluZUJsYW5rKCkKewpyZXR1cm4gJycgPT0gdHJpbSgkdGhpcy0+Y3VycmVudExpbmUsICcgJyk7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBpc0N1cnJlbnRMaW5lQ29tbWVudCgpCnsKCiAkbHRyaW1tZWRMaW5lID0gbHRyaW0oJHRoaXMtPmN1cnJlbnRMaW5lLCAnICcpOwoKcmV0dXJuICRsdHJpbW1lZExpbmVbMF0gPT09ICcjJzsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gY2xlYW51cCgkdmFsdWUpCnsKJHZhbHVlID0gc3RyX3JlcGxhY2UoYXJyYXkoIlxyXG4iLCAiXHIiKSwgIlxuIiwgJHZhbHVlKTsKCgogJGNvdW50ID0gMDsKJHZhbHVlID0gcHJlZ19yZXBsYWNlKCcjXlwlWUFNTFs6IF1bXGRcLl0rLipcbiNzdScsICcnLCAkdmFsdWUsIC0xLCAkY291bnQpOwokdGhpcy0+b2Zmc2V0ICs9ICRjb3VudDsKCgogJHRyaW1tZWRWYWx1ZSA9IHByZWdfcmVwbGFjZSgnI14oXCMuKj9cbikrI3MnLCAnJywgJHZhbHVlLCAtMSwgJGNvdW50KTsKaWYgKCRjb3VudCA9PSAxKSB7CgogJHRoaXMtPm9mZnNldCArPSBzdWJzdHJfY291bnQoJHZhbHVlLCAiXG4iKSAtIHN1YnN0cl9jb3VudCgkdHJpbW1lZFZhbHVlLCAiXG4iKTsKJHZhbHVlID0gJHRyaW1tZWRWYWx1ZTsKfQoKCiAkdHJpbW1lZFZhbHVlID0gcHJlZ19yZXBsYWNlKCcjXlwtXC1cLS4qP1xuI3MnLCAnJywgJHZhbHVlLCAtMSwgJGNvdW50KTsKaWYgKCRjb3VudCA9PSAxKSB7CgogJHRoaXMtPm9mZnNldCArPSBzdWJzdHJfY291bnQoJHZhbHVlLCAiXG4iKSAtIHN1YnN0cl9jb3VudCgkdHJpbW1lZFZhbHVlLCAiXG4iKTsKJHZhbHVlID0gJHRyaW1tZWRWYWx1ZTsKCgogJHZhbHVlID0gcHJlZ19yZXBsYWNlKCcjXC5cLlwuXHMqJCNzJywgJycsICR2YWx1ZSk7Cn0KCnJldHVybiAkdmFsdWU7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBpc05leHRMaW5lVW5JbmRlbnRlZENvbGxlY3Rpb24oKQp7CiRjdXJyZW50SW5kZW50YXRpb24gPSAkdGhpcy0+Z2V0Q3VycmVudExpbmVJbmRlbnRhdGlvbigpOwokbm90RU9GID0gJHRoaXMtPm1vdmVUb05leHRMaW5lKCk7Cgp3aGlsZSAoJG5vdEVPRiAmJiAkdGhpcy0+aXNDdXJyZW50TGluZUVtcHR5KCkpIHsKJG5vdEVPRiA9ICR0aGlzLT5tb3ZlVG9OZXh0TGluZSgpOwp9CgppZiAoZmFsc2UgPT09ICRub3RFT0YpIHsKcmV0dXJuIGZhbHNlOwp9CgokcmV0ID0gZmFsc2U7CmlmICgKJHRoaXMtPmdldEN1cnJlbnRMaW5lSW5kZW50YXRpb24oKSA9PSAkY3VycmVudEluZGVudGF0aW9uCiYmCiR0aGlzLT5pc1N0cmluZ1VuSW5kZW50ZWRDb2xsZWN0aW9uSXRlbSgkdGhpcy0+Y3VycmVudExpbmUpCikgewokcmV0ID0gdHJ1ZTsKfQoKJHRoaXMtPm1vdmVUb1ByZXZpb3VzTGluZSgpOwoKcmV0dXJuICRyZXQ7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBpc1N0cmluZ1VuSW5kZW50ZWRDb2xsZWN0aW9uSXRlbSgpCnsKcmV0dXJuICgwID09PSBzdHJwb3MoJHRoaXMtPmN1cnJlbnRMaW5lLCAnLSAnKSk7Cn0KCn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxZYW1sOwoKCgoKCgoKY2xhc3MgVW5lc2NhcGVyCnsKCiAKIGNvbnN0IEVOQ09ESU5HID0gJ1VURi04JzsKCgogCiBjb25zdCBSRUdFWF9FU0NBUEVEX0NIQVJBQ1RFUiA9ICJcXFxcKFswYWJ0XHRudmZyZSBcXFwiXFwvXFxcXE5fTFBdfHhbMC05YS1mQS1GXXsyfXx1WzAtOWEtZkEtRl17NH18VVswLTlhLWZBLUZdezh9KSI7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVuZXNjYXBlU2luZ2xlUXVvdGVkU3RyaW5nKCR2YWx1ZSkKewpyZXR1cm4gc3RyX3JlcGxhY2UoJ1wnXCcnLCAnXCcnLCAkdmFsdWUpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVuZXNjYXBlRG91YmxlUXVvdGVkU3RyaW5nKCR2YWx1ZSkKewokc2VsZiA9ICR0aGlzOwokY2FsbGJhY2sgPSBmdW5jdGlvbiAoJG1hdGNoKSB1c2UgKCRzZWxmKSB7CnJldHVybiAkc2VsZi0+dW5lc2NhcGVDaGFyYWN0ZXIoJG1hdGNoWzBdKTsKfTsKCgogcmV0dXJuIHByZWdfcmVwbGFjZV9jYWxsYmFjaygnLycuc2VsZjo6UkVHRVhfRVNDQVBFRF9DSEFSQUNURVIuJy91JywgJGNhbGxiYWNrLCAkdmFsdWUpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVuZXNjYXBlQ2hhcmFjdGVyKCR2YWx1ZSkKewpzd2l0Y2ggKCR2YWx1ZXsxfSkgewpjYXNlICcwJzoKcmV0dXJuICJceDAiOwpjYXNlICdhJzoKcmV0dXJuICJceDciOwpjYXNlICdiJzoKcmV0dXJuICJceDgiOwpjYXNlICd0JzoKcmV0dXJuICJcdCI7CmNhc2UgIlx0IjoKcmV0dXJuICJcdCI7CmNhc2UgJ24nOgpyZXR1cm4gIlxuIjsKY2FzZSAndic6CnJldHVybiAiXHhiIjsKY2FzZSAnZic6CnJldHVybiAiXHhjIjsKY2FzZSAncic6CnJldHVybiAiXHhkIjsKY2FzZSAnZSc6CnJldHVybiAiXHgxYiI7CmNhc2UgJyAnOgpyZXR1cm4gJyAnOwpjYXNlICciJzoKcmV0dXJuICciJzsKY2FzZSAnLyc6CnJldHVybiAnLyc7CmNhc2UgJ1xcJzoKcmV0dXJuICdcXCc7CmNhc2UgJ04nOgoKIHJldHVybiAkdGhpcy0+Y29udmVydEVuY29kaW5nKCJceDAwXHg4NSIsIHNlbGY6OkVOQ09ESU5HLCAnVUNTLTJCRScpOwpjYXNlICdfJzoKCiByZXR1cm4gJHRoaXMtPmNvbnZlcnRFbmNvZGluZygiXHgwMFx4QTAiLCBzZWxmOjpFTkNPRElORywgJ1VDUy0yQkUnKTsKY2FzZSAnTCc6CgogcmV0dXJuICR0aGlzLT5jb252ZXJ0RW5jb2RpbmcoIlx4MjBceDI4Iiwgc2VsZjo6RU5DT0RJTkcsICdVQ1MtMkJFJyk7CmNhc2UgJ1AnOgoKIHJldHVybiAkdGhpcy0+Y29udmVydEVuY29kaW5nKCJceDIwXHgyOSIsIHNlbGY6OkVOQ09ESU5HLCAnVUNTLTJCRScpOwpjYXNlICd4JzoKJGNoYXIgPSBwYWNrKCduJywgaGV4ZGVjKHN1YnN0cigkdmFsdWUsIDIsIDIpKSk7CgpyZXR1cm4gJHRoaXMtPmNvbnZlcnRFbmNvZGluZygkY2hhciwgc2VsZjo6RU5DT0RJTkcsICdVQ1MtMkJFJyk7CmNhc2UgJ3UnOgokY2hhciA9IHBhY2soJ24nLCBoZXhkZWMoc3Vic3RyKCR2YWx1ZSwgMiwgNCkpKTsKCnJldHVybiAkdGhpcy0+Y29udmVydEVuY29kaW5nKCRjaGFyLCBzZWxmOjpFTkNPRElORywgJ1VDUy0yQkUnKTsKY2FzZSAnVSc6CiRjaGFyID0gcGFjaygnTicsIGhleGRlYyhzdWJzdHIoJHZhbHVlLCAyLCA4KSkpOwoKcmV0dXJuICR0aGlzLT5jb252ZXJ0RW5jb2RpbmcoJGNoYXIsIHNlbGY6OkVOQ09ESU5HLCAnVUNTLTRCRScpOwp9Cn0KCgoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBjb252ZXJ0RW5jb2RpbmcoJHZhbHVlLCAkdG8sICRmcm9tKQp7CmlmIChmdW5jdGlvbl9leGlzdHMoJ21iX2NvbnZlcnRfZW5jb2RpbmcnKSkgewpyZXR1cm4gbWJfY29udmVydF9lbmNvZGluZygkdmFsdWUsICR0bywgJGZyb20pOwp9IGVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdpY29udicpKSB7CnJldHVybiBpY29udigkZnJvbSwgJHRvLCAkdmFsdWUpOwp9Cgp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIHN1aXRhYmxlIGNvbnZlcnQgZW5jb2RpbmcgZnVuY3Rpb24gKGluc3RhbGwgdGhlIGljb252IG9yIG1ic3RyaW5nIGV4dGVuc2lvbikuJyk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWw7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcWWFtbFxFeGNlcHRpb25cUGFyc2VFeGNlcHRpb247CgoKCgoKCgoKY2xhc3MgWWFtbAp7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkaW5wdXQsICRleGNlcHRpb25PbkludmFsaWRUeXBlID0gZmFsc2UsICRvYmplY3RTdXBwb3J0ID0gZmFsc2UpCnsKCiAkZmlsZSA9ICcnOwppZiAoc3RycG9zKCRpbnB1dCwgIlxuIikgPT09IGZhbHNlICYmIGlzX2ZpbGUoJGlucHV0KSkgewppZiAoZmFsc2UgPT09IGlzX3JlYWRhYmxlKCRpbnB1dCkpIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKHNwcmludGYoJ1VuYWJsZSB0byBwYXJzZSAiJXMiIGFzIHRoZSBmaWxlIGlzIG5vdCByZWFkYWJsZS4nLCAkaW5wdXQpKTsKfQoKJGZpbGUgPSAkaW5wdXQ7CiRpbnB1dCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKfQoKJHlhbWwgPSBuZXcgUGFyc2VyKCk7Cgp0cnkgewpyZXR1cm4gJHlhbWwtPnBhcnNlKCRpbnB1dCwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfSBjYXRjaCAoUGFyc2VFeGNlcHRpb24gJGUpIHsKaWYgKCRmaWxlKSB7CiRlLT5zZXRQYXJzZWRGaWxlKCRmaWxlKTsKfQoKdGhyb3cgJGU7Cn0KfQoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZHVtcCgkYXJyYXksICRpbmxpbmUgPSAyLCAkaW5kZW50ID0gNCwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgJG9iamVjdFN1cHBvcnQgPSBmYWxzZSkKewokeWFtbCA9IG5ldyBEdW1wZXIoKTsKJHlhbWwtPnNldEluZGVudGF0aW9uKCRpbmRlbnQpOwoKcmV0dXJuICR5YW1sLT5kdW1wKCRhcnJheSwgJGlubGluZSwgMCwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcWWFtbDsKCgoKCgoKY2xhc3MgRHVtcGVyCnsKCgoKCgpwcm90ZWN0ZWQgJGluZGVudGF0aW9uID0gNDsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEluZGVudGF0aW9uKCRudW0pCnsKJHRoaXMtPmluZGVudGF0aW9uID0gKGludCkgJG51bTsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZHVtcCgkaW5wdXQsICRpbmxpbmUgPSAwLCAkaW5kZW50ID0gMCwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgJG9iamVjdFN1cHBvcnQgPSBmYWxzZSkKewokb3V0cHV0ID0gJyc7CiRwcmVmaXggPSAkaW5kZW50ID8gc3RyX3JlcGVhdCgnICcsICRpbmRlbnQpIDogJyc7CgppZiAoJGlubGluZSA8PSAwIHx8ICFpc19hcnJheSgkaW5wdXQpIHx8IGVtcHR5KCRpbnB1dCkpIHsKJG91dHB1dCAuPSAkcHJlZml4LklubGluZTo6ZHVtcCgkaW5wdXQsICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCk7Cn0gZWxzZSB7CiRpc0FIYXNoID0gYXJyYXlfa2V5cygkaW5wdXQpICE9PSByYW5nZSgwLCBjb3VudCgkaW5wdXQpIC0gMSk7Cgpmb3JlYWNoICgkaW5wdXQgYXMgJGtleSA9PiAkdmFsdWUpIHsKJHdpbGxCZUlubGluZWQgPSAkaW5saW5lIC0gMSA8PSAwIHx8ICFpc19hcnJheSgkdmFsdWUpIHx8IGVtcHR5KCR2YWx1ZSk7Cgokb3V0cHV0IC49IHNwcmludGYoJyVzJXMlcyVzJywKJHByZWZpeCwKJGlzQUhhc2ggPyBJbmxpbmU6OmR1bXAoJGtleSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KS4nOicgOiAnLScsCiR3aWxsQmVJbmxpbmVkID8gJyAnIDogIlxuIiwKJHRoaXMtPmR1bXAoJHZhbHVlLCAkaW5saW5lIC0gMSwgJHdpbGxCZUlubGluZWQgPyAwIDogJGluZGVudCArICR0aGlzLT5pbmRlbnRhdGlvbiwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KQopLigkd2lsbEJlSW5saW5lZCA/ICJcbiIgOiAnJyk7Cn0KfQoKcmV0dXJuICRvdXRwdXQ7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWxcRXhjZXB0aW9uOwoKaWYgKCFkZWZpbmVkKCdKU09OX1VORVNDQVBFRF9VTklDT0RFJykpIHsKZGVmaW5lKCdKU09OX1VORVNDQVBFRF9TTEFTSEVTJywgNjQpOwpkZWZpbmUoJ0pTT05fVU5FU0NBUEVEX1VOSUNPREUnLCAyNTYpOwp9CgoKCgoKCgoKY2xhc3MgUGFyc2VFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKcHJpdmF0ZSAkcGFyc2VkRmlsZTsKcHJpdmF0ZSAkcGFyc2VkTGluZTsKcHJpdmF0ZSAkc25pcHBldDsKcHJpdmF0ZSAkcmF3TWVzc2FnZTsKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJHBhcnNlZExpbmUgPSAtMSwgJHNuaXBwZXQgPSBudWxsLCAkcGFyc2VkRmlsZSA9IG51bGwsIFxFeGNlcHRpb24gJHByZXZpb3VzID0gbnVsbCkKewokdGhpcy0+cGFyc2VkRmlsZSA9ICRwYXJzZWRGaWxlOwokdGhpcy0+cGFyc2VkTGluZSA9ICRwYXJzZWRMaW5lOwokdGhpcy0+c25pcHBldCA9ICRzbmlwcGV0OwokdGhpcy0+cmF3TWVzc2FnZSA9ICRtZXNzYWdlOwoKJHRoaXMtPnVwZGF0ZVJlcHIoKTsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJHRoaXMtPm1lc3NhZ2UsIDAsICRwcmV2aW91cyk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNuaXBwZXQoKQp7CnJldHVybiAkdGhpcy0+c25pcHBldDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0U25pcHBldCgkc25pcHBldCkKewokdGhpcy0+c25pcHBldCA9ICRzbmlwcGV0OwoKJHRoaXMtPnVwZGF0ZVJlcHIoKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQYXJzZWRGaWxlKCkKewpyZXR1cm4gJHRoaXMtPnBhcnNlZEZpbGU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFBhcnNlZEZpbGUoJHBhcnNlZEZpbGUpCnsKJHRoaXMtPnBhcnNlZEZpbGUgPSAkcGFyc2VkRmlsZTsKCiR0aGlzLT51cGRhdGVSZXByKCk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhcnNlZExpbmUoKQp7CnJldHVybiAkdGhpcy0+cGFyc2VkTGluZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UGFyc2VkTGluZSgkcGFyc2VkTGluZSkKewokdGhpcy0+cGFyc2VkTGluZSA9ICRwYXJzZWRMaW5lOwoKJHRoaXMtPnVwZGF0ZVJlcHIoKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiB1cGRhdGVSZXByKCkKewokdGhpcy0+bWVzc2FnZSA9ICR0aGlzLT5yYXdNZXNzYWdlOwoKJGRvdCA9IGZhbHNlOwppZiAoJy4nID09PSBzdWJzdHIoJHRoaXMtPm1lc3NhZ2UsIC0xKSkgewokdGhpcy0+bWVzc2FnZSA9IHN1YnN0cigkdGhpcy0+bWVzc2FnZSwgMCwgLTEpOwokZG90ID0gdHJ1ZTsKfQoKaWYgKG51bGwgIT09ICR0aGlzLT5wYXJzZWRGaWxlKSB7CiR0aGlzLT5tZXNzYWdlIC49IHNwcmludGYoJyBpbiAlcycsIGpzb25fZW5jb2RlKCR0aGlzLT5wYXJzZWRGaWxlLCBKU09OX1VORVNDQVBFRF9TTEFTSEVTIHwgSlNPTl9VTkVTQ0FQRURfVU5JQ09ERSkpOwp9CgppZiAoJHRoaXMtPnBhcnNlZExpbmUgPj0gMCkgewokdGhpcy0+bWVzc2FnZSAuPSBzcHJpbnRmKCcgYXQgbGluZSAlZCcsICR0aGlzLT5wYXJzZWRMaW5lKTsKfQoKaWYgKCR0aGlzLT5zbmlwcGV0KSB7CiR0aGlzLT5tZXNzYWdlIC49IHNwcmludGYoJyAobmVhciAiJXMiKScsICR0aGlzLT5zbmlwcGV0KTsKfQoKaWYgKCRkb3QpIHsKJHRoaXMtPm1lc3NhZ2UgLj0gJy4nOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWxcRXhjZXB0aW9uOwoKCgoKCgoKCmludGVyZmFjZSBFeGNlcHRpb25JbnRlcmZhY2UKewp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcWWFtbFxFeGNlcHRpb247CgoKCgoKCgoKY2xhc3MgUnVudGltZUV4Y2VwdGlvbiBleHRlbmRzIFxSdW50aW1lRXhjZXB0aW9uIGltcGxlbWVudHMgRXhjZXB0aW9uSW50ZXJmYWNlCnsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWxcRXhjZXB0aW9uOwoKCgoKCgoKCmNsYXNzIER1bXBFeGNlcHRpb24gZXh0ZW5kcyBSdW50aW1lRXhjZXB0aW9uCnsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWw7CgoKCgoKCgpjbGFzcyBFc2NhcGVyCnsKCiBjb25zdCBSRUdFWF9DSEFSQUNURVJfVE9fRVNDQVBFID0gIltcXHgwMC1cXHgxZl18XHhjMlx4ODV8XHhjMlx4YTB8XHhlMlx4ODBceGE4fFx4ZTJceDgwXHhhOSI7CgoKIAogCiAKIHByaXZhdGUgc3RhdGljICRlc2NhcGVlcyA9IGFycmF5KCdcXFxcJywgJ1xcIicsICciJywKIlx4MDAiLCAiXHgwMSIsICJceDAyIiwgIlx4MDMiLCAiXHgwNCIsICJceDA1IiwgIlx4MDYiLCAiXHgwNyIsCiJceDA4IiwgIlx4MDkiLCAiXHgwYSIsICJceDBiIiwgIlx4MGMiLCAiXHgwZCIsICJceDBlIiwgIlx4MGYiLAoiXHgxMCIsICJceDExIiwgIlx4MTIiLCAiXHgxMyIsICJceDE0IiwgIlx4MTUiLCAiXHgxNiIsICJceDE3IiwKIlx4MTgiLCAiXHgxOSIsICJceDFhIiwgIlx4MWIiLCAiXHgxYyIsICJceDFkIiwgIlx4MWUiLCAiXHgxZiIsCiJceGMyXHg4NSIsICJceGMyXHhhMCIsICJceGUyXHg4MFx4YTgiLCAiXHhlMlx4ODBceGE5Iik7CnByaXZhdGUgc3RhdGljICRlc2NhcGVkID0gYXJyYXkoJ1xcIicsICdcXFxcJywgJ1xcIicsCiJcXDAiLCAiXFx4MDEiLCAiXFx4MDIiLCAiXFx4MDMiLCAiXFx4MDQiLCAiXFx4MDUiLCAiXFx4MDYiLCAiXFxhIiwKIlxcYiIsICJcXHQiLCAiXFxuIiwgIlxcdiIsICJcXGYiLCAiXFxyIiwgIlxceDBlIiwgIlxceDBmIiwKIlxceDEwIiwgIlxceDExIiwgIlxceDEyIiwgIlxceDEzIiwgIlxceDE0IiwgIlxceDE1IiwgIlxceDE2IiwgIlxceDE3IiwKIlxceDE4IiwgIlxceDE5IiwgIlxceDFhIiwgIlxcZSIsICJcXHgxYyIsICJcXHgxZCIsICJcXHgxZSIsICJcXHgxZiIsCiJcXE4iLCAiXFxfIiwgIlxcTCIsICJcXFAiKTsKCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHJlcXVpcmVzRG91YmxlUXVvdGluZygkdmFsdWUpCnsKcmV0dXJuIHByZWdfbWF0Y2goJy8nLnNlbGY6OlJFR0VYX0NIQVJBQ1RFUl9UT19FU0NBUEUuJy91JywgJHZhbHVlKTsKfQoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXNjYXBlV2l0aERvdWJsZVF1b3RlcygkdmFsdWUpCnsKcmV0dXJuIHNwcmludGYoJyIlcyInLCBzdHJfcmVwbGFjZShzZWxmOjokZXNjYXBlZXMsIHNlbGY6OiRlc2NhcGVkLCAkdmFsdWUpKTsKfQoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVxdWlyZXNTaW5nbGVRdW90aW5nKCR2YWx1ZSkKewpyZXR1cm4gcHJlZ19tYXRjaCgnL1sgXHMgXCcgIiBcOiBceyBcfSBcWyBcXSAsICYgXCogXCMgXD9dIHwgXEFbIFwtID8gfCA8ID4gPSAhICUgQCBgIF0veCcsICR2YWx1ZSk7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVzY2FwZVdpdGhTaW5nbGVRdW90ZXMoJHZhbHVlKQp7CnJldHVybiBzcHJpbnRmKCInJXMnIiwgc3RyX3JlcGxhY2UoJ1wnJywgJ1wnXCcnLCAkdmFsdWUpKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcWWFtbDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxZYW1sXEV4Y2VwdGlvblxQYXJzZUV4Y2VwdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFlhbWxcRXhjZXB0aW9uXER1bXBFeGNlcHRpb247CgoKCgoKCmNsYXNzIElubGluZQp7CmNvbnN0IFJFR0VYX1FVT1RFRF9TVFJJTkcgPSAnKD86IihbXiJcXFxcXSooPzpcXFxcLlteIlxcXFxdKikqKSJ8XCcoW15cJ10qKD86XCdcJ1teXCddKikqKVwnKSc7Cgpwcml2YXRlIHN0YXRpYyAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9IGZhbHNlOwpwcml2YXRlIHN0YXRpYyAkb2JqZWN0U3VwcG9ydCA9IGZhbHNlOwoKCgoKCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCR2YWx1ZSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgJG9iamVjdFN1cHBvcnQgPSBmYWxzZSkKewpzZWxmOjokZXhjZXB0aW9uT25JbnZhbGlkVHlwZSA9ICRleGNlcHRpb25PbkludmFsaWRUeXBlOwpzZWxmOjokb2JqZWN0U3VwcG9ydCA9ICRvYmplY3RTdXBwb3J0OwoKJHZhbHVlID0gdHJpbSgkdmFsdWUpOwoKaWYgKDAgPT0gc3RybGVuKCR2YWx1ZSkpIHsKcmV0dXJuICcnOwp9CgppZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9pbnRlcm5hbF9lbmNvZGluZycpICYmICgoaW50KSBpbmlfZ2V0KCdtYnN0cmluZy5mdW5jX292ZXJsb2FkJykpICYgMikgewokbWJFbmNvZGluZyA9IG1iX2ludGVybmFsX2VuY29kaW5nKCk7Cm1iX2ludGVybmFsX2VuY29kaW5nKCdBU0NJSScpOwp9CgokaSA9IDA7CnN3aXRjaCAoJHZhbHVlWzBdKSB7CmNhc2UgJ1snOgokcmVzdWx0ID0gc2VsZjo6cGFyc2VTZXF1ZW5jZSgkdmFsdWUsICRpKTsKKyskaTsKYnJlYWs7CmNhc2UgJ3snOgokcmVzdWx0ID0gc2VsZjo6cGFyc2VNYXBwaW5nKCR2YWx1ZSwgJGkpOworKyRpOwpicmVhazsKZGVmYXVsdDoKJHJlc3VsdCA9IHNlbGY6OnBhcnNlU2NhbGFyKCR2YWx1ZSwgbnVsbCwgYXJyYXkoJyInLCAiJyIpLCAkaSk7Cn0KCgogaWYgKHByZWdfcmVwbGFjZSgnL1xzKyMuKiQvQScsICcnLCBzdWJzdHIoJHZhbHVlLCAkaSkpKSB7CnRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihzcHJpbnRmKCdVbmV4cGVjdGVkIGNoYXJhY3RlcnMgbmVhciAiJXMiLicsIHN1YnN0cigkdmFsdWUsICRpKSkpOwp9CgppZiAoaXNzZXQoJG1iRW5jb2RpbmcpKSB7Cm1iX2ludGVybmFsX2VuY29kaW5nKCRtYkVuY29kaW5nKTsKfQoKcmV0dXJuICRyZXN1bHQ7Cn0KCgoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkdW1wKCR2YWx1ZSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUgPSBmYWxzZSwgJG9iamVjdFN1cHBvcnQgPSBmYWxzZSkKewpzd2l0Y2ggKHRydWUpIHsKY2FzZSBpc19yZXNvdXJjZSgkdmFsdWUpOgppZiAoJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUpIHsKdGhyb3cgbmV3IER1bXBFeGNlcHRpb24oc3ByaW50ZignVW5hYmxlIHRvIGR1bXAgUEhQIHJlc291cmNlcyBpbiBhIFlBTUwgZmlsZSAoIiVzIikuJywgZ2V0X3Jlc291cmNlX3R5cGUoJHZhbHVlKSkpOwp9CgpyZXR1cm4gJ251bGwnOwpjYXNlIGlzX29iamVjdCgkdmFsdWUpOgppZiAoJG9iamVjdFN1cHBvcnQpIHsKcmV0dXJuICchIXBocC9vYmplY3Q6Jy5zZXJpYWxpemUoJHZhbHVlKTsKfQoKaWYgKCRleGNlcHRpb25PbkludmFsaWRUeXBlKSB7CnRocm93IG5ldyBEdW1wRXhjZXB0aW9uKCdPYmplY3Qgc3VwcG9ydCB3aGVuIGR1bXBpbmcgYSBZQU1MIGZpbGUgaGFzIGJlZW4gZGlzYWJsZWQuJyk7Cn0KCnJldHVybiAnbnVsbCc7CmNhc2UgaXNfYXJyYXkoJHZhbHVlKToKcmV0dXJuIHNlbGY6OmR1bXBBcnJheSgkdmFsdWUsICRleGNlcHRpb25PbkludmFsaWRUeXBlLCAkb2JqZWN0U3VwcG9ydCk7CmNhc2UgbnVsbCA9PT0gJHZhbHVlOgpyZXR1cm4gJ251bGwnOwpjYXNlIHRydWUgPT09ICR2YWx1ZToKcmV0dXJuICd0cnVlJzsKY2FzZSBmYWxzZSA9PT0gJHZhbHVlOgpyZXR1cm4gJ2ZhbHNlJzsKY2FzZSBjdHlwZV9kaWdpdCgkdmFsdWUpOgpyZXR1cm4gaXNfc3RyaW5nKCR2YWx1ZSkgPyAiJyR2YWx1ZSciIDogKGludCkgJHZhbHVlOwpjYXNlIGlzX251bWVyaWMoJHZhbHVlKToKJGxvY2FsZSA9IHNldGxvY2FsZShMQ19OVU1FUklDLCAwKTsKaWYgKGZhbHNlICE9PSAkbG9jYWxlKSB7CnNldGxvY2FsZShMQ19OVU1FUklDLCAnQycpOwp9CiRyZXByID0gaXNfc3RyaW5nKCR2YWx1ZSkgPyAiJyR2YWx1ZSciIDogKGlzX2luZmluaXRlKCR2YWx1ZSkgPyBzdHJfaXJlcGxhY2UoJ0lORicsICcuSW5mJywgc3RydmFsKCR2YWx1ZSkpIDogc3RydmFsKCR2YWx1ZSkpOwoKaWYgKGZhbHNlICE9PSAkbG9jYWxlKSB7CnNldGxvY2FsZShMQ19OVU1FUklDLCAkbG9jYWxlKTsKfQoKcmV0dXJuICRyZXByOwpjYXNlIEVzY2FwZXI6OnJlcXVpcmVzRG91YmxlUXVvdGluZygkdmFsdWUpOgpyZXR1cm4gRXNjYXBlcjo6ZXNjYXBlV2l0aERvdWJsZVF1b3RlcygkdmFsdWUpOwpjYXNlIEVzY2FwZXI6OnJlcXVpcmVzU2luZ2xlUXVvdGluZygkdmFsdWUpOgpyZXR1cm4gRXNjYXBlcjo6ZXNjYXBlV2l0aFNpbmdsZVF1b3RlcygkdmFsdWUpOwpjYXNlICcnID09ICR2YWx1ZToKcmV0dXJuICInJyI7CmNhc2UgcHJlZ19tYXRjaChzZWxmOjpnZXRUaW1lc3RhbXBSZWdleCgpLCAkdmFsdWUpOgpjYXNlIGluX2FycmF5KHN0cnRvbG93ZXIoJHZhbHVlKSwgYXJyYXkoJ251bGwnLCAnficsICd0cnVlJywgJ2ZhbHNlJykpOgpyZXR1cm4gIickdmFsdWUnIjsKZGVmYXVsdDoKcmV0dXJuICR2YWx1ZTsKfQp9CgoKCgoKCgoKCgpwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBkdW1wQXJyYXkoJHZhbHVlLCAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgJG9iamVjdFN1cHBvcnQpCnsKCiAka2V5cyA9IGFycmF5X2tleXMoJHZhbHVlKTsKaWYgKCgxID09IGNvdW50KCRrZXlzKSAmJiAnMCcgPT0gJGtleXNbMF0pCnx8IChjb3VudCgka2V5cykgPiAxICYmIGFycmF5X3JlZHVjZSgka2V5cywgZnVuY3Rpb24gKCR2LCAkdykgeyByZXR1cm4gKGludGVnZXIpICR2ICsgJHc7IH0sIDApID09IGNvdW50KCRrZXlzKSAqIChjb3VudCgka2V5cykgLSAxKSAvIDIpCikgewokb3V0cHV0ID0gYXJyYXkoKTsKZm9yZWFjaCAoJHZhbHVlIGFzICR2YWwpIHsKJG91dHB1dFtdID0gc2VsZjo6ZHVtcCgkdmFsLCAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgJG9iamVjdFN1cHBvcnQpOwp9CgpyZXR1cm4gc3ByaW50ZignWyVzXScsIGltcGxvZGUoJywgJywgJG91dHB1dCkpOwp9CgoKICRvdXRwdXQgPSBhcnJheSgpOwpmb3JlYWNoICgkdmFsdWUgYXMgJGtleSA9PiAkdmFsKSB7CiRvdXRwdXRbXSA9IHNwcmludGYoJyVzOiAlcycsIHNlbGY6OmR1bXAoJGtleSwgJGV4Y2VwdGlvbk9uSW52YWxpZFR5cGUsICRvYmplY3RTdXBwb3J0KSwgc2VsZjo6ZHVtcCgkdmFsLCAkZXhjZXB0aW9uT25JbnZhbGlkVHlwZSwgJG9iamVjdFN1cHBvcnQpKTsKfQoKcmV0dXJuIHNwcmludGYoJ3sgJXMgfScsIGltcGxvZGUoJywgJywgJG91dHB1dCkpOwp9CgoKCgoKCgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVNjYWxhcigkc2NhbGFyLCAkZGVsaW1pdGVycyA9IG51bGwsICRzdHJpbmdEZWxpbWl0ZXJzID0gYXJyYXkoJyInLCAiJyIpLCAmJGkgPSAwLCAkZXZhbHVhdGUgPSB0cnVlKQp7CmlmIChpbl9hcnJheSgkc2NhbGFyWyRpXSwgJHN0cmluZ0RlbGltaXRlcnMpKSB7CgogJG91dHB1dCA9IHNlbGY6OnBhcnNlUXVvdGVkU2NhbGFyKCRzY2FsYXIsICRpKTsKCmlmIChudWxsICE9PSAkZGVsaW1pdGVycykgewokdG1wID0gbHRyaW0oc3Vic3RyKCRzY2FsYXIsICRpKSwgJyAnKTsKaWYgKCFpbl9hcnJheSgkdG1wWzBdLCAkZGVsaW1pdGVycykpIHsKdGhyb3cgbmV3IFBhcnNlRXhjZXB0aW9uKHNwcmludGYoJ1VuZXhwZWN0ZWQgY2hhcmFjdGVycyAoJXMpLicsIHN1YnN0cigkc2NhbGFyLCAkaSkpKTsKfQp9Cn0gZWxzZSB7CgogaWYgKCEkZGVsaW1pdGVycykgewokb3V0cHV0ID0gc3Vic3RyKCRzY2FsYXIsICRpKTsKJGkgKz0gc3RybGVuKCRvdXRwdXQpOwoKCiBpZiAoZmFsc2UgIT09ICRzdHJwb3MgPSBzdHJwb3MoJG91dHB1dCwgJyAjJykpIHsKJG91dHB1dCA9IHJ0cmltKHN1YnN0cigkb3V0cHV0LCAwLCAkc3RycG9zKSk7Cn0KfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eKC4rPykoJy5pbXBsb2RlKCd8JywgJGRlbGltaXRlcnMpLicpLycsIHN1YnN0cigkc2NhbGFyLCAkaSksICRtYXRjaCkpIHsKJG91dHB1dCA9ICRtYXRjaFsxXTsKJGkgKz0gc3RybGVuKCRvdXRwdXQpOwp9IGVsc2Ugewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oc3ByaW50ZignTWFsZm9ybWVkIGlubGluZSBZQU1MIHN0cmluZyAoJXMpLicsICRzY2FsYXIpKTsKfQoKJG91dHB1dCA9ICRldmFsdWF0ZSA/IHNlbGY6OmV2YWx1YXRlU2NhbGFyKCRvdXRwdXQpIDogJG91dHB1dDsKfQoKcmV0dXJuICRvdXRwdXQ7Cn0KCgoKCgoKCgoKCgpwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVF1b3RlZFNjYWxhcigkc2NhbGFyLCAmJGkpCnsKaWYgKCFwcmVnX21hdGNoKCcvJy5zZWxmOjpSRUdFWF9RVU9URURfU1RSSU5HLicvQXUnLCBzdWJzdHIoJHNjYWxhciwgJGkpLCAkbWF0Y2gpKSB7CnRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihzcHJpbnRmKCdNYWxmb3JtZWQgaW5saW5lIFlBTUwgc3RyaW5nICglcykuJywgc3Vic3RyKCRzY2FsYXIsICRpKSkpOwp9Cgokb3V0cHV0ID0gc3Vic3RyKCRtYXRjaFswXSwgMSwgc3RybGVuKCRtYXRjaFswXSkgLSAyKTsKCiR1bmVzY2FwZXIgPSBuZXcgVW5lc2NhcGVyKCk7CmlmICgnIicgPT0gJHNjYWxhclskaV0pIHsKJG91dHB1dCA9ICR1bmVzY2FwZXItPnVuZXNjYXBlRG91YmxlUXVvdGVkU3RyaW5nKCRvdXRwdXQpOwp9IGVsc2Ugewokb3V0cHV0ID0gJHVuZXNjYXBlci0+dW5lc2NhcGVTaW5nbGVRdW90ZWRTdHJpbmcoJG91dHB1dCk7Cn0KCiRpICs9IHN0cmxlbigkbWF0Y2hbMF0pOwoKcmV0dXJuICRvdXRwdXQ7Cn0KCgoKCgoKCgoKCgpwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiBwYXJzZVNlcXVlbmNlKCRzZXF1ZW5jZSwgJiRpID0gMCkKewokb3V0cHV0ID0gYXJyYXkoKTsKJGxlbiA9IHN0cmxlbigkc2VxdWVuY2UpOwokaSArPSAxOwoKCiB3aGlsZSAoJGkgPCAkbGVuKSB7CnN3aXRjaCAoJHNlcXVlbmNlWyRpXSkgewpjYXNlICdbJzoKCiAkb3V0cHV0W10gPSBzZWxmOjpwYXJzZVNlcXVlbmNlKCRzZXF1ZW5jZSwgJGkpOwpicmVhazsKY2FzZSAneyc6CgogJG91dHB1dFtdID0gc2VsZjo6cGFyc2VNYXBwaW5nKCRzZXF1ZW5jZSwgJGkpOwpicmVhazsKY2FzZSAnXSc6CnJldHVybiAkb3V0cHV0OwpjYXNlICcsJzoKY2FzZSAnICc6CmJyZWFrOwpkZWZhdWx0OgokaXNRdW90ZWQgPSBpbl9hcnJheSgkc2VxdWVuY2VbJGldLCBhcnJheSgnIicsICInIikpOwokdmFsdWUgPSBzZWxmOjpwYXJzZVNjYWxhcigkc2VxdWVuY2UsIGFycmF5KCcsJywgJ10nKSwgYXJyYXkoJyInLCAiJyIpLCAkaSk7CgppZiAoISRpc1F1b3RlZCAmJiBmYWxzZSAhPT0gc3RycG9zKCR2YWx1ZSwgJzogJykpIHsKCiB0cnkgewokdmFsdWUgPSBzZWxmOjpwYXJzZU1hcHBpbmcoJ3snLiR2YWx1ZS4nfScpOwp9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CgogfQp9Cgokb3V0cHV0W10gPSAkdmFsdWU7CgotLSRpOwp9CgorKyRpOwp9Cgp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oc3ByaW50ZignTWFsZm9ybWVkIGlubGluZSBZQU1MIHN0cmluZyAlcycsICRzZXF1ZW5jZSkpOwp9CgoKCgoKCgoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gcGFyc2VNYXBwaW5nKCRtYXBwaW5nLCAmJGkgPSAwKQp7CiRvdXRwdXQgPSBhcnJheSgpOwokbGVuID0gc3RybGVuKCRtYXBwaW5nKTsKJGkgKz0gMTsKCgogd2hpbGUgKCRpIDwgJGxlbikgewpzd2l0Y2ggKCRtYXBwaW5nWyRpXSkgewpjYXNlICcgJzoKY2FzZSAnLCc6CisrJGk7CmNvbnRpbnVlIDI7CmNhc2UgJ30nOgpyZXR1cm4gJG91dHB1dDsKfQoKCiAka2V5ID0gc2VsZjo6cGFyc2VTY2FsYXIoJG1hcHBpbmcsIGFycmF5KCc6JywgJyAnKSwgYXJyYXkoJyInLCAiJyIpLCAkaSwgZmFsc2UpOwoKCiAkZG9uZSA9IGZhbHNlOwp3aGlsZSAoJGkgPCAkbGVuKSB7CnN3aXRjaCAoJG1hcHBpbmdbJGldKSB7CmNhc2UgJ1snOgoKICRvdXRwdXRbJGtleV0gPSBzZWxmOjpwYXJzZVNlcXVlbmNlKCRtYXBwaW5nLCAkaSk7CiRkb25lID0gdHJ1ZTsKYnJlYWs7CmNhc2UgJ3snOgoKICRvdXRwdXRbJGtleV0gPSBzZWxmOjpwYXJzZU1hcHBpbmcoJG1hcHBpbmcsICRpKTsKJGRvbmUgPSB0cnVlOwpicmVhazsKY2FzZSAnOic6CmNhc2UgJyAnOgpicmVhazsKZGVmYXVsdDoKJG91dHB1dFska2V5XSA9IHNlbGY6OnBhcnNlU2NhbGFyKCRtYXBwaW5nLCBhcnJheSgnLCcsICd9JyksIGFycmF5KCciJywgIiciKSwgJGkpOwokZG9uZSA9IHRydWU7Ci0tJGk7Cn0KCisrJGk7CgppZiAoJGRvbmUpIHsKY29udGludWUgMjsKfQp9Cn0KCnRocm93IG5ldyBQYXJzZUV4Y2VwdGlvbihzcHJpbnRmKCdNYWxmb3JtZWQgaW5saW5lIFlBTUwgc3RyaW5nICVzJywgJG1hcHBpbmcpKTsKfQoKCgoKCgoKCnByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGV2YWx1YXRlU2NhbGFyKCRzY2FsYXIpCnsKJHNjYWxhciA9IHRyaW0oJHNjYWxhcik7Cgpzd2l0Y2ggKHRydWUpIHsKY2FzZSAnbnVsbCcgPT0gc3RydG9sb3dlcigkc2NhbGFyKToKY2FzZSAnJyA9PSAkc2NhbGFyOgpjYXNlICd+JyA9PSAkc2NhbGFyOgpyZXR1cm4gbnVsbDsKY2FzZSAwID09PSBzdHJwb3MoJHNjYWxhciwgJyFzdHInKToKcmV0dXJuIChzdHJpbmcpIHN1YnN0cigkc2NhbGFyLCA1KTsKY2FzZSAwID09PSBzdHJwb3MoJHNjYWxhciwgJyEgJyk6CnJldHVybiBpbnR2YWwoc2VsZjo6cGFyc2VTY2FsYXIoc3Vic3RyKCRzY2FsYXIsIDIpKSk7CmNhc2UgMCA9PT0gc3RycG9zKCRzY2FsYXIsICchIXBocC9vYmplY3Q6Jyk6CmlmIChzZWxmOjokb2JqZWN0U3VwcG9ydCkgewpyZXR1cm4gdW5zZXJpYWxpemUoc3Vic3RyKCRzY2FsYXIsIDEzKSk7Cn0KCmlmIChzZWxmOjokZXhjZXB0aW9uT25JbnZhbGlkVHlwZSkgewp0aHJvdyBuZXcgUGFyc2VFeGNlcHRpb24oJ09iamVjdCBzdXBwb3J0IHdoZW4gcGFyc2luZyBhIFlBTUwgZmlsZSBoYXMgYmVlbiBkaXNhYmxlZC4nKTsKfQoKcmV0dXJuIG51bGw7CmNhc2UgY3R5cGVfZGlnaXQoJHNjYWxhcik6CiRyYXcgPSAkc2NhbGFyOwokY2FzdCA9IGludHZhbCgkc2NhbGFyKTsKCnJldHVybiAnMCcgPT0gJHNjYWxhclswXSA/IG9jdGRlYygkc2NhbGFyKSA6ICgoKHN0cmluZykgJHJhdyA9PSAoc3RyaW5nKSAkY2FzdCkgPyAkY2FzdCA6ICRyYXcpOwpjYXNlICctJyA9PT0gJHNjYWxhclswXSAmJiBjdHlwZV9kaWdpdChzdWJzdHIoJHNjYWxhciwgMSkpOgokcmF3ID0gJHNjYWxhcjsKJGNhc3QgPSBpbnR2YWwoJHNjYWxhcik7CgpyZXR1cm4gJzAnID09ICRzY2FsYXJbMV0gPyBvY3RkZWMoJHNjYWxhcikgOiAoKChzdHJpbmcpICRyYXcgPT0gKHN0cmluZykgJGNhc3QpID8gJGNhc3QgOiAkcmF3KTsKY2FzZSAndHJ1ZScgPT09IHN0cnRvbG93ZXIoJHNjYWxhcik6CnJldHVybiB0cnVlOwpjYXNlICdmYWxzZScgPT09IHN0cnRvbG93ZXIoJHNjYWxhcik6CnJldHVybiBmYWxzZTsKY2FzZSBpc19udW1lcmljKCRzY2FsYXIpOgpyZXR1cm4gJzB4JyA9PSAkc2NhbGFyWzBdLiRzY2FsYXJbMV0gPyBoZXhkZWMoJHNjYWxhcikgOiBmbG9hdHZhbCgkc2NhbGFyKTsKY2FzZSAwID09IHN0cmNhc2VjbXAoJHNjYWxhciwgJy5pbmYnKToKY2FzZSAwID09IHN0cmNhc2VjbXAoJHNjYWxhciwgJy5OYU4nKToKcmV0dXJuIC1sb2coMCk7CmNhc2UgMCA9PSBzdHJjYXNlY21wKCRzY2FsYXIsICctLmluZicpOgpyZXR1cm4gbG9nKDApOwpjYXNlIHByZWdfbWF0Y2goJy9eKC18XCspP1swLTksXSsoXC5bMC05XSspPyQvJywgJHNjYWxhcik6CnJldHVybiBmbG9hdHZhbChzdHJfcmVwbGFjZSgnLCcsICcnLCAkc2NhbGFyKSk7CmNhc2UgcHJlZ19tYXRjaChzZWxmOjpnZXRUaW1lc3RhbXBSZWdleCgpLCAkc2NhbGFyKToKcmV0dXJuIHN0cnRvdGltZSgkc2NhbGFyKTsKZGVmYXVsdDoKcmV0dXJuIChzdHJpbmcpICRzY2FsYXI7Cn0KfQoKCgoKCgoKCnByaXZhdGUgc3RhdGljIGZ1bmN0aW9uIGdldFRpbWVzdGFtcFJlZ2V4KCkKewpyZXR1cm4gPDw8RU9GCiAgICAgICAgfl4KICAgICAgICAoP1A8eWVhcj5bMC05XVswLTldWzAtOV1bMC05XSkKICAgICAgICAtKD9QPG1vbnRoPlswLTldWzAtOV0/KQogICAgICAgIC0oP1A8ZGF5PlswLTldWzAtOV0/KQogICAgICAgICg/Oig/OltUdF18WyBcdF0rKQogICAgICAgICg/UDxob3VyPlswLTldWzAtOV0/KQogICAgICAgIDooP1A8bWludXRlPlswLTldWzAtOV0pCiAgICAgICAgOig/UDxzZWNvbmQ+WzAtOV1bMC05XSkKICAgICAgICAoPzpcLig/UDxmcmFjdGlvbj5bMC05XSopKT8KICAgICAgICAoPzpbIFx0XSooP1A8dHo+WnwoP1A8dHpfc2lnbj5bLStdKSg/UDx0el9ob3VyPlswLTldWzAtOV0/KQogICAgICAgICg/OjooP1A8dHpfbWludXRlPlswLTldWzAtOV0pKT8pKT8pPwogICAgICAgICR+eApFT0Y7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQ29tbWFuZDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxEZXNjcmlwdG9ySGVscGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dE9wdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgoKCmNsYXNzIEhlbHBDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CnByaXZhdGUgJGNvbW1hbmQ7CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlKCkKewokdGhpcy0+aWdub3JlVmFsaWRhdGlvbkVycm9ycygpOwoKJHRoaXMKLT5zZXROYW1lKCdoZWxwJykKLT5zZXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRBcmd1bWVudCgnY29tbWFuZF9uYW1lJywgSW5wdXRBcmd1bWVudDo6T1BUSU9OQUwsICdUaGUgY29tbWFuZCBuYW1lJywgJ2hlbHAnKSwKbmV3IElucHV0T3B0aW9uKCd4bWwnLCBudWxsLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ1RvIG91dHB1dCBoZWxwIGFzIFhNTCcpLApuZXcgSW5wdXRPcHRpb24oJ2Zvcm1hdCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9SRVFVSVJFRCwgJ1RvIG91dHB1dCBoZWxwIGluIG90aGVyIGZvcm1hdHMnLCAndHh0JyksCm5ldyBJbnB1dE9wdGlvbigncmF3JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdUbyBvdXRwdXQgcmF3IGNvbW1hbmQgaGVscCcpLAopKQotPnNldERlc2NyaXB0aW9uKCdEaXNwbGF5cyBoZWxwIGZvciBhIGNvbW1hbmQnKQotPnNldEhlbHAoPDw8RU9GClRoZSA8aW5mbz4lY29tbWFuZC5uYW1lJTwvaW5mbz4gY29tbWFuZCBkaXNwbGF5cyBoZWxwIGZvciBhIGdpdmVuIGNvbW1hbmQ6CgogIDxpbmZvPnBocCAlY29tbWFuZC5mdWxsX25hbWUlIGxpc3Q8L2luZm8+CgpZb3UgY2FuIGFsc28gb3V0cHV0IHRoZSBoZWxwIGluIG90aGVyIGZvcm1hdHMgYnkgdXNpbmcgdGhlIDxjb21tZW50Pi0tZm9ybWF0PC9jb21tZW50PiBvcHRpb246CgogIDxpbmZvPnBocCAlY29tbWFuZC5mdWxsX25hbWUlIC0tZm9ybWF0PXhtbCBsaXN0PC9pbmZvPgoKVG8gZGlzcGxheSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgY29tbWFuZHMsIHBsZWFzZSB1c2UgdGhlIDxpbmZvPmxpc3Q8L2luZm8+IGNvbW1hbmQuCkVPRgopCjsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q29tbWFuZChDb21tYW5kICRjb21tYW5kKQp7CiR0aGlzLT5jb21tYW5kID0gJGNvbW1hbmQ7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5jb21tYW5kKSB7CiR0aGlzLT5jb21tYW5kID0gJHRoaXMtPmdldEFwcGxpY2F0aW9uKCktPmZpbmQoJGlucHV0LT5nZXRBcmd1bWVudCgnY29tbWFuZF9uYW1lJykpOwp9CgppZiAoJGlucHV0LT5nZXRPcHRpb24oJ3htbCcpKSB7CiRpbnB1dC0+c2V0T3B0aW9uKCdmb3JtYXQnLCAneG1sJyk7Cn0KCiRoZWxwZXIgPSBuZXcgRGVzY3JpcHRvckhlbHBlcigpOwokaGVscGVyLT5kZXNjcmliZSgkb3V0cHV0LCAkdGhpcy0+Y29tbWFuZCwgYXJyYXkoCidmb3JtYXQnID0+ICRpbnB1dC0+Z2V0T3B0aW9uKCdmb3JtYXQnKSwKJ3JhdycgPT4gJGlucHV0LT5nZXRPcHRpb24oJ3JhdycpLAopKTsKCiR0aGlzLT5jb21tYW5kID0gbnVsbDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvclxUZXh0RGVzY3JpcHRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvclxYbWxEZXNjcmlwdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dERlZmluaXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XEJ1ZmZlcmVkT3V0cHV0Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxBcHBsaWNhdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyXEhlbHBlclNldDsKCgoKCgoKCgpjbGFzcyBDb21tYW5kCnsKcHJpdmF0ZSAkYXBwbGljYXRpb247CnByaXZhdGUgJG5hbWU7CnByaXZhdGUgJGFsaWFzZXMgPSBhcnJheSgpOwpwcml2YXRlICRkZWZpbml0aW9uOwpwcml2YXRlICRoZWxwOwpwcml2YXRlICRkZXNjcmlwdGlvbjsKcHJpdmF0ZSAkaWdub3JlVmFsaWRhdGlvbkVycm9ycyA9IGZhbHNlOwpwcml2YXRlICRhcHBsaWNhdGlvbkRlZmluaXRpb25NZXJnZWQgPSBmYWxzZTsKcHJpdmF0ZSAkYXBwbGljYXRpb25EZWZpbml0aW9uTWVyZ2VkV2l0aEFyZ3MgPSBmYWxzZTsKcHJpdmF0ZSAkY29kZTsKcHJpdmF0ZSAkc3lub3BzaXM7CnByaXZhdGUgJGhlbHBlclNldDsKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSA9IG51bGwpCnsKJHRoaXMtPmRlZmluaXRpb24gPSBuZXcgSW5wdXREZWZpbml0aW9uKCk7CgppZiAobnVsbCAhPT0gJG5hbWUpIHsKJHRoaXMtPnNldE5hbWUoJG5hbWUpOwp9CgokdGhpcy0+Y29uZmlndXJlKCk7CgppZiAoISR0aGlzLT5uYW1lKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1RoZSBjb21tYW5kIG5hbWUgY2Fubm90IGJlIGVtcHR5LicpOwp9Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlnbm9yZVZhbGlkYXRpb25FcnJvcnMoKQp7CiR0aGlzLT5pZ25vcmVWYWxpZGF0aW9uRXJyb3JzID0gdHJ1ZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBcHBsaWNhdGlvbihBcHBsaWNhdGlvbiAkYXBwbGljYXRpb24gPSBudWxsKQp7CiR0aGlzLT5hcHBsaWNhdGlvbiA9ICRhcHBsaWNhdGlvbjsKaWYgKCRhcHBsaWNhdGlvbikgewokdGhpcy0+c2V0SGVscGVyU2V0KCRhcHBsaWNhdGlvbi0+Z2V0SGVscGVyU2V0KCkpOwp9IGVsc2UgewokdGhpcy0+aGVscGVyU2V0ID0gbnVsbDsKfQp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRIZWxwZXJTZXQoSGVscGVyU2V0ICRoZWxwZXJTZXQpCnsKJHRoaXMtPmhlbHBlclNldCA9ICRoZWxwZXJTZXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEhlbHBlclNldCgpCnsKcmV0dXJuICR0aGlzLT5oZWxwZXJTZXQ7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXBwbGljYXRpb24oKQp7CnJldHVybiAkdGhpcy0+YXBwbGljYXRpb247Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzRW5hYmxlZCgpCnsKcmV0dXJuIHRydWU7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7Cn0KCgoKCgoKCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZXhlY3V0ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1lvdSBtdXN0IG92ZXJyaWRlIHRoZSBleGVjdXRlKCkgbWV0aG9kIGluIHRoZSBjb25jcmV0ZSBjb21tYW5kIGNsYXNzLicpOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW50ZXJhY3QoSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewp9CgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdGlhbGl6ZShJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7Cn0KCgoKCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcnVuKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKCiAkdGhpcy0+Z2V0U3lub3BzaXMoKTsKCgogJHRoaXMtPm1lcmdlQXBwbGljYXRpb25EZWZpbml0aW9uKCk7CgoKIHRyeSB7CiRpbnB1dC0+YmluZCgkdGhpcy0+ZGVmaW5pdGlvbik7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKaWYgKCEkdGhpcy0+aWdub3JlVmFsaWRhdGlvbkVycm9ycykgewp0aHJvdyAkZTsKfQp9CgokdGhpcy0+aW5pdGlhbGl6ZSgkaW5wdXQsICRvdXRwdXQpOwoKaWYgKCRpbnB1dC0+aXNJbnRlcmFjdGl2ZSgpKSB7CiR0aGlzLT5pbnRlcmFjdCgkaW5wdXQsICRvdXRwdXQpOwp9CgokaW5wdXQtPnZhbGlkYXRlKCk7CgppZiAoJHRoaXMtPmNvZGUpIHsKJHN0YXR1c0NvZGUgPSBjYWxsX3VzZXJfZnVuYygkdGhpcy0+Y29kZSwgJGlucHV0LCAkb3V0cHV0KTsKfSBlbHNlIHsKJHN0YXR1c0NvZGUgPSAkdGhpcy0+ZXhlY3V0ZSgkaW5wdXQsICRvdXRwdXQpOwp9CgpyZXR1cm4gaXNfbnVtZXJpYygkc3RhdHVzQ29kZSkgPyAoaW50KSAkc3RhdHVzQ29kZSA6IDA7Cn0KCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q29kZSgkY29kZSkKewppZiAoIWlzX2NhbGxhYmxlKCRjb2RlKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignSW52YWxpZCBjYWxsYWJsZSBwcm92aWRlZCB0byBDb21tYW5kOjpzZXRDb2RlLicpOwp9CgokdGhpcy0+Y29kZSA9ICRjb2RlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG1lcmdlQXBwbGljYXRpb25EZWZpbml0aW9uKCRtZXJnZUFyZ3MgPSB0cnVlKQp7CmlmIChudWxsID09PSAkdGhpcy0+YXBwbGljYXRpb24gfHwgKHRydWUgPT09ICR0aGlzLT5hcHBsaWNhdGlvbkRlZmluaXRpb25NZXJnZWQgJiYgKCR0aGlzLT5hcHBsaWNhdGlvbkRlZmluaXRpb25NZXJnZWRXaXRoQXJncyB8fCAhJG1lcmdlQXJncykpKSB7CnJldHVybjsKfQoKaWYgKCRtZXJnZUFyZ3MpIHsKJGN1cnJlbnRBcmd1bWVudHMgPSAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnRzKCk7CiR0aGlzLT5kZWZpbml0aW9uLT5zZXRBcmd1bWVudHMoJHRoaXMtPmFwcGxpY2F0aW9uLT5nZXREZWZpbml0aW9uKCktPmdldEFyZ3VtZW50cygpKTsKJHRoaXMtPmRlZmluaXRpb24tPmFkZEFyZ3VtZW50cygkY3VycmVudEFyZ3VtZW50cyk7Cn0KCiR0aGlzLT5kZWZpbml0aW9uLT5hZGRPcHRpb25zKCR0aGlzLT5hcHBsaWNhdGlvbi0+Z2V0RGVmaW5pdGlvbigpLT5nZXRPcHRpb25zKCkpOwoKJHRoaXMtPmFwcGxpY2F0aW9uRGVmaW5pdGlvbk1lcmdlZCA9IHRydWU7CmlmICgkbWVyZ2VBcmdzKSB7CiR0aGlzLT5hcHBsaWNhdGlvbkRlZmluaXRpb25NZXJnZWRXaXRoQXJncyA9IHRydWU7Cn0KfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERlZmluaXRpb24oJGRlZmluaXRpb24pCnsKaWYgKCRkZWZpbml0aW9uIGluc3RhbmNlb2YgSW5wdXREZWZpbml0aW9uKSB7CiR0aGlzLT5kZWZpbml0aW9uID0gJGRlZmluaXRpb247Cn0gZWxzZSB7CiR0aGlzLT5kZWZpbml0aW9uLT5zZXREZWZpbml0aW9uKCRkZWZpbml0aW9uKTsKfQoKJHRoaXMtPmFwcGxpY2F0aW9uRGVmaW5pdGlvbk1lcmdlZCA9IGZhbHNlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERlZmluaXRpb24oKQp7CnJldHVybiAkdGhpcy0+ZGVmaW5pdGlvbjsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYXRpdmVEZWZpbml0aW9uKCkKewpyZXR1cm4gJHRoaXMtPmdldERlZmluaXRpb24oKTsKfQoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZEFyZ3VtZW50KCRuYW1lLCAkbW9kZSA9IG51bGwsICRkZXNjcmlwdGlvbiA9ICcnLCAkZGVmYXVsdCA9IG51bGwpCnsKJHRoaXMtPmRlZmluaXRpb24tPmFkZEFyZ3VtZW50KG5ldyBJbnB1dEFyZ3VtZW50KCRuYW1lLCAkbW9kZSwgJGRlc2NyaXB0aW9uLCAkZGVmYXVsdCkpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZE9wdGlvbigkbmFtZSwgJHNob3J0Y3V0ID0gbnVsbCwgJG1vZGUgPSBudWxsLCAkZGVzY3JpcHRpb24gPSAnJywgJGRlZmF1bHQgPSBudWxsKQp7CiR0aGlzLT5kZWZpbml0aW9uLT5hZGRPcHRpb24obmV3IElucHV0T3B0aW9uKCRuYW1lLCAkc2hvcnRjdXQsICRtb2RlLCAkZGVzY3JpcHRpb24sICRkZWZhdWx0KSk7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0TmFtZSgkbmFtZSkKewokdGhpcy0+dmFsaWRhdGVOYW1lKCRuYW1lKTsKCiR0aGlzLT5uYW1lID0gJG5hbWU7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpCnsKcmV0dXJuICR0aGlzLT5uYW1lOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGVzY3JpcHRpb24oJGRlc2NyaXB0aW9uKQp7CiR0aGlzLT5kZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbjsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbigpCnsKcmV0dXJuICR0aGlzLT5kZXNjcmlwdGlvbjsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEhlbHAoJGhlbHApCnsKJHRoaXMtPmhlbHAgPSAkaGVscDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRIZWxwKCkKewpyZXR1cm4gJHRoaXMtPmhlbHA7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRQcm9jZXNzZWRIZWxwKCkKewokbmFtZSA9ICR0aGlzLT5uYW1lOwoKJHBsYWNlaG9sZGVycyA9IGFycmF5KAonJWNvbW1hbmQubmFtZSUnLAonJWNvbW1hbmQuZnVsbF9uYW1lJScKKTsKJHJlcGxhY2VtZW50cyA9IGFycmF5KAokbmFtZSwKJF9TRVJWRVJbJ1BIUF9TRUxGJ10uJyAnLiRuYW1lCik7CgpyZXR1cm4gc3RyX3JlcGxhY2UoJHBsYWNlaG9sZGVycywgJHJlcGxhY2VtZW50cywgJHRoaXMtPmdldEhlbHAoKSk7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEFsaWFzZXMoJGFsaWFzZXMpCnsKZm9yZWFjaCAoJGFsaWFzZXMgYXMgJGFsaWFzKSB7CiR0aGlzLT52YWxpZGF0ZU5hbWUoJGFsaWFzKTsKfQoKJHRoaXMtPmFsaWFzZXMgPSAkYWxpYXNlczsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBbGlhc2VzKCkKewpyZXR1cm4gJHRoaXMtPmFsaWFzZXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN5bm9wc2lzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnN5bm9wc2lzKSB7CiR0aGlzLT5zeW5vcHNpcyA9IHRyaW0oc3ByaW50ZignJXMgJXMnLCAkdGhpcy0+bmFtZSwgJHRoaXMtPmRlZmluaXRpb24tPmdldFN5bm9wc2lzKCkpKTsKfQoKcmV0dXJuICR0aGlzLT5zeW5vcHNpczsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SGVscGVyKCRuYW1lKQp7CnJldHVybiAkdGhpcy0+aGVscGVyU2V0LT5nZXQoJG5hbWUpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFzVGV4dCgpCnsKJGRlc2NyaXB0b3IgPSBuZXcgVGV4dERlc2NyaXB0b3IoKTsKJG91dHB1dCA9IG5ldyBCdWZmZXJlZE91dHB1dChCdWZmZXJlZE91dHB1dDo6VkVSQk9TSVRZX05PUk1BTCwgdHJ1ZSk7CiRkZXNjcmlwdG9yLT5kZXNjcmliZSgkb3V0cHV0LCAkdGhpcywgYXJyYXkoJ3Jhd19vdXRwdXQnID0+IHRydWUpKTsKCnJldHVybiAkb3V0cHV0LT5mZXRjaCgpOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYXNYbWwoJGFzRG9tID0gZmFsc2UpCnsKJGRlc2NyaXB0b3IgPSBuZXcgWG1sRGVzY3JpcHRvcigpOwoKaWYgKCRhc0RvbSkgewpyZXR1cm4gJGRlc2NyaXB0b3ItPmdldENvbW1hbmREb2N1bWVudCgkdGhpcyk7Cn0KCiRvdXRwdXQgPSBuZXcgQnVmZmVyZWRPdXRwdXQoKTsKJGRlc2NyaXB0b3ItPmRlc2NyaWJlKCRvdXRwdXQsICR0aGlzKTsKCnJldHVybiAkb3V0cHV0LT5mZXRjaCgpOwp9CgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHZhbGlkYXRlTmFtZSgkbmFtZSkKewppZiAoIXByZWdfbWF0Y2goJy9eW15cOl0rKyhcOlteXDpdKyspKiQvJywgJG5hbWUpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0NvbW1hbmQgbmFtZSAiJXMiIGlzIGludmFsaWQuJywgJG5hbWUpKTsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmQ7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXJcRGVzY3JpcHRvckhlbHBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dERlZmluaXRpb247CgoKCgoKCmNsYXNzIExpc3RDb21tYW5kIGV4dGVuZHMgQ29tbWFuZAp7CgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjb25maWd1cmUoKQp7CiR0aGlzCi0+c2V0TmFtZSgnbGlzdCcpCi0+c2V0RGVmaW5pdGlvbigkdGhpcy0+Y3JlYXRlRGVmaW5pdGlvbigpKQotPnNldERlc2NyaXB0aW9uKCdMaXN0cyBjb21tYW5kcycpCi0+c2V0SGVscCg8PDxFT0YKVGhlIDxpbmZvPiVjb21tYW5kLm5hbWUlPC9pbmZvPiBjb21tYW5kIGxpc3RzIGFsbCBjb21tYW5kczoKCiAgPGluZm8+cGhwICVjb21tYW5kLmZ1bGxfbmFtZSU8L2luZm8+CgpZb3UgY2FuIGFsc28gZGlzcGxheSB0aGUgY29tbWFuZHMgZm9yIGEgc3BlY2lmaWMgbmFtZXNwYWNlOgoKICA8aW5mbz5waHAgJWNvbW1hbmQuZnVsbF9uYW1lJSB0ZXN0PC9pbmZvPgoKWW91IGNhbiBhbHNvIG91dHB1dCB0aGUgaW5mb3JtYXRpb24gaW4gb3RoZXIgZm9ybWF0cyBieSB1c2luZyB0aGUgPGNvbW1lbnQ+LS1mb3JtYXQ8L2NvbW1lbnQ+IG9wdGlvbjoKCiAgPGluZm8+cGhwICVjb21tYW5kLmZ1bGxfbmFtZSUgLS1mb3JtYXQ9eG1sPC9pbmZvPgoKSXQncyBhbHNvIHBvc3NpYmxlIHRvIGdldCByYXcgbGlzdCBvZiBjb21tYW5kcyAodXNlZnVsIGZvciBlbWJlZGRpbmcgY29tbWFuZCBydW5uZXIpOgoKICA8aW5mbz5waHAgJWNvbW1hbmQuZnVsbF9uYW1lJSAtLXJhdzwvaW5mbz4KRU9GCikKOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmF0aXZlRGVmaW5pdGlvbigpCnsKcmV0dXJuICR0aGlzLT5jcmVhdGVEZWZpbml0aW9uKCk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBleGVjdXRlKElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQpCnsKaWYgKCRpbnB1dC0+Z2V0T3B0aW9uKCd4bWwnKSkgewokaW5wdXQtPnNldE9wdGlvbignZm9ybWF0JywgJ3htbCcpOwp9CgokaGVscGVyID0gbmV3IERlc2NyaXB0b3JIZWxwZXIoKTsKJGhlbHBlci0+ZGVzY3JpYmUoJG91dHB1dCwgJHRoaXMtPmdldEFwcGxpY2F0aW9uKCksIGFycmF5KAonZm9ybWF0JyA9PiAkaW5wdXQtPmdldE9wdGlvbignZm9ybWF0JyksCidyYXdfdGV4dCcgPT4gJGlucHV0LT5nZXRPcHRpb24oJ3JhdycpLAonbmFtZXNwYWNlJyA9PiAkaW5wdXQtPmdldEFyZ3VtZW50KCduYW1lc3BhY2UnKSwKKSk7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gY3JlYXRlRGVmaW5pdGlvbigpCnsKcmV0dXJuIG5ldyBJbnB1dERlZmluaXRpb24oYXJyYXkoCm5ldyBJbnB1dEFyZ3VtZW50KCduYW1lc3BhY2UnLCBJbnB1dEFyZ3VtZW50OjpPUFRJT05BTCwgJ1RoZSBuYW1lc3BhY2UgbmFtZScpLApuZXcgSW5wdXRPcHRpb24oJ3htbCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnVG8gb3V0cHV0IGxpc3QgYXMgWE1MJyksCm5ldyBJbnB1dE9wdGlvbigncmF3JywgbnVsbCwgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdUbyBvdXRwdXQgcmF3IGNvbW1hbmQgbGlzdCcpLApuZXcgSW5wdXRPcHRpb24oJ2Zvcm1hdCcsIG51bGwsIElucHV0T3B0aW9uOjpWQUxVRV9SRVFVSVJFRCwgJ1RvIG91dHB1dCBsaXN0IGluIG90aGVyIGZvcm1hdHMnLCAndHh0JyksCikpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXFRlc3RlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEFwcGxpY2F0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxBcnJheUlucHV0Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XFN0cmVhbU91dHB1dDsKCgoKCgoKCgoKCgpjbGFzcyBBcHBsaWNhdGlvblRlc3Rlcgp7CnByaXZhdGUgJGFwcGxpY2F0aW9uOwpwcml2YXRlICRpbnB1dDsKcHJpdmF0ZSAkb3V0cHV0Owpwcml2YXRlICRzdGF0dXNDb2RlOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQXBwbGljYXRpb24gJGFwcGxpY2F0aW9uKQp7CiR0aGlzLT5hcHBsaWNhdGlvbiA9ICRhcHBsaWNhdGlvbjsKfQoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcnVuKGFycmF5ICRpbnB1dCwgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT5pbnB1dCA9IG5ldyBBcnJheUlucHV0KCRpbnB1dCk7CmlmIChpc3NldCgkb3B0aW9uc1snaW50ZXJhY3RpdmUnXSkpIHsKJHRoaXMtPmlucHV0LT5zZXRJbnRlcmFjdGl2ZSgkb3B0aW9uc1snaW50ZXJhY3RpdmUnXSk7Cn0KCiR0aGlzLT5vdXRwdXQgPSBuZXcgU3RyZWFtT3V0cHV0KGZvcGVuKCdwaHA6Ly9tZW1vcnknLCAndycsIGZhbHNlKSk7CmlmIChpc3NldCgkb3B0aW9uc1snZGVjb3JhdGVkJ10pKSB7CiR0aGlzLT5vdXRwdXQtPnNldERlY29yYXRlZCgkb3B0aW9uc1snZGVjb3JhdGVkJ10pOwp9CmlmIChpc3NldCgkb3B0aW9uc1sndmVyYm9zaXR5J10pKSB7CiR0aGlzLT5vdXRwdXQtPnNldFZlcmJvc2l0eSgkb3B0aW9uc1sndmVyYm9zaXR5J10pOwp9CgpyZXR1cm4gJHRoaXMtPnN0YXR1c0NvZGUgPSAkdGhpcy0+YXBwbGljYXRpb24tPnJ1bigkdGhpcy0+aW5wdXQsICR0aGlzLT5vdXRwdXQpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERpc3BsYXkoJG5vcm1hbGl6ZSA9IGZhbHNlKQp7CnJld2luZCgkdGhpcy0+b3V0cHV0LT5nZXRTdHJlYW0oKSk7CgokZGlzcGxheSA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPm91dHB1dC0+Z2V0U3RyZWFtKCkpOwoKaWYgKCRub3JtYWxpemUpIHsKJGRpc3BsYXkgPSBzdHJfcmVwbGFjZShQSFBfRU9MLCAiXG4iLCAkZGlzcGxheSk7Cn0KCnJldHVybiAkZGlzcGxheTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXQoKQp7CnJldHVybiAkdGhpcy0+aW5wdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dCgpCnsKcmV0dXJuICR0aGlzLT5vdXRwdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c0NvZGUoKQp7CnJldHVybiAkdGhpcy0+c3RhdHVzQ29kZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxUZXN0ZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XEFycmF5SW5wdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxTdHJlYW1PdXRwdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBDb21tYW5kVGVzdGVyCnsKcHJpdmF0ZSAkY29tbWFuZDsKcHJpdmF0ZSAkaW5wdXQ7CnByaXZhdGUgJG91dHB1dDsKcHJpdmF0ZSAkc3RhdHVzQ29kZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbW1hbmQgJGNvbW1hbmQpCnsKJHRoaXMtPmNvbW1hbmQgPSAkY29tbWFuZDsKfQoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZShhcnJheSAkaW5wdXQsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewoKIAogaWYgKCFpc3NldCgkaW5wdXRbJ2NvbW1hbmQnXSkKJiYgKG51bGwgIT09ICRhcHBsaWNhdGlvbiA9ICR0aGlzLT5jb21tYW5kLT5nZXRBcHBsaWNhdGlvbigpKQomJiAkYXBwbGljYXRpb24tPmdldERlZmluaXRpb24oKS0+aGFzQXJndW1lbnQoJ2NvbW1hbmQnKQopIHsKJGlucHV0Wydjb21tYW5kJ10gPSAkdGhpcy0+Y29tbWFuZC0+Z2V0TmFtZSgpOwp9CgokdGhpcy0+aW5wdXQgPSBuZXcgQXJyYXlJbnB1dCgkaW5wdXQpOwppZiAoaXNzZXQoJG9wdGlvbnNbJ2ludGVyYWN0aXZlJ10pKSB7CiR0aGlzLT5pbnB1dC0+c2V0SW50ZXJhY3RpdmUoJG9wdGlvbnNbJ2ludGVyYWN0aXZlJ10pOwp9CgokdGhpcy0+b3V0cHV0ID0gbmV3IFN0cmVhbU91dHB1dChmb3BlbigncGhwOi8vbWVtb3J5JywgJ3cnLCBmYWxzZSkpOwppZiAoaXNzZXQoJG9wdGlvbnNbJ2RlY29yYXRlZCddKSkgewokdGhpcy0+b3V0cHV0LT5zZXREZWNvcmF0ZWQoJG9wdGlvbnNbJ2RlY29yYXRlZCddKTsKfQppZiAoaXNzZXQoJG9wdGlvbnNbJ3ZlcmJvc2l0eSddKSkgewokdGhpcy0+b3V0cHV0LT5zZXRWZXJib3NpdHkoJG9wdGlvbnNbJ3ZlcmJvc2l0eSddKTsKfQoKcmV0dXJuICR0aGlzLT5zdGF0dXNDb2RlID0gJHRoaXMtPmNvbW1hbmQtPnJ1bigkdGhpcy0+aW5wdXQsICR0aGlzLT5vdXRwdXQpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERpc3BsYXkoJG5vcm1hbGl6ZSA9IGZhbHNlKQp7CnJld2luZCgkdGhpcy0+b3V0cHV0LT5nZXRTdHJlYW0oKSk7CgokZGlzcGxheSA9IHN0cmVhbV9nZXRfY29udGVudHMoJHRoaXMtPm91dHB1dC0+Z2V0U3RyZWFtKCkpOwoKaWYgKCRub3JtYWxpemUpIHsKJGRpc3BsYXkgPSBzdHJfcmVwbGFjZShQSFBfRU9MLCAiXG4iLCAkZGlzcGxheSk7Cn0KCnJldHVybiAkZGlzcGxheTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXQoKQp7CnJldHVybiAkdGhpcy0+aW5wdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dCgpCnsKcmV0dXJuICR0aGlzLT5vdXRwdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN0YXR1c0NvZGUoKQp7CnJldHVybiAkdGhpcy0+c3RhdHVzQ29kZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxGb3JtYXR0ZXI7CgoKCgpjbGFzcyBPdXRwdXRGb3JtYXR0ZXJTdHlsZVN0YWNrCnsKCgoKcHJpdmF0ZSAkc3R5bGVzOwoKCgoKcHJpdmF0ZSAkZW1wdHlTdHlsZTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KE91dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlICRlbXB0eVN0eWxlID0gbnVsbCkKewokdGhpcy0+ZW1wdHlTdHlsZSA9ICRlbXB0eVN0eWxlID86IG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZSgpOwokdGhpcy0+cmVzZXQoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHJlc2V0KCkKewokdGhpcy0+c3R5bGVzID0gYXJyYXkoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcHVzaChPdXRwdXRGb3JtYXR0ZXJTdHlsZUludGVyZmFjZSAkc3R5bGUpCnsKJHRoaXMtPnN0eWxlc1tdID0gJHN0eWxlOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcG9wKE91dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlICRzdHlsZSA9IG51bGwpCnsKaWYgKGVtcHR5KCR0aGlzLT5zdHlsZXMpKSB7CnJldHVybiAkdGhpcy0+ZW1wdHlTdHlsZTsKfQoKaWYgKG51bGwgPT09ICRzdHlsZSkgewpyZXR1cm4gYXJyYXlfcG9wKCR0aGlzLT5zdHlsZXMpOwp9Cgpmb3JlYWNoIChhcnJheV9yZXZlcnNlKCR0aGlzLT5zdHlsZXMsIHRydWUpIGFzICRpbmRleCA9PiAkc3RhY2tlZFN0eWxlKSB7CmlmICgkc3R5bGUtPmFwcGx5KCcnKSA9PT0gJHN0YWNrZWRTdHlsZS0+YXBwbHkoJycpKSB7CiR0aGlzLT5zdHlsZXMgPSBhcnJheV9zbGljZSgkdGhpcy0+c3R5bGVzLCAwLCAkaW5kZXgpOwoKcmV0dXJuICRzdGFja2VkU3R5bGU7Cn0KfQoKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0luY29ycmVjdGx5IG5lc3RlZCBzdHlsZSB0YWcgZm91bmQuJyk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEN1cnJlbnQoKQp7CmlmIChlbXB0eSgkdGhpcy0+c3R5bGVzKSkgewpyZXR1cm4gJHRoaXMtPmVtcHR5U3R5bGU7Cn0KCnJldHVybiAkdGhpcy0+c3R5bGVzW2NvdW50KCR0aGlzLT5zdHlsZXMpLTFdOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFbXB0eVN0eWxlKE91dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlICRlbXB0eVN0eWxlKQp7CiR0aGlzLT5lbXB0eVN0eWxlID0gJGVtcHR5U3R5bGU7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRFbXB0eVN0eWxlKCkKewpyZXR1cm4gJHRoaXMtPmVtcHR5U3R5bGU7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyOwoKCgoKCgoKCmNsYXNzIE91dHB1dEZvcm1hdHRlclN0eWxlIGltcGxlbWVudHMgT3V0cHV0Rm9ybWF0dGVyU3R5bGVJbnRlcmZhY2UKewpwcml2YXRlIHN0YXRpYyAkYXZhaWxhYmxlRm9yZWdyb3VuZENvbG9ycyA9IGFycmF5KAonYmxhY2snID0+IDMwLAoncmVkJyA9PiAzMSwKJ2dyZWVuJyA9PiAzMiwKJ3llbGxvdycgPT4gMzMsCidibHVlJyA9PiAzNCwKJ21hZ2VudGEnID0+IDM1LAonY3lhbicgPT4gMzYsCid3aGl0ZScgPT4gMzcKKTsKcHJpdmF0ZSBzdGF0aWMgJGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnMgPSBhcnJheSgKJ2JsYWNrJyA9PiA0MCwKJ3JlZCcgPT4gNDEsCidncmVlbicgPT4gNDIsCid5ZWxsb3cnID0+IDQzLAonYmx1ZScgPT4gNDQsCidtYWdlbnRhJyA9PiA0NSwKJ2N5YW4nID0+IDQ2LAond2hpdGUnID0+IDQ3Cik7CnByaXZhdGUgc3RhdGljICRhdmFpbGFibGVPcHRpb25zID0gYXJyYXkoCidib2xkJyA9PiAxLAondW5kZXJzY29yZScgPT4gNCwKJ2JsaW5rJyA9PiA1LAoncmV2ZXJzZScgPT4gNywKJ2NvbmNlYWwnID0+IDgKKTsKCnByaXZhdGUgJGZvcmVncm91bmQ7CnByaXZhdGUgJGJhY2tncm91bmQ7CnByaXZhdGUgJG9wdGlvbnMgPSBhcnJheSgpOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmb3JlZ3JvdW5kID0gbnVsbCwgJGJhY2tncm91bmQgPSBudWxsLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKaWYgKG51bGwgIT09ICRmb3JlZ3JvdW5kKSB7CiR0aGlzLT5zZXRGb3JlZ3JvdW5kKCRmb3JlZ3JvdW5kKTsKfQppZiAobnVsbCAhPT0gJGJhY2tncm91bmQpIHsKJHRoaXMtPnNldEJhY2tncm91bmQoJGJhY2tncm91bmQpOwp9CmlmIChjb3VudCgkb3B0aW9ucykpIHsKJHRoaXMtPnNldE9wdGlvbnMoJG9wdGlvbnMpOwp9Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRGb3JlZ3JvdW5kKCRjb2xvciA9IG51bGwpCnsKaWYgKG51bGwgPT09ICRjb2xvcikgewokdGhpcy0+Zm9yZWdyb3VuZCA9IG51bGw7CgpyZXR1cm47Cn0KCmlmICghaXNzZXQoc3RhdGljOjokYXZhaWxhYmxlRm9yZWdyb3VuZENvbG9yc1skY29sb3JdKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKAonSW52YWxpZCBmb3JlZ3JvdW5kIGNvbG9yIHNwZWNpZmllZDogIiVzIi4gRXhwZWN0ZWQgb25lIG9mICglcyknLAokY29sb3IsCmltcGxvZGUoJywgJywgYXJyYXlfa2V5cyhzdGF0aWM6OiRhdmFpbGFibGVGb3JlZ3JvdW5kQ29sb3JzKSkKKSk7Cn0KCiR0aGlzLT5mb3JlZ3JvdW5kID0gc3RhdGljOjokYXZhaWxhYmxlRm9yZWdyb3VuZENvbG9yc1skY29sb3JdOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QmFja2dyb3VuZCgkY29sb3IgPSBudWxsKQp7CmlmIChudWxsID09PSAkY29sb3IpIHsKJHRoaXMtPmJhY2tncm91bmQgPSBudWxsOwoKcmV0dXJuOwp9CgppZiAoIWlzc2V0KHN0YXRpYzo6JGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnNbJGNvbG9yXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKJ0ludmFsaWQgYmFja2dyb3VuZCBjb2xvciBzcGVjaWZpZWQ6ICIlcyIuIEV4cGVjdGVkIG9uZSBvZiAoJXMpJywKJGNvbG9yLAppbXBsb2RlKCcsICcsIGFycmF5X2tleXMoc3RhdGljOjokYXZhaWxhYmxlQmFja2dyb3VuZENvbG9ycykpCikpOwp9CgokdGhpcy0+YmFja2dyb3VuZCA9IHN0YXRpYzo6JGF2YWlsYWJsZUJhY2tncm91bmRDb2xvcnNbJGNvbG9yXTsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbigkb3B0aW9uKQp7CmlmICghaXNzZXQoc3RhdGljOjokYXZhaWxhYmxlT3B0aW9uc1skb3B0aW9uXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZigKJ0ludmFsaWQgb3B0aW9uIHNwZWNpZmllZDogIiVzIi4gRXhwZWN0ZWQgb25lIG9mICglcyknLAokb3B0aW9uLAppbXBsb2RlKCcsICcsIGFycmF5X2tleXMoc3RhdGljOjokYXZhaWxhYmxlT3B0aW9ucykpCikpOwp9CgppZiAoZmFsc2UgPT09IGFycmF5X3NlYXJjaChzdGF0aWM6OiRhdmFpbGFibGVPcHRpb25zWyRvcHRpb25dLCAkdGhpcy0+b3B0aW9ucykpIHsKJHRoaXMtPm9wdGlvbnNbXSA9IHN0YXRpYzo6JGF2YWlsYWJsZU9wdGlvbnNbJG9wdGlvbl07Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdW5zZXRPcHRpb24oJG9wdGlvbikKewppZiAoIWlzc2V0KHN0YXRpYzo6JGF2YWlsYWJsZU9wdGlvbnNbJG9wdGlvbl0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoCidJbnZhbGlkIG9wdGlvbiBzcGVjaWZpZWQ6ICIlcyIuIEV4cGVjdGVkIG9uZSBvZiAoJXMpJywKJG9wdGlvbiwKaW1wbG9kZSgnLCAnLCBhcnJheV9rZXlzKHN0YXRpYzo6JGF2YWlsYWJsZU9wdGlvbnMpKQopKTsKfQoKJHBvcyA9IGFycmF5X3NlYXJjaChzdGF0aWM6OiRhdmFpbGFibGVPcHRpb25zWyRvcHRpb25dLCAkdGhpcy0+b3B0aW9ucyk7CmlmIChmYWxzZSAhPT0gJHBvcykgewp1bnNldCgkdGhpcy0+b3B0aW9uc1skcG9zXSk7Cn0KfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkb3B0aW9ucykKewokdGhpcy0+b3B0aW9ucyA9IGFycmF5KCk7Cgpmb3JlYWNoICgkb3B0aW9ucyBhcyAkb3B0aW9uKSB7CiR0aGlzLT5zZXRPcHRpb24oJG9wdGlvbik7Cn0KfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhcHBseSgkdGV4dCkKewokY29kZXMgPSBhcnJheSgpOwoKaWYgKG51bGwgIT09ICR0aGlzLT5mb3JlZ3JvdW5kKSB7CiRjb2Rlc1tdID0gJHRoaXMtPmZvcmVncm91bmQ7Cn0KaWYgKG51bGwgIT09ICR0aGlzLT5iYWNrZ3JvdW5kKSB7CiRjb2Rlc1tdID0gJHRoaXMtPmJhY2tncm91bmQ7Cn0KaWYgKGNvdW50KCR0aGlzLT5vcHRpb25zKSkgewokY29kZXMgPSBhcnJheV9tZXJnZSgkY29kZXMsICR0aGlzLT5vcHRpb25zKTsKfQoKaWYgKDAgPT09IGNvdW50KCRjb2RlcykpIHsKcmV0dXJuICR0ZXh0Owp9CgpyZXR1cm4gc3ByaW50ZigiXDAzM1slc20lc1wwMzNbMG0iLCBpbXBsb2RlKCc7JywgJGNvZGVzKSwgJHRleHQpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlcjsKCgoKCgoKCgppbnRlcmZhY2UgT3V0cHV0Rm9ybWF0dGVyU3R5bGVJbnRlcmZhY2UKewoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEZvcmVncm91bmQoJGNvbG9yID0gbnVsbCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEJhY2tncm91bmQoJGNvbG9yID0gbnVsbCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE9wdGlvbigkb3B0aW9uKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVuc2V0T3B0aW9uKCRvcHRpb24pOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9ucyhhcnJheSAkb3B0aW9ucyk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFwcGx5KCR0ZXh0KTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyOwoKCgoKCgoKCmNsYXNzIE91dHB1dEZvcm1hdHRlciBpbXBsZW1lbnRzIE91dHB1dEZvcm1hdHRlckludGVyZmFjZQp7CgoKCmNvbnN0IEZPUk1BVF9QQVRURVJOID0gJyMoXFxcXD8pPCgvPykoW2Etel1bYS16MC05Xz07LV0qKT8+KCg/OiBbXjxcXFxcXSsgfCAoPyE8KD86Lz9bYS16XXwvPikpLiB8IC4oPzw9XFxcXDwpICkqKSNpc3gnOwoKcHJpdmF0ZSAkZGVjb3JhdGVkOwpwcml2YXRlICRzdHlsZXMgPSBhcnJheSgpOwpwcml2YXRlICRzdHlsZVN0YWNrOwoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXNjYXBlKCR0ZXh0KQp7CnJldHVybiBwcmVnX3JlcGxhY2UoJy8oW15cXFxcXT8pPC9pcycsICckMVxcPCcsICR0ZXh0KTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRlY29yYXRlZCA9IGZhbHNlLCBhcnJheSAkc3R5bGVzID0gYXJyYXkoKSkKewokdGhpcy0+ZGVjb3JhdGVkID0gKEJvb2xlYW4pICRkZWNvcmF0ZWQ7CgokdGhpcy0+c2V0U3R5bGUoJ2Vycm9yJywgbmV3IE91dHB1dEZvcm1hdHRlclN0eWxlKCd3aGl0ZScsICdyZWQnKSk7CiR0aGlzLT5zZXRTdHlsZSgnaW5mbycsIG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZSgnZ3JlZW4nKSk7CiR0aGlzLT5zZXRTdHlsZSgnY29tbWVudCcsIG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZSgneWVsbG93JykpOwokdGhpcy0+c2V0U3R5bGUoJ3F1ZXN0aW9uJywgbmV3IE91dHB1dEZvcm1hdHRlclN0eWxlKCdibGFjaycsICdjeWFuJykpOwoKZm9yZWFjaCAoJHN0eWxlcyBhcyAkbmFtZSA9PiAkc3R5bGUpIHsKJHRoaXMtPnNldFN0eWxlKCRuYW1lLCAkc3R5bGUpOwp9CgokdGhpcy0+c3R5bGVTdGFjayA9IG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZVN0YWNrKCk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGVjb3JhdGVkKCRkZWNvcmF0ZWQpCnsKJHRoaXMtPmRlY29yYXRlZCA9IChCb29sZWFuKSAkZGVjb3JhdGVkOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlzRGVjb3JhdGVkKCkKewpyZXR1cm4gJHRoaXMtPmRlY29yYXRlZDsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0U3R5bGUoJG5hbWUsIE91dHB1dEZvcm1hdHRlclN0eWxlSW50ZXJmYWNlICRzdHlsZSkKewokdGhpcy0+c3R5bGVzW3N0cnRvbG93ZXIoJG5hbWUpXSA9ICRzdHlsZTsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1N0eWxlKCRuYW1lKQp7CnJldHVybiBpc3NldCgkdGhpcy0+c3R5bGVzW3N0cnRvbG93ZXIoJG5hbWUpXSk7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN0eWxlKCRuYW1lKQp7CmlmICghJHRoaXMtPmhhc1N0eWxlKCRuYW1lKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdVbmRlZmluZWQgc3R5bGU6ICVzJywgJG5hbWUpKTsKfQoKcmV0dXJuICR0aGlzLT5zdHlsZXNbc3RydG9sb3dlcigkbmFtZSldOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRtZXNzYWdlKQp7CiRtZXNzYWdlID0gcHJlZ19yZXBsYWNlX2NhbGxiYWNrKHNlbGY6OkZPUk1BVF9QQVRURVJOLCBhcnJheSgkdGhpcywgJ3JlcGxhY2VTdHlsZScpLCAkbWVzc2FnZSk7CgpyZXR1cm4gc3RyX3JlcGxhY2UoJ1xcPCcsICc8JywgJG1lc3NhZ2UpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3R5bGVTdGFjaygpCnsKcmV0dXJuICR0aGlzLT5zdHlsZVN0YWNrOwp9CgoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHJlcGxhY2VTdHlsZSgkbWF0Y2gpCnsKCiBpZiAoJ1xcJyA9PT0gJG1hdGNoWzFdKSB7CnJldHVybiAkdGhpcy0+YXBwbHlDdXJyZW50U3R5bGUoJG1hdGNoWzBdKTsKfQoKaWYgKCcnID09PSAkbWF0Y2hbM10pIHsKaWYgKCcvJyA9PT0gJG1hdGNoWzJdKSB7CgogJHRoaXMtPnN0eWxlU3RhY2stPnBvcCgpOwoKcmV0dXJuICR0aGlzLT5hcHBseUN1cnJlbnRTdHlsZSgkbWF0Y2hbNF0pOwp9CgoKIHJldHVybiAnPD4nLiR0aGlzLT5hcHBseUN1cnJlbnRTdHlsZSgkbWF0Y2hbNF0pOwp9CgppZiAoaXNzZXQoJHRoaXMtPnN0eWxlc1tzdHJ0b2xvd2VyKCRtYXRjaFszXSldKSkgewokc3R5bGUgPSAkdGhpcy0+c3R5bGVzW3N0cnRvbG93ZXIoJG1hdGNoWzNdKV07Cn0gZWxzZSB7CiRzdHlsZSA9ICR0aGlzLT5jcmVhdGVTdHlsZUZyb21TdHJpbmcoJG1hdGNoWzNdKTsKCmlmIChmYWxzZSA9PT0gJHN0eWxlKSB7CnJldHVybiAkdGhpcy0+YXBwbHlDdXJyZW50U3R5bGUoJG1hdGNoWzBdKTsKfQp9CgppZiAoJy8nID09PSAkbWF0Y2hbMl0pIHsKJHRoaXMtPnN0eWxlU3RhY2stPnBvcCgkc3R5bGUpOwp9IGVsc2UgewokdGhpcy0+c3R5bGVTdGFjay0+cHVzaCgkc3R5bGUpOwp9CgpyZXR1cm4gJHRoaXMtPmFwcGx5Q3VycmVudFN0eWxlKCRtYXRjaFs0XSk7Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGNyZWF0ZVN0eWxlRnJvbVN0cmluZygkc3RyaW5nKQp7CmlmICghcHJlZ19tYXRjaF9hbGwoJy8oW149XSspPShbXjtdKykoO3wkKS8nLCBzdHJ0b2xvd2VyKCRzdHJpbmcpLCAkbWF0Y2hlcywgUFJFR19TRVRfT1JERVIpKSB7CnJldHVybiBmYWxzZTsKfQoKJHN0eWxlID0gbmV3IE91dHB1dEZvcm1hdHRlclN0eWxlKCk7CmZvcmVhY2ggKCRtYXRjaGVzIGFzICRtYXRjaCkgewphcnJheV9zaGlmdCgkbWF0Y2gpOwoKaWYgKCdmZycgPT0gJG1hdGNoWzBdKSB7CiRzdHlsZS0+c2V0Rm9yZWdyb3VuZCgkbWF0Y2hbMV0pOwp9IGVsc2VpZiAoJ2JnJyA9PSAkbWF0Y2hbMF0pIHsKJHN0eWxlLT5zZXRCYWNrZ3JvdW5kKCRtYXRjaFsxXSk7Cn0gZWxzZSB7CiRzdHlsZS0+c2V0T3B0aW9uKCRtYXRjaFsxXSk7Cn0KfQoKcmV0dXJuICRzdHlsZTsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYXBwbHlDdXJyZW50U3R5bGUoJHRleHQpCnsKcmV0dXJuICR0aGlzLT5pc0RlY29yYXRlZCgpICYmIHN0cmxlbigkdGV4dCkgPiAwID8gJHRoaXMtPnN0eWxlU3RhY2stPmdldEN1cnJlbnQoKS0+YXBwbHkoJHRleHQpIDogJHRleHQ7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyOwoKCgoKCgoKCmludGVyZmFjZSBPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UKewoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERlY29yYXRlZCgkZGVjb3JhdGVkKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZWNvcmF0ZWQoKTsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFN0eWxlKCRuYW1lLCBPdXRwdXRGb3JtYXR0ZXJTdHlsZUludGVyZmFjZSAkc3R5bGUpOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1N0eWxlKCRuYW1lKTsKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRTdHlsZSgkbmFtZSk7CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZm9ybWF0KCRtZXNzYWdlKTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGU7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yXFRleHREZXNjcmlwdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yXFhtbERlc2NyaXB0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxBcmd2SW5wdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XEFycmF5SW5wdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0RGVmaW5pdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXdhcmVJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxCdWZmZXJlZE91dHB1dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XENvbnNvbGVPdXRwdXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxDb25zb2xlT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcSGVscENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcTGlzdENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxIZWxwZXJTZXQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxGb3JtYXR0ZXJIZWxwZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxEaWFsb2dIZWxwZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlclxQcm9ncmVzc0hlbHBlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyXFRhYmxlSGVscGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxFdmVudFxDb25zb2xlQ29tbWFuZEV2ZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxFdmVudFxDb25zb2xlRXhjZXB0aW9uRXZlbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEV2ZW50XENvbnNvbGVUZXJtaW5hdGVFdmVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEV2ZW50RGlzcGF0Y2hlclxFdmVudERpc3BhdGNoZXJJbnRlcmZhY2U7CgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIEFwcGxpY2F0aW9uCnsKcHJpdmF0ZSAkY29tbWFuZHMgPSBhcnJheSgpOwpwcml2YXRlICR3YW50SGVscHMgPSBmYWxzZTsKcHJpdmF0ZSAkcnVubmluZ0NvbW1hbmQ7CnByaXZhdGUgJG5hbWU7CnByaXZhdGUgJHZlcnNpb247CnByaXZhdGUgJGNhdGNoRXhjZXB0aW9ucyA9IHRydWU7CnByaXZhdGUgJGF1dG9FeGl0ID0gdHJ1ZTsKcHJpdmF0ZSAkZGVmaW5pdGlvbjsKcHJpdmF0ZSAkaGVscGVyU2V0Owpwcml2YXRlICRkaXNwYXRjaGVyOwpwcml2YXRlICR0ZXJtaW5hbERpbWVuc2lvbnM7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSA9ICdVTktOT1dOJywgJHZlcnNpb24gPSAnVU5LTk9XTicpCnsKJHRoaXMtPm5hbWUgPSAkbmFtZTsKJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsKJHRoaXMtPmhlbHBlclNldCA9ICR0aGlzLT5nZXREZWZhdWx0SGVscGVyU2V0KCk7CiR0aGlzLT5kZWZpbml0aW9uID0gJHRoaXMtPmdldERlZmF1bHRJbnB1dERlZmluaXRpb24oKTsKCmZvcmVhY2ggKCR0aGlzLT5nZXREZWZhdWx0Q29tbWFuZHMoKSBhcyAkY29tbWFuZCkgewokdGhpcy0+YWRkKCRjb21tYW5kKTsKfQp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0RGlzcGF0Y2hlcihFdmVudERpc3BhdGNoZXJJbnRlcmZhY2UgJGRpc3BhdGNoZXIpCnsKJHRoaXMtPmRpc3BhdGNoZXIgPSAkZGlzcGF0Y2hlcjsKfQoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJ1bihJbnB1dEludGVyZmFjZSAkaW5wdXQgPSBudWxsLCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCA9IG51bGwpCnsKaWYgKG51bGwgPT09ICRpbnB1dCkgewokaW5wdXQgPSBuZXcgQXJndklucHV0KCk7Cn0KCmlmIChudWxsID09PSAkb3V0cHV0KSB7CiRvdXRwdXQgPSBuZXcgQ29uc29sZU91dHB1dCgpOwp9CgokdGhpcy0+Y29uZmlndXJlSU8oJGlucHV0LCAkb3V0cHV0KTsKCnRyeSB7CiRleGl0Q29kZSA9ICR0aGlzLT5kb1J1bigkaW5wdXQsICRvdXRwdXQpOwp9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CmlmICghJHRoaXMtPmNhdGNoRXhjZXB0aW9ucykgewp0aHJvdyAkZTsKfQoKaWYgKCRvdXRwdXQgaW5zdGFuY2VvZiBDb25zb2xlT3V0cHV0SW50ZXJmYWNlKSB7CiR0aGlzLT5yZW5kZXJFeGNlcHRpb24oJGUsICRvdXRwdXQtPmdldEVycm9yT3V0cHV0KCkpOwp9IGVsc2UgewokdGhpcy0+cmVuZGVyRXhjZXB0aW9uKCRlLCAkb3V0cHV0KTsKfQoKJGV4aXRDb2RlID0gJGUtPmdldENvZGUoKTsKaWYgKGlzX251bWVyaWMoJGV4aXRDb2RlKSkgewokZXhpdENvZGUgPSAoaW50KSAkZXhpdENvZGU7CmlmICgwID09PSAkZXhpdENvZGUpIHsKJGV4aXRDb2RlID0gMTsKfQp9IGVsc2UgewokZXhpdENvZGUgPSAxOwp9Cn0KCmlmICgkdGhpcy0+YXV0b0V4aXQpIHsKaWYgKCRleGl0Q29kZSA+IDI1NSkgewokZXhpdENvZGUgPSAyNTU7Cn0KCiBleGl0KCRleGl0Q29kZSk7CgogfQoKcmV0dXJuICRleGl0Q29kZTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZG9SdW4oSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewppZiAodHJ1ZSA9PT0gJGlucHV0LT5oYXNQYXJhbWV0ZXJPcHRpb24oYXJyYXkoJy0tdmVyc2lvbicsICctVicpKSkgewokb3V0cHV0LT53cml0ZWxuKCR0aGlzLT5nZXRMb25nVmVyc2lvbigpKTsKCnJldHVybiAwOwp9CgokbmFtZSA9ICR0aGlzLT5nZXRDb21tYW5kTmFtZSgkaW5wdXQpOwppZiAodHJ1ZSA9PT0gJGlucHV0LT5oYXNQYXJhbWV0ZXJPcHRpb24oYXJyYXkoJy0taGVscCcsICctaCcpKSkgewppZiAoISRuYW1lKSB7CiRuYW1lID0gJ2hlbHAnOwokaW5wdXQgPSBuZXcgQXJyYXlJbnB1dChhcnJheSgnY29tbWFuZCcgPT4gJ2hlbHAnKSk7Cn0gZWxzZSB7CiR0aGlzLT53YW50SGVscHMgPSB0cnVlOwp9Cn0KCmlmICghJG5hbWUpIHsKJG5hbWUgPSAnbGlzdCc7CiRpbnB1dCA9IG5ldyBBcnJheUlucHV0KGFycmF5KCdjb21tYW5kJyA9PiAnbGlzdCcpKTsKfQoKCiAkY29tbWFuZCA9ICR0aGlzLT5maW5kKCRuYW1lKTsKCiR0aGlzLT5ydW5uaW5nQ29tbWFuZCA9ICRjb21tYW5kOwokZXhpdENvZGUgPSAkdGhpcy0+ZG9SdW5Db21tYW5kKCRjb21tYW5kLCAkaW5wdXQsICRvdXRwdXQpOwokdGhpcy0+cnVubmluZ0NvbW1hbmQgPSBudWxsOwoKcmV0dXJuICRleGl0Q29kZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRIZWxwZXJTZXQoSGVscGVyU2V0ICRoZWxwZXJTZXQpCnsKJHRoaXMtPmhlbHBlclNldCA9ICRoZWxwZXJTZXQ7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SGVscGVyU2V0KCkKewpyZXR1cm4gJHRoaXMtPmhlbHBlclNldDsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZWZpbml0aW9uKElucHV0RGVmaW5pdGlvbiAkZGVmaW5pdGlvbikKewokdGhpcy0+ZGVmaW5pdGlvbiA9ICRkZWZpbml0aW9uOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZWZpbml0aW9uKCkKewpyZXR1cm4gJHRoaXMtPmRlZmluaXRpb247Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEhlbHAoKQp7CiRtZXNzYWdlcyA9IGFycmF5KAokdGhpcy0+Z2V0TG9uZ1ZlcnNpb24oKSwKJycsCic8Y29tbWVudD5Vc2FnZTo8L2NvbW1lbnQ+JywKJyAgW29wdGlvbnNdIGNvbW1hbmQgW2FyZ3VtZW50c10nLAonJywKJzxjb21tZW50Pk9wdGlvbnM6PC9jb21tZW50PicsCik7Cgpmb3JlYWNoICgkdGhpcy0+Z2V0RGVmaW5pdGlvbigpLT5nZXRPcHRpb25zKCkgYXMgJG9wdGlvbikgewokbWVzc2FnZXNbXSA9IHNwcmludGYoJyAgJS0yOXMgJXMgJXMnLAonPGluZm8+LS0nLiRvcHRpb24tPmdldE5hbWUoKS4nPC9pbmZvPicsCiRvcHRpb24tPmdldFNob3J0Y3V0KCkgPyAnPGluZm8+LScuJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKS4nPC9pbmZvPicgOiAnICAnLAokb3B0aW9uLT5nZXREZXNjcmlwdGlvbigpCik7Cn0KCnJldHVybiBpbXBsb2RlKFBIUF9FT0wsICRtZXNzYWdlcyk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q2F0Y2hFeGNlcHRpb25zKCRib29sZWFuKQp7CiR0aGlzLT5jYXRjaEV4Y2VwdGlvbnMgPSAoQm9vbGVhbikgJGJvb2xlYW47Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QXV0b0V4aXQoJGJvb2xlYW4pCnsKJHRoaXMtPmF1dG9FeGl0ID0gKEJvb2xlYW4pICRib29sZWFuOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAkdGhpcy0+bmFtZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXROYW1lKCRuYW1lKQp7CiR0aGlzLT5uYW1lID0gJG5hbWU7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyc2lvbigpCnsKcmV0dXJuICR0aGlzLT52ZXJzaW9uOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFZlcnNpb24oJHZlcnNpb24pCnsKJHRoaXMtPnZlcnNpb24gPSAkdmVyc2lvbjsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRMb25nVmVyc2lvbigpCnsKaWYgKCdVTktOT1dOJyAhPT0gJHRoaXMtPmdldE5hbWUoKSAmJiAnVU5LTk9XTicgIT09ICR0aGlzLT5nZXRWZXJzaW9uKCkpIHsKcmV0dXJuIHNwcmludGYoJzxpbmZvPiVzPC9pbmZvPiB2ZXJzaW9uIDxjb21tZW50PiVzPC9jb21tZW50PicsICR0aGlzLT5nZXROYW1lKCksICR0aGlzLT5nZXRWZXJzaW9uKCkpOwp9CgpyZXR1cm4gJzxpbmZvPkNvbnNvbGUgVG9vbDwvaW5mbz4nOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJG5hbWUpCnsKcmV0dXJuICR0aGlzLT5hZGQobmV3IENvbW1hbmQoJG5hbWUpKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRDb21tYW5kcyhhcnJheSAkY29tbWFuZHMpCnsKZm9yZWFjaCAoJGNvbW1hbmRzIGFzICRjb21tYW5kKSB7CiR0aGlzLT5hZGQoJGNvbW1hbmQpOwp9Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZChDb21tYW5kICRjb21tYW5kKQp7CiRjb21tYW5kLT5zZXRBcHBsaWNhdGlvbigkdGhpcyk7CgppZiAoISRjb21tYW5kLT5pc0VuYWJsZWQoKSkgewokY29tbWFuZC0+c2V0QXBwbGljYXRpb24obnVsbCk7CgpyZXR1cm47Cn0KCmlmIChudWxsID09PSAkY29tbWFuZC0+Z2V0RGVmaW5pdGlvbigpKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oc3ByaW50ZignQ29tbWFuZCBjbGFzcyAiJXMiIGlzIG5vdCBjb3JyZWN0bHkgaW5pdGlhbGl6ZWQuIFlvdSBwcm9iYWJseSBmb3Jnb3QgdG8gY2FsbCB0aGUgcGFyZW50IGNvbnN0cnVjdG9yLicsIGdldF9jbGFzcygkY29tbWFuZCkpKTsKfQoKJHRoaXMtPmNvbW1hbmRzWyRjb21tYW5kLT5nZXROYW1lKCldID0gJGNvbW1hbmQ7Cgpmb3JlYWNoICgkY29tbWFuZC0+Z2V0QWxpYXNlcygpIGFzICRhbGlhcykgewokdGhpcy0+Y29tbWFuZHNbJGFsaWFzXSA9ICRjb21tYW5kOwp9CgpyZXR1cm4gJGNvbW1hbmQ7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSkKewppZiAoIWlzc2V0KCR0aGlzLT5jb21tYW5kc1skbmFtZV0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBjb21tYW5kICIlcyIgZG9lcyBub3QgZXhpc3QuJywgJG5hbWUpKTsKfQoKJGNvbW1hbmQgPSAkdGhpcy0+Y29tbWFuZHNbJG5hbWVdOwoKaWYgKCR0aGlzLT53YW50SGVscHMpIHsKJHRoaXMtPndhbnRIZWxwcyA9IGZhbHNlOwoKJGhlbHBDb21tYW5kID0gJHRoaXMtPmdldCgnaGVscCcpOwokaGVscENvbW1hbmQtPnNldENvbW1hbmQoJGNvbW1hbmQpOwoKcmV0dXJuICRoZWxwQ29tbWFuZDsKfQoKcmV0dXJuICRjb21tYW5kOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzKCRuYW1lKQp7CnJldHVybiBpc3NldCgkdGhpcy0+Y29tbWFuZHNbJG5hbWVdKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lc3BhY2VzKCkKewokbmFtZXNwYWNlcyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0aGlzLT5jb21tYW5kcyBhcyAkY29tbWFuZCkgewokbmFtZXNwYWNlc1tdID0gJHRoaXMtPmV4dHJhY3ROYW1lc3BhY2UoJGNvbW1hbmQtPmdldE5hbWUoKSk7Cgpmb3JlYWNoICgkY29tbWFuZC0+Z2V0QWxpYXNlcygpIGFzICRhbGlhcykgewokbmFtZXNwYWNlc1tdID0gJHRoaXMtPmV4dHJhY3ROYW1lc3BhY2UoJGFsaWFzKTsKfQp9CgpyZXR1cm4gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZShhcnJheV9maWx0ZXIoJG5hbWVzcGFjZXMpKSk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBmaW5kTmFtZXNwYWNlKCRuYW1lc3BhY2UpCnsKJGFsbE5hbWVzcGFjZXMgPSAkdGhpcy0+Z2V0TmFtZXNwYWNlcygpOwokZXhwciA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygneyhbXjpdK3wpfScsIGZ1bmN0aW9uICgkbWF0Y2hlcykgeyByZXR1cm4gcHJlZ19xdW90ZSgkbWF0Y2hlc1sxXSkuJ1teOl0qJzsgfSwgJG5hbWVzcGFjZSk7CiRuYW1lc3BhY2VzID0gcHJlZ19ncmVwKCd7XicuJGV4cHIuJ30nLCAkYWxsTmFtZXNwYWNlcyk7CgppZiAoZW1wdHkoJG5hbWVzcGFjZXMpKSB7CiRtZXNzYWdlID0gc3ByaW50ZignVGhlcmUgYXJlIG5vIGNvbW1hbmRzIGRlZmluZWQgaW4gdGhlICIlcyIgbmFtZXNwYWNlLicsICRuYW1lc3BhY2UpOwoKaWYgKCRhbHRlcm5hdGl2ZXMgPSAkdGhpcy0+ZmluZEFsdGVybmF0aXZlcygkbmFtZXNwYWNlLCAkYWxsTmFtZXNwYWNlcywgYXJyYXkoKSkpIHsKaWYgKDEgPT0gY291bnQoJGFsdGVybmF0aXZlcykpIHsKJG1lc3NhZ2UgLj0gIlxuXG5EaWQgeW91IG1lYW4gdGhpcz9cbiAgICAiOwp9IGVsc2UgewokbWVzc2FnZSAuPSAiXG5cbkRpZCB5b3UgbWVhbiBvbmUgb2YgdGhlc2U/XG4gICAgIjsKfQoKJG1lc3NhZ2UgLj0gaW1wbG9kZSgiXG4gICAgIiwgJGFsdGVybmF0aXZlcyk7Cn0KCnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCRtZXNzYWdlKTsKfQoKJGV4YWN0ID0gaW5fYXJyYXkoJG5hbWVzcGFjZSwgJG5hbWVzcGFjZXMsIHRydWUpOwppZiAoY291bnQoJG5hbWVzcGFjZXMpID4gMSAmJiAhJGV4YWN0KSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBuYW1lc3BhY2UgIiVzIiBpcyBhbWJpZ3VvdXMgKCVzKS4nLCAkbmFtZXNwYWNlLCAkdGhpcy0+Z2V0QWJicmV2aWF0aW9uU3VnZ2VzdGlvbnMoYXJyYXlfdmFsdWVzKCRuYW1lc3BhY2VzKSkpKTsKfQoKcmV0dXJuICRleGFjdCA/ICRuYW1lc3BhY2UgOiByZXNldCgkbmFtZXNwYWNlcyk7Cn0KCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbmQoJG5hbWUpCnsKJGFsbENvbW1hbmRzID0gYXJyYXlfa2V5cygkdGhpcy0+Y29tbWFuZHMpOwokZXhwciA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygneyhbXjpdK3wpfScsIGZ1bmN0aW9uICgkbWF0Y2hlcykgeyByZXR1cm4gcHJlZ19xdW90ZSgkbWF0Y2hlc1sxXSkuJ1teOl0qJzsgfSwgJG5hbWUpOwokY29tbWFuZHMgPSBwcmVnX2dyZXAoJ3teJy4kZXhwci4nfScsICRhbGxDb21tYW5kcyk7CgppZiAoZW1wdHkoJGNvbW1hbmRzKSB8fCBjb3VudChwcmVnX2dyZXAoJ3teJy4kZXhwci4nJH0nLCAkY29tbWFuZHMpKSA8IDEpIHsKaWYgKGZhbHNlICE9PSAkcG9zID0gc3RycnBvcygkbmFtZSwgJzonKSkgewoKICR0aGlzLT5maW5kTmFtZXNwYWNlKHN1YnN0cigkbmFtZSwgMCwgJHBvcykpOwp9CgokbWVzc2FnZSA9IHNwcmludGYoJ0NvbW1hbmQgIiVzIiBpcyBub3QgZGVmaW5lZC4nLCAkbmFtZSk7CgppZiAoJGFsdGVybmF0aXZlcyA9ICR0aGlzLT5maW5kQWx0ZXJuYXRpdmVzKCRuYW1lLCAkYWxsQ29tbWFuZHMsIGFycmF5KCkpKSB7CmlmICgxID09IGNvdW50KCRhbHRlcm5hdGl2ZXMpKSB7CiRtZXNzYWdlIC49ICJcblxuRGlkIHlvdSBtZWFuIHRoaXM/XG4gICAgIjsKfSBlbHNlIHsKJG1lc3NhZ2UgLj0gIlxuXG5EaWQgeW91IG1lYW4gb25lIG9mIHRoZXNlP1xuICAgICI7Cn0KJG1lc3NhZ2UgLj0gaW1wbG9kZSgiXG4gICAgIiwgJGFsdGVybmF0aXZlcyk7Cn0KCnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCRtZXNzYWdlKTsKfQoKCiBpZiAoY291bnQoJGNvbW1hbmRzKSA+IDEpIHsKJGNvbW1hbmRMaXN0ID0gJHRoaXMtPmNvbW1hbmRzOwokY29tbWFuZHMgPSBhcnJheV9maWx0ZXIoJGNvbW1hbmRzLCBmdW5jdGlvbiAoJG5hbWVPckFsaWFzKSB1c2UgKCRjb21tYW5kTGlzdCwgJGNvbW1hbmRzKSB7CiRjb21tYW5kTmFtZSA9ICRjb21tYW5kTGlzdFskbmFtZU9yQWxpYXNdLT5nZXROYW1lKCk7CgpyZXR1cm4gJGNvbW1hbmROYW1lID09PSAkbmFtZU9yQWxpYXMgfHwgIWluX2FycmF5KCRjb21tYW5kTmFtZSwgJGNvbW1hbmRzKTsKfSk7Cn0KCiRleGFjdCA9IGluX2FycmF5KCRuYW1lLCAkY29tbWFuZHMsIHRydWUpOwppZiAoY291bnQoJGNvbW1hbmRzKSA+IDEgJiYgISRleGFjdCkgewokc3VnZ2VzdGlvbnMgPSAkdGhpcy0+Z2V0QWJicmV2aWF0aW9uU3VnZ2VzdGlvbnMoYXJyYXlfdmFsdWVzKCRjb21tYW5kcykpOwoKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignQ29tbWFuZCAiJXMiIGlzIGFtYmlndW91cyAoJXMpLicsICRuYW1lLCAkc3VnZ2VzdGlvbnMpKTsKfQoKcmV0dXJuICR0aGlzLT5nZXQoJGV4YWN0ID8gJG5hbWUgOiByZXNldCgkY29tbWFuZHMpKTsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWxsKCRuYW1lc3BhY2UgPSBudWxsKQp7CmlmIChudWxsID09PSAkbmFtZXNwYWNlKSB7CnJldHVybiAkdGhpcy0+Y29tbWFuZHM7Cn0KCiRjb21tYW5kcyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0aGlzLT5jb21tYW5kcyBhcyAkbmFtZSA9PiAkY29tbWFuZCkgewppZiAoJG5hbWVzcGFjZSA9PT0gJHRoaXMtPmV4dHJhY3ROYW1lc3BhY2UoJG5hbWUsIHN1YnN0cl9jb3VudCgkbmFtZXNwYWNlLCAnOicpICsgMSkpIHsKJGNvbW1hbmRzWyRuYW1lXSA9ICRjb21tYW5kOwp9Cn0KCnJldHVybiAkY29tbWFuZHM7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEFiYnJldmlhdGlvbnMoJG5hbWVzKQp7CiRhYmJyZXZzID0gYXJyYXkoKTsKZm9yZWFjaCAoJG5hbWVzIGFzICRuYW1lKSB7CmZvciAoJGxlbiA9IHN0cmxlbigkbmFtZSk7ICRsZW4gPiAwOyAtLSRsZW4pIHsKJGFiYnJldiA9IHN1YnN0cigkbmFtZSwgMCwgJGxlbik7CiRhYmJyZXZzWyRhYmJyZXZdW10gPSAkbmFtZTsKfQp9CgpyZXR1cm4gJGFiYnJldnM7Cn0KCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYXNUZXh0KCRuYW1lc3BhY2UgPSBudWxsLCAkcmF3ID0gZmFsc2UpCnsKJGRlc2NyaXB0b3IgPSBuZXcgVGV4dERlc2NyaXB0b3IoKTsKJG91dHB1dCA9IG5ldyBCdWZmZXJlZE91dHB1dChCdWZmZXJlZE91dHB1dDo6VkVSQk9TSVRZX05PUk1BTCwgISRyYXcpOwokZGVzY3JpcHRvci0+ZGVzY3JpYmUoJG91dHB1dCwgJHRoaXMsIGFycmF5KCduYW1lc3BhY2UnID0+ICRuYW1lc3BhY2UsICdyYXdfb3V0cHV0JyA9PiB0cnVlKSk7CgpyZXR1cm4gJG91dHB1dC0+ZmV0Y2goKTsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhc1htbCgkbmFtZXNwYWNlID0gbnVsbCwgJGFzRG9tID0gZmFsc2UpCnsKJGRlc2NyaXB0b3IgPSBuZXcgWG1sRGVzY3JpcHRvcigpOwoKaWYgKCRhc0RvbSkgewpyZXR1cm4gJGRlc2NyaXB0b3ItPmdldEFwcGxpY2F0aW9uRG9jdW1lbnQoJHRoaXMsICRuYW1lc3BhY2UpOwp9Cgokb3V0cHV0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0KCk7CiRkZXNjcmlwdG9yLT5kZXNjcmliZSgkb3V0cHV0LCAkdGhpcywgYXJyYXkoJ25hbWVzcGFjZScgPT4gJG5hbWVzcGFjZSkpOwoKcmV0dXJuICRvdXRwdXQtPmZldGNoKCk7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZW5kZXJFeGNlcHRpb24oJGUsICRvdXRwdXQpCnsKJHN0cmxlbiA9IGZ1bmN0aW9uICgkc3RyaW5nKSB7CmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSkgewpyZXR1cm4gc3RybGVuKCRzdHJpbmcpOwp9CgppZiAoZmFsc2UgPT09ICRlbmNvZGluZyA9IG1iX2RldGVjdF9lbmNvZGluZygkc3RyaW5nKSkgewpyZXR1cm4gc3RybGVuKCRzdHJpbmcpOwp9CgpyZXR1cm4gbWJfc3RybGVuKCRzdHJpbmcsICRlbmNvZGluZyk7Cn07CgpkbyB7CiR0aXRsZSA9IHNwcmludGYoJyAgWyVzXSAgJywgZ2V0X2NsYXNzKCRlKSk7CiRsZW4gPSAkc3RybGVuKCR0aXRsZSk7CgogJHdpZHRoID0gJHRoaXMtPmdldFRlcm1pbmFsV2lkdGgoKSA/ICR0aGlzLT5nZXRUZXJtaW5hbFdpZHRoKCkgLSAxIDogKGRlZmluZWQoJ0hIVk1fVkVSU0lPTicpID8gMSA8PCAzMSA6IFBIUF9JTlRfTUFYKTsKJGZvcm1hdHRlciA9ICRvdXRwdXQtPmdldEZvcm1hdHRlcigpOwokbGluZXMgPSBhcnJheSgpOwpmb3JlYWNoIChwcmVnX3NwbGl0KCcvXHI/XG4vJywgJGUtPmdldE1lc3NhZ2UoKSkgYXMgJGxpbmUpIHsKZm9yZWFjaCAoc3RyX3NwbGl0KCRsaW5lLCAkd2lkdGggLSA0KSBhcyAkbGluZSkgewoKICRsaW5lTGVuZ3RoID0gJHN0cmxlbihwcmVnX3JlcGxhY2UoJy8bXFtbXm1dKm0vJywgJycsICRmb3JtYXR0ZXItPmZvcm1hdCgkbGluZSkpKSArIDQ7CiRsaW5lc1tdID0gYXJyYXkoJGxpbmUsICRsaW5lTGVuZ3RoKTsKCiRsZW4gPSBtYXgoJGxpbmVMZW5ndGgsICRsZW4pOwp9Cn0KCiRtZXNzYWdlcyA9IGFycmF5KCcnLCAnJyk7CiRtZXNzYWdlc1tdID0gJGVtcHR5TGluZSA9ICRmb3JtYXR0ZXItPmZvcm1hdChzcHJpbnRmKCc8ZXJyb3I+JXM8L2Vycm9yPicsIHN0cl9yZXBlYXQoJyAnLCAkbGVuKSkpOwokbWVzc2FnZXNbXSA9ICRmb3JtYXR0ZXItPmZvcm1hdChzcHJpbnRmKCc8ZXJyb3I+JXMlczwvZXJyb3I+JywgJHRpdGxlLCBzdHJfcmVwZWF0KCcgJywgbWF4KDAsICRsZW4gLSAkc3RybGVuKCR0aXRsZSkpKSkpOwpmb3JlYWNoICgkbGluZXMgYXMgJGxpbmUpIHsKJG1lc3NhZ2VzW10gPSAkZm9ybWF0dGVyLT5mb3JtYXQoc3ByaW50ZignPGVycm9yPiAgJXMgICVzPC9lcnJvcj4nLCAkbGluZVswXSwgc3RyX3JlcGVhdCgnICcsICRsZW4gLSAkbGluZVsxXSkpKTsKfQokbWVzc2FnZXNbXSA9ICRlbXB0eUxpbmU7CiRtZXNzYWdlc1tdID0gJyc7CiRtZXNzYWdlc1tdID0gJyc7Cgokb3V0cHV0LT53cml0ZWxuKCRtZXNzYWdlcywgT3V0cHV0SW50ZXJmYWNlOjpPVVRQVVRfUkFXKTsKCmlmIChPdXRwdXRJbnRlcmZhY2U6OlZFUkJPU0lUWV9WRVJCT1NFIDw9ICRvdXRwdXQtPmdldFZlcmJvc2l0eSgpKSB7CiRvdXRwdXQtPndyaXRlbG4oJzxjb21tZW50PkV4Y2VwdGlvbiB0cmFjZTo8L2NvbW1lbnQ+Jyk7CgoKICR0cmFjZSA9ICRlLT5nZXRUcmFjZSgpOwphcnJheV91bnNoaWZ0KCR0cmFjZSwgYXJyYXkoCidmdW5jdGlvbicgPT4gJycsCidmaWxlJyA9PiAkZS0+Z2V0RmlsZSgpICE9IG51bGwgPyAkZS0+Z2V0RmlsZSgpIDogJ24vYScsCidsaW5lJyA9PiAkZS0+Z2V0TGluZSgpICE9IG51bGwgPyAkZS0+Z2V0TGluZSgpIDogJ24vYScsCidhcmdzJyA9PiBhcnJheSgpLAopKTsKCmZvciAoJGkgPSAwLCAkY291bnQgPSBjb3VudCgkdHJhY2UpOyAkaSA8ICRjb3VudDsgJGkrKykgewokY2xhc3MgPSBpc3NldCgkdHJhY2VbJGldWydjbGFzcyddKSA/ICR0cmFjZVskaV1bJ2NsYXNzJ10gOiAnJzsKJHR5cGUgPSBpc3NldCgkdHJhY2VbJGldWyd0eXBlJ10pID8gJHRyYWNlWyRpXVsndHlwZSddIDogJyc7CiRmdW5jdGlvbiA9ICR0cmFjZVskaV1bJ2Z1bmN0aW9uJ107CiRmaWxlID0gaXNzZXQoJHRyYWNlWyRpXVsnZmlsZSddKSA/ICR0cmFjZVskaV1bJ2ZpbGUnXSA6ICduL2EnOwokbGluZSA9IGlzc2V0KCR0cmFjZVskaV1bJ2xpbmUnXSkgPyAkdHJhY2VbJGldWydsaW5lJ10gOiAnbi9hJzsKCiRvdXRwdXQtPndyaXRlbG4oc3ByaW50ZignICVzJXMlcygpIGF0IDxpbmZvPiVzOiVzPC9pbmZvPicsICRjbGFzcywgJHR5cGUsICRmdW5jdGlvbiwgJGZpbGUsICRsaW5lKSk7Cn0KCiRvdXRwdXQtPndyaXRlbG4oIiIpOwokb3V0cHV0LT53cml0ZWxuKCIiKTsKfQp9IHdoaWxlICgkZSA9ICRlLT5nZXRQcmV2aW91cygpKTsKCmlmIChudWxsICE9PSAkdGhpcy0+cnVubmluZ0NvbW1hbmQpIHsKJG91dHB1dC0+d3JpdGVsbihzcHJpbnRmKCc8aW5mbz4lczwvaW5mbz4nLCBzcHJpbnRmKCR0aGlzLT5ydW5uaW5nQ29tbWFuZC0+Z2V0U3lub3BzaXMoKSwgJHRoaXMtPmdldE5hbWUoKSkpKTsKJG91dHB1dC0+d3JpdGVsbigiIik7CiRvdXRwdXQtPndyaXRlbG4oIiIpOwp9Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFRlcm1pbmFsV2lkdGgoKQp7CiRkaW1lbnNpb25zID0gJHRoaXMtPmdldFRlcm1pbmFsRGltZW5zaW9ucygpOwoKcmV0dXJuICRkaW1lbnNpb25zWzBdOwp9CgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRUZXJtaW5hbEhlaWdodCgpCnsKJGRpbWVuc2lvbnMgPSAkdGhpcy0+Z2V0VGVybWluYWxEaW1lbnNpb25zKCk7CgpyZXR1cm4gJGRpbWVuc2lvbnNbMV07Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRlcm1pbmFsRGltZW5zaW9ucygpCnsKaWYgKCR0aGlzLT50ZXJtaW5hbERpbWVuc2lvbnMpIHsKcmV0dXJuICR0aGlzLT50ZXJtaW5hbERpbWVuc2lvbnM7Cn0KCmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKCiBpZiAocHJlZ19tYXRjaCgnL14oXGQrKXhcZCsgXChcZCt4KFxkKylcKSQvJywgdHJpbShnZXRlbnYoJ0FOU0lDT04nKSksICRtYXRjaGVzKSkgewpyZXR1cm4gYXJyYXkoKGludCkgJG1hdGNoZXNbMV0sIChpbnQpICRtYXRjaGVzWzJdKTsKfQoKIGlmIChwcmVnX21hdGNoKCcvXihcZCspeChcZCspJC8nLCAkdGhpcy0+Z2V0Q29uc29sZU1vZGUoKSwgJG1hdGNoZXMpKSB7CnJldHVybiBhcnJheSgoaW50KSAkbWF0Y2hlc1sxXSwgKGludCkgJG1hdGNoZXNbMl0pOwp9Cn0KCmlmICgkc3R0eVN0cmluZyA9ICR0aGlzLT5nZXRTdHR5Q29sdW1ucygpKSB7CgogaWYgKHByZWdfbWF0Y2goJy9yb3dzLihcZCspOy5jb2x1bW5zLihcZCspOy9pJywgJHN0dHlTdHJpbmcsICRtYXRjaGVzKSkgewpyZXR1cm4gYXJyYXkoKGludCkgJG1hdGNoZXNbMl0sIChpbnQpICRtYXRjaGVzWzFdKTsKfQoKIGlmIChwcmVnX21hdGNoKCcvOy4oXGQrKS5yb3dzOy4oXGQrKS5jb2x1bW5zL2knLCAkc3R0eVN0cmluZywgJG1hdGNoZXMpKSB7CnJldHVybiBhcnJheSgoaW50KSAkbWF0Y2hlc1syXSwgKGludCkgJG1hdGNoZXNbMV0pOwp9Cn0KCnJldHVybiBhcnJheShudWxsLCBudWxsKTsKfQoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRUZXJtaW5hbERpbWVuc2lvbnMoJHdpZHRoLCAkaGVpZ2h0KQp7CiR0aGlzLT50ZXJtaW5hbERpbWVuc2lvbnMgPSBhcnJheSgkd2lkdGgsICRoZWlnaHQpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY29uZmlndXJlSU8oSW5wdXRJbnRlcmZhY2UgJGlucHV0LCBPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCkKewppZiAodHJ1ZSA9PT0gJGlucHV0LT5oYXNQYXJhbWV0ZXJPcHRpb24oYXJyYXkoJy0tYW5zaScpKSkgewokb3V0cHV0LT5zZXREZWNvcmF0ZWQodHJ1ZSk7Cn0gZWxzZWlmICh0cnVlID09PSAkaW5wdXQtPmhhc1BhcmFtZXRlck9wdGlvbihhcnJheSgnLS1uby1hbnNpJykpKSB7CiRvdXRwdXQtPnNldERlY29yYXRlZChmYWxzZSk7Cn0KCmlmICh0cnVlID09PSAkaW5wdXQtPmhhc1BhcmFtZXRlck9wdGlvbihhcnJheSgnLS1uby1pbnRlcmFjdGlvbicsICctbicpKSkgewokaW5wdXQtPnNldEludGVyYWN0aXZlKGZhbHNlKTsKfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncG9zaXhfaXNhdHR5JykgJiYgJHRoaXMtPmdldEhlbHBlclNldCgpLT5oYXMoJ2RpYWxvZycpKSB7CiRpbnB1dFN0cmVhbSA9ICR0aGlzLT5nZXRIZWxwZXJTZXQoKS0+Z2V0KCdkaWFsb2cnKS0+Z2V0SW5wdXRTdHJlYW0oKTsKaWYgKCFAcG9zaXhfaXNhdHR5KCRpbnB1dFN0cmVhbSkpIHsKJGlucHV0LT5zZXRJbnRlcmFjdGl2ZShmYWxzZSk7Cn0KfQoKaWYgKHRydWUgPT09ICRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKGFycmF5KCctLXF1aWV0JywgJy1xJykpKSB7CiRvdXRwdXQtPnNldFZlcmJvc2l0eShPdXRwdXRJbnRlcmZhY2U6OlZFUkJPU0lUWV9RVUlFVCk7Cn0gZWxzZSB7CmlmICgkaW5wdXQtPmhhc1BhcmFtZXRlck9wdGlvbignLXZ2dicpIHx8ICRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2U9MycpIHx8ICRpbnB1dC0+Z2V0UGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2UnKSA9PT0gMykgewokb3V0cHV0LT5zZXRWZXJib3NpdHkoT3V0cHV0SW50ZXJmYWNlOjpWRVJCT1NJVFlfREVCVUcpOwp9IGVsc2VpZiAoJGlucHV0LT5oYXNQYXJhbWV0ZXJPcHRpb24oJy12dicpIHx8ICRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2U9MicpIHx8ICRpbnB1dC0+Z2V0UGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2UnKSA9PT0gMikgewokb3V0cHV0LT5zZXRWZXJib3NpdHkoT3V0cHV0SW50ZXJmYWNlOjpWRVJCT1NJVFlfVkVSWV9WRVJCT1NFKTsKfSBlbHNlaWYgKCRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctdicpIHx8ICRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2U9MScpIHx8ICRpbnB1dC0+aGFzUGFyYW1ldGVyT3B0aW9uKCctLXZlcmJvc2UnKSB8fCAkaW5wdXQtPmdldFBhcmFtZXRlck9wdGlvbignLS12ZXJib3NlJykpIHsKJG91dHB1dC0+c2V0VmVyYm9zaXR5KE91dHB1dEludGVyZmFjZTo6VkVSQk9TSVRZX1ZFUkJPU0UpOwp9Cn0KfQoKCgoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRvUnVuQ29tbWFuZChDb21tYW5kICRjb21tYW5kLCBJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CmZvcmVhY2ggKCRjb21tYW5kLT5nZXRIZWxwZXJTZXQoKSBhcyAkaGVscGVyKSB7CmlmICgkaGVscGVyIGluc3RhbmNlb2YgSW5wdXRBd2FyZUludGVyZmFjZSkgewokaGVscGVyLT5zZXRJbnB1dCgkaW5wdXQpOwp9Cn0KCmlmIChudWxsID09PSAkdGhpcy0+ZGlzcGF0Y2hlcikgewpyZXR1cm4gJGNvbW1hbmQtPnJ1bigkaW5wdXQsICRvdXRwdXQpOwp9CgokZXZlbnQgPSBuZXcgQ29uc29sZUNvbW1hbmRFdmVudCgkY29tbWFuZCwgJGlucHV0LCAkb3V0cHV0KTsKJHRoaXMtPmRpc3BhdGNoZXItPmRpc3BhdGNoKENvbnNvbGVFdmVudHM6OkNPTU1BTkQsICRldmVudCk7Cgp0cnkgewokZXhpdENvZGUgPSAkY29tbWFuZC0+cnVuKCRpbnB1dCwgJG91dHB1dCk7Cn0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKJGV2ZW50ID0gbmV3IENvbnNvbGVUZXJtaW5hdGVFdmVudCgkY29tbWFuZCwgJGlucHV0LCAkb3V0cHV0LCAkZS0+Z2V0Q29kZSgpKTsKJHRoaXMtPmRpc3BhdGNoZXItPmRpc3BhdGNoKENvbnNvbGVFdmVudHM6OlRFUk1JTkFURSwgJGV2ZW50KTsKCiRldmVudCA9IG5ldyBDb25zb2xlRXhjZXB0aW9uRXZlbnQoJGNvbW1hbmQsICRpbnB1dCwgJG91dHB1dCwgJGUsICRldmVudC0+Z2V0RXhpdENvZGUoKSk7CiR0aGlzLT5kaXNwYXRjaGVyLT5kaXNwYXRjaChDb25zb2xlRXZlbnRzOjpFWENFUFRJT04sICRldmVudCk7Cgp0aHJvdyAkZXZlbnQtPmdldEV4Y2VwdGlvbigpOwp9CgokZXZlbnQgPSBuZXcgQ29uc29sZVRlcm1pbmF0ZUV2ZW50KCRjb21tYW5kLCAkaW5wdXQsICRvdXRwdXQsICRleGl0Q29kZSk7CiR0aGlzLT5kaXNwYXRjaGVyLT5kaXNwYXRjaChDb25zb2xlRXZlbnRzOjpURVJNSU5BVEUsICRldmVudCk7CgpyZXR1cm4gJGV2ZW50LT5nZXRFeGl0Q29kZSgpOwp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvbW1hbmROYW1lKElucHV0SW50ZXJmYWNlICRpbnB1dCkKewpyZXR1cm4gJGlucHV0LT5nZXRGaXJzdEFyZ3VtZW50KCk7Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRJbnB1dERlZmluaXRpb24oKQp7CnJldHVybiBuZXcgSW5wdXREZWZpbml0aW9uKGFycmF5KApuZXcgSW5wdXRBcmd1bWVudCgnY29tbWFuZCcsIElucHV0QXJndW1lbnQ6OlJFUVVJUkVELCAnVGhlIGNvbW1hbmQgdG8gZXhlY3V0ZScpLAoKbmV3IElucHV0T3B0aW9uKCctLWhlbHAnLCAnLWgnLCBJbnB1dE9wdGlvbjo6VkFMVUVfTk9ORSwgJ0Rpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2UuJyksCm5ldyBJbnB1dE9wdGlvbignLS1xdWlldCcsICctcScsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRG8gbm90IG91dHB1dCBhbnkgbWVzc2FnZS4nKSwKbmV3IElucHV0T3B0aW9uKCctLXZlcmJvc2UnLCAnLXZ8dnZ8dnZ2JywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdJbmNyZWFzZSB0aGUgdmVyYm9zaXR5IG9mIG1lc3NhZ2VzOiAxIGZvciBub3JtYWwgb3V0cHV0LCAyIGZvciBtb3JlIHZlcmJvc2Ugb3V0cHV0IGFuZCAzIGZvciBkZWJ1ZycpLApuZXcgSW5wdXRPcHRpb24oJy0tdmVyc2lvbicsICctVicsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzcGxheSB0aGlzIGFwcGxpY2F0aW9uIHZlcnNpb24uJyksCm5ldyBJbnB1dE9wdGlvbignLS1hbnNpJywgJycsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRm9yY2UgQU5TSSBvdXRwdXQuJyksCm5ldyBJbnB1dE9wdGlvbignLS1uby1hbnNpJywgJycsIElucHV0T3B0aW9uOjpWQUxVRV9OT05FLCAnRGlzYWJsZSBBTlNJIG91dHB1dC4nKSwKbmV3IElucHV0T3B0aW9uKCctLW5vLWludGVyYWN0aW9uJywgJy1uJywgSW5wdXRPcHRpb246OlZBTFVFX05PTkUsICdEbyBub3QgYXNrIGFueSBpbnRlcmFjdGl2ZSBxdWVzdGlvbi4nKSwKKSk7Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRDb21tYW5kcygpCnsKcmV0dXJuIGFycmF5KG5ldyBIZWxwQ29tbWFuZCgpLCBuZXcgTGlzdENvbW1hbmQoKSk7Cn0KCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldERlZmF1bHRIZWxwZXJTZXQoKQp7CnJldHVybiBuZXcgSGVscGVyU2V0KGFycmF5KApuZXcgRm9ybWF0dGVySGVscGVyKCksCm5ldyBEaWFsb2dIZWxwZXIoKSwKbmV3IFByb2dyZXNzSGVscGVyKCksCm5ldyBUYWJsZUhlbHBlcigpLAopKTsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldFN0dHlDb2x1bW5zKCkKewppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKcmV0dXJuOwp9CgokZGVzY3JpcHRvcnNwZWMgPSBhcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwgMiA9PiBhcnJheSgncGlwZScsICd3JykpOwokcHJvY2VzcyA9IHByb2Nfb3Blbignc3R0eSAtYSB8IGdyZXAgY29sdW1ucycsICRkZXNjcmlwdG9yc3BlYywgJHBpcGVzLCBudWxsLCBudWxsLCBhcnJheSgnc3VwcHJlc3NfZXJyb3JzJyA9PiB0cnVlKSk7CmlmIChpc19yZXNvdXJjZSgkcHJvY2VzcykpIHsKJGluZm8gPSBzdHJlYW1fZ2V0X2NvbnRlbnRzKCRwaXBlc1sxXSk7CmZjbG9zZSgkcGlwZXNbMV0pOwpmY2xvc2UoJHBpcGVzWzJdKTsKcHJvY19jbG9zZSgkcHJvY2Vzcyk7CgpyZXR1cm4gJGluZm87Cn0KfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldENvbnNvbGVNb2RlKCkKewppZiAoIWZ1bmN0aW9uX2V4aXN0cygncHJvY19vcGVuJykpIHsKcmV0dXJuOwp9CgokZGVzY3JpcHRvcnNwZWMgPSBhcnJheSgxID0+IGFycmF5KCdwaXBlJywgJ3cnKSwgMiA9PiBhcnJheSgncGlwZScsICd3JykpOwokcHJvY2VzcyA9IHByb2Nfb3BlbignbW9kZSBDT04nLCAkZGVzY3JpcHRvcnNwZWMsICRwaXBlcywgbnVsbCwgbnVsbCwgYXJyYXkoJ3N1cHByZXNzX2Vycm9ycycgPT4gdHJ1ZSkpOwppZiAoaXNfcmVzb3VyY2UoJHByb2Nlc3MpKSB7CiRpbmZvID0gc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pOwpmY2xvc2UoJHBpcGVzWzFdKTsKZmNsb3NlKCRwaXBlc1syXSk7CnByb2NfY2xvc2UoJHByb2Nlc3MpOwoKaWYgKHByZWdfbWF0Y2goJy8tLS0tLS0tLStccj9cbi4rPyhcZCspXHI/XG4uKz8oXGQrKVxyP1xuLycsICRpbmZvLCAkbWF0Y2hlcykpIHsKcmV0dXJuICRtYXRjaGVzWzJdLid4Jy4kbWF0Y2hlc1sxXTsKfQp9Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldEFiYnJldmlhdGlvblN1Z2dlc3Rpb25zKCRhYmJyZXZzKQp7CnJldHVybiBzcHJpbnRmKCclcywgJXMlcycsICRhYmJyZXZzWzBdLCAkYWJicmV2c1sxXSwgY291bnQoJGFiYnJldnMpID4gMiA/IHNwcmludGYoJyBhbmQgJWQgbW9yZScsIGNvdW50KCRhYmJyZXZzKSAtIDIpIDogJycpOwp9CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGV4dHJhY3ROYW1lc3BhY2UoJG5hbWUsICRsaW1pdCA9IG51bGwpCnsKJHBhcnRzID0gZXhwbG9kZSgnOicsICRuYW1lKTsKYXJyYXlfcG9wKCRwYXJ0cyk7CgpyZXR1cm4gaW1wbG9kZSgnOicsIG51bGwgPT09ICRsaW1pdCA/ICRwYXJ0cyA6IGFycmF5X3NsaWNlKCRwYXJ0cywgMCwgJGxpbWl0KSk7Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZmluZEFsdGVybmF0aXZlcygkbmFtZSwgJGNvbGxlY3Rpb24pCnsKJHRocmVzaG9sZCA9IDFlMzsKJGFsdGVybmF0aXZlcyA9IGFycmF5KCk7CgokY29sbGVjdGlvblBhcnRzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGNvbGxlY3Rpb24gYXMgJGl0ZW0pIHsKJGNvbGxlY3Rpb25QYXJ0c1skaXRlbV0gPSBleHBsb2RlKCc6JywgJGl0ZW0pOwp9Cgpmb3JlYWNoIChleHBsb2RlKCc6JywgJG5hbWUpIGFzICRpID0+ICRzdWJuYW1lKSB7CmZvcmVhY2ggKCRjb2xsZWN0aW9uUGFydHMgYXMgJGNvbGxlY3Rpb25OYW1lID0+ICRwYXJ0cykgewokZXhpc3RzID0gaXNzZXQoJGFsdGVybmF0aXZlc1skY29sbGVjdGlvbk5hbWVdKTsKaWYgKCFpc3NldCgkcGFydHNbJGldKSAmJiAkZXhpc3RzKSB7CiRhbHRlcm5hdGl2ZXNbJGNvbGxlY3Rpb25OYW1lXSArPSAkdGhyZXNob2xkOwpjb250aW51ZTsKfSBlbHNlaWYgKCFpc3NldCgkcGFydHNbJGldKSkgewpjb250aW51ZTsKfQoKJGxldiA9IGxldmVuc2h0ZWluKCRzdWJuYW1lLCAkcGFydHNbJGldKTsKaWYgKCRsZXYgPD0gc3RybGVuKCRzdWJuYW1lKSAvIDMgfHwgZmFsc2UgIT09IHN0cnBvcygkcGFydHNbJGldLCAkc3VibmFtZSkpIHsKJGFsdGVybmF0aXZlc1skY29sbGVjdGlvbk5hbWVdID0gJGV4aXN0cyA/ICRhbHRlcm5hdGl2ZXNbJGNvbGxlY3Rpb25OYW1lXSArICRsZXYgOiAkbGV2Owp9IGVsc2VpZiAoJGV4aXN0cykgewokYWx0ZXJuYXRpdmVzWyRjb2xsZWN0aW9uTmFtZV0gKz0gJHRocmVzaG9sZDsKfQp9Cn0KCmZvcmVhY2ggKCRjb2xsZWN0aW9uIGFzICRpdGVtKSB7CiRsZXYgPSBsZXZlbnNodGVpbigkbmFtZSwgJGl0ZW0pOwppZiAoJGxldiA8PSBzdHJsZW4oJG5hbWUpIC8gMyB8fCBmYWxzZSAhPT0gc3RycG9zKCRpdGVtLCAkbmFtZSkpIHsKJGFsdGVybmF0aXZlc1skaXRlbV0gPSBpc3NldCgkYWx0ZXJuYXRpdmVzWyRpdGVtXSkgPyAkYWx0ZXJuYXRpdmVzWyRpdGVtXSAtICRsZXYgOiAkbGV2Owp9Cn0KCiRhbHRlcm5hdGl2ZXMgPSBhcnJheV9maWx0ZXIoJGFsdGVybmF0aXZlcywgZnVuY3Rpb24gKCRsZXYpIHVzZSAoJHRocmVzaG9sZCkgeyByZXR1cm4gJGxldiA8IDIqJHRocmVzaG9sZDsgfSk7CmFzb3J0KCRhbHRlcm5hdGl2ZXMpOwoKcmV0dXJuIGFycmF5X2tleXMoJGFsdGVybmF0aXZlcyk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXQ7CgoKCgoKCgoKY2xhc3MgSW5wdXRBcmd1bWVudAp7CmNvbnN0IFJFUVVJUkVEID0gMTsKY29uc3QgT1BUSU9OQUwgPSAyOwpjb25zdCBJU19BUlJBWSA9IDQ7Cgpwcml2YXRlICRuYW1lOwpwcml2YXRlICRtb2RlOwpwcml2YXRlICRkZWZhdWx0Owpwcml2YXRlICRkZXNjcmlwdGlvbjsKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbmFtZSwgJG1vZGUgPSBudWxsLCAkZGVzY3JpcHRpb24gPSAnJywgJGRlZmF1bHQgPSBudWxsKQp7CmlmIChudWxsID09PSAkbW9kZSkgewokbW9kZSA9IHNlbGY6Ok9QVElPTkFMOwp9IGVsc2VpZiAoIWlzX2ludCgkbW9kZSkgfHwgJG1vZGUgPiA3IHx8ICRtb2RlIDwgMSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdBcmd1bWVudCBtb2RlICIlcyIgaXMgbm90IHZhbGlkLicsICRtb2RlKSk7Cn0KCiR0aGlzLT5uYW1lID0gJG5hbWU7CiR0aGlzLT5tb2RlID0gJG1vZGU7CiR0aGlzLT5kZXNjcmlwdGlvbiA9ICRkZXNjcmlwdGlvbjsKCiR0aGlzLT5zZXREZWZhdWx0KCRkZWZhdWx0KTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpCnsKcmV0dXJuICR0aGlzLT5uYW1lOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1JlcXVpcmVkKCkKewpyZXR1cm4gc2VsZjo6UkVRVUlSRUQgPT09IChzZWxmOjpSRVFVSVJFRCAmICR0aGlzLT5tb2RlKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNBcnJheSgpCnsKcmV0dXJuIHNlbGY6OklTX0FSUkFZID09PSAoc2VsZjo6SVNfQVJSQVkgJiAkdGhpcy0+bW9kZSk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdCgkZGVmYXVsdCA9IG51bGwpCnsKaWYgKHNlbGY6OlJFUVVJUkVEID09PSAkdGhpcy0+bW9kZSAmJiBudWxsICE9PSAkZGVmYXVsdCkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdDYW5ub3Qgc2V0IGEgZGVmYXVsdCB2YWx1ZSBleGNlcHQgZm9yIElucHV0QXJndW1lbnQ6Ok9QVElPTkFMIG1vZGUuJyk7Cn0KCmlmICgkdGhpcy0+aXNBcnJheSgpKSB7CmlmIChudWxsID09PSAkZGVmYXVsdCkgewokZGVmYXVsdCA9IGFycmF5KCk7Cn0gZWxzZWlmICghaXNfYXJyYXkoJGRlZmF1bHQpKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0EgZGVmYXVsdCB2YWx1ZSBmb3IgYW4gYXJyYXkgYXJndW1lbnQgbXVzdCBiZSBhbiBhcnJheS4nKTsKfQp9CgokdGhpcy0+ZGVmYXVsdCA9ICRkZWZhdWx0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZWZhdWx0KCkKewpyZXR1cm4gJHRoaXMtPmRlZmF1bHQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldERlc2NyaXB0aW9uKCkKewpyZXR1cm4gJHRoaXMtPmRlc2NyaXB0aW9uOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0OwoKCgoKCgoKCgoKCgphYnN0cmFjdCBjbGFzcyBJbnB1dCBpbXBsZW1lbnRzIElucHV0SW50ZXJmYWNlCnsKCgoKcHJvdGVjdGVkICRkZWZpbml0aW9uOwpwcm90ZWN0ZWQgJG9wdGlvbnMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJGFyZ3VtZW50cyA9IGFycmF5KCk7CnByb3RlY3RlZCAkaW50ZXJhY3RpdmUgPSB0cnVlOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uID0gbnVsbCkKewppZiAobnVsbCA9PT0gJGRlZmluaXRpb24pIHsKJHRoaXMtPmRlZmluaXRpb24gPSBuZXcgSW5wdXREZWZpbml0aW9uKCk7Cn0gZWxzZSB7CiR0aGlzLT5iaW5kKCRkZWZpbml0aW9uKTsKJHRoaXMtPnZhbGlkYXRlKCk7Cn0KfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYmluZChJbnB1dERlZmluaXRpb24gJGRlZmluaXRpb24pCnsKJHRoaXMtPmFyZ3VtZW50cyA9IGFycmF5KCk7CiR0aGlzLT5vcHRpb25zID0gYXJyYXkoKTsKJHRoaXMtPmRlZmluaXRpb24gPSAkZGVmaW5pdGlvbjsKCiR0aGlzLT5wYXJzZSgpOwp9CgoKCgphYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyc2UoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlKCkKewppZiAoY291bnQoJHRoaXMtPmFyZ3VtZW50cykgPCAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnRSZXF1aXJlZENvdW50KCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdOb3QgZW5vdWdoIGFyZ3VtZW50cy4nKTsKfQp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0ludGVyYWN0aXZlKCkKewpyZXR1cm4gJHRoaXMtPmludGVyYWN0aXZlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRJbnRlcmFjdGl2ZSgkaW50ZXJhY3RpdmUpCnsKJHRoaXMtPmludGVyYWN0aXZlID0gKEJvb2xlYW4pICRpbnRlcmFjdGl2ZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXJndW1lbnRzKCkKewpyZXR1cm4gYXJyYXlfbWVyZ2UoJHRoaXMtPmRlZmluaXRpb24tPmdldEFyZ3VtZW50RGVmYXVsdHMoKSwgJHRoaXMtPmFyZ3VtZW50cyk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudCgkbmFtZSkKewppZiAoISR0aGlzLT5kZWZpbml0aW9uLT5oYXNBcmd1bWVudCgkbmFtZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlICIlcyIgYXJndW1lbnQgZG9lcyBub3QgZXhpc3QuJywgJG5hbWUpKTsKfQoKcmV0dXJuIGlzc2V0KCR0aGlzLT5hcmd1bWVudHNbJG5hbWVdKSA/ICR0aGlzLT5hcmd1bWVudHNbJG5hbWVdIDogJHRoaXMtPmRlZmluaXRpb24tPmdldEFyZ3VtZW50KCRuYW1lKS0+Z2V0RGVmYXVsdCgpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudCgkbmFtZSwgJHZhbHVlKQp7CmlmICghJHRoaXMtPmRlZmluaXRpb24tPmhhc0FyZ3VtZW50KCRuYW1lKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzIiBhcmd1bWVudCBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZSkpOwp9CgokdGhpcy0+YXJndW1lbnRzWyRuYW1lXSA9ICR2YWx1ZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNBcmd1bWVudCgkbmFtZSkKewpyZXR1cm4gJHRoaXMtPmRlZmluaXRpb24tPmhhc0FyZ3VtZW50KCRuYW1lKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9ucygpCnsKcmV0dXJuIGFycmF5X21lcmdlKCR0aGlzLT5kZWZpbml0aW9uLT5nZXRPcHRpb25EZWZhdWx0cygpLCAkdGhpcy0+b3B0aW9ucyk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb24oJG5hbWUpCnsKaWYgKCEkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzT3B0aW9uKCRuYW1lKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuJywgJG5hbWUpKTsKfQoKcmV0dXJuIGlzc2V0KCR0aGlzLT5vcHRpb25zWyRuYW1lXSkgPyAkdGhpcy0+b3B0aW9uc1skbmFtZV0gOiAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0T3B0aW9uKCRuYW1lKS0+Z2V0RGVmYXVsdCgpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb24oJG5hbWUsICR2YWx1ZSkKewppZiAoISR0aGlzLT5kZWZpbml0aW9uLT5oYXNPcHRpb24oJG5hbWUpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiJXMiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZSkpOwp9CgokdGhpcy0+b3B0aW9uc1skbmFtZV0gPSAkdmFsdWU7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzT3B0aW9uKCRuYW1lKQp7CnJldHVybiAkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzT3B0aW9uKCRuYW1lKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBlc2NhcGVUb2tlbigkdG9rZW4pCnsKcmV0dXJuIHByZWdfbWF0Y2goJ3teW1x3LV0rJH0nLCAkdG9rZW4pID8gJHRva2VuIDogZXNjYXBlc2hlbGxhcmcoJHRva2VuKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dDsKCgoKCgoKCgoKCgoKY2xhc3MgU3RyaW5nSW5wdXQgZXh0ZW5kcyBBcmd2SW5wdXQKewpjb25zdCBSRUdFWF9TVFJJTkcgPSAnKFteXHNdKz8pKD86XHN8KD88IVxcXFwpInwoPzwhXFxcXClcJ3wkKSc7CmNvbnN0IFJFR0VYX1FVT1RFRF9TVFJJTkcgPSAnKD86IihbXiJcXFxcXSooPzpcXFxcLlteIlxcXFxdKikqKSJ8XCcoW15cJ1xcXFxdKig/OlxcXFwuW15cJ1xcXFxdKikqKVwnKSc7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRpbnB1dCwgSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uID0gbnVsbCkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KGFycmF5KCksIG51bGwpOwoKJHRoaXMtPnNldFRva2VucygkdGhpcy0+dG9rZW5pemUoJGlucHV0KSk7CgppZiAobnVsbCAhPT0gJGRlZmluaXRpb24pIHsKJHRoaXMtPmJpbmQoJGRlZmluaXRpb24pOwp9Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gdG9rZW5pemUoJGlucHV0KQp7CiR0b2tlbnMgPSBhcnJheSgpOwokbGVuZ3RoID0gc3RybGVuKCRpbnB1dCk7CiRjdXJzb3IgPSAwOwp3aGlsZSAoJGN1cnNvciA8ICRsZW5ndGgpIHsKaWYgKHByZWdfbWF0Y2goJy9ccysvQScsICRpbnB1dCwgJG1hdGNoLCBudWxsLCAkY3Vyc29yKSkgewp9IGVsc2VpZiAocHJlZ19tYXRjaCgnLyhbXj0iXCdcc10rPykoPT8pKCcuc2VsZjo6UkVHRVhfUVVPVEVEX1NUUklORy4nKykvQScsICRpbnB1dCwgJG1hdGNoLCBudWxsLCAkY3Vyc29yKSkgewokdG9rZW5zW10gPSAkbWF0Y2hbMV0uJG1hdGNoWzJdLnN0cmlwY3NsYXNoZXMoc3RyX3JlcGxhY2UoYXJyYXkoJyJcJycsICdcJyInLCAnXCdcJycsICciIicpLCAnJywgc3Vic3RyKCRtYXRjaFszXSwgMSwgc3RybGVuKCRtYXRjaFszXSkgLSAyKSkpOwp9IGVsc2VpZiAocHJlZ19tYXRjaCgnLycuc2VsZjo6UkVHRVhfUVVPVEVEX1NUUklORy4nL0EnLCAkaW5wdXQsICRtYXRjaCwgbnVsbCwgJGN1cnNvcikpIHsKJHRva2Vuc1tdID0gc3RyaXBjc2xhc2hlcyhzdWJzdHIoJG1hdGNoWzBdLCAxLCBzdHJsZW4oJG1hdGNoWzBdKSAtIDIpKTsKfSBlbHNlaWYgKHByZWdfbWF0Y2goJy8nLnNlbGY6OlJFR0VYX1NUUklORy4nL0EnLCAkaW5wdXQsICRtYXRjaCwgbnVsbCwgJGN1cnNvcikpIHsKJHRva2Vuc1tdID0gc3RyaXBjc2xhc2hlcygkbWF0Y2hbMV0pOwp9IGVsc2UgewoKIAogdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVW5hYmxlIHRvIHBhcnNlIGlucHV0IG5lYXIgIi4uLiAlcyAuLi4iJywgc3Vic3RyKCRpbnB1dCwgJGN1cnNvciwgMTApKSk7CgogfQoKJGN1cnNvciArPSBzdHJsZW4oJG1hdGNoWzBdKTsKfQoKcmV0dXJuICR0b2tlbnM7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXQ7CgoKCgoKCgoKY2xhc3MgSW5wdXRPcHRpb24Kewpjb25zdCBWQUxVRV9OT05FID0gMTsKY29uc3QgVkFMVUVfUkVRVUlSRUQgPSAyOwpjb25zdCBWQUxVRV9PUFRJT05BTCA9IDQ7CmNvbnN0IFZBTFVFX0lTX0FSUkFZID0gODsKCnByaXZhdGUgJG5hbWU7CnByaXZhdGUgJHNob3J0Y3V0Owpwcml2YXRlICRtb2RlOwpwcml2YXRlICRkZWZhdWx0Owpwcml2YXRlICRkZXNjcmlwdGlvbjsKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG5hbWUsICRzaG9ydGN1dCA9IG51bGwsICRtb2RlID0gbnVsbCwgJGRlc2NyaXB0aW9uID0gJycsICRkZWZhdWx0ID0gbnVsbCkKewppZiAoMCA9PT0gc3RycG9zKCRuYW1lLCAnLS0nKSkgewokbmFtZSA9IHN1YnN0cigkbmFtZSwgMik7Cn0KCmlmIChlbXB0eSgkbmFtZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0FuIG9wdGlvbiBuYW1lIGNhbm5vdCBiZSBlbXB0eS4nKTsKfQoKaWYgKGVtcHR5KCRzaG9ydGN1dCkpIHsKJHNob3J0Y3V0ID0gbnVsbDsKfQoKaWYgKG51bGwgIT09ICRzaG9ydGN1dCkgewppZiAoaXNfYXJyYXkoJHNob3J0Y3V0KSkgewokc2hvcnRjdXQgPSBpbXBsb2RlKCd8JywgJHNob3J0Y3V0KTsKfQokc2hvcnRjdXRzID0gcHJlZ19zcGxpdCgneyhcfCktP30nLCBsdHJpbSgkc2hvcnRjdXQsICctJykpOwokc2hvcnRjdXRzID0gYXJyYXlfZmlsdGVyKCRzaG9ydGN1dHMpOwokc2hvcnRjdXQgPSBpbXBsb2RlKCd8JywgJHNob3J0Y3V0cyk7CgppZiAoZW1wdHkoJHNob3J0Y3V0KSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignQW4gb3B0aW9uIHNob3J0Y3V0IGNhbm5vdCBiZSBlbXB0eS4nKTsKfQp9CgppZiAobnVsbCA9PT0gJG1vZGUpIHsKJG1vZGUgPSBzZWxmOjpWQUxVRV9OT05FOwp9IGVsc2VpZiAoIWlzX2ludCgkbW9kZSkgfHwgJG1vZGUgPiAxNSB8fCAkbW9kZSA8IDEpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignT3B0aW9uIG1vZGUgIiVzIiBpcyBub3QgdmFsaWQuJywgJG1vZGUpKTsKfQoKJHRoaXMtPm5hbWUgPSAkbmFtZTsKJHRoaXMtPnNob3J0Y3V0ID0gJHNob3J0Y3V0OwokdGhpcy0+bW9kZSA9ICRtb2RlOwokdGhpcy0+ZGVzY3JpcHRpb24gPSAkZGVzY3JpcHRpb247CgppZiAoJHRoaXMtPmlzQXJyYXkoKSAmJiAhJHRoaXMtPmFjY2VwdFZhbHVlKCkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ltcG9zc2libGUgdG8gaGF2ZSBhbiBvcHRpb24gbW9kZSBWQUxVRV9JU19BUlJBWSBpZiB0aGUgb3B0aW9uIGRvZXMgbm90IGFjY2VwdCBhIHZhbHVlLicpOwp9CgokdGhpcy0+c2V0RGVmYXVsdCgkZGVmYXVsdCk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFNob3J0Y3V0KCkKewpyZXR1cm4gJHRoaXMtPnNob3J0Y3V0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJHRoaXMtPm5hbWU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFjY2VwdFZhbHVlKCkKewpyZXR1cm4gJHRoaXMtPmlzVmFsdWVSZXF1aXJlZCgpIHx8ICR0aGlzLT5pc1ZhbHVlT3B0aW9uYWwoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWYWx1ZVJlcXVpcmVkKCkKewpyZXR1cm4gc2VsZjo6VkFMVUVfUkVRVUlSRUQgPT09IChzZWxmOjpWQUxVRV9SRVFVSVJFRCAmICR0aGlzLT5tb2RlKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWYWx1ZU9wdGlvbmFsKCkKewpyZXR1cm4gc2VsZjo6VkFMVUVfT1BUSU9OQUwgPT09IChzZWxmOjpWQUxVRV9PUFRJT05BTCAmICR0aGlzLT5tb2RlKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNBcnJheSgpCnsKcmV0dXJuIHNlbGY6OlZBTFVFX0lTX0FSUkFZID09PSAoc2VsZjo6VkFMVUVfSVNfQVJSQVkgJiAkdGhpcy0+bW9kZSk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGVmYXVsdCgkZGVmYXVsdCA9IG51bGwpCnsKaWYgKHNlbGY6OlZBTFVFX05PTkUgPT09IChzZWxmOjpWQUxVRV9OT05FICYgJHRoaXMtPm1vZGUpICYmIG51bGwgIT09ICRkZWZhdWx0KSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCBzZXQgYSBkZWZhdWx0IHZhbHVlIHdoZW4gdXNpbmcgSW5wdXRPcHRpb246OlZBTFVFX05PTkUgbW9kZS4nKTsKfQoKaWYgKCR0aGlzLT5pc0FycmF5KCkpIHsKaWYgKG51bGwgPT09ICRkZWZhdWx0KSB7CiRkZWZhdWx0ID0gYXJyYXkoKTsKfSBlbHNlaWYgKCFpc19hcnJheSgkZGVmYXVsdCkpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQSBkZWZhdWx0IHZhbHVlIGZvciBhbiBhcnJheSBvcHRpb24gbXVzdCBiZSBhbiBhcnJheS4nKTsKfQp9CgokdGhpcy0+ZGVmYXVsdCA9ICR0aGlzLT5hY2NlcHRWYWx1ZSgpID8gJGRlZmF1bHQgOiBmYWxzZTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGVmYXVsdCgpCnsKcmV0dXJuICR0aGlzLT5kZWZhdWx0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXREZXNjcmlwdGlvbigpCnsKcmV0dXJuICR0aGlzLT5kZXNjcmlwdGlvbjsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGVxdWFscyhJbnB1dE9wdGlvbiAkb3B0aW9uKQp7CnJldHVybiAkb3B0aW9uLT5nZXROYW1lKCkgPT09ICR0aGlzLT5nZXROYW1lKCkKJiYgJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSA9PT0gJHRoaXMtPmdldFNob3J0Y3V0KCkKJiYgJG9wdGlvbi0+Z2V0RGVmYXVsdCgpID09PSAkdGhpcy0+Z2V0RGVmYXVsdCgpCiYmICRvcHRpb24tPmlzQXJyYXkoKSA9PT0gJHRoaXMtPmlzQXJyYXkoKQomJiAkb3B0aW9uLT5pc1ZhbHVlUmVxdWlyZWQoKSA9PT0gJHRoaXMtPmlzVmFsdWVSZXF1aXJlZCgpCiYmICRvcHRpb24tPmlzVmFsdWVPcHRpb25hbCgpID09PSAkdGhpcy0+aXNWYWx1ZU9wdGlvbmFsKCkKOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0OwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgQXJndklucHV0IGV4dGVuZHMgSW5wdXQKewpwcml2YXRlICR0b2tlbnM7CnByaXZhdGUgJHBhcnNlZDsKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRhcmd2ID0gbnVsbCwgSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uID0gbnVsbCkKewppZiAobnVsbCA9PT0gJGFyZ3YpIHsKJGFyZ3YgPSAkX1NFUlZFUlsnYXJndiddOwp9CgoKIGFycmF5X3NoaWZ0KCRhcmd2KTsKCiR0aGlzLT50b2tlbnMgPSAkYXJndjsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJGRlZmluaXRpb24pOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0VG9rZW5zKGFycmF5ICR0b2tlbnMpCnsKJHRoaXMtPnRva2VucyA9ICR0b2tlbnM7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZSgpCnsKJHBhcnNlT3B0aW9ucyA9IHRydWU7CiR0aGlzLT5wYXJzZWQgPSAkdGhpcy0+dG9rZW5zOwp3aGlsZSAobnVsbCAhPT0gJHRva2VuID0gYXJyYXlfc2hpZnQoJHRoaXMtPnBhcnNlZCkpIHsKaWYgKCRwYXJzZU9wdGlvbnMgJiYgJycgPT0gJHRva2VuKSB7CiR0aGlzLT5wYXJzZUFyZ3VtZW50KCR0b2tlbik7Cn0gZWxzZWlmICgkcGFyc2VPcHRpb25zICYmICctLScgPT0gJHRva2VuKSB7CiRwYXJzZU9wdGlvbnMgPSBmYWxzZTsKfSBlbHNlaWYgKCRwYXJzZU9wdGlvbnMgJiYgMCA9PT0gc3RycG9zKCR0b2tlbiwgJy0tJykpIHsKJHRoaXMtPnBhcnNlTG9uZ09wdGlvbigkdG9rZW4pOwp9IGVsc2VpZiAoJHBhcnNlT3B0aW9ucyAmJiAnLScgPT09ICR0b2tlblswXSAmJiAnLScgIT09ICR0b2tlbikgewokdGhpcy0+cGFyc2VTaG9ydE9wdGlvbigkdG9rZW4pOwp9IGVsc2UgewokdGhpcy0+cGFyc2VBcmd1bWVudCgkdG9rZW4pOwp9Cn0KfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHBhcnNlU2hvcnRPcHRpb24oJHRva2VuKQp7CiRuYW1lID0gc3Vic3RyKCR0b2tlbiwgMSk7CgppZiAoc3RybGVuKCRuYW1lKSA+IDEpIHsKaWYgKCR0aGlzLT5kZWZpbml0aW9uLT5oYXNTaG9ydGN1dCgkbmFtZVswXSkgJiYgJHRoaXMtPmRlZmluaXRpb24tPmdldE9wdGlvbkZvclNob3J0Y3V0KCRuYW1lWzBdKS0+YWNjZXB0VmFsdWUoKSkgewoKICR0aGlzLT5hZGRTaG9ydE9wdGlvbigkbmFtZVswXSwgc3Vic3RyKCRuYW1lLCAxKSk7Cn0gZWxzZSB7CiR0aGlzLT5wYXJzZVNob3J0T3B0aW9uU2V0KCRuYW1lKTsKfQp9IGVsc2UgewokdGhpcy0+YWRkU2hvcnRPcHRpb24oJG5hbWUsIG51bGwpOwp9Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHBhcnNlU2hvcnRPcHRpb25TZXQoJG5hbWUpCnsKJGxlbiA9IHN0cmxlbigkbmFtZSk7CmZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICRpKyspIHsKaWYgKCEkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzU2hvcnRjdXQoJG5hbWVbJGldKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVGhlICItJXMiIG9wdGlvbiBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZVskaV0pKTsKfQoKJG9wdGlvbiA9ICR0aGlzLT5kZWZpbml0aW9uLT5nZXRPcHRpb25Gb3JTaG9ydGN1dCgkbmFtZVskaV0pOwppZiAoJG9wdGlvbi0+YWNjZXB0VmFsdWUoKSkgewokdGhpcy0+YWRkTG9uZ09wdGlvbigkb3B0aW9uLT5nZXROYW1lKCksICRpID09PSAkbGVuIC0gMSA/IG51bGwgOiBzdWJzdHIoJG5hbWUsICRpICsgMSkpOwoKYnJlYWs7Cn0gZWxzZSB7CiR0aGlzLT5hZGRMb25nT3B0aW9uKCRvcHRpb24tPmdldE5hbWUoKSwgbnVsbCk7Cn0KfQp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcGFyc2VMb25nT3B0aW9uKCR0b2tlbikKewokbmFtZSA9IHN1YnN0cigkdG9rZW4sIDIpOwoKaWYgKGZhbHNlICE9PSAkcG9zID0gc3RycG9zKCRuYW1lLCAnPScpKSB7CiR0aGlzLT5hZGRMb25nT3B0aW9uKHN1YnN0cigkbmFtZSwgMCwgJHBvcyksIHN1YnN0cigkbmFtZSwgJHBvcyArIDEpKTsKfSBlbHNlIHsKJHRoaXMtPmFkZExvbmdPcHRpb24oJG5hbWUsIG51bGwpOwp9Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHBhcnNlQXJndW1lbnQoJHRva2VuKQp7CiRjID0gY291bnQoJHRoaXMtPmFyZ3VtZW50cyk7CgoKIGlmICgkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzQXJndW1lbnQoJGMpKSB7CiRhcmcgPSAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnQoJGMpOwokdGhpcy0+YXJndW1lbnRzWyRhcmctPmdldE5hbWUoKV0gPSAkYXJnLT5pc0FycmF5KCk/IGFycmF5KCR0b2tlbikgOiAkdG9rZW47CgoKIH0gZWxzZWlmICgkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzQXJndW1lbnQoJGMgLSAxKSAmJiAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnQoJGMgLSAxKS0+aXNBcnJheSgpKSB7CiRhcmcgPSAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnQoJGMgLSAxKTsKJHRoaXMtPmFyZ3VtZW50c1skYXJnLT5nZXROYW1lKCldW10gPSAkdG9rZW47CgoKIH0gZWxzZSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVG9vIG1hbnkgYXJndW1lbnRzLicpOwp9Cn0KCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBhZGRTaG9ydE9wdGlvbigkc2hvcnRjdXQsICR2YWx1ZSkKewppZiAoISR0aGlzLT5kZWZpbml0aW9uLT5oYXNTaG9ydGN1dCgkc2hvcnRjdXQpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIi0lcyIgb3B0aW9uIGRvZXMgbm90IGV4aXN0LicsICRzaG9ydGN1dCkpOwp9CgokdGhpcy0+YWRkTG9uZ09wdGlvbigkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0T3B0aW9uRm9yU2hvcnRjdXQoJHNob3J0Y3V0KS0+Z2V0TmFtZSgpLCAkdmFsdWUpOwp9CgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYWRkTG9uZ09wdGlvbigkbmFtZSwgJHZhbHVlKQp7CmlmICghJHRoaXMtPmRlZmluaXRpb24tPmhhc09wdGlvbigkbmFtZSkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiLS0lcyIgb3B0aW9uIGRvZXMgbm90IGV4aXN0LicsICRuYW1lKSk7Cn0KCiRvcHRpb24gPSAkdGhpcy0+ZGVmaW5pdGlvbi0+Z2V0T3B0aW9uKCRuYW1lKTsKCgogaWYgKGZhbHNlID09PSAkdmFsdWUpIHsKJHZhbHVlID0gbnVsbDsKfQoKaWYgKG51bGwgIT09ICR2YWx1ZSAmJiAhJG9wdGlvbi0+YWNjZXB0VmFsdWUoKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignVGhlICItLSVzIiBvcHRpb24gZG9lcyBub3QgYWNjZXB0IGEgdmFsdWUuJywgJG5hbWUsICR2YWx1ZSkpOwp9CgppZiAobnVsbCA9PT0gJHZhbHVlICYmICRvcHRpb24tPmFjY2VwdFZhbHVlKCkgJiYgY291bnQoJHRoaXMtPnBhcnNlZCkpIHsKCiAKICRuZXh0ID0gYXJyYXlfc2hpZnQoJHRoaXMtPnBhcnNlZCk7CmlmIChpc3NldCgkbmV4dFswXSkgJiYgJy0nICE9PSAkbmV4dFswXSkgewokdmFsdWUgPSAkbmV4dDsKfSBlbHNlaWYgKGVtcHR5KCRuZXh0KSkgewokdmFsdWUgPSAnJzsKfSBlbHNlIHsKYXJyYXlfdW5zaGlmdCgkdGhpcy0+cGFyc2VkLCAkbmV4dCk7Cn0KfQoKaWYgKG51bGwgPT09ICR2YWx1ZSkgewppZiAoJG9wdGlvbi0+aXNWYWx1ZVJlcXVpcmVkKCkpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiLS0lcyIgb3B0aW9uIHJlcXVpcmVzIGEgdmFsdWUuJywgJG5hbWUpKTsKfQoKaWYgKCEkb3B0aW9uLT5pc0FycmF5KCkpIHsKJHZhbHVlID0gJG9wdGlvbi0+aXNWYWx1ZU9wdGlvbmFsKCkgPyAkb3B0aW9uLT5nZXREZWZhdWx0KCkgOiB0cnVlOwp9Cn0KCmlmICgkb3B0aW9uLT5pc0FycmF5KCkpIHsKJHRoaXMtPm9wdGlvbnNbJG5hbWVdW10gPSAkdmFsdWU7Cn0gZWxzZSB7CiR0aGlzLT5vcHRpb25zWyRuYW1lXSA9ICR2YWx1ZTsKfQp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdEFyZ3VtZW50KCkKewpmb3JlYWNoICgkdGhpcy0+dG9rZW5zIGFzICR0b2tlbikgewppZiAoJHRva2VuICYmICctJyA9PT0gJHRva2VuWzBdKSB7CmNvbnRpbnVlOwp9CgpyZXR1cm4gJHRva2VuOwp9Cn0KCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzUGFyYW1ldGVyT3B0aW9uKCR2YWx1ZXMpCnsKJHZhbHVlcyA9IChhcnJheSkgJHZhbHVlczsKCmZvcmVhY2ggKCR0aGlzLT50b2tlbnMgYXMgJHRva2VuKSB7CmZvcmVhY2ggKCR2YWx1ZXMgYXMgJHZhbHVlKSB7CmlmICgkdG9rZW4gPT09ICR2YWx1ZSB8fCAwID09PSBzdHJwb3MoJHRva2VuLCAkdmFsdWUuJz0nKSkgewpyZXR1cm4gdHJ1ZTsKfQp9Cn0KCnJldHVybiBmYWxzZTsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyYW1ldGVyT3B0aW9uKCR2YWx1ZXMsICRkZWZhdWx0ID0gZmFsc2UpCnsKJHZhbHVlcyA9IChhcnJheSkgJHZhbHVlczsKCiR0b2tlbnMgPSAkdGhpcy0+dG9rZW5zOwp3aGlsZSAoJHRva2VuID0gYXJyYXlfc2hpZnQoJHRva2VucykpIHsKZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKaWYgKCR0b2tlbiA9PT0gJHZhbHVlIHx8IDAgPT09IHN0cnBvcygkdG9rZW4sICR2YWx1ZS4nPScpKSB7CmlmIChmYWxzZSAhPT0gJHBvcyA9IHN0cnBvcygkdG9rZW4sICc9JykpIHsKcmV0dXJuIHN1YnN0cigkdG9rZW4sICRwb3MgKyAxKTsKfQoKcmV0dXJuIGFycmF5X3NoaWZ0KCR0b2tlbnMpOwp9Cn0KfQoKcmV0dXJuICRkZWZhdWx0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewokc2VsZiA9ICR0aGlzOwokdG9rZW5zID0gYXJyYXlfbWFwKGZ1bmN0aW9uICgkdG9rZW4pIHVzZSAoJHNlbGYpIHsKaWYgKHByZWdfbWF0Y2goJ3teKC1bXj1dKz0pKC4rKX0nLCAkdG9rZW4sICRtYXRjaCkpIHsKcmV0dXJuICRtYXRjaFsxXSAuICRzZWxmLT5lc2NhcGVUb2tlbigkbWF0Y2hbMl0pOwp9CgppZiAoJHRva2VuICYmICR0b2tlblswXSAhPT0gJy0nKSB7CnJldHVybiAkc2VsZi0+ZXNjYXBlVG9rZW4oJHRva2VuKTsKfQoKcmV0dXJuICR0b2tlbjsKfSwgJHRoaXMtPnRva2Vucyk7CgpyZXR1cm4gaW1wbG9kZSgnICcsICR0b2tlbnMpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0OwoKCgoKCgppbnRlcmZhY2UgSW5wdXRJbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRGaXJzdEFyZ3VtZW50KCk7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1BhcmFtZXRlck9wdGlvbigkdmFsdWVzKTsKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtZXRlck9wdGlvbigkdmFsdWVzLCAkZGVmYXVsdCA9IGZhbHNlKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGJpbmQoSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGUoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50cygpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBcmd1bWVudCgkbmFtZSk7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudCgkbmFtZSwgJHZhbHVlKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzQXJndW1lbnQoJG5hbWUpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9ucygpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb24oJG5hbWUpOwoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0T3B0aW9uKCRuYW1lLCAkdmFsdWUpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNPcHRpb24oJG5hbWUpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNJbnRlcmFjdGl2ZSgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SW50ZXJhY3RpdmUoJGludGVyYWN0aXZlKTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXQ7CgoKCgoKCgoKCgoKCmNsYXNzIEFycmF5SW5wdXQgZXh0ZW5kcyBJbnB1dAp7CnByaXZhdGUgJHBhcmFtZXRlcnM7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChhcnJheSAkcGFyYW1ldGVycywgSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uID0gbnVsbCkKewokdGhpcy0+cGFyYW1ldGVycyA9ICRwYXJhbWV0ZXJzOwoKcGFyZW50OjpfX2NvbnN0cnVjdCgkZGVmaW5pdGlvbik7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEZpcnN0QXJndW1lbnQoKQp7CmZvcmVhY2ggKCR0aGlzLT5wYXJhbWV0ZXJzIGFzICRrZXkgPT4gJHZhbHVlKSB7CmlmICgka2V5ICYmICctJyA9PT0gJGtleVswXSkgewpjb250aW51ZTsKfQoKcmV0dXJuICR2YWx1ZTsKfQp9CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1BhcmFtZXRlck9wdGlvbigkdmFsdWVzKQp7CiR2YWx1ZXMgPSAoYXJyYXkpICR2YWx1ZXM7Cgpmb3JlYWNoICgkdGhpcy0+cGFyYW1ldGVycyBhcyAkayA9PiAkdikgewppZiAoIWlzX2ludCgkaykpIHsKJHYgPSAkazsKfQoKaWYgKGluX2FycmF5KCR2LCAkdmFsdWVzKSkgewpyZXR1cm4gdHJ1ZTsKfQp9CgpyZXR1cm4gZmFsc2U7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFBhcmFtZXRlck9wdGlvbigkdmFsdWVzLCAkZGVmYXVsdCA9IGZhbHNlKQp7CiR2YWx1ZXMgPSAoYXJyYXkpICR2YWx1ZXM7Cgpmb3JlYWNoICgkdGhpcy0+cGFyYW1ldGVycyBhcyAkayA9PiAkdikgewppZiAoaXNfaW50KCRrKSAmJiBpbl9hcnJheSgkdiwgJHZhbHVlcykpIHsKcmV0dXJuIHRydWU7Cn0gZWxzZWlmIChpbl9hcnJheSgkaywgJHZhbHVlcykpIHsKcmV0dXJuICR2Owp9Cn0KCnJldHVybiAkZGVmYXVsdDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCnsKJHBhcmFtcyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0aGlzLT5wYXJhbWV0ZXJzIGFzICRwYXJhbSA9PiAkdmFsKSB7CmlmICgkcGFyYW0gJiYgJy0nID09PSAkcGFyYW1bMF0pIHsKJHBhcmFtc1tdID0gJHBhcmFtIC4gKCcnICE9ICR2YWwgPyAnPScuJHRoaXMtPmVzY2FwZVRva2VuKCR2YWwpIDogJycpOwp9IGVsc2UgewokcGFyYW1zW10gPSAkdGhpcy0+ZXNjYXBlVG9rZW4oJHZhbCk7Cn0KfQoKcmV0dXJuIGltcGxvZGUoJyAnLCAkcGFyYW1zKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlKCkKewpmb3JlYWNoICgkdGhpcy0+cGFyYW1ldGVycyBhcyAka2V5ID0+ICR2YWx1ZSkgewppZiAoMCA9PT0gc3RycG9zKCRrZXksICctLScpKSB7CiR0aGlzLT5hZGRMb25nT3B0aW9uKHN1YnN0cigka2V5LCAyKSwgJHZhbHVlKTsKfSBlbHNlaWYgKCctJyA9PT0gJGtleVswXSkgewokdGhpcy0+YWRkU2hvcnRPcHRpb24oc3Vic3RyKCRrZXksIDEpLCAkdmFsdWUpOwp9IGVsc2UgewokdGhpcy0+YWRkQXJndW1lbnQoJGtleSwgJHZhbHVlKTsKfQp9Cn0KCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBhZGRTaG9ydE9wdGlvbigkc2hvcnRjdXQsICR2YWx1ZSkKewppZiAoISR0aGlzLT5kZWZpbml0aW9uLT5oYXNTaG9ydGN1dCgkc2hvcnRjdXQpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiLSVzIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuJywgJHNob3J0Y3V0KSk7Cn0KCiR0aGlzLT5hZGRMb25nT3B0aW9uKCR0aGlzLT5kZWZpbml0aW9uLT5nZXRPcHRpb25Gb3JTaG9ydGN1dCgkc2hvcnRjdXQpLT5nZXROYW1lKCksICR2YWx1ZSk7Cn0KCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYWRkTG9uZ09wdGlvbigkbmFtZSwgJHZhbHVlKQp7CmlmICghJHRoaXMtPmRlZmluaXRpb24tPmhhc09wdGlvbigkbmFtZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlICItLSVzIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuJywgJG5hbWUpKTsKfQoKJG9wdGlvbiA9ICR0aGlzLT5kZWZpbml0aW9uLT5nZXRPcHRpb24oJG5hbWUpOwoKaWYgKG51bGwgPT09ICR2YWx1ZSkgewppZiAoJG9wdGlvbi0+aXNWYWx1ZVJlcXVpcmVkKCkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlICItLSVzIiBvcHRpb24gcmVxdWlyZXMgYSB2YWx1ZS4nLCAkbmFtZSkpOwp9CgokdmFsdWUgPSAkb3B0aW9uLT5pc1ZhbHVlT3B0aW9uYWwoKSA/ICRvcHRpb24tPmdldERlZmF1bHQoKSA6IHRydWU7Cn0KCiR0aGlzLT5vcHRpb25zWyRuYW1lXSA9ICR2YWx1ZTsKfQoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGFkZEFyZ3VtZW50KCRuYW1lLCAkdmFsdWUpCnsKaWYgKCEkdGhpcy0+ZGVmaW5pdGlvbi0+aGFzQXJndW1lbnQoJG5hbWUpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiJXMiIGFyZ3VtZW50IGRvZXMgbm90IGV4aXN0LicsICRuYW1lKSk7Cn0KCiR0aGlzLT5hcmd1bWVudHNbJG5hbWVdID0gJHZhbHVlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0OwoKCgoKCgoKaW50ZXJmYWNlIElucHV0QXdhcmVJbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRJbnB1dChJbnB1dEludGVyZmFjZSAkaW5wdXQpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dDsKCmlmICghZGVmaW5lZCgnSlNPTl9VTkVTQ0FQRURfVU5JQ09ERScpKSB7CmRlZmluZSgnSlNPTl9VTkVTQ0FQRURfU0xBU0hFUycsIDY0KTsKZGVmaW5lKCdKU09OX1VORVNDQVBFRF9VTklDT0RFJywgMjU2KTsKfQoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvclxUZXh0RGVzY3JpcHRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvclxYbWxEZXNjcmlwdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcQnVmZmVyZWRPdXRwdXQ7CgoKCgoKCgoKCgoKCgoKCmNsYXNzIElucHV0RGVmaW5pdGlvbgp7CnByaXZhdGUgJGFyZ3VtZW50czsKcHJpdmF0ZSAkcmVxdWlyZWRDb3VudDsKcHJpdmF0ZSAkaGFzQW5BcnJheUFyZ3VtZW50ID0gZmFsc2U7CnByaXZhdGUgJGhhc09wdGlvbmFsOwpwcml2YXRlICRvcHRpb25zOwpwcml2YXRlICRzaG9ydGN1dHM7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRkZWZpbml0aW9uID0gYXJyYXkoKSkKewokdGhpcy0+c2V0RGVmaW5pdGlvbigkZGVmaW5pdGlvbik7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGVmaW5pdGlvbihhcnJheSAkZGVmaW5pdGlvbikKewokYXJndW1lbnRzID0gYXJyYXkoKTsKJG9wdGlvbnMgPSBhcnJheSgpOwpmb3JlYWNoICgkZGVmaW5pdGlvbiBhcyAkaXRlbSkgewppZiAoJGl0ZW0gaW5zdGFuY2VvZiBJbnB1dE9wdGlvbikgewokb3B0aW9uc1tdID0gJGl0ZW07Cn0gZWxzZSB7CiRhcmd1bWVudHNbXSA9ICRpdGVtOwp9Cn0KCiR0aGlzLT5zZXRBcmd1bWVudHMoJGFyZ3VtZW50cyk7CiR0aGlzLT5zZXRPcHRpb25zKCRvcHRpb25zKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRBcmd1bWVudHMoJGFyZ3VtZW50cyA9IGFycmF5KCkpCnsKJHRoaXMtPmFyZ3VtZW50cyA9IGFycmF5KCk7CiR0aGlzLT5yZXF1aXJlZENvdW50ID0gMDsKJHRoaXMtPmhhc09wdGlvbmFsID0gZmFsc2U7CiR0aGlzLT5oYXNBbkFycmF5QXJndW1lbnQgPSBmYWxzZTsKJHRoaXMtPmFkZEFyZ3VtZW50cygkYXJndW1lbnRzKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRBcmd1bWVudHMoJGFyZ3VtZW50cyA9IGFycmF5KCkpCnsKaWYgKG51bGwgIT09ICRhcmd1bWVudHMpIHsKZm9yZWFjaCAoJGFyZ3VtZW50cyBhcyAkYXJndW1lbnQpIHsKJHRoaXMtPmFkZEFyZ3VtZW50KCRhcmd1bWVudCk7Cn0KfQp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkQXJndW1lbnQoSW5wdXRBcmd1bWVudCAkYXJndW1lbnQpCnsKaWYgKGlzc2V0KCR0aGlzLT5hcmd1bWVudHNbJGFyZ3VtZW50LT5nZXROYW1lKCldKSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0FuIGFyZ3VtZW50IHdpdGggbmFtZSAiJXMiIGFscmVhZHkgZXhpc3RzLicsICRhcmd1bWVudC0+Z2V0TmFtZSgpKSk7Cn0KCmlmICgkdGhpcy0+aGFzQW5BcnJheUFyZ3VtZW50KSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ0Nhbm5vdCBhZGQgYW4gYXJndW1lbnQgYWZ0ZXIgYW4gYXJyYXkgYXJndW1lbnQuJyk7Cn0KCmlmICgkYXJndW1lbnQtPmlzUmVxdWlyZWQoKSAmJiAkdGhpcy0+aGFzT3B0aW9uYWwpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignQ2Fubm90IGFkZCBhIHJlcXVpcmVkIGFyZ3VtZW50IGFmdGVyIGFuIG9wdGlvbmFsIG9uZS4nKTsKfQoKaWYgKCRhcmd1bWVudC0+aXNBcnJheSgpKSB7CiR0aGlzLT5oYXNBbkFycmF5QXJndW1lbnQgPSB0cnVlOwp9CgppZiAoJGFyZ3VtZW50LT5pc1JlcXVpcmVkKCkpIHsKKyskdGhpcy0+cmVxdWlyZWRDb3VudDsKfSBlbHNlIHsKJHRoaXMtPmhhc09wdGlvbmFsID0gdHJ1ZTsKfQoKJHRoaXMtPmFyZ3VtZW50c1skYXJndW1lbnQtPmdldE5hbWUoKV0gPSAkYXJndW1lbnQ7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50KCRuYW1lKQp7CmlmICghJHRoaXMtPmhhc0FyZ3VtZW50KCRuYW1lKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzIiBhcmd1bWVudCBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZSkpOwp9CgokYXJndW1lbnRzID0gaXNfaW50KCRuYW1lKSA/IGFycmF5X3ZhbHVlcygkdGhpcy0+YXJndW1lbnRzKSA6ICR0aGlzLT5hcmd1bWVudHM7CgpyZXR1cm4gJGFyZ3VtZW50c1skbmFtZV07Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNBcmd1bWVudCgkbmFtZSkKewokYXJndW1lbnRzID0gaXNfaW50KCRuYW1lKSA/IGFycmF5X3ZhbHVlcygkdGhpcy0+YXJndW1lbnRzKSA6ICR0aGlzLT5hcmd1bWVudHM7CgpyZXR1cm4gaXNzZXQoJGFyZ3VtZW50c1skbmFtZV0pOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50cygpCnsKcmV0dXJuICR0aGlzLT5hcmd1bWVudHM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50Q291bnQoKQp7CnJldHVybiAkdGhpcy0+aGFzQW5BcnJheUFyZ3VtZW50ID8gUEhQX0lOVF9NQVggOiBjb3VudCgkdGhpcy0+YXJndW1lbnRzKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QXJndW1lbnRSZXF1aXJlZENvdW50KCkKewpyZXR1cm4gJHRoaXMtPnJlcXVpcmVkQ291bnQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFyZ3VtZW50RGVmYXVsdHMoKQp7CiR2YWx1ZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+YXJndW1lbnRzIGFzICRhcmd1bWVudCkgewokdmFsdWVzWyRhcmd1bWVudC0+Z2V0TmFtZSgpXSA9ICRhcmd1bWVudC0+Z2V0RGVmYXVsdCgpOwp9CgpyZXR1cm4gJHZhbHVlczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPcHRpb25zKCRvcHRpb25zID0gYXJyYXkoKSkKewokdGhpcy0+b3B0aW9ucyA9IGFycmF5KCk7CiR0aGlzLT5zaG9ydGN1dHMgPSBhcnJheSgpOwokdGhpcy0+YWRkT3B0aW9ucygkb3B0aW9ucyk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkT3B0aW9ucygkb3B0aW9ucyA9IGFycmF5KCkpCnsKZm9yZWFjaCAoJG9wdGlvbnMgYXMgJG9wdGlvbikgewokdGhpcy0+YWRkT3B0aW9uKCRvcHRpb24pOwp9Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRPcHRpb24oSW5wdXRPcHRpb24gJG9wdGlvbikKewppZiAoaXNzZXQoJHRoaXMtPm9wdGlvbnNbJG9wdGlvbi0+Z2V0TmFtZSgpXSkgJiYgISRvcHRpb24tPmVxdWFscygkdGhpcy0+b3B0aW9uc1skb3B0aW9uLT5nZXROYW1lKCldKSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKHNwcmludGYoJ0FuIG9wdGlvbiBuYW1lZCAiJXMiIGFscmVhZHkgZXhpc3RzLicsICRvcHRpb24tPmdldE5hbWUoKSkpOwp9CgppZiAoJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSkgewpmb3JlYWNoIChleHBsb2RlKCd8JywgJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSkgYXMgJHNob3J0Y3V0KSB7CmlmIChpc3NldCgkdGhpcy0+c2hvcnRjdXRzWyRzaG9ydGN1dF0pICYmICEkb3B0aW9uLT5lcXVhbHMoJHRoaXMtPm9wdGlvbnNbJHRoaXMtPnNob3J0Y3V0c1skc2hvcnRjdXRdXSkpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbihzcHJpbnRmKCdBbiBvcHRpb24gd2l0aCBzaG9ydGN1dCAiJXMiIGFscmVhZHkgZXhpc3RzLicsICRzaG9ydGN1dCkpOwp9Cn0KfQoKJHRoaXMtPm9wdGlvbnNbJG9wdGlvbi0+Z2V0TmFtZSgpXSA9ICRvcHRpb247CmlmICgkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSB7CmZvcmVhY2ggKGV4cGxvZGUoJ3wnLCAkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSBhcyAkc2hvcnRjdXQpIHsKJHRoaXMtPnNob3J0Y3V0c1skc2hvcnRjdXRdID0gJG9wdGlvbi0+Z2V0TmFtZSgpOwp9Cn0KfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0T3B0aW9uKCRuYW1lKQp7CmlmICghJHRoaXMtPmhhc09wdGlvbigkbmFtZSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVGhlICItLSVzIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuJywgJG5hbWUpKTsKfQoKcmV0dXJuICR0aGlzLT5vcHRpb25zWyRuYW1lXTsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc09wdGlvbigkbmFtZSkKewpyZXR1cm4gaXNzZXQoJHRoaXMtPm9wdGlvbnNbJG5hbWVdKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb25zKCkKewpyZXR1cm4gJHRoaXMtPm9wdGlvbnM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaGFzU2hvcnRjdXQoJG5hbWUpCnsKcmV0dXJuIGlzc2V0KCR0aGlzLT5zaG9ydGN1dHNbJG5hbWVdKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb25Gb3JTaG9ydGN1dCgkc2hvcnRjdXQpCnsKcmV0dXJuICR0aGlzLT5nZXRPcHRpb24oJHRoaXMtPnNob3J0Y3V0VG9OYW1lKCRzaG9ydGN1dCkpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcHRpb25EZWZhdWx0cygpCnsKJHZhbHVlcyA9IGFycmF5KCk7CmZvcmVhY2ggKCR0aGlzLT5vcHRpb25zIGFzICRvcHRpb24pIHsKJHZhbHVlc1skb3B0aW9uLT5nZXROYW1lKCldID0gJG9wdGlvbi0+Z2V0RGVmYXVsdCgpOwp9CgpyZXR1cm4gJHZhbHVlczsKfQoKCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBzaG9ydGN1dFRvTmFtZSgkc2hvcnRjdXQpCnsKaWYgKCFpc3NldCgkdGhpcy0+c2hvcnRjdXRzWyRzaG9ydGN1dF0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSAiLSVzIiBvcHRpb24gZG9lcyBub3QgZXhpc3QuJywgJHNob3J0Y3V0KSk7Cn0KCnJldHVybiAkdGhpcy0+c2hvcnRjdXRzWyRzaG9ydGN1dF07Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN5bm9wc2lzKCkKewokZWxlbWVudHMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+Z2V0T3B0aW9ucygpIGFzICRvcHRpb24pIHsKJHNob3J0Y3V0ID0gJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSA/IHNwcmludGYoJy0lc3wnLCAkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSA6ICcnOwokZWxlbWVudHNbXSA9IHNwcmludGYoJ1snLigkb3B0aW9uLT5pc1ZhbHVlUmVxdWlyZWQoKSA/ICclcy0tJXM9Ii4uLiInIDogKCRvcHRpb24tPmlzVmFsdWVPcHRpb25hbCgpID8gJyVzLS0lc1s9Ii4uLiJdJyA6ICclcy0tJXMnKSkuJ10nLCAkc2hvcnRjdXQsICRvcHRpb24tPmdldE5hbWUoKSk7Cn0KCmZvcmVhY2ggKCR0aGlzLT5nZXRBcmd1bWVudHMoKSBhcyAkYXJndW1lbnQpIHsKJGVsZW1lbnRzW10gPSBzcHJpbnRmKCRhcmd1bWVudC0+aXNSZXF1aXJlZCgpID8gJyVzJyA6ICdbJXNdJywgJGFyZ3VtZW50LT5nZXROYW1lKCkuKCRhcmd1bWVudC0+aXNBcnJheSgpID8gJzEnIDogJycpKTsKCmlmICgkYXJndW1lbnQtPmlzQXJyYXkoKSkgewokZWxlbWVudHNbXSA9IHNwcmludGYoJy4uLiBbJXNOXScsICRhcmd1bWVudC0+Z2V0TmFtZSgpKTsKfQp9CgpyZXR1cm4gaW1wbG9kZSgnICcsICRlbGVtZW50cyk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYXNUZXh0KCkKewokZGVzY3JpcHRvciA9IG5ldyBUZXh0RGVzY3JpcHRvcigpOwokb3V0cHV0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0KEJ1ZmZlcmVkT3V0cHV0OjpWRVJCT1NJVFlfTk9STUFMLCB0cnVlKTsKJGRlc2NyaXB0b3ItPmRlc2NyaWJlKCRvdXRwdXQsICR0aGlzLCBhcnJheSgncmF3X291dHB1dCcgPT4gdHJ1ZSkpOwoKcmV0dXJuICRvdXRwdXQtPmZldGNoKCk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhc1htbCgkYXNEb20gPSBmYWxzZSkKewokZGVzY3JpcHRvciA9IG5ldyBYbWxEZXNjcmlwdG9yKCk7CgppZiAoJGFzRG9tKSB7CnJldHVybiAkZGVzY3JpcHRvci0+Z2V0SW5wdXREZWZpbml0aW9uRG9jdW1lbnQoJHRoaXMpOwp9Cgokb3V0cHV0ID0gbmV3IEJ1ZmZlcmVkT3V0cHV0KCk7CiRkZXNjcmlwdG9yLT5kZXNjcmliZSgkb3V0cHV0LCAkdGhpcyk7CgpyZXR1cm4gJG91dHB1dC0+ZmV0Y2goKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZTsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XFN0cmluZ0lucHV0Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcQ29uc29sZU91dHB1dDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XFByb2Nlc3NcUHJvY2Vzc0J1aWxkZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxQcm9jZXNzXFBocEV4ZWN1dGFibGVGaW5kZXI7CgoKCgoKCgoKCgpjbGFzcyBTaGVsbAp7CnByaXZhdGUgJGFwcGxpY2F0aW9uOwpwcml2YXRlICRoaXN0b3J5Owpwcml2YXRlICRvdXRwdXQ7CnByaXZhdGUgJGhhc1JlYWRsaW5lOwpwcml2YXRlICRwcm9jZXNzSXNvbGF0aW9uID0gZmFsc2U7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBcHBsaWNhdGlvbiAkYXBwbGljYXRpb24pCnsKJHRoaXMtPmhhc1JlYWRsaW5lID0gZnVuY3Rpb25fZXhpc3RzKCdyZWFkbGluZScpOwokdGhpcy0+YXBwbGljYXRpb24gPSAkYXBwbGljYXRpb247CiR0aGlzLT5oaXN0b3J5ID0gZ2V0ZW52KCdIT01FJykuJy8uaGlzdG9yeV8nLiRhcHBsaWNhdGlvbi0+Z2V0TmFtZSgpOwokdGhpcy0+b3V0cHV0ID0gbmV3IENvbnNvbGVPdXRwdXQoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHJ1bigpCnsKJHRoaXMtPmFwcGxpY2F0aW9uLT5zZXRBdXRvRXhpdChmYWxzZSk7CiR0aGlzLT5hcHBsaWNhdGlvbi0+c2V0Q2F0Y2hFeGNlcHRpb25zKHRydWUpOwoKaWYgKCR0aGlzLT5oYXNSZWFkbGluZSkgewpyZWFkbGluZV9yZWFkX2hpc3RvcnkoJHRoaXMtPmhpc3RvcnkpOwpyZWFkbGluZV9jb21wbGV0aW9uX2Z1bmN0aW9uKGFycmF5KCR0aGlzLCAnYXV0b2NvbXBsZXRlcicpKTsKfQoKJHRoaXMtPm91dHB1dC0+d3JpdGVsbigkdGhpcy0+Z2V0SGVhZGVyKCkpOwokcGhwID0gbnVsbDsKaWYgKCR0aGlzLT5wcm9jZXNzSXNvbGF0aW9uKSB7CiRmaW5kZXIgPSBuZXcgUGhwRXhlY3V0YWJsZUZpbmRlcigpOwokcGhwID0gJGZpbmRlci0+ZmluZCgpOwokdGhpcy0+b3V0cHV0LT53cml0ZWxuKDw8PEVPRgo8aW5mbz5SdW5uaW5nIHdpdGggcHJvY2VzcyBpc29sYXRpb24sIHlvdSBzaG91bGQgY29uc2lkZXIgdGhpczo8L2luZm8+CiAgKiBlYWNoIGNvbW1hbmQgaXMgZXhlY3V0ZWQgYXMgc2VwYXJhdGUgcHJvY2VzcywKICAqIGNvbW1hbmRzIGRvbid0IHN1cHBvcnQgaW50ZXJhY3Rpdml0eSwgYWxsIHBhcmFtcyBtdXN0IGJlIHBhc3NlZCBleHBsaWNpdGx5LAogICogY29tbWFuZHMgb3V0cHV0IGlzIG5vdCBjb2xvcml6ZWQuCgpFT0YKKTsKfQoKd2hpbGUgKHRydWUpIHsKJGNvbW1hbmQgPSAkdGhpcy0+cmVhZGxpbmUoKTsKCmlmIChmYWxzZSA9PT0gJGNvbW1hbmQpIHsKJHRoaXMtPm91dHB1dC0+d3JpdGVsbigiXG4iKTsKCmJyZWFrOwp9CgppZiAoJHRoaXMtPmhhc1JlYWRsaW5lKSB7CnJlYWRsaW5lX2FkZF9oaXN0b3J5KCRjb21tYW5kKTsKcmVhZGxpbmVfd3JpdGVfaGlzdG9yeSgkdGhpcy0+aGlzdG9yeSk7Cn0KCmlmICgkdGhpcy0+cHJvY2Vzc0lzb2xhdGlvbikgewokcGIgPSBuZXcgUHJvY2Vzc0J1aWxkZXIoKTsKCiRwcm9jZXNzID0gJHBiCi0+YWRkKCRwaHApCi0+YWRkKCRfU0VSVkVSWydhcmd2J11bMF0pCi0+YWRkKCRjb21tYW5kKQotPmluaGVyaXRFbnZpcm9ubWVudFZhcmlhYmxlcyh0cnVlKQotPmdldFByb2Nlc3MoKQo7Cgokb3V0cHV0ID0gJHRoaXMtPm91dHB1dDsKJHByb2Nlc3MtPnJ1bihmdW5jdGlvbiAoJHR5cGUsICRkYXRhKSB1c2UgKCRvdXRwdXQpIHsKJG91dHB1dC0+d3JpdGVsbigkZGF0YSk7Cn0pOwoKJHJldCA9ICRwcm9jZXNzLT5nZXRFeGl0Q29kZSgpOwp9IGVsc2UgewokcmV0ID0gJHRoaXMtPmFwcGxpY2F0aW9uLT5ydW4obmV3IFN0cmluZ0lucHV0KCRjb21tYW5kKSwgJHRoaXMtPm91dHB1dCk7Cn0KCmlmICgwICE9PSAkcmV0KSB7CiR0aGlzLT5vdXRwdXQtPndyaXRlbG4oc3ByaW50ZignPGVycm9yPlRoZSBjb21tYW5kIHRlcm1pbmF0ZWQgd2l0aCBhbiBlcnJvciBzdGF0dXMgKCVzKTwvZXJyb3I+JywgJHJldCkpOwp9Cn0KfQoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGVhZGVyKCkKewpyZXR1cm4gPDw8RU9GCgpXZWxjb21lIHRvIHRoZSA8aW5mbz57JHRoaXMtPmFwcGxpY2F0aW9uLT5nZXROYW1lKCl9PC9pbmZvPiBzaGVsbCAoPGNvbW1lbnQ+eyR0aGlzLT5hcHBsaWNhdGlvbi0+Z2V0VmVyc2lvbigpfTwvY29tbWVudD4pLgoKQXQgdGhlIHByb21wdCwgdHlwZSA8Y29tbWVudD5oZWxwPC9jb21tZW50PiBmb3Igc29tZSBoZWxwLApvciA8Y29tbWVudD5saXN0PC9jb21tZW50PiB0byBnZXQgYSBsaXN0IG9mIGF2YWlsYWJsZSBjb21tYW5kcy4KClRvIGV4aXQgdGhlIHNoZWxsLCB0eXBlIDxjb21tZW50Pl5EPC9jb21tZW50Pi4KCkVPRjsKfQoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UHJvbXB0KCkKewoKIHJldHVybiAkdGhpcy0+b3V0cHV0LT5nZXRGb3JtYXR0ZXIoKS0+Zm9ybWF0KCR0aGlzLT5hcHBsaWNhdGlvbi0+Z2V0TmFtZSgpLicgPiAnKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE91dHB1dCgpCnsKcmV0dXJuICR0aGlzLT5vdXRwdXQ7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBnZXRBcHBsaWNhdGlvbigpCnsKcmV0dXJuICR0aGlzLT5hcHBsaWNhdGlvbjsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYXV0b2NvbXBsZXRlcigkdGV4dCkKewokaW5mbyA9IHJlYWRsaW5lX2luZm8oKTsKJHRleHQgPSBzdWJzdHIoJGluZm9bJ2xpbmVfYnVmZmVyJ10sIDAsICRpbmZvWydlbmQnXSk7CgppZiAoJGluZm9bJ3BvaW50J10gIT09ICRpbmZvWydlbmQnXSkgewpyZXR1cm4gdHJ1ZTsKfQoKCiBpZiAoZmFsc2UgPT09IHN0cnBvcygkdGV4dCwgJyAnKSB8fCAhJHRleHQpIHsKcmV0dXJuIGFycmF5X2tleXMoJHRoaXMtPmFwcGxpY2F0aW9uLT5hbGwoKSk7Cn0KCgogdHJ5IHsKJGNvbW1hbmQgPSAkdGhpcy0+YXBwbGljYXRpb24tPmZpbmQoc3Vic3RyKCR0ZXh0LCAwLCBzdHJwb3MoJHRleHQsICcgJykpKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewpyZXR1cm4gdHJ1ZTsKfQoKJGxpc3QgPSBhcnJheSgnLS1oZWxwJyk7CmZvcmVhY2ggKCRjb21tYW5kLT5nZXREZWZpbml0aW9uKCktPmdldE9wdGlvbnMoKSBhcyAkb3B0aW9uKSB7CiRsaXN0W10gPSAnLS0nLiRvcHRpb24tPmdldE5hbWUoKTsKfQoKcmV0dXJuICRsaXN0Owp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVhZGxpbmUoKQp7CmlmICgkdGhpcy0+aGFzUmVhZGxpbmUpIHsKJGxpbmUgPSByZWFkbGluZSgkdGhpcy0+Z2V0UHJvbXB0KCkpOwp9IGVsc2UgewokdGhpcy0+b3V0cHV0LT53cml0ZSgkdGhpcy0+Z2V0UHJvbXB0KCkpOwokbGluZSA9IGZnZXRzKFNURElOLCAxMDI0KTsKJGxpbmUgPSAoISRsaW5lICYmIHN0cmxlbigkbGluZSkgPT0gMCkgPyBmYWxzZSA6IHJ0cmltKCRsaW5lKTsKfQoKcmV0dXJuICRsaW5lOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0UHJvY2Vzc0lzb2xhdGlvbigpCnsKcmV0dXJuICR0aGlzLT5wcm9jZXNzSXNvbGF0aW9uOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0UHJvY2Vzc0lzb2xhdGlvbigkcHJvY2Vzc0lzb2xhdGlvbikKewokdGhpcy0+cHJvY2Vzc0lzb2xhdGlvbiA9IChCb29sZWFuKSAkcHJvY2Vzc0lzb2xhdGlvbjsKCmlmICgkdGhpcy0+cHJvY2Vzc0lzb2xhdGlvbiAmJiAhY2xhc3NfZXhpc3RzKCdTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXFByb2Nlc3MnKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1VuYWJsZSB0byBpc29sYXRlIHByb2Nlc3NlcyBhcyB0aGUgU3ltZm9ueSBQcm9jZXNzIENvbXBvbmVudCBpcyBub3QgaW5zdGFsbGVkLicpOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0OwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyXE91dHB1dEZvcm1hdHRlckludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyXE91dHB1dEZvcm1hdHRlcjsKCgoKCgoKCgoKCgoKCgoKCmFic3RyYWN0IGNsYXNzIE91dHB1dCBpbXBsZW1lbnRzIE91dHB1dEludGVyZmFjZQp7CnByaXZhdGUgJHZlcmJvc2l0eTsKcHJpdmF0ZSAkZm9ybWF0dGVyOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2ZXJib3NpdHkgPSBzZWxmOjpWRVJCT1NJVFlfTk9STUFMLCAkZGVjb3JhdGVkID0gZmFsc2UsIE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyID0gbnVsbCkKewokdGhpcy0+dmVyYm9zaXR5ID0gbnVsbCA9PT0gJHZlcmJvc2l0eSA/IHNlbGY6OlZFUkJPU0lUWV9OT1JNQUwgOiAkdmVyYm9zaXR5OwokdGhpcy0+Zm9ybWF0dGVyID0gJGZvcm1hdHRlciA/OiBuZXcgT3V0cHV0Rm9ybWF0dGVyKCk7CiR0aGlzLT5mb3JtYXR0ZXItPnNldERlY29yYXRlZCgkZGVjb3JhdGVkKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEZvcm1hdHRlcihPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2UgJGZvcm1hdHRlcikKewokdGhpcy0+Zm9ybWF0dGVyID0gJGZvcm1hdHRlcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEZvcm1hdHRlcigpCnsKcmV0dXJuICR0aGlzLT5mb3JtYXR0ZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZWNvcmF0ZWQoJGRlY29yYXRlZCkKewokdGhpcy0+Zm9ybWF0dGVyLT5zZXREZWNvcmF0ZWQoJGRlY29yYXRlZCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RlY29yYXRlZCgpCnsKcmV0dXJuICR0aGlzLT5mb3JtYXR0ZXItPmlzRGVjb3JhdGVkKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRWZXJib3NpdHkoJGxldmVsKQp7CiR0aGlzLT52ZXJib3NpdHkgPSAoaW50KSAkbGV2ZWw7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRWZXJib3NpdHkoKQp7CnJldHVybiAkdGhpcy0+dmVyYm9zaXR5Owp9CgpwdWJsaWMgZnVuY3Rpb24gaXNRdWlldCgpCnsKcmV0dXJuIHNlbGY6OlZFUkJPU0lUWV9RVUlFVCA9PT0gJHRoaXMtPnZlcmJvc2l0eTsKfQoKcHVibGljIGZ1bmN0aW9uIGlzVmVyYm9zZSgpCnsKcmV0dXJuIHNlbGY6OlZFUkJPU0lUWV9WRVJCT1NFIDw9ICR0aGlzLT52ZXJib3NpdHk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBpc1ZlcnlWZXJib3NlKCkKewpyZXR1cm4gc2VsZjo6VkVSQk9TSVRZX1ZFUllfVkVSQk9TRSA8PSAkdGhpcy0+dmVyYm9zaXR5Owp9CgpwdWJsaWMgZnVuY3Rpb24gaXNEZWJ1ZygpCnsKcmV0dXJuIHNlbGY6OlZFUkJPU0lUWV9ERUJVRyA8PSAkdGhpcy0+dmVyYm9zaXR5Owp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gd3JpdGVsbigkbWVzc2FnZXMsICR0eXBlID0gc2VsZjo6T1VUUFVUX05PUk1BTCkKewokdGhpcy0+d3JpdGUoJG1lc3NhZ2VzLCB0cnVlLCAkdHlwZSk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkbWVzc2FnZXMsICRuZXdsaW5lID0gZmFsc2UsICR0eXBlID0gc2VsZjo6T1VUUFVUX05PUk1BTCkKewppZiAoc2VsZjo6VkVSQk9TSVRZX1FVSUVUID09PSAkdGhpcy0+dmVyYm9zaXR5KSB7CnJldHVybjsKfQoKJG1lc3NhZ2VzID0gKGFycmF5KSAkbWVzc2FnZXM7Cgpmb3JlYWNoICgkbWVzc2FnZXMgYXMgJG1lc3NhZ2UpIHsKc3dpdGNoICgkdHlwZSkgewpjYXNlIE91dHB1dEludGVyZmFjZTo6T1VUUFVUX05PUk1BTDoKJG1lc3NhZ2UgPSAkdGhpcy0+Zm9ybWF0dGVyLT5mb3JtYXQoJG1lc3NhZ2UpOwpicmVhazsKY2FzZSBPdXRwdXRJbnRlcmZhY2U6Ok9VVFBVVF9SQVc6CmJyZWFrOwpjYXNlIE91dHB1dEludGVyZmFjZTo6T1VUUFVUX1BMQUlOOgokbWVzc2FnZSA9IHN0cmlwX3RhZ3MoJHRoaXMtPmZvcm1hdHRlci0+Zm9ybWF0KCRtZXNzYWdlKSk7CmJyZWFrOwpkZWZhdWx0Ogp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdVbmtub3duIG91dHB1dCB0eXBlIGdpdmVuICglcyknLCAkdHlwZSkpOwp9CgokdGhpcy0+ZG9Xcml0ZSgkbWVzc2FnZSwgJG5ld2xpbmUpOwp9Cn0KCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkb1dyaXRlKCRtZXNzYWdlLCAkbmV3bGluZSk7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXI7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2U7CgoKCgoKCgoKCgoKY2xhc3MgTnVsbE91dHB1dCBpbXBsZW1lbnRzIE91dHB1dEludGVyZmFjZQp7CgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRGb3JtYXR0ZXIoT3V0cHV0Rm9ybWF0dGVySW50ZXJmYWNlICRmb3JtYXR0ZXIpCnsKCiB9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVyKCkKewoKIHJldHVybiBuZXcgT3V0cHV0Rm9ybWF0dGVyKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZWNvcmF0ZWQoJGRlY29yYXRlZCkKewoKIH0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0RlY29yYXRlZCgpCnsKcmV0dXJuIGZhbHNlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0VmVyYm9zaXR5KCRsZXZlbCkKewoKIH0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRWZXJib3NpdHkoKQp7CnJldHVybiBzZWxmOjpWRVJCT1NJVFlfUVVJRVQ7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiB3cml0ZWxuKCRtZXNzYWdlcywgJHR5cGUgPSBzZWxmOjpPVVRQVVRfTk9STUFMKQp7CgogfQoKCgoKcHVibGljIGZ1bmN0aW9uIHdyaXRlKCRtZXNzYWdlcywgJG5ld2xpbmUgPSBmYWxzZSwgJHR5cGUgPSBzZWxmOjpPVVRQVVRfTk9STUFMKQp7CgogfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXQ7CgoKCgoKCgppbnRlcmZhY2UgQ29uc29sZU91dHB1dEludGVyZmFjZSBleHRlbmRzIE91dHB1dEludGVyZmFjZQp7CgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEVycm9yT3V0cHV0KCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvck91dHB1dChPdXRwdXRJbnRlcmZhY2UgJGVycm9yKTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0OwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyXE91dHB1dEZvcm1hdHRlckludGVyZmFjZTsKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIFN0cmVhbU91dHB1dCBleHRlbmRzIE91dHB1dAp7CnByaXZhdGUgJHN0cmVhbTsKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3RyZWFtLCAkdmVyYm9zaXR5ID0gc2VsZjo6VkVSQk9TSVRZX05PUk1BTCwgJGRlY29yYXRlZCA9IG51bGwsIE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyID0gbnVsbCkKewppZiAoIWlzX3Jlc291cmNlKCRzdHJlYW0pIHx8ICdzdHJlYW0nICE9PSBnZXRfcmVzb3VyY2VfdHlwZSgkc3RyZWFtKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignVGhlIFN0cmVhbU91dHB1dCBjbGFzcyBuZWVkcyBhIHN0cmVhbSBhcyBpdHMgZmlyc3QgYXJndW1lbnQuJyk7Cn0KCiR0aGlzLT5zdHJlYW0gPSAkc3RyZWFtOwoKaWYgKG51bGwgPT09ICRkZWNvcmF0ZWQpIHsKJGRlY29yYXRlZCA9ICR0aGlzLT5oYXNDb2xvclN1cHBvcnQoKTsKfQoKcGFyZW50OjpfX2NvbnN0cnVjdCgkdmVyYm9zaXR5LCAkZGVjb3JhdGVkLCAkZm9ybWF0dGVyKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyZWFtKCkKewpyZXR1cm4gJHRoaXMtPnN0cmVhbTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRvV3JpdGUoJG1lc3NhZ2UsICRuZXdsaW5lKQp7CmlmIChmYWxzZSA9PT0gQGZ3cml0ZSgkdGhpcy0+c3RyZWFtLCAkbWVzc2FnZS4oJG5ld2xpbmUgPyBQSFBfRU9MIDogJycpKSkgewoKIAogdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gd3JpdGUgb3V0cHV0LicpOwoKIH0KCmZmbHVzaCgkdGhpcy0+c3RyZWFtKTsKfQoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBoYXNDb2xvclN1cHBvcnQoKQp7CgogaWYgKERJUkVDVE9SWV9TRVBBUkFUT1IgPT0gJ1xcJykgewpyZXR1cm4gZmFsc2UgIT09IGdldGVudignQU5TSUNPTicpIHx8ICdPTicgPT09IGdldGVudignQ29uRW11QU5TSScpOwp9CgpyZXR1cm4gZnVuY3Rpb25fZXhpc3RzKCdwb3NpeF9pc2F0dHknKSAmJiBAcG9zaXhfaXNhdHR5KCR0aGlzLT5zdHJlYW0pOwoKIH0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0OwoKCgoKY2xhc3MgQnVmZmVyZWRPdXRwdXQgZXh0ZW5kcyBPdXRwdXQKewoKCgpwcml2YXRlICRidWZmZXIgPSAnJzsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZldGNoKCkKewokY29udGVudCA9ICR0aGlzLT5idWZmZXI7CiR0aGlzLT5idWZmZXIgPSAnJzsKCnJldHVybiAkY29udGVudDsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRvV3JpdGUoJG1lc3NhZ2UsICRuZXdsaW5lKQp7CiR0aGlzLT5idWZmZXIgLj0gJG1lc3NhZ2U7CgppZiAoJG5ld2xpbmUpIHsKJHRoaXMtPmJ1ZmZlciAuPSAiXG4iOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0OwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRm9ybWF0dGVyXE91dHB1dEZvcm1hdHRlckludGVyZmFjZTsKCgoKCgoKCgppbnRlcmZhY2UgT3V0cHV0SW50ZXJmYWNlCnsKY29uc3QgVkVSQk9TSVRZX1FVSUVUID0gMDsKY29uc3QgVkVSQk9TSVRZX05PUk1BTCA9IDE7CmNvbnN0IFZFUkJPU0lUWV9WRVJCT1NFID0gMjsKY29uc3QgVkVSQk9TSVRZX1ZFUllfVkVSQk9TRSA9IDM7CmNvbnN0IFZFUkJPU0lUWV9ERUJVRyA9IDQ7Cgpjb25zdCBPVVRQVVRfTk9STUFMID0gMDsKY29uc3QgT1VUUFVUX1JBVyA9IDE7CmNvbnN0IE9VVFBVVF9QTEFJTiA9IDI7CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiB3cml0ZSgkbWVzc2FnZXMsICRuZXdsaW5lID0gZmFsc2UsICR0eXBlID0gc2VsZjo6T1VUUFVUX05PUk1BTCk7CgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHdyaXRlbG4oJG1lc3NhZ2VzLCAkdHlwZSA9IHNlbGY6Ok9VVFBVVF9OT1JNQUwpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRWZXJib3NpdHkoJGxldmVsKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VmVyYm9zaXR5KCk7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERlY29yYXRlZCgkZGVjb3JhdGVkKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNEZWNvcmF0ZWQoKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybWF0dGVyKE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9ybWF0dGVyKCk7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXJJbnRlcmZhY2U7CgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBDb25zb2xlT3V0cHV0IGV4dGVuZHMgU3RyZWFtT3V0cHV0IGltcGxlbWVudHMgQ29uc29sZU91dHB1dEludGVyZmFjZQp7CnByaXZhdGUgJHN0ZGVycjsKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmVyYm9zaXR5ID0gc2VsZjo6VkVSQk9TSVRZX05PUk1BTCwgJGRlY29yYXRlZCA9IG51bGwsIE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyID0gbnVsbCkKewokb3V0cHV0U3RyZWFtID0gJ3BocDovL3N0ZG91dCc7CmlmICghJHRoaXMtPmhhc1N0ZG91dFN1cHBvcnQoKSkgewokb3V0cHV0U3RyZWFtID0gJ3BocDovL291dHB1dCc7Cn0KCnBhcmVudDo6X19jb25zdHJ1Y3QoZm9wZW4oJG91dHB1dFN0cmVhbSwgJ3cnKSwgJHZlcmJvc2l0eSwgJGRlY29yYXRlZCwgJGZvcm1hdHRlcik7CgokdGhpcy0+c3RkZXJyID0gbmV3IFN0cmVhbU91dHB1dChmb3BlbigncGhwOi8vc3RkZXJyJywgJ3cnKSwgJHZlcmJvc2l0eSwgJGRlY29yYXRlZCwgJGZvcm1hdHRlcik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZWNvcmF0ZWQoJGRlY29yYXRlZCkKewpwYXJlbnQ6OnNldERlY29yYXRlZCgkZGVjb3JhdGVkKTsKJHRoaXMtPnN0ZGVyci0+c2V0RGVjb3JhdGVkKCRkZWNvcmF0ZWQpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybWF0dGVyKE91dHB1dEZvcm1hdHRlckludGVyZmFjZSAkZm9ybWF0dGVyKQp7CnBhcmVudDo6c2V0Rm9ybWF0dGVyKCRmb3JtYXR0ZXIpOwokdGhpcy0+c3RkZXJyLT5zZXRGb3JtYXR0ZXIoJGZvcm1hdHRlcik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRWZXJib3NpdHkoJGxldmVsKQp7CnBhcmVudDo6c2V0VmVyYm9zaXR5KCRsZXZlbCk7CiR0aGlzLT5zdGRlcnItPnNldFZlcmJvc2l0eSgkbGV2ZWwpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JPdXRwdXQoKQp7CnJldHVybiAkdGhpcy0+c3RkZXJyOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RXJyb3JPdXRwdXQoT3V0cHV0SW50ZXJmYWNlICRlcnJvcikKewokdGhpcy0+c3RkZXJyID0gJGVycm9yOwp9CgoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGhhc1N0ZG91dFN1cHBvcnQoKQp7CnJldHVybiAoJ09TNDAwJyAhPSBwaHBfdW5hbWUoJ3MnKSk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgoKCmludGVyZmFjZSBEZXNjcmlwdG9ySW50ZXJmYWNlCnsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBkZXNjcmliZShPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJG9iamVjdCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRGVzY3JpcHRvcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEFwcGxpY2F0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0QXJndW1lbnQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0RGVmaW5pdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRPcHRpb247CgoKCgoKCmNsYXNzIFRleHREZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvcgp7CgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0QXJndW1lbnQoSW5wdXRBcmd1bWVudCAkYXJndW1lbnQsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewppZiAobnVsbCAhPT0gJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkgJiYgKCFpc19hcnJheSgkYXJndW1lbnQtPmdldERlZmF1bHQoKSkgfHwgY291bnQoJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkpKSkgewokZGVmYXVsdCA9IHNwcmludGYoJzxjb21tZW50PiAoZGVmYXVsdDogJXMpPC9jb21tZW50PicsICR0aGlzLT5mb3JtYXREZWZhdWx0VmFsdWUoJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkpKTsKfSBlbHNlIHsKJGRlZmF1bHQgPSAnJzsKfQoKJG5hbWVXaWR0aCA9IGlzc2V0KCRvcHRpb25zWyduYW1lX3dpZHRoJ10pID8gJG9wdGlvbnNbJ25hbWVfd2lkdGgnXSA6IHN0cmxlbigkYXJndW1lbnQtPmdldE5hbWUoKSk7CgokdGhpcy0+d3JpdGVUZXh0KHNwcmludGYoIiA8aW5mbz4lLSR7bmFtZVdpZHRofXM8L2luZm8+ICVzJXMiLAokYXJndW1lbnQtPmdldE5hbWUoKSwKc3RyX3JlcGxhY2UoIlxuIiwgIlxuIi5zdHJfcmVwZWF0KCcgJywgJG5hbWVXaWR0aCArIDIpLCAkYXJndW1lbnQtPmdldERlc2NyaXB0aW9uKCkpLAokZGVmYXVsdAopLCAkb3B0aW9ucyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0T3B0aW9uKElucHV0T3B0aW9uICRvcHRpb24sIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewppZiAoJG9wdGlvbi0+YWNjZXB0VmFsdWUoKSAmJiBudWxsICE9PSAkb3B0aW9uLT5nZXREZWZhdWx0KCkgJiYgKCFpc19hcnJheSgkb3B0aW9uLT5nZXREZWZhdWx0KCkpIHx8IGNvdW50KCRvcHRpb24tPmdldERlZmF1bHQoKSkpKSB7CiRkZWZhdWx0ID0gc3ByaW50ZignPGNvbW1lbnQ+IChkZWZhdWx0OiAlcyk8L2NvbW1lbnQ+JywgJHRoaXMtPmZvcm1hdERlZmF1bHRWYWx1ZSgkb3B0aW9uLT5nZXREZWZhdWx0KCkpKTsKfSBlbHNlIHsKJGRlZmF1bHQgPSAnJzsKfQoKJG5hbWVXaWR0aCA9IGlzc2V0KCRvcHRpb25zWyduYW1lX3dpZHRoJ10pID8gJG9wdGlvbnNbJ25hbWVfd2lkdGgnXSA6IHN0cmxlbigkb3B0aW9uLT5nZXROYW1lKCkpOwokbmFtZVdpdGhTaG9ydGN1dFdpZHRoID0gJG5hbWVXaWR0aCAtIHN0cmxlbigkb3B0aW9uLT5nZXROYW1lKCkpIC0gMjsKCiR0aGlzLT53cml0ZVRleHQoc3ByaW50ZigiIDxpbmZvPiVzPC9pbmZvPiAlLSR7bmFtZVdpdGhTaG9ydGN1dFdpZHRofXMlcyVzJXMiLAonLS0nLiRvcHRpb24tPmdldE5hbWUoKSwKJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSA/IHNwcmludGYoJygtJXMpICcsICRvcHRpb24tPmdldFNob3J0Y3V0KCkpIDogJycsCnN0cl9yZXBsYWNlKCJcbiIsICJcbiIuc3RyX3JlcGVhdCgnICcsICRuYW1lV2lkdGggKyAyKSwgJG9wdGlvbi0+Z2V0RGVzY3JpcHRpb24oKSksCiRkZWZhdWx0LAokb3B0aW9uLT5pc0FycmF5KCkgPyAnPGNvbW1lbnQ+IChtdWx0aXBsZSB2YWx1ZXMgYWxsb3dlZCk8L2NvbW1lbnQ+JyA6ICcnCiksICRvcHRpb25zKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXREZWZpbml0aW9uKElucHV0RGVmaW5pdGlvbiAkZGVmaW5pdGlvbiwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiRuYW1lV2lkdGggPSAwOwpmb3JlYWNoICgkZGVmaW5pdGlvbi0+Z2V0T3B0aW9ucygpIGFzICRvcHRpb24pIHsKJG5hbWVMZW5ndGggPSBzdHJsZW4oJG9wdGlvbi0+Z2V0TmFtZSgpKSArIDI7CmlmICgkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSB7CiRuYW1lTGVuZ3RoICs9IHN0cmxlbigkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSArIDM7Cn0KJG5hbWVXaWR0aCA9IG1heCgkbmFtZVdpZHRoLCAkbmFtZUxlbmd0aCk7Cn0KZm9yZWFjaCAoJGRlZmluaXRpb24tPmdldEFyZ3VtZW50cygpIGFzICRhcmd1bWVudCkgewokbmFtZVdpZHRoID0gbWF4KCRuYW1lV2lkdGgsIHN0cmxlbigkYXJndW1lbnQtPmdldE5hbWUoKSkpOwp9CisrJG5hbWVXaWR0aDsKCmlmICgkZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnRzKCkpIHsKJHRoaXMtPndyaXRlVGV4dCgnPGNvbW1lbnQ+QXJndW1lbnRzOjwvY29tbWVudD4nLCAkb3B0aW9ucyk7CiR0aGlzLT53cml0ZVRleHQoIlxuIik7CmZvcmVhY2ggKCRkZWZpbml0aW9uLT5nZXRBcmd1bWVudHMoKSBhcyAkYXJndW1lbnQpIHsKJHRoaXMtPmRlc2NyaWJlSW5wdXRBcmd1bWVudCgkYXJndW1lbnQsIGFycmF5X21lcmdlKCRvcHRpb25zLCBhcnJheSgnbmFtZV93aWR0aCcgPT4gJG5hbWVXaWR0aCkpKTsKJHRoaXMtPndyaXRlVGV4dCgiXG4iKTsKfQp9CgppZiAoJGRlZmluaXRpb24tPmdldEFyZ3VtZW50cygpICYmICRkZWZpbml0aW9uLT5nZXRPcHRpb25zKCkpIHsKJHRoaXMtPndyaXRlVGV4dCgiXG4iKTsKfQoKaWYgKCRkZWZpbml0aW9uLT5nZXRPcHRpb25zKCkpIHsKJHRoaXMtPndyaXRlVGV4dCgnPGNvbW1lbnQ+T3B0aW9uczo8L2NvbW1lbnQ+JywgJG9wdGlvbnMpOwokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwpmb3JlYWNoICgkZGVmaW5pdGlvbi0+Z2V0T3B0aW9ucygpIGFzICRvcHRpb24pIHsKJHRoaXMtPmRlc2NyaWJlSW5wdXRPcHRpb24oJG9wdGlvbiwgYXJyYXlfbWVyZ2UoJG9wdGlvbnMsIGFycmF5KCduYW1lX3dpZHRoJyA9PiAkbmFtZVdpZHRoKSkpOwokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwp9Cn0KfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlQ29tbWFuZChDb21tYW5kICRjb21tYW5kLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJGNvbW1hbmQtPmdldFN5bm9wc2lzKCk7CiRjb21tYW5kLT5tZXJnZUFwcGxpY2F0aW9uRGVmaW5pdGlvbihmYWxzZSk7CgokdGhpcy0+d3JpdGVUZXh0KCc8Y29tbWVudD5Vc2FnZTo8L2NvbW1lbnQ+JywgJG9wdGlvbnMpOwokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwokdGhpcy0+d3JpdGVUZXh0KCcgJy4kY29tbWFuZC0+Z2V0U3lub3BzaXMoKSwgJG9wdGlvbnMpOwokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwoKaWYgKGNvdW50KCRjb21tYW5kLT5nZXRBbGlhc2VzKCkpID4gMCkgewokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwokdGhpcy0+d3JpdGVUZXh0KCc8Y29tbWVudD5BbGlhc2VzOjwvY29tbWVudD4gPGluZm8+Jy5pbXBsb2RlKCcsICcsICRjb21tYW5kLT5nZXRBbGlhc2VzKCkpLic8L2luZm8+JywgJG9wdGlvbnMpOwp9CgppZiAoJGRlZmluaXRpb24gPSAkY29tbWFuZC0+Z2V0TmF0aXZlRGVmaW5pdGlvbigpKSB7CiR0aGlzLT53cml0ZVRleHQoIlxuIik7CiR0aGlzLT5kZXNjcmliZUlucHV0RGVmaW5pdGlvbigkZGVmaW5pdGlvbiwgJG9wdGlvbnMpOwp9CgokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwoKaWYgKCRoZWxwID0gJGNvbW1hbmQtPmdldFByb2Nlc3NlZEhlbHAoKSkgewokdGhpcy0+d3JpdGVUZXh0KCc8Y29tbWVudD5IZWxwOjwvY29tbWVudD4nLCAkb3B0aW9ucyk7CiR0aGlzLT53cml0ZVRleHQoIlxuIik7CiR0aGlzLT53cml0ZVRleHQoJyAnLnN0cl9yZXBsYWNlKCJcbiIsICJcbiAiLCAkaGVscCksICRvcHRpb25zKTsKJHRoaXMtPndyaXRlVGV4dCgiXG4iKTsKfQp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGVzY3JpYmVBcHBsaWNhdGlvbihBcHBsaWNhdGlvbiAkYXBwbGljYXRpb24sIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewokZGVzY3JpYmVkTmFtZXNwYWNlID0gaXNzZXQoJG9wdGlvbnNbJ25hbWVzcGFjZSddKSA/ICRvcHRpb25zWyduYW1lc3BhY2UnXSA6IG51bGw7CiRkZXNjcmlwdGlvbiA9IG5ldyBBcHBsaWNhdGlvbkRlc2NyaXB0aW9uKCRhcHBsaWNhdGlvbiwgJGRlc2NyaWJlZE5hbWVzcGFjZSk7CgppZiAoaXNzZXQoJG9wdGlvbnNbJ3Jhd190ZXh0J10pICYmICRvcHRpb25zWydyYXdfdGV4dCddKSB7CiR3aWR0aCA9ICR0aGlzLT5nZXRDb2x1bW5XaWR0aCgkZGVzY3JpcHRpb24tPmdldENvbW1hbmRzKCkpOwoKZm9yZWFjaCAoJGRlc2NyaXB0aW9uLT5nZXRDb21tYW5kcygpIGFzICRjb21tYW5kKSB7CiR0aGlzLT53cml0ZVRleHQoc3ByaW50ZigiJS0ke3dpZHRofXMgJXMiLCAkY29tbWFuZC0+Z2V0TmFtZSgpLCAkY29tbWFuZC0+Z2V0RGVzY3JpcHRpb24oKSksICRvcHRpb25zKTsKJHRoaXMtPndyaXRlVGV4dCgiXG4iKTsKfQp9IGVsc2Ugewokd2lkdGggPSAkdGhpcy0+Z2V0Q29sdW1uV2lkdGgoJGRlc2NyaXB0aW9uLT5nZXRDb21tYW5kcygpKTsKCiR0aGlzLT53cml0ZVRleHQoJGFwcGxpY2F0aW9uLT5nZXRIZWxwKCksICRvcHRpb25zKTsKJHRoaXMtPndyaXRlVGV4dCgiXG5cbiIpOwoKaWYgKCRkZXNjcmliZWROYW1lc3BhY2UpIHsKJHRoaXMtPndyaXRlVGV4dChzcHJpbnRmKCI8Y29tbWVudD5BdmFpbGFibGUgY29tbWFuZHMgZm9yIHRoZSBcIiVzXCIgbmFtZXNwYWNlOjwvY29tbWVudD4iLCAkZGVzY3JpYmVkTmFtZXNwYWNlKSwgJG9wdGlvbnMpOwp9IGVsc2UgewokdGhpcy0+d3JpdGVUZXh0KCc8Y29tbWVudD5BdmFpbGFibGUgY29tbWFuZHM6PC9jb21tZW50PicsICRvcHRpb25zKTsKfQoKCiBmb3JlYWNoICgkZGVzY3JpcHRpb24tPmdldE5hbWVzcGFjZXMoKSBhcyAkbmFtZXNwYWNlKSB7CmlmICghJGRlc2NyaWJlZE5hbWVzcGFjZSAmJiBBcHBsaWNhdGlvbkRlc2NyaXB0aW9uOjpHTE9CQUxfTkFNRVNQQUNFICE9PSAkbmFtZXNwYWNlWydpZCddKSB7CiR0aGlzLT53cml0ZVRleHQoIlxuIik7CiR0aGlzLT53cml0ZVRleHQoJzxjb21tZW50PicuJG5hbWVzcGFjZVsnaWQnXS4nPC9jb21tZW50PicsICRvcHRpb25zKTsKfQoKZm9yZWFjaCAoJG5hbWVzcGFjZVsnY29tbWFuZHMnXSBhcyAkbmFtZSkgewokdGhpcy0+d3JpdGVUZXh0KCJcbiIpOwokdGhpcy0+d3JpdGVUZXh0KHNwcmludGYoIiAgPGluZm8+JS0ke3dpZHRofXM8L2luZm8+ICVzIiwgJG5hbWUsICRkZXNjcmlwdGlvbi0+Z2V0Q29tbWFuZCgkbmFtZSktPmdldERlc2NyaXB0aW9uKCkpLCAkb3B0aW9ucyk7Cn0KfQoKJHRoaXMtPndyaXRlVGV4dCgiXG4iKTsKfQp9CgoKCgpwcml2YXRlIGZ1bmN0aW9uIHdyaXRlVGV4dCgkY29udGVudCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZSgKaXNzZXQoJG9wdGlvbnNbJ3Jhd190ZXh0J10pICYmICRvcHRpb25zWydyYXdfdGV4dCddID8gc3RyaXBfdGFncygkY29udGVudCkgOiAkY29udGVudCwKaXNzZXQoJG9wdGlvbnNbJ3Jhd19vdXRwdXQnXSkgPyAhJG9wdGlvbnNbJ3Jhd19vdXRwdXQnXSA6IHRydWUKKTsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZm9ybWF0RGVmYXVsdFZhbHVlKCRkZWZhdWx0KQp7CmlmICh2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjQnLCAnPCcpKSB7CnJldHVybiBzdHJfcmVwbGFjZSgnXC8nLCAnLycsIGpzb25fZW5jb2RlKCRkZWZhdWx0KSk7Cn0KCnJldHVybiBqc29uX2VuY29kZSgkZGVmYXVsdCwgSlNPTl9VTkVTQ0FQRURfU0xBU0hFUyB8IEpTT05fVU5FU0NBUEVEX1VOSUNPREUpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoYXJyYXkgJGNvbW1hbmRzKQp7CiR3aWR0aCA9IDA7CmZvcmVhY2ggKCRjb21tYW5kcyBhcyAkY29tbWFuZCkgewokd2lkdGggPSBzdHJsZW4oJGNvbW1hbmQtPmdldE5hbWUoKSkgPiAkd2lkdGggPyBzdHJsZW4oJGNvbW1hbmQtPmdldE5hbWUoKSkgOiAkd2lkdGg7Cn0KCnJldHVybiAkd2lkdGggKyAyOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXERlc2NyaXB0b3I7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxBcHBsaWNhdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQ29tbWFuZFxDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dERlZmluaXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwoKCgoKCgpjbGFzcyBYbWxEZXNjcmlwdG9yIGV4dGVuZHMgRGVzY3JpcHRvcgp7CgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldElucHV0RGVmaW5pdGlvbkRvY3VtZW50KElucHV0RGVmaW5pdGlvbiAkZGVmaW5pdGlvbikKewokZG9tID0gbmV3IFxET01Eb2N1bWVudCgnMS4wJywgJ1VURi04Jyk7CiRkb20tPmFwcGVuZENoaWxkKCRkZWZpbml0aW9uWE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnZGVmaW5pdGlvbicpKTsKCiRkZWZpbml0aW9uWE1MLT5hcHBlbmRDaGlsZCgkYXJndW1lbnRzWE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnYXJndW1lbnRzJykpOwpmb3JlYWNoICgkZGVmaW5pdGlvbi0+Z2V0QXJndW1lbnRzKCkgYXMgJGFyZ3VtZW50KSB7CiR0aGlzLT5hcHBlbmREb2N1bWVudCgkYXJndW1lbnRzWE1MLCAkdGhpcy0+Z2V0SW5wdXRBcmd1bWVudERvY3VtZW50KCRhcmd1bWVudCkpOwp9CgokZGVmaW5pdGlvblhNTC0+YXBwZW5kQ2hpbGQoJG9wdGlvbnNYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdvcHRpb25zJykpOwpmb3JlYWNoICgkZGVmaW5pdGlvbi0+Z2V0T3B0aW9ucygpIGFzICRvcHRpb24pIHsKJHRoaXMtPmFwcGVuZERvY3VtZW50KCRvcHRpb25zWE1MLCAkdGhpcy0+Z2V0SW5wdXRPcHRpb25Eb2N1bWVudCgkb3B0aW9uKSk7Cn0KCnJldHVybiAkZG9tOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb21tYW5kRG9jdW1lbnQoQ29tbWFuZCAkY29tbWFuZCkKewokZG9tID0gbmV3IFxET01Eb2N1bWVudCgnMS4wJywgJ1VURi04Jyk7CiRkb20tPmFwcGVuZENoaWxkKCRjb21tYW5kWE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnY29tbWFuZCcpKTsKCiRjb21tYW5kLT5nZXRTeW5vcHNpcygpOwokY29tbWFuZC0+bWVyZ2VBcHBsaWNhdGlvbkRlZmluaXRpb24oZmFsc2UpOwoKJGNvbW1hbmRYTUwtPnNldEF0dHJpYnV0ZSgnaWQnLCAkY29tbWFuZC0+Z2V0TmFtZSgpKTsKJGNvbW1hbmRYTUwtPnNldEF0dHJpYnV0ZSgnbmFtZScsICRjb21tYW5kLT5nZXROYW1lKCkpOwoKJGNvbW1hbmRYTUwtPmFwcGVuZENoaWxkKCR1c2FnZVhNTCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ3VzYWdlJykpOwokdXNhZ2VYTUwtPmFwcGVuZENoaWxkKCRkb20tPmNyZWF0ZVRleHROb2RlKHNwcmludGYoJGNvbW1hbmQtPmdldFN5bm9wc2lzKCksICcnKSkpOwoKJGNvbW1hbmRYTUwtPmFwcGVuZENoaWxkKCRkZXNjcmlwdGlvblhNTCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ2Rlc2NyaXB0aW9uJykpOwokZGVzY3JpcHRpb25YTUwtPmFwcGVuZENoaWxkKCRkb20tPmNyZWF0ZVRleHROb2RlKHN0cl9yZXBsYWNlKCJcbiIsICJcbiAiLCAkY29tbWFuZC0+Z2V0RGVzY3JpcHRpb24oKSkpKTsKCiRjb21tYW5kWE1MLT5hcHBlbmRDaGlsZCgkaGVscFhNTCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ2hlbHAnKSk7CiRoZWxwWE1MLT5hcHBlbmRDaGlsZCgkZG9tLT5jcmVhdGVUZXh0Tm9kZShzdHJfcmVwbGFjZSgiXG4iLCAiXG4gIiwgJGNvbW1hbmQtPmdldFByb2Nlc3NlZEhlbHAoKSkpKTsKCiRjb21tYW5kWE1MLT5hcHBlbmRDaGlsZCgkYWxpYXNlc1hNTCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ2FsaWFzZXMnKSk7CmZvcmVhY2ggKCRjb21tYW5kLT5nZXRBbGlhc2VzKCkgYXMgJGFsaWFzKSB7CiRhbGlhc2VzWE1MLT5hcHBlbmRDaGlsZCgkYWxpYXNYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdhbGlhcycpKTsKJGFsaWFzWE1MLT5hcHBlbmRDaGlsZCgkZG9tLT5jcmVhdGVUZXh0Tm9kZSgkYWxpYXMpKTsKfQoKJGRlZmluaXRpb25YTUwgPSAkdGhpcy0+Z2V0SW5wdXREZWZpbml0aW9uRG9jdW1lbnQoJGNvbW1hbmQtPmdldE5hdGl2ZURlZmluaXRpb24oKSk7CiR0aGlzLT5hcHBlbmREb2N1bWVudCgkY29tbWFuZFhNTCwgJGRlZmluaXRpb25YTUwtPmdldEVsZW1lbnRzQnlUYWdOYW1lKCdkZWZpbml0aW9uJyktPml0ZW0oMCkpOwoKcmV0dXJuICRkb207Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBcHBsaWNhdGlvbkRvY3VtZW50KEFwcGxpY2F0aW9uICRhcHBsaWNhdGlvbiwgJG5hbWVzcGFjZSA9IG51bGwpCnsKJGRvbSA9IG5ldyBcRE9NRG9jdW1lbnQoJzEuMCcsICdVVEYtOCcpOwokZG9tLT5hcHBlbmRDaGlsZCgkcm9vdFhtbCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ3N5bWZvbnknKSk7CgppZiAoJGFwcGxpY2F0aW9uLT5nZXROYW1lKCkgIT09ICdVTktOT1dOJykgewokcm9vdFhtbC0+c2V0QXR0cmlidXRlKCduYW1lJywgJGFwcGxpY2F0aW9uLT5nZXROYW1lKCkpOwppZiAoJGFwcGxpY2F0aW9uLT5nZXRWZXJzaW9uKCkgIT09ICdVTktOT1dOJykgewokcm9vdFhtbC0+c2V0QXR0cmlidXRlKCd2ZXJzaW9uJywgJGFwcGxpY2F0aW9uLT5nZXRWZXJzaW9uKCkpOwp9Cn0KCiRyb290WG1sLT5hcHBlbmRDaGlsZCgkY29tbWFuZHNYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdjb21tYW5kcycpKTsKCiRkZXNjcmlwdGlvbiA9IG5ldyBBcHBsaWNhdGlvbkRlc2NyaXB0aW9uKCRhcHBsaWNhdGlvbiwgJG5hbWVzcGFjZSk7CgppZiAoJG5hbWVzcGFjZSkgewokY29tbWFuZHNYTUwtPnNldEF0dHJpYnV0ZSgnbmFtZXNwYWNlJywgJG5hbWVzcGFjZSk7Cn0KCmZvcmVhY2ggKCRkZXNjcmlwdGlvbi0+Z2V0Q29tbWFuZHMoKSBhcyAkY29tbWFuZCkgewokdGhpcy0+YXBwZW5kRG9jdW1lbnQoJGNvbW1hbmRzWE1MLCAkdGhpcy0+Z2V0Q29tbWFuZERvY3VtZW50KCRjb21tYW5kKSk7Cn0KCmlmICghJG5hbWVzcGFjZSkgewokcm9vdFhtbC0+YXBwZW5kQ2hpbGQoJG5hbWVzcGFjZXNYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCduYW1lc3BhY2VzJykpOwoKZm9yZWFjaCAoJGRlc2NyaXB0aW9uLT5nZXROYW1lc3BhY2VzKCkgYXMgJG5hbWVzcGFjZURlc2NyaXB0aW9uKSB7CiRuYW1lc3BhY2VzWE1MLT5hcHBlbmRDaGlsZCgkbmFtZXNwYWNlQXJyYXlYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCduYW1lc3BhY2UnKSk7CiRuYW1lc3BhY2VBcnJheVhNTC0+c2V0QXR0cmlidXRlKCdpZCcsICRuYW1lc3BhY2VEZXNjcmlwdGlvblsnaWQnXSk7Cgpmb3JlYWNoICgkbmFtZXNwYWNlRGVzY3JpcHRpb25bJ2NvbW1hbmRzJ10gYXMgJG5hbWUpIHsKJG5hbWVzcGFjZUFycmF5WE1MLT5hcHBlbmRDaGlsZCgkY29tbWFuZFhNTCA9ICRkb20tPmNyZWF0ZUVsZW1lbnQoJ2NvbW1hbmQnKSk7CiRjb21tYW5kWE1MLT5hcHBlbmRDaGlsZCgkZG9tLT5jcmVhdGVUZXh0Tm9kZSgkbmFtZSkpOwp9Cn0KfQoKcmV0dXJuICRkb207Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0QXJndW1lbnQoSW5wdXRBcmd1bWVudCAkYXJndW1lbnQsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewokdGhpcy0+d3JpdGVEb2N1bWVudCgkdGhpcy0+Z2V0SW5wdXRBcmd1bWVudERvY3VtZW50KCRhcmd1bWVudCkpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGVzY3JpYmVJbnB1dE9wdGlvbihJbnB1dE9wdGlvbiAkb3B0aW9uLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPndyaXRlRG9jdW1lbnQoJHRoaXMtPmdldElucHV0T3B0aW9uRG9jdW1lbnQoJG9wdGlvbikpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGVzY3JpYmVJbnB1dERlZmluaXRpb24oSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPndyaXRlRG9jdW1lbnQoJHRoaXMtPmdldElucHV0RGVmaW5pdGlvbkRvY3VtZW50KCRkZWZpbml0aW9uKSk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUNvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZURvY3VtZW50KCR0aGlzLT5nZXRDb21tYW5kRG9jdW1lbnQoJGNvbW1hbmQpKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlQXBwbGljYXRpb24oQXBwbGljYXRpb24gJGFwcGxpY2F0aW9uLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPndyaXRlRG9jdW1lbnQoJHRoaXMtPmdldEFwcGxpY2F0aW9uRG9jdW1lbnQoJGFwcGxpY2F0aW9uLCBpc3NldCgkb3B0aW9uc1snbmFtZXNwYWNlJ10pID8gJG9wdGlvbnNbJ25hbWVzcGFjZSddIDogbnVsbCkpOwp9CgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGFwcGVuZERvY3VtZW50KFxET01Ob2RlICRwYXJlbnROb2RlLCBcRE9NTm9kZSAkaW1wb3J0ZWRQYXJlbnQpCnsKZm9yZWFjaCAoJGltcG9ydGVkUGFyZW50LT5jaGlsZE5vZGVzIGFzICRjaGlsZE5vZGUpIHsKJHBhcmVudE5vZGUtPmFwcGVuZENoaWxkKCRwYXJlbnROb2RlLT5vd25lckRvY3VtZW50LT5pbXBvcnROb2RlKCRjaGlsZE5vZGUsIHRydWUpKTsKfQp9CgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiB3cml0ZURvY3VtZW50KFxET01Eb2N1bWVudCAkZG9tKQp7CiRkb20tPmZvcm1hdE91dHB1dCA9IHRydWU7CiR0aGlzLT53cml0ZSgkZG9tLT5zYXZlWE1MKCkpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0SW5wdXRBcmd1bWVudERvY3VtZW50KElucHV0QXJndW1lbnQgJGFyZ3VtZW50KQp7CiRkb20gPSBuZXcgXERPTURvY3VtZW50KCcxLjAnLCAnVVRGLTgnKTsKCiRkb20tPmFwcGVuZENoaWxkKCRvYmplY3RYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdhcmd1bWVudCcpKTsKJG9iamVjdFhNTC0+c2V0QXR0cmlidXRlKCduYW1lJywgJGFyZ3VtZW50LT5nZXROYW1lKCkpOwokb2JqZWN0WE1MLT5zZXRBdHRyaWJ1dGUoJ2lzX3JlcXVpcmVkJywgJGFyZ3VtZW50LT5pc1JlcXVpcmVkKCkgPyAxIDogMCk7CiRvYmplY3RYTUwtPnNldEF0dHJpYnV0ZSgnaXNfYXJyYXknLCAkYXJndW1lbnQtPmlzQXJyYXkoKSA/IDEgOiAwKTsKJG9iamVjdFhNTC0+YXBwZW5kQ2hpbGQoJGRlc2NyaXB0aW9uWE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnZGVzY3JpcHRpb24nKSk7CiRkZXNjcmlwdGlvblhNTC0+YXBwZW5kQ2hpbGQoJGRvbS0+Y3JlYXRlVGV4dE5vZGUoJGFyZ3VtZW50LT5nZXREZXNjcmlwdGlvbigpKSk7Cgokb2JqZWN0WE1MLT5hcHBlbmRDaGlsZCgkZGVmYXVsdHNYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdkZWZhdWx0cycpKTsKJGRlZmF1bHRzID0gaXNfYXJyYXkoJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkpID8gJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkgOiAoaXNfYm9vbCgkYXJndW1lbnQtPmdldERlZmF1bHQoKSkgPyBhcnJheSh2YXJfZXhwb3J0KCRhcmd1bWVudC0+Z2V0RGVmYXVsdCgpLCB0cnVlKSkgOiAoJGFyZ3VtZW50LT5nZXREZWZhdWx0KCkgPyBhcnJheSgkYXJndW1lbnQtPmdldERlZmF1bHQoKSkgOiBhcnJheSgpKSk7CmZvcmVhY2ggKCRkZWZhdWx0cyBhcyAkZGVmYXVsdCkgewokZGVmYXVsdHNYTUwtPmFwcGVuZENoaWxkKCRkZWZhdWx0WE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnZGVmYXVsdCcpKTsKJGRlZmF1bHRYTUwtPmFwcGVuZENoaWxkKCRkb20tPmNyZWF0ZVRleHROb2RlKCRkZWZhdWx0KSk7Cn0KCnJldHVybiAkZG9tOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0SW5wdXRPcHRpb25Eb2N1bWVudChJbnB1dE9wdGlvbiAkb3B0aW9uKQp7CiRkb20gPSBuZXcgXERPTURvY3VtZW50KCcxLjAnLCAnVVRGLTgnKTsKCiRkb20tPmFwcGVuZENoaWxkKCRvYmplY3RYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdvcHRpb24nKSk7CiRvYmplY3RYTUwtPnNldEF0dHJpYnV0ZSgnbmFtZScsICctLScuJG9wdGlvbi0+Z2V0TmFtZSgpKTsKJHBvcyA9IHN0cnBvcygkb3B0aW9uLT5nZXRTaG9ydGN1dCgpLCAnfCcpOwppZiAoZmFsc2UgIT09ICRwb3MpIHsKJG9iamVjdFhNTC0+c2V0QXR0cmlidXRlKCdzaG9ydGN1dCcsICctJy5zdWJzdHIoJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSwgMCwgJHBvcykpOwokb2JqZWN0WE1MLT5zZXRBdHRyaWJ1dGUoJ3Nob3J0Y3V0cycsICctJy5pbXBsb2RlKCd8LScsIGV4cGxvZGUoJ3wnLCAkb3B0aW9uLT5nZXRTaG9ydGN1dCgpKSkpOwp9IGVsc2Ugewokb2JqZWN0WE1MLT5zZXRBdHRyaWJ1dGUoJ3Nob3J0Y3V0JywgJG9wdGlvbi0+Z2V0U2hvcnRjdXQoKSA/ICctJy4kb3B0aW9uLT5nZXRTaG9ydGN1dCgpIDogJycpOwp9CiRvYmplY3RYTUwtPnNldEF0dHJpYnV0ZSgnYWNjZXB0X3ZhbHVlJywgJG9wdGlvbi0+YWNjZXB0VmFsdWUoKSA/IDEgOiAwKTsKJG9iamVjdFhNTC0+c2V0QXR0cmlidXRlKCdpc192YWx1ZV9yZXF1aXJlZCcsICRvcHRpb24tPmlzVmFsdWVSZXF1aXJlZCgpID8gMSA6IDApOwokb2JqZWN0WE1MLT5zZXRBdHRyaWJ1dGUoJ2lzX211bHRpcGxlJywgJG9wdGlvbi0+aXNBcnJheSgpID8gMSA6IDApOwokb2JqZWN0WE1MLT5hcHBlbmRDaGlsZCgkZGVzY3JpcHRpb25YTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdkZXNjcmlwdGlvbicpKTsKJGRlc2NyaXB0aW9uWE1MLT5hcHBlbmRDaGlsZCgkZG9tLT5jcmVhdGVUZXh0Tm9kZSgkb3B0aW9uLT5nZXREZXNjcmlwdGlvbigpKSk7CgppZiAoJG9wdGlvbi0+YWNjZXB0VmFsdWUoKSkgewokZGVmYXVsdHMgPSBpc19hcnJheSgkb3B0aW9uLT5nZXREZWZhdWx0KCkpID8gJG9wdGlvbi0+Z2V0RGVmYXVsdCgpIDogKGlzX2Jvb2woJG9wdGlvbi0+Z2V0RGVmYXVsdCgpKSA/IGFycmF5KHZhcl9leHBvcnQoJG9wdGlvbi0+Z2V0RGVmYXVsdCgpLCB0cnVlKSkgOiAoJG9wdGlvbi0+Z2V0RGVmYXVsdCgpID8gYXJyYXkoJG9wdGlvbi0+Z2V0RGVmYXVsdCgpKSA6IGFycmF5KCkpKTsKJG9iamVjdFhNTC0+YXBwZW5kQ2hpbGQoJGRlZmF1bHRzWE1MID0gJGRvbS0+Y3JlYXRlRWxlbWVudCgnZGVmYXVsdHMnKSk7CgppZiAoIWVtcHR5KCRkZWZhdWx0cykpIHsKZm9yZWFjaCAoJGRlZmF1bHRzIGFzICRkZWZhdWx0KSB7CiRkZWZhdWx0c1hNTC0+YXBwZW5kQ2hpbGQoJGRlZmF1bHRYTUwgPSAkZG9tLT5jcmVhdGVFbGVtZW50KCdkZWZhdWx0JykpOwokZGVmYXVsdFhNTC0+YXBwZW5kQ2hpbGQoJGRvbS0+Y3JlYXRlVGV4dE5vZGUoJGRlZmF1bHQpKTsKfQp9Cn0KCnJldHVybiAkZG9tOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXERlc2NyaXB0b3I7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxBcHBsaWNhdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQ29tbWFuZFxDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dERlZmluaXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwoKCgoKCgpjbGFzcyBNYXJrZG93bkRlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yCnsKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXRBcmd1bWVudChJbnB1dEFyZ3VtZW50ICRhcmd1bWVudCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZSgKJyoqJy4kYXJndW1lbnQtPmdldE5hbWUoKS4nOioqJy4iXG5cbiIKLicqIE5hbWU6ICcuKCRhcmd1bWVudC0+Z2V0TmFtZSgpID86ICc8bm9uZT4nKS4iXG4iCi4nKiBJcyByZXF1aXJlZDogJy4oJGFyZ3VtZW50LT5pc1JlcXVpcmVkKCkgPyAneWVzJyA6ICdubycpLiJcbiIKLicqIElzIGFycmF5OiAnLigkYXJndW1lbnQtPmlzQXJyYXkoKSA/ICd5ZXMnIDogJ25vJykuIlxuIgouJyogRGVzY3JpcHRpb246ICcuKCRhcmd1bWVudC0+Z2V0RGVzY3JpcHRpb24oKSA/OiAnPG5vbmU+JykuIlxuIgouJyogRGVmYXVsdDogYCcuc3RyX3JlcGxhY2UoIlxuIiwgJycsIHZhcl9leHBvcnQoJGFyZ3VtZW50LT5nZXREZWZhdWx0KCksIHRydWUpKS4nYCcKKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXRPcHRpb24oSW5wdXRPcHRpb24gJG9wdGlvbiwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZSgKJyoqJy4kb3B0aW9uLT5nZXROYW1lKCkuJzoqKicuIlxuXG4iCi4nKiBOYW1lOiBgLS0nLiRvcHRpb24tPmdldE5hbWUoKS4nYCcuIlxuIgouJyogU2hvcnRjdXQ6ICcuKCRvcHRpb24tPmdldFNob3J0Y3V0KCkgPyAnYC0nLmltcGxvZGUoJ3wtJywgZXhwbG9kZSgnfCcsICRvcHRpb24tPmdldFNob3J0Y3V0KCkpKS4nYCcgOiAnPG5vbmU+JykuIlxuIgouJyogQWNjZXB0IHZhbHVlOiAnLigkb3B0aW9uLT5hY2NlcHRWYWx1ZSgpID8gJ3llcycgOiAnbm8nKS4iXG4iCi4nKiBJcyB2YWx1ZSByZXF1aXJlZDogJy4oJG9wdGlvbi0+aXNWYWx1ZVJlcXVpcmVkKCkgPyAneWVzJyA6ICdubycpLiJcbiIKLicqIElzIG11bHRpcGxlOiAnLigkb3B0aW9uLT5pc0FycmF5KCkgPyAneWVzJyA6ICdubycpLiJcbiIKLicqIERlc2NyaXB0aW9uOiAnLigkb3B0aW9uLT5nZXREZXNjcmlwdGlvbigpID86ICc8bm9uZT4nKS4iXG4iCi4nKiBEZWZhdWx0OiBgJy5zdHJfcmVwbGFjZSgiXG4iLCAnJywgdmFyX2V4cG9ydCgkb3B0aW9uLT5nZXREZWZhdWx0KCksIHRydWUpKS4nYCcKKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXREZWZpbml0aW9uKElucHV0RGVmaW5pdGlvbiAkZGVmaW5pdGlvbiwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CmlmICgkc2hvd0FyZ3VtZW50cyA9IGNvdW50KCRkZWZpbml0aW9uLT5nZXRBcmd1bWVudHMoKSkgPiAwKSB7CiR0aGlzLT53cml0ZSgnIyMjIEFyZ3VtZW50czonKTsKZm9yZWFjaCAoJGRlZmluaXRpb24tPmdldEFyZ3VtZW50cygpIGFzICRhcmd1bWVudCkgewokdGhpcy0+d3JpdGUoIlxuXG4iKTsKJHRoaXMtPndyaXRlKCR0aGlzLT5kZXNjcmliZUlucHV0QXJndW1lbnQoJGFyZ3VtZW50KSk7Cn0KfQoKaWYgKGNvdW50KCRkZWZpbml0aW9uLT5nZXRPcHRpb25zKCkpID4gMCkgewppZiAoJHNob3dBcmd1bWVudHMpIHsKJHRoaXMtPndyaXRlKCJcblxuIik7Cn0KCiR0aGlzLT53cml0ZSgnIyMjIE9wdGlvbnM6Jyk7CmZvcmVhY2ggKCRkZWZpbml0aW9uLT5nZXRPcHRpb25zKCkgYXMgJG9wdGlvbikgewokdGhpcy0+d3JpdGUoIlxuXG4iKTsKJHRoaXMtPndyaXRlKCR0aGlzLT5kZXNjcmliZUlucHV0T3B0aW9uKCRvcHRpb24pKTsKfQp9Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUNvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiRjb21tYW5kLT5nZXRTeW5vcHNpcygpOwokY29tbWFuZC0+bWVyZ2VBcHBsaWNhdGlvbkRlZmluaXRpb24oZmFsc2UpOwoKJHRoaXMtPndyaXRlKAokY29tbWFuZC0+Z2V0TmFtZSgpLiJcbiIKLnN0cl9yZXBlYXQoJy0nLCBzdHJsZW4oJGNvbW1hbmQtPmdldE5hbWUoKSkpLiJcblxuIgouJyogRGVzY3JpcHRpb246ICcuKCRjb21tYW5kLT5nZXREZXNjcmlwdGlvbigpID86ICc8bm9uZT4nKS4iXG4iCi4nKiBVc2FnZTogYCcuJGNvbW1hbmQtPmdldFN5bm9wc2lzKCkuJ2AnLiJcbiIKLicqIEFsaWFzZXM6ICcuKGNvdW50KCRjb21tYW5kLT5nZXRBbGlhc2VzKCkpID8gJ2AnLmltcGxvZGUoJ2AsIGAnLCAkY29tbWFuZC0+Z2V0QWxpYXNlcygpKS4nYCcgOiAnPG5vbmU+JykKKTsKCmlmICgkaGVscCA9ICRjb21tYW5kLT5nZXRQcm9jZXNzZWRIZWxwKCkpIHsKJHRoaXMtPndyaXRlKCJcblxuIik7CiR0aGlzLT53cml0ZSgkaGVscCk7Cn0KCmlmICgkZGVmaW5pdGlvbiA9ICRjb21tYW5kLT5nZXROYXRpdmVEZWZpbml0aW9uKCkpIHsKJHRoaXMtPndyaXRlKCJcblxuIik7CiR0aGlzLT5kZXNjcmliZUlucHV0RGVmaW5pdGlvbigkY29tbWFuZC0+Z2V0TmF0aXZlRGVmaW5pdGlvbigpKTsKfQp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGVzY3JpYmVBcHBsaWNhdGlvbihBcHBsaWNhdGlvbiAkYXBwbGljYXRpb24sIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewokZGVzY3JpYmVkTmFtZXNwYWNlID0gaXNzZXQoJG9wdGlvbnNbJ25hbWVzcGFjZSddKSA/ICRvcHRpb25zWyduYW1lc3BhY2UnXSA6IG51bGw7CiRkZXNjcmlwdGlvbiA9IG5ldyBBcHBsaWNhdGlvbkRlc2NyaXB0aW9uKCRhcHBsaWNhdGlvbiwgJGRlc2NyaWJlZE5hbWVzcGFjZSk7CgokdGhpcy0+d3JpdGUoJGFwcGxpY2F0aW9uLT5nZXROYW1lKCkuIlxuIi5zdHJfcmVwZWF0KCc9Jywgc3RybGVuKCRhcHBsaWNhdGlvbi0+Z2V0TmFtZSgpKSkpOwoKZm9yZWFjaCAoJGRlc2NyaXB0aW9uLT5nZXROYW1lc3BhY2VzKCkgYXMgJG5hbWVzcGFjZSkgewppZiAoQXBwbGljYXRpb25EZXNjcmlwdGlvbjo6R0xPQkFMX05BTUVTUEFDRSAhPT0gJG5hbWVzcGFjZVsnaWQnXSkgewokdGhpcy0+d3JpdGUoIlxuXG4iKTsKJHRoaXMtPndyaXRlKCcqKicuJG5hbWVzcGFjZVsnaWQnXS4nOioqJyk7Cn0KCiR0aGlzLT53cml0ZSgiXG5cbiIpOwokdGhpcy0+d3JpdGUoaW1wbG9kZSgiXG4iLCBhcnJheV9tYXAoZnVuY3Rpb24gKCRjb21tYW5kTmFtZSkgewpyZXR1cm4gJyogJy4kY29tbWFuZE5hbWU7Cn0gLCAkbmFtZXNwYWNlWydjb21tYW5kcyddKSkpOwp9Cgpmb3JlYWNoICgkZGVzY3JpcHRpb24tPmdldENvbW1hbmRzKCkgYXMgJGNvbW1hbmQpIHsKJHRoaXMtPndyaXRlKCJcblxuIik7CiR0aGlzLT53cml0ZSgkdGhpcy0+ZGVzY3JpYmVDb21tYW5kKCRjb21tYW5kKSk7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQXBwbGljYXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcQ29tbWFuZDsKCgoKCmNsYXNzIEFwcGxpY2F0aW9uRGVzY3JpcHRpb24Kewpjb25zdCBHTE9CQUxfTkFNRVNQQUNFID0gJ19nbG9iYWwnOwoKCgoKcHJpdmF0ZSAkYXBwbGljYXRpb247CgoKCgpwcml2YXRlICRuYW1lc3BhY2U7CgoKCgpwcml2YXRlICRuYW1lc3BhY2VzOwoKCgoKcHJpdmF0ZSAkY29tbWFuZHM7CgoKCgpwcml2YXRlICRhbGlhc2VzOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFwcGxpY2F0aW9uICRhcHBsaWNhdGlvbiwgJG5hbWVzcGFjZSA9IG51bGwpCnsKJHRoaXMtPmFwcGxpY2F0aW9uID0gJGFwcGxpY2F0aW9uOwokdGhpcy0+bmFtZXNwYWNlID0gJG5hbWVzcGFjZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWVzcGFjZXMoKQp7CmlmIChudWxsID09PSAkdGhpcy0+bmFtZXNwYWNlcykgewokdGhpcy0+aW5zcGVjdEFwcGxpY2F0aW9uKCk7Cn0KCnJldHVybiAkdGhpcy0+bmFtZXNwYWNlczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmRzKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPmNvbW1hbmRzKSB7CiR0aGlzLT5pbnNwZWN0QXBwbGljYXRpb24oKTsKfQoKcmV0dXJuICR0aGlzLT5jb21tYW5kczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb21tYW5kKCRuYW1lKQp7CmlmICghaXNzZXQoJHRoaXMtPmNvbW1hbmRzWyRuYW1lXSkgJiYgIWlzc2V0KCR0aGlzLT5hbGlhc2VzWyRuYW1lXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignQ29tbWFuZCAlcyBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZSkpOwp9CgpyZXR1cm4gaXNzZXQoJHRoaXMtPmNvbW1hbmRzWyRuYW1lXSkgPyAkdGhpcy0+Y29tbWFuZHNbJG5hbWVdIDogJHRoaXMtPmFsaWFzZXNbJG5hbWVdOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGluc3BlY3RBcHBsaWNhdGlvbigpCnsKJHRoaXMtPmNvbW1hbmRzID0gYXJyYXkoKTsKJHRoaXMtPm5hbWVzcGFjZXMgPSBhcnJheSgpOwoKJGFsbCA9ICR0aGlzLT5hcHBsaWNhdGlvbi0+YWxsKCR0aGlzLT5uYW1lc3BhY2UgPyAkdGhpcy0+YXBwbGljYXRpb24tPmZpbmROYW1lc3BhY2UoJHRoaXMtPm5hbWVzcGFjZSkgOiBudWxsKTsKZm9yZWFjaCAoJHRoaXMtPnNvcnRDb21tYW5kcygkYWxsKSBhcyAkbmFtZXNwYWNlID0+ICRjb21tYW5kcykgewokbmFtZXMgPSBhcnJheSgpOwoKCmZvcmVhY2ggKCRjb21tYW5kcyBhcyAkbmFtZSA9PiAkY29tbWFuZCkgewppZiAoISRjb21tYW5kLT5nZXROYW1lKCkpIHsKY29udGludWU7Cn0KCmlmICgkY29tbWFuZC0+Z2V0TmFtZSgpID09PSAkbmFtZSkgewokdGhpcy0+Y29tbWFuZHNbJG5hbWVdID0gJGNvbW1hbmQ7Cn0gZWxzZSB7CiR0aGlzLT5hbGlhc2VzWyRuYW1lXSA9ICRjb21tYW5kOwp9CgokbmFtZXNbXSA9ICRuYW1lOwp9CgokdGhpcy0+bmFtZXNwYWNlc1skbmFtZXNwYWNlXSA9IGFycmF5KCdpZCcgPT4gJG5hbWVzcGFjZSwgJ2NvbW1hbmRzJyA9PiAkbmFtZXMpOwp9Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBzb3J0Q29tbWFuZHMoYXJyYXkgJGNvbW1hbmRzKQp7CiRuYW1lc3BhY2VkQ29tbWFuZHMgPSBhcnJheSgpOwpmb3JlYWNoICgkY29tbWFuZHMgYXMgJG5hbWUgPT4gJGNvbW1hbmQpIHsKJGtleSA9ICR0aGlzLT5hcHBsaWNhdGlvbi0+ZXh0cmFjdE5hbWVzcGFjZSgkbmFtZSwgMSk7CmlmICghJGtleSkgewoka2V5ID0gJ19nbG9iYWwnOwp9CgokbmFtZXNwYWNlZENvbW1hbmRzWyRrZXldWyRuYW1lXSA9ICRjb21tYW5kOwp9Cmtzb3J0KCRuYW1lc3BhY2VkQ29tbWFuZHMpOwoKZm9yZWFjaCAoJG5hbWVzcGFjZWRDb21tYW5kcyBhcyAmJGNvbW1hbmRzKSB7Cmtzb3J0KCRjb21tYW5kcyk7Cn0KCnJldHVybiAkbmFtZXNwYWNlZENvbW1hbmRzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXERlc2NyaXB0b3I7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxBcHBsaWNhdGlvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQ29tbWFuZFxDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEFyZ3VtZW50Owp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dERlZmluaXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0T3B0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKYWJzdHJhY3QgY2xhc3MgRGVzY3JpcHRvciBpbXBsZW1lbnRzIERlc2NyaXB0b3JJbnRlcmZhY2UKewoKCgpwcml2YXRlICRvdXRwdXQ7CgoKCgpwdWJsaWMgZnVuY3Rpb24gZGVzY3JpYmUoT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsICRvYmplY3QsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewokdGhpcy0+b3V0cHV0ID0gJG91dHB1dDsKCnN3aXRjaCAodHJ1ZSkgewpjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBJbnB1dEFyZ3VtZW50OgokdGhpcy0+ZGVzY3JpYmVJbnB1dEFyZ3VtZW50KCRvYmplY3QsICRvcHRpb25zKTsKYnJlYWs7CmNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIElucHV0T3B0aW9uOgokdGhpcy0+ZGVzY3JpYmVJbnB1dE9wdGlvbigkb2JqZWN0LCAkb3B0aW9ucyk7CmJyZWFrOwpjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBJbnB1dERlZmluaXRpb246CiR0aGlzLT5kZXNjcmliZUlucHV0RGVmaW5pdGlvbigkb2JqZWN0LCAkb3B0aW9ucyk7CmJyZWFrOwpjYXNlICRvYmplY3QgaW5zdGFuY2VvZiBDb21tYW5kOgokdGhpcy0+ZGVzY3JpYmVDb21tYW5kKCRvYmplY3QsICRvcHRpb25zKTsKYnJlYWs7CmNhc2UgJG9iamVjdCBpbnN0YW5jZW9mIEFwcGxpY2F0aW9uOgokdGhpcy0+ZGVzY3JpYmVBcHBsaWNhdGlvbigkb2JqZWN0LCAkb3B0aW9ucyk7CmJyZWFrOwpkZWZhdWx0Ogp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdPYmplY3Qgb2YgdHlwZSAiJXMiIGlzIG5vdCBkZXNjcmliYWJsZS4nLCBnZXRfY2xhc3MoJG9iamVjdCkpKTsKfQp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gd3JpdGUoJGNvbnRlbnQsICRkZWNvcmF0ZWQgPSBmYWxzZSkKewokdGhpcy0+b3V0cHV0LT53cml0ZSgkY29udGVudCwgZmFsc2UsICRkZWNvcmF0ZWQgPyBPdXRwdXRJbnRlcmZhY2U6Ok9VVFBVVF9OT1JNQUwgOiBPdXRwdXRJbnRlcmZhY2U6Ok9VVFBVVF9SQVcpOwp9CgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0QXJndW1lbnQoSW5wdXRBcmd1bWVudCAkYXJndW1lbnQsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSk7CgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0T3B0aW9uKElucHV0T3B0aW9uICRvcHRpb24sIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSk7CgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUlucHV0RGVmaW5pdGlvbihJbnB1dERlZmluaXRpb24gJGRlZmluaXRpb24sIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSk7CgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUNvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKTsKCgoKCgoKCgoKYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlQXBwbGljYXRpb24oQXBwbGljYXRpb24gJGFwcGxpY2F0aW9uLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQXBwbGljYXRpb247CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcQ29tbWFuZDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRBcmd1bWVudDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXREZWZpbml0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dE9wdGlvbjsKCgoKCgoKY2xhc3MgSnNvbkRlc2NyaXB0b3IgZXh0ZW5kcyBEZXNjcmlwdG9yCnsKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXRBcmd1bWVudChJbnB1dEFyZ3VtZW50ICRhcmd1bWVudCwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZURhdGEoJHRoaXMtPmdldElucHV0QXJndW1lbnREYXRhKCRhcmd1bWVudCksICRvcHRpb25zKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlSW5wdXRPcHRpb24oSW5wdXRPcHRpb24gJG9wdGlvbiwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiR0aGlzLT53cml0ZURhdGEoJHRoaXMtPmdldElucHV0T3B0aW9uRGF0YSgkb3B0aW9uKSwgJG9wdGlvbnMpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gZGVzY3JpYmVJbnB1dERlZmluaXRpb24oSW5wdXREZWZpbml0aW9uICRkZWZpbml0aW9uLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPndyaXRlRGF0YSgkdGhpcy0+Z2V0SW5wdXREZWZpbml0aW9uRGF0YSgkZGVmaW5pdGlvbiksICRvcHRpb25zKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGRlc2NyaWJlQ29tbWFuZChDb21tYW5kICRjb21tYW5kLCBhcnJheSAkb3B0aW9ucyA9IGFycmF5KCkpCnsKJHRoaXMtPndyaXRlRGF0YSgkdGhpcy0+Z2V0Q29tbWFuZERhdGEoJGNvbW1hbmQpLCAkb3B0aW9ucyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBkZXNjcmliZUFwcGxpY2F0aW9uKEFwcGxpY2F0aW9uICRhcHBsaWNhdGlvbiwgYXJyYXkgJG9wdGlvbnMgPSBhcnJheSgpKQp7CiRkZXNjcmliZWROYW1lc3BhY2UgPSBpc3NldCgkb3B0aW9uc1snbmFtZXNwYWNlJ10pID8gJG9wdGlvbnNbJ25hbWVzcGFjZSddIDogbnVsbDsKJGRlc2NyaXB0aW9uID0gbmV3IEFwcGxpY2F0aW9uRGVzY3JpcHRpb24oJGFwcGxpY2F0aW9uLCAkZGVzY3JpYmVkTmFtZXNwYWNlKTsKJGNvbW1hbmRzID0gYXJyYXkoKTsKCmZvcmVhY2ggKCRkZXNjcmlwdGlvbi0+Z2V0Q29tbWFuZHMoKSBhcyAkY29tbWFuZCkgewokY29tbWFuZHNbXSA9ICR0aGlzLT5nZXRDb21tYW5kRGF0YSgkY29tbWFuZCk7Cn0KCiRkYXRhID0gJGRlc2NyaWJlZE5hbWVzcGFjZQo/IGFycmF5KCdjb21tYW5kcycgPT4gJGNvbW1hbmRzLCAnbmFtZXNwYWNlJyA9PiAkZGVzY3JpYmVkTmFtZXNwYWNlKQo6IGFycmF5KCdjb21tYW5kcycgPT4gJGNvbW1hbmRzLCAnbmFtZXNwYWNlcycgPT4gYXJyYXlfdmFsdWVzKCRkZXNjcmlwdGlvbi0+Z2V0TmFtZXNwYWNlcygpKSk7CgokdGhpcy0+d3JpdGVEYXRhKCRkYXRhLCAkb3B0aW9ucyk7Cn0KCgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiB3cml0ZURhdGEoYXJyYXkgJGRhdGEsIGFycmF5ICRvcHRpb25zKQp7CiR0aGlzLT53cml0ZShqc29uX2VuY29kZSgkZGF0YSwgaXNzZXQoJG9wdGlvbnNbJ2pzb25fZW5jb2RpbmcnXSkgPyAkb3B0aW9uc1snanNvbl9lbmNvZGluZyddIDogMCkpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0SW5wdXRBcmd1bWVudERhdGEoSW5wdXRBcmd1bWVudCAkYXJndW1lbnQpCnsKcmV0dXJuIGFycmF5KAonbmFtZScgPT4gJGFyZ3VtZW50LT5nZXROYW1lKCksCidpc19yZXF1aXJlZCcgPT4gJGFyZ3VtZW50LT5pc1JlcXVpcmVkKCksCidpc19hcnJheScgPT4gJGFyZ3VtZW50LT5pc0FycmF5KCksCidkZXNjcmlwdGlvbicgPT4gJGFyZ3VtZW50LT5nZXREZXNjcmlwdGlvbigpLAonZGVmYXVsdCcgPT4gJGFyZ3VtZW50LT5nZXREZWZhdWx0KCksCik7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBnZXRJbnB1dE9wdGlvbkRhdGEoSW5wdXRPcHRpb24gJG9wdGlvbikKewpyZXR1cm4gYXJyYXkoCiduYW1lJyA9PiAnLS0nLiRvcHRpb24tPmdldE5hbWUoKSwKJ3Nob3J0Y3V0JyA9PiAkb3B0aW9uLT5nZXRTaG9ydGN1dCgpID8gJy0nLmltcGxvZGUoJ3wtJywgZXhwbG9kZSgnfCcsICRvcHRpb24tPmdldFNob3J0Y3V0KCkpKSA6ICcnLAonYWNjZXB0X3ZhbHVlJyA9PiAkb3B0aW9uLT5hY2NlcHRWYWx1ZSgpLAonaXNfdmFsdWVfcmVxdWlyZWQnID0+ICRvcHRpb24tPmlzVmFsdWVSZXF1aXJlZCgpLAonaXNfbXVsdGlwbGUnID0+ICRvcHRpb24tPmlzQXJyYXkoKSwKJ2Rlc2NyaXB0aW9uJyA9PiAkb3B0aW9uLT5nZXREZXNjcmlwdGlvbigpLAonZGVmYXVsdCcgPT4gJG9wdGlvbi0+Z2V0RGVmYXVsdCgpLAopOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0SW5wdXREZWZpbml0aW9uRGF0YShJbnB1dERlZmluaXRpb24gJGRlZmluaXRpb24pCnsKJGlucHV0QXJndW1lbnRzID0gYXJyYXkoKTsKZm9yZWFjaCAoJGRlZmluaXRpb24tPmdldEFyZ3VtZW50cygpIGFzICRuYW1lID0+ICRhcmd1bWVudCkgewokaW5wdXRBcmd1bWVudHNbJG5hbWVdID0gJHRoaXMtPmdldElucHV0QXJndW1lbnREYXRhKCRhcmd1bWVudCk7Cn0KCiRpbnB1dE9wdGlvbnMgPSBhcnJheSgpOwpmb3JlYWNoICgkZGVmaW5pdGlvbi0+Z2V0T3B0aW9ucygpIGFzICRuYW1lID0+ICRvcHRpb24pIHsKJGlucHV0T3B0aW9uc1skbmFtZV0gPSAkdGhpcy0+Z2V0SW5wdXRPcHRpb25EYXRhKCRvcHRpb24pOwp9CgpyZXR1cm4gYXJyYXkoJ2FyZ3VtZW50cycgPT4gJGlucHV0QXJndW1lbnRzLCAnb3B0aW9ucycgPT4gJGlucHV0T3B0aW9ucyk7Cn0KCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBnZXRDb21tYW5kRGF0YShDb21tYW5kICRjb21tYW5kKQp7CiRjb21tYW5kLT5nZXRTeW5vcHNpcygpOwokY29tbWFuZC0+bWVyZ2VBcHBsaWNhdGlvbkRlZmluaXRpb24oZmFsc2UpOwoKcmV0dXJuIGFycmF5KAonbmFtZScgPT4gJGNvbW1hbmQtPmdldE5hbWUoKSwKJ3VzYWdlJyA9PiAkY29tbWFuZC0+Z2V0U3lub3BzaXMoKSwKJ2Rlc2NyaXB0aW9uJyA9PiAkY29tbWFuZC0+Z2V0RGVzY3JpcHRpb24oKSwKJ2hlbHAnID0+ICRjb21tYW5kLT5nZXRQcm9jZXNzZWRIZWxwKCksCidhbGlhc2VzJyA9PiAkY29tbWFuZC0+Z2V0QWxpYXNlcygpLAonZGVmaW5pdGlvbicgPT4gJHRoaXMtPmdldElucHV0RGVmaW5pdGlvbkRhdGEoJGNvbW1hbmQtPmdldE5hdGl2ZURlZmluaXRpb24oKSksCik7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyOwoKCgoKCgoKCmludGVyZmFjZSBIZWxwZXJJbnRlcmZhY2UKewoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEhlbHBlclNldChIZWxwZXJTZXQgJGhlbHBlclNldCA9IG51bGwpOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRIZWxwZXJTZXQoKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKCgoKCgpjbGFzcyBUYWJsZUhlbHBlciBleHRlbmRzIEhlbHBlcgp7CmNvbnN0IExBWU9VVF9ERUZBVUxUID0gMDsKY29uc3QgTEFZT1VUX0JPUkRFUkxFU1MgPSAxOwpjb25zdCBMQVlPVVRfQ09NUEFDVCA9IDI7CgoKCgoKCnByaXZhdGUgJGhlYWRlcnMgPSBhcnJheSgpOwoKCgoKCgpwcml2YXRlICRyb3dzID0gYXJyYXkoKTsKCgogcHJpdmF0ZSAkcGFkZGluZ0NoYXI7CnByaXZhdGUgJGhvcml6b250YWxCb3JkZXJDaGFyOwpwcml2YXRlICR2ZXJ0aWNhbEJvcmRlckNoYXI7CnByaXZhdGUgJGNyb3NzaW5nQ2hhcjsKcHJpdmF0ZSAkY2VsbEhlYWRlckZvcm1hdDsKcHJpdmF0ZSAkY2VsbFJvd0Zvcm1hdDsKcHJpdmF0ZSAkY2VsbFJvd0NvbnRlbnRGb3JtYXQ7CnByaXZhdGUgJGJvcmRlckZvcm1hdDsKcHJpdmF0ZSAkcGFkVHlwZTsKCgoKCgoKcHJpdmF0ZSAkY29sdW1uV2lkdGhzID0gYXJyYXkoKTsKCgoKCgoKcHJpdmF0ZSAkbnVtYmVyT2ZDb2x1bW5zOwoKCgoKcHJpdmF0ZSAkb3V0cHV0OwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKewokdGhpcy0+c2V0TGF5b3V0KHNlbGY6OkxBWU9VVF9ERUZBVUxUKTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRMYXlvdXQoJGxheW91dCkKewpzd2l0Y2ggKCRsYXlvdXQpIHsKY2FzZSBzZWxmOjpMQVlPVVRfQk9SREVSTEVTUzoKJHRoaXMKLT5zZXRQYWRkaW5nQ2hhcignICcpCi0+c2V0SG9yaXpvbnRhbEJvcmRlckNoYXIoJz0nKQotPnNldFZlcnRpY2FsQm9yZGVyQ2hhcignICcpCi0+c2V0Q3Jvc3NpbmdDaGFyKCcgJykKLT5zZXRDZWxsSGVhZGVyRm9ybWF0KCc8aW5mbz4lczwvaW5mbz4nKQotPnNldENlbGxSb3dGb3JtYXQoJyVzJykKLT5zZXRDZWxsUm93Q29udGVudEZvcm1hdCgnICVzICcpCi0+c2V0Qm9yZGVyRm9ybWF0KCclcycpCi0+c2V0UGFkVHlwZShTVFJfUEFEX1JJR0hUKQo7CmJyZWFrOwoKY2FzZSBzZWxmOjpMQVlPVVRfQ09NUEFDVDoKJHRoaXMKLT5zZXRQYWRkaW5nQ2hhcignICcpCi0+c2V0SG9yaXpvbnRhbEJvcmRlckNoYXIoJycpCi0+c2V0VmVydGljYWxCb3JkZXJDaGFyKCcgJykKLT5zZXRDcm9zc2luZ0NoYXIoJycpCi0+c2V0Q2VsbEhlYWRlckZvcm1hdCgnPGluZm8+JXM8L2luZm8+JykKLT5zZXRDZWxsUm93Rm9ybWF0KCclcycpCi0+c2V0Q2VsbFJvd0NvbnRlbnRGb3JtYXQoJyVzJykKLT5zZXRCb3JkZXJGb3JtYXQoJyVzJykKLT5zZXRQYWRUeXBlKFNUUl9QQURfUklHSFQpCjsKYnJlYWs7CgpjYXNlIHNlbGY6OkxBWU9VVF9ERUZBVUxUOgokdGhpcwotPnNldFBhZGRpbmdDaGFyKCcgJykKLT5zZXRIb3Jpem9udGFsQm9yZGVyQ2hhcignLScpCi0+c2V0VmVydGljYWxCb3JkZXJDaGFyKCd8JykKLT5zZXRDcm9zc2luZ0NoYXIoJysnKQotPnNldENlbGxIZWFkZXJGb3JtYXQoJzxpbmZvPiVzPC9pbmZvPicpCi0+c2V0Q2VsbFJvd0Zvcm1hdCgnJXMnKQotPnNldENlbGxSb3dDb250ZW50Rm9ybWF0KCcgJXMgJykKLT5zZXRCb3JkZXJGb3JtYXQoJyVzJykKLT5zZXRQYWRUeXBlKFNUUl9QQURfUklHSFQpCjsKYnJlYWs7CgpkZWZhdWx0Ogp0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0ludmFsaWQgdGFibGUgbGF5b3V0ICIlcyIuJywgJGxheW91dCkpOwpicmVhazsKfTsKCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlcnMoYXJyYXkgJGhlYWRlcnMpCnsKJHRoaXMtPmhlYWRlcnMgPSBhcnJheV92YWx1ZXMoJGhlYWRlcnMpOwoKcmV0dXJuICR0aGlzOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2V0Um93cyhhcnJheSAkcm93cykKewokdGhpcy0+cm93cyA9IGFycmF5KCk7CgpyZXR1cm4gJHRoaXMtPmFkZFJvd3MoJHJvd3MpOwp9CgpwdWJsaWMgZnVuY3Rpb24gYWRkUm93cyhhcnJheSAkcm93cykKewpmb3JlYWNoICgkcm93cyBhcyAkcm93KSB7CiR0aGlzLT5hZGRSb3coJHJvdyk7Cn0KCnJldHVybiAkdGhpczsKfQoKcHVibGljIGZ1bmN0aW9uIGFkZFJvdyhhcnJheSAkcm93KQp7CiR0aGlzLT5yb3dzW10gPSBhcnJheV92YWx1ZXMoJHJvdyk7Cgoka2V5cyA9IGFycmF5X2tleXMoJHRoaXMtPnJvd3MpOwokcm93S2V5ID0gYXJyYXlfcG9wKCRrZXlzKTsKCmZvcmVhY2ggKCRyb3cgYXMgJGtleSA9PiAkY2VsbFZhbHVlKSB7CmlmICghc3Ryc3RyKCRjZWxsVmFsdWUsICJcbiIpKSB7CmNvbnRpbnVlOwp9CgokbGluZXMgPSBleHBsb2RlKCJcbiIsICRjZWxsVmFsdWUpOwokdGhpcy0+cm93c1skcm93S2V5XVska2V5XSA9ICRsaW5lc1swXTsKdW5zZXQoJGxpbmVzWzBdKTsKCmZvcmVhY2ggKCRsaW5lcyBhcyAkbGluZUtleSA9PiAkbGluZSkgewokbmV4dFJvd0tleSA9ICRyb3dLZXkgKyAkbGluZUtleSArIDE7CgppZiAoaXNzZXQoJHRoaXMtPnJvd3NbJG5leHRSb3dLZXldKSkgewokdGhpcy0+cm93c1skbmV4dFJvd0tleV1bJGtleV0gPSAkbGluZTsKfSBlbHNlIHsKJHRoaXMtPnJvd3NbJG5leHRSb3dLZXldID0gYXJyYXkoJGtleSA9PiAkbGluZSk7Cn0KfQp9CgpyZXR1cm4gJHRoaXM7Cn0KCnB1YmxpYyBmdW5jdGlvbiBzZXRSb3coJGNvbHVtbiwgYXJyYXkgJHJvdykKewokdGhpcy0+cm93c1skY29sdW1uXSA9ICRyb3c7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UGFkZGluZ0NoYXIoJHBhZGRpbmdDaGFyKQp7CmlmICghJHBhZGRpbmdDaGFyKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1RoZSBwYWRkaW5nIGNoYXIgbXVzdCBub3QgYmUgZW1wdHknKTsKfQoKJHRoaXMtPnBhZGRpbmdDaGFyID0gJHBhZGRpbmdDaGFyOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEhvcml6b250YWxCb3JkZXJDaGFyKCRob3Jpem9udGFsQm9yZGVyQ2hhcikKewokdGhpcy0+aG9yaXpvbnRhbEJvcmRlckNoYXIgPSAkaG9yaXpvbnRhbEJvcmRlckNoYXI7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0VmVydGljYWxCb3JkZXJDaGFyKCR2ZXJ0aWNhbEJvcmRlckNoYXIpCnsKJHRoaXMtPnZlcnRpY2FsQm9yZGVyQ2hhciA9ICR2ZXJ0aWNhbEJvcmRlckNoYXI7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q3Jvc3NpbmdDaGFyKCRjcm9zc2luZ0NoYXIpCnsKJHRoaXMtPmNyb3NzaW5nQ2hhciA9ICRjcm9zc2luZ0NoYXI7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q2VsbEhlYWRlckZvcm1hdCgkY2VsbEhlYWRlckZvcm1hdCkKewokdGhpcy0+Y2VsbEhlYWRlckZvcm1hdCA9ICRjZWxsSGVhZGVyRm9ybWF0OwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldENlbGxSb3dGb3JtYXQoJGNlbGxSb3dGb3JtYXQpCnsKJHRoaXMtPmNlbGxSb3dGb3JtYXQgPSAkY2VsbFJvd0Zvcm1hdDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRDZWxsUm93Q29udGVudEZvcm1hdCgkY2VsbFJvd0NvbnRlbnRGb3JtYXQpCnsKJHRoaXMtPmNlbGxSb3dDb250ZW50Rm9ybWF0ID0gJGNlbGxSb3dDb250ZW50Rm9ybWF0OwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEJvcmRlckZvcm1hdCgkYm9yZGVyRm9ybWF0KQp7CiR0aGlzLT5ib3JkZXJGb3JtYXQgPSAkYm9yZGVyRm9ybWF0OwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFBhZFR5cGUoJHBhZFR5cGUpCnsKJHRoaXMtPnBhZFR5cGUgPSAkcGFkVHlwZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiR0aGlzLT5vdXRwdXQgPSAkb3V0cHV0OwoKJHRoaXMtPnJlbmRlclJvd1NlcGFyYXRvcigpOwokdGhpcy0+cmVuZGVyUm93KCR0aGlzLT5oZWFkZXJzLCAkdGhpcy0+Y2VsbEhlYWRlckZvcm1hdCk7CmlmICghZW1wdHkoJHRoaXMtPmhlYWRlcnMpKSB7CiR0aGlzLT5yZW5kZXJSb3dTZXBhcmF0b3IoKTsKfQpmb3JlYWNoICgkdGhpcy0+cm93cyBhcyAkcm93KSB7CiR0aGlzLT5yZW5kZXJSb3coJHJvdywgJHRoaXMtPmNlbGxSb3dGb3JtYXQpOwp9CmlmICghZW1wdHkoJHRoaXMtPnJvd3MpKSB7CiR0aGlzLT5yZW5kZXJSb3dTZXBhcmF0b3IoKTsKfQoKJHRoaXMtPmNsZWFudXAoKTsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHJlbmRlclJvd1NlcGFyYXRvcigpCnsKaWYgKDAgPT09ICRjb3VudCA9ICR0aGlzLT5nZXROdW1iZXJPZkNvbHVtbnMoKSkgewpyZXR1cm47Cn0KCmlmICghJHRoaXMtPmhvcml6b250YWxCb3JkZXJDaGFyICYmICEkdGhpcy0+Y3Jvc3NpbmdDaGFyKSB7CnJldHVybjsKfQoKJG1hcmt1cCA9ICR0aGlzLT5jcm9zc2luZ0NoYXI7CmZvciAoJGNvbHVtbiA9IDA7ICRjb2x1bW4gPCAkY291bnQ7ICRjb2x1bW4rKykgewokbWFya3VwIC49IHN0cl9yZXBlYXQoJHRoaXMtPmhvcml6b250YWxCb3JkZXJDaGFyLCAkdGhpcy0+Z2V0Q29sdW1uV2lkdGgoJGNvbHVtbikpLiR0aGlzLT5jcm9zc2luZ0NoYXI7Cn0KCiR0aGlzLT5vdXRwdXQtPndyaXRlbG4oc3ByaW50ZigkdGhpcy0+Ym9yZGVyRm9ybWF0LCAkbWFya3VwKSk7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gcmVuZGVyQ29sdW1uU2VwYXJhdG9yKCkKewokdGhpcy0+b3V0cHV0LT53cml0ZShzcHJpbnRmKCR0aGlzLT5ib3JkZXJGb3JtYXQsICR0aGlzLT52ZXJ0aWNhbEJvcmRlckNoYXIpKTsKfQoKCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIHJlbmRlclJvdyhhcnJheSAkcm93LCAkY2VsbEZvcm1hdCkKewppZiAoZW1wdHkoJHJvdykpIHsKcmV0dXJuOwp9CgokdGhpcy0+cmVuZGVyQ29sdW1uU2VwYXJhdG9yKCk7CmZvciAoJGNvbHVtbiA9IDAsICRjb3VudCA9ICR0aGlzLT5nZXROdW1iZXJPZkNvbHVtbnMoKTsgJGNvbHVtbiA8ICRjb3VudDsgJGNvbHVtbisrKSB7CiR0aGlzLT5yZW5kZXJDZWxsKCRyb3csICRjb2x1bW4sICRjZWxsRm9ybWF0KTsKJHRoaXMtPnJlbmRlckNvbHVtblNlcGFyYXRvcigpOwp9CiR0aGlzLT5vdXRwdXQtPndyaXRlbG4oJycpOwp9CgoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZW5kZXJDZWxsKGFycmF5ICRyb3csICRjb2x1bW4sICRjZWxsRm9ybWF0KQp7CiRjZWxsID0gaXNzZXQoJHJvd1skY29sdW1uXSkgPyAkcm93WyRjb2x1bW5dIDogJyc7CiR3aWR0aCA9ICR0aGlzLT5nZXRDb2x1bW5XaWR0aCgkY29sdW1uKTsKCgogaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfc3RybGVuJykgJiYgZmFsc2UgIT09ICRlbmNvZGluZyA9IG1iX2RldGVjdF9lbmNvZGluZygkY2VsbCkpIHsKJHdpZHRoICs9IHN0cmxlbigkY2VsbCkgLSBtYl9zdHJsZW4oJGNlbGwsICRlbmNvZGluZyk7Cn0KCiR3aWR0aCArPSAkdGhpcy0+c3RybGVuKCRjZWxsKSAtICR0aGlzLT5jb21wdXRlTGVuZ3RoV2l0aG91dERlY29yYXRpb24oJGNlbGwpOwoKJGNvbnRlbnQgPSBzcHJpbnRmKCR0aGlzLT5jZWxsUm93Q29udGVudEZvcm1hdCwgJGNlbGwpOwoKJHRoaXMtPm91dHB1dC0+d3JpdGUoc3ByaW50ZigkY2VsbEZvcm1hdCwgc3RyX3BhZCgkY29udGVudCwgJHdpZHRoLCAkdGhpcy0+cGFkZGluZ0NoYXIsICR0aGlzLT5wYWRUeXBlKSkpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0TnVtYmVyT2ZDb2x1bW5zKCkKewppZiAobnVsbCAhPT0gJHRoaXMtPm51bWJlck9mQ29sdW1ucykgewpyZXR1cm4gJHRoaXMtPm51bWJlck9mQ29sdW1uczsKfQoKJGNvbHVtbnMgPSBhcnJheSgwKTsKJGNvbHVtbnNbXSA9IGNvdW50KCR0aGlzLT5oZWFkZXJzKTsKZm9yZWFjaCAoJHRoaXMtPnJvd3MgYXMgJHJvdykgewokY29sdW1uc1tdID0gY291bnQoJHJvdyk7Cn0KCnJldHVybiAkdGhpcy0+bnVtYmVyT2ZDb2x1bW5zID0gbWF4KCRjb2x1bW5zKTsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0Q29sdW1uV2lkdGgoJGNvbHVtbikKewppZiAoaXNzZXQoJHRoaXMtPmNvbHVtbldpZHRoc1skY29sdW1uXSkpIHsKcmV0dXJuICR0aGlzLT5jb2x1bW5XaWR0aHNbJGNvbHVtbl07Cn0KCiRsZW5ndGhzID0gYXJyYXkoMCk7CiRsZW5ndGhzW10gPSAkdGhpcy0+Z2V0Q2VsbFdpZHRoKCR0aGlzLT5oZWFkZXJzLCAkY29sdW1uKTsKZm9yZWFjaCAoJHRoaXMtPnJvd3MgYXMgJHJvdykgewokbGVuZ3Roc1tdID0gJHRoaXMtPmdldENlbGxXaWR0aCgkcm93LCAkY29sdW1uKTsKfQoKcmV0dXJuICR0aGlzLT5jb2x1bW5XaWR0aHNbJGNvbHVtbl0gPSBtYXgoJGxlbmd0aHMpICsgc3RybGVuKCR0aGlzLT5jZWxsUm93Q29udGVudEZvcm1hdCkgLSAyOwp9CgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZ2V0Q2VsbFdpZHRoKGFycmF5ICRyb3csICRjb2x1bW4pCnsKcmV0dXJuIGlzc2V0KCRyb3dbJGNvbHVtbl0pID8gJHRoaXMtPmNvbXB1dGVMZW5ndGhXaXRob3V0RGVjb3JhdGlvbigkcm93WyRjb2x1bW5dKSA6IDA7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gY2xlYW51cCgpCnsKJHRoaXMtPmNvbHVtbldpZHRocyA9IGFycmF5KCk7CiR0aGlzLT5udW1iZXJPZkNvbHVtbnMgPSBudWxsOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGNvbXB1dGVMZW5ndGhXaXRob3V0RGVjb3JhdGlvbigkc3RyaW5nKQp7CiRmb3JtYXR0ZXIgPSAkdGhpcy0+b3V0cHV0LT5nZXRGb3JtYXR0ZXIoKTsKJGlzRGVjb3JhdGVkID0gJGZvcm1hdHRlci0+aXNEZWNvcmF0ZWQoKTsKJGZvcm1hdHRlci0+c2V0RGVjb3JhdGVkKGZhbHNlKTsKCiRzdHJpbmcgPSAkZm9ybWF0dGVyLT5mb3JtYXQoJHN0cmluZyk7CiRmb3JtYXR0ZXItPnNldERlY29yYXRlZCgkaXNEZWNvcmF0ZWQpOwoKcmV0dXJuICR0aGlzLT5zdHJsZW4oJHN0cmluZyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJ3RhYmxlJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yXERlc2NyaXB0b3JJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXERlc2NyaXB0b3JcSnNvbkRlc2NyaXB0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXERlc2NyaXB0b3JcTWFya2Rvd25EZXNjcmlwdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yXFRleHREZXNjcmlwdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxEZXNjcmlwdG9yXFhtbERlc2NyaXB0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CgoKCgoKCmNsYXNzIERlc2NyaXB0b3JIZWxwZXIgZXh0ZW5kcyBIZWxwZXIKewoKCgpwcml2YXRlICRkZXNjcmlwdG9ycyA9IGFycmF5KCk7CgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoKQp7CiR0aGlzCi0+cmVnaXN0ZXIoJ3R4dCcsIG5ldyBUZXh0RGVzY3JpcHRvcigpKQotPnJlZ2lzdGVyKCd4bWwnLCBuZXcgWG1sRGVzY3JpcHRvcigpKQotPnJlZ2lzdGVyKCdqc29uJywgbmV3IEpzb25EZXNjcmlwdG9yKCkpCi0+cmVnaXN0ZXIoJ21kJywgbmV3IE1hcmtkb3duRGVzY3JpcHRvcigpKQo7Cn0KCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZGVzY3JpYmUoT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsICRvYmplY3QsIGFycmF5ICRvcHRpb25zID0gYXJyYXkoKSkKewokb3B0aW9ucyA9IGFycmF5X21lcmdlKGFycmF5KAoncmF3X3RleHQnID0+IGZhbHNlLAonZm9ybWF0JyA9PiAndHh0JywKKSwgJG9wdGlvbnMpOwoKaWYgKCFpc3NldCgkdGhpcy0+ZGVzY3JpcHRvcnNbJG9wdGlvbnNbJ2Zvcm1hdCddXSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVW5zdXBwb3J0ZWQgZm9ybWF0ICIlcyIuJywgJG9wdGlvbnNbJ2Zvcm1hdCddKSk7Cn0KCiRkZXNjcmlwdG9yID0gJHRoaXMtPmRlc2NyaXB0b3JzWyRvcHRpb25zWydmb3JtYXQnXV07CiRkZXNjcmlwdG9yLT5kZXNjcmliZSgkb3V0cHV0LCAkb2JqZWN0LCAkb3B0aW9ucyk7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlZ2lzdGVyKCRmb3JtYXQsIERlc2NyaXB0b3JJbnRlcmZhY2UgJGRlc2NyaXB0b3IpCnsKJHRoaXMtPmRlc2NyaXB0b3JzWyRmb3JtYXRdID0gJGRlc2NyaXB0b3I7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJ2Rlc2NyaXB0b3InOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEZvcm1hdHRlclxPdXRwdXRGb3JtYXR0ZXI7CgoKCgoKCmNsYXNzIEZvcm1hdHRlckhlbHBlciBleHRlbmRzIEhlbHBlcgp7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBmb3JtYXRTZWN0aW9uKCRzZWN0aW9uLCAkbWVzc2FnZSwgJHN0eWxlID0gJ2luZm8nKQp7CnJldHVybiBzcHJpbnRmKCc8JXM+WyVzXTwvJXM+ICVzJywgJHN0eWxlLCAkc2VjdGlvbiwgJHN0eWxlLCAkbWVzc2FnZSk7Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBmb3JtYXRCbG9jaygkbWVzc2FnZXMsICRzdHlsZSwgJGxhcmdlID0gZmFsc2UpCnsKJG1lc3NhZ2VzID0gKGFycmF5KSAkbWVzc2FnZXM7CgokbGVuID0gMDsKJGxpbmVzID0gYXJyYXkoKTsKZm9yZWFjaCAoJG1lc3NhZ2VzIGFzICRtZXNzYWdlKSB7CiRtZXNzYWdlID0gT3V0cHV0Rm9ybWF0dGVyOjplc2NhcGUoJG1lc3NhZ2UpOwokbGluZXNbXSA9IHNwcmludGYoJGxhcmdlID8gJyAgJXMgICcgOiAnICVzICcsICRtZXNzYWdlKTsKJGxlbiA9IG1heCgkdGhpcy0+c3RybGVuKCRtZXNzYWdlKSArICgkbGFyZ2UgPyA0IDogMiksICRsZW4pOwp9CgokbWVzc2FnZXMgPSAkbGFyZ2UgPyBhcnJheShzdHJfcmVwZWF0KCcgJywgJGxlbikpIDogYXJyYXkoKTsKZm9yZWFjaCAoJGxpbmVzIGFzICRsaW5lKSB7CiRtZXNzYWdlc1tdID0gJGxpbmUuc3RyX3JlcGVhdCgnICcsICRsZW4gLSAkdGhpcy0+c3RybGVuKCRsaW5lKSk7Cn0KaWYgKCRsYXJnZSkgewokbWVzc2FnZXNbXSA9IHN0cl9yZXBlYXQoJyAnLCAkbGVuKTsKfQoKZm9yZWFjaCAoJG1lc3NhZ2VzIGFzICYkbWVzc2FnZSkgewokbWVzc2FnZSA9IHNwcmludGYoJzwlcz4lczwvJXM+JywgJHN0eWxlLCAkbWVzc2FnZSwgJHN0eWxlKTsKfQoKcmV0dXJuIGltcGxvZGUoIlxuIiwgJG1lc3NhZ2VzKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAnZm9ybWF0dGVyJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQ7CgoKCgoKCmNsYXNzIEhlbHBlclNldCBpbXBsZW1lbnRzIFxJdGVyYXRvckFnZ3JlZ2F0ZQp7CnByaXZhdGUgJGhlbHBlcnMgPSBhcnJheSgpOwpwcml2YXRlICRjb21tYW5kOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoYXJyYXkgJGhlbHBlcnMgPSBhcnJheSgpKQp7CmZvcmVhY2ggKCRoZWxwZXJzIGFzICRhbGlhcyA9PiAkaGVscGVyKSB7CiR0aGlzLT5zZXQoJGhlbHBlciwgaXNfaW50KCRhbGlhcykgPyBudWxsIDogJGFsaWFzKTsKfQp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0KEhlbHBlckludGVyZmFjZSAkaGVscGVyLCAkYWxpYXMgPSBudWxsKQp7CiR0aGlzLT5oZWxwZXJzWyRoZWxwZXItPmdldE5hbWUoKV0gPSAkaGVscGVyOwppZiAobnVsbCAhPT0gJGFsaWFzKSB7CiR0aGlzLT5oZWxwZXJzWyRhbGlhc10gPSAkaGVscGVyOwp9CgokaGVscGVyLT5zZXRIZWxwZXJTZXQoJHRoaXMpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGhhcygkbmFtZSkKewpyZXR1cm4gaXNzZXQoJHRoaXMtPmhlbHBlcnNbJG5hbWVdKTsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldCgkbmFtZSkKewppZiAoISR0aGlzLT5oYXMoJG5hbWUpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ1RoZSBoZWxwZXIgIiVzIiBpcyBub3QgZGVmaW5lZC4nLCAkbmFtZSkpOwp9CgpyZXR1cm4gJHRoaXMtPmhlbHBlcnNbJG5hbWVdOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRDb21tYW5kKENvbW1hbmQgJGNvbW1hbmQgPSBudWxsKQp7CiR0aGlzLT5jb21tYW5kID0gJGNvbW1hbmQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmQoKQp7CnJldHVybiAkdGhpcy0+Y29tbWFuZDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEl0ZXJhdG9yKCkKewpyZXR1cm4gbmV3IFxBcnJheUl0ZXJhdG9yKCR0aGlzLT5oZWxwZXJzKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxIZWxwZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxGb3JtYXR0ZXJcT3V0cHV0Rm9ybWF0dGVyU3R5bGU7CgoKCgoKCmNsYXNzIERpYWxvZ0hlbHBlciBleHRlbmRzIElucHV0QXdhcmVIZWxwZXIKewpwcml2YXRlICRpbnB1dFN0cmVhbTsKcHJpdmF0ZSBzdGF0aWMgJHNoZWxsOwpwcml2YXRlIHN0YXRpYyAkc3R0eTsKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZWxlY3QoT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsICRxdWVzdGlvbiwgJGNob2ljZXMsICRkZWZhdWx0ID0gbnVsbCwgJGF0dGVtcHRzID0gZmFsc2UsICRlcnJvck1lc3NhZ2UgPSAnVmFsdWUgIiVzIiBpcyBpbnZhbGlkJywgJG11bHRpc2VsZWN0ID0gZmFsc2UpCnsKJHdpZHRoID0gbWF4KGFycmF5X21hcCgnc3RybGVuJywgYXJyYXlfa2V5cygkY2hvaWNlcykpKTsKCiRtZXNzYWdlcyA9IChhcnJheSkgJHF1ZXN0aW9uOwpmb3JlYWNoICgkY2hvaWNlcyBhcyAka2V5ID0+ICR2YWx1ZSkgewokbWVzc2FnZXNbXSA9IHNwcmludGYoIiAgWzxpbmZvPiUtJHt3aWR0aH1zPC9pbmZvPl0gJXMiLCAka2V5LCAkdmFsdWUpOwp9Cgokb3V0cHV0LT53cml0ZWxuKCRtZXNzYWdlcyk7CgokcmVzdWx0ID0gJHRoaXMtPmFza0FuZFZhbGlkYXRlKCRvdXRwdXQsICc+ICcsIGZ1bmN0aW9uICgkcGlja2VkKSB1c2UgKCRjaG9pY2VzLCAkZXJyb3JNZXNzYWdlLCAkbXVsdGlzZWxlY3QpIHsKCiAkc2VsZWN0ZWRDaG9pY2VzID0gc3RyX3JlcGxhY2UoIiAiLCAiIiwgJHBpY2tlZCk7CgppZiAoJG11bHRpc2VsZWN0KSB7CgogaWYgKCFwcmVnX21hdGNoKCcvXlthLXpBLVowLTlfLV0rKD86LFthLXpBLVowLTlfLV0rKSokLycsICRzZWxlY3RlZENob2ljZXMsICRtYXRjaGVzKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCRlcnJvck1lc3NhZ2UsICRwaWNrZWQpKTsKfQokc2VsZWN0ZWRDaG9pY2VzID0gZXhwbG9kZSgiLCIsICRzZWxlY3RlZENob2ljZXMpOwp9IGVsc2Ugewokc2VsZWN0ZWRDaG9pY2VzID0gYXJyYXkoJHBpY2tlZCk7Cn0KCiRtdWx0aXNlbGVjdENob2ljZXMgPSBhcnJheSgpOwoKZm9yZWFjaCAoJHNlbGVjdGVkQ2hvaWNlcyBhcyAkdmFsdWUpIHsKaWYgKGVtcHR5KCRjaG9pY2VzWyR2YWx1ZV0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJGVycm9yTWVzc2FnZSwgJHZhbHVlKSk7Cn0KYXJyYXlfcHVzaCgkbXVsdGlzZWxlY3RDaG9pY2VzLCAkdmFsdWUpOwp9CgppZiAoJG11bHRpc2VsZWN0KSB7CnJldHVybiAkbXVsdGlzZWxlY3RDaG9pY2VzOwp9CgpyZXR1cm4gJHBpY2tlZDsKfSwgJGF0dGVtcHRzLCAkZGVmYXVsdCk7CgpyZXR1cm4gJHJlc3VsdDsKfQoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFzayhPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHF1ZXN0aW9uLCAkZGVmYXVsdCA9IG51bGwsIGFycmF5ICRhdXRvY29tcGxldGUgPSBudWxsKQp7CmlmICgkdGhpcy0+aW5wdXQgJiYgISR0aGlzLT5pbnB1dC0+aXNJbnRlcmFjdGl2ZSgpKSB7CnJldHVybiAkZGVmYXVsdDsKfQoKJG91dHB1dC0+d3JpdGUoJHF1ZXN0aW9uKTsKCiRpbnB1dFN0cmVhbSA9ICR0aGlzLT5pbnB1dFN0cmVhbSA/OiBTVERJTjsKCmlmIChudWxsID09PSAkYXV0b2NvbXBsZXRlIHx8ICEkdGhpcy0+aGFzU3R0eUF2YWlsYWJsZSgpKSB7CiRyZXQgPSBmZ2V0cygkaW5wdXRTdHJlYW0sIDQwOTYpOwppZiAoZmFsc2UgPT09ICRyZXQpIHsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdBYm9ydGVkJyk7Cn0KJHJldCA9IHRyaW0oJHJldCk7Cn0gZWxzZSB7CiRyZXQgPSAnJzsKCiRpID0gMDsKJG9mcyA9IC0xOwokbWF0Y2hlcyA9ICRhdXRvY29tcGxldGU7CiRudW1NYXRjaGVzID0gY291bnQoJG1hdGNoZXMpOwoKJHN0dHlNb2RlID0gc2hlbGxfZXhlYygnc3R0eSAtZycpOwoKCiBzaGVsbF9leGVjKCdzdHR5IC1pY2Fub24gLWVjaG8nKTsKCgogJG91dHB1dC0+Z2V0Rm9ybWF0dGVyKCktPnNldFN0eWxlKCdobCcsIG5ldyBPdXRwdXRGb3JtYXR0ZXJTdHlsZSgnYmxhY2snLCAnd2hpdGUnKSk7CgoKIHdoaWxlICghZmVvZigkaW5wdXRTdHJlYW0pKSB7CiRjID0gZnJlYWQoJGlucHV0U3RyZWFtLCAxKTsKCgogaWYgKCJcMTc3IiA9PT0gJGMpIHsKaWYgKDAgPT09ICRudW1NYXRjaGVzICYmIDAgIT09ICRpKSB7CiRpLS07CgogJG91dHB1dC0+d3JpdGUoIlwwMzNbMUQiKTsKfQoKaWYgKCRpID09PSAwKSB7CiRvZnMgPSAtMTsKJG1hdGNoZXMgPSAkYXV0b2NvbXBsZXRlOwokbnVtTWF0Y2hlcyA9IGNvdW50KCRtYXRjaGVzKTsKfSBlbHNlIHsKJG51bU1hdGNoZXMgPSAwOwp9CgoKICRyZXQgPSBzdWJzdHIoJHJldCwgMCwgJGkpOwp9IGVsc2VpZiAoIlwwMzMiID09PSAkYykgeyAKICRjIC49IGZyZWFkKCRpbnB1dFN0cmVhbSwgMik7CgoKIGlmICgnQScgPT09ICRjWzJdIHx8ICdCJyA9PT0gJGNbMl0pIHsKaWYgKCdBJyA9PT0gJGNbMl0gJiYgLTEgPT09ICRvZnMpIHsKJG9mcyA9IDA7Cn0KCmlmICgwID09PSAkbnVtTWF0Y2hlcykgewpjb250aW51ZTsKfQoKJG9mcyArPSAoJ0EnID09PSAkY1syXSkgPyAtMSA6IDE7CiRvZnMgPSAoJG51bU1hdGNoZXMgKyAkb2ZzKSAlICRudW1NYXRjaGVzOwp9Cn0gZWxzZWlmIChvcmQoJGMpIDwgMzIpIHsKaWYgKCJcdCIgPT09ICRjIHx8ICJcbiIgPT09ICRjKSB7CmlmICgkbnVtTWF0Y2hlcyA+IDAgJiYgLTEgIT09ICRvZnMpIHsKJHJldCA9ICRtYXRjaGVzWyRvZnNdOwoKICRvdXRwdXQtPndyaXRlKHN1YnN0cigkcmV0LCAkaSkpOwokaSA9IHN0cmxlbigkcmV0KTsKfQoKaWYgKCJcbiIgPT09ICRjKSB7CiRvdXRwdXQtPndyaXRlKCRjKTsKYnJlYWs7Cn0KCiRudW1NYXRjaGVzID0gMDsKfQoKY29udGludWU7Cn0gZWxzZSB7CiRvdXRwdXQtPndyaXRlKCRjKTsKJHJldCAuPSAkYzsKJGkrKzsKCiRudW1NYXRjaGVzID0gMDsKJG9mcyA9IDA7Cgpmb3JlYWNoICgkYXV0b2NvbXBsZXRlIGFzICR2YWx1ZSkgewoKIGlmICgwID09PSBzdHJwb3MoJHZhbHVlLCAkcmV0KSAmJiAkaSAhPT0gc3RybGVuKCR2YWx1ZSkpIHsKJG1hdGNoZXNbJG51bU1hdGNoZXMrK10gPSAkdmFsdWU7Cn0KfQp9CgoKICRvdXRwdXQtPndyaXRlKCJcMDMzW0siKTsKCmlmICgkbnVtTWF0Y2hlcyA+IDAgJiYgLTEgIT09ICRvZnMpIHsKCiAkb3V0cHV0LT53cml0ZSgiXDAzMzciKTsKCiAkb3V0cHV0LT53cml0ZSgnPGhsPicuc3Vic3RyKCRtYXRjaGVzWyRvZnNdLCAkaSkuJzwvaGw+Jyk7CgogJG91dHB1dC0+d3JpdGUoIlwwMzM4Iik7Cn0KfQoKCiBzaGVsbF9leGVjKHNwcmludGYoJ3N0dHkgJXMnLCAkc3R0eU1vZGUpKTsKfQoKcmV0dXJuIHN0cmxlbigkcmV0KSA+IDAgPyAkcmV0IDogJGRlZmF1bHQ7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0NvbmZpcm1hdGlvbihPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHF1ZXN0aW9uLCAkZGVmYXVsdCA9IHRydWUpCnsKJGFuc3dlciA9ICd6JzsKd2hpbGUgKCRhbnN3ZXIgJiYgIWluX2FycmF5KHN0cnRvbG93ZXIoJGFuc3dlclswXSksIGFycmF5KCd5JywgJ24nKSkpIHsKJGFuc3dlciA9ICR0aGlzLT5hc2soJG91dHB1dCwgJHF1ZXN0aW9uKTsKfQoKaWYgKGZhbHNlID09PSAkZGVmYXVsdCkgewpyZXR1cm4gJGFuc3dlciAmJiAneScgPT0gc3RydG9sb3dlcigkYW5zd2VyWzBdKTsKfQoKcmV0dXJuICEkYW5zd2VyIHx8ICd5JyA9PSBzdHJ0b2xvd2VyKCRhbnN3ZXJbMF0pOwp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhc2tIaWRkZW5SZXNwb25zZShPdXRwdXRJbnRlcmZhY2UgJG91dHB1dCwgJHF1ZXN0aW9uLCAkZmFsbGJhY2sgPSB0cnVlKQp7CmlmIChkZWZpbmVkKCdQSFBfV0lORE9XU19WRVJTSU9OX0JVSUxEJykpIHsKJGV4ZSA9IF9fRElSX18uJy8uLi9SZXNvdXJjZXMvYmluL2hpZGRlbmlucHV0LmV4ZSc7CgoKIGlmICgncGhhcjonID09PSBzdWJzdHIoX19GSUxFX18sIDAsIDUpKSB7CiR0bXBFeGUgPSBzeXNfZ2V0X3RlbXBfZGlyKCkuJy9oaWRkZW5pbnB1dC5leGUnOwpjb3B5KCRleGUsICR0bXBFeGUpOwokZXhlID0gJHRtcEV4ZTsKfQoKJG91dHB1dC0+d3JpdGUoJHF1ZXN0aW9uKTsKJHZhbHVlID0gcnRyaW0oc2hlbGxfZXhlYygkZXhlKSk7CiRvdXRwdXQtPndyaXRlbG4oJycpOwoKaWYgKGlzc2V0KCR0bXBFeGUpKSB7CnVubGluaygkdG1wRXhlKTsKfQoKcmV0dXJuICR2YWx1ZTsKfQoKaWYgKCR0aGlzLT5oYXNTdHR5QXZhaWxhYmxlKCkpIHsKJG91dHB1dC0+d3JpdGUoJHF1ZXN0aW9uKTsKCiRzdHR5TW9kZSA9IHNoZWxsX2V4ZWMoJ3N0dHkgLWcnKTsKCnNoZWxsX2V4ZWMoJ3N0dHkgLWVjaG8nKTsKJHZhbHVlID0gZmdldHMoJHRoaXMtPmlucHV0U3RyZWFtID86IFNURElOLCA0MDk2KTsKc2hlbGxfZXhlYyhzcHJpbnRmKCdzdHR5ICVzJywgJHN0dHlNb2RlKSk7CgppZiAoZmFsc2UgPT09ICR2YWx1ZSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Fib3J0ZWQnKTsKfQoKJHZhbHVlID0gdHJpbSgkdmFsdWUpOwokb3V0cHV0LT53cml0ZWxuKCcnKTsKCnJldHVybiAkdmFsdWU7Cn0KCmlmIChmYWxzZSAhPT0gJHNoZWxsID0gJHRoaXMtPmdldFNoZWxsKCkpIHsKJG91dHB1dC0+d3JpdGUoJHF1ZXN0aW9uKTsKJHJlYWRDbWQgPSAkc2hlbGwgPT09ICdjc2gnID8gJ3NldCBteXBhc3N3b3JkID0gJDwnIDogJ3JlYWQgLXIgbXlwYXNzd29yZCc7CiRjb21tYW5kID0gc3ByaW50ZigiL3Vzci9iaW4vZW52ICVzIC1jICdzdHR5IC1lY2hvOyAlczsgc3R0eSBlY2hvOyBlY2hvIFwkbXlwYXNzd29yZCciLCAkc2hlbGwsICRyZWFkQ21kKTsKJHZhbHVlID0gcnRyaW0oc2hlbGxfZXhlYygkY29tbWFuZCkpOwokb3V0cHV0LT53cml0ZWxuKCcnKTsKCnJldHVybiAkdmFsdWU7Cn0KCmlmICgkZmFsbGJhY2spIHsKcmV0dXJuICR0aGlzLT5hc2soJG91dHB1dCwgJHF1ZXN0aW9uKTsKfQoKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdVbmFibGUgdG8gaGlkZSB0aGUgcmVzcG9uc2UnKTsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFza0FuZFZhbGlkYXRlKE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCAkcXVlc3Rpb24sICR2YWxpZGF0b3IsICRhdHRlbXB0cyA9IGZhbHNlLCAkZGVmYXVsdCA9IG51bGwsIGFycmF5ICRhdXRvY29tcGxldGUgPSBudWxsKQp7CiR0aGF0ID0gJHRoaXM7CgokaW50ZXJ2aWV3ZXIgPSBmdW5jdGlvbiAoKSB1c2UgKCRvdXRwdXQsICRxdWVzdGlvbiwgJGRlZmF1bHQsICRhdXRvY29tcGxldGUsICR0aGF0KSB7CnJldHVybiAkdGhhdC0+YXNrKCRvdXRwdXQsICRxdWVzdGlvbiwgJGRlZmF1bHQsICRhdXRvY29tcGxldGUpOwp9OwoKcmV0dXJuICR0aGlzLT52YWxpZGF0ZUF0dGVtcHRzKCRpbnRlcnZpZXdlciwgJG91dHB1dCwgJHZhbGlkYXRvciwgJGF0dGVtcHRzKTsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhc2tIaWRkZW5SZXNwb25zZUFuZFZhbGlkYXRlKE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCAkcXVlc3Rpb24sICR2YWxpZGF0b3IsICRhdHRlbXB0cyA9IGZhbHNlLCAkZmFsbGJhY2sgPSB0cnVlKQp7CiR0aGF0ID0gJHRoaXM7CgokaW50ZXJ2aWV3ZXIgPSBmdW5jdGlvbiAoKSB1c2UgKCRvdXRwdXQsICRxdWVzdGlvbiwgJGZhbGxiYWNrLCAkdGhhdCkgewpyZXR1cm4gJHRoYXQtPmFza0hpZGRlblJlc3BvbnNlKCRvdXRwdXQsICRxdWVzdGlvbiwgJGZhbGxiYWNrKTsKfTsKCnJldHVybiAkdGhpcy0+dmFsaWRhdGVBdHRlbXB0cygkaW50ZXJ2aWV3ZXIsICRvdXRwdXQsICR2YWxpZGF0b3IsICRhdHRlbXB0cyk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SW5wdXRTdHJlYW0oJHN0cmVhbSkKewokdGhpcy0+aW5wdXRTdHJlYW0gPSAkc3RyZWFtOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRJbnB1dFN0cmVhbSgpCnsKcmV0dXJuICR0aGlzLT5pbnB1dFN0cmVhbTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAnZGlhbG9nJzsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdldFNoZWxsKCkKewppZiAobnVsbCAhPT0gc2VsZjo6JHNoZWxsKSB7CnJldHVybiBzZWxmOjokc2hlbGw7Cn0KCnNlbGY6OiRzaGVsbCA9IGZhbHNlOwoKaWYgKGZpbGVfZXhpc3RzKCcvdXNyL2Jpbi9lbnYnKSkgewoKICR0ZXN0ID0gIi91c3IvYmluL2VudiAlcyAtYyAnZWNobyBPSycgMj4gL2Rldi9udWxsIjsKZm9yZWFjaCAoYXJyYXkoJ2Jhc2gnLCAnenNoJywgJ2tzaCcsICdjc2gnKSBhcyAkc2gpIHsKaWYgKCdPSycgPT09IHJ0cmltKHNoZWxsX2V4ZWMoc3ByaW50ZigkdGVzdCwgJHNoKSkpKSB7CnNlbGY6OiRzaGVsbCA9ICRzaDsKYnJlYWs7Cn0KfQp9CgpyZXR1cm4gc2VsZjo6JHNoZWxsOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGhhc1N0dHlBdmFpbGFibGUoKQp7CmlmIChudWxsICE9PSBzZWxmOjokc3R0eSkgewpyZXR1cm4gc2VsZjo6JHN0dHk7Cn0KCmV4ZWMoJ3N0dHkgMj4mMScsICRvdXRwdXQsICRleGl0Y29kZSk7CgpyZXR1cm4gc2VsZjo6JHN0dHkgPSAkZXhpdGNvZGUgPT09IDA7Cn0KCgoKCgoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gdmFsaWRhdGVBdHRlbXB0cygkaW50ZXJ2aWV3ZXIsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCAkdmFsaWRhdG9yLCAkYXR0ZW1wdHMpCnsKJGVycm9yID0gbnVsbDsKd2hpbGUgKGZhbHNlID09PSAkYXR0ZW1wdHMgfHwgJGF0dGVtcHRzLS0pIHsKaWYgKG51bGwgIT09ICRlcnJvcikgewokb3V0cHV0LT53cml0ZWxuKCR0aGlzLT5nZXRIZWxwZXJTZXQoKS0+Z2V0KCdmb3JtYXR0ZXInKS0+Zm9ybWF0QmxvY2soJGVycm9yLT5nZXRNZXNzYWdlKCksICdlcnJvcicpKTsKfQoKdHJ5IHsKcmV0dXJuIGNhbGxfdXNlcl9mdW5jKCR2YWxpZGF0b3IsICRpbnRlcnZpZXdlcigpKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZXJyb3IpIHsKfQp9Cgp0aHJvdyAkZXJyb3I7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyOwoKCgoKCgphYnN0cmFjdCBjbGFzcyBIZWxwZXIgaW1wbGVtZW50cyBIZWxwZXJJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJGhlbHBlclNldCA9IG51bGw7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRIZWxwZXJTZXQoSGVscGVyU2V0ICRoZWxwZXJTZXQgPSBudWxsKQp7CiR0aGlzLT5oZWxwZXJTZXQgPSAkaGVscGVyU2V0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRIZWxwZXJTZXQoKQp7CnJldHVybiAkdGhpcy0+aGVscGVyU2V0Owp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHN0cmxlbigkc3RyaW5nKQp7CmlmICghZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJsZW4nKSkgewpyZXR1cm4gc3RybGVuKCRzdHJpbmcpOwp9CgppZiAoZmFsc2UgPT09ICRlbmNvZGluZyA9IG1iX2RldGVjdF9lbmNvZGluZygkc3RyaW5nKSkgewpyZXR1cm4gc3RybGVuKCRzdHJpbmcpOwp9CgpyZXR1cm4gbWJfc3RybGVuKCRzdHJpbmcsICRlbmNvZGluZyk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSGVscGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKCgoKCgoKCmNsYXNzIFByb2dyZXNzSGVscGVyIGV4dGVuZHMgSGVscGVyCnsKY29uc3QgRk9STUFUX1FVSUVUID0gJyAlcGVyY2VudCUlJzsKY29uc3QgRk9STUFUX05PUk1BTCA9ICcgJWN1cnJlbnQlLyVtYXglIFslYmFyJV0gJXBlcmNlbnQlJSc7CmNvbnN0IEZPUk1BVF9WRVJCT1NFID0gJyAlY3VycmVudCUvJW1heCUgWyViYXIlXSAlcGVyY2VudCUlIEVsYXBzZWQ6ICVlbGFwc2VkJSc7CmNvbnN0IEZPUk1BVF9RVUlFVF9OT01BWCA9ICcgJWN1cnJlbnQlJzsKY29uc3QgRk9STUFUX05PUk1BTF9OT01BWCA9ICcgJWN1cnJlbnQlIFslYmFyJV0nOwpjb25zdCBGT1JNQVRfVkVSQk9TRV9OT01BWCA9ICcgJWN1cnJlbnQlIFslYmFyJV0gRWxhcHNlZDogJWVsYXBzZWQlJzsKCgogcHJpdmF0ZSAkYmFyV2lkdGggPSAyODsKcHJpdmF0ZSAkYmFyQ2hhciA9ICc9JzsKcHJpdmF0ZSAkZW1wdHlCYXJDaGFyID0gJy0nOwpwcml2YXRlICRwcm9ncmVzc0NoYXIgPSAnPic7CnByaXZhdGUgJGZvcm1hdCA9IG51bGw7CnByaXZhdGUgJHJlZHJhd0ZyZXEgPSAxOwoKcHJpdmF0ZSAkbGFzdE1lc3NhZ2VzTGVuZ3RoOwpwcml2YXRlICRiYXJDaGFyT3JpZ2luYWw7CgoKCgpwcml2YXRlICRvdXRwdXQ7CgoKCgoKCnByaXZhdGUgJGN1cnJlbnQ7CgoKCgoKCnByaXZhdGUgJG1heDsKCgoKCgoKcHJpdmF0ZSAkc3RhcnRUaW1lOwoKCgoKCgpwcml2YXRlICRkZWZhdWx0Rm9ybWF0VmFycyA9IGFycmF5KAonY3VycmVudCcsCidtYXgnLAonYmFyJywKJ3BlcmNlbnQnLAonZWxhcHNlZCcsCik7CgoKCgoKCnByaXZhdGUgJGZvcm1hdFZhcnM7CgoKCgoKCnByaXZhdGUgJHdpZHRocyA9IGFycmF5KAonY3VycmVudCcgPT4gNCwKJ21heCcgPT4gNCwKJ3BlcmNlbnQnID0+IDMsCidlbGFwc2VkJyA9PiA2LAopOwoKCgoKCgpwcml2YXRlICR0aW1lRm9ybWF0cyA9IGFycmF5KAphcnJheSgwLCAnPz8/JyksCmFycmF5KDIsICcxIHNlYycpLAphcnJheSg1OSwgJ3NlY3MnLCAxKSwKYXJyYXkoNjAsICcxIG1pbicpLAphcnJheSgzNjAwLCAnbWlucycsIDYwKSwKYXJyYXkoNTQwMCwgJzEgaHInKSwKYXJyYXkoODY0MDAsICdocnMnLCAzNjAwKSwKYXJyYXkoMTI5NjAwLCAnMSBkYXknKSwKYXJyYXkoNjA0ODAwLCAnZGF5cycsIDg2NDAwKSwKKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEJhcldpZHRoKCRzaXplKQp7CiR0aGlzLT5iYXJXaWR0aCA9IChpbnQpICRzaXplOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRCYXJDaGFyYWN0ZXIoJGNoYXIpCnsKJHRoaXMtPmJhckNoYXIgPSAkY2hhcjsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RW1wdHlCYXJDaGFyYWN0ZXIoJGNoYXIpCnsKJHRoaXMtPmVtcHR5QmFyQ2hhciA9ICRjaGFyOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRQcm9ncmVzc0NoYXJhY3RlcigkY2hhcikKewokdGhpcy0+cHJvZ3Jlc3NDaGFyID0gJGNoYXI7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEZvcm1hdCgkZm9ybWF0KQp7CiR0aGlzLT5mb3JtYXQgPSAkZm9ybWF0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRSZWRyYXdGcmVxdWVuY3koJGZyZXEpCnsKJHRoaXMtPnJlZHJhd0ZyZXEgPSAoaW50KSAkZnJlcTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHN0YXJ0KE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCAkbWF4ID0gbnVsbCkKewokdGhpcy0+c3RhcnRUaW1lID0gdGltZSgpOwokdGhpcy0+Y3VycmVudCA9IDA7CiR0aGlzLT5tYXggPSAoaW50KSAkbWF4OwokdGhpcy0+b3V0cHV0ID0gJG91dHB1dDsKJHRoaXMtPmxhc3RNZXNzYWdlc0xlbmd0aCA9IDA7CiR0aGlzLT5iYXJDaGFyT3JpZ2luYWwgPSAnJzsKCmlmIChudWxsID09PSAkdGhpcy0+Zm9ybWF0KSB7CnN3aXRjaCAoJG91dHB1dC0+Z2V0VmVyYm9zaXR5KCkpIHsKY2FzZSBPdXRwdXRJbnRlcmZhY2U6OlZFUkJPU0lUWV9RVUlFVDoKJHRoaXMtPmZvcm1hdCA9IHNlbGY6OkZPUk1BVF9RVUlFVF9OT01BWDsKaWYgKCR0aGlzLT5tYXggPiAwKSB7CiR0aGlzLT5mb3JtYXQgPSBzZWxmOjpGT1JNQVRfUVVJRVQ7Cn0KYnJlYWs7CmNhc2UgT3V0cHV0SW50ZXJmYWNlOjpWRVJCT1NJVFlfVkVSQk9TRToKY2FzZSBPdXRwdXRJbnRlcmZhY2U6OlZFUkJPU0lUWV9WRVJZX1ZFUkJPU0U6CmNhc2UgT3V0cHV0SW50ZXJmYWNlOjpWRVJCT1NJVFlfREVCVUc6CiR0aGlzLT5mb3JtYXQgPSBzZWxmOjpGT1JNQVRfVkVSQk9TRV9OT01BWDsKaWYgKCR0aGlzLT5tYXggPiAwKSB7CiR0aGlzLT5mb3JtYXQgPSBzZWxmOjpGT1JNQVRfVkVSQk9TRTsKfQpicmVhazsKZGVmYXVsdDoKJHRoaXMtPmZvcm1hdCA9IHNlbGY6OkZPUk1BVF9OT1JNQUxfTk9NQVg7CmlmICgkdGhpcy0+bWF4ID4gMCkgewokdGhpcy0+Zm9ybWF0ID0gc2VsZjo6Rk9STUFUX05PUk1BTDsKfQpicmVhazsKfQp9CgokdGhpcy0+aW5pdGlhbGl6ZSgpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZHZhbmNlKCRzdGVwID0gMSwgJHJlZHJhdyA9IGZhbHNlKQp7CiR0aGlzLT5zZXRDdXJyZW50KCR0aGlzLT5jdXJyZW50ICsgJHN0ZXAsICRyZWRyYXcpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRDdXJyZW50KCRjdXJyZW50LCAkcmVkcmF3ID0gZmFsc2UpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5zdGFydFRpbWUpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignWW91IG11c3Qgc3RhcnQgdGhlIHByb2dyZXNzIGJhciBiZWZvcmUgY2FsbGluZyBzZXRDdXJyZW50KCkuJyk7Cn0KCiRjdXJyZW50ID0gKGludCkgJGN1cnJlbnQ7CgppZiAoJGN1cnJlbnQgPCAkdGhpcy0+Y3VycmVudCkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdZb3UgY2FuXCd0IHJlZ3Jlc3MgdGhlIHByb2dyZXNzIGJhcicpOwp9CgppZiAoMCA9PT0gJHRoaXMtPmN1cnJlbnQpIHsKJHJlZHJhdyA9IHRydWU7Cn0KCiRwcmV2UGVyaW9kID0gaW50dmFsKCR0aGlzLT5jdXJyZW50IC8gJHRoaXMtPnJlZHJhd0ZyZXEpOwoKJHRoaXMtPmN1cnJlbnQgPSAkY3VycmVudDsKCiRjdXJyUGVyaW9kID0gaW50dmFsKCR0aGlzLT5jdXJyZW50IC8gJHRoaXMtPnJlZHJhd0ZyZXEpOwppZiAoJHJlZHJhdyB8fCAkcHJldlBlcmlvZCAhPT0gJGN1cnJQZXJpb2QgfHwgJHRoaXMtPm1heCA9PT0gJHRoaXMtPmN1cnJlbnQpIHsKJHRoaXMtPmRpc3BsYXkoKTsKfQp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGRpc3BsYXkoJGZpbmlzaCA9IGZhbHNlKQp7CmlmIChudWxsID09PSAkdGhpcy0+c3RhcnRUaW1lKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1lvdSBtdXN0IHN0YXJ0IHRoZSBwcm9ncmVzcyBiYXIgYmVmb3JlIGNhbGxpbmcgZGlzcGxheSgpLicpOwp9CgokbWVzc2FnZSA9ICR0aGlzLT5mb3JtYXQ7CmZvcmVhY2ggKCR0aGlzLT5nZW5lcmF0ZSgkZmluaXNoKSBhcyAkbmFtZSA9PiAkdmFsdWUpIHsKJG1lc3NhZ2UgPSBzdHJfcmVwbGFjZSgiJXskbmFtZX0lIiwgJHZhbHVlLCAkbWVzc2FnZSk7Cn0KJHRoaXMtPm92ZXJ3cml0ZSgkdGhpcy0+b3V0cHV0LCAkbWVzc2FnZSk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY2xlYXIoKQp7CiR0aGlzLT5vdmVyd3JpdGUoJHRoaXMtPm91dHB1dCwgJycpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZmluaXNoKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnN0YXJ0VGltZSkgewp0aHJvdyBuZXcgXExvZ2ljRXhjZXB0aW9uKCdZb3UgbXVzdCBzdGFydCB0aGUgcHJvZ3Jlc3MgYmFyIGJlZm9yZSBjYWxsaW5nIGZpbmlzaCgpLicpOwp9CgppZiAobnVsbCAhPT0gJHRoaXMtPnN0YXJ0VGltZSkgewppZiAoISR0aGlzLT5tYXgpIHsKJHRoaXMtPmJhckNoYXIgPSAkdGhpcy0+YmFyQ2hhck9yaWdpbmFsOwokdGhpcy0+ZGlzcGxheSh0cnVlKTsKfQokdGhpcy0+c3RhcnRUaW1lID0gbnVsbDsKJHRoaXMtPm91dHB1dC0+d3JpdGVsbignJyk7CiR0aGlzLT5vdXRwdXQgPSBudWxsOwp9Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gaW5pdGlhbGl6ZSgpCnsKJHRoaXMtPmZvcm1hdFZhcnMgPSBhcnJheSgpOwpmb3JlYWNoICgkdGhpcy0+ZGVmYXVsdEZvcm1hdFZhcnMgYXMgJHZhcikgewppZiAoZmFsc2UgIT09IHN0cnBvcygkdGhpcy0+Zm9ybWF0LCAiJXskdmFyfSUiKSkgewokdGhpcy0+Zm9ybWF0VmFyc1skdmFyXSA9IHRydWU7Cn0KfQoKaWYgKCR0aGlzLT5tYXggPiAwKSB7CiR0aGlzLT53aWR0aHNbJ21heCddID0gJHRoaXMtPnN0cmxlbigkdGhpcy0+bWF4KTsKJHRoaXMtPndpZHRoc1snY3VycmVudCddID0gJHRoaXMtPndpZHRoc1snbWF4J107Cn0gZWxzZSB7CiR0aGlzLT5iYXJDaGFyT3JpZ2luYWwgPSAkdGhpcy0+YmFyQ2hhcjsKJHRoaXMtPmJhckNoYXIgPSAkdGhpcy0+ZW1wdHlCYXJDaGFyOwp9Cn0KCgoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGdlbmVyYXRlKCRmaW5pc2ggPSBmYWxzZSkKewokdmFycyA9IGFycmF5KCk7CiRwZXJjZW50ID0gMDsKaWYgKCR0aGlzLT5tYXggPiAwKSB7CiRwZXJjZW50ID0gKGZsb2F0KSAkdGhpcy0+Y3VycmVudCAvICR0aGlzLT5tYXg7Cn0KCmlmIChpc3NldCgkdGhpcy0+Zm9ybWF0VmFyc1snYmFyJ10pKSB7CiRjb21wbGV0ZUJhcnMgPSAwOwoKaWYgKCR0aGlzLT5tYXggPiAwKSB7CiRjb21wbGV0ZUJhcnMgPSBmbG9vcigkcGVyY2VudCAqICR0aGlzLT5iYXJXaWR0aCk7Cn0gZWxzZSB7CmlmICghJGZpbmlzaCkgewokY29tcGxldGVCYXJzID0gZmxvb3IoJHRoaXMtPmN1cnJlbnQgJSAkdGhpcy0+YmFyV2lkdGgpOwp9IGVsc2UgewokY29tcGxldGVCYXJzID0gJHRoaXMtPmJhcldpZHRoOwp9Cn0KCiRlbXB0eUJhcnMgPSAkdGhpcy0+YmFyV2lkdGggLSAkY29tcGxldGVCYXJzIC0gJHRoaXMtPnN0cmxlbigkdGhpcy0+cHJvZ3Jlc3NDaGFyKTsKJGJhciA9IHN0cl9yZXBlYXQoJHRoaXMtPmJhckNoYXIsICRjb21wbGV0ZUJhcnMpOwppZiAoJGNvbXBsZXRlQmFycyA8ICR0aGlzLT5iYXJXaWR0aCkgewokYmFyIC49ICR0aGlzLT5wcm9ncmVzc0NoYXI7CiRiYXIgLj0gc3RyX3JlcGVhdCgkdGhpcy0+ZW1wdHlCYXJDaGFyLCAkZW1wdHlCYXJzKTsKfQoKJHZhcnNbJ2JhciddID0gJGJhcjsKfQoKaWYgKGlzc2V0KCR0aGlzLT5mb3JtYXRWYXJzWydlbGFwc2VkJ10pKSB7CiRlbGFwc2VkID0gdGltZSgpIC0gJHRoaXMtPnN0YXJ0VGltZTsKJHZhcnNbJ2VsYXBzZWQnXSA9IHN0cl9wYWQoJHRoaXMtPmh1bWFuZVRpbWUoJGVsYXBzZWQpLCAkdGhpcy0+d2lkdGhzWydlbGFwc2VkJ10sICcgJywgU1RSX1BBRF9MRUZUKTsKfQoKaWYgKGlzc2V0KCR0aGlzLT5mb3JtYXRWYXJzWydjdXJyZW50J10pKSB7CiR2YXJzWydjdXJyZW50J10gPSBzdHJfcGFkKCR0aGlzLT5jdXJyZW50LCAkdGhpcy0+d2lkdGhzWydjdXJyZW50J10sICcgJywgU1RSX1BBRF9MRUZUKTsKfQoKaWYgKGlzc2V0KCR0aGlzLT5mb3JtYXRWYXJzWydtYXgnXSkpIHsKJHZhcnNbJ21heCddID0gJHRoaXMtPm1heDsKfQoKaWYgKGlzc2V0KCR0aGlzLT5mb3JtYXRWYXJzWydwZXJjZW50J10pKSB7CiR2YXJzWydwZXJjZW50J10gPSBzdHJfcGFkKGZsb29yKCRwZXJjZW50ICogMTAwKSwgJHRoaXMtPndpZHRoc1sncGVyY2VudCddLCAnICcsIFNUUl9QQURfTEVGVCk7Cn0KCnJldHVybiAkdmFyczsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gaHVtYW5lVGltZSgkc2VjcykKewokdGV4dCA9ICcnOwpmb3JlYWNoICgkdGhpcy0+dGltZUZvcm1hdHMgYXMgJGZvcm1hdCkgewppZiAoJHNlY3MgPCAkZm9ybWF0WzBdKSB7CmlmIChjb3VudCgkZm9ybWF0KSA9PSAyKSB7CiR0ZXh0ID0gJGZvcm1hdFsxXTsKYnJlYWs7Cn0gZWxzZSB7CiR0ZXh0ID0gY2VpbCgkc2VjcyAvICRmb3JtYXRbMl0pLicgJy4kZm9ybWF0WzFdOwpicmVhazsKfQp9Cn0KCnJldHVybiAkdGV4dDsKfQoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBvdmVyd3JpdGUoT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsICRtZXNzYWdlKQp7CiRsZW5ndGggPSAkdGhpcy0+c3RybGVuKCRtZXNzYWdlKTsKCgogaWYgKG51bGwgIT09ICR0aGlzLT5sYXN0TWVzc2FnZXNMZW5ndGggJiYgJHRoaXMtPmxhc3RNZXNzYWdlc0xlbmd0aCA+ICRsZW5ndGgpIHsKJG1lc3NhZ2UgPSBzdHJfcGFkKCRtZXNzYWdlLCAkdGhpcy0+bGFzdE1lc3NhZ2VzTGVuZ3RoLCAiXHgyMCIsIFNUUl9QQURfUklHSFQpOwp9CgoKICRvdXRwdXQtPndyaXRlKCJceDBEIik7CiRvdXRwdXQtPndyaXRlKCRtZXNzYWdlKTsKCiR0aGlzLT5sYXN0TWVzc2FnZXNMZW5ndGggPSAkdGhpcy0+c3RybGVuKCRtZXNzYWdlKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE5hbWUoKQp7CnJldHVybiAncHJvZ3Jlc3MnOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEhlbHBlcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEF3YXJlSW50ZXJmYWNlOwoKCgoKCgphYnN0cmFjdCBjbGFzcyBJbnB1dEF3YXJlSGVscGVyIGV4dGVuZHMgSGVscGVyIGltcGxlbWVudHMgSW5wdXRBd2FyZUludGVyZmFjZQp7CnByb3RlY3RlZCAkaW5wdXQ7CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0SW5wdXQoSW5wdXRJbnRlcmZhY2UgJGlucHV0KQp7CiR0aGlzLT5pbnB1dCA9ICRpbnB1dDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxFdmVudDsKCnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXENvbW1hbmRcQ29tbWFuZDsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcSW5wdXRcSW5wdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXE91dHB1dFxPdXRwdXRJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxFdmVudERpc3BhdGNoZXJcRXZlbnQ7CgoKCgoKCmNsYXNzIENvbnNvbGVFdmVudCBleHRlbmRzIEV2ZW50CnsKcHJvdGVjdGVkICRjb21tYW5kOwoKcHJpdmF0ZSAkaW5wdXQ7CnByaXZhdGUgJG91dHB1dDsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb21tYW5kICRjb21tYW5kLCBJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0KQp7CiR0aGlzLT5jb21tYW5kID0gJGNvbW1hbmQ7CiR0aGlzLT5pbnB1dCA9ICRpbnB1dDsKJHRoaXMtPm91dHB1dCA9ICRvdXRwdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmQoKQp7CnJldHVybiAkdGhpcy0+Y29tbWFuZDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SW5wdXQoKQp7CnJldHVybiAkdGhpcy0+aW5wdXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldE91dHB1dCgpCnsKcmV0dXJuICR0aGlzLT5vdXRwdXQ7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcRXZlbnQ7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxDb21tYW5kXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXElucHV0XElucHV0SW50ZXJmYWNlOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxPdXRwdXRcT3V0cHV0SW50ZXJmYWNlOwoKCgoKCgpjbGFzcyBDb25zb2xlVGVybWluYXRlRXZlbnQgZXh0ZW5kcyBDb25zb2xlRXZlbnQKewoKCgoKCnByaXZhdGUgJGV4aXRDb2RlOwoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbW1hbmQgJGNvbW1hbmQsIElucHV0SW50ZXJmYWNlICRpbnB1dCwgT3V0cHV0SW50ZXJmYWNlICRvdXRwdXQsICRleGl0Q29kZSkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRjb21tYW5kLCAkaW5wdXQsICRvdXRwdXQpOwoKJHRoaXMtPnNldEV4aXRDb2RlKCRleGl0Q29kZSk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEV4aXRDb2RlKCRleGl0Q29kZSkKewokdGhpcy0+ZXhpdENvZGUgPSAoaW50KSAkZXhpdENvZGU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlKCkKewpyZXR1cm4gJHRoaXMtPmV4aXRDb2RlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEV2ZW50OwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcQ29tbWFuZFxDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZVxJbnB1dFxJbnB1dEludGVyZmFjZTsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGVcT3V0cHV0XE91dHB1dEludGVyZmFjZTsKCgoKCgoKY2xhc3MgQ29uc29sZUV4Y2VwdGlvbkV2ZW50IGV4dGVuZHMgQ29uc29sZUV2ZW50CnsKcHJpdmF0ZSAkZXhjZXB0aW9uOwpwcml2YXRlICRleGl0Q29kZTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChDb21tYW5kICRjb21tYW5kLCBJbnB1dEludGVyZmFjZSAkaW5wdXQsIE91dHB1dEludGVyZmFjZSAkb3V0cHV0LCBcRXhjZXB0aW9uICRleGNlcHRpb24sICRleGl0Q29kZSkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRjb21tYW5kLCAkaW5wdXQsICRvdXRwdXQpOwoKJHRoaXMtPnNldEV4Y2VwdGlvbigkZXhjZXB0aW9uKTsKJHRoaXMtPmV4aXRDb2RlID0gKGludCkgJGV4aXRDb2RlOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRFeGNlcHRpb24oKQp7CnJldHVybiAkdGhpcy0+ZXhjZXB0aW9uOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEV4Y2VwdGlvbihcRXhjZXB0aW9uICRleGNlcHRpb24pCnsKJHRoaXMtPmV4Y2VwdGlvbiA9ICRleGNlcHRpb247Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEV4aXRDb2RlKCkKewpyZXR1cm4gJHRoaXMtPmV4aXRDb2RlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxDb25zb2xlXEV2ZW50OwoKCgoKCgpjbGFzcyBDb25zb2xlQ29tbWFuZEV2ZW50IGV4dGVuZHMgQ29uc29sZUV2ZW50CnsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XENvbnNvbGU7CgoKCgoKCmZpbmFsIGNsYXNzIENvbnNvbGVFdmVudHMKewoKCgoKCgoKCgoKY29uc3QgQ09NTUFORCA9ICdjb25zb2xlLmNvbW1hbmQnOwoKCgoKCgoKCgoKY29uc3QgVEVSTUlOQVRFID0gJ2NvbnNvbGUudGVybWluYXRlJzsKCgoKCgoKCgoKCgpjb25zdCBFWENFUFRJT04gPSAnY29uc29sZS5leGNlcHRpb24nOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcQWRhcHRlclxHbnVGaW5kQWRhcHRlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyXEJzZEZpbmRBZGFwdGVyOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEFkYXB0ZXJcUGhwQWRhcHRlcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeGNlcHRpb25cRXhjZXB0aW9uSW50ZXJmYWNlOwoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgRmluZGVyIGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlLCBcQ291bnRhYmxlCnsKY29uc3QgSUdOT1JFX1ZDU19GSUxFUyA9IDE7CmNvbnN0IElHTk9SRV9ET1RfRklMRVMgPSAyOwoKcHJpdmF0ZSAkbW9kZSA9IDA7CnByaXZhdGUgJG5hbWVzID0gYXJyYXkoKTsKcHJpdmF0ZSAkbm90TmFtZXMgPSBhcnJheSgpOwpwcml2YXRlICRleGNsdWRlID0gYXJyYXkoKTsKcHJpdmF0ZSAkZmlsdGVycyA9IGFycmF5KCk7CnByaXZhdGUgJGRlcHRocyA9IGFycmF5KCk7CnByaXZhdGUgJHNpemVzID0gYXJyYXkoKTsKcHJpdmF0ZSAkZm9sbG93TGlua3MgPSBmYWxzZTsKcHJpdmF0ZSAkc29ydCA9IGZhbHNlOwpwcml2YXRlICRpZ25vcmUgPSAwOwpwcml2YXRlICRkaXJzID0gYXJyYXkoKTsKcHJpdmF0ZSAkZGF0ZXMgPSBhcnJheSgpOwpwcml2YXRlICRpdGVyYXRvcnMgPSBhcnJheSgpOwpwcml2YXRlICRjb250YWlucyA9IGFycmF5KCk7CnByaXZhdGUgJG5vdENvbnRhaW5zID0gYXJyYXkoKTsKcHJpdmF0ZSAkYWRhcHRlcnMgPSBhcnJheSgpOwpwcml2YXRlICRwYXRocyA9IGFycmF5KCk7CnByaXZhdGUgJG5vdFBhdGhzID0gYXJyYXkoKTsKcHJpdmF0ZSAkaWdub3JlVW5yZWFkYWJsZURpcnMgPSBmYWxzZTsKCnByaXZhdGUgc3RhdGljICR2Y3NQYXR0ZXJucyA9IGFycmF5KCcuc3ZuJywgJ19zdm4nLCAnQ1ZTJywgJ19kYXJjcycsICcuYXJjaC1wYXJhbXMnLCAnLm1vbm90b25lJywgJy5ienInLCAnLmdpdCcsICcuaGcnKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCnsKJHRoaXMtPmlnbm9yZSA9IHN0YXRpYzo6SUdOT1JFX1ZDU19GSUxFUyB8IHN0YXRpYzo6SUdOT1JFX0RPVF9GSUxFUzsKCiR0aGlzCi0+YWRkQWRhcHRlcihuZXcgR251RmluZEFkYXB0ZXIoKSkKLT5hZGRBZGFwdGVyKG5ldyBCc2RGaW5kQWRhcHRlcigpKQotPmFkZEFkYXB0ZXIobmV3IFBocEFkYXB0ZXIoKSwgLTUwKQotPnNldEFkYXB0ZXIoJ3BocCcpCjsKfQoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCkKewpyZXR1cm4gbmV3IHN0YXRpYygpOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRBZGFwdGVyKEFkYXB0ZXJcQWRhcHRlckludGVyZmFjZSAkYWRhcHRlciwgJHByaW9yaXR5ID0gMCkKewokdGhpcy0+YWRhcHRlcnNbJGFkYXB0ZXItPmdldE5hbWUoKV0gPSBhcnJheSgKJ2FkYXB0ZXInID0+ICRhZGFwdGVyLAoncHJpb3JpdHknID0+ICRwcmlvcml0eSwKJ3NlbGVjdGVkJyA9PiBmYWxzZSwKKTsKCnJldHVybiAkdGhpcy0+c29ydEFkYXB0ZXJzKCk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHVzZUJlc3RBZGFwdGVyKCkKewokdGhpcy0+cmVzZXRBZGFwdGVyU2VsZWN0aW9uKCk7CgpyZXR1cm4gJHRoaXMtPnNvcnRBZGFwdGVycygpOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0QWRhcHRlcigkbmFtZSkKewppZiAoIWlzc2V0KCR0aGlzLT5hZGFwdGVyc1skbmFtZV0pKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0FkYXB0ZXIgIiVzIiBkb2VzIG5vdCBleGlzdC4nLCAkbmFtZSkpOwp9CgokdGhpcy0+cmVzZXRBZGFwdGVyU2VsZWN0aW9uKCk7CiR0aGlzLT5hZGFwdGVyc1skbmFtZV1bJ3NlbGVjdGVkJ10gPSB0cnVlOwoKcmV0dXJuICR0aGlzLT5zb3J0QWRhcHRlcnMoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlQWRhcHRlcnMoKQp7CiR0aGlzLT5hZGFwdGVycyA9IGFycmF5KCk7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEFkYXB0ZXJzKCkKewpyZXR1cm4gYXJyYXlfdmFsdWVzKGFycmF5X21hcChmdW5jdGlvbiAoYXJyYXkgJGFkYXB0ZXIpIHsKcmV0dXJuICRhZGFwdGVyWydhZGFwdGVyJ107Cn0sICR0aGlzLT5hZGFwdGVycykpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGRpcmVjdG9yaWVzKCkKewokdGhpcy0+bW9kZSA9IEl0ZXJhdG9yXEZpbGVUeXBlRmlsdGVySXRlcmF0b3I6Ok9OTFlfRElSRUNUT1JJRVM7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmlsZXMoKQp7CiR0aGlzLT5tb2RlID0gSXRlcmF0b3JcRmlsZVR5cGVGaWx0ZXJJdGVyYXRvcjo6T05MWV9GSUxFUzsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZGVwdGgoJGxldmVsKQp7CiR0aGlzLT5kZXB0aHNbXSA9IG5ldyBDb21wYXJhdG9yXE51bWJlckNvbXBhcmF0b3IoJGxldmVsKTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZGF0ZSgkZGF0ZSkKewokdGhpcy0+ZGF0ZXNbXSA9IG5ldyBDb21wYXJhdG9yXERhdGVDb21wYXJhdG9yKCRkYXRlKTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbmFtZSgkcGF0dGVybikKewokdGhpcy0+bmFtZXNbXSA9ICRwYXR0ZXJuOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBub3ROYW1lKCRwYXR0ZXJuKQp7CiR0aGlzLT5ub3ROYW1lc1tdID0gJHBhdHRlcm47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zKCRwYXR0ZXJuKQp7CiR0aGlzLT5jb250YWluc1tdID0gJHBhdHRlcm47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG5vdENvbnRhaW5zKCRwYXR0ZXJuKQp7CiR0aGlzLT5ub3RDb250YWluc1tdID0gJHBhdHRlcm47CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcGF0aCgkcGF0dGVybikKewokdGhpcy0+cGF0aHNbXSA9ICRwYXR0ZXJuOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIG5vdFBhdGgoJHBhdHRlcm4pCnsKJHRoaXMtPm5vdFBhdGhzW10gPSAkcGF0dGVybjsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzaXplKCRzaXplKQp7CiR0aGlzLT5zaXplc1tdID0gbmV3IENvbXBhcmF0b3JcTnVtYmVyQ29tcGFyYXRvcigkc2l6ZSk7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGV4Y2x1ZGUoJGRpcnMpCnsKJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheV9tZXJnZSgkdGhpcy0+ZXhjbHVkZSwgKGFycmF5KSAkZGlycyk7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlnbm9yZURvdEZpbGVzKCRpZ25vcmVEb3RGaWxlcykKewppZiAoJGlnbm9yZURvdEZpbGVzKSB7CiR0aGlzLT5pZ25vcmUgPSAkdGhpcy0+aWdub3JlIHwgc3RhdGljOjpJR05PUkVfRE9UX0ZJTEVTOwp9IGVsc2UgewokdGhpcy0+aWdub3JlID0gJHRoaXMtPmlnbm9yZSAmIH5zdGF0aWM6OklHTk9SRV9ET1RfRklMRVM7Cn0KCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaWdub3JlVkNTKCRpZ25vcmVWQ1MpCnsKaWYgKCRpZ25vcmVWQ1MpIHsKJHRoaXMtPmlnbm9yZSA9ICR0aGlzLT5pZ25vcmUgfCBzdGF0aWM6OklHTk9SRV9WQ1NfRklMRVM7Cn0gZWxzZSB7CiR0aGlzLT5pZ25vcmUgPSAkdGhpcy0+aWdub3JlICYgfnN0YXRpYzo6SUdOT1JFX1ZDU19GSUxFUzsKfQoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRWQ1NQYXR0ZXJuKCRwYXR0ZXJuKQp7CmZvcmVhY2ggKChhcnJheSkgJHBhdHRlcm4gYXMgJHApIHsKc2VsZjo6JHZjc1BhdHRlcm5zW10gPSAkcDsKfQoKc2VsZjo6JHZjc1BhdHRlcm5zID0gYXJyYXlfdW5pcXVlKHNlbGY6OiR2Y3NQYXR0ZXJucyk7Cn0KCgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzb3J0KFxDbG9zdXJlICRjbG9zdXJlKQp7CiR0aGlzLT5zb3J0ID0gJGNsb3N1cmU7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNvcnRCeU5hbWUoKQp7CiR0aGlzLT5zb3J0ID0gSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9OQU1FOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzb3J0QnlUeXBlKCkKewokdGhpcy0+c29ydCA9IEl0ZXJhdG9yXFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfVFlQRTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzb3J0QnlBY2Nlc3NlZFRpbWUoKQp7CiR0aGlzLT5zb3J0ID0gSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9BQ0NFU1NFRF9USU1FOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc29ydEJ5Q2hhbmdlZFRpbWUoKQp7CiR0aGlzLT5zb3J0ID0gSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9DSEFOR0VEX1RJTUU7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc29ydEJ5TW9kaWZpZWRUaW1lKCkKewokdGhpcy0+c29ydCA9IEl0ZXJhdG9yXFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfTU9ESUZJRURfVElNRTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmlsdGVyKFxDbG9zdXJlICRjbG9zdXJlKQp7CiR0aGlzLT5maWx0ZXJzW10gPSAkY2xvc3VyZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBmb2xsb3dMaW5rcygpCnsKJHRoaXMtPmZvbGxvd0xpbmtzID0gdHJ1ZTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGlnbm9yZVVucmVhZGFibGVEaXJzKCRpZ25vcmUgPSB0cnVlKQp7CiR0aGlzLT5pZ25vcmVVbnJlYWRhYmxlRGlycyA9IChCb29sZWFuKSAkaWdub3JlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpbigkZGlycykKewokcmVzb2x2ZWREaXJzID0gYXJyYXkoKTsKCmZvcmVhY2ggKChhcnJheSkgJGRpcnMgYXMgJGRpcikgewppZiAoaXNfZGlyKCRkaXIpKSB7CiRyZXNvbHZlZERpcnNbXSA9ICRkaXI7Cn0gZWxzZWlmICgkZ2xvYiA9IGdsb2IoJGRpciwgR0xPQl9PTkxZRElSKSkgewokcmVzb2x2ZWREaXJzID0gYXJyYXlfbWVyZ2UoJHJlc29sdmVkRGlycywgJGdsb2IpOwp9IGVsc2Ugewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdUaGUgIiVzIiBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QuJywgJGRpcikpOwp9Cn0KCiR0aGlzLT5kaXJzID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmRpcnMsICRyZXNvbHZlZERpcnMpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0SXRlcmF0b3IoKQp7CmlmICgwID09PSBjb3VudCgkdGhpcy0+ZGlycykgJiYgMCA9PT0gY291bnQoJHRoaXMtPml0ZXJhdG9ycykpIHsKdGhyb3cgbmV3IFxMb2dpY0V4Y2VwdGlvbignWW91IG11c3QgY2FsbCBvbmUgb2YgaW4oKSBvciBhcHBlbmQoKSBtZXRob2RzIGJlZm9yZSBpdGVyYXRpbmcgb3ZlciBhIEZpbmRlci4nKTsKfQoKaWYgKDEgPT09IGNvdW50KCR0aGlzLT5kaXJzKSAmJiAwID09PSBjb3VudCgkdGhpcy0+aXRlcmF0b3JzKSkgewpyZXR1cm4gJHRoaXMtPnNlYXJjaEluRGlyZWN0b3J5KCR0aGlzLT5kaXJzWzBdKTsKfQoKJGl0ZXJhdG9yID0gbmV3IFxBcHBlbmRJdGVyYXRvcigpOwpmb3JlYWNoICgkdGhpcy0+ZGlycyBhcyAkZGlyKSB7CiRpdGVyYXRvci0+YXBwZW5kKCR0aGlzLT5zZWFyY2hJbkRpcmVjdG9yeSgkZGlyKSk7Cn0KCmZvcmVhY2ggKCR0aGlzLT5pdGVyYXRvcnMgYXMgJGl0KSB7CiRpdGVyYXRvci0+YXBwZW5kKCRpdCk7Cn0KCnJldHVybiAkaXRlcmF0b3I7Cn0KCgoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkaXRlcmF0b3IpCnsKaWYgKCRpdGVyYXRvciBpbnN0YW5jZW9mIFxJdGVyYXRvckFnZ3JlZ2F0ZSkgewokdGhpcy0+aXRlcmF0b3JzW10gPSAkaXRlcmF0b3ItPmdldEl0ZXJhdG9yKCk7Cn0gZWxzZWlmICgkaXRlcmF0b3IgaW5zdGFuY2VvZiBcSXRlcmF0b3IpIHsKJHRoaXMtPml0ZXJhdG9yc1tdID0gJGl0ZXJhdG9yOwp9IGVsc2VpZiAoJGl0ZXJhdG9yIGluc3RhbmNlb2YgXFRyYXZlcnNhYmxlIHx8IGlzX2FycmF5KCRpdGVyYXRvcikpIHsKJGl0ID0gbmV3IFxBcnJheUl0ZXJhdG9yKCk7CmZvcmVhY2ggKCRpdGVyYXRvciBhcyAkZmlsZSkgewokaXQtPmFwcGVuZCgkZmlsZSBpbnN0YW5jZW9mIFxTcGxGaWxlSW5mbyA/ICRmaWxlIDogbmV3IFxTcGxGaWxlSW5mbygkZmlsZSkpOwp9CiR0aGlzLT5pdGVyYXRvcnNbXSA9ICRpdDsKfSBlbHNlIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ZpbmRlcjo6YXBwZW5kKCkgbWV0aG9kIHdyb25nIGFyZ3VtZW50IHR5cGUuJyk7Cn0KCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY291bnQoKQp7CnJldHVybiBpdGVyYXRvcl9jb3VudCgkdGhpcy0+Z2V0SXRlcmF0b3IoKSk7Cn0KCgoKCnByaXZhdGUgZnVuY3Rpb24gc29ydEFkYXB0ZXJzKCkKewp1YXNvcnQoJHRoaXMtPmFkYXB0ZXJzLCBmdW5jdGlvbiAoYXJyYXkgJGEsIGFycmF5ICRiKSB7CmlmICgkYVsnc2VsZWN0ZWQnXSB8fCAkYlsnc2VsZWN0ZWQnXSkgewpyZXR1cm4gJGFbJ3NlbGVjdGVkJ10gPyAtMSA6IDE7Cn0KCnJldHVybiAkYVsncHJpb3JpdHknXSA+ICRiWydwcmlvcml0eSddID8gLTEgOiAxOwp9KTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gc2VhcmNoSW5EaXJlY3RvcnkoJGRpcikKewppZiAoc3RhdGljOjpJR05PUkVfVkNTX0ZJTEVTID09PSAoc3RhdGljOjpJR05PUkVfVkNTX0ZJTEVTICYgJHRoaXMtPmlnbm9yZSkpIHsKJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheV9tZXJnZSgkdGhpcy0+ZXhjbHVkZSwgc2VsZjo6JHZjc1BhdHRlcm5zKTsKfQoKaWYgKHN0YXRpYzo6SUdOT1JFX0RPVF9GSUxFUyA9PT0gKHN0YXRpYzo6SUdOT1JFX0RPVF9GSUxFUyAmICR0aGlzLT5pZ25vcmUpKSB7CiR0aGlzLT5ub3RQYXRoc1tdID0gJyMoXnwvKVwuLisoL3wkKSMnOwp9Cgpmb3JlYWNoICgkdGhpcy0+YWRhcHRlcnMgYXMgJGFkYXB0ZXIpIHsKaWYgKCRhZGFwdGVyWydhZGFwdGVyJ10tPmlzU3VwcG9ydGVkKCkpIHsKdHJ5IHsKcmV0dXJuICR0aGlzCi0+YnVpbGRBZGFwdGVyKCRhZGFwdGVyWydhZGFwdGVyJ10pCi0+c2VhcmNoSW5EaXJlY3RvcnkoJGRpcik7Cn0gY2F0Y2ggKEV4Y2VwdGlvbkludGVyZmFjZSAkZSkge30KfQp9Cgp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ05vIHN1cHBvcnRlZCBhZGFwdGVyIGZvdW5kLicpOwp9CgoKCgoKCnByaXZhdGUgZnVuY3Rpb24gYnVpbGRBZGFwdGVyKEFkYXB0ZXJJbnRlcmZhY2UgJGFkYXB0ZXIpCnsKcmV0dXJuICRhZGFwdGVyCi0+c2V0Rm9sbG93TGlua3MoJHRoaXMtPmZvbGxvd0xpbmtzKQotPnNldERlcHRocygkdGhpcy0+ZGVwdGhzKQotPnNldE1vZGUoJHRoaXMtPm1vZGUpCi0+c2V0RXhjbHVkZSgkdGhpcy0+ZXhjbHVkZSkKLT5zZXROYW1lcygkdGhpcy0+bmFtZXMpCi0+c2V0Tm90TmFtZXMoJHRoaXMtPm5vdE5hbWVzKQotPnNldENvbnRhaW5zKCR0aGlzLT5jb250YWlucykKLT5zZXROb3RDb250YWlucygkdGhpcy0+bm90Q29udGFpbnMpCi0+c2V0U2l6ZXMoJHRoaXMtPnNpemVzKQotPnNldERhdGVzKCR0aGlzLT5kYXRlcykKLT5zZXRGaWx0ZXJzKCR0aGlzLT5maWx0ZXJzKQotPnNldFNvcnQoJHRoaXMtPnNvcnQpCi0+c2V0UGF0aCgkdGhpcy0+cGF0aHMpCi0+c2V0Tm90UGF0aCgkdGhpcy0+bm90UGF0aHMpCi0+aWdub3JlVW5yZWFkYWJsZURpcnMoJHRoaXMtPmlnbm9yZVVucmVhZGFibGVEaXJzKTsKfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiByZXNldEFkYXB0ZXJTZWxlY3Rpb24oKQp7CiR0aGlzLT5hZGFwdGVycyA9IGFycmF5X21hcChmdW5jdGlvbiAoYXJyYXkgJHByb3BlcnRpZXMpIHsKJHByb3BlcnRpZXNbJ3NlbGVjdGVkJ10gPSBmYWxzZTsKCnJldHVybiAkcHJvcGVydGllczsKfSwgJHRoaXMtPmFkYXB0ZXJzKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsOwoKCgoKY2xhc3MgQ29tbWFuZAp7CgoKCnByaXZhdGUgJHBhcmVudDsKCgoKCnByaXZhdGUgJGJpdHMgPSBhcnJheSgpOwoKCgoKcHJpdmF0ZSAkbGFiZWxzID0gYXJyYXkoKTsKCgoKCnByaXZhdGUgJGVycm9ySGFuZGxlcjsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KENvbW1hbmQgJHBhcmVudCA9IG51bGwpCnsKJHRoaXMtPnBhcmVudCA9ICRwYXJlbnQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQp7CnJldHVybiAkdGhpcy0+am9pbigpOwp9CgoKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoQ29tbWFuZCAkcGFyZW50ID0gbnVsbCkKewpyZXR1cm4gbmV3IHNlbGYoJHBhcmVudCk7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVzY2FwZSgkaW5wdXQpCnsKcmV0dXJuIGVzY2FwZXNoZWxsY21kKCRpbnB1dCk7Cn0KCgoKCgoKCgpwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHF1b3RlKCRpbnB1dCkKewpyZXR1cm4gZXNjYXBlc2hlbGxhcmcoJGlucHV0KTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGQoJGJpdCkKewokdGhpcy0+Yml0c1tdID0gJGJpdDsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiB0b3AoJGJpdCkKewphcnJheV91bnNoaWZ0KCR0aGlzLT5iaXRzLCAkYml0KTsKCmZvcmVhY2ggKCR0aGlzLT5sYWJlbHMgYXMgJGxhYmVsID0+ICRpbmRleCkgewokdGhpcy0+bGFiZWxzWyRsYWJlbF0gKz0gMTsKfQoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFyZygkYXJnKQp7CiR0aGlzLT5iaXRzW10gPSBzZWxmOjpxdW90ZSgkYXJnKTsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjbWQoJGVzYykKewokdGhpcy0+Yml0c1tdID0gc2VsZjo6ZXNjYXBlKCRlc2MpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaW5zKCRsYWJlbCkKewppZiAoaXNzZXQoJHRoaXMtPmxhYmVsc1skbGFiZWxdKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignTGFiZWwgIiVzIiBhbHJlYWR5IGV4aXN0cy4nLCAkbGFiZWwpKTsKfQoKJHRoaXMtPmJpdHNbXSA9IHNlbGY6OmNyZWF0ZSgkdGhpcyk7CiR0aGlzLT5sYWJlbHNbJGxhYmVsXSA9IGNvdW50KCR0aGlzLT5iaXRzKS0xOwoKcmV0dXJuICR0aGlzLT5iaXRzWyR0aGlzLT5sYWJlbHNbJGxhYmVsXV07Cn0KCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXQoJGxhYmVsKQp7CmlmICghaXNzZXQoJHRoaXMtPmxhYmVsc1skbGFiZWxdKSkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oc3ByaW50ZignTGFiZWwgIiVzIiBkb2VzIG5vdCBleGlzdC4nLCAkbGFiZWwpKTsKfQoKcmV0dXJuICR0aGlzLT5iaXRzWyR0aGlzLT5sYWJlbHNbJGxhYmVsXV07Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZW5kKCkKewppZiAobnVsbCA9PT0gJHRoaXMtPnBhcmVudCkgewp0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0NhbGxpbmcgZW5kIG9uIHJvb3QgY29tbWFuZCBkb2VzblwndCBtYWtlIHNlbnNlLicpOwp9CgpyZXR1cm4gJHRoaXMtPnBhcmVudDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbGVuZ3RoKCkKewpyZXR1cm4gY291bnQoJHRoaXMtPmJpdHMpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRFcnJvckhhbmRsZXIoXENsb3N1cmUgJGVycm9ySGFuZGxlcikKewokdGhpcy0+ZXJyb3JIYW5kbGVyID0gJGVycm9ySGFuZGxlcjsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEVycm9ySGFuZGxlcigpCnsKcmV0dXJuICR0aGlzLT5lcnJvckhhbmRsZXI7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZXhlY3V0ZSgpCnsKaWYgKG51bGwgPT09ICR0aGlzLT5lcnJvckhhbmRsZXIpIHsKZXhlYygkdGhpcy0+am9pbigpLCAkb3V0cHV0KTsKfSBlbHNlIHsKJHByb2Nlc3MgPSBwcm9jX29wZW4oJHRoaXMtPmpvaW4oKSwgYXJyYXkoMCA9PiBhcnJheSgncGlwZScsICdyJyksIDEgPT4gYXJyYXkoJ3BpcGUnLCAndycpLCAyID0+IGFycmF5KCdwaXBlJywgJ3cnKSksICRwaXBlcyk7CiRvdXRwdXQgPSBwcmVnX3NwbGl0KCd+KFxyXG58XHJ8XG4pficsIHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzFdKSwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpOwoKaWYgKCRlcnJvciA9IHN0cmVhbV9nZXRfY29udGVudHMoJHBpcGVzWzJdKSkgewpjYWxsX3VzZXJfZnVuYygkdGhpcy0+ZXJyb3JIYW5kbGVyLCAkZXJyb3IpOwp9Cgpwcm9jX2Nsb3NlKCRwcm9jZXNzKTsKfQoKcmV0dXJuICRvdXRwdXQgPzogYXJyYXkoKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gam9pbigpCnsKcmV0dXJuIGltcGxvZGUoJyAnLCBhcnJheV9maWx0ZXIoCmFycmF5X21hcChmdW5jdGlvbiAoJGJpdCkgewpyZXR1cm4gJGJpdCBpbnN0YW5jZW9mIENvbW1hbmQgPyAkYml0LT5qb2luKCkgOiAoJGJpdCA/OiBudWxsKTsKfSwgJHRoaXMtPmJpdHMpLApmdW5jdGlvbiAoJGJpdCkgeyByZXR1cm4gbnVsbCAhPT0gJGJpdDsgfQopKTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkQXRJbmRleCgkYml0LCAkaW5kZXgpCnsKYXJyYXlfc3BsaWNlKCR0aGlzLT5iaXRzLCAkaW5kZXgsIDAsICRiaXQpOwoKcmV0dXJuICR0aGlzOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcU2hlbGw7CgoKCgpjbGFzcyBTaGVsbAp7CmNvbnN0IFRZUEVfVU5JWCA9IDE7CmNvbnN0IFRZUEVfREFSV0lOID0gMjsKY29uc3QgVFlQRV9DWUdXSU4gPSAzOwpjb25zdCBUWVBFX1dJTkRPV1MgPSA0Owpjb25zdCBUWVBFX0JTRCA9IDU7CgoKCgpwcml2YXRlICR0eXBlOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCnsKaWYgKG51bGwgPT09ICR0aGlzLT50eXBlKSB7CiR0aGlzLT50eXBlID0gJHRoaXMtPmd1ZXNzVHlwZSgpOwp9CgpyZXR1cm4gJHRoaXMtPnR5cGU7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdGVzdENvbW1hbmQoJGNvbW1hbmQpCnsKaWYgKHNlbGY6OlRZUEVfV0lORE9XUyA9PT0gJHRoaXMtPnR5cGUpIHsKCiByZXR1cm4gZmFsc2U7Cn0KCmlmICghZnVuY3Rpb25fZXhpc3RzKCdleGVjJykpIHsKcmV0dXJuIGZhbHNlOwp9CgoKIGV4ZWMoJ2NvbW1hbmQgLXYgJy4kY29tbWFuZCwgJG91dHB1dCwgJGNvZGUpOwoKcmV0dXJuIDAgPT09ICRjb2RlICYmIGNvdW50KCRvdXRwdXQpID4gMDsKfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGd1ZXNzVHlwZSgpCnsKJG9zID0gc3RydG9sb3dlcihQSFBfT1MpOwoKaWYgKGZhbHNlICE9PSBzdHJwb3MoJG9zLCAnY3lnd2luJykpIHsKcmV0dXJuIHNlbGY6OlRZUEVfQ1lHV0lOOwp9CgppZiAoZmFsc2UgIT09IHN0cnBvcygkb3MsICdkYXJ3aW4nKSkgewpyZXR1cm4gc2VsZjo6VFlQRV9EQVJXSU47Cn0KCmlmIChmYWxzZSAhPT0gc3RycG9zKCRvcywgJ2JzZCcpKSB7CnJldHVybiBzZWxmOjpUWVBFX0JTRDsKfQoKaWYgKDAgPT09IHN0cnBvcygkb3MsICd3aW4nKSkgewpyZXR1cm4gc2VsZjo6VFlQRV9XSU5ET1dTOwp9CgpyZXR1cm4gc2VsZjo6VFlQRV9VTklYOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhwcmVzc2lvbjsKCgoKCmNsYXNzIFJlZ2V4IGltcGxlbWVudHMgVmFsdWVJbnRlcmZhY2UKewpjb25zdCBTVEFSVF9GTEFHID0gJ14nOwpjb25zdCBFTkRfRkxBRyA9ICckJzsKY29uc3QgQk9VTkRBUlkgPSAnfic7CmNvbnN0IEpPS0VSID0gJy4qJzsKY29uc3QgRVNDQVBJTkcgPSAnXFwnOwoKCgoKcHJpdmF0ZSAkcGF0dGVybjsKCgoKCnByaXZhdGUgJG9wdGlvbnM7CgoKCgpwcml2YXRlICRzdGFydEZsYWc7CgoKCgpwcml2YXRlICRlbmRGbGFnOwoKCgoKcHJpdmF0ZSAkc3RhcnRKb2tlcjsKCgoKCnByaXZhdGUgJGVuZEpva2VyOwoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY3JlYXRlKCRleHByKQp7CmlmIChwcmVnX21hdGNoKCcvXiguezMsfT8pKFtpbXN4dUFEVV0qKSQvJywgJGV4cHIsICRtKSkgewokc3RhcnQgPSBzdWJzdHIoJG1bMV0sIDAsIDEpOwokZW5kID0gc3Vic3RyKCRtWzFdLCAtMSk7CgppZiAoKCRzdGFydCA9PT0gJGVuZCAmJiAhcHJlZ19tYXRjaCgnL1sqP1s6YWxudW06XSBcXFxcXS8nLCAkc3RhcnQpKSB8fCAoJHN0YXJ0ID09PSAneycgJiYgJGVuZCA9PT0gJ30nKSkgewpyZXR1cm4gbmV3IHNlbGYoc3Vic3RyKCRtWzFdLCAxLCAtMSksICRtWzJdLCAkZW5kKTsKfQp9Cgp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignR2l2ZW4gZXhwcmVzc2lvbiBpcyBub3QgYSByZWdleC4nKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHBhdHRlcm4sICRvcHRpb25zID0gJycsICRkZWxpbWl0ZXIgPSBudWxsKQp7CmlmIChudWxsICE9PSAkZGVsaW1pdGVyKSB7CgogJHBhdHRlcm4gPSBzdHJfcmVwbGFjZSgnXFwnLiRkZWxpbWl0ZXIsICRkZWxpbWl0ZXIsICRwYXR0ZXJuKTsKfQoKJHRoaXMtPnBhcnNlUGF0dGVybigkcGF0dGVybik7CiR0aGlzLT5vcHRpb25zID0gJG9wdGlvbnM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKewpyZXR1cm4gJHRoaXMtPnJlbmRlcigpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKCkKewpyZXR1cm4gc2VsZjo6Qk9VTkRBUlkKLiR0aGlzLT5yZW5kZXJQYXR0ZXJuKCkKLnNlbGY6OkJPVU5EQVJZCi4kdGhpcy0+b3B0aW9uczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbmRlclBhdHRlcm4oKQp7CnJldHVybiAoJHRoaXMtPnN0YXJ0RmxhZyA/IHNlbGY6OlNUQVJUX0ZMQUcgOiAnJykKLigkdGhpcy0+c3RhcnRKb2tlciA/IHNlbGY6OkpPS0VSIDogJycpCi5zdHJfcmVwbGFjZShzZWxmOjpCT1VOREFSWSwgJ1xcJy5zZWxmOjpCT1VOREFSWSwgJHRoaXMtPnBhdHRlcm4pCi4oJHRoaXMtPmVuZEpva2VyID8gc2VsZjo6Sk9LRVIgOiAnJykKLigkdGhpcy0+ZW5kRmxhZyA/IHNlbGY6OkVORF9GTEFHIDogJycpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNDYXNlU2Vuc2l0aXZlKCkKewpyZXR1cm4gISR0aGlzLT5oYXNPcHRpb24oJ2knKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQp7CnJldHVybiBFeHByZXNzaW9uOjpUWVBFX1JFR0VYOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZCgkZXhwcikKewokdGhpcy0+cGF0dGVybiA9ICRleHByLiR0aGlzLT5wYXR0ZXJuOwoKcmV0dXJuICR0aGlzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCRleHByKQp7CiR0aGlzLT5wYXR0ZXJuIC49ICRleHByOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNPcHRpb24oJG9wdGlvbikKewpyZXR1cm4gZmFsc2UgIT09IHN0cnBvcygkdGhpcy0+b3B0aW9ucywgJG9wdGlvbik7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZE9wdGlvbigkb3B0aW9uKQp7CmlmICghJHRoaXMtPmhhc09wdGlvbigkb3B0aW9uKSkgewokdGhpcy0+b3B0aW9ucy49ICRvcHRpb247Cn0KCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVtb3ZlT3B0aW9uKCRvcHRpb24pCnsKJHRoaXMtPm9wdGlvbnMgPSBzdHJfcmVwbGFjZSgkb3B0aW9uLCAnJywgJHRoaXMtPm9wdGlvbnMpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRTdGFydEZsYWcoJHN0YXJ0RmxhZykKewokdGhpcy0+c3RhcnRGbGFnID0gJHN0YXJ0RmxhZzsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1N0YXJ0RmxhZygpCnsKcmV0dXJuICR0aGlzLT5zdGFydEZsYWc7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEVuZEZsYWcoJGVuZEZsYWcpCnsKJHRoaXMtPmVuZEZsYWcgPSAoYm9vbCkgJGVuZEZsYWc7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNFbmRGbGFnKCkKewpyZXR1cm4gJHRoaXMtPmVuZEZsYWc7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFN0YXJ0Sm9rZXIoJHN0YXJ0Sm9rZXIpCnsKJHRoaXMtPnN0YXJ0Sm9rZXIgPSAkc3RhcnRKb2tlcjsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGhhc1N0YXJ0Sm9rZXIoKQp7CnJldHVybiAkdGhpcy0+c3RhcnRKb2tlcjsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RW5kSm9rZXIoJGVuZEpva2VyKQp7CiR0aGlzLT5lbmRKb2tlciA9IChib29sKSAkZW5kSm9rZXI7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBoYXNFbmRKb2tlcigpCnsKcmV0dXJuICR0aGlzLT5lbmRKb2tlcjsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVwbGFjZUpva2VycygkcmVwbGFjZW1lbnQpCnsKJHJlcGxhY2UgPSBmdW5jdGlvbiAoJHN1YmplY3QpIHVzZSAoJHJlcGxhY2VtZW50KSB7CiRzdWJqZWN0ID0gJHN1YmplY3RbMF07CiRyZXBsYWNlID0gMCA9PT0gc3Vic3RyX2NvdW50KCRzdWJqZWN0LCAnXFwnKSAlIDI7CgpyZXR1cm4gJHJlcGxhY2UgPyBzdHJfcmVwbGFjZSgnLicsICRyZXBsYWNlbWVudCwgJHN1YmplY3QpIDogJHN1YmplY3Q7Cn07CgokdGhpcy0+cGF0dGVybiA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnfltcXFxcXSpcXC5+JywgJHJlcGxhY2UsICR0aGlzLT5wYXR0ZXJuKTsKCnJldHVybiAkdGhpczsKfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBwYXJzZVBhdHRlcm4oJHBhdHRlcm4pCnsKaWYgKCR0aGlzLT5zdGFydEZsYWcgPSBzZWxmOjpTVEFSVF9GTEFHID09PSBzdWJzdHIoJHBhdHRlcm4sIDAsIDEpKSB7CiRwYXR0ZXJuID0gc3Vic3RyKCRwYXR0ZXJuLCAxKTsKfQoKaWYgKCR0aGlzLT5zdGFydEpva2VyID0gc2VsZjo6Sk9LRVIgPT09IHN1YnN0cigkcGF0dGVybiwgMCwgMikpIHsKJHBhdHRlcm4gPSBzdWJzdHIoJHBhdHRlcm4sIDIpOwp9CgppZiAoJHRoaXMtPmVuZEZsYWcgPSAoc2VsZjo6RU5EX0ZMQUcgPT09IHN1YnN0cigkcGF0dGVybiwgLTEpICYmIHNlbGY6OkVTQ0FQSU5HICE9PSBzdWJzdHIoJHBhdHRlcm4sIC0yLCAtMSkpKSB7CiRwYXR0ZXJuID0gc3Vic3RyKCRwYXR0ZXJuLCAwLCAtMSk7Cn0KCmlmICgkdGhpcy0+ZW5kSm9rZXIgPSAoc2VsZjo6Sk9LRVIgPT09IHN1YnN0cigkcGF0dGVybiwgLTIpICYmIHNlbGY6OkVTQ0FQSU5HICE9PSBzdWJzdHIoJHBhdHRlcm4sIC0zLCAtMikpKSB7CiRwYXR0ZXJuID0gc3Vic3RyKCRwYXR0ZXJuLCAwLCAtMik7Cn0KCiR0aGlzLT5wYXR0ZXJuID0gJHBhdHRlcm47Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeHByZXNzaW9uOwoKCgoKY2xhc3MgR2xvYiBpbXBsZW1lbnRzIFZhbHVlSW50ZXJmYWNlCnsKCgoKcHJpdmF0ZSAkcGF0dGVybjsKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGF0dGVybikKewokdGhpcy0+cGF0dGVybiA9ICRwYXR0ZXJuOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVuZGVyKCkKewpyZXR1cm4gJHRoaXMtPnBhdHRlcm47Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZW5kZXJQYXR0ZXJuKCkKewpyZXR1cm4gJHRoaXMtPnBhdHRlcm47Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCkKewpyZXR1cm4gRXhwcmVzc2lvbjo6VFlQRV9HTE9COwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNDYXNlU2Vuc2l0aXZlKCkKewpyZXR1cm4gdHJ1ZTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHByZXBlbmQoJGV4cHIpCnsKJHRoaXMtPnBhdHRlcm4gPSAkZXhwci4kdGhpcy0+cGF0dGVybjsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkZXhwcikKewokdGhpcy0+cGF0dGVybiAuPSAkZXhwcjsKCnJldHVybiAkdGhpczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNFeHBhbmRhYmxlKCkKewpyZXR1cm4gZmFsc2UgIT09IHN0cnBvcygkdGhpcy0+cGF0dGVybiwgJ3snKQomJiBmYWxzZSAhPT0gc3RycG9zKCR0aGlzLT5wYXR0ZXJuLCAnfScpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdG9SZWdleCgkc3RyaWN0TGVhZGluZ0RvdCA9IHRydWUsICRzdHJpY3RXaWxkY2FyZFNsYXNoID0gdHJ1ZSkKewokZmlyc3RCeXRlID0gdHJ1ZTsKJGVzY2FwaW5nID0gZmFsc2U7CiRpbkN1cmxpZXMgPSAwOwokcmVnZXggPSAnJzsKJHNpemVHbG9iID0gc3RybGVuKCR0aGlzLT5wYXR0ZXJuKTsKZm9yICgkaSA9IDA7ICRpIDwgJHNpemVHbG9iOyAkaSsrKSB7CiRjYXIgPSAkdGhpcy0+cGF0dGVyblskaV07CmlmICgkZmlyc3RCeXRlKSB7CmlmICgkc3RyaWN0TGVhZGluZ0RvdCAmJiAnLicgIT09ICRjYXIpIHsKJHJlZ2V4IC49ICcoPz1bXlwuXSknOwp9CgokZmlyc3RCeXRlID0gZmFsc2U7Cn0KCmlmICgnLycgPT09ICRjYXIpIHsKJGZpcnN0Qnl0ZSA9IHRydWU7Cn0KCmlmICgnLicgPT09ICRjYXIgfHwgJygnID09PSAkY2FyIHx8ICcpJyA9PT0gJGNhciB8fCAnfCcgPT09ICRjYXIgfHwgJysnID09PSAkY2FyIHx8ICdeJyA9PT0gJGNhciB8fCAnJCcgPT09ICRjYXIpIHsKJHJlZ2V4IC49ICJcXCRjYXIiOwp9IGVsc2VpZiAoJyonID09PSAkY2FyKSB7CiRyZWdleCAuPSAkZXNjYXBpbmcgPyAnXFwqJyA6ICgkc3RyaWN0V2lsZGNhcmRTbGFzaCA/ICdbXi9dKicgOiAnLionKTsKfSBlbHNlaWYgKCc/JyA9PT0gJGNhcikgewokcmVnZXggLj0gJGVzY2FwaW5nID8gJ1xcPycgOiAoJHN0cmljdFdpbGRjYXJkU2xhc2ggPyAnW14vXScgOiAnLicpOwp9IGVsc2VpZiAoJ3snID09PSAkY2FyKSB7CiRyZWdleCAuPSAkZXNjYXBpbmcgPyAnXFx7JyA6ICcoJzsKaWYgKCEkZXNjYXBpbmcpIHsKKyskaW5DdXJsaWVzOwp9Cn0gZWxzZWlmICgnfScgPT09ICRjYXIgJiYgJGluQ3VybGllcykgewokcmVnZXggLj0gJGVzY2FwaW5nID8gJ30nIDogJyknOwppZiAoISRlc2NhcGluZykgewotLSRpbkN1cmxpZXM7Cn0KfSBlbHNlaWYgKCcsJyA9PT0gJGNhciAmJiAkaW5DdXJsaWVzKSB7CiRyZWdleCAuPSAkZXNjYXBpbmcgPyAnLCcgOiAnfCc7Cn0gZWxzZWlmICgnXFwnID09PSAkY2FyKSB7CmlmICgkZXNjYXBpbmcpIHsKJHJlZ2V4IC49ICdcXFxcJzsKJGVzY2FwaW5nID0gZmFsc2U7Cn0gZWxzZSB7CiRlc2NhcGluZyA9IHRydWU7Cn0KCmNvbnRpbnVlOwp9IGVsc2UgewokcmVnZXggLj0gJGNhcjsKfQokZXNjYXBpbmcgPSBmYWxzZTsKfQoKcmV0dXJuIG5ldyBSZWdleCgnXicuJHJlZ2V4LickJyk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeHByZXNzaW9uOwoKCgoKY2xhc3MgRXhwcmVzc2lvbiBpbXBsZW1lbnRzIFZhbHVlSW50ZXJmYWNlCnsKY29uc3QgVFlQRV9SRUdFWCA9IDE7CmNvbnN0IFRZUEVfR0xPQiA9IDI7CgoKCgpwcml2YXRlICR2YWx1ZTsKCgoKCgoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGUoJGV4cHIpCnsKcmV0dXJuIG5ldyBzZWxmKCRleHByKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRleHByKQp7CnRyeSB7CiR0aGlzLT52YWx1ZSA9IFJlZ2V4OjpjcmVhdGUoJGV4cHIpOwp9IGNhdGNoIChcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uICRlKSB7CiR0aGlzLT52YWx1ZSA9IG5ldyBHbG9iKCRleHByKTsKfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCnsKcmV0dXJuICR0aGlzLT5yZW5kZXIoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbmRlcigpCnsKcmV0dXJuICR0aGlzLT52YWx1ZS0+cmVuZGVyKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiByZW5kZXJQYXR0ZXJuKCkKewpyZXR1cm4gJHRoaXMtPnZhbHVlLT5yZW5kZXJQYXR0ZXJuKCk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc0Nhc2VTZW5zaXRpdmUoKQp7CnJldHVybiAkdGhpcy0+dmFsdWUtPmlzQ2FzZVNlbnNpdGl2ZSgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0VHlwZSgpCnsKcmV0dXJuICR0aGlzLT52YWx1ZS0+Z2V0VHlwZSgpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcHJlcGVuZCgkZXhwcikKewokdGhpcy0+dmFsdWUtPnByZXBlbmQoJGV4cHIpOwoKcmV0dXJuICR0aGlzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYXBwZW5kKCRleHByKQp7CiR0aGlzLT52YWx1ZS0+YXBwZW5kKCRleHByKTsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzUmVnZXgoKQp7CnJldHVybiBzZWxmOjpUWVBFX1JFR0VYID09PSAkdGhpcy0+dmFsdWUtPmdldFR5cGUoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlzR2xvYigpCnsKcmV0dXJuIHNlbGY6OlRZUEVfR0xPQiA9PT0gJHRoaXMtPnZhbHVlLT5nZXRUeXBlKCk7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldEdsb2IoKQp7CmlmIChzZWxmOjpUWVBFX0dMT0IgIT09ICR0aGlzLT52YWx1ZS0+Z2V0VHlwZSgpKSB7CnRocm93IG5ldyBcTG9naWNFeGNlcHRpb24oJ1JlZ2V4IGNhblwndCBiZSB0cmFuc2Zvcm1lZCB0byBnbG9iLicpOwp9CgpyZXR1cm4gJHRoaXMtPnZhbHVlOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0UmVnZXgoKQp7CnJldHVybiBzZWxmOjpUWVBFX1JFR0VYID09PSAkdGhpcy0+dmFsdWUtPmdldFR5cGUoKSA/ICR0aGlzLT52YWx1ZSA6ICR0aGlzLT52YWx1ZS0+dG9SZWdleCgpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhwcmVzc2lvbjsKCgoKCmludGVyZmFjZSBWYWx1ZUludGVyZmFjZQp7CgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlbmRlcigpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVuZGVyUGF0dGVybigpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNDYXNlU2Vuc2l0aXZlKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRUeXBlKCk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBwcmVwZW5kKCRleHByKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFwcGVuZCgkZXhwcik7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcQWRhcHRlcjsKCgoKCmludGVyZmFjZSBBZGFwdGVySW50ZXJmYWNlCnsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Rm9sbG93TGlua3MoJGZvbGxvd0xpbmtzKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE1vZGUoJG1vZGUpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RXhjbHVkZShhcnJheSAkZXhjbHVkZSk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXREZXB0aHMoYXJyYXkgJGRlcHRocyk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXROYW1lcyhhcnJheSAkbmFtZXMpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Tm90TmFtZXMoYXJyYXkgJG5vdE5hbWVzKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldENvbnRhaW5zKGFycmF5ICRjb250YWlucyk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXROb3RDb250YWlucyhhcnJheSAkbm90Q29udGFpbnMpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0U2l6ZXMoYXJyYXkgJHNpemVzKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERhdGVzKGFycmF5ICRkYXRlcyk7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRGaWx0ZXJzKGFycmF5ICRmaWx0ZXJzKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNvcnQoJHNvcnQpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UGF0aChhcnJheSAkcGF0aHMpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Tm90UGF0aChhcnJheSAkbm90UGF0aHMpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaWdub3JlVW5yZWFkYWJsZURpcnMoJGlnbm9yZSA9IHRydWUpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2VhcmNoSW5EaXJlY3RvcnkoJGRpcik7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1N1cHBvcnRlZCgpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0TmFtZSgpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEFkYXB0ZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsXFNoZWxsOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeHByZXNzaW9uXEV4cHJlc3Npb247CgoKCgoKCmNsYXNzIEJzZEZpbmRBZGFwdGVyIGV4dGVuZHMgQWJzdHJhY3RGaW5kQWRhcHRlcgp7CgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJ2JzZF9maW5kJzsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNhbkJlVXNlZCgpCnsKcmV0dXJuIGluX2FycmF5KCR0aGlzLT5zaGVsbC0+Z2V0VHlwZSgpLCBhcnJheShTaGVsbDo6VFlQRV9CU0QsIFNoZWxsOjpUWVBFX0RBUldJTikpICYmIHBhcmVudDo6Y2FuQmVVc2VkKCk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBidWlsZEZvcm1hdFNvcnRpbmcoQ29tbWFuZCAkY29tbWFuZCwgJHNvcnQpCnsKc3dpdGNoICgkc29ydCkgewpjYXNlIFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfTkFNRToKJGNvbW1hbmQtPmlucygnc29ydCcpLT5hZGQoJ3wgc29ydCcpOwoKcmV0dXJuOwpjYXNlIFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfVFlQRToKJGZvcm1hdCA9ICclSFQnOwpicmVhazsKY2FzZSBTb3J0YWJsZUl0ZXJhdG9yOjpTT1JUX0JZX0FDQ0VTU0VEX1RJTUU6CiRmb3JtYXQgPSAnJWEnOwpicmVhazsKY2FzZSBTb3J0YWJsZUl0ZXJhdG9yOjpTT1JUX0JZX0NIQU5HRURfVElNRToKJGZvcm1hdCA9ICclYyc7CmJyZWFrOwpjYXNlIFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfTU9ESUZJRURfVElNRToKJGZvcm1hdCA9ICclbSc7CmJyZWFrOwpkZWZhdWx0Ogp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdVbmtub3duIHNvcnQgb3B0aW9uczogJXMuJywgJHNvcnQpKTsKfQoKJGNvbW1hbmQKLT5hZGQoJy1wcmludDAgfCB4YXJncyAtMCBzdGF0IC1mJykKLT5hcmcoJGZvcm1hdC4nJXQlTicpCi0+YWRkKCd8IHNvcnQgfCBjdXQgLWYgMicpOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRGaW5kQ29tbWFuZChDb21tYW5kICRjb21tYW5kLCAkZGlyKQp7CnBhcmVudDo6YnVpbGRGaW5kQ29tbWFuZCgkY29tbWFuZCwgJGRpciktPmFkZEF0SW5kZXgoJy1FJywgMSk7CgpyZXR1cm4gJGNvbW1hbmQ7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENvbnRlbnRGaWx0ZXJpbmcoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJGNvbnRhaW5zLCAkbm90ID0gZmFsc2UpCnsKZm9yZWFjaCAoJGNvbnRhaW5zIGFzICRjb250YWluKSB7CiRleHByID0gRXhwcmVzc2lvbjo6Y3JlYXRlKCRjb250YWluKTsKCgogJGNvbW1hbmQKLT5hZGQoJ3wgZ3JlcCAtdiBcJ14kXCcnKQotPmFkZCgnfCB4YXJncyAtSXt9IGdyZXAgLUknKQotPmFkZCgkZXhwci0+aXNDYXNlU2Vuc2l0aXZlKCkgPyBudWxsIDogJy1pJykKLT5hZGQoJG5vdCA/ICctTCcgOiAnLWwnKQotPmFkZCgnLUVlJyktPmFyZygkZXhwci0+cmVuZGVyUGF0dGVybigpKQotPmFkZCgne30nKQo7Cn0KfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEFkYXB0ZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsXFNoZWxsOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsXENvbW1hbmQ7CnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeHByZXNzaW9uXEV4cHJlc3Npb247CgoKCgoKCmNsYXNzIEdudUZpbmRBZGFwdGVyIGV4dGVuZHMgQWJzdHJhY3RGaW5kQWRhcHRlcgp7CgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJ2dudV9maW5kJzsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRm9ybWF0U29ydGluZyhDb21tYW5kICRjb21tYW5kLCAkc29ydCkKewpzd2l0Y2ggKCRzb3J0KSB7CmNhc2UgU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9OQU1FOgokY29tbWFuZC0+aW5zKCdzb3J0JyktPmFkZCgnfCBzb3J0Jyk7CgpyZXR1cm47CmNhc2UgU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9UWVBFOgokZm9ybWF0ID0gJyV5JzsKYnJlYWs7CmNhc2UgU29ydGFibGVJdGVyYXRvcjo6U09SVF9CWV9BQ0NFU1NFRF9USU1FOgokZm9ybWF0ID0gJyVBQCc7CmJyZWFrOwpjYXNlIFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfQ0hBTkdFRF9USU1FOgokZm9ybWF0ID0gJyVDQCc7CmJyZWFrOwpjYXNlIFNvcnRhYmxlSXRlcmF0b3I6OlNPUlRfQllfTU9ESUZJRURfVElNRToKJGZvcm1hdCA9ICclVEAnOwpicmVhazsKZGVmYXVsdDoKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignVW5rbm93biBzb3J0IG9wdGlvbnM6ICVzLicsICRzb3J0KSk7Cn0KCiRjb21tYW5kCi0+Z2V0KCdmaW5kJykKLT5hZGQoJy1wcmludGYnKQotPmFyZygkZm9ybWF0LicgJWgvJWZcXG4nKQotPmFkZCgnfCBzb3J0IHwgY3V0JykKLT5hcmcoJy1kICcpCi0+YXJnKCctZjItJykKOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2FuQmVVc2VkKCkKewpyZXR1cm4gJHRoaXMtPnNoZWxsLT5nZXRUeXBlKCkgPT09IFNoZWxsOjpUWVBFX1VOSVggJiYgcGFyZW50OjpjYW5CZVVzZWQoKTsKfQoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRmluZENvbW1hbmQoQ29tbWFuZCAkY29tbWFuZCwgJGRpcikKewpyZXR1cm4gcGFyZW50OjpidWlsZEZpbmRDb21tYW5kKCRjb21tYW5kLCAkZGlyKS0+YWRkKCctcmVnZXh0eXBlIHBvc2l4LWV4dGVuZGVkJyk7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENvbnRlbnRGaWx0ZXJpbmcoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJGNvbnRhaW5zLCAkbm90ID0gZmFsc2UpCnsKZm9yZWFjaCAoJGNvbnRhaW5zIGFzICRjb250YWluKSB7CiRleHByID0gRXhwcmVzc2lvbjo6Y3JlYXRlKCRjb250YWluKTsKCgogJGNvbW1hbmQKLT5hZGQoJ3wgeGFyZ3MgLUl7fSAtciBncmVwIC1JJykKLT5hZGQoJGV4cHItPmlzQ2FzZVNlbnNpdGl2ZSgpID8gbnVsbCA6ICctaScpCi0+YWRkKCRub3QgPyAnLUwnIDogJy1sJykKLT5hZGQoJy1FZScpLT5hcmcoJGV4cHItPnJlbmRlclBhdHRlcm4oKSkKLT5hZGQoJ3t9JykKOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyOwoKCgoKCgphYnN0cmFjdCBjbGFzcyBBYnN0cmFjdEFkYXB0ZXIgaW1wbGVtZW50cyBBZGFwdGVySW50ZXJmYWNlCnsKcHJvdGVjdGVkICRmb2xsb3dMaW5rcyA9IGZhbHNlOwpwcm90ZWN0ZWQgJG1vZGUgPSAwOwpwcm90ZWN0ZWQgJG1pbkRlcHRoID0gMDsKcHJvdGVjdGVkICRtYXhEZXB0aCA9IFBIUF9JTlRfTUFYOwpwcm90ZWN0ZWQgJGV4Y2x1ZGUgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJG5hbWVzID0gYXJyYXkoKTsKcHJvdGVjdGVkICRub3ROYW1lcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkY29udGFpbnMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJG5vdENvbnRhaW5zID0gYXJyYXkoKTsKcHJvdGVjdGVkICRzaXplcyA9IGFycmF5KCk7CnByb3RlY3RlZCAkZGF0ZXMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJGZpbHRlcnMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJHNvcnQgPSBmYWxzZTsKcHJvdGVjdGVkICRwYXRocyA9IGFycmF5KCk7CnByb3RlY3RlZCAkbm90UGF0aHMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJGlnbm9yZVVucmVhZGFibGVEaXJzID0gZmFsc2U7Cgpwcml2YXRlIHN0YXRpYyAkYXJlU3VwcG9ydGVkID0gYXJyYXkoKTsKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1N1cHBvcnRlZCgpCnsKJG5hbWUgPSAkdGhpcy0+Z2V0TmFtZSgpOwoKaWYgKCFhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCBzZWxmOjokYXJlU3VwcG9ydGVkKSkgewpzZWxmOjokYXJlU3VwcG9ydGVkWyRuYW1lXSA9ICR0aGlzLT5jYW5CZVVzZWQoKTsKfQoKcmV0dXJuIHNlbGY6OiRhcmVTdXBwb3J0ZWRbJG5hbWVdOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Rm9sbG93TGlua3MoJGZvbGxvd0xpbmtzKQp7CiR0aGlzLT5mb2xsb3dMaW5rcyA9ICRmb2xsb3dMaW5rczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE1vZGUoJG1vZGUpCnsKJHRoaXMtPm1vZGUgPSAkbW9kZTsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldERlcHRocyhhcnJheSAkZGVwdGhzKQp7CiR0aGlzLT5taW5EZXB0aCA9IDA7CiR0aGlzLT5tYXhEZXB0aCA9IFBIUF9JTlRfTUFYOwoKZm9yZWFjaCAoJGRlcHRocyBhcyAkY29tcGFyYXRvcikgewpzd2l0Y2ggKCRjb21wYXJhdG9yLT5nZXRPcGVyYXRvcigpKSB7CmNhc2UgJz4nOgokdGhpcy0+bWluRGVwdGggPSAkY29tcGFyYXRvci0+Z2V0VGFyZ2V0KCkgKyAxOwpicmVhazsKY2FzZSAnPj0nOgokdGhpcy0+bWluRGVwdGggPSAkY29tcGFyYXRvci0+Z2V0VGFyZ2V0KCk7CmJyZWFrOwpjYXNlICc8JzoKJHRoaXMtPm1heERlcHRoID0gJGNvbXBhcmF0b3ItPmdldFRhcmdldCgpIC0gMTsKYnJlYWs7CmNhc2UgJzw9JzoKJHRoaXMtPm1heERlcHRoID0gJGNvbXBhcmF0b3ItPmdldFRhcmdldCgpOwpicmVhazsKZGVmYXVsdDoKJHRoaXMtPm1pbkRlcHRoID0gJHRoaXMtPm1heERlcHRoID0gJGNvbXBhcmF0b3ItPmdldFRhcmdldCgpOwp9Cn0KCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEV4Y2x1ZGUoYXJyYXkgJGV4Y2x1ZGUpCnsKJHRoaXMtPmV4Y2x1ZGUgPSAkZXhjbHVkZTsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE5hbWVzKGFycmF5ICRuYW1lcykKewokdGhpcy0+bmFtZXMgPSAkbmFtZXM7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXROb3ROYW1lcyhhcnJheSAkbm90TmFtZXMpCnsKJHRoaXMtPm5vdE5hbWVzID0gJG5vdE5hbWVzOwoKcmV0dXJuICR0aGlzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0Q29udGFpbnMoYXJyYXkgJGNvbnRhaW5zKQp7CiR0aGlzLT5jb250YWlucyA9ICRjb250YWluczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE5vdENvbnRhaW5zKGFycmF5ICRub3RDb250YWlucykKewokdGhpcy0+bm90Q29udGFpbnMgPSAkbm90Q29udGFpbnM7CgpyZXR1cm4gJHRoaXM7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRTaXplcyhhcnJheSAkc2l6ZXMpCnsKJHRoaXMtPnNpemVzID0gJHNpemVzOwoKcmV0dXJuICR0aGlzOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0RGF0ZXMoYXJyYXkgJGRhdGVzKQp7CiR0aGlzLT5kYXRlcyA9ICRkYXRlczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldEZpbHRlcnMoYXJyYXkgJGZpbHRlcnMpCnsKJHRoaXMtPmZpbHRlcnMgPSAkZmlsdGVyczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFNvcnQoJHNvcnQpCnsKJHRoaXMtPnNvcnQgPSAkc29ydDsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFBhdGgoYXJyYXkgJHBhdGhzKQp7CiR0aGlzLT5wYXRocyA9ICRwYXRoczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNldE5vdFBhdGgoYXJyYXkgJG5vdFBhdGhzKQp7CiR0aGlzLT5ub3RQYXRocyA9ICRub3RQYXRoczsKCnJldHVybiAkdGhpczsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGlnbm9yZVVucmVhZGFibGVEaXJzKCRpZ25vcmUgPSB0cnVlKQp7CiR0aGlzLT5pZ25vcmVVbnJlYWRhYmxlRGlycyA9IChCb29sZWFuKSAkaWdub3JlOwoKcmV0dXJuICR0aGlzOwp9CgoKCgoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBjYW5CZVVzZWQoKTsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeGNlcHRpb25cQWNjZXNzRGVuaWVkRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNoZWxsXFNoZWxsOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEV4cHJlc3Npb25cRXhwcmVzc2lvbjsKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxTaGVsbFxDb21tYW5kOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yXFNvcnRhYmxlSXRlcmF0b3I7CnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcQ29tcGFyYXRvclxOdW1iZXJDb21wYXJhdG9yOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXENvbXBhcmF0b3JcRGF0ZUNvbXBhcmF0b3I7CgoKCgoKCmFic3RyYWN0IGNsYXNzIEFic3RyYWN0RmluZEFkYXB0ZXIgZXh0ZW5kcyBBYnN0cmFjdEFkYXB0ZXIKewoKCgpwcm90ZWN0ZWQgJHNoZWxsOwoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKewokdGhpcy0+c2hlbGwgPSBuZXcgU2hlbGwoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIHNlYXJjaEluRGlyZWN0b3J5KCRkaXIpCnsKCiAkZGlyID0gcmVhbHBhdGgoJGRpcik7CgoKIGlmIChJdGVyYXRvclxGaWxlVHlwZUZpbHRlckl0ZXJhdG9yOjpPTkxZX0RJUkVDVE9SSUVTID09PSAkdGhpcy0+bW9kZSAmJiAoJHRoaXMtPmNvbnRhaW5zIHx8ICR0aGlzLT5ub3RDb250YWlucykpIHsKcmV0dXJuIG5ldyBJdGVyYXRvclxGaWxlUGF0aHNJdGVyYXRvcihhcnJheSgpLCAkZGlyKTsKfQoKJGNvbW1hbmQgPSBDb21tYW5kOjpjcmVhdGUoKTsKJGZpbmQgPSAkdGhpcy0+YnVpbGRGaW5kQ29tbWFuZCgkY29tbWFuZCwgJGRpcik7CgppZiAoJHRoaXMtPmZvbGxvd0xpbmtzKSB7CiRmaW5kLT5hZGQoJy1mb2xsb3cnKTsKfQoKJGZpbmQtPmFkZCgnLW1pbmRlcHRoJyktPmFkZCgkdGhpcy0+bWluRGVwdGggKyAxKTsKCmlmIChQSFBfSU5UX01BWCAhPT0gJHRoaXMtPm1heERlcHRoKSB7CiRmaW5kLT5hZGQoJy1tYXhkZXB0aCcpLT5hZGQoJHRoaXMtPm1heERlcHRoICsgMSk7Cn0KCmlmIChJdGVyYXRvclxGaWxlVHlwZUZpbHRlckl0ZXJhdG9yOjpPTkxZX0RJUkVDVE9SSUVTID09PSAkdGhpcy0+bW9kZSkgewokZmluZC0+YWRkKCctdHlwZSBkJyk7Cn0gZWxzZWlmIChJdGVyYXRvclxGaWxlVHlwZUZpbHRlckl0ZXJhdG9yOjpPTkxZX0ZJTEVTID09PSAkdGhpcy0+bW9kZSkgewokZmluZC0+YWRkKCctdHlwZSBmJyk7Cn0KCiR0aGlzLT5idWlsZE5hbWVzRmlsdGVyaW5nKCRmaW5kLCAkdGhpcy0+bmFtZXMpOwokdGhpcy0+YnVpbGROYW1lc0ZpbHRlcmluZygkZmluZCwgJHRoaXMtPm5vdE5hbWVzLCB0cnVlKTsKJHRoaXMtPmJ1aWxkUGF0aHNGaWx0ZXJpbmcoJGZpbmQsICRkaXIsICR0aGlzLT5wYXRocyk7CiR0aGlzLT5idWlsZFBhdGhzRmlsdGVyaW5nKCRmaW5kLCAkZGlyLCAkdGhpcy0+bm90UGF0aHMsIHRydWUpOwokdGhpcy0+YnVpbGRTaXplc0ZpbHRlcmluZygkZmluZCwgJHRoaXMtPnNpemVzKTsKJHRoaXMtPmJ1aWxkRGF0ZXNGaWx0ZXJpbmcoJGZpbmQsICR0aGlzLT5kYXRlcyk7CgokdXNlR3JlcCA9ICR0aGlzLT5zaGVsbC0+dGVzdENvbW1hbmQoJ2dyZXAnKSAmJiAkdGhpcy0+c2hlbGwtPnRlc3RDb21tYW5kKCd4YXJncycpOwokdXNlU29ydCA9IGlzX2ludCgkdGhpcy0+c29ydCkgJiYgJHRoaXMtPnNoZWxsLT50ZXN0Q29tbWFuZCgnc29ydCcpICYmICR0aGlzLT5zaGVsbC0+dGVzdENvbW1hbmQoJ2N1dCcpOwoKaWYgKCR1c2VHcmVwICYmICgkdGhpcy0+Y29udGFpbnMgfHwgJHRoaXMtPm5vdENvbnRhaW5zKSkgewokZ3JlcCA9ICRjb21tYW5kLT5pbnMoJ2dyZXAnKTsKJHRoaXMtPmJ1aWxkQ29udGVudEZpbHRlcmluZygkZ3JlcCwgJHRoaXMtPmNvbnRhaW5zKTsKJHRoaXMtPmJ1aWxkQ29udGVudEZpbHRlcmluZygkZ3JlcCwgJHRoaXMtPm5vdENvbnRhaW5zLCB0cnVlKTsKfQoKaWYgKCR1c2VTb3J0KSB7CiR0aGlzLT5idWlsZFNvcnRpbmcoJGNvbW1hbmQsICR0aGlzLT5zb3J0KTsKfQoKJGNvbW1hbmQtPnNldEVycm9ySGFuZGxlcigKJHRoaXMtPmlnbm9yZVVucmVhZGFibGVEaXJzCgogPyBmdW5jdGlvbiAoJHN0ZGVycikgeyByZXR1cm47IH0KOiBmdW5jdGlvbiAoJHN0ZGVycikgeyB0aHJvdyBuZXcgQWNjZXNzRGVuaWVkRXhjZXB0aW9uKCRzdGRlcnIpOyB9Cik7CgokcGF0aHMgPSAkdGhpcy0+c2hlbGwtPnRlc3RDb21tYW5kKCd1bmlxJykgPyAkY29tbWFuZC0+YWRkKCd8IHVuaXEnKS0+ZXhlY3V0ZSgpIDogYXJyYXlfdW5pcXVlKCRjb21tYW5kLT5leGVjdXRlKCkpOwokaXRlcmF0b3IgPSBuZXcgSXRlcmF0b3JcRmlsZVBhdGhzSXRlcmF0b3IoJHBhdGhzLCAkZGlyKTsKCmlmICgkdGhpcy0+ZXhjbHVkZSkgewokaXRlcmF0b3IgPSBuZXcgSXRlcmF0b3JcRXhjbHVkZURpcmVjdG9yeUZpbHRlckl0ZXJhdG9yKCRpdGVyYXRvciwgJHRoaXMtPmV4Y2x1ZGUpOwp9CgppZiAoISR1c2VHcmVwICYmICgkdGhpcy0+Y29udGFpbnMgfHwgJHRoaXMtPm5vdENvbnRhaW5zKSkgewokaXRlcmF0b3IgPSBuZXcgSXRlcmF0b3JcRmlsZWNvbnRlbnRGaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5jb250YWlucywgJHRoaXMtPm5vdENvbnRhaW5zKTsKfQoKaWYgKCR0aGlzLT5maWx0ZXJzKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxDdXN0b21GaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5maWx0ZXJzKTsKfQoKaWYgKCEkdXNlU29ydCAmJiAkdGhpcy0+c29ydCkgewokaXRlcmF0b3JBZ2dyZWdhdGUgPSBuZXcgSXRlcmF0b3JcU29ydGFibGVJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5zb3J0KTsKJGl0ZXJhdG9yID0gJGl0ZXJhdG9yQWdncmVnYXRlLT5nZXRJdGVyYXRvcigpOwp9CgpyZXR1cm4gJGl0ZXJhdG9yOwp9CgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2FuQmVVc2VkKCkKewpyZXR1cm4gJHRoaXMtPnNoZWxsLT50ZXN0Q29tbWFuZCgnZmluZCcpOwp9CgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gYnVpbGRGaW5kQ29tbWFuZChDb21tYW5kICRjb21tYW5kLCAkZGlyKQp7CnJldHVybiAkY29tbWFuZAotPmlucygnZmluZCcpCi0+YWRkKCdmaW5kICcpCi0+YXJnKCRkaXIpCi0+YWRkKCctbm9sZWFmJyk7IAogfQoKCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkTmFtZXNGaWx0ZXJpbmcoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJG5hbWVzLCAkbm90ID0gZmFsc2UpCnsKaWYgKDAgPT09IGNvdW50KCRuYW1lcykpIHsKcmV0dXJuOwp9CgokY29tbWFuZC0+YWRkKCRub3QgPyAnLW5vdCcgOiBudWxsKS0+Y21kKCcoJyk7Cgpmb3JlYWNoICgkbmFtZXMgYXMgJGkgPT4gJG5hbWUpIHsKJGV4cHIgPSBFeHByZXNzaW9uOjpjcmVhdGUoJG5hbWUpOwoKCiBpZiAoJGV4cHItPmlzR2xvYigpICYmICRleHByLT5nZXRHbG9iKCktPmlzRXhwYW5kYWJsZSgpKSB7CiRleHByID0gRXhwcmVzc2lvbjo6Y3JlYXRlKCRleHByLT5nZXRHbG9iKCktPnRvUmVnZXgoZmFsc2UpKTsKfQoKCiAKIAogaWYgKCRleHByLT5pc1JlZ2V4KCkpIHsKJHJlZ2V4ID0gJGV4cHItPmdldFJlZ2V4KCk7CiRyZWdleC0+cHJlcGVuZCgkcmVnZXgtPmhhc1N0YXJ0RmxhZygpID8gJy8nIDogJy9bXi9dKicpCi0+c2V0U3RhcnRGbGFnKGZhbHNlKQotPnNldFN0YXJ0Sm9rZXIodHJ1ZSkKLT5yZXBsYWNlSm9rZXJzKCdbXi9dJyk7CmlmICghJHJlZ2V4LT5oYXNFbmRGbGFnKCkgfHwgJHJlZ2V4LT5oYXNFbmRKb2tlcigpKSB7CiRyZWdleC0+c2V0RW5kSm9rZXIoZmFsc2UpLT5hcHBlbmQoJ1teL10qJyk7Cn0KfQoKJGNvbW1hbmQKLT5hZGQoJGkgPiAwID8gJy1vcicgOiBudWxsKQotPmFkZCgkZXhwci0+aXNSZWdleCgpCj8gKCRleHByLT5pc0Nhc2VTZW5zaXRpdmUoKSA/ICctcmVnZXgnIDogJy1pcmVnZXgnKQo6ICgkZXhwci0+aXNDYXNlU2Vuc2l0aXZlKCkgPyAnLW5hbWUnIDogJy1pbmFtZScpCikKLT5hcmcoJGV4cHItPnJlbmRlclBhdHRlcm4oKSk7Cn0KCiRjb21tYW5kLT5jbWQoJyknKTsKfQoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFBhdGhzRmlsdGVyaW5nKENvbW1hbmQgJGNvbW1hbmQsICRkaXIsIGFycmF5ICRwYXRocywgJG5vdCA9IGZhbHNlKQp7CmlmICgwID09PSBjb3VudCgkcGF0aHMpKSB7CnJldHVybjsKfQoKJGNvbW1hbmQtPmFkZCgkbm90ID8gJy1ub3QnIDogbnVsbCktPmNtZCgnKCcpOwoKZm9yZWFjaCAoJHBhdGhzIGFzICRpID0+ICRwYXRoKSB7CiRleHByID0gRXhwcmVzc2lvbjo6Y3JlYXRlKCRwYXRoKTsKCgogaWYgKCRleHByLT5pc0dsb2IoKSAmJiAkZXhwci0+Z2V0R2xvYigpLT5pc0V4cGFuZGFibGUoKSkgewokZXhwciA9IEV4cHJlc3Npb246OmNyZWF0ZSgkZXhwci0+Z2V0R2xvYigpLT50b1JlZ2V4KGZhbHNlKSk7Cn0KCgogaWYgKCRleHByLT5pc1JlZ2V4KCkpIHsKJHJlZ2V4ID0gJGV4cHItPmdldFJlZ2V4KCk7CiRyZWdleC0+cHJlcGVuZCgkcmVnZXgtPmhhc1N0YXJ0RmxhZygpID8gJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SIDogJy4qJyktPnNldEVuZEpva2VyKCEkcmVnZXgtPmhhc0VuZEZsYWcoKSk7Cn0gZWxzZSB7CiRleHByLT5wcmVwZW5kKCcqJyktPmFwcGVuZCgnKicpOwp9CgokY29tbWFuZAotPmFkZCgkaSA+IDAgPyAnLW9yJyA6IG51bGwpCi0+YWRkKCRleHByLT5pc1JlZ2V4KCkKPyAoJGV4cHItPmlzQ2FzZVNlbnNpdGl2ZSgpID8gJy1yZWdleCcgOiAnLWlyZWdleCcpCjogKCRleHByLT5pc0Nhc2VTZW5zaXRpdmUoKSA/ICctcGF0aCcgOiAnLWlwYXRoJykKKQotPmFyZygkZXhwci0+cmVuZGVyUGF0dGVybigpKTsKfQoKJGNvbW1hbmQtPmNtZCgnKScpOwp9CgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFNpemVzRmlsdGVyaW5nKENvbW1hbmQgJGNvbW1hbmQsIGFycmF5ICRzaXplcykKewpmb3JlYWNoICgkc2l6ZXMgYXMgJGkgPT4gJHNpemUpIHsKJGNvbW1hbmQtPmFkZCgkaSA+IDAgPyAnLWFuZCcgOiBudWxsKTsKCnN3aXRjaCAoJHNpemUtPmdldE9wZXJhdG9yKCkpIHsKY2FzZSAnPD0nOgokY29tbWFuZC0+YWRkKCctc2l6ZSAtJy4oJHNpemUtPmdldFRhcmdldCgpICsgMSkuJ2MnKTsKYnJlYWs7CmNhc2UgJz49JzoKJGNvbW1hbmQtPmFkZCgnLXNpemUgKycuICgkc2l6ZS0+Z2V0VGFyZ2V0KCkgLSAxKS4nYycpOwpicmVhazsKY2FzZSAnPic6CiRjb21tYW5kLT5hZGQoJy1zaXplICsnLiRzaXplLT5nZXRUYXJnZXQoKS4nYycpOwpicmVhazsKY2FzZSAnIT0nOgokY29tbWFuZC0+YWRkKCctc2l6ZSAtJy4kc2l6ZS0+Z2V0VGFyZ2V0KCkuJ2MnKTsKJGNvbW1hbmQtPmFkZCgnLXNpemUgKycuJHNpemUtPmdldFRhcmdldCgpLidjJyk7CmNhc2UgJzwnOgpkZWZhdWx0OgokY29tbWFuZC0+YWRkKCctc2l6ZSAtJy4kc2l6ZS0+Z2V0VGFyZ2V0KCkuJ2MnKTsKfQp9Cn0KCgoKCgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkRGF0ZXNGaWx0ZXJpbmcoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJGRhdGVzKQp7CmZvcmVhY2ggKCRkYXRlcyBhcyAkaSA9PiAkZGF0ZSkgewokY29tbWFuZC0+YWRkKCRpID4gMCA/ICctYW5kJyA6IG51bGwpOwoKJG1pbnMgPSAoaW50KSByb3VuZCgodGltZSgpLSRkYXRlLT5nZXRUYXJnZXQoKSkgLyA2MCk7CgppZiAoMCA+ICRtaW5zKSB7CgogJGNvbW1hbmQtPmFkZCgnIC1tbWluIC0wJyk7CgogcmV0dXJuOwp9Cgpzd2l0Y2ggKCRkYXRlLT5nZXRPcGVyYXRvcigpKSB7CmNhc2UgJzw9JzoKJGNvbW1hbmQtPmFkZCgnLW1taW4gKycuKCRtaW5zIC0gMSkpOwpicmVhazsKY2FzZSAnPj0nOgokY29tbWFuZC0+YWRkKCctbW1pbiAtJy4oJG1pbnMgKyAxKSk7CmJyZWFrOwpjYXNlICc+JzoKJGNvbW1hbmQtPmFkZCgnLW1taW4gLScuJG1pbnMpOwpicmVhazsKY2FzZSAnIT0nOgokY29tbWFuZC0+YWRkKCctbW1pbiArJy4kbWlucy4nIC1vciAtbW1pbiAtJy4kbWlucyk7CmJyZWFrOwpjYXNlICc8JzoKZGVmYXVsdDoKJGNvbW1hbmQtPmFkZCgnLW1taW4gKycuJG1pbnMpOwp9Cn0KfQoKCgoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBidWlsZFNvcnRpbmcoQ29tbWFuZCAkY29tbWFuZCwgJHNvcnQpCnsKJHRoaXMtPmJ1aWxkRm9ybWF0U29ydGluZygkY29tbWFuZCwgJHNvcnQpOwp9CgoKCgoKYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRm9ybWF0U29ydGluZyhDb21tYW5kICRjb21tYW5kLCAkc29ydCk7CgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZENvbnRlbnRGaWx0ZXJpbmcoQ29tbWFuZCAkY29tbWFuZCwgYXJyYXkgJGNvbnRhaW5zLCAkbm90ID0gZmFsc2UpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEFkYXB0ZXI7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgpjbGFzcyBQaHBBZGFwdGVyIGV4dGVuZHMgQWJzdHJhY3RBZGFwdGVyCnsKCgoKcHVibGljIGZ1bmN0aW9uIHNlYXJjaEluRGlyZWN0b3J5KCRkaXIpCnsKJGZsYWdzID0gXFJlY3Vyc2l2ZURpcmVjdG9yeUl0ZXJhdG9yOjpTS0lQX0RPVFM7CgppZiAoJHRoaXMtPmZvbGxvd0xpbmtzKSB7CiRmbGFncyB8PSBcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3I6OkZPTExPV19TWU1MSU5LUzsKfQoKJGl0ZXJhdG9yID0gbmV3IFxSZWN1cnNpdmVJdGVyYXRvckl0ZXJhdG9yKApuZXcgSXRlcmF0b3JcUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGRpciwgJGZsYWdzLCAkdGhpcy0+aWdub3JlVW5yZWFkYWJsZURpcnMpLApcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcjo6U0VMRl9GSVJTVAopOwoKaWYgKCR0aGlzLT5taW5EZXB0aCA+IDAgfHwgJHRoaXMtPm1heERlcHRoIDwgUEhQX0lOVF9NQVgpIHsKJGl0ZXJhdG9yID0gbmV3IEl0ZXJhdG9yXERlcHRoUmFuZ2VGaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5taW5EZXB0aCwgJHRoaXMtPm1heERlcHRoKTsKfQoKaWYgKCR0aGlzLT5tb2RlKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxGaWxlVHlwZUZpbHRlckl0ZXJhdG9yKCRpdGVyYXRvciwgJHRoaXMtPm1vZGUpOwp9CgppZiAoJHRoaXMtPmV4Y2x1ZGUpIHsKJGl0ZXJhdG9yID0gbmV3IEl0ZXJhdG9yXEV4Y2x1ZGVEaXJlY3RvcnlGaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5leGNsdWRlKTsKfQoKaWYgKCR0aGlzLT5uYW1lcyB8fCAkdGhpcy0+bm90TmFtZXMpIHsKJGl0ZXJhdG9yID0gbmV3IEl0ZXJhdG9yXEZpbGVuYW1lRmlsdGVySXRlcmF0b3IoJGl0ZXJhdG9yLCAkdGhpcy0+bmFtZXMsICR0aGlzLT5ub3ROYW1lcyk7Cn0KCmlmICgkdGhpcy0+Y29udGFpbnMgfHwgJHRoaXMtPm5vdENvbnRhaW5zKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxGaWxlY29udGVudEZpbHRlckl0ZXJhdG9yKCRpdGVyYXRvciwgJHRoaXMtPmNvbnRhaW5zLCAkdGhpcy0+bm90Q29udGFpbnMpOwp9CgppZiAoJHRoaXMtPnNpemVzKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxTaXplUmFuZ2VGaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5zaXplcyk7Cn0KCmlmICgkdGhpcy0+ZGF0ZXMpIHsKJGl0ZXJhdG9yID0gbmV3IEl0ZXJhdG9yXERhdGVSYW5nZUZpbHRlckl0ZXJhdG9yKCRpdGVyYXRvciwgJHRoaXMtPmRhdGVzKTsKfQoKaWYgKCR0aGlzLT5maWx0ZXJzKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxDdXN0b21GaWx0ZXJJdGVyYXRvcigkaXRlcmF0b3IsICR0aGlzLT5maWx0ZXJzKTsKfQoKaWYgKCR0aGlzLT5zb3J0KSB7CiRpdGVyYXRvckFnZ3JlZ2F0ZSA9IG5ldyBJdGVyYXRvclxTb3J0YWJsZUl0ZXJhdG9yKCRpdGVyYXRvciwgJHRoaXMtPnNvcnQpOwokaXRlcmF0b3IgPSAkaXRlcmF0b3JBZ2dyZWdhdGUtPmdldEl0ZXJhdG9yKCk7Cn0KCmlmICgkdGhpcy0+cGF0aHMgfHwgJHRoaXMtPm5vdFBhdGhzKSB7CiRpdGVyYXRvciA9IG5ldyBJdGVyYXRvclxQYXRoRmlsdGVySXRlcmF0b3IoJGl0ZXJhdG9yLCAkdGhpcy0+cGF0aHMsICR0aGlzLT5ub3RQYXRocyk7Cn0KCnJldHVybiAkaXRlcmF0b3I7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKewpyZXR1cm4gJ3BocCc7Cn0KCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjYW5CZVVzZWQoKQp7CnJldHVybiB0cnVlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXI7CgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKY2xhc3MgR2xvYgp7CgoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdG9SZWdleCgkZ2xvYiwgJHN0cmljdExlYWRpbmdEb3QgPSB0cnVlLCAkc3RyaWN0V2lsZGNhcmRTbGFzaCA9IHRydWUpCnsKJGZpcnN0Qnl0ZSA9IHRydWU7CiRlc2NhcGluZyA9IGZhbHNlOwokaW5DdXJsaWVzID0gMDsKJHJlZ2V4ID0gJyc7CiRzaXplR2xvYiA9IHN0cmxlbigkZ2xvYik7CmZvciAoJGkgPSAwOyAkaSA8ICRzaXplR2xvYjsgJGkrKykgewokY2FyID0gJGdsb2JbJGldOwppZiAoJGZpcnN0Qnl0ZSkgewppZiAoJHN0cmljdExlYWRpbmdEb3QgJiYgJy4nICE9PSAkY2FyKSB7CiRyZWdleCAuPSAnKD89W15cLl0pJzsKfQoKJGZpcnN0Qnl0ZSA9IGZhbHNlOwp9CgppZiAoJy8nID09PSAkY2FyKSB7CiRmaXJzdEJ5dGUgPSB0cnVlOwp9CgppZiAoJy4nID09PSAkY2FyIHx8ICcoJyA9PT0gJGNhciB8fCAnKScgPT09ICRjYXIgfHwgJ3wnID09PSAkY2FyIHx8ICcrJyA9PT0gJGNhciB8fCAnXicgPT09ICRjYXIgfHwgJyQnID09PSAkY2FyKSB7CiRyZWdleCAuPSAiXFwkY2FyIjsKfSBlbHNlaWYgKCcqJyA9PT0gJGNhcikgewokcmVnZXggLj0gJGVzY2FwaW5nID8gJ1xcKicgOiAoJHN0cmljdFdpbGRjYXJkU2xhc2ggPyAnW14vXSonIDogJy4qJyk7Cn0gZWxzZWlmICgnPycgPT09ICRjYXIpIHsKJHJlZ2V4IC49ICRlc2NhcGluZyA/ICdcXD8nIDogKCRzdHJpY3RXaWxkY2FyZFNsYXNoID8gJ1teL10nIDogJy4nKTsKfSBlbHNlaWYgKCd7JyA9PT0gJGNhcikgewokcmVnZXggLj0gJGVzY2FwaW5nID8gJ1xceycgOiAnKCc7CmlmICghJGVzY2FwaW5nKSB7CisrJGluQ3VybGllczsKfQp9IGVsc2VpZiAoJ30nID09PSAkY2FyICYmICRpbkN1cmxpZXMpIHsKJHJlZ2V4IC49ICRlc2NhcGluZyA/ICd9JyA6ICcpJzsKaWYgKCEkZXNjYXBpbmcpIHsKLS0kaW5DdXJsaWVzOwp9Cn0gZWxzZWlmICgnLCcgPT09ICRjYXIgJiYgJGluQ3VybGllcykgewokcmVnZXggLj0gJGVzY2FwaW5nID8gJywnIDogJ3wnOwp9IGVsc2VpZiAoJ1xcJyA9PT0gJGNhcikgewppZiAoJGVzY2FwaW5nKSB7CiRyZWdleCAuPSAnXFxcXCc7CiRlc2NhcGluZyA9IGZhbHNlOwp9IGVsc2UgewokZXNjYXBpbmcgPSB0cnVlOwp9Cgpjb250aW51ZTsKfSBlbHNlIHsKJHJlZ2V4IC49ICRjYXI7Cn0KJGVzY2FwaW5nID0gZmFsc2U7Cn0KCnJldHVybiAnI14nLiRyZWdleC4nJCMnOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3I7CgoKCgoKCmNsYXNzIERlcHRoUmFuZ2VGaWx0ZXJJdGVyYXRvciBleHRlbmRzIEZpbHRlckl0ZXJhdG9yCnsKcHJpdmF0ZSAkbWluRGVwdGggPSAwOwoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvciAkaXRlcmF0b3IsICRtaW5EZXB0aCA9IDAsICRtYXhEZXB0aCA9IFBIUF9JTlRfTUFYKQp7CiR0aGlzLT5taW5EZXB0aCA9ICRtaW5EZXB0aDsKJGl0ZXJhdG9yLT5zZXRNYXhEZXB0aChQSFBfSU5UX01BWCA9PT0gJG1heERlcHRoID8gLTEgOiAkbWF4RGVwdGgpOwoKcGFyZW50OjpfX2NvbnN0cnVjdCgkaXRlcmF0b3IpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoKQp7CnJldHVybiAkdGhpcy0+Z2V0SW5uZXJJdGVyYXRvcigpLT5nZXREZXB0aCgpID49ICR0aGlzLT5taW5EZXB0aDsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgpjbGFzcyBTb3J0YWJsZUl0ZXJhdG9yIGltcGxlbWVudHMgXEl0ZXJhdG9yQWdncmVnYXRlCnsKY29uc3QgU09SVF9CWV9OQU1FID0gMTsKY29uc3QgU09SVF9CWV9UWVBFID0gMjsKY29uc3QgU09SVF9CWV9BQ0NFU1NFRF9USU1FID0gMzsKY29uc3QgU09SVF9CWV9DSEFOR0VEX1RJTUUgPSA0Owpjb25zdCBTT1JUX0JZX01PRElGSUVEX1RJTUUgPSA1OwoKcHJpdmF0ZSAkaXRlcmF0b3I7CnByaXZhdGUgJHNvcnQ7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcVHJhdmVyc2FibGUgJGl0ZXJhdG9yLCAkc29ydCkKewokdGhpcy0+aXRlcmF0b3IgPSAkaXRlcmF0b3I7CgppZiAoc2VsZjo6U09SVF9CWV9OQU1FID09PSAkc29ydCkgewokdGhpcy0+c29ydCA9IGZ1bmN0aW9uICgkYSwgJGIpIHsKcmV0dXJuIHN0cmNtcCgkYS0+Z2V0UmVhbHBhdGgoKSwgJGItPmdldFJlYWxwYXRoKCkpOwp9Owp9IGVsc2VpZiAoc2VsZjo6U09SVF9CWV9UWVBFID09PSAkc29ydCkgewokdGhpcy0+c29ydCA9IGZ1bmN0aW9uICgkYSwgJGIpIHsKaWYgKCRhLT5pc0RpcigpICYmICRiLT5pc0ZpbGUoKSkgewpyZXR1cm4gLTE7Cn0gZWxzZWlmICgkYS0+aXNGaWxlKCkgJiYgJGItPmlzRGlyKCkpIHsKcmV0dXJuIDE7Cn0KCnJldHVybiBzdHJjbXAoJGEtPmdldFJlYWxwYXRoKCksICRiLT5nZXRSZWFscGF0aCgpKTsKfTsKfSBlbHNlaWYgKHNlbGY6OlNPUlRfQllfQUNDRVNTRURfVElNRSA9PT0gJHNvcnQpIHsKJHRoaXMtPnNvcnQgPSBmdW5jdGlvbiAoJGEsICRiKSB7CnJldHVybiAoJGEtPmdldEFUaW1lKCkgPiAkYi0+Z2V0QVRpbWUoKSk7Cn07Cn0gZWxzZWlmIChzZWxmOjpTT1JUX0JZX0NIQU5HRURfVElNRSA9PT0gJHNvcnQpIHsKJHRoaXMtPnNvcnQgPSBmdW5jdGlvbiAoJGEsICRiKSB7CnJldHVybiAoJGEtPmdldENUaW1lKCkgPiAkYi0+Z2V0Q1RpbWUoKSk7Cn07Cn0gZWxzZWlmIChzZWxmOjpTT1JUX0JZX01PRElGSUVEX1RJTUUgPT09ICRzb3J0KSB7CiR0aGlzLT5zb3J0ID0gZnVuY3Rpb24gKCRhLCAkYikgewpyZXR1cm4gKCRhLT5nZXRNVGltZSgpID4gJGItPmdldE1UaW1lKCkpOwp9Owp9IGVsc2VpZiAoaXNfY2FsbGFibGUoJHNvcnQpKSB7CiR0aGlzLT5zb3J0ID0gJHNvcnQ7Cn0gZWxzZSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCdUaGUgU29ydGFibGVJdGVyYXRvciB0YWtlcyBhIFBIUCBjYWxsYmFjayBvciBhIHZhbGlkIGJ1aWx0LWluIHNvcnQgYWxnb3JpdGhtIGFzIGFuIGFyZ3VtZW50LicpOwp9Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRJdGVyYXRvcigpCnsKJGFycmF5ID0gaXRlcmF0b3JfdG9fYXJyYXkoJHRoaXMtPml0ZXJhdG9yLCB0cnVlKTsKdWFzb3J0KCRhcnJheSwgJHRoaXMtPnNvcnQpOwoKcmV0dXJuIG5ldyBcQXJyYXlJdGVyYXRvcigkYXJyYXkpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3I7CgoKCgoKCgpjbGFzcyBGaWxlY29udGVudEZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgTXVsdGlwbGVQY3JlRmlsdGVySXRlcmF0b3IKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhY2NlcHQoKQp7CmlmICghJHRoaXMtPm1hdGNoUmVnZXhwcyAmJiAhJHRoaXMtPm5vTWF0Y2hSZWdleHBzKSB7CnJldHVybiB0cnVlOwp9CgokZmlsZWluZm8gPSAkdGhpcy0+Y3VycmVudCgpOwoKaWYgKCRmaWxlaW5mby0+aXNEaXIoKSB8fCAhJGZpbGVpbmZvLT5pc1JlYWRhYmxlKCkpIHsKcmV0dXJuIGZhbHNlOwp9CgokY29udGVudCA9ICRmaWxlaW5mby0+Z2V0Q29udGVudHMoKTsKaWYgKCEkY29udGVudCkgewpyZXR1cm4gZmFsc2U7Cn0KCgogZm9yZWFjaCAoJHRoaXMtPm5vTWF0Y2hSZWdleHBzIGFzICRyZWdleCkgewppZiAocHJlZ19tYXRjaCgkcmVnZXgsICRjb250ZW50KSkgewpyZXR1cm4gZmFsc2U7Cn0KfQoKCiAkbWF0Y2ggPSB0cnVlOwppZiAoJHRoaXMtPm1hdGNoUmVnZXhwcykgewokbWF0Y2ggPSBmYWxzZTsKZm9yZWFjaCAoJHRoaXMtPm1hdGNoUmVnZXhwcyBhcyAkcmVnZXgpIHsKaWYgKHByZWdfbWF0Y2goJHJlZ2V4LCAkY29udGVudCkpIHsKcmV0dXJuIHRydWU7Cn0KfQp9CgpyZXR1cm4gJG1hdGNoOwp9CgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHRvUmVnZXgoJHN0cikKewpyZXR1cm4gJHRoaXMtPmlzUmVnZXgoJHN0cikgPyAkc3RyIDogJy8nLnByZWdfcXVvdGUoJHN0ciwgJy8nKS4nLyc7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxJdGVyYXRvcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcU3BsRmlsZUluZm87CgoKCgoKCmNsYXNzIEZpbGVQYXRoc0l0ZXJhdG9yIGV4dGVuZHMgXEFycmF5SXRlcmF0b3IKewoKCgpwcml2YXRlICRiYXNlRGlyOwoKCgoKcHJpdmF0ZSAkYmFzZURpckxlbmd0aDsKCgoKCnByaXZhdGUgJHN1YlBhdGg7CgoKCgpwcml2YXRlICRzdWJQYXRobmFtZTsKCgoKCnByaXZhdGUgJGN1cnJlbnQ7CgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRwYXRocywgJGJhc2VEaXIpCnsKJHRoaXMtPmJhc2VEaXIgPSAkYmFzZURpcjsKJHRoaXMtPmJhc2VEaXJMZW5ndGggPSBzdHJsZW4oJGJhc2VEaXIpOwoKcGFyZW50OjpfX2NvbnN0cnVjdCgkcGF0aHMpOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jYWxsKCRuYW1lLCBhcnJheSAkYXJndW1lbnRzKQp7CnJldHVybiBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcy0+Y3VycmVudCgpLCAkbmFtZSksICRhcmd1bWVudHMpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjdXJyZW50KCkKewpyZXR1cm4gJHRoaXMtPmN1cnJlbnQ7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBrZXkoKQp7CnJldHVybiAkdGhpcy0+Y3VycmVudC0+Z2V0UGF0aG5hbWUoKTsKfQoKcHVibGljIGZ1bmN0aW9uIG5leHQoKQp7CnBhcmVudDo6bmV4dCgpOwokdGhpcy0+YnVpbGRQcm9wZXJ0aWVzKCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiByZXdpbmQoKQp7CnBhcmVudDo6cmV3aW5kKCk7CiR0aGlzLT5idWlsZFByb3BlcnRpZXMoKTsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN1YlBhdGgoKQp7CnJldHVybiAkdGhpcy0+c3ViUGF0aDsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFN1YlBhdGhuYW1lKCkKewpyZXR1cm4gJHRoaXMtPnN1YlBhdGhuYW1lOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGJ1aWxkUHJvcGVydGllcygpCnsKJGFic29sdXRlUGF0aCA9IHBhcmVudDo6Y3VycmVudCgpOwoKaWYgKCR0aGlzLT5iYXNlRGlyID09PSBzdWJzdHIoJGFic29sdXRlUGF0aCwgMCwgJHRoaXMtPmJhc2VEaXJMZW5ndGgpKSB7CiR0aGlzLT5zdWJQYXRobmFtZSA9IGx0cmltKHN1YnN0cigkYWJzb2x1dGVQYXRoLCAkdGhpcy0+YmFzZURpckxlbmd0aCksICcvXFwnKTsKJGRpciA9IGRpcm5hbWUoJHRoaXMtPnN1YlBhdGhuYW1lKTsKJHRoaXMtPnN1YlBhdGggPSAnLicgPT09ICRkaXIgPyAnJyA6ICRkaXI7Cn0gZWxzZSB7CiR0aGlzLT5zdWJQYXRoID0gJHRoaXMtPnN1YlBhdGhuYW1lID0gJyc7Cn0KCiR0aGlzLT5jdXJyZW50ID0gbmV3IFNwbEZpbGVJbmZvKHBhcmVudDo6Y3VycmVudCgpLCAkdGhpcy0+c3ViUGF0aCwgJHRoaXMtPnN1YlBhdGhuYW1lKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxDb21wYXJhdG9yXE51bWJlckNvbXBhcmF0b3I7CgoKCgoKCmNsYXNzIFNpemVSYW5nZUZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgRmlsdGVySXRlcmF0b3IKewpwcml2YXRlICRjb21wYXJhdG9ycyA9IGFycmF5KCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXEl0ZXJhdG9yICRpdGVyYXRvciwgYXJyYXkgJGNvbXBhcmF0b3JzKQp7CiR0aGlzLT5jb21wYXJhdG9ycyA9ICRjb21wYXJhdG9yczsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJGl0ZXJhdG9yKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokZmlsZWluZm8gPSAkdGhpcy0+Y3VycmVudCgpOwppZiAoISRmaWxlaW5mby0+aXNGaWxlKCkpIHsKcmV0dXJuIHRydWU7Cn0KCiRmaWxlc2l6ZSA9ICRmaWxlaW5mby0+Z2V0U2l6ZSgpOwpmb3JlYWNoICgkdGhpcy0+Y29tcGFyYXRvcnMgYXMgJGNvbXBhcmUpIHsKaWYgKCEkY29tcGFyZS0+dGVzdCgkZmlsZXNpemUpKSB7CnJldHVybiBmYWxzZTsKfQp9CgpyZXR1cm4gdHJ1ZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgpjbGFzcyBFeGNsdWRlRGlyZWN0b3J5RmlsdGVySXRlcmF0b3IgZXh0ZW5kcyBGaWx0ZXJJdGVyYXRvcgp7CnByaXZhdGUgJHBhdHRlcm5zID0gYXJyYXkoKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcSXRlcmF0b3IgJGl0ZXJhdG9yLCBhcnJheSAkZGlyZWN0b3JpZXMpCnsKZm9yZWFjaCAoJGRpcmVjdG9yaWVzIGFzICRkaXJlY3RvcnkpIHsKJHRoaXMtPnBhdHRlcm5zW10gPSAnIyhefC8pJy5wcmVnX3F1b3RlKCRkaXJlY3RvcnksICcjJykuJygvfCQpIyc7Cn0KCnBhcmVudDo6X19jb25zdHJ1Y3QoJGl0ZXJhdG9yKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokcGF0aCA9ICR0aGlzLT5pc0RpcigpID8gJHRoaXMtPmN1cnJlbnQoKS0+Z2V0UmVsYXRpdmVQYXRobmFtZSgpIDogJHRoaXMtPmN1cnJlbnQoKS0+Z2V0UmVsYXRpdmVQYXRoKCk7CiRwYXRoID0gc3RydHIoJHBhdGgsICdcXCcsICcvJyk7CmZvcmVhY2ggKCR0aGlzLT5wYXR0ZXJucyBhcyAkcGF0dGVybikgewppZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJHBhdGgpKSB7CnJldHVybiBmYWxzZTsKfQp9CgpyZXR1cm4gdHJ1ZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgoKCmFic3RyYWN0IGNsYXNzIEZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgXEZpbHRlckl0ZXJhdG9yCnsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJld2luZCgpCnsKJGl0ZXJhdG9yID0gJHRoaXM7CndoaWxlICgkaXRlcmF0b3IgaW5zdGFuY2VvZiBcT3V0ZXJJdGVyYXRvcikgewokaW5uZXJJdGVyYXRvciA9ICRpdGVyYXRvci0+Z2V0SW5uZXJJdGVyYXRvcigpOwoKaWYgKCRpbm5lckl0ZXJhdG9yIGluc3RhbmNlb2YgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IpIHsKaWYgKCRpbm5lckl0ZXJhdG9yLT5pc1Jld2luZGFibGUoKSkgewokaW5uZXJJdGVyYXRvci0+bmV4dCgpOwokaW5uZXJJdGVyYXRvci0+cmV3aW5kKCk7Cn0KfSBlbHNlaWYgKCRpdGVyYXRvci0+Z2V0SW5uZXJJdGVyYXRvcigpIGluc3RhbmNlb2YgXEZpbGVzeXN0ZW1JdGVyYXRvcikgewokaXRlcmF0b3ItPmdldElubmVySXRlcmF0b3IoKS0+bmV4dCgpOwokaXRlcmF0b3ItPmdldElubmVySXRlcmF0b3IoKS0+cmV3aW5kKCk7Cn0KJGl0ZXJhdG9yID0gJGl0ZXJhdG9yLT5nZXRJbm5lckl0ZXJhdG9yKCk7Cn0KCnBhcmVudDo6cmV3aW5kKCk7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxJdGVyYXRvcjsKCnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhwcmVzc2lvblxFeHByZXNzaW9uOwoKCgoKCgphYnN0cmFjdCBjbGFzcyBNdWx0aXBsZVBjcmVGaWx0ZXJJdGVyYXRvciBleHRlbmRzIEZpbHRlckl0ZXJhdG9yCnsKcHJvdGVjdGVkICRtYXRjaFJlZ2V4cHMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJG5vTWF0Y2hSZWdleHBzID0gYXJyYXkoKTsKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXEl0ZXJhdG9yICRpdGVyYXRvciwgYXJyYXkgJG1hdGNoUGF0dGVybnMsIGFycmF5ICRub01hdGNoUGF0dGVybnMpCnsKZm9yZWFjaCAoJG1hdGNoUGF0dGVybnMgYXMgJHBhdHRlcm4pIHsKJHRoaXMtPm1hdGNoUmVnZXhwc1tdID0gJHRoaXMtPnRvUmVnZXgoJHBhdHRlcm4pOwp9Cgpmb3JlYWNoICgkbm9NYXRjaFBhdHRlcm5zIGFzICRwYXR0ZXJuKSB7CiR0aGlzLT5ub01hdGNoUmVnZXhwc1tdID0gJHRoaXMtPnRvUmVnZXgoJHBhdHRlcm4pOwp9CgpwYXJlbnQ6Ol9fY29uc3RydWN0KCRpdGVyYXRvcik7Cn0KCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gaXNSZWdleCgkc3RyKQp7CnJldHVybiBFeHByZXNzaW9uOjpjcmVhdGUoJHN0ciktPmlzUmVnZXgoKTsKfQoKCgoKCgoKCmFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiB0b1JlZ2V4KCRzdHIpOwp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgoKCgpjbGFzcyBDdXN0b21GaWx0ZXJJdGVyYXRvciBleHRlbmRzIEZpbHRlckl0ZXJhdG9yCnsKcHJpdmF0ZSAkZmlsdGVycyA9IGFycmF5KCk7CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChcSXRlcmF0b3IgJGl0ZXJhdG9yLCBhcnJheSAkZmlsdGVycykKewpmb3JlYWNoICgkZmlsdGVycyBhcyAkZmlsdGVyKSB7CmlmICghaXNfY2FsbGFibGUoJGZpbHRlcikpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oJ0ludmFsaWQgUEhQIGNhbGxiYWNrLicpOwp9Cn0KJHRoaXMtPmZpbHRlcnMgPSAkZmlsdGVyczsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJGl0ZXJhdG9yKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokZmlsZWluZm8gPSAkdGhpcy0+Y3VycmVudCgpOwoKZm9yZWFjaCAoJHRoaXMtPmZpbHRlcnMgYXMgJGZpbHRlcikgewppZiAoZmFsc2UgPT09IGNhbGxfdXNlcl9mdW5jKCRmaWx0ZXIsICRmaWxlaW5mbykpIHsKcmV0dXJuIGZhbHNlOwp9Cn0KCnJldHVybiB0cnVlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3I7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEV4cHJlc3Npb25cRXhwcmVzc2lvbjsKCgoKCgoKY2xhc3MgRmlsZW5hbWVGaWx0ZXJJdGVyYXRvciBleHRlbmRzIE11bHRpcGxlUGNyZUZpbHRlckl0ZXJhdG9yCnsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFjY2VwdCgpCnsKJGZpbGVuYW1lID0gJHRoaXMtPmN1cnJlbnQoKS0+Z2V0RmlsZW5hbWUoKTsKCgogZm9yZWFjaCAoJHRoaXMtPm5vTWF0Y2hSZWdleHBzIGFzICRyZWdleCkgewppZiAocHJlZ19tYXRjaCgkcmVnZXgsICRmaWxlbmFtZSkpIHsKcmV0dXJuIGZhbHNlOwp9Cn0KCgogJG1hdGNoID0gdHJ1ZTsKaWYgKCR0aGlzLT5tYXRjaFJlZ2V4cHMpIHsKJG1hdGNoID0gZmFsc2U7CmZvcmVhY2ggKCR0aGlzLT5tYXRjaFJlZ2V4cHMgYXMgJHJlZ2V4KSB7CmlmIChwcmVnX21hdGNoKCRyZWdleCwgJGZpbGVuYW1lKSkgewpyZXR1cm4gdHJ1ZTsKfQp9Cn0KCnJldHVybiAkbWF0Y2g7Cn0KCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdG9SZWdleCgkc3RyKQp7CnJldHVybiBFeHByZXNzaW9uOjpjcmVhdGUoJHN0ciktPmdldFJlZ2V4KCktPnJlbmRlcigpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3I7Cgp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXENvbXBhcmF0b3JcRGF0ZUNvbXBhcmF0b3I7CgoKCgoKCmNsYXNzIERhdGVSYW5nZUZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgRmlsdGVySXRlcmF0b3IKewpwcml2YXRlICRjb21wYXJhdG9ycyA9IGFycmF5KCk7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXEl0ZXJhdG9yICRpdGVyYXRvciwgYXJyYXkgJGNvbXBhcmF0b3JzKQp7CiR0aGlzLT5jb21wYXJhdG9ycyA9ICRjb21wYXJhdG9yczsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJGl0ZXJhdG9yKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokZmlsZWluZm8gPSAkdGhpcy0+Y3VycmVudCgpOwoKaWYgKCEkZmlsZWluZm8tPmlzRmlsZSgpKSB7CnJldHVybiB0cnVlOwp9CgokZmlsZWRhdGUgPSAkZmlsZWluZm8tPmdldE1UaW1lKCk7CmZvcmVhY2ggKCR0aGlzLT5jb21wYXJhdG9ycyBhcyAkY29tcGFyZSkgewppZiAoISRjb21wYXJlLT50ZXN0KCRmaWxlZGF0ZSkpIHsKcmV0dXJuIGZhbHNlOwp9Cn0KCnJldHVybiB0cnVlOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcSXRlcmF0b3I7CgoKCgoKCmNsYXNzIEZpbGVUeXBlRmlsdGVySXRlcmF0b3IgZXh0ZW5kcyBGaWx0ZXJJdGVyYXRvcgp7CmNvbnN0IE9OTFlfRklMRVMgPSAxOwpjb25zdCBPTkxZX0RJUkVDVE9SSUVTID0gMjsKCnByaXZhdGUgJG1vZGU7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoXEl0ZXJhdG9yICRpdGVyYXRvciwgJG1vZGUpCnsKJHRoaXMtPm1vZGUgPSAkbW9kZTsKCnBhcmVudDo6X19jb25zdHJ1Y3QoJGl0ZXJhdG9yKTsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokZmlsZWluZm8gPSAkdGhpcy0+Y3VycmVudCgpOwppZiAoc2VsZjo6T05MWV9ESVJFQ1RPUklFUyA9PT0gKHNlbGY6Ok9OTFlfRElSRUNUT1JJRVMgJiAkdGhpcy0+bW9kZSkgJiYgJGZpbGVpbmZvLT5pc0ZpbGUoKSkgewpyZXR1cm4gZmFsc2U7Cn0gZWxzZWlmIChzZWxmOjpPTkxZX0ZJTEVTID09PSAoc2VsZjo6T05MWV9GSUxFUyAmICR0aGlzLT5tb2RlKSAmJiAkZmlsZWluZm8tPmlzRGlyKCkpIHsKcmV0dXJuIGZhbHNlOwp9CgpyZXR1cm4gdHJ1ZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxFeGNlcHRpb25cQWNjZXNzRGVuaWVkRXhjZXB0aW9uOwp1c2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXFNwbEZpbGVJbmZvOwoKCgoKCgpjbGFzcyBSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvciBleHRlbmRzIFxSZWN1cnNpdmVEaXJlY3RvcnlJdGVyYXRvcgp7CgoKCnByaXZhdGUgJGlnbm9yZVVucmVhZGFibGVEaXJzOwoKCgoKcHJpdmF0ZSAkcmV3aW5kYWJsZTsKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkcGF0aCwgJGZsYWdzLCAkaWdub3JlVW5yZWFkYWJsZURpcnMgPSBmYWxzZSkKewppZiAoJGZsYWdzICYgKHNlbGY6OkNVUlJFTlRfQVNfUEFUSE5BTUUgfCBzZWxmOjpDVVJSRU5UX0FTX1NFTEYpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignVGhpcyBpdGVyYXRvciBvbmx5IHN1cHBvcnQgcmV0dXJuaW5nIGN1cnJlbnQgYXMgZmlsZWluZm8uJyk7Cn0KCnBhcmVudDo6X19jb25zdHJ1Y3QoJHBhdGgsICRmbGFncyk7CiR0aGlzLT5pZ25vcmVVbnJlYWRhYmxlRGlycyA9ICRpZ25vcmVVbnJlYWRhYmxlRGlyczsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gY3VycmVudCgpCnsKcmV0dXJuIG5ldyBTcGxGaWxlSW5mbyhwYXJlbnQ6OmN1cnJlbnQoKS0+Z2V0UGF0aG5hbWUoKSwgJHRoaXMtPmdldFN1YlBhdGgoKSwgJHRoaXMtPmdldFN1YlBhdGhuYW1lKCkpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDaGlsZHJlbigpCnsKdHJ5IHsKcmV0dXJuIHBhcmVudDo6Z2V0Q2hpbGRyZW4oKTsKfSBjYXRjaCAoXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbiAkZSkgewppZiAoJHRoaXMtPmlnbm9yZVVucmVhZGFibGVEaXJzKSB7CgogcmV0dXJuIG5ldyBcUmVjdXJzaXZlQXJyYXlJdGVyYXRvcihhcnJheSgpKTsKfSBlbHNlIHsKdGhyb3cgbmV3IEFjY2Vzc0RlbmllZEV4Y2VwdGlvbigkZS0+Z2V0TWVzc2FnZSgpLCAkZS0+Z2V0Q29kZSgpLCAkZSk7Cn0KfQp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gcmV3aW5kKCkKewppZiAoZmFsc2UgPT09ICR0aGlzLT5pc1Jld2luZGFibGUoKSkgewpyZXR1cm47Cn0KCgogcGFyZW50OjpuZXh0KCk7CgpwYXJlbnQ6OnJld2luZCgpOwp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1Jld2luZGFibGUoKQp7CmlmIChudWxsICE9PSAkdGhpcy0+cmV3aW5kYWJsZSkgewpyZXR1cm4gJHRoaXMtPnJld2luZGFibGU7Cn0KCmlmIChmYWxzZSAhPT0gJHN0cmVhbSA9IEBvcGVuZGlyKCR0aGlzLT5nZXRQYXRoKCkpKSB7CiRpbmZvcyA9IHN0cmVhbV9nZXRfbWV0YV9kYXRhKCRzdHJlYW0pOwpjbG9zZWRpcigkc3RyZWFtKTsKCmlmICgkaW5mb3NbJ3NlZWthYmxlJ10pIHsKcmV0dXJuICR0aGlzLT5yZXdpbmRhYmxlID0gdHJ1ZTsKfQp9CgpyZXR1cm4gJHRoaXMtPnJld2luZGFibGUgPSBmYWxzZTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXEl0ZXJhdG9yOwoKCgoKCgoKY2xhc3MgUGF0aEZpbHRlckl0ZXJhdG9yIGV4dGVuZHMgTXVsdGlwbGVQY3JlRmlsdGVySXRlcmF0b3IKewoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWNjZXB0KCkKewokZmlsZW5hbWUgPSAkdGhpcy0+Y3VycmVudCgpLT5nZXRSZWxhdGl2ZVBhdGhuYW1lKCk7CgppZiAoZGVmaW5lZCgnUEhQX1dJTkRPV1NfVkVSU0lPTl9NQUpPUicpKSB7CiRmaWxlbmFtZSA9IHN0cnRyKCRmaWxlbmFtZSwgJ1xcJywgJy8nKTsKfQoKCiBmb3JlYWNoICgkdGhpcy0+bm9NYXRjaFJlZ2V4cHMgYXMgJHJlZ2V4KSB7CmlmIChwcmVnX21hdGNoKCRyZWdleCwgJGZpbGVuYW1lKSkgewpyZXR1cm4gZmFsc2U7Cn0KfQoKCiAkbWF0Y2ggPSB0cnVlOwppZiAoJHRoaXMtPm1hdGNoUmVnZXhwcykgewokbWF0Y2ggPSBmYWxzZTsKZm9yZWFjaCAoJHRoaXMtPm1hdGNoUmVnZXhwcyBhcyAkcmVnZXgpIHsKaWYgKHByZWdfbWF0Y2goJHJlZ2V4LCAkZmlsZW5hbWUpKSB7CnJldHVybiB0cnVlOwp9Cn0KfQoKcmV0dXJuICRtYXRjaDsKfQoKCgoKCgoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdG9SZWdleCgkc3RyKQp7CnJldHVybiAkdGhpcy0+aXNSZWdleCgkc3RyKSA/ICRzdHIgOiAnLycucHJlZ19xdW90ZSgkc3RyLCAnLycpLicvJzsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXENvbXBhcmF0b3I7CgoKCgoKCmNsYXNzIERhdGVDb21wYXJhdG9yIGV4dGVuZHMgQ29tcGFyYXRvcgp7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR0ZXN0KQp7CmlmICghcHJlZ19tYXRjaCgnI15ccyooPT18IT18Wzw+XT0/fGFmdGVyfHNpbmNlfGJlZm9yZXx1bnRpbCk/XHMqKC4rPylccyokI2knLCAkdGVzdCwgJG1hdGNoZXMpKSB7CnRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKHNwcmludGYoJ0RvblwndCB1bmRlcnN0YW5kICIlcyIgYXMgYSBkYXRlIHRlc3QuJywgJHRlc3QpKTsKfQoKdHJ5IHsKJGRhdGUgPSBuZXcgXERhdGVUaW1lKCRtYXRjaGVzWzJdKTsKJHRhcmdldCA9ICRkYXRlLT5mb3JtYXQoJ1UnKTsKfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCciJXMiIGlzIG5vdCBhIHZhbGlkIGRhdGUuJywgJG1hdGNoZXNbMl0pKTsKfQoKJG9wZXJhdG9yID0gaXNzZXQoJG1hdGNoZXNbMV0pID8gJG1hdGNoZXNbMV0gOiAnPT0nOwppZiAoJ3NpbmNlJyA9PT0gJG9wZXJhdG9yIHx8ICdhZnRlcicgPT09ICRvcGVyYXRvcikgewokb3BlcmF0b3IgPSAnPic7Cn0KCmlmICgndW50aWwnID09PSAkb3BlcmF0b3IgfHwgJ2JlZm9yZScgPT09ICRvcGVyYXRvcikgewokb3BlcmF0b3IgPSAnPCc7Cn0KCiR0aGlzLT5zZXRPcGVyYXRvcigkb3BlcmF0b3IpOwokdGhpcy0+c2V0VGFyZ2V0KCR0YXJnZXQpOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcQ29tcGFyYXRvcjsKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgpjbGFzcyBOdW1iZXJDb21wYXJhdG9yIGV4dGVuZHMgQ29tcGFyYXRvcgp7CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHRlc3QpCnsKaWYgKCFwcmVnX21hdGNoKCcjXlxzKig9PXwhPXxbPD5dPT8pP1xzKihbMC05XC5dKylccyooW2ttZ11pPyk/XHMqJCNpJywgJHRlc3QsICRtYXRjaGVzKSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbihzcHJpbnRmKCdEb25cJ3QgdW5kZXJzdGFuZCAiJXMiIGFzIGEgbnVtYmVyIHRlc3QuJywgJHRlc3QpKTsKfQoKJHRhcmdldCA9ICRtYXRjaGVzWzJdOwppZiAoIWlzX251bWVyaWMoJHRhcmdldCkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBudW1iZXIgIiVzIi4nLCAkdGFyZ2V0KSk7Cn0KaWYgKGlzc2V0KCRtYXRjaGVzWzNdKSkgewoKIHN3aXRjaCAoc3RydG9sb3dlcigkbWF0Y2hlc1szXSkpIHsKY2FzZSAnayc6CiR0YXJnZXQgKj0gMTAwMDsKYnJlYWs7CmNhc2UgJ2tpJzoKJHRhcmdldCAqPSAxMDI0OwpicmVhazsKY2FzZSAnbSc6CiR0YXJnZXQgKj0gMTAwMDAwMDsKYnJlYWs7CmNhc2UgJ21pJzoKJHRhcmdldCAqPSAxMDI0KjEwMjQ7CmJyZWFrOwpjYXNlICdnJzoKJHRhcmdldCAqPSAxMDAwMDAwMDAwOwpicmVhazsKY2FzZSAnZ2knOgokdGFyZ2V0ICo9IDEwMjQqMTAyNCoxMDI0OwpicmVhazsKfQp9CgokdGhpcy0+c2V0VGFyZ2V0KCR0YXJnZXQpOwokdGhpcy0+c2V0T3BlcmF0b3IoaXNzZXQoJG1hdGNoZXNbMV0pID8gJG1hdGNoZXNbMV0gOiAnPT0nKTsKfQp9Cjw/cGhwCgoKCgoKCgoKCgpuYW1lc3BhY2UgU3ltZm9ueVxDb21wb25lbnRcRmluZGVyXENvbXBhcmF0b3I7CgoKCgoKCmNsYXNzIENvbXBhcmF0b3IKewpwcml2YXRlICR0YXJnZXQ7CnByaXZhdGUgJG9wZXJhdG9yID0gJz09JzsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFRhcmdldCgpCnsKcmV0dXJuICR0aGlzLT50YXJnZXQ7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFRhcmdldCgkdGFyZ2V0KQp7CiR0aGlzLT50YXJnZXQgPSAkdGFyZ2V0Owp9CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRPcGVyYXRvcigpCnsKcmV0dXJuICR0aGlzLT5vcGVyYXRvcjsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRPcGVyYXRvcigkb3BlcmF0b3IpCnsKaWYgKCEkb3BlcmF0b3IpIHsKJG9wZXJhdG9yID0gJz09JzsKfQoKaWYgKCFpbl9hcnJheSgkb3BlcmF0b3IsIGFycmF5KCc+JywgJzwnLCAnPj0nLCAnPD0nLCAnPT0nLCAnIT0nKSkpIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oc3ByaW50ZignSW52YWxpZCBvcGVyYXRvciAiJXMiLicsICRvcGVyYXRvcikpOwp9CgokdGhpcy0+b3BlcmF0b3IgPSAkb3BlcmF0b3I7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdGVzdCgkdGVzdCkKewpzd2l0Y2ggKCR0aGlzLT5vcGVyYXRvcikgewpjYXNlICc+JzoKcmV0dXJuICR0ZXN0ID4gJHRoaXMtPnRhcmdldDsKY2FzZSAnPj0nOgpyZXR1cm4gJHRlc3QgPj0gJHRoaXMtPnRhcmdldDsKY2FzZSAnPCc6CnJldHVybiAkdGVzdCA8ICR0aGlzLT50YXJnZXQ7CmNhc2UgJzw9JzoKcmV0dXJuICR0ZXN0IDw9ICR0aGlzLT50YXJnZXQ7CmNhc2UgJyE9JzoKcmV0dXJuICR0ZXN0ICE9ICR0aGlzLT50YXJnZXQ7Cn0KCnJldHVybiAkdGVzdCA9PSAkdGhpcy0+dGFyZ2V0Owp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhjZXB0aW9uOwoKCgoKY2xhc3MgQWNjZXNzRGVuaWVkRXhjZXB0aW9uIGV4dGVuZHMgXFVuZXhwZWN0ZWRWYWx1ZUV4Y2VwdGlvbgp7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhjZXB0aW9uOwoKCgoKaW50ZXJmYWNlIEV4Y2VwdGlvbkludGVyZmFjZQp7CgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRBZGFwdGVyKCk7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhjZXB0aW9uOwoKCgoKY2xhc3MgT3BlcmF0aW9uTm90UGVybWl0ZWRFeGNlcHRpb24gZXh0ZW5kcyBBZGFwdGVyRmFpbHVyZUV4Y2VwdGlvbgp7Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhjZXB0aW9uOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2U7CgoKCgoKCmNsYXNzIEFkYXB0ZXJGYWlsdXJlRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24gaW1wbGVtZW50cyBFeGNlcHRpb25JbnRlcmZhY2UKewoKCgpwcml2YXRlICRhZGFwdGVyOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoQWRhcHRlckludGVyZmFjZSAkYWRhcHRlciwgJG1lc3NhZ2UgPSBudWxsLCBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwpCnsKJHRoaXMtPmFkYXB0ZXIgPSAkYWRhcHRlcjsKcGFyZW50OjpfX2NvbnN0cnVjdCgkbWVzc2FnZSA/OiAnU2VhcmNoIGZhaWxlZCB3aXRoICInLiRhZGFwdGVyLT5nZXROYW1lKCkuJyIgYWRhcHRlci4nLCAkcHJldmlvdXMpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0QWRhcHRlcigpCnsKcmV0dXJuICR0aGlzLT5hZGFwdGVyOwp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcRXhjZXB0aW9uOwoKdXNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlclxBZGFwdGVyXEFkYXB0ZXJJbnRlcmZhY2U7CnVzZSBTeW1mb255XENvbXBvbmVudFxGaW5kZXJcU2hlbGxcQ29tbWFuZDsKCgoKCmNsYXNzIFNoZWxsQ29tbWFuZEZhaWx1cmVFeGNlcHRpb24gZXh0ZW5kcyBBZGFwdGVyRmFpbHVyZUV4Y2VwdGlvbgp7CgoKCnByaXZhdGUgJGNvbW1hbmQ7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChBZGFwdGVySW50ZXJmYWNlICRhZGFwdGVyLCBDb21tYW5kICRjb21tYW5kLCBcRXhjZXB0aW9uICRwcmV2aW91cyA9IG51bGwpCnsKJHRoaXMtPmNvbW1hbmQgPSAkY29tbWFuZDsKcGFyZW50OjpfX2NvbnN0cnVjdCgkYWRhcHRlciwgJ1NoZWxsIGNvbW1hbmQgZmFpbGVkOiAiJy4kY29tbWFuZC0+am9pbigpLiciLicsICRwcmV2aW91cyk7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb21tYW5kKCkKewpyZXR1cm4gJHRoaXMtPmNvbW1hbmQ7Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFN5bWZvbnlcQ29tcG9uZW50XEZpbmRlcjsKCgoKCgoKY2xhc3MgU3BsRmlsZUluZm8gZXh0ZW5kcyBcU3BsRmlsZUluZm8Kewpwcml2YXRlICRyZWxhdGl2ZVBhdGg7CnByaXZhdGUgJHJlbGF0aXZlUGF0aG5hbWU7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRmaWxlLCAkcmVsYXRpdmVQYXRoLCAkcmVsYXRpdmVQYXRobmFtZSkKewpwYXJlbnQ6Ol9fY29uc3RydWN0KCRmaWxlKTsKJHRoaXMtPnJlbGF0aXZlUGF0aCA9ICRyZWxhdGl2ZVBhdGg7CiR0aGlzLT5yZWxhdGl2ZVBhdGhuYW1lID0gJHJlbGF0aXZlUGF0aG5hbWU7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aCgpCnsKcmV0dXJuICR0aGlzLT5yZWxhdGl2ZVBhdGg7Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFJlbGF0aXZlUGF0aG5hbWUoKQp7CnJldHVybiAkdGhpcy0+cmVsYXRpdmVQYXRobmFtZTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50cygpCnsKJGxldmVsID0gZXJyb3JfcmVwb3J0aW5nKDApOwokY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0aGlzLT5nZXRQYXRobmFtZSgpKTsKZXJyb3JfcmVwb3J0aW5nKCRsZXZlbCk7CmlmIChmYWxzZSA9PT0gJGNvbnRlbnQpIHsKJGVycm9yID0gZXJyb3JfZ2V0X2xhc3QoKTsKdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCRlcnJvclsnbWVzc2FnZSddKTsKfQoKcmV0dXJuICRjb250ZW50Owp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTZWxkXEpzb25MaW50OwoKY2xhc3MgVW5kZWZpbmVkCnsKfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFNlbGRcSnNvbkxpbnQ7Cgp1c2Ugc3RkQ2xhc3M7CgoKCgoKCgoKCgoKCgoKY2xhc3MgSnNvblBhcnNlcgp7CmNvbnN0IERFVEVDVF9LRVlfQ09ORkxJQ1RTID0gMTsKY29uc3QgQUxMT1dfRFVQTElDQVRFX0tFWVMgPSAyOwoKcHJpdmF0ZSAkZmxhZ3M7CnByaXZhdGUgJHN0YWNrOwpwcml2YXRlICR2c3RhY2s7IAogcHJpdmF0ZSAkbHN0YWNrOyAKCnByaXZhdGUgJHl5Owpwcml2YXRlICRzeW1ib2xzID0gYXJyYXkoCidlcnJvcicgPT4gMiwKJ0pTT05TdHJpbmcnID0+IDMsCidTVFJJTkcnID0+IDQsCidKU09OTnVtYmVyJyA9PiA1LAonTlVNQkVSJyA9PiA2LAonSlNPTk51bGxMaXRlcmFsJyA9PiA3LAonTlVMTCcgPT4gOCwKJ0pTT05Cb29sZWFuTGl0ZXJhbCcgPT4gOSwKJ1RSVUUnID0+IDEwLAonRkFMU0UnID0+IDExLAonSlNPTlRleHQnID0+IDEyLAonSlNPTlZhbHVlJyA9PiAxMywKJ0VPRicgPT4gMTQsCidKU09OT2JqZWN0JyA9PiAxNSwKJ0pTT05BcnJheScgPT4gMTYsCid7JyA9PiAxNywKJ30nID0+IDE4LAonSlNPTk1lbWJlckxpc3QnID0+IDE5LAonSlNPTk1lbWJlcicgPT4gMjAsCic6JyA9PiAyMSwKJywnID0+IDIyLAonWycgPT4gMjMsCiddJyA9PiAyNCwKJ0pTT05FbGVtZW50TGlzdCcgPT4gMjUsCickYWNjZXB0JyA9PiAwLAonJGVuZCcgPT4gMSwKKTsKCnByaXZhdGUgJHRlcm1pbmFsc18gPSBhcnJheSgKMiA9PiAiZXJyb3IiLAo0ID0+ICJTVFJJTkciLAo2ID0+ICJOVU1CRVIiLAo4ID0+ICJOVUxMIiwKMTAgPT4gIlRSVUUiLAoxMSA9PiAiRkFMU0UiLAoxNCA9PiAiRU9GIiwKMTcgPT4gInsiLAoxOCA9PiAifSIsCjIxID0+ICI6IiwKMjIgPT4gIiwiLAoyMyA9PiAiWyIsCjI0ID0+ICJdIiwKKTsKCnByaXZhdGUgJHByb2R1Y3Rpb25zXyA9IGFycmF5KAowLAphcnJheSgzLCAxKSwKYXJyYXkoNSwgMSksCmFycmF5KDcsIDEpLAphcnJheSg5LCAxKSwKYXJyYXkoOSwgMSksCmFycmF5KDEyLCAyKSwKYXJyYXkoMTMsIDEpLAphcnJheSgxMywgMSksCmFycmF5KDEzLCAxKSwKYXJyYXkoMTMsIDEpLAphcnJheSgxMywgMSksCmFycmF5KDEzLCAxKSwKYXJyYXkoMTUsIDIpLAphcnJheSgxNSwgMyksCmFycmF5KDIwLCAzKSwKYXJyYXkoMTksIDEpLAphcnJheSgxOSwgMyksCmFycmF5KDE2LCAyKSwKYXJyYXkoMTYsIDMpLAphcnJheSgyNSwgMSksCmFycmF5KDI1LCAzKQopOwoKcHJpdmF0ZSAkdGFibGUgPSBhcnJheShhcnJheSgzID0+IDUsIDQgPT4gYXJyYXkoMSwxMiksIDUgPT4gNiwgNiA9PiBhcnJheSgxLDEzKSwgNyA9PiAzLCA4ID0+IGFycmF5KDEsOSksIDkgPT4gNCwgMTAgPT4gYXJyYXkoMSwxMCksIDExID0+IGFycmF5KDEsMTEpLCAxMiA9PiAxLCAxMyA9PiAyLCAxNSA9PiA3LCAxNiA9PiA4LCAxNyA9PiBhcnJheSgxLDE0KSwgMjMgPT4gYXJyYXkoMSwxNSkpLCBhcnJheSggMSA9PiBhcnJheSgzKSksIGFycmF5KCAxNCA9PiBhcnJheSgxLDE2KSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDcpLCAxOCA9PiBhcnJheSgyLDcpLCAyMiA9PiBhcnJheSgyLDcpLCAyNCA9PiBhcnJheSgyLDcpKSwgYXJyYXkoIDE0ID0+IGFycmF5KDIsOCksIDE4ID0+IGFycmF5KDIsOCksIDIyID0+IGFycmF5KDIsOCksIDI0ID0+IGFycmF5KDIsOCkpLCBhcnJheSggMTQgPT4gYXJyYXkoMiw5KSwgMTggPT4gYXJyYXkoMiw5KSwgMjIgPT4gYXJyYXkoMiw5KSwgMjQgPT4gYXJyYXkoMiw5KSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDEwKSwgMTggPT4gYXJyYXkoMiwxMCksIDIyID0+IGFycmF5KDIsMTApLCAyNCA9PiBhcnJheSgyLDEwKSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDExKSwgMTggPT4gYXJyYXkoMiwxMSksIDIyID0+IGFycmF5KDIsMTEpLCAyNCA9PiBhcnJheSgyLDExKSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDEyKSwgMTggPT4gYXJyYXkoMiwxMiksIDIyID0+IGFycmF5KDIsMTIpLCAyNCA9PiBhcnJheSgyLDEyKSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDMpLCAxOCA9PiBhcnJheSgyLDMpLCAyMiA9PiBhcnJheSgyLDMpLCAyNCA9PiBhcnJheSgyLDMpKSwgYXJyYXkoIDE0ID0+IGFycmF5KDIsNCksIDE4ID0+IGFycmF5KDIsNCksIDIyID0+IGFycmF5KDIsNCksIDI0ID0+IGFycmF5KDIsNCkpLCBhcnJheSggMTQgPT4gYXJyYXkoMiw1KSwgMTggPT4gYXJyYXkoMiw1KSwgMjIgPT4gYXJyYXkoMiw1KSwgMjQgPT4gYXJyYXkoMiw1KSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDEpLCAxOCA9PiBhcnJheSgyLDEpLCAyMSA9PiBhcnJheSgyLDEpLCAyMiA9PiBhcnJheSgyLDEpLCAyNCA9PiBhcnJheSgyLDEpKSwgYXJyYXkoIDE0ID0+IGFycmF5KDIsMiksIDE4ID0+IGFycmF5KDIsMiksIDIyID0+IGFycmF5KDIsMiksIDI0ID0+IGFycmF5KDIsMikpLCBhcnJheSggMyA9PiAyMCwgNCA9PiBhcnJheSgxLDEyKSwgMTggPT4gYXJyYXkoMSwxNyksIDE5ID0+IDE4LCAyMCA9PiAxOSApLCBhcnJheSggMyA9PiA1LCA0ID0+IGFycmF5KDEsMTIpLCA1ID0+IDYsIDYgPT4gYXJyYXkoMSwxMyksIDcgPT4gMywgOCA9PiBhcnJheSgxLDkpLCA5ID0+IDQsIDEwID0+IGFycmF5KDEsMTApLCAxMSA9PiBhcnJheSgxLDExKSwgMTMgPT4gMjMsIDE1ID0+IDcsIDE2ID0+IDgsIDE3ID0+IGFycmF5KDEsMTQpLCAyMyA9PiBhcnJheSgxLDE1KSwgMjQgPT4gYXJyYXkoMSwyMSksIDI1ID0+IDIyICksIGFycmF5KCAxID0+IGFycmF5KDIsNikpLCBhcnJheSggMTQgPT4gYXJyYXkoMiwxMyksIDE4ID0+IGFycmF5KDIsMTMpLCAyMiA9PiBhcnJheSgyLDEzKSwgMjQgPT4gYXJyYXkoMiwxMykpLCBhcnJheSggMTggPT4gYXJyYXkoMSwyNCksIDIyID0+IGFycmF5KDEsMjUpKSwgYXJyYXkoIDE4ID0+IGFycmF5KDIsMTYpLCAyMiA9PiBhcnJheSgyLDE2KSksIGFycmF5KCAyMSA9PiBhcnJheSgxLDI2KSksIGFycmF5KCAxNCA9PiBhcnJheSgyLDE4KSwgMTggPT4gYXJyYXkoMiwxOCksIDIyID0+IGFycmF5KDIsMTgpLCAyNCA9PiBhcnJheSgyLDE4KSksIGFycmF5KCAyMiA9PiBhcnJheSgxLDI4KSwgMjQgPT4gYXJyYXkoMSwyNykpLCBhcnJheSggMjIgPT4gYXJyYXkoMiwyMCksIDI0ID0+IGFycmF5KDIsMjApKSwgYXJyYXkoIDE0ID0+IGFycmF5KDIsMTQpLCAxOCA9PiBhcnJheSgyLDE0KSwgMjIgPT4gYXJyYXkoMiwxNCksIDI0ID0+IGFycmF5KDIsMTQpKSwgYXJyYXkoIDMgPT4gMjAsIDQgPT4gYXJyYXkoMSwxMiksIDIwID0+IDI5ICksIGFycmF5KCAzID0+IDUsIDQgPT4gYXJyYXkoMSwxMiksIDUgPT4gNiwgNiA9PiBhcnJheSgxLDEzKSwgNyA9PiAzLCA4ID0+IGFycmF5KDEsOSksIDkgPT4gNCwgMTAgPT4gYXJyYXkoMSwxMCksIDExID0+IGFycmF5KDEsMTEpLCAxMyA9PiAzMCwgMTUgPT4gNywgMTYgPT4gOCwgMTcgPT4gYXJyYXkoMSwxNCksIDIzID0+IGFycmF5KDEsMTUpKSwgYXJyYXkoIDE0ID0+IGFycmF5KDIsMTkpLCAxOCA9PiBhcnJheSgyLDE5KSwgMjIgPT4gYXJyYXkoMiwxOSksIDI0ID0+IGFycmF5KDIsMTkpKSwgYXJyYXkoIDMgPT4gNSwgNCA9PiBhcnJheSgxLDEyKSwgNSA9PiA2LCA2ID0+IGFycmF5KDEsMTMpLCA3ID0+IDMsIDggPT4gYXJyYXkoMSw5KSwgOSA9PiA0LCAxMCA9PiBhcnJheSgxLDEwKSwgMTEgPT4gYXJyYXkoMSwxMSksIDEzID0+IDMxLCAxNSA9PiA3LCAxNiA9PiA4LCAxNyA9PiBhcnJheSgxLDE0KSwgMjMgPT4gYXJyYXkoMSwxNSkpLCBhcnJheSggMTggPT4gYXJyYXkoMiwxNyksIDIyID0+IGFycmF5KDIsMTcpKSwgYXJyYXkoIDE4ID0+IGFycmF5KDIsMTUpLCAyMiA9PiBhcnJheSgyLDE1KSksIGFycmF5KCAyMiA9PiBhcnJheSgyLDIxKSwgMjQgPT4gYXJyYXkoMiwyMSkpLAopOwoKcHJpdmF0ZSAkZGVmYXVsdEFjdGlvbnMgPSBhcnJheSgKMTYgPT4gYXJyYXkoMiwgNikKKTsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gbGludCgkaW5wdXQpCnsKdHJ5IHsKJHRoaXMtPnBhcnNlKCRpbnB1dCk7Cn0gY2F0Y2ggKFBhcnNpbmdFeGNlcHRpb24gJGUpIHsKcmV0dXJuICRlOwp9Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlKCRpbnB1dCwgJGZsYWdzID0gMCkKewokdGhpcy0+ZmFpbE9uQk9NKCRpbnB1dCk7CgokdGhpcy0+ZmxhZ3MgPSAkZmxhZ3M7CgokdGhpcy0+c3RhY2sgPSBhcnJheSgwKTsKJHRoaXMtPnZzdGFjayA9IGFycmF5KG51bGwpOwokdGhpcy0+bHN0YWNrID0gYXJyYXkoKTsKCiR5eXRleHQgPSAnJzsKJHl5bGluZW5vID0gMDsKJHl5bGVuZyA9IDA7CiRyZWNvdmVyaW5nID0gMDsKJFRFUlJPUiA9IDI7CiRFT0YgPSAxOwoKJHRoaXMtPmxleGVyID0gbmV3IExleGVyKCk7CiR0aGlzLT5sZXhlci0+c2V0SW5wdXQoJGlucHV0KTsKCiR5eWxvYyA9ICR0aGlzLT5sZXhlci0+eXlsbG9jOwokdGhpcy0+bHN0YWNrW10gPSAkeXlsb2M7Cgokc3ltYm9sID0gbnVsbDsKJHByZUVycm9yU3ltYm9sID0gbnVsbDsKJHN0YXRlID0gbnVsbDsKJGFjdGlvbiA9IG51bGw7CiRhID0gbnVsbDsKJHIgPSBudWxsOwokeXl2YWwgPSBuZXcgc3RkQ2xhc3M7CiRwID0gbnVsbDsKJGxlbiA9IG51bGw7CiRuZXdTdGF0ZSA9IG51bGw7CiRleHBlY3RlZCA9IG51bGw7CiRlcnJTdHIgPSBudWxsOwoKd2hpbGUgKHRydWUpIHsKCiAkc3RhdGUgPSAkdGhpcy0+c3RhY2tbY291bnQoJHRoaXMtPnN0YWNrKS0xXTsKCgogaWYgKGlzc2V0KCR0aGlzLT5kZWZhdWx0QWN0aW9uc1skc3RhdGVdKSkgewokYWN0aW9uID0gJHRoaXMtPmRlZmF1bHRBY3Rpb25zWyRzdGF0ZV07Cn0gZWxzZSB7CmlmICgkc3ltYm9sID09IG51bGwpIHsKJHN5bWJvbCA9ICR0aGlzLT5sZXgoKTsKfQoKICRhY3Rpb24gPSBpc3NldCgkdGhpcy0+dGFibGVbJHN0YXRlXVskc3ltYm9sXSkgPyAkdGhpcy0+dGFibGVbJHN0YXRlXVskc3ltYm9sXSA6IGZhbHNlOwp9CgoKIGlmICghJGFjdGlvbiB8fCAhJGFjdGlvblswXSkgewppZiAoISRyZWNvdmVyaW5nKSB7CgogJGV4cGVjdGVkID0gYXJyYXkoKTsKZm9yZWFjaCAoJHRoaXMtPnRhYmxlWyRzdGF0ZV0gYXMgJHAgPT4gJGlnbm9yZSkgewppZiAoaXNzZXQoJHRoaXMtPnRlcm1pbmFsc19bJHBdKSAmJiAkcCA+IDIpIHsKJGV4cGVjdGVkW10gPSAiJyIgLiAkdGhpcy0+dGVybWluYWxzX1skcF0gLiAiJyI7Cn0KfQoKJG1lc3NhZ2UgPSBudWxsOwppZiAoaW5fYXJyYXkoIidTVFJJTkcnIiwgJGV4cGVjdGVkKSAmJiBpbl9hcnJheShzdWJzdHIoJHRoaXMtPmxleGVyLT5tYXRjaCwgMCwgMSksIGFycmF5KCciJywgIiciKSkpIHsKJG1lc3NhZ2UgPSAiSW52YWxpZCBzdHJpbmciOwppZiAoIiciID09PSBzdWJzdHIoJHRoaXMtPmxleGVyLT5tYXRjaCwgMCwgMSkpIHsKJG1lc3NhZ2UgLj0gIiwgaXQgYXBwZWFycyB5b3UgdXNlZCBzaW5nbGUgcXVvdGVzIGluc3RlYWQgb2YgZG91YmxlIHF1b3RlcyI7Cn0gZWxzZWlmIChwcmVnX21hdGNoKCd7Ii4rPyhcXFxcW14iYmZucnQvXFxcXHVdKX0nLCAkdGhpcy0+bGV4ZXItPmdldFVwY29taW5nSW5wdXQoKSwgJG1hdGNoKSkgewokbWVzc2FnZSAuPSAiLCBpdCBhcHBlYXJzIHlvdSBoYXZlIGFuIHVuZXNjYXBlZCBiYWNrc2xhc2ggYXQ6ICIuJG1hdGNoWzFdOwp9IGVsc2VpZiAocHJlZ19tYXRjaCgneyIoPzpbXiJdK3xcXFxcIikqJH1tJywgJHRoaXMtPmxleGVyLT5nZXRVcGNvbWluZ0lucHV0KCkpKSB7CiRtZXNzYWdlIC49ICIsIGl0IGFwcGVhcnMgeW91IGZvcmdvdCB0byB0ZXJtaW5hdGVkIHRoZSBzdHJpbmcsIG9yIGF0dGVtcHRlZCB0byB3cml0ZSBhIG11bHRpbGluZSBzdHJpbmcgd2hpY2ggaXMgaW52YWxpZCI7Cn0KfQoKJGVyclN0ciA9ICdQYXJzZSBlcnJvciBvbiBsaW5lICcgLiAoJHl5bGluZW5vKzEpIC4gIjpcbiI7CiRlcnJTdHIgLj0gJHRoaXMtPmxleGVyLT5zaG93UG9zaXRpb24oKSAuICJcbiI7CmlmICgkbWVzc2FnZSkgewokZXJyU3RyIC49ICRtZXNzYWdlOwp9IGVsc2UgewokZXJyU3RyIC49IChjb3VudCgkZXhwZWN0ZWQpID4gMSkgPyAiRXhwZWN0ZWQgb25lIG9mOiAiIDogIkV4cGVjdGVkOiAiOwokZXJyU3RyIC49IGltcGxvZGUoJywgJywgJGV4cGVjdGVkKTsKfQoKaWYgKCcsJyA9PT0gc3Vic3RyKHRyaW0oJHRoaXMtPmxleGVyLT5nZXRQYXN0SW5wdXQoKSksIC0xKSkgewokZXJyU3RyIC49ICIgLSBJdCBhcHBlYXJzIHlvdSBoYXZlIGFuIGV4dHJhIHRyYWlsaW5nIGNvbW1hIjsKfQoKJHRoaXMtPnBhcnNlRXJyb3IoJGVyclN0ciwgYXJyYXkoCid0ZXh0JyA9PiAkdGhpcy0+bGV4ZXItPm1hdGNoLAondG9rZW4nID0+ICFlbXB0eSgkdGhpcy0+dGVybWluYWxzX1skc3ltYm9sXSkgPyAkdGhpcy0+dGVybWluYWxzX1skc3ltYm9sXSA6ICRzeW1ib2wsCidsaW5lJyA9PiAkdGhpcy0+bGV4ZXItPnl5bGluZW5vLAonbG9jJyA9PiAkeXlsb2MsCidleHBlY3RlZCcgPT4gJGV4cGVjdGVkLAopKTsKfQoKCiBpZiAoJHJlY292ZXJpbmcgPT0gMykgewppZiAoJHN5bWJvbCA9PSAkRU9GKSB7CnRocm93IG5ldyBQYXJzaW5nRXhjZXB0aW9uKCRlcnJTdHIgPzogJ1BhcnNpbmcgaGFsdGVkLicpOwp9CgoKICR5eWxlbmcgPSAkdGhpcy0+bGV4ZXItPnl5bGVuZzsKJHl5dGV4dCA9ICR0aGlzLT5sZXhlci0+eXl0ZXh0OwokeXlsaW5lbm8gPSAkdGhpcy0+bGV4ZXItPnl5bGluZW5vOwokeXlsb2MgPSAkdGhpcy0+bGV4ZXItPnl5bGxvYzsKJHN5bWJvbCA9ICR0aGlzLT5sZXgoKTsKfQoKCiB3aGlsZSAodHJ1ZSkgewoKIGlmIChhcnJheV9rZXlfZXhpc3RzKCRURVJST1IsICR0aGlzLT50YWJsZVskc3RhdGVdKSkgewpicmVhazsKfQppZiAoJHN0YXRlID09IDApIHsKdGhyb3cgbmV3IFBhcnNpbmdFeGNlcHRpb24oJGVyclN0ciA/OiAnUGFyc2luZyBoYWx0ZWQuJyk7Cn0KJHRoaXMtPnBvcFN0YWNrKDEpOwokc3RhdGUgPSAkdGhpcy0+c3RhY2tbY291bnQoJHRoaXMtPnN0YWNrKS0xXTsKfQoKJHByZUVycm9yU3ltYm9sID0gJHN5bWJvbDsgCiAkc3ltYm9sID0gJFRFUlJPUjsgCiAkc3RhdGUgPSAkdGhpcy0+c3RhY2tbY291bnQoJHRoaXMtPnN0YWNrKS0xXTsKJGFjdGlvbiA9IGlzc2V0KCR0aGlzLT50YWJsZVskc3RhdGVdWyRURVJST1JdKSA/ICR0aGlzLT50YWJsZVskc3RhdGVdWyRURVJST1JdIDogZmFsc2U7CiRyZWNvdmVyaW5nID0gMzsgCiB9CgoKIGlmIChpc19hcnJheSgkYWN0aW9uWzBdKSAmJiBjb3VudCgkYWN0aW9uKSA+IDEpIHsKdGhyb3cgbmV3IFBhcnNpbmdFeGNlcHRpb24oJ1BhcnNlIEVycm9yOiBtdWx0aXBsZSBhY3Rpb25zIHBvc3NpYmxlIGF0IHN0YXRlOiAnIC4gJHN0YXRlIC4gJywgdG9rZW46ICcgLiAkc3ltYm9sKTsKfQoKc3dpdGNoICgkYWN0aW9uWzBdKSB7CmNhc2UgMTogCiAkdGhpcy0+c3RhY2tbXSA9ICRzeW1ib2w7CiR0aGlzLT52c3RhY2tbXSA9ICR0aGlzLT5sZXhlci0+eXl0ZXh0OwokdGhpcy0+bHN0YWNrW10gPSAkdGhpcy0+bGV4ZXItPnl5bGxvYzsKJHRoaXMtPnN0YWNrW10gPSAkYWN0aW9uWzFdOyAKICRzeW1ib2wgPSBudWxsOwppZiAoISRwcmVFcnJvclN5bWJvbCkgeyAKICR5eWxlbmcgPSAkdGhpcy0+bGV4ZXItPnl5bGVuZzsKJHl5dGV4dCA9ICR0aGlzLT5sZXhlci0+eXl0ZXh0OwokeXlsaW5lbm8gPSAkdGhpcy0+bGV4ZXItPnl5bGluZW5vOwokeXlsb2MgPSAkdGhpcy0+bGV4ZXItPnl5bGxvYzsKaWYgKCRyZWNvdmVyaW5nID4gMCkgewokcmVjb3ZlcmluZy0tOwp9Cn0gZWxzZSB7IAogJHN5bWJvbCA9ICRwcmVFcnJvclN5bWJvbDsKJHByZUVycm9yU3ltYm9sID0gbnVsbDsKfQpicmVhazsKCmNhc2UgMjogCiAkbGVuID0gJHRoaXMtPnByb2R1Y3Rpb25zX1skYWN0aW9uWzFdXVsxXTsKCgogJHl5dmFsLT50b2tlbiA9ICR0aGlzLT52c3RhY2tbY291bnQoJHRoaXMtPnZzdGFjaykgLSAkbGVuXTsgCiAKICR5eXZhbC0+c3RvcmUgPSBhcnJheSggCiAnZmlyc3RfbGluZScgPT4gJHRoaXMtPmxzdGFja1tjb3VudCgkdGhpcy0+bHN0YWNrKSAtICgkbGVuID86IDEpXVsnZmlyc3RfbGluZSddLAonbGFzdF9saW5lJyA9PiAkdGhpcy0+bHN0YWNrW2NvdW50KCR0aGlzLT5sc3RhY2spIC0gMV1bJ2xhc3RfbGluZSddLAonZmlyc3RfY29sdW1uJyA9PiAkdGhpcy0+bHN0YWNrW2NvdW50KCR0aGlzLT5sc3RhY2spIC0gKCRsZW4gPzogMSldWydmaXJzdF9jb2x1bW4nXSwKJ2xhc3RfY29sdW1uJyA9PiAkdGhpcy0+bHN0YWNrW2NvdW50KCR0aGlzLT5sc3RhY2spIC0gMV1bJ2xhc3RfY29sdW1uJ10sCik7CiRyID0gJHRoaXMtPnBlcmZvcm1BY3Rpb24oJHl5dmFsLCAkeXl0ZXh0LCAkeXlsZW5nLCAkeXlsaW5lbm8sICRhY3Rpb25bMV0sICR0aGlzLT52c3RhY2ssICR0aGlzLT5sc3RhY2spOwoKaWYgKCEkciBpbnN0YW5jZW9mIFVuZGVmaW5lZCkgewpyZXR1cm4gJHI7Cn0KCmlmICgkbGVuKSB7CiR0aGlzLT5wb3BTdGFjaygkbGVuKTsKfQoKJHRoaXMtPnN0YWNrW10gPSAkdGhpcy0+cHJvZHVjdGlvbnNfWyRhY3Rpb25bMV1dWzBdOyAKICR0aGlzLT52c3RhY2tbXSA9ICR5eXZhbC0+dG9rZW47CiR0aGlzLT5sc3RhY2tbXSA9ICR5eXZhbC0+c3RvcmU7CiRuZXdTdGF0ZSA9ICR0aGlzLT50YWJsZVskdGhpcy0+c3RhY2tbY291bnQoJHRoaXMtPnN0YWNrKS0yXV1bJHRoaXMtPnN0YWNrW2NvdW50KCR0aGlzLT5zdGFjayktMV1dOwokdGhpcy0+c3RhY2tbXSA9ICRuZXdTdGF0ZTsKYnJlYWs7CgpjYXNlIDM6IAoKcmV0dXJuIHRydWU7Cn0KfQoKcmV0dXJuIHRydWU7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZUVycm9yKCRzdHIsICRoYXNoKQp7CnRocm93IG5ldyBQYXJzaW5nRXhjZXB0aW9uKCRzdHIsICRoYXNoKTsKfQoKCiAKIAogcHJpdmF0ZSBmdW5jdGlvbiBwZXJmb3JtQWN0aW9uKHN0ZENsYXNzICR5eXZhbCwgJHl5dGV4dCwgJHl5bGVuZywgJHl5bGluZW5vLCAkeXlzdGF0ZSwgJiR0b2tlbnMpCnsKCiAkbGVuID0gY291bnQoJHRva2VucykgLSAxOwpzd2l0Y2ggKCR5eXN0YXRlKSB7CmNhc2UgMToKJHl5dGV4dCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygneyg/OlxcXFxbImJmbnJ0L1xcXFxdfFxcXFx1W2EtZkEtRjAtOV17NH0pfScsIGFycmF5KCR0aGlzLCAnc3RyaW5nSW50ZXJwb2xhdGlvbicpLCAkeXl0ZXh0KTsKJHl5dmFsLT50b2tlbiA9ICR5eXRleHQ7CmJyZWFrOwpjYXNlIDI6CmlmIChzdHJwb3MoJHl5dGV4dCwgJ2UnKSAhPT0gZmFsc2UgfHwgc3RycG9zKCR5eXRleHQsICdFJykgIT09IGZhbHNlKSB7CiR5eXZhbC0+dG9rZW4gPSBmbG9hdHZhbCgkeXl0ZXh0KTsKfSBlbHNlIHsKJHl5dmFsLT50b2tlbiA9IHN0cnBvcygkeXl0ZXh0LCAnLicpID09PSBmYWxzZSA/IGludHZhbCgkeXl0ZXh0KSA6IGZsb2F0dmFsKCR5eXRleHQpOwp9CmJyZWFrOwpjYXNlIDM6CiR5eXZhbC0+dG9rZW4gPSBudWxsOwpicmVhazsKY2FzZSA0OgokeXl2YWwtPnRva2VuID0gdHJ1ZTsKYnJlYWs7CmNhc2UgNToKJHl5dmFsLT50b2tlbiA9IGZhbHNlOwpicmVhazsKY2FzZSA2OgpyZXR1cm4gJHl5dmFsLT50b2tlbiA9ICR0b2tlbnNbJGxlbi0xXTsKY2FzZSAxMzoKJHl5dmFsLT50b2tlbiA9IG5ldyBzdGRDbGFzczsKYnJlYWs7CmNhc2UgMTQ6CiR5eXZhbC0+dG9rZW4gPSAkdG9rZW5zWyRsZW4tMV07CmJyZWFrOwpjYXNlIDE1OgokeXl2YWwtPnRva2VuID0gYXJyYXkoJHRva2Vuc1skbGVuLTJdLCAkdG9rZW5zWyRsZW5dKTsKYnJlYWs7CmNhc2UgMTY6CiR5eXZhbC0+dG9rZW4gPSBuZXcgc3RkQ2xhc3M7CiRwcm9wZXJ0eSA9ICR0b2tlbnNbJGxlbl1bMF0gPT09ICcnID8gJ19lbXB0eV8nIDogJHRva2Vuc1skbGVuXVswXTsKJHl5dmFsLT50b2tlbi0+JHByb3BlcnR5ID0gJHRva2Vuc1skbGVuXVsxXTsKYnJlYWs7CmNhc2UgMTc6CiR5eXZhbC0+dG9rZW4gPSAkdG9rZW5zWyRsZW4tMl07CiRrZXkgPSAkdG9rZW5zWyRsZW5dWzBdID09PSAnJyA/ICdfZW1wdHlfJyA6ICR0b2tlbnNbJGxlbl1bMF07CmlmICgoJHRoaXMtPmZsYWdzICYgc2VsZjo6REVURUNUX0tFWV9DT05GTElDVFMpICYmIGlzc2V0KCR0b2tlbnNbJGxlbi0yXS0+eyRrZXl9KSkgewokZXJyU3RyID0gJ1BhcnNlIGVycm9yIG9uIGxpbmUgJyAuICgkeXlsaW5lbm8rMSkgLiAiOlxuIjsKJGVyclN0ciAuPSAkdGhpcy0+bGV4ZXItPnNob3dQb3NpdGlvbigpIC4gIlxuIjsKJGVyclN0ciAuPSAiRHVwbGljYXRlIGtleTogIi4kdG9rZW5zWyRsZW5dWzBdOwp0aHJvdyBuZXcgUGFyc2luZ0V4Y2VwdGlvbigkZXJyU3RyKTsKfSBlbHNlaWYgKCgkdGhpcy0+ZmxhZ3MgJiBzZWxmOjpBTExPV19EVVBMSUNBVEVfS0VZUykgJiYgaXNzZXQoJHRva2Vuc1skbGVuLTJdLT57JGtleX0pKSB7CiRkdXBsaWNhdGVDb3VudCA9IDE7CmRvIHsKJGR1cGxpY2F0ZUtleSA9ICRrZXkgLiAnLicgLiAkZHVwbGljYXRlQ291bnQrKzsKfSB3aGlsZSAoaXNzZXQoJHRva2Vuc1skbGVuLTJdLT4kZHVwbGljYXRlS2V5KSk7CiRrZXkgPSAkZHVwbGljYXRlS2V5Owp9CiR0b2tlbnNbJGxlbi0yXS0+JGtleSA9ICR0b2tlbnNbJGxlbl1bMV07CmJyZWFrOwpjYXNlIDE4OgokeXl2YWwtPnRva2VuID0gYXJyYXkoKTsKYnJlYWs7CmNhc2UgMTk6CiR5eXZhbC0+dG9rZW4gPSAkdG9rZW5zWyRsZW4tMV07CmJyZWFrOwpjYXNlIDIwOgokeXl2YWwtPnRva2VuID0gYXJyYXkoJHRva2Vuc1skbGVuXSk7CmJyZWFrOwpjYXNlIDIxOgokdG9rZW5zWyRsZW4tMl1bXSA9ICR0b2tlbnNbJGxlbl07CiR5eXZhbC0+dG9rZW4gPSAkdG9rZW5zWyRsZW4tMl07CmJyZWFrOwp9CgpyZXR1cm4gbmV3IFVuZGVmaW5lZCgpOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIHN0cmluZ0ludGVycG9sYXRpb24oJG1hdGNoKQp7CnN3aXRjaCAoJG1hdGNoWzBdKSB7CmNhc2UgJ1xcXFwnOgpyZXR1cm4gJ1xcJzsKY2FzZSAnXCInOgpyZXR1cm4gJyInOwpjYXNlICdcYic6CnJldHVybiBjaHIoOCk7CmNhc2UgJ1xmJzoKcmV0dXJuIGNocigxMik7CmNhc2UgJ1xuJzoKcmV0dXJuICJcbiI7CmNhc2UgJ1xyJzoKcmV0dXJuICJcciI7CmNhc2UgJ1x0JzoKcmV0dXJuICJcdCI7CmNhc2UgJ1wvJzoKcmV0dXJuICIvIjsKZGVmYXVsdDoKcmV0dXJuIGh0bWxfZW50aXR5X2RlY29kZSgnJiN4Jy5sdHJpbShzdWJzdHIoJG1hdGNoWzBdLCAyKSwgJzAnKS4nOycsIDAsICdVVEYtOCcpOwp9Cn0KCnByaXZhdGUgZnVuY3Rpb24gcG9wU3RhY2soJG4pCnsKJHRoaXMtPnN0YWNrID0gYXJyYXlfc2xpY2UoJHRoaXMtPnN0YWNrLCAwLCAtICgyICogJG4pKTsKJHRoaXMtPnZzdGFjayA9IGFycmF5X3NsaWNlKCR0aGlzLT52c3RhY2ssIDAsIC0gJG4pOwokdGhpcy0+bHN0YWNrID0gYXJyYXlfc2xpY2UoJHRoaXMtPmxzdGFjaywgMCwgLSAkbik7Cn0KCnByaXZhdGUgZnVuY3Rpb24gbGV4KCkKewokdG9rZW4gPSAkdGhpcy0+bGV4ZXItPmxleCgpID86IDE7IAogCiBpZiAoIWlzX251bWVyaWMoJHRva2VuKSkgewokdG9rZW4gPSBpc3NldCgkdGhpcy0+c3ltYm9sc1skdG9rZW5dKSA/ICR0aGlzLT5zeW1ib2xzWyR0b2tlbl0gOiAkdG9rZW47Cn0KCnJldHVybiAkdG9rZW47Cn0KCnByaXZhdGUgZnVuY3Rpb24gZmFpbE9uQk9NKCRpbnB1dCkKewoKICRib20gPSAiXHhFRlx4QkJceEJGIjsKCmlmIChzdWJzdHIoJGlucHV0LCAwLCAzKSA9PT0gJGJvbSkgewokdGhpcy0+cGFyc2VFcnJvcigiQk9NIGRldGVjdGVkLCBtYWtlIHN1cmUgeW91ciBpbnB1dCBkb2VzIG5vdCBpbmNsdWRlIGEgVW5pY29kZSBCeXRlLU9yZGVyLU1hcmsiLCBhcnJheSgpKTsKfQp9Cn0KPD9waHAKCgoKCgoKCgoKCm5hbWVzcGFjZSBTZWxkXEpzb25MaW50OwoKCgoKCgpjbGFzcyBMZXhlcgp7CnByaXZhdGUgJEVPRiA9IDE7CnByaXZhdGUgJHJ1bGVzID0gYXJyYXkoCjAgPT4gJy9eXHMrLycsCjEgPT4gJy9eLT8oWzAtOV18WzEtOV1bMC05XSspKFwuWzAtOV0rKT8oW2VFXVsrLV0/WzAtOV0rKT9cYi8nLAoyID0+ICd7XiIoXFxcXFsiYmZucnQvXFxcXF18XFxcXHVbYS1mQS1GMC05XXs0fXxbXlwwLVx4MDlceDBhLVx4MWZcXFxcIl0pKiJ9JywKMyA9PiAnL15cey8nLAo0ID0+ICcvXlx9LycsCjUgPT4gJy9eXFsvJywKNiA9PiAnL15cXS8nLAo3ID0+ICcvXiwvJywKOCA9PiAnL146LycsCjkgPT4gJy9edHJ1ZVxiLycsCjEwID0+ICcvXmZhbHNlXGIvJywKMTEgPT4gJy9ebnVsbFxiLycsCjEyID0+ICcvXiQvJywKMTMgPT4gJy9eLi8nLAopOwoKcHJpdmF0ZSAkY29uZGl0aW9ucyA9IGFycmF5KAoiSU5JVElBTCIgPT4gYXJyYXkoCiJydWxlcyIgPT4gYXJyYXkoMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMyksCiJpbmNsdXNpdmUiID0+IHRydWUsCiksCik7Cgpwcml2YXRlICRjb25kaXRpb25TdGFjazsKcHJpdmF0ZSAkaW5wdXQ7CnByaXZhdGUgJG1vcmU7CnByaXZhdGUgJGRvbmU7CnByaXZhdGUgJG1hdGNoZWQ7CgpwdWJsaWMgJG1hdGNoOwpwdWJsaWMgJHl5bGluZW5vOwpwdWJsaWMgJHl5bGVuZzsKcHVibGljICR5eXRleHQ7CnB1YmxpYyAkeXlsbG9jOwoKcHVibGljIGZ1bmN0aW9uIGxleCgpCnsKJHIgPSAkdGhpcy0+bmV4dCgpOwppZiAoISRyIGluc3RhbmNlb2YgVW5kZWZpbmVkKSB7CnJldHVybiAkcjsKfQoKcmV0dXJuICR0aGlzLT5sZXgoKTsKfQoKcHVibGljIGZ1bmN0aW9uIHNldElucHV0KCRpbnB1dCkKewokdGhpcy0+aW5wdXQgPSAkaW5wdXQ7CiR0aGlzLT5tb3JlID0gZmFsc2U7CiR0aGlzLT5kb25lID0gZmFsc2U7CiR0aGlzLT55eWxpbmVubyA9ICR0aGlzLT55eWxlbmcgPSAwOwokdGhpcy0+eXl0ZXh0ID0gJHRoaXMtPm1hdGNoZWQgPSAkdGhpcy0+bWF0Y2ggPSAnJzsKJHRoaXMtPmNvbmRpdGlvblN0YWNrID0gYXJyYXkoJ0lOSVRJQUwnKTsKJHRoaXMtPnl5bGxvYyA9IGFycmF5KCdmaXJzdF9saW5lJyA9PiAxLCAnZmlyc3RfY29sdW1uJyA9PiAwLCAnbGFzdF9saW5lJyA9PiAxLCAnbGFzdF9jb2x1bW4nID0+IDApOwoKcmV0dXJuICR0aGlzOwp9CgpwdWJsaWMgZnVuY3Rpb24gc2hvd1Bvc2l0aW9uKCkKewokcHJlID0gc3RyX3JlcGxhY2UoIlxuIiwgJycsICR0aGlzLT5nZXRQYXN0SW5wdXQoKSk7CiRjID0gc3RyX3JlcGVhdCgnLScsIHN0cmxlbigkcHJlKSk7IAoKcmV0dXJuICRwcmUgLiBzdHJfcmVwbGFjZSgiXG4iLCAnJywgJHRoaXMtPmdldFVwY29taW5nSW5wdXQoKSkgLiAiXG4iIC4gJGMgLiAiXiI7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQYXN0SW5wdXQoKQp7CiRwYXN0ID0gc3Vic3RyKCR0aGlzLT5tYXRjaGVkLCAwLCBzdHJsZW4oJHRoaXMtPm1hdGNoZWQpIC0gc3RybGVuKCR0aGlzLT5tYXRjaCkpOwoKcmV0dXJuIChzdHJsZW4oJHBhc3QpID4gMjAgPyAnLi4uJyA6ICcnKSAuIHN1YnN0cigkcGFzdCwgLTIwKTsKfQoKcHVibGljIGZ1bmN0aW9uIGdldFVwY29taW5nSW5wdXQoKQp7CiRuZXh0ID0gJHRoaXMtPm1hdGNoOwppZiAoc3RybGVuKCRuZXh0KSA8IDIwKSB7CiRuZXh0IC49IHN1YnN0cigkdGhpcy0+aW5wdXQsIDAsIDIwIC0gc3RybGVuKCRuZXh0KSk7Cn0KCnJldHVybiBzdWJzdHIoJG5leHQsIDAsIDIwKSAuIChzdHJsZW4oJG5leHQpID4gMjAgPyAnLi4uJyA6ICcnKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlRXJyb3IoJHN0ciwgJGhhc2gpCnsKdGhyb3cgbmV3IFxFeGNlcHRpb24oJHN0cik7Cn0KCnByaXZhdGUgZnVuY3Rpb24gbmV4dCgpCnsKaWYgKCR0aGlzLT5kb25lKSB7CnJldHVybiAkdGhpcy0+RU9GOwp9CmlmICghJHRoaXMtPmlucHV0KSB7CiR0aGlzLT5kb25lID0gdHJ1ZTsKfQoKJHRva2VuID0gbnVsbDsKJG1hdGNoID0gbnVsbDsKJGNvbCA9IG51bGw7CiRsaW5lcyA9IG51bGw7CgppZiAoISR0aGlzLT5tb3JlKSB7CiR0aGlzLT55eXRleHQgPSAnJzsKJHRoaXMtPm1hdGNoID0gJyc7Cn0KCiRydWxlcyA9ICR0aGlzLT5nZXRDdXJyZW50UnVsZXMoKTsKJHJ1bGVzTGVuID0gY291bnQoJHJ1bGVzKTsKCmZvciAoJGk9MDsgJGkgPCAkcnVsZXNMZW47ICRpKyspIHsKaWYgKHByZWdfbWF0Y2goJHRoaXMtPnJ1bGVzWyRydWxlc1skaV1dLCAkdGhpcy0+aW5wdXQsICRtYXRjaCkpIHsKcHJlZ19tYXRjaF9hbGwoJy9cbi4qLycsICRtYXRjaFswXSwgJGxpbmVzKTsKJGxpbmVzID0gJGxpbmVzWzBdOwppZiAoJGxpbmVzKSB7CiR0aGlzLT55eWxpbmVubyArPSBjb3VudCgkbGluZXMpOwp9CgokdGhpcy0+eXlsbG9jID0gYXJyYXkoCidmaXJzdF9saW5lJyA9PiAkdGhpcy0+eXlsbG9jWydsYXN0X2xpbmUnXSwKJ2xhc3RfbGluZScgPT4gJHRoaXMtPnl5bGluZW5vKzEsCidmaXJzdF9jb2x1bW4nID0+ICR0aGlzLT55eWxsb2NbJ2xhc3RfY29sdW1uJ10sCidsYXN0X2NvbHVtbicgPT4gJGxpbmVzID8gc3RybGVuKCRsaW5lc1tjb3VudCgkbGluZXMpIC0gMV0pIC0gMSA6ICR0aGlzLT55eWxsb2NbJ2xhc3RfY29sdW1uJ10gKyBzdHJsZW4oJG1hdGNoWzBdKSwKKTsKJHRoaXMtPnl5dGV4dCAuPSAkbWF0Y2hbMF07CiR0aGlzLT5tYXRjaCAuPSAkbWF0Y2hbMF07CiR0aGlzLT5tYXRjaGVzID0gJG1hdGNoOwokdGhpcy0+eXlsZW5nID0gc3RybGVuKCR0aGlzLT55eXRleHQpOwokdGhpcy0+bW9yZSA9IGZhbHNlOwokdGhpcy0+aW5wdXQgPSBzdWJzdHIoJHRoaXMtPmlucHV0LCBzdHJsZW4oJG1hdGNoWzBdKSk7CiR0aGlzLT5tYXRjaGVkIC49ICRtYXRjaFswXTsKJHRva2VuID0gJHRoaXMtPnBlcmZvcm1BY3Rpb24oJHJ1bGVzWyRpXSwgJHRoaXMtPmNvbmRpdGlvblN0YWNrW2NvdW50KCR0aGlzLT5jb25kaXRpb25TdGFjayktMV0pOwppZiAoJHRva2VuKSB7CnJldHVybiAkdG9rZW47Cn0KCnJldHVybiBuZXcgVW5kZWZpbmVkKCk7Cn0KfQoKaWYgKCR0aGlzLT5pbnB1dCA9PT0gIiIpIHsKcmV0dXJuICR0aGlzLT5FT0Y7Cn0KCiR0aGlzLT5wYXJzZUVycm9yKAonTGV4aWNhbCBlcnJvciBvbiBsaW5lICcgLiAoJHRoaXMtPnl5bGluZW5vKzEpIC4gIi4gVW5yZWNvZ25pemVkIHRleHQuXG4iIC4gJHRoaXMtPnNob3dQb3NpdGlvbigpLAphcnJheSgKJ3RleHQnID0+ICIiLAondG9rZW4nID0+IG51bGwsCidsaW5lJyA9PiAkdGhpcy0+eXlsaW5lbm8sCikKKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBiZWdpbigkY29uZGl0aW9uKQp7CiR0aGlzLT5jb25kaXRpb25TdGFja1tdID0gJGNvbmRpdGlvbjsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBwb3BTdGF0ZSgpCnsKcmV0dXJuIGFycmF5X3BvcCgkdGhpcy0+Y29uZGl0aW9uU3RhY2spOwp9Cgpwcml2YXRlIGZ1bmN0aW9uIGdldEN1cnJlbnRSdWxlcygpCnsKcmV0dXJuICR0aGlzLT5jb25kaXRpb25zWyR0aGlzLT5jb25kaXRpb25TdGFja1tjb3VudCgkdGhpcy0+Y29uZGl0aW9uU3RhY2spLTFdXVsncnVsZXMnXTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBwZXJmb3JtQWN0aW9uKCRhdm9pZGluZ19uYW1lX2NvbGxpc2lvbnMsICRZWV9TVEFSVCkKewokWVlTVEFURSA9ICRZWV9TVEFSVDsKc3dpdGNoICgkYXZvaWRpbmdfbmFtZV9jb2xsaXNpb25zKSB7CmNhc2UgMDoKYnJlYWs7CmNhc2UgMToKcmV0dXJuIDY7CmJyZWFrOwpjYXNlIDI6CiR0aGlzLT55eXRleHQgPSBzdWJzdHIoJHRoaXMtPnl5dGV4dCwgMSwgJHRoaXMtPnl5bGVuZy0yKTsKCnJldHVybiA0OwpjYXNlIDM6CnJldHVybiAxNzsKY2FzZSA0OgpyZXR1cm4gMTg7CmNhc2UgNToKcmV0dXJuIDIzOwpjYXNlIDY6CnJldHVybiAyNDsKY2FzZSA3OgpyZXR1cm4gMjI7CmNhc2UgODoKcmV0dXJuIDIxOwpjYXNlIDk6CnJldHVybiAxMDsKY2FzZSAxMDoKcmV0dXJuIDExOwpjYXNlIDExOgpyZXR1cm4gODsKY2FzZSAxMjoKcmV0dXJuIDE0OwpjYXNlIDEzOgpyZXR1cm4gJ0lOVkFMSUQnOwp9Cn0KfQo8P3BocAoKCgoKCgoKCgoKbmFtZXNwYWNlIFNlbGRcSnNvbkxpbnQ7CgpjbGFzcyBQYXJzaW5nRXhjZXB0aW9uIGV4dGVuZHMgXEV4Y2VwdGlvbgp7CnByb3RlY3RlZCAkZGV0YWlsczsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkbWVzc2FnZSwgJGRldGFpbHMgPSBhcnJheSgpKQp7CiR0aGlzLT5kZXRhaWxzID0gJGRldGFpbHM7CnBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UpOwp9CgpwdWJsaWMgZnVuY3Rpb24gZ2V0RGV0YWlscygpCnsKcmV0dXJuICR0aGlzLT5kZXRhaWxzOwp9Cn0KPD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYTsKCnVzZSBKc29uU2NoZW1hXFVyaVxVcmlSZXRyaWV2ZXI7CgoKCgoKCgpjbGFzcyBSZWZSZXNvbHZlcgp7CgoKCgoKCgpwcm90ZWN0ZWQgc3RhdGljICRkZXB0aCA9IDA7CgoKCgpwcm90ZWN0ZWQgJHVyaVJldHJpZXZlciA9IG51bGw7CgoKCgpwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHJldHJpZXZlciA9IG51bGwpCnsKJHRoaXMtPnVyaVJldHJpZXZlciA9ICRyZXRyaWV2ZXI7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZmV0Y2hSZWYoJHJlZiwgJHNvdXJjZVVyaSkKewokcmV0cmlldmVyID0gJHRoaXMtPmdldFVyaVJldHJpZXZlcigpOwokanNvblNjaGVtYSA9ICRyZXRyaWV2ZXItPnJldHJpZXZlKCRyZWYsICRzb3VyY2VVcmkpOwokdGhpcy0+cmVzb2x2ZSgkanNvblNjaGVtYSk7CgpyZXR1cm4gJGpzb25TY2hlbWE7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVcmlSZXRyaWV2ZXIoKQp7CmlmIChpc19udWxsKCR0aGlzLT51cmlSZXRyaWV2ZXIpKSB7CiR0aGlzLT5zZXRVcmlSZXRyaWV2ZXIobmV3IFVyaVJldHJpZXZlcik7Cn0KCnJldHVybiAkdGhpcy0+dXJpUmV0cmlldmVyOwp9CgoKCgoKCgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXNvbHZlKCRzY2hlbWEsICRzb3VyY2VVcmkgPSBudWxsKQp7CmlmIChzZWxmOjokZGVwdGggPiA3KSB7CnJldHVybjsKfQorK3NlbGY6OiRkZXB0aDsKCmlmICghIGlzX29iamVjdCgkc2NoZW1hKSkgewotLXNlbGY6OiRkZXB0aDsKcmV0dXJuOwp9CgppZiAobnVsbCA9PT0gJHNvdXJjZVVyaSAmJiAhIGVtcHR5KCRzY2hlbWEtPmlkKSkgewokc291cmNlVXJpID0gJHNjaGVtYS0+aWQ7Cn0KCgogJHRoaXMtPnJlc29sdmVSZWYoJHNjaGVtYSwgJHNvdXJjZVVyaSk7CgoKIAogZm9yZWFjaCAoYXJyYXkoJ2FkZGl0aW9uYWxJdGVtcycsICdhZGRpdGlvbmFsUHJvcGVydGllcycsICdleHRlbmRzJywgJ2l0ZW1zJykgYXMgJHByb3BlcnR5TmFtZSkgewokdGhpcy0+cmVzb2x2ZVByb3BlcnR5KCRzY2hlbWEsICRwcm9wZXJ0eU5hbWUsICRzb3VyY2VVcmkpOwp9CgoKIAogCiBmb3JlYWNoIChhcnJheSgnZGlzYWxsb3cnLCAnZXh0ZW5kcycsICdpdGVtcycsICd0eXBlJywgJ2FsbE9mJywgJ2FueU9mJywgJ29uZU9mJykgYXMgJHByb3BlcnR5TmFtZSkgewokdGhpcy0+cmVzb2x2ZUFycmF5T2ZTY2hlbWFzKCRzY2hlbWEsICRwcm9wZXJ0eU5hbWUsICRzb3VyY2VVcmkpOwp9CgoKIGZvcmVhY2ggKGFycmF5KCdkZXBlbmRlbmNpZXMnLCAncGF0dGVyblByb3BlcnRpZXMnLCAncHJvcGVydGllcycpIGFzICRwcm9wZXJ0eU5hbWUpIHsKJHRoaXMtPnJlc29sdmVPYmplY3RPZlNjaGVtYXMoJHNjaGVtYSwgJHByb3BlcnR5TmFtZSwgJHNvdXJjZVVyaSk7Cn0KCi0tc2VsZjo6JGRlcHRoOwp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXNvbHZlQXJyYXlPZlNjaGVtYXMoJHNjaGVtYSwgJHByb3BlcnR5TmFtZSwgJHNvdXJjZVVyaSkKewppZiAoISBpc3NldCgkc2NoZW1hLT4kcHJvcGVydHlOYW1lKSB8fCAhIGlzX2FycmF5KCRzY2hlbWEtPiRwcm9wZXJ0eU5hbWUpKSB7CnJldHVybjsKfQoKZm9yZWFjaCAoJHNjaGVtYS0+JHByb3BlcnR5TmFtZSBhcyAkcG9zc2libHlTY2hlbWEpIHsKJHRoaXMtPnJlc29sdmUoJHBvc3NpYmx5U2NoZW1hLCAkc291cmNlVXJpKTsKfQp9CgoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXNvbHZlT2JqZWN0T2ZTY2hlbWFzKCRzY2hlbWEsICRwcm9wZXJ0eU5hbWUsICRzb3VyY2VVcmkpCnsKaWYgKCEgaXNzZXQoJHNjaGVtYS0+JHByb3BlcnR5TmFtZSkgfHwgISBpc19vYmplY3QoJHNjaGVtYS0+JHByb3BlcnR5TmFtZSkpIHsKcmV0dXJuOwp9Cgpmb3JlYWNoIChnZXRfb2JqZWN0X3ZhcnMoJHNjaGVtYS0+JHByb3BlcnR5TmFtZSkgYXMgJHBvc3NpYmx5U2NoZW1hKSB7CiR0aGlzLT5yZXNvbHZlKCRwb3NzaWJseVNjaGVtYSwgJHNvdXJjZVVyaSk7Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZVByb3BlcnR5KCRzY2hlbWEsICRwcm9wZXJ0eU5hbWUsICRzb3VyY2VVcmkpCnsKaWYgKCEgaXNzZXQoJHNjaGVtYS0+JHByb3BlcnR5TmFtZSkpIHsKcmV0dXJuOwp9CgokdGhpcy0+cmVzb2x2ZSgkc2NoZW1hLT4kcHJvcGVydHlOYW1lLCAkc291cmNlVXJpKTsKfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZVJlZigkc2NoZW1hLCAkc291cmNlVXJpKQp7CiRyZWYgPSAnJHJlZic7CgppZiAoZW1wdHkoJHNjaGVtYS0+JHJlZikpIHsKcmV0dXJuOwp9CgokcmVmU2NoZW1hID0gJHRoaXMtPmZldGNoUmVmKCRzY2hlbWEtPiRyZWYsICRzb3VyY2VVcmkpOwp1bnNldCgkc2NoZW1hLT4kcmVmKTsKCgogZm9yZWFjaCAoZ2V0X29iamVjdF92YXJzKCRyZWZTY2hlbWEpIGFzICRwcm9wID0+ICR2YWx1ZSkgewokc2NoZW1hLT4kcHJvcCA9ICR2YWx1ZTsKfQp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0VXJpUmV0cmlldmVyKFVyaVJldHJpZXZlciAkcmV0cmlldmVyKQp7CiR0aGlzLT51cmlSZXRyaWV2ZXIgPSAkcmV0cmlldmVyOwoKcmV0dXJuICR0aGlzOwp9Cn0KPD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxDb25zdHJhaW50czsKCnVzZSBKc29uU2NoZW1hXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CnVzZSBKc29uU2NoZW1hXFVyaVxVcmlSZXNvbHZlcjsKCgoKCgoKCmNsYXNzIFVuZGVmaW5lZCBleHRlbmRzIENvbnN0cmFpbnQKewoKCgpwdWJsaWMgZnVuY3Rpb24gY2hlY2soJHZhbHVlLCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKaWYgKGlzX251bGwoJHNjaGVtYSkpIHsKcmV0dXJuOwp9CgppZiAoIWlzX29iamVjdCgkc2NoZW1hKSkgewp0aHJvdyBuZXcgSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKAonR2l2ZW4gc2NoZW1hIG11c3QgYmUgYW4gb2JqZWN0IGluICcgLiAkcGF0aAouICcgYnV0IGlzIGEgJyAuIGdldHR5cGUoJHNjaGVtYSkKKTsKfQoKJGkgPSBpc19udWxsKCRpKSA/ICIiIDogJGk7CiRwYXRoID0gJHRoaXMtPmluY3JlbWVudFBhdGgoJHBhdGgsICRpKTsKCgogJHRoaXMtPnZhbGlkYXRlQ29tbW9uUHJvcGVydGllcygkdmFsdWUsICRzY2hlbWEsICRwYXRoKTsKCgogJHRoaXMtPnZhbGlkYXRlT2ZQcm9wZXJ0aWVzKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgpOwoKCiAkdGhpcy0+dmFsaWRhdGVUeXBlcygkdmFsdWUsICRzY2hlbWEsICRwYXRoLCAkaSk7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlVHlwZXMoJHZhbHVlLCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKCiBpZiAoaXNfYXJyYXkoJHZhbHVlKSkgewokdGhpcy0+Y2hlY2tBcnJheSgkdmFsdWUsICRzY2hlbWEsICRwYXRoLCAkaSk7Cn0KCgogaWYgKGlzX29iamVjdCgkdmFsdWUpICYmIChpc3NldCgkc2NoZW1hLT5wcm9wZXJ0aWVzKSB8fCBpc3NldCgkc2NoZW1hLT5wYXR0ZXJuUHJvcGVydGllcykpKSB7CiR0aGlzLT5jaGVja09iamVjdCgKJHZhbHVlLAppc3NldCgkc2NoZW1hLT5wcm9wZXJ0aWVzKSA/ICRzY2hlbWEtPnByb3BlcnRpZXMgOiBudWxsLAokcGF0aCwKaXNzZXQoJHNjaGVtYS0+YWRkaXRpb25hbFByb3BlcnRpZXMpID8gJHNjaGVtYS0+YWRkaXRpb25hbFByb3BlcnRpZXMgOiBudWxsLAppc3NldCgkc2NoZW1hLT5wYXR0ZXJuUHJvcGVydGllcykgPyAkc2NoZW1hLT5wYXR0ZXJuUHJvcGVydGllcyA6IG51bGwKKTsKfQoKCiBpZiAoaXNfc3RyaW5nKCR2YWx1ZSkpIHsKJHRoaXMtPmNoZWNrU3RyaW5nKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgsICRpKTsKfQoKCiBpZiAoaXNfbnVtZXJpYygkdmFsdWUpKSB7CiR0aGlzLT5jaGVja051bWJlcigkdmFsdWUsICRzY2hlbWEsICRwYXRoLCAkaSk7Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPmVudW0pKSB7CiR0aGlzLT5jaGVja0VudW0oJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGkpOwp9Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlQ29tbW9uUHJvcGVydGllcygkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gIiIpCnsKCiBpZiAoaXNzZXQoJHNjaGVtYS0+ZXh0ZW5kcykpIHsKaWYgKGlzX3N0cmluZygkc2NoZW1hLT5leHRlbmRzKSkgewokc2NoZW1hLT5leHRlbmRzID0gJHRoaXMtPnZhbGlkYXRlVXJpKCRzY2hlbWEsICRzY2hlbWEtPmV4dGVuZHMpOwp9CmlmIChpc19hcnJheSgkc2NoZW1hLT5leHRlbmRzKSkgewpmb3JlYWNoICgkc2NoZW1hLT5leHRlbmRzIGFzICRleHRlbmRzKSB7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsICRleHRlbmRzLCAkcGF0aCwgJGkpOwp9Cn0gZWxzZSB7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsICRzY2hlbWEtPmV4dGVuZHMsICRwYXRoLCAkaSk7Cn0KfQoKCiBpZiAoaXNfb2JqZWN0KCR2YWx1ZSkpIHsKaWYgKGlzc2V0KCRzY2hlbWEtPnJlcXVpcmVkKSAmJiBpc19hcnJheSgkc2NoZW1hLT5yZXF1aXJlZCkgKSB7CgogZm9yZWFjaCAoJHNjaGVtYS0+cmVxdWlyZWQgYXMgJHJlcXVpcmVkKSB7CmlmICghcHJvcGVydHlfZXhpc3RzKCR2YWx1ZSwgJHJlcXVpcmVkKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJ0aGUgcHJvcGVydHkgIiAuICRyZXF1aXJlZCAuICIgaXMgcmVxdWlyZWQiKTsKfQp9Cn0gZWxzZSBpZiAoaXNzZXQoJHNjaGVtYS0+cmVxdWlyZWQpKSB7CgogaWYgKCAkc2NoZW1hLT5yZXF1aXJlZCAmJiAkdmFsdWUgaW5zdGFuY2VvZiBVbmRlZmluZWQpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiaXMgbWlzc2luZyBhbmQgaXQgaXMgcmVxdWlyZWQiKTsKfQp9Cn0KCgogaWYgKCEoJHZhbHVlIGluc3RhbmNlb2YgVW5kZWZpbmVkKSkgewokdGhpcy0+Y2hlY2tUeXBlKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgpOwp9CgoKIGlmIChpc3NldCgkc2NoZW1hLT5kaXNhbGxvdykpIHsKJGluaXRFcnJvcnMgPSAkdGhpcy0+Z2V0RXJyb3JzKCk7CgokdHlwZVNjaGVtYSA9IG5ldyBcc3RkQ2xhc3MoKTsKJHR5cGVTY2hlbWEtPnR5cGUgPSAkc2NoZW1hLT5kaXNhbGxvdzsKJHRoaXMtPmNoZWNrVHlwZSgkdmFsdWUsICR0eXBlU2NoZW1hLCAkcGF0aCk7CgoKIGlmIChjb3VudCgkdGhpcy0+Z2V0RXJyb3JzKCkpID09IGNvdW50KCRpbml0RXJyb3JzKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJkaXNhbGxvd2VkIHZhbHVlIHdhcyBtYXRjaGVkIik7Cn0gZWxzZSB7CiR0aGlzLT5lcnJvcnMgPSAkaW5pdEVycm9yczsKfQp9CgppZiAoaXNzZXQoJHNjaGVtYS0+bm90KSkgewokaW5pdEVycm9ycyA9ICR0aGlzLT5nZXRFcnJvcnMoKTsKJHRoaXMtPmNoZWNrVW5kZWZpbmVkKCR2YWx1ZSwgJHNjaGVtYS0+bm90LCAkcGF0aCwgJGkpOwoKCiBpZiAoY291bnQoJHRoaXMtPmdldEVycm9ycygpKSA9PSBjb3VudCgkaW5pdEVycm9ycykpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAibWF0Y2hlZCBhIHNjaGVtYSB3aGljaCBpdCBzaG91bGQgbm90Iik7Cn0gZWxzZSB7CiR0aGlzLT5lcnJvcnMgPSAkaW5pdEVycm9yczsKfQp9CgoKIGlmIChpc19vYmplY3QoJHZhbHVlKSkgewppZiAoaXNzZXQoJHNjaGVtYS0+bWluUHJvcGVydGllcykpIHsKaWYgKGNvdW50KGdldF9vYmplY3RfdmFycygkdmFsdWUpKSA8ICRzY2hlbWEtPm1pblByb3BlcnRpZXMpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAibXVzdCBjb250YWluIGEgbWluaW11bSBvZiAiIC4gJHNjaGVtYS0+bWluUHJvcGVydGllcyAuICIgcHJvcGVydGllcyIpOwp9Cn0KaWYgKGlzc2V0KCRzY2hlbWEtPm1heFByb3BlcnRpZXMpKSB7CmlmIChjb3VudChnZXRfb2JqZWN0X3ZhcnMoJHZhbHVlKSkgPiAkc2NoZW1hLT5tYXhQcm9wZXJ0aWVzKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIm11c3QgY29udGFpbiBubyBtb3JlIHRoYW4gIiAuICRzY2hlbWEtPm1heFByb3BlcnRpZXMgLiAiIHByb3BlcnRpZXMiKTsKfQp9Cn0KCgogaWYgKGlzX29iamVjdCgkdmFsdWUpICYmIGlzc2V0KCRzY2hlbWEtPmRlcGVuZGVuY2llcykpIHsKJHRoaXMtPnZhbGlkYXRlRGVwZW5kZW5jaWVzKCR2YWx1ZSwgJHNjaGVtYS0+ZGVwZW5kZW5jaWVzLCAkcGF0aCk7Cn0KfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVPZlByb3BlcnRpZXMoJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGkgPSAiIikKewoKIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBVbmRlZmluZWQpIHsKcmV0dXJuOwp9CgppZiAoaXNzZXQoJHNjaGVtYS0+YWxsT2YpKSB7CiRpc1ZhbGlkID0gdHJ1ZTsKZm9yZWFjaCAoJHNjaGVtYS0+YWxsT2YgYXMgJGFsbE9mKSB7CiRpbml0RXJyb3JzID0gJHRoaXMtPmdldEVycm9ycygpOwokdGhpcy0+Y2hlY2tVbmRlZmluZWQoJHZhbHVlLCAkYWxsT2YsICRwYXRoLCAkaSk7CiRpc1ZhbGlkID0gJGlzVmFsaWQgJiYgKGNvdW50KCR0aGlzLT5nZXRFcnJvcnMoKSkgPT0gY291bnQoJGluaXRFcnJvcnMpKTsKfQppZiAoISRpc1ZhbGlkKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgImZhaWxlZCB0byBtYXRjaCBhbGwgc2NoZW1hcyIpOwp9Cn0KCmlmIChpc3NldCgkc2NoZW1hLT5hbnlPZikpIHsKJGlzVmFsaWQgPSBmYWxzZTsKJHN0YXJ0RXJyb3JzID0gJHRoaXMtPmdldEVycm9ycygpOwpmb3JlYWNoICgkc2NoZW1hLT5hbnlPZiBhcyAkYW55T2YpIHsKJGluaXRFcnJvcnMgPSAkdGhpcy0+Z2V0RXJyb3JzKCk7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsICRhbnlPZiwgJHBhdGgsICRpKTsKaWYgKCRpc1ZhbGlkID0gKGNvdW50KCR0aGlzLT5nZXRFcnJvcnMoKSkgPT0gY291bnQoJGluaXRFcnJvcnMpKSkgewpicmVhazsKfQp9CmlmICghJGlzVmFsaWQpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiZmFpbGVkIHRvIG1hdGNoIGF0IGxlYXN0IG9uZSBzY2hlbWEiKTsKfSBlbHNlIHsKJHRoaXMtPmVycm9ycyA9ICRzdGFydEVycm9yczsKfQp9CgppZiAoaXNzZXQoJHNjaGVtYS0+b25lT2YpKSB7CiRtYXRjaGVkU2NoZW1hcyA9IDA7CiRzdGFydEVycm9ycyA9ICR0aGlzLT5nZXRFcnJvcnMoKTsKZm9yZWFjaCAoJHNjaGVtYS0+b25lT2YgYXMgJG9uZU9mKSB7CiRpbml0RXJyb3JzID0gJHRoaXMtPmdldEVycm9ycygpOwokdGhpcy0+Y2hlY2tVbmRlZmluZWQoJHZhbHVlLCAkb25lT2YsICRwYXRoLCAkaSk7CmlmIChjb3VudCgkdGhpcy0+Z2V0RXJyb3JzKCkpID09IGNvdW50KCRpbml0RXJyb3JzKSkgewokbWF0Y2hlZFNjaGVtYXMrKzsKfQp9CmlmICgkbWF0Y2hlZFNjaGVtYXMgIT09IDEpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiZmFpbGVkIHRvIG1hdGNoIGV4YWN0bHkgb25lIHNjaGVtYSIpOwp9IGVsc2UgewokdGhpcy0+ZXJyb3JzID0gJHN0YXJ0RXJyb3JzOwp9Cn0KfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVEZXBlbmRlbmNpZXMoJHZhbHVlLCAkZGVwZW5kZW5jaWVzLCAkcGF0aCwgJGkgPSAiIikKewpmb3JlYWNoICgkZGVwZW5kZW5jaWVzIGFzICRrZXkgPT4gJGRlcGVuZGVuY3kpIHsKaWYgKHByb3BlcnR5X2V4aXN0cygkdmFsdWUsICRrZXkpKSB7CmlmIChpc19zdHJpbmcoJGRlcGVuZGVuY3kpKSB7CgogaWYgKCFwcm9wZXJ0eV9leGlzdHMoJHZhbHVlLCAkZGVwZW5kZW5jeSkpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiJGtleSBkZXBlbmRzIG9uICRkZXBlbmRlbmN5IGFuZCAkZGVwZW5kZW5jeSBpcyBtaXNzaW5nIik7Cn0KfSBlbHNlIGlmIChpc19hcnJheSgkZGVwZW5kZW5jeSkpIHsKCiBmb3JlYWNoICgkZGVwZW5kZW5jeSBhcyAkZCkgewppZiAoIXByb3BlcnR5X2V4aXN0cygkdmFsdWUsICRkKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICIka2V5IGRlcGVuZHMgb24gJGQgYW5kICRkIGlzIG1pc3NpbmciKTsKfQp9Cn0gZWxzZSBpZiAoaXNfb2JqZWN0KCRkZXBlbmRlbmN5KSkgewoKICR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsICRkZXBlbmRlbmN5LCAkcGF0aCwgJGkpOwp9Cn0KfQp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVVcmkoJHNjaGVtYSwgJHNjaGVtYVVyaSA9IG51bGwpCnsKJHJlc29sdmVyID0gbmV3IFVyaVJlc29sdmVyKCk7CiRyZXRyaWV2ZXIgPSAkdGhpcy0+Z2V0VXJpUmV0cmlldmVyKCk7CgokanNvblNjaGVtYSA9IG51bGw7CmlmICgkcmVzb2x2ZXItPmlzVmFsaWQoJHNjaGVtYVVyaSkpIHsKJHNjaGVtYUlkID0gcHJvcGVydHlfZXhpc3RzKCRzY2hlbWEsICdpZCcpID8gJHNjaGVtYS0+aWQgOiBudWxsOwokanNvblNjaGVtYSA9ICRyZXRyaWV2ZXItPnJldHJpZXZlKCRzY2hlbWFJZCwgJHNjaGVtYVVyaSk7Cn0KCnJldHVybiAkanNvblNjaGVtYTsKfQp9Cjw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcQ29uc3RyYWludHM7Cgp1c2UgSnNvblNjaGVtYVxFeGNlcHRpb25cSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uOwoKCgoKCgoKY2xhc3MgVHlwZSBleHRlbmRzIENvbnN0cmFpbnQKewoKCgpwdWJsaWMgZnVuY3Rpb24gY2hlY2soJHZhbHVlID0gbnVsbCwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CiR0eXBlID0gaXNzZXQoJHNjaGVtYS0+dHlwZSkgPyAkc2NoZW1hLT50eXBlIDogbnVsbDsKJGlzVmFsaWQgPSB0cnVlOwoKaWYgKGlzX2FycmF5KCR0eXBlKSkgewoKICR2YWxpZGF0ZWRPbmVUeXBlID0gZmFsc2U7CiRlcnJvcnMgPSBhcnJheSgpOwpmb3JlYWNoICgkdHlwZSBhcyAkdHApIHsKJHZhbGlkYXRvciA9IG5ldyBUeXBlKCR0aGlzLT5jaGVja01vZGUpOwokc3ViU2NoZW1hID0gbmV3IFxzdGRDbGFzcygpOwokc3ViU2NoZW1hLT50eXBlID0gJHRwOwokdmFsaWRhdG9yLT5jaGVjaygkdmFsdWUsICRzdWJTY2hlbWEsICRwYXRoLCBudWxsKTsKJGVycm9yID0gJHZhbGlkYXRvci0+Z2V0RXJyb3JzKCk7CgppZiAoIWNvdW50KCRlcnJvcikpIHsKJHZhbGlkYXRlZE9uZVR5cGUgPSB0cnVlOwpicmVhazsKfQoKJGVycm9ycyA9ICRlcnJvcjsKfQoKaWYgKCEkdmFsaWRhdGVkT25lVHlwZSkgewpyZXR1cm4gJHRoaXMtPmFkZEVycm9ycygkZXJyb3JzKTsKfQp9IGVsc2VpZiAoaXNfb2JqZWN0KCR0eXBlKSkgewokdGhpcy0+Y2hlY2tVbmRlZmluZWQoJHZhbHVlLCAkdHlwZSwgJHBhdGgpOwp9IGVsc2UgewokaXNWYWxpZCA9ICR0aGlzLT52YWxpZGF0ZVR5cGUoJHZhbHVlLCAkdHlwZSk7Cn0KCmlmICgkaXNWYWxpZCA9PT0gZmFsc2UpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCBnZXR0eXBlKCR2YWx1ZSkgLiAiIHZhbHVlIGZvdW5kLCBidXQgYSAiIC4gJHR5cGUgLiAiIGlzIHJlcXVpcmVkIik7Cn0KfQoKCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZVR5cGUoJHZhbHVlLCAkdHlwZSkKewoKIGlmICghJHR5cGUpIHsKcmV0dXJuIHRydWU7Cn0KCmlmICgnaW50ZWdlcicgPT09ICR0eXBlKSB7CnJldHVybiBpc19pbnQoJHZhbHVlKTsKfQoKaWYgKCdudW1iZXInID09PSAkdHlwZSkgewpyZXR1cm4gaXNfbnVtZXJpYygkdmFsdWUpICYmICFpc19zdHJpbmcoJHZhbHVlKTsKfQoKaWYgKCdib29sZWFuJyA9PT0gJHR5cGUpIHsKcmV0dXJuIGlzX2Jvb2woJHZhbHVlKTsKfQoKaWYgKCdvYmplY3QnID09PSAkdHlwZSkgewpyZXR1cm4gaXNfb2JqZWN0KCR2YWx1ZSk7CgogfQoKaWYgKCdhcnJheScgPT09ICR0eXBlKSB7CnJldHVybiBpc19hcnJheSgkdmFsdWUpOwp9CgppZiAoJ3N0cmluZycgPT09ICR0eXBlKSB7CnJldHVybiBpc19zdHJpbmcoJHZhbHVlKTsKfQoKaWYgKCdudWxsJyA9PT0gJHR5cGUpIHsKcmV0dXJuIGlzX251bGwoJHZhbHVlKTsKfQoKaWYgKCdhbnknID09PSAkdHlwZSkgewpyZXR1cm4gdHJ1ZTsKfQoKdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigoaXNfb2JqZWN0KCR2YWx1ZSkgPyAnb2JqZWN0JyA6ICR2YWx1ZSkgLiAnIGlzIGFuIGludmFsaWQgdHlwZSBmb3IgJyAuICR0eXBlKTsKfQp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxDb25zdHJhaW50czsKCnVzZSBKc29uU2NoZW1hXEV4Y2VwdGlvblxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb247CgoKCgoKCgpjbGFzcyBTY2hlbWEgZXh0ZW5kcyBDb25zdHJhaW50CnsKCgoKcHVibGljIGZ1bmN0aW9uIGNoZWNrKCRlbGVtZW50LCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKaWYgKCRzY2hlbWEgIT09IG51bGwpIHsKCiAkdGhpcy0+Y2hlY2tVbmRlZmluZWQoJGVsZW1lbnQsICRzY2hlbWEsICcnLCAnJyk7Cn0gZWxzZWlmIChwcm9wZXJ0eV9leGlzdHMoJGVsZW1lbnQsICR0aGlzLT5pbmxpbmVTY2hlbWFQcm9wZXJ0eSkpIHsKCiAkdGhpcy0+Y2hlY2tVbmRlZmluZWQoJGVsZW1lbnQsICRlbGVtZW50LT57JHRoaXMtPmlubGluZVNjaGVtYVByb3BlcnR5fSwgJycsICcnKTsKfSBlbHNlIHsKdGhyb3cgbmV3IEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbignbm8gc2NoZW1hIGZvdW5kIHRvIHZlcmlmeSBhZ2FpbnN0Jyk7Cn0KfQp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxDb25zdHJhaW50czsKCgoKCgoKCmNsYXNzIE51bWJlciBleHRlbmRzIENvbnN0cmFpbnQKewoKCgpwdWJsaWMgZnVuY3Rpb24gY2hlY2soJGVsZW1lbnQsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewoKIGlmIChpc3NldCgkc2NoZW1hLT5leGNsdXNpdmVNaW5pbXVtKSkgewppZiAoaXNzZXQoJHNjaGVtYS0+bWluaW11bSkpIHsKaWYgKCRzY2hlbWEtPmV4Y2x1c2l2ZU1pbmltdW0gJiYgJGVsZW1lbnQgPT09ICRzY2hlbWEtPm1pbmltdW0pIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAibXVzdCBoYXZlIGEgbWluaW11bSB2YWx1ZSBncmVhdGVyIHRoYW4gYm91bmRhcnkgdmFsdWUgb2YgIiAuICRzY2hlbWEtPm1pbmltdW0pOwp9IGVsc2UgaWYgKCRlbGVtZW50IDwgJHNjaGVtYS0+bWluaW11bSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJtdXN0IGhhdmUgYSBtaW5pbXVtIHZhbHVlIG9mICIgLiAkc2NoZW1hLT5taW5pbXVtKTsKfQp9IGVsc2UgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJ1c2Ugb2YgZXhjbHVzaXZlTWluaW11bSByZXF1aXJlcyBwcmVzZW5jZSBvZiBtaW5pbXVtIik7Cn0KfSBlbHNlIGlmIChpc3NldCgkc2NoZW1hLT5taW5pbXVtKSAmJiAkZWxlbWVudCA8ICRzY2hlbWEtPm1pbmltdW0pIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAibXVzdCBoYXZlIGEgbWluaW11bSB2YWx1ZSBvZiAiIC4gJHNjaGVtYS0+bWluaW11bSk7Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPmV4Y2x1c2l2ZU1heGltdW0pKSB7CmlmIChpc3NldCgkc2NoZW1hLT5tYXhpbXVtKSkgewppZiAoJHNjaGVtYS0+ZXhjbHVzaXZlTWF4aW11bSAmJiAkZWxlbWVudCA9PT0gJHNjaGVtYS0+bWF4aW11bSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJtdXN0IGhhdmUgYSBtYXhpbXVtIHZhbHVlIGxlc3MgdGhhbiBib3VuZGFyeSB2YWx1ZSBvZiAiIC4gJHNjaGVtYS0+bWF4aW11bSk7Cn0gZWxzZSBpZiAoJGVsZW1lbnQgPiAkc2NoZW1hLT5tYXhpbXVtKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIm11c3QgaGF2ZSBhIG1heGltdW0gdmFsdWUgb2YgIiAuICRzY2hlbWEtPm1heGltdW0pOwp9Cn0gZWxzZSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgInVzZSBvZiBleGNsdXNpdmVNYXhpbXVtIHJlcXVpcmVzIHByZXNlbmNlIG9mIG1heGltdW0iKTsKfQp9IGVsc2UgaWYgKGlzc2V0KCRzY2hlbWEtPm1heGltdW0pICYmICRlbGVtZW50ID4gJHNjaGVtYS0+bWF4aW11bSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJtdXN0IGhhdmUgYSBtYXhpbXVtIHZhbHVlIG9mICIgLiAkc2NoZW1hLT5tYXhpbXVtKTsKfQoKCiBpZiAoaXNzZXQoJHNjaGVtYS0+ZGl2aXNpYmxlQnkpICYmICR0aGlzLT5mbW9kKCRlbGVtZW50LCAkc2NoZW1hLT5kaXZpc2libGVCeSkgIT0gMCkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJpcyBub3QgZGl2aXNpYmxlIGJ5ICIgLiAkc2NoZW1hLT5kaXZpc2libGVCeSk7Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPm11bHRpcGxlT2YpICYmICR0aGlzLT5mbW9kKCRlbGVtZW50LCAkc2NoZW1hLT5tdWx0aXBsZU9mKSAhPSAwKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIm11c3QgYmUgYSBtdWx0aXBsZSBvZiAiIC4gJHNjaGVtYS0+bXVsdGlwbGVPZik7Cn0KCiR0aGlzLT5jaGVja0Zvcm1hdCgkZWxlbWVudCwgJHNjaGVtYSwgJHBhdGgsICRpKTsKfQoKcHJpdmF0ZSBmdW5jdGlvbiBmbW9kKCRudW1iZXIxLCAkbnVtYmVyMikKewokbW9kdWx1cyA9IGZtb2QoJG51bWJlcjEsICRudW1iZXIyKTsKJHByZWNpc2lvbiA9IGFicygwLjAwMDAwMDAwMDEpOwokZGlmZiA9IChmbG9hdCkoJG1vZHVsdXMgLSAkbnVtYmVyMik7CgppZiAoLSRwcmVjaXNpb24gPCAkZGlmZiAmJiAkZGlmZiA8ICRwcmVjaXNpb24pIHsKcmV0dXJuIDAuMDsKfQoKJGRlY2ltYWxzMSA9IG1iX3N0cnBvcygkbnVtYmVyMSwgIi4iKSA/IG1iX3N0cmxlbigkbnVtYmVyMSkgLSBtYl9zdHJwb3MoJG51bWJlcjEsICIuIikgLSAxIDogMDsKJGRlY2ltYWxzMiA9IG1iX3N0cnBvcygkbnVtYmVyMiwgIi4iKSA/IG1iX3N0cmxlbigkbnVtYmVyMikgLSBtYl9zdHJwb3MoJG51bWJlcjIsICIuIikgLSAxIDogMDsKCnJldHVybiAoZmxvYXQpcm91bmQoJG1vZHVsdXMsIG1heCgkZGVjaW1hbHMxLCAkZGVjaW1hbHMyKSk7Cn0KfQo8P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXENvbnN0cmFpbnRzOwoKCgoKCgoKY2xhc3MgT2JqZWN0IGV4dGVuZHMgQ29uc3RyYWludAp7CgoKCmZ1bmN0aW9uIGNoZWNrKCRlbGVtZW50LCAkZGVmaW5pdGlvbiA9IG51bGwsICRwYXRoID0gbnVsbCwgJGFkZGl0aW9uYWxQcm9wID0gbnVsbCwgJHBhdHRlcm5Qcm9wZXJ0aWVzID0gbnVsbCkKewppZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBVbmRlZmluZWQpIHsKcmV0dXJuOwp9CgokbWF0Y2hlcyA9IGFycmF5KCk7CmlmICgkcGF0dGVyblByb3BlcnRpZXMpIHsKJG1hdGNoZXMgPSAkdGhpcy0+dmFsaWRhdGVQYXR0ZXJuUHJvcGVydGllcygkZWxlbWVudCwgJHBhdGgsICRwYXR0ZXJuUHJvcGVydGllcyk7Cn0KCmlmICgkZGVmaW5pdGlvbikgewoKICR0aGlzLT52YWxpZGF0ZURlZmluaXRpb24oJGVsZW1lbnQsICRkZWZpbml0aW9uLCAkcGF0aCk7Cn0KCgogJHRoaXMtPnZhbGlkYXRlRWxlbWVudCgkZWxlbWVudCwgJG1hdGNoZXMsICRkZWZpbml0aW9uLCAkcGF0aCwgJGFkZGl0aW9uYWxQcm9wKTsKfQoKcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlUGF0dGVyblByb3BlcnRpZXMoJGVsZW1lbnQsICRwYXRoLCAkcGF0dGVyblByb3BlcnRpZXMpCnsKJG1hdGNoZXMgPSBhcnJheSgpOwpmb3JlYWNoICgkcGF0dGVyblByb3BlcnRpZXMgYXMgJHByZWdleCA9PiAkc2NoZW1hKSB7CgogaWYgKEBwcmVnX21hdGNoKCcvJy4gJHByZWdleCAuICcvJywgJycpID09PSBmYWxzZSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICdUaGUgcGF0dGVybiAiJyAuICRwcmVnZXggLiAnIiBpcyBpbnZhbGlkJyk7CmNvbnRpbnVlOwp9CmZvcmVhY2ggKCRlbGVtZW50IGFzICRpID0+ICR2YWx1ZSkgewppZiAocHJlZ19tYXRjaCgnLycgLiAkcHJlZ2V4IC4gJy8nLCAkaSkpIHsKJG1hdGNoZXNbXSA9ICRpOwokdGhpcy0+Y2hlY2tVbmRlZmluZWQoJHZhbHVlLCAkc2NoZW1hID8gOiBuZXcgXHN0ZENsYXNzKCksICRwYXRoLCAkaSk7Cn0KfQp9CnJldHVybiAkbWF0Y2hlczsKfQoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHZhbGlkYXRlRWxlbWVudCgkZWxlbWVudCwgJG1hdGNoZXMsICRvYmplY3REZWZpbml0aW9uID0gbnVsbCwgJHBhdGggPSBudWxsLCAkYWRkaXRpb25hbFByb3AgPSBudWxsKQp7CmZvcmVhY2ggKCRlbGVtZW50IGFzICRpID0+ICR2YWx1ZSkgewoKJHByb3BlcnR5ID0gJHRoaXMtPmdldFByb3BlcnR5KCRlbGVtZW50LCAkaSwgbmV3IFVuZGVmaW5lZCgpKTsKJGRlZmluaXRpb24gPSAkdGhpcy0+Z2V0UHJvcGVydHkoJG9iamVjdERlZmluaXRpb24sICRpKTsKCgogaWYgKCFpbl9hcnJheSgkaSwgJG1hdGNoZXMpICYmICRhZGRpdGlvbmFsUHJvcCA9PT0gZmFsc2UgJiYgJHRoaXMtPmlubGluZVNjaGVtYVByb3BlcnR5ICE9PSAkaSAmJiAhJGRlZmluaXRpb24pIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiVGhlIHByb3BlcnR5ICIgLiAkaSAuICIgaXMgbm90IGRlZmluZWQgYW5kIHRoZSBkZWZpbml0aW9uIGRvZXMgbm90IGFsbG93IGFkZGl0aW9uYWwgcHJvcGVydGllcyIpOwp9CgoKIGlmICghaW5fYXJyYXkoJGksICRtYXRjaGVzKSAmJiAkYWRkaXRpb25hbFByb3AgJiYgISRkZWZpbml0aW9uKSB7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsICRhZGRpdGlvbmFsUHJvcCwgJHBhdGgsICRpKTsKfQoKCiAkcmVxdWlyZSA9ICR0aGlzLT5nZXRQcm9wZXJ0eSgkZGVmaW5pdGlvbiwgJ3JlcXVpcmVzJyk7CmlmICgkcmVxdWlyZSAmJiAhJHRoaXMtPmdldFByb3BlcnR5KCRlbGVtZW50LCAkcmVxdWlyZSkpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAidGhlIHByZXNlbmNlIG9mIHRoZSBwcm9wZXJ0eSAiIC4gJGkgLiAiIHJlcXVpcmVzIHRoYXQgIiAuICRyZXF1aXJlIC4gIiBhbHNvIGJlIHByZXNlbnQiKTsKfQoKaWYgKCEkZGVmaW5pdGlvbikgewoKICR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdmFsdWUsIG5ldyBcc3RkQ2xhc3MoKSwgJHBhdGgsICRpKTsKfQp9Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gdmFsaWRhdGVEZWZpbml0aW9uKCRlbGVtZW50LCAkb2JqZWN0RGVmaW5pdGlvbiA9IG51bGwsICRwYXRoID0gbnVsbCkKewpmb3JlYWNoICgkb2JqZWN0RGVmaW5pdGlvbiBhcyAkaSA9PiAkdmFsdWUpIHsKJHByb3BlcnR5ID0gJHRoaXMtPmdldFByb3BlcnR5KCRlbGVtZW50LCAkaSwgbmV3IFVuZGVmaW5lZCgpKTsKJGRlZmluaXRpb24gPSAkdGhpcy0+Z2V0UHJvcGVydHkoJG9iamVjdERlZmluaXRpb24sICRpKTsKJHRoaXMtPmNoZWNrVW5kZWZpbmVkKCRwcm9wZXJ0eSwgJGRlZmluaXRpb24sICRwYXRoLCAkaSk7Cn0KfQoKCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFByb3BlcnR5KCRlbGVtZW50LCAkcHJvcGVydHksICRmYWxsYmFjayA9IG51bGwpCnsKaWYgKGlzX2FycmF5KCRlbGVtZW50KSApIHsKcmV0dXJuIGFycmF5X2tleV9leGlzdHMoJHByb3BlcnR5LCAkZWxlbWVudCkgPyAkZWxlbWVudFskcHJvcGVydHldIDogJGZhbGxiYWNrOwp9IGVsc2VpZiAoaXNfb2JqZWN0KCRlbGVtZW50KSkgewpyZXR1cm4gcHJvcGVydHlfZXhpc3RzKCRlbGVtZW50LCAkcHJvcGVydHkpID8gJGVsZW1lbnQtPiRwcm9wZXJ0eSA6ICRmYWxsYmFjazsKfQoKcmV0dXJuICRmYWxsYmFjazsKfQp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxDb25zdHJhaW50czsKCgoKCgoKaW50ZXJmYWNlIENvbnN0cmFpbnRJbnRlcmZhY2UKewoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRFcnJvcnMoKTsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGFkZEVycm9ycyhhcnJheSAkZXJyb3JzKTsKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRFcnJvcigkcGF0aCwgJG1lc3NhZ2UpOwoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgpOwoKCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGNoZWNrKCR2YWx1ZSwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKTsKfTw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcQ29uc3RyYWludHM7Cgp1c2UgSnNvblNjaGVtYVxVcmlcVXJpUmV0cmlldmVyOwoKCgoKCgoKYWJzdHJhY3QgY2xhc3MgQ29uc3RyYWludCBpbXBsZW1lbnRzIENvbnN0cmFpbnRJbnRlcmZhY2UKewpwcm90ZWN0ZWQgJGNoZWNrTW9kZSA9IHNlbGY6OkNIRUNLX01PREVfTk9STUFMOwpwcm90ZWN0ZWQgJHVyaVJldHJpZXZlcjsKcHJvdGVjdGVkICRlcnJvcnMgPSBhcnJheSgpOwpwcm90ZWN0ZWQgJGlubGluZVNjaGVtYVByb3BlcnR5ID0gJyRzY2hlbWEnOwoKY29uc3QgQ0hFQ0tfTU9ERV9OT1JNQUwgPSAxOwpjb25zdCBDSEVDS19NT0RFX1RZUEVfQ0FTVCA9IDI7CgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjaGVja01vZGUgPSBzZWxmOjpDSEVDS19NT0RFX05PUk1BTCwgVXJpUmV0cmlldmVyICR1cmlSZXRyaWV2ZXIgPSBudWxsKQp7CiR0aGlzLT5jaGVja01vZGUgPSAkY2hlY2tNb2RlOwokdGhpcy0+dXJpUmV0cmlldmVyID0gJHVyaVJldHJpZXZlcjsKfQoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFVyaVJldHJpZXZlcigpCnsKaWYgKGlzX251bGwoJHRoaXMtPnVyaVJldHJpZXZlcikpCnsKJHRoaXMtPnNldFVyaVJldHJpZXZlcihuZXcgVXJpUmV0cmlldmVyKTsKfQoKcmV0dXJuICR0aGlzLT51cmlSZXRyaWV2ZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBzZXRVcmlSZXRyaWV2ZXIoVXJpUmV0cmlldmVyICR1cmlSZXRyaWV2ZXIpCnsKJHRoaXMtPnVyaVJldHJpZXZlciA9ICR1cmlSZXRyaWV2ZXI7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBhZGRFcnJvcigkcGF0aCwgJG1lc3NhZ2UpCnsKJHRoaXMtPmVycm9yc1tdID0gYXJyYXkoCidwcm9wZXJ0eScgPT4gJHBhdGgsCidtZXNzYWdlJyA9PiAkbWVzc2FnZQopOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkRXJyb3JzKGFycmF5ICRlcnJvcnMpCnsKJHRoaXMtPmVycm9ycyA9IGFycmF5X21lcmdlKCR0aGlzLT5lcnJvcnMsICRlcnJvcnMpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0RXJyb3JzKCkKewpyZXR1cm4gYXJyYXlfdW5pcXVlKCR0aGlzLT5lcnJvcnMsIFNPUlRfUkVHVUxBUik7Cn0KCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCkKewpyZXR1cm4gISR0aGlzLT5nZXRFcnJvcnMoKTsKfQoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXNldCgpCnsKJHRoaXMtPmVycm9ycyA9IGFycmF5KCk7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGluY3JlbWVudFBhdGgoJHBhdGgsICRpKQp7CmlmICgkcGF0aCAhPT0gJycpIHsKaWYgKGlzX2ludCgkaSkpIHsKJHBhdGggLj0gJ1snIC4gJGkgLiAnXSc7Cn0gZWxzZWlmICgkaSA9PSAnJykgewokcGF0aCAuPSAnJzsKfSBlbHNlIHsKJHBhdGggLj0gJy4nIC4gJGk7Cn0KfSBlbHNlIHsKJHBhdGggPSAkaTsKfQoKcmV0dXJuICRwYXRoOwp9CgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjaGVja0FycmF5KCR2YWx1ZSwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CiR2YWxpZGF0b3IgPSBuZXcgQ29sbGVjdGlvbigkdGhpcy0+Y2hlY2tNb2RlLCAkdGhpcy0+dXJpUmV0cmlldmVyKTsKJHZhbGlkYXRvci0+Y2hlY2soJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGkpOwoKJHRoaXMtPmFkZEVycm9ycygkdmFsaWRhdG9yLT5nZXRFcnJvcnMoKSk7Cn0KCgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjaGVja09iamVjdCgkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCwgJHBhdHRlcm5Qcm9wZXJ0aWVzID0gbnVsbCkKewokdmFsaWRhdG9yID0gbmV3IE9iamVjdCgkdGhpcy0+Y2hlY2tNb2RlLCAkdGhpcy0+dXJpUmV0cmlldmVyKTsKJHZhbGlkYXRvci0+Y2hlY2soJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGksICRwYXR0ZXJuUHJvcGVydGllcyk7CgokdGhpcy0+YWRkRXJyb3JzKCR2YWxpZGF0b3ItPmdldEVycm9ycygpKTsKfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tUeXBlKCR2YWx1ZSwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CiR2YWxpZGF0b3IgPSBuZXcgVHlwZSgkdGhpcy0+Y2hlY2tNb2RlLCAkdGhpcy0+dXJpUmV0cmlldmVyKTsKJHZhbGlkYXRvci0+Y2hlY2soJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGkpOwoKJHRoaXMtPmFkZEVycm9ycygkdmFsaWRhdG9yLT5nZXRFcnJvcnMoKSk7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrVW5kZWZpbmVkKCR2YWx1ZSwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CiR2YWxpZGF0b3IgPSBuZXcgVW5kZWZpbmVkKCR0aGlzLT5jaGVja01vZGUsICR0aGlzLT51cmlSZXRyaWV2ZXIpOwokdmFsaWRhdG9yLT5jaGVjaygkdmFsdWUsICRzY2hlbWEsICRwYXRoLCAkaSk7CgokdGhpcy0+YWRkRXJyb3JzKCR2YWxpZGF0b3ItPmdldEVycm9ycygpKTsKfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tTdHJpbmcoJHZhbHVlLCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKJHZhbGlkYXRvciA9IG5ldyBTdHJpbmcoJHRoaXMtPmNoZWNrTW9kZSwgJHRoaXMtPnVyaVJldHJpZXZlcik7CiR2YWxpZGF0b3ItPmNoZWNrKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgsICRpKTsKCiR0aGlzLT5hZGRFcnJvcnMoJHZhbGlkYXRvci0+Z2V0RXJyb3JzKCkpOwp9CgoKCgoKCgoKCnByb3RlY3RlZCBmdW5jdGlvbiBjaGVja051bWJlcigkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewokdmFsaWRhdG9yID0gbmV3IE51bWJlcigkdGhpcy0+Y2hlY2tNb2RlLCAkdGhpcy0+dXJpUmV0cmlldmVyKTsKJHZhbGlkYXRvci0+Y2hlY2soJHZhbHVlLCAkc2NoZW1hLCAkcGF0aCwgJGkpOwoKJHRoaXMtPmFkZEVycm9ycygkdmFsaWRhdG9yLT5nZXRFcnJvcnMoKSk7Cn0KCgoKCgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrRW51bSgkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewokdmFsaWRhdG9yID0gbmV3IEVudW0oJHRoaXMtPmNoZWNrTW9kZSwgJHRoaXMtPnVyaVJldHJpZXZlcik7CiR2YWxpZGF0b3ItPmNoZWNrKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgsICRpKTsKCiR0aGlzLT5hZGRFcnJvcnMoJHZhbGlkYXRvci0+Z2V0RXJyb3JzKCkpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tGb3JtYXQoJHZhbHVlLCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKJHZhbGlkYXRvciA9IG5ldyBGb3JtYXQoJHRoaXMtPmNoZWNrTW9kZSwgJHRoaXMtPnVyaVJldHJpZXZlcik7CiR2YWxpZGF0b3ItPmNoZWNrKCR2YWx1ZSwgJHNjaGVtYSwgJHBhdGgsICRpKTsKCiR0aGlzLT5hZGRFcnJvcnMoJHZhbGlkYXRvci0+Z2V0RXJyb3JzKCkpOwp9CgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIHJldHJpZXZlVXJpKCR1cmkpCnsKaWYgKG51bGwgPT09ICR0aGlzLT51cmlSZXRyaWV2ZXIpIHsKJHRoaXMtPnNldFVyaVJldHJpZXZlcihuZXcgVXJpUmV0cmlldmVyKTsKfQokanNvblNjaGVtYSA9ICR0aGlzLT51cmlSZXRyaWV2ZXItPnJldHJpZXZlKCR1cmkpOwoKIHJldHVybiAkanNvblNjaGVtYTsKfQp9Cjw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcQ29uc3RyYWludHM7CgoKCgoKCgpjbGFzcyBDb2xsZWN0aW9uIGV4dGVuZHMgQ29uc3RyYWludAp7CgoKCnB1YmxpYyBmdW5jdGlvbiBjaGVjaygkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewoKIGlmIChpc3NldCgkc2NoZW1hLT5taW5JdGVtcykgJiYgY291bnQoJHZhbHVlKSA8ICRzY2hlbWEtPm1pbkl0ZW1zKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIlRoZXJlIG11c3QgYmUgYSBtaW5pbXVtIG9mICIgLiAkc2NoZW1hLT5taW5JdGVtcyAuICIgaW4gdGhlIGFycmF5Iik7Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPm1heEl0ZW1zKSAmJiBjb3VudCgkdmFsdWUpID4gJHNjaGVtYS0+bWF4SXRlbXMpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiVGhlcmUgbXVzdCBiZSBhIG1heGltdW0gb2YgIiAuICRzY2hlbWEtPm1heEl0ZW1zIC4gIiBpbiB0aGUgYXJyYXkiKTsKfQoKCiBpZiAoaXNzZXQoJHNjaGVtYS0+dW5pcXVlSXRlbXMpKSB7CiR1bmlxdWUgPSAkdmFsdWU7CmlmIChpc19hcnJheSgkdmFsdWUpICYmIGNvdW50KCR2YWx1ZSkpIHsKJHVuaXF1ZSA9IGFycmF5X21hcChmdW5jdGlvbigkZSkgeyByZXR1cm4gdmFyX2V4cG9ydCgkZSwgdHJ1ZSk7IH0sICR2YWx1ZSk7Cn0KaWYgKGNvdW50KGFycmF5X3VuaXF1ZSgkdW5pcXVlKSkgIT0gY291bnQoJHZhbHVlKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJUaGVyZSBhcmUgbm8gZHVwbGljYXRlcyBhbGxvd2VkIGluIHRoZSBhcnJheSIpOwp9Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPml0ZW1zKSkgewokdGhpcy0+dmFsaWRhdGVJdGVtcygkdmFsdWUsICRzY2hlbWEsICRwYXRoLCAkaSk7Cn0KfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVJdGVtcygkdmFsdWUsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewppZiAoaXNfb2JqZWN0KCRzY2hlbWEtPml0ZW1zKSkgewoKIGZvcmVhY2ggKCR2YWx1ZSBhcyAkayA9PiAkdikgewokaW5pdEVycm9ycyA9ICR0aGlzLT5nZXRFcnJvcnMoKTsKCgogJHRoaXMtPmNoZWNrVW5kZWZpbmVkKCR2LCAkc2NoZW1hLT5pdGVtcywgJHBhdGgsICRrKTsKCgogaWYgKGNvdW50KCRpbml0RXJyb3JzKSA8IGNvdW50KCR0aGlzLT5nZXRFcnJvcnMoKSkgJiYgKGlzc2V0KCRzY2hlbWEtPmFkZGl0aW9uYWxJdGVtcykgJiYgJHNjaGVtYS0+YWRkaXRpb25hbEl0ZW1zICE9PSBmYWxzZSkpIHsKJHNlY29uZEVycm9ycyA9ICR0aGlzLT5nZXRFcnJvcnMoKTsKJHRoaXMtPmNoZWNrVW5kZWZpbmVkKCR2LCAkc2NoZW1hLT5hZGRpdGlvbmFsSXRlbXMsICRwYXRoLCAkayk7Cn0KCgogaWYgKGlzc2V0KCRzZWNvbmRFcnJvcnMpICYmIGNvdW50KCRzZWNvbmRFcnJvcnMpIDwgY291bnQoJHRoaXMtPmdldEVycm9ycygpKSkgewokdGhpcy0+ZXJyb3JzID0gJHNlY29uZEVycm9yczsKfSBlbHNlIGlmIChpc3NldCgkc2Vjb25kRXJyb3JzKSAmJiBjb3VudCgkc2Vjb25kRXJyb3JzKSA9PT0gY291bnQoJHRoaXMtPmdldEVycm9ycygpKSkgewokdGhpcy0+ZXJyb3JzID0gJGluaXRFcnJvcnM7Cn0KfQp9IGVsc2UgewoKIGZvcmVhY2ggKCR2YWx1ZSBhcyAkayA9PiAkdikgewppZiAoYXJyYXlfa2V5X2V4aXN0cygkaywgJHNjaGVtYS0+aXRlbXMpKSB7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdiwgJHNjaGVtYS0+aXRlbXNbJGtdLCAkcGF0aCwgJGspOwp9IGVsc2UgewoKIGlmIChwcm9wZXJ0eV9leGlzdHMoJHNjaGVtYSwgJ2FkZGl0aW9uYWxJdGVtcycpKSB7CmlmICgkc2NoZW1hLT5hZGRpdGlvbmFsSXRlbXMgIT09IGZhbHNlKSB7CiR0aGlzLT5jaGVja1VuZGVmaW5lZCgkdiwgJHNjaGVtYS0+YWRkaXRpb25hbEl0ZW1zLCAkcGF0aCwgJGspOwp9IGVsc2UgewokdGhpcy0+YWRkRXJyb3IoCiRwYXRoLCAnVGhlIGl0ZW0gJyAuICRpIC4gJ1snIC4gJGsgLiAnXSBpcyBub3QgZGVmaW5lZCBhbmQgdGhlIGRlZmluaXRpb24gZG9lcyBub3QgYWxsb3cgYWRkaXRpb25hbCBpdGVtcycpOwp9Cn0gZWxzZSB7CgogJHRoaXMtPmNoZWNrVW5kZWZpbmVkKCR2LCBuZXcgXHN0ZENsYXNzKCksICRwYXRoLCAkayk7Cn0KfQp9CgoKIGlmKGNvdW50KCR2YWx1ZSkgPiAwKSB7CmZvciAoJGsgPSBjb3VudCgkdmFsdWUpOyAkayA8IGNvdW50KCRzY2hlbWEtPml0ZW1zKTsgJGsrKykgewokdGhpcy0+Y2hlY2tVbmRlZmluZWQobmV3IFVuZGVmaW5lZCgpLCAkc2NoZW1hLT5pdGVtc1ska10sICRwYXRoLCAkayk7Cn0KfQp9Cn0KfTw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcQ29uc3RyYWludHM7CgoKCgoKCgpjbGFzcyBFbnVtIGV4dGVuZHMgQ29uc3RyYWludAp7CgoKCnB1YmxpYyBmdW5jdGlvbiBjaGVjaygkZWxlbWVudCwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CgogaWYgKCRlbGVtZW50IGluc3RhbmNlb2YgVW5kZWZpbmVkICYmICghaXNzZXQoJHNjaGVtYS0+cmVxdWlyZWQpIHx8ICEkc2NoZW1hLT5yZXF1aXJlZCkpIHsKcmV0dXJuOwp9Cgpmb3JlYWNoICgkc2NoZW1hLT5lbnVtIGFzICRlbnVtKSB7CmlmICgoZ2V0dHlwZSgkZWxlbWVudCkgPT09IGdldHR5cGUoJGVudW0pKSAmJiAoJGVsZW1lbnQgPT0gJGVudW0pKSB7CnJldHVybjsKfQp9CgokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJkb2VzIG5vdCBoYXZlIGEgdmFsdWUgaW4gdGhlIGVudW1lcmF0aW9uICIgLiBwcmludF9yKCRzY2hlbWEtPmVudW0sIHRydWUpKTsKfQp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxDb25zdHJhaW50czsKCgoKCgoKCmNsYXNzIEZvcm1hdCBleHRlbmRzIENvbnN0cmFpbnQKewoKCgpwdWJsaWMgZnVuY3Rpb24gY2hlY2soJGVsZW1lbnQsICRzY2hlbWEgPSBudWxsLCAkcGF0aCA9IG51bGwsICRpID0gbnVsbCkKewppZiAoIWlzc2V0KCRzY2hlbWEtPmZvcm1hdCkpIHsKcmV0dXJuOwp9Cgpzd2l0Y2ggKCRzY2hlbWEtPmZvcm1hdCkgewpjYXNlICdkYXRlJzoKaWYgKCEkZGF0ZSA9ICR0aGlzLT52YWxpZGF0ZURhdGVUaW1lKCRlbGVtZW50LCAnWS1tLWQnKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsIHNwcmludGYoJ0ludmFsaWQgZGF0ZSAlcywgZXhwZWN0ZWQgZm9ybWF0IFlZWVktTU0tREQnLCBqc29uX2VuY29kZSgkZWxlbWVudCkpKTsKfQpicmVhazsKCmNhc2UgJ3RpbWUnOgppZiAoISR0aGlzLT52YWxpZGF0ZURhdGVUaW1lKCRlbGVtZW50LCAnSDppOnMnKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsIHNwcmludGYoJ0ludmFsaWQgdGltZSAlcywgZXhwZWN0ZWQgZm9ybWF0IGhoOm1tOnNzJywganNvbl9lbmNvZGUoJGVsZW1lbnQpKSk7Cn0KYnJlYWs7CgpjYXNlICdkYXRlLXRpbWUnOgppZiAoISR0aGlzLT52YWxpZGF0ZURhdGVUaW1lKCRlbGVtZW50LCAnWS1tLWRcVEg6aTpzXFonKSAmJgohJHRoaXMtPnZhbGlkYXRlRGF0ZVRpbWUoJGVsZW1lbnQsICdZLW0tZFxUSDppOnMudVxaJykgJiYKISR0aGlzLT52YWxpZGF0ZURhdGVUaW1lKCRlbGVtZW50LCAnWS1tLWRcVEg6aTpzUCcpICYmCiEkdGhpcy0+dmFsaWRhdGVEYXRlVGltZSgkZWxlbWVudCwgJ1ktbS1kXFRIOmk6c08nKQopIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCBzcHJpbnRmKCdJbnZhbGlkIGRhdGUtdGltZSAlcywgZXhwZWN0ZWQgZm9ybWF0IFlZWVktTU0tRERUaGg6bW06c3NaIG9yIFlZWVktTU0tRERUaGg6bW06c3MraGg6bW0nLCBqc29uX2VuY29kZSgkZWxlbWVudCkpKTsKfQpicmVhazsKCmNhc2UgJ3V0Yy1taWxsaXNlYyc6CmlmICghJHRoaXMtPnZhbGlkYXRlRGF0ZVRpbWUoJGVsZW1lbnQsICdVJykpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCBzcHJpbnRmKCdJbnZhbGlkIHRpbWUgJXMsIGV4cGVjdGVkIGludGVnZXIgb2YgbWlsbGlzZWNvbmRzIHNpbmNlIEVwb2NoJywganNvbl9lbmNvZGUoJGVsZW1lbnQpKSk7Cn0KYnJlYWs7CgpjYXNlICdyZWdleCc6CmlmICghJHRoaXMtPnZhbGlkYXRlUmVnZXgoJGVsZW1lbnQpKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgJ0ludmFsaWQgcmVnZXggZm9ybWF0ICcgLiAkZWxlbWVudCk7Cn0KYnJlYWs7CgpjYXNlICdjb2xvcic6CmlmICghJHRoaXMtPnZhbGlkYXRlQ29sb3IoJGVsZW1lbnQpKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIkludmFsaWQgY29sb3IiKTsKfQpicmVhazsKCmNhc2UgJ3N0eWxlJzoKaWYgKCEkdGhpcy0+dmFsaWRhdGVTdHlsZSgkZWxlbWVudCkpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiSW52YWxpZCBzdHlsZSIpOwp9CmJyZWFrOwoKY2FzZSAncGhvbmUnOgppZiAoISR0aGlzLT52YWxpZGF0ZVBob25lKCRlbGVtZW50KSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJJbnZhbGlkIHBob25lIG51bWJlciIpOwp9CmJyZWFrOwoKY2FzZSAndXJpJzoKaWYgKG51bGwgPT09IGZpbHRlcl92YXIoJGVsZW1lbnQsIEZJTFRFUl9WQUxJREFURV9VUkwsIEZJTFRFUl9OVUxMX09OX0ZBSUxVUkUpKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIkludmFsaWQgVVJMIGZvcm1hdCIpOwp9CmJyZWFrOwoKY2FzZSAnZW1haWwnOgppZiAobnVsbCA9PT0gZmlsdGVyX3ZhcigkZWxlbWVudCwgRklMVEVSX1ZBTElEQVRFX0VNQUlMLCBGSUxURVJfTlVMTF9PTl9GQUlMVVJFKSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJJbnZhbGlkIGVtYWlsIik7Cn0KYnJlYWs7CgpjYXNlICdpcC1hZGRyZXNzJzoKY2FzZSAnaXB2NCc6CmlmIChudWxsID09PSBmaWx0ZXJfdmFyKCRlbGVtZW50LCBGSUxURVJfVkFMSURBVEVfSVAsIEZJTFRFUl9OVUxMX09OX0ZBSUxVUkUgfCBGSUxURVJfRkxBR19JUFY0KSkgewokdGhpcy0+YWRkRXJyb3IoJHBhdGgsICJJbnZhbGlkIElQIGFkZHJlc3MiKTsKfQpicmVhazsKCmNhc2UgJ2lwdjYnOgppZiAobnVsbCA9PT0gZmlsdGVyX3ZhcigkZWxlbWVudCwgRklMVEVSX1ZBTElEQVRFX0lQLCBGSUxURVJfTlVMTF9PTl9GQUlMVVJFIHwgRklMVEVSX0ZMQUdfSVBWNikpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiSW52YWxpZCBJUCBhZGRyZXNzIik7Cn0KYnJlYWs7CgpjYXNlICdob3N0LW5hbWUnOgpjYXNlICdob3N0bmFtZSc6CmlmICghJHRoaXMtPnZhbGlkYXRlSG9zdG5hbWUoJGVsZW1lbnQpKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIkludmFsaWQgaG9zdG5hbWUiKTsKfQpicmVhazsKCmRlZmF1bHQ6CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIlVua25vd24gZm9ybWF0OiAiIC4ganNvbl9lbmNvZGUoJHNjaGVtYS0+Zm9ybWF0KSk7CmJyZWFrOwp9Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZURhdGVUaW1lKCRkYXRldGltZSwgJGZvcm1hdCkKewokZHQgPSBcRGF0ZVRpbWU6OmNyZWF0ZUZyb21Gb3JtYXQoJGZvcm1hdCwgJGRhdGV0aW1lKTsKCmlmICghJGR0KSB7CnJldHVybiBmYWxzZTsKfQoKcmV0dXJuICRkYXRldGltZSA9PT0gJGR0LT5mb3JtYXQoJGZvcm1hdCk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZVJlZ2V4KCRyZWdleCkKewpyZXR1cm4gZmFsc2UgIT09IEBwcmVnX21hdGNoKCcvJyAuICRyZWdleCAuICcvJywgJycpOwp9Cgpwcm90ZWN0ZWQgZnVuY3Rpb24gdmFsaWRhdGVDb2xvcigkY29sb3IpCnsKaWYgKGluX2FycmF5KHN0cnRvbG93ZXIoJGNvbG9yKSwgYXJyYXkoJ2FxdWEnLCAnYmxhY2snLCAnYmx1ZScsICdmdWNoc2lhJywKJ2dyYXknLCAnZ3JlZW4nLCAnbGltZScsICdtYXJvb24nLCAnbmF2eScsICdvbGl2ZScsICdvcmFuZ2UnLCAncHVycGxlJywKJ3JlZCcsICdzaWx2ZXInLCAndGVhbCcsICd3aGl0ZScsICd5ZWxsb3cnKSkpIHsKcmV0dXJuIHRydWU7Cn0KCnJldHVybiBwcmVnX21hdGNoKCcvXiMoW2EtZjAtOV17M318W2EtZjAtOV17Nn0pJC9pJywgJGNvbG9yKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlU3R5bGUoJHN0eWxlKQp7CiRwcm9wZXJ0aWVzID0gZXhwbG9kZSgnOycsIHJ0cmltKCRzdHlsZSwgJzsnKSk7CiRpbnZhbGlkRW50cmllcyA9IHByZWdfZ3JlcCgnL15ccypbLWEtel0rXHMqOlxzKi4rJC9pJywgJHByb3BlcnRpZXMsIFBSRUdfR1JFUF9JTlZFUlQpOwoKcmV0dXJuIGVtcHR5KCRpbnZhbGlkRW50cmllcyk7Cn0KCnByb3RlY3RlZCBmdW5jdGlvbiB2YWxpZGF0ZVBob25lKCRwaG9uZSkKewpyZXR1cm4gcHJlZ19tYXRjaCgnL15cKz8oXChcZHszfVwpfFxkezN9KSBcZHszfSBcZHs0fSQvJywgJHBob25lKTsKfQoKcHJvdGVjdGVkIGZ1bmN0aW9uIHZhbGlkYXRlSG9zdG5hbWUoJGhvc3QpCnsKcmV0dXJuIHByZWdfbWF0Y2goJy9eW19hLXpdK1wuKFtfYS16XStcLj8pKyQvaScsICRob3N0KTsKfQp9Cjw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcQ29uc3RyYWludHM7CgoKCgoKCgpjbGFzcyBTdHJpbmcgZXh0ZW5kcyBDb25zdHJhaW50CnsKCgoKcHVibGljIGZ1bmN0aW9uIGNoZWNrKCRlbGVtZW50LCAkc2NoZW1hID0gbnVsbCwgJHBhdGggPSBudWxsLCAkaSA9IG51bGwpCnsKCiBpZiAoaXNzZXQoJHNjaGVtYS0+bWF4TGVuZ3RoKSAmJiBzdHJsZW4oJGVsZW1lbnQpID4gJHNjaGVtYS0+bWF4TGVuZ3RoKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIm11c3QgYmUgYXQgbW9zdCAiIC4gJHNjaGVtYS0+bWF4TGVuZ3RoIC4gIiBjaGFyYWN0ZXJzIGxvbmciKTsKfQoKCiBpZiAoaXNzZXQoJHNjaGVtYS0+bWluTGVuZ3RoKSAmJiBzdHJsZW4oJGVsZW1lbnQpIDwgJHNjaGVtYS0+bWluTGVuZ3RoKSB7CiR0aGlzLT5hZGRFcnJvcigkcGF0aCwgIm11c3QgYmUgYXQgbGVhc3QgIiAuICRzY2hlbWEtPm1pbkxlbmd0aCAuICIgY2hhcmFjdGVycyBsb25nIik7Cn0KCgogaWYgKGlzc2V0KCRzY2hlbWEtPnBhdHRlcm4pICYmICFwcmVnX21hdGNoKCcjJyAuIHN0cl9yZXBsYWNlKCcjJywgJ1xcIycsICRzY2hlbWEtPnBhdHRlcm4pIC4gJyMnLCAkZWxlbWVudCkpIHsKJHRoaXMtPmFkZEVycm9yKCRwYXRoLCAiZG9lcyBub3QgbWF0Y2ggdGhlIHJlZ2V4IHBhdHRlcm4gIiAuICRzY2hlbWEtPnBhdHRlcm4pOwp9CgokdGhpcy0+Y2hlY2tGb3JtYXQoJGVsZW1lbnQsICRzY2hlbWEsICRwYXRoLCAkaSk7Cn0KfQo8P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXEV4Y2VwdGlvbjsKCgoKCmNsYXNzIFVyaVJlc29sdmVyRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24Kewp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxFeGNlcHRpb247CgoKCgpjbGFzcyBSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24Kewp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxFeGNlcHRpb247CgoKCgpjbGFzcyBJbnZhbGlkU2NoZW1hTWVkaWFUeXBlRXhjZXB0aW9uIGV4dGVuZHMgXFJ1bnRpbWVFeGNlcHRpb24KeyAKfTw/cGhwCgoKCgoKCgoKbmFtZXNwYWNlIEpzb25TY2hlbWFcRXhjZXB0aW9uOwoKCgoKY2xhc3MgSW52YWxpZFNvdXJjZVVyaUV4Y2VwdGlvbiBleHRlbmRzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbgp7Cn0KPD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxFeGNlcHRpb247CgoKCgpjbGFzcyBKc29uRGVjb2RpbmdFeGNlcHRpb24gZXh0ZW5kcyBcUnVudGltZUV4Y2VwdGlvbgp7CnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29kZSA9IEpTT05fRVJST1JfTk9ORSwgXEV4Y2VwdGlvbiAkcHJldmlvdXMgPSBudWxsKQp7CnN3aXRjaCAoJGNvZGUpIHsKY2FzZSBKU09OX0VSUk9SX0RFUFRIOgokbWVzc2FnZSA9ICdUaGUgbWF4aW11bSBzdGFjayBkZXB0aCBoYXMgYmVlbiBleGNlZWRlZCc7CmJyZWFrOwpjYXNlIEpTT05fRVJST1JfU1RBVEVfTUlTTUFUQ0g6CiRtZXNzYWdlID0gJ0ludmFsaWQgb3IgbWFsZm9ybWVkIEpTT04nOwpicmVhazsKY2FzZSBKU09OX0VSUk9SX0NUUkxfQ0hBUjoKJG1lc3NhZ2UgPSAnQ29udHJvbCBjaGFyYWN0ZXIgZXJyb3IsIHBvc3NpYmx5IGluY29ycmVjdGx5IGVuY29kZWQnOwpicmVhazsKY2FzZSBKU09OX0VSUk9SX1VURjg6CiRtZXNzYWdlID0gJ01hbGZvcm1lZCBVVEYtOCBjaGFyYWN0ZXJzLCBwb3NzaWJseSBpbmNvcnJlY3RseSBlbmNvZGVkJzsKYnJlYWs7CmNhc2UgSlNPTl9FUlJPUl9TWU5UQVg6CiRtZXNzYWdlID0gJ0pTT04gc3ludGF4IGlzIG1hbGZvcm1lZCc7CmJyZWFrOwpkZWZhdWx0OgokbWVzc2FnZSA9ICdTeW50YXggZXJyb3InOwp9CnBhcmVudDo6X19jb25zdHJ1Y3QoJG1lc3NhZ2UsICRjb2RlLCAkcHJldmlvdXMpOwp9Cn08P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXEV4Y2VwdGlvbjsKCgoKCmNsYXNzIEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbiBleHRlbmRzIFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24Kewp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxVcmk7Cgp1c2UgSnNvblNjaGVtYVxFeGNlcHRpb25cVXJpUmVzb2x2ZXJFeGNlcHRpb247CgoKCgoKCmNsYXNzIFVyaVJlc29sdmVyCnsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlKCR1cmkpCnsKcHJlZ19tYXRjaCgnfF4oKFteOi8/I10rKTopPygvLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpP3wnLCAkdXJpLCAkbWF0Y2gpOwoKJGNvbXBvbmVudHMgPSBhcnJheSgpOwppZiAoNSA8IGNvdW50KCRtYXRjaCkpIHsKJGNvbXBvbmVudHMgPSBhcnJheSgKJ3NjaGVtZScgPT4gJG1hdGNoWzJdLAonYXV0aG9yaXR5JyA9PiAkbWF0Y2hbNF0sCidwYXRoJyA9PiAkbWF0Y2hbNV0KKTsKfSAKaWYgKDcgPCBjb3VudCgkbWF0Y2gpKSB7CiRjb21wb25lbnRzWydxdWVyeSddID0gJG1hdGNoWzddOwp9CmlmICg5IDwgY291bnQoJG1hdGNoKSkgewokY29tcG9uZW50c1snZnJhZ21lbnQnXSA9ICRtYXRjaFs5XTsKfQoKcmV0dXJuICRjb21wb25lbnRzOwp9CgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoYXJyYXkgJGNvbXBvbmVudHMpCnsKJHVyaSA9ICRjb21wb25lbnRzWydzY2hlbWUnXSAuICc6Ly8nIAouICRjb21wb25lbnRzWydhdXRob3JpdHknXQouICRjb21wb25lbnRzWydwYXRoJ107CgppZiAoYXJyYXlfa2V5X2V4aXN0cygncXVlcnknLCAkY29tcG9uZW50cykpIHsKJHVyaSAuPSAkY29tcG9uZW50c1sncXVlcnknXTsKfQppZiAoYXJyYXlfa2V5X2V4aXN0cygnZnJhZ21lbnQnLCAkY29tcG9uZW50cykpIHsKJHVyaSAuPSAnIycgLiAkY29tcG9uZW50c1snZnJhZ21lbnQnXTsKfQoKcmV0dXJuICR1cmk7Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZSgkdXJpLCAkYmFzZVVyaSA9IG51bGwpCnsKaWYgKCR1cmkgPT0gJycpIHsKcmV0dXJuICRiYXNlVXJpOwp9CgokY29tcG9uZW50cyA9ICR0aGlzLT5wYXJzZSgkdXJpKTsKJHBhdGggPSAkY29tcG9uZW50c1sncGF0aCddOwoKaWYgKCEgZW1wdHkoJGNvbXBvbmVudHNbJ3NjaGVtZSddKSkgewpyZXR1cm4gJHVyaTsKfQokYmFzZUNvbXBvbmVudHMgPSAkdGhpcy0+cGFyc2UoJGJhc2VVcmkpOwokYmFzZVBhdGggPSAkYmFzZUNvbXBvbmVudHNbJ3BhdGgnXTsKCiRiYXNlQ29tcG9uZW50c1sncGF0aCddID0gc2VsZjo6Y29tYmluZVJlbGF0aXZlUGF0aFdpdGhCYXNlUGF0aCgkcGF0aCwgJGJhc2VQYXRoKTsKaWYgKGlzc2V0KCRjb21wb25lbnRzWydmcmFnbWVudCddKSkgewokYmFzZUNvbXBvbmVudHNbJ2ZyYWdtZW50J10gPSAkY29tcG9uZW50c1snZnJhZ21lbnQnXTsKfQoKcmV0dXJuICR0aGlzLT5nZW5lcmF0ZSgkYmFzZUNvbXBvbmVudHMpOwp9CgoKCgoKCgoKCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29tYmluZVJlbGF0aXZlUGF0aFdpdGhCYXNlUGF0aCgkcmVsYXRpdmVQYXRoLCAkYmFzZVBhdGgpCnsKJHJlbGF0aXZlUGF0aCA9IHNlbGY6Om5vcm1hbGl6ZVBhdGgoJHJlbGF0aXZlUGF0aCk7CmlmICgkcmVsYXRpdmVQYXRoID09ICcnKSB7CnJldHVybiAkYmFzZVBhdGg7Cn0KaWYgKCRyZWxhdGl2ZVBhdGh7MH0gPT0gJy8nKSB7CnJldHVybiAkcmVsYXRpdmVQYXRoOwp9CgokYmFzZVBhdGhTZWdtZW50cyA9IHNlbGY6OmdldFBhdGhTZWdtZW50cygkYmFzZVBhdGgpOwoKcHJlZ19tYXRjaCgnfF4vPyhcLlwuLyg/OlwuLykqKSp8JywgJHJlbGF0aXZlUGF0aCwgJG1hdGNoKTsKJG51bUxldmVsVXAgPSBzdHJsZW4oJG1hdGNoWzBdKSAvMyArIDE7CmlmICgkbnVtTGV2ZWxVcCA+PSBjb3VudCgkYmFzZVBhdGhTZWdtZW50cykpIHsKdGhyb3cgbmV3IFVyaVJlc29sdmVyRXhjZXB0aW9uKHNwcmludGYoIlVuYWJsZSB0byByZXNvbHZlIFVSSSAnJXMnIGZyb20gYmFzZSAnJXMnIiwgJHJlbGF0aXZlUGF0aCwgJGJhc2VQYXRoKSk7Cn0KJGJhc2VQYXRoU2VnbWVudHMgPSBhcnJheV9zbGljZSgkYmFzZVBhdGhTZWdtZW50cywgMCwgLSRudW1MZXZlbFVwKTsKJHBhdGggPSBwcmVnX3JlcGxhY2UoJ3xeLz8oXC5cLi8oXC4vKSopKnwnLCAnJywgJHJlbGF0aXZlUGF0aCk7CgpyZXR1cm4gaW1wbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkYmFzZVBhdGhTZWdtZW50cykgLiAnLycgLiAkcGF0aDsKfQoKCgoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplUGF0aCgkcGF0aCkKewokcGF0aCA9IHByZWdfcmVwbGFjZSgnfCgoPzwhXC4pXC4vKSp8JywgJycsICRwYXRoKTsKJHBhdGggPSBwcmVnX3JlcGxhY2UoJ3wvL3wnLCAnLycsICRwYXRoKTsKCnJldHVybiAkcGF0aDsKfQoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UGF0aFNlZ21lbnRzKCRwYXRoKSB7CgpyZXR1cm4gZXhwbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkcGF0aCk7Cn0KCgoKCgpwdWJsaWMgZnVuY3Rpb24gaXNWYWxpZCgkdXJpKQp7CiRjb21wb25lbnRzID0gJHRoaXMtPnBhcnNlKCR1cmkpOwoKcmV0dXJuICFlbXB0eSgkY29tcG9uZW50cyk7Cn0KfQo8P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXFVyaTsKCnVzZSBKc29uU2NoZW1hXFVyaVxSZXRyaWV2ZXJzXEZpbGVHZXRDb250ZW50czsKdXNlIEpzb25TY2hlbWFcVXJpXFJldHJpZXZlcnNcVXJpUmV0cmlldmVySW50ZXJmYWNlOwp1c2UgSnNvblNjaGVtYVxWYWxpZGF0b3I7CnVzZSBKc29uU2NoZW1hXEV4Y2VwdGlvblxJbnZhbGlkU2NoZW1hTWVkaWFUeXBlRXhjZXB0aW9uOwp1c2UgSnNvblNjaGVtYVxFeGNlcHRpb25cSnNvbkRlY29kaW5nRXhjZXB0aW9uOwoKCgoKCgpjbGFzcyBVcmlSZXRyaWV2ZXIKewpwcm90ZWN0ZWQgJHVyaVJldHJpZXZlciA9IG51bGw7CgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBjb25maXJtTWVkaWFUeXBlKCR1cmlSZXRyaWV2ZXIsICR1cmkpCnsKJGNvbnRlbnRUeXBlID0gJHVyaVJldHJpZXZlci0+Z2V0Q29udGVudFR5cGUoKTsKCmlmIChpc19udWxsKCRjb250ZW50VHlwZSkpIHsKCiByZXR1cm47Cn0KCmlmIChWYWxpZGF0b3I6OlNDSEVNQV9NRURJQV9UWVBFID09PSAkY29udGVudFR5cGUpIHsKcmV0dXJuOwp9CgppZiAoc3Vic3RyKCR1cmksIDAsIDIzKSA9PSAnaHR0cDovL2pzb24tc2NoZW1hLm9yZy8nKSB7CgogcmV0dXJuIHRydWU7Cn0KCnRocm93IG5ldyBJbnZhbGlkU2NoZW1hTWVkaWFUeXBlRXhjZXB0aW9uKHNwcmludGYoJ01lZGlhIHR5cGUgJXMgZXhwZWN0ZWQnLCBWYWxpZGF0b3I6OlNDSEVNQV9NRURJQV9UWVBFKSk7Cn0KCgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdldFVyaVJldHJpZXZlcigpCnsKaWYgKGlzX251bGwoJHRoaXMtPnVyaVJldHJpZXZlcikpIHsKJHRoaXMtPnNldFVyaVJldHJpZXZlcihuZXcgRmlsZUdldENvbnRlbnRzKTsKfQoKcmV0dXJuICR0aGlzLT51cmlSZXRyaWV2ZXI7Cn0KCgoKCgoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVzb2x2ZVBvaW50ZXIoJGpzb25TY2hlbWEsICR1cmkpCnsKJHJlc29sdmVyID0gbmV3IFVyaVJlc29sdmVyKCk7CiRwYXJzZWQgPSAkcmVzb2x2ZXItPnBhcnNlKCR1cmkpOwppZiAoZW1wdHkoJHBhcnNlZFsnZnJhZ21lbnQnXSkpIHsKcmV0dXJuICRqc29uU2NoZW1hOwp9CgokcGF0aCA9IGV4cGxvZGUoJy8nLCAkcGFyc2VkWydmcmFnbWVudCddKTsKd2hpbGUgKCRwYXRoKSB7CiRwYXRoRWxlbWVudCA9IGFycmF5X3NoaWZ0KCRwYXRoKTsKaWYgKCEgZW1wdHkoJHBhdGhFbGVtZW50KSkgewokcGF0aEVsZW1lbnQgPSBzdHJfcmVwbGFjZSgnfjEnLCAnLycsICRwYXRoRWxlbWVudCk7CiRwYXRoRWxlbWVudCA9IHN0cl9yZXBsYWNlKCd+MCcsICd+JywgJHBhdGhFbGVtZW50KTsKaWYgKCEgZW1wdHkoJGpzb25TY2hlbWEtPiRwYXRoRWxlbWVudCkpIHsKJGpzb25TY2hlbWEgPSAkanNvblNjaGVtYS0+JHBhdGhFbGVtZW50Owp9IGVsc2Ugewp0aHJvdyBuZXcgXEpzb25TY2hlbWFcRXhjZXB0aW9uXFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24oCidGcmFnbWVudCAiJyAuICRwYXJzZWRbJ2ZyYWdtZW50J10gLiAnIiBub3QgZm91bmQnCi4gJyBpbiAnIC4gJHVyaQopOwp9CgppZiAoISBpc19vYmplY3QoJGpzb25TY2hlbWEpKSB7CnRocm93IG5ldyBcSnNvblNjaGVtYVxFeGNlcHRpb25cUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbigKJ0ZyYWdtZW50IHBhcnQgIicgLiAkcGF0aEVsZW1lbnQgLiAnIiBpcyBubyBvYmplY3QgJwouICcgaW4gJyAuICR1cmkKKTsKfQp9Cn0KCnJldHVybiAkanNvblNjaGVtYTsKfQoKCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZSgkdXJpLCAkYmFzZVVyaSA9IG51bGwpCnsKJHJlc29sdmVyID0gbmV3IFVyaVJlc29sdmVyKCk7CiRyZXNvbHZlZFVyaSA9ICRmZXRjaFVyaSA9ICRyZXNvbHZlci0+cmVzb2x2ZSgkdXJpLCAkYmFzZVVyaSk7CgoKICRhclBhcnRzID0gJHJlc29sdmVyLT5wYXJzZSgkcmVzb2x2ZWRVcmkpOwppZiAoaXNzZXQoJGFyUGFydHNbJ2ZyYWdtZW50J10pKSB7CnVuc2V0KCRhclBhcnRzWydmcmFnbWVudCddKTsKJGZldGNoVXJpID0gJHJlc29sdmVyLT5nZW5lcmF0ZSgkYXJQYXJ0cyk7Cn0KCiRqc29uU2NoZW1hID0gJHRoaXMtPmxvYWRTY2hlbWEoJGZldGNoVXJpKTsKCgogJGpzb25TY2hlbWEgPSAkdGhpcy0+cmVzb2x2ZVBvaW50ZXIoJGpzb25TY2hlbWEsICRyZXNvbHZlZFVyaSk7CiRqc29uU2NoZW1hLT5pZCA9ICRyZXNvbHZlZFVyaTsKCnJldHVybiAkanNvblNjaGVtYTsKfQoKCgoKCgoKCgpwcm90ZWN0ZWQgZnVuY3Rpb24gbG9hZFNjaGVtYSgkZmV0Y2hVcmkpCnsKaWYgKGlzc2V0KCR0aGlzLT5zY2hlbWFDYWNoZVskZmV0Y2hVcmldKSkgewpyZXR1cm4gJHRoaXMtPnNjaGVtYUNhY2hlWyRmZXRjaFVyaV07Cn0KCiR1cmlSZXRyaWV2ZXIgPSAkdGhpcy0+Z2V0VXJpUmV0cmlldmVyKCk7CiRjb250ZW50cyA9ICR0aGlzLT51cmlSZXRyaWV2ZXItPnJldHJpZXZlKCRmZXRjaFVyaSk7CiR0aGlzLT5jb25maXJtTWVkaWFUeXBlKCR1cmlSZXRyaWV2ZXIsICRmZXRjaFVyaSk7CiRqc29uU2NoZW1hID0ganNvbl9kZWNvZGUoJGNvbnRlbnRzKTsKCmlmIChKU09OX0VSUk9SX05PTkUgPCAkZXJyb3IgPSBqc29uX2xhc3RfZXJyb3IoKSkgewp0aHJvdyBuZXcgSnNvbkRlY29kaW5nRXhjZXB0aW9uKCRlcnJvcik7Cn0KCiR0aGlzLT5zY2hlbWFDYWNoZVskZmV0Y2hVcmldID0gJGpzb25TY2hlbWE7CnJldHVybiAkanNvblNjaGVtYTsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFVyaVJldHJpZXZlcihVcmlSZXRyaWV2ZXJJbnRlcmZhY2UgJHVyaVJldHJpZXZlcikKewokdGhpcy0+dXJpUmV0cmlldmVyID0gJHVyaVJldHJpZXZlcjsKCnJldHVybiAkdGhpczsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHBhcnNlKCR1cmkpCnsKcHJlZ19tYXRjaCgnfF4oKFteOi8/I10rKTopPygvLyhbXi8/I10qKSk/KFtePyNdKikoXD8oW14jXSopKT8oIyguKikpP3wnLCAkdXJpLCAkbWF0Y2gpOwoKJGNvbXBvbmVudHMgPSBhcnJheSgpOwppZiAoNSA8IGNvdW50KCRtYXRjaCkpIHsKJGNvbXBvbmVudHMgPSBhcnJheSgKJ3NjaGVtZScgPT4gJG1hdGNoWzJdLAonYXV0aG9yaXR5JyA9PiAkbWF0Y2hbNF0sCidwYXRoJyA9PiAkbWF0Y2hbNV0KKTsKfQoKaWYgKDcgPCBjb3VudCgkbWF0Y2gpKSB7CiRjb21wb25lbnRzWydxdWVyeSddID0gJG1hdGNoWzddOwp9CgppZiAoOSA8IGNvdW50KCRtYXRjaCkpIHsKJGNvbXBvbmVudHNbJ2ZyYWdtZW50J10gPSAkbWF0Y2hbOV07Cn0KCnJldHVybiAkY29tcG9uZW50czsKfQoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGdlbmVyYXRlKGFycmF5ICRjb21wb25lbnRzKQp7CiR1cmkgPSAkY29tcG9uZW50c1snc2NoZW1lJ10gLiAnOi8vJwouICRjb21wb25lbnRzWydhdXRob3JpdHknXQouICRjb21wb25lbnRzWydwYXRoJ107CgppZiAoYXJyYXlfa2V5X2V4aXN0cygncXVlcnknLCAkY29tcG9uZW50cykpIHsKJHVyaSAuPSAkY29tcG9uZW50c1sncXVlcnknXTsKfQoKaWYgKGFycmF5X2tleV9leGlzdHMoJ2ZyYWdtZW50JywgJGNvbXBvbmVudHMpKSB7CiR1cmkgLj0gJGNvbXBvbmVudHNbJ2ZyYWdtZW50J107Cn0KCnJldHVybiAkdXJpOwp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJlc29sdmUoJHVyaSwgJGJhc2VVcmkgPSBudWxsKQp7CiRjb21wb25lbnRzID0gJHRoaXMtPnBhcnNlKCR1cmkpOwokcGF0aCA9ICRjb21wb25lbnRzWydwYXRoJ107CgppZiAoKGFycmF5X2tleV9leGlzdHMoJ3NjaGVtZScsICRjb21wb25lbnRzKSkgJiYgKCdodHRwJyA9PT0gJGNvbXBvbmVudHNbJ3NjaGVtZSddKSkgewpyZXR1cm4gJHVyaTsKfQoKJGJhc2VDb21wb25lbnRzID0gJHRoaXMtPnBhcnNlKCRiYXNlVXJpKTsKJGJhc2VQYXRoID0gJGJhc2VDb21wb25lbnRzWydwYXRoJ107CgokYmFzZUNvbXBvbmVudHNbJ3BhdGgnXSA9IHNlbGY6OmNvbWJpbmVSZWxhdGl2ZVBhdGhXaXRoQmFzZVBhdGgoJHBhdGgsICRiYXNlUGF0aCk7CgpyZXR1cm4gJHRoaXMtPmdlbmVyYXRlKCRiYXNlQ29tcG9uZW50cyk7Cn0KCgoKCgoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gY29tYmluZVJlbGF0aXZlUGF0aFdpdGhCYXNlUGF0aCgkcmVsYXRpdmVQYXRoLCAkYmFzZVBhdGgpCnsKJHJlbGF0aXZlUGF0aCA9IHNlbGY6Om5vcm1hbGl6ZVBhdGgoJHJlbGF0aXZlUGF0aCk7CiRiYXNlUGF0aFNlZ21lbnRzID0gc2VsZjo6Z2V0UGF0aFNlZ21lbnRzKCRiYXNlUGF0aCk7CgpwcmVnX21hdGNoKCd8Xi8/KFwuXC4vKD86XC4vKSopKnwnLCAkcmVsYXRpdmVQYXRoLCAkbWF0Y2gpOwokbnVtTGV2ZWxVcCA9IHN0cmxlbigkbWF0Y2hbMF0pIC8zICsgMTsKaWYgKCRudW1MZXZlbFVwID49IGNvdW50KCRiYXNlUGF0aFNlZ21lbnRzKSkgewp0aHJvdyBuZXcgVXJpUmVzb2x2ZXJFeGNlcHRpb24oc3ByaW50ZigiVW5hYmxlIHRvIHJlc29sdmUgVVJJICclcycgZnJvbSBiYXNlICclcyciLCAkcmVsYXRpdmVQYXRoLCAkYmFzZVBhdGgpKTsKfQoKJGJhc2VQYXRoU2VnbWVudHMgPSBhcnJheV9zbGljZSgkYmFzZVBhdGhTZWdtZW50cywgMCwgLSRudW1MZXZlbFVwKTsKJHBhdGggPSBwcmVnX3JlcGxhY2UoJ3xeLz8oXC5cLi8oXC4vKSopKnwnLCAnJywgJHJlbGF0aXZlUGF0aCk7CgpyZXR1cm4gaW1wbG9kZShESVJFQ1RPUllfU0VQQVJBVE9SLCAkYmFzZVBhdGhTZWdtZW50cykgLiAnLycgLiAkcGF0aDsKfQoKCgoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gbm9ybWFsaXplUGF0aCgkcGF0aCkKewokcGF0aCA9IHByZWdfcmVwbGFjZSgnfCgoPzwhXC4pXC4vKSp8JywgJycsICRwYXRoKTsKJHBhdGggPSBwcmVnX3JlcGxhY2UoJ3wvL3wnLCAnLycsICRwYXRoKTsKCnJldHVybiAkcGF0aDsKfQoKCgoKcHJpdmF0ZSBzdGF0aWMgZnVuY3Rpb24gZ2V0UGF0aFNlZ21lbnRzKCRwYXRoKQp7CnJldHVybiBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsICRwYXRoKTsKfQoKCgoKCnB1YmxpYyBmdW5jdGlvbiBpc1ZhbGlkKCR1cmkpCnsKJGNvbXBvbmVudHMgPSAkdGhpcy0+cGFyc2UoJHVyaSk7CgpyZXR1cm4gIWVtcHR5KCRjb21wb25lbnRzKTsKfQp9Cjw/cGhwCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxVcmlcUmV0cmlldmVyczsKCgoKCgoKYWJzdHJhY3QgY2xhc3MgQWJzdHJhY3RSZXRyaWV2ZXIgaW1wbGVtZW50cyBVcmlSZXRyaWV2ZXJJbnRlcmZhY2UKewoKCgoKcHJvdGVjdGVkICRjb250ZW50VHlwZTsKCgoKCgpwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudFR5cGUoKQp7CnJldHVybiAkdGhpcy0+Y29udGVudFR5cGU7Cn0KfQo8P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXFVyaVxSZXRyaWV2ZXJzOwoKdXNlIEpzb25TY2hlbWFcRXhjZXB0aW9uXFJlc291cmNlTm90Rm91bmRFeGNlcHRpb247CnVzZSBKc29uU2NoZW1hXFZhbGlkYXRvcjsKCgoKCgoKY2xhc3MgRmlsZUdldENvbnRlbnRzIGV4dGVuZHMgQWJzdHJhY3RSZXRyaWV2ZXIKewpwcm90ZWN0ZWQgJG1lc3NhZ2VCb2R5OwoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZSgkdXJpKQp7CiRjb250ZXh0ID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKGFycmF5KAonaHR0cCcgPT4gYXJyYXkoCidtZXRob2QnID0+ICdHRVQnLAonaGVhZGVyJyA9PiAiQWNjZXB0OiAiIC4gVmFsaWRhdG9yOjpTQ0hFTUFfTUVESUFfVFlQRQopKSk7CgokcmVzcG9uc2UgPSBmaWxlX2dldF9jb250ZW50cygkdXJpKTsKaWYgKGZhbHNlID09PSAkcmVzcG9uc2UpIHsKdGhyb3cgbmV3IFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24oJ0pTT04gc2NoZW1hIG5vdCBmb3VuZCBhdCAnIC4gJHVyaSk7Cn0KaWYgKCRyZXNwb25zZSA9PSAnJwomJiBzdWJzdHIoJHVyaSwgMCwgNykgPT0gJ2ZpbGU6Ly8nICYmIHN1YnN0cigkdXJpLCAtMSkgPT0gJy8nCikgewp0aHJvdyBuZXcgUmVzb3VyY2VOb3RGb3VuZEV4Y2VwdGlvbignSlNPTiBzY2hlbWEgbm90IGZvdW5kIGF0ICcgLiAkdXJpKTsKfQoKJHRoaXMtPm1lc3NhZ2VCb2R5ID0gJHJlc3BvbnNlOwppZiAoISBlbXB0eSgkaHR0cF9yZXNwb25zZV9oZWFkZXIpKSB7CiR0aGlzLT5mZXRjaENvbnRlbnRUeXBlKCRodHRwX3Jlc3BvbnNlX2hlYWRlcik7Cn0gZWxzZSB7CgogJHRoaXMtPmNvbnRlbnRUeXBlID0gbnVsbDsKfQoKcmV0dXJuICR0aGlzLT5tZXNzYWdlQm9keTsKfQoKCgoKCnByaXZhdGUgZnVuY3Rpb24gZmV0Y2hDb250ZW50VHlwZShhcnJheSAkaGVhZGVycykKewpmb3JlYWNoICgkaGVhZGVycyBhcyAkaGVhZGVyKSB7CmlmICgkdGhpcy0+Y29udGVudFR5cGUgPSBzZWxmOjpnZXRDb250ZW50VHlwZU1hdGNoSW5IZWFkZXIoJGhlYWRlcikpIHsKcmV0dXJuIHRydWU7Cn0KfQoKcmV0dXJuIGZhbHNlOwp9CgoKCgoKcHJvdGVjdGVkIHN0YXRpYyBmdW5jdGlvbiBnZXRDb250ZW50VHlwZU1hdGNoSW5IZWFkZXIoJGhlYWRlcikKewppZiAoMCA8IHByZWdfbWF0Y2goIi9Db250ZW50LVR5cGU6KFxWKikvaW1zIiwgJGhlYWRlciwgJG1hdGNoKSkgewpyZXR1cm4gdHJpbSgkbWF0Y2hbMV0pOwp9Cn0KfQo8P3BocAoKCgoKCgoKCm5hbWVzcGFjZSBKc29uU2NoZW1hXFVyaVxSZXRyaWV2ZXJzOwoKCgoKCgppbnRlcmZhY2UgVXJpUmV0cmlldmVySW50ZXJmYWNlCnsKCgoKCgoKcHVibGljIGZ1bmN0aW9uIHJldHJpZXZlKCR1cmkpOwoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRDb250ZW50VHlwZSgpOwp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYVxVcmlcUmV0cmlldmVyczsKCnVzZSBKc29uU2NoZW1hXFZhbGlkYXRvcjsKCgoKCgoKY2xhc3MgQ3VybCBleHRlbmRzIEFic3RyYWN0UmV0cmlldmVyCnsKcHJvdGVjdGVkICRtZXNzYWdlQm9keTsKCnB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgpCnsKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ2N1cmxfaW5pdCcpKSB7CnRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiY1VSTCBub3QgaW5zdGFsbGVkIik7Cn0KfQoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZSgkdXJpKQp7CiRjaCA9IGN1cmxfaW5pdCgpOwoKY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJHVyaSk7CmN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIHRydWUpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOwpjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgYXJyYXkoJ0FjY2VwdDogJyAuIFZhbGlkYXRvcjo6U0NIRU1BX01FRElBX1RZUEUpKTsKCiRyZXNwb25zZSA9IGN1cmxfZXhlYygkY2gpOwppZiAoZmFsc2UgPT09ICRyZXNwb25zZSkgewp0aHJvdyBuZXcgXEpzb25TY2hlbWFcRXhjZXB0aW9uXFJlc291cmNlTm90Rm91bmRFeGNlcHRpb24oJ0pTT04gc2NoZW1hIG5vdCBmb3VuZCcpOwp9CgokdGhpcy0+ZmV0Y2hNZXNzYWdlQm9keSgkcmVzcG9uc2UpOwokdGhpcy0+ZmV0Y2hDb250ZW50VHlwZSgkcmVzcG9uc2UpOwoKY3VybF9jbG9zZSgkY2gpOwoKcmV0dXJuICR0aGlzLT5tZXNzYWdlQm9keTsKfQoKCgoKcHJpdmF0ZSBmdW5jdGlvbiBmZXRjaE1lc3NhZ2VCb2R5KCRyZXNwb25zZSkKewpwcmVnX21hdGNoKCIvKD86XHJcbil7Mn0oLiopJC9tcyIsICRyZXNwb25zZSwgJG1hdGNoKTsKJHRoaXMtPm1lc3NhZ2VCb2R5ID0gJG1hdGNoWzFdOwp9CgoKCgoKcHJvdGVjdGVkIGZ1bmN0aW9uIGZldGNoQ29udGVudFR5cGUoJHJlc3BvbnNlKQp7CmlmICgwIDwgcHJlZ19tYXRjaCgiL0NvbnRlbnQtVHlwZTooXFYqKS9pbXMiLCAkcmVzcG9uc2UsICRtYXRjaCkpIHsKJHRoaXMtPmNvbnRlbnRUeXBlID0gdHJpbSgkbWF0Y2hbMV0pOwoKcmV0dXJuIHRydWU7Cn0KCnJldHVybiBmYWxzZTsKfQp9PD9waHAKCm5hbWVzcGFjZSBKc29uU2NoZW1hXFVyaVxSZXRyaWV2ZXJzOwoKdXNlIEpzb25TY2hlbWFcVmFsaWRhdG9yOwp1c2UgSnNvblNjaGVtYVxVcmlcUmV0cmlldmVyc1xVcmlSZXRyaWV2ZXJJbnRlcmZhY2U7CgoKCgoKCgoKCgoKCgpjbGFzcyBQcmVkZWZpbmVkQXJyYXkgZXh0ZW5kcyBBYnN0cmFjdFJldHJpZXZlcgp7CgoKCgpwcml2YXRlICRzY2hlbWFzOwoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KGFycmF5ICRzY2hlbWFzLCAkY29udGVudFR5cGUgPSBWYWxpZGF0b3I6OlNDSEVNQV9NRURJQV9UWVBFKQp7CiR0aGlzLT5zY2hlbWFzID0gJHNjaGVtYXM7CiR0aGlzLT5jb250ZW50VHlwZSA9ICRjb250ZW50VHlwZTsKfQoKCgoKCnB1YmxpYyBmdW5jdGlvbiByZXRyaWV2ZSgkdXJpKQp7CmlmICghYXJyYXlfa2V5X2V4aXN0cygkdXJpLCAkdGhpcy0+c2NoZW1hcykpIHsKdGhyb3cgbmV3IFxKc29uU2NoZW1hXEV4Y2VwdGlvblxSZXNvdXJjZU5vdEZvdW5kRXhjZXB0aW9uKHNwcmludGYoCidUaGUgSlNPTiBzY2hlbWEgIiVzIiB3YXMgbm90IGZvdW5kLicsCiR1cmkKKSk7Cn0KCnJldHVybiAkdGhpcy0+c2NoZW1hc1skdXJpXTsKfQp9PD9waHAKCgoKCgoKCgpuYW1lc3BhY2UgSnNvblNjaGVtYTsKCnVzZSBKc29uU2NoZW1hXENvbnN0cmFpbnRzXFNjaGVtYTsKdXNlIEpzb25TY2hlbWFcQ29uc3RyYWludHNcQ29uc3RyYWludDsKCnVzZSBKc29uU2NoZW1hXEV4Y2VwdGlvblxJbnZhbGlkU2NoZW1hTWVkaWFUeXBlRXhjZXB0aW9uOwp1c2UgSnNvblNjaGVtYVxFeGNlcHRpb25cSnNvbkRlY29kaW5nRXhjZXB0aW9uOwoKdXNlIEpzb25TY2hlbWFcVXJpXFJldHJpZXZlcnNcVXJpUmV0cmlldmVySW50ZXJmYWNlOwoKCgoKCgoKCmNsYXNzIFZhbGlkYXRvciBleHRlbmRzIENvbnN0cmFpbnQKewpjb25zdCBTQ0hFTUFfTUVESUFfVFlQRSA9ICdhcHBsaWNhdGlvbi9zY2hlbWEranNvbic7CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGNoZWNrKCR2YWx1ZSwgJHNjaGVtYSA9IG51bGwsICRwYXRoID0gbnVsbCwgJGkgPSBudWxsKQp7CiR2YWxpZGF0b3IgPSBuZXcgU2NoZW1hKCR0aGlzLT5jaGVja01vZGUsICR0aGlzLT51cmlSZXRyaWV2ZXIpOwokdmFsaWRhdG9yLT5jaGVjaygkdmFsdWUsICRzY2hlbWEpOwoKJHRoaXMtPmFkZEVycm9ycygkdmFsaWRhdG9yLT5nZXRFcnJvcnMoKSk7Cn0KfQo8P3BocAoKCgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXInIC4gJy9hdXRvbG9hZF9yZWFsLnBocCc7CgpyZXR1cm4gQ29tcG9zZXJBdXRvbG9hZGVySW5pdDBkNWJlYjUxNmVlN2Y4NzNiMmYyYTI2OWJhZDM4YTAwOjpnZXRMb2FkZXIoKTsKPD9waHAKCgoKJHZlbmRvckRpciA9IGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCidTeW1mb255XFxDb21wb25lbnRcXFlhbWxcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS95YW1sJyksCidTeW1mb255XFxDb21wb25lbnRcXFByb2Nlc3NcXCcgPT4gYXJyYXkoJHZlbmRvckRpciAuICcvc3ltZm9ueS9wcm9jZXNzJyksCidTeW1mb255XFxDb21wb25lbnRcXEZpbmRlclxcJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9zeW1mb255L2ZpbmRlcicpLAonU3ltZm9ueVxcQ29tcG9uZW50XFxDb25zb2xlXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkvY29uc29sZScpLAonU2VsZFxcSnNvbkxpbnQnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3NlbGQvanNvbmxpbnQvc3JjJyksCidKc29uU2NoZW1hJyA9PiBhcnJheSgkdmVuZG9yRGlyIC4gJy9qdXN0aW5yYWluYm93L2pzb24tc2NoZW1hL3NyYycpLAonQ29tcG9zZXInID0+IGFycmF5KCRiYXNlRGlyIC4gJy9zcmMnKSwKKTsKPD9waHAKCgoKJHZlbmRvckRpciA9IGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCik7Cjw/cGhwCgoKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAonRmlsZV9JdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtZmlsZS1pdGVyYXRvci9GaWxlL0l0ZXJhdG9yLnBocCcsCidGaWxlX0l0ZXJhdG9yX0ZhY2FkZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtZmlsZS1pdGVyYXRvci9GaWxlL0l0ZXJhdG9yL0ZhY2FkZS5waHAnLAonRmlsZV9JdGVyYXRvcl9GYWN0b3J5JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1maWxlLWl0ZXJhdG9yL0ZpbGUvSXRlcmF0b3IvRmFjdG9yeS5waHAnLAonUEhQVW5pdF9FeHRlbnNpb25zX0dyb3VwVGVzdFN1aXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9FeHRlbnNpb25zL0dyb3VwVGVzdFN1aXRlLnBocCcsCidQSFBVbml0X0V4dGVuc2lvbnNfUGhwdFRlc3RDYXNlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9FeHRlbnNpb25zL1BocHRUZXN0Q2FzZS5waHAnLAonUEhQVW5pdF9FeHRlbnNpb25zX1BocHRUZXN0Q2FzZV9Mb2dnZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0V4dGVuc2lvbnMvUGhwdFRlc3RDYXNlL0xvZ2dlci5waHAnLAonUEhQVW5pdF9FeHRlbnNpb25zX1BocHRUZXN0U3VpdGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0V4dGVuc2lvbnMvUGhwdFRlc3RTdWl0ZS5waHAnLAonUEhQVW5pdF9FeHRlbnNpb25zX1JlcGVhdGVkVGVzdCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRXh0ZW5zaW9ucy9SZXBlYXRlZFRlc3QucGhwJywKJ1BIUFVuaXRfRXh0ZW5zaW9uc19UZXN0RGVjb3JhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9FeHRlbnNpb25zL1Rlc3REZWNvcmF0b3IucGhwJywKJ1BIUFVuaXRfRXh0ZW5zaW9uc19UaWNrZXRMaXN0ZW5lcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRXh0ZW5zaW9ucy9UaWNrZXRMaXN0ZW5lci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQXNzZXJ0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQXNzZXJ0LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Bc3NlcnRpb25GYWlsZWRFcnJvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0Fzc2VydGlvbkZhaWxlZEVycm9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db21wYXJhdG9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29tcGFyYXRvci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29tcGFyYXRvckZhY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db21wYXJhdG9yRmFjdG9yeS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29tcGFyYXRvcl9BcnJheScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvQXJyYXkucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbXBhcmF0b3JfRE9NRG9jdW1lbnQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db21wYXJhdG9yL0RPTURvY3VtZW50LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db21wYXJhdG9yX0RvdWJsZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvRG91YmxlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db21wYXJhdG9yX0V4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvRXhjZXB0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db21wYXJhdG9yX01vY2tPYmplY3QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db21wYXJhdG9yL01vY2tPYmplY3QucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbXBhcmF0b3JfTnVtZXJpYycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvTnVtZXJpYy5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29tcGFyYXRvcl9PYmplY3QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db21wYXJhdG9yL09iamVjdC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29tcGFyYXRvcl9SZXNvdXJjZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvUmVzb3VyY2UucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbXBhcmF0b3JfU2NhbGFyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29tcGFyYXRvci9TY2FsYXIucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbXBhcmF0b3JfU3BsT2JqZWN0U3RvcmFnZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmF0b3IvU3BsT2JqZWN0U3RvcmFnZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29tcGFyYXRvcl9UeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29tcGFyYXRvci9UeXBlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db21wYXJpc29uRmFpbHVyZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbXBhcmlzb25GYWlsdXJlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9BbmQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0FuZC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9BcnJheUhhc0tleScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvQXJyYXlIYXNLZXkucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfQXR0cmlidXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9BdHRyaWJ1dGUucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfQ2FsbGJhY2snID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0NhbGxiYWNrLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0NsYXNzSGFzQXR0cmlidXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9DbGFzc0hhc0F0dHJpYnV0ZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9DbGFzc0hhc1N0YXRpY0F0dHJpYnV0ZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvQ2xhc3NIYXNTdGF0aWNBdHRyaWJ1dGUucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfQ29tcG9zaXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9Db21wb3NpdGUucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfQ291bnQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0NvdW50LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0V4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvRXhjZXB0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0V4Y2VwdGlvbkNvZGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0V4Y2VwdGlvbkNvZGUucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfRXhjZXB0aW9uTWVzc2FnZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvRXhjZXB0aW9uTWVzc2FnZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9GaWxlRXhpc3RzJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9GaWxlRXhpc3RzLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0dyZWF0ZXJUaGFuJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9HcmVhdGVyVGhhbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc0FueXRoaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9Jc0FueXRoaW5nLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0lzRW1wdHknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzRW1wdHkucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfSXNFcXVhbCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvSXNFcXVhbC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc0ZhbHNlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9Jc0ZhbHNlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0lzSWRlbnRpY2FsJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9Jc0lkZW50aWNhbC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc0luc3RhbmNlT2YnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzSW5zdGFuY2VPZi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc0pzb24nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzSnNvbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc051bGwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzTnVsbC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc1RydWUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzVHJ1ZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Jc1R5cGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0lzVHlwZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Kc29uTWF0Y2hlcycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvSnNvbk1hdGNoZXMucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfSnNvbk1hdGNoZXNfRXJyb3JNZXNzYWdlUHJvdmlkZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L0pzb25NYXRjaGVzL0Vycm9yTWVzc2FnZVByb3ZpZGVyLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X0xlc3NUaGFuJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9MZXNzVGhhbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9Ob3QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L05vdC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9PYmplY3RIYXNBdHRyaWJ1dGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L09iamVjdEhhc0F0dHJpYnV0ZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9PcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvT3IucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfUENSRU1hdGNoJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9QQ1JFTWF0Y2gucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfU2FtZVNpemUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L1NhbWVTaXplLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X1N0cmluZ0NvbnRhaW5zJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9TdHJpbmdDb250YWlucy5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9TdHJpbmdFbmRzV2l0aCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvU3RyaW5nRW5kc1dpdGgucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfU3RyaW5nTWF0Y2hlcycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvU3RyaW5nTWF0Y2hlcy5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfQ29uc3RyYWludF9TdHJpbmdTdGFydHNXaXRoJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvQ29uc3RyYWludC9TdHJpbmdTdGFydHNXaXRoLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X1RyYXZlcnNhYmxlQ29udGFpbnMnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L1RyYXZlcnNhYmxlQ29udGFpbnMucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX0NvbnN0cmFpbnRfVHJhdmVyc2FibGVDb250YWluc09ubHknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9Db25zdHJhaW50L1RyYXZlcnNhYmxlQ29udGFpbnNPbmx5LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Db25zdHJhaW50X1hvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0NvbnN0cmFpbnQvWG9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19FcnJvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0Vycm9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19FcnJvcl9EZXByZWNhdGVkJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvRXJyb3IvRGVwcmVjYXRlZC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfRXJyb3JfTm90aWNlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvRXJyb3IvTm90aWNlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19FcnJvcl9XYXJuaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvRXJyb3IvV2FybmluZy5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfRXhjZXB0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvRXhjZXB0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19FeHBlY3RhdGlvbkZhaWxlZEV4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0V4cGVjdGF0aW9uRmFpbGVkRXhjZXB0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19JbmNvbXBsZXRlVGVzdCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL0luY29tcGxldGVUZXN0LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19JbmNvbXBsZXRlVGVzdEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvSW5jb21wbGV0ZVRlc3RFcnJvci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9CdWlsZGVyX0lkZW50aXR5JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvQnVpbGRlci9JZGVudGl0eS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9CdWlsZGVyX0ludm9jYXRpb25Nb2NrZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9CdWlsZGVyL0ludm9jYXRpb25Nb2NrZXIucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfQnVpbGRlcl9NYXRjaCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L0J1aWxkZXIvTWF0Y2gucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfQnVpbGRlcl9NZXRob2ROYW1lTWF0Y2gnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9CdWlsZGVyL01ldGhvZE5hbWVNYXRjaC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9CdWlsZGVyX05hbWVzcGFjZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L0J1aWxkZXIvTmFtZXNwYWNlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X0J1aWxkZXJfUGFyYW1ldGVyc01hdGNoJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvQnVpbGRlci9QYXJhbWV0ZXJzTWF0Y2gucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfQnVpbGRlcl9TdHViJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvQnVpbGRlci9TdHViLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X0dlbmVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L0dlbmVyYXRvci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9JbnZvY2F0aW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvSW52b2NhdGlvbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9JbnZvY2F0aW9uTW9ja2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvSW52b2NhdGlvbk1vY2tlci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9JbnZvY2F0aW9uX09iamVjdCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L0ludm9jYXRpb24vT2JqZWN0LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X0ludm9jYXRpb25fU3RhdGljJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvSW52b2NhdGlvbi9TdGF0aWMucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfSW52b2thYmxlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvSW52b2thYmxlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01hdGNoZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9NYXRjaGVyLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01hdGNoZXJfQW55SW52b2tlZENvdW50JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvTWF0Y2hlci9BbnlJbnZva2VkQ291bnQucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfTWF0Y2hlcl9BbnlQYXJhbWV0ZXJzJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvTWF0Y2hlci9BbnlQYXJhbWV0ZXJzLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01hdGNoZXJfSW52b2NhdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L01hdGNoZXIvSW52b2NhdGlvbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9NYXRjaGVyX0ludm9rZWRBdEluZGV4JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvTWF0Y2hlci9JbnZva2VkQXRJbmRleC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9NYXRjaGVyX0ludm9rZWRBdExlYXN0T25jZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L01hdGNoZXIvSW52b2tlZEF0TGVhc3RPbmNlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01hdGNoZXJfSW52b2tlZENvdW50JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvTWF0Y2hlci9JbnZva2VkQ291bnQucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfTWF0Y2hlcl9JbnZva2VkUmVjb3JkZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9NYXRjaGVyL0ludm9rZWRSZWNvcmRlci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9NYXRjaGVyX01ldGhvZE5hbWUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9NYXRjaGVyL01ldGhvZE5hbWUucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfTWF0Y2hlcl9QYXJhbWV0ZXJzJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvTWF0Y2hlci9QYXJhbWV0ZXJzLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01hdGNoZXJfU3RhdGVsZXNzSW52b2NhdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L01hdGNoZXIvU3RhdGVsZXNzSW52b2NhdGlvbi5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9Nb2NrQnVpbGRlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L01vY2tCdWlsZGVyLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X01vY2tPYmplY3QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9Nb2NrT2JqZWN0LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1N0dWInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9TdHViLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1N0dWJfQ29uc2VjdXRpdmVDYWxscycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L1N0dWIvQ29uc2VjdXRpdmVDYWxscy5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfTW9ja09iamVjdF9TdHViX0V4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L1N0dWIvRXhjZXB0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1N0dWJfTWF0Y2hlckNvbGxlY3Rpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9TdHViL01hdGNoZXJDb2xsZWN0aW9uLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1N0dWJfUmV0dXJuJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvU3R1Yi9SZXR1cm4ucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfU3R1Yl9SZXR1cm5Bcmd1bWVudCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L1N0dWIvUmV0dXJuQXJndW1lbnQucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfU3R1Yl9SZXR1cm5DYWxsYmFjaycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0LW1vY2stb2JqZWN0cy9QSFBVbml0L0ZyYW1ld29yay9Nb2NrT2JqZWN0L1N0dWIvUmV0dXJuQ2FsbGJhY2sucGhwJywKJ1BIUFVuaXRfRnJhbWV3b3JrX01vY2tPYmplY3RfU3R1Yl9SZXR1cm5TZWxmJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQtbW9jay1vYmplY3RzL1BIUFVuaXQvRnJhbWV3b3JrL01vY2tPYmplY3QvU3R1Yi9SZXR1cm5TZWxmLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1N0dWJfUmV0dXJuVmFsdWVNYXAnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9TdHViL1JldHVyblZhbHVlTWFwLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Nb2NrT2JqZWN0X1ZlcmlmaWFibGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMvUEhQVW5pdC9GcmFtZXdvcmsvTW9ja09iamVjdC9WZXJpZmlhYmxlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19PdXRwdXRFcnJvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL091dHB1dEVycm9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19TZWxmRGVzY3JpYmluZycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL1NlbGZEZXNjcmliaW5nLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Ta2lwcGVkVGVzdCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL1NraXBwZWRUZXN0LnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19Ta2lwcGVkVGVzdEVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvU2tpcHBlZFRlc3RFcnJvci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfU2tpcHBlZFRlc3RTdWl0ZUVycm9yJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvU2tpcHBlZFRlc3RTdWl0ZUVycm9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19TeW50aGV0aWNFcnJvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL1N5bnRoZXRpY0Vycm9yLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19UZXN0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvVGVzdC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfVGVzdENhc2UnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9UZXN0Q2FzZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfVGVzdEZhaWx1cmUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L0ZyYW1ld29yay9UZXN0RmFpbHVyZS5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfVGVzdExpc3RlbmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvVGVzdExpc3RlbmVyLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19UZXN0UmVzdWx0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvVGVzdFJlc3VsdC5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfVGVzdFN1aXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvVGVzdFN1aXRlLnBocCcsCidQSFBVbml0X0ZyYW1ld29ya19UZXN0U3VpdGVfRGF0YVByb3ZpZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9GcmFtZXdvcmsvVGVzdFN1aXRlL0RhdGFQcm92aWRlci5waHAnLAonUEhQVW5pdF9GcmFtZXdvcmtfV2FybmluZycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvRnJhbWV3b3JrL1dhcm5pbmcucGhwJywKJ1BIUFVuaXRfUnVubmVyX0Jhc2VUZXN0UnVubmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9SdW5uZXIvQmFzZVRlc3RSdW5uZXIucGhwJywKJ1BIUFVuaXRfUnVubmVyX1N0YW5kYXJkVGVzdFN1aXRlTG9hZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9SdW5uZXIvU3RhbmRhcmRUZXN0U3VpdGVMb2FkZXIucGhwJywKJ1BIUFVuaXRfUnVubmVyX1Rlc3RTdWl0ZUxvYWRlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvUnVubmVyL1Rlc3RTdWl0ZUxvYWRlci5waHAnLAonUEhQVW5pdF9SdW5uZXJfVmVyc2lvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvUnVubmVyL1ZlcnNpb24ucGhwJywKJ1BIUFVuaXRfVGV4dFVJX0NvbW1hbmQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1RleHRVSS9Db21tYW5kLnBocCcsCidQSFBVbml0X1RleHRVSV9SZXN1bHRQcmludGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9UZXh0VUkvUmVzdWx0UHJpbnRlci5waHAnLAonUEhQVW5pdF9UZXh0VUlfVGVzdFJ1bm5lcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVGV4dFVJL1Rlc3RSdW5uZXIucGhwJywKJ1BIUFVuaXRfVXRpbF9DbGFzcycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9DbGFzcy5waHAnLAonUEhQVW5pdF9VdGlsX0NvbmZpZ3VyYXRpb24nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvQ29uZmlndXJhdGlvbi5waHAnLAonUEhQVW5pdF9VdGlsX0RlcHJlY2F0ZWRGZWF0dXJlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0RlcHJlY2F0ZWRGZWF0dXJlLnBocCcsCidQSFBVbml0X1V0aWxfRGVwcmVjYXRlZEZlYXR1cmVfTG9nZ2VyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0RlcHJlY2F0ZWRGZWF0dXJlL0xvZ2dlci5waHAnLAonUEhQVW5pdF9VdGlsX0RpZmYnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvRGlmZi5waHAnLAonUEhQVW5pdF9VdGlsX0Vycm9ySGFuZGxlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9FcnJvckhhbmRsZXIucGhwJywKJ1BIUFVuaXRfVXRpbF9GaWxlbG9hZGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0ZpbGVsb2FkZXIucGhwJywKJ1BIUFVuaXRfVXRpbF9GaWxlc3lzdGVtJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0ZpbGVzeXN0ZW0ucGhwJywKJ1BIUFVuaXRfVXRpbF9GaWx0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvRmlsdGVyLnBocCcsCidQSFBVbml0X1V0aWxfR2V0b3B0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0dldG9wdC5waHAnLAonUEhQVW5pdF9VdGlsX0dsb2JhbFN0YXRlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0dsb2JhbFN0YXRlLnBocCcsCidQSFBVbml0X1V0aWxfSW52YWxpZEFyZ3VtZW50SGVscGVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0ludmFsaWRBcmd1bWVudEhlbHBlci5waHAnLAonUEhQVW5pdF9VdGlsX0xvZ19KU09OJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0xvZy9KU09OLnBocCcsCidQSFBVbml0X1V0aWxfTG9nX0pVbml0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL0xvZy9KVW5pdC5waHAnLAonUEhQVW5pdF9VdGlsX0xvZ19UQVAnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvTG9nL1RBUC5waHAnLAonUEhQVW5pdF9VdGlsX1BIUCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9QSFAucGhwJywKJ1BIUFVuaXRfVXRpbF9QSFBfRGVmYXVsdCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9QSFAvRGVmYXVsdC5waHAnLAonUEhQVW5pdF9VdGlsX1BIUF9XaW5kb3dzJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL1BIUC9XaW5kb3dzLnBocCcsCidQSFBVbml0X1V0aWxfUHJpbnRlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9QcmludGVyLnBocCcsCidQSFBVbml0X1V0aWxfU3RyaW5nJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL1N0cmluZy5waHAnLAonUEhQVW5pdF9VdGlsX1Rlc3QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvVGVzdC5waHAnLAonUEhQVW5pdF9VdGlsX1Rlc3REb3hfTmFtZVByZXR0aWZpZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvVGVzdERveC9OYW1lUHJldHRpZmllci5waHAnLAonUEhQVW5pdF9VdGlsX1Rlc3REb3hfUmVzdWx0UHJpbnRlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9UZXN0RG94L1Jlc3VsdFByaW50ZXIucGhwJywKJ1BIUFVuaXRfVXRpbF9UZXN0RG94X1Jlc3VsdFByaW50ZXJfSFRNTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHB1bml0L1BIUFVuaXQvVXRpbC9UZXN0RG94L1Jlc3VsdFByaW50ZXIvSFRNTC5waHAnLAonUEhQVW5pdF9VdGlsX1Rlc3REb3hfUmVzdWx0UHJpbnRlcl9UZXh0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL1Rlc3REb3gvUmVzdWx0UHJpbnRlci9UZXh0LnBocCcsCidQSFBVbml0X1V0aWxfVGVzdFN1aXRlSXRlcmF0b3InID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvVGVzdFN1aXRlSXRlcmF0b3IucGhwJywKJ1BIUFVuaXRfVXRpbF9UeXBlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocHVuaXQvUEhQVW5pdC9VdGlsL1R5cGUucGhwJywKJ1BIUFVuaXRfVXRpbF9YTUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC9QSFBVbml0L1V0aWwvWE1MLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfRHJpdmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvRHJpdmVyLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX0RyaXZlcl9YZGVidWcnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UvUEhQL0NvZGVDb3ZlcmFnZS9Ecml2ZXIvWGRlYnVnLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX0V4Y2VwdGlvbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL0V4Y2VwdGlvbi5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9GaWx0ZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UvUEhQL0NvZGVDb3ZlcmFnZS9GaWx0ZXIucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfUmVwb3J0X0Nsb3ZlcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9DbG92ZXIucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfUmVwb3J0X0ZhY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UvUEhQL0NvZGVDb3ZlcmFnZS9SZXBvcnQvRmFjdG9yeS5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9SZXBvcnRfSFRNTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9IVE1MLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX1JlcG9ydF9IVE1MX1JlbmRlcmVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvUmVwb3J0L0hUTUwvUmVuZGVyZXIucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfUmVwb3J0X0hUTUxfUmVuZGVyZXJfRGFzaGJvYXJkJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvUmVwb3J0L0hUTUwvUmVuZGVyZXIvRGFzaGJvYXJkLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX1JlcG9ydF9IVE1MX1JlbmRlcmVyX0RpcmVjdG9yeScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9IVE1ML1JlbmRlcmVyL0RpcmVjdG9yeS5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9SZXBvcnRfSFRNTF9SZW5kZXJlcl9GaWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvUmVwb3J0L0hUTUwvUmVuZGVyZXIvRmlsZS5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9SZXBvcnRfTm9kZScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9Ob2RlLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX1JlcG9ydF9Ob2RlX0RpcmVjdG9yeScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9Ob2RlL0RpcmVjdG9yeS5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9SZXBvcnRfTm9kZV9GaWxlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvUmVwb3J0L05vZGUvRmlsZS5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9SZXBvcnRfTm9kZV9JdGVyYXRvcicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1JlcG9ydC9Ob2RlL0l0ZXJhdG9yLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX1JlcG9ydF9QSFAnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UvUEhQL0NvZGVDb3ZlcmFnZS9SZXBvcnQvUEhQLnBocCcsCidQSFBfQ29kZUNvdmVyYWdlX1JlcG9ydF9UZXh0JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvUmVwb3J0L1RleHQucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfVXRpbCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZS9QSFAvQ29kZUNvdmVyYWdlL1V0aWwucGhwJywKJ1BIUF9Db2RlQ292ZXJhZ2VfVXRpbF9JbnZhbGlkQXJndW1lbnRIZWxwZXInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWNvZGUtY292ZXJhZ2UvUEhQL0NvZGVDb3ZlcmFnZS9VdGlsL0ludmFsaWRBcmd1bWVudEhlbHBlci5waHAnLAonUEhQX0NvZGVDb3ZlcmFnZV9WZXJzaW9uJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC1jb2RlLWNvdmVyYWdlL1BIUC9Db2RlQ292ZXJhZ2UvVmVyc2lvbi5waHAnLAonUEhQX1RpbWVyJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10aW1lci9QSFAvVGltZXIucGhwJywKJ1BIUF9Ub2tlbicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuV2l0aFNjb3BlJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5XaXRoU2NvcGVBbmRWaXNpYmlsaXR5JyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQUJTVFJBQ1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9BTVBFUlNBTkQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9BTkRfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9BUlJBWScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0FSUkFZX0NBU1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9BUycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0FUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQkFDS1RJQ0snID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9CQURfQ0hBUkFDVEVSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQk9PTEVBTl9BTkQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9CT09MRUFOX09SJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQk9PTF9DQVNUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQlJFQUsnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9DQUxMQUJMRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NBUkVUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0FTRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NBVENIJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0hBUkFDVEVSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0xBU1MnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9DTEFTU19DJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0xBU1NfTkFNRV9DT05TVEFOVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NMT05FJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0xPU0VfQlJBQ0tFVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NMT1NFX0NVUkxZJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0xPU0VfU1FVQVJFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ0xPU0VfVEFHJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ09MT04nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9DT01NQScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NPTU1FTlQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9DT05DQVRfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9DT05TVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NPTlNUQU5UX0VOQ0FQU0VEX1NUUklORycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0NPTlRJTlVFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fQ1VSTFlfT1BFTicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0RFQycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0RFQ0xBUkUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ERUZBVUxUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRElSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRElWJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRElWX0VRVUFMJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRE5VTUJFUicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0RPJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRE9DX0NPTU1FTlQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ET0xMQVInID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ET0xMQVJfT1BFTl9DVVJMWV9CUkFDRVMnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ET1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ET1VCTEVfQVJST1cnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ET1VCTEVfQ0FTVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0RPVUJMRV9DT0xPTicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0RPVUJMRV9RVU9URVMnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9FQ0hPJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRUxTRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0VMU0VJRicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0VNUFRZJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRU5DQVBTRURfQU5EX1dISVRFU1BBQ0UnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9FTkRERUNMQVJFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRU5ERk9SJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRU5ERk9SRUFDSCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0VORElGJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRU5EU1dJVENIJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRU5EV0hJTEUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9FTkRfSEVSRURPQycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0VRVUFMJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRVZBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0VYQ0xBTUFUSU9OX01BUksnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9FWElUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRVhURU5EUycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0ZJTEUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9GSU5BTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0ZJTkFMTFknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9GT1InID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9GT1JFQUNIJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fRlVOQ1RJT04nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9GVU5DX0MnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9HTE9CQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9HT1RPJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fR1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9IQUxUX0NPTVBJTEVSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSUYnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9JTVBMRU1FTlRTJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSU5DJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSU5DTFVERScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lOQ0xVREVfT05DRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lOTElORV9IVE1MJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSU5TVEFOQ0VPRicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lOU1RFQURPRicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lOVEVSRkFDRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lOVF9DQVNUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSVNTRVQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9JU19FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0lTX0dSRUFURVJfT1JfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9JU19JREVOVElDQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9JU19OT1RfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9JU19OT1RfSURFTlRJQ0FMJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fSVNfU01BTExFUl9PUl9FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0luY2x1ZGVzJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTElORScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX0xJU1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9MTlVNQkVSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTE9HSUNBTF9BTkQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9MT0dJQ0FMX09SJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTE9HSUNBTF9YT1InID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9MVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX01FVEhPRF9DJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTUlOVVMnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9NSU5VU19FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX01PRF9FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX01VTFQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9NVUxfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9OQU1FU1BBQ0UnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9ORVcnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9OU19DJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTlNfU0VQQVJBVE9SJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fTlVNX1NUUklORycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX09CSkVDVF9DQVNUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fT0JKRUNUX09QRVJBVE9SJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fT1BFTl9CUkFDS0VUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fT1BFTl9DVVJMWScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX09QRU5fU1FVQVJFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fT1BFTl9UQUcnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9PUEVOX1RBR19XSVRIX0VDSE8nID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9PUl9FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1BBQU1BWUlNX05FS1VET1RBWUlNJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fUEVSQ0VOVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1BJUEUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9QTFVTJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fUExVU19FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1BSSU5UJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fUFJJVkFURScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1BST1RFQ1RFRCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1BVQkxJQycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1FVRVNUSU9OX01BUksnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9SRVFVSVJFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fUkVRVUlSRV9PTkNFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fUkVUVVJOJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU0VNSUNPTE9OJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU0wnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9TTF9FUVVBTCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1NSJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU1JfRVFVQUwnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9TVEFSVF9IRVJFRE9DJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU1RBVElDJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU1RSSU5HJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fU1RSSU5HX0NBU1QnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9TVFJJTkdfVkFSTkFNRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1NXSVRDSCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1N0cmVhbScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi9TdHJlYW0ucGhwJywKJ1BIUF9Ub2tlbl9TdHJlYW1fQ2FjaGluZ0ZhY3RvcnknID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4vU3RyZWFtL0NhY2hpbmdGYWN0b3J5LnBocCcsCidQSFBfVG9rZW5fVEhST1cnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9USUxERScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1RSQUlUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fVFJBSVRfQycgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1RSWScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1VOU0VUJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fVU5TRVRfQ0FTVCcgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1VTRScgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1ZBUicgPT4gJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtdG9rZW4tc3RyZWFtL1BIUC9Ub2tlbi5waHAnLAonUEhQX1Rva2VuX1ZBUklBQkxFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fV0hJTEUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1BIUF9Ub2tlbl9XSElURVNQQUNFJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fWE9SX0VRVUFMJyA9PiAkdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10b2tlbi1zdHJlYW0vUEhQL1Rva2VuLnBocCcsCidQSFBfVG9rZW5fWUlFTEQnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbS9QSFAvVG9rZW4ucGhwJywKJ1RleHRfVGVtcGxhdGUnID0+ICR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRleHQtdGVtcGxhdGUvVGV4dC9UZW1wbGF0ZS5waHAnLAopOwo8P3BocAoKCgpjbGFzcyBDb21wb3NlckF1dG9sb2FkZXJJbml0MGQ1YmViNTE2ZWU3Zjg3M2IyZjJhMjY5YmFkMzhhMDAKewpwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkQ2xhc3NMb2FkZXIoJGNsYXNzKQp7CmlmICgnQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXInID09PSAkY2xhc3MpIHsKcmVxdWlyZSBfX0RJUl9fIC4gJy9DbGFzc0xvYWRlci5waHAnOwp9Cn0KCnB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0TG9hZGVyKCkKewppZiAobnVsbCAhPT0gc2VsZjo6JGxvYWRlcikgewpyZXR1cm4gc2VsZjo6JGxvYWRlcjsKfQoKc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0MGQ1YmViNTE2ZWU3Zjg3M2IyZjJhMjY5YmFkMzhhMDAnLCAnbG9hZENsYXNzTG9hZGVyJyksIHRydWUsIHRydWUpOwpzZWxmOjokbG9hZGVyID0gJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJ0NvbXBvc2VyQXV0b2xvYWRlckluaXQwZDViZWI1MTZlZTdmODczYjJmMmEyNjliYWQzOGEwMCcsICdsb2FkQ2xhc3NMb2FkZXInKSk7CgokdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKJGluY2x1ZGVQYXRocyA9IHJlcXVpcmUgX19ESVJfXyAuICcvaW5jbHVkZV9wYXRocy5waHAnOwphcnJheV9wdXNoKCRpbmNsdWRlUGF0aHMsIGdldF9pbmNsdWRlX3BhdGgoKSk7CnNldF9pbmNsdWRlX3BhdGgoam9pbihQQVRIX1NFUEFSQVRPUiwgJGluY2x1ZGVQYXRocykpOwoKJG1hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfbmFtZXNwYWNlcy5waHAnOwpmb3JlYWNoICgkbWFwIGFzICRuYW1lc3BhY2UgPT4gJHBhdGgpIHsKJGxvYWRlci0+c2V0KCRuYW1lc3BhY2UsICRwYXRoKTsKfQoKJG1hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfcHNyNC5waHAnOwpmb3JlYWNoICgkbWFwIGFzICRuYW1lc3BhY2UgPT4gJHBhdGgpIHsKJGxvYWRlci0+c2V0UHNyNCgkbmFtZXNwYWNlLCAkcGF0aCk7Cn0KCiRjbGFzc01hcCA9IHJlcXVpcmUgX19ESVJfXyAuICcvYXV0b2xvYWRfY2xhc3NtYXAucGhwJzsKaWYgKCRjbGFzc01hcCkgewokbG9hZGVyLT5hZGRDbGFzc01hcCgkY2xhc3NNYXApOwp9CgokbG9hZGVyLT5yZWdpc3Rlcih0cnVlKTsKCnJldHVybiAkbG9hZGVyOwp9Cn0KPD9waHAKCgoKJHZlbmRvckRpciA9IGRpcm5hbWUoZGlybmFtZShfX0ZJTEVfXykpOwokYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgpyZXR1cm4gYXJyYXkoCiR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdC1tb2NrLW9iamVjdHMnLAokdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10aW1lcicsCiR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLXRva2VuLXN0cmVhbScsCiR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwLWZpbGUtaXRlcmF0b3InLAokdmVuZG9yRGlyIC4gJy9waHB1bml0L3BocC10ZXh0LXRlbXBsYXRlJywKJHZlbmRvckRpciAuICcvcGhwdW5pdC9waHAtY29kZS1jb3ZlcmFnZScsCiR2ZW5kb3JEaXIgLiAnL3BocHVuaXQvcGhwdW5pdCcsCiR2ZW5kb3JEaXIgLiAnL3N5bWZvbnkveWFtbCcsCik7Cjw/cGhwCgoKCgoKCgoKCgoKbmFtZXNwYWNlIENvbXBvc2VyXEF1dG9sb2FkOwoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCgoKCmNsYXNzIENsYXNzTG9hZGVyCnsKCiBwcml2YXRlICRwcmVmaXhMZW5ndGhzUHNyNCA9IGFycmF5KCk7CnByaXZhdGUgJHByZWZpeERpcnNQc3I0ID0gYXJyYXkoKTsKcHJpdmF0ZSAkZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5KCk7CgoKIHByaXZhdGUgJHByZWZpeGVzUHNyMCA9IGFycmF5KCk7CnByaXZhdGUgJGZhbGxiYWNrRGlyc1BzcjAgPSBhcnJheSgpOwoKcHJpdmF0ZSAkdXNlSW5jbHVkZVBhdGggPSBmYWxzZTsKcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwoKcHVibGljIGZ1bmN0aW9uIGdldFByZWZpeGVzKCkKewpyZXR1cm4gY2FsbF91c2VyX2Z1bmNfYXJyYXkoJ2FycmF5X21lcmdlJywgJHRoaXMtPnByZWZpeGVzUHNyMCk7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlc1BzcjQoKQp7CnJldHVybiAkdGhpcy0+cHJlZml4RGlyc1BzcjQ7Cn0KCnB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnMoKQp7CnJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlyc1BzcjQoKQp7CnJldHVybiAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNDsKfQoKcHVibGljIGZ1bmN0aW9uIGdldENsYXNzTWFwKCkKewpyZXR1cm4gJHRoaXMtPmNsYXNzTWFwOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkQ2xhc3NNYXAoYXJyYXkgJGNsYXNzTWFwKQp7CmlmICgkdGhpcy0+Y2xhc3NNYXApIHsKJHRoaXMtPmNsYXNzTWFwID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmNsYXNzTWFwLCAkY2xhc3NNYXApOwp9IGVsc2UgewokdGhpcy0+Y2xhc3NNYXAgPSAkY2xhc3NNYXA7Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkKCRwcmVmaXgsICRwYXRocywgJHByZXBlbmQgPSBmYWxzZSkKewppZiAoISRwcmVmaXgpIHsKaWYgKCRwcmVwZW5kKSB7CiR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCihhcnJheSkgJHBhdGhzLAokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMAopOwp9IGVsc2UgewokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IGFycmF5X21lcmdlKAokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCwKKGFycmF5KSAkcGF0aHMKKTsKfQoKcmV0dXJuOwp9CgokZmlyc3QgPSAkcHJlZml4WzBdOwppZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSkpIHsKJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CgpyZXR1cm47Cn0KaWYgKCRwcmVwZW5kKSB7CiR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAooYXJyYXkpICRwYXRocywKJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdCik7Cn0gZWxzZSB7CiR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAokdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0sCihhcnJheSkgJHBhdGhzCik7Cn0KfQoKCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gYWRkUHNyNCgkcHJlZml4LCAkcGF0aHMsICRwcmVwZW5kID0gZmFsc2UpCnsKaWYgKCEkcHJlZml4KSB7CgogaWYgKCRwcmVwZW5kKSB7CiR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCihhcnJheSkgJHBhdGhzLAokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNAopOwp9IGVsc2UgewokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5X21lcmdlKAokdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCwKKGFycmF5KSAkcGF0aHMKKTsKfQp9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSkpIHsKCiAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwppZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKdGhyb3cgbmV3IFxJbnZhbGlkQXJndW1lbnRFeGNlcHRpb24oIkEgbm9uLWVtcHR5IFBTUi00IHByZWZpeCBtdXN0IGVuZCB3aXRoIGEgbmFtZXNwYWNlIHNlcGFyYXRvci4iKTsKfQokdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJHByZWZpeFswXV1bJHByZWZpeF0gPSAkbGVuZ3RoOwokdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKfSBlbHNlaWYgKCRwcmVwZW5kKSB7CgogJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCihhcnJheSkgJHBhdGhzLAokdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0KKTsKfSBlbHNlIHsKCiAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdLAooYXJyYXkpICRwYXRocwopOwp9Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0KCRwcmVmaXgsICRwYXRocykKewppZiAoISRwcmVmaXgpIHsKJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSAoYXJyYXkpICRwYXRoczsKfSBlbHNlIHsKJHRoaXMtPnByZWZpeGVzUHNyMFskcHJlZml4WzBdXVskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwp9Cn0KCgoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gc2V0UHNyNCgkcHJlZml4LCAkcGF0aHMpIHsKaWYgKCEkcHJlZml4KSB7CiR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gKGFycmF5KSAkcGF0aHM7Cn0gZWxzZSB7CiRsZW5ndGggPSBzdHJsZW4oJHByZWZpeCk7CmlmICgnXFwnICE9PSAkcHJlZml4WyRsZW5ndGggLSAxXSkgewp0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSBub24tZW1wdHkgUFNSLTQgcHJlZml4IG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLiIpOwp9CiR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskcHJlZml4WzBdXVskcHJlZml4XSA9ICRsZW5ndGg7CiR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwp9Cn0KCgoKCgoKcHVibGljIGZ1bmN0aW9uIHNldFVzZUluY2x1ZGVQYXRoKCR1c2VJbmNsdWRlUGF0aCkKewokdGhpcy0+dXNlSW5jbHVkZVBhdGggPSAkdXNlSW5jbHVkZVBhdGg7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCnsKcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKfQoKCgoKCgpwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJHByZXBlbmQgPSBmYWxzZSkKewpzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSwgdHJ1ZSwgJHByZXBlbmQpOwp9CgoKCgpwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3RlcigpCnsKc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSk7Cn0KCgoKCgoKCnB1YmxpYyBmdW5jdGlvbiBsb2FkQ2xhc3MoJGNsYXNzKQp7CmlmICgkZmlsZSA9ICR0aGlzLT5maW5kRmlsZSgkY2xhc3MpKSB7CmluY2x1ZGUgJGZpbGU7CgpyZXR1cm4gdHJ1ZTsKfQp9CgoKCgoKCgoKcHVibGljIGZ1bmN0aW9uIGZpbmRGaWxlKCRjbGFzcykKewoKIGlmICgnXFwnID09ICRjbGFzc1swXSkgewokY2xhc3MgPSBzdWJzdHIoJGNsYXNzLCAxKTsKfQoKCiBpZiAoaXNzZXQoJHRoaXMtPmNsYXNzTWFwWyRjbGFzc10pKSB7CnJldHVybiAkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXTsKfQoKCiAkbG9naWNhbFBhdGhQc3I0ID0gc3RydHIoJGNsYXNzLCAnXFwnLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICcucGhwJzsKCiRmaXJzdCA9ICRjbGFzc1swXTsKaWYgKGlzc2V0KCR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskZmlyc3RdKSkgewpmb3JlYWNoICgkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJGZpcnN0XSBhcyAkcHJlZml4ID0+ICRsZW5ndGgpIHsKaWYgKDAgPT09IHN0cnBvcygkY2xhc3MsICRwcmVmaXgpKSB7CmZvcmVhY2ggKCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSBhcyAkZGlyKSB7CmlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gc3Vic3RyKCRsb2dpY2FsUGF0aFBzcjQsICRsZW5ndGgpKSkgewpyZXR1cm4gJGZpbGU7Cn0KfQp9Cn0KfQoKCiBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNCBhcyAkZGlyKSB7CmlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyNCkpIHsKcmV0dXJuICRmaWxlOwp9Cn0KCgogaWYgKGZhbHNlICE9PSAkcG9zID0gc3RycnBvcygkY2xhc3MsICdcXCcpKSB7CgogJGxvZ2ljYWxQYXRoUHNyMCA9IHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAwLCAkcG9zICsgMSkKLiBzdHJ0cihzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgJHBvcyArIDEpLCAnXycsIERJUkVDVE9SWV9TRVBBUkFUT1IpOwp9IGVsc2UgewoKICRsb2dpY2FsUGF0aFBzcjAgPSBzdHJ0cigkY2xhc3MsICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUikgLiAnLnBocCc7Cn0KCmlmIChpc3NldCgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0pKSB7CmZvcmVhY2ggKCR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XSBhcyAkcHJlZml4ID0+ICRkaXJzKSB7CmlmICgwID09PSBzdHJwb3MoJGNsYXNzLCAkcHJlZml4KSkgewpmb3JlYWNoICgkZGlycyBhcyAkZGlyKSB7CmlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKcmV0dXJuICRmaWxlOwp9Cn0KfQp9Cn0KCgogZm9yZWFjaCAoJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgYXMgJGRpcikgewppZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CnJldHVybiAkZmlsZTsKfQp9CgoKIGlmICgkdGhpcy0+dXNlSW5jbHVkZVBhdGggJiYgJGZpbGUgPSBzdHJlYW1fcmVzb2x2ZV9pbmNsdWRlX3BhdGgoJGxvZ2ljYWxQYXRoUHNyMCkpIHsKcmV0dXJuICRmaWxlOwp9CgoKIHJldHVybiAkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSA9IGZhbHNlOwp9Cn0KPD9waHAKCmlmIChQSFBfU0FQSSAhPT0gJ2NsaScpIHsKICAgIGVjaG8gJ1dhcm5pbmc6IENvbXBvc2VyIHNob3VsZCBiZSBpbnZva2VkIHZpYSB0aGUgQ0xJIHZlcnNpb24gb2YgUEhQLCBub3QgdGhlICcuUEhQX1NBUEkuJyBTQVBJJy5QSFBfRU9MOwp9CgpyZXF1aXJlIF9fRElSX18uJy8uLi9zcmMvYm9vdHN0cmFwLnBocCc7Cgp1c2UgQ29tcG9zZXJcQ29uc29sZVxBcHBsaWNhdGlvbjsKCmVycm9yX3JlcG9ydGluZygtMSk7CgppZiAoZnVuY3Rpb25fZXhpc3RzKCdpbmlfc2V0JykpIHsKICAgIEBpbmlfc2V0KCdkaXNwbGF5X2Vycm9ycycsIDEpOwoKICAgICRtZW1vcnlJbkJ5dGVzID0gZnVuY3Rpb24gKCR2YWx1ZSkgewogICAgICAgICR1bml0ID0gc3RydG9sb3dlcihzdWJzdHIoJHZhbHVlLCAtMSwgMSkpOwogICAgICAgICR2YWx1ZSA9IChpbnQpICR2YWx1ZTsKICAgICAgICBzd2l0Y2goJHVuaXQpIHsKICAgICAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgICAgICAkdmFsdWUgKj0gMTAyNDsKICAgICAgICAgICAgICAgIC8vIG5vIGJyZWFrIChjdW11bGF0aXZlIG11bHRpcGxpZXIpCiAgICAgICAgICAgIGNhc2UgJ20nOgogICAgICAgICAgICAgICAgJHZhbHVlICo9IDEwMjQ7CiAgICAgICAgICAgICAgICAvLyBubyBicmVhayAoY3VtdWxhdGl2ZSBtdWx0aXBsaWVyKQogICAgICAgICAgICBjYXNlICdrJzoKICAgICAgICAgICAgICAgICR2YWx1ZSAqPSAxMDI0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR2YWx1ZTsKICAgIH07CgogICAgJG1lbW9yeUxpbWl0ID0gdHJpbShpbmlfZ2V0KCdtZW1vcnlfbGltaXQnKSk7CiAgICAvLyBJbmNyZWFzZSBtZW1vcnlfbGltaXQgaWYgaXQgaXMgbG93ZXIgdGhhbiA1MTJNCiAgICBpZiAoJG1lbW9yeUxpbWl0ICE9IC0xICYmICRtZW1vcnlJbkJ5dGVzKCRtZW1vcnlMaW1pdCkgPCA1MTIgKiAxMDI0ICogMTAyNCkgewogICAgICAgIEBpbmlfc2V0KCdtZW1vcnlfbGltaXQnLCAnNTEyTScpOwogICAgfQogICAgdW5zZXQoJG1lbW9yeUluQnl0ZXMsICRtZW1vcnlMaW1pdCk7Cn0KCi8vIHJ1biB0aGUgY29tbWFuZCBhcHBsaWNhdGlvbgokYXBwbGljYXRpb24gPSBuZXcgQXBwbGljYXRpb24oKTsKJGFwcGxpY2F0aW9uLT5ydW4oKTsKCkNvcHlyaWdodCAoYykgMjAxMSBOaWxzIEFkZXJtYW5uLCBKb3JkaSBCb2dnaWFubwoKUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQpvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbAppbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzCnRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAp0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CgpUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwKY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KClRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCklNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLApGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgpMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLApPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOClRIRSBTT0ZUV0FSRS4KCvEeWvj8rDIBmMyofubv64PXirYRAgAAAEdCTUI=]]></data>
	</file>
	<file>
	  <filename>/function.admin_categoriestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSByZXR1cm47Cgokcm93YXJyYXkgPSBhcnJheSAoKTsKJHF1ZXJ5ID0gJyc7CiRkYnJlc3VsdCA9ICcnOwokdGhlbWUgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKCnRyeSB7CgkkY2F0ZWdvcmllcyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yaWVzKCk7Cgkkcm93Y2xhc3MgPSAncm93MSc7CgoJaWYoIGlzX2FycmF5KCRjYXRlZ29yaWVzKSAmJiBjb3VudCgkY2F0ZWdvcmllcykgKSB7CgkJZm9yZWFjaCggJGNhdGVnb3JpZXMgYXMgJHJvdyApIHsKCQkJJG9uZXJvdyA9IG5ldyBzdGRDbGFzcyAoKTsKCQkJJG9uZXJvdy0+ZXJyb3IgPSAwOwoJCQkkb25lcm93LT5pZCA9ICRyb3dbInVwbG9hZF9jYXRlZ29yeV9pZCJdOwoJCQkkb25lcm93LT5uYW1lID0gJHRoaXMtPkNyZWF0ZUxpbmsoICRpZCwgJ2VkaXRjYXRlZ29yeScsICRyZXR1cm5pZCwKCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHJvd1sidXBsb2FkX2NhdGVnb3J5X25hbWUiXSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkgYXJyYXkoJ2NhdGVnb3J5X2lkJz0+JHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10pKTsKCgkJCSRvbmVyb3ctPmRlc2NyaXB0aW9uID0gJHJvd1sidXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uIl07CgkJCSRvbmVyb3ctPnBhdGggPSAkcm93WyJ1cGxvYWRfY2F0ZWdvcnlfcGF0aCJdOwoJCQkkdG1wID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoJG9uZXJvdy0+cGF0aCk7CgkJCWlmKCAhaXNfZGlyKCR0bXApIHx8ICFpc193cml0YWJsZSgkdG1wKSApICRvbmVyb3ctPmVycm9yID0gMTsKCQkJJG9uZXJvdy0+cm93Y2xhc3MgPSAkcm93Y2xhc3M7CgoJCQkkb25lcm93LT5jb3B5bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdhZG1pbl9jb3B5Y2F0ZWdvcnknLCAkcmV0dXJuaWQsCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHRoZW1lLT5EaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vY29weS5naWYnLAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHRoaXMtPkxhbmcgKCdjb3B5JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBhcnJheSAoJ2NhdGVnb3J5X2lkJyA9PiAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSkpOwoJCQkkb25lcm93LT5lZGl0bGluayA9ICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdlZGl0Y2F0ZWdvcnknLCAkcmV0dXJuaWQsCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHRoZW1lLT5EaXNwbGF5SW1hZ2UgKCdpY29ucy9zeXN0ZW0vZWRpdC5naWYnLAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSBhcnJheSAoJ2NhdGVnb3J5X2lkJyA9PiAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSkpOwoJCQkkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2RlbGV0ZWNhdGVnb3J5JywgJHJldHVybmlkLAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAkdGhlbWUtPkRpc3BsYXlJbWFnZSAoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCSAkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJIGFycmF5ICgnY2F0ZWdvcnlfaWQnID0+ICRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgJHRoaXMtPkxhbmcgKCdhcmV5b3VzdXJlX2RlbGV0ZWNhdGVnb3J5JykpOwoKCQkJJHJvd2FycmF5W10gPSAkb25lcm93OwoJCQkoJHJvd2NsYXNzID09ICJyb3cxIiA/ICRyb3djbGFzcyA9ICJyb3cyIiA6ICRyb3djbGFzcyA9ICJyb3cxIik7CgkJfQoJfQp9CmNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CgkvLyBub3RoaW5nIGhlcmUKfQoKJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnY2F0ZWdvcnl0ZXh0JywgJHRoaXMtPkxhbmcgKCdjYXRlZ29yeScpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbmFtZXRleHQnLCAkdGhpcy0+TGFuZyAoJ25hbWUnKSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3BhdGh0ZXh0JywgJHRoaXMtPkxhbmcgKCdwYXRoJykpOwokdGhpcy0+c21hcnR5LT5hc3NpZ24gKCdpdGVtcycsICRyb3dhcnJheSk7CiR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ2l0ZW1jb3VudCcsIGNvdW50ICgkcm93YXJyYXkpKTsKJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnYWRkbGluaycsICR0aGlzLT5DcmVhdGVMaW5rKCRpZCwgJ2FkZGNhdGVnb3J5JywKCSRyZXR1cm5pZCwKCSR0aGVtZS0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsCgkJJHRoaXMtPkxhbmcoJ2FkZGNhdGVnb3J5JyksJycsJycsJ3N5c3RlbWljb24nKSwKCQlhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnJykgLicgJy4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsICdhZGRjYXRlZ29yeScsCgkJCSRyZXR1cm5pZCwgJHRoaXMtPkxhbmcoJ2FkZGNhdGVnb3J5JyksCgkJCWFycmF5KCksICcnLCBmYWxzZSwgZmFsc2UsICdjbGFzcz0icGFnZW9wdGlvbnMiJykpOwokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydCcsCgkJJHRoaXMtPkNHQ3JlYXRlRm9ybVN0YXJ0KCRpZCwnYWRtaW5fbXVsdGljYXRlZ29yeScsJHJldHVybmlkKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZCcsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignY2F0X211bHRpYWN0aW9ucycsCgkJYXJyYXkoJ2RlbGV0ZSc9PiR0aGlzLT5MYW5nKCdkZWxldGUnKSwKCQkgICAgICAnY29weSc9PiR0aGlzLT5MYW5nKCdjb3B5JykpKTsKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2NhdGVnb3J5bGlzdC50cGwnKTsKCi8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_email_template_tab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCiRzbWFydHktPmFzc2lnbignZm9ybXN0YXJ0MScsJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAndXBkYXRlZW1haWx0ZW1wbGF0ZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdmb3JtZW5kMScsJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbignbm90aWZ5X2VtYWlsX3RlbXBsYXRlJywgJHRoaXMtPkNyZWF0ZVRleHRBcmVhIChmYWxzZSwgJGlkLCAkdGhpcy0+R2V0VGVtcGxhdGUgKCd1cGxvYWRfZW1haWx0ZW1wbGF0ZScpLCAndGVtcGxhdGVjb250ZW50JywgJycpKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQxJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ3N1Ym1pdGJ1dHRvbicsJHRoaXMtPkxhbmcgKCdzdWJtaXQnKSkpOwokc21hcnR5LT5hc3NpZ24oJ2RlZmF1bHQxJywkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQgKCRpZCwgJ2RlZmF1bHRidXR0b24nLCAkdGhpcy0+TGFuZyAoJ2RlZmF1bHQnKSwgJycsICcnLCAkdGhpcy0+TGFuZygncmVzdG9yZWRlZmF1bHRzY29uZmlybScpKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X25vdGlmeV9lbWFpbF90ZW1wbGF0ZScsJHRoaXMtPkxhbmcoJ3Byb21wdF9ub3RpZnlfZW1haWxfdGVtcGxhdGUnKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2Zvcm1zdGFydDInLCR0aGlzLT5DcmVhdGVGb3JtU3RhcnQoICRpZCwgJ3VwZGF0ZXNlbmRmaWxlZW1haWwnKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJywkdGhpcy0+TGFuZygncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJykpOwokc21hcnR5LT5hc3NpZ24oJ3N1Ym1pdDInLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0YnV0dG9uJywkdGhpcy0+TGFuZyAoJ3N1Ym1pdCcpKSk7CiRzbWFydHktPmFzc2lnbignZGVmYXVsdDInLCR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnZGVmYXVsdGJ1dHRvbicsICR0aGlzLT5MYW5nICgnZGVmYXVsdCcpLCAnJywgJycsICAkdGhpcy0+TGFuZygncmVzdG9yZWRlZmF1bHRzY29uZmlybScpKSk7CiRzbWFydHktPmFzc2lnbignc2VuZGZpbGVfZW1haWxfdGVtcGxhdGUnLAkkdGhpcy0+Q3JlYXRlVGV4dEFyZWEgKGZhbHNlLCAkaWQsICR0aGlzLT5HZXRUZW1wbGF0ZSgndXBsb2FkX3NlbmRmaWxlcnB0JyksICd0ZW1wbGF0ZWNvbnRlbnQnLCcnKSk7CiRzbWFydHktPmFzc2lnbignZm9ybWVuZDInLCR0aGlzLT5DcmVhdGVGb3JtRW5kKCkpOwoKCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZW1haWxfdGVtcGxhdGVfdGFiLnRwbCcpOwoKIyBFT0YKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_fielddefstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKIwojIEluaXRpYWxpemUKIwokdHlwZXMgPSBhcnJheSgndGV4dGlucHV0Jz0+JHRoaXMtPkxhbmcoJ2ZpZWxkdHlwZV90ZXh0aW5wdXQnKSwKCSAgICAgICAndGV4dGFyZWEnPT4kdGhpcy0+TGFuZygnZmllbGR0eXBlX3RleHRhcmVhJyksCgkgICAgICAgJ2NoZWNrYm94Jz0+JHRoaXMtPkxhbmcoJ2ZpZWxkdHlwZV9jaGVja2JveCcpLAoJICAgICAgICdkcm9wZG93bic9PiR0aGlzLT5MYW5nKCdmaWVsZHR5cGVfZHJvcGRvd24nKSwKCSAgICAgICAnbXVsdGlzZWxlY3QnPT4kdGhpcy0+TGFuZygnZmllbGR0eXBlX211bHRpc2VsZWN0JykpOwoKIwojIEdldCB0aGUgZGF0YQojCiRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMgT1JERVIgQlkgaW9yZGVyIEFTQyc7CiRkYXRhID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoKIwojIEdpdmUgRXZlcnl0aGluZyB0byBTbWFydHkKIwokc21hcnR5LT5hc3NpZ24oJ2ZpZWxkdHlwZXMnLCR0eXBlcyk7CmlmKCBpc19hcnJheSgkZGF0YSkgJiYgY291bnQoJGRhdGEpID4gMCApCiAgewogICAgZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGRhdGEpOyAkaSsrICkKICAgICAgewoJJGVkaXRfdXJsID0gJHRoaXMtPkNyZWF0ZVVSTCgkaWQsJ2FkbWluX2FkZF9maWVsZCcsJHJldHVybmlkLAoJCQkJICAgICBhcnJheSgnZmlkJz0+JGRhdGFbJGldWydpZCddKSk7CgkkZGVsZXRlX3VybCA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9kZWxfZmllbGQnLCRyZXR1cm5pZCwKCQkJCSAgICAgYXJyYXkoJ2ZpZCc9PiRkYXRhWyRpXVsnaWQnXSkpOwoJaWYoICRpID4gMCApCgkgIHsKCSAgICAkbW92ZXVwX3VybCA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9vcmRlcl9maWVsZCcsJHJldHVybmlkLAoJCQkJCSAgIGFycmF5KCdmaWQnPT4kZGF0YVskaV1bJ2lkJ10sJ2Rpcic9Pid1cCcsJ2N1cic9PiRkYXRhWyRpXVsnaW9yZGVyJ10pKTsKCSAgICAkZGF0YVskaV1bJ21vdmV1cF91cmwnXSA9ICRtb3ZldXBfdXJsOwoJICB9CglpZiggJGkgPCAoY291bnQoJGRhdGEpIC0gMSkgKQoJICB7CgkgICAgJG1vdmVkb3duX3VybCA9ICR0aGlzLT5DcmVhdGVVUkwoJGlkLCdhZG1pbl9vcmRlcl9maWVsZCcsJHJldHVybmlkLAoJCQkJCSAgICAgYXJyYXkoJ2ZpZCc9PiRkYXRhWyRpXVsnaWQnXSwnZGlyJz0+J2Rvd24nLCdjdXInPT4kZGF0YVskaV1bJ2lvcmRlciddKSk7CgkgICAgJGRhdGFbJGldWydtb3ZlZG93bl91cmwnXSA9ICRtb3ZlZG93bl91cmw7CgkgIH0KCSRkYXRhWyRpXVsnZWRpdF91cmwnXSA9ICRlZGl0X3VybDsKCSRkYXRhWyRpXVsnZGVsZXRlX3VybCddID0gJGRlbGV0ZV91cmw7CiAgICAgIH0KICAgICRzbWFydHktPmFzc2lnbignZmllbGRzJywkZGF0YSk7CiAgfQokc21hcnR5LT5hc3NpZ24oJ2FkZGZpZWxkX2xpbmsnLAoJCSR0aGlzLT5DcmVhdGVMaW5rKCRpZCwnYWRtaW5fYWRkX2ZpZWxkJywkcmV0dXJuaWQsCgkJCQkgIGNtc191dGlsczo6Z2V0X3RoZW1lX29iamVjdCgpLT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9uZXdvYmplY3QuZ2lmJywKCQkJCQkJCQkJICAgICAgICR0aGlzLT5MYW5nKCdwcm9tcHRfYWRkX2ZpZWxkJyksJycsJycsJ3N5c3RlbWljb24nKSwKCQkJCSAgYXJyYXkoKSwgJycsIGZhbHNlLCBmYWxzZSwgJycpLicgJy4KCQkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2FkbWluX2FkZF9maWVsZCcsJHJldHVybmlkLAoJCQkJICAkdGhpcy0+TGFuZygncHJvbXB0X2FkZF9maWVsZCcpLAoJCQkJICBhcnJheSgpLCAnJywgZmFsc2UsIGZhbHNlLCAnY2xhc3M9InBhZ2VvcHRpb25zIicpKTsKCiMKIyBQcm9jZXNzIG91dHB1dAojCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSgnYWRtaW5fZmllbGRzX3RhYi50cGwnKTsKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_filestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpICYmICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdVcGxvYWQgRmlsZXMgdG8gVXBsb2FkcycpKSByZXR1cm47CgokY3VycGFnZSA9IDE7CmlmKCBpc3NldCgkcGFyYW1zWydmaWxlc3BhZ2UnXSkgKSAgJGN1cnBhZ2UgPSAoaW50KSRwYXJhbXNbJ2ZpbGVzcGFnZSddOwoKLy8gZ2V0IHRoZSBjdXJyZW50IGNhdGVnb3J5IGZvciB0aGUgZmlsdGVyCmlmIChpc3NldCAoJHBhcmFtc1snc3VibWl0ZmlsdGVyJ10pKSB7CiAgc2V0X3ByZWZlcmVuY2UoZ2V0X3VzZXJpZChGQUxTRSksJ3VwbG9hZHNfY2F0ZWdvcnknLCAoaXNzZXQgKCRwYXJhbXNbJ2lucHV0X2NhdGVnb3J5J10pID8gJHBhcmFtc1snaW5wdXRfY2F0ZWdvcnknXSA6ICcnKSk7CiAgc2V0X3ByZWZlcmVuY2UoZ2V0X3VzZXJpZChGQUxTRSksJ3VwbG9hZHNfcGFnZWxpbWl0JywoaW50KSRwYXJhbXNbJ2lucHV0X3BhZ2VsaW1pdCddKTsKfQokY3VyY2F0ZWdvcnkgPSBnZXRfcHJlZmVyZW5jZShnZXRfdXNlcmlkKEZBTFNFKSwndXBsb2Fkc19jYXRlZ29yeScsJycpOwokcGFnZWxpbWl0ID0gZ2V0X3ByZWZlcmVuY2UoZ2V0X3VzZXJpZChGQUxTRSksJ3VwbG9hZHNfcGFnZWxpbWl0Jyw1MCk7CiRvZmZzZXQgPSAtMTsKCi8vIGdldCB0aGUgY2F0ZWdvcmllcyBmb3IgdGhlIGZpbHRlcgokY2F0ZWdvcnlsaXN0ID0gYXJyYXkgKCk7CiRxdWVyeSA9CiAgIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4ICgpLgogICJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIE9SREVSIEJZIHVwbG9hZF9jYXRlZ29yeV9uYW1lIEFTQyI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSAoJHF1ZXJ5KTsKaWYgKCEkZGJyZXN1bHQpIHsKICAkc21hcnR5LT5hc3NpZ24gKCdlcnJvcicsIDEpOwogICRzbWFydHktPmFzc2lnbiAoJ21lc3NhZ2UnLCAkdGhpcy0+TGFuZyAoJ2Vycm9yX25vY2F0ZWdvcmllcycpKTsKfQplbHNlIHsKICAkZXJyb3JzID0gYXJyYXkoKTsKICB3aGlsZSAoJHJvdyA9ICRkYnJlc3VsdC0+RmV0Y2hSb3cgKCkpIHsKICAgICRwYXRoID0gJHRoaXMtPl9jYXRlZ29yeVBhdGgoJHJvd1sndXBsb2FkX2NhdGVnb3J5X3BhdGgnXSk7CiAgICBpZiggIWlzX2RpcigkcGF0aCkgfHwgIWlzX3dyaXRhYmxlKCRwYXRoKSApIHsKICAgICAgJGVycm9yc1tdID0gJHRoaXMtPkxhbmcoJ2Vycm9yX2NhdGVnb3J5X3Byb2JsZW0nLCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10pOwogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmKCAkY3VyY2F0ZWdvcnkgPT0gJycgKSAkY3VyY2F0ZWdvcnkgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKICAgICRjYXRlZ29yeWxpc3RbJHJvd1sndXBsb2FkX2NhdGVnb3J5X25hbWUnXV0gPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKICB9CiAgaWYoIGNvdW50KCRlcnJvcnMpICkgewogICAgZWNobyAkdGhpcy0+U2hvd0Vycm9ycygkZXJyb3JzKTsKICB9CiAgdW5zZXQoJGVycm9ycyk7Cn0KCi8vIGlmIHRoZXJlIGFyZSBubyBjYXRlZ29yaWVzLCBwdXQgYSBtZXNzYWdlIG91dCwgYW5kCi8vIG5vdGhpbmcgZWxzZQppZiggIWNvdW50KCAkY2F0ZWdvcnlsaXN0ICkgKSB7CiAgJHNtYXJ0eS0+YXNzaWduKCdlcnJvcicsMSk7CiAgJHNtYXJ0eS0+YXNzaWduKCdub2Zvcm0nLDEpOwogICRzbWFydHktPmFzc2lnbignbWVzc2FnZScsJHRoaXMtPkxhbmcoJ2Vycm9yX25vY2F0ZWdvcmllcycpKTsKICBlY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ3VwbG9hZGxpc3QudHBsJyk7CiAgcmV0dXJuOwp9Cgokc21hcnR5LT5hc3NpZ24oJ2Vycm9yJywiIik7CiRzbWFydHktPmFzc2lnbignbm9mb3JtJywiIik7CiRzbWFydHktPmFzc2lnbignbWVzc2FnZScsIiIpOwoKLy8gc2V0dXAgdGhlIGZvcm0gcGFydCBvZiB0aGUgdGVtcGxhdGUKJHNtYXJ0eS0+YXNzaWduICgnbGVnZW5kX3VwbG9hZGZvcm0nLCR0aGlzLT5MYW5nKCdsZWdlbmRfdXBsb2FkZm9ybScpKTsKJHNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywkdGhpcy0+Q3JlYXRlRm9ybVN0YXJ0ICgkaWQsICdkZWZhdWx0YWRtaW4nLCAkcmV0dXJuaWQsICdwb3N0JywgJ211bHRpcGFydC9mb3JtLWRhdGEnKSk7CiRzbWFydHktPmFzc2lnbiAoJ2NhdGVnb3J5JywgJHRoaXMtPkxhbmcgKCdjYXRlZ29yeScpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfY2F0ZWdvcnknLCAkdGhpcy0+Q3JlYXRlSW5wdXREcm9wRG93biAoJGlkLCAiaW5wdXRfY2F0ZWdvcnkiLCAkY2F0ZWdvcnlsaXN0LCAtMSwgJGN1cmNhdGVnb3J5KSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X3NlbGVjdCcsICR0aGlzLT5DcmVhdGVJbnB1dFN1Ym1pdCAoJGlkLCAnc3VibWl0ZmlsdGVyJywgJHRoaXMtPkxhbmcoJ3NlbGVjdGNhdGVnb3J5JykpKTsKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfaGlkZGVuJywgJHRoaXMtPkNyZWF0ZUlucHV0SGlkZGVuICgkaWQsICdjdXJjYXRlZ29yeScsICRjdXJjYXRlZ29yeSkpOwoKJG9wdHMgPSBhcnJheSgpOwokb3B0c1s1XSA9IDU7CiRvcHRzWzI1XSA9IDI1Owokb3B0c1s1MF0gPSA1MDsKJG9wdHNbMTAwXSA9IDEwMDsKJG9wdHNbMjUwXSA9IDI1MDsKJG9wdHNbNTAwXSA9IDUwMDsKJG9wdHNbMTAwMF0gPSAxMDAwOwokc21hcnR5LT5hc3NpZ24oJ3BhZ2VsaW1pdHMnLCRvcHRzKTsKCiRzbWFydHktPmFzc2lnbiAoJ2VuZGZvcm0nLCAkdGhpcy0+Q3JlYXRlRm9ybUVuZCAoKSk7CiRucm93cyA9ICcnOwokZGJyZXN1bHQgPSAnJzsKJHJvd2FycmF5ID0gYXJyYXkgKCk7CmlmICgkY3VyY2F0ZWdvcnkgPT0gJycpCiAgewogICAgJGNxdWVyeSA9ICdTRUxFQ1QgY291bnQodXBsb2FkX2lkKSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkcyc7CiAgICAkbnJvd3MgPSAkZGItPkdldE9uZSgkY3F1ZXJ5KTsKCiAgICAkbnBhZ2VzID0gKGludCkoJG5yb3dzIC8gJHBhZ2VsaW1pdCk7CiAgICBpZiggJG5yb3dzICUgJHBhZ2VsaW1pdCAhPSAwICkgJG5wYWdlcysrOwogICAgJGN1cnBhZ2UgPSBtYXgoMSwkY3VycGFnZSk7CiAgICAkY3VycGFnZSA9IG1pbigkY3VycGFnZSwkbnBhZ2VzKTsKICAgICRvZmZzZXQgPSAoJGN1cnBhZ2UgLSAxKSokcGFnZWxpbWl0OwoKICAgICRxdWVyeSA9ICJTRUxFQ1QgdS4qLEQubnVtIEFTIGRvd25sb2FkcyBGUk9NICIuY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHMgdQogICAgICAgICAgICAgIExFRlQgSk9JTiAoU0VMRUNUIENPVU5UKGRvd25sb2FkX2lkKSBBUyBudW0sZmlsZV9pZCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMgR1JPVVAgQlkgZmlsZV9pZCkgQVMgRAogICAgICAgICAgICAgIE9OIHUudXBsb2FkX2lkID0gRC5maWxlX2lkIE9SREVSIEJZIHVwbG9hZF9kYXRlIERFU0MiOwogICAgJGRicmVzdWx0ID0gJGRiLT5TZWxlY3RMaW1pdCgkcXVlcnksJHBhZ2VsaW1pdCwkb2Zmc2V0KTsKICB9CiBlbHNlCiAgIHsKICAgICAkY3F1ZXJ5ID0gJ1NFTEVDVCBjb3VudCh1cGxvYWRfaWQpIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8nOwogICAgICRucm93cyA9ICRkYi0+R2V0T25lKCRjcXVlcnksYXJyYXkoJGN1cmNhdGVnb3J5KSk7CgogICAgICRucGFnZXMgPSAoaW50KSgkbnJvd3MgLyAkcGFnZWxpbWl0KTsKICAgICBpZiggJG5yb3dzICUgJHBhZ2VsaW1pdCAhPSAwICkgJG5wYWdlcysrOwogICAgICRjdXJwYWdlID0gbWF4KDEsJGN1cnBhZ2UpOwogICAgICRjdXJwYWdlID0gbWluKCRjdXJwYWdlLCRucGFnZXMpOwogICAgICRvZmZzZXQgPSAoJGN1cnBhZ2UgLSAxKSokcGFnZWxpbWl0OwoKICAgICAkcXVlcnkgPQogICAgICAgIlNFTEVDVCB1LiosRC5udW0gQVMgZG93bmxvYWRzIEZST00gIi5jbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2FkcyB1CiAgICAgICAgTEVGVCBKT0lOIChTRUxFQ1QgQ09VTlQoZG93bmxvYWRfaWQpIEFTIG51bSxmaWxlX2lkIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2FkcyBHUk9VUCBCWSBmaWxlX2lkKSBBUyBECiAgICAgICAgT04gdS51cGxvYWRfaWQgPSBELmZpbGVfaWQgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2lkID0gPyBPUkRFUiBCWSB1cGxvYWRfZGF0ZSBERVNDIjsKICAgICAkZGJyZXN1bHQgPSAkZGItPlNlbGVjdExpbWl0KCRxdWVyeSwkcGFnZWxpbWl0LCRvZmZzZXQsYXJyYXkoJGN1cmNhdGVnb3J5KSk7CiAgIH0KCgovLyBub3cgc2V0dXAgdGhlIHJlc3QKJHJvd2NsYXNzID0gJ3JvdzEnOwoKJHRoZW1lID0gY21zX3V0aWxzOjpnZXRfdGhlbWVfb2JqZWN0KCk7CmlmICgkZGJyZXN1bHQpIHsKICAkc21hcnR5LT5hc3NpZ24oJ2lkdGV4dCcsJHRoaXMtPkxhbmcoJ25hbWUnKSk7CiAgJHNtYXJ0eS0+YXNzaWduKCd0aXRsZXRleHQnLCR0aGlzLT5MYW5nKCduYW1lJykpOwogICRzbWFydHktPmFzc2lnbignc3VtbWFyeXRleHQnLCR0aGlzLT5MYW5nKCdzdW1tYXJ5JykpOwogICRzbWFydHktPmFzc2lnbignZGVzY3RleHQnLCR0aGlzLT5MYW5nKCdkZXNjcmlwdGlvbicpKTsKICAkc21hcnR5LT5hc3NpZ24oJ3NpemV0ZXh0JywkdGhpcy0+TGFuZygnc2l6ZWtiJykpOwogICRzbWFydHktPmFzc2lnbignYXV0aG9ydGV4dCcsJHRoaXMtPkxhbmcoJ2F1dGhvcicpKTsKICAkc21hcnR5LT5hc3NpZ24oJ2lwdGV4dCcsJHRoaXMtPkxhbmcoJ2lwX2FkZHJlc3MnKSk7CiAgJHNtYXJ0eS0+YXNzaWduKCdkbHRleHQnLCR0aGlzLT5MYW5nKCdkb3dubG9hZHMnKSk7CiAgJHNtYXJ0eS0+YXNzaWduKCdwb3N0ZGF0ZXRleHQnLCR0aGlzLT5MYW5nKCdkYXRlJykpOwogIHdoaWxlICgkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdyAoKSkgewogICAgJG9uZXJvdyA9IG5ldyBzdGRDbGFzcyAoKTsKICAgICRvbmVyb3ctPmlkID0gJHJvd1sndXBsb2FkX2lkJ107CiAgICAkdHlwZSA9ICR0aGlzLT5fR2V0RmlsZVR5cGUoICRyb3dbJ3VwbG9hZF9uYW1lJ10gKTsKICAgICRpbWdwYXRoID0gJy4uL21vZHVsZXMvJy5iYXNlbmFtZShkaXJuYW1lKF9fRklMRV9fKSkuJy9pbWFnZXMvJzsKICAgIGlmKCAkdHlwZSAhPSBmYWxzZSApIHsKICAgICAgJG9uZXJvdy0+aWNvbiA9ICRpbWdwYXRoLiR0eXBlWydpbWFnZSddOwogICAgfQogICAgZWxzZSB7CiAgICAgICRvbmVyb3ctPmljb24gPSAkaW1ncGF0aC4ndW5rbm93bi5wbmcnOwogICAgfQogICAgJG9uZXJvdy0+ZmlsZV9sb2NhdGlvbiA9ICR0aGlzLT5fdXBsb2FkUGF0aCggJHRoaXMtPmdldENhdGVnb3J5UGF0aEZyb21JZCgkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSksICRyb3dbJ3VwbG9hZF9uYW1lJ10gKTsKICAgICRvbmVyb3ctPm1pc3NpbmcgPSAwOwogICAgaWYoICFmaWxlX2V4aXN0cygkb25lcm93LT5maWxlX2xvY2F0aW9uKSApICRvbmVyb3ctPm1pc3NpbmcgPSAxOwogICAgJG9uZXJvdy0+bmFtZSA9ICRyb3dbJ3VwbG9hZF9uYW1lJ107CiAgICAkb25lcm93LT5zaXplID0gaW50dmFsKCRyb3dbJ3VwbG9hZF9zaXplJ10gLyAxMDI0LjAgKyAwLjUpOwogICAgJG9uZXJvdy0+YXV0aG9yID0gJHJvd1sndXBsb2FkX2F1dGhvciddOwogICAgJG9uZXJvdy0+aXAgPSAkcm93Wyd1cGxvYWRfaXAnXTsKICAgICRvbmVyb3ctPnN1bW1hcnkgPSAkcm93Wyd1cGxvYWRfc3VtbWFyeSddOwogICAgJG9uZXJvdy0+ZGVzY3JpcHRpb24gPSAkcm93Wyd1cGxvYWRfZGVzY3JpcHRpb24nXTsKICAgICRvbmVyb3ctPmRhdGUgPSAkcm93Wyd1cGxvYWRfZGF0ZSddOwogICAgJG9uZXJvdy0+ZG93bmxvYWRzID0gJHJvd1snZG93bmxvYWRzJ107CiAgICAkb25lcm93LT5yb3djbGFzcyA9ICRyb3djbGFzczsKICAgICRvbmVyb3ctPnZpZXdsaW5rID0KICAgICAgJHRoaXMtPkNyZWF0ZUltYWdlTGluaygkaWQsJ2dldG1pbWVmaWxlJywkcmV0dXJuaWQsJHRoaXMtPkxhbmcoJ3ZpZXcnKSwnaWNvbnMvc3lzdGVtL3ZpZXcuZ2lmJywKCQkJCQkJCQkJCQkJCQkgYXJyYXkoJ3VwbG9hZF9pZCc9PiRyb3dbJ3VwbG9hZF9pZCddKSwnJywnJyxUUlVFLEZBTFNFLCd0YXJnZXQ9Il9ibGFuayInKTsKICAgICRvbmVyb3ctPmVkaXR1cmwgPQogICAgICAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZWRpdHVwbG9hZCcsICRyZXR1cm5pZCwgJycsIGFycmF5ICgndXBsb2FkX2lkJyA9PiAkcm93Wyd1cGxvYWRfaWQnXSwKCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJCQkJJ2NhdGVnb3J5X2lkJyA9PiAkY3VyY2F0ZWdvcnkpLCAnJywgdHJ1ZSApOwoKICAgICRvbmVyb3ctPmVkaXRsaW5rID0KICAgICAgJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwgJ2VkaXR1cGxvYWQnLCAkcmV0dXJuaWQsCgkJCQkJCQkJCQkJCSAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2VkaXQuZ2lmJywgJHRoaXMtPkxhbmcgKCdlZGl0JyksICcnLCAnJywgJ3N5c3RlbWljb24nKSwKCQkJCQkJCQkJCQkJIGFycmF5ICgndXBsb2FkX2lkJyA9PiAkcm93Wyd1cGxvYWRfaWQnXSwnY2F0ZWdvcnlfaWQnID0+ICRjdXJjYXRlZ29yeSkpOwoKICAgICRvbmVyb3ctPnRpbWVsaW1pdGVkX2xpbmsgPQogICAgICAkdGhpcy0+Q3JlYXRlSW1hZ2VMaW5rKCRpZCwnYWRtaW5fbWFuYWdlX3RpbWVsaW1pdGVkJywkcmV0dXJuaWQsCgkJCQkJCQkJCQkJCQkJICR0aGlzLT5MYW5nKCdtYW5hZ2VfdGltZWxpbWl0ZWQnKSwnY2xvY2tfbGluay5wbmcnLCBhcnJheSgndXBsb2FkX2lkJz0+JHJvd1sndXBsb2FkX2lkJ10pKTsKCiAgICAkb25lcm93LT5kZWxldGVsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsgKCRpZCwnZG9fZGVsZXRldXBsb2FkJywkcmV0dXJuaWQsCgkJCQkJICAgICAkdGhlbWUtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2RlbGV0ZS5naWYnLCAkdGhpcy0+TGFuZyAoJ2RlbGV0ZScpLCAnJywgJycsICdzeXN0ZW1pY29uJyksCgkJCQkJICAgICBhcnJheSAoJ3VwbG9hZF9pZCcgPT4gJHJvd1sndXBsb2FkX2lkJ10sJ2NhdGVnb3J5X2lkJyA9PiAkY3VyY2F0ZWdvcnkpLAoJCQkJCSAgICAgJHRoaXMtPkxhbmcgKCdhcmV5b3VzdXJlJykpOwoKICAgICRyb3dhcnJheVtdID0gJG9uZXJvdzsKICAgICgkcm93Y2xhc3MgPT0gInJvdzEiID8gJHJvd2NsYXNzID0gInJvdzIiIDogJHJvd2NsYXNzID0gInJvdzEiKTsKICB9CiAgaWYoICRkYnJlc3VsdCApICRkYnJlc3VsdC0+Q2xvc2UoKTsKCiAgaWYoICRucGFnZXMgPiAxICkgewogICAgLy8gb3V0cHV0IHBhZ2luYXRpb24gc3R1ZmYuCiAgICAkc21hcnR5LT5hc3NpZ24oJ25wYWdlcycsJG5wYWdlcyk7CiAgICAkc21hcnR5LT5hc3NpZ24oJ2N1cnBhZ2UnLCRjdXJwYWdlKTsKICAgIGlmKCAkY3VycGFnZSA+IDEgKSB7CiAgICAgICRzbWFydHktPmFzc2lnbignZmlyc3RwYWdlX3VybCcsICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsIGFycmF5KCdmaWxlc3BhZ2UnPT4xKSkpOwogICAgICAkc21hcnR5LT5hc3NpZ24oJ3ByZXZwYWdlX3VybCcsICR0aGlzLT5jcmVhdGVfdXJsKCRpZCwnZGVmYXVsdGFkbWluJywkcmV0dXJuaWQsIGFycmF5KCdmaWxlc3BhZ2UnPT4kY3VycGFnZS0xKSkpOwogICAgfQogICAgaWYoICRjdXJwYWdlIDwgJG5wYWdlcyApIHsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCduZXh0cGFnZV91cmwnLCAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCBhcnJheSgnZmlsZXNwYWdlJz0+JGN1cnBhZ2UrMSkpKTsKICAgICAgJHNtYXJ0eS0+YXNzaWduKCdsYXN0cGFnZV91cmwnLCAkdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCBhcnJheSgnZmlsZXNwYWdlJz0+JG5wYWdlcykpKTsKICAgIH0KICB9Cn0KCiRzbWFydHktPmFzc2lnbigncGFnZWxpbWl0JywkcGFnZWxpbWl0KTsKJHNtYXJ0eS0+YXNzaWduKCdhZGRmaWxlX2xpbmsnLCR0aGlzLT5DcmVhdGVJbWFnZUxpbmsoJGlkLCdhZG1pbl91cGxvYWQnLCRyZXR1cm5pZCwKCQkJCQkJCSAgICR0aGlzLT5MYW5nKCd1cGxvYWRfZmlsZScpLCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsIGFycmF5KCdjYXRlZ29yeSc9PiRjdXJjYXRlZ29yeSksJycsJycsZmFsc2UpKTsKCiRzbWFydHktPmFzc2lnbignbWlzc2luZ19pY29uJywkdGhpcy0+R2V0TW9kdWxlVVJMUGF0aCgpLicvaW1hZ2VzL21pc3NpbmcuZ2lmJyk7CiRzbWFydHktPmFzc2lnbiAoJ2l0ZW1zJywgJHJvd2FycmF5KTsKJHNtYXJ0eS0+YXNzaWduICgnaXRlbWNvdW50JywgY291bnQgKCRyb3dhcnJheSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUgKCd1cGxvYWRsaXN0LnRwbCcpOwoKLy8gRU9GCj8+]]></data>
	</file>
	<file>
	  <filename>/function.admin_filetypestab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICEkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVXBsb2FkcycpICkgcmV0dXJuOwoKaWYoIGlzc2V0KCRwYXJhbXNbJ2RpcmVjdGlvbiddKSAmJiBpc3NldCgkcGFyYW1zWydyb3dpZCddKSApIHsKICAgIHN3aXRjaCggJHBhcmFtc1snZGlyZWN0aW9uJ10gKSB7CiAgICBjYXNlICd1cCc6CiAgICAgICAgJHEgPSAiVVBEQVRFICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWxldHlwZXMgU0VUIHNvcnRvcmRlciA9IChzb3J0b3JkZXIgKyAxKSBXSEVSRSBzb3J0b3JkZXIgPSA/IjsKICAgICAgICAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHBhcmFtc1snc29ydG9yZGVyJ10gLSAxICkgKTsKICAgICAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlcyBTRVQgc29ydG9yZGVyID0gKHNvcnRvcmRlciAtIDEpIFdIRVJFIGlkID0gPyI7CiAgICAgICAgJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRwYXJhbXNbJ3Jvd2lkJ10gKSApOwogICAgICAgIGJyZWFrOwoKICAgICAgY2FzZSAnZG93bic6CiAgICAgICAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlcyBTRVQgc29ydG9yZGVyID0gKHNvcnRvcmRlciAtIDEpIFdIRVJFIHNvcnRvcmRlciA9ID8iOwogICAgICAgICAgJGRiLT5FeGVjdXRlKCAkcSwgYXJyYXkoICRwYXJhbXNbJ3NvcnRvcmRlciddICsgMSApICk7CiAgICAgICAgICAkcSA9ICJVUERBVEUgIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlcyBTRVQgc29ydG9yZGVyID0gKHNvcnRvcmRlciArIDEpIFdIRVJFIGlkID0gPyI7CiAgICAgICAgICAkZGItPkV4ZWN1dGUoICRxLCBhcnJheSggJHBhcmFtc1sncm93aWQnXSApICk7CiAgICAgICAgICBicmVhazsKICAgIH0KfQoKJHNtYXJ0eSA9IGNtc21zKCktPkdldFNtYXJ0eSgpOwokZGIgPSBjbXNtcygpLT5HZXREYigpOwokcXVlcnkgPSAiU0VMRUNUICogRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmlsZXR5cGVzIE9SREVSIEJZIHNvcnRvcmRlciI7CiRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5ICk7CgokdGhlbWVPYmplY3QgPSBjbXNfdXRpbHM6OmdldF90aGVtZV9vYmplY3QoKTsKJGRvd25JbWcgPSAkdGhlbWVPYmplY3QtPkRpc3BsYXlJbWFnZSgnaWNvbnMvc3lzdGVtL2Fycm93LWQuZ2lmJywgbGFuZygnZG93bicpLCcnLCcnLCdzeXN0ZW1pY29uJyk7CiR1cEltZyA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vYXJyb3ctdS5naWYnLCBsYW5nKCd1cCcpLCcnLCcnLCdzeXN0ZW1pY29uJyk7CiRlZGl0SW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9lZGl0LmdpZicsIGxhbmcoJ2VkaXQnKSwnJywnJywnc3lzdGVtaWNvbicpOwokZGVsZXRlSW1nID0gJHRoZW1lT2JqZWN0LT5EaXNwbGF5SW1hZ2UoJ2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJywgbGFuZygnZGVsZXRlJyksJycsJycsJ3N5c3RlbWljb24nKTsKJG5ld09iamVjdCA9ICR0aGVtZU9iamVjdC0+RGlzcGxheUltYWdlKCdpY29ucy9zeXN0ZW0vbmV3b2JqZWN0LmdpZicsJHRoaXMtPkxhbmcoJ2FkZGZpbGV0eXBlJyksJycsJycsJ3N5c3RlbWljb24nKTsKCgokcm93Y2xhc3MgPSAncm93MSc7CiRlbnRyaWVzID0gYXJyYXkoKTsKJGNvdW50ID0gMDsKd2hpbGUoICRkYnJlc3VsdCAmJiAkcm93ID0gJGRicmVzdWx0LT5GZXRjaFJvdygpICkgewogICAgJG9iaiA9IG5ldyBTdGRDbGFzcygpOwogICAgZm9yZWFjaCggJHJvdyBhcyAka2V5PT4kdmFsdWUgKSB7CiAgICAgICAgJG9iai0+JGtleSA9ICR2YWx1ZTsKICAgIH0KCiAgICAkb2JqLT5pY29uID0gJzxpbWcgc3JjPSIuLi9tb2R1bGVzLycuYmFzZW5hbWUoZGlybmFtZShfX0ZJTEVfXykpLicvaW1hZ2VzLycuJG9iai0+aW1hZ2UuJyIgYWx0PSInLiRvYmotPm5hbWUuJyIvPic7CiAgICBpZiggJGNvdW50ICE9IDAgKSB7CiAgICAgICAgJG9iai0+dXBsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdkZWZhdWx0YWRtaW4nLCRyZXR1cm5pZCwkdXBJbWcsCiAgICAgICAgYXJyYXkoJ2FjdGl2ZV90YWInPT4nZmlsZV90eXBlcycsICdkaXJlY3Rpb24nPT4ndXAnLCAnc29ydG9yZGVyJz0+JHJvd1snc29ydG9yZGVyJ10sICdyb3dpZCc9PiRyb3dbJ2lkJ10pKTsKICAgIH0KICAgIGlmKCAkY291bnQgPCAoJGRicmVzdWx0LT5SZWNvcmRDb3VudCgpIC0gMSkgKSB7CiAgICAgICAgJG9iai0+ZG93bmxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLCRkb3duSW1nLAogICAgICAgIGFycmF5KCdhY3RpdmVfdGFiJz0+J2ZpbGVfdHlwZXMnLCAnZGlyZWN0aW9uJz0+J2Rvd24nLCAnc29ydG9yZGVyJz0+JHJvd1snc29ydG9yZGVyJ10sICdyb3dpZCc9PiRyb3dbJ2lkJ10pKTsKICAgIH0KICAgICRvYmotPmVkaXRsaW5rID0gJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdhZGRmaWxldHlwZScsJHJldHVybmlkLCRlZGl0SW1nLCBhcnJheSgnYWN0aXZlX3RhYic9PidmaWxlX3R5cGVzJywgJ3R5cGVpZCc9PiRyb3dbJ2lkJ10pKTsKICAgICRvYmotPmRlbGV0ZWxpbmsgPSAkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlbGV0ZXR5cGUnLCRyZXR1cm5pZCwkZGVsZXRlSW1nLCBhcnJheSgnYWN0aXZlX3RhYic9PidmaWxlX3R5cGVzJywgJ3R5cGVpZCc9PiRyb3dbJ2lkJ10pKTsKICAgICRvYmotPnJvd2NsYXNzID0gJHJvd2NsYXNzOwogICAgJGNvdW50Kys7CiAgICAkcm93Y2xhc3MgPSAoJHJvd2NsYXNzID09ICdyb3cxJykgPyAncm93MicgOiAncm93MSc7CiAgICAkZW50cmllc1tdID0gJG9iajsKfQoKLy8gdGhlIHVua25vd24gcm93CiRvYmogPSBuZXcgU3RkQ2xhc3MoKTsKJG9iai0+bmFtZSA9ICR0aGlzLT5MYW5nKCduYW1lX3Vua25vd24nKTsKJG9iai0+ZGVzY3JpcHRpb24gPSAnPGVtPicuJHRoaXMtPkxhbmcoJ2Rlc2NyaXB0aW9uX3Vua25vd24nKS4nPC9lbT4nOwokb2JqLT5yb3djbGFzcyA9ICdyb3czJzsKJG9iai0+aWNvbiA9ICc8aW1nIHNyYz0iLi4vbW9kdWxlcy8nLmJhc2VuYW1lKGRpcm5hbWUoX19GSUxFX18pKS4nL2ltYWdlcy91bmtub3duLnBuZyIgYWx0PSInLiRvYmotPm5hbWUuJyIvPic7CiRlbnRyaWVzW10gPSAkb2JqOwokc21hcnR5LT5hc3NpZ24oJ2l0ZW1zJywkZW50cmllcyk7CiRzbWFydHktPmFzc2lnbignaXRlbWNvdW50Jyxjb3VudCgkZW50cmllcykpOwoKJHNtYXJ0eS0+YXNzaWduKCdhZGRsaW5rJywKICAgJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdhZGRmaWxldHlwZScsJHJldHVybmlkLCRuZXdPYmplY3QsIGFycmF5KCdhY3RpdmVfdGFiJz0+J2ZpbGVfdHlwZXMnKSkuJHRoaXMtPkNyZWF0ZUxpbmsoJGlkLCdhZGRmaWxldHlwZScsJHJldHVybmlkLCR0aGlzLT5MYW5nKCdhZGRmaWxldHlwZScpLCBhcnJheSgnYWN0aXZlX3RhYic9PidmaWxlX3R5cGVzJykpKTsKCiRzbWFydHktPmFzc2lnbignc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCgkaWQsJ3VwbG9hZGljb24nLCRyZXR1cm5pZCwncG9zdCcsJ211bHRpcGFydC9mb3JtLWRhdGEnLGZhbHNlLCcnLCBhcnJheSgnYWN0aXZlX3RhYic9PidmaWxlX3R5cGVzJykpKTsKJHNtYXJ0eS0+YXNzaWduKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQoKSk7CiRzbWFydHktPmFzc2lnbigncHJvbXB0X3VwbG9hZF9pY29uJywgJHRoaXMtPkxhbmcoJ3Byb21wdF91cGxvYWRfaWNvbicpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF91cGxvYWRfaWNvbicsICR0aGlzLT5DcmVhdGVGaWxlVXBsb2FkSW5wdXQoJGlkLCdpbnB1dF91cGxvYWRfaWNvbicsJycsNTApKTsKJHNtYXJ0eS0+YXNzaWduKCdzdWJtaXQnLCAkdGhpcy0+Q3JlYXRlSW5wdXRTdWJtaXQoJGlkLCdzdWJtaXQnLCR0aGlzLT5MYW5nKCdzdWJtaXQnKSkpOwplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2ZpbGV0eXBlcy50cGwnKTsKCi8vIEVPRgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/function.admin_prefstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiAoISR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNb2RpZnkgU2l0ZSBQcmVmZXJlbmNlcycpKSByZXR1cm47CgovLyBDcmVhdGVGb3JtU3RhcnQgc2V0cyB1cCBhIHByb3BlciBmb3JtIHRhZyB0aGF0IHdpbGwgY2F1c2UgdGhlIHN1Ym1pdCB0bwovLyByZXR1cm4gY29udHJvbCB0byB0aGlzIG1vZHVsZSBmb3IgcHJvY2Vzc2luZy4KJHNtYXJ0eS0+YXNzaWduICgnc3RhcnRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1TdGFydCAoJGlkLCAnc2F2ZV9hZG1pbl9wcmVmcycsICRyZXR1cm5pZCkpOwokc21hcnR5LT5hc3NpZ24gKCdlbmRmb3JtJywgJHRoaXMtPkNyZWF0ZUZvcm1FbmQgKCkpOwoKJHNtYXJ0eS0+YXNzaWduICgnc3VibWl0JywgJHRoaXMtPkNyZWF0ZUlucHV0U3VibWl0ICgkaWQsICdzdWJtaXQnLCAkdGhpcy0+TGFuZygnc3VibWl0JyksICcnLCcnLCAkdGhpcy0+TGFuZygnY29uZmlybV9wcmVmZXJlbmNlcycpKSk7CgovLyBpdCdzIGdvb2QgcHJhY3RpY2UgdG8gc2V0IGV2ZW4gc3RhdGljIHRpdGxlcyB1c2luZyBzbWFydHksCi8vIHNvIGxvY2FsaXphdGlvbiBpcyBlYXNpZXIuCiRzbWFydHktPmFzc2lnbignYXV0b3dhdGVybWFyaycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG93YXRlcm1hcmsnLDApKTsKCiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnLCAkdGhpcy0+TGFuZyAoJ3RpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnKSk7CiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJywgJHRoaXMtPkxhbmcgKCd0aXRsZV9zdWJuZXRfZXhjbHVzaW9ucycpKTsKJHNtYXJ0eS0+YXNzaWduICgndGl0bGVfc2VjdGlvbicsICR0aGlzLT5MYW5nICgndGl0bGVfbW9kX3ByZWZzJykpOwokc21hcnR5LT5hc3NpZ24gKCd0aXRsZV9kdW1teV9pbmRleF9odG1sJywgJHRoaXMtPkxhbmcgKCd0aXRsZV9kdW1teV9pbmRleF9odG1sJykpOwokc21hcnR5LT5hc3NpZ24gKCd0aXRsZV9lbWFpbF9vbl91cGxvYWQnLCAkdGhpcy0+TGFuZyAoJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCcpKTsKJHNtYXJ0eS0+YXNzaWduICgndGl0bGVfcmVkaXJlY3Rfb25fdXBsb2FkJywgJHRoaXMtPkxhbmcoJ3RpdGxlX3JlZGlyZWN0b251cGxvYWQnKSk7CiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucycsICR0aGlzLT5MYW5nKCd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSk7CiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlX2F1dG90aHVtYm5haWxfc2l6ZScsICR0aGlzLT5MYW5nKCd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnKSk7CiRzbWFydHktPmFzc2lnbiAoJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZScsICR0aGlzLT5MYW5nKCd0aXRsZV9kb3dubG9hZF9jaHVua3NpemUnKSk7CiRzbWFydHktPmFzc2lnbiAoJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJywgJHRoaXMtPkxhbmcoJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJykpOwokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX2FsbG93X2RlbGV0ZScsJHRoaXMtPkxhbmcoJ3RpdGxlX2FsbG93X2RlbGV0ZScpKTsKCiRjb250ZW50b3BzID0gJGdDbXMtPkdldENvbnRlbnRPcGVyYXRpb25zKCk7CiRzbWFydHktPmFzc2lnbigndGl0bGVfc2VuZGZpbGVwYWdlJywkdGhpcy0+TGFuZygndGl0bGVfc2VuZGZpbGVwYWdlJykpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X3NlbmRmaWxlcGFnZScsCgkJJGNvbnRlbnRvcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3NlbmRmaWxlcGFnZScsLTEpLCAkaWQuJ2RlZmF1bHRfc2VuZGZpbGVwYWdlJywxKSk7Cgokc21hcnR5LT5hc3NpZ24oJ3RpdGxlX3JlZGlyZWN0X29uX3NlbmRmaWxlJywkdGhpcy0+TGFuZygndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnKSk7CiRzbWFydHktPmFzc2lnbignaW5wdXRfcmVkaXJlY3Rfb25fc2VuZGZpbGUnLAoJCSR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3JlZGlyZWN0X29uX3NlbmRmaWxlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgncmVkaXJlY3Rfb25fc2VuZGZpbGUnLCcnKSwzMCw4MCkpOwoKLy8geW91J2xsIG9mdGVuIHdhbnQgdG8gZG8gdGhpbmdzIGxpa2UgdGhpcyB0byBwcm92aWRlIGZlZWRiYWNrOgokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF92YWxpZF91cGxvYWRleHRlbnNpb25zJywKCQkgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCAoJGlkLCAndmFsaWRfdXBsb2FkZXh0ZW5zaW9ucycsCgkJCQkJICR0aGlzLT5HZXRQcmVmZXJlbmNlICgndmFsaWRfdXBsb2FkZXh0ZW5zaW9ucycsICJ6aXAsZ3osdGFyIiksICczMCcsICcyNTUnKSk7Cgokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF9zdWJuZXRfZXhjbHVzaW9ucycsCgkJICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3N1Ym5ldF9leGNsdXNpb25zJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ3N1Ym5ldF9leGNsdXNpb25zJywiIiksNTAsMjU1KSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X2R1bW15X2luZGV4X2h0bWwnLAoJCSAkdGhpcy0+Q3JlYXRlSW5wdXRDaGVja2JveCggJGlkLCAnaW5wdXRfZHVtbXlfaW5kZXhfaHRtbCcsIDEsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfZHVtbXlfaW5kZXhfaHRtbCcpKSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X2VtYWlsX29uX3VwbG9hZCcsCgkJICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ2VtYWlsX29uX3VwbG9hZCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdzZW5kX3VwbG9hZF9ub3RpZmljYXRpb25zX3RvJyksIDQwLCAyNTUgKSk7CiRzbWFydHktPmFzc2lnbiAoJ2lucHV0X3JlZGlyZWN0X29uX3VwbG9hZCcsCgkJICR0aGlzLT5DcmVhdGVJbnB1dFRleHQoICRpZCwgJ3JlZGlyZWN0X29uX3VwbG9hZCcsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdyZWRpcmVjdF9vbl91cGxvYWQnLCcnKSwzMCw4MCkpOwoKJHNtYXJ0eS0+YXNzaWduICgnaW5wdXRfYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJywKCQkgJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCggJGlkLCAnYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJywgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucycsJycpLDQwKSk7Cgokc21hcnR5LT5hc3NpZ24gKCdpbnB1dF9hdXRvdGh1bWJuYWlsX3NpemUnLAoJCSAkdGhpcy0+Q3JlYXRlSW5wdXRUZXh0KCAkaWQsICdhdXRvdGh1bWJuYWlsX3NpemUnLCAkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYXV0b3RodW1ibmFpbF9zaXplJywnJyksMykpOwoKJHNtYXJ0eS0+YXNzaWduKCdpbnB1dF9hbGxvd19kZWxldGUnLCR0aGlzLT5DcmVhdGVJbnB1dGNoZWNrYm94KCRpZCwnYWxsb3dfZGVsZXRlJywxLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd19kZWxldGUnLDApKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2Rvd25sb2FkX2NodW5rc2l6ZScsCgkJJHRoaXMtPkNyZWF0ZUlucHV0VGV4dCgkaWQsJ2Rvd25sb2FkX2NodW5rc2l6ZScsICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdkb3dubG9hZF9jaHVua3NpemUnLDgpLDUsNSkpOwoKJHNtYXJ0eS0+YXNzaWduKCd0aW1lbGltaXRlZF9ob3VycycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX2hvdXJzJyw3MikpOwokc21hcnR5LT5hc3NpZ24oJ3RpbWVsaW1pdGVkX2Rvd25sb2FkcycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ3RpbWVsaW1pdGVkX2Rvd25sb2FkcycsMCkpOwokc21hcnR5LT5hc3NpZ24oJ2lucHV0X2dldGZpbGVfcmVzdWx0cGFnZScsCgkJJGNvbnRlbnRvcHMtPkNyZWF0ZUhpZXJhcmNoeURyb3Bkb3duKCcnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdnZXRmaWxlX3Jlc3VsdHBhZ2UnKSwgJGlkLidnZXRmaWxlX3Jlc3VsdHBhZ2UnLDEpKTsKJHNtYXJ0eS0+YXNzaWduKCd0aW1lbGltaXRlZF9hdXRvZGVsZXRlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgndGltZWxpbWl0ZWRfYXV0b2RlbGV0ZScsMCkpOwokc21hcnR5LT5hc3NpZ24oJ3RpbWVsaW1pdGVkX3N1YmplY3QnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9zdWJqZWN0JywgJHRoaXMtPkxhbmcoJ2RmbHRfdGltZWxpbWl0ZWRfc3ViamVjdCcpKSk7Cgokc21hcnR5LT5hc3NpZ24oJ2NhdGVnb3J5X2V4cGlyeScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2NhdGVnb3J5X2V4cGlyeScsMCkpOwokc21hcnR5LT5hc3NpZ24oJ2FsbG93X3VwbG9hZF9zZW5kZmlsZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2FsbG93X3VwbG9hZF9zZW5kZmlsZScsMCkpOwokc21hcnR5LT5hc3NpZ24oJ2ZyaWVuZGx5bmFtZScsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2ZyaWVuZGx5bmFtZScpKTsKJHNtYXJ0eS0+YXNzaWduKCdhbGxvd19jaGFuZ2VkYXRlJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnYWxsb3dfY2hhbmdlZGF0ZScsMCkpOwokc21hcnR5LT5hc3NpZ24oJ2luZGV4X3R4dGZpbGVzJywkdGhpcy0+R2V0UHJlZmVyZW5jZSgnaW5kZXhfdHh0ZmlsZXMnKSk7CiRzbWFydHktPmFzc2lnbignaW5kZXhfcGRmZmlsZXMnLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdpbmRleF9wZGZmaWxlcycpKTsKJHNtYXJ0eS0+YXNzaWduKCdpbmRleF91bmlxdWV3b3JkcycsJHRoaXMtPkdldFByZWZlcmVuY2UoJ2luZGV4X3VuaXF1ZXdvcmRzJykpOwoKLy8gRGlzcGxheSB0aGUgcG9wdWxhdGVkIHRlbXBsYXRlCmVjaG8gJHRoaXMtPlByb2Nlc3NUZW1wbGF0ZSAoJ2FkbWlucHJlZnMudHBsJyk7CgovLyBFT0YKPz4=]]></data>
	</file>
	<file>
	  <filename>/function.admin_reportstab.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwppZiggISR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ0NyZWF0ZSBVcGxvYWRzIFJlcG9ydHMnKSApIHJldHVybjsKCgokbGlua3MgPSBhcnJheSgpOwokbGlua3NbXSA9IGFycmF5KCd0aXRsZSc9PiR0aGlzLT5MYW5nKCd0aXRsZV9yZXBvcnRfZG93bmxvYWRzYnl1c2VyJyksCgkJICd1cmwnPT4kdGhpcy0+Y3JlYXRlX3VybCgkaWQsJ2FkbWluX3JlcG9ydF9kb3dubG9hZHNieXVzZXInLCRyZXR1cm5pZCksCgkJICdpY29uJz0+JHRoaXMtPkRpc3BsYXlJbWFnZSgnbW9kdWxlcy8nLiR0aGlzLT5HZXROYW1lKCkuJy9pbWFnZXMvdXNlci1yZXBvcnQtaWNvbi5wbmcnLCR0aGlzLT5MYW5nKCdpY29uJyksMzIsMzIpKTsKJGxpbmtzW10gPSBhcnJheSgndGl0bGUnPT4kdGhpcy0+TGFuZygndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZScpLAoJCSAndXJsJz0+JHRoaXMtPmNyZWF0ZV91cmwoJGlkLCdhZG1pbl9yZXBvcnRfZG93bmxvYWRzYnlmaWxlJywkcmV0dXJuaWQpKTsKJHNtYXJ0eS0+YXNzaWduKCdsaW5rcycsJGxpbmtzKTsKCiRzbWFydHktPmFzc2lnbigncmVwb3J0X2ljb24nLCR0aGlzLT5EaXNwbGF5SW1hZ2UoJ21vZHVsZXMvJy4kdGhpcy0+R2V0TmFtZSgpLicvaW1hZ2VzL2ZpbGUtcmVwb3J0LWljb24ucG5nJywkdGhpcy0+TGFuZygnaWNvbicpLDMyLDMyKSk7CgplY2hvICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGUoJ2FkbWluX3JlcG9ydHN0YWIudHBsJyk7CiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/functions.admin_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmZ1bmN0aW9uIF91cGxvYWRzX0FkbWluRG9EZWxldGVVcGxvYWQgKCYkbW9kdWxlLCAkdXBsb2FkX2lkLCR1bmxpbmtfZmlsZSA9IEZBTFNFKQp7CiAgLy8gd2UncmUgZ29ubmEgcHV0IHNvbWUgdGhvdWdodCBpbnRvIHRoaXMuLi4gdGhlIHVzZXIKICAvLyBoYXMgYWxyZWFkeSBhbnN3ZXJlZCwgWWVwLCBXZSdyZSBzdXJlIHRoZSBmaWxlIGV4aXN0cywgZG9uJ3QgcmVhbGx5IGNhcmUgYW55d2F5cwogIC8vIHNvIGFsbCB3ZSBoYXZlIHRvIGRvIGlzIHJlbW92ZSB0aGUgZmlsZSwgYW5kIHJlbW92ZSB0aGUgcmVjb3JkIGZyb20gdGhlIGRhdGFiYXNlLgoKICAvLyBnZXQgdGhlIGluZm8gYWJvdXQgdGhlIHVwbG9hZCB3ZSdyZSBnb25uYSBkZWxldGUKICAkZGIgPSAkbW9kdWxlLT5HZXREYigpOwogICRxdWVyeSA9ICJTRUxFQ1QgdXBsb2FkX2lkLCB1cGxvYWRfY2F0ZWdvcnlfaWQsIHVwbG9hZF9uYW1lLCB1cGxvYWRfdGh1bWJuYWlsIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9pZCA9ID8iOwoJJHVwbG9hZHJvdyA9ICRkYi0+R2V0Um93KCAkcXVlcnksIGFycmF5KCAkdXBsb2FkX2lkICkgKTsKICBpZiggISR1cGxvYWRyb3cgKSByZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfZGJlcnJvcicpOwoKCWlmKCAkdW5saW5rX2ZpbGUgKSB7CgkJLy8gYW5kIHRoZSBpbmZvIGFib3V0IGl0J3MgY2F0ZWdvcnkKCQkkY2F0ZWdvcnlyb3cgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJHVwbG9hZHJvd1sndXBsb2FkX2NhdGVnb3J5X2lkJ10pOwoKCQkvLyBub3cgYnVpbGQgdGhlIHBhdGgKCQkkZmlsZSA9ICRtb2R1bGUtPl91cGxvYWRQYXRoKCAkY2F0ZWdvcnlyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10sICR1cGxvYWRyb3dbJ3VwbG9hZF9uYW1lJ10gKTsKCgkJLy8gYW5kIGRlbGV0ZSB0aGUgZmlsZQoJCUB1bmxpbmsoICRmaWxlICk7CgoJCS8vIGFuZCB0aGUgdGh1bWJuYWlsIGlmIG9uZSBleGlzdHMKCQlpZiggIWVtcHR5KCR1cGxvYWRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXSkgKSB7CgkJCSR0bmZpbGUgPSAkbW9kdWxlLT5fY2F0ZWdvcnlQYXRoKCAkY2F0ZWdvcnlyb3dbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10gKS5ESVJFQ1RPUllfU0VQQVJBVE9SOwoJCQkkdG5maWxlIC49ICR1cGxvYWRyb3dbJ3VwbG9hZF90aHVtYm5haWwnXTsKCQkJQHVubGluayggJHRuZmlsZSApOwoJCX0KCX0KCgkvLyBhbmQgYW55IHRpbWUgbGltaXRlZCB1cmxzCgkkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX3RpbWVsaW1pdCBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICR1cGxvYWRyb3dbJ3VwbG9hZF9pZCddICkgKTsKCiAgLy8gYW5kIHRoZSBmaWVsZCB2YWx1ZXMKICAkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICR1cGxvYWRyb3dbJ3VwbG9hZF9pZCddICkgKTsKCiAgLy8gYW5kIHRoZSBkb3dubG9hZHMKICAkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2FkcyBXSEVSRSBmaWxlX2lkID0gPyI7CiAgJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkdXBsb2Fkcm93Wyd1cGxvYWRfaWQnXSApICk7CgogIC8vIGFuZCB0aGUgcmVjb3JkIGl0c2VsZi4KICAkcXVlcnkgPSAiREVMRVRFIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9pZCA9ID8iOwogICRkYnJlc3VsdCA9ICRkYi0+RXhlY3V0ZSggJHF1ZXJ5LCBhcnJheSggJHVwbG9hZHJvd1sndXBsb2FkX2lkJ10gKSApOwoKICAvLyBkZWxldGUgdGhlIHNlYXJjaCBzdHVmZgogICRzZWFyY2ggPSAkbW9kdWxlLT5HZXRNb2R1bGVJbnN0YW5jZSgnU2VhcmNoJyk7CiAgaWYgKCRzZWFyY2ggIT0gRkFMU0UpICRzZWFyY2gtPkRlbGV0ZVdvcmRzKCRtb2R1bGUtPkdldE5hbWUoKSwgJHVwbG9hZHJvd1sndXBsb2FkX2lkJ10sICd1cGxvYWQnKTsKCiAgLy8gc2VuZCBhbiBldmVudAogICRwYXJtcyA9IGFycmF5KCk7CiAgJHBhcm1zWydpZCddID0gJHVwbG9hZHJvd1sndXBsb2FkX2lkJ107CiAgJHBhcm1zWyduYW1lJ10gPSAkdXBsb2Fkcm93Wyd1cGxvYWRfbmFtZSddOwogICRwYXJtc1snY2F0ZWdvcnlfaWQnXSA9ICR1cGxvYWRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddOwogICRtb2R1bGUtPlNlbmRFdmVudCgnT25SZW1vdmUnLCAkcGFybXMgKTsKCiAgLy8gYW5kIHdlJ3JlIGRvbmUKICAkbW9kdWxlLT5BdWRpdCggMCwgJG1vZHVsZS0+R2V0TmFtZSgpLAoJCQkJCQkJCQkkbW9kdWxlLT5sYW5nKCdkZWxldGVkJywgJHVwbG9hZHJvd1sndXBsb2FkX25hbWUnXSkgKTsKCglyZXR1cm4gZmFsc2U7Cn0KCgpmdW5jdGlvbiBfdXBsb2Fkc19BZG1pbkRvRGVsZXRlQ2F0ZWdvcnkgKCYkbW9kdWxlLCAkY2F0ZWdvcnlfaWQpCnsKCXRyeSB7CgkJJGNhdGVnb3J5ID0gXFVwbG9hZHNcY2F0ZWdvcnk6OmxvYWRfYnlfaWQoJGNhdGVnb3J5X2lkKTsKCQkkY2F0ZWdvcnktPmRlbGV0ZSgpOwoKCQkvLyBzZW5kIGFuIGV2ZW50CgkJJHBhcm1zW10gPSBhcnJheSgpOwoJCSRwYXJtc1snaWQnXSA9ICRjYXRlZ29yeS0+aWQ7CgkJJHBhcm1zWyduYW1lJ10gPSAkY2F0ZWdvcnktPm5hbWU7CgkJJHBhcm1zWydwYXRoJ10gPSAkY2F0ZWdvcnktPnBhdGg7CgkJJG1vZHVsZS0+U2VuZEV2ZW50KCdPbkRlbGV0ZUNhdGVnb3J5JywkcGFybXMpOwoJCXJldHVybiBGQUxTRTsKCX0KCWNhdGNoKCBcRXhjZXB0aW9uICRlICkgewoJCXJldHVybiAkZS0+R2V0TWVzc2FnZSgpOwoJfQoKCS8qCgkvLyBnZXQgdGhlIGNhdGVnb3J5IGRldGFpbHMKCSRjYXRlZ29yeSA9ICRtb2R1bGUtPl9nZXRVcGxvYWRDYXRlZ29yeURldGFpbHMoICRjYXRlZ29yeV9pZCApOwoJaWYoICEkY2F0ZWdvcnkgKSByZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfY2F0ZWdvcnlub3Rmb3VuZCcpOwoKCS8vIGdldCB0aGUgZmlsZXMgZnJvbSB0aGUgY2F0ZWdvcnkKCSRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzCiAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8nOwoJJGRiID0gJG1vZHVsZS0+R2V0RGIoKTsKCSR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJGNhdGVnb3J5X2lkKSApOwoJaWYoICR0bXAgKSByZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfY2F0ZWdvcnlub3RlbXB0eScpOwoKCSRkaXIgPSAkbW9kdWxlLT5fY2F0ZWdvcnlQYXRoKCAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10gKTsKCWNnZV9kaXI6OnJlY3Vyc2l2ZV9ybWRpcigkZGlyKTsKCglpZiggZmlsZV9leGlzdHMoJGRpcikgKQlyZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfZGVsZXRlJywkZGlyKTsKCgkvLyBkZWxldGUgdGhlIGNhdGVnb3J5IGZyb20gdGhlIGRiCgkkZGIgPSAkbW9kdWxlLT5HZXREYigpOwoJJHF1ZXJ5ID0gIkRFTEVURSBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwoJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlKCAkcXVlcnksIGFycmF5KCAkY2F0ZWdvcnlfaWQgKSApOwoKCS8vIHNlbmQgYW4gZXZlbnQKCSRwYXJtc1tdID0gYXJyYXkoKTsKCSRwYXJtc1snbmFtZSddID0gJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddOwoJJHBhcm1zWydwYXRoJ10gPSAkY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ107CgkkbW9kdWxlLT5TZW5kRXZlbnQoJ09uRGVsZXRlQ2F0ZWdvcnknLCRwYXJtcyk7CgoJLy8gYW5kIHdlJ3JlIGRvbmUKCXJldHVybiBGQUxTRTsKCSovCn0KCgpmdW5jdGlvbiBfdXBsb2Fkc19Db3B5Q2F0ZWdvcnkoJiRtb2R1bGUsJG9yaWdfY2F0ZWdvcnlfaWQsJGRlc3RfbmFtZSwkZGVzdF9wYXRoLAoJCQkJCQkJCQkJCQkJCQkgJGRlc3RfZGVzYywkY29weWZpbGVzLCRlZGl0X2Rlc2MgPSB0cnVlKQp7CgkkZ0NtcyA9IGNtc21zKCk7CgkkY29uZmlnID0gJGdDbXMtPkdldENvbmZpZygpOwoKCS8vIGdldCB0aGUgb3JpZ2luYWwgY2F0ZWdvcnkKCSRvcmlnX2NhdGVnb3J5ID0gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCRvcmlnX2NhdGVnb3J5X2lkKTsKCWlmKCAhJG9yaWdfY2F0ZWdvcnkgKQlyZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfY2F0ZWdvcnlub3Rmb3VuZCcpOwoJJGRlc3RfY2F0ZWdvcnkgPSAkb3JpZ19jYXRlZ29yeTsKCglpZiggZW1wdHkoJGRlc3RfbmFtZSkgKQlyZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfbWlzc2luZ19pbnZhbGlkJywnbmFtZScpOwoJaWYoIGVtcHR5KCRkZXN0X3BhdGgpICkgcmV0dXJuICRtb2R1bGUtPkxhbmcoJ2Vycm9yX21pc3NpbmdfaW52YWxpZCcsJ3BhdGgnKTsKCSR0bXAgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJGRlc3RfbmFtZSk7CglpZiggaXNfYXJyYXkoJHRtcCkgKSByZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfY2F0ZWdvcnlleGlzdHMyJywkZGVzdF9uYW1lKTsKCSR0bXAyID0gVXBsb2Fkczo6Y2F0ZWdvcnlfcGF0aF9pbl91c2UoJGRlc3RfcGF0aCk7CglpZiggJHRtcDIgKQlyZXR1cm4gJG1vZHVsZS0+TGFuZygnZXJyb3JfcGF0aGludXNlMicsJGRlc3RfcGF0aCk7CgoJJHNyY2RpciA9IGNtc19qb2luX3BhdGgoJGNvbmZpZ1sndXBsb2Fkc19wYXRoJ10sJG9yaWdfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10pOwoJJGRlc3RkaXIgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLCRkZXN0X3BhdGgpOwoJaWYoIGZpbGVfZXhpc3RzKCRkZXN0ZGlyKSApCXJldHVybiAkbW9kdWxlLT5MYW5nKCdlcnJvcl9maWxlZXhpc3RzJywkZGVzdGRpcik7CglpZiggIWZpbGVfZXhpc3RzKCRzcmNkaXIpICkJcmV0dXJuICRtb2R1bGUtPkxhbmcoJ2Vycm9yX2ZpbGVub3Rmb3VuZCcsJHNyY2Rpcik7CgoJJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10gPSAkZGVzdF9uYW1lOwoJJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10gPSAkZGVzdF9wYXRoOwoJaWYoICRlZGl0X2Rlc2MgKSAkZGVzdF9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uJ10gPSAkZGVzdF9kZXNjOwoKCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkkY2F0aWQgPSAkZGItPkdlbklEIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzX3NlcSIpOwoKCSRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcwogICAgICAgICAgICAodXBsb2FkX2NhdGVnb3J5X2lkLHVwbG9hZF9jYXRlZ29yeV9uYW1lLAogICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uLHVwbG9hZF9jYXRlZ29yeV9wYXRoLAogICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2xpc3RhYmxlLHVwbG9hZF9jYXRlZ29yeV9ncm91cHMsCiAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlKQogICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8pJzsKCSRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LAoJCQkJCQkJCQkJCWFycmF5KCRjYXRpZCwKCQkJCQkJCQkJCQkJCQkkZGVzdF9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X25hbWUnXSwKCQkJCQkJCQkJCQkJCQkkZGVzdF9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uJ10sCgkJCQkJCQkJCQkJCQkJJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10sCgkJCQkJCQkJCQkJCQkJJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSddLAoJCQkJCQkJCQkJCQkJCSRkZXN0X2NhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzJ10sCgkJCQkJCQkJCQkJCQkJJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9kZWxldGFibGUnXSkpOwoKCWlmKCAhJGRiciApCXJldHVybiAkbW9kdWxlLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CgoJQG1rZGlyKCRkZXN0ZGlyLCAwNzc3LCB0cnVlKTsKCWlmKCAhZmlsZV9leGlzdHMoJGRlc3RkaXIpICkgewoJCSRxdWVyeSA9ICdERUxFVEUgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcwogICAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8nOwoJCSRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJGNhdGlkKSk7CgkJcmV0dXJuICRtb2R1bGUtPkxhbmcoJ2Vycm9yX2NhbnRjcmVhdGVkaXJlY3RvcnknLic6ICcuJGRlc3RkaXIpOwoJfQoJaWYoICRtb2R1bGUtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9kdW1teV9pbmRleF9odG1sJykgKSB7CgkJQHRvdWNoKCAkZGVzdGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiJpbmRleC5odG1sIiApOwoJfQoKCS8vIHNlbmQgYW4gZXZlbnQKCSRwYXJtcyA9IGFycmF5KCk7CgkkcGFybXNbJ25hbWUnXSA9ICRkZXN0X2NhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddOwoJJHBhcm1zWydkZXNjcmlwdGlvbiddID0gJGRlc3RfY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbiddOwoJJHBhcm1zWydwYXRoJ10gPSAkZGVzdF9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXTsKCSRwYXJtc1snbGlzdGFibGUnXSA9ICRkZXN0X2NhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfbGlzdGFibGUnXTsKCSRwYXJtc1snZGVsZXRhYmxlJ10gPSAkZGVzdF9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZSddOwoJJG1vZHVsZS0+U2VuZEV2ZW50KCAnT25DcmVhdGVDYXRlZ29yeScsICRwYXJtcyApOwoKCSRlcnJvciA9IGFycmF5KCk7CglpZiggJGNvcHlmaWxlcyApIHsKCQkvLyBub3cgY29weSB0aGUgZmlsZXMuCgkJJGF1dGhvciA9ICRfU0VTU0lPTlsnY21zX2FkbWluX3VzZXJuYW1lJ107CgkJJG5vdyA9ICRkYi0+RGJUaW1lU1RhbXAodGltZSgpKTsKCQkkZmlsZV9yZWNvcmRzID0gVXBsb2Fkczo6Z2V0X2NhdGVnb3J5X2ZpbGVfbGlzdCggJG9yaWdfY2F0ZWdvcnlfaWQgKTsKCQkkaXF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2FkcwogICAgICAgICAgICAgICAodXBsb2FkX2lkLHVwbG9hZF9jYXRlZ29yeV9pZCx1cGxvYWRfbmFtZSwKICAgICAgICAgICAgICAgIHVwbG9hZF9hdXRob3IsdXBsb2FkX3N1bW1hcnksdXBsb2FkX2Rlc2NyaXB0aW9uLAogICAgICAgICAgICAgICAgdXBsb2FkX2lwLHVwbG9hZF9zaXplLHVwbG9hZF9kYXRlLAogICAgICAgICAgICAgICAgdXBsb2FkX2tleSx1cGxvYWRfdGh1bWJuYWlsKQogICAgICAgICAgICAgICBWQUxVRVMoPyw/LD8sPyw/LD8sPyw/LCRub3csPyw/KSI7CgoJCWlmKCBpc19hcnJheSgkZmlsZV9yZWNvcmRzKSApIHsKCQkJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGZpbGVfcmVjb3Jkcyk7ICRpKysgKSB7CgkJCQlpZiggIWVtcHR5KCRlcnJvcikgKSBicmVhazsKCgkJCQkkZGlkX2NvcHlfdGh1bWIgPSBmYWxzZTsKCQkJCSRkZXN0dGh1bWIgPSAnJzsKCQkJCSRvbmVyZWMgPSYgJGZpbGVfcmVjb3Jkc1skaV07CgoJCQkJLy8gZ2V0IHRoZSBmaWxlIHBhdGgKCQkJCSRzcmNmaWxlID0gY21zX2pvaW5fcGF0aCgkc3JjZGlyLCRvbmVyZWNbJ3VwbG9hZF9uYW1lJ10pOwoJCQkJJGRlc3RmaWxlID0gY21zX2pvaW5fcGF0aCgkZGVzdGRpciwkb25lcmVjWyd1cGxvYWRfbmFtZSddKTsKCgkJCQkvLyBjb3B5IHRoZSBmaWxlCgkJCQljb3B5KCRzcmNmaWxlLCRkZXN0ZmlsZSk7CgoJCQkJLy8gY2hlY2sgZm9yIGEgdGh1bWJuYWlsCgkJCQkkc3JjdGh1bWIgPSBjbXNfam9pbl9wYXRoKCRzcmNkaXIsJ3RodW1iXycuJG9uZXJlY1sndXBsb2FkX25hbWUnXSk7CgkJCQkkZGVzdHRodW1iID0gY21zX2pvaW5fcGF0aCgkZGVzdGRpciwndGh1bWJfJy4kb25lcmVjWyd1cGxvYWRfbmFtZSddKTsKCQkJCWlmKCBmaWxlX2V4aXN0cygkc3JjZGlyKSApIHsKCQkJCQkvLyBjb3B5IGl0CgkJCQkJJGRlc3R0aHVtYiA9IGNtc19qb2luX3BhdGgoJGRlc3RkaXIsJ3RodW1iXycuJG9uZXJlY1sndXBsb2FkX25hbWUnXSk7CgkJCQkJY29weSgkc3JjdGh1bWIsJGRlc3R0aHVtYik7CgkJCQkJJGRpZF9jb3B5X3RodW1iID0gdHJ1ZTsKCQkJCX0KCgkJCQkvLyBnZW5lcmF0ZSBhIG5ldyBmaWxlIGlkCgkJCQkkZmlsZV9pZCA9ICRkYi0+R2VuSUQgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX3NlcSIpOwoKCQkJCS8vIGFsdGVyIHRoZSByZWNvcmQKCQkJCSRvbmVyZWNbJ3VwbG9hZF9pZCddID0gJGZpbGVfaWQ7CgkJCQkkb25lcmVjWyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSA9ICRjYXRpZDsKCQkJCSRvbmVyZWNbJ3VwbG9hZF9hdXRob3InXSA9ICRhdXRob3I7CgkJCQkkb25lcmVjWyd1cGxvYWRfaXAnXSA9IG51bGw7CgoJCQkJLy8gaW5zZXJ0IGl0LgoJCQkJJGRiciA9ICRkYi0+RXhlY3V0ZSgkaXF1ZXJ5LAoJCQkJCQkJCQkJCQkJCWFycmF5KCRmaWxlX2lkLAoJCQkJCQkJCQkJCQkJCQkJCSRvbmVyZWNbJ3VwbG9hZF9jYXRlZ29yeV9pZCddLAoJCQkJCQkJCQkJCQkJCQkJCSRvbmVyZWNbJ3VwbG9hZF9uYW1lJ10sCgkJCQkJCQkJCQkJCQkJCQkJJG9uZXJlY1sndXBsb2FkX2F1dGhvciddLAoJCQkJCQkJCQkJCQkJCQkJCSRvbmVyZWNbJ3VwbG9hZF9zdW1tYXJ5J10sCgkJCQkJCQkJCQkJCQkJCQkJJG9uZXJlY1sndXBsb2FkX2Rlc2NyaXB0aW9uJ10sCgkJCQkJCQkJCQkJCQkJCQkJJG9uZXJlY1sndXBsb2FkX2lwJ10sCgkJCQkJCQkJCQkJCQkJCQkJJG9uZXJlY1sndXBsb2FkX3NpemUnXSwKCQkJCQkJCQkJCQkJCQkJCQkkb25lcmVjWyd1cGxvYWRfa2V5J10sCgkJCQkJCQkJCQkJCQkJCQkJJG9uZXJlY1sndXBsb2FkX3RodW1ibmFpbCddKSk7CgoJCQkJLy8gb24gZXJyb3IgZGVsZXRlIGZpbGVzLgoJCQkJaWYoICEkZGJyICkgewoJCQkJCUB1bmxpbmsoJGRlc3RmaWxlKTsKCQkJCQlAdW5saW5rKCRkZXN0dGh1bWIpOwoJCQkJCWlmKCAhaXNfYXJyYXkoJGVycm9yKSApCSRlcnJvciA9IGFycmF5KCk7CgkJCQkJJGVycm9yW10gPSAkbW9kdWxlLT5MYW5nKCdlcnJvcl9kYmVycm9yJyk7CgkJCQl9CgkJCX0KCQl9Cgl9IC8vIGNvcHkgZmlsZXMKCglpZiggISRlcnJvciApCXJldHVybiAkZXJyb3I7CglyZXR1cm4gRkFMU0U7Cn0KCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/functions.common_tools.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmZ1bmN0aW9uIF91cGxvYWRzX0F0dGVtcHRVcGxvYWQgKCYkbW9kLCAkaWQsICYkcGFyYW1zLCAkcmV0dXJuaWQpCnsKICAkZmllbGRuYW1lID0gJGlkLidpbnB1dF9icm93c2UnOwogIGlmKCBpc3NldCgkcGFyYW1zWydmaWVsZF9uYW1lJ10pICkgJGZpZWxkbmFtZSA9ICRwYXJhbXNbJ2ZpZWxkX25hbWUnXTsKCiAgLy8gY2hlY2sgZm9yIHRoZSBmaWxldHlwZXMgcGFyYW0KICBpZiAoaXNzZXQoICRwYXJhbXNbJ2ZpbGVfZXh0ZW5zaW9ucyddICkgKSAkbW9kLT51cGxvYWRfZXh0ZW5zaW9ucyA9ICRwYXJhbXNbJ2ZpbGVfZXh0ZW5zaW9ucyddOwoKICAvLyBjaGVjayB0aGUgYXV0aG9yCiAgaWYgKCFpc3NldCAoJHBhcmFtc1snaW5wdXRfYXV0aG9yJ10pKSByZXR1cm4gYXJyYXkoIEZBTFNFLCAkbW9kLT5MYW5nKCdlcnJvcl9pbnZhbGlkYXV0aG9yJykgKTsKCgkvLyBjbGVhbiB1cCBhdXRob3IKCSRwYXJhbXNbJ2lucHV0X2F1dGhvciddID0gdHJpbShzdHJpcF90YWdzKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHBhcmFtc1snaW5wdXRfYXV0aG9yJ10pKSk7CgogIC8vIHNlZSBpZiB0aGVyZSdzIGEga2V5CiAgJGtleSA9IG51bGw7CiAgaWYoIGlzc2V0KCAkcGFyYW1zWydpbnB1dF9rZXknXSApICkJJGtleSA9ICRwYXJhbXNbJ2lucHV0X2tleSddOwoKICAvLyB2YWxpZGF0ZSB0aGUgdXBsb2FkIG5hbWUKICBpZiggIWlzc2V0KCRfRklMRVNbJGZpZWxkbmFtZV0pICkgcmV0dXJuIGFycmF5KEZBTFNFLCRtb2QtPkxhbmcoJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCcpKTsKCgkvLyBoYW5kbGUgZmlsZW5hbWUgcHJlZml4CiAgJGZpbGVQcmVmaXggPSAnJzsKCWlmKCBpc3NldCgkcGFyYW1zWydwcmVmaXgnXSkgJiYgJHBhcmFtc1sncHJlZml4J10gPT0gMSApIHsKCQkkZmlsZVByZWZpeCA9IGRlY2hleCh0aW1lKCkpIC4gIl8iOwoJCWlmIChpc3NldCgkcGFyYW1zWydwcmVmaXhfZmV1J10pICYmICRwYXJhbXNbJ3ByZWZpeF9mZXUnXSA9PSAxKSAkZmlsZVByZWZpeCA9ICRwYXJhbXNbJ2lucHV0X2F1dGhvciddIC4gIl8iOwoJfQoKCS8vIGhhbmRsZSBkZXN0aW5hdGlvbiBuYW1lCgkkZGVzdG5hbWUgPSAnJzsKICBpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfZGVzdG5hbWUnXSkgJiYgJHBhcmFtc1snaW5wdXRfZGVzdG5hbWUnXSAhPSAnJykgewoJCSRkZXN0bmFtZSA9IGJhc2VuYW1lKHRyaW0oc3RyaXBfdGFncyhjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCRwYXJhbXNbJ2lucHV0X2Rlc3RuYW1lJ10pKSkpOwoJfQoKCS8vIGhhbmRsZSByZXBsYWNlIGV4aXN0aW5nCiAgJHJlcGxhY2VfZXhpc3RpbmcgPSBmYWxzZTsKICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X3JlcGxhY2UnXSkgJiYgJHBhcmFtc1snaW5wdXRfcmVwbGFjZSddID09IDEgKSAkcmVwbGFjZV9leGlzdGluZyA9IHRydWU7CgogIC8vIGNoZWNrIHRoZSBzdW1tYXJ5CiAgaWYgKCAhaXNzZXQoJHBhcmFtc1snaW5wdXRfc3VtbWFyeSddKSB8fCAkcGFyYW1zWydpbnB1dF9zdW1tYXJ5J10gPT0gJycgKSB7CgkJLy8gd2UnbGwgY2hlYXQsIGlmIHRoZSBzdW1tYXJ5IGlzIGxlZnQgYXMgZW1wdHkKCQkvLyB3ZSdsbCB1c2UgdGhlIHVwbG9hZCBuYW1lCgkJJHAgPSBzdHJwb3MoICRkZXN0bmFtZSwgJy4nICk7CgkJaWYoICRwICkgewoJCQkkcGFyYW1zWydpbnB1dF9zdW1tYXJ5J10gPSBzdWJzdHIoICRkZXN0bmFtZSwgMCwgJHAgKTsKCQl9CgkJZWxzZSB7CgkJCSRwYXJhbXNbJ2lucHV0X3N1bW1hcnknXSA9ICRkZXN0bmFtZTsKCQl9Cgl9CgogIC8vIGNoZWNrIHRoZSBjYXRlZ29yeQogICRkYiA9ICRtb2QtPkdldERiKCk7CiAgJGRicmVzdWx0ID0gIiI7CiAgJHJvdyA9IGFycmF5KCk7CiAgJGNhdGVnb3J5X2lkID0gMDsKICBpZiAoaXNzZXQoICRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10gKSApIHsKCQkkcm93ID0gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCRwYXJhbXNbJ2NhdGVnb3J5X2lkJ10pOwoJfQogIGVsc2UgaWYgKGlzc2V0ICgkcGFyYW1zWydjYXRlZ29yeSddKSkgewoJCSRyb3cgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJHBhcmFtc1snY2F0ZWdvcnknXSk7Cgl9CiAgaWYgKCEkcm93KSByZXR1cm4gYXJyYXkoIEZBTFNFLCAkbW9kLT5MYW5nKCdlcnJvcl9pbnZhbGlkY2F0ZWdvcnknKSApOwoKICAkY2F0ZWdvcnlfaWQgPSAkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXTsKICAkY2F0ZWdvcnlfbmFtZSA9ICRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ107CgogIC8vIG5vdyBkbyB0aGUgdXBsb2FkLCBob3BlZnVsbHkKICAvLyBmaXJzdCB0aGUgZmlsZSBpdHNlbGYuCiAgJGRpciA9ICRtb2QtPl9jYXRlZ29yeVBhdGgoJHJvd1sndXBsb2FkX2NhdGVnb3J5X3BhdGgnXSk7CiAgJHJlc3VsdCA9ICRtb2QtPl9oYW5kbGVVcGxvYWQgKCRkaXIsJGZpZWxkbmFtZSxmYWxzZSwkZGVzdG5hbWUsIHRydWUsJHJlcGxhY2VfZXhpc3RpbmcsJGZpbGVQcmVmaXgpOwogIGlmICghJHJlc3VsdFswXSkgcmV0dXJuIGFycmF5KCBGQUxTRSwgJHJlc3VsdFsxXSApOwogICRkZXN0bmFtZSA9ICRyZXN1bHRbMV1bJ25hbWUnXTsKCgkvLyBzZWUgYWJvdXQgd2F0ZXJtYXJraW5nCglpZiggJG1vZC0+R2V0UHJlZmVyZW5jZSgnYXV0b3dhdGVybWFyaycsMCkgKSB7CgkJJHNyY25hbWUgPSBjbXNfam9pbl9wYXRoKCRkaXIsJGRlc3RuYW1lKTsKCQkkd21uYW1lID0gY21zX2pvaW5fcGF0aCgkZGlyLCd3bV8nLiRkZXN0bmFtZSk7CgoJCSR3bW9iaiA9IGNnZV9zZXR1cDo6Z2V0X3dhdGVybWFya2VyKCk7CgkJJHJlcyA9ICR3bW9iai0+Y3JlYXRlX3dhdGVybWFya2VkX2ltYWdlKCRzcmNuYW1lLCR3bW5hbWUpOwoKCQlpZiggRkFMU0UgIT09ICRyZXMgKSB7CgkJCUB1bmxpbmsoJHNyY25hbWUpOwoJCQlAcmVuYW1lKCR3bW5hbWUsJHNyY25hbWUpOwoJCX0KCX0KCiAgLy8gY2hlY2sgZm9yIGFuIGV4aXN0aW5nIGRhdGFiYXNlIGVudHJ5CiAgJHF1ZXJ5ID0gIlNFTEVDVCB1cGxvYWRfaWQgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMgV0hFUkUgdXBsb2FkX25hbWUgPSA/IEFORAl1cGxvYWRfY2F0ZWdvcnlfaWQgPSA/IjsKICAkdG1wX2lkID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LCBhcnJheSggJGRlc3RuYW1lLCAkY2F0ZWdvcnlfaWQgKSApOwoKICAkZmlsZWlkID0gJyc7CiAgaWYoICRyZXBsYWNlX2V4aXN0aW5nID09PSBmYWxzZSAmJiAkdG1wX2lkICkgewoJCXJldHVybiBhcnJheSggRkFMU0UsICRtb2QtPkxhbmcoJ2Vycm9yX2ZpbGVleGlzdHMnKSApOwoJfQogIGVsc2UgaWYgKCR0bXBfaWQpIHsKCQkvLyB3ZSdyZSBhbGxvd2luZyBvdmVyd3JpdGUKCQkkZmlsZWlkID0gJHRtcF9pZDsKCQkkcmVwbGFjZV9leGlzdGluZyA9IHRydWU7CgoJCS8vIGRlbGV0ZSBmaWVsZCBkZWZpbml0aW9ucy4KCQkkcXVlcnkgPSAnREVMRVRFIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscyBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKCQkkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR0bXBfaWQpKTsKCX0KCiAgLy8gY3JlYXRlIGEgbmV3IHVwbG9hZCBpZCBoZXJlLgogIGlmKCAkZmlsZWlkID09ICcnICkgJG5ld2lkID0gJGRiLT5HZW5JRCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfc2VxIik7CgogIC8vIGFuZCB0aGVuIG1heWJlIHRoZSB0aHVtYm5haWwKICAkdGh1bWJfbmFtZSA9ICcnOwogIGlmKCBpc3NldCggJF9GSUxFU1skaWQuJ2lucHV0X3RodW1ibmFpbCddWyduYW1lJ10gKSAmJiAkX0ZJTEVTWyRpZC4naW5wdXRfdGh1bWJuYWlsJ11bJ25hbWUnXSAhPSAnJyAmJgogICAgICAkX0ZJTEVTWyRpZC4naW5wdXRfdGh1bWJuYWlsJ11bJ3NpemUnXSA+IDApIHsKCQkvLyBidWlsZCB0aGUgdGh1bWJuYWlsIG5hbWUKCQkkdGh1bWJfZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdHJyY2hyKCRfRklMRVNbJGlkLidpbnB1dF90aHVtYm5haWwnXVsnbmFtZSddLCcuJykpOwoJCSRmaWxlZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdHJyY2hyKCRkZXN0bmFtZSwnLicpKTsKCQkkZmlsZW5hbWV3b2V4dCA9IHN1YnN0cigkZGVzdG5hbWUsMCxzdHJsZW4oJGRlc3RuYW1lKS1zdHJsZW4oJGZpbGVleHRlbnNpb24pKTsKCQkkdGh1bWJfbmFtZSA9ICd0aHVtYl8nLiRmaWxlbmFtZXdvZXh0LiR0aHVtYl9leHRlbnNpb247CgoJCSRmaWQgPSAkZmlsZWlkOwoJCWlmKCAkZmlkID09ICcnICkgewoJCQkkZmlkID0gJG5ld2lkOwoJCX0KCQkkcmVzdWx0MiA9ICRtb2QtPl9oYW5kbGVVcGxvYWQgKCRkaXIsICRpZC4naW5wdXRfdGh1bWJuYWlsJyxmYWxzZSwkdGh1bWJfbmFtZSwgZmFsc2UsJHJlcGxhY2VfZXhpc3RpbmcsJGZpbGVQcmVmaXgpOwoJCWlmICghJHJlc3VsdDJbMF0pIHsKCQkJLy8gdWgtb2gsIHRoZSBzZWNvbmQgdXBsb2FkIGZhaWxlZC4uLi4gbm93IHdlJ3ZlIGdvdHRhCgkJCS8vIGRlbGV0ZSB0aGUgZmlyc3QgZmlsZSB0byBhdm9pZCBhbnkgY29ycnVwdGlvbgoJCQkvLyB0b2RvCgkJCXVubGluayggJHJlc3VsdFsxXVsnZGlyJ10uRElSRUNUT1JZX1NFUEFSQVRPUi4kcmVzdWx0WzFdWyduYW1lJ10gKTsKCQkJcmV0dXJuIGFycmF5KCBGQUxTRSwgJHJlc3VsdDJbMV0gKTsKCQl9Cgl9CiAgZWxzZSB7CgkJLy8gc2VlIGlmIHdlIGNhbiBhdXRvLWNyZWF0ZSBhIHRodW1ibmFpbAoJCWlmKCAkbW9kLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSAhPSAnJyAmJiAkbW9kLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX3NpemUnKSAhPSAnJyApIHsKCQkJJGZpZCA9ICRmaWxlaWQ7CgkJCWlmKCAkZmlkID09ICcnICkgJGZpZCA9ICRuZXdpZDsKCgkJCSRmaWxlZXh0ZW5zaW9uID0gc3RydG9sb3dlcihzdHJyY2hyKCRkZXN0bmFtZSwnLicpKTsKCQkJJHRodW1iX2V4dF9hcnIgPSBleHBsb2RlKCcsJywkbW9kLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSk7CgoJCQlmb3JlYWNoKCAkdGh1bWJfZXh0X2FyciBhcyAkdGh1bWJfZXh0ICkgewoJICAgICAgaWYoICIuIi4kdGh1bWJfZXh0ID09ICRmaWxlZXh0ZW5zaW9uICkgewoJCQkJCS8vIHdvb2hvbywgd2UgY2FuIGNyZWF0ZSBhIHRodW1ibmFpbAoJCQkJCSRkZXN0ID0gJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLid0aHVtYl8nLiRkZXN0bmFtZTsKCQkJCQkkc3JjICA9ICRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZGVzdG5hbWU7CgkJCQkJJHRodW1iX25hbWUgPSAndGh1bWJfJy4kZGVzdG5hbWU7CgkJCQkJJG1vZC0+aW1hZ2VUcmFuc2Zvcm0oJHNyYywkZGVzdCwkbW9kLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX3NpemUnKSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkgICAgfQoJCX0KCX0KCgkvLyBjbGVhbiBpbnB1dCB2YWx1ZXMKCSRwYXJhbXNbJ2lucHV0X3N1bW1hcnknXSA9IHN0cmlwX3RhZ3MoY21zX2h0bWxfZW50aXR5X2RlY29kZSgkcGFyYW1zWydpbnB1dF9zdW1tYXJ5J10pKTsKCiAgLy8gYXBwYXJlbnRseSB0aGUgdXBsb2FkIHN1Y2NlZWRlZCwgbm93IHdlIGhhdmUgdG8gbG9nIGl0IGludG8gdGhlIGRhdGFiYXNlCiAgJGRlc2MgPSAiIjsKICBpZiggaXNzZXQoICRwYXJhbXNbJ2lucHV0X2Rlc2NyaXB0aW9uJ10gKSApICRkZXNjID0gJHBhcmFtc1snaW5wdXRfZGVzY3JpcHRpb24nXTsKCSRkZXNjID0gY2dlX3V0aWxzOjpjbGVhbl9pbnB1dF9odG1sKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJGRlc2MpKTsKCgkkdXNlcnBlcm1zID0gJyc7CglpZiggaXNzZXQoJHBhcmFtc1snaW5wdXRfdXNlcnBlcm1zJ10pICYmIGlzX2FycmF5KCRwYXJhbXNbJ2lucHV0X3VzZXJwZXJtcyddKSApICR1c2VycGVybXMgPSBpbXBsb2RlKCcsJywkcGFyYW1zWydpbnB1dF91c2VycGVybXMnXSk7CiAgJGF1ZGl0X21zZyA9ICcnOwogIGlmKCAkZmlsZWlkID09ICcnICkgewoJCSRxdWVyeSA9CiAgICAJIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHMKICAgICAgICAgICAodXBsb2FkX2lkLHVwbG9hZF9jYXRlZ29yeV9pZCx1cGxvYWRfbmFtZSx1cGxvYWRfYXV0aG9yLAogICAgICAgICAgICB1cGxvYWRfc3VtbWFyeSx1cGxvYWRfZGVzY3JpcHRpb24sdXBsb2FkX2lwLHVwbG9hZF9zaXplLAogICAgICAgICAgICB1cGxvYWRfZGF0ZSwgdXBsb2FkX2tleSwgdXBsb2FkX3RodW1ibmFpbCwgdXBsb2FkX3VzZXJwZXJtcykKICAgICAgICAgICBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/KSI7CgkJJGRicmVzdWx0ID0gJGRiLT5FeGVjdXRlICgkcXVlcnksCgkJCQkJCQkJCQkJYXJyYXkgKCRuZXdpZCwkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSwkZGVzdG5hbWUsCgkJCQkJCQkJCQkJCQkJICRwYXJhbXNbJ2lucHV0X2F1dGhvciddLCRwYXJhbXNbJ2lucHV0X3N1bW1hcnknXSwKCQkJCQkJCQkJCQkJCQkgJGRlc2MsZ2V0ZW52ICgiUkVNT1RFX0FERFIiKSwgJHJlc3VsdFsxXVsnc2l6ZSddLAoJCQkJCQkJCQkJCQkJCSB0cmltKCRkYi0+REJUaW1lU3RhbXAgKHRpbWUgKCkpLCInIiksCgkJCQkJCQkJCQkJCQkJICRrZXksJHRodW1iX25hbWUsJHVzZXJwZXJtcykpOwoJCSRhdWRpdF9tc2cgPSAnVXNlciAnLiRwYXJhbXNbJ2lucHV0X2F1dGhvciddLicgdXBsb2FkZWQgJy4kZGVzdG5hbWU7Cgl9CiAgZWxzZSB7CgkJJHF1ZXJ5ID0gIlVQREFURSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMKICAgICAgICAgICAgICBTRVQgdXBsb2FkX25hbWUgPSA/LCB1cGxvYWRfYXV0aG9yID0gPywKICAgICAgICAgICAgICAgICAgdXBsb2FkX3N1bW1hcnkgPSA/LCB1cGxvYWRfZGVzY3JpcHRpb24gPSA/LAogICAgICAgICAgICAgICAgICB1cGxvYWRfaXAgPSA/LCB1cGxvYWRfc2l6ZSA9ID8sIHVwbG9hZF9kYXRlID0gPywKICAgICAgICAgICAgICAgICAgdXBsb2FkX2tleSA9ID8sIHVwbG9hZF90aHVtYm5haWwgPSA/LCB1cGxvYWRfdXNlcnBlcm1zID0gPwogICAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9pZCA9ID8iOwoJCSRkYnJlc3VsdCA9CSRkYi0+RXhlY3V0ZSggJHF1ZXJ5LAoJCQkJCQkJCQkJCQkJCQlhcnJheSggJGRlc3RuYW1lLCAkcGFyYW1zWydpbnB1dF9hdXRob3InXSwgJHBhcmFtc1snaW5wdXRfc3VtbWFyeSddLAoJCQkJCQkJCQkJCQkJCQkJCQkgJGRlc2MsIGdldGVudiggIlJFTU9URV9BRERSIiApLCAkcmVzdWx0WzFdWydzaXplJ10sCgkJCQkJCQkJCQkJCQkJCQkJCSB0cmltKCRkYi0+REJUaW1lU3RhbXAodGltZSgpKSwiJyIpLAoJCQkJCQkJCQkJCQkJCQkJCQkgJGtleSwgJHRodW1iX25hbWUsICR1c2VycGVybXMsICRmaWxlaWQpKTsKCQkkbmV3aWQgPSAkZmlsZWlkOwoJCSRhdWRpdF9tc2cgPSAnVXNlciAnLiRwYXJhbXNbJ2lucHV0X2F1dGhvciddLicgcmVwbGFjZWQgJy4kZGVzdG5hbWU7Cgl9CglpZiggISRkYnJlc3VsdCApIHsKCQlyZXR1cm4gYXJyYXkoIEZBTFNFLCAkbW9kLT5MYW5nKCdlcnJvcl9kYmVycm9yJykgKTsKCX0KCiAgLy8gZG8gY3VzdG9tIGZpZWxkcy4KICAkaXF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgKHVwbG9hZF9pZCwgZmxkX2lkLCB2YWx1ZSkgVkFMVUVTICg/LD8sPyknOwogIGZvcmVhY2goICRwYXJhbXMgYXMgJGtleSA9PiAkdmFsdWUgKSB7CgkJaWYoICFzdGFydHN3aXRoKCRrZXksJ2ZpZWxkXycpICkgY29udGludWU7CgoJCSRmaWVsZF9pZCA9IChpbnQpc3Vic3RyKCRrZXksNik7CgkJaWYoIGlzX2FycmF5KCAkdmFsdWUgKSApICR2YWx1ZSA9IGltcGxvZGUoJywnLCR2YWx1ZSk7CgkJJHZhbHVlID0gY2dlX3V0aWxzOjpjbGVhbl9pbnB1dF9odG1sKGNtc19odG1sX2VudGl0eV9kZWNvZGUoJHZhbHVlKSk7CgkJJHZhbHVlID0gdHJpbSgkdmFsdWUpOwoJCSRkYi0+RXhlY3V0ZSgkaXF1ZXJ5LGFycmF5KCRuZXdpZCwkZmllbGRfaWQsJHZhbHVlKSk7Cgl9CgogICRtb2QtPkF1ZGl0KCcnLCAkbW9kLT5HZXROYW1lKCksJGF1ZGl0X21zZyApOwoKICAvLyB0aGF0IHNob3VsZCBkbyB0aGUgdHJpY2sKICAvLyBub3cgbWF5YmUgd2UnbGwgc2VuZCBhbiBlbWFpbAogICR0b19hZGRyZXNzID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnc2VuZF91cGxvYWRfbm90aWZpY2F0aW9uc190bycpOwogIGlmKCAkdG9fYWRkcmVzcyAmJiAkdG9fYWRkcmVzcyAhPSAnJyApIHsKCQkvLyBmaWxsIG91dCB0aGUgdGVtcGxhdGUsIGFuZCBzZW5kIGFuIGVtYWlsCgkJJGNtc21haWxlciA9ICRtb2QtPkdldE1vZHVsZUluc3RhbmNlKCAnQ01TTWFpbGVyJyApOwoJCWlmKCAhJGNtc21haWxlciApIHsKCQkJLy8gd2UncmUgbm90IGdvbm5hIHJldHVybiBhbiBlcnJvciwgYnV0IHB1dAoJCQkvLyBhIG1lc3NhZ2UgaW50byB0aGUgYWRtaW4gbG9nCgkJCSRtb2QtPkF1ZGl0KCAwLCAkbW9kLT5HZXROYW1lKCksJ0NvdWxkIG5vdCBmaW5kIENNU01haWxlciBtb2R1bGUnKTsKCQl9CgkJZWxzZSB7CgkJCSRtb2QtPnNtYXJ0eS0+YXNzaWduKCduYW1lJywgJGRlc3RuYW1lICk7CgkJCSRtb2QtPnNtYXJ0eS0+YXNzaWduKCdzaXplJywgJHJlc3VsdFsxXVsnc2l6ZSddICk7CgkJCSRtb2QtPnNtYXJ0eS0+YXNzaWduKCdzdW1tYXJ5JywgJHBhcmFtc1snaW5wdXRfc3VtbWFyeSddICk7CgkJCSRtb2QtPnNtYXJ0eS0+YXNzaWduKCdkZXNjcmlwdGlvbicsICRkZXNjICk7CgkJCSRtb2QtPnNtYXJ0eS0+YXNzaWduKCdhdXRob3InLCAkcGFyYW1zWydpbnB1dF9hdXRob3InXSApOwoJCQkkbW9kLT5zbWFydHktPmFzc2lnbignaXBfYWRkcmVzcycsIGdldGVudiAoIlJFTU9URV9BRERSIikgKTsKCQkJJGJvZHkgPSAkbW9kLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YWJhc2UoJ3VwbG9hZF9lbWFpbHRlbXBsYXRlJyk7CgkJCSR0bXAgPSBleHBsb2RlKCcsJywkdG9fYWRkcmVzcyk7CgkJCWZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCSAgICAgICRjbXNtYWlsZXItPkFkZEFkZHJlc3MoICRvbmUgKTsKCSAgICB9CgkJCSRjbXNtYWlsZXItPlNldEJvZHkoICRib2R5ICk7CgkJCSRjbXNtYWlsZXItPklzSFRNTCh0cnVlKTsKCQkJJGNtc21haWxlci0+U2V0U3ViamVjdCgkbW9kLT5MYW5nKCd1cGxvYWRfbm90aWZpY2F0aW9uJykpOwoJCQkkY21zbWFpbGVyLT5TZW5kKCk7CgkJfQoJfQoKICAvLyB1cGRhdGUgc2VhcmNoIHdvcmRzCiAgJHNlYXJjaCA9IGNtc191dGlsczo6Z2V0X3NlYXJjaF9tb2R1bGUoKTsKCWlmKCAkc2VhcmNoICkgdXBsb2Fkc191dGlsczo6aW5kZXhfdXBsb2FkKCRuZXdpZCwkc2VhcmNoKTsKCiAgLy8gc2VuZCBhbiBldmVudAogICRwYXJtcyA9IGFycmF5KCk7CiAgJHBhcm1zWyd1cGxvYWRfaWQnXSA9ICRuZXdpZDsKICAkcGFybXNbJ2NhdGVnb3J5cGF0aCddID0gJGRpcjsKICAkcGFybXNbJ2NhdGVnb3J5J10gPSAkY2F0ZWdvcnlfbmFtZTsKICAkcGFybXNbJ25hbWUnXSA9ICRkZXN0bmFtZTsKICAkcGFybXNbJ3NpemUnXSA9ICRyZXN1bHRbMV1bJ3NpemUnXTsKICAkcGFybXNbJ3N1bW1hcnknXSA9ICRwYXJhbXNbJ2lucHV0X3N1bW1hcnknXTsKICAkcGFybXNbJ2Rlc2NyaXB0aW9uJ10gPSAkZGVzYzsKICAkcGFybXNbJ2F1dGhvciddID0gJHBhcmFtc1snaW5wdXRfYXV0aG9yJ107CiAgJHBhcm1zWydpcF9hZGRyZXNzJ10gPSBnZXRlbnYoIlJFTU9URV9BRERSIik7CiAgJG1vZC0+U2VuZEV2ZW50KCAiT25VcGxvYWQiLCAkcGFybXMgKTsKCiAgaWYoICRmaWxlaWQgPT0gJycgKSByZXR1cm4gYXJyYXkoIFRSVUUsICRuZXdpZCwgJGRlc3RuYW1lICk7CiAgcmV0dXJuIGFycmF5KCBUUlVFLCAkZmlsZWlkLCAkZGVzdG5hbWUgKTsKfQoKCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCglfaGFuZGxlVXBsb2FkKCAkZGVzdERpciwgZmllbGROYW1lLCAkbmFtZUNhbGxiYWMgKQoJTk9UIFBBUlQgT0YgVEhFIE1PRFVMRSBBUEkKCglUaGlzIG1ldGhvZCBoYW5kbGVzIHZhbGlkYXRpbmcgdGhlIHVwbG9hZCBwYXJhbWV0ZXJzLCBhbmQgY29weWluZwoJdGhlIGZpbGUgZnJvbSBpdCdzIHRlbXBvcmFyeSBsb2NhdGlvbiB0byBpdCdzIHBlcm1hbmVudCBsb2NhdGlvbi4KCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIF91cGxvYWRzX2hhbmRsZVVwbG9hZCAoJiRtb2QsICRkZXN0RGlyLAoJCQkJCQkJCQkJCQkJCQkJJGZpZWxkTmFtZSA9ICdfdXBsb2FkJywgJG5hbWVDYWxsYmFjayA9IGZhbHNlLAoJCQkJCQkJCQkJCQkJCQkJJGRlc3RuYW1lID0gJycsJGVuZm9yY2VleHRlbnNpb24gPSB0cnVlLAoJCQkJCQkJCQkJCQkJCQkJJHJlcGxhY2VfZXhpc3RpbmcgPSBmYWxzZSwKCQkJCQkJCQkJCQkJCQkJCSRmaWxlbmFtZVByZWZpeCkKewogIC8vbWFrZSBzdXJlIHNvbWV0aGluZyBpcyB0aGVyZQogIGlmICghaXNzZXQgKCRfRklMRVNbJGZpZWxkTmFtZV0pIHx8ICFpc3NldCAoJF9GSUxFUykKICAgIAl8fCAhaXNfYXJyYXkgKCRfRklMRVNbJGZpZWxkTmFtZV0pIHx8ICEkX0ZJTEVTWyRmaWVsZE5hbWVdWyduYW1lJ10pIHsKCQlyZXR1cm4gYXJyYXkgKGZhbHNlLCAkbW9kLT5MYW5nKCdlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnKSk7Cgl9CgogIC8vbm9ybWFsaXplIHRoZSBmaWxlIHZhcmlhYmxlCiAgJGZpbGUgPSAkX0ZJTEVTWyRmaWVsZE5hbWVdOwogIGlmICghaXNzZXQgKCRmaWxlWyd0eXBlJ10pKSAkZmlsZVsndHlwZSddID0gJyc7CiAgaWYgKCFpc3NldCAoJGZpbGVbJ3NpemUnXSkpICRmaWxlWydzaXplJ10gPSAnJzsKICBpZiAoIWlzc2V0ICgkZmlsZVsndG1wX25hbWUnXSkpICRmaWxlWyd0bXBfbmFtZSddID0gJyc7CiAgJGZpbGVbJ25hbWUnXSA9IHByZWdfcmVwbGFjZSgnL1teYS16QS1aMC05XC5cJFwlXCdcYFwtXEBce1x9XH5cIVwjXChcKVwmXF9cXl0vJywgJycsIHN0cl9yZXBsYWNlIChhcnJheSAoJyAnLCAnJTIwJyksIGFycmF5ICgnXycsICdfJyksICRmaWxlWyduYW1lJ10pKTsKCiAgLy8gdmFsaWRhdGUgdGhlIGZpbGVuYW1lCiAgaWYgKCEkbW9kLT5faXNWYWxpZEZpbGVuYW1lICgkZmlsZVsnbmFtZSddKSkgcmV0dXJuIGFycmF5IChmYWxzZSwgJG1vZC0+TGFuZyAoJ2Vycm9yX2ludmFsaWR1cGxvYWRmaWxlbmFtZScsJGZpbGVbJ25hbWUnXSkpOwoKICAvL3dhcyBpdCB0byBiaWc/CgkkZ0NtcyA9IGNtc21zKCk7CgkkbWF4RmlsZVNpemUgPSAkZ0Ntcy0+Y29uZmlnWydtYXhfdXBsb2FkX3NpemUnXTsKICBpZiAoJGZpbGVbJ3NpemUnXSA+ICRtYXhGaWxlU2l6ZSkgcmV0dXJuIGFycmF5IChmYWxzZSwgJG1vZC0+TGFuZyAoJ2Vycm9yX2ZpbGV0b29sYXJnZScpKTsKCiAgLy9ub3JtYWxpemUgZGVzdERpcgogIGlmIChzdHJsZW4gKCRkZXN0RGlyKSA+IDAgJiYgJGRlc3REaXJbc3RybGVuICgkZGVzdERpcikgLSAxXSAhPSAiLyIpICRkZXN0RGlyID0gJGRlc3REaXIuJy8nOwoKICAvLyBnZXQgdGhlIGRlc3RpbmF0aW9uIG5hbWUKICBpZiggJGRlc3RuYW1lID09ICcnICkgJGRlc3RuYW1lID0gJGZpbGVbJ25hbWUnXTsKCgkvLyBhbmQgb3B0aW9uYWxseSBhZGQgYSBwcmVmaXgKCSRkZXN0bmFtZSA9ICRmaWxlbmFtZVByZWZpeC4kZGVzdG5hbWU7CgogIC8vc2hvdWxkIHdlIGNoYW5nZSB0aGUgZmlsZW5hbWUgdmlhIGEgY2FsbGJhY2s/CiAgaWYgKCRuYW1lQ2FsbGJhY2spICRkZXN0bmFtZSA9IGNhbGxfdXNlcl9mdW5jX2FycmF5ICgkbmFtZUNhbGxiYWNrLCBhcnJheSAoJGZpbGUsICRkZXN0RGlyKSk7CgogIC8vIGFuZCBjbGVhbiBpdCB1cAogICRkZXN0bmFtZSA9CiAgICBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWjAtOVwuXCRcJVwnXGBcLVxAXHtcfVx+XCFcI1woXClcJlxfXF5dLycsICcnLAoJCSBzdHJfcmVwbGFjZSAoYXJyYXkgKCcgJywgJyUyMCcpLCBhcnJheSAoJ18nLCAnXycpLCAkZGVzdG5hbWUpKTsKCiAgaWYoICRyZXBsYWNlX2V4aXN0aW5nID09IGZhbHNlICkgewoJCWlmKCBmaWxlX2V4aXN0cyggJGRlc3REaXIuJGRlc3RuYW1lICkgJiYgJHJlcGxhY2VfZXhpc3RpbmcgPT0gZmFsc2UgKSB7CgkJCXJldHVybiBhcnJheSggZmFsc2UsICRtb2QtPkxhbmcoICdlcnJvcl9maWxlZXhpc3RzJywgJGRlc3REaXIuJGRlc3RuYW1lICkpOwoJCX0KCX0KICBlbHNlIHsKCQkvLyByZXBsYWNpbmcgYW4gZXhpc3RpbmcgZmlsZQoJCS8vIGRlbGV0ZSBpdCBmaXJzdCwgc28gdGhlIGNvcHkgd2lsbCBzdWNjZWVkLgoJCUB1bmxpbmsoJGRlc3REaXIuJGRlc3RuYW1lKTsKCX0KCiAgLy9hbmQgbm93IHRoZSBiaWcgbW9tZW50CiAgaWYgKCFAY29weSAoJGZpbGVbJ3RtcF9uYW1lJ10sICRkZXN0RGlyLiRkZXN0bmFtZSkpIHsKCQlyZXR1cm4gYXJyYXkgKGZhbHNlLCAkbW9kLT5MYW5nICgnZXJyb3JfY291bGRub3R3cml0ZScpLiAnOiZuYnNwOycuJGZpbGVbJ25hbWUnXS4iIC0+ICIuJGRlc3REaXIgLiAkZGVzdG5hbWUgLiAiICIuICRtb2QtPkxhbmcgKCdlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJykpOwoJfQogIGVsc2UgewoJCXJldHVybiBhcnJheSAodHJ1ZSwgYXJyYXkoJ25hbWUnID0+ICRkZXN0bmFtZSwgJ3NpemUnID0+ICRmaWxlWydzaXplJ10sCSdkaXInID0+ICRkZXN0RGlyICkpOwoJfQp9CgoKIwojIEVPRgojCj8+Cg==]]></data>
	</file>
	<file>
	  <filename>/help.inc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+CjxwPkl0IGlzIGEgbW9kdWxlIGZvciBhbGxvd2luZyBwZW9wbGUgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmaWxlcyB0byBhbmQgZnJvbSB5b3VyIHNpdGUuICBJdCBrZWVwcyB0cmFjayBvZiB3aG8gdXBsb2FkZWQgYSBmaWxlLCBhbmQgd2hvIGhhcyBkb3dubG9hZGVkIGl0LiAgQXMgd2VsbCwgeW91IGNhbiBzb3J0IGZpbGVzIGludG8gY2F0ZWdvcmllcywgYW5kIG1hbmFnZSB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVwbG9hZGVkIGxpa2UgZXZlcnkgYWRtaW5pc3RyYXRvciB3b3VsZCBkbzwvcD4KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+CjxwPlRvIHVzZSB0aGlzIG1vZHVsZSwgdG8gYWxsb3cgdXNlcnMgdG8gdXBsb2FkIGZpbGVzIHRvIHlvdXIgc2l0ZSwgeW91IHNob3VsZCBpbnN0YWxsIHRoZSBtb2R1bGUsIGFuZCB0aGVuIGNyZWF0ZSBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIChhLmsuYSkgZGlyZWN0b3JpZXMgZm9yIHRoZSB1cGxvYWRlZCBmaWxlcyB0byBnbyBpbnRvLiBUaGVuIGFkZCBhIHRhZyBpbnRvIGEgcGFnZSBvciB0ZW1wbGF0ZSBzb21ld2hlcmUgbGlrZSB7Y21zX21vZHVsZSBtb2R1bGU9IlVwbG9hZHMiIGNhdGVnb3J5PSJzb21lY2F0ZWdvcnkiIG1vZGU9InNvbWVtb2RlIn0uICBXaGVyZSBtb2RlIG1hdGNoZXMgb25lIG9mIHRoZSBtb2RlcyBsaXN0ZWQgYmVsb3cuICBUaGUgb3V0cHV0IHdpbGwgZGlmZmVyIGRlcGVuZGluZyB1cG9uIHdoaWNoIG1vZGUgeW91IHNlbGVjdC48L3A+CjxwPlRoaXMgbW9kdWxlIGNhbiB1c2UgdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIChvcHRpb25hbCkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIHRvIHBhcnRseSBmaWxsIGluIHRoZSBmb3JtIHdoZW4gdXBsb2FkaW5nIGZpbGVzOzwvcD4KPGgzPlBlcm1pc3Npb25zPC9oMz4KPHVsPgo8bGk+PGVtPk1hbmFnZSBVcGxvYWRzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgdG8gbWFuYWdlIGNhdGVnb3JpZXMsIGFuZCB0aGUgZmlsZXMgd2l0aGluIHRoZW0uPC9saT4KPGxpPjxlbT5Nb2RpZnkgVGVtcGxhdGVzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgZWRpdCBhbnkgb2YgdGhlIHRlbXBsYXRlcy48L2xpPgo8bGk+PGVtPk1vZGlmeSBTaXRlIFByZWZlcmVuY2VzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgYW55IG9mIHRoZSBmaWxlIHNldHRpbmdzLjwvbGk+CjwvdWw+CjxoMz5DYXRlZ29yeSBCcm93c2luZzwvaDM+CjxwPlBsYWNpbmcgYSB0YWcgbGlrZSB7Y21zX21vZHVsZSBtb2R1bGU9IlVwbG9hZHMiIGFjdGlvbj0iY2F0ZWdvcnlzdW1tYXJ5IiB0ZW1wbGF0ZT0ic3VtbWFyeXRlbXBsYXRlIiBzb3J0b3JkZXI9Im5hbWVfYXNjIiBsaXN0aW5ndGVtcGxhdGU9Imxpc3R0ZW1wbGF0ZSIgbGlzdGluZ3NvcnRvcmRlcj0ibGlzdHNvcnRvcmRlciJ9CmFsbG93cyB5b3UgdG8gZGlzcGxheSBhbiBpbnRlcmFjdGl2ZSBjYXRlZ29yeSBicm93c2VyLiBzb3J0b3JkZXIgY2FuIGJlOiBuYW1lX2FzYywgbmFtZV9kZXNjLCBzdW1tX2FzYywgc3VtbV9kZXNjLCBvciByYW5kb20uCmxpc3Rpbmd0ZW1wbGF0ZSBhbmQgbGlzdGluZ3NvcnRvcmRlciBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgc29ydG9yZGVyIHBhcmFtZXRlcnMgZm9yCnRoZSAic3VtbWFyeSIgbW9kZS48L3A+CjxoMz5BdXRvbWF0aWMgU2Nhbm5pbmc8L2gzPgo8cD5UaGlzIG1vZHVsZSB3aWxsIGF1dG9tYXRpY2FsbHkgc2NhbiBmb3IgbmV3IGZpbGVzIGluIGEgZGlyZWN0b3J5IHdoZW4gYSBzdW1tYXJ5IG1vZGUgdGFnIGZvciBhIHNwZWNpZmljIGNhdGVnb3J5IGlzIHVzZWQgb24gYSBDTVNNUyBwYWdlLiAgaS5lOiA8Y29kZT57VXBsb2FkcyBjYXRlZ29yeT1jYXRlZ29yeV9uYW1lfTwvY29kZT4gd2lsbCBwZXJmb3JtIGEgc2Nhbi4gIGJ1dCA8Y29kZT57VXBsb2FkcyBjYXRlZ29yeT1hbGx9PC9jb2RlPiB3aWxsIG5vdC48L3A+CjxoMz5UaHVtYm5haWwgR2VuZXJhdGlvbiAtIERlcHJlY2F0ZWQ8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBmb3IgY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gIFRoZXJlIGFyZSBwcmVmZXJlbmNlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdGFiIG9mIHRoZSBVcGxvYWRzIG1vZHVsZSBhZG1pbmlzdHJhdGlvbiBwYW5lbCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBmaWxlcyB0aGF0IGFsbG93IGF1dG9tYXRpYyB0aHVtYm5haWwgZ2VuZXJhdGlvbiwgYW5kIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgdGh1bWJuYWlsIChwcmVzZXJ2aW5nIGFzcGVjdCByYXRpbykuICAgVGh1bWJuYWlscyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgdXBvbiB1cGxvYWQsIGFuZCBjYW4gYmUgZ2VuZXJhdGVkIG1hbnVhbGx5IGJ5IHNlbGVjdGluZyB0aGUgJnF1b3Q7R2VuZXJhdGUgVGh1bWJuYWlscyZxdW90OyBvcHRpb24gaW4gdGhlIGVkaXQgY2F0ZWdvcnkgZm9ybXMuLi4gYnV0IGFyZSBub3QgZ2VuZXJhdGVkIHdoZW4gbmV3IGZpbGVzIGFyZSBkZXRlY3RlZCBieSBhdXRvbWF0aWMgc2Nhbm5pbmcuPC9wPgo8aDM+WW91IFNlbmQgSXQ8L2gzPgo8cD5JdCBpcyBwb3NzaWJsZSB0byBlbmFibGUgJnF1b3Q7eW91c2VuZGl0JnF1b3Q7IGxpa2UgZnVuY3Rpb25hbGl0eSB0byBhbGxvdyBhdXRvbWF0aWNhbGx5IGVtYWlsaW5nIHNlbGVjdGVkIHBlb3BsZSB3aXRoIGEgbGluayB0byBhIG5ld2x5IHVwbG9hZGVkIGZpbGUuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBhIHRhZyBsaWtlOiA8Y29kZT57VXBsb2FkcyBhY3Rpb249eW91c2VuZGl0IGNhdGVnb3J5PWNhdGVnb3J5bmFtZX08L2NvZGU+LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIGFsbG93aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS48L3A+CjxoMz5UaW1lIExpbWl0ZWQgQWNjZXNzPC9oMz4KPHA+VGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIG5vdGlvbiBvZiB1bmlxdWUga2V5cyB0byBhbGxvdyB0aW1lIGxpbWl0ZWQgYWNjZXNzIHRvIGNlcnRhaW4gZmlsZXMuICBUaGUgZnVuY3Rpb25hbGl0eSBhbGxvd3Mgc3BlY2lmeWluZyBhIHRpbWUgbGltaXQgKGluIGhvdXJzKSBmb3Igd2hpY2ggdGhlIGtleSBpcyB2YWxpZCwgYW5kIGEgbWF4aW11bSBudW1iZXIgb2YgZG93bmxvYWRzIG9yIGRvd25sb2FkIGF0ZW1wdHMuICBBbiBlbWFpbCBpcyBzZW50IHRvIHRoZSBkZXNpcmVkIHVzZXJzIHdpdGggdGhlIHVuaXF1ZSBVUkwuICBBZnRlciB0aGUgdGltZSBsaW1pdCwgb3IgdGhlIG51bWJlciBvZiBkb3dubG9hZHMgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIFVSTCBpcyBubyBsb25nZXIgdmFsaWQuICBUaGVzZSB1bmlxdWUgdGltZSBsaW1pdGVkIGtleXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSBhZnRlciBleHBpcnkuPC9wPgo8aDM+UmVzdHJpY2luZyBBY2Nlc3Mgd2l0aCBGRVU8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGludGVncmF0aW5nIHdpdGggdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlIHRvIHJlc3RyaWN0IHRoZSB2aXNpYmlsaXR5IG9mIGNhdGVnb3JpZXMgKGRpcmVjdG9yaWVzKSB0byBjZXJ0YWluIGFsbG93ZWQgRkVVIGdyb3Vwcy4gIFlvdXIgdXNlcnMgd291bGQgaGF2ZSB0byBiZSBsb2dnZWQgaW4gdG8geW91ciB3ZWJzaXRlICh1c2luZyBGRVUpIGFuZCBhbHNvIGEgbWVtYmVyIG9mIG9uZSBvZiB0aGUgYWxsb3dlZCBncm91cHMgdG8gb2J0YWluIGFjY2Vzcy4gIFRoaXMgaXMgYWNjb21wbGlzaGVkIGluIHRoZSBjYXRlZ29yeSBlZGl0IGZvcm0uICBZb3UgY2FuIHNlbGVjdCBhIGxpc3Qgb2YgRkVVIGdyb3VwcyB3aGljaCBhcmUgYWxsb3dlZCB0byB2aWV3IGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuPC9wPgo8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgYWxzbyBhcHBsaWVzIHRvIHRoZSAmcXVvdFRpbWUgTGltaXRlZCBBY2Nlc3MmcXVvdCBmdW5jdGlvbmFsaXR5LiAgQWxsb3dpbmcgeW91IHRvIHNwZWNpZnkgdGhhdCBjZXJ0YWluIHBlb3BsZSwgd2hvIGFsc28gaGF2ZSB0byBiZSBsb2dnZWQgaW4gdG8geW91ciB3ZWJzaXRlIGNhbiBoYXZlIGFjY2VzcyB0byBjZXJ0YWluIGZpbGVzIGZvciBhIGxpbWl0ZWQgYW1vdW50IG9mIHRpbWUuPC9wPgo8aDM+RW1haWxpbmc8L2gzPgo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW4gZW1haWwgd2hlbmV2ZXIgYSBmaWxlIGlzIHVwbG9hZGVkLCBzZWUgdGhlIHByZWZlcmVuY2VzIHRhYi4gIEhvd2V2ZXIsIHRvIGRvIHRoaXMgdGhlIDxiPkNNU01haWxlcjwvYj4gcGEKY2thZ2UgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuICBUaGlzIGlzIGFuIDxlbT5vcHRpb25hbDwvZW0+IHN0ZXAsIGFuZCBpZiB0aGUgQ01TTWFpbGVyIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLCBub3RoaW5nIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCBvbmx5IGEgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byB0aGUgYWRtaW4gbG9nPC9wPgo8aDM+UmVwb3J0aW5nPC9oMz4KPHA+VGhpcyBtb2R1bGUgcHJvdmlkZXMgYSBmbGV4aWJsZSByZXBvcnRpbmcgbWVjaGFuaXNtIGZvciB2aWV3aW5nIHN0YXRpc3RjcyBhYm91dCBob3cgYSBmaWxlIHNoYXJlZCB3aXRoIHRoZSBVcGxvYWRzIG1vZHVsZSB3YXMgZG93bmxvYWRlZC4gIEl0IGluY2x1ZGVzIHRoZSBhYmlsaXR5IHRvIGN1c3RvbWl6ZSByZXBvcnQgdGVtcGxhdGVzLCBvdXRwdXQgZmllbGRzIGFuZCBmaWx0ZXJpbmcuICBGaWx0ZXJpbmcgaXMgcGVybWl0dGVkIGJ5IFVwbG9hZHMgY2F0ZWdvcnksIGZpbGVuYW1lLCBkb3dubG9hZCB1c2VyIG5hbWUsIG9yIHVzZXJuYW1lIHBhdHRlcm4sIGFuZCBieSBkYXRlLiAgSFRNTCByZXBvcnRzIGNhbiBiZSBnZW5lcmF0ZWQgaW4gdGhlIGJyb3dzZXIgd2luZG93LCBvciBlbWFpbGxlZC4gIEFkZGl0aW9uYWxseSB0aGUgcmVwb3J0aW5nIGZ1bmN0aW9uYWxpdHkgc3VwcG9ydHMgQ1NWIGV4cG9ydC48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gSXQgaXMgaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgYWJpbGl0eSB0byBzZWxlY3Qgb3V0cHV0IGZpZWxkcyBpbiB0aGUgcmVwb3J0cyBtYXkgZ2VuZXJhdGUgc29tZSBjb25mdXNpbmcgb3V0cHV0IGRlcGVuZGluZyB1cG9uIHRoZSBmaWVsZHMgY2hvc2VuIGFuZCB0aGUgcmVwb3J0IHR5cGUuICBpLmU6IGluIGEgc3VtbWFyeSByZXBvcnQgaXQgZG9lcyBub3QgbWFrZSBzZW5zZSB0byBkaXNwbGF5IGZpZWxkcyBsaWtlIGRvd25sb2FkIHVzZXJuYW1lLiAgV2hlcmVhcyBpbiBhIGRldGFpbCByZXBvcnQgaXQgZG9lcyBub3QgdXN1YWxseSBtYWtlIHNlbnNlIHRvIGRpc3BsYXkgdGhlIG51bWJlciBvZiBkb3dubG9hZHMuICBVc2UgY2F1dGlvbiB3aGVuIGdlbmVyYXRpbmcgcmVwb3J0cy48L3A+Cjx1bD4KICA8bGk+RG93bmxvYWRzIGJ5IFVzZXIKICAgIDx1bD4KICAgICAgPGxpPlN1bW1hcnkKICAgICAgICA8cD5UaGlzIHJlcG9ydCBnZW5lcmF0ZXMgb25lIGxpbmUgcGVyIG1hdGNoaW5nIHVzZXIgKHVzZXIgd2hvIGRvd25sb2FkZWQgc29tZXRoaW5nKS4gIEl0IGlzIGdyZWF0IGZvciBkaXNwbGF5aW5nIGhvdyBtdWNoIGEgdXNlciBkb3dubG9hZGVkLCBhbmQgdGhlIGxhc3QgdGltZSB0aGV5IGRvd25sb2FkZWQgYW55dGhpbmcuPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+RGV0YWlsCiAgICAgICAgPHA+VGhpcyByZXBvcnQgZ2VuZXJhdGVzIG9uZSBsaW5lIHBlciBkb3dubG9hZC4gIEl0IGRldGFpbHMgd2hhdCB0aGUgc2VsZWN0ZWQgdXNlcnMgZG93bmxvYWRlZCwgYW5kIHdoZW4uPC9wPgogICAgICA8L2xpPgogICAgPC91bD4KICA8L2xpPgogIDxsaT5Eb3dubG9hZHMgYnkgRmlsZQogICAgPHVsPgogICAgICA8bGk+U3VtbWFyeQogICAgICAgIDxwPlRoaXMgcmVwb3J0IGdlbmVyYXRlcyBvbmUgbGluZSBwZXIgbWF0Y2hpbmcgZmlsZS4gIEl0IGdyb3VwcyBldmVyeXRoaW5nIGJ5IHRoZSBmaWxlLiAgSXQgaXMgdXNlZCBmb3IgZGlzcGxheWluZyBob3cgbWFueSB0aW1lcyBhIGZpbGUgd2FzIGRvd25sb2FkZWQuPC9wPgogICAgICA8L2xpPgogICAgICA8bGk+RGV0YWlsCiAgICAgICAgPHA+VGhpcyByZXBvcnQgZ2VuZXJhdGVzIG9uZSBsaW5lIHBlciBkb3dubG9hZC4gIEl0IGRldGFpbHMgd2hvIGRvd25sb2FkZWQgdGhlIHNlbGVjdGVkIGZpbGVzLCBhbmQgd2hlbi48L3A+CiAgICAgIDwvbGk+CiAgICA8L3VsPgogIDwvbGk+CjwvdWw+CjxoMz5GaWxlIEluZGV4aW5nOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHN1cHBvcnRzIGluZGV4aW5nIHRoZSB3b3JkcyBvdXQgb2YgdGV4dCBhbmQgUERGIGRvY3VtZW50cyBhbmQgYWRkaW5nIHRoZSB3b3JkcyB0byB0aGUgc2VhcmNoIGluZGV4IG9mIHRoZSBjdXJyZW50IHNlYXJjaCBtb2R1bGUuICBJbmRleGluZyB0ZXh0IGFuZCBQREYgZmlsZXMgY2FuIGJlIGEgdGltZSBjb25zdW1pbmcgYW5kIG1lbW9yeSBpbnRlbnNpdmUgb3BlcmF0aW4gKHBhcnRpY3VsYXJseSBmb3IgbGFyZ2UgZmlsZXMpIHNvIHNvbWUgc3BlY2lhbCBiZWhhdmlvciBoYXMgYmVlbiBhZGRlZCB0byBob3BlZnVsbHkgYWNjb21vZGF0ZSBtb3N0IHNpdGVzPC9wPgo8dWw+CiAgPGxpPkRvY3VtZW50cyB3aWxsIG5vdCBiZSBhZGRlZCB0byB0aGUgc2VhcmNoIGluZGV4IHZpYSB0aGUgYXV0b21hdGljIHNjYW5uaW5nIHByb2Nlc3MuICBUaGVyZWZvcmUgdXBsb2FkaW5nIGZpbGVzIHZpYSBGVFAgdG8gdGhlIGNhdGVnb3J5IGRpcmVjdG9yeSB3aWxsIGFsbG93IHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQgYW5kIHNlbnQgYnkgY3VzdG9tZXJzLCBidXQgdGhlIGZpbGUgd2lsbCBub3QgYmUgaW5kZXhlZCBieSB0aGUgc2VhcmNoIGVuZ2luZS48L2xpPgogIDxsaT5UaGUgaW5kZXhpbmcgcHJvY2VzcyBmb3IgVGV4dCBmaWxlcyBpcyBsaW1pdGVkIHRvIHRoZSBmaXJzdCAxMCwwMDAgd29yZHMsIDUwMDAgbGluZXMsIG9yIDE1IHNlY29uZHMgb2YgcHJvY2Vzc2luZyAod2hpY2hldmVyIG9jY3VycyBmaXJzdCkuPC9saT4KICA8bGk+VGhlIGluZGV4aW5nIHByb2Nlc3MgZm9yIFBERiBmaWxlcyBpcyBsaW1pdGVkIHRvIHRoZSBmaXJzdCAxMCwwMDAgd29yZHMsIDEwMCBwYWdlcywgb3IgMTUgc2Vjb25kcyBvZiBwcm9jZXNzaW5nICh3aGljaGV2ZXIgb2NjdXJzIGZpcnN0KS48L2xpPgogIDxsaT5FZGl0aW5nIHRoZSB1cGxvYWQgd2lsbCBhbGxvdyB0aGUgdGV4dCBhbmQgcGRmIGZpbGVzIHRvIGJlIGluZGV4ZWQuPC9saT4KICA8bGk+VGhlIHNjYW4gYnV0dG9uIGluIHRoZSBhZGQvZWRpdCBjYXRlZ29yeSBwYW5lbHMgd2lsbCBhbGxvdyB0aGUgdGV4dCBhbmQgUERGIGZpbGVzIHRvIGJlIGluZGV4ZWQuICBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgY29uc2lkZXJhYmxlIGFtb3VudCBvZiB0aW1lIGFuZCBzZXJ2ZXIgcmVzb3VyY2VzLjwvbGk+CiAgPGxpPlRoaXMgbW9kdWxlIGltcGxlbWVudHMgaW5kZXhpbmcgb2YgdGV4dCBhbmQgcGRmIGZpbGVzIHdoZW4gcmUtaW5kZXhpbmcgYWxsIGNvbnRlbnQuICBUaGlzIG9wZXJhdGlvbiBjb3VsZCB0YWtlIGEgZ3JlYXQgZGVhbCBvZiB0aW1lIChtaW51dGVzIG9yIGhvdXJzKSBhbmQgc2VydmVyIHJlc291cmNlcyBkZXBlbmRpbmcgdXBvbiB0aGUgYW1vdW50IG9mIGZpbGVzIHN0b3JlZCB3aXRoaW4gdGhlIFVwbG9hZHMgbW9kdWxlLCB0aGVpciBzaXplLCBhbmQgdGhlIHZhcmlvdXMgb3B0aW9ucy48L2xpPgo8L3VsPgo8cD5UaGUgd29yZCwgbGluZSwgcGFnZSwgYW5kIHRpbWUgbGltaXRzIGRlc2NyaWJlZCBhYm92ZSBzaG91bGQgYmUgZW5vdWdoIHRvCjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBmdW5jdGlvbmFsaXR5IGV4dHJhY3RzIHRoZSBjb250ZW50cyBvZiB0aGUgUERGIGRvY3VtZW50cywgc3BsaXRzIHRoZW0gaW50byAnd29yZHMnIGFuZCBhcHBsaWVzIHNvbWUgY2xlYW5pbmcgdG8gdGhlIHdvcmRzIGJlZm9yZSBwcm92aWRpbmcgdGhlbSB0byB0aGUgc2VhcmNoIG1vZHVsZS4gIEZ1bGwgdGV4dCBpbmRleGluZyBpcyBub3QgcHJvdmlkZWQsIHRoZXJlZm9yZSBwaHJhc2Ugc2VhcmNoaW5nIGlzIG5vdCBwb3NzaWJsZS4gICBBZGRpdGlvbmFsbHksIHRoZSBTZWFyY2ggbW9kdWxlIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgbGltaXRpbmcgYW5kIGNsZWFuaW5nIHRvIHRoZSB3b3JkcyBleHRyYWN0ZWQgZnJvbSBmaWxlcy48L3A+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhpcyBmdW5jdGlvbmFsaXR5IGRvZXMgbm90IHBlcmZvcm0gT0NSIHRoZXJlZm9yZSB0ZXh0IGVtYmVkZGVkIGluc2lkZSBpbWFnZXMgd2hpY2ggYXJlIGVtYmVkZGVkIGluc2lkZSBQREYgZG9jdW1lbnRzIHdpbGwgbm90IGJlIGluZGV4ZWQuPC9wPgoKPGgzPlNtYXJ0eSBQbHVnaW5zOjwvaDM+CjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgYWNjZXNzb3J5IHNtYXJ0eSBwbHVnaW5zIHRoYXQgYXJlIHVzZWZ1bCBmb3IgdmFyaW91cyBwdXJwb3NlcyB3aGVuIHdvcmtpbmcgd2l0aCBmaWxlcy48L3A+CjxoMz5Db250ZW50IEJsb2NrcyA8ZW0+KENNU01TIDEuNysgT25seSk8L2VtPjwvaDM+Cjx1bD4KICA8bGk+PHN0cm9uZz57dXBsb2Fkc19jcmVhdGVfdGxfZmlsZX08L3N0cm9uZz4KICAgIDxwPkNvcHkgYW4gZXhpc3Rpbmcgc2VydmVyIGZpbGUgaW50byB0aGUgdXBsb2FkcyBtb2R1bGUgYW5kIGdlbmVyYXRlIGEgdGltZSBsaW1pdGVkIFVSTCBmb3IgaXQuIFRoaXMgcGx1Z2luIHdpbGwgYWxzbyB3YXRlcm1hcmssIGFuZCB0aHVtYm5haWwgaW1hZ2UgZmlsZXMgYXMgc3BlY2lmaWVkIGluIHRoZSBwcmVmZXJlbmNlcyAoZGVwcmVjYXRlZCkuPC9wPgogICAgPHA+UGFyYW1ldGVyczo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT48c3Ryb25nPnNyYzwvc3Ryb25nPiAtIHN0cmluZyAtIHJlcXVpcmVkIC0gVGhlIGFic29sdXRlIHNlcnZlciBmaWxlIHNwZWNpZmljYXRpb24gdG8gdGhlIHNvdXJjZSBmaWxlLjwvbGk+CiAgICAgIDxsaT48c3Ryb25nPmNhdGVnb3J5PC9zdHJvbmc+IC0gbWl4ZWQgLSByZXF1aXJlZCAtIFRoZSBjYXRlZ29yeSBuYW1lIChzdHJpbmcpIG9yIGlkIChpbnRlZ2VyKSB0byB0aGUgZGVzdGluYXRpb24gVXBsb2FkcyBjYXRlZ29yeS48L2xpPgogICAgICA8bGk+cHJlZml4IC0gYm9vbGVhbiAtIG9wdGlvbnNsIC0gSW5kaWNhdGVzIHdldGhlciBmaWxlcyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBhIHN0cmluZyB0aGF0IGRlcGVuZHMgb24gdGhlIHNlcnZlciB0aW1lIChkZWZhdWx0IGlzIEZBTFNFKTwvbGk+CiAgICAgIDxsaT5lbWFpbCAtIHN0cmluZyAtIG9wdGlvbmFsIC0gVGllIHRoZSBnZW5lcmF0ZWQgdXJsIHRvIHRoZSBzdXBwbGllZCBlbWFpbCBhZGRyZXNzICh3b3JrIGluIHByb2dyZXNzKTwvbGk+CiAgICAgIDxsaT5ob3VycyAtIGludGVnZXIgLSBvcHRpb25hbCAtIFRoZSBudW1iZXIgb2YgaG91cnMgdGhpcyBVUkwgd2lsbCBiZSB2YWxpZCBmb3IsIGlmIG5vdCBzcGVjaWZpZWQgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC48L2xpPgogICAgICA8bGk+ZG93bmxvYWRzIC0gaW50ZWdlciAtIG9wdGlvbmFsIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkIHVzaW5nIHRoaXMgdXJsLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC48L2xpPgogICAgICA8bGk+YXNzaWduIC0gc3RyaW5nIC0gb3B0aW9uYWwgLSBBIHNtYXJ0eSB2YXJpYWJsZSBuYW1lIHRvIGFzc2lnbiB0aGUgb3V0cHV0IHRvLjwvbGk+CiAgICA8L3VsPgogICAgPHA+RXhhbXBsZTo8YnIvPgogICAgPHByZT57dXBsb2Fkc19jcmVhdGVfdGxfZmlsZSBzcmM9JnF1b3Q7L3RoZS9jb21wbGV0ZS9wYXRoL3RvL3RoZS9maWxlLmpwZyZxdW90OyBwcmVmaXg9dHJ1ZSBkb3dubG9hZHM9NSBob3Vycz03MiBjYXRlZ29yeT0mcXVvdDtzb21lIGNhdGVnb3J5JnF1b3Q7IGFzc2lnbj0mcXVvdDt0aGVfdXJsJnF1b3Q7fTwvcHJlPgogICAgPC9wPgogIDwvbGk+CjwvdWw+CjxwPkZvciBDTVNNUyAxLjcgdGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBjb250ZW50IGVkaXRvciBhbmQgZXhwb3J0aW5nIGEgY29udGVudCBibG9jayB0aGF0IGFsbG93cyBzZWxlY3RpbmcgYW4gdXBsb2FkcyBjYXRlZ29yeSB3aXRoaW4gdGhlIGVkaXQgY29udGVudCBwYWdlLCBmb3IgbGF0ZXIgdXNlIHdpdGhpbiB0aGUgdGVtcGxhdGUuPC9wPgo8cD5pLmU6IHBsYWNpbmcgdGhlIGZvbGxvd2luZyB0YWcgd2l0aGluIGEgcGFnZSB0ZW1wbGF0ZSA8Y29kZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYmxvY2s9JnF1b3Q7dXBsb2Fkc19jYXRlZ29yeSZxdW90OyB0eXBlPSZxdW90O2NhdGVnb3J5c2VsZWN0JnF1b3Q7fTwvY29kZT4sIHdpbGwgYWRkIGEgZHJvcGRvd24gYm94IGluIHRoZSBlZGl0IGNvbnRlbnQgdmlldyBvZiBhbnkgcGFnZSB1dGlsaXppbmcgdGhhdCBwYWdlIHRlbXBsYXRlLjwvcD4KPHA+VGhpcyBjb250ZW50IGJsb2NrIGFsc28gYWNjZXB0cyBzb21lIG9wdGlvbmFsIHBhcmFtZXRlcnM6PC9wPgo8dWw+CiAgPGxpPjx1PnNlbGVjdG9uZTwvdT4KICAgIDxwPlRoaXMgcGFyYW1ldGVyIGluc2VydHMgYSAmcXVvdDtTZWxlY3QgT25lJnF1b3Q7IGl0ZW0gaW50byB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzLCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gc2VsZWN0IGEgdmFsaWQgY2F0ZWdvcnkgd2hlbiB0aGUgY29udGVudCBwYWdlIGlzIHNhdmVkLjwvcD4KICA8L2xpPgogIDxsaT48dT5hbGxvd2FsbDwvdT4KICAgIDxwPlRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgY29udGVudCBlZGl0b3IgdG8gc2VsZWN0ICZxdW90O0FsbCZxdW90OyBhcyBhIGNhdGVnb3J5IGZvciB0aGUgdXBsb2FkcyBkaXNwbGF5LjwvcD4KICA8L2xpPgo8L3VsPgo8aDQ+SG93IHdvdWxkIEkgdXNlIGl0PzwvaDQ+CjxwPkhlcmUgaXMgc29tZSBleGFtcGxlIGNvZGU6PC9wPgo8cHJlPgp7Y29udGVudF9tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYmxvY2s9JnF1b3Q7Y2F0ZWdvcnlzZWxlY3QmcXVvdDsgbGFiZWw9JnF1b3Q7U2VsZWN0IGFuIHVwbG9hZHMgY2F0ZWdvcnkmcXVvdDsgc2VsZWN0b25lPTEgYXNzaWduPSZxdW90O3RtcCZxdW90O30Ke1VwbG9hZHMgY2F0ZWdvcnk9JHRtcH0KPC9wcmU+CjxoMz5EZXByZWNhdGVkOjwvaDM+CjxwPjxzdHJvbmc+Tm90ZTo8L3N0cm9uZz4gVGhlIHRodW1ibmFpbCBhbmQgd2F0ZXJtYXJrIGNhcGFiaWxpdGllcyB0aGF0IGV4aXN0IGluIHRoaXMgbW9kdWxlIGFyZSBkZXByZWNhdGVkLCBhbmQgd2lsbCBiZSByZW1vdmVkIG92ZXIgdGltZS4gIFRoZSBDR1NtYXJ0SW1hZ2UgbW9kdWxlIHByb3ZpZGVzIGZvciBiZXR0ZXIgb24gZGVtYW5kLCBpbWFnZSBtYW5pcHVsYXRpb24sIGNhY2hpbmcsIGFuZCBlbWJlZGRpbmcuPC9wPgo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4KPHA+PGI+Tm90ZTo8L2I+IFRoaXMgbW9kdWxlIGRvZXMgbm90IGJ5cGFzcyBvciBnZXQgcGFzdCBhbnkgZmlsZSBzaXplIGxpbWl0YXRpb25zIGluIHBocC4gIEl0IHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlbS4gIFRoZXJlZm9yZSB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHlvdXIgcGhwLmluaSBmaWxlLCB5b3VyIENNU01TIGNvbmZpZy5waHAgZmlsZSBhbmQvb3IgeW91ciBodHRwZC5jb25mIGZpbGUocykgdG8gYWxsb3cgeW91IHRvIHVwbG9hZCBmaWxlcyBhcyBsYXJnZSBhcyB3aGF0IHlvdSBoYXZlIHNldCBpbiB0aGUgdXBsb2FkcyBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPgo8aDM+QXBhY2hlIE5vdGVzPC9oMz4KPHA+SW4gb3JkZXIgdG8gYWxsb3cgbGFyZ2UgZmlsZSB1cGxvYWRzLCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBpbiB5b3VyIHBocC5pbmkgIEluIGFkZGl0aW9uLCB0aGUgTGltaXRSZXF1ZXN0Qm9keSBwYXJhbWV0ZXIgaW4geW91ciBhcGFjaGUgY29uZmlndXJhdGlvbiwgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyPC9wPgo8cD5Ob3RlOiAgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIGtpbG9ieXRlcywgb3IgbWVnYWJ5dGVzLCBob3dldmVyIHRoZSBMaW1pdFJlcXVldEJvZHkgcGFyYW1ldGVyIGlzIG9ubHkgc3BlY2lmaWVkIGluIGJ5dGVzPC9wPgo8cD48c3Ryb25nIHN0eWxlPSJjb2xvcjogcmVkOyI+V2FybmluZzwvc3Ryb25nPiAtIFRoZSBwcm9wZXIgYmVoYXZpb3VyIG9mIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gbnVtZXJvdXMgcGhwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgVGhlc2UgaW5jbHVkZSA8ZW0+KGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pPC9lbT4sIHBocCdzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4KPHA+PHN0cm9uZyBzdHlsZT0iY29sb3I6IHJlZDsiPldhcm5pbmc8L3N0cm9uZz4gLSBVc2luZyB0aGlzIG1vZHVsZSB0byBhbGxvdyBzaXRlIHZpc2l0b3JzIHRvIHNlbmQgZmlsZXMgKGVpdGhlciB1c2luZyB0aGUgc3RhbmRhcmQgbWVjaGFuaXNtIG9yIHRoZSB5b3VzZW5kaXQgbWVjaGFuaXNtKSBtYXkgbm90IHdvcmsgd2l0aCBvdXRwdXQgY29tcHJlc3Npb24gZW5hYmxlZC4gIFBsZWFzZSBlbnN1cmUgdGhhdCBvdXRwdXRfY29tcHJlc3Npb24gaXMgc2V0IHRvIGZhbHNlIGluIHRoZSBjb25maWcucGhwLjwvcD4KCjxoMz5TdXBwb3J0PC9oMz4KPHA+VGhlIG1vZHVsZSBhdXRob3IgaXMgaW4gbm8gd2F5IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1cHBvcnQgZm9yIHRoaXMgY29kZSBpbiBhbnkgZmFzaGlvbi4gIEhvd2V2ZXIsIHRoZXJlIGFyZSBhIG51bWJlciBvZiByZXNvdXJjZXMgYXZhaWxhYmxlIHRvIGhlbHAgeW91IHdpdGggaXQ6PC9wPgo8dWw+CjxsaT5BIGJ1ZyB0cmFja2luZyBhbmQgZmVhdHVyZSByZXF1ZXN0IHN5c3RlbSBoYXMgYmVlbiBjcmVhdGVkIGZvciB0aGlzIG1vZHVsZSA8YSBocmVmPSJodHRwOi8vZGV2LmNtc21hZGVzaW1wbGUub3JnL3Byb2plY3RzL3VwbG9hZHMiPmhlcmU8L2E+LiAgUGxlYXNlIGJlIHZlcmJvc2UgYW5kIGRlc2NyaXB0aXZlIHdoZW4gc3VibWl0dGluZyBidWcgcmVwb3J0cyBhbmQgZmVhdHVyZSByZXF1ZXN0cywgYW5kIGZvciBidWcgcmVwb3J0cyBlbnN1cmUgdGhhdCB5b3UgaGF2ZSBwcm92aWRlZCBzdWZmaWNpZW50IGluZm9ybWF0aW9uIHRvIHJlbGlhYmx5IHJlcHJvZHVjZSB0aGUgaXNzdWUuPC9saT4KPGxpPkFkZGl0aW9uYWwgZGlzY3Vzc2lvbiBvZiB0aGlzIG1vZHVsZSBtYXkgYWxzbyBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaHR0cDovL2ZvcnVtLmNtc21hZGVzaW1wbGUub3JnIj5DTVMgTWFkZSBTaW1wbGUgRm9ydW1zPC9hPi4gIFdoZW4gZGVzY3JpYmluZyBhbiBpc3N1ZSBwbGVhc2UgbWFrZSBhbiBlZmZvcnQgdG8gcHJvdmlkZSBhbGwgcmVsYXZhbnQgaW5mb3JtYXRpb24sIGEgdGhvcm91Z2ggZGVzY3JpcHRpb24gb2YgeW91ciBpc3N1ZSwgYW5kIHN0ZXBzIHRvIHJlcHJvZHVjZSBpdCBvciB5b3VyIGRpc2N1c3Npb24gbWF5IGJlIGlnbm9yZWQuPC9saT4KPGxpPlRoZSBhdXRob3IsIGNhbGd1eTEwMDAsIGNhbiBvZnRlbiBiZSBmb3VuZCBpbiB0aGUgPGEgaHJlZj0iaXJjOi8vaXJjLmZyZWVub2RlLm5ldC8jY21zIj5DTVMgSVJDIENoYW5uZWw8L2E+LjwvbGk+CjxsaT5MYXN0bHksIHlvdSBtYXkgaGF2ZSBzb21lIHN1Y2Nlc3MgZW1haWxpbmcgdGhlIGF1dGhvciBkaXJlY3RseS4gIEhvd2V2ZXIsIHBsZWFzZSB1c2UgdGhpcyBhcyBhIGxhc3QgcmVzb3J0LCBhbmQgZW5zdXJlIHRoYXQgeW91IGhhdmUgZm9sbG93ZWQgYWxsIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zIG9uIHRoZSBmb3JnZSwgaW4gdGhlIGZvcnVtcywgZXRjLjwvbGk+CjwvdWw+Cgo8aDM+Q29weXJpZ2h0IGFuZCBMaWNlbnNlPC9oMz4KPHA+Q29weXJpZ2h0ICZjb3B5OyAyMDA4LCBSb2JlcnQgQ2FtcGJlbCA8YSBocmVmPSJtYWlsdG86Y2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZyI+Jmx0O2NhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcmZ3Q7PC9hPi4gQWxsIFJpZ2h0cyBBcmUgUmVzZXJ2ZWQuPC9wPgo8cD5UaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQppdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQp0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgooYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLjwvcD4KPHA+SG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCmFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQppbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCk1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgpzZWN0aW9uIHRoYXQgdGhlIHNpdGUgd2FzIGJ1aWx0IHdpdGggQ01TIE1hZGUgc2ltcGxlLjwvcD4KPHA+VGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCmJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCk1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKT3IgcmVhZCBpdCA8YSBocmVmPSJodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwiPm9ubGluZTwvYT48L3A+Cg==]]></data>
	</file>
	<file>
	  <filename>/images/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/images/clock_link.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAANTSURBVDjLTZJtTFNXGMdvlpgl27Jvi5/2meyLWZbFGBdBBqJpi0njEtzEJUZa7LBGrARwTkvZFFpqodmKMC0CCrG1jSJqfCktl65YkUKtIFVKl6KzlVZa2vJShP/OOXHNbvK7ee5znv/v3HtyOQBc6hb3AUFJ8BIeET6k/f9Dehvfr7sJOf/1uXkrt4GgTo3se5mJ2pEYKY24+4qdxx9kHITYexwP+8T8wpgsujh5Mkbm3YTPmSDSy/2ccO9/tRK+hbnhA/OPTVuTDc4ofh+J4OL4awatz/EzGDd9lY776tLJccUbkhslbOBmL3G/LHhPxsJDB+Zdl7eu6odDuOr9Bz383zBYJ6A3T+CSbQY9Yy9hHLTjWd/OtcVZ87vw9S/8JJvDBdq4bVPtH/n/urAprbbPoNcdgtUexPRsAtFEEnOJFPyhBLrvTcM4FMTVG03w9mxZnmz/1EOyOewgjl+8qam2+NDuDMJEdqPX23gcz1+9xhKpKcl14Hz/NAyOFzhl4vFTh+s3dgb0tq9t1FF1zYfzd/yYJDunV9eRTKfxh7EDESJaWF6G5e4A+OdxnDU9AZ2lmazgu2Y+VtnjQeMVLyKLGbxdXsMKWahV1uGy9QaqT9fhnssNXzyDYwY36CzNZAW7z96JSS+4oewYQyiZIZI1zMYX8GuTloX5sSeYWwUeRzOQNw+DztJMVrDr1DXHXp0ddd2juP80DMvt+9CQsNFoREOjGqOBIJ6GE6hv0LCe6kwjflA0BnJzcz9mgvyqTqVAeR1H2oZwqFqLlpYWhMNhBAIBDA4OQkeeDe1/YnLKz3pOp5PNiEQiNRN8Izd8TZjYLtVAUVUDj8+HE6frUVxcDIlEAr1ej9raWlYLRSKI9x9KUolCoYhn//XNkqZy4V5JRqmqZ4KjzTbkF+yAzWaDx+MBz/OwWCzI/7YQWw6ekVOBSqVaygpcLle+TqfDYbmcCQTfy8hwAYqKiiAWixm0LiwsRGlp6SMqKC8vn2fh/v7+zwjJgYEBuvhOrWla6r7Su2q1WtHa2orKykrU1NSwmvbMZjO0Wm2CfOIzJujq6vqEMNXZ2bkik8n2CASCYFlZWaqiomKJsFJSUvIjoYDUKTl5Q6lUui4UCkN5eXlf/gvG8MXqEEqGrAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/file-report-icon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJpklEQVR42tWbW2wT6RWAz4w9jmOTG0mcO7mQ+4UA4bpZQGW3kZD2gV11pX1gRZ+Q2qc8Va0qpIIqtS88rIQqJIpaJIRUaLvRFlDZZbUlhBACuUAI5B5yBRIgVzv2XHv+ydgxTjLj+CcxPtLR2P/M2HO+Oef8/zljMxCkvHnzJh03+agMSrCnvTfxeDwwPj4OLS0tEydOnHj2vj43KEvQ+N/h5o+o7IZbHiCnT592oRw5f/58/YYA0O78CItiMpnCbT+cOnUKOjo6Zsxmc82NGzeaNwLAIdz8jxgvSVK47YczZ87AkydPgOf5GbymmuvXr1NBCBpAuA33ytmzZ6Grq4sA8EGoq6sLGULEAcDYh97eXhAEQYWA2xmMzpqrV6+GBCHiAFy8eBH6+/tBFEUVgqYqhMuXL68ZgiGA169fH8Jp74MBgEbC4OCgmo/8IeBrFQICWhOEiANw5coVGBoaUgF4IXjV6wkXLlwIGkJQAGBZCCgAT84C6xoGU0zyhgL4V5sVBicVkGXZB8EfBIFAEuO5c+eCgmAIYHJycpkHMPNDIN86BtGFH4M4NbahAJrHkuDe5FYVgFdX8IaZ9PT0mpMnTxpCCAkATPeA8MNxUISFDTWeiKyw0OT+CAaFXJBkBkyKW4VgiUkFmeGArFcURQEMhZmSkpKf1dTUtFEDgMAQQADua7/YcOP1xPrZPwHiC98Zm52drd26des3VAAmJiaWeYCCAJx1X4Tb5nfEfvTfwAQAwLCoTU1NpQcAAR6gTPXA7Lefh9vmdyT282+BSSgMHK51OBx0AF69erXMA+Spbpi+ejTcNr8j8V/WAZtQ9M4Y5oLalJQUegAQ4AGM+zVMXDxIviHcdmsXxILjeD0o1sTAPfQAXr58uQwAybTC6F0Q3/aH23RVuMR8MGd8tFK1Sp8DXrx4seJKMBxdIT1RVvBGEgJpaWn0AOADKobWKPQAxsfHIxoArgjpAIyNjX1QxdBahIRARkYGHYDR0VFDAPJMDzDCDCZjDmYnsTZQZDBH2cAen4wvBZCBxSlqGwC71FP08FjCGrTYSJ6xWaNoGLwfAGAQAp7Oc3ixaCRng+7WBhD5BYhLyoCswkqQRRfeCQlMGZ9i5ZjjO+e7nxpVCEZSU70L4jbZQwaQmZlJB2BkZMQQwMKjM2Di7MCao6H97vfgds5BUkYuFFTsQQBYrAhOMG85Aqa4At851243gdvDBwUg1m4LGUBWVhYdgOHhYcMQcLX+Ce8+AWCFxh++A+fMNKTnFED57o9BljwIYQG47M/AHL+0UiOTlhLEQoqlmG5JDtiyZQsdgKGhIUMAzgd/UN2fABgbeg6zU28hPskB6VnZPgCW3C/AnFASsjGhAsjOzqYD8Pz5c0MA802/Vd2fNUUBYzLjp5rUZbKiiKBIvBoGUflfgXlz+YYDyMnJoQMwODhoDODeb2Ayaj9WjpOQmJQMFs4MyWKbBkBQvcBadByXrJW+c/7b8AAWgsgBerKnoggyHEm6AHJzc+kADAwMGAO4/3u4PbEHHj5ohtLyCkiIi4H9sT+p2V+RRbwSCaLLfoUeUOE758adZuAFkQpAVWkBZKXq9iTpAfT39xsCkIbrQMASeTG1gboOUPCue8VkTwdLwS/xxdKcLkgyiCLdo7boKMvSd64CIC8vjw5AX19fUCtBll39wTHp2YVJ6Ftivb29EbsUJgDy8/PpAPT09EQsAJIECwsL6QB0d3frAmjvHghqRbcekpa8GbLTHLoAioqK6AB0dXXpAvj+XpthUbNekuFIhMrCXF0AxcXFdACePXumC2BqzgUekW46C1Vioq1gt1p0AZSUlNABePr0aUQ3REpLS+kAdHZ2RjSAsrIyOgAdHR2Gs4BJnAYLK6rtad41B2Rxwpo4tSlCFkUkRwicw+ir1gVAeXk5HYDHjx8bArBP/AdXOx4siGzQ234Xix8PxCSmQcbWCrUSJGBcsXtAjkrxndPyrN+wFiAdoZ3FedqKb+1CcsC2bdvoADx69MgQQPTw3xb7AVgSd9y7BW7XPCSlZUNe+W4VgCy4wJ1QDbItx3fO7danQc0ee8ryIcYWHTKAyspKOgDt7e2GOSB6+K9aR8gKTT9eA9fcNKRuKYCyKjRaci8C2HwIJD8AosKAGMQSOdpMHneHvJSu3b59Ox2A1tZWYw8Y/IvWEImCzraHMDX5ClKzciC/dJvWD1gAT9InCCAvVENCBrBjxw46AC0tLYYArH1n1PhnEADDmhc/Vi3SJF9DxOM4AvKmAqOve69CQqCqqooOwMOHDw1DwNr7Z5DjdwDPS2CxWvFDFeBcfTgBkH4AryZFPu0oAljqCXYNjQNPWQ7npCZBrF03P9Tu2rWLDkBzc7NxCAx8A9f6i6GhoR527qyCpGQHfJLStNgQkQT12YCQ+RXIMUs9wXtP+kCiLJMLMlMgZXOcLoDdu3fTAbh//77xNDj2d1gQWCyKPGCxWIBRRIjiR8DbrGAwPPi8X4PExvjO4RWWuoawcSZ1nbGakBDYu3cvHYCmpibDEOAwU3Om1S9EUkzg4cNSL9Tu27ePDkBjY2PE9gMIgP3799MBaGhoiGgA1dXVdADu3LmjGwKTM/MgUGbzUCXGZsWSWPfhae2BAwfWF0Bb3whm8/D8Vigx1g65qYl6h6w/gKkFETyC8VPe9RBy9+2c7t+Y1h+A2WyGcP2XiPxM3qDlTg+gvr4+YpMgWQccPHiQDsDNmzeLbDZbV7iNCUXQQ74+fPjwpTUDuHTpEhln0LUZjuOYhISEf+AK78P6cbCBSJLUOTU1VY0Q5nmeV3+OcOzYsWXZmtEMJiVcVIBaUTlUG4bAJvSCnyMQ8h9Ci7bPFADQpI1bIAjPClGIAaSN5CY2BoxL2jiPrj/rdDpvYH54g+9dqIK2z+OvCERk0HhiZBZqMWomKplX4lHjNIPID3Q2+RlMxmwaHH9D2QAA7xuCEgBADtgnaMa6/YDMozq1sRnUaVQCZRSVhPUIAUCM2Yn6KSqpVx2a8XY/g8yawayfMn5bf2NXMj4UIF6D9ca872W/rVcJENEPmFODMIFKHmXfQm1lNPdPg8U/RhMX36wBiNWUACAhEaNtvcZwGiS9Ox6qV+jd7ZWOcWoGe8eIi89pW7J/VlMC4C3qOGof6gtvDmC1i/QqB0t5wKyN2WHJ7RltLNYPykrCacfYYO1/vCZGu7QLX22l5TV2VjPUC0DQoPCaF3jjX9DGVMUcIK96R7wzgfbW3939765phXEIOIbTIIYSAqJ20bLOMWSfBMtzgjcs1PcrzQBE/g9gR5xU77TpywAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/image.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAG2klEQVR42mL8//8/Q35+/gUFBUW133/+/AFyEQDEYYRQMC4IMDKCeVBBOAuv2H8owQgE/////f/82bMrU6ZMsQIIIBaQOBMjI3thYQEnA53Ay/ffGRqqCrlAbIAAYkFyN8Pa478ZTFWYGHg4GRluv/jNIMTNxPDkzW+GP//+M/z++59BUoCF4f6rnwybz3xi+PnnL1js128gDWT/+vOf4efff2A2MBwhckD+rz//IDRQ3c9ffxj+MTIzXO/TY2CE2gkQQCzILgNpevzmLwMTE9AwoCHX3/9i+AcMd2ag6p9Agx6//QUWZ2NhBIozQqMFRDPC4wYEmWDRBOUzgmiQuv9MDP8ZmaBRCAEAAcSCHE8OOqwM/4C+/QvEIEW//zIzwIz/C3QIKA0wA003VeYEOwyUfkDqwfj/P4QYiAaLMUDlQGr+gc1lZmZh4OdkBsuBAEAAsSAnLgkBJN+AATOemPyPFHn/kISg4v9AJBQipWImJiZglCDsAAggFlIT0H+oL0GYkRERDTBL/kG9ho0PCgVgDmBgZWWFmwcQQDgd8OvXL7AGNjY2sKthAByfUIt//vzJ8OXLF7hlMIchOxYUDhBH/Gfg5OQEmsUM1w8CAAGE4oAfP34wvHnzhuH8+fMMFy5cAKbmPwzy8vIMDg4OYIegG/7u3TsGdnZ2qE//ofgUlIj+g2hwsAMT7b+/DG/ffWTQ09OF6wEBgABCccCNGzcYhIWFGTQ0NBjU1dXBhoEc8fv3bzANCUKIL0FiIEdxcXGBQwjkK1CIgIIXJP7nz29gImZgeP+djeHjL2aGL18/MzB8f8rw9etXBl5eXridAAGE4gAeHh4GWVlZsAWgKABZAsIgg2GO+Pv3L8P379/BQS8iIsIgKirKwMHBAXYcSM3r168Znjx5wvDv7x8GDh4hhlWnvjCce/iLQU/sN4O7EiM4NJABQAChOICFhQUenMi+hcU7OAUDHfb582cGTU1NBiEhIXA0PH78GGw5MzMzg5iYGIOKigrDwwcPGP7++sYQYMTD4GPAysDFAixH7j1By2UMDAABhFoQAQ15+/YtOC3AfA/zNchiEP3t2zcGLS0tBgEBAYarV6+CfQxyJCiUQPK3bt0CpxsxcXGwIwT5WcDR8gdYQv4Floiw6IIBgABCccDHjx8Z7ty5AzcMhkE+AwU7zHJQsN+7dw+s7iswbhfMn8fw4sVLBjs7GwYTU0uGa9eugUOQj4+P4e37D+B09efvP3guQgYAAcSEK48jY1iUgByipKQEDhVwiADpvLxihruvBRmktEMZ+qetZjh4YB84lT9//hysF+QBUEiilx0wABBAKCGAHvcwPsxxoOADxfunT5/AvtqxdR3DvU+yDAmB0xgkxDgYZJ/wMuzbP4nB0ckZHFqwaIOVFaCoRS5TQAAggLA6AB3DfAJLJyAxUILl5OJh4OEA5hLmbwzf2DgYODi/M3BzccGDGqQOVK6A0gWIDQo5d3d3FAcABBCKA2B5HR3DQgCWzUAp/f379wye3gEMV6/dYvj6cAYDx18FBk3O8wy2MdHAtPGLgZubG2weKLRA6QdWiKFHAUAA4YwCdBrmgLt37zJISEiADQcVraVl5QzXrlxk+Ay0yDkmDFzn//4NcQCo0AGFACjtgNTDsjIyAAggFvREiO4IWAiAaJBmUHBKSUmBcwKoDABFhbKqBjjOQaECjGmg5VxgS0E5BeQImKXYEiFAAKE4BznrYcMgR4Cy3sGDB8GlHagEBCUskMWghAayCFQ0gywBWf4AWA7APALSj80BAAHEgi0bwuIKZCDIJyAxGA0r848ePQrOkuLAAgc59ECl5IsXL8BpBeRAmO9BIQVyBHpBBBBALMh1N6gE09PTA8c1zMfIvof5ApaiYfEKq7pBloBKyIsXL8ItgkUnzNLZs2fDchTYUoAAwkiEoEQDy3YgC2BsZMuRHYScc2CFDkgM2NQHJ0TkUAUVUKDStqam5u3MmTMjZsyYwQAQQCgOAIUAKNH8R+kcMKA0RpBDDBd4+PAhOARgwQ8LDVB6qaurewvsDzgBhW+C5AACCKM25Ofnp6jND7IIlF5A0QKrXUE+B6WbysrKt5MmTXIGCl2CqQcIIBZsbT5KAawhA3IEqHECSpj19fUgy12A0heR1QIEEAutej+wohuUPVtaWt5OnjzZGd1yEAAIIBZscUxpFIAb9MBoAPm8u7sbp+UgABBAKA4AaaIGACU6kM8nTpwIS3CXcKkFCCBGUHzl5uZeU1NT00RvVpMbAqBiGVhSvp06daojUOgyvrQCEEBgBwBTvgqwpeoIjDcmUO+ZwgQIjgNgaXgUSF0hlFgBAgwAfCHGv3udsccAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/missing.gif</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[R0lGODlhEAAQAPfdAAAAAFJSUpeYmJ+foJ+goKCgoKGhoaGhoaGioqKioqKioqKioqKjo5ubm1JTU5CQkNHR0oGBgdna2uPk5OTl5ebn5+fo6Ojp6enq6urq6urr6+rr6+vs7OHi4oSEhNbW1tfX14SEhODh4evs7O3u7u7v7/Dx8fHy8vLz8/P09PT09PT09PX19erq6oiIiNzc3NjY2IWFheLj4+3u7u/w8PHy8+7u7uzo6O3r6/Ly8vb4+Pb39/f39+zs7ImJid3d3dnZ2YaGhuTl5fDw8PDy8uHNzdSXl9eVlNiZmdWameXQ0Pn5+fr6+u/v74mJid/f39ra2oaGhubm5vL09N/NzMdzcMl2dNOenMuPjsBcWsNta+XS0fz9/fDw8IqKit/f39rb24eHh+jo6O/v78SGgr1qZeTV1PLz89Gbl7tOSrFJRMSFgfn4+PHx8YqKiuDg4Nvb24eHh+nq6uji4rBaVMaTj/Hx8dedmMtIQ8BrZrRybahPSfHq6vP09IuLi+Dg4Nzc3IeIiOvs7Onk455AOLR5c8h7dc0cFsVbVOjf3r6FgJs6MfHs6/T09IuLi+Hh4dzc3IiIiOvs7PT09LBuZp8bEL8PCcRPSOfe3Obb2aY8MrFsZfb39/Dw8IqKit/f393d3YiIiOzs7Pr7+93Qzas6MbUTCMF1bNWVjrdANac9MdbHxfDx8ePj44CAgM7Ozt3d3YiIiOzt7fr6+vv8/N/Rz710asJKPsJJPbpuZc2/vd3e3tjY2K6urioqKlpaWt3d3YiJie3t7fr6+vv7+/3+/vj6+u/t7Ovp6Ors7Nvc3eDg4LGxsUFBQbi4uAAAAN7e3oiJie7u7vv7+/z8/P39/f////////n5+evr7NPT1LOzs05OTv///wAAAAAAANTU1IGBgePj4/Dw8PDw8PHx8fPz8/Pz8+3t7eDg4K6urkZGRv///wAAAAAAAAAAAHh4eEFBQYKCgoqKioqKiouLi4uLi4uLi4qKioGBgUdHR6ampgAAAAAAAAAAAAAAACH5BAEAAAAALAAAAAAQABAAAAj+AAEEEDCAQAEDBxAkULCAQQMHDyBEkDCBQgULFzBk0LCBQwcPH0CEEDGCRAkTJ1CkULGCRQsXL2DEkDGDRg0bN3Dk0LGDRw8fP4AEETKESBEjR5AkUbKESRMnT6BEkTKFShUrV7Bk0bKFSxcvX8CEETOGTBkzZ9CkUbOGTRs3b+DEkTOHTh07d/Dk0bOHTx8/fwAFEjSIUCFDhxAlUrSIUSNHjyBFkjSJUiVLlzBl0rSJUydPn0CFEjWKVClTp1ClUrWKVStXr2DFkjWLVi1bt3Dl0rWLVy9fv4AFEzaMWDFjx5AlU7aMWTNnz6BFkzaNWjVr17Bl07aNWzdv38AlhRM3jlw5c+fQpVO3jl07d+/gxZM3j149e/fw5dO3j18/f/8EBAA7]]></data>
	</file>
	<file>
	  <filename>/images/pdf.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAHDUlEQVR42mL8//8/Q35+/gVFBQW1P79//2EA8sEASkN5qOD/fww+ssh/XOqAgBEI/gAtffb8+eUpU6ZYAwQQC1iQiYm9IDmZk+HXLwYGJiYGhr9/IapBfHZ2BoZXrxgYvn+HGPjvHyoGqQXRaA4H2oTd4SwsDD91dRnyq6u5QEIAAcQCd/GfPwwMFy4wMDAzMzC8f8/A8OEDA4O2NgPD/fsMDEuXMjC8fg1R8+MHxDEgGhmDHEEM4OFh+H/vHtyBAAHEghQ2DAx37zIw3LzJwAB0IQMHBwPDiRMMDDduMDD8/Anhg2iYz0G+gWEQ+P0ba5CjAFBoAUMAbBdULUAAscCDhp+fgcHNDYJBfJBikKEgPgjALAXS///9BYYaKKqASQao5j9Q7B8seoD0P6Qg/wd1JMg6kDpWUJRycsIdABBACAeA4l5RkWAI/ofh378gUcfKxvAXXQ5mIYiGYZDDQf4A2sMK8hgUAAQQCwMJAGQQKPj+nznC8K8ug+GPuAzD756lDBz8Agz/gaHBALUMnh5gUYTE/wNks4CiEwoAAoiJFMv/gywHGvB3SjPDnyfAhHThBMPn6xcZ/gJ9BfMpA5LvGZBCA8b+C4xaRqQcAhBATAwkgv+ghAjKIfyCDIzABPX/+1egB/8jfI8eYkjgDzAX/UPLLQABxERyFIASkJIKA9OLZ5AEyQ5KUP/g2eo/FodA0vA/YJr+jeJ7EAAIICaigx8pLhmtXCCGcnEz/OcXZmBEshQl6JEwyHIQzcSEaiVAALGQ5HtYKrf3YmCUV2b4w8LGwCSIcAC6IxDZ/y8YMwMLOXQHAAQQE9G+hxn8B5jpRMUZ/pvYMbA+usvA9Pguwz8WVkyHQvWBLAbFPchiUPCjRwFAAJGWC8A5AVrqvXrOwPrpFwP7qlkMP4AJkxGaE9DjHWQ5zGJsDgAIICZCloIMQTb4PyPQorevGP4Dff5TXZmB+8Amhp/H9jL8ARZIyL6H+RzdcnQHAAQQEzFBj1LtMgENuHWZ4f/XLwzvsuoZGDm5GTjndjF8e/+BgQkYFbDUDsvvhBwAEEBMRCU8WPDD6q3Thxh+AcuBf/beDP8TChl4jh5i+L9mDsN3YOj8hVbluCxHdwRAADEhW/blyxdgE+AXPNjRXQuuL0AF0fG9DN/1LRlYObkY/kZmMvw1N2fgm9XK8P3sUYb/fMACiocPWO3yAUOHC5g28IcAQAChZEOQ5SAMyy4gxcjZ5j8bOwMjMPiZ799i+BqezcDz/y/DLz4BBqammQxcia4MfL3lDL9SKxi43r5gYPj2leGvmg7DXwNLYHAgGiroDgAIIBZUDzKhJKL/6JpY2RnYdm1g+CEiwfDXwpkBVKUwAaOD+egehj/8QgwcV84xcJREMfxU02Vg+v2TgfXlM4aPM7cz8KppAbPvb6wOAAggFpiFIAmQz7EVo+DEB8rrwHKf5cgOhk/6VgwCe9YycOzfyPDrzUuGz2r6DL8yahl43r9m4J5az8D88gkDo4gkwzd1fYafwCjhh0UfkidhACCAWNAajAxYWpEM/zk4waHItHMLOAfwvnvD8OPVE4bXDv4M/23cGNil5Bj4gA0NkP5fOkYMTLvWMXwDtm8/BSQwCIqJA5sukJoUmx0AAYTXAf/Z2MAuZz26m4Fx5SwGpsM7GT5buzN8iStiYNPSBzbv+BhY//0Gt57+//wOduw/QyuGuacuQXLDgSMMDPsPoYQqKJR/ghIytCkKEEA4HfAfWNEwP7zNwDyxjuH7y+cMjF8/M7Dy8DK8Bwa1iK4xA/tfYG75/QNFL1j/zx8Mf4EJOTEpiYELWHMiV7+cQP4rYAu7oaHh5cyZM4NnzJjBABBATOgOABsCtJxl3yYGpqwAhrfi8gyfk8sYWH79YHidUsnAo6zOwAG0HNQwwZfHWYA+BfmWlZUV2LJnB1v+8eNHhqamppfTp0+3ASq5D1IHEECYIQCMb6aD2xn+A5tcr/NaGdiBcSpSk8jw2jGA4X9AHAM/Oxv2MgKqH5bIQNkZxubi4gK29N8z1NTUvJw2bZotUOgOTA9AAKGFABO4XcF49jC4shHYspSBrySS4Y2FOwNDUjGDOA8XqC1MVCkHSgOwMuXly5fIlt9GthMggNBCAFTTARuX8QXAFrI6wz+gIz4aWDGw65ky8LCyQBokIEtwFN3IoQKqiDiAjU9QnHd2doIst0H2OQwABBBmgwTY5mcQEGZgCooHFzScoFYMlrYcIcACbC+CfD5hwoQX6MGODAACCMUBbKBsh6UcAKYkkiwHBfvbt28ZJk+e/AKY4HBaDgIAAcQISlC5ubnXVFRUNIHx9p+BQgCKhm/fvjE+ffoUZLkdepyj17YAAQR2AD8/vzIPD4890AGMuHrkpLgB5JE3b94cxmc5zAEAAQYABPJ6/Je6JoMAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/presentation.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAMAAABEpIrGAAAABGdBTUEAAK/INwWK6QAAABl0RVh0U29mdHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADJUExURXabzPjOtNBwTcnW6JxKNLK4yvi8oOpiJbheP/voy6GktOnq/PvbwJKr0y1MXlgTFIGn7PX+/v37/vaud2d3ivf06PWETLXJ8tvy+v70/f/s9snH4e3+/srq+IQsHvP1/7TF1fGQdtvs/kNOcf388tPl/PL79daXbtPo7KO03NLe9Of8/v/e/C8/ZuX59Mrh5v+jXNzp8uXy/oiax9Du9P/18+v18d/g/NaBYeLx8/jd2+7x/9vi6r7f/qt/V+99N4GV7pTC0gAAAKF5LHMAAABDdFJOU////////////////////////////////////////////////////////////////////////////////////////wBBYgTvAAACgElEQVR42nyTfZtqQBjGo/E6WiHylkEonE20NiHK9/9QZzrRtv+ce8Z1YX7zPPc8MzMbhuG02m4//+lj1Ofje7vFY8MMP9TcWlsxFr981+rzBUjJPklC3fdDP8RKws11fb0uf4Dcvly+0/0+h3ne5kmb6Os028w+fiLAxErWMR/fFqfFbXlbrk7zbH778ZAjCJEEYfH10GazKRIYhhOwU3ZaRZIkIFmWBQD48AxDn/i63kYPnkJ7inLE0jStZ8B9dprxi+x8WY4eKlo1DamAZVnK57pjESpgE+6T+QTsFGG3q6pKY0HXCUcnTPQi36Qwv40AqQRSoJothwNZHAPidXw6xRnMpzpUioQI1tl2dF2qQu8YpoFTXN48HBEB/hxEx9nVIsE4jQnTxk/hCyCPKlubgUhqJFFznRPHizsf7+H3cqxDdwwA63XA6x1axLkMubaRfoBFPEXQZCAoCukdHU7lWCdSDSQ1zeGyGAFWa7vOUzxSA7RIs07x3RTtGdp6PK6C7UsO4EpoDi3UAhBd18L9XOjx6AH0NSdUDuhoAgs4adrgUjaRP0VgesRlpkDUAiFwNCvaUYkiJEeHySTwBK6uM0EQaEKggXj5NstDg6IvdzLJ9JXG9HizSZZhGdG2ZVlC6PLysMLHgHUeEv8p27TItWLKjd8OrSTJBm629GiSzK+wth+rF5DhEyhbljV38VuWwcXcdalnhieA5+H5OLWUprquS3e/uF6f408giiKEd9nAhPTIwePr4QxvQCAHpamaqhoEQRREMiW14/wJkPBfwzBKFVOtiqj5avgFFHb6WAdOkqY4D+L54RewsCiXpyjqfn90norvw2/gv/orwACBnpaqvpTKMAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/sound.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAHFElEQVR42mL8//8/Q35+/gUFRUW137///AFyoeA/nIILgbhABYyMDCgAv57/CBJIMALBv7+//7948eLylClTrAEC8DQGKQDCMBDcxIDoA/yCXxO8CJ48+G21UlOTFHraZFlmxHsm6pd1G+4EaKkSNknKJX5hIGulihCeV3GlL8S+VWdrTbWMHqWxWtrBHWOeCOexj+7+BRALzHV/gbrvvfjLwMPxn+HVx79Ay/8xiPIxMdx8+otBS5aVgZ2NieHd578MLz78ZvgOdMCWsx8Yfv76y/Ab6MjfQM0g9SD61x+YGBAD2b/AciCxf0B9fxm4OdgZLnRowMMHIIBYYAxQqH76AXItRDMzMJyfvP3LIMrPzHDjyW8GDjYGcNCzMDMyvP38BxRqDKws0LgAsoERAwpesEmMECGoqSCSCRyiILPZWZmgwozgWAEIIBZYPHGxMzDoybEAQwIUtMxAA/4DffOfgZUZFBWgoP0HcTGQryHNxuBhwAMP1n9QGsT/+x9Co8r9A4pDzGBnY2PgAoYmDAAEEAssEYEcJcIH4jEzkAdAEf0XlBigiRCSZmCOAVkC8jIz0AffQT6CAoAAYiHVGpAvPn36xPDu3TuGr1+/gg3n5ORk4OfnZxAQEGBgZWVl+PX7F1jdf2j2gIUeOAf9/geNKggACCCiHfD9+3eG69evMzx//pzh9+/fDExMTAzMzMxwC/78+QMWExcXZ9DU1GTg4eFh+PnzJzTbMkKjBGI5TB8IAAQQUQ64c+cOw8mTJxlERETAmkGOePjwIcOXL1/ABnNzczPIycmB8cePHxnWrVvHoKOjw2BoaAh3BMwBLCwsKCEAEEAEHXDhwgWGq1evMmhoaDCcO3cOzAYZCgpqGPj8+TNY3ZUrVxh0dXUZTE1NGW7evAl2jL29PcOPHz9QQgAZAAQQXgeAfAmy1MLCgmHLli3geAfFM8iQv3//gjE42QJDBYRBlty/f5/h9evXDH5+fgwXL15kuHTpEjg0vn37Bs2xqA4ACCC8Djh8+DCDvr4+2Gcgw0HxC4tzISEhMB8U7yAL37x5A49vUHo4ffo0g6WlJcPx48cZFBUVweLoloMAQADhdMCzZ8/AQcfOzg4OYlFRUbgF2traYAySAyVIUFoA+RyUSEGhAlIDEgc5hIuLi+Hu3bvghAkSQ3cEQADhdMDTp0/BmkGGgFI0KPGAfA5KiCAfgRwHClaQo0DZkpeXl0FBQQEcGqBQAVkGUgOKMmDFA44GkFmwHAEDAAGE0wEgX4N8wwYsuQQFBcGGgisuIA1KG8gGgRzy69cvsBhILQiA9HJwcIBpmM9hGNkBAAGE0wF8fHzgBAQCwsLC8BQM8g0oepDLAFiCBIWYvLw83AyQ41+9egWOPpDDsaUDgADC6QBQnn7//j04z6uqqoKDE2QpyKJ79+6BsyLMETAfmpmZgRMnLORAlj958oTB2NgY7gF0BwAEEIoDQJaA4hpksJiYGDhOjx07BmbLyMiA4xAUpyDDT506xfDy5Ut4jgDlfRUVFbAFIN+CcgVIDShtKCkpgfViAwABqCiDGwCgCIZ2G6OINWxkGXebGOWnkh6+q0OLV58BOhcoFHF3VBW6GxEBM7sHREGmgJzwnoSUidAQ3NDMYHeRmdcTI2JJ9QQQigNAkrBiE6QBlM/j4uIY5syZw7B06VIGAwMDcPEKChlQAgOlDRgAqX/8+DG44AKlHVApGB4eDi5BQY6CBT16FAAEENY0AFMEimctLS2GlJQUhsWLFzNs3boVXMCAogPkOFBCBQFQOQBKmKD4BmVJUJSFhIQwmJiYwH2ObjYMAAQQC6yaxCYJC1KQZVFRUQyTJ08GWwTKCbDgBOkFpRlQSgdFESjuAwICwI4DOQwUPcjZDql2BFsGEEAs2HyOLgbSBMrfiYmJDCtXrgQHr5SUFIOysjK4hJOUlASrBQW9mpoaw86dO+EOg+mHOQKUyEHtCFAOBhEAAUTQASAASsmgBArK46BEBUrdoCwKK7BAwQ5yFCjrSktLM5w9e5YhPT0dnE5gjREQAPFBCbO9vf3JrFmz/GfMmMEAEEBEtQdAQQ1K+aA0ATIE5GOQhSCfgBwGSuWgohaUc2ANFRCNjkFlSkdHB8hyC1BpDzIbIICICgFkH4AsAwUnKFSQ4xbW0oEVNsiJD9RgAeWQlpaWx1DLn8H0AQQQSQ6AqYElQGT1yE0vEIY10UDFM6hc6OzsfIJuOQgABBALAwUAOQTQAcgBoMYqqJru7+/HajkIAAQQySFAKHRgAFRigmpNYNZFiXN0ABBAKA5Abq1SAkBZDVQoAVM5XstBACCAGEHBmJOTcwXYyNAGpmhgxwZPuBIXCozAJjwjMMU/mzlzpiVQ6Am+KAQIIEZo4hEB8nWg3aL/FAYAI9SMG9jiHN0BAAEGAFSDxYXqY3MTAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/spreadsheet.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAGQklEQVR42mL8//8/Q35+/gV5RUW1H7///GFkYGAAYRD4Dyb+M2AF/6HyWAX+I5EMKAoZgeD/vz//nz19enXq1KmWAAHEAhJkZmRkD8wp4Hz3m4FBno2B4cUvBobnPxkYmJAN+I/GJsRHsxgGmICG6vL9ZqgtyeUE8QECiAWm8t8/Boat7xkYiiQYGJa9YGBovwc1ACjO8BeK/yHhP0jif/GoQwskdlYGhocx/+GhDBBALDA5kNrL3xgYNrxlYDj9mQHsfWZsvoLxmVE9yciIxGeE8hlRtf0DcphZUN0EEEAsMMvlgEGfKQ7UA1RULc/A0KiAIzhBUQ00CZR2EOx/8ND6BxL/B/E6RBih9h9QgJWFhYGXlRHsGBAACCAWWDpjB9JOvAxEAuSkygAJLnh4gyxjhBgKTcD//v5n+Pv7N9gxTIz/GP4yssF1AgQQCzbjf/z4wfDw4UNggoEnQ4Y/f/4wMDMzgzEI/P37FywGUsPKygr25W+gJSBxmDqYGA8PD4OwsDAwYICW//3DwMWFcABAALbJFQdgAIShZPc/JQLC1+GXVk0MCW15ps8fwN3J7jIMATBWFcG6W8yMOuxwV1WJCALBh+fuLjNDb2aifgSC5juvAMLqAJBibm5uBl5eXjgG+YKPjw9sIQiD2CA1IPHv37+DHQtSx8XFBRYDWcYCjG8QG0TDQvHfP9SsARBALLhiGeT6X79+wR305MkTsO85ODjABt68eZPh27dv4CiQlpYGqwHp+fLlC5gWFBSEmwNOB0CLQQ4HqWdkRKQfgADC6QCQb0AWgRwhKioKtlxPT4+Bn58fbBjIEFDQS0lJMXBygssUsINA6uTl5eFqQGKg9ASyHBQqyOkKBAACiAVXFLCzs4MVgzSCLADxQUEOswwEQKHBxsYGToQgAFID4sOCHCYGcgwswaI7ACCAsDoA5Ovr16/DU+779+/BQQtKfCBLYT4BJTyQA0GWgsDPnz8ZPn78CJaHhQAo4YLMA6lHj38QAAggnA4QEREBJyCQoZKSkgwfPnwABzeyA0By4uLi8FABJUaQ70FpApQoQQ4AiYFyFXLoIgOAAMIZBTCLQBjEBmUtkOEgDHMAshjYMCANKwNAZoAwSAyW8LBFAUAAYXUAKEhBQS4kJAT2HShPg/iPHz8Gy8EcAEpwoLiFRQEo5EBRAEv1sCiApX6YGDIACCCsDgAlKgkJCbCBIM2ysrLgQkdGRgbsIJgDQJaDogc5CkCJDjkXgMRu374NDxF0BwAEENwBIENhBoA0Q4pNREkIS1ggMVjUgDCID8Kw4hmEYepAlsHkcDkAIIBY0OsAkIWgRANK+aA8DwoNUFEKigJQVCBHAajYBbHRowAU78hRAMuCILXoDgAIIBbU1gqilALlApBGkKGgoAdFASgqQAkSXr8DLQFFFUwMZBmIDVKH7ClQFCCHAjIACCAWWPCDJGCpF1YAgTDIEaDsBnMMzCcgGsSHicHKARAfpBYWBSAxmOeQaRgACCAW9OwHw6CgBEUBKDhhZTwoFJCjAKQG5GjkgghUXoDSEcxToHSFHgXIoQAQQDgdACpgQBaAfKKiogJOB6ACBjkKQHIgdehRsHnzZnjZD4omkMP27dsHDwFolQxurQAEEFYHwCoWmKs/f/4M9glIDJYjQHLIYjAHgPggC2NjY8F1B8zXsMQKSuA1NTVvZ86cGTljxgwGgADCGQKgoATV+bACBxQFoLIfFgUgNaCcgi0XgHwPyj2wSgqWuEEOq6urezt58mRnoPANkBxAAOF0ACjlgywGBbOGhgbYckVFRZQoAKUP9CgApRdQGgA5BlZEg/ggyysrK99NmjTJBSh0EWYGQADhjAJQsMPaf58+fSI6CkBBDGsvghwBCh2QWfX19TDLLyDbCRBAGA4AAVAtCGrRwBwAsgBUL4CiBSUFA32ILgbSA2ucggAo6lpbW0GWO6NbDgIAAYRRF8DiFBTc2OTQHYwsBgtBUNyDHAKyvKurCxTnLtgsBwGAAGJBrwWpAUDRA4qa/v7+t1OmTHFGjnN0ABBAjCAf5ObmXlNXV9eEBRslANYOfPr0KchyJ6DQJVxqQXYDBBDYAcDspgrEjkAHgHvPlDgAaB44Qbx48eIYqLtJQC0DQIABAAtA57jciQkeAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/tar.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAIOElEQVR42mL8//8/Q35+/kUFRUXV37///mVg+A9GDIxACkSDmEA2iAPlggFEDiGCxmWAq0YRAxsLxP8Znzx5fGXq1KkWAAHEApJgYmRkz8wp4Pz5i4Hhz9//DP+AYr///GfgYGNk+PHrP8P3X//AFoIc+w9I/wM5BsoGi4MgUNM/Bqj4P5gaqB4GBiRxBgY1CVaG5ppCLpDdAAGYIHcTAIEgiI5wRYipNmCplmQFBmJygWBgC+rdfnQ8EAwWdhh2ebzwwYkC86YEMHRNQNwFbR0wrRfG5aCFm1COZI6sxt2QmJWgYv+OI1aymJcu8+d7k8RxChCHnhaq4uYRQDAHgIPm9Yd/DHzcDAzXH/9mYGZiYLhw/yfD1x//GDiBIfHnH8hHjAx/QQH4HxQ/EJoRFq7ggIUEMCNIHAQZGcEOZ2RkggY9IhpgACCAWGBxw8PBwGCtzQYMpn/gaGACqvr7j4WBCegQex0uaHD+gwTnv/+QIGZgAVrKxPDvz0+Gv0BfgkT+gRwKxH+RownM/wemGYDqhXlYwPpBACCAWJAcwyDGB04RDMSCf58fM/x6d4+BXcaSgZEZ6IP/fyC++Q9xICwVgxPkPwjNxAQKRQQACCBICPz/z0AK+PP9I8OXO9sY/ny6ycDAwszw4elVBiGTZKAjWBn+/v7FADMTZi6MDcMcHMxwswACiIkUi/8Dg/rLrW0MH89PYGDjZ2QQ0PdkEDGNZOAEBt2zQxMY/vz4wsDEwo7XQ6AoRgYAAUScA4Dx9/3xMYb3p3qAnGcMQmZhDFxyjgx/f3xj+PvzEwO/iguDoLIyw6P9vQw/P71kYGblwPA1JBv+w3AcQACx4Lf3D8OP5+cYvj85xMDKycAgoOfIwMQjBkydP4Feec/w+8sbBmY2NgYGtrcM/Ip64AT7YH8fg5RlJgOPmALDn5/fkAqu/+CEysSE6meAAMLpgL9fXjJ8vDQHmCQ/MnBLajKw8kkw/P30jOHP23uQZAV03M/XzxhY/n9jYPkrwcAA9DWvtDyDMtMfhhsHJzJImKUwCMvrMPwGRguy7yFZE5ERAQIIpwN+vDjPwMrLxsAr787AAHTM/5/vGUCK/7NANDMyczFwsgPLjqMLGX4xAbMPtzgwXUgw8IvLMijqqTLcODSZ4YdRLIOEminDn98/wZaDfI8eAgABhDsKmJiBwQvMWqxAW4Dhz/jlBbTAgrqehYXhzxdg0CvoA7MVK8P3L98Yfnx4wfDs7SsGNm5+BjllCYbLOzqBlhcySGpZMTD++wGtVxhRrAEIINwOACr8D4rrXx/AWY2BnYeB4f1DSLEFKnz+/WX49+s7A7+kHDA0mBkExWE1F9CHwOhhYPzJ8FKUjeHj6xcM0kBf/8VhDUAAseBJ+MAMD6qdvgPxT4gjeEUYGN7cBlvwF1i2M/39wcD4/Q0DuJZhAhoFCt5/wML+P9A6bh6gpcyguIIXy9hCACCAcDrgH6g8/wt0wN9vEIeADAVVEAIyDAyvrjH8+fiOgR1Y8ADDHWgxK8TFYDWgXMEFpv/9h1rOxIhhMQwABBDuEADlXVgIgBwCrm//MoArCREFBiZg3c3KAPTtH2Dc/vsKCQE2bkiaYQE6goUVGFmMkBhDSvnoiRAggFB4P378YPj9+zc8BP6DLP7zDYFBofH7E9DEfwzsEsoMTL8+A9PIF0i8s0AtBoUKKBSAGBQFoNhhxFPWAAQQSgiACoo/f4Btgv8sDD9//mZgBwUpOApAjoIGMSwUfvyCWswBtxBsOROUZgFFAaQaRs5+6CEAEEAoDgBJQspqUCuGheHb+/cMgmLckCgAi/+DpnBoCwJkKSj+WVihlkNpKAbVvsygEGDCnQgBAogJvTZkZIQEPb+iBcM3VgOGx9fuAaMfVPQC08Lvb5A0AaJBaQIc12wIS2EOAZaKDOzAsuHbN2CI/gUHGCwdoJeEAAHEhJr1oQqAIcAMTEyydjkM33k9GK5ffAXMCECL/3+HZsvv0BTPjgh+sGOAfB5uhh8/fzIc33ya4cMPcQZZTV2G379+g0MWhEHRjNQIYwAIIBZ0ByCywV9wU0rJIY7h2RUVhkvnpjNoqfxk4GABRsFfUNjyoiY6Tk6gRf8Zrh27wbDxDDsDC5ckAxe/IMOmnfuAgbUb3jhmBhZav379AoU6uF4GCCDcDoC2Zf4CfSOtYwX0LC/DuUN9DHoKrxl4uH5BWj8swPzOzg5ObHcuPWK4/ZiNQVzLh4FX/DZDRmYWAysLM0r9zwasOd8D01VNTc3rmTNnhs6YMYMBIICIag/8ATpCUlWXQdm1juHMHRmGt++AwcgBaloxMTy485Jh7/7XDG9ZHBlsYtoYTFx8wIn5D7RlBGKDfA2y/PPnzwx1dXWvp02bZg+Uug2SBwggAiGA5AhgsInJKTKwBjQwnN/YwSD0+gHD26//GdjFbRkMQ30ZRCQkwE16UDYGJWpQMMOyHCcwekA+r62tfQXsjIAsvwEzFyCAWEhpkv0GGiooLsFgElzNcPvsYQYjQ2sGIVFxYOsZYiEsjkEOADkEJMYOjKI3b94wNDU1vUa3HAQAAgijHCDUQP0LNJhXUJjBxC0I3AQHWYRcwMBokDgHBwfY5+3t7VgtBwGAACIpBJAbluiNS3TAysrK8Pz5c4YpU6bALL+OTR1AALEg50lQ8FEDsAAbK7du3fq7aNGiZ7Nnz3bD5nMYAAggRlCQ5+TkXJaVldUC+grYnyCxk4DekAL2PL5//w7y/ROg5eZAoVf4alyAAGKENhSFgXwNUCCgdqjJAoyQSgPs6zd4W91AuwECDAB5pb2L+BJ+bgAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/txt.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH1AccDAgsHo/fIQAABG9JREFUeNq9l89vVFUUxz/3/epMp9BO27G1VkIBIaQEFTH+CgYxopu6EBe4MHGjYcHehf+DKwMdSYyNCbIxEZCYGBYksyBhIz+MiNGIUKBk6M/pzHt99717XAwzdPqm7bQqJ3l5M2fOe9/v+Z5zz72jRIR8Pi88Zjt27Ji6cuUKiAijo6PyOG10dFSALSKCs5jVNxdCtj+puHE34vVhl+8ulnl2yOXibz5hZAhjg46qV+1zGBl0vOS+XGxsuHn8pQYlrKXSVEKhd6PiVjEi7SnmffO/lqJBgYPPORiplkUEhvocROD5obaqH8EIGGMwRoiNQWrfH95jI4gIRpr/viKBvi5rVcZVctULo4knL8PGneCkH/mXxC32r0hgrWZd/wgd7WGmcJKpcZ/Bw5/hZfuXBWzmWxOBhmzKf0D3DVKpDfRv/ZRev8yvx48ydPRLnI5sMr6VHlgNfLGp25+j+q7BPQ9K7+CYQ2wZ7qMy8RcdW7sS8SJCHMdJFdejAOEDVMdliDtg8iqIB9fPMVOcY8O2Pcn4h6a1Xh+BRPZ/f4HKXIPp3VXH/CAm/QTsPNRUchEhiqLmfbTm+kc+yrsAIjAzAW1b4dY9iqVOul8eadovNfmVUmsnkMj+zhiq8xaU9oFZAL0DSXcT9L8BqKbZa61RSq2PQGM2Biv+CdAwF4HXB3enmApz9B74MBFvjCGKojr4mgksraeaOIvqnoPgFYhKoHaBm2HGHUa5bYlBVJN93QSWErHmvwe7AqV2cDqh6DMX5ci9/UlDfBzHTcHXRCDRzdOXUDkL9E7QU+DsArEolrpwOrJ1yeM4RkSagq9KIAzDpk0kIliTJ8Gdh/lesDIwp/DJkX3z47rctc1mOfBmBBomYRAEBEGA4zjYto1lWdVs/JtYPe0QD0I4Cd520CUmxiN6XhusT7ilAL6/QKUSICJksxuxbWtlArUX1GpYs9Sdr2BTDLP9YIUQZNC2S2rv/gSoMYZKJaBSCTDmkZqzs/P09HSuYy/Q0zjdHSCAngXvaZiLmPjzAV3v7Vk0ZiPKZZ+FBd1089E6IggW8DxvdQUaAornUAObYcEHaxyiHozjozYPo5QiCELKZR+toxXfU+2xCNu210ZAmQpE+8FcBScHvuH+73dx931AsThdl3nxs+fP/7i+I1lTAkrA8qBtL3gRtwvfMuNtp70crPjikZERHMd5eHwziAiu62KM4fTp0wDllghoX6hV7ebZr5nf8AyZ3W+tmlkul8N13YQ/n89z5MiRARG531ITlmZjLhV+YWCiQLzpVdq3vbhsbCrlkcmk60u6tpJqjXfixIka+L2WS7DgC+Wff4ADh0kP7EhOMkuRTqfIZNIN61xrXZc9DEPGxsYS4C0RaOvcxK53D+L0PNUwnm3bpr09RTrd1rx0WmPbNmEYcurUqabgLZUg+8L76zsxWxaVSoUzZ84sC54g4LruiifY1UwpVd8PisUihUJhRfAEAd/3/zWBWjlaAW8gkM/n/9P/fK2AA/wDBrxkMKMQfQgAAAAASUVORK5CYII=]]></data>
	</file>
	<file>
	  <filename>/images/unknown.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAADPElEQVR42mL8//8/w8yZM/8z0BlUVlbKvXv37jFAALHABNLT0+lmOdDDDKysrNJA5mOAAGJBlli6l4EBGCAMv/8wMPwC4b9A9m8Ghr9/oew/CPwLSv8BiQPxnz8QvfjAv39AO6ohbEbGP2DVAAGE4gCQyL//EIPgmAFK/0MVQ9aDrB4nYETVBwMAAYTiADN1iCEgR/wD+uovjP0PiqHsP0AJEPsvkADx/4LV/gM7Euasf/9gzgOZ+R8aAiCaA8UBAAGE4gA1GWJiEBxOyP5HYHhQ/IN4BKTuH8QBMAxzwO/frGAaIIBYSE1AEDsYwYZBfAQNNSQ2TB5BQ+IARLNxQsxhhdjPABBATKRZ/h/NNwwobGxqkfn//v3DUAcQQEzkZCNsjsAmjiwHAn9AWQUNAAQQE7mWYrMAl+Uw3/8G5WkogLEBAoiJ0kIFW1RgY4N8jy2qAAKIiZy4JzYdIAqgf8Cs+peBiQnTOoAAYiE36AmFBAzDgp6RkRGM0QFAALEQYzmxIYGuB2Q5KOixWQwDAAHEQko8EwoRZDFQkMNSPT4HAAQQC6mJDFvco2OQxSDf47MYBgACiIWY4CclHcBSOzGWgwBAAKE4AJRYWGFlJAmJE5bKYSUdsZaDAEAAoTjgy5cvDMzMzAwsLCzgLIOcbbClbpClyCFDisUwABBAKA4AGQAy+OfPn3DD0A3FFg3kWAwDAAHEgs0gfAZSYhkIgDyHDAACiIWahsOLV2DU4TILFMWQ6hiS1gACiAVdklBKJwYsXbqUmEQMdiFAAFE1BED6QQkTBHx9fcGJGZSmQBjkMZCvQezGxsZdr169ugdSBxBAVHcAzAxRUVGsWbq+vn7PjBkzkoHMVyA+QADRzAE/fvyAhwYbGxuYrq2t3dPW1pYIZD6B6QEIICYGGgFQofbr1y9w0IPo6upqDMtBACCAaBYCIAeAEjXI8tbW1j3d3d0YloMAQABR3QGw0hNEf/v2jaGnp2dPX18fVstBACCAUBwASrWUZENYSQoCr1+/Zqirq1uwdu3aGiD3KS49AAGE4oDv379T7ABYKBYWFk7ctWtXBSg94tMDEEAsyD1WagKg5bWELAcBgAADAJLuk5yS/dPUAAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/user-report-icon.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAJK0lEQVR42tWbaUxb2RXHj1fAZgmB2Oz7TlYgEwgl00YUKVJnlKmm0kTNKB+mk2+V3OXDtFVGTVR12khpGwmpqdJUg5pGmiSdoZOENpmM2gGGEIY17IsxZnEIhLAEg/H2eu/jmtjGPL/nCzYc6ej5nfcw/v/eOefde/0sAp42MzMThzYZyEXI+P7ZptnKygoYDAZoaWmZOnv2bO9mvS8vJUj8L9DmN8jFflfuZhcuXFhCduLq1au1fgFArvyYGJlEIgm0fjh//jx0dnbOS6XSipqamiZ/AHgdbf6HxdtstkDrh0uXLkFXVxeYzeZ59Jkq7t27RwWBN4BAC3dYZWUl9PX1YQBrEKqrq32GsOMAoNqHwcFBsFgsLAS0nUfVWXHr1i2fIOw4AFVVVaDVasFqtbIQiLMQbty4IRiCVwDPnz9/Hd32tg0AJBJ0Oh3bj5whoNcsBARIEIQdB+DmzZug1+tZAA4IDndkwrVr13hD4AUA1pUAA9BVCeKlUZCE7fErgH+2BYNumgG73b4GwRkEhoAb45UrV3hB8Apgenp6XQaIFvVgf3gaQrK+BdbZCb8CaJqIhkfT6SwAh3vIhvm4uLiKc+fOeYXgEwCYGwDLF2eAsSz7VTw2OyOGRtNR0FlSwWYXgYQxsRDkYTFgF8kAj1cYhgFUCvO5ubnfqaioaKMGAO4lgACY7r7td/FcFvy92wC7slxiCwsLmvT09MtUAKamptZlAIMAGKu/H2jNLqY8+SmI3ACgstDExMTQAwC3DGBmB2Dhs7cCrdnFwt/6DESRWe5hjUqlogPw7NmzdRlgn+2HuVsnA63ZxXb9oBrEkdkuMdQLNGq1mh4AuGWAyPQcpqqO4f8QaN3kA4lBdaYWmOAo9yP0ACYnJ9cBwJ3WMv41WF9oAy2dNVlUBkjjj3qardL3gKdPn3ocCQZiVYjLGA/ZiEsgNjaWHgBso8mQQKMHYDAYdjQANCKkAzAxMSF4MmRH2fjk2SL75vvUoSAOULXgEoiPj6cDMD4+LgiADYn/8MEANOumcaOAkrQ98GF55joIK2Y0hfWyxIb7jCI4iIbB5gAAASVQNzIHv77bwU4YV0UAnH/jIJQmR7ic9/l/G1gI3qyitAgiQpU+A0hISKADMDY2JgjA378Zg48bhlxiPyrLhFMFCS6xu181gmnFzAtAuFLhM4DExEQ6AKOjo4JKoHHkBfzy0xaX2MW3i6AoKdIlhhOE4TGQElPcbnEPSEpKogOg1+sFARCJxfCHBz1wp22E3X+zIAV+Up7LS+xmGwaQnJxMB2BkZIQ3gBUrA5UPe+BQSjTsS1i94j2GORieWoAzpRl+vxtgACkpKXQAdDodLwBY/I8/roWhyTkIkkngL+8fh9AgGZz58xdgNFmgMF0Nv3unGCTkP/6n/htY5tEDuOy1fdkQr4rmBJCamkoHYHh4mBeAf7ePwcV/vVqBSooOB1WEApq1k2uxj35YBsUZKvZ1TV0TmC1WKgCFeZmQGMO5JkkPQKvV8gIwNrMEP/vbl2DaQFS4Igguv18OUUo5u2+x2cFqpfuqLSQIvxdnb9GkpaXRARgaGuLdA/AscaNJEm6CAfhukX5JbHBwcFt9LyAUQEZGBh2AgYGBHQsAN8GsrCw6AP39/ZwA2vuHeY3otsJi9+yG5FgVJ4Ds7Gw6AH19fZwAHjxq8zqp2SqLV0XBgaxUTgA5OTl0AHp7ezkBzL5cQmMAutuZrxYWEgzKYDkngNzcXDoAPT09O3pBJC8vjw5Ad3e3YABiNB+wgISdCkvs1oDMAxwA8vPz6QB0dnYKugvgscAd7SLc7lj90vSdgkQ4kaII1PNFmr1799IBePLkiSAAukWAD+50g81uJ0DEcPGNfEh2W9No6dV6nQvgQVVBThoZ8Qk33AP2799PB6Cjo0MQgDuDC1DVqHOJvXc0DU6kh7nEvmrt4XX3eC0/A8IUIT4DOHDgAB2A9vZ2QT2gYWIZ/vhln0vs5+U5cCTOVYSVEYGVZAmXhUjx193ez9vANAcPHqQD0NraKmwkKJHBB5/3gHZqnt3NVEfAR2/mAWP1vv63BaY5dOgQHYCWlhbeAKRSKTSOvoQENBXWEwDJqgh4aVyG7Cg5+yCDPw2XQGFhIR2A5uZmXiUglcngr1+PQE27HmJ2KeFPpw6DFL37Tz9pQVPlRXi3LBtO7lOxj7Bg69MbwEw5HU6JiYZwJWd/0BQVFdEBaGpq4pUB7YYl+G1189p+cVYcJOwOhduNA2ux358qgdRIGfv6UdfQ2p3CV8tMUIN6dwTXKZrDhw/TAXj8+DEvAIMzZvjVP+o3PI5Xdy+/921QK1b/pZkRU88hFDIJyvONIeISOHLkCB2AxsZGfiWA6n/WZIcVi2dRiiAphEoZf/cBTXFxMR2AhoaGHbsegAGUlJTQAaivr9/RAEpLS+kA1NXVcZbA9PwiWCi7ua8WpghGU2LOL081ZWVlWwugbWgMdfPAzPaiwpWQGhPFdcrWA5hdtqLGF5BRHnv1lTLOnzFtPQDc/QP1WyL8mLyXuwo9gNra2h3bBPE44NixY3QA7t+/n61QKPq8nbcdDWXIu8ePH78uGMD169dxXIRSWySTyUSRkZGfyOXy7fVwsBez2Wzds7OzpQjCotlsZh9HOH369LpuLSKCpWgT5ObByPHAXYFKIBRlwXcREPwbQjk5JnEDKCFxOfDILB8NC8DLSCas0S1uI3EzSv0Fo9FYg/rDDNpfQm4hx1acHQGxipB4LDIReQ5y/BwLvq/sQh5BBOHFrFAnwTimIHCchYrdAGw2BMYNgN3tmIWINTkBWURuJDE8P59DjqGMI8dlPYYBYDEFyMuR46eNVUS80kmQlAgWO7nIaess1pN4X4A4BHPFHPt2p63DMRCrEzAjgTCFvB/5Q+StIpL+sbD6w2ic4rsJgHDiGAAuiTCydYiREUhcV9zXrOC62p7OMRLBjhhO8Zdki48vEMcAXiA3IMdPcj119AAx+ZAOl8GrPiAlMSW8SnsRiYU7QfFkMnKOAoT/8BqLXiIffKORlkPsAhHqAGAhUMwkCxz1byEx1lEPsG94RRx3ArLrnO7OV1fiIQ5u58gIRF9KwEo+tJ3jHHzMBut7gqMs2H1PdwBs/we+9ztU60SvBAAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/video.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAHYklEQVR42mL8//8/Q35+/gUFBQXV379//wXxQRgG0NmMjIwMyABZHh1gkwPqZwSK/3/+/PnlKVOmWAMEYHSMUgCGQRgadDDoUTxZr+F99VuQVoZl+19+Eh4h5HrhPecc7v6VQESICDAzMvPwzmaGtRb23qiq43/Vh3pXRKCqo9kjgFhgEiBDr1+/zsDNzQ228NOnT2DDJSQkGM6ePQuWf/fuHcPDhw8Ztm3bBrb869evDD9//mQgBbCysjLcv38fzgcIIBYYA2QgyAKQoSAsJCTE8Pr1a7AcyDEcHBwMoqKiDOfOnWPg5ORkAEYX3PcgvfiiCCYGUs/CwoKiBiCA4CHAy8vLYG1tDVYE4oMUqqqqgoNMX18fbCGIDVIDokHqYGqRHYBsMYwPY4PUsbGxMfDz88PlAAIIHgIgQ2VkZBioDdAdAbIHFMUwcYAAYiHHQGTfgRLmxYsXGUAJ2NbWFhy8oPQCk0cOHVh0gEIXBgACiIkc38ByCsjyTZs2Mdjb2zM4OzszNDQ0gA2HWYCeJkB89FwDEEBkhQDIUBBev349Q2xsLIOenh6DibERw6SJE8G5oqOjA5zaYUGNnAbQAUAAsZAa9DDL161bx5CYmMigra3N4Ofry2BgasOgqWfEUFKQw3Dt2jWGpUuXMvDx8YHLEmTfgxyGDAACiIlcn6elpTGoqakx2NpYMUgpaTPI6tow+IYnMcyZvxhYbpxhCA4OZvj8+TM4+yL7Hj2bAgQQEyklGEjzhg0bGLKyssA5Rltbi0FZ25zB0M6bgYWZkeH3HwYGN99ghh279zM8f/6MISAggOHLly9gX4N8j245CAAEEBOxPgeBFStWMBQUFDAICwszSIiLMfwFpnZ5dS1g6cnMwAj0IEjVr98MDOo62gxbtu0AFtuvGQIDA8GOAIUELASQHQIQQAQdAFPc0tLCUFxcDC6Qvn79zGBu68LgG5bIcO7QDoZXj58wgMxnYoQ4AhTtSooKDLt37QaXrjExMeC0gF4KggBAABEVBSDLFyxYACyCORiePXvGYO3gwZCSW8Lg5OnCYGHrzHBy30aGd69eMrCygRwMLBuApn79/odBUkqKYcaMGQyHDh0CJ0x2dnYMBwAEEAuhKhVk+ZIlSxh+/PjB8PTpUwYnN1+Glt5pDKwswNryKwODnrExAxfQYVdO7mPgtHVnEBETYvj59QsDE+s/hi9/mcBlA6j4BuUWUAEFSkvIACCA8GbD5uZmhlWrVjF8+/YNmKieg2vKf/+A5f8/kEHM4CD/A6ypVbW0Gbi4OBke3DzP8OurHAM3BwvDb2DCA5URoCgDJVweHh5wuQAqvJABQAAxISc2UCECK6lAlq9duxaclR4/fsxQ19zOcPfZBwYpKQmG5MhAhs+fvjJwsEPi/C8w9cspKYEt+frhNcN3oIOjo6PBZoFKSlDlA2tToAOAAEIJD5AGUBCBChGQz0EJB1T/d3R2M9RXlTHw87IwTJk1h0FWTp4hLz2R4d2nbwzsnAzgBHj/1k1glHxmeA1ssIAsB/l048aN4MIIZDnIXBhGBgABhMKD5XUQBoUGiB8VFcVQXlbC8AsYMMBkAPQxI0P35KkM0sAEVlOcw/Dw2WeGvTv3Mlw9d4Lh5cuXDLm5eQxiYmIMa9asgVsOMxM9C4IAQABhpAGQr8PDw8Gto5UrV4ITzunTZxhMTU0YvjNC8vl/RiaGus4JDN1NtQx58X4MXz59ZBAQ4Ge4e/cuQ1BQEENvby84SmGWY8vWMAAQQEzYJEFRAUoDIIecPHmSob+/n+HU+cvgoAZlmD9AR7AAi3QFJRWGv7++A33Kw3D+/HmG0NBQsFpQsYtc5+MrXwACiAVdEIRBBoBSL8gRIEMWLlzIwMnByRAWm8RgYmXFAMwIDDs2bmE4uncTg4SkJMPx4yfAdUNXVxdY3/Tp01FqPvT2Ayh6gfJgAYAAwuoAWEMCZBioHACxQY74DcxzP37/BUfTkd0bGHh5eBn27tsHLulAlsNayiAcFxcHzhXIDgEVx69evQKVDS9mzZoVNHPmTAaAAMJbDoA0g9JAW1sb2OWTJk0C8n8zKAOzHC8vDzB/bwRHU3d3N9hykFqYB5BTPQx/+PAB1Bx/CQwhW6CSByB1AAEEDpqcnJzroCAB+vg/MHgwMEgcBIAl4n9JScn/7u7u/5WUlP6XlpaCxYEWw9UC4/5/X1/ff6BP/wMrITAGmQ1sYf8H1qLPgXaqIEcNQAAxYYsCdAzrN4DyN6hsBxXLKSkpDJ2dnfBgR89mIHFQFIJCDlSK1tXVvZg2bZoNUOoOsp0AAURSiwjkCF9g68fHxwccpMiNT3QAK/dfvHgBSh8voMF+F10dQACxYPM9oXQBUgMrsnHlc1AjBGT5hAkTQJbbYLMcBAACiAW9JEQvKskBoHof1EwHdj5x+hwGAAII1FNlyM7OvqKoqKgN9B2od/yfEstBvV9gYmQEthteAdOLLXqco0crQAAxQptcIkC+DqicAIlToUPECLX4IaF0BRBgAG4Y+/r2qXM2AAAAAElFTkSuQmCC]]></data>
	</file>
	<file>
	  <filename>/images/wordprocessing.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAACXBIWXMAAAsTAAALEwEAmpwYAAAABGdBTUEAALGOfPtRkwAAACBjSFJNAAB6JQAAgIMAAPn/AACA6QAAdTAAAOpgAAA6mAAAF2+SX8VGAAAH+UlEQVR42mL8//8/Q35+/gUFBUW133/+/AFyGRgZGRhA4iAApcBiDFD2fyQSREFZeMX+QwlGIPj//+//58+eXZkyZYoVQACxgMSZGBnZ07MLOD99Y2BgA4r8+P0fTP8E0iCLQXZ//fkP7CiQQf/+QWkg/98/kLlACBT7B7IDREMdAJIH6QHzoWpBhqmJszA0VBVygewGCEADlRsBCMMwcbABJTswKmsxQqhoqJgA4i8oQNxYJ8k+2UNLpw6sm2IaAfeCS+NXCvZTkI6bwQLGbdmC/oCwCwfVnJg8uYr5R+oF0jz++bIYouuRlvk9qtYjAE1krAMgEMLQtrCYOPj//+eqi+PdIZwnCQOFhPTVf1Al9GC+I86r4diJ+xmQgH1zmAueLjg4qYhYdAKWgzTATlhqzQIqR3Nf99lRuQpBfXGuegWgkYxSAIRhGBrsWLuJ+CfiHbz/xTZ0zoq1YL5K8xNeEv6eJgH2rfidFkUSxjp2x6iq5kWknFFLxXk1Q0oWKjijdjTcqp5oIELvHcKCyOz/b0eP8VejRxQwJ/JaPr0CEEnGOgjCABB9ajvQgiN1cGDp/3+UJA6g2LQTtEpLInzAJe/enfgfrVCl8MB9HEpV/GLFOcaS5DUOGGO4tR399CS8R6SUG5AQF+bTArm19x5d13mmBXu3NFfNtwDs58xmstI5HQpWAcTCgAS+AX3CxsEJiQpgXDECw/PTp/cM7BzcDD9+/mG4d/8Rw8+fPxk4ufkYfvz4wfD1+y+wb0FBrK2tDXQ4Fzi0QAkOJPbtx2+k3PQfyv7LwMbGBrcTIIBQHGBsbAxng4IMZAjMAEZoxP0DJ2UEgFkI8hlIDQswWkBqQGLMwOhAdgBI/A8oVJEAQACqyBgHACACgldS7v8/qdGoZCQuoUIWgwMQEbMZjdx9TkoRPs2wqvoQ6HaYmb3MHCDeQ54a4gVHJ+kAtADCcMD379/BmniAcQnS9O7dOwZubm4wBlkOCnKYQ0C+BvkIZDlIHOQAWJTAMChEQBaDxEFYSEgIxQEAAaiiYxQAABCGgf//tdwQqC4KSo31AbgeIXH0Ls9SSwgBMQcQaI5Y5re5IuvT2bqXFCeAUBygoaEBDnY+Pj54vLEDsxLMQFAiA7FBNAjw8vKC+U+fPgU78MuXL2AHfvv2DRw6/Pz84FABJVwYHxaVMAAQQCgOAAURzJf///8DF07A+gFsCD8fPzDv/oMUjkDHfPyISC8fP34ERx8oNEAOBvkW5BgQBoUgKFpBjgaZDeIjA4AAQuGBFDx/+Ybh3aev8FoIlI9BFr37+A0SfFDxX79+MMjJSoMtAxkKCgGQA0COBQEQH5Q+QNEIUgMKAZB+kBhyKAAEEKoDgPj560/A0uw7vCYEhcTfP8A0wfoL5BwGmBtYGP8yyMsywLMVKJhBoQGKFpAYyNeg3AAKBRANcgQoFNCjACCAUBwACnJ+HnYGVmhBAS5CwQmNAVgYscNDAFzT/f0NrvlAvoelGZjPQVEJSpCwwgfkAJAYyHGgkEAGAAGE6gCgD1SVZIAK+aAWgbLPH3D5z8/PB04D4EIHWKGA4v3fv7/g8h5UTMMKGliCZUSqcWAFFShkkMVBACCAUBwACjZQLvj/H9Eg+fsXlAi/MTAyIQodkCFfgSkdlKrBlQy0sEHPYjCL/0MrNGwAIIBQHPAPWG+Dgo6NjRVsCcinoNoM1ADhAeYMcAgA2SDHgBwG8zEoG4LiFsYHeQRWNINCChT3oDQiLS3NICsrCy/MQAAggFDzBNDgZ8Bc8PbDF2h8M4At/fnzB8Prd5/g8Q9KLX9+/wQmQil4IQMK3k+fPsGzHSh0YGUCKHeA0sGLFy/AJSEoq8IAQACxoAQdkH755jOwFvyBFI6gXPCbgeXTH5T2HQvjP3AuADkAlE1BloIwqCQVEBAAR+VfcOhB0gTI0vfv32MkQoAAQgkBkKQgHycwF7Cj1Irfv30F5gI2RAsV7K6/8MQmKioKDgFYigflBBEREXi+h9UHoFCBlawwABBAGLlASV4SnF1giQ0UX+/ff2AQA1oC0whyKCi4YSEnISEB1w8SmzFjBkrCRE6cIL3QNAAWBAggFAeAXAoqOD5//gLXBEv5n798QWkbgIpoLmAcgwxEbyOAfB0XFwct0hEOAPkeZH5NTc3bmTNnRoAcChBAKA4ABR8okcB8D/MRMo1c28HiE7kRAhMHiYHMg/kallbq6ureAvsDTkDhmyA5gABiQc6zFy5cALseFkygLAlKUCDNX6AhALIIFPxSUlJgPihhgcp7UGkISvGghAiqD0DmgLIezOcgdmVl5dtJkyY5A4UuwewFCCAm9IIDZBDIAWJiYuC8DTIMlJdBCQjkIxAflK9BqRyUvUCJDWQ4yIGw1hAIgxwAkgcBkFqo5S5A7kVkOwECCCUKQBpAjoA1SBCl4V+Gt2/fgh0HK2xAGFbZwBomIIfDqmhYIgTJt7S0vJ08ebIzuuUgABBAGGkAFOyw5hjIEJClr169glugpqbG8Pr1a3BWAwUtrHqF1XSwFhIoDYB83t3djdNyEAAIIBbkLAhKtSBHwJpRsAYKyHCQRaB4B6kBFan4wM6dO8HpZOLEibAEdwmXWoAAYgRZkJubew3oM03kJjR6+YAuhtNAUH8AmBifPHnydurUqY5Aocu41ILMBAggRmgJpQIsfByBQc4E6j0zUACA5oHrW2C5fxRIXSGglgEgwAAnIungv6dsbwAAAABJRU5ErkJggg==]]></data>
	</file>
	<file>
	  <filename>/images/zip.png</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAABGdBTUEAAK/INwWK6QAAAZxJREFUeJzt1r9LVWEcx/H3Oc9zO5pYgSKCk1BERD9GhxxcIiHFhGthDUqLk9fBazfScPJG/QElbQ7heAVncQgR7yCCdRGx5YIhkXJ/1dXjc74tqTSYQzxn6bzWB573Z/zCKXoZTTVz5dpp71b1M/o6U7cqjbR0hh6Pk0jnB0uy8mBTLtB8L9R4n0qkt57siiyKfOz5bMIYoI/jtYn0VO/LVFN7DaXcT4JKgLJd/z1ADTSm0lPxiWTD1RjVgo8uKjzluaAc6wPu8Gi4qzWe3ChucZD1BXHQh9rJf9sxBiO2Bzgx6m6AuW4wDqijoAMEAdUlIG97RCQSiUQikf+b9ZOrg4d3+72RzqoqHV9X2tdO2T9Ub3n+3nafbmfwzV7qQAofKrI3U5YfM/uyfvOr9DCUg9gtffYX/0bOUcUI5rshhmZ7ucz4p8lshukEsGZ9gFsD/m6ADmD7S4Wx+fHsnJkeBpYBXNsD0C71lz2KxvBsYSI755/EQxng1Wu3JIbk7IuVTOHdH/FQ3L/09NXjprEc0BZq+Mh5Lt7+W/wXG9yT6kNdK40AAAAASUVORK5CYII=]]></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[PD9waHAKJGxhbmdbJ3BhcmFtX3N1bW1hcnlwYWdlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBjYXRlZ29yeWxpc3QgYWN0aW9uIHRoaXMgcGFyYW1ldGVyIGFjY2VwdHMgYSBwYWdlIGFsaWFzIG9yIGlkIG9mIHRoZSBwYWdlIHRvIGxpbmsgdG8gZm9yIHNwZWNpZmljIGNhdGVnb3J5IHN1bW1hcnkgdmlld3MuJzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5bGlzdHRlbXBsYXRlJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBjYXRlZ29yeWxpc3QgYWN0aW9uLCB0aGlzIHBhcmFtZXRlciBhY2NlcHRzIHRoZSBuYW1lIG9mIGEgbm9uIGRlZmF1bHQgY2F0ZWdvcnkgbGlzdCB0ZW1wbGF0ZSB0byB2aWV3Lic7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeWxpc3RfdGVtcGxhdGUnXSA9ICdBZGQvRWRpdCBhIENhdGVnb3J5IExpc3QgVmlldyBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeWxpc3Rfc3lzZGVmYXVsdCddID0gJ1Byb3RvdHlwZSBDYXRlZ29yeSBMaXN0IFZpZXcgVGVtcGxhdGUnOwokbGFuZ1snY2F0ZWdvcnlsaXN0X3RlbXBsYXRlcyddID0gJ0NhdGVnb3J5IExpc3QgVmlldyBUZW1wbGF0ZXMnOwokbGFuZ1snaW5kZXhfdW5pcXVld29yZHMnXSA9ICdJbmRleCBvbmx5IHVuaXF1ZSB3b3Jkcyc7CiRsYW5nWydyZWluZGV4J10gPSAnUmVpbmRleCc7CiRsYW5nWydpbmRleGluZ19zZXR0aW5ncyddID0gJ1NlYXJjaCBJbmRleGluZyBTZXR0aW5ncyc7CiRsYW5nWydpbmRleF90eHRmaWxlcyddID0gJ0luZGV4IFRleHQgZmlsZXMnOwokbGFuZ1snaW5kZXhfcGRmZmlsZXMnXSA9ICdJbmRleCBQREYgRmlsZXMnOwokbGFuZ1snYWxsb3dfY2hhbmdlZGF0ZSddID0gJ0FsbG93IHRoZSBhZG1pbmlzdHJhdG9yIHRvIGNoYW5nZSB0aGUgdXBsb2FkIGRhdGUnOwokbGFuZ1snbWlzc2luZyddID0gJ0ZpbGUgTWlzc2luZyEhISc7CiRsYW5nWydtaXNzaW5nX2ZpbGUnXSA9ICdUaGlzIGZpbGUgaXMgbWlzc2luZyc7CiRsYW5nWydwcm9tcHRfZnJpZW5kbHluYW1lJ10gPSAnRnJpZW5kbHkgbmFtZSBmb3IgdGhpcyBtb2R1bGUnOwokbGFuZ1snaW5mb19mcmllbmRseW5hbWUnXSA9ICdTcGVjaWZ5IGEgbmFtZSBmb3IgZm9yIHRoaXMgbW9kdWxlIGluIHRoZSBhZG1pbiBuYXZpZ2F0aW9uLiAgSXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBjbGVhciB0aGUgQ01TTVMgY2FjaGUgZm9yIHRoaXMgdG8gdGFrZSBlZmZlY3QnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlfcHJvYmxlbV9zJ10gPSAnQSBwYXRoIG9yIHBlcm1pc3Npb24gcHJvYmxlbSBleGlzdHMgd2l0aCB0aGlzIGNhdGVnb3J5JzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5X3Byb2JsZW0nXSA9ICdBIHBhdGggb3IgcGVybWlzc2lvbiBwcm9ibGVtIGV4aXN0cyB3aXRoIGNhdGVnb3J5ICVzJzsKJGxhbmdbJ2Vycm9yX2Nhbm5vdHJlbmFtZSddID0gJ0Vycm9yIHJlbmFtaW5nIGZpbGUnOwokbGFuZ1snZmllbGRfdXBsb2FkX3N1bW1hcnknXSA9ICdTdW1tYXJ5JzsKJGxhbmdbJ2ZpZWxkX2NhdGVnb3J5X2lkJ10gPSAnQ2F0ZWdvcnkgSUQnOwokbGFuZ1snZmllbGRfY2F0ZWdvcnlfbmFtZSddID0gJ0NhdGVnb3J5IE5hbWUnOwokbGFuZ1snZmllbGRfY2F0ZWdvcnlfcGF0aCddID0gJ0NhdGVnb3J5IFBhdGgnOwokbGFuZ1snZmllbGRfYXV0aG9yJ10gPSAnQXV0aG9yJzsKJGxhbmdbJ2ZpZWxkX2Rlc2NyaXB0aW9uJ10gPSAnRGVzY3JpcHRpb24nOwokbGFuZ1snbm91c2VyaW5mbyddID0gJ05vIHVzZXIgaW5mb3JtYXRpb24gYXZhaWxhYmxlJzsKJGxhbmdbJ2Vycm9yX21hdGNoaW5ncmVjb3JkcyddID0gJ05vIHJlY29yZHMgbWF0Y2hpbmcgeW91ciBjcml0ZXJhIHdlcmUgZm91bmQnOwokbGFuZ1snbXNnX3JlcG9ydF9zZW50J10gPSAnUmVwb3J0IFNlbnQnOwokbGFuZ1snZ2VuZXJhdGVkX2J5J10gPSAnR2VuZXJhdGVkIEJ5JzsKJGxhbmdbJ2dlbmVyYXRlZF9vbiddID0gJ0dlbmVyYXRlZCBPbic7CiRsYW5nWydzdGFydF9kYXRlJ10gPSAnU3RhcnQgRGF0ZSc7CiRsYW5nWydlbmRfZGF0ZSddID0gJ0VuZCBEYXRlJzsKJGxhbmdbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10gPSAnQ2F0ZWdvcnkgTmFtZSc7CiRsYW5nWydpbmZvX2ZpZWxkX2ZpbGVzJ10gPSAnVGhpcyBpcyBhbiBhdXRvY29tcGxldGUgZmllbGQsIHlvdSBjYW4gZW50ZXIgcGFydGlhbCBmaWxlbmFtZXMgZm9yIHRoZW0gdG8gYmUgYXV0byBjb21wbGV0ZWQuICBZb3UgY2FuIGFsc28gZW50ZXIgZmlsZW5hbWUgcGF0dGVybnMgaS5lOiAgZm9vKmpwZy4gIFRoaXMgbGlzdCB3aWxsIGJlIGNsZWFuZWQgYW5kIGNoZWNrIGZvciB2YWxpZGl0eSB3aGVuIHRoZSBmb3JtIGlzIHN1Ym1pdHRlZCc7CiRsYW5nWydwcm9tcHRfZmlsZXMnXSA9ICdGaWxlcyc7CiRsYW5nWydyZXBvcnRfZG93bmxvYWRzYnl1c2VyJ10gPSAnRG93bmxvYWRzIEJ5IFVzZXInOwokbGFuZ1sncmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZSddID0gJ0Rvd25sb2FkcyBCeSBGaWxlJzsKJGxhbmdbJ3Byb21wdF9vdXRwdXRfdGVtcGxhdGUnXSA9ICdPdXRwdXQgVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfZG93bmxvYWRzYnlmaWxlX3RwbCddID0gJ0Rvd25sb2FkcyBCeSBGaWxlIFJlcG9ydCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9kb3dubG9hZHNieXVzZXJfdHBsJ10gPSAnRG93bmxvYWRzIEJ5IFVzZXIgUmVwb3J0IFRlbXBsYXRlJzsKJGxhbmdbJ3JwdF9kb3dubG9hZHNieWZpbGVfdHBsJ10gPSAnRG93bmxvYWRzIEJ5IEZpbGUgUmVwb3J0cyc7CiRsYW5nWydycHRfZG93bmxvYWRzYnl1c2VyX3RwbCddID0gJ0Rvd25sb2FkcyBCeSBVc2VyIFJlcG9ydHMnOwokbGFuZ1sndXNlcnByb3AnXSA9ICdQcm9wZXJ0eSc7CiRsYW5nWydmaWVsZF9sYXRlc3RfZG93bmxvYWQnXSA9ICdMYXRlc3QgRG93bmxvYWQnOwokbGFuZ1snZmllbGQnXSA9ICdGaWVsZCc7CiRsYW5nWydjbG9zZSddID0gJ0Nsb3NlJzsKJGxhbmdbJ2Vycm9yX2ludGVybmFsJ10gPSAnQW4gaW50ZXJuYWwgZXJyb3Igb2NjdXJyZWQnOwokbGFuZ1snZXJyb3Jfbm9wcm9maWxlJ10gPSAnTm8gcmVwb3J0IHByb2ZpbGUgZGV0ZWN0ZWQnOwokbGFuZ1snZXhwb3J0X2h0bWxlbWFpbCddID0gJ0hUTUwgUmVwb3J0ICh2aWEgZW1haWwpJzsKJGxhbmdbJ2V4cG9ydF9odG1sJ10gPSAnSFRNTCBSZXBvcnQgKG5ldyB3aW5kb3cpJzsKJGxhbmdbJ2V4cG9ydF9jc3YnXSA9ICdBU0NJSSAoY3N2KSBmaWxlJzsKJGxhbmdbJ3Byb21wdF9vdXRwdXQnXSA9ICdPdXRwdXQgRm9ybWF0JzsKJGxhbmdbJ3Byb21wdF9yZXBvcnRfdHlwZSddID0gJ1JlcG9ydCBUeXBlJzsKJGxhbmdbJ3JlcG9ydF9zdW1tYXJ5J10gPSAnU3VtbWFyeSc7CiRsYW5nWydyZXBvcnRfZGV0YWlsJ10gPSAnRGV0YWlsZWQnOwokbGFuZ1snaW5mb19mZXVfdXNlcnMnXSA9ICdUaGlzIGlzIGFuIGF1dG9jb21wbGV0ZSBmaWVsZCwgeW91IGNhbiBlbnRlciBwYXJ0aWFsIHVzZXJuYW1lcyBmb3IgdGhlbSB0byBiZSBhdXRvIGNvbXBsZXRlZC4gIFlvdSBjYW4gYWxzbyBlbnRlciB1c2VybmFtZSBwYXR0ZXJucyBpLmU6ICZxdW90O2dlb3JnKiZxdW90Oy4gVGhpcyBsaXN0IHdpbGwgYmUgY2xlYW5lZCBhbmQgY2hlY2sgZm9yIHZhbGlkaXR5IHdoZW4gdGhlIGZvcm0gaXMgc3VibWl0dGVkJzsKJGxhbmdbJ3Byb21wdF9zdGFydF9kYXRlJ10gPSAnU3RhcnQgRGF0ZSc7CiRsYW5nWydwcm9tcHRfZW5kX2RhdGUnXSA9ICdFbmQgRGF0ZSc7CiRsYW5nWydwcm9tcHRfYXNjZW5kaW5nJ10gPSAnQXNjZW5kaW5nJzsKJGxhbmdbJ3Byb21wdF9kZXNjZW5kaW5nJ10gPSAnRGVzY2VuZGluZyc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdCddID0gJ0RlZmF1bHQnOwokbGFuZ1sncHJvbXB0X3NvcnRvcmRlciddID0gJ1NvcnQgT3JkZXInOwokbGFuZ1snZmllbGRfZG93bmxvYWRfZGF0ZSddID0gJ0Rvd25sb2FkIERhdGUnOwokbGFuZ1snZmllbGRfZG93bmxvYWRfdXNlciddID0gJ0Rvd25sb2FkIFVzZXInOwokbGFuZ1snZmllbGRfdXBsb2FkX2lkJ10gPSAnVXBsb2FkIElkJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9pZCddID0gJ0NhdGVnb3J5IElkJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10gPSAnQ2F0ZWdvcnkgTmFtZSc7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfcGF0aCddID0gJ0NhdGVnb3J5IFBhdGgnOwokbGFuZ1snZmllbGRfdXBsb2FkX25hbWUnXSA9ICdGaWxlbmFtZSc7CiRsYW5nWydmaWVsZF91cGxvYWRfYXV0aG9yJ10gPSAnQXV0aG9yJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9kZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9pcCddID0gJ1VwbG9hZCBJUCBBZGRyZXNzJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9zaXplJ10gPSAnRmlsZSBTaXplJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9kYXRlJ10gPSAnVXBsb2FkIERhdGUnOwokbGFuZ1snZmllbGRfZG93bmxvYWRzJ10gPSAnTnVtYmVyIG9mIERvd25sb2Fkcyc7CiRsYW5nWydwcm9tcHRfZmllbGRsaXN0J10gPSAnU2VsZWN0IE91dHB1dCBGaWVsZHMnOwokbGFuZ1sncHJvbXB0X3NvcnRpbmcnXSA9ICdTb3J0IEJ5JzsKJGxhbmdbJ2Vycm9yX25vdXNlcnNmb3VuZCddID0gJ0FmdGVyIHZhbGlkYXRpbmcgdGhlIGlucHV0LCBubyBtYXRjaGluZyB1c2VycyBjb3VsZCBiZSBmb3VuZCc7CiRsYW5nWydvciddID0gJ09yJzsKJGxhbmdbJ3Byb21wdF9mZXVfdXNlcnMnXSA9ICdGRVUgVXNlcnMnOwokbGFuZ1sncHJvbXB0X2ZldV9ncm91cHMnXSA9ICdGRVUgR3JvdXBzJzsKJGxhbmdbJ291dHB1dCddID0gJ091dHB1dCc7CiRsYW5nWydlcnJvcl9ub2ZldSddID0gJ1RoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSAodmVyc2lvbiAxLjIxLjE1IG9yIGdyZWF0ZXIpIGlzIHJlcXVpcmVkIGZvciB0aGlzIG9wZXJhdGlvbic7CiRsYW5nWyd0aXRsZV9yZXBvcnRfZG93bmxvYWRzYnl1c2VyMiddID0gJ0Rvd25sb2FkcyBCeSBVc2VyIFJlcG9ydCc7CiRsYW5nWyd0aXRsZV9yZXBvcnRfZG93bmxvYWRzYnl1c2VyJ10gPSAnRG93bmxvYWRzIEJ5IFVzZXInOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZTInXSA9ICdEb3dubG9hZHMgQnkgRmlsZSBSZXBvcnQnOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZSddID0gJ0Rvd25sb2FkcyBCeSBGaWxlJzsKJGxhbmdbJ3JlcG9ydHMnXSA9ICdSZXBvcnRzJzsKJGxhbmdbJ3Byb21wdF9kb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1sncHJvbXB0X3Blcm1pc3Npb25zJ10gPSAnUGVybWlzc2lvbnMnOwokbGFuZ1sncHJvbXB0X2ZpZWxkcyddID0gJ0ZpZWxkcyc7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGUnXSA9ICdTZW5kIEZpbGUnOwokbGFuZ1snaW5mb19jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10gPSAnU2VsZWN0IHRoZSBGRVUgdXNlciBncm91cHMgdGhhdCBjYW4gdmlldyBuZXdseSB1cGxvYWRlZCBvciBzY2FubmVkIGZpbGVzLiAgVGhpcyB3aWxsIG5vdCBlZmZlY3QgdGhlIHBlcm1pc3Npb25zIG9mIGV4aXN0aW5nIGZpbGVzLiAgIEFkbWluaXN0cmF0b3JzIGNhbiBlZGl0IHRoZSBwZXJtaXNzaW9zbiBvZiBlYWNoIGZpbGUgd2hlbiBlZGl0aW5nIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdXBsb2FkZWQgZmlsZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddID0gJ0dyb3VwcyB0aGF0IGNhbiB2aWV3IG5ld2x5IHVwbG9hZGVkIG9yIHNjYW5uZWQgZmlsZXMnOwokbGFuZ1snaW5mb19jYXRlZ29yeV91c2VycGVybXMnXSA9ICdJZiB0aGlzIGlzIGVuYWJsZWQsIHlvdSBjYW4gY29udHJvbCB3aGF0IEZFVSBVc2VyIEdyb3VwcyBjYW4gdmlldyBpbmRpdmlkdWFsIGZpbGVzIHdpdGhpbiB0aGUgY2F0ZWdvcnknOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X3VzZXJwZXJtcyddID0gJ0NhbiB2aXNpYmlsaXR5IGJlIGNvbnRyb2xsZWQgYXQgdGhlIGZpbGUgbGV2ZWwgZm9yIHRoaXMgY2F0ZWdvcnknOwokbGFuZ1sncHJvbXB0X21vZGlmeWluZyddID0gJ01vZGlmeWluZyc7CiRsYW5nWydwcm9tcHRfdmlld2luZyddID0gJ1ZpZXdpbmcnOwokbGFuZ1sncHJvbXB0X2dlbmVyYWwnXSA9ICdHZW5lcmFsJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0NhbiBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5IGJlIGxpc3RlZCc7CiRsYW5nWydlcnJvcl9taXNzaW5ndmFsdWUnXSA9ICdBIHJlcXVpcmVkIHZhbHVlIGlzIG1pc3NpbmcnOwokbGFuZ1snZWRpdGVkJ10gPSAnRWRpdGVkICVzJzsKJGxhbmdbJ21vdmVkZmlsZSddID0gJ01vdmVkIEZpbGUgJXMgdG8gJXMnOwokbGFuZ1sncGFnZWxpbWl0J10gPSAnRmlsZXMgUGVyIFBhZ2UnOwokbGFuZ1sndmlldyddID0gJ1ZpZXcnOwokbGFuZ1snZWRpdF90aGlzX2ZpbGUnXSA9ICdFZGl0IFRoaXMgRmlsZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlfc2Nhbm5hYmxlJ10gPSAnQXV0b21hdGljYWxseSBzY2FuIHRoaXMgY2F0ZWdvcnkgZm9yIG5ldyBmaWxlcz8nOwokbGFuZ1snaW5mb19jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdXaGVuIGFjY2Vzc2VkIGZyb20gdGhlIGZyb250IGVuZCB0aGlzIGNhdGVnb3J5IGlzIGF1dG9tYXRpY2FsbHkgc2Nhbm5lZCBmb3IgbmV3IGZpbGVzJzsKJGxhbmdbJ3Byb21wdF90bF9hY2Nlc3MnXSA9ICdUaW1lIExpbWl0ZWQgQWNjZXNzJzsKJGxhbmdbJ3Byb21wdF9hbGxvd191cGxvYWRfc2VuZGZpbGUnXSA9ICdBbGxvdyBzZW5kaW5nIGZpbGVzIGltbWVkaWF0ZWx5IG9uIGFkbWluIHVwbG9hZCc7CiRsYW5nWydtc2dfYXV0b19kZWxldGVfZmlsZSddID0gJ0F1dG9tYXRpY2FsbHkgZGVsZXRlZCBleHBpcmVkIGZpbGU6ICVzJzsKJGxhbmdbJ21zZ19hdXRvX2RlbGV0ZV9maWxlX2ZhaWxlZCddID0gJ1Blcm1pc3Npb25zIHByb2JsZW0sIGF1dG8gZGVsZXRlIG9mICVzIGZhaWxlZCc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnU3BlY2lmeSBhIG51bWJlciBvZiBob3VycyBiZWZvcmUgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSBjYW4gYmUgZGVsZXRlZC4gIFVzZSBhIHZhbHVlIG9mIDAgdG8gaW5kaWNhdGUgdGhhdCBmaWxlcyBzaG91bGQgbm90IGJlIGRlbGV0ZWQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnTnVtYmVyIG9mIGhvdXJzIHVudGlsIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkgYXJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZCc7CiRsYW5nWydpbmZvX2RmbHRfY2F0ZWdvcnlfZXhwaXJ5J10gPSAnVGhlIGRlZmF1bHQgdmFsdWUgZm9yIG5ldyBjYXRlZ29yaWVzIHRoYXQgc3BlY2lmaWVzIGhvdyBsb25nIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkgZXhpc3QgYmVmb3JlIHRoZXkgYXJlIGF1dG9tYXRpY2FsbHkgZGVsZXRlZC4gIFVzZSBhIHZhbHVlIG9mIDAgdG8gaW5kaWNhdGUgbm8gZGVsZXRpb24nOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfZXhwaXJ5J10gPSAnQ2F0ZWdvcnkgZXhwaXJ5IHBlcmlvZCA8ZW0+KGhycyk8L2VtPic7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVsZXRhYmxlJ10gPSAnQXV0aG9yaXplZCB1c2VycyB3aWxsIGhhdmUgcGVybWlzc2lvbiB0byBkZWxldGUgdGhlc2UgZmlsZXMuICBUaGlzIG1lYW5zIHRoYXQgYSB1cmwgd2lsbCBiZSBwcm92aWRlZCBpbiB0aGUgYXBwcm9wcmlhdGUgdGVtcGxhdGVzIHRvIGFsbG93IGRlbGV0aW5nIG9mIHRoZSBmaWxlLiAgQSB3ZWJzaXRlIGRldmVsb3BlciBjYW4gdXNlIGFwcHJvcHJpYXRlIHNtYXJ0eSBsb2dpYyB0byBzaG93IGEgbGluayB0byBhdXRob3JpemVkIHVzZXJzLic7CiRsYW5nWydjb3B5X2ZpbGVzJ10gPSAnQ29weSBGaWxlcyc7CiRsYW5nWydlcnJvcl9maWxldG9vbGFyZ2UnXSA9ICdUaGUgZmlsZSB5b3UgYXR0ZW1wdGVkIHRvIHVwbG9hZGUgaXMgbGFyZ2VyIHRoYW4gdGhlIENNU01TIG1heGltdW0gdXBsb2FkIGZpbGUgc2l6ZSc7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWNhdGVnb3J5J10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGNhdGVnb3J5Pyc7CiRsYW5nWydlcnJvcl9kZWxldGUnXSA9ICdBbiBpdGVtIGNvdW5kIG5vdCBiZSBkZWxldGVkICglcyknOwokbGFuZ1snY29uZmlybV9jYXRfbXVsdGlhY3Rpb24nXSA9ICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gcGVyZm9ybSB0aGlzIGFjdGlvbiBvbiB0aGUgc2VsZWN0ZWQgY2F0ZWdvcmllcz8iOwokbGFuZ1snZXJyb3Jfbm90aGluZ19zZWxlY3RlZCddID0gJ0Vycm9yOiBOb3RoaW5nIHNlbGVjdGVkJzsKJGxhbmdbJ3dpdGhfc2VsZWN0ZWQnXSA9ICdXaXRoIFNlbGVjdGVkOic7CiRsYW5nWydlcnJvcl9yZXBsYWNlX21pc21hdGNoZWRfZmlsZWV4dCddID0gJ1doZW4gcmVwbGFjaW5nIGEgZmlsZSwgeW91IG11c3QgdXBsb2FkIGEgZmlsZSBvZiB0aGUgc2FtZSBleGFjdCB0eXBlIChieSBmaWxlIGV4dGVuc2lvbikuICBUaGUgZmlsZSB5b3Ugc2VsZWN0ZWQgZG9lcyBub3QgbWF0Y2ggdGhhdCBvZiB0aGUgb3JpZ2luYWwgZmlsZS4nOwokbGFuZ1sncmVwbGFjZSddID0gJ1JlcGxhY2UnOwokbGFuZ1snaW5mb19yZXBsYWNlZmlsZSddID0gJ1lvdSBtYXkgdXBsb2FkIGEgcmVwbGFjZW1lbnQgZmlsZSwgaWYgdGhlIGZpbGUgaXMgYW4gaW1hZ2UgdHlwZSwgYW5kIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSByZXBsYWNlbWVudCB0aHVtYm5haWwsIGEgbmV3IHRodW1ibmFpbCB3aWxsIGJlIGdlbmVyYXRlZCc7CiRsYW5nWydwcm9tcHRfcmVwbGFjZWZpbGUnXSA9ICdVcGxvYWQgcmVwbGFjZW1lbnQgZmlsZSc7CiRsYW5nWyd0aXRsZV9maXhzcGFjZXMnXSA9ICdGaXggc3BhY2VzIGluIHRoZSBmaWxlbmFtZSc7CiRsYW5nWydjYXRlZ29yeV9jb3BpZWQnXSA9ICdDYXRlZ29yeSBzdWNjZXNzZnVsbHkgY29waWVkJzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZXBhdGgnXSA9ICdQbGVhc2Ugc3BlY2lmeSBhIGRpcmVjdG9yeSBuYW1lIHRoYXQgaXMgZGlmZmVyZW50IGZyb20gdGhlIHNvdXJjZSwgYW5kIGlzIG5vdCBhbHJlYWR5IGluIHVzZSc7CiRsYW5nWydvcGVyYXRpb25fY2FuY2VsbGVkJ10gPSAnT3BlcmF0aW9uIENhbmNlbGxlZCc7CiRsYW5nWydzb3VyY2UnXSA9ICdTb3VyY2UnOwokbGFuZ1snZGVzdGluYXRpb24nXSA9ICdEZXN0aW5hdGlvbic7CiRsYW5nWydwcm9tcHRfY29weV9maWxlcyddID0gJ0NvcHkgY2F0ZWdvcnkgRmlsZXMnOwokbGFuZ1snaW5mb19jb3B5X2ZpbGVzJ10gPSAnQ29weSB0aGUgZmlsZXMgZnJvbSB0aGUgc291cmNlIGNhdGVnb3J5IHRvIHRoZSBkZXN0aW5hdGlvbiBjYXRlZ29yeSc7CiRsYW5nWydleHRyYSddID0gJ0V4dHJhJzsKJGxhbmdbJ2NvcHknXSA9ICdDb3B5JzsKJGxhbmdbJ3NlbGVjdG9uZSddID0gJ1NlbGVjdCBPbmUnOwokbGFuZ1snYXV0b3dhdGVybWFyayddID0gJ0F1dG9tYXRpY2FsbCBwbGFjZSB3YXRlcm1hcmtzIG9uIGltYWdlcyc7CiRsYW5nWydpbWFnZV9zZXR0aW5ncyddID0gJ0ltYWdlIFNldHRpbmdzJzsKJGxhbmdbJ3Byb21wdF9nZXRmaWxlX3Jlc3VsdHBhZ2UnXSA9ICdQYWdlIHRvIHVzZSBmb3IgZXJyb3JzIG9yIG90aGVyIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gZmlsZSBkb3dubG9hZGluZyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2tleSddID0gJ1RoZSB1cGxvYWQga2V5IHNwZWNpZmllZCBpcyBpbnZhbGlkIChtYXliZSBpdCBoYXMgcmVhY2hlZCBpdHMgbWF4aW11bSBkb3dubG9hZCBjYXBhY2l0eSBvciBoYXMgZXhwaXJlZCknOwokbGFuZ1snZGZsdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAneyRzaXRlbmFtZX0gLSBZb3UgaGF2ZSBiZWVuIGdyYW50ZWQgYWNjZXNzIHRvIHskZW50cnktPm5hbWV8c3RyaXBfdGFnc30gZm9yIGEgbGltaXRlZCB0aW1lJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnU3ViamVjdCBmb3IgZW1haWwgY3JlYXRlZCB3aGVuIHNlbmRpbmcgYSB0aW1lIGxpbWl0ZWQgVVJMJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJ10gPSAnQXV0byBkZWxldGUgZXhwaXJlZCBlbnRyaWVzIGFmdGVyIE4gaG91cnMgPGVtPihzcGVjaWZ5IDAgdG8gZGlzYWJsZSBhdXRvZGVsZXRlKTwvZW0+Oic7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfc2VuZGl0J10gPSAnU2VuZCB0aGlzIHVybCB0byB0aGUgZGVzaWduYXRlZCBlbWFpbCBhZGRyZXNzPyc7CiRsYW5nWyd1cmxfa2V5J10gPSAnVVJMIEtleSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRlZCc7CiRsYW5nWydleHBpcmVzJ10gPSAnRXhwaXJlcyc7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0FkZC9FZGl0IFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1sndGltZV9saW1pdGVkX2tleV9hZGRlZCddID0gJ1RpbWUgTGltaXRlZCBLZXkgQWRkZWQnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnTnVtYmVyIG9mIEhvdXJzJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdOdW1iZXIgb2YgRG93bmxvYWRzJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFbWFpbCBBZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ0EgcmVxdWlyZWQgdmFsdWUgaXMgbWlzc2luZyBvciBpbnZhbGlkOiAlcyc7CiRsYW5nWydhZGRfdGltZWxpbWl0ZWRfa2V5J10gPSAnQWRkIFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1snZmlsZV9pbmZvMiddID0gJ0ZpbGUgJXMgKGlkPSVkKSc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddPSAnU3BlY2lmeSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgdGltZXMgdGhhdCBhIGZpbGUgaWRlbnRpZmllZCBieSBhIHBhcnRpY3VsYXIga2V5IGNhbiBiZSBkb3dubG9hZGVkJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdEZWZhdWx0IE51bWJlciBvZiBEb3dubG9hZHMnOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9ob3VycyddID0gJ1NwZWNpZnkgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIGhvdXJzIHRoYXQgYSB0aW1lIGxpbWl0ZWQga2V5IGlzIHZhbGlkIGZvci4gIFNwZWNpZnkgMCBmb3IgdW5saW1pdGVkJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9ob3VycyddID0gJ051bWJlciBvZiBob3VycyBhIFRpbWUgTGltaXRlZCBLZXkgaXMgdmFsaWQgZm9yJzsKJGxhbmdbJ3RpbWVsaW1pdGVkX3VybF9zZXR0aW5ncyddID0gJ1RpbWUgTGltaXRlZCBLZXkgU2V0dGluZ3MnOwokbGFuZ1snbWFuYWdlX3RpbWVsaW1pdGVkJ10gPSAnTWFuYWdlIFRpbWUgTGltaXRlZCBBY2Nlc3MnOwokbGFuZ1sndXBsb2FkaW5nX3NldHRpbmdzJ10gPSAnRmlsZSBVcGxvYWQgU2V0dGluZ3MnOwokbGFuZ1snZ2VuZXJhbF9zZXR0aW5ncyddID0gJ0dlbmVyYWwgU2V0dGluZ3MnOwokbGFuZ1sndGh1bWJuYWlsX3NldHRpbmdzJ10gPSAnVGh1bWJuYWlsIEdlbmVyYXRpb24nOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdQYWdlIHRvIHJlZGlyZWN0IHRvIGFmdGVyIHNlbmRpbmcgYSBmaWxlJzsKJGxhbmdbJ2xibF9iYWNrJ10gPSAnQmFjayc7CiRsYW5nWydsYmxfdGVtcGxhdGVzJ10gPSAnTW9kaWZ5IFRlbXBsYXRlcyc7CiRsYW5nWydwcm9tcHRfcHVibGljX2ZpZWxkJ10gPSAnRmllbGQgaXMgcHVibGljIDxlbT4oY2FuIGJlIHZpZXdlZCBieSBzaXRlIHZpc2l0b3JzKTwvZW0+JzsKJGxhbmdbJ3VwbG9hZF9lZGl0ZWQnXSA9ICdGaWxlIERldGFpbHMgRWRpdGVkIG9uICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnVXNlIHRoaXMgZmllbGQgdG8gdXBsb2FkIGEgdGh1bWJuYWlsIHRvIGFzc29jaWF0ZSB3aXRoIHRoaXMgZmlsZS4gIFRoaXMgY2FuIGJlIGhhbmR5IGlmIHVwbG9hZGluZyBmaWxlcyBvdGhlciB0aGFuIGltYWdlcyB0aGF0IHRodW1ibmFpbHMgY2Fubm90IGJlIGdlbmVyYXRlZCBmcm9tIGF1dG9tYXRpY2FsbHknOwokbGFuZ1sndXBsb2FkX2ZpbGUnXSA9ICdVcGxvYWQgYSBuZXcgZmlsZSc7CiRsYW5nWydtc2dfZmllbGRfZGVsZXRlZCddID0gJ0ZpZWxkIGRlbGV0ZWQnOwokbGFuZ1snYXNrX2RlbGV0ZV9maWVsZCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmaWVsZCBkZWZpbml0aW9uIGFuZCBhbGwgYXNzb2NpYXRlZCB2YWx1ZXM/JzsKJGxhbmdbJ3llcyddID0gJ1llcyc7CiRsYW5nWydubyddID0gJ05vJzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ2ZpZWxkdHlwZV9tdWx0aXNlbGVjdCddID0gJ011bHRpc2VsZWN0IExpc3QnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnRHJvcGRvd24gTGlzdCc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGFyZWEnXSA9ICdUZXh0IEFyZWEnOwokbGFuZ1snZmllbGR0eXBlX3RleHRpbnB1dCddID0gJ1RleHQgSW5wdXQnOwokbGFuZ1sncHJvbXB0X3VzZV93eXNpd3lnJ10gPSAnVXNlIHRoZSB3eXNpd3lnIHdoZW4gZWRpdGluZyB0aGUgdmFsdWUgZm9yIHRoaXMgZmllbGQnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHRfY29udGVudCddID0gJ0RlZmF1bHQgY29udGVudCBmb3IgdGV4dCBhcmVhJzsKJGxhbmdbJ3Byb21wdF9kcm9wZG93bl9vcHRpb25zJ10gPSAnT3B0aW9ucyAob25lIGVudHJ5IHBlciBsaW5lKSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbWF4bGVuZ3RoJ10gPSAnRmllbGQgTWF4aW11bSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0ZpZWxkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfZmllbGRfdHlwZSddID0gJ0ZpZWxkIFR5cGUnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX25hbWUnXSA9ICdGaWVsZCBOYW1lJzsKJGxhbmdbJ3RpdGxlX2FkZF9maWVsZCddID0gJ0FkZCBvciBFZGl0IGEgRmllbGQgRGVmaW5pdGlvbic7CiRsYW5nWydmaWVsZF9kZWZpbml0aW9ucyddID0gJ0ZpZWxkIERlZmluaXRpb25zJzsKJGxhbmdbJ3Byb21wdF9hZGRfZmllbGQnXSA9ICdBZGQgYSBGaWVsZCBEZWZpbml0aW9uJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gPDw8RU9UCjxwPlNwZWNpZmllcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBtb2R1bGUgdGFnLiAgUG9zc2libGUgdmFsdWVzIGFyZTo8L3A+Cjx1bD4KICA8bGk+Y2F0ZWdvcnlsaXN0IC0gRGlzcGxheSBhIGxpc3Qgb2YgY2F0ZWdvcmllcyB0aGF0IHRoZSBjdXJyZW50IHVzZXIgaXMgYWJsZSB0byBicm93c2UgdG8uICBOb3RlOiBkdWUgdG8gdGhlIGZsZXhpYmlsaXR5IG9mIHBlcm1pc3Npb25zIGF2YWlsYWJsZSB0byBmaWxlcyBhbmQgY2F0ZWdvcmllcywgdGhlIGNhdGVnb3J5bGlzdCBhY3Rpb24gZG9lcyBOT1QgZGV0ZWN0IGlmIHRoZXJlIGFyZSB2aWV3YWJsZSBmaWxlcyBmb3IgdGhlIHNwZWNpZmljIGNhdGVnb3JpZXMsPC9saT4KICA8bGk+ZGVmYXVsdCAtICh0aGUgZGVmYWZhdWx0IGJlaGF2aW9yKTwvbGk+CiAgPGxpPmRldGFpbCAtIHRvIGRpc3BsYXkgYSBkZXRhaWwgdmlldyBvZiBhIHNpbmdsZSBmaWxlIGJhc2VkIG9uIHRoZSB1cGxvYWRfaWQuPC9saT4KICA8bGk+eW91c2VuZGl0IC0gdG8gZGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgdXBsb2FkaW5nIGEgZmlsZSwgYW5kIHNlbmRpbmcgaXQgdG8gbnVtZXJvdXMgYWRkcmVzc2VzIGluIG9uZSBzdGVwPC9saT4KPC91bD4KRU9UOwokbGFuZ1sncGFyYW1fc2VuZGZpbGVwYWdlJ10gPSAnU3BlY2lmeSB0aGUgcGFnZSBpZCBvciBhbGlhcyBvZiBhIHBhZ2UgdGhhdCBzaG91bGQgYmUgdXNlZCBmb3IgdGhlIHNlbmQgYSBmaWxlIGZvcm0nOwokbGFuZ1snZmlsZV91cGxvYWRlZCddID0gJ0ZpbGUgU3VjY2Vzc2Z1bGx5IFVwbG9hZGVkJzsKJGxhbmdbJ3RvJ10gPSAnVG8nOwokbGFuZ1sndGl0bGVfeW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ0FkZCBvciBFZGl0IGEgJnF1b3Q7WW91IFNlbmQgSXQmcXVvdDsgRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWyd5b3VzZW5kaXRmb3JtX3RlbXBsYXRlJ10gPSAnWW91U2VuZEl0IEZvcm0gVGVtcGxhdGVzJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fc3lzZGVmYXVsdCddID0gJ1Byb3RvdHlwZSAmcXVvdDt5b3Ugc2VuZCBpdCZxdW90OyB0ZW1wbGF0ZSc7CiRsYW5nWydtc2dfZmlsZV9zZW50J10gPSAnQSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlbGVjdGVkIGFkZHJlc3NlcyB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIGFuZCBob3cgdG8gcmV0cmlldmUgaXQuJzsKJGxhbmdbJ2Vycm9yX25vYWRkcmVzc2VzJ10gPSAnWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBkZXN0aW5hdGlvbiBhZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ1lvdSBtdXN0IHN1cHBseSBhIHN1YmplY3QnOwokbGFuZ1snc3ViamVjdCddID0gJ1N1YmplY3QnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUGFnZSB0byB1c2UgZm9yIHRpbWUgbGltaXRlZCBvciAmcXVvdDtZb3VTZW5kSXQmcXVvdDsgVVJMUyc7CiRsYW5nWydmaWxlX2luZm8nXSA9ICdGaWxlIEluZm8nOwokbGFuZ1snc2VuZCddID0gJ1NlbmQnOwokbGFuZ1snbm90ZXMnXSA9ICdOb3Rlcyc7CiRsYW5nWydhZGRyZXNzZWVzJ10gPSAnU2VuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUgdG8nOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgRW1haWwgVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWRkIG9yIEVkaXQgYSAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJyZxdW90O1NlbmQgYSBGaWxlJnF1b3Q7IEZvcm0gVGVtcGxhdGVzJzsKJGxhbmdbJ3Byb21wdF9ub3RpZnlfZW1haWxfdGVtcGxhdGUnXSA9ICdGaWxlIHVwbG9hZCBub3RpZmljYXRpb24gZW1haWwgdGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3N5c2RlZmF1bHQnXSA9ICdQcm90b3R5cGUgJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgZm9ybSB0ZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdGaWxlcyBpbiB0aGlzIGNhdGVnb3J5IGNhbiBiZSBkZWxldGVkJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ0FsbG93IGRlbGV0aW9uIG9mIGZpbGVzIGZyb20gdGhlIGZyb250ZW5kJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnUHJvdG90eXBlIFRlbXBsYXRlcyc7CiRsYW5nWydmaXJzdHBhZ2UnXSA9ICdGaXJzdCBQYWdlJzsKJGxhbmdbJ3ByZXZwYWdlJ10gPSAnUHJldmlvdXMgUGFnZSc7CiRsYW5nWyduZXh0cGFnZSddID0gJ05leHQgUGFnZSc7CiRsYW5nWydsYXN0cGFnZSddID0gJ0xhc3QgUGFnZSc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICcmbHQ7Jmx0Oyc7CiRsYW5nWydwcmV2cGFnZV9hcnJvdyddID0gJyZsdDsnOwokbGFuZ1snbmV4dHBhZ2VfYXJyb3cnXSA9ICcmZ3Q7JzsKJGxhbmdbJ2xhc3RwYWdlX2Fycm93J10gPSAnJmd0OyZndDsnOwokbGFuZ1sncGFnZSddID0gJ1BhZ2UnOwokbGFuZ1snb2YnXSA9ICdvZic7CiRsYW5nWydwcm9tcHRfZ3JvdXBsaXN0J10gPSAnQXV0aG9yaXplZCBGRVUgR3JvdXBzJzsKJGxhbmdbJ2luZm9fZ3JvdXBsaXN0J10gPSAnU2VsZWN0IHRoZSBGRVUgZ3JvdXBzIHRoYXQgYXJlIGFsbG93ZWQgYWNjZXNzIHRvIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuICBEZXNlbGVjdCBhbGwgZW50cmllcyB0byBhbGxvdyBhbGwgYWNjZXNzJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdTY2FuIGZvciBuZXcgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscyddID0gJ0NyZWF0ZSBtaXNzaW5nIHRodW1ibmFpbHMgZm9yIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnQ3JlYXRlIFRodW1ibmFpbHMnOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbCddID0gJyhyZSlDcmVhdGUgdGhlIHRodW1ibmFpbCBmb3IgdGhpcyBmaWxlJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdDcmVhdGUgVGh1bWJuYWlsJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ0NvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAocGVybWlzc2lvbnMgcHJvYmxlbT8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1NpemUgb2YgZWFjaCBkb3dubG9hZCBjaHVuayc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0FkanVzdGluZyB0aGlzIHBhcmFtZXRlciB3aWxsIGVmZmVjdCBkb3dubG9hZCBzcGVlZCwgYW5kIG1heSBoZWxwIGluIGxvd2VyIG1lbW9yeSBlbnZpcm9ubWVudHMnOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdQSFBcJ3Mgc2FmZSBtb2RlIGlzIGVuYWJsZWQuICBUaGlzIG1heSBjYXVzZSBwcm9ibGVtcyB3aXRoIHVwbG9hZGluZyBmaWxlcyAocGVybWlzc2lvbnMpLCBhbmQgbWF5IGFsc28gaW50ZXJmZXJlIHdpdGggdGhpcyBtb2R1bGVcJ3MgYWJpbGl0eSB0byBzZW5kIHNvbWUgZmlsZXMgZHVlIHRvIGFuIGluYWJpbGl0eSB0byBvdmVycmlkZSBzb21lIGluaSBzZXR0aW5ncy4gIFlvdSBhcmUgYWR2aXNlZCB0byBjb250YWN0IHlvdXIgcHJvdmlkZXIgdG8gc2VlIGFib3V0IGRpc2FibGluZyBzYWZlIG1vZGUuJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdVc2VmdWwgZm9yIGRpc3BsYXlpbmcgYSBkZXRhaWwgcmVwb3J0IHVzaW5nIGEgZGlmZmVyZW50IHBhZ2UgdGVtcGxhdGUsIHRoaXMgcGFyYW1ldGVyIHRha2VzIHRoZSBwYWdlIGlkIG9yIHBhZ2UgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGV0YWlsIHJlcG9ydCc7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdBIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2V0aGVyIGZpbGUgbmFtZXMgc2hvdWxkIGJlIHByZWZpeGVkJzsKJGxhbmdbJ3BhcmFtX3ByZWZpeF9mZXUnXSA9ICdBIGJvb2xlYW4gcGFyYW1ldGVyIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByZWZpeCBzaG91bGQgYmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBhdXRob3IsIGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBwcmVmaXggaXMgdGhlIGN1cnJlbnQgdGltZSAoaW4gZGVjaGV4IGZvcm1hdCknOwokbGFuZ1sncGFyYW1fbm9jYXB0Y2hhJ10gPSAnRGlzYWJsZSBjYXB0Y2hhIHN1cHBvcnQgKG9uIGJ5IGRlZmF1bHQpIGluIHRoZSB1cGxvYWQgZm9ybSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnRWRpdCBVcGxvYWQgRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnRW50ZXIgdGhlIHRleHQgZGlzcGxheWVkIGluIHRoaXMgaW1hZ2UnOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnVGV4dCBlbnRlcmVkIGRpZCBub3QgbWF0Y2ggdGhlIGltYWdlIGRpc3BsYXllZCc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdDcmVhdGUgdGh1bWJuYWlscyBmb3IgZmlsZXMgd2l0aCB0aGVzZSBleHRlbnNpb25zJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfc2l6ZSddID0gJ01heGltdW0gc2l6ZSAocGl4ZWxzKSBvZiB0aGUgZ2VuZXJhdGVkIHRodW1ibmFpbCc7CiRsYW5nWydwcm9tcHRfdXBsb2FkX2ljb24nXSA9ICdVcGxvYWQgQW4gSWNvbic7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdUaGlzIHRleHQgaXMgdXNlZCB3aGVuIGNyZWF0aW5nIGEgbmV3IHRlbXBsYXRlIG9mIHRoaXMgdHlwZSc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfc3lzZGVmYXVsdCddID0gJ1Byb3RvdHlwZSBEZXRhaWwgUmVwb3J0IFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfc3lzZGVmYXVsdCddID0gJ1Byb3RvdHlwZSBTdW1tYXJ5IFJlcG9ydCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdQcm90b3R5cGUgVXBsb2FkIEZvcm0gVGVtcGxhdGUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydyZXNldHRvZGVmYXVsdCddID0gJ1Jlc2V0IHRvIERlZmF1bHRzJzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfdGVtcGxhdGUnXSA9ICdTdW1tYXJ5IFJlcG9ydCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfdGVtcGxhdGUnXSA9ICdEZXRhaWwgUmVwb3J0IFRlbXBsYXRlJzsKJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdCddID0gJ0RlZmF1bHQnOwokbGFuZ1snbGVnZW5kX3VwbG9hZGZvcm0nXSA9ICdVcGxvYWQgQSBGaWxlJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ0EgcmVxdWlyZWQgcGFyYW1ldGVyIGlzIG1pc3NpbmcnOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdBIG5hbWUgZm9yIHRoZSBmaWxlIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2V4dGVuc2lvbnMnXSA9ICdBdCBsZWFzdCBvbmUgZmlsZSBleHRlbnNpb24gbXVzdCBiZSBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdBbiBpY29uIG11c3QgYmUgc3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ1RoZSBzcGVjaWZpZWQgcm93IGNvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWyduYW1lX3Vua25vd24nXSA9ICdVbmtub3duJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdGaWxlIHR5cGUgZGVzY3JpcHRpb24gZm9yIHVubWF0Y2hlZCBmaWxlcyc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ2ljb24nXSA9ICdJY29uJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdGaWxlIEV4dGVuc2lvbnMnOwokbGFuZ1snYWRkZmlsZXR5cGUnXSA9ICdBZGQgTmV3IEZpbGUgVHlwZSc7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnRmlsZSBUeXBlcyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdObyBDYXRlZ29yeSBpZCB3YXMgc3VwcGxpZWQnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeSddID0gJ05vIENhdGVnb3J5IGlkIHdhcyBzdXBwbGllZCc7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZW5hbWVleGlzdHMnXSA9ICdBIHRlbXBsYXRlIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnVGVtcGxhdGUgTmFtZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdDcmVhdGUgYSBuZXcgdGVtcGxhdGUnOwokbGFuZ1snaGVscF9PbkRvd25sb2FkJ10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgdXNlciBmaW5pc2hlcyBkb3dubG9hZGluZyBhIGZpbGU8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPmlkPC9lbT4gLSBVcGxvYWQgSUQ8L2xpPgo8bGk+PGVtPm5hbWU8L2VtPiAtIEZpbGUgbmFtZTwvbGk+CjxsaT48ZW0+aXA8L2VtPiAtIFRoZSBJUCBBZGRyZXNzIG9mIHRoZSBkb3dubG9hZGVyPC9saT4KPC91bD4KJzsKJGxhbmdbJ2hlbHBfT25EZWxldGVDYXRlZ29yeSddID0gJwo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIERlbGV0ZWQ8L3A+CjxoND5QYXJhbWV0ZXJzPC9oND4KPHVsPgo8bGk+PGVtPm5hbWU8L2VtPiAtIENhdGVnb3J5IG5hbWU8L2xpPgo8bGk+PGVtPnBhdGg8L2VtPiAtIENhdGVnb3J5IHBhdGg8L2xpPgo8L3VsPgonOwokbGFuZ1snaGVscF9PbkNyZWF0ZUNhdGVnb3J5J10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgQ3JlYXRlZDwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5PC9saT4KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gVGhlIGNhdGVnb3J5IGRlc2NyaXB0aW9uPC9saT4KPGxpPjxlbT5wYXRoPC9lbT4gLSBUaGUgY2F0ZWdvcnkgcGF0aDwvbGk+CjxsaT48ZW0+bGlzdGFibGU8L2VtPiAtIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBjYXRlZ29yeSBpcyBsaXN0YWJsZTwvbGk+CjxsaT48ZW0+ZGVsZXRhYmxlPC9lbT4gLSBBIGZsYWcgaW5kaWNhdGluZyBpZiBmaWxlcyBpbiB0aGUgY2F0ZWdvcnkgYXJlIGRlbGV0YWJsZTwvbGk+CjwvdWw+Cic7CiRsYW5nWydoZWxwX09uUmVtb3ZlJ10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4KPGg0PlBhcmFtZXRlcnM8L2g0Pgo8dWw+CjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+CjxsaT48ZW0+aWQ8L2VtPiAtIFRoZSBpZCBvZiB0aGUgcmVtb3ZlZCBmaWxlPC9saT4KPGxpPjxlbT5jYXRlZ29yeV9pZDwvZW0+IC0gVGhlIGlkIG9mIHRoZSBjYXRlZ29yeTwvbGk+CjwvdWw+Cic7CiRsYW5nWydoZWxwX09uVXBsb2FkJ10gPSAnCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQgdmlhIHRoZSBhZG1pbiBvciBmcm9udGVuZCBpbnRlcmZhY2VzPC9wPgo8aDQ+UGFyYW1ldGVyczwvaDQ+Cjx1bD4KPGxpPjxlbT51cGxvYWRfaWQ8L2VtPiAtIFRoZSB1cGxvYWQgaWQ8L2xpPgo8bGk+PGVtPmNhdGVnb3J5PC9lbT4gLSBUaGUgY2F0ZWdvcnkgbmFtZTwvbGk+CjxsaT48ZW0+Y2F0ZWdvcnlwYXRoPC9lbT4gLSBUaGUgY2F0ZWdvcnkgcGF0aDwvbGk+CjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHVwbG9hZGVkIGZpbGU8L2xpPgo8bGk+PGVtPnNpemU8L2VtPiAtIFRoZSBzaXplIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4KPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBUaGUgc2hvcnQgZGVzY3JpcHRpb24gZm9yIHRoZSB1cGxvYWRlZCBmaWxlIChtYXkgYmUgZW1wdHkpPC9lbT48L2xpPgo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBUaGUgbG9uZyBkZXNjcmlwdGlvbiBmb3IgdGhlIHVwbG9hZGVkIGZpbGUgKG1heSBiZSBlbXB0eSk8L2VtPjwvbGk+CjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBUaGUgYXV0aG9yIG9mIHRoZSB1cGxvYWRlZCBmaWxlIChpZiBhdmFpbGFibGUpPC9lbT48L2xpPgo8bGk+PGVtPmlwX2FkZHJlc3M8L2VtPiAtIFRoZSBpbnRlcm5ldCBhZGRyZXNzIG9mIHRoZSBjbGllbnQgdGhhdCB1cGxvYWRlZCB0aGUgZmlsZTwvbGk+CjwvdWw+Cic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIGRlbGV0ZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5J10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBjcmVhdGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyBkb3dubG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHVwbG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVtb3ZlZCc7CiRsYW5nWyd0aXRsZV91c2VydGFnX29udXBsb2FkJ10gPSAnVXNlciBkZWZpbmVkIHRhZyB0byBjYWxsIGFmdGVyIHVwbG9hZCBpcyBjb21wbGV0ZSc7CiRsYW5nWydub25lJ10gPSAnTm9uZSc7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICdNYXRjaGVzIGZvdW5kJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnUmVkaXJlY3QgdG8gcGFnZSBpZC9hbGlhcyBvbiB1c2VyIHVwbG9hZCc7CiRsYW5nWydkZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFkanVzdCB0aGUgcHJlZmVyZW5jZXM/JzsKJGxhbmdbJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCddID0gJ05vIGZpbGVzIHdlcmUgdXBsb2FkZWQuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnQWxsb3cgT3ZlcndyaXRlJzsKJGxhbmdbJ2luZm9fcmVwbGFjZSddID0gJ1JlcGxhY2UgYW55IGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIChkb2VzIG5vdCBjaGFuZ2UgaWQpJzsKJGxhbmdbJ3BhcmFtX25vX2luaXRpYWwnXSA9ICdEbyBub3QgZGlzcGxheSBhbnkgaW5pdGlhbCByZXN1bHRzIHdoZW4gdGhlIGZpbHRlciBpcyBvbic7CiRsYW5nWydwYXJhbV9rZXknXSA9ICdQcm92aWRlIGFuIGFkZGl0aW9uYWwga2V5IHRvIHRoZSBtb2R1bGUgZm9yIGZ1cnRoZXIgb3JnYW5pemluZyB1cGxvYWRzLiAgVGhpcyBrZXkgY291bGQgYmUgYW4gZW5jb2RlZCBzdHJpbmcgbGlrZTogXCdmZXVzZXJzOnVpZFwnLCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnSGlkZSB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIHVwbG9hZCBmb3JtLiAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIG1vZGU9XCd1cGxvYWRcJy4gIElmIFRoZSBGcm9udGVuZFVzZXJzIG1vZHVsZSBpcyBwcmVzZW50LCBhbmQgYSB1c2VyIGlzIGN1cnJlbnRseSBsb2dnZWQgaW4sIGEgaGlkZGVuIGZpZWxkIHdpbGwgaG9sZCB0aGUgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VybmFtZSc7CiRsYW5nWydwYXJhbV91cGxvYWRfaWQnXSA9ICcKdXBsb2FkX2lkPSJpZCIgLSBzcGVjaWZ5IGEgc2luZ2xlIGZpbGUgZm9yIHRoZSB1cmwvbGluayxkZXRhaWxlZCBvciBzaW5nbGUgbW9kZXMgKGFib3ZlKSc7CiRsYW5nWydwYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ1VzZSBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGZvciB0aGUgZGV0YWlsIHJlcG9ydC4nOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdVc2UgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBmb3IgdGhpcyByZXBvcnQgb3IgZm9ybS4gIFRoZSBtb2RlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiB0ZW1wbGF0ZSBpcyByZXF1aXJlcmQsIGFuZCB0aGVuIGEgbmFtZSBtYXRjaCBpcyBwZXJmb3JtZWQgd2l0aGluIHRoYXQgdHlwZS4nOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnQXBwbGljYWJsZSBvbmx5IHRvIHRoZSBzdW1tYXJ5IHZpZXcsIHRoaXMgcGFyYW1ldGVyIHdpbGwgZW5hYmxlIGRpc3BsYXkgb2YgdGhlIGZpbHRlcmluZyBmb3JtLiAgSWYgdGhpcyBwYXJhbWV0ZXIgaXMgc2V0IHRvIGFueSB2YWx1ZSA8ZW0+KGFuZCB0aGUgZmllbGRzIHN0aWxsIGFwcGVhciBpbiB0aGUgc3VtbWFyeSB0ZW1wbGF0ZSk8L2VtPic7CiRsYW5nWydwYXJhbV9ub19pbnRpdGlhbCddID0gJ09ubHkgdXNlZnVsIHdoZW4gdGhlIGZpbHRlciBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIG9yIG9uIGJ5IGRlZmF1bHQsIHRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyB3ZXRoZXIgaW5pdGlhbCByZXN1bHRzIHNob3VsZCBiZSByZXR1cm5lZCc7CiRsYW5nWydwYXJhbV9maWxldHlwZXMnXSA9ICdEaXNwbGF5IG9ubHkgZmlsZXMgd2hvc2UgdHlwZSBtYXRjaGVzIHRoaXMgY29tbWEgc2VwYXJhdGVkIGxpc3QnOwokbGFuZ1sncGFyYW1fc29ydG9yZGVyJ10gPSAnCiAgPHA+U29ydCBPcmRlcnMKICA8dWw+CiAgPGxpPjxlbT5kYXRlX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGF0ZTwvbGk+CiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkYXRlPC9saT4KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBuYW1lPC9saT4KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIG5hbWU8L2xpPgogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIHNpemU8L2xpPgogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgc2l6ZTwvbGk+CiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBhdXRob3I8L2xpPgogIDxsaT48ZW0+YXV0aG9yX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBhdXRob3I8L2xpPgogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4KICA8bGk+PGVtPmlwX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+CiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+CiAgPGxpPjxlbT5kb3dubG9hZHNfYXNjPC9lbT4gLSBTb3J0IGJ5IGRvd25sb2FkIGNvdW50IGluIGFzY2VuZGluZyBvcmRlci48L2xpPgogIDxsaT48ZW0+ZG93bmxvYWRzX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZG93bmxvYWQgY291bnQgaW4gZGVzY2VuZGluZyBvcmRlci48L2xpPgogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBSYW5kb20gc29ydCBvcmRlcjwvbGk+CiAgPC91bD4KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddPSdUZW1wbGF0ZSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzIGFmdGVyIGNsaWNrdGhyb3VnaCBmcm9tIENhdGVnb3J5IFN1bW1hcnkgcGFnZSc7CiRsYW5nWydwYXJhbV9saXN0aW5nc29ydG9yZGVyJ109J1NvcnQgb3JkZXIgKGFsYSBwYXJhbV9zb3J0b3JkZXIpIHRvIHVzZSBmb3IgY2F0ZWdvcnkgbGlzdGluZ3MnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICcKZmlsZV9leHRlbnNpb25zPSJleHQxLGV4dDIsZXh0MyIKPHA+dmFsaWQgb25seSB3aGVuIG1vZGU9dXBsb2FkLCB0aGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIHR5cGVzIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLiAgSXQgb3ZlcnJpZGVzIGFueSBzZXR0aW5ncyBpbiB0aGUgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0iTiIgPHA+QSBwYXJhbWV0ZXIgdG8gbGltaXQgdGhlIHJlc3VsdHMgdG8gTiBlbnRyaWVzIHBlciBwYWdlLjwvcD4nOwokbGFuZ1sncGFyYW1fY2F0ZWdvcnknXSA9ICcKY2F0ZWdvcnk9Im5hbWUiCjxwPjxiPk5vdGU6PC9iPiBDYXRlZ29yeSBjYW4gYmUgImFsbCIsIHdoaWNoIHdpbGwgbGlzdCBhbGwgb2YgdGhlIHVwbG9hZHMgZnJvbSBhbGwgPGVtPmxpc3RhYmxlPC9lbT4gY2F0ZWdvcmllczwvcD4nOwokbGFuZ1sncGFyYW1fbW9kZSddID0gJwogIDx1bD4KICA8bGk+PGVtPmRldGFpbGVkPC9lbT4gLSBEaXNwbGF5IGEgZGV0YWlsZWQgcmVwb3J0IGZvciBhIHNpbmdsZSB1cGxvYWQuPC9saT4KICA8bGk+PGVtPnNpbmdsZTwvZW0+IC0gQWxpYXMgZm9yIHRoZSBkZXRhaWxlZCBtb2RlLjwvbGk+CiAgPGxpPjxlbT51cGxvYWQ8L2VtPiAtIERpc3BsYXkgYSBmb3JtIHRvIGFsbG93IGEgZnJvbnRlbmQgdXNlciB0byB1cGxvYWQgYSBmaWxlPC9saT4KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gRGlzcGxheSBhIGxpbmsgdG8gYSBmaWxlPC9saT4KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIERpc3BsYXkgYSBzdW1tYXJpemVkIGxpc3Qgb2YgYWxsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgY2F0ZWdvcnk8L2xpPgogIDwvdWw+JzsKJGxhbmdbJ3BhcmFtX3NlbGVjdGZvcm0nXSA9ICdXaGVuIHVzaW5nIHRoZSBcJ3NlbGVjdFwnIG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBmb3JtaWQgb2YgdGhlIHBhcmVudCBmb3JtLiAgVXNlZCB0byBoYW5kbGUgcGFyYW1ldGVyIHBhc3NpbmcnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ3doZW4gdXNpbmcgdGhlIFwnc2VsZWN0XCcgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ1doZW4gdXNpbmcgdGhlIFwnc2VsZWN0XCcgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZpZWxkIHZhbHVlJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5vbmUnXSA9ICdXaGVuIHVzaW5nIHRoZSBcJ3NlbGVjdFwnIG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3ZXRoZXIgXCdub25lXCcgaXMgYSB2YWxpZCBjaG9pY2UuJzsKJGxhbmdbJ3JldHVybnRvbW9kdWxlJ10gPSAnUmV0dXJuIHRvIG1vZHVsZSBwYW5lbCc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3JpZXMnXSA9ICdUaGVyZSBhcmUgbm8gZGVmaW5lZCBjYXRlZ29yaWVzJzsKJGxhbmdbJ3RpdGxlX2VuZm9yY2VleHRlbnNpb25zJ10gPSAnUmVxdWlyZSBleHRlbnNpb25zIG9uIGFsbCB1cGxvYWRlZCBmaWxlcyc7CiRsYW5nWydyZXN0b3JlZGVmYXVsdHNjb25maXJtJ10gPSAnVGhpcyBvcGVyYXRpb24gd2lsbCByZXN0b3JlIHRoZSB0ZW1wbGF0ZSB0byBzeXN0ZW0gZGVmYXVsdHMuICBBbnkgY2hhbmdlcyB5b3UgaGF2ZSBtYWRlIHdpbGwgYmUgbG9zdC4gIEFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwcm9jZWVkPyc7CiRsYW5nWydpbmZvX3RodW1ibmFpbCddID0gJ0FuIG9wdGlvbmFsIHRodW1ibmFpbCBmaWxlJzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ1RodW1ibmFpbCc7CiRsYW5nWyduZXd0aHVtYm5haWwnXSA9ICdVcGxvYWQgYSBuZXcgdGh1bWJuYWlsJzsKJGxhbmdbJ2luZm9fc3VtbWFyeSddID0gJ0EgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGUgKGlmIGVtcHR5LCB0aGUgZmlsZSBuYW1lIGlzIHVzZWQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ0EgYnJpZWYgbmFtZSBmb3IgeW91ciBjYXRlZ29yeSAoaHVtYW4gcmVhZGFibGUpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZXNjJ10gPSAnQSBkZXNjcmlwdGlvbiBmb3IgeW91ciBjYXRlZ29yeSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ1RoZSBkaXJlY3RvcnkgbmFtZSBpbnNpZGUgdGhlIHVwbG9hZHMgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuICBJZiB0aGUgZGlyZWN0b3J5IG9mIHRoaXMgbmFtZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBpdCBtYXkgYmUgY3JlYXRlZCc7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnVXNlIHRoZSBcJ1VwbG9hZCBBc1wnIGZpZWxkIHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvbiB1cGxvYWQuICBMZWF2ZSBibGFuayB0byBwcmVzZXJ2ZSB0aGUgZmlsZW5hbWUgYXMtaXMuJzsKJGxhbmdbJ2Vycm9yX2NhbnRjcmVhdGVkaXJlY3RvcnknXSA9ICdDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ1RoZSBDTVNNYWlsZXIgbW9kdWxlIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQnOwokbGFuZ1sndXBsb2FkX25vdGlmaWNhdGlvbiddID0gJ0EgbmV3IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQnOwokbGFuZ1sndGl0bGVfZW1haWxfb25fdXBsb2FkJ10gPSAnU2VuZCB1cGxvYWQgbm90aWZpY2F0aW9uIHRvJzsKJGxhbmdbJ2VtYWlsX3RlbXBsYXRlJ10gPSAnRW1haWwgVGVtcGxhdGVzJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdDcmVhdGUgZHVtbXkgaW5kZXguaHRtbCBmaWxlcyBpbiBlYWNoIGRpcmVjdG9yeT88YnIvPjxlbT5BbnkgZXhpc3RpbmcgaW5kZXguaHRtbCBmaWxlcyB3aWxsIHJlbWFpbjwvZW0+JzsKJGxhbmdbJ2Fib3V0J10gPSAnQWJvdXQnOwokbGFuZ1snZXJyb3JfcGVybWlzc2lvbmRlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvcl9jb3VsZG5vdHdyaXRlJ10gPSAnQ291bGQgbm90IHdyaXRlJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnQWRkIENhdGVnb3J5JzsKJGxhbmdbJ2FsbCddID0gJ0FsbCc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnQXJlIFlvdSBTdXJlPyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRob3InOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcoVGhlIHBhdGggY2Fubm90IGJlIG1vZGlmaWVkKSc7CiRsYW5nWydjYXRlZ29yaWVzJ10gPSAnQ2F0ZWdvcmllcyc7CiRsYW5nWydjYXRlZ29yeSddID0gJ0NhdGVnb3J5JzsKJGxhbmdbJ21lc3NhZ2VfY2F0ZWdvcnlhZGRlZCddID0gJ0NhdGVnb3J5IHN1Y2Nlc3NmdWxseSBhZGRlZCc7CiRsYW5nWydkYXRlJ10gPSAnRGF0ZSc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdEYXRlIFVwbG9hZGVkJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdEZWZhdWx0cyc7CiRsYW5nWydkZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydkZXN0bmFtZSddID0gJ1VwbG9hZCBBcyc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhaWwgVGVtcGxhdGVzJzsKJGxhbmdbJ2Rvd25sb2FkZWQnXSA9ICdGaWxlICVzIHdhcyBkb3dubG9hZGVkLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1snZWRpdCddID0gJ0VkaXQnOwokbGFuZ1snZWRpdGNhdGVnb3J5J10gPSAnRWRpdCBDYXRlZ29yeSc7CiRsYW5nWydlZGl0dXBsb2FkJ10gPSAnRWRpdCBVcGxvYWQnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0EgY2F0ZWdvcnkgdXNpbmcgdGhlIHBhdGggKCVzKSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UnXSA9ICdBIGNhdGVnb3J5IHVzaW5nIHRoYXQgcGF0aCBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0czInXSA9ICdFcnJvcjogQ2F0ZWdvcnkgbmFtZWQgJXMgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdFcnJvcjogQ2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0Vycm9yISBDYW5ub3QgZGVsZXRlIGEgY2F0ZWdvcnkgdGhhdCBpcyBub3QgZW1wdHknOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3Rmb3VuZCddID0gJ0Vycm9yOiBDYXRlZ29yeSBub3QgZm91bmQhJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdFcnJvcjogRGF0YWJhc2UgZXJyb3IhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknXSA9ICdFcnJvcjogRW1wdHkgQ2F0ZWdvcnkhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0Vycm9yOiBFbXB0eSBQYXRoISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnRXJyb3IhIEZpbGUgJXMgYWxyZWFkeSBleGlzdHMuJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ0Vycm9yISBGaWxlICVzIHdhcyBub3QgZm91bmQuJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ0Vycm9yOiBJbnN1ZmZpY2llbnQgcGFyYW1ldGVycyBzdXBwbGllZCB0byBtb2R1bGUhPGJyLz5NaXNzaW5nIHBhcmFtIGlzOiAlcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkYXV0aG9yJ10gPSAnRXJyb3I6IEludmFsaWQgKG9yIGVtcHR5KSBhdXRob3IuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRjYXRlZ29yeSddID0gJ0Vycm9yOiBJbnZhbGlkIChvciBlbXB0eSkgY2F0ZWdvcnkuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRkZXNjcmlwdGlvbiddID0gJ0Vycm9yOiBJbnZhbGlkIChvciBlbXB0eSkgZGVzY3JpcHRpb24uJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRmaWxlJ10gPSAnRXJyb3I6IEludmFsaWQgKG9yIGVtcHR5KSBmaWxlbmFtZS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnRXJyb3I6IEZpbGVzIHdpdGggdGhhdCBuYW1lIChwcm9iYWJseSBleHRlbnNpb24pIGFyZSBub3QgYWxsb3dlZCAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdFcnJvcjogSW52YWxpZCB1cGxvYWQgaWQnOwokbGFuZ1snZXJyb3Jfbm9maWxlcyddID0gJ0Vycm9yOiBObyBNYXRjaGluZyBGaWxlcyEnOwokbGFuZ1snZmlsZXMnXSA9ICdGaWxlcyc7CiRsYW5nWydmaXhtZSddID0gJ0ZpeCBTcGFjZXMnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRnJvbnQgRW5kIEZpbGUgTWFuYWdlbWVudCAoVXBsb2FkcyknOwokbGFuZ1snaWQnXSA9ICdJZCc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUCBBZGRyZXNzJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQSBtb2R1bGUgdGhhdCBhbGxvd3MgdXNlcnMgdG8gdXBsb2FkIGZpbGVzLCBhbmQgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdGhlbS4nOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sncmVuYW1lbWVzc2FnZSddID0gJ0NoYW5nZSB0aGUgbmFtZSBoZXJlIHRvIGV4ZWN1dGUgYSByZW5hbWUnOwokbGFuZ1sncGF0aCddID0gJ1BhdGgnOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICdDaGFuZ2UgdGhlIGNhdGVnb3J5IGhlcmUgdG8gbW92ZSB0aGUgZmlsZSB0byBhbm90aGVyIGRpcmVjdG9yeSc7CiRsYW5nWydwYXRoaW51cGxvYWRzJ10gPSAnKFJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSknOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICc8cD5UaGUgdXBsb2FkcyBtb2R1bGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4gQmUgc3VyZSB0byBzZXQgIk1hbmFnZSBVcGxvYWRzIiBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhPC9wPgo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHBcJ3MgbWVtb3J5X2xpbWl0LCBzYWZlX21vZGUsIGZpbGVfdXBsb2FkcywgdXBsb2Fkc19tYXhfZmlsZXNpemUsIGFuZCBtYXhfZXhlY3V0aW9uX3RpbWUuICBUaGVzZSB2YXJpYWJsZXMgbWF5IG5lZWQgYWRqdXN0bWVudCBmb3IgdGhpcyBtb2R1bGUgdG8gd29yayBwcm9wZXJseSBvbiB5b3VyIHNpdGUuICBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IHdvcmsgd2l0aCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9yIGhvc3QgcHJvdmlkZXIgdG8gdHVuZSB0aGVzZSBzZXR0aW5ncyBmb3IgeW91ciByZXF1aXJlbWVudHMuPC9wPic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhlIFVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLiAgTm8gZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB5b3VyIHVwbG9hZHMgZGlyZWN0b3J5LCBhbmQgZmlsZSBpbnRlZ3JpdHkgaXMgaW50YWN0JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0ZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSBsaXN0ZWQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ0NhdGVnb3J5IE5hbWUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlciBQYXRoJzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdEZWxldGUgY2F0ZWdvcnkgZGlyZWN0b3J5Pyc7CiRsYW5nWydwcm9tcHRfbWF4X3VwbG9hZHNpemUnXSA9ICdNYXhpbXVtIGZpbGUgc2l6ZSBhbGxvd2VkIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdWYWxpZCB1cGxvYWQgZXh0ZW5zaW9ucyc7CiRsYW5nWydzY2FuJ10gPSAnU2Nhbic7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1NlbGVjdCBDYXRlZ29yeSc7CiRsYW5nWydzaXplJ10gPSAnU2l6ZSc7CiRsYW5nWydzaXpla2InXSA9ICdTaXplIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ3N1bW1hcnlfdGVtcGxhdGUnXSA9ICdTdW1tYXJ5IFRlbXBsYXRlcyc7CiRsYW5nWydzdW1tYXJ5J10gPSAnU3VtbWFyeSc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1VwbG9hZHMgTW9kdWxlJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdFeGNsdWRlIHN1Ym5ldHMgZnJvbSBzdGF0aXN0aWNzJzsKJGxhbmdbJ3RpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdWYWxpZCBFeHRlbnNpb25zJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd1cGxvYWQnXSA9ICdVcGxvYWQnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWxlICVzIHdhcyB1cGxvYWRlZCBieSAlcy4nOwokbGFuZ1sncmVwbGFjZWQnXSA9ICdGaWxlICVzIHdhcyByZXBsYWNlZCBieSAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0ZpbGUgJXMgd2FzIGRlbGV0ZWQuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdVcGxvYWQgVGVtcGxhdGVzJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ1dBUk5JTkc6IFVzZSBjYXV0aW9uIHdoZW4gZGVsZXRpbmcgY2F0ZWdvcmllcy4gIEZpbGVzIG1heSBiZSBsb3N0JzsKPz4K]]></data>
	</file>
	<file>
	  <filename>/lang/ext/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lang/ext/cs_CZ.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdBdXRob3Jpem92YW4mZWFjdXRlOyBGRVUgU2t1cGlueSc7CiRsYW5nWydpbmZvX2dyb3VwbGlzdCddID0gJ1Z5YmVybnRlIEZFVSBTa3VwaW55LCBrdGVyJmVhY3V0ZTsgbWFqJmlhY3V0ZTsgcG92b2xlbiBwxZkmaWFjdXRlO3N0dXAgayBzb3Vib3LFr20gdiB0JmVhY3V0ZTt0byBrYXRlZ29yaWkuICBacnUmc2Nhcm9uO2VuJmlhY3V0ZTttIHYmeWFjdXRlO2LEm3J1IHYmc2Nhcm9uO2VjaCBwb2xvxb5layBkb3ZvbCZpYWN1dGU7dGUgcMWZJmlhY3V0ZTtzdHVwIHYmc2Nhcm9uO2VtJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdWeWhsZWRhdCBub3YmZWFjdXRlOyBzb3Vib3J5IHYgdCZlYWN1dGU7dG8ga2F0ZWdvcmlpJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnVnl0dm/FmWl0IHNjaCZhYWN1dGU7emVqJmlhY3V0ZTtjJmlhY3V0ZTsgbiZhYWN1dGU7aGxlZHkgayBzb3Vib3J1bSB2IHQmZWFjdXRlO3RvIGthdGVnb3JpaS4nOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdWeXR2b8WZaXQgbiZhYWN1dGU7aGxlZHknOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbCddID0gJyh6bm92dSlWeXR2b8WZaXQgbiZhYWN1dGU7aGxlZCBwcm8gdGVudG8gc291Ym9yJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdWeXR2b8WZaXQgbiZhYWN1dGU7aGxlZCc7CiRsYW5nWydlcnJvcl9wYXRoZXJyb3InXSA9ICdOZW1vxb5ub3N0IG90ZXbFmWVuJmlhY3V0ZTsgYWRyZXMmYWFjdXRlO8WZZSAocHJvYmwmZWFjdXRlO20gcyBvcHImYWFjdXRlO3ZuxJtuJmlhY3V0ZTttPyknOwokbGFuZ1sndGl0bGVfZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnU2l6ZSBvZiBlYWNoIGRvd25sb2FkIGNodW5rJzsKJGxhbmdbJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnVXByYXZlbiZpYWN1dGU7IHRvaG90byBwYXJhbWV0cnUgYnVkZSBtJmlhY3V0ZTt0ICZ1YWN1dGU7xI1pbmVrIG5hIHJ5Y2hsb3N0aSBzdGFob3YmYWFjdXRlO24maWFjdXRlOyBhIG3Fr8W+ZSBwb21vY3QgbmEgc3lzdCZlYWN1dGU7bWVjaCBzIG0mZWFjdXRlO27EmyBwYW3Em3RpJzsKJGxhbmdbJ3dhcm5pbmdfc2FmZV9tb2RlJ10gPSAnUEhQJiMwMzk7cyBzYWZlIG1vZGUgamUgYWt0aXZuJmlhY3V0ZTsuICBNxa/FvmUgcMWvc29iaXQgcHJvYmwmZWFjdXRlO215IHMgbmFociZhYWN1dGU7diZhYWN1dGU7biZpYWN1dGU7bSBzb3Vib3LFryAob3ByJmFhY3V0ZTt2bsSbbiZpYWN1dGU7bSkgYSBtxa/FvmUgdGFreSBwxa9zb2JpdCBwcm9ibCZlYWN1dGU7bXkgcyBvZGVzJmlhY3V0ZTtsJmFhY3V0ZTtuJmlhY3V0ZTttIHNvdWJvcsWvLiBKZSBkb3BvcnXEjWVubyBhYnkganN0ZSBuZXBvdcW+JmlhY3V0ZTt2YWxpIHNhZmUgbW9kLic7CiRsYW5nWydwYXJhbV9kZXRhaWxwYWdlJ10gPSAnVXNlZnVsIGZvciBkaXNwbGF5aW5nIGEgZGV0YWlsIHJlcG9ydCB1c2luZyBhIGRpZmZlcmVudCBwYWdlIHRlbXBsYXRlLCB0aGlzIHBhcmFtZXRlciB0YWtlcyB0aGUgcGFnZSBpZCBvciBwYWdlIGFsaWFzIG9mIGEgcGFnZSB0aGF0IHNob3VsZCBiZSB1c2VkIHRvIGRpc3BsYXkgdGhlIGRldGFpbCByZXBvcnQnOwokbGFuZ1sncGFyYW1fcHJlZml4J10gPSAnQm9vbGVhbiwga3RlciZ5YWN1dGU7bSBuYXN0YXZ1amV0ZSB6ZGEgbSZhYWN1dGU7IG0maWFjdXRlO3Qgc291Ym9yIHByZWZpeCc7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnQSBib29sZWFuIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBwcmVmaXggc2hvdWxkIGJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgYXV0aG9yLCBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgcHJlZml4IGlzIHRoZSBjdXJyZW50IHRpbWUgKGluIGRlY2hleCBmb3JtYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ1Z5cG5vdXQgcG9kcG9ydSBDQVRDSHkgdiBuYWhyJmFhY3V0ZTt2YWMmaWFjdXRlO20gZm9ybXVsJmFhY3V0ZTvFmWkgKHZlIHYmeWFjdXRlO2Nob3omaWFjdXRlO20gc3RhdnUgemFwbnV0byknOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ1VwcmF2aXQgJnNjYXJvbjthYmxvbnUgbmFociZhYWN1dGU7dmFjJmlhY3V0ZTtobyBmb3JtdWwmYWFjdXRlO8WZZSc7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnVmxvxb50ZSB0ZXh0IHpvYnJhemVuJnlhY3V0ZTsgdiB0b210byBvYnImYWFjdXRlO3prdSc7CiRsYW5nWydlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnXSA9ICdUZXh0IGt0ZXImeWFjdXRlOyBqc3RlIHZsb8W+aWxpIHNlIG5lc2Nob2R1amUgcyB0ZXh0ZW0geiBvYnImYWFjdXRlO3prdSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdWeXR2JmFhY3V0ZTvFmWV0IG4mYWFjdXRlO2hsZWR5IHBybyBzb3Vib3J5IHMgdMSbbWl0byBwxZkmaWFjdXRlO3BvbmFtaSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnXSA9ICdNYXhpbSZhYWN1dGU7bG4maWFjdXRlOyB2ZWxpa29zdCAodiBwaXhlbGVjaCkgZ2VuZXJvdmFuJnlhY3V0ZTtjaCBuJmFhY3V0ZTtobGVkxa8nOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnTmFociZhYWN1dGU7dCBpa29udSc7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdUZW50byB0ZXh0IGplIHBvdcW+aXQgcMWZaSB2eXR2JmFhY3V0ZTvFmWVuJmlhY3V0ZTsgbm92JmVhY3V0ZTsgJnNjYXJvbjthYmxvbnkgdG9ob3RvIHR5cHUnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdWJnlhY3V0ZTtjaG96JmlhY3V0ZTsgc3lzdCZlYWN1dGU7bW92JmFhY3V0ZTsgJnNjYXJvbjthYmxvbmEgZGVhaWxuJmlhY3V0ZTtobyB6b2JyYXplbiZpYWN1dGU7JzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfc3lzZGVmYXVsdCddID0gJ1YmeWFjdXRlO2Nob3omaWFjdXRlOyBzeXN0JmVhY3V0ZTttb3YmYWFjdXRlOyAmc2Nhcm9uO2FibG9uYSBzaHJudWomaWFjdXRlO2MmaWFjdXRlO2hvIHpvYnJhemVuJmlhY3V0ZTsnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV9zeXNkZWZhdWx0J10gPSAnViZ5YWN1dGU7Y2hveiZpYWN1dGU7IHN5c3QmZWFjdXRlO21vdiZhYWN1dGU7ICZzY2Fyb247YWJsb25hIG5haHImYWFjdXRlO3ZhYyZpYWN1dGU7aG8gZm9ybXVsJmFhY3V0ZTvFmWUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICcmU2Nhcm9uO2FibG9uYSc7CiRsYW5nWydyZXNldHRvZGVmYXVsdCddID0gJ1Jlc2V0b3ZhdCBuYSB2JnlhY3V0ZTtjaG96JmlhY3V0ZTsnOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF90ZW1wbGF0ZSddID0gJyZTY2Fyb247YWJsb25hIHNocm51aiZpYWN1dGU7YyZpYWN1dGU7aG8gem9icmF6ZW4maWFjdXRlOyc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfdGVtcGxhdGUnXSA9ICcmU2Nhcm9uO2FibG9uYSBkZXRhaWxuJmlhY3V0ZTtobyB6b2JyYXplbiZpYWN1dGU7JzsKJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAnSm0mZWFjdXRlO25vJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnViZ5YWN1dGU7Y2hveiZpYWN1dGU7JzsKJGxhbmdbJ2xlZ2VuZF91cGxvYWRmb3JtJ10gPSAnTmFociZhYWN1dGU7dCBzb3Vib3InOwokbGFuZ1snZXJyb3JfbWlzc2luZ3BhcmFtJ10gPSAnUG90xZllYm4meWFjdXRlOyBwYXJhbWV0ciBjaHliJmlhY3V0ZTsnOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdKbSZlYWN1dGU7bm8gcHJvIHRlbnRvIHNvdWJvciZ5YWN1dGU7IHR5cCBtdXMmaWFjdXRlOyBiJnlhY3V0ZTt0IHNwZWNpZmlrb3YmYWFjdXRlO25vJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdleHRlbnNpb25zJ10gPSAnTWluaW0mYWFjdXRlO2xuxJsgamVkbmEgcMWZJmlhY3V0ZTtwb25hIG11cyZpYWN1dGU7IGImeWFjdXRlO3Qgc3BlY2lmaWtvdiZhYWN1dGU7bm8nOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdJa29uYSBtdXMmaWFjdXRlOyBiJnlhY3V0ZTt0IHNwZWNpZmlrb3YmYWFjdXRlO25hJzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ1VyxI1lbiZhYWN1dGU7IMWZYWRhIG5lbcWvxb5lIGImeWFjdXRlO3QgbmFsZXplbmEnOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnTmV6biZhYWN1dGU7bSZ5YWN1dGU7JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdQb3Bpc2VrIHR5cHUgc291Ym9yxa8gcHJvIG5lemppJnNjYXJvbjt0xJtuJnlhY3V0ZTsgdHlwJzsKJGxhbmdbJ2ltYWdlJ10gPSAnT2JyJmFhY3V0ZTt6ZWsnOwokbGFuZ1snaWNvbiddID0gJ0lrb25hJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdQxZkmaWFjdXRlO3Bvbnkgc291Ym9yxa8nOwokbGFuZ1snYWRkZmlsZXR5cGUnXSA9ICdQxZlpZGF0IG5vdiZ5YWN1dGU7IHR5cCBzb3Vib3J1JzsKJGxhbmdbJ2ZpbGVfdHlwZXMnXSA9ICdUeXB5IHNvdWJvcsWvJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnlpZCddID0gJ05lYnlsbyB6YWQmYWFjdXRlO25vIElEIGthdGVnb3JpZSc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5J10gPSAnTmVieWxvIHphZCZhYWN1dGU7bm8gSUQga2F0ZWdvcmllJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJyZTY2Fyb247YWJsb25hIHRvaG90byBqbSZlYWN1dGU7bmEgamnFviBleGlzdHVqZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnSm0mZWFjdXRlO25vICZTY2Fyb247YWJsb255JzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZSddID0gJyZTY2Fyb247YWJsb25hJzsKJGxhbmdbJ3Byb21wdF9uZXd0ZW1wbGF0ZSddID0gJ1Z5dHZvxZlpdCBub3ZvdSAmc2Nhcm9uO2FibG9udSc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIHVzZXIgZmluaXNoZXMgZG93bmxvYWRpbmcgYSBmaWxlPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBsb2FkIElEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsZSBuYW1lPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIFRoZSBJUCBBZGRyZXNzIG9mIHRoZSBkb3dubG9hZGVyPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25EZWxldGVDYXRlZ29yeSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgRGVsZXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gQ2F0ZWdvcnkgbmFtZTwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIENhdGVnb3J5IHBhdGg8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9PbkNyZWF0ZUNhdGVnb3J5J10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBDcmVhdGVkPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgY2F0ZWdvcnk8L2xpPg0KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gVGhlIGNhdGVnb3J5IGRlc2NyaXB0aW9uPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gVGhlIGNhdGVnb3J5IHBhdGg8L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBBIGZsYWcgaW5kaWNhdGluZyBpZiB0aGUgY2F0ZWdvcnkgaXMgbGlzdGFibGU8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25VcGxvYWQnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHVwbG9hZGVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+Y2F0ZWdvcnk8L2VtPiAtIFRoZSBjYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHVwbG9hZGVkIGZpbGU8L2xpPg0KPGxpPjxlbT5zaXplPC9lbT4gLSBUaGUgc2l6ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZTwvbGk+DQo8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIFRoZSBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgdGhlIHVwbG9hZGVkIGZpbGUgKG1heSBiZSBlbXB0eSk8L2VtPjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBUaGUgbG9uZyBkZXNjcmlwdGlvbiBmb3IgdGhlIHVwbG9hZGVkIGZpbGUgKG1heSBiZSBlbXB0eSk8L2VtPjwvbGk+DQo8bGk+PGVtPmF1dGhvcjwvZW0+IC0gVGhlIGF1dGhvciBvZiB0aGUgdXBsb2FkZWQgZmlsZSAoaWYgYXZhaWxhYmxlKTwvZW0+PC9saT4NCjxsaT48ZW0+aXBfYWRkcmVzczwvZW0+IC0gVGhlIGludGVybmV0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0aGF0IHVwbG9hZGVkIHRoZSBmaWxlPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kZWxldGVjYXRlZ29yeSddID0gJ1VkJmFhY3V0ZTtsb3N0IGdlbmVyb3ZhbiZhYWN1dGU7IGtkecW+IGplIHNtYXomYWFjdXRlO25hIGthdGVnb3JpZSc7CiRsYW5nWydpbmZvX2V2ZW50X29uY3JlYXRlY2F0ZWdvcnknXSA9ICdVZCZhYWN1dGU7bG9zdCBnZW5lcm92YW4mYWFjdXRlOywga2R5xb4gamUgdnl0dm/FmWVuYSBrYXRlZ29yaWUnOwokbGFuZ1snaW5mb19ldmVudF9vbmRvd25sb2FkJ10gPSAnVWQmYWFjdXRlO2xvc3QgZ2VuZXJvdmFuJmFhY3V0ZTssIGtkecW+IGplIHN0YcW+ZW4gc291Ym9yJzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdVZCZhYWN1dGU7bG9zdCBnZW5lcm92YW4mYWFjdXRlOywga2R5xb4gamUgbmFociZhYWN1dGU7biBub3YmeWFjdXRlOyBzb3Vib3InOwokbGFuZ1snaW5mb19ldmVudF9vbnJlbW92ZSddID0gJ1VkJmFhY3V0ZTtsb3N0IGdlbmVyb3ZhbiZhYWN1dGU7LCBrZHnFviBqZSBvZGViciZhYWN1dGU7biBzb3Vib3InOwokbGFuZ1sndGl0bGVfdXNlcnRhZ19vbnVwbG9hZCddID0gJ1XFvml2YXRlbHNrJnlhY3V0ZTsgdGFnLCBrdGVyJnlhY3V0ZTsgbSZhYWN1dGU7IGImeWFjdXRlO3Qgdm9sJmFhY3V0ZTtuIHBvIGRva29uxI1lbiZpYWN1dGU7IG5haHImYWFjdXRlO24maWFjdXRlOyc7CiRsYW5nWydub25lJ10gPSAnxb0mYWFjdXRlO2RuJnlhY3V0ZTsnOwokbGFuZ1snbWF0Y2hlc2ZvdW5kJ10gPSAnWiZhYWN1dGU7em5hbXkgbmFsZXplbnknOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdHInOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ1DFmWVzbcSbcm92YXQgbmEgc3RyJmFhY3V0ZTtua3UgaWQvYWxpYXMgcG8gdcW+aXZhdGVsc2smZWFjdXRlO20gdXBsb2FkdSc7CiRsYW5nWydkZXRhaWxzJ10gPSAnRGV0YWlseSc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnSnN0ZSBzaSBqaXN0aSAmdWFjdXRlO3ByYXZvdSBwcmVmZXJlbmMmaWFjdXRlOz8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnxb0mYWFjdXRlO2RuJmVhY3V0ZTsgc291Ym9yeSBuZWJ5bHkgbmFociZhYWN1dGU7bnkuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnUG92b2xpdCBwxZllcHMmYWFjdXRlO24maWFjdXRlOyc7CiRsYW5nWydpbmZvX3JlcGxhY2UnXSA9ICdSZXBsYWNlIGFueSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSAoZG9lcyBub3QgY2hhbmdlIGlkKSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnRG8gbm90IGRpc3BsYXkgYW55IGluaXRpYWwgcmVzdWx0cyB3aGVuIHRoZSBmaWx0ZXIgaXMgb24nOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGtleSB0byB0aGUgbW9kdWxlIGZvciBmdXJ0aGVyIG9yZ2FuaXppbmcgdXBsb2Fkcy4gIFRoaXMga2V5IGNvdWxkIGJlIGFuIGVuY29kZWQgc3RyaW5nIGxpa2U6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7LCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnSGlkZSB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIHVwbG9hZCBmb3JtLiAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIG1vZGU9JiMwMzk7dXBsb2FkJiMwMzk7LiAgSWYgVGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIGlzIHByZXNlbnQsIGFuZCBhIHVzZXIgaXMgY3VycmVudGx5IGxvZ2dlZCBpbiwgYSBoaWRkZW4gZmllbGQgd2lsbCBob2xkIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJuYW1lJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0mcXVvdDtpZCZxdW90OyAtIHNwZWNpZnkgYSBzaW5nbGUgZmlsZSBmb3IgdGhlIHVybC9saW5rIG9yIHNpbmdsZSBtb2RlcyAoYWJvdmUpJzsKJGxhbmdbJ3BhcmFtX3VzZV9zdHJpY3RfcmVnZXhwJ10gPSAnVGhlIGZpbHRlciBmaWVsZCBpcyB1c2VkIGFzIGEgc3RyaWN0IHJlZ2V4cCB3aXRob3V0IHByZXByb2Nlc3Npbmcgb2Ygc3BhY2VzJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHRlbXBsYXRlJ10gPSAnVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoZSBkZXRhaWxlZCByZXBvcnQuJzsKJGxhbmdbJ3BhcmFtX3RlbXBsYXRlJ10gPSAnVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoaXMgcmVwb3J0IG9yIGZvcm0uICBUaGUgbW9kZSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgdGVtcGxhdGUgaXMgcmVxdWlyZXJkLCBhbmQgdGhlbiBhIG5hbWUgbWF0Y2ggaXMgcGVyZm9ybWVkIHdpdGhpbiB0aGF0IHR5cGUuJzsKJGxhbmdbJ3BhcmFtX2ZpbHRlciddID0gJ1pvYnJheml0IGZpbHRyb3ZhYyZpYWN1dGU7IGZvcm11bCZhYWN1dGU7xZknOwokbGFuZ1sncGFyYW1fbm9faW50aXRpYWwnXSA9ICdPbmx5IHVzZWZ1bCB3aGVuIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBvciBvbiBieSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2V0aGVyIGluaXRpYWwgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQnOwokbGFuZ1sncGFyYW1fZmlsZXR5cGVzJ10gPSAnWm9icmF6aXQgcG91emUgc291Ym9yeSwgamVqaWNoxb4gdHlwIGplIG9ic2HFvmVuIHYgc2V6bmFtdSwgb2RkxJtsb3ZhbiZlYWN1dGU7bSDEjSZhYWN1dGU7cmthbWknOwokbGFuZ1sncGFyYW1fc29ydG9yZGVyJ10gPSAnICA8cD5Tb3J0IE9yZGVycw0KICA8dWw+DQogIDxsaT48ZW0+ZGF0ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPmRhdGVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+ZGVzY19hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRlc2NyaXB0aW9uPC9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgYXV0aG9yPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGF1dGhvcjwvbGk+DQogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgaXAgYWRkcmVzczwvbGk+DQogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBSYW5kb20gc29ydCBvcmRlcjwvbGk+DQogIDwvdWw+DQogIDwvcD4nOwokbGFuZ1sncGFyYW1fbGlzdGluZ3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmxvbmEsIGplxb4gYnVkZSBwb3XFvml0YSBwcm8gem9icmF6ZW4maWFjdXRlOyBzZXpuYW11IHNvdWJvcsWvLCBqZXN0bGnFvmUgamUgdGF0byB6b2JyYXplbmEgcG8ga2xpa251dCZpYWN1dGU7IG5hIGthdGVnb3JpaSB2IHDFmWVobGVkdSBrYXRlZ29yaSZpYWN1dGU7JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmdzb3J0b3JkZXInXSA9ICdacMWvc29iLCBrdGVyJnlhY3V0ZTttIGJ1ZGUgxZlhemVuIG9ic2FoIGthdGVnb3JpZSBwbyBwxZllY2hvZHUgeiBwxZllaGxlZHUga2F0ZWdvcmkmaWFjdXRlOyAoYWxhIHBhcmFtX3NvcnRvcmRlcikuJzsKJGxhbmdbJ3BhcmFtX2ZpbGVleHRlbnNpb25zJ10gPSAnIA0KZmlsZV9leHRlbnNpb25zPSZxdW90O2V4dDEsZXh0MixleHQzJnF1b3Q7DQo8cD52YWxpZCBvbmx5IHdoZW4gbW9kZT11cGxvYWQsIHRoaXMgcGFyYW1ldGVyIGxpbWl0cyB0aGUgdHlwZXMgb2YgZmlsZXMgdGhhdCBjYW4gYmUgdXBsb2FkZWQuICBJdCBvdmVycmlkZXMgYW55IHNldHRpbmdzIGluIHRoZSBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPm1vZHVsZSBwcmVmZXJlbmNlcy48L3A+JzsKJGxhbmdbJ3BhcmFtX2NvdW50J10gPSAnY291bnQ9JnF1b3Q7TiZxdW90Ow0KPHA+QSBwYXJhbWV0ZXIgdG8gbGlzdCBvbmx5IHRoZSBmaXJzdCBOIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5LiAgUGFnaW5hdGlvbiB3b3VsZCBiZSBiZXR0ZXIsIGJ1dCB0aGlzIHdpbGwgZG8gdGhlIHRyaWNrIGZvciBub3c8L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9JnF1b3Q7bmFtZSZxdW90Ow0KPHA+PGI+Tm90ZTo8L2I+IENhdGVnb3J5IGNhbiBiZSAmcXVvdDthbGwmcXVvdDssIHdoaWNoIHdpbGwgbGlzdCBhbGwgb2YgdGhlIHVwbG9hZHMgZnJvbSBhbGwgPGVtPmxpc3RhYmxlPC9lbT4gY2F0ZWdvcmllczwvcD4nOwokbGFuZ1sncGFyYW1fbW9kZSddID0gJyAgPHVsPg0KICA8bGk+PGVtPmRldGFpbGVkPC9lbT4gLSBEaXNwbGF5IGEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIGNhdGVnb3J5PC9saT4NCiAgPGxpPjxlbT51cGxvYWQ8L2VtPiAtIERpc3BsYXkgYSBmb3JtIHRvIGFsbG93IGEgZnJvbnRlbmQgdXNlciB0byB1cGxvYWQgYSBmaWxlPC9saT4NCiAgPGxpPjxlbT51cmwgPGk+b3I8L2k+IGxpbms8L2VtPiAtIERpc3BsYXkgYSBsaW5rIHRvIGEgZmlsZTwvbGk+DQogIDxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gRGlzcGxheSBhIHN1bW1hcml6ZWQgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIGNhdGVnb3J5PC9saT4NCiAgPGxpPjxlbT5zaW5nbGU8L2VtPiAtIERpc3BsYXkgYSBkZXRhaWxlZCByZXBvcnQgYWJvdXQgYSBzaW5nbGUgdXBsb2FkPC9saT4NCiAgPGxpPjxlbT5zaW5nbGVzdW1tYXJ5PC9lbT4gLSBEaXNwbGF5IGEgc3VtbWFyaXplZCByZXBvcnQgYWJvdXQgYSBzaW5nbGUgdXBsb2FkL2xpPg0KICA8L3VsPic7CiRsYW5nWydwYXJhbV9zZWxlY3Rmb3JtJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBmb3JtaWQgb2YgdGhlIHBhcmVudCBmb3JtLiAgVXNlZCB0byBoYW5kbGUgcGFyYW1ldGVyIHBhc3NpbmcnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ3doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdHZhbHVlJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBmaWVsZCB2YWx1ZSc7CiRsYW5nWydwYXJhbV9zZWxlY3Rub25lJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3ZXRoZXIgJiMwMzk7bm9uZSYjMDM5OyBpcyBhIHZhbGlkIGNob2ljZS4nOwokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdWciZhYWN1dGU7dGl0IHNlIG5hIHBhbmVsIG1vZHVsdSc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3JpZXMnXSA9ICdOZWpzb3Ugxb4mYWFjdXRlO2RuJmVhY3V0ZTsgbmFkZWZpbm92YW4mZWFjdXRlOyBrYXRlZ29yaWUnOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdQb8W+YWRvdmF0IHDFmSZpYWN1dGU7cG9ueSB1IHYmc2Nhcm9uO2VjaCBuYWhyJmFhY3V0ZTt2YW4meWFjdXRlO2NoIHNvdWJvcsWvJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdUaGlzIG9wZXJhdGlvbiB3aWxsIHJlc3RvcmUgdGhlIHRlbXBsYXRlIHRvIHN5c3RlbSBkZWZhdWx0cy4gIEFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgd2lsbCBiZSBsb3N0LiAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/JzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnSmluJnlhY3V0ZTsgbiZhYWN1dGU7aGxlZG92JnlhY3V0ZTsgc291Ym9yLic7CiRsYW5nWyd0aHVtYm5haWwnXSA9ICdOJmFhY3V0ZTtobGVkJzsKJGxhbmdbJ25ld3RodW1ibmFpbCddID0gJ05haHImYWFjdXRlO3Qgbm92JnlhY3V0ZTsgbiZhYWN1dGU7aGxlZCc7CiRsYW5nWydpbmZvX3N1bW1hcnknXSA9ICdBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlIChpZiBlbXB0eSwgdGhlIGZpbGUgbmFtZSBpcyB1c2VkIHdpdGhvdXQgdGhlIGV4dGVuc2lvbiknOwokbGFuZ1snaW5mb19jYXRlZ29yeW5hbWUnXSA9ICdLciZhYWN1dGU7dGsmZWFjdXRlOyBqbSZlYWN1dGU7bm8gcHJvIGthdGVnb3JpaSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ1BvcGlzIGthdGVnb3JpZSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ0ptJmVhY3V0ZTtubyBhZHJlcyZhYWN1dGU7xZllLCBrdGVyJmVhY3V0ZTsgYnVkZSBwb3XFvml0byBwcm8gdWtsJmFhY3V0ZTtkJmFhY3V0ZTtuJmlhY3V0ZTsgc291Ym9yxa8gcHJvIHR1dG8ga2F0ZWdvcmlpKGFkcmVzJmFhY3V0ZTvFmSBidWRlIHYgdXBsb2FkcykuIFBva3VkIGFkcmVzJmFhY3V0ZTvFmSBzdGVqbiZlYWN1dGU7aG8gam0mZWFjdXRlO25hIG5lZXhpc3R1amUgYnVkZSB2eXR2b8WZZW4uJzsKJGxhbmdbJ2luZm9fZGVzdG5hbWUnXSA9ICdQb3XFviZpYWN1dGU7dmVqdGUgJiMwMzk7TmFociZhYWN1dGU7dCBqYWtvJiMwMzk7IGplbm9tIHYgcMWZJmlhY3V0ZTtwYWTEmywgxb5lIGNoY2V0ZSB6bcSbbml0IG4mYWFjdXRlO3pldiBzb3Vib3J1LiBOZWNodGUgcHImYWFjdXRlO3pkbiZlYWN1dGU7IHBva3VkIGNoY2V0ZSBuZWNoYXQgbiZhYWN1dGU7emV2IHNvdWJvcnUsIHRhayBqYWsgamUuJzsKJGxhbmdbJ2Vycm9yX2NhbnRjcmVhdGVkaXJlY3RvcnknXSA9ICdOZW1vaHUgdnl0dm/FmWl0IGFkcmVzJmFhY3V0ZTvFmSc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ1RoZSBDTVNNYWlsZXIgbW9kdWxlIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQnOwokbGFuZ1sndXBsb2FkX25vdGlmaWNhdGlvbiddID0gJ05vdiZ5YWN1dGU7IHNvdWJvciBieWwgbmFociZhYWN1dGU7bic7CiRsYW5nWyd0aXRsZV9lbWFpbF9vbl91cGxvYWQnXSA9ICdPZGVzbGF0IG96biZhYWN1dGU7bWVuJmlhY3V0ZTsgbyBuYWhyJmFhY3V0ZTtuJmlhY3V0ZTsgc291Ym9ydSBuYTonOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICcmU2Nhcm9uO2FibG9uYSBlLW1haWx1JzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdWeXR2JmFhY3V0ZTvFmWV0IGluZGV4Lmh0bWwgc291Ym9yeSB2IGthxb5kJmVhY3V0ZTttIGFkcmVzJmFhY3V0ZTvFmWk/PGJyLz48ZW0+SmnFviBleGlzdHVqJmlhY3V0ZTtjJmlhY3V0ZTsgaW5kZXguaHRtbCBzb3Vib3J5IGJ1ZG91IHphY2hvdiZhYWN1dGU7bnkuPC9lbT4nOwokbGFuZ1snYWJvdXQnXSA9ICdPIHBvbG/FvmNlJzsKJGxhbmdbJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnXSA9ICdQxZkmaWFjdXRlO3N0dXAgemFtJmlhY3V0ZTt0bnV0LiBQcm9zJmlhY3V0ZTttIHprb250cm9sdWp0ZSBWYSZzY2Fyb247ZSBvcHImYWFjdXRlO3ZuxJtuJmlhY3V0ZTsuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdOZXBvZGHFmWlsbyBzZSB6YXBzYXQnOwokbGFuZ1snYWRkY2F0ZWdvcnknXSA9ICdQxZlpZGF0IGthdGVnb3JpaSc7CiRsYW5nWydhbGwnXSA9ICdWJnNjYXJvbjtlJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdKc3RlIHNpIGppc3RpPyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRvcic7CiRsYW5nWydjYW5jZWwnXSA9ICdacnUmc2Nhcm9uO2l0JzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcoQ2VzdGEgbmVtxa/FvmUgYiZ5YWN1dGU7dCB1cHJhdmVuYSknOwokbGFuZ1snY2F0ZWdvcmllcyddID0gJ0thdGVnb3JpZSc7CiRsYW5nWydjYXRlZ29yeSddID0gJ0thdGVnb3JpZSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdLYXRlZ29yaWUgYnlsYSAmdWFjdXRlO3NwxJsmc2Nhcm9uO27EmyBwxZlpZCZhYWN1dGU7bmEnOwokbGFuZ1snY2hhbmdlbG9nJ10gPSAnPHVsPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjAuIC0gU2VwdGVtYmVyIDIwMDUuPC9wPg0KPHA+IEluaXRpYWwgUmVsZWFzZS48L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjAxLiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+TWlub3IgZml4ZXMuPC9wPjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDIuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5BZGRlZCBhYmlsaXR5IHRvIHNwZWNpZnkgc29ydCBvcmRlcjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDMuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5GaXggcmVnYXJkaW5nIGNvbmZsaWN0IGluIHRlbXBsYXRlIG5hbWVzPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4wNC4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4NCjxwPkFkZGVkIGFiaWxpdHkgdG8gcmUtc2NhbiBhIGRpcmVjdG9yeSwgYW5kIHRvIHVwbG9hZCBmaWxlcyBmcm9tIHRoZSBhZG1pbiBwYWdlPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4wNS4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4NCjxwPkZpeGVkIHNvbWUgUEhQIHZhcmlhYmxlIGlzc3VlczwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDYuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5BZGRlZCBhdXRob3IgZmllbGQgdG8gdGhlIGFkbWluIHBhbmVsIHVwbG9hZCBmb3JtLCBhZGRlZCBhIHN1bW1hcnkgZmllbGQsIGFuZCBtYWRlIGRlc2NyaXB0aW9uIGEgdGV4dCBhcmVhLCBhbmQgYWxsb3cgdGhlIHVzZXIgdG8gc3BlY2lmeSBhIGRlc3RpbmF0aW9uIGZpbGUgbmFtZTwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDcuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byByZW5hbWUgZmlsZXMgYW5kIGZpeGVkIGEgc2NhbiBlcnJvcjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDguIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5CZXR0ZXIgaGFuZGxpbmcgb2YgbmFtZXMgd2l0aCBzcGFjZXMsIGFuZCBhIGZldyBtaW5vciBlcnJvcnMgZml4ZWQuICBBZGRlZCBzd2VkaXNoIHRyYW5zbGF0aW9uICh0aGFua3Mgd2VzdGlzKTwvcD48L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuMC4gLSBPY3RvYmVyIDIwMDU8L3A+DQogPHVsPg0KICAgPGxpPk1vZGlmaWVkIEF0dGVtcHRVcGxvYWQgZnVuY3Rpb24gc28gaXQgY291bGQgYmUgY2FsbGVkIGV4dGVybmFsbHk8L2xpPg0KICAgPGxpPkFkZGVkIEdldFVwbG9hZERldGFpbHMgZnVuY3Rpb24gdGhhdCByZXR1cm5zIGFsbCBvZiB0aGUgZGV0YWlscyBhYm91dCBhIG1vZHVsZSwgaW5jbHVkaW5nIGEgbGluazwvbGk+DQogICA8bGk+QWRkZWQgUmVkaXJlY3RzIHNvIHRoYXQgd29ya2luZyB3aXRoIHRoZSBtb2R1bGUgaXMgYWxvdCBuaWNlciwgaXQgcmV0dXJucyB0byB0aGUgcmlnaHQgdGFiPC9saT4NCiAgIDxsaT5DaGFuZ2VkIHRoZSBmcm9udCB0ZW1wbGF0ZSB0byBsb29rIGEgbGl0dGxlIGJldHRlciBhbmQgbWFrZSBtb3JlIHNlbnNlPC9saT4NCiAgIDxsaT5GaXhlcyB0byB0aGUgdXBsb2FkcyBzdHVmZiBzbyB0aGF0IHRoZSBkZXNjcmlwdGlvbiBpcyBzZXQsIGFuZCBuYW1lIGFuZCBzdW1tYXJ5IGFyZSBwdXQgaW4gdGhlIHJpZ2h0IHBsYWNlPC9saT4NCiAgIDxsaT5GaXhlcyB0byBldmVuIGJldHRlciBoYW5kbGUgc3BhY2VzIGluIG5hbWVzPC9saT4NCiAgIDxsaT5PcHRpb25hbHkgcGxhY2UgZHVtbXkgaW5kZXguaHRtbCBmaWxlcyBpbiBlYWNoIHVwbG9hZCBkaXJlY3Rvcnk8L2xpPg0KICAgPGxpPklmIHNwZWNpZnlpbmcgYSBkZXN0aW5hdGlvbiBuYW1lLCBhbmQgbm8gZXh0ZW5zaW9uIGlzIGdpdmVuLCB0aGUgZXh0ZW5zaW9uIG9mIHRoZSBvcmlnaW5hdGluZyBmaWxlIChpZiBhbnkgZXhpc3RzIGlzIHVzZWQ8L2xpPg0KIDwvdWw+DQogPHA+PGVtPjxiPkltcG9ydGFudCE8L2I+PC9lbT48YnIvPkl0IGlzIG5vdCBwb3NzaWJsZSB0byB1cGdyYWRlIGZyb20gYW55IG90aGVyIHZlcnNpb24gb2YgdGhlIFVwbG9hZHMgbW9kdWxlIHRvIDEuMS4wLiAgVGhpcyBpcyBkdWUgdG8gc29tZSBlcnJvcnMgdGhhdCB3ZXJlIG1hZGUgaW4gdGhlIGRhdGFiYXNlIHJvdXRpbmVzLCBhbmQgZXZlbiBpbiB0aGUgdXBncmFkZSByb3V0aW5lIGluIDEuMC42LiAgWW91IG11c3QgZGUtaW5zdGFsbCB0aGUgb2xkIHZlcnNpb24sIGFuZCB0aGVuIHJlLWluc3RhbGwgdGhlIG5ldyB2ZXJlc2lvbi4gVGhpcyB3aWxsIGNhdXNlIHNpZ25pZmljYW50IGRpZmZpY3VsdHkgaWYgeW91IGhhdmUgZHNjcmlwdGlvbnMsIGV0YywgaW4geW91ciB0YWJsZXM8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuMS4gLSBPY3RvYmVyLCAyMDA1PC9wPg0KPHA+Rml4ZWQgYSBjb3VwbGUgb2YgbWlub3IgYnVncyBpbiB0aGUgR2V0VXBsb2FkRGV0YWlscyBhbmQgYWRkZWQgYW5vdGhlciBsaW5rIChvciBhIHVybCkgdG8gdGhlIHVwbG9hZGVkIGZpbGUuPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjIuIC0gT2N0b2JlciwgMjAwNTwvcD4NCjxwPkZpeGVkIHRoZSBVUkwgZmllbGQgaW4gR2V0VXBsb2FkRGV0YWlscyB0byByZXR1cm4gYSBkb3dubG9hZCBsaW5rIGFuZCBhZGRlZCBhbiBhYnN1cmwgZmllbGQgd2hpY2ggcmV0dXJucyB0aGUgYWJzb2x1dGUgcGF0aCB0byB0aGUgZmlsZSBvbiB0aGUgd2Vic2VydmVyLiAgQ2xpY2tzIG9uIHRoaXMgbGluayB3aWxsIG5vdCBiZSBjb3VudGVkPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjMuIC0gT2N0b2JlciwgMjAwNTwvcD4NCjxwPkZpeGVkIHRoZSB1cGdyYWRlIHByb2JsZW0gZnJvbSB0aGUgMS4wLnggc2VyaWVzLiAgVXNlcnMgb2YgdGhlIDEuMC54IHNlcmllcyBzaG91bGQgYmUgYWJsZSB0byB1cGdyYWRlIHRvIDEuMS4zIG5vdyB3aXRoIG5vIGRpZmZpY3VsdHkuIDxiPlRob3NlIGFyZSBmYW1vdXMgbGFzdCB3b3JkcywgcGxlYXNlIGJhY2t1cCBmaXJzdDwvYj4uIEZpeGVkIHRoZSBjb250ZW50IHJlZGlyZWN0IHRoaW5ncyB0aGF0IHdlcmUgaXJyaXRhdGluZyBtZS4gIEFsc28gYWRkZWQgY2F0ZWdvcnk9YWxsIHRvIGxpc3QgYWxsIG9mIHRoZSB1cGxvYWRzIGluIGFsbCBsaXN0YWJsZSBjYXRlZ29yaWVzIDxlbT4obGV0cyBhbGwgaG9wZSBJIGdvdCB0aGUgc3FsIGZpZ3VyZWQgb3V0IHByb3Blcmx5KTwvZW0+LjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS40LiAtIE9jdG9iZXIsIDIwMDU8L3A+DQo8cD5BZGRlZCB0aGUgY291bnQgcGFyYW1ldGVyIHRvIGxpc3Qgb25seSB0aGUgZmlyc3QgTiByZWNvcmRzLCBhbmQgYWRkZWQgJnF1b3Q7c3VtbWFyeWxpbmsmcXVvdDssIGFuZCAmcXVvdDtjYXRlZ29yeSZxdW90OyB0byB0aGUgdGVtcGxhdGVzIGZvciB3ZXN0aXMuICBGb3IgZXhhbXBsZXMgb24gaG93IHRvIHVzZSB0aGVtIHJlc2V0IHlvdXIgdGVtcGxhdGVzIGJhY2sgdG8gZGVmYXVsdC48L3A+PC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjUuIC0gTm92ZW1iZXIsIDIwMDU8L3A+DQo8cD5BZGRlZCBlbWFpbCBub3RpZmljYXRpb24gYW5kIHNvbWUgYnVnIGZpeGVzPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjYuIC0gTm92ZW1iZXIsIDIwMDU8L3A+DQo8cD5BZGRlZCBhbiBhcGkgZnVuY3Rpb24gYW5kIGZpeGVkIHNvbWUgcmVkaXJlY3Rpb24gc3R1ZmY8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuNy4gLSBOb3ZlbWJlciwgMjAwNTwvcD4NCjxwPk1vcmUgQVBJIGZ1bmN0aW9ucywgYW5kIG5vdyBpZ25vcmUgZG90IGZpbGVzIHdoZW4gc2Nhbm5pbmcuICBFbWFpbCBub3RpZmljYXRpb24gaXMgbm93IGluLjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS44LiAtIEphbnVhcnksIDIwMDY8L3A+DQo8cD4qIEltcHJvdmVkIGRvY3Mgd3J0IGFwYWNoZSBhbmQgcGhwIGNvbmZpZ3MuPC9wPg0KPHA+KiBGaXhlZCBwcm9ibGVtIHdoZXJlIGZpbGVzaXplIHdhcyBzaG93aW5nIHVwIGFzIDAuPC9wPg0KPHA+KiBNb2RpZmllZCBwZXJtaXNzaW9ucyB0byBiZSBtb3JlIGdyYW51bGFyPC9wPg0KPHA+KiBBZGRlZCBzb21lIGNvbW1lbnRzIGFuZCB2ZXJib3NpdHkgdG8gdGhlIGNhdGVnb3J5IGFuZCB1cGxvYWRzIGZvcm1zIGluIHRoZSBhZG1pbiBzZWN0aW9uPC9wPg0KPHA+KiBBZGRlZCAmcXVvdDtyYW5kb20mcXVvdDsgc29ydCBvcmRlcjwvcD4NCjxwPiogU29tZSBQSFA1IGZpeGVzPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjkuIC0gSmFudWFyeSwgMjAwNjwvcD4NCjxwPiogQWRkZWQgdGhlIGFiaWxpdHkgdG8gdXBsb2FkIGEgdGh1bWJuYWlsIGltYWdlPC9wPg0KPHA+KiBTb21lIGltcHJvdmVkIGF1ZGl0aW5nPC9wPg0KPHA+KiB4bWwgbm93IGFkZGVkIHRvIHRoZSBkZWZhdWx0IGZpbGUgdHlwZXMgKG5ldyBpbnN0YWxscyBvbmx5KTwvcD4NCjxwPiogQWRkZWQgYSBjb25maXJtYXRpb24gbWVzc2FnZSB0byB0aGUgcmVzZXQgdG8gZGVmYXVsdHMgYnV0dG9ucyBvZiB0aGUgdGVtcGxhdGUgcGFnZXMuPC9wPg0KPHA+KiBBZGRlZCB0aGUgZmlsZV9leHRlbnNpb25zIHBhcmFtZXRlciBmb3IgdGhlIHVwbG9hZCBmb3JtPC9wPg0KPHA+KiBUaGUgY3VycmVudCBjYXRlZ29yeSBzZWxlY3RlZCBpbiB0aGUgZmlsZXMgZmlsdGVyIGlzIHN0aWNreS4NCjxwPiogQWRkZWQgYSBwcmVmZXJlbmNlIHRvIGVuZm9yaWNlIGZpbGVuYW1lIGV4dGVuc2lvbnMgKGRlZmF1bHRzIHRvIG9uKTwvcD4NCjxwPiogQWRkZWQgYSBsaW5rIHRvIHRoZSBlZGl0IHBhZ2UsIGluIHRoZSBuYW1lIGNvbHVtbiBvZiB0aGUgZmlsZXMgbGlzdC48L3A+DQo8cD4qIE1pbm9yIGNoYW5nZXMgdG8gdGhlIGxheW91dCBhbmQgdGV4dCB0byBhZGQgY2xhcml0eS48L3A+DQo8cD4qIEFkZGVkIGRvd25sb2FkX3VybCBhcyBhbiBhdmFpbGFibGUgc21hcnR5IHRhZyBpbiB0aGUgdGVtcGxhdGVzPC9wPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuMTAuIC0gRmVicnVhcnksIDIwMDY8L3A+DQo8cD4qIFN1bW1hcnkgbm93IGRlZmF1bHRzIHRvIHRoZSBmaWxlbmFtZSAod2l0aG91dCB0aGUgZXh0ZW5zaW9uKSBpZiBub25lIGlzIHNwZWNpZmllZDwvcD4NCjxwPiogTm93IGNvcnJlY3RseSBoYW5kbGUgaWYgdGhlIHRodW1ibmFpbCBleHRlbnNpb24gaXMgbm90IGluIHRoZSBhY2NlcHRlZCBleHRlbnNpb24gbGlzdDwvcD4NCjxwPiogTm8gbG9uZ2VyIGRpc3BsYXkgYW55IGNvbnRlbnQgaW4gdGhlIGZpbGVzIHRhYiBpZiB0aGVyZSBhcmUgbm8gY2F0ZWdvcmllcyBkZWZpbmVkPC9wPg0KPHA+KiBEaXNwbGF5IGEgbGluayBpbiB0aGUgZXJyb3IgcGFnZSB0aGF0IHRha2VzIHlvdSBiYWNrIHRvIHRoZSBtYWluIGFkbWluIHBhbmVsPC9wPg0KPHA+KiBBbGxvdyBmb3IgcmVwbGFjaW5nIG9mIHVwbG9hZGVkIGZpbGVzPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjExLiAtIE1hcmNoLCAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgZm9yIGEgbGluayB0byBhIGRldGFpbGVkIHBhZ2Ugd2hlbiBpbiBzdW1tYXJ5IG1vZGUuPC9wPg0KPHA+U3BsaXQgdGhlIGRlZmF1bHQgYWN0aW9uIGFuZCBkZWZhdWx0YWRtaW4gYWN0aW9ucyBpbnRvIHNlcGFyYXRlIGZpbGVzLCBmb3IgYSBiaXQgb2YgbWVtb3J5IGltcHJvdmVtZW50LCBob3BlZnVsbHk8L3A+DQo8cD5BZGQgdGhlIGFiaWxpdHkgdG8gcmVkaXJlY3QgdG8gYW5vdGhlciBwYWdlIGFmdGVyIGEgZnJvbnRlbmQgdXNlciB1cGxvYWRlZCBhIGZpbGU8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuMTIuIC0gTWFyY2gsIDIwMDY8L3A+DQo8cD5BZGRlZCB0aGUgc2luZ2xlc3VtbWFyeSBtb2RlIHRvIGRpc3BsYXkgYSBzaW5nbGUgdXBsb2FkIGluIHN1bW1hcnkgbW9kZTwvUD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS4xMy4gLSBBcHJpbCwgMjAwNjwvcD4NCjxwPkFkZGVkIG9wdGlvbmFsIGZpbHRlcmluZyBvbiB0aGUgZnJvbnRlbmQsIGFuZCBhIGNvdXBsZSBvZiBleHRyYSBwYXJhbWV0ZXJzIHRvIGdvIHdpdGggaXQ8L3A+DQo8cD5GaXhlZCBhIHByb2JsZW0gd2hlcmUgaXQgd291bGQgYWxsb3cgeW91IHRvIGVudGVyIGEgYmxhbmsgcGF0aCB3aGVuIGNyZWF0aW5nIGEgY2F0ZWdvcnk8L3A+DQo8cD5TcGxpdCBzdHVmZiBpbnRvIChzb21lKSBzZXBhcmF0ZSBhY3Rpb24gZmlsZXMgZm9yIHNvbWUgaG9wZWZ1bCBwZXJmb3JtYW5jZSBpbmNyZWFzZXM8L3A+DQo8cD5BZGRlZCBjb3B5cmlnaHQgbm90aWNlczwvcD4NCjxwPkNoYW5nZWQgKG9wdGlvbmFsKSBkZXBlbmRlbmN5IGZyb20gVXNlcklEIHRvIEZyb250RW5kVXNlcnMgTW9kdWxlLjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMi4xIC0gQXByaWwsIDIwMDY8L3A+DQo8cD5DaGFuZ2VkIF9zY2FuRGlyZWN0b3J5IHRvIGFuIEFQSSBmdW5jdGlvbiBTY2FuRGlyZWN0b3J5IGFuZCB0aGVuIGFkZGVkIFNtYXJ0U2NhbkRpcmVjdG9yeSB0byBzY2FuIHRoZSBkaXJlY3RvcnkgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHN1bW1hcnkgb3IgZGV0YWlsIGxpc3RpbmcgdG8gaGFuZGxlIHRoZQ0KY2FzZSB3aGVyZSBzb21lYm9keSB1cGxvYWRlZCBmaWxlcyB2aWEgRlRQIG9yIHNvbWV0aGluZyBhbmQgZGlkIG5vdCBnbyBpbnRvIHRoZSBhZG1pbiBzZWN0aW9uIHRvIHVwZGF0ZSB0aGUgY2F0ZWdvcmllcy48L3A+DQo8cD5Db3JyZWN0aW9uIHRvIGFsbCBkYiBhY2Nlc3Mgc3R1ZmYuIEhvcGVmdWxseSBwcm92aWRlcyBhIHBlcmZvcm1hbmNlIGluY3JlYXNlLjwvcD4NCjxwPkZpeGVzIHRvIHRoZSBhYm91dCBzdHVmZiwgbm93IHVzZSBDcmVhdGVQYXJhbWV0ZXI8L3A+DQo8cD5BZGRlZCB0aGUgdXBsb2FkX3RlbXBsYXRlLCBzdW1tYXJ5X3RlbXBsYXRlLCBhbmQgZGV0YWlsX3RlbXBsYXRlIChvcHRpb25hbCkgcGFyYW1ldGVyPC9wPg0KPHA+QWRkZWQgdGhlIG5vYXV0aG9yIHBhcmFtZXRlciwgYW5kIHRoZSBrZXkgcGFyYW1ldGVyLiAgVGhlIGtleSBwYXJhbWV0ZXIgYWxsb3dzIHRoZSB1cGxvYWRzIG1vZHVsZSB0byBiZSBlbWJlZGRlZCBpbnRvIG90aGVyIG1vZHVsZXM8L3A+DQo8cD5Nb3ZlZCB0byB1bmRlciB0aGUgY29udGVudCBtZW51LCBhbmQgZW50aXRsZWQgJiMwMzk7RmlsZXMgKFVwbG9hZCBNb2R1bGUpJiMwMzk7PC9wPjsNCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMi4yIC0gSnVuZSwgMjAwNg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gaGF2ZSBtdWx0aXBsZSBkYXRhYmFzZSB0ZW1wbGF0ZXMsIGFuZCB0byBzZWxlY3Qgb25lIG9uIHRoZSB0YWcgd2l0aCB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyLjwvcD4NCjxwPkZpeGVkIGFuIGlzc3VlIHdoZXJlIGZpbGVzIHdlcmUgZ2V0dGluZyBjb3JydXB0ZWQgb24gZG93bmxvYWQ8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjIuMyAtIEp1bmUsIDIwMDYNCjxwPkZpeGVzIHRvIHVzZSBhZG9kYi1saXRlIHByb3BlciwgcmF0aGVyIHRoYW4gdGVkcyBoYWNrPC9wPg0KPHA+RGV0YWlsIGxpbmsgbm93IGRpc3BsYXlzIGlubGluZTwvcD4NCjxwPk90aGVyIG1pbm9yIHR3ZWFrcyB0aGF0IEkgY2FudCByZW1lbWJlcjwvcD4NCjwvbGk+DQo8bGk+VmVyc2lvbiAxLjMuMCAtIFNlcHRlbWJlciwgMjAwNw0KPHA+Rml4ZXMgdG8gdGhlIERUIGZpZWxkIHR5cGU8L3A+DQo8cD5Vc2UgdGhlIEZFVSB1c2VybmFtZSAob3B0aW9uYWxseSkgc28gdGhhdCB3ZSBjYW4gdHJhY2sgd2hlbiBhIGxvZ2dlZCBpbiB1c2VyIHVwbG9hZHMgYSBmaWxlPC9wPg0KPHA+QWRkIGZpbGV0eXBlIGNhcGFiaWxpdGllcyB0byBhc3NvY2lhdGUgYW4gaWNvbiB3aXRoIGEgcGFydGljdWxhciB1cGxvYWQuICBBbHNvIHN1cHBvcnQgYW4gdW5rbm93biBmaWxlIHR5cGUgZm9yIGFueXRoaW5nIHRoYXQgZG9lcyBub3QgbWF0Y2guPC9wPg0KPHA+Q29tcGxldGVseSByZS13b3JrZWQgdGhlIG11bHRpcGxlIGRhdGFiYXNlIHRlbXBsYXRlIHN0dWZmLjwvcD4NCjxwPkFkanVzdG1lbnRzIHRvIHRoZSBkZWZhdWx0IHRlbXBsYXRlczwvcD4NCjxwPkZpeGVzIHRvIHVzaW5nIGNhdGVnb3J5PSZxdW90O2FsbCZxdW90OzwvcD4NCjxwPkdlbmVyYXRlIHRodW1ibmFpbHMgYXV0b21hdGljYWxseSAob3B0aW9uYWxseSkgZm9yIGNlcnRhaW4gZmlsZSB0eXBlcywgb24gdXBsb2FkLCBhbmQgb24gc2Nhbi48L3A+DQo8cD5BZGQgY2FwdGNoYSBzdXBwb3J0IHRvIHRoZSB1cGxvYWQgZm9ybTwvcD4NCjxwPkFkZCBhIHNhZmUgbW9kZSB3YXJuaW5nIGluIHRoZSBhZG1pbiBwYW5lbDwvcD4NCjxwPlVzZXMgY2h1bmtlZCBkb3dubG9hZHMuPC9wPg0KPHA+QWRkcyBwcmVmaXggYW5kIHByZWZpeF9mZXUgY2FwYWJpbGl0eSB0byB1cGxvYWRlZCBmaWxlcy48L3A+DQo8cD5BZGRlZCB0aGUgZGV0YWlscGFnZSBwYXJhbS48L3A+DQo8cD5BZGRlZCB0aGUgYWJpbGl0eSB0byBkaXNwbGF5IGFuIGltYWdlIGluIGZ1bGwgc2l6ZSAob3Igd2hhdGV2ZXIgc2l6ZSB3ZSB3YW50KSwgc28gdGhhdCB0aGUgdXBsb2FkcyBtb2R1bGUgY2FuIGJlIHVzZWQgYXMgYSBnYWxsZXJ5LjwvcD4NCjxwPkFkZGVkIHNlY3VyaXR5ICh2aWEgdGhlIEZyb250RW5kVXNlcnMgbW9kdWxlKSB0byBjYXRlZ29yaWVzPC9wPg0KPHA+QWRkZWQgYSBzZWxlY3QgbW9kZSB0byBnZW5lcmF0ZSBhIHB1bGxkb3duIG9mIGZpbGVzIGluIGEgY2F0ZWdvcnksIGZvciB1c2Ugd2hlbiBhdHRhY2hpbmcgdXBsb2FkcyBtb2R1bGUgdG8gc29tZSBvdGhlciBtb2R1bGUuPC9wPg0KPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2RhdGUnXSA9ICdEYXR1bSc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdEYXR1bSBuYWhyJmFhY3V0ZTtuJmlhY3V0ZTsnOwokbGFuZ1snZGVmYXVsdCddID0gJ1YmeWFjdXRlO2Nob3omaWFjdXRlOyc7CiRsYW5nWydkZWxldGUnXSA9ICdTbWF6YXQnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdQb3Bpcyc7CiRsYW5nWydkZXN0bmFtZSddID0gJ05haHImYWFjdXRlO3QgamFrbyc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhaWwgVGVtcGxhdGUnOwokbGFuZ1snZG93bmxvYWRlZCddID0gJ1NvdWJvciAlcyBieWwgc3Rhxb5lbi4nOwokbGFuZ1snZG93bmxvYWRzJ10gPSAnU3QmYWFjdXRlO2hudXQmaWFjdXRlOyc7CiRsYW5nWydlZGl0J10gPSAnVXByYXZpdCc7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdVcHJhdml0IGthdGVnb3JpaSc7CiRsYW5nWydlZGl0dXBsb2FkJ10gPSAnVXByYXZpdCBVcGxvYWQnOwokbGFuZ1snZXJyb3InXSA9ICdDaHliYSEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlJ10gPSAnS2F0ZWdvcmllIHBvdcW+JmlhY3V0ZTt2YWomaWFjdXRlO2MmaWFjdXRlOyB0dXRvIGNlc3R1IHXFviBleGlzdHVqZSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0cyddID0gJ0NoeWJhOiBLYXRlZ29yaWUgdcW+IGV4aXN0dWplJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90ZW1wdHknXSA9ICdDaHliYSEgTmVtxa/FvnUgc21hemF0IGthdGVnb3JpaSwgcHJvdG/FvmUgbmVuJmlhY3V0ZTsgcHImYWFjdXRlO3pkbiZhYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdDaHliYTogS2F0ZWdvcmllIG5lbmFsZXplbmEhJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdDaHliYTogQ2h5YmEgZGF0YWImYWFjdXRlO3plISc7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnQ2h5YmE6IFByJmFhY3V0ZTt6ZG4mYWFjdXRlOyBrYXRlZ29yaWUhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0NoeWJhOiBQciZhYWN1dGU7emRuJmFhY3V0ZTsgY2VzdGEhJzsKJGxhbmdbJ2Vycm9yX2ZpbGVleGlzdHMnXSA9ICdDaHliYSEgU291Ym9yICVzIGppxb4gZXhpc3R1amUuJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ0NoeWJhISBTb3Vib3IgJXMgbmVieWwgbmFsZXplbi4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnQ2h5YmE6IE5lZG9zdGF0ZWsgcGFyYW1ldHLFryBwcm8gYsSbaCBtb2R1bHUhJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRhdXRob3InXSA9ICdDaHliYTogJlNjYXJvbjtwYXRuJnlhY3V0ZTsgKG5lYm8gcHImYWFjdXRlO3pkbiZ5YWN1dGU7KSBhdXRvci4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnQ2h5YmE6ICZTY2Fyb247cGF0biZhYWN1dGU7IChuZWJvIHByJmFhY3V0ZTt6ZG4mYWFjdXRlOykga2F0ZWdvcmllLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdDaHliYTogJlNjYXJvbjtwYXRuJnlhY3V0ZTsgKG5lYm8gcHImYWFjdXRlO3pkbiZ5YWN1dGU7KSBwb3Bpcy4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGZpbGUnXSA9ICdDaHliYTogJlNjYXJvbjtwYXRuJmVhY3V0ZTsgKG5lYm8gcHImYWFjdXRlO3pkbiZlYWN1dGU7KSBqbSZlYWN1dGU7bm8gc291Ym9ydS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnQ2h5YmE6IFNvdWJvcnkgcyB0JmlhY3V0ZTttdG8gam0mZWFjdXRlO25lbSAocHJhdmTEm3BvZG9ibsSbIHDFmSZpYWN1dGU7cG9ub3UpIG5lanNvdSBwb3ZvbGVueSAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdDaHliYTogJlNjYXJvbjtwYXRuJmVhY3V0ZTsgdXBsb2FkIGlkJzsKJGxhbmdbJ2Vycm9yX25vZmlsZXMnXSA9ICdDaHliYTogTm8gTWF0Y2hpbmcgRmlsZXMhJzsKJGxhbmdbJ2ZpbGVzJ10gPSAnU291Ym9yeSc7CiRsYW5nWydmaXhtZSddID0gJ09wcmF2aXQgbWV6ZXJ5JzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwbG9hZCBNb2R1bGUnOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+SXQgaXMgYSBtb2R1bGUgZm9yIGFsbG93aW5nIHBlb3BsZSB0byB1cGxvYWQgYW5kIGRvd25sb2FkIGZpbGVzIHRvIGFuZCBmcm9tIHlvdXIgc2l0ZS4gIEl0IGtlZXBzIHRyYWNrIG9mIHdobyB1cGxvYWRlZCBhIGZpbGUsIGFuZCB3aG8gaGFzIGRvd25sb2FkZWQgaXQuICBBcyB3ZWxsLCB5b3UgY2FuIHNvcnQgZmlsZXMgaW50byBjYXRlZ29yaWVzLCBhbmQgbWFuYWdlIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXBsb2FkZWQgbGlrZSBldmVyeSBhZG1pbmlzdHJhdG9yIHdvdWxkIGRvPC9wPiANCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+VG8gdXNlIHRoaXMgbW9kdWxlLCB0byBhbGxvdyB1c2VycyB0byB1cGxvYWQgZmlsZXMgdG8geW91ciBzaXRlLCB5b3Ugc2hvdWxkIGluc3RhbGwgdGhlIG1vZHVsZSwgYW5kIHRoZW4gY3JlYXRlIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgKGEuay5hKSBkaXJlY3RvcmllcyBmb3IgdGhlIHVwbG9hZGVkIGZpbGVzIHRvIGdvIGludG8uIFRoZW4gYWRkIGEgdGFnIGludG8gYSBwYWdlIG9yIHRlbXBsYXRlIHNvbWV3aGVyZSBsaWtlIHtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDtVcGxvYWRzJnF1b3Q7IGNhdGVnb3J5PSZxdW90O3NvbWVjYXRlZ29yeSZxdW90OyBtb2RlPSZxdW90O3NvbWVtb2RlJnF1b3Q7fS4gIFdoZXJlIG1vZGUgbWF0Y2hlcyBvbmUgb2YgdGhlIG1vZGVzIGxpc3RlZCBiZWxvdy4gIFRoZSBvdXRwdXQgd2lsbCBkaWZmZXIgZGVwZW5kaW5nIHVwb24gd2hpY2ggbW9kZSB5b3Ugc2VsZWN0LjwvcD4NCjxwPlRoaXMgbW9kdWxlIGNhbiB1c2UgdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIChvcHRpb25hbCkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIHRvIHBhcnRseSBmaWxsIGluIHRoZSBmb3JtIHdoZW4gdXBsb2FkaW5nIGZpbGVzOzwvcD4NCjxoMz5QZXJtaXNzaW9uczwvaDM+DQo8dWw+DQo8bGk+PGVtPk1hbmFnZSBVcGxvYWRzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgdG8gbWFuYWdlIGNhdGVnb3JpZXMsIGFuZCB0aGUgZmlsZXMgd2l0aGluIHRoZW0uPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFRlbXBsYXRlczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGVkaXQgYW55IG9mIHRoZSB0ZW1wbGF0ZXMuPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGFueSBvZiB0aGUgZmlsZSBzZXR0aW5ncy48L2xpPg0KPC91bD4NCjxoMz5FbWFpbGluZzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW4gZW1haWwgd2hlbmV2ZXIgYSBmaWxlIGlzIHVwbG9hZGVkLCBzZWUgdGhlIHByZWZlcmVuY2VzIHRhYi4gIEhvd2V2ZXIsIHRvIGRvIHRoaXMgdGhlIDxiPkNNU01haWxlcjwvYj4gcGFja2FnZSBtdXN0IGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC4gIFRoaXMgaXMgYW4gPGVtPm9wdGlvbmFsPC9lbT4gc3RlcCwgYW5kIGlmIHRoZSBDTVNNYWlsZXIgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQsIG5vdGhpbmcgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIG9ubHkgYSBsb2cgbWVzc2FnZSB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBhZG1pbiBsb2c8L3A+DQo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4NCjxwPjxiPk5vdGU6PC9iPiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBieXBhc3Mgb3IgZ2V0IHBhc3QgYW55IGZpbGUgc2l6ZSBsaW1pdGF0aW9ucyBpbiBwaHAuICBJdCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZW0uICBUaGVyZWZvcmUgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB5b3VyIHBocC5pbmkgZmlsZSBhbmQvb3IgeW91ciBodHRwZC5jb25mIGZpbGUocykgdG8gYWxsb3cgeW91IHRvIHVwbG9hZCBmaWxlcyBhcyBsYXJnZSBhcyB3aGF0IHlvdSBoYXZlIHNldCBpbiB0aGUgdXBsb2FkcyBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPg0KPGgzPkFwYWNoZSBOb3RlczwvaDM+DQo8cD5JbiBvcmRlciB0byBhbGxvdyBsYXJnZSBmaWxlIHVwbG9hZHMsIHlvdSBtYXkgbmVlZCB0byBtb2RpZnkgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGluIHlvdXIgcGhwLmluaSAgSW4gYWRkaXRpb24sIHRoZSBMaW1pdFJlcXVlc3RCb2R5IHBhcmFtZXRlciBpbiB5b3VyIGFwYWNoZSBjb25maWd1cmF0aW9uLCBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBsb2FkX21heF9maWxlc2l6ZSBwYXJhbWV0ZXI8L3A+DQo8cD5Ob3RlOiAgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIGtpbG9ieXRlcywgb3IgbWVnYWJ5dGVzLCBob3dldmVyIHRoZSBMaW1pdFJlcXVldEJvZHkgcGFyYW1ldGVyIGlzIG9ubHkgc3BlY2lmaWVkIGluIGJ5dGVzPC9wPg0KJzsKJGxhbmdbJ2lkJ10gPSAnSWQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWwgdmVyemUgJXMgbmFpbnN0YWxvdiZhYWN1dGU7bi4nOwokbGFuZ1snaXBfYWRkcmVzcyddID0gJ0lQIEFkZHJlc2EnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdNb2R1bCwga3RlciZ5YWN1dGU7IGRvdm9sdWplIHXFvml2YXRlbMWvbSBuYWhyJmFhY3V0ZTt2YXQgc291Ym9yeS4gQSB2JmFhY3V0ZTttIGplIGRvdm9sdWplIHNwcmF2b3ZhdC4nOwokbGFuZ1snbmFtZSddID0gJ0ptJmVhY3V0ZTtubyc7CiRsYW5nWydyZW5hbWVtZXNzYWdlJ10gPSAnWm3Em8WIdGUgam0mZWFjdXRlO25vIGsgcHJvdmVkZW4maWFjdXRlOyBwxZllam1lbm92JmFhY3V0ZTtuJmlhY3V0ZTsnOwokbGFuZ1sncGF0aCddID0gJ0Nlc3RhJzsKJGxhbmdbJ3BhdGhtZXNzYWdlJ10gPSAnWm3Em8WIdGUgemRlIGptJmVhY3V0ZTtubyBrYXRlZ29yaWUgcHJvIHDFmWVzdW4gc291Ym9ydSBkbyBqaW4mZWFjdXRlO2hvIGFkcmVzJmFhY3V0ZTvFmWUnOwokbGFuZ1sncGF0aGludXBsb2FkcyddID0gJyhSZWxhdGl2biZpYWN1dGU7IGsgdXBsb2FkIGFkcmVzJmFhY3V0ZTvFmWkpJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSE8L3A+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1VwbG9hZHMgbW9kdWxlIGJ5bCAmdWFjdXRlO3NwxJsmc2Nhcm9uO27EmyBvZHRyYW7Em24uIMW9JmFhY3V0ZTtkbiZlYWN1dGU7IHNvdWJvcnkgbmVieWx5IHNtYXomYWFjdXRlO255JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUMWZZWR2b2xieSc7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdQxZllZHZvbGJ5IG1vZHVsdSBieWx5IGFrdHVhbGl6b3YmYWFjdXRlO255JzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdQb3Bpcyc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ1NvdWJvcnkgdiB0b210byBhZHJlcyZhYWN1dGU7xZlpIG1vaG91IGImeWFjdXRlO3QgdXZlZGVueSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnluYW1lJ10gPSAnSm0mZWFjdXRlO25vIGthdGVnb3JpZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlwYXRoJ10gPSAnQ2VzdGEgbmEgc2VydmVydSc7CiRsYW5nWydwcm9tcHRfZGVsZXRlZGlyZWN0b3J5J10gPSAnU21hemF0IGFkcmVzJmFhY3V0ZTvFmSBrYXRlZ29yaWU/JzsKJGxhbmdbJ3Byb21wdF9tYXhfdXBsb2Fkc2l6ZSddID0gJ01heGltJmFhY3V0ZTtsbiZpYWN1dGU7IHBvdm9sZW4mYWFjdXRlOyB2ZWxpa29zdCBzb3Vib3J1IChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdQb3ZvbGVuJmVhY3V0ZTsgbmFociZhYWN1dGU7dmFuJmVhY3V0ZTsgcMWZaXBvbnknOwokbGFuZ1snc2NhbiddID0gJ1Byb2hsZWRhdCc7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1Z5YnJhdCBrYXRlZ29yaWknOwokbGFuZ1snc2l6ZSddID0gJ1ZlbGlrb3N0JzsKJGxhbmdbJ3NpemVrYiddID0gJ1ZlbGlrb3N0IChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnT2Rlc2xhdCc7CiRsYW5nWydzdW1tYXJ5X3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmxvbmEgc2hybnV0JmlhY3V0ZTsnOwokbGFuZ1snc3VtbWFyeSddID0gJ1Nocm51dCZpYWN1dGU7JzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnVXBsb2FkcyBNb2R1bGUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ1DFmWVkdm9sYnkgbW9kdWx1JzsKJGxhbmdbJ3RpdGxlX3NpbmdfbG91ZGx5J10gPSAnU2luZyBMb3VkbHk/JzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnVnluZWNoYXQgc3VicyZpYWN1dGU7dMSbIHplIHN0YXRpc3Rpa3knOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ1Bvdm9sZW4mZWFjdXRlOyBwxZkmaWFjdXRlO3BvbnknOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCBvZGluc3RhbG92JmFhY3V0ZTtuLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIHVwZ3JhZG92JmFhY3V0ZTtuIG5hIHZlcnppICVzLic7CiRsYW5nWyd1cGxvYWQnXSA9ICdOYWhyJmFhY3V0ZTt0JzsKJGxhbmdbJ3VwbG9hZGVkJ10gPSAnU291Ym9yICVzIGJ5bCBuYWhyJmFhY3V0ZTtuICVzLic7CiRsYW5nWydyZXBsYWNlZCddID0gJ1NvdWJvciAlcyBieWwgbmFocmF6ZW4gJXMuJzsKJGxhbmdbJ2RlbGV0ZWQnXSA9ICdTb3Vicm8gJXMgYnlsIHNtYXomYWFjdXRlO24uJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdVcGxvYWQgVGVtcGxhdGUnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVxb5pdmF0ZWxzayZlYWN1dGU7IGptJmVhY3V0ZTtubyc7CiRsYW5nWyd3YXJuaW5nX2RlbGV0ZWNhdGVnb3J5J10gPSAnVkFST1YmQWFjdXRlO04mSWFjdXRlOzogT3BhdHJuxJsgcMWZaSBtYXomYWFjdXRlO24maWFjdXRlOyBrYXRlZ29yaSZpYWN1dGU7LiBTb3Vib3J5IG1vaG91IGImeWFjdXRlO3Qgc3RyYWNlbnknOwokbGFuZ1snd2VsY29tZV90ZXh0J10gPSAnPHA+V2VsY29tZSB0byB0aGUgVXBsb2FkcyBNb2R1bGUgYWRtaW4gc2VjdGlvbi4gU29tZXRoaW5nIGVsc2Ugd291bGQgcHJvYmFibHkgZ28gaGVyZSBpZiB0aGUgbW9kdWxlIGFjdHVhbGx5IGRpZCBzb21ldGhpbmcuPC9wPic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjIyMTc4OTY4NTI2NDYzMjM1MDAuMTIxNzE5MDEzOC4xMjE4OTYzNTk2LjEyMTg5NzYyNjcuMTMnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjE4OTYzNTk2LjEyLjUudXRtY2NuPShyZWZlcnJhbCl8dXRtY3NyPWRldi5jbXNtYWRlc2ltcGxlLm9yZ3x1dG1jY3Q9L3x1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKPz4=]]></data>
	</file>
	<file>
	  <filename>/lang/ext/de_DE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2FsbG93X2NoYW5nZWRhdGUnXSA9ICdEZW0gQWRtaW5zdHJhdG9yIGVybGF1YmVuLCBkYXMgSG9jaGxhZGVkYXR1bSB6dSAmYXVtbDtuZGVybic7CiRsYW5nWydtaXNzaW5nJ10gPSAnRGF0ZWkgZmVobHQnOwokbGFuZ1snbWlzc2luZ19maWxlJ10gPSAnRGllIERhdGVpIGZlaGx0JzsKJGxhbmdbJ3Byb21wdF9mcmllbmRseW5hbWUnXSA9ICdCZW51dHplcmRlZmluaWVydGVyIE5hbWUgZiZ1dW1sO3IgZGllc2VzIE1vZHVsJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5X3Byb2JsZW1fcyddID0gJ0VzIGdpYnQgZWluIFByb2JsZW0gbWl0IGRlbSBQZmFkIG9kZXIgbWl0IEJlcmVjaHRpZ3VuZ2VuIGJlaSBkaWVzZXIgS2F0ZWdvcmllJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5X3Byb2JsZW0nXSA9ICdFcyBnaWJ0IGVpbiBQcm9ibGVtIG1pdCBkZW0gUGZhZCBvZGVyIG1pdCBCZXJlY2h0aWd1bmdlbiBiZWkgS2F0ZWdvcmllICVzJzsKJGxhbmdbJ2Vycm9yX2Nhbm5vdHJlbmFtZSddID0gJ0JlaW0gVW1iZW5lbm5lbiBkZXIgRGF0ZWkgZ2lidCBlcyBlaW5lbiBGZWhsZXInOwokbGFuZ1snZmllbGRfdXBsb2FkX3N1bW1hcnknXSA9ICdadXNhbW1lbmZhc3N1bmcnOwokbGFuZ1snZmllbGRfY2F0ZWdvcnlfaWQnXSA9ICdLYXRlZ29yaWUtSUQnOwokbGFuZ1snZmllbGRfY2F0ZWdvcnlfbmFtZSddID0gJ0thdGVnb3JpZW5hbWUnOwokbGFuZ1snZmllbGRfY2F0ZWdvcnlfcGF0aCddID0gJ0thdGVnb3JpZXBmYWQnOwokbGFuZ1snZmllbGRfYXV0aG9yJ10gPSAnQXV0b3InOwokbGFuZ1snZmllbGRfZGVzY3JpcHRpb24nXSA9ICdCZXNjaHJlaWJ1bmcnOwokbGFuZ1snbm91c2VyaW5mbyddID0gJ0tlaW5lIEJlbnV0emVyaW5mb3JtYXRpb25lbiB2ZXJmJnV1bWw7Z2Jhcic7CiRsYW5nWydlcnJvcl9tYXRjaGluZ3JlY29yZHMnXSA9ICdFcyB3dXJkZW4ga2VpbmUgRWludHImYXVtbDtnZSBnZWZ1bmRlbiwgZGllIGRlbiBLcml0ZXJpZW4gZW50c3ByZWNoZW4nOwokbGFuZ1snbXNnX3JlcG9ydF9zZW50J10gPSAnQmVyaWNodCBnZXNlbmRldCc7CiRsYW5nWydnZW5lcmF0ZWRfYnknXSA9ICdFcnN0ZWxsdCB2b24nOwokbGFuZ1snZ2VuZXJhdGVkX29uJ10gPSAnRXJzdGVsbHQgYW0nOwokbGFuZ1snc3RhcnRfZGF0ZSddID0gJ0JlZ2lubic7CiRsYW5nWydlbmRfZGF0ZSddID0gJ0VuZGUnOwokbGFuZ1sndXBsb2FkX2NhdGVnb3J5X25hbWUnXSA9ICdLYXRlZ29yaWVuYW1lJzsKJGxhbmdbJ3Byb21wdF9maWxlcyddID0gJ0RhdGVpZW4nOwokbGFuZ1sncmVwb3J0X2Rvd25sb2Fkc2J5dXNlciddID0gJ0Rvd25sb2FkcyBuYWNoIEJlbnV0emVyJzsKJGxhbmdbJ3JlcG9ydF9kb3dubG9hZHNieWZpbGUnXSA9ICdEb3dubG9hZHMgbmFjaCBEYXRlaSc7CiRsYW5nWydwcm9tcHRfb3V0cHV0X3RlbXBsYXRlJ10gPSAnQXVzZ2FiZXZvcmxhZ2UnOwokbGFuZ1sndXNlcnByb3AnXSA9ICdFaWdlbnNjaGFmdCc7CiRsYW5nWydmaWVsZF9sYXRlc3RfZG93bmxvYWQnXSA9ICdMZXR6dGVyIERvd25sb2FkJzsKJGxhbmdbJ2ZpZWxkJ10gPSAnRmVsZCc7CiRsYW5nWydjbG9zZSddID0gJ1NjaGxpZSZzemxpZztlbic7CiRsYW5nWydlcnJvcl9pbnRlcm5hbCddID0gJ0VzIGlzdCBlaW4gaW50ZXJuZXIgRmVobGVyIGF1ZmdldHJldGVuJzsKJGxhbmdbJ2V4cG9ydF9odG1sZW1haWwnXSA9ICdIVE1MLUJlcmljaHQgKHBlciBFLU1haWwpJzsKJGxhbmdbJ2V4cG9ydF9odG1sJ10gPSAnSFRNTC1CZXJpY2h0IChpbiBuZXVlbSBGZW5zdGVyKSc7CiRsYW5nWydleHBvcnRfY3N2J10gPSAnQ1NWLURhdGVpJzsKJGxhbmdbJ3Byb21wdF9vdXRwdXQnXSA9ICdBdXNnYWJlZm9ybWF0JzsKJGxhbmdbJ3Byb21wdF9yZXBvcnRfdHlwZSddID0gJ0FydCBkZXMgQmVyaWNodHMnOwokbGFuZ1sncmVwb3J0X3N1bW1hcnknXSA9ICdadXNhbW1lbmZhc3N1bmcnOwokbGFuZ1sncmVwb3J0X2RldGFpbCddID0gJ0RldGFpbHMnOwokbGFuZ1sncHJvbXB0X3N0YXJ0X2RhdGUnXSA9ICdCZWdpbm4nOwokbGFuZ1sncHJvbXB0X2VuZF9kYXRlJ10gPSAnRW5kZSc7CiRsYW5nWydwcm9tcHRfYXNjZW5kaW5nJ10gPSAnYXVmc3RlaWdlbmQnOwokbGFuZ1sncHJvbXB0X2Rlc2NlbmRpbmcnXSA9ICdhYnN0ZWlnZW5kJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnU3RhbmRhcmQnOwokbGFuZ1sncHJvbXB0X3NvcnRvcmRlciddID0gJ1NvcnRpZXJ1bmcnOwokbGFuZ1snZmllbGRfZG93bmxvYWRfZGF0ZSddID0gJ0Rvd25sb2FkLURhdHVtJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9pZCddID0gJ1VwbG9hZC1JRCc7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfaWQnXSA9ICdLYXRlZ29yaWUtSUQnOwokbGFuZ1snZmllbGRfdXBsb2FkX2NhdGVnb3J5X25hbWUnXSA9ICdLYXRlZ29yaWVuYW1lJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9jYXRlZ29yeV9wYXRoJ10gPSAnS2F0ZWdvcmllcGZhZCc7CiRsYW5nWydmaWVsZF91cGxvYWRfbmFtZSddID0gJ0RhdGVpbmFtZSc7CiRsYW5nWydmaWVsZF91cGxvYWRfYXV0aG9yJ10gPSAnQXV0b3InOwokbGFuZ1snZmllbGRfdXBsb2FkX2Rlc2NyaXB0aW9uJ10gPSAnQmVzY2hyZWlidW5nJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9pcCddID0gJ1VwbG9hZC1JUC1BZHJlc3NlJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9zaXplJ10gPSAnRGF0ZWlnciZvdW1sOyZzemxpZztlJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9kYXRlJ10gPSAnSG9jaGxhZGVkYXR1bSc7CiRsYW5nWydmaWVsZF9kb3dubG9hZHMnXSA9ICdBbnphaGwgaGVydW50ZXJnZWxhZGVuJzsKJGxhbmdbJ3Byb21wdF9maWVsZGxpc3QnXSA9ICdBdXNnYWJlZmVsZGVyIGF1c3cmYXVtbDtobGVuJzsKJGxhbmdbJ3Byb21wdF9zb3J0aW5nJ10gPSAnU29ydGllcmVuIG5hY2gnOwokbGFuZ1snb3InXSA9ICdvZGVyJzsKJGxhbmdbJ3Byb21wdF9mZXVfdXNlcnMnXSA9ICdGRVUtQmVudXR6ZXInOwokbGFuZ1sncHJvbXB0X2ZldV9ncm91cHMnXSA9ICdGRVUtR3J1cHBlbic7CiRsYW5nWydvdXRwdXQnXSA9ICdBdXNnYWJlJzsKJGxhbmdbJ2Vycm9yX25vZmV1J10gPSAnRGFzIE1vZHVsICZiZHF1bztGcm9udEVuZFVzZXJzJmxkcXVvOywgVmVyc2lvbiAxLjIxLjE1IG9kZXIgaCZvdW1sO2hlciB3aXJkIGYmdXVtbDtyIGRpZXNlIEFrdGlvbiBiZW4mb3VtbDt0aWd0JzsKJGxhbmdbJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieXVzZXIyJ10gPSAnQmVyaWNodCAmYmRxdW87RG93bmxvYWRzIHZvbiBCZW51dHplciZsZHF1bzsnOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5dXNlciddID0gJ0Rvd25sb2FkcyB2b24gQmVudXR6ZXInOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZTInXSA9ICdCZXJpY2h0ICZiZHF1bztEb3dubG9hZHMgdm9uIERhdGVpZW4mbGRxdW87JzsKJGxhbmdbJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieWZpbGUnXSA9ICdEb3dubG9hZHMgdm9uIERhdGVpZW4nOwokbGFuZ1sncmVwb3J0cyddID0gJ0JlcmljaHRlJzsKJGxhbmdbJ3Byb21wdF9kb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1sncHJvbXB0X3Blcm1pc3Npb25zJ10gPSAnQmVyZWNodGlndW5nZW4nOwokbGFuZ1sncHJvbXB0X2ZpZWxkcyddID0gJ0ZlbGRlcic7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGUnXSA9ICdEYXRlaSBzZW5kZW4nOwokbGFuZ1sncHJvbXB0X21vZGlmeWluZyddID0gJ0JlYXJiZWl0dW5nJzsKJGxhbmdbJ3Byb21wdF92aWV3aW5nJ10gPSAnQW56ZWlnZSc7CiRsYW5nWydwcm9tcHRfZ2VuZXJhbCddID0gJ0FsbGdlbWVpbic7CiRsYW5nWydpbmZvX2NhdGVnb3J5bGlzdGFibGUnXSA9ICdEJnV1bWw7cmZlbiBEYXRlaWVuIGluIGRpZXNlciBLYXRlZ29yaWUgYW5nZXplaWd0IHdlcmRlbj8nOwokbGFuZ1snZXJyb3JfbWlzc2luZ3ZhbHVlJ10gPSAnRWluIGVyZm9yZGVybGljaGVyIFdlcnQgZmVobHQnOwokbGFuZ1snZWRpdGVkJ10gPSAnJXMgYmVhcmJlaXRldCc7CiRsYW5nWydtb3ZlZGZpbGUnXSA9ICdEYXRlaSB3dXJkZSB2b24gJXMgbmFjaCAlcyB2ZXJzY2hvYmVuJzsKJGxhbmdbJ3BhZ2VsaW1pdCddID0gJ0RhdGVpZW4gcHJvIFNlaXRlJzsKJGxhbmdbJ3ZpZXcnXSA9ICdEaWVzZSBEYXRlaSBhbnplaWdlbic7CiRsYW5nWydlZGl0X3RoaXNfZmlsZSddID0gJ0RpZXNlcyBGZWxkIGJlYXJiZWl0ZW4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ0RpZXNlIEthdGVnb3JpZSBhdXRvbWF0aXNjaCBhdWYgbmV1ZSBEYXRlaWVuIHByJnV1bWw7ZmVuPyc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ0RpZXNlIEthdGVnb3JpZSB3aXJkIGF1dG9tYXRpc2NoIGF1ZiBuZXVlIERhdGVpZW4gZ2VwciZ1dW1sO2Z0LCB3ZW5uIHZvbiBkZXIgV2Vic2VpdGUgYXVzIGRhcmF1ZiB6dWdlZ3JpZmZlbiB3aXJkJzsKJGxhbmdbJ3Byb21wdF90bF9hY2Nlc3MnXSA9ICdaZWl0YmVzY2hyJmF1bWw7bmt0ZXIgWnVncmlmZic7CiRsYW5nWydwcm9tcHRfYWxsb3dfdXBsb2FkX3NlbmRmaWxlJ10gPSAnQWxsb3cgc2VuZGluZyBmaWxlcyBpbW1lZGlhdGVseSBvbiBhZG1pbiB1cGxvYWQnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGUnXSA9ICdEaWUgRGF0ZWkgJXMgd3VyZGUgbmFjaCBaZWl0YWJsYXVmIGF1dG9tYXRpc2NoIGdlbCZvdW1sO3NjaHQnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGVfZmFpbGVkJ10gPSAnQmVyZWNodGlndW5nc3Byb2JsZW0sIGRhcyBhdXRvbWF0aXNjaGUgTCZvdW1sO3NjaGVuIHZvbiAlcyBpc3QgZmVobGdlc2NobGFnZW4nOwokbGFuZ1snaW5mb19jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ0dlYmVuIFNpZSBoaWVyIGRpZSBBbnphaGwgZGVyIFN0dW5kZW4gYW4sIG5hY2ggZGVuZW4gZGllIERhdGVpZW4gZGllc2VyIEthdGVnb3JpZSBnZWwmb3VtbDtzY2h0IHdlcmRlbiBrJm91bWw7bm5lbi4gU29sbGVuIGRpZSBEYXRlaWVuIG5pY2h0IGdlbCZvdW1sO3NjaHQgd2VyZGVuLCBzZXR6ZW4gU2llIGRpZXNlbiBXZXJ0IGF1ZiAwLic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlfZXhwaXJlc19ocnMnXSA9ICdBbnphaGwgZGVyIFN0dW5kZW4sIGJpcyBkaWUgRGF0ZWllbiBpbiBkaWVzZXIgS2F0ZWdvcmllIGF1dG9tYXRpc2NoIGdlbCZvdW1sO3NjaHQgd2VyZGVuJzsKJGxhbmdbJ2luZm9fZGZsdF9jYXRlZ29yeV9leHBpcnknXSA9ICdEZXIgdm9yZWluZ2VzdGVsbHRlIFdlcnQgZiZ1dW1sO3IgbmV1ZSBLYXRlZ29yaWVuLCBtaXQgZGVtIGZlc3RnZWxlZ3Qgd2lyZCwgd2llIGxhbmdlIGRpZSBEYXRlaWVuIGluIGRpZXNlciBLYXRlZ29yaWUgdmVyZiZ1dW1sO2diYXIgc2VpbiBzb2xsZW4sIGJldm9yIHNpZSBhdXRvbWF0aXNjaCBnZWwmb3VtbDtzY2h0IHdlcmRlbi4gU29sbGVuIGRpZSBEYXRlaWVuIG5pY2h0IGdlbCZvdW1sO3NjaHQgd2VyZGVuLCBzZXR6ZW4gU2llIGRpZXNlbiBXZXJ0IGF1ZiAwLic7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9leHBpcnknXSA9ICdWZXJmJnV1bWw7Z2JhcmtlaXRzZGF1ZXIgZiZ1dW1sO3IgZGllc2UgS2F0ZWdvcmllIDxlbT4oU3R1bmRlbik8L2VtPic7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVsZXRhYmxlJ10gPSAnQmVyZWNodGlndGUgQmVudXR6ZXIgaGFiZW4gZGllIEJlcmVjaHRpZ3VuZywgZGllc2UgRGF0ZWllbiB6dSBsJm91bWw7c2NoZW4uIERhcyBiZWRldXRldCwgZGFzcyBpbiBkZW4gZW50c3ByZWNoZW5kZW4gVGVtcGxhdGVzIGVpbiBMaW5rIHp1bSBMJm91bWw7c2NoZW4gZGVyIERhdGVpIGFuZ2V6ZWlndCB3aXJkLiAgRWluIFdlYnNlaXRlbi1FbnR3aWNrbGVyIGthbm4gYXVjaCBkaWUgZW50c3ByZWNoZW5kZSBTbWFydHktTG9naWsgdmVyd2VuZGVuLCB1bSBmJnV1bWw7ciBiZXJlY2h0aWd0ZSBCZW51dHplciBlaW5lbiBMaW5rIGFuenV6ZWlnZW4uJzsKJGxhbmdbJ2NvcHlfZmlsZXMnXSA9ICdEYXRlaWVuIGtvcGllcmVuJzsKJGxhbmdbJ2Vycm9yX2ZpbGV0b29sYXJnZSddID0gJ1RoZSBmaWxlIHlvdSBhdHRlbXB0ZWQgdG8gdXBsb2FkZSBpcyBsYXJnZXIgdGhhbiB0aGUgQ01TTVMgbWF4aW11bSB1cGxvYWQgZmlsZSBzaXplJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlY2F0ZWdvcnknXSA9ICdXb2xsZW4gU2llIHdpcmtsaWNoIGRpZXNlIEthdGVnb3JpZSBsJm91bWw7c2NoZW4/JzsKJGxhbmdbJ2Vycm9yX2RlbGV0ZSddID0gJ0VpbiBFaW50cmFnIGtvbm50ZSBuaWNodCBnZWwmb3VtbDtzY2h0IHdlcmRlbiAoJXMpJzsKJGxhbmdbJ2NvbmZpcm1fY2F0X211bHRpYWN0aW9uJ10gPSAnV29sbGVuIFNpZSB3aXJrbGljaCBkaWVzZSBBa3Rpb24gbWl0IGRlbiBhdXNnZXcmYXVtbDtobHRlbiBLYXRlZ29yaWVuIGF1c2YmdXVtbDtocmVuPyc7CiRsYW5nWydlcnJvcl9ub3RoaW5nX3NlbGVjdGVkJ10gPSAnRmVobGVyOiBFcyB3dXJkZSBuaWNodHMgYXVzZ2V3JmF1bWw7aGx0JzsKJGxhbmdbJ3dpdGhfc2VsZWN0ZWQnXSA9ICdBdXNnZXcmYXVtbDtobHRlJzsKJGxhbmdbJ2Vycm9yX3JlcGxhY2VfbWlzbWF0Y2hlZF9maWxlZXh0J10gPSAnV2hlbiByZXBsYWNpbmcgYSBmaWxlLCB5b3UgbXVzdCB1cGxvYWQgYSBmaWxlIG9mIHRoZSBzYW1lIGV4YWN0IHR5cGUgKGJ5IGZpbGUgZXh0ZW5zaW9uKS4gIFRoZSBmaWxlIHlvdSBzZWxlY3RlZCBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBvcmlnaW5hbCBmaWxlLic7CiRsYW5nWydyZXBsYWNlJ10gPSAnRXJzZXR6ZW4nOwokbGFuZ1snaW5mb19yZXBsYWNlZmlsZSddID0gJ1lvdSBtYXkgdXBsb2FkIGEgcmVwbGFjZW1lbnQgZmlsZSwgaWYgdGhlIGZpbGUgaXMgYW4gaW1hZ2UgdHlwZSwgYW5kIHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgYSByZXBsYWNlbWVudCB0aHVtYm5haWwsIGEgbmV3IHRodW1ibmFpbCB3aWxsIGJlIGdlbmVyYXRlZCc7CiRsYW5nWydwcm9tcHRfcmVwbGFjZWZpbGUnXSA9ICdFcnNhdHpkYXRlaSBob2NobGFkZW4nOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnTGVlcnplaWNoZW4gaW4gRGF0ZWluYW1lbiBlcnNldHplbic7CiRsYW5nWydjYXRlZ29yeV9jb3BpZWQnXSA9ICdEaWUgS2F0ZWdvcmllIHd1cmRlIGVyZm9sZ3JlaWNoIGtvcGllcnQnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlcGF0aCddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc291cmNlLCBhbmQgaXMgbm90IGFscmVhZHkgaW4gdXNlJzsKJGxhbmdbJ29wZXJhdGlvbl9jYW5jZWxsZWQnXSA9ICdPcGVyYXRpb24gYWJnZWJyb2NoZW4nOwokbGFuZ1snc291cmNlJ10gPSAnUXVlbGxlJzsKJGxhbmdbJ2Rlc3RpbmF0aW9uJ10gPSAnWmllbCc7CiRsYW5nWydwcm9tcHRfY29weV9maWxlcyddID0gJ0RpZSBEYXRlaWVuIGRlciBLYXRlZ29yaWUga29waWVyZW4nOwokbGFuZ1snaW5mb19jb3B5X2ZpbGVzJ10gPSAnQ29weSB0aGUgZmlsZXMgZnJvbSB0aGUgc291cmNlIGNhdGVnb3J5IHRvIHRoZSBkZXN0aW5hdGlvbiBjYXRlZ29yeSc7CiRsYW5nWydleHRyYSddID0gJ0V4dHJhcyc7CiRsYW5nWydjb3B5J10gPSAnS29waWVyZW4nOwokbGFuZ1snc2VsZWN0b25lJ10gPSAnSWhyZSBBdXN3YWhsJzsKJGxhbmdbJ2F1dG93YXRlcm1hcmsnXSA9ICdBdXRvbWF0aXNjaCBXYXNzZXJ6ZWljaGVuIGF1ZiBkZW4gQmlsZGVybiBlaW5mJnV1bWw7Z2VuJzsKJGxhbmdbJ2ltYWdlX3NldHRpbmdzJ10gPSAnQmlsZGVpbnN0ZWxsdW5nZW4nOwokbGFuZ1sncHJvbXB0X2dldGZpbGVfcmVzdWx0cGFnZSddID0gJ1NlaXRlLCBkaWUgZiZ1dW1sO3IgZGllIEFuemVpZ2Ugdm9uIEZlaGxlcm4gb2RlciBhbmRlcmVuLCBkZW4gRG93bmxvYWQgYmV0cmVmZmVuZGVuIE5hY2hyaWNodGVuIHZlcndlbmRldCB3ZXJkZW4gc29sbCc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2tleSddID0gJ1RoZSB1cGxvYWQga2V5IHNwZWNpZmllZCBpcyBpbnZhbGlkIChtYXliZSBpdCBoYXMgcmVhY2hlZCBpdHMgbWF4aW11bSBkb3dubG9hZCBjYXBhY2l0eSBvciBoYXMgZXhwaXJlZCknOwokbGFuZ1snZGZsdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAneyRzaXRlbmFtZX0gJm5kYXNoOyBJaG5lbiB3dXJkZSBmJnV1bWw7ciBlaW5lIGJlZ3Jlbnp0ZSBaZWl0IFp1Z2FuZyB6dSB7JGVudHJ5LT51cGxvYWRfbmFtZXxzdHJpcF90YWdzfSBnZXcmYXVtbDtocnQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICdCZXRyZWZmIGYmdXVtbDtyIGRpZSBFLU1haWwsIGRpZSBnZXNlbmRldCB3aXJkLCB3ZW5uIGVpbmUgRGF0ZWkgbWl0IFplaXRiZWdyZW56dW5nIGdlc2VuZGV0IHdpcmQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2F1dG9kZWxldGUnXSA9ICdBdXRvIGRlbGV0ZSBleHBpcmVkIGVudHJpZXMgYWZ0ZXIgTiBob3VycyA8ZW0+KHNwZWNpZnkgMCB0byBkaXNhYmxlIGF1dG9kZWxldGUpPC9lbT46JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zZW5kaXQnXSA9ICdTZW5kIHRoaXMgdXJsIHRvIHRoZSBkZXNpZ25hdGVkIGVtYWlsIGFkZHJlc3M/JzsKJGxhbmdbJ3VybF9rZXknXSA9ICdVUkwtU2NobCZ1dW1sO3NzZWwnOwokbGFuZ1snY3JlYXRlZCddID0gJ0Vyc3RlbGx0JzsKJGxhbmdbJ2V4cGlyZXMnXSA9ICdBYmxhdWZkYXR1bSc7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0FkZC9FZGl0IFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1sndGltZV9saW1pdGVkX2tleV9hZGRlZCddID0gJ1RpbWUgTGltaXRlZCBLZXkgQWRkZWQnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnQW56YWhsIGRlciBTdHVuZGVuJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdBbnphaGwgZGVyIERvd25sb2Fkcyc7CiRsYW5nWydlbWFpbF9hZGRyZXNzJ10gPSAnRS1NYWlsLUFkcmVzc2UnOwokbGFuZ1snZXJyb3JfbWlzc2luZ19pbnZhbGlkJ10gPSAnRWluIGVyZm9yZGVybGljaGVyIFdlcnQgZmVobHQgb2RlciBpc3QgdW5nJnV1bWw7bHRpZzogJXMnOwokbGFuZ1snYWRkX3RpbWVsaW1pdGVkX2tleSddID0gJ0VpbmVuIHplaXRiZXNjaHImYXVtbDtua3RlbiBTY2hsJnV1bWw7c3NlbCBoaW56dWYmdXVtbDtnZW4nOwokbGFuZ1snZmlsZV9pbmZvMiddID0gJ0RhdGVpICVzIChpZD0lZCknOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdTcGVjaWZ5IHRoZSBkZWZhdWx0IG51bWJlciBvZiB0aW1lcyB0aGF0IGEgZmlsZSBpZGVudGlmaWVkIGJ5IGEgcGFydGljdWxhciBrZXkgY2FuIGJlIGRvd25sb2FkZWQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ1ZvcmVpbmdlc3RlbGx0ZSBBbnphaGwgdm9uIERvd25sb2Fkcyc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnU3BlY2lmeSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgaG91cnMgdGhhdCBhIHRpbWUgbGltaXRlZCBrZXkgaXMgdmFsaWQgZm9yLiAgU3BlY2lmeSAwIGZvciB1bmxpbWl0ZWQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnTnVtYmVyIG9mIGhvdXJzIGEgVGltZSBMaW1pdGVkIEtleSBpcyB2YWxpZCBmb3InOwokbGFuZ1sndGltZWxpbWl0ZWRfdXJsX3NldHRpbmdzJ10gPSAnVGltZSBMaW1pdGVkIEtleSBTZXR0aW5ncyc7CiRsYW5nWydtYW5hZ2VfdGltZWxpbWl0ZWQnXSA9ICdaZWl0YmVzY2hyJmF1bWw7bmt0ZW4gWnVncmlmZiB2ZXJ3YWx0ZW4nOwokbGFuZ1sndXBsb2FkaW5nX3NldHRpbmdzJ10gPSAnRWluc3RlbGx1bmdlbiBmJnV1bWw7ciBkYXMgSG9jaGxhZGVuIHZvbiBEYXRlaWVuJzsKJGxhbmdbJ2dlbmVyYWxfc2V0dGluZ3MnXSA9ICdBbGxnZW1laW5lIEVpbnN0ZWxsdW5nZW4nOwokbGFuZ1sndGh1bWJuYWlsX3NldHRpbmdzJ10gPSAnRXJzdGVsbHVuZyBkZXIgVm9yc2NoYXViaWxkZXInOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdTZWl0ZSwgYXVmIGRpZSBkZXIgQmVzdWNoZXIgbmFjaCBkZXIgRWluc2VuZHVuZyBlaW5lciBEYXRlaSB3ZWl0ZXJnZWxlaXRldCB3aXJkJzsKJGxhbmdbJ2xibF9iYWNrJ10gPSAnWnVyJnV1bWw7Y2snOwokbGFuZ1snbGJsX3RlbXBsYXRlcyddID0gJ1ZvcmxhZ2VuIGJlYXJiZWl0ZW4nOwokbGFuZ1sncHJvbXB0X3B1YmxpY19maWVsZCddID0gJ0RhcyBGZWxkIGlzdCAmb3VtbDtmZmVudGxpY2ggPGVtPihrYW5uIHZvbiBkZW4gQmVzdWNoZXJuIGRpZXNlciBXZWJzZWl0ZSBnZXNlaGVuIHdlcmRlbik8L2VtPic7CiRsYW5nWyd1cGxvYWRfZWRpdGVkJ10gPSAnRGF0ZWlkZXRhaWxzIGJlYXJiZWl0ZXQgYW0gJXMnOwokbGFuZ1snaW5mb190aHVtYm5haWwnXSA9ICdFaW4gb3B0aW9uYWxlcyBWb3JzY2hhdWJpbGQnOwokbGFuZ1sndXBsb2FkX2ZpbGUnXSA9ICdFaW5lIG5ldWUgRGF0ZWkgaG9jaGxhZGVuJzsKJGxhbmdbJ21zZ19maWVsZF9kZWxldGVkJ10gPSAnRGFzIEZlbGQgd3VyZGUgZ2VsJm91bWw7c2NodCc7CiRsYW5nWydhc2tfZGVsZXRlX2ZpZWxkJ10gPSAnV29sbGVuIFNpZSB3aXJrbGljaCBkaWVzZSBGZWxkZGVmaW5pdGlvbmVuIHVuZCBhbGxlIGRhbWl0IHZlcmJ1bmRlbmVuIFdlcnRlIGwmb3VtbDtzY2hlbj8nOwokbGFuZ1sneWVzJ10gPSAnSmEnOwokbGFuZ1snbm8nXSA9ICdOZWluJzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXAnOwokbGFuZ1snZmllbGR0eXBlX211bHRpc2VsZWN0J10gPSAnTWVocmZhY2hhdXN3YWhsJzsKJGxhbmdbJ2ZpZWxkdHlwZV9kcm9wZG93biddID0gJ0F1c3dhaGxsaXN0ZSc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdLb250cm9sbGsmYXVtbDtzdGNoZW4nOwokbGFuZ1snZmllbGR0eXBlX3RleHRhcmVhJ10gPSAnVGV4dGJlcmVpY2gnOwokbGFuZ1snZmllbGR0eXBlX3RleHRpbnB1dCddID0gJ1RleHRmZWxkJzsKJGxhbmdbJ3Byb21wdF91c2Vfd3lzaXd5ZyddID0gJ1p1bSBCZWFyYmVpdGVuIGRpZXNlcyBGZWxkcyBkZW4gdm9yZWluZ2VzdGVsbHRlbiBXWVNJV1lHLUVkaXRvciB2ZXJ3ZW5kZW4nOwokbGFuZ1sncHJvbXB0X2RlZmF1bHRfY29udGVudCddID0gJ1ZvcmVpbmdlc3RlbGx0ZXIgSW5oYWx0IGYmdXVtbDtyIGRlbiBUZXh0YmVyZWljaCc7CiRsYW5nWydwcm9tcHRfZHJvcGRvd25fb3B0aW9ucyddID0gJ09wdGlvbmVuIChlaW4gRWludHJhZyBwcm8gWmVpbGUpJzsKJGxhbmdbJ3Byb21wdF9maWVsZF9tYXhsZW5ndGgnXSA9ICdNYXhpbWFsZSBGZWxkbCZhdW1sO25nZSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbGVuZ3RoJ10gPSAnRmVsZGwmYXVtbDtuZ2UnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX3R5cGUnXSA9ICdGZWxkdHlwJzsKJGxhbmdbJ3Byb21wdF9maWVsZF9uYW1lJ10gPSAnRmVsZG5hbWUnOwokbGFuZ1sndGl0bGVfYWRkX2ZpZWxkJ10gPSAnRWluZSBGZWxkZGVmaW5pdGlvbiBoaW56dWYmdXVtbDtnZW4gb2RlciBiZWFyYmVpdGVuJzsKJGxhbmdbJ2ZpZWxkX2RlZmluaXRpb25zJ10gPSAnRmVsZGRlZmluaXRpb25lbic7CiRsYW5nWydwcm9tcHRfYWRkX2ZpZWxkJ10gPSAnRWluZSBGZWxkZGVmaW5pdGlvbiBoaW56dWYmdXVtbDtnZW4nOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnU3BlY2lmaWVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG1vZHVsZSB0YWcuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBkZWZhdWx0IC0gKHRoZSBkZWZhZmF1bHQgYmVoYXZpb3IpLCBkZXRhaWwgLSB0byBkaXNwbGF5IGEgZGV0YWlsIHZpZXcgb2YgYSBzaW5nbGUgZmlsZSBiYXNlZCBvbiB0aGUgdXBsb2FkX2lkLCBhbmQgeW91c2VuZGl0IC0gdG8gZGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgdXBsb2FkaW5nIGEgZmlsZSwgYW5kIHNlbmRpbmcgaXQgdG8gbnVtZXJvdXMgYWRkcmVzc2VzIGluIG9uZSBzdGVwJzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ1NwZWNpZnkgdGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBzZW5kIGEgZmlsZSBmb3JtJzsKJGxhbmdbJ2ZpbGVfdXBsb2FkZWQnXSA9ICdEYXRlaSB3dXJkZSBlcmZvbGdyZWljaCBob2NoZ2VsYWRlbic7CiRsYW5nWyd0byddID0gJ0FuJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdBZGQgb3IgRWRpdCBhICZxdW90O1lvdSBTZW5kIEl0JnF1b3Q7IEZvcm0gVGVtcGxhdGUnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ1lvdVNlbmRJdCBGb3JtIFRlbXBsYXRlcyc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gZGVmYXVsdCAmcXVvdDt5b3Ugc2VuZCBpdCZxdW90OyB0ZW1wbGF0ZSc7CiRsYW5nWydtc2dfZmlsZV9zZW50J10gPSAnQSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlbGVjdGVkIGFkZHJlc3NlcyB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIGFuZCBob3cgdG8gcmV0cmlldmUgaXQuJzsKJGxhbmdbJ2Vycm9yX25vYWRkcmVzc2VzJ10gPSAnU2llIG0mdXVtbDtzc2VuIG1pbmRlc3RlbnMgZWluZSBaaWVsYWRyZXNzZSBhbmdlYmVuJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ1NpZSBtJnV1bWw7c3NlbiBlaW5lbiBCZXRyZWZmIGFuZ2ViZW4nOwokbGFuZ1snc3ViamVjdCddID0gJ0JldHJlZmYnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnU2VpdGUgZiZ1dW1sO3IgZGFzICZiZHF1bztEYXRlaSBzZW5kZW4mbGRxdW87LUZvcm11bGFyJzsKJGxhbmdbJ2ZpbGVfaW5mbyddID0gJ0RhdGVpaW5mb3JtYXRpb25lbic7CiRsYW5nWydzZW5kJ10gPSAnQWJzZW5kZW4nOwokbGFuZ1snbm90ZXMnXSA9ICdOb3RpemVuJzsKJGxhbmdbJ2FkZHJlc3NlZXMnXSA9ICdJbmZvcm1hdGlvbmVuICZ1dW1sO2JlciBkaWVzZSBEYXRlaSBzZW5kZW4gYW4nOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnRS1NYWlsLVZvcmxhZ2UgJmJkcXVvO0RhdGVpIHNlbmRlbiZsZHF1bzsnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWRkIG9yIEVkaXQgYSAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJ0Zvcm11bGFydm9ybGFnZSAmYmRxdW87RGF0ZWkgc2VuZGVuJmxkcXVvOyc7CiRsYW5nWydwcm9tcHRfbm90aWZ5X2VtYWlsX3RlbXBsYXRlJ10gPSAnRmlsZSB1cGxvYWQgbm90aWZpY2F0aW9uIGVtYWlsIHRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0J10gPSAnU3lzdGVtIGRlZmF1bHQgJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgZm9ybSB0ZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdEYXRlaWVuIGluIGRpZXNlciBLYXRlZ29yaWUgayZvdW1sO25uZW4gZ2VsJm91bWw7c2NodCB3ZXJkZW4nOwokbGFuZ1sndGl0bGVfYWxsb3dfZGVsZXRlJ10gPSAnRGFzIEwmb3VtbDtzY2hlbiB2b24gRGF0ZWllbiBpbSBGcm9udGVuZCBlcmxhdWJlbic7CiRsYW5nWydkZWZhdWx0X3RlbXBsYXRlcyddID0gJ1N0YW5kYXJkLVRlbXBsYXRlcyc7CiRsYW5nWydmaXJzdHBhZ2UnXSA9ICdFcnN0ZSBTZWl0ZSc7CiRsYW5nWydwcmV2cGFnZSddID0gJ1ZvcmhlcmlnZSBTZWl0ZSc7CiRsYW5nWyduZXh0cGFnZSddID0gJ04mYXVtbDtjaHN0ZSBTZWl0ZSc7CiRsYW5nWydsYXN0cGFnZSddID0gJ0xldHp0ZSBTZWl0ZSc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICcmbGFxdW87JzsKJGxhbmdbJ3ByZXZwYWdlX2Fycm93J10gPSAnJmxzYXF1bzsnOwokbGFuZ1snbmV4dHBhZ2VfYXJyb3cnXSA9ICcmcnNhcXVvOyc7CiRsYW5nWydsYXN0cGFnZV9hcnJvdyddID0gJyZyYXF1bzsnOwokbGFuZ1sncGFnZSddID0gJ1NlaXRlJzsKJGxhbmdbJ29mJ10gPSAndm9uJzsKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdBdXRvcmlzaWVydGUgRkVVLUdydXBwZW4nOwokbGFuZ1snaW5mb19ncm91cGxpc3QnXSA9ICdXJmF1bWw7aGxlbiBTaWUgZGllIEdydXBwZW4gZGVzIEZyb250ZW5kVXNlcnMtTW9kdWxzLCBkZW5lbiBkZXIgWnVncmlmZiBhdWYgZGllc2UgS2F0ZWdvcmllIGVybGF1YnQgaXN0LiBXZW5uIFNpZSBhbGxlIEVpbnRyJmF1bWw7Z2UgYWJ3JmF1bWw7aGxlbiwgZXJsYXViZW4gU2llIGFsbGVuIGRlbiBadWdyaWZmLic7CiRsYW5nWyd0aXRsZV9zY2FuJ10gPSAnRGllc2UgS2F0ZWdvcmllIGF1ZiBuZXVlIERhdGVpZW4gcHImdXVtbDtmZW4nOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdGZWhsZW5kZSBWb3JzY2hhdWJpbGRlciBmJnV1bWw7ciBkaWUgRGF0ZWllbiBkaWVzZXIgS2F0ZWdvcmllIGVyemV1Z2VuLic7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlscyddID0gJ1ZvcnNjaGF1YmlsZGVyIGVyemV1Z2VuJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWwnXSA9ICdFaW4gVm9yc2NoYXViaWxkIGYmdXVtbDtyIGRpZXNlIERhdGVpIGVyemV1Z2VuJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdFaW4gVm9yc2NoYXViaWxkIGVyemV1Z2VuJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ0tvbm50ZSBkYXMgVmVyemVpY2huaXMgbmljaHQgJm91bWw7ZmZuZW4gKEJlcmVjaHRpZ3VuZ3MtUHJvYmxlbT8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0dyJm91bWw7JnN6bGlnO2UgZGVzIERvd25sb2Fkcyc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0RpZSBWZXJ3ZW5kdW5nIGRpZXNlcyBQYXJhbWV0ZXJzIGhhdCBBdXN3aXJrdW5nZW4gYXVmIGRpZSBHZXNjaHdpbmRpZ2tlaXQgYmVpbSBIZXJ1bnRlcmxhZGVuIHVuZCBrYW5uIGhlbGZlbiwgZmFsbHMgbnVyIHdlbmlnIFNwZWljaGVyIHp1ciBWZXJmJnV1bWw7Z3VuZyBzdGVodC4nOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdEZXIgUEhQLVNhZmUtTW9kdXMgaXN0IGFrdGl2aWVydC4gQXVmZ3J1bmQgZGVzc2VuIGthbm4gZXMgYmVpbSBIb2NobGFkZW4gdm9uIERhdGVpZW4genUgUHJvYmxlbWVuIGtvbW1lbiAoQmVyZWNodGlndW5nZW4pLiBBdSZzemxpZztlcmRlbSBrYW5uIGVzIG1pdCBkZXIgRiZhdW1sO2hpZ2tlaXQgZGVzIE1vZHVscywgZWluaWdlIEVpbnN0ZWxsdW5nZW4gaW4gZGVyIGluaS1EYXRlaSAmdXVtbDtiZXJzY2hyZWliZW4genUgayZvdW1sO25uZW4sIHp1IHVuZXJ3JnV1bWw7bnNjaHRlbiAmVXVtbDtiZXJzY2huZWlkdW5nZW4ga29tbWVuLiBTaWUgc29sbHRlbiBzaWNoIGRhaGVyIG1pdCBJaHJlbSBQcm92aWRlciBpbiBWZXJiaW5kdW5nIHNldHplbiwgb2IgZXIgZGVuIFNhZmUtTW9kdXMgZGVha3RpdmllcmVuIGthbm4uJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdEaWVzIGlzdCBpbnNiZXNvbmRlcmUgZGFubiBuJnV1bWw7dHpsaWNoLCB3ZW5uIGRpZSBEZXRhaWxzIG1pdCBlaW5lbSBhbmRlcmVuIFNlaXRlbi1UZW1wbGF0ZSBhbmdlemVpZ3Qgd2VyZGVuIHNvbGxlbi4gRGllc2VyIFBhcmFtZXRlciBiZW4mb3VtbDt0aWd0IGVudHdlZGVyIGRpZSBJRCBvZGVyIGRlbiBBbGlhcyBkZXIgU2VpdGUsIGRpZSB6dXIgQW56ZWlnZSBkZXIgRGV0YWlscyB2ZXJ3ZW5kZXQgd2VyZGVuIHNvbGwuJzsKJGxhbmdbJ3BhcmFtX3ByZWZpeCddID0gJ0VpbiBib29sc2NoZXIgV2VydCwgZGVyIGFuemVpZ3QsIG1pdCB3ZWxjaGVtIFByZWZpeCBkaWUgRGF0ZWllbiBnZWtlbm56ZWljaG5ldCB3ZXJkZW4gc29sbGVuJzsKJGxhbmdbJ3BhcmFtX3ByZWZpeF9mZXUnXSA9ICdFaW4gYm9vbHNjaGVyIFdlcnQsIGRlciBhbnplaWd0LCBtaXQgd2VsY2hlbSBQcmVmaXggZGllIERhdGVpZW4gZGVzIGFrdHVlbGxlbiBBdXRvcnMgZ2VrZW5uemVpY2huZXQgd2VyZGVuIHNvbGxlbi4gT2huZSBWb3JnYWJlIHdpcmQgZGllIGFrdHVlbGxlIFplaXQgYWxzIFByZWZpeCB2ZXJ3ZW5kZXQgKGltIGRlY2hleC1Gb3JtYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ0NhcHRjaGEtU3VwcG9ydCAoc3RhbmRhcmRtYSZzemxpZztpZyBha3RpdmllcnQpIGJlaW0gSG9jaGxhZGVuIGRlYWt0aXZpZXJlbic7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnVm9ybGFnZSBmJnV1bWw7ciBkYXMgRm9ybXVsYXIgenVtIEhvY2hsYWRlbiB2b24gRGF0ZWllbiBiZWFyYmVpdGVuJzsKJGxhbmdbJ2NhcHRjaGFfdGl0bGUnXSA9ICdCaXR0ZSBnZWJlbiBTaWUgZGVuIFRleHQgZWluLCBkZXIgaW4gZGllc2VtIEJpbGQgYW5nZXplaWd0IHdpcmQnOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnRGVyIFRleHQsIGRlbiBTaWUgZWluZ2VnZWJlbiBoYWJlbiwgZW50c3ByaWNodCBuaWNodCBkZW0gYW5nZXplaWd0ZW4gQmlsZCc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdGJnV1bWw7ciBEYXRlaWVuIG1pdCBkaWVzZXIgTmFtZW5zZXJ3ZWl0ZXJ1bmcgVm9yc2NoYXViaWxkZXIgZXJ6ZXVnZW4nOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9zaXplJ10gPSAnTWF4aW1hbGUgR3Imb3VtbDsmc3psaWc7ZSBmJnV1bWw7ciBkaWUgZXJ6ZXVndGVuIFZvcnNjaGF1YmlsZGVyIChpbiBQaXhlbCknOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnRWluIFBpa3RvZ3JhbW0gaG9jaGxhZGVuJzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdCddID0gJ0RpZXNlciBUZXh0IHdpcmQgdmVyd2VuZGV0LCB3ZW5uIGVpbiBuZXVlcyBUZW1wbGF0ZSBkaWVzZXMgVHlwcyBlcnN0ZWxsdCB3aXJkJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF9zeXNkZWZhdWx0J10gPSAnU3RhbmRhcmR2b3JsYWdlIGYmdXVtbDtyIGRlbiBkZXRhaWxpZXJ0ZW4gQmVyaWNodCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdTdGFuZGFyZHZvcmxhZ2UgZiZ1dW1sO3IgZGVuIEt1cnpiZXJpY2h0JzsKJGxhbmdbJ3RpdGxlX3VwbG9hZGZvcm1fc3lzZGVmYXVsdCddID0gJ1N0YW5kYXJkdm9ybGFnZSBmJnV1bWw7ciBkYXMgSG9jaGxhZGVuIHZvbiBEYXRlaWVuJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnVm9ybGFnZSc7CiRsYW5nWydyZXNldHRvZGVmYXVsdCddID0gJ0F1ZiBkaWUgcHJvZ3JhbW1zZWl0aWdlbiBWb3JlaW5zdGVsbHVuZ2VuIHp1ciZ1dW1sO2Nrc2V0emVuJzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfdGVtcGxhdGUnXSA9ICdWb3JsYWdlIGYmdXVtbDtyIGRlbiBLdXJ6YmVyaWNodCc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfdGVtcGxhdGUnXSA9ICdWb3JsYWdlIGYmdXVtbDtyIGRlbiBkZXRhaWxpZXJ0ZW4gQmVyaWNodCc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05hbWUnOwokbGFuZ1snbGVnZW5kX3VwbG9hZGZvcm0nXSA9ICdFaW5lIERhdGVpIGhvY2hsYWRlbic7CiRsYW5nWydlcnJvcl9taXNzaW5ncGFyYW0nXSA9ICdFcyBmZWhsdCBlaW4gZXJmb3JkZXJsaWNoZXIgUGFyYW1ldGVyJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmduYW1lJ10gPSAnRiZ1dW1sO3IgZGVuIERhdGVpdHlwZW4gbXVzcyBlaW4gTmFtZSBlaW5nZWdlYmVuIHdlcmRlbic7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ0VzIG11c3MgbWluZGVzdGVucyBlaW5lIERhdGVpbmFtZW5zZXJ3ZWl0ZXJ1bmcgZmVzdGdlbGVndCB3ZXJkZW4nOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdEYWYmdXVtbDtyIG11c3MgZWluIFBpa3RvZ3JhbW0gZmVzdGdlbGVndCB3ZXJkZW4nOwokbGFuZ1snZXJyb3Jfbm9zdWNocm93J10gPSAnRGllIGZlc3RnZWxlZ3RlIFplaWxlIGtvbm50ZSBuaWNodCBnZWZ1bmRlbiB3ZXJkZW4nOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnVW5iZWthbm50JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdCZXNjaHJlaWJ1bmcgZGVyIERhdGVpdHlwZW4gZiZ1dW1sO3IgbmljaHQgJnV1bWw7YmVyZWluc3RpbW1lbmRlIERhdGVpZW4nOwokbGFuZ1snaW1hZ2UnXSA9ICdCaWxkJzsKJGxhbmdbJ2ljb24nXSA9ICdQaWt0b2dyYW1tJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdEYXRlaW5hbWVuc2Vyd2VpdGVydW5nZW4nOwokbGFuZ1snYWRkZmlsZXR5cGUnXSA9ICdFaW5lbiBuZXVlbiBEYXRlaXR5cGVuIGhpbnp1ZiZ1dW1sO2dlbic7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnRGF0ZWl0eXBlbic7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdFcyB3dXJkZSBrZWluZSBLYXRlZ29yaWUtSUQgZWluZ2VnZWJlbic7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5J10gPSAnRXMgd3VyZGUga2VpbmUgS2F0ZWdvcmllLUlEIGVpbmdlZ2ViZW4nOwokbGFuZ1snZXJyb3JfdGVtcGxhdGVuYW1lZXhpc3RzJ10gPSAnRXMgZXhpc3RpZXJ0IGJlcmVpdHMgZWluZSBWb3JsYWdlIG1pdCBkaWVzZW0gTmFtZW4uJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZW5hbWUnXSA9ICdWb3JsYWdlbm5hbWUnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnVm9ybGFnZSc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdFaW5lIG5ldWUgVm9ybGFnZSBlcnN0ZWxsZW4nOwokbGFuZ1snaGVscF9PbkRvd25sb2FkJ10gPSAnPHA+RWluIEVyZWlnbmlzLCB3ZW5uIGVpbiBVc2VyIGVpbmUgRGF0ZWkgaGVydW50ZXJnZWxhZGVuIGhhdDwvcD4NCjxoND5QYXJhbWV0ZXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gSUQgZGVyIGhvY2hnZWxhZGVuZW4gRGF0ZWk8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBEYXRlaW5hbWU8L2xpPg0KPGxpPjxlbT5pcDwvZW0+IC0gSVAtQWRyZXNzZSBkZXMgaGVydW50ZXJsYWRlbmRlbiBVc2VyczwvbGk+DQo8L3VsPic7CiRsYW5nWydoZWxwX09uRGVsZXRlQ2F0ZWdvcnknXSA9ICc8cD5FaW4gRXJlaWduaXMsIHdlbm4gZWluZSBLYXRlZ29yaWUgZ2VsJm91bWw7c2NodCB3dXJkZTwvcD4NCjxoND5QYXJhbWV0ZXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOYW1lIGRlciBLYXRlZ29yaWU8L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBQZmFkIGRlciBLYXRlZ29yaWU8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9PbkNyZWF0ZUNhdGVnb3J5J10gPSAnPHA+RWluIEVyZWlnbmlzLCB3ZW5uIGVpbmUgS2F0ZWdvcmllIGVyc3RlbGx0IHd1cmRlPC9wPg0KPGg0PlBhcmFtZXRlcjwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIE5hbWUgZGVyIEthdGVnb3JpZTwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBCZXNjaHJlaWJ1bmcgZGVyIEthdGVnb3JpZTwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIEthdGVnb3JpZXBmYWQ8L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBFaW4gRmxhZywgZGVyIGFuemVpZ3QsIG9iIGRpZSBLYXRlZ29yaWUgZ2VsaXN0ZXQgd2VyZGVuIHNvbGw8L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkVpbiBFcmVpZ25pcywgd2VubiBlaW5lIERhdGVpICZ1dW1sO2JlciBkaWUgQWRtaW5pc3RyYXRpb24gb2RlciBkYXMgRnJvbnRlbmQgZW50ZmVybnQgd3VyZGU8L3A+DQo8aDQ+UGFyYW1ldGVyPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gTmFtZSBkZXIgZW50ZmVybnRlbiBEYXRlaTwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBJRCBkZXIgZW50ZmVybnRlbiBEYXRlaTwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBJRCBkZXIgS2F0ZWdvcmllPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25VcGxvYWQnXSA9ICc8cD5FaW4gRXJlaWduaXMsIHdlbm4gZWluZSBEYXRlaSAmdXVtbDtiZXIgZGllIEFkbWluaXN0cmF0aW9uIG9kZXIgZGFzIEZyb250ZW5kIGhvY2hnZWxhZGVuIHd1cmRlPC9wPg0KPGg0PlBhcmFtZXRlcjwvaDQ+DQo8dWw+DQo8bGk+PGVtPmNhdGVnb3J5PC9lbT4gLSBOYW1lIGRlciBLYXRlZ29yaWU8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOYW1lIGRlciBob2NoZ2VsYWRlbmVuIERhdGVpPC9saT4NCjxsaT48ZW0+c2l6ZTwvZW0+IC0gR3Imb3VtbDsmc3psaWc7ZSBkZXIgaG9jaGdlbGFkZW5lbiBEYXRlaTwvbGk+DQo8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIEt1cnpiZXNjaHJlaWJ1bmcgZGVyIGhvY2hnZWxhZGVuZW4gRGF0ZWkgKGthbm4gbGVlciBzZWluKTwvZW0+PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIGRpZSBsYW5nZSBCZXNjaHJlaWJ1bmcgZGVyIGhvY2hnZWxhZGVuZW4gRGF0ZWkgKGthbm4gbGVlciBzZWluKTwvZW0+PC9saT4NCjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBBdXRvciBkZXIgaG9jaGdlbGFkZW5lbiBEYXRlaSAoZmFsbHMgdmVyZiZ1dW1sO2diYXIpPC9lbT48L2xpPg0KPGxpPjxlbT5pcF9hZGRyZXNzPC9lbT4gLSBJbnRlcm5ldC1BZHJlc3NlIGRlcyBDbGllbnRzLCBkZXIgZGllIERhdGVpIGhvY2hnZWxhZGVuIGhhdDwvbGk+DQo8L3VsPic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFcmVpZ25pcywgd2VubiBlaW5lIEthdGVnb3JpZSBnZWwmb3VtbDtzY2h0IHd1cmRlJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25jcmVhdGVjYXRlZ29yeSddID0gJ0VyZWlnbmlzLCB3ZW5uIGVpbmUgS2F0ZWdvcmllIGVyc3RlbGx0IHd1cmRlJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0VyZWlnbmlzLCB3ZW5uIGVpbmUgRGF0ZWkgaGVydW50ZXIgZ2VsYWRlbiB3dXJkZSc7CiRsYW5nWydpbmZvX2V2ZW50X29udXBsb2FkJ10gPSAnRXJlaWduaXMsIHdlbm4gZWluZSBuZXVlIERhdGVpIGhvY2hnZWxhZGVuIHd1cmRlJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFcmVpZ25pcywgd2VubiBlaW5lIERhdGVpIGVudGZlcm50IHd1cmRlJzsKJGxhbmdbJ3RpdGxlX3VzZXJ0YWdfb251cGxvYWQnXSA9ICdCZW51dHplcmRlZmluaWVydGVyIFRhZywgZGVyIGF1ZmdlcnVmZW4gd2lyZCwgd2VubiBkaWUgRGF0ZWkgdm9sbHN0JmF1bWw7bmRpZyBob2NoZ2VsYWRlbiBpc3QnOwokbGFuZ1snbm9uZSddID0gJ05pY2h0cyc7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICcmVXVtbDtiZXJlaW5zdGltbXVuZ2VuIGdlZnVuZGVuJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnRGVuIEJlbnV0emVyIG5hY2ggZGVtIEhvY2hsYWRlbiBlaW5lciBEYXRlaSBhdWYgZGllc2UgU2VpdGUgd2VpdGVybGVpdGVuIChJRC9BbGlhcyknOwokbGFuZ1snZGV0YWlscyddID0gJ0RldGFpbHMnOwokbGFuZ1snY29uZmlybV9wcmVmZXJlbmNlcyddID0gJ1dvbGxlbiBTaWUgd2lya2xpY2ggZGllIEVpbnN0ZWxsdW5nZW4gJmF1bWw7bmRlcm4/JzsKJGxhbmdbJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCddID0gJ0VzIHd1cmRlbiBrZWluZSBEYXRlaWVuIGhvY2hnZWxhZGVuLic7CiRsYW5nWydwcm9tcHRfcmVwbGFjZSddID0gJyZVdW1sO2JlcnNjaHJlaWJlbiBlcmxhdWJlbic7CiRsYW5nWydpbmZvX3JlcGxhY2UnXSA9ICdEYXRlaWVuIG1pdCBkZW0gZ2xlaWNoZW4gTmFtZW4gZXJzZXR6ZW4gKG9obmUgJkF1bWw7bmRlcnVuZyBkZXIgSUQpJzsKJGxhbmdbJ3BhcmFtX25vX2luaXRpYWwnXSA9ICdLZWluZSBlaW5sZWl0ZW5kZW4gRXJnZWJuaXNzZSBhbnplaWdlbiwgd2VubiBkZXIgRmlsdGVyIGFrdGl2aWVydCBpc3QnOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnRWluIHp1cyZhdW1sO3R6bGljaGVyIFNjaGwmdXVtbDtzc2VsIGYmdXVtbDtyIGRpZSBrJnV1bWw7bmZ0aWdlIFZlcndhbHR1bmcgdm9uIGhvY2hnZWxhZGVuZW4gRGF0ZWllbi4gRGllc2VyIFNjaGwmdXVtbDtzc2VsIGthbm4gZWluIGtvZGllcnRlciBTdHJpbmcgd2llIGV0d2E6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7IG9kZXIgJmF1bWw7aG5saWNoIHNlaW4ga2Fubi4gIERpZXNlciBQYXJhbWV0ZXIgd2lyZCBudXIgYmVuJm91bWw7dGlndCwgd2VubiBkYXMgVXBsb2Fkcy1Nb2R1bCBpbiBlaW5lbSBhbmRlcmVuIE1vZHVsIGVpbmdlYmV0dGV0IHdpcmQnOwokbGFuZ1sncGFyYW1fbm9hdXRob3InXSA9ICdWZXJiaXJndCBkYXMgRmVsZCBBdXRvciBpbSBGb3JtdWxhciB6dW0gSG9jaGxhZGVuLiBEaWVzZXIgUGFyYW1ldGVyIGlzdCBudXIgbSZvdW1sO2dsaWNoLCB3ZW5uIGRlciBNb2R1cyAmIzAzOTt1cGxvYWQmIzAzOTsgaXN0LiBXZW5uIGRhcyBGcm9udGVuZFVzZXJzLU1vZHVsIGluc3RhbGxpZXJ0IHVuZCBlaW4gQmVudXR6ZXIgYWt0dWVsbCBhbmdlbWVsZGV0IGlzdCwgZW50aCZhdW1sO2x0IGRhcyB2ZXJib3JnZW5lIEZlbGQgZGVzc2VuIE5hbWVuJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0mcXVvdDtpZCZxdW90OyAtIGRlZmluaWVydCBlaW5lIGVpbnplbG5lIERhdGVpIGYmdXVtbDtyIGVpbmVuIExpbmsgb2RlciBmJnV1bWw7ciBkZW4gU2luZ2xlLU1vZHVzPC9saT4nOwokbGFuZ1sncGFyYW1fZGV0YWlsdGVtcGxhdGUnXSA9ICdEaWUgVm9ybGFnZSBtaXQgZGllc2VtIE5hbWVuIGYmdXVtbDtyIGRlbiBkZXRhaWxpZXJ0ZW4gQmVyaWNodCB2ZXJ3ZW5kZW4uJzsKJGxhbmdbJ3BhcmFtX3RlbXBsYXRlJ10gPSAnVmVyd2VuZGV0IGRpZSBWb3JsYWdlIG1pdCBkaWVzZW0gTmFtZW4gZiZ1dW1sO3IgZGllc2VuIEJlcmljaHQgYnp3LiBkYXMgRm9ybXVsYXIuIERpZXNlcyBUZW1wbGF0ZSBydWZ0IGVudHNwcmVjaGVuZCBkZW0gZmVzdGdlbGVndGVuIE1vZHVzIGF1dG9tYXRpc2NoIGVpbiB3ZWl0ZXJlcyBUZW1wbGF0ZSBtaXQgZGVtIHZvcmdlZ2ViZW5lbiBOYW1lbiBhdWYnOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnRGFzIEZpbHRlci1Gb3JtdWxhciBhbnplaWdlbiAoZmFsbHMgZGllc2VyIFBhcmFtZXRlciBhdWYgaXJnZW5kIGVpbmVuIFdlcnQgZ2VzZXR6dCB3dXJkZSknOwokbGFuZ1sncGFyYW1fbm9faW50aXRpYWwnXSA9ICdJc3QgbnVyIG4mdXVtbDt0emxpY2gsIHdlbm4gZGVyIEZpbHRlci1QYXJhbWV0ZXIgZ2VzZXR6dCB3dXJkZS4gU3RhbmRhcmRtJmF1bWw7JnN6bGlnO2lnIHplaWd0IGRpZXNlciBQYXJhbWV0ZXIgYW4sIHdlbGNoZSBlaW5sZWl0ZW5kZW4gRXJnZWJuaXNzZSB6dXImdXVtbDtja2dlZ2ViZW4gd2VyZGVuIHNvbGxlbi4nOwokbGFuZ1sncGFyYW1fZmlsZXR5cGVzJ10gPSAnWmVpZ3QgbnVyIERhdGVpZW4gYW4sIGRlcmVuIFR5cCBpbiBkZXIgbWl0IEtvbW1hdGEgZ2V0cmVubnRlbiBMaXN0ZSBhdWZnZWYmdXVtbDtocnQgaXN0JzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJzxwPlNvcnRpZXJyZWloZW5mb2xnZQ0KICA8dWw+DQogIDxsaT48ZW0+ZGF0ZV9hc2M8L2VtPiAtIHNvcnRpZXJ0IGF1ZnN0ZWlnZW5kIG5hY2ggRGF0dW08L2xpPg0KICA8bGk+PGVtPmRhdGVfZGVzYzwvZW0+IC0gc29ydGllcnQgYWJzdGVpZ2VuZCBuYWNoIERhdHVtPC9saT4NCiAgPGxpPjxlbT5uYW1lX2FzYzwvZW0+IC0gc29ydGllcnQgYXVmc3RlaWdlbmQgbmFjaCBOYW1lPC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtIHNvcnRpZXJ0IGFic3RlaWdlbmQgbmFjaCBOYW1lPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gc29ydGllcnQgYXVmc3RlaWdlbmQgbmFjaCBHciZvdW1sOyZzemxpZztlPC9saT4NCiAgPGxpPjxlbT5zaXplX2Rlc2M8L2VtPiAtIHNvcnRpZXJ0IGFic3RlaWdlbmQgbmFjaCBHciZvdW1sOyZzemxpZztlPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBzb3J0aWVydCBhdWZzdGVpZ2VuZCBuYWNoIEF1dG9yPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfZGVzYzwvZW0+IC0gc29ydGllcnQgYWJzdGVpZ2VuZCBuYWNoIEF1dG9yPC9saT4NCiAgPGxpPjxlbT5pcF9hc2M8L2VtPiAtICBzb3J0aWVydCBhdWZzdGVpZ2VuZCBuYWNoIGRlciBJUC1BZHJlc3NlPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBzb3J0aWVydCBhYnN0ZWlnZW5kIG5hY2ggZGVyIElQLUFkcmVzc2U8L2xpPg0KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBzb3J0aWVydCBhdWZzdGVpZ2VuZCBuYWNoIEJlc2NocmVpYnVuZzwvbGk+DQogIDxsaT48ZW0+ZGVzY19kZXNjPC9lbT4gLSBzb3J0aWVydCBhYnN0ZWlnZW5kIG5hY2ggQmVzY2hyZWlidW5nPC9saT4NCiAgPGxpPjxlbT5kb3dubG9hZHNfYXNjPC9lbT4gLSBzb3J0aWVydCBhdWZzdGVpZ2VuZCBuYWNoIERvd25sb2FkLVomYXVtbDtobGVyLjwvbGk+DQogIDxsaT48ZW0+ZG93bmxvYWRzX2Rlc2M8L2VtPiAtIHNvcnRpZXJ0IGFic3RlaWdlbmQgbmFjaCBEb3dubG9hZC1aJmF1bWw7aGxlci48L2xpPg0KICA8bGk+PGVtPnJhbmRvbTwvZW0+IC0genVmJmF1bWw7bGxpZ2UgUmVpaGVuZm9sZ2U8L2xpPg0KICA8L3VsPg0KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddID0gJ0RhcyBUZW1wbGF0ZSwgd2VsY2hlcyBmJnV1bWw7ciBkaWUgS2F0ZWdvcmllbGlzdGUgdmVyd2VuZGV0IHdlcmRlbiBzb2xsLCBuYWNoZGVtIGRpZSBLYXRlZ29yaWUtWnVzYW1tZW5mYXNzdW5nc3NlaXRlIGdla2xpY2t0IHd1cmRlJzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmdzb3J0b3JkZXInXSA9ICdEaWUgU29ydGllcnJlaWhlbmZvbGdlIChzaWVoZSBwYXJhbV9zb3J0b3JkZXIpLCBkaWUgZiZ1dW1sO3IgZGllIEthdGVnb3JpZWxpc3RlIHZlcndlbmRldCB3ZXJkZW4gc29sbCwgbmFjaGRlbSBkaWUgS2F0ZWdvcmllbi1adXNhbW1lbmZhc3N1bmdzc2VpdGUgZ2VrbGlja3Qgd3VyZGUnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICdmaWxlX2V4dGVuc2lvbnM9JnF1b3Q7ZXh0MSxleHQyLGV4dDMmcXVvdDsNCjxwPklzdCBudXIgZyZ1dW1sO2x0aWcsIHdlbm4gZGVyIFBhcmFtZXRlciBtb2RlPXVwbG9hZCBpc3QuIERpZXNlciBQYXJhbWV0ZXIgbGVndCBkaWUgRGF0ZWl0eXBlbiBmZXN0LCBkaWUgaG9jaGdlbGFkZW4gd2VyZGVuIGQmdXVtbDtyZmVuLiAgRGllIFZvcmVpbnN0ZWxsdW5nZW4gZGVzIE1vZHVscyB3ZXJkZW4gZGFiZWkgJnV1bWw7YmVyc2NocmllYmVuLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0mcXVvdDtOJnF1b3Q7DQo8cD5FaW4gUGFyYW1ldGVyLCB1bSBudXIgZGllIGVyc3RlbiAmcXVvdDtOJnF1b3Q7IEVyZ2Vibmlzc2UgZWluZXIgQWJmcmFnZSBhdWZ6dWxpc3Rlbi4gRWluIFNlaXRlbnVtYnJ1Y2ggdyZhdW1sO3JlIHp3YXIgYmVzc2VyLCBhYmVyIGJpcyBkYWhpbiBnaWJ0cyBkaWVzZW4gVHJpY2suPC9wPic7CiRsYW5nWydwYXJhbV9jYXRlZ29yeSddID0gJ2NhdGVnb3J5PSZxdW90O25hbWUmcXVvdDsNCjxwPjxiPkhpbndlaXM6PC9iPiBjYXRlZ29yeSBrYW5uIGF1Y2ggZGVuIFdlcnQgJnF1b3Q7YWxsJnF1b3Q7IGhhYmVuLiBEYW5uIHdlcmRlbiBhbGxlIGhvY2hnZWxhZGVuZW4gRGF0ZWllbiBpbiBhbGxlbiA8ZW0+Z2VsaXN0ZXRlbjwvZW0+IEthdGVnb3JpZW4gYW5nZXplaWd0LjwvcD4nOwokbGFuZ1sncGFyYW1fbW9kZSddID0gJzx1bD4NCiAgPGxpPjxlbT5kZXRhaWxlZDwvZW0+IC0gemVpZ3QgZWluZSBkZXRhaWxsaWVydGUgTGlzdGUgYWxsZXIgRGF0ZWllbiBkaWVzZXIgS2F0ZWdvcmllPC9saT4NCiAgPGxpPjxlbT5zaW5nbGU8L2VtPiAtIHplaWd0IGVpbmVuIGRldGFpbGxpZXJ0ZW4gQmVyaWNodCAmdXVtbDtiZXIgZWluZSBiZXN0aW1tdGUsIGhvY2hnZWxhZGVuZSBEYXRlaTwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSB6ZWlndCBkZW4gQmVzdWNoZXJuIGRlciBXZWJzZWl0ZSBlaW4gRm9ybXVsYXIgenVtIEhvY2hsYWRlbiBlaW5lciBEYXRlaTwvbGk+DQogIDxsaT48ZW0+dXJsIDxpPm9kZXI8L2k+IGxpbms8L2VtPiAtIHplaWd0IGVpbmVuIExpbmsgenUgZWluZXIgRGF0ZWk8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIHplaWd0IGVpbmUgenVzYW1tZW5nZWZhc3N0ZSBMaXN0ZSBhbGxlciBEYXRlaWVuIGluIGRlciBhbmdlZ2ViZW5lbiBLYXRlZ29yaWU8L2xpPg0KICA8L3VsPic7CiRsYW5nWydwYXJhbV9zZWxlY3Rmb3JtJ10gPSAnSW0gJiMwMzk7c2VsZWN0JiMwMzk7LU1vZHVzIGVudGgmYXVtbDtsdCBkaWVzZXIgUGFyYW1ldGVyIGRpZSBGb3JtdWxhci1JRCBkZXMgJnV1bWw7YmVyZ2VvcmRuZXRlbiBGb3JtdWxhcnMuIEthbm4gdmVyd2VuZGV0IHdlcmRlbiwgdW0gYmVzdGltbXRlIFBhcmFtZXRlciB3ZWl0ZXJ6dWdlYmVuLic7CiRsYW5nWydwYXJhbV9zZWxlY3RuYW1lJ10gPSAnSW0gJiMwMzk7c2VsZWN0JiMwMzk7LU1vZHVzIGthbm4gbWl0IGRpZXNlbSBQYXJhbWV0ZXIgZGVyIE5hbWVzIGRlcyBGZWxkZXMgZmVzdGdlbGVndCB3ZXJkZW4uJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdHZhbHVlJ10gPSAnSW0gJiMwMzk7c2VsZWN0JiMwMzk7LU1vZHVzIGthbm4gbWl0IGRpZXNlbSBQYXJhbWV0ZXIgZGVyIHZvcmVpbmdlc3RlbGx0ZSBXZXJ0IGRlcyBGZWxkZXMgZmVzdGdlbGVndCB3ZXJkZW4uJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5vbmUnXSA9ICdJbSAmIzAzOTtzZWxlY3QmIzAzOTstTW9kdXMga2FubiBtaXQgZGllc2VtIFBhcmFtZXRlciBmZXN0Z2VsZWd0IHdlcmRlbiwgb2IgJiMwMzk7bm9uZSYjMDM5OyBlaW5lIGcmdXVtbDtsdGlnZSBBdXN3YWhsIGlzdC4nOwokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdadXImdXVtbDtjayB6dXIgTW9kdWxvYmVyZmwmYXVtbDtjaGUnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yaWVzJ10gPSAnRXMgd3VyZGVuIGtlaW5lIEthdGVnb3JpZW4gZGVmaW5pZXJ0Lic7CiRsYW5nWyd0aXRsZV9lbmZvcmNlZXh0ZW5zaW9ucyddID0gJ0VyZm9yZGVydCBOYW1lbnNlcndlaXRlcnVuZ2VuIGYmdXVtbDtyIGFsbGUgaG9jaGdlbGFkZW5lbiBEYXRlaWVuJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdEaWVzIHNldHp0IGRhcyBUZW1wbGF0ZSBhdWYgZGllIHByb2dyYW1tc2VpdGlnZSBWb3JlaW5zdGVsbHVuZyB6dXImdXVtbDtjay4gQWxsZSAmQXVtbDtuZGVydW5nZW4gZ2VoZW4gZGFiZWkgdmVybG9yZW4uIFdvbGxlbiBTaWUgZGFzIHdpcmtsaWNoPyc7CiRsYW5nWyd0aHVtYm5haWwnXSA9ICdWb3JzY2hhdWJpbGQnOwokbGFuZ1snbmV3dGh1bWJuYWlsJ10gPSAnRWluIG5ldWVzIFZvcnNjaGF1YmlsZCBob2NobGFkZW4nOwokbGFuZ1snaW5mb19zdW1tYXJ5J10gPSAnRWluZSBrdXJ6ZSBCZXNjaHJlaWJ1bmcgZGVyIERhdGVpICh3aXJkIGRpZXMgbGVlciBnZWxhc3Nlbiwgd2lyZCBkZXIgRGF0ZWluYW1lIG9obmUgRXJ3ZWl0ZXJ1bmcgdmVyd2VuZGV0KSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ0VpbiBrdXJ6ZXIgTmFtZSBmJnV1bWw7ciBJaHJlIEthdGVnb3JpZSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ0VpbmUgQmVzY2hyZWlidW5nIElocmVyIEthdGVnb3JpZSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ0RhcyBVbnRlcnZlcnplaWNobmlzIGltIFZlcnplaWNobmlzIC91cGxvYWRzLCB3ZWxjaGVzIGYmdXVtbDtyIGRpZSBTcGVpY2hlcnVuZyBkZXIgRGF0ZWllbiBkaWVzZXIgS2F0ZWdvcmllIHZlcndlbmRldCB3ZXJkZW4gc29sbC4gRmFsbHMgZGllc2VzIFZlcnplaWNobmlzIG5vY2ggbmljaHQgZXhpc3RpZXJ0LCB3aXJkIGVzIGVyemV1Z3QuJzsKJGxhbmdbJ2luZm9fZGVzdG5hbWUnXSA9ICdWZXJ3ZW5kZW4gU2llIGRhcyBGZWxkICZiZHF1bztIb2NobGFkZW4gYWxzJmxkcXVvOywgdW0gZGVuIE5hbWVuIGRlciBob2NoZ2VsYWRlbmVuIERhdGVpIHp1IHZlciZhdW1sO25kZXJuLiBPaG5lIFZvcmdhYmUgd2lyZCBkZXIgRGF0ZWluYW1lIG5pY2h0IHZlciZhdW1sO25kZXJ0Lic7CiRsYW5nWydlcnJvcl9jYW50Y3JlYXRlZGlyZWN0b3J5J10gPSAnRGFzIFZlcnplaWNobmlzIGtvbm50ZSBuaWNodCBlcnN0ZWxsdCB3ZXJkZW4uJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnRGllIFZlcmJpbmR1bmcgenVtIENNU01haWxlci1Nb2R1bCBrb25udGUgbmljaHQgaGVyZ2VzdGVsbHQgd2VyZGVuLic7CiRsYW5nWyd1cGxvYWRfbm90aWZpY2F0aW9uJ10gPSAnRXMgd3VyZGUgZWluZSBuZXVlIERhdGVpIGhvY2hnZWxhZGVuLic7CiRsYW5nWyd0aXRsZV9lbWFpbF9vbl91cGxvYWQnXSA9ICdEaWUgQmVuYWNocmljaHRpZ3VuZyAmdXVtbDtiZXIgZWluZSBob2NoZ2VsYWRlbmUgRGF0ZWkgc2VuZGVuIGFuOic7CiRsYW5nWydlbWFpbF90ZW1wbGF0ZSddID0gJ0UtTWFpbC1Wb3JsYWdlJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdTb2xsIGluIGplZGVtIFZlcnplaWNobmlzIGVpbmUgRHVtbXktaW5kZXguaHRtbC1EYXRlaSBlcnN0ZWxsdCB3ZXJkZW4/PGJyLz48ZW0+QmVyZWl0cyBleGlzdGllcmVuZGUgaW5kZXguaHRtbC1EYXRlaWVuIGJsZWliZW4gZXJoYWx0ZW48L2VtPic7CiRsYW5nWydhYm91dCddID0gJyZVdW1sO2Jlcic7CiRsYW5nWydlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJ10gPSAnWnVncmlmZiB2ZXJ3ZWlnZXJ0LiBCaXR0ZSBwciZ1dW1sO2ZlbiBTaWUgSWhyZSBCZXJlY2h0aWd1bmdlbi4nOwokbGFuZ1snZXJyb3JfY291bGRub3R3cml0ZSddID0gJ0tvbm50ZSBuaWNodCBnZXNjaHJpZWJlbiB3ZXJkZW4nOwokbGFuZ1snYWRkY2F0ZWdvcnknXSA9ICdLYXRlZ29yaWUgaGluenVmJnV1bWw7Z2VuJzsKJGxhbmdbJ2FsbCddID0gJ0FsbGUnOwokbGFuZ1snYXJleW91c3VyZSddID0gJ1dvbGxlbiBTaWUgZGFzIHdpcmtsaWNoPyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRvcic7CiRsYW5nWydjYW5jZWwnXSA9ICdBYmJyZWNoZW4nOwokbGFuZ1snY2Fubm90bW9kaWZ5cGF0aCddID0gJyhEZXIgUGZhZCBrb25udGUgbmljaHQgZ2UmYXVtbDtuZGVydCB3ZXJkZW4uKSc7CiRsYW5nWydjYXRlZ29yaWVzJ10gPSAnS2F0ZWdvcmllbic7CiRsYW5nWydjYXRlZ29yeSddID0gJ0thdGVnb3JpZSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdEaWUgS2F0ZWdvcmllIHd1cmRlIGVyZm9sZ3JlaWNoIGhpbnp1Z2VmJnV1bWw7Z3QuJzsKJGxhbmdbJ2RhdGUnXSA9ICdEYXR1bSc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdIb2NoZ2VsYWRlbiBhbSc7CiRsYW5nWydkZWZhdWx0J10gPSAnVm9yZWluc3RlbGx1bmdlbic7CiRsYW5nWydkZWxldGUnXSA9ICdMJm91bWw7c2NoZW4nOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdCZXNjaHJlaWJ1bmcnOwokbGFuZ1snZGVzdG5hbWUnXSA9ICdIb2NobGFkZW4gYWxzJzsKJGxhbmdbJ2RldGFpbF90ZW1wbGF0ZSddID0gJ0RldGFpbHZvcmxhZ2VuJzsKJGxhbmdbJ2Rvd25sb2FkZWQnXSA9ICdEaWUgRGF0ZWkgJXMgd3VyZGUgaGVydW50ZXJnZWxhZGVuLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdBbnphaGwgaGVydW50ZXJnZWxhZGVuJzsKJGxhbmdbJ2VkaXQnXSA9ICdCZWFyYmVpdGVuJzsKJGxhbmdbJ2VkaXRjYXRlZ29yeSddID0gJ0thdGVnb3JpZSBiZWFyYmVpdGVuJzsKJGxhbmdbJ2VkaXR1cGxvYWQnXSA9ICdIb2NoZ2VsYWRlbmUgRGF0ZWkgYmVhcmJlaXRlbic7CiRsYW5nWydlcnJvciddID0gJ0ZlaGxlciEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0VzIGV4aXN0aWVydCBiZXJlaXRzIGVpbmUgS2F0ZWdvcmllLCBkaWUgZGllc2VuIFBmYWQgKCVzKSB2ZXJ3ZW5kZXQnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlJ10gPSAnRXMgZXhpc3RpZXJ0IGJlcmVpdHMgZWluZSBLYXRlZ29yaWUgbWl0IGRpZXNlbSBQZmFkLic7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0czInXSA9ICdGZWhsZXI6IEVpbmUgS2F0ZWdvcmllIG1pdCBkZW0gTmFtZW4gJXMgZXhpc3RpZXJ0IGJlcmVpdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdGZWhsZXI6IERpZSBLYXRlZ29yaWUgZXhpc3RpZXJ0IGJlcmVpdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0ZlaGxlcjogRGllIEthdGVnb3JpZSBrYW5uIG5pY2h0IGdlbCZvdW1sO3NjaHQgd2VyZGVuLCBkYSBzaWUgbmljaHQgbGVlciBpc3QhJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdGZWhsZXI6IEthdGVnb3JpZSB3dXJkZSBuaWNodCBnZWZ1bmRlbiEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0RhdGVuYmFua2ZlaGxlcic7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnRmVobGVyOiBLYXRlZ29yaWUtRmVsZCBpc3QgbGVlciEnOwokbGFuZ1snZXJyb3JfZW1wdHlwYXRoJ10gPSAnRmVobGVyOiBQZmFkIGlzdCBsZWVyISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnRmVobGVyOiBEaWUgRGF0ZWkgJXMgZXhpc3RpZXJ0IGJlcmVpdHMuJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ0ZlaGxlcjogRGllIERhdGVpICVzIHd1cmRlIG5pY2h0IGdlZnVuZGVuLic7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdGZWhsZXI6IERhcyBNb2R1bCB3dXJkZSBtaXQgbmljaHQgYXVzcmVpY2hlbmRlbiBQYXJhbWV0ZXJuIGF1ZmdlcnVmZW4hIDxici8+RGVyIGZlaGxlbmRlIFBhcmFtZXRlciBpc3Q6ICVzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRhdXRob3InXSA9ICdGZWhsZXI6IEF1dG9yIGlzdCB1bmcmdXVtbDtsdGlnIChvZGVyIGxlZXIpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkY2F0ZWdvcnknXSA9ICdGZWhsZXI6IEthdGVnb3JpZSBpc3QgdW5nJnV1bWw7bHRpZyAob2RlciBsZWVyKS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGRlc2NyaXB0aW9uJ10gPSAnRmVobGVyOiBCZXNjaHJlaWJ1bmcgaXN0IHVuZyZ1dW1sO2x0aWcgKG9kZXIgbGVlcikuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRmaWxlJ10gPSAnRmVobGVyOiBEYXRlaW5hbWUgaXN0IHVuZyZ1dW1sO2x0aWcgKG9kZXIgbGVlcikuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRmaWxlbmFtZSddID0gJ0ZlaGxlcjogRGF0ZWllbiBtaXQgZGllc2VyIE5hbWVuc2Vyd2VpdGVydW5nIHNpbmQgbmljaHQgZXJsYXVidCAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdGZWhsZXI6IFVuZyZ1dW1sO2x0aWdlIElEJzsKJGxhbmdbJ2Vycm9yX25vZmlsZXMnXSA9ICdGZWhsZXI6IEtlaW5lIGVudHNwcmVjaGVuZGVuIERhdGVpZW4hJzsKJGxhbmdbJ2ZpbGVzJ10gPSAnRGF0ZWllbic7CiRsYW5nWydmaXhtZSddID0gJ0xlZXJ6ZWljaGVuIGVudGZlcm5lbic7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdEYXRlaWVuIChVcGxvYWRzLU1vZHVsKSc7CiRsYW5nWydpZCddID0gJ0lEJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsIHd1cmRlIGluIFZlcnNpb24gJXMgd3VyZGUgaW5zdGFsbGllcnQuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUC1BZHJlc3NlJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnRWluIE1vZHVsLCB3ZWxjaGVzIGRlbiBCZW51dHplcm4gZGFzIEhvY2hsYWRlbiB1bmQgZGFzIFZlcndhbHRlbiB2b24gRGF0ZWllbiBlcm0mb3VtbDtnbGljaHQuJzsKJGxhbmdbJ25hbWUnXSA9ICdOYW1lJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICcmQXVtbDtuZGVybiBTaWUgaGllciBkZW4gTmFtZW4sIHVtIGRpZSBEYXRlaSB1bXp1YmVuZW5uZW4nOwokbGFuZ1sncGF0aCddID0gJ1BmYWQnOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICcmQXVtbDtuZGVybiBTaWUgaGllciBkaWUgS2F0ZWdvcmllLCB1bSBkaWUgRGF0ZWkgaW4gZWluIGFuZGVyZXMgVmVyemVpY2huaXMgenUgdmVyc2NoaWViZW4uJzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcocmVsYXRpdiB6dW0gL3VwbG9hZHMgVmVyemVpY2huaXMpJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+RGFzIFVwbG9hZHMtTW9kdWwgd3VyZGUgZXJmb2xncmVpY2ggaW5zdGFsbGllcnQuIFN0ZWxsZW4gU2llIHNpY2hlciwgZGFzcyB6dXIgVmVyd2VuZHVuZyBkaWVzZXMgTW9kdWxzIGRpZSBCZXJlY2h0aWd1bmcgJnF1b3Q7TWFuYWdlIFVwbG9hZHMmcXVvdDsgZ2VzZXR6dCB3dXJkZSE8L3A+DQo8cD48c3Ryb25nPkFjaHR1bmc8L3N0cm9uZz4gLSBEaWUgRnVua3Rpb25zZiZhdW1sO2hpZ2tlaXQgZGllc2VzIE1vZHVscyBpc3Qgdm9uIHZlcnNjaGllZGVuZW4gV2VydGVuIElocmVyIFBIUC1Lb25maWd1cmF0aW9uIHdpZSB6dW0gQmVpc3BpZWwgcGhwJiMwMzk7cyBtZW1vcnlfbGltaXQsIHNhZmVfbW9kZSwgZmlsZV91cGxvYWRzLCB1cGxvYWRzX21heF9maWxlc2l6ZSB1bmQgbWF4X2V4ZWN1dGlvbl90aW1lIGFiaCZhdW1sO25naWcuIFVudGVyIFVtc3QmYXVtbDtuZGVuIG0mdXVtbDtzc2VuIGRpZXNlIFdlcnRlIGYmdXVtbDtyIGRpZSBGdW5rdGlvbnNmJmF1bWw7aGlna2VpdCBkaWVzZXMgTW9kdWxzIGFuZ2VwYXNzdCB3ZXJkZW4uIFNpZSBzb2xsdGVuIGRhaGVyIGdlZ2ViZW5lbmZhbGxzIEtvbnRha3QgbWl0IElocmVtIFByb3ZpZGVyIGF1Zm5laG1lbiwgdW0gZGllc2UgRWluc3RlbGx1bmdlbiBlbnRzcHJlY2hlbmQgSWhyZW4gQmVkJnV1bWw7cmZuaXNzZW4gYW56dXBhc3Nlbi48L3A+JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdEYXMgVXBsb2Fkcy1Nb2R1bCB3dXJkZSBlbnRmZXJudC4gRXMgd3VyZGVuIGtlaW5lIERhdGVpZW4gYXVzIGRlbSAvdXBsb2Fkcy1WZXJ6ZWljaG5pcyBlbnRmZXJudCBvZGVyIGJlc2NoJmF1bWw7ZGlndC4nOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdFaW5zdGVsbHVuZ2VuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ0RpZSBNb2R1bGVpbnN0ZWxsdW5nZW4gd3VyZGVuIGFrdHVhbGlzaWVydC4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVzYyddID0gJ0Jlc2NocmVpYnVuZyc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0RpZSBEYXRlaWVuIGluIGRpZXNlbSBWZXJ6ZWljaG5pcyBrJm91bWw7bm5lbiBhbmdlemVpZ3Qgd2VyZGVuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeW5hbWUnXSA9ICdOYW1lIGRlciBLYXRlZ29yaWUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlcnBmYWQnOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ0thdGVnb3JpZXZlcnplaWNobmlzIGwmb3VtbDtzY2hlbj8nOwokbGFuZ1sncHJvbXB0X21heF91cGxvYWRzaXplJ10gPSAnTWF4aW1hbCBlcmxhdWJ0ZSBEYXRlaWdyJm91bWw7JnN6bGlnO2UgKEtCKSc7CiRsYW5nWydwcm9tcHRfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0cmdXVtbDtsdGlnZSBEYXRlaWVuZHVuZ2VuJzsKJGxhbmdbJ3NjYW4nXSA9ICdQciZ1dW1sO2Zlbic7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ0thdGVnb3JpZSBhdXN3JmF1bWw7aGxlbic7CiRsYW5nWydzaXplJ10gPSAnR3Imb3VtbDsmc3psaWc7ZSc7CiRsYW5nWydzaXpla2InXSA9ICdHciZvdW1sOyZzemxpZztlIChLQiknOwokbGFuZ1snc3VibWl0J10gPSAnQWJzZW5kZW4nOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJ1p1c2FtbWVuZmFzc3VuZ3N2b3JsYWdlbic7CiRsYW5nWydzdW1tYXJ5J10gPSAnWnVzYW1tZW5mYXNzdW5nJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnVXBsb2Fkcy1Nb2R1bCc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bC1BZG1pbmlzdHJhdGlvbic7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGVpbnN0ZWxsdW5nZW4nOwokbGFuZ1sndGl0bGVfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdTdWJuZXRzIHZvbiBkZXIgU3RhdGlzdGlrIGF1c3NjaGxpZSZzemxpZztlbic7CiRsYW5nWyd0aXRsZV92YWxpZF91cGxvYWRleHRlbnNpb25zJ10gPSAnRyZ1dW1sO2x0aWdlIE5hbWVuc2Vyd2VpdGVydW5nZW4nOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCB3dXJkZSBkZWluc3RhbGxpZXJ0Lic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIHd1cmRlIGF1ZiBWZXJzaW9uICVzIGFrdHVhbGlzaWVydC4nOwokbGFuZ1sndXBsb2FkJ10gPSAnSG9jaGxhZGVuJzsKJGxhbmdbJ3VwbG9hZGVkJ10gPSAnRGllIERhdGVpICVzIHd1cmRlIHZvbiAlcyBob2NoZ2VsYWRlbi4nOwokbGFuZ1sncmVwbGFjZWQnXSA9ICdEaWUgRGF0ZWkgJXMgd3VyZGUgZHVyY2ggJXMgZXJzZXR6dC4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0RpZSBEYXRlaSAlcyB3dXJkZSBnZWwmb3VtbDtzY2h0Lic7CiRsYW5nWyd1cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnVXBsb2FkLVZvcmxhZ2VuJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnQmVudXR6ZXJuYW1lJzsKJGxhbmdbJ3dhcm5pbmdfZGVsZXRlY2F0ZWdvcnknXSA9ICdXQVJOVU5HOiBTZWllbiBTaWUgdm9yc2ljaHRpZywgd2VubiBTaWUgS2F0ZWdvcmllbiBsJm91bWw7c2NoZW4uIERpZSBEYXRlaWVuIGsmb3VtbDtubmVuIGRhYmVpIHZlcmxvcmVuIGdlaGVuLic7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE4MjA0MzI0NzkuMTM5MjI3ODgyMi4xMzkyMjc4ODIyLjEzOTI3MjYzMDguMic7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEzOTIyNzg4MjIuMS4xLnV0bWNzcj0oZGlyZWN0KXx1dG1jY249KGRpcmVjdCl8dXRtY21kPShub25lKSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/et_EE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdBdXRob3JpemVkIHVzZXJzIHdpbGwgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGVzZSBmaWxlcy4gIFRoaXMgbWVhbnMgdGhhdCBhIHVybCB3aWxsIGJlIHByb3ZpZGVkIGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZXMgdG8gYWxsb3cgZGVsZXRpbmcgb2YgdGhlIGZpbGUuICBBIHdlYnNpdGUgZGV2ZWxvcGVyIGNhbiB1c2UgYXBwcm9wcmlhdGUgc21hcnR5IGxvZ2ljIHRvIHNob3cgYSBsaW5rIHRvIGF1dGhvcml6ZWQgdXNlcnMuJzsKJGxhbmdbJ2NvcHlfZmlsZXMnXSA9ICdDb3B5IEZpbGVzJzsKJGxhbmdbJ2Vycm9yX2ZpbGV0b29sYXJnZSddID0gJ1RoZSBmaWxlIHlvdSBhdHRlbXB0ZWQgdG8gdXBsb2FkZSBpcyBsYXJnZXIgdGhhbiB0aGUgQ01TTVMgbWF4aW11bSB1cGxvYWQgZmlsZSBzaXplJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlY2F0ZWdvcnknXSA9ICdBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gZGVsZXRlIHRoaXMgY2F0ZWdvcnk/JzsKJGxhbmdbJ2Vycm9yX2RlbGV0ZSddID0gJ0FuIGl0ZW0gY291bmQgbm90IGJlIGRlbGV0ZWQgKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBwZXJmb3JtIHRoaXMgYWN0aW9uIG9uIHRoZSBzZWxlY3RlZCBjYXRlZ29yaWVzPyc7CiRsYW5nWydlcnJvcl9ub3RoaW5nX3NlbGVjdGVkJ10gPSAnRXJyb3I6IE5vdGhpbmcgc2VsZWN0ZWQnOwokbGFuZ1snd2l0aF9zZWxlY3RlZCddID0gJ1dpdGggU2VsZWN0ZWQ6JzsKJGxhbmdbJ2Vycm9yX3JlcGxhY2VfbWlzbWF0Y2hlZF9maWxlZXh0J10gPSAnV2hlbiByZXBsYWNpbmcgYSBmaWxlLCB5b3UgbXVzdCB1cGxvYWQgYSBmaWxlIG9mIHRoZSBzYW1lIGV4YWN0IHR5cGUgKGJ5IGZpbGUgZXh0ZW5zaW9uKS4gIFRoZSBmaWxlIHlvdSBzZWxlY3RlZCBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBvcmlnaW5hbCBmaWxlLic7CiRsYW5nWydyZXBsYWNlJ10gPSAnUmVwbGFjZSc7CiRsYW5nWydpbmZvX3JlcGxhY2VmaWxlJ10gPSAnWW91IG1heSB1cGxvYWQgYSByZXBsYWNlbWVudCBmaWxlLCBpZiB0aGUgZmlsZSBpcyBhbiBpbWFnZSB0eXBlLCBhbmQgeW91IGhhdmUgbm90IHNwZWNpZmllZCBhIHJlcGxhY2VtZW50IHRodW1ibmFpbCwgYSBuZXcgdGh1bWJuYWlsIHdpbGwgYmUgZ2VuZXJhdGVkJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlZmlsZSddID0gJ1VwbG9hZCByZXBsYWNlbWVudCBmaWxlJzsKJGxhbmdbJ3RpdGxlX2ZpeHNwYWNlcyddID0gJ0ZpeCBzcGFjZXMgaW4gdGhlIGZpbGVuYW1lJzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0NhdGVnb3J5IHN1Y2Nlc3NmdWxseSBjb3BpZWQnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlcGF0aCddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc291cmNlLCBhbmQgaXMgbm90IGFscmVhZHkgaW4gdXNlJzsKJGxhbmdbJ29wZXJhdGlvbl9jYW5jZWxsZWQnXSA9ICdPcGVyYXRpb24gQ2FuY2VsbGVkJzsKJGxhbmdbJ3NvdXJjZSddID0gJ1NvdXJjZSc7CiRsYW5nWydkZXN0aW5hdGlvbiddID0gJ0Rlc3RpbmF0aW9uJzsKJGxhbmdbJ3Byb21wdF9jb3B5X2ZpbGVzJ10gPSAnQ29weSBjYXRlZ29yeSBGaWxlcyc7CiRsYW5nWydpbmZvX2NvcHlfZmlsZXMnXSA9ICdDb3B5IHRoZSBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgY2F0ZWdvcnkgdG8gdGhlIGRlc3RpbmF0aW9uIGNhdGVnb3J5JzsKJGxhbmdbJ2V4dHJhJ10gPSAnRXh0cmEnOwokbGFuZ1snY29weSddID0gJ0NvcHknOwokbGFuZ1snc2VsZWN0b25lJ10gPSAnU2VsZWN0IE9uZSc7CiRsYW5nWydhdXRvd2F0ZXJtYXJrJ10gPSAnQXV0b21hdGljYWxsIHBsYWNlIHdhdGVybWFya3Mgb24gaW1hZ2VzJzsKJGxhbmdbJ2ltYWdlX3NldHRpbmdzJ10gPSAnSW1hZ2UgU2V0dGluZ3MnOwokbGFuZ1sncHJvbXB0X2dldGZpbGVfcmVzdWx0cGFnZSddID0gJ1BhZ2UgdG8gdXNlIGZvciBlcnJvcnMgb3Igb3RoZXIgbWVzc2FnZXMgcmVsYXRlZCB0byBmaWxlIGRvd25sb2FkaW5nJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfa2V5J10gPSAnVGhlIHVwbG9hZCBrZXkgc3BlY2lmaWVkIGlzIGludmFsaWQgKG1heWJlIGl0IGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIGRvd25sb2FkIGNhcGFjaXR5IG9yIGhhcyBleHBpcmVkKSc7CiRsYW5nWydkZmx0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICd7JHNpdGVuYW1lfSAtIFlvdSBoYXZlIGJlZW4gZ3JhbnRlZCBhY2Nlc3MgdG8geyRlbnRyeS0+dXBsb2FkX25hbWV8c3RyaXBfdGFnc30gZm9yIGEgbGltaXRlZCB0aW1lJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnU3ViamVjdCBmb3IgZW1haWwgY3JlYXRlZCB3aGVuIHNlbmRpbmcgYSB0aW1lIGxpbWl0ZWQgVVJMJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJ10gPSAnQXV0byBkZWxldGUgZXhwaXJlZCBlbnRyaWVzIGFmdGVyIE4gaG91cnMgPGVtPihzcGVjaWZ5IDAgdG8gZGlzYWJsZSBhdXRvZGVsZXRlKTwvZW0+Oic7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfc2VuZGl0J10gPSAnU2VuZCB0aGlzIHVybCB0byB0aGUgZGVzaWduYXRlZCBlbWFpbCBhZGRyZXNzPyc7CiRsYW5nWyd1cmxfa2V5J10gPSAnVVJMIEtleSc7CiRsYW5nWydjcmVhdGVkJ10gPSAnQ3JlYXRlZCc7CiRsYW5nWydleHBpcmVzJ10gPSAnRXhwaXJlcyc7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0FkZC9FZGl0IFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1sndGltZV9saW1pdGVkX2tleV9hZGRlZCddID0gJ1RpbWUgTGltaXRlZCBLZXkgQWRkZWQnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnTnVtYmVyIG9mIEhvdXJzJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdOdW1iZXIgb2YgRG93bmxvYWRzJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFbWFpbCBBZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ0EgcmVxdWlyZWQgdmFsdWUgaXMgbWlzc2luZyBvciBpbnZhbGlkOiAlcyc7CiRsYW5nWydhZGRfdGltZWxpbWl0ZWRfa2V5J10gPSAnQWRkIFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1snZmlsZV9pbmZvMiddID0gJ0ZpbGUgJXMgKGlkPSVkKSc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ1NwZWNpZnkgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYSBmaWxlIGlkZW50aWZpZWQgYnkgYSBwYXJ0aWN1bGFyIGtleSBjYW4gYmUgZG93bmxvYWRlZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfZG93bmxvYWRzJ10gPSAnRGVmYXVsdCBOdW1iZXIgb2YgRG93bmxvYWRzJzsKJGxhbmdbJ2luZm9fdGltZWxpbWl0ZWRfaG91cnMnXSA9ICdTcGVjaWZ5IHRoZSBkZWZhdWx0IG51bWJlciBvZiBob3VycyB0aGF0IGEgdGltZSBsaW1pdGVkIGtleSBpcyB2YWxpZCBmb3IuICBTcGVjaWZ5IDAgZm9yIHVubGltaXRlZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfaG91cnMnXSA9ICdOdW1iZXIgb2YgaG91cnMgYSBUaW1lIExpbWl0ZWQgS2V5IGlzIHZhbGlkIGZvcic7CiRsYW5nWyd0aW1lbGltaXRlZF91cmxfc2V0dGluZ3MnXSA9ICdUaW1lIExpbWl0ZWQgS2V5IFNldHRpbmdzJzsKJGxhbmdbJ21hbmFnZV90aW1lbGltaXRlZCddID0gJ01hbmFnZSBUaW1lIExpbWl0ZWQgQWNjZXNzJzsKJGxhbmdbJ3VwbG9hZGluZ19zZXR0aW5ncyddID0gJ0ZpbGUgVXBsb2FkIFNldHRpbmdzJzsKJGxhbmdbJ2dlbmVyYWxfc2V0dGluZ3MnXSA9ICdHZW5lcmFsIFNldHRpbmdzJzsKJGxhbmdbJ3RodW1ibmFpbF9zZXR0aW5ncyddID0gJ1RodW1ibmFpbCBHZW5lcmF0aW9uJzsKJGxhbmdbJ3RpdGxlX3JlZGlyZWN0X29uX3NlbmRmaWxlJ10gPSAnUGFnZSB0byByZWRpcmVjdCB0byBhZnRlciBzZW5kaW5nIGEgZmlsZSc7CiRsYW5nWydsYmxfYmFjayddID0gJ1RhZ2FzaSc7CiRsYW5nWydsYmxfdGVtcGxhdGVzJ10gPSAnTW9kaWZ5IFRlbXBsYXRlcyc7CiRsYW5nWydwcm9tcHRfcHVibGljX2ZpZWxkJ10gPSAnRmllbGQgaXMgcHVibGljIDxlbT4oY2FuIGJlIHZpZXdlZCBieSBzaXRlIHZpc2l0b3JzKTwvZW0+JzsKJGxhbmdbJ3VwbG9hZF9lZGl0ZWQnXSA9ICdGaWxlIERldGFpbHMgRWRpdGVkIG9uICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnVmFsaWt1bGluZSBwaXNpcGlsZGkgZmFpbCc7CiRsYW5nWyd1cGxvYWRfZmlsZSddID0gJ0xhZSB1dXMgZmFpbCAmdXVtbDtsZXMnOwokbGFuZ1snbXNnX2ZpZWxkX2RlbGV0ZWQnXSA9ICdWJmF1bWw7bGkga3VzdHV0YXR1ZCc7CiRsYW5nWydhc2tfZGVsZXRlX2ZpZWxkJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGZpZWxkIGRlZmluaXRpb24gYW5kIGFsbCBhc3NvY2lhdGVkIHZhbHVlcz8nOwokbGFuZ1sneWVzJ10gPSAnSmFoJzsKJGxhbmdbJ25vJ10gPSAnRWknOwokbGFuZ1sndHlwZSddID0gJ1QmdXVtbDsmdXVtbDtwJzsKJGxhbmdbJ2ZpZWxkdHlwZV9tdWx0aXNlbGVjdCddID0gJ011bHRpc2VsZWN0IExpc3QnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnRHJvcGRvd24gTGlzdCc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGFyZWEnXSA9ICdUZXh0IEFyZWEnOwokbGFuZ1snZmllbGR0eXBlX3RleHRpbnB1dCddID0gJ1RleHQgSW5wdXQnOwokbGFuZ1sncHJvbXB0X3VzZV93eXNpd3lnJ10gPSAnVXNlIHRoZSB3eXNpd3lnIHdoZW4gZWRpdGluZyB0aGUgdmFsdWUgZm9yIHRoaXMgZmllbGQnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHRfY29udGVudCddID0gJ0RlZmF1bHQgY29udGVudCBmb3IgdGV4dCBhcmVhJzsKJGxhbmdbJ3Byb21wdF9kcm9wZG93bl9vcHRpb25zJ10gPSAnT3B0aW9ucyAob25lIGVudHJ5IHBlciBsaW5lKSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbWF4bGVuZ3RoJ10gPSAnViZhdW1sO2xqYSBtYWtzaW1hYWxuZSBwaWtrdXMnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ1YmYXVtbDtsamEgcGlra3VzJzsKJGxhbmdbJ3Byb21wdF9maWVsZF90eXBlJ10gPSAnViZhdW1sO2xqYSB0JnV1bWw7JnV1bWw7cCc7CiRsYW5nWydwcm9tcHRfZmllbGRfbmFtZSddID0gJ1YmYXVtbDtsamEgbmltaSc7CiRsYW5nWyd0aXRsZV9hZGRfZmllbGQnXSA9ICdMaXNhIHYmb3RpbGRlO2kgbXV1ZGEgdiZhdW1sO2xqYSBkZWZpbml0c2lvb25pJzsKJGxhbmdbJ2ZpZWxkX2RlZmluaXRpb25zJ10gPSAnViZhdW1sO2xqYSBkZWZpbml0c2lvb24nOwokbGFuZ1sncHJvbXB0X2FkZF9maWVsZCddID0gJ0xpc2EgdiZhdW1sO2xqYSBkZWZpbml0c2lvb24nOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnU3BlY2lmaWVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG1vZHVsZSB0YWcuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBkZWZhdWx0IC0gKHRoZSBkZWZhZmF1bHQgYmVoYXZpb3IpLCBkZXRhaWwgLSB0byBkaXNwbGF5IGEgZGV0YWlsIHZpZXcgb2YgYSBzaW5nbGUgZmlsZSBiYXNlZCBvbiB0aGUgdXBsb2FkX2lkLCBhbmQgeW91c2VuZGl0IC0gdG8gZGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgdXBsb2FkaW5nIGEgZmlsZSwgYW5kIHNlbmRpbmcgaXQgdG8gbnVtZXJvdXMgYWRkcmVzc2VzIGluIG9uZSBzdGVwJzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ1NwZWNpZnkgdGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBzZW5kIGEgZmlsZSBmb3JtJzsKJGxhbmdbJ2ZpbGVfdXBsb2FkZWQnXSA9ICdGYWlsIGVkdWthbHQgJnV1bWw7bGVzIGxhZXR1ZCc7CiRsYW5nWyd0byddID0gJ1RvJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdBZGQgb3IgRWRpdCBhICZxdW90O1lvdSBTZW5kIEl0JnF1b3Q7IEZvcm0gVGVtcGxhdGUnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ1lvdVNlbmRJdCBGb3JtIFRlbXBsYXRlcyc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gZGVmYXVsdCAmcXVvdDt5b3Ugc2VuZCBpdCZxdW90OyB0ZW1wbGF0ZSc7CiRsYW5nWydtc2dfZmlsZV9zZW50J10gPSAnQSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlbGVjdGVkIGFkZHJlc3NlcyB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIGFuZCBob3cgdG8gcmV0cmlldmUgaXQuJzsKJGxhbmdbJ2Vycm9yX25vYWRkcmVzc2VzJ10gPSAnWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBkZXN0aW5hdGlvbiBhZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ1lvdSBtdXN0IHN1cHBseSBhIHN1YmplY3QnOwokbGFuZ1snc3ViamVjdCddID0gJ1N1YmplY3QnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUGFnZSBmb3IgJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgZm9ybSc7CiRsYW5nWydmaWxlX2luZm8nXSA9ICdGaWxlIEluZm8nOwokbGFuZ1snc2VuZCddID0gJ1NlbmQnOwokbGFuZ1snbm90ZXMnXSA9ICdOb3Rlcyc7CiRsYW5nWydhZGRyZXNzZWVzJ10gPSAnU2VuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUgdG8nOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgRW1haWwgVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWRkIG9yIEVkaXQgYSAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJyZxdW90O1NlbmQgYSBGaWxlJnF1b3Q7IEZvcm0gVGVtcGxhdGVzJzsKJGxhbmdbJ3Byb21wdF9ub3RpZnlfZW1haWxfdGVtcGxhdGUnXSA9ICdGaWxlIHVwbG9hZCBub3RpZmljYXRpb24gZW1haWwgdGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gZGVmYXVsdCAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBmb3JtIHRlbXBsYXRlJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlbGV0YWJsZSddID0gJ0ZpbGVzIGluIHRoaXMgY2F0ZWdvcnkgY2FuIGJlIGRlbGV0ZWQnOwokbGFuZ1sndGl0bGVfYWxsb3dfZGVsZXRlJ10gPSAnQWxsb3cgZGVsZXRpb24gb2YgZmlsZXMgZnJvbSB0aGUgZnJvbnRlbmQnOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdEZWZhdWx0IFRlbXBsYXRlcyc7CiRsYW5nWydmaXJzdHBhZ2UnXSA9ICdFc2ltZW5lIGxlaHQnOwokbGFuZ1sncHJldnBhZ2UnXSA9ICdFZWxtaW5lIGxlaHQnOwokbGFuZ1snbmV4dHBhZ2UnXSA9ICdKJmF1bWw7cmdtaW5lIGxlaHQnOwokbGFuZ1snbGFzdHBhZ2UnXSA9ICdWaWltYW5lIGxlaHQnOwokbGFuZ1snZmlyc3RwYWdlX2Fycm93J10gPSAnPDwnOwokbGFuZ1sncHJldnBhZ2VfYXJyb3cnXSA9ICc8JzsKJGxhbmdbJ25leHRwYWdlX2Fycm93J10gPSAnPic7CiRsYW5nWydsYXN0cGFnZV9hcnJvdyddID0gJz4+JzsKJGxhbmdbJ3BhZ2UnXSA9ICdMZWh0JzsKJGxhbmdbJ29mJ10gPSAnb2YnOwokbGFuZ1sncHJvbXB0X2dyb3VwbGlzdCddID0gJ0F1dGhvcml6ZWQgRkVVIEdyb3Vwcyc7CiRsYW5nWydpbmZvX2dyb3VwbGlzdCddID0gJ1NlbGVjdCB0aGUgRkVVIGdyb3VwcyB0aGF0IGFyZSBhbGxvd2VkIGFjY2VzcyB0byBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5LiAgRGVzZWxlY3QgYWxsIGVudHJpZXMgdG8gYWxsb3cgYWxsIGFjY2Vzcyc7CiRsYW5nWyd0aXRsZV9zY2FuJ10gPSAnU2NhbiBmb3IgbmV3IGZpbGVzIGluIHRoaXMgY2F0ZWdvcnknOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdDcmVhdGUgbWlzc2luZyB0aHVtYm5haWxzIGZvciBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5Lic7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlscyddID0gJ0xvbyBwaXNpcGlsZGlkJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWwnXSA9ICcocmUpQ3JlYXRlIHRoZSB0aHVtYm5haWwgZm9yIHRoaXMgZmlsZSc7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlsJ10gPSAnTG9vIHBpc2lwaWx0JzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ0NvdWxkIG5vdCBvcGVuIGRpcmVjdG9yeSAocGVybWlzc2lvbnMgcHJvYmxlbT8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1NpemUgb2YgZWFjaCBkb3dubG9hZCBjaHVuayc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0FkanVzdGluZyB0aGlzIHBhcmFtZXRlciB3aWxsIGVmZmVjdCBkb3dubG9hZCBzcGVlZCwgYW5kIG1heSBoZWxwIGluIGxvd2VyIG1lbW9yeSBlbnZpcm9ubWVudHMnOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdQSFAmIzAzOTtzIHNhZmUgbW9kZSBpcyBlbmFibGVkLiAgVGhpcyBtYXkgY2F1c2UgcHJvYmxlbXMgd2l0aCB1cGxvYWRpbmcgZmlsZXMgKHBlcm1pc3Npb25zKSwgYW5kIG1heSBhbHNvIGludGVyZmVyZSB3aXRoIHRoaXMgbW9kdWxlJiMwMzk7cyBhYmlsaXR5IHRvIHNlbmQgc29tZSBmaWxlcyBkdWUgdG8gYW4gaW5hYmlsaXR5IHRvIG92ZXJyaWRlIHNvbWUgaW5pIHNldHRpbmdzLiAgWW91IGFyZSBhZHZpc2VkIHRvIGNvbnRhY3QgeW91ciBwcm92aWRlciB0byBzZWUgYWJvdXQgZGlzYWJsaW5nIHNhZmUgbW9kZS4nOwokbGFuZ1sncGFyYW1fZGV0YWlscGFnZSddID0gJ1VzZWZ1bCBmb3IgZGlzcGxheWluZyBhIGRldGFpbCByZXBvcnQgdXNpbmcgYSBkaWZmZXJlbnQgcGFnZSB0ZW1wbGF0ZSwgdGhpcyBwYXJhbWV0ZXIgdGFrZXMgdGhlIHBhZ2UgaWQgb3IgcGFnZSBhbGlhcyBvZiBhIHBhZ2UgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBkaXNwbGF5IHRoZSBkZXRhaWwgcmVwb3J0JzsKJGxhbmdbJ3BhcmFtX3ByZWZpeCddID0gJ0EgYm9vbGVhbiB0aGF0IGluZGljYXRlcyB3ZXRoZXIgZmlsZSBuYW1lcyBzaG91bGQgYmUgcHJlZml4ZWQnOwokbGFuZ1sncGFyYW1fcHJlZml4X2ZldSddID0gJ0EgYm9vbGVhbiBwYXJhbWV0ZXIgdGhhdCBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJlZml4IHNob3VsZCBiZSB0YWtlbiBmcm9tIHRoZSBjdXJyZW50IGF1dGhvciwgaWYgbm90IHNwZWNpZmllZCwgdGhlIHByZWZpeCBpcyB0aGUgY3VycmVudCB0aW1lIChpbiBkZWNoZXggZm9ybWF0KSc7CiRsYW5nWydwYXJhbV9ub2NhcHRjaGEnXSA9ICdEaXNhYmxlIGNhcHRjaGEgc3VwcG9ydCAob24gYnkgZGVmYXVsdCkgaW4gdGhlIHVwbG9hZCBmb3JtJzsKJGxhbmdbJ3RpdGxlX3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdFZGl0IFVwbG9hZCBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ2NhcHRjaGFfdGl0bGUnXSA9ICdFbnRlciB0aGUgdGV4dCBkaXNwbGF5ZWQgaW4gdGhpcyBpbWFnZSc7CiRsYW5nWydlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnXSA9ICdUZXh0IGVudGVyZWQgZGlkIG5vdCBtYXRjaCB0aGUgaW1hZ2UgZGlzcGxheWVkJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddID0gJ0NyZWF0ZSB0aHVtYm5haWxzIGZvciBmaWxlcyB3aXRoIHRoZXNlIGV4dGVuc2lvbnMnOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9zaXplJ10gPSAnTWF4aW11bSBzaXplIChwaXhlbHMpIG9mIHRoZSBnZW5lcmF0ZWQgdGh1bWJuYWlsJzsKJGxhbmdbJ3Byb21wdF91cGxvYWRfaWNvbiddID0gJ1VwbG9hZCBBbiBJY29uJzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdCddID0gJ1RoaXMgdGV4dCBpcyB1c2VkIHdoZW4gY3JlYXRpbmcgYSBuZXcgdGVtcGxhdGUgb2YgdGhpcyB0eXBlJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF9zeXNkZWZhdWx0J10gPSAnU3lzdGVtIERlZmF1bHQgRGV0YWlsIFJlcG9ydCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gRGVmYXVsdCBTdW1tYXJ5IFJlcG9ydCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gRGVmYXVsdCBVcGxvYWQgRm9ybSBUZW1wbGF0ZSc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlJzsKJGxhbmdbJ3Jlc2V0dG9kZWZhdWx0J10gPSAnUmVzZXQgdG8gRGVmYXVsdHMnOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF90ZW1wbGF0ZSddID0gJ1N1bW1hcnkgUmVwb3J0IFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZSddID0gJ0RldGFpbCBSZXBvcnQgVGVtcGxhdGUnOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdOaW1pJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnVmFpa2ltaXNpJzsKJGxhbmdbJ2xlZ2VuZF91cGxvYWRmb3JtJ10gPSAnTGFlIGZhaWwgJnV1bWw7bGVzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ04mb3RpbGRlO3V0dWQgcGFyYW1lZXRlciBwdXVkdWInOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdBIG5hbWUgZm9yIHRoZSBmaWxlIHR5cGUgbXVzdCBiZSBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2V4dGVuc2lvbnMnXSA9ICdBdCBsZWFzdCBvbmUgZmlsZSBleHRlbnNpb24gbXVzdCBiZSBzcGVjaWZpZWQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdBbiBpY29uIG11c3QgYmUgc3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ1RoZSBzcGVjaWZpZWQgcm93IGNvdWxkIG5vdCBiZSBmb3VuZCc7CiRsYW5nWyduYW1lX3Vua25vd24nXSA9ICdVbmtub3duJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdGaWxlIHR5cGUgZGVzY3JpcHRpb24gZm9yIHVubWF0Y2hlZCBmaWxlcyc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlJzsKJGxhbmdbJ2ljb24nXSA9ICdJY29uJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdGaWxlIEV4dGVuc2lvbnMnOwokbGFuZ1snYWRkZmlsZXR5cGUnXSA9ICdBZGQgTmV3IEZpbGUgVHlwZSc7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnRmlsZSBUeXBlcyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdObyBDYXRlZ29yeSBpZCB3YXMgc3VwcGxpZWQnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeSddID0gJ05vIENhdGVnb3J5IGlkIHdhcyBzdXBwbGllZCc7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZW5hbWVleGlzdHMnXSA9ICdBIHRlbXBsYXRlIGJ5IHRoYXQgbmFtZSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnVGVtcGxhdGUgTmFtZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdDcmVhdGUgYSBuZXcgdGVtcGxhdGUnOwokbGFuZ1snaGVscF9PbkRvd25sb2FkJ10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSB1c2VyIGZpbmlzaGVzIGRvd25sb2FkaW5nIGEgZmlsZTwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+aWQ8L2VtPiAtIFVwbG9hZCBJRDwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIEZpbGUgbmFtZTwvbGk+DQo8bGk+PGVtPmlwPC9lbT4gLSBUaGUgSVAgQWRkcmVzcyBvZiB0aGUgZG93bmxvYWRlcjwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25EZWxldGVDYXRlZ29yeSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgRGVsZXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gQ2F0ZWdvcnkgbmFtZTwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIENhdGVnb3J5IHBhdGg8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uQ3JlYXRlQ2F0ZWdvcnknXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIENyZWF0ZWQ8L3A+DQo8aDQ+UGFyYW1ldGVyczwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSBjYXRlZ29yeTwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBUaGUgY2F0ZWdvcnkgZGVzY3JpcHRpb248L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBUaGUgY2F0ZWdvcnkgcGF0aDwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIEEgZmxhZyBpbmRpY2F0aW5nIGlmIHRoZSBjYXRlZ29yeSBpcyBsaXN0YWJsZTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25SZW1vdmUnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVtb3ZlZCB2aWEgdGhlIGFkbWluIG9yIGZyb250ZW5kIGludGVyZmFjZXM8L3A+DQo8aDQ+UGFyYW1ldGVyczwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSByZW1vdmVkIGZpbGU8L2xpPg0KPGxpPjxlbT5pZDwvZW0+IC0gVGhlIGlkIG9mIHRoZSByZW1vdmVkIGZpbGU8L2xpPg0KPGxpPjxlbT5jYXRlZ29yeV9pZDwvZW0+IC0gVGhlIGlkIG9mIHRoZSBjYXRlZ29yeTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25VcGxvYWQnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHVwbG9hZGVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+Y2F0ZWdvcnk8L2VtPiAtIFRoZSBjYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHVwbG9hZGVkIGZpbGU8L2xpPg0KPGxpPjxlbT5zaXplPC9lbT4gLSBUaGUgc2l6ZSBvZiB0aGUgdXBsb2FkZWQgZmlsZTwvbGk+DQo8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIFRoZSBzaG9ydCBkZXNjcmlwdGlvbiBmb3IgdGhlIHVwbG9hZGVkIGZpbGUgKG1heSBiZSBlbXB0eSk8L2VtPjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBUaGUgbG9uZyBkZXNjcmlwdGlvbiBmb3IgdGhlIHVwbG9hZGVkIGZpbGUgKG1heSBiZSBlbXB0eSk8L2VtPjwvbGk+DQo8bGk+PGVtPmF1dGhvcjwvZW0+IC0gVGhlIGF1dGhvciBvZiB0aGUgdXBsb2FkZWQgZmlsZSAoaWYgYXZhaWxhYmxlKTwvZW0+PC9saT4NCjxsaT48ZW0+aXBfYWRkcmVzczwvZW0+IC0gVGhlIGludGVybmV0IGFkZHJlc3Mgb2YgdGhlIGNsaWVudCB0aGF0IHVwbG9hZGVkIHRoZSBmaWxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaW5mb19ldmVudF9vbmRlbGV0ZWNhdGVnb3J5J10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBkZWxldGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25jcmVhdGVjYXRlZ29yeSddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgY3JlYXRlZCc7CiRsYW5nWydpbmZvX2V2ZW50X29uZG93bmxvYWQnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgZG93bmxvYWRlZCc7CiRsYW5nWydpbmZvX2V2ZW50X29udXBsb2FkJ10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBuZXcgZmlsZSBpcyB1cGxvYWRlZCc7CiRsYW5nWydpbmZvX2V2ZW50X29ucmVtb3ZlJ10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBmaWxlIGlzIHJlbW92ZWQnOwokbGFuZ1sndGl0bGVfdXNlcnRhZ19vbnVwbG9hZCddID0gJ1VzZXIgZGVmaW5lZCB0YWcgdG8gY2FsbCBhZnRlciB1cGxvYWQgaXMgY29tcGxldGUnOwokbGFuZ1snbm9uZSddID0gJ05vbmUnOwokbGFuZ1snbWF0Y2hlc2ZvdW5kJ10gPSAnTWF0Y2hlcyBmb3VuZCc7CiRsYW5nWydmaWx0ZXInXSA9ICdGaWx0ZXInOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ1JlZGlyZWN0IHRvIHBhZ2UgaWQvYWxpYXMgb24gdXNlciB1cGxvYWQnOwokbGFuZ1snZGV0YWlscyddID0gJ0RldGFpbHMnOwokbGFuZ1snY29uZmlybV9wcmVmZXJlbmNlcyddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBhZGp1c3QgdGhlIHByZWZlcmVuY2VzPyc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnXSA9ICdObyBmaWxlcyB3ZXJlIHVwbG9hZGVkLic7CiRsYW5nWydwcm9tcHRfcmVwbGFjZSddID0gJ0FsbG93IE92ZXJ3cml0ZSc7CiRsYW5nWydpbmZvX3JlcGxhY2UnXSA9ICdSZXBsYWNlIGFueSBmaWxlIHdpdGggdGhlIHNhbWUgbmFtZSAoZG9lcyBub3QgY2hhbmdlIGlkKSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnRG8gbm90IGRpc3BsYXkgYW55IGluaXRpYWwgcmVzdWx0cyB3aGVuIHRoZSBmaWx0ZXIgaXMgb24nOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGtleSB0byB0aGUgbW9kdWxlIGZvciBmdXJ0aGVyIG9yZ2FuaXppbmcgdXBsb2Fkcy4gIFRoaXMga2V5IGNvdWxkIGJlIGFuIGVuY29kZWQgc3RyaW5nIGxpa2U6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7LCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnSGlkZSB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIHVwbG9hZCBmb3JtLiAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIG1vZGU9JiMwMzk7dXBsb2FkJiMwMzk7LiAgSWYgVGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIGlzIHByZXNlbnQsIGFuZCBhIHVzZXIgaXMgY3VycmVudGx5IGxvZ2dlZCBpbiwgYSBoaWRkZW4gZmllbGQgd2lsbCBob2xkIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJuYW1lJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0mcXVvdDtpZCZxdW90OyAtIHNwZWNpZnkgYSBzaW5nbGUgZmlsZSBmb3IgdGhlIHVybC9saW5rLGRldGFpbGVkIG9yIHNpbmdsZSBtb2RlcyAoYWJvdmUpJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHRlbXBsYXRlJ10gPSAnVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoZSBkZXRhaWwgcmVwb3J0Lic7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ1VzZSBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGZvciB0aGlzIHJlcG9ydCBvciBmb3JtLiAgVGhlIG1vZGUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIG9mIHRlbXBsYXRlIGlzIHJlcXVpcmVyZCwgYW5kIHRoZW4gYSBuYW1lIG1hdGNoIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhhdCB0eXBlLic7CiRsYW5nWydwYXJhbV9maWx0ZXInXSA9ICdEaXNwbGF5IHRoZSBmaWx0ZXJpbmcgZm9ybS4gIElmIHRoaXMgcGFyYW1ldGVyIGlzIHNldCB0byBhbnkgdmFsdWUnOwokbGFuZ1sncGFyYW1fbm9faW50aXRpYWwnXSA9ICdPbmx5IHVzZWZ1bCB3aGVuIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBvciBvbiBieSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2V0aGVyIGluaXRpYWwgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQnOwokbGFuZ1sncGFyYW1fZmlsZXR5cGVzJ10gPSAnRGlzcGxheSBvbmx5IGZpbGVzIHdob3NlIHR5cGUgbWF0Y2hlcyB0aGlzIGNvbW1hIHNlcGFyYXRlZCBsaXN0JzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJyAgPHA+U29ydCBPcmRlcnMNCiAgPHVsPg0KICA8bGk+PGVtPmRhdGVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkYXRlPC9saT4NCiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkYXRlPC9saT4NCiAgPGxpPjxlbT5uYW1lX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgbmFtZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgbmFtZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIHNpemU8L2xpPg0KICA8bGk+PGVtPnNpemVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIHNpemU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGF1dGhvcjwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBhdXRob3I8L2xpPg0KICA8bGk+PGVtPmlwX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgaXAgYWRkcmVzczwvbGk+DQogIDxsaT48ZW0+aXBfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGlwIGFkZHJlc3M8L2xpPg0KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+DQogIDxsaT48ZW0+ZGVzY19kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgZGVzY3JpcHRpb248L2xpPg0KICA8bGk+PGVtPnJhbmRvbTwvZW0+IC0gUmFuZG9tIHNvcnQgb3JkZXI8L2xpPg0KICA8L3VsPg0KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIHRvIHVzZSBmb3IgY2F0ZWdvcnkgbGlzdGluZ3MgYWZ0ZXIgY2xpY2t0aHJvdWdoIGZyb20gQ2F0ZWdvcnkgU3VtbWFyeSBwYWdlJzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmdzb3J0b3JkZXInXSA9ICdTb3J0IG9yZGVyIChhbGEgcGFyYW1fc29ydG9yZGVyKSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzIGFmdGVyIGNsaWNrdGhyb3VnaCBmcm9tIENhdGVnb3J5IFN1bW1hcnkgcGFnZSc7CiRsYW5nWydwYXJhbV9maWxlZXh0ZW5zaW9ucyddID0gJyANCmZpbGVfZXh0ZW5zaW9ucz0mcXVvdDtleHQxLGV4dDIsZXh0MyZxdW90Ow0KPHA+dmFsaWQgb25seSB3aGVuIG1vZGU9dXBsb2FkLCB0aGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIHR5cGVzIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLiAgSXQgb3ZlcnJpZGVzIGFueSBzZXR0aW5ncyBpbiB0aGUgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0mcXVvdDtOJnF1b3Q7DQo8cD5BIHBhcmFtZXRlciB0byBsaXN0IG9ubHkgdGhlIGZpcnN0IE4gcmVzdWx0cyBvZiB0aGUgcXVlcnkuICBQYWdpbmF0aW9uIHdvdWxkIGJlIGJldHRlciwgYnV0IHRoaXMgd2lsbCBkbyB0aGUgdHJpY2sgZm9yIG5vdzwvcD4nOwokbGFuZ1sncGFyYW1fY2F0ZWdvcnknXSA9ICdjYXRlZ29yeT0mcXVvdDtuYW1lJnF1b3Q7DQo8cD48Yj5Ob3RlOjwvYj4gQ2F0ZWdvcnkgY2FuIGJlICZxdW90O2FsbCZxdW90Oywgd2hpY2ggd2lsbCBsaXN0IGFsbCBvZiB0aGUgdXBsb2FkcyBmcm9tIGFsbCA8ZW0+bGlzdGFibGU8L2VtPiBjYXRlZ29yaWVzPC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIERpc3BsYXkgYSBkZXRhaWxlZCByZXBvcnQgZm9yIGEgc2luZ2xlIHVwbG9hZC48L2xpPg0KICA8bGk+PGVtPnNpbmdsZTwvZW0+IC0gQWxpYXMgZm9yIHRoZSBkZXRhaWxlZCBtb2RlLjwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBEaXNwbGF5IGEgZm9ybSB0byBhbGxvdyBhIGZyb250ZW5kIHVzZXIgdG8gdXBsb2FkIGEgZmlsZTwvbGk+DQogIDxsaT48ZW0+dXJsIDxpPm9yPC9pPiBsaW5rPC9lbT4gLSBEaXNwbGF5IGEgbGluayB0byBhIGZpbGU8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIERpc3BsYXkgYSBzdW1tYXJpemVkIGxpc3Qgb2YgYWxsIGZpbGVzIGluIHRoZSBzcGVjaWZpZWQgY2F0ZWdvcnk8L2xpPg0KICA8L3VsPic7CiRsYW5nWydwYXJhbV9zZWxlY3Rmb3JtJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBmb3JtaWQgb2YgdGhlIHBhcmVudCBmb3JtLiAgVXNlZCB0byBoYW5kbGUgcGFyYW1ldGVyIHBhc3NpbmcnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ3doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdHZhbHVlJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBmaWVsZCB2YWx1ZSc7CiRsYW5nWydwYXJhbV9zZWxlY3Rub25lJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3ZXRoZXIgJiMwMzk7bm9uZSYjMDM5OyBpcyBhIHZhbGlkIGNob2ljZS4nOwokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdSZXR1cm4gdG8gbW9kdWxlIHBhbmVsJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ1RoZXJlIGFyZSBubyBkZWZpbmVkIGNhdGVnb3JpZXMnOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdSZXF1aXJlIGV4dGVuc2lvbnMgb24gYWxsIHVwbG9hZGVkIGZpbGVzJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdUaGlzIG9wZXJhdGlvbiB3aWxsIHJlc3RvcmUgdGhlIHRlbXBsYXRlIHRvIHN5c3RlbSBkZWZhdWx0cy4gIEFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgd2lsbCBiZSBsb3N0LiAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ1Bpc2lwaWx0JzsKJGxhbmdbJ25ld3RodW1ibmFpbCddID0gJ0xhZSAmdXVtbDtsZXMgdXVzIHBpc2lwaWx0JzsKJGxhbmdbJ2luZm9fc3VtbWFyeSddID0gJ0EgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGUgKGlmIGVtcHR5LCB0aGUgZmlsZSBuYW1lIGlzIHVzZWQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ0EgYnJpZWYgbmFtZSBmb3IgeW91ciBjYXRlZ29yeSAoaHVtYW4gcmVhZGFibGUpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZXNjJ10gPSAnQSBkZXNjcmlwdGlvbiBmb3IgeW91ciBjYXRlZ29yeSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ1RoZSBkaXJlY3RvcnkgbmFtZSBpbnNpZGUgdGhlIHVwbG9hZHMgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuICBJZiB0aGUgZGlyZWN0b3J5IG9mIHRoaXMgbmFtZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBpdCBtYXkgYmUgY3JlYXRlZCc7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnS2FzdXRhIHNlZGEgdiZhdW1sO2xqYSBtdXV0bWFrcyBmYWlsaSBuaW1lICZ1dW1sO2xlc2xhYWRpbWlzZWwuIEomYXVtbDt0YSB0JnV1bWw7aGpha3MsIGV0IGomYXVtbDt0dGEgZmFsaW5pbWkgc2VsbGlzZWtzLCBuYWd1IHNlZSBvbi4nOwokbGFuZ1snZXJyb3JfY2FudGNyZWF0ZWRpcmVjdG9yeSddID0gJ0NvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5JzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnVGhlIENNU01haWxlciBtb2R1bGUgY291bGQgbm90IGJlIGluc3RhbnRpYXRlZCc7CiRsYW5nWyd1cGxvYWRfbm90aWZpY2F0aW9uJ10gPSAnQSBuZXcgZmlsZSBoYXMgYmVlbiB1cGxvYWRlZCc7CiRsYW5nWyd0aXRsZV9lbWFpbF9vbl91cGxvYWQnXSA9ICdTZW5kIHVwbG9hZCBub3RpZmljYXRpb24gdG8nOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICdFbWFpbCBUZW1wbGF0ZXMnOwokbGFuZ1sndGl0bGVfZHVtbXlfaW5kZXhfaHRtbCddID0gJ0NyZWF0ZSBkdW1teSBpbmRleC5odG1sIGZpbGVzIGluIGVhY2ggZGlyZWN0b3J5Pzxici8+PGVtPkFueSBleGlzdGluZyBpbmRleC5odG1sIGZpbGVzIHdpbGwgcmVtYWluPC9lbT4nOwokbGFuZ1snYWJvdXQnXSA9ICdBYm91dCc7CiRsYW5nWydlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJ10gPSAnQWNjZXNzIERlbmllZC4gUGxlYXNlIGNoZWNrIHlvdXIgcGVybWlzc2lvbnMuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdDb3VsZCBub3Qgd3JpdGUnOwokbGFuZ1snYWRkY2F0ZWdvcnknXSA9ICdBZGQgQ2F0ZWdvcnknOwokbGFuZ1snYWxsJ10gPSAnQWxsJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdBcmUgWW91IFN1cmU/JzsKJGxhbmdbJ2F1dGhvciddID0gJ0F1dG9yJzsKJGxhbmdbJ2NhbmNlbCddID0gJ1QmdXVtbDtoaXN0YSc7CiRsYW5nWydjYW5ub3Rtb2RpZnlwYXRoJ10gPSAnKFRoZSBwYXRoIGNhbm5vdCBiZSBtb2RpZmllZCknOwokbGFuZ1snY2F0ZWdvcmllcyddID0gJ0thdGVnb29yaWFkJzsKJGxhbmdbJ2NhdGVnb3J5J10gPSAnS2F0ZWdvb3JpYSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdLYXRlZ29vcmlhIGVkdWthbHQgbGlzYXR1ZCc7CiRsYW5nWydkYXRlJ10gPSAnS3V1cCZhdW1sO2V2JzsKJGxhbmdbJ2RhdGV1cGxvYWRlZCddID0gJyZVdW1sO2xlc2xhYWRpbWlzZSBrdXVwJmF1bWw7ZXYnOwokbGFuZ1snZGVmYXVsdCddID0gJ1ZhaWtpbWlzaSB2JmF1bWw7JmF1bWw7cnR1c2VkJzsKJGxhbmdbJ2RlbGV0ZSddID0gJ0t1c3R1dGEnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdLaXJqZWxkdXMnOwokbGFuZ1snZGVzdG5hbWUnXSA9ICdMYWUgJnV1bWw7bGVzIG5pbWVnYSc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhaWwgVGVtcGxhdGVzJzsKJGxhbmdbJ2Rvd25sb2FkZWQnXSA9ICdGaWxlICVzIHdhcyBkb3dubG9hZGVkLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1snZWRpdCddID0gJ011dWRhJzsKJGxhbmdbJ2VkaXRjYXRlZ29yeSddID0gJ011dWRhIGthdGVnb29yaWEnOwokbGFuZ1snZWRpdHVwbG9hZCddID0gJ011dWRhICZ1dW1sO2xlc2xhYWRpbWlzdCc7CiRsYW5nWydlcnJvciddID0gJ1ZpZ2EhJzsKJGxhbmdbJ2Vycm9yX3BhdGhpbnVzZTInXSA9ICdLYXRlZ29vcmlhLCBtaXMga2FzdXRhYiB0ZWVkICglcyksIG9uIGp1YmEgb2xlbWFzJzsKJGxhbmdbJ2Vycm9yX3BhdGhpbnVzZSddID0gJ0thdGVnb29yaWEsIG1pcyBrYXN1dGFiIHNlZGEgdGVlZCwgb24ganViYSBvbGVtYXMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMyJ10gPSAnVmlnYTogS2F0ZWdvb3JpYSBuaW1lZ2EgJXMganViYSBla3Npc3RlZXJpYic7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0cyddID0gJ1ZpZ2E6IEthdGVnb29yaWEganViYSBla2lzdGVlcmliJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90ZW1wdHknXSA9ICdWaWdhISBFaSBzYWEga3VzdHV0YWRhIGthdGVnb29yaWF0LCBtaXMgZWkgb2xlIHQmdXVtbDtoaSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGZvdW5kJ10gPSAnVmlnYTogS2F0ZWdvb3JpYXQgZWkgbGVpdHVkISc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnVmlnYTogQW5kbWViYWFzaSB2aWdhISc7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnVmlnYTogVCZ1dW1sO2hpIGthdGVnb29yaWEhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ1ZpZ2E6IFQmdXVtbDtoaSB0ZWUhJzsKJGxhbmdbJ2Vycm9yX2ZpbGVleGlzdHMnXSA9ICdWaWdhISBGYWlsICVzIGp1YmEgZWtzaXN0ZWVyaWIuJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ1ZpZ2EhIEZhaWxpICVzIGVpIGxlaXR1ZC4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnVmlnYTogTW9vZHVsaWxlIGVpIGFudHVkIHBpaXNhdmFsdCBwYXJhbWVldHJlaWQhPGJyLz5QdXVkdXYgcGFyYW1lZXRlciBvbjogJXMnOwokbGFuZ1snZXJyb3JfaW52YWxpZGF1dGhvciddID0gJ1ZpZ2E6IFZhbGUgKHYmb3RpbGRlO2kgdCZ1dW1sO2hpKSBhdXRvci4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnVmlnYTogVmFsZSAodiZvdGlsZGU7aSB0JnV1bWw7aGkpIGthdGVnb29yaWEuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRkZXNjcmlwdGlvbiddID0gJ1ZpZ2E6IFZhbGUgKHYmb3RpbGRlO2kgdCZ1dW1sO2hpKSBraXJqZWxkdXMuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRmaWxlJ10gPSAnVmlnYTogVmFsZSAodiZvdGlsZGU7aSB0JnV1bWw7aGkpIGZhaWxpbmltaS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnVmlnYTogU2VsbGlzZSBuaW1lZ2EgZmFpbGlkICh0Jm90aWxkZTtlbiZhdW1sO29saXNlbHQgbGFpZW5kKSBlaSBvbGUgbHViYXR1ZCAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdWaWdhOiBWYWxlICZ1dW1sO2xlc2xhYWRpbWlzZSBpZCc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzJ10gPSAnVmlnYTogRWkgbGVpdHVkIGZhaWxlISc7CiRsYW5nWydmaWxlcyddID0gJ0ZhaWxpZCc7CiRsYW5nWydmaXhtZSddID0gJ0ZpeCBTcGFjZXMnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRnJvbnQgRW5kIEZpbGUgTWFuYWdlbWVudCAoVXBsb2FkcyknOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+SXQgaXMgYSBtb2R1bGUgZm9yIGFsbG93aW5nIHBlb3BsZSB0byB1cGxvYWQgYW5kIGRvd25sb2FkIGZpbGVzIHRvIGFuZCBmcm9tIHlvdXIgc2l0ZS4gIEl0IGtlZXBzIHRyYWNrIG9mIHdobyB1cGxvYWRlZCBhIGZpbGUsIGFuZCB3aG8gaGFzIGRvd25sb2FkZWQgaXQuICBBcyB3ZWxsLCB5b3UgY2FuIHNvcnQgZmlsZXMgaW50byBjYXRlZ29yaWVzLCBhbmQgbWFuYWdlIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXBsb2FkZWQgbGlrZSBldmVyeSBhZG1pbmlzdHJhdG9yIHdvdWxkIGRvPC9wPiANCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+PHN0cm9uZz5XYXJuaW5nPC9zdHJvbmc+IC0gVGhlIHByb3BlciBiZWhhdmlvdXIgb2YgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiBudW1lcm91cyBwaHAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBUaGVzZSBpbmNsdWRlIDxlbT4oYnV0IGFyZSBub3QgbGltaXRlZCB0byk8L2VtPiwgcGhwJiMwMzk7cyBtZW1vcnlfbGltaXQsIHNhZmVfbW9kZSwgZmlsZV91cGxvYWRzLCB1cGxvYWRzX21heF9maWxlc2l6ZSwgYW5kIG1heF9leGVjdXRpb25fdGltZS4gIFRoZXNlIHZhcmlhYmxlcyBtYXkgbmVlZCBhZGp1c3RtZW50IGZvciB0aGlzIG1vZHVsZSB0byB3b3JrIHByb3Blcmx5IG9uIHlvdXIgc2l0ZS4gIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3Ugd29yayB3aXRoIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaG9zdCBwcm92aWRlciB0byB0dW5lIHRoZXNlIHNldHRpbmdzIGZvciB5b3VyIHJlcXVpcmVtZW50cy48L3A+DQo8cD5UbyB1c2UgdGhpcyBtb2R1bGUsIHRvIGFsbG93IHVzZXJzIHRvIHVwbG9hZCBmaWxlcyB0byB5b3VyIHNpdGUsIHlvdSBzaG91bGQgaW5zdGFsbCB0aGUgbW9kdWxlLCBhbmQgdGhlbiBjcmVhdGUgb25lIG9yIG1vcmUgY2F0ZWdvcmllcyAoYS5rLmEpIGRpcmVjdG9yaWVzIGZvciB0aGUgdXBsb2FkZWQgZmlsZXMgdG8gZ28gaW50by4gVGhlbiBhZGQgYSB0YWcgaW50byBhIHBhZ2Ugb3IgdGVtcGxhdGUgc29tZXdoZXJlIGxpa2Uge2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgY2F0ZWdvcnk9JnF1b3Q7c29tZWNhdGVnb3J5JnF1b3Q7IG1vZGU9JnF1b3Q7c29tZW1vZGUmcXVvdDt9LiAgV2hlcmUgbW9kZSBtYXRjaGVzIG9uZSBvZiB0aGUgbW9kZXMgbGlzdGVkIGJlbG93LiAgVGhlIG91dHB1dCB3aWxsIGRpZmZlciBkZXBlbmRpbmcgdXBvbiB3aGljaCBtb2RlIHlvdSBzZWxlY3QuPC9wPg0KPHA+VGhpcyBtb2R1bGUgY2FuIHVzZSB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUgKG9wdGlvbmFsKSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYW55IGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcnMgdG8gcGFydGx5IGZpbGwgaW4gdGhlIGZvcm0gd2hlbiB1cGxvYWRpbmcgZmlsZXM7PC9wPg0KPGgzPlBlcm1pc3Npb25zPC9oMz4NCjx1bD4NCjxsaT48ZW0+TWFuYWdlIFVwbG9hZHM8L2VtPiBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBtYW5hZ2UgY2F0ZWdvcmllcywgYW5kIHRoZSBmaWxlcyB3aXRoaW4gdGhlbS48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgVGVtcGxhdGVzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgZWRpdCBhbnkgb2YgdGhlIHRlbXBsYXRlcy48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgU2l0ZSBQcmVmZXJlbmNlczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGFueSBvZiB0aGUgZmlsZSBzZXR0aW5ncy48L2xpPg0KPC91bD4NCjxoMz5DYXRlZ29yeSBCcm93c2luZzwvaDM+DQo8cD5QbGFjaW5nIGEgdGFnIGxpa2Uge2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYWN0aW9uPSZxdW90O2NhdGVnb3J5c3VtbWFyeSZxdW90OyB0ZW1wbGF0ZT0mcXVvdDtzdW1tYXJ5dGVtcGxhdGUmcXVvdDsgc29ydG9yZGVyPSZxdW90O25hbWVfYXNjJnF1b3Q7IGxpc3Rpbmd0ZW1wbGF0ZT0mcXVvdDtsaXN0dGVtcGxhdGUmcXVvdDsgbGlzdGluZ3NvcnRvcmRlcj0mcXVvdDtsaXN0c29ydG9yZGVyJnF1b3Q7fQ0KYWxsb3dzIHlvdSB0byBkaXNwbGF5IGFuIGludGVyYWN0aXZlIGNhdGVnb3J5IGJyb3dzZXIuIHNvcnRvcmRlciBjYW4gYmU6IG5hbWVfYXNjLCBuYW1lX2Rlc2MsIHN1bW1fYXNjLCBzdW1tX2Rlc2MsIG9yIHJhbmRvbS4NCmxpc3Rpbmd0ZW1wbGF0ZSBhbmQgbGlzdGluZ3NvcnRvcmRlciBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgc29ydG9yZGVyIHBhcmFtZXRlcnMgZm9yDQp0aGUgJnF1b3Q7c3VtbWFyeSZxdW90OyBtb2RlLjwvcD4NCjxoMz5BdXRvbWF0aWMgU2Nhbm5pbmc8L2gzPg0KPHA+VGhpcyBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IHNjYW4gZm9yIG5ldyBmaWxlcyBpbiBhIGRpcmVjdG9yeSB3aGVuIGEgc3VtbWFyeSBtb2RlIHRhZyBmb3IgYSBzcGVjaWZpYyBjYXRlZ29yeSBpcyB1c2VkIG9uIGEgQ01TTVMgcGFnZS4gIGkuZTogPGNvZGU+e1VwbG9hZHMgY2F0ZWdvcnk9Y2F0ZWdvcnlfbmFtZX08L2NvZGU+IHdpbGwgcGVyZm9ybSBhIHNjYW4uICBidXQgPGNvZGU+e1VwbG9hZHMgY2F0ZWdvcnk9YWxsfTwvY29kZT4gd2lsbCBub3QuPC9wPg0KPGgzPlRodW1ibmFpbCBHZW5lcmF0aW9uPC9oMz4NCjxwPlRoaXMgbW9kdWxlIGlzIGNhcGFibGUgb2YgZ2VuZXJhdGluZyB0aHVtYm5haWxzIGZvciBjZXJ0YWluIHR5cGVzIG9mIGZpbGVzLiAgVGhlcmUgYXJlIHByZWZlcmVuY2VzIGluIHRoZSBwcmVmZXJlbmNlcyB0YWIgb2YgdGhlIFVwbG9hZHMgbW9kdWxlIGFkbWluaXN0cmF0aW9uIHBhbmVsIHRvIHNwZWNpZnkgdGhlIHR5cGVzIG9mIGZpbGVzIHRoYXQgYWxsb3cgYXV0b21hdGljIHRodW1ibmFpbCBnZW5lcmF0aW9uLCBhbmQgdGhlIHNpemUgb2YgdGhlIGdlbmVyYXRlZCB0aHVtYm5haWwgKHByZXNlcnZpbmcgYXNwZWN0IHJhdGlvKS4gICBUaHVtYm5haWxzIGFyZSBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCB1cG9uIHVwbG9hZCwgYW5kIGNhbiBiZSBnZW5lcmF0ZWQgbWFudWFsbHkgYnkgc2VsZWN0aW5nIHRoZSAmcXVvdDtHZW5lcmF0ZSBUaHVtYm5haWxzJnF1b3Q7IG9wdGlvbiBpbiB0aGUgZWRpdCBjYXRlZ29yeSBmb3Jtcy4uLiBidXQgYXJlIG5vdCBnZW5lcmF0ZWQgd2hlbiBuZXcgZmlsZXMgYXJlIGRldGVjdGVkIGJ5IGF1dG9tYXRpYyBzY2FubmluZy48L3A+DQo8aDM+WW91IFNlbmQgSXQ8L2gzPg0KPHA+SXQgaXMgcG9zc2libGUgdG8gZW5hYmxlICZxdW90O3lvdXNlbmRpdCZxdW90OyBsaWtlIGZ1bmN0aW9uYWxpdHkgdG8gYWxsb3cgYXV0b21hdGljYWxseSBlbWFpbGluZyBzZWxlY3RlZCBwZW9wbGUgd2l0aCBhIGxpbmsgdG8gYSBuZXdseSB1cGxvYWRlZCBmaWxlLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgYnkgdXNpbmcgYSB0YWcgbGlrZTogPGNvZGU+e1VwbG9hZHMgYWN0aW9uPXlvdXNlbmRpdCBjYXRlZ29yeT1jYXRlZ29yeW5hbWV9PC9jb2RlPi4gIFRoaXMgd2lsbCBkaXNwbGF5IGEgZm9ybSBhbGxvd2luZyB0aGlzIGZ1bmN0aW9uYWxpdHkuPC9wPg0KPGgzPlRpbWUgTGltaXRlZCBBY2Nlc3M8L2gzPg0KPHA+VGhpcyBtb2R1bGUgc3VwcG9ydHMgdGhlIG5vdGlvbiBvZiB1bmlxdWUga2V5cyB0byBhbGxvdyB0aW1lIGxpbWl0ZWQgYWNjZXNzIHRvIGNlcnRhaW4gZmlsZXMuICBUaGUgZnVuY3Rpb25hbGl0eSBhbGxvd3Mgc3BlY2lmeWluZyBhIHRpbWUgbGltaXQgKGluIGhvdXJzKSBmb3Igd2hpY2ggdGhlIGtleSBpcyB2YWxpZCwgYW5kIGEgbWF4aW11bSBudW1iZXIgb2YgZG93bmxvYWRzIG9yIGRvd25sb2FkIGF0ZW1wdHMuICBBbiBlbWFpbCBpcyBzZW50IHRvIHRoZSBkZXNpcmVkIHVzZXJzIHdpdGggdGhlIHVuaXF1ZSBVUkwuICBBZnRlciB0aGUgdGltZSBsaW1pdCwgb3IgdGhlIG51bWJlciBvZiBkb3dubG9hZHMgaGFzIGJlZW4gcmVhY2hlZCwgdGhlIFVSTCBpcyBubyBsb25nZXIgdmFsaWQuICBUaGVzZSB1bmlxdWUgdGltZSBsaW1pdGVkIGtleXMgYXJlIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBmcm9tIHRoZSBkYXRhYmFzZSBhZnRlciBleHBpcnkuPC9wPg0KPGgzPlJlc3RyaWNpbmcgQWNjZXNzIHdpdGggRkVVPC9oMz4NCjxwPlRoaXMgbW9kdWxlIGlzIGNhcGFibGUgb2YgaW50ZWdyYXRpbmcgd2l0aCB0aGUgRnJvbnRFbmRVc2VycyBtb2R1bGUgdG8gcmVzdHJpY3QgdGhlIHZpc2liaWxpdHkgb2YgY2F0ZWdvcmllcyAoZGlyZWN0b3JpZXMpIHRvIGNlcnRhaW4gYWxsb3dlZCBGRVUgZ3JvdXBzLiAgWW91ciB1c2VycyB3b3VsZCBoYXZlIHRvIGJlIGxvZ2dlZCBpbiB0byB5b3VyIHdlYnNpdGUgKHVzaW5nIEZFVSkgYW5kIGFsc28gYSBtZW1iZXIgb2Ygb25lIG9mIHRoZSBhbGxvd2VkIGdyb3VwcyB0byBvYnRhaW4gYWNjZXNzLiAgVGhpcyBpcyBhY2NvbXBsaXNoZWQgaW4gdGhlIGNhdGVnb3J5IGVkaXQgZm9ybS4gIFlvdSBjYW4gc2VsZWN0IGEgbGlzdCBvZiBGRVUgZ3JvdXBzIHdoaWNoIGFyZSBhbGxvd2VkIHRvIHZpZXcgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeS48L3A+DQo8cD5UaGlzIGZ1bmN0aW9uYWxpdHkgYWxzbyBhcHBsaWVzIHRvIHRoZSAmYW1wO3F1b3RUaW1lIExpbWl0ZWQgQWNjZXNzJnF1b3Q7IGZ1bmN0aW9uYWxpdHkuICBBbGxvd2luZyB5b3UgdG8gc3BlY2lmeSB0aGF0IGNlcnRhaW4gcGVvcGxlLCB3aG8gYWxzbyBoYXZlIHRvIGJlIGxvZ2dlZCBpbiB0byB5b3VyIHdlYnNpdGUgY2FuIGhhdmUgYWNjZXNzIHRvIGNlcnRhaW4gZmlsZXMgZm9yIGEgbGltaXRlZCBhbW91bnQgb2YgdGltZS48L3A+DQo8aDM+RW1haWxpbmc8L2gzPg0KPHA+VGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBzZW5kaW5nIGFuIGVtYWlsIHdoZW5ldmVyIGEgZmlsZSBpcyB1cGxvYWRlZCwgc2VlIHRoZSBwcmVmZXJlbmNlcyB0YWIuICBIb3dldmVyLCB0byBkbyB0aGlzIHRoZSA8Yj5DTVNNYWlsZXI8L2I+IHBhY2thZ2UgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuICBUaGlzIGlzIGFuIDxlbT5vcHRpb25hbDwvZW0+IHN0ZXAsIGFuZCBpZiB0aGUgQ01TTWFpbGVyIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLCBub3RoaW5nIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCBvbmx5IGEgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byB0aGUgYWRtaW4gbG9nPC9wPg0KPGgzPkNvbnRlbnQgQmxvY2tzIDxlbT4oQ01TTVMgMS43KyBPbmx5KTwvZW0+PC9oMz4NCjxwPkZvciBDTVNNUyAxLjcgdGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBpbnRlcmZhY2luZyB3aXRoIHRoZSBjb250ZW50IGVkaXRvciBhbmQgZXhwb3J0aW5nIGEgY29udGVudCBibG9jayB0aGF0IGFsbG93cyBzZWxlY3RpbmcgYW4gdXBsb2FkcyBjYXRlZ29yeSB3aXRoaW4gdGhlIGVkaXQgY29udGVudCBwYWdlLCBmb3IgbGF0ZXIgdXNlIHdpdGhpbiB0aGUgdGVtcGxhdGUuPC9wPg0KPHA+aS5lOiBwbGFjaW5nIHRoZSBmb2xsb3dpbmcgdGFnIHdpdGhpbiBhIHBhZ2UgdGVtcGxhdGUgPGNvZGU+e2NvbnRlbnRfbW9kdWxlIG1vZHVsZT0mcXVvdDtVcGxvYWRzJnF1b3Q7IGJsb2NrPSZxdW90O3VwbG9hZHNfY2F0ZWdvcnkmcXVvdDsgdHlwZT0mcXVvdDtjYXRlZ29yeXNlbGVjdCZxdW90O308L2NvZGU+LCB3aWxsIGFkZCBhIGRyb3Bkb3duIGJveCBpbiB0aGUgZWRpdCBjb250ZW50IHZpZXcgb2YgYW55IHBhZ2UgdXRpbGl6aW5nIHRoYXQgcGFnZSB0ZW1wbGF0ZS48L3A+DQo8cD5UaGlzIGNvbnRlbnQgYmxvY2sgYWxzbyBhY2NlcHRzIHNvbWUgb3B0aW9uYWwgcGFyYW1ldGVyczo8L3A+DQo8dWw+DQogIDxsaT48dT5zZWxlY3RvbmU8L3U+DQogICAgPHA+VGhpcyBwYXJhbWV0ZXIgaW5zZXJ0cyBhICZxdW90O1NlbGVjdCBPbmUmcXVvdDsgaXRlbSBpbnRvIHRoZSBsaXN0IG9mIGNhdGVnb3JpZXMsIHJlcXVpcmluZyB0aGUgdXNlciB0byBzZWxlY3QgYSB2YWxpZCBjYXRlZ29yeSB3aGVuIHRoZSBjb250ZW50IHBhZ2UgaXMgc2F2ZWQuPC9wPg0KICA8L2xpPg0KICA8bGk+PHU+YWxsb3dhbGw8L3U+DQogICAgPHA+VGhpcyBwYXJhbWV0ZXIgYWxsb3dzIHRoZSBjb250ZW50IGVkaXRvciB0byBzZWxlY3QgJnF1b3Q7QWxsJnF1b3Q7IGFzIGEgY2F0ZWdvcnkgZm9yIHRoZSB1cGxvYWRzIGRpc3BsYXkuPC9wPg0KICA8L2xpPg0KPC91bD4NCjxoND5Ib3cgd291bGQgSSB1c2UgaXQ/PC9oND4NCjxwPkhlcmUgaXMgc29tZSBleGFtcGxlIGNvZGU6PC9wPg0KPHByZT4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9JnF1b3Q7VXBsb2FkcyZxdW90OyBibG9jaz0mcXVvdDtjYXRlZ29yeXNlbGVjdCZxdW90OyBsYWJlbD0mcXVvdDtTZWxlY3QgYW4gdXBsb2FkcyBjYXRlZ29yeSZxdW90OyBzZWxlY3RvbmU9MSBhc3NpZ249JnF1b3Q7dG1wJnF1b3Q7fQ0Ke1VwbG9hZHMgY2F0ZWdvcnk9JHRtcH0NCjwvcHJlPg0KDQo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4NCjxwPjxiPk5vdGU6PC9iPiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBieXBhc3Mgb3IgZ2V0IHBhc3QgYW55IGZpbGUgc2l6ZSBsaW1pdGF0aW9ucyBpbiBwaHAuICBJdCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZW0uICBUaGVyZWZvcmUgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB5b3VyIHBocC5pbmkgZmlsZSwgeW91ciBDTVNNUyBjb25maWcucGhwIGZpbGUgYW5kL29yIHlvdXIgaHR0cGQuY29uZiBmaWxlKHMpIHRvIGFsbG93IHlvdSB0byB1cGxvYWQgZmlsZXMgYXMgbGFyZ2UgYXMgd2hhdCB5b3UgaGF2ZSBzZXQgaW4gdGhlIHVwbG9hZHMgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4NCjxoMz5BcGFjaGUgTm90ZXM8L2gzPg0KPHA+SW4gb3JkZXIgdG8gYWxsb3cgbGFyZ2UgZmlsZSB1cGxvYWRzLCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBpbiB5b3VyIHBocC5pbmkgIEluIGFkZGl0aW9uLCB0aGUgTGltaXRSZXF1ZXN0Qm9keSBwYXJhbWV0ZXIgaW4geW91ciBhcGFjaGUgY29uZmlndXJhdGlvbiwgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyPC9wPg0KPHA+Tm90ZTogIHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIGluIGJ5dGVzLCBraWxvYnl0ZXMsIG9yIG1lZ2FieXRlcywgaG93ZXZlciB0aGUgTGltaXRSZXF1ZXRCb2R5IHBhcmFtZXRlciBpcyBvbmx5IHNwZWNpZmllZCBpbiBieXRlczwvcD4NCic7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsZSB2ZXJzaW9uICVzIGluc3RhbGxlZC4nOwokbGFuZ1snaXBfYWRkcmVzcyddID0gJ0lQIEFkZHJlc3MnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdBIG1vZHVsZSB0aGF0IGFsbG93cyB1c2VycyB0byB1cGxvYWQgZmlsZXMsIGFuZCBhbGxvd3MgeW91IHRvIG1hbmFnZSB0aGVtLic7CiRsYW5nWyduYW1lJ10gPSAnTmFtZSc7CiRsYW5nWydyZW5hbWVtZXNzYWdlJ10gPSAnQ2hhbmdlIHRoZSBuYW1lIGhlcmUgdG8gZXhlY3V0ZSBhIHJlbmFtZSc7CiRsYW5nWydwYXRoJ10gPSAnUGF0aCc7CiRsYW5nWydwYXRobWVzc2FnZSddID0gJ0NoYW5nZSB0aGUgY2F0ZWdvcnkgaGVyZSB0byBtb3ZlIHRoZSBmaWxlIHRvIGFub3RoZXIgZGlyZWN0b3J5JzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcoUmVsYXRpdmUgdG8gdGhlIHVwbG9hZHMgZGlyZWN0b3J5KSc7CiRsYW5nWydwb3N0aW5zdGFsbCddID0gJzxwPlRoZSB1cGxvYWRzIG1vZHVsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgaW5zdGFsbGVkLiBCZSBzdXJlIHRvIHNldCAmcXVvdDtNYW5hZ2UgVXBsb2FkcyZxdW90OyBwZXJtaXNzaW9ucyB0byB1c2UgdGhpcyBtb2R1bGUhPC9wPg0KPHA+PHN0cm9uZz5XYXJuaW5nPC9zdHJvbmc+IC0gVGhlIHByb3BlciBiZWhhdmlvdXIgb2YgdGhpcyBtb2R1bGUgZGVwZW5kcyBvbiBudW1lcm91cyBwaHAgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMuICBUaGVzZSBpbmNsdWRlIDxlbT4oYnV0IGFyZSBub3QgbGltaXRlZCB0byk8L2VtPiwgcGhwJiMwMzk7cyBtZW1vcnlfbGltaXQsIHNhZmVfbW9kZSwgZmlsZV91cGxvYWRzLCB1cGxvYWRzX21heF9maWxlc2l6ZSwgYW5kIG1heF9leGVjdXRpb25fdGltZS4gIFRoZXNlIHZhcmlhYmxlcyBtYXkgbmVlZCBhZGp1c3RtZW50IGZvciB0aGlzIG1vZHVsZSB0byB3b3JrIHByb3Blcmx5IG9uIHlvdXIgc2l0ZS4gIEl0IGlzIGFkdmlzZWQgdGhhdCB5b3Ugd29yayB3aXRoIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3Igb3IgaG9zdCBwcm92aWRlciB0byB0dW5lIHRoZXNlIHNldHRpbmdzIGZvciB5b3VyIHJlcXVpcmVtZW50cy48L3A+JzsKJGxhbmdbJ3Bvc3R1bmluc3RhbGwnXSA9ICdUaGUgVXBsb2FkcyBtb2R1bGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IHJlbW92ZWQuICBObyBmaWxlcyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHlvdXIgdXBsb2FkcyBkaXJlY3RvcnksIGFuZCBmaWxlIGludGVncml0eSBpcyBpbnRhY3QnOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdQcmVmZXJlbmNlcyc7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGUgcHJlZmVyZW5jZXMgdXBkYXRlZC4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVzYyddID0gJ0tpcmplbGR1cyc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0ZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSBsaXN0ZWQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ0NhdGVnb3J5IE5hbWUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlciBQYXRoJzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdEZWxldGUgY2F0ZWdvcnkgZGlyZWN0b3J5Pyc7CiRsYW5nWydwcm9tcHRfbWF4X3VwbG9hZHNpemUnXSA9ICdNYXhpbXVtIGZpbGUgc2l6ZSBhbGxvd2VkIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdWYWxpZCB1cGxvYWQgZXh0ZW5zaW9ucyc7CiRsYW5nWydzY2FuJ10gPSAnU2Nhbic7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1NlbGVjdCBDYXRlZ29yeSc7CiRsYW5nWydzaXplJ10gPSAnU2l6ZSc7CiRsYW5nWydzaXpla2InXSA9ICdTaXplIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnU2FhZGEnOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJ1N1bW1hcnkgVGVtcGxhdGVzJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdLb2trdXYmb3RpbGRlO3RlJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnVXBsb2FkcyBNb2R1bGUnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnTW9kdWxlIEFkbWluIFBhbmVsJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsZSBQcmVmZXJlbmNlcyc7CiRsYW5nWyd0aXRsZV9zdWJuZXRfZXhjbHVzaW9ucyddID0gJ0V4Y2x1ZGUgc3VibmV0cyBmcm9tIHN0YXRpc3RpY3MnOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ1ZhbGlkIEV4dGVuc2lvbnMnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgVW5pbnN0YWxsZWQuJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIHVwZ3JhZGVkIHRvIHZlcnNpb24gJXMuJzsKJGxhbmdbJ3VwbG9hZCddID0gJ0xhZSAmdXVtbDtsZXMnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWxlICVzIHdhcyB1cGxvYWRlZCBieSAlcy4nOwokbGFuZ1sncmVwbGFjZWQnXSA9ICdGaWxlICVzIHdhcyByZXBsYWNlZCBieSAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0ZpbGUgJXMgd2FzIGRlbGV0ZWQuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdVcGxvYWQgVGVtcGxhdGVzJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ1dBUk5JTkc6IFVzZSBjYXV0aW9uIHdoZW4gZGVsZXRpbmcgY2F0ZWdvcmllcy4gIEZpbGVzIG1heSBiZSBsb3N0JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMzIxNTU0NTI2NjczMjAxOTAwMC4xMjQxMDkxNzg3LjEyNTMxODMxNjcuMTI1MzIwNjYwNS4xMTgnOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjUzMTEyOTg2LjExNS4yNS51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9Zm9ydW0uY21zbWFkZXNpbXBsZS5vcmd8dXRtY2N0PS9pbmRleC5waHAvdG9waWMsMTUzMTguMC5odG1sfHV0bWNtZD1yZWZlcnJhbCc7CiRsYW5nWydxY2EnXSA9ICcxMjQwNjgzNjE1LTU4NDA5OTczLTc5OTE1MzAzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xLjEwLjEyNTMyMDY2MDUnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fi_FI.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdBdXRvcmlzb2lkdXQgRkVVLXJ5aG0mYXVtbDt0JzsKJGxhbmdbJ2luZm9fZ3JvdXBsaXN0J10gPSAnVmFsaXRzZSBGRVUtcnlobSZhdW1sO3QsIGpvaWxsYSBvbiBvaWtldXMgdCZhdW1sO20mYXVtbDtuIGthdGVnb3JpYW4gdGllZG9zdG9paGluLiBKJmF1bWw7dCZhdW1sOyB2YWxpbnRhIHR5aGomYXVtbDtrc2kgYW50YWFrc2VzaSBvaWtldWRldCBrYWlraWxsZS4nOwokbGFuZ1sndGl0bGVfc2NhbiddID0gJ0V0c2kgdXVzaWEgdGllZG9zdG9qYSB0JmF1bWw7c3QmYXVtbDsga2F0ZWdvcmlhc3RhJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnTHVvIHB1dXR0dXZhdCBwaWVub2lza3V2YXQgdCZhdW1sO20mYXVtbDtuIGthdGVnb3JpYW4gdGllZG9zdG9pbGxlJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnTHVvIHBpZW5vaXNrdXZhdCc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlsJ10gPSAnKHV1ZGVsbGVlbilMdW8gcGllbm9pc2t1dmEgdCZhdW1sO2xsZSB0aWVkb3N0b2xsZSc7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlsJ10gPSAnTHVvIHBpZW5vaXNrdXZhJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ0hha2VtaXN0b2EgZWkgdm9pZGEgbHVrZWEgKHRpZWRvc3RvLW9pa2V1c29uZ2VsbWE/KSc7CiRsYW5nWyd0aXRsZV9kb3dubG9hZF9jaHVua3NpemUnXSA9ICdMYWRhdHRhdmFuIHBhbGFuIGtva28nOwokbGFuZ1snaW5mb19kb3dubG9hZF9jaHVua3NpemUnXSA9ICdUJmF1bWw7bSZhdW1sOyBhc2V0dXMgdmFpa3V0dGFhIGxhdGF1a3NlbiBrb2tvb24gamEgc2FhdHRhYSBhdXR0YWEgbXVpc3RpbmsmYXVtbDt5dCZvdW1sO3NzJmF1bWw7JzsKJGxhbmdbJ3dhcm5pbmdfc2FmZV9tb2RlJ10gPSAnUEhQbiBTYWZlIE1vZGUgb24gayZhdW1sO3l0Jm91bWw7c3MmYXVtbDssIHQmYXVtbDttJmF1bWw7IHNhYXR0YWEgYWloZXV0dGFhIG9uZ2VsbWlhIHVwbG9hZGVpc3NhICh0aWVkb3N0byBvaWtldWRldCkgamEgc2FhdHRhYSBhaWhldXR0YWEgb25nZWxtaWEgbGF0YXVrc2lzc2EuIFN1b3NpdHRlbGVtbWUgb3R0YW1hYW4geWh0ZXl0dCZhdW1sOyBzZXJ2ZXJpbiB5bGwmYXVtbDtwaXQmYXVtbDtqJmF1bWw7JmF1bWw7biBqb3Mgb25nZWxtaWEgZXNpaW50eXkuJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdVc2VmdWwgZm9yIGRpc3BsYXlpbmcgYSBkZXRhaWwgcmVwb3J0IHVzaW5nIGEgZGlmZmVyZW50IHBhZ2UgdGVtcGxhdGUsIHRoaXMgcGFyYW1ldGVyIHRha2VzIHRoZSBwYWdlIGlkIG9yIHBhZ2UgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGV0YWlsIHJlcG9ydCc7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdBIGJvb2xlYW4gdGhhdCBpbmRpY2F0ZXMgd2V0aGVyIGZpbGUgbmFtZXMgc2hvdWxkIGJlIHByZWZpeGVkJzsKJGxhbmdbJ3BhcmFtX3ByZWZpeF9mZXUnXSA9ICdBIGJvb2xlYW4gcGFyYW1ldGVyIHRoYXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByZWZpeCBzaG91bGQgYmUgdGFrZW4gZnJvbSB0aGUgY3VycmVudCBhdXRob3IsIGlmIG5vdCBzcGVjaWZpZWQsIHRoZSBwcmVmaXggaXMgdGhlIGN1cnJlbnQgdGltZSAoaW4gZGVjaGV4IGZvcm1hdCknOwokbGFuZ1sncGFyYW1fbm9jYXB0Y2hhJ10gPSAnUG9pc3RhIENhcGNoYSBrJmF1bWw7eXQmb3VtbDtzdCZhdW1sOyAob2xldHVrc2VuYSBwJmF1bWw7JmF1bWw7bGwmYXVtbDspIHVwbG9hZCBmb3JtaXNzYSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnTXVva2thYSB1cGxvYWQtbG9tYWtldHRhJzsKJGxhbmdbJ2NhcHRjaGFfdGl0bGUnXSA9ICdTeSZvdW1sO3QmYXVtbDsgdGFya2lzdGVrdXZhbiB0ZWtzdGknOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnVGFya2lzdGVrdXZhbiB0ZWtzdGkgZWkgdCZhdW1sO3NtJmF1bWw7JmF1bWw7JzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddID0gJ0x1byBwaWtrdWt1dmF0IHRpZWRvc3RvaWxsZSwgam9pbGxhIG9uIG4mYXVtbDttJmF1bWw7IHAmYXVtbDsmYXVtbDt0dGVldCc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnXSA9ICdNYWtzaW1pIHBpZW5vaXNrdXZhbiBrb2tvIChwaWtzZWxlaW4mYXVtbDspJzsKJGxhbmdbJ3Byb21wdF91cGxvYWRfaWNvbiddID0gJ1NpaXJyJmF1bWw7IGlrb25pIHBhbHZlbGltZWxsZSc7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdUJmF1bWw7dCZhdW1sOyB0ZWtzdGkmYXVtbDsgayZhdW1sO3l0ZXQmYXVtbDsmYXVtbDtuIHV1ZGVuIHRlbXBsYXRlbiBsdW9ubmlzc2EnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdPbGV0dXMgeWtzaXR5aXNrb2h0YWlzZW4gcmFwb3J0aW4gcG9oamEnOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF9zeXNkZWZhdWx0J10gPSAnT2xldHVzIHlodGVlbnZldG9yYXBvcnRpbiBwb2hqYSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdPbGV0dXMgdXBsb2FkLWxvbWFrZXBvaGphJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnUG9oamEnOwokbGFuZ1sncmVzZXR0b2RlZmF1bHQnXSA9ICdQYWxhdXRhIG9sZXR1a3NldCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3RlbXBsYXRlJ10gPSAnWWh0ZWVudmV0b3JhcG9ydGluIHBvaGphJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZSddID0gJ1lrc2l0eWlza29odGFpc2VuIHJhcG9ydGluIHBvaGphJzsKJGxhbmdbJ3Byb21wdF9uYW1lJ10gPSAnTmltaSc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdCddID0gJ09sZXR1cyc7CiRsYW5nWydsZWdlbmRfdXBsb2FkZm9ybSddID0gJ0xhdGFhIHRpZWRvc3RvJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ1ZhYWRpdHR1IHBhcmFtZXRyaSBwdXV0dHV1JzsKJGxhbmdbJ2Vycm9yX21pc3NpbmduYW1lJ10gPSAnVGllZG9zdG9uIG5pbWkgdHVsZWUgYW50YWEnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2V4dGVuc2lvbnMnXSA9ICdUYXJ2aXRhYW4gdiZhdW1sO2hpbnQmYXVtbDsmYXVtbDtuIHlrc2kgdGllZG9zdG9wJmF1bWw7JmF1bWw7dGUnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdJa29uaSB0dWxlZSBtJmF1bWw7JmF1bWw7cml0dCZhdW1sOyZhdW1sOyc7CiRsYW5nWydlcnJvcl9ub3N1Y2hyb3cnXSA9ICdNJmF1bWw7JmF1bWw7cml0ZXR0eSZhdW1sOyByaXZpJmF1bWw7IGVpIGwmb3VtbDt5dHlueXQnOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnVHVudGVtYXRvbic7CiRsYW5nWydkZXNjcmlwdGlvbl91bmtub3duJ10gPSAnVGllZG9zdG9uIHR5eXBwaSBrdXZhdXMgdHVudGVtYXR0b21pbGxlIHRpZWRvc3RvaWxsZSc7CiRsYW5nWydpbWFnZSddID0gJ0t1dmEnOwokbGFuZ1snaWNvbiddID0gJ0lrb25pJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdUaWVkb3N0b3AmYXVtbDsmYXVtbDt0dGVldCc7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ0xpcyZhdW1sOyZhdW1sOyB1dXNpIHRpZWRvc3RvdHl5cHBpJzsKJGxhbmdbJ2ZpbGVfdHlwZXMnXSA9ICdUaWVkb3N0b3R5eXBpdCc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdLYXRlZ29yaWFuIElEdCZhdW1sOyBlaSBhbm5ldHR1JzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnknXSA9ICdLYXRlZ29yaWFuIElEdCZhdW1sOyBlaSBhbm5ldHR1JzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJ1NhbWFsbGEgbmltZWxsJmF1bWw7IG9uIGpvIG9sZW1hc3NhIHBvaGphJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZW5hbWUnXSA9ICdQb2hqYW4gbmltaSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICdQb2hqYSc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdMdW8gdXVzaSBwb2hqYSc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8aDM+T25Eb3dubG9hZDwvaDM+DQo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIHVzZXIgZmluaXNoZXMgZG93bmxvYWRpbmcgYSBmaWxlPC9wPg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBsb2FkIElEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsZSBuYW1lPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIFRoZSBJUCBBZGRyZXNzIG9mIHRoZSBkb3dubG9hZGVyPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkRlbGV0ZUNhdGVnb3J5J10gPSAnPGgzPk9uRGVsZXRlQ2F0ZWdvcnk8L2gzPg0KPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBEZWxldGVkPC9wPg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBDYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQ2F0ZWdvcnkgcGF0aDwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxoMz5PbkNyZWF0ZUNhdGVnb3J5PC9oMz4NCjxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgQ3JlYXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBjYXRlZ29yeSBkZXNjcmlwdGlvbjwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFRoZSBjYXRlZ29yeSBwYXRoPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQSBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGNhdGVnb3J5IGlzIGxpc3RhYmxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxoMz5PblJlbW92ZTwvaDM+DQo8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVtb3ZlZCB2aWEgdGhlIGFkbWluIG9yIGZyb250ZW5kIGludGVyZmFjZXM8L3A+DQo8aDQ+UGFyYW1ldGVyczwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSByZW1vdmVkIGZpbGU8L2xpPg0KPGxpPjxlbT5pZDwvZW0+IC0gVGhlIGlkIG9mIHRoZSByZW1vdmVkIGZpbGU8L2xpPg0KPGxpPjxlbT5jYXRlZ29yeV9pZDwvZW0+IC0gVGhlIGlkIG9mIHRoZSBjYXRlZ29yeTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25VcGxvYWQnXSA9ICc8aDM+T25VcGxvYWQ8L2gzPg0KPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBuZXcgZmlsZSBpcyB1cGxvYWRlZCB2aWEgdGhlIGFkbWluIG9yIGZyb250ZW5kIGludGVyZmFjZXM8L3A+DQo8aDQ+UGFyYW1ldGVyczwvaDQ+DQo8dWw+DQo8bGk+PGVtPmNhdGVnb3J5PC9lbT4gLSBUaGUgY2F0ZWdvcnkgbmFtZTwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4NCjxsaT48ZW0+c2l6ZTwvZW0+IC0gVGhlIHNpemUgb2YgdGhlIHVwbG9hZGVkIGZpbGU8L2xpPg0KPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBUaGUgc2hvcnQgZGVzY3JpcHRpb24gZm9yIHRoZSB1cGxvYWRlZCBmaWxlIChtYXkgYmUgZW1wdHkpPC9lbT48L2xpPg0KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gVGhlIGxvbmcgZGVzY3JpcHRpb24gZm9yIHRoZSB1cGxvYWRlZCBmaWxlIChtYXkgYmUgZW1wdHkpPC9lbT48L2xpPg0KPGxpPjxlbT5hdXRob3I8L2VtPiAtIFRoZSBhdXRob3Igb2YgdGhlIHVwbG9hZGVkIGZpbGUgKGlmIGF2YWlsYWJsZSk8L2VtPjwvbGk+DQo8bGk+PGVtPmlwX2FkZHJlc3M8L2VtPiAtIFRoZSBpbnRlcm5ldCBhZGRyZXNzIG9mIHRoZSBjbGllbnQgdGhhdCB1cGxvYWRlZCB0aGUgZmlsZTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kZWxldGVjYXRlZ29yeSddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgZGVsZXRlZCc7CiRsYW5nWydpbmZvX2V2ZW50X29uY3JlYXRlY2F0ZWdvcnknXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIGNyZWF0ZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbmRvd25sb2FkJ10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBmaWxlIGlzIGRvd25sb2FkZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbnVwbG9hZCddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbnJlbW92ZSddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkJzsKJGxhbmdbJ3RpdGxlX3VzZXJ0YWdfb251cGxvYWQnXSA9ICdLJmF1bWw7eXR0JmF1bWw7aiZhdW1sO24gbHVvbWEgdGFnaSwgam90YSBrdXRzdXRhYW4ga3VuIHNpaXJ0byBvbiB2YWxtaXMnOwokbGFuZ1snbm9uZSddID0gJ0VpIG1pdCZhdW1sOyZhdW1sO24nOwokbGFuZ1snbWF0Y2hlc2ZvdW5kJ10gPSAnT3N1bWFhIGwmb3VtbDt5ZGV0dHknOwokbGFuZ1snZmlsdGVyJ10gPSAnU3VvZGF0YSc7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnT2hqYWEgc2l2dWxsZSAoaWQgLyBhbGlhcykgbGF0YXVrc2VuIGomYXVtbDtsa2Vlbic7CiRsYW5nWydkZXRhaWxzJ10gPSAnTGlzJmF1bWw7dGllZG90JzsKJGxhbmdbJ2NvbmZpcm1fcHJlZmVyZW5jZXMnXSA9ICdIYWx1YXRrbyB2YXJtYXN0aSBtdXV0dGFhIGFzZXR1a3NpYT8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnVGllZG9zdG9hIGVpIGxhZGF0dHUnOwokbGFuZ1sncHJvbXB0X3JlcGxhY2UnXSA9ICdTYWxsaSB5bGlraXJqb2l0dXMnOwokbGFuZ1snaW5mb19yZXBsYWNlJ10gPSAnS29ydmFhIHRpZWRvc3RvIHNhbWFubmltaXNlbGxhIChlaSB2YWloZGEgSUQ6dGEpJzsKJGxhbmdbJ3BhcmFtX25vX2luaXRpYWwnXSA9ICcmQXVtbDtsJmF1bWw7IG4mYXVtbDt5dCZhdW1sOyBhbHVzc2EgdHVsb2tzaWEsIGpvcyBzdW9kYXR1cyBvbiBwJmF1bWw7JmF1bWw7bGwmYXVtbDsnOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGtleSB0byB0aGUgbW9kdWxlIGZvciBmdXJ0aGVyIG9yZ2FuaXppbmcgdXBsb2Fkcy4gIFRoaXMga2V5IGNvdWxkIGJlIGFuIGVuY29kZWQgc3RyaW5nIGxpa2U6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7LCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnSGlkZSB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIHVwbG9hZCBmb3JtLiAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIG1vZGU9JiMwMzk7dXBsb2FkJiMwMzk7LiAgSWYgVGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIGlzIHByZXNlbnQsIGFuZCBhIHVzZXIgaXMgY3VycmVudGx5IGxvZ2dlZCBpbiwgYSBoaWRkZW4gZmllbGQgd2lsbCBob2xkIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJuYW1lJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0mcXVvdDtpZCZxdW90OyAtIHNwZWNpZnkgYSBzaW5nbGUgZmlsZSBmb3IgdGhlIHVybC9saW5rIG9yIHNpbmdsZSBtb2RlcyAoYWJvdmUpJzsKJGxhbmdbJ3BhcmFtX3VzZV9zdHJpY3RfcmVnZXhwJ10gPSAnU3VvZGF0dXMgayZhdW1sO3l0dCZhdW1sOyZhdW1sOyB0aXVra2FhIHMmYXVtbDsmYXVtbDtubiZvdW1sO2xsaXN0JmF1bWw7IGxhdXNla2V0dGEnOwokbGFuZ1sncGFyYW1fZGV0YWlsdGVtcGxhdGUnXSA9ICdLJmF1bWw7eXQmYXVtbDsgdCZhdW1sO20mYXVtbDtuIG5pbWlzdCZhdW1sOyBwb2hqYWEgeWtzaXR5aXNrb2h0YWlzZWVuIHJhcG9ydHRpaW4nOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdVc2UgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBmb3IgdGhpcyByZXBvcnQgb3IgZm9ybS4gIFRoZSBtb2RlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiB0ZW1wbGF0ZSBpcyByZXF1aXJlcmQsIGFuZCB0aGVuIGEgbmFtZSBtYXRjaCBpcyBwZXJmb3JtZWQgd2l0aGluIHRoYXQgdHlwZS4nOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnTiZhdW1sO3l0JmF1bWw7IHN1b2RhdHVza2FhdmFrZSc7CiRsYW5nWydwYXJhbV9ub19pbnRpdGlhbCddID0gJ0smYXVtbDt5dCZhdW1sO25uJm91bWw7bGxpbmVuIHZhaW4gam9zIHN1b2RhdHVzcGFyYW1ldHJpIG9uIGFubmV0dHUsIFZhaWt1dHRhYSB0dWxva3NpaW4gaWxtYW4gc3VvZGF0dXN0YQ0KJzsKJGxhbmdbJ3BhcmFtX2ZpbGV0eXBlcyddID0gJ04mYXVtbDt5dCZhdW1sOyB2YWluIHRpZWRvc3RvdCwgam9pZGVuIHR5eXBwaSB2YXN0YWEgdCZhdW1sO3QmYXVtbDsgcGlsa3VsbGEgZXJvdGV0dHVhIGxpc3RhYSc7CiRsYW5nWydwYXJhbV9zb3J0b3JkZXInXSA9ICcgIDxwPlNvcnQgT3JkZXJzDQogIDx1bD4NCiAgPGxpPjxlbT5kYXRlX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGF0ZTwvbGk+DQogIDxsaT48ZW0+ZGF0ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgZGF0ZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIG5hbWU8L2xpPg0KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIG5hbWU8L2xpPg0KICA8bGk+PGVtPnNpemVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBzaXplPC9saT4NCiAgPGxpPjxlbT5zaXplX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBzaXplPC9saT4NCiAgPGxpPjxlbT5kZXNjX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGVzY3JpcHRpb248L2xpPg0KICA8bGk+PGVtPmRlc2NfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGRlc2NyaXB0aW9uPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBhdXRob3I8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgYXV0aG9yPC9saT4NCiAgPGxpPjxlbT5pcF9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGlwIGFkZHJlc3M8L2xpPg0KICA8bGk+PGVtPmlwX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4NCiAgPGxpPjxlbT5yYW5kb208L2VtPiAtIFJhbmRvbSBzb3J0IG9yZGVyPC9saT4NCiAgPC91bD4NCiAgPC9wPic7CiRsYW5nWydwYXJhbV9saXN0aW5ndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzIGFmdGVyIGNsaWNrdGhyb3VnaCBmcm9tIENhdGVnb3J5IFN1bW1hcnkgcGFnZSc7CiRsYW5nWydwYXJhbV9saXN0aW5nc29ydG9yZGVyJ10gPSAnU29ydCBvcmRlciAoYWxhIHBhcmFtX3NvcnRvcmRlcikgdG8gdXNlIGZvciBjYXRlZ29yeSBsaXN0aW5ncyBhZnRlciBjbGlja3Rocm91Z2ggZnJvbSBDYXRlZ29yeSBTdW1tYXJ5IHBhZ2UnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICcgDQpmaWxlX2V4dGVuc2lvbnM9JnF1b3Q7ZXh0MSxleHQyLGV4dDMmcXVvdDsNCjxwPk1pdCZhdW1sOyB0aWVkb3N0byBwJmF1bWw7JmF1bWw7dHRlaXQmYXVtbDsgdm9pZGFhbiBsYWRhdGEsIHZhYXRpaSBtb2RlPSZxdW90O3VwbG9hZCZxdW90OyBwYXJhbWV0cmluLiBZbGlraXJqb2l0dGFhIG1vZHVsaW4gcGVydXNhc2V0dWtzZXQ8L3A+JzsKJGxhbmdbJ3BhcmFtX2NvdW50J10gPSAnY291bnQ9JnF1b3Q7TiZxdW90Ow0KPHA+TiZhdW1sO3l0dCZhdW1sOyZhdW1sOyBOIGthcHBhbGV0dGEgdHVsb2tzaWE8L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9JnF1b3Q7bmFtZSZxdW90Ow0KPHA+PGI+SHVvbWFhOjwvYj4gVm9pIG9sbGEgbXkmb3VtbDtzICZxdW90O2FsbCZxdW90Oywgam9rYSBuJmF1bWw7eXR0JmF1bWw7JmF1bWw7IGthaWtraSA8ZW0+bGlzdGF0dGF2aXNzYSBvbGV2YXQ8L2VtPiBrYXRlZ29yaWF0PC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIERpc3BsYXkgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgY2F0ZWdvcnk8L2xpPg0KICA8bGk+PGVtPnVwbG9hZDwvZW0+IC0gRGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgYSBmcm9udGVuZCB1c2VyIHRvIHVwbG9hZCBhIGZpbGU8L2xpPg0KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gRGlzcGxheSBhIGxpbmsgdG8gYSBmaWxlPC9saT4NCiAgPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBEaXNwbGF5IGEgc3VtbWFyaXplZCBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgY2F0ZWdvcnk8L2xpPg0KICA8bGk+PGVtPnNpbmdsZTwvZW0+IC0gRGlzcGxheSBhIGRldGFpbGVkIHJlcG9ydCBhYm91dCBhIHNpbmdsZSB1cGxvYWQ8L2xpPg0KICA8bGk+PGVtPnNpbmdsZXN1bW1hcnk8L2VtPiAtIERpc3BsYXkgYSBzdW1tYXJpemVkIHJlcG9ydCBhYm91dCBhIHNpbmdsZSB1cGxvYWQvbGk+DQogIDwvdWw+JzsKJGxhbmdbJ3BhcmFtX3NlbGVjdGZvcm0nXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGZvcm1pZCBvZiB0aGUgcGFyZW50IGZvcm0uICBVc2VkIHRvIGhhbmRsZSBwYXJhbWV0ZXIgcGFzc2luZyc7CiRsYW5nWydwYXJhbV9zZWxlY3RuYW1lJ10gPSAnd2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZmllbGQnOwokbGFuZ1sncGFyYW1fc2VsZWN0dmFsdWUnXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZpZWxkIHZhbHVlJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5vbmUnXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdldGhlciAmIzAzOTtub25lJiMwMzk7IGlzIGEgdmFsaWQgY2hvaWNlLic7CiRsYW5nWydyZXR1cm50b21vZHVsZSddID0gJ1BhbGFhIG1vZHV1bGlpbic7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3JpZXMnXSA9ICdFaSB5aHQmYXVtbDsmYXVtbDtuIG0mYXVtbDsmYXVtbDtyaXRlbHR5JmF1bWw7IGthdGVnb3JpYWEnOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdWYWFkaSBwJmF1bWw7JmF1bWw7dGUga2Fpa2lsbGUgbGFkYXR1aWxsZSB0aWVkb3N0b2lsbGUnOwokbGFuZ1sncmVzdG9yZWRlZmF1bHRzY29uZmlybSddID0gJ09sZXRrbyB2YXJtYSBldHQmYXVtbDsgaGFsdWF0IHBhbGF1dHRhYSBrYWlra2kgcG9oamF0IG9sZXR1cyBwb2hqaWtzaS4gS2Fpa2tpIG11dXRva3NldCBqb2l0YSBvbGV0IHRlaG55dCBoJmF1bWw7dmkmYXVtbDt2JmF1bWw7dCEnOwokbGFuZ1snaW5mb190aHVtYm5haWwnXSA9ICdWYWxpbm5haW5lbiBwaWVub3NrdXZhdGllZG9zdG8nOwokbGFuZ1sndGh1bWJuYWlsJ10gPSAnUGllbm9pc2t1dmEnOwokbGFuZ1snbmV3dGh1bWJuYWlsJ10gPSAnU2lpcnImYXVtbDsgdXVzaSBwaWVub2lza3V2YSc7CiRsYW5nWydpbmZvX3N1bW1hcnknXSA9ICdMeWh5dCBrdXZhdXMgdGllZG9zdG9zdGEnOwokbGFuZ1snaW5mb19jYXRlZ29yeW5hbWUnXSA9ICdMeWh5dCBrdXZhdXMga2F0ZWdvcmlhc3RhJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZXNjJ10gPSAnS3V2YXVzIGthdGVnb3JpYXN0YSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ1RoZSBkaXJlY3RvcnkgbmFtZSBpbnNpZGUgdGhlIHVwbG9hZHMgZGlyZWN0b3J5IHRoYXQgd2lsbCBiZSB1c2VkIHRvIHN0b3JlIGZpbGVzIGluIHRoaXMgY2F0ZWdvcnkuICBJZiB0aGUgZGlyZWN0b3J5IG9mIHRoaXMgbmFtZSBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCBpdCBtYXkgYmUgY3JlYXRlZCc7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnVXNlIHRoZSAmIzAzOTtVcGxvYWQgQXMmIzAzOTsgZmllbGQgdG8gY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBmaWxlIG9uIHVwbG9hZC4gIExlYXZlIGJsYW5rIHRvIHByZXNlcnZlIHRoZSBmaWxlbmFtZSBhcy1pcy4nOwokbGFuZ1snZXJyb3JfY2FudGNyZWF0ZWRpcmVjdG9yeSddID0gJ0VpIHZvaWRhIGx1b2RhIGhha2VtaXN0b2EnOwokbGFuZ1snZXJyb3Jfbm9tYWlsZXJtb2R1bGUnXSA9ICdDTVNNYWlsZXIgbW9kdWxpYSBlaSB2b2l0dSBhbHVzdGFhJzsKJGxhbmdbJ3VwbG9hZF9ub3RpZmljYXRpb24nXSA9ICdVdXNpIHRpZWRvc3RvIG9uIHVwbG9hZGF0dHUnOwokbGFuZ1sndGl0bGVfZW1haWxfb25fdXBsb2FkJ10gPSAnTCZhdW1sO2hldCZhdW1sOyB1cGxvYWQgaWxtb2l0dXMgb3NvaXR0ZWVzZWVuOic7CiRsYW5nWydlbWFpbF90ZW1wbGF0ZSddID0gJ0VtYWlsIHBvaGphJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdDcmVhdGUgZHVtbXkgaW5kZXguaHRtbCBmaWxlcyBpbiBlYWNoIGRpcmVjdG9yeT88YnIvPjxlbT5BbnkgZXhpc3RpbmcgaW5kZXguaHRtbCBmaWxlcyB3aWxsIHJlbWFpbjwvZW0+JzsKJGxhbmdbJ2Fib3V0J10gPSAnVGlldG9qYSc7CiRsYW5nWydlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJ10gPSAnUCZhdW1sOyZhdW1sO3N5IGV2JmF1bWw7dHR5LCB0YXJraXN0YSBvaWtldXRlc2kuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdFaSB2b2l0dSBraXJqb2l0dGFhJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnTGlzJmF1bWw7JmF1bWw7IGthdGVnb3JpYSc7CiRsYW5nWydhbGwnXSA9ICdLYWlra2knOwokbGFuZ1snYXJleW91c3VyZSddID0gJ09sZXRrbyB2YXJtYT8nOwokbGFuZ1snYXV0aG9yJ10gPSAnVGVraWomYXVtbDsnOwokbGFuZ1snY2FuY2VsJ10gPSAnUGVydXV0YSc7CiRsYW5nWydjYW5ub3Rtb2RpZnlwYXRoJ10gPSAnKFBvbGt1YSBlaSB2b2lkYSBtdXV0dGFhKSc7CiRsYW5nWydjYXRlZ29yaWVzJ10gPSAnS2F0ZWdvcmlhdCc7CiRsYW5nWydjYXRlZ29yeSddID0gJ0thdGVnb3JpYSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdLYXRlZ29yaWEgbGlzJmF1bWw7dHR5JzsKJGxhbmdbJ2NoYW5nZWxvZyddID0gJzx1bD4NCjxsaT4NCjxwPlZlcnNpb24gMS4wLiAtIFNlcHRlbWJlciAyMDA1LjwvcD4NCjxwPiBJbml0aWFsIFJlbGVhc2UuPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4wMS4gLSBTZXB0ZW1iZXIgMjAwNTwvcD4NCjxwPk1pbm9yIGZpeGVzLjwvcD48L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjAyLiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+QWRkZWQgYWJpbGl0eSB0byBzcGVjaWZ5IHNvcnQgb3JkZXI8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjAzLiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+Rml4IHJlZ2FyZGluZyBjb25mbGljdCBpbiB0ZW1wbGF0ZSBuYW1lczwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDQuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5BZGRlZCBhYmlsaXR5IHRvIHJlLXNjYW4gYSBkaXJlY3RvcnksIGFuZCB0byB1cGxvYWQgZmlsZXMgZnJvbSB0aGUgYWRtaW4gcGFnZTwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMDUuIC0gU2VwdGVtYmVyIDIwMDU8L3A+DQo8cD5GaXhlZCBzb21lIFBIUCB2YXJpYWJsZSBpc3N1ZXM8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjA2LiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+QWRkZWQgYXV0aG9yIGZpZWxkIHRvIHRoZSBhZG1pbiBwYW5lbCB1cGxvYWQgZm9ybSwgYWRkZWQgYSBzdW1tYXJ5IGZpZWxkLCBhbmQgbWFkZSBkZXNjcmlwdGlvbiBhIHRleHQgYXJlYSwgYW5kIGFsbG93IHRoZSB1c2VyIHRvIHNwZWNpZnkgYSBkZXN0aW5hdGlvbiBmaWxlIG5hbWU8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjA3LiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+QWRkZWQgdGhlIGFiaWxpdHkgdG8gcmVuYW1lIGZpbGVzIGFuZCBmaXhlZCBhIHNjYW4gZXJyb3I8L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjA4LiAtIFNlcHRlbWJlciAyMDA1PC9wPg0KPHA+QmV0dGVyIGhhbmRsaW5nIG9mIG5hbWVzIHdpdGggc3BhY2VzLCBhbmQgYSBmZXcgbWlub3IgZXJyb3JzIGZpeGVkLiAgQWRkZWQgc3dlZGlzaCB0cmFuc2xhdGlvbiAodGhhbmtzIHdlc3Rpcyk8L3A+PC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjAuIC0gT2N0b2JlciAyMDA1PC9wPg0KIDx1bD4NCiAgIDxsaT5Nb2RpZmllZCBBdHRlbXB0VXBsb2FkIGZ1bmN0aW9uIHNvIGl0IGNvdWxkIGJlIGNhbGxlZCBleHRlcm5hbGx5PC9saT4NCiAgIDxsaT5BZGRlZCBHZXRVcGxvYWREZXRhaWxzIGZ1bmN0aW9uIHRoYXQgcmV0dXJucyBhbGwgb2YgdGhlIGRldGFpbHMgYWJvdXQgYSBtb2R1bGUsIGluY2x1ZGluZyBhIGxpbms8L2xpPg0KICAgPGxpPkFkZGVkIFJlZGlyZWN0cyBzbyB0aGF0IHdvcmtpbmcgd2l0aCB0aGUgbW9kdWxlIGlzIGFsb3QgbmljZXIsIGl0IHJldHVybnMgdG8gdGhlIHJpZ2h0IHRhYjwvbGk+DQogICA8bGk+Q2hhbmdlZCB0aGUgZnJvbnQgdGVtcGxhdGUgdG8gbG9vayBhIGxpdHRsZSBiZXR0ZXIgYW5kIG1ha2UgbW9yZSBzZW5zZTwvbGk+DQogICA8bGk+Rml4ZXMgdG8gdGhlIHVwbG9hZHMgc3R1ZmYgc28gdGhhdCB0aGUgZGVzY3JpcHRpb24gaXMgc2V0LCBhbmQgbmFtZSBhbmQgc3VtbWFyeSBhcmUgcHV0IGluIHRoZSByaWdodCBwbGFjZTwvbGk+DQogICA8bGk+Rml4ZXMgdG8gZXZlbiBiZXR0ZXIgaGFuZGxlIHNwYWNlcyBpbiBuYW1lczwvbGk+DQogICA8bGk+T3B0aW9uYWx5IHBsYWNlIGR1bW15IGluZGV4Lmh0bWwgZmlsZXMgaW4gZWFjaCB1cGxvYWQgZGlyZWN0b3J5PC9saT4NCiAgIDxsaT5JZiBzcGVjaWZ5aW5nIGEgZGVzdGluYXRpb24gbmFtZSwgYW5kIG5vIGV4dGVuc2lvbiBpcyBnaXZlbiwgdGhlIGV4dGVuc2lvbiBvZiB0aGUgb3JpZ2luYXRpbmcgZmlsZSAoaWYgYW55IGV4aXN0cyBpcyB1c2VkPC9saT4NCiA8L3VsPg0KIDxwPjxlbT48Yj5JbXBvcnRhbnQhPC9iPjwvZW0+PGJyLz5JdCBpcyBub3QgcG9zc2libGUgdG8gdXBncmFkZSBmcm9tIGFueSBvdGhlciB2ZXJzaW9uIG9mIHRoZSBVcGxvYWRzIG1vZHVsZSB0byAxLjEuMC4gIFRoaXMgaXMgZHVlIHRvIHNvbWUgZXJyb3JzIHRoYXQgd2VyZSBtYWRlIGluIHRoZSBkYXRhYmFzZSByb3V0aW5lcywgYW5kIGV2ZW4gaW4gdGhlIHVwZ3JhZGUgcm91dGluZSBpbiAxLjAuNi4gIFlvdSBtdXN0IGRlLWluc3RhbGwgdGhlIG9sZCB2ZXJzaW9uLCBhbmQgdGhlbiByZS1pbnN0YWxsIHRoZSBuZXcgdmVyZXNpb24uIFRoaXMgd2lsbCBjYXVzZSBzaWduaWZpY2FudCBkaWZmaWN1bHR5IGlmIHlvdSBoYXZlIGRzY3JpcHRpb25zLCBldGMsIGluIHlvdXIgdGFibGVzPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjEuIC0gT2N0b2JlciwgMjAwNTwvcD4NCjxwPkZpeGVkIGEgY291cGxlIG9mIG1pbm9yIGJ1Z3MgaW4gdGhlIEdldFVwbG9hZERldGFpbHMgYW5kIGFkZGVkIGFub3RoZXIgbGluayAob3IgYSB1cmwpIHRvIHRoZSB1cGxvYWRlZCBmaWxlLjwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS4yLiAtIE9jdG9iZXIsIDIwMDU8L3A+DQo8cD5GaXhlZCB0aGUgVVJMIGZpZWxkIGluIEdldFVwbG9hZERldGFpbHMgdG8gcmV0dXJuIGEgZG93bmxvYWQgbGluayBhbmQgYWRkZWQgYW4gYWJzdXJsIGZpZWxkIHdoaWNoIHJldHVybnMgdGhlIGFic29sdXRlIHBhdGggdG8gdGhlIGZpbGUgb24gdGhlIHdlYnNlcnZlci4gIENsaWNrcyBvbiB0aGlzIGxpbmsgd2lsbCBub3QgYmUgY291bnRlZDwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS4zLiAtIE9jdG9iZXIsIDIwMDU8L3A+DQo8cD5GaXhlZCB0aGUgdXBncmFkZSBwcm9ibGVtIGZyb20gdGhlIDEuMC54IHNlcmllcy4gIFVzZXJzIG9mIHRoZSAxLjAueCBzZXJpZXMgc2hvdWxkIGJlIGFibGUgdG8gdXBncmFkZSB0byAxLjEuMyBub3cgd2l0aCBubyBkaWZmaWN1bHR5LiA8Yj5UaG9zZSBhcmUgZmFtb3VzIGxhc3Qgd29yZHMsIHBsZWFzZSBiYWNrdXAgZmlyc3Q8L2I+LiBGaXhlZCB0aGUgY29udGVudCByZWRpcmVjdCB0aGluZ3MgdGhhdCB3ZXJlIGlycml0YXRpbmcgbWUuICBBbHNvIGFkZGVkIGNhdGVnb3J5PWFsbCB0byBsaXN0IGFsbCBvZiB0aGUgdXBsb2FkcyBpbiBhbGwgbGlzdGFibGUgY2F0ZWdvcmllcyA8ZW0+KGxldHMgYWxsIGhvcGUgSSBnb3QgdGhlIHNxbCBmaWd1cmVkIG91dCBwcm9wZXJseSk8L2VtPi48L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuNC4gLSBPY3RvYmVyLCAyMDA1PC9wPg0KPHA+QWRkZWQgdGhlIGNvdW50IHBhcmFtZXRlciB0byBsaXN0IG9ubHkgdGhlIGZpcnN0IE4gcmVjb3JkcywgYW5kIGFkZGVkICZxdW90O3N1bW1hcnlsaW5rJnF1b3Q7LCBhbmQgJnF1b3Q7Y2F0ZWdvcnkmcXVvdDsgdG8gdGhlIHRlbXBsYXRlcyBmb3Igd2VzdGlzLiAgRm9yIGV4YW1wbGVzIG9uIGhvdyB0byB1c2UgdGhlbSByZXNldCB5b3VyIHRlbXBsYXRlcyBiYWNrIHRvIGRlZmF1bHQuPC9wPjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS41LiAtIE5vdmVtYmVyLCAyMDA1PC9wPg0KPHA+QWRkZWQgZW1haWwgbm90aWZpY2F0aW9uIGFuZCBzb21lIGJ1ZyBmaXhlczwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS42LiAtIE5vdmVtYmVyLCAyMDA1PC9wPg0KPHA+QWRkZWQgYW4gYXBpIGZ1bmN0aW9uIGFuZCBmaXhlZCBzb21lIHJlZGlyZWN0aW9uIHN0dWZmPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjcuIC0gTm92ZW1iZXIsIDIwMDU8L3A+DQo8cD5Nb3JlIEFQSSBmdW5jdGlvbnMsIGFuZCBub3cgaWdub3JlIGRvdCBmaWxlcyB3aGVuIHNjYW5uaW5nLiAgRW1haWwgbm90aWZpY2F0aW9uIGlzIG5vdyBpbi48L3A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuOC4gLSBKYW51YXJ5LCAyMDA2PC9wPg0KPHA+KiBJbXByb3ZlZCBkb2NzIHdydCBhcGFjaGUgYW5kIHBocCBjb25maWdzLjwvcD4NCjxwPiogRml4ZWQgcHJvYmxlbSB3aGVyZSBmaWxlc2l6ZSB3YXMgc2hvd2luZyB1cCBhcyAwLjwvcD4NCjxwPiogTW9kaWZpZWQgcGVybWlzc2lvbnMgdG8gYmUgbW9yZSBncmFudWxhcjwvcD4NCjxwPiogQWRkZWQgc29tZSBjb21tZW50cyBhbmQgdmVyYm9zaXR5IHRvIHRoZSBjYXRlZ29yeSBhbmQgdXBsb2FkcyBmb3JtcyBpbiB0aGUgYWRtaW4gc2VjdGlvbjwvcD4NCjxwPiogQWRkZWQgJnF1b3Q7cmFuZG9tJnF1b3Q7IHNvcnQgb3JkZXI8L3A+DQo8cD4qIFNvbWUgUEhQNSBmaXhlczwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS45LiAtIEphbnVhcnksIDIwMDY8L3A+DQo8cD4qIEFkZGVkIHRoZSBhYmlsaXR5IHRvIHVwbG9hZCBhIHRodW1ibmFpbCBpbWFnZTwvcD4NCjxwPiogU29tZSBpbXByb3ZlZCBhdWRpdGluZzwvcD4NCjxwPiogeG1sIG5vdyBhZGRlZCB0byB0aGUgZGVmYXVsdCBmaWxlIHR5cGVzIChuZXcgaW5zdGFsbHMgb25seSk8L3A+DQo8cD4qIEFkZGVkIGEgY29uZmlybWF0aW9uIG1lc3NhZ2UgdG8gdGhlIHJlc2V0IHRvIGRlZmF1bHRzIGJ1dHRvbnMgb2YgdGhlIHRlbXBsYXRlIHBhZ2VzLjwvcD4NCjxwPiogQWRkZWQgdGhlIGZpbGVfZXh0ZW5zaW9ucyBwYXJhbWV0ZXIgZm9yIHRoZSB1cGxvYWQgZm9ybTwvcD4NCjxwPiogVGhlIGN1cnJlbnQgY2F0ZWdvcnkgc2VsZWN0ZWQgaW4gdGhlIGZpbGVzIGZpbHRlciBpcyBzdGlja3kuDQo8cD4qIEFkZGVkIGEgcHJlZmVyZW5jZSB0byBlbmZvcmljZSBmaWxlbmFtZSBleHRlbnNpb25zIChkZWZhdWx0cyB0byBvbik8L3A+DQo8cD4qIEFkZGVkIGEgbGluayB0byB0aGUgZWRpdCBwYWdlLCBpbiB0aGUgbmFtZSBjb2x1bW4gb2YgdGhlIGZpbGVzIGxpc3QuPC9wPg0KPHA+KiBNaW5vciBjaGFuZ2VzIHRvIHRoZSBsYXlvdXQgYW5kIHRleHQgdG8gYWRkIGNsYXJpdHkuPC9wPg0KPHA+KiBBZGRlZCBkb3dubG9hZF91cmwgYXMgYW4gYXZhaWxhYmxlIHNtYXJ0eSB0YWcgaW4gdGhlIHRlbXBsYXRlczwvcD4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjEwLiAtIEZlYnJ1YXJ5LCAyMDA2PC9wPg0KPHA+KiBTdW1tYXJ5IG5vdyBkZWZhdWx0cyB0byB0aGUgZmlsZW5hbWUgKHdpdGhvdXQgdGhlIGV4dGVuc2lvbikgaWYgbm9uZSBpcyBzcGVjaWZpZWQ8L3A+DQo8cD4qIE5vdyBjb3JyZWN0bHkgaGFuZGxlIGlmIHRoZSB0aHVtYm5haWwgZXh0ZW5zaW9uIGlzIG5vdCBpbiB0aGUgYWNjZXB0ZWQgZXh0ZW5zaW9uIGxpc3Q8L3A+DQo8cD4qIE5vIGxvbmdlciBkaXNwbGF5IGFueSBjb250ZW50IGluIHRoZSBmaWxlcyB0YWIgaWYgdGhlcmUgYXJlIG5vIGNhdGVnb3JpZXMgZGVmaW5lZDwvcD4NCjxwPiogRGlzcGxheSBhIGxpbmsgaW4gdGhlIGVycm9yIHBhZ2UgdGhhdCB0YWtlcyB5b3UgYmFjayB0byB0aGUgbWFpbiBhZG1pbiBwYW5lbDwvcD4NCjxwPiogQWxsb3cgZm9yIHJlcGxhY2luZyBvZiB1cGxvYWRlZCBmaWxlczwvcD4NCjwvbGk+DQo8bGk+DQo8cD5WZXJzaW9uIDEuMS4xMS4gLSBNYXJjaCwgMjAwNjwvcD4NCjxwPkFkZGVkIHRoZSBhYmlsaXR5IGZvciBhIGxpbmsgdG8gYSBkZXRhaWxlZCBwYWdlIHdoZW4gaW4gc3VtbWFyeSBtb2RlLjwvcD4NCjxwPlNwbGl0IHRoZSBkZWZhdWx0IGFjdGlvbiBhbmQgZGVmYXVsdGFkbWluIGFjdGlvbnMgaW50byBzZXBhcmF0ZSBmaWxlcywgZm9yIGEgYml0IG9mIG1lbW9yeSBpbXByb3ZlbWVudCwgaG9wZWZ1bGx5PC9wPg0KPHA+QWRkIHRoZSBhYmlsaXR5IHRvIHJlZGlyZWN0IHRvIGFub3RoZXIgcGFnZSBhZnRlciBhIGZyb250ZW5kIHVzZXIgdXBsb2FkZWQgYSBmaWxlPC9wPg0KPC9saT4NCjxsaT4NCjxwPlZlcnNpb24gMS4xLjEyLiAtIE1hcmNoLCAyMDA2PC9wPg0KPHA+QWRkZWQgdGhlIHNpbmdsZXN1bW1hcnkgbW9kZSB0byBkaXNwbGF5IGEgc2luZ2xlIHVwbG9hZCBpbiBzdW1tYXJ5IG1vZGU8L1A+DQo8L2xpPg0KPGxpPg0KPHA+VmVyc2lvbiAxLjEuMTMuIC0gQXByaWwsIDIwMDY8L3A+DQo8cD5BZGRlZCBvcHRpb25hbCBmaWx0ZXJpbmcgb24gdGhlIGZyb250ZW5kLCBhbmQgYSBjb3VwbGUgb2YgZXh0cmEgcGFyYW1ldGVycyB0byBnbyB3aXRoIGl0PC9wPg0KPHA+Rml4ZWQgYSBwcm9ibGVtIHdoZXJlIGl0IHdvdWxkIGFsbG93IHlvdSB0byBlbnRlciBhIGJsYW5rIHBhdGggd2hlbiBjcmVhdGluZyBhIGNhdGVnb3J5PC9wPg0KPHA+U3BsaXQgc3R1ZmYgaW50byAoc29tZSkgc2VwYXJhdGUgYWN0aW9uIGZpbGVzIGZvciBzb21lIGhvcGVmdWwgcGVyZm9ybWFuY2UgaW5jcmVhc2VzPC9wPg0KPHA+QWRkZWQgY29weXJpZ2h0IG5vdGljZXM8L3A+DQo8cD5DaGFuZ2VkIChvcHRpb25hbCkgZGVwZW5kZW5jeSBmcm9tIFVzZXJJRCB0byBGcm9udEVuZFVzZXJzIE1vZHVsZS48L3A+DQo8cD5DaGFuZ2VkIF9zY2FuRGlyZWN0b3J5IHRvIGFuIEFQSSBmdW5jdGlvbiBTY2FuRGlyZWN0b3J5IGFuZCB0aGVuIGFkZGVkIFNtYXJ0U2NhbkRpcmVjdG9yeSB0byBzY2FuIHRoZSBkaXJlY3RvcnkgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIHN1bW1hcnkgb3IgZGV0YWlsIGxpc3RpbmcgdG8gaGFuZGxlIHRoZQ0KY2FzZSB3aGVyZSBzb21lYm9keSB1cGxvYWRlZCBmaWxlcyB2aWEgRlRQIG9yIHNvbWV0aGluZyBhbmQgZGlkIG5vdCBnbyBpbnRvIHRoZSBhZG1pbiBzZWN0aW9uIHRvIHVwZGF0ZSB0aGUgY2F0ZWdvcmllcy48L3A+DQo8cD5Db3JyZWN0aW9uIHRvIGFsbCBkYiBhY2Nlc3Mgc3R1ZmYuIEhvcGVmdWxseSBwcm92aWRlcyBhIHBlcmZvcm1hbmNlIGluY3JlYXNlLjwvcD4NCjxwPkZpeGVzIHRvIHRoZSBhYm91dCBzdHVmZiwgbm93IHVzZSBDcmVhdGVQYXJhbWV0ZXI8L3A+DQo8L2xpPg0KPC91bD4nOwokbGFuZ1snZGF0ZSddID0gJ1AmYXVtbDtpdiZhdW1sO20mYXVtbDsmYXVtbDtyJmF1bWw7JzsKJGxhbmdbJ2RhdGV1cGxvYWRlZCddID0gJ0xpcyZhdW1sO3lzIHAmYXVtbDtpdiZhdW1sO20mYXVtbDsmYXVtbDtyJmF1bWw7JzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdPbGV0dWtzZXQnOwokbGFuZ1snZGVsZXRlJ10gPSAnUG9pc3RhJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnS3V2YXVzJzsKJGxhbmdbJ2Rlc3RuYW1lJ10gPSAnVXBsb2FkIEFzJzsKJGxhbmdbJ2RldGFpbF90ZW1wbGF0ZSddID0gJ0RldGFpbCBUZW1wbGF0ZSc7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnVGllZG9zdCAlcyBvbiBsYWRhdHR1Lic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdMYXRhdWtzZXQnOwokbGFuZ1snZWRpdCddID0gJ011b2trYWEnOwokbGFuZ1snZWRpdGNhdGVnb3J5J10gPSAnTXVra2FhIGthdGVnb3JpYWEnOwokbGFuZ1snZWRpdHVwbG9hZCddID0gJ011b2trYWEgdXBsb2FkaWEnOwokbGFuZ1snZXJyb3InXSA9ICdWaXJoZSEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlJ10gPSAnS2F0ZWdvcmlhIHNhbWFsbGEgcG9sdWxsYSBvbiBqbyBvbGVtYXNzYS4nOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdWaXJoZTogS2F0ZWdvcmlhIG9uIGpvIG9sZW1hc3NhISc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGVtcHR5J10gPSAnVmlyaGU6IEVpIHZvaWRhIHR1aG90YSBrYXRlZ29yaWFhIGpva2EgZWkgb2xlIHR5aGomYXVtbDshJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdWaXJoZTogS2F0ZWdvcmlhYSBlaSBsJm91bWw7eWR5ISc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnVmlyaGU6IFRpZXRva2FudGEgdmlyaGUhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknXSA9ICdWaXJoZTogVHloaiZhdW1sOyBrYXRlZ29yaWEhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ1ZpcmhlOiBUeWhqJmF1bWw7IHBvbGt1ISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnVmlyaGU6IFRpZWRvc3RvICVzIG9uIGpvIG9sZW1hc3NhISc7CiRsYW5nWydlcnJvcl9maWxlbm90Zm91bmQnXSA9ICdWaXJoZTogVGllZG9zdG9hICVzIGVpIGwmb3VtbDt5ZHkhJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ1ZpcmhlOiBLYWlra2lhIHBhcmFtZXRyZWphIGVpIG9sZSBtJmF1bWw7JmF1bWw7cml0ZWx0eSBtb2R1bGkga3V0c3Vzc2EhJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRhdXRob3InXSA9ICdWaXJoZTogdmlyaGVlbGxpbmVuICh0YWkgdHloaiZhdW1sOykgdGVraWomYXVtbDsnOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnVmlyaGU6IHZpcmhlZWxsaW5lbiAodGFpIHR5aGomYXVtbDspIGthdGVnb3JpYSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdWaXJoZTogdmlyaGVlbGxpbmVuICh0YWkgdHloaiZhdW1sOykga3V2YXVzJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRmaWxlJ10gPSAnVmlyaGU6IHZpcmhlZWxsaW5lbiAodGFpIHR5aGomYXVtbDspIHRpZWRvc3RvbmltaSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkZmlsZW5hbWUnXSA9ICdWaXJoZTogdmlyaGVlbGxpbmVuIHRpZWRvc3RvbmltaSAodGFpIHAmYXVtbDsmYXVtbDt0ZSkgKCVzKSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdWaXJoZTogdmlyaGVlbGxpbmVuIGxhdGF1cyBpZCc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzJ10gPSAnVmlyaGU6IGVpIHZhc3RhYXZpYSB0aWVkb3N0b2phISc7CiRsYW5nWydmaWxlcyddID0gJ1RpZWRvc3RvdCc7CiRsYW5nWydmaXhtZSddID0gJ0tvcmphYSB2JmF1bWw7bGlseSZvdW1sO25uaXQnOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnVGllZG9zdG90IChVcGxvYWRzIE1vZHVsZSknOwokbGFuZ1snaGVscCddID0gJzxoMz5XaGF0IERvZXMgVGhpcyBEbz88L2gzPg0KPHA+SXQgaXMgYSBtb2R1bGUgZm9yIGFsbG93aW5nIHBlb3BsZSB0byB1cGxvYWQgYW5kIGRvd25sb2FkIGZpbGVzIHRvIGFuZCBmcm9tIHlvdXIgc2l0ZS4gIEl0IGtlZXBzIHRyYWNrIG9mIHdobyB1cGxvYWRlZCBhIGZpbGUsIGFuZCB3aG8gaGFzIGRvd25sb2FkZWQgaXQuICBBcyB3ZWxsLCB5b3UgY2FuIHNvcnQgZmlsZXMgaW50byBjYXRlZ29yaWVzLCBhbmQgbWFuYWdlIHRoZSBmaWxlcyB0aGF0IHdlcmUgdXBsb2FkZWQgbGlrZSBldmVyeSBhZG1pbmlzdHJhdG9yIHdvdWxkIGRvPC9wPiANCjxoMz5Ib3cgRG8gSSBVc2UgSXQ8L2gzPg0KPHA+VG8gdXNlIHRoaXMgbW9kdWxlLCB0byBhbGxvdyB1c2VycyB0byB1cGxvYWQgZmlsZXMgdG8geW91ciBzaXRlLCB5b3Ugc2hvdWxkIGluc3RhbGwgdGhlIG1vZHVsZSwgYW5kIHRoZW4gY3JlYXRlIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgKGEuay5hKSBkaXJlY3RvcmllcyBmb3IgdGhlIHVwbG9hZGVkIGZpbGVzIHRvIGdvIGludG8uIFRoZW4gYWRkIGEgdGFnIGludG8gYSBwYWdlIG9yIHRlbXBsYXRlIHNvbWV3aGVyZSBsaWtlIHtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDtVcGxvYWRzJnF1b3Q7IGNhdGVnb3J5PSZxdW90O3NvbWVjYXRlZ29yeSZxdW90OyBtb2RlPSZxdW90O3NvbWVtb2RlJnF1b3Q7fS4gIFdoZXJlIG1vZGUgbWF0Y2hlcyBvbmUgb2YgdGhlIG1vZGVzIGxpc3RlZCBiZWxvdy4gIFRoZSBvdXRwdXQgd2lsbCBkaWZmZXIgZGVwZW5kaW5nIHVwb24gd2hpY2ggbW9kZSB5b3Ugc2VsZWN0LjwvcD4NCjxwPlRoaXMgbW9kdWxlIGNhbiB1c2UgdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIChvcHRpb25hbCkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIHRvIHBhcnRseSBmaWxsIGluIHRoZSBmb3JtIHdoZW4gdXBsb2FkaW5nIGZpbGVzOzwvcD4NCjxoMz5QZXJtaXNzaW9uczwvaDM+DQo8dWw+DQo8bGk+PGVtPk1hbmFnZSBVcGxvYWRzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgdG8gbWFuYWdlIGNhdGVnb3JpZXMsIGFuZCB0aGUgZmlsZXMgd2l0aGluIHRoZW0uPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFRlbXBsYXRlczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGVkaXQgYW55IG9mIHRoZSB0ZW1wbGF0ZXMuPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGFueSBvZiB0aGUgZmlsZSBzZXR0aW5ncy48L2xpPg0KPC91bD4NCjxoMz5FbWFpbGluZzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW4gZW1haWwgd2hlbmV2ZXIgYSBmaWxlIGlzIHVwbG9hZGVkLCBzZWUgdGhlIHByZWZlcmVuY2VzIHRhYi4gIEhvd2V2ZXIsIHRvIGRvIHRoaXMgdGhlIDxiPkNNU01haWxlcjwvYj4gcGFja2FnZSBtdXN0IGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC4gIFRoaXMgaXMgYW4gPGVtPm9wdGlvbmFsPC9lbT4gc3RlcCwgYW5kIGlmIHRoZSBDTVNNYWlsZXIgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQsIG5vdGhpbmcgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIG9ubHkgYSBsb2cgbWVzc2FnZSB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBhZG1pbiBsb2c8L3A+DQo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4NCjxwPjxiPk5vdGU6PC9iPiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBieXBhc3Mgb3IgZ2V0IHBhc3QgYW55IGZpbGUgc2l6ZSBsaW1pdGF0aW9ucyBpbiBwaHAuICBJdCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZW0uICBUaGVyZWZvcmUgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB5b3VyIHBocC5pbmkgZmlsZSBhbmQvb3IgeW91ciBodHRwZC5jb25mIGZpbGUocykgdG8gYWxsb3cgeW91IHRvIHVwbG9hZCBmaWxlcyBhcyBsYXJnZSBhcyB3aGF0IHlvdSBoYXZlIHNldCBpbiB0aGUgdXBsb2FkcyBtb2R1bGUgcHJlZmVyZW5jZXMuPC9wPg0KPGgzPkFwYWNoZSBOb3RlczwvaDM+DQo8cD5JbiBvcmRlciB0byBhbGxvdyBsYXJnZSBmaWxlIHVwbG9hZHMsIHlvdSBtYXkgbmVlZCB0byBtb2RpZnkgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGluIHlvdXIgcGhwLmluaSAgSW4gYWRkaXRpb24sIHRoZSBMaW1pdFJlcXVlc3RCb2R5IHBhcmFtZXRlciBpbiB5b3VyIGFwYWNoZSBjb25maWd1cmF0aW9uLCBtYXkgbmVlZCB0byBiZSBhZGp1c3RlZCB0byBtYXRjaCB0aGUgdXBsb2FkX21heF9maWxlc2l6ZSBwYXJhbWV0ZXI8L3A+DQo8cD5Ob3RlOiAgdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyIGNhbiBiZSBzcGVjaWZpZWQgaW4gYnl0ZXMsIGtpbG9ieXRlcywgb3IgbWVnYWJ5dGVzLCBob3dldmVyIHRoZSBMaW1pdFJlcXVldEJvZHkgcGFyYW1ldGVyIGlzIG9ubHkgc3BlY2lmaWVkIGluIGJ5dGVzPC9wPic7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHV1bGluIHZlcnNpbyAlcyBhc2VubmV0dHUuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUCBvc29pdGUnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdNb2R1dWxpLCBqb2thIHNhbGxpaSBrJmF1bWw7eXR0JmF1bWw7amllbiBsYWRhdGEgdGllZG9zdG9qYSBzaXZ1c3RvbGxlIGphIHlsbCZhdW1sO3BpdCZhdW1sO2omYXVtbDtuIGhhbGxpdGEgbiZhdW1sO2l0JmF1bWw7IHRpZWRvc3RvamEgJzsKJGxhbmdbJ25hbWUnXSA9ICdOaW1pJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdWYWloZGEgbmltaSB0YWkgdGVlIHV1ZGVsbGVlbm5pbWUmYXVtbDttaW5lbic7CiRsYW5nWydwYXRoJ10gPSAnUG9sa3UnOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICdWYWloZGEga2F0ZWdvcmlhbiBuaW1pIHRhaSBzaWlyciZhdW1sOyB0aWVkb3N0byB0b2lzZWVuIGhha2VtaXN0b29uJzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcoU3VodGVlbGxpbmVuIHBvbGt1IHVwbG9hZHMtaGFrZW1pc3Rvb24gbiZhdW1sO2hkZW4pJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnUG9zdCBJbnN0YWxsIE1lc3NhZ2UsIGUuZy4sIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1RoZSBVcGxvYWRzIG1vZHVsZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgcmVtb3ZlZC4gIE5vIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20geW91ciB1cGxvYWRzIGRpcmVjdG9yeSwgYW5kIGZpbGUgaW50ZWdyaXR5IGlzIGludGFjdCc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ0FzZXR1a3NldCc7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bGluIGFzZXR1a3NldCBwJmF1bWw7aXZpdGV0dHknOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVzYyddID0gJ0t1dmF1cyc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ1RpZWRvc3RvdCB0JmF1bWw7c3MmYXVtbDsgaGFrZW1pc3Rvc3NhIHZvaWRhYW4gbGlzdGF0YSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnluYW1lJ10gPSAnS2F0ZWdvcmlhbiBuaW1pJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeXBhdGgnXSA9ICdQYWx2ZWxpbWVuIHBvbGt1JzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdUdWhvYSBrYXRlZ29yaWFuIGhha2VtaXN0bz8nOwokbGFuZ1sncHJvbXB0X21heF91cGxvYWRzaXplJ10gPSAnTWFrc2ltaSB0aWVkb3N0b2tva28gKEtiKSc7CiRsYW5nWydwcm9tcHRfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0h5diZhdW1sO2tzeXR5dCB0aWVkb3N0b3AmYXVtbDsmYXVtbDt0dGVldCc7CiRsYW5nWydzY2FuJ10gPSAnU2thbm5hYSc7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1ZhbGl0c2Uga2F0ZWdvcmlhJzsKJGxhbmdbJ3NpemUnXSA9ICdLb2tvJzsKJGxhbmdbJ3NpemVrYiddID0gJ0tva28gKEtiKSc7CiRsYW5nWydzdWJtaXQnXSA9ICdMJmF1bWw7aGV0JmF1bWw7JzsKJGxhbmdbJ3N1bW1hcnlfdGVtcGxhdGUnXSA9ICdLb29zdGUgcG9oamEnOwokbGFuZ1snc3VtbWFyeSddID0gJ0tvb3N0ZSc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1VwbG9hZHMgTW9kdWxlJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsaW4gaGFsbGludGFwYW5lZWxpJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsaW4gYXNldHVrc2V0JzsKJGxhbmdbJ3RpdGxlX3NpbmdfbG91ZGx5J10gPSAnU2luZyBMb3VkbHk/JzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnJkF1bWw7bCZhdW1sOyBrZXImYXVtbDsmYXVtbDsgc3RhdGlzdGlpa2thIGFsaXZlcmtvaXN0YSc7CiRsYW5nWyd0aXRsZV92YWxpZF91cGxvYWRleHRlbnNpb25zJ10gPSAnSHl2JmF1bWw7a3N5dHl0IHRpZWRvc3RvcCZhdW1sOyZhdW1sO3R0ZWV0JzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxpIHBvaXN0ZXR0dSc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsaSBwJmF1bWw7aXZpdGV0dHkgdmVyc2lvb24gJXMuJzsKJGxhbmdbJ3VwbG9hZCddID0gJ0xhdGFhJzsKJGxhbmdbJ3VwbG9hZGVkJ10gPSAnVGllZG9zdG8gJXMgb24gdXBsb2FkYXR0dSBrJmF1bWw7eXR0JmF1bWw7aiZhdW1sO24gJXMgdG9pbWVzdGEuJzsKJGxhbmdbJ3JlcGxhY2VkJ10gPSAnVGllZG9zdG8gJXMgb24ga29ydmF0dHUgdGllZG9zdG9sbGEgJXMuJzsKJGxhbmdbJ2RlbGV0ZWQnXSA9ICdUaWVkb3N0byAlcyBvbiBwb2lzdGV0dHUuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdVcGxvYWQgVGVtcGxhdGUnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdLJmF1bWw7eXR0JmF1bWw7aiZhdW1sO25pbWknOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ1ZBUk9JVFVTOiBLYXRlZ29yaW9pZGVuIHR1aG9hbWluZW4gc2FhdHRhYSBrYWRvdHRhYSB0aWVkb3N0b2phJzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPldlbGNvbWUgdG8gdGhlIFVwbG9hZHMgTW9kdWxlIGFkbWluIHNlY3Rpb24uIFNvbWV0aGluZyBlbHNlIHdvdWxkIHByb2JhYmx5IGdvIGhlcmUgaWYgdGhlIG1vZHVsZSBhY3R1YWxseSBkaWQgc29tZXRoaW5nLjwvcD4nOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xOTU5NTQ3MTkzLjEyMTM4NjU3ODMuMTIxMzg3NzY0Ny4xMjEzODgxMzU3LjUnOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyMTM4ODEzNTcuNS4zLnV0bWNjbj0ocmVmZXJyYWwpfHV0bWNzcj1kZXYuY21zbWFkZXNpbXBsZS5vcmd8dXRtY2N0PS9mb3J1bS9mb3J1bS5waHB8dXRtY21kPXJlZmVycmFsJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/fr_FR.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX21pc3Npbmd2YWx1ZSddID0gJ1VuZSB2YWxldXIgcmVxdWlzZSBlc3QgbWFucXVhbnRlJzsKJGxhbmdbJ2VkaXRlZCddID0gJ01vZGlmaSZlYWN1dGU7IGxlICVzJzsKJGxhbmdbJ21vdmVkZmlsZSddID0gJ0QmZWFjdXRlO3BsYWNlbWVudCBkdSBmaWNoaWVyICVzIHZlcnMgJXMnOwokbGFuZ1sncGFnZWxpbWl0J10gPSAnRmljaGllcnMgcGFyIHBhZ2UnOwokbGFuZ1sndmlldyddID0gJ1ZvaXIgY2UgZmljaGllcic7CiRsYW5nWydlZGl0X3RoaXNfZmlsZSddID0gJ0VkaXRlciBjZSBjaGFtcCc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlfc2Nhbm5hYmxlJ10gPSAnU2Nhbm5lciBhdXRvbWF0aXF1ZW1lbnQgbGEgY2F0JmVhY3V0ZTtnb3JpZSBwb3VyIHRyb3V2ZXIgbGVzIG5vdXZlYXV4IGZpY2hpZXJzID8nOwokbGFuZ1snaW5mb19jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdRdWFuZCBjZXR0ZSBjYXQmZWFjdXRlO2dvcmllIGVzdCB2dWUgZGVwdWlzIGxlIHNpdGUgKEZyb250RW5kKSwgZWxsZSBlc3QgYXV0b21hdGlxdWVtZW50IHNjYW5uJmVhY3V0ZTtlICZhZ3JhdmU7IGxhIHJlY2hlcmNoZSBkZSBub3V2ZWF1eCBmaWNoaWVycyc7CiRsYW5nWydwcm9tcHRfdGxfYWNjZXNzJ10gPSAnQWNjJmVncmF2ZTtzIHRlbXBvcmFpcmUnOwokbGFuZ1sncHJvbXB0X2FsbG93X3VwbG9hZF9zZW5kZmlsZSddID0gJ0F1dG9yaXNlIGwmIzAzOTtlbnZvaSBpbW0mZWFjdXRlO2RpYXQgZGUgZmljaGllcnMgcG91ciBsJiMwMzk7dXBsb2FkIGQmIzAzOTthZG1pbic7CiRsYW5nWydtc2dfYXV0b19kZWxldGVfZmlsZSddID0gJ0VmZmFjZXIgYXV0b21hdGlxdWVtZW50IGxlcyBmaWNoaWVycyBleHBpciZlYWN1dGU7cyA6ICVzJzsKJGxhbmdbJ21zZ19hdXRvX2RlbGV0ZV9maWxlX2ZhaWxlZCddID0gJ0wmIzAzOTthdXRvLWVmZmFjZW1lbnQgZGUgJXMgYSAmZWFjdXRlO2Nob3UmZWFjdXRlOyAocHJvYmwmZWdyYXZlO21lIGRlIHBlcm1pc3Npb25zKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnSW5kaXF1ZXIgdW4gbm9tYnJlIGQmIzAzOTtoZXVyZXMgYXZhbnQgcXVlIGxlcyBmaWNoaWVycyBkZSBjZXR0ZSBjYXQmZWFjdXRlO2dvcmllIG5lIHB1aXNzZSAmZWNpcmM7dHJlIHN1cHByaW0mZWFjdXRlO3MuIFV0aWxpc2VyIGxhIHZhbGV1ciAwIHBvdXIgaW5kaXF1ZXIgcXVlIGxlcyBmaWNoaWVycyBuZSBkb2l2ZW50IHBhcyAmZWNpcmM7dHJlIHN1cHByaW0mZWFjdXRlO3MuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ05vbWJyZSBkJiMwMzk7aGV1cmVzIGF2YW50IHF1ZSBsZXMgZmljaGllcnMgZGUgY2V0dGUgY2F0JmVhY3V0ZTtnb3JpZSBuZSBzb2llbnQgc3VwcHJpbSZlYWN1dGU7cyBhdXRvbWF0aXF1ZW1lbnQnOwokbGFuZ1snaW5mb19kZmx0X2NhdGVnb3J5X2V4cGlyeSddID0gJ0xhIHZhbGV1ciBwYXIgZCZlYWN1dGU7ZmF1dCBwb3VyIGxlcyBub3V2ZWxsZXMgY2F0JmVhY3V0ZTtnb3JpZXMgcXVpIHNwJmVhY3V0ZTtjaWZpZSBsZSBub21icmUgZCYjMDM5O2hldXJlcyBhdmFudCBxdWUgbGVzIGZpY2hpZXJzIGRlIGNldHRlIGNhdCZlYWN1dGU7Z29yaWUgbmUgc29pZW50IHN1cHByaW0mZWFjdXRlO3MgYXV0b21hdGlxdWVtZW50LiAgVXRpbGlzZXIgbGEgdmFsZXVyIDAgcG91ciBpbmRpcXVlciBhdWN1bmUgc3VwcHJlc3Npb24nOwokbGFuZ1sndGl0bGVfY2F0ZWdvcnlfZXhwaXJ5J10gPSAnUCZlYWN1dGU7cmlvZGUgZCYjMDM5O2V4cGlyYXRpb24gZGUgbGEgY2F0JmVhY3V0ZTtnb3JpZTxlbT4oaHJzKTwvZW0+JzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdMZXMgdXRpbGlzYXRldXJzIGF1dG9yaXMmZWFjdXRlO3MgYXVyb250IGxhIHBlcm1pc3Npb24gZGUgc3VwcHJpbWVyIGNlcyBmaWNoaWVycy4gQ2VsYSBzaWduaWZpZSBxdSYjMDM5O3VuIHVybCBzZXJhIGZvdXJuaSBkYW5zIGxlcyBnYWJhcml0cyBhcHByb3ByaSZlYWN1dGU7cyBwb3VyIHBlcm1ldHRyZSBsYSBzdXBwcmVzc2lvbiBkZXMgZmljaGllcnMuIFVuIGQmZWFjdXRlO3ZlbG9wcGV1ciBkZSBzaXRlIHdlYiBwZXV0IHV0aWxpc2VyIHVuZSBsb2dpcXVlIFNtYXJ0eSBhcHByb3ByaSZlYWN1dGU7ZSBwb3VyIGFmZmljaGVyIHVuIGxpZW4gYXV4IHV0aWxpc2F0ZXVycyBhdXRvcmlzJmVhY3V0ZTtzLic7CiRsYW5nWydjb3B5X2ZpbGVzJ10gPSAnQ29waWVyIGxlcyBmaWNoaWVycyc7CiRsYW5nWydlcnJvcl9maWxldG9vbGFyZ2UnXSA9ICdMZSBmaWNoaWVyIHF1ZSB2b3VzIGF2ZXogdGVudCZlYWN1dGU7IGQmIzAzOTtlbnZveWVyIGVzdCBwbHVzIGdyb3MgcXVlIGxhIHRhaWxsZSBtYXhpbWFsZSBhdXRvcmlzJmVhY3V0ZTtlIHBhciBDTVNNUyc7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWNhdGVnb3J5J10gPSAnRXRlcyB2b3VzIHMmdWNpcmM7cihlKSBkZSB2b3Vsb2lyIGVmZmFjZXIgY2V0dGUgY2F0JmVhY3V0ZTtnb3JpZSA/JzsKJGxhbmdbJ2Vycm9yX2RlbGV0ZSddID0gJ1VuICZlYWN1dGU7bCZlYWN1dGU7bWVudCBuZSBwZXV0IHBhcyAmZWNpcmM7dHJlIGVmZmFjJmVhY3V0ZTsgKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ0V0ZXMgdm91cyBzJnVjaXJjO3IoZSkgZGUgdm91bG9pciBleCZlYWN1dGU7Y3V0ZXIgY2V0dGUgYWN0aW9uIHN1ciBsZXMgY2F0JmVhY3V0ZTtnb3JpZXMgcyZlYWN1dGU7bGVjdGlvbm4mZWFjdXRlO2VzID8nOwokbGFuZ1snZXJyb3Jfbm90aGluZ19zZWxlY3RlZCddID0gJ0VycmV1ciA6IHZvdXMgbiYjMDM5O2F2ZXogcmllbiBzJmVhY3V0ZTtsZWN0aW9ubiZlYWN1dGU7JzsKJGxhbmdbJ3dpdGhfc2VsZWN0ZWQnXSA9ICdBdmVjIGxhIHMmZWFjdXRlO2xlY3Rpb24nOwokbGFuZ1snZXJyb3JfcmVwbGFjZV9taXNtYXRjaGVkX2ZpbGVleHQnXSA9ICdRdWFuZCB2b3VzIHJlbXBsYWNleiB1biBmaWNoaWVyLCBjZXV4LWNpIGRvaXZlbnQgYXZvaXIgbGEgbSZlY2lyYzttZSBleHRlbnNpb24gKHBhciBleCAucGRmKS4gTGEgbm91dmVsbGUgdmVyc2lvbiBkdSBmaWNoaWVyIG4mIzAzOTthIHBhcyBsYSBtJmVjaXJjO21lIGV4dGVuc2lvbiBxdWUgbGUgZmljaGllciBvcmlnaW5hbC4nOwokbGFuZ1sncmVwbGFjZSddID0gJ1JlbXBsYWNlcic7CiRsYW5nWydpbmZvX3JlcGxhY2VmaWxlJ10gPSAnVm91cyBwb3V2ZXogZW52b3llciB1biBmaWNoaWVyIGRlIHJlbXBsYWNlbWVudC4gU2kgY2UgZmljaGllciBlc3QgdW5lIGltYWdlLCBldCBxdWUgdm91cyBuJiMwMzk7YXZleiBwYXMgdHJhbnNtaXMgZGUgdmlnbmV0dGUgZGUgcmVtcGxhY2VtZW50LCB1bmUgdmlnbmV0dGUgc2VyYSBnJmVhY3V0ZTtuJmVhY3V0ZTtyJmVhY3V0ZTtlIGF1dG9tYXRpcXVlbWVudCc7CiRsYW5nWydwcm9tcHRfcmVwbGFjZWZpbGUnXSA9ICdOb3V2ZWxsZSB2ZXJzaW9uIGR1IGZpY2hpZXInOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnRW5sZXZleiBsZXMgZXNwYWNlcyBkYW5zIGxlIG5vbSBkdSBmaWNoaWVyJzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0NhdCZlYWN1dGU7Z29yaWUgY29waSZlYWN1dGU7ZSBhdmVjIHN1Y2MmZWdyYXZlO3MgISc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVwYXRoJ10gPSAnVmV1aWxsZXogc3AmZWFjdXRlO2NpZmllciB1biBub20gZGUgciZlYWN1dGU7cGVydG9pcmUgZGlmZiZlYWN1dGU7cmVudCBkZSBsYSBzb3VyY2UgZXQgcXVpIG4mIzAzOTtlc3QgcGFzIGQmZWFjdXRlO2omYWdyYXZlOyB1dGlsaXMmZWFjdXRlOyc7CiRsYW5nWydvcGVyYXRpb25fY2FuY2VsbGVkJ10gPSAnT3AmZWFjdXRlO3JhdGlvbiBhbm51bCZlYWN1dGU7ZSc7CiRsYW5nWydzb3VyY2UnXSA9ICdTb3VyY2UgJzsKJGxhbmdbJ2Rlc3RpbmF0aW9uJ10gPSAnRGVzdGluYXRpb24gJzsKJGxhbmdbJ3Byb21wdF9jb3B5X2ZpbGVzJ10gPSAnQ29waWVyIGxlcyBmaWNoaWVycyBkZSBsYSBjYXQmZWFjdXRlO2dvcmllJzsKJGxhbmdbJ2luZm9fY29weV9maWxlcyddID0gJ0NvcGllIGxlcyBmaWNoaWVycyBkZSBsYSBjYXQmZWFjdXRlO2dvcmllIHNvdXJjZSB2ZXJzIGxhIGNhdCZlYWN1dGU7Z29yaWUgZGUgZGVzdGluYXRpb24nOwokbGFuZ1snZXh0cmEnXSA9ICdFeHRyYSAnOwokbGFuZ1snY29weSddID0gJ0NvcGllcic7CiRsYW5nWydzZWxlY3RvbmUnXSA9ICdDaG9pc2lzc2V6IHVuJzsKJGxhbmdbJ2F1dG93YXRlcm1hcmsnXSA9ICdNZXR0cmUgZGVzIHZpZ25ldHRlcyBzdXIgbGVzIGltYWdlcyBhdXRvbWF0aXF1ZW1lbnQnOwokbGFuZ1snaW1hZ2Vfc2V0dGluZ3MnXSA9ICdSJmVhY3V0ZTtnbGFnZXMgZGVzIGltYWdlcyc7CiRsYW5nWydwcm9tcHRfZ2V0ZmlsZV9yZXN1bHRwYWdlJ10gPSAnUGFnZSB1dGlsaXMmZWFjdXRlO2UgcG91ciBsZXMgZXJyZXVycyBvdSBsZXMgbWVzc2FnZXMgZW4gbGllbiBhdmVjIGxlIHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnQgZGUgZmljaGllcnMnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9rZXknXSA9ICdMYSBjbCZlYWN1dGU7IHRlbXBvcmFpcmUgZGUgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudCBlc3QgaW52YWxpZGUgKHBldXQgJmVjaXJjO3RyZSBxdSYjMDM5O2VsbGUgYSBhdHRlaW50IHNhIGNhcGFjaXQmZWFjdXRlOyBtYXhpbWFsZSBkZSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZ2VtZW50IG91IHF1JiMwMzk7ZWxsZSBhIGV4cGlyJmVhY3V0ZTspJzsKJGxhbmdbJ2RmbHRfdGltZWxpbWl0ZWRfc3ViamVjdCddID0gJ3skc2l0ZW5hbWV9IC0gVm91cyBhdmV6IHVuIGFjYyZlZ3JhdmU7cyB0ZW1wb3JhaXJlICZhZ3JhdmU7IHskZW50cnktPnVwbG9hZF9uYW1lfHN0cmlwX3RhZ3N9JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnU3VqZXQgcG91ciBsJiMwMzk7ZW1haWwgY3ImZWFjdXRlOyZlYWN1dGU7IHF1YW5kIG9uIGVudm9pIHVuZSBVUkwgdGVtcG9yYWlyZSc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfYXV0b2RlbGV0ZSddID0gJ0VmZmFjZXIgYXV0b21hdGlxdWVtZW50IGxlcyBmaWNoaWVycyBleHBpciZlYWN1dGU7cyBhcHImZWdyYXZlO3MgTiBoZXVyZXMgPGVtPihtZXR0cmUgJmFncmF2ZTsgMCBwb3VyIG5lIHBhcyB1dGlsaXNlciBjZXR0ZSBmb25jdGlvbik8L2VtPiA6JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zZW5kaXQnXSA9ICdFbnZveWVyIGNldHRlIHVybCAmYWdyYXZlOyBsJiMwMzk7YWRyZXNzZSBlbWFpbCBkJmVhY3V0ZTtzaWduJmVhY3V0ZTtlID8nOwokbGFuZ1sndXJsX2tleSddID0gJ0NsJmVhY3V0ZTsgVVJMJzsKJGxhbmdbJ2NyZWF0ZWQnXSA9ICdDciZlYWN1dGU7JmVhY3V0ZTsnOwokbGFuZ1snZXhwaXJlcyddID0gJ0V4cGlyZSc7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0Fqb3V0ZXIvbW9kaWZpZXIgdW5lIGNsJmVhY3V0ZTsgdGVtcG9yYWlyZSc7CiRsYW5nWyd0aW1lX2xpbWl0ZWRfa2V5X2FkZGVkJ10gPSAnQ2wmZWFjdXRlOyBsaW1pdCZlYWN1dGU7ZSBkYW5zIGxlIHRlbXBzIGFqb3V0JmVhY3V0ZTtlJzsKJGxhbmdbJ251bV9ob3VycyddID0gJ05vbWJyZSBkJiMwMzk7aGV1cmVzJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdOb21icmUgZGUgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudHMnOwokbGFuZ1snZW1haWxfYWRkcmVzcyddID0gJ0FkcmVzc2UgZW1haWwnOwokbGFuZ1snZXJyb3JfbWlzc2luZ19pbnZhbGlkJ10gPSAnVW5lIHZhbGV1ciBuJmVhY3V0ZTtjZXNzYWlyZSBlc3QgbWFucXVhbnRlIG91IGVycm9uJmVhY3V0ZTtlIDogJXMnOwokbGFuZ1snYWRkX3RpbWVsaW1pdGVkX2tleSddID0gJ0Fqb3V0ZXIgdW5lIGNsJmVhY3V0ZTsgbGltaXQmZWFjdXRlO2UgZGFucyBsZSB0ZW1wcyc7CiRsYW5nWydmaWxlX2luZm8yJ10gPSAnRmljaGllciAlcyAoaWQ9JWQpJzsKJGxhbmdbJ2luZm9fdGltZWxpbWl0ZWRfZG93bmxvYWRzJ10gPSAnU3AmZWFjdXRlO2NpZmlleiBsZSBub21icmUgbWF4aW1hbCBkZSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZ2VtZW50IHBvdXIgdW4gZmljaGllciBpZGVudGlmaSZlYWN1dGU7IHBhciB1bmUgY2wmZWFjdXRlOyBwYXJ0aWN1bGkmZWdyYXZlO3JlJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdOb21icmUgZGUgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudHMgcGFyIGQmZWFjdXRlO2ZhdXQnOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9ob3VycyddID0gJ1NwJmVhY3V0ZTtjaWZpZXIgbGUgbm9tYnJlIGQmIzAzOTtoZXVyZXMgcGFzIGQmZWFjdXRlO2ZhdXQgcG91ciBsYSB2YWxpZGl0JmVhY3V0ZTsgZCYjMDM5O3VuZSBjbCZlYWN1dGU7IHRlbXBvcmFpcmUuIFNwJmVhY3V0ZTtjaWZpZXIgMCBwb3VyIHVuZSBjbCZlYWN1dGU7IHBlcm1hbmVudGUuJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9ob3VycyddID0gJ0R1ciZlYWN1dGU7ZSBlbiBoZXVyZXMgcG91ciB1bmUgY2wmZWFjdXRlOyB0ZW1wb3JhaXJlJzsKJGxhbmdbJ3RpbWVsaW1pdGVkX3VybF9zZXR0aW5ncyddID0gJ1ImZWFjdXRlO2dsYWdlcyBwb3VyIGxhIGNsJmVhY3V0ZTsgdGVtcG9yYWlyZSc7CiRsYW5nWydtYW5hZ2VfdGltZWxpbWl0ZWQnXSA9ICdHJmVhY3V0ZTtyZXIgbCYjMDM5O2FjYyZlZ3JhdmU7cyB2aWEgbGEgY2wmZWFjdXRlOyB0ZW1wb3JhaXJlJzsKJGxhbmdbJ3VwbG9hZGluZ19zZXR0aW5ncyddID0gJ1ImZWFjdXRlO2dsYWdlcyBwb3VyIGwmIzAzOTt1cGxvYWQgZGUgZmljaGllcnMnOwokbGFuZ1snZ2VuZXJhbF9zZXR0aW5ncyddID0gJ1ImZWFjdXRlO2dsYWdlcyBHJmVhY3V0ZTtuJmVhY3V0ZTtyYXV4JzsKJGxhbmdbJ3RodW1ibmFpbF9zZXR0aW5ncyddID0gJ0cmZWFjdXRlO24mZWFjdXRlO3JhdGlvbiBkZSB2aWduZXR0ZXMnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdQYWdlIG8mdWdyYXZlOyByZWRpcmlnZXIgYXByJmVncmF2ZTtzIGF2b2lyIGVudm95JmVhY3V0ZTsgdW4gZmljaGllcic7CiRsYW5nWydsYmxfYmFjayddID0gJ1JldG91cic7CiRsYW5nWydsYmxfdGVtcGxhdGVzJ10gPSAnTW9kaWZpZXIgbGVzIGdhYmFyaXRzJzsKJGxhbmdbJ3Byb21wdF9wdWJsaWNfZmllbGQnXSA9ICdMZSBjaGFtcCBlc3QgcHVibGljIDxlbT4odmlzaWJsZSBwb3VyIGxlcyB2aXNpdGV1cnMpPC9lbT4nOwokbGFuZ1sndXBsb2FkX2VkaXRlZCddID0gJ0QmZWFjdXRlO3RhaWxzIGR1IGZpY2hpZXJzICZlYWN1dGU7ZGl0JmVhY3V0ZTtzIGxlICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnVW4gZmljaGllciB2aWduZXR0ZSBmYWN1bHRhdGlmJzsKJGxhbmdbJ3VwbG9hZF9maWxlJ10gPSAnRW52b3llciB1biBub3V2ZWF1IGZpY2hpZXInOwokbGFuZ1snbXNnX2ZpZWxkX2RlbGV0ZWQnXSA9ICdDaGFtcCBlZmZhYyZlYWN1dGU7JzsKJGxhbmdbJ2Fza19kZWxldGVfZmllbGQnXSA9ICdFdGVzIHZvdXMgcyZ1Y2lyYztyKGUpIGRlIHZvdWxvaXIgZWZmYWNlciBjZXR0ZSBkJmVhY3V0ZTtmaW5pdGlvbiBkZSBjaGFtcHMgZXQgdG91dGVzIGxlcyBkb25uJmVhY3V0ZTtlcyBhc3NvY2kmZWFjdXRlO2VzID8nOwokbGFuZ1sneWVzJ10gPSAnT3VpJzsKJGxhbmdbJ25vJ10gPSAnTm9uJzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXBlICc7CiRsYW5nWydmaWVsZHR5cGVfbXVsdGlzZWxlY3QnXSA9ICdMaXN0ZSBhdmVjIGNob2l4IG11bHRpcGxlcyc7CiRsYW5nWydmaWVsZHR5cGVfZHJvcGRvd24nXSA9ICdMaXN0ZSBkJmVhY3V0ZTtyb3VsYW50ZSc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdCbyZpY2lyYzt0ZSAmYWdyYXZlOyBjb2NoZXInOwokbGFuZ1snZmllbGR0eXBlX3RleHRhcmVhJ10gPSAnWm9uZSBkZSB0ZXh0ZSc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGlucHV0J10gPSAnRW50ciZlYWN1dGU7ZSB0ZXh0ZSc7CiRsYW5nWydwcm9tcHRfdXNlX3d5c2l3eWcnXSA9ICdVdGlsaXNlciBsJiMwMzk7JmVhY3V0ZTtkaXRldXIgV1lTSVdZRyBwb3VyIG1vZGlmaWVyIGxlcyB2YWxldXJzIGRlIGNlIGNoYW1wJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0X2NvbnRlbnQnXSA9ICdDb250ZW51IHBhciBkJmVhY3V0ZTtmYXV0IHBvdXIgdW5lIHpvbmUgZGUgdGV4dGUnOwokbGFuZ1sncHJvbXB0X2Ryb3Bkb3duX29wdGlvbnMnXSA9ICdPcHRpb25zICh1bmUgcGFyIGxpZ25lKSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbWF4bGVuZ3RoJ10gPSAnTG9uZ3VldXIgbWF4aW1hbGUgZHUgY2hhbXAnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0xvbmd1ZXVyIGR1IGNoYW1wJzsKJGxhbmdbJ3Byb21wdF9maWVsZF90eXBlJ10gPSAnVHlwZSBkZSBjaGFtcCc7CiRsYW5nWydwcm9tcHRfZmllbGRfbmFtZSddID0gJ05vbSBkdSBjaGFtcCc7CiRsYW5nWyd0aXRsZV9hZGRfZmllbGQnXSA9ICdBam91dGVyIG91IG1vZGlmaWVyIHVuZSBkJmVhY3V0ZTtmaW5pdGlvbiBkZSBjaGFtcCc7CiRsYW5nWydmaWVsZF9kZWZpbml0aW9ucyddID0gJ0QmZWFjdXRlO2Zpbml0aW9ucyBkZSBjaGFtcCc7CiRsYW5nWydwcm9tcHRfYWRkX2ZpZWxkJ10gPSAnQWpvdXRlciB1bmUgZCZlYWN1dGU7ZmluaXRpb24gZGUgY2hhbXAnOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnU3AmZWFjdXRlO2NpZmllIGxlIGNvbXBvcnRlbWVudCBkdSBtb2R1bGUuIExlcyB2YWxldXJzIHBvc3NpYmxlcyBzb250IDoNCjx1bD4NCjxsaT48ZW0+ZGVmYXVsdDwvZW0+IDogZm9uY3Rpb25uZW1lbnQgcGFyIGQmZWFjdXRlO2ZhdXQ8L2xpPg0KPGxpPmRldGFpbCA6IGFmZmljaGUgbGUgZCZlYWN1dGU7dGFpbCBkJiMwMzk7dW4gZmljaGllciBlbiBmb25jdGlvbiBkdSBwYXJhbSZlZ3JhdmU7dHJlIDxlbT51cGxvYWRfaWQ8L2VtPjwvbGk+DQo8bGk+eW91c2VuZGl0IDogYWZmaWNoZSB1biBmb3JtdWxhaXJlIHBvdXIgbCYjMDM5O2Vudm9pIGQmIzAzOTt1biBmaWNoaWVyIGV0IHNvbiBwYXJ0YWdlIHZlcnMgZGlmZiZlYWN1dGU7cmVudGVzIGFkcmVzc2VzIGVuIHVuZSBvcCZlYWN1dGU7cmF0aW9uPC9saT4NCjwvdWw+JzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ1NwJmVhY3V0ZTtjaWZpZSBsJiMwMzk7SUQgb3UgbCYjMDM5O2FsaWFzIGRlIGxhIHBhZ2UgcXVpIGRvaXQgJmVjaXJjO3RyZSB1dGlsaXMmZWFjdXRlO2UgcG91ciBsZSBmb3JtdWxhaXJlIGQmIzAzOTtlbnZvaSBkZSBmaWNoaWVyJzsKJGxhbmdbJ2ZpbGVfdXBsb2FkZWQnXSA9ICdGaWNoaWVyIHVwbG9hZCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cyc7CiRsYW5nWyd0byddID0gJ0EnOwokbGFuZ1sndGl0bGVfeW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ0Fqb3V0L01vZGlmaWNhdGlvbiBkZSBnYWJhcml0IGQmIzAzOTtlbnZvaSBZb3VTZW5kSXQnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ0dhYmFyaXRzIGQmIzAzOTtlbnZvaSBZb3VTZW5kSXQnOwokbGFuZ1sndGl0bGVfeW91c2VuZGl0Zm9ybV9zeXNkZWZhdWx0J10gPSAnR2FiYXJpdCAmcXVvdDtZb3VTZW5kSXQmcXVvdDsgcGFyIGQmZWFjdXRlO2ZhdXQgZHUgc3lzdCZlZ3JhdmU7bWUnOwokbGFuZ1snbXNnX2ZpbGVfc2VudCddID0gJ1VuIG1lc3NhZ2UgYSAmZWFjdXRlO3QmZWFjdXRlOyBlbnZveSZlYWN1dGU7IGF1eCBhZHJlc3NlcyBzJmVhY3V0ZTtsZWN0aW9ubiZlYWN1dGU7ZXMuIElsIGNvbnRpZW50IGRlcyBpbmZvcm1hdGlvbnMgJmFncmF2ZTsgcHJvcG9zIGR1IGZpY2hpZXIgc3VyIGxhIG1hbmkmZWdyYXZlO3JlIGRlIGxlIHImZWFjdXRlO2N1cCZlYWN1dGU7cmVyLic7CiRsYW5nWydlcnJvcl9ub2FkZHJlc3NlcyddID0gJ1ZvdXMgZGV2ZXogcmVudHJlciBhdSBtb2lucyB1bmUgYWRyZXNzZSBkZSBkZXN0aW5hdGlvbic7CiRsYW5nWydlcnJvcl9ub3N1YmplY3QnXSA9ICdWb3VzIGRldmV6IGVudHJlciB1biBzdWpldCc7CiRsYW5nWydzdWJqZWN0J10gPSAnU3VqZXQnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUGFnZSBwb3VyIGxlIGZvcm11bGFpcmUgJnF1b3Q7RW52b3llciB1biBmaWNoaWVyJnF1b3Q7JzsKJGxhbmdbJ2ZpbGVfaW5mbyddID0gJ0luZm9zIGZpY2hpZXInOwokbGFuZ1snc2VuZCddID0gJ0Vudm95JmVhY3V0ZTsnOwokbGFuZ1snbm90ZXMnXSA9ICdOb3RlcyAnOwokbGFuZ1snYWRkcmVzc2VlcyddID0gJ0Vudm95ZXIgbGVzIGluZm9ybWF0aW9ucyBjb25jZXJuYW50IGNlIGZpY2hpZXIgJmFncmF2ZTsnOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnR2FiYXJpdCBkJiMwMzk7ZW1haWwgcG91ciAmcXVvdDtFbnZveWVyIHVuIGZpY2hpZXImcXVvdDsnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWpvdXRlciBvdSBtb2RpZmllciB1biBnYWJhcml0IHBvdXIgbGUgZm9ybXVsYWlyZSAmcXVvdDtFbnZveWVyIHVuIGZpY2hpZXImcXVvdDsnOwokbGFuZ1snc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnR2FiYXJpdCBkZSBmb3JtdWxhaXJlICZxdW90O0Vudm95ZXIgdW4gZmljaGllciZxdW90Oyc7CiRsYW5nWydwcm9tcHRfbm90aWZ5X2VtYWlsX3RlbXBsYXRlJ10gPSAnR2FiYXJpdCBkdSBjb3VycmllbCBkZSBub3RpZmljYXRpb24gbG9yc3F1JiMwMzk7dW4gZmljaGllciBhICZlYWN1dGU7dCZlYWN1dGU7IHVwbG9hZCZlYWN1dGU7JzsKJGxhbmdbJ3RpdGxlX3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0J10gPSAnR2FiYXJpdCBwYXIgZCZlYWN1dGU7ZmF1dCBwb3VyIGxlIGZvcm11bGFpcmUgJnF1b3Q7RW52b3llciB1biBmaWNoaWVyJnF1b3Q7JzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlbGV0YWJsZSddID0gJ0xlcyBmaWNoaWVycyBkZSBjZXR0ZSBjYXQmZWFjdXRlO2dvcmllIHBldXZlbnQgJmVjaXJjO3RyZSBzdXBwcmltJmVhY3V0ZTtzJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ0F1dG9yaXNlciBsYSBzdXBwcmVzc2lvbiBkZSBmaWNoaWVycyBkZXB1aXMgbGUgZnJvbnRlbmQnOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdNb2QmZWdyYXZlO2xlcyBwYXIgZCZlYWN1dGU7ZmF1dCc7CiRsYW5nWydmaXJzdHBhZ2UnXSA9ICdQcmVtaSZlZ3JhdmU7cmUgcGFnZSc7CiRsYW5nWydwcmV2cGFnZSddID0gJ1BhZ2UgcHImZWFjdXRlO2MmZWFjdXRlO2RlbnRlJzsKJGxhbmdbJ25leHRwYWdlJ10gPSAnUGFnZSBzdWl2YW50ZSc7CiRsYW5nWydsYXN0cGFnZSddID0gJ0Rlcm5pJmVncmF2ZTtyZSBwYWdlJzsKJGxhbmdbJ2ZpcnN0cGFnZV9hcnJvdyddID0gJzw8JzsKJGxhbmdbJ3ByZXZwYWdlX2Fycm93J10gPSAnPCc7CiRsYW5nWyduZXh0cGFnZV9hcnJvdyddID0gJz4nOwokbGFuZ1snbGFzdHBhZ2VfYXJyb3cnXSA9ICc+Pic7CiRsYW5nWydwYWdlJ10gPSAnUGFnZSAnOwokbGFuZ1snb2YnXSA9ICdEZSc7CiRsYW5nWydwcm9tcHRfZ3JvdXBsaXN0J10gPSAnR3JvdXBlcyBGRVUgYXV0b3JpcyZlYWN1dGU7cyc7CiRsYW5nWydpbmZvX2dyb3VwbGlzdCddID0gJ1MmZWFjdXRlO2xlY3Rpb25uZXogbGVzIGdyb3VwZXMgRkVVIHF1aSBzb250IGF1dG9yaXMmZWFjdXRlO3MgJmFncmF2ZTsgYWNjJmVhY3V0ZTtkZXIgYXV4IGZpY2hpZXJzIGRlIGNldHRlIGNhdCZlYWN1dGU7Z29yaWUuIEQmZWFjdXRlOy1zJmVhY3V0ZTtsZWN0aW9ubmV6IChDdHJsICsgY2xpYykgdG91dGVzIGxlcyBlbnRyJmVhY3V0ZTtlcyBwb3VyIHBlcm1ldHRyZSBsJiMwMzk7YWNjJmVncmF2ZTtzICZhZ3JhdmU7IHRvdXMuJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdCYWxheWFnZSBwb3VyIGxlcyBub3V2ZWF1eCBmaWNoaWVycyBkYW5zIGNldHRlIGNhdCZlYWN1dGU7Z29yaWUnOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdDciZlYWN1dGU7ZXIgbGVzIG1pbmlhdHVyZXMgbWFucXVhbnRlcyBkZXMgZmljaGllcnMgZGUgY2V0dGUgY2F0JmVhY3V0ZTtnb3JpZSc7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlscyddID0gJ0NyJmVhY3V0ZTtlciBsZXMgbWluaWF0dXJlcyc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlsJ10gPSAnKFJlKWNyJmVhY3V0ZTtlciBsYSBtaW5pYXR1cmUgcG91ciBjZSBmaWNoaWVyJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdDciZlYWN1dGU7ZXIgbGEgbWluaWF0dXJlJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ1ImZWFjdXRlO3BlcnRvaXJlIGltcG9zc2libGUgJmFncmF2ZTsgb3V2cmlyIChwcm9ibCZlZ3JhdmU7bWUgZGUgZHJvaXRzID8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1RhaWxsZSBkZSBjaGFxdWUgbW9yY2VhdSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7Jm5ic3A7JzsKJGxhbmdbJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnQWp1c3RlciBjZSBwYXJhbSZlZ3JhdmU7dHJlIGFmZmVjdGVyYSBsYSB2aXRlc3NlIGRlIHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnQgKGRvd25sb2FkKSBldCBwZXV0IGFpZGVyIGRhbnMgbGVzIGVudmlyb25uZW1lbnRzICZhZ3JhdmU7IGZhaWJsZSBjYXBhY2l0JmVhY3V0ZTsgbSZlYWN1dGU7bW9pcmUnOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdMZSBQSFAgJnF1b3Q7c2FmZSBtb2RlJnF1b3Q7IGVzdCBhY3RpdiZlYWN1dGU7LiBDZWxhIHBldXQgcG9zZXIgdW4gcHJvYmwmZWdyYXZlO21lIGF1IHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnQgKHBlcm1pc3Npb25zKSBldCBwZXV0IGF1c3NpIGludGVyZiZlYWN1dGU7cmVyIGF2ZWMgbGEgY2FwYWNpdCZlYWN1dGU7IGRlIGNlIG1vZHVsZSAmYWdyYXZlOyBlbnZveWVyIGRlcyBmaWNoaWVycyBwb3VyIGNhdXNlIGQmIzAzOTtpbXBvc3NpYmlsaXQmZWFjdXRlOyBkZSBtb2RpZmllciBkZXMgY29uZmlndXJhdGlvbnMgZGVzIGZpY2hpZXJzIGluaS4gVm91cyAmZWNpcmM7dGVzIGludml0JmVhY3V0ZTsgJmFncmF2ZTsgY29udGFjdGVyIHZvdHJlIGgmZWFjdXRlO2JlcmdldXIgcG91ciByJmVhY3V0ZTtzb3VkcmUgY2UgcHJvYmwmZWdyYXZlO21lLic7CiRsYW5nWydwYXJhbV9kZXRhaWxwYWdlJ10gPSAnVXRpbGUgcG91ciBsJiMwMzk7YWZmaWNoYWdlIGQmIzAzOTt1biByYXBwb3J0IGQmZWFjdXRlO3RhaWxsJmVhY3V0ZTsgZW4gdXRpbGlzYW50IHVuIGF1dHJlIG1vZCZlZ3JhdmU7bGUgZGUgcGFnZSwgY2UgcGFyYW0mZWdyYXZlO3RyZSBwcmVuZCBsJiMwMzk7aWRlbnRpZmlhbnQgKGlkKSBkZSBsYSBwYWdlIG91IGwmIzAzOTthbGlhcyBkZSBsYSBwYWdlIGQmIzAzOTt1bmUgcGFnZSBxdWkgZG9pdCAmZWNpcmM7dHJlIHV0aWxpcyZlYWN1dGU7IHBvdXIgYWZmaWNoZXIgbGUgZCZlYWN1dGU7dGFpbCBkZSByYXBwb3J0JzsKJGxhbmdbJ3BhcmFtX3ByZWZpeCddID0gJ1VuIGJvb2wmZWFjdXRlO2VuIHF1aSBpbmRpcXVlIHNpIGxlIG5vbSBkdSBmaWNoaWVyIGRvaXQgJmVjaXJjO3RyZSBwciZlYWN1dGU7Zml4JmVhY3V0ZTsnOwokbGFuZ1sncGFyYW1fcHJlZml4X2ZldSddID0gJ1VuIHBhcmFtJmVncmF2ZTt0cmUgYm9vbCZlYWN1dGU7ZW4gcXVpIGluZGlxdWUgcXVlIGxlIHByJmVhY3V0ZTtmaXhlIGRvaXQgY29ycmVzcG9uZHJlICZhZ3JhdmU7IGwmIzAzOTthdXRldXIsIG91IHMmIzAzOTtpbCBuJiMwMzk7ZXN0IHBhcyBzcCZlYWN1dGU7Y2lmaSZlYWN1dGU7ICZhZ3JhdmU7IGwmIzAzOTtoZXVyZSBhY3R1ZWxsZSAoZGFucyBsZSBmb3JtYXQgZGVjaGV4KSc7CiRsYW5nWydwYXJhbV9ub2NhcHRjaGEnXSA9ICdEJmVhY3V0ZTtzYWN0aXZlciBDYXB0Y2hhIChwYXIgZCZlYWN1dGU7ZmF1dCkgZGFucyBsZSBmb3JtdWxhaXJlIGQmIzAzOTtlbnZvaSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnTW9kaWZpZXIgbGUgZ2FiYXJpdCBkZSBmb3JtdWxhaXJlIGQmIzAzOTtlbnZvaSc7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnU2Fpc2lzc2V6IGxlIHRleHRlIGEgYWZmaWNoZXIgZGFucyBjZXR0ZSBpbWFnZSc7CiRsYW5nWydlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnXSA9ICdMZSB0ZXh0ZSBlbnRyJmVhY3V0ZTsgbmUgY29ycmVzcG9uZCBwYXMgJmFncmF2ZTsgbCYjMDM5O2ltYWdlIGFmZmljaCZlYWN1dGU7ZSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdDciZlYWN1dGU7ZXIgZGVzIG1pbmlhdHVyZXMgcG91ciBsZXMgZmljaGllcnMgYXZlYyBjZXMgZXh0ZW5zaW9ucyZuYnNwOyc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnXSA9ICdUYWlsbGUgbWF4aW11bSAocGl4ZWxzKSBkZSBsYSBtaW5pYXR1cmUgZyZlYWN1dGU7biZlYWN1dGU7ciZlYWN1dGU7ZSZuYnNwOyc7CiRsYW5nWydwcm9tcHRfdXBsb2FkX2ljb24nXSA9ICdVcGxvYWQgdW5lIGljJm9jaXJjO25lJzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdCddID0gJ0NlIHRleHRlIGVzdCB1dGlsaXMmZWFjdXRlOyBsb3JzIGRlIGxhIGNyJmVhY3V0ZTthdGlvbiBkJiMwMzk7dW4gbm91dmVhdSBnYWJhcml0IGRlIGNlIHR5cGUnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdHYWJhcml0IHBhciBkJmVhY3V0ZTtmYXV0IGR1IHJhcHBvcnQgZCZlYWN1dGU7dGFpbGwmZWFjdXRlOyc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdHYWJhcml0IHNvbW1haXJlIHBhciBkJmVhY3V0ZTtmYXV0JzsKJGxhbmdbJ3RpdGxlX3VwbG9hZGZvcm1fc3lzZGVmYXVsdCddID0gJ0dhYmFyaXQgZGUgY2hhcmdlbWVudCBwYXIgZCZlYWN1dGU7ZmF1dCc7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ0dhYmFyaXQmbmJzcDsnOwokbGFuZ1sncmVzZXR0b2RlZmF1bHQnXSA9ICdSZXN0YXVyZXIgbGVzIHBhcmFtJmVncmF2ZTt0cmVzIHBhciBkJmVhY3V0ZTtmYXV0JzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfdGVtcGxhdGUnXSA9ICdNb2QmZWdyYXZlO2xlIGRlIHJhcHBvcnQgciZlYWN1dGU7c3VtJmVhY3V0ZTsnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3RlbXBsYXRlJ10gPSAnTW9kJmVncmF2ZTtsZSBkdSByYXBwb3J0IGRldGFpbGwmZWFjdXRlOyc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05vbSc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdCddID0gJ1BhciBkJmVhY3V0ZTtmYXV0JzsKJGxhbmdbJ2xlZ2VuZF91cGxvYWRmb3JtJ10gPSAnRW52b3llciB1biBmaWNoaWVyJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ1VuIHBhcmFtJmVncmF2ZTt0cmUgcmVxdWlzIGVzdCBtYW5xdWFudCc7CiRsYW5nWydlcnJvcl9taXNzaW5nbmFtZSddID0gJ1VuIG5vbSBwb3VyIGxlIHR5cGUgZGUgZmljaGllciBkb2l0ICZlY2lyYzt0cmUgc3AmZWFjdXRlO2NpZmkmZWFjdXRlOyc7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ0F1IG1vaW5zIHVuZSBleHRlbnNpb24gZGUgZmljaGllciBkb2l0ICZlY2lyYzt0cmUgc3AmZWFjdXRlO2NpZmkmZWFjdXRlO2UnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdVbmUgaWMmb2NpcmM7bmUgZG9pdCAmZWNpcmM7dHJlIHNwJmVhY3V0ZTtjaWZpJmVhY3V0ZTtlJzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ0xhIGxpZ25lIHNwJmVhY3V0ZTtjaWZpJmVhY3V0ZTtlIG4mIzAzOTthIHBhcyBwdSAmZWNpcmM7dHJlIHRyb3V2JmVhY3V0ZTtlJzsKJGxhbmdbJ25hbWVfdW5rbm93biddID0gJ0luY29ubnUnOwokbGFuZ1snZGVzY3JpcHRpb25fdW5rbm93biddID0gJ0Rlc2NyaXB0aW9uIGR1IHR5cGUgZGUgZmljaGllciBwb3VyIGxlcyBmaWNoaWVycyBkaWZmJmVhY3V0ZTtyZW50cyc7CiRsYW5nWydpbWFnZSddID0gJ0ltYWdlICc7CiRsYW5nWydpY29uJ10gPSAnSWMmb2NpcmM7bmUnOwokbGFuZ1snZXh0ZW5zaW9ucyddID0gJ0V4dGVuc2lvbnMgZGUgZmljaGllcic7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ0Fqb3V0ZXIgdW4gbm91dmVhdSB0eXBlIGRlIGZpY2hpZXInOwokbGFuZ1snZmlsZV90eXBlcyddID0gJ1R5cGVzIGRlIGZpY2hpZXJzJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnlpZCddID0gJ0lkZW50aWZpYW50IGRlIGNhdCZlYWN1dGU7Z29yaWUgbm9uIHNwJmVhY3V0ZTtjaWYmZWFjdXRlOyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5J10gPSAnQ2F0JmVhY3V0ZTtnb3JpZSBtYW5xdWFudGUnOwokbGFuZ1snZXJyb3JfdGVtcGxhdGVuYW1lZXhpc3RzJ10gPSAnVW4gbW9kJmVncmF2ZTtsZSBkZSBjZSBub20gZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnTm9tIGR1IG1vZCZlZ3JhdmU7bGUmbmJzcDsnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnTm9tIGR1IG1vZCZlZ3JhdmU7bGUmbmJzcDsnOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnQ3ImZWFjdXRlO2VyIHVuIG5vdXZlYXUgbW9kJmVncmF2ZTtsZSc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5VbiAmZWFjdXRlO3YmZWFjdXRlO25lbWVudCBnJmVhY3V0ZTtuJmVhY3V0ZTtyJmVhY3V0ZTsgbG9yc3F1JiMwMzk7dW4gdXRpbGlzYXRldXIgdGVybWluZSBsZSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZ2VtZW50IGQmIzAzOTt1biBmaWNoaWVyPC9wPg0KPGg0PlBhcmFtJmVncmF2ZTt0cmVzPC9oND4NCjx1bD4NCjxsaT48ZW0+aWQ8L2VtPiAtIFVwbG9hZCBJRDwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIE5vbSBkdSBmaWNoaWVyPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIEFkcmVzc2UgSVAgZHUgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdldXI8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uRGVsZXRlQ2F0ZWdvcnknXSA9ICc8cD5VbiAmZWFjdXRlO3YmZWFjdXRlO25lbWVudCBnJmVhY3V0ZTtuJmVhY3V0ZTtyJmVhY3V0ZTsgbG9yc3F1JiMwMzk7dW4gdXRpbGlzYXRldXIgc3VwcHJpbWUgdW5lIGNhdCZlYWN1dGU7Z29yaWU8L3A+DQo8aDQ+UGFyYW0mZWdyYXZlO3RyZXM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOb20gZGUgbGEgY2F0JmVhY3V0ZTtnb3JpZTwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIENoZW1pbiBkZSBsYSBjYXQmZWFjdXRlO2dvcmllPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkNyZWF0ZUNhdGVnb3J5J10gPSAnPHA+VW4gJmVhY3V0ZTt2JmVhY3V0ZTtuZW1lbnQgZyZlYWN1dGU7biZlYWN1dGU7ciZlYWN1dGU7ICZhZ3JhdmU7IGxhIGNyJmVhY3V0ZTthdGlvbiBkJiMwMzk7dW5lIGNhdCZlYWN1dGU7Z29yaWU8L3A+DQo8aDQ+UGFyYW0mZWdyYXZlO3RyZXM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBMZSBub20gZGUgbGEgY2F0JmVhY3V0ZTtnb3JpZTwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBMYSBkZXNjcmlwdGlvbiBkZSBsYSBjYXQmZWFjdXRlO2dvcmllPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gTGUgY2hlbWluIGRlIGxhIGNhdCZlYWN1dGU7Z29yaWU8L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBVbiBmbGFnIHF1aSBpbmRpcXVlIHNpIGxhIGNhdCZlYWN1dGU7Z29yaWUgcGV1dCAmZWNpcmM7dHJlIGxpc3QmZWFjdXRlO2U8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uUmVtb3ZlJ10gPSAnPHA+QW4gJmVhY3V0ZTt2JmVhY3V0ZTtuZW1lbnQgZyZlYWN1dGU7biZlYWN1dGU7ciZlYWN1dGU7IGxvcnNxdSYjMDM5O3VuIGZpY2hpZXIgZXN0IHN1cHByaW0mZWFjdXRlOyB2aWEgbCYjMDM5O2ludGVyZmFjZSBhZG1pbiBvdSAmcXVvdDtmcm9udGVuZCZxdW90OzwvcD4NCjxoND5QYXJhbSZlZ3JhdmU7dHJlczwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIE5vbSBkdSBmaWNoaWVyIHN1cHByaW0mZWFjdXRlOzwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBJZGVudGlmaWFudCBkdSBmaWNoaWVyIHN1cHByaW0mZWFjdXRlOzwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBJZGVudGlmaWFudCBkZSBsYSBjYXQmZWFjdXRlO2dvcmllPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPlVuICZlYWN1dGU7diZlYWN1dGU7bmVtZW50IGcmZWFjdXRlO24mZWFjdXRlO3ImZWFjdXRlOyBsb3JzcXUmIzAzOTt1biBmaWNoaWVyIGVzdCB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7IHZpYSBsJiMwMzk7aW50ZXJmYWNlIGFkbWluIG91IGwmIzAzOTtpbnRlcmZhY2UgJnF1b3Q7ZnJvbnRlbmQmcXVvdDs8L3A+DQo8aDQ+UGFyYW0mZWdyYXZlO3RyZXM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gTGUgbm9tIGRlIGxhIGNhdCZlYWN1dGU7Z29yaWU8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBMZSBub20gZHUgZmljaGllciB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7IDwvbGk+DQo8bGk+PGVtPnNpemU8L2VtPiAtIExhIHRhaWxsZSBkdSBmaWNoaWVyIHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnJmVhY3V0ZTsgPC9saT4NCjxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gTGEgZGVzY3JpcHRpb24gY291cnRlIGR1IGZpY2hpZXIgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmcmZWFjdXRlOyAocGV1dCAmZWNpcmM7dHJlIHZpZGUpPC9lbT48L2xpPg0KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gTGEgZGVzY3JpcHRpb24gbG9uZ3VlIGR1IGZpY2hpZXIgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmcmZWFjdXRlOyAocGV1dCAmZWNpcmM7dHJlIHZpZGUpPC9lbT48L2xpPg0KPGxpPjxlbT5hdXRob3I8L2VtPiAtIEwmIzAzOTthdXRldXIgZHUgZmljaGllciB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7IChzaSBkaXNwb25pYmxlKTwvZW0+PC9saT4NCjxsaT48ZW0+aXBfYWRkcmVzczwvZW0+IC0gIEwmIzAzOTthZHJlc3NlIElQIGR1IGNsaWVudCBxdWkgYSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7IGxlIGZpY2hpZXI8L2xpPg0KPC91bD4NCic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFdiZlYWN1dGU7bmVtZW50IGcmZWFjdXRlO24mZWFjdXRlO3ImZWFjdXRlOyBsb3JzcXUmIzAzOTt1bmUgY2F0JmVhY3V0ZTtnb3JpZSBlc3Qgc3VwcHJpbSZlYWN1dGU7ZSc7CiRsYW5nWydpbmZvX2V2ZW50X29uY3JlYXRlY2F0ZWdvcnknXSA9ICdFdiZlYWN1dGU7bmVtZW50IGcmZWFjdXRlO24mZWFjdXRlO3ImZWFjdXRlOyBsb3JzcXUmIzAzOTt1bmUgY2F0JmVhY3V0ZTtnb3JpZSBlc3QgY3ImZWFjdXRlO2UnOwokbGFuZ1snaW5mb19ldmVudF9vbmRvd25sb2FkJ10gPSAnRXYmZWFjdXRlO25lbWVudCBnJmVhY3V0ZTtuJmVhY3V0ZTtyJmVhY3V0ZTsgbG9yc3F1JiMwMzk7dW4gZmljaGllciBlc3QgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmcmZWFjdXRlOyc7CiRsYW5nWydpbmZvX2V2ZW50X29udXBsb2FkJ10gPSAnRXYmZWFjdXRlO25lbWVudCBnJmVhY3V0ZTtuJmVhY3V0ZTtyJmVhY3V0ZTsgbG9yc3F1JiMwMzk7dW4gbm91dmVhdSBmaWNoaWVyIGVzdCB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7JzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFdiZlYWN1dGU7bmVtZW50IGcmZWFjdXRlO24mZWFjdXRlO3ImZWFjdXRlOyBsb3JzcXUmIzAzOTt1biBmaWNoaWVyIGVzdCBzdXBwcmltJmVhY3V0ZTsnOwokbGFuZ1sndGl0bGVfdXNlcnRhZ19vbnVwbG9hZCddID0gJ1RhZyBkJmVhY3V0ZTtmaW5pIHBhciBsJiMwMzk7dXRpbGlzYXRldXIgYSBhcHBlbGxlciBhcHImZWdyYXZlO3MgdW4gdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudCB0ZXJtaW4mZWFjdXRlOyZuYnNwOyc7CiRsYW5nWydub25lJ10gPSAnQXVjdW4nOwokbGFuZ1snbWF0Y2hlc2ZvdW5kJ10gPSAnUiZlYWN1dGU7c3VsdGF0cyB0cm91diZlYWN1dGU7cyc7CiRsYW5nWydmaWx0ZXInXSA9ICdGaWx0cmUnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ1JlZGlyaWdlciB2ZXJzIGxhIHBhZ2UgaWQvYWxpYXMgYXUgY2hhcmdlbWVudCBwYXIgbCYjMDM5O3V0aWxpc2F0ZXVyJm5ic3A7JzsKJGxhbmdbJ2RldGFpbHMnXSA9ICdEJmVhY3V0ZTt0YWlscyc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHN1ciBkZSB2b3Vsb2lyIG1vZGlmaWVyIGxlcyBwciZlYWN1dGU7ZiZlYWN1dGU7cmVuY2VzID8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnUGFzIGRlIGZpY2hpZXIgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmcmZWFjdXRlOy4nOwokbGFuZ1sncHJvbXB0X3JlcGxhY2UnXSA9ICdBdXRvcmlzZXIgbCYjMDM5OyZlYWN1dGU7Y3Jhc2VtZW50IGRlIGZpY2hpZXInOwokbGFuZ1snaW5mb19yZXBsYWNlJ10gPSAnUmVtcGxhY2VyIHRvdXQgZmljaGllciBwb3J0YW50IGxlIG0mZWNpcmM7bWUgbm9tIChsJiMwMzk7aWRlbnRpZmlhbnQgbmUgY2hhbmdlIHBhcyknOwokbGFuZ1sncGFyYW1fbm9faW5pdGlhbCddID0gJ05lIHBhcyBhZmZpY2hlciBsZXMgcHJlbWllcnMgciZlYWN1dGU7c3VsdGF0cyBsb3JzcXVlIGxlIGZpbHRyZSBlc3QgYWN0aWYnOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnRm91cm5pIHVuZSBjbGVmIGFkZGl0aW9ubmVsbGUgYXUgbW9kdWxlIHBvdXIgb3JnYW5pc2VyIGxlcyB1cGxvYWRzLiBDZXR0ZSBjbGVmIHBldXQgJmVjaXJjO3RyZSB1bmUgY2hhJmljaXJjO25lIGRlIGNhcmFjdCZlZ3JhdmU7cmUgZHUgdHlwZSA6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7IGV0Yy48YnIvPg0KQ2UgcGFyYW0mZWdyYXZlO3RyZSBlc3QgaGFiaXR1ZWxsZW1lbnQgbiZlYWN1dGU7Y2Vzc2FpcmUgdW5pcXVlbWVudCBsb3JzcXVlIGNlIG1vZHVsZSBlc3QgZW1iYXJxdSZlYWN1dGU7IGRhbnMgdW4gYXV0cmUgbW9kdWxlLic7CiRsYW5nWydwYXJhbV9ub2F1dGhvciddID0gJ01hc3F1ZSBsZSBjaGFtcCBhdXRldXIgZHUgZm9ybXVsYWlyZSBkZSBjaGFyZ2VtZW50LiBDZSBwYXJhbSZlZ3JhdmU7dHJlIGVzdCB2YWxhYmxlIHVuaXF1ZW1lbnQgZW4gbW9kZT0mIzAzOTt1cGxvYWQmIzAzOTsuIFNpIGxlIG1vZHVsZSBGRVUgZXN0IGluc3RhbGwmZWFjdXRlOyBldCBxdSYjMDM5O3VuIHV0aWxpc2F0ZXVyIGVzdCBjb25uZWN0JmVhY3V0ZTssIHVuIGNoYW1wIGNhY2gmZWFjdXRlOyB2YSBtYWludGVuaXIgbGUgbm9tIGQmIzAzOTt1dGlsaXNhdGV1ciBhY3R1ZWxsZW1lbnQgY29ubmVjdCZlYWN1dGU7JzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ1NwJmVhY3V0ZTtjaWZpZSB1biBmaWNoaWVyIHVuaXF1ZSBwb3VyIGwmIzAzOTtVUkwgb3UgbGUgbGllbiBvdSBsZSBtb2RlIChjZiBjaS1kZXNzdXMpJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHRlbXBsYXRlJ10gPSAnVXRpbGlzZXIgdW4gbW9kJmVncmF2ZTtsZSBkZSBjZSBub20gcG91ciBsZSByYXBwb3J0IGQmZWFjdXRlO3RhaWxsJmVhY3V0ZTsuJzsKJGxhbmdbJ3BhcmFtX3RlbXBsYXRlJ10gPSAnVXRpbGlzZXIgdW4gbW9kJmVncmF2ZTtsZSBkZSBjZSBub20gcG91ciBjZSByYXBwb3J0IG91IGZvcm11bGFpcmUuIExlIG1vZGUgZXN0IHV0aWxpcyZlYWN1dGU7IHBvdXIgZCZlYWN1dGU7dGVybWluZXIgcXVlbCB0eXBlIGRlIG1vZCZlZ3JhdmU7bGUgZXN0IHJlcXVpcywgcHVpcyB1biBub20gY29ycmVzcG9uZGFudCBlc3QgZWZmZWN0dSZlYWN1dGU7IGF1IHNlaW4gZGUgY2UgdHlwZS4nOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnQWZmaWNoZSBsZSBmb3JtdWxhaXJlIGRlIGZpbHRyYWdlJzsKJGxhbmdbJ3BhcmFtX25vX2ludGl0aWFsJ10gPSAnVXRpbGUgdW5pcXVlbWVudCBsb3JzcXVlIGxlIHBhcmFtJmVncmF2ZTt0cmUgZmlsdHJlIGVzdCBmb3VybmksIG91IG5vbiBwYXIgZCZlYWN1dGU7ZmF1dCwgdGhpcyBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdldGhlciBpbml0aWFsIHJlc3VsdHMgc2hvdWxkIGJlIHJldHVybmVkJzsKJGxhbmdbJ3BhcmFtX2ZpbGV0eXBlcyddID0gJ0FmZmljaGUgdW5pcXVlbWVudCBsZXMgZmljaGllcnMgZG9udCBsZSB0eXBlIGNvcnJlc3BvbmQgJmFncmF2ZTsgY2V0dGUgbGlzdGUgc2VwYXImZWFjdXRlO2UgcGFyIGRlcyB2aXJndWxlcyc7CiRsYW5nWydwYXJhbV9zb3J0b3JkZXInXSA9ICcgIDxwPk9yZHJlcyBkZSB0cmkNCiAgPHVsPg0KICA8bGk+PGVtPmRhdGVfYXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBwYXIgZGF0ZSBjcm9pc3NhbnRlPC9saT4NCiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBkYXRlIGQmZWFjdXRlO2Nyb2lzc2FudGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBhbHBoYWImZWFjdXRlO3RpcXVlbWVudCBwYXIgb3JkcmUgY3JvaXNzYW50PC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtVHJpJmVhY3V0ZTsgYWxwaGFiJmVhY3V0ZTt0aXF1ZW1lbnQgcGFyIG9yZHJlIGQmZWFjdXRlO2Nyb2lzc2FudDwvbGk+DQogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciB0YWlsbGUgY3JvaXNzYW50ZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBwYXIgdGFpbGxlIGQmZWFjdXRlO2Nyb2lzc2FudGU8L2xpPg0KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBwYXIgZGVzY3JpcHRpb24gY3JvaXNzYW50ZS9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBkZXNjcmlwdGlvbiBkJmVhY3V0ZTtjcm9pc3NhbnRlPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBwYXIgYXV0ZXVyIGNyb2lzc2FudDwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2Rlc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBhdXRldXIgZCZlYWN1dGU7Y3JvaXNzYW50PC9saT4NCiAgPGxpPjxlbT5pcF9hc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBhZHJlc3NlIElQIGNyb2lzc2FudGU8L2xpPg0KICA8bGk+PGVtPmlwX2Rlc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBhZHJlc3NlIElQIGQmZWFjdXRlO2Nyb2lzc2FudGU8L2xpPg0KICA8bGk+PGVtPmRvd25sb2Fkc19hc2M8L2VtPiAtIFRyaSZlYWN1dGU7IHBhciBub21icmUgZGUgdCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudCBjcm9pc3NhbnQ8L2xpPg0KICA8bGk+PGVtPmRvd25sb2Fkc19kZXNjPC9lbT4gLSBUcmkmZWFjdXRlOyBwYXIgbm9tYnJlIGRlIHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnQgZCZlYWN1dGU7Y3JvaXNzYW50PC9saT4NCiAgPGxpPjxlbT5yYW5kb208L2VtPiAtIFRyaSBhbCZlYWN1dGU7YXRvaXJlPC9saT4NCiAgPC91bD4NCiAgPC9wPic7CiRsYW5nWydwYXJhbV9saXN0aW5ndGVtcGxhdGUnXSA9ICdNb2QmZWdyYXZlO2xlICZhZ3JhdmU7IHV0aWxpc2VyIHBvdXIgbGlzdGVyIGxlcyBjYXQmZWFjdXRlO2dvcmllcyBhcHImZWdyYXZlO3MgdW4gY2xpcXVlIGRlcHVpcyBsYSBwYWdlIGRlIHImZWFjdXRlO3N1bSZlYWN1dGU7IGRlcyBjYXQmZWFjdXRlO2dvcmllcyc7CiRsYW5nWydwYXJhbV9saXN0aW5nc29ydG9yZGVyJ10gPSAnT3JkcmUgZGUgdHJpIChmYSZjY2VkaWw7b24gcGFyYW1fc29ydG9yZGVyKSAmYWdyYXZlOyB1dGlsaXNlciBwb3VyIGxhIGxpc3RlIGRlcyBjYXQmZWFjdXRlO2dvcmllcyBhcHImZWdyYXZlO3MgdW4gY2xpcXVlIGRlcHVpcyBsYSBwYWdlIGRlIHImZWFjdXRlO3N1bSZlYWN1dGU7IGRlcyBjYXQmZWFjdXRlO2dvcmllcyc7CiRsYW5nWydwYXJhbV9maWxlZXh0ZW5zaW9ucyddID0gJ1ZhbGlkZSB1bmlxdWVtZW50IGxvcnNxdWUgbW9kZT0mcXVvdDt1cGxvYWQmcXVvdDssIGNlIHBhcmFtJmVncmF2ZTt0cmUgbGltaXRlIGxlIHR5cGUgZGUgZmljaGllcnMgcXVpIHBldXZlbnQgJmVjaXJjO3RyZSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZyZlYWN1dGU7cy4gSWwgc3VycGFzc2UgdG91dCByJmVhY3V0ZTtnbGFnZSBkZXMgcHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlcyBkdSBtb2R1bGUuJzsKJGxhbmdbJ3BhcmFtX2NvdW50J10gPSAnUGVybWV0IGRlIGxpc3RlciBzZXVsZW1lbnQgbGVzIE4gcHJlbWllcnMgciZlYWN1dGU7c3VsdGF0cyBkZSBsYSByZWNoZXJjaGUgKGNvdW50PSZxdW90O04mcXVvdDspIGV0IGQmIzAzOTthbSZlYWN1dGU7bGlvcmVyIGFpbnNpIGxhIG1pc2UgZW4gcGFnZS4nOwokbGFuZ1sncGFyYW1fY2F0ZWdvcnknXSA9ICdjYXRlZ29yeT0mcXVvdDtuYW1lJnF1b3Q7DQo8cD48Yj5Ob3RlIDo8L2I+IENhdGVnb3J5IHBldXQgJmVjaXJjO3RyZSAmcXVvdDthbGwmcXVvdDssIHBvdXIgYWZmaWNoZXIgdG91dGVzIGxlcyBjYXQmZWFjdXRlO2dvcmllcyA8ZW0+bGlzdGFibGVzPC9lbT48L3A+JzsKJGxhbmdbJ3BhcmFtX21vZGUnXSA9ICcgIDx1bD4NCiAgPGxpPjxlbT5kZXRhaWxlZDwvZW0+IC0gQWZmaWNoZSB1bmUgbGlzdGUgZCZlYWN1dGU7dGFpbGwmZWFjdXRlOyBkZSB0b3V0IGxlcyBmaWNoaWVycyBkYW5zIHVuZSBjYXQmZWFjdXRlO2dvcmllPC9saT4NCiAgPGxpPjxlbT5zaW5nbGU8L2VtPiAtIEFmZmljaGUgdW4gcmFwcG9ydCBkJmVhY3V0ZTt0YWlsbCZlYWN1dGU7IGNvbmNlcm5hbnQgdW4gc2V1bCBjaGFyZ2VtZW50PC9saT4NCiAgPGxpPjxlbT51cGxvYWQ8L2VtPiAtIEFmZmljaGUgdW4gZm9ybXVsYWlyZSBwb3VyIHBlcm1ldHRyZSBhdXggRkVVIGRlIGNoYXJnZXIgZGVzIGZpY2hpZXJzPC9saT4NCiAgPGxpPjxlbT51cmwgPGk+b3I8L2k+IGxpbms8L2VtPiAtIEFmZmljaGUgdW4gbGllbiB2ZXJzIHVuIGZpY2hpZXI8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIEFmZmljaGUgdW5lIGxpc3RlIHImZWFjdXRlO3N1bSZlYWN1dGU7ZSBkZSB0b3VzIGxlcyBmaWNoaWVycyBkYW5zIHVuZSBjYXQmZWFjdXRlO2dvcmllPC9saT4NCiAgPC91bD4nOwokbGFuZ1sncGFyYW1fc2VsZWN0Zm9ybSddID0gJ1F1YW5kIGxlIG1vZGUgJiMwMzk7c2VsZWN0JiMwMzk7IGVzdCB1dGlsaXMmZWFjdXRlOywgY2UgcGFyYW0mZWdyYXZlO3RyZSBzcCZlYWN1dGU7Y2lmaWUgbGUgbCYjMDM5O2lkIChpZGVudGlmaWFudCkgZGUgbGEgZmV1aWxsZSBwYXJlbnQuIFV0aWxpc2VyIHBvdXIgcGFzc2VyIGxlIHBhcmFtJmVncmF2ZTt0cmUuJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5hbWUnXSA9ICdRdWFuZCBsZSBtb2RlICYjMDM5O3NlbGVjdCYjMDM5OyBlc3QgdXRpbGlzJmVhY3V0ZTssIGNlIHBhcmFtJmVncmF2ZTt0cmUgc3AmZWFjdXRlO2NpZmllIGxlIG5vbSBkdSBjaGFtcCc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ1F1YW5kIGxlIG1vZGUgJiMwMzk7c2VsZWN0JiMwMzk7IGVzdCB1dGlsaXMmZWFjdXRlOywgY2UgcGFyYW0mZWdyYXZlO3RyZSBzcCZlYWN1dGU7Y2lmaWUgbGEgdmFsZXVyIHBhciBkJmVhY3V0ZTtmYXV0IGR1IGNoYW1wJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5vbmUnXSA9ICdRdWFuZCBsZSBtb2RlICYjMDM5O3NlbGVjdCYjMDM5OyBlc3QgdXRpbGlzJmVhY3V0ZTssIGNlIHBhcmFtJmVncmF2ZTt0cmUgaW5kaXF1ZSBzaSAmIzAzOTtub25lJiMwMzk7IGVzdCB1biBjaG9peCB2YWxpZGUnOwokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdSZXRvdXIgYXUgcGFubmVhdSBkJiMwMzk7YWRtaW5pc3RyYXRpb24gZHUgbW9kdWxlJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ0lsIG4mIzAzOTt5IGEgcGFzIGRlIGNhdCZlYWN1dGU7Z29yaWVzIGQmZWFjdXRlO2Zpbmllcyc7CiRsYW5nWyd0aXRsZV9lbmZvcmNlZXh0ZW5zaW9ucyddID0gJ0V4aWdlciBkZXMgZXh0ZW5zaW9ucyBzdXIgdG91cyBsZXMgZmljaGllcnMgY2hhcmcmZWFjdXRlO3MmbmJzcDsnOwokbGFuZ1sncmVzdG9yZWRlZmF1bHRzY29uZmlybSddID0gJ0NldHRlIG9wJmVhY3V0ZTtyYXRpb24gdmEgcmVzdGF1cmVyIGxlcyBnYWJhcml0cyBwYXIgZCZlYWN1dGU7ZmF1dC4gVG91dGVzIGxlcyBtb2RpZmljYXRpb25zIGRlIHZvcyBnYWJhcml0cyBzZXJvbnQgcGVyZHVlcy4gJkVjaXJjO3Rlcy12b3VzIHMmdWNpcmM7cihlKSA/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ21pbmlhdHVyZSc7CiRsYW5nWyduZXd0aHVtYm5haWwnXSA9ICdFbnZveWVyIHVuZSBub3V2ZWxsZSBtaW5pYXR1cmUnOwokbGFuZ1snaW5mb19zdW1tYXJ5J10gPSAnVW5lIGRlc2NyaXB0aW9uIGJyJmVncmF2ZTt2ZSBkdSBmaWNoaWVyIChzaSB2aWRlLCBsZSBub20gZHUgZmljaGllciBzYW5zIGwmIzAzOTtleHRlbnNpb24gZXN0IHV0aWxpcyZlYWN1dGU7KSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ1VuIG5vbSBjb3VydCBkZSB2b3RyZSBjYXQmZWFjdXRlO2dvcmllIChodW1haW5lbWVudCBjb21wciZlYWN1dGU7aGVuc2libGUpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZXNjJ10gPSAnVW5lIGRlc2NyaXB0aW9uIGRlIHZvdHJlIGNhdCZlYWN1dGU7Z29yaWUnOwokbGFuZ1snaW5mb19jYXRlZ29yeXBhdGgnXSA9ICdMZSBub20gZGUgciZlYWN1dGU7cGVydG9pcmUgJmFncmF2ZTsgbCYjMDM5O2ludCZlYWN1dGU7cmlldXIgZHUgciZlYWN1dGU7cGVydG9pcmUgZGUgY2hhcmdlbWVudCBxdWkgc2VyYSB1dGlsaXMmZWFjdXRlOyBwb3VyIHN0b2NrZXIgbGVzIGZpY2hpZXJzIGRhbnMgY2V0dGUgY2F0JmVhY3V0ZTtnb3JpZS4gU2kgbGUgciZlYWN1dGU7cGVydG9pcmUgbiYjMDM5O2V4aXN0ZSBwYXMgZCZlYWN1dGU7aiZhZ3JhdmU7LCBpbCBwZXV0ICZlY2lyYzt0cmUgY3ImZWFjdXRlOyZlYWN1dGU7Lic7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnQyYjMDM5O2VzdCBsZSBub3V2ZWF1IG5vbSBkdSBmaWNoaWVyIGFwciZlZ3JhdmU7cyB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZ2VtZW50IChwZXJtZXQgZGUgcmVub21tZXIgbGUgZmljaGllciBhdSB0JmVhY3V0ZTtsJmVhY3V0ZTtjaGFyZ2VtZW50KS4gTGFpc3NlciB2aWRlIHBvdXIgY29uc2VydmVyIGxlIG5vbSBkZSBmaWNoaWVyIG9yaWdpbmFsLic7CiRsYW5nWydlcnJvcl9jYW50Y3JlYXRlZGlyZWN0b3J5J10gPSAnSW1wb3NzaWJsZSBkZSBjciZlYWN1dGU7ZXIgY2UgciZlYWN1dGU7cGVydG9pcmUnOwokbGFuZ1snZXJyb3Jfbm9tYWlsZXJtb2R1bGUnXSA9ICdMZSBtb2R1bGUgQ01TbWFpbGVyIG5lIHBldXQgJmVjaXJjO3RyZSBjb250YWN0JmVhY3V0ZTsnOwokbGFuZ1sndXBsb2FkX25vdGlmaWNhdGlvbiddID0gJ1VuIG5vdXZlYXUgZmljaGllciBhICZlYWN1dGU7dCZlYWN1dGU7IGNoYXJnJmVhY3V0ZTsgISc7CiRsYW5nWyd0aXRsZV9lbWFpbF9vbl91cGxvYWQnXSA9ICdFbnZveWVyIGxlcyBub3RpZmljYXRpb25zIGRlIGNoYXJnZW1lbnQgJmFncmF2ZTsmbmJzcDsnOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICdHYWJhcml0IGRlIGNvdXJyaWVsJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdDciZlYWN1dGU7ZXIgdW4gZmljaGllciBpbmRleC5odG1sIGRhbnMgY2hhcXVlIHImZWFjdXRlO3BlcnRvaXJlID88YnIvPjxlbT5OZSByZW1wbGFjZXJhIHBhcyBsZSBmaWNoaWVyIGluZGV4Lmh0bWwgcyYjMDM5O2lsIGVuIGV4aXN0ZSBkJmVhY3V0ZTtqJmFncmF2ZTsgdW48L2VtPiZuYnNwOyc7CiRsYW5nWydhYm91dCddID0gJ0EgcHJvcG9zIGRlJzsKJGxhbmdbJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnXSA9ICdBY2MmZWFjdXRlO3MgcmVmdXMmZWFjdXRlOy4gViZlYWN1dGU7cmlmaWV6IHZvcyBkcm9pdHMuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdJbXBvc3NpYmxlIGQmIzAzOTsmZWFjdXRlO2NyaXJlJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnQWpvdXRlciB1bmUgY2F0JmVhY3V0ZTtnb3JpZSc7CiRsYW5nWydhbGwnXSA9ICdUb3V0KGUpcyc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnJkVjaXJjO3Rlcy12b3VzIHN1cihlKSA/JzsKJGxhbmdbJ2F1dGhvciddID0gJ0F1dGV1cic7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGVyJzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcobGUgY2hlbWluIG5lIHBldXQgJmVjaXJjO3RyZSBtb2RpZmkmZWFjdXRlOyknOwokbGFuZ1snY2F0ZWdvcmllcyddID0gJ0NhdCZlYWN1dGU7Z29yaWVzJzsKJGxhbmdbJ2NhdGVnb3J5J10gPSAnQ2F0JmVhY3V0ZTtnb3JpZSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdDYXQmZWFjdXRlO2dvcmllIGFqb3V0JmVhY3V0ZTtlJzsKJGxhbmdbJ2RhdGUnXSA9ICdEYXRlICc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdEYXRlIGRlIGNoYXJnZW1lbnQnOwokbGFuZ1snZGVmYXVsdCddID0gJ1BhciBkJmVhY3V0ZTtmYXV0JzsKJGxhbmdbJ2RlbGV0ZSddID0gJ1N1cHByaW1lcic7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXB0aW9uICc7CiRsYW5nWydkZXN0bmFtZSddID0gJ1QmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZXIgZW4gdGFudCBxdWUnOwokbGFuZ1snZGV0YWlsX3RlbXBsYXRlJ10gPSAnR2FiYXJpdHMgZGUgZCZlYWN1dGU7dGFpbCc7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnTGUgZmljaGllciAlcyBhICZlYWN1dGU7dCZlYWN1dGU7IHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnJmVhY3V0ZTsuJzsKJGxhbmdbJ2Rvd25sb2FkcyddID0gJ1QmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnRzJzsKJGxhbmdbJ2VkaXQnXSA9ICdNb2RpZmllcic7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdNb2RpZmllciBsYSBjYXQmZWFjdXRlO2dvcmllJzsKJGxhbmdbJ2VkaXR1cGxvYWQnXSA9ICdNb2RpZmllciBsZSBmaWNoaWVyJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRXJyZXVyICEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ1VuZSBjYXQmZWFjdXRlO2dvcmllIGF2ZWMgY2UgY2hlbWluICglcykgZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UnXSA9ICdVbmUgY2F0JmVhY3V0ZTtnb3JpZSB1dGlsaXNhbnQgY2UgY2hlbWluIGV4aXN0ZSBkJmVhY3V0ZTtqJmFncmF2ZTsnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMyJ10gPSAnRXJyZXVyIDogdW5lIGNhdCZlYWN1dGU7Z29yaWUgJnF1b3Q7JXMmcXVvdDsgZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0cyddID0gJ0VycmV1ciA6IGNldHRlIGNhdCZlYWN1dGU7Z29yaWUgZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGVtcHR5J10gPSAnRXJyZXVyIDogaW1wb3NzaWJsZSBkZSBzdXBwcmltZXIgdW5lIGNhdCZlYWN1dGU7Z29yaWUgcXVpIG4mIzAzOTtlc3QgcGFzIHZpZGUnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3Rmb3VuZCddID0gJ0VycmV1ciA6IGNhdCZlYWN1dGU7Z29yaWUgbm9uIHRyb3V2JmVhY3V0ZTtlICEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0VycmV1ciA6IGVycmV1ciBkZSBiYXNlIGRlIGRvbm4mZWFjdXRlO2VzICEnOwokbGFuZ1snZXJyb3JfZW1wdHljYXRlZ29yeSddID0gJ0VycmV1ciA6IGNhdCZlYWN1dGU7Z29yaWUgdmlkZSAhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0VycmV1ciA6IGNoZW1pbiB2aWRlICEnOwokbGFuZ1snZXJyb3JfZmlsZWV4aXN0cyddID0gJ0VycmV1ciA6IGxlIGZpY2hpZXIgJXMgZXhpc3RlIGQmZWFjdXRlO2omYWdyYXZlOyAhJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ0VycmV1ciA6IGxlIGZpY2hpZXIgJXMgbiYjMDM5O2EgcGFzICZlYWN1dGU7dCZlYWN1dGU7IHRyb3V2JmVhY3V0ZTsgISc7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdFcnJldXIgOiBpbnN1ZmZpc2FuY2UgZGUgcGFyYW0mZWdyYXZlO3RyZXMgZm91cm5pcyBhdSBtb2R1bGUgISc7CiRsYW5nWydlcnJvcl9pbnZhbGlkYXV0aG9yJ10gPSAnRXJyZXVyIDogYXV0ZXVyIG5vbiB2YWxpZGUgKG91IHZpZGUpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkY2F0ZWdvcnknXSA9ICdFcnJldXIgOiBjYXQmZWFjdXRlO2dvcmllIG5vbiB2YWxpZGUgKG91IHZpZGUpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdFcnJldXIgOiBkZXNjcmlwdGlvbiBpbnZhbGlkZSAob3UgdmlkZSkuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRmaWxlJ10gPSAnRXJyZXVyIDogbm9tIGRlIGZpY2hpZXIgbm9uIHZhbGlkZSAob3UgdmlkZSkuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRmaWxlbmFtZSddID0gJ0VycmV1ciA6IGxlcyBmaWNoaWVycyBhdmVjIGNlIG5vbSAocHJvYmFibGVtZW50IGV4dGVuc2lvbikgbmUgc29udCBwYXMgYXV0b3JpcyZlYWN1dGU7ZXMgKCVzKS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGlkJ10gPSAnRXJyZXVyIDogaWRlbnRpZmlhbnQgZGUgY2hhcmdlbWVudCBpbnZhbGlkZSc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzJ10gPSAnRXJyZXVyIDogcGFzIGRlIGZpY2hpZXJzIGNvcnJlc3BvbmRhbnQgISc7CiRsYW5nWydmaWxlcyddID0gJ0ZpY2hpZXJzJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnRml4ZSBsZXMgZXNwYWNlcyc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdHZXN0aW9uIGRlIGZpY2hpZXJzIHN1ciBsZSBzaXRlJzsKJGxhbmdbJ2lkJ10gPSAnSWRlbnRpZmlhbnQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnVmVyc2lvbiAlcyBkdSBtb2R1bGUgaW5zdGFsbCZlYWN1dGU7Lic7CiRsYW5nWydpcF9hZGRyZXNzJ10gPSAnQWRyZXNzZSBJUCc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ1VuIG1vZHVsZSBxdWkgcGVybWV0IGF1eCB1dGlsaXNhdGV1cnMgZGUgdHJhbnNmJmVhY3V0ZTtyZXIgZGVzIGZpY2hpZXJzLCBldCB2b3VzIHBlcm1ldCBkZSBsZXMgZyZlYWN1dGU7cmVyLic7CiRsYW5nWyduYW1lJ10gPSAnTm9tJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdDaGFuZ2VyIGxlIG5vbSBpY2kgcG91ciByZW5vbW1lciBsZSBmaWNoaWVyJzsKJGxhbmdbJ3BhdGgnXSA9ICdDaGVtaW4nOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICdDaGFuZ2VyIGxhIGNhdCZlYWN1dGU7Z29yaWUgaWNpIHBvdXIgZCZlYWN1dGU7cGxhY2VyIGxlcyBmaWNoaWVycyBkYW5zIHVuIGF1dHJlIHImZWFjdXRlO3BlcnRvaXJlJzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcoUGFyIHJhcHBvcnQgYXUgciZlYWN1dGU7cGVydG9pcmUgJnF1b3Q7dXBsb2Fkcy8mcXVvdDspJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+TGUgbW9kdWxlIFVwbG9hZHMgJmFncmF2ZTsgJmVhY3V0ZTt0JmVhY3V0ZTsgaW5zdGFsbCZlYWN1dGU7IGF2ZWMgc3VjYyZlZ3JhdmU7cy4gQXNzdXJlei12b3VzIGRlIHImZWFjdXRlO2dsZXIgbGVzIHBlcm1pc3Npb25zICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBvdXIgdXRpbGlzZXIgY2UgbW9kdWxlICE8L3A+DQo8cD48c3Ryb25nPkF0dGVudGlvbjwvc3Ryb25nPiAtIExhIGJvbm5lIG1hcmNoZSBkZSBjZSBtb2R1bGUgZCZlYWN1dGU7cGVuZCBkZSBwbHVzaWV1cnMgdmFyaWFibGVzIHBocC4gQ2VsYSBpbmNsdXMgPGVtPihtYWlzIHBhcyBzZXVsZW1lbnQpPC9lbT4gcGhwJiMwMzk7cyBtZW1vcnlfbGltaXQsIHNhZmVfbW9kZSwgZmlsZV91cGxvYWRzLCB1cGxvYWRzX21heF9maWxlc2l6ZSBldCBtYXhfZXhlY3V0aW9uX3RpbWUuIENlcyB2YXJpYWJsZXMgZGV2cm9udCBwZXV0LSZlY2lyYzt0cmUgJmVjaXJjO3RyZSBhanVzdCZlYWN1dGU7ZXMgcG91ciBxdWUgbGUgbW9kdWxlIGZvbmN0aW9ubmUgY29ycmVjdGVtZW50IHN1ciB2b3RyZSBzaXRlLiBJbCB2b3VzIGVzdCBjb25zZWlsbCZlYWN1dGU7IGRlIHRyYXZhaWxsZXIgYXZlYyB2b3RyZSBoJmVhY3V0ZTtiZXJnZXVyIG91IGFkbWluaXN0cmF0ZXVyIHBvdXIgY29uZmlndXJlciBjZXMgcGFyYW0mZWdyYXZlO3RyZXMuPC9wPic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnTGUgbW9kdWxlIFVwbG9hZHMgYSAmZWFjdXRlO3QmZWFjdXRlOyBzdXBwcmltJmVhY3V0ZTsuIEF1Y3VuIGZpY2hpZXIgbiYjMDM5O2EgJmVhY3V0ZTt0JmVhY3V0ZTsgc3VwcHJpbSZlYWN1dGU7IGRlIHZvdHJlIHImZWFjdXRlO3BlcnRvaXJlIGRlIHQmZWFjdXRlO2wmZWFjdXRlO2NoYXJnZW1lbnQgZXQgbCYjMDM5O2ludCZlYWN1dGU7Z3JpdCZlYWN1dGU7IGRlcyBmaWNoaWVycyBhICZlYWN1dGU7dCZlYWN1dGU7IHByJmVhY3V0ZTtzZXJ2JmVhY3V0ZTtlLic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTGVzIHByJmVhY3V0ZTtmJmVhY3V0ZTtyZW5jZXMgZHUgbW9kdWxlIG9udCAmZWFjdXRlO3QmZWFjdXRlOyBtaXNlcyAmYWdyYXZlOyBqb3VyLic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZXNjJ10gPSAnRGVzY3JpcHRpb24gJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWxpc3RhYmxlJ10gPSAnTGVzIGZpY2hpZXJzIGRlIGNlIHImZWFjdXRlO3BlcnRvaXJlIHBldXZlbnQgJmVjaXJjO3RyZSBsaXN0JmVhY3V0ZTtzJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeW5hbWUnXSA9ICdOb20gZGUgbGEgY2F0JmVhY3V0ZTtnb3JpZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlwYXRoJ10gPSAnQ2hlbWluIGR1IHNlcnZldXInOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ1N1cHByaW1lciBsZSBkb3NzaWVyIGRlIGxhIGNhdCZlYWN1dGU7Z29yaWUgJzsKJGxhbmdbJ3Byb21wdF9tYXhfdXBsb2Fkc2l6ZSddID0gJ1RhaWxsZSBkZSBmaWNoaWVyIG1heGltYWxlIGF1dG9yaXMmZWFjdXRlO2UgKEtvKSZuYnNwOyc7CiRsYW5nWydwcm9tcHRfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0V4dGVuc2lvbnMgdmFsaWRlIHBvdXIgbCYjMDM5O3VwbG9hZCc7CiRsYW5nWydzY2FuJ10gPSAnUGFyY291cmlyJzsKJGxhbmdbJ3NlbGVjdGNhdGVnb3J5J10gPSAnQ2hvaXNpciB1bmUgY2F0JmVhY3V0ZTtnb3JpZSc7CiRsYW5nWydzaXplJ10gPSAnVGFpbGxlJzsKJGxhbmdbJ3NpemVrYiddID0gJ1RhaWxsZSAoS2IpJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ0Vudm95ZXInOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJ0dhYmFyaXRzIGRlIHNvbW1haXJlJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdUaXRyZSAvIHImZWFjdXRlO3N1bSZlYWN1dGU7JzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnTW9kdWxlIGRlIGNoYXJnZW1lbnQnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFubmVhdSBBZG1pbiBkdSBtb2R1bGUnOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHImZWFjdXRlO2YmZWFjdXRlO3JlbmNlIGR1IG1vZHVsZSc7CiRsYW5nWyd0aXRsZV9zdWJuZXRfZXhjbHVzaW9ucyddID0gJ0V4Y2x1cmUgc291cy1yJmVhY3V0ZTtzZWF1eCBkZXMgc3RhdGlzdGlxdWVzJm5ic3A7JzsKJGxhbmdbJ3RpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdFeHRlbnNpb25zIHZhbGlkZXMmbmJzcDsnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bGUgZCZlYWN1dGU7c2luc3RhbGwmZWFjdXRlOy4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bGUgbWlzZSAmYWdyYXZlOyBqb3VyIHZlcnMgbGEgdmVyc2lvbiAlcy4nOwokbGFuZ1sndXBsb2FkJ10gPSAnVCZlYWN1dGU7bCZlYWN1dGU7Y2hhcmdlbWVudCc7CiRsYW5nWyd1cGxvYWRlZCddID0gJ0xlIGZpY2hpZXIgJXMgJmFncmF2ZTsgJmVhY3V0ZTt0JmVhY3V0ZTsgY2hhcmcmZWFjdXRlOyBwYXIgJXMuJzsKJGxhbmdbJ3JlcGxhY2VkJ10gPSAnTGUgZmljaGllciAlcyAmYWdyYXZlOyAmZWFjdXRlO3QmZWFjdXRlOyByZW1wbGFjJmVhY3V0ZTsgcGFyICVzLic7CiRsYW5nWydkZWxldGVkJ10gPSAnTGUgZmljaGllciAlcyAmYWdyYXZlOyAmZWFjdXRlO3QmZWFjdXRlOyBzdXBwcmltJmVhY3V0ZTsuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdHYWJhcml0cyBkJiMwMzk7dXBsb2FkJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnTm9tIGQmIzAzOTt1dGlsaXNhdGV1cic7CiRsYW5nWyd3YXJuaW5nX2RlbGV0ZWNhdGVnb3J5J10gPSAnQVZFUlRJU1NFTUVOVCA6IHNveWV6IHBydWRlbnQgbG9yc3F1ZSB2b3VzIHN1cHByaW1leiBkZXMgY2F0JmVhY3V0ZTtnb3JpZXMgOiB2b3VzIHBvdXZleiBwZXJkcmUgZGVzIGZpY2hpZXJzLic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/it_IT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2Vycm9yX21pc3Npbmd2YWx1ZSddID0gJ1VuIHZhbG9yZSByaWNoaWVzdG8gJmVncmF2ZTsgbWFuY2FudGUnOwokbGFuZ1snZWRpdGVkJ10gPSAnTW9kaWZpY2F0byAlcyc7CiRsYW5nWydtb3ZlZGZpbGUnXSA9ICdTcG9zdGF0byBGaWxlICVzIGluICVzJzsKJGxhbmdbJ3BhZ2VsaW1pdCddID0gJ0ZpbGUgUGVyIFBhZ2luYSc7CiRsYW5nWyd2aWV3J10gPSAnVmlzdWFsaXp6YSBGaWxlJzsKJGxhbmdbJ2VkaXRfdGhpc19maWxlJ10gPSAnTW9kaWZpY2EgQ2FtcG8nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ1NjYW5zaW9uZSBhdXRvbWF0aWNhIGRpIHF1ZXN0YSBjYXRlZ29yaWEgcGVyIG51b3ZpIGZpbGU/JzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlfc2Nhbm5hYmxlJ10gPSAnUXVlc3RhIGNhdGVnb3JpYSB2aWVuZSBzY2Fuc2lvbmF0YSBhdXRvbWF0aWNhbWVudGUgYWxsYSByaWNlcmNhIGRpIG51b3ZpIGZpbGUgcXVhbmRvIHZpZW5lIGVzZWd1aXRvIGwmIzAzOTthY2Nlc3NvIGRhIGludGVyZmFjY2lhIHV0ZW50ZSc7CiRsYW5nWydwcm9tcHRfdGxfYWNjZXNzJ10gPSAnQWNjZXNzbyBsaW1pdGF0byBuZWwgdGVtcG8nOwokbGFuZ1sncHJvbXB0X2FsbG93X3VwbG9hZF9zZW5kZmlsZSddID0gJ1Blcm1ldHRpIGwmIzAzOTtpbnZpbyBpbW1lZGlhdG8gZGkgZmlsZSBhbCBjYXJpY2FtZW50byBkYSBwYXJ0ZSBkaSB1biBhbW1pbmlzdHJhdG9yZSc7CiRsYW5nWydtc2dfYXV0b19kZWxldGVfZmlsZSddID0gJ0VsaW1pbmEgYXV0b21hdGljYW1lbnRlIGZpbGUgc2NhZHV0bzogJXMnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGVfZmFpbGVkJ10gPSAnUHJvYmxlbWkgZGkgcGVybWVzc2ksIGVsaW1pbmF6aW9uZSBhdXRvbWF0aWNhIGRpICVzIGZhbGxpdGEnOwokbGFuZ1snaW5mb19jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ1NwZWNpZmljYSB1biBudW1lcm8gZGkgb3JlIHByaW1hIGNoZSBpIGZpbGUgZGkgcXVlc3RhIGNhdGVnb3JpYSBwb3NzZW5vIGVzc2VyZSBlbGltaW5hdGkuIFVzYXRlIHVuIHZhbG9yZSBkaSAwIHBlciBpbmRpY2FyZSBjaGUgaSBmaWxlIG5vbiBkb3ZyZWJiZXJvIGVzc2VyZSBlbGltaW5hdGknOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnTnVtZXJvIGRpIG9yZSBwcmltYSBjaGUgaSBmaWxlIGRpIHF1ZXN0YSBjYXRlZ29yaWEgdmVuZ2FubyBlbGltaW5hdGkgYXV0b21hdGljYW1lbnRlJzsKJGxhbmdbJ2luZm9fZGZsdF9jYXRlZ29yeV9leHBpcnknXSA9ICdJbCB2YWxvcmUgcHJlZGVmaW5pdG8gcGVyIG51b3ZlIGNhdGVnb3JpZSwgY2hlIGluZGljYSBwZXIgcXVhbnRvIHRlbXBvIGkgZmlsZSBhbCBzdW8gaW50ZXJubyBkZWJiYW5vIGVzaXN0ZXJlIHByaW1hIGRlbGwmIzAzOTtlbGltaW5hemlvbmUgYXV0b21hdGljYS4gVXRpbGl6emF0ZSAwIHBlciBpbmRpY2FyZSBsYSBub24gZWxpbWluYXppb25lJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2V4cGlyeSddID0gJ1BlcmlvZG8gZGkgc2NhZGVuemEgZGVsbGEgQ2F0ZWdvcmlhIDxlbT4ob3JlKTwvZW0+JzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdHbGkgdXRlbnRpIGF1dG9yaXp6YXRpIHBvdHJhbm5vIGVsaW1pbmFyZSBxdWVzdGkgZmlsZS4gU2lnbmlmaWNhIGNoZSB2ZXJyJmFncmF2ZTsgZm9ybml0byB1biB1cmwgbmVsbCYjMDM5O2FwcG9zaXRvIG1vZGVsbG8gcGVyIHBlcm1ldHRlcmUgbCYjMDM5O2VsaW1pbmF6aW9uZSBkZWwgZmlsZS4gVW5vIHN2aWx1cHBhdG9yZSBwdSZvZ3JhdmU7IHV0aWxpenphcmUgbGEgc2ludGFzc2kgc21hcnR5IGFkZWd1YXRhIHBlciBtb3N0cmFyZSBpbCBsaW5rIGFnbGkgdXRlbnRpIGF1dG9yaXp6YXRpLic7CiRsYW5nWydjb3B5X2ZpbGVzJ10gPSAnQ29waWEgZmlsZSc7CiRsYW5nWydlcnJvcl9maWxldG9vbGFyZ2UnXSA9ICdJbCBmaWxlIGNoZSBzdGF0ZSBjZXJjYW5kbyBkaSBjYXJpY2FyZSAmZWdyYXZlOyBwaSZ1Z3JhdmU7IGdyYW5kZSBkZWwgdmFsb3JlIG1hc3NpbW8gZGkgY2FyaWNhbWVudG8gY29uc2VudGl0byBkYSBDTVNNUyc7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWNhdGVnb3J5J10gPSAnU2lldGUgc2ljdXJpIGRpIHZvbGVyZSBlbGltaW5hcmUgcXVlc3RhIGNhdGVnb3JpYT8nOwokbGFuZ1snZXJyb3JfZGVsZXRlJ10gPSAnVW5vIGRlZ2xpIGVsZW1lbnRpIG5vbiBwdSZvZ3JhdmU7IGVzc2VyZSBlbGltaW5hdG8gKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ1NpZXRlIGNlcnRpIGRpIHZvbGVyZSBlc2VndWlyZSBxdWVzdGEgYXppb25lIHN1bGxlIGNhdGVnb3JpZSBzZWxlemlvbmF0ZT8nOwokbGFuZ1snZXJyb3Jfbm90aGluZ19zZWxlY3RlZCddID0gJ0Vycm9yZTogTmVzc3VuIGVsZW1lbnRvIHNlbGV6aW9uYXRvJzsKJGxhbmdbJ3dpdGhfc2VsZWN0ZWQnXSA9ICdDb24gU2VsZXppb25lOic7CiRsYW5nWydlcnJvcl9yZXBsYWNlX21pc21hdGNoZWRfZmlsZWV4dCddID0gJ1BlciBzb3N0aXR1aXJlIHVuIGZpbGUgJmVncmF2ZTsgbmVjZXNzYXJpbyBjYXJpY2FybmUgdW5vIGRlbGxvIHN0ZXNzbyB0aXBvIChlc3RlbnNpb25lIGRlbCBmaWxlKS4gSWwgZmlsZSBzZWxlemlvbmF0byBub24gY29ycmlzcG9uZGUgYSBxdWVsbG8gb3JpZ2luYWxlLic7CiRsYW5nWydyZXBsYWNlJ10gPSAnU29zdGl0dWlzY2knOwokbGFuZ1snaW5mb19yZXBsYWNlZmlsZSddID0gJ1BvdGV0ZSBjYXJpY2FyZSB1biBmaWxlIHNvc3RpdHV0aXZvLCBzZSBpbCBmaWxlICZlZ3JhdmU7IHVuJiMwMzk7aW1tYWdpbmUgZSBub24gYXZldGUgc2VsZXppb25hdG8gdW5hIG1pbmlhdHVyYSBzb3N0aXR1dGl2YSwgbmUgdmVyciZhZ3JhdmU7IGdlbmVyYXRhIHVuYSBudW92YSc7CiRsYW5nWydwcm9tcHRfcmVwbGFjZWZpbGUnXSA9ICdDYXJpY2EgZmlsZSBzb3N0aXR1dGl2byc7CiRsYW5nWyd0aXRsZV9maXhzcGFjZXMnXSA9ICdDb3JyZWdnaSBzcGF6aSBuZWwgbm9tZSBmaWxlJzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0NhdGVnb3JpYSBjb3BpYXRhIGNvcnJldHRhbWVudGUnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlcGF0aCddID0gJ1NwZWNpZmljYXRlIHVuIG5vbWUgZGkgY2FydGVsbGEgY2hlIHNpYSBkaXZlcnNvIGRhbGwmIzAzOTtvcmlnaW5lIGUgbm9uIHNpYSBhdHR1YWxtZW50ZSBpbiB1c28nOwokbGFuZ1snb3BlcmF0aW9uX2NhbmNlbGxlZCddID0gJ09wZXJhemlvbmUgQW5udWxsYXRhJzsKJGxhbmdbJ3NvdXJjZSddID0gJ09yaWdpbmUnOwokbGFuZ1snZGVzdGluYXRpb24nXSA9ICdEZXN0aW5hemlvbmUnOwokbGFuZ1sncHJvbXB0X2NvcHlfZmlsZXMnXSA9ICdDb3BpYSBmaWxlIGRlbGxhIGNhdGVnb3JpYSc7CiRsYW5nWydpbmZvX2NvcHlfZmlsZXMnXSA9ICdDb3BpYSBpIGZpbGUgZGFsbGEgY2F0ZWdvcmlhIGRpIG9yaWdpbmUgYSBxdWVsbGEgZGkgZGVzdGluYXppb25lJzsKJGxhbmdbJ2V4dHJhJ10gPSAnRXh0cmEnOwokbGFuZ1snY29weSddID0gJ0NvcGlhJzsKJGxhbmdbJ3NlbGVjdG9uZSddID0gJ1NlbGV6aW9uYSB1bm8nOwokbGFuZ1snYXV0b3dhdGVybWFyayddID0gJ1Bvc2l6aW9uZSBhdXRvbWF0aWNhbWVudGUgd2F0ZXJtYXJrIHN1bGxlIGltbWFnaW5pJzsKJGxhbmdbJ2ltYWdlX3NldHRpbmdzJ10gPSAnSW1wb3N0YXppb25pIEltbWFnaW5lJzsKJGxhbmdbJ3Byb21wdF9nZXRmaWxlX3Jlc3VsdHBhZ2UnXSA9ICdQYWdpbmEgZGEgdXRpbGl6emFyZSBwZXIgZXJyb3JpIG8gYWx0cmkgbWVzc2FnZ2kgcmVsYXRpdmkgYWxsbyBzY2FyaWNhbWVudG8gZGVpIGZpbGUnOwokbGFuZ1snZXJyb3JfaW52YWxpZF9rZXknXSA9ICdMYSBjaGlhdmUgZGkgY2FyaWNhbWVudG8gaW5zZXJpdGEgbm9uICZlZ3JhdmU7IHZhbGlkYSAoZm9yc2UgaGEgcmFnZ2l1bnRvIGxhIGNhcGFjaXQmYWdyYXZlOyBtYXNzaW1hIGRpIHNjYXJpY2FtZW50byBvICZlZ3JhdmU7IHNjYWR1dGEpJzsKJGxhbmdbJ2RmbHRfdGltZWxpbWl0ZWRfc3ViamVjdCddID0gJ3skc2l0ZW5hbWV9IC0gQXZldGUgcmljZXZ1dG8gZGlyaXR0aSBkaSBhY2Nlc3NvIHRlbXBvcmFuZWkgYSB7JGVudHJ5LT5uYW1lfHN0cmlwX3RhZ3N9JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnT2dnZXR0byBkZWxsJiMwMzk7ZW1haWwgY3JlYXRhIHF1YW5kbyBzaSBpbnZpYSB1biB1cmwgY29uIHNjYWRlbnphIGRpIHRlbXBvJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJ10gPSAnRWxpbWluYSBhdXRvbWF0aWNhbWVudGUgZWxlbWVudGkgc2NhZHV0aSBkb3BvIE4gb3JlIDxlbT4oc3BlY2lmaWNhdGUgMCBwZXIgZGlzYWJpbGl0YXJlIGwmIzAzOTtlbGltaW5hemlvbmUgYXV0b21hdGljYSk8L2VtPjonOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3NlbmRpdCddID0gJ0ludmlhcmUgcXVlc3RvIHVybCBhZ2xpIGluZGlyaXp6aSBlbWFpbCBzcGVjaWZpY2F0aT8nOwokbGFuZ1sndXJsX2tleSddID0gJ0NoaWF2ZSBVUkwnOwokbGFuZ1snY3JlYXRlZCddID0gJ0NyZWF0byc7CiRsYW5nWydleHBpcmVzJ10gPSAnU2NhZGUnOwokbGFuZ1snYWRkZWRpdF90aW1lbGltaXRlZF9rZXknXSA9ICdBZ2dpdW5naS9Nb2RpZmljYSBDaGlhdmUgVGVtcG9yYW5lYSc7CiRsYW5nWyd0aW1lX2xpbWl0ZWRfa2V5X2FkZGVkJ10gPSAnQ2hpYXZlIFRlbXBvcmFuZWEgQWdnaXVudGEnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnTnVtZXJvIGRpIG9yZSc7CiRsYW5nWydudW1fZG93bmxvYWRzJ10gPSAnTnVtZXJvIGRpIFNjYXJpY2FtZW50aSc7CiRsYW5nWydlbWFpbF9hZGRyZXNzJ10gPSAnSW5kaXJpenpvIEVtYWlsJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ1ZhbG9yZSByaWNoaWVzdG8gbm9uIHByZXNlbnRlIG8gbm9uIHZhbGlkbzogJXMnOwokbGFuZ1snYWRkX3RpbWVsaW1pdGVkX2tleSddID0gJ0FnZ2l1bmdpIENoaWF2ZSBUZW1wb3JhbmVhJzsKJGxhbmdbJ2ZpbGVfaW5mbzInXSA9ICdGaWxlICVzIChpZD0lZCknOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdTcGVjaWZpY2EgaWwgbnVtZXJvIHByZWRlZmluaXRvIGRpIHZvbHRlIGluIGN1aSB1biBmaWxlLCBpZGVudGlmaWNhdG8gZGEgdW5hIGNoaWF2ZSBzcGVjaWZpY2EsIHBvc3NhIGVzc2VyZSBzY2FyaWNhdG8nOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ051bWVybyBQcmVkZWZpbml0byBTY2FyaWNhbWVudGknOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9ob3VycyddID0gJ1NwZWNpZmljYSBpbCBudW1lcm8gcHJlZGVmaW5pdG8gZGkgb3JlIGRpIHZhbGlkaXQmYWdyYXZlOyBwZXIgdW5hIGNoaWF2ZSB0ZW1wb3JhbmVhLiAgU3BlY2lmaWNhdGUgMCBwZXIgb3JlIGlsbGltaXRhdGUnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnTnVtZXJvIGRpIG9yZSBkaSB2YWxpZGl0JmFncmF2ZTsgQ2hpYXZlIFRlbXBvcmFuZWEnOwokbGFuZ1sndGltZWxpbWl0ZWRfdXJsX3NldHRpbmdzJ10gPSAnSW1wb3N0YXppb25pIENoaWF2ZSBUZW1wb3JhbmVhJzsKJGxhbmdbJ21hbmFnZV90aW1lbGltaXRlZCddID0gJ0dlc3Rpc2NpIEFjY2Vzc28gVGVtcG9yYW5lbyc7CiRsYW5nWyd1cGxvYWRpbmdfc2V0dGluZ3MnXSA9ICdJbXBvc3RhemlvbmkgQ2FyaWNhbWVudG8gRmlsZSc7CiRsYW5nWydnZW5lcmFsX3NldHRpbmdzJ10gPSAnSW1wb3N0YXppb29uaSBHZW5lcmFsaSc7CiRsYW5nWyd0aHVtYm5haWxfc2V0dGluZ3MnXSA9ICdDcmVhemlvbmUgTWluaWF0dXJlJzsKJGxhbmdbJ3RpdGxlX3JlZGlyZWN0X29uX3NlbmRmaWxlJ10gPSAnUGFnaW5hIGEgY3VpIHJlaW5kaXJpenphcmUgZG9wbyBsJiMwMzk7aW52aW8gZGkgdW4gZmlsZSc7CiRsYW5nWydsYmxfYmFjayddID0gJ0luZGlldHJvJzsKJGxhbmdbJ2xibF90ZW1wbGF0ZXMnXSA9ICdNb2RpZmljYSBNb2RlbGxpJzsKJGxhbmdbJ3Byb21wdF9wdWJsaWNfZmllbGQnXSA9ICdJbCBjYW1wbyAmZWdyYXZlOyBwdWJibGljbyA8ZW0+KHB1Jm9ncmF2ZTsgZXNzZXJlIHZpc3VhbGl6emF0byBkYWkgdmlzaXRhdG9yaSBkZWwgc2l0byk8L2VtPic7CiRsYW5nWyd1cGxvYWRfZWRpdGVkJ10gPSAnRGV0dGFnbGkgRmlsZSBNb2RpZmljYXRpIHBlciAlcyc7CiRsYW5nWydpbmZvX3RodW1ibmFpbCddID0gJ1VuIGZpbGUgbWluaWF0dXJhIG9wemlvbmFsZSc7CiRsYW5nWyd1cGxvYWRfZmlsZSddID0gJ0NhcmljYSBOdW92byBGaWxlJzsKJGxhbmdbJ21zZ19maWVsZF9kZWxldGVkJ10gPSAnQ2FtcG8gZWxpbWluYXRvJzsKJGxhbmdbJ2Fza19kZWxldGVfZmllbGQnXSA9ICdTaWV0ZSBjZXJ0aSBkaSB2b2xlcmUgZWxpbWluYXJlIHF1ZXN0YSBkZWZpbml6aW9uZSBkaSBjYW1wbyBlIHR1dHRpIGkgdmFsb3JpIGFzc29jaWF0aT8nOwokbGFuZ1sneWVzJ10gPSAnUyZpZ3JhdmU7JzsKJGxhbmdbJ25vJ10gPSAnTm8nOwokbGFuZ1sndHlwZSddID0gJ1RpcG8nOwokbGFuZ1snZmllbGR0eXBlX211bHRpc2VsZWN0J10gPSAnTGlzdGEgTXVsdGlzZWxlemlvbmUnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnTGlzdGEgYSBEaXNjZXNhJzsKJGxhbmdbJ2ZpZWxkdHlwZV9jaGVja2JveCddID0gJ0NoZWNrYm94JzsKJGxhbmdbJ2ZpZWxkdHlwZV90ZXh0YXJlYSddID0gJ0FyZWEgZGkgVGVzdG8nOwokbGFuZ1snZmllbGR0eXBlX3RleHRpbnB1dCddID0gJ0lucHV0IGRpIHRlc3RvJzsKJGxhbmdbJ3Byb21wdF91c2Vfd3lzaXd5ZyddID0gJ1VzYSBlZGl0b3Igd3lzaXd5ZyBwZXIgbGEgbW9kaWZpY2EgZGVpIHZhbG9yaSBkaSBxdWVyc3RvIGNhbXBvJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0X2NvbnRlbnQnXSA9ICdDb250ZW51dG8gcHJlZGVmaW5pdG8gcGVyIGFyZWEgZGkgdGVzdG8nOwokbGFuZ1sncHJvbXB0X2Ryb3Bkb3duX29wdGlvbnMnXSA9ICdPcHppb25pICh1biB2YWxvcmUgcGVyIGxpbmVhKSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbWF4bGVuZ3RoJ10gPSAnTHVuZ2hlenphIG1hc3NpbWEgZGVsIGNhbXBvJzsKJGxhbmdbJ3Byb21wdF9maWVsZF9sZW5ndGgnXSA9ICdMdW5naGV6emEgZGVsIGNhbXBvJzsKJGxhbmdbJ3Byb21wdF9maWVsZF90eXBlJ10gPSAnVGlwbyBkaSBjYW1wbyc7CiRsYW5nWydwcm9tcHRfZmllbGRfbmFtZSddID0gJ05vbWUgY2FtcG8nOwokbGFuZ1sndGl0bGVfYWRkX2ZpZWxkJ10gPSAnQWdnaXVuZ2kgbyBtb2RpZmljYSBEZWZpbml6aW9uZSBDYW1wbyc7CiRsYW5nWydmaWVsZF9kZWZpbml0aW9ucyddID0gJ0RlZmluaXppb25pIGRlbCBjYW1wbyc7CiRsYW5nWydwcm9tcHRfYWRkX2ZpZWxkJ10gPSAnQWdnaXVuZ2VyZSB1bmEgZGVmaW5pemlvbmUgZGVsIGNhbXBvJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZWNpZmljYSBpbCBjb21wb3J0YW1lbnRvIGRlbCBtb2R1bG8gdGFnLiBQb3NzaWJpbGkgdmFsb3JpIHNvbm86IGRlZmF1bHQgLSAoaWwgY29tcG9ydGFtcm50byBwcmVkZWZpbml0byksIGRldGFpbCAtIHBlciB2aXN1YWxpenphcmUgaWwgZGV0dGFnbGlvIGRpIHVuIHNpbmdvbG8gZmlsZSBiYXNhdG8gc3VsIHVwbG9hZF9pZCBlIHlvdXNlbmRpdCAtICBwZXIgdmlzdWFsaXp6YXJlIHVuIGZvcm0gcGVyIHBlcm1ldHRlciBsJiMwMzk7dXBsb2FkIGRpIHVuIGZpbGUgZSBzcGVkaXJsbyBhIG51bWVyb3NpIGluZGlyaXp6aSBpbiB1biBzaW5nb2xvIHBhc3NvJzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ1NwZWNpZmljYSBsYSBwYWdpbmEgaWQgbyBhbGlhcyBkaSBwYWdpbmEgY2hlIGRvdnJlYmJlIGVzc2VyZSB1c2F0YSBwZXIgc3BlZGlyZSB1biBmaWxlJzsKJGxhbmdbJ2ZpbGVfdXBsb2FkZWQnXSA9ICdGaWxlIENhcmljYXRvIENvcnJldHRhbWVudGUnOwokbGFuZ1sndG8nXSA9ICdBJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdBZ2dpdW5nZSBvIE1vZGlmaWNhIHVuIE1vZGVsbG8gZGkgTW9kdWxvIHBlciAmcXVvdDtZb3VTZW5kSXQmcXVvdDsnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ01vZGVsbGkgTW9kdWxvIFlvdVNlbmRJdCc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdUZW1wbGF0ZSBwcmVkZWZpbml0byAmcXVvdDtZb3VTZW5kSXQmcXVvdDsnOwokbGFuZ1snbXNnX2ZpbGVfc2VudCddID0gJ1VuIG1lc3NhZ2dpbyAmZWdyYXZlOyBzdGF0byBzcGVkaXRvIGFnbGkgaW5kaXJpenppIHNlbGV6aW9uYXRpIGNoZSBjb250ZW5nb25vIGluZm9ybWF6aW9uaSBzdWwgZmlsZSBlIGNvbWUgcG90ZXJsbyByZWN1cGVyYXJlLic7CiRsYW5nWydlcnJvcl9ub2FkZHJlc3NlcyddID0gJ0luc2VyaXJlIGFsbWVubyB1biBpbmRpcml6em8gZGkgZGVzdGluYXppb25lJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ0luc2VyaXJlIHVuIG9nZ2V0dG8nOwokbGFuZ1snc3ViamVjdCddID0gJ09nZ2V0dG8nOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUGFnaW5hIGRhIHV0aWxpenphcmUgcGVyIHVuIFVSTCB0ZW1wb3JhbmVvIG8gJnF1b3Q7WW91U2VuZEl0JnF1b3Q7JzsKJGxhbmdbJ2ZpbGVfaW5mbyddID0gJ0luZm9ybWF6aW9uaSBzdWwgRmlsZSc7CiRsYW5nWydzZW5kJ10gPSAnSW52aWEnOwokbGFuZ1snbm90ZXMnXSA9ICdOb3RlJzsKJGxhbmdbJ2FkZHJlc3NlZXMnXSA9ICdJbnZpYSBpbmZvcm1hemlvbmkgc3UgcXVlc3RvIGZpbGUgYSc7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGVfZW1haWxfdGVtcGxhdGUnXSA9ICdNb2RlbGxvIEVtYWlsICZxdW90O0ludmlhIHVuIEZpbGUmcXVvdDsnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWdnaXVuZ2UgbyBNb2RpZmljYSB1biBNb2RlbGxvIE1vZHVsbyAmcXVvdDtJbnZpYSB1biBGaWxlJnF1b3Q7JzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gTW9kdWxvICZxdW90O0ludmlhIHVuIEZpbGUmcXVvdDsnOwokbGFuZ1sncHJvbXB0X25vdGlmeV9lbWFpbF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZW1haWwgbm90aWZpY2EgY2FyaWNhbWVudG8gZmlsZSc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fc3lzZGVmYXVsdCddID0gJ01vZGVsbG8gTW9kdWxvIHByZWRlZmluaXRvICZxdW90O0ludmlhIHVuIEZpbGUmcXVvdDsnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVsZXRhYmxlJ10gPSAnSSBGaWxlIGluIHF1ZXN0YSBjYXRlZ29yaWEgcG9zc29ubyBlc3NlcmUgZWxpbWluYXRpJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ1Blcm1ldHRlIGwmIzAzOTtlbGltaW5hemlvbmUgZGkgZmlsZSBkYWwgZnJvbnRlbmQnOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdNb2RlbGxpIFByZWRlZmluaXRpJzsKJGxhbmdbJ2ZpcnN0cGFnZSddID0gJ1ByaW1hIHBhZ2luYSc7CiRsYW5nWydwcmV2cGFnZSddID0gJ1BhZ2luYSBwcmVjZWRlbnRlJzsKJGxhbmdbJ25leHRwYWdlJ10gPSAnUGFnaW5hIHNlZ3VlbnRlJzsKJGxhbmdbJ2xhc3RwYWdlJ10gPSAnVWx0aW1hIHBhZ2luYSc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICc8PCc7CiRsYW5nWydwcmV2cGFnZV9hcnJvdyddID0gJzwnOwokbGFuZ1snbmV4dHBhZ2VfYXJyb3cnXSA9ICc+JzsKJGxhbmdbJ2xhc3RwYWdlX2Fycm93J10gPSAnPj4nOwokbGFuZ1sncGFnZSddID0gJ1BhZ2luYSc7CiRsYW5nWydvZiddID0gJ2RpJzsKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdHcnVwcGkgRkVVIGF1dG9yaXp6YXRpJzsKJGxhbmdbJ2luZm9fZ3JvdXBsaXN0J10gPSAnU2VsZXppb25hIGlsIGdydXBwaSBGRVUgYXV0b3JpenphdGkgYWQgYWNjZWRlcmUgYWkgZmlsZSBpbiBxdWVzdGEgY2F0ZWdvcmlhLiBEZXNlbGV6aW9uYSB0dXR0byBwZXIgcGVybWV0dGVyZSBsJiMwMzk7YWNjZXNzbyBhIHR1dHRpJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdDZXJjYSBudW92aSBmaWxlIGluIHF1ZXN0YSBjYXRlZ29yaWEnOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdDcmVhIG1pbmlhdHVyZSBtYW5jYW50aSBwZXIgaSBmaWxlIGluIHF1ZXN0YSBjYXRlZ29yaWEuJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnQ3JlYSBNaW5pYXR1cmUnOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbCddID0gJyhyaSlDcmVhIGxhIE1pbmlhdHVyYSBwZXIgcXVlc3RvIGZpbGUnOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbCddID0gJ0NyZWEgTWluaWF0dXJhJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ05vbiBwb3NzbyBhcHJpcmUgbGEgY2FydGVsbGEgKHByb2JsZW1pIGRpIHBlcm1lc3NpPyknOwokbGFuZ1sndGl0bGVfZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnRGltZW5zaW9uZSBkaSBvZ25pIHNlZ21lbnRvIGRpIGRvd25sb2FkJzsKJGxhbmdbJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnTGEgbW9kaWZpY2EgZGkgcXVlc3RvIHBhcmFtZXRybyBhdnImYWdyYXZlOyBlZmZldHRvIHN1bGxhIHZlbG9jaXQmYWdyYXZlOyBkaSBkb3dubG9hZCwgZSBwdSZvZ3JhdmU7IGFpdXRhcmUgaW4gdW4gYW1iaWVudGkgY29uIHBvY2EgbWVtb3JpYSc7CiRsYW5nWyd3YXJuaW5nX3NhZmVfbW9kZSddID0gJ1BIUCBzYWZlIG1vZGUgJmVncmF2ZTsgYWJpbGl0YXRvLiBRdWVzdG8gcHUmb2dyYXZlOyBjYXVzYXJlIHByb2JsZW1pIGNvbiB1cGxvYWRpbmcgKHBlcm1lc3NpKSwgZWQgaW50ZXJmZXJpcmUgY29uIGwmIzAzOTthYmlsaXQmYWdyYXZlOyBkaSBxdWVzdG8gbW9kdWxvIGRpIHNwZWRpcmUgZmlsZXMgcGVyIGxhIG5vbiBwb3NzaWJpbGl0JmFncmF2ZTsgZGkgc292cmFzY3JpdmVyZSBhbGN1bmkgc2V0dGFnZ2kuIFNpZXRlIGF2dmlzYXRpIGRpIGNvbnRhdHRhcmUgaWwgVm9zdHJvIHByb3ZpZGVyIHBlciB2ZWRlcmUgZGkgZGlzYWJpbGl0YXJlIGlsIHNhZmUgbW9kZS4nOwokbGFuZ1sncGFyYW1fZGV0YWlscGFnZSddID0gJ1V0aWxlIHBlciB2aXN1YWxpenphcmUgdW4gcmVwb3J0IGRldHRhZ2xpYXRvIHVzYW5kbyB1bmEgcGFnaW5hIChldmVudHVhbG1lbnRlIGNvbiBhbHRybyBNb2RlbGxvKSBkaWZmZXJlbnRlLCBxdWVzdG8gcGFyYW1ldHJvIHByZW5kZSBpZCBvIGFsaWFzIGRpIHBhZ2luYSBjaGUgZG92cmViYmUgZXNzZXJlIHVzYXRhIHBlciB2aXN1YWxpenphcmUgaWwgcmVwb3J0IGRpIGRldHRhZ2xpbyc7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdVbiB2YWxvcmUgYm9vbGVhbm8gY2hlIGluZGljYSBzZSBpIG5vbWkgZGVpIGZpbGUgZGViYmFubyBlc3NlcmUgcHJlZmlzc2F0aSc7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnVW4gYm9vbGVhbm8gY2hlIGluZGljYSAgY2hlIGlsIHByZWZpc3NvIGRvdnJlYmJlIGVzc2VyZSBwcmVzbyBkYWxsJiMwMzk7YXV0b3JlIGNvcnJlbnRlLCBzZSBub24gc3BlY2lmaWNhdG8sIGlsIHByZWZpc3NvICZlZ3JhdmU7IGlsIHRlbXBvIGNvcnJlbnRlIChpbiBmb3JtYXRvIGRlY2hleCknOwokbGFuZ1sncGFyYW1fbm9jYXB0Y2hhJ10gPSAnRGlzYWJpbGl0YSBpbCBzdXBwb3J0byBjYXB0Y2hhIChhdHRpdm8gZGkgZGVmYXVsdCkgbmVsIG1vZHVsbyB1cGxvYWQnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ01vZGlmaWNhIGlsIE1vZGVsbG8gZGVsIE1vZHVsbyBkaSBVcGxvYWQnOwokbGFuZ1snY2FwdGNoYV90aXRsZSddID0gJ0luc2VyaXRlIGlsIHRlc3RvIGNvbnRlbnV0byBuZWxsJiMwMzk7aW1tYWdpbmUnOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnSWwgdGVzdG8gaW5zZXJpdG8gbm9uIGNvcnJpc3BvbmRlIGNvbiBsJiMwMzk7aW1tYWdpbmUgdmlzdWFsaXp6YXRhJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddID0gJ0NyZWEgYW50ZXByaW1lIHBlciBpIGZpbGUgY29uIHF1ZXN0ZSBlc3RlbnNpb25pJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfc2l6ZSddID0gJ0RpbWVuc2lvbmUgbWFzc2ltYSAoaW4gcGl4ZWwpIGRlbGwmIzAzOTthbnRlcHJpbWEgZ2VuZXJhdGEnOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnQ2FyaWNhIHVuIEljb25hJzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdCddID0gJ1F1ZXN0byB0ZXN0byB2aWVuZSB1c2F0byBxdWFuZG8gc2kgY3JlYSB1biBudW92byBtb2RlbGxvIGRpIHF1ZXN0byB0aXBvJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF9zeXNkZWZhdWx0J10gPSAnRGVmYXVsdCBkaSBTaXN0ZW1hIGRlbCBNb2RlbGxvIGRpIFJhcHBvcnRvIERldHRhZ2xpJzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfc3lzZGVmYXVsdCddID0gJ0RlZmF1bHQgZGkgU2lzdGVtYSBkZWwgTW9kZWxsbyBkaSBSYXBwb3J0byBTb21tYXJpbyc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdEZWZhdWx0IGRpIFNpc3RlbWEgZGVsIE1vZGVsbG8gZGVsIE1vZHVsbyBkaSB1cGxvYWQnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdNb2RlbGxvJzsKJGxhbmdbJ3Jlc2V0dG9kZWZhdWx0J10gPSAnUmlwcmlzdGluYSB2YWxvcmkgcHJlZGVmaW5pdGknOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGkgUmFwcG9ydG8gU29tbWFyaW8nOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBkaSBSYXBwb3J0byBEZXR0YWdsaSc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05vbWUnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHQnXSA9ICdQcmVkZWZpbml0byc7CiRsYW5nWydsZWdlbmRfdXBsb2FkZm9ybSddID0gJ0NhcmljYSB1biBGaWxlJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ01hbmNhIHVuIHBhcmFtZXRybyBlc3NlbnppYWxlJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmduYW1lJ10gPSAnRGV2ZSBlc3NlcmUgc3BlY2lmaWNhdG8gdW4gbm9tZSBwZXIgaWwgZmlsZSc7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ0RldmUgZXNzZXJlIHNwZWNpZmljYXRhIGFsbWVubyB1biYjMDM5O2VzdGVuc2lvbmUgZGkgZmlsZSc7CiRsYW5nWydlcnJvcl9taXNzaW5naWNvbiddID0gJ0RldmUgZXNzZXJlIHNwZWNpZmljYXRhIHVuJiMwMzk7aWNvbmEnOwokbGFuZ1snZXJyb3Jfbm9zdWNocm93J10gPSAnTm9uICZlZ3JhdmU7IHBvc3NpYmlsaWUgdHJvdmFyZSBsYSByaWdhIHNwZWNpZmljYXRhICc7CiRsYW5nWyduYW1lX3Vua25vd24nXSA9ICdTY29ub3NjaXV0byc7CiRsYW5nWydkZXNjcmlwdGlvbl91bmtub3duJ10gPSAnRGVzY3JpemlvbmUgZGVsIHRpcG8gZGkgZmlsZSBwZXIgZmlsZSBub24gY29ycmlzcG9uZGVudGknOwokbGFuZ1snaW1hZ2UnXSA9ICdJbW1hZ2luZSc7CiRsYW5nWydpY29uJ10gPSAnSWNvbmEnOwokbGFuZ1snZXh0ZW5zaW9ucyddID0gJ0VzdGVuc2lvbmUgRmlsZSc7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ0FnZ2l1bmdpIHVuIE51b3ZvIFRpcG8gZGkgRmlsZSc7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnVGlwaSBkaSBGaWxlJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnlpZCddID0gJ05lc3N1biBJRCBkaSBDYXRlZ29yaWEgZm9ybml0byc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5J10gPSAnTmVzc3VuIElEIGRpIENhdGVnb3JpYSBmb3JuaXRvJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJ0VzaXN0ZSBnaSZhZ3JhdmU7IHVuIG1vZGVsbG8gY29uIGxvIHN0ZXNzbyBub21lJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZW5hbWUnXSA9ICdOb21lIE1vZGVsbG8nOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnTW9kZWxsbyc7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdDcmVhIHVuIG51b3ZvIE1vZGVsbG8nOwokbGFuZ1snaGVscF9PbkRvd25sb2FkJ10gPSAnPHA+VW4gZXZlbnRvIGdlbmVyYXRvIHFpYW5kbyB1biB1dGVudGUgdGVybWluYSBpbCBkb3dubG9hZCBkaSB1biBmaWxlPC9wPg0KPGg0PlBhcmFtZXRyaTwvaDQ+DQo8dWw+DQo8bGk+PGVtPmlkPC9lbT4gLSBJRCBkaSBVcGxvYWQ8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOb21lIGZpbGU8L2xpPg0KPGxpPjxlbT5pcDwvZW0+IC0gTCYjMDM5O2luZGlyaXp6byBJUCBkaSBjaGkgZWZmZXR0dWEgaWwgZG93bmxvYWQ8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uRGVsZXRlQ2F0ZWdvcnknXSA9ICc8cD5VbiBldmVudG8gZ2VuZXJhdG8gcXVhbmRvIHZpZW5lIGNhbmNlbGxhdGEgdW5hIENhdGVnb3JpYTwvcD4NCjxoND5QYXJhbWV0cmk8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOb21lIENhdGVnb3JpYTwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFBlcmNvcnNvIGRlbGxhIENhdGVnb3JpYTwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxwPlVuIGV2ZW50byBnZW5lcmF0byBxdWFuZG8gdmllbmUgY3JlYXRhIHVuYSBDYXRlZ29yaWE8L3A+DQo8aDQ+UGFyYW1ldHJpPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gSWwgbm9tZSBkZWxsYSBjYXRlZ29yaWE8L2xpPg0KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gTGEgZGVzY3JpemlvbmUgZGVsbGEgY2F0ZWdvcmlhPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gSWwgcGVyY29yc28gZGVsbGEgY2F0ZWdvcmlhPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gVW4gb3B6aW9uZSBjaGUgaW5kaWNhIHNlIGxhIGNhdGVnb3JpYSAmZWdyYXZlOyBlbGVuY2FiaWxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPlVuIGV2ZW50byBnZW5lcmF0byBxdWFuZG8gdW4gZmlsZSB2aWVuZSByaW1vc3NvIHRyYW1pdGUgbCYjMDM5O2ludGVyZmFjY2lhIGFtbWluaXN0cmF0b3JlIG8gdXRlbnRlPC9wPg0KPGg0PlBhcmFtZXRyaTwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIElsIG5vbWUgZGVsIGZpbGUgcmltb3NzbzwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBMJiMwMzk7aWQgZGVsIGZpbGUgcmltb3NzbzwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBMJiMwMzk7aWQgZGVsbGEgY2F0ZWdvcmlhPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPlVuIGV2ZW50byBnZW5lcmF0byBxdWFuZG8gdW4gZmlsZSB2aWVuZSBjYXJpY2F0byB0cmFtaXRlIGwmIzAzOTtpbnRlcmZhY2NpYSBhbW1pbmlzdHJhdG9yZSBvIHV0ZW50ZTwvcD4NCjxoND5QYXJhbWV0cmk8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gSWwgbm9tZSBkZWxsYSBjYXRlZ29yaWE8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBJbCBub21lIGRlbCBmaWxlIGNhcmljYXRvPC9saT4NCjxsaT48ZW0+c2l6ZTwvZW0+IC0gTGEgZGltZW5zaW9uZSBkZWwgZmlsZSBjYXJpY2F0bzwvbGk+DQo8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIExhIGRlc2NyaXppb25lIGJyZXZlIGRlbCBmaWxlIGNhcmljYXRvIChwdSZvZ3JhdmU7IGVzc2VyZSB2dW90YSk8L2VtPjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBMYSBkZXNjcml6aW9uZSBjb21wbGV0YSBwZXIgaWwgZmlsZSBjYXJpY2F0byAocHUmb2dyYXZlOyBlc3NlcmUgdnVvdGEpPC9lbT48L2xpPg0KPGxpPjxlbT5hdXRob3I8L2VtPiAtIEwmIzAzOTthdXRvcmUgZGVsIGZpbGUgY2FyaWNhdG8gKHNlIGRpc3BvbmliaWxlKTwvZW0+PC9saT4NCjxsaT48ZW0+aXBfYWRkcmVzczwvZW0+IC0gTCYjMDM5O2luZGlyaXp6byBpbnRlcm5ldCBkZWwgY2xpZW50IGNoZSBoYSBjYXJpY2F0byBpbCBmaWxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaW5mb19ldmVudF9vbmRlbGV0ZWNhdGVnb3J5J10gPSAnRXZlbnRvIGdlbmVyYXRvIGRvcG8gbGEgY2FuY2VsbGF6aW9uZSBkaSB1bmEgY2F0ZWdvcmlhJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25jcmVhdGVjYXRlZ29yeSddID0gJ0V2ZW50byBnZW5lcmF0byBkb3BvIGxhIGNyZWF6aW9uZSBkaSB1bmEgY2F0ZWdvcmlhJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0V2ZW50byBnZW5lcmF0byBkb3BvIGxvIHNjYXJpY2FtZW50byBkaSB1biBmaWxlJzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdFdmVudG8gZ2VuZXJhdG8gZG9wbyBpbCBjYXJpY2FtZW50byBkaSB1biBudW92byBmaWxlJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFdmVudG8gZ2VuZXJhdG8gcXVhbmRvIHVuIGZpbGUgdmllbmUgcmltb3Nzbyc7CiRsYW5nWyd0aXRsZV91c2VydGFnX29udXBsb2FkJ10gPSAnVGFnIGRlZmluaXRvIGRhbGwmIzAzOTt1dGVudGUgZGEgaW52b2NhcmUgYWwgdGVybWluZSBkZWwgY2FyaWNhbWVudG8gZmlsZSc7CiRsYW5nWydub25lJ10gPSAnTmVzc3Vubyc7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICdDb3JyaXNwb25kZW56ZSB0cm92YXRlJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRybyc7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnUmVkaXJlemlvbmEgYWxsJiMwMzk7IGlkL2FsaWFzIGRlbGxhIHBhZ2luYSBhbCBjYXJpY2FtZW50byBkZWxsJiMwMzk7dXRlbnRlJzsKJGxhbmdbJ2RldGFpbHMnXSA9ICdEZXR0YWdsaSc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnU2lldGUgY2VydGkgZGkgdm9sZXJlIGNvcnJlZ2dlcmUgbGUgcHJlZmVyZW56ZT8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnTmVzc3VuIGZpbGUgY2FyaWNhdG8uJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnUGVybWV0dGkgU292cmFzY3JpdHR1cmEnOwokbGFuZ1snaW5mb19yZXBsYWNlJ10gPSAnU29zdGl0dWlzY2kgcXVhbHNpYXNpIGZpbGUgY29uIGxvIHN0ZXNzbyBub21lIChub24gbW9kaWZpY2EgbCYjMDM5O0lEKSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnTm9uIG1vc3RyYSBuZXNzdW4gcmlzdWx0YXRvIGluaXppYWxlIHF1YW5kbyBpbCBmaWx0cm8gJmVncmF2ZTsgYXR0aXZhdG8nOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnRm9ybmlzY2UgdW5hIGNoaWF2ZSBhZ2dpdW50aXZhIGFsIG1vZHVsbyBwZXIgdW5hIHN1Y2Nlc3NpdmEgb3JnYW5penphemlvbmUgZGVnbGkgdXBsb2FkLiAgUXVlc3RhIGNoaWF2ZSBwdSZvZ3JhdmU7IGVzc2VyZSB1bmEgc3RyaW5nYSBjb2RpZmljYXRhIGNvbWU6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7LCBldGMuICBRdWVzdG8gcGFyYW1ldHJvIHNvbGl0YW1lbnRlICZlZ3JhdmU7IG5lY2Vzc2FyaW8gc29sbyBxdWFuZG8gdmllbmUgaW5jb3Jwb3JhdG8gaWwgbW9kdWxvIFVwbG9hZHMgaW4gdW4gYWx0cm8gbW9kdWxvJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnTmFzY29uZGUgaWwgY2FtcG8gYXV0b3JlIGRhbCBtb2R1bG8gZGkgVXBsb2FkLiBRdWVzdG8gcGFyYW1ldHJvICZlZ3JhdmU7IHZhbGlkbyBzb2xvIHF1YW5kbyAmZWdyYXZlOyBpbXBvc3RhdG8gbW9kZT0mIzAzOTt1cGxvYWQmIzAzOTsuICBTZSBwcmVzZW50ZSBpbCBtb2R1bG8gRnJvbnRlbmRVc2VycyBlIHVuIHV0ZW50ZSAmZWdyYXZlOyBhdHR1YWxtZW50ZSBsb2dnYXRvLCBpbCBub21lIHV0ZW50ZSB2ZXJyJmFncmF2ZTsgY29uc2VydmF0byBpbiB1biBjYW1wbyBuYXNjb3N0byc7CiRsYW5nWydwYXJhbV91cGxvYWRfaWQnXSA9ICd1cGxvYWRfaWQ9JnF1b3Q7aWQmcXVvdDsgLSBzcGVjaWZpY2EgdW4gZmlsZSBzaW5nb2xvIHBlciBsZSBtb2RhbGl0JmFncmF2ZTsgdXJsL2xpbmsgbyBzaW5nb2xvIChzb3ByYSknOwokbGFuZ1sncGFyYW1fZGV0YWlsdGVtcGxhdGUnXSA9ICdVdGlsaXp6YXJlIHVuIG1vZGVsbG8gY29uIHF1ZXN0byBub21lIHBlciBpbCByYXBwb3J0byBkZXR0YWdsaWF0by4nOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdVdGlsaXp6YXJlIHVuIG1vZGVsbG8gY29uIHF1ZXN0byBub21lIHBlciBxdWVzdG8gcmFwcG9ydG8gbyBtb2R1bG8uIFF1ZXN0byBtb2RlbGxvIGluc2VyaXNjZSBhdXRvbWF0aWNhbWVudGUgdW4gbW9kZWxsbyBjb24gaWwgbm9tZSBjb3JyaXNwb25kZW50ZSBkYWxsYSBsaXN0YSBhcHByb3ByaWF0YSBiYXNhdGEgc3VsbGEgbW9kYWxpdCZhZ3JhdmU7IHNwZWNpZmljYXRhJzsKJGxhbmdbJ3BhcmFtX2ZpbHRlciddID0gJ1Zpc3VhbGl6emEgaWwgbW9kdWxvIGRpIGZpbHRyYWdnaW8nOwokbGFuZ1sncGFyYW1fbm9faW50aXRpYWwnXSA9ICdFJiMwMzk7IHV0aWxlIHNvbG8gcXVhbmRvIGlsIHBhcmFtZXRybyBmaWx0cm8gdmllbmUgZm9ybml0bywgbyAmZWdyYXZlOyBhdHRpdm8gY29tZSB2YWxvcmUgcHJlZGVmaW5pdG8sIHF1ZXN0byBwYXJhbWV0cm8gaW5kaWNhIHNlIGRlYmJhbm5vIGVzc2VyZSByZXN0aXR1aXRpIGkgdmFsb3JpIGluaXppYWxpJzsKJGxhbmdbJ3BhcmFtX2ZpbGV0eXBlcyddID0gJ1Zpc3VhbGl6emEgc29sbyBpIGZpbGUgaWwgY3VpIHRpcG8gY29ycmlzcG9uZGUgY29uIHF1ZXN0YSBsaXN0YSBzZXBhcmF0YSBkYSB2aXJnb2xhJzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJyAgPHA+VGlwaSBkaSBvcmRpbmFtZW50bw0KICA8dWw+DQogIDxsaT48ZW0+ZGF0ZV9hc2M8L2VtPiAtIE9yZGluYSBwZXIgZGF0YSBhc2NlbmRlbnRlPC9saT4NCiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIE9yZGluYSBwZXIgZGF0YSBkaXNjZW5kZXRlPC9saT4NCiAgPGxpPjxlbT5uYW1lX2FzYzwvZW0+IC0gT3JkaW5hIHBlciBub21lIGFzY2VuZGVudGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gT3JkaW5hIHBlciBub21lIGRpc2NlbmRlbnRlPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gT3JkaW5hIHBlciBkaW1lbnNpb25lIGFzY2VuZGVudGU8L2xpPg0KICA8bGk+PGVtPnNpemVfZGVzYzwvZW0+IC0gT3JkaW5hIHBlciBkaW1lbnNpb25lIGRpc2NlbmRlbnRlPC9saT4NCiAgPGxpPjxlbT5kZXNjX2FzYzwvZW0+IC0gT3JkaW5hIHBlciBkZXNjcml6aW9uZSBhc2NlbmRlbnRlPC9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIE9yZGluYSBwZXIgZGVzY3JpemlvbmUgZGlzY2VuZGVudGU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9hc2M8L2VtPiAtIE9yZGluYSBwZXIgYXV0b3JlIGFzY2VuZGVudGU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9kZXNjPC9lbT4gLSBPcmRpbmEgcGVyIGF1dG9yZSBkaXNjZW5kZW50ZTwvbGk+DQogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBPcmRpbmEgcGVyIGluZGlyaXp6byBpcCBhc2NlbmRlbnRlPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBPcmRpbmEgcGVyIGluZGlyaXp6byBpcCBkaXNjZW5kZW50ZTwvbGk+DQogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBPcmRpbmUgY2FzdWFsZTwvbGk+DQogIDwvdWw+DQogIDwvcD4nOwokbGFuZ1sncGFyYW1fbGlzdGluZ3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgdXNhdG8gcGVyIGxhIGxpc3RhIGRlbGxlIGNhdGVnb3JpZSBkb3BvIGxhIHBhZ2luYSBTb21tYXJpbyBDYXRlZ29yaWEnOwokbGFuZ1sncGFyYW1fbGlzdGluZ3NvcnRvcmRlciddID0gJ09yZGluYW1lbnRvIChjb21lIHBhcmFtX3NvcnRvcmRlcikgdXNhdG8gcGVyIGxhIGxpc3RhIGRlbGxlIGNhdGVnb3JpZSBkb3BvIGxhIHBhZ2luYSBTb21tYXJpbyBDYXRlZ29yaWEnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICdmaWxlX2V4dGVuc2lvbnM9JnF1b3Q7ZXh0MSxleHQyLGV4dDMmcXVvdDsNCjxwPnZhbGlkbyBzb2xvIGNvbiBtb2RlPXVwbG9hZCwgcXVlc3RvIHBhcmFtZXRybyBsaW1pdGEgaSB0aXBpIGRpIGZpbGUgY2hlIHBvc3Nvbm8gZXNzZXJlIGNhcmljYXRpLiAgU292cmFzY3JpdmUgcXVhbHNpYXNpIGltcG9zdGF6aW9uZSBuZWxsZSBwcmVmZXJlbnplIGRlbCBtb2R1bG8uPC9wPic7CiRsYW5nWydwYXJhbV9jb3VudCddID0gJ2NvdW50PSZxdW90O04mcXVvdDsNCjxwPlVuIHBhcmFtZXRybyBwZXIgZWxlbmNhcmUgc29sbyBpIHByaW1pIE4gcmlzdWx0YXRpIGRlbGxhIHF1ZXJ5LiAgTCYjMDM5O2ltcGFnaW5hemlvbmUgc2FyZWJiZSBtaWdsaW9yZSwgbWEgcGVyIG9yYSBxdWVzdG8gcmlzb2x2ZXImYWdyYXZlOyBpbCBwcm9ibGVtYS48L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9JnF1b3Q7bmFtZSZxdW90Ow0KPHA+PGI+Tm90YTo8L2I+IExhIENhdGVnb3JpYSBwdSZvZ3JhdmU7IGVzc2VyZSAmcXVvdDthbGwmcXVvdDssIGNoZSBlbGVuY2hlciZhZ3JhdmU7IHR1dHRpIGdsaSB1cGxvYWQgZGEgdHV0dGUgbGUgY2F0ZWdpcmllIDxlbT5lbGVuY2FiaWxpPC9lbT48L3A+JzsKJGxhbmdbJ3BhcmFtX21vZGUnXSA9ICcgIDx1bD4NCiAgPGxpPjxlbT5kZXRhaWxlZDwvZW0+IC0gVmlzdWFsaXp6YSB1biBlbGVuY28gZGV0dGFnbGlhdG8gZGkgdHV0dGkgaSBmaWxlIG5lbGxhIGNhdGVnb3JpYTwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBWaXN1YWxpenphIHVuIG1vZHVsbyBjaGUgcGVybWV0dGEgYWQgdW4gVXRlbnRlIEZyb250ZW5kIGRpIGNhcmljYXJlIHVuIGZpbGU8L2xpPg0KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gVmlzdWFsaXp6YSBpbCBsaW5rIGFkIHVuIGZpbGU8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIFZpc3VhbGl6emEgdW5hIGxpc3RhIGEgc29tbWFyaW8gZGkgdHV0dGkgaSBmaWxlIG5lbGxhIGNhdGVnb3JpYTwvbGk+DQogIDxsaT48ZW0+c2luZ2xlPC9lbT4gLSBWaXN1YWxpenphIHVuIHJhcHBvcnRvIGRldHRhZ2xpYXRvIHN1IHVuIHVwbG9hZCBzaW5nb2xvPC9saT4NCiAgPC91bD4nOwokbGFuZ1sncGFyYW1fc2VsZWN0Zm9ybSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyB0aGUgZm9ybWlkIG9mIHRoZSBwYXJlbnQgZm9ybS4gIFVzZWQgdG8gaGFuZGxlIHBhcmFtZXRlciBwYXNzaW5nJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5hbWUnXSA9ICd3aGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgZmllbGQgdmFsdWUnOwokbGFuZ1sncGFyYW1fc2VsZWN0bm9uZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2V0aGVyICYjMDM5O25vbmUmIzAzOTsgaXMgYSB2YWxpZCBjaG9pY2UuJzsKJGxhbmdbJ3JldHVybnRvbW9kdWxlJ10gPSAnVG9ybmEgYWwgcGFubmVsbG8gZGVsIG1vZHVsbyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3JpZXMnXSA9ICdOb24gY2kgc29ubyBjYXRlZ29yaWUgZGVmaW5pdGUnOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdFc3RlbnNpb25lIG5lY2Vzc2FyaWEgcGVyIHR1dHRpIGkgZmlsZSBjYXJpY2F0aSc7CiRsYW5nWydyZXN0b3JlZGVmYXVsdHNjb25maXJtJ10gPSAnUXVlc3RhIG9wZXJhemlvbmUgcmlwcmlzdGluZXImYWdyYXZlOyBpbCBtb2RlbGxvIGFsIHByZWRlZmluaXRvIGRpIHNpc3RlbWEuIE9nbmkgbW9kaWZpY2EgZmF0dGEgdmVyciZhZ3JhdmU7IHBlcnNhLiAgU2lldGUgY2VydGkgZGkgdm9sZXJlIHByb2NlZGVyZT8nOwokbGFuZ1sndGh1bWJuYWlsJ10gPSAnQW50ZXByaW1hJzsKJGxhbmdbJ25ld3RodW1ibmFpbCddID0gJ1VwbG9hZCBudW92YSBNaW5pYXR1cmEnOwokbGFuZ1snaW5mb19zdW1tYXJ5J10gPSAnVW5hIGJyZXZlIGRlc2NyaXppb25lIGRlbCBmaWxlIChzZSB2dW90bywgaWwgbm9tZSBkZWwgZmlsZSB2aWVuZSB1dGlsaXp6YXRvIHNlbnphIGVzdGVuc2lvbmUpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnluYW1lJ10gPSAnVW4gbm9tZSBicmV2ZSBwZXIgbGEgdm9zdHJhIGNhdGVnb3JpYSAobGVnZ2liaWxlKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ1VuYSBkZXNjcml6aW9uZSBwZXIgbGEgdm9zdHJhIGNhdGVnb3JpYSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ0lsIG5vbWUgZGVsbGEgY2FydGVsbGEgZGVudHJvIGxhIGNhcnRlbGxhIGRpIHVwbG9hZCBjaGUgdmVyciZhZ3JhdmU7IHV0aWxpenphdGEgcGVyIGNvbnRlbmVyZSBpIGZpbGUgZGkgcXVlc3RhIGNhdGVnb3JpYS4gU2UgbGEgY2FydGVsbGEgY29uIHF1ZXN0byBub21lIG5vbiBlc2lzdGUgcHUmb2dyYXZlOyBlc3NlcmUgY3JlYXRhLic7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnVXRpbGl6emEgaWwgY2FtcG8gJiMwMzk7VXBsb2FkIEFzJiMwMzk7IChDYXJpY2EgQ29tZSkgcGVyIG1vZGlmaWNhcmUgaWwgbm9tZSBkZWwgZmlsZSBuZWwgY2FyaWNhbWVudG8uICBMYXNjaWF0ZSB2dW90byBwZXIgbWFudGVuZXJlIGxvIHN0ZXNzbyBub21lIGRpIGZpbGUuJzsKJGxhbmdbJ2Vycm9yX2NhbnRjcmVhdGVkaXJlY3RvcnknXSA9ICdOb24gcG9zc28gY3JlYXJlIGxhIGNhcnRlbGxhJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnTm9uIHJpZXNjbyBhIGluaXppYWxpenphcmUgaWwgbW9kdWxvIENNU01haWxlcic7CiRsYW5nWyd1cGxvYWRfbm90aWZpY2F0aW9uJ10gPSAnRSYjMDM5OyBzdGF0byBjYXJpY2F0byB1biBudW92byBmaWxlJzsKJGxhbmdbJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCddID0gJ0ludmlhIG5vdGlmaWNhIGRpIHVwbG9hZCBhOic7CiRsYW5nWydlbWFpbF90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGkgRS1tYWlsJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdDcmVhcmUgdW4gZmlsZSBpbmRleC5odG1sIGluIG9nbmkgY2FydGVsbGE/Q3JlYXRlIGR1bW15IGluZGV4Lmh0bWwgZmlsZXMgaW4gZWFjaCBkaXJlY3Rvcnk/PGJyLz48ZW0+T2duaSBmaWxlIGluZGV4Lmh0bWwgZXNpc3RlbnRlIHZlcnImYWdyYXZlOyBjb25zZXJ2YXRvPC9lbT4nOwokbGFuZ1snYWJvdXQnXSA9ICdJbmZvcm1hemlvbmkgc3UnOwokbGFuZ1snZXJyb3JfcGVybWlzc2lvbmRlbmllZCddID0gJ0FjY2Vzc28gTmVnYXRvLiBWZXJpZmljYXRlIGkgdm9zdHJpIHBlcm1lc3NpLic7CiRsYW5nWydlcnJvcl9jb3VsZG5vdHdyaXRlJ10gPSAnTm9uIHBvc3NvIHNjcml2ZXJlJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnQWdnaXVuZ2kgQ2F0ZWdvcmlhJzsKJGxhbmdbJ2FsbCddID0gJ1R1dHRvJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdTaWV0ZSBTaWN1cmk/JzsKJGxhbmdbJ2F1dGhvciddID0gJ0F1dG9yZSc7CiRsYW5nWydjYW5jZWwnXSA9ICdBbm51bGxhJzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcoSWwgcGVyY29yc28gbm9uIHB1Jm9ncmF2ZTsgZXNzZXJlIG1vZGlmaWNhdG8pJzsKJGxhbmdbJ2NhdGVnb3JpZXMnXSA9ICdDYXRlZ29yaWUnOwokbGFuZ1snY2F0ZWdvcnknXSA9ICdDYXRlZ29yaWEnOwokbGFuZ1snbWVzc2FnZV9jYXRlZ29yeWFkZGVkJ10gPSAnQ2F0ZWdvcmlhIGFnZ2l1bnRhIGNvbiBzdWNjZXNzbyc7CiRsYW5nWydkYXRlJ10gPSAnRGF0YSc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdEYXRhIENhcmljYW1lbnRvJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdWYWxvcmkgcHJlZGVmaW5pdGknOwokbGFuZ1snZGVsZXRlJ10gPSAnRWxpbWluYSc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ0Rlc2NyaXppb25lJzsKJGxhbmdbJ2Rlc3RuYW1lJ10gPSAnQ2FyaWNhIENvbWUnOwokbGFuZ1snZGV0YWlsX3RlbXBsYXRlJ10gPSAnTW9kZWxsbyBEZXR0YWdsaSc7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnSWwgZmlsZSAlcyAmZWdyYXZlOyBzdGF0byBzY2FyaWNhdG8uJzsKJGxhbmdbJ2Rvd25sb2FkcyddID0gJ0Rvd25sb2FkJzsKJGxhbmdbJ2VkaXQnXSA9ICdNb2RpZmljYSc7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdNb2RpZmljYSBDYXRlZ29yaWEnOwokbGFuZ1snZWRpdHVwbG9hZCddID0gJ01vZGlmaWNhIFVwbG9hZCc7CiRsYW5nWydlcnJvciddID0gJ0Vycm9yZSEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0UmIzAzOTsgZ2kmYWdyYXZlOyBwcmVzZW50ZSB1bmEgY2F0ZWdvcmlhIGNoZSB1c2EgaWwgcGVycmNvcnNvIHNwZWNpZmljYXRvICglcyknOwokbGFuZ1snZXJyb3JfcGF0aGludXNlJ10gPSAnRSYjMDM5OyBnaSZhZ3JhdmU7IHByZXNlbnRlIHVuYSBjYXRlZ29yaWEgY2hlIHV0aWxpenphIHF1ZXN0byBwZXJjb3Jzbyc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0czInXSA9ICdFcnJvcmU6IE5vbWUgQ2F0ZWdvcmlhICVzIGdpJmFncmF2ZTsgZXNpc3RlJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5ZXhpc3RzJ10gPSAnRXJyb3JlOiBsYSBDYXRlZ29yaWEgZXNpc3RlIGdpJmFncmF2ZTsnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0Vycm9yZSEgTm9uIHBvc3NvIGVsaW1pbmFyZSB1bmEgY2F0ZWdvcmlhIGNoZSBub24gc2lhIHZ1b3RhJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdFcnJvcmU6IENhdGVnb3JpYSBub24gdHJvdmF0YSEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0Vycm9yZTogRXJyb3JlIGRlbCBEYXRhYmFzZSEnOwokbGFuZ1snZXJyb3JfZW1wdHljYXRlZ29yeSddID0gJ0Vycm9yZTogQ2F0Z29yaWEgdnVvdGEhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0Vycm9yZTogUGVyY29yc28gdnVvdG8hJzsKJGxhbmdbJ2Vycm9yX2ZpbGVleGlzdHMnXSA9ICdFcnJvcmUhIElsIGZpbGUgJXMgJmVncmF2ZTsgZ2kmYWdyYXZlOyBwcmVzZW50ZS4nOwokbGFuZ1snZXJyb3JfZmlsZW5vdGZvdW5kJ10gPSAnRXJyb3JlISBOb24gJmVncmF2ZTsgcG9zc2liaWxlIHRyb3ZhcmUgaWwgZmlsZSAlcy4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnRXJyb3JlOiBQYXJhbWV0cmkgaW5zdWZmaWNpZW50aSBwYXNzYXRpIGFsIG1vZHVsbyEnOwokbGFuZ1snZXJyb3JfaW52YWxpZGF1dGhvciddID0gJ0Vycm9yZTogQXV0b3JlIG5vbiB2YWxpZG8gKG8gdnVvdG8pLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkY2F0ZWdvcnknXSA9ICdFcnJvcmU6IENhdGVnb3JpYSBub24gdmFsaWRhIChvIHZ1b3RhKS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGRlc2NyaXB0aW9uJ10gPSAnRXJyb3JlOiBEZXNjcml6aW9uZSBub24gdmFsaWRhIChvIHZ1b3RhKS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGZpbGUnXSA9ICdFcnJvcmU6IE5vbWUgRmlsZSBub24gdmFsaWRvIChvIHZ1b3RvKS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnRXJyb3JlOiBGaWxlIGNvbiBxdWVzdG8gbm9tZSAocHJvYmFiaWxtZW50ZSBsJiMwMzk7ZXN0ZW5zaW9uZSkgbm9uIHNvbm8gY29uc2VudGl0aSAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdFcnJvcmU6IGlkIGRpIGNhcmljYW1lbnRvIG5vbiB2YWxpZG8nOwokbGFuZ1snZXJyb3Jfbm9maWxlcyddID0gJ0Vycm9yZTogTmVzc3VuIEZpbGUgQ29ycmlzcG9uZGVudGUhJzsKJGxhbmdbJ2ZpbGVzJ10gPSAnRmlsZSc7CiRsYW5nWydmaXhtZSddID0gJ0NvcnJlZ2dpIFNwYXppJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0dlc3Rpb25lIGRpIEZyb250ZW5kIGRlaSBGaWxlIChNb2R1bG8gVXBsb2FkcyknOwokbGFuZ1snaWQnXSA9ICdJRCc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdWZXJzaW9uZSAlcyBkZWwgTW9kdWxvIGluc3RhbGxhdGEuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJbmRpcml6em8gSVAnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdVbiBtb2R1bG8gY2hlIHBlcm1ldHRlIGFnbGkgdXRlbnRpIGRpIGNhcmljYXJlIGZpbGUsIGUgcGVybWV0dGUgYSB2b2kgZGkgZ2VzdGlybGkuJzsKJGxhbmdbJ25hbWUnXSA9ICdOb21lJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdNb2RpZmljYSBpbCBub21lIHF1aSBwZXIgcmlub21pbmFybG8nOwokbGFuZ1sncGF0aCddID0gJ1BlcmNvcnNvJzsKJGxhbmdbJ3BhdGhtZXNzYWdlJ10gPSAnTW9kaWZpY2EgbGEgY2F0ZWdvcmlhIHF1aSBwZXIgc3Bvc3RhcmUgaWwgZmlsZSBpbiB1biYjMDM5O2FsdHJhIGNhcnRlbGxhJzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcoUmVsYXRpdm8gYWxsYSBjYXJ0ZWxsYSBkZWdsaSB1cGxvYWQpJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSE8L3A+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0lsIG1vZHVsbyBVcGxvYWRzICZlZ3JhdmU7IHN0YXRvIHJpbW9zc28gY29uIHN1Y2Nlc3NvLiAgTmVzc3VuIGZpbGUgJmVncmF2ZTsgc3RhdG8gcmltb3NzbyBkYWxsYSB2b3N0cmEgY2FydGVsbGEgZGkgdXBsb2FkIGUgbCYjMDM5O2ludGVncml0JmFncmF2ZTsgZGVpIGZpbGUgJmVncmF2ZTsgaW50YXR0YSc7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1ByZWZlcmVuemUnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnUHJlZmVyZW56ZSBkZWwgbW9kdWxvIGFnZ2lvcm5hdGUuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdEZXNjcml6aW9uZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0kgZmlsZSBpbiBxdWVzdGEgY2FydGVsbGEgcG9zc29ubyBlc3NlcmUgZWxlbmNhdGknOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ05vbWUgZGVsbGEgQ2F0ZWdvcmlhJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeXBhdGgnXSA9ICdQZXJjb3JzbyBkZWwgU2VydmVyJzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdFbGltaW5hcmUgY2FydGVsbGEgZGVsbGEgY2F0ZWdvcmlhPyc7CiRsYW5nWydwcm9tcHRfbWF4X3VwbG9hZHNpemUnXSA9ICdEaW1lbnNpb25lIG1hc3NpbWEgZGVsIGZpbGUgcGVybWVzc2EgKEtiKSc7CiRsYW5nWydwcm9tcHRfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0VzdGVuc2lvbmkgdmFsaWRlIHBlciBsJiMwMzk7dXBsb2FkJzsKJGxhbmdbJ3NjYW4nXSA9ICdFc2FtaW5hJzsKJGxhbmdbJ3NlbGVjdGNhdGVnb3J5J10gPSAnU2VsZXppb25hIENhdGVnb3JpYSc7CiRsYW5nWydzaXplJ10gPSAnRGltZW5zaW9uZSc7CiRsYW5nWydzaXpla2InXSA9ICdEaW1lbnNpb25lIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnSW52aWEnOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGVsIFNvbW1hcmlvJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdTb21tYXJpbyc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ01vZHVsbyBVcGxvYWRzJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ1Bhbm5lbGxvIGRpIEFtbWluaXN0cmF6aW9uZSBNb2R1bG8nOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnUHJlZmVyZW56ZSBkZWwgTW9kdWxvJzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnRXNjbHVkZXJlIGxlIHNvdHRvcmV0aSBkYWxsYSBzdGF0aXN0aWNoZSc7CiRsYW5nWyd0aXRsZV92YWxpZF91cGxvYWRleHRlbnNpb25zJ10gPSAnRXN0ZW5zaW9uaSBWYWxpZGUnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bG8gRGlzaW5zdGFsbGF0by4nOwokbGFuZ1sndXBncmFkZWQnXSA9ICdNb2R1bG8gYWdnaW9ybmF0byBhbGxhIHZlcnNpb25lICVzLic7CiRsYW5nWyd1cGxvYWQnXSA9ICdDYXJpY2EnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWxlICVzIGNhcmljYXRvIGRhICVzLic7CiRsYW5nWydyZXBsYWNlZCddID0gJ0ZpbGUgJXMgc29zdGl0dWl0byBkYSAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0lsIEZpbGUgJXMgJmVncmF2ZTsgc3RhdG8gY2FuY2VsbGF0by4nOwokbGFuZ1sndXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ01vZGVsbG8gZGkgVXBsb2FkJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnTm9tZSBVdGVudGUnOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ0FUVEVOWklPTkU6IFVzYXRlIGNhdXRlbGEgcXVhbmRvIGNhbmNlbGxhdGUgY2F0ZWdvcmllLiBFJiMwMzk7IHBvc3NpYmlsZSBwZXJkZXJlIGZpbGUnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/lt_LT.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdBdXRvcml6dW90aSB2YXJ0b3RvamFpIGdhbMSXcyBpJnNjYXJvbjt0cmludGkgJnNjYXJvbjtpdW9zIGZhaWx1cy4gIFRhaSByZWkmc2Nhcm9uO2tpYSwga2FkIHVybCBidXMgZ2FsaW1hIHBlcmR1b3RpIGF0aXRpbmthbWllbXMgdGVtcGxlaXRhbXMsIGthZCBmYWlsYXMgYsWrdMWzIGkmc2Nhcm9uO3RyaW50YXMuIFB1c2xhcGlvIGFkbWluaXN0cmF0b3JpdXMgZ2FsaSBwZXIgc21hcnR5IGdhbGkgcGF0ZWlrdGkgbnVvcm9kxIUgYXV0b3JpenVvdGllbXMgdmFydG90b2phbXMuJzsKJGxhbmdbJ2NvcHlfZmlsZXMnXSA9ICdLb3BpanVvdGkgRmFpbHVzJzsKJGxhbmdbJ2Vycm9yX2ZpbGV0b29sYXJnZSddID0gJ0ZhaWxhcywga3VyxK8gasWrcyBiYW5kb3RlIGkmc2Nhcm9uO3NpxbNzdGksIHZpciZzY2Fyb247eWphIENNU01TIG51c3RhdHl0xIUgc2l1bsSNaWFtxbMgZmFpbMWzIGR5ZMW+aW8gbGltaXTEhS4nOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVjYXRlZ29yeSddID0gJ0FyIHRpa3JhaSBub3JpdGUgaSZzY2Fyb247dHJpbnRpICZzY2Fyb247acSFIGthdGVnb3JpasSFPyc7CiRsYW5nWydlcnJvcl9kZWxldGUnXSA9ICdPYmpla3RvIG5lZ2FsaW1hIHBhJnNjYXJvbjthbGludGkgKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ0FyIHRpa3JhaSBub3JpdGUgYXRsaWt0aSAmc2Nhcm9uO8SvIHZlaWtzbcSFIHBhc2lyaW5rdG9tcyBrYXRlZ29yaWpvbXM/JzsKJGxhbmdbJ2Vycm9yX25vdGhpbmdfc2VsZWN0ZWQnXSA9ICdLbGFpZGE6IE5pZWtvIG5lcGFzaXJpbmt0YSc7CiRsYW5nWyd3aXRoX3NlbGVjdGVkJ10gPSAnU3UgcGFzaXJpbmt0YWlzOic7CiRsYW5nWydlcnJvcl9yZXBsYWNlX21pc21hdGNoZWRfZmlsZWV4dCddID0gJ1BlcnJhJnNjYXJvbjthbnQgZmFpbHVzLCBuYXVqbyBmYWlsbyBwbMSXdGlueXMgdHVyaSBixat0aSB0b2tzIHBhdCBrYWlwIGlyIGphdSBlZ3ppc3R1b2phbsSNaW8gZmFpbG8uJzsKJGxhbmdbJ3JlcGxhY2UnXSA9ICdQYWtlaXN0aSc7CiRsYW5nWydpbmZvX3JlcGxhY2VmaWxlJ10gPSAnSsWrcyBnYWxpdGUgZmFpbMSFIHXFvnJhJnNjYXJvbjt5dGkgYW50IHZpciZzY2Fyb247YXVzLCBqaWUgZmFpbGFzIHlyYSBwYXZlaWtzbMSXbGlzIGpvIGlrb27El2zElyBidXMgc3VrdXJ0YSBhdXRvbWF0aSZzY2Fyb247a2FpIGlyIHBhcGlsZG9tYWkgc2nFs3N0aSBqb3MgbmVyZWlraWEuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlZmlsZSddID0gJ1NpxbNzdGkgZmFpbMSFIHBha2VpdGltdWknOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnSSZzY2Fyb247dGFpc3l0aSB0YXJwdXMgZmFpbG8gcGF2YWRpbmltZSc7CiRsYW5nWydjYXRlZ29yeV9jb3BpZWQnXSA9ICdLYXRlZ29yaWphIHPEl2ttaW5nYWkgbnVrb3BpanVvdGEnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlcGF0aCddID0gJ1ByYSZzY2Fyb247b20gbnVyb2R5dGkga2F0YWxvZ8SFIGtpdMSFIG5laSAmc2Nhcm9uO2FsdGluaW8sIHRhaXAgcGF0IGthdGFsb2dhcyBuZXR1csSXdMWzIGLFq3RpIG5hdWRvamFtYXMuJzsKJGxhbmdbJ29wZXJhdGlvbl9jYW5jZWxsZWQnXSA9ICdPcGVyYWNpamEgQXQmc2Nhcm9uO2F1a3RhJzsKJGxhbmdbJ3NvdXJjZSddID0gJyZTY2Fyb247YWx0aW5pcyc7CiRsYW5nWydkZXN0aW5hdGlvbiddID0gJ1Rpa3NsYXMnOwokbGFuZ1sncHJvbXB0X2NvcHlfZmlsZXMnXSA9ICdLb3BpanVvdGkga2F0ZWdvcmlqb3MgYnlsYXMnOwokbGFuZ1snaW5mb19jb3B5X2ZpbGVzJ10gPSAnS29waWp1b3RpIHBpcm1vcyBrYXRlZ29yaWpvcyBmYWlsdXMgxK8ga2l0xIUga2F0ZWdvcmlqxIUuJzsKJGxhbmdbJ2V4dHJhJ10gPSAnUGFwaWxkb21hJzsKJGxhbmdbJ2NvcHknXSA9ICdLb3BpanVvdGknOwokbGFuZ1snc2VsZWN0b25lJ10gPSAnUGFzaXJpbmtpdGUgVmllbsSFJzsKJGxhbmdbJ2F1dG93YXRlcm1hcmsnXSA9ICdBbnQgcGF2ZWlrc2xpdWtvIGF1dG9tYXRpJnNjYXJvbjtrYWkgZMSXdGkgdmFuZGVucyDFvmVua2zEhSc7CiRsYW5nWydpbWFnZV9zZXR0aW5ncyddID0gJ1BhdmVpa3NsxJdsaW8gTnVzdGF0eW1haSc7CiRsYW5nWydwcm9tcHRfZ2V0ZmlsZV9yZXN1bHRwYWdlJ10gPSAnUHVzbGFwaXMgbmF1ZG9qYW1hcyBrbGFpZG9tcyBpciBraXRvbXMgxb5pbXV0xJdtcywgc3VzaWp1c2lvbXMgc3UgZmFpbMWzIGF0c2lzaXV0aW11LCBwYXRlaWt0aSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2tleSddID0gJ0F0c3Npc2l1bnRpbW8gcmFrdGFzIG5lYmVnYWxpb2phIChwYXNpZWt0YXMgYXRzaXNpbnRpbcWzIGxpbWl0YXMpJzsKJGxhbmdbJ2RmbHRfdGltZWxpbWl0ZWRfc3ViamVjdCddID0gJ3skc2l0ZW5hbWV9IC0gSnVtcyBzdXRlaWt0YSBsYWlraW5hIHRlaXPElyBhdHNpc2nFs3N0aSBmYWlsxIUgeyRlbnRyeS0+dXBsb2FkX25hbWV8c3RyaXBfdGFnc30nOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICdFbC4gbGFpJnNjYXJvbjtrbyB0ZW1hLCBrdXJpcyBzdWt1cmlhbWFzIGthaSBzaXVuxI1pYW1hIGxhaWtvIHJpYm9qYW1hIG51b3JvZGEuJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJ10gPSAnQXV0b21hdGkmc2Nhcm9uO2thaSBpJnNjYXJvbjt0cmludGkgxK9yYSZzY2Fyb247dXMgcHJhxJdqdXMgTiB2YWxhbmTFsyA8ZW0+KG51cm9kxb5pdXMgIDAgxK9yYSZzY2Fyb247YWkgbmVidXMgdHJpbmFtaSk8L2VtPjonOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3NlbmRpdCddID0gJ0kmc2Nhcm9uO3NpxatzdGkgJnNjYXJvbjtpxIUgbnVvcm9kxIUgYXRpdGlua2FtdSBlbC4gcGEmc2Nhcm9uO3R1Pyc7CiRsYW5nWyd1cmxfa2V5J10gPSAnVVJMIHJha3Rhcyc7CiRsYW5nWydjcmVhdGVkJ10gPSAnU3VrdXJ0YSc7CiRsYW5nWydleHBpcmVzJ10gPSAnQmFpZ2lhc2knOwokbGFuZ1snYWRkZWRpdF90aW1lbGltaXRlZF9rZXknXSA9ICdQcmlkxJd0aS9SZWRhZ3VvdGkgbGFpa2UgYXByaWJvdMSFIHJha3TEhSc7CiRsYW5nWyd0aW1lX2xpbWl0ZWRfa2V5X2FkZGVkJ10gPSAnTGFpa2UgYXByaWJvdGFzIHJha3RhcyBwcmlkxJd0YXMnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnVmFsYW5kxbMgc2thacSNaXVzJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdBdGlzaXVudGltxbMgc2thacSNaXVzJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFbC4gcGEmc2Nhcm9uO3RvIGFkcmVzYWknOwokbGFuZ1snZXJyb3JfbWlzc2luZ19pbnZhbGlkJ10gPSAnVHUmc2Nhcm9uO3RpIGFyYmEgbmV0aW5rYW1haSB1xb5waWxkeXRpIHByaXZhbG9taSBsYXVrYWk6ICVzJzsKJGxhbmdbJ2FkZF90aW1lbGltaXRlZF9rZXknXSA9ICdQcmlkxJd0aSBsYWlrZSBhcHJpYm90xIUgcmFrdMSFJzsKJGxhbmdbJ2ZpbGVfaW5mbzInXSA9ICdGYWlsYXMgJXMgKGlkPSVkKSc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ051cm9keXRpIHNrYWnEjWnFsywga3VyaXMgbnVzdGF0eXMgxK9wcmFzdMSFIGF0c2lzaXVudGltxbMgbGltaXTEhSBzdSBhdGl0aW5rYW11IHJha3R1JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICfErnByYXN0YXMgYXRzaXNpdW50aW3FsyBsaW1pdGFzJzsKJGxhbmdbJ2luZm9fdGltZWxpbWl0ZWRfaG91cnMnXSA9ICdOdXJvZHl0aSDEr3ByYXN0xIUgYXRzaXNpdW50aW1vIHJha3RvIGdhbGlvamltxIUgbGFpa8SFIHZhbGFuZG9taXMuICDErnZlZHVzIDAgYXByaWJvamltxbMgbmVidXMnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnQXRzaXNpdW50aW1vIHJha3RvIGdhbGlvamltbyBsYWlrYXMgdmFsYW5kb21pcyc7CiRsYW5nWyd0aW1lbGltaXRlZF91cmxfc2V0dGluZ3MnXSA9ICdMYWlrZSBhcHJpYm90byByYWt0byBudXN0YXR5bWFpJzsKJGxhbmdbJ21hbmFnZV90aW1lbGltaXRlZCddID0gJ1JlZGFndW90aSBsYWlrZSBhcHJpYm90xIUgcHJpZWVpZ8SFJzsKJGxhbmdbJ3VwbG9hZGluZ19zZXR0aW5ncyddID0gJ0ZhaWxvIEkmc2Nhcm9uO3NpdW50aW1vIE51c3RhdHltYWknOwokbGFuZ1snZ2VuZXJhbF9zZXR0aW5ncyddID0gJ0JlbmRyaSBOdXN0YXR5bWFpJzsKJGxhbmdbJ3RodW1ibmFpbF9zZXR0aW5ncyddID0gJ0lrb27El2xpxbMgR2VuZXJhdmltYXMnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdQdXNsYXBpcywgxK8ga3VyxK8gYnVzIG51a3JlaXB0YSBpJnNjYXJvbjtzaXVudHVzIGZhaWzEhSc7CiRsYW5nWydsYmxfYmFjayddID0gJ0F0Z2FsJzsKJGxhbmdbJ2xibF90ZW1wbGF0ZXMnXSA9ICdSZWRhZ3VvdGkgJlNjYXJvbjthYmxvbnVzJzsKJGxhbmdbJ3Byb21wdF9wdWJsaWNfZmllbGQnXSA9ICdWaWUmc2Nhcm9uO2FzIGxhdWthcyA8ZW0+KG1hdG9tYXMgdmlzaWVtcyBsYW5reXRvamFtcyk8L2VtPic7CiRsYW5nWyd1cGxvYWRfZWRpdGVkJ10gPSAnRmFpbG8gxK9wYXR5YsSXcyByZWRhZ3VvdG9zICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnS2l0YXMgbWluaWF0acWrcm9zIGZhaWxhcyc7CiRsYW5nWyd1cGxvYWRfZmlsZSddID0gJ1NpxbNzdGkgbmF1asSFIGZhaWzEhSc7CiRsYW5nWydtc2dfZmllbGRfZGVsZXRlZCddID0gJ0xhdWtlbGlzIGkmc2Nhcm9uO3RyaW50YXMnOwokbGFuZ1snYXNrX2RlbGV0ZV9maWVsZCddID0gJ0FyIHRpa3JhaSBub3JpdGUgaSZzY2Fyb247dHJpbnRpICZzY2Fyb247xK8gbGF1a2VsxK8gaXIgc3UganVvIHN1c2lqdXNpanVzaWFzIHJlaWsmc2Nhcm9uO21lcz8nOwokbGFuZ1sneWVzJ10gPSAnVGFpcCc7CiRsYW5nWydubyddID0gJ05lJzsKJGxhbmdbJ3R5cGUnXSA9ICdUaXBhcyc7CiRsYW5nWydmaWVsZHR5cGVfbXVsdGlzZWxlY3QnXSA9ICdQYXNpcmlua2ltbyBzxIVyYSZzY2Fyb247YXMnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnSSZzY2Fyb247a3JlbnRhbnRpcyBzxIVyYSZzY2Fyb247YXMnOwokbGFuZ1snZmllbGR0eXBlX2NoZWNrYm94J10gPSAnUGFzaXJpbmtpbW8gbGFuZ2VsaXMnOwokbGFuZ1snZmllbGR0eXBlX3RleHRhcmVhJ10gPSAnVGVrc3RvIHNyaXRpcyc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGlucHV0J10gPSAnVGVrc3RvIMSvdmVzdGlzJzsKJGxhbmdbJ3Byb21wdF91c2Vfd3lzaXd5ZyddID0gJ05hdWRvdGkgICZxdW90O3d5c2l3eWcmcXVvdDsgcmVkYWt0b3JpxbMga2VpxI1pYW50ICZzY2Fyb247aW8gbGF1a28gcmVpayZzY2Fyb247bWVzJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0X2NvbnRlbnQnXSA9ICdOdW1hdHl0YXMgdHVyaW55cyB0ZWtzdG8gc3JpdHlqZSc7CiRsYW5nWydwcm9tcHRfZHJvcGRvd25fb3B0aW9ucyddID0gJ1ZhcmlhbnRhaSAocG8gdmllbsSFIGVpbHV0xJdqZSknOwokbGFuZ1sncHJvbXB0X2ZpZWxkX21heGxlbmd0aCddID0gJ0xhdWtlbGlvIE1ha3NpbWFsdXMgSWxnaXMnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0xhdWtlbGlvIElsZ2lzJzsKJGxhbmdbJ3Byb21wdF9maWVsZF90eXBlJ10gPSAnTGF1a2VsaW8gVGlwYXMnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX25hbWUnXSA9ICdMYXVrZWxpbyBQYXZhZGluaW1hcyc7CiRsYW5nWyd0aXRsZV9hZGRfZmllbGQnXSA9ICdQcmlkxJd0aSBhciBSZWRhZ3VvdGkgTGF1a2VsaW8gQXBpYnLEl8W+aW3EhSc7CiRsYW5nWydmaWVsZF9kZWZpbml0aW9ucyddID0gJ0xhdWtlbGlvIEFwaWJyxJfFvmltYXMnOwokbGFuZ1sncHJvbXB0X2FkZF9maWVsZCddID0gJ1ByaWTEl3RpIExhdWtlbGlvIEFwaWJyxJfFvmltxIUnOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnTnVzdGF0byBtb2R1bGlvIGRhcmJvIHLEl8W+aW3EhS4gIEdhbGltb3MgcmVpayZzY2Fyb247bcSXczogZGVmYXVsdCAtICjEr3ByYXN0YXMgdmVpa2ltYXMpLCBkZXRhaWwgLSBwYXJvZHl0aSB2aWVubyBmYWlsbyDEr3BhdHliZXMgcGFnYWwgcGF0ZWlrdMSFIHBhcmFtZXRyxIUgdXBsb2FkX2lkLCB5b3VzZW5kaXQgLSBwYXRlaWt0aSBmb3JtxIUgc3Uga3VyaWEgcGF0ZWlrdGFzIGZhaWxhcyBidXMgdmllbnUga2FydHUgaSZzY2Fyb247c2nFs3N0YXMga2VsaWVtcyBhZHJlc2F0YW1zJzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ051cm9keXRpIHB1c2xhcG8gJnF1b3Q7aWQmcXVvdDsgYXIgJnF1b3Q7YWxpYXMmcXVvdDsga3VyaWFtZSBidXMgcGF0ZWlrdGEgJnF1b3Q7c2VuZCBhIGZpbGUmcXVvdDsgZm9ybWEnOwokbGFuZ1snZmlsZV91cGxvYWRlZCddID0gJ0ZhaWxhcyBzxJdrbWluZ2FpIGkmc2Nhcm9uO3NpxbNzdGFzJzsKJGxhbmdbJ3RvJ10gPSAnS2FtJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdQcmlkxJd0aSBhciBSZWRhZ3VvdGkgJmFtcDtxdW90O1lvdSBTZW5kIEl0JmFtcDtxdW90OyBGb3Jtb3MgJlNjYXJvbjthYmxvbsSFJzsKJGxhbmdbJ3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdZb3VTZW5kSXQgRm9ybW9zICZTY2Fyb247YWJsb25hcyc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdGb3Jtb3MgJmFtcDtxdW90O3lvdSBzZW5kIGl0JmFtcDtxdW90OyBudW1hdHl0YXNpcyAmc2Nhcm9uO2FibG9uYXMnOwokbGFuZ1snbXNnX2ZpbGVfc2VudCddID0gJ1ByYW5lJnNjYXJvbjtpbWFzIGFwaWUgZmFpbMSFLCBpciBrYWlwIGrEryBwYXNpZWt0aSwgaSZzY2Fyb247c2nFs3N0YXMgcGFzaXJpbmt0aWVtcyBhZHJlc2F0YW1zLic7CiRsYW5nWydlcnJvcl9ub2FkZHJlc3NlcyddID0gJ1JlaWtpYSBwYXRlaWt0aSBiZW50IHZpZW7EhSBhZHJlc8SFJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ1JlaWtpYSBwYXRlaWt0aSB0ZW3EhSAnOwokbGFuZ1snc3ViamVjdCddID0gJ1RlbWEnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUHVzbGFwaXMgJmFtcDtxdW90O1NlbmQgYSBGaWxlJmFtcDtxdW90OyBmb3JtYWknOwokbGFuZ1snZmlsZV9pbmZvJ10gPSAnRmFpbG8gxK9wYXR5YsSXcyc7CiRsYW5nWydzZW5kJ10gPSAnRmFpbG8gxK9wYXR5YsSXcyc7CiRsYW5nWydub3RlcyddID0gJ1ByaWVyYSZzY2Fyb247YWknOwokbGFuZ1snYWRkcmVzc2VlcyddID0gJ1NpxbNzdGkgcHJhbmUmc2Nhcm9uO2ltxIUgaXIgYXBpZSAmc2Nhcm9uO8SvIGZhaWzEhSc7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGVfZW1haWxfdGVtcGxhdGUnXSA9ICcmYW1wO3F1b3Q7U2VuZCBhIEZpbGUmYW1wO3F1b3Q7IEVsLiBsYWkmc2Nhcm9uO2tvICZzY2Fyb247YWJsb25hcyc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fdGVtcGxhdGUnXSA9ICdQcmlkxJd0aSBhciBSZWRhZ3VvdGkgICZhbXA7cXVvdDtTZW5kIGEgRmlsZSZhbXA7cXVvdDsgRm9ybW9zICZzY2Fyb247YWJsb27EhSc7CiRsYW5nWydzZW5kZmlsZWZvcm1fdGVtcGxhdGUnXSA9ICcmYW1wO3F1b3Q7U2VuZCBhIEZpbGUmYW1wO3F1b3Q7IEZvcm1vcyAmU2Nhcm9uO2FibG9uYXMnOwokbGFuZ1sncHJvbXB0X25vdGlmeV9lbWFpbF90ZW1wbGF0ZSddID0gJ0VsLiBsYWkmc2Nhcm9uO2tvIGFwaWUgYXRzacWzc3R1cyBmYWlsdXMgJnNjYXJvbjthYmxvbmFzJzsKJGxhbmdbJ3RpdGxlX3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0J10gPSAnRm9ybW9zICZhbXA7cXVvdDtTZW5kIGEgRmlsZSZhbXA7cXVvdDsgbnVtYXR5dGFzaXMgJnNjYXJvbjthYmxvbmFzJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlbGV0YWJsZSddID0gJyZTY2Fyb247aW9zIGthdGVnb3Jpam9zIGZhaWxhaSBnYWxpIGJ1dGkgdHJpbmFtaSc7CiRsYW5nWyd0aXRsZV9hbGxvd19kZWxldGUnXSA9ICdMZWlzdGkgdHJpbnRpIHB1c2xhcGlvIGxhbmt5dG9qYW1zIHRyaW50aSBmYWlsdXMnOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdOdW1hdHl0aWVqaSAmc2Nhcm9uO2FibG9uYWknOwokbGFuZ1snZmlyc3RwYWdlJ10gPSAnUGlybWFzJzsKJGxhbmdbJ3ByZXZwYWdlJ10gPSAnQW5rc3Rlc25pcyc7CiRsYW5nWyduZXh0cGFnZSddID0gJ0tpdGFzJzsKJGxhbmdbJ2xhc3RwYWdlJ10gPSAnUGFza3V0aW5pcyc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICc8PCc7CiRsYW5nWydwcmV2cGFnZV9hcnJvdyddID0gJzwnOwokbGFuZ1snbmV4dHBhZ2VfYXJyb3cnXSA9ICc+JzsKJGxhbmdbJ2xhc3RwYWdlX2Fycm93J10gPSAnPj4nOwokbGFuZ1sncGFnZSddID0gJ1B1c2xhcGlzJzsKJGxhbmdbJ29mJ10gPSAnaSZzY2Fyb247JzsKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdBdXRvcml6dW90xbMgbGFua3l0b2rFsyBncnVwxJdzIChGRVUgR3JvdXBzKSc7CiRsYW5nWydpbmZvX2dyb3VwbGlzdCddID0gJ1Bhc2lyaW5rdGkgbGFua3l0b2rFsyBncnVwZXMgKEZFVSBncm91cHMpLCBrdXJpb21zIGJ1cyBzdXRlaWt0YSBwcmllZWlnYSBwcmllICZzY2Fyb247aW9zIGthdGVnb3Jpam9zIGZhaWzFsy4gIE5lcGHFvnltxJdqdXMgbmVpIHZpZW5vcyBncnVwxJdzIHByaWVlaWdhIG5lYnVzIHJpYm9qYW1hJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdTa2FudW90aSAmc2Nhcm9uO2nEhSBrYXRlZ29yaWrEhSBkxJdsIG5hdWrFsyBieWzFsyc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscyddID0gJ1N1a3VydGkgdHLFq2tzdGFtYXMgaWtvbmFzICZzY2Fyb247aW9qZSBrYXRlZ29yaWpvamUuJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnU3VrdXJ0aSBJa29uYXMnOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbCddID0gJyZTY2Fyb247aWFtIGZhaWx1aSBzdWt1cnRpIGlrb27EhSBpJnNjYXJvbjsgbmF1am8nOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbCddID0gJ1N1a3VydGkgSWtvbsSFJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ05lcGF2eWtvIGF0dmVydGkga2F0YWxvZ28gKGFyIHRpa3JhaSBwYWthbmthIHRlaXNpxbM/JzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0tpZWt2aWVubyBzaXVuxI1pYW1vIGZhaWxvIGRhbGllcyBkeWRpcyc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ0tlacSNaWFudCAmc2Nhcm9uO8SvIHBhcmFtZXRyxIUgZ2FsaW1hIGtlaXN0aSBzaXVudGltbyBncmVpdMSvLCBnYWxpIGLFq3RpIG5hdWRpbmdhIGthaSB0csWra3N0YSBhdG1pbnRpZXMuJzsKJGxhbmdbJ3dhcm5pbmdfc2FmZV9tb2RlJ10gPSAnUEhQIHNhZmUgbW9kZSB5cmEgxK9qdW5ndGFzLiAgR2FsaSBraWx0aSBuZXNrbGFuZHVtxbMgc2l1bsSNaWFudCBmYWlsdXMsIHRhaXAgcGF0IGthaSBrdXJpxbMgZmFpbMWzIGdhbGkgbmVwYXZ5a3RpIGkmc2Nhcm9uO3NpxbNzdGksIG5lcyBuZWJ1cyBnYWxpbWEgcGFrZWlzdGkgbnVtYXR5dMWzasWzIHBocCBwYXJhbWV0csWzICAgUmVrb21lbmR1b2phbWEgc3VzaXNpZWt0aSBzdSBzZXJ2ZXJpbyBhZG1pbmlzdHJhdG9yaXVtaSwga2FkICZxdW90O3NhZmUgbW9kZSZxdW90OyByxJfFvmltYXMgYsWrdMWzIGkmc2Nhcm9uO2p1bmd0YXMuJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdOYXVkaW5nYSBub3JpbnQgaSZzY2Fyb247c2FtxbMgZmFpbG8gYXByYSZzY2Fyb247xIUgcGF0ZWlrdGkgcHVzbGFweWplIHN1IGtpdHUgdGVtcGxlaXR1OyBSZWlrJnNjYXJvbjttxJdzIGdhbGkgYsWrdGkgZWd6aXN0dW9qbsSNaW8gcHVzbGFwaW8gJnF1b3Q7aWQmcXVvdDsgYXJiYSBwdXNsYXBpbyAmcXVvdDthbGlhcyZxdW90Oy4nOwokbGFuZ1sncGFyYW1fcHJlZml4J10gPSAnQSBib29sZWFuIHRoYXQgaW5kaWNhdGVzIHdldGhlciBmaWxlIG5hbWVzIHNob3VsZCBiZSBwcmVmaXhlZCc7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnQSBib29sZWFuIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBwcmVmaXggc2hvdWxkIGJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgYXV0aG9yLCBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgcHJlZml4IGlzIHRoZSBjdXJyZW50IHRpbWUgKGluIGRlY2hleCBmb3JtYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ0kmc2Nhcm9uO3NpdW50aW1vIGZvcm1vamUgbmVuYXVkb2phbXMgJnF1b3Q7Y2FwdGNoYSZxdW90OyAobmVuYXVkb2phbWFzIHBhZ2FsIG51dHlsxJdqaW3EhSkuJzsKJGxhbmdbJ3RpdGxlX3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdSZWRhZ3VvdGkgRmFpbG8gSSZzY2Fyb247c2l1bnRpbW8gKFVwbG9hZCBGb3JtKSAmc2Nhcm9uO2FibG9uxIUnOwokbGFuZ1snY2FwdGNoYV90aXRsZSddID0gJ8SudmVza2l0ZSB0ZWtzdMSFIGkmc2Nhcm9uOyBwYXZlaWtzbMSXbGlvJzsKJGxhbmdbJ2Vycm9yX2NhcHRjaGFtaXNtYXRjaCddID0gJ1Rla3N0YXMgaSZzY2Fyb247IHBhdmVpa3NsxJdsaW8gxK92ZXN0YXMgbmV0ZWlzaW5nYWknOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9leHRlbnNpb25zJ10gPSAnRmFpbGFtcyBzdSAmc2Nhcm9uO2lhaXMgcGzEl3RpbmlhaXMgc3VrdXJ0aSBpa29uxJdsZXMnOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9zaXplJ10gPSAnTWFrc2ltYWx1cyBzdWt1cnRvcyBpa29uxJdsxJdzIGR5ZGlzIChwaWtzZWxpYWlzKS4nOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnQXRzacWzc3RpIGlrb27El2zEmSc7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdQYXRlaWt0YXMgdGVrc3RhcyBidXMgbmF1ZG9qYW1hcyAga3VyaWFudCAmc2Nhcm9uO2lvIHRpcG8gdGVtcGxlaXR1cyc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfc3lzZGVmYXVsdCddID0gJ051bWF0eXRhc2lzIEkmc2Nhcm9uO3NhbWF1cyBGYWlsbyBBcHJhJnNjYXJvbjtvICZTY2Fyb247YWJsb25hcyc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdOdW1hdHl0YXNpcyBGYWlsxbMgU2FudHJhdWtvcyAmU2Nhcm9uO2FibG9uYXMnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV9zeXNkZWZhdWx0J10gPSAnTnVtYXR5dGFzaXMgRmFpbG8gSSZzY2Fyb247c2l1bnRpbW8gJlNjYXJvbjthYmxvbmFzJzsKJGxhbmdbJ3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmxvbmFzJzsKJGxhbmdbJ3Jlc2V0dG9kZWZhdWx0J10gPSAnQXRzdGF0eXRpIMSvIMSucHJhc3R1cyc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3RlbXBsYXRlJ10gPSAnRmFpbMWzIFNhbnRyYXVrb3MgJlNjYXJvbjthYmxvbmFzJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZSddID0gJ0kmc2Nhcm9uO3NhbWF1cyBGYWlsbyBBcHJhJnNjYXJvbjtvICZTY2Fyb247YWJsb25hcyc7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ1BhdmFkaW5pbWFzJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnxK5wcmFzdGFzJzsKJGxhbmdbJ2xlZ2VuZF91cGxvYWRmb3JtJ10gPSAnQXRzacWzc3RpIGJ5bMSFJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ1Ryxatrc3RhIHByaXZhbG9tbyBwYXJhbWV0cm8nOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdUcsWra3N0YSBQYXZhZGluaW1vJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdleHRlbnNpb25zJ10gPSAnQXQgbGVhc3Qgb25lIGZpbGUgZXh0ZW5zaW9uIG11c3QgYmUgc3BlY2lmaWVkJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdpY29uJ10gPSAnQW4gaWNvbiBtdXN0IGJlIHNwZWNpZmllZCc7CiRsYW5nWydlcnJvcl9ub3N1Y2hyb3cnXSA9ICdUaGUgc3BlY2lmaWVkIHJvdyBjb3VsZCBub3QgYmUgZm91bmQnOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnTmXFvmlub21hcyc7CiRsYW5nWydkZXNjcmlwdGlvbl91bmtub3duJ10gPSAnRmlsZSB0eXBlIGRlc2NyaXB0aW9uIGZvciB1bm1hdGNoZWQgZmlsZXMnOwokbGFuZ1snaW1hZ2UnXSA9ICdQYXZlaWtzbMSXbGlzJzsKJGxhbmdbJ2ljb24nXSA9ICdJa29uYSc7CiRsYW5nWydleHRlbnNpb25zJ10gPSAnRmlsZSBFeHRlbnNpb25zJzsKJGxhbmdbJ2FkZGZpbGV0eXBlJ10gPSAnQWRkIE5ldyBGaWxlIFR5cGUnOwokbGFuZ1snZmlsZV90eXBlcyddID0gJ0ZpbGUgVHlwZXMnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeWlkJ10gPSAnTm8gQ2F0ZWdvcnkgaWQgd2FzIHN1cHBsaWVkJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnknXSA9ICdObyBDYXRlZ29yeSBpZCB3YXMgc3VwcGxpZWQnOwokbGFuZ1snZXJyb3JfdGVtcGxhdGVuYW1lZXhpc3RzJ10gPSAnQSB0ZW1wbGF0ZSBieSB0aGF0IG5hbWUgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlbmFtZSddID0gJ1RlbXBsYXRlIE5hbWUnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUnOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnQ3JlYXRlIGEgbmV3IHRlbXBsYXRlJzsKJGxhbmdbJ2hlbHBfT25Eb3dubG9hZCddID0gJzxwPlBvIGZhaWxvIHRhbHBpbmltbyA8L3A+DQo8aDQ+UGFyYW1ldHJhaTwvaDQ+DQo8dWw+DQo8bGk+PGVtPmlkPC9lbT4gLSBGYWlsbyAmcXVvdDtpZCZxdW90OzwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIEZhaWxvIHBhdmFkaW5pbWFzPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtICBMYW5reXRvam8sIGF0aXNpdW50dXNpbyBmYWlsxIUgSVA8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uRGVsZXRlQ2F0ZWdvcnknXSA9ICc8cD5QbyBLYXRlZ29yaWpvcyB0cmluaW1vPC9wPg0KPGg0PlBhcmFtZXRyYWk8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBLYXRlZ29yaW9zIHBhdmFkaW5pbWFzPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gS2F0ZWdvcmlqYWkgcHJpa2xhdXNhbsSNaW8ga2F0YWxvZ28ga2VsaWFzPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgQ3JlYXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBjYXRlZ29yeSBkZXNjcmlwdGlvbjwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFRoZSBjYXRlZ29yeSBwYXRoPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQSBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGNhdGVnb3J5IGlzIGxpc3RhYmxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQgdmlhIHRoZSBhZG1pbiBvciBmcm9udGVuZCBpbnRlcmZhY2VzPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gVGhlIGNhdGVnb3J5IG5hbWU8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgdXBsb2FkZWQgZmlsZTwvbGk+DQo8bGk+PGVtPnNpemU8L2VtPiAtIFRoZSBzaXplIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4NCjxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gVGhlIHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBUaGUgYXV0aG9yIG9mIHRoZSB1cGxvYWRlZCBmaWxlIChpZiBhdmFpbGFibGUpPC9lbT48L2xpPg0KPGxpPjxlbT5pcF9hZGRyZXNzPC9lbT4gLSBUaGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRoYXQgdXBsb2FkZWQgdGhlIGZpbGU8L2xpPg0KPC91bD4NCic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIGRlbGV0ZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5J10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBjcmVhdGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyBkb3dubG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHVwbG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVtb3ZlZCc7CiRsYW5nWyd0aXRsZV91c2VydGFnX29udXBsb2FkJ10gPSAnVXNlciBkZWZpbmVkIHRhZyB0byBjYWxsIGFmdGVyIHVwbG9hZCBpcyBjb21wbGV0ZSc7CiRsYW5nWydub25lJ10gPSAnTm9uZSc7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICdNYXRjaGVzIGZvdW5kJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnUmVkaXJlY3QgdG8gcGFnZSBpZC9hbGlhcyBvbiB1c2VyIHVwbG9hZCc7CiRsYW5nWydkZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGFkanVzdCB0aGUgcHJlZmVyZW5jZXM/JzsKJGxhbmdbJ2Vycm9yX25vZmlsZXN1cGxvYWRlZCddID0gJ05vIGZpbGVzIHdlcmUgdXBsb2FkZWQuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnQWxsb3cgT3ZlcndyaXRlJzsKJGxhbmdbJ2luZm9fcmVwbGFjZSddID0gJ1JlcGxhY2UgYW55IGZpbGUgd2l0aCB0aGUgc2FtZSBuYW1lIChkb2VzIG5vdCBjaGFuZ2UgaWQpJzsKJGxhbmdbJ3BhcmFtX25vX2luaXRpYWwnXSA9ICdEbyBub3QgZGlzcGxheSBhbnkgaW5pdGlhbCByZXN1bHRzIHdoZW4gdGhlIGZpbHRlciBpcyBvbic7CiRsYW5nWydwYXJhbV9rZXknXSA9ICdQcm92aWRlIGFuIGFkZGl0aW9uYWwga2V5IHRvIHRoZSBtb2R1bGUgZm9yIGZ1cnRoZXIgb3JnYW5pemluZyB1cGxvYWRzLiAgVGhpcyBrZXkgY291bGQgYmUgYW4gZW5jb2RlZCBzdHJpbmcgbGlrZTogJiMwMzk7ZmV1c2Vyczp1aWQmIzAzOTssIGV0Yy4gIFRoaXMgcGFyYW1ldGVyIGlzIHVzdWFsbHkgb25seSBuZWVkZWQgd2hlbiBlbWJlZGRpbmcgdGhlIHVwbG9hZHMgbW9kdWxlIGludG8gYW5vdGhlciBtb2R1bGUnOwokbGFuZ1sncGFyYW1fbm9hdXRob3InXSA9ICdIaWRlIHRoZSBhdXRob3IgZmllbGQgZnJvbSB0aGUgdXBsb2FkIGZvcm0uICBUaGlzIHBhcmFtZXRlciBpcyBvbmx5IHZhbGlkIHdoZW4gbW9kZT0mIzAzOTt1cGxvYWQmIzAzOTsuICBJZiBUaGUgRnJvbnRlbmRVc2VycyBtb2R1bGUgaXMgcHJlc2VudCwgYW5kIGEgdXNlciBpcyBjdXJyZW50bHkgbG9nZ2VkIGluLCBhIGhpZGRlbiBmaWVsZCB3aWxsIGhvbGQgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcm5hbWUnOwokbGFuZ1sncGFyYW1fdXBsb2FkX2lkJ10gPSAndXBsb2FkX2lkPSZxdW90O2lkJnF1b3Q7IC0gc3BlY2lmeSBhIHNpbmdsZSBmaWxlIGZvciB0aGUgdXJsL2xpbmsgb3Igc2luZ2xlIG1vZGVzIChhYm92ZSknOwokbGFuZ1sncGFyYW1fZGV0YWlsdGVtcGxhdGUnXSA9ICdVc2UgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBmb3IgdGhlIGRldGFpbGVkIHJlcG9ydC4nOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdVc2UgYSB0ZW1wbGF0ZSB3aXRoIHRoaXMgbmFtZSBmb3IgdGhpcyByZXBvcnQgb3IgZm9ybS4gIFRoZSBtb2RlIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoYXQgdHlwZSBvZiB0ZW1wbGF0ZSBpcyByZXF1aXJlcmQsIGFuZCB0aGVuIGEgbmFtZSBtYXRjaCBpcyBwZXJmb3JtZWQgd2l0aGluIHRoYXQgdHlwZS4nOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnRGlzcGxheSB0aGUgZmlsdGVyaW5nIGZvcm0nOwokbGFuZ1sncGFyYW1fbm9faW50aXRpYWwnXSA9ICdPbmx5IHVzZWZ1bCB3aGVuIHRoZSBmaWx0ZXIgcGFyYW1ldGVyIGlzIHN1cHBsaWVkLCBvciBvbiBieSBkZWZhdWx0LCB0aGlzIHBhcmFtZXRlciBpbmRpY2F0ZXMgd2V0aGVyIGluaXRpYWwgcmVzdWx0cyBzaG91bGQgYmUgcmV0dXJuZWQnOwokbGFuZ1sncGFyYW1fZmlsZXR5cGVzJ10gPSAnRGlzcGxheSBvbmx5IGZpbGVzIHdob3NlIHR5cGUgbWF0Y2hlcyB0aGlzIGNvbW1hIHNlcGFyYXRlZCBsaXN0JzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJyAgPHA+U29ydCBPcmRlcnMNCiAgPHVsPg0KICA8bGk+PGVtPmRhdGVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkYXRlPC9saT4NCiAgPGxpPjxlbT5kYXRlX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkYXRlPC9saT4NCiAgPGxpPjxlbT5uYW1lX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgbmFtZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgbmFtZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIHNpemU8L2xpPg0KICA8bGk+PGVtPnNpemVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIHNpemU8L2xpPg0KICA8bGk+PGVtPmRlc2NfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+DQogIDxsaT48ZW0+ZGVzY19kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgZGVzY3JpcHRpb248L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGF1dGhvcjwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBhdXRob3I8L2xpPg0KICA8bGk+PGVtPmlwX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgaXAgYWRkcmVzczwvbGk+DQogIDxsaT48ZW0+aXBfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGlwIGFkZHJlc3M8L2xpPg0KICA8bGk+PGVtPnJhbmRvbTwvZW0+IC0gUmFuZG9tIHNvcnQgb3JkZXI8L2xpPg0KICA8L3VsPg0KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddID0gJ1RlbXBsYXRlIHRvIHVzZSBmb3IgY2F0ZWdvcnkgbGlzdGluZ3MgYWZ0ZXIgY2xpY2t0aHJvdWdoIGZyb20gQ2F0ZWdvcnkgU3VtbWFyeSBwYWdlJzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmdzb3J0b3JkZXInXSA9ICdTb3J0IG9yZGVyIChhbGEgcGFyYW1fc29ydG9yZGVyKSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzIGFmdGVyIGNsaWNrdGhyb3VnaCBmcm9tIENhdGVnb3J5IFN1bW1hcnkgcGFnZSc7CiRsYW5nWydwYXJhbV9maWxlZXh0ZW5zaW9ucyddID0gJyANCmZpbGVfZXh0ZW5zaW9ucz0mcXVvdDtleHQxLGV4dDIsZXh0MyZxdW90Ow0KPHA+dmFsaWQgb25seSB3aGVuIG1vZGU9dXBsb2FkLCB0aGlzIHBhcmFtZXRlciBsaW1pdHMgdGhlIHR5cGVzIG9mIGZpbGVzIHRoYXQgY2FuIGJlIHVwbG9hZGVkLiAgSXQgb3ZlcnJpZGVzIGFueSBzZXR0aW5ncyBpbiB0aGUgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0mcXVvdDtOJnF1b3Q7DQo8cD5BIHBhcmFtZXRlciB0byBsaXN0IG9ubHkgdGhlIGZpcnN0IE4gcmVzdWx0cyBvZiB0aGUgcXVlcnkuICBQYWdpbmF0aW9uIHdvdWxkIGJlIGJldHRlciwgYnV0IHRoaXMgd2lsbCBkbyB0aGUgdHJpY2sgZm9yIG5vdzwvcD4nOwokbGFuZ1sncGFyYW1fY2F0ZWdvcnknXSA9ICdjYXRlZ29yeT0mcXVvdDtuYW1lJnF1b3Q7DQo8cD48Yj5Ob3RlOjwvYj4gQ2F0ZWdvcnkgY2FuIGJlICZxdW90O2FsbCZxdW90Oywgd2hpY2ggd2lsbCBsaXN0IGFsbCBvZiB0aGUgdXBsb2FkcyBmcm9tIGFsbCA8ZW0+bGlzdGFibGU8L2VtPiBjYXRlZ29yaWVzPC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIERpc3BsYXkgYSBkZXRhaWxlZCBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgY2F0ZWdvcnk8L2xpPg0KICA8bGk+PGVtPnVwbG9hZDwvZW0+IC0gRGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgYSBmcm9udGVuZCB1c2VyIHRvIHVwbG9hZCBhIGZpbGU8L2xpPg0KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gRGlzcGxheSBhIGxpbmsgdG8gYSBmaWxlPC9saT4NCiAgPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBEaXNwbGF5IGEgc3VtbWFyaXplZCBsaXN0IG9mIGFsbCBmaWxlcyBpbiB0aGUgY2F0ZWdvcnk8L2xpPg0KICA8bGk+PGVtPnNpbmdsZTwvZW0+IC0gRGlzcGxheSBhIGRldGFpbGVkIHJlcG9ydCBhYm91dCBhIHNpbmdsZSB1cGxvYWQ8L2xpPg0KICA8bGk+PGVtPnNpbmdsZXN1bW1hcnk8L2VtPiAtIERpc3BsYXkgYSBzdW1tYXJpemVkIHJlcG9ydCBhYm91dCBhIHNpbmdsZSB1cGxvYWQ8L2xpPg0KICA8L3VsPic7CiRsYW5nWydwYXJhbV9zZWxlY3Rmb3JtJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIGlzIHRoZSBmb3JtaWQgb2YgdGhlIHBhcmVudCBmb3JtLiAgVXNlZCB0byBoYW5kbGUgcGFyYW1ldGVyIHBhc3NpbmcnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ3doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGZpZWxkJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdHZhbHVlJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgZGVmYXVsdCBmaWVsZCB2YWx1ZSc7CiRsYW5nWydwYXJhbV9zZWxlY3Rub25lJ10gPSAnV2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB3ZXRoZXIgJiMwMzk7bm9uZSYjMDM5OyBpcyBhIHZhbGlkIGNob2ljZS4nOwokbGFuZ1sncmV0dXJudG9tb2R1bGUnXSA9ICdSZXR1cm4gdG8gbW9kdWxlIHBhbmVsJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ1RoZXJlIGFyZSBubyBkZWZpbmVkIGNhdGVnb3JpZXMnOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdSZXF1aXJlIGV4dGVuc2lvbnMgb24gYWxsIHVwbG9hZGVkIGZpbGVzJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdUaGlzIG9wZXJhdGlvbiB3aWxsIHJlc3RvcmUgdGhlIHRlbXBsYXRlIHRvIHN5c3RlbSBkZWZhdWx0cy4gIEFueSBjaGFuZ2VzIHlvdSBoYXZlIG1hZGUgd2lsbCBiZSBsb3N0LiAgQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIHByb2NlZWQ/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ1RodW1ibmFpbCc7CiRsYW5nWyduZXd0aHVtYm5haWwnXSA9ICdVcGxvZGEgbmV3IHRodW1ibmFpbCc7CiRsYW5nWydpbmZvX3N1bW1hcnknXSA9ICdBIGJyaWVmIGRlc2NyaXB0aW9uIG9mIHRoZSBmaWxlIChpZiBlbXB0eSwgdGhlIGZpbGUgbmFtZSBpcyB1c2VkIHdpdGhvdXQgdGhlIGV4dGVuc2lvbiknOwokbGFuZ1snaW5mb19jYXRlZ29yeW5hbWUnXSA9ICdBIGJyaWVmIG5hbWUgZm9yIHlvdXIgY2F0ZWdvcnkgKGh1bWFuIHJlYWRhYmxlKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ0EgZGVzY3JpcHRpb24gZm9yIHlvdXIgY2F0ZWdvcnknOwokbGFuZ1snaW5mb19jYXRlZ29yeXBhdGgnXSA9ICdUaGUgZGlyZWN0b3J5IG5hbWUgaW5zaWRlIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSB0aGF0IHdpbGwgYmUgdXNlZCB0byBzdG9yZSBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5LiAgSWYgdGhlIGRpcmVjdG9yeSBvZiB0aGlzIG5hbWUgZG9lcyBub3QgYWxyZWFkeSBleGlzdCwgaXQgbWF5IGJlIGNyZWF0ZWQnOwokbGFuZ1snaW5mb19kZXN0bmFtZSddID0gJ1VzZSB0aGUgJiMwMzk7VXBsb2FkIEFzJiMwMzk7IGZpZWxkIHRvIGNoYW5nZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSBvbiB1cGxvYWQuICBMZWF2ZSBibGFuayB0byBwcmVzZXJ2ZSB0aGUgZmlsZW5hbWUgYXMtaXMuJzsKJGxhbmdbJ2Vycm9yX2NhbnRjcmVhdGVkaXJlY3RvcnknXSA9ICdDb3VsZCBub3QgY3JlYXRlIGRpcmVjdG9yeSc7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ1RoZSBDTVNNYWlsZXIgbW9kdWxlIGNvdWxkIG5vdCBiZSBpbnN0YW50aWF0ZWQnOwokbGFuZ1sndXBsb2FkX25vdGlmaWNhdGlvbiddID0gJ0EgbmV3IGZpbGUgaGFzIGJlZW4gdXBsb2FkZWQnOwokbGFuZ1sndGl0bGVfZW1haWxfb25fdXBsb2FkJ10gPSAnU2VuZCB1cGxvYWQgbm90aWZpY2F0aW9uIHRvOic7CiRsYW5nWydlbWFpbF90ZW1wbGF0ZSddID0gJ0VtYWlsIFRlbXBsYXRlJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdDcmVhdGUgZHVtbXkgaW5kZXguaHRtbCBmaWxlcyBpbiBlYWNoIGRpcmVjdG9yeT88YnIvPjxlbT5BbnkgZXhpc3RpbmcgaW5kZXguaHRtbCBmaWxlcyB3aWxsIHJlbWFpbjwvZW0+JzsKJGxhbmdbJ2Fib3V0J10gPSAnQWJvdXQnOwokbGFuZ1snZXJyb3JfcGVybWlzc2lvbmRlbmllZCddID0gJ0FjY2VzcyBEZW5pZWQuIFBsZWFzZSBjaGVjayB5b3VyIHBlcm1pc3Npb25zLic7CiRsYW5nWydlcnJvcl9jb3VsZG5vdHdyaXRlJ10gPSAnQ291bGQgbm90IHdyaXRlJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnQWRkIENhdGVnb3J5JzsKJGxhbmdbJ2FsbCddID0gJ0FsbCc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnQXJlIFlvdSBTdXJlPyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRob3InOwokbGFuZ1snY2FuY2VsJ10gPSAnQ2FuY2VsJzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcoVGhlIHBhdGggY2Fubm90IGJlIG1vZGlmaWVkKSc7CiRsYW5nWydjYXRlZ29yaWVzJ10gPSAnQ2F0ZWdvcmllcyc7CiRsYW5nWydjYXRlZ29yeSddID0gJ0NhdGVnb3J5JzsKJGxhbmdbJ21lc3NhZ2VfY2F0ZWdvcnlhZGRlZCddID0gJ0NhdGVnb3J5IHN1Y2Nlc3NmdWxseSBhZGRlZCc7CiRsYW5nWydkYXRlJ10gPSAnRGF0ZSc7CiRsYW5nWydkYXRldXBsb2FkZWQnXSA9ICdEYXRlIFVwbG9hZGVkJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdEZWZhdWx0cyc7CiRsYW5nWydkZWxldGUnXSA9ICdEZWxldGUnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydkZXN0bmFtZSddID0gJ1VwbG9hZCBBcyc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhaWwgVGVtcGxhdGVzJzsKJGxhbmdbJ2Rvd25sb2FkZWQnXSA9ICdGaWxlICVzIHdhcyBkb3dubG9hZGVkLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1snZWRpdCddID0gJ0VkaXQnOwokbGFuZ1snZWRpdGNhdGVnb3J5J10gPSAnRWRpdCBDYXRlZ29yeSc7CiRsYW5nWydlZGl0dXBsb2FkJ10gPSAnRWRpdCBVcGxvYWQnOwokbGFuZ1snZXJyb3InXSA9ICdFcnJvciEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0EgY2F0ZWdvcnkgdXNpbmcgdGhlIHBhdGggKCVzKSBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UnXSA9ICdBIGNhdGVnb3J5IHVzaW5nIHRoYXQgcGF0aCBhbHJlYWR5IGV4aXN0cyc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0czInXSA9ICdFcnJvcjogQ2F0ZWdvcnkgbmFtZWQgJXMgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdFcnJvcjogQ2F0ZWdvcnkgYWxyZWFkeSBleGlzdHMnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0Vycm9yISBDYW5ub3QgZGVsZXRlIGEgY2F0ZWdvcnkgdGhhdCBpcyBub3QgZW1wdHknOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3Rmb3VuZCddID0gJ0Vycm9yOiBDYXRlZ29yeSBub3QgZm91bmQhJzsKJGxhbmdbJ2Vycm9yX2RiZXJyb3InXSA9ICdFcnJvcjogRGF0YWJhc2UgZXJyb3IhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknXSA9ICdFcnJvcjogRW1wdHkgQ2F0ZWdvcnkhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0Vycm9yOiBFbXB0eSBQYXRoISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnRXJyb3IhIEZpbGUgJXMgYWxyZWFkeSBleGlzdHMuJzsKJGxhbmdbJ2Vycm9yX2ZpbGVub3Rmb3VuZCddID0gJ0Vycm9yISBGaWxlICVzIHdhcyBub3QgZm91bmQuJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ0Vycm9yOiBJbnN1ZmZpY2llbnQgcGFyYW1ldGVycyBzdXBwbGllZCB0byBtb2R1bGUhJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRhdXRob3InXSA9ICdFcnJvcjogSW52YWxpZCAob3IgZW1wdHkpIGF1dGhvci4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnRXJyb3I6IEludmFsaWQgKG9yIGVtcHR5KSBjYXRlZ29yeS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGRlc2NyaXB0aW9uJ10gPSAnRXJyb3I6IEludmFsaWQgKG9yIGVtcHR5KSBkZXNjcmlwdGlvbi4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGZpbGUnXSA9ICdFcnJvcjogSW52YWxpZCAob3IgZW1wdHkpIGZpbGVuYW1lLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkZmlsZW5hbWUnXSA9ICdFcnJvcjogRmlsZXMgd2l0aCB0aGF0IG5hbWUgKHByb2JhYmx5IGV4dGVuc2lvbikgYXJlIG5vdCBhbGxvd2VkICglcykuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRpZCddID0gJ0Vycm9yOiBJbnZhbGlkIHVwbG9hZCBpZCc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzJ10gPSAnRXJyb3I6IE5vIE1hdGNoaW5nIEZpbGVzISc7CiRsYW5nWydmaWxlcyddID0gJ0ZpbGVzJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnRml4IFNwYWNlcyc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdGcm9udCBFbmQgRmlsZSBNYW5hZ2VtZW50IChVcGxvYWRzKSc7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5JdCBpcyBhIG1vZHVsZSBmb3IgYWxsb3dpbmcgcGVvcGxlIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZmlsZXMgdG8gYW5kIGZyb20geW91ciBzaXRlLiAgSXQga2VlcHMgdHJhY2sgb2Ygd2hvIHVwbG9hZGVkIGEgZmlsZSwgYW5kIHdobyBoYXMgZG93bmxvYWRlZCBpdC4gIEFzIHdlbGwsIHlvdSBjYW4gc29ydCBmaWxlcyBpbnRvIGNhdGVnb3JpZXMsIGFuZCBtYW5hZ2UgdGhlIGZpbGVzIHRoYXQgd2VyZSB1cGxvYWRlZCBsaWtlIGV2ZXJ5IGFkbWluaXN0cmF0b3Igd291bGQgZG88L3A+IA0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4NCjxwPlRvIHVzZSB0aGlzIG1vZHVsZSwgdG8gYWxsb3cgdXNlcnMgdG8gdXBsb2FkIGZpbGVzIHRvIHlvdXIgc2l0ZSwgeW91IHNob3VsZCBpbnN0YWxsIHRoZSBtb2R1bGUsIGFuZCB0aGVuIGNyZWF0ZSBvbmUgb3IgbW9yZSBjYXRlZ29yaWVzIChhLmsuYSkgZGlyZWN0b3JpZXMgZm9yIHRoZSB1cGxvYWRlZCBmaWxlcyB0byBnbyBpbnRvLiBUaGVuIGFkZCBhIHRhZyBpbnRvIGEgcGFnZSBvciB0ZW1wbGF0ZSBzb21ld2hlcmUgbGlrZSB7Y21zX21vZHVsZSBtb2R1bGU9JnF1b3Q7VXBsb2FkcyZxdW90OyBjYXRlZ29yeT0mcXVvdDtzb21lY2F0ZWdvcnkmcXVvdDsgbW9kZT0mcXVvdDtzb21lbW9kZSZxdW90O30uICBXaGVyZSBtb2RlIG1hdGNoZXMgb25lIG9mIHRoZSBtb2RlcyBsaXN0ZWQgYmVsb3cuICBUaGUgb3V0cHV0IHdpbGwgZGlmZmVyIGRlcGVuZGluZyB1cG9uIHdoaWNoIG1vZGUgeW91IHNlbGVjdC48L3A+DQo8cD5UaGlzIG1vZHVsZSBjYW4gdXNlIHRoZSBGcm9udGVuZFVzZXJzIG1vZHVsZSAob3B0aW9uYWwpIHRvIGdldCBpbmZvcm1hdGlvbiBhYm91dCBhbnkgY3VycmVudGx5IGxvZ2dlZCBpbiB1c2VycyB0byBwYXJ0bHkgZmlsbCBpbiB0aGUgZm9ybSB3aGVuIHVwbG9hZGluZyBmaWxlczs8L3A+DQo8aDM+UGVybWlzc2lvbnM8L2gzPg0KPHVsPg0KPGxpPjxlbT5NYW5hZ2UgVXBsb2FkczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIHRvIG1hbmFnZSBjYXRlZ29yaWVzLCBhbmQgdGhlIGZpbGVzIHdpdGhpbiB0aGVtLjwvbGk+DQo8bGk+PGVtPk1vZGlmeSBUZW1wbGF0ZXM8L2VtPiBwZXJtaXNzaW9uIGlzIG5lZWRlZCBlZGl0IGFueSBvZiB0aGUgdGVtcGxhdGVzLjwvbGk+DQo8bGk+PGVtPk1vZGlmeSBTaXRlIFByZWZlcmVuY2VzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgYW55IG9mIHRoZSBmaWxlIHNldHRpbmdzLjwvbGk+DQo8L3VsPg0KPGgzPkVtYWlsaW5nPC9oMz4NCjxwPlRoaXMgbW9kdWxlIGlzIGNhcGFibGUgb2Ygc2VuZGluZyBhbiBlbWFpbCB3aGVuZXZlciBhIGZpbGUgaXMgdXBsb2FkZWQsIHNlZSB0aGUgcHJlZmVyZW5jZXMgdGFiLiAgSG93ZXZlciwgdG8gZG8gdGhpcyB0aGUgPGI+Q01TTWFpbGVyPC9iPiBwYWNrYWdlIG11c3QgYmUgaW5zdGFsbGVkIGFuZCBjb25maWd1cmVkLiAgVGhpcyBpcyBhbiA8ZW0+b3B0aW9uYWw8L2VtPiBzdGVwLCBhbmQgaWYgdGhlIENNU01haWxlciBtb2R1bGUgaXMgbm90IGluc3RhbGxlZCwgbm90aGluZyB3aWxsIGJlIGRpc3BsYXllZCB0byB0aGUgdXNlciwgb25seSBhIGxvZyBtZXNzYWdlIHdpbGwgYmUgcGxhY2VkIGludG8gdGhlIGFkbWluIGxvZzwvcD4NCjxoMz5TeXN0ZW0gU2V0dGluZ3M8L2gzPg0KPHA+PGI+Tm90ZTo8L2I+IFRoaXMgbW9kdWxlIGRvZXMgbm90IGJ5cGFzcyBvciBnZXQgcGFzdCBhbnkgZmlsZSBzaXplIGxpbWl0YXRpb25zIGluIHBocC4gIEl0IHdvcmtzIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlbS4gIFRoZXJlZm9yZSB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHlvdXIgcGhwLmluaSBmaWxlIGFuZC9vciB5b3VyIGh0dHBkLmNvbmYgZmlsZShzKSB0byBhbGxvdyB5b3UgdG8gdXBsb2FkIGZpbGVzIGFzIGxhcmdlIGFzIHdoYXQgeW91IGhhdmUgc2V0IGluIHRoZSB1cGxvYWRzIG1vZHVsZSBwcmVmZXJlbmNlcy48L3A+DQo8aDM+QXBhY2hlIE5vdGVzPC9oMz4NCjxwPkluIG9yZGVyIHRvIGFsbG93IGxhcmdlIGZpbGUgdXBsb2FkcywgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB0aGUgdXBsb2FkX21heF9maWxlc2l6ZSBwYXJhbWV0ZXIgaW4geW91ciBwaHAuaW5pICBJbiBhZGRpdGlvbiwgdGhlIExpbWl0UmVxdWVzdEJvZHkgcGFyYW1ldGVyIGluIHlvdXIgYXBhY2hlIGNvbmZpZ3VyYXRpb24sIG1heSBuZWVkIHRvIGJlIGFkanVzdGVkIHRvIG1hdGNoIHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlcjwvcD4NCjxwPk5vdGU6ICB0aGUgdXBsb2FkX21heF9maWxlc2l6ZSBwYXJhbWV0ZXIgY2FuIGJlIHNwZWNpZmllZCBpbiBieXRlcywga2lsb2J5dGVzLCBvciBtZWdhYnl0ZXMsIGhvd2V2ZXIgdGhlIExpbWl0UmVxdWV0Qm9keSBwYXJhbWV0ZXIgaXMgb25seSBzcGVjaWZpZWQgaW4gYnl0ZXM8L3A+DQonOwokbGFuZ1snaWQnXSA9ICdJZCc7CiRsYW5nWydpbnN0YWxsZWQnXSA9ICdNb2R1bGUgdmVyc2lvbiAlcyBpbnN0YWxsZWQuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUCBBZGRyZXNzJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnQSBtb2R1bGUgdGhhdCBhbGxvd3MgdXNlcnMgdG8gdXBsb2FkIGZpbGVzLCBhbmQgYWxsb3dzIHlvdSB0byBtYW5hZ2UgdGhlbS4nOwokbGFuZ1snbmFtZSddID0gJ05hbWUnOwokbGFuZ1sncmVuYW1lbWVzc2FnZSddID0gJ0NoYW5nZSB0aGUgbmFtZSBoZXJlIHRvIGV4ZWN1dGUgYSByZW5hbWUnOwokbGFuZ1sncGF0aCddID0gJ1BhdGgnOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICdDaGFuZ2UgdGhlIGNhdGVnb3J5IGhlcmUgdG8gbW92ZSB0aGUgZmlsZSB0byBhbm90aGVyIGRpcmVjdG9yeSc7CiRsYW5nWydwYXRoaW51cGxvYWRzJ10gPSAnKFJlbGF0aXZlIHRvIHRoZSB1cGxvYWRzIGRpcmVjdG9yeSknOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICc8cD5UaGUgdXBsb2FkcyBtb2R1bGUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5IGluc3RhbGxlZC4gQmUgc3VyZSB0byBzZXQgJnF1b3Q7TWFuYWdlIFVwbG9hZHMmcXVvdDsgcGVybWlzc2lvbnMgdG8gdXNlIHRoaXMgbW9kdWxlITwvcD4NCjxwPjxzdHJvbmc+V2FybmluZzwvc3Ryb25nPiAtIFRoZSBwcm9wZXIgYmVoYXZpb3VyIG9mIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gbnVtZXJvdXMgcGhwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgVGhlc2UgaW5jbHVkZSA8ZW0+KGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pPC9lbT4sIHBocCYjMDM5O3MgbWVtb3J5X2xpbWl0LCBzYWZlX21vZGUsIGZpbGVfdXBsb2FkcywgdXBsb2Fkc19tYXhfZmlsZXNpemUsIGFuZCBtYXhfZXhlY3V0aW9uX3RpbWUuICBUaGVzZSB2YXJpYWJsZXMgbWF5IG5lZWQgYWRqdXN0bWVudCBmb3IgdGhpcyBtb2R1bGUgdG8gd29yayBwcm9wZXJseSBvbiB5b3VyIHNpdGUuICBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IHdvcmsgd2l0aCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9yIGhvc3QgcHJvdmlkZXIgdG8gdHVuZSB0aGVzZSBzZXR0aW5ncyBmb3IgeW91ciByZXF1aXJlbWVudHMuPC9wPic7CiRsYW5nWydwb3N0dW5pbnN0YWxsJ10gPSAnVGhlIFVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSByZW1vdmVkLiAgTm8gZmlsZXMgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB5b3VyIHVwbG9hZHMgZGlyZWN0b3J5LCBhbmQgZmlsZSBpbnRlZ3JpdHkgaXMgaW50YWN0JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnUHJlZmVyZW5jZXMnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnTW9kdWxlIHByZWZlcmVuY2VzIHVwZGF0ZWQuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdEZXNjcmlwdGlvbic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZSddID0gJ0ZpbGVzIGluIHRoaXMgZGlyZWN0b3J5IGNhbiBiZSBsaXN0ZWQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ0NhdGVnb3J5IE5hbWUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlciBQYXRoJzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdEZWxldGUgY2F0ZWdvcnkgZGlyZWN0b3J5Pyc7CiRsYW5nWydwcm9tcHRfbWF4X3VwbG9hZHNpemUnXSA9ICdNYXhpbXVtIGZpbGUgc2l6ZSBhbGxvd2VkIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdWYWxpZCB1cGxvYWQgZXh0ZW5zaW9ucyc7CiRsYW5nWydzY2FuJ10gPSAnU2Nhbic7CiRsYW5nWydzZWxlY3RjYXRlZ29yeSddID0gJ1NlbGVjdCBDYXRlZ29yeSc7CiRsYW5nWydzaXplJ10gPSAnU2l6ZSc7CiRsYW5nWydzaXpla2InXSA9ICdTaXplIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnU3VibWl0JzsKJGxhbmdbJ3N1bW1hcnlfdGVtcGxhdGUnXSA9ICdTdW1tYXJ5IFRlbXBsYXRlcyc7CiRsYW5nWydzdW1tYXJ5J10gPSAnU3VtbWFyeSc7CiRsYW5nWyd0aXRsZV9hZG1pbl9wYW5lbCddID0gJ1VwbG9hZHMgTW9kdWxlJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsZSBBZG1pbiBQYW5lbCc7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdNb2R1bGUgUHJlZmVyZW5jZXMnOwokbGFuZ1sndGl0bGVfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdFeGNsdWRlIHN1Ym5ldHMgZnJvbSBzdGF0aXN0aWNzJzsKJGxhbmdbJ3RpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdWYWxpZCBFeHRlbnNpb25zJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIFVuaW5zdGFsbGVkLic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsZSB1cGdyYWRlZCB0byB2ZXJzaW9uICVzLic7CiRsYW5nWyd1cGxvYWQnXSA9ICdVcGxvYWQnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWxlICVzIHdhcyB1cGxvYWRlZCBieSAlcy4nOwokbGFuZ1sncmVwbGFjZWQnXSA9ICdGaWxlICVzIHdhcyByZXBsYWNlZCBieSAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0ZpbGUgJXMgd2FzIGRlbGV0ZWQuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdVcGxvYWQgVGVtcGxhdGVzJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnVXNlcm5hbWUnOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ1dBUk5JTkc6IFVzZSBjYXV0aW9uIHdoZW4gZGVsZXRpbmcgY2F0ZWdvcmllcy4gIEZpbGVzIG1heSBiZSBsb3N0JzsKJGxhbmdbJ3V0bWEnXSA9ICcxNTY4NjEzNTMuMTE2ODMxMTMxMi4xMjQ4MDk3NTU4LjEyNTM5NjcxNzAuMTI1NDgzNjA4OC40JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTI1NDgzNjA4OC40LjMudXRtY2NuPShyZWZlcnJhbCl8dXRtY3NyPWZvcnVtLmNtc21hZGVzaW1wbGUub3JnfHV0bWNjdD0vaW5kZXgucGhwL3RvcGljLDM1NzA3Lm1zZzE3OTUyMy5odG1sfHV0bWNtZD1yZWZlcnJhbCc7CiRsYW5nWydxY2EnXSA9ICdQMC01MTkwMzQ2MzEtMTI1MDYwNDg4NzQyOCc7CiRsYW5nWyd1dG1iJ10gPSAnMTU2ODYxMzUzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nb_NO.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZpZWxkX2NhdGVnb3J5X2lkJ10gPSAnS2F0ZWdvcmlJRCc7CiRsYW5nWydmaWVsZF9jYXRlZ29yeV9uYW1lJ10gPSAnS2F0ZWdvcnVuYXZuJzsKJGxhbmdbJ2ZpZWxkX2NhdGVnb3J5X3BhdGgnXSA9ICdLYXRlZ29yaXN0aSc7CiRsYW5nWydmaWVsZF9hdXRob3InXSA9ICdFaWVyJzsKJGxhbmdbJ2ZpZWxkX2Rlc2NyaXB0aW9uJ10gPSAnQmVza3JpdmVsc2UnOwokbGFuZ1snbm91c2VyaW5mbyddID0gJ0luZ2VuIGJydWtlcmluZm8gdGlsZ2plbmdlbGlnJzsKJGxhbmdbJ2Vycm9yX21hdGNoaW5ncmVjb3JkcyddID0gJ0luZ2VuIHBvc3RlciBibGUgZnVubmV0IHNvbSBwYXNzZXIgZGluZSBrcml0ZXJpZXInOwokbGFuZ1snbXNnX3JlcG9ydF9zZW50J10gPSAnUmFwcG9ydCBzZW5kdCc7CiRsYW5nWydnZW5lcmF0ZWRfYnknXSA9ICdHZW5lcmVydCBhdic7CiRsYW5nWydnZW5lcmF0ZWRfb24nXSA9ICdHZW5lcmVydCBkZW4nOwokbGFuZ1snc3RhcnRfZGF0ZSddID0gJ1N0YXJ0ZGF0byc7CiRsYW5nWydlbmRfZGF0ZSddID0gJ1NsdXR0ZGF0byc7CiRsYW5nWyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddID0gJ0thdGVnb3JpbmF2bic7CiRsYW5nWydpbmZvX2ZpZWxkX2ZpbGVzJ10gPSAnRGV0dGUgZXIgZW4gYXV0b2Z1bGxmJm9zbGFzaDtyIGZlbHQsIGR1IGthbiBza3JpdmUgaW5uIGRlbHZpc2UgZmlsbmF2biBmb3IgYXQgZGUgc2thbCBibGkgYXV0b21hdGlzayBmdWxsZiZvc2xhc2g7cnQuIER1IGthbiBvZ3MmYXJpbmc7IHNrcml2ZSBpbm4gZmlsbmF2bm0mb3NsYXNoO25zdGVyIGR2cy46IGZvbypqcGcuIERlbm5lIGxpc3RlbiB2aWwgYmxpIHJlbnNldCBvZyBzamVra2V0IGZvciBneWxkaWdoZXQgbiZhcmluZztyIHNramVtYWV0IGVyIHNlbmR0JzsKJGxhbmdbJ3Byb21wdF9maWxlcyddID0gJ0ZpbGVyJzsKJGxhbmdbJ3JlcG9ydF9kb3dubG9hZHNieXVzZXInXSA9ICdOZWRsYXN0aW5nZXIgYXYgYnJ1a2VyJzsKJGxhbmdbJ3JlcG9ydF9kb3dubG9hZHNieWZpbGUnXSA9ICdOZWRsYXN0aW5nZXIgYXYgZmlsJzsKJGxhbmdbJ3Byb21wdF9vdXRwdXRfdGVtcGxhdGUnXSA9ICdVdGRhdGEgbWFsJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2Fkc2J5ZmlsZV90cGwnXSA9ICdOZWRsYXN0aW5nZXIgZXR0ZXIgZmlsIHJhcHBvcnRtYWwnOwokbGFuZ1sndGl0bGVfZG93bmxvYWRzYnl1c2VyX3RwbCddID0gJ05lZGxhc3RpbmdlciBldHRlciBicnVrZXIgcmFwcG9ydG1hbCc7CiRsYW5nWydycHRfZG93bmxvYWRzYnlmaWxlX3RwbCddID0gJ05lZGxhc3RpbmdlciBldHRlciBmaWwgcmFwcG9ydCc7CiRsYW5nWydycHRfZG93bmxvYWRzYnl1c2VyX3RwbCddID0gJ05lZGxhc3RpbmdlciBldHRlciBicnVrZXIgcmFwcG9ydCc7CiRsYW5nWyd1c2VycHJvcCddID0gJ0VnZW5za2FwJzsKJGxhbmdbJ2ZpZWxkX2xhdGVzdF9kb3dubG9hZCddID0gJ1Npc3RlIG5lZGxhc3RpbmcnOwokbGFuZ1snZmllbGQnXSA9ICdGZWx0JzsKJGxhbmdbJ2Nsb3NlJ10gPSAnTHVrayc7CiRsYW5nWydlcnJvcl9pbnRlcm5hbCddID0gJ0VuIGludGVybiBmZWlsIGhhciBvcHBzdCZhcmluZzt0dCc7CiRsYW5nWydlcnJvcl9ub3Byb2ZpbGUnXSA9ICdJbmdlbiByYXBwb3J0cHJvZmlsIG9wcGRhZ2V0JzsKJGxhbmdbJ2V4cG9ydF9odG1sZW1haWwnXSA9ICdIVE1MIHJhcHBvcnQgKHZpYSBlLXBvc3QpJzsKJGxhbmdbJ2V4cG9ydF9odG1sJ10gPSAnSFRNTCByYXBwb3J0IChueXR0IHZpbmR1KSc7CiRsYW5nWydleHBvcnRfY3N2J10gPSAnQVNDSUkgKGNzdikgZmlsJzsKJGxhbmdbJ3Byb21wdF9vdXRwdXQnXSA9ICdVdGRhdGEgZm9ybWF0JzsKJGxhbmdbJ3Byb21wdF9yZXBvcnRfdHlwZSddID0gJ1JBcHBvcnR0eXBlJzsKJGxhbmdbJ3JlcG9ydF9zdW1tYXJ5J10gPSAnU2FtbWVuZHJhZyc7CiRsYW5nWydyZXBvcnRfZGV0YWlsJ10gPSAnRGV0YWxqZXJ0JzsKJGxhbmdbJ2luZm9fZmV1X3VzZXJzJ10gPSAnRGV0dGUgZXIgZXQgYXV0b2Z1bGxmJm9zbGFzaDtyIGZlbHQsIGR1IGthbiBza3JpdmUgaW5uIGRlbHZpc2UgYnJ1a2VybmF2biBvZyBkZSBibGlyIGF1dG9tYXRpc2sgZnVsbGYmb3NsYXNoO3J0LiBEZW5uZSBsaXN0ZW4gdmlsIGJsaSByZW5zZXQgb2cgc2pla2tldCBmb3IgZ3lsZGlnaGV0IG4mYXJpbmc7ciBza2plbWFldCBlciBzZW5kdCc7CiRsYW5nWydwcm9tcHRfc3RhcnRfZGF0ZSddID0gJ1N0YXJ0ZGF0byc7CiRsYW5nWydwcm9tcHRfZW5kX2RhdGUnXSA9ICdTbHV0dGRhdG8nOwokbGFuZ1sncHJvbXB0X2FzY2VuZGluZyddID0gJ1N0aWdlbmRlJzsKJGxhbmdbJ3Byb21wdF9kZXNjZW5kaW5nJ10gPSAnU3lua2VuZGUnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHQnXSA9ICdTdGFuZGFyZCc7CiRsYW5nWydwcm9tcHRfc29ydG9yZGVyJ10gPSAnU29ydGVyaW5nc3Jla2tlZiZvc2xhc2g7bGdlJzsKJGxhbmdbJ2ZpZWxkX2Rvd25sb2FkX2RhdGUnXSA9ICdOZWRsYXN0aW5nIGRhdG8nOwokbGFuZ1snZmllbGRfZG93bmxvYWRfdXNlciddID0gJ05lZGxhc3RpbmcgYnJ1a2VyJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9pZCddID0gJ09wcGxhc3RpbmdzSUQnOwokbGFuZ1snZmllbGRfdXBsb2FkX2NhdGVnb3J5X2lkJ10gPSAnS2F0ZWdvcmlJRCc7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfbmFtZSddID0gJ0thdGVnb3JpbmF2bic7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfcGF0aCddID0gJ0thdGVnb3Jpc3RpJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9uYW1lJ10gPSAnRmlsbmF2bic7CiRsYW5nWydmaWVsZF91cGxvYWRfYXV0aG9yJ10gPSAnRWllcic7CiRsYW5nWydmaWVsZF91cGxvYWRfZGVzY3JpcHRpb24nXSA9ICdCZXNrcml2ZWxzZSc7CiRsYW5nWydmaWVsZF91cGxvYWRfaXAnXSA9ICdPcHBsYXN0aW5ncyBJUCBhZHJlc3NlJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9zaXplJ10gPSAnRmlsc3Qmb3NsYXNoO3JyZWxzZSc7CiRsYW5nWydmaWVsZF91cGxvYWRfZGF0ZSddID0gJ09wcGxhc3RpbmdzZGF0byc7CiRsYW5nWydmaWVsZF9kb3dubG9hZHMnXSA9ICdBbnRhbGwgbmVkbGFzdGluZ2VyJzsKJGxhbmdbJ3Byb21wdF9maWVsZGxpc3QnXSA9ICdWZWxnIHV0ZGF0YSBmZWx0ZXInOwokbGFuZ1sncHJvbXB0X3NvcnRpbmcnXSA9ICdTb3J0ZXIgZXR0ZXInOwokbGFuZ1snZXJyb3Jfbm91c2Vyc2ZvdW5kJ10gPSAnRXR0ZXIgJmFyaW5nOyB2YWxpZGVyZSBpbm5kYXRhLCBpbmdlbiBwYXNzZW5kZSBicnVrZXJlIGJsZSBmdW5uZXQnOwokbGFuZ1snb3InXSA9ICdFbGxlcic7CiRsYW5nWydwcm9tcHRfZmV1X3VzZXJzJ10gPSAnRkVVIEJydWtlcmUnOwokbGFuZ1sncHJvbXB0X2ZldV9ncm91cHMnXSA9ICdGRVUgR3J1cHBlcic7CiRsYW5nWydvdXRwdXQnXSA9ICdVdGRhdGEnOwokbGFuZ1snZXJyb3Jfbm9mZXUnXSA9ICdGcm9udEVuZFVzZXJzIG1vZHVsICh2ZXJzaW9uIDEuMjEuMTUgZWxsZXIgc3Qmb3NsYXNoO3JyZSkgZXIgcCZhcmluZztrcmV2ZCBmb3IgZGVubmUgaGFuZGxpbmdlbic7CiRsYW5nWyd0aXRsZV9yZXBvcnRfZG93bmxvYWRzYnl1c2VyMiddID0gJ05lZGxhc3RpbmdlciBldHRlciBicnVrZXJyYXBwb3J0JzsKJGxhbmdbJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieXVzZXInXSA9ICdOZWRsYXN0aW5nZXIgZXR0ZXIgYnJ1a2VyJzsKJGxhbmdbJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieWZpbGUyJ10gPSAnTmVkbGFzdGluZ2VyIGV0dGVyIGZpbHJhcHBvcnQnOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZSddID0gJ05lZGxhc3RpbmdlciBldHRlciBmaWwnOwokbGFuZ1sncmVwb3J0cyddID0gJ1JhcHBvcnRlcic7CiRsYW5nWydwcm9tcHRfZG93bmxvYWRzJ10gPSAnTmVkbGFzdGluZ2VyJzsKJGxhbmdbJ3Byb21wdF9wZXJtaXNzaW9ucyddID0gJ1RpbGxhdGVsc2VyJzsKJGxhbmdbJ3Byb21wdF9maWVsZHMnXSA9ICdGZWx0ZXInOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlJ10gPSAnU2VuZCBmaWwnOwokbGFuZ1snaW5mb19jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJ10gPSAnVmVsZyBkZSBGRVUgYnJ1a2VyZ3J1cHBlbmUgc29tIGthbiBzZSBueWxpZyBvcHBsYXN0ZWRlIGVsbGVyIHNrYW5uZWRlIGZpbGVyLiBEZXR0ZSB2aWwgaWtrZSBoYSBlZmZla3QgcCZhcmluZzsgdGlsbGF0ZWxzZW5lIHRpbCBla3Npc3RlcmVuZGUgZmlsZXIuIEFkbWluaXN0cmF0b3JlciBrYW4gcmVkaWdlcmUgdGlsbGF0ZWxzZW5lIGZvciBodmVyIGZpbCB1bmRlciByZWRpZ2VyaW5nIGF2IGluZm9ybWFzam9uZW4gb20gZGVuIG9wcGxhc3RlZGUgZmlsZW4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X2RmbHR1c2VycGVybXMnXSA9ICdHcnVwcGVyIHNvbSBrYW4gc2UgbnlsaWdlIG9wcGxhc3RlZGUgZWxsZXIgc2thbm5lZGUgZmlsZXInOwokbGFuZ1snaW5mb19jYXRlZ29yeV91c2VycGVybXMnXSA9ICdPbSBkZXR0ZSBlciBwJmFyaW5nO3NsJmFyaW5nO3R0LCBzJmFyaW5nOyBrYW4gZHUga29udHJvbGxlcmUgaHZhIEZFVSBicnVrZXJncnVwcGVyIGthbiBzZSBhdiBpbmRpdmlkdWVsbGUgZmlsZXIgaSBrYXRlZ29yaWVuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV91c2VycGVybXMnXSA9ICdLYW4gc3lubGlnaGV0IGJsaSBrb250cm9sbGVydCBwJmFyaW5nOyBmaWxuaXYmYXJpbmc7IGZvciBkZW5uZSBrYXRlZ29yaWVuJzsKJGxhbmdbJ3Byb21wdF9tb2RpZnlpbmcnXSA9ICdNb2RpZmlzZXJlcic7CiRsYW5nWydwcm9tcHRfdmlld2luZyddID0gJ1Zpc2VyJzsKJGxhbmdbJ3Byb21wdF9nZW5lcmFsJ10gPSAnR2VuZXJlbHQnOwokbGFuZ1snaW5mb19jYXRlZ29yeWxpc3RhYmxlJ10gPSAnS2FuIGZpbGVyIGkgZGVubmUga2F0YWdvcmllbiBibGkgbGlzdGV0JzsKJGxhbmdbJ2Vycm9yX21pc3Npbmd2YWx1ZSddID0gJ0VuIHAmYXJpbmc7a3JldmQgdmVyZGkgbWFuZ2xlcic7CiRsYW5nWydlZGl0ZWQnXSA9ICdSZWRpZ2VydCAlcyc7CiRsYW5nWydtb3ZlZGZpbGUnXSA9ICdGbHl0dGV0IGZpbCAlcyB0aWwgJXMnOwokbGFuZ1sncGFnZWxpbWl0J10gPSAnRmlsZXIgcGVyIHNpZGUnOwokbGFuZ1sndmlldyddID0gJ1ZpcyBkZW5uZSBmaWxlbic7CiRsYW5nWydlZGl0X3RoaXNfZmlsZSddID0gJ1JlZGlnZXIgZGV0dGUgZmVsdGV0JzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdTa2FsIGRlbm5lIGthdGFsb2dlbiBhdXRvbWF0aXNrIHNrYW5uZXMgZm9yIG55ZSBmaWxlcj8nOwokbGFuZ1snaW5mb19jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdOJmFyaW5nO3IgZGVubmUga2F0YWxvZ2VuICZhcmluZztwbmVzIGZyYSBmcm9udCBlbmQgYmxpciBkZXQgYXV0b21hdGlzayBza2FubmV0IGZvciBvbSBkZXQgZmlubmVzIG55ZSBmaWxlcic7CiRsYW5nWydwcm9tcHRfdGxfYWNjZXNzJ10gPSAnVGlkc2JlZ3JlbnNldCB0aWxnYW5nJzsKJGxhbmdbJ3Byb21wdF9hbGxvd191cGxvYWRfc2VuZGZpbGUnXSA9ICdUaWxsYXQgc2VuZGluZyBhdiBmaWxlciBtZWQgZGV0IHNhbW1lIHZlZCBhZG1pbi1vcHBsYXN0aW5nJzsKJGxhbmdbJ21zZ19hdXRvX2RlbGV0ZV9maWxlJ10gPSAnU2xldHRldCBhdXRvbWF0aXNrIGZvcmVsZGV0IGZpbDogJXMnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGVfZmFpbGVkJ10gPSAnUmV0dGlnaGV0c3Byb2JsZW0sIGF1dG9zbGV0dGluZyBhdiAlcyBmZWlsZXQnOwokbGFuZ1snaW5mb19jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ1NwZXNpZmlzZXIgYW50YWxsIHRpbWVyIHNvbSBza2FsIGcmYXJpbmc7IGYmb3NsYXNoO3IgZmlsZXIgaSBkZW5uZSBrYXRlZ29yaWVuIGthbiBzbGV0dGVzLiBCZW55dHQgdmVyZGllbiAwIGZvciAmYXJpbmc7IGluZGlrZXJlIGF0IGZpbGVyIGlra2Ugc2thbCBzbGV0dGVzJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ0FudGFsbCB0aW1lciBmJm9zbGFzaDtyIGZpbGVyIGkgZGVubmUga2F0ZWdvcmllbiBhdXRvbWF0aXNrIHZpbCBibGkgc2xldHRldCc7CiRsYW5nWydpbmZvX2RmbHRfY2F0ZWdvcnlfZXhwaXJ5J10gPSAnU3RhbmRhcmQgdmVyZGkgZm9yIG55ZSBrYXRlZ29yaWVyIHNvbSBzcGVzaWZpc2VyZXIgaHZvciBsZW5nZSBmaWxlciBpIGRlbm5lIGthdGVnb3JpZW4gZiZhcmluZztyIGxldmUgZiZvc2xhc2g7ciBkZSBhdXRvbWF0aXNrIHZpbCBibGkgc2xldHRldC4gQmVueXR0IHZlcmRpZW4gMCBmb3IgJmFyaW5nOyBpbmRpa2VyZSBpbmdlbiBzbGV0dGluZyc7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9leHBpcnknXSA9ICdLYXRlZ29yaSBmb3JlbGRlbHNlc3BlcmlvZGUgPGVtPihocnMpPC9lbT4nOwokbGFuZ1snaW5mb19jYXRlZ29yeWRlbGV0YWJsZSddID0gJ0F1dG9yaXNlcnRlIGJydWtlcmUgdmlsIGhhIHRpbGdhbmcgdGlsICZhcmluZzsgc2xldHRlIGRpc3NlIGZpbGVuZS4gRGV0dGUgYmV0eXIgYXQgZW4gbGVua2UgdmlsIHZpc2VzIGkgZGUgYWt0dWVsbGUgbWFsZW5lIGZvciAmYXJpbmc7IHRpbGxhdGUgc2xldHRpbmcgYXYgZmlsZW4uIEVuIG5ldHRzdGVkc3V0dmlrbGVyIGthbiBiZW55dHRlIHBhc3NlbmRlIHNtYXJ0eWxvZ2lrayBmb3IgJmFyaW5nOyB2aXNlIGVuIGxlbmtlIHRpbCBkZSBhdXRvcmlzZXJ0ZSBicnVrZXJuZS4nOwokbGFuZ1snY29weV9maWxlcyddID0gJ0tvcGllciBmaWxlcic7CiRsYW5nWydlcnJvcl9maWxldG9vbGFyZ2UnXSA9ICdGaWxlbiBkdSBmb3JzJm9zbGFzaDtrdGUgJmFyaW5nOyBsYXN0ZSBvcHAgZXIgc3Qmb3NsYXNoO3JyZSBlbm4gZGV0IHNvbSBlciBzYXR0IGkgQ01TTVMgbWFrc2ltdW0gb3BwbGFzdGluZyBmaWxzdCZvc2xhc2g7cnJlbHNlJzsKJGxhbmdbJ2FyZXlvdXN1cmVfZGVsZXRlY2F0ZWdvcnknXSA9ICdFciBkdSBzaWtrZXIgcCZhcmluZzsgYXQgZHUgdmlsIHNsZXR0ZSBkZW5uZSBrYXRhZ29yaWVuPyc7CiRsYW5nWydlcnJvcl9kZWxldGUnXSA9ICdFbiBlbmhldCBrdW5uZSBpa2tlIHNsZXR0ZXMgKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ0VyIGR1IHNpa2tlciBwJmFyaW5nOyBhdCBkdSB2aWwgdXRmJm9zbGFzaDtyZSBkZW4gdmFsZ3RlIGhhbmRsaW5nZW4gcCZhcmluZzsgZGUgdmFsZ3RlIGthdGVnb3JpZW5lPyc7CiRsYW5nWydlcnJvcl9ub3RoaW5nX3NlbGVjdGVkJ10gPSAnRmVpbDogSW5nZW50aW5nIHZhbGd0JzsKJGxhbmdbJ3dpdGhfc2VsZWN0ZWQnXSA9ICdNZWQgdmFsZ3Q6JzsKJGxhbmdbJ2Vycm9yX3JlcGxhY2VfbWlzbWF0Y2hlZF9maWxlZXh0J10gPSAnVmVkIGVyc3RhdG5pbmcgYXYgZW4gZmlsIHMmYXJpbmc7IG0mYXJpbmc7IGR1IGxhc3RlIG9wcCBlbiBmaWwgYXYgYWtrdXJhdCBzYW1tZSB0eXBlIChzYXR0IGF2IGZpbGVuZGVsc2VuKS4gRmlsZW4gZHUgdmFsZ3RlIHBhc3NlciBpa2tlIG1lZCBkZW4gb3JpZ2luYWxlIGZpbGVuLic7CiRsYW5nWydyZXBsYWNlJ10gPSAnRXJzdGF0dCc7CiRsYW5nWydpbmZvX3JlcGxhY2VmaWxlJ10gPSAnRHUga2FuIGxhc3RlIG9wcCBlbiBlcnN0YXRuaW5nc2ZpbCwgb20gZmlsZW4gZXIgZXQgYmlsZGUsIG9nIGR1IGlra2UgaGFyIHNwZXNpZmlzZXJ0IGV0IGVyc3RhdG5pbmdzbWluaWF0eXJiaWxkZSwgdmlsIGV0IG55dHQgbWluaWF0eXJiaWxkZSBibGkgZ2VuZXJlcnQnOwokbGFuZ1sncHJvbXB0X3JlcGxhY2VmaWxlJ10gPSAnTGFzdCBvcHAgZXJzdGF0bmluZ3NmaWwnOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnRmlrcyBtZWxsb21yb20gaSBmaWxuYXZuZXQnOwokbGFuZ1snY2F0ZWdvcnlfY29waWVkJ10gPSAnS2F0ZWdvcmllbiBibGUga29waWVydCc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVwYXRoJ10gPSAnVmVubmxpZ3N0IHNwZXNpZmlzZXIgZXQga2F0YWxvZ25hdm4gc29tIGVyIGZvcnNramVsbGlnIGZyYSBraWxkZW4sIG9nIHNvbSBpa2tlIGFsbGVyZWRlIGVyIGkgYnJ1ayc7CiRsYW5nWydvcGVyYXRpb25fY2FuY2VsbGVkJ10gPSAnSGFuZGxpbmcgYXZicnV0dCc7CiRsYW5nWydzb3VyY2UnXSA9ICdLaWxkZSc7CiRsYW5nWydkZXN0aW5hdGlvbiddID0gJ00mYXJpbmc7bCc7CiRsYW5nWydwcm9tcHRfY29weV9maWxlcyddID0gJ0tvcGllciBrYXRlZ29yaWZpbGVyJzsKJGxhbmdbJ2luZm9fY29weV9maWxlcyddID0gJ0tvcGllciBmaWxlbmUgZnJhIGtpbGRla2F0ZWdvcmllbiBvdmVyIHRpbCBtJmFyaW5nO2xrYXRlZ29yaWVuJzsKJGxhbmdbJ2V4dHJhJ10gPSAnRWtzdHJhJzsKJGxhbmdbJ2NvcHknXSA9ICdLb3BpZXInOwokbGFuZ1snc2VsZWN0b25lJ10gPSAnVmVsZyBlbic7CiRsYW5nWydhdXRvd2F0ZXJtYXJrJ10gPSAnc2V0dCB2YW5ubWVya2UgYXV0b21hdGlzayBwJmFyaW5nOyBiaWxkZXInOwokbGFuZ1snaW1hZ2Vfc2V0dGluZ3MnXSA9ICdCaWxkZWlubnN0aWxsaW5nZXInOwokbGFuZ1sncHJvbXB0X2dldGZpbGVfcmVzdWx0cGFnZSddID0gJ1NpZGUgJmFyaW5nOyBiZW55dHRlIGZvciBmZWlsbWVsZGluZ2VyIG9nIGFuZHJlIG1lbGRpbmdlciByZWxhdGVydCB0aWwgZmlsbmVkbGFzdGluZyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2tleSddID0gJ09wcGxhc3RpbmdzbiZvc2xhc2g7a2tlbGVuIHNvbSBibGUgb3BwZ2l0dCBlciB1Z3lsZGlnIChtdWxpZyBkZW4gaGFyIG4mYXJpbmc7ZGQgZGVucyBtYWtzaW1hbGUgbmVkbGFzdGluZ3NtZW5nZGUgZWxsZXIgaGFyIHV0bCZvc2xhc2g7cHQpJzsKJGxhbmdbJ2RmbHRfdGltZWxpbWl0ZWRfc3ViamVjdCddID0gJ3skc2l0ZW5hbWV9IC0gRHUgaGFyIGYmYXJpbmc7dHQgdGlsZ2FuZyB0aWwgeyRlbnRyeS0+dXBsb2FkX25hbWV8c3RyaXBfdGFnc30gZm9yIGVuIGJlZ3JlbnNldCBwZXJpb2RlJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnRW1uZSBmb3IgZS1wb3N0IHNvbSBvcHByZXR0ZXMgbiZhcmluZztyIGRldCBzZW5kZXMgZW4gdGlkc2JlZ3JlbnNldCBVUkwnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2F1dG9kZWxldGUnXSA9ICdTbGV0dCBhdXRvbWF0aXNrIHV0bCZvc2xhc2g7cHRlIGlubmxlZ2cgZXR0ZXIgTiB0aW1lciA8ZW0+KG9wcGdpIDAgZm9yICZhcmluZzsgc2wmYXJpbmc7IGF2IGF1dG9zbGV0dGluZyk8L2VtPjonOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3NlbmRpdCddID0gJ1NlbmQgZGVubmUgdXJsIHRpbCBkZW4gb3BwZ2l0dGUgZS1wb3N0YWRyZXNzZW4/JzsKJGxhbmdbJ3VybF9rZXknXSA9ICdVUkwtbiZvc2xhc2g7a2tlbCc7CiRsYW5nWydjcmVhdGVkJ10gPSAnT3BwcmV0dGV0JzsKJGxhbmdbJ2V4cGlyZXMnXSA9ICdVdGwmb3NsYXNoO3Blcic7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0xlZ2cgdGlsL3JlZGlnZXIgVGlkc2JlZ3JlbnNldCBuJm9zbGFzaDtra2VsJzsKJGxhbmdbJ3RpbWVfbGltaXRlZF9rZXlfYWRkZWQnXSA9ICdUaWRzYmVncmVuc2V0IG4mb3NsYXNoO2trZWwgbGFndCB0aWwnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnQW50YWxsIHRpbWVyJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdBbnRhbGwgbmVkbGFzdGluZ2VyJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFLXBvc3RhZHJlc3NlJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ0VuIHAmYXJpbmc7a3JldmQgdmVyZGkgbWFuZ2xlciBlbGxlciBlciB1Z3lsZGlnOiAlcyc7CiRsYW5nWydhZGRfdGltZWxpbWl0ZWRfa2V5J10gPSAnTGVnZyB0aWwgVGlkc2JlZ3JlbnNldCBuJm9zbGFzaDtra2VsJzsKJGxhbmdbJ2ZpbGVfaW5mbzInXSA9ICdGaWwgJXMgKGlkPSVkKSc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ1NwZXNpZmlzZXIgc3RhbmRhcmQgYW50YWxsIGdhbmdlciBzb20gZW4gZmlsIGlkZW50aWZpc2VydCBtZWQgZW4gc3Blc2lmaWsgbiZvc2xhc2g7a2tlbCBrYW4gbGFzdGVzIG5lZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfZG93bmxvYWRzJ10gPSAnU3RhbmRhcmQgYW50YWxsIG5lZGxhc3Rpbmdlcic7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnU3Blc2lmaXNlciBzdGFuZGFyZCBhbnRhbGwgdGltZXIgc29tIGVuIFRpZHNiZWdyZW5zZXQgbiZvc2xhc2g7a2tlbCBlciBneWxkaWcuIE9wcGdpIDAgZm9yIHViZWdyZW5zZXQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnQW50YWxsIHRpbWVyIHNvbSBlbiBUaWRzZGJlZ3JlbnNldCBuJm9zbGFzaDtra2VsIGVyIGd5bGRpZyc7CiRsYW5nWyd0aW1lbGltaXRlZF91cmxfc2V0dGluZ3MnXSA9ICdJbm5zdGlsbGluZ2VyIGZvciBUaWRzYmVncmVuc2V0IG4mb3NsYXNoO2trZWwnOwokbGFuZ1snbWFuYWdlX3RpbWVsaW1pdGVkJ10gPSAnQmVoYW5kbGUgVGlkc2JlZ3JlbnNldCBhZGdhbmcnOwokbGFuZ1sndXBsb2FkaW5nX3NldHRpbmdzJ10gPSAnRmlsb3BwbGFzdGluZ3MgaW5uc3RpbGxpbmdlcic7CiRsYW5nWydnZW5lcmFsX3NldHRpbmdzJ10gPSAnR2VuZXJlbGxlIGlubnN0aWxsaW5nZXInOwokbGFuZ1sndGh1bWJuYWlsX3NldHRpbmdzJ10gPSAnTWluaWF0eXJiaWxkZWdlbmVyZXJpbmcnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdTaWRlIHNvbSBlbiBza2FsIHNlbmRlcyB0aWwgZXR0ZXIgc2VuZGluZyBhdiBlbiBmaWwnOwokbGFuZ1snbGJsX2JhY2snXSA9ICdUaWxiYWtlJzsKJGxhbmdbJ2xibF90ZW1wbGF0ZXMnXSA9ICdFbmRyZSBtYWxlcic7CiRsYW5nWydwcm9tcHRfcHVibGljX2ZpZWxkJ10gPSAnRGV0dGUgZmVsdGV0IGVyIG9mZmVudGxpZyA8ZW0+KGthbiBzZWVzIGF2IG5ldHRzdGVkc2JlcyZvc2xhc2g7a2VybmUpPC9lbT4nOwokbGFuZ1sndXBsb2FkX2VkaXRlZCddID0gJ0ZpbGRldGFsamVyIHJlZGlnZXJ0IHAmYXJpbmc7ICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnRW4gdmFsZ2ZyaSBtaW5pYXR5cmJpbGRlIGZpbCc7CiRsYW5nWyd1cGxvYWRfZmlsZSddID0gJ0xhc3Qgb3BwIGVuIG55IGZpbCc7CiRsYW5nWydtc2dfZmllbGRfZGVsZXRlZCddID0gJ0ZlbHQgc2xldHRldCc7CiRsYW5nWydhc2tfZGVsZXRlX2ZpZWxkJ10gPSAnRXIgZHUgc2lra2VyIHAmYXJpbmc7IGF0IGR1IHZpbCBmamVybmUgZGVubmUgZmVsdGRlZmluaXNqb25lbiBvZyBhbGxlIGFzc29zaWVydGUgdmVyZGllcj8nOwokbGFuZ1sneWVzJ10gPSAnSmEnOwokbGFuZ1snbm8nXSA9ICdOZWknOwokbGFuZ1sndHlwZSddID0gJ1R5cGUgJzsKJGxhbmdbJ2ZpZWxkdHlwZV9tdWx0aXNlbGVjdCddID0gJ0ZsZXJ2YWxnc2xpc3RlJzsKJGxhbmdbJ2ZpZWxkdHlwZV9kcm9wZG93biddID0gJ05lZHRyZWtrc2xpc3RlJzsKJGxhbmdbJ2ZpZWxkdHlwZV9jaGVja2JveCddID0gJ0F2a3J5c25pbmdzYm9rcyc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGFyZWEnXSA9ICdUZWtzdG9tciZhcmluZztkZSc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGlucHV0J10gPSAnVGVrc3Rpbm5za3JpdmluZyc7CiRsYW5nWydwcm9tcHRfdXNlX3d5c2l3eWcnXSA9ICdCZW55dHQgd3lzaXd5ZyByZWRpZ2VyZXJlbiBuJmFyaW5nO3IgZGV0dGUgZmVsdGV0cyB2ZXJkaSByZWRpZ2VyZXMnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHRfY29udGVudCddID0gJ1N0YW5kYXJkIGlubmhvbGQgZm9yIGRldHRlIHRla3N0b21yJmFyaW5nO2RldCc7CiRsYW5nWydwcm9tcHRfZHJvcGRvd25fb3B0aW9ucyddID0gJ1ZhbGcgKGVuIHZlcmRpIHBlciBsaW5qZSknOwokbGFuZ1sncHJvbXB0X2ZpZWxkX21heGxlbmd0aCddID0gJ01ha3NpbXVtIGZlbHRsZW5nZGUnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0ZlbHRsZW5nZGUnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX3R5cGUnXSA9ICdGZWx0dHlwZSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbmFtZSddID0gJ0ZlbHRuYXZuJzsKJGxhbmdbJ3RpdGxlX2FkZF9maWVsZCddID0gJ0xlZ2cgdGlsIGVsbGVyIHJlZGlnZXIgZW4gZmVsdGRlZmluaXNqb24nOwokbGFuZ1snZmllbGRfZGVmaW5pdGlvbnMnXSA9ICdGZWx0ZGVmaW5pc2pvbmVyJzsKJGxhbmdbJ3Byb21wdF9hZGRfZmllbGQnXSA9ICdMZWdnIHRpbCBlbiBmZWx0ZGVmaW5pc2pvbic7CiRsYW5nWydwYXJhbV9hY3Rpb24nXSA9ICdTcGVzaWZpc2VyZXIgb3BwZiZvc2xhc2g7cnNlbGVuIHRpbCBtb2R1bHRhZ2dlbi4gTXVsaWdlIHZlcmRpZXIgZXI6IGRlZmF1bHQgLSAoc2FtbWVuZHJhZyA9IHN0YW5kYXJkIG9wcGYmb3NsYXNoO3JzZWwpLCBkZXRhaWwgLSBmb3IgJmFyaW5nOyB2aXNlIGRldGFsanZpc25pbmcgZm9yIGVuIGVua2VsdCBmaWwgYmFzZXJ0IHAmYXJpbmc7IHVwbG9hZF9pZCwgb2cgeW91c2VuZGl0IC0gZm9yICZhcmluZzsgdmlzZSBldCBza2plbWEgZm9yICZhcmluZzsgdGlsbGF0ZSBvcHBsYXN0aW5nIGF2IGVuIGZpbCBvZyBzZW5kaW5nIGF2IGRlbm5lIHRpbCBmbGVyZSBhZHJlc3NlciBpIGVuIHZlbmRpbmcnOwokbGFuZ1sncGFyYW1fc2VuZGZpbGVwYWdlJ10gPSAnU3Blc2lmaXNlciBzaWRlIGlkIGVsbGVyIGFsaWFzIGZvciBzaWRlbiBzb20gc2thbCBiZW55dHRlcyBmb3IgU2VuZCBlbiBmaWwgc2tqZW1hZXQnOwokbGFuZ1snZmlsZV91cGxvYWRlZCddID0gJ0ZpbGVuIGJsZSB2ZWxseWtrZXQgbGFzdGV0IG9wcCc7CiRsYW5nWyd0byddID0gJ1RpbCc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3RlbXBsYXRlJ10gPSAnTGVnZyB0aWwgZWxsZXIgcmVkaWdlciBlbiAmcXVvdDtZb3UgU2VuZCBJdCZxdW90OyBza2plbWFtYWwnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ1lvdVNlbmRJdCBza2plbWFtYWwnOwokbGFuZ1sndGl0bGVfeW91c2VuZGl0Zm9ybV9zeXNkZWZhdWx0J10gPSAnU3lzdGVtc3RhbmRhcmQgJnF1b3Q7eW91IHNlbmQgaXQmcXVvdDsgbWFsJzsKJGxhbmdbJ21zZ19maWxlX3NlbnQnXSA9ICdFbiBtZWxkaW5nIHNvbSBpbm5laG9sZGVyIGluZm9ybWFzam9uIG9tIGZpbGVuIG9nIGh2b3JkYW4gZiZhcmluZzsgdGFrIGkgZGVuIGhhciBibGl0dCBzZW5kdCB0aWwgZGUgdmFsZ3RlIGFkcmVzc2VuZS4nOwokbGFuZ1snZXJyb3Jfbm9hZGRyZXNzZXMnXSA9ICdEdSBtJmFyaW5nOyBvcHBnaSBtaW5zdCBlbiBtJmFyaW5nO2xhZHJlc3NlJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ0R1IG0mYXJpbmc7IG9wcGdpIGV0IGVtbmUnOwokbGFuZ1snc3ViamVjdCddID0gJ0VtbmUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnU2lkZSBmb3IgJiMwMzk7U2VuZCBlbiBmaWwmIzAzOTsgc2tqZW1hJzsKJGxhbmdbJ2ZpbGVfaW5mbyddID0gJ0ZpbGluZm8nOwokbGFuZ1snc2VuZCddID0gJ1NlbmQgJzsKJGxhbmdbJ25vdGVzJ10gPSAnTm90YXRlcic7CiRsYW5nWydhZGRyZXNzZWVzJ10gPSAnU2VuZCBpbmZvcm1hc2pvbiBvbSBkZW5uZSBmaWxlbiB0aWwnOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnJnF1b3Q7U2VuZCBlbiBmaWwmcXVvdDsgZS1wb3N0bWFsJzsKJGxhbmdbJ3RpdGxlX3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJ0xlZ2cgdGlsIGVsbGVyIHJlZGlnZXIgZW4gJnF1b3Q7U2VuZCBlbiBmaWwmcXVvdDsgc2tqZW1hbWFsJzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJyZxdW90O1NlbmQgZW4gZmlsJnF1b3Q7IHNramVtYW1hbGVyJzsKJGxhbmdbJ3Byb21wdF9ub3RpZnlfZW1haWxfdGVtcGxhdGUnXSA9ICdGaWwgbGFzdGV0IG9wcCB2YXJzbGluZyBlLXBvc3RtYWwnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW1zdGFuZGFyZCAmcXVvdDtTZW5kIGVuIGZpbCZxdW90OyBza2plbWFtYWwnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVsZXRhYmxlJ10gPSAnRmlsZXIgaSBkZW5uZSBrYXRlZ29yaWVuIGYmYXJpbmc7ciBzbGV0dGVzJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ1RpbGxhdCBzbGV0dGluZyBhdiBmaWxlciBmcmEgZm9yc2lkZW4nOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdTdGFuZGFyZCBtYWxlcic7CiRsYW5nWydmaXJzdHBhZ2UnXSA9ICdGJm9zbGFzaDtyc3RlIHNpZGUnOwokbGFuZ1sncHJldnBhZ2UnXSA9ICdGb3JyaWdlIHNpZGUnOwokbGFuZ1snbmV4dHBhZ2UnXSA9ICdOZXN0ZSBzaWRlJzsKJGxhbmdbJ2xhc3RwYWdlJ10gPSAnU2lzdGUgc2lkZSc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICc8PCAnOwokbGFuZ1sncHJldnBhZ2VfYXJyb3cnXSA9ICc8ICc7CiRsYW5nWyduZXh0cGFnZV9hcnJvdyddID0gJyA+JzsKJGxhbmdbJ2xhc3RwYWdlX2Fycm93J10gPSAnID4+JzsKJGxhbmdbJ3BhZ2UnXSA9ICdTaWRlJzsKJGxhbmdbJ29mJ10gPSAnYXYnOwokbGFuZ1sncHJvbXB0X2dyb3VwbGlzdCddID0gJ0F1dG9yaXNlcnRlIEZFVSBHcnVwcGVyJzsKJGxhbmdbJ2luZm9fZ3JvdXBsaXN0J10gPSAnVmVsZyBkZSBGRVUgZ3J1cHBlbmUgc29tIGdpcyB0aWxnYW5nIHRpbCBmaWxlciBpIGRlbm5lIGthdGVnb3JpZW4uIFZlbGcgYm9ydCBhbGxlIHZhbGcgZm9yICZhcmluZzsgZ2kgYWxsZSB0aWxnYW5nJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdTa2FubiBldHRlciBueWUgZmlsZXIgaSBkZW5uZSBrYXRlZ29yaSc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscyddID0gJ09wcHJldHQgbWFuZ2xlbmRlIG1pbmlhdHlyYmlsZGUgZm9yIGZpbGVyIGkgZGVubmUga2F0YWdvcmllbi4nOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdPcHByZXR0IG1pbmlhdHlyYmlsZGVyJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWwnXSA9ICcoaWdqZW4pT3BwcmV0dCBtaW5pYXR5cmJpbGRlIGZvciBkZW5uZSBmaWxlbic7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlsJ10gPSAnT3BwcmV0dCBtaW5pYXR5cmJpbGRlJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ0t1bm5lIGlra2UgJmFyaW5nO3BuZSBrYXRhbG9nZW4gKHJldHRpZ2hldHNwcm9ibGVtPyknOwokbGFuZ1sndGl0bGVfZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnU3Qmb3NsYXNoO3JyZWxzZSBwJmFyaW5nOyBodmVyIG9wcGxhc3RpbmdzLWJvbGsnOwokbGFuZ1snaW5mb19kb3dubG9hZF9jaHVua3NpemUnXSA9ICcmQXJpbmc7IGp1c3RlcmUgZGVubmUgcGFyYW1ldGVyIHZpbCB2aXJrZSBpbm4gcCZhcmluZzsgbmVkbGFzdGluZ3NoYXN0aWdoZXRlbiBvZyBrYW4gaGplbHBlIGkgbGF2LW1pbm5lIG9tZ2l2ZWxzZXIuJzsKJGxhbmdbJ3dhcm5pbmdfc2FmZV9tb2RlJ10gPSAnUEhQJiMwMzk7cyBzYWZlIG1vZGUgZXIgc2wmYXJpbmc7dHQgcCZhcmluZzsuIERldHRlIGthbiBtZWRmJm9zbGFzaDtyZSBwcm9ibGVtZXIgbWVkIG9wcGxhc3RpbmcgYXYgZmlsZXIgKHRpbGxhdGVsc2VyKSwgb2cga2FuIG9ncyZhcmluZzsgaW5udmlya2UgcCZhcmluZzsgZGVubmUgbW9kdWxlbnMgbXVsaWdoZXQgdGlsICZhcmluZzsgc2VuZGUgZmlsZXIgZGEgZGVuIGlra2UgaGFyIG11bGlnaGV0IHRpbCAmYXJpbmc7IG92ZXJza3JpdmUgdmlzc2UgaW5pIGlubnN0aWxsaW5nZXIuIER1IHImYXJpbmc7ZGVzIHRpbCAmYXJpbmc7IGtvbnRha3RlIGRpbiB0aWxieWRlciBmb3IgJmFyaW5nOyBzZSBvbSBzYWZlIG1vZGUga2FuIHNsJmFyaW5nO3MgYXYuJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdOeXR0aWcgZm9yIHZpc25pbmcgYXYgZGV0YWxqcmFwcG9ydCB2ZWQgJmFyaW5nOyBiZW55dHRlIGVuIGFubmVuIHNpZGVtYWwuIERlbm5lIHBhcmFtZXRlcmVuIHRhciBzaWRlIGlkIGVsbGVyIHNpZGUgYWxpYXMgZm9yIGVuIHNpZGUgc29tIHNrYWwgYmVueXR0ZXMgZm9yICZhcmluZzsgdmlzZSBkZXRhbGpyYXBwb3J0ZW4nOwokbGFuZ1sncGFyYW1fcHJlZml4J10gPSAnRW4gYm9vbGVhbiBzb20gaW5kaWtlcmVyIG9tIGZpbG5hdm4gc2thbCBoYSBmaWxmb3JzdGF2ZWxzZSAocHJlZml4KSc7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnRW4gYm9vbGVhbnNrIHBhcmFtZXRlciBzb20gaW5kaWtlcmVyIGF0IGZpbC1mb3JzdGF2ZWxzZW4gc2thbCBvcHBnaXMgYXYgbiZhcmluZzt2JmFlbGlnO3JlbmRlIG9wcGhhdnNtYW5uLCBvbSBpa2tlIHNwZXNpZmlzZXJ0LCBzJmFyaW5nOyBlciBmaWwtZm9yc3RhdmVsc2VuIG4mYXJpbmc7diZhZWxpZztyZW5kZSB0aWQgKGkgZGVjaGV4IGZvcm1hdCknOwokbGFuZ1sncGFyYW1fbm9jYXB0Y2hhJ10gPSAnU2wmYXJpbmc7IGF2IENhcHRjaGEgc3Qmb3NsYXNoO3R0ZSAoZXIgcCZhcmluZzsgc29tIHN0YW5kYXJkKSBpIG9wcGxhc3Rpbmcgc2tqZW1hZXQnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ1JlZGlnZXIgT3BwbGFzdGluZ3NramVtYW1hbCc7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnU2tyaXYgaW5uIHRla3N0ZW4gc29tIHZpc2VzIGkgZGV0dGUgYmlsZGV0JzsKJGxhbmdbJ2Vycm9yX2NhcHRjaGFtaXNtYXRjaCddID0gJ1Rla3N0ZW4gZnJhIGJpbGRldCBibGUgaWtrZSBza3JldmV0IHJpa3RpZyc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdPcHByZXR0IG1pbmlhdHlyYmlsZGVyIGZvciBmaWxlciBzb20gaGFyIGRpc3NlIGZpbGVuZGVsc2VuZSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnXSA9ICdNYWtzaW11bSBzdCZvc2xhc2g7cnJlbHNlIChwaXhlbHMpIHAmYXJpbmc7IGdlbmVyZXJ0IG1pbmlhdHlyYmlsZGUnOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnTGFzdCBvcHAgZXQgSWtvbic7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdEZW5uZSB0ZWtzdGVuIGJsaXIgYnJ1a3QgbiZhcmluZztyIGVuIG55IG1hbCBhdiBkZW5uZSB0eXBlIG9wcHJldHRlcyc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfc3lzZGVmYXVsdCddID0gJ1N5c3RlbSBzdGFuZGFyZCBEZXRhbGpyYXBwb3J0bWFsJzsKJGxhbmdbJ3RpdGxlX3N1bW1hcnlycHRfc3lzZGVmYXVsdCddID0gJ1N5c3RlbSBzdGFuZGFyZCBTYW1tZW5kcmFnc3JhcHBvcnRtYWwnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV9zeXNkZWZhdWx0J10gPSAnU3lzdGVtIHN0YW5kYXJkIG9wcGxhc3Rpbmdza2plbWFtYWwnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdNYWwnOwokbGFuZ1sncmVzZXR0b2RlZmF1bHQnXSA9ICdTZXR0IHRpbCBTdGFuZGFyZCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3RlbXBsYXRlJ10gPSAnU2FtbWVuZHJhZyBSYXBwb3J0IG1hbCc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfdGVtcGxhdGUnXSA9ICdEZXRhbGogUmFwcG9ydCBtYWwnOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdOYXZuJzsKJGxhbmdbJ2xlZ2VuZF91cGxvYWRmb3JtJ10gPSAnTGFzdCBvcHAgZW4gZmlsJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ0VuIG4mb3NsYXNoO2R2ZW5kaWcgcGFyYW1ldGVyIG1hbmdsZXInOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdFdCBuYXZuIHAmYXJpbmc7IGZpbHR5cGVuIG0mYXJpbmc7IHNwZXNpZmlzZXJlcyc7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ01pbnN0IGVuIGZpbGVuZGVsc2UgbSZhcmluZzsgc3Blc2lmaXNlcmVzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdpY29uJ10gPSAnRXQgaWtvbiBtJmFyaW5nOyBzcGVzaWZpc2VyZXMnOwokbGFuZ1snZXJyb3Jfbm9zdWNocm93J10gPSAnRGVuIHNwZXNpZmlzZXJ0ZSByYWRlbiBibGUgaWtrZSBmdW5uZXQnOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnVWtqZW50JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdCZXNrcml2ZWxzZSBmb3IgdWtqZW50ZSBmaWx0eXBlcic7CiRsYW5nWydpbWFnZSddID0gJ0JpbGRlJzsKJGxhbmdbJ2ljb24nXSA9ICdJa29uJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdGaWxlbmRlbHNlcic7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ0xlZ2cgdGlsIG55IGZpbHR5cGUnOwokbGFuZ1snZmlsZV90eXBlcyddID0gJ0ZpbHR5cGVyJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnlpZCddID0gJ0luZ2VuIGthdGVnb3JpIGlkIGJsZSBvcHBnaXR0JzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnknXSA9ICdJbmdlbiBrYXRlZ29yaSBpZCBibGUgb3BwZ2l0dCc7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZW5hbWVleGlzdHMnXSA9ICdFbiBtYWwgbWVkIGRldCBuYXZuZXQgZWtzaXN0ZXJlciBhbGxlcmVkZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnTWFsbmF2bic7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICdNYWwnOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnTGFnIGVuIG55IG1hbCc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5FbiBoZW5kZWxzZSBnZW5lcmVydCBuJmFyaW5nO3IgZW4gYnJ1a2VyIGF2c2x1dHRlciBuZWRsYXN0aW5nIGF2IGVuIGZpbDwvcD4NCjxoND5QYXJhbWV0ZXJlPC9oND4NCjx1bD4NCjxsaT48ZW0+aWQ8L2VtPiAtIExhc3Qtb3BwIElEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsbmF2bjwvbGk+DQo8bGk+PGVtPmlwPC9lbT4gLSBJUCBBZHJlc3NlbiB0aWwgZGVuIHNvbSBsYXN0ZXQgbmVkPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkRlbGV0ZUNhdGVnb3J5J10gPSAnPHA+RW4gaGVuZGVsc2UgZ2VuZXJlcnQgbiZhcmluZztyIGVuIGthdGVnb3JpIGVyIHNsZXR0ZXQ8L3A+DQo8aDQ+UGFyYW1ldGVyZTwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIEthdGVnb3JpIG5hdm48L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBLYXRlZ29yaSBzdGk8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uQ3JlYXRlQ2F0ZWdvcnknXSA9ICc8cD5FbiBoZW5kZWxzZSBnZW5lcmVydCBuJmFyaW5nO3IgZW4ga2F0ZWdvcmkgZXIgb3BwcmV0dGV0PC9wPg0KPGg0PlBhcmFtZXRlcmU8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOYXZuZXQgcCZhcmluZzsga2F0ZWdvcmllbjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBLYXRlZ29yaSBiZXNrcml2ZWxzZW48L2xpPg0KPGxpPjxlbT5wYXRoPC9lbT4gLSBLYXRlZ29yaSBzdGllbjwvbGk+DQo8bGk+PGVtPmxpc3RhYmxlPC9lbT4gLSBFdCBmbGFnZyBzb20gaW5kaWtlcmVyIG9tIGthdGVnb3JpZW4gZXIgdXRsaXN0YmFyPC9saT4NCjxsaT48ZW0+ZGVsZXRhYmxlPC9lbT4gLSBFdCBmbGFnZyBzb20gaW5kaWtlcmVyIG9tIGZpbGVyIGkga2F0ZWdvcmllbiBlciBsb3YgJmFyaW5nOyBzbGV0dGU8L2xpPg0KDQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25SZW1vdmUnXSA9ICc8cD5FbiBoZW5kZWxzZSBnZW5lcmVydCBuJmFyaW5nO3IgZW4gZmlsIGVyIGZqZXJuZXQgdmlhIEFkbWluIGVsbGVyIEZyb250ZW5kIGdyZW5zZXNuaXR0ZW5lPC9wPg0KPGg0PlBhcmFtZXRlcmU8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOYXZuZXQgcCZhcmluZzsgZGVuIGZqZXJuZWRlIGZpbGE8L2xpPg0KPGxpPjxlbT5pZDwvZW0+IC0gSUQmIzAzOTtlbiBwJmFyaW5nOyBkZW4gZmplcm5lZGUgZmlsYTwvbGk+DQo8bGk+PGVtPmNhdGVnb3JpX2lkPC9lbT4gLSBJRCYjMDM5O2VuIHAmYXJpbmc7IGthdGVnb3JpZW48L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uVXBsb2FkJ10gPSAnPHA+RW4gaGVuZGVsc2UgZ2VuZXJlcnQgbiZhcmluZztyIGVuIG55IGZpbCBlciBsYXN0ZXQgb3BwIHZpYSBhZG1pbiBlbGxlciBmcm9udGVuZCBncmVuc2Vzbml0dGV0PC9wPg0KPGg0PlBhcmFtZXRlcmU8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gS2F0ZWdvcmkgbmF2bmV0PC9saT4NCjxsaT48ZW0+Y2F0ZWdvcnlwYXRoPC9lbT4gLSBLYXRlZ29yaSBzdGllbjwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIE5hdm5ldCBwJmFyaW5nOyBkZW4gb3BwbGFzdGVkZSBmaWxhPC9saT4NCjxsaT48ZW0+c2l6ZTwvZW0+IC0gU3Qmb3NsYXNoO3JyZWxzZW4gcCZhcmluZzsgZGVuIG9wcGxhc3RlZGUgZmlsYTwvbGk+DQo8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIERlbiBrb3J0ZSBiZXNrcml2ZWxzZW4gZm9yIGRlbiBvcHBsYXN0ZWRlIGZpbGEgKGthbiB2JmFlbGlnO3JlIGJsYW5rKTwvZW0+PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIERlbiBmdWxsZSBiZXNrcml2ZWxzZW4gZm9yIGRlbiBvcHBsYXN0ZWRlIGZpbGEgKGthbiB2JmFlbGlnO3JlIGJsYW5rKTwvZW0+PC9saT4NCjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBPcHBoYXZzbWFubmVuIGZvciBkZW4gb3BwbGFzdGVkZSBmaWxhIChpZiBhdmFpbGFibGUpPC9lbT48L2xpPg0KPGxpPjxlbT5pcF9hZGRyZXNzPC9lbT4gLSBJbnRlcm5ldHQgYWRyZXNzZW4gZm9yIGtsaWVudGVuIHNvbSBsYXN0ZXQgb3BwIGZpbGE8L2xpPg0KPC91bD4nOwokbGFuZ1snaW5mb19ldmVudF9vbmRlbGV0ZWNhdGVnb3J5J10gPSAnSGVuZGVsc2UgZ2VuZXJlcnQgbiZhcmluZztyIGVuIGthdGVnb3JpIGVyIHNsZXR0ZXQnOwokbGFuZ1snaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5J10gPSAnSGVuZGVsc2UgZ2VuZXJlcnQgbiZhcmluZztyIGVuIGthdGVnb3JpIGVyIGxhZ2V0JzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0hlbmRlbHNlIGdlbmVyZXJ0IG4mYXJpbmc7ciBlbiBmaWwgZXIgbGFzdGV0IG5lZCc7CiRsYW5nWydpbmZvX2V2ZW50X29udXBsb2FkJ10gPSAnSGVuZGVsc2UgZ2VuZXJlcnQgbiZhcmluZztyIGVuIG55IGZpbCBlciBsYXN0ZXQgb3BwJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdIZW5kZWxzZSBnZW5lcmVydCBuJmFyaW5nO3IgZW4gZmlsIGVyIGZqZXJuZXQnOwokbGFuZ1sndGl0bGVfdXNlcnRhZ19vbnVwbG9hZCddID0gJ0JydWtlciBkZWZpbmVydCB0YWdnICZhcmluZzsga2omb3NsYXNoO3JlIGV0dGVyIG9wcGxhc3RpbmcgZXIgZmVyZGlnJzsKJGxhbmdbJ25vbmUnXSA9ICdJbmdlbic7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICdUcmVmZiBmdW5uZXQnOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdGVyICc7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnVmlkZXJlc2VuZCB0aWwgc2lkZSBpZC9hbGlhcyB2ZWQgYnJ1a2VycyBvcHBsYXN0aW5nJzsKJGxhbmdbJ2RldGFpbHMnXSA9ICdEZXRhbGplcic7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnRXIgZHUgc2lra2VyIHAmYXJpbmc7IGR1IHZpbCBlbmRyZSBpbm5zdGlsbGluZ2VuZSc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnXSA9ICdJbmdlbiBmaWxlciBibGUgbGFzdGV0IG9wcC4nOwokbGFuZ1sncHJvbXB0X3JlcGxhY2UnXSA9ICdUaWxsYXQgb3ZlcnNrcml2aW5nJzsKJGxhbmdbJ2luZm9fcmVwbGFjZSddID0gJ0Vyc3RhdHQgZW5odmVyIGZpbCBtZWQgc2FtbWUgbmF2biAoZW5kcmVyIGlra2UgaWQmIzAzOTtlbiknOwokbGFuZ1sncGFyYW1fbm9faW5pdGlhbCddID0gJ0lra2UgdmlzIG5vZW4gaW5ubGVkZW5kZSByZXN1bHRhdGVyIG4mYXJpbmc7ciBmaWx0ZXJldCBlciBwJmFyaW5nOyc7CiRsYW5nWydwYXJhbV9rZXknXSA9ICdUaWxmJm9zbGFzaDt5IGVuIGVrc3RyYSBuJm9zbGFzaDtra2VsIHRpbCBtb2R1bGVuIGZvciBlbmRhIGJlZHJlIG9yZ2FuaXNlcmluZyBhdiBvcHBsYXN0aW5nZXIuIERlbm5lIG4mb3NsYXNoO2trZWwga2FuIHYmYWVsaWc7cmUgZW4ga29kZXQgc3RyZW5nIHNvbTogJiMwMzk7ZmV1c2Vyczp1aWQmIzAzOTssIG9zdi4gRGVubmUgcGFyYW1ldGVyIGVyIHZhbmxpZ3ZpcyBrdW4gbiZvc2xhc2g7ZHZlbmRpZyBuJmFyaW5nO3IgZHUgaW5uZXNsdXR0ZXIgdXBsb2FkcyBtb2R1bGVuIGkgZW4gYW5uZW4gbW9kdWwnOwokbGFuZ1sncGFyYW1fbm9hdXRob3InXSA9ICdHamVtIG9wcGhhdnNtYW5uKGF1dGhvcikgZmVsdGV0IGZyYSBvcHBsYXN0aW5nIHNramVtYWV0LiBEZW5uZSBwYXJhbWV0ZXIgZXIga3VuIHZpcmtzb20gb20gbW9kZT0mIzAzOTt1cGxvYWQmIzAzOTsuIE9tIEZyb250ZW5kVXNlcnMgbW9kdWxlbiBlciB0aWxzdGVkZSwgb2cgZW4gYnJ1a2VyIGVyIGlubmxvZ2dldCwgdmlsIGV0IHNranVsdCBmZWx0IGlubmVob2xkZSBicnVrZXJuYXZuZXQgZm9yIG4mYXJpbmc7diZhZWxpZztyZW5kZSBpbm5sb2dnZWRlIGJydWtlcic7CiRsYW5nWydwYXJhbV91cGxvYWRfaWQnXSA9ICd1cGxvYWRfaWQ9JnF1b3Q7aWQmcXVvdDsgLSBzcGVzaWZpc2VyZXIgZW4gZW5rZWx0IGZpbCBmb3IgdXJsJiMwMzk7ZW4vbGlua2VuIGVsbGVyIGVua2VsLW1vZHVzIChvdmVyZm9yKSc7CiRsYW5nWydwYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ0JydWsgZW4gbWFsIG1lZCBkZXR0ZSBuYXZuZXQgZm9yIGRlbiBkZXRhbGplcnRlIHJhcHBvcnRlbi4nOwokbGFuZ1sncGFyYW1fdGVtcGxhdGUnXSA9ICdCcnVrIGVuIG1hbCBtZWQgZGV0dGUgbmF2biBmb3IgZGVubmUgcmFwcG9ydCBlbGxlciBza2plbWEuIE1vZHVzZW4gZXIgYnJ1a3QgZm9yICZhcmluZzsgYXZnaiZvc2xhc2g7cmUgaHZhIHNsYWdzIG1hbCBzb20gZXIga3JldmQsIG9nIHMmYXJpbmc7IHV0ZiZvc2xhc2g7cmVzIGVuIGtvYmxpbmcvc2pla2sgYXYgbmF2bmV0IG1vdCBkZW5uZSB0eXBlIG1hbC4nOwokbGFuZ1sncGFyYW1fZmlsdGVyJ10gPSAnVmlzIGZpbHRlcnNramVtYWV0JzsKJGxhbmdbJ3BhcmFtX25vX2ludGl0aWFsJ10gPSAnS3VuIGJydWtlbGlnIG4mYXJpbmc7ciBmaWx0ZXIgcGFyYW1ldGVyIGVyIGdpdHQsIGVsbGVyIHAmYXJpbmc7IHNvbSBzdGFuZGFyZCwgZGVubmUgcGFyYW1ldGVyIGluZGlrZXJlciBvbSBpbm5sZWRlbmRlIHJlc3VsdGF0ZXIgc2thbCB2aXNlcyc7CiRsYW5nWydwYXJhbV9maWxldHlwZXMnXSA9ICdWaXMga3VuIGZpbGVyIHNvbSBzYW1zdmFyZXIgbWVkIGRlbm5lIGtvbW1hc2VwYXJlcnRlIGxpc3Rlbic7CiRsYW5nWydwYXJhbV9zb3J0b3JkZXInXSA9ICcgIDxwPlNvcnRlcmluZ3NyZWtrZWYmb3NsYXNoO2xnZXINCiAgPHVsPg0KICA8bGk+PGVtPmRhdGVfYXNjPC9lbT4gLSBTb3J0ZXIgZGF0byBzdGlnZW5kZTwvbGk+DQogIDxsaT48ZW0+ZGF0ZV9kZXNjPC9lbT4gLSBTb3J0ZXIgZGF0byBzeW5rZW5kZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9hc2M8L2VtPiAtIFNvcnRlciBuYXZuIHN0aWdlbmRlPC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtIFNvcnRlciBuYXZuIHN5bmtlbmRlPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gU29ydGVyIHN0Jm9zbGFzaDtycmVsc2Ugc3RpZ2VuZGU8L2xpPg0KICA8bGk+PGVtPnNpemVfZGVzYzwvZW0+IC0gU29ydGVyIHN0Jm9zbGFzaDtycmVsc2Ugc3lua2VuZGU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9hc2M8L2VtPiAtIFNvcnRlciBvcHBoYXZzbWFubi9hdXRob3Igc3RpZ2VuZGU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9kZXNjPC9lbT4gLSBTb3J0ZXIgb3BwaGF2c21hbm4vYXV0aG9yIHN5bmtlbmRlPC9saT4NCiAgPGxpPjxlbT5pcF9hc2M8L2VtPiAtIFNvcnRlciBpcC1hZHJlc3NlIHN0aWdlbmRlPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBTb3J0ZXIgaXAtYWRyZXNzZSBzeW5rZW5kZTwvbGk+DQogIDxsaT48ZW0+ZGVzY19hc2M8L2VtPiAtIFNvcnRlciBiZXNrcml2ZWxzZSBzdGlnZW5kZTwvbGk+DQogIDxsaT48ZW0+ZGVzY19kZXNjPC9lbT4gLSBTb3J0ZXIgYmVza3JpdmVsc2Ugc3lua2VuZGU8L2xpPg0KICA8bGk+PGVtPmRvd25sb2Fkc19hc2M8L2VtPiAtIFNvcnRlciBhbnRhbGwgbmVkbGFzdGluZ2VyIHN0aWduZWRlIHJla2tlZiZvc2xhc2g7bGdlLjwvbGk+DQogIDxsaT48ZW0+ZG93bmxvYWRzX2Rlc2M8L2VtPiAtIFNvcnRlciBhbnRhbGwgbmVkbGFzdGluZ2VyIGkgc3lua2VuZGUgcmVra2VmJm9zbGFzaDtsZ2UuPC9saT4NCiAgPGxpPjxlbT5yYW5kb208L2VtPiAtIFRpbGZlbGRpZyBzb3J0ZXJpbmdzcmVra2VmJm9zbGFzaDtsZ2U8L2xpPg0KICA8L3VsPg0KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddID0gJ01hbCAmYXJpbmc7IGJlbnl0dGUgZm9yIGthdGVnb3JpbGlzdGluZyBldHRlciBtYW4gaGFyIGtsaWtrZXQgc2VnIGlubiBmcmEgZW4gS2F0ZWdvcmkgc2FtbWVuZHJhZ3NpZGUnOwokbGFuZ1sncGFyYW1fbGlzdGluZ3NvcnRvcmRlciddID0gJ1NvcnRlcmluZ3NyZWtrZWYmb3NsYXNoO2xnZSAoc29tIHBhcmFtX3NvcnRvcmRlcikgJmFyaW5nOyBiZW55dHRlIGZvciBrYXRlZ29yaWxpc3RlciBldHRlciBlbiBoYXIga2xpa2tldCBzZWcgaW5uIGZyYSBlbiBLYXRlZ29yaSBzYW1tZW5kcmFnc2xpc3RlJzsKJGxhbmdbJ3BhcmFtX2ZpbGVleHRlbnNpb25zJ10gPSAnIA0KZmlsZV9leHRlbnNpb25zPSZxdW90O2V4dDEsZXh0MixleHQzJnF1b3Q7DQo8cD5neWxkaWcga3VuIG9tIG1vZGU9dXBsb2FkLCBkZW5uZSBwYXJhbWV0ZXJlbiBiZWdyZW5zZXIgZmlsdHlwZW5lIHNvbSBrYW4gbGFzdGVzIG9wcC4gIE92ZXJzdHlyZXIgZW5odmVyIHZlcmRpIGkgbW9kdWwgaW5uc3RpbGxpbmdlbmUuPC9wPic7CiRsYW5nWydwYXJhbV9jb3VudCddID0gJ2NvdW50PSZxdW90O04mcXVvdDsgPHA+RW4gcGFyYW1ldGVyIGZvciAmYXJpbmc7IGJlZ3JlbnNlIHRpbCBYIGFudGFsbCBwb3N0ZXIgcHIuc2lkZS48L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9JnF1b3Q7bmFtZSZxdW90Ow0KPHA+PGI+Tm90YXQ6PC9iPiBLYXRlZ29yaSBrYW4gdiZhZWxpZztyZSAmcXVvdDthbGwmcXVvdDssIHNvbSB2aWwgbGlzdGUgdXQgYWxsZSBvcHBsYXN0aW5nZXIgZnJhIGFsbGUgPGVtPnV0bGlzdGJhcmU8L2VtPiBrYXRlZ29yaWVyPC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIFZpcyBlbiBkZXRhbGplcnQgbGlzdGUgb3ZlciBhbGxlIGZpbGVyIGkga2F0ZWdvcmllbjwvbGk+DQogIDxsaT48ZW0+c2luZ2xlPC9lbT4gLSBWaXNlciBlbiBkZXRhbGplcnQgcmFwcG9ydCBvbSBlbiBlbmtlbHQgb3BwbGFzdGluZzwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBWaXNlciBldCBza2plbWEgc29tIHRpbGxhdGVyIGVuIGZyb250ZW5kIGJydWtlciAmYXJpbmc7IGxhc3RlIG9wcCBlbiBmaWw8L2xpPg0KICA8bGk+PGVtPnVybCA8aT5lbGxlcjwvaT4gbGluazwvZW0+IC0gVmlzZXIgZW4gbGluayB0aWwgZW4gZmlsPC9saT4NCiAgPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBWaXNlciBlbiBzYW1tZW5kcmFnc2xpc3RlIG92ZXIgYWxsZSBmaWxlciBpIGthdGVnb3JpZW48L2xpPg0KICA8L3VsPic7CiRsYW5nWydwYXJhbV9zZWxlY3Rmb3JtJ10gPSAnTiZhcmluZztyIGVuIGJlbnl0dGVyICYjMDM5O3NlbGVjdCYjMDM5Oy1tb2RlIGVyIGRlbm5lIHBhcmFtZXRlcmVuIHNlbHZlIGZvcm1pZCBhdiBmb3JlbGRyZSBza2plbWFldC4gQmVueXR0ZXMgZm9yICZhcmluZzsgaCZhcmluZztuZHRlcmUgcGFyYW1ldGVyIGgmYXJpbmc7bmR0ZXJpbmcnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ24mYXJpbmc7ciBlbiBiZW55dHRlciAmIzAzOTtzZWxlY3QmIzAzOTstbW9kZSB2aWwgZGVubmUgcGFyYW1ldGVyIHNwZXNpZmlzZXJlIG5hdm5ldCBwJmFyaW5nOyBmZWx0ZXQnOwokbGFuZ1sncGFyYW1fc2VsZWN0dmFsdWUnXSA9ICdOJmFyaW5nO3IgZW4gYmVueXR0ZXIgJiMwMzk7c2VsZWN0JiMwMzk7LW1vZGUgdmlsIGRlbm5lIHBhcmFtZXRlcmVuIHNwZXNpZmlzZXJlIHN0YW5kYXJkIGZlbHR2ZXJkaSc7CiRsYW5nWydwYXJhbV9zZWxlY3Rub25lJ10gPSAnTiZhcmluZztyIGVuIGJlbnl0dGVyICYjMDM5O3NlbGVjdCYjMDM5Oy1tb2RlIHZpbCBkZW5uZSBwYXJhbWV0ZXJlbiBzcGVzaWZpc2VyZSBvbSAmIzAzOTtub25lJiMwMzk7IGVyIGV0IGd5bGRpZyB2YWxnLic7CiRsYW5nWydyZXR1cm50b21vZHVsZSddID0gJ1RpbGJha2UgdGlsIE1vZHVsIHBhbmVsZXQnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yaWVzJ10gPSAnRGV0IGVyIGluZ2VuIGRlZmluZXJ0ZSBrYXRlZ29yaWVyJzsKJGxhbmdbJ3RpdGxlX2VuZm9yY2VleHRlbnNpb25zJ10gPSAnS3JldmVyIGZpbC1lbmRlbHNlIHAmYXJpbmc7IGFsbGUgb3BwbGFzdGVkZSBmaWxlcic7CiRsYW5nWydyZXN0b3JlZGVmYXVsdHNjb25maXJtJ10gPSAnRGVubmUgaGFuZGxpbmcgdmlsIHRpbGJha2VzdGlsbGUgbWFsZW4gdGlsIHN5c3RlbXN0YW5kYXJkLiBFbmh2ZXIgZW5kcmluZyBkdSBoYXIgZ2pvcnQgdmlsIGJsaSBib3J0ZS4gRXIgZHUgc2lra2VyIHAmYXJpbmc7IGF0IGR1IHZpbCBmb3J0c2V0dGU/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ01pbmlhdHlyYmlsZGUgJzsKJGxhbmdbJ25ld3RodW1ibmFpbCddID0gJ0xhc3Qgb3BwIG55dHQgbWluaWF0eXJiaWxkZSc7CiRsYW5nWydpbmZvX3N1bW1hcnknXSA9ICdFbiBrb3J0IGJlc2tyaXZlbHNlIChvbSBibGFuaywgYmxpciBmaWxuYXZuZXQgYnJ1a3QgdXRlbiBmaWwtZW5kZWxzZSknOwokbGFuZ1snaW5mb19jYXRlZ29yeW5hbWUnXSA9ICdFdCBrb3J0IG5hdm4gcCZhcmluZzsgZGluIGthdGVnb3JpIChrdW4gZW5nZWxza2UgYm9rc3RhdmVyKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ0VuIGJlc2tyaXZlbHNlIGF2IGRpbiBrYXRlZ29yaSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ0thdGFsb2duYXZuZXQgaW5uZSBpIG9wcGxhc3Rpbmdza2F0YWxvZ2VuIHNvbSB2aWwgYmxpIGJydWt0IGZvciAmYXJpbmc7IGxhZ3JlIGZpbGVyIGkgZGVubmUga2F0ZWdvcmkuIE9tIGthdGFsb2dlbiBtZWQgZGV0dGUgbmF2bmV0IGlra2UgZWtzaXN0ZXJlciwgdmlsIGRlbiBibGkgb3BwcmV0dGV0JzsKJGxhbmdbJ2luZm9fZGVzdG5hbWUnXSA9ICdCcnVrICYjMDM5O0xhc3Qgb3BwIHNvbSYjMDM5OyBmZWx0ZXQgZm9yICZhcmluZzsgZW5kcmUgbmF2bmV0IHAmYXJpbmc7IGZpbGEgdmVkIG9wcGxhc3RpbmcuICBMYSB2JmFlbGlnO3JlIGJsYW5rdCBmb3IgJmFyaW5nOyBiZWhvbGRlIG5hdm5ldCBzb20gZGV0IGVyLic7CiRsYW5nWydlcnJvcl9jYW50Y3JlYXRlZGlyZWN0b3J5J10gPSAnS3VubmUgaWtrZSBvcHByZXR0ZSBrYXRhbG9nJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnQ01TTWFpbGVyIG1vZHVsZW4ga3VubmUgaWtrZSBzdGFydGVzJzsKJGxhbmdbJ3VwbG9hZF9ub3RpZmljYXRpb24nXSA9ICdFbiBueSBmaWwgaGFyIGJsaXR0IGxhc3RldCBvcHAnOwokbGFuZ1sndGl0bGVfZW1haWxfb25fdXBsb2FkJ10gPSAnU2VuZCBvcHBsYXN0aW5ncy1tZWxkaW5nIHRpbDonOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICdFcG9zdCBtYWwnOwokbGFuZ1sndGl0bGVfZHVtbXlfaW5kZXhfaHRtbCddID0gJ09wcHJldHQgZHVtbXkgaW5kZXguaHRtbCBmaWxlciBpIGh2ZXIga2F0YWxvZz88YnIvPjxlbT5JbmdlbiBla3Npc3RlcmVuZGUgaW5kZXguaHRtbCBmaWxlciB2aWwgYmxpIGlnamVuPC9lbT4nOwokbGFuZ1snYWJvdXQnXSA9ICdPbSc7CiRsYW5nWydlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJ10gPSAnQWRnYW5nIG5la3RldC4gVmVubmxpZ3N0IHNqZWtrIGRpbmUgcmV0dGlnaGV0ZXIuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdLdW5uZSBpa2tlIHNrcml2ZSc7CiRsYW5nWydhZGRjYXRlZ29yeSddID0gJ0xlZ2cgdGlsIGthdGVnb3JpJzsKJGxhbmdbJ2FsbCddID0gJ0FsdCc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnRXIgZHUgc2lra2VyPyc7CiRsYW5nWydhdXRob3InXSA9ICdPcHBoYXZzbWFubic7CiRsYW5nWydjYW5jZWwnXSA9ICdBdmJyeXQnOwokbGFuZ1snY2Fubm90bW9kaWZ5cGF0aCddID0gJyhTdGllbiBrYW4gaWtrZSBlbmRyZXMpJzsKJGxhbmdbJ2NhdGVnb3JpZXMnXSA9ICdLYXRlZ29yaWVyJzsKJGxhbmdbJ2NhdGVnb3J5J10gPSAnS2F0ZWdvcmknOwokbGFuZ1snbWVzc2FnZV9jYXRlZ29yeWFkZGVkJ10gPSAnS2F0ZWdvcmkgb3BwcmV0dGV0JzsKJGxhbmdbJ2RhdGUnXSA9ICdEYXRvJzsKJGxhbmdbJ2RhdGV1cGxvYWRlZCddID0gJ0RhdG8gbGFzdGV0IG9wcCc7CiRsYW5nWydkZWZhdWx0J10gPSAnU3RhbmRhcmQnOwokbGFuZ1snZGVsZXRlJ10gPSAnU2xldHQnOwokbGFuZ1snZGVzY3JpcHRpb24nXSA9ICdCZXNrcml2ZWxzZSc7CiRsYW5nWydkZXN0bmFtZSddID0gJ0xhc3Qgb3BwIHNvbSc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhbGogbWFsJzsKJGxhbmdbJ2Rvd25sb2FkZWQnXSA9ICdGaWwgJXMgYmxlIGxhc3RldCBuZWQuJzsKJGxhbmdbJ2Rvd25sb2FkcyddID0gJ05lZGxhc3Rpbmdlcic7CiRsYW5nWydlZGl0J10gPSAnUmVkaWdlcic7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdSZWRpZ2VyIGthdGVnb3JpJzsKJGxhbmdbJ2VkaXR1cGxvYWQnXSA9ICdSZWRpZ2VyIG9wcGxhc3RpbmcnOwokbGFuZ1snZXJyb3InXSA9ICdGZWlsISc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UyJ10gPSAnZW4ga2F0ZWdvcmkgc29tIGJlbnl0dGVyIHN0aWVuICglcykgZWtzaXN0ZXJlciBhbGxlcmVkZSc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UnXSA9ICdFbiBrYXRlZ29yaSBzb20gYnJ1a2VyIGRlbiBzdGllbiBla3Npc3RlcmVyIGFsbGVyZWRlJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5ZXhpc3RzMiddID0gJ0ZlaWw6IEVuIGthdGVnb3JpIG1lZCBuYXZuICVzIGVrc2lzdGVyZXIgYWxsZXJlZGUnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdGZWlsOiBLYXRlZ29yaSBla3Npc3RlcmVyIGFsbGVyZWRlJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90ZW1wdHknXSA9ICdGZWlsISBLYW4gaWtrZSBzbGV0dGUga2F0ZWdvcmkgZGEgZGVuIGlra2UgZXIgdG9tJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdGZWlsOiBLYXRlZ29yaSBpa2tlIGZ1bm5ldCEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0ZlaWw6IERhdGFiYXNlIGZlaWwhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5Y2F0ZWdvcnknXSA9ICdGZWlsOiBUb20ga2F0ZWdvcmkhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0ZlaWw6IEJsYW5rIHN0aSEnOwokbGFuZ1snZXJyb3JfZmlsZWV4aXN0cyddID0gJ0ZlaWwhIEZpbCAlcyBla3Npc3RlcmVyIGFsbGVyZWRlLic7CiRsYW5nWydlcnJvcl9maWxlbm90Zm91bmQnXSA9ICdGZWlsISBGaWwgJXMgYmxlIGlra2UgZnVubmV0Lic7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdGZWlsOiBNYW5nZWxmdWxsZSBwYXJhbWV0cmUgZ2l0dCB0aWwgbW9kdWxlbiE8YnIvPkRlbiBtYW5nbGVuZGUgcGFyYW1ldGVyIGVyOiAlcyc7CiRsYW5nWydlcnJvcl9pbnZhbGlkYXV0aG9yJ10gPSAnRmVpbDogVWd5bGRpZyAoZWxsZXIgYmxhbmspIG9wcGhhdnNtYW5uLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkY2F0ZWdvcnknXSA9ICdGZWlsOiBVZ3lsZGlnIChlbGxlciBibGFuaykga2F0ZWdvcmkuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRkZXNjcmlwdGlvbiddID0gJ0ZlaWw6IFVneWxkaWcgKGVsbGVyIGJsYW5rKSBiZXNrcml2ZWxzZS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGZpbGUnXSA9ICdGZWlsOiBVZ3lsZGlnIChlbGxlciBibGFuaykgZmlsbmF2bi4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnRmVpbDogRmlsZXIgbWVkIGRldHRlIG5hdm5ldCAoc2Fuc3lubGlnIGZpbC1lbmRlbHNlbikgZXIgaWtrZSB0aWxsbGF0dCAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdGZWlsOiBVZ3lsZGlnIG9wcGxhc3RpbmdzSUQnOwokbGFuZ1snZXJyb3Jfbm9maWxlcyddID0gJ0ZlaWw6IEluZ2VuIHBhc3NlbmRlIGZpbGVyISc7CiRsYW5nWydmaWxlcyddID0gJ0ZpbGVyJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnRmlrcyBtZWxsb21yb20nOwokbGFuZ1snZnJpZW5kbHluYW1lJ10gPSAnRnJvbnRFbmQgT3BwbGFzdGluZ2VyJzsKJGxhbmdbJ2lkJ10gPSAnSUQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWwgdmVyc2pvbiAlcyBpbnN0YWxsZXJ0Lic7CiRsYW5nWydpcF9hZGRyZXNzJ10gPSAnSVAtYWRyZXNzZSc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0VuIG1vZHVsIHNvbSB0aWxsYXRlciBicnVrZXJlICZhcmluZzsgbGFzdGUgb3BwIGZpbGVyLCBvZyB0aWxsYXRlciBkZWcgJmFyaW5nOyBoJmFyaW5nO25kdGVyZSBkZW0uJzsKJGxhbmdbJ25hbWUnXSA9ICdOYXZuJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdSZWRpZ2VyIG5hdm5ldCBoZXIgZm9yICZhcmluZzsgZ2omb3NsYXNoO3JlIGVuIG5hdm5lZW5kcmluZyc7CiRsYW5nWydwYXRoJ10gPSAnU3RpJzsKJGxhbmdbJ3BhdGhtZXNzYWdlJ10gPSAnRW5kcmUga2F0ZWdvcmkgaGVyIGZvciAmYXJpbmc7IGZseXR0ZSBmaWxlbiB0aWwgZW4gYW5uZW4ga2F0ZWdvcmknOwokbGFuZ1sncGF0aGludXBsb2FkcyddID0gJyhSZWxhdGl2IHRpbCBvcHBsYXN0aW5ncyBrYXRhbG9nZW4pJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSE8L3A+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ1VwbG9hZHMgbW9kdWxlbiBoYXIgYmxpdHQgZmplcm5ldC4gSW5nZW4gZmlsZXIgaGFyIGJsaXR0IGZqZXJuZXQgZnJhIGRpbiBvcHBsYXN0aW5nc2thdGFsb2csIG9nIGZpbCBpbnRlZ3JpdGV0ZW4gZXIgaW50YWt0JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnSW5uc3RpbGxpbmdlcic7CiRsYW5nWydwcmVmc3VwZGF0ZWQnXSA9ICdNb2R1bCBpbm5zdGlsbGluZ2VyIG9wcGRhdGVydC4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVzYyddID0gJ0Jlc2tyaXZlbHNlJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWxpc3RhYmxlJ10gPSAnRmlsZXIgaSBkZW5uZSBrYXRlZ29yaWVuIGthbiBsaXN0ZXMgdXQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ0thdGVnb3JpIG5hdm4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlciBzdGknOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ1NsZXR0IGthdGVnb3JpIG1hcHBlPyc7CiRsYW5nWydwcm9tcHRfbWF4X3VwbG9hZHNpemUnXSA9ICdNYWtzaW11bSB0aWxsYXR0ZSBmaWxzdCZvc2xhc2g7cnJlbHNlIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdHeWxkaWcgb3BwbGFzdGluZ3MgZmlsLWVuZGVsc2UnOwokbGFuZ1snc2NhbiddID0gJ1NrYW5uJzsKJGxhbmdbJ3NlbGVjdGNhdGVnb3J5J10gPSAnVmVsZyBrYXRlZ29yaSc7CiRsYW5nWydzaXplJ10gPSAnU3Qmb3NsYXNoO3JyZWxzZSc7CiRsYW5nWydzaXpla2InXSA9ICdTdCZvc2xhc2g7cnJlbHNlIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnTGFncmUgb2cgbHVrayc7CiRsYW5nWydzdW1tYXJ5X3RlbXBsYXRlJ10gPSAnU2FtbWVuZHJhZ3MgbWFsJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdTYW1tZW5kcmFnJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnVXBsb2FkcyBNb2R1bGVuJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ01vZHVsIEFkbWluaXN0cmFzam9uc3BhbmVsJzsKJGxhbmdbJ3RpdGxlX21vZF9wcmVmcyddID0gJ01vZHVsIElubnN0aWxsaW5nZXInOwokbGFuZ1sndGl0bGVfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdVdGVsdWtrIHN1Ym5ldHQgZnJhIHN0YXRpc3Rpa2tlcic7CiRsYW5nWyd0aXRsZV92YWxpZF91cGxvYWRleHRlbnNpb25zJ10gPSAnR3lsZGlnZSBmaWwtZW5kZWxzZXInOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1bCBhdmluc3RhbGxlcnQuJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWwgb3BwZ3JhZGVydCB0aWwgdmVyc2pvbiAlcy4nOwokbGFuZ1sndXBsb2FkJ10gPSAnTGFzdCBvcHAnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWwgJXMgYmxlIGxhc3RldCBvcHAgYXYgJXMuJzsKJGxhbmdbJ3JlcGxhY2VkJ10gPSAnRmlsICVzIGJsZSBlcnN0YXR0ZXQgJXMuJzsKJGxhbmdbJ2RlbGV0ZWQnXSA9ICdGaWwgJXMgYmxlIHNsZXR0ZXQuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdPcHBsYXN0aW5nIG1hbGVyJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnQnJ1a2VybmF2bic7CiRsYW5nWyd3YXJuaW5nX2RlbGV0ZWNhdGVnb3J5J10gPSAnQURWQVJTRUw6IFYmYWVsaWc7ciBmb3JzaWt0aWcgbWVkICZhcmluZzsgc2xldHRlciBrYXRlZ29yaWVyLiAgRmlsZXIga2FuIGJsaSBib3J0ZSc7CiRsYW5nWydxY2EnXSA9ICdQMC01MzY4NDkxMTUtMTMwNzk4MzQ5NTIxMCc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjMwMDI5MDM1Ny4xMzczMTQ0NjE4LjEzNzMxOTc1ODIuMTM3MzIxOTM5My40JzsKJGxhbmdbJ3V0bXonXSA9ICcxNTY4NjEzNTMuMTM3MzE0NDYxOC4xLjEudXRtY3NyPShkaXJlY3QpfHV0bWNjbj0oZGlyZWN0KXx1dG1jbWQ9KG5vbmUpJzsKJGxhbmdbJ3V0bWInXSA9ICcxNTY4NjEzNTMuMi4xMC4xMzczMjE5MzkzJzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/nl_NL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2luZGV4X3VuaXF1ZXdvcmRzJ10gPSAnSW5kZXhlZXIgYWxsZWVuIHVuaWVrZSB3b29yZGVuJzsKJGxhbmdbJ3JlaW5kZXgnXSA9ICdPcG5pZXV3IGluZGV4ZXJlbic7CiRsYW5nWydpbmRleGluZ19zZXR0aW5ncyddID0gJ1pvZWsgZW4gSW5kZXhlcmluZyBpbnN0ZWxsZWluZ2VuJzsKJGxhbmdbJ2luZGV4X3R4dGZpbGVzJ10gPSAnSW5kZXhlZXIgdGVrc3RiZXN0YW5kZW4nOwokbGFuZ1snaW5kZXhfcGRmZmlsZXMnXSA9ICdJbmRleGVlciBQREYtYmVzdGFuZGVuJzsKJGxhbmdbJ2FsbG93X2NoYW5nZWRhdGUnXSA9ICdTdGEgdG9lIGRhdCBkZSBiZWhlZXJkZXIgZGUgdXBsb2FkIGRhdHVtIGthbiBhYW5wYXNzZW4nOwokbGFuZ1snbWlzc2luZyddID0gJ0Jlc3RhbmQgaXMgbmlldCBhYW53ZXppZyEhJzsKJGxhbmdbJ21pc3NpbmdfZmlsZSddID0gJ0RpdCBiZXN0YW5kIGlzIG5pZXQgYWFud2V6aWcnOwokbGFuZ1sncHJvbXB0X2ZyaWVuZGx5bmFtZSddID0gJ0VpZ2VuIG1vZHVsZSBuYWFtJzsKJGxhbmdbJ2Vycm9yX2Nhbm5vdHJlbmFtZSddID0gJ0ZvdXQgYmlqIGhldCBoZXJub2VtZW4gdmFuIGhldCBiZXN0YW5kJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9zdW1tYXJ5J10gPSAnU2FtZW52YXR0aW5nJzsKJGxhbmdbJ2ZpZWxkX2NhdGVnb3J5X2lkJ10gPSAnQ2F0ZWdvcmllIElkJzsKJGxhbmdbJ2ZpZWxkX2NhdGVnb3J5X25hbWUnXSA9ICdDYXRlZ29yaWUgTmFhbSc7CiRsYW5nWydmaWVsZF9jYXRlZ29yeV9wYXRoJ10gPSAnQ2F0ZWdvcmllIFBhZCc7CiRsYW5nWydmaWVsZF9hdXRob3InXSA9ICdBdXRldXInOwokbGFuZ1snZmllbGRfZGVzY3JpcHRpb24nXSA9ICdPbXNjaHJpanZpbmcnOwokbGFuZ1snbm91c2VyaW5mbyddID0gJ0dlZW4gZ2VicnVpa2VycyBpbmZvcm1hdGllIGFhbndlemlnJzsKJGxhbmdbJ21zZ19yZXBvcnRfc2VudCddID0gJ1JhcHBvcnQgdmVyem9uZGVuJzsKJGxhbmdbJ2dlbmVyYXRlZF9ieSddID0gJ0dlZ2VuZXJlZXJkIGRvb3InOwokbGFuZ1snZ2VuZXJhdGVkX29uJ10gPSAnR2VnZW5lcmVlcmQgb3AnOwokbGFuZ1snc3RhcnRfZGF0ZSddID0gJ1N0YXJ0ZGF0dW0nOwokbGFuZ1snZW5kX2RhdGUnXSA9ICdFaW5kZGF0dW0nOwokbGFuZ1sndXBsb2FkX2NhdGVnb3J5X25hbWUnXSA9ICdDYXRlZ29yaWUgbmFhbSc7CiRsYW5nWydwcm9tcHRfZmlsZXMnXSA9ICdCZXN0YW5kZW4nOwokbGFuZ1sncmVwb3J0X2Rvd25sb2Fkc2J5dXNlciddID0gJ0Rvd25sb2FkcyBwZXIgZ2VicnVpa2VyJzsKJGxhbmdbJ3JlcG9ydF9kb3dubG9hZHNieWZpbGUnXSA9ICdEb3dubG9hZHMgcGVyIGJlc3RhbmQnOwokbGFuZ1snZmllbGRfbGF0ZXN0X2Rvd25sb2FkJ10gPSAnTGFhdHN0ZSBkb3dubG9hZCc7CiRsYW5nWydmaWVsZCddID0gJ1ZlbGQnOwokbGFuZ1snY2xvc2UnXSA9ICdTbHVpdCc7CiRsYW5nWydwcm9tcHRfcmVwb3J0X3R5cGUnXSA9ICdSYXBwb3J0IFR5cGUnOwokbGFuZ1sncmVwb3J0X3N1bW1hcnknXSA9ICdTYW1lbnZhdHRpbmcnOwokbGFuZ1sncmVwb3J0X2RldGFpbCddID0gJ0dlZGV0YWlsZWVyZCc7CiRsYW5nWydwcm9tcHRfc3RhcnRfZGF0ZSddID0gJ1N0YXJ0ZGF0dW0nOwokbGFuZ1sncHJvbXB0X2VuZF9kYXRlJ10gPSAnRWluZGRhdHVtJzsKJGxhbmdbJ3Byb21wdF9hc2NlbmRpbmcnXSA9ICdPcGxvcGVuZCc7CiRsYW5nWydwcm9tcHRfZGVzY2VuZGluZyddID0gJ0FmbG9wZW5kJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnU3RhbmRhYXJkJzsKJGxhbmdbJ3Byb21wdF9zb3J0b3JkZXInXSA9ICdTb3J0ZWVyIFZvbGdvcmRlJzsKJGxhbmdbJ2ZpZWxkX2Rvd25sb2FkX2RhdGUnXSA9ICdEb3dubG9hZCBEYXR1bSc7CiRsYW5nWydmaWVsZF9kb3dubG9hZF91c2VyJ10gPSAnRG93bmxvYWQgR2VicnVpa2VyJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9pZCddID0gJ1VwbG9hZCBJRCc7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfaWQnXSA9ICdDYXRlZ29yaWUgSUQnOwokbGFuZ1snZmllbGRfdXBsb2FkX2NhdGVnb3J5X25hbWUnXSA9ICdDYXRlZ29yaWUgbmFhbSc7CiRsYW5nWydmaWVsZF91cGxvYWRfY2F0ZWdvcnlfcGF0aCddID0gJ0NhdGVnb3JpZSBwYWQnOwokbGFuZ1snZmllbGRfdXBsb2FkX25hbWUnXSA9ICdCZXN0YW5kc25hYW0nOwokbGFuZ1snZmllbGRfdXBsb2FkX2F1dGhvciddID0gJ0F1dGV1cic7CiRsYW5nWydmaWVsZF91cGxvYWRfZGVzY3JpcHRpb24nXSA9ICdPbXNjaHJpanZpbmcnOwokbGFuZ1snZmllbGRfdXBsb2FkX2lwJ10gPSAnVXBsb2FkIElQIEFkcmVzJzsKJGxhbmdbJ2ZpZWxkX3VwbG9hZF9kYXRlJ10gPSAnVXBsb2FkIERhdHVtJzsKJGxhbmdbJ2ZpZWxkX2Rvd25sb2FkcyddID0gJ0FhbnRhbCBEb3dubG9hZHMnOwokbGFuZ1sncHJvbXB0X3NvcnRpbmcnXSA9ICdTb3J0ZWVyIG9wJzsKJGxhbmdbJ29yJ10gPSAnb2YnOwokbGFuZ1sncHJvbXB0X2ZldV91c2VycyddID0gJ0ZFVSBHZWJydWlrZXJzJzsKJGxhbmdbJ3Byb21wdF9mZXVfZ3JvdXBzJ10gPSAnRkVVIEdyb2VwZW4nOwokbGFuZ1sndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5dXNlciddID0gJ0Rvd25sb2FkcyBwZXIgZ2VicnVpa2VyJzsKJGxhbmdbJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieWZpbGUnXSA9ICdEb3dubG9hZHMgcGVyIGJlc3RhbmQnOwokbGFuZ1sncmVwb3J0cyddID0gJ1JhcHBvcnRlbic7CiRsYW5nWydwcm9tcHRfcGVybWlzc2lvbnMnXSA9ICdQZXJtaXNzaWVzJzsKJGxhbmdbJ3Byb21wdF9maWVsZHMnXSA9ICdWZWxkZW4nOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlJ10gPSAnVmVyc3R1dXIgYmVzdGFuZCc7CiRsYW5nWydwcm9tcHRfbW9kaWZ5aW5nJ10gPSAnQWFucGFzc2VuJzsKJGxhbmdbJ3Byb21wdF92aWV3aW5nJ10gPSAnQmVraWprZW4nOwokbGFuZ1sncHJvbXB0X2dlbmVyYWwnXSA9ICdBbGdlbWVlbic7CiRsYW5nWydpbmZvX2NhdGVnb3J5bGlzdGFibGUnXSA9ICdNb2dlbiBiZXN0YW5kZW4gaW4gZGV6ZSBjYXRlZ29yaWUgd29yZGVuIGdldG9vbmQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ3ZhbHVlJ10gPSAnRXIgb250YnJlZWt0IGVlbiB2ZXJwbGljaHQgaW52dWx2ZWxkLic7CiRsYW5nWydlZGl0ZWQnXSA9ICdHZXdpanppZ2QgJXMnOwokbGFuZ1snbW92ZWRmaWxlJ10gPSAnQmVzdGFuZCB2ZXJwbGFhdHN0IHZhbiAlcyBuYWFyICVzJzsKJGxhbmdbJ3BhZ2VsaW1pdCddID0gJ0Jlc3RhbmRlbiBwZXIgcGFnaW5hJzsKJGxhbmdbJ3ZpZXcnXSA9ICdHZWVmIGRpdCBiZXN0YW5kIHdlZXInOwokbGFuZ1snZWRpdF90aGlzX2ZpbGUnXSA9ICdXaWp6aWcgZGl0IHZlbGQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ1NjYW4gZGV6ZSBjYXRlZ29yaWUgYXV0b21hdGlzY2ggdm9vciBuaWV1d2UgYmVzdGFuZGVuPyc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ1dhbm5lZXIgZXIgdmlhIGhldCBmcm9udGVuZCB0b2VnYW5nIGlzIHRvdCBkZXplIGNhdGVnb3JpZSB6YWwgZXIgd29yZGVuIGdlc2NhbmQgb3AgbmlldXdlIGJlc3RhbmRlbic7CiRsYW5nWydwcm9tcHRfdGxfYWNjZXNzJ10gPSAnVGlqZGdlbGltaXRlZXJkZSB0b2VnYW5nJzsKJGxhbmdbJ3Byb21wdF9hbGxvd191cGxvYWRfc2VuZGZpbGUnXSA9ICdTdGEgaGV0IHZlcnN0dXJlbiB2YW4gYmVzdGFuZGVuIHRvZSwgZGlyZWN0IG5hIGhldCB1cGxvYWRlbiB2aWEgaGV0IGJhY2tlbmQnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGUnXSA9ICdBdXRvbWF0aXNjaCB2ZXJ3aWpkZXJkIHZlcmxvcGVuIGJlc3RhbmQ6ICVzJzsKJGxhbmdbJ21zZ19hdXRvX2RlbGV0ZV9maWxlX2ZhaWxlZCddID0gJ1JlY2h0ZW5wcm9ibGVlbSwgYXV0b21hdGlzY2ggdmVyd2lqZGVyZW4gdmFuICVzIG1pc2x1a3QnOwokbGFuZ1snaW5mb19jYXRlZ29yeV9leHBpcmVzX2hycyddID0gJ0Jlbm9lbSBlZW4gYWFudGFsIHVyZW4gdG90ZGF0IGRlIGJlc3RhbmRlbiBpbiBkZXplIGNhdGVnb3JpZSBrdW5uZW4gd29yZGVuIHZlcndpamRlcmQuIEdlYnJ1aWsgZGUgd2FhcmRlIDAgb20gYWFuIHRlIGdldmVuIGRhdCBkZSBiZXN0YW5kZW4gbmlldCBrdW5uZW4gd29yZGVuIHZlcndpamRlcmQnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnQWFudGFsIHVyZW4gdG90ZGF0IGRlIGJlc3RhbmRlbiBpbiBkZXplIGNhdGVnb3JpZSBhdXRvbWF0aXNjaCB3b3JkZW4gdmVyd2lqZGVyZCc7CiRsYW5nWydpbmZvX2RmbHRfY2F0ZWdvcnlfZXhwaXJ5J10gPSAnRGUgc3RhbmRhYXJkd2FhcmRlIHZvb3IgbmlldXdlIGNhdGVnb3JpZcOrbiBkaWUgc3BlY2lmaWNlZXJ0IHdhbm5lZXIgZGUgYmVzdGFuZGVuIGluIGRlemUgY2F0ZWdvcmllIGF1dG9tYXRpc2NoIHdvcmRlbiB2ZXJ3aWpkZXJkLiBHZWJydWlrIGRlIHdhYXJkZSAwIG9tIGFhbiB0ZSBnZXZlbiBkYXQgZGUgYmVzdGFuZGVuIG5pZXQga3VubmVuIHdvcmRlbiB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2V4cGlyeSddID0gJ0NhdGVnb3JpZSB2ZXJ2YWwgcGVyaW9kZSA8ZW0+KHVyZW4pPC9lbT4nOwokbGFuZ1snaW5mb19jYXRlZ29yeWRlbGV0YWJsZSddID0gJ0Jldm9lZ2RlIGdlYnJ1aWtlcnMgaGViYmVuIGRlIHJlY2h0ZW4gb20gZGV6ZSBiZXN0YW5kZW4gdGUgdmVyd2lqZGVyZW4uIERpdCBob3VkdCBpbiBkYXQgZWVuIHVybCB3b3JkZW4gZ2VnZW5lcmVlcmQgaW4gaGV0IGp1aXN0ZSBzamFibG9vbiBkaWUgdG9lc3RhYXQgaGV0IGJlc3RhbmQgdGUgdmVyd2lqZGVyZW4uIEVlbiB3ZWJzaXRlIGJvdXdlciBrYW4gZGUganVpc3RlIHNtYXJ0eSBsb2dpY2EgZ2VicnVpa2VuIG9tIGVlbiBsaW5rIHRlIHRvbmVuIGFhbiBkZSBnZWF1dG9yaXNlZXJkZSBnZWJydWlrZXJzLic7CiRsYW5nWydjb3B5X2ZpbGVzJ10gPSAnS29waWVlciBiZXN0YW5kZW4nOwokbGFuZ1snZXJyb3JfZmlsZXRvb2xhcmdlJ10gPSAnSGV0IGJlc3RhbmQgZGF0IHUgcHJvYmVlcnQgdGUgdXBsb2FkZW4gaXMgZ3JvdGVyIGRhbiBoZXQgbWF4aW1hYWwgdG9lZ2VzdGFuZSc7CiRsYW5nWydhcmV5b3VzdXJlX2RlbGV0ZWNhdGVnb3J5J10gPSAnV2VldCB1IHpla2VyIGRhdCB1IGRlemUgY2F0ZWdvcmllIHdpbHQgdmVyd2lqZGVyZW4/JzsKJGxhbmdbJ2Vycm9yX2RlbGV0ZSddID0gJ0VlbiBpdGVtIGtvbiBuaWV0IHdvcmR0IHZlcndpamRlcmQgKCVzKSc7CiRsYW5nWydjb25maXJtX2NhdF9tdWx0aWFjdGlvbiddID0gJ1dlZXQgdSB6ZWtlciBkYXQgdSBkZXplIGFjdGllIHdpbHQgdWl0dm9lcmVuIG9wIGRlIGdlc2VsZWN0ZWVyZGUgY2F0ZWdvcmnDqG4/JzsKJGxhbmdbJ2Vycm9yX25vdGhpbmdfc2VsZWN0ZWQnXSA9ICdGb3V0OiBOaWV0cyBnZXNlbGVjdGVlcmQnOwokbGFuZ1snd2l0aF9zZWxlY3RlZCddID0gJ01ldCBnZXNlbGVjdGVlcmQ6JzsKJGxhbmdbJ2Vycm9yX3JlcGxhY2VfbWlzbWF0Y2hlZF9maWxlZXh0J10gPSAnVGlqZGVucyBoZXQgdmVydmFuZ2VuIHZhbiBlZW4gYmVzdGFuZCwgbW9ldCB1IGVlbiBiZXN0YW5kIHVwbG9hZGVuIG1ldCBlZW56ZWxmZGUgZXh0ZW50aWUuIEhldCBiZXN0YW5kIGRhdCB1IHNlbGVjdGVlcmRlIGtvbXQgbmlldCBvdmVyZWVuIG1ldCBoZXQgb3JpZ2luZWxlIGJlc3RhbmQnOwokbGFuZ1sncmVwbGFjZSddID0gJ1ZlcnZhbmcnOwokbGFuZ1snaW5mb19yZXBsYWNlZmlsZSddID0gJ1UgbWFnIGVlbiB2ZXJ2YW5nZW5kIGJlc3RhbmQgdXBsb2FkZW4uIGFscyBoZXQgZWVuIGFmYmVlbGRpbmcgaXMgZW4gdSBoZWVmdCBnZWVuIGJpamJlaG9yZW5kIG1pbmlhdHV1ciBhYW5nZWdldmVuLCBkYW4gemFsIGVyIGVlbiBuaWV1d2Ugd29yZGVuIGdlZ2VuZXJlZXJkJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlZmlsZSddID0gJ1VwbG9hZCB2ZXJ2YW5naW5nc2Jlc3RhbmQnOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnVmVyd2lqZGVyIHNwYXRpZXMgaW4gZGUgYmVzdGFuZHNuYWFtJzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0NhdGVnb3JpZSBzdWNjZXN2b2wgZ2Vrb3BpZWVyZCc7CiRsYW5nWydlcnJvcl9kdXBsaWNhdGVwYXRoJ10gPSAnQmVub2VtIGVlbiBkaXJlY3RvcnkgbmFhbSBkaWUgYW5kZXJzIGlzIGFscyBkaWUgdmFuIGRlIGJyb24gZW4gbm9nIG5pZXQgaW4gZ2VicnVpayBpcyc7CiRsYW5nWydvcGVyYXRpb25fY2FuY2VsbGVkJ10gPSAnQmV3ZXJraW5nIGdlYW5udWxlZXJkJzsKJGxhbmdbJ3NvdXJjZSddID0gJ0Jyb24nOwokbGFuZ1snZGVzdGluYXRpb24nXSA9ICdCZXN0ZW1taW5nJzsKJGxhbmdbJ3Byb21wdF9jb3B5X2ZpbGVzJ10gPSAnS29waWVlciBjYXRlZ29yaWUgYmVzdGFuZGVuJzsKJGxhbmdbJ2luZm9fY29weV9maWxlcyddID0gJ0tvcGllZXIgZGUgYmVzdGFuZGVuIHZhbiBkZSBicm9uIG5hYXIgZGUgYmVzdGVtbWluZ3NjYXRlZ29yaWUnOwokbGFuZ1snZXh0cmEnXSA9ICdFeHRyYSc7CiRsYW5nWydjb3B5J10gPSAnS29waWVlcic7CiRsYW5nWydzZWxlY3RvbmUnXSA9ICdLaWVzIMOpw6luJzsKJGxhbmdbJ2F1dG93YXRlcm1hcmsnXSA9ICdQbGFhdHMgYXV0b21hdGlzY2ggZWVuIHdhdGVybWVyayBvcCBkZSBhZmJlZWxkaW5nZW4nOwokbGFuZ1snaW1hZ2Vfc2V0dGluZ3MnXSA9ICdBZmJlZWxkaW5nIEluc3RlbGxpbmdlbic7CiRsYW5nWydwcm9tcHRfZ2V0ZmlsZV9yZXN1bHRwYWdlJ10gPSAnUGFnaW5hIGRpZSBnZWJydWlrdCB3b3JkdCB2b29yIGhldCBtZWxkZW4gdmFuIGZvdXRlbiBlbiBhbmRlcmUgYm9vZHNjaGFwcGVuIG1ldCBiZXRyZWtraW5nIHRvdCBoZXQgZG93bmxvYWRlbic7CiRsYW5nWydlcnJvcl9pbnZhbGlkX2tleSddID0gJ0RlIGluZ2V2b2VyZGUgdXBsb2FkIHNsZXV0ZWwgaXMgbmlldCBjb3JyZWN0IChtaXNzY2hpZW4gZGUgbWF4aW1hbGUgZG93bmxvYWQgY2FwYWNpdGVpdCBiZXJlaWt0IG9mIGlzIGhldCB2ZXJsb3BlbiknOwokbGFuZ1snZGZsdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAneyRzaXRlbmFtZX0gLSBVIGhlZWZ0IHZvb3IgZWVuIGdlbGltaXRlZXJkZSBwZXJpb2RlIGRlIHRvZXN0ZW1taW5nIGdla3JlZ2VuIHRvdCB7JGVudHJ5LT51cGxvYWRfbmFtZXxzdHJpcF90YWdzfSc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfc3ViamVjdCddID0gJ09uZGVyd2VycCB2YW4gZGUgZS1tYWlsIHdhbm5lZXIgZWVuIHRpamRnZWxpbWl0ZWVyZGUgVVJMIHdvcmR0IHZlcnN0dXVyZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfYXV0b2RlbGV0ZSddID0gJ1ZlcndpamRlciBhdXRvbWF0aXNjaCB2ZXJsb3BlbiB2ZXJ6b2VrZW4gbmEgTiB1dXIgPGVtPihtYWFrIDAgb20gZGV6ZSBmdW5jdGllIHVpdCB0ZSBzY2hha2VsZW4pPC9lbT46JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zZW5kaXQnXSA9ICdWZXJzdHV1ciBkZXplIHVybCBuYWFyIGhldCBlLW1haWwgYWRyZXM/JzsKJGxhbmdbJ3VybF9rZXknXSA9ICdVUkwgU2xldXRlbCc7CiRsYW5nWydjcmVhdGVkJ10gPSAnR2VtYWFrdCc7CiRsYW5nWydleHBpcmVzJ10gPSAnVmVybG9vcHQnOwokbGFuZ1snYWRkZWRpdF90aW1lbGltaXRlZF9rZXknXSA9ICdUb2V2b2VnZW4vV2lqemlnZW4gVGlqZGdlbGltaXRlZXJkZSBzbGV1dGVsJzsKJGxhbmdbJ3RpbWVfbGltaXRlZF9rZXlfYWRkZWQnXSA9ICdUaWpkZ2VsaW1pdGVlcmRlIHNsZXV0ZWwgVG9lZ2V2b2VnZCc7CiRsYW5nWydudW1faG91cnMnXSA9ICdBYW50YWwgdXJlbic7CiRsYW5nWydudW1fZG93bmxvYWRzJ10gPSAnSG9ldmVlbGhlaWQgRG93bmxvYWRzJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFLW1haWwgQWRyZXMnOwokbGFuZ1snZXJyb3JfbWlzc2luZ19pbnZhbGlkJ10gPSAnRWVuIGJlbm9kaWdkZSB3YWFyZGUgaXMgbmlldCBjb3JyZWN0IG9mIGFmd2V6aWc6ICVzJzsKJGxhbmdbJ2FkZF90aW1lbGltaXRlZF9rZXknXSA9ICdUaWpkZ2VsaW1pdGVlcmRlIHNsZXV0ZWwgVG9ldm9lZ2VuJzsKJGxhbmdbJ2ZpbGVfaW5mbzInXSA9ICdCZXN0YW5kICVzIChpZD0lZCknOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdCZW5vZW0gaGV0IHN0YW5kYWFyZCBhYW50YWwga2VyZW4gZGF0IGVlbiBiZXN0YW5kIGdlZG93bmxvYWQga2FuIHdvcmRlbiBtZXQgZWVuIGJlcGFhbGRlIHNsZXV0ZWwnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ1N0YW5kYWFyZCBIb2V2ZWVsaGVpZCBEb3dubG9hZHMnOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9ob3VycyddID0gJ0Jlbm9lbSBoZXQgc3RhbmRhYXJkIGFhbnRhbCB1cmVuIGRhdCBkZSBUaWpkZ2VsaW1pdGVlcmRlIHNsZXV0ZWwgZ2VsZGlnIGJsaWpmdC4gQmVub2VtIDAgdm9vciBvbmdlbGltaXRlZXJkJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9ob3VycyddID0gJ0FhbnRhbCB1cmVuIGRhdCBkZSBUaWpkZ2VsaW1pdGVlcmRlIFNsZXV0ZWwgZ2VsZGlnIGlzJzsKJGxhbmdbJ3RpbWVsaW1pdGVkX3VybF9zZXR0aW5ncyddID0gJ0luc3RlbGxpbmdlbiBUaWpkZ2VsaW1pdGVlcmRlIHNsZXV0ZWwnOwokbGFuZ1snbWFuYWdlX3RpbWVsaW1pdGVkJ10gPSAnQmVoZWVyIFRpamRnZWxpbWl0ZWVyZGUgVG9lZ2FuZyc7CiRsYW5nWyd1cGxvYWRpbmdfc2V0dGluZ3MnXSA9ICdCZXN0YW5kIFVwbG9hZCBJbnN0ZWxsaW5nZW4nOwokbGFuZ1snZ2VuZXJhbF9zZXR0aW5ncyddID0gJ0FsZ2VtZW5lIGluc3RlbGxpbmdlbic7CiRsYW5nWyd0aHVtYm5haWxfc2V0dGluZ3MnXSA9ICdNaW5pYXR1dXIgYWFubWFhayc7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdF9vbl9zZW5kZmlsZSddID0gJ1BhZ2luYSBvbSB0ZSB0b25lbiBuYSBoZXQgdmVyemVuZGVuIHZhbiBlZW4gYmVzdGFuZCc7CiRsYW5nWydsYmxfYmFjayddID0gJ1RlcnVnJzsKJGxhbmdbJ2xibF90ZW1wbGF0ZXMnXSA9ICdXaWp6aWcgU2phYmxvbmVuJzsKJGxhbmdbJ3Byb21wdF9wdWJsaWNfZmllbGQnXSA9ICdWZWxkIGlzIG9wZW5iYWFyIDxlbT4oS2FuIGRvb3Igd2Vic2l0ZSBiZXpvZWtlcnMgd29yZGVuIGdlemllbik8L2VtPic7CiRsYW5nWyd1cGxvYWRfZWRpdGVkJ10gPSAnQmVzdGFuZCBEZXRhaWxzIEdld2lqemlnZCBvcCAlcyc7CiRsYW5nWydpbmZvX3RodW1ibmFpbCddID0gJ0VlbiBvcHRpb25lZWwgbWluaWF0dXVyLWJlc3RhbmQnOwokbGFuZ1sndXBsb2FkX2ZpbGUnXSA9ICdVcGxvYWQgZWVuIG5pZXV3IGJlc3RhbmQnOwokbGFuZ1snbXNnX2ZpZWxkX2RlbGV0ZWQnXSA9ICdWZWxkIHZlcndpamRlcmQnOwokbGFuZ1snYXNrX2RlbGV0ZV9maWVsZCddID0gJ1dlZXQgdSB6ZWtlciBkYXQgdSBkaXQgdmVsZCBlbiBhbGxlIGdlYXNzb2NpZWVyZGUgZGF0YSB3aWx0IHZlcndpamRlcmVuPyc7CiRsYW5nWyd5ZXMnXSA9ICdKYSc7CiRsYW5nWydubyddID0gJ05lZSc7CiRsYW5nWyd0eXBlJ10gPSAnVHlwZSc7CiRsYW5nWydmaWVsZHR5cGVfbXVsdGlzZWxlY3QnXSA9ICdNZWVya2V1emUgTGlqc3QnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnRHJvcGRvd24gTGlqc3QnOwokbGFuZ1snZmllbGR0eXBlX2NoZWNrYm94J10gPSAnVmlua3Zha2plJzsKJGxhbmdbJ2ZpZWxkdHlwZV90ZXh0YXJlYSddID0gJ1Rla3N0IHJ1aW10ZSc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGlucHV0J10gPSAnVGVrc3QgSW5wdXQnOwokbGFuZ1sncHJvbXB0X3VzZV93eXNpd3lnJ10gPSAnR2VicnVpayB3eXNpd3lnIHZvb3IgaGV0IHdpanppZ2VuIHZhbiBkZSBpbmhvdWQgdmFuIGRpdCB2ZWxkJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0X2NvbnRlbnQnXSA9ICdTdGFuZGFhcmQgaW5ob3VkIHZvb3IgZGUgdGVrc3RydWltdGUnOwokbGFuZ1sncHJvbXB0X2Ryb3Bkb3duX29wdGlvbnMnXSA9ICdPcHRpZXMgKMOpw6luIHBlciByZWdlbCknOwokbGFuZ1sncHJvbXB0X2ZpZWxkX21heGxlbmd0aCddID0gJ1ZlbGQgTWF4aW11bSBMZW5ndGUnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ1ZlbGQgTGVuZ3RlJzsKJGxhbmdbJ3Byb21wdF9maWVsZF90eXBlJ10gPSAnVmVsZCBUeXBlJzsKJGxhbmdbJ3Byb21wdF9maWVsZF9uYW1lJ10gPSAnVmVsZCBOYWFtJzsKJGxhbmdbJ3RpdGxlX2FkZF9maWVsZCddID0gJ1RvZXZvZWdlbiBvZiB3aWp6aWdlbiB2YW4gZWVuIFZlbGQgRGVmaW5pdGllJzsKJGxhbmdbJ2ZpZWxkX2RlZmluaXRpb25zJ10gPSAnVmVsZCBEZWZpbml0aWVzJzsKJGxhbmdbJ3Byb21wdF9hZGRfZmllbGQnXSA9ICdWZWxkIERlZmluaXRpZXMgVG9ldm9lZ2VuJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZWNpZmllcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBtb2R1bGUgdGFnLiAgUG9zc2libGUgdmFsdWVzIGFyZTogZGVmYXVsdCAtICh0aGUgZGVmYWZhdWx0IGJlaGF2aW9yKSwgZGV0YWlsIC0gdG8gZGlzcGxheSBhIGRldGFpbCB2aWV3IG9mIGEgc2luZ2xlIGZpbGUgYmFzZWQgb24gdGhlIHVwbG9hZF9pZCwgYW5kIHlvdXNlbmRpdCAtIHRvIGRpc3BsYXkgYSBmb3JtIHRvIGFsbG93IHVwbG9hZGluZyBhIGZpbGUsIGFuZCBzZW5kaW5nIGl0IHRvIG51bWVyb3VzIGFkZHJlc3NlcyBpbiBvbmUgc3RlcCc7CiRsYW5nWydwYXJhbV9zZW5kZmlsZXBhZ2UnXSA9ICdCZW5vZW0gZWVuIHBhZ2luYSBJRCBvZiBlZW4gYWxpYXMgZGF0IGdlYnJ1aWt0IG1vZXQgd29yZGVuIG9tIGhldCBiZXN0YW5kc2Zvcm11bGllciB0ZSB2ZXJ6ZW5kZW4nOwokbGFuZ1snZmlsZV91cGxvYWRlZCddID0gJ0Jlc3RhbmQgY29ycmVjdCBnZcO8cGxvYWQnOwokbGFuZ1sndG8nXSA9ICdOYWFyJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdUb2V2b2VnZW4gb2Ygd2lqemlnZW4gIlUgdmVyc3R1dXJkZSBoZXQiIEZvcm11bGllciBTamFibG9vbic7CiRsYW5nWyd5b3VzZW5kaXRmb3JtX3RlbXBsYXRlJ10gPSAnIlUgdmVyc3R1dXJkZSBoZXQiIEZvcm11bGllciBTamFibG9vbic7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTdGFuZGFhcmQgIlUgdmVyc3R1dXJkZSBoZXQiIHNqYWJsb29uJzsKJGxhbmdbJ21zZ19maWxlX3NlbnQnXSA9ICdFciBpcyBlZW4gYmVyaWNodCBnZXN0dXVyZCBuYWFyIGRlIGdlc2VsZWN0ZWVyZGUgYWRyZXNzZW4gZGF0IGluZm9ybWF0aWUgYmV2YXQgb3ZlciBoZXQgYmVzdGFuZCBlbiBob2UgdSBoZXQga3VudCBvbnR2YW5nZW4uJzsKJGxhbmdbJ2Vycm9yX25vYWRkcmVzc2VzJ10gPSAnVSBtb2V0IG1pbmltYWFsIMOpw6luIGRvZWwgYWRyZXMgaW52dWxsZW4nOwokbGFuZ1snZXJyb3Jfbm9zdWJqZWN0J10gPSAnVSBtb2V0IGVlbiBvbmRlcndlcnAgaW52dWxsZW4nOwokbGFuZ1snc3ViamVjdCddID0gJ09uZGVyd2VycCc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZXBhZ2UnXSA9ICdQYWdpbmEgdm9vciBoZXQgIlZlcnN0dXVyIGVlbiBiZXN0YW5kIiBGb3JtdWxpZXInOwokbGFuZ1snZmlsZV9pbmZvJ10gPSAnQmVzdGFuZHNpbmZvJzsKJGxhbmdbJ3NlbmQnXSA9ICdWZXJzdHV1cic7CiRsYW5nWydub3RlcyddID0gJ09wbWVya2luZ2VuJzsKJGxhbmdbJ2FkZHJlc3NlZXMnXSA9ICdWZXJzdHV1ciBpbmZvcm1hdGllIG92ZXIgZGl0IGJlc3RhbmQgbmFhcic7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGVfZW1haWxfdGVtcGxhdGUnXSA9ICciVmVyc3R1dXIgZWVuIGJlc3RhbmQiIEUtbWFpbCBTamFibG9vbic7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fdGVtcGxhdGUnXSA9ICdUb2V2b2VnZW4gb2Ygd2lqemlnZW4gIlZlcnN0dXVyIGVlbiBiZXN0YW5kIiBGb3JtdWxpZXIgU2phYmxvb24nOwokbGFuZ1snc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnIlZlcnN0dXVyIGVlbiBiZXN0YW5kIiBGb3JtdWxpZXIgU2phYmxvb24nOwokbGFuZ1sncHJvbXB0X25vdGlmeV9lbWFpbF90ZW1wbGF0ZSddID0gJ0Jlc3RhbmQgdXBsb2FkIG5vdGlmaWNhdGllIGUtbWFpbCBzamFibG9vbic7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fc3lzZGVmYXVsdCddID0gJ1N0YW5kYWFyZCAiVmVyc3R1dXIgZWVuIGJlc3RhbmQiIEZvcm11bGllciBTamFibG9vbic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdCZXN0YW5kZW4gaW4gZGV6ZSBjYXRlZ29yaWUga3VubmVuIHdvcmRlbiB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ1N0YSBoZXQgdmVyd2lqZGVyZW4gdmFuIGJlc3RhbmRlbiBhYW4gaGV0IGZyb250ZW5kIHRvZSc7CiRsYW5nWydkZWZhdWx0X3RlbXBsYXRlcyddID0gJ1N0YW5kYWFyZCBTamFibG9uZW4nOwokbGFuZ1snZmlyc3RwYWdlJ10gPSAnRWVyc3RlIHBhZ2luYSc7CiRsYW5nWydwcmV2cGFnZSddID0gJ0xhYXRzdGUgcGFnaW5hJzsKJGxhbmdbJ25leHRwYWdlJ10gPSAnVm9sZ2VuZGUgcGFnaW5hJzsKJGxhbmdbJ2xhc3RwYWdlJ10gPSAnVm9yaWdlIHBhZ2luYSc7CiRsYW5nWydmaXJzdHBhZ2VfYXJyb3cnXSA9ICc8PCc7CiRsYW5nWydwcmV2cGFnZV9hcnJvdyddID0gJzwnOwokbGFuZ1snbmV4dHBhZ2VfYXJyb3cnXSA9ICc+JzsKJGxhbmdbJ2xhc3RwYWdlX2Fycm93J10gPSAnPj4nOwokbGFuZ1sncGFnZSddID0gJ1BhZ2luYSc7CiRsYW5nWydvZiddID0gJ3Zhbic7CiRsYW5nWydwcm9tcHRfZ3JvdXBsaXN0J10gPSAnR2VhdXRvcmlzZWVyZGUgRkVVLWdyb2VwZW4nOwokbGFuZ1snaW5mb19ncm91cGxpc3QnXSA9ICdTZWxlY3RlZXIgZWVuIEZFVS1ncm9lcCBkaWUgdG9lZ2FuZyBtYWcgaGViYmVuIHRvdCBiZXN0YW5kZW4gaW4gZGV6ZSBjYXRlZ29yaWUuJzsKJGxhbmdbJ3RpdGxlX3NjYW4nXSA9ICdab2VrIG5hYXIgbmlldXdlIGJlc3RhbmRlbiBpbiBkZXplIGNhdGVnb3JpZSc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscyddID0gJ0NyZcOrZXIgb250YnJla2VuZGUgbWluaWF0dXJlbiBpbiBkZXplIGNhdGVnb3JpZSc7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlscyddID0gJ0NyZcOrZXIgbWluaWF0dXJlbic7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlsJ10gPSAnTWFhayBkZSBtaW5pYXR1dXIgdm9vciBkaXQgYmVzdGFuZCAob3BuaWV1dykgYWFuJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdDcmXDq2VyIG1pbmlhdHV1cic7CiRsYW5nWydlcnJvcl9wYXRoZXJyb3InXSA9ICdLYW4gZGUgbWFwIG5pZXQgb3BlbmVuIChyZWNodGVucHJvYmxlZW0/KSc7CiRsYW5nWyd0aXRsZV9kb3dubG9hZF9jaHVua3NpemUnXSA9ICdHcm9vdHRlIHZhbiBpZWRlciBkb3dubG9hZGRlZWwnOwokbGFuZ1snaW5mb19kb3dubG9hZF9jaHVua3NpemUnXSA9ICdJbnN0ZWxsZW4gdmFuIGRlemUgcGFyYW1ldGVyIGhlZWZ0IGludmxvZWQgb3AgZGUgZG93bmxvYWQgc25lbGhlaWQgZW4ga2FuIHZvb3JkZWVsIGhlYmJlbiBpbiBvbWdldmluZ2VuIG1ldCB3ZWluaWcgZ2VoZXVnZW4nOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdQSFBcJ3MgdmVpbGlnZSBtb2R1cyAoc2FmZSBtb2RlKSBpcyBpbmdlc2NoYWtlbGQuIERpdCBrYW4gcHJvYmxlbWVuIG1ldCBoZXQgdXBsb2FkZW4gdmFuIGJlc3RhbmRlbiB2ZXJvb3J6YWtlbiAocmVjaHRlbikgZW4ga2FuIG9vayBkZSBtb2dlbGlqayB2YW4gZGUgbW9kdWxlIHZlcnN0b3JlbiBvbSBiZXN0YW5kZW4gdGUgdmVyemVuZGVuIGRvb3IgZGUgYmVwZXJraW5nIGVua2VsZSBpbnN0ZWxsaW5nZW4gdGUgb3ZlcnNjaHJpanZlbi4gTmVlbSBjb250YWN0IG9wIG1ldCB1dyBob3N0aW5nIHByb3ZpZGVyIG92ZXIgaGV0IHVpdHNjaGFrZWxlbiB2YW4gZGUgdmVpbGlnZSBtb2R1cy4nOwokbGFuZ1sncGFyYW1fZGV0YWlscGFnZSddID0gJ051dHRpZyBvbSBlZW4gZ2VkZXRhaWxsZWVyZCByYXBwb3J0IHRlIHRvbmVuIG1ldCBlZW4gYW5kZXIgcGFnaW5hIHNqYWJsb29uLiBEZXplIHBhcmFtZXRlciBnZWJydWlrdCBkZSBwYWdpbmEtaWQgb2YgcGFnaW5hLWFsaWFzIHZhbiBlZW4gcGFnaW5hIGRpZSBiZW51dCBkaWVudCB0ZSB3b3JkZW4gb20gaGV0IGRldGFpbCByYXBwb3J0IHRlIHRvbmVuLic7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdFZW4gYm9vbGVhbiBkaWUgYWFuZ2VlZnQgb2YgYmVzdGFuZHNuYW1lbiBlZW4gcHJlZml4IG1vZXRlbiBoZWJiZW4nOwokbGFuZ1sncGFyYW1fcHJlZml4X2ZldSddID0gJ0VlbiBib29sZWFuIHBhcmFtZXRlciBkaWUgYWFuZ2VlZnQgZGF0IGRlIHByZWZpeCB2YW4gZGUgaHVpZGlnZSBhdXRldXIgZ2VicnVpa3QgbW9ldCB3b3JkZW4gb2YsIGFscyBkZXplIG5pZXQgb3BnZWdldmVuIGlzLCBkZSBwcmVmaXggdmFuIGRlIGh1aWRpZ2UgdGlqZCAoaW4gZGVjaGV4IGZvcm1hYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ1NjaGFrZWwgY2FwdGNoYS1vbmRlcnN0ZXVuaW5nIGluIGhldCB1cGxvYWQtZm9ybXVsaWVyIHVpdCAoc3RhbmRhYXJkIGFhbiknOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ0Jld2VyayBoZXQgVXBsb2FkIEZvcm11bGllciBTamFibG9vbic7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnVm9lciBkZSB0ZWtzdCB1aXQgaGV0IHBsYWF0amUgaW4nOwokbGFuZ1snZXJyb3JfY2FwdGNoYW1pc21hdGNoJ10gPSAnSW5nZXZvZXJkZSB0ZWtzdCBrb210IG5pZXQgb3ZlcmVlbiBtZXQgZGllIGluIGhldCBwbGFhdGplJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddID0gJ0NyZcOrZXIgbWluaWF0dXJlbiB2b29yIGJlc3RhbmRlbiBtZXQgZGV6ZSBleHRlbnNpZXMnOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9zaXplJ10gPSAnTWF4aW1hbGUgZ3Jvb3R0ZSAocGl4ZWxzKSB2YW4gZGUgZ2VnZW5lcmVlcmRlIHRodW1ibmFpbHMnOwokbGFuZ1sncHJvbXB0X3VwbG9hZF9pY29uJ10gPSAnVXBsb2FkIGVlbiBpY29vbic7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdEZXplIHRla3N0IHdvcmR0IGdlYnJ1aWt0IGJpaiBoZXQgY3Jlw6tyZW4gdmFuIGVlbiBuaWV1dyBzamFibG9vbiB2YW4gZGl0IHR5cGUnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdTeXN0ZWVtc3RhbmRhYXJkIERldGFpbCBTamFibG9vbic7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdTeXN0ZWVtc3RhbmRhYXJkIFNhbWVudmF0dGluZyBTamFibG9vbic7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZWVtc3RhbmRhYXJkIHVwbG9hZC1mb3JtdWxpZXJzamFibG9vbic7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ1NqYWJsb29uJzsKJGxhbmdbJ3Jlc2V0dG9kZWZhdWx0J10gPSAnSGVyc3RlbCBuYWFyIHN0YW5kYWFyZCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3RlbXBsYXRlJ10gPSAnU2FtZW52YXR0aW5nIFNqYWJsb29uJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZSddID0gJ0RldGFpbCBTamFibG9vbic7CiRsYW5nWydwcm9tcHRfbmFtZSddID0gJ05hYW0nOwokbGFuZ1snbGVnZW5kX3VwbG9hZGZvcm0nXSA9ICdVcGxvYWQgZWVuIGJlc3RhbmQnOwokbGFuZ1snZXJyb3JfbWlzc2luZ3BhcmFtJ10gPSAnRWVuIHZlcnBsaWNodGUgcGFyYW1ldGVyIG9udGJyZWVrdCc7CiRsYW5nWydlcnJvcl9taXNzaW5nbmFtZSddID0gJ0VlbiBuYWFtIHZhbiBoZXQgYmVzdGFuZHN0eXBlIG1vZXQgd29yZGVuIG9wZ2VnZXZlbic7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ1Rlbm1pbnN0ZSDDqcOpbiBiZXN0YW5kc2V4dGVuc2llIG1vZXQgd29yZGVuIG9wZ2VnZXZlbic7CiRsYW5nWydlcnJvcl9taXNzaW5naWNvbiddID0gJ0VlbiBpY29vbiBtb2V0IHdvcmRlbiBvcGdlZ2V2ZW4nOwokbGFuZ1snZXJyb3Jfbm9zdWNocm93J10gPSAnRGUgb3BnZWdldmVuIHJpaiBrb24gbmlldCB3b3JkZW4gZ2V2b25kZW4nOwokbGFuZ1snbmFtZV91bmtub3duJ10gPSAnT25iZWtlbmQnOwokbGFuZ1snZGVzY3JpcHRpb25fdW5rbm93biddID0gJ0Jlc3RhbmRzdHlwZSBiZXNjaHJpanZpbmcgdm9vciBuaWV0LW92ZXJlZW5rb21lbmRlIGJlc3RhbmRlbic7CiRsYW5nWydpbWFnZSddID0gJ1BsYWF0amUnOwokbGFuZ1snaWNvbiddID0gJ0ljb29uJzsKJGxhbmdbJ2V4dGVuc2lvbnMnXSA9ICdCZXN0YW5kc2V4dGVuc2llcyc7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ1ZvZWcgbmlldXcgYmVzdGFuZHN0eXBlIHRvZSc7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnQmVzdGFuZHN0eXBlcyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdFciBpcyBnZWVuIGNhdGVnb3JpZS1pZCBvcGdlZ2V2ZW4nOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeSddID0gJ0VyIGlzIGdlZW4gY2F0ZWdvcmllIG9wZ2VnZXZlbic7CiRsYW5nWydlcnJvcl90ZW1wbGF0ZW5hbWVleGlzdHMnXSA9ICdFciBiZXN0YWF0IGFsIGVlbiBzamFibG9vbiBtZXQgZGV6ZSBuYWFtJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZW5hbWUnXSA9ICdTamFibG9vbm5hYW0nOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnU2phYmxvb24nOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnTWFhayBlZW4gbmlldXcgc2phYmxvb24nOwokbGFuZ1snaGVscF9PbkRvd25sb2FkJ10gPSAnPHA+R2VnZW5lcmVlcmRlIGdlYmV1cnRlbmlzIG5hZGF0IGVlbiBnZWJydWlrZXIga2xhYXIgaXMgbWV0IGRvd25sb2FkZW4gdmFuIGVlbiBiZXN0YW5kPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBsb2FkLWlkPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gQmVzdGFuZHNuYWFtPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIElQLWFkcmVzIHZhbiBkZSBkb3dubG9hZGVyPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25EZWxldGVDYXRlZ29yeSddID0gJzxwPkdlZ2VuZXJlZXJkZSBnZWJldXJ0ZW5pcyBhbHMgZWVuIGNhdGVnb3JpZSBpcyB2ZXJ3aWpkZXJkPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBDYXRlZ29yaWVuYWFtPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQ2F0ZWdvcmllcGFkPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxwPkdlZ2VuZXJlZXJkZSBnZWJldXJ0ZW5pcyBhbHMgZWVuIGNhdGVnb3JpZSBpcyBhYW5nZW1hYWt0PC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBDYXRlZ29yaWVuYWFtPC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIENhdGVnb3JpZWJlc2NocmlqdmluZzwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIENhdGVnb3JpZXBhZDwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFZsYWcgZGllIGFhbmdlZWZ0IG9mIGRlIGNhdGVnb3JpZSBpbiBlZW4gbGlqc3Qga2FuIHdvcmRlbiBvcGdlbm9tZW48L2xpPg0KPC91bD4nOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkdlZ2VuZXJlZXJkZSBnZWJldXJ0ZW5pcyBhbHMgZWVuIGJlc3RhbmQgdmVyd2lqZGVyZCBpcyB2aWEgZGUgYmVoZWVyLSBvZiBkZSBmcm9udGVuZC1pbnRlcmZhY2U8L3A+DQo8aDQ+UGFyYW1ldGVyczwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIE5hYW0gdmFuIGhldCB2ZXJ3aWpkZXJkZSBiZXN0YW5kPC9saT4NCjxsaT48ZW0+aWQ8L2VtPiAtIElEIHZhbiBoZXQgdmVyd2lqZGVyZGUgYmVzdGFuZDwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBJRCB2YW4gZGUgY2F0ZWdvcmllPC9saT4NCjwvdWw+JzsKJGxhbmdbJ2hlbHBfT25VcGxvYWQnXSA9ICc8cD5HZWdlbmVyZWVyZGUgZ2ViZXVydGVuaXMgYWxzIGVlbiBuaWV1dyBiZXN0YW5kIGlzIGdldXBsb2FkIHZpYSBkZSBiZWhlZXItIG9mIGZyb250ZW5kLWludGVyZmFjZTwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+dXBsb2FkX2lkPC9lbT4gLSBUaGUgdXBsb2FkIGlkPC9saT4NCjxsaT48ZW0+Y2F0ZWdvcnk8L2VtPiAtIFRoZSBjYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+Y2F0ZWdvcnlwYXRoPC9lbT4gLSBUaGUgY2F0ZWdvcnkgcGF0aDwvbGk+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIFRoZSBuYW1lIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4NCjxsaT48ZW0+c2l6ZTwvZW0+IC0gVGhlIHNpemUgb2YgdGhlIHVwbG9hZGVkIGZpbGU8L2xpPg0KPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBUaGUgc2hvcnQgZGVzY3JpcHRpb24gZm9yIHRoZSB1cGxvYWRlZCBmaWxlIChtYXkgYmUgZW1wdHkpPC9lbT48L2xpPg0KPGxpPjxlbT5kZXNjcmlwdGlvbjwvZW0+IC0gVGhlIGxvbmcgZGVzY3JpcHRpb24gZm9yIHRoZSB1cGxvYWRlZCBmaWxlIChtYXkgYmUgZW1wdHkpPC9lbT48L2xpPg0KPGxpPjxlbT5hdXRob3I8L2VtPiAtIFRoZSBhdXRob3Igb2YgdGhlIHVwbG9hZGVkIGZpbGUgKGlmIGF2YWlsYWJsZSk8L2VtPjwvbGk+DQo8bGk+PGVtPmlwX2FkZHJlc3M8L2VtPiAtIFRoZSBpbnRlcm5ldCBhZGRyZXNzIG9mIHRoZSBjbGllbnQgdGhhdCB1cGxvYWRlZCB0aGUgZmlsZTwvbGk+DQo8L3VsPic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFZW4gdGFnIGRpZSB3b3JkdCBhYW5nZXJvZXBlbiBhbHMgZWVuIGNhdGVnb3JpZSBpcyB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25jcmVhdGVjYXRlZ29yeSddID0gJ0VlbiB0YWcgZGllIHdvcmR0IGFhbmdlcm9lcGVuIGFscyBlZW4gY2F0ZWdvcmllIGlzIGFhbmdlbWFha3QnOwokbGFuZ1snaW5mb19ldmVudF9vbmRvd25sb2FkJ10gPSAnRWVuIHRhZyBkaWUgd29yZHQgYWFuZ2Vyb2VwZW4gYWxzIGVlbiBiZXN0YW5kIGlzIGdlZG93bmxvYWQnOwokbGFuZ1snaW5mb19ldmVudF9vbnVwbG9hZCddID0gJ0VlbiB0YWcgZGllIHdvcmR0IGFhbmdlcm9lcGVuIGFscyBlZW4gYmVzdGFuZCBpcyBnZcO8cGxvYWQnOwokbGFuZ1snaW5mb19ldmVudF9vbnJlbW92ZSddID0gJ0VlbiB0YWcgZGllIHdvcmR0IGFhbmdlcm9lcGVuIGFscyBlZW4gYmVzdGFuZCBpcyB2ZXJ3aWpkZXJkJzsKJGxhbmdbJ3RpdGxlX3VzZXJ0YWdfb251cGxvYWQnXSA9ICdFZW4gdGFnIGRpZSB3b3JkdCBhYW5nZXJvZXBlbiBhbHMgZGUgdXBsb2FkIHZvbHRvb2lkIGlzJzsKJGxhbmdbJ25vbmUnXSA9ICdHZWVuJzsKJGxhbmdbJ21hdGNoZXNmb3VuZCddID0gJ092ZXJlZW5rb21zdGVuIGdldm9uZGVuJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlcic7CiRsYW5nWyd0aXRsZV9yZWRpcmVjdG9udXBsb2FkJ10gPSAnVmVyd2lqcyBuYWFyIHBhZ2luYS1pZC9hbGlhcyBiaWogZ2VicnVpa2VyLXVwbG9hZCc7CiRsYW5nWydkZXRhaWxzJ10gPSAnRGV0YWlscyc7CiRsYW5nWydjb25maXJtX3ByZWZlcmVuY2VzJ10gPSAnV2VldCB1IHpla2VyIGRhdCBkZSB2b29ya2V1cmVuIGFhbmdlcGFzdCBtb2V0ZW4gd29yZGVuPyc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzdXBsb2FkZWQnXSA9ICdFciB6aWpuIGdlZW4gYmVzdGFuZGVuIGdlw7xwbG9hZCc7CiRsYW5nWydwcm9tcHRfcmVwbGFjZSddID0gJ1N0YSBvdmVyc2NocmlqdmVuIHRvZSc7CiRsYW5nWydpbmZvX3JlcGxhY2UnXSA9ICdWZXJ2YW5nIGllZGVyIGJlc3RhbmQgbWV0IGRlemVsZmRlIG5hYW0gKHZlcmFuZGVydCBkZSBpZCBuaWV0KSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnVG9vbiBnZWVuIGluaXRpw6tsZSByZXN1bHRhdGVuIGFscyBoZXQgZmlsdGVyIGFhbiBzdGFhdCc7CiRsYW5nWydwYXJhbV9rZXknXSA9ICdHZWVmIGVlbiBleHRyYSBtb2R1bGUtc2xldXRlbCBvbSBkZSB1cGxvYWRzIHZlcmRlciB0ZSBjYXRlZ29yaXNlcmVuLiBEZXplIHNsZXV0ZWwga2FuIGVlbiBnZWNvZGVlcmRlIHN0cmluZyB6aWpuIHpvYWxzOiBcJ2Z1c2Vyczp1aWRcJywgZXRjLiBEZXplIHBhcmFtZXRlciBpcyBtZWVzdGFsIGFsbGVlbiBub2RpZyBhbHMgZGUgVXBsb2Fkcy1tb2R1bGUgaW4gZWVuIGFuZGVyZSBtb2R1bGUgd29yZHQgb3BnZW5vbWVuLic7CiRsYW5nWydwYXJhbV9ub2F1dGhvciddID0gJ1ZlcmJlcmcgaGV0IGF1dGV1cnN2ZWxkIHVpdCBoZXQgdXBsb2FkLWZvcm11bGllci4gRGV6ZSBwYXJhbWV0ZXIgaXMgYWxsZWVuIGdlbGRpZyBhbHMgbW9kZT1cJ3VwbG9hZFwnLiBBbHMgZGUgRnJvbnRFbmRVc2Vycy1tb2R1bGUgYWFud2V6aWcgaXMgZW4gZWVuIGdlYnJ1aWtlciBpcyBpbmdlbG9nZCBkYW4gemFsIGVlbiB2ZXJib3JnZW4gdmVsZCBkZSBuYWFtIGJldmF0dGVuIHZhbiBkZSBodWlkaWdlLCBpbmdlbG9nZGUgZ2VicnVpa2VyJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0iaWQiIC0gc3BlY2lmaWNlZXIgZWVuIGVua2VsIGJlc3RhbmQgdm9vciBkZSB1cmwvbGluayBvZiBlbmtlbGUgbW9kdXMgKGJvdmVuc3RhYW5kKSc7CiRsYW5nWydwYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ0dlYnJ1aWsgZWVuIHNqYWJsb29uIG1ldCBkZXplIG5hYW0gdm9vciBoZXQgZ2VkZXRhaWxsZWVyZGUgcmFwcG9ydCc7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ0dlYnJ1aWsgZWVuIHNqYWJsb29uIG1ldCBkZXplIG5hYW0gdm9vciBkaXQgcmFwcG9ydCBvZiBmb3JtdWxpZXIuIERlemUgbW9kdXMgd29yZHQgZ2VicnVpa3Qgb20gdGUgYmVwYWxlbiB3ZWxrZSB0eXBlIHNqYWJsb29uIHZlcnBsaWNodCBpcyBlbiB2ZXJ2b2xnZW5zIHdvcmR0IGdlem9jaHQgb3AgZWVuIG92ZXJlZW5rb21lbmRlIG5hYW0gYmlubmVuIGRhdCB0eXBlJzsKJGxhbmdbJ3BhcmFtX2ZpbHRlciddID0gJ1Rvb24gaGV0IGZpbHRlcmZvcm11bGllcic7CiRsYW5nWydwYXJhbV9ub19pbnRpdGlhbCddID0gJ0FsbGVlbiB6aW52b2wgYWxzIGRlIGZpbHRlcnBhcmFtZXRlciBvcGdlZ2V2ZW4gaXMgb2Ygc3RhbmRhYXJkIGFhbi4gRGV6ZSBwYXJhbWV0ZXIgZ2VlZnQgYWFuIG9mIGRlIGluaXRpw6tsZSByZXN1bHRhdGVuIHRlcnVnZ2VnZXZlbiBtb2V0ZW4gd29yZGVuJzsKJGxhbmdbJ3BhcmFtX2ZpbGV0eXBlcyddID0gJ1Rvb24gYWxsZWVuIGJlc3RhbmRlbiB3YWFydmFuIGhldCB0eXBlIG92ZXJlZW5rb210IG1ldCBkZXplIGtvbW1hZ2VzY2hlaWRlbmxpanN0JzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJzxwPlNvcnRlZXJ2b2xnb3JkZQ0KICA8dWw+DQogIDxsaT48ZW0+ZGF0ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPmRhdGVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgYXV0aG9yPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGF1dGhvcjwvbGk+DQogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgaXAgYWRkcmVzczwvbGk+DQogIDxsaT48ZW0+ZGVzY19hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRlc2NyaXB0aW9uPC9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+DQogIDxsaT48ZW0+ZG93bmxvYWRzX2FzYzwvZW0+IC0gU29ydCBieSBkb3dubG9hZCBjb3VudCBpbiBhc2NlbmRpbmcgb3JkZXIuPC9saT4NCiAgPGxpPjxlbT5kb3dubG9hZHNfZGVzYzwvZW0+IC0gU29ydCBieSBkb3dubG9hZCBjb3VudCBpbiBkZXNjZW5kaW5nIG9yZGVyLjwvbGk+DQogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBSYW5kb20gc29ydCBvcmRlcjwvbGk+DQogIDwvdWw+DQogIDwvcD4nOwokbGFuZ1sncGFyYW1fbGlzdGluZ3RlbXBsYXRlJ10gPSAnU2phYmxvb24gbmEgZG9vcmtsaWtrZW4gdmFuYWYgZGUgQ2F0ZWdvcmllc2FtZW52YXR0aW5ncyBwYWdpbmEnOwokbGFuZ1sncGFyYW1fbGlzdGluZ3NvcnRvcmRlciddID0gJ1NvcnRlZXJ2b2xnb3JkZSAoYWxhIHBhcmFtX3NvcnRvcmRlcikgbmEgZG9vcmtsaWtrZW4gdmFuYWYgZGUgQ2F0ZWdvcmllc2FtZW52YXR0aW5ncyBwYWdpbmEnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICdmaWxlX2V4dGVuc2lvbnM9ImV4dDEsZXh0MixleHQzIg0KPHA+QWxsZWVuIGdlbGRpZyBhbHMgbW9kdXM9dXBsb2FkLiBEZXplIHBhcmFtZXRlciBiZXBlcmt0IGRlIHR5cGUgYmVzdGFuZGVuIGRpZSBrdW5uZW4gd29yZGVuIGdldXBsb2FkLiBEaXQgb3ZlcnNjaHJpamZ0IGllZGVyZSBpbnN0ZWxsaW5nIGluIGRlIG1vZHVsZS12b29ya2V1cmVuLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0iTiINCjxwPkVlbiBwYXJhbWV0ZXIgb20gYWxsZWVuIGRlIGVlcnN0ZSBOIHJlc3VsdGF0ZW4gdmFuIGRlIHF1ZXJ5IHRlIHRvbmVuLiBQYWdpbmVyaW5nIHpvdSBiZXRlciB6aWpuLCBtYWFyIGRpdCB3ZXJrdCBvb2s8L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9Im5hbWUiDQo8cD48Yj5MZXQgb3A6PC9iPiBDYXRlZ29yaWUga2FuICJhbGxlcyIgemlqbiwgd2F0IGVlbiBsaWpzdCBvcGxldmVydCBtZXQgYWxsZSB1cGxvYWRzIHZhbiBhbGxlIDxlbT5vcHNvbWJhcmU8L2VtPiBjYXRlZ29yaWXDq248L3A+JzsKJGxhbmdbJ3BhcmFtX21vZGUnXSA9ICc8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIFRvb24gZWVuIGdlZGV0YWlsbGVlcmRlIGxpanN0IG1ldCBhbGxlIGJlc3RhbmRlbiBpbiBkZXplIGNhdGVnb3JpZTwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBUb29uIGVlbiBmb3JtdWxpZXIgb20gZnJvbnRlbmQtZ2VicnVpa2VycyB0b2UgdGUgc3RhYW4gZWVuIGJlc3RhbmQgdGUgdXBsb2FkZW48L2xpPg0KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gVG9vbiBlZW4gbGluayBuYWFyIGVlbiBiZXN0YW5kPC9saT4NCiAgPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBUb29uIGVlbiBzYW1lbmdldmF0dGUgbGlqc3QgbWV0IGFsbGUgYmVzdGFuZGVuIGluIGRlIGNhdGVnb3JpZTwvbGk+DQogIDxsaT48ZW0+c2luZ2xlPC9lbT4gLSBUb29uIGVlbiBnZWRldGFpbGxlZXJkIHJhcHBvcnQgb3ZlciBlZW4gaW5kaXZpZHVlbGUgdXBsb2FkPC9saT4NCiAgPC91bD4nOwokbGFuZ1sncGFyYW1fc2VsZWN0Zm9ybSddID0gJ0FscyBkZSBcJ3NlbGVjdGVlclwnLW1vZHVzIHdvcmR0IGdlYnJ1aWt0IGJldmF0IGRlemUgcGFyYW1ldGVyIGhldCBmb3JtdWxpZXItaWQgdmFuIGhldCBib3ZlbmxpZ2dlbmRlIGZvcm11bGllciAocGFyZW50KS4gV29yZHQgZ2VicnVpa3QgYmlqIGhldCBkb29yZ2V2ZW4gdmFuIHBhcmFtZXRlcnMnOwokbGFuZ1sncGFyYW1fc2VsZWN0bmFtZSddID0gJ0FscyBkZSBcJ3NlbGVjdGVlclwnLW1vZHVzIHdvcmR0IGdlYnJ1aWt0IHNwZWNpZmljZWVydCBkZXplIHBhcmFtZXRlciBkZSB2ZWxkbmFhbSc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ0FscyBkZSBcJ3NlbGVjdGVlclwnLW1vZHVzIHdvcmR0IGdlYnJ1aWt0IHNwZWNpZmljZWVydCBkZXplIHBhcmFtZXRlciBkZSBzdGFuZGFhcmQgdmVsZHdhYXJkZSc7CiRsYW5nWydwYXJhbV9zZWxlY3Rub25lJ10gPSAnQWxzIGRlIFwnc2VsZWN0ZWVyXCctbW9kdXMgd29yZHQgZ2VicnVpa3Qgc3BlY2lmaWNlZXJ0IGRlemUgcGFyYW1ldGVyIG9mIFwnZ2VlblwnIGVlbiBnZWxkaWdlIGtldXplIGlzLic7CiRsYW5nWydyZXR1cm50b21vZHVsZSddID0gJ0tlZXIgdGVydWcgbmFhciBoZXQgbW9kdWxlLXNjaGVybSc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3JpZXMnXSA9ICdFciB6aWpuIGdlZW4gY2F0ZWdvcmllw6tuIGdlZGVmaW5pZWVyZCc7CiRsYW5nWyd0aXRsZV9lbmZvcmNlZXh0ZW5zaW9ucyddID0gJ0V4dGVuc2llcyBiaWogYWxsZSBnZXVwbG9hZGUgYmVzdGFuZGVuIHppam4gdmVycGxpY2h0JzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdEZXplIGhhbmRlbGluZyBoZXJzdGVsdCBkZSBzamFibG9vbiBuYWFyIGRlIHN5c3RlZW1zdGFuZGFhcmQuIEllZGVyZSB2ZXJhbmRlcmluZyBkaWUgdSBnZW1hYWt0IGhlZWZ0IHphbCB2ZXJsb3JlbiBnYWFuLiBXZWV0IHUgemVrZXIgZGF0IHUgZG9vciB3aWx0IGdhYW4/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ01pbmlhdHV1cic7CiRsYW5nWyduZXd0aHVtYm5haWwnXSA9ICdVcGxvYWQgZWVuIG5pZXV3ZSBtaW5pYXR1dXInOwokbGFuZ1snaW5mb19zdW1tYXJ5J10gPSAnRWVuIGtvcnRlIGJlc2NocmlqdmluZyB2YW4gaGV0IGJlc3RhbmQgKG9wdGlvbmVlbCwgYW5kZXJzIHdvcmR0IGRlIGJlc3RhbmRzbmFhbSB6b25kZXIgZXh0ZW5zaWUgZ2VicnVpa3QpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnluYW1lJ10gPSAnRWVuIGtvcnRlIG5hYW0gdm9vciBkZSBjYXRlZ29yaWUnOwokbGFuZ1snaW5mb19jYXRlZ29yeWRlc2MnXSA9ICdFZW4gYmVzY2hyaWp2aW5nIHZhbiBkZSBjYXRlZ29yaWUnOwokbGFuZ1snaW5mb19jYXRlZ29yeXBhdGgnXSA9ICdEZSBtYXBuYWFtIGJpbm5lbiBkZSB1cGxvYWRzLW1hcCBkaWUgZ2VicnVpa3QgemFsIHdvcmRlbiBvbSBiZXN0YW5kZW4gaW4gZGV6ZSBjYXRlZ29yaWUgaW4gb3AgdGUgc2xhYW4uJzsKJGxhbmdbJ2luZm9fZGVzdG5hbWUnXSA9ICdHZWJydWlrIGhldCBcJ1VwbG9hZCBhbHNcJyB2ZWxkIG9tIGRlIG5hYW0gdmFuIGhldCBiZXN0YW5kIHRpamRlbnMgaGV0IHVwbG9hZGVuIHRlIHZlcmFuZGVyZW4gKGJpanYuIGFuZGVyZS1uYWFtLnBkZikuIExhYXQgbGVlZyBvbSBkZSBiZXN0YWFuZGUgYmVzdGFuZHNuYWFtIHRlIGdlYnJ1aWtlbi4nOwokbGFuZ1snZXJyb3JfY2FudGNyZWF0ZWRpcmVjdG9yeSddID0gJ0tvbiBkZSBtYXAgbmlldCBhYW5tYWtlbic7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ0VyIGtvbiBnZWVuIGluc3RhbnRpZSB2YW4gZGUgQ01TTWFpbGVyLW1vZHVsZSB3b3JkZW4gZ2VtYWFrdCc7CiRsYW5nWyd1cGxvYWRfbm90aWZpY2F0aW9uJ10gPSAnRWVuIG5pZXV3IGJlc3RhbmQgaXMgZ2XDvHBsb2FkJzsKJGxhbmdbJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCddID0gJ1N0dXVyIHVwbG9hZC1zcGVjaWZpY2F0aWVzIG5hYXInOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICdFLW1haWwgc2phYmxvb24nOwokbGFuZ1sndGl0bGVfZHVtbXlfaW5kZXhfaHRtbCddID0gJ0NyZcOrZXIgbGVnZSBpbmRleC5odG1sIGJlc3RhbmRlbiBpbiBpZWRlcmUgbWFwPzxici8+PGVtPkJlc3RhYW5kZSBpbmRleC5odG1sIGJlc3RhbmRlbiBibGlqdmVuIGJlaG91ZGVuPC9lbT4nOwokbGFuZ1snYWJvdXQnXSA9ICdPdmVyJzsKJGxhbmdbJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnXSA9ICdUb2VnYW5nIGdld2VpZ2VyZC4gQ29udHJvbGVlciB1dyByZWNodGVuLic7CiRsYW5nWydlcnJvcl9jb3VsZG5vdHdyaXRlJ10gPSAnS29uIG5pZXQgc2NocmlqdmVuJzsKJGxhbmdbJ2FkZGNhdGVnb3J5J10gPSAnVm9lZyBjYXRlZ29yaWUgdG9lJzsKJGxhbmdbJ2FsbCddID0gJ0FsbGVzJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdXZWV0IHUgaGV0IHpla2VyPyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRldXInOwokbGFuZ1snY2FuY2VsJ10gPSAnQW5udWxlZXInOwokbGFuZ1snY2Fubm90bW9kaWZ5cGF0aCddID0gJyhIZXQgcGFkIGthbiBuaWV0IHdvcmRlbiBhYW5nZXBhc3QpJzsKJGxhbmdbJ2NhdGVnb3JpZXMnXSA9ICdDYXRlZ29yaWXDq24nOwokbGFuZ1snY2F0ZWdvcnknXSA9ICdDYXRlZ29yaWUnOwokbGFuZ1snbWVzc2FnZV9jYXRlZ29yeWFkZGVkJ10gPSAnQ2F0ZWdvcmllIHRvZWdldm9lZ2QnOwokbGFuZ1snZGF0ZSddID0gJ0RhdHVtJzsKJGxhbmdbJ2RhdGV1cGxvYWRlZCddID0gJ1VwbG9hZC1kYXR1bSc7CiRsYW5nWydkZWZhdWx0J10gPSAnU3RhbmRhYXJkZW4nOwokbGFuZ1snZGVsZXRlJ10gPSAnVmVyd2lqZGVyJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnQmVzY2hyaWp2aW5nJzsKJGxhbmdbJ2Rlc3RuYW1lJ10gPSAnVXBsb2FkIGFscyc7CiRsYW5nWydkZXRhaWxfdGVtcGxhdGUnXSA9ICdEZXRhaWxzamFibG9vbic7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnQmVzdGFuZCAlcyBpcyBnZWRvd25sb2FkLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdEb3dubG9hZHMnOwokbGFuZ1snZWRpdCddID0gJ0Jld2Vyayc7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdCZXdlcmsgQ2F0ZWdvcmllJzsKJGxhbmdbJ2VkaXR1cGxvYWQnXSA9ICdCZXdlcmsgVXBsb2FkJzsKJGxhbmdbJ2Vycm9yJ10gPSAnRm91dCEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0VlbiBjYXRlZ29yaWUgZGllIGRpdCBwYWQgZ2VicnVpa3QgKCVzKSBiZXN0YWF0IGFsJzsKJGxhbmdbJ2Vycm9yX3BhdGhpbnVzZSddID0gJ0VlbiBjYXRlZ29yaWUgZGllIGRhdCBwYWQgZ2VicnVpa3QgYmVzdGFhdCBhbCc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0czInXSA9ICdGb3V0OiBDYXRlZ29yaWUgZ2VuYWFtZCAlcyBiZXN0YWF0IGFsJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5ZXhpc3RzJ10gPSAnRm91dDogY2F0ZWdvcmllIGJlc3RhYXQgYWwnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0ZvdXQhIEthbiBnZWVuIGNhdGVnb3JpZSB2ZXJ3aWpkZXJlbiBkaWUgbmlldCBsZWVnIGlzJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdGb3V0OiBjYXRlZ29yaWUgbmlldCBnZXZvbmRlbic7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnRm91dDogRGF0YWJhc2Vmb3V0ISc7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnRm91dDogTGVnZSBjYXRlZ29yaWUhJzsKJGxhbmdbJ2Vycm9yX2VtcHR5cGF0aCddID0gJ0ZvdXQ6IExlZWcgcGFkISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnRm91dCEgQmVzdGFuZCAlcyBiZXN0YWF0IGFsLic7CiRsYW5nWydlcnJvcl9maWxlbm90Zm91bmQnXSA9ICdGb3V0ISBCZXN0YW5kICVzIGlzIG5pZXQgZ2V2b25kZW4uJzsKJGxhbmdbJ2Vycm9yX2luc3VmZmljaWVudHBhcmFtcyddID0gJ0ZvdXQ6IE9udm9sZG9lbmRlIHBhcmFtZXRlcnMgYWFuIGRlIG1vZHVsZSBnZWdldmVuISc7CiRsYW5nWydlcnJvcl9pbnZhbGlkYXV0aG9yJ10gPSAnRm91dDogT25nZWxkaWdlIChvZiBsZWdlKSBhdXRldXIuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRjYXRlZ29yeSddID0gJ0ZvdXQ6IE9uZ2VsZGlnZSAob2YgbGVnZSkgY2F0ZWdvcmllLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdGb3V0OiBPbmdlbGRpZ2UgKG9mIGxlZ2UpIGJlc2NocmlqdmluZy4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGZpbGUnXSA9ICdGb3V0OiBPbmdlbGRpZ2UgKG9mIGxlZ2UpIGJlc3RhbmRzbmFhbS4nOwokbGFuZ1snZXJyb3JfaW52YWxpZHVwbG9hZGZpbGVuYW1lJ10gPSAnRm91dDogQmVzdGFuZGVuIG1vZXQgZGllIG5hYW0gKHdhYXJzY2hpam5saWprIGRlIGV4dGVuc2llKSB6aWpuIG5pZXQgdG9lZ2VzdGFhbiAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdGb3V0OiBPbmdlbGRpZ2UgdXBsb2FkLWlkJzsKJGxhbmdbJ2Vycm9yX25vZmlsZXMnXSA9ICdGb3V0OiBHZWVuIG92ZXJlZW5rb21zdGlnZSBiZXN0YW5kZW4hJzsKJGxhbmdbJ2ZpbGVzJ10gPSAnQmVzdGFuZGVuJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnSGVyc3RlbCBzcGF0aWVzJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ0Jlc3RhbmRlbiAoVXBsb2Fkcy1tb2R1bGUpJzsKJGxhbmdbJ2lkJ10gPSAnSUQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWxlIHZlcnNpZSAlcyAgaXMgZ2XDr25zdGFsbGVlcmQuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUC1hZHJlcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0VlbiBtb2R1bGUgb20gZ2VicnVpa2VycyBiZXN0YW5kZW4gdGUgbGF0ZW4gdXBsb2FkZW4gZW4gb20gZGUgZ2V1cGxvYWRlIGJlc3RhbmRlbiB0ZSBiZWhlcmVuLic7CiRsYW5nWyduYW1lJ10gPSAnTmFhbSc7CiRsYW5nWydyZW5hbWVtZXNzYWdlJ10gPSAnVmVyYW5kZXIgaGllciBkZSBuYWFtIG9tIGRlIGJlc3RhbmRzbmFhbSB0ZSB2ZXJhbmRlcmVuLic7CiRsYW5nWydwYXRoJ10gPSAnUGFkJzsKJGxhbmdbJ3BhdGhtZXNzYWdlJ10gPSAnVmVyYW5kZXIgZGUgY2F0ZWdvcmllIGhpZXIgb20gaGV0IGJlc3RhbmQgbmFhciBlZW4gYW5kZXJlIG1hcCB0ZSB2ZXJwbGFhdHNlbic7CiRsYW5nWydwYXRoaW51cGxvYWRzJ10gPSAnKFJlbGF0aWVmIHRlbiBvcHppY2h0ZSB2YW4gZGUgdXBsb2Fkcy1tYXApJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+RGUgVXBsb2Fkcy1tb2R1bGUgaXMgbWV0IHN1Y2NlcyBnZcOvbnN0YWxsZWVyZC4gWm9yZyBkYXQgaGV0ICAiTWFuYWdlIFVwbG9hZHMiIHJlY2h0IGlzIHRvZWdla2VuZCE8L3A+DQo8cD48c3Ryb25nPldhYXJzY2h1d2luZzwvc3Ryb25nPiAtIEhldCBqdWlzdGUgZ2VkcmFnIHZhbiBkZXplIG1vZHVsZSBpcyBhZmhhbmtlbGlqayB2YW4gdmVsZSBwaHAtY29uZmlndXJhdGlldmFyaWFiZWxlbi4gRGV6ZSBiZXZhdHRlbiA8ZW0+KG1hYXIgemlqbiBuaWV0IGJlcGVya3QgdG90KTwvZW0+LCBwaHBcJ3MgbWVtb3J5X2xpbWl0LCBzYWZlX21vZGUsIGZpbGVfdXBsb2FkcywgdXBsb2Fkc19tYXhfZmlsZXNpemUgZW4gbWF4X2V4ZWN1dGlvbl90aW1lLiBEZXplIHZhcmlhYmVsZW4gbW9ldGVuIG1vZ2VsaWprIHdvcmRlbiBhYW5nZXBhc3Qgb20gZGV6ZSBtb2R1bGUgY29ycmVjdCB0ZSBsYXRlbiB3ZXJrZW4uIEhldCB3b3JkdCBnZWFkdmlzZWVyZCBkYXQgdSBzYW1lbiBtZXQgdXcgc3lzdGVlbWJlaGVlcmRlciBvZiBob3N0IHByb3ZpZGVyIGRlemUgaW5zdGVsbGluZ2VuIGFmc3RlbXQgb3AgdXcgd2Vuc2VuLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ0RlIFVwbG9hZHMtbW9kdWxlIGlzIG1ldCBzdWNjZXMgdmVyd2lqZGVyZC4gRXIgemlqbiBnZWVuIGJlc3RhbmRlbiB2ZXJ3aWpkZXJkIHVpdCBkZSB1cGxvYWRzLW1hcC4nOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdWb29ya2V1cmVuJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsZXZvb3JrZXVyZW4gemlqbiBiZXdhYXJkLic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZXNjJ10gPSAnQmVzY2hyaWp2aW5nJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWxpc3RhYmxlJ10gPSAnQmVzdGFuZGVuIGluIGRlemUgbWFwIGt1bm5lbiB3b3JkZW4gd2VlcmdlZ2V2ZW4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bmFtZSddID0gJ0NhdGVnb3JpZW5hYW0nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlciBwYWQnOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ1ZlcndpamRlciBjYXRlZ29yaWVtYXA/JzsKJGxhbmdbJ3Byb21wdF9tYXhfdXBsb2Fkc2l6ZSddID0gJ01heGltYWFsIHRvZWdlc3RhbmUgYmVzdGFuZHNncm9vdHRlIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdHZWxkaWdlIHVwbG9hZCBleHRlbnRpZXMnOwokbGFuZ1snc2NhbiddID0gJ1pvZWsnOwokbGFuZ1snc2VsZWN0Y2F0ZWdvcnknXSA9ICdTZWxlY3RlZXIgY2F0ZWdvcmllJzsKJGxhbmdbJ3NpemUnXSA9ICdHcm9vdHRlJzsKJGxhbmdbJ3NpemVrYiddID0gJ0dyb290dGUgKEtiKSc7CiRsYW5nWydzdWJtaXQnXSA9ICdWZXJ6ZW5kJzsKJGxhbmdbJ3N1bW1hcnlfdGVtcGxhdGUnXSA9ICdTYW1lbnZhdHRpbmcgc2phYmxvbmVuJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdPbXNjaHJpanZpbmcnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdVcGxvYWRzLW1vZHVsZSc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdNb2R1bGViZWhlZXJwYW5lZWwnOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnTW9kdWxlaW5zdGVsbGluZ2VuJzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnU2x1aXQgZGV6ZSBzdWJuZXR0ZW4gdWl0IHZhbiBkZSBzdGF0aXN0aWVrZW4nOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0dlbGRpZ2UgZXh0ZW5zaWVzJzsKJGxhbmdbJ3VuaW5zdGFsbGVkJ10gPSAnTW9kdWxlIGdlZGXDr25zdGFsbGVlcmQuJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWxlIGdlw7xwZ3JhZGUgbmFhciB2ZXJzaWUgJXMuJzsKJGxhbmdbJ3VwbG9hZCddID0gJ1VwbG9hZCc7CiRsYW5nWyd1cGxvYWRlZCddID0gJ0Jlc3RhbmQgJXMgaXMgZ2XDvHBsb2FkIGRvb3IgJXMuJzsKJGxhbmdbJ3JlcGxhY2VkJ10gPSAnQmVzdGFuZCAlcyBpcyB2ZXJ2YW5nZW4gZG9vciAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0Jlc3RhbmQgJXMgaXMgdmVyd2lqZGVyZC4nOwokbGFuZ1sndXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ1VwbG9hZHNqYWJsb29uJzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnR2VicnVpa2Vyc25hYW0nOwokbGFuZ1snd2FybmluZ19kZWxldGVjYXRlZ29yeSddID0gJ1dhYXJzY2h1d2luZzogd2VlcyB2b29yemljaHRpZyBtZXQgaGV0IHZlcndpamRlcmVuIHZhbiBjYXRlZ29yaWXDq24uIEVyIGt1bm5lbiBiZXN0YW5kZW4gdmVybG9yZW4gZ2Fhbic7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/pl_PL.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3BhZ2VsaW1pdCddID0gJ1BsaWsmb2FjdXRlO3cgbmEgc3Ryb27EmSc7CiRsYW5nWyd2aWV3J10gPSAnUG9rYcW8IHRlbiBwbGlrJzsKJGxhbmdbJ2VkaXRfdGhpc19maWxlJ10gPSAnRWRpdCBUaGlzIEZpZWxkJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdDenkgc3p1a2HEhyBwbGlrJm9hY3V0ZTt3IGF1dG9tYXR5Y3puaWUgdyB0ZWoga2F0ZWdvcmlpPyc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ1doZW4gYWNjZXNzZWQgZnJvbSB0aGUgZnJvbnQgZW5kIHRoaXMgY2F0ZWdvcnkgaXMgYXV0b21hdGljYWxseSBzY2FubmVkIGZvciBuZXcgZmlsZXMnOwokbGFuZ1sncHJvbXB0X3RsX2FjY2VzcyddID0gJ1RpbWUgTGltaXRlZCBBY2Nlc3MnOwokbGFuZ1sncHJvbXB0X2FsbG93X3VwbG9hZF9zZW5kZmlsZSddID0gJ0FsbG93IHNlbmRpbmcgZmlsZXMgaW1tZWRpYXRlbHkgb24gYWRtaW4gdXBsb2FkJzsKJGxhbmdbJ21zZ19hdXRvX2RlbGV0ZV9maWxlJ10gPSAnQXV0b21hdGljYWxseSBkZWxldGVkIGV4cGlyZWQgZmlsZTogJXMnOwokbGFuZ1snbXNnX2F1dG9fZGVsZXRlX2ZpbGVfZmFpbGVkJ10gPSAnUGVybWlzc2lvbnMgcHJvYmxlbSwgYXV0byBkZWxldGUgb2YgJXMgZmFpbGVkJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlfZXhwaXJlc19ocnMnXSA9ICdTcGVjaWZ5IGEgbnVtYmVyIG9mIGhvdXJzIGJlZm9yZSBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5IGNhbiBiZSBkZWxldGVkLiAgVXNlIGEgdmFsdWUgb2YgMCB0byBpbmRpY2F0ZSB0aGF0IGZpbGVzIHNob3VsZCBub3QgYmUgZGVsZXRlZCc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlfZXhwaXJlc19ocnMnXSA9ICdOdW1iZXIgb2YgaG91cnMgdW50aWwgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSBhcmUgYXV0b21hdGljYWxseSBkZWxldGVkJzsKJGxhbmdbJ2luZm9fZGZsdF9jYXRlZ29yeV9leHBpcnknXSA9ICdUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgbmV3IGNhdGVnb3JpZXMgdGhhdCBzcGVjaWZpZXMgaG93IGxvbmcgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSBleGlzdCBiZWZvcmUgdGhleSBhcmUgYXV0b21hdGljYWxseSBkZWxldGVkLiAgVXNlIGEgdmFsdWUgb2YgMCB0byBpbmRpY2F0ZSBubyBkZWxldGlvbic7CiRsYW5nWyd0aXRsZV9jYXRlZ29yeV9leHBpcnknXSA9ICdDYXRlZ29yeSBleHBpcnkgcGVyaW9kIDxlbT4oaHJzKTwvZW0+JzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdBdXRob3JpemVkIHVzZXJzIHdpbGwgaGF2ZSBwZXJtaXNzaW9uIHRvIGRlbGV0ZSB0aGVzZSBmaWxlcy4gIFRoaXMgbWVhbnMgdGhhdCBhIHVybCB3aWxsIGJlIHByb3ZpZGVkIGluIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZXMgdG8gYWxsb3cgZGVsZXRpbmcgb2YgdGhlIGZpbGUuICBBIHdlYnNpdGUgZGV2ZWxvcGVyIGNhbiB1c2UgYXBwcm9wcmlhdGUgc21hcnR5IGxvZ2ljIHRvIHNob3cgYSBsaW5rIHRvIGF1dGhvcml6ZWQgdXNlcnMuJzsKJGxhbmdbJ2NvcHlfZmlsZXMnXSA9ICdLb3BpdWogcGxpa2knOwokbGFuZ1snZXJyb3JfZmlsZXRvb2xhcmdlJ10gPSAnVGhlIGZpbGUgeW91IGF0dGVtcHRlZCB0byB1cGxvYWRlIGlzIGxhcmdlciB0aGFuIHRoZSBDTVNNUyBtYXhpbXVtIHVwbG9hZCBmaWxlIHNpemUnOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVjYXRlZ29yeSddID0gJ05hIHBld25vIHVzdW7EhcSHIHTEmSBrYXRlZ29yacSZPyc7CiRsYW5nWydlcnJvcl9kZWxldGUnXSA9ICdBbiBpdGVtIGNvdW5kIG5vdCBiZSBkZWxldGVkICglcyknOwokbGFuZ1snY29uZmlybV9jYXRfbXVsdGlhY3Rpb24nXSA9ICdDenkgbmEgcGV3bm8gcHJ6ZXByb3dhZHppxIcgYWtjasSZIGRsYSB6YXpuYWN6b255Y2gga2F0ZWdvcmlpPyc7CiRsYW5nWydlcnJvcl9ub3RoaW5nX3NlbGVjdGVkJ10gPSAnQsWCxIVkOiBOaWMgbmllIHphem5hY3pvbm8nOwokbGFuZ1snd2l0aF9zZWxlY3RlZCddID0gJ1dpdGggU2VsZWN0ZWQ6JzsKJGxhbmdbJ2Vycm9yX3JlcGxhY2VfbWlzbWF0Y2hlZF9maWxlZXh0J10gPSAnV2hlbiByZXBsYWNpbmcgYSBmaWxlLCB5b3UgbXVzdCB1cGxvYWQgYSBmaWxlIG9mIHRoZSBzYW1lIGV4YWN0IHR5cGUgKGJ5IGZpbGUgZXh0ZW5zaW9uKS4gIFRoZSBmaWxlIHlvdSBzZWxlY3RlZCBkb2VzIG5vdCBtYXRjaCB0aGF0IG9mIHRoZSBvcmlnaW5hbCBmaWxlLic7CiRsYW5nWydyZXBsYWNlJ10gPSAnWmFzdMSFcCc7CiRsYW5nWydpbmZvX3JlcGxhY2VmaWxlJ10gPSAnWW91IG1heSB1cGxvYWQgYSByZXBsYWNlbWVudCBmaWxlLCBpZiB0aGUgZmlsZSBpcyBhbiBpbWFnZSB0eXBlLCBhbmQgeW91IGhhdmUgbm90IHNwZWNpZmllZCBhIHJlcGxhY2VtZW50IHRodW1ibmFpbCwgYSBuZXcgdGh1bWJuYWlsIHdpbGwgYmUgZ2VuZXJhdGVkJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlZmlsZSddID0gJ1VwbG9hZCByZXBsYWNlbWVudCBmaWxlJzsKJGxhbmdbJ3RpdGxlX2ZpeHNwYWNlcyddID0gJ0ZpeCBzcGFjZXMgaW4gdGhlIGZpbGVuYW1lJzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0NhdGVnb3J5IHN1Y2Nlc3NmdWxseSBjb3BpZWQnOwokbGFuZ1snZXJyb3JfZHVwbGljYXRlcGF0aCddID0gJ1BsZWFzZSBzcGVjaWZ5IGEgZGlyZWN0b3J5IG5hbWUgdGhhdCBpcyBkaWZmZXJlbnQgZnJvbSB0aGUgc291cmNlLCBhbmQgaXMgbm90IGFscmVhZHkgaW4gdXNlJzsKJGxhbmdbJ29wZXJhdGlvbl9jYW5jZWxsZWQnXSA9ICdPcGVyYXRpb24gQ2FuY2VsbGVkJzsKJGxhbmdbJ3NvdXJjZSddID0gJ1NvdXJjZSc7CiRsYW5nWydkZXN0aW5hdGlvbiddID0gJ0Rlc3RpbmF0aW9uJzsKJGxhbmdbJ3Byb21wdF9jb3B5X2ZpbGVzJ10gPSAnQ29weSBjYXRlZ29yeSBGaWxlcyc7CiRsYW5nWydpbmZvX2NvcHlfZmlsZXMnXSA9ICdDb3B5IHRoZSBmaWxlcyBmcm9tIHRoZSBzb3VyY2UgY2F0ZWdvcnkgdG8gdGhlIGRlc3RpbmF0aW9uIGNhdGVnb3J5JzsKJGxhbmdbJ2V4dHJhJ10gPSAnRXh0cmEnOwokbGFuZ1snY29weSddID0gJ0NvcHknOwokbGFuZ1snc2VsZWN0b25lJ10gPSAnU2VsZWN0IE9uZSc7CiRsYW5nWydhdXRvd2F0ZXJtYXJrJ10gPSAnQXV0b21hdGljYWxsIHBsYWNlIHdhdGVybWFya3Mgb24gaW1hZ2VzJzsKJGxhbmdbJ2ltYWdlX3NldHRpbmdzJ10gPSAnSW1hZ2UgU2V0dGluZ3MnOwokbGFuZ1sncHJvbXB0X2dldGZpbGVfcmVzdWx0cGFnZSddID0gJ1BhZ2UgdG8gdXNlIGZvciBlcnJvcnMgb3Igb3RoZXIgbWVzc2FnZXMgcmVsYXRlZCB0byBmaWxlIGRvd25sb2FkaW5nJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfa2V5J10gPSAnVGhlIHVwbG9hZCBrZXkgc3BlY2lmaWVkIGlzIGludmFsaWQgKG1heWJlIGl0IGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIGRvd25sb2FkIGNhcGFjaXR5IG9yIGhhcyBleHBpcmVkKSc7CiRsYW5nWydkZmx0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICd7JHNpdGVuYW1lfSAtIFV6eXNrYcWCZcWbIGRvc3TEmXAgZG8geyRlbnRyeS0+bmFtZXxzdHJpcF90YWdzfSBuYSBva3JlxZtsb255IGN6YXMnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICdTdWJqZWN0IGZvciBlbWFpbCBjcmVhdGVkIHdoZW4gc2VuZGluZyBhIHRpbWUgbGltaXRlZCBVUkwnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2F1dG9kZWxldGUnXSA9ICdBdXRvIGRlbGV0ZSBleHBpcmVkIGVudHJpZXMgYWZ0ZXIgTiBob3VycyA8ZW0+KHNwZWNpZnkgMCB0byBkaXNhYmxlIGF1dG9kZWxldGUpPC9lbT46JzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zZW5kaXQnXSA9ICdTZW5kIHRoaXMgdXJsIHRvIHRoZSBkZXNpZ25hdGVkIGVtYWlsIGFkZHJlc3M/JzsKJGxhbmdbJ3VybF9rZXknXSA9ICdVUkwgS2V5JzsKJGxhbmdbJ2NyZWF0ZWQnXSA9ICdVdHdvcnpvbm8nOwokbGFuZ1snZXhwaXJlcyddID0gJ1d5Z2FzYSc7CiRsYW5nWydhZGRlZGl0X3RpbWVsaW1pdGVkX2tleSddID0gJ0FkZC9FZGl0IFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1sndGltZV9saW1pdGVkX2tleV9hZGRlZCddID0gJ1RpbWUgTGltaXRlZCBLZXkgQWRkZWQnOwokbGFuZ1snbnVtX2hvdXJzJ10gPSAnTnVtYmVyIG9mIEhvdXJzJzsKJGxhbmdbJ251bV9kb3dubG9hZHMnXSA9ICdOdW1iZXIgb2YgRG93bmxvYWRzJzsKJGxhbmdbJ2VtYWlsX2FkZHJlc3MnXSA9ICdFbWFpbCBBZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ0EgcmVxdWlyZWQgdmFsdWUgaXMgbWlzc2luZyBvciBpbnZhbGlkOiAlcyc7CiRsYW5nWydhZGRfdGltZWxpbWl0ZWRfa2V5J10gPSAnQWRkIFRpbWUgTGltaXRlZCBLZXknOwokbGFuZ1snZmlsZV9pbmZvMiddID0gJ0ZpbGUgJXMgKGlkPSVkKSc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ1NwZWNpZnkgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHRpbWVzIHRoYXQgYSBmaWxlIGlkZW50aWZpZWQgYnkgYSBwYXJ0aWN1bGFyIGtleSBjYW4gYmUgZG93bmxvYWRlZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfZG93bmxvYWRzJ10gPSAnRGVmYXVsdCBOdW1iZXIgb2YgRG93bmxvYWRzJzsKJGxhbmdbJ2luZm9fdGltZWxpbWl0ZWRfaG91cnMnXSA9ICdTcGVjaWZ5IHRoZSBkZWZhdWx0IG51bWJlciBvZiBob3VycyB0aGF0IGEgdGltZSBsaW1pdGVkIGtleSBpcyB2YWxpZCBmb3IuICBTcGVjaWZ5IDAgZm9yIHVubGltaXRlZCc7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfaG91cnMnXSA9ICdOdW1iZXIgb2YgaG91cnMgYSBUaW1lIExpbWl0ZWQgS2V5IGlzIHZhbGlkIGZvcic7CiRsYW5nWyd0aW1lbGltaXRlZF91cmxfc2V0dGluZ3MnXSA9ICdUaW1lIExpbWl0ZWQgS2V5IFNldHRpbmdzJzsKJGxhbmdbJ21hbmFnZV90aW1lbGltaXRlZCddID0gJ01hbmFnZSBUaW1lIExpbWl0ZWQgQWNjZXNzJzsKJGxhbmdbJ3VwbG9hZGluZ19zZXR0aW5ncyddID0gJ0ZpbGUgVXBsb2FkIFNldHRpbmdzJzsKJGxhbmdbJ2dlbmVyYWxfc2V0dGluZ3MnXSA9ICdHxYImb2FjdXRlO3duZSB1c3Rhd2llbmlhJzsKJGxhbmdbJ3RodW1ibmFpbF9zZXR0aW5ncyddID0gJ0dlbmVyb3dhbmllIG1pbmlhdHVyZWsnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdQYWdlIHRvIHJlZGlyZWN0IHRvIGFmdGVyIHNlbmRpbmcgYSBmaWxlJzsKJGxhbmdbJ2xibF9iYWNrJ10gPSAnV3Imb2FjdXRlO8SHJzsKJGxhbmdbJ2xibF90ZW1wbGF0ZXMnXSA9ICdNb2RpZnkgVGVtcGxhdGVzJzsKJGxhbmdbJ3Byb21wdF9wdWJsaWNfZmllbGQnXSA9ICdGaWVsZCBpcyBwdWJsaWMgPGVtPihjYW4gYmUgdmlld2VkIGJ5IHNpdGUgdmlzaXRvcnMpPC9lbT4nOwokbGFuZ1sndXBsb2FkX2VkaXRlZCddID0gJ0ZpbGUgRGV0YWlscyBFZGl0ZWQgb24gJXMnOwokbGFuZ1snaW5mb190aHVtYm5haWwnXSA9ICdPcGNqb25hbG55IHBsaWsgbWluaWF0dXJ5JzsKJGxhbmdbJ3VwbG9hZF9maWxlJ10gPSAnV2dyYWogbm93eSBwbGlrJzsKJGxhbmdbJ21zZ19maWVsZF9kZWxldGVkJ10gPSAnRmllbGQgZGVsZXRlZCc7CiRsYW5nWydhc2tfZGVsZXRlX2ZpZWxkJ10gPSAnQXJlIHlvdSBzdXJlIHlvdSB3YW50IHRvIGRlbGV0ZSB0aGlzIGZpZWxkIGRlZmluaXRpb24gYW5kIGFsbCBhc3NvY2lhdGVkIHZhbHVlcz8nOwokbGFuZ1sneWVzJ10gPSAnVGFrJzsKJGxhbmdbJ25vJ10gPSAnTmllJzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXBlJzsKJGxhbmdbJ2ZpZWxkdHlwZV9tdWx0aXNlbGVjdCddID0gJ011bHRpc2VsZWN0IExpc3QnOwokbGFuZ1snZmllbGR0eXBlX2Ryb3Bkb3duJ10gPSAnRHJvcGRvd24gTGlzdCc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGFyZWEnXSA9ICdUZXh0IEFyZWEnOwokbGFuZ1snZmllbGR0eXBlX3RleHRpbnB1dCddID0gJ1RleHQgSW5wdXQnOwokbGFuZ1sncHJvbXB0X3VzZV93eXNpd3lnJ10gPSAnVXNlIHRoZSB3eXNpd3lnIHdoZW4gZWRpdGluZyB0aGUgdmFsdWUgZm9yIHRoaXMgZmllbGQnOwokbGFuZ1sncHJvbXB0X2RlZmF1bHRfY29udGVudCddID0gJ0RlZmF1bHQgY29udGVudCBmb3IgdGV4dCBhcmVhJzsKJGxhbmdbJ3Byb21wdF9kcm9wZG93bl9vcHRpb25zJ10gPSAnT3B0aW9ucyAob25lIGVudHJ5IHBlciBsaW5lKSc7CiRsYW5nWydwcm9tcHRfZmllbGRfbWF4bGVuZ3RoJ10gPSAnRmllbGQgTWF4aW11bSBMZW5ndGgnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0ZpZWxkIExlbmd0aCc7CiRsYW5nWydwcm9tcHRfZmllbGRfdHlwZSddID0gJ0ZpZWxkIFR5cGUnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX25hbWUnXSA9ICdGaWVsZCBOYW1lJzsKJGxhbmdbJ3RpdGxlX2FkZF9maWVsZCddID0gJ0FkZCBvciBFZGl0IGEgRmllbGQgRGVmaW5pdGlvbic7CiRsYW5nWydmaWVsZF9kZWZpbml0aW9ucyddID0gJ0ZpZWxkIERlZmluaXRpb25zJzsKJGxhbmdbJ3Byb21wdF9hZGRfZmllbGQnXSA9ICdBZGQgYSBGaWVsZCBEZWZpbml0aW9uJzsKJGxhbmdbJ3BhcmFtX2FjdGlvbiddID0gJ1NwZWNpZmllcyB0aGUgYmVoYXZpb3VyIG9mIHRoZSBtb2R1bGUgdGFnLiAgUG9zc2libGUgdmFsdWVzIGFyZTogZGVmYXVsdCAtICh0aGUgZGVmYWZhdWx0IGJlaGF2aW9yKSwgZGV0YWlsIC0gdG8gZGlzcGxheSBhIGRldGFpbCB2aWV3IG9mIGEgc2luZ2xlIGZpbGUgYmFzZWQgb24gdGhlIHVwbG9hZF9pZCwgYW5kIHlvdXNlbmRpdCAtIHRvIGRpc3BsYXkgYSBmb3JtIHRvIGFsbG93IHVwbG9hZGluZyBhIGZpbGUsIGFuZCBzZW5kaW5nIGl0IHRvIG51bWVyb3VzIGFkZHJlc3NlcyBpbiBvbmUgc3RlcCc7CiRsYW5nWydwYXJhbV9zZW5kZmlsZXBhZ2UnXSA9ICdTcGVjaWZ5IHRoZSBwYWdlIGlkIG9yIGFsaWFzIG9mIGEgcGFnZSB0aGF0IHNob3VsZCBiZSB1c2VkIGZvciB0aGUgc2VuZCBhIGZpbGUgZm9ybSc7CiRsYW5nWydmaWxlX3VwbG9hZGVkJ10gPSAnUGxpayB6b3N0YcWCIHdncmFueSc7CiRsYW5nWyd0byddID0gJ0RvJzsKJGxhbmdbJ3RpdGxlX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdBZGQgb3IgRWRpdCBhICZxdW90O1lvdSBTZW5kIEl0JnF1b3Q7IEZvcm0gVGVtcGxhdGUnOwokbGFuZ1sneW91c2VuZGl0Zm9ybV90ZW1wbGF0ZSddID0gJ1lvdVNlbmRJdCBGb3JtIFRlbXBsYXRlcyc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW0gZGVmYXVsdCAmcXVvdDt5b3Ugc2VuZCBpdCZxdW90OyB0ZW1wbGF0ZSc7CiRsYW5nWydtc2dfZmlsZV9zZW50J10gPSAnQSBtZXNzYWdlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIHNlbGVjdGVkIGFkZHJlc3NlcyB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZSBmaWxlIGFuZCBob3cgdG8gcmV0cmlldmUgaXQuJzsKJGxhbmdbJ2Vycm9yX25vYWRkcmVzc2VzJ10gPSAnWW91IG11c3Qgc3VwcGx5IGF0IGxlYXN0IG9uZSBkZXN0aW5hdGlvbiBhZGRyZXNzJzsKJGxhbmdbJ2Vycm9yX25vc3ViamVjdCddID0gJ1lvdSBtdXN0IHN1cHBseSBhIHN1YmplY3QnOwokbGFuZ1snc3ViamVjdCddID0gJ1N1YmplY3QnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVwYWdlJ10gPSAnUGFnZSB0byB1c2UgZm9yIHRpbWUgbGltaXRlZCBvciAmcXVvdDtZb3VTZW5kSXQmcXVvdDsgVVJMUyc7CiRsYW5nWydmaWxlX2luZm8nXSA9ICdGaWxlIEluZm8nOwokbGFuZ1snc2VuZCddID0gJ1d5xZtsaWonOwokbGFuZ1snbm90ZXMnXSA9ICdOb3Rlcyc7CiRsYW5nWydhZGRyZXNzZWVzJ10gPSAnU2VuZCBpbmZvcm1hdGlvbiBhYm91dCB0aGlzIGZpbGUgdG8nOwokbGFuZ1sncHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlJ10gPSAnJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgRW1haWwgVGVtcGxhdGUnOwokbGFuZ1sndGl0bGVfc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnQWRkIG9yIEVkaXQgYSAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ3NlbmRmaWxlZm9ybV90ZW1wbGF0ZSddID0gJyZxdW90O1NlbmQgYSBGaWxlJnF1b3Q7IEZvcm0gVGVtcGxhdGVzJzsKJGxhbmdbJ3Byb21wdF9ub3RpZnlfZW1haWxfdGVtcGxhdGUnXSA9ICdQb3dpYWRvbWllbmllIG8gd2dyYW5pdSBwb3ByemV6IGVtYWlsJzsKJGxhbmdbJ3RpdGxlX3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0J10gPSAnU3lzdGVtIGRlZmF1bHQgJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgZm9ybSB0ZW1wbGF0ZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZWxldGFibGUnXSA9ICdQbGlraSB6IHRlaiBrYXRlZ29yaWkgbW9nxIUgem9zdGHEhyB1c3VuacSZdGUnOwokbGFuZ1sndGl0bGVfYWxsb3dfZGVsZXRlJ10gPSAnQWxsb3cgZGVsZXRpb24gb2YgZmlsZXMgZnJvbSB0aGUgZnJvbnRlbmQnOwokbGFuZ1snZGVmYXVsdF90ZW1wbGF0ZXMnXSA9ICdEb215xZtsbmUgc3phYmxvbnknOwokbGFuZ1snZmlyc3RwYWdlJ10gPSAnUGllcndzemEgc3Ryb25hJzsKJGxhbmdbJ3ByZXZwYWdlJ10gPSAnUG9wcnplZG5pYSBzdHJvbmEnOwokbGFuZ1snbmV4dHBhZ2UnXSA9ICdOYXN0xJlwbmEgc3Ryb25hJzsKJGxhbmdbJ2xhc3RwYWdlJ10gPSAnT3N0YXRuaWEgc3Ryb25hJzsKJGxhbmdbJ2ZpcnN0cGFnZV9hcnJvdyddID0gJzw8JzsKJGxhbmdbJ3ByZXZwYWdlX2Fycm93J10gPSAnPCc7CiRsYW5nWyduZXh0cGFnZV9hcnJvdyddID0gJz4nOwokbGFuZ1snbGFzdHBhZ2VfYXJyb3cnXSA9ICc+Pic7CiRsYW5nWydwYWdlJ10gPSAnU3Ryb25hJzsKJGxhbmdbJ29mJ10gPSAneic7CiRsYW5nWydwcm9tcHRfZ3JvdXBsaXN0J10gPSAnWmV6d2FsYWogZ3J1cG9tIEZFVSAnOwokbGFuZ1snaW5mb19ncm91cGxpc3QnXSA9ICdXeWJpZXJ6IGdydXB5IEZFVSwga3Qmb2FjdXRlO3JlIG1vZ8SFIHVwbG9hZG93YcSHIHBsaWtpLiBOaWUgd3licmF6bmllIMW8YWRuZWogZ3J1cHkgemV6d2FsYSBuYSB1cGxvYWQgd3N6eXN0a2ltIGdydXBvbSc7CiRsYW5nWyd0aXRsZV9zY2FuJ10gPSAnU2thbnVqIHcgcG9zenVraXdhbml1IG5vd3ljaCBwbGlrJm9hY3V0ZTt3IHcga2F0ZWdvcmlpJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWxzJ10gPSAnU3R3Jm9hY3V0ZTtyeiBicmFrdWrEhWNlIG1pbmlhdHVyeSBkbGEgcGxpayZvYWN1dGU7dyB3IHRlaiBsYXRlZ3ByaWknOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdTdHcmb2FjdXRlO3J6IG1pbmlhdHVyeSc7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlsJ10gPSAnU3R3Jm9hY3V0ZTtyei9vZMWbd2llxbwgbWluaWF0dXLEmSBkbGEgdGVnbyBwbGlrdSc7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlsJ10gPSAnU3R3Jm9hY3V0ZTtyeiBtaW5pYXR1csSZJzsKJGxhbmdbJ2Vycm9yX3BhdGhlcnJvciddID0gJ05pZSBtb8W8bmEgb3R3b3J6ecSHIGthdGFsb2d1IChwcmJsZW0geiB1cHJhd25pZW5pYW1pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1Jvem1pYXIga2HFvGRlZ28gxZtjacSFZ2FuZWdvIGJsb2t1JzsKJGxhbmdbJ2luZm9fZG93bmxvYWRfY2h1bmtzaXplJ10gPSAnWm1pYW5hIHRlZ28gcGFyYW1ldHJ1IGLEmWR6aWUgbWlhxYJhIHdwxYJ5dyBuYSBzenlia2/Fm8SHIMWbY2nEhWdhbmlhIHBsaWt1LCBhbGUgbW/FvGUgcG9tJm9hY3V0ZTtjIHcga29uZmlndXJhY2phY2ggeiBtbmllanN6xIUgaWxvxZtjacSFIGRvc3TEmXBuZWogcGFtacSZY2knOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdTYWZlIG1vZGUgdyBQSFAgamVzdCB3xYLEhWN6b25lLiBNb8W8ZSB0byBwb3dvZG93YcSHIHByb2JsZW15IHogdXBsb2FkZW0gcGxpayZvYWN1dGU7dyAodXByYXduaWVuaWEpLCBhIHRha8W8ZSB6ZSDFm2NpxIVnYW5pZW0gKGJyYWsgdXByYXduaWXFhCBkbyB6bWlhbnkgcGFyYW1ldHImb2FjdXRlO3cgcGhwLmluaSkuIFNrb250YWt0dWogc2nEmSB6ZSBzd29pbSBhZG1pbmlzdHJhdG9yZW0gaSB6YXB5dGFqIG8gbW/FvGxpd2/Fm8SHIHd5xYLEhWN6ZW5pYSB0ZWdvIHRyeWJ1Lic7CiRsYW5nWydwYXJhbV9kZXRhaWxwYWdlJ10gPSAnUHJ6eWRhdG5lIGRvIHd5xZt3aWV0bGFuaWEgcmFwb3J0dSBwcnp5IHXFvHljaXUgciZvYWN1dGU7xbxueWNoIHN6YWJsb24mb2FjdXRlO3cuIE1vxbxlc3ogdHUgd3N0YXdpxIcgSUQgc3Ryb255IGx1YiBqZWogYWxpYXMuJzsKJGxhbmdbJ3BhcmFtX3ByZWZpeCddID0gJ1ptaWVubmEgd3NrYXp1asSFY2EgY3p5IGRvIG5hencgcGxpayZvYWN1dGU7dyBwb3dpbmllbiBiecSHIGRvZGFueSBwcmVmaWtzLic7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnUGFyYW1ldHIga3Qmb2FjdXRlO3J5IHdza2F6dWplLCBjenkgcHJlZmlrcyBwb3dpbmluZW4gYnnEhyB3emnEmXR5IHogZGFueWNoIGF1dG9yYSB1cGxvYWR1LCBjenkgdGXFvCAoamXFm2xpIG5pYyBuaWUgcG9kYW5vKSwgb2JsaWN6b255IHplIHpuYWN6bmlrYSBha3R1YWxuZWdvIGN6YXN1Lic7CiRsYW5nWydwYXJhbV9ub2NhcHRjaGEnXSA9ICdXecWCxIVjeiBvYnPFgnVnxJkgQ2FwdGNoYSB3IGZvcm11bGFyenUgdXBsb2FkdSAod8WCxIVjem9uZSBkb215xZtsbmllKSc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnRWR5dHVqIHN6YWJsb24gZm9ybXVsYXJ6YSB1cGxvYWR1JzsKJGxhbmdbJ2NhcHRjaGFfdGl0bGUnXSA9ICdXcGlzeiB0ZWtzdCB3ecWbd2lldGxhbnkgdyB0eW0gb2JyYXprdSc7CiRsYW5nWydlcnJvcl9jYXB0Y2hhbWlzbWF0Y2gnXSA9ICdXcGlzYW55IHRla3N0IG5pZSBwYXN1amUgZG8gd3nFm3dpZXRsYW5lZ28gb2JyYXprYSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdTdHcmb2FjdXRlO3J6IG1pbmlhdHVyeSBkbGEgcGxpayZvYWN1dGU7dyB6IHR5bWkgcm96c3plcnplbmlhbWknOwokbGFuZ1sndGl0bGVfYXV0b3RodW1ibmFpbF9zaXplJ10gPSAnTWFrc3ltYWxueSByb3ptaWFyIG1pbmlhdHVyeSAodyBwaWtzZWxhY2gpICc7CiRsYW5nWydwcm9tcHRfdXBsb2FkX2ljb24nXSA9ICdaYcWCYWR1aiBpa29uxJknOwokbGFuZ1snaW5mb19zeXNkZWZhdWx0J10gPSAnVGVuIHRla3N0IGplc3QgdcW8eXdhbnkgcG9kY3phcyB0d29yemVuaWEgbm93ZWdvIHN6YWJsb251IHRlZ28gdHlwdSc7CiRsYW5nWyd0aXRsZV9kZXRhaWxycHRfc3lzZGVmYXVsdCddID0gJ0RvbXnFm2xueSBzemFibG9uIGRsYSBzemN6ZWcmb2FjdXRlO8WCb3dlZ28gcmFwb3J0dSc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdEb215xZtsbnkgc3phYmxvbiBkbGEgcG9kc3Vtb3d1asSFY2VnbyByYXBvcnR1JzsKJGxhbmdbJ3RpdGxlX3VwbG9hZGZvcm1fc3lzZGVmYXVsdCddID0gJ0RvbXnFm2xueSBzemFibG9uIGRsYSBmb3JtdWxhcnphIHVwbG9hZHUnOwokbGFuZ1sndGVtcGxhdGUnXSA9ICdTemFibG9uJzsKJGxhbmdbJ3Jlc2V0dG9kZWZhdWx0J10gPSAnUHJ6eXdyJm9hY3V0ZTvEhyBkb215xZtsbmUnOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF90ZW1wbGF0ZSddID0gJ1N6YWJsb24gcmFwb3J0dSBwb2RzdW1vd3VqxIVjZWdvJzsKJGxhbmdbJ3RpdGxlX2RldGFpbHJwdF90ZW1wbGF0ZSddID0gJ1N6YWJsb24gcmFwb3J0dSBzemN6ZWcmb2FjdXRlO8WCb3dlZ28nOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdOYXp3YSc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdCddID0gJ0RvbXnFm2xueSc7CiRsYW5nWydsZWdlbmRfdXBsb2FkZm9ybSddID0gJ1phxYJhZHVqIHBsaWsnOwokbGFuZ1snZXJyb3JfbWlzc2luZ3BhcmFtJ10gPSAnQnJhayB3eW1hZ2FuZWdvIHBhcmFtZXRydSc7CiRsYW5nWydlcnJvcl9taXNzaW5nbmFtZSddID0gJ05hendhIHR5cHUgcGxpa3UgbXVzaSBiecSHIHBvZGFuYSc7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ0NvbmFqbW5pZWogamVkbm8gcm96c3plcnplbmllIG11c2kgYnnEhyBwb2RhbmUnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdNdXNpc3ogcG9kYcSHIGlrb27EmSc7CiRsYW5nWydlcnJvcl9ub3N1Y2hyb3cnXSA9ICdOaWUgbW/FvG5hIHpuYWxlxbrEhyB3aWVyc3phJzsKJGxhbmdbJ25hbWVfdW5rbm93biddID0gJ05pZXpuYW55JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uX3Vua25vd24nXSA9ICdPcGlzIHR5cHUgcGxpa3UgZGxhIG5pZXBhc3VqxIVjeWNoIHBsaWsmb2FjdXRlO3cnOwokbGFuZ1snaW1hZ2UnXSA9ICdPYnJhemVrJzsKJGxhbmdbJ2ljb24nXSA9ICdJa29uYSc7CiRsYW5nWydleHRlbnNpb25zJ10gPSAnUm96c3plcnplbmlhIG5hencgcGxpayZvYWN1dGU7dyc7CiRsYW5nWydhZGRmaWxldHlwZSddID0gJ0RvZGFqIG5vd3kgdHlwIHBsaWt1JzsKJGxhbmdbJ2ZpbGVfdHlwZXMnXSA9ICdUeXB5IHBsaWsmb2FjdXRlO3cnOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeWlkJ10gPSAnQnJhayBJRCBrYXRlZ29yaWknOwokbGFuZ1snZXJyb3Jfbm9jYXRlZ29yeSddID0gJ0JyYWsgSUQga2F0ZWdvcmlpJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJ1N6YWJsb24geiB0YWvEhSBuYXp3xIUganXFvCBpc3RuaWVqZSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGVuYW1lJ10gPSAnTmF6d2Egc3phYmxvbnUnOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlJ10gPSAnU3phYmxvbic7CiRsYW5nWydwcm9tcHRfbmV3dGVtcGxhdGUnXSA9ICdTdHcmb2FjdXRlO3J6IG5vd3kgc3phYmxvbic7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIHVzZXIgZmluaXNoZXMgZG93bmxvYWRpbmcgYSBmaWxlPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBsb2FkIElEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsZSBuYW1lPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIFRoZSBJUCBBZGRyZXNzIG9mIHRoZSBkb3dubG9hZGVyPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkRlbGV0ZUNhdGVnb3J5J10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBEZWxldGVkPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBDYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQ2F0ZWdvcnkgcGF0aDwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgQ3JlYXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBjYXRlZ29yeSBkZXNjcmlwdGlvbjwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFRoZSBjYXRlZ29yeSBwYXRoPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQSBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGNhdGVnb3J5IGlzIGxpc3RhYmxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQgdmlhIHRoZSBhZG1pbiBvciBmcm9udGVuZCBpbnRlcmZhY2VzPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gVGhlIGNhdGVnb3J5IG5hbWU8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgdXBsb2FkZWQgZmlsZTwvbGk+DQo8bGk+PGVtPnNpemU8L2VtPiAtIFRoZSBzaXplIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4NCjxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gVGhlIHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBUaGUgYXV0aG9yIG9mIHRoZSB1cGxvYWRlZCBmaWxlIChpZiBhdmFpbGFibGUpPC9lbT48L2xpPg0KPGxpPjxlbT5pcF9hZGRyZXNzPC9lbT4gLSBUaGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRoYXQgdXBsb2FkZWQgdGhlIGZpbGU8L2xpPg0KPC91bD4NCic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGNhdGVnb3J5IGlzIGRlbGV0ZWQnOwokbGFuZ1snaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5J10gPSAnRXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBjcmVhdGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25kb3dubG9hZCddID0gJ0V2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyBkb3dubG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIG5ldyBmaWxlIGlzIHVwbG9hZGVkJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdFdmVudCBnZW5lcmF0ZWQgd2hlbiBhIGZpbGUgaXMgcmVtb3ZlZCc7CiRsYW5nWyd0aXRsZV91c2VydGFnX29udXBsb2FkJ10gPSAnWm5hY3puaWsgdcW8eXRrb3duaWthIHd5d2/Fgnl3YW55IGdkeSDFgmFkb3dhbmllIHBsaWt1IHNpxJkgemFrb8WEY3p5JzsKJGxhbmdbJ25vbmUnXSA9ICdCcmFrJzsKJGxhbmdbJ21hdGNoZXNmb3VuZCddID0gJ1puYWxlemlvbm8nOwokbGFuZ1snZmlsdGVyJ10gPSAnRmlsdHInOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ1ByemVraWVydWogZG8gc3Ryb255IHBvIHphxYJhZG93YW5pdSBwbGlrdSBwcnpleiB1xbx5dGtvd25pa2EnOwokbGFuZ1snZGV0YWlscyddID0gJ1N6Y3plZyZvYWN1dGU7xYJ5JzsKJGxhbmdbJ2NvbmZpcm1fcHJlZmVyZW5jZXMnXSA9ICdDenkgbmFwZXdubyBjaGNlc3ogem1pZW5pxIcgdXN0YXdpZW5pYT8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnTmllIHphxYJhZG93YW5lZ28gxbxhZG55Y2ggcGxpayZvYWN1dGU7dy4nOwokbGFuZ1sncHJvbXB0X3JlcGxhY2UnXSA9ICdQb3p3Jm9hY3V0ZTtsIG5hIG5hZHBpc3l3YW5pZSBwbGlrJm9hY3V0ZTt3JzsKJGxhbmdbJ2luZm9fcmVwbGFjZSddID0gJ05hZHBpc3VqZSBwbGlrIHogdMSFIHNhbcSFIG5henfEhSAoYWxlIG5pZSB6bWllbmlhIElEKSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnTmllIHd5xZt3aWV0bGFqIMW8YWRueWNoIHdzdMSZcG55Y2ggd3luaWsmb2FjdXRlO3cgZ2R5IGZpbHRyIGplc3Qgd8WCxIVjem9ueSc7CiRsYW5nWydwYXJhbV9rZXknXSA9ICdQb2RhaiBkb2RhdGtvd3kgcGFyYW1ldHIsIGt0Jm9hY3V0ZTtyeXBvendvbGkgem9yZ2FuaXpvd2HEhyBwbGlraS4gVGVuIHBhcmFtZXRyIG1vxbxlIGJ5xIcgbnAuIGNpxIVnaWVtICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7IGl0cC4gVGVuIHBhcmFtZXRyIHp3eWtsZSBqZXN0IHBvdHJ6ZWJueSBwcnp5IHXFvHl3YW5pdSBtb2R1xYJ1IFVwbG9hZHMgcHJ6ZXogaW5uZSBtb2R1xYJ5Lic7CiRsYW5nWydwYXJhbV9ub2F1dGhvciddID0gJ1VrcnlqIHBvbGUgYXV0b3JhIHogZm9ybXVsYXJ6YSB1cGxvYWR1LiBUZW4gcGFyYW1ldHIgbWEgemFzdG9zb3dhbmllIHR5bGtvIHByenkgbW9kZT0mIzAzOTt1cGxvYWQmIzAzOTsuIEdkeSBtb2R1xYIgRnJvbnRFbmRVc2VycyBqZXN0IHphaW5zdGFsb3dhbnkgaSB1xbx5dGtvd25payBGRVUgamVzdCB6YWxvZ293YW55LCB1a3J5dGUgcG9sZSB6b3N0YW5pZSB3eXBlxYJuaW9uZSBuYXp3xIUgbG9nb3dhbmlhIHRlZ28gdcW8eXRrb3duaWthLic7CiRsYW5nWydwYXJhbV91cGxvYWRfaWQnXSA9ICd1cGxvYWRfaWQ9JnF1b3Q7aWQmcXVvdDsgLSBzcGVjaWZ5IGEgc2luZ2xlIGZpbGUgZm9yIHRoZSB1cmwvbGluayBvciBzaW5nbGUgbW9kZXMgKGFib3ZlKSc7CiRsYW5nWydwYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ1VzZSBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGZvciB0aGUgZGV0YWlsZWQgcmVwb3J0Lic7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ1VzZSBhIHRlbXBsYXRlIHdpdGggdGhpcyBuYW1lIGZvciB0aGlzIHJlcG9ydCBvciBmb3JtLiAgVGhlIG1vZGUgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hhdCB0eXBlIG9mIHRlbXBsYXRlIGlzIHJlcXVpcmVyZCwgYW5kIHRoZW4gYSBuYW1lIG1hdGNoIGlzIHBlcmZvcm1lZCB3aXRoaW4gdGhhdCB0eXBlLic7CiRsYW5nWydwYXJhbV9maWx0ZXInXSA9ICdEaXNwbGF5IHRoZSBmaWx0ZXJpbmcgZm9ybSc7CiRsYW5nWydwYXJhbV9ub19pbnRpdGlhbCddID0gJ09ubHkgdXNlZnVsIHdoZW4gdGhlIGZpbHRlciBwYXJhbWV0ZXIgaXMgc3VwcGxpZWQsIG9yIG9uIGJ5IGRlZmF1bHQsIHRoaXMgcGFyYW1ldGVyIGluZGljYXRlcyB3ZXRoZXIgaW5pdGlhbCByZXN1bHRzIHNob3VsZCBiZSByZXR1cm5lZCc7CiRsYW5nWydwYXJhbV9maWxldHlwZXMnXSA9ICdEaXNwbGF5IG9ubHkgZmlsZXMgd2hvc2UgdHlwZSBtYXRjaGVzIHRoaXMgY29tbWEgc2VwYXJhdGVkIGxpc3QnOwokbGFuZ1sncGFyYW1fc29ydG9yZGVyJ10gPSAnICA8cD5Tb3J0IE9yZGVycw0KICA8dWw+DQogIDxsaT48ZW0+ZGF0ZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPmRhdGVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGRhdGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5uYW1lX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBuYW1lPC9saT4NCiAgPGxpPjxlbT5zaXplX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgc2l6ZTwvbGk+DQogIDxsaT48ZW0+ZGVzY19hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGRlc2NyaXB0aW9uPC9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBkZXNjcmlwdGlvbjwvbGk+DQogIDxsaT48ZW0+YXV0aG9yX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgYXV0aG9yPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGF1dGhvcjwvbGk+DQogIDxsaT48ZW0+aXBfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgaXAgYWRkcmVzczwvbGk+DQogIDxsaT48ZW0+cmFuZG9tPC9lbT4gLSBSYW5kb20gc29ydCBvcmRlcjwvbGk+DQogIDwvdWw+DQogIDwvcD4nOwokbGFuZ1sncGFyYW1fbGlzdGluZ3RlbXBsYXRlJ10gPSAnVGVtcGxhdGUgdG8gdXNlIGZvciBjYXRlZ29yeSBsaXN0aW5ncyBhZnRlciBjbGlja3Rocm91Z2ggZnJvbSBDYXRlZ29yeSBTdW1tYXJ5IHBhZ2UnOwokbGFuZ1sncGFyYW1fbGlzdGluZ3NvcnRvcmRlciddID0gJ1NvcnQgb3JkZXIgKGFsYSBwYXJhbV9zb3J0b3JkZXIpIHRvIHVzZSBmb3IgY2F0ZWdvcnkgbGlzdGluZ3MgYWZ0ZXIgY2xpY2t0aHJvdWdoIGZyb20gQ2F0ZWdvcnkgU3VtbWFyeSBwYWdlJzsKJGxhbmdbJ3BhcmFtX2ZpbGVleHRlbnNpb25zJ10gPSAnIGZpbGVfZXh0ZW5zaW9ucz0mcXVvdDtleHQxLGV4dDIsZXh0MyZxdW90Ow0KPHA+VcW8eWNpZSB0eWxrbyBraWVkeSBtb2RlPXVwbG9hZCwgdGVuIHBhcmFtZXRyIG9rcmXFm2xhIHR5cHUgcGxpayZvYWN1dGU7dywga3Qmb2FjdXRlO3JlIG1vxbxuYSB1cGxvYWRvd2HEhy4gVGVuIHBhcmFtZXRyIG5hZHBpc3VqZSB1c3Rhd2llbmlhIHcgcHJlZmVyZW5jamFjaCBtb2R1xYJ1LjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0mcXVvdDtOJnF1b3Q7PHA+T2tyZcWbbCBOIHBpZXJ3c3p5Y2ggd3luaWsmb2FjdXRlO3cgemFweXRhbmlhLiA8L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnDQpjYXRlZ29yeT0mcXVvdDtuYW1lJnF1b3Q7DQo8cD48Yj5Ob3RlOjwvYj4gQ2F0ZWdvcnkgY2FuIGJlICZxdW90O2FsbCZxdW90Oywgd2hpY2ggd2lsbCBsaXN0IGFsbCBvZiB0aGUgdXBsb2FkcyBmcm9tIGFsbCA8ZW0+bGlzdGFibGU8L2VtPiBjYXRlZ29yaWVzPC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIFd5xZt3aWV0bGEgc3pjemVnJm9hY3V0ZTvFgm93eSByYXBvcmQgZGxhIHBvamVkeW5jemVnbyB1cGxvYWR1LjwvbGk+DQogIDxsaT48ZW0+c2luZ2xlPC9lbT4gLSBBbGlhcyBkbGEgdHJ5YnUgc3pjemVnJm9hY3V0ZTvFgm93ZWdvLjwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBXecWbd2lldGwgZm9ybXVsYXJ6IGJ5IHplendvbGnEhyB1xbx5dGtvd25pa293aSB3Z3JhxIcgcGxpazwvbGk+DQogIDxsaT48ZW0+dXJsIDxpPmx1YjwvaT4gbGluazwvZW0+IC0gV3nFm3dpZXRsIGxpbmsgZG8gcGxpa3U8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIFd5xZt3aWV0bCBvZyZvYWN1dGU7bG7EhSBsaXN0xJkgd3N6eXN0a2ljaCBwbGlrJm9hY3V0ZTt3IHogZGFuZWoga2F0ZWdvcmlpPC9saT4NCiAgPC91bD4nOwokbGFuZ1sncGFyYW1fc2VsZWN0Zm9ybSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyB0aGUgZm9ybWlkIG9mIHRoZSBwYXJlbnQgZm9ybS4gIFVzZWQgdG8gaGFuZGxlIHBhcmFtZXRlciBwYXNzaW5nJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5hbWUnXSA9ICd3aGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgZmllbGQgdmFsdWUnOwokbGFuZ1sncGFyYW1fc2VsZWN0bm9uZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2V0aGVyICYjMDM5O25vbmUmIzAzOTsgaXMgYSB2YWxpZCBjaG9pY2UuJzsKJGxhbmdbJ3JldHVybnRvbW9kdWxlJ10gPSAnV3Imb2FjdXRlO8SHIGRvIG1vZHXFgnUgcGFuZWxhJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ05JZSBtYSB6ZGVmaW5pb3dhbnljaCBrYXRlZ29yaWknOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdXeW1hZ2FqLCBhYnkgd3N6eXN0a2llIMWCYWRvd2FuZSBwbGlraSBtaWHFgnkgcm96c3plcnplbmllJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdUYSBvcGVyYWNqYSBwcnp5d3Imb2FjdXRlO2NpIGRvbXnFm2xueSBzYWJsb24uIFdzenlzdGtpZSB6bWlhbnkgZG9rb25hbmUgcHJ6ZXogY2llYmllIGLEmWTEhSBzdHJhY29uZS4gTmFwZXdubyBrb250eW51b3dhxIc/JzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ01pbmlhdHVyYSc7CiRsYW5nWyduZXd0aHVtYm5haWwnXSA9ICdaYcWCYWR1aiBub3fEhSBtaW5pYXR1csSZJzsKJGxhbmdbJ2luZm9fc3VtbWFyeSddID0gJ0tyJm9hY3V0ZTt0a2kgb3BpcyBwbGlrdSAoamXFm2xpIHB1c3R5IG5hendhIHBsaWt1IGJleiByb3pzemVyemVuaWEgamVzdCB1xbx5d2FuYSknOwokbGFuZ1snaW5mb19jYXRlZ29yeW5hbWUnXSA9ICdLciZvYWN1dGU7dGthIG5hendhIGthdGVnb3JpaSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ09waXMga2F0ZWdvcmlpJzsKJGxhbmdbJ2luZm9fY2F0ZWdvcnlwYXRoJ10gPSAnTmF6d2Ega2F0YWxvZ3Ugd2V3bsSFdHJ6IC91cGxvYWRzLCBrdCZvYWN1dGU7cnkgYsSZZHppZSB1xbx5dHkgZG8gcHJ6ZWNob3d5d2FuaWEgcGxpayZvYWN1dGU7dyAoamXFm2xpIG5pZSBpc3RuaWVqZSB0byBtb8W8ZSBiecSHIHN0d29yem9ueSknOwokbGFuZ1snaW5mb19kZXN0bmFtZSddID0gJ1XFvHlqIHBvbGEgJiMwMzk7WmHFgmFkdWogamFrbyYjMDM5OyBhYnkgem1pZW5pxIcgbmF6d8SZIHBsaWt1IHBvIHVwbG9hZHppZS4gUG96b3N0YXcgcHVzdGUgYWJ5IHphY2hvd2HEhyBvcnlnaW5hbG7EhSBuYXp3xJknOwokbGFuZ1snZXJyb3JfY2FudGNyZWF0ZWRpcmVjdG9yeSddID0gJ05pZSBtb8W8bmEgc3R3b3J6ecSHIGthdGFsb2d1JzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnTmllIG1vxbxuYSB6bmFsZcW6xIcgbW9kdcWCdSBDTVNNYWlsZXInOwokbGFuZ1sndXBsb2FkX25vdGlmaWNhdGlvbiddID0gJ05vd3kgcGxpayB6b3N0YcWCIHphxYJhZG93YW55JzsKJGxhbmdbJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCddID0gJ1d5xZtsaWogaW5mb3JtYWNqxJkgbyB6YcWCYWRvd2FuaXUgbm93ZWdvIHBsaWt1IGRvJzsKJGxhbmdbJ2VtYWlsX3RlbXBsYXRlJ10gPSAnU3phYmxvbiBlLW1haWxhJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdTdHcmb2FjdXRlO3J6IHB1c3R5IHBsaWsgaW5kZXguaHRtbCB3IGthxbxkeW0ga2F0YWxvZ3UuPGJyIC8+SXN0bmllasSFY2UgcGxpa2kgaW5kZXguaHRtbCB6b3N0YW7EhSB6YWNob3dhbmUnOwokbGFuZ1snYWJvdXQnXSA9ICdJbmZvcm1hY2phJzsKJGxhbmdbJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnXSA9ICdEb3N0xJlwIHphYnJvbmlvbnkuIFNwcmF3ZMW6IHN3b2plIHVwcmF3bmllbmlhLic7CiRsYW5nWydlcnJvcl9jb3VsZG5vdHdyaXRlJ10gPSAnTmllIG1vxbxuYSB6YXBpc2HEhyc7CiRsYW5nWydhZGRjYXRlZ29yeSddID0gJ0RvZGFqIGthdGVnb3JpxJknOwokbGFuZ1snYWxsJ10gPSAnV3N6eXN0a2llJzsKJGxhbmdbJ2FyZXlvdXN1cmUnXSA9ICdKZXN0ZcWbIHBld255Pyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRvcic7CiRsYW5nWydjYW5jZWwnXSA9ICdBbnVsdWonOwokbGFuZ1snY2Fubm90bW9kaWZ5cGF0aCddID0gJ8WaY2llxbxrYSBuaWUgbW/FvGUgYnnEhyB6bWllbmlvbmEnOwokbGFuZ1snY2F0ZWdvcmllcyddID0gJ0thdGVnb3JpZSc7CiRsYW5nWydjYXRlZ29yeSddID0gJ0thdGVnb3JpYSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdLYXRlZ29yaWEgem9zdGHFgmEgZG9kYW5hJzsKJGxhbmdbJ2RhdGUnXSA9ICdEYXRhJzsKJGxhbmdbJ2RhdGV1cGxvYWRlZCddID0gJ0RhdGEgemHFgmFkb3dhbmlhJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdEb215xZtsbmUnOwokbGFuZ1snZGVsZXRlJ10gPSAnU2thc3VqJzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnT3Bpcyc7CiRsYW5nWydkZXN0bmFtZSddID0gJ1phxYJhZHVqIGpha28nOwokbGFuZ1snZGV0YWlsX3RlbXBsYXRlJ10gPSAnU3phYmxvbnkgc3pjemVnJm9hY3V0ZTvFgm93ZSc7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnUGxpayAlcyB6b3N0YcWCIMWbY2nEhWduacSZdHkuJzsKJGxhbmdbJ2Rvd25sb2FkcyddID0gJ8WaY2nEhWduacSZxIcnOwokbGFuZ1snZWRpdCddID0gJ0VkeXR1aic7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdFZHl0dWoga2F0ZWdvcmnEmSc7CiRsYW5nWydlZGl0dXBsb2FkJ10gPSAnRWR5dHVqIHVwbG9hZCc7CiRsYW5nWydlcnJvciddID0gJ0LFgsSFZCEnOwokbGFuZ1snZXJyb3JfcGF0aGludXNlMiddID0gJ0thdGVnb3JpYSB1xbx5d2FqxIVjYSDFm2NpZcW8a2kgKCVzKSBqdcW8IGlzdG5pZWplJzsKJGxhbmdbJ2Vycm9yX3BhdGhpbnVzZSddID0gJ0thdGVnb3JpYSB1xbx5d2FqxIVjYSB0ZWdvIGthdGFsb2d1IGp1xbwgaXN0bmllamUnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMyJ10gPSAnQsWCxIVkOiBLYXRlZ29yaWEgbyBuYXp3aWUgJXMganXFvCBpc3RuaWVqZSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0cyddID0gJ0LFgsSFZDogS2F0ZWdvcmlhIGp1xbwgaXN0bmllamUnOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlub3RlbXB0eSddID0gJ0LFgsSFZDogTmllIG1vxbxuYSBza2Fzb3dhxIcgbmllcHVzdGVqIGthdGVnb3JpaSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGZvdW5kJ10gPSAnQsWCxIVkOiBOaWUgem5hbGV6aW9uIGthdGVnb3JpaSc7CiRsYW5nWydlcnJvcl9kYmVycm9yJ10gPSAnQsWCxIVkIGJhenkgZGFueWNoISc7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnQsWCxIVkOiBLYXRlZ29yaWEgamVzdCBwdXN0YSEnOwokbGFuZ1snZXJyb3JfZW1wdHlwYXRoJ10gPSAnQsWCxIVkOiDFmmNpZcW8a2EgamVzdCBwdXN0YSEnOwokbGFuZ1snZXJyb3JfZmlsZWV4aXN0cyddID0gJ0LFgsSFZDogUGxpayAlcyBqdcW8IGlzdG5pZWplLic7CiRsYW5nWydlcnJvcl9maWxlbm90Zm91bmQnXSA9ICdCxYLEhWQ6IFBsaWsgJSBuaWUgem9zdGHFgiBvZG5hbGV6aW9ueS4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnQsWCxIVkOiBOaWV3eXN0YXJjemFqxIVjYSBsaWN6YmEgcGFyYW1ldHImb2FjdXRlO3chJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRhdXRob3InXSA9ICdCxYLEhWQ6IE5pZXByYXdpZMWCb3d5IGx1YiBwdXN0eSBhdXRvci4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnQsWCxIVkOiBOaWVwcmF3aWTFgm93YSBsdWIgcHVzdGEga2F0ZWdvcmlhLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdCxYLEhWQ6IE5pZXByYXdpZMWCb3d5IGx1YiBwdXN0eSBvcGlzLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZmlsZSddID0gJ0LFgsSFZDogTmllcHJhd2lkxYJvd2EgbHViIHB1c3RhIG5hendhIHBsaWt1Lic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkZmlsZW5hbWUnXSA9ICdCxYLEhWQ6IFBsaWtpIHogdHltIHJvenN6ZXJ6ZW5pZW0gc8SFIG5pZWRvendvbG9uZSAoJXMpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkaWQnXSA9ICdCxYLEhWQ6IE5pZXByYXdpZMWCb3dlIElEIHVwbG9hZHUnOwokbGFuZ1snZXJyb3Jfbm9maWxlcyddID0gJ0LFgsSFZDogbmllIHpuYWxlemlvbm8gcGFzdWrEhWN5Y2ggcGxpayZvYWN1dGU7dyc7CiRsYW5nWydmaWxlcyddID0gJ1BsaWtpJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnTmFwcmF3IHNwYWNqZSc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdaYXJ6xIVkemVuaWEgemHFgmFkb3dhbnltaSBwbGlrYW1pIEZFVSc7CiRsYW5nWydoZWxwJ10gPSAnPGgzPldoYXQgRG9lcyBUaGlzIERvPzwvaDM+DQo8cD5JdCBpcyBhIG1vZHVsZSBmb3IgYWxsb3dpbmcgcGVvcGxlIHRvIHVwbG9hZCBhbmQgZG93bmxvYWQgZmlsZXMgdG8gYW5kIGZyb20geW91ciBzaXRlLiAgSXQga2VlcHMgdHJhY2sgb2Ygd2hvIHVwbG9hZGVkIGEgZmlsZSwgYW5kIHdobyBoYXMgZG93bmxvYWRlZCBpdC4gIEFzIHdlbGwsIHlvdSBjYW4gc29ydCBmaWxlcyBpbnRvIGNhdGVnb3JpZXMsIGFuZCBtYW5hZ2UgdGhlIGZpbGVzIHRoYXQgd2VyZSB1cGxvYWRlZCBsaWtlIGV2ZXJ5IGFkbWluaXN0cmF0b3Igd291bGQgZG88L3A+IA0KPGgzPkhvdyBEbyBJIFVzZSBJdDwvaDM+DQo8cD5UbyB1c2UgdGhpcyBtb2R1bGUsIHRvIGFsbG93IHVzZXJzIHRvIHVwbG9hZCBmaWxlcyB0byB5b3VyIHNpdGUsIHlvdSBzaG91bGQgaW5zdGFsbCB0aGUgbW9kdWxlLCBhbmQgdGhlbiBjcmVhdGUgb25lIG9yIG1vcmUgY2F0ZWdvcmllcyAoYS5rLmEpIGRpcmVjdG9yaWVzIGZvciB0aGUgdXBsb2FkZWQgZmlsZXMgdG8gZ28gaW50by4gVGhlbiBhZGQgYSB0YWcgaW50byBhIHBhZ2Ugb3IgdGVtcGxhdGUgc29tZXdoZXJlIGxpa2Uge2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgY2F0ZWdvcnk9JnF1b3Q7c29tZWNhdGVnb3J5JnF1b3Q7IG1vZGU9JnF1b3Q7c29tZW1vZGUmcXVvdDt9LiAgV2hlcmUgbW9kZSBtYXRjaGVzIG9uZSBvZiB0aGUgbW9kZXMgbGlzdGVkIGJlbG93LiAgVGhlIG91dHB1dCB3aWxsIGRpZmZlciBkZXBlbmRpbmcgdXBvbiB3aGljaCBtb2RlIHlvdSBzZWxlY3QuPC9wPg0KPHA+VGhpcyBtb2R1bGUgY2FuIHVzZSB0aGUgRnJvbnRlbmRVc2VycyBtb2R1bGUgKG9wdGlvbmFsKSB0byBnZXQgaW5mb3JtYXRpb24gYWJvdXQgYW55IGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcnMgdG8gcGFydGx5IGZpbGwgaW4gdGhlIGZvcm0gd2hlbiB1cGxvYWRpbmcgZmlsZXM7PC9wPg0KPGgzPlBlcm1pc3Npb25zPC9oMz4NCjx1bD4NCjxsaT48ZW0+TWFuYWdlIFVwbG9hZHM8L2VtPiBwZXJtaXNzaW9uIGlzIG5lZWRlZCB0byBtYW5hZ2UgY2F0ZWdvcmllcywgYW5kIHRoZSBmaWxlcyB3aXRoaW4gdGhlbS48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgVGVtcGxhdGVzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgZWRpdCBhbnkgb2YgdGhlIHRlbXBsYXRlcy48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgU2l0ZSBQcmVmZXJlbmNlczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGFueSBvZiB0aGUgZmlsZSBzZXR0aW5ncy48L2xpPg0KPC91bD4NCjxoMz5DYXRlZ29yeSBCcm93c2luZzwvaDM+DQo8cD5QbGFjaW5nIGEgdGFnIGxpa2Uge2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgYWN0aW9uPSZxdW90O2NhdGVnb3J5c3VtbWFyeSZxdW90OyB0ZW1wbGF0ZT0mcXVvdDtzdW1tYXJ5dGVtcGxhdGUmcXVvdDsgc29ydG9yZGVyPSZxdW90O25hbWVfYXNjJnF1b3Q7IGxpc3Rpbmd0ZW1wbGF0ZT0mcXVvdDtsaXN0dGVtcGxhdGUmcXVvdDsgbGlzdGluZ3NvcnRvcmRlcj0mcXVvdDtsaXN0c29ydG9yZGVyJnF1b3Q7fQ0KYWxsb3dzIHlvdSB0byBkaXNwbGF5IGFuIGludGVyYWN0aXZlIGNhdGVnb3J5IGJyb3dzZXIuIHNvcnRvcmRlciBjYW4gYmU6IG5hbWVfYXNjLCBuYW1lX2Rlc2MsIHN1bW1fYXNjLCBzdW1tX2Rlc2MsIG9yIHJhbmRvbS4NCmxpc3Rpbmd0ZW1wbGF0ZSBhbmQgbGlzdGluZ3NvcnRvcmRlciBhcmUgaWRlbnRpY2FsIHRvIHRoZSB0ZW1wbGF0ZSBhbmQgc29ydG9yZGVyIHBhcmFtZXRlcnMgZm9yDQp0aGUgJnF1b3Q7c3VtbWFyeSZxdW90OyBtb2RlLjwvcD4NCjxoMz5BdXRvbWF0aWMgU2Nhbm5pbmc8L2gzPg0KPHA+VGhpcyBtb2R1bGUgd2lsbCBhdXRvbWF0aWNhbGx5IHNjYW4gZm9yIG5ldyBmaWxlcyBpbiBhIGRpcmVjdG9yeSB3aGVuIGEgc3VtbWFyeSBtb2RlIHRhZyBmb3IgYSBzcGVjaWZpYyBjYXRlZ29yeSBpcyB1c2VkIG9uIGEgQ01TTVMgcGFnZS4gIGkuZTogPGNvZGU+e1VwbG9hZHMgY2F0ZWdvcnk9Y2F0ZWdvcnlfbmFtZX08L2NvZGU+IHdpbGwgcGVyZm9ybSBhIHNjYW4uICBidXQgPGNvZGU+e1VwbG9hZHMgY2F0ZWdvcnk9YWxsfTwvY29kZT4gd2lsbCBub3QuPC9wPg0KPGgzPlRodW1ibmFpbCBHZW5lcmF0aW9uIC0gRGVwcmVjYXRlZDwvaDM+DQo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGdlbmVyYXRpbmcgdGh1bWJuYWlscyBmb3IgY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gIFRoZXJlIGFyZSBwcmVmZXJlbmNlcyBpbiB0aGUgcHJlZmVyZW5jZXMgdGFiIG9mIHRoZSBVcGxvYWRzIG1vZHVsZSBhZG1pbmlzdHJhdGlvbiBwYW5lbCB0byBzcGVjaWZ5IHRoZSB0eXBlcyBvZiBmaWxlcyB0aGF0IGFsbG93IGF1dG9tYXRpYyB0aHVtYm5haWwgZ2VuZXJhdGlvbiwgYW5kIHRoZSBzaXplIG9mIHRoZSBnZW5lcmF0ZWQgdGh1bWJuYWlsIChwcmVzZXJ2aW5nIGFzcGVjdCByYXRpbykuICAgVGh1bWJuYWlscyBhcmUgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgdXBvbiB1cGxvYWQsIGFuZCBjYW4gYmUgZ2VuZXJhdGVkIG1hbnVhbGx5IGJ5IHNlbGVjdGluZyB0aGUgJmFtcDtxdW90O0dlbmVyYXRlIFRodW1ibmFpbHMmYW1wO3F1b3Q7IG9wdGlvbiBpbiB0aGUgZWRpdCBjYXRlZ29yeSBmb3Jtcy4uLiBidXQgYXJlIG5vdCBnZW5lcmF0ZWQgd2hlbiBuZXcgZmlsZXMgYXJlIGRldGVjdGVkIGJ5IGF1dG9tYXRpYyBzY2FubmluZy48L3A+DQo8aDM+WW91IFNlbmQgSXQ8L2gzPg0KPHA+SXQgaXMgcG9zc2libGUgdG8gZW5hYmxlICZhbXA7cXVvdDt5b3VzZW5kaXQmYW1wO3F1b3Q7IGxpa2UgZnVuY3Rpb25hbGl0eSB0byBhbGxvdyBhdXRvbWF0aWNhbGx5IGVtYWlsaW5nIHNlbGVjdGVkIHBlb3BsZSB3aXRoIGEgbGluayB0byBhIG5ld2x5IHVwbG9hZGVkIGZpbGUuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBieSB1c2luZyBhIHRhZyBsaWtlOiA8Y29kZT57VXBsb2FkcyBhY3Rpb249eW91c2VuZGl0IGNhdGVnb3J5PWNhdGVnb3J5bmFtZX08L2NvZGU+LiAgVGhpcyB3aWxsIGRpc3BsYXkgYSBmb3JtIGFsbG93aW5nIHRoaXMgZnVuY3Rpb25hbGl0eS48L3A+DQo8aDM+VGltZSBMaW1pdGVkIEFjY2VzczwvaDM+DQo8cD5UaGlzIG1vZHVsZSBzdXBwb3J0cyB0aGUgbm90aW9uIG9mIHVuaXF1ZSBrZXlzIHRvIGFsbG93IHRpbWUgbGltaXRlZCBhY2Nlc3MgdG8gY2VydGFpbiBmaWxlcy4gIFRoZSBmdW5jdGlvbmFsaXR5IGFsbG93cyBzcGVjaWZ5aW5nIGEgdGltZSBsaW1pdCAoaW4gaG91cnMpIGZvciB3aGljaCB0aGUga2V5IGlzIHZhbGlkLCBhbmQgYSBtYXhpbXVtIG51bWJlciBvZiBkb3dubG9hZHMgb3IgZG93bmxvYWQgYXRlbXB0cy4gIEFuIGVtYWlsIGlzIHNlbnQgdG8gdGhlIGRlc2lyZWQgdXNlcnMgd2l0aCB0aGUgdW5pcXVlIFVSTC4gIEFmdGVyIHRoZSB0aW1lIGxpbWl0LCBvciB0aGUgbnVtYmVyIG9mIGRvd25sb2FkcyBoYXMgYmVlbiByZWFjaGVkLCB0aGUgVVJMIGlzIG5vIGxvbmdlciB2YWxpZC4gIFRoZXNlIHVuaXF1ZSB0aW1lIGxpbWl0ZWQga2V5cyBhcmUgYXV0b21hdGljYWxseSByZW1vdmVkIGZyb20gdGhlIGRhdGFiYXNlIGFmdGVyIGV4cGlyeS48L3A+DQo8aDM+UmVzdHJpY2luZyBBY2Nlc3Mgd2l0aCBGRVU8L2gzPg0KPHA+VGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBpbnRlZ3JhdGluZyB3aXRoIHRoZSBGcm9udEVuZFVzZXJzIG1vZHVsZSB0byByZXN0cmljdCB0aGUgdmlzaWJpbGl0eSBvZiBjYXRlZ29yaWVzIChkaXJlY3RvcmllcykgdG8gY2VydGFpbiBhbGxvd2VkIEZFVSBncm91cHMuICBZb3VyIHVzZXJzIHdvdWxkIGhhdmUgdG8gYmUgbG9nZ2VkIGluIHRvIHlvdXIgd2Vic2l0ZSAodXNpbmcgRkVVKSBhbmQgYWxzbyBhIG1lbWJlciBvZiBvbmUgb2YgdGhlIGFsbG93ZWQgZ3JvdXBzIHRvIG9idGFpbiBhY2Nlc3MuICBUaGlzIGlzIGFjY29tcGxpc2hlZCBpbiB0aGUgY2F0ZWdvcnkgZWRpdCBmb3JtLiAgWW91IGNhbiBzZWxlY3QgYSBsaXN0IG9mIEZFVSBncm91cHMgd2hpY2ggYXJlIGFsbG93ZWQgdG8gdmlldyBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5LjwvcD4NCjxwPlRoaXMgZnVuY3Rpb25hbGl0eSBhbHNvIGFwcGxpZXMgdG8gdGhlICZhbXA7cXVvdFRpbWUgTGltaXRlZCBBY2Nlc3MmYW1wO3F1b3QgZnVuY3Rpb25hbGl0eS4gIEFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IHRoYXQgY2VydGFpbiBwZW9wbGUsIHdobyBhbHNvIGhhdmUgdG8gYmUgbG9nZ2VkIGluIHRvIHlvdXIgd2Vic2l0ZSBjYW4gaGF2ZSBhY2Nlc3MgdG8gY2VydGFpbiBmaWxlcyBmb3IgYSBsaW1pdGVkIGFtb3VudCBvZiB0aW1lLjwvcD4NCjxoMz5FbWFpbGluZzwvaDM+DQo8cD5UaGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIHNlbmRpbmcgYW4gZW1haWwgd2hlbmV2ZXIgYSBmaWxlIGlzIHVwbG9hZGVkLCBzZWUgdGhlIHByZWZlcmVuY2VzIHRhYi4gIEhvd2V2ZXIsIHRvIGRvIHRoaXMgdGhlIDxiPkNNU01haWxlcjwvYj4gcGFja2FnZSBtdXN0IGJlIGluc3RhbGxlZCBhbmQgY29uZmlndXJlZC4gIFRoaXMgaXMgYW4gPGVtPm9wdGlvbmFsPC9lbT4gc3RlcCwgYW5kIGlmIHRoZSBDTVNNYWlsZXIgbW9kdWxlIGlzIG5vdCBpbnN0YWxsZWQsIG5vdGhpbmcgd2lsbCBiZSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIsIG9ubHkgYSBsb2cgbWVzc2FnZSB3aWxsIGJlIHBsYWNlZCBpbnRvIHRoZSBhZG1pbiBsb2c8L3A+DQo8aDM+U21hcnR5IFBsdWdpbnM6PC9oMz4NCjxwPlRoaXMgbW9kdWxlIHByb3ZpZGVzIHNvbWUgYWNjZXNzb3J5IHNtYXJ0eSBwbHVnaW5zIHRoYXQgYXJlIHVzZWZ1bCBmb3IgdmFyaW91cyBwdXJwb3NlcyB3aGVuIHdvcmtpbmcgd2l0aCBmaWxlcy48L3A+DQo8aDM+Q29udGVudCBCbG9ja3MgPGVtPihDTVNNUyAxLjcrIE9ubHkpPC9lbT48L2gzPg0KPHVsPg0KICA8bGk+PHN0cm9uZz57dXBsb2Fkc19jcmVhdGVfdGxfZmlsZX08L3N0cm9uZz4NCiAgICA8cD5Db3B5IGFuIGV4aXN0aW5nIHNlcnZlciBmaWxlIGludG8gdGhlIHVwbG9hZHMgbW9kdWxlIGFuZCBnZW5lcmF0ZSBhIHRpbWUgbGltaXRlZCBVUkwgZm9yIGl0LiBUaGlzIHBsdWdpbiB3aWxsIGFsc28gd2F0ZXJtYXJrLCBhbmQgdGh1bWJuYWlsIGltYWdlIGZpbGVzIGFzIHNwZWNpZmllZCBpbiB0aGUgcHJlZmVyZW5jZXMgKGRlcHJlY2F0ZWQpLjwvcD4NCiAgICA8cD5QYXJhbWV0ZXJzOjwvcD4NCiAgICA8dWw+DQogICAgICA8bGk+PHN0cm9uZz5zcmM8L3N0cm9uZz4gLSBzdHJpbmcgLSByZXF1aXJlZCAtIFRoZSBhYnNvbHV0ZSBzZXJ2ZXIgZmlsZSBzcGVjaWZpY2F0aW9uIHRvIHRoZSBzb3VyY2UgZmlsZS48L2xpPg0KICAgICAgPGxpPjxzdHJvbmc+Y2F0ZWdvcnk8L3N0cm9uZz4gLSBtaXhlZCAtIHJlcXVpcmVkIC0gVGhlIGNhdGVnb3J5IG5hbWUgKHN0cmluZykgb3IgaWQgKGludGVnZXIpIHRvIHRoZSBkZXN0aW5hdGlvbiBVcGxvYWRzIGNhdGVnb3J5LjwvbGk+DQogICAgICA8bGk+cHJlZml4IC0gYm9vbGVhbiAtIG9wdGlvbnNsIC0gSW5kaWNhdGVzIHdldGhlciBmaWxlcyBzaG91bGQgYmUgcHJlZml4ZWQgd2l0aCBhIHN0cmluZyB0aGF0IGRlcGVuZHMgb24gdGhlIHNlcnZlciB0aW1lIChkZWZhdWx0IGlzIEZBTFNFKTwvbGk+DQogICAgICA8bGk+ZW1haWwgLSBzdHJpbmcgLSBvcHRpb25hbCAtIFRpZSB0aGUgZ2VuZXJhdGVkIHVybCB0byB0aGUgc3VwcGxpZWQgZW1haWwgYWRkcmVzcyAod29yayBpbiBwcm9ncmVzcyk8L2xpPg0KICAgICAgPGxpPmhvdXJzIC0gaW50ZWdlciAtIG9wdGlvbmFsIC0gVGhlIG51bWJlciBvZiBob3VycyB0aGlzIFVSTCB3aWxsIGJlIHZhbGlkIGZvciwgaWYgbm90IHNwZWNpZmllZCB0aGUgbW9kdWxlIHByZWZlcmVuY2Ugd2lsbCBiZSB1c2VkLjwvbGk+DQogICAgICA8bGk+ZG93bmxvYWRzIC0gaW50ZWdlciAtIG9wdGlvbmFsIC0gVGhlIG1heGltdW0gbnVtYmVyIG9mIHRpbWVzIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkIHVzaW5nIHRoaXMgdXJsLiAgSWYgbm90IHNwZWNpZmllZCwgdGhlIG1vZHVsZSBwcmVmZXJlbmNlIHdpbGwgYmUgdXNlZC48L2xpPg0KICAgICAgPGxpPmFzc2lnbiAtIHN0cmluZyAtIG9wdGlvbmFsIC0gQSBzbWFydHkgdmFyaWFibGUgbmFtZSB0byBhc3NpZ24gdGhlIG91dHB1dCB0by48L2xpPg0KICAgIDwvdWw+DQogICAgPHA+RXhhbXBsZTo8YnIvPg0KICAgIDxwcmU+e3VwbG9hZHNfY3JlYXRlX3RsX2ZpbGUgc3JjPSZhbXA7cXVvdDsvdGhlL2NvbXBsZXRlL3BhdGgvdG8vdGhlL2ZpbGUuanBnJmFtcDtxdW90OyBwcmVmaXg9dHJ1ZSBkb3dubG9hZHM9NSBob3Vycz03MiBjYXRlZ29yeT0mYW1wO3F1b3Q7c29tZSBjYXRlZ29yeSZhbXA7cXVvdDsgYXNzaWduPSZhbXA7cXVvdDt0aGVfdXJsJmFtcDtxdW90O308L3ByZT4NCiAgICA8L3A+DQogIDwvbGk+DQo8L3VsPg0KPHA+Rm9yIENNU01TIDEuNyB0aGlzIG1vZHVsZSBpcyBjYXBhYmxlIG9mIGludGVyZmFjaW5nIHdpdGggdGhlIGNvbnRlbnQgZWRpdG9yIGFuZCBleHBvcnRpbmcgYSBjb250ZW50IGJsb2NrIHRoYXQgYWxsb3dzIHNlbGVjdGluZyBhbiB1cGxvYWRzIGNhdGVnb3J5IHdpdGhpbiB0aGUgZWRpdCBjb250ZW50IHBhZ2UsIGZvciBsYXRlciB1c2Ugd2l0aGluIHRoZSB0ZW1wbGF0ZS48L3A+DQo8cD5pLmU6IHBsYWNpbmcgdGhlIGZvbGxvd2luZyB0YWcgd2l0aGluIGEgcGFnZSB0ZW1wbGF0ZSA8Y29kZT57Y29udGVudF9tb2R1bGUgbW9kdWxlPSZhbXA7cXVvdDtVcGxvYWRzJmFtcDtxdW90OyBibG9jaz0mYW1wO3F1b3Q7dXBsb2Fkc19jYXRlZ29yeSZhbXA7cXVvdDsgdHlwZT0mYW1wO3F1b3Q7Y2F0ZWdvcnlzZWxlY3QmYW1wO3F1b3Q7fTwvY29kZT4sIHdpbGwgYWRkIGEgZHJvcGRvd24gYm94IGluIHRoZSBlZGl0IGNvbnRlbnQgdmlldyBvZiBhbnkgcGFnZSB1dGlsaXppbmcgdGhhdCBwYWdlIHRlbXBsYXRlLjwvcD4NCjxwPlRoaXMgY29udGVudCBibG9jayBhbHNvIGFjY2VwdHMgc29tZSBvcHRpb25hbCBwYXJhbWV0ZXJzOjwvcD4NCjx1bD4NCiAgPGxpPjx1PnNlbGVjdG9uZTwvdT4NCiAgICA8cD5UaGlzIHBhcmFtZXRlciBpbnNlcnRzIGEgJmFtcDtxdW90O1NlbGVjdCBPbmUmYW1wO3F1b3Q7IGl0ZW0gaW50byB0aGUgbGlzdCBvZiBjYXRlZ29yaWVzLCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gc2VsZWN0IGEgdmFsaWQgY2F0ZWdvcnkgd2hlbiB0aGUgY29udGVudCBwYWdlIGlzIHNhdmVkLjwvcD4NCiAgPC9saT4NCiAgPGxpPjx1PmFsbG93YWxsPC91Pg0KICAgIDxwPlRoaXMgcGFyYW1ldGVyIGFsbG93cyB0aGUgY29udGVudCBlZGl0b3IgdG8gc2VsZWN0ICZhbXA7cXVvdDtBbGwmYW1wO3F1b3Q7IGFzIGEgY2F0ZWdvcnkgZm9yIHRoZSB1cGxvYWRzIGRpc3BsYXkuPC9wPg0KICA8L2xpPg0KPC91bD4NCjxoND5Ib3cgd291bGQgSSB1c2UgaXQ/PC9oND4NCjxwPkhlcmUgaXMgc29tZSBleGFtcGxlIGNvZGU6PC9wPg0KPHByZT4NCntjb250ZW50X21vZHVsZSBtb2R1bGU9JmFtcDtxdW90O1VwbG9hZHMmYW1wO3F1b3Q7IGJsb2NrPSZhbXA7cXVvdDtjYXRlZ29yeXNlbGVjdCZhbXA7cXVvdDsgbGFiZWw9JmFtcDtxdW90O1NlbGVjdCBhbiB1cGxvYWRzIGNhdGVnb3J5JmFtcDtxdW90OyBzZWxlY3RvbmU9MSBhc3NpZ249JmFtcDtxdW90O3RtcCZhbXA7cXVvdDt9DQp7VXBsb2FkcyBjYXRlZ29yeT0kdG1wfQ0KPC9wcmU+DQo8aDM+RGVwcmVjYXRlZDo8L2gzPg0KPHA+PHN0cm9uZz5Ob3RlOjwvc3Ryb25nPiBUaGUgdGh1bWJuYWlsIGFuZCB3YXRlcm1hcmsgY2FwYWJpbGl0aWVzIHRoYXQgZXhpc3QgaW4gdGhpcyBtb2R1bGUgYXJlIGRlcHJlY2F0ZWQsIGFuZCB3aWxsIGJlIHJlbW92ZWQgb3ZlciB0aW1lLiAgVGhlIENHU21hcnRJbWFnZSBtb2R1bGUgcHJvdmlkZXMgZm9yIGJldHRlciBvbiBkZW1hbmQsIGltYWdlIG1hbmlwdWxhdGlvbiwgY2FjaGluZywgYW5kIGVtYmVkZGluZy48L3A+DQo8aDM+U3lzdGVtIFNldHRpbmdzPC9oMz4NCjxwPjxiPk5vdGU6PC9iPiBUaGlzIG1vZHVsZSBkb2VzIG5vdCBieXBhc3Mgb3IgZ2V0IHBhc3QgYW55IGZpbGUgc2l6ZSBsaW1pdGF0aW9ucyBpbiBwaHAuICBJdCB3b3JrcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZW0uICBUaGVyZWZvcmUgeW91IG1heSBuZWVkIHRvIG1vZGlmeSB5b3VyIHBocC5pbmkgZmlsZSwgeW91ciBDTVNNUyBjb25maWcucGhwIGZpbGUgYW5kL29yIHlvdXIgaHR0cGQuY29uZiBmaWxlKHMpIHRvIGFsbG93IHlvdSB0byB1cGxvYWQgZmlsZXMgYXMgbGFyZ2UgYXMgd2hhdCB5b3UgaGF2ZSBzZXQgaW4gdGhlIHVwbG9hZHMgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4NCjxoMz5BcGFjaGUgTm90ZXM8L2gzPg0KPHA+SW4gb3JkZXIgdG8gYWxsb3cgbGFyZ2UgZmlsZSB1cGxvYWRzLCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBpbiB5b3VyIHBocC5pbmkgIEluIGFkZGl0aW9uLCB0aGUgTGltaXRSZXF1ZXN0Qm9keSBwYXJhbWV0ZXIgaW4geW91ciBhcGFjaGUgY29uZmlndXJhdGlvbiwgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyPC9wPg0KPHA+Tm90ZTogIHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIGluIGJ5dGVzLCBraWxvYnl0ZXMsIG9yIG1lZ2FieXRlcywgaG93ZXZlciB0aGUgTGltaXRSZXF1ZXRCb2R5IHBhcmFtZXRlciBpcyBvbmx5IHNwZWNpZmllZCBpbiBieXRlczwvcD4NCjxwPjxzdHJvbmcgc3R5bGU9JnF1b3Q7Y29sb3I6IHJlZDsmcXVvdDs+V2FybmluZzwvc3Ryb25nPiAtIFRoZSBwcm9wZXIgYmVoYXZpb3VyIG9mIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gbnVtZXJvdXMgcGhwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgVGhlc2UgaW5jbHVkZSA8ZW0+KGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pPC9lbT4sIHBocCYjMDM5O3MgbWVtb3J5X2xpbWl0LCBzYWZlX21vZGUsIGZpbGVfdXBsb2FkcywgdXBsb2Fkc19tYXhfZmlsZXNpemUsIGFuZCBtYXhfZXhlY3V0aW9uX3RpbWUuICBUaGVzZSB2YXJpYWJsZXMgbWF5IG5lZWQgYWRqdXN0bWVudCBmb3IgdGhpcyBtb2R1bGUgdG8gd29yayBwcm9wZXJseSBvbiB5b3VyIHNpdGUuICBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IHdvcmsgd2l0aCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9yIGhvc3QgcHJvdmlkZXIgdG8gdHVuZSB0aGVzZSBzZXR0aW5ncyBmb3IgeW91ciByZXF1aXJlbWVudHMuPC9wPg0KPHA+PHN0cm9uZyBzdHlsZT0mcXVvdDtjb2xvcjogcmVkOyZxdW90Oz5XYXJuaW5nPC9zdHJvbmc+IC0gVXNpbmcgdGhpcyBtb2R1bGUgdG8gYWxsb3cgc2l0ZSB2aXNpdG9ycyB0byBzZW5kIGZpbGVzIChlaXRoZXIgdXNpbmcgdGhlIHN0YW5kYXJkIG1lY2hhbmlzbSBvciB0aGUgeW91c2VuZGl0IG1lY2hhbmlzbSkgbWF5IG5vdCB3b3JrIHdpdGggb3V0cHV0IGNvbXByZXNzaW9uIGVuYWJsZWQuICBQbGVhc2UgZW5zdXJlIHRoYXQgb3V0cHV0X2NvbXByZXNzaW9uIGlzIHNldCB0byBmYWxzZSBpbiB0aGUgY29uZmlnLnBocC48L3A+JzsKJGxhbmdbJ2lkJ10gPSAnSUQnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdcWCIHcgd2Vyc2ppICVzIHpvc3RhxYIgemFpbnN0YWxvd2FueS4nOwokbGFuZ1snaXBfYWRkcmVzcyddID0gJ0FkcmVzIElQJzsKJGxhbmdbJ21vZGRlc2NyaXB0aW9uJ10gPSAnTW9kdcWCIHBvendhbGFqxIVjeSBuYSDFgmFkb3dhbmllIHBsaWsmb2FjdXRlO3cgcHJ6ZXogdcW8eXRrb3duaWsmb2FjdXRlO3cgaSB6YXJ6xIVkemFuaWUgbmltaS4nOwokbGFuZ1snbmFtZSddID0gJ05hendhJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdXcGlzeiBub3fEhSBuYXp3xJkgcGxpa3UnOwokbGFuZ1sncGF0aCddID0gJ8WaY2llxbxrYSc7CiRsYW5nWydwYXRobWVzc2FnZSddID0gJ1d5YmllcnogaW5uxIUga2F0ZWdvcmnEmSwgYWJ5IHByemVuaWXFm8SHIHBsaWsnOwokbGFuZ1sncGF0aGludXBsb2FkcyddID0gJyh3IMWbcm9ka3UgZG8ga2F0YWxvZ3UgL3VwbG9hZHMpJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSE8L3A+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHXFgiBVcGxvYWRzIHpvc3RhxYIgb2RpbnN0YWxvd2FueS4gxbthZG5lIHBsaWtpIG5pZSB6b3N0YcWCeSBza2Fzb3dhbmUgeiBzZXJ3ZXJhLic7CiRsYW5nWydwcmVmZXJlbmNlcyddID0gJ1VzdGF3aWVuaWEnOwokbGFuZ1sncHJlZnN1cGRhdGVkJ10gPSAnVXN0YXdpZW5pYSBuZXdzbGV0dGVyYSB6b3N0YcWCeSB1YWt0dWFsbmlvbmUuJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWRlc2MnXSA9ICdPcGlzJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeWxpc3RhYmxlJ10gPSAnUGxpa2kgdyB0eW0ga2F0YWxvZ3UgbW9nxIUgYnnEhyB3eWxpc3Rvd2FuZSc7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnluYW1lJ10gPSAnTmF6d2Ega2F0ZWdvcmlpJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeXBhdGgnXSA9ICfFmmNpZcW8a2EgbmEgc2Vyd2VyemUnOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ1NrYXNvd2HEhyBrYXRhbG9nIGthdGVnb3JpaT8nOwokbGFuZ1sncHJvbXB0X21heF91cGxvYWRzaXplJ10gPSAnTWFrc3ltYWxuYSB3aWVsa2/Fm8SHIHBsaWt1IChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdEb3B1c3pjemFsbmUgcm96c3plcnplbmlhJzsKJGxhbmdbJ3NjYW4nXSA9ICdTa2FudWonOwokbGFuZ1snc2VsZWN0Y2F0ZWdvcnknXSA9ICdXeWJpZXJ6IGthdGVnb3JpxJknOwokbGFuZ1snc2l6ZSddID0gJ1Jvem1pYXInOwokbGFuZ1snc2l6ZWtiJ10gPSAnUm96bWlhciAoa2IpJzsKJGxhbmdbJ3N1Ym1pdCddID0gJ1phdHdpZXJkxbonOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJ1N6YWJsb255IHBvZHN1bW93YW5pYSc7CiRsYW5nWydzdW1tYXJ5J10gPSAnUG9kc3Vtb3dhbmllJzsKJGxhbmdbJ3RpdGxlX2FkbWluX3BhbmVsJ10gPSAnTW9kdcWCIFVwbG9hZHMnOwokbGFuZ1sndGl0bGVfbW9kX2FkbWluJ10gPSAnUGFuZWwgYWRtaW5pc3RyYWN5am55IG1vZHXFgnUnOwokbGFuZ1sndGl0bGVfbW9kX3ByZWZzJ10gPSAnVXN0YXdpZW5pYSBtb2R1xYJ1JzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnV3lrbHVjeiB0ZSBwb2RzaWVjaSB6ZSBzdGF0eXN0eWsnOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ0RvcHVzemN6YWxuZSByb3pzemVyemVuaWEnOwokbGFuZ1sndW5pbnN0YWxsZWQnXSA9ICdNb2R1xYIgem9zdGHFgiBvZGluc3RhbG93YW55Lic7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHXFgiB6b3N0YcWCIHpha3R1YWxpem93YW55IGRvIHdlcnNqaSAlcy4nOwokbGFuZ1sndXBsb2FkJ10gPSAnV3liaWVyeiBwbGlrJzsKJGxhbmdbJ3VwbG9hZGVkJ10gPSAnUGxpayAlcyB6b3N0YcWCIHphxYJhZG93YW55IHByemV6ICVzLic7CiRsYW5nWydyZXBsYWNlZCddID0gJ1BsaWsgJXMgem9zdGHFgiB6YXN0xIVwaW9ueSBwcnpleiAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ1BsaWsgJXMgem9zdGHFgiBza2Fzb3dhbnkuJzsKJGxhbmdbJ3VwbG9hZGZvcm1fdGVtcGxhdGUnXSA9ICdTemFibG9ueSB1cGxvYWR1JzsKJGxhbmdbJ3VzZXJuYW1lJ10gPSAnTmF6d2EgdcW8eXRrb3duaWthJzsKJGxhbmdbJ3dhcm5pbmdfZGVsZXRlY2F0ZWdvcnknXSA9ICdVd2FnYToga2FzdWoga2F0ZWdvcmnEmSB6IG9zdHJvxbxub8WbY2nEhS4gUGxpa2kgbW9nxIUgem9zdGHEhyBza2Fzb3dhbmUhJzsKJGxhbmdbJ3FjYSddID0gJ1AwLTEzMTgyMTM3MzktMTI3NTY2ODM3MTMwMyc7CiRsYW5nWyd1dG1hJ10gPSAnMTU2ODYxMzUzLjE4NzM0OTYyODMuMTI5NDM0MDc2Mi4xMjk0MzQwNzYyLjEyOTQzNDA3NjIuMSc7Cj8+]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sk_SK.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ2ZpcnN0cGFnZSddID0gJ1BydiZhYWN1dGU7IHN0ciZhYWN1dGU7bmthJzsKJGxhbmdbJ3ByZXZwYWdlJ10gPSAnUHJlZGNoJmFhY3V0ZTtkemFqJnVhY3V0ZTtjYSBzdHImYWFjdXRlO25rYSc7CiRsYW5nWyduZXh0cGFnZSddID0gJ05hc2xlZHVqJnVhY3V0ZTtjYSBzdHImYWFjdXRlO25rYSc7CiRsYW5nWydsYXN0cGFnZSddID0gJ1Bvc2xlZG7FiGEgc3RyxYhhbmthJzsKJGxhbmdbJ2ZpcnN0cGFnZV9hcnJvdyddID0gJzw8JzsKJGxhbmdbJ3ByZXZwYWdlX2Fycm93J10gPSAnPCc7CiRsYW5nWyduZXh0cGFnZV9hcnJvdyddID0gJz4nOwokbGFuZ1snbGFzdHBhZ2VfYXJyb3cnXSA9ICc+Pic7CiRsYW5nWydwYWdlJ10gPSAnUGFnZSc7CiRsYW5nWydvZiddID0gJ3onOwokbGFuZ1sncHJvbXB0X2dyb3VwbGlzdCddID0gJ0F1dG9yaXpvdmFuJmVhY3V0ZTsgRkVVIHNrdXBpbnknOwokbGFuZ1snaW5mb19ncm91cGxpc3QnXSA9ICdWeWJlcnRlIEZFVSBza3VwaW55LCBrdG9yJmVhY3V0ZTsgbWFqJnVhY3V0ZTsgcG92b2xlbiZ5YWN1dGU7IHByJmlhY3V0ZTtzdHVwIGsgcyZ1YWN1dGU7Ym9yb20gdiB0ZWp0byBrYXRlZyZvYWN1dGU7cmlpLiAgWnJ1JnNjYXJvbjtlbiZpYWN1dGU7bSB2JnlhY3V0ZTtiZXJ1IHYmc2Nhcm9uO2V0ayZ5YWN1dGU7Y2ggcG9sb8W+aWVrIHBvdm9sJmlhY3V0ZTt0ZSBwciZpYWN1dGU7c3R1cCB2JnNjYXJvbjtldGsmeWFjdXRlO20nOwokbGFuZ1sndGl0bGVfc2NhbiddID0gJ1Z5aMS+YWRhxaUgbm92JmVhY3V0ZTsgcyZ1YWN1dGU7Ym9yeSB2IHRlanRvIGthdGVnJm9hY3V0ZTtyaWknOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdWeXR2b3JpxaUgY2gmeWFjdXRlO2JhaiZ1YWN1dGU7Y2UgbiZhYWN1dGU7aMS+YWR5IHByZSBzJnVhY3V0ZTtib3J5IHYgdGVqdG8ga2F0ZWcmb2FjdXRlO3JpaS4nOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbHMnXSA9ICdWeXR2b3JpxaUgbmFoxL5hZHknOwokbGFuZ1sndGl0bGVfY3JlYXRlX3RodW1ibmFpbCddID0gJyh6bm92dSlWeXR2b3JpxaUgbmFoxL5hZCBwcmUgdGVudG8gcyZ1YWN1dGU7Ym9yJzsKJGxhbmdbJ2NyZWF0ZV90aHVtYm5haWwnXSA9ICdWeXR2b3JpxaUgbmFoxL5hZCc7CiRsYW5nWydlcnJvcl9wYXRoZXJyb3InXSA9ICdOaWUgamUgbW/Fvm4mZWFjdXRlOyBvdHZvcmnFpSBhZHJlcyZhYWN1dGU7ciAocHJvYmwmZWFjdXRlO20gcyBwciZhYWN1dGU7dmFtaT8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1NpemUgb2YgZWFjaCBkb3dubG9hZCBjaHVuayc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ05hdGF2ZW5pZSB0b2h0byBwYXJhbWV0cmEgbSZhYWN1dGU7ICZ1YWN1dGU7xI1pbm9rIG5hIHImeWFjdXRlO2NobG9zxaUgIHPFpWFob3ZhbmlhLCBhIG0mb2NpcmM7xb5lIHpuJmlhY3V0ZTvFvmnFpSAgcGFtJmF1bWw7xaVvdiZlYWN1dGU7IG4mYWFjdXRlO3Jva3knOwokbGFuZ1snd2FybmluZ19zYWZlX21vZGUnXSA9ICdQSFAgc2FmZSBtb2RlIGplIGFrdCZpYWN1dGU7dm55LiAgTSZvY2lyYzvFvmUgIHNwJm9jaXJjO3NvYmnFpSBwcm9ibCZlYWN1dGU7bXkgcyBuYWhyJmFhY3V0ZTt2YW4maWFjdXRlO20gcyZ1YWN1dGU7Ym9yb3YgKHByJmFhY3V0ZTt2YSkuIERvcG9ydcSNZW4mZWFjdXRlOyBqZSBzYWZlIG1vZGUgdnlwbiZ1YWN1dGU7xaUuJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHBhZ2UnXSA9ICdVc2VmdWwgZm9yIGRpc3BsYXlpbmcgYSBkZXRhaWwgcmVwb3J0IHVzaW5nIGEgZGlmZmVyZW50IHBhZ2UgdGVtcGxhdGUsIHRoaXMgcGFyYW1ldGVyIHRha2VzIHRoZSBwYWdlIGlkIG9yIHBhZ2UgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgdG8gZGlzcGxheSB0aGUgZGV0YWlsIHJlcG9ydCc7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdCYm9vbGVhbiwga3RvciZ5YWN1dGU7bSBuYXN0YXZ1anRlIMSNaSBtJmFhY3V0ZTsgbWHFpSBzJnVhY3V0ZTtib3IgcHJlZml4Lic7CiRsYW5nWydwYXJhbV9wcmVmaXhfZmV1J10gPSAnQSBib29sZWFuIHBhcmFtZXRlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBwcmVmaXggc2hvdWxkIGJlIHRha2VuIGZyb20gdGhlIGN1cnJlbnQgYXV0aG9yLCBpZiBub3Qgc3BlY2lmaWVkLCB0aGUgcHJlZml4IGlzIHRoZSBjdXJyZW50IHRpbWUgKGluIGRlY2hleCBmb3JtYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ1Z5cG4mdWFjdXRlO8WlICBwb2Rwb3J1IGNhcHRjaGEgdm8gZm9ybXVsJmFhY3V0ZTtydSBwcmUgbmFociZhYWN1dGU7dmFuaWUgcyZ1YWN1dGU7Ym9yb3YgKGRlZmF1bHRuZSB6YXBudXQmZWFjdXRlOyknOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ1VwcmF2acWlICZzY2Fyb247YWJsJm9hY3V0ZTtudSBmb3JtdWwmYWFjdXRlO3JhIHByZSBuYWhyJmFhY3V0ZTt2YW5pZSBzJnVhY3V0ZTtib3Jvdic7CiRsYW5nWydjYXB0Y2hhX3RpdGxlJ10gPSAnT3AmaWFjdXRlOyZzY2Fyb247dGUgdGV4dCB6IG9iciZhYWN1dGU7emthJzsKJGxhbmdbJ2Vycm9yX2NhcHRjaGFtaXNtYXRjaCddID0gJ09wJmlhY3V0ZTtzYW4meWFjdXRlOyB0ZXh0IHNhIG5lemhvZHVqZSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnXSA9ICdWeXR2JmFhY3V0ZTtyYcWlIG4mYWFjdXRlO2jEvmFkeSBwcmUgcyZ1YWN1dGU7Ym9yeSBzIHQmeWFjdXRlO21pdG8gcHImaWFjdXRlO3BvbmFteSc7CiRsYW5nWyd0aXRsZV9hdXRvdGh1bWJuYWlsX3NpemUnXSA9ICdNYXhpbSZhYWN1dGU7bG5hIHZlxL5rb3PFpSBnZW5lcm92YW4meWFjdXRlO2NoIG4mYWFjdXRlO2jEvmFkb3YgKHB4KSc7CiRsYW5nWydwcm9tcHRfdXBsb2FkX2ljb24nXSA9ICdOYWhyYcWlIGlrb251JzsKJGxhbmdbJ2luZm9fc3lzZGVmYXVsdCddID0gJ1RlbnRvIHRleHQgamUgcG91xb5pdCZ5YWN1dGU7IHByaSB2eXR2JmFhY3V0ZTtyYW4maWFjdXRlOyAgbm92ZWogJnNjYXJvbjthYmwmb2FjdXRlO255IHRvaHRvIHR5cHUnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdQcmVkbmFzdGF2ZW4mYWFjdXRlOyAmc2Nhcm9uO2FibCZvYWN1dGU7bmEgcHJlIGRldGFpbCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdQcmVkbmFzdGF2ZW4mYWFjdXRlOyAmc2Nhcm9uO2FibCZvYWN1dGU7bmEgcHJlIHYmeWFjdXRlO3Bpcyc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdQcmVkbmFzdGF2ZW4mYWFjdXRlOyAmc2Nhcm9uO2FibCZvYWN1dGU7bmEgcHJlIGZvcm11bCZhYWN1dGU7ciBuYSBuYWhyJmFhY3V0ZTt2YW5pZSBzJnVhY3V0ZTtib3Jvdic7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJyZTY2Fyb247YWJsJm9hY3V0ZTtuYSc7CiRsYW5nWydyZXNldHRvZGVmYXVsdCddID0gJ05hc3RhdmnFpSBwJm9jaXJjO3ZvZG4mZWFjdXRlOyc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmwmb2FjdXRlO25hIHByZSB2JnlhY3V0ZTtwaXMnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmwmb2FjdXRlO25hIHByZSBkZXRhaWwnOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdNZW5vJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnUHJlZG5hc3RhdmVuJmVhY3V0ZTsnOwokbGFuZ1snbGVnZW5kX3VwbG9hZGZvcm0nXSA9ICdOYWhyYcWlIHMmdWFjdXRlO2JvciBha28nOwokbGFuZ1snZXJyb3JfbWlzc2luZ3BhcmFtJ10gPSAnUG/FvmFkb3ZhbiZ5YWN1dGU7IHBhcmFtZXRlciBjaCZ5YWN1dGU7YmEnOwokbGFuZ1snZXJyb3JfbWlzc2luZ25hbWUnXSA9ICdNZW5vIHByZSBzJnVhY3V0ZTtib3IgbXVzJmlhY3V0ZTsgYnnFpSB6YWRlZmlub3ZhcW4meWFjdXRlOyc7CiRsYW5nWydlcnJvcl9taXNzaW5nZXh0ZW5zaW9ucyddID0gJ01pbmltJmFhY3V0ZTtsbmUgamVkbmEgcHImaWFjdXRlO3BvbmEgbXVzJmlhY3V0ZTsgYnnFpSB6YWRlZmlub3ZhbiZhYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdpY29uJ10gPSAnSWtvbmEgbXVzJmlhY3V0ZTsgYnnFpSB6YWRlZmlub3ZhbiZhYWN1dGU7JzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ1phZGVmaW5vdmFuJnlhY3V0ZTsgcmlhZG9rIG5lYm9sIG4mYWFjdXRlO2pkZW4meWFjdXRlOyc7CiRsYW5nWyduYW1lX3Vua25vd24nXSA9ICdOZXpuJmFhY3V0ZTttZSc7CiRsYW5nWydkZXNjcmlwdGlvbl91bmtub3duJ10gPSAnUG9waXMgcyZ1YWN1dGU7Ym9ydSBwcmUgbmV6aXN0ZW4meWFjdXRlOyB0eXAnOwokbGFuZ1snaW1hZ2UnXSA9ICdPYnImYWFjdXRlO3pvayc7CiRsYW5nWydpY29uJ10gPSAnSWtvbmEnOwokbGFuZ1snZXh0ZW5zaW9ucyddID0gJ1ByJmlhY3V0ZTtwb255IHMmdWFjdXRlO2Jvcm92JzsKJGxhbmdbJ2FkZGZpbGV0eXBlJ10gPSAnUHJpZGHFpSBub3YmeWFjdXRlOyB0eXAgcyZ1YWN1dGU7Ym9ydSc7CiRsYW5nWydmaWxlX3R5cGVzJ10gPSAnVGlweSBzJnVhY3V0ZTtib3Jvdic7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5aWQnXSA9ICdOZWJvbG8gemFkYW4mZWFjdXRlOyBJRCBrYXRlZyZvYWN1dGU7cmllJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnknXSA9ICdOZWJvbG8gemFkYW4mZWFjdXRlOyBJRCBrYXRlZyZvYWN1dGU7cmllJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJyZTY2Fyb247YWJsJm9hY3V0ZTtuYSBzIHQmeWFjdXRlO210byBuJmFhY3V0ZTt6dm9tIGV4aXN0dWplJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZW5hbWUnXSA9ICdOJmFhY3V0ZTt6b3YgJnNjYXJvbjsmYWFjdXRlO2JsJm9hY3V0ZTtueSc7CiRsYW5nWydwcm9tcHRfdGVtcGxhdGUnXSA9ICcmU2Nhcm9uO2FibCZvYWN1dGU7bmEnOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnVnl0dm9yacWlICZzY2Fyb247YWJsJm9hY3V0ZTtudSc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5BbiBldmVudCBnZW5lcmF0ZWQgd2hlbiBhIHVzZXIgZmluaXNoZXMgZG93bmxvYWRpbmcgYSBmaWxlPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBsb2FkIElEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsZSBuYW1lPC9saT4NCjxsaT48ZW0+aXA8L2VtPiAtIFRoZSBJUCBBZGRyZXNzIG9mIHRoZSBkb3dubG9hZGVyPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkRlbGV0ZUNhdGVnb3J5J10gPSAnPHA+QW4gZXZlbnQgZ2VuZXJhdGVkIHdoZW4gYSBjYXRlZ29yeSBpcyBEZWxldGVkPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBDYXRlZ29yeSBuYW1lPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQ2F0ZWdvcnkgcGF0aDwvbGk+DQo8L3VsPg0KJzsKJGxhbmdbJ2hlbHBfT25DcmVhdGVDYXRlZ29yeSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgY2F0ZWdvcnkgaXMgQ3JlYXRlZDwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBjYXRlZ29yeSBkZXNjcmlwdGlvbjwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFRoZSBjYXRlZ29yeSBwYXRoPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gQSBmbGFnIGluZGljYXRpbmcgaWYgdGhlIGNhdGVnb3J5IGlzIGxpc3RhYmxlPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblJlbW92ZSddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgZmlsZSBpcyByZW1vdmVkIHZpYSB0aGUgYWRtaW4gb3IgZnJvbnRlbmQgaW50ZXJmYWNlczwvcD4NCjxoND5QYXJhbWV0ZXJzPC9oND4NCjx1bD4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gVGhlIG5hbWUgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIHJlbW92ZWQgZmlsZTwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBUaGUgaWQgb2YgdGhlIGNhdGVnb3J5PC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPkFuIGV2ZW50IGdlbmVyYXRlZCB3aGVuIGEgbmV3IGZpbGUgaXMgdXBsb2FkZWQgdmlhIHRoZSBhZG1pbiBvciBmcm9udGVuZCBpbnRlcmZhY2VzPC9wPg0KPGg0PlBhcmFtZXRlcnM8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gVGhlIGNhdGVnb3J5IG5hbWU8L2xpPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBUaGUgbmFtZSBvZiB0aGUgdXBsb2FkZWQgZmlsZTwvbGk+DQo8bGk+PGVtPnNpemU8L2VtPiAtIFRoZSBzaXplIG9mIHRoZSB1cGxvYWRlZCBmaWxlPC9saT4NCjxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gVGhlIHNob3J0IGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+ZGVzY3JpcHRpb248L2VtPiAtIFRoZSBsb25nIGRlc2NyaXB0aW9uIGZvciB0aGUgdXBsb2FkZWQgZmlsZSAobWF5IGJlIGVtcHR5KTwvZW0+PC9saT4NCjxsaT48ZW0+YXV0aG9yPC9lbT4gLSBUaGUgYXV0aG9yIG9mIHRoZSB1cGxvYWRlZCBmaWxlIChpZiBhdmFpbGFibGUpPC9lbT48L2xpPg0KPGxpPjxlbT5pcF9hZGRyZXNzPC9lbT4gLSBUaGUgaW50ZXJuZXQgYWRkcmVzcyBvZiB0aGUgY2xpZW50IHRoYXQgdXBsb2FkZWQgdGhlIGZpbGU8L2xpPg0KPC91bD4NCic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdVZGFsb3PFpSB2eXZvbGFuJmFhY3V0ZTsgcG8gb2RzdHImYWFjdXRlO25lbiZpYWN1dGU7IGthdGVnJm9hY3V0ZTtyaWUnOwokbGFuZ1snaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5J10gPSAnVWRhbG9zxaUgdnl2b2xhbiZhYWN1dGU7IHBvIHZ5dHZvcmVuJmlhY3V0ZTsga2F0ZWcmb2FjdXRlO3JpZSc7CiRsYW5nWydpbmZvX2V2ZW50X29uZG93bmxvYWQnXSA9ICdVZGFsb3PFpSB2eXZvbGFuJmFhY3V0ZTsgcG8gc3RpYWhudXQmaWFjdXRlOyBzJnVhY3V0ZTtib3J1JzsKJGxhbmdbJ2luZm9fZXZlbnRfb251cGxvYWQnXSA9ICdVZGFsb3PFpSB2eXZvbGFuJmFhY3V0ZTsgcG8gbmFocmF0JmlhY3V0ZTsgcyZ1YWN1dGU7Ym9ydSc7CiRsYW5nWydpbmZvX2V2ZW50X29ucmVtb3ZlJ10gPSAnVWRhbG9zxaUgdnl2b2xhbiZhYWN1dGU7IHBvIG9kc3RyJmFhY3V0ZTtuZW4maWFjdXRlOyBzJnVhY3V0ZTtib3J1JzsKJGxhbmdbJ3RpdGxlX3VzZXJ0YWdfb251cGxvYWQnXSA9ICdVxb4maWFjdXRlO3ZhdGXEvnNrJnlhY3V0ZTsgdGFnIHZvbGFuJnlhY3V0ZTsgcG8gbmFocmF0JmlhY3V0ZTsgcyZ1YWN1dGU7Ym9ydSc7CiRsYW5nWydub25lJ10gPSAnxb1pYWRueSc7CiRsYW5nWydtYXRjaGVzZm91bmQnXSA9ICdaJmFhY3V0ZTt6bmFteSBuZW4mYWFjdXRlO2pkZW4mZWFjdXRlOyc7CiRsYW5nWydmaWx0ZXInXSA9ICdGaWx0ZXInOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ1ByZXNtZXJvdmFuaWUgbmEgIElEIHN0ciZhYWN1dGU7bmt5L2FsaWFzIHBvIG5haHJhdCZpYWN1dGU7IHMmdWFjdXRlO2JvcnUnOwokbGFuZ1snZGV0YWlscyddID0gJ0RldGFpbHknOwokbGFuZ1snY29uZmlybV9wcmVmZXJlbmNlcyddID0gJ05hc3RhdmVuaWEgYnVkdSBha3R1YWxpem92YW4mZWFjdXRlOy4gQ2hjZXRlIHBva3JhxI1vdmHFpT8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnUyZ1YWN1dGU7Ym9yeSBuZWJvbGkgbmFocmF0JmVhY3V0ZTsuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnUG92b2xpxaUgcHJlcCZpYWN1dGU7c2FuaWUnOwokbGFuZ1snaW5mb19yZXBsYWNlJ10gPSAnUHJlcCZpYWN1dGU7c2HFpSBzJnVhY3V0ZTtib3IgcyByb3ZuYWsmeWFjdXRlO20gbiZhYWN1dGU7enZvbSAoYmV6IHptZW55IElEKSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnRG8gbm90IGRpc3BsYXkgYW55IGluaXRpYWwgcmVzdWx0cyB3aGVuIHRoZSBmaWx0ZXIgaXMgb24nOwokbGFuZ1sncGFyYW1fa2V5J10gPSAnUHJvdmlkZSBhbiBhZGRpdGlvbmFsIGtleSB0byB0aGUgbW9kdWxlIGZvciBmdXJ0aGVyIG9yZ2FuaXppbmcgdXBsb2Fkcy4gIFRoaXMga2V5IGNvdWxkIGJlIGFuIGVuY29kZWQgc3RyaW5nIGxpa2U6ICYjMDM5O2ZldXNlcnM6dWlkJiMwMzk7LCBldGMuICBUaGlzIHBhcmFtZXRlciBpcyB1c3VhbGx5IG9ubHkgbmVlZGVkIHdoZW4gZW1iZWRkaW5nIHRoZSB1cGxvYWRzIG1vZHVsZSBpbnRvIGFub3RoZXIgbW9kdWxlJzsKJGxhbmdbJ3BhcmFtX25vYXV0aG9yJ10gPSAnSGlkZSB0aGUgYXV0aG9yIGZpZWxkIGZyb20gdGhlIHVwbG9hZCBmb3JtLiAgVGhpcyBwYXJhbWV0ZXIgaXMgb25seSB2YWxpZCB3aGVuIG1vZGU9JiMwMzk7dXBsb2FkJiMwMzk7LiAgSWYgVGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIGlzIHByZXNlbnQsIGFuZCBhIHVzZXIgaXMgY3VycmVudGx5IGxvZ2dlZCBpbiwgYSBoaWRkZW4gZmllbGQgd2lsbCBob2xkIHRoZSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJuYW1lJzsKJGxhbmdbJ3BhcmFtX3VwbG9hZF9pZCddID0gJ3VwbG9hZF9pZD0mcXVvdDtpZCZxdW90OyAtIHNwZWNpZnkgYSBzaW5nbGUgZmlsZSBmb3IgdGhlIHVybC9saW5rIG9yIHNpbmdsZSBtb2RlcyAoYWJvdmUpJzsKJGxhbmdbJ3BhcmFtX2RldGFpbHRlbXBsYXRlJ10gPSAnVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoZSBkZXRhaWxlZCByZXBvcnQuJzsKJGxhbmdbJ3BhcmFtX3RlbXBsYXRlJ10gPSAnVXNlIGEgdGVtcGxhdGUgd2l0aCB0aGlzIG5hbWUgZm9yIHRoaXMgcmVwb3J0IG9yIGZvcm0uICBUaGUgbW9kZSBpcyB1c2VkIHRvIGRldGVybWluZSB3aGF0IHR5cGUgb2YgdGVtcGxhdGUgaXMgcmVxdWlyZXJkLCBhbmQgdGhlbiBhIG5hbWUgbWF0Y2ggaXMgcGVyZm9ybWVkIHdpdGhpbiB0aGF0IHR5cGUuJzsKJGxhbmdbJ3BhcmFtX2ZpbHRlciddID0gJ1pvYnJhemnFpSBmb3JtdWwmYWFjdXRlO3IgZmlsdHJhJzsKJGxhbmdbJ3BhcmFtX25vX2ludGl0aWFsJ10gPSAnT25seSB1c2VmdWwgd2hlbiB0aGUgZmlsdGVyIHBhcmFtZXRlciBpcyBzdXBwbGllZCwgb3Igb24gYnkgZGVmYXVsdCwgdGhpcyBwYXJhbWV0ZXIgaW5kaWNhdGVzIHdldGhlciBpbml0aWFsIHJlc3VsdHMgc2hvdWxkIGJlIHJldHVybmVkJzsKJGxhbmdbJ3BhcmFtX2ZpbGV0eXBlcyddID0gJ1pvYnJhemnFpSBzJnVhY3V0ZTtib3J5LCBrdG9yJmVhY3V0ZTsgc2EgemhvZHVqJnVhY3V0ZTsgcyB2eWJyYW4meWFjdXRlO20gdHlwb20gcyZ1YWN1dGU7Ym9yb3Ygb2RkZWxlbiZ5YWN1dGU7Y2ggxI1pYXJrYW1pJzsKJGxhbmdbJ3BhcmFtX3NvcnRvcmRlciddID0gJyAgPHA+VHJpZWRlbmllDQogIDx1bD4NCiAgPGxpPjxlbT5kYXRlX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGF0ZTwvbGk+DQogIDxsaT48ZW0+ZGF0ZV9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgZGF0ZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIG5hbWU8L2xpPg0KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIG5hbWU8L2xpPg0KICA8bGk+PGVtPnNpemVfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBzaXplPC9saT4NCiAgPGxpPjxlbT5zaXplX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBzaXplPC9saT4NCiAgPGxpPjxlbT5kZXNjX2FzYzwvZW0+IC0gU29ydCBieSBhc2NlbmRpbmcgZGVzY3JpcHRpb248L2xpPg0KICA8bGk+PGVtPmRlc2NfZGVzYzwvZW0+IC0gU29ydCBieSBkZXNjZW5kaW5nIGRlc2NyaXB0aW9uPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBTb3J0IGJ5IGFzY2VuZGluZyBhdXRob3I8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9kZXNjPC9lbT4gLSBTb3J0IGJ5IGRlc2NlbmRpbmcgYXV0aG9yPC9saT4NCiAgPGxpPjxlbT5pcF9hc2M8L2VtPiAtIFNvcnQgYnkgYXNjZW5kaW5nIGlwIGFkZHJlc3M8L2xpPg0KICA8bGk+PGVtPmlwX2Rlc2M8L2VtPiAtIFNvcnQgYnkgZGVzY2VuZGluZyBpcCBhZGRyZXNzPC9saT4NCiAgPGxpPjxlbT5yYW5kb208L2VtPiAtIFJhbmRvbSBzb3J0IG9yZGVyPC9saT4NCiAgPC91bD4NCiAgPC9wPic7CiRsYW5nWydwYXJhbV9saXN0aW5ndGVtcGxhdGUnXSA9ICdUZW1wbGF0ZSB0byB1c2UgZm9yIGNhdGVnb3J5IGxpc3RpbmdzIGFmdGVyIGNsaWNrdGhyb3VnaCBmcm9tIENhdGVnb3J5IFN1bW1hcnkgcGFnZSc7CiRsYW5nWydwYXJhbV9saXN0aW5nc29ydG9yZGVyJ10gPSAnU29ydCBvcmRlciAoYWxhIHBhcmFtX3NvcnRvcmRlcikgdG8gdXNlIGZvciBjYXRlZ29yeSBsaXN0aW5ncyBhZnRlciBjbGlja3Rocm91Z2ggZnJvbSBDYXRlZ29yeSBTdW1tYXJ5IHBhZ2UnOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICcgDQpmaWxlX2V4dGVuc2lvbnM9JnF1b3Q7ZXh0MSxleHQyLGV4dDMmcXVvdDsNCjxwPnZhbGlkIG9ubHkgd2hlbiBtb2RlPXVwbG9hZCwgdGhpcyBwYXJhbWV0ZXIgbGltaXRzIHRoZSB0eXBlcyBvZiBmaWxlcyB0aGF0IGNhbiBiZSB1cGxvYWRlZC4gIEl0IG92ZXJyaWRlcyBhbnkgc2V0dGluZ3MgaW4gdGhlIG1vZHVsZSBwcmVmZXJlbmNlcy48L3A+JzsKJGxhbmdbJ3BhcmFtX2NvdW50J10gPSAnY291bnQ9JnF1b3Q7TiZxdW90Ow0KPHA+QSBwYXJhbWV0ZXIgdG8gbGlzdCBvbmx5IHRoZSBmaXJzdCBOIHJlc3VsdHMgb2YgdGhlIHF1ZXJ5LiAgUGFnaW5hdGlvbiB3b3VsZCBiZSBiZXR0ZXIsIGJ1dCB0aGlzIHdpbGwgZG8gdGhlIHRyaWNrIGZvciBub3c8L3A+JzsKJGxhbmdbJ3BhcmFtX2NhdGVnb3J5J10gPSAnY2F0ZWdvcnk9JnF1b3Q7bmFtZSZxdW90Ow0KPHA+PGI+Tm90ZTo8L2I+IENhdGVnb3J5IGNhbiBiZSAmcXVvdDthbGwmcXVvdDssIHdoaWNoIHdpbGwgbGlzdCBhbGwgb2YgdGhlIHVwbG9hZHMgZnJvbSBhbGwgPGVtPmxpc3RhYmxlPC9lbT4gY2F0ZWdvcmllczwvcD4nOwokbGFuZ1sncGFyYW1fbW9kZSddID0gJyAgPHVsPg0KICA8bGk+PGVtPmRldGFpbGVkPC9lbT4gLSBEaXNwbGF5IGEgZGV0YWlsZWQgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIGNhdGVnb3J5PC9saT4NCiAgPGxpPjxlbT51cGxvYWQ8L2VtPiAtIERpc3BsYXkgYSBmb3JtIHRvIGFsbG93IGEgZnJvbnRlbmQgdXNlciB0byB1cGxvYWQgYSBmaWxlPC9saT4NCiAgPGxpPjxlbT51cmwgPGk+b3I8L2k+IGxpbms8L2VtPiAtIERpc3BsYXkgYSBsaW5rIHRvIGEgZmlsZTwvbGk+DQogIDxsaT48ZW0+c3VtbWFyeTwvZW0+IC0gRGlzcGxheSBhIHN1bW1hcml6ZWQgbGlzdCBvZiBhbGwgZmlsZXMgaW4gdGhlIGNhdGVnb3J5PC9saT4NCiAgPGxpPjxlbT5zaW5nbGU8L2VtPiAtIERpc3BsYXkgYSBkZXRhaWxlZCByZXBvcnQgYWJvdXQgYSBzaW5nbGUgdXBsb2FkPC9saT4NCiAgPGxpPjxlbT5zaW5nbGVzdW1tYXJ5PC9lbT4gLSBEaXNwbGF5IGEgc3VtbWFyaXplZCByZXBvcnQgYWJvdXQgYSBzaW5nbGUgdXBsb2FkPC9saT4NCiAgPC91bD4nOwokbGFuZ1sncGFyYW1fc2VsZWN0Zm9ybSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBpcyB0aGUgZm9ybWlkIG9mIHRoZSBwYXJlbnQgZm9ybS4gIFVzZWQgdG8gaGFuZGxlIHBhcmFtZXRlciBwYXNzaW5nJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5hbWUnXSA9ICd3aGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBuYW1lIG9mIHRoZSBmaWVsZCc7CiRsYW5nWydwYXJhbV9zZWxlY3R2YWx1ZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgZmllbGQgdmFsdWUnOwokbGFuZ1sncGFyYW1fc2VsZWN0bm9uZSddID0gJ1doZW4gdXNpbmcgdGhlICYjMDM5O3NlbGVjdCYjMDM5OyBtb2RlLCB0aGlzIHBhcmFtZXRlciBzcGVjaWZpZXMgd2V0aGVyICYjMDM5O25vbmUmIzAzOTsgaXMgYSB2YWxpZCBjaG9pY2UuJzsKJGxhbmdbJ3JldHVybnRvbW9kdWxlJ10gPSAnVnImYWFjdXRlO3RpxaUgc2EgbmEgcGFuZWwgbW9kdWx1JzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ05pZSBzJnVhY3V0ZTsgdnl0dm9yZW4mZWFjdXRlOyBrYXRlZ28mb2FjdXRlO3JpZSc7CiRsYW5nWyd0aXRsZV9lbmZvcmNlZXh0ZW5zaW9ucyddID0gJ1Bvxb5hZG92YcWlIHByJmlhY3V0ZTtwb255IHUgdiZzY2Fyb247ZXRrJnlhY3V0ZTtjaCBuYWhyJmFhY3V0ZTt2YW4meWFjdXRlO2NoIHMmdWFjdXRlO2Jvcm92JzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdDaHlzdCZhYWN1dGU7dGUgc2Egb2Jub3ZpxaUgJnNjYXJvbjthYmwmb2FjdXRlO255IHpvIHN5c3QmZWFjdXRlO211IChwcmVkbmFzdGF2ZW4mZWFjdXRlOyBob2Rub3R5KS4gViZzY2Fyb247ZXRreSBkb3RlcmFqJnNjYXJvbjtpZSB6bWVueSBzdHJhdCZpYWN1dGU7dGUuIENoY2V0ZSBwb2tyYcSNb3ZhxaU/JzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnSW4meWFjdXRlOyBuJmFhY3V0ZTtoxL5hZG92JnlhY3V0ZTsgcyZ1YWN1dGU7Ym9yJzsKJGxhbmdbJ3RodW1ibmFpbCddID0gJ05haMS+YWQnOwokbGFuZ1snbmV3dGh1bWJuYWlsJ10gPSAnTmFocmHFpSBub3YmeWFjdXRlOyBuYWjEvmFkJzsKJGxhbmdbJ2luZm9fc3VtbWFyeSddID0gJ0EgYnJpZWYgZGVzY3JpcHRpb24gb2YgdGhlIGZpbGUgKGlmIGVtcHR5LCB0aGUgZmlsZSBuYW1lIGlzIHVzZWQgd2l0aG91dCB0aGUgZXh0ZW5zaW9uKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ0tyJmFhY3V0ZTt0a2UgbWVubyBwcmUga2F0ZWcmb2FjdXRlO3JpdSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ1BvcGlzIGthdGVnJm9hY3V0ZTtyaWUnOwokbGFuZ1snaW5mb19jYXRlZ29yeXBhdGgnXSA9ICdOJmFhY3V0ZTt6b3YgYWRyZXMmYWFjdXRlO3JhLCBrdG9yJmVhY3V0ZTsgYnVkZSBwb3XFvml0JmVhY3V0ZTsgcHJlIHVrbGFkYW5pZSBzJnVhY3V0ZTtib3JvdiBwcmUgdCZ1YWN1dGU7dG8ga2F0ZWcmb2FjdXRlO3JpdSAoYWRyZXNhciBidWRldiBhZHJlcyZhYWN1dGU7cmkgdXBsb2FkcykuIFYgcHImaWFjdXRlO3BhZGUsIMW+ZSBhZHJlcyZhYWN1dGU7ciBuZWJ1ZGUgZXhpc3RvdmHFpSwgYnVkZSB2eXR2b3JlbiZ5YWN1dGU7Lic7CiRsYW5nWydpbmZvX2Rlc3RuYW1lJ10gPSAnUG91xb5pdGUgJiMwMzk7TmFocmFqIGFrbyYjMDM5OyBpYmEgdiBwciZpYWN1dGU7cGFkZSwgxb5lIGNoY2V0ZSB6bWVuacWlIG4mYWFjdXRlO3pvdiBzJnVhY3V0ZTtib3J1LiAnOwokbGFuZ1snZXJyb3JfY2FudGNyZWF0ZWRpcmVjdG9yeSddID0gJ05pZSBqZSBtb8W+biZlYWN1dGU7IHZ5dHZvcmnFpSBhZHJlcyZhYWN1dGU7cic7CiRsYW5nWydlcnJvcl9ub21haWxlcm1vZHVsZSddID0gJ0NNU01haWxlciBtb2R1bGUgbmVib2wgbiZhYWN1dGU7amRlbiZ5YWN1dGU7JzsKJGxhbmdbJ3VwbG9hZF9ub3RpZmljYXRpb24nXSA9ICdOb3YmeWFjdXRlOyBzJnVhY3V0ZTtib3IgYm9sIG5haHJhdCZ5YWN1dGU7JzsKJGxhbmdbJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCddID0gJ1Bvc2xhxaUgbm90aWZpayZhYWN1dGU7Y2l1IHBvIG5haHJhdCZpYWN1dGU7Oic7CiRsYW5nWydlbWFpbF90ZW1wbGF0ZSddID0gJyZTY2Fyb247YWJsJm9hY3V0ZTtuYSBwcmUgZS1tYWlsJzsKJGxhbmdbJ3RpdGxlX2R1bW15X2luZGV4X2h0bWwnXSA9ICdWeXR2b3JpxaUgZHVtbXkgaW5kZXguaHRtbCBzJnVhY3V0ZTtib3IgZG8ga2HFvmQmZWFjdXRlO2hvIGFkcmVzJmFhY3V0ZTtyYT88YnIvPjxlbT5FeGlzdHVqJnVhY3V0ZTtjaSBzJnVhY3V0ZTtib3IgYnVkZSBwcmVwJmlhY3V0ZTtzYW4meWFjdXRlOzwvZW0+JzsKJGxhbmdbJ2Fib3V0J10gPSAnTyBwb2xvxb5rZSc7CiRsYW5nWydlcnJvcl9wZXJtaXNzaW9uZGVuaWVkJ10gPSAnUHImaWFjdXRlO3N0dXAgemFtaWV0bnV0JnlhY3V0ZTsuIFNrb250cm9sdWp0ZSBzdm9qZSBwciZhYWN1dGU7dmEuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdOZW0mb2NpcmM7xb5lIHphcGlzb3ZhxaUnOwokbGFuZ1snYWRkY2F0ZWdvcnknXSA9ICdQcmlkYcWlIGthdGVnJm9hY3V0ZTtyaXUnOwokbGFuZ1snYWxsJ10gPSAnViZzY2Fyb247ZXRrbyc7CiRsYW5nWydhcmV5b3VzdXJlJ10gPSAnU3RlIHNpIGlzdCZ5YWN1dGU7Pyc7CiRsYW5nWydhdXRob3InXSA9ICdBdXRvcic7CiRsYW5nWydjYW5jZWwnXSA9ICdacnUmc2Nhcm9uO2nFpSc7CiRsYW5nWydjYW5ub3Rtb2RpZnlwYXRoJ10gPSAnKENlc3RhIG5lbSZvY2lyYzvFvmUgYnnFpSB1cHJhdmVuJmFhY3V0ZTspJzsKJGxhbmdbJ2NhdGVnb3JpZXMnXSA9ICdLYXRlZyZvYWN1dGU7cmllJzsKJGxhbmdbJ2NhdGVnb3J5J10gPSAnS2F0ZWcmb2FjdXRlO3JpYSc7CiRsYW5nWydtZXNzYWdlX2NhdGVnb3J5YWRkZWQnXSA9ICdLYXRlZyZvYWN1dGU7cmlhIGJvbGEgJnVhY3V0ZTtzcGUmc2Nhcm9uO25lIG5haHJhdCZhYWN1dGU7JzsKJGxhbmdbJ2RhdGUnXSA9ICdEJmFhY3V0ZTt0dW0nOwokbGFuZ1snZGF0ZXVwbG9hZGVkJ10gPSAnRCZhYWN1dGU7dHVtIG5haHJhdGlhJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdQcmVkbmFzdGF2ZW4mZWFjdXRlOyc7CiRsYW5nWydkZWxldGUnXSA9ICdPZHN0ciZhYWN1dGU7bmnFpSc7CiRsYW5nWydkZXNjcmlwdGlvbiddID0gJ1BvcGlzJzsKJGxhbmdbJ2Rlc3RuYW1lJ10gPSAnTmFocmHFpSBha28nOwokbGFuZ1snZGV0YWlsX3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYiZvYWN1dGU7bmEgcHJlIGRldGFpbCc7CiRsYW5nWydkb3dubG9hZGVkJ10gPSAnUyZ1YWN1dGU7Ym9yICVzIGJvbCBzdGlhaHV0JnlhY3V0ZTsuJzsKJGxhbmdbJ2Rvd25sb2FkcyddID0gJ1N0aWFobnV0aWEnOwokbGFuZ1snZWRpdCddID0gJ1VwcmF2acWlJzsKJGxhbmdbJ2VkaXRjYXRlZ29yeSddID0gJ1VwcmF2acWlIGthdGVnJm9hY3V0ZTtyaXUnOwokbGFuZ1snZWRpdHVwbG9hZCddID0gJ1VwcmF2acWlIHVwbG9hZCc7CiRsYW5nWydlcnJvciddID0gJ0NoeWJhISc7CiRsYW5nWydlcnJvcl9wYXRoaW51c2UnXSA9ICdLYXRlZyZvYWN1dGU7cmlhIHBvdcW+JmlhY3V0ZTt2YWomdWFjdXRlO2NhIHQmdWFjdXRlO3RvIGNlc3R1IHXFviBleGlzdHVqZSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeWV4aXN0cyddID0gJ0NoeWJhOiBLYXRlZyZvYWN1dGU7cmlhIHXFviBleGlzdHVqZSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGVtcHR5J10gPSAnQ2h5YmEhIE5lbSZvY2lyYzvFvnRlIHptYXphxaUga2F0ZWcmb2FjdXRlO3JpdSwga3RvciZhYWN1dGU7IG5pZSBqZSBwciZhYWN1dGU7emRuYSc7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGZvdW5kJ10gPSAnQ2h5YmE6IEthdGVnJm9hY3V0ZTtyaWEgbmVuJmFhY3V0ZTtqZGVuJmFhY3V0ZTsnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0NoeWJhOiBWIGRhdGFiJmFhY3V0ZTt6ZSc7CiRsYW5nWydlcnJvcl9lbXB0eWNhdGVnb3J5J10gPSAnQ2h5YmE6IEthdGVnJm9hY3V0ZTtyaWEgcHImYWFjdXRlO3pkYSc7CiRsYW5nWydlcnJvcl9lbXB0eXBhdGgnXSA9ICdDaHliYTogQ2VzdGEgcHImYWFjdXRlO3pkbmEnOwokbGFuZ1snZXJyb3JfZmlsZWV4aXN0cyddID0gJ0NoeWJhISBTJnVhY3V0ZTtib3IgJXMgdcW+IGV4aXN0dWplLic7CiRsYW5nWydlcnJvcl9maWxlbm90Zm91bmQnXSA9ICdDaHliYSEgUyZ1YWN1dGU7Ym9yICVzIG5lYm9sIG4mYWFjdXRlO2pkZW4meWFjdXRlOy4nOwokbGFuZ1snZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJ10gPSAnQ2h5YmE6IG5lZG9zdGF0b2sgcGFyYW1ldHJvdiBwcmUgcG91xb5pdGllIG1vZHVsdSc7CiRsYW5nWydlcnJvcl9pbnZhbGlkYXV0aG9yJ10gPSAnQ2h5YmE6IE5lc3ByJmFhY3V0ZTt2bmUgdnlwbG5lbiZhYWN1dGU7LCBhbGVibyBwciZhYWN1dGU7emRuYSBwb2xvxb5rYSBhdXRvci4nOwokbGFuZ1snZXJyb3JfaW52YWxpZGNhdGVnb3J5J10gPSAnQ2h5YmE6IE5lc3ByJmFhY3V0ZTt2bmUgdnlwbG5lbiZhYWN1dGU7LCBhbGVibyBwciZhYWN1dGU7emRuYSBwb2xvxb5rYSBrYXRlZyZvYWN1dGU7cmlhLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdDaHliYTogTmVzcHImYWFjdXRlO3ZuZSB2eXBsbmVuJmFhY3V0ZTssIGFsZWJvIHByJmFhY3V0ZTt6ZG5hIHBvbG/FvmthIHBvcGlzLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZmlsZSddID0gJ0NoeWJhOiBOZXNwciZhYWN1dGU7dm5lIHZ5cGxuZW4mYWFjdXRlOywgYWxlYm8gcHImYWFjdXRlO3pkbmEgcG9sb8W+a2EgbiZhYWN1dGU7em92IHMmdWFjdXRlO2JvcnUuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRmaWxlbmFtZSddID0gJ0NoeWJhOiBUaWV0byB0eXBpIHMmdWFjdXRlO2Jvcm92IG5pZSBzJnVhY3V0ZTsgcG9kcG9yb3ZhbiZlYWN1dGU7IChwciZpYWN1dGU7cG9uYSkuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRpZCddID0gJ0NoeWJhOiBOZXNwciZhYWN1dGU7dm5lIHVwbG9hZCBpZCc7CiRsYW5nWydlcnJvcl9ub2ZpbGVzJ10gPSAnQ2h5YmE6IMW9aWFkbmUgdnlicmFuJmVhY3V0ZTsgcyZ1YWN1dGU7Ym9yeSc7CiRsYW5nWydmaWxlcyddID0gJ1MmdWFjdXRlO2JvcnknOwokbGFuZ1snZml4bWUnXSA9ICdPJnNjYXJvbjtldHJpxaUgbWVkemVyeSc7CiRsYW5nWydmcmllbmRseW5hbWUnXSA9ICdTJnVhY3V0ZTtib3JvdiZ5YWN1dGU7IG1hbmHFvm1lbnQgKFVwbG9hZHMpJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+V2hhdCBEb2VzIFRoaXMgRG8/PC9oMz4NCjxwPkl0IGlzIGEgbW9kdWxlIGZvciBhbGxvd2luZyBwZW9wbGUgdG8gdXBsb2FkIGFuZCBkb3dubG9hZCBmaWxlcyB0byBhbmQgZnJvbSB5b3VyIHNpdGUuICBJdCBrZWVwcyB0cmFjayBvZiB3aG8gdXBsb2FkZWQgYSBmaWxlLCBhbmQgd2hvIGhhcyBkb3dubG9hZGVkIGl0LiAgQXMgd2VsbCwgeW91IGNhbiBzb3J0IGZpbGVzIGludG8gY2F0ZWdvcmllcywgYW5kIG1hbmFnZSB0aGUgZmlsZXMgdGhhdCB3ZXJlIHVwbG9hZGVkIGxpa2UgZXZlcnkgYWRtaW5pc3RyYXRvciB3b3VsZCBkbzwvcD4gDQo8aDM+SG93IERvIEkgVXNlIEl0PC9oMz4NCjxwPjxzdHJvbmc+V2FybmluZzwvc3Ryb25nPiAtIFRoZSBwcm9wZXIgYmVoYXZpb3VyIG9mIHRoaXMgbW9kdWxlIGRlcGVuZHMgb24gbnVtZXJvdXMgcGhwIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzLiAgVGhlc2UgaW5jbHVkZSA8ZW0+KGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8pPC9lbT4sIHBocCYjMDM5O3MgbWVtb3J5X2xpbWl0LCBzYWZlX21vZGUsIGZpbGVfdXBsb2FkcywgdXBsb2Fkc19tYXhfZmlsZXNpemUsIGFuZCBtYXhfZXhlY3V0aW9uX3RpbWUuICBUaGVzZSB2YXJpYWJsZXMgbWF5IG5lZWQgYWRqdXN0bWVudCBmb3IgdGhpcyBtb2R1bGUgdG8gd29yayBwcm9wZXJseSBvbiB5b3VyIHNpdGUuICBJdCBpcyBhZHZpc2VkIHRoYXQgeW91IHdvcmsgd2l0aCB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIG9yIGhvc3QgcHJvdmlkZXIgdG8gdHVuZSB0aGVzZSBzZXR0aW5ncyBmb3IgeW91ciByZXF1aXJlbWVudHMuPC9wPg0KPHA+VG8gdXNlIHRoaXMgbW9kdWxlLCB0byBhbGxvdyB1c2VycyB0byB1cGxvYWQgZmlsZXMgdG8geW91ciBzaXRlLCB5b3Ugc2hvdWxkIGluc3RhbGwgdGhlIG1vZHVsZSwgYW5kIHRoZW4gY3JlYXRlIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgKGEuay5hKSBkaXJlY3RvcmllcyBmb3IgdGhlIHVwbG9hZGVkIGZpbGVzIHRvIGdvIGludG8uIFRoZW4gYWRkIGEgdGFnIGludG8gYSBwYWdlIG9yIHRlbXBsYXRlIHNvbWV3aGVyZSBsaWtlIHtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDtVcGxvYWRzJnF1b3Q7IGNhdGVnb3J5PSZxdW90O3NvbWVjYXRlZ29yeSZxdW90OyBtb2RlPSZxdW90O3NvbWVtb2RlJnF1b3Q7fS4gIFdoZXJlIG1vZGUgbWF0Y2hlcyBvbmUgb2YgdGhlIG1vZGVzIGxpc3RlZCBiZWxvdy4gIFRoZSBvdXRwdXQgd2lsbCBkaWZmZXIgZGVwZW5kaW5nIHVwb24gd2hpY2ggbW9kZSB5b3Ugc2VsZWN0LjwvcD4NCjxwPlRoaXMgbW9kdWxlIGNhbiB1c2UgdGhlIEZyb250ZW5kVXNlcnMgbW9kdWxlIChvcHRpb25hbCkgdG8gZ2V0IGluZm9ybWF0aW9uIGFib3V0IGFueSBjdXJyZW50bHkgbG9nZ2VkIGluIHVzZXJzIHRvIHBhcnRseSBmaWxsIGluIHRoZSBmb3JtIHdoZW4gdXBsb2FkaW5nIGZpbGVzOzwvcD4NCjxoMz5QZXJtaXNzaW9uczwvaDM+DQo8dWw+DQo8bGk+PGVtPk1hbmFnZSBVcGxvYWRzPC9lbT4gcGVybWlzc2lvbiBpcyBuZWVkZWQgdG8gbWFuYWdlIGNhdGVnb3JpZXMsIGFuZCB0aGUgZmlsZXMgd2l0aGluIHRoZW0uPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFRlbXBsYXRlczwvZW0+IHBlcm1pc3Npb24gaXMgbmVlZGVkIGVkaXQgYW55IG9mIHRoZSB0ZW1wbGF0ZXMuPC9saT4NCjxsaT48ZW0+TW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXM8L2VtPiBwZXJtaXNzaW9uIGlzIG5lZWRlZCBhbnkgb2YgdGhlIGZpbGUgc2V0dGluZ3MuPC9saT4NCjwvdWw+DQo8aDM+Q2F0ZWdvcnkgQnJvd3Npbmc8L2gzPg0KPHA+UGxhY2luZyBhIHRhZyBsaWtlIHtjbXNfbW9kdWxlIG1vZHVsZT0mcXVvdDtVcGxvYWRzJnF1b3Q7IGFjdGlvbj0mcXVvdDtjYXRlZ29yeXN1bW1hcnkmcXVvdDsgdGVtcGxhdGU9JnF1b3Q7c3VtbWFyeXRlbXBsYXRlJnF1b3Q7IHNvcnRvcmRlcj0mcXVvdDtuYW1lX2FzYyZxdW90OyBsaXN0aW5ndGVtcGxhdGU9JnF1b3Q7bGlzdHRlbXBsYXRlJnF1b3Q7IGxpc3Rpbmdzb3J0b3JkZXI9JnF1b3Q7bGlzdHNvcnRvcmRlciZxdW90O30NCmFsbG93cyB5b3UgdG8gZGlzcGxheSBhbiBpbnRlcmFjdGl2ZSBjYXRlZ29yeSBicm93c2VyLiBzb3J0b3JkZXIgY2FuIGJlOiBuYW1lX2FzYywgbmFtZV9kZXNjLCBzdW1tX2FzYywgc3VtbV9kZXNjLCBvciByYW5kb20uDQpsaXN0aW5ndGVtcGxhdGUgYW5kIGxpc3Rpbmdzb3J0b3JkZXIgYXJlIGlkZW50aWNhbCB0byB0aGUgdGVtcGxhdGUgYW5kIHNvcnRvcmRlciBwYXJhbWV0ZXJzIGZvcg0KdGhlICZxdW90O3N1bW1hcnkmcXVvdDsgbW9kZS48L3A+DQo8aDM+RW1haWxpbmc8L2gzPg0KPHA+VGhpcyBtb2R1bGUgaXMgY2FwYWJsZSBvZiBzZW5kaW5nIGFuIGVtYWlsIHdoZW5ldmVyIGEgZmlsZSBpcyB1cGxvYWRlZCwgc2VlIHRoZSBwcmVmZXJlbmNlcyB0YWIuICBIb3dldmVyLCB0byBkbyB0aGlzIHRoZSA8Yj5DTVNNYWlsZXI8L2I+IHBhY2thZ2UgbXVzdCBiZSBpbnN0YWxsZWQgYW5kIGNvbmZpZ3VyZWQuICBUaGlzIGlzIGFuIDxlbT5vcHRpb25hbDwvZW0+IHN0ZXAsIGFuZCBpZiB0aGUgQ01TTWFpbGVyIG1vZHVsZSBpcyBub3QgaW5zdGFsbGVkLCBub3RoaW5nIHdpbGwgYmUgZGlzcGxheWVkIHRvIHRoZSB1c2VyLCBvbmx5IGEgbG9nIG1lc3NhZ2Ugd2lsbCBiZSBwbGFjZWQgaW50byB0aGUgYWRtaW4gbG9nPC9wPg0KPGgzPlN5c3RlbSBTZXR0aW5nczwvaDM+DQo8cD48Yj5Ob3RlOjwvYj4gVGhpcyBtb2R1bGUgZG9lcyBub3QgYnlwYXNzIG9yIGdldCBwYXN0IGFueSBmaWxlIHNpemUgbGltaXRhdGlvbnMgaW4gcGhwLiAgSXQgd29ya3MgaW4gY29uanVuY3Rpb24gd2l0aCB0aGVtLiAgVGhlcmVmb3JlIHlvdSBtYXkgbmVlZCB0byBtb2RpZnkgeW91ciBwaHAuaW5pIGZpbGUgYW5kL29yIHlvdXIgaHR0cGQuY29uZiBmaWxlKHMpIHRvIGFsbG93IHlvdSB0byB1cGxvYWQgZmlsZXMgYXMgbGFyZ2UgYXMgd2hhdCB5b3UgaGF2ZSBzZXQgaW4gdGhlIHVwbG9hZHMgbW9kdWxlIHByZWZlcmVuY2VzLjwvcD4NCjxoMz5BcGFjaGUgTm90ZXM8L2gzPg0KPHA+SW4gb3JkZXIgdG8gYWxsb3cgbGFyZ2UgZmlsZSB1cGxvYWRzLCB5b3UgbWF5IG5lZWQgdG8gbW9kaWZ5IHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBpbiB5b3VyIHBocC5pbmkgIEluIGFkZGl0aW9uLCB0aGUgTGltaXRSZXF1ZXN0Qm9keSBwYXJhbWV0ZXIgaW4geW91ciBhcGFjaGUgY29uZmlndXJhdGlvbiwgbWF5IG5lZWQgdG8gYmUgYWRqdXN0ZWQgdG8gbWF0Y2ggdGhlIHVwbG9hZF9tYXhfZmlsZXNpemUgcGFyYW1ldGVyPC9wPg0KPHA+Tm90ZTogIHRoZSB1cGxvYWRfbWF4X2ZpbGVzaXplIHBhcmFtZXRlciBjYW4gYmUgc3BlY2lmaWVkIGluIGJ5dGVzLCBraWxvYnl0ZXMsIG9yIG1lZ2FieXRlcywgaG93ZXZlciB0aGUgTGltaXRSZXF1ZXRCb2R5IHBhcmFtZXRlciBpcyBvbmx5IHNwZWNpZmllZCBpbiBieXRlczwvcD4NCic7CiRsYW5nWydpZCddID0gJ0lkJzsKJGxhbmdbJ2luc3RhbGxlZCddID0gJ01vZHVsIHZlcnppYSAlcyBuYWluJnNjYXJvbjt0YWxvdmFuJnlhY3V0ZTsuJzsKJGxhbmdbJ2lwX2FkZHJlc3MnXSA9ICdJUCBhZHJlc2EnOwokbGFuZ1snbW9kZGVzY3JpcHRpb24nXSA9ICdNb2R1bCwga3RvciZ5YWN1dGU7IGRvayZhYWN1dGU7xb5lIG5haHImYWFjdXRlO3ZhxaUgIGEgc3ByYXZvdmHFpSBzJnVhY3V0ZTtib3J5JzsKJGxhbmdbJ25hbWUnXSA9ICdNZW5vJzsKJGxhbmdbJ3JlbmFtZW1lc3NhZ2UnXSA9ICdVcHJhdnRlIG1lbm8gcHJlIHByZW1lbm92YW5pZSc7CiRsYW5nWydwYXRoJ10gPSAnQ2VzdGEnOwokbGFuZ1sncGF0aG1lc3NhZ2UnXSA9ICdVcHJhdnRlIG0mZWFjdXRlO25vIGthdGVnJm9hY3V0ZTtyaWUgcHJlIHByZXN1biBzJnVhY3V0ZTtib3J1IGRvIGluJmVhY3V0ZTtobyBhZHJlcyZhYWN1dGU7cmEnOwokbGFuZ1sncGF0aGludXBsb2FkcyddID0gJyhyZWxhdCZpYWN1dGU7dm5hIGsgdXBsb2FkcyBhZHJlcyZhYWN1dGU7cnUpJzsKJGxhbmdbJ3Bvc3RpbnN0YWxsJ10gPSAnPHA+VGhlIHVwbG9hZHMgbW9kdWxlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBpbnN0YWxsZWQuIEJlIHN1cmUgdG8gc2V0ICZxdW90O01hbmFnZSBVcGxvYWRzJnF1b3Q7IHBlcm1pc3Npb25zIHRvIHVzZSB0aGlzIG1vZHVsZSE8L3A+DQo8cD48c3Ryb25nPldhcm5pbmc8L3N0cm9uZz4gLSBUaGUgcHJvcGVyIGJlaGF2aW91ciBvZiB0aGlzIG1vZHVsZSBkZXBlbmRzIG9uIG51bWVyb3VzIHBocCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcy4gIFRoZXNlIGluY2x1ZGUgPGVtPihidXQgYXJlIG5vdCBsaW1pdGVkIHRvKTwvZW0+LCBwaHAmIzAzOTtzIG1lbW9yeV9saW1pdCwgc2FmZV9tb2RlLCBmaWxlX3VwbG9hZHMsIHVwbG9hZHNfbWF4X2ZpbGVzaXplLCBhbmQgbWF4X2V4ZWN1dGlvbl90aW1lLiAgVGhlc2UgdmFyaWFibGVzIG1heSBuZWVkIGFkanVzdG1lbnQgZm9yIHRoaXMgbW9kdWxlIHRvIHdvcmsgcHJvcGVybHkgb24geW91ciBzaXRlLiAgSXQgaXMgYWR2aXNlZCB0aGF0IHlvdSB3b3JrIHdpdGggeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBvciBob3N0IHByb3ZpZGVyIHRvIHR1bmUgdGhlc2Ugc2V0dGluZ3MgZm9yIHlvdXIgcmVxdWlyZW1lbnRzLjwvcD4nOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01vZHVsIGJvbCAmdWFjdXRlO3NwZSZzY2Fyb247bmUgb2RzdHImYWFjdXRlO25lbiZ5YWN1dGU7LiAgTmVib2xpIG9kc3RyJmFhY3V0ZTtuZW4mZWFjdXRlOyDFvmlhZG5lIHMmdWFjdXRlO2JvcnknOwokbGFuZ1sncHJlZmVyZW5jZXMnXSA9ICdOYXN0YXZlbmlhJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ05hc3RhdmVuaWEgbW9kdWx1IGFrdHVhbGl6b3ZhbiZlYWN1dGU7Lic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZXNjJ10gPSAnUG9waXMnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bGlzdGFibGUnXSA9ICdTJnVhY3V0ZTtib3J5IHYgdG9tdG8gYWRyZXMmYWFjdXRlO3J5IG0mb2NpcmM7xb51IGJ5xaUgIHphcmFkZW4mZWFjdXRlOyBkbyB6b3puYW11JzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeW5hbWUnXSA9ICdOJmFhY3V0ZTt6b3Yga2F0ZWdvJm9hY3V0ZTtyaWUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ0Nhc3RlIG5hIHNlcnZlcmknOwokbGFuZ1sncHJvbXB0X2RlbGV0ZWRpcmVjdG9yeSddID0gJ09kc3RyJmFhY3V0ZTtpxaUgYWRyZXMmYWFjdXRlO3Iga2F0ZWcmb2FjdXRlO3JpZT8nOwokbGFuZ1sncHJvbXB0X21heF91cGxvYWRzaXplJ10gPSAnTWF4aW0mYWFjdXRlO2xuYSB2ZcS+a29zxaUgbmFociZhYWN1dGU7dmFuJmVhY3V0ZTtobyBzJnVhY3V0ZTtib3J1IChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdQb2xvdm4mZWFjdXRlOyBuYWhyJmFhY3V0ZTt2YW4mZWFjdXRlOyBwciZpYWN1dGU7cG9ueSc7CiRsYW5nWydzY2FuJ10gPSAnU2tlbm92YcWlJzsKJGxhbmdbJ3NlbGVjdGNhdGVnb3J5J10gPSAnVnlicmHFpSBrYXRlZyZvYWN1dGU7cml1JzsKJGxhbmdbJ3NpemUnXSA9ICdWZcS+a29zxaUnOwokbGFuZ1snc2l6ZWtiJ10gPSAnVmXEvmtvc8WlIChLYiknOwokbGFuZ1snc3VibWl0J10gPSAnT2Rvc2xhxaUnOwokbGFuZ1snc3VtbWFyeV90ZW1wbGF0ZSddID0gJyZTY2Fyb247YWJsJm9hY3V0ZTtueSBwcmUgdiZ5YWN1dGU7cGlzIChzJnVhY3V0ZTtocm4pJzsKJGxhbmdbJ3N1bW1hcnknXSA9ICdTJnVhY3V0ZTtocm4gKHYmeWFjdXRlO3BpcyknOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdVcGxvYWRzIG1vZHVsJzsKJGxhbmdbJ3RpdGxlX21vZF9hZG1pbiddID0gJ0FkbWluIHBhbmVsIG1vZHVsdSc7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdOYXN0YXZlbmlhJzsKJGxhbmdbJ3RpdGxlX3N1Ym5ldF9leGNsdXNpb25zJ10gPSAnVnluZWNoYcWlIHN1Ym5ldHMgem8gJnNjYXJvbjt0YXRpc3QmaWFjdXRlO2snOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ1Bvdm9sZW4mZWFjdXRlOyBwciZpYWN1dGU7cG9ueSc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsIG9kaW4mc2Nhcm9uO3RhbG92YW4meWFjdXRlOyc7CiRsYW5nWyd1cGdyYWRlZCddID0gJ01vZHVsIGFrdHVhbGl6b3ZhbiZ5YWN1dGU7IG5hIHZlcnppdSAlcy4nOwokbGFuZ1sndXBsb2FkJ10gPSAnTmFocmHFpSc7CiRsYW5nWyd1cGxvYWRlZCddID0gJ1MmdWFjdXRlO2JvciAlcyBib2wgbmFocmF0JnlhY3V0ZTsgJXMuJzsKJGxhbmdbJ3JlcGxhY2VkJ10gPSAnUyZ1YWN1dGU7Ym9yICVzIGJvbCBwcmVwJmlhY3V0ZTtzYW4meWFjdXRlOyAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ1MmdWFjdXRlO2JvciAlcyBib2wgb2RzdHImYWFjdXRlO25lbiZ5YWN1dGU7Lic7CiRsYW5nWyd1cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnJlNjYXJvbjthYmwmb2FjdXRlO25hIHByZSBmb3JtdWwmYWFjdXRlO3IgcHJlIG5haHJhdGllIHMmdWFjdXRlO2JvcnUnOwokbGFuZ1sndXNlcm5hbWUnXSA9ICdVxb4maWFjdXRlO3ZhdGXEvnNrJmVhY3V0ZTsgbWVubyc7CiRsYW5nWyd3YXJuaW5nX2RlbGV0ZWNhdGVnb3J5J10gPSAnVkFST1ZBTklFOiBEJmFhY3V0ZTt2YWp0ZSBzdSBwb3pvciBwcmkgbWF6YW4maWFjdXRlOyBrYXRlZyZvYWN1dGU7cmlpLCBzJnVhY3V0ZTtib3J5IG0mb2NpcmM7xb51IGJ5xaUgb2RzdHImYWFjdXRlO25lbiZlYWN1dGU7JzsKJGxhbmdbJ3dlbGNvbWVfdGV4dCddID0gJzxwPlZpdGFqIHYgYWRtaW5pc3RyJmFhY3V0ZTtjaWkgVXBsb2FkcyBtb2R1bHUuIFNvbWV0aGluZyBlbHNlIHdvdWxkIHByb2JhYmx5IGdvIGhlcmUgaWYgdGhlIG1vZHVsZSBhY3R1YWxseSBkaWQgc29tZXRoaW5nLjwvcD4nOwokbGFuZ1sndXRteiddID0gJzE1Njg2MTM1My4xMjI4NjkxNjc2LjIyMy4xNS51dG1jY249KHJlZmVycmFsKXx1dG1jc3I9YnVybmVyLmt1em1hbnkuYml6fHV0bWNjdD0vaW5zdGFsbC91cGdyYWRlLnBocHx1dG1jbWQ9cmVmZXJyYWwnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xNTgyOTEzMzUzMDA0NjYxMDAuMTIyMTkwNjQ3MC4xMjI5NjI4ODA4LjEyMjk2MzQ3NDAuMjQ3JzsKJGxhbmdbJ3V0bWMnXSA9ICcxNTY4NjEzNTMnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4yLjEwLjEyMjk2MzQ3NDAnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lang/ext/sv_SE.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeV9zY2FubmFibGUnXSA9ICdTa2FubmEgYXV0b21hdGlza3QgZGVubmEga2F0ZWdvcmkgZWZ0ZXIgbnlhIGZpbGVyPyc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X3NjYW5uYWJsZSddID0gJ1ZpZCAmYXJpbmc7dGtvbXN0IGZyJmFyaW5nO24gZnJvbnQgZW5kIHNrYW5uYXMgYXV0b21hdGlza3QgZGVubmEga2F0ZWdvcmkgZWZ0ZXIgbnlhIGZpbGVyJzsKJGxhbmdbJ3Byb21wdF90bF9hY2Nlc3MnXSA9ICdUaWRzYmVnciZhdW1sO25zYWQgJmFyaW5nO3Rrb21zdCc7CiRsYW5nWydwcm9tcHRfYWxsb3dfdXBsb2FkX3NlbmRmaWxlJ10gPSAnVGlsbCZhcmluZzt0IGF0dCBza2lja2EgZmlsZXIgZGlyZWt0IHAmYXJpbmc7IGFkbWluIHVwbG9hZCc7CiRsYW5nWydtc2dfYXV0b19kZWxldGVfZmlsZSddID0gJ1JhZGVyYWRlIGF1dG9tYXRpc2t0IHV0ZyZhcmluZztuZ25hIGZpbGVyOiAlcyc7CiRsYW5nWydtc2dfYXV0b19kZWxldGVfZmlsZV9mYWlsZWQnXSA9ICdSJmF1bWw7dHRpZ2hldHNwcm9ibGVtLCBhdXRvbWF0aXNrIHJhZGVyaW5nIGF2ICVzIG1pc3NseWNrYWRlcyc7CiRsYW5nWydpbmZvX2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnU3BlY2lmaWNlcmEgYW50YWxldCB0aW1tYXIgaW5uYW4gZmlsZXIgaSBkZW5uYSBrYXRlZ29yaSBrYW4gcmFkZXJhcy4gQW52JmF1bWw7bmQgdiZhdW1sO3JkZXQgMCBmJm91bWw7ciBhdHQgaW5kaWtlcmEgYXR0IGZpbGVyIGludGUgc2thbGwgcmFkZXJhcy4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gPSAnQW50YWxldCB0aW1tYXIgaW5uYW4gZmlsZXIgaSBkZW5uYSBrYXRlZ29yaSBhdXRvbWF0aXNrdCByYWRlcmFzJzsKJGxhbmdbJ2luZm9fZGZsdF9jYXRlZ29yeV9leHBpcnknXSA9ICdTdGFuZGFyZHYmYXVtbDtyZGV0IGYmb3VtbDtyIG55YSBrYXRlZ29yaWVyIHNvbSBzcGVjaWZpY2VyYXIgaHVyIGwmYXVtbDtuZ2UgZmlsZXIgZXhpc3RlcmFyIGkgZGVubmEga2F0ZWdvcmkgaW5uYW4gZG9tIGF1dG9tYXRpc2t0IHJhZGVyYXMuIEFudiZhdW1sO25kIHYmYXVtbDtyZGV0IDAgZiZvdW1sO3IgYXR0IGluZGlrZXJhIGF0dCBkZSBpbnRlIHNrYWxsIHJhZGVyYXMuJzsKJGxhbmdbJ3RpdGxlX2NhdGVnb3J5X2V4cGlyeSddID0gJ0NhdGVnb3J5IGV4cGlyeSBwZXJpb2QgPGVtPihocnMpPC9lbT4nOwokbGFuZ1snaW5mb19jYXRlZ29yeWRlbGV0YWJsZSddID0gJ0F1dGhvcml6ZWQgdXNlcnMgd2lsbCBoYXZlIHBlcm1pc3Npb24gdG8gZGVsZXRlIHRoZXNlIGZpbGVzLiAgVGhpcyBtZWFucyB0aGF0IGEgdXJsIHdpbGwgYmUgcHJvdmlkZWQgaW4gdGhlIGFwcHJvcHJpYXRlIHRlbXBsYXRlcyB0byBhbGxvdyBkZWxldGluZyBvZiB0aGUgZmlsZS4gIEEgd2Vic2l0ZSBkZXZlbG9wZXIgY2FuIHVzZSBhcHByb3ByaWF0ZSBzbWFydHkgbG9naWMgdG8gc2hvdyBhIGxpbmsgdG8gYXV0aG9yaXplZCB1c2Vycy4nOwokbGFuZ1snY29weV9maWxlcyddID0gJ0tvcGllcmEgZmlsZXInOwokbGFuZ1snZXJyb3JfZmlsZXRvb2xhcmdlJ10gPSAnRmlsZW4gZHUgZiZvdW1sO3JzJm91bWw7a3RlIGxhZGRhIHVwcCAmYXVtbDtyIHN0Jm91bWw7cnJlICZhdW1sO24gQ01TTVNzIG1heGltYWxhIGZpbHVwcGxhZGRuaW5nc3N0b3JsZWsnOwokbGFuZ1snYXJleW91c3VyZV9kZWxldGVjYXRlZ29yeSddID0gJyZBdW1sO3IgZHUgcyZhdW1sO2tlciBwJmFyaW5nOyBhdHQgZHUgdmlsbCByYWRlcmEgZGVubmEga2F0ZWdvcmk/JzsKJGxhbmdbJ2Vycm9yX2RlbGV0ZSddID0gJ0V0dCBvYmpla3Qga3VuZGUgaW50ZSByYWRlcmFzICglcyknOwokbGFuZ1snY29uZmlybV9jYXRfbXVsdGlhY3Rpb24nXSA9ICcmQXVtbDtyIGR1IHMmYXVtbDtrZXIgcCZhcmluZzsgYXR0IGR1IHZpbGwgZ2Vub21mJm91bWw7cmEgZGVuIGgmYXVtbDtyICZhcmluZzt0ZyZhdW1sO3JkZW4gcCZhcmluZzsgZGUgdmFsZGEga2F0ZWdvcmllcm5hPyc7CiRsYW5nWydlcnJvcl9ub3RoaW5nX3NlbGVjdGVkJ10gPSAnRmVsOiBJbmdldCB2YWxkZXMnOwokbGFuZ1snd2l0aF9zZWxlY3RlZCddID0gJ01lZCB2YWxkOic7CiRsYW5nWydlcnJvcl9yZXBsYWNlX21pc21hdGNoZWRfZmlsZWV4dCddID0gJ04mYXVtbDtyIGR1IGVycyZhdW1sO3R0ZXIgZW4gZmlsIG0mYXJpbmc7c3RlIGR1IGxhZGRhIHVwcCBlbiBmaWwgYXYgZXhha3Qgc2FtbWEgdHlwIChmaWwmYXVtbDtuZGVsc2UpLiBGaWxlbiBkdSB2YWxkZSBtYXRjaGFyIGludGUgb3JpZ2luYWxmaWxlbi4nOwokbGFuZ1sncmVwbGFjZSddID0gJ0VycyZhdW1sO3R0JzsKJGxhbmdbJ2luZm9fcmVwbGFjZWZpbGUnXSA9ICdZb3UgbWF5IHVwbG9hZCBhIHJlcGxhY2VtZW50IGZpbGUsIGlmIHRoZSBmaWxlIGlzIGFuIGltYWdlIHR5cGUsIGFuZCB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIGEgcmVwbGFjZW1lbnQgdGh1bWJuYWlsLCBhIG5ldyB0aHVtYm5haWwgd2lsbCBiZSBnZW5lcmF0ZWQnOwokbGFuZ1sncHJvbXB0X3JlcGxhY2VmaWxlJ10gPSAnTGFkZGEgdXBwIGVycyZhdW1sO3R0bmluZ3NmaWwnOwokbGFuZ1sndGl0bGVfZml4c3BhY2VzJ10gPSAnRml4YSBtZWxsYW5zbGFnIGkgZmlsbmFtbmV0JzsKJGxhbmdbJ2NhdGVnb3J5X2NvcGllZCddID0gJ0thdGVnb3JpbiAmYXVtbDtyIG51IGtvcGllcmFkJzsKJGxhbmdbJ2Vycm9yX2R1cGxpY2F0ZXBhdGgnXSA9ICdWYXIgdiZhdW1sO25saWcgc3BlY2lmaWNlcmEgZXR0IGthdGFsb2duYW1uIHNvbSBza2lsamVyIHNpZyBmciZhcmluZztuIGsmYXVtbDtsbGFuLCBvY2ggc29tIGludGUgcmVkYW4gYW52JmF1bWw7bmRzLic7CiRsYW5nWydvcGVyYXRpb25fY2FuY2VsbGVkJ10gPSAnT3BlcmF0aW9uIENhbmNlbGxlZCc7CiRsYW5nWydzb3VyY2UnXSA9ICdLJmF1bWw7bGxhJzsKJGxhbmdbJ2Rlc3RpbmF0aW9uJ10gPSAnTSZhcmluZztsJzsKJGxhbmdbJ3Byb21wdF9jb3B5X2ZpbGVzJ10gPSAnS29waWVyYSBrYXRlZ29yaSBmaWxlcic7CiRsYW5nWydpbmZvX2NvcHlfZmlsZXMnXSA9ICdLb3BpZXJhIGZpbGVybmEgZnImYXJpbmc7biBrJmF1bWw7bGxrYXRlZ29yaW4gdGlsbCBtJmFyaW5nO2xrYXRlZ29yaW4nOwokbGFuZ1snZXh0cmEnXSA9ICdFeHRyYSc7CiRsYW5nWydjb3B5J10gPSAnS29waWVyYSc7CiRsYW5nWydzZWxlY3RvbmUnXSA9ICdWJmF1bWw7bGogZW4nOwokbGFuZ1snYXV0b3dhdGVybWFyayddID0gJ0F1dG9tYXRpc2t0IHBsYWNlcmEgZXR0IHZhdHRlbm0mYXVtbDtya2UgcCZhcmluZzsgYmlsZGVybmEnOwokbGFuZ1snaW1hZ2Vfc2V0dGluZ3MnXSA9ICdCaWxkaW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3Byb21wdF9nZXRmaWxlX3Jlc3VsdHBhZ2UnXSA9ICdTaWRhIGF0dCBhbnYmYXVtbDtuZGFzIGYmb3VtbDtyIGZlbCBvY2ggYW5kcmEgbWVkZGVsYW5kZW4gcmVsYXRlcmFkZSB0aWxsIGZpbG5lcmxhZGRuaW5nJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWRfa2V5J10gPSAnVGhlIHVwbG9hZCBrZXkgc3BlY2lmaWVkIGlzIGludmFsaWQgKG1heWJlIGl0IGhhcyByZWFjaGVkIGl0cyBtYXhpbXVtIGRvd25sb2FkIGNhcGFjaXR5IG9yIGhhcyBleHBpcmVkKSc7CiRsYW5nWydkZmx0X3RpbWVsaW1pdGVkX3N1YmplY3QnXSA9ICd7JHNpdGVuYW1lfSAtIFlvdSBoYXZlIGJlZW4gZ3JhbnRlZCBhY2Nlc3MgdG8geyRlbnRyeS0+dXBsb2FkX25hbWV8c3RyaXBfdGFnc30gZm9yIGEgbGltaXRlZCB0aW1lJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0J10gPSAnU3ViamVjdCBmb3IgZW1haWwgY3JlYXRlZCB3aGVuIHNlbmRpbmcgYSB0aW1lIGxpbWl0ZWQgVVJMJzsKJGxhbmdbJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJ10gPSAnQXV0byBkZWxldGUgZXhwaXJlZCBlbnRyaWVzIGFmdGVyIE4gaG91cnMgPGVtPihzcGVjaWZ5IDAgdG8gZGlzYWJsZSBhdXRvZGVsZXRlKTwvZW0+Oic7CiRsYW5nWydwcm9tcHRfdGltZWxpbWl0ZWRfc2VuZGl0J10gPSAnU2tpY2thIGRlbiBoJmF1bWw7ciBVUkxlbiB0aWxsIGRlbiB1dHNlZGRhIGUtcG9zdGFkcmVzcz8nOwokbGFuZ1sndXJsX2tleSddID0gJ1VSTCBueWNrZWwnOwokbGFuZ1snY3JlYXRlZCddID0gJ1NrYXBhZCc7CiRsYW5nWydleHBpcmVzJ10gPSAnRiZvdW1sO3JmYWxsZXInOwokbGFuZ1snYWRkZWRpdF90aW1lbGltaXRlZF9rZXknXSA9ICdBZGQvRWRpdCBUaW1lIExpbWl0ZWQgS2V5JzsKJGxhbmdbJ3RpbWVfbGltaXRlZF9rZXlfYWRkZWQnXSA9ICdUaW1lIExpbWl0ZWQgS2V5IEFkZGVkJzsKJGxhbmdbJ251bV9ob3VycyddID0gJ0FudGFsIHRpbW1hcic7CiRsYW5nWydudW1fZG93bmxvYWRzJ10gPSAnQW50YWwgbmVkbGFkZG5pbmdhcic7CiRsYW5nWydlbWFpbF9hZGRyZXNzJ10gPSAnRXBvc3QgYWRyZXNzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdfaW52YWxpZCddID0gJ0V0dCB2JmF1bWw7cmRlIHNvbSBiZWcmYXVtbDtyZGVzIHNha25hcyBlbGxlciAmYXVtbDtyIG9naWx0aWc6ICVzJzsKJGxhbmdbJ2FkZF90aW1lbGltaXRlZF9rZXknXSA9ICdBZGQgVGltZSBMaW1pdGVkIEtleSc7CiRsYW5nWydmaWxlX2luZm8yJ10gPSAnRmlsICVzIChpZD0lZCknOwokbGFuZ1snaW5mb190aW1lbGltaXRlZF9kb3dubG9hZHMnXSA9ICdTcGVjaWZ5IHRoZSBkZWZhdWx0IG51bWJlciBvZiB0aW1lcyB0aGF0IGEgZmlsZSBpZGVudGlmaWVkIGJ5IGEgcGFydGljdWxhciBrZXkgY2FuIGJlIGRvd25sb2FkZWQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcyddID0gJ0RlZmF1bHQgTnVtYmVyIG9mIERvd25sb2Fkcyc7CiRsYW5nWydpbmZvX3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnU3BlY2lmeSB0aGUgZGVmYXVsdCBudW1iZXIgb2YgaG91cnMgdGhhdCBhIHRpbWUgbGltaXRlZCBrZXkgaXMgdmFsaWQgZm9yLiAgU3BlY2lmeSAwIGZvciB1bmxpbWl0ZWQnOwokbGFuZ1sncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJ10gPSAnTnVtYmVyIG9mIGhvdXJzIGEgVGltZSBMaW1pdGVkIEtleSBpcyB2YWxpZCBmb3InOwokbGFuZ1sndGltZWxpbWl0ZWRfdXJsX3NldHRpbmdzJ10gPSAnVGltZSBMaW1pdGVkIEtleSBTZXR0aW5ncyc7CiRsYW5nWydtYW5hZ2VfdGltZWxpbWl0ZWQnXSA9ICdNYW5hZ2UgVGltZSBMaW1pdGVkIEFjY2Vzcyc7CiRsYW5nWyd1cGxvYWRpbmdfc2V0dGluZ3MnXSA9ICdGaWxlIFVwbG9hZCBTZXR0aW5ncyc7CiRsYW5nWydnZW5lcmFsX3NldHRpbmdzJ10gPSAnQWxsbSZhdW1sO25uYSBpbnN0JmF1bWw7bGxuaW5nYXInOwokbGFuZ1sndGh1bWJuYWlsX3NldHRpbmdzJ10gPSAnVGh1bWJuYWlsIEdlbmVyYXRpb24nOwokbGFuZ1sndGl0bGVfcmVkaXJlY3Rfb25fc2VuZGZpbGUnXSA9ICdQYWdlIHRvIHJlZGlyZWN0IHRvIGFmdGVyIHNlbmRpbmcgYSBmaWxlJzsKJGxhbmdbJ2xibF9iYWNrJ10gPSAnVGlsbGJha2EnOwokbGFuZ1snbGJsX3RlbXBsYXRlcyddID0gJ1JlZGlnZXJhIG1hbGxhcic7CiRsYW5nWydwcm9tcHRfcHVibGljX2ZpZWxkJ10gPSAnRmllbGQgaXMgcHVibGljIDxlbT4oY2FuIGJlIHZpZXdlZCBieSBzaXRlIHZpc2l0b3JzKTwvZW0+JzsKJGxhbmdbJ3VwbG9hZF9lZGl0ZWQnXSA9ICdGaWxlIERldGFpbHMgRWRpdGVkIG9uICVzJzsKJGxhbmdbJ2luZm9fdGh1bWJuYWlsJ10gPSAnRW4gdmFsZnJpIGZpbCBtZWQgdHVtbmFnZWxiaWxkJzsKJGxhbmdbJ3VwbG9hZF9maWxlJ10gPSAnTGFkZGEgdXBwIGVuIG55IGZpbCc7CiRsYW5nWydtc2dfZmllbGRfZGVsZXRlZCddID0gJ0YmYXVtbDtsdGV0IHJhZGVyYXQnOwokbGFuZ1snYXNrX2RlbGV0ZV9maWVsZCddID0gJ0FyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgdGhpcyBmaWVsZCBkZWZpbml0aW9uIGFuZCBhbGwgYXNzb2NpYXRlZCB2YWx1ZXM/JzsKJGxhbmdbJ3llcyddID0gJ0phJzsKJGxhbmdbJ25vJ10gPSAnTmVqJzsKJGxhbmdbJ3R5cGUnXSA9ICdUeXAnOwokbGFuZ1snZmllbGR0eXBlX211bHRpc2VsZWN0J10gPSAnTXVsdGlzZWxlY3QgTGlzdCc7CiRsYW5nWydmaWVsZHR5cGVfZHJvcGRvd24nXSA9ICdMaXN0cnV0YSc7CiRsYW5nWydmaWVsZHR5cGVfY2hlY2tib3gnXSA9ICdDaGVja2JveCc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGFyZWEnXSA9ICdUZXh0YXJlYSc7CiRsYW5nWydmaWVsZHR5cGVfdGV4dGlucHV0J10gPSAnVGV4dGlubWF0bmluZyc7CiRsYW5nWydwcm9tcHRfdXNlX3d5c2l3eWcnXSA9ICdVc2UgdGhlIHd5c2l3eWcgd2hlbiBlZGl0aW5nIHRoZSB2YWx1ZSBmb3IgdGhpcyBmaWVsZCc7CiRsYW5nWydwcm9tcHRfZGVmYXVsdF9jb250ZW50J10gPSAnU3RhbmRhcmQgaW5uZWgmYXJpbmc7bGwgZiZvdW1sO3IgdGV4dGFyZWEnOwokbGFuZ1sncHJvbXB0X2Ryb3Bkb3duX29wdGlvbnMnXSA9ICdWYWwgKGVuIHBvc3QgcGVyIHJhZCknOwokbGFuZ1sncHJvbXB0X2ZpZWxkX21heGxlbmd0aCddID0gJ01heGltYWwgbCZhdW1sO25nZCBmJm91bWw7ciBmJmF1bWw7bHQnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX2xlbmd0aCddID0gJ0YmYXVtbDtsdGwmYXVtbDtuZ2QnOwokbGFuZ1sncHJvbXB0X2ZpZWxkX3R5cGUnXSA9ICdGJmF1bWw7bHQgdHlwJzsKJGxhbmdbJ3Byb21wdF9maWVsZF9uYW1lJ10gPSAnRiZhdW1sO2x0bmFtbic7CiRsYW5nWyd0aXRsZV9hZGRfZmllbGQnXSA9ICdBZGQgb3IgRWRpdCBhIEZpZWxkIERlZmluaXRpb24nOwokbGFuZ1snZmllbGRfZGVmaW5pdGlvbnMnXSA9ICdGJmF1bWw7dGRlZmluaXRpb24nOwokbGFuZ1sncHJvbXB0X2FkZF9maWVsZCddID0gJ0wmYXVtbDtnZyB0aWxsIGVuIGYmYXVtbDtsdGRlZmluaXRpb24nOwokbGFuZ1sncGFyYW1fYWN0aW9uJ10gPSAnU3BlY2lmaWVzIHRoZSBiZWhhdmlvdXIgb2YgdGhlIG1vZHVsZSB0YWcuICBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBkZWZhdWx0IC0gKHRoZSBkZWZhZmF1bHQgYmVoYXZpb3IpLCBkZXRhaWwgLSB0byBkaXNwbGF5IGEgZGV0YWlsIHZpZXcgb2YgYSBzaW5nbGUgZmlsZSBiYXNlZCBvbiB0aGUgdXBsb2FkX2lkLCBhbmQgeW91c2VuZGl0IC0gdG8gZGlzcGxheSBhIGZvcm0gdG8gYWxsb3cgdXBsb2FkaW5nIGEgZmlsZSwgYW5kIHNlbmRpbmcgaXQgdG8gbnVtZXJvdXMgYWRkcmVzc2VzIGluIG9uZSBzdGVwJzsKJGxhbmdbJ3BhcmFtX3NlbmRmaWxlcGFnZSddID0gJ1NwZWNpZnkgdGhlIHBhZ2UgaWQgb3IgYWxpYXMgb2YgYSBwYWdlIHRoYXQgc2hvdWxkIGJlIHVzZWQgZm9yIHRoZSBzZW5kIGEgZmlsZSBmb3JtJzsKJGxhbmdbJ2ZpbGVfdXBsb2FkZWQnXSA9ICdGaWx1cHBsYWRkbmluZ2VuIGx5Y2thZGVzJzsKJGxhbmdbJ3RvJ10gPSAnVGlsbCc7CiRsYW5nWyd0aXRsZV95b3VzZW5kaXRmb3JtX3RlbXBsYXRlJ10gPSAnQWRkIG9yIEVkaXQgYSAmcXVvdDtZb3UgU2VuZCBJdCZxdW90OyBGb3JtIFRlbXBsYXRlJzsKJGxhbmdbJ3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUnXSA9ICdZb3VTZW5kSXQgRm9ybSBUZW1wbGF0ZXMnOwokbGFuZ1sndGl0bGVfeW91c2VuZGl0Zm9ybV9zeXNkZWZhdWx0J10gPSAnU3lzdGVtIGRlZmF1bHQgJnF1b3Q7eW91IHNlbmQgaXQmcXVvdDsgdGVtcGxhdGUnOwokbGFuZ1snbXNnX2ZpbGVfc2VudCddID0gJ0EgbWVzc2FnZSBoYXMgYmVlbiBzZW50IHRvIHRoZSBzZWxlY3RlZCBhZGRyZXNzZXMgdGhhdCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmlsZSBhbmQgaG93IHRvIHJldHJpZXZlIGl0Lic7CiRsYW5nWydlcnJvcl9ub2FkZHJlc3NlcyddID0gJ1lvdSBtdXN0IHN1cHBseSBhdCBsZWFzdCBvbmUgZGVzdGluYXRpb24gYWRkcmVzcyc7CiRsYW5nWydlcnJvcl9ub3N1YmplY3QnXSA9ICdEdSBtJmFyaW5nO3N0ZSBhbmdlIGV0dCAmYXVtbDttbmUnOwokbGFuZ1snc3ViamVjdCddID0gJyZBdW1sO21uZSc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZXBhZ2UnXSA9ICdQYWdlIGZvciAmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBmb3JtJzsKJGxhbmdbJ2ZpbGVfaW5mbyddID0gJ0ZpbGluZm8nOwokbGFuZ1snc2VuZCddID0gJ1NraWNrYSc7CiRsYW5nWydub3RlcyddID0gJ05vdGVyaW5nYXInOwokbGFuZ1snYWRkcmVzc2VlcyddID0gJ1NraWNrYSBpbmZvcm1hdGlvbiBvbSBkZW5uYSBmaWwgdGlsbCc7CiRsYW5nWydwcm9tcHRfc2VuZGZpbGVfZW1haWxfdGVtcGxhdGUnXSA9ICcmcXVvdDtTZW5kIGEgRmlsZSZxdW90OyBFbWFpbCBUZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fdGVtcGxhdGUnXSA9ICdBZGQgb3IgRWRpdCBhICZxdW90O1NlbmQgYSBGaWxlJnF1b3Q7IEZvcm0gVGVtcGxhdGUnOwokbGFuZ1snc2VuZGZpbGVmb3JtX3RlbXBsYXRlJ10gPSAnJnF1b3Q7U2VuZCBhIEZpbGUmcXVvdDsgRm9ybSBUZW1wbGF0ZXMnOwokbGFuZ1sncHJvbXB0X25vdGlmeV9lbWFpbF90ZW1wbGF0ZSddID0gJ0ZpbGUgdXBsb2FkIG5vdGlmaWNhdGlvbiBlbWFpbCB0ZW1wbGF0ZSc7CiRsYW5nWyd0aXRsZV9zZW5kZmlsZWZvcm1fc3lzZGVmYXVsdCddID0gJ1N5c3RlbSBkZWZhdWx0ICZxdW90O1NlbmQgYSBGaWxlJnF1b3Q7IGZvcm0gdGVtcGxhdGUnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5ZGVsZXRhYmxlJ10gPSAnRmlsZXIgaSBkZW4gaCZhdW1sO3Iga2F0ZWdvcmluIGthbiByYWRlcmFzJzsKJGxhbmdbJ3RpdGxlX2FsbG93X2RlbGV0ZSddID0gJ1RpbGwmYXJpbmc7dCByYWRlcmluZyBhdiBmaWxlciBmciZhcmluZztuIGZyb250ZW5kJzsKJGxhbmdbJ2RlZmF1bHRfdGVtcGxhdGVzJ10gPSAnU3RhbmRhcmRtYWxsYXInOwokbGFuZ1snZmlyc3RwYWdlJ10gPSAnRiZvdW1sO3JzdGEgc2lkYW4nOwokbGFuZ1sncHJldnBhZ2UnXSA9ICdGJm91bWw7cmVnJmFyaW5nO2VuZGUgc2lkYSc7CiRsYW5nWyduZXh0cGFnZSddID0gJ04mYXVtbDtzdGEgc2lkYSc7CiRsYW5nWydsYXN0cGFnZSddID0gJ1Npc3RhIHNpZGFuJzsKJGxhbmdbJ2ZpcnN0cGFnZV9hcnJvdyddID0gJzw8JzsKJGxhbmdbJ3ByZXZwYWdlX2Fycm93J10gPSAnPCc7CiRsYW5nWyduZXh0cGFnZV9hcnJvdyddID0gJz4nOwokbGFuZ1snbGFzdHBhZ2VfYXJyb3cnXSA9ICc+Pic7CiRsYW5nWydwYWdlJ10gPSAnU2lkYSc7CiRsYW5nWydvZiddID0gJ2F2JzsKJGxhbmdbJ3Byb21wdF9ncm91cGxpc3QnXSA9ICdhdWt0b3Jpc2VyYWRlIEZyb250ZW5kYW52JmF1bWw7bmRhcmUtZ3J1cHBlcic7CiRsYW5nWydpbmZvX2dyb3VwbGlzdCddID0gJ1YmYXVtbDtsaiBkZSBGcm9udGVuZGFudiZhdW1sO25kYXJlLWdydXBwZXIgc29tIHNrYSB0aWxsJmFyaW5nO3RhcyBrb21tYSAmYXJpbmc7dCBmaWxlciBpIGRlbiBoJmF1bWw7ciBrYXRlZ29yaW4uIEF2bWFya2VyYSBhbGxhIHBvc3RlciBmJm91bWw7ciBhdHQgdGlsbCZhcmluZzt0YSBmdWxsICZhcmluZzt0a29tc3QnOwokbGFuZ1sndGl0bGVfc2NhbiddID0gJ0xldGEgZWZ0ZXIgbnlhIGZpbGVyIGkgZGVuIGgmYXVtbDtyIGthdGVnb3Jpbic7CiRsYW5nWyd0aXRsZV9jcmVhdGVfdGh1bWJuYWlscyddID0gJ1NrYXBhIHNha25hZGUgbWluaWF0eXJiaWxkZXIgZiZvdW1sO3IgZmlsZXIgaSBkZW4gaCZhdW1sO3Iga2F0ZWdvcmluLic7CiRsYW5nWydjcmVhdGVfdGh1bWJuYWlscyddID0gJ1NrYXBhIG1pbmlhdHlyYmlsZGVyJzsKJGxhbmdbJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWwnXSA9ICcoJmFyaW5nO3Rlcilza2FwYSBtaW5pYXR5cmJpbGRlciBmJm91bWw7ciBkZW4gaCZhdW1sO3IgZmlsZW4nOwokbGFuZ1snY3JlYXRlX3RodW1ibmFpbCddID0gJ1NrYXBhIG1pbmlhdHlyYmlsZCc7CiRsYW5nWydlcnJvcl9wYXRoZXJyb3InXSA9ICdLdW5kZSBpbnRlICZvdW1sO3BwbmEga2F0YWxvZyAoUiZhdW1sO3R0aWdoZXRzcHJvYmxlbT8pJzsKJGxhbmdbJ3RpdGxlX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ1N0b3JsZWsgcCZhcmluZzsgdmFyamUgbmVkbGFkZG5pbmdzLXN0eWNrZSc7CiRsYW5nWydpbmZvX2Rvd25sb2FkX2NodW5rc2l6ZSddID0gJ09tIGR1ICZhdW1sO25kcmFyIGRlbiBoJmF1bWw7ciBwYXJhbWV0ZXJuIHAmYXJpbmc7dmVya2FyIGRldCBuZWRsYWRkbmluZ3NoYXN0aWdoZXRlbiwgb2NoIGthbiBoaiZhdW1sO2xwYSB0aWxsIGkgbWlsaiZvdW1sO2VyIG1lZCBsaXRlIG1pbm5lJzsKJGxhbmdbJ3dhcm5pbmdfc2FmZV9tb2RlJ10gPSAnU2FmZSBtb2RlIGYmb3VtbDtyIFBIUCAmYXVtbDtyIGFrdGl2ZXJhdC4gRGV0dGEga2FuIG9yc2FrYSBwcm9ibGVtIG1lZCBhdHQgbGFkZGEgdXBwIGZpbGVyIChyJmF1bWw7dHRpZ2hldGVyKSBvY2gga2FuIG9ja3MmYXJpbmc7IGludmVya2EgcCZhcmluZzsgZGVuIGgmYXVtbDtyIG1vZHVsZW5zIG0mb3VtbDtqbGlnaGV0ZXIgYXR0IHNraWNrYSBuJmFyaW5nO2dyYSBmaWxlciBwZ2Egc3YmYXJpbmc7cmlnaGV0ZXIgYXR0ICZvdW1sO3ZlcnNrcmlkYSBuJmFyaW5nO2dyYSBhdiBpbmktaW5zdCZhdW1sO2xsbmluZ2FybmEuIER1IHJla29tbWVuZGVyYXMgYXR0IHRhIGtvbnRha3QgbWVkIGRpdHQgd2ViYmhvdGVsbCBmJm91bWw7ciBhdHQgc2Ugb20gZHUga2FuIGYmYXJpbmc7IGRlbSBhdHQgaW5ha3RpdmVyYSBzYWZlIG1vZGUnOwokbGFuZ1sncGFyYW1fZGV0YWlscGFnZSddID0gJ0FudiZhdW1sO25kYmFydCBmJm91bWw7ciBhdHQgdmlzYSBlbiBkZXRhbGplcmFkIHJhcHBvcnQgc29tIGFudiZhdW1sO25kZXIgZW4gYW5uYW4gc2lkbWFsbC4gRGVuIGgmYXVtbDtyIHBhcmFtZXRlcm4gYWNjZXB0ZXJhciBzaWQtaWQgZWxsZXIgc2lkYWxpYXMgZiZvdW1sO3IgZW4gc2lkYSBzb20gc2thIGFudiZhdW1sO25kYXMgZiZvdW1sO3IgYXR0IHZpc2EgZGVuIGRldGFsamVyYWRlIHJhcHBvcnRlbic7CiRsYW5nWydwYXJhbV9wcmVmaXgnXSA9ICdFbiBib29sZWFuIHNvbSBpbmRpa2VyYXIgb20gZmlsbmFtbmV0IHNrYSBoYSBldHQgcHJlZml4JzsKJGxhbmdbJ3BhcmFtX3ByZWZpeF9mZXUnXSA9ICdFbiBib29sZWFuLXBhcmFtZXRlciBzb20gaW5kaWtlcmFyIGF0dCBldHQgcHJlZml4IHNrYSB0YXMgZnImYXJpbmc7biBkZW4gYWt0dWVsbGEgZiZvdW1sO3JmYXR0YXJlbi4gT20gZWogc3BlY2lmaWNlcmF0ICZhdW1sO3IgcHJlZml4ZXQgZGVuIGFrdHVlbGxhIHRpZGVuIChpIGRlY2hleC1mb3JtYXQpJzsKJGxhbmdbJ3BhcmFtX25vY2FwdGNoYSddID0gJ0luYWt0aXZlcmEgY2FwdGNoYS1zdCZvdW1sO2QgKHAmYXJpbmc7IHNvbSBzdGFuZGFyZCkgaSB1cHBsYWRkbmluZ3Nmb3JtdWwmYXVtbDtyZXQnOwokbGFuZ1sndGl0bGVfdXBsb2FkZm9ybV90ZW1wbGF0ZSddID0gJ1JlZGlnZXJhIFVwcGxhZGRuaW5nc2Zvcm11bCZhdW1sO3JtYWxsZW4nOwokbGFuZ1snY2FwdGNoYV90aXRsZSddID0gJ1Nrcml2IGluIHRleHRlbiBzb20gdmlzYXMgaSBkZW4gaCZhdW1sO3IgYmlsZGVuJzsKJGxhbmdbJ2Vycm9yX2NhcHRjaGFtaXNtYXRjaCddID0gJ1RleHRlbiBzb20gc2tyZXZzIGluIG1hdGNoYXIgaW50ZSBiaWxkZW4gc29tIHZpc2FzJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucyddID0gJ1NrYSBtaW5pYXR5cmJpbGRlciBmJm91bWw7ciBmaWxlciBtZWQgZGUgaCZhdW1sO3IgZmlsJmF1bWw7bmRlbHNlcm5hJzsKJGxhbmdbJ3RpdGxlX2F1dG90aHVtYm5haWxfc2l6ZSddID0gJ01heGltYWwgc3RvcmxlayAocGl4bGFyKSBmJm91bWw7ciBkZW4gZ2VuZXJlcmFkZSBtaW5pYXR5cmJpbGRlbic7CiRsYW5nWydwcm9tcHRfdXBsb2FkX2ljb24nXSA9ICdMYWRkYSB1cHAgZW4gaWtvbic7CiRsYW5nWydpbmZvX3N5c2RlZmF1bHQnXSA9ICdEZW4gaCZhdW1sO3IgdGV4dGVuIGFudiZhdW1sO25kcyB2aWQgc2thcGFuZGUgYXYgZW4gbnkgbWFsbCBhdiBkZW4gaCZhdW1sO3IgdHlwZW4nOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW1zdGFuZGFyZG1hbGwgZiZvdW1sO3IgZGV0YWxqcmFwcG9ydCc7CiRsYW5nWyd0aXRsZV9zdW1tYXJ5cnB0X3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW1zdGFuZGFyZG1hbGwgZiZvdW1sO3Igc2FtbWFuZmF0dG5pbmdzcmFwcG9ydCc7CiRsYW5nWyd0aXRsZV91cGxvYWRmb3JtX3N5c2RlZmF1bHQnXSA9ICdTeXN0ZW1zdGFuZGFyZG1hbGwgZiZvdW1sO3IgdXBwbGFkZG5pbmdzZm9ybXVsJmF1bWw7cic7CiRsYW5nWyd0ZW1wbGF0ZSddID0gJ01hbGwnOwokbGFuZ1sncmVzZXR0b2RlZmF1bHQnXSA9ICcmQXJpbmc7dGVyc3QmYXVtbDtsbCB0aWxsIHN0YW5kYXJkdiZhdW1sO3JkZW4nOwokbGFuZ1sndGl0bGVfc3VtbWFyeXJwdF90ZW1wbGF0ZSddID0gJ01hbGwgZiZvdW1sO3Igc3VtbWVyaW5nc3JhcHBvcnQnOwokbGFuZ1sndGl0bGVfZGV0YWlscnB0X3RlbXBsYXRlJ10gPSAnTWFsbCBmJm91bWw7ciBkZXRhbGplcmFkIHJhcHBvcnQnOwokbGFuZ1sncHJvbXB0X25hbWUnXSA9ICdOYW1uJzsKJGxhbmdbJ3Byb21wdF9kZWZhdWx0J10gPSAnU3RhbmRhcmQnOwokbGFuZ1snbGVnZW5kX3VwbG9hZGZvcm0nXSA9ICdMYWRkYSB1cHAgZW4gZmlsJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdwYXJhbSddID0gJ0VuIG4mb3VtbDtkdiZhdW1sO25kaWcgcGFyYW1ldGVyIHNha25hcyc7CiRsYW5nWydlcnJvcl9taXNzaW5nbmFtZSddID0gJ0V0dCBuYW1uIGYmb3VtbDtyIGZpbGVuIG0mYXJpbmc7c3RlIGFuZ2VzJzsKJGxhbmdbJ2Vycm9yX21pc3NpbmdleHRlbnNpb25zJ10gPSAnJkFyaW5nO3RtaW5zdG9uZSBlbiBmaWwmYXVtbDtuZGVsc2UgbSZhcmluZztzdGUgYW5nZXMnOwokbGFuZ1snZXJyb3JfbWlzc2luZ2ljb24nXSA9ICdFbiBpa29uIG0mYXJpbmc7c3RlIGFuZ2VzJzsKJGxhbmdbJ2Vycm9yX25vc3VjaHJvdyddID0gJ0RlbiBzcGVjaWZpY2VyYWRlIHJhZGVuIGt1bmRlIGludGUgaGl0dGFzJzsKJGxhbmdbJ25hbWVfdW5rbm93biddID0gJ09rJmF1bWw7bmQvb2smYXVtbDtudCc7CiRsYW5nWydkZXNjcmlwdGlvbl91bmtub3duJ10gPSAnRmlsdHlwc2Jlc2tyaXZuaW5nIGYmb3VtbDtyIG9tYXRjaGFkZSBmaWxlcic7CiRsYW5nWydpbWFnZSddID0gJ0JpbGQnOwokbGFuZ1snaWNvbiddID0gJ0lrb24nOwokbGFuZ1snZXh0ZW5zaW9ucyddID0gJ0ZpbCZhdW1sO25kZWxzZXInOwokbGFuZ1snYWRkZmlsZXR5cGUnXSA9ICdMJmF1bWw7Z2cgdGlsbCBueSBmaWx0eXAnOwokbGFuZ1snZmlsZV90eXBlcyddID0gJ0ZpbHR5cGVyJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcnlpZCddID0gJ0luZ2V0IGthdGVnb3JpLUlEIGFuZ2F2cyc7CiRsYW5nWydlcnJvcl9ub2NhdGVnb3J5J10gPSAnSW5nZXQga2F0ZWdvcmktSUQgYW5nYXZzJzsKJGxhbmdbJ2Vycm9yX3RlbXBsYXRlbmFtZWV4aXN0cyddID0gJ0VuIG1hbGwgbWVkIGRldCBuYW1uZXQgZmlubnMgcmVkYW4nOwokbGFuZ1sncHJvbXB0X3RlbXBsYXRlbmFtZSddID0gJ01hbGxuYW1uJzsKJGxhbmdbJ3Byb21wdF90ZW1wbGF0ZSddID0gJ01hbGwnOwokbGFuZ1sncHJvbXB0X25ld3RlbXBsYXRlJ10gPSAnU2thcGEgZW4gbnkgbWFsbCc7CiRsYW5nWydoZWxwX09uRG93bmxvYWQnXSA9ICc8cD5FbiBoJmF1bWw7bmRlbHNlIHNvbSB1dGYmb3VtbDtycyBuJmF1bWw7ciBlbiBhbnYmYXVtbDtuZGFyZSBzbHV0ZiZvdW1sO3IgbmVkbGFkZG5pbmcgYXYgZW4gZmlsPC9wPg0KPHVsPg0KPGxpPjxlbT5pZDwvZW0+IC0gVXBwbGFkZG5pbmdzLUlEPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRmlsbmFtbjwvbGk+DQo8bGk+PGVtPmlwPC9lbT4gLSBOZWRsYWRkYXJlbnMgSVAtYWRyZXNzPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PbkRlbGV0ZUNhdGVnb3J5J10gPSAnPHA+RW4gaCZhdW1sO25kZWxzZSBzb20gdXRmJm91bWw7cnMgbiZhdW1sO3IgZW4ga2F0ZWdvcmkgdGFzIGJvcnQ8L3A+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIEthdGVnb3JpbmFtbjwvbGk+DQo8bGk+PGVtPnBhdGg8L2VtPiAtIFMmb3VtbDtrdiZhdW1sO2cgZiZvdW1sO3Iga2F0ZWdvcmk8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uQ3JlYXRlQ2F0ZWdvcnknXSA9ICc8cD5FbiBoJmF1bWw7bmRlbHNlIHNvbSB1dGYmb3VtbDtycyBuJmF1bWw7ciBlbiBrYXRlZ29yaSBza2FwYXM8L3A+DQo8aDQ+UGFyYW1ldHJhcjwvaDQ+DQo8dWw+DQo8bGk+PGVtPm5hbWU8L2VtPiAtIEthdGVnb3JpbnMgbmFtbjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBLYXRlZ29yaW5zIGJlc2tyaXZuaW5nPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gS2F0ZWdvcmlucyBzJm91bWw7a3YmYXVtbDtnPC9saT4NCjxsaT48ZW0+cGF0aDwvZW0+IC0gRW4gZmxhZ2dhIHNvbSBpbmRpa2VyYXIgb20ga2F0ZWdvcmluIGthbiBsaXN0YXM8L2xpPg0KPC91bD4NCic7CiRsYW5nWydoZWxwX09uUmVtb3ZlJ10gPSAnPHA+RW4gaCZhdW1sO25kZWxzZSBzb20gdXRmJm91bWw7cnMgbiZhdW1sO3IgZW4gZmlsIHRhcyBib3J0IHZpYSBhZG1pbmlzdHJhdGlvbmVuIGVsbGVyIGZyb250ZW5kLWdyJmF1bWw7bnNzbml0dGV0PC9wPg0KPGg0PlBhcmFtZXRyYXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT5uYW1lPC9lbT4gLSBOYW1uZXQgcCZhcmluZzsgZGVuIGJvcnR0YWduYSBmaWxlbjwvbGk+DQo8bGk+PGVtPmlkPC9lbT4gLSBEZW4gYm9ydHRhZ25hIGZpbGVucyBJRDwvbGk+DQo8bGk+PGVtPmNhdGVnb3J5X2lkPC9lbT4gLSBLYXRlZ29yaW5zIElEPC9saT4NCjwvdWw+DQonOwokbGFuZ1snaGVscF9PblVwbG9hZCddID0gJzxwPkVuIGgmYXVtbDtuZGVsc2Ugc29tIHV0ZiZvdW1sO3JzIG4mYXVtbDtyIGVuIGZpbCBsYWRkYXMgdXBwIHZpYSBhZG1pbmlzdHJhdGlvbmVuIGVsbGVyIGZyb250ZW5kLWdyJmF1bWw7bnNzbml0dGV0PC9wPg0KPGg0PlBhcmFtZXRyYXI8L2g0Pg0KPHVsPg0KPGxpPjxlbT5jYXRlZ29yeTwvZW0+IC0gS2F0ZWdvcmlucyBuYW1uPC9saT4NCjxsaT48ZW0+bmFtZTwvZW0+IC0gRGVuIHVwcGxhZGRhZGUgZmlsZW5zIG5hbW48L2xpPg0KPGxpPjxlbT5zaXplPC9lbT4gLSBTdG9ybGVrZW4gcCZhcmluZzsgZGVuIHVwcGxhZGRhZGUgZmlsZW48L2xpPg0KPGxpPjxlbT5zdW1tYXJ5PC9lbT4gLSBEZW4gdXBwbGFkZGFkZSBmaWxlbnMga29ydGZhdHRhZGUgYmVza3Jpdm5pbmcgKGthbiB2YXJhIHRvbSk8L2VtPjwvbGk+DQo8bGk+PGVtPmRlc2NyaXB0aW9uPC9lbT4gLSBEZW4gdXBwbGFkZGFkZSBmaWxlbnMgbCZhcmluZztuZ2EgYmVza3Jpdm5pbmcgKGthbiB2YXJhIHRvbSk8L2VtPjwvbGk+DQo8bGk+PGVtPmF1dGhvcjwvZW0+IC0gRGVuIHVwcGxhZGRlIGZpbGVucyBmJm91bWw7cmZhdHRhcmUgKG9tIG4mYXJpbmc7Z29uKTwvZW0+PC9saT4NCjxsaT48ZW0+aXBfYWRkcmVzczwvZW0+IC0gSW50ZXJuZXQtYWRyZXNzZW4gZiZvdW1sO3IgZGVuIGtsaWVudCBzb20gbGFkZGFkZSB1cHAgZmlsZW48L2xpPg0KPC91bD4NCic7CiRsYW5nWydpbmZvX2V2ZW50X29uZGVsZXRlY2F0ZWdvcnknXSA9ICdIJmF1bWw7bmRlbHNlIHNvbSB1dGYmb3VtbDtycyBuJmF1bWw7ciBlbiBrYXRlZ29yaSB0YXMgYm9ydCc7CiRsYW5nWydpbmZvX2V2ZW50X29uY3JlYXRlY2F0ZWdvcnknXSA9ICdIJmF1bWw7bmRlbHNlIHNvbSB1dGYmb3VtbDtycyBuJmF1bWw7ciBlbiBrYXRlZ29yaSBza2FwYXMnOwokbGFuZ1snaW5mb19ldmVudF9vbmRvd25sb2FkJ10gPSAnSCZhdW1sO25kZWxzZSBzb20gdXRmJm91bWw7cnMgbiZhdW1sO3IgZW4gZmlsIGxhZGRhcyBuZXInOwokbGFuZ1snaW5mb19ldmVudF9vbnVwbG9hZCddID0gJ0gmYXVtbDtuZGVsc2Ugc29tIHV0ZiZvdW1sO3JzIG4mYXVtbDtyIGVuIG55IGZpbCBsYWRkYXMgdXBwJzsKJGxhbmdbJ2luZm9fZXZlbnRfb25yZW1vdmUnXSA9ICdIJmF1bWw7bmRlbHNlIHNvbSB1dGYmb3VtbDtycyBuJmF1bWw7ciBlbiBmaWwgdGFzIGJvcnQnOwokbGFuZ1sndGl0bGVfdXNlcnRhZ19vbnVwbG9hZCddID0gJ0FudiZhdW1sO25kYXJkZWZpbmllcmFkZSB0YWdnYXIgc29tIGthbGxhcyBlZnRlciBhdHQgdXBwbGFkZG5pbmdlbiAmYXVtbDtyIGtvbXBsZXR0JzsKJGxhbmdbJ25vbmUnXSA9ICdJbmdhJzsKJGxhbmdbJ21hdGNoZXNmb3VuZCddID0gJ1RyJmF1bWw7ZmZhciBoaXR0YWRlJzsKJGxhbmdbJ2ZpbHRlciddID0gJ0ZpbHRlciAnOwokbGFuZ1sndGl0bGVfcmVkaXJlY3RvbnVwbG9hZCddID0gJ09tZGlyaWdlcmEgdGlsbCBzaWQtSUQvLWFsaWFzIG4mYXVtbDtyIGFudiZhdW1sO25kYXJlIGxhZGRhciB1cHAnOwokbGFuZ1snZGV0YWlscyddID0gJ0RldGFsamVyJzsKJGxhbmdbJ2NvbmZpcm1fcHJlZmVyZW5jZXMnXSA9ICcmQXVtbDtyIGR1IHMmYXVtbDtrZXIgcCZhcmluZzsgYXR0IGR1IHZpbGwgJmF1bWw7bmRyYSBpbnN0JmF1bWw7bGxuaW5nYXJuYT8nOwokbGFuZ1snZXJyb3Jfbm9maWxlc3VwbG9hZGVkJ10gPSAnSW5nYSBmaWxlciBsYWRkYWRlcyB1cHAuJzsKJGxhbmdbJ3Byb21wdF9yZXBsYWNlJ10gPSAnVGlsbCZhcmluZzt0IGF0dCBza3JpdmEgJm91bWw7dmVyJzsKJGxhbmdbJ2luZm9fcmVwbGFjZSddID0gJ0VycyZhdW1sO3R0IGFsbGEgZmlsZXIgbWVkIHNhbW1hIG5hbW4gKCZhdW1sO25kcmFyIGludGUgaWQtbnVtcmV0KSc7CiRsYW5nWydwYXJhbV9ub19pbml0aWFsJ10gPSAnVmlzYSBpbnRlIG4mYXJpbmc7Z3JhIGlubGVkYW5kZSByZXN1bHRhdCBuJmF1bWw7ciBkZXQgaCZhdW1sO3IgZmlsdHJldCAmYXVtbDtyIHAmYXJpbmc7JzsKJGxhbmdbJ3BhcmFtX2tleSddID0gJ0wmYXVtbDtnZyB0aWxsIHl0dGVybGlnYXJlIGVuIG55Y2tlbCBmJm91bWw7ciBtb2R1bGVuIGYmb3VtbDtyIHZpZGFyZSBvcmdhbmlzZXJpbmcgYXYgdXBwbGFkZG5pbmdhci4gRGVubmEgbnlja2VsIGthbiB2YXJhIGVuIGtvZGFkIHN0ciZhdW1sO25nIHNvbSAmIzAzOTtmZXVzZXJzOnVpZCYjMDM5OyBvc3YuIERlbm5hIHBhcmFtZXRlciBiZWgmb3VtbDt2cyBub3JtYWx0IGJhcmEgbiZhdW1sO3IgdXBwbGFkZG5pbmdzbW9kdWxlbiBiJmF1bWw7ZGRhcyBpbiBpIGVuIGFubmFuIG1vZHVsZSc7CiRsYW5nWydwYXJhbV9ub2F1dGhvciddID0gJ0Qmb3VtbDtsaiBmJmF1bWw7bHRldCBmJm91bWw7ciBmJm91bWw7cmZhdHRhcmUgaSB1cHBsYWRkbmluZ3Nmb3JtdWwmYXVtbDtyZXQuIERlbm5hIHBhcmFtZXRlciAmYXVtbDtyIGJhcmEgZ2lsdGlnIG4mYXVtbDtyIG1vZGU9JiMwMzk7dXBsb2FkJiMwMzk7LiBPbSBtb2R1bGVuIEZyb250ZW5kVXNlcnMgYW52JmF1bWw7bmRzIG9jaCBlbiBhbnYmYXVtbDtuZGFyZSBmJm91bWw7ciB0aWxsZiZhdW1sO2xsZXQgJmF1bWw7ciBpbmxvZ2dhZCwgc3BhcmFzIGRldCBpbmxvZ2dhZGUgYW52JmF1bWw7bmRhcm5hbW5ldCBpIGV0dCBkb2x0IGYmYXVtbDtsdC4nOwokbGFuZ1sncGFyYW1fdXBsb2FkX2lkJ10gPSAndXBsb2FkX2lkPSZxdW90O2lkJnF1b3Q7IC0gYW5nZSBlbiBlbnNraWxkIGZpbCBmJm91bWw7ciB1cmwvbCZhdW1sO25rIGVsbGVyIHNpbmdsZSBtb2RlIChvdmFuKSc7CiRsYW5nWydwYXJhbV9kZXRhaWx0ZW1wbGF0ZSddID0gJ0FudiZhdW1sO25kIGVuIG1hbGwgbWVkIGRldHRhIG5hbW5ldCBmJm91bWw7ciBkZW4gZGV0YWxqZXJhZGUgcmFwcG9ydGVuLic7CiRsYW5nWydwYXJhbV90ZW1wbGF0ZSddID0gJ0FudiZhdW1sO25kIGVuIG1hbGwgbWVkIGRldHRhIG5hbW5ldCBmJm91bWw7ciBkZW4gaCZhdW1sO3IgcmFwcG9ydGVuIGVsbGVyIGZvcm11bCZhdW1sO3JldC4gRGVubmEgbWFsbGVuIHRhciBhdXRvbWF0aXNrdCBtYWxsZW4gbWVkIG1vdHN2YXJhbmRlIG5hbW4gZnImYXJpbmc7biBwYXNzYW5kZSBsaXN0YSBiZXJvZW5kZSBwJmFyaW5nOyBzdGlsIChtb2RlKSc7CiRsYW5nWydwYXJhbV9maWx0ZXInXSA9ICdWaXNhIGZpbHRlcmZvcm11bCZhdW1sO3JldCc7CiRsYW5nWydwYXJhbV9ub19pbnRpdGlhbCddID0gJ0JhcmEgYW52JmF1bWw7bmRiYXIgbiZhdW1sO3IgZmlsdGVycGFyYW1ldGVybiBhbnYmYXVtbDtuZHMsIGVsbGVyIG4mYXVtbDtyIGRlbiAmYXVtbDtyIHAmYXJpbmc7IHNvbSBzdGFuZGFyZC4gRGVuIGgmYXVtbDtyIHBhcmFtZXRlcm4gaW5kaWtlcmFyIG9tIGlubGVkYW5kZSByZXN1bHRhdCBza2EgcmV0dXJuZXJhcyc7CiRsYW5nWydwYXJhbV9maWxldHlwZXMnXSA9ICdWaXNhIGJhcmEgZmlsZXIgdmFycyB0eXAgc3QmYXVtbDttbWVyICZvdW1sO3ZlcmVuc2UgbWVkIGRlbm5hIGtvbW1hc2VwYXJlcmFkZSBsaXN0YSc7CiRsYW5nWydwYXJhbV9zb3J0b3JkZXInXSA9ICcgIDxwPlNvcnRlcmluZ3NvcmRuaW5nYXINCiAgPHVsPg0KICA8bGk+PGVtPmRhdGVfYXNjPC9lbT4gLSBTb3J0ZXJhIGVmdGVyIGRhdHVtLCBzdGlnYW5kZTwvbGk+DQogIDxsaT48ZW0+ZGF0ZV9kZXNjPC9lbT4gLSBTb3J0ZXJhIGVmdGVyIGRhdHVtLCBmYWxsYW5kZTwvbGk+DQogIDxsaT48ZW0+bmFtZV9hc2M8L2VtPiAtIFNvcnRlcmEgZWZ0ZXIgbmFtbiwgc3RpZ2FuZGU8L2xpPg0KICA8bGk+PGVtPm5hbWVfZGVzYzwvZW0+IC0gU29ydGVyYSBlZnRlciBuYW1uLCBmYWxsYW5kZTwvbGk+DQogIDxsaT48ZW0+c2l6ZV9hc2M8L2VtPiAtIFNvcnRlcmEgZWZ0ZXIgc3Rvcmxlaywgc3RpZ2FuZGU8L2xpPg0KICA8bGk+PGVtPnNpemVfZGVzYzwvZW0+IC0gU29ydGVyYSBlZnRlciBzdG9ybGVrLCBmYWxsYW5kZTwvbGk+DQogIDxsaT48ZW0+ZGVzY19hc2M8L2VtPiAtIFNvcnRlcmEgZWZ0ZXIgYmVza3Jpdm5pbmcsIHN0aWdhbmRlPC9saT4NCiAgPGxpPjxlbT5kZXNjX2Rlc2M8L2VtPiAtIFNvcnRlcmEgZWZ0ZXIgYmVza3Jpdm5pbmcsIGZhbGxhbmRlPC9saT4NCiAgPGxpPjxlbT5hdXRob3JfYXNjPC9lbT4gLSBTb3J0ZXJhIGVmdGVyIGYmb3VtbDtyZmF0dGFyZSwgc3RpZ2FuZGU8L2xpPg0KICA8bGk+PGVtPmF1dGhvcl9kZXNjPC9lbT4gLSBTb3J0ZXJhIGVmdGVyIGYmb3VtbDtyZmF0dGFyZSwgZmFsbGFuZGU8L2xpPg0KICA8bGk+PGVtPmlwX2FzYzwvZW0+IC0gU29ydGVyYSBlZnRlciBJUC1hZHJlc3MsIHN0aWdhbmRlPC9saT4NCiAgPGxpPjxlbT5pcF9kZXNjPC9lbT4gLSBTb3J0ZXJhIGVmdGVyIElQLWFkcmVzcywgZmFsbGFuZGU8L2xpPg0KICA8bGk+PGVtPnJhbmRvbTwvZW0+IC0gU2x1bXB2aXMgc29ydGVyaW5nc29yZG5pbmc8L2xpPg0KICA8L3VsPg0KICA8L3A+JzsKJGxhbmdbJ3BhcmFtX2xpc3Rpbmd0ZW1wbGF0ZSddID0gJ01hbGwgYXR0IGFudiZhdW1sO25kYSBmJm91bWw7ciBrYXRlZ29yaWxpc3RuaW5nYXIgZWZ0ZXIgYXR0IGhhIGtsaWNrYXQgdmlhIGthdGVnb3Jpc2FtbWFuZmF0dG5pbmdzc2lkYW4nOwokbGFuZ1sncGFyYW1fbGlzdGluZ3NvcnRvcmRlciddID0gJ1NvcnRlcmluZ3NvcmRuaW5nIChwYXJhbV9zb3J0b3JkZXIpIGF0dCBhbnYmYXVtbDtuZGEgdmlkIGxpc3RuaW5nIGF2IGthdGVnb3JpZXIgZWZ0ZXIgYXR0IGhhIGtsaWNrYXQgdmlhIGthdGVnb3Jpc2FtbWFuZmF0dG5pbmdzc2lkYW4nOwokbGFuZ1sncGFyYW1fZmlsZWV4dGVuc2lvbnMnXSA9ICcgDQpmaWxlX2V4dGVuc2lvbnM9JnF1b3Q7ZXh0MSxleHQyLGV4dDMmcXVvdDsNCjxwPmcmYXVtbDtsbGVyIGVuYmFydCBuJmF1bWw7ciBtb2RlPXVwbG9hZC4gRGVuIGgmYXVtbDtyIHBhcmFtZXRlcm4gYmVnciZhdW1sO25zYXIgdmlsa2EgZmlsdHlwZXIgc29tIGthbiBsYWRkYXMgdXBwLiBEZW4gdXBwaCZhdW1sO3ZlciBpbnN0JmF1bWw7bGxuaW5nYXJuYSBpIG1vZHVsaW5zdCZhdW1sO2xsbmluZ2FyLjwvcD4nOwokbGFuZ1sncGFyYW1fY291bnQnXSA9ICdjb3VudD0mcXVvdDtOJnF1b3Q7DQo8cD5FbiBwYXJhbWV0ZXIgZiZvdW1sO3IgYXR0IGxpc3RhIGVuYmFydCBkZSBOIGYmb3VtbDtyc3RhIHJlc3VsdGF0ZW4gaSBlbiBmciZhcmluZztnYS4gU2lkaW5kZWxuaW5nIChwYWdpbmF0aW9uKSBza3VsbGUgdmFyYSBiJmF1bWw7dHRyZSwgbWVuIGRldCBoJmF1bWw7ciBmdW5rYXIgdGlsbHMgdmlkYXJlPC9wPic7CiRsYW5nWydwYXJhbV9jYXRlZ29yeSddID0gJ2NhdGVnb3J5PSZxdW90O25hbWUmcXVvdDsNCjxwPjxiPk5vdGVyYTo8L2I+IEthdGVnb3JpIGthbiB2YXJhICZxdW90O2FsbCZxdW90OyAoYWxsYSksIHZpbGtldCBsaXN0YXIgYWxsYSB1cHBsYWRkbmluZ2FyIGZyJmFyaW5nO24gYWxsYSA8ZW0+bGlzdGJhcmE8L2VtPiBrYXRlZ29yaWVyPC9wPic7CiRsYW5nWydwYXJhbV9tb2RlJ10gPSAnICA8dWw+DQogIDxsaT48ZW0+ZGV0YWlsZWQ8L2VtPiAtIFZpc2EgZW4gZGV0YWxqZXJhZCBsaXN0YSAmb3VtbDt2ZXIgYWxsYSBmaWxlciBpIGthdGVnb3JpbjwvbGk+DQogIDxsaT48ZW0+dXBsb2FkPC9lbT4gLSBWaXNhIGV0dCBmb3JtdWwmYXVtbDtyIGYmb3VtbDtyIGF0dCBsJmFyaW5nO3RhIGVuIGFudiZhdW1sO25kYXJlIGxhZGRhIHVwcCBmaWxlciB2aWEgaGVtc2lkYW48L2xpPg0KICA8bGk+PGVtPnVybCA8aT5vcjwvaT4gbGluazwvZW0+IC0gVmlzYSBlbiBsJmF1bWw7bmsgdGlsbCBlbiBmaWw8L2xpPg0KICA8bGk+PGVtPnN1bW1hcnk8L2VtPiAtIFZpc2EgZW4gc2FtbWFuZmF0dGFkIGxpc3RhICZvdW1sO3ZlciBhbGxhIGZpbGVyIGkgZW4ga2F0ZWdvcmk8L2xpPg0KICA8bGk+PGVtPnNpbmdsZTwvZW0+IC0gVmlzYSBlbiBkZXRhbGplcmFkIHJhcHBvcnQgb20gZW4gZW5za2lsZCB1cHBsYWRkbmluZzwvbGk+DQogIDwvdWw+JzsKJGxhbmdbJ3BhcmFtX3NlbGVjdGZvcm0nXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgaXMgdGhlIGZvcm1pZCBvZiB0aGUgcGFyZW50IGZvcm0uICBVc2VkIHRvIGhhbmRsZSBwYXJhbWV0ZXIgcGFzc2luZyc7CiRsYW5nWydwYXJhbV9zZWxlY3RuYW1lJ10gPSAnd2hlbiB1c2luZyB0aGUgJiMwMzk7c2VsZWN0JiMwMzk7IG1vZGUsIHRoaXMgcGFyYW1ldGVyIHNwZWNpZmllcyB0aGUgbmFtZSBvZiB0aGUgZmllbGQnOwokbGFuZ1sncGFyYW1fc2VsZWN0dmFsdWUnXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHRoZSBkZWZhdWx0IGZpZWxkIHZhbHVlJzsKJGxhbmdbJ3BhcmFtX3NlbGVjdG5vbmUnXSA9ICdXaGVuIHVzaW5nIHRoZSAmIzAzOTtzZWxlY3QmIzAzOTsgbW9kZSwgdGhpcyBwYXJhbWV0ZXIgc3BlY2lmaWVzIHdldGhlciAmIzAzOTtub25lJiMwMzk7IGlzIGEgdmFsaWQgY2hvaWNlLic7CiRsYW5nWydyZXR1cm50b21vZHVsZSddID0gJ1RpbGxiYWthIHRpbGwgbW9kdWxwYW5lbGVuJzsKJGxhbmdbJ2Vycm9yX25vY2F0ZWdvcmllcyddID0gJ0RldCBmaW5ucyBpbmdhIGRlZmluaWVyYWRlIGthdGVnb3JpZXInOwokbGFuZ1sndGl0bGVfZW5mb3JjZWV4dGVuc2lvbnMnXSA9ICdLciZhdW1sO3ZlciBmaWx0aWxsJmF1bWw7Z2cgZiZvdW1sO3IgYWxsYSB1cHBsYWRkYWRlIGZpbGVyJzsKJGxhbmdbJ3Jlc3RvcmVkZWZhdWx0c2NvbmZpcm0nXSA9ICdEZXR0YSAmYXJpbmc7dGVyc3QmYXVtbDtsbGVyIG1hbGxhcm5hIHRpbGwgc3lzdGVtc3RhbmRhcmQuIEFsbGEgZiZvdW1sO3ImYXVtbDtuZHJpbmdhciBzb20gZHUgaGFyIGdqb3J0IGtvbW1lciBhdHQgZiZvdW1sO3Jsb3Jhcy4gJkF1bWw7ciBkdSBzJmF1bWw7a2VyIHAmYXJpbmc7IGF0dCBkdSB2aWxsIGZvcnRzJmF1bWw7dHRhPyc7CiRsYW5nWyd0aHVtYm5haWwnXSA9ICdUdW1uYWdlbGJpbGQnOwokbGFuZ1snbmV3dGh1bWJuYWlsJ10gPSAnTGFkZGEgdXBwIG55IHR1bW5hZ2VsYmlsZCc7CiRsYW5nWydpbmZvX3N1bW1hcnknXSA9ICdFbiBrb3J0IGJlc2tyaXZuaW5nIGF2IGZpbGVuIChvbSB0b20gYW52JmF1bWw7bmRzIGZpbG5hbW5ldCB1dGFuIGRlc3MgZmlsdGlsbCZhdW1sO2dnKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5bmFtZSddID0gJ0VuIGtvcnQgYmVza3Jpdm5pbmcgYXYgZGluIGthdGVnb3JpIChmJm91bWw7ciBhbGxtJmF1bWw7bmhldGVuKSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5ZGVzYyddID0gJ0VuIGJlc2tyaXZuaW5nIGF2IGRpbiBrYXRlZ29yaSc7CiRsYW5nWydpbmZvX2NhdGVnb3J5cGF0aCddID0gJ05hbW5ldCBwJmFyaW5nOyBrYXRhbG9nZW4gdW5kZXIga2F0YWxvZ2VuIHVwbG9hZHMsIHNvbSBza2EgYW52JmF1bWw7bmRhcyBmJm91bWw7ciBhdHQgc3BhcmEgZmlsZXIgaSBkZW4gaCZhdW1sO3Iga2F0ZWdvcmluLiBPbSBrYXRhbG9nZW4gbWVkIGRldCBoJmF1bWw7ciBuYW1uZXQgaW50ZSBmaW5ucywgcyZhcmluZzsga2FuIGRlbiBza2FwYXMuJzsKJGxhbmdbJ2luZm9fZGVzdG5hbWUnXSA9ICdBbnYmYXVtbDtuZCBkZXQgaCZhdW1sO3IgZiZhdW1sO2x0ZXQgZiZvdW1sO3IgYXR0ICZhdW1sO25kcmEgbmFtbmV0IHAmYXJpbmc7IGZpbGVuIHZpZCB1cHBsYWRkbmluZyc7CiRsYW5nWydlcnJvcl9jYW50Y3JlYXRlZGlyZWN0b3J5J10gPSAnS3VuZGUgaW50ZSBza2FwYSBrYXRhbG9nJzsKJGxhbmdbJ2Vycm9yX25vbWFpbGVybW9kdWxlJ10gPSAnTW9kdWxlbiBDTVNNYWlsZXIga3VuZGUgaW50ZSBza2FwYSBlbiBpbnN0YW5zJzsKJGxhbmdbJ3VwbG9hZF9ub3RpZmljYXRpb24nXSA9ICdFbiBueSBmaWwgaGFyIGxhZGRhdHMgdXBwJzsKJGxhbmdbJ3RpdGxlX2VtYWlsX29uX3VwbG9hZCddID0gJ1NraWNrYSBlcG9zdCB2aWQgdXBwbGFkZG5pbmcgdGlsbDonOwokbGFuZ1snZW1haWxfdGVtcGxhdGUnXSA9ICdFcG9zdG1hbGwnOwokbGFuZ1sndGl0bGVfZHVtbXlfaW5kZXhfaHRtbCddID0gJ1NrYXBhIGluZGV4Lmh0bWwtZmlsZXIgaSB2YXJqZSBtYXBwPzxici8+PGVtPkFsbGEgYmVmaW50bGlnYSBpbmRleC5odG1sLWZpbGVyIGtvbW1lciBhdHQgZmlubmFzIGt2YXI8L2VtPic7CiRsYW5nWydhYm91dCddID0gJ09tJzsKJGxhbmdbJ2Vycm9yX3Blcm1pc3Npb25kZW5pZWQnXSA9ICcmQXJpbmc7dGtvbXN0IG5la2FkLiBLb250cm9sbGVyYSBkaW5hIHImYXVtbDt0dGlnaGV0ZXIuJzsKJGxhbmdbJ2Vycm9yX2NvdWxkbm90d3JpdGUnXSA9ICdLdW5kZSBpbnRlIHNrcml2YSc7CiRsYW5nWydhZGRjYXRlZ29yeSddID0gJ0wmYXVtbDtnZyB0aWxsIGthdGVnb3JpJzsKJGxhbmdbJ2FsbCddID0gJ0FsbGEnOwokbGFuZ1snYXJleW91c3VyZSddID0gJyZBdW1sO3IgZHUgcyZhdW1sO2tlcj8nOwokbGFuZ1snYXV0aG9yJ10gPSAnRiZvdW1sO3JmYXR0YXJlJzsKJGxhbmdbJ2NhbmNlbCddID0gJyZBcmluZztuZ3JhJzsKJGxhbmdbJ2Nhbm5vdG1vZGlmeXBhdGgnXSA9ICcoUyZvdW1sO2t2JmF1bWw7Z2VuIGthbiBpbnRlICZhdW1sO25kcmFzKSc7CiRsYW5nWydjYXRlZ29yaWVzJ10gPSAnS2F0ZWdvcmllcic7CiRsYW5nWydjYXRlZ29yeSddID0gJ0thdGVnb3JpJzsKJGxhbmdbJ21lc3NhZ2VfY2F0ZWdvcnlhZGRlZCddID0gJ0thdGVnb3JpbiBoYXIgbGFndHMgdGlsbCc7CiRsYW5nWydkYXRlJ10gPSAnRGF0dW0nOwokbGFuZ1snZGF0ZXVwbG9hZGVkJ10gPSAnRGF0dW0gdXBwbGFkZGFkJzsKJGxhbmdbJ2RlZmF1bHQnXSA9ICdTdGFuZGFyZGluc3QmYXVtbDtsbG5pbmdhcic7CiRsYW5nWydkZWxldGUnXSA9ICdUYSBib3J0JzsKJGxhbmdbJ2Rlc2NyaXB0aW9uJ10gPSAnQmVza3Jpdm5pbmcnOwokbGFuZ1snZGVzdG5hbWUnXSA9ICdMYWRkYSB1cHAgc29tJzsKJGxhbmdbJ2RldGFpbF90ZW1wbGF0ZSddID0gJ0RldGFsam1hbGwnOwokbGFuZ1snZG93bmxvYWRlZCddID0gJ0ZpbGVuICVzICZhdW1sO3IgbmVkbGFkZGFkLic7CiRsYW5nWydkb3dubG9hZHMnXSA9ICdOZWRsYWRkbmluZ2FyJzsKJGxhbmdbJ2VkaXQnXSA9ICdSZWRpZ2VyYSc7CiRsYW5nWydlZGl0Y2F0ZWdvcnknXSA9ICdSZWRpZ2VyYSBrYXRlZ29yaSc7CiRsYW5nWydlZGl0dXBsb2FkJ10gPSAnUmVkaWdlcmEgdXBwbGFkZG5pbmcnOwokbGFuZ1snZXJyb3InXSA9ICdGZWwhJzsKJGxhbmdbJ2Vycm9yX3BhdGhpbnVzZTInXSA9ICdFbiBrYXRlZ29yaSBzb20gYW52JmF1bWw7bmRlciBzJm91bWw7a3YmYXVtbDtnZW4gKCVzKSBleGlzdGVyYXIgcmVkYW4nOwokbGFuZ1snZXJyb3JfcGF0aGludXNlJ10gPSAnRW4ga2F0ZWdvcmkgbWVkIGRlbiBzJm91bWw7a3YmYXVtbDtnZW4gZmlubnMgcmVkYW4nOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMyJ10gPSAnRmVsOiBLYXRlZ29yaSBtZWQgbmFtbiAlcyBleGlzdGVyYXIgcmVkYW4nOwokbGFuZ1snZXJyb3JfY2F0ZWdvcnlleGlzdHMnXSA9ICdGZWw6IEthdGVnb3JpbiBmaW5ucyByZWRhbic7CiRsYW5nWydlcnJvcl9jYXRlZ29yeW5vdGVtcHR5J10gPSAnRmVsISBLYW4gaW50ZSB0YSBib3J0IGVuIGthdGVnb3JpIHNvbSBpbnRlICZhdW1sO3IgdG9tJzsKJGxhbmdbJ2Vycm9yX2NhdGVnb3J5bm90Zm91bmQnXSA9ICdGZWw6IEthdGVnb3JpbiBoaXR0YXMgaW50ZSEnOwokbGFuZ1snZXJyb3JfZGJlcnJvciddID0gJ0ZlbDogRGF0YWJhc2ZlbCEnOwokbGFuZ1snZXJyb3JfZW1wdHljYXRlZ29yeSddID0gJ0ZlbDogVG9tIGthdGVnb3JpISc7CiRsYW5nWydlcnJvcl9lbXB0eXBhdGgnXSA9ICdGZWw6IFRvbSBzJm91bWw7a3YmYXVtbDtnISc7CiRsYW5nWydlcnJvcl9maWxlZXhpc3RzJ10gPSAnRmVsISBFbiBmaWwgbWVkIGRldHRhIG5hbW5ldCBmaW5ucyByZWRhbi4nOwokbGFuZ1snZXJyb3JfZmlsZW5vdGZvdW5kJ10gPSAnRmVsISBGaWxlbiAlcyBoaXR0YWRlcyBpbnRlLic7CiRsYW5nWydlcnJvcl9pbnN1ZmZpY2llbnRwYXJhbXMnXSA9ICdGZWw6IE90aWxsciZhdW1sO2NrbGlnYSBwYXJhbWV0cmFyIGFuZ2l2bmEgZiZvdW1sO3IgbW9kdWxlbiEnOwokbGFuZ1snZXJyb3JfaW52YWxpZGF1dGhvciddID0gJ0ZlbDogRmVsYWt0aWcgKGVsbGVyIHRvbSkgZiZvdW1sO3JmYXR0YXJlLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkY2F0ZWdvcnknXSA9ICdGZWw6IEZlbGFrdGlnIChlbGxlciB0b20pIGthdGVnb3JpLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZGVzY3JpcHRpb24nXSA9ICdGZWw6IEZlbGFrdGlnIChlbGxlciB0b20pIGJlc2tyaXZuaW5nLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkZmlsZSddID0gJ0ZlbDogRmVsYWt0aWd0IChlbGxlciB0b210KSBmaWxuYW1uLic7CiRsYW5nWydlcnJvcl9pbnZhbGlkdXBsb2FkZmlsZW5hbWUnXSA9ICdGZWw6IEZpbGVyIG1lZCBkZXQgbmFtbmV0ICh0cm9saWdlbiBtZWQgZGV0IGZpbHRpbGwmYXVtbDtnZ2V0KSAmYXVtbDtyIGludGUgdGlsbCZhcmluZzt0bmEuJzsKJGxhbmdbJ2Vycm9yX2ludmFsaWR1cGxvYWRpZCddID0gJ0ZlbDogT2dpbHRpZ3QgdXBwbGFkZG5pbmdzLWlkJzsKJGxhbmdbJ2Vycm9yX25vZmlsZXMnXSA9ICdGZWw6IEluZ2EgbWF0Y2hhbmRlIGZpbGVyISc7CiRsYW5nWydmaWxlcyddID0gJ0ZpbGVyJzsKJGxhbmdbJ2ZpeG1lJ10gPSAnRml4YSBtZWxsYW5zbGFnJzsKJGxhbmdbJ2ZyaWVuZGx5bmFtZSddID0gJ1VwcGxhZGRuaW5nJzsKJGxhbmdbJ2hlbHAnXSA9ICc8aDM+VmFkIGcmb3VtbDtyIGRlbiBoJmF1bWw7ciBtb2R1bGVuPzwvaDM+DQo8cD5EZXQgJmF1bWw7ciBlbiBtb2R1bCBzb20gZyZvdW1sO3IgZGV0IG0mb3VtbDtqbGlndCBhdHQgbGFkZGEgdXBwIG9jaCBsYWRkYSBuZXIgZmlsZXIgdGlsbCBvY2ggZnImYXJpbmc7biBkaW4gd2ViYnNpZGEuIERlbiBoJmFyaW5nO2xsZXIgcmVkYSBwJmFyaW5nOyB2ZW0gc29tIGxhZGRhZGUgdXBwIGVuIGZpbCBvY2ggdmVtIHNvbSBoYXIgbGFkZGF0IG5lciBkZW4uDQpEZXNzdXRvbSBrYW4gZHUgZGVsYSBpbiBmaWxlciBpIGthdGVnb3JpZXIgb2NoIGhhbnRlcmEgZmlsZXJuYSBzb20gJmF1bWw7ciB1cHBsYWRkYWRlIHAmYXJpbmc7IHNhbW1hIHMmYXVtbDt0dCBzb20gYWxsYSBhZG1pbmlzdHJhdCZvdW1sO3JlciBza2Ega3VubmEgZyZvdW1sO3JhLjwvcD4gDQoNCjxoMz5IdXIgYW52JmF1bWw7bmRlciBqYWcgbW9kdWxlbj88L2gzPg0KPHA+RiZvdW1sO3IgYXR0IGFudiZhdW1sO25kYSBkZW4gaCZhdW1sO3IgbW9kdWxlbiAtIGFsbHRzJmFyaW5nOyBhdHQgdGlsbCZhcmluZzt0YSBhbnYmYXVtbDtuZGFyZSBhdHQgbGFkZGEgdXBwIGZpbGVyIHRpbGwgZGluIHdlYmJzaWRhIC0gbSZhcmluZztzdGUgZHUgaW5zdGFsbGVyYSBtb2R1bGVuIG9jaCBkJmF1bWw7cmVmdGVyIHNrYXBhIGVuIGVsbGVyIGZsZXJhIGthdGVnb3JpZXIvbWFwcGFyDQpzb20gZGUgdXBwbGFkZGFkZSBmaWxlcm5hIGthbiBsJmF1bWw7Z2dhcyBpIChpIG1vZHVsaW5zdCZhdW1sO2xsbmluZ2FybmEpLiBMJmF1bWw7Z2cgc2VkYW4gdGlsbCBlbiB0YWdnIHAmYXJpbmc7IGVuIHNpZGEgZWxsZXIgbWFsbCB1bmdlZiZhdW1sO3IgcyZhcmluZzsgaCZhdW1sO3Ige2Ntc19tb2R1bGUgbW9kdWxlPSZxdW90O1VwbG9hZHMmcXVvdDsgY2F0ZWdvcnk9JnF1b3Q7ZW5rYXRlZ29yaSZxdW90OyBtb2RlPSZxdW90O3N0aWwmcXVvdDt9LiANClN0aWxlbiBza2EgZCZhcmluZzsgbWF0Y2hhIG4mYXJpbmc7Z29uIGF2IHN0aWxhcm5hIG5lZGFuLiBWYWQgc29tIHNrcml2cyB1dCBza2lsamVyIHNpZyBiZXJvZW5kZSBwJmFyaW5nOyB2aWxrZW4gc3RpbCBkdSB2JmF1bWw7bGplci48L3A+DQoNCjxwPkRlbiBoJmF1bWw7ciBtb2R1bGVuIGthbiBhbnYmYXVtbDtuZGEgVXNlcklELW1vZHVsZW4gKHZhbGZyaXR0KSBmJm91bWw7ciBhdHQgZiZhcmluZzsgaW5mb3JtYXRpb24gb20gYWxsYSBpbmxvZ2dhZGUgYW52JmF1bWw7bmRhcmUgZiZvdW1sO3IgYXR0IGRlbHZpcyBmeWxsYSBpIGZvcm11bCZhdW1sO3JldCBuJmF1bWw7ciBmaWxlciBsYWRkYXMgdXBwOzwvcD4NCg0KPGgzPlImYXVtbDt0dGlnaGV0ZXI8L2gzPg0KPHVsPg0KPGxpPjxlbT5NYW5hZ2UgVXBsb2FkczwvZW0+IC0gYmVoJm91bWw7dnMgZiZvdW1sO3IgYXR0IGhhbnRlcmEga2F0ZWdvcmllciBvY2ggZGVzcyBmaWxlci48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgVGVtcGxhdGVzPC9lbT4gLSBiZWgmb3VtbDt2cyBmJm91bWw7ciBhdHQgJmF1bWw7bmRyYSBuJmFyaW5nO2dvbiBhdiBtYWxsYXJuYS48L2xpPg0KPGxpPjxlbT5Nb2RpZnkgU2l0ZSBQcmVmZXJlbmNlczwvZW0+IC0gYmVoJm91bWw7dnMgZiZvdW1sO3IgYXR0IGYmb3VtbDtyIGF0dCAmYXVtbDtkbnJhIGZpbGluc3QmYXVtbDtsbG5pbmdhci48L2xpPg0KPC91bD4NCg0KPGgzPkVwb3N0PC9oMz4NCjxwPkRlbiBoJmF1bWw7ciBtb2R1bGVuIGthbiBza2lja2EgZS1wb3N0IG4mYXVtbDtyIGVuIGZpbCBoYXIgbGFkZGF0cyB1cHAgKHNlIHRhYmJlbiBJbnN0JmF1bWw7bGxuaW5nYXIpLiBNZW4gZiZvdW1sO3IgYXR0IGcmb3VtbDtyYSBkZXR0YSBrciZhdW1sO3ZzIGF0dCBtb2R1bGVuIDxzdHJvbmc+Q01TTWFpbGVyPC9zdHJvbmc+IGhhciBpbnN0YWxsZXJhdHMgb2NoIGtvbmZpZ3VyZXJhdHMuIERldHRhICZhdW1sO3IgPGVtPnZhbGZyaXR0PC9lbT4gb2NoIG9tIENNU01haWxlci1tb2R1bGVuIGludGUgJmF1bWw7ciBpbnN0YWxsZXJhZCB2aXNhcyBpbmdlbnRpbmcgZiZvdW1sO3IgYW52JmF1bWw7bmRhcmVuLCBiYXJhIGV0dCBsb2dnbWVkZGVsYW5kZSBrb21tZXIgYXR0IGwmYXVtbDtnZ2FzIHRpbGwgYWRtaW4tbG9nZ2VuLjwvcD4NCg0KPGgzPlN5c3RlbWluc3QmYXVtbDtsbG5pbmdhcjwvaDM+DQo8cD48c3Ryb25nPk5vdGVyYTo8L3N0cm9uZz4gRGVuIGgmYXVtbDtyIG1vZHVsZW4ga29tbWVyIGludGUgcnVudCBlbGxlciBmJm91bWw7cmJpIG4mYXJpbmc7Z3JhIGZpbHN0b3JsZWtzYmVnciZhdW1sO25zbmluZ2FyIGkgcGhwLiBEZW4gZnVuZ2VyYXIgdGlsbHNhbW1hbnMgbWVkIGRlbS4gDQpEJmF1bWw7cmYmb3VtbDtyIG0mYXJpbmc7c3RlIGR1IGV2ZW50dWVsbHQgJmF1bWw7bmRyYSBpIGRpbiBwaHAuaW5pLWZpbCBmJm91bWw7ciBhdHQgdGlsbCZhcmluZzt0YSB1cHBsYWRkbmluZyBhdiBmaWxlciBzJmFyaW5nOyBzdG9yYSBzb20gZHUgaGFyIHN0JmF1bWw7bGx0IGluIGkgaW5zdCZhdW1sO2xsbmluZ2FybmEgZiZvdW1sO3IgdXBwbGFkZG5pbmdzbW9kdWxlbi48L3A+DQoNCjxoMz5Ob3QgZiZvdW1sO3IgQXBhY2hlPC9oMz4NCjxwPkYmb3VtbDtyIGF0dCB0aWxsJmFyaW5nO3RhIHN0Jm91bWw7cnJlIGZpbHVwcGxhZGRuaW5nYXIga2FuIGR1IGJlaCZvdW1sO3ZhICZhdW1sO25kcmEgcGFyYW1ldGVybiB1cGxvYWRfbWF4X2ZpbGVzaXplIGkgZGluIHBocC5pbmktZmlsLiBEZXNzdXRvbSwgcGFyYW1ldGVybiBMaW1pdFJlcXVlc3RCb2R5IGluIGRpbiBBcGFjaGUta29uZmlndXJhdGlvbiBrYW4gYmVoJm91bWw7dmEgJmF1bWw7bmRyYXMgZiZvdW1sO3IgYXR0IG1hdGNoYSBwYXJhbWV0ZXJuIHVwbG9hZF9tYXhfZmlsZXNpemU8L3A+DQo8cD5Ob3RlcmE6IHBhcmFtZXRlcm4gdXBsb2FkX21heF9maWxlc2l6ZSBrYW4gc3BlY2lmaWNlcmFzIGkgYnl0ZXMsIGtpbG9ieXRlcyBlbGxlciBtZWdhYnl0ZXMuIFBhcmFtZXRlcm5hIExpbWl0UmVxdWVzdEJvZHkgZCZhdW1sO3JlbW90LCBrYW4gYmFyYSBzcGVjaWZpY2VyYXMgaSBieXRlczwvcD4nOwokbGFuZ1snaWQnXSA9ICdJZCAnOwokbGFuZ1snaW5zdGFsbGVkJ10gPSAnTW9kdWx2ZXJzaW9uICVzIGluc3RhbGxlcmFkLic7CiRsYW5nWydpcF9hZGRyZXNzJ10gPSAnSVAtYWRkcmVzcyc7CiRsYW5nWydtb2RkZXNjcmlwdGlvbiddID0gJ0VuIG1vZHVsIHNvbSBsJmFyaW5nO3RlciBhbnYmYXVtbDtuZGFyZSBsYWRkYSB1cHAgZmlsZXIgb2NoIGwmYXJpbmc7dGVyIGRpZyBoYW50ZXJhIGRlbS4nOwokbGFuZ1snbmFtZSddID0gJ05hbW4nOwokbGFuZ1sncmVuYW1lbWVzc2FnZSddID0gJyZBdW1sO25kcmEgbmFtbmV0IGgmYXVtbDtyIGYmb3VtbDtyIGF0dCBnJm91bWw7cmEgZW4gbmFtbiZhdW1sO25kcmluZyc7CiRsYW5nWydwYXRoJ10gPSAnUyZvdW1sO2t2JmF1bWw7Zyc7CiRsYW5nWydwYXRobWVzc2FnZSddID0gJyZBdW1sO25kcmEga2F0ZWdvcmluIGgmYXVtbDtyIGYmb3VtbDtyIGF0dCBmbHl0dGEgZmlsZW4gdGlsbCBlbiBhbm5hbiBtYXBwJzsKJGxhbmdbJ3BhdGhpbnVwbG9hZHMnXSA9ICcocmVsYXRpdiB0aWxsIHVwcGxhZGRuaW5nc21hcHBlbiknOwokbGFuZ1sncG9zdGluc3RhbGwnXSA9ICdNZWRkZWxhbmRlIGVmdGVyIGluc3RhbGxhdGlvbiwgdC5leC4gR2wmb3VtbDttIGludGUgYXR0IHN0JmF1bWw7bGxhIGluIHImYXVtbDt0dGlnaGV0ZXIgZiZvdW1sO3IgJnF1b3Q7TWFuYWdlIFVwbG9hZHMmcXVvdDsgZiZvdW1sO3IgYXR0IGFudiZhdW1sO25kYSBkZW4gaCZhdW1sO3IgbW9kdWxlbiEnOwokbGFuZ1sncG9zdHVuaW5zdGFsbCddID0gJ01lZGRlbGFuZGUgZWZ0ZXIgYXZpbnN0YWxsYXRpb24sIHQuZXguICZxdW90O1NraXQgb2NrcyZhcmluZzshIEJlc2VncmFkIGlnZW4hJnF1b3Q7JzsKJGxhbmdbJ3ByZWZlcmVuY2VzJ10gPSAnSW5zdCZhdW1sO2xsbmluZ2FyJzsKJGxhbmdbJ3ByZWZzdXBkYXRlZCddID0gJ01vZHVsaW5zdCZhdW1sO2xsbmluZ2FyIHVwcGRhdGVyYWRlLic7CiRsYW5nWydwcm9tcHRfY2F0ZWdvcnlkZXNjJ10gPSAnQmVza3Jpdm5pbmcnOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5bGlzdGFibGUnXSA9ICdGaWxlcm5hIGkgZGVuIGgmYXVtbDtyIG1hcHBlbiBrYW4gbGlzdGFzJzsKJGxhbmdbJ3Byb21wdF9jYXRlZ29yeW5hbWUnXSA9ICdLYXRlZ29yaW5hbW4nOwokbGFuZ1sncHJvbXB0X2NhdGVnb3J5cGF0aCddID0gJ1NlcnZlci1zJm91bWw7a3YmYXVtbDtnJzsKJGxhbmdbJ3Byb21wdF9kZWxldGVkaXJlY3RvcnknXSA9ICdUYSBib3J0IGthdGVnb3JpbWFwcD8nOwokbGFuZ1sncHJvbXB0X21heF91cGxvYWRzaXplJ10gPSAnTWF4aW1hbCBmaWxzdG9ybGVrIHRpbGwmYXJpbmc7dGVuIChLYiknOwokbGFuZ1sncHJvbXB0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnMnXSA9ICdUaWxsJmFyaW5nO3RuYSBmaWx0aWxsJmF1bWw7Z2cgZiZvdW1sO3IgdXBwbGFkZGFkZSBmaWxlcic7CiRsYW5nWydzY2FuJ10gPSAnU2Nhbm5hJzsKJGxhbmdbJ3NlbGVjdGNhdGVnb3J5J10gPSAnViZhdW1sO2xqIGthdGVnb3JpJzsKJGxhbmdbJ3NpemUnXSA9ICdTdG9ybGVrJzsKJGxhbmdbJ3NpemVrYiddID0gJ1N0b3JsZWsgKEtiKSc7CiRsYW5nWydzdWJtaXQnXSA9ICdMJmF1bWw7Z2cgdGlsbCc7CiRsYW5nWydzdW1tYXJ5X3RlbXBsYXRlJ10gPSAnU2FtbWFuZmF0dG5pbmdzbWFsbCc7CiRsYW5nWydzdW1tYXJ5J10gPSAnU2FtbWFuZmF0dG5pbmcnOwokbGFuZ1sndGl0bGVfYWRtaW5fcGFuZWwnXSA9ICdVcHBsYWRkbmluZ3Ntb2R1bCc7CiRsYW5nWyd0aXRsZV9tb2RfYWRtaW4nXSA9ICdBZG1pbi1wYW5lbCBmJm91bWw7ciBtb2R1bCc7CiRsYW5nWyd0aXRsZV9tb2RfcHJlZnMnXSA9ICdJbnN0JmF1bWw7bGxuaW5nYXIgZiZvdW1sO3IgbW9kdWwnOwokbGFuZ1sndGl0bGVfc3VibmV0X2V4Y2x1c2lvbnMnXSA9ICdFeGtsdWRlcmEgc3VibiZhdW1sO3QgZnImYXJpbmc7biBzdGF0aXN0aWsnOwokbGFuZ1sndGl0bGVfdmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyddID0gJ1RpbGwmYXJpbmc7dG5hIGZpbHRpbGwmYXVtbDtnZyc7CiRsYW5nWyd1bmluc3RhbGxlZCddID0gJ01vZHVsIGF2aW5zdGFsbGVyYWQuJzsKJGxhbmdbJ3VwZ3JhZGVkJ10gPSAnTW9kdWwgdXBwZ3JhZGVyYWQgdGlsbCB2ZXJzaW9uICVzLic7CiRsYW5nWyd1cGxvYWQnXSA9ICdMYWRkYSB1cHAnOwokbGFuZ1sndXBsb2FkZWQnXSA9ICdGaWxlbiAlcyAmYXVtbDtyIHVwcGxhZGRhZC4nOwokbGFuZ1sncmVwbGFjZWQnXSA9ICdGaWxlbiAlcyBlcnNhdHRlcyBhdiAlcy4nOwokbGFuZ1snZGVsZXRlZCddID0gJ0ZpbGVuICVzICZhdW1sO3IgYm9ydHRhZ2VuLic7CiRsYW5nWyd1cGxvYWRmb3JtX3RlbXBsYXRlJ10gPSAnVXBwbGFkZG5pbmdzbWFsbCc7CiRsYW5nWyd1c2VybmFtZSddID0gJ0FudiZhdW1sO25kYXJuYW1uJzsKJGxhbmdbJ3dhcm5pbmdfZGVsZXRlY2F0ZWdvcnknXSA9ICdWQVJOSU5HOiBWYXIgZiZvdW1sO3JzaWt0aWcgbiZhdW1sO3IgZHUgdGFyIGJvcnQga2F0ZWdvcmllci4gRmlsZXIga2FuIGcmYXJpbmc7ciBmJm91bWw7cmxvcmFkZSc7CiRsYW5nWydxY2EnXSA9ICdQMC0xMjMxODcyMzI1LTEyNjkzNTkzMjExOTUnOwokbGFuZ1sndXRtYSddID0gJzE1Njg2MTM1My4xMjY5Nzc3NjAzLjEyNjkzNTkzNDIuMTI2OTM1OTM0Mi4xMjY5MzU5MzQyLjEnOwokbGFuZ1sndXRtYiddID0gJzE1Njg2MTM1My4xLjEwLjEyNjkzNTkzNDInOwokbGFuZ1sndXRtYyddID0gJzE1Njg2MTM1Myc7CiRsYW5nWyd1dG16J10gPSAnMTU2ODYxMzUzLjEyNjkzNTkzNDIuMS4xLnV0bWNzcj1nb29nbGV8dXRtY2NuPShvcmdhbmljKXx1dG1jbWQ9b3JnYW5pY3x1dG1jdHI9Y21zbXMnOwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/lib/class.category.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCm5hbWVzcGFjZSBVcGxvYWRzOwoKLyoqCiAqIFRoaXMgY2xhc3MgcmVwcmVzZW50cyBhbiB1cGxvYWRzIGNhdGVnb3J5LgogKiBJdCBoYW5kbGVzIGxvYWRpbmcgYW5kIHNhdmluZyB0aGUgY2F0ZWdvcnkgdG8gdGhlIGRhdGFiYXNlIGFuZCBnZXR0aW5nL3NldHRpbmcgdGhlIHZhcmlvdXMgcHJvcGVydGllcy4KICogVGhlIHBhdGggcHJvcGVydHkgb2YgYSBjYXRlZ29yeSBjYW5ub3QgYmUgYWRqdXN0ZWQgb25jZSBpdCBoYXMgYmVlbiBzYXZlZCBob3dldmVyLCB0aGUgb3RoZXIgcGFyYW10ZXJzIGNhbi4KICogVGhpcyBjbGFzcyBkb2VzIG5vdCBoYW5kbGUgc2VuZGluZyBldmVudHMsIHNjYW5uaW5nIGZpbGVzIGluIGEgY2F0ZWdvcnkgb3IgYW55IG90aGVyIGFwcGxpY2F0aW9uIGxldmVsIGZ1bmN0aW9uYWxpdHkuCiAqIEhvd2V2ZXIsIHRoaXMgY2xhc3MgZG9lcyB2YWxpZGF0ZSB0aGF0IHRoZSBwYXRoIHNwZWNpZmllZCBsaWVzIHVuZGVybmVhdGggdGhlIHJvb3QgZGlyZWN0b3J5LgogKgogKiBAcHJvcGVydHktcmVhZCBpbnQgJGlkIFRoZSBpbnRlZ2VyIGlkIG9mIHRoaXMgY2F0ZWdvcnkgKGlmIHNhdmVkKQogKiBAcHJvcGVydHkgc3RyaW5nICRuYW1lIFRoZSBuYW1lIG9mIHRoaXMgY2F0ZWdvcnkKICogQHByb3BlcnR5IHN0cmluZyAkZGVzY3JpcHRpb24gQSBodW1hbiByZWFkYWJsZSBkZXNjcmlwdGlvbiBmb3IgdGhlIGNhdGVnb3J5CiAqIEBwcm9wZXJ0eSBzdHJpbmcgJHBhdGggVGhlIHBhdGggZm9yIHRoaXMgY2F0ZWdvcnkgKHJlbGF0aXZlIHRvIHRoZSBDTVNNUyB1cGxvYWQgcGF0aCkKICogQHByb3BlcnR5IGJvb2wgICAkbGlzdGFibGUgV2hldGhlciB0aGUgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSBjYW4gYmUgZGlzcGxheWVkIG9uIHRoZSBmcm9udGVuZCBvZiB0aGUgc2l0ZQogKiBAcHJvcGVydHkgYXJyYXkgICRncm91cHMgVGhlIEZFVSBncm91cHMgdGhhdCBhcmUgYWxsb3dlZCBhY2Nlc3MgdG8gdGhpcyBjYXRlZ29yeS4gIEFuIGVtcHR5IGxpc3QgaW5kaWNhdGVzIGFsbCBhY2Nlc3MuCiAqIEBwcm9lcHJ0eSBib29sICAgJGRlbGV0YWJsZSBXZXRoZXIgZmlsZXMgaW4gdGhpcyBjYXRlZ29yeSBjYW4gYmUgZGVsZXRlZCBieSBhdXRob3JpemVkIHVzZXJzLgogKiBAcHJvcGVydHkgaW50ICAgICRleHBpcmVzX2hycyBUaGUgbnVtYmVyIG9mIGhvdXJzIGJlZm9yZSBmaWxlcyBpbiB0aGlzIGNhdGVnb3J5IGNhbiBiZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQuICAwIGluZGljYXRlcyB0byBub3QgYXV0b21hdGljYWxseSBkZWxldGUgZmlsZXMuCiAqIEBwcm9wZXJ0eSBib29sICAgJHNjYW5uYWJsZSBXZXRoZXIgdGhpcyBjYXRlZ29yeSBzaG91bGQgYmUgYXV0b21hdGljYWxseSBzY2FubmVkIChvbiB2aWV3KSBmb3IgbmV3IGZpbGVzLgogKiBAcHJvcGVydHkgYm9vbCAgICR1c2VycGVybXMgSWYgZW5hYmxlZCwgZW5hYmxlIHdoaWNoIEZFVSB1c2VyIGdyb3VwcyBjYW4gdmlldyBzcGVjaWZpZWQgZmlsZXMgd2l0aGluIHRoZSBjYXRlZ29yeS4KICogQHByb3BlcnR5IGFycmF5ICAkZGZsdHVzZXJwZXJtcyBJZiAkdXNlcnBlcm1zIGlzIGVuYWJsZWQsIHRoaXMgYXJyYXkgbGlzdHMgdGhlIEZFVSB1c2VyZ3JvdXBzIHRoYXQgY2FuIHZpZXcgbmV3bHkgdXBsb2FkZWQgb3Igc2Nhbm5lZCBmaWxlcy4KICovCmNsYXNzIGNhdGVnb3J5CnsKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwcml2YXRlICRfZGF0YSA9IGFycmF5KCdpZCc9Pm51bGwsJ25hbWUnPT5udWxsLCdkZXNjcmlwdGlvbic9Pm51bGwsJ3BhdGgnPT5udWxsLCdsaXN0YWJsZSc9Pm51bGwsJ2dyb3Vwcyc9Pm51bGwsJ2RlbGV0YWJsZSc9Pm51bGwsJ2V4cGlyZXNfaHJzJz0+bnVsbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3NjYW5uYWJsZSc9Pm51bGwsJ3VzZXJwZXJtcyc9Pm51bGwsJ2RmbHR1c2VycGVybXMnPT5udWxsKTsKCiAgICAvKioKICAgICAqIEBpZ25vcmUKICAgICAqLwogICAgcHJpdmF0ZSAkX2RpcnR5OwoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19nZXQoJGtleSkKICAgIHsKICAgICAgICBpZiggIWFycmF5X2tleV9leGlzdHMoJGtleSwkdGhpcy0+X2RhdGEpICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCIka2V5IGlzIGFuIGludmFsaWQgbWVtYmVyIG9mICIuX19DTEFTU19fKTsKICAgICAgICByZXR1cm4gJHRoaXMtPl9kYXRhWyRrZXldOwogICAgfQoKICAgIC8qKgogICAgICogQGlnbm9yZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19zZXQoJGtleSwkdmFsKQogICAgewogICAgICAgIGlmKCAhYXJyYXlfa2V5X2V4aXN0cygka2V5LCR0aGlzLT5fZGF0YSkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIiRrZXkgaXMgYW4gaW52YWxpZCBtZW1iZXIgb2YgIi5fX0NMQVNTX18pOwogICAgICAgIHN3aXRjaCggJGtleSApIHsKICAgICAgICBjYXNlICdpZCc6CiAgICAgICAgICAgIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiJGtleSBjYW5ub3QgYmUgc2V0IGluIHRoaXMgd2F5IGZvciBhICIuX19DTEFTU19fKTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ3BhdGgnOgogICAgICAgICAgICBpZiggJHRoaXMtPl9kYXRhWydpZCddID4gMCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGFkanVzdCB0aGUgcGF0aCBvZiBhIGNhdGVnb3J5IHRoYXQgaGFzIGFscmVhZHkgYmVlbiBzYXZlZCcpOwogICAgICAgICAgICAkdmFsID0gdHJpbSgkdmFsKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgJHRoaXMtPl9kaXJ0eSA9IFRSVUU7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICduYW1lJzoKICAgICAgICBjYXNlICdkZXNjcmlwdGlvbic6CiAgICAgICAgICAgICR2YWwgPSB0cmltKCR2YWwpOwogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICAgICAgICAkdGhpcy0+X2RpcnR5ID0gVFJVRTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2xpc3RhYmxlJzoKICAgICAgICBjYXNlICdkZWxldGFibGUnOgogICAgICAgIGNhc2UgJ3NjYW5uYWJsZSc6CiAgICAgICAgY2FzZSAndXNlcnBlcm1zJzoKICAgICAgICAgICAgJHZhbCA9IChib29sKSAkdmFsOwogICAgICAgICAgICAkdGhpcy0+X2RhdGFbJGtleV0gPSAkdmFsOwogICAgICAgICAgICAkdGhpcy0+X2RpcnR5ID0gVFJVRTsKICAgICAgICAgICAgYnJlYWs7CgogICAgICAgIGNhc2UgJ2V4cGlyZXNfaHJzJzoKICAgICAgICAgICAgJHZhbCA9IChpbnQpICR2YWw7CiAgICAgICAgICAgICR2YWwgPSBtYXgoMCwkdmFsKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgJHRoaXMtPl9kaXJ0eSA9IFRSVUU7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlICdncm91cHMnOgogICAgICAgIGNhc2UgJ2RmbHR1c2VycGVybXMnOgogICAgICAgICAgICBpZiggIWlzX251bGwoJHZhbCkgJiYgIWlzX2FycmF5KCR2YWwpICkgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ0ludmFsaWQgdmFsdWUgZm9yICcuJGtleS4nIGluICcuX19DTEFTU19fKTsKICAgICAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gJHZhbDsKICAgICAgICAgICAgJHRoaXMtPl9kaXJ0eSA9IFRSVUU7CiAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oIiRrZXkgaXMgbm90IGEgdmFsaWQgbWVtYmVyIG9mICIuX19DTEFTU19fKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2lzc2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoICFhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiJGtleSBpcyBhbiBpbnZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgcmV0dXJuIGlzc2V0KCR0aGlzLT5fZGF0YVska2V5XSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAaWdub3JlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3Vuc2V0KCRrZXkpCiAgICB7CiAgICAgICAgaWYoICFhcnJheV9rZXlfZXhpc3RzKCRrZXksJHRoaXMtPl9kYXRhKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiJGtleSBpcyBhbiBpbnZhbGlkIG1lbWJlciBvZiAiLl9fQ0xBU1NfXyk7CiAgICAgICAgJHRoaXMtPl9kYXRhWyRrZXldID0gbnVsbDsKICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgY2FzZSAnaWQnOgogICAgICAgIGNhc2UgJ3BhdGgnOgogICAgICAgICAgICB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0Nhbm5vdCB1bnNldCB0aGUgJy4ka2V5LicgbWVtYmVyIG9mIGEgJy5fX0NMQVNTX18pOwogICAgICAgIH0KICAgICAgICAkdGhpcy0+X2RpcnR5ID0gVFJVRTsKICAgIH0KCiAgICAvKioKICAgICAqIFZhbGlkYXRlIHRoZSBjb250ZW50cyBvZiB0aGUgb2JqZWN0IGJlZm9yZSBzYXZpbmcuCiAgICAgKiBUaGlzIG1ldGhvZCB3aWxsIHF1ZXJ5IHRoZSBkYXRhYmFzZSB0byBjaGVjayBpZiB0aGUgY2F0ZWdvcnkgbmFtZSBleGlzdHMsIG9yIGlmIGEgY2F0ZWdvcnkgd2l0aCB0aGUgc2FtZSBwYXRoIGV4aXN0cy4KICAgICAqIEFsc28gd2lsbCBjaGVjayB0aGUgdmFsaWRpdHkgb2YgdGhlIHBhdGguCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB2YWxpZGF0ZSgpCiAgICB7CiAgICAgICAgJG1vZCA9IFxjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX1VQTE9BRFMpOwoKICAgICAgICAvLyB2YWxpZGF0ZSB0aGF0IHdlIGhhdmUgYSBuYW1lIChpZiBub3Qgc2V0IGl0IGZyb20gdGhlIHBhdGgpCiAgICAgICAgaWYoICEkdGhpcy0+bmFtZSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignWW91IG11c3Qgc2V0IGEgbmFtZSBmb3IgYSAnLl9fQ0xBU1NfXyk7CiAgICAgICAgLy8gdmFsaWRhdGUgdGhhdCB0aGUgcGF0aCBpcyBzZXQKICAgICAgICBpZiggISR0aGlzLT5wYXRoICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdZb3UgbXVzdCBzZXQgYSBwYXRoIGZvciBhICcuX19DTEFTU19fKTsKCiAgICAgICAgLy8gaWYgdGhlIHBhdGggZXhpc3RzLCB2YWxpZGF0ZSB0aGF0IGl0IGhhcyB0aGUgcHJvcGVyIHBlcm1pc3Npb25zCiAgICAgICAgJGZ1bGxwYXRoID0gJG1vZC0+X2NhdGVnb3J5UGF0aCgkdGhpcy0+cGF0aCk7CiAgICAgICAgaWYoIEBmaWxlX2V4aXN0cygkZnVsbHBhdGgpICkgewogICAgICAgICAgICBpZiggIUBpc19kaXIoJGZ1bGxwYXRoKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignRXhpc3RpbmcgcGF0aCAnLiR0aGlzLT5wYXRoLicgaXMgbm90IGEgZGlyZWN0b3J5Jyk7CiAgICAgICAgICAgIGlmKCAhQGlzX3dyaXRhYmxlKCRmdWxscGF0aCkgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0V4aXN0aW5nIHBhdGggJy4kdGhpcy0+cGF0aC4nIGlzIG5vdCBhIGRpcmVjdG9yeScpOwogICAgICAgIH0KCiAgICAgICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgICAgICRycDEgPSByZWFscGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSk7CiAgICAgICAgaWYoICFzdGFydHN3aXRoKCRmdWxscGF0aCwkcnAxKSApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbigiVGhlIGNhdGVnb3J5IHBhdGggIi4kZnVsbHBhdGguJyBkb2VzIG5vdCBhcHBlYXIgdG8gbGllIHdpdGhpbiB0aGUgQ01TTVMgdXBsb2FkcyBwYXRoJyk7CgogICAgICAgIC8vIHZhbGlkYXRlIHRoYXQgdGhlIG5hbWUgb3IgcGF0aCBpcyBub3QgYWxyZWFkeSB1c2VkCiAgICAgICAgJGRiID0gXGNnZV91dGlsczo6Z2V0X2RiKCk7CiAgICAgICAgaWYoICR0aGlzLT5pZCA8IDEgKSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X3BhdGggPSA/IE9SIHVwbG9hZF9jYXRlZ29yeV9uYW1lID0gPyc7CiAgICAgICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJHRoaXMtPnBhdGgsJHRoaXMtPm5hbWUpKTsKICAgICAgICAgICAgaWYoICR0bXAgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0EgY2F0ZWdvcnkgd2l0aCB0aGUgc2FtZSBuYW1lIG9yIHBhdGggYWxyZWFkeSBleGlzdHMnKTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgKHVwbG9hZF9jYXRlZ29yeV9wYXRoID0gPyBPUiB1cGxvYWRfY2F0ZWdvcnlfbmFtZSA9ID8pIEFORCB1cGxvYWRfY2F0ZWdvcnlfaWQgIT0gPyc7CiAgICAgICAgICAgICR0bXAgPSAkZGItPkdldE9uZSgkcXVlcnksYXJyYXkoJHRoaXMtPnBhdGgsJHRoaXMtPm5hbWUsJHRoaXMtPmlkKSk7CiAgICAgICAgICAgIGlmKCAkdG1wICkgdGhyb3cgbmV3IFxSdW50aW1lRXhjZXB0aW9uKCdBIGNhdGVnb3J5IHdpdGggdGhlIHNhbWUgbmFtZSBvciBwYXRoIGFscmVhZHkgZXhpc3RzJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogSW5zZXJ0IHRoaXMgb2JqZWN0IGludG8gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX2luc2VydCgpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2RpcnR5ICkgcmV0dXJuOwogICAgICAgICRkYiA9IFxjZ2VfdXRpbHM6OmdldF9kYigpOwoKICAgICAgICAkYXJyYXlfdG9fc3RyID0gZnVuY3Rpb24oJGluKSB7CiAgICAgICAgICAgICRvdXQgPSBudWxsOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGluKSAmJiBjb3VudCgkaW4pICkgewogICAgICAgICAgICAgICAgJG91dCA9IGltcGxvZGUoJywnLCRpbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgfTsKCiAgICAgICAgJHRtcCA9IChpbnQpICRkYi0+R2VuSUQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzX3NlcScpOwogICAgICAgICR0aGlzLT5fZGF0YVsnaWQnXSA9ICR0bXA7CgogICAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcwogICAgICAgICAgICAgICAgICAodXBsb2FkX2NhdGVnb3J5X2lkLAogICAgICAgICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X25hbWUsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfcGF0aCwKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSwKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9ncm91cHMsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlLAogICAgICAgICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2V4cGlyZXNfaHJzLAogICAgICAgICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X3NjYW5uYWJsZSwKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcykKICAgICAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sPyw/LD8pJzsKICAgICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdGhpcy0+aWQsJHRoaXMtPm5hbWUsJHRoaXMtPmRlc2NyaXB0aW9uLCR0aGlzLT5wYXRoLCR0aGlzLT5saXN0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJyYXlfdG9fc3RyKCR0aGlzLT5ncm91cHMpLCAkdGhpcy0+ZGVsZXRhYmxlLCAkdGhpcy0+ZXhwaXJlc19ocnMsICR0aGlzLT5zY2FubmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnVzZXJwZXJtcywgJGFycmF5X3RvX3N0cigkdGhpcy0+ZGZsdHVzZXJwZXJtcykpKTsKICAgICAgICAkdGhpcy0+X2RpcnR5ID0gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIGNvbnRlbnRzIG9mIHRoaXMgY2F0ZWdvcnkgb2JqZWN0IGludG8gdGhlIGRhdGFiYXNlLgogICAgICoKICAgICAqIEBpbnRlcm5hbAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gX3VwZGF0ZSgpCiAgICB7CiAgICAgICAgaWYoICEkdGhpcy0+X2RpcnR5ICkgcmV0dXJuOwogICAgICAgICRkYiA9IFxjZ2VfdXRpbHM6OmdldF9kYigpOwoKICAgICAgICAkYXJyYXlfdG9fc3RyID0gZnVuY3Rpb24oJGluKSB7CiAgICAgICAgICAgICRvdXQgPSBudWxsOwogICAgICAgICAgICBpZiggaXNfYXJyYXkoJGluKSAmJiBjb3VudCgkaW4pICkgewogICAgICAgICAgICAgICAgJG91dCA9IGltcGxvZGUoJywnLCRpbik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuICRvdXQ7CiAgICAgICAgfTsKCiAgICAgICAgJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBTRVQgdXBsb2FkX2NhdGVnb3J5X25hbWUgPSA/LCB1cGxvYWRfY2F0ZWdvcnlfZGVzY3JpcHRpb24gPSA/LCB1cGxvYWRfY2F0ZWdvcnlfcGF0aCA9ID8sCiAgICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSA9ID8sIHVwbG9hZF9jYXRlZ29yeV9ncm91cHMgPSA/LCB1cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlID0gPywgdXBsb2FkX2NhdGVnb3J5X2V4cGlyZXNfaHJzID0gPywgdXBsb2FkX2NhdGVnb3J5X3NjYW5uYWJsZSA9ID8sCiAgICAgICAgICAgICAgICAgICAgIHVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgPSA/LCB1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyA9ID8gV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2lkID0gPyc7CiAgICAgICAgJGRiciA9ICRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRoaXMtPm5hbWUsJHRoaXMtPmRlc2NyaXB0aW9uLCR0aGlzLT5wYXRoLCR0aGlzLT5saXN0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkYXJyYXlfdG9fc3RyKCR0aGlzLT5ncm91cHMpLCAkdGhpcy0+ZGVsZXRhYmxlLCAkdGhpcy0+ZXhwaXJlc19ocnMsICR0aGlzLT5zY2FubmFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnVzZXJwZXJtcywgJGFycmF5X3RvX3N0cigkdGhpcy0+ZGZsdHVzZXJwZXJtcykpKTsKICAgICAgICAkdGhpcy0+X2RpcnR5ID0gRkFMU0U7CiAgICB9CgogICAgLyoqCiAgICAgKiBTYXZlIHRoaXMgb2JqZWN0IHRvIHRoZSBkYXRhYmFzZS4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNhdmUoKQogICAgewogICAgICAgIGlmKCAhJHRoaXMtPl9kaXJ0eSApIHJldHVybjsKICAgICAgICAkdGhpcy0+dmFsaWRhdGUoKTsKCiAgICAgICAgLy8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgYWxyZWFkeSBleGlzdC4KICAgICAgICAkbW9kID0gXGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfVVBMT0FEUyk7CiAgICAgICAgJGZ1bGxwYXRoID0gJG1vZC0+X2NhdGVnb3J5UGF0aCgkdGhpcy0+cGF0aCk7CiAgICAgICAgaWYoICFmaWxlX2V4aXN0cygkZnVsbHBhdGgpICkgewogICAgICAgICAgICAkcmVzID0gXGNnZV9kaXI6Om1rZGlycigkZnVsbHBhdGgpOwogICAgICAgICAgICBpZiggISRyZXMgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ1Byb2JsZW0gY3JlYXRpbmcgZGlyZWN0b3J5ICcuJGZ1bGxwYXRoKTsKICAgICAgICAgICAgaWYoICRtb2QtPkdldFByZWZlcmVuY2UoJ2NyZWF0ZV9kdW1teV9pbmRleF9odG1sJykgKSBAdG91Y2goIGNtc19qb2luX3BhdGgoJGZ1bGxwYXRoLCdpbmRleC5odG1sJykgKTsKICAgICAgICB9CgogICAgICAgIC8vIG5vdyB3ZSdyZSByZWFkeSB0byBzYXZlIGl0CiAgICAgICAgaWYoICR0aGlzLT5pZCA8IDEgKSB7CiAgICAgICAgICAgICR0aGlzLT5faW5zZXJ0KCk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkdGhpcy0+X3VwZGF0ZSgpOwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZGVsZXRlKCkKICAgIHsKICAgICAgICBpZiggISR0aGlzLT5pZCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ2Fubm90IGRlbGV0ZSBjYXRlZ29yeSB0aGF0IGhhcyBub3QgYmVlbiBzYXZlZCcpOwogICAgICAgICRkYiA9IFxjZ2VfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRtb2QgPSBcY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9VUExPQURTKTsKICAgICAgICAkZnVsbHBhdGggPSAkbW9kLT5fY2F0ZWdvcnlQYXRoKCAkdGhpcy0+cGF0aCApOwoKICAgICAgICAvLyBAdG9kbzogbG9hZCB0aGUgZmlsZSAnb2JqZWN0cycgYW5kIGNhbGwgdGhlIGRlbGV0ZSBtZXRob2QgdGhlcmUKICAgICAgICAvLyBnZXQgdGhlIGZpbGVzIGZyb20gdGhlIGNhdGVnb3J5CiAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCB1cGxvYWRfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X2lkID0gPyc7CiAgICAgICAgJHRtcCA9ICRkYi0+R2V0T25lKCRxdWVyeSxhcnJheSgkY2F0ZWdvcnlfaWQpICk7CiAgICAgICAgaWYoICR0bXAgKSByZXR1cm4gJG1vZC0+TGFuZygnZXJyb3JfY2F0ZWdvcnlub3RlbXB0eScpOwogICAgICAgIFxjZ2VfZGlyOjpyZWN1cnNpdmVfcm1kaXIoJGZ1bGxwYXRoKTsKICAgICAgICBpZiggZmlsZV9leGlzdHMoJGZ1bGxwYXRoKSApCXJldHVybiAkbW9kLT5MYW5nKCdlcnJvcl9kZWxldGUnLCRmdWxscGF0aCk7CgogICAgICAgIC8vIGRlbGV0ZSB0aGUgY2F0ZWdvcnkgZnJvbSB0aGUgZGIKICAgICAgICAkZGIgPSAkbW9kLT5HZXREYigpOwogICAgICAgICRxdWVyeSA9ICJERUxFVEUgRlJPTSAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBXSEVSRSB1cGxvYWRfY2F0ZWdvcnlfaWQgPSA/IjsKICAgICAgICAkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgYXJyYXkoICR0aGlzLT5pZCApICk7CgogICAgICAgICR0aGlzLT5fZGF0YVsnaWQnXSA9IG51bGw7CiAgICAgICAgJHRoaXMtPl9kaXJ0eSA9IFRSVUU7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkIGEgY2F0ZWdvcnkgb2JqZWN0IGZyb20gdGhlIGRhdGFiYXNlLgogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uICZsb2FkX2J5X2lkKCRpZCkKICAgIHsKICAgICAgICAkaWQgPSAoaW50KSAkaWQ7CiAgICAgICAgaWYoICRpZCA8IDEgKSB0aHJvdyBuZXcgXFJ1bnRpbWVFeGNlcHRpb24oJ0ludmFsaWQgaWQgcGFzc2VkIHRvICcuX19NRVRIT0RfXyk7CgogICAgICAgICRkYiA9IFxjZ2VfdXRpbHM6OmdldF9kYigpOwogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkLCB1cGxvYWRfY2F0ZWdvcnlfbmFtZSwgdXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9uLCB1cGxvYWRfY2F0ZWdvcnlfcGF0aCwgdXBsb2FkX2NhdGVnb3J5X2xpc3RhYmxlLCB1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzLAogICAgICAgICAgICAgICAgICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZSwgdXBsb2FkX2NhdGVnb3J5X2V4cGlyZXNfaHJzLCB1cGxvYWRfY2F0ZWdvcnlfc2Nhbm5hYmxlLCB1cGxvYWRfY2F0ZWdvcnlfdXNlcnBlcm1zLCB1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcwogICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBXSEVSRSB1cGxvYWRfY2F0ZWdvcnlfaWQgPSA/JzsKICAgICAgICAkZGJyID0gJGRiLT5HZXRSb3coJHF1ZXJ5LGFycmF5KCRpZCkpOwogICAgICAgIGlmKCAhaXNfYXJyYXkoJGRicikgfHwgY291bnQoJGRicikgPT0gMCApIHRocm93IG5ldyBcUnVudGltZUV4Y2VwdGlvbignQ291bGQgbm90IGZpbmQgYW4gdXBsb2FkIGNhdGVnb3J5IHdpdGggaWQgJy4kaWQpOwoKICAgICAgICAkb2JqID0gbmV3IHNlbGYoKTsKICAgICAgICBmb3JlYWNoKCAkZGJyIGFzICRrZXkgPT4gJHZhbCApIHsKICAgICAgICAgICAgJG5ld2tleSA9IHN1YnN0cigka2V5LHN0cmxlbigndXBsb2FkX2NhdGVnb3J5XycpKTsKICAgICAgICAgICAgc3dpdGNoKCAkbmV3a2V5ICkgewogICAgICAgICAgICBjYXNlICdncm9wdXBzJzoKICAgICAgICAgICAgY2FzZSAnZGZsdHVzZXJwZXJtcyc6CiAgICAgICAgICAgICAgICAkdmFsID0gZXhwbG9kZSgnLCcsJHZhbCk7CiAgICAgICAgICAgICAgICAkb2JqLT5fZGF0YVska2V5XSA9ICR2YWw7CgogICAgICAgICAgICBjYXNlICdpZCc6CiAgICAgICAgICAgICAgICAkb2JqLT5fZGF0YVskbmV3a2V5XSA9IChpbnQpICR2YWw7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ3BhdGgnOgogICAgICAgICAgICAgICAgJG9iai0+X2RhdGFbJG5ld2tleV0gPSAkdmFsOwogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgJG9iai0+JG5ld2tleSA9ICR2YWw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAkb2JqLT5fZGlydHkgPSBGQUxTRTsKICAgICAgICByZXR1cm4gJG9iajsKICAgIH0KfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.UploadsCleanupExpiredTasks.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgpjbGFzcyBVcGxvYWRzQ2xlYW51cEV4cGlyZWRUYXNrcyBpbXBsZW1lbnRzIENtc1JlZ3VsYXJUYXNrCnsKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfbmFtZSgpIHsgcmV0dXJuIGdldF9jbGFzcygkdGhpcyk7IH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc2NyaXB0aW9uKCkKICAgIHsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKE1PRF9VUExPQURTKTsKICAgICAgICByZXR1cm4gJG1vZC0+TGFuZygnY2xlYW51cHRhc2tfZGVzYycpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0KCR0aW1lID0gJycpCiAgICB7CiAgICAgICAgaWYoICEkdGltZSApICR0aW1lID0gdGltZSgpOwogICAgICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX1VQTE9BRFMpOwogICAgICAgICRsYXN0cnVuID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgnY2xlYW51cHRhc2tfbGFzdHJ1bicpOwoKICAgICAgICAvLyBldmVyeSBoYWxmIGhvdXI/IG5vdGUsIHRoaXMgb25seSBnZXRzIGNhbGxlZCBmcm9tIHBzZXVkb2Nyb24sIHNvIGlzIHN1YmplY3QgdG8KCQkJCS8vIHBzZXVkb2Nyb24gZ3JhbnVsYXJpdHkuCiAgICAgICAgaWYoICR0aW1lID4gJGxhc3RydW4gKyAxODAwICkgcmV0dXJuIFRSVUU7CiAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBleGVjdXRlKCR0aW1lID0gJycpCiAgICB7CiAgICAgICAgaWYoICEkdGltZSApICR0aW1lID0gdGltZSgpOwoKICAgICAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgICAgICRxdWVyeSAgPSAnU0VMRUNUIHVwbG9hZF9jYXRlZ29yeV9pZCx1cGxvYWRfY2F0ZWdvcnlfZXhwaXJlc19ocnMgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBXSEVSRSB1cGxvYWRfY2F0ZWdvcnlfZXhwaXJlc19ocnMgPiAwJzsKICAgICAgICAkY2F0cyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICAgICAgICBpZiggISRjYXRzICkgcmV0dXJuIFRSVUU7IC8vIE5PVEhJTkcgVE8gRE8KCiAgICAgICAgLy8gZ2V0IHRoZSB1cGxvYWRzIHRoYXQgbmVlZCB0byBiZSBkZWxldGVkLgogICAgICAgICRxdWVyeSA9ICdTRUxFQ1QgVS51cGxvYWRfaWQsVS51cGxvYWRfbmFtZSxDLnVwbG9hZF9jYXRlZ29yeV9wYXRoCiAgICAgICAgICAgICAgICAgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFUKICAgICAgICAgICAgICAgICAgTEVGVCBKT0lOICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIEMKICAgICAgICAgICAgICAgICAgT04gVS51cGxvYWRfY2F0ZWdvcnlfaWQgPSBDLnVwbG9hZF9jYXRlZ29yeV9pZAogICAgICAgICAgICAgICAgICBXSEVSRSAnOwogICAgICAgICRhcmdzID0gYXJyYXkoKTsKICAgICAgICAkcGFybXMgPSBhcnJheSgpOwogICAgICAgICRub3cgPSB0aW1lKCk7CiAgICAgICAgZm9yZWFjaCggJGNhdHMgYXMgJG9uZSApIHsKICAgICAgICAgICAgJHRoZWRhdGUgPSAkbm93IC0gJG9uZVsndXBsb2FkX2NhdGVnb3J5X2V4cGlyZXNfaHJzJ10gKiAzNjAwOwogICAgICAgICAgICAkdGhlZGF0ZSA9ICRkYi0+RGJUaW1lU3RhbXAoJHRoZWRhdGUpOwogICAgICAgICAgICAkYXJnc1tdID0gIiggVS51cGxvYWRfY2F0ZWdvcnlfaWQgPSA/IEFORCBVLnVwbG9hZF9kYXRlIDwgJHRoZWRhdGUgKSI7CiAgICAgICAgICAgICRwYXJtc1tdID0gJG9uZVsndXBsb2FkX2NhdGVnb3J5X2lkJ107CiAgICAgICAgfQogICAgICAgICRxdWVyeSAuPSBpbXBsb2RlKCcgT1IgJywkYXJncyk7CgogICAgICAgICRmaWxlcyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5LCRwYXJtcyk7CiAgICAgICAgaWYoICEkZmlsZXMgKSByZXR1cm4gVFJVRTsgLy8gTk9USElORyBUTyBETy4KCiAgICAgICAgLy8gd2UgaGF2ZSBzb21ldGhpbmcgdG8gZGVsZXRlLgogICAgICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICAgICAkbW9kID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdVcGxvYWRzJyk7CiAgICAgICAgZm9yZWFjaCggJGZpbGVzIGFzICRvbmVmaWxlICkgewogICAgICAgICAgICAkcmVzID0gJG1vZC0+X0FkbWluRG9EZWxldGVVcGxvYWQoJG9uZWZpbGVbJ3VwbG9hZF9pZCddLHRydWUpOwogICAgICAgICAgICBpZiggISRyZXMgKSB7CiAgICAgICAgICAgICAgICAvLyB3b290LCB3ZSBkZWxldGVkIHRoZSBmaWxlCiAgICAgICAgICAgICAgICBhdWRpdCgkb25lZmlsZVsndXBsb2FkX2lkJ10sJG1vZC0+R2V0TmFtZSgpLCAnQXV0byBkZWxldGVkIGZpbGU6ICcuJG9uZWZpbGVbJ3VwbG9hZF9uYW1lJ10pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgLy8gZmlsZSBub3QgZGVsZXRlZCwgZG9uJ3QgZGVsZXRlIHRoZSByZWNvcmQsIGp1c3QgYXVkaXQgYWJvdXQgaXQuCiAgICAgICAgICAgICAgICBhdWRpdCgkb25lZmlsZVsndXBsb2FkX2lkJ10sJG1vZC0+R2V0TmFtZSgpLCAnUHJvYmxlbSBkZWxldGluZyBmaWxlOiAnLiRvbmVmaWxlWyd1cGxvYWRfbmFtZSddKTsKICAgICAgICAgICAgfQogICAgICAgIH0KCgkJCQlyZXR1cm4gVFJVRTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb25fc3VjY2VzcygkdGltZSA9ICcnKQogICAgewogICAgICAgIGlmKCAhJHRpbWUgKSAkdGltZSA9IHRpbWUoKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gb25fZmFpbHVyZSgkdGltZSA9ICcnKQogICAgewogICAgICAgIGlmKCAhJHRpbWUgKSAkdGltZSA9IHRpbWUoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_IndexerBase.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEZyb250RW5kVXNlcnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgbWFuYWdlbWVudCBvZiBmcm9udGVuZAojICB1c2VycywgYW5kIHRoZWlyIGxvZ2luIHByb2Nlc3Mgd2l0aGluIGEgQ01TIE1hZGUgU2ltcGxlIHBvd2VyZWQKIyAgd2Vic2l0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmFic3RyYWN0IGNsYXNzIHVwbG9hZHNfSW5kZXhlckJhc2UKewogICAgcHJvdGVjdGVkICRfZmlsZW5hbWU7CiAgICBwcm90ZWN0ZWQgJF9vcHRzOwogICAgcHJvdGVjdGVkICRfbWluV29yZExlbmd0aCA9IDM7CiAgICBwcm90ZWN0ZWQgJF9tYXhXb3JkTGVuZ3RoID0gMjU7CiAgICBwcm90ZWN0ZWQgJF9tYXhXb3JkQ291bnQgPSAxMDAwMDsKICAgIHByb3RlY3RlZCAkX21heFRpbWUgPSAxNTsKICAgIHByb3RlY3RlZCAkX3VuaXF1ZVdvcmRzT25seSA9IDA7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzcmMsJG9wdHMgPSBudWxsKQogICAgewogICAgICAgIGlmKCAhJHNyYyApIHRocm93IG5ldyBDbXNJbnZhbGlkRGF0YUV4Y2VwdGlvbigiTm8gZmlsZW5hbWUgc3BlY2lmaWVkIik7CiAgICAgICAgaWYoICFpc19yZWFkYWJsZSggJHNyYyApICkgdGhyb3cgbmV3IENtc0ludmFsaWREYXRhRXhjZXB0aW9uKCIkc3JjIGRvZXMgbm90IGV4aXN0IG9yIGlzIG5vdCByZWFkYWJsZSIpOwogICAgICAgICR0aGlzLT5fZmlsZW5hbWUgPSAkc3JjOwogICAgICAgICR0aGlzLT5fb3B0cyA9ICRvcHRzOwoKICAgICAgICBpZiggaXNfYXJyYXkoJG9wdHMpICYmIGNvdW50KCRvcHRzKSApIHsKICAgICAgICAgICAgZm9yZWFjaCggJG9wdHMgYXMgJGtleSA9PiAkdmFsdWUgKSB7CiAgICAgICAgICAgICAgICBzd2l0Y2goICRrZXkgKSB7CiAgICAgICAgICAgICAgICBjYXNlICdtaW5fd29yZGxlbmd0aCc6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9taW5Xb3JkTGVuZ3RoID0gbWF4KDMsbWluKDUwLChpbnQpJHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtYXhfd29yZGxlbmd0aCc6CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPl9tYXhXb3JkTGVuZ3RoID0gbWluKDUwLG1heCgzLChpbnQpJHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdtYXhfd29yZGNvdW50JzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X21heFdvcmRMZW5ndGggPSBtaW4oMTAwMDAwMCxtYXgoMSwoaW50KSR2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnbWF4X3RpbWUnOgogICAgICAgICAgICAgICAgICAgICR0aGlzLT5fbWF4VGltZSA9IG1heCgxLG1pbig5MCwoaW50KSR2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndW5pcXVlX3dvcmRzJzoKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+X3VuaXF1ZVdvcmRzT25seSA9IChpbnQpJHZhbHVlOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiggJHRoaXMtPl9taW5Xb3JkTGVuZ3RoID4gJHRoaXMtPl9tYXhXb3JkTGVuZ3RoICkgewogICAgICAgICAgICAgICAgJGEgPSAkdGhpcy0+X21pbldvcmRMZW5ndGg7CiAgICAgICAgICAgICAgICAkdGhpcy0+X21pbldvcmRMZW5ndGggPSAkdGhpcy0+X21heFdvcmRMZW5ndGg7CiAgICAgICAgICAgICAgICAkdGhpcy0+X21heFdvcmRMZW5ndGggPSAkYTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gY2xlYW5fd29yZCgkd29yZCk7CiAgICBhYnN0cmFjdCBwcm90ZWN0ZWQgZnVuY3Rpb24gZmlsdGVyX3dvcmQoJHdvcmQpOwogICAgYWJzdHJhY3QgcHVibGljIGZ1bmN0aW9uIGdldF93b3JkcygpOwp9IC8vIGVuZCBvZiBjbGFzcwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_PdfIndexer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEZyb250RW5kVXNlcnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgbWFuYWdlbWVudCBvZiBmcm9udGVuZAojICB1c2VycywgYW5kIHRoZWlyIGxvZ2luIHByb2Nlc3Mgd2l0aGluIGEgQ01TIE1hZGUgU2ltcGxlIHBvd2VyZWQKIyAgd2Vic2l0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIHVwbG9hZHNfUGRmSW5kZXhlciBleHRlbmRzIHVwbG9hZHNfSW5kZXhlckJhc2UKewogICAgcHJpdmF0ZSAkX21heFBhZ2VzID0gMTAwOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkc3JjLCRvcHRzID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCRzcmMpOwogICAgfQoKICAgIHByb3RlY3RlZCBmdW5jdGlvbiBjbGVhbl93b3JkKCR3b3JkKQogICAgewogICAgICAgIHJldHVybiB0cmltKCR3b3JkLCJfXCJcIVxAXCNcJFwlXF5cJlwqXCdcYFw9XChcKVx7XH1cW1xdXHRcblxyXDBceDBCIik7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGZpbHRlcl93b3JkKCR3b3JkKQogICAgewogICAgICAgIGlmKCAhJHdvcmQgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoIGlzX251bWVyaWMoJHdvcmQpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCBzdHJsZW4oJHdvcmQpIDwgbWF4KDMsJHRoaXMtPl9taW5Xb3JkTGVuZ3RoKSApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggc3RybGVuKCR3b3JkKSA+ICR0aGlzLT5fbWF4V29yZExlbmd0aCApIHJldHVybiBGQUxTRTsKICAgICAgICByZXR1cm4gVFJVRTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0X3dvcmRzKCkKICAgIHsKICAgICAgICAkZGlyID0gZGlybmFtZShfX0RJUl9fKS4nL3ZlbmRvcic7CiAgICAgICAgcmVxdWlyZSAiJGRpci9hdXRvbG9hZC5waHAiOyAvLyBnZXQgY29tcG9zZXIgc3R1ZmYKCiAgICAgICAgJHdvcmRfbGlzdCA9IGFycmF5KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgLy8gYW4gYXBwcm94aW1hdGlvbiBkdWUgdG8gdG8gc3RhdGlzdGljYWwgZ2F0aGVyaW5nIG9mIGEgZmV3IHBkZiBmaWxlcwogICAgICAgICAgICAvLyB0aGUgcGRmIHBhcnNlciBpcyBhIG1lbW9yeSBwaWcuCiAgICAgICAgICAgICRtZW1vcnlfbmVlZGVkID0gZmlsZXNpemUoJHRoaXMtPl9maWxlbmFtZSkgKiAxMjsKICAgICAgICAgICAgaWYoICFjZ2VfdXRpbHM6OmhhdmVfZW5vdWdoX21lbW9yeSgkbWVtb3J5X25lZWRlZCkgKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQ21zRXhjZXB0aW9uKCdJbnN1ZmZpY2llbnQgbWVtb3J5IGF2YWlsYWJsZTogJy4oJG1lbW9yeV9uZWVkZWQvMTAyNCkuJ2snKTsKICAgICAgICAgICAgfQogICAgICAgICAgICAkcGFyc2VyID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhcnNlcigpOwogICAgICAgICAgICAkcGRmID0gJHBhcnNlci0+cGFyc2VGaWxlKCR0aGlzLT5fZmlsZW5hbWUpOwogICAgICAgICAgICAkcGFnZXMgPSAkcGRmLT5nZXRQYWdlcygpOwoKICAgICAgICAgICAgJHBhZ2VfbnVtID0gMDsKICAgICAgICAgICAgJG9sZF90aW1lX2xpbWl0ID0gKGludClpbmlfZ2V0KCdtYXhfZXhlY3V0aW9uX3RpbWUnKTsKICAgICAgICAgICAgQHNldF90aW1lX2xpbWl0KDk5OTkpOyAvLyB0aGlzIGlzIHVnbHksIHVnbHkgdWdseQogICAgICAgICAgICAkc3RhcnRfdGltZSA9IG1pY3JvdGltZSgpOwogICAgICAgICAgICBmb3JlYWNoKCAkcGFnZXMgYXMgJHBhZ2UgKSB7CiAgICAgICAgICAgICAgICAvLyByZWFkIHRoZSBmaWxlIChvbmUgcGFnZSBhdCBhIHRpbWUpCiAgICAgICAgICAgICAgICAkcGFnZV9udW0rKzsKICAgICAgICAgICAgICAgICRsaW5lcyA9ICRwYWdlLT5nZXRUZXh0KCk7CgogICAgICAgICAgICAgICAgLy8gcGFyc2UgaW50byB3b3JkcwogICAgICAgICAgICAgICAgJHdvcmRzID0gcHJlZ19zcGxpdCgnL1tccywhLjs6XD8oKSstXC9cXFxcXSsvJywgJGxpbmVzKTsKICAgICAgICAgICAgICAgIHVuc2V0KCRsaW5lcyk7CiAgICAgICAgICAgICAgICAkd29yZHMgPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsJ2NsZWFuX3dvcmQnKSwgJHdvcmRzKTsKICAgICAgICAgICAgICAgICR3b3JkcyA9IGFycmF5X2ZpbHRlcigkd29yZHMsIGFycmF5KCR0aGlzLCdmaWx0ZXJfd29yZCcpKTsKCiAgICAgICAgICAgICAgICAkd29yZF9saXN0ID0gYXJyYXlfbWVyZ2UoJHdvcmRfbGlzdCwkd29yZHMpOwogICAgICAgICAgICAgICAgdW5zZXQoJHdvcmRzKTsKICAgICAgICAgICAgICAgIGlmKCAkdGhpcy0+X3VuaXF1ZVdvcmRzT25seSApICR3b3JkX2xpc3QgPSBhcnJheV91bmlxdWUoJHdvcmRfbGlzdCk7CiAgICAgICAgICAgICAgICB1bnNldCgkcGFnZSk7CgogICAgICAgICAgICAgICAgJHRkaWZmID0gKGludCltaWNyb3RpbWVfZGlmZigkc3RhcnRfdGltZSxtaWNyb3RpbWUoKSk7CiAgICAgICAgICAgICAgICBpZiggJHRoaXMtPl9tYXhUaW1lICYmICR0ZGlmZiA+ICR0aGlzLT5fbWF4VGltZSApIGJyZWFrOwogICAgICAgICAgICAgICAgaWYoICR0aGlzLT5fbWF4V29yZENvdW50ICYmIGNvdW50KCR3b3JkX2xpc3QpID49ICR0aGlzLT5fbWF4V29yZENvdW50ICkgIGJyZWFrOwogICAgICAgICAgICAgICAgaWYoICR0aGlzLT5fbWF4UGFnZXMgJiYgJHBhZ2VfbnVtID49ICR0aGlzLT5fbWF4UGFnZXMgKSBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgICB1bnNldCgkcGFnZXMpOwogICAgICAgICAgICB1bnNldCgkcGFyc2VyKTsKICAgICAgICAgICAgaWYoICRvbGRfdGltZV9saW1pdCA+IDAgKSBzZXRfdGltZV9saW1pdCgkb2xkX3RpbWVfbGltaXQpOwogICAgICAgIH0KICAgICAgICBjYXRjaCggRXhjZXB0aW9uICRlICkgewogICAgICAgICAgICAvLyBub3RoaW5nIGhlcmUuCiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHdvcmRfbGlzdDsKICAgIH0KfQoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_report_base.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLWZpbGUtc3R5bGU6bGludXg7IHRhYi13aWR0aDoyOyBpbmRlbnQtdGFicy1tb2RlOnQ7IGMtYmFzaWMtb2Zmc2V0OiAyOyAtKi0KI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEgYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywgCiMgIGZyb250ZW5kIHVwbG9hZHMuLiAKIyAKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFRoaXMgcHJvamVjdCdzIGhvbWVwYWdlIGlzOiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluIAojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIHVwbG9hZHNfcmVwb3J0X3JlY29yZAp7CiAgcHJpdmF0ZSAkX2RhdGE7CgogIHB1YmxpYyBmdW5jdGlvbiBpc19uZXdfZ3JvdXAoKQogIHsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfaGVhZGVycygpCiAgewogIH0KCiAgcHVibGljIGZ1bmN0aW9uIGdldF9kYXRhKCkKICB7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gaXNfZW5kX2dyb3VwKCkKICB7CiAgfQp9CgphYnN0cmFjdCBjbGFzcyB1cGxvYWRzX3JlcG9ydF9iYXNlCnsKICBwcml2YXRlICRfZGI7CiAgcHJpdmF0ZSAkX2xpbWl0ID0gMTAwMDAwOwogIHByaXZhdGUgJF9vZmZzZXQgPSAwOwogIHByaXZhdGUgJF90ZW1wbGF0ZTsKICBwcml2YXRlICRfZ3JvdXBieTsKICBwcml2YXRlICRfY3VyX2luZGV4OwogIHByaXZhdGUgJF9udW1fcmVjb3JkczsKCiAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KEFET0Nvbm5lY3Rpb24gJiRkYikKICB7CiAgICAkdGhpcy0+X2RiID0gJGRiOwogIH0KCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9kYigpCiAgewogICAgcmV0dXJuICR0aGlzLT5fZGI7CiAgfQoKICBhYnN0cmFjdCBwdWJsaWMgZnVuY3Rpb24gZ2V0X3RpdGxlKCk7CgogIGFic3RyYWN0IHB1YmxpYyBmdW5jdGlvbiBnZXRfZGVzY3JpcHRpb24oKTsKCiAgYWJzdHJhY3QgcHJvdGVjdGVkIGZ1bmN0aW9uIGdldF9udW1fcmVjb3JkcygpOwogIGFic3RyYWN0IHByb3RlY3RlZCBmdW5jdGlvbiBnZXRfZGF0YSgkbGltaXQsJG9mZnNldCk7CgogIHByb3RlY3RlZCBmdW5jdGlvbiBwb3N0cHJvY2VzcygkZGF0YSkKICB7CiAgICAKICAgIHJldHVybiAkZGF0YTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfbGltaXQoJGxpbWl0KQogIHsKICAgICR0aGlzLT5fbGltaXQgPSAoaW50KSRsaW1pdDsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBnZXRfbGltaXQoKQogIHsKICAgIHJldHVybiAkdGhpcy0+X2xpbWl0OwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIHNldF90ZW1wbGF0ZSgkdHBsX25hbWUpCiAgewogICAgcmV0dXJuICR0aGlzLT5fdGVtcGxhdGUgPSB0cmltKCR0cGxfbmFtZSk7CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2VuZXJhdGUoKQogIHsKICAgICR0aGlzLT5fZGF0YSA9ICR0aGlzLT5wb3N0cHJvY2VzcygkdGhpcy0+X2dldF9kYXRhKCkpOwogICAgJHVpZCA9IGdldF91c2VyaWQoRkFMU0UpOwoKICAgICRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKICAgICRzbWFydHktPmFzc2lnbigncGFnZWJyZWFrJywnPGRpdiBzdHlsZT0icGFnZS1icmVhay1hZnRlUjogYWx3YXlzOyI+PC9kaXY+Jyk7CgogICAgaWYoIGVuZHN3aXRoKCR0aGlzLT5fdGVtcGxhdGUsJy50cGwnKSApIHsKICAgICAgLy8gZmlsZSB0ZW1wbGF0ZQogICAgfQogICAgZWxzZSB7CiAgICAgIC8vIGRhdGFiYXNlIHRlbXBsYXRlCiAgICB9CiAgfQoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2N1cnBhZ2UoKQogIHsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBoYXZlX3JlY29yZHMoKQogIHsKICB9CiAgCiAgcHVibGljIGZ1bmN0aW9uIGlzX3N0YXJ0KCkKICB7CiAgICAvLyBoYXZlIHdlIGdvdHRlbiBhbnkgcmVjb3JkcyB5ZXQKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBpc19lbmQoKQogIHsKICAgIC8vIGhhdmUgd2Ugb3V0cHV0IGFsbCB0aGUgcmVjb3Jkcy4KICB9Cn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_smarty.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLWZpbGUtc3R5bGU6bGludXg7IHRhYi13aWR0aDoyOyBpbmRlbnQtdGFicy1tb2RlOnQ7IGMtYmFzaWMtb2Zmc2V0OiAyOyAtKi0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgLT0gYWxsb3cgdXNlcnMgdG8gdXBsb2FkIHN0dWZmLCBhIHBzZXVkbyBmaWxlIG1hbmFnZXIiIG1vZHVsZQojIChjKSAyMDExIC0gUm9iZXJ0IENhbXBiZWxsIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TIC0gQ01TIE1hZGUgU2ltcGxlIGlzIChjKSAyMDA1IGJ5IFRlZCBLdWxwICh3aXNoeUBjbXNtYWRlc2ltcGxlLm9yZykKIyBUaGlzIHByb2plY3QncyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQojIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiMgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EKIyBPciByZWFkIGl0IG9ubGluZTogaHR0cDoJLy93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpjbGFzcyB1cGxvYWRzX3NtYXJ0eQp7CiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBpbml0KCkKICB7CiAgICAkc21hcnR5ID0gY21zbXMoKS0+R2V0U21hcnR5KCk7CiAgICAkc21hcnR5LT5yZWdpc3Rlcl9mdW5jdGlvbigndXBsb2Fkc19jcmVhdGVfdGxfZmlsZScsYXJyYXkoJ3VwbG9hZHNfc21hcnR5JywnY3JlYXRlX3RsX2ZpbGUnKSk7CiAgfQoKICAvKioKICAgKiBBIHBsdWdpbiB0byBjb3B5IGEgZmlsZSBpbnRvIHRoZSB1cGxvYWRzIG1vZHVsZQogICAqIGFuZCBnZW5lcmF0ZSBhIHRpbWVsaW1pdGVkIFVSTCB0byBpdAogICAqCiAgICogQHJldHVybnMgdXJsIG9yIGVycm9yIG1lc3NhZ2UKICAgKiBAcGFyYW0gc3JjID0gKHN0cmluZyxyZXF1aXJlZCkgYWJzb2x1dGUgc2VydmVyIGZpbGUgc3BlY2lmaWNhdGlvbiAKICAgKiBAcGFyYW0gY2F0ZWdvcnkgPSAocmVxdWlyZWQpIHVwbG9hZHMgY2F0ZWdvcnkgbmFtZSBvciBpbnRlZ2VyIGlkCiAgICogQHBhcmFtIHByZWZpeCA9IChib29sZWFuLG9wdGlvbmFsKSB3ZXRoZXIgZmlsZW5hbWVzIHNob3VsZCBiZSBwcmVmaXhlZCAtIGRlZmF1bHQgZmFsc2UKICAgKiBAcGFyYW0gZW1haWwgID0gKHN0cmluZyxvcHRpb25hbCkgVGllIHRoZSBkb3dubG9hZCB1cmwgdG8gdGhlIGVtYWlsIGFkZHJlc3Mgc3BlY2lmaWVkLgogICAqIEBwYXJhbSBob3VycyAgPSAoaW50LG9wdGlvbmFsKSAgbnVtYmVyIG9mIGhvdXJzIHRoZSBsaW5rIHdpbGwgYmUgdmFsaWQgZm9yCiAgICogQHBhcmFtIGRvd25sb2FkcyA9IChpbnQsb3B0aW9uYWwpIG1heCBudW1iZXIgb2YgZG93bmxvYWRzIGFsbG93ZWQgZm9yIHRoaXMgdXJsCiAgICovCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjcmVhdGVfdGxfZmlsZSgkcGFyYW1zLCYkc21hcnR5KQogIHsKICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1VwbG9hZHMnKTsKICAgIC8vIHNldCBkZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzCiAgICAkc3JjID0gJyc7CiAgICAkZW1haWwgPSAnJzsKICAgICRjYXRlZ29yeSA9ICcnOwogICAgJHByZWZpeCA9IFRSVUU7CiAgICAkaG91cnMgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCd0aW1lbGltaXRlZF9ob3VycycsMCk7CiAgICAkZG93bmxvYWRzID0gJG1vZC0+R2V0UHJlZmVyZW5jZSgndGltZWxpbWl0ZWRfZG93bmxvYWRzJywwKTsKCiAgICAvLyBnZXQgcGFyYW1zCiAgICBpZiggaXNzZXQoJHBhcmFtc1snc3JjJ10pICkKICAgICAgewoJJHNyYyA9IHRyaW0oJHBhcmFtc1snc3JjJ10pOyAgIAogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1snZW1haWwnXSkgKQogICAgICB7CgkkZW1haWwgPSB0cmltKCRwYXJhbXNbJ2VtYWlsJ10pOyAgIAogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1snY2F0ZWdvcnknXSkgKQogICAgICB7CgkkY2F0ZWdvcnkgPSB0cmltKCRwYXJhbXNbJ2NhdGVnb3J5J10pOwogICAgICB9CiAgICBpZiggaXNzZXQoJHBhcmFtc1sncHJlZml4J10pICkKICAgICAgewoJJHByZWZpeCA9IChpbnQpJHBhcmFtc1sncHJlZml4J107ICAgCiAgICAgIH0KICAgIGlmKCBpc3NldCgkcGFyYW1zWydob3VycyddKSApCiAgICAgIHsKCSRob3VycyA9IChpbnQpJHBhcmFtc1snaG91cnMnXTsgICAKICAgICAgfQogICAgaWYoIGlzc2V0KCRwYXJhbXNbJ2Rvd25sb2FkcyddKSApCiAgICAgIHsKCSRkb3dubG9hZHMgPSAoaW50KSRwYXJhbXNbJ2Rvd25sb2FkcyddOyAgIAogICAgICB9CgogICAgLy8gaW5pdGlhbCBjaGVja3MKICAgIGlmKCAhJHNyYyApCiAgICAgIHsKCWVjaG8gJ0VSUk9SIGluIGNyZWF0ZV90bF9maWxlOiAgc3JjIHBhcmFtZXRlciBub3Qgc3BlY2lmaWVkJzsKCXJldHVybjsKICAgICAgfQogICAgaWYoICEkY2F0ZWdvcnkgKQogICAgICB7CgllY2hvICdFUlJPUiBpbiBjcmVhdGVfdGxfZmlsZTogIG5vIGNhdGVnb3J5IHNwZWNpZmllZCc7CglyZXR1cm47CiAgICAgIH0KICAgICR1cGxvYWRzID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdVcGxvYWRzJyk7CiAgICBpZiggIWlzX29iamVjdCgkdXBsb2FkcykgKQogICAgICB7CgllY2hvICdFUlJPUiBpbiBjcmVhdGVfdGxfZmlsZTogIFVwbG9hZHMgbW9kdWxlIG5vdCBmb3VuZCc7CglyZXR1cm47CiAgICAgIH0KICAgIGlmKCAhZmlsZV9leGlzdHMoJHNyYykgKQogICAgICB7CgllY2hvICdFUlJPUiBpbiBjcmVhdGVfdGxfZmlsZTogIGZpbGUgc3BlY2lmaWVkIGluIHNyYyBwYXJhbSBub3QgZm91bmQnOwoJcmV0dXJuOwogICAgICB9CiAgICBpZiggJGhvdXJzIDwgMSB8fCAkZG93bmxvYWRzIDwgMSApCiAgICAgIHsKCWVjaG8gJ0VSUk9SIGluIGNyZWF0ZV90bF9maWxlOiAgSW52YWxpZCBob3VycyBvciBkb3dubG9hZCBsaW1pdCc7CiAgICAgIH0KCiAgICB0cnkKICAgICAgewoJLy8gbW92ZSB0aGUgZmlsZSBpbnRvIHRoZSB1cGxvYWRzIG1vZHVsZQoJJGFzc2lzdGFudCA9IG5ldyB1cGxvYWRzX3VwbG9hZGFzc2lzdGFudCgkc3JjLCRjYXRlZ29yeSk7ICAgCgkkYXNzaXN0YW50LT51c2VfcHJlZml4KCRwcmVmaXgpOwoJJHVwbG9hZF9pZCA9ICRhc3Npc3RhbnQtPmhhbmRsZV9maWxlKCk7CgoJLy8gbmVlZCBhIHRpbWUgbGltaXRlZCBVUkwKCSR1cmxrZXkgPSB1cGxvYWRzX3V0aWxzOjpjcmVhdGVfdGltZWxpbWl0ZWRfZW50cnkoJHVwbG9hZF9pZCwkZW1haWwsJGhvdXJzLCRkb3dubG9hZHMpOwoJJHVybCA9IHVwbG9hZHNfdXRpbHM6OmdldF90aW1lbGltaXRlZF91cmwoJHVybGtleSxGQUxTRSk7CgoJLy8gYW5kIHdlJ3JlIGRvbmUuCglpZiggaXNzZXQoJHBhcmFtc1snYXNzaWduJ10pICYmICR1cmwgKQoJICB7CgkgICAgJHNtYXJ0eS0+YXNzaWduKHRyaW0oJHBhcmFtc1snYXNzaWduJ10pLCR1cmwpOyAgICAgIAoJICAgIHJldHVybjsKCSAgfQoJcmV0dXJuICR1cmw7ICAgIAogICAgICB9CiAgICBjYXRjaCggRXhjZXB0aW9uICRlICkKICAgICAgewoJZWNobyAkZS0+R2V0TWVzc2FnZSgpOwogICAgICB9CiAgICAvLyBkb25lLgogIH0KCn0gLy8gZW5kIG9mIGNsYXNzCgojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_TextIndexer.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEZyb250RW5kVXNlcnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgbWFuYWdlbWVudCBvZiBmcm9udGVuZAojICB1c2VycywgYW5kIHRoZWlyIGxvZ2luIHByb2Nlc3Mgd2l0aGluIGEgQ01TIE1hZGUgU2ltcGxlIHBvd2VyZWQKIyAgd2Vic2l0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIHVwbG9hZHNfVGV4dEluZGV4ZXIgZXh0ZW5kcyB1cGxvYWRzX0luZGV4ZXJCYXNlCnsKICAgIHByaXZhdGUgJF9tYXhMaW5lcyA9IDUwMDA7CgogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRzcmMsJG9wdHMgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHNyYyk7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGNsZWFuX3dvcmQoJHdvcmQpCiAgICB7CiAgICAgICAgcmV0dXJuIHRyaW0oJHdvcmQsIl9cIlwhXEBcI1wkXCVcXlwmXCpcJ1xgXD1cKFwpXHtcfVxbXF1cdFxuXHJcMFx4MEIiKTsKICAgIH0KCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZmlsdGVyX3dvcmQoJHdvcmQpCiAgICB7CiAgICAgICAgaWYoICEkd29yZCApIHJldHVybiBGQUxTRTsKICAgICAgICBpZiggaXNfbnVtZXJpYygkd29yZCkgKSByZXR1cm4gRkFMU0U7CiAgICAgICAgaWYoIHN0cmxlbigkd29yZCkgPCBtYXgoMywkdGhpcy0+X21pbldvcmRMZW5ndGgpICkgcmV0dXJuIEZBTFNFOwogICAgICAgIGlmKCBzdHJsZW4oJHdvcmQpID4gJHRoaXMtPl9tYXhXb3JkTGVuZ3RoICkgcmV0dXJuIEZBTFNFOwogICAgICAgIHJldHVybiBUUlVFOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRfd29yZHMoKQogICAgewogICAgICAgIC8vIG9wZW4gdGhlIGZpbGUKICAgICAgICAkZmggPSBmb3BlbigkdGhpcy0+X2ZpbGVuYW1lLCdyJyk7CiAgICAgICAgJG9iaiA9ICR0aGlzOwoKICAgICAgICAkd29yZF9saXN0ID0gYXJyYXkoKTsKICAgICAgICAkbGluZV9udW0gPSAwOwogICAgICAgICRsaW5lc193aXRoX3RleHQgPSAwOwogICAgICAgICRvbGRfdGltZV9saW1pdCA9IChpbnQpaW5pX2dldCgnbWF4X2V4ZWN1dGlvbl90aW1lJyk7CiAgICAgICAgJHN0YXJ0X3RpbWUgPSBtaWNyb3RpbWUoKTsKICAgICAgICB3aGlsZSggIWZlb2YoJGZoKSApIHsKICAgICAgICAgICAgLy8gcmVhZCB0aGUgZmlsZSAob25lIGxpbmUgYXQgYSB0aW1lKQogICAgICAgICAgICBzZXRfdGltZV9saW1pdCgxMCk7CiAgICAgICAgICAgICRsaW5lID0gY2dlX3V0aWxzOjpmZ2V0cygkZmgpOwogICAgICAgICAgICAkbGluZV9udW0rKzsKICAgICAgICAgICAgJGxpbmUgPSB0cmltKCRsaW5lKTsKICAgICAgICAgICAgaWYoICEkbGluZSApIGNvbnRpbnVlOyAvLyBpZ25vcmUgYmxhbmsgbGluZXMKICAgICAgICAgICAgJGxpbmVzX3dpdGhfdGV4dCsrOwoKICAgICAgICAgICAgLy8gcGFyc2UgaW50byB3b3JkcwogICAgICAgICAgICAkd29yZHMgPSBwcmVnX3NwbGl0KCcvW1xzLCEuOzpcPygpKy1cL1xcXFxdKy8nLCAkbGluZSk7CiAgICAgICAgICAgIHVuc2V0KCRsaW5lKTsKICAgICAgICAgICAgJHdvcmRzID0gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCdjbGVhbl93b3JkJyksICR3b3Jkcyk7CiAgICAgICAgICAgICR3b3JkcyA9IGFycmF5X2ZpbHRlcigkd29yZHMsIGFycmF5KCR0aGlzLCdmaWx0ZXJfd29yZCcpKTsKCiAgICAgICAgICAgICR3b3JkX2xpc3QgPSBhcnJheV9tZXJnZSgkd29yZF9saXN0LCR3b3Jkcyk7CiAgICAgICAgICAgIHVuc2V0KCR3b3Jkcyk7CiAgICAgICAgICAgIGlmKCAkdGhpcy0+X3VuaXF1ZVdvcmRzT25seSApICR3b3JkX2xpc3QgPSBhcnJheV91bmlxdWUoJHdvcmRfbGlzdCk7CgogICAgICAgICAgICAkdGRpZmYgPSAoaW50KW1pY3JvdGltZV9kaWZmKCRzdGFydF90aW1lLG1pY3JvdGltZSgpKTsKICAgICAgICAgICAgaWYoICR0aGlzLT5fbWF4VGltZSAmJiAkdGRpZmYgPiAkdGhpcy0+X21heFRpbWUgKSBicmVhazsKICAgICAgICAgICAgaWYoICR0aGlzLT5fbWF4V29yZENvdW50ICYmIGNvdW50KCR3b3JkX2xpc3QpID49ICR0aGlzLT5fbWF4V29yZENvdW50ICkgYnJlYWs7CiAgICAgICAgICAgIGlmKCAkbGluZV9udW0gPiAkdGhpcy0+X21heExpbmVzKSBicmVhazsKICAgICAgICB9CiAgICAgICAgZmNsb3NlKCRmaCk7CiAgICAgICAgaWYoICRvbGRfdGltZV9saW1pdCA+IDAgKSBzZXRfdGltZV9saW1pdCgkb2xkX3RpbWVfbGltaXQpOwoKICAgICAgICByZXR1cm4gJHdvcmRfbGlzdDsKICAgIH0KfQojCiMgRU9GCiMKPz4=]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_uploadassistant.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEZyb250RW5kVXNlcnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsIAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgZnJvbnRlbmQKIyAgdXNlcnMsIGFuZCB0aGVpciBsb2dpbiBwcm9jZXNzIHdpdGhpbiBhIENNUyBNYWRlIFNpbXBsZSBwb3dlcmVkIAojICB3ZWJzaXRlLgojIAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0J3MgaG9tZXBhZ2UgaXM6IGh0dHA6Ly93d3cuY21zbWFkZXNpbXBsZS5vcmcKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojCiMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQojIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIwojIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdQTCwgdGhpcyBzb2Z0d2FyZSBpcyBkaXN0cmlidXRlZAojIGFzIGFuIGFkZG9uIG1vZHVsZSB0byBDTVMgTWFkZSBTaW1wbGUuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBzb2Z0d2FyZQojIGluIGFueSBOb24gR1BMIHZlcnNpb24gb2YgQ01TIE1hZGUgc2ltcGxlLCBvciBpbiBhbnkgdmVyc2lvbiBvZiBDTVMKIyBNYWRlIHNpbXBsZSB0aGF0IGRvZXMgbm90IGluZGljYXRlIGNsZWFybHkgYW5kIG9idmlvdXNseSBpbiBpdHMgYWRtaW4gCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9saWNlbnNlcy5odG1sI0dQTAojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiNFTkRfTElDRU5TRQoKY2xhc3MgdXBsb2Fkc191cGxvYWRhc3Npc3RhbnQKewogIHByaXZhdGUgJF9jYXRlZ29yeSA9IG51bGw7CiAgcHJpdmF0ZSAkX2RhdGEgPSBhcnJheSgpOwogIHByaXZhdGUgJF9kZXN0ZmlsZSA9IG51bGw7CgoKICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHNyYywkY2F0ZWdvcnlfaWQsJGRlc3RuYW1lID0gJycsJGtleSA9ICcnKQogIHsKICAgICR0aGlzLT5zZXRfYXV0bygpOwogICAgJHRoaXMtPnNldF9zcmMoJHNyYyk7CiAgICAkdGhpcy0+c2V0X2NhdGVnb3J5KCRjYXRlZ29yeV9pZCk7CiAgICAkdGhpcy0+c2V0X2Rlc3RuYW1lKCRkZXN0bmFtZSk7CiAgICAkdGhpcy0+c2V0X2tleSgka2V5KTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X3NyYygkc3JjKQogIHsKICAgICRtb2QgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1VwbG9hZHMnKTsKICAgIGlmKCAhJG1vZC0+X2lzVmFsaWRGaWxlbmFtZSgkc3JjKSApCiAgICAgIHsKCXRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdBdHRlbXB0IHRvIGluc2VydCBhbiBpbnZhbGlkIGZpbGUnKTsKICAgICAgfQogICAgaWYoICFmaWxlX2V4aXN0cygkc3JjKSApCiAgICAgIHsKCXRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdBdHRlbXB0IHRvIGluc2VydCBhIG5vbiBleGlzdGFudCBmaWxlJyk7CiAgICAgIH0KICAgICRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgIGlmKCBmaWxlc2l6ZSgkc3JjKSA+ICRjb25maWdbJ21heF91cGxvYWRfc2l6ZSddICkKICAgICAgewoJdGhyb3cgbmV3IFVwbG9hZHNFeGNlcHRpb24oJ0F0dGVtcHQgdG8gaW5zZXJ0IGEgZmlsZSB0aGF0IGlzIHRvbyBsYXJnZScpOwogICAgICB9CiAgICAkdGhpcy0+X2RhdGFbJ3NyYyddID0gJHNyYzsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2F1dG8oKQogIHsKICAgICR1cGxvYWRzID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdVcGxvYWRzJyk7CiAgICAkdGhpcy0+ZG9fd2F0ZXJtYXJrKCR1cGxvYWRzLT5HZXRQcmVmZXJlbmNlKCdhbGxvd3dhdGVybWFyaycpKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2NhdGVnb3J5KCRjYXRlZ29yeSkKICB7CiAgICAkZGIgPSBjbXNtcygpLT5HZXREYigpOwogICAgJGRiciA9ICcnOwogICAgaWYoIGlzX251bWVyaWMoJGNhdGVnb3J5KSApCiAgICAgIHsKCSRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8nOwoJJGRiciA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkY2F0ZWdvcnkpKTsKICAgICAgfQogICAgZWxzZQogICAgICB7CgkkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBXSEVSRSB1cGxvYWRfY2F0ZWdvcnlfbmFtZSA9ID8nOwoJJGRiciA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkY2F0ZWdvcnkpKTsKICAgICAgfQoKICAgIGlmKCAhJGRiciApCiAgICAgIHsKCXRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdJbnZhbGlkIGNhdGVnb3J5ICcuJGNhdGVnb3J5KTsKICAgICAgfQogICAgJHRoaXMtPl9jYXRlZ29yeSA9ICRkYnI7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHVzZV9wcmVmaXgoJGZsYWcgPSBUUlVFKQogIHsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsncHJlZml4J10pOwogICAgaWYoICRmbGFnICkKICAgICAgewoJJHRoaXMtPl9kYXRhWydwcmVmaXgnXSA9IGRlY2hleCh0aW1lKCkpLidfJzsKICAgICAgfQogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBhbGxvd19vdmVyd3JpdGUoJGZsYWcgPSBUUlVFKQogIHsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsnYWxsb3dfb3ZlcndyaXRlJ10pOwogICAgaWYoICRmbGFnICkgJHRoaXMtPl9kYXRhWydhbGxvd19vdmVyd3JpdGUnXSA9IFRSVUU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9zdW1tYXJ5KCR0ZXh0KQogIHsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsnc3VtbWFyeSddKTsKICAgIGlmKCAkdGV4dCApICR0aGlzLT5fZGF0YVsnc3VtbWFyeSddID0gdHJpbSgkdGV4dCk7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kZXNjKCR0ZXh0KQogIHsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsnZGVzY3JpcHRpb24nXSk7CiAgICBpZiggJHRleHQgKSAkdGhpcy0+X2RhdGFbJ2Rlc2NyaXB0aW9uJ10gPSB0cmltKCR0ZXh0KTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2F1dGhvcigkYXV0aG9yKQogIHsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsnYXV0aG9yJ10pOwogICAgaWYoICRhdXRob3IgKSAkdGhpcy0+X2RhdGFbJ2F1dGhvciddID0gdHJpbSgkdGV4dCk7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9rZXkoJGtleSkKICB7CiAgICB1bnNldCgkdGhpcy0+X2RhdGFbJ2tleSddKTsKICAgIGlmKCAka2V5ICkgJHRoaXMtPl9kYXRhWydrZXknXSA9IHRyaW0oJGtleSk7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIHNldF9kZXN0bmFtZSgkZGVzdG5hbWUpCiAgewogICAgdW5zZXQoJHRoaXMtPl9kYXRhWydkZXN0bmFtZSddKTsKICAgIGlmKCAkZGVzdG5hbWUgKQogICAgICB7CgkkZGVzdG5hbWUgPSBiYXNlbmFtZSgkZGVzdG5hbWUpOwoJJHVwbG9hZHMgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoJ1VwbG9hZHMnKTsKCWlmKCAhJHVwbG9hZHMtPl9pc1ZhbGlkRmlsZW5hbWUoJGRlc3RuYW1lKSApCgkgIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdDYW5ub3Qgc2V0IGRlc3RpbmF0aW9uIG5hbWUgdG8gYW4gaW52YWxpZCBuYW1lJyk7CgkkdGhpcy0+X2RhdGFbJ2Rlc3RuYW1lJ10gPSBiYXNlbmFtZSgkZGVzdG5hbWUpOwogICAgICB9CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGRvX3RodW1ibmFpbCgkZmxhZyA9IFRSVUUpCiAgewogICAgdW5zZXQoJHRoaXMtPl9kYXRhWyd0aHVtYm5haWwnXSk7CiAgICB1bnNldCgkdGhpcy0+X2RhdGFbJ2RvX3RodW1ibmFpbCddKTsKICAgIGlmKCAkZmxhZyApICR0aGlzLT5fZGF0YVsnZG9fdGh1bWJuYWlsJ10gPSBUUlVFOwogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBzZXRfdGh1Ym5haWwoJHRodW1ibmFpbCkKICB7CiAgICB1bnNldCgkdGhpcy0+X2RhdGFbJ3RodW1ibmFpbCddKTsKICAgIHVuc2V0KCR0aGlzLT5fZGF0YVsnZG9fdGh1bWJuYWlsJ10pOwogICAgaWYoICFmaWxlX2V4aXN0cygkdGh1bWJuYWlsKSApCiAgICAgIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdUaHVtYm5haWwgRmlsZSBkb2VzIG5vdCBleGlzdDogJy4kdGh1bWJuYWlsKTsKCiAgICAkdXBsb2FkcyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnVXBsb2FkcycpOwogICAgaWYoICEkdXBsb2Fkcy0+X2lzVmFsaWRGaWxlbmFtZSgkdGh1bWJuYWlsKSApCiAgICAgIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdUaHVtYm5haWwgZmlsZSBpcyBpbnZhbGlkOiAnLiR0aHVtYm5haWwpOwoKICAgIGlmKCAkdGh1bWJuYWlsICkgJHRoaXMtPl9kYXRhWyd0aHVtYm5haWwnXSA9ICR0aHVtYm5haWw7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGRvX3dhdGVybWFyaygkZmxhZyA9IFRSVUUpCiAgewogICAgdW5zZXQoJHRoaXMtPl9kYXRhWydkb193YXRlcm1hcmsnXSk7CiAgICBpZiggJGZsYWcgKSAkdGhpcy0+X2RhdGFbJ2RvX3dhdGVybWFyayddID0gVFJVRTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gc2V0X2ZpZWxkKCRrZXksJHZhbHVlKQogIHsKICAgIGlmKCAhJGtleSApIHJldHVybjsKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9kYXRhWydmaWVsZHMnXSkgKQogICAgICB7CgkkdGhpcy0+X2RhdGFbJ2ZpZWxkcyddID0gYXJyYXkoKTsKICAgICAgfQogICAgaWYoIGlzX251bGwoJHZhbHVlKSApCiAgICAgIHsKCXVuc2V0KCR0aGlzLT5fZGF0YVsnZmllbGRzJ11bJGtleV0pOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKCSR0aGlzLT5fZGF0YVsnZmllbGRzJ11bJGtleV0gPSB2YWx1ZTsKICAgICAgfQogIH0KCgogIHB1YmxpYyBmdW5jdGlvbiBlcmFzZV9maWVsZCgka2V5KQogIHsKICAgIGlmKCAhJGtleSApIHJldHVybjsKICAgIGlmKCAhaXNfYXJyYXkoJHRoaXMtPl9kYXRhWydmaWVsZHMnXSkgKSByZXR1cm47CiAgICB1bnNldCgkdGhpcy0+X2RhdGFbJ2ZpZWxkcyddWyRrZXldKTsKICB9CgoKICBwdWJsaWMgZnVuY3Rpb24gZ2V0X2Rlc3RmaWxlKCkKICB7CiAgICBpZiggJHRoaXMtPl9kZXN0ZmlsZSApIHJldHVybiAkdGhpcy0+X2Rlc3RmaWxlOwoKICAgIGlmKCAhJHRoaXMtPl9jYXRlZ29yeSApIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCdDYW5ub3QgR2V0IGEgZGVzdGluYXRpb24gZmlsZSBuYW1lIHdpdGhvdXQgYSBwcm9wZXIgY2F0ZWdvcnknKTsKICAgICR1cGxvYWRzID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdVcGxvYWRzJyk7CiAgICAkZGlyID0gJHVwbG9hZHMtPl9jYXRlZ29yeVBhdGgoJHRoaXMtPl9jYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXSk7CgogICAgJGRlc3RuYW1lID0gYmFzZW5hbWUoJHRoaXMtPl9kYXRhWydzcmMnXSk7CiAgICBpZiggaXNzZXQoJHRoaXMtPl9kYXRhWydkZXN0bmFtZSddKSApCiAgICAgIHsKCSRkZXN0bmFtZSA9ICR0aGlzLT5fZGF0YVsnZGVzdG5hbWUnXTsKICAgICAgfQogICAgaWYoIGlzc2V0KCR0aGlzLT5fZGF0YVsncHJlZml4J10pICkKICAgICAgewoJJGRlc3RuYW1lID0gJHRoaXMtPl9kYXRhWydwcmVmaXgnXS4kZGVzdG5hbWU7CiAgICAgIH0KCiAgICAkZGVzdG5hbWUgPSAKICAgICAgcHJlZ19yZXBsYWNlKCcvW15hLXpBLVowLTlcLlwkXCVcJ1xgXC1cQFx7XH1cflwhXCNcKFwpXCZcX1xeXS8nLCAnJywKCQkgICBzdHJfcmVwbGFjZSAoYXJyYXkgKCcgJywgJyUyMCcpLCBhcnJheSAoJ18nLCAnXycpLCAkZGVzdG5hbWUpKTsKICAgIAogICAgJHRoaXMtPl9kZXN0ZmlsZSA9IGNtc19qb2luX3BhdGgoJGRpciwkZGVzdG5hbWUpOwogICAgcmV0dXJuICR0aGlzLT5fZGVzdGZpbGU7CiAgfQoKCiAgcHVibGljIGZ1bmN0aW9uIGhhbmRsZV9maWxlKCkKICB7CiAgICAkdXBsb2FkcyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnVXBsb2FkcycpOwoKICAgIC8vIHZhbGlkYXRlIHRoZSBkYXRhLgogICAgaWYoICFpc3NldCgkdGhpcy0+X2RhdGFbJ3NyYyddKSApCiAgICAgIHsKCXRocm93IFVwbG9hZHNFeGNlcHRpb24oJ0ludmFsaWQgYXR0cmlidXRlcy4uLiBubyBzb3VyY2UgZmlsZSBzZXQnKTsKICAgICAgfQogICAgaWYoICEkdGhpcy0+X2NhdGVnb3J5ICkKICAgICAgewoJdGhyb3cgVXBsb2Fkc0V4Y2VwdGlvbignSW52YWxpZC9OdWxsIHVwbG9hZCBjYXRlZ29yeSBzcGVjaXJpZWQnKTsKICAgICAgfQogICAgaWYoICFpc3NldCgkdGhpcy0+X2RhdGFbJ3N1bW1hcnknXSkgKQogICAgICB7Cgkkc3VtYW1yeSA9IGJhc2VuYW1lKCR0aGlzLT5fZGF0YVsnc3JjJ10pOwoJJHRoaXMtPnNldF9zdW1tYXJ5KCRzdW1tYXJ5KTsKICAgICAgfQogICAgaWYoICFpc3NldCgkdGhpcy0+X2RhdGFbJ2Rlc2NyaXB0aW9uJ10pICkKICAgICAgewoJJHRoaXMtPl9kYXRhWydkZXNjcmlwdGlvbiddID0gJyc7CiAgICAgIH0KICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9kYXRhWydrZXknXSkgKQogICAgICB7CgkkdGhpcy0+X2RhdGFbJ2tleSddID0gJyc7CiAgICAgIH0KICAgIGlmKCAhaXNzZXQoJHRoaXMtPl9kYXRhWydhdXRob3InXSkgKQogICAgICB7CgkvLyBhdXRob3IgaGFzbid0IGJlZW4gcHJldmlvdXNseSBzZXQuCgkvLyB0cnkgdG8gZmluZCBzb21ldGhpbmcgd2UgY2FuIHVzZS4KCWdsb2JhbCAkQ01TX0FETUlOX1BBR0U7CgkkYXV0aG9yID0gJ0Fub255bW91cyc7CglpZiggaXNzZXQoJENNU19BRE1JTl9QQUdFKSApCgkgIHsKCSAgICAvLyBpdCdzIGFuIGFkbWluIGFjdGlvbi4uLiBnZXQgdGhlIGN1cnJlbnRseSBsb2dnZWQgaW4gdXNlcm5hbWUKCSAgICAkdWlkID0gZ2V0X3VzZXJpZChGQUxTRSk7CgkgICAgaWYoICR1aWQgKQoJICAgICAgewoJCSR1c2Vyb3BzID0gY21zbXMoKS0+R2V0VXNlck9wZXJhdGlvbnMoKTsKCQkkdXNlciA9ICR1c2Vyb3BzLT5Mb2FkVXNlckJ5SWQoJHVpZCk7CgkJaWYoICR1c2VyICkKCQkgIHsKCQkgICAgJGF1dGhvciA9ICR1c2VyLT51c2VybmFtZTsKCQkgIH0KCSAgICAgIH0KCSAgfQoJZWxzZQoJICB7CgkgICAgJGZldSA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnRnJvbnRFbmRVc2VycycpOwoJICAgIGlmKCAkZmV1ICkKCSAgICAgIHsKCQkkdG1wID0gJGZldS0+TG9nZ2VkSW5OYW1lKCk7CgkJaWYoICR0bXAgKSAkYXV0aG9yID0gJHRtcDsKCSAgICAgIH0KCSAgfQoKCSR0aGlzLT5fZGF0YVsnYXV0aG9yJ10gPSAkYXV0aG9yOwogICAgICB9CgogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICRkZXN0ZmlsZSA9ICR0aGlzLT5nZXRfZGVzdGZpbGUoKTsKICAgICRleGlzdGluZ19maWxlaWQgPSBudWxsOwogICAgaWYoIGZpbGVfZXhpc3RzKCRkZXN0ZmlsZSkgJiYgIWlzc2V0KCR0aGlzLT5fZGF0YVsnYWxsb3dfb3ZlcndyaXRlJ10pICkKICAgICAgewoJLy8gbm90IGFsbG93aW5nIG92ZXJ3cml0ZQoJdGhyb3cgbmV3IFVwbG9hZHNFeGNlcHRpb24oJ0Rlc3RpbmF0aW9uIEZpbGUgRXhpc3RzOiAnLiRkZXN0ZmlsZSk7CiAgICAgIH0KICAgIGVsc2UgaWYoIGZpbGVfZXhpc3RzKCRkZXN0ZmlsZSkgKQogICAgICB7CgkvLyBhbGxvd2luZyBvdmVyd3JpdGUuLi4gdHJ5IHRvIGZpbmQgYSBmaWxlIGlkLgoJJHF1ZXJ5ID0gJ1NFTEVDVCB1cGxvYWRfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgCiAgICAgICAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9uYW1lID0gPyBBTkQgdXBsb2FkX2NhdGVnb3J5X2lkID0gPyc7CgkkZXhpc3RpbmdfZmlsZWlkID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGJhc2VuYW1lKCRkZXN0bmFtZSksJHRoaXMtPl9jYXRlZ29yeVsndXBsb2Fkc19jYXRlZ29yeV9pZCddKTsKICAgICAgfQoKICAgIC8vIHNlZSBpZiB3ZSdyZSBnb25uYSB3YXRlcm1hcmsKICAgICRfY3JlYXRlZCA9IGFycmF5KCk7CiAgICAkY2FuX3VubGluayA9IEZBTFNFOwogICAgJHNyY2ZpbGUgPSAkdGhpcy0+X2RhdGFbJ3NyYyddOwogICAgaWYoIGlzc2V0KCR0aGlzLT5fZGF0YVsnZG9fd2F0ZXJtYXJrJ10pICkKICAgICAgewoJJGRuID0gZGlybmFtZSgkZGVzdGZpbGUpOwoJJGZuID0gYmFzZW5hbWUoJGRlc3RmaWxlKTsKCSR3bW5hbWUgPSBjbXNfam9pbl9wYXRoKCRkbiwnd21fJywkZm4pOwoJJHdtb2JqID0gY2dlX3NldHVwOjpnZXRfd2F0ZXJtYXJrZXIoKTsKCSRyZXMgPSAkd21vYmotPmNyZWF0ZV93YXRlcm1hcmtlZF9pbWFnZSgkc3JjZmlsZSwkd21uYW1lKTsKCglpZiggJHJlcyAhPT0gRkFMU0UgKQoJICB7CgkgICAgJGNhbl91bmxpbmsgPSBUUlVFOwoJICAgICRzcmNmaWxlID0gJHdtbmFtZTsKCSAgICAkX2NyZWF0ZWRbXSA9ICRzcmNmaWxlOwoJICB9CiAgICAgIH0KCiAgICAvLyBzZWUgaWYgd2UncmUgZ29ubmEgdGh1bWJuYWlsLgogICAgJHRodW1iX25hbWUgPSAnJzsKICAgIGlmKCBpc3NldCgkdGhpcy0+X2RhdGFbJ2RvX3RodW1ibmFpbCddKSApCiAgICAgIHsKCSR0aHVtYl9uYW1lID0gYmFzZW5hbWUoJGRlc3RuYW1lKTsKCSRkbiA9IGRpcm5hbWUoJGRlc3RuYW1lKTsKCSR0aHVtYmZpbGUgPSBjbXNfam9pbl9wYXRoKCRkbiwndGh1bWJfJy4kdGh1bWJfbmFtZSk7CgkKCSR1cGxvYWRzLT5pbWFnZVRyYW5zZm9ybSgkc3JjZmlsZSwkdGh1bWJmaWxlKTsKCSRfY3JlYXRlZFtdID0gJHRodW1iZmlsZTsKICAgICAgfQogICAgZWxzZSBpZiggaXNzZXQoJHRoaXMtPl9kYXRhWyd0aHVtYm5haWwnXSkgKQogICAgICB7CgkkdGh1bWJfbmFtZSA9IGJhc2VuYW1lKCRkZXN0bmFtZSk7CgkkZG4gPSBkaXJuYW1lKCRkZXN0bmFtZSk7CgkkdGh1bWJmaWxlID0gY21zX2pvaW5fcGF0aCgkZG4sJ3RodW1iXycuJHRodW1iX25hbWUpOwoJCglAY29weSgkdGhpcy0+X2RhdGFbJ3RodW1ibmFpbCddLCR0aHVtYmZpbGUpOwoJJF9jcmVhdGVkW10gPSAkdGh1bWJmaWxlOwogICAgICB9CiAgICAKCiAgICAvLyBkbyB0aGUgY29weS4KICAgIEB1bmxpbmsoJGRlc3RmaWxlKTsKICAgIEBjb3B5KCRzcmNmaWxlLCRkZXN0ZmlsZSk7CiAgICAkX2NyZWF0ZWRbXSA9ICRkZXN0ZmlsZTsKCiAgICAvLyBkbyB0aGUgaW5zZXJ0IG9yIHVwZGF0ZQogICAgJGRiciA9ICcnOwogICAgaWYoICEkZXhpc3RpbmdfZmlsZWlkICkKICAgICAgewoJJGV4aXN0aW5nX2ZpbGVpZCA9ICRkYi0+R2VuSWQoY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19zZXEnKTsKCgkvLyBpbnNlcnQKCSRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMKICAgICAgICAgICAgICAgICAgKHVwbG9hZF9pZCx1cGxvYWRfY2F0ZWdvcnlfaWQsdXBsb2FkX25hbWUsdXBsb2FkX2F1dGhvciwKICAgICAgICAgICAgICAgICAgIHVwbG9hZF9zdW1tYXJ5LHVwbG9hZF9kZXNjcmlwdGlvbix1cGxvYWRfaXAsdXBsb2FkX3NpemUsCiAgICAgICAgICAgICAgICAgICB1cGxvYWRfZGF0ZSwgdXBsb2FkX2tleSwgdXBsb2FkX3RodW1ibmFpbCkKICAgICAgICAgICAgICAgICAgVkFMVUVTICg/LD8sPyw/LD8sPyw/LD8sTk9XKCksPyw/KSc7CgkkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSwKCQkJICAgIGFycmF5KCRleGlzdGluZ19maWxlaWQsCgkJCQkgICR0aGlzLT5fY2F0ZWdvcnlbJ3VwbG9hZF9jYXRlZ29yeV9pZCddLAoJCQkJICBiYXNlbmFtZSgkZGVzdGZpbGUpLAoJCQkJICAkdGhpcy0+X2RhdGFbJ2F1dGhvciddLAoJCQkJICAkdGhpcy0+X2RhdGFbJ3N1bW1hcnknXSwKCQkJCSAgJHRoaXMtPl9kYXRhWydkZXNjaXB0aW9uJ10sCgkJCQkgIGNnZV91dGlsczo6Z2V0X3JlYWxfaXAoKSwKCQkJCSAgZmlsZXNpemUoJHRoaXMtPl9kYXRhWydzcmMnXSksCgkJCQkgICR0aGlzLT5fZGF0YVsna2V5J10sCgkJCQkgICR0aHVtYl9uYW1lKSk7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewoJLy8gdXBkYXRlLi4uIGRlbGV0ZSBjdXN0b20gZmllbGRzLgoJJHF1ZXJ5ID0gJ0RFTEVURSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgV0hFUkUgdXBsb2FkX2lkID0gPyc7CgkkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkZXhpc3RpbmdfZmlsZWlkKSk7CgoJJHF1ZXJ5ID0gJ1VQREFURSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMKICAgICAgICAgICAgICAgICAgU0VUIHVwbG9hZF9uYW1lID0gPywgdXBsb2FkX2F1dGhvciA9ID8sCiAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRfc3VtbWFyeSA9ID8sIHVwbG9hZF9kZXNjcmlwdGlvbiA9ID8sCiAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRfaXAgPSA/LCB1cGxvYWRfc2l6ZSA9ID8sIHVwbG9hZF9kYXRlID0gTk9XKCksCiAgICAgICAgICAgICAgICAgICAgICB1cGxvYWRfa2V5ID0gPywgdXBsb2FkX3RodW1ibmFpbCA9ID8KICAgICAgICAgICAgICAgICBXSEVSRSB1cGxvYWRfaWQgPSA/JzsKCSRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LAoJCQkgICAgYXJyYXkoYmFzZW5hbWUoJGRlc3RmaWxlKSwKCQkJCSAgJHRoaXMtPl9kYXRhWydhdXRob3InXSwKCQkJCSAgJHRoaXMtPl9kYXRhWydzdW1tYXJ5J10sCgkJCQkgICR0aGlzLT5fZGF0YVsnZGVzYyddLAoJCQkJICBjZ2VfYXJyYXk6OmdldF9yZWFsX2lwKCksCgkJCQkgIGZpbGVzaXplKCRkZXN0ZmlsZSksCgkJCQkgICR0aGlzLT5fZGF0YVsna2V5J10sCgkJCQkgICR0aHVtYl9uYW1lLAoJCQkJICAkZXhpc3RpbmdfZmlsZWlkKSk7CiAgICAgIH0KCiAgICBpZiggISRkYnIgKQogICAgICB7Cglmb3JlYWNoKCAkX2NyZWF0ZWQgYXMgJG9uZSApIEB1bmxpbmsoJG9uZSk7Cgl0aHJvdyBuZXcgVXBsb2Fkc0V4Y2VwdGlvbignRGF0YWJhc2Ugb3BlcmF0aW9uIGZhaWxlZDogJy4kZGItPnNxbC4nIC0tICcuJGRiLT5FcnJvck1zZygpKTsKICAgICAgfQoKICAgICRmaWVsZHMgPSAnJzsKICAgIHsKICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCBpZCxuYW1lIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkZGVmcyBPUkRFUiBCWSBpb3JkZXInOwogICAgICAkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwogICAgICBpZiggIWlzX2FycmF5KCR0bXApICkKICAgICAgJGZpZWxkcyA9IGNnZV9hcnJheTo6dG9faGFzaCgkdG1wLCduYW1lJyk7CiAgICB9CgogICAgaWYoIGlzX2FycmF5KCRmaWVsZHMpICYmIGlzc2V0KCR0aGlzLT5fZGF0YVsnZmllbGRzJ10pICkKICAgICAgewoJLy8gZG8gdGhlIGN1c3RvbSBmaWVsZHMuCgkkaXF1ZXJ5ID0gJ0lOU0VSVCBJTlRPICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMgCiAgICAgICAgICAgICAgICAgKHVwbG9hZF9pZCwgZmxkX2lkLCB2YWx1ZSkgVkFMVUVTICg/LD8sPyknOwoJZm9yZWFjaCggJHRoaXMtPl9kYXRhWydmaWVsZHMnXSBhcyAka2V5ID0+ICR2YWx1ZSApCgkgIHsKCSAgICBpZiggIWlzc2V0KCRmaWVsZHNbJGtleV0pICkgY29udGludWU7CgkgICAgJGZpZWxkX2lkID0gJGZpZWxkc1ska2V5XVsnaWQnXTsKCSAgICAkZGItPkV4ZWN1dGUoJGlxdWVyeSxhcnJheSgkZXhpc3RpbmdfZmlsZWlkLCRpZWxkX2lkLCR2YWx1ZSkpOwoJICB9CiAgICAgIH0KCiAgICAvLyBhZGQgc29tZXRoaW5nIHRvIHRoZSBhdWRpdCBsb2cuCiAgICBhdWRpdCgkZXhpc3RpbmdfZmlsZWlkLCR1cGxvYWRzLT5HZXROYW1lKCksJ1VwbG9hZGVkIGZpbGUgJy5iYXNlbmFtZSgkZGVzdGZpbGUpKTsKCiAgICAvLyBhbmQgd2UncmUgZG9uZS4uLgogICAgcmV0dXJuICRleGlzdGluZ19maWxlaWQ7CiAgfQoKfSAvLyBlbmQgb2YgY2xhc3MKCiMKIyBFT0YKIwo/Pg==]]></data>
	</file>
	<file>
	  <filename>/lib/class.uploads_utils.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IEZyb250RW5kVXNlcnMgKGMpIDIwMDggYnkgUm9iZXJ0IENhbXBiZWxsCiMgICAgICAgICAoY2FsZ3V5MTAwMEBjbXNtYWRlc2ltcGxlLm9yZykKIyAgQW4gYWRkb24gbW9kdWxlIGZvciBDTVMgTWFkZSBTaW1wbGUgdG8gYWxsb3cgbWFuYWdlbWVudCBvZiBmcm9udGVuZAojICB1c2VycywgYW5kIHRoZWlyIGxvZ2luIHByb2Nlc3Mgd2l0aGluIGEgQ01TIE1hZGUgU2ltcGxlIHBvd2VyZWQKIyAgd2Vic2l0ZS4KIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIENNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVGhpcyBwcm9qZWN0cyBob21lcGFnZSBpczogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmNsYXNzIHVwbG9hZHNfdXRpbHMKewogICAgcHJpdmF0ZSBzdGF0aWMgJF91cGxvYWRfZGF0YV9jYWNoZTsKICAgIHByaXZhdGUgc3RhdGljICRfY2F0ZWdvcmllczsKCiAgICAvLyB0aGlzIGlzIGEgc3RhdGljIGNsYXNzLi4uIGNhbid0IGJlIGNvbnN0cnVjdGVkLgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkge30KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNhY2hlX3VwbG9hZHNfZnJvbV9saXN0KCRsaXN0KQogICAgewogICAgICAgIC8vIGNsZWFuIHRoZSBsaXN0CiAgICAgICAgJHRtcCA9IGFycmF5KCk7CiAgICAgICAgZm9yZWFjaCggJGxpc3QgYXMgJG9uZSApIHsKICAgICAgICAgICAgJG9uZSA9IChpbnQpJG9uZTsKICAgICAgICAgICAgaWYoICRvbmUgPCAxICkgY29udGludWU7CiAgICAgICAgICAgIGlmKCBpbl9hcnJheSgkb25lLCR0bXApICkgY29udGludWU7CiAgICAgICAgICAgIGlmKCBpc3NldChzZWxmOjokX3VwbG9hZF9kYXRhX2NhY2hlWyRvbmVdKSApIGNvbnRpbnVlOwogICAgICAgICAgICAkdG1wW10gPSAkb25lOwogICAgICAgIH0KCiAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAkcXVlcnkgPSAnU0VMRUNUICogRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgV0hFUkUgdXBsb2FkX2lkIElOICgnLmltcGxvZGUoJywnLCR0bXApLicpJzsKICAgICAgICAkcmVjcyA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKICAgICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfdXBsb2FkX2RhdGFfY2FjaGUpICkgc2VsZjo6JF91cGxvYWRfZGF0YV9jYWNoZSA9IGFycmF5KCk7CiAgICAgICAgaWYoICFpc19hcnJheSgkcmVjcykgfHwgY291bnQoJHJlY3MpID09IDAgKSByZXR1cm47CiAgICAgICAgZm9yZWFjaCggJHJlY3MgYXMgJHJvdyApIHsKICAgICAgICAgICAgc2VsZjo6JF91cGxvYWRfZGF0YV9jYWNoZVskcm93Wyd1cGxvYWRfaWQnXV0gPSAkcm93OwogICAgICAgIH0KICAgIH0KCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlbGV0ZV91cGxvYWRfY2FjaGUoKQogICAgewogICAgICAgIHNlbGY6OiRfdXBsb2FkX2RhdGFfY2FjaGUgPSBhcnJheSgpOwogICAgfQoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X3VwbG9hZF9kZXRhaWxzKCR1cGxvYWRfaWQpCiAgICB7CiAgICAgICAgJHVwbG9hZF9pZCA9IChpbnQpJHVwbG9hZF9pZDsKICAgICAgICBpZiggJHVwbG9hZF9pZCA8IDEgKSB0aHJvdyBuZXcgVXBsb2Fkc0V4Y2VwdGlvbigndXBsb2Fkc191dGlsczo6Z2V0X3VwbG9hZF9kZXRhaWxzIC0gSW52YWxpZCB1cGxvYWQgaWQ6ICcuJHVwbG9hZF9pZCk7CgogICAgICAgIGlmKCAhaXNzZXQoc2VsZjo6JF91cGxvYWRfZGF0YV9jYWNoZVskdXBsb2FkX2lkXSkgKSB7CiAgICAgICAgICAgIC8vIG5vdCBpbiBjYWNoZS4KICAgICAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKICAgICAgICAgICAgJHF1ZXJ5ID0gJ1NFTEVDVCAqIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9pZCA9ID8nOwogICAgICAgICAgICAkcm93ID0gJGRiLT5HZXRSb3coJHF1ZXJ5LGFycmF5KCR1cGxvYWRfaWQpKTsKICAgICAgICAgICAgaWYoICEkcm93ICkgdGhyb3cgbmV3IFVwbG9hZHNFeGNlcHRpb24oJ3VwbG9hZHNfdXRpbHM6OmdldF91cGxvYWRfZGV0YWlscyAtIFVwbG9hZCAnLiR1cGxvYWRfaWQuJyBub3QgZm91bmQnKTsKCiAgICAgICAgICAgIGlmKCAhaXNfYXJyYXkoc2VsZjo6JF91cGxvYWRfZGF0YV9jYWNoZSkgKSBzZWxmOjokX3VwbG9hZF9kYXRhX2NhY2hlID0gYXJyYXkoKTsKICAgICAgICAgICAgc2VsZjo6JF91cGxvYWRfZGF0YV9jYWNoZVskcm93Wyd1cGxvYWRfaWQnXV0gPSAkcm93OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHNlbGY6OiRfdXBsb2FkX2RhdGFfY2FjaGVbJHVwbG9hZF9pZF07CiAgICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGNyZWF0ZV90aW1lbGltaXRlZF9lbnRyeSgkdXBsb2FkX2lkLCRlbWFpbCwkaG91cnMgPSBudWxsLCRkb3dubG9hZHMgPSBudWxsKQogIHsKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkbm93ID0gJGRiLT5EYlRpbWVzdGFtcCh0aW1lKCkpOwogICAgJHVwbG9hZF9pZCA9IChpbnQpJHVwbG9hZF9pZDsKICAgICRob3VycyA9IChpbnQpJGhvdXJzOwogICAgJGRvd25sb2FkcyA9IChpbnQpJGRvd25sb2FkczsKCiAgICAvLyBnZXQgdGhlIHVwbG9hZCBpbmZvcm1hdGlvbgogICAgJHVwbG9hZCA9IHNlbGY6OmdldF91cGxvYWRfZGV0YWlscygkdXBsb2FkX2lkKTsKCiAgICAkZXhwaXJlcyA9IG51bGw7CiAgICBpZiggJGhvdXJzICkgewogICAgICAkaG91cnMgPSAoaW50KSRob3VyczsKICAgICAgJGV4cGlyZXMgPSAkZGItPkRiVGltZVN0YW1wKHN0cnRvdGltZSgnKycuJGhvdXJzLicgaG91cnMnKSk7CiAgICB9CiAgICAkdXJsa2V5ID0gc3Vic3RyKHN0cl9zaHVmZmxlKG1kNSh0aW1lKCkuJHVwbG9hZF9pZC4kdXBsb2FkWyd1cGxvYWRfbmFtZSddLiRub3cuJGVtYWlsLiRleHBpcmVzKSksMCwxNik7CgogICAgJGRiciA9ICcnOwogICAgaWYoICRob3VycyA+IDAgKSB7CiAgICAgICRxdWVyeSA9ICdJTlNFUlQgSU5UTyAnLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfdGltZWxpbWl0CiAgICAgICAgICAgICAgICAodXBsb2FkX2lkLGVtYWlsLHVybF9rZXksY3JlYXRlZCxleHBpcmVzLG1heF9kb3dubG9hZHMpCiAgICAgICAgICAgICAgICBWQUxVRVMgKD8sPyw/LCRub3csJGV4cGlyZXMsPykiOwogICAgICAkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSxhcnJheSgkdXBsb2FkX2lkLCRlbWFpbCwkdXJsa2V5LCRkb3dubG9hZHMpKTsKICAgIH0KICAgIGVsc2UgewogICAgICAkcXVlcnkgPSAnSU5TRVJUIElOVE8gJy5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX3RpbWVsaW1pdAogICAgICAgICAgICAgICAgKHVwbG9hZF9pZCxlbWFpbCx1cmxfa2V5LGNyZWF0ZWQsbWF4X2Rvd25sb2FkcykKICAgICAgICAgICAgICAgIFZBTFVFUyAoPyw/LD8sJG5vdyw/KSI7CiAgICAgICRkYnIgPSAkZGItPkV4ZWN1dGUoJHF1ZXJ5LGFycmF5KCR1cGxvYWRfaWQsJGVtYWlsLCR1cmxrZXksJGRvd25sb2FkcykpOwogICAgfQogICAgaWYoICEkZGJyICkJdGhyb3cgbmV3IFVwbG9hZHNFeGNlcHRpb24oJ1Byb2JsZW0gaW5zZXJ0aW5nIHRpbWUgbGltaXRlZCBpbmZvIGludG8gZGF0YWJhc2UnKTsKCiAgICByZXR1cm4gJHVybGtleTsKICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRfY2xlYW5fdGxfdXJsKCR1cGxvYWRfa2V5KQogIHsKICAgICAgcmV0dXJuIHNwcmludGYoJ3VwbG9hZHMvbGltaXRlZC8lcycsJHVwbG9hZF9rZXkpOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfdGltZWxpbWl0ZWRfdXJsKCR1cmxfa2V5LCRjaGVja3ZhbGlkID0gVFJVRSkKICB7CiAgICBpZiggISR1cmxfa2V5ICkgdGhyb3cgbmV3IFVwbG9hZHNFeGNlcHRpb24oJ3VwbG9hZHNfdXRpbHM6OmdldF90aW1lbGltaXRlZF91cmwgLSBFbXB0eSB1cmwga2V5IHNwZWNpZmllZCcpOwogICAgJGRiID0gY21zbXMoKS0+R2V0RGIoKTsKCiAgICBpZiggJGNoZWNrdmFsaWQgKSB7CiAgICAgICRxdWVyeSA9ICdTRUxFQ1QgKiBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc190aW1lbGltaXQKICAgICAgICAgICAgICAgIFdIRVJFIHVybF9rZXkgPSA/IEFORCAoKGV4cGlyZXMgPiBOT1coKSkgT1IgKGV4cGlyZXMgSVMgTlVMTCkpJzsKICAgICAgJHJvdyA9ICRkYi0+R2V0Um93KCRxdWVyeSxhcnJheSgkdXJsX2tleSkpOwogICAgICBpZiggISRyb3cgKSByZXR1cm47CiAgICAgICRmaWxlX2lkID0gJHJvd1sndXBsb2FkX2lkJ107CgogICAgICAkcXVlcnkgPSAnU0VMRUNUIGNvdW50KGZpbGVfaWQpIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2Rvd25sb2FkcwogICAgICAgICAgICAgICAgV0hFUkUgZmlsZV9pZCA9ID8gQU5EIHVybF9rZXkgPSA/JzsKICAgICAgJGNvdW50ID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRmaWxlX2lkLCR1cmxfa2V5KSk7CiAgICAgIGlmKCAkcm93WydtYXhfZG93bmxvYWRzJ10gPiAwICYmICRjb3VudCA+PSAkcm93WydtYXhfZG93bmxvYWRzJ10gKSByZXR1cm47CiAgICB9CgogICAgJGRmbHRwYWdlID0gY21zbXMoKS0+R2V0Q29udGVudE9wZXJhdGlvbnMoKS0+R2V0RGVmYXVsdENvbnRlbnQoKTsKICAgICR1cGxvYWRzID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdVcGxvYWRzJyk7CiAgICAkdXJsID0gJHVwbG9hZHMtPkNyZWF0ZVVSTCgkaWQsJ2dldGZpbGUnLCRkZmx0cGFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5KCd1cmxfa2V5Jz0+JHVybF9rZXkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFsc2UsIHNlbGY6Ol9nZXRfY2xlYW5fdGxfdXJsKCR1cmxfa2V5KSk7CiAgICByZXR1cm4gJHVybDsKICB9CgoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRfY2xlYW5fdXJsKCR1cGxvYWRfaWQsJHVwbG9hZF9uYW1lKQogIHsKICAgICAgcmV0dXJuIHNwcmludGYoJ3VwbG9hZHMvJWQvJXMnLCR1cGxvYWRfaWQsbXVuZ2Vfc3RyaW5nX3RvX3VybCgkdXBsb2FkX25hbWUpKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X2ZpbGVfdXJsKCR1cGxvYWRfaWQsJHVwbG9hZF9uYW1lID0gJycpCiAgewogICAgJHVwbG9hZF9pZCA9IChpbnQpJHVwbG9hZF9pZDsKICAgIGlmKCAkdXBsb2FkX2lkIDwgMSApIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCd1cGxvYWRzX3V0aWxzOjpnZXRfZmlsZV91cmwgLSBJbnZhbGlkIHVwbG9hZCBJZCBzcGVjaWZpZWQnKTsKCiAgICBpZiggISR1cGxvYWRfbmFtZSApIHsKICAgICAgJGRhdGEgPSBzZWxmOjpnZXRfdXBsb2FkX2RldGFpbHMoJHVwbG9hZF9pZCk7CiAgICAgICR1cGxvYWRfbmFtZSA9ICRkYXRhWyd1cGxvYWRfbmFtZSddOwogICAgfQogICAgJHVwbG9hZF9uYW1lID0gdHJpbSgkdXBsb2FkX25hbWUpOwoKICAgICRkZmx0cGFnZSA9IGNtc21zKCktPkdldENvbnRlbnRPcGVyYXRpb25zKCktPkdldERlZmF1bHRDb250ZW50KCk7CiAgICAkdXBsb2FkcyA9IGNtc191dGlsczo6Z2V0X21vZHVsZSgnVXBsb2FkcycpOwogICAgJHVybCA9ICR1cGxvYWRzLT5DcmVhdGVVUkwoJGlkLCdnZXRmaWxlJywkZGZsdHBhZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgndXBsb2FkX2lkJz0+JHVwbG9hZF9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWxzZSwgc2VsZjo6X2dldF9jbGVhbl91cmwoJGRhdGFbJ3VwbG9hZF9pZCddLCRkYXRhWyd1cGxvYWRfbmFtZSddKSk7CiAgfQoKICBwcml2YXRlIHN0YXRpYyBmdW5jdGlvbiAmZ2V0X2luZGV4ZXIoJGZpbGVuYW1lKQogIHsKICAgICAgJG1vZCA9IGNtc191dGlsczo6Z2V0X21vZHVsZShNT0RfVVBMT0FEUyk7CiAgICAgICRtaW1lID0gY2dlX3V0aWxzOjpnZXRfbWltZV90eXBlKCRmaWxlbmFtZSk7CiAgICAgICR1bmlxdWVfd29yZHMgPSAkbW9kLT5HZXRQcmVmZXJlbmNlKCdpbmRleF91bmlxdWV3b3JkcycpOwogICAgICAkb3B0cyA9IGFycmF5KCd1bmlxdWVfd29yZHMnPT4kdW5pcXVlX3dvcmRzKTsKICAgICAgJG91dCA9IG51bGw7CiAgICAgIGlmKCAkbWltZSApIHsKICAgICAgICAgIHN3aXRjaCggJG1pbWUgKSB7CiAgICAgICAgICBjYXNlICd0ZXh0L3gtYyc6CiAgICAgICAgICBjYXNlICd0ZXh0L3BsYWluJzoKICAgICAgICAgICAgICBpZiggJG1vZC0+R2V0UHJlZmVyZW5jZSgnaW5kZXhfdHh0ZmlsZXMnKSApICRvdXQgPSBuZXcgdXBsb2Fkc19UZXh0SW5kZXhlcigkZmlsZW5hbWUsJG9wdHMpOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAnYXBwbGljYXRpb24vcGRmJzoKICAgICAgICAgICAgICBpZiggJG1vZC0+R2V0UHJlZmVyZW5jZSgnaW5kZXhfcGRmZmlsZXMnKSApICRvdXQgPSBuZXcgdXBsb2Fkc19QZGZJbmRleGVyKCRmaWxlbmFtZSwkb3B0cyk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIHJldHVybiAkb3V0OwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYW5faW5kZXgoJGZpbGVuYW1lKQogIHsKICAgICAgJGluZGV4ZXIgPSBzZWxmOjpnZXRfaW5kZXhlcigkZmlsZW5hbWUpOwogICAgICByZXR1cm4gaXNfb2JqZWN0KCRpbmRleGVyKTsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW5kZXhfdXBsb2FkKCR1cGxvYWRfaWQsQ01TTW9kdWxlICYkc2VhcmNoX21vZHVsZSA9IG51bGwpCiAgewogICAgICB0cnkgewogICAgICAgICAgaWYoICEkc2VhcmNoX21vZHVsZSApICRzZWFyY2hfbW9kdWxlID0gY21zX3V0aWxzOjpnZXRfc2VhcmNoX21vZHVsZSgpOwogICAgICAgICAgaWYoICFpc19vYmplY3QoJHNlYXJjaF9tb2R1bGUpICkgcmV0dXJuOwogICAgICAgICAgJHVwbG9hZHMgPSBjbXNfdXRpbHM6OmdldF9tb2R1bGUoTU9EX1VQTE9BRFMpOwogICAgICAgICAgaWYoICEkdXBsb2FkcyApIHJldHVybjsKCiAgICAgICAgICAkcm93ID0gc2VsZjo6Z2V0X3VwbG9hZF9kZXRhaWxzKCR1cGxvYWRfaWQpOwogICAgICAgICAgJHRleHQgPSAkcm93Wyd1cGxvYWRfbmFtZSddLicgJy4kcm93Wyd1cGxvYWRfYXV0aG9yJ10uJyAnLgogICAgICAgICAgICAgICRyb3dbJ3VwbG9hZF9zdW1tYXJ5J10uJyAnLiRyb3dbJ3VwbG9hZF9kZXNjcmlwdGlvbiddOwoKICAgICAgICAgICRjYXRlZ29yeSA9IHNlbGY6OmdldF9jYXRlZ29yeSgkcm93Wyd1cGxvYWRfY2F0ZWdvcnlfaWQnXSk7CiAgICAgICAgICBpZiggISRjYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X2xpc3RhYmxlJ10gKSByZXR1cm47IC8vIGZpbGUgaXMgbm90IGluIGEgbGlzdGFibGUgY2F0ZWdvcnkuCgogICAgICAgICAgJGZpbGVzcGVjID0gc2VsZjo6Z2V0X2ZpbGVzcGVjKCR1cGxvYWRfaWQpOwogICAgICAgICAgJGluZGV4ZXIgPSBzZWxmOjpnZXRfaW5kZXhlcigkZmlsZXNwZWMpOwogICAgICAgICAgaWYoIGlzX29iamVjdCgkaW5kZXhlcikgKSB7CiAgICAgICAgICAgICAgJHdvcmRzID0gJGluZGV4ZXItPmdldF93b3JkcygpOwogICAgICAgICAgICAgICR0ZXh0IC49ICcgJy5pbXBsb2RlKCcgJywkd29yZHMpOwogICAgICAgICAgfQogICAgICAgICAgJHNlYXJjaF9tb2R1bGUtPkFkZFdvcmRzKCR1cGxvYWRzLT5HZXROYW1lKCksICRyb3dbJ3VwbG9hZF9pZCddLCAndXBsb2FkJywgJHRleHQpOwogICAgICB9CiAgICAgIGNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CiAgICAgICAgICAvLyBhdWRpdCBhIHByb2JsZW0KICAgICAgfQogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcmllcygpCiAgewogICAgICBpZiggIWlzX2FycmF5KHNlbGY6OiRfY2F0ZWdvcmllcykgKSB7CiAgICAgICAgICBzZWxmOjokX2NhdGVnb3JpZXMgPSBhcnJheSgpOwogICAgICAgICAgJGRiID0gY21zbXMoKS0+R2V0REIoKTsKICAgICAgICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIjsKICAgICAgICAgICRkYnIgPSAkZGItPkdldEFycmF5KCRxdWVyeSk7CiAgICAgICAgICBpZiggaXNfYXJyYXkoJGRicikgJiYgY291bnQoJGRicikgKSB7CiAgICAgICAgICAgICAgc2VsZjo6JF9jYXRlZ29yaWVzID0gY2dlX2FycmF5Ojp0b19oYXNoKCRkYnIsJ3VwbG9hZF9jYXRlZ29yeV9pZCcpOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBzZWxmOjokX2NhdGVnb3JpZXM7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9jYXRlZ29yeSgkY2F0ZWdvcnlfaWQpCiAgewogICAgICAkY2F0cyA9IHNlbGY6OmdldF9jYXRlZ29yaWVzKCk7CiAgICAgIGlmKCBpc19udW1lcmljKCRjYXRlZ29yeV9pZCkgKSB7CiAgICAgICAgICBpZiggaXNzZXQoJGNhdHNbJGNhdGVnb3J5X2lkXSkgKSByZXR1cm4gJGNhdHNbJGNhdGVnb3J5X2lkXTsKICAgICAgfQoKICAgICAgZm9yZWFjaCggJGNhdHMgYXMgJHJvdyApIHsKICAgICAgICAgICR0bXAgPSBjbXNfaHRtbF9lbnRpdHlfZGVjb2RlKCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10pOwogICAgICAgICAgaWYoICRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9uYW1lJ10gPT0gJGNhdGVnb3J5X2lkICkgcmV0dXJuICRyb3c7CiAgICAgIH0KCiAgICAgIHRocm93IG5ldyBVcGxvYWRzRXhjZXB0aW9uKCd1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkgLSBDYXRlZ29yeSAnLiRjYXRlZ29yeV9pZC4nIG5vdCBmb3VuZCcpOwogIH0KCiAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcnlfcGF0aCgkY2F0ZWdvcnlfaWQpCiAgewogICAgICAkY2F0ZWdvcnkgPSBzZWxmOjpnZXRfY2F0ZWdvcnkoJGNhdGVnb3J5X2lkKTsKICAgICAgcmV0dXJuICRjYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXTsKICB9CgogIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY2xlYW5fZmlsZW5hbWUoJGluX25hbWUpCiAgewogICAgICAkaW5fbmFtZSA9IHRyaW0oJGluX25hbWUpOwogICAgICByZXR1cm4gc3RyX3JlcGxhY2UoYXJyYXkoJyAnLCclMjAnKSxhcnJheSgnXycsJ18nKSwkaW5fbmFtZSk7CiAgfQoKICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldF9maWxlc3BlYygkdXBsb2FkX2lkKQogIHsKICAgICAgLy8gbm90ZSwgd2lsbCBub3QgcHVrZSBpZiBmaWxlIGRvZXMgbm90IGV4aXN0LgogICAgICAkcm93ID0gc2VsZjo6Z2V0X3VwbG9hZF9kZXRhaWxzKCR1cGxvYWRfaWQpOwogICAgICAkY2F0cGF0aCA9IHNlbGY6OmdldF9jYXRlZ29yeV9wYXRoKCRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKTsKICAgICAgJGNvbmZpZyA9IGNtc21zKCktPkdldENvbmZpZygpOwogICAgICAkY2xlYW5fbmFtZSA9IHNlbGY6OmNsZWFuX2ZpbGVuYW1lKCRyb3dbJ3VwbG9hZF9uYW1lJ10pOwogICAgICByZXR1cm4gY21zX2pvaW5fcGF0aCgkY29uZmlnWyd1cGxvYWRzX3BhdGgnXSwkY2F0cGF0aCwkY2xlYW5fbmFtZSk7CiAgfQp9IC8vIGVuZCBvZiBjbGFzcwojCiMgRU9GCiMKPz4K]]></data>
	</file>
	<file>
	  <filename>/lib/extraclasses.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCmNsYXNzIFVwbG9hZHNFeGNlcHRpb24gZXh0ZW5kcyBFeGNlcHRpb24ge30KCj8+]]></data>
	</file>
	<file>
	  <filename>/method.install.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmlmKCB2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbigpLCc1LjQuMycpIDwgMCApIHsKICAgIHJldHVybiAiTWluaW11bSBQSFAgdmVyc2lvbiBvZiA1LjQuMyByZXF1aXJlZCI7Cn0KCiRkYiA9ICR0aGlzLT5HZXREYigpOwokZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5ICgkZGIpOwoKLy8gdGFibGUgc2NoZW1hIGRlc2NyaXB0aW9uCiRmbGRzID0gInVwbG9hZF9pZCBJIEtFWSwKICAgICAgICAgdXBsb2FkX2NhdGVnb3J5X2lkIEksCiAgICAgICAgIHVwbG9hZF9uYW1lIEMoMjU1KSwKICAgICAgICAgdXBsb2FkX2F1dGhvciBDKDI1NSksCiAgICAgICAgIHVwbG9hZF9zdW1tYXJ5IEMoMjU1KSwKICAgICAgICAgdXBsb2FkX2Rlc2NyaXB0aW9uIFgsCiAgICAgICAgIHVwbG9hZF9pcCBDKDI1NSksCiAgICAgICAgIHVwbG9hZF9zaXplIEksCiAgICAgICAgIHVwbG9hZF9kYXRlICIuQ01TX0FET0RCX0RULiIsCiAgICAgICAgIHVwbG9hZF9rZXkgIEMoMjU1KSwKICAgICAgICAgdXBsb2FkX3RodW1ibmFpbCBDKDI1NSksCiAgICAgICAgIHVwbG9hZF91c2VycGVybXMgWAoJICAgICI7CgovLyBjcmVhdGUgaXQuIFRoaXMgc2hvdWxkIGRvIGVycm9yIGNoZWNraW5nLCBidXQgSSdtIGEgbGF6eSBzb2QuCiR0YWJvcHRhcnJheSA9IGFycmF5ICgnbXlzcWwnID0+ICdUWVBFPU15SVNBTScpOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwgKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCi8vIGEgdGFibGUgZm9yIGRvd25sb2FkcwokZmxkcyA9ICJkb3dubG9hZF9pZCBJIEtFWSwKIAkgZmlsZV9pZCAgICAgSSwKCSBkb3dubG9hZF9kYXRlICIuQ01TX0FET0RCX0RULiIsCiAgICAgZG93bmxvYWRfaXAgICBDKDI1NSksCiAgICAgZG93bmxvYWRfdXNlciBDKDI1NSksCiAgICAgdXJsX2tleSAgQyg0MCkKCSAiOwoKLy8gY3JlYXRlIGl0LiBUaGlzIHNob3VsZCBkbyBlcnJvciBjaGVja2luZywgYnV0IEknbSBhIGxhenkgc29kLgokdGFib3B0YXJyYXkgPSBhcnJheSAoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCi8vIGEgdGFibGUgZm9yIGNhdGVnb3JpZXMKJGZsZHMgPSAidXBsb2FkX2NhdGVnb3J5X2lkIEkgS0VZLAoJIHVwbG9hZF9jYXRlZ29yeV9uYW1lIEMoMjU1KSwKCSB1cGxvYWRfY2F0ZWdvcnlfZGVzY3JpcHRpb24gWCwKICAgdXBsb2FkX2NhdGVnb3J5X3BhdGggQygyNTUpIEtFWSwKCSB1cGxvYWRfY2F0ZWdvcnlfbGlzdGFibGUgSSwKICAgdXBsb2FkX2NhdGVnb3J5X2dyb3VwcyBDKDI1NSksCiAgIHVwbG9hZF9jYXRlZ29yeV9kZWxldGFibGUgSSwKICAgdXBsb2FkX2NhdGVnb3J5X2V4cGlyZXNfaHJzIEksCiAgIHVwbG9hZF9jYXRlZ29yeV9zY2FubmFibGUgSTEsCiAgIHVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgSTEsCiAgIHVwbG9hZF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zIFgKCSAiOwoKLy8gY3JlYXRlIGl0LiBUaGlzIHNob3VsZCBkbyBlcnJvciBjaGVja2luZywgYnV0IEknbSBhIGxhenkgc29kLgokdGFib3B0YXJyYXkgPSBhcnJheSAoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19jYXRlZ29yaWVzIiwgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgovLyBhIHRhYmxlIGZvciBmaWxlIHR5cGVzCiRmbGRzID0gImlkIEksCiAgICAgICAgIHNvcnRvcmRlciBJLAogICAgICAgICBuYW1lICBDKDI1NSksCiAgICAgICAgIGRlc2NyaXB0aW9uIFgsCiAgICAgICAgIGV4dGVuc2lvbnMgQygyNTUpLAogICAgICAgICBpbWFnZSBDKDI1NSkKICAgICAgICAgIjsKJHRhYm9wdGFycmF5ID0gYXJyYXkgKCdteXNxbCcgPT4gJ1RZUEU9TXlJU0FNJyk7CiRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCAoY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWxldHlwZXMiLCAkZmxkcywgJHRhYm9wdGFycmF5KTsKJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCi8vIGEgdGFibGUgZm9yIGZpZWxkIGRlZmluaXRpb25zLgokZmxkcyA9ICIKICAgICAgICAgaWQgICAgICBJIEtFWSBBVVRPLAogICAgICAgICBuYW1lICAgIEMoMjU1KSwKICAgICAgICAgdHlwZSAgICBDKDIwKSwKICAgICAgICAgYXR0cmlicyBYLAogICAgICAgICBpb3JkZXIgIEksCiAgICAgICAgIHB1YmxpYyAgSTEiOwokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzJywgJGZsZHMsICR0YWJvcHRhcnJheSk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgovLyBhIHRhYmxlIGZvciBmaWVsZCB2YWx1ZXMKJGZsZHMgPSAidXBsb2FkX2lkIEkgS0VZLAogICAgICAgICBmbGRfaWQgICAgSSBLRVksCiAgICAgICAgIHZhbHVlICAgICBYIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2ZpZWxkdmFscycsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5ICgkc3FsYXJyYXkpOwoKLy8gYSB0YWJsZSBmb3IgdGltZSBsaW1pdGVkIHVybHMKJGZsZHMgPSAidGxrZXlfaWQgIEkgS0VZIEFVVE8sCiAgICAgICAgIHVwbG9hZF9pZCBJLAogICAgICAgICBlbWFpbCAgICAgQygyNTUpLAogICAgICAgICB1cmxfa2V5ICAgQygxNiksCiAgICAgICAgIGNyZWF0ZWQgICAiLkNNU19BRE9EQl9EVC4iLAogICAgICAgICBleHBpcmVzICAgIi5DTVNfQURPREJfRFQuIiwKICAgICAgICAgbWF4X2Rvd25sb2FkcyBJIjsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZVRhYmxlU1FMKCBjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX3RpbWVsaW1pdCcsICRmbGRzLCAkdGFib3B0YXJyYXkpOwokZGljdC0+RXhlY3V0ZVNRTEFycmF5ICgkc3FsYXJyYXkpOwoKLy8gY3JlYXRlIGEgc2VxdWVuY2UKJGRiLT5DcmVhdGVTZXF1ZW5jZSAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfc2VxIik7CgovLyBhbmQgYW5vdGhlciBvbmUKJGRiLT5DcmVhdGVTZXF1ZW5jZSAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllc19zZXEiKTsKCi8vIGFuZCBhIHRoaXJkIG9uZQokZGItPkNyZWF0ZVNlcXVlbmNlIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHNfc2VxIik7CgovLyBhbmQgYSBmb3VydGgKJGRiLT5DcmVhdGVTZXF1ZW5jZSAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfZmlsZXR5cGVzX3NlcSIpOwoKLy8gYW5kIGFuIGluZGV4Lgokc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlSW5kZXhTUUwoJ2luZGV4X2Rvd25sb2FkX2ZpbGVpZCcsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMnLCdmaWxlX2lkJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKJHNxbGFycmF5ID0gJGRpY3QtPkNyZWF0ZUluZGV4U1FMKCdpbmRleF91cGxvYWRfbmFtZScsY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcycsJ3VwbG9hZF9uYW1lJyk7CiRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCi8vIGNyZWF0ZSBhIHBlcm1pc3Npb24KJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycsICdNYW5hZ2UgVXBsb2FkcycpOwokdGhpcy0+Q3JlYXRlUGVybWlzc2lvbiAoJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJywgJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJyk7CiR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uICgnQ3JlYXRlIFVwbG9hZHMgUmVwb3J0cycsJ0NyZWF0ZSBVcGxvYWRzIFJlcG9ydHMnKTsKCi8vIGNyZWF0ZSBhIHByZWZlcmVuY2UKJHRoaXMtPlNldFByZWZlcmVuY2UgKCJ2YWxpZF91cGxvYWRleHRlbnNpb25zIiwicG5nLGdpZixqcGcsSlBFRyxibXAsd21mLHdtYSx3bXYsbXBnLHppcCx0YXIsZ3osYnoyLG1wMyx3YXYsYXUsb2dnLHhtbCxwZGYiKTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCJzdWJuZXRfZXhjbHVzaW9ucyIsICIiICk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgnY3JlYXRlX2R1bW15X2luZGV4X2h0bWwnLCAxKTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCdzZW5kX3VwbG9hZF9ub3RpZmljYXRpb25zX3RvJywnJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgncmVxdWlyZWZpbGVuYW1lX2V4dGVuc2lvbnMnLDEpOwokdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucycsJ2dpZixqcGcsanBlZyxibXAscG5nJyk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgnYXV0b3RodW1ibmFpbF9zaXplJyw4MCk7CiR0aGlzLT5TZXRQcmVmZXJlbmNlICgnZG93bmxvYWRfY2h1bmtzaXplJyw4KTsKJHRoaXMtPlNldFByZWZlcmVuY2UgKCdjYXRlZ29yeV9leHBpcnknLDApOwoKJGZuID0gX19ESVJfXy5ESVJFQ1RPUllfU0VQQVJBVE9SLid0ZW1wbGF0ZXMnLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ29yaWdfdXBsb2FkZm9ybV90ZW1wbGF0ZS50cGwnOwppZiggZmlsZV9leGlzdHMoICRmbiApICkgewoJJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgndXBsb2FkZm9ybV9zeXNkZWZhdWx0JywkdGVtcGxhdGUpOwoJJHRoaXMtPlNldFRlbXBsYXRlKCd1cGxvYWRmb3JtX2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CgkkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF91cGxvYWRmb3JtJywnZGVmYXVsdCcpOwp9CgokZm4gPSBfX0RJUl9fLkRJUkVDVE9SWV9TRVBBUkFUT1IuJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nb3JpZ19zdW1tYXJ5cnB0X3RlbXBsYXRlLnRwbCc7CmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKSB7CiAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzdW1tYXJ5cnB0X3N5c2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoJ3N1bW1hcnlycHRfZGVmYXVsdCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X3N1bW1hcnlycHQnLCdkZWZhdWx0Jyk7Cn0KCiRmbiA9IF9fRElSX18uRElSRUNUT1JZX1NFUEFSQVRPUi4gJ3RlbXBsYXRlcycuRElSRUNUT1JZX1NFUEFSQVRPUi4nb3JpZ19kZXRhaWxycHRfdGVtcGxhdGUudHBsJzsKaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApIHsKICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RldGFpbHJwdF9zeXNkZWZhdWx0JywkdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFRlbXBsYXRlKCdkZXRhaWxycHRfZGVmYXVsdCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZWZhdWx0X2RldGFpbHJwdCcsJ2RlZmF1bHQnKTsKfQoKLy8gc2VuZGZpbGUgZm9ybSB0ZW1wbGF0ZQokZm4gPSBfX0RJUl9fLicvdGVtcGxhdGVzL29yaWdfc2VuZGZpbGVmb3JtX3RlbXBsYXRlLnRwbCc7CmlmKCBmaWxlX2V4aXN0cyggJGZuICkgKSB7CiAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCdzZW5kZmlsZWZvcm1fc3lzZGVmYXVsdCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnc2VuZGZpbGVmb3JtX2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CiAgICAkdGhpcy0+U2V0UHJlZmVyZW5jZSgnZGVmYXVsdF9zZW5kZmlsZWZvcm0nLCdkZWZhdWx0Jyk7Cn0KCi8vIHlvdXNlbmRpdGZvcm0gdGVtcGxhdGUKJGZuID0gX19ESVJfXy4nL3RlbXBsYXRlcy9vcmlnX3lvdXNlbmRpdGZvcm1fdGVtcGxhdGUudHBsJzsKaWYoIGZpbGVfZXhpc3RzKCAkZm4gKSApIHsKICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3lvdXNlbmRpdGZvcm1fc3lzZGVmYXVsdCcsJHRlbXBsYXRlKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgneW91c2VuZGl0Zm9ybV9kZWZhdWx0JywkdGVtcGxhdGUpOwogICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfeW91c2VuZGl0Zm9ybScsJ2RlZmF1bHQnKTsKfQoKLy8gdGVtcGxhdGUgdXNlZCBmb3Igc2VuZGZpbGUgZW1haWwKJGZuID0gX19ESVJfXy4nL3RlbXBsYXRlcy9vcmlnX3NlbmRmaWxlcnB0X3RlbXBsYXRlLnRwbCc7CmlmKCBmaWxlX2V4aXN0cygkZm4pICkgewogICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiAgICAkdGhpcy0+U2V0VGVtcGxhdGUoICd1cGxvYWRfc2VuZGZpbGVycHQnLCAkdGVtcGxhdGUpOwp9CgovLyB0ZW1wbGF0ZSB1c2VkIGZvciBlbWFpbCBub3RpZmljYXRpb25zCiRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19lbWFpbG5vdGlmeV90ZW1wbGF0ZS50cGwnOwppZiggZmlsZV9leGlzdHMoJGZuKSApIHsKICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKICAkdGhpcy0+U2V0VGVtcGxhdGUoICd1cGxvYWRfZW1haWx0ZW1wbGF0ZScsICR0ZW1wbGF0ZSk7Cn0KCiRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19jYXRlZ29yeWxpc3RfdGVtcGxhdGUudHBsJzsKJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CiR0aGlzLT5TZXRUZW1wbGF0ZSgnY2F0ZWdvcnlsaXN0X3N5c2RmbHQnLCR0ZW1wbGF0ZSk7CiR0aGlzLT5TZXRUZW1wbGF0ZSgnY2F0ZWdvcnlsaXN0X1NhbXBsZScsJHRlbXBsYXRlKTsKJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RmbHRfY2F0ZWdvcnlsaXN0JywnU2FtcGxlJyk7CgokdGhpcy0+U2V0VGVtcGxhdGUoJ2NhdGVnb3J5bGlzdCcsJHRlbXBsYXRlKTsKCiR0bXAgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvdGVtcGxhdGVzL29yaWdfaHRtbHJlcG9ydF9kb3dubG9hZHNieXVzZXIudHBsJyk7CiR0aGlzLT5TZXRUZW1wbGF0ZSgncmRsX1NhbXBsZScsJHRtcCk7CiR0bXAgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvdGVtcGxhdGVzL29yaWdfaHRtbHJlcG9ydF9kb3dubG9hZHNieWZpbGUudHBsJyk7CiR0aGlzLT5TZXRUZW1wbGF0ZSgncmRmX1NhbXBsZScsJHRtcCk7CgovLyBFdmVudCBoYW5kbGVycwokdGhpcy0+Q3JlYXRlRXZlbnQoICJPblVwbG9hZCIgKTsKJHRoaXMtPkNyZWF0ZUV2ZW50KCAiT25SZW1vdmUiICk7CiR0aGlzLT5DcmVhdGVFdmVudCggIk9uRG93bmxvYWQiICk7CiR0aGlzLT5DcmVhdGVFdmVudCggIk9uQ3JlYXRlQ2F0ZWdvcnkiICk7CiR0aGlzLT5DcmVhdGVFdmVudCggIk9uRGVsZXRlQ2F0ZWdvcnkiICk7CgovLyBEZWZhdWx0IGZpbGUgdHlwZXMKJHRoaXMtPl9JbnNlcnREZWZhdWx0RmlsZVR5cGVzKCk7CgovLyBwdXQgbWVudGlvbiBpbnRvIHRoZSBhZG1pbiBsb2cKJHRoaXMtPkF1ZGl0KCcnLCAkdGhpcy0+TGFuZyAoJ2ZyaWVuZGx5bmFtZScpLCAkdGhpcy0+TGFuZyAoJ2luc3RhbGxlZCcsICR0aGlzLT5HZXRWZXJzaW9uICgpKSk7Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/method.uninstall.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCiAgICAkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCiAgICAvLyByZW1vdmUgdGhlIGRhdGFiYXNlIHRhYmxlCiAgICAkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5ICgkZGIpOwogICAgJHNxbGFycmF5ID0gJGRpY3QtPkRyb3BUYWJsZVNRTCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHMiKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgogICAgLy8gcmVtb3ZlIHRoZSBzZXF1ZW5jZQogICAgJGRiLT5Ecm9wU2VxdWVuY2UgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX3NlcSIpOwoKICAgIC8vIHJlbW92ZSB0aGUgY2F0ZWdvcnkgdGFibGUKICAgICRzcWxhcnJheSA9CiAgICAgICRkaWN0LT5Ecm9wVGFibGVTUUwgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMiKTsKCiAgICAvLyByZW1vdmUgaXQncyBzZXF1ZW5jZQogICAgJGRiLT5Ecm9wU2VxdWVuY2UgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXNfc2VxIik7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5ICgkc3FsYXJyYXkpOwoKICAgIC8vIHJlbW92ZSB0aGUgZG93bmxvYWRzIHRhYmxlCiAgICAkc3FsYXJyYXkgPQogICAgICAkZGljdC0+RHJvcFRhYmxlU1FMIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19kb3dubG9hZHMiKTsKCiAgICAvLyBhbmQgaXQncyBzZXF1ZW5jZQogICAgJGRiLT5Ecm9wU2VxdWVuY2UgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2Fkc19zZXEiKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgogICAgLy8gcmVtb3ZlIHRoZSBmaWxldHlwZXMgdGFibGUKICAgICRzcWxhcnJheSA9CiAgICAgICRkaWN0LT5Ecm9wVGFibGVTUUwgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlcyIpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCiAgICAvLyBhbmQgaXQncyBzZXF1ZW5jZQogICAgJGRiLT5Ecm9wU2VxdWVuY2UgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlc19zZXEiKTsKCiAgICAkc3FsYXJyYXkgPQogICAgICAkZGljdC0+RHJvcFRhYmxlU1FMIChjbXNfZGJfcHJlZml4ICgpLiJtb2R1bGVfdXBsb2Fkc19maWVsZGRlZnMiKTsKICAgICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgogICAgJHNxbGFycmF5ID0KICAgICAgJGRpY3QtPkRyb3BUYWJsZVNRTCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfZmllbGR2YWxzIik7CiAgICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5ICgkc3FsYXJyYXkpOwoKICAgICRzcWxhcnJheSA9CiAgICAgICRkaWN0LT5Ecm9wVGFibGVTUUwgKGNtc19kYl9wcmVmaXggKCkuIm1vZHVsZV91cGxvYWRzX3RpbWVsaW1pdCIpOwogICAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCgogICAgLy8gcmVtb3ZlIHRoZSBwZXJtaXNzaW9ucwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpOwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24gKCdVcGxvYWQgRmlsZXMgdG8gVXBsb2FkcycpOwogICAgJHRoaXMtPlJlbW92ZVBlcm1pc3Npb24gKCdDcmVhdGUgVXBsb2FkcyBSZXBvcnRzJyk7CgogICAgLy8gcmVtb3ZlIGFsbCBvZiB0aGUgdGhlIHByZWZlcmVuY2VzIGZvciB0aGlzIG1vZHVsZQogICAgJHRoaXMtPlJlbW92ZVByZWZlcmVuY2UgKCk7CgogICAgLy8gcmVtb3ZlIHRlbXBsYXRlcwogICAgJHRlbXBsYXRlcyA9ICR0aGlzLT5MaXN0VGVtcGxhdGVzKCk7CiAgICBmb3JlYWNoKCAkdGVtcGxhdGVzIGFzICR0cGwgKQogICAgICB7CgkkdGhpcy0+RGVsZXRlVGVtcGxhdGUoJHRwbCk7CiAgICAgIH0KCiAgICAvLyByZW1vdmUgZXZlbnRzCiAgICAkdGhpcy0+UmVtb3ZlRXZlbnQoIk9uVXBsb2FkIiApOwogICAgJHRoaXMtPlJlbW92ZUV2ZW50KCJPblJlbW92ZSIgKTsKICAgICR0aGlzLT5SZW1vdmVFdmVudCgiT25Eb3dubG9hZCIgKTsKICAgICR0aGlzLT5SZW1vdmVFdmVudCgiT25DcmVhdGVDYXRlZ29yeSIgKTsKICAgICR0aGlzLT5SZW1vdmVFdmVudCgiT25EZWxldGVDYXRlZ29yeSIgKTsKICAgICR0aGlzLT5SZW1vdmVFdmVudEhhbmRsZXIoJ0NvcmUnLCdDb250ZW50UG9zdFJlbmRlcicpOwoKICAgIC8vIHB1dCBtZW50aW9uIGludG8gdGhlIGFkbWluIGxvZwogICAgJHRoaXMtPkF1ZGl0ICgwLCAkdGhpcy0+TGFuZyAoJ2ZyaWVuZGx5bmFtZScpLAoJCSAgJHRoaXMtPkxhbmcgKCd1bmluc3RhbGxlZCcpKTsKPz4=]]></data>
	</file>
	<file>
	  <filename>/method.upgrade.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKI0JFR0lOX0xJQ0VOU0UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBNb2R1bGU6IFVwbG9hZHMgKGMpIDIwMTEtMjAxNCBieSBSb2JlcnQgQ2FtcGJlbGwKIyAgICAgICAgIChjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnKQojICBBbiBhZGRvbiBtb2R1bGUgZm9yIENNUyBNYWRlIFNpbXBsZSB0byBhbGxvdyBtYW5hZ2VtZW50IG9mIHVwbG9hZGVkIGZpbGVzCiMgIGhhcyBudW1lcm91cyBjYXBhYmlsaXRpZXMgaW5jbHVkaW5nIHlvdXNlbmRpdCwgdGltZSBsaW1pdGVkIHVybHMsCiMgIGZyb250ZW5kIHVwbG9hZHMuLgojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQ01TTVMgLSBDTVMgTWFkZSBTaW1wbGUgaXMgKGMpIDIwMDUgYnkgVGVkIEt1bHAgKHdpc2h5QGNtc21hZGVzaW1wbGUub3JnKQojIFZpc2l0IHRoZSBDTVNNUyBIb21lcGFnZSBhdDogaHR0cDovL3d3dy5jbXNtYWRlc2ltcGxlLm9yZwojCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMKIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQojIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgojCiMgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMLCB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkCiMgYXMgYW4gYWRkb24gbW9kdWxlIHRvIENNUyBNYWRlIFNpbXBsZS4gIFlvdSBtYXkgbm90IHVzZSB0aGlzIHNvZnR3YXJlCiMgaW4gYW55IE5vbiBHUEwgdmVyc2lvbiBvZiBDTVMgTWFkZSBzaW1wbGUsIG9yIGluIGFueSB2ZXJzaW9uIG9mIENNUwojIE1hZGUgc2ltcGxlIHRoYXQgZG9lcyBub3QgaW5kaWNhdGUgY2xlYXJseSBhbmQgb2J2aW91c2x5IGluIGl0cyBhZG1pbgojIHNlY3Rpb24gdGhhdCB0aGUgc2l0ZSB3YXMgYnVpbHQgd2l0aCBDTVMgTWFkZSBzaW1wbGUuCiMKIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgojIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgojIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKIyBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQojIE9yIHJlYWQgaXQgb25saW5lOiBodHRwOgkvL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2VzLmh0bWwjR1BMCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KI0VORF9MSUNFTlNFCgppZiggdmVyc2lvbl9jb21wYXJlKHBocHZlcnNpb24oKSwnNS40LjMnKSA8IDAgKSB7CiAgICByZXR1cm4gIk1pbmltdW0gUEhQIHZlcnNpb24gb2YgNS40LjMgcmVxdWlyZWQiOwp9CgokdGFib3B0YXJyYXkgPSBhcnJheSAoJ215c3FsJyA9PiAnVFlQRT1NeUlTQU0nKTsKCiRjdXJyZW50X3ZlcnNpb24gPSAkb2xkdmVyc2lvbjsKc3dpdGNoKCAkb2xkdmVyc2lvbiApIHsKY2FzZSAiMS4xLjAiOgpjYXNlICIxLjEuMSI6CmNhc2UgIjEuMS4yIjoKY2FzZSAiMS4xLjMiOgpjYXNlICIxLjEuNCI6CmNhc2UgIjEuMS41IjoKY2FzZSAiMS4xLjYiOgogIAkkdGhpcy0+U2V0UHJlZmVyZW5jZSAoJ3NlbmRfdXBsb2FkX25vdGlmaWNhdGlvbnNfdG8nLCcnKTsKICAgICR0aGlzLT5TZXRUZW1wbGF0ZSggJ3VwbG9hZF9lbWFpbHRlbXBsYXRlJywgJHRoaXMtPmRmbHRfZW1haWxub3RpZnl0ZW1wbGF0ZSApOwoJCXJldHVybjsKfQoKc3dpdGNoICgkb2xkdmVyc2lvbikgewpjYXNlICIxLjAiOgpjYXNlICIxLjAuMSI6CmNhc2UgIjEuMC4yIjoKY2FzZSAiMS4wLjMiOgpjYXNlICIxLjAuNCI6CmNhc2UgIjEuMC41IjoKY2FzZSAiMS4wLjYiOgpjYXNlICIxLjAuNyI6CmNhc2UgIjEuMC44IjoKY2FzZSAiMS4wLjkiOgpjYXNlICIxLjIuMCI6CmNhc2UgJzEuMi4xJzoKY2FzZSAnMS4yLjInOgpjYXNlICcxLjIuMyc6CglyZXR1cm4gZmFsc2U7CgpjYXNlICcxLjMuMC1iZXRhMyc6CnsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlICgnZG93bmxvYWRfY2h1bmtzaXplJyw4KTsKfQpjYXNlICcxLjMuMC1iZXRhNSc6CnsKCS8vIGFkZCBhIGdyb3VwcyBmaWVsZCB0byB0aGUgY2F0ZWdvcmllcyB0YWJsZQoJLy8gaXQgY29udGFpbnMgRkVVIGdyb3VwIElEJ3MgKGNvbW1hIHNlcGVyYXRlZCkKCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMiLAoJCQkJCQkJCQkJCQkJCQkJCSJ1cGxvYWRfY2F0ZWdvcnlfZ3JvdXBzIEMoMjU1KSIpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7Cn0KY2FzZSAnMS4zLjAnOgpjYXNlICcxLjMuMSc6CnsKCS8vIGFuZCBhbiB1cGxvYWRfdGh1bWJuYWlsIGZpZWxkIHRvIHRoZSB1cGxvYWRzIHRhYmxlLgoJJGRiID0gJHRoaXMtPkdldERiKCk7CgkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHMiLAoJCQkJCQkJCQkJCQkJCQkJCSJ1cGxvYWRfdGh1bWJuYWlsIEMoMjU1KSIpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgoJLy8KCS8vIEdldCBsaXN0IG9mIGNhdGVnb3JpZXMKCS8vCgkkcXVlcnkgPSAnU0VMRUNUIHVwbG9hZF9jYXRlZ29yeV9pZCx1cGxvYWRfY2F0ZWdvcnlfcGF0aAogICAgICAgICAgICAgICAgICAgIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMnOwoJJHRtcCA9ICRkYi0+R2V0QXJyYXkoJHF1ZXJ5KTsKCSRjYXRlZ29yaWVzID0gYXJyYXkoKTsKCWZvcmVhY2goICR0bXAgYXMgJG9uZSApIHsKCQkkY2F0ZWdvcmllc1skb25lWyd1cGxvYWRfY2F0ZWdvcnlfaWQnXV0gPSAkb25lOwoJfQoKCS8vCgkvLyBGb3IgZWFjaCBmaWxlCgkvLwoJJG5vdyA9ICRkYi0+RGJUaW1lU3RhbXAodGltZSgpKTsKCSRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkLHVwbG9hZF9pZCx1cGxvYWRfbmFtZSBGUk9NICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkcyc7CgkkZGJyID0gJGRiLT5FeGVjdXRlKCRxdWVyeSk7CgkkdXBkYXRlcXVlcnkgPSAnVVBEQVRFICcuY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2FkcyBTRVQgdXBsb2FkX3RodW1ibmFpbCA9ID8gV0hFUkUgdXBsb2FkX2lkID0gPyc7Cgl3aGlsZSggJGRiciAmJiAoJHJvdyA9ICRkYnItPkZldGNoUm93KCkpICkKCSAgewoJICAgIC8vIGdldCBwYXRoIHRvIHRodW1ibmFpbAoJICAgICRkaXIgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLAoJCQkJICRjYXRlZ29yaWVzWyRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddXVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXSk7CgkgICAgJG9sZHRodW1iID0gY21zX2pvaW5fcGF0aCgkZGlyLCcudGh1bWJzJywKCQkJCSAgICAgICRyb3dbJ3VwbG9hZF9pZCddLidfdGh1bWInKTsKCSAgICBpZiggIWZpbGVfZXhpc3RzKCRvbGR0aHVtYikgKSBjb250aW51ZTsKCgkgICAgJHRtcCA9IEBnZXRpbWFnZXNpemUoJG9sZHRodW1iKTsKCSAgICBpZiggIWlzX2FycmF5KCR0bXApIHx8ICR0bXBbMF0gPT0gMCApIGNvbnRpbnVlOwoKCSAgICAkdGh1bWJ0eXBlID0gJHRtcFsyXTsKCSAgICAkdGh1bWJleHQgPSBAaW1hZ2VfdHlwZV90b19leHRlbnNpb24oJHRodW1idHlwZSk7CgkgICAgJGZuYW1lZXh0ID0gc3RycmNocigkcm93Wyd1cGxvYWRfbmFtZSddLCcuJyk7CgkgICAgJGZuYW1lID0gc3Vic3RyKCRyb3dbJ3VwbG9hZF9uYW1lJ10sMCxzdHJsZW4oJHJvd1sndXBsb2FkX25hbWUnXSktc3RybGVuKCRmbmFtZWV4dCkpOwoJICAgICR0aHVtYm5hbWUgPSAndGh1bWJfJy4kZm5hbWUuJHRodW1iZXh0OwoJICAgICRuZXd0aHVtYiA9IGNtc19qb2luX3BhdGgoJGRpciwkdGh1bWJuYW1lKTsKCgkgICAgLy8gcmVuYW1lIHRodW1ibmFpbCBmaWxlcwoJICAgIEByZW5hbWUoJG9sZHRodW1iLCRuZXd0aHVtYik7CgkgICAgQHVubGluaygkb2xkdGh1bWIpOwoKCSAgICAvLyB1cGRhdGUgdGhlIGRhdGFiYXNlCgkgICAgJGRiLT5FeGVjdXRlKCR1cGRhdGVxdWVyeSxhcnJheSgkdGh1bWJuYW1lLCRyb3dbJ3VwbG9hZF9pZCddKSk7CgkgIH0KCiAgICAgICAgLy8gcmVtb3ZlIHRoZSAudGh1bWJzIGRpcmVjdG9yeSBmb3IgZWFjaCBjYXRlZ29yeQoJZm9yKCAkaSA9IDA7ICRpIDwgY291bnQoJGNhdGVnb3JpZXMpOyAkaSsrICkKCSAgewoJICAgICRkaXIgPSBjbXNfam9pbl9wYXRoKCRjb25maWdbJ3VwbG9hZHNfcGF0aCddLAoJCQkJICRjYXRlZ29yaWVzWyRpXVsndXBsb2Fkc19jYXRlZ29yeV9wYXRoJ10sCgkJCQkgJy50aHVtYnMnKTsKCSAgICByZWN1cnNpdmVfZGVsZXRlKCRkaXIpOwoJICB9CiAgICAgIH0KICAgIGNhc2UgJzEuNCc6CiAgICBjYXNlICcxLjQuMSc6CiAgICAgIHsKCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMiLAoJCQkJCSJ1cGxvYWRfY2F0ZWdvcnlfZGVsZXRhYmxlIEkiKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwogICAgICB9CgogICAgY2FzZSAnMS41JzoKICAgIGNhc2UgJzEuNS4xJzoKICAgICAgewoJLy8gc2VuZGZpbGUgZm9ybSB0ZW1wbGF0ZQoJJGZuID0gZGlybmFtZShfX0ZJTEVfXykuJy90ZW1wbGF0ZXMvb3JpZ19zZW5kZmlsZWZvcm1fdGVtcGxhdGUudHBsJzsKCWlmKCBmaWxlX2V4aXN0cyggJGZuICkgKQoJICB7CgkgICAgJHRlbXBsYXRlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRmbik7CgkgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ3NlbmRmaWxlZm9ybV9zeXNkZWZhdWx0JywkdGVtcGxhdGUpOwoJICAgICR0aGlzLT5TZXRUZW1wbGF0ZSgnc2VuZGZpbGVmb3JtX2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CgkgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfc2VuZGZpbGVmb3JtJywnZGVmYXVsdCcpOwoJICB9CgoJLy8geW91c2VuZGl0Zm9ybSB0ZW1wbGF0ZQoJJGZuID0gZGlybmFtZShfX0ZJTEVfXykuJy90ZW1wbGF0ZXMvb3JpZ195b3VzZW5kaXRmb3JtX3RlbXBsYXRlLnRwbCc7CglpZiggZmlsZV9leGlzdHMoICRmbiApICkKCSAgewoJICAgICR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJICAgICR0aGlzLT5TZXRQcmVmZXJlbmNlKCd5b3VzZW5kaXRmb3JtX3N5c2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CgkgICAgJHRoaXMtPlNldFRlbXBsYXRlKCd5b3VzZW5kaXRmb3JtX2RlZmF1bHQnLCR0ZW1wbGF0ZSk7CgkgICAgJHRoaXMtPlNldFByZWZlcmVuY2UoJ2RlZmF1bHRfeW91c2VuZGl0Zm9ybScsJ2RlZmF1bHQnKTsKCSAgfQoKCS8vIHRlbXBsYXRlIHVzZWQgZm9yIHNlbmRmaWxlIGVtYWlsCgkkZm4gPSBkaXJuYW1lKF9fRklMRV9fKS4nL3RlbXBsYXRlcy9vcmlnX3NlbmRmaWxlcnB0X3RlbXBsYXRlLnRwbCc7CglpZiggZmlsZV9leGlzdHMoJGZuKSApCgkgIHsKCSAgICAkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKCSAgICAkdGhpcy0+U2V0VGVtcGxhdGUoICd1cGxvYWRfc2VuZGZpbGVycHQnLCAkdGVtcGxhdGUpOwoJICB9CiAgICAgIH0KCiAgICBjYXNlICcxLjYnOgogICAgICB7CgkkZGIgPSAkdGhpcy0+R2V0RGIoKTsKCSRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCgkvLyBhIHRhYmxlIGZvciBmaWVsZCBkZWZpbml0aW9ucy4KCSRmbGRzID0gIgogICAgICAgICBpZCAgICAgIEkgS0VZIEFVVE8sCiAgICAgICAgIG5hbWUgICAgQygyNTUpLAogICAgICAgICB0eXBlICAgIEMoMjApLAogICAgICAgICBhdHRyaWJzIFgsCiAgICAgICAgIGlvcmRlciAgSSwKICAgICAgICAgcHVibGljICBJMSI7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfZmllbGRkZWZzJywKCQkJCQkgICAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgoKCS8vIGEgdGFibGUgZm9yIGZpZWxkIHZhbHVlcwoJJGZsZHMgPSAidXBsb2FkX2lkIEkgS0VZLAogICAgICAgICBmbGRfaWQgICAgSSBLRVksCiAgICAgICAgIHZhbHVlICAgICBYIjsKCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVUYWJsZVNRTCggY21zX2RiX3ByZWZpeCgpLidtb2R1bGVfdXBsb2Fkc19maWVsZHZhbHMnLAoJCQkJCSAgICRmbGRzLCAkdGFib3B0YXJyYXkpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSAoJHNxbGFycmF5KTsKCgkvLyBhIHRhYmxlIGZvciB0aW1lIGxpbWl0ZWQgdXJscwoJJGZsZHMgPSAiCiAgICAgICAgIHRsa2V5X2lkICBJIEtFWSBBVVRPLAogICAgICAgICB1cGxvYWRfaWQgSSwKICAgICAgICAgZW1haWwgICAgIEMoMjU1KSwKICAgICAgICAgdXJsX2tleSAgIEMoMTYpLAogICAgICAgICBjcmVhdGVkICAgIi5DTVNfQURPREJfRFQuIiwKICAgICAgICAgZXhwaXJlcyAgICIuQ01TX0FET0RCX0RULiIsCiAgICAgICAgIG1heF9kb3dubG9hZHMgSSI7Cgkkc3FsYXJyYXkgPSAkZGljdC0+Q3JlYXRlVGFibGVTUUwoIGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfdGltZWxpbWl0JywKCQkJCQkgICAkZmxkcywgJHRhYm9wdGFycmF5KTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkgKCRzcWxhcnJheSk7CgoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2Rvd25sb2FkcyIsCgkJCQkJInVybF9rZXkgQyg0MCkiKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKICAgICAgfQoKICAgIGNhc2UgJzEuOSc6CiAgICBjYXNlICcxLjkuMSc6CiAgICBjYXNlICcxLjkuMic6CiAgICBjYXNlICcxLjkuMyc6CiAgICBjYXNlICcxLjkuNCc6CiAgICAgIHsKCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJJGRpY3QgPSBOZXdEYXRhRGljdGlvbmFyeSgkZGIpOwoJJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMiLAoJCQkJCSJ1cGxvYWRfY2F0ZWdvcnlfZXhwaXJlc19ocnMgSSIpOwoJJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSggJHNxbGFycmF5ICk7CgoJJHRoaXMtPlNldFByZWZlcmVuY2UgKCdjYXRlZ29yeV9leHBpcnknLDApOwoJJHRoaXMtPkFkZEV2ZW50SGFuZGxlcignQ29yZScsJ0NvbnRlbnRQb3N0UmVuZGVyJyk7CiAgICAgIH0KCiAgICBjYXNlICcxLjEwJzoKICAgIGNhc2UgJzEuMTAuMSc6CiAgICAgIHsKCSR0aGlzLT5DcmVhdGVQZXJtaXNzaW9uICgnVXBsb2FkIEZpbGVzIHRvIFVwbG9hZHMnLCAnVXBsb2FkIEZpbGVzIHRvIFVwbG9hZHMnKTsKICAgICAgfQoKICAgIGNhc2UgJzEuMTAuMic6CiAgICBjYXNlICcxLjEwLjMnOgogICAgY2FzZSAnMS4xMC40JzoKICAgICAgewoJJGRiID0gJHRoaXMtPkdldERiKCk7CgkkZGljdCA9IE5ld0RhdGFEaWN0aW9uYXJ5KCRkYik7Cgkkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyIsCgkJCQkJInVwbG9hZF9jYXRlZ29yeV9zY2FubmFibGUgSTEiKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoICRzcWxhcnJheSApOwoKCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMKICAgICAgICAgICAgICAgICAgICAgU0VUIHVwbG9hZF9jYXRlZ29yeV9zY2FubmFibGUgPSAxJzsKCSRkYi0+RXhlY3V0ZSgkcXVlcnkpOwoKCSRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaW5kZXhfZG93bmxvYWRfZmlsZWlkJyxjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2Rvd25sb2FkcycsJ2ZpbGVfaWQnKTsKCSRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKICAgICAgfQogICAgfQoKaWYoIHZlcnNpb25fY29tcGFyZSgkY3VycmVudF92ZXJzaW9uLCcxLjE1JykgPCAwICkgewogICRkYiA9ICR0aGlzLT5HZXREYigpOwogICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiAgJHNxbGFycmF5ID0gJGRpY3QtPkFkZENvbHVtblNRTChjbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMnLAoJCQkJICAndXBsb2FkX2NhdGVnb3J5X3VzZXJwZXJtcyBJMSx1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyBYJyk7CiAgJGRpY3QtPkV4ZWN1dGVTUUxBcnJheSgkc3FsYXJyYXkpOwoKICAkc3FsYXJyYXkgPSAkZGljdC0+QWRkQ29sdW1uU1FMKGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMnLCd1cGxvYWRfdXNlcnBlcm1zIFgnKTsKICAkZGljdC0+RXhlY3V0ZVNRTEFycmF5KCRzcWxhcnJheSk7Cn0KaWYoIHZlcnNpb25fY29tcGFyZSgkY3VycmVudF92ZXJzaW9uLCcxLjE2JykgPCAwICkgewogICRkYiA9ICR0aGlzLT5HZXREYigpOwogICRkaWN0ID0gTmV3RGF0YURpY3Rpb25hcnkoJGRiKTsKCiAgJHRoaXMtPkNyZWF0ZVBlcm1pc3Npb24gKCdDcmVhdGUgVXBsb2FkcyBSZXBvcnRzJywnQ3JlYXRlIFVwbG9hZHMgUmVwb3J0cycpOwogICRzcWxhcnJheSA9ICRkaWN0LT5DcmVhdGVJbmRleFNRTCgnaW5kZXhfdXBsb2FkX25hbWUnLGNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMnLCd1cGxvYWRfbmFtZScpOwogICRkaWN0LT5FeGVjdXRlU1FMQXJyYXkoJHNxbGFycmF5KTsKCiAgJHRtcCA9IGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19odG1scmVwb3J0X2Rvd25sb2Fkc2J5dXNlci50cGwnKTsKICAkdGhpcy0+U2V0VGVtcGxhdGUoJ3JkbF9TYW1wbGUnLCR0bXApOwogICR0bXAgPSBmaWxlX2dldF9jb250ZW50cyhfX0RJUl9fLicvdGVtcGxhdGVzL29yaWdfaHRtbHJlcG9ydF9kb3dubG9hZHNieWZpbGUudHBsJyk7CiAgJHRoaXMtPlNldFRlbXBsYXRlKCdyZGZfU2FtcGxlJywkdG1wKTsKfQoKaWYoIHZlcnNpb25fY29tcGFyZSgkY3VycmVudF92ZXJzaW9uLCcxLjE3LjEnKSA8IDAgKSB7CgkkdGhpcy0+UmVtb3ZlRXZlbnRIYW5kbGVyKCdDb3JlJywnQ29udGVudFBvc3RSZW5kZXInKTsKfQoKCmlmKCB2ZXJzaW9uX2NvbXBhcmUoJGN1cnJlbnRfdmVyc2lvbiwnMS4xOScpIDwgMCApIHsKCSRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19jYXRlZ29yeWxpc3RfdGVtcGxhdGUudHBsJzsKCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJJHRoaXMtPlNldFRlbXBsYXRlKCdjYXRlZ29yeWxpc3Rfc3lzZGZsdCcsJHRlbXBsYXRlKTsKCSR0aGlzLT5TZXRUZW1wbGF0ZSgnY2F0ZWdvcnlsaXN0X1NhbXBsZScsJHRlbXBsYXRlKTsKCSR0aGlzLT5TZXRQcmVmZXJlbmNlKCdkZmx0X2NhdGVnb3J5bGlzdCcsJ1NhbXBsZScpOwp9Cgo/Pg==]]></data>
	</file>
	<file>
	  <filename>/skeleton.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKaWYoICFpc3NldCgkZ0NtcykgKSBleGl0OwoKIwojIEVPRgojCj8+]]></data>
	</file>
	<file>
	  <filename>/templates/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/templates/addcategory.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCR0aXRsZSl9PGgzPnskdGl0bGV9PC9oMz57L2lmfQp7aWYgaXNzZXQoJG1lc3NhZ2UpICYmICRtZXNzYWdlICE9ICcnfQogIHtpZiBpc3NldCgkZXJyb3IpICYmICRlcnJvciAhPSAnJ30KICAgIDxwPjxmb250IGNvbG9yPSJyZWQiPnskbWVzc2FnZX08L2ZvbnQ+PC9wPgogIHtlbHNlfQogICAgPHA+eyRtZXNzYWdlfTwvcD4KICB7L2lmfQp7ZWxzZX0KICB7JHN0YXJ0Zm9ybX0KICB7Y2dlX3N0YXJ0X3RhYnN9CiAge2NnZV90YWJoZWFkZXIgbmFtZT0nZ2VuZXJhbCcgbGFiZWw9JG1vZC0+TGFuZygncHJvbXB0X2dlbmVyYWwnKX0KICB7Y2dlX3RhYmhlYWRlciBuYW1lPSd2aWV3aW5nJyBsYWJlbD0kbW9kLT5MYW5nKCdwcm9tcHRfdmlld2luZycpfQogIHtjZ2VfdGFiaGVhZGVyIG5hbWU9J21vZGlmeWluZycgbGFiZWw9JG1vZC0+TGFuZygncHJvbXB0X21vZGlmeWluZycpfQogIHtjZ2VfdGFiY29udGVudF9zdGFydCBuYW1lPSdnZW5lcmFsJ30KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeW5hbWUnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9jYXRlZ29yeW5hbWUiIHNpemU9IjIwIiBtYXhsZW5ndGg9IjgwIiB2YWx1ZT0ieyRkYXRhLnVwbG9hZF9jYXRlZ29yeV9uYW1lfSIvPgogICAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fY2F0ZWdvcnluYW1lJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NhdGVnb3J5ZGVzYycpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhdGVnb3J5ZGVzYyIgc2l6ZT0iODAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRkYXRhLnVwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbn0iLz4KICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2NhdGVnb3J5ZGVzYycpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeXBhdGgnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9jYXRlZ29yeXBhdGgiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9InskZGF0YS51cGxvYWRfY2F0ZWdvcnlfcGF0aH0ie2lmIGlzc2V0KCRjYXRlZ29yeV9pZCl9IHJlYWRvbmx5PSJyZWFkb25seSJ7L2lmfT4KICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2NhdGVnb3J5cGF0aCcpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICB7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0ndmlld2luZyd9CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY2F0ZWdvcnlsaXN0YWJsZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5wdXRfY2F0ZWdvcnlsaXN0YWJsZSBzZWxlY3RlZD0kZGF0YS51cGxvYWRfY2F0ZWdvcnlfbGlzdGFibGV9CiAgICAgICAgPGJyLz4KICAgICAgICB7JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeWxpc3RhYmxlJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAge2lmIGlzc2V0KCRmZXVfZ3JvdXBzKX0KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9ncm91cGxpc3QnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9aW5wdXRfZ3JvdXBsaXN0W10iIHNpemU9IjUiIG11bHRpcGxlPSJtdWx0aXBsZSI+CiAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZldV9ncm91cHMgc2VsZWN0ZWQ9JGdyb3VwbGlzdH0KICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2dyb3VwbGlzdCcpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeV91c2VycGVybXMnKX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7Y2dlX3llc25vX29wdGlvbnMgcHJlZml4PSRhY3Rpb25pZCBuYW1lPSdpbnB1dF9jYXRlZ29yeV91c2VycGVybXMnIHNlbGVjdGVkPSRkYXRhLnVwbG9hZF9jYXRlZ29yeV91c2VycGVybXN9CiAgICAgICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeV91c2VycGVybXMnKX0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcycpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9jYXRlZ29yeV9kZmx0dXNlcnBlcm1zW10iIHNpemU9IjUiIG11bHRpcGxlPSJtdWx0aXBsZSI+CiAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZldV9ncm91cHMgc2VsZWN0ZWQ9JGRhdGEudXBsb2FkX2NhdGVnb3J5X2RmbHR1c2VycGVybXN9CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeV9kZmx0dXNlcnBlcm1zJyl9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgey9pZn0KICB7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0nbW9kaWZ5aW5nJ30KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeWRlbGV0YWJsZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5wdXRfY2F0ZWdvcnlkZWxldGFibGUgc2VsZWN0ZWQ9JGRhdGEudXBsb2FkX2NhdGVnb3J5X2RlbGV0YWJsZX0KCTxici8+CiAgICAgICAgeyRtb2QtPkxhbmcoJ2luZm9fY2F0ZWdvcnlkZWxldGFibGUnKX0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY2F0ZWdvcnlfZXhwaXJlc19ocnMnKX08L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhdGVnb3J5X2V4cGlyZXNfaHJzIiB2YWx1ZT0ieyRkYXRhLnVwbG9hZF9jYXRlZ29yeV9leHBpcmVzX2hyc30iIHNpemU9IjMiIG1heGxlbmd0aD0iNCIvPgoJPGJyLz4KICAgICAgICB7JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeV9leHBpcmVzX2hycycpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeV9zY2FubmFibGUnKX08L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5wdXRfY2F0ZWdvcnlfc2Nhbm5hYmxlIHNlbGVjdGVkPSRkYXRhLnVwbG9hZF9jYXRlZ29yeV9zY2FubmFibGV9Cgk8YnIvPgogICAgICAgIHskbW9kLT5MYW5nKCdpbmZvX2NhdGVnb3J5X3NjYW5uYWJsZScpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICB7Y2dlX2VuZF90YWJzfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICB7aWYgaXNzZXQoJGNhdGVnb3J5X2lkKX0KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zY2FuIiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3NjYW4nKX0iIHRpdGxlPSJ7JG1vZC0+TGFuZygndGl0bGVfc2NhbicpfSIvPgogICAgICB7L2lmfQogICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgICA8L3A+CiAgPC9kaXY+CiAgeyRlbmRmb3JtfQp7L2lmfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/addfiletype.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbmFtZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9uYW1lfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9kZXNjcmlwdGlvbn06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9kZXNjcmlwdGlvbn08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfZXh0ZW5zaW9uc306PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9leHRlbnNpb25zfTwvcD4KICA8L2Rpdj4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9pY29ufTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2ljb259PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufXskc3VibWl0fXskY2FuY2VsfTwvcD4KICA8L2Rpdj4KeyRlbmRmb3JtfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminpanel.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfc2VjdGlvbn08L2gzPgo8cD57JGFkbWluX25hdn08L3A+Cnskd2VsY29tZV90ZXh0fQ==]]></data>
	</file>
	<file>
	  <filename>/templates/adminprefs.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9Cnskc3RhcnRmb3JtfQo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3VwbG9hZGluZ19zZXR0aW5ncycpfTo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3ZhbGlkX3VwbG9hZGV4dGVuc2lvbnN9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9lbWFpbF9vbl91cGxvYWR9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2VtYWlsX29uX3VwbG9hZH08L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX3JlZGlyZWN0X29uX3VwbG9hZH06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVkaXJlY3Rfb25fdXBsb2FkfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfYWxsb3dfdXBsb2FkX3NlbmRmaWxlJyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1hbGxvd191cGxvYWRfc2VuZGZpbGUiIHZhbHVlPSIwIi8+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1hbGxvd191cGxvYWRfc2VuZGZpbGUiIHZhbHVlPSIxIiB7aWYgJGFsbG93X3VwbG9hZF9zZW5kZmlsZX1jaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICAgICAgICAgIDwvcD4KCTwvZGl2Pgo8L2ZpZWxkc2V0Pgo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2dlbmVyYWxfc2V0dGluZ3MnKX06PC9sZWdlbmQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgIAkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ZyaWVuZGx5bmFtZScpfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CgkJICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1mcmllbmRseW5hbWUiIHZhbHVlPSJ7JGZyaWVuZGx5bmFtZX0iIG1heGxlbmd0aD0iMjU1Ii8+CiAgICAgICAgICAgICAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fZnJpZW5kbHluYW1lJyl9CgkJPC9wPgogICAgICAgIDwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdhbGxvd19jaGFuZ2VkYXRlJyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KCQkJe2NnZV95ZXNub19vcHRpb25zIHByZWZpeD0kYWN0aW9uaWQgbmFtZT0nYWxsb3dfY2hhbmdlZGF0ZScgc2VsZWN0ZWQ9JGFsbG93X2NoYW5nZWRhdGV9CgkJPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kdW1teV9pbmRleF9odG1sfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9kdW1teV9pbmRleF9odG1sfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc2VuZGZpbGVwYWdlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9zZW5kZmlsZXBhZ2V9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9yZWRpcmVjdF9vbl9zZW5kZmlsZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfcmVkaXJlY3Rfb25fc2VuZGZpbGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9kb3dubG9hZF9jaHVua3NpemV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2Rvd25sb2FkX2NodW5rc2l6ZX0mbmJzcDt7JGluZm9fZG93bmxvYWRfY2h1bmtzaXplfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfYWxsb3dfZGVsZXRlfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF9hbGxvd19kZWxldGV9PC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9nZXRmaWxlX3Jlc3VsdHBhZ2UnKX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICAgICAgICB7JGlucHV0X2dldGZpbGVfcmVzdWx0cGFnZX0KICAgICAgICAgICAgICAgIDwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskdGl0bGVfc3VibmV0X2V4Y2x1c2lvbnN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3N1Ym5ldF9leGNsdXNpb25zfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd0aXRsZV9jYXRlZ29yeV9leHBpcnknKX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhdGVnb3J5X2V4cGlyeSIgdmFsdWU9InskY2F0ZWdvcnlfZXhwaXJ5fSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSI0Ii8+PGJyLz57JG1vZC0+TGFuZygnaW5mb19kZmx0X2NhdGVnb3J5X2V4cGlyeScpfTwvcD4KCTwvZGl2Pgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0Pgo8bGVnZW5kPnskbW9kLT5MYW5nKCdpbmRleGluZ19zZXR0aW5ncycpfTo8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2luZGV4X3R4dGZpbGVzJyl9PC9wPgoJICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCSAgICAgCXtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5kZXhfdHh0ZmlsZXMgc2VsZWN0ZWQ9JGluZGV4X3R4dGZpbGVzfQoJICAgICA8L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2luZGV4X3BkZmZpbGVzJyl9PC9wPgoJICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCSAgICAgCXtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5kZXhfcGRmZmlsZXMgc2VsZWN0ZWQ9JGluZGV4X3BkZmZpbGVzfQoJICAgICA8L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2luZGV4X3VuaXF1ZXdvcmRzJyl9PC9wPgoJICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KCSAgICAgCXtjZ2VfeWVzbm9fb3B0aW9ucyBwcmVmaXg9JGFjdGlvbmlkIG5hbWU9aW5kZXhfdW5pcXVld29yZHMgc2VsZWN0ZWQ9JGluZGV4X3VuaXF1ZXdvcmRzfQoJICAgICA8L3A+Cgk8L2Rpdj4KPC9maWVsZHNldD4KCjxmaWVsZHNldD4KPGxlZ2VuZD57JG1vZC0+TGFuZygnaW1hZ2Vfc2V0dGluZ3MnKX06PC9sZWdlbmQ+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyR0aXRsZV9hdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnN9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X2F1dG90aHVtYm5haWxfZXh0ZW5zaW9uc308L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHRpdGxlX2F1dG90aHVtYm5haWxfc2l6ZX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfYXV0b3RodW1ibmFpbF9zaXplfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdhdXRvd2F0ZXJtYXJrJyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1hdXRvd2F0ZXJtYXJrIiB2YWx1ZT0iMCIvPgogICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9YXV0b3dhdGVybWFyayIgdmFsdWU9IjEie2lmICRhdXRvd2F0ZXJtYXJrID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPgogICAgICAgICAgICAgICAgPC9wPgoJPC9kaXY+CjwvZmllbGRzZXQ+Cgo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ3RpbWVsaW1pdGVkX3VybF9zZXR0aW5ncycpfTombmJzcDs8L2xlZ2VuZD4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGltZWxpbWl0ZWRfaG91cnMiIHZhbHVlPSJ7JHRpbWVsaW1pdGVkX2hvdXJzfSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIzIi8+CiAgICAgICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAgICAgIHskbW9kLT5MYW5nKCdpbmZvX3RpbWVsaW1pdGVkX2hvdXJzJyl9CiAgICAgICAgICAgICAgICA8L3A+Cgk8L2Rpdj4KCTxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CgkJPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcycpfTo8L3A+CgkJPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfXRpbWVsaW1pdGVkX2Rvd25sb2FkcyIgdmFsdWU9InskdGltZWxpbWl0ZWRfZG93bmxvYWRzfSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIzIi8+CiAgICAgICAgICAgICAgICAgIDxici8+CiAgICAgICAgICAgICAgICAgIHskbW9kLT5MYW5nKCdpbmZvX3RpbWVsaW1pdGVkX2Rvd25sb2FkcycpfQogICAgICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90aW1lbGltaXRlZF9hdXRvZGVsZXRlJyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGltZWxpbWl0ZWRfYXV0b2RlbGV0ZSIgdmFsdWU9InskdGltZWxpbWl0ZWRfYXV0b2RlbGV0ZX0iIHNpemU9IjMiIG1heGxlbmd0aD0iMyIvPgogICAgICAgICAgICAgICAgPC9wPgoJPC9kaXY+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90aW1lbGltaXRlZF9zdWJqZWN0Jyl9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGltZWxpbWl0ZWRfc3ViamVjdCIgdmFsdWU9InskdGltZWxpbWl0ZWRfc3ViamVjdH0iIHNpemU9IjgwIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgICAgICAgICAgICAgPC9wPgoJPC9kaXY+CjwvZmllbGRzZXQ+CgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_field.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCd0aXRsZV9hZGRfZmllbGQnKX08L2gzPgoKeyRmb3Jtc3RhcnR9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ZpZWxkX25hbWUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfW5hbWUiIHZhbHVlPSJ7JGZsZC5uYW1lfSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjU1Ii8+PC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ZpZWxkX3R5cGUnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH10eXBlIiBvbmNoYW5nZT0idGhpcy5mb3JtLnN1Ym1pdCgpOyI+CiAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZsZHR5cGVzIHNlbGVjdGVkPSRmbGQudHlwZX0KICAgICA8L3NlbGVjdD4KICA8L3A+CjwvZGl2PgoKe2lmICRmbGQudHlwZSA9PSAndGV4dGlucHV0J30KICB7KiB0ZXh0IGZpZWxkIG9yIGVtYWlsIGZpZWxkICp9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9maWVsZF9sZW5ndGgnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1hdHRyaWJfbGVuZ3RoIiB2YWx1ZT0ieyRmbGQuYXR0cmliLmxlbmd0aHxkZWZhdWx0OjgwfSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIzIi8+PC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ZpZWxkX21heGxlbmd0aCcpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWF0dHJpYl9tYXhsZW5ndGgiIHZhbHVlPSJ7JGZsZC5hdHRyaWIubWF4bGVuZ3RofGRlZmF1bHQ6ODB9IiBzaXplPSI0IiBtYXhsZW5ndGg9IjQiLz48L3A+CiAgPC9kaXY+CntlbHNlaWYgJGZsZC50eXBlID09ICd0ZXh0YXJlYSd9CiAgeyogdGV4dCBhcmVhIGZpZWxkICp9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9kZWZhdWx0X2NvbnRlbnQnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4KICAgICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9YXR0cmliX2RmbHRjb250ZW50IiByb3dzPSI1Ij57JGZsZC5hdHRyaWIuZGZsdGNvbnRlbnR8ZGVmYXVsdDonJ308L3RleHRhcmVhPgogICAgPC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3VzZV93eXNpd3lnJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+CiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1hdHRyaWJfdXNld3lzaXd5ZyI+CiAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR5ZXNubyBzZWxlY3RlZD0kZmxkcy5hdHRyaWIudXNld3lzaXd5Z30KICAgICAgPC9zZWxlY3Q+CiAgICA8L3A+CiAgPC9kaXY+CntlbHNlaWYgJGZsZC50eXBlID09ICdkcm9wZG93bicgb3IgJGZsZC50eXBlID09ICdtdWx0aXNlbGVjdCd9CiAgeyogZHJvcGRvd24gb3IgbXVsdGlzZWxlY3QgKn0KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2Ryb3Bkb3duX29wdGlvbnMnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4KICAgICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9YXR0cmliX29wdGlvbnMiIHJvd3M9IjUiPnskZmxkLmF0dHJpYi5vcHRpb25zfTwvdGV4dGFyZWE+CiAgICA8L3A+CiAgPC9kaXY+CnsvaWZ9Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wdWJsaWNfZmllbGQnKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9cHVibGljIj4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR5ZXNubyB2YWx1ZT0kZmxkLnB1YmxpY30KICAgIDwvc2VsZWN0PgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/admin_add_timelimited.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdhZGRlZGl0X3RpbWVsaW1pdGVkX2tleScpfTwvaDM+CjxoND57JG1vZC0+TGFuZygnZmlsZV9pbmZvMicsJHVwbG9hZC51cGxvYWRfbmFtZSwkdXBsb2FkLnVwbG9hZF9pZCl9PC9oND4KCnskZm9ybXN0YXJ0fQogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnZW1haWxfYWRkcmVzcycpfTwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9ZW1haWwiIHZhbHVlPSJ7JGVtYWlsfSIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1Ii8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90aW1lbGltaXRlZF9ob3VycycpfTwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9aG91cnMiIHZhbHVlPSJ7JGhvdXJzfSIgc2l6ZT0iNSIgbWF4bGVuZ3RoPSI1Ii8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90aW1lbGltaXRlZF9kb3dubG9hZHMnKX08L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWRvd25sb2FkcyIgdmFsdWU9InskZG93bmxvYWRzfSIgc2l6ZT0iMyIgbWF4bGVuZ3RoPSIzIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF90aW1lbGltaXRlZF9zZW5kaXQnKX08L3A+CiAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1zZW5kaXQiIHZhbHVlPSIxIiBjaGVja2VkPSJjaGVja2VkIi8+CiAgIDwvcD4KIDwvZGl2PgoKIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KICAgPC9wPgogPC9kaXY+CnskZm9ybWVuZH0=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_cat_bulkcopy.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRmb3Jtc3RhcnR9Cntmb3JlYWNoIGZyb209JGNhdGVnb3JpZXMgaXRlbT0nb25lY2F0J30KPGZpZWxkc2V0Pgo8bGVnZW5kPnskb25lY2F0LnVwbG9hZF9jYXRlZ29yeV9uYW1lfSZuYnNwOyh7JG9uZWNhdC51cGxvYWRfY2F0ZWdvcnlfcGF0aH0pOiZuYnNwOzwvbGVnZW5kPgogPGRpdiBjbGFzcz0icGFnZW92ZXJsb3ciPgogICA8dGFibGUgY2xhc3M9InBhZ2V0YWJsZSIgY2VsbHNwYWNpbmc9IjAiPgogICAgIDx0aGVhZD4KICAgICAgIDx0cj4KICAgICAgICAgPHRoPnskbW9kLT5MYW5nKCduYW1lJyl9OjwvdGg+CiAgICAgICAgIDx0aD57JG1vZC0+TGFuZygnZGVzY3JpcHRpb24nKX06PC90aD4KICAgICAgICAgPHRoPnskbW9kLT5MYW5nKCdwYXRoJyl9OjwvdGg+CiAgICAgICAgIDx0aD57JG1vZC0+TGFuZygnY29weV9maWxlcycpfTo8L3RoPgogICAgICAgPC90cj4KICAgICA8L3RoZWFkPgogICAgIDx0Ym9keT4KICAgICAgIDx0cj4KICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWNvcHljYXRlZ29yeVt7JG9uZWNhdC51cGxvYWRfY2F0ZWdvcnlfaWR9XVtuYW1lXSIgdmFsdWU9IkNvcHkgb2YgeyRvbmVjYXQudXBsb2FkX2NhdGVnb3J5X25hbWV9IiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiLz48L3RkPgogICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9Y29weWNhdGVnb3J5W3skb25lY2F0LnVwbG9hZF9jYXRlZ29yeV9pZH1dW2Rlc2NyaXB0aW9uXSIgdmFsdWU9Inskb25lY2F0LnVwbG9hZF9jYXRlZ29yeV9kZXNjcmlwdGlvbn0iIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIvPjwvdGQ+CiAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1jb3B5Y2F0ZWdvcnlbeyRvbmVjYXQudXBsb2FkX2NhdGVnb3J5X2lkfV1bcGF0aF0iIHZhbHVlPSJ7JG9uZWNhdC51cGxvYWRfY2F0ZWdvcnlfcGF0aH1fY29weSIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1Ii8+PC90ZD4KICAgICAgICAgPHRkPgogICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9Y29weWNhdGVnb3J5W3skb25lY2F0LnVwbG9hZF9jYXRlZ29yeV9pZH1dW2RvZmlsZXNdIiB2YWx1ZT0iMCIvPgogICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1jb3B5Y2F0ZWdvcnlbeyRvbmVjYXQudXBsb2FkX2NhdGVnb3J5X2lkfV1bZG9maWxlc10iIHZhbHVlPSIxIi8+CiAgICAgICAgIDwvdGQ+CiAgICAgICA8L3RyPgogICAgIDwvdGJvZHk+CiAgIDwvdGFibGU+CiA8L2Rpdj4KPC9maWVsZHNldD4Key9mb3JlYWNofQoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9YnVsa2NvcHlfc3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_copycategory.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY29weSBjYXRlZ29yeSB0ZW1wbGF0ZSAqfQp7Kgp7bGl0ZXJhbH0KPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgalF1ZXJ5KCcjZXh0cmFsaW5rJykuY2xpY2soZnVuY3Rpb24oKXsKICAgIGpRdWVyeSgnI2V4dHJhaW5mbycpLnRvZ2dsZSgpOwogICAgcmV0dXJuIGZhbHNlOwogIH0pOwp9KTsKPC9zY3JpcHQ+CnsvbGl0ZXJhbH0KKn0KCnskZm9ybXN0YXJ0fQogIDxmaWVsZHNldD4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdzb3VyY2UnKX06Jm5ic3A7PC9sZWdlbmQ+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeW5hbWUnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjYXRlZ29yeS51cGxvYWRfY2F0ZWdvcnlfbmFtZX08L3A+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeWRlc2MnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRjYXRlZ29yeS51cGxvYWRfY2F0ZWdvcnlfZGVzY3JpcHRpb259PC9wPgogIDwvZGl2PgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY2F0ZWdvcnlwYXRoJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskY2F0ZWdvcnkudXBsb2FkX2NhdGVnb3J5X3BhdGh9PC9wPgogIDwvZGl2PgogIDwvZmllbGRzZXQ+CiAgPGJyLz4KIAogIDxmaWVsZHNldD4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCdkZXN0aW5hdGlvbicpfTombmJzcDs8L2xlZ2VuZD4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2NhdGVnb3J5bmFtZScpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9Y2F0ZWdvcnlfbmFtZSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0iQ29weSBvZiB7JGNhdGVnb3J5LnVwbG9hZF9jYXRlZ29yeV9uYW1lfSIvPgogICAgICA8YnIvPgogICAgICB7JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeW5hbWUnKX0KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeWRlc2MnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhdGVnb3J5X2Rlc2MiIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9InskY2F0ZWdvcnkudXBsb2FkX2NhdGVnb3J5X2Rlc2NyaXB0aW9ufSIvPgogICAgICA8YnIvPgogICAgICB7JG1vZC0+TGFuZygnaW5mb19jYXRlZ29yeWRlc2MnKX0KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9jYXRlZ29yeXBhdGgnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhdGVnb3J5X3BhdGgiIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9InskY2F0ZWdvcnkudXBsb2FkX2NhdGVnb3J5X3BhdGh9X2NvcHkiLz4KICAgICAgPGJyLz4KICAgICAgeyRtb2QtPkxhbmcoJ2luZm9fY2F0ZWdvcnlwYXRoJyl9CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfY29weV9maWxlcycpfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1jb3B5ZmlsZXMiIHZhbHVlPSIwIi8+CiAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1jb3B5ZmlsZXMiIHZhbHVlPSIxIiBjaGVja2VkPSJjaGVja2VkIi8+CiAgICAgIDxici8+CiAgICAgIHskbW9kLT5MYW5nKCdpbmZvX2NvcHlfZmlsZXMnKX0KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIgLz4KICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9IiAvPgogICAgPC9wPgogIDwvZGl2PgogIDwvZmllbGRzZXQ+CnskZm9ybWVuZH0K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_email_template_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGZpZWxkc2V0Pgo8bGVnZW5kPnskcHJvbXB0X3NlbmRmaWxlX2VtYWlsX3RlbXBsYXRlfTwvbGVnZW5kPgp7JGZvcm1zdGFydDJ9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzZW5kZmlsZV9lbWFpbF90ZW1wbGF0ZX08YnIvPnskZGVmYXVsdDJ9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdDJ9PC9wPgo8L2Rpdj4KeyRmb3JtZW5kMn0KPC9maWVsZHNldD4KCjxici8+Cgo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRwcm9tcHRfbm90aWZ5X2VtYWlsX3RlbXBsYXRlfTwvbGVnZW5kPgp7JGZvcm1zdGFydDF9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRub3RpZnlfZW1haWxfdGVtcGxhdGV9PGJyLz57JGRlZmF1bHQxfTwvcD4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij4mbmJzcDs8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRzdWJtaXQxfTwvcD4KPC9kaXY+CnskZm9ybWVuZDF9CjwvZmllbGRzZXQ+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_fields_tab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmIGlzc2V0KCRmaWVsZHMpfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIGNtc19zb3J0YWJsZSB0YWJsZXNvcnRlciIgY2VsbHNwYWNpbmc9IjAiPgogICAgPHRoZWFkPgogICAgICA8dHI+CiAgICAgICAgPHRoPnskbW9kLT5MYW5nKCdpZCcpfTwvdGg+CiAgICAgICAgPHRoPnskbW9kLT5MYW5nKCduYW1lJyl9PC90aD4KICAgICAgICA8dGg+eyRtb2QtPkxhbmcoJ3R5cGUnKX08L3RoPgogICAgICAgIDx0aCBjbGFzcz0ie2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSBwYWdlaWNvbiI+PC90aD4KICAgICAgICA8dGggY2xhc3M9IntsaXRlcmFsfXtzb3J0ZXI6IGZhbHNlfXsvbGl0ZXJhbH0gcGFnZWljb24iPjwvdGg+CiAgICAgICAgPHRoIGNsYXNzPSJ7bGl0ZXJhbH17c29ydGVyOiBmYWxzZX17L2xpdGVyYWx9IHBhZ2VpY29uIj48L3RoPgogICAgICAgIDx0aCBjbGFzcz0ie2xpdGVyYWx9e3NvcnRlcjogZmFsc2V9ey9saXRlcmFsfSBwYWdlaWNvbiI+PC90aD4KICAgICAgPC90cj4KICAgIDwvdGhlYWQ+CiAgICA8dGJvZHk+CiAgICB7Zm9yZWFjaCBmcm9tPSRmaWVsZHMgaXRlbT0nb25lZmllbGQnfQogICAgICB7Y3ljbGUgdmFsdWVzPSJyb3cxLHJvdzIiIGFzc2lnbj0ncm93Y2xhc3MnfQogICAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPgogICAgICAgIDx0ZD57JG9uZWZpZWxkLmlkfTwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9Inskb25lZmllbGQuZWRpdF91cmx9IiB0aXRsZT0ieyRtb2QtPkxhbmcoJ2VkaXRfdGhpc19maWVsZCcpfSI+eyRvbmVmaWVsZC5uYW1lfTwvYT48L3RkPgogICAgICAgIDx0ZD57JGZpZWxkdHlwZXNbJG9uZWZpZWxkLnR5cGVdfTwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAge2lmIGlzc2V0KCRvbmVmaWVsZC5tb3ZlZG93bl91cmwpfQogICAgICAgICAgICA8YSBocmVmPSJ7JG9uZWZpZWxkLm1vdmVkb3duX3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnbW92ZV9kb3duJyl9Ij57Y2dpbWFnZSBpbWFnZT0naWNvbnMvc3lzdGVtL3NvcnRfZG93bi5naWYnIGFsdD0kbW9kLT5MYW5nKCdkb3duJyl9PC9hPgogICAgICAgICAgey9pZn0KICAgICAgICA8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIHtpZiBpc3NldCgkb25lZmllbGQubW92ZXVwX3VybCl9CiAgICAgICAgICAgIDxhIGhyZWY9Inskb25lZmllbGQubW92ZXVwX3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnbW92ZV91cCcpfSI+e2NnaW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9zb3J0X3VwLmdpZicgYWx0PSRtb2QtPkxhbmcoJ3VwJyl9PC9hPgogICAgICAgICAgey9pZn0KICAgICAgICA8L3RkPgogICAgICAgIDx0ZD48YSBocmVmPSJ7JG9uZWZpZWxkLmVkaXRfdXJsfSIgdGl0bGU9InskbW9kLT5MYW5nKCdlZGl0X3RoaXNfZmllbGQnKX0iPntjZ2ltYWdlIGltYWdlPSdpY29ucy9zeXN0ZW0vZWRpdC5naWYnIGFsdD0kbW9kLT5MYW5nKCdlZGl0Jyl9PC9hPjwvdGQ+CiAgICAgICAgPHRkPjxhIGhyZWY9Inskb25lZmllbGQuZGVsZXRlX3VybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnZGVsZXRlX3RoaXNfZmllbGQnKX0iIG9uY2xpY2s9InJldHVybiBjb25maXJtKCd7JG1vZC0+TGFuZygnYXNrX2RlbGV0ZV9maWVsZCcpfScpOyI+e2NnaW1hZ2UgaW1hZ2U9J2ljb25zL3N5c3RlbS9kZWxldGUuZ2lmJyBhbHQ9JG1vZC0+TGFuZygnZGVsZXRlJyl9PC9hPjwvdGQ+CiAgICAgIDwvdHI+CiAgICB7L2ZvcmVhY2h9CiAgICA8L3Rib2R5PgogIDwvdGFibGU+CjwvZGl2Pgp7L2lmfQoKPHAgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgeyRhZGRmaWVsZF9saW5rfQo8L3A+]]></data>
	</file>
	<file>
	  <filename>/templates/admin_manage_timelimited.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskbW9kLT5MYW5nKCdtYW5hZ2VfdGltZWxpbWl0ZWQnKX08L2gzPgo8aDQ+eyRtb2QtPkxhbmcoJ2ZpbGVfaW5mbzInLCR1cGxvYWQudXBsb2FkX25hbWUsJHVwbG9hZC51cGxvYWRfaWQpfTwvaDQ+Cjxici8+Cgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CnskYmFja19saW5rfQo8L2Rpdj4KCntpZiBpc3NldCgkZGF0YSl9Cjx0YWJsZSBjbGFzcz0icGFnZXRhYmxlIiBjZWxsc3BhY2luZz0iMCI+CiAgPHRoZWFkPgogICAgPHRyPgogICAgICA8dGg+eyRtb2QtPkxhbmcoJ2VtYWlsX2FkZHJlc3MnKX08L3RoPgogICAgICA8dGg+eyRtb2QtPkxhbmcoJ3VybF9rZXknKX08L3RoPgogICAgICA8dGg+eyRtb2QtPkxhbmcoJ2NyZWF0ZWQnKX08L3RoPgogICAgICA8dGg+eyRtb2QtPkxhbmcoJ2V4cGlyZXMnKX08L3RoPgogICAgICA8dGg+eyRtb2QtPkxhbmcoJ2Rvd25sb2FkcycpfTwvdGg+CiAgICAgIDx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CiAgICA8L3RyPgogIDwvdGhlYWQ+CiAgPHRib2R5PgogIHtmb3JlYWNoIGZyb209JGRhdGEgaXRlbT0nb3RsJ30KICAgIHtjeWNsZSB2YWx1ZXM9J3JvdzEscm93MicgYXNzaWduPSdyb3djbGFzcyd9CiAgICA8dHIgY2xhc3M9Inskcm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9aG92ZXInOyIgb25tb3VzZW91dD0idGhpcy5jbGFzc05hbWU9J3skcm93Y2xhc3N9JzsiPgogICAgICA8dGQ+eyRvdGwuZW1haWx9PC90ZD4KICAgICAgPHRkPjxhIGhyZWY9Inskb3RsLmRvd25sb2FkX3VybH0iPnskb3RsLnVybF9rZXl9PC9hPjwvdGQ+CiAgICAgIDx0ZD57JG90bC5jcmVhdGVkfGNtc19kYXRlX2Zvcm1hdH08L3RkPgogICAgICA8dGQ+eyRvdGwuZXhwaXJlc3xjbXNfZGF0ZV9mb3JtYXR9PC90ZD4KICAgICAgPHRkPnskb3RsLmRvd25sb2Fkc30gLyB7JG90bC5tYXhfZG93bmxvYWRzfTwvdGQ+CiAgICAgIDx0ZD57JG90bC5kZWxldGVfbGlua30KICAgIDwvdHI+CiAgey9mb3JlYWNofQogIDwvdGJvZHk+CjwvdGFibGU+CnsvaWZ9CjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KIHskYWRka2V5X2xpbmt9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_reportstab.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdj4Ke2ZvcmVhY2ggZnJvbT0kbGlua3MgaXRlbT0nb25lJ30KICA8ZGl2IHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDQ1JTsiPgogICAgPGEgaHJlZj0ieyRvbmUudXJsfSI+CiAgICAgIDxzcGFuIHN0eWxlPSJ2ZXJ0aWNhbC1hbGlnbjogY2VudGVyOyI+e2lmIGlzc2V0KCRvbmUuaWNvbil9eyRvbmUuaWNvbn17ZWxzZX17JHJlcG9ydF9pY29ufXsvaWZ9PC9zcGFuPiZuYnNwOwogICAgICB7JG9uZS50aXRsZX0KICAgIDwvYT4KICA8L2Rpdj4Key9mb3JlYWNofQogIDxkaXYgc3R5bGU9ImNsZWFyOiBib3RoOyI+PC9kaXY+CjwvZGl2Pg==]]></data>
	</file>
	<file>
	  <filename>/templates/admin_report_downloadsbyfile.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBzcGxpdCggdmFsICkgewogIHJldHVybiB2YWwuc3BsaXQoIC8sXHMqLyApOwp9CmZ1bmN0aW9uIGV4dHJhY3RMYXN0KCB0ZXJtICkgewogIHJldHVybiBzcGxpdCggdGVybSApLnBvcCgpOwp9CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgJCgnI3JlcG9ydF90eXBlJykuYmluZCgnY2hhbmdlJyxmdW5jdGlvbihlKXsKICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogIH0pOwogIHZhciB2ID0gJCgnI291dHB1dF90eXBlJykudmFsKCk7CiAgaWYoIHYgIT0gJ2NzdicgKSAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5zaG93KCk7CiAgCiAgJCgnI291dHB1dF90eXBlJykuYmluZCgnY2hhbmdlJyxmdW5jdGlvbihlKXsKICAgIHZhciB2ID0gJCh0aGlzKS52YWwoKTsKICAgIGlmKCB2ID09ICdjc3YnICkgewogICAgICAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5oaWRlKCk7CiAgICB9IGVsc2UgewogICAgICAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5zaG93KCk7CiAgICB9CiAgfSk7CgovKgogICQoJyNyZXBvcnRfZG93bmxvYWRzYnlmaWxlIGZvcm0nKS5iaW5kKCdzdWJtaXQnLGZ1bmN0aW9uKGUpewogICAgdmFyIHYgPSAkKCcjb3V0cHV0X3R5cGUnKS52YWwoKTsKICAgICQoJ1tuYW1lJD1zdWJtaXRdJykuZmFkZU91dCgpOwogICAgJCgnW25hbWUkPWNhbmNlbF0nKS5mYWRlT3V0KCk7CiAgICAkKCdbbmFtZSQ9Y2FuY2VsXScpLmF0dHIoJ3ZhbHVlJywneyRtb2QtPmxhbmcoJ2Nsb3NlJyl9Jyk7CiAgICAkKCdbbmFtZSQ9Y2FuY2VsXScpLmJ1dHRvbiggJ29wdGlvbicsICdsYWJlbCcsICd7JG1vZC0+TGFuZygnY2xvc2UnKX0nKTsKICAgICQoJ1tuYW1lJD1jYW5jZWxdJykuZmFkZUluKCk7CiAgICBpZiggdiA9PSAnaHRtbCcgKSB7CiAgICAgIC8vd2luZG93Lm9wZW4oJycsICdfYmxhbmsnLCAnd2lkdGg9NDAwLGhlaWdodD00MDAscmVzaXplYWJsZT15ZXMsc2Nyb2xsYmFycz15ZXMnLGZhbHNlKTsKICAgICAgdGhpcy50YXJnZXQgPSAnX2JsYW5rJzsKICAgIH0KICB9KTsKKi8KCiAgJCgnI2FqYXhfZmV1X3VzZXJzJykuYmluZCgna2V5ZG93bicsZnVuY3Rpb24oZSl7CiAgICBpZiAoIGUua2V5Q29kZSA9PT0gJC51aS5rZXlDb2RlLlRBQiAmJgogICAgICAkKCB0aGlzICkuZGF0YSggInVpLWF1dG9jb21wbGV0ZSIgKS5tZW51LmFjdGl2ZSApIHsKICAgICAgZS5wcmV2ZW50RGVmYXVsdCgpOwogICAgfQogIH0pCiAgLmF1dG9jb21wbGV0ZSh7CiAgICBmb2N1czogZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICBzZWFyY2g6IGZ1bmN0aW9uKCkgewogICAgICAvLyBjdXN0b20gbWlubGVuZ3RoCiAgICAgIHZhciB0ZXJtID0gZXh0cmFjdExhc3QodGhpcy52YWx1ZSk7CiAgICAgIGlmKCB0ZXJtLmxlbmd0aCA8IDIgKSByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgc2VsZWN0OiBmdW5jdGlvbihldmVudCx1aSkgewogICAgICB2YXIgdGVybXMgPSBzcGxpdCggdGhpcy52YWx1ZSApOwogICAgICAvLyByZW1vdmUgdGhlIGN1cnJlbnQgaW5wdXQKICAgICAgdGVybXMucG9wKCk7CiAgICAgIC8vIGFkZCB0aGUgc2VsZWN0ZWQgaXRlbQogICAgICB0ZXJtcy5wdXNoKCB1aS5pdGVtLnZhbHVlICk7CiAgICAgIC8vIGFkZCBwbGFjZWhvbGRlciB0byBnZXQgdGhlIGNvbW1hLWFuZC1zcGFjZSBhdCB0aGUgZW5kCiAgICAgIHRlcm1zLnB1c2goICIiICk7CiAgICAgIHRoaXMudmFsdWUgPSB0ZXJtcy5qb2luKCAiLCAiICk7CiAgICAgIHJldHVybiBmYWxzZTsgICAgICAgCiAgICB9LAogICAgc291cmNlOiBmdW5jdGlvbihyZXF1ZXN0LHJlc3BvbnNlKXsgCQogICAgICAkLmFqYXgoewogICAgICAgIHVybDogJ3skdXJsX2FqYXhfZmV1X3VzZXJzfScsCiAgICAgICAgZGF0YTogeyAneyRhY3Rpb25pZH1qc29uJzogMSwgJ3skYWN0aW9uaWR9dGVybSc6IGV4dHJhY3RMYXN0KHJlcXVlc3QudGVybSkgfSwKCXN1Y2Nlc3M6IGZ1bmN0aW9uKCBkYXRhLCB0ZXh0U3RhdHVzICkgewogICAgICAgICAgdmFyIHBvc3NpYmxlID0gW107CiAgICAgICAgICAkLmVhY2goIGRhdGEsIGZ1bmN0aW9uKGksIHZhbCkgewogICAgICAgICAgICBwb3NzaWJsZS5wdXNoKHZhbCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJlc3BvbnNlKHBvc3NpYmxlKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0pOwoKCiAgJCgnI2FqYXhfZmlsZXMnKS5iaW5kKCdrZXlkb3duJyxmdW5jdGlvbihlKXsKICAgIGlmICggZS5rZXlDb2RlID09PSAkLnVpLmtleUNvZGUuVEFCICYmCiAgICAgICQoIHRoaXMgKS5kYXRhKCAidWktYXV0b2NvbXBsZXRlIiApLm1lbnUuYWN0aXZlICkgewogICAgICBlLnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfSkKICAuYXV0b2NvbXBsZXRlKHsKICAgIGZvY3VzOiBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIHNlYXJjaDogZnVuY3Rpb24oKSB7CiAgICAgIC8vIGN1c3RvbSBtaW5sZW5ndGgKICAgICAgdmFyIHRlcm0gPSBleHRyYWN0TGFzdCh0aGlzLnZhbHVlKTsKICAgICAgaWYoIHRlcm0ubGVuZ3RoIDwgMiApIHJldHVybiBmYWxzZTsKICAgIH0sCiAgICBzZWxlY3Q6IGZ1bmN0aW9uKGV2ZW50LHVpKSB7CiAgICAgIHZhciB0ZXJtcyA9IHNwbGl0KCB0aGlzLnZhbHVlICk7CiAgICAgIC8vIHJlbW92ZSB0aGUgY3VycmVudCBpbnB1dAogICAgICB0ZXJtcy5wb3AoKTsKICAgICAgLy8gYWRkIHRoZSBzZWxlY3RlZCBpdGVtCiAgICAgIHRlcm1zLnB1c2goIHVpLml0ZW0udmFsdWUgKTsKICAgICAgLy8gYWRkIHBsYWNlaG9sZGVyIHRvIGdldCB0aGUgY29tbWEtYW5kLXNwYWNlIGF0IHRoZSBlbmQKICAgICAgdGVybXMucHVzaCggIiIgKTsKICAgICAgdGhpcy52YWx1ZSA9IHRlcm1zLmpvaW4oICIsICIgKTsKICAgICAgcmV0dXJuIGZhbHNlOyAgICAgICAKICAgIH0sCiAgICBzb3VyY2U6IGZ1bmN0aW9uKHJlcXVlc3QscmVzcG9uc2UpeyAJCiAgICAgICQuYWpheCh7CiAgICAgICAgdXJsOiAneyR1cmxfYWpheF9maWxlc30nLAogICAgICAgIGRhdGE6IHsgJ3skYWN0aW9uaWR9anNvbic6IDEsICd7JGFjdGlvbmlkfXRlcm0nOiBleHRyYWN0TGFzdChyZXF1ZXN0LnRlcm0pIH0sCglzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSwgdGV4dFN0YXR1cyApIHsKICAgICAgICAgIGlmKCBkYXRhLmxlbmd0aCA+IDAgKSB7CiAgICAgICAgICAgIHZhciBwb3NzaWJsZSA9IFtdOwogICAgICAgICAgICAkLmVhY2goIGRhdGEsIGZ1bmN0aW9uKGksIHZhbCkgewogICAgICAgICAgICAgIHBvc3NpYmxlLnB1c2godmFsKTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIHJlc3BvbnNlKHBvc3NpYmxlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0pOwp9KTsKCnskZXh0cmFqc3xkZWZhdWx0OicnfQo8L3NjcmlwdD4KCjxoMz57JG1vZC0+TGFuZygndGl0bGVfcmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZTInKX08L2gzPgoKPGRpdiBpZD0icmVwb3J0X2Rvd25sb2Fkc2J5ZmlsZSI+CnskZm9ybXN0YXJ0fQo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygnZmlsdGVyJyl9OjwvbGVnZW5kPgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfcmVwb3J0X3R5cGUnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1yZXBvcnRfdHlwZSIgaWQ9InJlcG9ydF90eXBlIj4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRyZXBvcnRfdHlwZXMgc2VsZWN0ZWQ9JHByb2ZpbGUucmVwb3J0X3R5cGV9CiAgICAgIDwvc2VsZWN0PgogICAgPC9wPgogIDwvZGl2PgoKICA8dGFibGUgc3R5bGU9Im1hcmdpbi10b3A6IDFlbTsgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBibGFjazsiPgogICAgPHRyPgogICAgICA8dGQgdmFsaWduPSJ0b3AiPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdjYXRlZ29yaWVzJyl9OjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9Y2F0ZWdvcmllc1tdIiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjUiPgogICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kdXBsb2FkX2NhdGVnb3JpZXMgc2VsZWN0ZWQ9JHByb2ZpbGUuY2F0ZWdvcmllc30KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZD4KCiAgICAgIDx0ZCB2YWxpZ249Im1pZGRsZSIgc3R5bGU9InBhZGRpbmc6IDFlbTsiPgogICAgICAgIHskbW9kLT5MYW5nKCdvcicpfQogICAgICA8L3RkPgoKICAgICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2ZpbGVzJyl9OjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9InRhX3Jlc2l6YWJsZSIgaWQ9ImFqYXhfZmlsZXMiIG5hbWU9InskYWN0aW9uaWR9ZmlsZXMiPnskcHJvZmlsZS5maWxlc308L3RleHRhcmVhPgogICAgICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2ZpZWxkX2ZpbGVzJyl9CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGQ+CgogICAgPC90cj4KICA8L3RhYmxlPgoKICA8dGFibGUgc3R5bGU9Im1hcmdpbi10b3A6IDFlbTsgYm9yZGVyLXRvcDogMXB4IGRhc2hlZCBibGFjazsiPgogIDx0cj4KICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZmV1X2dyb3VwcycpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1mZXVfZ3JvdXBzW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+CiAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRmZXVfZ3JvdXBzIHNlbGVjdGVkPSRwcm9maWxlLmZldV9ncm91cHN9CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPC90ZD4KCiAgICA8dGQgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJwYWRkaW5nOiAxZW07Ij4KICAgICAgeyRtb2QtPkxhbmcoJ29yJyl9CiAgICA8L3RkPgoKICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZmV1X3VzZXJzJyl9OjwvcD4KICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJ0YV9yZXNpemFibGUiIGlkPSJhamF4X2ZldV91c2VycyIgbmFtZT0ieyRhY3Rpb25pZH1mZXVfdXNlcnMiPnskcHJvZmlsZS5mZXVfdXNlcnN9PC90ZXh0YXJlYT4KICAgICAgICA8YnIvPnskbW9kLT5MYW5nKCdpbmZvX2ZldV91c2VycycpfQogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDwvdGQ+CiAgPC90cj4KIDwvdGFibGU+CgogPHRhYmxlIHdpZHRoPSIxMDAlIiBzdHlsZT0ibWFyZ2luLXRvcDogMWVtOyBib3JkZXItdG9wOiAxcHggZGFzaGVkIGJsYWNrOyI+CiAgPHRyPgogICAgPHRkIHdpZHRoPSI1MCUiIHN0eWxlPSJwYWRkaW5nOiAxZW07Ij4KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9zdGFydF9kYXRlJyl9OjwvcD4KICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2h0bWxfc2VsZWN0X2RhdGUgdGltZT0kcHJvZmlsZS5zdGFydF9kYXRlIHN0YXJ0X3llYXI9Ii0xMCIgZW5kX3llYXI9IisyIiBwcmVmaXg9InskYWN0aW9uaWR9c3RhcnRfZGF0ZSJ9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPC90ZD4KCiAgICA8dGQgd2lkdGg9IjUwJSIgc3R5bGU9InBhZGRpbmc6IDFlbTsiPgogICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X2VuZF9kYXRlJyl9OjwvcD4KICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAge2h0bWxfc2VsZWN0X2RhdGUgdGltZT0kcHJvZmlsZS5lbmRfZGF0ZSBzdGFydF95ZWFyPSItMTAiIGVuZF95ZWFyPSIrMiIgcHJlZml4PSJ7JGFjdGlvbmlkfWVuZF9kYXRlIn0KICAgICAgPC9wPgogICAgPC9kaXY+CiAgICA8L3RkPgogICA8L3RyPgogPC90YWJsZT4KPC9maWVsZHNldD4KCjxmaWVsZHNldD4KICA8bGVnZW5kPnskbW9kLT5MYW5nKCd2aWV3Jyl9OjwvbGVnZW5kPgogIDx0YWJsZT4KICAgIDx0cj4KICAgICAgPHRkIHdpZHRoPSIzMyUiIHZhbGlnbj0idG9wIiBzdHlsZT0icGFkZGluZzogMWVtOyI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9maWVsZGxpc3QnKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH12aWV3X2ZpZWxkc1tdIiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjUiPgogICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZpZWxkbGlzdCBzZWxlY3RlZD0kcHJvZmlsZS52aWV3X2ZpZWxkc30KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iMzMlIiB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmc6IDFlbTsiPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc29ydGluZycpfTo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfXZpZXdfc29ydGluZyIgc2l6ZT0iNSI+CiAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kc29ydGxpc3Qgc2VsZWN0ZWQ9JHByb2ZpbGUudmlld19zb3J0aW5nfQogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZD4KICAgICAgPHRkIHdpZHRoPSIzMyUiIHZhbGlnbj0idG9wIiBzdHlsZT0icGFkZGluZzogMWVtOyI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9zb3J0b3JkZXInKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH12aWV3X3NvcnRvcmRlciIgc2l6ZT0iMyI+CiAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kc29ydG9yZGVycyBzZWxlY3RlZD0kcHJvZmlsZS52aWV3X3NvcnRvcmRlcn0KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CjwvZmllbGRzZXQ+Cgo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygnb3V0cHV0Jyl9OjwvbGVnZW5kPgogIDx0YWJsZSB3aWR0aD0iMTAwJSI+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMjAlIj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X291dHB1dCcpfTo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfW91dHB1dF90eXBlIiBpZD0ib3V0cHV0X3R5cGUiPgogICAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kb3V0cHV0X3R5cGVzIHNlbGVjdGVkPSRwcm9maWxlLm91dHB1dF90eXBlfQogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZD4KICAgICAgPHRkPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgaWQ9Im91dHB1dF90ZW1wbGF0ZV93cmFwIiBzdHlsZT0iZGlzcGxheTogbm9uZTsiPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X291dHB1dF90ZW1wbGF0ZScpfTo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfW91dHB1dF90ZW1wbGF0ZSIgaWQ9Im91dHB1dF90ZW1wbGF0ZSI+CiAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvdXRwdXRfdGVtcGxhdGVzIHNlbGVjdGVkPSRwcm9maWxlLm91dHB1dF90ZW1wbGF0ZX0KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGQ+CiAgICA8L3RyPgogIDwvdGFibGU+CjwvZmllbGRzZXQ+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+PC9wPgogIDxwIGNsYXNzPSJwYWdlc3VibWl0Ij4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQo8L2Rpdj4K]]></data>
	</file>
	<file>
	  <filename>/templates/admin_report_downloadsbyuser.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgpmdW5jdGlvbiBzcGxpdCggdmFsICkgewogIHJldHVybiB2YWwuc3BsaXQoIC8sXHMqLyApOwp9CmZ1bmN0aW9uIGV4dHJhY3RMYXN0KCB0ZXJtICkgewogIHJldHVybiBzcGxpdCggdGVybSApLnBvcCgpOwp9CiQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7CiAgJCgnI3JlcG9ydF90eXBlJykuYmluZCgnY2hhbmdlJyxmdW5jdGlvbihlKXsKICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogIH0pOwogIHZhciB2ID0gJCgnI291dHB1dF90eXBlJykudmFsKCk7CiAgaWYoIHYgIT0gJ2NzdicgKSAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5zaG93KCk7CiAgCiAgJCgnI291dHB1dF90eXBlJykuYmluZCgnY2hhbmdlJyxmdW5jdGlvbihlKXsKICAgIHZhciB2ID0gJCh0aGlzKS52YWwoKTsKICAgIGlmKCB2ID09ICdjc3YnICkgewogICAgICAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5oaWRlKCk7CiAgICB9IGVsc2UgewogICAgICAkKCcjb3V0cHV0X3RlbXBsYXRlX3dyYXAnKS5zaG93KCk7CiAgICB9CiAgfSk7CgovKgogICQoJyNyZXBvcnRfZG93bmxvYWRzYnl1c2VyIGZvcm0nKS5iaW5kKCdzdWJtaXQnLGZ1bmN0aW9uKGUpewogICAgdmFyIHYgPSAkKCcjb3V0cHV0X3R5cGUnKS52YWwoKTsKICAgICQoJ1tuYW1lJD1zdWJtaXRdJykuZmFkZU91dCgpOwogICAgJCgnW25hbWUkPWNhbmNlbF0nKS5mYWRlT3V0KCk7CiAgICAkKCdbbmFtZSQ9Y2FuY2VsXScpLmF0dHIoJ3ZhbHVlJywneyRtb2QtPmxhbmcoJ2Nsb3NlJyl9Jyk7CiAgICAkKCdbbmFtZSQ9Y2FuY2VsXScpLmJ1dHRvbiggJ29wdGlvbicsICdsYWJlbCcsICd7JG1vZC0+TGFuZygnY2xvc2UnKX0nKTsKICAgICQoJ1tuYW1lJD1jYW5jZWxdJykuZmFkZUluKCk7CiAgICBpZiggdiA9PSAnaHRtbCcgKSB7CiAgICAgIAogICAgICB3aW5kb3cub3BlbignJywgJ19ibGFuaycsICd3aWR0aD00MDAsaGVpZ2h0PTQwMCxyZXNpemVhYmxlPXllcyxzY3JvbGxiYXJzPXllcycsZmFsc2UpOwogICAgICAvL3RoaXMudGFyZ2V0ID0gJ19ibGFuayc7CiAgICB9CiAgfSk7CiovCgogICQoJyNhamF4X2ZldV91c2VycycpLmJpbmQoJ2tleWRvd24nLGZ1bmN0aW9uKGUpewogICAgaWYgKCBlLmtleUNvZGUgPT09ICQudWkua2V5Q29kZS5UQUIgJiYKICAgICAgJCggdGhpcyApLmRhdGEoICJ1aS1hdXRvY29tcGxldGUiICkubWVudS5hY3RpdmUgKSB7CiAgICAgIGUucHJldmVudERlZmF1bHQoKTsKICAgIH0KICB9KQogIC5hdXRvY29tcGxldGUoewogICAgZm9jdXM6IGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gZmFsc2U7CiAgICB9LAogICAgc2VhcmNoOiBmdW5jdGlvbigpIHsKICAgICAgLy8gY3VzdG9tIG1pbmxlbmd0aAogICAgICB2YXIgdGVybSA9IGV4dHJhY3RMYXN0KHRoaXMudmFsdWUpOwogICAgICBpZiggdGVybS5sZW5ndGggPCAyICkgcmV0dXJuIGZhbHNlOwogICAgfSwKICAgIHNlbGVjdDogZnVuY3Rpb24oZXZlbnQsdWkpIHsKICAgICAgdmFyIHRlcm1zID0gc3BsaXQoIHRoaXMudmFsdWUgKTsKICAgICAgLy8gcmVtb3ZlIHRoZSBjdXJyZW50IGlucHV0CiAgICAgIHRlcm1zLnBvcCgpOwogICAgICAvLyBhZGQgdGhlIHNlbGVjdGVkIGl0ZW0KICAgICAgdGVybXMucHVzaCggdWkuaXRlbS52YWx1ZSApOwogICAgICAvLyBhZGQgcGxhY2Vob2xkZXIgdG8gZ2V0IHRoZSBjb21tYS1hbmQtc3BhY2UgYXQgdGhlIGVuZAogICAgICB0ZXJtcy5wdXNoKCAiIiApOwogICAgICB0aGlzLnZhbHVlID0gdGVybXMuam9pbiggIiwgIiApOwogICAgICByZXR1cm4gZmFsc2U7ICAgICAgIAogICAgfSwKICAgIHNvdXJjZTogZnVuY3Rpb24ocmVxdWVzdCxyZXNwb25zZSl7IAkKICAgICAgJC5hamF4KHsKICAgICAgICB1cmw6ICd7JHVybF9hamF4X2ZldV91c2Vyc30nLAogICAgICAgIGRhdGE6IHsgJ3skYWN0aW9uaWR9anNvbic6IDEsICd7JGFjdGlvbmlkfXRlcm0nOiBleHRyYWN0TGFzdChyZXF1ZXN0LnRlcm0pIH0sCglzdWNjZXNzOiBmdW5jdGlvbiggZGF0YSwgdGV4dFN0YXR1cyApIHsKICAgICAgICAgIHZhciBwb3NzaWJsZSA9IFtdOwogICAgICAgICAgJC5lYWNoKCBkYXRhLCBmdW5jdGlvbihpLCB2YWwpIHsKICAgICAgICAgICAgcG9zc2libGUucHVzaCh2YWwpOwogICAgICAgICAgfSk7CiAgICAgICAgICByZXNwb25zZShwb3NzaWJsZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICB9KTsKfSk7Cgp7JGV4dHJhanN8ZGVmYXVsdDonJ30KPC9zY3JpcHQ+Cgo8aDM+eyRtb2QtPkxhbmcoJ3RpdGxlX3JlcG9ydF9kb3dubG9hZHNieXVzZXIyJyl9PC9oMz4KCjxkaXYgaWQ9InJlcG9ydF9kb3dubG9hZHNieXVzZXIiPgp7JGZvcm1zdGFydH0KPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2ZpbHRlcicpfTo8L2xlZ2VuZD4KICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3JlcG9ydF90eXBlJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9cmVwb3J0X3R5cGUiIGlkPSJyZXBvcnRfdHlwZSI+CiAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kcmVwb3J0X3R5cGVzIHNlbGVjdGVkPSRwcm9maWxlLnJlcG9ydF90eXBlfQogICAgICA8L3NlbGVjdD4KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2NhdGVnb3JpZXMnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1jYXRlZ29yaWVzW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+CiAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kdXBsb2FkX2NhdGVnb3JpZXMgc2VsZWN0ZWQ9JHByb2ZpbGUuY2F0ZWdvcmllc30KICAgICAgPC9zZWxlY3Q+CiAgICA8L3A+CiAgPC9kaXY+CgogIDx0YWJsZSBzdHlsZT0ibWFyZ2luLXRvcDogMWVtOyBib3JkZXItdG9wOiAxcHggZGFzaGVkIGJsYWNrOyI+CiAgPHRyPgogICAgPHRkIHZhbGlnbj0idG9wIj4KICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZmV1X2dyb3VwcycpfTo8L3A+CiAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9ZmV1X2dyb3Vwc1tdIiBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjUiPgogICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRmZXVfZ3JvdXBzIHNlbGVjdGVkPSRwcm9maWxlLmZldV9ncm91cHN9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICA8L3A+CiAgICAgIDwvZGl2PgogICAgPC90ZD4KCiAgICA8dGQgdmFsaWduPSJtaWRkbGUiIHN0eWxlPSJwYWRkaW5nOiAxZW07Ij4KICAgICAgeyRtb2QtPkxhbmcoJ29yJyl9CiAgICA8L3RkPgoKICAgIDx0ZCB2YWxpZ249InRvcCI+CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyIgc3R5bGU9ImNsZWFyOiBub25lOyBmbG9hdDogbGVmdDsiPgogICAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9mZXVfdXNlcnMnKX06PC9wPgogICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSJ0YV9yZXNpemFibGUiIGlkPSJhamF4X2ZldV91c2VycyIgbmFtZT0ieyRhY3Rpb25pZH1mZXVfdXNlcnMiPnskcHJvZmlsZS5mZXVfdXNlcnN9PC90ZXh0YXJlYT4KICAgICAgICAgIDxici8+eyRtb2QtPkxhbmcoJ2luZm9fZmV1X3VzZXJzJyl9CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIDwvdGQ+CiAgIDwvdHI+CiA8L3RhYmxlPgoKIDx0YWJsZSBzdHlsZT0ibWFyZ2luLXRvcDogMWVtOyBib3JkZXItdG9wOiAxcHggZGFzaGVkIGJsYWNrOyB3aWR0aDogMTAwJTsiPgogIDx0cj4KICAgIDx0ZCB3aWR0aD0iNTAlIiBzdHlsZT0icGFkZGluZzogMWVtOyI+CiAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc3RhcnRfZGF0ZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtodG1sX3NlbGVjdF9kYXRlIHRpbWU9JHByb2ZpbGUuc3RhcnRfZGF0ZSBzdGFydF95ZWFyPSItMTAiIGVuZF95ZWFyPSIrMiIgcHJlZml4PSJ7JGFjdGlvbmlkfXN0YXJ0X2RhdGUifQogICAgICA8L3A+CiAgICA8L2Rpdj4KICAgIDwvdGQ+CgogICAgPHRkIHdpZHRoPSI1MCUiIHN0eWxlPSJwYWRkaW5nOiAxZW07Ij4KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9lbmRfZGF0ZScpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIHtodG1sX3NlbGVjdF9kYXRlIHRpbWU9JHByb2ZpbGUuZW5kX2RhdGUgc3RhcnRfeWVhcj0iLTEwIiBlbmRfeWVhcj0iKzIiIHByZWZpeD0ieyRhY3Rpb25pZH1lbmRfZGF0ZSJ9CiAgICAgIDwvcD4KICAgIDwvZGl2PgogICAgPC90ZD4KICAgPC90cj4KIDwvdGFibGU+CjwvZmllbGRzZXQ+Cgo8ZmllbGRzZXQ+CiAgPGxlZ2VuZD57JG1vZC0+TGFuZygndmlldycpfTo8L2xlZ2VuZD4KICA8dGFibGU+CiAgICA8dHI+CiAgICAgIDx0ZCB3aWR0aD0iMzMlIiB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmc6IDFlbTsiPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfZmllbGRsaXN0Jyl9OjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9dmlld19maWVsZHNbXSIgbXVsdGlwbGU9Im11bHRpcGxlIiBzaXplPSI1Ij4KICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRmaWVsZGxpc3Qgc2VsZWN0ZWQ9JHByb2ZpbGUudmlld19maWVsZHN9CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L3RkPgogICAgICA8dGQgd2lkdGg9IjMzJSIgdmFsaWduPSJ0b3AiIHN0eWxlPSJwYWRkaW5nOiAxZW07Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3NvcnRpbmcnKX06PC9wPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH12aWV3X3NvcnRpbmciIHNpemU9IjUiPgogICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JHNvcnRsaXN0IHNlbGVjdGVkPSRwcm9maWxlLnZpZXdfc29ydGluZ30KICAgICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgICA8L3A+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvdGQ+CiAgICAgIDx0ZCB3aWR0aD0iMzMlIiB2YWxpZ249InRvcCIgc3R5bGU9InBhZGRpbmc6IDFlbTsiPgogICAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfc29ydG9yZGVyJyl9OjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9dmlld19zb3J0b3JkZXIiIHNpemU9IjMiPgogICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JHNvcnRvcmRlcnMgc2VsZWN0ZWQ9JHByb2ZpbGUudmlld19zb3J0b3JkZXJ9CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L3RkPgogICAgPC90cj4KICA8L3RhYmxlPgo8L2ZpZWxkc2V0PgoKPGZpZWxkc2V0PgogIDxsZWdlbmQ+eyRtb2QtPkxhbmcoJ291dHB1dCcpfTo8L2xlZ2VuZD4KICA8dGFibGU+CiAgICA8dHI+CiAgICAgIDx0ZD4KICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgICAgICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X291dHB1dCcpfTo8L3A+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICAgICAgeyR0bXA9Wydjc3YnPT57JG1vZC0+TGFuZygnZXhwb3J0X2NzdicpfSwnaHRtbCc9PnskbW9kLT5MYW5nKCdleHBvcnRfaHRtbCcpfSwnaHRtbGVtYWlsJz0+eyRtb2QtPkxhbmcoJ2V4cG9ydF9odG1sZW1haWwnKX1dfQogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9b3V0cHV0X3R5cGUiIGlkPSJvdXRwdXRfdHlwZSI+CiAgICAgICAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSR0bXAgc2VsZWN0ZWQ9JHByb2ZpbGUub3V0cHV0X3R5cGV9CiAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgPC9wPgogICAgICAgIDwvZGl2PgogICAgICA8L3RkPgogICAgICA8dGQ+CiAgICAgICAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93IiBpZD0ib3V0cHV0X3RlbXBsYXRlX3dyYXAiIHN0eWxlPSJkaXNwbGF5OiBub25lOyI+CiAgICAgICAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfb3V0cHV0X3RlbXBsYXRlJyl9OjwvcD4KICAgICAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9b3V0cHV0X3RlbXBsYXRlIiBpZD0ib3V0cHV0X3RlbXBsYXRlIj4KICAgICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG91dHB1dF90ZW1wbGF0ZXMgc2VsZWN0ZWQ9JHByb2ZpbGUub3V0cHV0X3RlbXBsYXRlfQogICAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC90ZD4KICAgIDwvdHI+CiAgPC90YWJsZT4KPC9maWVsZHNldD4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij48L3A+CiAgPHAgY2xhc3M9InBhZ2VzdWJtaXQiPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXQiIHZhbHVlPSJ7JG1vZC0+TGFuZygnc3VibWl0Jyl9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWNhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/admin_upload.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNzZWxfY2F0ZWdvcnknKS5jaGFuZ2UoZnVuY3Rpb24oKXsKICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogIH0pOwp9KTsKPC9zY3JpcHQ+Cgo8aDM+eyRtb2QtPkxhbmcoJ3VwbG9hZF9maWxlJyl9PC9oMz4KCnskZm9ybXN0YXJ0fQoKe2NnZV9zdGFydF90YWJzfQp7Y2dlX3RhYmhlYWRlciBuYW1lPSdnZW5lcmFsJyBsYWJlbD0kbW9kLT5MYW5nKCdwcm9tcHRfZ2VuZXJhbCcpfQp7Y2dlX3RhYmhlYWRlciBuYW1lPSdkZXNjcmlwdGlvbicgbGFiZWw9JG1vZC0+TGFuZygnZGVzY3JpcHRpb24nKX0Ke2lmIGlzc2V0KCRmaWVsZHMpfQp7Y2dlX3RhYmhlYWRlciBuYW1lPSdmaWVsZHMnIGxhYmVsPSRtb2QtPkxhbmcoJ3Byb21wdF9maWVsZHMnKX0Key9pZn0Ke2lmIGlzc2V0KCRhbGxvd191cGxvYWRfc2VuZGZpbGUpICYmICRhbGxvd191cGxvYWRfc2VuZGZpbGUgPT0gMX0Ke2NnZV90YWJoZWFkZXIgbmFtZT0nc2VuZGZpbGUnIGxhYmVsPSRtb2QtPkxhbmcoJ3Byb21wdF9zZW5kZmlsZScpfQp7L2lmfQp7aWYgaXNzZXQoJGNhdGVnb3J5X2luZm8pICYmICRjYXRlZ29yeV9pbmZvLnVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgJiYgaXNzZXQoJGZldV9ncm91cGxpc3QpfQp7Y2dlX3RhYmhlYWRlciBuYW1lPSdwZXJtcycgbGFiZWw9JG1vZC0+TGFuZygncHJvbXB0X3Blcm1pc3Npb25zJyl9CnsvaWZ9Cgp7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0nZ2VuZXJhbCd9CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnY2F0ZWdvcnknKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWNhdGVnb3J5X2lkIiBpZD0ic2VsX2NhdGVnb3J5Ij4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRjYXRlZ29yaWVzIHNlbGVjdGVkPSRjdXJjYXRlZ29yeX0KICAgIDwvc2VsZWN0PgogIDwvcD4KPC9kaXY+Cgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3VwbG9hZCcpfTwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2Jyb3dzZSIgdmFsdWU9IiIgc2l6ZT0iODAiLz4KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCd0aHVtYm5haWwnKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF90aHVtYm5haWwiIHZhbHVlPSIiIHNpemU9IjgwIi8+CiAgICA8YnIvPgogICAgeyRtb2QtPkxhbmcoJ2luZm9fdGh1bWJuYWlsJyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnZGVzdG5hbWUnKX08L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9kZXN0bmFtZSIgdmFsdWU9InskdXBsb2FkLmRlc3RuYW1lfSIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iMjU1Ii8+CiAgICA8YnIvPgogICAgeyRtb2QtPkxhbmcoJ2luZm9fZGVzdG5hbWUnKX0KICA8L3A+CjwvZGl2PgoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdzdW1tYXJ5Jyl9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfc3VtbWFyeSIgdmFsdWU9InskdXBsb2FkLnN1bW1hcnl9IiBzaXplPSI4MCIgbWF4bGVuZ3RoPSIyNTUiLz4KICAgIDxici8+CiAgICB7JG1vZC0+TGFuZygnaW5mb19zdW1tYXJ5Jyl9CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygnYXV0aG9yJyl9OjwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2F1dGhvciIgdmFsdWU9InskdXBsb2FkLmF1dGhvcn0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPgogIDwvcD4KPC9kaXY+Cgp7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0nZGVzY3JpcHRpb24nfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2Rlc2NyaXB0aW9uJyl9PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfZGVzY3JpcHRpb24iPnskdXBsb2FkLmRlc2NyaXB0aW9ufTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCntpZiBpc3NldCgkZmllbGRzKX0Ke2NnZV90YWJjb250ZW50X3N0YXJ0IG5hbWU9J2ZpZWxkcyd9Cntmb3JlYWNoIGZyb209JGZpZWxkcyBpdGVtPSdvbmUnfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRvbmUubmFtZX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAge2lmIGlzc2V0KCRvbmUuaW5wdXQpfQogICAgICB7JG9uZS5pbnB1dH0KICAgIHtlbHNlaWYgJG9uZS50eXBlID09ICd0ZXh0aW5wdXQnfQogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1maWVsZF97JG9uZS5pZH0iIHZhbHVlPSJ7JG9uZS52YWx1ZXxkZWZhdWx0OicnfSIgc2l6ZT0ieyRvbmUuYXR0cmliLmxlbmd0aH0iIG1heGxlbmd0aD0ieyRvbmUuYXR0cmliLm1heGxlbmd0aH0iLz4KICAgIHtlbHNlaWYgJG9uZS50eXBlID09ICdjaGVja2JveCd9CiAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1maWVsZF97JG9uZS5pZH0iIHZhbHVlPSIxIntpZiAkb25lLnZhbHVlID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPgogICAge2Vsc2VpZiAkb25lLnR5cGUgPT0gJ2Ryb3Bkb3duJ30KICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWZpZWxkX3skb25lLmlkfSI+CiAgICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvbmUuYXR0cmliLm9wdGlvbnN9CiAgICAgIDwvc2VsZWN0PgogICAge2Vsc2VpZiAkb25lLnR5cGUgPT0gJ211bHRpc2VsZWN0J30KICAgICAgPHNlbGVjdCBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjQiIG5hbWU9InskYWN0aW9uaWR9ZmllbGRfeyRvbmUuaWR9W10iPgogICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kb25lLmF0dHJpYi5vcHRpb25zfQogICAgICA8L3NlbGVjdD4KICAgIHsvaWZ9CiAgPC9wPgo8L2Rpdj4Key9mb3JlYWNofQp7L2lmfQoKe2lmIGlzc2V0KCRhbGxvd191cGxvYWRfc2VuZGZpbGUpICYmICRhbGxvd191cGxvYWRfc2VuZGZpbGUgPT0gMX0Ke2NnZV90YWJjb250ZW50X3N0YXJ0IG5hbWU9J3NlbmRmaWxlJ30KPGZpZWxkc2V0Pgo8bGVnZW5kPnskbW9kLT5MYW5nKCdwcm9tcHRfdGxfYWNjZXNzJyl9OjwvbGVnZW5kPgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ2VtYWlsX2FkZHJlc3MnKX06PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGxfZW1haWwiIHZhbHVlPSIiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIvPgogIDwvcD4KPC9kaXY+CgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3RpbWVsaW1pdGVkX2hvdXJzJyl9PC9wPgogICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH10bF9ob3VycyIgdmFsdWU9InskdGxfaG91cnN9IiBzaXplPSIzIiBtYXhsZW5ndGg9IjMiLz4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3RpbWVsaW1pdGVkX2Rvd25sb2FkcycpfTwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9dGxfZG93bmxvYWRzIiB2YWx1ZT0ieyR0bF9kb3dubG9hZHN9IiBzaXplPSIzIiBtYXhsZW5ndGg9IjMiLz4KICAgPC9wPgogPC9kaXY+CgogPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JG1vZC0+TGFuZygncHJvbXB0X3RpbWVsaW1pdGVkX3NlbmRpdCcpfTwvcD4KICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH10bF9zZW5kaXQiIHZhbHVlPSIwIi8+CiAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSJ7JGFjdGlvbmlkfXRsX3NlbmRpdCIgdmFsdWU9IjEiIGNoZWNrZWQ9ImNoZWNrZWQiLz4KICAgPC9wPgogPC9kaXY+CjwvZmllbGRzZXQ+CnsvaWZ9Cgp7aWYgaXNzZXQoJGNhdGVnb3J5X2luZm8pICYmICRjYXRlZ29yeV9pbmZvLnVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgJiYgaXNzZXQoJGZldV9ncm91cGxpc3QpfQp7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0ncGVybXMnfQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wZXJtaXNzaW9ucycpfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9aW5wdXRfdXNlcnBlcm1zW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+CiAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kZmV1X2dyb3VwbGlzdCBzZWxlY3RlZD0kY2F0ZWdvcnlfaW5mby51cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtc30KICAgIDwvc2VsZWN0PgogIDwvcD4KPC9kaXY+CnsvaWZ9Cgp7Y2dlX2VuZF90YWJzfQoKPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfcmVwbGFjZSIgdmFsdWU9InskYWxsb3dfcmVwbGFjZX0iLz4KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9c3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPgogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgPC9wPgo8L2Rpdj4KeyRmb3JtZW5kfQ==]]></data>
	</file>
	<file>
	  <filename>/templates/brieflist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQgPiAwfQ0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4NCgk8dGhlYWQ+DQoJCTx0cj4NCgkJCTx0aD57JG5hbWV0ZXh0fTwvdGg+DQoJCQk8dGg+eyRhdXRob3J0ZXh0fTwvdGg+DQoJCSAgICAgICAgPHRoPnskZGF0ZXRleHR9PC90aD4NCgkJCTx0aD57JHNpemV0ZXh0fTwvdGg+CQ0KCQk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRib2R5Pg0KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9DQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4NCgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+YXV0aG9yfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+ZGF0ZX08L3RkPg0KCQkJPHRkPnskZW50cnktPnNpemV9PC90ZD4NCgkJPC90cj4NCgkJPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPg0KICAgICAgICAgICAgICAgCQk8dGQgY29sc3Bhbj0iNCI+eyRlbnRyeS0+ZGVzY3JpcHRpb259PC90ZD4gDQoJCTwvdHI+DQoJey9mb3JlYWNofQ0KCTwvdGJvZHk+DQo8L3RhYmxlPg0Key9pZn0NCg==]]></data>
	</file>
	<file>
	  <filename>/templates/categorylist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPg0Ke2xpdGVyYWx9DQpqUXVlcnkoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCl7DQogIGpRdWVyeSgnI3N1Ym1pdF9jYXRfbXVsdGlhY3Rpb24nKS5jbGljayhmdW5jdGlvbigpew0KICAgIHJldHVybiBjb25maXJtKCd7L2xpdGVyYWx9eyRtb2QtPkxhbmcoJ2NvbmZpcm1fY2F0X211bHRpYWN0aW9uJyl9e2xpdGVyYWx9Jyk7DQogIH0pOw0KICBqUXVlcnkoJyNjYXRfbXVsdGlhY3Rpb24nKS5oaWRlKCk7DQogIGpRdWVyeSgnI2NhdF9zZWxlY3RhbGwnKS5jbGljayhmdW5jdGlvbigpew0KICAgIHZhciB2YWwgPSBqUXVlcnkodGhpcykuYXR0cignY2hlY2tlZCcpOw0KICAgIGlmKCB2YWwgKSB7DQogICAgICBqUXVlcnkoJyNjYXRfbXVsdGlhY3Rpb24nKS5zaG93KCk7DQogICAgfQ0KICAgIGVsc2Ugew0KICAgICAgalF1ZXJ5KCcjY2F0X211bHRpYWN0aW9uJykuaGlkZSgpOw0KICAgIH0NCg0KICAgIGpRdWVyeSgnLmNhdF9zZWxlY3RhbGwnKS5hdHRyKCdjaGVja2VkJyx2YWwpOw0KICB9KTsNCiAgalF1ZXJ5KCcuY2F0X3NlbGVjdGFsbCcpLmNsaWNrKGZ1bmN0aW9uKCl7DQogICAgdmFyIGFueSA9IDA7DQogICAgalF1ZXJ5KCcuY2F0X3NlbGVjdGFsbCcpLmVhY2goZnVuY3Rpb24oKXsNCiAgICAgIGFueSA9IGFueSB8IGpRdWVyeSh0aGlzKS5hdHRyKCdjaGVja2VkJyk7DQogICAgfSk7DQogICAgaWYoIGFueSApIHsNCiAgICAgIGpRdWVyeSgnI2NhdF9tdWx0aWFjdGlvbicpLnNob3coKTsNCiAgICB9DQogICAgZWxzZSB7DQogICAgICBqUXVlcnkoJyNjYXRfbXVsdGlhY3Rpb24nKS5oaWRlKCk7DQogICAgfQ0KICB9KTsNCn0pOw0Key9saXRlcmFsfQ0KPC9zY3JpcHQ+DQoNCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj48cCBjbGFzcz0icGFnZW9wdGlvbnMiPnskaXRlbWNvdW50fSBDYXRlZ29yaWVzIEZvdW5kPC9wPjwvZGl2Pg0Ke2lmICRpdGVtY291bnQgPiAwfQ0KeyRmb3Jtc3RhcnR9DQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJPHRoIHdpZHRoPSIxNSUiPnskY2F0ZWdvcnl0ZXh0fTwvdGg+DQoJCQk8dGg+eyRuYW1ldGV4dH08L3RoPg0KCQkJPHRoPnskcGF0aHRleHR9PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQkJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9ImNhdF9zZWxlY3RhbGwiIHZhbHVlPSIxIi8+PC90aD4NCgkJPC90cj4NCgk8L3RoZWFkPg0KCTx0Ym9keT4NCntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9DQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4NCgkJCTx0ZD57JGVudHJ5LT5pZH08L3RkPg0KCQkJPHRkPjxzcGFuIHRpdGxlPSJ7JGVudHJ5LT5kZXNjcmlwdGlvbn0iPnskZW50cnktPm5hbWV9PC9zcGFuPjwvdGQ+DQoJCQk8dGQ+e2lmICRlbnRyeS0+ZXJyb3J9PHNwYW4gc3R5bGU9ImNvbG9yOiByZWQ7IiB0aXRsZT0ieyRtb2QtPkxhbmcoJ2Vycm9yX2NhdGVnb3J5X3Byb2JsZW1fcycpfSI+eyRlbnRyeS0+cGF0aH08L3NwYW4+e2Vsc2V9eyRlbnRyeS0+cGF0aH17L2lmfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5jb3B5bGlua308L3RkPg0KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD48aW5wdXQgdHlwZT0iY2hlY2tib3giIGNsYXNzPSJjYXRfc2VsZWN0YWxsIiB2YWx1ZT0ieyRlbnRyeS0+aWR9IiBuYW1lPSJ7JGFjdGlvbmlkfWNhdF9tdWx0aXNlbGVjdFtdIi8+PC90ZD4NCgkJPC90cj4NCnsvZm9yZWFjaH0NCgk8L3Rib2R5Pg0KPC90YWJsZT4NCnsvaWZ9DQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQogIDx0YWJsZSB3aWR0aD0iMTAwJSI+DQogICA8dHI+DQogICAgIDx0ZD57JGFkZGxpbmt9PC90ZD4NCg0KICAgICB7aWYgJGl0ZW1jb3VudCA+IDB9DQogICAgIDx0ZCBzdHlsZT0idGV4dC1hbGlnbjogcmlnaHQ7Ij4NCiAgICAgICA8ZGl2IGlkPSJjYXRfbXVsdGlhY3Rpb24iIHN0eWxlPSJ0ZXh0LWFsaWduOiByaWdodDsiPg0KICAgICAgIHskbW9kLT5MYW5nKCd3aXRoX3NlbGVjdGVkJyl9Og0KICAgICAgIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1tdWx0aWFjdGlvbiIgaWQ9ImNhdF9tdWx0aWFjdGlvbiI+DQogICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRjYXRfbXVsdGlhY3Rpb25zfQ0KICAgICAgIDwvc2VsZWN0Pg0KICAgICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIGlkPSdzdWJtaXRfY2F0X211bHRpYWN0aW9uJyBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iIC8+DQogICAgICAgPC9kaXY+DQogICAgIDwvdGQ+DQogICAgIHsvaWZ9DQogICA8L3RyPg0KICA8L3RhYmxlPg0KPC9kaXY+DQoNCntpZiAkaXRlbWNvdW50ID4gMH0NCnskZm9ybWVuZH0NCnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/templates/deletecategory.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgk8cD57JHdhcm5pbmdfZGVsZXRlY2F0ZWdvcnl9PC9wPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X2RlbGV0ZWRpcmVjdG9yeX06PC9wPgoJCTxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfZGVsZXRlZGlyZWN0b3J5fTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGhpZGRlbn17JHN1Ym1pdH08L3A+Cgk8L2Rpdj4KeyRlbmRmb3JtfQo=]]></data>
	</file>
	<file>
	  <filename>/templates/editdefaulttemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19Cgk8aDQ+eyRkZWZhdWx0dGVtcGxhdGVmb3JtX3RpdGxlfTwvaDQ+CiAgICAgICAgPGVtPnskaW5mb190aXRsZX08L2VtPjxici8+Cgk8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgoJCTxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdGVtcGxhdGV9OjwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3RlbXBsYXRlfTwvcD4KCTwvZGl2PgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCQk8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KCQk8cCBjbGFzcz0icGFnZWlucHV0Ij57JHN1Ym1pdH17JHJlc2V0fTwvcD4KCTwvZGl2Pgp7JGVuZGZvcm19Cjxici8+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplate.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPGgzPnskdGl0bGV9PC9oMz4KPC9kaXY+CnskZm9ybXN0YXJ0fXskaGlkZGVufQo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdGVtcGxhdGVuYW1lfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZW1wbGF0ZW5hbWV9PC9wPgo8L2Rpdj4KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3RlbXBsYXRlfTo8L3A+CiAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyR0ZW1wbGF0ZX08L3A+CjwvZGl2Pgo8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogIDxwIGNsYXNzPSJwYWdldGV4dCI+Jm5ic3A7PC9wPgogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskc3VibWl0fXskY2FuY2VsfTwvcD4KPC9kaXY+CnskZm9ybWVuZH0K]]></data>
	</file>
	<file>
	  <filename>/templates/edittemplates.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICA8dGhlYWQ+CiAgICA8dHI+CiAgICAgIDx0aCB3aWR0aD0iNzUlIj57JG5hbWVwcm9tcHR9PC90aD4KICAgICAgPHRoPnskZGVmYXVsdHByb21wdH08L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgICA8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgogICAgPC90cj4KICA8L3RoZWFkPgp7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogICA8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CiAgICAgPHRkPnskZW50cnktPm5hbWV9PC90ZD4KICAgICA8dGQ+eyRlbnRyeS0+ZGVmYXVsdH08L3RkPgogICAgIDx0ZD57JGVudHJ5LT5lZGl0bGlua308L3RkPgogICAgIDx0ZD57JGVudHJ5LT5kZWxldGVsaW5rfTwvdGQ+CiAgIDwvdHI+CnsvZm9yZWFjaH0KPC90YWJsZT4KPC9kaXY+CjxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgPHAgY2xhc3M9InBhZ2VvcHRpb25zIj57JG5ld3RlbXBsYXRlbGlua308L3A+CjwvZGl2Pgo=]]></data>
	</file>
	<file>
	  <filename>/templates/editupload.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgokKGRvY3VtZW50KS5yZWFkeShmdW5jdGlvbigpewogICQoJyNtb3ZlY2F0ZWdvcnknKS5jaGFuZ2UoZnVuY3Rpb24oKXsKICAgICQodGhpcykuY2xvc2VzdCgnZm9ybScpLnN1Ym1pdCgpOwogIH0pOwp9KTsKPC9zY3JpcHQ+Cgo8aDM+eyRtb2QtPkxhbmcoJ2VkaXR1cGxvYWQnKX0mbmJzcDt7JHZpZXdsaW5rfTwvaDM+CntpZiBpc3NldCgkbWVzc2FnZSkgJiYgJG1lc3NhZ2UgIT0gJyd9CiAge2lmIGlzc2V0KCRlcnJvcikgJiYgJGVycm9yICE9ICcnfQogICAgPHA+PGZvbnQgY29sb3I9InJlZCI+eyRtZXNzYWdlfTwvZm9udD48L3A+CiAge2Vsc2V9CiAgICA8cD57JG1lc3NhZ2V9PC9wPgogIHsvaWZ9CntlbHNlfQogIHtpZiAkdXBsb2FkX2luZm8udXBsb2FkX2lkfQogIDxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KICAgIDxhIGhyZWY9Inttb2R1bGVfYWN0aW9uX2xpbmsgYWN0aW9uPWFkbWluX21hbmFnZV90aW1lbGltaXRlZCB1cGxvYWRfaWQ9JHVwbG9hZF9pbmZvLnVwbG9hZF9pZCB1cmxvbmx5PTF9Ij57Y2dpbWFnZSBpbWFnZT0nY2xvY2tfbGluay5wbmcnfSB7JG1vZC0+TGFuZygnbWFuYWdlX3RpbWVsaW1pdGVkJyl9PC9hPgogIDwvZGl2PgogIHsvaWZ9Cnskc3RhcnRmb3JtfQogIHtjZ2Vfc3RhcnRfdGFic30KICB7Y2dlX3RhYmhlYWRlciBuYW1lPSdnZW5lcmFsJyBsYWJlbD0kbW9kLT5MYW5nKCdwcm9tcHRfZ2VuZXJhbCcpfQogIHtjZ2VfdGFiaGVhZGVyIG5hbWU9J2Rlc2NyaXB0aW9uJyBsYWJlbD0kbW9kLT5MYW5nKCdkZXNjcmlwdGlvbicpfQoKICB7aWYgaXNzZXQoJGZpZWxkcyl9CiAgICB7Y2dlX3RhYmhlYWRlciBuYW1lPSdmaWVsZHMnIGxhYmVsPSRtb2QtPkxhbmcoJ3Byb21wdF9maWVsZHMnKX0KICB7L2lmfQogIHtpZiBpc3NldCgkY2F0ZWdvcnlfaW5mbykgJiYgJGNhdGVnb3J5X2luZm8udXBsb2FkX2NhdGVnb3J5X3VzZXJwZXJtcyAmJiBpc3NldCgkZmV1X2dyb3VwbGlzdCl9CiAgICB7Y2dlX3RhYmhlYWRlciBuYW1lPSdwZXJtcycgbGFiZWw9JG1vZC0+TGFuZygncHJvbXB0X3Blcm1pc3Npb25zJyl9CiAgey9pZn0KCiAge2lmICRpdGVtY291bnQgPiAwfQogICAge2NnZV90YWJoZWFkZXIgbmFtZT0nZG93bmxvYWRzJyBsYWJlbD0kbW9kLT5MYW5nKCdwcm9tcHRfZG93bmxvYWRzJyl9CiAgey9pZn0KCiAge2NnZV90YWJjb250ZW50X3N0YXJ0IG5hbWU9J2dlbmVyYWwnfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCduYW1lJyl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF91cGxvYWRuYW1lIiB2YWx1ZT0ieyR1cGxvYWRfaW5mby51cGxvYWRfbmFtZX0iIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPgogICAgICA8YnIvPnskbW9kLT5MYW5nKCdyZW5hbWVtZXNzYWdlJyl9CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskbW9kLT5MYW5nKCdwcm9tcHRfcmVwbGFjZWZpbGUnKX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+CiAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfXJlcGxhY2VfZmlsZSIvPgogICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXJlcGxhY2UiIHZhbHVlPSJ7JG1vZC0+TGFuZygncmVwbGFjZScpfSIgdGl0bGU9InskbW9kLT5MYW5nKCdpbmZvX3JlcGxhY2UnKX0iLz4KICAgICAgPGJyLz57JG1vZC0+TGFuZygnaW5mb19yZXBsYWNlZmlsZScpfQogICAgPC9wPgogIDwvZGl2PgoKICB7aWYgaXNzZXQoJHRodW1iX3VybCl9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdGh1bWJuYWlsfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICB7aWYgaXNzZXQoJGZpbGVfdXJsKX08YSBocmVmPSJ7JGZpbGVfdXJsfSIgY2xhc3M9ImZhbmN5Ym94Ij57L2lmfQogICAgICA8aW1nIHNyYz0ieyR0aHVtYl91cmx9IiBhbHQ9IiIvPgogICAgICB7aWYgaXNzZXQoJGZpbGVfdXJsKX08L2E+ey9pZn0KICAgIDwvcD4KICA8L2Rpdj4KICB7L2lmfQoKICB7aWYgaXNzZXQoJGlucHV0X25ld3RodW1ibmFpbCl9CiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfbmV3dGh1bWJuYWlsfTwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfbmV3dGh1bWJuYWlsfTwvcD4KICA8L2Rpdj4KICB7L2lmfQoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF9tb3ZlY2F0ZWdvcnl9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9aW5wdXRfbW92ZWNhdGVnb3J5IiBpZD0ibW92ZWNhdGVnb3J5Ij4KICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGNhdGVnb3J5bGlzdCBzZWxlY3RlZD0kc2VsX2NhdGVnb3J5fQogICAgICA8L3NlbGVjdD4KICAgICAgPGJyLz57JG1vZC0+TGFuZygncGF0aG1lc3NhZ2UnKX0KICAgIDwvcD4KICA8L2Rpdj4KCiAgPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRwcm9tcHRfdXBsb2Fkc2l6ZX06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRkYXRhX3VwbG9hZHNpemV9PC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF91cGxvYWRkYXRlfTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAge2lmICRhbGxvd19jaGFuZ2VkYXRlfQogICAgICAgIHskcHJlZml4PSRhY3Rpb25pZHxjYXQ6J3VwbG9hZF9kYXRlXyd9CiAgICAgICAge2h0bWxfc2VsZWN0X2RhdGUgcHJlZml4PSRwcmVmaXggdGltZT0kZGF0YV91cGxvYWRkYXRlIHN0YXJ0X3llYXI9MTk3MCBlbmRfeWVhcj0nKzInfSZuYnNwOwogICAgICAgIHtodG1sX3NlbGVjdF90aW1lIHByZWZpeD0kcHJlZml4IHRpbWU9JGRhdGFfdXBsb2FkZGF0ZX0KICAgICAge2Vsc2V9CiAgICAgICAgeyRkYXRhX3VwbG9hZGRhdGV9CiAgICAgIHsvaWZ9CiAgICA8L3A+CiAgPC9kaXY+CgogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3VwbG9hZGF1dGhvcn06PC9wPgogICAgPHAgY2xhc3M9InBhZ2VpbnB1dCI+eyRpbnB1dF91cGxvYWRhdXRob3J9PC9wPgogIDwvZGl2PgoKICA8ZGl2IGNsYXNzPSJwYWdlb3ZlcmZsb3ciPgogICAgPHAgY2xhc3M9InBhZ2V0ZXh0Ij57JHByb21wdF91cGxvYWRzdW1tYXJ5fTo8L3A+CiAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JGlucHV0X3VwbG9hZHN1bW1hcnl9PC9wPgogIDwvZGl2PgoKICB7Y2dlX3RhYmNvbnRlbnRfc3RhcnQgbmFtZT0nZGVzY3JpcHRpb24nfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPnskcHJvbXB0X3VwbG9hZGRlc2N9OjwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfdXBsb2FkZGVzY308L3A+CiAgPC9kaXY+CgogIHtpZiBpc3NldCgkZmllbGRzKX0KICAgIHtjZ2VfdGFiY29udGVudF9zdGFydCBuYW1lPSdmaWVsZHMnfQogICAge2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09J29uZSd9CiAgICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRvbmUubmFtZX06PC9wPgogICAgICA8cCBjbGFzcz0icGFnZWlucHV0Ij4KICAgICAgICB7aWYgaXNzZXQoJG9uZS5pbnB1dCl9CiAgICAgICAgICB7JG9uZS5pbnB1dH0KICAgICAgICB7ZWxzZWlmICRvbmUudHlwZSA9PSAndGV4dGlucHV0J30KICAgICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWZpZWxkX3skb25lLmlkfSIgdmFsdWU9Inskb25lLnZhbHVlfGRlZmF1bHQ6Jyd9IiBzaXplPSJ7JG9uZS5hdHRyaWIubGVuZ3RofSIgbWF4bGVuZ3RoPSJ7JG9uZS5hdHRyaWIubWF4bGVuZ3RofSIvPgogICAgICAgIHtlbHNlaWYgJG9uZS50eXBlID09ICdjaGVja2JveCd9CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9InskYWN0aW9uaWR9ZmllbGRfeyRvbmUuaWR9IiB2YWx1ZT0iMSJ7aWYgJG9uZS52YWx1ZSA9PSAxfSBjaGVja2VkPSJjaGVja2VkInsvaWZ9Lz4KICAgICAgICB7ZWxzZWlmICRvbmUudHlwZSA9PSAnZHJvcGRvd24nfQogICAgICAgICAgPHNlbGVjdCBuYW1lPSJ7JGFjdGlvbmlkfWZpZWxkX3skb25lLmlkfSI+CiAgICAgICAgICAgIHtodG1sX29wdGlvbnMgb3B0aW9ucz0kb25lLmF0dHJpYi5vcHRpb25zIHNlbGVjdGVkPSRvbmUudmFsdWV9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICB7ZWxzZWlmICRvbmUudHlwZSA9PSAnbXVsdGlzZWxlY3QnfQogICAgICAgICAgPHNlbGVjdCBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjQiIG5hbWU9InskYWN0aW9uaWR9ZmllbGRfeyRvbmUuaWR9W10iPgogICAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9uZS5hdHRyaWIub3B0aW9ucyBzZWxlY3RlZD0kb25lLnZhbHVlfQogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgey9pZn0KICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIHsvZm9yZWFjaH0KICB7L2lmfQoKICB7aWYgaXNzZXQoJGNhdGVnb3J5X2luZm8pICYmICRjYXRlZ29yeV9pbmZvLnVwbG9hZF9jYXRlZ29yeV91c2VycGVybXMgJiYgaXNzZXQoJGZldV9ncm91cGxpc3QpfQogICAge2NnZV90YWJjb250ZW50X3N0YXJ0IG5hbWU9J3Blcm1zJ30KICAgIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICAgIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRtb2QtPkxhbmcoJ3Byb21wdF9wZXJtaXNzaW9ucycpfTo8L3A+CiAgICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfdXNlcnBlcm1zX3NldCIgdmFsdWU9IjEiLz4KICAgICAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9aW5wdXRfdXNlcnBlcm1zW10iIG11bHRpcGxlPSJtdWx0aXBsZSIgc2l6ZT0iNSI+CiAgICAgICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JGZldV9ncm91cGxpc3Qgc2VsZWN0ZWQ9JHVwbG9hZF9pbmZvLnVwbG9hZF91c2VycGVybXN9CiAgICAgICAgPC9zZWxlY3Q+CiAgICAgIDwvcD4KICAgIDwvZGl2PgogIHsvaWZ9CgogIHtpZiAkaXRlbWNvdW50ID4gMH0KICAgIHtjZ2VfdGFiY29udGVudF9zdGFydCBuYW1lPSdkb3dubG9hZHMnfQogICAgPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KICAgICAgPHRoZWFkPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0aD57JGRhdGV0ZXh0fTwvdGg+CiAgICAgICAgICA8dGg+eyRpcHRleHR9PC90aD4KICAgICAgICAgIDx0aD57JHVzZXJ0ZXh0fTwvdGg+CiAgICAgICAgPC90cj4KICAgICAgPC90aGVhZD4KICAgICAgPHRib2R5PgogICAgICB7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPWVudHJ5fQogICAgICAgIDx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9Ij4KICAgICAgICAgIDx0ZD57JGVudHJ5LT5kYXRlfTwvdGQ+CiAgICAgICAgICA8dGQ+eyRlbnRyeS0+aXB9PC90ZD4KICAgICAgICAgIDx0ZD57JGVudHJ5LT51c2VyfTwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgey9mb3JlYWNofQogICAgICA8L3Rib2R5PgogICAgPC90YWJsZT4KICB7L2lmfQoKICB7Y2dlX2VuZF90YWJzfQogIDxkaXYgY2xhc3M9InBhZ2VvdmVyZmxvdyI+CiAgICA8cCBjbGFzcz0icGFnZXRleHQiPiZuYnNwOzwvcD4KICAgIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaGlkZGVufQogICAgICAgICB7aWYgJGNhbl9nZW5fdGh1bWJuYWlsfQogICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXRodW1ibmFpbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjcmVhdGVfdGh1bWJuYWlsJyl9IiB0aXRsZT0ieyRtb2QtPkxhbmcoJ3RpdGxlX2NyZWF0ZV90aHVtYm5haWwnKX0iLz4KCSB7L2lmfQogICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfXN1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzdWJtaXQnKX0iLz4KICAgICAgICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1jYW5jZWwiIHZhbHVlPSJ7JG1vZC0+TGFuZygnY2FuY2VsJyl9Ii8+CiAgICA8cD4KICA8L2Rpdj4KCnskZW5kZm9ybX0Key9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/error.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGgzPnskdGl0bGVfZXJyb3J9PC9oMz4Ke2lmICRtZXNzYWdlIT0nJ308cD57JG1lc3NhZ2V9PC9wPnsvaWZ9CntpZiBpc3NldCgkbGluaykgJiYgJGxpbmshPScnfTxwPnskbGlua308L3A+ey9pZn0K]]></data>
	</file>
	<file>
	  <filename>/templates/expandedlist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyRzdGFydGZvcm19DQo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+DQogIDxwIGNsYXNzPSJwYWdldGV4dCI+eyRjYXRlZ29yeX08L3A+DQogIDxwIGNsYXNzPSJwYWdlaW5wdXQiPnskaW5wdXRfY2F0ZWdvcnl9eyRpbnB1dF9zZWxlY3R9eyRpbnB1dF9oaWRkZW59PC9wPg0KPC9kaXY+DQp7JGVuZGZvcm19DQp7aWYgJGl0ZW1jb3VudCA+IDB9DQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPg0KCTx0aGVhZD4NCgkJPHRyPg0KCQkJPHRoPnskdGl0bGV0ZXh0fTwvdGg+DQoJCQk8dGg+eyRwb3N0ZGF0ZXRleHR9PC90aD4NCgkJCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+DQoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPg0KCQk8L3RyPg0KCTwvdGhlYWQ+DQoJPHRib2R5Pg0KCXtmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9DQoJCTx0ciBjbGFzcz0ieyRlbnRyeS0+cm93Y2xhc3N9IiBvbm1vdXNlb3Zlcj0idGhpcy5jbGFzc05hbWU9J3skZW50cnktPnJvd2NsYXNzfWhvdmVyJzsiIG9ubW91c2VvdXQ9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc30nOyI+DQoJCQk8dGQ+eyRlbnRyeS0+aWR9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5uYW1lfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+YXV0aG9yfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+aXB9PC90ZD4NCgkJCTx0ZD57JGVudHJ5LT5kYXRlfTwvdGQ+DQoJCQk8dGQ+eyRlbnRyeS0+ZGVsZXRlbGlua308L3RkPg0KCQk8L3RyPg0KCQk8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSIgb25tb3VzZW92ZXI9InRoaXMuY2xhc3NOYW1lPSd7JGVudHJ5LT5yb3djbGFzc31ob3Zlcic7IiBvbm1vdXNlb3V0PSJ0aGlzLmNsYXNzTmFtZT0neyRlbnRyeS0+cm93Y2xhc3N9JzsiPg0KCSAgICAgICAgCTx0ZD4mbmJzcDs8L3RkPg0KICAgICAgICAgICAgICAgCQk8dGQgY29sc3Bhbj0iNSI+eyRlbnRyeS0+ZGVzY3JpcHRpb259PC90ZD4gDQoJCTwvdHI+DQoJey9mb3JlYWNofQ0KCTwvdGJvZHk+DQo8L3RhYmxlPg0Ke2Vsc2V9DQo8L2JyPg0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4NCiAgIDxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+Tm8gRmlsZXMgRGV0ZWN0ZWQ8L3A+DQo8L2Rpdj4NCnsvaWZ9DQo=]]></data>
	</file>
	<file>
	  <filename>/templates/filetypes.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRpdGVtY291bnQgPiAwfQo8dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNsYXNzPSJwYWdldGFibGUiPgogIDx0aGVhZD4KICAgIDx0cj4KICAgICAgICA8dGggd2lkdGg9IjQlIj4mbmJzcDs8L3RoPgoJPHRoPnskbmFtZXRleHR9PC90aD4KCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+Cgk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJPHRoIGNsYXNzPSJwYWdlaWNvbiI+Jm5ic3A7PC90aD4KCTx0aCBjbGFzcz0icGFnZWljb24iPiZuYnNwOzwvdGg+CiAgICA8L3RyPgogIDwvdGhlYWQ+Cntmb3JlYWNoIGZyb209JGl0ZW1zIGl0ZW09ZW50cnl9CiAgICAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgICAgIDx0ZD57JGVudHJ5LT5pY29ufTwvdGQ+CiAgICAgICAgPHRkPnskZW50cnktPm5hbWV9PC90ZD4KICAgICAgICA8dGQ+eyRlbnRyeS0+dXBsaW5rfGRlZmF1bHQ6Jyd9PC90ZD4KICAgICAgICA8dGQ+eyRlbnRyeS0+ZG93bmxpbmt8ZGVmYXVsdDonJ308L3RkPgogICAgICAgIDx0ZD57JGVudHJ5LT5lZGl0bGlua3xkZWZhdWx0OicnfTwvdGQ+CiAgICAgICAgPHRkPnskZW50cnktPmRlbGV0ZWxpbmt8ZGVmYXVsdDonJ308L3RkPgogICAgIDwvdHI+CiAgICAgPHRyIGNsYXNzPSJ7JGVudHJ5LT5yb3djbGFzc30iPgogICAgICAgIDx0ZD4mbmJzcDs8L3RkPgogICAgICAgIDx0ZCBjb2xzcGFuPSI1Ij57JGVudHJ5LT5kZXNjcmlwdGlvbn08L3RkPgogICAgIDwvdHI+CnsvZm9yZWFjaH0KPC90YWJsZT4Key9pZn0KPHRhYmxlIHdpZHRoPSIxMDAlIj4KICA8dHI+CiAgPHRkIHdpZHRoPSI1MCUiPgoJPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPjxwIGNsYXNzPSJwYWdlb3B0aW9ucyI+eyRhZGRsaW5rfTwvcD48L2Rpdj4KICA8L3RkPgogIDx0ZCBhbGlnbj0icmlnaHQiPgoJPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KCXskc3RhcnRmb3JtfQoJICA8cCBjbGFzcz0icGFnZWlucHV0Ij57JHByb21wdF91cGxvYWRfaWNvbn06Jm5ic3A7eyRpbnB1dF91cGxvYWRfaWNvbn17JHN1Ym1pdH08L3A+CiAgICAgICAgeyRlbmRmb3JtfQoJPC9kaXY+CiAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_categorylist_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogY2F0ZWdvcnkgbGlzdCB0ZW1wbGF0ZSAqfQp7aWYgaXNzZXQoJGNhdGVnb3JpZXMpICYmIGNvdW50KCRjYXRlZ29yaWVzKX0KPG5hdiByb2xlPSJuYXZpZ2F0aW9uIj4KICA8dWwgY2xhc3M9Im5hdiI+CiAge2ZvcmVhY2ggJGNhdGVnb3JpZXMgYXMgJGNhdH0KICAgIDxsaT48YSBocmVmPSJ7JGNhdC5zdW1tYXJ5X3VybH0iIHRpdGxlPSJ7JGNhdC5kZXNjcmlwdGlvbnxjbXNfZXNjYXBlfSI+eyRjYXQubmFtZXxjbXNfZXNjYXBlfTwvYT48L2xpPgogIHsvZm9yZWFjaH0KICA8L3VsPgo8L25hdj4Key9pZn0=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_detailrpt_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBTdGFydCBVcGxvYWQgRGV0YWlsIHRlbXBsYXRlIC0tPgo8dGFibGU+CiAgPHRyPgogICAge2lmIGlzc2V0KCRlbnRyeS0+dGh1bWJuYWlsX3VybCl9CiAgICA8dGQ+eyR0aHVtYm5haWx9PC90ZD4KICAgIDx0ZD48aW1nIHNyYz0ieyRlbnRyeS0+dGh1bWJuYWlsX3VybH0iIGJvcmRlcj0iMCIgLz48L3RkPgogICAge2Vsc2V9CiAgICA8dGQ+eyRpY29ufTwvdGQ+CiAgICA8dGQ+PGltZyBzcmM9InskZW50cnktPmljb251cmx9IiBib3JkZXI9IjAiIC8+PC90ZD4KICAgIHsvaWZ9CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+eyRjYXRlZ29yeX08L3RkPgogICAgPHRkPnskZW50cnktPmNhdGVnb3J5fTwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+eyRpZH08L3RkPgogICAgPHRkPnskZW50cnktPmlkfTwvdGQ+CiAgPC90cj4KICAKICB7aWYgaXNzZXQoJGVudHJ5LT5kb3dubG9hZF91cmwpfQogIDx0cj4KICAgIDx0ZD57JG5hbWV9PC90ZD4KICAgIDx0ZD48YSBocmVmPSJ7JGVudHJ5LT5kb3dubG9hZF91cmx9IiB0aXRsZT0ieyRlbnRyeS0+bmFtZX0iPnskZW50cnktPm5hbWV9PC9hPiZuYnNwOyZuYnNwOwogICAgICAgIDxhIGhyZWY9InskZW50cnktPnNlbmRmaWxlX3VybH0iIHRpdGxlPSIiPlNlbmQgdGhpcyBmaWxlPC9hPjxici8+CiAgICA8L3RkPgogIDwvdHI+CiAgey9pZn0KCiAge2lmIGlzc2V0KCRlbnRyeS0+ZGVsZXRlX3VybCl9CiAgPHRyPgogICAgPHRkPnskZGVsZXRlfTwvdGQ+CiAgICA8dGQ+PGEgaHJlZj0ieyRlbnRyeS0+ZGVsZXRlX3VybH0iIHRpdGxlPSJ7JGRlbGV0ZX0iIG9uY2xpY2s9InJldHVybiBjb25maXJtKCd7JGFyZXlvdXN1cmV9Jyk7Ij57JGVudHJ5LT5uYW1lfTwvYT48L3RkPgogIDwvdHI+CiAgey9pZn0KICA8dHI+CiAgICA8dGQ+eyRkYXRlfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+ZGF0ZXxjbXNfZGF0ZV9mb3JtYXR9PC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZD57JGF1dGhvcn08L3RkPgogICAgPHRkPnskZW50cnktPmF1dGhvcnxkZWZhdWx0OicnfTwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQ+eyRzaXplfTwvdGQ+CiAgICA8dGQ+eyRlbnRyeS0+c2l6ZX08L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnskc3VtbWFyeX08L3RkPgogICAgPHRkPnskZW50cnktPnN1bW1hcnl8ZGVmYXVsdDonJ308L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkPnskZGVzY3JpcHRpb259PC90ZD4KICAgIDx0ZD57JGVudHJ5LT5kZXNjcmlwdGlvbnxkZWZhdWx0OicnfTwvdGQ+CiAgPC90cj4KCiAge2lmIGlzc2V0KCRlbnRyeS0+ZmllbGRzKX0KICAgIHtmb3JlYWNoIG5hbWU9ZmllbGRzIGZyb209JGVudHJ5LT5maWVsZHMga2V5PSdmbGRuYW1lJyBpdGVtPSdmaWVsZCd9CiAgICA8dHI+CiAgICAgIDx0ZD57JGZpZWxkLm5hbWV9PC90ZD4KICAgICAgPHRkPnskZmllbGQudmFsdWV9PC90ZD4KICAgIDwvdHI+CiAgICB7L2ZvcmVhY2h9CiAgey9pZn0KPC90YWJsZT4KPCEtLSBFbmQgVXBsb2FkIERldGFpbCB0ZW1wbGF0ZSAtLT4K]]></data>
	</file>
	<file>
	  <filename>/templates/orig_emailnotify_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBFbWFpbCBub3RpZnkgdGVtcGxhdGUgLS0+CjxwPlRoaXMgbWVzc2FnZSBpcyB0byBub3RpZnkgeW91IHRoYXQgYSBmaWxlIGhhcyBiZWVuIHVwbG9hZGVkIHRvIHlvdXIgd2Vic2l0ZS4gIFRoZSBkZXRhaWxzIG9mIHRoaXMgdXBsb2FkIGFyZSBhcyBmb2xsb3dzOjwvcD4KPHA+TmFtZTogeyRuYW1lfTwvcD4KPHA+U2l6ZTogeyRzaXplfTwvcD4KPHA+U3VtbWFyeTogeyRzdW1tYXJ5fTwvcD4KPHA+RGVzY3JpcHRpb246IHskZGVzY3JpcHRpb259PC9wPgo8cD5BdXRob3I6IHskYXV0aG9yfTwvcD4KPHA+SVAgQWRkcmVzczogeyRpcF9hZGRyZXNzfTwvcD4KPCEtLSBFbWFpbCBub3RpZnkgdGVtcGxhdGUgLS0+Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_htmlreport_downloadsbyfile.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogIHsqIHJlcG9ydCBoZWFkZXIgKn0KICA8aDE+eyRtb2QtPkxhbmcoJ3JlcG9ydF9kb3dubG9hZHNieWZpbGUnKX08L2gxPgogIDx0YWJsZT4KICAgIDx0cj48dGQ+eyRtb2QtPkxhbmcoJ2dlbmVyYXRlZF9ieScpfTo8L3RkPjx0ZD57aWYgaXNfb2JqZWN0KCR1c2VyKX17JHVzZXItPnVzZXJuYW1lfXtlbHNlfXskbW9kLT5MYW5nKCdub3VzZXJpbmZvJyl9ey9pZn08L3RkPjwvdHI+CiAgICA8dHI+PHRkPnskbW9kLT5MYW5nKCdnZW5lcmF0ZWRfb24nKX06PC90ZD48dGQ+eyRzbWFydHkubm93fGNtc19kYXRlX2Zvcm1hdH08L3RkPjwvdHI+CiAgICA8dHI+PHRkPnskbW9kLT5MYW5nKCdzdGFydF9kYXRlJyl9OjwvdGQ+PHRkPnskcHJvZmlsZS5zdGFydF9kYXRlfGNtc19kYXRlX2Zvcm1hdH08L3RkPjwvdHI+CiAgICA8dHI+PHRkPnskbW9kLT5MYW5nKCdlbmRfZGF0ZScpfTo8L3RkPjx0ZD57JHByb2ZpbGUuZW5kX2RhdGV8Y21zX2RhdGVfZm9ybWF0fTwvdGQ+PC90cj4KICA8L3RhYmxlPgoKICB7aWYgaXNzZXQoJGVycm9yKX0KICA8ZGl2IGNsYXNzPSJlcnJvciI+eyRlcnJvcn08L2Rpdj4KICB7ZWxzZX0KICA8dWw+PCEtLSBzdGFydCBvZiByZXBvcnQgLS0+CiAgeyRwcmV2X2ZpbGU9Jyd9CiAge2ZvcmVhY2ggZnJvbT0kcmVjb3JkcyBpdGVtPSdyZWNvcmQnfQogICAge2lmICRyZWNvcmQudXBsb2FkX2lkICE9ICRwcmV2X2ZpbGV9CiAgICAgIHtpZiAkcHJldl9maWxlICE9ICcnfQogICAgICAgIDwvdGJvZHk+CiAgICAgICAgPC90YWJsZT4KICAgICAgICA8L2xpPgogICAgICB7L2lmfQoKICAgICAgeyogdXNlciBoZWFkZXIgKn0KICAgICAgPGxpPkRvd25sb2FkcyBmb3IgeyRyZWNvcmQudXBsb2FkX25hbWV8ZGVmYXVsdDonJmx0O25hbWUgbm90IHByb3ZpZGVkJmd0Oyd9PC9oND4KICAgICAgPHRhYmxlPgogICAgICB7aWYgaXNzZXQoJHJlY29yZC51cGxvYWRfaWQpfTx0cj48dGQ+eyRsYWJlbHNbJ3VwbG9hZF9pZCddfTo8L3RkPjx0ZD57JHJlY29yZC51cGxvYWRfaWR9PC90ZD48L3RyPnsvaWZ9CiAgICAgIHtpZiBpc3NldCgkcmVjb3JkLmNhdGVnb3J5X25hbWUpfTx0cj48dGQ+eyRsYWJlbHNbJ2NhdGVnb3J5X25hbWUnXX06PC90ZD48dGQ+eyRyZWNvcmQuY2F0ZWdvcnlfbmFtZX08L3RkPjwvdHI+ey9pZn0KICAgICAge2lmIGlzc2V0KCRyZWNvcmQudXBsb2FkX3NpemUpfTx0cj48dGQ+eyRsYWJlbHNbJ3VwbG9hZF9zaXplJ119OjwvdGQ+PHRkPnskcmVjb3JkLnVwbG9hZF9zaXplfTwvdGQ+PC90cj57L2lmfQogICAgICB7aWYgaXNzZXQoJHJlY29yZC51cGxvYWRfZGF0ZSl9PHRyPjx0ZD57JGxhYmVsc1sndXBsb2FkX2RhdGUnXX06PC90ZD48dGQ+eyRyZWNvcmQudXBsb2FkX2RhdGV9PC90ZD48L3RyPnsvaWZ9CiAgICAgIDwvdGFibGU+CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgPHRyPgogICAgICAgICAge2ZvcmVhY2ggJHJlY29yZCBhcyAka2V5ID0+ICR2YWx9CiAgICAgICAgICAgIHtpZiAhaW5fYXJyYXkoJGtleSxhcnJheSgndXBsb2FkX2lkJywnY2F0ZWdvcnlfbmFtZScsJ3VwbG9hZF9zaXplJywndXBsb2FkX2RhdGUnLCd1cGxvYWRfbmFtZScpKX0KICAgICAgICAgICAgPHRoIGFsaWduPSJsZWZ0Ij57JGxhYmVsc1ska2V5XX08L3RoPgogICAgICAgICAgICB7L2lmfQogICAgICAgICAgey9mb3JlYWNofQogICAgICAgICAgPC90cj4KICAgICAgICA8L3RoZWFkPgogICAgICAgIDx0Ym9keT4KICAgICAgeyRwcmV2X2ZpbGU9JHJlY29yZC51cGxvYWRfaWR9CiAgICB7L2lmfQogICAgCiAgICB7KiB1c2VyIHJlY29yZCAqfQogICAgPHRyPgogICAge2ZvcmVhY2ggJHJlY29yZCBhcyAka2V5ID0+ICR2YWx9CiAgICAgIHtpZiAhaW5fYXJyYXkoJGtleSxhcnJheSgndXBsb2FkX2lkJywnY2F0ZWdvcnlfbmFtZScsJ3VwbG9hZF9zaXplJywndXBsb2FkX2RhdGUnLCd1cGxvYWRfbmFtZScpKX0KICAgICAgPHRkPnskdmFsfTwvdGQ+ICAKICAgICAgey9pZn0KICAgIHsvZm9yZWFjaH0KICAgIDwvdHI+CgogIHsvZm9yZWFjaH0KICB7aWYgJHByZXZfZmlsZSAhPSAnJ30KICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgogICAgPC9saT4KICB7L2lmfQoKICB7KiByZXBvcnQgZm9vdGVyICp9CiAgPC91bD48IS0tIGVuZCBvZiByZXBvcnQgLS0+CiAgey9pZn17KiBubyBlcnJvciAqfQogIDwvYm9keT4KPC9odG1sPg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_htmlreport_downloadsbyuser.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PGh0bWw+CiAgPGhlYWQ+CiAgPC9oZWFkPgogIDxib2R5PgogIHsqIHJlcG9ydCBoZWFkZXIgKn0KICA8aDE+eyRtb2QtPkxhbmcoJ3JlcG9ydF9kb3dubG9hZHNieXVzZXInKX08L2gxPgogIHtpZiBpc3NldCgkZXJyb3IpfQogICAgPGRpdiBjbGFzcz0iZXJyb3IiPnskZXJyb3J9PC9kaXY+CiAge2Vsc2V9CiAgPHVsPjwhLS0gc3RhcnQgb2YgcmVwb3J0IC0tPgogIHskcHJldl91c2VyPScnfQogIHtmb3JlYWNoIGZyb209JHJlY29yZHMgaXRlbT0ncmVjb3JkJ30KICAgIHtpZiAkcmVjb3JkLmRvd25sb2FkX3VzZXIgIT0gJHByZXZfdXNlcn0KICAgICAge2lmICRwcmV2X3VzZXIgIT0gJyd9CiAgICAgICAgPC90Ym9keT4KICAgICAgICA8L3RhYmxlPgogICAgICAgIDwvbGk+CiAgICAgIHsvaWZ9CgogICAgICB7KiB1c2VyIGhlYWRlciAqfQogICAgICA8bGk+RG93bmxvYWRzIGZvciB7JHJlY29yZC5kb3dubG9hZF91c2VyfTwvaDQ+CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSI+CiAgICAgICAgPHRoZWFkPgogICAgICAgICAgPHRyPgogICAgICAgICAge2ZvcmVhY2ggJHJlY29yZCBhcyAka2V5ID0+ICR2YWx9CiAgICAgICAgICAgIDx0aCBhbGlnbj0ibGVmdCI+eyRsYWJlbHNbJGtleV19PC90aD4KICAgICAgICAgIHsvZm9yZWFjaH0KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90aGVhZD4KICAgICAgICA8dGJvZHk+CiAgICAgIHskcHJldl91c2VyPSRyZWNvcmQuZG93bmxvYWRfdXNlcn0KICAgIHsvaWZ9CiAgICAKICAgIHsqIHVzZXIgcmVjb3JkICp9CiAgICA8dHI+CiAgICB7Zm9yZWFjaCAkcmVjb3JkIGFzICRrZXkgPT4gJHZhbH0KICAgICAgPHRkPnskdmFsfTwvdGQ+ICAKICAgIHsvZm9yZWFjaH0KICAgIDwvdHI+CgogIHsvZm9yZWFjaH0KICB7aWYgJHByZXZfdXNlciAhPSAnJ30KICAgIDwvdGJvZHk+CiAgICA8L3RhYmxlPgogICAgPC9saT4KICB7L2lmfQoKICB7KiByZXBvcnQgZm9vdGVyICp9CiAgPC91bD48IS0tIGVuZCBvZiByZXBvcnQgLS0+CiAgey9pZn0geyogbm8gZXJyb3IgKn0KICA8L2JvZHk+CjwvaHRtbD4=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_sendfileform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogZm9ybSB0byBzZW5kIGEgZmlsZSAqfQp7aWYgaXNzZXQoJG1lc3NhZ2UpfQo8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjOTlGRDk5OyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI0RBRkVEQTsiPgp7JG1lc3NhZ2V9CjwvZGl2Pgp7L2lmfQoKe2lmIGlzc2V0KCRlcnJvcil9CjxkaXYgc3R5bGU9ImJvcmRlcjogMXB4IGRhc2hlZCAjRkQ5OTk5OyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI0ZFREFEQTsiPgp7JGVycm9yfQo8L2Rpdj4Key9pZn0KCnskZm9ybXN0YXJ0fQo8ZmllbGRzZXQ+CjxsZWdlbmQ+eyRtb2QtPkxhbmcoJ2ZpbGVfaW5mbycpfTombmJzcDs8L2xlZ2VuZD4KPHA+eyRtb2QtPkxhbmcoJ25hbWUnKX06Jm5ic3A7eyR1cGxvYWRfaW5mby51cGxvYWRfbmFtZX0gKHskdXBsb2FkX2luZm8udXBsb2FkX2lkfSk8L3A+CjxwPnskdXBsb2FkX2luZm8udXBsb2FkX3N1bW1hcnl9PC9wPgo8L2ZpZWxkc2V0PgoKPGRpdiBjbGFzcz0icm93IiBzdHlsZT0id2lkdGg6IDgwJTsiPgogIDxwIHN0eWxlPSJtYXJnaW4tbGVmdDogNGVtOyBtYXJnaW4tdG9wOiAxZW07Ij4KICAgIHskbW9kLT5MYW5nKCdhZGRyZXNzZWVzJyl9CiAgPC9wPgogIDxwIHN0eWxlPSJtYXJnaW4tbGVmdDogNGVtOyBtYXJnaW4tdG9wOiAwOyI+CiAgIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3NlbmR0byIgcm93cz0iMiIgY29scz0iNTAiPnskc2VuZHRvfTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InJvdyIgc3R5bGU9IndpZHRoOiA4MCU7Ij4KICA8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRlbTsgbWFyZ2luLXRvcDogMWVtOyI+CiAgICB7JG1vZC0+TGFuZygnc3ViamVjdCcpfQogIDwvcD4KICA8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRlbTsgbWFyZ2luLXRvcDogMDsiPgogICAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfc3ViamVjdCIgc2l6ZT0iNTAiIG1heGxlbmd0aD0iNTAiIHZhbHVlPSJ7JHN1YmplY3R9Ii8+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InJvdyIgc3R5bGU9IndpZHRoOiA4MCU7Ij4KICA8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRlbTsgbWFyZ2luLXRvcDogMWVtOyI+CiAgICB7JG1vZC0+TGFuZygnbm90ZXMnKX0KICA8L3A+CiAgPHAgc3R5bGU9Im1hcmdpbi1sZWZ0OiA0ZW07IG1hcmdpbi10b3A6IDA7Ij4KICAgPHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfbm90ZXMiIHJvd3M9IjUiIGNvbHM9IjUwIj57JG5vdGVzfTwvdGV4dGFyZWE+CiAgPC9wPgo8L2Rpdj4KCjxkaXYgY2xhc3M9InJvdyIgc3R5bGU9IndpZHRoOiA4MCU7Ij4KICA8cCBzdHlsZT0ibWFyZ2luLWxlZnQ6IDRlbTsgbWFyZ2luLXRvcDogMWVtOyI+Jm5ic3A7PC9wPgogIDxwIHN0eWxlPSJtYXJnaW4tbGVmdDogNGVtOyBtYXJnaW4tdG9wOiAwOyI+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3N1Ym1pdCIgdmFsdWU9InskbW9kLT5MYW5nKCdzZW5kJyl9Ii8+CiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KICA8L3A+CjwvZGl2Pgp7JGZvcm1lbmR9]]></data>
	</file>
	<file>
	  <filename>/templates/orig_sendfilerpt_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogc2VuZCBmaWxlIGZvcm0gdGVtcGxhdGUgKn0KPGh0bWw+CiAgPGJvZHk+CiAgICA8aDM+R3JlZXRpbmdzPC9oMz4KICAgIDxwPllvdSBhcmUgcmVjZWl2aW5nIHRoaXMgZW1haWwgYmVjYXVzZSBzb21lYm9keSBoYXMgc2VudCB5b3UgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIGFjY2VzcyBhIHNwZWNpZmljIGZpbGUgb24gJnF1b3Q7e3NpdGVuYW1lfSZxdW90Oy48L3A+CiAgICA8cD5UaGlzIGZpbGUgaXMgbG9jYXRlZCBvbiBhIHJlbW90ZSBzZXJ2ZXIsIGFuZCBoYXMgbm90IGJlZW4gYXR0YWNoZWQgdG8gdGhpcyBlbWFpbC4gIFRvIHJldHJpZXZlIHRoZSBmaWxlIHlvdSBtdXN0IGNsaWNrIG9uIDxhIGhyZWY9InskZW50cnktPmRvd25sb2FkX3VybH0iPnRoaXMgbGluazwvYT4uICBJZiB5b3UgYXJlIHVuYWJsZSB0byBjbGljayBvbiB0aGlzIGxpbmssIHRoZW4gY29weSB0aGUgZm9sbG93aW5nIFVSTCBpbnRvIHRoZSBhZGRyZXNzIGJhciBvbiB5b3VyIHdlYiBicm93c2VyOjxici8+eyRlbnRyeS0+ZG93bmxvYWRfdXJsfTwvcD4KICAgIHtpZiBpc3NldCgkaG91cnMpfQogICAgICA8cD5BY2Nlc3MgdG8gdGhpcyBmaWxlIGlzIHRpbWUgbGltaXRlZC4gIFlvdSBoYXZlIHskaG91cnN9IGhvdXJzIGZyb20gbm93IHRvIGFjY2VzcyB0aGlzIGZpbGUuPC9wPgogICAgey9pZn0KICAgIHtpZiBpc3NldCgkZG93bmxvYWRzKX0KICAgICAgPHA+WW91IG1heSBkb3dubG9hZCB0aGlzIGZpbGUsIG9yIGF0dGVtcHQgdG8gZG93bmxvYWQgaXQgYSBtYXhpbXVtIG9mIHskZG93bmxvYWRzfSB0aW1lcy48L1AKICAgIHsvaWZ9CgogICAgSWYgeW91IGV4cGVyaWVuY2UgZGlmZmljdWx0eSB3aXRoIHRoZSBsaW5rIHByb3ZpZGVkIGluIHRoaXMgZW1haWwgcGxlYXNlIGNvbnRhY3QgdGhlIGFkbWluaXN0cmF0cm9ycyBhdCB7c2l0ZW5hbWV9CgogICAge2lmIGlzc2V0KCRlbnRyeS0+dGh1bWJuYWlsX3VybCl9CiAgICAgIDxpbWcgc3JjPSJ7JGVudHJ5LT50aHVtYm5haWxfdXJsfSIgYm9yZGVyPSIwIj48YnIvPgogICAgey9pZn0KCiAgICB7aWYgJG5vdGVzICE9ICcnfQogICAgPGg0Pk5vdGVzOjwvaDQ+CiAgICA8cD57JG5vdGVzfTwvcD4KICAgIHsvaWZ9CgogICAgPGg0PkZpbGUgRGV0YWlsczo8L2g0PgogICAgPHRhYmxlIGJvcmRlcj0iMCI+CiAgICAgIDx0cj48dGQ+eyRtb2QtPkxhbmcoJ25hbWUnKX06PC90ZD48dGQ+eyRlbnRyeS0+bmFtZX08L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+eyRtb2QtPkxhbmcoJ3NpemUnKX06PC90ZD48dGQ+eyRlbnRyeS0+c2l6ZX08L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+eyRtb2QtPkxhbmcoJ3N1bW1hcnknKX06PC90ZD48dGQ+eyRlbnRyeS0+c3VtbWFyeX08L3RkPjwvdHI+CiAgICAgIDx0cj48dGQ+eyRtb2QtPkxhbmcoJ2F1dGhvcicpfTo8L3RkPjx0ZD57JGVudHJ5LT5hdXRob3J9PC90ZD48L3RyPgogICAgICA8dHI+PHRkPnskbW9kLT5MYW5nKCdkZXNjcmlwdGlvbicpfTo8L3RkPjx0ZD57JGVudHJ5LT5kZXNjcmlwdGlvbn08L3RkPjwvdHI+CiAgICA8L3RhYmxlPgogIDwvYm9keT4KPC9odG1sPg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_summaryrpt_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBTdGFydCBVcGxvYWQgU3VtbWFyeSBUZW1wbGF0ZSAtLT4NCntpZiBpc3NldCgkaW5wdXRfZmlsdGVyKSB9DQogIHskc3RhcnRmb3JtfQ0KICB7JHByb21wdF9maWx0ZXJ9eyRpbnB1dF9maWx0ZXJ9eyRoaWRkZW5fcGFyYW1zfXskaW5wdXRfc3VibWl0fQ0KICB7JGVuZGZvcm19DQogIDxici8+DQogIHtpZiBpc3NldCgkbWF0Y2hlcyl9DQogICAgeyRtYXRjaGVzfSZuYnNwO3skbWF0Y2hlc3RleHR9DQogIHsvaWZ9DQp7L2lmfQ0KDQo8ZGl2Pg0Ke2lmIGlzc2V0KCRwcmV2cGFnZV91cmwpfQ0KICA8YSBocmVmPSJ7JGZpcnN0cGFnZV91cmx9IiB0aXRsZT0ieyRmaXJzdHBhZ2V9Ij57JGZpcnN0cGFnZV9hcnJvd308L2E+DQogIDxhIGhyZWY9InskcHJldnBhZ2VfdXJsfSIgdGl0bGU9InskcHJldnBhZ2V9Ij57JHByZXZwYWdlX2Fycm93fTwvYT4NCnsvaWZ9DQp7aWYgaXNzZXQoJG51bXBhZ2VzKSAmJiAkbnVtcGFnZXMgPiAxfQ0KICAmbmJzcDsmbmJzcDt7JHBhZ2V0ZXh0fSB7JHBhZ2VudW19IHskb2Z0ZXh0fSB7JG51bXBhZ2VzfSZuYnNwOyZuYnNwOw0Key9pZn0NCntpZiBpc3NldCgkbmV4dHBhZ2VfdXJsKX0NCiAgPGEgaHJlZj0ieyRuZXh0cGFnZV91cmx9IiB0aXRsZT0ieyRuZXh0cGFnZX0iPnskbmV4dHBhZ2VfYXJyb3d9PC9hPg0KICA8YSBocmVmPSJ7JGxhc3RwYWdlX3VybH0iIHRpdGxlPSJ7JGxhc3RwYWdlfSI+eyRsYXN0cGFnZV9hcnJvd308L2E+DQp7L2lmfQ0KPC9kaXY+DQoNCntpZiBpc3NldCgkaXRlbXMpfQ0KICB7Zm9yZWFjaCBmcm9tPSRpdGVtcyBpdGVtPSdlbnRyeScgbmFtZT0ndXBsb2Fkcyd9DQogICAge2lmICgkc21hcnR5LmZvcmVhY2gudXBsb2Fkcy5pbmRleCA9PSAwKSBvciAoJHNtYXJ0eS5mb3JlYWNoLnVwbG9hZHMuaW5kZXggJSAzID09IDApfQ0KICAgICAge2lmICRzbWFydHkuZm9yZWFjaC51cGxvYWRzLml0ZXJhdGlvbiA+IDF9DQogICAgICAgIDwvZGl2Pg0KICAgICAgey9pZn0NCiAgICAgIDxkaXYgY2xhc3M9InJvdyIgc3R5bGU9IndpZHRoOiAxMDAlOyBwYWRkaW5nLWJvdHRvbTogMTBweDsiPg0KICAgIHsvaWZ9DQogICANCiAgICA8ZGl2IGNsYXNzPSJ1cGxvYWQiIHN0eWxlPSJmbG9hdDogbGVmdDsgd2lkdGg6IDMzJTsiPg0KICAgICAge2lmIGlzc2V0KCRlbnRyeS0+ZGV0YWlsdXJsKX0NCiAgICAgIDxhIGhyZWY9InskZW50cnktPmRldGFpbHVybH0iPnskZW50cnktPnVwbG9hZF9uYW1lfTwvYT4mbmJzcDsoeyRlbnRyeS0+c2l6ZX0pPGJyLz4NCiAgICAgIHtlbHNlfQ0KICAgICAgPHNwYW4+eyRlbnRyeS0+dXBsb2FkX25hbWV9Jm5ic3A7KHskZW50cnktPnNpemV9KTxici8+DQogICAgICB7L2lmfQ0KICANCiAgICAgIHtpZiBpc3NldCgkZW50cnktPmRvd25sb2FkX3VybCl9DQogICAgICAgIDxhIGhyZWY9InskZW50cnktPmRvd25sb2FkX3VybH0iIHRpdGxlPSJ7JGVudHJ5LT51cGxvYWRfbmFtZX0iPg0KICAgICAgICB7aWYgaXNzZXQoJGVudHJ5LT50aHVtYm5haWxfdXJsKX0NCiAgICAgICAgICA8aW1nIHNyYz0ieyRlbnRyeS0+dGh1bWJuYWlsX3VybH0iIGFsdD0iIj4NCiAgICAgICAge2Vsc2V9DQogICAgICAgICAgPGltZyBzcmM9InskZW50cnktPmljb251cmx9IiBhbHQ9IiI+DQogICAgICAgIHsvaWZ9DQogICAgICAgIDwvYT4NCiAgICAgIHtlbHNlfQ0KICAgICAgICB7aWYgaXNzZXQoJGVudHJ5LT50aHVtYm5haWxfdXJsKX0NCiAgICAgICAgICA8aW1nIGNsYXNzPSJ0aHVtYm5haWwiIHNyYz0ieyRlbnRyeS0+dGh1bWJuYWlsX3VybH0iIGFsdD0iIj4NCiAgICAgICAge2Vsc2V9DQogICAgICAgICAgPGltZyBjbGFzcz0iaWNvbiIgc3JjPSJ7JGVudHJ5LT5pY29udXJsfSIgYWx0PSIiPg0KICAgICAgICB7L2lmfQ0KICAgICAgey9pZn0NCiAgICAgICAgIA0KICAgICAgPGJyLz4NCiAgICAgIHtpZiBpc3NldCgkZW50cnktPnNlbmRmaWxlX3VybCl9DQogICAgICAgIDxhIGhyZWY9InskZW50cnktPnNlbmRmaWxlX3VybH0iIHRpdGxlPSIiPlNlbmQgdGhpcyBmaWxlPC9hPjxici8+DQogICAgICB7L2lmfQ0KICANCiAgICAgIHskYXV0aG9yfTogeyRlbnRyeS0+YXV0aG9yfTxici8+DQogICAgICB7JGRhdGV9OiB7JGVudHJ5LT5kYXRlfTxici8+DQogICAgICB7JGVudHJ5LT5zdW1tYXJ5fQ0KICANCiAgICAgIHtpZiBpc3NldCgkZW50cnktPmZpZWxkcyl9DQogICAgICAgIHtmb3JlYWNoIG5hbWU9ZmllbGRzIGZyb209JGVudHJ5LT5maWVsZHMga2V5PSdmbGRuYW1lJyBpdGVtPSdmaWVsZCd9DQogICAgICAgICAgeyRmaWVsZC5uYW1lfTogeyRmaWVsZC52YWx1ZX08YnIvPg0KICAgICAgICB7L2ZvcmVhY2h9DQogICAgICB7L2lmfQ0KICAgIDwvZGl2Pg0KICAgIHtpZiAkc21hcnR5LmZvcmVhY2gudXBsb2Fkcy5sYXN0fQ0KICAgICAgPC9kaXY+DQogICAgey9pZn0NCiAgey9mb3JlYWNofQ0Key9pZn0NCg0KPGRpdiBzdHlsZT0iY2xlYXI6IGJvdGg7Ij48L2Rpdj4NCjwhLS0gRW5kIFVwbG9hZCBTdW1tYXJ5IFRlbXBsYXRlIC0tPg==]]></data>
	</file>
	<file>
	  <filename>/templates/orig_uploadform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PCEtLSBVcGxvYWQgZm9ybSB0ZW1wbGF0ZSAtLT4KeyRzdGFydGZvcm19CntpZiBpc3NldCgkbWF4X3VwbG9hZHNpemUpfQo8aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSJNQVhfVVBMT0FEX1NJWkUiIHZhbHVlPSJ7JG1heF91cGxvYWRzaXplfSIvPgp7L2lmfQp7aWYgaXNzZXQoJG5vYXV0aG9yKSB9CnskaW5wdXRfYXV0aG9yfQp7ZWxzZX0KPHA+eyRwcm9tcHRfYXV0aG9yfTombmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9hdXRob3IiIHZhbHVlPSJ7JGF1dGhvcn0iIHNpemU9IjIwIiBtYXhsZW5ndGg9IjI1NSIvPjwvcD4Key9pZn0KPHA+eyRwcm9tcHRfdXBsb2FkfTombmJzcDs8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9icm93c2UiIHZhbHVlPSIiIHNpemU9IjUwIiBtYXhsZW5ndGg9IjI1NSIvPjwvcD4KPHA+eyRwcm9tcHRfc3VtbWFyeX0mbmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9zdW1tYXJ5IiB2YWx1ZT0iIiBzaXplPSI0MCIgbWF4bGVuZ3RoPSIyNTUiLz48L3A+CjwvcD4KPHA+eyRwcm9tcHRfZGVzY3JpcHRpb259Jm5ic3A7PHRleHRhcmVhIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfZGVzY3JpcHRpb24iPjwvdGV4dGFyZWE+PC9wPgo8cD57JHByb21wdF9kZXN0bmFtZX0mbmJzcDs8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9kZXN0bmFtZSIgdmFsdWU9IiIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1Ii8+Jm5ic3A7eyRpbmZvX2Rlc3RuYW1lfTwvcD4KPHA+eyRwcm9tcHRfdGh1bWJuYWlsfSZuYnNwOzxpbnB1dCB0eXBlPSJmaWxlIiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3RodW1ibmFpbCIgdmFsdWU9IiIgc2l6ZT0iNDAiIG1heGxlbmd0aD0iMjU1Ii8+Jm5ic3A7eyRpbmZvX3RodW1ibmFpbH08L3A+Cgp7aWYgaXNzZXQoJGZpZWxkcyl9CiAge2ZvcmVhY2ggZnJvbT0kZmllbGRzIGl0ZW09J29uZScga2V5PSduYW1lJ30KICB7c3RyaXB9PHA+eyRvbmUubmFtZX06Jm5ic3A7CiAge2lmIGlzc2V0KCRvbmUuaW5wdXQpfQogICAgeyRvbmUuaW5wdXR9CiAge2Vsc2VpZiAkb25lLnR5cGUgPT0gJ3RleHRpbnB1dCd9CiAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1maWVsZF97JG9uZS5pZH0iIHZhbHVlPSJ7JG9uZS52YWx1ZX0iIHNpemU9Inskb25lLmF0dHJpYi5sZW5ndGh9IiBtYXhsZW5ndGg9Inskb25lLmF0dHJpYi5tYXhsZW5ndGh9Ii8+CiAge2Vsc2VpZiAkb25lLnR5cGUgPT0gJ2NoZWNrYm94J30KICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1maWVsZF97JG9uZS5pZH0iIHZhbHVlPSIxIntpZiAkb25lLnZhbHVlID09IDF9IGNoZWNrZWQ9ImNoZWNrZWQiey9pZn0vPgogIHtlbHNlaWYgJG9uZS50eXBlID09ICdkcm9wZG93bid9CiAgICA8c2VsZWN0IG5hbWU9InskYWN0aW9uaWR9ZmllbGRfeyRvbmUuaWR9Ij4KICAgICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRvbmUuYXR0cmliLm9wdGlvbnN9CiAgICA8L3NlbGVjdD4KICB7ZWxzZWlmICRvbmUudHlwZSA9PSAnbXVsdGlzZWxlY3QnfQogICAgPHNlbGVjdCBtdWx0aXBsZT0ibXVsdGlwbGUiIHNpemU9IjQiIG5hbWU9InskYWN0aW9uaWR9ZmllbGRfeyRvbmUuaWR9W10iPgogICAgICB7aHRtbF9vcHRpb25zIG9wdGlvbnM9JG9uZS5hdHRyaWIub3B0aW9uc30KICAgIDwvc2VsZWN0PgogIHsvaWZ9ey9zdHJpcH0KICB7L2ZvcmVhY2h9CnsvaWZ9CntpZiBpc3NldCgkY2FwdGNoYSl9CiAgPHA+eyRjYXB0Y2hhX3RpdGxlfSZuYnNwO3skY2FwdGNoYX08L3A+CiAgPHA+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfY2FwdGNoYSIgc2l6ZT0iMTAiIG1heGxlbmd0aD0iMTAiLz48L3A+CnsvaWZ9CjxwPjxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfc3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3N1Ym1pdCcpfSIvPjwvcD4KeyRlbmRmb3JtfQo8IS0tIFVwbG9hZCBmb3JtIHRlbXBsYXRlIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/orig_yousenditform_template.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[eyogeW91c2VuZGl0IGludGVyZmFjZSAqfQp7aWYgaXNzZXQoJG1lc3NhZ2UpfQo8ZGl2IHN0eWxlPSJib3JkZXI6IDFweCBzb2xpZCAjOTlGRDk5OyBjb2xvcjogIzAwMDsgYmFja2dyb3VuZDogI0RBRkVEQTsgbWFyZ2luLWJvdHRvbTogMC41ZW07Ij4KPHVsPgogIHtmb3JlYWNoIGZyb209JG1lc3NhZ2VzIGl0ZW09J29uZSd9CiAgPGxpPnskb25lfTwvbGk+CiAgey9mb3JlYWNofQo8L3VsPgo8L2Rpdj4Key9pZn0KCntpZiBpc3NldCgkZXJyb3JzKX0KPGRpdiBzdHlsZT0iYm9yZGVyOiAxcHggZGFzaGVkICNGRDk5OTk7IGNvbG9yOiAjMDAwOyBiYWNrZ3JvdW5kOiAjRkVEQURBOyA7IG1hcmdpbi1ib3R0b206IDAuNWVtOyI+Cjx1bD4KICB7Zm9yZWFjaCBmcm9tPSRlcnJvcnMgaXRlbT0nb25lJ30KICA8bGk+eyRvbmV9PC9saT4KICB7L2ZvcmVhY2h9CjwvdWw+CjwvZGl2Pgp7L2lmfQoKeyRzdGFydGZvcm19CjxwPnskbW9kLT5MYW5nKCdhdXRob3InKX06Jm5ic3A7CiAgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImF1dGhvciIgc2l6ZT0iMjAiIG1heGxlbmd0aD0iMjU1IiB2YWx1ZT0ieyRhdXRob3J9Ii8+CjwvcD4KCjxwPnskbW9kLT5MYW5nKCdzdW1tYXJ5Jyl9OgogIDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3N1bW1hcnkiIHNpemU9IjQwIiBtYXhsZW5ndGg9IjI1NSIgdmFsdWU9Inskc3VtbWFyeX0iLz4KPC9wPgoKPHA+eyRtb2QtPkxhbmcoJ2Rlc2NyaXB0aW9uJyl9OiZuYnNwOwogIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2Rlc2NyaXB0aW9uIj57JGRlc2NyaXB0aW9ufTwvdGV4dGFyZWE+CjwvcD4KCjxwPnskbW9kLT5MYW5nKCdkZXN0bmFtZScpfTombmJzcDsKICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9kZXN0bmFtZSIgc2l6ZT0iNDAiIG1hZXhsZW5ndGg9IjI1NSIgdmFsdWU9InskZGVzdG5hbWV8ZGVmYXVsdDonJ30iLz48YnIvPgogIHskbW9kLT5MYW5nKCdpbmZvX2Rlc3RuYW1lJyl9CjwvcD4KCjxwPnskbW9kLT5MYW5nKCd0aHVtYm5haWwnKX06Jm5ic3A7CiAgPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfdGh1bWJuYWlsIiBzaXplPSI1MCIvPgo8L3A+Cgo8cD57JG1vZC0+TGFuZygncHJvbXB0X3JlcGxhY2UnKX06Jm5ic3A7CiAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9yZXBsYWNlIiB2YWx1ZT0iMCIvPgogIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9yZXBsYWNlIiB2YWx1ZT0iMSIvPjxici8+CiAgeyRtb2QtPkxhbmcoJ2luZm9fcmVwbGFjZScpfQo8L3A+Cgo8cD4qeyRtb2QtPkxhbmcoJ3VwbG9hZCcpfTombmJzcDsKICA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9icm93c2UiIHNpemU9IjUwIi8+CjwvcD4KCjxici8+Cjxoci8+Cjxici8+Cgo8cD4qeyRtb2QtPkxhbmcoJ3RvJyl9OiZuYnNwOwogIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X3NlbmR0byIgcm93cz0iMiIgY29scz0iNTAiPnskc2VuZHRvfTwvdGV4dGFyZWE+CjwvcD4KCjxwPip7JG1vZC0+TGFuZygnc3ViamVjdCcpfTombmJzcDsKICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9zdWJqZWN0IiB2YWx1ZT0ieyRzdWJqZWN0fSIgc2l6ZT0iNTAiLz4KPC9wPgoKPHA+eyRtb2QtPkxhbmcoJ25vdGVzJyl9OiZuYnNwOwogIDx0ZXh0YXJlYSBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X25vdGVzIiByb3dzPSI1IiBjb2xzPSI1MCI+eyRub3Rlc308L3RleHRhcmVhPgo8L3A+Cgp7aWYgaXNzZXQoJGNhcHRjaGFfdGl0bGUpICYmIGlzc2V0KCRjYXB0Y2hhKX0KPHA+eyRjYXB0Y2hhX3RpdGxlfSZuYnNwO3skY2FwdGNoYX08L3A+CjxwPnskaW5wdXRfY2FwdGNoYX08L3A+CnsvaWZ9CjxwPgogIDxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InskYWN0aW9uaWR9aW5wdXRfc3VibWl0IiB2YWx1ZT0ieyRtb2QtPkxhbmcoJ3NlbmQnKX0iLz4KICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJ7JGFjdGlvbmlkfWlucHV0X2NhbmNlbCIgdmFsdWU9InskbW9kLT5MYW5nKCdjYW5jZWwnKX0iLz4KPC9wPgoKeyRlbmRmb3JtfQo8IS0tIFVwbG9hZCBmb3JtIHRlbXBsYXRlIC0tPgo=]]></data>
	</file>
	<file>
	  <filename>/templates/uploadform.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e3N0YXJ0Zm9ybX0KPHA+eyRwcm9tcHRfdXBsb2FkfXskaGlkZGVufXskaW5wdXRfc3VibWl0fTwvcD4Ke2VuZGZvcm19Cg==]]></data>
	</file>
	<file>
	  <filename>/templates/uploadlist.tpl</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[e2lmICRtZXNzYWdlICE9ICcnfQogIHtpZiAkZXJyb3IgIT0gJyd9CiAgICA8cD48Zm9udCBjb2xvcj0icmVkIj57JG1lc3NhZ2V9PC9mb250PjwvcD4KICB7ZWxzZX0KICAgIDxwPnskbWVzc2FnZX08L3A+CiAgey9pZn0Key9pZn0KCntpZiAkbm9mb3JtID09ICcnfQp7JHN0YXJ0Zm9ybX17JGlucHV0X2hpZGRlbn0KCjxkaXYgY2xhc3M9InBhZ2VvcHRpb25zIj4KICB7JG1vZC0+TGFuZygnY2F0ZWdvcnknKX06Jm5ic3A7eyRpbnB1dF9jYXRlZ29yeX0KICAmbmJzcDt7JG1vZC0+TGFuZygncGFnZWxpbWl0Jyl9OgogIDxzZWxlY3QgbmFtZT0ieyRhY3Rpb25pZH1pbnB1dF9wYWdlbGltaXQiPgogICAge2h0bWxfb3B0aW9ucyBvcHRpb25zPSRwYWdlbGltaXRzIHNlbGVjdGVkPSRwYWdlbGltaXR9CiAgPC9zZWxlY3Q+CiAgPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ieyRhY3Rpb25pZH1zdWJtaXRmaWx0ZXIiIHZhbHVlPSJ7JG1vZC0+TGFuZygnZmlsdGVyJyl9Ii8+CgogIHtpZiBpc3NldCgkbnBhZ2VzKSAmJiAkbnBhZ2VzID4gMH0KICA8ZGl2IHN0eWxlPSJmbG9hdDogcmlnaHQ7Ij4KICAge2lmIGlzc2V0KCRmaXJzdHBhZ2VfdXJsKX0KICAgICA8YSBocmVmPSJ7JGZpcnN0cGFnZV91cmx9Ij4mbHQ7Jmx0OzwvYT4mbmJzcDsKICAgICA8YSBocmVmPSJ7JHByZXZwYWdlX3VybH0iPiZsdDs8L2E+Jm5ic3A7CiAgIHsvaWZ9CiAgIHskbW9kLT5MYW5nKCdwYWdlJyl9Jm5ic3A7eyRjdXJwYWdlfSZuYnNwO3skbW9kLT5MYW5nKCdvZicpfSZuYnNwO3skbnBhZ2VzfQogICB7aWYgaXNzZXQoJG5leHRwYWdlX3VybCl9CiAgICAgJm5ic3A7PGEgaHJlZj0ieyRuZXh0cGFnZV91cmx9Ij4mZ3Q7PC9hPgogICAgICZuYnNwOzxhIGhyZWY9InskbGFzdHBhZ2VfdXJsfSI+Jmd0OyZndDs8L2E+CiAgIHsvaWZ9CiAgPC9kaXY+CiAgey9pZn0KPC9kaXY+CnskZW5kZm9ybX0KCgo8ZGl2IGNsYXNzPSJwYWdlb3B0aW9ucyI+CiB7JGFkZGZpbGVfbGlua30KPC9kaXY+CntpZiAkaXRlbWNvdW50ID4gMH0KPHRhYmxlIGNlbGxzcGFjaW5nPSIwIiBjbGFzcz0icGFnZXRhYmxlIj4KCTx0aGVhZD4KCQk8dHI+CgkJCTx0aD4mbmJzcDs8L3RoPgoJICAgICAgICAgICAgICAgIDx0aD4mbmJzcDs8L3RoPgoJCQk8dGg+eyR0aXRsZXRleHR9PC90aD4KCQkJPHRoPnskc3VtbWFyeXRleHR8c3VtbWFyaXplOjUwfTwvdGg+CgkJCTx0aCBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyI+eyRzaXpldGV4dH08L3RoPgoJCQk8dGg+eyRhdXRob3J0ZXh0fTwvdGg+CgkJCTx0aD57JGlwdGV4dH08L3RoPgoJCQk8dGg+eyRwb3N0ZGF0ZXRleHR9PC90aD4KCQkJPHRoIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij57JGRsdGV4dH08L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCQk8dGggY2xhc3M9InBhZ2VpY29uIj4mbmJzcDs8L3RoPgoJCTwvdHI+Cgk8L3RoZWFkPgoJPHRib2R5PgoJe2ZvcmVhY2ggZnJvbT0kaXRlbXMgaXRlbT1lbnRyeX0KCQk8dHIgY2xhc3M9InskZW50cnktPnJvd2NsYXNzfSI+CgkJCTx0ZD57JGVudHJ5LT5pZH08L3RkPgoJCQk8dGQ+e2lmICRlbnRyeS0+bWlzc2luZ30KCQkJICAgICAgPGltZyBzcmM9InskbWlzc2luZ19pY29ufSIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9InskbW9kLT5MYW5nKCdtaXNzaW5nJyl9IiB0aXRsZT0ieyRtb2QtPkxhbmcoJ21pc3NpbmdfZmlsZScpfSIvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge2Vsc2V9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxpbWcgc3JjPSJ7JGVudHJ5LT5pY29ufSIgaGVpZ2h0PSIxNiIgd2lkdGg9IjE2IiBhbHQ9InskZW50cnktPmljb259Ii8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7L2lmfQogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgoJCQk8dGQ+e2lmICRlbnRyeS0+bWlzc2luZ30KICAJCQkgICAgICA8YSBocmVmPSJ7JGVudHJ5LT5lZGl0dXJsfSIgdGl0bGU9InskbW9kLT5MYW5nKCdtaXNzaW5nX2ZpbGUnKX0iPjxzcGFuIHN0eWxlPSJjb2xvcjogcmVkOyI+eyRlbnRyeS0+bmFtZX08L3NwYW4+PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAge2Vsc2V9CiAgCQkJICAgICAgPGEgaHJlZj0ieyRlbnRyeS0+ZWRpdHVybH0iIHRpdGxlPSJ7JG1vZC0+TGFuZygnZWRpdF90aGlzX2ZpbGUnKX0iPnskZW50cnktPm5hbWV9PC9hPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgey9pZn0KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KCQkJPHRkPnskZW50cnktPnN1bW1hcnl9PC90ZD4KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij57aWYgISRlbnRyeS0+bWlzc2luZ317JGVudHJ5LT5zaXplfXsvaWZ9PC90ZD4KCQkJPHRkPnskZW50cnktPmF1dGhvcn08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+aXB9PC90ZD4KCQkJPHRkPnskZW50cnktPmRhdGV9PC90ZD4KCQkJPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBjZW50ZXI7Ij57JGVudHJ5LT5kb3dubG9hZHN9PC90ZD4KCQkJPHRkPntpZiAhJGVudHJ5LT5taXNzaW5nfXskZW50cnktPnRpbWVsaW1pdGVkX2xpbmt9ey9pZn08L3RkPgoJCQk8dGQ+e2lmICEkZW50cnktPm1pc3Npbmd9eyRlbnRyeS0+dmlld2xpbmt9ey9pZn08L3RkPgoJCQk8dGQ+eyRlbnRyeS0+ZWRpdGxpbmt9PC90ZD4KCQkJPHRkPnskZW50cnktPmRlbGV0ZWxpbmt9PC90ZD4KCQk8L3RyPgoJey9mb3JlYWNofQoJPC90Ym9keT4KPC90YWJsZT4Ke2lmICRpdGVtY291bnQgPiAxMH0KPGRpdiBjbGFzcz0icGFnZW9wdGlvbnMiPgogeyRhZGRmaWxlX2xpbmt9CjwvZGl2Pgp7L2lmfQp7ZWxzZX0KPGRpdiBjbGFzcz0icGFnZW92ZXJmbG93Ij4KICAgPHAgY2xhc3M9InBhZ2VvcHRpb25zIj5ObyBGaWxlcyBEZXRlY3RlZDwvcD4KPC9kaXY+CnsvaWZ9CnsvaWZ9]]></data>
	</file>
	<file>
	  <filename>/Uploads.module.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAgLy8gLSotIG1vZGU6cGhwOyBjLXNldC1zdHlsZTpsaW51eDsgdGFiLXdpZHRoOjI7IGluZGVudC10YWJzLW1vZGU6dDsgYy1iYXNpYy1vZmZzZXQ6IDI7IC0qLQojQkVHSU5fTElDRU5TRQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1vZHVsZTogVXBsb2FkcyAoYykgMjAxMS0yMDE0IGJ5IFJvYmVydCBDYW1wYmVsbAojICAgICAgICAgKGNhbGd1eTEwMDBAY21zbWFkZXNpbXBsZS5vcmcpCiMgIEFuIGFkZG9uIG1vZHVsZSBmb3IgQ01TIE1hZGUgU2ltcGxlIHRvIGFsbG93IG1hbmFnZW1lbnQgb2YgdXBsb2FkZWQgZmlsZXMKIyAgaGFzIG51bWVyb3VzIGNhcGFiaWxpdGllcyBpbmNsdWRpbmcgeW91c2VuZGl0LCB0aW1lIGxpbWl0ZWQgdXJscywKIyAgZnJvbnRlbmQgdXBsb2Fkcy4uCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBDTVNNUyAtIENNUyBNYWRlIFNpbXBsZSBpcyAoYykgMjAwNSBieSBUZWQgS3VscCAod2lzaHlAY21zbWFkZXNpbXBsZS5vcmcpCiMgVmlzaXQgdGhlIENNU01TIEhvbWVwYWdlIGF0OiBodHRwOi8vd3d3LmNtc21hZGVzaW1wbGUub3JnCiMKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIwojIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgojIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiMKIyBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHUEwsIHRoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKIyBhcyBhbiBhZGRvbiBtb2R1bGUgdG8gQ01TIE1hZGUgU2ltcGxlLiAgWW91IG1heSBub3QgdXNlIHRoaXMgc29mdHdhcmUKIyBpbiBhbnkgTm9uIEdQTCB2ZXJzaW9uIG9mIENNUyBNYWRlIHNpbXBsZSwgb3IgaW4gYW55IHZlcnNpb24gb2YgQ01TCiMgTWFkZSBzaW1wbGUgdGhhdCBkb2VzIG5vdCBpbmRpY2F0ZSBjbGVhcmx5IGFuZCBvYnZpb3VzbHkgaW4gaXRzIGFkbWluCiMgc2VjdGlvbiB0aGF0IHRoZSBzaXRlIHdhcyBidWlsdCB3aXRoIENNUyBNYWRlIHNpbXBsZS4KIwojIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAojIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQojIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQojIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiMgT3IgcmVhZCBpdCBvbmxpbmU6IGh0dHA6CS8vd3d3LmdudS5vcmcvbGljZW5zZXMvbGljZW5zZXMuaHRtbCNHUEwKIwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojRU5EX0xJQ0VOU0UKCmZpbmFsIGNsYXNzIFVwbG9hZHMgZXh0ZW5kcyBDR0V4dGVuc2lvbnMKewoJdmFyICR1cGxvYWRfZXh0ZW5zaW9ucyA9ICcnOwoJdmFyICRfZmlsZXR5cGVzID0gJyc7CgoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKCXsKCQlwYXJlbnQ6Ol9fY29uc3RydWN0KCk7CiAgICAkdGhpcy0+QWRkSW1hZ2VEaXIoJ2ltYWdlcycpOwoJCSRzbWFydHkgPSBjbXNtcygpLT5HZXRTbWFydHkoKTsKCQlpZiggISRzbWFydHkgKSByZXR1cm47CgkJJHNtYXJ0eS0+cmVnaXN0ZXJfYmxvY2soJ29uY2hhbmdlJyxhcnJheSgkdGhpcywnc21hcnR5X2Jsb2NrX29uY2hhbmdlJykpOwoJfQoKICBwdWJsaWMgZnVuY3Rpb24gR2V0RnJpZW5kbHlOYW1lICgpIHsKCQkkdHh0ID0gdHJpbSgkdGhpcy0+R2V0UHJlZmVyZW5jZSgnZnJpZW5kbHluYW1lJykpOwoJCWlmKCAhJHR4dCApICR0eHQgPSAkdGhpcy0+TGFuZygnZnJpZW5kbHluYW1lJyk7CgkJcmV0dXJuICR0eHQ7Cgl9CgogIHB1YmxpYyBmdW5jdGlvbiBHZXROYW1lICgpIHsgcmV0dXJuICdVcGxvYWRzJzsgfQogIHB1YmxpYyBmdW5jdGlvbiBHZXRWZXJzaW9uKCkgeyByZXR1cm4gJzEuMTkuMSc7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRFdmVudEhlbHAgKCAkZXZlbnRuYW1lICkJewlyZXR1cm4gJHRoaXMtPkxhbmcgKCdoZWxwXycuJGV2ZW50bmFtZSk7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXRIZWxwICgpIHsgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18uJy9oZWxwLmluYycpOwl9CglwdWJsaWMgZnVuY3Rpb24gR2V0QXV0aG9yICgpIHsgcmV0dXJuICdjYWxndXkxMDAwJzsJfQoJcHVibGljIGZ1bmN0aW9uIEdldEF1dGhvckVtYWlsICgpCXsJcmV0dXJuICdjYWxndXkxMDAwQGNtc21hZGVzaW1wbGUub3JnJzsgfQoJcHVibGljIGZ1bmN0aW9uIElzUGx1Z2luTW9kdWxlICgpCXsJcmV0dXJuIHRydWU7IH0KCXB1YmxpYyBmdW5jdGlvbiBIYXNBZG1pbiAoKQl7CXJldHVybiB0cnVlOyB9CglwdWJsaWMgZnVuY3Rpb24gR2V0QWRtaW5TZWN0aW9uICgpIHsgcmV0dXJuICdjb250ZW50JzsgfQoJcHVibGljIGZ1bmN0aW9uIE1pbmltdW1DTVNWZXJzaW9uICgpIHsgcmV0dXJuICcxLjExLjEzJzsgfQoJcHVibGljIGZ1bmN0aW9uIEdldEFkbWluRGVzY3JpcHRpb24gKCkgeyByZXR1cm4gJHRoaXMtPkxhbmcgKCdtb2RkZXNjcmlwdGlvbicpOwl9CiAgcHVibGljIGZ1bmN0aW9uIEFsbG93QXV0b0luc3RhbGwoKSB7IHJldHVybiBGQUxTRTsgfQogIHB1YmxpYyBmdW5jdGlvbiBBbGxvd0F1dG9VcGdyYWRlKCkgeyByZXR1cm4gRkFMU0U7IH0KCXB1YmxpYyBmdW5jdGlvbiBHZXREZXBlbmRlbmNpZXMgKCkgeyByZXR1cm4gYXJyYXkgKCdDR0V4dGVuc2lvbnMnPT4nMS40Ni4zJywnQ0dTaW1wbGVTbWFydHknPT4nMS44Jyk7CX0KCXB1YmxpYyBmdW5jdGlvbiBJbnN0YWxsUG9zdE1lc3NhZ2UgKCkgewlyZXR1cm4gJHRoaXMtPkxhbmcgKCdwb3N0aW5zdGFsbCcpOwl9CglwdWJsaWMgZnVuY3Rpb24gVW5pbnN0YWxsUG9zdE1lc3NhZ2UgKCkJewlyZXR1cm4gJHRoaXMtPkxhbmcgKCdwb3N0dW5pbnN0YWxsJyk7CX0KICBwdWJsaWMgZnVuY3Rpb24gR2V0Q2hhbmdlTG9nICgpIHsgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKF9fRElSX18pLicvY2hhbmdlbG9nLmluYyc7IH0KCXB1YmxpYyBmdW5jdGlvbiBMYXp5TG9hZEFkbWluKCkgeyByZXR1cm4gVFJVRTsgfQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkX2NvbW1vbigpIHsgcmVxdWlyZV9vbmNlKF9fRElSX18uJy9mdW5jdGlvbnMuY29tbW9uX3Rvb2xzLnBocCcpOwl9CglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGxvYWRfYWRtaW4oKSB7IHJlcXVpcmVfb25jZShfX0RJUl9fLicvZnVuY3Rpb25zLmFkbWluX3Rvb2xzLnBocCcpOwl9CgoJLy8gZGVsZXRlIG1lCglwdWJsaWMgZnVuY3Rpb24gX2NhdGVnb3J5UGF0aCggJGNhdGVnb3J5cGF0aCApCgl7CgkJJGdDbXMgPSBjbXNtcygpOwoJCXJldHVybiAkZ0Ntcy0+Y29uZmlnWyd1cGxvYWRzX3BhdGgnXS5ESVJFQ1RPUllfU0VQQVJBVE9SLiRjYXRlZ29yeXBhdGg7Cgl9CgoJLy8gZGVsZXRlIG1lCgkvLyBzZWUgdXBsb2Fkc191dGlsczo6Z2V0X2ZpbGVzcGVjCglwdWJsaWMgZnVuY3Rpb24gX3VwbG9hZFBhdGgoICRjYXRlZ29yeXBhdGgsICRmaWxlbmFtZSApCgl7CgkJcmV0dXJuICR0aGlzLT5fY2F0ZWdvcnlQYXRoKCAkY2F0ZWdvcnlwYXRoICkuRElSRUNUT1JZX1NFUEFSQVRPUi4kZmlsZW5hbWU7Cgl9CgoJLy8gZGVsZXRlIG1lCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3Rlc3RpcCgkcmFuZ2UsJGlwKQoJewoJCSRyZXN1bHQgPSAxOwoKCQkjIElQIFBhdHRlcm4gTWF0Y2hlcgoJCSMgSi5BZGFtcyA8am5hQHJldGluYS5uZXQ+CgkJIwoJCSMgTWF0Y2hlczoKCQkjCgkJIyB4eHgueHh4Lnh4eC54eHggICAgICAgIChleGFjdCkKCQkjIHh4eC54eHgueHh4Llt5eXktenp6XSAgKHJhbmdlKQoJCSMgeHh4Lnh4eC54eHgueHh4L25uICAgIChubiA9ICMgYml0cywgY2lzY28gc3R5bGUgLS0gaS5lLiAvMjQgPSBjbGFzcyBDKQoJCSMKCQkjIERvZXMgbm90IG1hdGNoOgoJCSMgeHh4Lnh4eC54eHgueHhbeXl5LXp6el0gIChyYW5nZSwgcGFydGlhbCBvY3RldHMgbm90IHN1cHBvcnRlZCkKCgkJaWYgKGVyZWcoIihbMC05XSspXC4oWzAtOV0rKVwuKFswLTldKylcLihbMC05XSspLyhbMC05XSspIiwkcmFuZ2UsJHJlZ3MpKSB7CgkJCSMgcGVyZm9ybSBhIG1hc2sgbWF0Y2gKCQkJJGlwbCA9IGlwMmxvbmcoJGlwKTsKCQkJJHJhbmdlbCA9IGlwMmxvbmcoJHJlZ3NbMV0gLiAiLiIgLiAkcmVnc1syXSAuICIuIiAuICRyZWdzWzNdIC4gIi4iIC4gJHJlZ3NbNF0pOwoKCQkJJG1hc2tsID0gMDsKCgkJCWZvciAoJGkgPSAwOyAkaTwgMzE7ICRpKyspIHsKCQkJCWlmICgkaSA8ICRyZWdzWzVdLTEpICRtYXNrbCA9ICRtYXNrbCArIHBvdygyLCgzMC0kaSkpOwoJCQl9CgoJCQlpZiAoKCRtYXNrbCAmICRyYW5nZWwpID09ICgkbWFza2wgJiAkaXBsKSkgewoJCQkJcmV0dXJuIDE7CgkJCX0gZWxzZSB7CgkJCQlyZXR1cm4gMDsKCQkJfQoJCX0gZWxzZSB7CgkJCSMgcmFuZ2UgYmFzZWQKCQkJJG1hc2tvY3RzID0gc3BsaXQoIlwuIiwkcmFuZ2UpOwoJCQkkaXBvY3RzID0gc3BsaXQoIlwuIiwkaXApOwoKCQkJIyBwZXJmb3JtIGEgcmFuZ2UgbWF0Y2gKCQkJZm9yICgkaT0wOyAkaTw0OyAkaSsrKSB7CgkJCQlpZiAoZXJlZygiXFsoWzAtOV0rKVwtKFswLTldKylcXSIsJG1hc2tvY3RzWyRpXSwkcmVncykpIHsKCQkJCQlpZiAoICgkaXBvY3RzWyRpXSA+ICRyZWdzWzJdKSB8fCAoJGlwb2N0c1skaV0gPCAkcmVnc1sxXSkpICRyZXN1bHQgPSAwOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJaWYgKCRtYXNrb2N0c1skaV0gPD4gJGlwb2N0c1skaV0pICRyZXN1bHQgPSAwOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkcmVzdWx0OwoJfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDYXRlZ29yeUZyb21OYW1lKCRuYW1lKQoJewoJCXJldHVybiB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJG5hbWUpOwoJfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBsb2FkX2NhdGVnb3J5X2J5X2lkKCRpZCkKCXsKCQlyZXR1cm4gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCRpZCk7Cgl9CgoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjYXRlZ29yeV9wYXRoX2luX3VzZSgkcGF0aCkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoJCSRxdWVyeSA9ICdTRUxFQ1QgdXBsb2FkX2NhdGVnb3J5X2lkIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMgV0hFUkUgdXBsb2FkX2NhdGVnb3J5X3BhdGggPSA/JzsKCQkkdG1wID0gJGRiLT5HZXRPbmUoJHF1ZXJ5LGFycmF5KCRwYXRoKSk7CgkJaWYoICR0bXAgKSByZXR1cm4gVFJVRTsKCQlyZXR1cm4gRkFMU0U7Cgl9CgoJLy8gdG9kbzogZGVsZXRlIG1lIChjYWxsZXJzIHNob3VsZCB1c2UgZmxpcHBlZCBhcnJheSkKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlMaXN0KCkKCXsKCQkkY2F0cyA9IHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yaWVzKCk7CgkJaWYoIGlzX2FycmF5KCRjYXRzKSAmJiBjb3VudCgkY2F0cykgKSB7CgkJCSRvdXQgPSBhcnJheSgpOwoJCQlmb3JlYWNoKCAkY2F0cyBhcyAkaWQgPT4gJHJvdyApIHsKCQkJCSRvdXRbJHJvd1sndXBsb2FkX2NhdGVnb3J5X25hbWUnXV0gPSAkaWQ7CgkJCX0KCQkJcmV0dXJuICRvdXQ7CgkJfQoJfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDYXRlZ29yeVBhdGhGcm9tSUQoICRjYXRlZ29yeV9pZCApCgl7CgkJdHJ5IHsKCQkJcmV0dXJuIHVwbG9hZHNfdXRpbHM6OmdldF9jYXRlZ29yeV9wYXRoKCAkY2F0ZWdvcnlfaWQgKTsKCQl9CgkJY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKCQkJcmV0dXJuOwoJCX0KCX0KCgkvLyB0b2RvOiBkZWxldGUgbWUKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q2F0ZWdvcnlQYXRoRnJvbUZpbGVJRCggJGZpbGVfaWQgKQoJewoJCXRyeSB7CgkJCSRkZXRhaWxzID0gdXBsb2Fkc191dGlsczo6Z2V0X3VwbG9hZF9kZXRhaWxzKCAkZmlsZV9pZCApOwoJCQkkY2F0ZWdvcnkgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJGRldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKTsKCQkJcmV0dXJuICRjYXRlZ29yeVsndXBsb2FkX2NhdGVnb3J5X3BhdGgnXTsKCQl9CgkJY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKCQkJLy8gbm90aGluZyBoZXJlCgkJfQoJfQoKCS8vIHRvZG86IG1vdmUgdG8gdXBsb2Fkc191dGlscwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRfY2F0ZWdvcnlfZmlsZV9saXN0KCAkY2F0ZWdvcnlfaWQgKQoJewoJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJJHF1ZXJ5ID0gIlNFTEVDVCAqIEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwoJCSRmaWxlbGlzdCA9ICRkYi0+R2V0QXJyYXkoICRxdWVyeSwgYXJyYXkoICRjYXRlZ29yeV9pZCApICk7CgkJaWYoICEkZmlsZWxpc3QgKSByZXR1cm47CgkJcmV0dXJuICRmaWxlbGlzdDsKCX0KCgkvLyB0b2RvOiBtb3ZlIHRvIHVwbG9hZHNfdXRpbHMKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZU5hbWUoICRmaWxlX2lkICkKCXsKCQl0cnkgewoJCQkkZGF0YSA9IHVwbG9hZHNfdXRpbHM6OmdldF91cGxvYWRfZGV0YWlscygkZmlsZV9pZCk7CgkJCXJldHVybiAkZGF0YVsndXBsb2FkX25hbWUnXTsKCQl9CgkJY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKCQkJLy8gbm90aGluZyBoZXJlLgoJCX0KCX0KCgkvLyB0b2RvOiBkZWxldGUgbWUKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0RmlsZURldGFpbHMoICRmaWxlX2lkICkKCXsKCQl0cnkgewoJCQlyZXR1cm4gdXBsb2Fkc191dGlsczo6Z2V0X3VwbG9hZF9kZXRhaWxzKCRmaWxlX2lkKTsKCQl9CgkJY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKCQkJLy8gbm90aGluZyBoZXJlLgoJCX0KCX0KCgkvLyB0b2RvOiBkZWxldGUgbWUKCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2dldFVwbG9hZENhdGVnb3J5RGV0YWlscyggJGNhdGVnb3J5X2lkICkKCXsKCQl0cnkgewoJCQlyZXR1cm4gdXBsb2Fkc191dGlsczo6Z2V0X2NhdGVnb3J5KCAkY2F0ZWdvcnlfaWQgKTsKCQl9CgkJY2F0Y2goIEV4Y2VwdGlvbiAkZSApIHsKCQkJcmV0dXJuOwoJCX0KCX0KCgkvLyB0b2RvOiBtb3ZlIG1lCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3NjYW5kaXIoJGRpciA9ICcuLycsICRzb3J0ID0gMCkKCXsKCQkkZGlyX29wZW4gPSBAb3BlbmRpcigkZGlyKTsKCQlpZiAoISAkZGlyX29wZW4pIHJldHVybiBmYWxzZTsKCgkJJGZpbGVzID0gYXJyYXkoKTsKCQl3aGlsZSAoKCRkaXJfY29udGVudCA9IHJlYWRkaXIoJGRpcl9vcGVuKSkgIT0gZmFsc2UpIHsKCQkJLy8gd2UgaWdub3JlIGluZGV4Lmh0bWwgZmlsZXMgaWYgdGhlIHByZWZlcmVuY2UgaXMgc2V0CgkJCWlmKCAkZGlyX2NvbnRlbnQgPT0gJ2luZGV4Lmh0bWwnICYmICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfZHVtbXlfaW5kZXhfaHRtbCcpKSBjb250aW51ZTsKCgkJCS8vIGlnbm9yZSBkb3QgZmlsZXMKCQkJaWYoIHByZWdfbWF0Y2goICIvXlwuLyIsICRkaXJfY29udGVudCApICkgY29udGludWU7CgkJCSRmaWxlc1tdID0gJGRpcl9jb250ZW50OwoJCX0KCgkJaWYoIGlzX2FycmF5KCAkZmlsZXMgKSApIHsKCQkJaWYgKCRzb3J0ID09IDEpIHsKCQkJCXJzb3J0KCRmaWxlcywgU09SVF9TVFJJTkcpOwoJCQl9CgkJCWVsc2UgewoJCQkJc29ydCgkZmlsZXMsIFNPUlRfU1RSSU5HKTsKCQkJfQoJCX0KCQlyZXR1cm4gJGZpbGVzOwoJfQoKCS8vIHRvZG86IG1vdmUgbWUuCglwdWJsaWMgZnVuY3Rpb24gX2lzVmFsaWRGaWxlbmFtZSAoJGZpbGVuYW1lKQoJewoJCSRmaWxlX25hbWUgPSB0cmltKCRmaWxlbmFtZSk7CgkJJGV4dGVuc2lvbiA9IHN0cnRvbG93ZXIgKHN0cnJjaHIgKCRmaWxlX25hbWUsICIuIikpOwoKCQkvLyBjaGVjayBmb3IgZXh0ZW5zaW9uIG9yIGRvdCBmaWxlLgoJCWlmKCAhc3RycG9zKCRmaWxlX25hbWUsJy4nKSApIHJldHVybiBmYWxzZTsKCgkJLy8gYXJyYXkgb2YgZmlsZXMgd2UgZG9uJ3QgYWxsb3cKCQkkZXh0X3N0ciA9ICR0aGlzLT51cGxvYWRfZXh0ZW5zaW9uczsKCQlpZiggJGV4dF9zdHIgPT0gJycgKSAkZXh0X3N0ciA9ICR0aGlzLT5HZXRQcmVmZXJlbmNlICgidmFsaWRfdXBsb2FkZXh0ZW5zaW9ucyIpOwoJCSRleHRfYXJyYXkgPSBleHBsb2RlKCIsIiwgJGV4dF9zdHIpOwoJCSRleHRfY291bnQgPSBjb3VudCAoJGV4dF9hcnJheSk7CgoJCWlmICghJGZpbGVfbmFtZSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWVsc2UgewoJCQlpZiAoZW1wdHkoJGV4dF9hcnJheSkgfHwgISRleHRfYXJyYXkpIHsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWVsc2UgewoJCQkJZm9yZWFjaCAoJGV4dF9hcnJheSBhcyAkdmFsdWUpIHsKCQkJCQkkZmlyc3RfY2hhciA9IHN1YnN0ciAoJHZhbHVlLCAwLCAxKTsKCQkJCQlpZiAoJGZpcnN0X2NoYXIgPD4gIi4iKSB7CgkJCQkJCSRleHRlbnNpb25zW10gPSAiLiIuc3RydG9sb3dlciAoJHZhbHVlKTsKCQkJCQl9CgkJCQkJZWxzZSB7CgkJCQkJCSRleHRlbnNpb25zW10gPSBzdHJ0b2xvd2VyICgkdmFsdWUpOwoJCQkJCX0KCQkJCX0KCgkJCQkkdmFsaWRfZXh0ZW5zaW9uID0gZmFsc2U7CgkJCQlmb3JlYWNoICgkZXh0ZW5zaW9ucyBhcyAkdmFsdWUpIHsKCQkJCQlpZiAoJHZhbHVlID09ICRleHRlbnNpb24pIHsKCQkJCQkJJHZhbGlkX2V4dGVuc2lvbiA9IHRydWU7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCXJldHVybiAkdmFsaWRfZXh0ZW5zaW9uOwoJCQl9CgkJfQoJfQoKCiAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBFTkQgT0YgVVRJTElUWSBGVU5DVElPTlMKICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCiAgcHVibGljIGZ1bmN0aW9uIEdldEhlYWRlckhUTUwoKQogIHsKICAgICR0eHQgPSBwYXJlbnQ6OkdldEhlYWRlckhUTUwoKTsKCQkkb2JqID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdKUXVlcnlUb29scycsJzEuMicpOwogICAgaWYoIGlzX29iamVjdCgkb2JqKSApIHsKJHRtcGwgPSA8PDxFT1QKe0pRdWVyeVRvb2xzIGFjdGlvbj0ncmVxdWlyZScgbGliPSd0YWJsZXNvcnRlcixqcXVlcnl0b29scyd9CntKUXVlcnlUb29scyBhY3Rpb249J3BsYWNlbWFya2VyJ30KRU9UOwogICAgICAkdHh0IC49ICR0aGlzLT5Qcm9jZXNzVGVtcGxhdGVGcm9tRGF0YSgkdG1wbCk7CiAgICB9CiAgICByZXR1cm4gJHR4dDsKICB9CgoJcHVibGljIGZ1bmN0aW9uIEdldEV2ZW50RGVzY3JpcHRpb24oICRuYW1lICkKCXsKCQlzd2l0Y2ggKCAkbmFtZSApIHsKCQljYXNlICdPblVwbG9hZCc6CgkJCXJldHVybiAkdGhpcy0+TGFuZygnaW5mb19ldmVudF9vbnVwbG9hZCcpOwoJCQlicmVhazsKCQljYXNlICdPblJlbW92ZSc6CgkJCXJldHVybiAkdGhpcy0+TGFuZygnaW5mb19ldmVudF9vbnJlbW92ZScpOwoJCQlicmVhazsKCQljYXNlICdPbkRvd25sb2FkJzoKCQkJcmV0dXJuICR0aGlzLT5MYW5nKCdpbmZvX2V2ZW50X29uZG93bmxvYWQnKTsKCQkJYnJlYWs7CgkJY2FzZSAnT25DcmVhdGVDYXRlZ29yeSc6CgkJCXJldHVybiAkdGhpcy0+TGFuZygnaW5mb19ldmVudF9vbmNyZWF0ZWNhdGVnb3J5Jyk7CgkJCWJyZWFrOwoJCWNhc2UgJ09uRGVsZXRlQ2F0ZWdvcnknOgoJCQlyZXR1cm4gJHRoaXMtPkxhbmcoJ2luZm9fZXZlbnRfb25kZWxldGVjYXRlZ29yeScpOwoJCQlicmVhazsKCQl9CgkJcmV0dXJuICIiOwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBTZXRQYXJhbWV0ZXJzICgpCgl7CiAgICBwYXJlbnQ6OlNldFBhcmFtZXRlcnMoKTsKCgkJJHRoaXMtPlJlZ2lzdGVyTW9kdWxlUGx1Z2luKCk7CgkJJHRoaXMtPlJlc3RyaWN0VW5rbm93blBhcmFtcygpOwoKCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL1tVdV1wbG9hZHNcLyg/UDx1cGxvYWRfaWQ+WzAtOV0rKVwvKD9QPGp1bms+Lio/KSQvJywKCQkJYXJyYXkoJ3Nob3d0ZW1wbGF0ZSc9PidmYWxzZScsICdhY3Rpb24nPT4nZ2V0ZmlsZScpKTsKCQkkdGhpcy0+UmVnaXN0ZXJSb3V0ZSgnL1tVdV1wbG9hZHNcL2xpbWl0ZWRcLyg/UDx1cmxfa2V5Pi4qPykkLycsIGFycmF5KCdzaG93dGVtcGxhdGUnPT4nZmFsc2UnLCAnYWN0aW9uJz0+J2dldGZpbGUnKSk7CgkJJHRoaXMtPlJlZ2lzdGVyUm91dGUoJy9bVXVdcGxvYWRzXC9maWxlXC8oP1A8cmV0dXJuaWQ+WzAtOV0rKVwvKD9QPHVwbG9hZF9pZD5bMC05XSspXC8oP1A8anVuaz4uKj8pJC8nLAoJCQkJCQkJCQkJCQkgYXJyYXkoJ2FjdGlvbic9PidkZXRhaWwnKSk7CgoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2tleScsICd2YWx1ZScsICR0aGlzLT5MYW5nKCdwYXJhbV9rZXknKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbm9hdXRob3InLCAnMScsICR0aGlzLT5MYW5nKCdwYXJhbV9ub2F1dGhvcicpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd1cGxvYWRfaWQnLCdpZCcsJHRoaXMtPkxhbmcoJ3BhcmFtX3VwbG9hZF9pZCcpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdjb3VudCcsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX2NvdW50JykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NvcnRvcmRlcicsJ2RhdGVfYXNjJywkdGhpcy0+TGFuZygncGFyYW1fc29ydG9yZGVyJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ZpbGVfZXh0ZW5zaW9ucycsJ2V4dDEsZXh0MixleHQzJywkdGhpcy0+TGFuZygncGFyYW1fZmlsZWV4dGVuc2lvbnMnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignY2F0ZWdvcnknLCd1cGxvYWRfY2F0ZWdvcnknLCR0aGlzLT5MYW5nKCdwYXJhbV9jYXRlZ29yeScpLGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdmaWx0ZXInLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV9maWx0ZXInKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbm9faW5pdGlhbCcsJzEnLCR0aGlzLT5MYW5nKCdwYXJhbV9ub19pbml0aWFsJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ21vZGUnLCdzdW1tYXJ5JywkdGhpcy0+TGFuZygncGFyYW1fbW9kZScpLGZhbHNlKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCd0ZW1wbGF0ZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX3RlbXBsYXRlJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2RldGFpbHRlbXBsYXRlJywnJywkdGhpcy0+TGFuZygncGFyYW1fZGV0YWlsdGVtcGxhdGUnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbm9jYXB0Y2hhJywnJywkdGhpcy0+TGFuZygncGFyYW1fbm9jYXB0Y2hhJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ZpbGV0eXBlcycsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX2ZpbGV0eXBlcycpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzZWxlY3RuYW1lJywnJywkdGhpcy0+TGFuZygncGFyYW1fc2VsZWN0bmFtZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzZWxlY3Rub25lJywnJywkdGhpcy0+TGFuZygncGFyYW1fc2VsZWN0bm9uZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzZWxlY3R2YWx1ZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX3NlbGVjdHZhbHVlJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NlbGVjdGZvcm0nLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV9zZWxlY3Rmb3JtJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3ByZWZpeCcsMCwkdGhpcy0+TGFuZygncGFyYW1fcHJlZml4JykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3ByZWZpeF9mZXUnLDAsJHRoaXMtPkxhbmcoJ3BhcmFtX3ByZWZpeF9mZXUnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZGV0YWlscGFnZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX2RldGFpbHBhZ2UnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignbGlzdGluZ3RlbXBsYXRlJywnJywkdGhpcy0+TGFuZygncGFyYW1fbGlzdGluZ3RlbXBsYXRlJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2xpc3Rpbmdzb3J0b3JkZXInLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV9saXN0aW5nc29ydG9yZGVyJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ3NlbmRmaWxlcGFnZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX3NlbmRmaWxlcGFnZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdzdW1tYXJ5cGFnZScsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX3N1bW1hcnlwYWdlJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2FjdGlvbicsJ2RlZmF1bHQnLCR0aGlzLT5MYW5nKCdwYXJhbV9hY3Rpb24nKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZmllbGRuYW1lJywnJywkdGhpcy0+TGFuZygncGFyYW1fZmllbGRuYW1lJykpOwoJCSR0aGlzLT5DcmVhdGVQYXJhbWV0ZXIoJ2ZpZWxkdmFsJywnJywkdGhpcy0+TGFuZygncGFyYW1fZmllbGR2YWwnKSk7CgkJJHRoaXMtPkNyZWF0ZVBhcmFtZXRlcignZmllbGRuYW1lMicsJycsJHRoaXMtPkxhbmcoJ3BhcmFtX2ZpZWxkbmFtZScpKTsKCQkkdGhpcy0+Q3JlYXRlUGFyYW1ldGVyKCdmaWVsZHZhbDInLCcnLCR0aGlzLT5MYW5nKCdwYXJhbV9maWVsZHZhbCcpKTsKCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2p1bmsnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3N1bW1hcnlwYWdlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjYXRlZ29yeWxpc3R0ZW1wbGF0ZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgna2V5JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdub2F1dGhvcicsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgndXBsb2FkX2lkJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdjb3VudCcsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc29ydG9yZGVyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdmaWxlX2V4dGVuc2lvbnMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2NhdGVnb3J5JywgQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmlsdGVyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdub19pbml0aWFsJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdtb2RlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCd0ZW1wbGF0ZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZGV0YWlsdGVtcGxhdGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ25vY2FwdGNoYScsQ0xFQU5fSU5UKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmlsZXR5cGVzJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzZWxlY3RuYW1lJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzZWxlY3Rub25lJyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzZWxlY3R2YWx1ZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnc2VsZWN0Zm9ybScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVydHlwZSgncHJlZml4JyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJ0eXBlKCdwcmVmaXhfZmV1JyxDTEVBTl9JTlQpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdkZXRhaWxwYWdlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdzZW5kZmlsZXBhZ2UnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ3VybF9rZXknLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2ZpZWxkbmFtZScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnZmllbGR2YWwnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2ZpZWxkbmFtZTInLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2ZpZWxkdmFsMicsQ0xFQU5fU1RSSU5HKTsKCgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X2tleScsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfYXV0aG9yJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbnB1dF9zdW1tYXJ5JyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbnB1dF9kZXNjcmlwdGlvbicsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfZGVzdG5hbWUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X3JlcGxhY2UnLENMRUFOX0lOVCk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X2NhcHRjaGEnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2RvX3VwbG9hZGZpbGUnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ25vb3V0cHV0JyxDTEVBTl9JTlQpOwoKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnbGlzdGluZ3RlbXBsYXRlJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdsaXN0aW5nc29ydG9yZGVyJyxDTEVBTl9TVFJJTkcpOwoKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfZmlsdGVyJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdoaWRkZW5fcGFyYW1zJyxDTEVBTl9TVFJJTkcpOwoJCSR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKCdpbnB1dF9zdWJtaXQnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X3NlbmR0bycsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfc3ViamVjdCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgnaW5wdXRfbm90ZXMnLENMRUFOX1NUUklORyk7CgkJJHRoaXMtPlNldFBhcmFtZXRlclR5cGUoJ2lucHV0X2NhbmNlbCcsQ0xFQU5fU1RSSU5HKTsKCQkkdGhpcy0+U2V0UGFyYW1ldGVyVHlwZSgncGFnZW51bScsQ0xFQU5fSU5UKTsKICAgICR0aGlzLT5TZXRQYXJhbWV0ZXJUeXBlKENMRUFOX1JFR0VYUC4nL2ZpZWxkXy4qLycsQ0xFQU5fU1RSSU5HKTsKCgkJdXBsb2Fkc19zbWFydHk6OmluaXQoKTsgLy8gaW5pdGlhbGl6ZSBzbWFydHkgcGx1Z2lucwoJfQoKCXB1YmxpYyBmdW5jdGlvbiBWaXNpYmxlVG9BZG1pblVzZXIgKCkKCXsKCQlyZXR1cm4gJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoJ01hbmFnZSBVcGxvYWRzJykgfHwJJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFRlbXBsYXRlcycpIHx8CgkJCSR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykgfHwgJHRoaXMtPkNoZWNrUGVybWlzc2lvbignTW9kaWZ5IFNpdGUgUHJlZmVyZW5jZXMnKSB8fAoJCQkkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdDcmVhdGUgVXBsb2FkcyBSZXBvcnRzJyk7Cgl9CgoJcHVibGljIGZ1bmN0aW9uIERvQWN0aW9uICgkYWN0aW9uLCAkaWQsICRwYXJhbXMsICRyZXR1cm5pZCA9IC0xKQoJewoJCXN3aXRjaCAoJGFjdGlvbikgewoJCWNhc2UgJ2RvX2RlbGV0ZWNhdGVnb3J5JzoKCQkJLy8gY2hlY2sgcGVybWlzc2lvbnMgYWdhaW4KCQkJaWYgKCR0aGlzLT5DaGVja1Blcm1pc3Npb24gKCdNYW5hZ2UgVXBsb2FkcycpKSB7CgkJCQkkZGVsZXRlX2RpciA9IGZhbHNlOwoJCQkJaWYoICFpc3NldCgkcGFyYW1zWydjYXRlZ29yeV9pZCddKSApIHsKCQkJCQkkdGhpcy0+U2V0RXJyb3IoJHRoaXMtPkxhbmcoJ2Vycm9yX21pc3NpbmdfaW52YWxpZCcsJ2NhdGVnb3J5X2lkJykpOwoJCQkJCSR0aGlzLT5SZWRpcmVjdFRvVGFiKCRpZCwnY2F0ZWdvcmllcycpOwoJCQkJfQoJCQkJaWYoIGlzc2V0KCRwYXJhbXNbJ2lucHV0X2RlbGV0ZWRpcmVjdG9yeSddKSAmJiAkcGFyYW1zWydpbnB1dF9kZWxldGVkaXJlY3RvcnknXSApICRkZWxldGVfZGlyID0gdHJ1ZTsKCQkJCSRtc2cgPSAkdGhpcy0+X0FkbWluRG9EZWxldGVDYXRlZ29yeSgkcGFyYW1zWydjYXRlZ29yeV9pZCddLCRkZWxldGVfZGlyKTsKCQkJCWlmKCAkbXNnICkgJHRoaXMtPlNldEVycm9yKCRtc2cpOwoJCQkJJHRoaXMtPlJlZGlyZWN0VG9UYWIoJGlkLCdjYXRlZ29yaWVzJyk7CgkJCX0KCQkJYnJlYWs7CgoJCWNhc2UgJ2RvX2RlbGV0ZXVwbG9hZCc6CgkJCS8vIGNoZWNrIHBlcm1pc3Npb25zIGFnYWluCgkJCWlmKCAkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uKCdNYW5hZ2UgVXBsb2FkcycpIHx8ICR0aGlzLT5DaGVja1Blcm1pc3Npb24oJ1VwbG9hZCBGaWxlcyB0byBVcGxvYWRzJykpIHsKCQkJCWlmKCAhaXNzZXQoICRwYXJhbXNbJ3VwbG9hZF9pZCddICkgKSB7CgkJCQkJJG1vZHVsZS0+X0Rpc3BsYXlFcnJvclBhZ2UgKCRpZCwgJHBhcmFtcywgJHJldHVybmlkLCAkbW9kdWxlLT5MYW5nICgnZXJyb3JfaW5zdWZmaWNpZW50cGFyYW1zJywndXBsb2FkX2lkJykpOwoJCQkJCXJldHVybjsKCQkJCX0KCgkJCQkkbXNnID0gJHRoaXMtPl9BZG1pbkRvRGVsZXRlVXBsb2FkKCRwYXJhbXNbJ3VwbG9hZF9pZCddLHRydWUpOwoJCQkJaWYoICRtc2cgKSAkdGhpcy0+U2V0RXJyb3IoJG1zZyk7CgkJCQkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICdmaWxlcycsIGFycmF5KCAnaW5wdXRfY2F0ZWdvcnknID0+ICR1cGxvYWRyb3dbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKSk7CgkJCX0KCQkJYnJlYWs7CgoJCWNhc2UgJ3VwZGF0ZWVtYWlsdGVtcGxhdGUnOgoJCQkvLyBjaGVjayBwZXJtaXNzaW9ucyBhZ2FpbgoJCQlpZiAoJHRoaXMtPkNoZWNrUGVybWlzc2lvbiAoJ01vZGlmeSBUZW1wbGF0ZXMnKSkgewoJCQkJaWYgKGlzc2V0ICgkcGFyYW1zWydkZWZhdWx0YnV0dG9uJ10pKSB7CgkJCQkJJGZuID0gX19ESVJfXy4nL3RlbXBsYXRlcy9vcmlnX2VtYWlsbm90aWZ5X3RlbXBsYXRlLnRwbCc7CgkJCQkJaWYoIGZpbGVfZXhpc3RzKCRmbikgKSB7CgkJCQkJCSR0ZW1wbGF0ZSA9IEBmaWxlX2dldF9jb250ZW50cygkZm4pOwoJCQkJCQkkdGhpcy0+U2V0VGVtcGxhdGUoICd1cGxvYWRfZW1haWx0ZW1wbGF0ZScsICR0ZW1wbGF0ZSk7CgkJCQkJfQoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJJHRoaXMtPlNldFRlbXBsYXRlICgndXBsb2FkX2VtYWlsdGVtcGxhdGUnLCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSk7CgkJCQl9CgkJCQkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICdlbWFpbF90ZW1wbGF0ZScsICcnLCAnYWRtaW5fdGVtcGxhdGVzJyk7CgkJCX0KCgkJY2FzZSAndXBkYXRlc2VuZGZpbGVlbWFpbCc6CgkJCS8vIGNoZWNrIHBlcm1pc3Npb25zIGFnYWluCgkJCWlmICgkdGhpcy0+Q2hlY2tQZXJtaXNzaW9uICgnTW9kaWZ5IFRlbXBsYXRlcycpKSB7CgkJCQlpZiAoaXNzZXQgKCRwYXJhbXNbJ2RlZmF1bHRidXR0b24nXSkpIHsKCQkJCQkvLyB0ZW1wbGF0ZSB1c2VkIGZvciBzZW5kZmlsZSBlbWFpbAoJCQkJCSRmbiA9IF9fRElSX18uJy90ZW1wbGF0ZXMvb3JpZ19zZW5kZmlsZXJwdF90ZW1wbGF0ZS50cGwnOwoJCQkJCWlmKCBmaWxlX2V4aXN0cygkZm4pICkgewoJCQkJCQkkdGVtcGxhdGUgPSBAZmlsZV9nZXRfY29udGVudHMoJGZuKTsKCQkJCQkJJHRoaXMtPlNldFRlbXBsYXRlKCAndXBsb2FkX3NlbmRmaWxlcnB0JywgJHRlbXBsYXRlKTsKCQkJCQl9CgkJCQl9CgkJCQllbHNlIHsKCQkJCQkkdGhpcy0+U2V0VGVtcGxhdGUgKCd1cGxvYWRfc2VuZGZpbGVycHQnLCAkcGFyYW1zWyd0ZW1wbGF0ZWNvbnRlbnQnXSk7CgkJCQl9CgkJCQkkdGhpcy0+UmVkaXJlY3RUb1RhYigkaWQsICdlbWFpbF90ZW1wbGF0ZScsICcnLCAnYWRtaW5fdGVtcGxhdGVzJyk7CgkJCX0KCgkJZGVmYXVsdDoKCQkJcGFyZW50OjpEb0FjdGlvbiggJGFjdGlvbiwgJGlkLCAkcGFyYW1zLCAkcmV0dXJuaWQgKTsKCQkJYnJlYWs7CgkJfQoJfQoKCgkvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJU2VhcmNoUmVzdWx0KCRyZXR1cm5pZCwkYXJ0aWNsZWlkLCRhdHRyPScnKQoJLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KCXB1YmxpYyBmdW5jdGlvbiBTZWFyY2hSZXN1bHQoJHJldHVybmlkLCAkYXJ0aWNsZWlkLCAkYXR0ciA9ICcnKQoJewoJCXRyeSB7CgkJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJCSRyZXN1bHQgPSBhcnJheSgpOwoJCQlpZiggJGF0dHIgPT0gJ3VwbG9hZCcpIHsKCQkJCS8vIGdldCB0aGUgY2F0ZWdvcnkgaWQgZm9yIGFuIHVwbG9hZCBpZAoJCQkJJGRldGFpbHMgPSB1cGxvYWRzX3V0aWxzOjpnZXRfdXBsb2FkX2RldGFpbHMoJGFydGljbGVpZCk7CgoJCQkJLy8gbm93IGdldCB0aGUgY2F0ZWdvcnkgbmFtZSBpbnN0ZWFkIG9mIHRoZSBjYXRlZ29yeSBpZCwgZ29kCgkJCQkvLyB3YXMgSSBzdHVwaWQuCgkJCQkkY2F0ZWdvcnkgPSB1cGxvYWRzX3V0aWxzOjpnZXRfY2F0ZWdvcnkoJGRldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9pZCddKTsKCgkJCQkkcmVzdWx0WzBdID0gJHRoaXMtPkdldEZyaWVuZGx5TmFtZSgpOwoJCQkJJHJlc3VsdFsxXSA9ICRkZXRhaWxzWyd1cGxvYWRfbmFtZSddOwoJCQkJJHJlc3VsdFsyXSA9ICR0aGlzLT5DcmVhdGVMaW5rKCAkYXJ0aWNsZWlkLCAnZGVmYXVsdCcsICRyZXR1cm5pZCwgJGRldGFpbHNbJ3VwbG9hZF9uYW1lJ10sCgkJCQkJCQkJCQkJCQkJCQkJCQkJYXJyYXkoJ21vZGUnPT4nc2luZ2xlJywndXBsb2FkX2lkJyA9PiAkYXJ0aWNsZWlkLCdjYXRlZ29yeScgPT4gJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfbmFtZSddICksICcnLCB0cnVlKTsKCQkJCXJldHVybiAkcmVzdWx0OwoJCQl9CgkJfQoJCWNhdGNoKCBFeGNlcHRpb24gJGUgKSB7CgkJCS8vIG5vdGhpbmcgaGVyZQoJCX0KCX0KCgoJLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCVNlYXJjaFJlSW5kZXgoJG1vZHVsZSkKCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCglwdWJsaWMgZnVuY3Rpb24gU2VhcmNoUmVJbmRleCgmJG1vZHVsZSkKCXsKCQkkZGIgPSBjbXNtcygpLT5HZXREYigpOwoKCQkvLyB0b2RvOiB0aHJvdyB0aGlzIHN0dWZmIGludG8gYSBjZ2pvYm1nciBqb2IKCQkvLyBjdXogaW5kZXhpbmcgYSBjb3VwbGUgdGhvdXNhbmQgZmlsZXMgY291bGQgYmUgc3R1cGlkbHkgYnVzeS4KCQkkcXVlcnkgPSAnU0VMRUNUIFNRTF9DQUxDX0ZPVU5EX1JPV1MgQS51cGxvYWRfaWQgRlJPTSAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHMgQQogICAgICAgICAgICAgIExFRlQgSk9JTiAnLmNtc19kYl9wcmVmaXgoKS4nbW9kdWxlX3VwbG9hZHNfY2F0ZWdvcmllcyBCCiAgICAgICAgICAgICAgT04gQS51cGxvYWRfY2F0ZWdvcnlfaWQgPSBCLnVwbG9hZF9jYXRlZ29yeV9pZAogICAgICAgICAgICAgIFdIRVJFIEIudXBsb2FkX2NhdGVnb3J5X2xpc3RhYmxlID0gMSc7CgkJJGxpbWl0ID0gMTAwOwoJCSRvZmZzZXQgPSAwOwoJCSRkYnIgPSAkZGItPlNlbGVjdExpbWl0KCRxdWVyeSwkbGltaXQsJG9mZnNldCk7CgkJJHRvdGFsX3JlY29yZHMgPSAkZGItPkdldE9uZSgnU0VMRUNUIEZPVU5EX1JPV1MoKScpOwoJCXdoaWxlKCAkb2Zmc2V0IDwgJHRvdGFsX3JlY29yZHMgKSB7CgkJCSRsaXN0ID0gJGRici0+R2V0QXJyYXkoKTsKCQkJJGxpc3QgPSBjZ2VfYXJyYXk6OmV4dHJhY3RfZmllbGQoJGxpc3QsJ3VwbG9hZF9pZCcpOwoJCQl1cGxvYWRzX3V0aWxzOjpjYWNoZV91cGxvYWRzX2Zyb21fbGlzdCgkbGlzdCk7CgoJCQlmb3JlYWNoKCAkbGlzdCBhcyAkdXBsb2FkX2lkICkgewoJCQkJdXBsb2Fkc191dGlsczo6aW5kZXhfdXBsb2FkKCR1cGxvYWRfaWQpOwoJCQl9CgoJCQl1cGxvYWRzX3V0aWxzOjpkZWxldGVfdXBsb2FkX2NhY2hlKCRtb2R1bGUsJHVwbG9hZF9pZCk7CgkJCSRvZmZzZXQgKz0gY291bnQoJGxpc3QpOwoJCQl1bnNldCgkbGlzdCk7CgkJCSRkYnIgPSAkZGItPlNlbGVjdExpbWl0KCRxdWVyeSwkbGltaXQsJG9mZnNldCk7CgkJfQoJfQoKICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICBCRUdJTiBPRiBVSSBTVVBQT1JUIEZVTkNUSU9OUwogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwoKCS8qKgoJICogQGludGVybmFsCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfQWRtaW5Eb0RlbGV0ZUNhdGVnb3J5ICgkY2F0ZWdvcnlfaWQpCgl7CgkJVXBsb2Fkczo6bG9hZF9hZG1pbigpOwoJCXJldHVybiBfdXBsb2Fkc19BZG1pbkRvRGVsZXRlQ2F0ZWdvcnkoJHRoaXMsJGNhdGVnb3J5X2lkKTsKCX0KCgkvKioKCSAqCgkgKiBAaW50ZXJuYWwKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9BZG1pbkRvRGVsZXRlVXBsb2FkICgkdXBsb2FkX2lkLCRkZWxldGVfZmlsZSA9IGZhbHNlKQoJewoJCVVwbG9hZHM6OmxvYWRfYWRtaW4oKTsKCQlyZXR1cm4gX3VwbG9hZHNfQWRtaW5Eb0RlbGV0ZVVwbG9hZCgkdGhpcywkdXBsb2FkX2lkLCRkZWxldGVfZmlsZSk7CiAgfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQogIHByb3RlY3RlZCBmdW5jdGlvbiBfRGlzcGxheUVycm9yUGFnZSAoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkLCAkbWVzc2FnZSA9ICcnKQogIHsKICAgICR0aGlzLT5zbWFydHktPmFzc2lnbiAoJ3RpdGxlX2Vycm9yJywgJHRoaXMtPkxhbmcgKCdlcnJvcicpKTsKICAgIGlmICgkbWVzc2FnZSAhPSAnJykgJHRoaXMtPnNtYXJ0eS0+YXNzaWduICgnbWVzc2FnZScsICRtZXNzYWdlKTsKICAgIGlmKCAkcmV0dXJuaWQgPT0gJycgKSAkdGhpcy0+c21hcnR5LT5hc3NpZ24oJ2xpbmsnLAkkdGhpcy0+Q3JlYXRlTGluaygkaWQsJ2RlZmF1bHRhZG1pbicsJHJldHVybmlkLAkkdGhpcy0+TGFuZygncmV0dXJudG9tb2R1bGUnKSkpOwoKICAgIC8vIERpc3BsYXkgdGhlIHBvcHVsYXRlZCB0ZW1wbGF0ZQogICAgZWNobyAkdGhpcy0+UHJvY2Vzc1RlbXBsYXRlICgnZXJyb3IudHBsJyk7CiAgfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQogIHB1YmxpYyBmdW5jdGlvbiBHZXRVcGxvYWREZXRhaWxzKCAkaWQsICRyZXR1cm5pZCA9ICcnICkKICB7CiAgICAkcm93ID0gJHRoaXMtPmdldEZpbGVEZXRhaWxzKCRpZCk7CiAgICBpZiggISRyb3cgKSB7CgkJCSRkYiA9IGNtc21zKCktPkdldERiKCk7CgkJCXJldHVybiBhcnJheShGQUxTRSwgJGRiLT5FcnJvck1zZygpKTsKCQl9CgogICAgLy8gaGF2ZSBkZXRhaWxzIGZyb20gdGhlIHRhYmxlLCBub3cKICAgIC8vIGhhdmUgdG8gYWRkIHNvbWV0aGluZyBzdWNoIHRoYXQgYSBsaW5rIGNhbiBiZSBnZW5lcmF0ZWQKICAgIC8vIHRoYXQgd2lsbCBzdGlsbCBjb3VudCB0aGUgbnVtYmVyIG9mIGRvd25sb2FkcywgZXRjCiAgICAkcm93Wyd1cmwnXSA9ICR0aGlzLT5DcmVhdGVMaW5rICgkaWQsICdnZXRmaWxlJywgJHJldHVybmlkLCAnJywgYXJyYXkgKCd1cGxvYWRfaWQnID0+ICRyb3dbJ3VwbG9hZF9pZCddKSwKCQkJCQkJCQkJCQkJCQkJCQkJICcnLCB0cnVlLCB0cnVlLCAnJywgZmFsc2UsICR0aGlzLT5fZ2V0RmlsZVVSTCgkcm93Wyd1cGxvYWRfaWQnXSwkcm93Wyd1cGxvYWRfbmFtZSddKSk7CgkJJHJvd1snZG93bmxvYWRfdXJsJ10gPSAkcm93Wyd1cmwnXTsKCiAgICAkcm93WydsaW5rJ10gPSAkdGhpcy0+Q3JlYXRlTGluayAoJGlkLCAnZ2V0ZmlsZScsICRyZXR1cm5pZCwgJHJvd1sndXBsb2FkX25hbWUnXSwJYXJyYXkgKCd1cGxvYWRfaWQnID0+ICRyb3dbJ3VwbG9hZF9pZCddKSwKCQkJCQkJCQkJCQkJCQkJCQkJCScnLCBmYWxzZSwgdHJ1ZSwgJycsIGZhbHNlLAkkdGhpcy0+X2dldEZpbGVVUkwoJHJvd1sndXBsb2FkX2lkJ10sJHJvd1sndXBsb2FkX25hbWUnXSkpOwoJCSRjb25maWcgPSBjbXNtcygpLT5HZXRDb25maWcoKTsKICAgICRyb3dbJ2Fic3VybCddID0gJGNvbmZpZ1sndXBsb2Fkc191cmwnXS4iLyIuCiAgICAgICR0aGlzLT5nZXRDYXRlZ29yeVBhdGhGcm9tRmlsZUlEKCAkcm93Wyd1cGxvYWRfaWQnXSApLiIvIi4KICAgICAgJHJvd1sndXBsb2FkX25hbWUnXTsKICAgIHJldHVybiAkcm93OwogIH0KCgkvKioKCSAqIEBpZ25vcmUKCSAqIEBkZXByZWNhdGVkCgkgKi8KICBwcm90ZWN0ZWQgZnVuY3Rpb24gQXR0ZW1wdFVwbG9hZCAoJGlkLCAmJHBhcmFtcywgJHJldHVybmlkKQogIHsKCQkvLyBkZXByZWNhdGVkLi4uIHRoaXMgc3R1ZmYgc2hvdWxkIHVzZSB0aGUgdXBsb2Fkc191cGxvYWRhc3Npc3RhbnQgY2xhc3MuCgkJVXBsb2Fkczo6bG9hZF9jb21tb24oKTsKCQlyZXR1cm4gX3VwbG9hZHNfQXR0ZW1wdFVwbG9hZCgkdGhpcywkaWQsJHBhcmFtcywkcmV0dXJuaWQpOwogIH0KCgkvKioKCSAqIEBpZ25vcmUKCSAqLwogIHB1YmxpYyBmdW5jdGlvbiBfaGFuZGxlVXBsb2FkICgkZGVzdERpciwgJGZpZWxkTmFtZSA9ICdfdXBsb2FkJywgJG5hbWVDYWxsYmFjayA9IGZhbHNlLCAkZGVzdG5hbWUgPSAnJywkZW5mb3JjZWV4dGVuc2lvbiA9IHRydWUsCgkJCQkJCQkJCQkJCQkJCQkgJHJlcGxhY2VfZXhpc3RpbmcgPSBmYWxzZSwgJGZpbGVuYW1lUHJlZml4ID0gJycpCiAgewoJCS8vIGRlcHJlY2F0ZWQuLi4gdGhpcyBzdHVmZiBzaG91bGQgdXNlIHRoZSB1cGxvYWRzX3VwbG9hZGFzc2lzdGFudCBjbGFzcy4KCQlVcGxvYWRzOjpsb2FkX2NvbW1vbigpOwoJCXJldHVybiBfdXBsb2Fkc19oYW5kbGVVcGxvYWQoJHRoaXMsJGRlc3REaXIsICRmaWVsZE5hbWUsICRuYW1lQ2FsbGJhY2ssICRkZXN0bmFtZSwgJGVuZm9yY2VleHRlbnNpb24sCgkJCQkJCQkJCQkJCQkJCQkgJHJlcGxhY2VfZXhpc3RpbmcsICRmaWxlbmFtZVByZWZpeCk7CiAgfQoKCS8vIHRvZG86IG1vdmUgbWUuCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIFNjYW5EaXJlY3RvcnkoJGNhdGVnb3J5X2lkLCAkZGlyLCAkZG9fdGh1bWJuYWlscyA9IFRSVUUsICRkb19pbmRleGluZyA9IEZBTFNFICkKICB7CgkJJGNhdGVnb3J5ID0gVXBsb2Fkczo6bG9hZF9jYXRlZ29yeV9ieV9pZCgkY2F0ZWdvcnlfaWQpOwoJCWlmKCAhJGNhdGVnb3J5ICkgcmV0dXJuOwoKICAgICRkYiA9IGNtc21zKCktPkdldERiKCk7CiAgICAkZGVzYyA9ICJGaWxlIFNjYW5uZWQgYXQgIi5zdHJmdGltZSgnJXggJVgnKTsKCQkkbm93ID0gJGRiLT5EYlRpbWVTdGFtcCh0aW1lKCkpOwoKICAgICRmaWxlcyA9ICR0aGlzLT5fc2NhbmRpciggJGRpciApOwogICAgaWYoICR0aGlzLT5HZXRQcmVmZXJlbmNlKCdjcmVhdGVfZHVtbXlfaW5kZXhfaHRtbCcpICkgQHRvdWNoKCAkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuImluZGV4Lmh0bWwiICk7CiAgICBpZiggJGZpbGVzICkgewoJCQlmb3JlYWNoKCAkZmlsZXMgYXMgJGZpbGUgKSB7CgkJCQkvLyBpZ25vcmUgZGlyZWN0b3JpZXMgLiBhbmQgLi4KCQkJCWlmKCAkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIiApIGNvbnRpbnVlOwoKCQkJCS8vIGlnbm9yZSBhbnkgZGlyZWN0b3JpZXMKCQkJCSRzcmNwID0gJGRpci5ESVJFQ1RPUllfU0VQQVJBVE9SLiRmaWxlOwoJCQkJaWYoIGlzX2RpciggJHNyY3AgKSApIGNvbnRpbnVlOwoKCQkJCS8vIGlnbm9yZSB0aHVtYm5haWwgZmlsZXMKCQkJCWlmKCBzdGFydHN3aXRoKCRmaWxlLCd0aHVtYl8nKSApIGNvbnRpbnVlOwoKCQkJCS8vIGdvdCB0aGUgZmlsZSwgbm93IG5lZWQgaXQncyBzaXplCgkJCQkkc2l6ZSA9IGZpbGVzaXplKCRzcmNwKTsKCgkJCQkvLyBub3cgd2UgbmVlZCB0byBtYXliZSByZW5hbWUgdGhlIGZpbGUuLi4KCQkJCS8vIGN1eiBpdCBtYXkgaGF2ZSBzcGFjZXMgaW4gaXQsIGFuZCBodHRwIG1heSBub3QgbGlrZSB0aGF0CgkJCQkvLyB3ZSB1c2UgYW4gKG9wdGlvbmFsKSBjb3VudGVyIHRvIG1ha2Ugc3VyZSB0aGF0IHdlCgkJCQkvLyBjYW4gaGF2ZSBudW1lcm91cyBmaWxlcyB3aXRoIHNpbWlsYXIgbmFtZXMKCQkJCSRwb3N0Zml4ID0gIiI7CgkJCQl3aGlsZSggJHBvc3RmaXggPCAxMDAgKSB7CgkJCQkJJGRlc3RmaWxlID0gc3RyX3JlcGxhY2UgKGFycmF5ICgnICcsICclMjAnKSwgYXJyYXkgKCdfJywgJ18nKSwgJGZpbGUgKTsKCQkJCQlpZiggJHBvc3RmaXggIT0gIiIgKSAkZGVzdGZpbGUgLj0gIl8iIC4gJHBvc3RmaXg7CgoJCQkJCWlmKCAkZGVzdGZpbGUgIT0gJGZpbGUgKSB7CgkJCQkJCSRkZXN0cCA9ICRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kZGVzdGZpbGU7CgoJCQkJCQkvLyB5ZXAsIHdlIGdvdHRhIHJlbmFtZSBpdAoJCQkJCQkvLyBidXQgbWFrZSBzdXJlIHRoZSBmaWxlIGRvZXNuJ3QgYWxyZWFkeSBleGlzdCBmaXJzdAoJCQkJCQlpZiggZmlsZV9leGlzdHMoICRkZXN0cCApICkgewoJCQkJCQkJLy8gdWgtb2ggaXQgZXhpc3RzCgkJCQkJCQkvLyBpbmNyZW1lbnQgdGhlIHBvc3RmaXgKCQkJCQkJCWlmKCAkcG9zdGZpeCA9PSAiIiApIHsKCQkJCQkJCQkkcG9zdGZpeCA9IDE7CgkJCQkJCQl9CgkJCQkJCQllbHNlIHsKCQkJCQkJCQkkcG9zdGZpeCsrOwoJCQkJCQkJfQoJCQkJCQkJY29udGludWU7CgkJCQkJCX0KCgkJCQkJCXJlbmFtZSggJHNyY3AsICRkZXN0cCApOwoJCQkJCQkkZmlsZSA9ICRkZXN0ZmlsZTsKCQkJCQkJJHNyY3AgPSAkZGVzdHA7CgkJCQkJfQoKCQkJCQlicmVhazsgLy8gZ2V0IG91dCBvZiB0aGlzIHdoaWxlIHN0YXRlbWVudAoJCQkJfQoKCQkJCWlmKCAkcG9zdGZpeCA+PSAxMDAgKSB7CgkJCQkJLy8gZm9yIHNvbWUgb2RkIHJlYXNvbiwgd2UgY291bGQgbm90IGZpbmQgYSByZWFzb25hYmxlCgkJCQkJLy8gZmlsZW5hbWUgdG8gcmVuYW1lIHRvLgoJCQkJCS8vIHdlJ2xsIGp1c3Qgc2tpcCB0aGlzIGZpbGUKCQkJCQljb250aW51ZTsKCQkJCX0KCgkJCQkkdXNlcnBlcm1zID0gJyc7CgkJCQlpZiggJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfdXNlcnBlcm1zJ10gKSAkdXNlcnBlcm1zID0gJGNhdGVnb3J5Wyd1cGxvYWRfY2F0ZWdvcnlfZGZsdHVzZXJwZXJtcyddOwoKCQkJCS8vIG5leHQgY2hlY2sgdG8gbWFrZSBzdXJlIGl0cyBub3QgYWxyZWFkeSBpbiB0aGUgZGF0YWJhc2UKCQkJCSRxID0gIlNFTEVDVCB1cGxvYWRfaWQsdXBsb2FkX3RodW1ibmFpbCBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2FkcyBXSEVSRQoJCQkJIAkJICB1cGxvYWRfbmFtZSA9ID8gQU5EIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwoJCQkJJGZpbGVpZCA9ICcnOwoJCQkJJHRodW1iX25hbWUgPSAnJzsKCQkJCSR0bXAgPSAkZGItPkdldFJvdyggJHEsIGFycmF5KCAkZmlsZSwgJGNhdGVnb3J5X2lkKSApOwoJCQkJaWYoICR0bXAgKSB7CgkJCQkJLy8gd2UgYWxyZWFkeSBrbm93IGFib3V0IHRoaXMgb25lCgkJCQkJJGZpbGVpZCA9ICR0bXBbJ3VwbG9hZF9pZCddOwoJCQkJCSR0aHVtYl9uYW1lID0gJHRtcFsndXBsb2FkX3RodW1ibmFpbCddOwoJCQkJfQoJCQkJZWxzZSB7CgkJCQkJLy8gaXQncyBhIG5ldyBmaWxlCgkJCQkJJHF1ZXJ5ID0gIklOU0VSVCBJTlRPICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2FkcwogICAgICAgICAgICAgICAgICAgICh1cGxvYWRfaWQsIHVwbG9hZF9jYXRlZ29yeV9pZCwgdXBsb2FkX25hbWUsIHVwbG9hZF9hdXRob3IsIHVwbG9hZF9zdW1tYXJ5LCB1cGxvYWRfZGVzY3JpcHRpb24sCiAgICAgICAgICAgICAgICAgICAgIHVwbG9hZF9pcCwgdXBsb2FkX3NpemUsIHVwbG9hZF9kYXRlLCB1cGxvYWRfdXNlcnBlcm1zKSBWQUxVRVMgKD8sPyw/LD8sPyw/LD8sPywkbm93LD8pIjsKCQkJCQkkdXNlcmlkID0gZ2V0X3VzZXJpZChmYWxzZSk7CgkJCQkJaWYoICEkdXNlcmlkICkgJHVzZXJpZCA9IDA7IC8vIHdlIGRvbid0IGtub3cgdGhlIHVzZXIuCgkJCQkJJHVzZXJuYW1lID0gJF9TRVNTSU9OWyJjbXNfYWRtaW5fdXNlcm5hbWUiXTsKCQkJCQkkZmlsZWlkID0gJGRiLT5HZW5JRCAoY21zX2RiX3ByZWZpeCAoKS4ibW9kdWxlX3VwbG9hZHNfc2VxIik7CgkJCQkJJHBhcm1zID0gYXJyYXkoICRmaWxlaWQsICRjYXRlZ29yeV9pZCwgJGZpbGUsICR1c2VybmFtZSwgJGRlc2MsICIiLCAibG9jYWxob3N0IiwgJHNpemUsCSR1c2VycGVybXMgKTsKCQkJCQkkZGJyZXN1bHQgPSAkZGItPkV4ZWN1dGUoICRxdWVyeSwgJHBhcm1zICk7CgkJCQkJaWYoICEkZGJyZXN1bHQgKSB7CgkJCQkJCWVjaG8gIkRFQlVHOiAiLiRkYi0+c3FsLiI8YnIvPiI7CgkJCQkJCWVjaG8gIkVSUk9SOiAiLiRkYi0+RXJyb3JNc2coKS4iPGJyLz4iOwoJCQkJCQlkaWUoKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCgkJCQkvLyBhbmQgbWF5YmUsIGp1c3QgbWF5YmUgY3JlYXRlIGEgdGh1bWJuYWlsIGZvciBpdAoJCQkJaWYoIGVtcHR5KCR0aHVtYl9uYW1lKSApICR0aHVtYl9uYW1lID0gJ3RodW1iXycuJGZpbGU7CgoJCQkJaWYoICRkb19pbmRleGluZyApIHsKCQkJCQkvLyBzZWUgYWJvdXQgYWRkaW5nIHRoaXMgc3R1ZmYgdG8gdGhlIHNlYXJjaCBpbmRleC4KCQkJCQkkc2VhcmNoID0gY21zX3V0aWxzOjpnZXRfc2VhcmNoX21vZHVsZSgpOwoJCQkJCWlmKCAkc2VhcmNoICkJdXBsb2Fkc191dGlsczo6aW5kZXhfdXBsb2FkKCRmaWxlaWQsICRzZWFyY2gpOwoJCQkJfQoKCQkJCS8vIHNlZSBpZiB3ZSdyZSBkb2luZyB0aHVtYm5haWxpbmcgYXQgYWxsCgkJCQlpZiggJGRvX3RodW1ibmFpbHMgJiYgJHRoaXMtPkdldFByZWZlcmVuY2UoJ2F1dG90aHVtYm5haWxfZXh0ZW5zaW9ucycpICE9ICcnICYmCgkJCQkJCSR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX3NpemUnKSAhPSAnJyApIHsKCQkJCQkvLyBzZWUgaWYgdGhpcyBmaWxlIGlzIHRodW1ibmFpbGFibGUKCQkJCQkkZmlsZWV4dGVuc2lvbiA9IHN0cnRvbG93ZXIoc3RycmNocigkZmlsZSwnLicpKTsKCQkJCQkkdGh1bWJfZXh0X2FyciA9IGV4cGxvZGUoIiwiLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX2V4dGVuc2lvbnMnKSk7CgoJCQkJCSRpc19pbWFnZSA9IGZhbHNlOwoJCQkJCWZvcmVhY2goICR0aHVtYl9leHRfYXJyIGFzICR0aHVtYl9leHQgKSB7CgkJCQkJCWlmKCAiLiIuJHRodW1iX2V4dCA9PSAkZmlsZWV4dGVuc2lvbiApIHsKCQkJCQkJCSRpc19pbWFnZSA9IHRydWU7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCgkJCQkJaWYoICRpc19pbWFnZSApIHsKCQkJCQkJLy8geXVwLCB3ZSBjYW4gdGh1bWJuYWlsIHRoaXMgdGhpbmcuCgkJCQkJCSRkZXN0bmFtZSA9ICRkaXIuRElSRUNUT1JZX1NFUEFSQVRPUi4kdGh1bWJfbmFtZTsKCQkJCQkJJGNyZWF0ZWQgPSBmYWxzZTsKCQkJCQkJaWYoICFmaWxlX2V4aXN0cyggJGRlc3RuYW1lICkgKSB7CgkJCQkJCQkkdGhpcy0+aW1hZ2VUcmFuc2Zvcm0oJHNyY3AsJGRlc3RuYW1lLCR0aGlzLT5HZXRQcmVmZXJlbmNlKCdhdXRvdGh1bWJuYWlsX3NpemUnKSk7CgkJCQkJCQlpZiggZmlsZV9leGlzdHMoICRkZXN0bmFtZSApICkgJGNyZWF0ZWQgPSB0cnVlOwoJCQkJCQl9CgoJCQkJCQlpZiggJGNyZWF0ZWQgKSB7CgkJCQkJCQkvLyB3b290LCB3ZSBjcmVhdGVkIGEgbmV3IHRodW1ibmFpbAoJCQkJCQkJLy8gbm93IHVwZGF0ZSB0aGUgZGF0YWJhc2UKCQkJCQkJCSRxdWVyeSA9ICdVUERBVEUgJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzIFNFVCB1cGxvYWRfdGh1bWJuYWlsID0gPwlXSEVSRSB1cGxvYWRfaWQgPSA/JzsKCQkJCQkJCSRkYi0+RXhlY3V0ZSgkcXVlcnksYXJyYXkoJHRodW1iX25hbWUsJGZpbGVpZCkpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoKCQkJfSAvLyBmb3JlYWNoCgkJfSAvLyBpZgogIH0KCgkvLyB0b2RvOiBtb3ZlIG1lCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIFNtYXJ0U2NhbkRpcmVjdG9yeSgkY2F0ZWdvcnlfaWQsICRkaXIpCiAgewogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcXVlcnkgPSAiU0VMRUNUIENPVU5UKCopIEFTIGNvdW50IEZST00gIi5jbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9pZCA9ID8iOwogICAgJHJvd2NvdW50ID0gJGRiLT5HZXRPbmUoICRxdWVyeSwgYXJyYXkoICRjYXRlZ29yeV9pZCApICk7CgogICAgLy8gZ2V0IHRoZSBudW1iZXIgb2YgZmlsZXMKICAgICRmaWxlcyA9ICR0aGlzLT5fc2NhbmRpciggJGRpciApOwogICAgJGNvdW50ID0gMDsKICAgIGlmKCAkZmlsZXMgKSB7CgkJCWZvcmVhY2goICRmaWxlcyBhcyAkZmlsZSApIHsKCQkJCS8vIGlnbm9yZSBkaXJlY3RvcmllcyAuIGFuZCAuLgoJCQkJaWYoICRmaWxlID09ICIuIiB8fCAkZmlsZSA9PSAiLi4iICkgY29udGludWU7CgoJCQkJLy8gaWdub3JlIGFueSBkaXJlY3RvcmllcwoJCQkJJHNyY3AgPSAkZGlyLkRJUkVDVE9SWV9TRVBBUkFUT1IuJGZpbGU7CgkJCQlpZiggaXNfZGlyKCAkc3JjcCApICkgY29udGludWU7CgoJCQkJLy8gaWdub3JlIHRodW1ibmFpbHMKCQkJCWlmKCBzdGFydHN3aXRoKCRzcmNwLCd0aHVtYl8nKSApIGNvbnRpbnVlOwoKCQkJCSRjb3VudCsrOwoJCQl9IC8vIGZvcmVhY2gKCQl9CgogICAgaWYoICRjb3VudCAhPSAkcm93Y291bnQgKSAkdGhpcy0+U2NhbkRpcmVjdG9yeSggJGNhdGVnb3J5X2lkLCAkZGlyICk7CiAgfQoKCiAgcHJvdGVjdGVkIGZ1bmN0aW9uIF9JbnNlcnREZWZhdWx0RmlsZVR5cGVzKCkKICB7CiAgICAvLyBkZWZhdWx0IGZpbGUgdHlwZXMKICAgICRmaWxldHlwZXMgPSBhcnJheSgpOwogICAgJGZpbGV0eXBlc1tdID0gYXJyYXkoJ3NvcnRvcmRlcic9PjEsJ25hbWUnPT4nU291bmQnLCdkZXNjcmlwdGlvbic9PidTb3VuZCBmaWxlcycsJ2V4dGVuc2lvbnMnPT4nbXAzLG9nZyx3YXYnLCAnaW1hZ2UnPT4nc291bmQucG5nJyk7CiAgICAkZmlsZXR5cGVzW10gPSBhcnJheSgnc29ydG9yZGVyJz0+MiwnbmFtZSc9PidJbWFnZScsJ2Rlc2NyaXB0aW9uJz0+J0ltYWdlIGZpbGVzJywnZXh0ZW5zaW9ucyc9PidwbmcsZ2lmLGpwZyxqcGVnLGJtcCcsCgkJCQkJCQkJCQkJCSAnaW1hZ2UnPT4naW1hZ2UucG5nJyk7CiAgICAkZmlsZXR5cGVzW10gPSBhcnJheSgnc29ydG9yZGVyJz0+MywnbmFtZSc9PidQREYgRG9jdW1lbnQnLCdkZXNjcmlwdGlvbic9PidBZG9iZSBBY3JvYmF0IFBERiBEb2N1bWVudCcsICdleHRlbnNpb25zJz0+J3BkZicsJ2ltYWdlJz0+J3BkZi5wbmcnKTsKICAgICRmaWxldHlwZXNbXSA9IGFycmF5KCdzb3J0b3JkZXInPT40LCduYW1lJz0+J1NwcmVhZHNoZWV0JywnZGVzY3JpcHRpb24nPT4nU3ByZWFkc2hlZXRzJywnZXh0ZW5zaW9ucyc9Pid4bHMnLCdpbWFnZSc9PidzcHJlYWRzaGVldC5wbmcnKTsKICAgICRmaWxldHlwZXNbXSA9IGFycmF5KCdzb3J0b3JkZXInPT41LCduYW1lJz0+J0NvbXByZXNzZWQnLCdkZXNjcmlwdGlvbic9PidDb21wcmVzc2VkIGZpbGUnLCdleHRlbnNpb25zJz0+J3ppcCx0YXIsZ3oscmFyLGFyaicsCgkJCQkJCQkJCQkJCSAnaW1hZ2UnPT4nemlwLnBuZycpOwogICAgJGZpbGV0eXBlc1tdID0gYXJyYXkoJ3NvcnRvcmRlcic9PjYsJ25hbWUnPT4nVGV4dCcsJ2Rlc2NyaXB0aW9uJz0+J1RleHQgRmlsZScsJ2V4dGVuc2lvbnMnPT4ndHh0LHRleHQnLCdpbWFnZSc9Pid0eHQucG5nJyk7CiAgICAkZmlsZXR5cGVzW10gPSBhcnJheSgnc29ydG9yZGVyJz0+NywnbmFtZSc9PidWaWRlbycsJ2Rlc2NyaXB0aW9uJz0+J1ZpZGVvIEZpbGVzJywnZXh0ZW5zaW9ucyc9PidhdmksbXBnLndtdicsJ2ltYWdlJz0+J3ZpZGVvLnBuZycpOwogICAgJGZpbGV0eXBlc1tdID0gYXJyYXkoJ3NvcnRvcmRlcic9PjgsJ25hbWUnPT4nV29yZCBQcm9jZXNzaW5nJywnZGVzY3JpcHRpb24nPT4nV29yZCBQcm9jZXNzaW5nIEZpbGVzJywnZXh0ZW5zaW9ucyc9Pidkb2MnLCAnaW1hZ2UnPT4nd29yZHByb2Nlc3NpbmcucG5nJyk7CgogICAgJGRiID0gJHRoaXMtPkdldERiKCk7CiAgICAkcSA9ICJJTlNFUlQgSU5UTyAiLmNtc19kYl9wcmVmaXgoKS4ibW9kdWxlX3VwbG9hZHNfZmlsZXR5cGVzIChpZCxzb3J0b3JkZXIsbmFtZSxkZXNjcmlwdGlvbixleHRlbnNpb25zLGltYWdlKSBWQUxVRVMgKD8sPyw/LD8sPyw/KSI7CiAgICBmb3JlYWNoKCAkZmlsZXR5cGVzIGFzICRvbmVmaWxldHlwZSApIHsKCQkJJG5ld2lkID0gJGRiLT5HZW5JRChjbXNfZGJfcHJlZml4KCkuIm1vZHVsZV91cGxvYWRzX2ZpbGV0eXBlc19zZXEiKTsKCQkJJGRicmVzdWx0ID0gICRkYi0+RXhlY3V0ZSggJHEsIGFycmF5KCAkbmV3aWQsICRvbmVmaWxldHlwZVsnc29ydG9yZGVyJ10sICRvbmVmaWxldHlwZVsnbmFtZSddLAoJCQkJCQkJCQkJCQkJCQkJCQkJCQkJJG9uZWZpbGV0eXBlWydkZXNjcmlwdGlvbiddLCAkb25lZmlsZXR5cGVbJ2V4dGVuc2lvbnMnXSwkb25lZmlsZXR5cGVbJ2ltYWdlJ10gKSApOwoJCX0KICB9CgoJLyoqCgkgKiBAaWdub3JlCgkgKi8KICBwdWJsaWMgZnVuY3Rpb24gX0dldEZpbGVUeXBlKCAkZmlsZW5hbWUgKQogIHsKCQlpZiggJHRoaXMtPl9maWxldHlwZXMgPT0gJycgKSB7CgkJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoKCQkJJHRoZV9leHRlbnNpb24gPSBzdHJ0b2xvd2VyKHN0cnJjaHIoJGZpbGVuYW1lLCcuJykpOwoJCQkkcSA9ICJTRUxFQ1QgKiBGUk9NICIuY21zX2RiX3ByZWZpeCgpLiJtb2R1bGVfdXBsb2Fkc19maWxldHlwZXMgT1JERVIgQlkgc29ydG9yZGVyIjsKCQkJJHRoaXMtPl9maWxldHlwZXMgPSAkZGItPkdldEFycmF5KCAkcSApOwoJCX0KCiAgICAkdGhlX2V4dGVuc2lvbiA9IHN0cnRvbG93ZXIoc3Vic3RyKHN0cnRvbG93ZXIoc3RycmNocigkZmlsZW5hbWUsJy4nKSksMSkpOwoJCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0aGlzLT5fZmlsZXR5cGVzKTsgJGkrKyApIHsKCQkJJHJvdyA9JiAkdGhpcy0+X2ZpbGV0eXBlc1skaV07CgoJCQkkYXJyID0gZXhwbG9kZSggIiwiLCRyb3dbJ2V4dGVuc2lvbnMnXSApOwoJCQlmb3JlYWNoKCAkYXJyIGFzICRvbmVleHQgKSB7CgkJCQlpZiggc3RydG9sb3dlciggJG9uZWV4dCApID09ICR0aGVfZXh0ZW5zaW9uICkgcmV0dXJuICRyb3c7CgkJCX0KCQl9CiAgICByZXR1cm4gZmFsc2U7CiAgfQoKCS8vIHRvZG86IGNoYW5nZSBtZSB0byBvbmx5IHJlcXVpcmUgZmlsZSBpZAogIHByb3RlY3RlZCBmdW5jdGlvbiBfQ2hlY2tGaWxlRG93bmxvYWRTZWN1cml0eSgkZmlsZV9kZXRhaWxzKQogIHsKCQlpZiggJGZpbGVfZGV0YWlsc1sndXBsb2FkX3VzZXJwZXJtcyddID09ICcnICkgcmV0dXJuIFRSVUU7CgoJCSR1c2VycGVybXMgPSBleHBsb2RlKCcsJywkZmlsZV9kZXRhaWxzWyd1cGxvYWRfdXNlcnBlcm1zJ10pOwoJCWlmKCAhaXNfYXJyYXkoJHVzZXJwZXJtcykgfHwgY291bnQoJHVzZXJwZXJtcykgPT0gMCApIHJldHVybiBUUlVFOwoKCQkkZmV1ID0gY21zX3V0aWxzOjpnZXRfbW9kdWxlKCdGcm9udEVuZFVzZXJzJyk7CgkJaWYoICFpc19vYmplY3QoJGZldSkgKSByZXR1cm4gRkFMU0U7CgoJCSR1aWQgPSAkZmV1LT5Mb2dnZWRJbklkKCk7CgkJaWYoICR1aWQgPD0gMCApIHJldHVybiBGQUxTRTsKCgkJJGdycHMgPSAkZmV1LT5HZXRNZW1iZXJHcm91cHNBcnJheSgkdWlkKTsKCQlpZiggIWlzX2FycmF5KCRncnBzKSB8fCBjb3VudCgkZ3JwcykgPT0gMCApIHJldHVybiBGQUxTRTsKCgkJZm9yZWFjaCggJGdycHMgYXMgJG9uZSApIHsKCQkJaWYoIGlzc2V0KCRvbmVbJ2dyb3VwaWQnXSkgJiYgaW5fYXJyYXkoJG9uZVsnZ3JvdXBpZCddLCR1c2VycGVybXMpICkgcmV0dXJuIFRSVUU7CgkJfQoKCQlyZXR1cm4gRkFMU0U7Cgl9CgoJLy8gdG9kbzogY2hhbmdlIG1lIHRvIG9ubHkgcmVxdWlyZSBjYXRlZ29yeSBpZC4KCXByb3RlY3RlZCBmdW5jdGlvbiBfQ2hlY2tEb3dubG9hZFNlY3VyaXR5KCYkY2F0ZWdvcnlfZGV0YWlscykKCXsKCQkkZmV1c2VycyA9ICR0aGlzLT5HZXRNb2R1bGVJbnN0YW5jZSgnRnJvbnRFbmRVc2VycycpOwoJCWlmKCAkZmV1c2VycyAmJiAkY2F0ZWdvcnlfZGV0YWlsc1sndXBsb2FkX2NhdGVnb3J5X2dyb3VwcyddICE9ICcnKSB7CgkJCSR1aWQgPSAkZmV1c2Vycy0+TG9nZ2VkSW5JZCgpOwoJCQlpZiggJHVpZCA9PSAwIHx8ICR1aWQgPT0gJycgKSByZXR1cm4gZmFsc2U7CS8vIHVzZXIgaXMgbm90IGxvZ2dlZCBpbgoKCQkJLy8gbm93IGNoZWNrIGlmIHRoZSB1c2VyIGlzIGluIHRoZSBncm91cAoJCQkkcGVybWl0dGVkZ3JvdXBzID0gZXhwbG9kZSgnLCcsJGNhdGVnb3J5X2RldGFpbHNbJ3VwbG9hZF9jYXRlZ29yeV9ncm91cHMnXSk7CgkJCSRwZXJtaXR0ZWQgPSBmYWxzZTsKCgkJCSRtZW1iZXJncm91cHMxID0gJGZldXNlcnMtPkdldE1lbWJlckdyb3Vwc0FycmF5KCR1aWQpOwoJCQlmb3JlYWNoKCAkbWVtYmVyZ3JvdXBzMSBhcyAkcm93ICkgewoJCQkJZm9yZWFjaCggJHBlcm1pdHRlZGdyb3VwcyBhcyAkcGcgKSB7CgkJCQkJaWYoICRwZyA9PSAkcm93Wydncm91cGlkJ10gKSB7CgkJCQkJCSRwZXJtaXR0ZWQgPSB0cnVlOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlpZiggJHBlcm1pdHRlZCA9PSB0cnVlICkgYnJlYWs7CgkJCX0KCgkJCWlmKCAkcGVybWl0dGVkID09IGZhbHNlICkgcmV0dXJuIGZhbHNlOwkvLyBhY2Nlc3MgZGVuaWVkCgkJfQoKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvLyB0b2RvOiBkZWxldGUgbWUKICBwdWJsaWMgZnVuY3Rpb24gaW1hZ2VUcmFuc2Zvcm0oJHNyY1NwZWMsICRkZXN0U3BlYywgJHNpemUgPSAnJykKICB7CgkJcmV0dXJuIGNnZV9pbWFnZTo6dHJhbnNmb3JtX2ltYWdlKCAkc3JjU3BlYywgJGRlc3RTcGVjLCAkc2l6ZSApOwogIH0KCgkvLyB0b2RvOiBkZWxldGUgbWUKCXB1YmxpYyBmdW5jdGlvbiBfZ2V0RmlsZVVSTCgkdXBsb2FkX2lkLCR1cGxvYWRfbmFtZSkKCXsKCQlyZXR1cm4gdXBsb2Fkc191dGlsczo6X2dldF9jbGVhbl91cmwoJHVwbG9hZF9pZCwkdXBsb2FkX25hbWUpOwoJfQoKCS8vIHRvZG86IGRlbGV0ZSBtZQoJcHVibGljIGZ1bmN0aW9uIF9nZXRUaW1lTGltaXRlZFVSTCgkdXBsb2FkX2tleSkKCXsKCQlyZXR1cm4gdXBsb2Fkc191dGlsczo6X2dldF9jbGVhbl90bF91cmwoJHVwbG9hZF9rZXkpOwoJfQoKICBwdWJsaWMgZnVuY3Rpb24gSGFzQ2FwYWJpbGl0eSgkY2FwYWJpbGl0eSwkcGFyYW1zID0gYXJyYXkoKSkKICB7CgkJaWYoICRjYXBhYmlsaXR5ID09ICd0YXNrcycgKSByZXR1cm4gVFJVRTsKCQlpZiggJGNhcGFiaWxpdHkgPT0gJ2NvbnRlbnRibG9ja3MnICkgcmV0dXJuIFRSVUU7CgkJcmV0dXJuIEZBTFNFOwogIH0KCiAgcHVibGljIGZ1bmN0aW9uIEdldENvbnRlbnRCbG9ja0lucHV0KCRibG9ja05hbWUsJHZhbHVlLCRwYXJhbXMsJGFkZGluZyA9IGZhbHNlKQogIHsKCQlpZiggIWlzc2V0KCRwYXJhbXNbJ3NlbGVjdHR5cGUnXSkgKSAkcGFyYW1zWydzZWxlY3R0eXBlJ10gPSAnY2F0ZWdvcnlzZWxlY3QnOwoKICAgIHN3aXRjaCggJHBhcmFtc1snc2VsZWN0dHlwZSddICkgewoJCWNhc2UgJ2NhdGVnb3J5c2VsZWN0JzoKCQkJJHRtcDEgPSBhcnJheSgpOwoJCQlpZiggaXNzZXQoJHBhcmFtc1snc2VsZWN0b25lJ10pICkgJHRtcDFbJHRoaXMtPkxhbmcoJ3NlbGVjdG9uZScpXSA9IC0xOwoJCQlpZiggaXNzZXQoJHBhcmFtc1snYWxsb3dhbGwnXSkgKSAkdG1wMVskdGhpcy0+TGFuZygnYWxsJyldID0gJ2FsbCc7CgkJCSRkYiA9ICR0aGlzLT5HZXREYigpOwoJCQkkcXVlcnkgPSAnU0VMRUNUIHVwbG9hZF9jYXRlZ29yeV9uYW1lIEZST00gJy5jbXNfZGJfcHJlZml4KCkuJ21vZHVsZV91cGxvYWRzX2NhdGVnb3JpZXMKICAgICAgICAgICAgICAgIFdIRVJFIHVwbG9hZF9jYXRlZ29yeV9saXN0YWJsZSA9IDEnOwoJCQkkdG1wID0gJGRiLT5HZXRBcnJheSgkcXVlcnkpOwoJCQlpZiggJHRtcCApIHsKCQkJCWZvciggJGkgPSAwOyAkaSA8IGNvdW50KCR0bXApOyAkaSsrICkgewoJCQkJCSRzdHIgPSAkdG1wWyRpXVsndXBsb2FkX2NhdGVnb3J5X25hbWUnXTsKCQkJCQkkdG1wMVskc3RyXSA9ICRzdHI7CgkJCQl9CgkJCQlyZXR1cm4gJHRoaXMtPkNyZWF0ZUlucHV0RHJvcGRvd24oJycsJGJsb2NrTmFtZSwkdG1wMSwtMSwkdmFsdWUpOwoJCQl9CgkJCWJyZWFrOwoJCX0KICAgIHJldHVybiBGQUxTRTsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBHZXRDb250ZW50QmxvY2tWYWx1ZSgkYmxvY2tOYW1lLCRibG9ja1BhcmFtcywkaW5wdXRQYXJhbXMpCiAgewogICAgaWYoIGlzc2V0KCRibG9ja1BhcmFtc1snc2VsZWN0dHlwZSddKSApIHsKCQkJaWYoIGlzc2V0KCRpbnB1dFBhcmFtc1skYmxvY2tOYW1lXSkgKQlyZXR1cm4gJGlucHV0UGFyYW1zWyRibG9ja05hbWVdOwoJCX0KICAgIHJldHVybiAnJzsKICB9CgogIHB1YmxpYyBmdW5jdGlvbiBWYWxpZGF0ZUNvbnRlbnRCbG9ja1ZhbHVlKCRibG9ja05hbWUsJHZhbHVlLCRibG9ja1BhcmFtcykKICB7CiAgICBzd2l0Y2goJGJsb2NrUGFyYW1zWydzZWxlY3R0eXBlJ10pIHsKCQljYXNlICdjYXRlZ29yeXNlbGVjdCc6CgkJCWlmKCAkdmFsdWUgPT0gLTEgKSByZXR1cm4gJHRoaXMtPkxhbmcoJ2Vycm9yX211c3RzZWxlY3RfY2F0ZWdvcnknKTsKCQkJYnJlYWs7CgkJfQogICAgcmV0dXJuICcnOwogIH0KCglwdWJsaWMgZnVuY3Rpb24gc21hcnR5X2Jsb2NrX29uY2hhbmdlKCRwYXJhbXMsJGNvbnRlbnQsJHNtYXJ0eSwkcmVwZWF0KQoJewoJCXN0YXRpYyAkX29uY2hhbmdlX2RhdGEgPSBhcnJheSgpOwoJCWlmKCAkY29udGVudCA9PSAnJyApIHJldHVybjsKCQlpZiggIWlzc2V0KCRwYXJhbXNbJ3JlYyddKSB8fCAhaXNzZXQoJHBhcmFtc1snZmllbGQnXSkgKSByZXR1cm47CgoJCSRyZWNvcmQgPSAkcGFyYW1zWydyZWMnXTsKCQkkZmllbGQgPSAkcGFyYW1zWydmaWVsZCddOwoJCWlmKCAhaXNzZXQoJHJlY29yZFskZmllbGRdKSApIHJldHVybjsKCgkJJHRtcCA9ICRzbWFydHktPmdldF90ZW1wbGF0ZV92YXJzKCdvbmNoYW5nZScpOwoJCWlmKCAhaXNfYXJyYXkoJHRtcCkgKSAkdG1wID0gYXJyYXkoKTsKCgkJaWYoICFpc3NldCgkX29uY2hhbmdlX2RhdGFbJGZpZWxkXSkgfHwgJF9vbmNoYW5nZV9kYXRhWyRmaWVsZF0gIT0gJHJlY29yZFskZmllbGRdICkgewoJCQkkX29uY2hhbmdlX2RhdGFbJGZpZWxkXSA9ICRyZWNvcmRbJGZpZWxkXTsKCQkJJHRtcFskZmllbGRdID0gMTsKCQkJJHNtYXJ0eS0+YXNzaWduKCdvbmNoYW5nZScsJHRtcCk7CgkJCXJldHVybiAkY29udGVudDsKCQl9CgkJZWxzZSB7CgkJCSR0bXBbJGZpZWxkXSA9IDA7CgkJCSRzbWFydHktPmFzc2lnbignb25jaGFuZ2UnLCR0bXApOwoJCX0KCX0KCglwdWJsaWMgZnVuY3Rpb24gZ2V0X3Rhc2tzKCkKCXsKCQlyZXR1cm4gbmV3IFVwbG9hZHNDbGVhbnVwRXhwaXJlZFRhc2tzKCk7Cgl9Cn0KCi8vIEVPRgo/Pgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/autoload.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgpyZXF1aXJlX29uY2UgX19ESVJfXyAuICcvY29tcG9zZXInIC4gJy9hdXRvbG9hZF9yZWFsLnBocCc7CgpyZXR1cm4gQ29tcG9zZXJBdXRvbG9hZGVySW5pdGRlZWJkY2IzODQ4ZTEyNzZmMDNjZThjNWM5ODliNWQ4OjpnZXRMb2FkZXIoKTsK]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_classmap.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX2NsYXNzbWFwLnBocCBAZ2VuZXJhdGVkIGJ5IENvbXBvc2VyCgokdmVuZG9yRGlyID0gZGlybmFtZShkaXJuYW1lKF9fRklMRV9fKSk7CiRiYXNlRGlyID0gZGlybmFtZSgkdmVuZG9yRGlyKTsKCnJldHVybiBhcnJheSgKICAgICdEYXRhbWF0cml4JyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi9pbmNsdWRlL2JhcmNvZGVzL2RhdGFtYXRyaXgucGhwJywKICAgICdQREY0MTcnID0+ICR2ZW5kb3JEaXIgLiAnL3RlY25pY2suY29tL3RjcGRmL2luY2x1ZGUvYmFyY29kZXMvcGRmNDE3LnBocCcsCiAgICAnUVJjb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi9pbmNsdWRlL2JhcmNvZGVzL3FyY29kZS5waHAnLAogICAgJ1RDUERGJyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi90Y3BkZi5waHAnLAogICAgJ1RDUERGMkRCYXJjb2RlJyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi90Y3BkZl9iYXJjb2Rlc18yZC5waHAnLAogICAgJ1RDUERGQmFyY29kZScgPT4gJHZlbmRvckRpciAuICcvdGVjbmljay5jb20vdGNwZGYvdGNwZGZfYmFyY29kZXNfMWQucGhwJywKICAgICdUQ1BERl9DT0xPUlMnID0+ICR2ZW5kb3JEaXIgLiAnL3RlY25pY2suY29tL3RjcGRmL2luY2x1ZGUvdGNwZGZfY29sb3JzLnBocCcsCiAgICAnVENQREZfRklMVEVSUycgPT4gJHZlbmRvckRpciAuICcvdGVjbmljay5jb20vdGNwZGYvaW5jbHVkZS90Y3BkZl9maWx0ZXJzLnBocCcsCiAgICAnVENQREZfRk9OVFMnID0+ICR2ZW5kb3JEaXIgLiAnL3RlY25pY2suY29tL3RjcGRmL2luY2x1ZGUvdGNwZGZfZm9udHMucGhwJywKICAgICdUQ1BERl9GT05UX0RBVEEnID0+ICR2ZW5kb3JEaXIgLiAnL3RlY25pY2suY29tL3RjcGRmL2luY2x1ZGUvdGNwZGZfZm9udF9kYXRhLnBocCcsCiAgICAnVENQREZfSU1BR0VTJyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi9pbmNsdWRlL3RjcGRmX2ltYWdlcy5waHAnLAogICAgJ1RDUERGX0lNUE9SVCcgPT4gJHZlbmRvckRpciAuICcvdGVjbmljay5jb20vdGNwZGYvdGNwZGZfaW1wb3J0LnBocCcsCiAgICAnVENQREZfUEFSU0VSJyA9PiAkdmVuZG9yRGlyIC4gJy90ZWNuaWNrLmNvbS90Y3BkZi90Y3BkZl9wYXJzZXIucGhwJywKICAgICdUQ1BERl9TVEFUSUMnID0+ICR2ZW5kb3JEaXIgLiAnL3RlY25pY2suY29tL3RjcGRmL2luY2x1ZGUvdGNwZGZfc3RhdGljLnBocCcsCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_namespaces.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX25hbWVzcGFjZXMucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAogICAgJ1NtYWxvdFxcUGRmUGFyc2VyXFwnID0+IGFycmF5KCR2ZW5kb3JEaXIgLiAnL3NtYWxvdC9wZGZwYXJzZXIvc3JjJyksCik7Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_psr4.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3BzcjQucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCiR2ZW5kb3JEaXIgPSBkaXJuYW1lKGRpcm5hbWUoX19GSUxFX18pKTsKJGJhc2VEaXIgPSBkaXJuYW1lKCR2ZW5kb3JEaXIpOwoKcmV0dXJuIGFycmF5KAopOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/autoload_real.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8vIGF1dG9sb2FkX3JlYWwucGhwIEBnZW5lcmF0ZWQgYnkgQ29tcG9zZXIKCmNsYXNzIENvbXBvc2VyQXV0b2xvYWRlckluaXRkZWViZGNiMzg0OGUxMjc2ZjAzY2U4YzVjOTg5YjVkOAp7CiAgICBwcml2YXRlIHN0YXRpYyAkbG9hZGVyOwoKICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gbG9hZENsYXNzTG9hZGVyKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJ0NvbXBvc2VyXEF1dG9sb2FkXENsYXNzTG9hZGVyJyA9PT0gJGNsYXNzKSB7CiAgICAgICAgICAgIHJlcXVpcmUgX19ESVJfXyAuICcvQ2xhc3NMb2FkZXIucGhwJzsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRMb2FkZXIoKQogICAgewogICAgICAgIGlmIChudWxsICE9PSBzZWxmOjokbG9hZGVyKSB7CiAgICAgICAgICAgIHJldHVybiBzZWxmOjokbG9hZGVyOwogICAgICAgIH0KCiAgICAgICAgc3BsX2F1dG9sb2FkX3JlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZGVlYmRjYjM4NDhlMTI3NmYwM2NlOGM1Yzk4OWI1ZDgnLCAnbG9hZENsYXNzTG9hZGVyJyksIHRydWUsIHRydWUpOwogICAgICAgIHNlbGY6OiRsb2FkZXIgPSAkbG9hZGVyID0gbmV3IFxDb21wb3NlclxBdXRvbG9hZFxDbGFzc0xvYWRlcigpOwogICAgICAgIHNwbF9hdXRvbG9hZF91bnJlZ2lzdGVyKGFycmF5KCdDb21wb3NlckF1dG9sb2FkZXJJbml0ZGVlYmRjYjM4NDhlMTI3NmYwM2NlOGM1Yzk4OWI1ZDgnLCAnbG9hZENsYXNzTG9hZGVyJykpOwoKICAgICAgICAkdmVuZG9yRGlyID0gZGlybmFtZShfX0RJUl9fKTsKICAgICAgICAkYmFzZURpciA9IGRpcm5hbWUoJHZlbmRvckRpcik7CgogICAgICAgICRtYXAgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX25hbWVzcGFjZXMucGhwJzsKICAgICAgICBmb3JlYWNoICgkbWFwIGFzICRuYW1lc3BhY2UgPT4gJHBhdGgpIHsKICAgICAgICAgICAgJGxvYWRlci0+c2V0KCRuYW1lc3BhY2UsICRwYXRoKTsKICAgICAgICB9CgogICAgICAgICRtYXAgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX3BzcjQucGhwJzsKICAgICAgICBmb3JlYWNoICgkbWFwIGFzICRuYW1lc3BhY2UgPT4gJHBhdGgpIHsKICAgICAgICAgICAgJGxvYWRlci0+c2V0UHNyNCgkbmFtZXNwYWNlLCAkcGF0aCk7CiAgICAgICAgfQoKICAgICAgICAkY2xhc3NNYXAgPSByZXF1aXJlIF9fRElSX18gLiAnL2F1dG9sb2FkX2NsYXNzbWFwLnBocCc7CiAgICAgICAgaWYgKCRjbGFzc01hcCkgewogICAgICAgICAgICAkbG9hZGVyLT5hZGRDbGFzc01hcCgkY2xhc3NNYXApOwogICAgICAgIH0KCiAgICAgICAgJGxvYWRlci0+cmVnaXN0ZXIodHJ1ZSk7CgogICAgICAgIHJldHVybiAkbG9hZGVyOwogICAgfQp9CgpmdW5jdGlvbiBjb21wb3NlclJlcXVpcmVkZWViZGNiMzg0OGUxMjc2ZjAzY2U4YzVjOTg5YjVkOCgkZmlsZSkKewogICAgcmVxdWlyZSAkZmlsZTsKfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/ClassLoader.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qCiAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIENvbXBvc2VyLgogKgogKiAoYykgTmlscyBBZGVybWFubiA8bmFkZXJtYW5AbmFkZXJtYW4uZGU+CiAqICAgICBKb3JkaSBCb2dnaWFubyA8ai5ib2dnaWFub0BzZWxkLmJlPgogKgogKiBGb3IgdGhlIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLCBwbGVhc2UgdmlldyB0aGUgTElDRU5TRQogKiBmaWxlIHRoYXQgd2FzIGRpc3RyaWJ1dGVkIHdpdGggdGhpcyBzb3VyY2UgY29kZS4KICovCgpuYW1lc3BhY2UgQ29tcG9zZXJcQXV0b2xvYWQ7CgovKioKICogQ2xhc3NMb2FkZXIgaW1wbGVtZW50cyBhIFBTUi0wIGNsYXNzIGxvYWRlcgogKgogKiBTZWUgaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItMC5tZAogKgogKiAgICAgJGxvYWRlciA9IG5ldyBcQ29tcG9zZXJcQXV0b2xvYWRcQ2xhc3NMb2FkZXIoKTsKICoKICogICAgIC8vIHJlZ2lzdGVyIGNsYXNzZXMgd2l0aCBuYW1lc3BhY2VzCiAqICAgICAkbG9hZGVyLT5hZGQoJ1N5bWZvbnlcQ29tcG9uZW50JywgX19ESVJfXy4nL2NvbXBvbmVudCcpOwogKiAgICAgJGxvYWRlci0+YWRkKCdTeW1mb255JywgICAgICAgICAgIF9fRElSX18uJy9mcmFtZXdvcmsnKTsKICoKICogICAgIC8vIGFjdGl2YXRlIHRoZSBhdXRvbG9hZGVyCiAqICAgICAkbG9hZGVyLT5yZWdpc3RlcigpOwogKgogKiAgICAgLy8gdG8gZW5hYmxlIHNlYXJjaGluZyB0aGUgaW5jbHVkZSBwYXRoIChlZy4gZm9yIFBFQVIgcGFja2FnZXMpCiAqICAgICAkbG9hZGVyLT5zZXRVc2VJbmNsdWRlUGF0aCh0cnVlKTsKICoKICogSW4gdGhpcyBleGFtcGxlLCBpZiB5b3UgdHJ5IHRvIHVzZSBhIGNsYXNzIGluIHRoZSBTeW1mb255XENvbXBvbmVudAogKiBuYW1lc3BhY2Ugb3Igb25lIG9mIGl0cyBjaGlsZHJlbiAoU3ltZm9ueVxDb21wb25lbnRcQ29uc29sZSBmb3IgaW5zdGFuY2UpLAogKiB0aGUgYXV0b2xvYWRlciB3aWxsIGZpcnN0IGxvb2sgZm9yIHRoZSBjbGFzcyB1bmRlciB0aGUgY29tcG9uZW50LwogKiBkaXJlY3RvcnksIGFuZCBpdCB3aWxsIHRoZW4gZmFsbGJhY2sgdG8gdGhlIGZyYW1ld29yay8gZGlyZWN0b3J5IGlmIG5vdAogKiBmb3VuZCBiZWZvcmUgZ2l2aW5nIHVwLgogKgogKiBUaGlzIGNsYXNzIGlzIGxvb3NlbHkgYmFzZWQgb24gdGhlIFN5bWZvbnkgVW5pdmVyc2FsQ2xhc3NMb2FkZXIuCiAqCiAqIEBhdXRob3IgRmFiaWVuIFBvdGVuY2llciA8ZmFiaWVuQHN5bWZvbnkuY29tPgogKiBAYXV0aG9yIEpvcmRpIEJvZ2dpYW5vIDxqLmJvZ2dpYW5vQHNlbGQuYmU+CiAqLwpjbGFzcyBDbGFzc0xvYWRlcgp7CiAgICAvLyBQU1ItNAogICAgcHJpdmF0ZSAkcHJlZml4TGVuZ3Roc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkcHJlZml4RGlyc1BzcjQgPSBhcnJheSgpOwogICAgcHJpdmF0ZSAkZmFsbGJhY2tEaXJzUHNyNCA9IGFycmF5KCk7CgogICAgLy8gUFNSLTAKICAgIHByaXZhdGUgJHByZWZpeGVzUHNyMCA9IGFycmF5KCk7CiAgICBwcml2YXRlICRmYWxsYmFja0RpcnNQc3IwID0gYXJyYXkoKTsKCiAgICBwcml2YXRlICR1c2VJbmNsdWRlUGF0aCA9IGZhbHNlOwogICAgcHJpdmF0ZSAkY2xhc3NNYXAgPSBhcnJheSgpOwoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlcygpCiAgICB7CiAgICAgICAgcmV0dXJuIGNhbGxfdXNlcl9mdW5jX2FycmF5KCdhcnJheV9tZXJnZScsICR0aGlzLT5wcmVmaXhlc1BzcjApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQcmVmaXhlc1BzcjQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+cHJlZml4RGlyc1BzcjQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldEZhbGxiYWNrRGlycygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRGYWxsYmFja0RpcnNQc3I0KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQ7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIGdldENsYXNzTWFwKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmNsYXNzTWFwOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIGFycmF5ICRjbGFzc01hcCBDbGFzcyB0byBmaWxlbmFtZSBtYXAKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZENsYXNzTWFwKGFycmF5ICRjbGFzc01hcCkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmNsYXNzTWFwKSB7CiAgICAgICAgICAgICR0aGlzLT5jbGFzc01hcCA9IGFycmF5X21lcmdlKCR0aGlzLT5jbGFzc01hcCwgJGNsYXNzTWFwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkdGhpcy0+Y2xhc3NNYXAgPSAkY2xhc3NNYXA7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi0wIGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIHByZWZpeCwgZWl0aGVyCiAgICAgKiBhcHBlbmRpbmcgb3IgcHJlcGVuZGluZyB0byB0aGUgb25lcyBwcmV2aW91c2x5IHNldCBmb3IgdGhpcyBwcmVmaXguCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAgICAgICAkcHJlZml4ICBUaGUgcHJlZml4CiAgICAgKiBAcGFyYW0gYXJyYXl8c3RyaW5nICRwYXRocyAgIFRoZSBQU1ItMCByb290IGRpcmVjdG9yaWVzCiAgICAgKiBAcGFyYW0gYm9vbCAgICAgICAgICRwcmVwZW5kIFdoZXRoZXIgdG8gcHJlcGVuZCB0aGUgZGlyZWN0b3JpZXMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGFkZCgkcHJlZml4LCAkcGF0aHMsICRwcmVwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3IwID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjAsCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CgogICAgICAgICRmaXJzdCA9ICRwcmVmaXhbMF07CiAgICAgICAgaWYgKCFpc3NldCgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF1bJHByZWZpeF0pKSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwoKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoJHByZXBlbmQpIHsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocywKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XQogICAgICAgICAgICApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJGZpcnN0XVskcHJlZml4XSA9IGFycmF5X21lcmdlKAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdWyRwcmVmaXhdLAogICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTQgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlLCBlaXRoZXIKICAgICAqIGFwcGVuZGluZyBvciBwcmVwZW5kaW5nIHRvIHRoZSBvbmVzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIG5hbWVzcGFjZS4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRwcmVmaXggIFRoZSBwcmVmaXgvbmFtZXNwYWNlLCB3aXRoIHRyYWlsaW5nICdcXCcKICAgICAqIEBwYXJhbSBhcnJheXxzdHJpbmcgJHBhdGhzICAgVGhlIFBTUi0wIGJhc2UgZGlyZWN0b3JpZXMKICAgICAqIEBwYXJhbSBib29sICAgICAgICAgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBkaXJlY3RvcmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gYWRkUHNyNCgkcHJlZml4LCAkcGF0aHMsICRwcmVwZW5kID0gZmFsc2UpCiAgICB7CiAgICAgICAgaWYgKCEkcHJlZml4KSB7CiAgICAgICAgICAgIC8vIFJlZ2lzdGVyIGRpcmVjdG9yaWVzIGZvciB0aGUgcm9vdCBuYW1lc3BhY2UuCiAgICAgICAgICAgIGlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICAgICAoYXJyYXkpICRwYXRocywKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyNAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0aGlzLT5mYWxsYmFja0RpcnNQc3I0ID0gYXJyYXlfbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQsCiAgICAgICAgICAgICAgICAgICAgKGFycmF5KSAkcGF0aHMKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2VpZiAoIWlzc2V0KCR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSkpIHsKICAgICAgICAgICAgLy8gUmVnaXN0ZXIgZGlyZWN0b3JpZXMgZm9yIGEgbmV3IG5hbWVzcGFjZS4KICAgICAgICAgICAgJGxlbmd0aCA9IHN0cmxlbigkcHJlZml4KTsKICAgICAgICAgICAgaWYgKCdcXCcgIT09ICRwcmVmaXhbJGxlbmd0aCAtIDFdKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEludmFsaWRBcmd1bWVudEV4Y2VwdGlvbigiQSBub24tZW1wdHkgUFNSLTQgcHJlZml4IG11c3QgZW5kIHdpdGggYSBuYW1lc3BhY2Ugc2VwYXJhdG9yLiIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhMZW5ndGhzUHNyNFskcHJlZml4WzBdXVskcHJlZml4XSA9ICRsZW5ndGg7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0gZWxzZWlmICgkcHJlcGVuZCkgewogICAgICAgICAgICAvLyBQcmVwZW5kIGRpcmVjdG9yaWVzIGZvciBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgbmFtZXNwYWNlLgogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzLAogICAgICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdCiAgICAgICAgICAgICk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQXBwZW5kIGRpcmVjdG9yaWVzIGZvciBhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgbmFtZXNwYWNlLgogICAgICAgICAgICAkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gPSBhcnJheV9tZXJnZSgKICAgICAgICAgICAgICAgICR0aGlzLT5wcmVmaXhEaXJzUHNyNFskcHJlZml4XSwKICAgICAgICAgICAgICAgIChhcnJheSkgJHBhdGhzCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogUmVnaXN0ZXJzIGEgc2V0IG9mIFBTUi0wIGRpcmVjdG9yaWVzIGZvciBhIGdpdmVuIHByZWZpeCwKICAgICAqIHJlcGxhY2luZyBhbnkgb3RoZXJzIHByZXZpb3VzbHkgc2V0IGZvciB0aGlzIHByZWZpeC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgICAgICRwcmVmaXggVGhlIHByZWZpeAogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgIFRoZSBQU1ItMCBiYXNlIGRpcmVjdG9yaWVzCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBzZXQoJHByZWZpeCwgJHBhdGhzKQogICAgewogICAgICAgIGlmICghJHByZWZpeCkgewogICAgICAgICAgICAkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCA9IChhcnJheSkgJHBhdGhzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICR0aGlzLT5wcmVmaXhlc1BzcjBbJHByZWZpeFswXV1bJHByZWZpeF0gPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBSZWdpc3RlcnMgYSBzZXQgb2YgUFNSLTQgZGlyZWN0b3JpZXMgZm9yIGEgZ2l2ZW4gbmFtZXNwYWNlLAogICAgICogcmVwbGFjaW5nIGFueSBvdGhlcnMgcHJldmlvdXNseSBzZXQgZm9yIHRoaXMgbmFtZXNwYWNlLgogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgICAgICAgJHByZWZpeCAgVGhlIHByZWZpeC9uYW1lc3BhY2UsIHdpdGggdHJhaWxpbmcgJ1xcJwogICAgICogQHBhcmFtIGFycmF5fHN0cmluZyAkcGF0aHMgICBUaGUgUFNSLTQgYmFzZSBkaXJlY3RvcmllcwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0UHNyNCgkcHJlZml4LCAkcGF0aHMpIHsKICAgICAgICBpZiAoISRwcmVmaXgpIHsKICAgICAgICAgICAgJHRoaXMtPmZhbGxiYWNrRGlyc1BzcjQgPSAoYXJyYXkpICRwYXRoczsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRwcmVmaXgpOwogICAgICAgICAgICBpZiAoJ1xcJyAhPT0gJHByZWZpeFskbGVuZ3RoIC0gMV0pIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcSW52YWxpZEFyZ3VtZW50RXhjZXB0aW9uKCJBIG5vbi1lbXB0eSBQU1ItNCBwcmVmaXggbXVzdCBlbmQgd2l0aCBhIG5hbWVzcGFjZSBzZXBhcmF0b3IuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRwcmVmaXhbMF1dWyRwcmVmaXhdID0gJGxlbmd0aDsKICAgICAgICAgICAgJHRoaXMtPnByZWZpeERpcnNQc3I0WyRwcmVmaXhdID0gKGFycmF5KSAkcGF0aHM7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogVHVybnMgb24gc2VhcmNoaW5nIHRoZSBpbmNsdWRlIHBhdGggZm9yIGNsYXNzIGZpbGVzLgogICAgICoKICAgICAqIEBwYXJhbSBib29sICR1c2VJbmNsdWRlUGF0aAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VXNlSW5jbHVkZVBhdGgoJHVzZUluY2x1ZGVQYXRoKQogICAgewogICAgICAgICR0aGlzLT51c2VJbmNsdWRlUGF0aCA9ICR1c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIENhbiBiZSB1c2VkIHRvIGNoZWNrIGlmIHRoZSBhdXRvbG9hZGVyIHVzZXMgdGhlIGluY2x1ZGUgcGF0aCB0byBjaGVjawogICAgICogZm9yIGNsYXNzZXMuCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRVc2VJbmNsdWRlUGF0aCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT51c2VJbmNsdWRlUGF0aDsKICAgIH0KCiAgICAvKioKICAgICAqIFJlZ2lzdGVycyB0aGlzIGluc3RhbmNlIGFzIGFuIGF1dG9sb2FkZXIuCiAgICAgKgogICAgICogQHBhcmFtIGJvb2wgJHByZXBlbmQgV2hldGhlciB0byBwcmVwZW5kIHRoZSBhdXRvbG9hZGVyIG9yIG5vdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcmVnaXN0ZXIoJHByZXBlbmQgPSBmYWxzZSkKICAgIHsKICAgICAgICBzcGxfYXV0b2xvYWRfcmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSwgdHJ1ZSwgJHByZXBlbmQpOwogICAgfQoKICAgIC8qKgogICAgICogVW5yZWdpc3RlcnMgdGhpcyBpbnN0YW5jZSBhcyBhbiBhdXRvbG9hZGVyLgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdW5yZWdpc3RlcigpCiAgICB7CiAgICAgICAgc3BsX2F1dG9sb2FkX3VucmVnaXN0ZXIoYXJyYXkoJHRoaXMsICdsb2FkQ2xhc3MnKSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBMb2FkcyB0aGUgZ2l2ZW4gY2xhc3Mgb3IgaW50ZXJmYWNlLgogICAgICoKICAgICAqIEBwYXJhbSAgc3RyaW5nICAgICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqIEByZXR1cm4gYm9vbHxudWxsIFRydWUgaWYgbG9hZGVkLCBudWxsIG90aGVyd2lzZQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gbG9hZENsYXNzKCRjbGFzcykKICAgIHsKICAgICAgICBpZiAoJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGUoJGNsYXNzKSkgewogICAgICAgICAgICBpbmNsdWRlRmlsZSgkZmlsZSk7CgogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBGaW5kcyB0aGUgcGF0aCB0byB0aGUgZmlsZSB3aGVyZSB0aGUgY2xhc3MgaXMgZGVmaW5lZC4KICAgICAqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjbGFzcyBUaGUgbmFtZSBvZiB0aGUgY2xhc3MKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZ3xmYWxzZSBUaGUgcGF0aCBpZiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBmaW5kRmlsZSgkY2xhc3MpCiAgICB7CiAgICAgICAgLy8gd29yayBhcm91bmQgZm9yIFBIUCA1LjMuMCAtIDUuMy4yIGh0dHBzOi8vYnVncy5waHAubmV0LzUwNzMxCiAgICAgICAgaWYgKCdcXCcgPT0gJGNsYXNzWzBdKSB7CiAgICAgICAgICAgICRjbGFzcyA9IHN1YnN0cigkY2xhc3MsIDEpOwogICAgICAgIH0KCiAgICAgICAgLy8gY2xhc3MgbWFwIGxvb2t1cAogICAgICAgIGlmIChpc3NldCgkdGhpcy0+Y2xhc3NNYXBbJGNsYXNzXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdOwogICAgICAgIH0KCiAgICAgICAgJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJy5waHAnKTsKCiAgICAgICAgLy8gU2VhcmNoIGZvciBIYWNrIGZpbGVzIGlmIHdlIGFyZSBydW5uaW5nIG9uIEhIVk0KICAgICAgICBpZiAoJGZpbGUgPT09IG51bGwgJiYgZGVmaW5lZCgnSEhWTV9WRVJTSU9OJykpIHsKICAgICAgICAgICAgJGZpbGUgPSAkdGhpcy0+ZmluZEZpbGVXaXRoRXh0ZW5zaW9uKCRjbGFzcywgJy5oaCcpOwogICAgICAgIH0KCiAgICAgICAgaWYgKCRmaWxlID09PSBudWxsKSB7CiAgICAgICAgICAgIC8vIFJlbWVtYmVyIHRoYXQgdGhpcyBjbGFzcyBkb2VzIG5vdCBleGlzdC4KICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5jbGFzc01hcFskY2xhc3NdID0gZmFsc2U7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGZpbGU7CiAgICB9CgogICAgcHJpdmF0ZSBmdW5jdGlvbiBmaW5kRmlsZVdpdGhFeHRlbnNpb24oJGNsYXNzLCAkZXh0KQogICAgewogICAgICAgIC8vIFBTUi00IGxvb2t1cAogICAgICAgICRsb2dpY2FsUGF0aFBzcjQgPSBzdHJ0cigkY2xhc3MsICdcXCcsIERJUkVDVE9SWV9TRVBBUkFUT1IpIC4gJGV4dDsKCiAgICAgICAgJGZpcnN0ID0gJGNsYXNzWzBdOwogICAgICAgIGlmIChpc3NldCgkdGhpcy0+cHJlZml4TGVuZ3Roc1BzcjRbJGZpcnN0XSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPnByZWZpeExlbmd0aHNQc3I0WyRmaXJzdF0gYXMgJHByZWZpeCA9PiAkbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICBpZiAoMCA9PT0gc3RycG9zKCRjbGFzcywgJHByZWZpeCkpIHsKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4RGlyc1BzcjRbJHByZWZpeF0gYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuIHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkbGVuZ3RoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTQgZmFsbGJhY2sgZGlycwogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5mYWxsYmFja0RpcnNQc3I0IGFzICRkaXIpIHsKICAgICAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRmaWxlID0gJGRpciAuIERJUkVDVE9SWV9TRVBBUkFUT1IgLiAkbG9naWNhbFBhdGhQc3I0KSkgewogICAgICAgICAgICAgICAgcmV0dXJuICRmaWxlOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBQU1ItMCBsb29rdXAKICAgICAgICBpZiAoZmFsc2UgIT09ICRwb3MgPSBzdHJycG9zKCRjbGFzcywgJ1xcJykpIHsKICAgICAgICAgICAgLy8gbmFtZXNwYWNlZCBjbGFzcyBuYW1lCiAgICAgICAgICAgICRsb2dpY2FsUGF0aFBzcjAgPSBzdWJzdHIoJGxvZ2ljYWxQYXRoUHNyNCwgMCwgJHBvcyArIDEpCiAgICAgICAgICAgICAgICAuIHN0cnRyKHN1YnN0cigkbG9naWNhbFBhdGhQc3I0LCAkcG9zICsgMSksICdfJywgRElSRUNUT1JZX1NFUEFSQVRPUik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gUEVBUi1saWtlIGNsYXNzIG5hbWUKICAgICAgICAgICAgJGxvZ2ljYWxQYXRoUHNyMCA9IHN0cnRyKCRjbGFzcywgJ18nLCBESVJFQ1RPUllfU0VQQVJBVE9SKSAuICRleHQ7CiAgICAgICAgfQoKICAgICAgICBpZiAoaXNzZXQoJHRoaXMtPnByZWZpeGVzUHNyMFskZmlyc3RdKSkgewogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+cHJlZml4ZXNQc3IwWyRmaXJzdF0gYXMgJHByZWZpeCA9PiAkZGlycykgewogICAgICAgICAgICAgICAgaWYgKDAgPT09IHN0cnBvcygkY2xhc3MsICRwcmVmaXgpKSB7CiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGRpcnMgYXMgJGRpcikgewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUgPSAkZGlyIC4gRElSRUNUT1JZX1NFUEFSQVRPUiAuICRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIC8vIFBTUi0wIGZhbGxiYWNrIGRpcnMKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZmFsbGJhY2tEaXJzUHNyMCBhcyAkZGlyKSB7CiAgICAgICAgICAgIGlmIChmaWxlX2V4aXN0cygkZmlsZSA9ICRkaXIgLiBESVJFQ1RPUllfU0VQQVJBVE9SIC4gJGxvZ2ljYWxQYXRoUHNyMCkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gUFNSLTAgaW5jbHVkZSBwYXRocy4KICAgICAgICBpZiAoJHRoaXMtPnVzZUluY2x1ZGVQYXRoICYmICRmaWxlID0gc3RyZWFtX3Jlc29sdmVfaW5jbHVkZV9wYXRoKCRsb2dpY2FsUGF0aFBzcjApKSB7CiAgICAgICAgICAgIHJldHVybiAkZmlsZTsKICAgICAgICB9CiAgICB9Cn0KCi8qKgogKiBTY29wZSBpc29sYXRlZCBpbmNsdWRlLgogKgogKiBQcmV2ZW50cyBhY2Nlc3MgdG8gJHRoaXMvc2VsZiBmcm9tIGluY2x1ZGVkIGZpbGVzLgogKi8KZnVuY3Rpb24gaW5jbHVkZUZpbGUoJGZpbGUpCnsKICAgIGluY2x1ZGUgJGZpbGU7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/composer/installed.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[WwogICAgewogICAgICAgICJuYW1lIjogInRlY25pY2suY29tL3RjcGRmIiwKICAgICAgICAidmVyc2lvbiI6ICI2LjAuMDcxIiwKICAgICAgICAidmVyc2lvbl9ub3JtYWxpemVkIjogIjYuMC4wNzEuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJnaXQ6Ly9naXQuY29kZS5zZi5uZXQvcC90Y3BkZi9jb2RlIiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICJlODU1NjlmYzAzNTE1MDFlZDUxNjQzZGYxYjEyZjY2Njk2NzI3YjhhIgogICAgICAgIH0sCiAgICAgICAgInJlcXVpcmUiOiB7CiAgICAgICAgICAgICJwaHAiOiAiPj01LjMuMCIKICAgICAgICB9LAogICAgICAgICJ0aW1lIjogIjIwMTQtMDQtMjUgMTg6MTM6MDIiLAogICAgICAgICJ0eXBlIjogImxpYnJhcnkiLAogICAgICAgICJpbnN0YWxsYXRpb24tc291cmNlIjogInNvdXJjZSIsCiAgICAgICAgImF1dG9sb2FkIjogewogICAgICAgICAgICAiY2xhc3NtYXAiOiBbCiAgICAgICAgICAgICAgICAiZm9udHMiLAogICAgICAgICAgICAgICAgImNvbmZpZyIsCiAgICAgICAgICAgICAgICAiaW5jbHVkZSIsCiAgICAgICAgICAgICAgICAidGNwZGYucGhwIiwKICAgICAgICAgICAgICAgICJ0Y3BkZl9wYXJzZXIucGhwIiwKICAgICAgICAgICAgICAgICJ0Y3BkZl9pbXBvcnQucGhwIiwKICAgICAgICAgICAgICAgICJ0Y3BkZl9iYXJjb2Rlc18xZC5waHAiLAogICAgICAgICAgICAgICAgInRjcGRmX2JhcmNvZGVzXzJkLnBocCIsCiAgICAgICAgICAgICAgICAiaW5jbHVkZS90Y3BkZl9jb2xvcnMucGhwIiwKICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2ZpbHRlcnMucGhwIiwKICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2ZvbnRfZGF0YS5waHAiLAogICAgICAgICAgICAgICAgImluY2x1ZGUvdGNwZGZfZm9udHMucGhwIiwKICAgICAgICAgICAgICAgICJpbmNsdWRlL3RjcGRmX2ltYWdlcy5waHAiLAogICAgICAgICAgICAgICAgImluY2x1ZGUvdGNwZGZfc3RhdGljLnBocCIsCiAgICAgICAgICAgICAgICAiaW5jbHVkZS9iYXJjb2Rlcy9kYXRhbWF0cml4LnBocCIsCiAgICAgICAgICAgICAgICAiaW5jbHVkZS9iYXJjb2Rlcy9wZGY0MTcucGhwIiwKICAgICAgICAgICAgICAgICJpbmNsdWRlL2JhcmNvZGVzL3FyY29kZS5waHAiCiAgICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIkxHUEx2MyIKICAgICAgICBdLAogICAgICAgICJhdXRob3JzIjogWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAibmFtZSI6ICJOaWNvbGEgQXN1bmkiLAogICAgICAgICAgICAgICAgImVtYWlsIjogImluZm9AdGVjbmljay5jb20iLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly9uaWNvbGFhc3VuaS50ZWNuaWNrLmNvbSIKICAgICAgICAgICAgfQogICAgICAgIF0sCiAgICAgICAgImRlc2NyaXB0aW9uIjogIlRDUERGIGlzIGEgUEhQIGNsYXNzIGZvciBnZW5lcmF0aW5nIFBERiBkb2N1bWVudHMuIiwKICAgICAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy50Y3BkZi5vcmcvIiwKICAgICAgICAia2V5d29yZHMiOiBbCiAgICAgICAgICAgICJQREZEMzIwMDAtMjAwOCIsCiAgICAgICAgICAgICJUQ1BERiIsCiAgICAgICAgICAgICJiYXJjb2RlcyIsCiAgICAgICAgICAgICJkYXRhbWF0cml4IiwKICAgICAgICAgICAgInBkZiIsCiAgICAgICAgICAgICJwZGY0MTciLAogICAgICAgICAgICAicXJjb2RlIgogICAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgICAgIm5hbWUiOiAic21hbG90L3BkZnBhcnNlciIsCiAgICAgICAgInZlcnNpb24iOiAidjAuOS4yMCIsCiAgICAgICAgInZlcnNpb25fbm9ybWFsaXplZCI6ICIwLjkuMjAuMCIsCiAgICAgICAgInNvdXJjZSI6IHsKICAgICAgICAgICAgInR5cGUiOiAiZ2l0IiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlci5naXQiLAogICAgICAgICAgICAicmVmZXJlbmNlIjogIjM2NTM0YWM0NjBiMDYzNTU4ZmE0NDUxZGI5YmJmOTRiN2Q4MTdkYzYiCiAgICAgICAgfSwKICAgICAgICAiZGlzdCI6IHsKICAgICAgICAgICAgInR5cGUiOiAiemlwIiwKICAgICAgICAgICAgInVybCI6ICJodHRwczovL2FwaS5naXRodWIuY29tL3JlcG9zL3NtYWxvdC9wZGZwYXJzZXIvemlwYmFsbC8zNjUzNGFjNDYwYjA2MzU1OGZhNDQ1MWRiOWJiZjk0YjdkODE3ZGM2IiwKICAgICAgICAgICAgInJlZmVyZW5jZSI6ICIzNjUzNGFjNDYwYjA2MzU1OGZhNDQ1MWRiOWJiZjk0YjdkODE3ZGM2IiwKICAgICAgICAgICAgInNoYXN1bSI6ICIiCiAgICAgICAgfSwKICAgICAgICAicmVxdWlyZSI6IHsKICAgICAgICAgICAgInBocCI6ICI+PTUuMy4wIiwKICAgICAgICAgICAgInRlY25pY2suY29tL3RjcGRmIjogIj49Ni4wLjA1MCIKICAgICAgICB9LAogICAgICAgICJyZXF1aXJlLWRldiI6IHsKICAgICAgICAgICAgImF0b3VtL2F0b3VtIjogImRldi1tYXN0ZXIiCiAgICAgICAgfSwKICAgICAgICAidGltZSI6ICIyMDE0LTAyLTE2IDIzOjEwOjQxIiwKICAgICAgICAidHlwZSI6ICJsaWJyYXJ5IiwKICAgICAgICAiaW5zdGFsbGF0aW9uLXNvdXJjZSI6ICJkaXN0IiwKICAgICAgICAiYXV0b2xvYWQiOiB7CiAgICAgICAgICAgICJwc3ItMCI6IHsKICAgICAgICAgICAgICAgICJTbWFsb3RcXFBkZlBhcnNlclxcIjogInNyYy8iCiAgICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgICJub3RpZmljYXRpb24tdXJsIjogImh0dHBzOi8vcGFja2FnaXN0Lm9yZy9kb3dubG9hZHMvIiwKICAgICAgICAibGljZW5zZSI6IFsKICAgICAgICAgICAgIkdQTC0zLjAiCiAgICAgICAgXSwKICAgICAgICAiYXV0aG9ycyI6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWVuIE1BTE9UIiwKICAgICAgICAgICAgICAgICJlbWFpbCI6ICJzZWJhc3RpZW5AbWFsb3QuZnIiLAogICAgICAgICAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cubWFsb3QuZnIiLAogICAgICAgICAgICAgICAgInJvbGUiOiAiRGV2ZWxvcGVyIgogICAgICAgICAgICB9CiAgICAgICAgXSwKICAgICAgICAiZGVzY3JpcHRpb24iOiAiUGRmIHBhcnNlciBsaWJyYXJ5LiBDYW4gcmVhZCBhbmQgZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHBkZiBmaWxlLiIsCiAgICAgICAgImhvbWVwYWdlIjogImh0dHA6Ly93d3cucGRmcGFyc2VyLm9yZyIKICAgIH0KXQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/.atoum.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qClRoaXMgZmlsZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaW5jbHVkZWQgYmVmb3JlIEVBQ0ggcnVuLgoKVXNlIGl0IHRvIGNvbmZpZ3VyZSBhdG91bSBvciBhbnl0aGluZyB0aGF0IG5lZWRzIHRvIGJlIGRvbmUgYmVmb3JlIEVBQ0ggcnVuLgoKTW9yZSBpbmZvcm1hdGlvbiBvbiBkb2N1bWVudGF0aW9uOgpbZW5dIGh0dHA6Ly9kb2NzLmF0b3VtLm9yZy9lbi9jaGFwdGVyMy5odG1sI0NvbmZpZ3VyYXRpb24tZmlsZXMKW2ZyXSBodHRwOi8vZG9jcy5hdG91bS5vcmcvZnIvY2hhcHRlcjMuaHRtbCNGaWNoaWVyLWRlLWNvbmZpZ3VyYXRpb24KKi8KCnVzZSBcbWFnZWVrZ3V5XGF0b3VtOwoKJHJlcG9ydCA9ICRzY3JpcHQtPmFkZERlZmF1bHRSZXBvcnQoKTsKCi8qCkxPR08KCi8vIFRoaXMgd2lsbCBhZGQgdGhlIGF0b3VtIGxvZ28gYmVmb3JlIGVhY2ggcnVuLgokcmVwb3J0LT5hZGRGaWVsZChuZXcgYXRvdW1ccmVwb3J0XGZpZWxkc1xydW5uZXJcYXRvdW1cbG9nbygpKTsKCi8vIFRoaXMgd2lsbCBhZGQgYSBncmVlbiBvciByZWQgbG9nbyBhZnRlciBlYWNoIHJ1biBkZXBlbmRpbmcgb24gaXRzIHN0YXR1cy4KJHJlcG9ydC0+YWRkRmllbGQobmV3IGF0b3VtXHJlcG9ydFxmaWVsZHNccnVubmVyXHJlc3VsdFxsb2dvKCkpOwoqLwoKLyoKQ09ERSBDT1ZFUkFHRSBTRVRVUAoqLwovLyBQbGVhc2UgcmVwbGFjZSBpbiBuZXh0IGxpbmUgIlByb2plY3QgTmFtZSIgYnkgeW91ciBwcm9qZWN0IG5hbWUgYW5kICIvcGF0aC90by9kZXN0aW5hdGlvbi9kaXJlY3RvcnkiIGJ5IHlvdXIgZGVzdGluYXRpb24gZGlyZWN0b3J5IHBhdGggZm9yIGh0bWwgZmlsZXMuCiRjb3ZlcmFnZUZpZWxkID0gbmV3IGF0b3VtXHJlcG9ydFxmaWVsZHNccnVubmVyXGNvdmVyYWdlXGh0bWwoJ1BkZlBhcnNlcicsICdjb3ZlcmFnZScpOwoKLy8gUGxlYXNlIHJlcGxhY2UgaW4gbmV4dCBsaW5lIGh0dHA6Ly91cmwvb2Yvd2ViL3NpdGUgYnkgdGhlIHJvb3QgdXJsIG9mIHlvdXIgY29kZSBjb3ZlcmFnZSB3ZWIgc2l0ZS4KJGNvdmVyYWdlRmllbGQtPnNldFJvb3RVcmwoJ2h0dHA6Ly90ZXN0LmxvY2FsJyk7CgokcmVwb3J0LT5hZGRGaWVsZCgkY292ZXJhZ2VGaWVsZCk7Ci8qKi8KCi8qClRFU1QgR0VORVJBVE9SIFNFVFVQCgokdGVzdEdlbmVyYXRvciA9IG5ldyBhdG91bVx0ZXN0XGdlbmVyYXRvcigpOwoKLy8gUGxlYXNlIHJlcGxhY2UgaW4gbmV4dCBsaW5lICIvcGF0aC90by95b3VyL3Rlc3RzL3VuaXRzL2NsYXNzZXMvZGlyZWN0b3J5IiBieSB5b3VyIHVuaXQgdGVzdCdzIGRpcmVjdG9yeS4KJHRlc3RHZW5lcmF0b3ItPnNldFRlc3RDbGFzc2VzRGlyZWN0b3J5KCdwYXRoL3RvL3lvdXIvdGVzdHMvdW5pdHMvY2xhc3Nlcy9kaXJlY3RvcnknKTsKCi8vIFBsZWFzZSByZXBsYWNlIGluIG5leHQgbGluZSAieW91clxwcm9qZWN0XG5hbWVzcGFjZVx0ZXN0c1x1bml0cyIgYnkgeW91ciB1bml0IHRlc3QncyBuYW1lc3BhY2UuCiR0ZXN0R2VuZXJhdG9yLT5zZXRUZXN0Q2xhc3NOYW1lc3BhY2UoJ3lvdXJccHJvamVjdFxuYW1lc3BhY2VcdGVzdHNcdW5pdHMnKTsKCi8vIFBsZWFzZSByZXBsYWNlIGluIG5leHQgbGluZSAiL3BhdGgvdG8veW91ci9jbGFzc2VzL2RpcmVjdG9yeSIgYnkgeW91ciBjbGFzc2VzIGRpcmVjdG9yeS4KJHRlc3RHZW5lcmF0b3ItPnNldFRlc3RlZENsYXNzZXNEaXJlY3RvcnkoJ3BhdGgvdG8veW91ci9jbGFzc2VzL2RpcmVjdG9yeScpOwoKLy8gUGxlYXNlIHJlcGxhY2UgaW4gbmV4dCBsaW5lICJ5b3VyXHByb2plY3RcbmFtZXNwYWNlIiBieSB5b3VyIHByb2plY3QgbmFtZXNwYWNlLgokdGVzdEdlbmVyYXRvci0+c2V0VGVzdGVkQ2xhc3NOYW1lc3BhY2UoJ3lvdXJccHJvamVjdFxuYW1lc3BhY2UnKTsKCi8vIFBsZWFzZSByZXBsYWNlIGluIG5leHQgbGluZSAicGF0aC90by95b3VyL3Rlc3RzL3VuaXRzL3J1bm5lci5waHAiIGJ5IHBhdGggdG8geW91ciB1bml0IHRlc3QncyBydW5uZXIuCiR0ZXN0R2VuZXJhdG9yLT5zZXRSdW5uZXJQYXRoKCdwYXRoL3RvL3lvdXIvdGVzdHMvdW5pdHMvcnVubmVyLnBocCcpOwoKJHNjcmlwdC0+Z2V0UnVubmVyKCktPnNldFRlc3RHZW5lcmF0b3IoJHRlc3RHZW5lcmF0b3IpOwoqLwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/.bootstrap.atoum.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qClRoaXMgZmlsZSB3aWxsIGF1dG9tYXRpY2FsbHkgYmUgaW5jbHVkZWQgYmVmb3JlIEVBQ0ggdGVzdCBpZiAtYmYvLS1ib290c3RyYXAtZmlsZSBhcmd1bWVudCBpcyBub3QgdXNlZC4KClVzZSBpdCB0byBpbml0aWFsaXplIHRoZSB0ZXN0ZWQgY29kZSwgYWRkIGF1dG9sb2FkZXIsIHJlcXVpcmUgbWFuZGF0b3J5IGZpbGUsIG9yIGFueXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgZG9uZSBiZWZvcmUgRUFDSCB0ZXN0LgoKTW9yZSBpbmZvcm1hdGlvbiBvbiBkb2N1bWVudGF0aW9uOgpbZW5dIGh0dHA6Ly9kb2NzLmF0b3VtLm9yZy9lbi9jaGFwdGVyMy5odG1sI0Jvb3RzdHJhcC1maWxlCltmcl0gaHR0cDovL2RvY3MuYXRvdW0ub3JnL2ZyL2NoYXB0ZXIzLmh0bWwjRmljaGllci1kZS1ib290c3RyYXAKKi8KCgovLyBBVVRPTE9BREVSCgovLyBjb21wb3NlcgpyZXF1aXJlIF9fRElSX18gLiAnL3ZlbmRvci9hdXRvbG9hZC5waHAnOwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/.cms_ignore</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[c2FtcGxlcwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/.travis.yml</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[bGFuZ3VhZ2U6IHBocApwaHA6CiAgLSA1LjMKICAtIDUuNAogIC0gNS41CmJlZm9yZV9zY3JpcHQ6CiAgLSBjb21wb3NlciB1cGRhdGUKc2NyaXB0OiAuL3ZlbmRvci9iaW4vYXRvdW0gLWQgc3JjL1NtYWxvdC9QZGZQYXJzZXIvVGVzdHMvIC1uY2MK]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewogICAgIm5hbWUiOiAic21hbG90L3BkZnBhcnNlciIsCiAgICAiZGVzY3JpcHRpb24iOiAiUGRmIHBhcnNlciBsaWJyYXJ5LiBDYW4gcmVhZCBhbmQgZXh0cmFjdCBpbmZvcm1hdGlvbiBmcm9tIHBkZiBmaWxlLiIsCiAgICAibGljZW5zZSI6ICJHUEwtMy4wIiwKICAgICJhdXRob3JzIjogWwogICAgICAgIHsKICAgICAgICAgICAgIm5hbWUiOiAiU2ViYXN0aWVuIE1BTE9UIiwKICAgICAgICAgICAgImVtYWlsIjogInNlYmFzdGllbkBtYWxvdC5mciIsCiAgICAgICAgICAgICJyb2xlIjogIkRldmVsb3BlciIsCiAgICAgICAgICAgICJob21lcGFnZSI6ICJodHRwOi8vd3d3Lm1hbG90LmZyIgogICAgICAgIH0KICAgIF0sCiAgICAic3VwcG9ydCI6IHsKICAgICAgICAiaXNzdWVzIjogImh0dHBzOi8vZ2l0aHViLmNvbS9zbWFsb3QvcGRmcGFyc2VyL2lzc3VlcyIKICAgIH0sCiAgICAiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy5wZGZwYXJzZXIub3JnIiwKICAgICJyZXF1aXJlIjogewogICAgICAgICJwaHAiOiAiPj01LjMuMCIsCiAgICAgICAgInRlY25pY2suY29tL3RjcGRmIjogIj49Ni4wLjA1MCIKICAgIH0sCiAgICAicmVxdWlyZS1kZXYiOiB7CiAgICAgICAgImF0b3VtL2F0b3VtIjogImRldi1tYXN0ZXIiCiAgICB9LAogICAgImF1dG9sb2FkIjogewogICAgICAgICJwc3ItMCI6IHsKICAgICAgICAgICAgIlNtYWxvdFxcUGRmUGFyc2VyXFwiOiAic3JjLyIKICAgICAgICB9CiAgICB9LAogICAgImNvbmZpZyI6IHsKICAgICAgICAicHJvY2Vzcy10aW1lb3V0IjogMTIwMAogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/docs/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/docs/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBEb2N1bWVudGF0aW9uICMKClBERiBSZWZlcmVuY2VzIGZpbGVzIGhhcyBiZWVuIGRvd25sb2FkZWQgZnJvbSB0aGlzIHVybCA6IGh0dHA6Ly93d3cuYWRvYmUuY29tL2Rldm5ldC9wZGYvcGRmX3JlZmVyZW5jZV9hcmNoaXZlLmh0bWwK]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/LICENSE</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+Lgo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/README.md</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyBQZGZQYXJzZXIgIwoKUGRmIFBhcnNlciwgYSBzdGFuZGFsb25lIFBIUCBsaWJyYXJ5LCBwcm92aWRlcyB2YXJpb3VzIHRvb2xzIHRvIGV4dHJhY3QgZGF0YSBmcm9tIGEgUERGIGZpbGUuCgpbIVtCdWlsZCBTdGF0dXNdKGh0dHBzOi8vdHJhdmlzLWNpLm9yZy9zbWFsb3QvcGRmcGFyc2VyLnBuZz9icmFuY2g9bWFzdGVyKV0oaHR0cHM6Ly90cmF2aXMtY2kub3JnL3NtYWxvdC9wZGZwYXJzZXIpClshW1RvdGFsIERvd25sb2Fkc10oaHR0cHM6Ly9wb3Nlci5wdWd4Lm9yZy9zbWFsb3QvcGRmcGFyc2VyL2Rvd25sb2Fkcy5wbmcpXShodHRwczovL3BhY2thZ2lzdC5vcmcvcGFja2FnZXMvc21hbG90L3BkZnBhcnNlcikKWyFbQ3VycmVudCBWZXJzaW9uXShodHRwczovL3Bvc2VyLnB1Z3gub3JnL3NtYWxvdC9wZGZwYXJzZXIvdi9zdGFibGUucG5nKV0oaHR0cHM6Ly9wYWNrYWdpc3Qub3JnL3BhY2thZ2VzL3NtYWxvdC9wZGZwYXJzZXIpCgpXZWJzaXRlIDogW2h0dHA6Ly93d3cucGRmcGFyc2VyLm9yZ10oaHR0cDovL3d3dy5wZGZwYXJzZXIub3JnLz91dG1fc291cmNlPUdpdEh1YiZ1dG1fbWVkaXVtPXdlYnNpdGUmdXRtX2NhbXBhaWduPUdpdEh1YikKClRlc3QgdGhlIEFQSSBvbiBvdXIgW2RlbW8gcGFnZV0oaHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL2RlbW8pLgoKVGhpcyBwcm9qZWN0IGlzIHN1cHBvcnRlZCBieSBbQWN0dWFseXNdKGh0dHA6Ly93d3cuYWN0dWFseXMuY29tKS4KCiMjIEZlYXR1cmVzICMjCgpGZWF0dXJlcyBpbmNsdWRlZCA6CgotIExvYWQvcGFyc2Ugb2JqZWN0cyBhbmQgaGVhZGVycwotIEV4dHJhY3QgbWV0YSBkYXRhIChhdXRob3IsIGRlc2NyaXB0aW9uLCAuLi4pCi0gRXh0cmFjdCB0ZXh0IGZyb20gb3JkZXJlZCBwYWdlcwotIFN1cHBvcnQgb2YgY29tcHJlc3NlZCBwZGYKLSBTdXBwb3J0IG9mIE1BQyBPUyBSb21hbiBjaGFyc2V0IGVuY29kaW5nCi0gSGFuZGxpbmcgb2YgaGV4YSBhbmQgb2N0YWwgZW5jb2RpbmcgaW4gdGV4dCBzZWN0aW9ucwotIFBTUi0wIGNvbXBsaWFudCAoW2F1dG9sb2FkZXJdKGh0dHBzOi8vZ2l0aHViLmNvbS9waHAtZmlnL2ZpZy1zdGFuZGFyZHMvYmxvYi9tYXN0ZXIvYWNjZXB0ZWQvUFNSLTAubWQpKQotIFBTUi0xIGNvbXBsaWFudCAoW2NvZGUgc3R5bGluZ10oaHR0cHM6Ly9naXRodWIuY29tL3BocC1maWcvZmlnLXN0YW5kYXJkcy9ibG9iL21hc3Rlci9hY2NlcHRlZC9QU1ItMS1iYXNpYy1jb2Rpbmctc3RhbmRhcmQubWQpKQoKQ3VycmVudGx5LCBzZWN1cmVkIGRvY3VtZW50cyBhcmUgbm90IHN1cHBvcnRlZC4KClRoaXMgTGlicmFyeSBpcyBzdGlsbCB1bmRlciBhY3RpdmUgZGV2ZWxvcG1lbnQuCkFzIGEgcmVzdWx0LCB1c2VycyBtdXN0IGV4cGVjdCBCQyBicmVha3Mgd2hlbiB1c2luZyB0aGUgbWFzdGVyIHZlcnNpb24uCgojIyBEb2N1bWVudGF0aW9uICMjCgpbUmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBvbiB3ZWJzaXRlXShodHRwOi8vd3d3LnBkZnBhcnNlci5vcmcvZG9jdW1lbnRhdGlvbj91dG1fc291cmNlPUdpdEh1YiZ1dG1fbWVkaXVtPWRvY3VtZW50YXRpb24mdXRtX2NhbXBhaWduPUdpdEh1YikuCgojIyBMaWNlbnNlICMjCgpUaGlzIGxpYnJhcnkgaXMgdW5kZXIgdGhlIFtHUEx2MyBsaWNlbnNlXShodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlci9ibG9iL21hc3Rlci9MSUNFTlNFKS4KCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Document.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTsKCi8qKgogKiBUZWNobmljYWwgcmVmZXJlbmNlcyA6CiAqIC0gaHR0cDovL3d3dy5tYWN0ZWNoLmNvbS9hcnRpY2xlcy9tYWN0ZWNoL1ZvbC4xNS8xNS4wOS9QREZJbnRyby9pbmRleC5odG1sCiAqIC0gaHR0cDovL2ZyYW1ld29yay56ZW5kLmNvbS9pc3N1ZXMvc2VjdXJlL2F0dGFjaG1lbnQvMTI1MTIvUGRmLnBocAogKiAtIGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vcmVmLnBkZi5waHAjNzQyMTEKICogLSBodHRwOi8vY3BhbnNlYXJjaC5wZXJsLm9yZy9zcmMvSlYvUG9zdFNjcmlwdC1Gb250LTEuMTAuMDIvbGliL1Bvc3RTY3JpcHQvSVNPTGF0aW4xRW5jb2RpbmcucG0KICogLSBodHRwOi8vY3BhbnNlYXJjaC5wZXJsLm9yZy9zcmMvSlYvUG9zdFNjcmlwdC1Gb250LTEuMTAuMDIvbGliL1Bvc3RTY3JpcHQvSVNPTGF0aW45RW5jb2RpbmcucG0KICogLSBodHRwOi8vY3BhbnNlYXJjaC5wZXJsLm9yZy9zcmMvSlYvUG9zdFNjcmlwdC1Gb250LTEuMTAuMDIvbGliL1Bvc3RTY3JpcHQvU3RhbmRhcmRFbmNvZGluZy5wbQogKiAtIGh0dHA6Ly9jcGFuc2VhcmNoLnBlcmwub3JnL3NyYy9KVi9Qb3N0U2NyaXB0LUZvbnQtMS4xMC4wMi9saWIvUG9zdFNjcmlwdC9XaW5BbnNpRW5jb2RpbmcucG0KICoKICogQ2xhc3MgRG9jdW1lbnQKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlcgogKi8KY2xhc3MgRG9jdW1lbnQKewogICAgLyoqCiAgICAgKiBAdmFyIE9iamVjdFtdCiAgICAgKi8KICAgIHByb3RlY3RlZCAkb2JqZWN0cyA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkZGljdGlvbmFyeSA9IGFycmF5KCk7CgogICAgLyoqCiAgICAgKiBAdmFyIEhlYWRlcgogICAgICovCiAgICBwcm90ZWN0ZWQgJHRyYWlsZXIgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJGRldGFpbHMgPSBudWxsOwoKICAgIC8qKgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKICAgICAgICAkdGhpcy0+dHJhaWxlciA9IG5ldyBIZWFkZXIoYXJyYXkoKSwgJHRoaXMpOwogICAgfQoKICAgIC8qKgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXQoKQogICAgewogICAgICAgICR0aGlzLT5idWlsZERpY3Rpb25hcnkoKTsKCiAgICAgICAgJHRoaXMtPmJ1aWxkRGV0YWlscygpOwoKICAgICAgICAvLyBQcm9wYWdhdGUgaW5pdCB0byBvYmplY3RzLgogICAgICAgIGZvcmVhY2ggKCR0aGlzLT5vYmplY3RzIGFzICRvYmplY3QpIHsKICAgICAgICAgICAgJG9iamVjdC0+aW5pdCgpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEJ1aWxkIGRpY3Rpb25hcnkgYmFzZWQgb24gdHlwZSBoZWFkZXIgZmllbGQuCiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBidWlsZERpY3Rpb25hcnkoKQogICAgewogICAgICAgIC8vIEJ1aWxkIGRpY3Rpb25hcnkuCiAgICAgICAgJHRoaXMtPmRpY3Rpb25hcnkgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+b2JqZWN0cyBhcyAkaWQgPT4gJG9iamVjdCkgewogICAgICAgICAgICAkdHlwZSA9ICRvYmplY3QtPmdldEhlYWRlcigpLT5nZXQoJ1R5cGUnKS0+Z2V0Q29udGVudCgpOwoKICAgICAgICAgICAgaWYgKCFlbXB0eSgkdHlwZSkpIHsKICAgICAgICAgICAgICAgICR0aGlzLT5kaWN0aW9uYXJ5WyR0eXBlXVskaWRdID0gJGlkOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQnVpbGQgZGV0YWlscyBhcnJheS4KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGJ1aWxkRGV0YWlscygpCiAgICB7CiAgICAgICAgLy8gQnVpbGQgZGV0YWlscyBhcnJheS4KICAgICAgICAkZGV0YWlscyA9IGFycmF5KCk7CgogICAgICAgIC8vIEV4dHJhY3QgZG9jdW1lbnQgaW5mbwogICAgICAgIGlmICgkdGhpcy0+dHJhaWxlci0+aGFzKCdJbmZvJykpIHsKICAgICAgICAgICAgLyoqIEB2YXIgT2JqZWN0ICRpbmZvICovCiAgICAgICAgICAgICRpbmZvICAgICA9ICR0aGlzLT50cmFpbGVyLT5nZXQoJ0luZm8nKTsKICAgICAgICAgICAgJGRldGFpbHMgID0gJGluZm8tPmdldEhlYWRlcigpLT5nZXREZXRhaWxzKCk7CiAgICAgICAgfQoKICAgICAgICAvLyBSZXRyaWV2ZSB0aGUgcGFnZSBjb3VudAogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRwYWdlcyAgICAgICAgICAgID0gJHRoaXMtPmdldFBhZ2VzKCk7CiAgICAgICAgICAgICRkZXRhaWxzWydQYWdlcyddID0gY291bnQoJHBhZ2VzKTsKICAgICAgICB9IGNhdGNoIChcRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICRkZXRhaWxzWydQYWdlcyddID0gMDsKICAgICAgICB9CgogICAgICAgICR0aGlzLT5kZXRhaWxzID0gJGRldGFpbHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXREaWN0aW9uYXJ5KCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmRpY3Rpb25hcnk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gT2JqZWN0W10gJG9iamVjdHMKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHNldE9iamVjdHMoJG9iamVjdHMgPSBhcnJheSgpKQogICAgewogICAgICAgICR0aGlzLT5vYmplY3RzID0gKGFycmF5KSRvYmplY3RzOwoKICAgICAgICAkdGhpcy0+aW5pdCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBPYmplY3RbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T2JqZWN0cygpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5vYmplY3RzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIE9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0T2JqZWN0QnlJZCgkaWQpCiAgICB7CiAgICAgICAgaWYgKGlzc2V0KCR0aGlzLT5vYmplY3RzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+b2JqZWN0c1skaWRdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJHR5cGUKICAgICAqIEBwYXJhbSBzdHJpbmcgJHN1YnR5cGUKICAgICAqCiAgICAgKiBAcmV0dXJuIE9iamVjdFtdCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPYmplY3RzQnlUeXBlKCR0eXBlLCAkc3VidHlwZSA9IG51bGwpCiAgICB7CiAgICAgICAgJG9iamVjdHMgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkdGhpcy0+b2JqZWN0cyBhcyAkaWQgPT4gJG9iamVjdCkgewogICAgICAgICAgICBpZiAoJG9iamVjdC0+Z2V0SGVhZGVyKCktPmdldCgnVHlwZScpID09ICR0eXBlICYmCiAgICAgICAgICAgICAgICAoaXNfbnVsbCgkc3VidHlwZSkgfHwgJG9iamVjdC0+Z2V0SGVhZGVyKCktPmdldCgnU3VidHlwZScpID09ICRzdWJ0eXBlKQogICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICRvYmplY3RzWyRpZF0gPSAkb2JqZWN0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJG9iamVjdHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIFxPYmplY3RbXQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udHMoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+Z2V0T2JqZWN0c0J5VHlwZSgnRm9udCcpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBQYWdlW10KICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UGFnZXMoKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+ZGljdGlvbmFyeVsnQ2F0YWxvZyddKSkgewogICAgICAgICAgICAvLyBTZWFyY2ggZm9yIGNhdGFsb2cgdG8gbGlzdCBwYWdlcy4KICAgICAgICAgICAgJGlkID0gcmVzZXQoJHRoaXMtPmRpY3Rpb25hcnlbJ0NhdGFsb2cnXSk7CgogICAgICAgICAgICAvKiogQHZhciBQYWdlcyAkb2JqZWN0ICovCiAgICAgICAgICAgICRvYmplY3QgPSAkdGhpcy0+b2JqZWN0c1skaWRdLT5nZXQoJ1BhZ2VzJyk7CiAgICAgICAgICAgICRwYWdlcyAgPSAkb2JqZWN0LT5nZXRQYWdlcyh0cnVlKTsKCiAgICAgICAgICAgIHJldHVybiAkcGFnZXM7CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5kaWN0aW9uYXJ5WydQYWdlcyddKSkgewogICAgICAgICAgICAvLyBTZWFyY2ggZm9yIHBhZ2VzIHRvIGxpc3Qga2lkcy4KICAgICAgICAgICAgJHBhZ2VzID0gYXJyYXkoKTsKCiAgICAgICAgICAgIC8qKiBAdmFyIFBhZ2VzW10gJG9iamVjdHMgKi8KICAgICAgICAgICAgJG9iamVjdHMgPSAkdGhpcy0+Z2V0T2JqZWN0c0J5VHlwZSgnUGFnZXMnKTsKICAgICAgICAgICAgZm9yZWFjaCAoJG9iamVjdHMgYXMgJG9iamVjdCkgewogICAgICAgICAgICAgICAgJHBhZ2VzID0gYXJyYXlfbWVyZ2UoJHBhZ2VzLCAkb2JqZWN0LT5nZXRQYWdlcyh0cnVlKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiAkcGFnZXM7CiAgICAgICAgfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5kaWN0aW9uYXJ5WydQYWdlJ10pKSB7CiAgICAgICAgICAgIC8vIFNlYXJjaCBmb3IgJ3BhZ2UnICh1bm9yZGVyZWQgcGFnZXMpLgogICAgICAgICAgICAkcGFnZXMgPSAkdGhpcy0+Z2V0T2JqZWN0c0J5VHlwZSgnUGFnZScpOwoKICAgICAgICAgICAgcmV0dXJuIGFycmF5X3ZhbHVlcygkcGFnZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdNaXNzaW5nIGNhdGFsb2cuJyk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFBhZ2UgJHBhZ2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0VGV4dChQYWdlICRwYWdlID0gbnVsbCkKICAgIHsKICAgICAgICAkdGV4dHMgPSBhcnJheSgpOwogICAgICAgICRwYWdlcyA9ICR0aGlzLT5nZXRQYWdlcygpOwoKICAgICAgICBmb3JlYWNoICgkcGFnZXMgYXMgJGluZGV4ID0+ICRwYWdlKSB7CiAgICAgICAgICAgIGlmICgkdGV4dCA9IHRyaW0oJHBhZ2UtPmdldFRleHQoKSkpIHsKICAgICAgICAgICAgICAgICR0ZXh0c1tdID0gJHRleHQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiBpbXBsb2RlKCJcblxuIiwgJHRleHRzKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBIZWFkZXIgJGhlYWRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0VHJhaWxlcihIZWFkZXIgJHRyYWlsZXIpCiAgICB7CiAgICAgICAgJHRoaXMtPnRyYWlsZXIgPSAkdHJhaWxlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERldGFpbHMoJGRlZXAgPSB0cnVlKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZGV0YWlsczsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW47CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWU7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bGw7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RydWN0Owp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmOwoKLyoqCiAqIENsYXNzIEVsZW1lbnQKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlcgogKi8KY2xhc3MgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEB2YXIgRG9jdW1lbnQKICAgICAqLwogICAgcHJvdGVjdGVkICRkb2N1bWVudCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIG1peGVkCiAgICAgKi8KICAgIHByb3RlY3RlZCAkdmFsdWUgPSBudWxsOwoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICAgICR2YWx1ZQogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT52YWx1ZSAgICA9ICR2YWx1ZTsKICAgICAgICAkdGhpcy0+ZG9jdW1lbnQgPSAkZG9jdW1lbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdCgpCiAgICB7CgogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gKCR2YWx1ZSA9PSAkdGhpcy0+dmFsdWUpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gY29udGFpbnMoJHZhbHVlKQogICAgewogICAgICAgIGlmIChpc19hcnJheSgkdGhpcy0+dmFsdWUpKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIEVsZW1lbnQgJHZhbCAqLwogICAgICAgICAgICBmb3JlYWNoICgkdGhpcy0+dmFsdWUgYXMgJHZhbCkgewogICAgICAgICAgICAgICAgaWYgKCR2YWwtPmVxdWFscygkdmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmVxdWFscygkdmFsdWUpOwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX190b1N0cmluZygpCiAgICB7CiAgICAgICAgcmV0dXJuIChzdHJpbmcpKCR0aGlzLT52YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAkcG9zaXRpb24KICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkY29udGVudCwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCwgJiRwb3NpdGlvbiA9IDApCiAgICB7CiAgICAgICAgJGFyZ3MgICAgICAgID0gZnVuY19nZXRfYXJncygpOwogICAgICAgICRvbmx5X3ZhbHVlcyA9IGlzc2V0KCRhcmdzWzNdKSA/ICRhcmdzWzNdIDogZmFsc2U7CiAgICAgICAgJGNvbnRlbnQgICAgID0gdHJpbSgkY29udGVudCk7CiAgICAgICAgJHZhbHVlcyAgICAgID0gYXJyYXkoKTsKCiAgICAgICAgZG8gewogICAgICAgICAgICAkb2xkX3Bvc2l0aW9uID0gJHBvc2l0aW9uOwoKICAgICAgICAgICAgaWYgKCEkb25seV92YWx1ZXMpIHsKICAgICAgICAgICAgICAgIGlmICghcHJlZ19tYXRjaCgnL15ccyooP1A8bmFtZT5cL1tBLVowLTlcLl9dKykoP1A8dmFsdWU+LiopL3NpJywgc3Vic3RyKCRjb250ZW50LCAkcG9zaXRpb24pLCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICRuYW1lICAgICA9IGx0cmltKCRtYXRjaFsnbmFtZSddLCAnLycpOwogICAgICAgICAgICAgICAgICAgICR2YWx1ZSAgICA9ICRtYXRjaFsndmFsdWUnXTsKICAgICAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSBzdHJwb3MoJGNvbnRlbnQsICR2YWx1ZSwgJHBvc2l0aW9uICsgc3RybGVuKCRtYXRjaFsnbmFtZSddKSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkbmFtZSAgPSBjb3VudCgkdmFsdWVzKTsKICAgICAgICAgICAgICAgICR2YWx1ZSA9IHN1YnN0cigkY29udGVudCwgJHBvc2l0aW9uKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaWYgKCRlbGVtZW50ID0gRWxlbWVudE5hbWU6OnBhcnNlKCR2YWx1ZSwgJGRvY3VtZW50LCAkcG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRuYW1lXSA9ICRlbGVtZW50OwogICAgICAgICAgICB9IGVsc2VpZiAoJGVsZW1lbnQgPSBFbGVtZW50WFJlZjo6cGFyc2UoJHZhbHVlLCAkZG9jdW1lbnQsICRwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJG5hbWVdID0gJGVsZW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZWxlbWVudCA9IEVsZW1lbnROdW1lcmljOjpwYXJzZSgkdmFsdWUsICRkb2N1bWVudCwgJHBvc2l0aW9uKSkgewogICAgICAgICAgICAgICAgJHZhbHVlc1skbmFtZV0gPSAkZWxlbWVudDsKICAgICAgICAgICAgfSBlbHNlaWYgKCRlbGVtZW50ID0gRWxlbWVudFN0cnVjdDo6cGFyc2UoJHZhbHVlLCAkZG9jdW1lbnQsICRwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJG5hbWVdID0gJGVsZW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZWxlbWVudCA9IEVsZW1lbnRCb29sZWFuOjpwYXJzZSgkdmFsdWUsICRkb2N1bWVudCwgJHBvc2l0aW9uKSkgewogICAgICAgICAgICAgICAgJHZhbHVlc1skbmFtZV0gPSAkZWxlbWVudDsKICAgICAgICAgICAgfSBlbHNlaWYgKCRlbGVtZW50ID0gRWxlbWVudE51bGw6OnBhcnNlKCR2YWx1ZSwgJGRvY3VtZW50LCAkcG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRuYW1lXSA9ICRlbGVtZW50OwogICAgICAgICAgICB9IGVsc2VpZiAoJGVsZW1lbnQgPSBFbGVtZW50RGF0ZTo6cGFyc2UoJHZhbHVlLCAkZG9jdW1lbnQsICRwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJG5hbWVdID0gJGVsZW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZWxlbWVudCA9IEVsZW1lbnRTdHJpbmc6OnBhcnNlKCR2YWx1ZSwgJGRvY3VtZW50LCAkcG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRuYW1lXSA9ICRlbGVtZW50OwogICAgICAgICAgICB9IGVsc2VpZiAoJGVsZW1lbnQgPSBFbGVtZW50SGV4YTo6cGFyc2UoJHZhbHVlLCAkZG9jdW1lbnQsICRwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJG5hbWVdID0gJGVsZW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZWxlbWVudCA9IEVsZW1lbnRBcnJheTo6cGFyc2UoJHZhbHVlLCAkZG9jdW1lbnQsICRwb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJG5hbWVdID0gJGVsZW1lbnQ7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkcG9zaXRpb24gPSAkb2xkX3Bvc2l0aW9uOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgkcG9zaXRpb24gPCBzdHJsZW4oJGNvbnRlbnQpKTsKCiAgICAgICAgcmV0dXJuICR2YWx1ZXM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOwp1c2UgU21hbG90XFBkZlBhcnNlclxPYmplY3Q7CgovKioKICogQ2xhc3MgRWxlbWVudEFycmF5CiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudEFycmF5IGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkdmFsdWUKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2YWx1ZSwgJGRvY3VtZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIGZvcmVhY2ggKCR0aGlzLT52YWx1ZSBhcyAkbmFtZSA9PiAkZWxlbWVudCkgewogICAgICAgICAgICAkdGhpcy0+cmVzb2x2ZVhSZWYoJG5hbWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIHBhcmVudDo6Z2V0Q29udGVudCgpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRkZWVwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGV0YWlscygkZGVlcCA9IHRydWUpCiAgICB7CiAgICAgICAgJHZhbHVlcyAgID0gYXJyYXkoKTsKICAgICAgICAkZWxlbWVudHMgPSAkdGhpcy0+Z2V0Q29udGVudCgpOwoKICAgICAgICBmb3JlYWNoICgkZWxlbWVudHMgYXMgJGtleSA9PiAkZWxlbWVudCkgewogICAgICAgICAgICBpZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBIZWFkZXIgJiYgJGRlZXApIHsKICAgICAgICAgICAgICAgICR2YWx1ZXNbJGtleV0gPSAkZWxlbWVudC0+Z2V0RGV0YWlscygkZGVlcCk7CiAgICAgICAgICAgIH0gZWxzZWlmICgkZWxlbWVudCBpbnN0YW5jZW9mIE9iamVjdCAmJiAkZGVlcCkgewogICAgICAgICAgICAgICAgJHZhbHVlc1ska2V5XSA9ICRlbGVtZW50LT5nZXREZXRhaWxzKGZhbHNlKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEFycmF5KSB7CiAgICAgICAgICAgICAgICBpZiAoJGRlZXApIHsKICAgICAgICAgICAgICAgICAgICAkdmFsdWVzWyRrZXldID0gJGVsZW1lbnQtPmdldERldGFpbHMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlaWYgKCRlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudCAmJiAhKCRlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudEFycmF5KSkgewogICAgICAgICAgICAgICAgJHZhbHVlc1ska2V5XSA9ICRlbGVtZW50LT5nZXRDb250ZW50KCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiBpbXBsb2RlKCcsJywgJHRoaXMtPnZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIEVsZW1lbnR8T2JqZWN0CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiByZXNvbHZlWFJlZigkbmFtZSkKICAgIHsKICAgICAgICBpZiAoKCRvYmogPSAkdGhpcy0+dmFsdWVbJG5hbWVdKSBpbnN0YW5jZW9mIEVsZW1lbnRYUmVmKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIE9iamVjdCAkb2JqICovCiAgICAgICAgICAgICRvYmogICAgICAgICAgICAgICAgPSAkdGhpcy0+ZG9jdW1lbnQtPmdldE9iamVjdEJ5SWQoJG9iai0+Z2V0SWQoKSk7CiAgICAgICAgICAgICR0aGlzLT52YWx1ZVskbmFtZV0gPSAkb2JqOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT52YWx1ZVskbmFtZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAkb2Zmc2V0CiAgICAgKgogICAgICogQHJldHVybiBib29sfEVsZW1lbnRBcnJheQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50LCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsLCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqXFsoP1A8YXJyYXk+LiopL2lzJywgJGNvbnRlbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJy8oLio/KShcW3xcXSkvcycsIHRyaW0oJGNvbnRlbnQpLCAkbWF0Y2hlcyk7CgogICAgICAgICAgICAkbGV2ZWwgPSAwOwogICAgICAgICAgICAkc3ViICAgPSAnJzsKICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXNbMF0gYXMgJHBhcnQpIHsKICAgICAgICAgICAgICAgICRzdWIgLj0gJHBhcnQ7CiAgICAgICAgICAgICAgICAkbGV2ZWwgKz0gKHN0cnBvcygkcGFydCwgJ1snKSAhPT0gZmFsc2UgPyAxIDogLTEpOwogICAgICAgICAgICAgICAgaWYgKCRsZXZlbCA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFJlbW92ZXMgMSBsZXZlbCBbIGFuZCBdLgogICAgICAgICAgICAkc3ViICAgICAgICA9IHN1YnN0cih0cmltKCRzdWIpLCAxLCAtMSk7CiAgICAgICAgICAgICRzdWJfb2Zmc2V0ID0gMDsKICAgICAgICAgICAgJHZhbHVlcyAgICAgPSBFbGVtZW50OjpwYXJzZSgkc3ViLCAkZG9jdW1lbnQsICRzdWJfb2Zmc2V0LCB0cnVlKTsKCiAgICAgICAgICAgICRvZmZzZXQgKz0gc3RycG9zKCRjb250ZW50LCAnWycpICsgMTsKICAgICAgICAgICAgLy8gRmluZCBuZXh0ICddJyBwb3NpdGlvbgogICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cmxlbigkc3ViKSArIDE7CgogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoJHZhbHVlcywgJGRvY3VtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementBoolean.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50Qm9vbGVhbgogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnRCb29sZWFuIGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkdmFsdWUKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KChzdHJ0b2xvd2VyKCR2YWx1ZSkgPT0gJ3RydWUnIHx8ICR2YWx1ZSA9PT0gdHJ1ZSksIG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+dmFsdWUgPyAndHJ1ZScgOiAnZmFsc2UnOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gKCR0aGlzLT5nZXRDb250ZW50KCkgPT09ICR2YWx1ZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAkb2Zmc2V0CiAgICAgKgogICAgICogQHJldHVybiBib29sfEVsZW1lbnRCb29sZWFuCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnQsIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwsICYkb2Zmc2V0ID0gMCkKICAgIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15ccyooP1A8dmFsdWU+dHJ1ZXxmYWxzZSkvaXMnLCAkY29udGVudCwgJG1hdGNoKSkgewogICAgICAgICAgICAkdmFsdWUgID0gJG1hdGNoWyd2YWx1ZSddOwogICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cnBvcygkY29udGVudCwgJHZhbHVlKSArIHN0cmxlbigkdmFsdWUpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCR2YWx1ZSwgJGRvY3VtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementDate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQaSwgZXh0cmFjdGlvbiBvcmllbnRlZC4KICogIENvcHlyaWdodCAoQykgMjAxNCAtIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQogKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCiAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLgogKiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cucGRmcGFyc2VyLm9yZy9zaXRlcy9kZWZhdWx0L0xJQ0VOU0UudHh0Pi4KICoKICovCgpuYW1lc3BhY2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50OwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQ7CgovKioKICogQ2xhc3MgRWxlbWVudERhdGUKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50CiAqLwpjbGFzcyBFbGVtZW50RGF0ZSBleHRlbmRzIEVsZW1lbnRTdHJpbmcKewogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCBzdGF0aWMgJGZvcm1hdHMgPSBhcnJheSgKICAgICAgICA0ICA9PiAnWScsCiAgICAgICAgNiAgPT4gJ1ltJywKICAgICAgICA4ICA9PiAnWW1kJywKICAgICAgICAxMCA9PiAnWW1kSCcsCiAgICAgICAgMTIgPT4gJ1ltZEhpJywKICAgICAgICAxNCA9PiAnWW1kSGlzJywKICAgICAgICAxNSA9PiAnWW1kSGlzZScsCiAgICAgICAgMTcgPT4gJ1ltZEhpc08nLAogICAgICAgIDE4ID0+ICdZbWRIaXNPJywKICAgICAgICAxOSA9PiAnWW1kSGlzTycsCiAgICApOwoKICAgIC8qKgogICAgICogQHZhciBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkICRmb3JtYXQgPSAnYyc7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gXERhdGVUaW1lICR2YWx1ZQogICAgICogQHBhcmFtIERvY3VtZW50ICAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBpZiAoISgkdmFsdWUgaW5zdGFuY2VvZiBcRGF0ZVRpbWUpKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdEYXRlVGltZSByZXF1aXJlZC4nKTsKICAgICAgICB9CgogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QoJHZhbHVlLCBudWxsKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZvcm1hdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybWF0KCRmb3JtYXQpCiAgICB7CiAgICAgICAgJHRoaXMtPmZvcm1hdCA9ICRmb3JtYXQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoJHZhbHVlKQogICAgewogICAgICAgIGlmICgkdmFsdWUgaW5zdGFuY2VvZiBcRGF0ZVRpbWUpIHsKICAgICAgICAgICAgJHRpbWVzdGFtcCA9ICR2YWx1ZS0+Z2V0VGltZVN0YW1wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgJHRpbWVzdGFtcCA9IHN0cnRvdGltZSgkdmFsdWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICgkdGltZXN0YW1wID09ICR0aGlzLT52YWx1ZS0+Z2V0VGltZVN0YW1wKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSgkdGhpcy0+dmFsdWUtPmZvcm1hdCgkdGhpcy0+Zm9ybWF0KSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAkb2Zmc2V0CiAgICAgKgogICAgICogQHJldHVybiBib29sfEVsZW1lbnREYXRlCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnQsIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwsICYkb2Zmc2V0ID0gMCkKICAgIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15ccypcKERcOig/UDxuYW1lPi4qPylcKS9zJywgJGNvbnRlbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgJG5hbWUgPSAkbWF0Y2hbJ25hbWUnXTsKICAgICAgICAgICAgJG5hbWUgPSBzdHJfcmVwbGFjZSgiJyIsICcnLCAkbmFtZSk7CiAgICAgICAgICAgICRkYXRlID0gZmFsc2U7CgogICAgICAgICAgICAvLyBTbWFsbGVzdCBmb3JtYXQgOiBZCiAgICAgICAgICAgIC8vIEZ1bGwgZm9ybWF0ICAgICA6IFltZEhpc1AKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXGR7NH0oXGR7Mn0oXGR7Mn0oXGR7Mn0oXGR7Mn0oXGR7Mn0oWihcZHsyLDR9KT98W1wrLV0/XGR7Mn0oXGR7Mn0pPyk/KT8pPyk/KT8pPyQvJywgJG5hbWUpKSB7CiAgICAgICAgICAgICAgICBpZiAoJHBvcyA9IHN0cnBvcygkbmFtZSwgJ1onKSkgewogICAgICAgICAgICAgICAgICAgICRuYW1lID0gc3Vic3RyKCRuYW1lLCAwLCAkcG9zICsgMSk7CiAgICAgICAgICAgICAgICB9IGVsc2VpZiAoc3RybGVuKCRuYW1lKSA9PSAxOCAmJiBwcmVnX21hdGNoKCcvW15cKy1dMDAwMCQvJywgJG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgPSBzdWJzdHIoJG5hbWUsIDAsIC00KSAuICcrMDAwMCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJGZvcm1hdCA9IHNlbGY6OiRmb3JtYXRzW3N0cmxlbigkbmFtZSldOwogICAgICAgICAgICAgICAgJGRhdGUgICA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgkZm9ybWF0LCAkbmFtZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAvLyBzcGVjaWFsIGNhc2VzCiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15cZHsxLDJ9LVxkezEsMn0tXGR7NH0sP1xzK1xkezJ9OlxkezJ9OlxkezJ9W1wrLV1cZHs0fSQvJywgJG5hbWUpKSB7CiAgICAgICAgICAgICAgICAgICAgJG5hbWUgICA9IHN0cl9yZXBsYWNlKCcsJywgJycsICRuYW1lKTsKICAgICAgICAgICAgICAgICAgICAkZm9ybWF0ID0gJ24tai1ZIEg6aTpzTyc7CiAgICAgICAgICAgICAgICAgICAgJGRhdGUgICA9IFxEYXRlVGltZTo6Y3JlYXRlRnJvbUZvcm1hdCgkZm9ybWF0LCAkbmFtZSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICghJGRhdGUpIHsKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgJG9mZnNldCArPSBzdHJwb3MoJGNvbnRlbnQsICcoRDonKSArIHN0cmxlbigkbWF0Y2hbJ25hbWUnXSkgKyA0OyAvLyAxIGZvciAnKEQ6JyBhbmQgJyknCiAgICAgICAgICAgICRlbGVtZW50ID0gbmV3IHNlbGYoJGRhdGUsICRkb2N1bWVudCk7CgogICAgICAgICAgICByZXR1cm4gJGVsZW1lbnQ7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementHexa.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50SGV4YQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnRIZXhhIGV4dGVuZHMgRWxlbWVudFN0cmluZwp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkY29udGVudAogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICogQHBhcmFtIGludCAgICAgICRvZmZzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8RWxlbWVudEhleGEKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkY29udGVudCwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCwgJiRvZmZzZXQgPSAwKQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxzKlw8KD9QPG5hbWU+W0EtRjAtOV0rKVw+L2lzJywgJGNvbnRlbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgJG5hbWUgICAgPSAkbWF0Y2hbJ25hbWUnXTsKICAgICAgICAgICAgJG9mZnNldCArPSBzdHJwb3MoJGNvbnRlbnQsICc8JyAuICRuYW1lKSArIHN0cmxlbigkbmFtZSkgKyAyOyAvLyAxIGZvciAnPicKICAgICAgICAgICAgLy8gcmVwYWNrYWdlIHN0cmluZyBhcyBzdGFuZGFyZAogICAgICAgICAgICAkbmFtZSAgICA9ICcoJyAuIHNlbGY6OmRlY29kZSgkbmFtZSwgJGRvY3VtZW50KSAuICcpJzsKICAgICAgICAgICAgJGVsZW1lbnQgPSBmYWxzZTsKCiAgICAgICAgICAgIGlmICghKCRlbGVtZW50ID0gRWxlbWVudERhdGU6OnBhcnNlKCRuYW1lLCAkZG9jdW1lbnQpKSkgewogICAgICAgICAgICAgICAgJGVsZW1lbnQgPSBFbGVtZW50U3RyaW5nOjpwYXJzZSgkbmFtZSwgJGRvY3VtZW50KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRlbGVtZW50OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICR2YWx1ZQogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZSgkdmFsdWUsIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRleHQgICA9ICcnOwogICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHZhbHVlKTsKCiAgICAgICAgaWYgKHN1YnN0cigkdmFsdWUsIDAsIDIpID09ICcwMCcpIHsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkgKz0gNCkgewogICAgICAgICAgICAgICAgJGhleCA9IHN1YnN0cigkdmFsdWUsICRpLCA0KTsKICAgICAgICAgICAgICAgICR0ZXh0IC49ICcmIycgLiBzdHJfcGFkKGhleGRlYygkaGV4KSwgNCwgJzAnLCBTVFJfUEFEX0xFRlQpIC4gJzsnOwogICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkgKz0gMikgewogICAgICAgICAgICAgICAgJGhleCA9IHN1YnN0cigkdmFsdWUsICRpLCAyKTsKICAgICAgICAgICAgICAgICR0ZXh0IC49IGNocihoZXhkZWMoJGhleCkpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgICR0ZXh0ID0gaHRtbF9lbnRpdHlfZGVjb2RlKCR0ZXh0LCBFTlRfTk9RVU9URVMsICdVVEYtOCcpOwoKICAgICAgICByZXR1cm4gJHRleHQ7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50TWlzc2luZwogKi8KY2xhc3MgRWxlbWVudE1pc3NpbmcgZXh0ZW5kcyBFbGVtZW50CnsKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICR2YWx1ZQogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHZhbHVlLCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsKQogICAgewogICAgICAgIHBhcmVudDo6X19jb25zdHJ1Y3QobnVsbCwgbnVsbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBtaXhlZCAkdmFsdWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGNvbnRhaW5zKCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbnRlbnQoKQogICAgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRm9udDsKCi8qKgogKiBDbGFzcyBFbGVtZW50TmFtZQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnROYW1lIGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkdmFsdWUKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KCR2YWx1ZSwgbnVsbCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAkdmFsdWUgPT0gJHRoaXMtPnZhbHVlOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICRjb250ZW50CiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50CiAgICAgKiBAcGFyYW0gaW50ICAgICAgJG9mZnNldAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxFbGVtZW50TmFtZQogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50LCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsLCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqXC8oP1A8bmFtZT5bQS1aMC05XC1cKywjXC5dKykvaXMnLCAkY29udGVudCwgJG1hdGNoKSkgewogICAgICAgICAgICAkbmFtZSAgID0gJG1hdGNoWyduYW1lJ107CiAgICAgICAgICAgICRvZmZzZXQgKz0gc3RycG9zKCRjb250ZW50LCAkbmFtZSkgKyBzdHJsZW4oJG5hbWUpOwogICAgICAgICAgICAkbmFtZSAgID0gRm9udDo6ZGVjb2RlRW50aXRpZXMoJG5hbWUpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRuYW1lLCAkZG9jdW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNull.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50TnVsbAogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnROdWxsIGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkdmFsdWUKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KG51bGwsIG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAnbnVsbCc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gbWl4ZWQgJHZhbHVlCiAgICAgKgogICAgICogQHJldHVybiBib29sCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBlcXVhbHMoJHZhbHVlKQogICAgewogICAgICAgIHJldHVybiAoJHRoaXMtPmdldENvbnRlbnQoKSA9PT0gJHZhbHVlKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkY29udGVudAogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICogQHBhcmFtIGludCAgICAgICRvZmZzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8RWxlbWVudE51bGwKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBwYXJzZSgkY29udGVudCwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCwgJiRvZmZzZXQgPSAwKQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxzKihudWxsKS9zJywgJGNvbnRlbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgJG9mZnNldCArPSBzdHJwb3MoJGNvbnRlbnQsICdudWxsJykgKyBzdHJsZW4oJ251bGwnKTsKCiAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZihudWxsLCAkZG9jdW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementNumeric.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50TnVtZXJpYwogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnROdW1lcmljIGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkdmFsdWUKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCR2YWx1ZSwgRG9jdW1lbnQgJGRvY3VtZW50ID0gbnVsbCkKICAgIHsKICAgICAgICBwYXJlbnQ6Ol9fY29uc3RydWN0KGZsb2F0dmFsKCR2YWx1ZSksIG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAgICRjb250ZW50CiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50CiAgICAgKiBAcGFyYW0gaW50ICAgICAgJG9mZnNldAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbHxFbGVtZW50TnVtZXJpYwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50LCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsLCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqKD9QPHZhbHVlPlwtP1swLTlcLl0rKS9zJywgJGNvbnRlbnQsICRtYXRjaCkpIHsKICAgICAgICAgICAgJHZhbHVlICA9ICRtYXRjaFsndmFsdWUnXTsKICAgICAgICAgICAgJG9mZnNldCArPSBzdHJwb3MoJGNvbnRlbnQsICR2YWx1ZSkgKyBzdHJsZW4oJHZhbHVlKTsKCiAgICAgICAgICAgIHJldHVybiBuZXcgc2VsZigkdmFsdWUsICRkb2N1bWVudCk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRm9udDsKCi8qKgogKiBDbGFzcyBFbGVtZW50U3RyaW5nCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudFN0cmluZyBleHRlbmRzIEVsZW1lbnQKewogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJHZhbHVlCiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkdmFsdWUsIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwpCiAgICB7CiAgICAgICAgcGFyZW50OjpfX2NvbnN0cnVjdCgkdmFsdWUsIG51bGwpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKCR2YWx1ZSkKICAgIHsKICAgICAgICByZXR1cm4gJHZhbHVlID09ICR0aGlzLT52YWx1ZTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkY29udGVudAogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICogQHBhcmFtIGludCAgICAgICRvZmZzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8RWxlbWVudFN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50LCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsLCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqXCgoP1A8bmFtZT4uKikvcycsICRjb250ZW50LCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICRuYW1lID0gJG1hdGNoWyduYW1lJ107CgogICAgICAgICAgICAvLyBGaW5kIG5leHQgJyknIG5vdCBlc2NhcGVkLgogICAgICAgICAgICAkY3VyX3N0YXJ0X3RleHQgPSAkc3RhcnRfc2VhcmNoX2VuZCA9IDA7CiAgICAgICAgICAgIHdoaWxlICgoJGN1cl9zdGFydF9wb3MgPSBzdHJwb3MoJG5hbWUsICcpJywgJHN0YXJ0X3NlYXJjaF9lbmQpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRjdXJfZXh0cmFjdCA9IHN1YnN0cigkbmFtZSwgJGN1cl9zdGFydF90ZXh0LCAkY3VyX3N0YXJ0X3BvcyAtICRjdXJfc3RhcnRfdGV4dCk7CiAgICAgICAgICAgICAgICBwcmVnX21hdGNoKCcvKD9QPGVzY2FwZT5bXFxcXSopJC9zJywgJGN1cl9leHRyYWN0LCAkbWF0Y2gpOwogICAgICAgICAgICAgICAgaWYgKCEoc3RybGVuKCRtYXRjaFsnZXNjYXBlJ10pICUgMikpIHsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRzdGFydF9zZWFyY2hfZW5kID0gJGN1cl9zdGFydF9wb3MgKyAxOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBFeHRyYWN0IHN0cmluZy4KICAgICAgICAgICAgJG5hbWUgICA9IHN1YnN0cigkbmFtZSwgMCwgJGN1cl9zdGFydF9wb3MpOwogICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cnBvcygkY29udGVudCwgJygnKSArICRjdXJfc3RhcnRfcG9zICsgMjsgLy8gMiBmb3IgJygnIGFuZCAnKScKICAgICAgICAgICAgJG5hbWUgICA9IHN0cl9yZXBsYWNlKAogICAgICAgICAgICAgICAgYXJyYXkoJ1xcXFwnLCAnXFwgJywgJ1xcLycsICdcKCcsICdcKScsICdcbicsICdccicsICdcdCcpLAogICAgICAgICAgICAgICAgYXJyYXkoJ1xcJywgICAnICcsICAgJy8nLCAgICcoJywgICcpJywgICJcbiIsICJcciIsICJcdCIpLAogICAgICAgICAgICAgICAgJG5hbWUKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgIC8vIERlY29kZSBzdHJpbmcuCiAgICAgICAgICAgICRuYW1lID0gRm9udDo6ZGVjb2RlT2N0YWwoJG5hbWUpOwogICAgICAgICAgICAkbmFtZSA9IEZvbnQ6OmRlY29kZUVudGl0aWVzKCRuYW1lKTsKICAgICAgICAgICAgJG5hbWUgPSBGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkbmFtZSwgZmFsc2UpOwogICAgICAgICAgICAkbmFtZSA9IEZvbnQ6OmRlY29kZVVuaWNvZGUoJG5hbWUpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRuYW1lLCAkZG9jdW1lbnQpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementStruct.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRTdHJ1Y3QKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50CiAqLwpjbGFzcyBFbGVtZW50U3RydWN0IGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkY29udGVudAogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICogQHBhcmFtIGludCAgICAgICRvZmZzZXQKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2x8RWxlbWVudFN0cnVjdAogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHBhcnNlKCRjb250ZW50LCBEb2N1bWVudCAkZG9jdW1lbnQgPSBudWxsLCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXHMqPDwoP1A8c3RydWN0Pi4qKS9pcycsICRjb250ZW50KSkgewogICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnLyguKj8pKDw8fD4+KS9zJywgdHJpbSgkY29udGVudCksICRtYXRjaGVzKTsKCiAgICAgICAgICAgICRsZXZlbCA9IDA7CiAgICAgICAgICAgICRzdWIgICA9ICcnOwogICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hlc1swXSBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgJHN1YiAuPSAkcGFydDsKICAgICAgICAgICAgICAgICRsZXZlbCArPSAoc3RycG9zKCRwYXJ0LCAnPDwnKSAhPT0gZmFsc2UgPyAxIDogLTEpOwogICAgICAgICAgICAgICAgaWYgKCRsZXZlbCA8PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICRvZmZzZXQgKz0gc3RycG9zKCRjb250ZW50LCAnPDwnKSArIHN0cmxlbihydHJpbSgkc3ViKSk7CgogICAgICAgICAgICAvLyBSZW1vdmVzICc8PCcgYW5kICc+PicuCiAgICAgICAgICAgICRzdWIgPSB0cmltKHByZWdfcmVwbGFjZSgnL15ccyo8PCguKik+PlxzKiQvcycsICdcXDEnLCAkc3ViKSk7CgogICAgICAgICAgICAkcG9zaXRpb24gPSAwOwogICAgICAgICAgICAkZWxlbWVudHMgPSBFbGVtZW50OjpwYXJzZSgkc3ViLCAkZG9jdW1lbnQsICRwb3NpdGlvbik7CiAgICAgICAgICAgICRoZWFkZXIgICA9IG5ldyBIZWFkZXIoJGVsZW1lbnRzLCAkZG9jdW1lbnQpOwoKICAgICAgICAgICAgcmV0dXJuICRoZWFkZXI7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Element/ElementXRef.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxFbGVtZW50Owp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKCi8qKgogKiBDbGFzcyBFbGVtZW50WFJlZgogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnRYUmVmIGV4dGVuZHMgRWxlbWVudAp7CiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRJZCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5nZXRDb250ZW50KCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIG1peGVkCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRPYmplY3QoKQogICAgewogICAgICAgIHJldHVybiAkdGhpcy0+ZG9jdW1lbnQtPmdldE9iamVjdEJ5SWQoJHRoaXMtPmdldElkKCkpOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIG1peGVkICR2YWx1ZQogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZXF1YWxzKCR2YWx1ZSkKICAgIHsKICAgICAgICAkaWQgPSAoJHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudFhSZWYpID8gJHZhbHVlLT5nZXRJZCgpIDogJHZhbHVlOwoKICAgICAgICByZXR1cm4gJHRoaXMtPmdldElkKCkgPT0gJGlkOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fdG9TdHJpbmcoKQogICAgewogICAgICAgIHJldHVybiAnI09iaiMnIC4gJHRoaXMtPmdldElkKCk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQKICAgICAqIEBwYXJhbSBEb2N1bWVudCAkZG9jdW1lbnQKICAgICAqIEBwYXJhbSBpbnQgICAgICAkb2Zmc2V0CiAgICAgKgogICAgICogQHJldHVybiBib29sfEVsZW1lbnRYUmVmCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnQsIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwsICYkb2Zmc2V0ID0gMCkKICAgIHsKICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15ccyooP1A8aWQ+WzAtOV0rXHMrWzAtOV0rXHMrUikvcycsICRjb250ZW50LCAkbWF0Y2gpKSB7CiAgICAgICAgICAgICRpZCA9ICRtYXRjaFsnaWQnXTsKICAgICAgICAgICAgJG9mZnNldCArPSBzdHJwb3MoJGNvbnRlbnQsICRpZCkgKyBzdHJsZW4oJGlkKTsKICAgICAgICAgICAgJGlkID0gc3RyX3JlcGxhY2UoJyAnLCAnXycsIHJ0cmltKCRpZCwgJyBSJykpOwoKICAgICAgICAgICAgcmV0dXJuIG5ldyBzZWxmKCRpZCwgJGRvY3VtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYzsKCi8qKgogKiBDbGFzcyBFbmNvZGluZwogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyCiAqLwpjbGFzcyBFbmNvZGluZyBleHRlbmRzIE9iamVjdAp7CiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRlbmNvZGluZzsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRkaWZmZXJlbmNlczsKCiAgICAvKioKICAgICAqIEB2YXIgYXJyYXkKICAgICAqLwogICAgcHJvdGVjdGVkICRtYXBwaW5nOwoKICAgIC8qKgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXQoKQogICAgewogICAgICAgICR0aGlzLT5tYXBwaW5nICAgICA9IGFycmF5KCk7CiAgICAgICAgJHRoaXMtPmRpZmZlcmVuY2VzID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+ZW5jb2RpbmcgICAgPSBudWxsOwoKICAgICAgICBpZiAoJHRoaXMtPmhhcygnQmFzZUVuY29kaW5nJykpIHsKICAgICAgICAgICAgLy8gTG9hZCByZWZlcmVuY2UgdGFibGUgY2hhcnNldC4KICAgICAgICAgICAgJGJhc2VFbmNvZGluZyA9IHByZWdfcmVwbGFjZSgnL1teQS1aMC05XS9pcycsICcnLCAkdGhpcy0+Z2V0KCdCYXNlRW5jb2RpbmcnKS0+Z2V0Q29udGVudCgpKTsKICAgICAgICAgICAgJGNsYXNzTmFtZSAgICA9ICdcXFNtYWxvdFxcUGRmUGFyc2VyXFxFbmNvZGluZ1xcJyAuICRiYXNlRW5jb2Rpbmc7CgogICAgICAgICAgICBpZiAoY2xhc3NfZXhpc3RzKCRjbGFzc05hbWUpKSB7CiAgICAgICAgICAgICAgICAkY2xhc3MgPSBuZXcgJGNsYXNzTmFtZSgpOwogICAgICAgICAgICAgICAgJHRoaXMtPmVuY29kaW5nID0gJGNsYXNzLT5nZXRUcmFuc2xhdGlvbnMoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdNaXNzaW5nIGVuY29kaW5nIGRhdGEgZm9yOiAiJyAuICRiYXNlRW5jb2RpbmcgLiAnIi4nKTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQnVpbGQgdGFibGUgaW5jbHVkaW5nIGRpZmZlcmVuY2VzLgogICAgICAgICAgICAkZGlmZmVyZW5jZXMgPSAkdGhpcy0+Z2V0KCdEaWZmZXJlbmNlcycpLT5nZXRDb250ZW50KCk7CiAgICAgICAgICAgICRjb2RlICAgICAgICA9IDA7CgogICAgICAgICAgICBmb3JlYWNoICgkZGlmZmVyZW5jZXMgYXMgJGRpZmZlcmVuY2UpIHsKICAgICAgICAgICAgICAgIC8qKiBAdmFyIEVsZW1lbnROdW1lcmljICRkaWZmZXJlbmNlICovCiAgICAgICAgICAgICAgICBpZiAoJGRpZmZlcmVuY2UgaW5zdGFuY2VvZiBFbGVtZW50TnVtZXJpYykgewogICAgICAgICAgICAgICAgICAgICRjb2RlID0gJGRpZmZlcmVuY2UtPmdldENvbnRlbnQoKTsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAvLyBFbGVtZW50TmFtZQogICAgICAgICAgICAgICAgaWYgKGlzX29iamVjdCgkZGlmZmVyZW5jZSkpIHsKICAgICAgICAgICAgICAgICAgICAkdGhpcy0+ZGlmZmVyZW5jZXNbJGNvZGVdID0gJGRpZmZlcmVuY2UtPmdldENvbnRlbnQoKTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPmRpZmZlcmVuY2VzWyRjb2RlXSA9ICRkaWZmZXJlbmNlOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIC8vIEZvciB0aGUgbmV4dCBjaGFyLgogICAgICAgICAgICAgICAgJGNvZGUrKzsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gQnVpbGQgZmluYWwgbWFwcGluZyAoY3VzdG9tID0+IHN0YW5kYXJkKS4KICAgICAgICAgICAgJHRhYmxlID0gYXJyYXlfZmxpcChhcnJheV9yZXZlcnNlKCR0aGlzLT5lbmNvZGluZywgdHJ1ZSkpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmRpZmZlcmVuY2VzIGFzICRjb2RlID0+ICRkaWZmZXJlbmNlKSB7CiAgICAgICAgICAgICAgICAvKiogQHZhciBzdHJpbmcgJGRpZmZlcmVuY2UgKi8KICAgICAgICAgICAgICAgICR0aGlzLT5tYXBwaW5nWyRjb2RlXSA9IChpc3NldCgkdGFibGVbJGRpZmZlcmVuY2VdKSA/ICR0YWJsZVskZGlmZmVyZW5jZV0gOiBGb250OjpNSVNTSU5HKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERldGFpbHMoJGRlZXAgPSB0cnVlKQogICAgewogICAgICAgICRkZXRhaWxzID0gYXJyYXkoKTsKCiAgICAgICAgJGRldGFpbHNbJ0Jhc2VFbmNvZGluZyddID0gKCR0aGlzLT5oYXMoJ0Jhc2VFbmNvZGluZycpID8gKHN0cmluZykkdGhpcy0+Z2V0KCdCYXNlRW5jb2RpbmcnKSA6ICdBbnNpJyk7CiAgICAgICAgJGRldGFpbHNbJ0RpZmZlcmVuY2VzJ10gID0gKCR0aGlzLT5oYXMoJ0RpZmZlcmVuY2VzJykgPyAoc3RyaW5nKSR0aGlzLT5nZXQoJ0RpZmZlcmVuY2VzJykgOiAnJyk7CgogICAgICAgICRkZXRhaWxzICs9IHBhcmVudDo6Z2V0RGV0YWlscygkZGVlcCk7CgogICAgICAgIHJldHVybiAkZGV0YWlsczsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBpbnQgJGNoYXIKICAgICAqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gdHJhbnNsYXRlQ2hhcigkZGVjKQogICAgewogICAgICAgIGlmIChpc3NldCgkdGhpcy0+bWFwcGluZ1skZGVjXSkpIHsKICAgICAgICAgICAgJGRlYyA9ICR0aGlzLT5tYXBwaW5nWyRkZWNdOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICRkZWM7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin1Encoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCi8vIFNvdXJjZSA6IGh0dHA6Ly9jcGFuc2VhcmNoLnBlcmwub3JnL3NyYy9KVi9Qb3N0U2NyaXB0LUZvbnQtMS4xMC4wMi9saWIvUG9zdFNjcmlwdC9JU09MYXRpbjFFbmNvZGluZy5wbQoKbmFtZXNwYWNlIFNtYWxvdFxQZGZQYXJzZXJcRW5jb2Rpbmc7CgovKioKICogQ2xhc3MgSVNPTGF0aW4xRW5jb2RpbmcKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxFbmNvZGluZwogKi8KY2xhc3MgSVNPTGF0aW4xRW5jb2RpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnc3BhY2UgZXhjbGFtIHF1b3RlZGJsIG51bWJlcnNpZ24gZG9sbGFyIHBlcmNlbnQgYW1wZXJzYW5kIHF1b3RlcmlnaHQgJyAuCiAgICAgICAgICAncGFyZW5sZWZ0IHBhcmVucmlnaHQgYXN0ZXJpc2sgcGx1cyBjb21tYSBtaW51cyBwZXJpb2Qgc2xhc2ggemVybyBvbmUgJyAuCiAgICAgICAgICAndHdvIHRocmVlIGZvdXIgZml2ZSBzaXggc2V2ZW4gZWlnaHQgbmluZSBjb2xvbiBzZW1pY29sb24gbGVzcyBlcXVhbCAnIC4KICAgICAgICAgICdncmVhdGVyIHF1ZXN0aW9uIGF0IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYICcgLgogICAgICAgICAgJ1kgWiBicmFja2V0bGVmdCBiYWNrc2xhc2ggYnJhY2tldHJpZ2h0IGFzY2lpY2lyY3VtIHVuZGVyc2NvcmUgJyAuCiAgICAgICAgICAncXVvdGVsZWZ0IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAnIC4KICAgICAgICAgICdicmFjZWxlZnQgYmFyIGJyYWNlcmlnaHQgYXNjaWl0aWxkZSAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgZG90bGVzc2kgZ3JhdmUgYWN1dGUgJyAuCiAgICAgICAgICAnY2lyY3VtZmxleCB0aWxkZSBtYWNyb24gYnJldmUgZG90YWNjZW50IGRpZXJlc2lzIC5ub3RkZWYgcmluZyAnIC4KICAgICAgICAgICdjZWRpbGxhIC5ub3RkZWYgaHVuZ2FydW1sYXV0IG9nb25layBjYXJvbiBzcGFjZSBleGNsYW1kb3duIGNlbnQgJyAuCiAgICAgICAgICAnc3RlcmxpbmcgY3VycmVuY3kgeWVuIGJyb2tlbmJhciBzZWN0aW9uIGRpZXJlc2lzIGNvcHlyaWdodCAnIC4KICAgICAgICAgICdvcmRmZW1pbmluZSBndWlsbGVtb3RsZWZ0IGxvZ2ljYWxub3QgaHlwaGVuIHJlZ2lzdGVyZWQgbWFjcm9uIGRlZ3JlZSAnIC4KICAgICAgICAgICdwbHVzbWludXMgdHdvc3VwZXJpb3IgdGhyZWVzdXBlcmlvciBhY3V0ZSBtdSBwYXJhZ3JhcGggJyAuCiAgICAgICAgICAncGVyaW9kY2VudGVyZWQgY2VkaWxsYSBvbmVzdXBlcmlvciBvcmRtYXNjdWxpbmUgZ3VpbGxlbW90cmlnaHQgJyAuCiAgICAgICAgICAnb25lcXVhcnRlciBvbmVoYWxmIHRocmVlcXVhcnRlcnMgcXVlc3Rpb25kb3duIEFncmF2ZSBBYWN1dGUgJyAuCiAgICAgICAgICAnQWNpcmN1bWZsZXggQXRpbGRlIEFkaWVyZXNpcyBBcmluZyBBRSBDY2VkaWxsYSBFZ3JhdmUgRWFjdXRlICcgLgogICAgICAgICAgJ0VjaXJjdW1mbGV4IEVkaWVyZXNpcyBJZ3JhdmUgSWFjdXRlIEljaXJjdW1mbGV4IElkaWVyZXNpcyBFdGggTnRpbGRlICcgLgogICAgICAgICAgJ09ncmF2ZSBPYWN1dGUgT2NpcmN1bWZsZXggT3RpbGRlIE9kaWVyZXNpcyBtdWx0aXBseSBPc2xhc2ggVWdyYXZlICcgLgogICAgICAgICAgJ1VhY3V0ZSBVY2lyY3VtZmxleCBVZGllcmVzaXMgWWFjdXRlIFRob3JuIGdlcm1hbmRibHMgYWdyYXZlIGFhY3V0ZSAnIC4KICAgICAgICAgICdhY2lyY3VtZmxleCBhdGlsZGUgYWRpZXJlc2lzIGFyaW5nIGFlIGNjZWRpbGxhIGVncmF2ZSBlYWN1dGUgJyAuCiAgICAgICAgICAnZWNpcmN1bWZsZXggZWRpZXJlc2lzIGlncmF2ZSBpYWN1dGUgaWNpcmN1bWZsZXggaWRpZXJlc2lzIGV0aCBudGlsZGUgJyAuCiAgICAgICAgICAnb2dyYXZlIG9hY3V0ZSBvY2lyY3VtZmxleCBvdGlsZGUgb2RpZXJlc2lzIGRpdmlkZSBvc2xhc2ggdWdyYXZlICcgLgogICAgICAgICAgJ3VhY3V0ZSB1Y2lyY3VtZmxleCB1ZGllcmVzaXMgeWFjdXRlIHRob3JuIHlkaWVyZXNpcyc7CgogICAgICAgIHJldHVybiBleHBsb2RlKCcgJywgJGVuY29kaW5nKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/ISOLatin9Encoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCi8vIFNvdXJjZSA6IGh0dHA6Ly9jcGFuc2VhcmNoLnBlcmwub3JnL3NyYy9KVi9Qb3N0U2NyaXB0LUZvbnQtMS4xMC4wMi9saWIvUG9zdFNjcmlwdC9JU09MYXRpbjlFbmNvZGluZy5wbQoKbmFtZXNwYWNlIFNtYWxvdFxQZGZQYXJzZXJcRW5jb2Rpbmc7CgovKioKICogQ2xhc3MgSVNPTGF0aW45RW5jb2RpbmcKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxFbmNvZGluZwogKi8KY2xhc3MgSVNPTGF0aW45RW5jb2RpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnc3BhY2UgZXhjbGFtIHF1b3RlZGJsIG51bWJlcnNpZ24gZG9sbGFyIHBlcmNlbnQgYW1wZXJzYW5kIHF1b3RlcmlnaHQgJyAuCiAgICAgICAgICAncGFyZW5sZWZ0IHBhcmVucmlnaHQgYXN0ZXJpc2sgcGx1cyBjb21tYSBtaW51cyBwZXJpb2Qgc2xhc2ggemVybyBvbmUgJyAuCiAgICAgICAgICAndHdvIHRocmVlIGZvdXIgZml2ZSBzaXggc2V2ZW4gZWlnaHQgbmluZSBjb2xvbiBzZW1pY29sb24gbGVzcyBlcXVhbCAnIC4KICAgICAgICAgICdncmVhdGVyIHF1ZXN0aW9uIGF0IEEgQiBDIEQgRSBGIEcgSCBJIEogSyBMIE0gTiBPIFAgUSBSIFMgVCBVIFYgVyBYICcgLgogICAgICAgICAgJ1kgWiBicmFja2V0bGVmdCBiYWNrc2xhc2ggYnJhY2tldHJpZ2h0IGFzY2lpY2lyY3VtIHVuZGVyc2NvcmUgJyAuCiAgICAgICAgICAncXVvdGVsZWZ0IGEgYiBjIGQgZSBmIGcgaCBpIGogayBsIG0gbiBvIHAgcSByIHMgdCB1IHYgdyB4IHkgeiAnIC4KICAgICAgICAgICdicmFjZWxlZnQgYmFyIGJyYWNlcmlnaHQgYXNjaWl0aWxkZSAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgZG90bGVzc2kgZ3JhdmUgYWN1dGUgJyAuCiAgICAgICAgICAnY2lyY3VtZmxleCB0aWxkZSBtYWNyb24gYnJldmUgZG90YWNjZW50IGRpZXJlc2lzIC5ub3RkZWYgcmluZyAnIC4KICAgICAgICAgICdjZWRpbGxhIC5ub3RkZWYgaHVuZ2FydW1sYXV0IG9nb25layBjYXJvbiBzcGFjZSBleGNsYW1kb3duIGNlbnQgJyAuCiAgICAgICAgICAnc3RlcmxpbmcgRXVybyB5ZW4gU2Nhcm9uIHNlY3Rpb24gc2Nhcm9uIGNvcHlyaWdodCAnIC4KICAgICAgICAgICdvcmRmZW1pbmluZSBndWlsbGVtb3RsZWZ0IGxvZ2ljYWxub3QgaHlwaGVuIHJlZ2lzdGVyZWQgbWFjcm9uIGRlZ3JlZSAnIC4KICAgICAgICAgICdwbHVzbWludXMgdHdvc3VwZXJpb3IgdGhyZWVzdXBlcmlvciBaY2Fyb24gbXUgcGFyYWdyYXBoICcgLgogICAgICAgICAgJ3BlcmlvZGNlbnRlcmVkIHpjYXJvbiBvbmVzdXBlcmlvciBvcmRtYXNjdWxpbmUgZ3VpbGxlbW90cmlnaHQgJyAuCiAgICAgICAgICAnT0Ugb2UgWWRpZXJlc2lzIHF1ZXN0aW9uZG93biBBZ3JhdmUgQWFjdXRlICcgLgogICAgICAgICAgJ0FjaXJjdW1mbGV4IEF0aWxkZSBBZGllcmVzaXMgQXJpbmcgQUUgQ2NlZGlsbGEgRWdyYXZlIEVhY3V0ZSAnIC4KICAgICAgICAgICdFY2lyY3VtZmxleCBFZGllcmVzaXMgSWdyYXZlIElhY3V0ZSBJY2lyY3VtZmxleCBJZGllcmVzaXMgRXRoIE50aWxkZSAnIC4KICAgICAgICAgICdPZ3JhdmUgT2FjdXRlIE9jaXJjdW1mbGV4IE90aWxkZSBPZGllcmVzaXMgbXVsdGlwbHkgT3NsYXNoIFVncmF2ZSAnIC4KICAgICAgICAgICdVYWN1dGUgVWNpcmN1bWZsZXggVWRpZXJlc2lzIFlhY3V0ZSBUaG9ybiBnZXJtYW5kYmxzIGFncmF2ZSBhYWN1dGUgJyAuCiAgICAgICAgICAnYWNpcmN1bWZsZXggYXRpbGRlIGFkaWVyZXNpcyBhcmluZyBhZSBjY2VkaWxsYSBlZ3JhdmUgZWFjdXRlICcgLgogICAgICAgICAgJ2VjaXJjdW1mbGV4IGVkaWVyZXNpcyBpZ3JhdmUgaWFjdXRlIGljaXJjdW1mbGV4IGlkaWVyZXNpcyBldGggbnRpbGRlICcgLgogICAgICAgICAgJ29ncmF2ZSBvYWN1dGUgb2NpcmN1bWZsZXggb3RpbGRlIG9kaWVyZXNpcyBkaXZpZGUgb3NsYXNoIHVncmF2ZSAnIC4KICAgICAgICAgICd1YWN1dGUgdWNpcmN1bWZsZXggdWRpZXJlc2lzIHlhY3V0ZSB0aG9ybiB5ZGllcmVzaXMnOwoKICAgICAgICByZXR1cm4gZXhwbG9kZSgnICcsICRlbmNvZGluZyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/MacRomanEncoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCi8vIFNvdXJjZSA6IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5hcHBsZS5jb20vc291cmNlL3ZpbS92aW0tMzQvdmltL3J1bnRpbWUvcHJpbnQvbWFjLXJvbWFuLnBzCgpuYW1lc3BhY2UgU21hbG90XFBkZlBhcnNlclxFbmNvZGluZzsKCi8qKgogKiBDbGFzcyBNYWNSb21hbkVuY29kaW5nCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcRW5jb2RpbmcKICovCmNsYXNzIE1hY1JvbWFuRW5jb2RpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnc3BhY2UgZXhjbGFtIHF1b3RlZGJsIG51bWJlcnNpZ24gZG9sbGFyIHBlcmNlbnQgYW1wZXJzYW5kIHF1b3Rlc2luZ2xlICcgLgogICAgICAgICAgJ3BhcmVubGVmdCBwYXJlbnJpZ2h0IGFzdGVyaXNrIHBsdXMgY29tbWEgbWludXMgcGVyaW9kIHNsYXNoICcgLgogICAgICAgICAgJ3plcm8gb25lIHR3byB0aHJlZSBmb3VyIGZpdmUgc2l4IHNldmVuICcgLgogICAgICAgICAgJ2VpZ2h0IG5pbmUgY29sb24gc2VtaWNvbG9uIGxlc3MgZXF1YWwgZ3JlYXRlciBxdWVzdGlvbiAnIC4KICAgICAgICAgICdhdCBBIEIgQyBEIEUgRiBHICcgLgogICAgICAgICAgJ0ggSSBKIEsgTCBNIE4gTyAnIC4KICAgICAgICAgICdQIFEgUiBTIFQgVSBWIFcgJyAuCiAgICAgICAgICAnWCBZIFogYnJhY2tldGxlZnQgYmFja3NsYXNoIGJyYWNrZXRyaWdodCBhc2NpaWNpcmN1bSB1bmRlcnNjb3JlICcgLgogICAgICAgICAgJ2dyYXZlIGEgYiBjIGQgZSBmIGcgJyAuCiAgICAgICAgICAnaCBpIGogayBsIG0gbiBvICcgLgogICAgICAgICAgJ3AgcSByIHMgdCB1IHYgdyAnIC4KICAgICAgICAgICd4IHkgeiBicmFjZWxlZnQgYmFyIGJyYWNlcmlnaHQgYXNjaWl0aWxkZSAubm90ZGVmICcgLgogICAgICAgICAgJ0FkaWVyZXNpcyBBcmluZyBDY2VkaWxsYSBFYWN1dGUgTnRpbGRlIE9kaWVyZXNpcyBVZGllcmVzaXMgYWFjdXRlICcgLgogICAgICAgICAgJ2FncmF2ZSBhY2lyY3VtZmxleCBhZGllcmVzaXMgYXRpbGRlIGFyaW5nIGNjZWRpbGxhIGVhY3V0ZSBlZ3JhdmUgJyAuCiAgICAgICAgICAnZWNpcmN1bWZsZXggZWRpZXJlc2lzIGlhY3V0ZSBpZ3JhdmUgaWNpcmN1bWZsZXggaWRpZXJlc2lzIG50aWxkZSBvYWN1dGUgJyAuCiAgICAgICAgICAnb2dyYXZlIG9jaXJjdW1mbGV4IG9kaWVyZXNpcyBvdGlsZGUgdWFjdXRlIHVncmF2ZSB1Y2lyY3VtZmxleCB1ZGllcmVzaXMgJyAuCiAgICAgICAgICAnZGFnZ2VyIGRlZ3JlZSBjZW50IHN0ZXJsaW5nIHNlY3Rpb24gYnVsbGV0IHBhcmFncmFwaCBnZXJtYW5kYmxzICcgLgogICAgICAgICAgJ3JlZ2lzdGVyZWQgY29weXJpZ2h0IHRyYWRlbWFyayBhY3V0ZSBkaWVyZXNpcyBub3RlcXVhbCBBRSBPc2xhc2ggJyAuCiAgICAgICAgICAnaW5maW5pdHkgcGx1c21pbnVzIGxlc3NlcXVhbCBncmVhdGVyZXF1YWwgeWVuIG11IHBhcnRpYWxkaWZmIHN1bW1hdGlvbiAnIC4KICAgICAgICAgICdQaSBwaSBpbnRlZ3JhbCBvcmRmZW1pbmluZSBvcmRtYXNjdWxpbmUgT21lZ2EgYWUgb3NsYXNoICcgLgogICAgICAgICAgJ3F1ZXN0aW9uZG93biBleGNsYW1kb3duIGxvZ2ljYWxub3QgcmFkaWNhbCBmbG9yaW4gYXBwcm94ZXF1YWwgZGVsdGEgZ3VpbGxlbW90bGVmdCAnIC4KICAgICAgICAgICdndWlsbGVtb3RyaWdodCBlbGxpcHNpcyBzcGFjZSBBZ3JhdmUgQXRpbGRlIE90aWxkZSBPRSBvZSAnIC4KICAgICAgICAgICdlbmRhc2ggZW1kYXNoIHF1b3RlZGJsbGVmdCBxdW90ZWRibHJpZ2h0IHF1b3RlbGVmdCBxdW90ZXJpZ2h0IGRpdmlkZSBsb3plbmdlICcgLgogICAgICAgICAgJ3lkaWVyZXNpcyBZZGllcmVzaXMgZnJhY3Rpb24gY3VycmVuY3kgZ3VpbHNpbmdsbGVmdCBndWlsc2luZ2xyaWdodCBmaSBmbCAnIC4KICAgICAgICAgICdkYWdnZXJkYmwgcGVyaW9kY2VudGVyZWQgcXVvdGVzaW5nbGJhc2UgcXVvdGVkYmxiYXNlIHBlcnRob3VzYW5kIEFjaXJjdW1mbGV4IEVjaXJjdW1mbGV4IEFhY3V0ZSAnIC4KICAgICAgICAgICdFZGllcmVzaXMgRWdyYXZlIElhY3V0ZSBJY2lyY3VtZmxleCBJZGllcmVzaXMgSWdyYXZlIE9hY3V0ZSBPY2lyY3VtZmxleCAnIC4KICAgICAgICAgICdoZWFydCBPZ3JhdmUgVWFjdXRlIFVjaXJjdW1mbGV4IFVncmF2ZSBkb3RsZXNzaSBjaXJjdW1mbGV4IHRpbGRlICcgLgogICAgICAgICAgJ21hY3JvbiBicmV2ZSBkb3RhY2NlbnQgcmluZyBjZWRpbGxhIGh1bmdhcnVtbGF1dCBvZ29uZWsgY2Fyb24nOwoKICAgICAgICByZXR1cm4gZXhwbG9kZSgnICcsICRlbmNvZGluZyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/StandardEncoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCi8vIFNvdXJjZSA6IGh0dHA6Ly9jcGFuc2VhcmNoLnBlcmwub3JnL3NyYy9KVi9Qb3N0U2NyaXB0LUZvbnQtMS4xMC4wMi9saWIvUG9zdFNjcmlwdC9TdGFuZGFyZEVuY29kaW5nLnBtCgpuYW1lc3BhY2UgU21hbG90XFBkZlBhcnNlclxFbmNvZGluZzsKCi8qKgogKiBDbGFzcyBTdGFuZGFyZEVuY29kaW5nCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcRW5jb2RpbmcKICovCmNsYXNzIFN0YW5kYXJkRW5jb2RpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnc3BhY2UgZXhjbGFtIHF1b3RlZGJsIG51bWJlcnNpZ24gZG9sbGFyIHBlcmNlbnQgYW1wZXJzYW5kIHF1b3RlcmlnaHQgJyAuCiAgICAgICAgICAncGFyZW5sZWZ0IHBhcmVucmlnaHQgYXN0ZXJpc2sgcGx1cyBjb21tYSBoeXBoZW4gcGVyaW9kIHNsYXNoIHplcm8gJyAuCiAgICAgICAgICAnb25lIHR3byB0aHJlZSBmb3VyIGZpdmUgc2l4IHNldmVuIGVpZ2h0IG5pbmUgY29sb24gc2VtaWNvbG9uIGxlc3MgJyAuCiAgICAgICAgICAnZXF1YWwgZ3JlYXRlciBxdWVzdGlvbiBhdCBBIEIgQyBEIEUgRiBHIEggSSBKIEsgTCBNIE4gTyBQIFEgUiBTIFQgVSAnIC4KICAgICAgICAgICdWIFcgWCBZIFogYnJhY2tldGxlZnQgYmFja3NsYXNoIGJyYWNrZXRyaWdodCBhc2NpaWNpcmN1bSB1bmRlcnNjb3JlICcgLgogICAgICAgICAgJ3F1b3RlbGVmdCBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogJyAuCiAgICAgICAgICAnYnJhY2VsZWZ0IGJhciBicmFjZXJpZ2h0IGFzY2lpdGlsZGUgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiBleGNsYW1kb3duIGNlbnQgJyAuCiAgICAgICAgICAnc3RlcmxpbmcgZnJhY3Rpb24geWVuIGZsb3JpbiBzZWN0aW9uIGN1cnJlbmN5IHF1b3Rlc2luZ2xlICcgLgogICAgICAgICAgJ3F1b3RlZGJsbGVmdCBndWlsbGVtb3RsZWZ0IGd1aWxzaW5nbGxlZnQgZ3VpbHNpbmdscmlnaHQgZmkgZmwgJyAuCiAgICAgICAgICAnLm5vdGRlZiBlbmRhc2ggZGFnZ2VyIGRhZ2dlcmRibCBwZXJpb2RjZW50ZXJlZCAubm90ZGVmIHBhcmFncmFwaCAnIC4KICAgICAgICAgICdidWxsZXQgcXVvdGVzaW5nbGJhc2UgcXVvdGVkYmxiYXNlIHF1b3RlZGJscmlnaHQgZ3VpbGxlbW90cmlnaHQgJyAuCiAgICAgICAgICAnZWxsaXBzaXMgcGVydGhvdXNhbmQgLm5vdGRlZiBxdWVzdGlvbmRvd24gLm5vdGRlZiBncmF2ZSBhY3V0ZSAnIC4KICAgICAgICAgICdjaXJjdW1mbGV4IHRpbGRlIG1hY3JvbiBicmV2ZSBkb3RhY2NlbnQgZGllcmVzaXMgLm5vdGRlZiByaW5nICcgLgogICAgICAgICAgJ2NlZGlsbGEgLm5vdGRlZiBodW5nYXJ1bWxhdXQgb2dvbmVrIGNhcm9uIGVtZGFzaCAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIEFFIC5ub3RkZWYgJyAuCiAgICAgICAgICAnb3JkZmVtaW5pbmUgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiBMc2xhc2ggT3NsYXNoIE9FICcgLgogICAgICAgICAgJ29yZG1hc2N1bGluZSAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgYWUgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgZG90bGVzc2kgLm5vdGRlZiAubm90ZGVmIGxzbGFzaCBvc2xhc2ggb2UgZ2VybWFuZGJscyAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmJzsKCiAgICAgICAgcmV0dXJuIGV4cGxvZGUoJyAnLCAkZW5jb2RpbmcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Encoding/WinAnsiEncoding.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCi8vIFNvdXJjZSA6IGh0dHA6Ly9jcGFuc2VhcmNoLnBlcmwub3JnL3NyYy9KVi9Qb3N0U2NyaXB0LUZvbnQtMS4xMC4wMi9saWIvUG9zdFNjcmlwdC9XaW5BTlNJRW5jb2RpbmcucG0KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEVuY29kaW5nOwoKLyoqCiAqIENsYXNzIFdpbkFuc2lFbmNvZGluZwogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEVuY29kaW5nCiAqLwpjbGFzcyBXaW5BbnNpRW5jb2RpbmcKewogICAgcHVibGljIGZ1bmN0aW9uIGdldFRyYW5zbGF0aW9ucygpCiAgICB7CiAgICAgICAgJGVuY29kaW5nID0KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmICcgLgogICAgICAgICAgJy5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAnIC4KICAgICAgICAgICcubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgLm5vdGRlZiAubm90ZGVmIC5ub3RkZWYgJyAuCiAgICAgICAgICAnc3BhY2UgZXhjbGFtIHF1b3RlZGJsIG51bWJlcnNpZ24gZG9sbGFyIHBlcmNlbnQgYW1wZXJzYW5kIHF1b3Rlc2luZ2xlICcgLgogICAgICAgICAgJ3BhcmVubGVmdCBwYXJlbnJpZ2h0IGFzdGVyaXNrIHBsdXMgY29tbWEgaHlwaGVuIHBlcmlvZCBzbGFzaCB6ZXJvIG9uZSAnIC4KICAgICAgICAgICd0d28gdGhyZWUgZm91ciBmaXZlIHNpeCBzZXZlbiBlaWdodCBuaW5lIGNvbG9uIHNlbWljb2xvbiBsZXNzIGVxdWFsICcgLgogICAgICAgICAgJ2dyZWF0ZXIgcXVlc3Rpb24gYXQgQSBCIEMgRCBFIEYgRyBIIEkgSiBLIEwgTSBOIE8gUCBRIFIgUyBUIFUgViBXIFggJyAuCiAgICAgICAgICAnWSBaIGJyYWNrZXRsZWZ0IGJhY2tzbGFzaCBicmFja2V0cmlnaHQgYXNjaWljaXJjdW0gdW5kZXJzY29yZSAnIC4KICAgICAgICAgICdncmF2ZSBhIGIgYyBkIGUgZiBnIGggaSBqIGsgbCBtIG4gbyBwIHEgciBzIHQgdSB2IHcgeCB5IHogJyAuCiAgICAgICAgICAnYnJhY2VsZWZ0IGJhciBicmFjZXJpZ2h0IGFzY2lpdGlsZGUgYnVsbGV0IEV1cm8gYnVsbGV0IHF1b3Rlc2luZ2xiYXNlICcgLgogICAgICAgICAgJ2Zsb3JpbiBxdW90ZWRibGJhc2UgZWxsaXBzaXMgZGFnZ2VyIGRhZ2dlcmRibCBjaXJjdW1mbGV4IHBlcnRob3VzYW5kICcgLgogICAgICAgICAgJ1NjYXJvbiBndWlsc2luZ2xsZWZ0IE9FIGJ1bGxldCBaY2Fyb24gYnVsbGV0IGJ1bGxldCBxdW90ZWxlZnQgcXVvdGVyaWdodCAnIC4KICAgICAgICAgICdxdW90ZWRibGxlZnQgcXVvdGVkYmxyaWdodCBidWxsZXQgZW5kYXNoIGVtZGFzaCB0aWxkZSB0cmFkZW1hcmsgc2Nhcm9uICcgLgogICAgICAgICAgJ2d1aWxzaW5nbHJpZ2h0IG9lIGJ1bGxldCB6Y2Fyb24gWWRpZXJlc2lzIHNwYWNlIGV4Y2xhbWRvd24gY2VudCAnIC4KICAgICAgICAgICdzdGVybGluZyBjdXJyZW5jeSB5ZW4gYnJva2VuYmFyIHNlY3Rpb24gZGllcmVzaXMgY29weXJpZ2h0ICcgLgogICAgICAgICAgJ29yZGZlbWluaW5lIGd1aWxsZW1vdGxlZnQgbG9naWNhbG5vdCBoeXBoZW4gcmVnaXN0ZXJlZCBtYWNyb24gZGVncmVlICcgLgogICAgICAgICAgJ3BsdXNtaW51cyB0d29zdXBlcmlvciB0aHJlZXN1cGVyaW9yIGFjdXRlIG11IHBhcmFncmFwaCAnIC4KICAgICAgICAgICdwZXJpb2RjZW50ZXJlZCBjZWRpbGxhIG9uZXN1cGVyaW9yIG9yZG1hc2N1bGluZSBndWlsbGVtb3RyaWdodCAnIC4KICAgICAgICAgICdvbmVxdWFydGVyIG9uZWhhbGYgdGhyZWVxdWFydGVycyBxdWVzdGlvbmRvd24gQWdyYXZlIEFhY3V0ZSAnIC4KICAgICAgICAgICdBY2lyY3VtZmxleCBBdGlsZGUgQWRpZXJlc2lzIEFyaW5nIEFFIENjZWRpbGxhIEVncmF2ZSBFYWN1dGUgJyAuCiAgICAgICAgICAnRWNpcmN1bWZsZXggRWRpZXJlc2lzIElncmF2ZSBJYWN1dGUgSWNpcmN1bWZsZXggSWRpZXJlc2lzIEV0aCBOdGlsZGUgJyAuCiAgICAgICAgICAnT2dyYXZlIE9hY3V0ZSBPY2lyY3VtZmxleCBPdGlsZGUgT2RpZXJlc2lzIG11bHRpcGx5IE9zbGFzaCBVZ3JhdmUgJyAuCiAgICAgICAgICAnVWFjdXRlIFVjaXJjdW1mbGV4IFVkaWVyZXNpcyBZYWN1dGUgVGhvcm4gZ2VybWFuZGJscyBhZ3JhdmUgYWFjdXRlICcgLgogICAgICAgICAgJ2FjaXJjdW1mbGV4IGF0aWxkZSBhZGllcmVzaXMgYXJpbmcgYWUgY2NlZGlsbGEgZWdyYXZlIGVhY3V0ZSAnIC4KICAgICAgICAgICdlY2lyY3VtZmxleCBlZGllcmVzaXMgaWdyYXZlIGlhY3V0ZSBpY2lyY3VtZmxleCBpZGllcmVzaXMgZXRoIG50aWxkZSAnIC4KICAgICAgICAgICdvZ3JhdmUgb2FjdXRlIG9jaXJjdW1mbGV4IG90aWxkZSBvZGllcmVzaXMgZGl2aWRlIG9zbGFzaCB1Z3JhdmUgJyAuCiAgICAgICAgICAndWFjdXRlIHVjaXJjdW1mbGV4IHVkaWVyZXNpcyB5YWN1dGUgdGhvcm4geWRpZXJlc2lzJzsKCiAgICAgICAgcmV0dXJuIGV4cGxvZGUoJyAnLCAkZW5jb2RpbmcpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKLyoqCiAqIENsYXNzIEZvbnQKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlcgogKi8KY2xhc3MgRm9udCBleHRlbmRzIE9iamVjdAp7CiAgICAvKioKICAgICAqCiAgICAgKi8KICAgIGNvbnN0IE1JU1NJTkcgPSAnPyc7CgogICAgLyoqCiAgICAgKiBAdmFyIGFycmF5CiAgICAgKi8KICAgIHByb3RlY3RlZCAkdGFibGUgPSBudWxsOwoKICAgIC8qKgogICAgICogQHZhciBhcnJheQogICAgICovCiAgICBwcm90ZWN0ZWQgJHRhYmxlU2l6ZXMgPSBudWxsOwoKICAgIC8qKgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGluaXQoKQogICAgewogICAgICAgIC8vIExvYWQgdHJhbnNsYXRlIHRhYmxlLgogICAgICAgICR0aGlzLT5sb2FkVHJhbnNsYXRlVGFibGUoKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXROYW1lKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhhcygnQmFzZUZvbnQnKSA/IChzdHJpbmcpJHRoaXMtPmdldCgnQmFzZUZvbnQnKSA6ICdbVW5rbm93bl0nOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFR5cGUoKQogICAgewogICAgICAgIHJldHVybiAoc3RyaW5nKSR0aGlzLT5oZWFkZXItPmdldCgnU3VidHlwZScpOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGV0YWlscygkZGVlcCA9IHRydWUpCiAgICB7CiAgICAgICAgJGRldGFpbHMgPSBhcnJheSgpOwoKICAgICAgICAkZGV0YWlsc1snTmFtZSddICAgICA9ICR0aGlzLT5nZXROYW1lKCk7CiAgICAgICAgJGRldGFpbHNbJ1R5cGUnXSAgICAgPSAkdGhpcy0+Z2V0VHlwZSgpOwogICAgICAgICRkZXRhaWxzWydFbmNvZGluZyddID0gKCR0aGlzLT5oYXMoJ0VuY29kaW5nJykgPyAoc3RyaW5nKSR0aGlzLT5nZXQoJ0VuY29kaW5nJykgOiAnQW5zaScpOwoKICAgICAgICAkZGV0YWlscyArPSBwYXJlbnQ6OmdldERldGFpbHMoJGRlZXApOwoKICAgICAgICByZXR1cm4gJGRldGFpbHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRjaGFyCiAgICAgKiBAcGFyYW0gYm9vbCAgICR1c2VfZGVmYXVsdAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiB0cmFuc2xhdGVDaGFyKCRjaGFyLCAkdXNlX2RlZmF1bHQgPSB0cnVlKQogICAgewogICAgICAgICRkZWMgPSBoZXhkZWMoYmluMmhleCgkY2hhcikpOwoKICAgICAgICBpZiAoYXJyYXlfa2V5X2V4aXN0cygkZGVjLCAkdGhpcy0+dGFibGUpKSB7CiAgICAgICAgICAgICRjaGFyID0gJHRoaXMtPnRhYmxlWyRkZWNdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjaGFyID0gKCR1c2VfZGVmYXVsdCA/IHNlbGY6Ok1JU1NJTkcgOiAkY2hhcik7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNoYXI7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gaW50ICRjb2RlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1Y2hyKCRjb2RlKQogICAgewogICAgICAgIHJldHVybiBodG1sX2VudGl0eV9kZWNvZGUoJyYjJyAuICgoaW50KSRjb2RlKSAuICc7JywgRU5UX05PUVVPVEVTLCAnVVRGLTgnKTsKICAgIH0KCiAgICAvKioKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGxvYWRUcmFuc2xhdGVUYWJsZSgpCiAgICB7CiAgICAgICAgaWYgKCFpc19udWxsKCR0aGlzLT50YWJsZSkpIHsKICAgICAgICAgICAgcmV0dXJuICR0aGlzLT50YWJsZTsKICAgICAgICB9CgogICAgICAgICR0aGlzLT50YWJsZSAgICAgID0gYXJyYXkoKTsKICAgICAgICAkdGhpcy0+dGFibGVTaXplcyA9IGFycmF5KAogICAgICAgICAgICAnZnJvbScgPT4gMSwKICAgICAgICAgICAgJ3RvJyAgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgaWYgKCR0aGlzLT5oYXMoJ1RvVW5pY29kZScpKSB7CiAgICAgICAgICAgICRjb250ZW50ID0gJHRoaXMtPmdldCgnVG9Vbmljb2RlJyktPmdldENvbnRlbnQoKTsKICAgICAgICAgICAgJG1hdGNoZXMgPSBhcnJheSgpOwoKICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgbXVsdGlwbGUgc3BhY2VyYW5nZSBzZWN0aW9ucwogICAgICAgICAgICBpZiAocHJlZ19tYXRjaF9hbGwoJy9iZWdpbmNvZGVzcGFjZXJhbmdlKD9QPHNlY3Rpb25zPi4qPyllbmRjb2Rlc3BhY2VyYW5nZS9zJywgJGNvbnRlbnQsICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXNbJ3NlY3Rpb25zJ10gYXMgJHNlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAkcmVnZXhwID0gJy88KD9QPGZyb20+WzAtOUEtRl0rKT4gKjwoP1A8dG8+WzAtOUEtRl0rKT5bIFxyXG5dKy9pcyc7CgogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCRyZWdleHAsICRzZWN0aW9uLCAkbWF0Y2hlcyk7CgogICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZVNpemVzID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgICdmcm9tJyA9PiBtYXgoMSwgc3RybGVuKGN1cnJlbnQoJG1hdGNoZXNbJ2Zyb20nXSkpIC8gMiksCiAgICAgICAgICAgICAgICAgICAgICAgICd0bycgICA9PiBtYXgoMSwgc3RybGVuKGN1cnJlbnQoJG1hdGNoZXNbJ3RvJ10pKSAvIDIpLAogICAgICAgICAgICAgICAgICAgICk7CgogICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyBTdXBwb3J0IGZvciBtdWx0aXBsZSBiZmNoYXIgc2VjdGlvbnMKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2hfYWxsKCcvYmVnaW5iZmNoYXIoP1A8c2VjdGlvbnM+Lio/KWVuZGJmY2hhci9zJywgJGNvbnRlbnQsICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXNbJ3NlY3Rpb25zJ10gYXMgJHNlY3Rpb24pIHsKICAgICAgICAgICAgICAgICAgICAkcmVnZXhwID0gJy88KD9QPGZyb20+WzAtOUEtRl0rKT4gKzwoP1A8dG8+WzAtOUEtRl0rKT5bIFxyXG5dKy9pcyc7CgogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCRyZWdleHAsICRzZWN0aW9uLCAkbWF0Y2hlcyk7CgogICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZVNpemVzWydmcm9tJ10gPSBtYXgoMSwgc3RybGVuKGN1cnJlbnQoJG1hdGNoZXNbJ2Zyb20nXSkpIC8gMik7CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzWydmcm9tJ10gYXMgJGtleSA9PiAkZnJvbSkgewogICAgICAgICAgICAgICAgICAgICAgICAkcGFydHMgPSBwcmVnX3NwbGl0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8oWzAtOUEtRl17NH0pL2knLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoZXNbJ3RvJ11bJGtleV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJFR19TUExJVF9OT19FTVBUWSB8IFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRQogICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAgPSAnJzsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSBzZWxmOjp1Y2hyKGhleGRlYygkcGFydCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZVtoZXhkZWMoJGZyb20pXSA9ICR0ZXh0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgbXVsdGlwbGUgYmZyYW5nZSBzZWN0aW9ucwogICAgICAgICAgICBpZiAocHJlZ19tYXRjaF9hbGwoJy9iZWdpbmJmcmFuZ2UoP1A8c2VjdGlvbnM+Lio/KWVuZGJmcmFuZ2UvcycsICRjb250ZW50LCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzWydzZWN0aW9ucyddIGFzICRzZWN0aW9uKSB7CiAgICAgICAgICAgICAgICAgICAgLy8gU3VwcG9ydCBmb3IgOiA8c3JjQ29kZTE+IDxzcmNDb2RlMj4gPGRzdFN0cmluZz4KICAgICAgICAgICAgICAgICAgICAkcmVnZXhwID0gJy88KD9QPGZyb20+WzAtOUEtRl0rKT4gKjwoP1A8dG8+WzAtOUEtRl0rKT4gKjwoP1A8b2Zmc2V0PlswLTlBLUZdKyk+WyBcclxuXSsvaXMnOwoKICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgkcmVnZXhwLCAkc2VjdGlvbiwgJG1hdGNoZXMpOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkbWF0Y2hlc1snZnJvbSddIGFzICRrZXkgPT4gJGZyb20pIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXJfZnJvbSA9IGhleGRlYygkZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyX3RvICAgPSBoZXhkZWMoJG1hdGNoZXNbJ3RvJ11bJGtleV0pOwogICAgICAgICAgICAgICAgICAgICAgICAkb2Zmc2V0ICAgID0gaGV4ZGVjKCRtYXRjaGVzWydvZmZzZXQnXVska2V5XSk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3IgKCRjaGFyID0gJGNoYXJfZnJvbTsgJGNoYXIgPD0gJGNoYXJfdG87ICRjaGFyKyspIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT50YWJsZVskY2hhcl0gPSBzZWxmOjp1Y2hyKCRjaGFyIC0gJGNoYXJfZnJvbSArICRvZmZzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAvLyBTdXBwb3J0IGZvciA6IDxzcmNDb2RlMT4gPHNyY0NvZGVOPiBbPGRzdFN0cmluZzE+IDxkc3RTdHJpbmcyPiAuLi4gPGRzdFN0cmluZ04+XQogICAgICAgICAgICAgICAgICAgICRyZWdleHAgPSAnLzwoP1A8ZnJvbT5bMC05QS1GXSspPiAqPCg/UDx0bz5bMC05QS1GXSspPiAqXFsoP1A8c3RyaW5ncz5bPD4wLTlBLUYgXSspXF1bIFxyXG5dKy9pcyc7CgogICAgICAgICAgICAgICAgICAgIHByZWdfbWF0Y2hfYWxsKCRyZWdleHAsICRzZWN0aW9uLCAkbWF0Y2hlcyk7CgogICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzWydmcm9tJ10gYXMgJGtleSA9PiAkZnJvbSkgewogICAgICAgICAgICAgICAgICAgICAgICAkY2hhcl9mcm9tID0gaGV4ZGVjKCRmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0cmluZ3MgICA9IGFycmF5KCk7CgogICAgICAgICAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnLzwoP1A8c3RyaW5nPlswLTlBLUZdKyk+ICovaXMnLCAkbWF0Y2hlc1snc3RyaW5ncyddWyRrZXldLCAkc3RyaW5ncyk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkc3RyaW5nc1snc3RyaW5nJ10gYXMgJHBvc2l0aW9uID0+ICRzdHJpbmcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRwYXJ0cyA9IHByZWdfc3BsaXQoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8oWzAtOUEtRl17NH0pL2knLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUkVHX1NQTElUX05PX0VNUFRZIHwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSBzZWxmOjp1Y2hyKGhleGRlYygkcGFydCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnRhYmxlWyRjaGFyX2Zyb20gKyAkcG9zaXRpb25dID0gJHRleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+dGFibGU7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRoZXhhCiAgICAgKiBAcGFyYW0gYm9vbCAgICRhZGRfYnJhY2VzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSwgJGFkZF9icmFjZXMgPSBmYWxzZSkKICAgIHsKICAgICAgICAkdGV4dCAgPSAnJzsKICAgICAgICAkcGFydHMgPSBwcmVnX3NwbGl0KCcvKDxbYS16MC05XSs+KS9zaScsICRoZXhhLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSB8IFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7CgogICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL148Lio+JC8nLCAkcGFydCkgJiYgc3RycG9zKCRwYXJ0LCAnPD94bWwnKSA9PT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRwYXJ0ID0gdHJpbSgkcGFydCwgJzw+Jyk7CiAgICAgICAgICAgICAgICBpZiAoJGFkZF9icmFjZXMpIHsKICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSAnKCc7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHBhcnQgPSBwYWNrKCdIKicsICRwYXJ0KTsKICAgICAgICAgICAgICAgICR0ZXh0IC49ICgkYWRkX2JyYWNlcyA/IHByZWdfcmVwbGFjZSgnL1xcXC9zJywgJ1xcXFxcXCcsICRwYXJ0KSA6ICRwYXJ0KTsKCiAgICAgICAgICAgICAgICBpZiAoJGFkZF9icmFjZXMpIHsKICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSAnKSc7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkdGV4dCAuPSAkcGFydDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0ZXh0OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkdGV4dAogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlT2N0YWwoJHRleHQpCiAgICB7CiAgICAgICAgJHBhcnRzID0gcHJlZ19zcGxpdCgnLyhcXFxcXGR7M30pL3MnLCAkdGV4dCwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkgfCBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUpOwogICAgICAgICR0ZXh0ICA9ICcnOwoKICAgICAgICBmb3JlYWNoICgkcGFydHMgYXMgJHBhcnQpIHsKICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goJy9eXFxcXFxkezN9JC8nLCAkcGFydCkpIHsKICAgICAgICAgICAgICAgICR0ZXh0IC49IGNocihvY3RkZWModHJpbSgkcGFydCwgJ1xcJykpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZXh0IC49ICRwYXJ0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJHRleHQKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICovCiAgICBwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZUVudGl0aWVzKCR0ZXh0KQogICAgewogICAgICAgICRwYXJ0cyA9IHByZWdfc3BsaXQoJy8oI1xkezJ9KS9zJywgJHRleHQsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZIHwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKICAgICAgICAkdGV4dCAgPSAnJzsKCiAgICAgICAgZm9yZWFjaCAoJHBhcnRzIGFzICRwYXJ0KSB7CiAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXiNcZHsyfSQvJywgJHBhcnQpKSB7CiAgICAgICAgICAgICAgICAkdGV4dCAuPSBjaHIoaGV4ZGVjKHRyaW0oJHBhcnQsICcjJykpKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZXh0IC49ICRwYXJ0OwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVVbmljb2RlKCR0ZXh0KQogICAgewogICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlx4RkVceEZGL2knLCAkdGV4dCkpIHsKICAgICAgICAgICAgLy8gU3RyaXAgVStGRUZGIGJ5dGUgb3JkZXIgbWFya2VyLgogICAgICAgICAgICAkZGVjb2RlID0gc3Vic3RyKCR0ZXh0LCAyKTsKICAgICAgICAgICAgJHRleHQgICA9ICcnOwogICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCRkZWNvZGUpOwoKICAgICAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgJGkgKz0gMikgewogICAgICAgICAgICAgICAgJHRleHQgLj0gc2VsZjo6dWNocihoZXhkZWMoYmluMmhleChzdWJzdHIoJGRlY29kZSwgJGksIDIpKSkpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRleHQ7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcmV0dXJuIGludAogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Rm9udFNwYWNlTGltaXQoKQogICAgewogICAgICAgIHJldHVybiAtNTA7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgJGNvbW1hbmRzCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGRlY29kZVRleHQoJGNvbW1hbmRzKQogICAgewogICAgICAgICR3b3JkX3Bvc2l0aW9uID0gMDsKICAgICAgICAkd29yZHMgICAgICAgICA9IGFycmF5KCk7CiAgICAgICAgJHVuaWNvZGUgICAgICAgPSBmYWxzZTsKICAgICAgICAkZm9udF9zcGFjZSAgICA9ICR0aGlzLT5nZXRGb250U3BhY2VMaW1pdCgpOwoKICAgICAgICBmb3JlYWNoICgkY29tbWFuZHMgYXMgJGNvbW1hbmQpIHsKICAgICAgICAgICAgc3dpdGNoICgkY29tbWFuZFtPYmplY3Q6OlRZUEVdKSB7CiAgICAgICAgICAgICAgICBjYXNlICduJzoKICAgICAgICAgICAgICAgICAgICBpZiAoZmxvYXR2YWwodHJpbSgkY29tbWFuZFtPYmplY3Q6OkNPTU1BTkRdKSkgPCAkZm9udF9zcGFjZSkgewogICAgICAgICAgICAgICAgICAgICAgICAkd29yZF9wb3NpdGlvbiA9IGNvdW50KCR3b3Jkcyk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlKDIpOwoKICAgICAgICAgICAgICAgIGNhc2UgJzwnOgogICAgICAgICAgICAgICAgICAgIC8vIERlY29kZSBoZXhhZGVjaW1hbC4KICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IHNlbGY6OmRlY29kZUhleGFkZWNpbWFsKCc8JyAuICRjb21tYW5kW09iamVjdDo6Q09NTUFORF0gLiAnPicpOwogICAgICAgICAgICAgICAgICAgICR1bmljb2RlID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgIC8vIERlY29kZSBvY3RhbCAoaWYgbmVjZXNzYXJ5KS4KICAgICAgICAgICAgICAgICAgICAkdGV4dCA9IHNlbGY6OmRlY29kZU9jdGFsKCRjb21tYW5kW09iamVjdDo6Q09NTUFORF0pOwogICAgICAgICAgICB9CgogICAgICAgICAgICAvLyByZXBsYWNlIGVzY2FwZWQgY2hhcnMKICAgICAgICAgICAgJHRleHQgPSBzdHJfcmVwbGFjZSgKICAgICAgICAgICAgICAgIGFycmF5KCdcXFxcJywgJ1woJywgJ1wpJywgJ1xuJywgJ1xyJywgJ1x0JywgJ1wgJyksCiAgICAgICAgICAgICAgICBhcnJheSgnXFwnLCAnKCcsICcpJywgIlxuIiwgIlxyIiwgIlx0IiwgJyAnKSwKICAgICAgICAgICAgICAgICR0ZXh0CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAvLyBhZGQgY29udGVudCB0byByZXN1bHQgc3RyaW5nCiAgICAgICAgICAgIGlmIChpc3NldCgkd29yZHNbJHdvcmRfcG9zaXRpb25dKSkgewogICAgICAgICAgICAgICAgJHdvcmRzWyR3b3JkX3Bvc2l0aW9uXSAuPSAkdGV4dDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR3b3Jkc1skd29yZF9wb3NpdGlvbl0gPSAkdGV4dDsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgZm9yZWFjaCAoJHdvcmRzIGFzICYkd29yZCkgewogICAgICAgICAgICAkbG9vcF91bmljb2RlID0gJHVuaWNvZGU7CiAgICAgICAgICAgICR3b3JkICAgICAgICAgPSAkdGhpcy0+ZGVjb2RlQ29udGVudCgkd29yZCwgJGxvb3BfdW5pY29kZSk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gaW1wbG9kZSgnICcsICR3b3Jkcyk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0CiAgICAgKiBAcGFyYW0gYm9vbCAgICR1bmljb2RlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIGRlY29kZUNvbnRlbnQoJHRleHQsICYkdW5pY29kZSkKICAgIHsKICAgICAgICBpZiAoJHRoaXMtPmhhcygnVG9Vbmljb2RlJykpIHsKCiAgICAgICAgICAgICRieXRlcyA9ICR0aGlzLT50YWJsZVNpemVzWydmcm9tJ107CgogICAgICAgICAgICBpZiAoJGJ5dGVzKSB7CiAgICAgICAgICAgICAgICAkcmVzdWx0ID0gJyc7CiAgICAgICAgICAgICAgICAkbGVuZ3RoID0gc3RybGVuKCR0ZXh0KTsKCiAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSArPSAkYnl0ZXMpIHsKICAgICAgICAgICAgICAgICAgICAkY2hhciA9IHN1YnN0cigkdGV4dCwgJGksICRieXRlcyk7CgogICAgICAgICAgICAgICAgICAgIGlmICgoJGRlY29kZWQgPSAkdGhpcy0+dHJhbnNsYXRlQ2hhcigkY2hhciwgZmFsc2UpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSAkZGVjb2RlZDsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoJHRoaXMtPmhhcygnRGVzY2VuZGFudEZvbnRzJykpIHsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdGhpcy0+Z2V0KCdEZXNjZW5kYW50Rm9udHMnKSBpbnN0YW5jZW9mIE9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZvbnRzICAgPSAkdGhpcy0+Z2V0KCdEZXNjZW5kYW50Rm9udHMnKS0+Z2V0SGVhZGVyKCktPmdldEVsZW1lbnRzKCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZm9udHMgICA9ICR0aGlzLT5nZXQoJ0Rlc2NlbmRhbnRGb250cycpLT5nZXRDb250ZW50KCk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgJGRlY29kZWQgPSBmYWxzZTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRmb250cyBhcyAkZm9udCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRmb250IGluc3RhbmNlb2YgRm9udCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGRlY29kZWQgPSAkZm9udC0+dHJhbnNsYXRlQ2hhcigkY2hhciwgZmFsc2UpKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGRlY29kZWQgPSBAaWNvbnYoJ1dpbmRvd3MtMTI1MicsICdVVEYtOC8vVFJBTlNMSVQvL0lHTk9SRScsICRkZWNvZGVkKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGRlY29kZWQgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY2hhciA9ICRkZWNvZGVkOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoYXIgPSBAaWNvbnYoJ1dpbmRvd3MtMTI1MicsICdVVEYtOC8vVFJBTlNMSVQvL0lHTk9SRScsICRjaGFyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRjaGFyID0gc2VsZjo6TUlTU0lORzsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gJGNoYXI7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgJHRleHQgPSAkcmVzdWx0OwoKICAgICAgICAgICAgICAgIC8vIEJ5IGRlZmluaXRpb24sIHRoaXMgY29kZSBnZW5lcmF0ZXMgdW5pY29kZSBjaGFycy4KICAgICAgICAgICAgICAgICR1bmljb2RlID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgIH0gZWxzZWlmICgkdGhpcy0+aGFzKCdFbmNvZGluZycpKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIEVuY29kaW5nICRlbmNvZGluZyAqLwogICAgICAgICAgICAkZW5jb2RpbmcgPSAkdGhpcy0+Z2V0KCdFbmNvZGluZycpOwoKICAgICAgICAgICAgaWYgKCRlbmNvZGluZyBpbnN0YW5jZW9mIEVuY29kaW5nKSB7CiAgICAgICAgICAgICAgICBpZiAoJHVuaWNvZGUpIHsKICAgICAgICAgICAgICAgICAgICAkY2hhcnMgID0gcHJlZ19zcGxpdCgKICAgICAgICAgICAgICAgICAgICAgICAgJy8vcycgLiAoJHVuaWNvZGUgPyAndScgOiAnJyksCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAtMSwKICAgICAgICAgICAgICAgICAgICAgICAgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFIHwgUFJFR19TUExJVF9OT19FTVBUWQogICAgICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkY2hhcnMgYXMgJGNoYXIpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRlY19hdiA9IGhleGRlYyhiaW4yaGV4KCRjaGFyKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRkZWNfYXAgPSAkZW5jb2RpbmctPnRyYW5zbGF0ZUNoYXIoJGRlY19hdik7CiAgICAgICAgICAgICAgICAgICAgICAgICRyZXN1bHQgLj0gc2VsZjo6dWNocigkZGVjX2FwKTsKICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICR0ZXh0ID0gJHJlc3VsdDsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCA9ICcnOwogICAgICAgICAgICAgICAgICAgICRsZW5ndGggPSBzdHJsZW4oJHRleHQpOwoKICAgICAgICAgICAgICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAkbGVuZ3RoOyAkaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRkZWNfYXYgPSBoZXhkZWMoYmluMmhleCgkdGV4dFskaV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGRlY19hcCA9ICRlbmNvZGluZy0+dHJhbnNsYXRlQ2hhcigkZGVjX2F2KTsKICAgICAgICAgICAgICAgICAgICAgICAgJHJlc3VsdCAuPSBjaHIoJGRlY19hcCk7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkdGV4dCA9ICRyZXN1bHQ7CgogICAgICAgICAgICAgICAgICAgIGlmICgkZW5jb2RpbmctPmdldCgnQmFzZUVuY29kaW5nJyktPmVxdWFscygnTWFjUm9tYW5FbmNvZGluZycpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0ID0gQGljb252KCdNYWMnLCAnVVRGLTgvL1RSQU5TTElULy9JR05PUkUnLCAkdGV4dCk7CgogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRleHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICAvLyBDb252ZXJ0IHRvIHVuaWNvZGUgaWYgbm90IGFscmVhZHkgZG9uZS4KICAgICAgICBpZiAoISR1bmljb2RlKSB7CgogICAgICAgICAgICBpZiAoJHRoaXMtPmdldCgnRW5jb2RpbmcnKSBpbnN0YW5jZW9mIEVsZW1lbnQgJiYKICAgICAgICAgICAgICAgICR0aGlzLT5nZXQoJ0VuY29kaW5nJyktPmVxdWFscygnTWFjUm9tYW5FbmNvZGluZycpCiAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgJHRleHQgPSBAaWNvbnYoJ01hYycsICdVVEYtOC8vVFJBTlNMSVQvL0lHTk9SRScsICR0ZXh0KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0ZXh0ID0gQGljb252KCdXaW5kb3dzLTEyNTInLCAnVVRGLTgvL1RSQU5TTElULy9JR05PUkUnLCAkdGV4dCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGV4dDsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType0.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxGb250OwoKLyoqCiAqIENsYXNzIEZvbnRDSURGb250VHlwZTAKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxGb250CiAqLwpjbGFzcyBGb250Q0lERm9udFR5cGUwIGV4dGVuZHMgRm9udAp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontCIDFontType2.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxGb250OwoKLyoqCiAqIENsYXNzIEZvbnRDSURGb250VHlwZTIKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxGb250CiAqLwpjbGFzcyBGb250Q0lERm9udFR5cGUyIGV4dGVuZHMgRm9udAp7Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontTrueType.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxGb250OwoKLyoqCiAqIENsYXNzIEZvbnRUcnVlVHlwZQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQKICovCmNsYXNzIEZvbnRUcnVlVHlwZSBleHRlbmRzIEZvbnQKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType0.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxGb250OwoKLyoqCiAqIENsYXNzIEZvbnRUeXBlMAogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQKICovCmNsYXNzIEZvbnRUeXBlMCBleHRlbmRzIEZvbnQKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Font/FontType1.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQ7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxGb250OwoKLyoqCiAqIENsYXNzIEZvbnRUeXBlMQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXEZvbnQKICovCmNsYXNzIEZvbnRUeXBlMSBleHRlbmRzIEZvbnQKewp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Header.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE1pc3Npbmc7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cnVjdDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjsKCi8qKgogKiBDbGFzcyBIZWFkZXIKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlcgogKi8KY2xhc3MgSGVhZGVyCnsKICAgIC8qKgogICAgICogQHZhciBEb2N1bWVudAogICAgICovCiAgICBwcm90ZWN0ZWQgJGRvY3VtZW50ID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgRWxlbWVudFtdCiAgICAgKi8KICAgIHByb3RlY3RlZCAkZWxlbWVudHMgPSBudWxsOwoKICAgIC8qKgogICAgICogQHBhcmFtIEVsZW1lbnRbXSAkZWxlbWVudHMgICBMaXN0IG9mIGVsZW1lbnRzLgogICAgICogQHBhcmFtIERvY3VtZW50ICAkZG9jdW1lbnQgICBEb2N1bWVudC4KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRlbGVtZW50cyA9IGFycmF5KCksIERvY3VtZW50ICRkb2N1bWVudCA9IG51bGwpCiAgICB7CiAgICAgICAgJHRoaXMtPmVsZW1lbnRzID0gJGVsZW1lbnRzOwogICAgICAgICR0aGlzLT5kb2N1bWVudCA9ICRkb2N1bWVudDsKICAgIH0KCiAgICAvKioKICAgICAqIFJldHVybnMgYWxsIGVsZW1lbnRzLgogICAgICoKICAgICAqIEByZXR1cm4gbWl4ZWQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVsZW1lbnRzKCkKICAgIHsKICAgICAgICBmb3JlYWNoICgkdGhpcy0+ZWxlbWVudHMgYXMgJG5hbWUgPT4gJGVsZW1lbnQpIHsKICAgICAgICAgICAgJHRoaXMtPnJlc29sdmVYUmVmKCRuYW1lKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdGhpcy0+ZWxlbWVudHM7CiAgICB9CgogICAgLyoqCiAgICAgKiBVc2VkIG9ubHkgZm9yIGRlYnVnLgogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEVsZW1lbnRUeXBlcygpCiAgICB7CiAgICAgICAgJHR5cGVzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJHRoaXMtPmVsZW1lbnRzIGFzICRrZXkgPT4gJGVsZW1lbnQpIHsKICAgICAgICAgICAgJHR5cGVzWyRrZXldID0gZ2V0X2NsYXNzKCRlbGVtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkdHlwZXM7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYm9vbCAkZGVlcAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldERldGFpbHMoJGRlZXAgPSB0cnVlKQogICAgewogICAgICAgICR2YWx1ZXMgICA9IGFycmF5KCk7CiAgICAgICAgJGVsZW1lbnRzID0gJHRoaXMtPmdldEVsZW1lbnRzKCk7CgogICAgICAgIGZvcmVhY2ggKCRlbGVtZW50cyBhcyAka2V5ID0+ICRlbGVtZW50KSB7CiAgICAgICAgICAgIGlmICgkZWxlbWVudCBpbnN0YW5jZW9mIEhlYWRlciAmJiAkZGVlcCkgewogICAgICAgICAgICAgICAgJHZhbHVlc1ska2V5XSA9ICRlbGVtZW50LT5nZXREZXRhaWxzKCRkZWVwKTsKICAgICAgICAgICAgfSBlbHNlaWYgKCRlbGVtZW50IGluc3RhbmNlb2YgT2JqZWN0ICYmICRkZWVwKSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRrZXldID0gJGVsZW1lbnQtPmdldERldGFpbHMoZmFsc2UpOwogICAgICAgICAgICB9IGVsc2VpZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50QXJyYXkpIHsKICAgICAgICAgICAgICAgIGlmICgkZGVlcCkgewogICAgICAgICAgICAgICAgICAgICR2YWx1ZXNbJGtleV0gPSAkZWxlbWVudC0+Z2V0RGV0YWlscygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2VpZiAoJGVsZW1lbnQgaW5zdGFuY2VvZiBFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAkdmFsdWVzWyRrZXldID0gKHN0cmluZykgJGVsZW1lbnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIHJldHVybiAkdmFsdWVzOwogICAgfQoKICAgIC8qKgogICAgICogSW5kaWNhdGUgaWYgYW4gZWxlbWVudCBuYW1lIGlzIGF2YWlsYWJsZSBpbiBoZWFkZXIuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZSBUaGUgbmFtZSBvZiB0aGUgZWxlbWVudAogICAgICoKICAgICAqIEByZXR1cm4gYm9vbAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaGFzKCRuYW1lKQogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+ZWxlbWVudHMpKSB7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICRuYW1lCiAgICAgKgogICAgICogQHJldHVybiBFbGVtZW50fE9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0KCRuYW1lKQogICAgewogICAgICAgIGlmIChhcnJheV9rZXlfZXhpc3RzKCRuYW1lLCAkdGhpcy0+ZWxlbWVudHMpKSB7CiAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cmVzb2x2ZVhSZWYoJG5hbWUpOwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50TWlzc2luZyhudWxsLCBudWxsKTsKICAgIH0KCiAgICAvKioKICAgICAqIFJlc29sdmUgWFJlZiB0byBvYmplY3QuCiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkbmFtZQogICAgICoKICAgICAqIEByZXR1cm4gRWxlbWVudHxPYmplY3QKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcmVzb2x2ZVhSZWYoJG5hbWUpCiAgICB7CiAgICAgICAgaWYgKCgkb2JqID0gJHRoaXMtPmVsZW1lbnRzWyRuYW1lXSkgaW5zdGFuY2VvZiBFbGVtZW50WFJlZiAmJiAhaXNfbnVsbCgkdGhpcy0+ZG9jdW1lbnQpKSB7CiAgICAgICAgICAgIC8qKiBAdmFyIEVsZW1lbnRYUmVmICRvYmogKi8KICAgICAgICAgICAgJG9iamVjdCA9ICR0aGlzLT5kb2N1bWVudC0+Z2V0T2JqZWN0QnlJZCgkb2JqLT5nZXRJZCgpKTsKCiAgICAgICAgICAgIGlmIChpc19udWxsKCRvYmplY3QpKSB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgXEV4Y2VwdGlvbignTWlzc2luZyBvYmplY3QgcmVmZXJlbmNlICMnIC4gJG9iai0+Z2V0SWQoKSAuICcuJyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIC8vIFVwZGF0ZSBlbGVtZW50cyBsaXN0IGZvciBmdXR1cmUgY2FsbHMuCiAgICAgICAgICAgICR0aGlzLT5lbGVtZW50c1skbmFtZV0gPSAkb2JqZWN0OwogICAgICAgIH0KCiAgICAgICAgcmV0dXJuICR0aGlzLT5lbGVtZW50c1skbmFtZV07CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICAgJGNvbnRlbnQgIFRoZSBjb250ZW50IHRvIHBhcnNlCiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50IFRoZSBkb2N1bWVudAogICAgICogQHBhcmFtIGludCAgICAgICRwb3NpdGlvbiBUaGUgbmV3IHBvc2l0aW9uIG9mIHRoZSBjdXJzb3IgYWZ0ZXIgcGFyc2luZwogICAgICoKICAgICAqIEByZXR1cm4gSGVhZGVyCiAgICAgKi8KICAgIHB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcGFyc2UoJGNvbnRlbnQsIERvY3VtZW50ICRkb2N1bWVudCwgJiRwb3NpdGlvbiA9IDApCiAgICB7CiAgICAgICAgLyoqIEB2YXIgSGVhZGVyICRoZWFkZXIgKi8KICAgICAgICBpZiAoc3Vic3RyKHRyaW0oJGNvbnRlbnQpLCAwLCAyKSA9PSAnPDwnKSB7CiAgICAgICAgICAgICRoZWFkZXIgPSBFbGVtZW50U3RydWN0OjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50LCAkcG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRlbGVtZW50cyA9IEVsZW1lbnRBcnJheTo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCwgJHBvc2l0aW9uKTsKICAgICAgICAgICAgaWYgKCRlbGVtZW50cykgewogICAgICAgICAgICAgICAgJGhlYWRlciA9IG5ldyBzZWxmKCRlbGVtZW50cy0+Z2V0UmF3Q29udGVudCgpLCBudWxsKTsvLyRkb2N1bWVudCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkaGVhZGVyID0gbmV3IHNlbGYoYXJyYXkoKSwgJGRvY3VtZW50KTsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgaWYgKCRoZWFkZXIpIHsKICAgICAgICAgICAgcmV0dXJuICRoZWFkZXI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgLy8gQnVpbGQgYW4gZW1wdHkgaGVhZGVyLgogICAgICAgICAgICByZXR1cm4gbmV3IHNlbGYoYXJyYXkoKSwgJGRvY3VtZW50KTsKICAgICAgICB9CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Object.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcWE9iamVjdFxGb3JtOwp1c2UgU21hbG90XFBkZlBhcnNlclxYT2JqZWN0XEltYWdlOwoKLyoqCiAqIENsYXNzIE9iamVjdAogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyCiAqLwpjbGFzcyBPYmplY3QKewogICAgY29uc3QgVFlQRSA9ICd0JzsKCiAgICBjb25zdCBPUEVSQVRPUiA9ICdvJzsKCiAgICBjb25zdCBDT01NQU5EID0gJ2MnOwoKICAgIC8qKgogICAgICogQHZhciBEb2N1bWVudAogICAgICovCiAgICBwcm90ZWN0ZWQgJGRvY3VtZW50ID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgSGVhZGVyCiAgICAgKi8KICAgIHByb3RlY3RlZCAkaGVhZGVyID0gbnVsbDsKCiAgICAvKioKICAgICAqIEB2YXIgc3RyaW5nCiAgICAgKi8KICAgIHByb3RlY3RlZCAkY29udGVudCA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50CiAgICAgKiBAcGFyYW0gSGVhZGVyICAgJGhlYWRlcgogICAgICogQHBhcmFtIHN0cmluZyAgICRjb250ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdChEb2N1bWVudCAkZG9jdW1lbnQsIEhlYWRlciAkaGVhZGVyID0gbnVsbCwgJGNvbnRlbnQgPSBudWxsKQogICAgewogICAgICAgICR0aGlzLT5kb2N1bWVudCA9ICRkb2N1bWVudDsKICAgICAgICAkdGhpcy0+aGVhZGVyICAgPSAhaXNfbnVsbCgkaGVhZGVyKSA/ICRoZWFkZXIgOiBuZXcgSGVhZGVyKCk7CiAgICAgICAgJHRoaXMtPmNvbnRlbnQgID0gJGNvbnRlbnQ7CiAgICB9CgogICAgLyoqCiAgICAgKgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gaW5pdCgpCiAgICB7CgogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsfEhlYWRlcgogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0SGVhZGVyKCkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlcjsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIEVsZW1lbnR8T2JqZWN0CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXQoJG5hbWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXItPmdldCgkbmFtZSk7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gJG5hbWUKICAgICAqCiAgICAgKiBAcmV0dXJuIGJvb2wKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGhhcygkbmFtZSkKICAgIHsKICAgICAgICByZXR1cm4gJHRoaXMtPmhlYWRlci0+aGFzKCRuYW1lKTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBib29sICRkZWVwCiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0RGV0YWlscygkZGVlcCA9IHRydWUpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5oZWFkZXItPmdldERldGFpbHMoJGRlZXApOwogICAgfQoKICAgIC8qKgogICAgICogQHJldHVybiBudWxsfHN0cmluZwogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgcmV0dXJuICR0aGlzLT5jb250ZW50OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRjb250ZW50CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBjbGVhbkNvbnRlbnQoJGNvbnRlbnQsICRjaGFyID0gJ1gnKQogICAgewogICAgICAgICRjaGFyICAgID0gJGNoYXJbMF07CiAgICAgICAgJGNvbnRlbnQgPSBzdHJfcmVwbGFjZShhcnJheSgnXFxcXCcsICdcXCknLCAnXFwoJyksICRjaGFyIC4gJGNoYXIsICRjb250ZW50KTsKCiAgICAgICAgLy8gdGhpcyBmdW5jdGlvbiBpcyBtb3JlIG1lbW9yeSBlZmZpY2llbnQsIGFuZCBzaWduaWZpY2FudGx5IGZhc3RlciB0aGFuCiAgICAgICAgJF9jbGVhbiA9IGZ1bmN0aW9uKCRwYXJ0KSB1c2UoJGNoYXIpIHsKICAgICAgICAgICAgcmV0dXJuIHN0cl9yZXBsYWNlKCRwYXJ0WzFdLHN0cl9yZXBlYXQoJGNoYXIsc3RybGVuKCRwYXJ0WzFdKSksICRwYXJ0WzBdKTsKICAgICAgICB9OwoKICAgICAgICAvLyBSZW1vdmUgaW1hZ2UgYmxvYyB3aXRoIGJpbmFyeSBjb250ZW50CiAgICAgICAgJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy9ccyhCSVxzLio/KFxzSURccykuKj8oXHNFSSkpXHMvcycsJF9jbGVhbiwkY29udGVudCk7CgogICAgICAgIC8vIENsZWFuIGNvbnRlbnQgaW4gc3F1YXJlIGJyYWNrZXRzIFsuLi4uLl0KICAgICAgICAkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1xbKChcKC4qP1wpfFswLTlcLlwtXHNdKikqKVxdL3MnLCRfY2xlYW4sJGNvbnRlbnQpOwoKICAgICAgICAvLyBDbGVhbiBjb250ZW50IGluIHJvdW5kIGJyYWNrZXRzICguLi4uLikKICAgICAgICAkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1woKC4qPylcKS9zJywkX2NsZWFuLCRjb250ZW50KTsKCiAgICAgICAgLy8gQ2xlYW4gc3RydWN0dXJlCiAgICAgICAgaWYgKCRwYXJ0cyA9IHByZWdfc3BsaXQoJy8oPHw+KS9zJywgJGNvbnRlbnQsIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZIHwgUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKSkgewogICAgICAgICAgICAkY29udGVudCA9ICcnOwogICAgICAgICAgICAkbGV2ZWwgICA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKCRwYXJ0cyBhcyAkcGFydCkgewogICAgICAgICAgICAgICAgaWYgKCRwYXJ0ID09ICc8JykgewogICAgICAgICAgICAgICAgICAgICRsZXZlbCsrOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICRjb250ZW50IC49ICgkbGV2ZWwgPT0gMCA/ICRwYXJ0IDogc3RyX3JlcGVhdCgkY2hhciwgc3RybGVuKCRwYXJ0KSkpOwoKICAgICAgICAgICAgICAgIGlmICgkcGFydCA9PSAnPicpIHsKICAgICAgICAgICAgICAgICAgICAkbGV2ZWwtLTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gQ2xlYW4gQkRDIGFuZCBFTUMgbWFya3VwCiAgICAgICAgJGNvbnRlbnQgPSBwcmVnX3JlcGxhY2VfY2FsbGJhY2soJy8oXC9bQS1aYS16MC05XF9dKlxzKicgLiBwcmVnX3F1b3RlKCRjaGFyKSAuICcqQkRDKS9zJywkX2NsZWFuLCRjb250ZW50KTsKICAgICAgICAkY29udGVudCA9IHByZWdfcmVwbGFjZV9jYWxsYmFjaygnL1xzKEVNQylccy9zJywkX2NsZWFuLCRjb250ZW50KTsKCiAgICAgICAgcmV0dXJuICRjb250ZW50OwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRjb250ZW50CiAgICAgKgogICAgICogQHJldHVybiBhcnJheQogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0U2VjdGlvbnNUZXh0KCRjb250ZW50KQogICAgewogICAgICAgICRzZWN0aW9ucyAgICA9IGFycmF5KCk7CiAgICAgICAgJGNvbnRlbnQgICAgID0gJyAnIC4gJGNvbnRlbnQgLiAnICc7CiAgICAgICAgJHRleHRDbGVhbmVkID0gJHRoaXMtPmNsZWFuQ29udGVudCgkY29udGVudCwgJ18nKTsKCiAgICAgICAgLy8gRXh0cmFjdCB0ZXh0IGJsb2Nrcy4KICAgICAgICBpZiAocHJlZ19tYXRjaF9hbGwoJy9ccytCVFtcc3xcKHxcW10rKC4qPylccytFVC9zJywgJHRleHRDbGVhbmVkLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSkpIHsKICAgICAgICAgICAgZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJHBhcnQpIHsKICAgICAgICAgICAgICAgICR0ZXh0ICAgID0gJHBhcnRbMF07CiAgICAgICAgICAgICAgICAkb2Zmc2V0ICA9ICRwYXJ0WzFdOwogICAgICAgICAgICAgICAgJHNlY3Rpb24gPSBzdWJzdHIoJGNvbnRlbnQsICRvZmZzZXQsIHN0cmxlbigkdGV4dCkpOwoKICAgICAgICAgICAgICAgIC8vIFJlbW92ZXMgQkRDIGFuZCBFTUMgbWFya3VwLgogICAgICAgICAgICAgICAgJHNlY3Rpb24gPSBwcmVnX3JlcGxhY2UoJy8oXC9bQS1aYS16MC05XStccyo8PC4qPykoPj5ccypCREMpKC4qPykoRU1DXHMrKS9zJywgJyR7M30nLCAkc2VjdGlvbiAuICcgJyk7CgogICAgICAgICAgICAgICAgJHNlY3Rpb25zW10gPSAkc2VjdGlvbjsKICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLy8gRXh0cmFjdCAnZG8nIGNvbW1hbmRzLgogICAgICAgIGlmIChwcmVnX21hdGNoX2FsbCgnLyhcL1tBLVphLXowLTlcLlwtX10rXHMrRG8pXHMvcycsICR0ZXh0Q2xlYW5lZCwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICRwYXJ0KSB7CiAgICAgICAgICAgICAgICAkdGV4dCAgICA9ICRwYXJ0WzBdOwogICAgICAgICAgICAgICAgJG9mZnNldCAgPSAkcGFydFsxXTsKICAgICAgICAgICAgICAgICRzZWN0aW9uID0gc3Vic3RyKCRjb250ZW50LCAkb2Zmc2V0LCBzdHJsZW4oJHRleHQpKTsKCiAgICAgICAgICAgICAgICAkc2VjdGlvbnNbXSA9ICRzZWN0aW9uOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHNlY3Rpb25zOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIFBhZ2UKICAgICAqCiAgICAgKiBAcmV0dXJuIHN0cmluZwogICAgICogQHRocm93cyBcRXhjZXB0aW9uCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0KFBhZ2UgJHBhZ2UgPSBudWxsKQogICAgewogICAgICAgICR0ZXh0ICAgICAgICAgICAgICAgID0gJyc7CiAgICAgICAgJHNlY3Rpb25zICAgICAgICAgICAgPSAkdGhpcy0+Z2V0U2VjdGlvbnNUZXh0KCR0aGlzLT5jb250ZW50KTsKICAgICAgICAkY3VycmVudF9mb250ICAgICAgICA9IG5ldyBGb250KCR0aGlzLT5kb2N1bWVudCk7CiAgICAgICAgJGN1cnJlbnRfcG9zaXRpb25fdGQgPSBhcnJheSgneCcgPT4gZmFsc2UsICd5JyA9PiBmYWxzZSk7CiAgICAgICAgJGN1cnJlbnRfcG9zaXRpb25fdG0gPSBhcnJheSgneCcgPT4gZmFsc2UsICd5JyA9PiBmYWxzZSk7CgogICAgICAgIGZvcmVhY2ggKCRzZWN0aW9ucyBhcyAkc2VjdGlvbikgewoKICAgICAgICAgICAgJGNvbW1hbmRzID0gJHRoaXMtPmdldENvbW1hbmRzVGV4dCgkc2VjdGlvbik7CgogICAgICAgICAgICBmb3JlYWNoICgkY29tbWFuZHMgYXMgJGNvbW1hbmQpIHsKCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCRjb21tYW5kW3NlbGY6Ok9QRVJBVE9SXSkgewogICAgICAgICAgICAgICAgICAgIC8vIHNldCBjaGFyYWN0ZXIgc3BhY2luZwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RjJzoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgdGV4dCBjdXJyZW50IHBvaW50CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVGQnOgogICAgICAgICAgICAgICAgICAgICAgICAkYXJncyA9IHByZWdfc3BsaXQoJy9ccy9zJywgJGNvbW1hbmRbc2VsZjo6Q09NTUFORF0pOwogICAgICAgICAgICAgICAgICAgICAgICAkeSAgICA9IGFycmF5X3BvcCgkYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICR4ICAgID0gYXJyYXlfcG9wKCRhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbG9hdHZhbCgkeCkgPD0gMCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgkY3VycmVudF9wb3NpdGlvbl90ZFsneSddICE9PSBmYWxzZSAmJiBmbG9hdHZhbCgkeSkgPCBmbG9hdHZhbCgkY3VycmVudF9wb3NpdGlvbl90ZFsneSddKSkKICAgICAgICAgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJ0aWNhbCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0IC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmICgkY3VycmVudF9wb3NpdGlvbl90ZFsneCddICE9PSBmYWxzZSAmJiBmbG9hdHZhbCgkeCkgPiBmbG9hdHZhbCgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9wb3NpdGlvbl90ZFsneCddCiAgICAgICAgICAgICAgICAgICAgICAgICAgICApCiAgICAgICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaG9yaXpvbnRhbCBvZmZzZXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0IC49ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9wb3NpdGlvbl90ZCA9IGFycmF5KCd4JyA9PiAkeCwgJ3knID0+ICR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIC8vIG1vdmUgdGV4dCBjdXJyZW50IHBvaW50IGFuZCBzZXQgbGVhZGluZwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1REJzoKICAgICAgICAgICAgICAgICAgICAgICAgJGFyZ3MgPSBwcmVnX3NwbGl0KCcvXHMvcycsICRjb21tYW5kW3NlbGY6OkNPTU1BTkRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHkgICAgPSBhcnJheV9wb3AoJGFyZ3MpOwogICAgICAgICAgICAgICAgICAgICAgICAkeCAgICA9IGFycmF5X3BvcCgkYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmbG9hdHZhbCgkeSkgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSAiXG4iOwogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAoZmxvYXR2YWwoJHgpIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0IC49ICcgJzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVGYnOgogICAgICAgICAgICAgICAgICAgICAgICBsaXN0KCRpZCwpID0gcHJlZ19zcGxpdCgnL1xzL3MnLCAkY29tbWFuZFtzZWxmOjpDT01NQU5EXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRpZCAgICAgICAgICAgPSB0cmltKCRpZCwgJy8nKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGN1cnJlbnRfZm9udCA9ICRwYWdlLT5nZXRGb250KCRpZCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICInIjoKICAgICAgICAgICAgICAgICAgICBjYXNlICdUaic6CiAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kW3NlbGY6OkNPTU1BTkRdID0gYXJyYXkoJGNvbW1hbmQpOwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RKJzoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gU2tpcCBpZiBub3QgcHJldmlvdXNseSBkZWZpbmVkLCBzaG91bGQgbmV2ZXIgaGFwcGVuZWQuCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc19udWxsKCRjdXJyZW50X2ZvbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBGYWxsYmFjawogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVE9ETyA6IEltcHJvdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0IC49ICRjb21tYW5kW3NlbGY6OkNPTU1BTkRdWzBdW3NlbGY6OkNPTU1BTkRdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWJfdGV4dCA9ICRjdXJyZW50X2ZvbnQtPmRlY29kZVRleHQoJGNvbW1hbmRbc2VsZjo6Q09NTUFORF0pOwogICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSAkc3ViX3RleHQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAvLyBzZXQgbGVhZGluZwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1RMJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgLj0gJyAnOwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVG0nOgogICAgICAgICAgICAgICAgICAgICAgICAkYXJncyA9IHByZWdfc3BsaXQoJy9ccy9zJywgJGNvbW1hbmRbc2VsZjo6Q09NTUFORF0pOwogICAgICAgICAgICAgICAgICAgICAgICAkeSAgICA9IGFycmF5X3BvcCgkYXJncyk7CiAgICAgICAgICAgICAgICAgICAgICAgICR4ICAgID0gYXJyYXlfcG9wKCRhcmdzKTsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRjdXJyZW50X3Bvc2l0aW9uX3RtWyd5J10gIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZGVsdGEgPSBhYnMoZmxvYXR2YWwoJHkpIC0gZmxvYXR2YWwoJGN1cnJlbnRfcG9zaXRpb25fdG1bJ3knXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRkZWx0YSA+IDEwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgLj0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkY3VycmVudF9wb3NpdGlvbl90bSA9IGFycmF5KCd4JyA9PiAkeCwgJ3knID0+ICR5KTsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBzdXBlci9zdWJzY3JpcHRpbmcgdGV4dCByaXNlCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVHMnOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgLy8gc2V0IHdvcmQgc3BhY2luZwogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1R3JzoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIC8vIHNldCBob3Jpem9udGFsIHNjYWxpbmcKICAgICAgICAgICAgICAgICAgICBjYXNlICdUeic6CiAgICAgICAgICAgICAgICAgICAgICAgICR0ZXh0IC49ICJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICAvLyBtb3ZlIHRvIHN0YXJ0IG9mIG5leHQgbGluZQogICAgICAgICAgICAgICAgICAgIGNhc2UgJ1QqJzoKICAgICAgICAgICAgICAgICAgICAgICAgJHRleHQgLj0gIlxuIjsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RhJzoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0RvJzoKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc19udWxsKCRwYWdlKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGFyZ3MgPSBwcmVnX3NwbGl0KCcvXHMvcycsICRjb21tYW5kW3NlbGY6OkNPTU1BTkRdKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCAgID0gdHJpbShhcnJheV9wb3AoJGFyZ3MpLCAnLyAnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkeG9iamVjdCA9ICRwYWdlLT5nZXRYT2JqZWN0KCRpZCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkdGV4dCAuPSAkeG9iamVjdC0+Z2V0VGV4dCgkcGFnZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3JnJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICdSRyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdyZSc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdjbyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdjcyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdncyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdlbic6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdzYyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnU0MnOgogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZyc6CiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBjYXNlICdWJzoKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgICAgIGNhc2UgJ3ZvJzoKICAgICAgICAgICAgICAgICAgICBjYXNlICdWbyc6CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJHRleHQgLiAnICc7CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gc3RyaW5nICR0ZXh0X3BhcnQKICAgICAqIEBwYXJhbSBpbnQgICAgJG9mZnNldAogICAgICoKICAgICAqIEByZXR1cm4gYXJyYXkKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldENvbW1hbmRzVGV4dCgkdGV4dF9wYXJ0LCAmJG9mZnNldCA9IDApCiAgICB7CiAgICAgICAgJGNvbW1hbmRzID0gJG1hdGNoZXMgPSBhcnJheSgpOwoKICAgICAgICB3aGlsZSAoJG9mZnNldCA8IHN0cmxlbigkdGV4dF9wYXJ0KSkgewogICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cnNwbigkdGV4dF9wYXJ0LCAiXHgwMFx4MDlceDBhXHgwY1x4MGRceDIwIiwgJG9mZnNldCk7CiAgICAgICAgICAgICRjaGFyID0gJHRleHRfcGFydFskb2Zmc2V0XTsKCiAgICAgICAgICAgICRvcGVyYXRvciA9ICcnOwogICAgICAgICAgICAkdHlwZSAgICAgPSAnJzsKICAgICAgICAgICAgJGNvbW1hbmQgID0gZmFsc2U7CgogICAgICAgICAgICBzd2l0Y2ggKCRjaGFyKSB7CiAgICAgICAgICAgICAgICBjYXNlICcvJzoKICAgICAgICAgICAgICAgICAgICAkdHlwZSA9ICRjaGFyOwogICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKAogICAgICAgICAgICAgICAgICAgICAgICAnL15cLyhbQS1aMC05XC5fLFwrXStccytbMC05LlwtXSspXHMrKFtBLVpdKylccyovc2knLAogICAgICAgICAgICAgICAgICAgICAgICBzdWJzdHIoJHRleHRfcGFydCwgJG9mZnNldCksCiAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaGVzCiAgICAgICAgICAgICAgICAgICAgKQogICAgICAgICAgICAgICAgICAgICkgewogICAgICAgICAgICAgICAgICAgICAgICAkb3BlcmF0b3IgPSAkbWF0Y2hlc1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgID0gJG1hdGNoZXNbMV07CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgKICAgICAgICAgICAgICAgICAgICAgICAgJy9eXC8oW0EtWjAtOVwuXyxcK10rKVxzKyhbQS1aXSspXHMqL3NpJywKICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyKCR0ZXh0X3BhcnQsICRvZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hlcwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdG9yID0gJG1hdGNoZXNbMl07CiAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kICA9ICRtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ1snOgogICAgICAgICAgICAgICAgY2FzZSAnXSc6CiAgICAgICAgICAgICAgICAgICAgLy8gYXJyYXkgb2JqZWN0CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSAkY2hhcjsKICAgICAgICAgICAgICAgICAgICBpZiAoJGNoYXIgPT0gJ1snKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICsrJG9mZnNldDsKICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ2V0IGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kID0gJHRoaXMtPmdldENvbW1hbmRzVGV4dCgkdGV4dF9wYXJ0LCAkb2Zmc2V0KTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxzKltBLVpdezEsMn1ccyovc2knLCBzdWJzdHIoJHRleHRfcGFydCwgJG9mZnNldCksICRtYXRjaGVzKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdG9yID0gdHJpbSgkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICArKyRvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBjYXNlICc8JzoKICAgICAgICAgICAgICAgIGNhc2UgJz4nOgogICAgICAgICAgICAgICAgICAgIC8vIGFycmF5IG9iamVjdAogICAgICAgICAgICAgICAgICAgICR0eXBlID0gJGNoYXI7CiAgICAgICAgICAgICAgICAgICAgKyskb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGlmICgkY2hhciA9PSAnPCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN0cnBvcyAgPSBzdHJwb3MoJHRleHRfcGFydCwgJz4nLCAkb2Zmc2V0KTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgPSBzdWJzdHIoJHRleHRfcGFydCwgJG9mZnNldCwgKCRzdHJwb3MgLSAkb2Zmc2V0KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgID0gJHN0cnBvcyArIDE7CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL15ccypbQS1aXXsxLDJ9XHMqL3NpJywgc3Vic3RyKCR0ZXh0X3BhcnQsICRvZmZzZXQpLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdG9yID0gdHJpbSgkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICAgICBjYXNlICcpJzoKICAgICAgICAgICAgICAgICAgICArKyRvZmZzZXQ7CiAgICAgICAgICAgICAgICAgICAgJHR5cGUgICA9ICRjaGFyOwogICAgICAgICAgICAgICAgICAgICRzdHJwb3MgPSAkb2Zmc2V0OwogICAgICAgICAgICAgICAgICAgIGlmICgkY2hhciA9PSAnKCcpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9wZW5fYnJhY2tldCA9IDE7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgkb3Blbl9icmFja2V0ID4gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpc3NldCgkdGV4dF9wYXJ0WyRzdHJwb3NdKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGNoID0gJHRleHRfcGFydFskc3RycG9zXTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoJGNoKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnXFwnOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgLy8gUkVWRVJTRSBTT0xJRFVTICg1Q2gpIChCYWNrc2xhc2gpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNraXAgbmV4dCBjaGFyYWN0ZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyskc3RycG9zOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAvLyBMRUZUIFBBUkVOSEVTSVMgKDI4aCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyskb3Blbl9icmFja2V0OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnKSc6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyAvLyBSSUdIVCBQQVJFTlRIRVNJUyAoMjloKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSRvcGVuX2JyYWNrZXQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrJHN0cnBvczsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHN1YnN0cigkdGV4dF9wYXJ0LCAkb2Zmc2V0LCAoJHN0cnBvcyAtICRvZmZzZXQgLSAxKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgID0gJHN0cnBvczsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcmVnX21hdGNoKCcvXlxzKihbQS1aXCddezEsMn0pXHMqL3NpJywgc3Vic3RyKCR0ZXh0X3BhcnQsICRvZmZzZXQpLCAkbWF0Y2hlcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRvcGVyYXRvciA9ICRtYXRjaGVzWzFdOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJG9mZnNldCArPSBzdHJsZW4oJG1hdGNoZXNbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGRlZmF1bHQ6CgogICAgICAgICAgICAgICAgICAgIGlmIChzdWJzdHIoJHRleHRfcGFydCwgJG9mZnNldCwgMikgPT0gJ0VUJykgewogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgKICAgICAgICAgICAgICAgICAgICAgICAgJy9eXHMqKD9QPGRhdGE+KFswLTlcLlwtXStccyo/KSspXHMrKD9QPGlkPltBLVpdezEsM30pXHMqL3NpJywKICAgICAgICAgICAgICAgICAgICAgICAgc3Vic3RyKCR0ZXh0X3BhcnQsICRvZmZzZXQpLAogICAgICAgICAgICAgICAgICAgICAgICAkbWF0Y2hlcwogICAgICAgICAgICAgICAgICAgICkKICAgICAgICAgICAgICAgICAgICApIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG9wZXJhdG9yID0gdHJpbSgkbWF0Y2hlc1snaWQnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRjb21tYW5kICA9IHRyaW0oJG1hdGNoZXNbJ2RhdGEnXSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdKTsKICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZiAocHJlZ19tYXRjaCgnL15ccyooWzAtOVwuXC1dK1xzKj8pK1xzKi9zaScsIHN1YnN0cigkdGV4dF9wYXJ0LCAkb2Zmc2V0KSwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlICAgID0gJ24nOwogICAgICAgICAgICAgICAgICAgICAgICAkY29tbWFuZCA9IHRyaW0oJG1hdGNoZXNbMF0pOwogICAgICAgICAgICAgICAgICAgICAgICAkb2Zmc2V0ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eXHMqKFtBLVpcKl0rKVxzKi9zaScsIHN1YnN0cigkdGV4dF9wYXJ0LCAkb2Zmc2V0KSwgJG1hdGNoZXMpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICR0eXBlICAgICA9ICcnOwogICAgICAgICAgICAgICAgICAgICAgICAkb3BlcmF0b3IgPSAkbWF0Y2hlc1sxXTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbW1hbmQgID0gJyc7CiAgICAgICAgICAgICAgICAgICAgICAgICRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdKTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIGlmICgkY29tbWFuZCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICRjb21tYW5kc1tdID0gYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6VFlQRSAgICAgPT4gJHR5cGUsCiAgICAgICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJG9wZXJhdG9yLAogICAgICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgID0+ICRjb21tYW5kLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJGNvbW1hbmRzOwogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtICRkb2N1bWVudCBEb2N1bWVudAogICAgICogQHBhcmFtICRoZWFkZXIgICBIZWFkZXIKICAgICAqIEBwYXJhbSAkY29udGVudCAgc3RyaW5nCiAgICAgKgogICAgICogQHJldHVybiBPYmplY3QKICAgICAqLwogICAgcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmYWN0b3J5KERvY3VtZW50ICRkb2N1bWVudCwgSGVhZGVyICRoZWFkZXIsICRjb250ZW50KQogICAgewogICAgICAgIHN3aXRjaCAoJGhlYWRlci0+Z2V0KCdUeXBlJyktPmdldENvbnRlbnQoKSkgewogICAgICAgICAgICBjYXNlICdYT2JqZWN0JzoKICAgICAgICAgICAgICAgIHN3aXRjaCAoJGhlYWRlci0+Z2V0KCdTdWJ0eXBlJyktPmdldENvbnRlbnQoKSkgewogICAgICAgICAgICAgICAgICAgIGNhc2UgJ0ltYWdlJzoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBJbWFnZSgkZG9jdW1lbnQsICRoZWFkZXIsICRjb250ZW50KTsKCiAgICAgICAgICAgICAgICAgICAgY2FzZSAnRm9ybSc6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRm9ybSgkZG9jdW1lbnQsICRoZWFkZXIsICRjb250ZW50KTsKCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBPYmplY3QoJGRvY3VtZW50LCAkaGVhZGVyLCAkY29udGVudCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ1BhZ2VzJzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZXMoJGRvY3VtZW50LCAkaGVhZGVyLCAkY29udGVudCk7CgogICAgICAgICAgICBjYXNlICdQYWdlJzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgUGFnZSgkZG9jdW1lbnQsICRoZWFkZXIsICRjb250ZW50KTsKCiAgICAgICAgICAgIGNhc2UgJ0VuY29kaW5nJzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRW5jb2RpbmcoJGRvY3VtZW50LCAkaGVhZGVyLCAkY29udGVudCk7CgogICAgICAgICAgICBjYXNlICdGb250JzoKICAgICAgICAgICAgICAgICRzdWJ0eXBlICAgPSAkaGVhZGVyLT5nZXQoJ1N1YnR5cGUnKS0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICAgICAgJGNsYXNzbmFtZSA9ICdcU21hbG90XFBkZlBhcnNlclxGb250XEZvbnQnIC4gJHN1YnR5cGU7CgogICAgICAgICAgICAgICAgaWYgKGNsYXNzX2V4aXN0cygkY2xhc3NuYW1lKSkgewogICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXcgJGNsYXNzbmFtZSgkZG9jdW1lbnQsICRoZWFkZXIsICRjb250ZW50KTsKICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBGb250KCRkb2N1bWVudCwgJGhlYWRlciwgJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgT2JqZWN0KCRkb2N1bWVudCwgJGhlYWRlciwgJGNvbnRlbnQpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Page.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE1pc3Npbmc7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWY7CgovKioKICogQ2xhc3MgUGFnZQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyCiAqLwpjbGFzcyBQYWdlIGV4dGVuZHMgT2JqZWN0CnsKICAgIC8qKgogICAgICogQHZhciBGb250W10KICAgICAqLwogICAgcHJvdGVjdGVkICRmb250cyA9IG51bGw7CgogICAgLyoqCiAgICAgKiBAdmFyIE9iamVjdFtdCiAgICAgKi8KICAgIHByb3RlY3RlZCAkeG9iamVjdHMgPSBudWxsOwoKICAgIC8qKgogICAgICogQHJldHVybiBGb250W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvbnRzKCkKICAgIHsKICAgICAgICBpZiAoIWlzX251bGwoJHRoaXMtPmZvbnRzKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPmZvbnRzOwogICAgICAgIH0KCiAgICAgICAgJHJlc291cmNlcyA9ICR0aGlzLT5nZXQoJ1Jlc291cmNlcycpOwoKICAgICAgICBpZiAoJHJlc291cmNlcy0+aGFzKCdGb250JykpIHsKCiAgICAgICAgICAgIGlmICgkcmVzb3VyY2VzLT5nZXQoJ0ZvbnQnKSBpbnN0YW5jZW9mIEhlYWRlcikgewogICAgICAgICAgICAgICAgJGZvbnRzID0gJHJlc291cmNlcy0+Z2V0KCdGb250JyktPmdldEVsZW1lbnRzKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkZm9udHMgPSAkcmVzb3VyY2VzLT5nZXQoJ0ZvbnQnKS0+Z2V0SGVhZGVyKCktPmdldEVsZW1lbnRzKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0YWJsZSA9IGFycmF5KCk7CgogICAgICAgICAgICBmb3JlYWNoICgkZm9udHMgYXMgJGlkID0+ICRmb250KSB7CiAgICAgICAgICAgICAgICAkdGFibGVbJGlkXSA9ICRmb250OwoKICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRvbyBvbiBjbGVhbmVkIGlkIHZhbHVlIChvbmx5IG51bWVyaWMpCiAgICAgICAgICAgICAgICAkaWQgPSBwcmVnX3JlcGxhY2UoJy9bXjAtOVwuXC1fXS8nLCAnJywgJGlkKTsKICAgICAgICAgICAgICAgIGlmICgkaWQgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkdGFibGVbJGlkXSA9ICRmb250OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT5mb250cyA9ICR0YWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIEZvbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldEZvbnQoJGlkKQogICAgewogICAgICAgICRmb250cyA9ICR0aGlzLT5nZXRGb250cygpOwoKICAgICAgICBpZiAoaXNzZXQoJGZvbnRzWyRpZF0pKSB7CiAgICAgICAgICAgIHJldHVybiAkZm9udHNbJGlkXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAkaWQgPSBwcmVnX3JlcGxhY2UoJy9bXjAtOVwuXC1fXS8nLCAnJywgJGlkKTsKCiAgICAgICAgICAgIGlmIChpc3NldCgkZm9udHNbJGlkXSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkZm9udHNbJGlkXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogU3VwcG9ydCBmb3IgWE9iamVjdAogICAgICoKICAgICAqIEByZXR1cm4gT2JqZWN0W10KICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFhPYmplY3RzKCkKICAgIHsKICAgICAgICBpZiAoIWlzX251bGwoJHRoaXMtPnhvYmplY3RzKSkgewogICAgICAgICAgICByZXR1cm4gJHRoaXMtPnhvYmplY3RzOwogICAgICAgIH0KCiAgICAgICAgJHJlc291cmNlcyA9ICR0aGlzLT5nZXQoJ1Jlc291cmNlcycpOwoKICAgICAgICBpZiAoJHJlc291cmNlcy0+aGFzKCdYT2JqZWN0JykpIHsKCiAgICAgICAgICAgIGlmICgkcmVzb3VyY2VzLT5nZXQoJ1hPYmplY3QnKSBpbnN0YW5jZW9mIEhlYWRlcikgewogICAgICAgICAgICAgICAgJHhvYmplY3RzID0gJHJlc291cmNlcy0+Z2V0KCdYT2JqZWN0JyktPmdldEVsZW1lbnRzKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkeG9iamVjdHMgPSAkcmVzb3VyY2VzLT5nZXQoJ1hPYmplY3QnKS0+Z2V0SGVhZGVyKCktPmdldEVsZW1lbnRzKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgICR0YWJsZSA9IGFycmF5KCk7CgogICAgICAgICAgICBmb3JlYWNoICgkeG9iamVjdHMgYXMgJGlkID0+ICR4b2JqZWN0KSB7CiAgICAgICAgICAgICAgICAkdGFibGVbJGlkXSA9ICR4b2JqZWN0OwoKICAgICAgICAgICAgICAgIC8vIFN0b3JlIHRvbyBvbiBjbGVhbmVkIGlkIHZhbHVlIChvbmx5IG51bWVyaWMpCiAgICAgICAgICAgICAgICAkaWQgPSBwcmVnX3JlcGxhY2UoJy9bXjAtOVwuXC1fXS8nLCAnJywgJGlkKTsKICAgICAgICAgICAgICAgIGlmICgkaWQgIT0gJycpIHsKICAgICAgICAgICAgICAgICAgICAkdGFibGVbJGlkXSA9ICR4b2JqZWN0OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CgogICAgICAgICAgICByZXR1cm4gKCR0aGlzLT54b2JqZWN0cyA9ICR0YWJsZSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGFycmF5KCk7CiAgICAgICAgfQogICAgfQoKICAgIC8qKgogICAgICogQHBhcmFtIHN0cmluZyAkaWQKICAgICAqCiAgICAgKiBAcmV0dXJuIE9iamVjdAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gZ2V0WE9iamVjdCgkaWQpCiAgICB7CiAgICAgICAgJHhvYmplY3RzID0gJHRoaXMtPmdldFhPYmplY3RzKCk7CgogICAgICAgIGlmIChpc3NldCgkeG9iamVjdHNbJGlkXSkpIHsKICAgICAgICAgICAgcmV0dXJuICR4b2JqZWN0c1skaWRdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICAvKiRpZCA9IHByZWdfcmVwbGFjZSgnL1teMC05XC5cLV9dLycsICcnLCAkaWQpOwoKICAgICAgICAgICAgaWYgKGlzc2V0KCR4b2JqZWN0c1skaWRdKSkgewogICAgICAgICAgICAgICAgcmV0dXJuICR4b2JqZWN0c1skaWRdOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0qLwogICAgICAgIH0KICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBQYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRleHQoUGFnZSAkcGFnZSA9IG51bGwpCiAgICB7CiAgICAgICAgaWYgKCRjb250ZW50cyA9ICR0aGlzLT5nZXQoJ0NvbnRlbnRzJykpIHsKCiAgICAgICAgICAgIGlmICgkY29udGVudHMgaW5zdGFuY2VvZiBFbGVtZW50TWlzc2luZykgewogICAgICAgICAgICAgICAgcmV0dXJuICcnOwogICAgICAgICAgICB9IGVsc2VpZiAoJGNvbnRlbnRzIGluc3RhbmNlb2YgT2JqZWN0KSB7CiAgICAgICAgICAgICAgICAkZWxlbWVudHMgPSAkY29udGVudHMtPmdldEhlYWRlcigpLT5nZXRFbGVtZW50cygpOwoKICAgICAgICAgICAgICAgIGlmIChpc19udW1lcmljKGtleSgkZWxlbWVudHMpKSkgewogICAgICAgICAgICAgICAgICAgICRuZXdfY29udGVudCA9ICcnOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZWxlbWVudHMgYXMgJGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlbGVtZW50IGluc3RhbmNlb2YgRWxlbWVudFhSZWYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdfY29udGVudCAuPSAkZWxlbWVudC0+Z2V0T2JqZWN0KCktPmdldENvbnRlbnQoKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXdfY29udGVudCAuPSAkZWxlbWVudC0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyICAgPSBuZXcgSGVhZGVyKGFycmF5KCksICR0aGlzLT5kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnRzID0gbmV3IE9iamVjdCgkdGhpcy0+ZG9jdW1lbnQsICRoZWFkZXIsICRuZXdfY29udGVudCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZWlmICgkY29udGVudHMgaW5zdGFuY2VvZiBFbGVtZW50QXJyYXkpIHsKICAgICAgICAgICAgICAgIC8vIENyZWF0ZSBhIHZpcnR1YWwgZ2xvYmFsIGNvbnRlbnQuCiAgICAgICAgICAgICAgICAkbmV3X2NvbnRlbnQgPSAnJzsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkY29udGVudHMtPmdldENvbnRlbnQoKSBhcyAkY29udGVudCkgewogICAgICAgICAgICAgICAgICAgICRuZXdfY29udGVudCAuPSAkY29udGVudC0+Z2V0Q29udGVudCgpIC4gIlxuIjsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAkaGVhZGVyICAgPSBuZXcgSGVhZGVyKGFycmF5KCksICR0aGlzLT5kb2N1bWVudCk7CiAgICAgICAgICAgICAgICAkY29udGVudHMgPSBuZXcgT2JqZWN0KCR0aGlzLT5kb2N1bWVudCwgJGhlYWRlciwgJG5ld19jb250ZW50KTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgcmV0dXJuICRjb250ZW50cy0+Z2V0VGV4dCgkdGhpcyk7CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gJyc7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Pages.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKLyoqCiAqIENsYXNzIFBhZ2VzCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXIKICovCmNsYXNzIFBhZ2VzIGV4dGVuZHMgT2JqZWN0CnsKICAgIC8qKgogICAgICogQHBhcmFtIGJvb2wgJGRlZXAKICAgICAqCiAgICAgKiBAcmV0dXJuIGFycmF5CiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlcygkZGVlcCA9IGZhbHNlKQogICAgewogICAgICAgIGlmICgkdGhpcy0+aGFzKCdLaWRzJykpIHsKCiAgICAgICAgICAgIGlmICghJGRlZXApIHsKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+Z2V0KCdLaWRzJyktPmdldENvbnRlbnQoKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRraWRzICA9ICR0aGlzLT5nZXQoJ0tpZHMnKS0+Z2V0Q29udGVudCgpOwogICAgICAgICAgICAgICAgJHBhZ2VzID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICBmb3JlYWNoICgka2lkcyBhcyAka2lkKSB7CgogICAgICAgICAgICAgICAgICAgIGlmICgka2lkIGluc3RhbmNlb2YgUGFnZXMpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzID0gYXJyYXlfbWVyZ2UoJHBhZ2VzLCAka2lkLT5nZXRQYWdlcyh0cnVlKSk7CiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2VzW10gPSAka2lkOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICByZXR1cm4gJHBhZ2VzOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gYXJyYXkoKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyOwoKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW47CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWU7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bGw7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjsKCi8qKgogKiBDbGFzcyBQYXJzZXIKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlcgogKi8KY2xhc3MgUGFyc2VyCnsKICAgIC8qKgogICAgICogQHZhciBPYmplY3RbXQogICAgICovCiAgICBwcm90ZWN0ZWQgJG9iamVjdHMgPSBhcnJheSgpOwoKICAgIC8qKgogICAgICoKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCkKICAgIHsKCiAgICB9CgogICAgLyoqCiAgICAgKiBQYXJzZSBQREYgZmlsZQogICAgICoKICAgICAqIEBwYXJhbSBzdHJpbmcgJGZpbGVuYW1lCiAgICAgKgogICAgICogQHJldHVybiBEb2N1bWVudAogICAgICovCiAgICBwdWJsaWMgZnVuY3Rpb24gcGFyc2VGaWxlKCRmaWxlbmFtZSkKICAgIHsKICAgICAgICAkY29udGVudCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CgogICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VDb250ZW50KCRjb250ZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIFBhcnNlIFBERiBjb250ZW50CiAgICAgKgogICAgICogQHBhcmFtIHN0cmluZyAkY29udGVudAogICAgICoKICAgICAqIEByZXR1cm4gRG9jdW1lbnQKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIHBhcnNlQ29udGVudCgkY29udGVudCkKICAgIHsKICAgICAgICAvLyBDcmVhdGUgc3RydWN0dXJlIHVzaW5nIFRDUERGIFBhcnNlci4KICAgICAgICAkcGFyc2VyID0gbmV3IFxUQ1BERl9QQVJTRVIobHRyaW0oJGNvbnRlbnQpKTsKICAgICAgICBsaXN0KCR4cmVmLCAkZGF0YSkgPSAkcGFyc2VyLT5nZXRQYXJzZWREYXRhKCk7CgogICAgICAgIGlmIChpc3NldCgkeHJlZlsndHJhaWxlciddWydlbmNyeXB0J10pKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBcRXhjZXB0aW9uKCdTZWN1cmVkIHBkZiBmaWxlIGFyZSBjdXJyZW50bHkgbm90IHN1cHBvcnRlZC4nKTsKICAgICAgICB9CgogICAgICAgIGlmIChlbXB0eSgkZGF0YSkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ09iamVjdCBsaXN0IG5vdCBmb3VuZC4gUG9zc2libGUgc2VjdXJlZCBmaWxlLicpOwogICAgICAgIH0KCiAgICAgICAgLy8gQ3JlYXRlIGRlc3RpbmF0aW9uIG9iamVjdC4KICAgICAgICAkZG9jdW1lbnQgICAgICA9IG5ldyBEb2N1bWVudCgpOwogICAgICAgICR0aGlzLT5vYmplY3RzID0gYXJyYXkoKTsKCiAgICAgICAgZm9yZWFjaCAoJGRhdGEgYXMgJGlkID0+ICRzdHJ1Y3R1cmUpIHsKICAgICAgICAgICAgJHRoaXMtPnBhcnNlT2JqZWN0KCRpZCwgJHN0cnVjdHVyZSwgJGRvY3VtZW50KTsKICAgICAgICB9CgogICAgICAgICRkb2N1bWVudC0+c2V0VHJhaWxlcigkdGhpcy0+cGFyc2VUcmFpbGVyKCR4cmVmWyd0cmFpbGVyJ10sICRkb2N1bWVudCkpOwogICAgICAgICRkb2N1bWVudC0+c2V0T2JqZWN0cygkdGhpcy0+b2JqZWN0cyk7CgogICAgICAgIHJldHVybiAkZG9jdW1lbnQ7CiAgICB9CgogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlVHJhaWxlcigkc3RydWN0dXJlLCAkZG9jdW1lbnQpCiAgICB7CiAgICAgICAgJHRyYWlsZXIgPSBhcnJheSgpOwoKICAgICAgICBmb3JlYWNoICgkc3RydWN0dXJlIGFzICRuYW1lID0+ICR2YWx1ZXMpIHsKICAgICAgICAgICAgJG5hbWUgPSB1Y2ZpcnN0KCRuYW1lKTsKCiAgICAgICAgICAgIGlmIChpc19udW1lcmljKCR2YWx1ZXMpKSB7CiAgICAgICAgICAgICAgICAkdHJhaWxlclskbmFtZV0gPSBuZXcgRWxlbWVudE51bWVyaWMoJHZhbHVlcywgJGRvY3VtZW50KTsKICAgICAgICAgICAgfSBlbHNlaWYgKGlzX2FycmF5KCR2YWx1ZXMpKSB7CiAgICAgICAgICAgICAgICAkdmFsdWUgICAgICAgICAgPSAkdGhpcy0+cGFyc2VUcmFpbGVyKCR2YWx1ZXMsIG51bGwpOwogICAgICAgICAgICAgICAgJHRyYWlsZXJbJG5hbWVdID0gbmV3IEVsZW1lbnRBcnJheSgkdmFsdWUsIG51bGwpOwogICAgICAgICAgICB9IGVsc2VpZiAoc3RycG9zKCR2YWx1ZXMsICdfJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAkdHJhaWxlclskbmFtZV0gPSBuZXcgRWxlbWVudFhSZWYoJHZhbHVlcywgJGRvY3VtZW50KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICR0cmFpbGVyWyRuYW1lXSA9ICR0aGlzLT5wYXJzZUhlYWRlckVsZW1lbnQoJygnLCAkdmFsdWVzLCAkZG9jdW1lbnQpOwogICAgICAgICAgICB9CiAgICAgICAgfQoKICAgICAgICByZXR1cm4gbmV3IEhlYWRlcigkdHJhaWxlciwgJGRvY3VtZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSBzdHJpbmcgICAkaWQKICAgICAqIEBwYXJhbSBhcnJheSAgICAkc3RydWN0dXJlCiAgICAgKiBAcGFyYW0gRG9jdW1lbnQgJGRvY3VtZW50CiAgICAgKi8KICAgIHByb3RlY3RlZCBmdW5jdGlvbiBwYXJzZU9iamVjdCgkaWQsICRzdHJ1Y3R1cmUsICRkb2N1bWVudCkKICAgIHsKICAgICAgICAkaGVhZGVyICA9IG5ldyBIZWFkZXIoYXJyYXkoKSwgJGRvY3VtZW50KTsKICAgICAgICAkY29udGVudCA9ICcnOwoKICAgICAgICBmb3JlYWNoICgkc3RydWN0dXJlIGFzICRwb3NpdGlvbiA9PiAkcGFydCkgewogICAgICAgICAgICBzd2l0Y2ggKCRwYXJ0WzBdKSB7CiAgICAgICAgICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgICAgICAgICAkZWxlbWVudHMgPSBhcnJheSgpOwoKICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcGFydFsxXSBhcyAkc3ViX2VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJHN1Yl90eXBlICAgPSAkc3ViX2VsZW1lbnRbMF07CiAgICAgICAgICAgICAgICAgICAgICAgICRzdWJfdmFsdWUgID0gJHN1Yl9lbGVtZW50WzFdOwogICAgICAgICAgICAgICAgICAgICAgICAkZWxlbWVudHNbXSA9ICR0aGlzLT5wYXJzZUhlYWRlckVsZW1lbnQoJHN1Yl90eXBlLCAkc3ViX3ZhbHVlLCAkZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgJGhlYWRlciA9IG5ldyBIZWFkZXIoJGVsZW1lbnRzLCAkZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJzw8JzoKICAgICAgICAgICAgICAgICAgICAkaGVhZGVyID0gJHRoaXMtPnBhcnNlSGVhZGVyKCRwYXJ0WzFdLCAkZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGNhc2UgJ3N0cmVhbSc6CiAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSBpc3NldCgkcGFydFszXVswXSkgPyAkcGFydFszXVswXSA6ICRwYXJ0WzFdOwoKICAgICAgICAgICAgICAgICAgICBpZiAoJGhlYWRlci0+Z2V0KCdUeXBlJyktPmVxdWFscygnT2JqU3RtJykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgJG1hdGNoID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFNwbGl0IHhyZWZzIGFuZCBjb250ZW50cy4KICAgICAgICAgICAgICAgICAgICAgICAgcHJlZ19tYXRjaCgnL14oKFxkK1xzK1xkK1xzKikqKSguKikkL3MnLCAkY29udGVudCwgJG1hdGNoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAkbWF0Y2hbM107CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBFeHRyYWN0IHhyZWZzLgogICAgICAgICAgICAgICAgICAgICAgICAkeHJlZnMgPSBwcmVnX3NwbGl0KAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJy8oXGQrXHMrXGQrXHMqKS9zJywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtYXRjaFsxXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0xLAogICAgICAgICAgICAgICAgICAgICAgICAgIFBSRUdfU1BMSVRfTk9fRU1QVFkgfCBQUkVHX1NQTElUX0RFTElNX0NBUFRVUkUKICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlID0gYXJyYXkoKTsKCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR4cmVmcyBhcyAkeHJlZikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlzdCgkaWQsICRwb3NpdGlvbikgPSBleHBsb2RlKCcgJywgdHJpbSgkeHJlZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRhYmxlWyRwb3NpdGlvbl0gPSAkaWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgIGtzb3J0KCR0YWJsZSk7CgogICAgICAgICAgICAgICAgICAgICAgICAkaWRzICAgICAgID0gYXJyYXlfdmFsdWVzKCR0YWJsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwb3NpdGlvbnMgPSBhcnJheV9rZXlzKCR0YWJsZSk7CgogICAgICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkcG9zaXRpb25zIGFzICRpbmRleCA9PiAkcG9zaXRpb24pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpZCAgICAgICAgICAgID0gJGlkc1skaW5kZXhdIC4gJ18wJzsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRuZXh0X3Bvc2l0aW9uID0gaXNzZXQoJHBvc2l0aW9uc1skaW5kZXggKyAxXSkgPyAkcG9zaXRpb25zWyRpbmRleCArIDFdIDogc3RybGVuKCRjb250ZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzdWJfY29udGVudCAgID0gc3Vic3RyKCRjb250ZW50LCAkcG9zaXRpb24sICRuZXh0X3Bvc2l0aW9uIC0gJHBvc2l0aW9uKTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkc3ViX2hlYWRlciAgICAgICAgID0gSGVhZGVyOjpwYXJzZSgkc3ViX2NvbnRlbnQsICRkb2N1bWVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkb2JqZWN0ICAgICAgICAgICAgID0gT2JqZWN0OjpmYWN0b3J5KCRkb2N1bWVudCwgJHN1Yl9oZWFkZXIsICcnKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICR0aGlzLT5vYmplY3RzWyRpZF0gPSAkb2JqZWN0OwogICAgICAgICAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgICAvLyBJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMgY29udGVudC4KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbnRlbnQgPSAnJzsKCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICBpZiAoJHBhcnQgIT0gJ251bGwnKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRlbGVtZW50ID0gJHRoaXMtPnBhcnNlSGVhZGVyRWxlbWVudCgkcGFydFswXSwgJHBhcnRbMV0sICRkb2N1bWVudCk7CgogICAgICAgICAgICAgICAgICAgICAgICBpZiAoJGVsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoZWFkZXIgPSBuZXcgSGVhZGVyKGFycmF5KCRlbGVtZW50KSwgJGRvY3VtZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIGlmICghaXNzZXQoJHRoaXMtPm9iamVjdHNbJGlkXSkpIHsKICAgICAgICAgICAgJHRoaXMtPm9iamVjdHNbJGlkXSA9IE9iamVjdDo6ZmFjdG9yeSgkZG9jdW1lbnQsICRoZWFkZXIsICRjb250ZW50KTsKICAgICAgICB9CiAgICB9CgogICAgLyoqCiAgICAgKiBAcGFyYW0gYXJyYXkgICAgJHN0cnVjdHVyZQogICAgICogQHBhcmFtIERvY3VtZW50ICRkb2N1bWVudAogICAgICoKICAgICAqIEByZXR1cm4gSGVhZGVyCiAgICAgKiBAdGhyb3dzIFxFeGNlcHRpb24KICAgICAqLwogICAgcHJvdGVjdGVkIGZ1bmN0aW9uIHBhcnNlSGVhZGVyKCRzdHJ1Y3R1cmUsICRkb2N1bWVudCkKICAgIHsKICAgICAgICAkZWxlbWVudHMgPSBhcnJheSgpOwogICAgICAgICRjb3VudCAgICA9IGNvdW50KCRzdHJ1Y3R1cmUpOwoKICAgICAgICBmb3IgKCRwb3NpdGlvbiA9IDA7ICRwb3NpdGlvbiA8ICRjb3VudDsgJHBvc2l0aW9uICs9IDIpIHsKICAgICAgICAgICAgJG5hbWUgID0gJHN0cnVjdHVyZVskcG9zaXRpb25dWzFdOwogICAgICAgICAgICAkdHlwZSAgPSAkc3RydWN0dXJlWyRwb3NpdGlvbiArIDFdWzBdOwogICAgICAgICAgICAkdmFsdWUgPSAkc3RydWN0dXJlWyRwb3NpdGlvbiArIDFdWzFdOwoKICAgICAgICAgICAgJGVsZW1lbnRzWyRuYW1lXSA9ICR0aGlzLT5wYXJzZUhlYWRlckVsZW1lbnQoJHR5cGUsICR2YWx1ZSwgJGRvY3VtZW50KTsKICAgICAgICB9CgogICAgICAgIHJldHVybiBuZXcgSGVhZGVyKCRlbGVtZW50cywgJGRvY3VtZW50KTsKICAgIH0KCiAgICAvKioKICAgICAqIEBwYXJhbSAkdHlwZQogICAgICogQHBhcmFtICR2YWx1ZQogICAgICogQHBhcmFtICRkb2N1bWVudAogICAgICoKICAgICAqIEByZXR1cm4gRWxlbWVudHxIZWFkZXIKICAgICAqIEB0aHJvd3MgXEV4Y2VwdGlvbgogICAgICovCiAgICBwcm90ZWN0ZWQgZnVuY3Rpb24gcGFyc2VIZWFkZXJFbGVtZW50KCR0eXBlLCAkdmFsdWUsICRkb2N1bWVudCkKICAgIHsKICAgICAgICBzd2l0Y2ggKCR0eXBlKSB7CiAgICAgICAgICAgIGNhc2UgJzw8JzoKICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0+cGFyc2VIZWFkZXIoJHZhbHVlLCAkZG9jdW1lbnQpOwoKICAgICAgICAgICAgY2FzZSAnbnVtZXJpYyc6CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IEVsZW1lbnROdW1lcmljKCR2YWx1ZSwgJGRvY3VtZW50KTsKCiAgICAgICAgICAgIGNhc2UgJ2Jvb2xlYW4nOgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50Qm9vbGVhbigkdmFsdWUsICRkb2N1bWVudCk7CgogICAgICAgICAgICBjYXNlICdudWxsJzoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudE51bGwoJHZhbHVlLCAkZG9jdW1lbnQpOwoKICAgICAgICAgICAgY2FzZSAnKCc6CiAgICAgICAgICAgICAgICBpZiAoJGRhdGUgPSBFbGVtZW50RGF0ZTo6cGFyc2UoJygnIC4gJHZhbHVlIC4gJyknLCAkZG9jdW1lbnQpKSB7CiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICRkYXRlOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICByZXR1cm4gRWxlbWVudFN0cmluZzo6cGFyc2UoJygnIC4gJHZhbHVlIC4gJyknLCAkZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgY2FzZSAnPCc6CiAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnBhcnNlSGVhZGVyRWxlbWVudCgnKCcsIEVsZW1lbnRIZXhhOjpkZWNvZGUoJHZhbHVlLCAkZG9jdW1lbnQpLCAkZG9jdW1lbnQpOwoKICAgICAgICAgICAgY2FzZSAnLyc6CiAgICAgICAgICAgICAgICByZXR1cm4gRWxlbWVudE5hbWU6OnBhcnNlKCcvJyAuICR2YWx1ZSwgJGRvY3VtZW50KTsKCiAgICAgICAgICAgIGNhc2UgJ29qYnJlZic6IC8vIG9sZCBtaXN0YWtlIGluIHRjcGRmIHBhcnNlcgogICAgICAgICAgICBjYXNlICdvYmpyZWYnOgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBFbGVtZW50WFJlZigkdmFsdWUsICRkb2N1bWVudCk7CgogICAgICAgICAgICBjYXNlICdbJzoKICAgICAgICAgICAgICAgICR2YWx1ZXMgPSBhcnJheSgpOwoKICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR2YWx1ZSBhcyAkc3ViX2VsZW1lbnQpIHsKICAgICAgICAgICAgICAgICAgICAkc3ViX3R5cGUgID0gJHN1Yl9lbGVtZW50WzBdOwogICAgICAgICAgICAgICAgICAgICRzdWJfdmFsdWUgPSAkc3ViX2VsZW1lbnRbMV07CiAgICAgICAgICAgICAgICAgICAgJHZhbHVlc1tdICA9ICR0aGlzLT5wYXJzZUhlYWRlckVsZW1lbnQoJHN1Yl90eXBlLCAkc3ViX3ZhbHVlLCAkZG9jdW1lbnQpOwogICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHJldHVybiBuZXcgRWxlbWVudEFycmF5KCR2YWx1ZXMsICRkb2N1bWVudCk7CgogICAgICAgICAgICBjYXNlICdlbmRzdHJlYW0nOgogICAgICAgICAgICBjYXNlICcnOgogICAgICAgICAgICAgICAgLy8gTm90aGluZyB0byBkbyB3aXRoLgogICAgICAgICAgICAgICAgYnJlYWs7CgogICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgdGhyb3cgbmV3IFxFeGNlcHRpb24oJ0ludmFsaWQgdHlwZTogIicgLiAkdHlwZSAuICciLicpOwogICAgICAgIH0KICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Document.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBEb2N1bWVudAogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzCiAqLwpjbGFzcyBEb2N1bWVudCBleHRlbmRzIGF0b3VtXHRlc3QKewogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RTZXRPYmplY3RzKCkKICAgIHsKICAgICAgICAkZG9jdW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQoKTsKICAgICAgICAkb2JqZWN0ICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcT2JqZWN0KCRkb2N1bWVudCk7CiAgICAgICAgLy8gT2JqICMxIGlzIG1pc3NpbmcKICAgICAgICAkdGhpcy0+YXNzZXJ0LT52YXJpYWJsZSgkZG9jdW1lbnQtPmdldE9iamVjdEJ5SWQoMSkpLT5pc051bGwoKTsKICAgICAgICAkZG9jdW1lbnQtPnNldE9iamVjdHMoYXJyYXkoMSA9PiAkb2JqZWN0KSk7CiAgICAgICAgLy8gT2JqICMxIGV4aXN0cwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZG9jdW1lbnQtPmdldE9iamVjdEJ5SWQoMSkpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCcpOwoKICAgICAgICAkY29udGVudCA9ICc8PC9UeXBlL1BhZ2U+Pic7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3QgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCgkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRkb2N1bWVudC0+c2V0T2JqZWN0cyhhcnJheSgyID0+ICRvYmplY3QpKTsKICAgICAgICAvLyBPYmogIzEgaXMgbWlzc2luZwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFzc2VydC0+dmFyaWFibGUoJGRvY3VtZW50LT5nZXRPYmplY3RCeUlkKDEpKS0+aXNOdWxsKCk7CiAgICAgICAgLy8gT2JqICMyIGV4aXN0cwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZG9jdW1lbnQtPmdldE9iamVjdEJ5SWQoMikpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0T2JqZWN0cygpCiAgICB7CiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KCk7CiAgICAgICAgJG9iamVjdDEgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCgkZG9jdW1lbnQpOwogICAgICAgICRjb250ZW50ICA9ICc8PC9UeXBlL1BhZ2U+PnVucGFyc2VkIGNvbnRlbnQnOwogICAgICAgICRoZWFkZXIgICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCk7CgogICAgICAgICRvYmplY3QyID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2UoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkZG9jdW1lbnQtPnNldE9iamVjdHMoYXJyYXkoMSA9PiAkb2JqZWN0MSwgMiA9PiAkb2JqZWN0MikpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKGNvdW50KCRvYmplY3RzID0gJGRvY3VtZW50LT5nZXRPYmplY3RzKCkpKS0+aXNFcXVhbFRvKDIpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkb2JqZWN0c1sxXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcT2JqZWN0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRvYmplY3RzWzJdKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxPYmplY3QnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJG9iamVjdHNbMl0pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXFBhZ2UnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERpY3Rpb25hcnkoKQogICAgewogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoY291bnQoJG9iamVjdHMgPSAkZG9jdW1lbnQtPmdldERpY3Rpb25hcnkoKSkpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9iamVjdDEgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcT2JqZWN0KCRkb2N1bWVudCk7CiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9QYWdlPj4nOwogICAgICAgICRoZWFkZXIgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0MiA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYWdlKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGRvY3VtZW50LT5zZXRPYmplY3RzKGFycmF5KDEgPT4gJG9iamVjdDEsIDIgPT4gJG9iamVjdDIpKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKGNvdW50KCRvYmplY3RzID0gJGRvY3VtZW50LT5nZXREaWN0aW9uYXJ5KCkpKS0+aXNFcXVhbFRvKDEpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoY291bnQoJG9iamVjdHNbJ1BhZ2UnXSkpLT5pc0VxdWFsVG8oMSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2JqZWN0c1snUGFnZSddWzJdKS0+aXNFcXVhbFRvKDIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0T2JqZWN0c0J5VHlwZSgpCiAgICB7CiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KCk7CiAgICAgICAgJG9iamVjdDEgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCgkZG9jdW1lbnQpOwogICAgICAgICRjb250ZW50ICA9ICc8PC9UeXBlL1BhZ2U+Pic7CiAgICAgICAgJGhlYWRlciAgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0MiAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZSgkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRkb2N1bWVudC0+c2V0T2JqZWN0cyhhcnJheSgxID0+ICRvYmplY3QxLCAyID0+ICRvYmplY3QyKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcihjb3VudCgkb2JqZWN0cyA9ICRkb2N1bWVudC0+Z2V0T2JqZWN0c0J5VHlwZSgnUGFnZScpKSktPmlzRXF1YWxUbygxKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJG9iamVjdHNbMl0pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkb2JqZWN0c1syXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcUGFnZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0UGFnZXMoKQogICAgewogICAgICAgIC8vIE1pc3NpbmcgY2F0YWxvZwogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwogICAgICAgIHRyeSB7CiAgICAgICAgICAgICRwYWdlcyA9ICRkb2N1bWVudC0+Z2V0UGFnZXMoKTsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkcGFnZXMpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlKS0+aXNJbnN0YW5jZU9mKCdcRXhjZXB0aW9uJyk7CiAgICAgICAgfQoKICAgICAgICAvLyBMaXN0aW5nIHBhZ2VzIGZyb20gdHlwZSBQYWdlCiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9QYWdlPj4nOwogICAgICAgICRoZWFkZXIgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0MSA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYWdlKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3QyID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2UoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkZG9jdW1lbnQtPnNldE9iamVjdHMoYXJyYXkoMSA9PiAkb2JqZWN0MSwgMiA9PiAkb2JqZWN0MikpOwogICAgICAgICRwYWdlcyA9ICRkb2N1bWVudC0+Z2V0UGFnZXMoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKGNvdW50KCRwYWdlcykpLT5pc0VxdWFsVG8oMik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRwYWdlc1swXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcUGFnZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkcGFnZXNbMV0pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXFBhZ2UnKTsKCiAgICAgICAgLy8gTGlzdGluZyBwYWdlcyBmcm9tIHR5cGUgUGFnZXMgKGtpZHMpCiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9QYWdlPj4nOwogICAgICAgICRoZWFkZXIgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0MSA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYWdlKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3QyID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2UoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkaGVhZGVyICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCk7CiAgICAgICAgJG9iamVjdDMgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZSgkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRjb250ZW50ID0gJzw8L1R5cGUvUGFnZXMvS2lkc1sxIDAgUiAyIDAgUl0+Pic7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3Q0ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2VzKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9QYWdlcy9LaWRzWzMgMCBSXT4+JzsKICAgICAgICAkaGVhZGVyICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCk7CiAgICAgICAgJG9iamVjdDUgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZXMoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkZG9jdW1lbnQtPnNldE9iamVjdHMoCiAgICAgICAgICAgIGFycmF5KCcxXzAnID0+ICRvYmplY3QxLCAnMl8wJyA9PiAkb2JqZWN0MiwgJzNfMCcgPT4gJG9iamVjdDMsICc0XzAnID0+ICRvYmplY3Q0LCAnNV8wJyA9PiAkb2JqZWN0NSkKICAgICAgICApOwogICAgICAgICRwYWdlcyA9ICRkb2N1bWVudC0+Z2V0UGFnZXMoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKGNvdW50KCRwYWdlcykpLT5pc0VxdWFsVG8oMyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRwYWdlc1swXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcUGFnZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkcGFnZXNbMV0pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXFBhZ2UnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJHBhZ2VzWzJdKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxQYWdlJyk7CgogICAgICAgIC8vIExpc3RpbmcgcGFnZXMgZnJvbSB0eXBlIENhdGFsb2cKICAgICAgICAkY29udGVudCA9ICc8PC9UeXBlL1BhZ2U+Pic7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3QxID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2UoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkaGVhZGVyICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCk7CiAgICAgICAgJG9iamVjdDIgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZSgkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRoZWFkZXIgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0MyA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYWdlKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9QYWdlcy9LaWRzWzEgMCBSIDIgMCBSXT4+JzsKICAgICAgICAkaGVhZGVyICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCk7CiAgICAgICAgJG9iamVjdDQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZXMoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkY29udGVudCA9ICc8PC9UeXBlL1BhZ2VzL0tpZHNbNCAwIFIgMyAwIFJdPj4nOwogICAgICAgICRoZWFkZXIgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkb2JqZWN0NSA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYWdlcygkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRjb250ZW50ID0gJzw8L1R5cGUvQ2F0YWxvZy9QYWdlcyA1IDAgUiA+Pic7CiAgICAgICAgJGhlYWRlciAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRvYmplY3Q2ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2VzKCRkb2N1bWVudCwgJGhlYWRlcik7CiAgICAgICAgJGRvY3VtZW50LT5zZXRPYmplY3RzKAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICcxXzAnID0+ICRvYmplY3QxLAogICAgICAgICAgICAgICAgJzJfMCcgPT4gJG9iamVjdDIsCiAgICAgICAgICAgICAgICAnM18wJyA9PiAkb2JqZWN0MywKICAgICAgICAgICAgICAgICc0XzAnID0+ICRvYmplY3Q0LAogICAgICAgICAgICAgICAgJzVfMCcgPT4gJG9iamVjdDUsCiAgICAgICAgICAgICAgICAnNl8wJyA9PiAkb2JqZWN0NgogICAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgICAkcGFnZXMgPSAkZG9jdW1lbnQtPmdldFBhZ2VzKCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcihjb3VudCgkcGFnZXMpKS0+aXNFcXVhbFRvKDMpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkcGFnZXNbMF0pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXFBhZ2UnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJHBhZ2VzWzFdKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxQYWdlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRwYWdlc1syXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcUGFnZScpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBFbGVtZW50CiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHMKICovCmNsYXNzIEVsZW1lbnQgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudChhcnJheSgpKTsKCiAgICAgICAgLy8gT25seV92YWx1ZXMgPSBmYWxzZS4KICAgICAgICAkY29udGVudCAgPSAnL05hbWVUeXBlIC9GbGF0ZURlY29kZQogICAgICAgIC9Db250ZW50c1s0IDAgUiA0Ml0vRm9udHM8PC9GMSA0MS9GMiA0Mz4+L051bGxUeXBlCiAgICAgICAgbnVsbC9TdHJpbmdUeXBlKGhlbGxvKS9EYXRlVHlwZShEOjIwMTMwOTAxMjM1NTU1KzAyXCcwMFwnKS9YUmVmVHlwZSAyIDAgUgogICAgICAgIC9OdW1lcmljVHlwZSA4L0hleGFUeXBlPDAwMjA+L0Jvb2xlYW5UeXBlIGZhbHNlJzsKICAgICAgICAkb2Zmc2V0ICAgPSAwOwogICAgICAgICRlbGVtZW50cyA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRvZmZzZXQsIGZhbHNlKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGVsZW1lbnRzKS0+aGFzS2V5KCdOYW1lVHlwZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudHNbJ05hbWVUeXBlJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnRzWydOYW1lVHlwZSddLT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0ZsYXRlRGVjb2RlJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oYXJyYXlfa2V5X2V4aXN0cygnQ29udGVudHMnLCAkZWxlbWVudHMpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudHNbJ0NvbnRlbnRzJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudHNbJ0NvbnRlbnRzJ10tPmNvbnRhaW5zKDQyKSktPmlzRXF1YWxUbyh0cnVlKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbihhcnJheV9rZXlfZXhpc3RzKCdGb250cycsICRlbGVtZW50cykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50c1snRm9udHMnXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oYXJyYXlfa2V5X2V4aXN0cygnTnVsbFR5cGUnLCAkZWxlbWVudHMpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudHNbJ051bGxUeXBlJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bGwnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5jYXN0VG9TdHJpbmcoJGVsZW1lbnRzWydOdWxsVHlwZSddKS0+aXNFcXVhbFRvKCdudWxsJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oYXJyYXlfa2V5X2V4aXN0cygnU3RyaW5nVHlwZScsICRlbGVtZW50cykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50c1snU3RyaW5nVHlwZSddKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmcnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnRzWydTdHJpbmdUeXBlJ10tPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnaGVsbG8nKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbihhcnJheV9rZXlfZXhpc3RzKCdEYXRlVHlwZScsICRlbGVtZW50cykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50c1snRGF0ZVR5cGUnXSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZScpOwovLyAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50c1snRGF0ZVR5cGUnXSktPmlzRXF1YWxUbygnMjAxMy0wOS0wMVQyMzo1NTo1NSswMjowMCcpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKGFycmF5X2tleV9leGlzdHMoJ1hSZWZUeXBlJywgJGVsZW1lbnRzKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnRzWydYUmVmVHlwZSddKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50c1snWFJlZlR5cGUnXS0+Z2V0SWQoKSktPmlzRXF1YWxUbygnMl8wJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oYXJyYXlfa2V5X2V4aXN0cygnTnVtZXJpY1R5cGUnLCAkZWxlbWVudHMpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudHNbJ051bWVyaWNUeXBlJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5jYXN0VG9TdHJpbmcoJGVsZW1lbnRzWydOdW1lcmljVHlwZSddKS0+aXNFcXVhbFRvKCc4Jyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oYXJyYXlfa2V5X2V4aXN0cygnSGV4YVR5cGUnLCAkZWxlbWVudHMpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudHNbJ0hleGFUeXBlJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudHNbJ0hleGFUeXBlJ10tPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnICcpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKGFycmF5X2tleV9leGlzdHMoJ0Jvb2xlYW5UeXBlJywgJGVsZW1lbnRzKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnRzWydCb29sZWFuVHlwZSddKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudHNbJ0Jvb2xlYW5UeXBlJ10tPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbyhmYWxzZSk7CgogICAgICAgIC8vIE9ubHlfdmFsdWVzID0gdHJ1ZS4KICAgICAgICAkY29udGVudCAgPSAnL05hbWVUeXBlIC9GbGF0ZURlY29kZSc7CiAgICAgICAgJG9mZnNldCAgID0gMDsKICAgICAgICAkZWxlbWVudHMgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50OjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50LCAkb2Zmc2V0LCB0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkZWxlbWVudHMpLT5oYXNTaXplKDIpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyMik7CgogICAgICAgIC8vIFRlc3QgZXJyb3IuCiAgICAgICAgJGNvbnRlbnQgID0gJy9OYW1lVHlwZSAvRmxhdGVEZWNvZGUgJCQkJzsKICAgICAgICAkb2Zmc2V0ICAgPSAwOwogICAgICAgICRlbGVtZW50cyA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQ6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRvZmZzZXQsIGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkZWxlbWVudHMpLT5oYXNTaXplKDEpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyMik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKGtleSgkZWxlbWVudHMpKS0+aXNFcXVhbFRvKCdOYW1lVHlwZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdChjdXJyZW50KCRlbGVtZW50cykpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWUnKTsKCiAgICAgICAgJGNvbnRlbnQgID0gJy9OYW1lVHlwZSAkJCQnOwogICAgICAgICRvZmZzZXQgICA9IDA7CiAgICAgICAgJGVsZW1lbnRzID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudDo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCwgJG9mZnNldCwgZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkZWxlbWVudHMpLT5pc0VtcHR5KCk7CgogICAgICAgIC8qJHRoaXMtPmFzc2VydC0+Ym9vbGVhbihhcnJheV9rZXlfZXhpc3RzKCdOYW1lVHlwZScsICRlbGVtZW50cykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudHNbJ05hbWVUeXBlJ10pLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWUpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50c1snTmFtZVR5cGUnXS0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdGbGF0ZURlY29kZScpOyovCiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50KDQyKTsKICAgICAgICAkY29udGVudCA9ICRlbGVtZW50LT5nZXRDb250ZW50KCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkY29udGVudCktPmlzRXF1YWxUbyg0Mik7CgogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQoYXJyYXkoNCwgMikpOwogICAgICAgICRjb250ZW50ID0gJGVsZW1lbnQtPmdldENvbnRlbnQoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkY29udGVudCktPmhhc1NpemUoMik7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFcXVhbHMoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQoMik7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygyKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoOCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGFpbnMoKQogICAgewogICAgICAgICR2YWxfNCAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQoNCk7CiAgICAgICAgJHZhbF8yICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudCgyKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50KGFycmF5KCR2YWxfNCwgJHZhbF8yKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDIpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDgpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnQoMik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementArray.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwp1c2UgU21hbG90XFBkZlBhcnNlclxEb2N1bWVudDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOwp1c2UgU21hbG90XFBkZlBhcnNlclxQYWdlOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRBcnJheQogKgogKiBAcGFja2FnZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQKICovCmNsYXNzIEVsZW1lbnRBcnJheSBleHRlbmRzIGF0b3VtXHRlc3QKewogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RQYXJzZSgpCiAgICB7CiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KGFycmF5KCkpOwoKICAgICAgICAvLyBTa2lwcGVkLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgnQUJDJywgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk6OnBhcnNlKCcgLyBbIDQgMiBdICcsICRkb2N1bWVudCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgnIDAgWyA0IDIgXSAnLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRBcnJheTo6cGFyc2UoIiAwIFxuIFsgNCAyIF0gIiwgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CgogICAgICAgIC8vIFZhbGlkLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgnIFsgNCAyIF0gJywgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg0KSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygyKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg4KSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDgpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgnIFsgNCAyIF0nLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDQpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDIpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDgpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oOCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXk6OnBhcnNlKCdbIDQgMiBdJywgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg0KSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygyKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg4KSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDcpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgiIFxuIFsgNCAyIF0gIiwgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg0KSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygyKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyg4KSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDEwKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldENvbnRlbnQoKQogICAgewogICAgICAgICR2YWxfNCAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzQnKTsKICAgICAgICAkdmFsXzIgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyJyk7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50QXJyYXkoYXJyYXkoJHZhbF80LCAkdmFsXzIpKTsKCiAgICAgICAgJGNvbnRlbnQgPSAkZWxlbWVudC0+Z2V0Q29udGVudCgpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRjb250ZW50KS0+aGFzU2l6ZSgyKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRhaW5zKCkKICAgIHsKICAgICAgICAkdmFsXzQgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCc0Jyk7CiAgICAgICAgJHZhbF8yICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMicpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5KGFycmF5KCR2YWxfNCwgJHZhbF8yKSk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDIpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDgpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFJlc29sdmVYUmVmKCkKICAgIHsKICAgICAgICAvLyBEb2N1bWVudCB3aXRoIHRleHQuCiAgICAgICAgJGZpbGVuYW1lID0gX19ESVJfXyAuICcvLi4vLi4vLi4vLi4vLi4vLi4vc2FtcGxlcy9Eb2N1bWVudDFfcGRmY3JlYXRvcl9ub2NvbXByZXNzZWQucGRmJzsKICAgICAgICAkcGFyc2VyICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFyc2VyKCk7CiAgICAgICAgJGRvY3VtZW50ID0gJHBhcnNlci0+cGFyc2VGaWxlKCRmaWxlbmFtZSk7CiAgICAgICAgJG9iamVjdCAgID0gJGRvY3VtZW50LT5nZXRPYmplY3RCeUlkKCczXzAnKTsKICAgICAgICAka2lkcyAgICAgPSAkb2JqZWN0LT5nZXQoJ0tpZHMnKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRraWRzKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRBcnJheScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRraWRzLT5nZXRDb250ZW50KCkpLT5oYXNTaXplKDEpOwoKICAgICAgICAkcGFnZXMgPSAka2lkcy0+Z2V0Q29udGVudCgpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdChyZXNldCgkcGFnZXMpKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxQYWdlJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXREZXRhaWxzKCkKICAgIHsKLy8gICAgICAgIC8vIERvY3VtZW50IHdpdGggdGV4dC4KLy8gICAgICAgICRmaWxlbmFtZSA9IF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uLy4uL3NhbXBsZXMvRG9jdW1lbnQxX3BkZmNyZWF0b3Jfbm9jb21wcmVzc2VkLnBkZic7Ci8vICAgICAgICAkcGFyc2VyICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFyc2VyKCk7Ci8vICAgICAgICAkZG9jdW1lbnQgPSAkcGFyc2VyLT5wYXJzZUZpbGUoJGZpbGVuYW1lKTsKLy8gICAgICAgICRvYmplY3QgICA9ICRkb2N1bWVudC0+Z2V0T2JqZWN0QnlJZCgnM18wJyk7Ci8vICAgICAgICAvKiogQHZhciBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRBcnJheSAka2lkcyAqLwovLyAgICAgICAgJGtpZHMgICAgPSAkb2JqZWN0LT5nZXQoJ0tpZHMnKTsKLy8gICAgICAgICRkZXRhaWxzID0gJGtpZHMtPmdldERldGFpbHMoKTsKLy8KLy8gICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRkZXRhaWxzKS0+aGFzU2l6ZSgxKTsKLy8gICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZGV0YWlsc1swXVsnVHlwZSddKS0+aXNFcXVhbFRvKCdQYWdlJyk7CgogICAgICAgICRkb2N1bWVudCAgICAgICAgICA9IG5ldyBEb2N1bWVudCgpOwogICAgICAgICRjb250ZW50ICAgICAgICAgICA9ICc8PC9UeXBlL1BhZ2UvVHlwZXNbOF0vU2l6ZXNbMSAyIDMgNCA1IDw8L1N1YnR5cGUvWE9iamVjdD4+IFs4IFs5IDw8L0ZvbnRTaXplIDEwPj5dXV0+Pic7CiAgICAgICAgJGRldGFpbHNfcmVmZXJlbmNlID0gYXJyYXkoCiAgICAgICAgICAgICdUeXBlJyAgPT4gJ1BhZ2UnLAogICAgICAgICAgICAnVHlwZXMnID0+IGFycmF5KAogICAgICAgICAgICAgICAgOCwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ1NpemVzJyA9PiBhcnJheSgKICAgICAgICAgICAgICAgIDEsCiAgICAgICAgICAgICAgICAyLAogICAgICAgICAgICAgICAgMywKICAgICAgICAgICAgICAgIDQsCiAgICAgICAgICAgICAgICA1LAogICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgJ1N1YnR5cGUnID0+ICdYT2JqZWN0JywKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICA4LAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICA5LAogICAgICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGb250U2l6ZScgPT4gMTAsCiAgICAgICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICksCiAgICAgICAgKTsKICAgICAgICAkaGVhZGVyICAgICAgICAgICAgPSBIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQpOwogICAgICAgICRkZXRhaWxzICAgICAgICAgICA9ICRoZWFkZXItPmdldERldGFpbHMoKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGRldGFpbHMpLT5oYXNTaXplKDMpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRkZXRhaWxzKS0+aXNFcXVhbFRvKCRkZXRhaWxzX3JlZmVyZW5jZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkdmFsXzQgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCc0Jyk7CiAgICAgICAgJHZhbF8yICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMicpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5KGFycmF5KCR2YWxfNCwgJHZhbF8yKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCc0LDInKTsKCiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KGFycmF5KCkpOwogICAgICAgICRlbGVtZW50ICA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEFycmF5OjpwYXJzZSgnIFsgNCAyIF0nLCAkZG9jdW1lbnQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnNCwyJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementBoolean.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRCb29sZWFuCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudEJvb2xlYW4gZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50Qm9vbGVhbjo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIFsgZmFsc2UgXScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIDw8IHRydWUgPj4nLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50Qm9vbGVhbjo6cGFyc2UoJyAvIGZhbHNlICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIDAgdHJ1ZSAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50Qm9vbGVhbjo6cGFyc2UoIiAwIFxuIHRydWUgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwoKICAgICAgICAvLyBWYWxpZC4KICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIHRydWUgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg1KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIFRSVUUgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg1KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnIFRydWUnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDUpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW46OnBhcnNlKCd0cnVlJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg0KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgnRmFsc2UnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg1KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuOjpwYXJzZSgiIFxuIHRydWUgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg3KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldENvbnRlbnQoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW4oJ3RydWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50Qm9vbGVhbignZmFsc2UnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuKCd0cnVlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKHRydWUpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygxKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKGZhbHNlKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKG51bGwpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50Qm9vbGVhbignZmFsc2UnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoZmFsc2UpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygwKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKHRydWUpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMobnVsbCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGFpbnMoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW4oJ3RydWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyh0cnVlKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyhmYWxzZSkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKDEpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEJvb2xlYW4oJ3RydWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5jYXN0VG9TdHJpbmcoJGVsZW1lbnQpLT5pc0VxdWFsVG8oJ3RydWUnKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRCb29sZWFuKCdmYWxzZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnZmFsc2UnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementDate.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnREYXRlCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudERhdGUgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgnIFsgKEFCQykgNSA2IF0nLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTo6cGFyc2UoJyA8PCAoaW52YWxpZCkgPj4nLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTo6cGFyc2UoJyAvIChGbGF0ZURlY29kZSkgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU6OnBhcnNlKCcgMCAoRmxhdGVEZWNvZGUpICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgiIDAgXG4gKEZsYXRlRGVjb2RlKSAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CgogICAgICAgIC8vIFZhbGlkLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU6OnBhcnNlKCcgKEQ6MjAxMzA5MDEyMzU1NTUrMDJcJzAwXCcpICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICRlbGVtZW50LT5zZXRGb3JtYXQoJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzSW5zdGFuY2VPZignXERhdGVUaW1lJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAyOjAwJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDI2KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgnIChEOjIwMTMwOTAxMjM1NTU1KzAyXCcwMFwnKSAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkZWxlbWVudC0+c2V0Rm9ybWF0KCdjJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0luc3RhbmNlT2YoJ1xEYXRlVGltZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnMjAxMy0wOS0wMVQyMzo1NTo1NSswMjowMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyNik7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTo6cGFyc2UoJyAoRDoyMDEzMDkwMTIzNTU1NSswMlwnMDBcJyknLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkZWxlbWVudC0+c2V0Rm9ybWF0KCdjJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0luc3RhbmNlT2YoJ1xEYXRlVGltZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnMjAxMy0wOS0wMVQyMzo1NTo1NSswMjowMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyNik7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50RGF0ZTo6cGFyc2UoJyhEOjIwMTMwOTAxMjM1NTU1KzAyXCcwMFwnKScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICRlbGVtZW50LT5zZXRGb3JtYXQoJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzSW5zdGFuY2VPZignXERhdGVUaW1lJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAyOjAwJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDI1KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgiIFxuIChEOjIwMTMwOTAxMjM1NTU1KzAyJzAwJykgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJGVsZW1lbnQtPnNldEZvcm1hdCgnYycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNJbnN0YW5jZU9mKCdcRGF0ZVRpbWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5jYXN0VG9TdHJpbmcoJGVsZW1lbnQpLT5pc0VxdWFsVG8oJzIwMTMtMDktMDFUMjM6NTU6NTUrMDI6MDAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMjgpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU6OnBhcnNlKCIgXG4gKEQ6MjAxMzA5MDEyMzU1NTUpICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICRlbGVtZW50LT5zZXRGb3JtYXQoJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzSW5zdGFuY2VPZignXERhdGVUaW1lJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKG5ldyBcRGF0ZVRpbWUoJzIwMTMtMDktMDFUMjM6NTU6NTUnKSkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDIxKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgiKEQ6MjAxMzEyMDYwOTE4NDZaMDAnMDAnKSIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICRlbGVtZW50LT5zZXRGb3JtYXQoJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzSW5zdGFuY2VPZignXERhdGVUaW1lJyk7CiAgICAgICAgLy8kdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMobmV3IFxEYXRlVGltZSgnMjAxMy0wOS0wMVQyMzo1NTo1NScpKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMjUpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGU6OnBhcnNlKCIgXG4gKEQ6MS0yMy0yMDE0LCAxOTowMjoxNS0wMycwMCcpICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICRlbGVtZW50LT5zZXRGb3JtYXQoJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzSW5zdGFuY2VPZignXERhdGVUaW1lJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyMDE0LTAxLTIzVDE5OjAyOjE1LTAzOjAwJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDMzKTsKCiAgICAgICAgLy8gRm9ybWF0IGludmFsaWQKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlOjpwYXJzZSgiIFxuIChEOjIwMTMrMDInMDAnKSAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlKG5ldyBcRGF0ZVRpbWUoJzIwMTMtMDktMDEgMjM6NTU6NTUrMDI6MDAnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZGF0ZVRpbWUoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbyhuZXcgXERhdGVUaW1lKCcyMDEzLTA5LTAxIDIxOjU1OjU1KzAwOjAwJykpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlKCcyMDEzLTA5LTAxIDIzOjU1OjU1KzAyOjAwJyk7CiAgICAgICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oZmFsc2UpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0LT5leGNlcHRpb24oJGUpLT5oYXNNZXNzYWdlKCdEYXRlVGltZSByZXF1aXJlZC4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFcXVhbHMoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGUobmV3IFxEYXRlVGltZSgnMjAxMy0wOS0wMSAyMzo1NTo1NSswMjowMCcpKTsKICAgICAgICAkZWxlbWVudC0+c2V0Rm9ybWF0KCdjJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAyOjAwJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAxOjAwJykpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscyhuZXcgXERhdGVUaW1lKCcyMDEzLTA5LTAxVDIxOjU1OjU1KzAwOjAwJykpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscyhuZXcgXERhdGVUaW1lKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAxOjAwJykpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0FCQycpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRhaW5zKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlKG5ldyBcRGF0ZVRpbWUoJzIwMTMtMDktMDEgMjM6NTU6NTUrMDI6MDAnKSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJzIwMTMtMDktMDFUMjE6NTU6NTUrMDA6MDAnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnMjAxMy0wNi0xNScpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudERhdGUobmV3IFxEYXRlVGltZSgnMjAxMy0wOS0wMSAyMzo1NTo1NSswMjowMCcpKTsKICAgICAgICAkZWxlbWVudC0+c2V0Rm9ybWF0KCdjJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyMDEzLTA5LTAxVDIzOjU1OjU1KzAyOjAwJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementHexa.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRIZXhhCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudEhleGEgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50SGV4YTo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgnIFsgPDAwMjA+IDUgNiBdJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCcgPDwgPDAwMjA+ID4+JywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCcgLyA8MDAyMD4gJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCcgMCA8MDAyMD4gJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCIgMCBcbiA8MDAyMD4gIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwoKICAgICAgICAvLyBWYWxpZC4KICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgnIDwwMDIwPiAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnICcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg3KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgnIDwwMDIwPiAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnICcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg3KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgnIDwwMDIwPicsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCcgJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDcpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCc8MDAyMD4nLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnICcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg2KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgiIFxuIDwwMDIwPiAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnICcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg5KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgiIFxuIDw1NDY1NjE2ZDIwNGQ2MTZlNjE2NzY1NmQ2NTZlNzQyMDUzNzk3Mzc0NjU2ZDczPiAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnVGVhbSBNYW5hZ2VtZW50IFN5c3RlbXMnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNTEpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudEhleGE6OnBhcnNlKCIgXG4gPDUyNjU3MDZmNzI3NDQyNzU2OTZjNjQ2NTcyPiAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdSZXBvcnRCdWlsZGVyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDMxKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRIZXhhOjpwYXJzZSgiIFxuIDw0NDNhMzIzMDMxMzMzMTMyMzEzNzMxMzMzNDMwMzQzNTMwMzAyNzMwMzAyNz4gIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50KS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnREYXRlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyMDEzLTEyLTE3VDEzOjQwOjQ1KzAwOjAwJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDQ5KTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementMissing.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRNaXNzaW5nCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudE1pc3NpbmcgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRNaXNzaW5nKG51bGwpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscyhudWxsKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKHRydWUpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0EnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKGZhbHNlKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRNaXNzaW5nKG51bGwpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb250YWlucygpCiAgICB7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TWlzc2luZyhudWxsKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucyhudWxsKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnModHJ1ZSkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCdBJykpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKGZhbHNlKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRNaXNzaW5nKG51bGwpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementName.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnROYW1lCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudE5hbWUgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnIFsgL0FCQyA1IDYgXScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnIDw8IGludmFsaWQgPj4nLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJyAvIEZsYXRlRGVjb2RlICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnIDAgL0ZsYXRlRGVjb2RlICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgiIDAgXG4gL0ZsYXRlRGVjb2RlICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKCiAgICAgICAgLy8gVmFsaWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJyAvRmxhdGVEZWNvZGUgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0ZsYXRlRGVjb2RlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDEzKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnIC9GbGF0ZURlY29kZScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdGbGF0ZURlY29kZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxMyk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJy9GbGF0ZURlY29kZScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdGbGF0ZURlY29kZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxMik7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoIiBcbiAvRmxhdGVEZWNvZGUgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0ZsYXRlRGVjb2RlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDE1KTsKCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJy9GbGF0ZURlY29kZTInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnRmxhdGVEZWNvZGUyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDEzKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnL0ZsYXRlLURlY29kZTInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnRmxhdGUtRGVjb2RlMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxNCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJy9PSkhDWUQrQ2FtYnJpYScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdPSkhDWUQrQ2FtYnJpYScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxNSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZTo6cGFyc2UoJy9PSkhDWUQrQ2FtYnJpYSxCb2xkJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ09KSENZRCtDYW1icmlhLEJvbGQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMjApOwoKICAgICAgICAvLwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWU6OnBhcnNlKCcvRmxhdGVfRGVjb2RlMicsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdGbGF0ZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg2KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lOjpwYXJzZSgnL0ZsYXRlLkRlY29kZTInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnRmxhdGUuRGVjb2RlMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxNCk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZURlY29kZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdGbGF0ZURlY29kZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZURlY29kZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnRmxhdGVEZWNvZGUnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0ZsYXRlZGVjb2RlJykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZURlY29kZTInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0ZsYXRlRGVjb2RlMicpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnRmxhdGVEZWNvZGUzJykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZS1EZWNvZGUyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdGbGF0ZS1EZWNvZGUyJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdGbGF0ZS1EZWNvZGUzJykpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q29udGFpbnMoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWUoJ0ZsYXRlRGVjb2RlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0ZsYXRlRGVjb2RlJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0ZsYXRlZGVjb2RlJykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZURlY29kZTInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnRmxhdGVEZWNvZGUyJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0ZsYXRlRGVjb2RlMycpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZSgnRmxhdGUtRGVjb2RlMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCdGbGF0ZS1EZWNvZGUyJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0ZsYXRlLURlY29kZTMnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lKCdGbGF0ZURlY29kZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnRmxhdGVEZWNvZGUnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementNull.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnROdWxsCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudE51bGwgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsOjpwYXJzZSgnIFsgbnVsbCBdJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bGw6OnBhcnNlKCcgPDwgbnVsbCA+PicsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsOjpwYXJzZSgnIC8gbnVsbCAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoJyAwIG51bGwgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bGw6OnBhcnNlKCIgMCBcbiBudWxsICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKCiAgICAgICAgLy8gVmFsaWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoJyBudWxsICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oaXNfbnVsbCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoJyBudWxsICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oaXNfbnVsbCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoJyBudWxsJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbihpc19udWxsKCRlbGVtZW50LT5nZXRDb250ZW50KCkpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbyg1KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsOjpwYXJzZSgnbnVsbCcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oaXNfbnVsbCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVsbDo6cGFyc2UoIiBcbiBudWxsICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oaXNfbnVsbCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsKCdudWxsJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbihpc19udWxsKCRlbGVtZW50LT5nZXRDb250ZW50KCkpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsKCdudWxsJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKG51bGwpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscyhmYWxzZSkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygwKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKDEpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdENvbnRhaW5zKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsKCdudWxsJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMobnVsbCkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoZmFsc2UpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygwKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdWxsKCdudWxsJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCdudWxsJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementNumeric.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnROdW1lcmljCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudE51bWVyaWMgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYzo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljOjpwYXJzZSgnIFsgMiBdJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM6OnBhcnNlKCcgLzInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYzo6cGFyc2UoIiAvMiBcbiAyIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwoKICAgICAgICAvLyBWYWxpZC4KICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljOjpwYXJzZSgnIC0yJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZmxvYXQoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygtMi4wKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMyk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYzo6cGFyc2UoJzJCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmZsb2F0KCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oMi4wKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYzo6cGFyc2UoJyAyQkMnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5mbG9hdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKDIuMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDIpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM6OnBhcnNlKCcgLTJCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmZsb2F0KCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oLTIuMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDMpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM6OnBhcnNlKCcgLTInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5mbG9hdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKC0yLjApOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygzKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljOjpwYXJzZSgnIDIgMCBvYmonLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5mbG9hdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKDIuMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDIpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWM6OnBhcnNlKCIgXG4gLTIgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZmxvYXQoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygtMi4wKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb250ZW50KCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCdCJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZmxvYXQoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygwLjApOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yLjUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5mbG9hdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKC0yLjUpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZmxvYXQoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygtMi4wKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcgLTInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5mbG9hdCgkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKC0yLjApOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzIuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmZsb2F0KCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oMi41KTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+ZmxvYXQoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygyLjApOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcxJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdCJykpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzEuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnQicpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnMicpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJzMnKSktPmlzRXF1YWxUbyhmYWxzZSk7CgogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCctMicpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCctMycpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMi41Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCcyLjUnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyLjUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJzMuNScpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnLTIuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnLTIuNScpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yLjUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJy0zLjUnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb250YWlucygpCiAgICB7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCdCJykpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzEuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCdCJykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJzInKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJzMnKSktPmlzRXF1YWxUbyhmYWxzZSk7CgogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJy0yJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJy0yJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnLTInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnLTMnKSktPmlzRXF1YWxUbyhmYWxzZSk7CgogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE51bWVyaWMoJzIuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCcyLjUnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCcyLjUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnMy41JykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCctMi41Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJy0yLjUnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCctMi41Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJy0zLjUnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RfX3RvU3RyaW5nKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCdCJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcwJyk7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMUInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5jYXN0VG9TdHJpbmcoJGVsZW1lbnQpLT5pc0VxdWFsVG8oJzEnKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnMicpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROdW1lcmljKCctMicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnLTInKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnMi41Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCcyLjUnKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TnVtZXJpYygnLTIuNScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnLTIuNScpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementString.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRTdHJpbmcKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0c1xFbGVtZW50CiAqLwpjbGFzcyBFbGVtZW50U3RyaW5nIGV4dGVuZHMgYXRvdW1cdGVzdAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnNlKCkKICAgIHsKICAgICAgICAvLyBTa2lwcGVkLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmc6OnBhcnNlKCcgWyAoQUJDKSA1IDYgXScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmc6OnBhcnNlKCcgPDwgKGludmFsaWQpID4+JywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJyAvIChGbGF0ZURlY29kZSkgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJyAwIChGbGF0ZURlY29kZSkgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoIiAwIFxuIChGbGF0ZURlY29kZSkgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwoKICAgICAgICAvLyBWYWxpZC4KICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmc6OnBhcnNlKCcgKENvcHlyaWdodCkgJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0NvcHlyaWdodCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxMik7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nOjpwYXJzZSgnIChDb3B5cmlnaHQpICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdDb3B5cmlnaHQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMTIpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJyAoQ29weXJpZ2h0KScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdDb3B5cmlnaHQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMTIpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJyhDb3B5cmlnaHQpJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0NvcHlyaWdodCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxMSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nOjpwYXJzZSgnKENvcHktcmlnaHQyKScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdDb3B5LXJpZ2h0MicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxMyk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nOjpwYXJzZSgiIFxuIChDb3B5cmlnaHQpICIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdDb3B5cmlnaHQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMTQpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoJygpJywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyKTsKCiAgICAgICAgLy8gQ29tcGxleCBzdHVkeSBjYXNlIDogVW5pY29kZSArIG9jdGFsLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoIihBQkNcXCkpIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0FCQyknKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNyk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nOjpwYXJzZSgiKFx4RkVceEZGXFwwMDBNKSIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCdNJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDkpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoIig8MjA+KSIsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCcgJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDYpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZzo6cGFyc2UoIihHdXR0ZXJcXCBjb25zb2xlXFwgYXNzZW1ibHkpIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0d1dHRlciBjb25zb2xlIGFzc2VtYmx5Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDI3KTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldENvbnRlbnQoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZygnQ29weXJpZ2h0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJ0NvcHlyaWdodCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RXF1YWxzKCkKICAgIHsKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmcoJ0NvcHlSaWdodCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygnQ29weVJpZ2h0JykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdGbGF0ZWRlY29kZScpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nKCdDb3B5UmlnaHQyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdDb3B5UmlnaHQyJykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+ZXF1YWxzKCdDb3B5UmlnaHQzJykpLT5pc0VxdWFsVG8oZmFsc2UpOwoKICAgICAgICAkZWxlbWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJpbmcoJ0ZsYXRlLURlY29kZTInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0ZsYXRlLURlY29kZTInKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoJ0ZsYXRlLURlY29kZTMnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb250YWlucygpCiAgICB7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nKCdDb3B5UmlnaHQnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnQ29weVJpZ2h0JykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0NvcHlyaWdodCcpKS0+aXNFcXVhbFRvKGZhbHNlKTsKCiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RyaW5nKCdDb3B5UmlnaHQyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoJ0NvcHlSaWdodDInKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5jb250YWlucygnQ29weVJpZ2h0MycpKS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cmluZygnQ29weVJpZ2h0Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Y2FzdFRvU3RyaW5nKCRlbGVtZW50KS0+aXNFcXVhbFRvKCdDb3B5UmlnaHQnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementStruct.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRTdHJ1Y3QKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0c1xFbGVtZW50CiAqLwpjbGFzcyBFbGVtZW50U3RydWN0IGV4dGVuZHMgYXRvdW1cdGVzdAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnNlKCkKICAgIHsKICAgICAgICAkZG9jdW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQoYXJyYXkoKSk7CgogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RydWN0OjpwYXJzZSgnQUJDJywgJGRvY3VtZW50LCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50U3RydWN0OjpwYXJzZSgKICAgICAgICAgICAgJyBbIDw8IC9GaWx0ZXIgL0ZsYXRlRGVjb2RlID4+IF0nLAogICAgICAgICAgICAkZG9jdW1lbnQsCiAgICAgICAgICAgICRvZmZzZXQKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJ1Y3Q6OnBhcnNlKCcgLyA8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PiAnLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJ1Y3Q6OnBhcnNlKCcgMCA8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PiAnLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJ1Y3Q6OnBhcnNlKAogICAgICAgICAgICAiIDAgXG4gPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4gIiwKICAgICAgICAgICAgJGRvY3VtZW50LAogICAgICAgICAgICAkb2Zmc2V0CiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CgogICAgICAgIC8vIFZhbGlkLgogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cnVjdDo6cGFyc2UoJyA8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PiAnLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudCktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDI3KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJ1Y3Q6OnBhcnNlKCcgPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4nLCAkZG9jdW1lbnQsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkZWxlbWVudCktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDI3KTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRTdHJ1Y3Q6OnBhcnNlKCc8PCAvRmlsdGVyIC9GbGF0ZURlY29kZSA+PicsICRkb2N1bWVudCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRlbGVtZW50KS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxIZWFkZXInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMjYpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFN0cnVjdDo6cGFyc2UoCiAgICAgICAgICAgICIgXG4gPDwgL0ZpbHRlciAvRmxhdGVEZWNvZGUgPj4gIiwKICAgICAgICAgICAgJGRvY3VtZW50LAogICAgICAgICAgICAkb2Zmc2V0CiAgICAgICAgKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGVsZW1lbnQpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcicpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygyOSk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Element/ElementXRef.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzXEVsZW1lbnQ7Cgp1c2UgbWFnZWVrZ3V5XGF0b3VtOwoKLyoqCiAqIENsYXNzIEVsZW1lbnRYUmVmCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHNcRWxlbWVudAogKi8KY2xhc3MgRWxlbWVudFhSZWYgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0UGFyc2UoKQogICAgewogICAgICAgIC8vIFNraXBwZWQuCiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjo6cGFyc2UoJ0FCQycsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmOjpwYXJzZSgnIFsgNSAwIFIgXScsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmOjpwYXJzZSgnIDw8IDUgMCBSID4+JywgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWY6OnBhcnNlKCcgLyA1IDAgUiAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50KS0+aXNFcXVhbFRvKGZhbHNlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjo6cGFyc2UoJyAwIDUgMCBSICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygwKTsKICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmOjpwYXJzZSgiIDAgXG4gNSAwIFIgIiwgbnVsbCwgJG9mZnNldCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudCktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDApOwoKICAgICAgICAvLyBWYWxpZC4KICAgICAgICAkb2Zmc2V0ICA9IDA7CiAgICAgICAgJGVsZW1lbnQgPSBcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnRYUmVmOjpwYXJzZSgnIDUgMCBSICcsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCc1XzAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNik7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjo6cGFyc2UoJyA1IDAgUiAnLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnNV8wJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDYpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWY6OnBhcnNlKCcgNSAwIFInLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnNV8wJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDYpOwogICAgICAgICRvZmZzZXQgID0gMDsKICAgICAgICAkZWxlbWVudCA9IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWY6OnBhcnNlKCc1IDAgUicsIG51bGwsICRvZmZzZXQpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0Q29udGVudCgpKS0+aXNFcXVhbFRvKCc1XzAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRvZmZzZXQpLT5pc0VxdWFsVG8oNSk7CiAgICAgICAgJG9mZnNldCAgPSAwOwogICAgICAgICRlbGVtZW50ID0gXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZjo6cGFyc2UoIiBcbiA1IDAgUiAiLCBudWxsLCAkb2Zmc2V0KTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGVsZW1lbnQtPmdldENvbnRlbnQoKSktPmlzRXF1YWxUbygnNV8wJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0Q29udGVudCgpCiAgICB7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZignNV8wJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRlbGVtZW50LT5nZXRDb250ZW50KCkpLT5pc0VxdWFsVG8oJzVfMCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0SWQoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWYoJzVfMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZWxlbWVudC0+Z2V0SWQoKSktPmlzRXF1YWxUbygnNV8wJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RFcXVhbHMoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWYoJzVfMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscyg1KSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRlbGVtZW50LT5lcXVhbHMoOCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmVxdWFscygkZWxlbWVudCkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RDb250YWlucygpCiAgICB7CiAgICAgICAgJGVsZW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50WFJlZignNV8wJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoNSkpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkZWxlbWVudC0+Y29udGFpbnMoOCkpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGVsZW1lbnQtPmNvbnRhaW5zKCRlbGVtZW50KSktPmlzRXF1YWxUbyh0cnVlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdF9fdG9TdHJpbmcoKQogICAgewogICAgICAgICRlbGVtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudFhSZWYoJzVfMCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkZWxlbWVudCktPmlzRXF1YWxUbygnI09iaiM1XzAnKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Font.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOwoKLyoqCiAqIENsYXNzIEZvbnQKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0cwogKi8KY2xhc3MgRm9udCBleHRlbmRzIGF0b3VtXHRlc3QKewogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXROYW1lKCkKICAgIHsKICAgICAgICAkZmlsZW5hbWUgPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi8uLi8uLi9zYW1wbGVzL0RvY3VtZW50MV9wZGZjcmVhdG9yX25vY29tcHJlc3NlZC5wZGYnOwogICAgICAgICRwYXJzZXIgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYXJzZXIoKTsKICAgICAgICAkZG9jdW1lbnQgPSAkcGFyc2VyLT5wYXJzZUZpbGUoJGZpbGVuYW1lKTsKICAgICAgICAkZm9udHMgICAgPSAkZG9jdW1lbnQtPmdldEZvbnRzKCk7CiAgICAgICAgJGZvbnQgICAgID0gcmVzZXQoJGZvbnRzKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRmb250LT5nZXROYW1lKCkpLT5pc0VxdWFsVG8oJ09KSENZRCtDYW1icmlhLEJvbGQnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldFR5cGUoKQogICAgewogICAgICAgICRmaWxlbmFtZSA9IF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3NhbXBsZXMvRG9jdW1lbnQxX3BkZmNyZWF0b3Jfbm9jb21wcmVzc2VkLnBkZic7CiAgICAgICAgJHBhcnNlciAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhcnNlcigpOwogICAgICAgICRkb2N1bWVudCA9ICRwYXJzZXItPnBhcnNlRmlsZSgkZmlsZW5hbWUpOwogICAgICAgICRmb250cyAgICA9ICRkb2N1bWVudC0+Z2V0Rm9udHMoKTsKICAgICAgICAkZm9udCAgICAgPSByZXNldCgkZm9udHMpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGZvbnQtPmdldFR5cGUoKSktPmlzRXF1YWxUbygnVHJ1ZVR5cGUnKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdEdldERldGFpbHMoKQogICAgewogICAgICAgICRmaWxlbmFtZSAgPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi8uLi8uLi9zYW1wbGVzL0RvY3VtZW50MV9wZGZjcmVhdG9yX25vY29tcHJlc3NlZC5wZGYnOwogICAgICAgICRwYXJzZXIgICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFyc2VyKCk7CiAgICAgICAgJGRvY3VtZW50ICA9ICRwYXJzZXItPnBhcnNlRmlsZSgkZmlsZW5hbWUpOwogICAgICAgICRmb250cyAgICAgPSAkZG9jdW1lbnQtPmdldEZvbnRzKCk7CiAgICAgICAgJGZvbnQgICAgICA9IHJlc2V0KCRmb250cyk7CiAgICAgICAgJHJlZmVyZW5jZSA9IGFycmF5KAogICAgICAgICAgICAnTmFtZScgICAgICAgICAgID0+ICdPSkhDWUQrQ2FtYnJpYSxCb2xkJywKICAgICAgICAgICAgJ1R5cGUnICAgICAgICAgICA9PiAnVHJ1ZVR5cGUnLAogICAgICAgICAgICAnRW5jb2RpbmcnICAgICAgID0+ICdBbnNpJywKICAgICAgICAgICAgJ0Jhc2VGb250JyAgICAgICA9PiAnT0pIQ1lEK0NhbWJyaWEsQm9sZCcsCiAgICAgICAgICAgICdGb250RGVzY3JpcHRvcicgPT4KICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAnVHlwZScgICAgICAgICA9PiAnRm9udERlc2NyaXB0b3InLAogICAgICAgICAgICAgICAgJ0ZvbnROYW1lJyAgICAgPT4gJ09KSENZRCtDYW1icmlhLEJvbGQnLAogICAgICAgICAgICAgICAgJ0ZsYWdzJyAgICAgICAgPT4gNCwKICAgICAgICAgICAgICAgICdBc2NlbnQnICAgICAgID0+IDY5OSwKICAgICAgICAgICAgICAgICdDYXBIZWlnaHQnICAgID0+IDY5OSwKICAgICAgICAgICAgICAgICdEZXNjZW50JyAgICAgID0+IC03LAogICAgICAgICAgICAgICAgJ0l0YWxpY0FuZ2xlJyAgPT4gMCwKICAgICAgICAgICAgICAgICdTdGVtVicgICAgICAgID0+IDEyOCwKICAgICAgICAgICAgICAgICdNaXNzaW5nV2lkdGgnID0+IDY1OCwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ1RvVW5pY29kZScgICAgICA9PgogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICdGaWx0ZXInID0+ICdGbGF0ZURlY29kZScsCiAgICAgICAgICAgICAgICAnTGVuZ3RoJyA9PiAyMTksCiAgICAgICAgICAgICksCiAgICAgICAgICAgICdGaXJzdENoYXInICAgICAgPT4gMSwKICAgICAgICAgICAgJ0xhc3RDaGFyJyAgICAgICA9PiAxMSwKICAgICAgICAgICAgJ1dpZHRocycgICAgICAgICA9PgogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIDAgID0+IDcwNSwKICAgICAgICAgICAgICAgIDEgID0+IDU2OSwKICAgICAgICAgICAgICAgIDIgID0+IDQ2OSwKICAgICAgICAgICAgICAgIDMgID0+IDU5NywKICAgICAgICAgICAgICAgIDQgID0+IDg5MCwKICAgICAgICAgICAgICAgIDUgID0+IDUzMSwKICAgICAgICAgICAgICAgIDYgID0+IDYwNCwKICAgICAgICAgICAgICAgIDcgID0+IDM2NSwKICAgICAgICAgICAgICAgIDggID0+IDIyMCwKICAgICAgICAgICAgICAgIDkgID0+IDMxNCwKICAgICAgICAgICAgICAgIDEwID0+IDMwOCwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgJ1N1YnR5cGUnICAgICAgICA9PiAnVHJ1ZVR5cGUnLAogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGZvbnQtPmdldERldGFpbHMoKSktPmlzRXF1YWxUbygkcmVmZXJlbmNlKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFRyYW5zbGF0ZUNoYXIoKQogICAgewogICAgICAgICRmaWxlbmFtZSA9IF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3NhbXBsZXMvRG9jdW1lbnQxX3BkZmNyZWF0b3Jfbm9jb21wcmVzc2VkLnBkZic7CiAgICAgICAgJHBhcnNlciAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhcnNlcigpOwogICAgICAgICRkb2N1bWVudCA9ICRwYXJzZXItPnBhcnNlRmlsZSgkZmlsZW5hbWUpOwogICAgICAgICRmb250cyAgICA9ICRkb2N1bWVudC0+Z2V0Rm9udHMoKTsKICAgICAgICAvKiogQHZhciBcU21hbG90XFBkZlBhcnNlclxGb250ICRmb250ICovCiAgICAgICAgJGZvbnQgPSByZXNldCgkZm9udHMpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGZvbnQtPnRyYW5zbGF0ZUNoYXIoIlx4MDEiKSktPmlzRXF1YWxUbygnRCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZm9udC0+dHJhbnNsYXRlQ2hhcigiXHgwMiIpKS0+aXNFcXVhbFRvKCdvJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRmb250LT50cmFuc2xhdGVDaGFyKCJceDAzIikpLT5pc0VxdWFsVG8oJ2MnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGZvbnQtPnRyYW5zbGF0ZUNoYXIoIlx4MDQiKSktPmlzRXF1YWxUbygndScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkZm9udC0+dHJhbnNsYXRlQ2hhcigiXHg5OSIpKS0+aXNFcXVhbFRvKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6Ok1JU1NJTkcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0TG9hZFRyYW5zbGF0ZVRhYmxlKCkKICAgIHsKICAgICAgICAkZG9jdW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQoKTsKCiAgICAgICAgJGNvbnRlbnQgPSAnPDwvVHlwZS9Gb250IC9TdWJ0eXBlIC9UeXBlMCAvVG9Vbmljb2RlIDIgMCBSPj4nOwogICAgICAgICRoZWFkZXIgID0gSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50KTsKICAgICAgICAkZm9udCAgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxGb250KCRkb2N1bWVudCwgJGhlYWRlcik7CgogICAgICAgICRjb250ZW50ID0gJy9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpbgoxNCBkaWN0IGJlZ2luCmJlZ2luY21hcAovQ0lEU3lzdGVtSW5mbwo8PCAvUmVnaXN0cnkgKEFkb2JlKQovT3JkZXJpbmcgKFVDUykKL1N1cHBsZW1lbnQgMAo+PiBkZWYKL0NNYXBOYW1lIC9BZG9iZS1JZGVudGl0eS1VQ1MgZGVmCi9DTWFwVHlwZSAyIGRlZgoxIGJlZ2luY29kZXNwYWNlcmFuZ2UKPDAwMDA+IDxGRkZGPgplbmRjb2Rlc3BhY2VyYW5nZQozIGJlZ2luYmZjaGFyCjwwMDAzPiA8MDAyMD4KPDAwMEY+IDwwMDJDPgo8MDAxMT4gPDAwMkU+CmVuZGJmY2hhcgoyIGJlZ2luYmZyYW5nZQo8MDAxMz4gPDAwMTY+IDwwMDMwPgo8MDAxOD4gPDAwMUM+IDwwMDM1PgplbmRiZnJhbmdlCjcgYmVnaW5iZmNoYXIKPDAwMjM+IDwwMDQwPgo8MDAyNj4gPDAwNDM+CjwwMDI4PiA8MDA0NT4KPDAwMzA+IDwwMDREPgo8MDAzMz4gPDAwNTA+CjwwMDM1PiA8MDA1Mj4KPDAwMzk+IDwwMDU2PgplbmRiZmNoYXIKNCBiZWdpbmJmcmFuZ2UKPDAwNDQ+IDwwMDRDPiA8MDA2MT4KPDAwNEY+IDwwMDUyPiA8MDA2Qz4KPDAwNTQ+IDwwMDU5PiA8MDA3MT4KPDAwNUI+IDwwMDVDPiA8MDA3OD4KZW5kYmZyYW5nZQo0IGJlZ2luYmZjaGFyCjwwMDcwPiA8MDBFOT4KPDAwQUI+IDwyMDI2Pgo8MDBCMD4gPDAxNTM+CjwwMEI2PiA8MjAxOT4KZW5kYmZjaGFyCjEgYmVnaW5iZnJhbmdlCjwwMDg0PiA8MDA4Nj4gWzwwMDYxPiA8MDA3MT4gPDAwODE+XQplbmRiZnJhbmdlCmVuZGNtYXAKQ01hcE5hbWUgY3VycmVudGRpY3QgL0NNYXAgZGVmaW5lcmVzb3VyY2UgcG9wCmVuZAplbmQnOwogICAgICAgICR1bmljb2RlID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCgkZG9jdW1lbnQsIG51bGwsICRjb250ZW50KTsKCiAgICAgICAgJGRvY3VtZW50LT5zZXRPYmplY3RzKGFycmF5KCcxXzAnID0+ICRmb250LCAnMl8wJyA9PiAkdW5pY29kZSkpOwoKICAgICAgICAkZm9udC0+aW5pdCgpOwogICAgICAgIC8vIFRlc3QgcmVsb2FkCiAgICAgICAgJHRhYmxlID0gJGZvbnQtPmxvYWRUcmFuc2xhdGVUYWJsZSgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkdGFibGUpLT5oYXNTaXplKDQ3KTsKCiAgICAgICAgLy8gVGVzdCBjaGFycwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGFibGVbM10pLT5pc0VxdWFsVG8oJyAnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJHRhYmxlWzE1XSktPmlzRXF1YWxUbygnLCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGFibGVbMTddKS0+aXNFcXVhbFRvKCcuJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCR0YWJsZVszNV0pLT5pc0VxdWFsVG8oJ0AnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJHRhYmxlWzU3XSktPmlzRXF1YWxUbygnVicpOwoKICAgICAgICAvLyBUZXN0IHJhbmdlcwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGFibGVbODVdKS0+aXNFcXVhbFRvKCdyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCR0YWJsZVs5Ml0pLT5pc0VxdWFsVG8oJ3knKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERlY29kZUhleGFkZWNpbWFsKCkKICAgIHsKICAgICAgICAkaGV4YSA9ICc8MzIyMDQxPic7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUhleGFkZWNpbWFsKCRoZXhhKSktPmlzRXF1YWxUbygiMiBBIik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUhleGFkZWNpbWFsKCRoZXhhLCBmYWxzZSkpLT5pc0VxdWFsVG8oIjIgQSIpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSwgdHJ1ZSkpLT5pc0VxdWFsVG8oIigyIEEpIik7CgogICAgICAgICRoZXhhID0gJzwwMDMyMDAyMDAwNDE+JzsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlSGV4YWRlY2ltYWwoJGhleGEpKS0+aXNFcXVhbFRvKCJceDAwMlx4MDAgXHgwMEEiKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlSGV4YWRlY2ltYWwoJGhleGEsIGZhbHNlKSktPmlzRXF1YWxUbygiXHgwMDJceDAwIFx4MDBBIik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUhleGFkZWNpbWFsKCRoZXhhLCB0cnVlKSktPmlzRXF1YWxUbygiKFx4MDAyXHgwMCBceDAwQSkiKTsKCiAgICAgICAgJGhleGEgPSAnPDAwMzIwMDIwPiA4IDwwMDQxPic7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUhleGFkZWNpbWFsKCRoZXhhKSktPmlzRXF1YWxUbygiXHgwMDJceDAwICA4IFx4MDBBIik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUhleGFkZWNpbWFsKCRoZXhhLCBmYWxzZSkpLT5pc0VxdWFsVG8oIlx4MDAyXHgwMCAgOCBceDAwQSIpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSwgdHJ1ZSkpLT5pc0VxdWFsVG8oCiAgICAgICAgICAgICIoXHgwMDJceDAwICkgOCAoXHgwMEEpIgogICAgICAgICk7CgogICAgICAgICRoZXhhID0gJzwzMjIwPiA4IDw0MT4nOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSkpLT5pc0VxdWFsVG8oIjIgIDggQSIpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSwgZmFsc2UpKS0+aXNFcXVhbFRvKCIyICA4IEEiKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlSGV4YWRlY2ltYWwoJGhleGEsIHRydWUpKS0+aXNFcXVhbFRvKCIoMiApIDggKEEpIik7CgogICAgICAgICRoZXhhID0gJzwwMDMyMDAyMDAwNUM+LTEwPDAwNDE+JzsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlSGV4YWRlY2ltYWwoJGhleGEpKS0+aXNFcXVhbFRvKCJceDAwMlx4MDAgXHgwMFxcLTEwXHgwMEEiKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlSGV4YWRlY2ltYWwoJGhleGEsIGZhbHNlKSktPmlzRXF1YWxUbygKICAgICAgICAgICAgIlx4MDAyXHgwMCBceDAwXFwtMTBceDAwQSIKICAgICAgICApOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVIZXhhZGVjaW1hbCgkaGV4YSwgdHJ1ZSkpLT5pc0VxdWFsVG8oCiAgICAgICAgICAgICIoXHgwMDJceDAwIFx4MDBcXFxcKS0xMChceDAwQSkiCiAgICAgICAgKTsKICAgIH0KCiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdERlY29kZU9jdGFsKCkKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlT2N0YWwoIlxcMTAxXFwxMDJcXDA0MFxcMTAzIikpLT5pc0VxdWFsVG8oJ0FCIEMnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlT2N0YWwoIlxcMTAxXFwxMDJcXDA0MFxcMTAzRCIpKS0+aXNFcXVhbFRvKCdBQiBDRCcpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0RGVjb2RlRW50aXRpZXMoKQogICAgewogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZyhcU21hbG90XFBkZlBhcnNlclxGb250OjpkZWNvZGVFbnRpdGllcygiRmlsZSMyMFR5cGUiKSktPmlzRXF1YWxUbygnRmlsZSBUeXBlJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKFxTbWFsb3RcUGRmUGFyc2VyXEZvbnQ6OmRlY29kZUVudGl0aWVzKCJGaWxlIyMyMFR5I3BlIikpLT5pc0VxdWFsVG8oJ0ZpbGUjIFR5I3BlJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REZWNvZGVVbmljb2RlKCkKICAgIHsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoXFNtYWxvdFxQZGZQYXJzZXJcRm9udDo6ZGVjb2RlVW5pY29kZSgiXHhGRVx4RkZceDAwQVx4MDBCIikpLT5pc0VxdWFsVG8oJ0FCJyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3REZWNvZGVUZXh0KCkKICAgIHsKICAgICAgICAkZmlsZW5hbWUgPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi8uLi8uLi9zYW1wbGVzL0RvY3VtZW50MV9wZGZjcmVhdG9yX25vY29tcHJlc3NlZC5wZGYnOwogICAgICAgICRwYXJzZXIgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYXJzZXIoKTsKICAgICAgICAkZG9jdW1lbnQgPSAkcGFyc2VyLT5wYXJzZUZpbGUoJGZpbGVuYW1lKTsKICAgICAgICAkZm9udHMgICAgPSAkZG9jdW1lbnQtPmdldEZvbnRzKCk7CiAgICAgICAgLyoqIEB2YXIgXFNtYWxvdFxQZGZQYXJzZXJcRm9udCAkZm9udCAqLwogICAgICAgIC8vIENhbWJyaWEKICAgICAgICAkZm9udCAgICAgPSByZXNldCgkZm9udHMpOwogICAgICAgICRjb21tYW5kcyA9IGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICd0JyA9PiAnJywKICAgICAgICAgICAgICAgICdjJyA9PiAiXHgwMVx4MDIiLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICd0JyA9PiAnbicsCiAgICAgICAgICAgICAgICAnYycgPT4gLTEwLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICd0JyA9PiAnJywKICAgICAgICAgICAgICAgICdjJyA9PiAiXHgwMyIsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ3QnID0+ICcnLAogICAgICAgICAgICAgICAgJ2MnID0+ICJceDA0IiwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAndCcgPT4gJ24nLAogICAgICAgICAgICAgICAgJ2MnID0+IC0xMDAsCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgJ3QnID0+ICc8JywKICAgICAgICAgICAgICAgICdjJyA9PiAiMDEwMjAzMDQiLAogICAgICAgICAgICApLAogICAgICAgICk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRmb250LT5kZWNvZGVUZXh0KCRjb21tYW5kcykpLT5pc0VxdWFsVG8oJ0RvY3UgRG9jdScpOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Header.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBIZWFkZXIKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0cwogKi8KY2xhc3MgSGVhZGVyIGV4dGVuZHMgYXRvdW1cdGVzdAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnNlKCkKICAgIHsKICAgICAgICAkZG9jdW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQoKTsKCiAgICAgICAgJGNvbnRlbnQgID0gJzw8L1R5cGUvUGFnZS9TdWJUeXBlL1RleHQ+PmZvbyc7CiAgICAgICAgJHBvc2l0aW9uID0gMDsKICAgICAgICAkaGVhZGVyICAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRwb3NpdGlvbik7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkaGVhZGVyKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxIZWFkZXInKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5pbnRlZ2VyKCRwb3NpdGlvbiktPmlzRXF1YWxUbygyNyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGhlYWRlci0+Z2V0RWxlbWVudHMoKSktPmhhc1NpemUoMik7CgogICAgICAgIC8vIE5vIGhlYWRlciB0byBwYXJzZQogICAgICAgICR0aGlzLT5hc3NlcnQtPmNhc3RUb1N0cmluZygkaGVhZGVyLT5nZXQoJ1R5cGUnKSktPmlzRXF1YWxUbygnUGFnZScpOwogICAgICAgICRjb250ZW50ICA9ICdmb28nOwogICAgICAgICRwb3NpdGlvbiA9IDA7CiAgICAgICAgJGhlYWRlciAgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50LCAkcG9zaXRpb24pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGhlYWRlciktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyJyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkcG9zaXRpb24pLT5pc0VxdWFsVG8oMCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGhlYWRlci0+Z2V0RWxlbWVudHMoKSktPmhhc1NpemUoMCk7CgogICAgICAgICRwb3NpdGlvbiA9IDA7CiAgICAgICAgJGNvbnRlbnQgID0gIjw8L0NyZWF0aW9uRGF0ZShEOjIwMTAwMzA5MTg0ODAzKzAxJzAwJykvQXV0aG9yKFV0aWxpc2F0ZXVyKS9DcmVhdG9yKFBTY3JpcHQ1LmRsbCBWZXJzaW9uIDUuMi4yKS9Qcm9kdWNlcihBY3JvYmF0IERpc3RpbGxlciA3LjAuNSBcKFdpbmRvd3NcKSkvTW9kRGF0ZShEOjIwMTAwMzEwMTA0ODEwKzAxJzAwJykvVGl0bGUoTWljcm9zb2Z0IFdvcmQgLSBDTEVNSS5kb2N4KT4+IjsKICAgICAgICAkaGVhZGVyICAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRwb3NpdGlvbik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkcG9zaXRpb24pLT5pc0VxdWFsVG8oMjEyKTsKCiAgICAgICAgJHBvc2l0aW9uID0gMDsKICAgICAgICAkY29udGVudCAgPSAnWzUgMCBSIF0gZm9vJzsKICAgICAgICAkaGVhZGVyICAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRwb3NpdGlvbik7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkcG9zaXRpb24pLT5pc0VxdWFsVG8oOCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGhlYWRlci0+Z2V0RWxlbWVudHMoKSktPmhhc1NpemUoMSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRFbGVtZW50cygpCiAgICB7CiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KCk7CgogICAgICAgICRjb250ZW50ICA9ICc8PC9UeXBlL1BhZ2UvU3VidHlwZS9UZXh0Pj5mb28nOwogICAgICAgICRwb3NpdGlvbiA9IDA7CiAgICAgICAgJGhlYWRlciAgID0gXFNtYWxvdFxQZGZQYXJzZXJcSGVhZGVyOjpwYXJzZSgkY29udGVudCwgJGRvY3VtZW50LCAkcG9zaXRpb24pOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkZWxlbWVudHMgPSAkaGVhZGVyLT5nZXRFbGVtZW50cygpKS0+aGFzU2l6ZSgyKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoY3VycmVudCgkZWxlbWVudHMpKS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxFbGVtZW50XEVsZW1lbnROYW1lJyk7CgogICAgICAgICR0eXBlcyA9ICRoZWFkZXItPmdldEVsZW1lbnRUeXBlcygpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCR0eXBlcyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCR0eXBlc1snVHlwZSddKS0+aXNFcXVhbFRvKCdTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE5hbWUnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJHR5cGVzWydTdWJ0eXBlJ10pLT5pc0VxdWFsVG8oJ1NtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZScpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0SGFzKCkKICAgIHsKICAgICAgICAkZG9jdW1lbnQgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcRG9jdW1lbnQoKTsKCiAgICAgICAgJGNvbnRlbnQgID0gJzw8L1R5cGUvUGFnZS9TdWJUeXBlL1RleHQvRm9udCA1IDAgUj4+Zm9vJzsKICAgICAgICAkcG9zaXRpb24gPSAwOwogICAgICAgICRoZWFkZXIgICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCwgJHBvc2l0aW9uKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkaGVhZGVyLT5oYXMoJ1R5cGUnKSktPmlzRXF1YWxUbyh0cnVlKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKCRoZWFkZXItPmhhcygnU3ViVHlwZScpKS0+aXNFcXVhbFRvKHRydWUpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4oJGhlYWRlci0+aGFzKCdGb250JykpLT5pc0VxdWFsVG8odHJ1ZSk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+Ym9vbGVhbigkaGVhZGVyLT5oYXMoJ1RleHQnKSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXQoKQogICAgewogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwoKICAgICAgICAkY29udGVudCAgPSAnPDwvVHlwZS9QYWdlL1N1YlR5cGUvVGV4dC9Gb250IDUgMCBSL1Jlc291cmNlcyA4IDAgUj4+Zm9vJzsKICAgICAgICAkcG9zaXRpb24gPSAwOwogICAgICAgICRoZWFkZXIgICA9IFxTbWFsb3RcUGRmUGFyc2VyXEhlYWRlcjo6cGFyc2UoJGNvbnRlbnQsICRkb2N1bWVudCwgJHBvc2l0aW9uKTsKICAgICAgICAkb2JqZWN0ICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFnZSgkZG9jdW1lbnQsICRoZWFkZXIpOwogICAgICAgICRkb2N1bWVudC0+c2V0T2JqZWN0cyhhcnJheSgnNV8wJyA9PiAkb2JqZWN0KSk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkaGVhZGVyLT5nZXQoJ1R5cGUnKSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkaGVhZGVyLT5nZXQoJ1N1YlR5cGUnKSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TmFtZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkaGVhZGVyLT5nZXQoJ0ZvbnQnKSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcUGFnZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPm9iamVjdCgkaGVhZGVyLT5nZXQoJ0ltYWdlJykpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEVsZW1lbnRcRWxlbWVudE1pc3NpbmcnKTsKCiAgICAgICAgdHJ5IHsKICAgICAgICAgICAgJHJlc291cmNlcyA9ICRoZWFkZXItPmdldCgnUmVzb3VyY2VzJyk7CiAgICAgICAgICAgICR0aGlzLT5hc3NlcnQtPmJvb2xlYW4odHJ1ZSktPmlzRXF1YWxUbyhmYWxzZSk7CiAgICAgICAgfSBjYXRjaCAoXEV4Y2VwdGlvbiAkZSkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0LT5leGNlcHRpb24oJGUpLT5oYXNNZXNzYWdlKCdNaXNzaW5nIG9iamVjdCByZWZlcmVuY2UgIzhfMC4nKTsKICAgICAgICB9CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RSZXNvbHZlWFJlZigpCiAgICB7CiAgICAgICAgJGRvY3VtZW50ID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KCk7CiAgICAgICAgJGNvbnRlbnQgID0gJzw8L1R5cGUvUGFnZS9TdWJUeXBlL1RleHQvRm9udCA1IDAgUi9SZXNvdXJjZXMgOCAwIFI+PmZvbyc7CiAgICAgICAgJHBvc2l0aW9uID0gMDsKICAgICAgICAkaGVhZGVyICAgPSBcU21hbG90XFBkZlBhcnNlclxIZWFkZXI6OnBhcnNlKCRjb250ZW50LCAkZG9jdW1lbnQsICRwb3NpdGlvbik7CiAgICAgICAgJG9iamVjdCAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhZ2UoJGRvY3VtZW50LCAkaGVhZGVyKTsKICAgICAgICAkZG9jdW1lbnQtPnNldE9iamVjdHMoYXJyYXkoJzVfMCcgPT4gJG9iamVjdCkpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGhlYWRlci0+Z2V0KCdGb250JykpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCcpOwoKICAgICAgICB0cnkgewogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGhlYWRlci0+Z2V0KCdSZXNvdXJjZXMnKSktPmlzSW5zdGFuY2VPZignXFNtYWxvdFxQZGZQYXJzZXJcRWxlbWVudFxFbGVtZW50TWlzc2luZycpOwogICAgICAgICAgICAkdGhpcy0+YXNzZXJ0LT5ib29sZWFuKHRydWUpLT5pc0VxdWFsVG8oZmFsc2UpOwogICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydC0+ZXhjZXB0aW9uKCRlKS0+aGFzTWVzc2FnZSgnTWlzc2luZyBvYmplY3QgcmVmZXJlbmNlICM4XzAuJyk7CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Object.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBPYmplY3QKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0cwogKi8KY2xhc3MgT2JqZWN0IGV4dGVuZHMgYXRvdW1cdGVzdAp7CiAgICBjb25zdCBUWVBFID0gJ3QnOwoKICAgIGNvbnN0IE9QRVJBVE9SID0gJ28nOwoKICAgIGNvbnN0IENPTU1BTkQgPSAnYyc7CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRUZXh0UGFydHMoKQogICAgewogICAgfQoKLy8gICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRDb21tYW5kc0ltYWdlKCkKLy8gICAgewovLyAgICAgICAgJGNvbnRlbnQgPSAiL0NTL1JHQgovLy9XIDIyCi8vL0ggMQovLy9CUEMgOAovLy9GL0ZsCi8vL0RQPDwvUHJlZGljdG9yIDE1Ci8vL0NvbHVtbnMgMjIKLy8vQ29sb3JzIDM+PgovL0lEIFx4MDBceDUwY1x4NjMKLy9FSSBRCi8vcSAtMTI0Ljc3NCAxMjQuMTI3IDUuNjQyMTMgNS42NzE1NCA5MzAuMzA3IDQ0MzYuOTUgY20KLy9CSQovLyI7Ci8vCi8vICAgICAgICAkZG9jdW1lbnQgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXERvY3VtZW50KCk7Ci8vICAgICAgICAkb2JqZWN0ICAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXE9iamVjdCgkZG9jdW1lbnQpOwovLyAgICAgICAgJG9mZnNldCAgICA9IDA7Ci8vICAgICAgICAkcGFydHMgICAgID0gJG9iamVjdC0+Z2V0Q29tbWFuZHNJbWFnZSgkY29udGVudCwgJG9mZnNldCk7Ci8vICAgICAgICAkcmVmZXJlbmNlID0gYXJyYXkoCi8vICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgPT4gJy8nLAovLyAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnQ1MnLAovLyAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EID0+ICdSR0InLAovLyAgICAgICAgICAgICksCi8vICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgPT4gJy8nLAovLyAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnVycsCi8vICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgPT4gJzIyJywKLy8gICAgICAgICAgICApLAovLyAgICAgICAgICAgIGFycmF5KAovLyAgICAgICAgICAgICAgICBzZWxmOjpUWVBFID0+ICcvJywKLy8gICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJ0gnLAovLyAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EID0+ICcxJywKLy8gICAgICAgICAgICApLAovLyAgICAgICAgICAgIGFycmF5KAovLyAgICAgICAgICAgICAgICBzZWxmOjpUWVBFID0+ICcvJywKLy8gICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJ0JQQycsCi8vICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgPT4gJzgnLAovLyAgICAgICAgICAgICksCi8vICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgPT4gJy8nLAovLyAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnRicsCi8vICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgPT4gJ0ZsJywKLy8gICAgICAgICAgICApLAovLyAgICAgICAgICAgIGFycmF5KAovLyAgICAgICAgICAgICAgICBzZWxmOjpUWVBFID0+ICdzdHJ1Y3QnLAovLyAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnRFAnLAovLyAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EID0+IGFycmF5KAovLyAgICAgICAgICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6VFlQRSA9PiAnLycsCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJ1ByZWRpY3RvcicsCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCA9PiAnMTUnLAovLyAgICAgICAgICAgICAgICAgICAgKSwKLy8gICAgICAgICAgICAgICAgICAgIGFycmF5KAovLyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgPT4gJy8nLAovLyAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdDb2x1bW5zJywKLy8gICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EID0+ICcyMicsCi8vICAgICAgICAgICAgICAgICAgICApLAovLyAgICAgICAgICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6VFlQRSA9PiAnLycsCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJ0NvbG9ycycsCi8vICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCA9PiAnMycsCi8vICAgICAgICAgICAgICAgICAgICApLAovLyAgICAgICAgICAgICAgICApLAovLyAgICAgICAgICAgICksCi8vICAgICAgICAgICAgYXJyYXkoCi8vICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgPT4gJycsCi8vICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdJRCcsCi8vICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgPT4gIlx4MDBceDUwY1x4NjMiLAovLyAgICAgICAgICAgICksCi8vICAgICAgICApOwovLwovLyAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJHBhcnRzKS0+aXNFcXVhbFRvKCRyZWZlcmVuY2UpOwovLyAgICAgICAgJHRoaXMtPmFzc2VydC0+aW50ZWdlcigkb2Zmc2V0KS0+aXNFcXVhbFRvKDgzKTsKLy8gICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0Q29tbWFuZHNUZXh0KCkKICAgIHsKICAgICAgICAkY29udGVudCA9ICIvUjE0IDMwIFRmIDAuOTk5MDE2IDAgMCAxIDEzNy40CjM0Mi41NjEgVG0KWyhBKS0xNjguODU0KCBCQyBEKS0yMjAuOTA1KFxcKEVcXCkpMjAuOTA1PDIwPl0KVEogL1IxNCAxNy4xNiBUZiA8MjA+IFRqCjAuOTk5MDE0IDAgMCAxIDMzNi44NCAzMTkuMTYxIFRtIFQqICggXHgwMG0pVGoKL1IxNCAyMC4wNCBUZgpFVCBRCnEgLTEyNC43NzQgMTI0LjEyNyA1LjY0MjEzIDUuNjcxNTQgOTMwLjMwNyA0NDM2Ljk1IGNtCkJJIjsKCiAgICAgICAgJGRvY3VtZW50ICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwogICAgICAgICRvYmplY3QgICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcT2JqZWN0KCRkb2N1bWVudCk7CiAgICAgICAgJG9mZnNldCAgICA9IDA7CiAgICAgICAgJHBhcnRzICAgICA9ICRvYmplY3QtPmdldENvbW1hbmRzVGV4dCgkY29udGVudCwgJG9mZnNldCk7CiAgICAgICAgJHJlZmVyZW5jZSA9IGFycmF5KAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICcvJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUZicsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnUjE0IDMwJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUbScsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAiMC45OTkwMTYgMCAwIDEgMTM3LjRcbjM0Mi41NjEiLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICdbJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUSicsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiBhcnJheSgKICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6VFlQRSAgICAgPT4gJygnLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCAgPT4gJ0EnLAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICduJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgID0+ICctMTY4Ljg1NCcsCiAgICAgICAgICAgICAgICAgICAgKSwKICAgICAgICAgICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6VFlQRSAgICAgPT4gJygnLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCAgPT4gJyBCQyBEJywKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnbicsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnLTIyMC45MDUnLAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICcoJywKICAgICAgICAgICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJycsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgID0+ICdcXChFXFwpJywKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnbicsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnMjAuOTA1JywKICAgICAgICAgICAgICAgICAgICApLAogICAgICAgICAgICAgICAgICAgIGFycmF5KAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnPCcsCiAgICAgICAgICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICcnLAogICAgICAgICAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnMjAnLAogICAgICAgICAgICAgICAgICAgICksCiAgICAgICAgICAgICAgICApLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICcvJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUZicsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnUjE0IDE3LjE2JywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnPCcsCiAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnVGonLAogICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCAgPT4gJzIwJywKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUbScsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAnMC45OTkwMTQgMCAwIDEgMzM2Ljg0IDMxOS4xNjEnLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICcnLAogICAgICAgICAgICAgICAgc2VsZjo6T1BFUkFUT1IgPT4gJ1QqJywKICAgICAgICAgICAgICAgIHNlbGY6OkNPTU1BTkQgID0+ICcnLAogICAgICAgICAgICApLAogICAgICAgICAgICBhcnJheSgKICAgICAgICAgICAgICAgIHNlbGY6OlRZUEUgICAgID0+ICcoJywKICAgICAgICAgICAgICAgIHNlbGY6Ok9QRVJBVE9SID0+ICdUaicsCiAgICAgICAgICAgICAgICBzZWxmOjpDT01NQU5EICA9PiAiIFx4MDBtIiwKICAgICAgICAgICAgKSwKICAgICAgICAgICAgYXJyYXkoCiAgICAgICAgICAgICAgICBzZWxmOjpUWVBFICAgICA9PiAnLycsCiAgICAgICAgICAgICAgICBzZWxmOjpPUEVSQVRPUiA9PiAnVGYnLAogICAgICAgICAgICAgICAgc2VsZjo6Q09NTUFORCAgPT4gJ1IxNCAyMC4wNCcsCiAgICAgICAgICAgICksCiAgICAgICAgKTsKCiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJHBhcnRzKS0+aXNFcXVhbFRvKCRyZWZlcmVuY2UpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmludGVnZXIoJG9mZnNldCktPmlzRXF1YWxUbygxNzIpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0Q2xlYW5Db250ZW50KCkKICAgIHsKICAgICAgICAkY29udGVudCA9ICcvU2hhcGUgPDwvTUNJRCA8PCAvRm9udDw4Pj4+IEJUID4+QkRDClEKL0NTMCBjcyAxIDEgMCAgc2NuCjEgaQovR1MwIGdzCkJUCi9UVDAgMSBUZgowLjAwMDcgVGMgMC4wMDE4IFR3IDAgIFRzIDEwMCAgVHogMCBUciAyNCAwIDAgMjQgNTEuMyA2MzkuMjYwMjUgVG0KKE1vZGlmaWNhdGlvW25zXSBhdSBcXCgxNFxcKSBzZXB0ZW1icmUgMjAwOSBFVCAyMDEwKVRqCkVNQwooQUJDKSBUagoKWyAoYSktNC41KGIpNihjKTguOCAoIGZzZGZzZGZzZGZbXXNkKSBdIFRECgpFVAovU2hhcGUgPDwvTUNJRCAyID4+QkRDCnEKMC4wMyA4NDEnOwoKICAgICAgICAkZXhwZWN0ZWQgPSAnX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpRCi9DUzAgY3MgMSAxIDAgIHNjbgoxIGkKL0dTMCBncwpCVAovVFQwIDEgVGYKMC4wMDA3IFRjIDAuMDAxOCBUdyAwICBUcyAxMDAgIFR6IDAgVHIgMjQgMCAwIDI0IDUxLjMgNjM5LjI2MDI1IFRtCihfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18pVGoKX19fCihfX18pIFRqCgpbX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX10gVEQKCkVUCl9fX19fX19fX19fX19fX19fX19fX18KcQowLjAzIDg0MSc7CgogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwogICAgICAgICRvYmplY3QgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxPYmplY3QoJGRvY3VtZW50KTsKICAgICAgICAkY2xlYW5lZCAgPSAkb2JqZWN0LT5jbGVhbkNvbnRlbnQoJGNvbnRlbnQsICdfJyk7CgogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkY2xlYW5lZCktPmxlbmd0aC0+aXNFcXVhbFRvKHN0cmxlbigkY29udGVudCkpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkY2xlYW5lZCktPmlzRXF1YWxUbygkZXhwZWN0ZWQpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0U2VjdGlvblRleHQoKQogICAgewogICAgICAgICRjb250ZW50ID0gJy9TaGFwZSA8PC9NQ0lEIDEgPj5CREMKUQovQ1MwIGNzIDEgMSAwICBzY24KMSBpCi9HUzAgZ3MKQlQKL1RUMCAxIFRmCjAuMDAwNyBUYyAwLjAwMTggVHcgMCAgVHMgMTAwICBUeiAwIFRyIDI0IDAgMCAyNCA1MS4zIDYzOS4yNjAyNSBUbQooTW9kIEJUIGF0aW9bbnNdIGF1IFxcKDE0XFwpIHNlcHRlbWJyZSAyMDA5IEVUIDIwMTApVGoKRU1DCihBQkMpIFRqCgpbIChhKS00LjUoYikgNihjKTguOCAoIGZzZGZzZGZzZGZbIHNkKSBdIFRECgpFVAovU2hhcGUgPDwvTUNJRCBbQlRdID4+QkRDIEJUIC9UVDEgMS41IFRmIChCVCApVGogRVQKcQowLjAzIDg0MSc7CgogICAgICAgICRkb2N1bWVudCA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxEb2N1bWVudCgpOwogICAgICAgICRvYmplY3QgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxPYmplY3QoJGRvY3VtZW50KTsKICAgICAgICAkc2VjdGlvbnMgPSAkb2JqZWN0LT5nZXRTZWN0aW9uc1RleHQoJGNvbnRlbnQpOwoKLy8gICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkY2xlYW5lZCktPmxlbmd0aC0+aXNFcXVhbFRvKHN0cmxlbigkY29udGVudCkpOwovLyAgICAgICAgJHRoaXMtPmFzc2VydC0+c3RyaW5nKCRjbGVhbmVkKS0+aXNFcXVhbFRvKCRleHBlY3RlZCk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Page.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBQYWdlCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcVGVzdHNcVW5pdHMKICovCmNsYXNzIFBhZ2UgZXh0ZW5kcyBhdG91bVx0ZXN0CnsKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0Rm9udHMoKQogICAgewogICAgICAgIC8vIERvY3VtZW50IHdpdGggdGV4dC4KICAgICAgICAkZmlsZW5hbWUgPSBfX0RJUl9fIC4gJy8uLi8uLi8uLi8uLi8uLi9zYW1wbGVzL0RvY3VtZW50MV9wZGZjcmVhdG9yX25vY29tcHJlc3NlZC5wZGYnOwogICAgICAgICRwYXJzZXIgICA9IG5ldyBcU21hbG90XFBkZlBhcnNlclxQYXJzZXIoKTsKICAgICAgICAkZG9jdW1lbnQgPSAkcGFyc2VyLT5wYXJzZUZpbGUoJGZpbGVuYW1lKTsKICAgICAgICAkcGFnZXMgICAgPSAkZG9jdW1lbnQtPmdldFBhZ2VzKCk7CiAgICAgICAgJHBhZ2UgICAgID0gJHBhZ2VzWzBdOwoKICAgICAgICAvLyB0aGUgZmlyc3QgdG8gbG9hZCBkYXRhLgogICAgICAgICRmb250cyA9ICRwYWdlLT5nZXRGb250cygpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRmb250cyktPmlzTm90RW1wdHkoKTsKICAgICAgICBmb3JlYWNoICgkZm9udHMgYXMgJGZvbnQpIHsKICAgICAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRmb250KS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxGb250Jyk7CiAgICAgICAgfQogICAgICAgIC8vIHRoZSBzZWNvbmQgdG8gdXNlIGNhY2hlLgogICAgICAgICRmb250cyA9ICRwYWdlLT5nZXRGb250cygpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPmFycmF5KCRmb250cyktPmlzTm90RW1wdHkoKTsKCiAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgLy8gRG9jdW1lbnQgd2l0aG91dCB0ZXh0LgogICAgICAgICRmaWxlbmFtZSA9IF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3NhbXBsZXMvRG9jdW1lbnQzX3BkZmNyZWF0b3Jfbm9jb21wcmVzc2VkLnBkZic7CiAgICAgICAgJGRvY3VtZW50ID0gJHBhcnNlci0+cGFyc2VGaWxlKCRmaWxlbmFtZSk7CiAgICAgICAgJHBhZ2VzICAgID0gJGRvY3VtZW50LT5nZXRQYWdlcygpOwogICAgICAgICRwYWdlICAgICA9ICRwYWdlc1swXTsKCiAgICAgICAgLy8gdGhlIGZpcnN0IHRvIGxvYWQgZGF0YS4KICAgICAgICAkZm9udHMgPSAkcGFnZS0+Z2V0Rm9udHMoKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5hcnJheSgkZm9udHMpLT5pc0VtcHR5KCk7CiAgICAgICAgLy8gdGhlIHNlY29uZCB0byB1c2UgY2FjaGUuCiAgICAgICAgJGZvbnRzID0gJHBhZ2UtPmdldEZvbnRzKCk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+YXJyYXkoJGZvbnRzKS0+aXNFbXB0eSgpOwogICAgfQoKICAgIHB1YmxpYyBmdW5jdGlvbiB0ZXN0R2V0Rm9udCgpCiAgICB7CiAgICAgICAgLy8gRG9jdW1lbnQgd2l0aCB0ZXh0LgogICAgICAgICRmaWxlbmFtZSA9IF9fRElSX18gLiAnLy4uLy4uLy4uLy4uLy4uL3NhbXBsZXMvRG9jdW1lbnQxX3BkZmNyZWF0b3Jfbm9jb21wcmVzc2VkLnBkZic7CiAgICAgICAgJHBhcnNlciAgID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhcnNlcigpOwogICAgICAgICRkb2N1bWVudCA9ICRwYXJzZXItPnBhcnNlRmlsZSgkZmlsZW5hbWUpOwogICAgICAgICRwYWdlcyAgICA9ICRkb2N1bWVudC0+Z2V0UGFnZXMoKTsKICAgICAgICAkcGFnZSAgICAgPSAkcGFnZXNbMF07CgogICAgICAgIC8vIHRoZSBmaXJzdCB0byBsb2FkIGRhdGEuCiAgICAgICAgJGZvbnQgPSAkcGFnZS0+Z2V0Rm9udCgnUjcnKTsKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5vYmplY3QoJGZvbnQpLT5pc0luc3RhbmNlT2YoJ1xTbWFsb3RcUGRmUGFyc2VyXEZvbnQnKTsKICAgICAgICAkZm9udCA9ICRwYWdlLT5nZXRGb250KCdBQkM3Jyk7CiAgICAgICAgJHRoaXMtPmFzc2VydC0+b2JqZWN0KCRmb250KS0+aXNJbnN0YW5jZU9mKCdcU21hbG90XFBkZlBhcnNlclxGb250Jyk7CiAgICB9CgogICAgcHVibGljIGZ1bmN0aW9uIHRlc3RHZXRUZXh0KCkKICAgIHsKICAgICAgICAvLyBEb2N1bWVudCB3aXRoIHRleHQuCiAgICAgICAgJGZpbGVuYW1lID0gX19ESVJfXyAuICcvLi4vLi4vLi4vLi4vLi4vc2FtcGxlcy9Eb2N1bWVudDFfcGRmY3JlYXRvcl9ub2NvbXByZXNzZWQucGRmJzsKICAgICAgICAkcGFyc2VyICAgPSBuZXcgXFNtYWxvdFxQZGZQYXJzZXJcUGFyc2VyKCk7CiAgICAgICAgJGRvY3VtZW50ID0gJHBhcnNlci0+cGFyc2VGaWxlKCRmaWxlbmFtZSk7CiAgICAgICAgJHBhZ2VzICAgID0gJGRvY3VtZW50LT5nZXRQYWdlcygpOwogICAgICAgICRwYWdlICAgICA9ICRwYWdlc1swXTsKICAgICAgICAkdGV4dCAgICAgPSAkcGFnZS0+Z2V0VGV4dCgpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJHRleHQpLT5oYXNMZW5ndGhHcmVhdGVyVGhhbigxNTApOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdEb2N1bWVudCB0aXRsZScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdMb3JlbSBpcHN1bScpOwoKICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJHRleHQpLT5jb250YWlucygnQ2FsaWJyaScpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdBcmlhbCcpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdUaW1lcycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdDb3VyaWVyIE5ldycpOwogICAgICAgICR0aGlzLT5hc3NlcnQtPnN0cmluZygkdGV4dCktPmNvbnRhaW5zKCdWZXJkYW5hJyk7CiAgICB9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/Tests/Units/Parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFRlc3RzXFVuaXRzOwoKdXNlIG1hZ2Vla2d1eVxhdG91bTsKCi8qKgogKiBDbGFzcyBQYXJzZXIKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxUZXN0c1xVbml0cwogKi8KY2xhc3MgUGFyc2VyIGV4dGVuZHMgYXRvdW1cdGVzdAp7CiAgICBwdWJsaWMgZnVuY3Rpb24gdGVzdFBhcnNlRmlsZSgpCiAgICB7CiAgICAgICAgJGRpcmVjdG9yeSA9IGdldGN3ZCgpIC4gJy9zYW1wbGVzL2J1Z3MnOwoKICAgICAgICBpZiAoaXNfZGlyKCRkaXJlY3RvcnkpKSB7CiAgICAgICAgICAgICRmaWxlcyAgPSBzY2FuZGlyKCRkaXJlY3RvcnkpOwogICAgICAgICAgICAkcGFyc2VyID0gbmV3IFxTbWFsb3RcUGRmUGFyc2VyXFBhcnNlcigpOwoKICAgICAgICAgICAgZm9yZWFjaCAoJGZpbGVzIGFzICRmaWxlKSB7CiAgICAgICAgICAgICAgICBpZiAocHJlZ19tYXRjaCgnL14uKlwucGRmJC9pJywgJGZpbGUpKSB7CiAgICAgICAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgICAgICAgICAgJGRvY3VtZW50ID0gJHBhcnNlci0+cGFyc2VGaWxlKCRkaXJlY3RvcnkgLiAnLycgLiAkZmlsZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICRwYWdlcyAgICA9ICRkb2N1bWVudC0+Z2V0UGFnZXMoKTsKICAgICAgICAgICAgICAgICAgICAgICAgJHBhZ2UgICAgID0gJHBhZ2VzWzBdOwogICAgICAgICAgICAgICAgICAgICAgICAkY29udGVudCAgPSAkcGFnZS0+Z2V0VGV4dCgpOwogICAgICAgICAgICAgICAgICAgICAgICAkdGhpcy0+YXNzZXJ0LT5zdHJpbmcoJGNvbnRlbnQpOwogICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKFxFeGNlcHRpb24gJGUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCRlLT5nZXRNZXNzYWdlKCkgIT0gJ1NlY3VyZWQgcGRmIGZpbGUgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLicpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93ICRlOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Form.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFhPYmplY3Q7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxIZWFkZXI7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXE9iamVjdDsKdXNlIFNtYWxvdFxQZGZQYXJzZXJcUGFnZTsKCi8qKgogKiBDbGFzcyBGb3JtCiAqCiAqIEBwYWNrYWdlIFNtYWxvdFxQZGZQYXJzZXJcWE9iamVjdAogKi8KY2xhc3MgRm9ybSBleHRlbmRzIFBhZ2UKewogICAgLyoqCiAgICAgKiBAcGFyYW0gUGFnZQogICAgICoKICAgICAqIEByZXR1cm4gc3RyaW5nCiAgICAgKi8KICAgIHB1YmxpYyBmdW5jdGlvbiBnZXRUZXh0KFBhZ2UgJHBhZ2UgPSBudWxsKQogICAgewogICAgICAgICRoZWFkZXIgICA9IG5ldyBIZWFkZXIoYXJyYXkoKSwgJHRoaXMtPmRvY3VtZW50KTsKICAgICAgICAkY29udGVudHMgPSBuZXcgT2JqZWN0KCR0aGlzLT5kb2N1bWVudCwgJGhlYWRlciwgJHRoaXMtPmNvbnRlbnQpOwoKICAgICAgICByZXR1cm4gJGNvbnRlbnRzLT5nZXRUZXh0KCR0aGlzKTsKICAgIH0KfQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/smalot/pdfparser/src/Smalot/PdfParser/XObject/Image.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKCi8qKgogKiBAZmlsZQogKiAgICAgICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgUGRmUGFyc2VyIGxpYnJhcnkuCiAqCiAqIEBhdXRob3IgIFPDqWJhc3RpZW4gTUFMT1QgPHNlYmFzdGllbkBtYWxvdC5mcj4KICogQGRhdGUgICAgMjAxMy0wOC0wOAogKiBAbGljZW5zZSBHUEwtMy4wCiAqIEB1cmwgICAgIDxodHRwczovL2dpdGh1Yi5jb20vc21hbG90L3BkZnBhcnNlcj4KICoKICogIFBkZlBhcnNlciBpcyBhIHBkZiBsaWJyYXJ5IHdyaXR0ZW4gaW4gUEhQLCBleHRyYWN0aW9uIG9yaWVudGVkLgogKiAgQ29weXJpZ2h0IChDKSAyMDE0IC0gU8OpYmFzdGllbiBNQUxPVCA8c2ViYXN0aWVuQG1hbG90LmZyPgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgogKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KICoKICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uCiAqICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5wZGZwYXJzZXIub3JnL3NpdGVzL2RlZmF1bHQvTElDRU5TRS50eHQ+LgogKgogKi8KCm5hbWVzcGFjZSBTbWFsb3RcUGRmUGFyc2VyXFhPYmplY3Q7Cgp1c2UgU21hbG90XFBkZlBhcnNlclxPYmplY3Q7CnVzZSBTbWFsb3RcUGRmUGFyc2VyXFBhZ2U7CgovKioKICogQ2xhc3MgSW1hZ2UKICoKICogQHBhY2thZ2UgU21hbG90XFBkZlBhcnNlclxYT2JqZWN0CiAqLwpjbGFzcyBJbWFnZSBleHRlbmRzIE9iamVjdAp7CiAgICAvKioKICAgICAqIEBwYXJhbSBQYWdlCiAgICAgKgogICAgICogQHJldHVybiBzdHJpbmcKICAgICAqLwogICAgcHVibGljIGZ1bmN0aW9uIGdldFRleHQoUGFnZSAkcGFnZSA9IG51bGwpCiAgICB7CiAgICAgICAgcmV0dXJuICcnOwogICAgfQp9Cg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/.cms_ignore</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZXhhbXBsZXMKZm9udHMK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/CHANGELOG.TXT</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[Ni4wLjA3MSAoMjAxNC0wNC0yNSkKCS0gQnVnICM5MTEgImVycm9yIHdpdGggYnVmZmVyZWQgcG5nIHBpY3MiIHdhcyBmaXhlZC4KCjYuMC4wNzAgKDIwMTQtMDQtMjQpCgktIEJ1ZyAjOTEwICJBbiBTVkcgaW1hZ2UgaXMgYmVpbmcgY3V0IG9mZiAod2l0aCBjbGlwcGluZyBtYXNrKSB3aGVuIHlvdSB1c2UgYWxpZ24gb3B0aW9ucyIgd2FzIGZpeGVkLgoKNi4wLjA2OSAoMjAxNC0wNC0yNCkKCS0gRGF0YW1hdHJpeCBCYXNlMjU2IGVuY29kaW5nIHdhcyBmaXhlZC4KCjYuMC4wNjggKDIwMTQtMDQtMjIpCgktIFNvbWUgRGF0YW1hdHJpeCBiYXJjb2RlIGJ1Z3Mgd2VyZSBmaXhlZC4KCjYuMC4wNjcgKDIwMTQtMDQtMjEpCgktIHN0YXJ0TGF5ZXIoKSBtZXRob2Qgc2lnbmF0dXJlIHdhcyBjaGFuZ2VkIHRvIGluY2x1ZGUgYSBuZXcgImxvY2siIHBhcmFtZXRlci4KCjYuMC4wNjYgKDIwMTQtMDQtMjApCgktIEJ1ZyAjOTA4ICJMaW5lYnJlYWsgaXMgbm90IGNvbnNpZGVyZWQgd2hlbiBnZXR0aW5nIGxlbmd0aCBvZiB0aGUgbmV4dCBzdHJpbmciIHdhcyBmaXhlZC4KCjYuMC4wNjUgKDIwMTQtMDQtMTApCgktIEJ1ZyAjOTA1ICJSR0IgcGVyY2VudGFnZSBjb2xvciBidWcgaW4gY29udmVydEhUTUxDb2xvclRvRGVjKCkiIHdhcyBmaXhlZC4KCjYuMC4wNjQgKDIwMTQtMDQtMDcpCgktIEhlYWRlciBhbmQgRm9vdGVyIGZvbnRzIGFyZSBub3cgc2V0IGJ5IGRlZmF1bHQuCgktIEJ1ZyAjOTA0ICJQREYgY29ycnVwdGVkIiB3YXMgZml4ZWQuCgo2LjAuMDYzICgyMDE0LTA0LTAzKQoJLSBNZXRob2QgVENQREZfSU1BR0VTOjpfcGFyc2VwbmcoKSB3YXMgZml4ZWQgdG8gc3VwcG9ydCB0cmFuc3BhcmVuY3kgaW4gSW5kZXhlZCBpbWFnZXMuCgo2LjAuMDYyICgyMDE0LTAzLTAyKQoJLSBUaGUgbWV0aG9kIHN0YXJ0TGF5ZXIoKSBub3cgYWNjZXB0cyB0aGUgTlVMTCB2YWx1ZSBmb3IgdGhlICRwcmludCBwYXJhbWV0ZXIgdG8gbm90IHNldCB0aGUgcHJpbnQgbGF5ZXIgb3B0aW9uLgoKNi4wLjA2MSAoMjAxNC0wMi0xOCkKCS0gQnVnICM4OTMgIlBhcnNpbmcgZXJyb3Igb24gc3RyZWFtZWQgeHJlZiBmb3Igc2VjdXJlZCBwZGYiIHdhcyBmaXhlZC4KCjYuMC4wNjAgKDIwMTQtMDItMTYpCgktIEJ1ZyAjODkxICJFcnJvciBvbiBwYXJzaW5nIGhleGEgZmllbGRzIiB3YXMgZml4ZWQuCgktIEJ1ZyAjODkyICJQYXJzaW5nIHBkZiB3aXRoIHRyYWlsaW5nIHNwYWNlIGF0IHN0YXJ0IiB3YXMgZml4ZWQuCgo2LjAuMDU5ICgyMDE0LTAyLTAzKQoJLSBTVkcgJ3VzZScgc3VwcG9ydCB3YXMgaW1wb3J2ZWQuCgo2LjAuMDU4ICgyMDE0LTAxLTMxKQoJLSBCdWcgIzg4NiAiQnVncyB3aXRoIFNWRyB1c2luZyA8ZGVmcz4gYW5kIDx1c2U+IiB3YXMgZml4ZWQuCgo2LjAuMDU3ICgyMDE0LTAxLTI2KQoJLSBCdWcgIzg4MyAiUGFyc2luZyBlcnJvciIgd2FzIGZpeGVkLgoKNi4wLjA1NiAoMjAxNC0wMS0yNSkKCS0gVGhlIGF1dG9tYXRpYyBjYWNoZSBmb2xkZXIgc2VsZWN0aW9uIG5vdyB3b3JrcyBhbHNvIHdpdGggc29tZSByZXN0cmljdGVkIGhvc3RpbmcgZW52aXJvbm1lbnRzLgoJLSBDU1MgdGV4dC10cmFuc2Zvcm0gcHJvcGVydHkgaXMgbm93IHN1cHBvcnRlZCAocmVxdWlyZXMgdGhlIG11bHRpYnl0ZSBzdHJpbmcgbGlicmFyeSBmb3IgcGhwKSAtIHNlZSBleGFtbGUgbi4gMDYxIChUaGFua3MgdG8gV2FsdGVyIEZlcnJheikuCgktIEJ1ZyAjODg0ICJQYXJzaW5nIGVycm9yIHByZXYgdGFnIGxvb2tpbmcgZm9yIiB3YXMgZml4ZWQuCgo2LjAuMDU1ICgyMDE0LTAxLTE1KQoJLSBCdWcgIzg4MCAiRXJyb3IgZGV0ZWN0aW5nIGhYIHRhZ3MgKGgxLGgyLi4pIiB3YXMgZml4ZWQKCS0gQnVnICM4NzkgIlRoZWFkIG9uIHRoZSBzZWNvbmQgcGFnZSBpbmhlcml0cyBzdHlsZSBvZiBwcmV2aW91cyB0ciIgd2FzIGZpeGVkCgo2LjAuMDU0ICgyMDE0LTAxLTEzKQoJLSBCdWcgIzg3NyAiUGFyZW50ZXNlcyBjYXVzaW5nIGNvcnJ1cHQgdGV4dCIgd2FzIGZpeGVkLgoKNi4wLjA1MyAoMjAxNC0wMS0wMykKCS0gQnVnICM4NzYgIkNlbGwgcGFkZGluZyBzaG91bGQgbm90IGJlIG11bHRpcGxpZWQgd2l0aCBudW1iZXIgb2YgbGluZXMgaW4gZ2V0U3RyaW5nSGVpZ2h0IiB3YXMgZml4ZWQuCgktIFBhdGNoICM2OCAiRW1wdHkgaW1nIHNyYyBhdHRyaWJ1dGUgbGVhZHMgdG8gYWNjZXNzIG9mIHVuaW5pdGlhbGl6ZWQgc3RyaW5nIG9mZnNldCIgd2FzIGFwcGxpZWQuCgo2LjAuMDUyICgyMDEzLTEyLTEyKQoJLSBCdWcgIzg3MSAiRGF0YW1hdHJpeCBjb2RpbmciIHdhcyBmaXhlZC4KCjYuMC4wNTEgKDIwMTMtMTItMDIpCgktIGNiYm94IGFycmF5IHZhbHVlcyBpbiBhZGRUVEZmb250KCkgd2VyZSBjb252ZXJ0ZWQgdG8gaW50ZWdlcnMuCgo2LjAuMDUwICgyMDEzLTEyLTAxKQoJLSBUaGUgbWV0aG9kIGdldE51bUxpbmVzKCkgd2FzIGV4dGVuZGVkIHRvIHN1cHBvcnQgaHlwaGVuYXRpb24uCgktIFRoZSBDU1MgcHJvcGVydHkgbGluZS1oZWlnaHQgbm93IHN1cHBvcnRzIG5vbiBwZXJjZW50YWdlIHZhbHVlcy4KCjYuMC4wNTAgKDIwMTMtMTEtMjcpCgktIEEgYnVnIHJlbGF0ZWQgdG8gUE5HIGltYWdlcyB3YXMgZml4ZWQuCgo2LjAuMDQ4ICgyMDEzLTExLTI0KQoJLSBTVkcgdmFycyBhcmUgbm93IHJlc2V0IGluIEltYWdlU1ZHKCkgbWV0aG9kLgoKNi4wLjA0NyAoMjAxMy0xMS0xOSkKCS0gU1ZHIHN1cHBvcnQgd2FzIGV4dGVuZGVkIHRvIHN1cHBvcnQgc29tZSBuZXN0ZWQgZGVmcy4KCjYuMC4wNDYgKDIwMTMtMTEtMTcpCgktIHByZWdfcmVwbGFjZV9jYWxsYmFjayBmdW5jdGlvbnMgd2VyZSByZXBsYWNlZCB0byBpbXByb3ZlIG1lbW9yeSBwZXJmb3JtYW5jZXMuCgo2LjAuMDQ1ICgyMDEzLTExLTE3KQoJLSBCdWcgIzg2MiAiUGFyc2luZyBlcnJvciBvbiBmbGF0ZSBmaWx0ZXIiIHdhcyBmaXhlZC4KCjYuMC4wNDQgKDIwMTMtMTEtMTApCgktIEJ1ZyAjODU3ICJVbmRlZmluZWQgb2Zmc2V0IGVycm9yIiB3YXMgZml4ZWQuCgktIFRoZSB1bmlvcmQgbWV0aG9kIG5vdyB1c2VzIGEgc3RhdGljIGNhY2hlIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VzICh0aGFua3MgdG8gTWF0aGlldSBNYXNzZWJvZXVmIGZvciB0aGUgc3VnZWdzdGlvbikuCgktIFR3byBidWdzIGluIHRoZSBUQ1BERl9GT05UUyBjbGFzcyB3ZXJlIGZpeGVkLgoKNi4wLjA0MyAoMjAxMy0xMC0yOSkKCS0gQnVnICM4NTQgIkNTUyBpbnN0cnVjdGlvbiBkaXNwbGF5IiB3YXMgZml4ZWQuCgo2LjAuMDQyICgyMDEzLTEwLTI1KQoJLSBCdWcgIzg1MiAiQ01ZSyBDb2xvcnMgQnVnIiB3YXMgZml4ZWQuCgo2LjAuMDQxICgyMDEzLTEwLTIxKQoJLSBCdWcgIzg1MSAiUHJvYmxlbSB3aXRoIGltYWdlcyBpbiBQREYuIFBIUCB0aW1pbmcgb3V0IiB3YXMgZml4ZWQuCgo2LjAuMDQwICgyMDEzLTEwLTIwKQoJLSBCdWcgIzg0OSAiU1ZHIGltcG9ydCBidWciIHdhcyBmaXhlZC4KCjYuMC4wMzkgKDIwMTMtMTAtMTMpCgktIEJ1ZyAjODQzICJXcm9uZyBjYWxsIGluIHBhcnNlciIgd2FzIGZpeGVkLgoJLSBCdWcgIzg0NCAiV3Jvbmcgb2JqZWN0IHR5cGUgbmFtZWQiIHdhcyBmaXhlZC4KCS0gQnVnICM4NDUgIlBhcnNpbmcgZXJyb3Igb24gb2JqIHJlZiBwcmVmaXhlZCBieSAnMDAwMDAwJyIgd2FzIGZpeGVkLgoKNi4wLjAzOCAoMjAxMy0xMC0wNikKCS0gQnVnICM4NDEgIkRpdmlzaW9uIGJ5IHplcm8gd2FybmluZyBhdCB3cml0ZUhUTUwgYSA8bGk+IHRhZyIgd2FzIGZpeGVkLgoKNi4wLjAzNyAoMjAxMy0wOS0zMCkKCS0gTWV0aG9kIGdldEFsbFNwb3RDb2xvcnMoKSB3YXMgYWRkZWQgdG8gcmV0dXJuIGFsbCBzcG90IGNvbG9ycy4KCS0gTWV0aG9kIGNvbG9yUmVnaXN0cmF0aW9uQmFyKCkgd2FzIGV4dGVuZGVkIHRvIGF1dG9tYXRpY2FsbHkgcHJpbnQgYWxsIHNwb3QgY29sb3JzIGFuZCBzdXBwb3J0IGluZGl2aWR1YWwgc3BvdCBjb2xvcnMuCgktIFRoZSBtZXRob2QgcmVnaXN0cmF0aW9uTWFya0NNWUsoKSB3YXMgYWRkZWQgdG8gcHJpbnQgYSByZWdpc3RyYXRpb24gbWFyayBmb3IgQ01ZSyBjb2xvcnMuCgktIEEgYnVnIHJlbGF0ZWQgdG8gcGFnZSBncm91cHMgd2FzIGZpeGVkLgoJLSBHcmFkaWVudCgpIG1ldGhvZCBub3cgc3VwcG9ydHMgQ01ZSyBlcXVpdmFsZW50cyBvZiBzcG90IGNvbG9ycy4KCS0gRXhhbXBsZSBuLiA1NiB3YXMgdXBkYXRlZC4KCjYuMC4wMzYgKDIwMTMtMDktMjkpCgktIE1ldGhvZHMgZm9yIHJlZ2lzdHJhdGlvbiBiYXJzIGFuZCBjcm9wIG1hcmtzIHdlcmUgZXh0ZW5kZWQgdG8gc3VwcG9ydCByZWdpc3RyYXRpb24gY29sb3IgKHNlZSBleGFtcGxlIG4uIDU2KS4KCS0gTmV3IGRlZmF1bHQgc3BvdCBjb2xvcnMgd2VyZSBhZGRlZCB0byB0Y3BkZl9jb2xvcnMucGhwLCBpbmNsdWRpbmcgdGhlICdBbGwnIGFuZCAnTm9uZScgc3BlY2lhbCByZWdpc3RyYXRpb24gY29sb3JzLgoKNi4wLjAzNSAoMjAxMy0wOS0yNSkKCS0gVENQREZfUEFSU0VSIGNsYXNzIHdhcyBpbXByb3ZlZC4KCjYuMC4wMzQgKDIwMTMtMDktMjQpCgktIEJ1ZyAjODM5ICJFcnJvciBpbiB4cmVmIHBhcnNpbmcgaW4gbWl4ZWQgbmV3bGluZSBjaGFycyIgd2FzIGZpeGVkLgoKNi4wLjAzMyAoMjAxMy0wOS0yMykKCS0gQnVnIGZpeCByZWxhdGVkIHRvIFBORyBpbWFnZSB0cmFuc3BhcmVuY3kgdXNpbmcgR0QgbGlicmFyeS4KCjYuMC4wMzIgKDIwMTMtMDktMjMpCgktIEJ1ZyAjODM4ICJGYXRhbCBlcnJvciB3aGVuIGltYWdpY2sgY2Fubm90IGhhbmRsZSB0aGUgaW1hZ2UsIGV2ZW4gdGhvdWdoIEdEIGlzIGF2YWlsYWJsZSBhbmQgY2FuIiB3YXMgZml4ZWQuCgo2LjAuMDMxICgyMDEzLTA5LTE4KQoJLSBCdWcgIzgzNiAiT3B0aW9uYWwgRU9MIG1hcmtlciBiZWZvcmUgZW5kc3RyZWFtIiB3YXMgZml4ZWQuCgktIFNvbWUgYWRkaXRpb25hbCBjb250cm9scyB3ZXJlIGFkZGVkIHRvIGF2b2lkICJkaXZpc2lvbiBieSB6ZXJvIiBlcnJvciB3aXRoIGJhZGx5IGZvcm1hdHRlZCBpbnB1dC4KCjYuMC4wMzAgKDIwMTMtMDktMTcpCgktIEJ1ZyAjODM1ICJQREY0MTcgYW5kIEN5cmlsaWMgc2ltYm9scyIgd2FzIGZpeGVkLgoKNi4wLjAyOSAoMjAxMy0wOS0xNSkKCS0gQ29uc3RhbnRzIEtfVENQREZfUEFSU0VSX1RIUk9XX0VYQ0VQVElPTl9FUlJPUiBhbmQgS19UQ1BERl9QQVJTRVJfSUdOT1JFX0RFQ09ESU5HX0VSUk9SUyB3aGVyZSByZW1vdmVkIGluIGZhdm9yIG9mIGEgbmV3IGNvbmZpZ3VyYXRpb24gYXJyYXkgaW4gdGhlIFRDUERGX1BBUlNFUiBjbGFzcy4KCS0gVGhlIFRDUERGX1BBUlNFUiBjbGFzcyBjYW4gbm93IGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIG5ldyAkY2ZnIHBhcmFtZXRlci4KCjYuMC4wMjggKDIwMTMtMDktMTUpCgktIEEgZGVidWcgcHJpbnRfciB3YXMgcmVtb3ZlZCBmb3JtIHRjcGRmX3BhcnNlci5waHAuCgktIFRDUERGX0ZJTFRFUlMgY2xhc3Mgbm93IHRocm93cyBhbiBleGNlcHRpb24gaW4gY2FzZSBvZiBlcnJvci4KCS0gVENQREZfUEFSU0VSIGNsYXNzIG5vdyB0aHJvd3MgYW4gZXhjZXB0aW9uIGluIGNhc2Ugb2YgZXJyb3IgdW5sZXNzIHlvdSBkZWZpbmUgdGhlIGNvbnN0YW50IEtfVENQREZfUEFSU0VSX1RIUk9XX0VYQ0VQVElPTl9FUlJPUiB0byBmYWxzZS4KCS0gVGhlIGNvbnN0YW50IEtfVENQREZfUEFSU0VSX0lHTk9SRV9ERUNPRElOR19FUlJPUlMgY2FuIGJlIHNldCB0byB0cnUgZXRvIGlnbm9yZSBkZWNvZGluZyBlcnJvcnMgb24gVENQREZfUEFSU0VSLgoKNi4wLjAyNyAoMjAxMy0wOS0xNCkKCS0gQSBidWcgaW4gdGNwZGZfcGFyc2VyIHdlbiBwYXJzaW5nIGhleGFkZWNpbWFsIHN0cmluZ3Mgd2FzIGZpeGVkLgoJLSBBIGJ1ZyBpbiB0Y3BkZl9wYXJzZXIgd2VuIGxvb2tpbmcgZm9yIHN0YXR4cmVmIHdhcyBmaXhlZC4KCS0gQSBidWcgb24gUkM0IGVuY3J5cHRpb24gd2FzIGZpeGVkLgoKNi4wLjAyNiAoMjAxMy0wOS0xNCkKCS0gQSBidWcgaW4gdGNwZGZfcGFyc2VyIHdlbiBkZWNvZGluZyBzdHJlYW1zIHdhcyBmaXhlZC4KCjYuMC4wMjUgKDIwMTMtMDktMDQpCgktIEEgcHJlZ1NwbGl0KCkgYnVnIHdhcyBmaXhlZC4KCS0gSW1wcm92ZWQgY29udGVudCBsb2FkaW5nIGZyb20gVVJMcy4KCS0gSW1wcm92ZWQgZm9udCBwYXRoIGxvYWRpbmcuCgo2LjAuMDI0ICgyMDEzLTA5LTAyKQoJLSBCdWcgIzgyNiAiYWRkRW1wdHlTaWduYXR1cmVBcHBlYXJhbmNlIGlzc3VlIiB3YXMgZml4ZWQuCgo2LjAuMDIzICgyMDEzLTA4LTA1KQoJLSBHTlUgRnJlZWZvbnQgZm9udHMgd2VyZSB1cGRhdGVkLgoJLSBMaWNlbnNpbmcgYW5kIGNvcHlyaWdodCBpbmZvcm1hdGlvbiBhYm91dCBmb250cyB3ZXJlIGltcHJvdmVkLgoJLSBQTkcgaW1hZ2Ugc3VwcG9ydCB3YXMgaW1wcm92ZWQuCgo2LjAuMDIyICgyMDEzLTA4LTAyKQoJLSBmaXhpbmcgaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBmb3Igc2lnbmF0dXJlX2FwcGVhcmFuY2UgcHJvcGVydHkuCgo2LjAuMDIxICgyMDEzLTA3LTE4KQoJLSBUaGUgYnVnIGNhdXNlZCBieSB0aGUgcHJlZ19zcGxpdCBmdW5jdGlvbiBvbiBzb21lIFBIUCA1LjIueCB2ZXJzaW9ucyB3YXMgZml4ZWQuCgo2LjAuMDIwICgyMDEzLTA2LTA0KQoJLSBUaGUgbWV0aG9kIGFkZFRURmZvbnQoKSB3YXMgZml4ZWQgKEJ1ZyBpdGVtICM4MTMgVW5kZWZpbmVkIG9mZnNldCkuCgo2LjAuMDE5ICgyMDEzLTA2LTA0KQoJLSBUaGUgbWFnaWMgY29uc3RhbnQgX19ESVJfXyB3YXMgcmVwbGFjZWQgd2l0aCBkaXJuYW1lKF9fRklMRV9fKSBmb3IgcGhwIDUuMiBjb21wYXRpYmlsaXR5LgoJLSBUaGUgZXhjZXB0aW9ucyByYWlzZWQgYnkgZmlsZV9leGlzdHMoKSBmdW5jdGlvbiB3ZXJlIHN1cHByZXNzZWQuCgo2LjAuMDE4ICgyMDEzLTA1LTE5KQoJLSBUaGUgYmFyY29kZSBleGFtcGxlcyB3ZXJlIGNoYW5nZWQgdG8gYXV0b21hdGljYWxseSBzZWFyY2ggZm9yIHRoZSBiYXJjb2RlIGNsYXNzIHBhdGggKGluIGNhc2UgdGhlIGV4YW1wbGVzIGRpcmVjdG9yeSBpcyBub3QgaW5zdGFsbGVkIHVuZGVyIHRoZSBUQ1BERiByb290KS4KCjYuMC4wMTcgKDIwMTMtMDUtMTYpCgktIFRoZSBjb21tYW5kIGxpbmUgdG9vbCB0Y3BkZl9hZGRmb250LnBocCB3YXMgaW1wcm92ZWQuCgktIFRoZSBwaHAgbG9naWMgd2FzIHJlbW92ZWQgZnJvbSBjb25maWd1cmF0aW9uIGZpbGVzIHRoYXQgbm93IGNvbnRhaW5zIG9ubHkgY29uc3RhbnQgZGVmaW5lcy4KCS0gVGhlIHRjcGRmX2F1dG9jb25maWcucGhwIGZpbGUgd2FzIGFkZGVkIHRvIGF1dG9tYXRpY2FsbHkgc2V0IG1pc3NpbmcgY29uZmlndXJhdGlvbiB2YWx1ZXMuCgo2LjAuMDE2ICgyMDEzLTA1LTE1KQoJLSBUaGUgdGNwZGZfYWRkZm9udC5waHAgdG9vbCB3YXMgaW1wcm92ZWQgKHRoYW5rcyB0byBSZW1pIENvbGxldCkuCgktIENvbnN0YW50IEtfUEFUSF9JTUFHRVMgaXMgbm93IGF1dG9tYXRpY2FsbHkgc2V0IGluIGNvbmZpZ3VyYXRpb24gZmlsZS4KCjYuMC4wMTUgKDIwMTMtMDUtMTQpCgktIFNvbWUgdW51c2VkIHZhcnMgd2VyZSByZW1vdmVkIGZyb20gQWRkRm9udCgpIG1ldGhvZC4KCS0gU29tZSBkaXJlY3RvcmllcyB3ZXJlIG1vdmVkIGluc2lkZSB0aGUgZXhhbXBsZXMgZGlyZWN0b3J5LgoJLSBBbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkIHRvIHJlZmxlY3QgdGhlIG5ldyBkZWZhdWx0IHN0cnVjdHVyZS4KCS0gU291cmNlIGNvZGUgd2VyZSBjbGVhbi11cCB1cCB0byBiZSBtb3JlIGNvbXBhdGlibGUgd2l0aCBzeXN0ZW0gcGFja2FnaW5nLgoJLSBGaWxlcyBlbmNvZGluZ3MgYW5kIHBlcm1pc3Npb25zIHdlcmUgcmVzZXQuCgktIFRoZSBjb21tYW5kIGxpbmUgdG9vbCB0Y3BkZl9hZGRmb250LnBocCB3YXMgYWRkZWQgb24gdGhlIHRvb2xzIGRpcmVjdG9yeS4KCjYuMC4wMTQgKDIwMTMtMDQtMTMpCgktIFRoZSBzaWduYXR1cmUgb2YgYWRkVFRGZm9udCgpIG1ldGhvZCBpbmNsdWRlcyBhIG5ldyBwYXJhbWV0ZXIgdG8gbGluayBleGlzdGluZyBmb250cyBpbnN0ZWFkIG9mIGNvcHlpbmcgYW5kIGNvbXByZXNzaW5nIHRoZW0uCgo2LjAuMDEzICgyMDEzLTA0LTEwKQoJLSBBZGQgc3VwcG9ydCBmb3IgU1ZHIGR4IGFuZCBkeSB0ZXh0L3RzcGFuIGF0dHJpYnV0ZXMuCgktIHJlcGxhY2UgcmVxdWlyZSgpIHdpdGggcmVxdWlyZV9vbmNlKCkuCgktIGZpeCBzb21lIG1pbm9yIHR5cG9zIG9uIGRvY3VtZW50YXRpb24uCgktIGZpeCBhIHByb2JsZW0gd2hlbiBkZWxldGluZyBhbGwgcGFnZXMuCgo2LjAuMDEyICgyMDEzLTA0LTI0KQoJLSBBbiBlcnJvciBjb25kaXRpb24gaW4gYWRkSHRtbExpbmsoKSBtZXRob2Qgd2FzIGZpeGVkIChidWcgIzc5OSkuCgo2LjAuMDExICgyMDEzLTA0LTIyKQoJLSBNaW5vciBkb2N1bWVudGF0aW9uIGNoYW5nZXMuCgo2LjAuMDEwICgyMDEzLTA0LTAzKQoJLSBUaGUgbWV0aG9kIFJlY3QoKSB3YXMgZml4ZWQgdG8gcHJpbnQgYm9yZGVycyBjb3JyZWN0bHkuCgo2LjAuMDA5ICgyMDEzLTA0LTAyKQoJLSBBZGRpbmcgYmFjayBzb21lIGZpbGVzIHRoYXQgd2VyZSBub3QgcHJvcGVybHkgY29tbWl0dGVkIG9uIHRoZSBsYXRlc3QgcmVsZWFzZS4KCjYuMC4wMDggKDIwMTMtMDQtMDEpCgktIER1cGxpY2F0ZWQgZW5jb2RpbmcgbWFwcyB3YXMgcmVtb3ZlZCBmcm9tIHRjcGRmX2ZvbnRfZGF0YS5waHAuCgktIEZpeGluZyBidWcgb24gQWRkVFRGRm9udCgpLgoKNi4wLjAwNyAoMjAxMy0wMy0yOSkKCS0gSFRNTC9DU1MgZm9udCBzaXplIGNvbnZlcnNpb24gd2VyZSBpbXByb3ZlZC4KCjYuMC4wMDYgKDIwMTMtMDMtMjcpCgktIEJ1ZyByZWxhdGVkIHRvIFNWRyBhbmQgRVBTIGZpbGVzIG9uIHhvYmplY3RzIHdlcmUgZml4ZWQuCgo2LjAuMDA1ICgyMDEzLTAzLTI2KQoJLSBEZWZhdWx0IGZvbnQgcGF0aCB3YXMgZml4ZWQuCgo2LjAuMDA0ICgyMDEzLTAzLTIxKQoJLSBSZXR1cm4gdmFsdWUgb2YgYWRkVFRGZm9udCgpIG1ldGhvZCB3YXMgZml4ZWQuCgo2LjAuMDAzICgyMDEzLTAzLTIwKQoJLSBBIGJ1ZyByZWxhdGVkIHRvIG5vbi11bmljb2RlIG1vZGUgd2FzIGZpeGVkLgoKNi4wLjAwMiAoMjAxMy0wMy0xOCkKCS0gX2dldEZJWEVEIGNhbGwgb24gdGNwZGZfZm9udHMucGhwIHdhcyBmaXhlZC4KCjYuMC4wMDEgKDIwMTMtMDMtMTgpCgktIEZpeGVkICR1bmlfdHlwZSBjYWxsIG9uIHRjcGRmLnBocC4KCjYuMC4wMDAgKDIwMTMtMDMtMTcpCgktIElNUE9SVEFOVDogUEhQNCBzdXBwb3J0IGhhcyBiZWVuIHJlbW92ZWQgc3RhcnRpbmcgZnJvbSB0aGlzIHZlcnNpb24uCgktIFNldmVyYWwgVENQREYgbWV0aG9kcyBhbmQgdmFycyB3ZXJlIG1vdmVkIHRvIG5ldyBjbGFzcyBmaWxlczogdGNwZGZfc3RhdGljLnBocCwgdGNwZGZfY29sb3JzLnBocCwgdGNwZGZfaW1hZ2VzLnBocCwgdGNwZGZfZm9udF9kYXRhLnBocCwgdGNwZGZfZm9udHMucGhwLgoJLSBGaWxlcyBodG1sY29sb3JzLnBocCwgc3BvdGNvbG9ycy5waHAsIHVuaWNvZGVfZGF0YS5waHAgYW5kIGVjb2RpbmdzX21hcHMucGhwIHdlcmUgcmVtb3ZlZC4KCS0gQmFyY29kZSBjbGFzc2VzIHdlcmUgcmVuYW1lZCBhbmQgbmV3IGJhcmNvZGUgZXhhbXBsZXMgd2VyZSBhZGRlZC4KCS0gQ2xhc3MgVENQREZfUEFSU0VSIHdhcyBpbXByb3ZlZC4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgo1LjkuMjA5ICgyMDEzLTAzLTE1KQoJLSBJbWFnZSBtZXRob2Qgd2FzIGltcHJvdmVkLgoKNS45LjIwOCAoMjAxMy0wMy0xNSkKCS0gb2JqY2xvbmUgZnVjdGlvbiB3YXMgcGF0Y2hlZCB0byBzdXBwb3J0IG9sZCBpbWFnaWNrIGV4dGVuc2lvbnMuCgktIHRjcGRmX3BhcnNlciB3YXMgaW1wcm92ZWQgdG8gc3VwcG9ydCBDcm9zcy1SZWZlcmVuY2UgU3RyZWFtcyBhbmQgbGFyZ2Ugc3RyZWFtcy4KCjUuOS4yMDcgKDIwMTMtMDMtMDQpCgktIERhdGFtYXRyaXggY2xhc3Mgd2FzIGZpeGVkIChhIGRlYnVnIGVjaG8gd2FzIHJlbW92ZWQpLgoKNS45LjIwNiAoMjAxMy0wMi0yMikKCS0gQnVnIGl0ZW0gIzc1NCAiUE5HIHdpdGggYWxwaGEgY2hhbm5lbCBiZWNvbWVzIGdyYXkgc2NhbGUiIHdhcyBmaXhlZC4KCS0gTWlub3IgZG9jdW1lbnRhdGlvbiBmaXhlcy4KCjUuOS4yMDUgKDIwMTMtMDItMDYpCgktIFRoZSBjb25zdGFudCBLX1RDUERGX1RIUk9XX0VYQ0VQVElPTl9FUlJPUiB3YXMgYWRkZWQgb24gY29uZmlndXJhdGlvbiBmaWxlIHRvIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgRXJyb3IoKSBtZXRob2QuCgktIFBERjQxNyBiYXJjb2RlIGJ1ZyB3YXMgZml4ZWQuCgo1LjkuMjA0ICgyMDEzLTAxLTIzKQoJLSBUaGUgbWV0aG9kIEJvb2ttYXJrKCkgd2FzIGV4dGVuZGVkIHRvIGluY2x1ZGUgbmFtZWQgZGVzdGluYXRpb25zLCBVUkxzLCBpbnRlcm5hbCBsaW5rcyBvciBlbWJlZGRlZCBmaWxlcyAoc2VlIGV4YW1wbGUgbi4gMTUpLgoJLSBhdXRvbWF0aWMgcGF0aCBjYWxjdWxhdGlvbiBvbiBjb25maWd1cmF0aW9uIGZpbGUgd2FzIGZpeGVkLgoJLSBFcnJvcigpIG1ldGhvZCB3YXMgZXh0ZW5kZWQgdG8gdGhyb3cgbmV3IEV4Y2VwdGlvbiBpZiBQSFAgPiA1LgoKNS45LjIwMyAoMjAxMy0wMS0yMikKCS0gSG9yaXpvbnRhbCBwb3NpdGlvbiBvZiByYWRpb2J1dHRvbnMgYW5kIGNoZWNrYm94ZXMgd2FzIGFkanVzdGVkLgoKNS45LjIwMiAoMjAxMi0xMi0xNikKCS0gVmVydGljYWwgc3BhY2UgcHJvYmxlbSBhZnRlciB0YWJsZSB3YXMgZml4ZWQuCgo1LjkuMjAxICgyMDEyLTEyLTEwKQoJLSBGaXJzdCAyNTYgY2hhcnMgYXJlIG5vdyBhbHdheXMgaW5jbHVkZWQgb24gZm9udCBzdWJzZXQgdG8gb3ZlcmNvbWUgYSBwcm9ibGVtIHJlcG9ydGVkIG9uIHRoZSBmb3J1bS4KCjUuOS4yMDAgKDIwMTItMTItMDUpCgktIEJ1ZyBpdGVtICM3NjggIlJvd3NwYW4gd2l0aCBQYWdlYnJlYWsgZXJyb3IiIHdhcyBmaXhlZC4KCS0gUGFnZSByZWdpb25zIG5vdyB3b3JrcyBhbHNvIHdpdGggbGltaXRlZCBNdWx0aUNlbGwoKSBjZWxscy4KCjUuOS4xOTkgKDIwMTItMTEtMjkpCgktIEludGVybmFsIHNldEltYWdlQnVmZmVyKCkgbWV0aG9kIHdhcyBpbXByb3ZlZC4KCjUuOS4xOTggKDIwMTItMTEtMTkpCgktIERhdGFtYXRyaXggRURJRkFDVCBtb2RlIHdhcyBmaXhlZC4KCjUuOS4xOTcgKDIwMTItMTEtMDYpCgktIEJ1ZyBpdGVtICM3NTYgIlRDUERGIDUuOS4xOTYgc2hvd3MgbGluZSBvbiB0b3Agb2YgYWxsIFBERnMiIHdhcyBmaXhlZC4KCjUuOS4xOTYgKDIwMTItMTEtMDIpCgktIFNldmVyYWwgbWV0aG9kcyB3ZXJlIGltcHJvdmVkIHRvIGF2b2lkIG91dHB1dCB3aGVuIHRoZSBjb250ZXh0IGlzIG91dCBvZiBwYWdlLgoJLSBCdWcgaXRlbSAjNzU1ICJyZW1vdmUgY2FjaGVkIGZpbGVzIGJlZm9yZSB1bnNldHRpbmciIHdhcyBmaXhlZC4KCjUuOS4xOTUgKDIwMTItMTAtMjQpCgktIE1ldGhvZCBfcHV0Zm9udHMoKSB3YXMgaW1wcm92ZWQuCgo1LjkuMTk0ICgyMDEyLTEwLTIzKQoJLSBUZXh0IGFsaWdubWVudCBvbiBUZXh0RmllbGQoKSBtZXRob2Qgd2FzIGZpeGVkLgoKNS45LjE5MyAoMjAxMi0wOS0yNSkKCS0gU3VwcG9ydCBmb3IgbmFtZWQgZGVzdGluYXRpb25zIG9uIEhUTUwgbGlua3Mgd2FzIGFkZGVkICAoaS5lLjogPGEgaHJlZj0iI2Rlc3RpbmF0aW9ubmFtZSI+bGluayB0byBuYW1lZCBkZXN0aW5hdGlvbjwvYT4pLgoKNS45LjE5MiAoMjAxMi0wOS0yNCkKCS0gQSBwcm9ibGVtIG9uIHRoZSByZWxlYXNpbmcgcHJvY2VzcyB3YXMgZml4ZWQuCgo1LjkuMTkxICgyMDEyLTA5LTI0KQoJLSBTVkcgaW1hZ2UgbmFvdyBzdXBwb3J0IHN2ZyBhbmQgZXBzIGltYWdlcy4KCjUuOS4xOTAgKDIwMTItMDktMjMpCgktICJwYWdlIiB3b3JkIHRyYW5zbGF0aW9uIGlzIG5vdyBzZXQgdG8gZW1wdHkgaWYgbm90IGRlZmluZWQuCgktIFRvb2x0aXAgZmVhdHVyZSB3YXMgYWRkZWQgb24gdGhlIHJhZGlvYnV0dG9uIGFubm90YXRpb24uCgo1LjkuMTg5ICgyMDEyLTA5LTE4KQoJLSBCdWcgaXRlbSAjMzU2ODk2OSAiaW5pX2dldCBzYWZlX21vZGUgZXJyb3IiIHdhcyBmaXhlZC4KCjUuOS4xODggKDIwMTItMDktMTUpCgktIEEgZGF0YW1hdHJpeCBiYXJjb2RlIGJ1ZyB3YXMgZml4ZWQuCgo1LjkuMTg3ICgyMDEyLTA5LTE0KQoJLSBTdWJzZXQgZmVhdHVyZSB3YXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSB0aGUgZmlyc3QgMjU2IGNoYXJhY3RlcnMuCgo1LjkuMTg2ICgyMDEyLTA5LTEzKQoJLSBiYXJjb2Rlcy5waHAgZmlsZSB3YXMgcmVzeW5jZWQuCgktIE1ldGhvZHMgU2V0QWJzWCwgU2V0QWJzWSwgU2V0QWJzWFkgd2hlcmUgYWRkZWQgdG8gc2V0IHRoZSBhYnNvbHV0ZSBwb2ludGVyIGNvb3JkaW5hdGVzLgoJLSBNZXRob2QgZ2V0Q2hhckJCb3ggd2VyZSBhZGRlZCB0byBnZXQgc2luZ2xlIGNoYXJhY3RlciBib3VuZGluZyBib3guCgktIFNpZ25hdHVyZSBvZiBhZGRUVEZmb250IG1ldGhvZCB3YXMgY2hhbmdlZCAoJGFkZGNiYm94IHBhcmFtdGVyIHdhcyBhZGRlZCkuCgo1LjkuMTg1ICgyMDEyLTA5LTEyKQoJLSBNZXRob2QgX3B1dGZvbnR3aWR0aHMoKSB3YXMgZml4ZWQuCgo1LjkuMTg0ICgyMDEyLTA5LTExKQoJLSBBIHByb2JsZW0gd2l0aCBFQU4gYmFyY29kZXMgd2FzIGZpeGVkLgoKNS45LjE4MyAoMjAxMi0wOS0wNykKCS0gQSBwcm9ibGVtIHdpdGggZm9udCBuYW1lcyBub3JtYWxpemF0aW9uIHdhcyBmaXhlZC4KCjUuOS4xODIgKDIwMTItMDktMDUpCgktIEJ1ZyBpdGVtICMzNTY0OTgyICJJbmZpbml0ZSBsb29wIGluIFdyaXRlKCkgbWV0aG9kIiB3YXMgZml4ZWQuCgo1LjkuMTgxICgyMDEyLTA4LTMxKQoJLSBjb21wb3Nlci5qc29uIGZpbGUgd2FzIGFkZGVkLgoJLSBCdWcgaXRlbSAjMzU2MzM2OSAiQ2FjaGVkIGltYWdlcyBhcmUgbm90IHVubGlua2VkIHNvbWUgdGltZSIgd2FzIGZpeGVkLgoKNS45LjE4MCAoMjAxMi0wOC0yMikKCS0gQnVnIGl0ZW0gIzM1NjA0OTMgIlByb2JsZW1zIHdpdGggbmVzdGVkIGNlbGxzIGluIEhUTUwiIHdhcyBmaXhlZC4KCjUuOS4xNzkgKDIwMTItMDgtMDQpCgktIFNWRyAndXNlJyB0YWcgd2FzIGZpeGVkIGZvciAnY2lyY2xlJyBhbmQgJ2VsbGlwc2UnIHNoaWZ0IHByb2JsZW0uCgktIEFscGhhIHN0YXR1cyBpcyBub3cgY29ycmVjdGx5IHN0b3JlZCBhbmQgcmVzdG9yZWQgYnkgZ2V0R3JhcGhpY1ZhcnMoKSBhbmQgU2V0R3JhcGhpY1ZhcnMoKSBtZXRob2RzLgoKNS45LjE3OCAoMjAxMi0wOC0wMikKCS0gU1ZHICd1c2UnIHRhZyB3YXMgZml4ZWQgZm9yICdjaXJjbGUnIGFuZCAnZWxsaXBzZScuCgo1LjkuMTc3ICgyMDEyLTA4LTAyKQoJLSBBbiBhZGRpdGlvbmFsIGNvbnRyb2wgb24gYW5ub3RhdGlvbnMgd2FzIGZpeGVkLgoKNS45LjE3NiAoMjAxMi0wNy0yNSkKCS0gQSBidWcgcmVsYXRlZCB0byBzdHJva2Ugd2lkdGggd2FzIGZpeGVkLgoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byBmb250IHNwYWNpbmcgaW4gSFRNTCB3YXMgZml4ZWQuCgo1LjkuMTc1ICgyMDEyLTA3LTI1KQoJLSBUaGUgcHJvYmxlbSBvZiBtaXNzaW5nIGxldHRlciBvbiBoeXBoZW4gYnJlYWsgd2FzIGZpeGVkLgoKNS45LjE3NCAoMjAxMi0wNy0yNSkKCS0gVGhlIHByb2JsZW0gb2Ygd3JvbmcgZmlsZW5hbWUgd2hlbiBkb3dubG9hZGluZyBQREYgZnJvbSBhbiBBbmRyb2lkIGRldmljZSB3YXMgZml4ZWQuCgktIFRoZSBtZXRob2Qgc2V0SGVhZGVyRGF0YSgpIHdhcyBleHRlbmRlZCB0byBzZXQgdGV4dCBhbmQgbGluZSBjb2xvciBmb3IgaGVhZGVyIChzZWUgZXhhbXBsZSBuLiAxKS4KCS0gVGhlIG1ldGhvZCBzZXRGb290ZXJEYXRhKCkgd2FzIGFkZGVkIHRvIHNldCB0ZXh0IGFuZCBsaW5lIGNvbG9yIGZvciBmb290ZXIgKHNlZSBleGFtcGxlIG4uIDEpLgoJLSBUaGUgbWV0aG9kcyBzZXRUZXh0U2hhZG93KCkgYW5kIGdldFRleHRTaGFkb3coKSB3ZXJlIGFkZGVkIHRvIHNldCB0ZXh0IHNoYWRvd3MgKHNlZSBleGFtcGxlIG4uIDEpLgoJLSBUaGUgR2V0Q2hhcldpZHRoKCkgbWV0aG9kIHdhcyBmaXhlZCBmb3IgbmVnYXRpdmUgY2hhcmFjdGVyIHNwYWNpbmcuCgktIEEgJ25vbmUnIGJvcmRlciBtb2RlIGlzIG5vdyBjb3JyZWN0bHkgcmVjb2duaXplZC4KCS0gQnJlYWsgb24gaHlwaGVuIHByb2JsZW0gd2FzIGZpeGVkLgoKNS45LjE3MyAoMjAxMi0wNy0yMykKCS0gU29tZSBhZGRpdGlvbmFsIGNvbnRyb2wgd2hlciBhZGRlZCBvbiBiYXJjb2RlIG1ldGhvZHMuCgktIFRoZSBvcHRpb24gQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiBvbiBJbWFnZSBtZXRob2QgaXMgbm93IGRpc2FibGVkIGlmIFBIUCBzYWZlX21vZGUgaXMgb24gb3Igb3Blbl9iYXNlZGlyIGlzIHNldC4KCS0gTWV0aG9kIEJvb2ttYXJrKCkgd2FzIGV4dGVuZGVkIHRvIGluY2x1ZGUgWCBwYXJhbWV0ZXIuCgktIE1ldGhvZCBzZXREZXN0aW5hdGlvbigpIHdhcyBleHRlbmRlZCB0byBpbmNsdWRlIFggcGFyYW1ldGVyLgoJLSBBIHByb2JsZW0gd2l0aCBUaGFpIGxhbmd1YWdlIHdhcyBmaXhlZC4KCjUuOS4xNzIgKDIwMTItMDctMDIpCgktIEEgUE5HIGNvbG9yIHByb2ZpbGUgaXNzdWUgd2FzIGZpeGVkLgoKNS45LjE3MSAoMjAxMi0wNy0wMSkKCS0gU29tZSBTVkcgcmVuZGVyaW5nIHByb2JsZW1zIHdlcmUgZml4ZWQuCgo1LjkuMTcwICgyMDEyLTA2LTI3KQoJLSBCdWcgIzM1MzgyMjcgIk51bWVyb3VzIGVycm9ycyBpbnNlcnRpbmcgc2hhcmVkIGltYWdlcyIgd2FzIGZpeGVkLgoKNS45LjE2OSAoMjAxMi0wNi0yNSkKCS0gU29tZSBTVkcgcmVuZGVyaW5nIHByb2JsZW1zIHdlcmUgZml4ZWQuCgo1LjkuMTY4ICgyMDEyLTA2LTIyKQoJLSBUaGFpIGxhbmd1YWdlIHJlbmRlcmluZyB3YXMgZml4ZWQuCgo1LjkuMTY3ICgyMDEyLTA2LTIyKQoJLSBUaGFpIGxhbmd1YWdlIHJlbmRlcmluZyB3YXMgZml4ZWQgYW5kIGltcHJvdmVkLgoJLSBNZXRob2QgaXNDaGFyRGVmaW5lZCgpIHdhcyBpbXByb3ZlZC4KCS0gUHJvdGVjdGVkIG1ldGhvZCByZXBsYWNlQ2hhcigpIHdhcyBhZGRlZC4KCS0gRm9udCAia2VybmluZyIgd29yZCB3YXMgY29ycmVjdGVkIHRvICJ0cmFja2luZyIuCgo1LjkuMTY2ICgyMDEyLTA2LTIxKQoJLSBBcnJheSB0byBzdHJpbmcgY29udmVyc2lvbiBvbiBmaWxlX2lkIGNyZWF0aW9uIHdhcyBmaXhlZC4KCS0gVGhhaSBsYW5ndWFnZSByZW5kZXJpbmcgd2FzIGZpeGVkICh0aGFua3MgdG8gQXRzYXdpbiBDaGFvd2FuYWtyaXRzYW5ha3VsKS4KCjUuOS4xNjUgKDIwMTItMDYtMDcpCgktIFNvbWUgSFRNTCBmb3JtIHJlbGF0ZWQgYnVncyB3ZXJlIGZpeGVkLgoKNS45LjE2NCAoMjAxMi0wNi0wNikKCS0gQSBidWcgaW50cm9kdWNlZCBvbiB0aGUgbGF0ZXN0IHJlbGVhc2Ugd2FzIGZpeGVkLgoKNS45LjE2MyAoMjAxMi0wNi0wNSkKCS0gTWV0aG9kIGdldEdEZ2FtbWEoKSB3YXMgY2hhbmdlZC4KCS0gUmVuZGVyaW5nIHBlcmZvcm1hbmNlcyBvZiBQTkcgaW1hZ2VzIHdpdGggYWxwaGEgY2hhbm5lbCB3ZXJlIGltcHJvdmVkLgoKNS45LjE2MiAoMjAxMi0wNS0xMSkKCS0gQSBidWcgcmVsYXRlZCB0byBsb25nIHRleHQgb24gVEQgY2VsbHMgd2FzIGZpeGVkLgoKNS45LjE2MSAoMjAxMi0wNS0wOSkKCS0gQSBidWcgb24gWFJFRiB0YWJsZSB3YXMgZml4ZWQgKEJ1ZyBJRDogMzUyNTA1MSkuCgktIERlcHJlY2F0ZWQgSW1hZ2ljazpjbG9uZSB3YXMgcmVwbGFjZWQuCgktIE1ldGhvZCBvYmpjbG9uZSgpIHdhcyBmaXhlZCBmb3IgUEhQNC4KCjUuOS4xNjAgKDIwMTItMDUtMDMpCgktIEEgYnVnIG9uIHRjcGRmX3BhcnNlci5waHAgd2FzIGZpeGVkLgoKNS45LjE1OSAoMjAxMi0wNC0zMCkKCS0gQmFyY29kZSBjbGFzc2VzIHdlcmUgdXBkYXRlZCB0byBmaXggUE5HIGV4cG9ydCBCdWcgKElEOiAzNTIyMjkxKS4KCjUuOS4xNTggKDIwMTItMDQtMjIpCgktIFNvbWUgU1ZHLXJlbGF0ZWQgYnVncyB3ZXJlIGZpeGVkLgoKNS45LjE1NyAoMjAxMi0wNC0xNikKCS0gU29tZSBTVkctcmVsYXRlZCBidWdzIHdlcmUgZml4ZWQuCgo1LjkuMTU2ICgyMDEyLTA0LTEwKQoJLSBCdWcgaXRlbSAjMzUxNTg4NSAiVE9DIGFuZCBib29rbGV0OiBsZWZ0IGFuZCByaWdodCBwYWdlIGV4Y2hhbmdlZCIuCgktIFNldEF1dG9QYWdlQnJlYWsoZmFsc2UpIG5vdyB3b3JrcyBhbHNvIGluIG11bHRpY29sdW1uIG1vZGUuCgo1LjkuMTU1ICgyMDEyLTA0LTAyKQoJLSBCdWcgaXRlbSAjMzUxMjU5NiAiZm9udCBpbXBvcnQgcHJvYmxlbXMiIHdhcyBmaXhlZC4KCS0gTWV0aG9kIGFkZFRURmZvbnQoKSB3YXMgbW9kaWZpZWQgdG8gZXh0cmFjdCBvbmx5IHNwZWNpZmllZCBQbGF0Zm9ybSBJRCBhbmQgRW5jb2RpbmcgSUQgKGNoZWNrIHRoZSBzb3VyY2UgY29kZSBkb2N1bWVudGF0aW9uKS4KCS0gQWxsIGZvbnRzIHdlcmUgdXBkYXRlZC4KCS0gQnVnIGl0ZW0gIzM1MTM4NjcgImJvb2tsZXQgYW5kIHNldEhlYWRlclRlbXBsYXRlQXV0b3Jlc2V0OiBoZWFkZXIgc2hpZnRlZCBsZWZ0IiB3YXMgZml4ZWQuCgktIEJ1ZyBpdGVtICMzNTEzNzQ5ICJUQ1BERiBTdXBlcnNjcmlwdC9TdWJzY3JpcHQiIHdhcyBmaXhlZC4KCjUuOS4xNTQgKDIwMTItMDMtMjkpCgktIEEgZGVidWcgZWNobyB3YXMgcmVtb3ZlZC4KCjUuOS4xNTMgKDIwMTItMDMtMjgpCgktIEEgYnVnIG9uIGZvbnQgY29udmVyc2lvbiB3YXMgZml4ZWQuCgktIEFsbCBmb250cyB3ZXJlIHVwZGF0ZWQuCgktIE1ldGhvZCBpc0NoYXJEZWZpbmVkKCkgd2FzIGFkZGVkIHRvIGZpbmQgaWYgYSBjaGFyYWN0ZXIgaXMgZGVmaW5lZCBvbiB0aGUgc2VsZWN0ZWQgZm9udC4KCS0gTWV0aG9kIHJlcGxhY2VNaXNzaW5nQ2hhcnMoKSB3YXMgYWRkZWQgdG8gYXV0b21hdGljYWxseSByZXBsYWNlIG1pc3NpbmcgY2hhcnMgb24gc2VsZWN0ZWQgZm9udC4KCS0gU2V0Rm9udCgpIG1ldGhvZCB3YXMgZml4ZWQuCgo1LjkuMTUyICgyMDEyLTAzLTIzKQoJLSBUaGUgZm9sbG93aW5nIG92ZXJwcmludCBtZXRob2RzIHdlcmUgYWRkZWQ6IHNldE92ZXJwcmludCgpLCBnZXRPdmVycHJpbnQoKS4KCS0gU2lnbmF0dXJlIG9mIHNldEFscGhhKCkgbWV0aG9kIHdhcyBjaGFuZ2VkIGFuZCBtZXRob2QgZ2V0QWxwaGEoKSB3YXMgYWRkZWQuCgktIHN0cm9rZS1vcGFjaXR5IHN1cHBvcnQgd2FzIGFkZGVkIG9uIFNWRy4KCS0gVGhlIGZvbGxvd2luZyBkYXRlIG1ldGhvZHMgd2VyZSBhZGRlZDogc2V0RG9jQ3JlYXRpb25UaW1lc3RhbXAoKSwgc2V0RG9jTW9kaWZpY2F0aW9uVGltZXN0YW1wKCksIGdldERvY0NyZWF0aW9uVGltZXN0YW1wKCksIGdldERvY01vZGlmaWNhdGlvblRpbWVzdGFtcCgpLCBnZXRGb3JtYXR0ZWREYXRlKCksIGdldFRpbWVzdGFtcCgpLgoJLSBTaWduYXR1cmUgb2YgX2RhdGVzdHJpbmcoKSBtZXRob2Qgd2FzIGNoYW5nZWQuCgktIE1ldGhvZCBnZXRGb250QkJveCgpIHdhcyBhZGRlZC4KCS0gTWV0aG9kIHNldFBhZ2VCb3hUeXBlcygpIHdhcyBhZGVkLgoKNS45LjE1MSAoMjAxMi0wMy0yMikKCS0gQnVnIGl0ZW0gIzM1MDk4ODkgIlRyYW5zZm9ybSgpIGRpc3RvcnRzIFBERiIgd2FzIGZpeGVkLgoJLSBQcmVjaXNpb24gb2YgcmVhbCBudW1iZXIgd2VyZSBleHRlbmRlZC4KCS0gQ29tYm9Cb3ggYW5kIExpc3RCb3ggbWV0aG9kcyB3ZXJlIGZpeGVkLgoJLSBCdWxnYXJpYW4gbGFuZ3VhZ2UgZmlsZSB3YXMgYWRkZWQuCgktIGFkZFRPQygpIG1ldGhvZCB3YXMgaW1wcm92ZWQgdG8gaW5jbHVkZSBib29rbWFyayBjb2xvciBhbmQgZm9udCBzdHlsZS4KCjUuOS4xNTAgKDIwMTItMDMtMTYpCgktIEEgYnVnIHJlbGF0ZWQgdG8gZm9ybSBmaWVsZHMgaW4gUERGL0EgbW9kZSB3YXMgZml4ZWQuCgo1LjkuMTQ5ICgyMDEyLTAyLTIxKQoJLSBCdWcgaXRlbSAjMzQ4OTkzMyAiU1ZHIFBhcnNlciB0cmVhdHMgdHNwYW4gbGlrZSB0ZXh0IiB3YXMgZml4ZWQuCgo1LjkuMTQ4ICgyMDEyLTAyLTE3KQoJLSBCdWcgaXRlbSAjMzQ4ODYwMCAiTXVsdGlwbGUgcmFkaW9idXR0b24gc2V0cyBnZXQgZmlyc3Qgc2V0IHZhbHVlIiB3YXMgZml4ZWQuCgo1LjkuMTQ3ICgyMDEyLTAyLTE0KQoJLSBBIHByb2JsZW0gd2l0aCBTVkcgZ3JhZGllbnRzIGhhcyBiZWVuIGZpeGVkLgoKNS45LjE0NiAoMjAxMi0wMi0xMikKCS0gQnVnIGl0ZW0gIzM0ODY4ODAgIiRmaWxlaGFzaCB1bmRlZmluZSBlcnJvciIgd2FzIGZpeGVkLgoJLSBUaGUgZGVmYXVsdCBmb250IGlzIG5vdyB0aGUgb25lIHNwZWNpZmllZCBhdCBQREZfRk9OVF9OQU1FX01BSU4gY29uc3RhbnQuCgo1LjkuMTQ1ICgyMDEyLTAxLTI4KQoJLSBKYXBhbmVzZSBsYW5ndWFnZSBmaWxlIHdhcyBhZGRlZC4KCS0gVENQREYgbGljZW5zZSBhbmQgUkVBRE1FLlRYVCBmaWxlcyB3ZXJlIHVwZGF0ZWQuCgo1LjkuMTQ0ICgyMDEyLTAxLTEyKQoJLSBIVE1MIG91dHB1dCBvbiBiYXJjb2RlIGNsYXNzZXMgd2FzIGltcHJvdmVkLgoKNS45LjE0MyAoMjAxMi0wMS0wOCkKCS0gQnVnIGl0ZW0gIzM0NzEwNTcgInNldENyZWF0b3IoKSBoYXMgbm8gZWZmZWN0IiB3YXMgZml4ZWQuCgo1LjkuMTQyICgyMDExLTEyLTIzKQoJLSBTb3VyY2UgY29kZSBkb2N1bWVudGF0aW9uIHdhcyB1cGRhdGVkLgoKNS45LjE0MSAoMjAxMS0xMi0xNCkKCS0gU29tZSBtaW5vciBidWdzIHdlcmUgZml4ZWQuCgo1LjkuMTQwICgyMDExLTEyLTEzKQoJLSBTVkcgbm93IHN1cHBvcnRzIGVtYmVkZGVkIGltYWdlcyBlbmNvZGVkIGFzIGJhc2U2NC4KCjUuOS4xMzkgKDIwMTEtMTItMTEpCgktIFNwb3QgY29sb3IgbWV0aG9kcyB3ZXJlIGZpeGVkLgoKNS45LjEzOCAoMjAxMS0xMi0xMCkKCS0gY3JvcE1hcmsoKSBtZXRob2Qgd2FzIGltcHJvdmVkIChjaGVjayBzb3VyY2UgY29kZSBkb2N1bWVudGF0aW9uKS4KCS0gRXhhbXBsZSBuLiA1NiB3YXMgdXBkYXRlZC4KCS0gQnVnIGl0ZW0gIzM0NTIzOTAgIkNoZWNrIEJveCBzdGlsbCBub3QgdGlja2VkIHdoZW4gc2V0IHRvIHRydWUiIHdhcyBmaXhlZC4KCjUuOS4xMzcgKDIwMTEtMTItMDEpCgktIEJ1ZyBpdGVtICMzNDQ3MDA1ICJCYWNrZ3JvdW5kIGNvbG9yIGFuZCBib3JkZXIgb2YgRm9ybSBFbGVtZW50cyBpcyBwcmludGVkIiB3YXMgZml4ZWQuCgktIENvbG9yIHN1cHBvcnQgZm9yIEZvcm0gZWxlbWVudHMgd2FzIGltcHJvdmVkLgoKNS45LjEzNiAoMjAxMS0xMS0yNykKCS0gQnVnIGl0ZW0gIzM0NDMzODcgIlNldE1hcmdpbnMgd2l0aCBrZWVwIG9wdGlvbiBkb2VzIG5vdCB3b3JrIGZvciB0b3AgbWFyZ2luIiB3YXMgZml4ZWQuCgo1LjkuMTM1ICgyMDExLTExLTA0KQoJLSBCdWcgaXRlbSAjMzQzMzQwNiAiRG91YmxlIGtleXdvcmRzIGluIGRlc2NyaXB0aW9uIiB3YXMgZml4ZWQuCgo1LjkuMTM0ICgyMDExLTEwLTI5KQoJLSBUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgJGRlZmNvbCBwYXJhbWV0ZXIgb24gY29udmVydEhUTUxDb2xvclRvRGVjKCkgbWV0aG9kIHdhcyBmaXhlZC4KCS0gRGVhZnVsdCBIVFRQIGhlYWRlcnMgd2VyZSBjaGFuZ2VkIHRvIGF2b2lkIGJyb3dzZXIgY2FjaGluZy4KCS0gU29tZSBkZXByZWNhdGVkIHN5bnRheCB3ZXJlIHJlcGxhY2VkLgoKNS45LjEzMyAoMjAxMS0xMC0yNikKCS0gQnVnIGl0ZW0gIzM0Mjg0NDYgImNvcHlQYWdlIG1ldGhvZCBub3Qgd29ya2luZyB3aGVuIGRpc2tjYWNoZSBlbmFibGVkIiB3YXMgZml4ZWQuCgo1LjkuMTMyICgyMDExLTEwLTIwKQoJLSBCdWcgaXRlbSAjMzQyNjE2NyAiYnVnIGluIGZ1bmN0aW9uIGNvbnZlcnRIVE1MQ29sb3JUb0RlYygpIiB3YXMgZml4ZWQuCgo1LjkuMTMxICgyMDExLTEwLTEzKQoJLSBBbiBlcnJvciBtZXNzYWdlIHdhcyBhZGRlZCB0byBJbWFnZVBuZ0FscGhhKCkgbWV0aG9kLgoKNS45LjEzMCAoMjAxMS0xMC0xMikKCS0gTm93IHlvdSBjYW4gc2V0IGltYWdlIGRhdGEgc3RyaW5ncyBvbiBIVE1MIGltZyB0YWcgYnkgZW5jb2RpbmcgdGhlIGltYWdlIGJpbmFyeSBkYXRhIGluIHRoaXMgd2F5OiAkaW1nc3JjID0gJ0AnLmJhc2U2NF9lbmNvZGUoJGltZ2RhdGEpOwoKNS45LjEyOSAoMjAxMS0xMC0wNykKCS0gQ29yZSBmb250cyBtZXRyaWNzIHdhcyBmaXhlZCAocmVwbGFjZSBhbGwgaGVsdmV0aWNhIGFuZCB0aW1lcyBwaHAgZmlsZXMgb24gZm9udHMgZm9sZGVyKS4KCS0gRm9ybSBmaWVsZHMgc3VwcG9ydCB3YXMgaW1wcm92ZWQgYW5kIHNvbWUgcHJvYmxlbXMgd2VyZSBmaXhlZCAoY2hlY2sgdGhlIGV4YW1wbGUgbi4gMTQpLgoJLSBCdWcgaXRlbSAjMzQyMDI0OSAiSXNzdWUgd2l0aCBib29rbGV0IGFuZCBNdWx0aUNlbGwiIHdhcyBmaXhlZC4KCjUuOS4xMjggKDIwMTEtMTAtMDYpCgktIE1ldGhvZCBhZGRUVEZmb250KCkgd2FzIGltcHJvdmVkIChjaGVjayB0aGUgc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbikuCgktIE1ldGhvZCBzZXRFeHRyYVhNUCgpIHRvIHNldCBjdXN0b20gWE1QIGRhdGEgd2FzIGFkZGVkLgoKNS45LjEyNyAoMjAxMS0xMC0wNCkKCS0gUmVhZG9ubHkgbW9kZSBvcHRpb24gd2FzIGFjdGl2YXRlZCBmb3IgcmFkaW9idXR0b25zLgoKNS45LjEyNiAoMjAxMS0xMC0wMykKCS0gQnVnIGl0ZW0gIzM0MTc5ODkgIkdyYXBoaWNzIFN0YXRlIG9wZXJhdG9yIGluIGZvcm0gWE9iamVjdCBmYWlscyB0byByZW5kZXIiIHdhcyBmaXhlZC4KCS0gWG9iamVjdHMgcHJvYmxlbXMgd2l0aCB0cmFuc3BhcmVuY3ksIGdyYWRpZW50cyBhbmQgc3BvdCBjb2xvcnMgd2VyZSBmaXhlZC4KCjUuOS4xMjUgKDIwMTEtMTAtMDMpCgktIFN1cHBvcnQgZm9yIDgtZGlnaXQgQ01ZSyBoZXhhZGVjaW1hbCBjb2xvciByZXByZXNlbnRhdGlvbiB3YXMgYWRkZWQgKHRvIGJlIHVzZWQgd2l0aCBYSFRNTCBhbmQgU1ZHKS4KCS0gU3BvdCBjb2xvcnMgc3VwcG9ydCB3YXMgaW1wcm92ZWQgKGNoZWNrIGV4YW1wbGUgbi4gMzcpLgoJLSBDb2xvciBtZXRob2RzIHdlcmUgaW1wcm92ZWQuCgo1LjkuMTI0ICgyMDExLTEwLTAyKQoJLSBDb3JlIGZvbnRzIHdlcmUgdXBkYXRlZC4KCjUuOS4xMjMgKDIwMTEtMTAtMDIpCgktIFRoZSBtZXRob2QgYWRkVFRGZm9udCgpIHdhZCBhZGRlZCB0byBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgVFRGIGZvbnRzIChjaGVjayB0aGUgbmV3IGZvbnRzIGd1aWRlIGF0IGh0dHA6Ly93d3cudGNwZGYub3JnKS4KCS0gT2xkIGZvbnQgdXRpbHMgd2VyZSByZW1vdmVkLgoJLSBBbGwgZm9udHMgd2VyZSB1cGRhdGVkIGFuZCBuZXcgYXJhYmljIGZvbnRzIHdlcmUgYWRkZWQgKGFsbW9oYW5hZCB3ZXJlIHJlbW92ZWQgYW5kIHJlcGxhY2VkIGJ5IGFlZnVyYXQgYW5kIGFlYWxhcmFiaXlhKS4KCS0gVGhlIGZpbGUgdW5pY29kZV9kYXRhLnBocCB3YXMgdXBkYXRlZC4KCS0gVGhlIGZpbGUgZW5jb2RpbmdzX21hcHMucGhwIHdhcyBhZGRlZC4KCS0gUERGL0EgZmlsZXMgYXJlIG5vdyBjb21wcmVzc2VkIHRvIHNhdmUgc3BhY2UuCgktIFhIVE1MIGlucHV0IGZvcm0gZmllbGRzIG5vdyBzdXBwb3J0IHRleHQtYWxpZ25tZW50IGF0dHJpYnV0ZS4KCjUuOS4xMjIgKDIwMTEtMDktMjkpCgktIFBERi9BLTFiIGNvbXBsaWFuY2Ugd2FzIGltcHJvdmVkIHRvIHBhc3Mgc29tZSBvbmxpbmUgdGVzdGluZy4KCjUuOS4xMjEgKDIwMTEtMDktMjgpCgktIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBzdXBwb3J0IGZvciBQREYvQS0xYiBmb3JtYXQgKHRoZSBjbGFzcyBjb25zdHJ1Y3RvciBzaWduYXR1cmUgd2FzIGNoYW5nZWQgLSBzZWUgZXhhbXBsZSBuLiA2NSkuCgktIE1ldGhvZCBzZXRTUkdCbW9kZSgpIHdhcyBhZGRlZCB0byBmb3JjZSBzUkdCX0lFQzYxOTY2LTIuMSBibGFjayBzY2FsZWQgSUNDIGNvbG9yIHByb2ZpbGUgZm9yIHRoZSB3aG9sZSBkb2N1bWVudCAoZmlsZSBzUkdCLmljYyB3YXMgYWRkZWQpLgoJLSAxNCBuZXcgZm9udHMgd2VyZSBhZGRlZCB0byBhbGxvdyBlbWJlZGRpbmcgY29yZSBmb250cyAoZm9yIFBERi9BIGNvbXBsaWFuY2UpLgoJLSBGb250IHV0aWxzIHdlcmUgZml4ZWQuCgo1LjkuMTIwICgyMDExLTA5LTIyKQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgYSBmaXggZm9yIF9nZXRUcnVlVHlwZUZvbnRTdWJzZXQoKSBtZXRob2QuCgo1LjkuMTE5ICgyMDExLTA5LTE5KQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgYSBmaXggZm9yIGV4dHJhIHBhZ2UgbnVtYmVyaW5nIG9uIFRPQy4KCjUuOS4xMTggKDIwMTEtMDktMTcpCgktIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBzb21lIGNoYW5nZXMgdGhhdCBhbGxvd3MgeW91IHRvIGFkZCBhIGJvb2ttYXJrIGZvciBhIHBhZ2UgdGhhdCBkbyBub3QgZXhpc3QuCgo1LjkuMTE3ICgyMDExLTA5LTE1KQoJLSBUQ1BERkJhcmNvZGUgYW5kIFRDUERGMkRCYXJjb2RlIGNsYXNzZXMgd2VyZSBleHRlbmRlZCB0byBpbmNsdWRlIGEgbWV0aG9kIGZvciBleHBvcnRpbmcgYmFyY29kZXMgYXMgUE5HIGltYWdlcy4KCjUuOS4xMTYgKDIwMTEtMDktMTQpCgktIERhdGFtYXRyaXggY2xhc3Mgd2FzIGltcHJvdmVkIGFuZCBkb2N1bWVudGF0aW9uIHdhcyBmaXhlZC4KCjUuOS4xMTUgKDIwMTEtMDktMTMpCgktIERhdGFtYXRyaXggRUNDMjAwIGJhcmNvZGUgc3VwcG9ydCB3YXMgYWRkZWQgKGEgbmV3IGRhdGFtYXRyaXgucGhwIGZpbGUgd2FzIGFkZGVkKSAtIGNoZWNrIGV4YW1wbGUgbi4gNTAuCgktIGdldEJhcmNvZGVIVE1MKCkgbWV0aG9kIHdhcyBhZGRlZCBvbiBUQ1BERkJhcmNvZGUgYW5kIFRDUERGMkRCYXJjb2RlIGNsYXNzZXMgdG8gcmV0dXJuIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2YgdGhlIGJhcmNvZGUuCgktIGNVUkwgb3B0aW9ucyBvbiBJbWFnZSgpIG1ldGhvZCB3ZXJlIGltcHJvdmVkLgoJLSBBIGJ1ZyBvbiB3cml0ZTJEQmFyY29kZSgpIHdhcyBmaXhlZC4KCjUuOS4xMTQgKDIwMTEtMDktMDQpCgktIEEgYnVnIHJlbGF0ZWQgdG8gY29sdW1uIHBvc2l0aW9uIHdhcyBmaXhlZC4KCjUuOS4xMTMgKDIwMTEtMDgtMjQpCgktIFRoaXMgcmVsZWFzZSBpbmNsdWRlIHR3byBuZXcgZXhwZXJpbWVudGFsIGZpbGVzIGZvciBwYXJzaW5nIGFuIGV4aXN0aW5nIFBERiBkb2N1bWVudCAodGhlIGludGVncmF0aW9uIHdpdGggVENQREYgaXMgdW5kZXIgZGV2ZWxvcG1lbnQpLgoKNS45LjExMiAoMjAxMS0wOC0xOCkKCS0gQSBuZXdsaW5lIGNoYXJhY3RlciB3YXMgYWRkZWQgYWZ0ZXIgdGhlICd0cmFpbGVyJyBrZXl3b3JkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggc29tZSBwYXJzZXJzLgoJLSBTdXBwb3J0IGZvciBsYXllcnMgd2FzIGltcHJvdmVkLgoKNS45LjExMSAoMjAxMS0wOC0xNykKCS0gQmFyY29kZSBDT0RFIDM5IGRlZmF1bHQgZ2FwIHdhcyByZXN0b3JlZCBhdCAxLgoKNS45LjExMCAoMjAxMS0wOC0xNykKCS0gQmFyY29kZSBDT0RFIDM5IHdhcyBmaXhlZC4KCjUuOS4xMDkgKDIwMTEtMDgtMTIpCgktIE1ldGhvZCBnZXROdW1MaW5lcygpIHdhcyBmaXhlZC4KCS0gQSBidWcgcmVsYXRlZCB0byBwYWdlIGJyZWFrIGluIG11bHRpLWNvbHVtbiBtb2RlIHdhcyBmaXhlZC4KCjUuOS4xMDggKDIwMTEtMDgtMDkpCgktIEEgYnVnIG9uIFBIUDQgdmVyc2lvbiB3YXMgZml4ZWQuCgo1LjkuMTA3ICgyMDExLTA4LTA4KQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgYSBtaW5vciBidWdmaXguCgo1LjkuMTA2ICgyMDExLTA4LTA0KQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgdHJhbnNwYXJlbmN5IGdyb3VwczogY2hlY2sgdGhlIG5ldyBwYXJhbWV0ZXIgb24gc3RhcnRUZW1wbGF0ZSgpIG1ldGhvZCBhbmQgZXhhbXBsZSA2Mi4KCjUuOS4xMDUgKDIwMTEtMDgtMDQpCgktIEJ1ZyBpdGVtICMzMzg2MTUzICJDaGVjayBCb3ggbm90IHRpY2tlZCB3aGVuIHNldCB0byB0cnVlIiB3YXMgZml4ZWQuCgo1LjkuMTA0ICgyMDExLTA4LTAxKQoJLSBCdWcgaXRlbSAjMzM4MzY5OCAiaW1hZ2VtYWdpY2ssIHJlc2l6ZSBhbmQgZHBpIiB3YXMgZml4ZWQuCgo1LjkuMTAzICgyMDExLTA3LTE2KQoJLSBBbGlnbm1lbnQgb2YgWEhUTUwgbGluZXMgd2FzIGltcHJvdmVkLgoJLSBTcGVsbCBvZiB0aGUgImxlbmd0aCIgd29yZCB3YXMgZml4ZWQuCgo1LjkuMTAyICgyMDExLTA3LTEzKQoJLSBNZXRob2RzIHN0YXJ0TGF5ZXIoKSBhbmQgZW5kTGF5ZXIoKSB3ZXJlIGFkZGVkIHRvIHN1cHBvcnQgYXJiaXRyYXJ5IFBERiBsYXllcnMuCgktIFNvbWUgaW1wcm92ZW1lbnRzL2ZpeGVzIGZvciBpbWFnZXMgd2VyZSBhZGRlZCAodGhhbmtzIHRvIEJyZW5kYW4gQWJib3R0KS4KCjUuOS4xMDEgKDIwMTEtMDctMDcpCgktIFN1cHBvcnQgZm9yIEpQRUcgYW5kIFBORyBJQ0MgQ29sb3IgUHJvZmlsZXMgd2FzIGFkZGVkLgoJLSBNZXRob2QgYWRkRW1wdHlTaWduYXR1cmVBcHBlYXJhbmNlKCkgd2FzIGFkZGVkIHRvIGFkZCBlbXB0eSBzaWduYXR1cmUgZmllbGRzIChzZWUgZXhhbXBsZSBuLiA1MikuCgktIEJ1ZyBpdGVtICMzMzU0MzMyICJTdHJhbmdlIGxpbmUgc3BhY2luZyB3aXRoIHJlZHVjZWQgZm9udC1zaXplIGluIHdyaXRlSFRNTCIgd2FzIGZpeGVkLgoKNS45LjEwMCAoMjAxMS0wNi0yOSkKCS0gQW4gU1ZHIGJ1ZyBoYXMgYmVlbiBmaXhlZC4KCjUuOS4wOTkgKDIwMTEtMDYtMjcpCgktIEJ1ZyBpdGVtICMzMzM1MDQ1ICJGb250IGZyZWVzYW5zIHNlZW1zIHNvbWVob3cgY29ycnVwdGVkIGluIGZvb3RlciIgd2FzIGZpeGVkLgoKNS45LjA5OCAoMjAxMS0wNi0yMykKCS0gVGhlIE5hbWVkIERlc3RpbmF0aW9uIGZlYXR1cmUgd2FzIGZpeGVkLgoKNS45LjA5NyAoMjAxMS0wNi0yMykKCS0gVGhlIG1ldGhvZCBzZXRIdG1sVlNwYWNlKCkgbm93IGNhbiBiZSB1c2VkIGFsc28gZm9yIHRhZ3M6IGRpdiwgbGksIGJyLCBkdCBhbmQgZGQuCgktIFRoZSBOYW1lZCBEZXN0aW5hdGlvbiBmZWF0dXJlIHdhcyBhZGRlZCAoY2hlY2sgdGhlIGV4YW1wbGUgbi4gMTUpIC0gdGhhbmtzIHRvIENocmlzdGlhbiBEZWxpZ2FudC4KCjUuOS4wOTYgKDIwMTEtMDYtMTkpCgktIEJ1ZyBpdGVtICMzMzIyMjM0ICJTdXJyb2dhdGUgcGFpcnMgY29kZXMgaW4gYXJyVVRGOFRvVVRGMTZCRSIgd2FzIGZpeGVkLgoKNS45LjA5NSAoMjAxMS0wNi0xOCkKCS0gTnVtYmVycyBhbGlnbm1lbnQgZm9yIFRhYmxlLU9mLUNvbnRlbnQgbWV0aG9kcyB3YXMgaW1wcm92ZWQgYW5kIGZpeGVkLgoJLSBGb250IHN1YnNldHRpbmcgd2FzIGZpeGVkIHRvIGluY2x1ZGUgYWxsIHBhcnRzIG9mIGNvbXBvc2l0ZSBmb250cy4KCjUuOS4wOTQgKDIwMTEtMDYtMTcpCgktIEJ1ZyBpdGVtICMzMzE3ODk4ICJQYWdlIEdyb3VwIG51bWJlcmluZyBicm9rZW4gaW4gNS45LjA5MyIgd2FzIGZpeGVkLgoKNS45LjA5MyAoMjAxMS0wNi0xNikKCS0gTWV0aG9kIHNldFN0YXJ0aW5nUGFnZU51bWJlcigpIHdhcyBhZGRlZCB0byBzZXQgc3RhcnRpbmcgcGFnZSBudW1iZXIgKGZvciBhdXRvbWF0aWMgcGFnZSBudW1iZXJpbmcpLgoKNS45LjA5MiAoMjAxMS0wNi0xNSkKCS0gTWV0aG9kIF9wdXRwYWdlcygpIHdhcyBpbXByb3ZlZC4KCS0gQnVnIGl0ZW0gIzMzMTY2NzggIk1lbW9yeSBvdmVyZmxvdyB3aGVuIHVzZSBSb3RhdGUgYW5kIFNldEF1dG9QYWdlQnJlYWsiIHdhcyBmaXhlZC4KCS0gUmlnaHQgYWxpZ25tZW50IG9mIHBhZ2UgbnVtYmVycyB3YXMgaW1wcm92ZWQuCgo1LjkuMDkwICgyMDExLTA2LTE0KQoJLSBNZXRob2RzIEFsaWFzTmJQYWdlcygpIGFuZCBBbGlhc051bVBhZ2UoKSB3ZXJlIHJlLWFkZGVkIGFzIGRlcHJlY2F0ZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCgo1LjkuMDg5ICgyMDExLTA2LTEzKQoJLSBFeGFtcGxlIG4uIDggd2FzIHVwZGF0ZWQuCgktIE1ldGhvZCBzZW5kT3V0cHV0RGF0YSgpIHdhcyBjaGFuZ2VkIHRvIHJlbW92ZSBkZWZhdWx0IGNvbXByZXNzaW9uIChpdCB3YXMgaW5jb21wYXRpYmxlIHdpdGggc29tZSBzZXJ2ZXIgc2V0dGluZ3MpLgoJLSBCdWdzIHJlbGF0ZWQgdG8gcGFnZSBncm91cCBudW1iZXJzIHdlcmUgZml4ZWQuCgktIE1ldGhvZCBjb3B5UGFnZSgpIHdhcyBmaXhlZC4KCS0gTWV0aG9kIEltYWdlKCkgd2FzIGltcHJvdmVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgYWx0ZXJuYXRpdmUgYW5kIGV4dGVybmFsIGltYWdlcy4KCjUuOS4wODggKDIwMTEtMDYtMDEpCgktIE1ldGhvZCBnZXRBdXRvUGFnZUJyZWFrKCkgd2FzIGFkZGVkIChzZWUgZXhhbXBsZSBuLiA1MSkuCgktIEV4YW1wbGUgbi4gNTEgKGZ1bGwgcGFnZSBiYWNrZ3JvdW5kKSB3YXMgdXBkYXRlZC4KCjUuOS4wODcgKDIwMTEtMDYtMDEpCgktIE1ldGhvZCBzZW5kT3V0cHV0RGF0YSgpIHdhcyBpbXByb3ZlZCB0byBpbmNsdWRlIGRlZmxhdGUgZW5jb2RpbmcuCgktIEJhcmNvZGUgY2xhc3NlcyBvbiBQSFAgNCB2ZXJzaW9uIHdlcmUgZml4ZWQuCgo1LjkuMDg2ICgyMDExLTA1LTMxKQoJLSBGb250IGZpbGVzIHdlcmUgdXBkYXRlZCAodGhlIG9uZXMgb24gdGhlIHByZXZpb3VzIHJlbGVhc2Ugd2VyZSBicm9rZW4pLgoJLSBUaGUgc2NyaXB0IGZvbnRzL3V0aWxzL21ha2VhbGx0dGZmb250cy5waHAgd2FzIHVwZGF0ZWQgYW5kIGZpeGVkLgoJLSBPdXRwdXQoKSBtZXRob2Qgd2FzIGltcHJvdmVkIHRvIHVzZSBjb21wcmVzc2lvbiB3aGVuIGF2YWlsYWJsZS4KCjUuOS4wODUgKDIwMTEtMDUtMzEpCgktIFRDUERGQmFyY29kZSBjbGFzcyAoYmFyY29kZXMucGhwKSBub3cgaW5jbHVkZXMgZ2V0QmFyY29kZVNWRygpIGFuZCBnZXRCYXJjb2RlU1ZHY29kZSgpIG1ldGhvZHMgdG8gZ2V0IFNWRyBpbWFnZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFyY29kZS4KCS0gVENQREYyREJhcmNvZGUgY2xhc3MgKDJkYmFyY29kZXMucGhwKSBub3cgaW5jbHVkZXMgZ2V0QmFyY29kZVNWRygpIGFuZCBnZXRCYXJjb2RlU1ZHY29kZSgpIG1ldGhvZHMgdG8gZ2V0IFNWRyBpbWFnZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgYmFyY29kZS4KCjUuOS4wODQgKDIwMTEtMDUtMjkpCgktIEZvbnQgZmlsZXMgd2VyZSB1cGRhdGVkLgoJLSBUaGUgZmlsZSBmb250cy91dGlscy9tYWtlYWxsdHRmZm9udHMucGhwIHdhcyB1cGRhdGVkLgoJLSBCdWcgaXRlbSMgMzMwODc3NCAiUHJvYmxlbXMgd2l0aCBmb250IHN1YnNldHRpbmciIHdhcyBmaXhlZC4KCjUuOS4wODMgKDIwMTEtMDUtMjQpCgktIEJ1ZyBpdGVtICMzMzA4Mzg3ICJsaW5lIGhlaWdodCAmIFNldENlbGxIZWlnaHRSYXRpbyIgd2FzIGZpeGVkLgoKNS45LjA4MiAoMjAxMS0wNS0yMikKCS0gQnVnIGl0ZW0gIzMzMDU1OTIgIlNldHRpbmcgZmlsbCBjb2xvciA8PiB0ZXh0IGNvbG9yIGJyZWFrcyB0ZXh0IGNsaXBwaW5nIiB3YXMgZml4ZWQuCgo1LjkuMDgxICgyMDExLTA1LTE4KQoJLSBNZXRob2QgcmVzZXRIZWFkZXJUZW1wbGF0ZSgpIHdhcyBhZGRlZCB0byByZXNldCB0aGUgeG9iamVjdCB0ZW1wbGF0ZSB1c2VkIGJ5IEhlYWRlcigpIG1ldGhvZC4KCS0gTWV0aG9kIHNldEhlYWRlclRlbXBsYXRlQXV0b3Jlc2V0KCkgd2FzIGFkZGVkIHRvIGF1dG9tYXRpY2FsbHkgcmVzZXQgdGhlIHhvYmplY3QgdGVtcGxhdGUgdXNlZCBieSBIZWFkZXIoKSBtZXRob2QgYXQgZWFjaCBwYWdlLgoKNS45LjA4MCAoMjAxMS0wNS0xNykKCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gZmlsZSBwYXRoIGNhbGN1bGF0aW9uIGZvciBpbWFnZXMgd2FzIGZpeGVkLgoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byB1bnN1cHJlc3NlZCBnZXRpbWFnZXNpemUoKSBlcnJvciB3YXMgZml4ZWQuCgo1LjkuMDc5ICgyMDExLTA1LTE2KQoJLSBGb290ZXIoKSBtZXRob2Qgd2FzIGNoYW5nZWQgdG8gdXNlIEMxMjggYmFyY29kZSBhcyBkZWZhdWx0IChpbnN0ZWFkIG9mIHRoZSBwcmV2aW91cyBDMTI4QikuCgo1LjkuMDc4ICgyMDExLTA1LTEyKQoJLSBCdWcgaXRlbSAjMzMwMDg3OCAid3JvbmcgcmVuZGVyaW5nIGZvciBodG1sIGJ1bGxldCBsaXN0IGluIHNvbWUgY2FzZSIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMzMwMTAxNyAiRW1waGFzaXplZCB2cy4gZm9udC13ZWlnaHQiIHdhcyBmaXhlZC4KCS0gQmFyY29kZSBDb2RlIDEyOCB3YXMgaW1wcm92ZWQgdG8gaW5jbHVkZSBBVVRPIG1vZGUgKGF1dG9tYXRpY2FsbHkgc3dpdGNoIGJldHdlZW4gQSwgQiBhbmQgQyBtb2RlcykuCgktIEV4YW1wbGVzIG4uIDI3IGFuZCA0OSB3ZXJlIHVwZGF0ZWQuCgo1LjkuMDc3ICgyMDExLTA1LTA3KQoJLSBCdWcgaXRlbSAjMzI5ODU5MSAiZXJyb3IgY29kZTkzIiB3YXMgZml4ZWQuCgktIFNldExpbmVTdHlsZSgpIGZ1bmN0aW9uIHdhcyBpbXByb3ZlZC4KCjUuOS4wNzYgKDIwMTEtMDUtMDYpCgktIEJ1ZyBpdGVtICMzMjk4MjY0ICJjb2RlYmFyIDkzIGVycm9yIiB3YXMgZml4ZWQuCgo1LjkuMDc1ICgyMDExLTA1LTAyKQoJLSBUYWJsZSBoZWFkZXIgYWxpZ25tZW50IHdoZW4gdXNpbmcgV3JpdGVIVE1MQ2VsbCgpIG9yIE11bHRpQ2VsbCgpIHdhcyBmaXhlZC4KCjUuOS4wNzQgKDIwMTEtMDQtMjgpCgktIEJ1ZyBpdGVtICMzMjk0MzA2ICJDU1MgY2xhc3NlcyBub3Qgd29yayBpbiA8dGhlYWQ+IHRhYmxlIHNlY3Rpb24iIHdhcyBmaXhlZC4KCjUuOS4wNzMgKDIwMTEtMDQtMjcpCgktIEEgYnVnIHJlbGF0ZWQgdG8gY2hhcmFjdGVyIGVudGl0aWVzIG9uIEhUTUwgY2VsbHMgd2FzIGZpeGVkLgoKNS45LjA3MiAoMjAxMS0wNC0yNikKCS0gTWV0aG9kIHJlc2V0Q29sdW1ucygpIHdhcyBhZGRlZCB0byByZW1vdmUgbXVsdGlwbGUgY29sdW1ucyBhbmQgcmVzZXQgcGFnZSBtYXJnaW5zIChleGFtcGxlIG4uIDEwIHdhcyB1cGRhdGVkKS4KCjUuOS4wNzEgKDIwMTEtMDQtMTkpCgktIEJ1ZyAjMzI4ODU3NCAiPGJyLz4gdHJvdWJsZSIgd2FzIGZpeGVkLgoKNS45LjA2OSAoMjAxMS0wNC0xOSkKCS0gQnVnICMzMjg4NzYzICJIVE1MLVRhYmxlOiBub24tYnJlYWtpbmcgdGFibGUgcm93czogQnVnIiB3YXMgZml4ZWQuCgo1LjkuMDY4ICgyMDExLTA0LTE1KQoJLSBCb29rbWFyaywgYWRkVE9DIGFuZCBhZGRIVE1MVE9DIG1ldGhvZHMgd2VyZSBpbXByb3ZlZCB0byBpbmNsdWRlIGZvbnQgc3R5bGUgYW5kIGNvbG9yIChFeGFtcGxlcyAxNSwgNDkgYW5kIDU5IHdlcmUgdXBkYXRlZCkuCgktIERlZmF1bHQgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSB2YWx1ZSBvbiB0Y3BkZl9jb25maWcucGhwIGZpbGUgd2FzIGNoYW5nZWQuCgo1LjkuMDY3ICgyMDExLTA0LTEwKQoJLSBQZXJmb3JtYW5jZXMgd2VyZSBkcmFzdGljYWxseSBpbXByb3ZlZCAoUERGIGRvY3VtZW50cyBhcmUgbm93IGNyZWF0ZWQgbW9yZSBxdWlja2x5KS4KCjUuOS4wNjYgKDIwMTEtMDQtMDkpCgktIEEgYnVnIHJlbGF0ZWQgdG8gZGlnaXRhbCBzaWduYXR1cmUgKyBlbmNyeXB0aW9uIHdhcyBmaXhlZC4KCS0gQSBidWcgcmVsYXRlZCB0byBlbmNyeXB0aW9uICsgeG9iamVjdCB0ZW1wbGF0ZXMgd2FzIGZpeGVkLgoKNS45LjA2NSAoMjAxMS0wNC0wOCkKCS0gQnVnIGl0ZW0gIzMyODA1MTIgIlRleHQgZW5jb2RpbmcgaXNvLTg4NTktMiBjcmFzaGVzIiB3YXMgZml4ZWQuCgo1LjkuMDY0ICgyMDExLTA0LTA1KQoJLSBBIGJ1ZyByZWxhdGVkIHRvIGNoYXJhY3RlciBlbnRpdGllcyBvbiBIVE1MIGNlbGxzIHdhcyBmaXhlZC4KCjUuOS4wNjMgKDIwMTEtMDQtMDEpCgktIEJ1ZyBpdGVtICMzMjY3MjM1ICJXcml0ZUhUTUwoKSBhbmQgaW1hZ2UgdGhhdCBkb2Vzbid0IGZpdCBvbiB0aGUgcGFnZSIgd2FzIGZpeGVkLgoKNS45LjA2MiAoMjAxMS0wMy0yMykKCS0gQnVnIGl0ZW0gIzMyMzI2NTAgIlVzaW5nIFdyaXRlIGlmIHRoZXJlIGFyZSBwYWdlUmVnaW9ucyBhY3RpdmUgY3JlYXRlcyBlcnJvciIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMzIyMTg5MSAidGV4dCBpbnB1dCBib3JkZXJzIiB3YXMgZml4ZWQuCgktIEJ1ZyBpdGVtICMzMjI4OTU4ICJBZG9iZSBSZWFkZXIgOS40LjIgY3Jhc2giIHdhcyBmaXhlZC4KCjUuOS4wNjEgKDIwMTEtMDMtMTUpCgktIEJ1ZyBpdGVtICMzMjEzNDg4ICJ3cm9uZyBmdW5jdGlvbiBjYWxsIGluIGZ1bmN0aW9uIFdyaXRlIiB3YXMgZml4ZWQuCgktIEJ1ZyBpdGVtICMzMjAzMDA3ICJsaXN0IGVsZW1lbnQgd2l0aCBibGFjayBiYWNrZ3JvdW5kIiB3YXMgZml4ZWQuCgo1LjkuMDYwICgyMDExLTAzLTA4KQoJLSBhZGRUT0MoKSBtZXRob2Qgd2FzIGZpeGVkIGZvciB0ZXh0IGFsaWdubWVudCBwcm9ibGVtcy4KCjUuOS4wNTkgKDIwMTEtMDItMjcpCgktIERlZmF1bHQgSGVhZGVyKCkgbWV0aG9kIHdhcyBpbXByb3ZlZCB0byByZWR1Y2UgZG9jdW1lbnQgc2l6ZS4KCjUuOS4wNTggKDIwMTEtMDItMjUpCgktIEltYWdlKCkgbWV0aG9kIHdhcyBpbXByb3ZlZCB0byBjYWNoZSBpbWFnZXMgd2l0aCB0cmFuc3BhcmVuY3kgbGF5ZXJzICh0aGFua3MgdG8gS29ybmVsaXVzeiBKYXJ6xJlic2tpIGZvciByZXBvcnRpbmcgdGhpcyBwcm9ibGVtKS4KCjUuOS4wNTcgKDIwMTEtMDItMjQpCgktIEEgcHJvYmxlbSB3aXRoIGltYWdlIGNhY2hpbmcgc3lzdGVtIHdhcyBmaXhlZCAodGhhbmtzIHRvIEtvcm5lbGl1c3ogSmFyesSZYnNraSBmb3IgcmVwb3J0aW5nIHRoaXMgcHJvYmxlbSkuCgo1LjkuMDU2ICgyMDExLTAyLTIyKQoJLSBBIGJ1ZyBvbiBmaXhIVE1MQ29kZSgpIG1ldGhvZCB3YXMgZml4ZWQuCgktIEF1dG9tYXRpYyBsaW5lIGJyZWFrIGZvciBIVE1MIHdhcyBmaXhlZC4KCjUuOS4wNTUgKDIwMTEtMDItMTcpCgktIEFub3RoZXIgYnVnIHJlbGF0ZWQgdG8gSFRNTCB0YWJsZSBwYWdlIGJyZWFrIHdhcyBmaXhlZC4KCjUuOS4wNTQgKDIwMTEtMDItMTYpCgktIEEgYnVnIHJlbGF0ZWQgdG8gSFRNTCB0YWJsZSBwYWdlIGJyZWFrIHdhcyBmaXhlZC4KCjUuOS4wNTMgKDIwMTEtMDItMTYpCgktIFN1cHBvcnQgZm9yIEhUTUwgYXR0cmlidXRlIGRpc3BsYXk9Im5vbmUiIHdhcyBhZGRlZC4KCjUuOS4wNTIgKDIwMTEtMDItMTUpCgktIEEgYnVnIHJlbGF0ZWQgdG8gSFRNTCBhdXRvbWF0aWMgbmV3bGluZXMgd2FzIGZpeGVkLgoKNS45LjA1MSAoMjAxMS0wMi0xMikKCS0gIkNvbW1hcyBhdCBiZWdpbm5pbmcgb2YgbmV3IGxpbmVzIiBwcm9ibGVtIHdhcyBmaXhlZC4KCjUuOS4wNTAgKDIwMTEtMDItMTEpCgktIEJ1ZyAjMzE3NzYwNiAiU1ZHIEJhciBjaGFydCBlcnJvciIgd2FzIGZpeGVkLgoKNS45LjA0OSAoMjAxMS0wMi0wMykKCS0gQnVnICMzMTcwNzc3ICJUQ1BERiBjcmVhdGVzIGEgbmV3IHBhZ2UgYWZ0ZXIgYSBzaW5nbGUgbGluZSBpbiB3cml0ZUhUTUwiIHdhcyBmaXhlZC4KCjUuOS4wNDggKDIwMTEtMDItMDIpCgktIE5vIGNoYW5nZXMuIEp1c3QgcmVsZWFzZWQgdG8gb3ZlcnJpZGUgcHJldmlvdXMgcmVsZWFzZSB0aGF0IHdhcyBub3QgdXBsb2FkZWQgY29ycmVjdGx5LgoKNS45LjA0NyAoMjAxMS0wMS0yOCkKCS0gQnVnICMzMTY3MTE1ICJQREYgZXJyb3IgaW4gPHRhYmxlPiAoZXhhbXBsZSA0OCkiIHdhcyBmaXhlZCAod2FzIGludHJvZHVjZWQgaW4gNS44LjA0NikuCgo1LjkuMDQ2ICgyMDExLTAxLTE4KQoJLSBQREYgdmlldy9wcmludCBsYXllcnMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IHR1cm5lZCBvZmYgaWYgbm90IHVzZWQgKHNlZSBzZXRWaXNpYmlsaXR5KCkgbWV0aG9kKS4KCjUuOS4wNDUgKDIwMTEtMDEtMTcpCgktIEhUTUwgbGlzdCBzdXBwb3J0IHdlcmUgaW1wcm92ZWQuCgo1LjkuMDQ0ICgyMDExLTAxLTE1KQoJLSBCdWcgIzMxNTg0MjIgIndyaXRlSFRNTENlbGwgTG9vcCIgd2FzIGZpeGVkLgoJLSBTb21lIEhUTUwgaW1hZ2UgYWxpZ25tZW50IHByb2JsZW1zIHdlcmUgZml4ZWQuCgo1LjkuMDQzICgyMDExLTAxLTE0KQoJLSBCdWcgIzMxNTgxNzggIlBIUCBOb3RpY2UiIHdhcyBmaXhlZC4KCS0gQnVnICMzMTU4MTkzICJFbmRsZXNzIGxvb3AgaW4gd3JpdGVIVE1MIiB3YXMgZml4ZWQuCgktIEJ1ZyAjMzE1Nzc2NCAiU1ZHIFBpZSBjaGFydCBpbmNvcnJlY3RseSByZW5kZXJlZDIiLgoKNS45LjA0MiAoMjAxMS0wMS0xNCkKCS0gU29tZSBwcm9ibGVtcyBvZiB0aGUgUEhQNCB2ZXJzaW9uIHdlcmUgZml4ZWQuCgo1LjkuMDQxICgyMDExLTAxLTEzKQoJLSBBIHByb2JsZW0gd2l0aCBTVkcgZWxsaXB0aWNhbCBhcmMgcGF0aCB3YXMgZml4ZWQgKHJlZi4gYnVnICMzMTU2NTc0KS4KCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gZm9udCB3ZWlnaHQgb24gSFRNTCB0YWJsZSBoZWFkZXJzIHdhcyBmaXhlZC4KCjUuOS4wNDAgKDIwMTEtMDEtMTIpCgktIEEgYnVnIHJlbGF0ZWQgdG8gZW1wdHkgcGFnZXMgYWZ0ZXIgdGFibGUgd2FzIGZpeGVkLgoKNS45LjAzOSAoMjAxMS0wMS0xMikKCS0gQnVnIGl0ZW0gIzMxNTU3NTkgIm9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcygpIHNsb3cgdW5kZXIgV2luZG93cyIgd2FzIGZpeGVkLgoKNS45LjAzOCAoMjAxMS0wMS0xMSkKCS0gTWlub3IgYnVncyB3ZXJlIGZpeGVkLgoKNS45LjAzNyAoMjAxMS0wMS0wOSkKCS0gQW4gYWxpZ25tZW50IHByb2JsZW0gZm9yIEhUTUwgdGV4dHMgd2FzIGZpeGVkLgoKNS45LjAzNiAoMjAxMS0wMS0wNykKCS0gQSBidWcgcmVsYXRlZCB0byBIVE1MIHRhYmxlcyBvbiBoZWFkZXIgd2FzIGZpeGVkLgoKNS45LjAzNSAoMjAxMS0wMS0wMykKCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gSFRNTCB0YWJsZSBib3JkZXIgYWxpZ25tZW50IHdhcyBmaXhlZC4KCS0gQnVnICMyOTk2MzY2ICJGYXN0Q0dJIGFuZCBIZWFkZXIgUHJvYmxlbXMiIHdhcyBmaXhlZC4KCjUuOS4wMzQgKDIwMTAtMTItMTkpCgktIERlamFWdSBhbmQgR05VIEZyZWUgZm9udHMgd2VyZSB1cGRhdGVkLgoKNS45LjAzMyAoMjAxMC0xMi0xOCkKCS0gU291cmNlIGNvZGUgZG9jdW1ldG5hdGlvbiB3YXMgaW1wcm92ZWQuCgo1LjkuMDMyICgyMDEwLTEyLTE4KQoJLSBEZWZhdWx0IGZvbnQgc3RyZXRjaGluZyBhbmQgc3BhY2luZyB2YWx1ZXMgYXJlIG5vdyBpbmhlcml0ZWQgYnkgSFRNTCBtZXRob2RzLgoKNS45LjAzMSAoMjAxMC0xMi0xNikKCS0gU291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbiBlcnJvcnMgd2VyZSBmaXhlZC4KCjUuOS4wMzAgKDIwMTAtMTItMTYpCgktIFNldmVyYWwgc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbiBlcnJvcnMgd2VyZSBmaXhlZC4KCS0gU291cmNlIGNvZGUgc3R5bGUgd2FzIGNoYW5nZWQgZm9yIERveHlnZW4uCgktIFNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24gd2FzIG1vdmVkIG9ubGluZSB0byBodHRwOi8vd3d3LnRjcGRmLm9yZwoKNS45LjAyOSAoMjAxMC0xMi0wNCkKCS0gVGhlICRmaXRib3ggcGFyYW1ldGVyIG9uIEltYWdlKCkgbWV0aG9kIHdhcyBleHRlbmRlZCB0byBzcGVjaWZ5IGltYWdlIGFsaWdubWVudCBpbnNpZGUgdGhlIGJveCAoY2hlY2sgdGhlIGV4YW1wbGUgbi4gOSkuCgo1LjkuMDI4ICgyMDEwLTEyLTAzKQoJLSBGb250IHV0aWxzIG1ha2Vmb250LnBocCBhbmQgbWFrZWFsbHR0ZmZvbnRzLnBocCB3ZXJlIHVwZGF0ZWQuCgo1LjkuMDI3ICgyMDEwLTEyLTAxKQoJLSBTcG90IENvbG9ycyBhcmUgbm93IGJldHRlciBpbnRlZ3JhdGVkIHdpdGggSFRNTCBtb2RlLgoJLSBNZXRob2QgU2V0RG9jSW5mb1VuaWNvZGUoKSB3YXMgYWRkZWQgdG8gdHVybiBvbi9vZmYgVW5pY29kZSBtb2RlIGZvciBkb2N1bWVudCBpbmZvcm1hdGlvbiBkaWN0aW9uYXJ5IChtZXRhIHRhZ3MpIC0gY2hlY2sgdGhlIGV4YW1wbGUgbi4gMTkuCgo1LjkuMDI2ICgyMDEwLTEyLTAxKQoJLSBBIHByb2JsZW0gd2l0aCBtaXhlZCB0ZXh0IGRpcmVjdGlvbnMgb24gSFRNTCB3YXMgZml4ZWQuCgo1LjkuMDI1ICgyMDEwLTEyLTAxKQoJLSBUaGUgQWRkU3BvdENvbG9yKCkgbm93IGF1dG9tYXRpY2FsbHkgZmlsbHMgdGhlIHNwb3Rjb2xvciBhcnJheSAoZGVmaW5lZCBvbiBzcG90Y29sb3JzLnBocCBmaWxlKS4KCjUuOS4wMjQgKDIwMTAtMTEtMzApCgktIEJ1ZyBpdGVtICMzMTIzNjEyICJTVkcgbm90IHVzZSBncmFkaWVudFRyYW5zZm9ybSBpbiBwZXJjZW50YWdlIG1vZGUiIHdhcyBmaXhlZC4KCjUuOS4wMjMgKDIwMTAtMTEtMjUpCgktIEEgcG90ZW50aWFsIGJ1ZyBvbiBTVkcgdHJhbnNjb2RlciB3YXMgZml4ZWQuCgo1LjkuMDIyICgyMDEwLTExLTIxKQoJLSBNZXRob2QgSW1hZ2VFUFMgaW5jbHVkZXMgc3VwcG9ydCBmb3IgRVBTL0FJIFNwb3QgY29sb3JzLgoJLSBNZXRob2QgSW1hZ2VFUFMgaW5jbHVkZXMgYSBuZXcgcGFyYW1ldGVyICRmaXhvdXR2YWxzIHRvIHJlbW92ZSB2YWx1ZXMgb3V0c2lkZSB0aGUgYm91bmRpbmcgYm94LgoKNS45LjAyMSAoMjAxMC0xMS0yMCkKCS0gU3VwcG9ydCBmb3IgY3VzdG9tIGJ1bGxldCBwb2ludHMgaW1hZ2VzIHdhcyBhZGRlZCAoY2hlY2sgdGhlIGV4YW1wbGUgbi42KQoJLSBFeGFtcGxlcyBuLiA2IGFuZCA2MSB3ZXJlIHVwZGF0ZSAoY2hlY2sgdGhlIGNvbW1lbnRzIGluc2lkZSkuCgo1LjkuMDIwICgyMDEwLTExLTE5KQoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byBhZGRpdGlvbmFsIHBhZ2Ugd2hlbiB1c2luZyBtdWx0aWNvbHVtbiBtb2RlIHdhcyBmaXhlZC4KCjUuOS4wMTkgKDIwMTAtMTEtMTkpCgktIEFuIFNWRyBidWcgd2FzIGZpeGVkLgoJLSBJbWFnZVNWRygpIGFuZCBJbWFnZUVQUygpIG1ldGhvZHMgbm93IGFjY2VwdHMgaW1hZ2UgZGF0YSBzdHJlYW1zIChwdXQgdGhlIHN0cmluZyBvbiB0aGUgJGZpbGUgcGFyYW1ldGVyIHByZWNlZGVkIGJ5ICdAJyBjaGFyYWN0ZXIpLgoJLSBPcHRpb24gJ0UnIHdhcyBhZGRlZCB0byB0aGUgJGRlc3QgcGFyYW1ldGVyIG9mIE91dHB1dCgpIG1ldGhvZCB0byByZXR1cm4gdGhlIGRvY3VtZW50IGFzIGJhc2U2NCBtaW1lIG11bHRpLXBhcnQgZW1haWwgYXR0YWNobWVudCAoUkZDIDIwNDUpLgoKNS45LjAxOCAoMjAxMC0xMS0xOSkKCS0gQW4gU1ZHIGJ1ZyB3YXMgZml4ZWQuCgo1LjkuMDE3ICgyMDEwLTExLTE2KQoJLSBUYWdsaW5lIGNvbG9yIHdhcyBzZXQgdG8gdHJhbnNwYXJlbnQuCgktIFRoZSBtZXRob2QgZml4SFRNTENvZGUoKSB3YXMgYWRkZWQgdG8gYXV0b21hdGljYWxseSBjbGVhbiB1cCBIVE1MIGNvZGUgKHJlcXVpcmVzIEhUTUwgVGlkeSkuCgo1LjkuMDE2ICgyMDEwLTExLTE2KQoJLSBCdWcgaXRlbSAjMzEwOTcwNSAibGlzdCBpdGVtIHBhZ2UgYnJlYWsgaGFuZ2luZyBidWxsZXQiIHdhcyBmaXhlZC4KCjUuOS4wMTUgKDIwMTAtMTEtMTYpCgktIEJ1ZyBpdGVtIGFmZmVjdGluZyBRUkNvZGUgd2FzIGZpeGVkLgoJLSBTb21lIGJ1Z3MgYWZmZWN0aW5nIEhUTUwgbGlzdHMgd2VyZSBmaXhlZC4KCS0gSW1hZ2VTVkcoKSBhbmQgZml0QmxvY2soKSBtZXRob2RzIHdlcmUgaW1wcm92ZWQgdG8gaGFuZGxlIHNvbWUgU1ZHIHByb2JsZW1zLgoJLSBTb21lIHByb2JsZW1zIHdpdGggUEhQNCBjb21wYXRpYmlsaXR5IHdlcmUgZml4ZWQuCgo1LjkuMDE0ICgyMDEwLTExLTE1KQoJLSBCdWcgaXRlbSAjMzEwOTQ2NCAiUVJDb2RlIGVycm9yIiB3YXMgZml4ZWQuCgo1LjkuMDEzICgyMDEwLTExLTE1KQoJLSBCdWcgaXRlbSAjMzEwOTI1NyAiUHJvYmxlbSB3aXRoIGludGVybGFjZWQgR0lGcyBhbmQgUE5HcyIgd2FzIGZpeGVkLgoJLSBJbWFnZSBmdW5jdGlvbiBub3cgYWNjZXB0cyBpbWFnZSBkYXRhIHN0cmVhbXMgKGNoZWNrIGV4YW1wbGUgbi4gOSkuCgo1LjkuMDEyICgyMDEwLTExLTEyKQoJLSBNZXRob2QgZ2V0VENQREZWZXJzaW9uKCkgd2FzIGFkZGVkLgoJLSBQREZfUFJPRFVDRVIgY29uc3RhbnQgd2FzIHJlbW92ZWQuCgktIE1ldGhvZCBjb252ZXJ0SFRNTENvbG9yVG9EZWMoKSB3YXMgaW1wcm92ZWQuCgktIEhUTUwgY29sb3JzIG5vdyBzdXBwb3J0IHNwb3QgY29sb3IgbmFtZXMgZGVmaW5lZCBvbiB0aGUgbmV3IHNwb3Rjb2xvcnMucGhwIGZpbGUuCgktIFRoZSBkZWZhdWx0IG1ldGhvZCBIZWFkZXIoKSB3YXMgaW1wcm92ZWQgdG8gc3VwcG9ydCBTVkcgYW5kIEVQUy9BSSBpbWFnZXMuCgktIEEgYnVnIG9uIFNWRyBpbXBvcnRlciB3YXMgZml4ZWQuCgo1LjkuMDExICgyMDEwLTExLTAyKQoJLSBCdWcgaXRlbSAjMzEwMTQ4NiAiQnVnIEZpeCBmb3IgaW1hZ2UgbG9hZGluZyIgd2FzIGZpeGVkLgoKNS45LjAxMCAoMjAxMC0xMC0yNykKCS0gU3VwcG9ydCBmb3IgQ1NTIHByb3BlcnRpZXMgJ2JvcmRlci1zcGFjaW5nJyBhbmQgJ3BhZGRpbmcnIGZvciB0YWJsZXMgd2VyZSBhZGRlZC4KCS0gU2V2ZXJhbCBsYW5ndWFnZSBmaWxlcyB3ZXJlIGFkZGVkLgoKNS45LjAwOSAoMjAxMC0xMC0yMSkKCS0gSFRNTCB0ZXh0IGFsaWdubWVudCB3YXMgaW1wcm92ZWQgdG8gaW5jbHVkZSB0aGUgY2FzZSBvZiBSVEwgdGV4dCBvbiBMVFIgZGlyZWN0aW9uIGFuZCBMVFIgdGV4dCBvbiBSVEwgZGlyZWN0aW9uLgoKNS45LjAwOCAoMjAxMC0xMC0yMSkKCS0gQnVnIGl0ZW0gIzMwOTE1MDIgIkJvb2ttYXJrIG9kZGl0eSIgd2FzIGZpeGVkLgoJLSBIVE1MIGludGVybmFsIGxpbmtzIG5vdyBhY2NlcHRzIHBhZ2UgbnVtYmVyIGFuZCBZIHBvc2l0aW9uLgoJLSBUaGUgbWV0aG9kIHdyaXRlMURCYXJjb2RlKCkgd2FzIGltcHJvdmVkIHRvIGFjY2VwdCBzZXBhcmF0ZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBwYWRkaW5nIChzZWUgZXhhbXBsZSBuLiAyNykuCgo1LjkuMDA3ICgyMDEwLTEwLTIwKQoJLSBNZXRob2QgYWRqdXN0Q2VsbFBhZGRpbmcoKSB3YXMgZml4ZWQgdG8gaGFuZGxlIGJhZCBpbnB1dC4KCjUuOS4wMDYgKDIwMTAtMTAtMTkpCgktIFN1cHBvcnQgZm9yIEFFUyAyNTYgYml0IGVuY3J5cHRpb24gd2FzIGFkZGVkIChzZWUgZXhhbXBsZSBuLiAxNikuCgktIE1ldGhvZCBnZXROdW1MaW5lcygpIHdhcyBmaXhlZCBmb3IgdGhlIGVtcHR5IHN0cmluZyBjYXNlLgoKNS45LjAwNSAoMjAxMC0xMC0xOCkKCS0gTWV0aG9kIGFkZFBhZ2VSZWdpb24oKSB3YXMgY2hhbmdlZCB0byBhY2NlcHQgcmVnaW9ucyBzdGFydGluZyBleGFjdGx5IGZyb20gdGhlIHRvcCBvZiB0aGUgcGFnZS4KCjUuOS4wMDQgKDIwMTAtMTAtMTgpCgktIEEgYnVnIHJlbGF0ZWQgdG8gYW5ub3RhdGlvbnMgd2FzIGZpeGVkLgoJLSBUaGUgZmlsZSB1bmljb2RlX2RhdGEucGhwIHdhcyBjYW5nZWQgdG8gZW5jYXBzdWxhdGUgYWxsIGRhdGEgaW4gYSBjbGFzcy4KCS0gVGhlIGZpbGUgaHRtbGNvbG9ycy5waHAgd2FzIGNoYW5nZWQgdG8gcmVtb3ZlIHRoZSBnbG9iYWwgdmFyaWFibGUuCgo1LjkuMDAzICgyMDEwLTEwLTE1KQoJLSBTdXBwb3J0IGZvciBuby13cml0ZSBwYWdlIHJlZ2lvbnMgd2FzIGFkZGVkLiBDaGVjayB0aGUgZXhhbXBsZSBuLiA2NCBhbmQgbmV3IG1ldGhvZHMgc2V0UGFnZVJlZ2lvbnMoKSwgYWRkUGFnZVJlZ2lvbigpLCBnZXRQYWdlUmVnaW9ucygpLCByZW1vdmVQYWdlUmVnaW9uKCkuCgktIEEgYnVnIG9uIFJpZ2h0LVRvLUxlZnQgYWxpZ25tZW50IHdhcyBmaXhlZC4KCjUuOS4wMDIgKDIwMTAtMTAtMDgpCgktIENlbGwgbWV0aG9kIHdhcyBpbXByb3ZlZCB0byBwcmVzZXJ2ZSB0aGUgZm9udCBzdHJldGNoaW5nIGFuZCBzcGFjaW5nIHZhbHVlcyB3aGVuIHVzaW5nIHRoZSAkc3RyZXRjaCBwYXJhbWV0ZXIgKHNlZSBleGFtcGxlIG4uIDQpLgoKNS45LjAwMSAoMjAxMC0xMC0wNykKCS0gVGhlIHByb2JsZW0gb2YgYmxhbmsgcGFnZSBmb3Igbm9iciB0YWJsZSBoaWdoZXIgdGhhbiBhIHNpbmdsZSBwYWdlIHdhcyBmaXhlZC4KCjUuOS4wMDAgKDIwMTAtMTAtMDYpCgktIFN1cHBvcnQgZm9yIHRleHQgc3RyZXRjaGluZyBhbmQgc3BhY2luZyAodHJhY2tpbmcpIHdhcyBhZGRlZCwgc2VlIGV4YW1wbGUgbi4gNjMgYW5kIG1ldGhvZHMgc2V0Rm9udFN0cmV0Y2hpbmcoKSwgZ2V0Rm9udFN0cmV0Y2hpbmcoKSwgc2V0Rm9udFNwYWNpbmcoKSwgZ2V0Rm9udFNwYWNpbmcoKS4KCS0gU3VwcG9ydCBmb3IgQ1NTIHByb3BlcnRpZXMgJ2ZvbnQtc3RyZXRjaCcgYW5kICdsZXR0ZXItc3BhY2luZycgd2FzIGFkZGVkIChzZWUgZXhhbXBsZSBuLiA2MykuCgktIFRoZSBjTWFyZ2luIHN0YXRlIHdhcyByZXBsYWNlZCBieSBjZWxsX3BhZGRpbmcgYXJyYXkgdGhhdCBjYW4gYmUgc2V0L2dldCB1c2luZyBzZXRDZWxsUGFkZGluZygpIGFuZCBnZXRDZWxsUGFkZGluZygpIG1ldGhvZHMuCgktIE1ldGhvZHMgZ2V0Q2VsbFBhZGRpbmdzKCkgYW5kIHNldENlbGxQYWRkaW5ncygpIHdlcmUgYWRkZWQgdG8gZmluZSB0dW5lIGNlbGwgcGFkZGluZ3MgKHNlZSBleGFtcGxlIG4uIDUpLgoJLSBNZXRob2RzIGdldENlbGxNYXJnaW5zKCkgYW5kIHNldENlbGxNYXJnaW5zKCkgd2VyZSBhZGRlZCB0byBmaW5lIHR1bmUgY2VsbCBtYXJnaW5zIChzZWUgZXhhbXBsZSBuLiA1KS4KCS0gTWV0aG9kIHdyaXRlMURCYXJjb2RlKCkgd2FzIGltcHJvdmVkIHRvIHBlcm1pdCBjdXN0b20gbGFiZWxzIChzZWUgZXhhbXBsZSBuLiAyNykuCgktIE1ldGhvZCBJbWFnZVBuZ0FscGhhKCkgbm93IGluY2x1ZGVzIHN1cHBvcnQgZm9yIEltYWdlTWFnaWNrIHRvIGltcHJvdmUgcGVyZm9ybWFuY2VzLgoJLSBYT2JqZWN0IFRlbXBsYXRlIHN1cHBvcnQgd2FzIGV4dGVuZGVkIHRvIHN1cHBvcnQgTXVsdGljZWxsKCksIHdyaXRlSFRNTCgpIGFuZCB3cml0ZUhUTUxDZWxsKCkgbWV0aG9kcy4KCS0gVGhlIHNpZ25hdHVyZSBvZiBnZXROdW1MaW5lcygpIGFuZCBnZXRTdHJpbmdIZWlnaHQoKSBtZXRob2RzIGlzIGNoYW5nZWQuCgktIEV4YW1wbGUgbi4gNTcgd2FzIHVwZGF0ZWQuCgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo1LjguMDM0ICgyMDEwLTA5LTI3KQoJLSBBIGJ1ZyByZWxhdGVkIHRvIFNldEZvbnQgb24gWE9iamVjdCB0ZW1wbGF0ZXMgd2FzIGZpeGVkLgoKNS44LjAzMyAoMjAxMC0wOS0yNSkKCS0gQSBwcm9ibGVtIHdpdGggRm9vdGVyKCkgYW5kIG11bHRpcGxlIGNvbHVtbnMgd2FzIGZpeGVkLgoKNS44LjAzMiAoMjAxMC0wOS0yMikKCS0gQnVnICMzMDczMTY1ICJJc3N1ZXMgd2l0aCBjaGFuZ2VzIHRvIGFkZEhUTUxWZXJ0U3BhY2UoKSIgd2FzIGZpeGVkLgoKNS44LjAzMSAoMjAxMC0wOS0yMCkKCS0gQnVnICMzMDcxOTYxICJTcGFjZXMgaW4gSFRNTCIgd2FzIGZpeGVkLgoKNS44LjAzMCAoMjAxMC0wOS0xNykKCS0gU1ZHIHN1cHBvcnQgd2FzIGltcHJvdmVkIGFuZCBzb21lIGJ1Z3Mgd2VyZSBmaXhlZC4KCjUuOC4wMjkgKDIwMTAtMDktMTYpCgktIEEgcHJvYmxlbSB3aXRoIEhUTUwgYm9yZGVycyB3YXMgZml4ZWQuCgo1LjguMDI4ICgyMDEwLTA5LTEzKQoJLSBCdWcgIzMwNjUyMjQgIm1jcnlwdF9jcmVhdGVfaXYgZXJyb3Igb24gVENQREYgNS44LjAyNyBvbiBQSFAgNS4zLjIiIHdhcyBmaXhlZC4KCjUuOC4wMjcgKDIwMTAtMDktMTMpCgktIEJ1ZyAjMzA2NTExOCAibWNyeXB0X2RlY3J5cHQgZXJyb3Igb24gVENQREYgNS44LjAyNiBvbiBQSFAgNS4zLjIiIHdhcyBmaXhlZC4KCjUuOC4wMjYgKDIwMTAtMDktMTMpCgktIEEgYnVnIG9uIGFkZEhUTUxUT0MoKSBtZXRob2Qgd2FzIGZpeGVkLiBOb3RlOiBiZSBzdXJlIHRoYXQgdGhlICNUT0NfUEFHRV9OVU1CRVIjIHRlbXBsYXRlIGhhcyBlbm91Z2ggd2lkdGggdG8gYmUgcHJpbnRlZCBjb3JyZWN0bHkuCgo1LjguMDI1ICgyMDEwLTA5LTA5KQoJLSBCdWcgIzMwNjI2OTIgIlRleHRhcmVhIGluc2lkZSBhIHRhYmxlIiB3YXMgZml4ZWQuCgo1LjguMDI0ICgyMDEwLTA5LTA4KQoJLSBCdWcgIzMwNjIwMDUgIlVuZGVmaW5lZCB2YXJpYWJsZTogYW5uX29ial9pZCIgd2FzIGZpeGVkLgoKNS44LjAyMyAoMjAxMC0wOC0zMSkKCS0gRm9ybXMgYnVnIGFkZGVkIG9uIHZlcnNpb24gNS44LjAxOSB3YXMgZml4ZWQuCgo1LjguMDIyICgyMDEwLTA4LTMxKQoJLSBCdWcgIzMwNTY2MzIgIlNWRyByZW5kZXJlZCB2ZXJ0aWNhbGx5IGZsaXBwZWQiIHdhcyBmaXhlZC4KCjUuOC4wMjEgKDIwMTAtMDgtMzApCgktIEEgbmV3IENJRC0wICdjaGluZXNlJyBmb250IHdhcyBhZGRlZCBmb3IgdHJhZGl0aW9uYWwgQ2hpbmVzZS4KCS0gQnVnICMzMDU0Mjg3ICdJbm5lciB0YWdzIGFyZSBpZ25vcmVkIGR1ZSB0byAiYWxpZ24iIGF0dHJpYnV0ZScgd2FzIGZpeGVkLgoKNS44LjAyMCAoMjAxMC0wOC0yNikKCS0gQ1NTICJjYXRjaC1hbGwiIGNsYXNzIHNlbGVjdG9yIGlzIG5vdyBzdXBwb3J0ZWQuCgo1LjguMDE5ICgyMDEwLTA4LTI2KQoJLSBYT2JqZWN0IFRlbXBsYXRlcyBub3cgaW5jbHVkZXMgc3VwcG9ydCBmb3IgbGlua3MgYW5kIGFubm90YXRpb25zLgoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byBsaW5rIGFsaWdubWVudCBvbiBjZWxsIHdhcyBmaXhlZC4KCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gU1ZHIHN0eWxlcyB3YXMgZml4ZWQuCgo1LjguMDE4ICgyMDEwLTA4LTI1KQoJLSBNZXRob2QgZ2V0TnVtYmVyT2ZDb2x1bW5zKCkgd2FzIGFkZGVkLgoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byB0YWJsZSBoZWFkZXIgd2FzIGZpeGVkLgoJLSBNZXRob2QgZ2V0U1ZHVHJhbnNmb3JtTWF0cml4KCkgd2FzIGZpeGVkIHRvIGFwcGx5IFNWRyB0cmFuc2Zvcm1hdGlvbnMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCgktIFNWRyBzdXBwb3J0IHdhcyBpbXByb3ZlZCBhbmQgc2V2ZXJhbCBidWdzIHdlcmUgZml4ZWQuCgo1LjguMDE3ICgyMDEwLTA4LTI1KQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgc3VwcG9ydCBmb3IgWE9iamVjdCBUZW1wbGF0ZXMgKHNlZSB0aGUgbmV3IGV4YW1wbGUgbi4gNjIpLgoJLSBNZXRob2RzIHN0YXJ0dGVtcGxhdGUoKSwgZW5kVGVtcGxhdGUoKSBhbmQgcHJpbnRUZW1wbGF0ZSgpIHdlcmUgYWRkZWQgKHNlZSB0aGUgbmV3IGV4YW1wbGUgbi4gNjIpLgoKNS44LjAxNiAoMjAxMC0wOC0yNCkKCS0gQWxpZ25tZW50IHByb2JsZW0gb24gd3JpdGUyREJhcmNvZGUgd2FzIGZpeGVkLgoKNS44LjAxNSAoMjAxMC0wOC0yNCkKCS0gQSBwcm9ibGVtIGFyaXNlZCB3aXRoIHRoZSBsYXRlc3QgYnVnZml4IHdhcyBmaXhlZC4KCjUuOC4wMTQgKDIwMTAtMDgtMjMpCgktIE1ldGhvZCBfZ2V0eG9iamVjdGRpY3QoKSB3YXMgYWRkZWQgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggZXh0ZXJuYWwgZXh0ZW5zaW9ucy4KCS0gQSBidWcgcmVsYXRlZCB0byByYWRpb2J1dHRvbnMgd2FzIGZpeGVkLgoJLSBCdWcgIzMwNTE1MDkgIm5ldyBsaW5lIGFmdGVyIHB1bmN0dWF0aW9uIG1hcmtzIiB3YXMgZml4ZWQgKHBhcnRpYWxseSkuCgo1LjguMDEzICgyMDEwLTA4LTIzKQoJLSBTVkcgc3VwcG9ydCBmb3IgJ2RpcmVjdGlvbicgcHJvcGVydHkgd2FzIGFkZGVkLgoJLSBBIHByb2JsZW0gb24gZGVmYXVsdCB3aWR0aCBjYWxjdWxhdGlvbiBmb3IgbGluZWFyIGJhcmNvZGVzIHdhcyBmaXhlZC4KCS0gTmV3IG9wdGlvbiB3YXMgYWRkZWQgdG8gd3JpdGUxREJhcmNvZGUoKSBtZXRob2QgdG8gaW1wcm92ZSBhbGlnbm1lbnRzIChzZWUgZXhhbXBsZSBuLiAyNykuCgktIEJ1ZyAjMzA1MDg5NiAiTmVzdGVkIEhUTUwgdGFibGVzOiBzdHlsZXMgYXJlIG5vdCBhcHBsaWVkIiB3YXMgZml4ZWQuCgktIE1ldGhvZCBfcHV0cmVzb3VyY2VkaWN0KCkgd2FzIGltcHJvdmVkIHRvIGluY2x1ZGUgZXh0ZXJuYWwgWE9iamVjdCB0ZW1wbGF0ZXMuCgo1LjguMDEyICgyMDEwLTA4LTIyKQoJLSBTdXBwb3J0IGZvciBTVkcgJ3RleHQtYW5jaG9yJyBwcm9wZXJ0eSB3YXMgYWRkZWQuCgo1LjguMDExICgyMDEwLTA4LTIxKQoJLSBNZXRob2Qgd3JpdGUxREJhcmNvZGUoKSB3YXMgaW1wcm92ZWQgdG8gYmUgYmFja3dhcmQgY29tcGF0aWJsZSAoY2hlY2sgdGhlIG5ldyBleGFtcGxlIG4uIDI3KS4KCS0gU3VwcG9ydCBmb3IgQ1NTIHdpZHRoIGFuZCBoZWlnaHQgcHJvcGVydGllcyBvbiBpbWFnZXMgd2VyZSBhZGRlZC4KCjUuOC4wMTAgKDIwMTAtMDgtMjApCgktIERvY3VtZW50YXRpb24gb2YgdW5odG1sZW50aXRpZXMoKSB3YXMgZml4ZWQuCgktIFRoZSAnZml0d2lkdGgnIG9wdGlvbiB3YXMgYWRkZWQgYW5kIGJvcmRlciBjb2xvciBwcm9ibGVtIHdhcyBmaXhlZCBvbiB3cml0ZTFEQmFyY29kZSgpIG1ldGhvZCAoY2hlY2sgdGhlIGV4YW1wbGUgbi4gMjcpLgoKNS44LjAwOSAoMjAxMC0wOC0yMCkKCS0gSW50ZXJuYWwgb2JqZWN0IG51bWJlcmluZyB3YXMgaW1wcm92ZWQuCgktIFNvbWUgZXJyb3JzIGluIG9iamVjdCBlbmNyeXB0aW9uIHdlcmUgZml4ZWQuCgo1LjguMDA4ICgyMDEwLTA4LTE5KQoJLSBNZXRob2Qgd3JpdGUxREJhcmNvZGUoKSB3YXMgY2hhbmdlZCwgY2hlY2sgdGhlIGV4YW1wbGUgbi4gMjcuCgktIE1ldGhvZCBGb290ZXIoKSB3YXMgY2hhbmdlZCB0byBhY2NvdW50IGZvciBiYXJjb2RlIGNoYW5nZXMuCgktIEF1dG9tYXRpYyBjYWxjdWxhdGlvbiBvZiBLX1BBVEhfVVJMIGNvbnN0YW50IHdhcyBmaXhlZCBvbiBjb25maWd1cmF0aW9uIGZpbGUuCgktIE1ldGhvZCBzZXRFcXVhbENvbHVtbnMoKSB3YXMgZml4ZWQgZm9yICR3aWR0aD0wIGNhc2UuCgktIE1ldGhvZCBBZGRUT0MoKSB3YXMgZml4ZWQgZm9yIG11bHRpcGFnZSBhbmQgbXVsdGljb2x1bW4gbW9kZXMuCgktIEJldHRlciBzdXBwb3J0IGZvciBTVkcgImZvbnQtZmFtaWx5IiBwcm9wZXJ0eS4KCS0gQSBwcm9ibGVtIG9uIGRlZmF1bHQgUGFnZSBab29tIG1vZGUgd2FzIGZpeGVkLgoJLSBTZXZlcmFsIEFubm90YXRpb24gYnVncyB3ZXJlIGZpeGVkLgoKNS44LjAwNyAoMjAxMC0wOC0xOCkKCS0gQSBidWcgYWZmZWN0aW5nIEhUTUwgdGFibGVzIHdhcyBmaXhlZC4KCS0gQnVnICMzMDQ3NTAwICJTVkcgbm90IHJlbmRlcmluZyBwYXRocyBwcm9wZXJseSIgd2FzIGZpeGVkLgoKNS44LjAwNiAoMjAxMC0wOC0xNykKCS0gQSBidWcgYWZmZWN0aW5nIEhUTUwgdGFibGUgbmVzdGluZyB3YXMgZml4ZWQuCgo1LjguMDA1ICgyMDEwLTA4LTE3KQoJLSBBIGJ1ZyBhZmZlY3RpbmcgdGhlIEhUTUwgJ3NlbGVjdCcgdGFnIGluIGNlcnRhaW4gY29uZGl0aW9ucyB3YXMgZml4ZWQuCgo1LjguMDA0ICgyMDEwLTA4LTE3KQoJLSBCZXR0ZXIgc3VwcG9ydCBmb3IgSFRNTCAiZm9udC1mYW1pbHkiIHByb3BlcnR5LgoJLSBBIGJ1ZyByZWxhdGVkIHRvIEhUTUwgbXVsdGljb2x1bW4gd2FzIGZpeGVkLgoKNS44LjAwMyAoMjAxMC0wOC0xNikKCS0gQmV0dGVyIHN1cHBvcnQgZm9yIEhUTUwgImZvbnQtZmFtaWx5IiBwcm9wZXJ0eS4KCjUuOC4wMDIgKDIwMTAtMDgtMTQpCgktIEhUTUwgYWxpZ25tZW50cyB3ZXJlIGltcHJvdmVkCgktIElNUE9SVEFOVDogRGVmYXVsdCByZWd1bGFyIGV4cHJlc3Npb24gdG8gZmluZCBzcGFjZXMgaGFzIGJlZW4gY2hhbmdlZCB0byBleGNsdWRlIHRoZSBub24tYnJlYWtpbmctc3BhY2UgKDE2MCBERUMtIEEwIEhFWCkuIElmIHlvdSBhcmUgdXNpbmcgc2V0U3BhY2VzUkUoKSBtZXRob2QsIHBsZWFzZSByZWFkIHRoZSBuZXcgZG9jdW1lbnRhdGlvbi4KCS0gRXhhbXBsZSBuLiAxIHdhcyB1cGRhdGVkLgoKNS44LjAwMSAoMjAxMC0wOC0xMikKCS0gQnVnICMzMDQzNjUwICJzdWJzZXRjaGFycyBpbmNvcnJlY3RseSBjYWNoZWQiIHdhcyBmaXhlZC4KCjUuOC4wMDAgKDIwMTAtMDgtMTEpCgktIEEgY29udHJvbCB0byBhdm9pZCBib29rbWFya2luZyBwYWdlIDAgd2FzIGFkZGVkLgoJLSBhZGRUT0MoKSBtZXRob2Qgbm93IGluY2x1ZGVzIHN1cHBvcnQgZm9yIG11bHRpY29sdW1uIG1vZGUuCgktIFN1cHBvcnQgZm9yIHRhYmxlcyBpbiBtdWx0aWNvbHVtbiBtb2RlIHdhcyBpbXByb3ZlZC4KCS0gRXhhbXBsZSBuLjEwIHdhcyB1cGRhdGVkLgoJLSBBbGwgdHJpbW1pbmcgZnVuY3Rpb25zIHdlcmUgcmVwbGFjZWQgd2l0aCBzdHJpbmdMZWZ0VHJpbSgpLCBzdHJpbmdSaWdodFRyaW0oKSBhbmQgc3RyaW5nVHJpbSgpLgoJLSBIVE1MIGFsaWdubWVudHMgd2VyZSBpbXByb3ZlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKNS43LjAwMyAoMjAxMC0wOC0wOCkKCS0gQnVnICMzMDQxMjYzICJwaHAgc291cmNlIGVuZGluZyBpcyBiYWQiIHdhcyBmaXhlZCAoYWxsIFBIUCBmaWxlcyB3ZXJlIHVwZGF0ZWQsIGluY2x1ZGluZyBmb250cykuCgo1LjcuMDAyICgyMDEwLTA4LTA2KQoJLSBNZXRob2RzIGNvcHlQYWdlKCksIG1vdmVQYWdlKCkgYW5kIGRlbGV0ZVBhZ2UoKSB3ZXJlIGNoYW5nZWQgdG8gYWNjb3VudCBmb3IgaW50ZXJuYWwgbWFya2luZ3MuCgo1LjcuMDAxICgyMDEwLTA4LTA1KQoJLSBCdWcgIzMwNDAxMDUgIkJyb2tlbiBQREYgd2hlbiB1c2luZyBUT0MgKGV4YW1wbGUgNDUpIiB3YXMgZml4ZWQuCgo1LjcuMDAwICgyMDEwLTA4LTAzKQoJLSBDU1MgYm9yZGVycyBhcmUgbm93IHN1cHBvcnRlZCBmb3IgSFRNTCB0YWJsZXMgYW5kIG90aGVyIGJsb2NrIHRhZ3MgKHNlZSBleGFtcGxlIG4uIDYxKTsKCS0gQ2VsbCBib3JkZXJzIHdlcmUgaW1wcm92ZWQgKHNlZSBleGFtcGxlIG4uIDU3KTsKCS0gTWlub3IgYnVncyB3ZXJlIGZpeGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo1LjYuMDAwICgyMDEwLTA3LTMxKQoJLSBBIGJ1ZyB3aXRoIG9iamVjdCBJRHMgd2FzIGZpeGVzLgoJLSBQZXJmb3JtYW5jZXMgd2VyZSBpbXByb3ZlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKNS41LjAxNSAoMjAxMC0wNy0yOSkKCS0gQXV0b21hdGljIGZpeCBmb3IgdW5jbG9zZWQgc2VsZi1jbG9zaW5nIHRhZy4KCS0gU3VwcG9ydCBmb3IgZGVwcmVjYXRlZCAncycgYW5kICdzdHJpa2UnIHRhZ3Mgd2FzIGFkZGVkLgoJLSBFbXB0eSBsaXN0IGl0ZW1zIHByb2JsZW0gd2FzIGZpeGVkLgoKNS41LjAxNCAoMjAxMC0wNy0xNSkKCS0gU3VwcG9ydCBmb3IgZXh0ZXJuYWwgaW1hZ2VzIHdhcyBpbXByb3ZlZC4KCjUuNS4wMTMgKDIwMTAtMDctMTQpCgktIEJ1ZyAjMzAyOTMzOCAiRkkgYW5kIEZPIG91dHB1dCBkZXN0aW5hdGlvbiBmaWxlbmFtZSBidWciIHdhcyBmaXhlZCAocHJldmlvdXMgZml4IHdhcyB3cm9uZykuCgo1LjUuMDEyICgyMDEwLTA3LTE0KQoJLSBCdWcgIzMwMjkzMTAgIkZvbnQgYmFzZWxpbmUgaW5jb25zaXN0ZW5jaWVzIHdpdGggbGluZS1oZWlnaHQgYW5kIGZvbnQtc2l6ZSIgd2FzIGZpeGVkLgoJLSBCdWcgIzMwMjkzMzggIkZJIGFuZCBGTyBvdXRwdXQgZGVzdGluYXRpb24gZmlsZW5hbWUgYnVnIiB3YXMgZml4ZWQuCgo1LjUuMDExICgyMDEwLTA3LTA5KQoJLSBTdXBwb3J0IGZvciBtdWx0aXBsZSBDU1MgY2xhc3NlcyB3YXMgYWRkZWQuCgktIFRoZSBtZXRob2QgZ2V0Q29sdW1uKCkgd2FzIGFkZGVkIHRvIHJldHVybiB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyLgoJLSBTb21lIHJlZ3VsYXIgRXhwcmVzc2lvbnMgd2VyZSBmaXhlZCB0byBiZSBtb3JlIGNvbXBhdGlibGUgd2l0aCBVVEYtOC4KCjUuNS4wMTAgKDIwMTAtMDctMDYpCgktIEJ1ZyBpdGVtICMzMDI1NzcyICJCb3JkZXJzIGluIGFsbCBpbWFnZSBmdW5jdGlvbnMgYXJlIHN0aWxsIGZsYXdlZCIgd2FzIGZpeGVkLgoKNS41LjAwOSAoMjAxMC0wNy0wNSkKCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gbGFzdCBwYWdlIGZvb3RlciB3YXMgZml4ZWQuCgktIEltYWdlIGFsaWdubWVudHMgYW5kIGZpdC1vbi1wYWdlIGZlYXR1cmVzIHdlcmUgaW1wcm92ZWQuCgo1LjUuMDA4ICgyMDEwLTA3LTAyKQoJLSBBIHByb2JsZW0gb24gdGFibGUgaGVhZGVyIGFsaWdubWVudCBpbiBib29rbGV0IG1vZGUgd2FzIGZpeGVkLgoJLSBEZWZhdWx0IGdyYXBoaWMgdmFycyBhcmUgbm93IGFwcGxpZWQgZm9yIHNldEhlYWRlcigpOwoKNS41LjAwNyAoMjAxMC0wNy0wMikKCS0gQXR0cmlidXRlICJyZWFkb25seSIgd2FzIGFkZGVkIHRvIGlucHV0IGFuZCB0ZXh0YXJlYSBmb3JtIGZpZWxkcy4KCS0gVmVydGljYWwgYWxpZ25tZW50IGZlYXR1cmUgd2FzIGFkZGVkIG9uIE11bHRpQ2VsbCgpIG1ldGhvZCBvbmx5IGZvciBzaW1wbGUgdGV4dCBtb2RlIChzZWUgZXhhbXBsZSBuLiA1KS4KCS0gVGV4dC1GaXQgZmVhdHVyZSB3YXMgYWRkZWQgb24gTXVsdGlDZWxsKCkgbWV0aG9kIG9ubHkgZm9yIHNpbXBsZSB0ZXh0IG1vZGUgKHNlZSBleGFtcGxlIG4uIDUpLgoKNS41LjAwNiAoMjAxMC0wNi0yOSkKCS0gZ2V0U3RyaW5nSGVpZ2h0KCkgYW5kIGdldE51bUxpbmVzKCkgbWV0aG9kcyB3ZXJlIGZpeGVkLgoKNS41LjAwNSAoMjAxMC0wNi0yOCkKCS0gQnVnICMzMDIyMTcwICJnZXRGb250RGVzY2VudCgpIGRvZXMgbm90IHJldHVybiBjb3JyZWN0IGRlc2NlbnQgdmFsdWUiIHdhcyBmaXhlZC4KCS0gU29tZSBwcm9ibGVtcyB3aXRoIG11bHRpY29sdW1uIG1vZGUgd2VyZSBmaXhlZC4KCjUuNS4wMDQgKDIwMTAtMDYtMjcpCgktIEJ1ZyAjMzAyMTgwMyAiU1ZHIEJvcmRlciIgd2FzIGZpeGVkLgoKNS41LjAwMyAoMjAxMC0wNi0yNikKCS0gT24gV3JpdGUoKSBtZXRob2QsIGJsYW5rIGxpbmVzIGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBwYWdlIG9yIGNvbHVtbiBhcmUgbm93IGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC4KCjUuNS4wMDIgKDIwMTAtMDYtMjQpCgktIFRvVW5pY29kZSBJZGVudGl0eS1IIG5hbWUgd2FzIHJlcGxhY2VkIHdpdGggYSBmdWxsIENNYXAgKHRvIGF2b2lkIHByZWZsaWdodCBzeW50YXggZXJyb3IpLgoJLSBCdWcgIzMwMjA2MzggInN0cl9zcGxpdCgpIG5vdCBhdmFpbGFibGUgaW4gcGhwNCIgd2FzIGZpeGVkLgoJLSBCdWcgIzMwMjA2NjUgImZpbGVfZ2V0X2NvbnRlbnRzKCkgdG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgcGhwNCIgd2FzIGZpeGVkLgoKNS41LjAwMSAoMjAxMC0wNi0yMykKCS0gQSBwcm9ibGVtIG9uIGltYWdlIHN0cmVhbXMgd2FzIGZpeGVkLgoKNS41LjAwMCAoMjAxMC0wNi0yMikKCS0gU2V2ZXJhbCBQREYgc3ludGF4IGVycm9ycyAoYW5kIHJlbGF0ZWQgYnVncykgd2VyZSBmaXhlZC4KCS0gQnVnICMzMDE5MDkwICIvTGVuZ3RoIHZhbHVlcyBhcmUgd3JvbmcgaWYgQUVTIGVuY3J5cHRpb24gaXMgdXNlZCIgd2FzIGZpeGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo1LjQuMDAzICgyMDEwLTA2LTE5KQoJLSBBIHByb2JsZW0gcmVsYXRlZCB0byBwYWdlIGJveGVzIHdhcyBmaXhlZC4KCS0gQnVnICMzMDE2OTIwICJGb250IHN1YnNldHRpbmcgaXNzdWVzIHdoZW4gZWRpdGluZyBwZGYiIHdhcyBwYXJ0aWFsbHkgZml4ZWQgKE5vdGUgdGhhdCBmbGF0dGVuaW5nIHRyYW5zcGFyZW5jeSBsYXllcnMgaXMgY3VycmVudGx5IGluY29tcGF0aWJsZSB3aXRoIFRydWVUeXBlVW5pY29kZSBmb250cykuCgo1LjQuMDAyICgyMDEwLTA2LTE4KQoJLSBBIHByb2JsZW0gcmVsYXRlZCB3aXRoIHNldFByb3RlY3Rpb24oKSBtZXRob2Qgd2FzIGZpeGVkLgoKNS40LjAwMSAoMjAxMC0wNi0xOCkKCS0gQSBwcm9ibGVtIHJlbGF0ZWQgd2l0aCBzZXRQcm90ZWN0aW9uKCkgbWV0aG9kIHdhcyBmaXhlZC4KCjUuNC4wMDAgKDIwMTAtMDYtMTgpCgktIFRoZSBtZXRob2Qgc2V0U2lnbmF0dXJlQXBwZWFyYW5jZSgpIHdhcyBhZGRlZCwgY2hlY2sgdGhlIGV4YW1wbGUgbi4gNTIuCgktIFNldmVyYWwgcHJvYmxlbXMgcmVsYXRlZCB0byBmb250IHN1YnNldHRpbmcgd2VyZSBmaXhlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKNS4zLjAxMCAoMjAxMC0wNi0xNSkKCS0gUHJldmlvdXMgcmVsZWFzZSB3YXMgY29ycnVwdGVkLgoKNS4zLjAwOSAoMjAxMC0wNi0xNSkKCS0gQnVnICMzMDE1OTM0ICJCdWxsZXRzIGRvbid0IGRpc3BsYXkgY29ycmVjdGx5IiB3YXMgZml4ZWQuCgo1LjMuMDA4ICgyMDEwLTA2LTEzKQoJLSBUaGlzIHZlcnNpb24gZml4ZXMgc29tZSBwcm9ibGVtcyBvZiBTVkcgcmFzdGVyaXphdGlvbi4KCjUuMy4wMDcgKDIwMTAtMDYtMTMpCgktIFRoaXMgdmVyc2lvbiBpbXByb3ZlcyBTVkcgc3VwcG9ydC4KCjUuMy4wMDYgKDIwMTAtMDYtMTApCgktIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBhIGNoYW5nZSBpbiB1bmlxaWQgY2FsbHMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQSFA0LgoKNS4zLjAwNSAoMjAxMC0wNi0wOSkKCS0gVGhlIG1ldGhvZCBnZXRQYWdlU2l6ZUZyb21Gb3JtYXQoKSB3YXMgY2hhbmdlZCB0byBpbmNsdWRlIGFsbCBzdGFuZGFyZCBwYWdlIGZvcm1hdHMgKGluY2x1ZGVzIDI4MSBwYWdlIGZvcm1hdHMgKyB2YXJpYXRpb24pLgoKNS4zLjAwNCAoMjAxMC0wNi0wOCkKCS0gQnVnICMzMDEzMjkxICJIVE1MIHRhYmxlIGNlbGwgd2lkdGgiIHdhcyBmaXhlZC4KCS0gQnVnICMzMDEzMjk0ICJIVE1MIHRhYmxlIGNlbGwgYWxpZ25tZW50IiB3YXMgZml4ZWQuCgktIFRoZSBjb2x1bW5zIHdpZHRocyBvZiBIVE1MIHRhYmxlcyBhcmUgbm93IGluaGVyaXRlZCBmcm9tIHRoZSBmaXJzdCByb3cuCgo1LjMuMDAzICgyMDEwLTA2LTA4KQoJLSBCdWcgIzMwMTMxMDIgIkhUTUwgdGFibGUgaGVhZGVyIG1pc2FsaWduZWQgYWZ0ZXIgcGFnZSBicmVhayIgd2FzIGZpeGVkLgoKNS4zLjAwMiAoMjAxMC0wNi0wNykKCS0gVGhlIG1ldGhvZHMgc2V0Rm9udFN1YnNldHRpbmcoKSBhbmQgc2V0Rm9udFN1YnNldHRpbmcoKSB3ZXJlIGFkZGVkIHRvIGNvbnRyb2wgdGhlIGRlZmF1bHQgZm9udCBzdWJzZXR0aW5nIG1vZGUgKHNlZSBleGFtcGxlIG4uIDEpLgoJLSBCdWcgIzMwMTI1OTYgIldoaXRlc3BhY2Ugc2hvdWxkIG5vdCBhcHBlYXJlZCBhZnRlciB1c2UgVGhhaSB0b3AgY2hhcmFjdGVycyIgd2FzIGZpeGVkLgoJLSBFeGFtcGxlcyBuLiAxLCAxNCwgYW5kIDU0IHdlcmUgdXBkYXRlZC4KCjUuMy4wMDEgKDIwMTAtMDYtMDYpCgktIEJhcmNvZGUgUERGNDE3IHdhcyBpbXByb3ZlZCB0byBzdXBwb3J0IE1hY3JvIENvZGUgQmxvY2tzIChzZWUgZXhhbXBsZSBuLiA1MCkuCgo1LjMuMDAwICgyMDEwLTA2LTA1KQoJLSBMaWNlbnNlIHdhcyBjaGFuZ2VkIHRvIEdOVS1MR1BMdjMgKHNlZSB0aGUgdXBkYXRlZCBMSUNFTlNFLlRYVCBmaWxlKS4KCS0gUERGNDE3IGJhcmNvZGUgc3VwcG9ydCB3YXMgYWRkZWQgKGNoZWNrIHRoZSBleGFtcGxlIG4uIDUwKS4KCS0gVGhlIG1ldGhvZCB3cml0ZTJEQmFyY29kZSgpIHdhcyBpbXByb3ZlZCAoc29tZSBwYXJhbWV0ZXJzIHdlcmUgYWRkZWQgYW5kIG90aGVyIGNoYW5nZWQgLSBjaGVjayBleGFtcGxlIG4uIDUwKS4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKNS4yLjAwMCAoMjAxMC0wNi0wMikKCS0gSU1QT1JUQU5UOiBTdXBwb3J0IGZvciBmb250IHN1YnNldHRpbmcgd2FzIGFkZGVkIGJ5IGRlZmF1bHQgdG8gcmVkdWNlIHRoZSBzaXplIG9mIGRvY3VtZW50cyB1c2luZyBsYXJnZSB1bmljb2RlIGZvbnQgZmlsZXMuCgkJSWYgeW91IGVtYmVkIHRoZSB3aG9sZSBmb250IGluIHRoZSBQREYsIHRoZSBwZXJzb24gb24gdGhlIG90aGVyIGVuZCBjYW4gbWFrZSBjaGFuZ2VzIHRvIGl0IGV2ZW4gaWYgaGUgZGlkbid0IGhhdmUgeW91ciBmb250LgoJCUlmIHlvdSBzdWJzZXQgdGhlIGZvbnQsIGZpbGUgc2l6ZSBvZiB0aGUgUERGIHdpbGwgYmUgc21hbGxlciBidXQgdGhlIHBlcnNvbiB3aG8gcmVjZWl2ZXMgeW91ciBQREYgd291bGQgbmVlZCB0byBoYXZlIHlvdXIgc2FtZSBmb250IGluIG9yZGVyIHRvIG1ha2UgY2hhbmdlcyB0byB5b3VyIFBERi4KCS0gVGhlIHNpZ25hdHVyZSBvZiB0aGUgU2V0Rm9udCgpIGFuZCBBZGRGb250KCkgbWV0aG9kcyB3ZXJlIGNoYW5nZWQgdG8gaW5jbHVkZSB0aGUgZm9udCBzdWJzZXR0aW5nIG9wdGlvbiAoc3Vic2V0dGluZyBpcyBhcHBsaWVkIGJ5IGRlZmF1bHQpLgoJLSBFeGFtcGxlcyAxNCBhbmQgNTQgd2VyZSB1cGRhdGVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo1LjEuMDAyICgyMDEwLTA1LTI3KQoJLSBCdWcgIzMwMDc4MTggIlNldEF1dG9QYWdlQnJlYWsgZmFpbHMgd2l0aCBNdWx0aUNlbGwiIHdhcyBmaXhlZC4KCS0gQSBidWcgcmVsYXRlZCB0byBNdWx0aUNlbGwoKSBtaW5pbXVuIGhlaWdodCB3YXMgZml4ZWQuCgo1LjEuMDAxICgyMDEwLTA1LTI2KQoJLSBUaGUgcHJvYmxlbSBvZiBibGFuayBwYWdlIGFmdGVyIHRhYmxlIHdhcyBmaXhlZC4KCjUuMS4wMDAgKDIwMTAtMDUtMjUpCgktIFRoaXMgdmVyc2lvbiBpbmNsdWRlcyBzdXBwb3J0IGZvciBDU1MgKENhc2NhZGluZyBTdHlsZSBTaGVldHMpIChzZWUgZXhhbXBsZSBuLiA2MSkuCgktIFRoZSBjb252ZXJ0SFRNTENvbG9yVG9EZWMoKSBtZXRob2Qgd2FzIGltcHJvdmVkLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo1LjAuMDE0ICgyMDEwLTA1LTIxKQoJLSBBIHByb2JsZW0gb24gY29sb3IgYW5kIHN0eWxlIG9mIEhUTUwgbGlua3Mgd2FzIGZpeGVkLgoJLSBBIGJ1ZyByZWxhdGl2ZSB0byBncmFkaWVudHMgd2FzIGZpeGVkLgoJLSBUaGUgZ2V0U3RyaW5nSGVpZ2h0KCkgbWV0aG9kIHdhcyBhZGRlZCBhbmQgZ2V0TnVtTGluZXMoKSBtZXRob2Qgd2FzIGltcHJvdmVkLgoJLSBBbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkLgoKNS4wLjAxMyAoMjAxMC0wNS0xOSkKCS0gQSBidWcgcmVsYXRlZCB0byBwYWdlLWJyZWFrcyBhbmQgdGFibGUgY2VsbHMgd2FzIGZpeGVkLgoKNS4wLjAxMiAoMjAxMC0wNS0xOSkKCS0gUGFnZSBvcmllbnRhdGlvbiBidWcgd2FzIGZpeGVkLgoJLSBUaGUgYWNjZXNzIHRvIG1ldGhvZCBzZXRQYWdlRm9ybWF0KCkgd2FzIGNoYW5nZWQgdG8gJ3Byb3RlY3RlZCcgYmVjYXVzZSBpdCBpcyBub3QgaW50ZW5kZWQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkLgoKNS4wLjAxMSAoMjAxMC0wNS0xOSkKCS0gUGFnZSBvcmllbnRhdGlvbiBidWcgd2FzIGZpeGVkLgoJLSBCdWcgIzMwMDM5NjYgIk11bHRpcGxlIGNvbHVtbnMgYW5kIG5lc3RlZCBsaXN0cyIgd2FzIGZpeGVkLgoKNS4wLjAxMCAoMjAxMC0wNS0xNykKCS0gVGhlIG1ldGhvZHMgc2V0UGFnZUZvcm1hdCgpLCBzZXRQYWdlT3JpZW50YXRpb24oKSBhbmQgcmVsYXRlZCBtZXRob2RzIHdlcmUgZXh0ZW5kZWQgdG8gaW5jbHVkZSBwYWdlIGJveGVzLCBwYWdlIHJvdGF0aW9ucyBhbmQgcGFnZSB0cmFuc2l0aW9ucy4KCS0gVGhlIG1ldGhvZCBzZXRQYWdlQm94ZXMoKSB3YXMgYWRkZWQgdG8gc2V0IHBhZ2UgYm91bmRhcmllcyAoTWVkaWFCb3gsIENyb3BCb3gsIEJsZWVkQm94LCBUcmltQm94LCBBcnRCb3gpOwoJLSBBIGJ1ZyByZWxhdGl2ZSB0byB1bmRlcmxpbmUsIG92ZXJsaW5lIGFuZCBsaW5ldGhyb3VnaCB3YXMgZml4ZWQuCgo1LjAuMDA5ICgyMDEwLTA1LTE2KQoJLSBCdWcgIzMwMDIzODEgIk11bHRpcGxlIGNvbHVtbnMgYW5kIG5lc3RlZCBsaXN0cyIgd2FzIGZpeGVkLgoKNS4wLjAwOCAoMjAxMC0wNS0xNSkKCS0gQnVnICJDb2x1bW5zIFdyaXRlSFRNTCBhbmQgSnVzdGlmaWNhdGlvbiIgd2FzIGZpeGVkLgoKNS4wLjAwNyAoMjAxMC0wNS0xNCkKCS0gQnVnICMzMDAxMzQ3ICJCdWcgd2hlbiB1c2luZyAgV3JpdGVIVE1MIHdpdGggc2V0RXF1YWxDb2x1bW5zKCkiIHdhcyBmaXhlZC4KCS0gQnVnICMzMDAxNTA1ICJwcm9ibGVtIHdpdGggc3VwIGFuZCBzdWIgdGFncyBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbGluZSIgd2FzIGZpeGVkLgoKNS4wLjAwNiAoMjAxMC0wNS0xMykKCS0gTGVuZ3RoIG9mIGhyIHRhZyB3YXMgZml4ZWQuCgktIEFuIGVycm9yIG9uIDJkIGJhcmNvZGUgbWV0aG9kIHdhcyBmaXhlZC4KCjUuMC4wMDUgKDIwMTAtMDUtMTIpCgktIFdBUk5JTkc6IFRoZSBsb2dpYyBvZiBwZXJtaXNzaW9ucyBvbiB0aGUgU2V0UHJvdGVjdGlvbigpIG1ldGhvZCBoYXMgYmVlbiBpbnZlcnRlZCBhbmQgZXh0ZW5kZWQgKHNlZSBleGFtcGxlIDE2KS4gTm93IHlvdSBoYXZlIHRvIHNwZWNpZnkgdGhlIGZlYXR1cmVzIHlvdSB3YW50IHRvIGJsb2NrLgoJLSBTZXRQcm90ZWN0aW9uKCkgbWV0aG9kIHdhcyBleHRlbmRlZCB0byBzdXBwb3J0IFJTQSBhbmQgQUVTIDEyOCBlbmNyeXB0aW9uIGFuZCBwdWJsaWMta2V5cyAoc2VlIGV4YW1wbGUgMTYpLgoJLSBCdWcgIzI5OTk0ODkgInNldEVxdWFsQ29sdW1ucygpIGFuZCBUT0MgdXNlcyB3cm9uZyBjb2x1bW5zIiB3YXMgZml4ZWQgKHNlZSB0aGUgZXhhbXBsZSAxMCkuCgo1LjAuMDA0ICgyMDEwLTA1LTEwKQoJLSBIVE1MIGxpbmUgYWxpZ25tZW50IHdoZW4gdXNpbmcgc3ViIGFuZCBzdXAgdGFncyB3YXMgZml4ZWQuCgo1LjAuMDAzICgyMDEwLTA1LTA3KQoJLSBIb3Jpem9udGFsIGFsaWdubWVudCB3YXMgZml4ZWQgZm9yIGltYWdlcyBhbmQgYmFyY29kZXMuIE5vdyB0aGUgWCBjb29yZGluYXRlIGlzIGFsd2F5cyByZWxhdGl2ZSB0byB0aGUgbGVmdCBtYXJnaW4uIFVzZSBHZXRBYnNYKCkgaW5zdGVhZCBvZiBHZXRYKCkgdG8gZ2V0IHRoZSBYIHJlbGF0aXZlIHRvIGxlZnQgbWFyZ2luLgoJLSBIZWFkZXIoKSBtZXRob2Qgd2FzIGNoYW5nZWQgdG8gYWNjb3VudCBmb3IgbmV3IGltYWdlIGFsaWdubWVudCBydWxlcy4KCjUuMC4wMDIgKDIwMTAtMDUtMDYpCgktIEJvb2ttYXJrKCkgYW5kIHJlbGF0ZWQgbWV0aG9kcyB3ZXJlIGZpeGVkIHRvIGFjY2VwdCBIVE1MIGNvZGUuCgktIEEgcHJvYmxlbSBvbiBIVE1MIGxpbmtzIHdhcyBmaXhlZC4KCjUuMC4wMDEgKDIwMTAtMDUtMDYpCgktIFByb3RlY3RlZCBtZXRob2QgX3B1dHN0cmVhbSB3YXMgcmUtYWRkZWQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCgktIFRoZSBmb2xsb3dpbmcgbWV0aG9kIHdlcmUgYWRkZWQgdG8gZGlzcGxheSBIVE1MIFRhYmxlIE9mIENvbnRlbnQgKHNlZSBleGFtcGxlIG4uIDU5KToKCQlhZGRUT0NQYWdlKCksIGVuZFRPQ1BhZ2UoKSwgYWRkSFRNTFRPQygpLgoKNS4wLjAwMCAoMjAxMC0wNS0wNSkKCS0gTWV0aG9kIEltYWdlU1ZHKCkgd2FzIGFkZGVkIHRvIGVtYmVkZCBTVkcgaW1hZ2VzIChzZWUgZXhhbXBsZSBuLiA1OCkuIE5vdGUgdGhhdCBub3QgYWxsIFNWRyBpbWFnZXMgYXJlIHN1cHBvcnRlZC4KCS0gTWV0aG9kIHNldFJhc3Rlcml6ZVZlY3RvckltYWdlcygpIHdhcyBhZGRlZCB0byBlbmFibGUvZGlzYWJsZSByYXN0ZXJpemF0aW9uIGZvciB2ZWN0b3IgaW1hZ2VzIHZpYSBJbWFnZU1hZ2ljayBsaWJyYXJ5LgoJLSBNZXRob2QgUm91bmRlZFJlY3RYWSgpIHdhcyBhZGRlZC4KCS0gTWV0aG9kIFBpZVNlY3RvclhZKCkgd2FzIGFkZGVkLgoJLSBHcmFkaWVudCgpIG1ldGhvZCBpcyBub3cgcHVibGljIGFuZCBzdXBwb3J0IG5ldyBmZWF0dXJlcy4KCS0gU2hhZGluZyB0byB0cmFuc3BhcmVuY3kgaXMgbm93IHN1cHBvcnRlZC4KCS0gSW1hZ2UgYWxpZ25tZW50cyB3ZXJlIGZpeGVkLgoJLSBTdXBwb3J0IGZvciBkeW5hbWljIGltYWdlcyB3ZXJlIGltcHJvdmVkLgoJLSBQREZfSU1BR0VfU0NBTEVfUkFUSU8gaGFzIGJlZW4gY2hhbmdlZCB0byAxLjI1IGZvciBiZXR0ZXIgY29tcGF0aWJpbGl0eSB3aXRoIFNWRy4KCS0gUkFXIGFuZCBSQVcyIG1vZGVzIHdlcmUgYWRkZWQgdG8gMkQgQmFyY29kZXMgKHNlZSBleGFtcGxlIG4uIDUwKS4KCS0gQXV0b21hdGljIHBhZGRpbmcgZmVhdHVyZSB3YXMgYWRkZWQgb24gYmFyY29kZXMgKHNlZSBleGFtcGxlcyBuLiAyNyBhbmQgNTApLgoJLSBCdWcgIzI5OTUwMDMgIlJlcHJvZHVjZWQgdGhlYWQgYnVnIiB3YXMgZml4ZWQuCgktIFRoZSBPdXRwdXQoKSBtZXRob2Qgbm93IGFjY2VwdHMgRkkgYW5kIEZEIGRlc3RpbmF0aW9ucyB0byBzYXZlIHRoZSBkb2N1bWVudCBvbiBzZXJ2ZXIgYmVmb3JlIHNlbmRpbmcgaXQgdG8gdGhlIGNsaWVudC4KCS0gRWxsaXBzZSgpIG1ldGhvZCB3YXMgaW1wcm92ZWQgYW5kIGZpeGVkIChzZWUgcGFnZSAyIG9mIGV4YW1wbGUgbi4gMTIpLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgo0LjkuMDE4ICgyMDEwLTA0LTIxKQoJLSBCdWcgaXRlbSAjMjk5MDM1NiAiQ3VycmVudCBmb250IHNpemUgbm90IHJlc3BlY3RlZCB3aXRoIG1vcmUgdGhhbiB0d28gSFRNTCA8cD4iIHdhcyBmaXhlZC4KCjQuOS4wMTcgKDIwMTAtMDQtMjEpCgktIEJ1ZyBpdGVtICMyOTkwMjI0ICJEaWZmZXJlbnQgYmVoYXZpb3VyIGZvciBlcXVpdmFsZW50IEhUTUwgc3RyaW5ncyIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMjk5MDMxNCAiRGFzaCBpcyBub3QgYXBwZWFyaW5nIHdpdGggU0hZIGNoYXJhY3RlciIgd2FzIGZpeGVkLgoKNC45LjAxNiAoMjAxMC0wNC0yMCkKCS0gQW4gZXJyb3Igb24gaHRtbGNvbG9ycy5waHAgd2FzIGZpeGVkLgoJLSBnZXRJbWFnZUZpbGVUeXBlKCkgbWV0aG9kIHdhcyBpbXByb3ZlZC4KCS0gR0lGIGltYWdlcyB3aXRoIHRyYW5zcGFyZW5jeSBhcmUgbm93IGJldHRlciBzdXBwb3J0ZWQuCgktIEF1dG9tYXRpYyBwYWdlIG9yaWVudGF0aW9uIHdhcyBpbXByb3ZlZC4KCjQuOS4wMTUgKDIwMTAtMDQtMjApCgktIEEgbmV3IG1ldGhvZCBjb3B5UGFnZSgpIHdhcyBhZGRlZCB0byBjbG9uZSBwYWdlcyAoc2VlIGV4YW1wbGUgbi4gNDQpLgoJLSBTdXBwb3J0IGZvciB0ZXh0IG92ZXJsaW5lIHdhcyBhZGRlZC4KCS0gVW5kZXJsaW5lIGFuZCBsaW5ldGhyb3VnaCBtZXRob2RzIHdlcmUgZml4ZWQuCgktIEJ1ZyAjMjk4OTA1OCAiU0hZIGNoYXJhY3RlciBjYXVzZXMgdW5uZWNlc3Nhcnkgd29yZC13cmFwcGluZyIgd2FzIGZpeGVkLgoKNC45LjAxNCAoMjAxMC0wNC0xOCkKCS0gQnVnIGl0ZW0gIzI5ODg4NDUgd2FzIGZpeGVkLgoKNC45LjAxMyAoMjAxMC0wNC0xNSkKCS0gSW1hZ2UoKSBhbmQgSW1hZ2VFUFMoKSBtZXRob2RzIHdlcmUgZml4ZWQgYW5kIGltcHJvdmVkOyAkZml0b25wYWdlIHBhcmFtZXRlciB3YXMgYWRkZWQuCgo0LjkuMDEyICgyMDEwLTA0LTEyKQoJLSBUaGUgaHlwaGVuYXRlVGV4dCgpIG1ldGhvZCB3YXMgYWRkZWQgdG8gYXV0b21hdGljYWxseSBoeXBoZW5hdGUgdGV4dCAoc2VlIGV4YW1wbGUgbi4gNDYpLgoKNC45LjAxMSAoMjAxMC0wNC0wNykKCS0gVmVydGljYWwgYWxpZ25tZW50cyBmb3IgQ2VsbCgpIG1ldGhvZCB3ZXJlIGltcHJvdmVkIChzZWUgZXhhbXBsZSBuLiA1NykuCgo0LjkuMDEwICgyMDEwLTA0LTA2KQoJLSBTaWduYXR1cmUgb2YgQ2VsbCgpIG1ldGhvZCBub3cgaW5jbHVkZXMgbmV3IHBhcmFtZXRlcnMgZm9yIHZlcnRpY2FsIGFsaWdubWVudCAoc2VlIGV4YW1wbGUgbi4gNTcpLgoJLSBUZXh0KCkgbWV0aG9kIHdhcyBleHRlbmRlZCB0byBpbmNsdWRlIGFsbCBDZWxsKCkgcGFyYW1ldGVycy4KCS0gSFRNTCBsaW5lIGFsaWdubWVudCBwcm9jZWR1cmUgd2FzIGNoYW5nZWQgdG8gZml4IHNvbWUgYnVncy4KCjQuOS4wMDkgKDIwMTAtMDQtMDUpCgktIFRleHQoKSBtZXRob2Qgd2FzIGZpeGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgoKNC45LjAwOCAoMjAxMC0wNC0wMykKCS0gQWRkaXRpb25hbCBsaW5lIHNwYWNlIGFmdGVyIHRhYmxlIGhlYWRlciB3YXMgcmVtb3ZlZC4KCS0gU3VwcG9ydCBmb3IgSFRNTCBsaXN0cyBpbiBtdWx0aWNvbHVtbiBtb2RlIHdhcyBhZGRlZC4KCS0gVGhlIG1ldGhvZCBzZXRUZXh0UmVuZGVyaW5nTW9kZSgpIHdhcyBhZGRlZCB0byBzZXQgdGV4dCByZW5kZXJpbmcgbW9kZXMgKHNlZSB0aGUgZXhhbXBsZSBuLiAyNikuCgktIFRoZSBmb2xsb3dpbmcgSFRNTCBhdHRyaWJ1dGVzIHdlcmUgYWRkZWQgdG8gc2V0IHRleHQgcmVuZGVyaW5nIG1vZGVzIChzZWUgdGhlIGV4YW1wbGUgbi4gMjYpOiBzdHJva2UsIHN0cm9rZWNvbG9yLCBmaWxsLgoKNC45LjAwNyAoMjAxMC0wNC0wMykKCS0gRm9udCBEZXNjZW50IGNvbXB1dGF0aW9uIHdhcyBmaXhlZCAocGF0Y2ggIzI5ODE0NDEpLgoKNC45LjAwNiAoMjAxMC0wNC0wMikKCS0gVGhlIGNvbnN0YW50IEtfVENQREZfQ0FMTFNfSU5fSFRNTCB3YXMgYWRkZWQgb24gY29uZmlndXJhdGlvbiBmaWxlIHRvIGVuYWJsZS9kaXNhYmxlIHRoZSBhYmlsaXR5IHRvIGNhbGwgVENQREYgbWV0aG9kcyBpbiBIVE1MLgoJLSBUaGUgdXNhZ2Ugb2YgdGNwZGYgdGFnIGluIEhUTUwgbW9kZSB3YXMgY2hhbmdlZCB0byByZW1vdmUgdGhlIHBvc3NpYmxlIHNlY3VyaXR5IGZsYXcgb2ZmZXJlZCBieSB0aGUgZXZhbCgpIGZ1bmN0aW9uICh0aGFua3MgdG8gTWF0dGhpYXMgSGVja2VyIGZvciBzcG90dGluZyB0aGlzIHNlY3VyaXR5IHByb2JsZW0pLiBTZWUgdGhlIG5ldyBleGFtcGxlIG4uIDQ5IGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgoKNC45LjAwNSAoMjAxMC0wNC0wMSkKCS0gQnVnIyAyOTgwMzU0ICJXcm9uZyBGaWxlIGF0dGFjaG1lbnQgZGVzY3JpcHRpb24gd2l0aCBzZWN1cml0eSIgd2FzIGZpeGVkLgoJLSBTZXZlcmFsIHByb2JsZW1zIHdpdGggSFRNTCBsaW5lIGFsaWdubWVudCB3ZXJlIGZpeGVkLgoJLSBUaGUgY29uc3RhbnQgS19USEFJX1RPUENIQVIgd2FzIGFkZGVkIG9uIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBlbmFibGUvZGlzYWJsZSB0aGUgc3BlY2lhbCBwcm9jZWR1cmUgdXNlZCB0byBhdm9pZCB0aGUgb3ZlcmxhcHBpbmQgb2Ygc3ltYm9scyBvbiBUaGFpIGxhbmd1YWdlLgoJLSBBIHByb2JsZW0gd2l0aCBmb250IG5hbWUgZGlyZWN0b3J5IHdhcyBmaXhlZC4KCS0gQSBidWcgb24gX2Rlc3Ryb3koKSBtZXRob2Qgd2FzIGZpeGVkLgoKNC45LjAwNCAoMjAxMC0wMy0zMSkKCS0gUGF0Y2ggIzk3OTY4MSAiR2V0Q2hhcldpZHRoIC0gZGVmYXVsdCBjaGFyYWN0ZXIgd2lkdGgiIHdhcyBhcHBsaWVkIChidWdmaXgpLgoKNC45LjAwMyAoMjAxMC0wMy0zMCkKCS0gUHJvYmxlbSBvZiBmaXJzdCA8YnIgLz4gb24gbXVsdGlwbGUgY29sdW1ucyB3YXMgZml4ZWQuCgktIEhUTUwgbGluZSBhbGlnbm1lbnQgd2FzIGZpeGVkLgoJLSBBIFFSLWNvZGUgYnVnIHdhcyBmaXhlZC4KCjQuOS4wMDIgKDIwMTAtMDMtMjkpCgktIFBhdGNoICMyOTc4MzQ5ICIkaWdub3JlX21pbl9oZWlnaHQgaXMgaWdub3JlZCBpbiBmdW5jdGlvbiBDZWxsKCkiIHdhcyBhcHBsaWVkLgoJLSBCdWcgIzI5Nzg2MDcgIjJEIEJhcmNvZGVzIGFyZSB3cm9uZyIgd2FzIGZpeGVkLgoJLSBBIHByb2JsZW0gd2l0aCBIVE1MIGJsb2NrIHRhZ3Mgd2FzIGZpeGVkLgoJLSBBcnRpZmljaWFsIGl0YWxpYyBmb3IgQ0lELTAgZm9udHMgd2FzIGFkZGVkLgoJLSBTZXZlcmFsIG11bHRpY29sdW1uIGJ1Z3Mgd2VyZSBmaXhlZC4KCS0gU3VwcG9ydCBmb3IgSFRNTCB0YWJsZXMgb24gbXVsdGljb2x1bW4gd2FzIGFkZGVkLgoKNC45LjAwMSAoMjAxMC0wMy0yOCkKCS0gUVIgQ29kZSBtaW5vciBidWcgd2FzIGZpeGVkLgoJLSBNdWx0aWNvbHVtbiBtb2RlIHdhcyBhZGRlZCAoc2VlIHRoZSBuZXcgZXhhbXBsZSBuLiAxMCkuCgktIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3ZXJlIGFkZGVkOiBzZXRFcXVhbENvbHVtbnMoKSwgc2V0Q29sdW1uc0FycmF5KCksIHNlbGVjdENvbHVtbigpLgoJLSBUaGFpIGRpYWNyaXRpY3Mgc3VwcG9ydCB3ZXJlIGNoYW5nZWQgKG5vdGUgdGhhdCB0aGlzIGlzIGluY29tcGF0aWJsZSB3aXRoIGh0bWwganVzdGlmaWNhdGlvbikuCgo0LjkuMDAwICgyMDEwLTAzLTI3KQoJLSBRUiBDb2RlICgyRCBiYXJjb2RlKSBzdXBwb3J0IHdhcyBhZGRlZCAoc2VlIGV4YW1wbGUgbi4gNTApLgoJLSBUaGUgZm9sbG93aW5nIG1ldGhvZHMgd2VyZSBhZGRlZCB0byBwcmludCBjcm9wIGFuZCByZWdpc3RyYXRpb24gbWFya3MgKHNlZSBleGFtcGxlIG4uIDU2KTogY29sb3JSZWdpc3RyYXRpb25CYXIoKSwgY3JvcE1hcmsoKSwgcmVnaXN0cmF0aW9uTWFyaygpLgoJLSBMaW1pdGVkIHN1cHBvcnQgZm9yIENTUyBsaW5lLWhlaWdodCBwcm9wZXJ0eSB3YXMgYWRkZWQuCgktIEdyYWRpZW50IG1ldGhvZCBub3cgc3VwcG9ydHMgR3JheSwgUkdCIGFuZCBDTVlLIHNwYWNlIGNvbG9yLgoJLSBFeGFtcGxlIG4uIDUxIHdhcyB1cGRhdGVkLgoJLSBWZXJ0aWNhbCBhbGlnbm1lbnQgb2YgZm9udCBpbnNpZGUgY2VsbCB3YXMgZml4ZWQuCgktIFN1cHBvcnQgZm9yIG11bHRpcGxlIFRoYWkgZGlhY3JpdGljcyB3YXMgYWRkZWQuCgktIEJ1ZyBpdGVtICMyOTc0OTI5ICJEdXBsaWNhdGUgY2FzZSB2YWx1ZXMiIHdhcyBmaXhlZC4KCS0gQnVnIGl0ZW0gIzI5NzY3MjkgIkZpbGUgYXR0YWNobWVudCBub3Qgd29ya2luZyB3aXRoIHNlY3VyaXR5IiB3YXMgZml4ZWQuCgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjQuOC4wMzkgKDIwMTAtMDMtMjApCgktIFByb2JsZW1zIHJlbGF0ZWQgdG8gY3VzdG9tIGxvY2FsZSBzZXR0aW5ncyB3ZXJlIGZpeGVkLgoJLSBQcm9ibGVtcyByZWxhdGVkIHRvIEhUTUwgb24gSGVhZGVyIGFuZCBGb290ZXIgd2VyZSBmaXhlZC4KCjQuOC4wMzggKDIwMTAtMDMtMTMpCgktIFZhcmlvdXMgYnVncyByZWxhdGVkIHRvIHBhZ2UtYnJlYWsgaW4gSFRNTCBtb2RlIHdlcmUgZml4ZWQuCgktIEJ1ZyBpdGVtICMyOTY4OTc0ICJBbm90aGVyIDx0aGVhZD4gcGFnZWJyZWFrIHByb2JsZW0iIHdhcyBmaXhlZC4KCS0gQnVnIGl0ZW0gIzI5NjkyNzYgImp1c3RpZmljYXRpb24gcHJvYmxlbSIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMjk2OTI4OSAiYnVnIHdoZW4gdXNpbmcganVzdGlmaWVkIHRleHQgYW5kIGN1c3RvbSBoZWFkZXJzIiB3YXMgZml4ZWQuCgktIEltYWdlcyBhcmUgbm93IGF1dG9tYXRpY2FsbHkgcmVzaXplZCB0byBiZSBjb250YWluZWQgb24gdGhlIHBhZ2UuCgktIFNvbWUgSFRNTCBsaW5lIGFsaWdubWVudHMgd2VyZSBmaXhlZC4KCS0gU2lnbmF0dXJlIG9mIEFkZFBhZ2UoKSBhbmQgU2V0TWFyZ2lucygpIG1ldGhvZHMgd2VyZSBjaGFuZ2VkIHRvIGluY2x1ZGUgYW4gb3B0aW9uIHRvIHNldCBkZWZhdWx0IHBhZ2UgbWFyZ2lucy4KCjQuOC4wMzcgKDIwMTAtMDMtMDMpCgktIEJ1ZyBpdGVtICMyOTYyMDY4IHdhcyBmaXhlZC4KCS0gQnVnIGl0ZW0gIzI5NjcwMTcgIlByb2JsZW1zIHdpdGggPHRoZWFkPiBhbmQgcGFnZWJyZWFrcyIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMjk2NzAyMyAidGFibGUgaGVhZGVyIGxvc3Qgd2l0aCBwYWdlYnJlYWsiIHdhcyBmaXhlZC4KCS0gQnVnIGl0ZW0gIzI5NjcwMzIgIkhlYWRlciBsb3N0IHdpdGggbmVzdGVkIHRhYmxlcyIgd2FzIGZpeGVkLgoKNC44LjAzNiAoMjAxMC0wMi0yNCkKCS0gQXV0b21hdGljIHBhZ2UgYnJlYWsgZm9yIEhUTUwgaW1hZ2VzIHdhcyBpbXByb3ZlZC4KCS0gRXhhbXBsZSAxMCB3YXMgdXBkYXRlZC4KCS0gSmFwYW5lc2Ugd2FzIHJlbW92ZWQgZnJvbSBleGFtcGxlIDggYmVjYXVzZSB0aGUgZnJlZXNlcmlmIGZvbnQgZG9lc24ndCBjb250YWluIGphcGFuZXNlICh5b3UgY2FuIGRpc3BsYXkgaXQgdXNpbmcgYXJpYWx1bmljaWQwIGZvbnQpLgoKNC44LjAzNSAoMjAxMC0wMi0yMykKCS0gQXV0b21hdGljIHBhZ2UgYnJlYWsgZm9yIEhUTUwgaW1hZ2VzIHdhcyBhZGRlZC4KCS0gU3VwcG9ydCBmb3IgbXVsdGljb2x1bW4gSFRNTCB3YXMgYWRkZWQgKGV4YW1wbGUgMTAgd2FzIHVwZGF0ZWQpLgoKNC44LjAzNCAoMjAxMC0wMi0xNykKCS0gTGFuZ3VhZ2UgZmlsZXMgd2VyZSB1cGRhdGVkLgoKNC44LjAzMyAoMjAxMC0wMi0xMikKCS0gQSBidWcgcmVsYXRlZCB0byBwcm90ZWN0aW9uIG1vZGUgd2l0aCBsaW5rcyB3YXMgZml4ZWQuCgo0LjguMDMyICgyMDEwLTAyLTA0KQoJLSBBIGJ1ZyByZWxhdGVkIHRvICRtYXhoIHBhcmFtZXRlciBvbiBXcml0ZSgpIGFuZCBNdWx0aUNlbGwoKSB3YXMgZml4ZWQuCgktIFN1cHBvcnQgZm9yIGJvZHkgdGFnIHdhcyBhZGRlZC4KCjQuOC4wMzEgKDIwMTAtMDEtMzApCgktIEJ1ZyBpdGVtICMyOTQxNTg5ICJwYXJhZ3JhcGgganVzdGlmeSBub3Qgd29ya2luZyBvbiBzb21lIG5vbi1DIGxvY2FsZXMiIHdhcyBmaXhlZC4KCjQuOC4wMzAgKDIwMTAtMDEtMjcpCgktIFNvbWUgdGV4dCBhbGlnbm1lbnQgY2FzZXMgd2VyZSBmaXhlZC4KCjQuOC4wMjkgKDIwMTAtMDEtMjcpCgktIEJ1ZyBpdGVtICMyOTQxMDU3ICJUT0MgRXJyb3IgaW4gUERGIEZpbGUgT3V0cHV0IiB3YXMgZml4ZWQuCgktIFNvbWUgdGV4dCBhbGlnbm1lbnQgY2FzZXMgd2VyZSBmaXhlZC4KCjQuOC4wMjggKDIwMTAtMDEtMjYpCgktIFRleHQgYWxpZ25tZW50IGZvciBSVEwgbW9kZSB3YXMgZml4ZWQuCgo0LjguMDI3ICgyMDEwLTAxLTI1KQoJLSBCdWcgaXRlbSAjMjkzODQxMiAiVGFibGUgcmVsYXRlZCBwcm9ibGVtcyAtIHRoZWFkLCBub2JyLCB0YWJsZSB3aWR0aCIgd2FzIGZpeGVkLgoKNC44LjAyNiAoMjAxMC0wMS0xOSkKCS0gVGhlIG1pc3NwZWxsZWQgd29yZCAibGVuZ2h0IiB3YXMgcmVwbGFjZWQgd2l0aCAibGVuZ3RoIiBpbiBzb21lIHZhcmlhYmxlcyBhbmQgY29tbWVudHMuCgo0LjguMDI1ICgyMDEwLTAxLTE4KQoJLSBhZGRFeHRHU3RhdGUoKSBtZXRob2Qgd2FzIGltcHJvdmVkIHRvIHJldXNlIGV4aXN0aW5nIEV4dEdTdGF0ZSBvYmplY3RzLgoKNC44LjAyNCAoMjAxMC0wMS0xNSkKCS0gSnVzdGlmaWNhdGlvbiBtb2RlIGZvciBIVE1MIHdhcyBmaXhlZCAoQnVnIGl0ZW0gIzI5MzI0NzApLgoKNC44LjAyMyAoMjAxMC0wMS0xNSkKCS0gQnVnIGl0ZW0gIzI5MzI0NzAgIlNvbWUgSFRNTCBlbnRpdGllcyBicmVha3MganVzdGlmaWNhdGlvbiIgd2FzIGZpeGVkLgoKNC44LjAyMiAoMjAxMC0wMS0xNCkKCS0gU291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbiB3YXMgZml4ZWQuCgo0LjguMDIxICgyMDEwLTAxLTAzKQoJLSBBIEJ1ZyByZWxhdGl2ZSB0byBUYWJsZSBPZiBDb250ZW50IGluZGV4IHdhcyBmaXhlZC4KCjQuOC4wMjAgKDIwMDktMTItMjEpCgktIEJ1ZyBpdGVtICMyOTE4NTQ1ICJEaXNwbGF5IHByb2JsZW0gb2YgdGhlIGZpcnN0IHJvdyBvZiBhIHRhYmxlIHdpdGggbGFyZ2VyIGZvbnQiIHdhcyBmaXhlZC4KCS0gQSBCdWcgcmVsYXRpdmUgdG8gdGFibGUgcm93c3BhbiBtb2RlIHdhcyBmaXhlZC4KCjQuOC4wMTkgKDIwMDktMTItMTYpCgktIEJ1ZyBpdGVtICMyOTE1Njg0ICJJbWFnZSBzaXplIiB3YXMgZml4ZWQuCgktIEJ1ZyBpdGVtICMyOTE0OTk1ICJJbWFnZSBqcGVnIHF1YWxpdHkiIHdhcyBmaXhlZC4KCS0gVGhlIHNpZ25hdHVyZSBvZiB0aGUgSW1hZ2UoKSBtZXRob2Qgd2FzIGNoYW5nZWQgKGNoZWNrIHRoZSBkb2N1bWVudGF0aW9uIGZvciB0aGUgJHJlc2l6ZSBwYXJhbWV0ZXIpLgoKNC44LjAxOCAoMjAwOS0xMi0xNSkKCS0gQnVnIGl0ZW0gIzI5MTQzNTIgIndyaXRlIGVycm9yIiB3YXMgZml4ZWQuCgo0LjguMDE3ICgyMDA5LTExLTI3KQoJLSBUSEVBRCBwcm9ibGVtIHdoZW4gdGFibGUgaXMgdXNlZCBvbiBoZWFkZXIvZm9vdGVyIHdhcyBmaXhlZC4KCS0gQSBmaXJzdCBsaW5lIGFsaWdubWVudCBvbiBIVE1MIGp1c3RpZmljYXRpb24gd2FzIGZpeGVkLgoJLSBNZXRob2QgZ2V0SW1hZ2VGaWxlVHlwZSgpIHdhcyBhZGRlZC4KCS0gSW1hZ2VzIHdpdGggdW5rbm93biBleHRlbnNpb24gYW5kIHR5cGUgYXJlIG5vdyBzdXBwb3J0ZWQgdmlhIEltYWdlTWFnaWNrIFBIUCBleHRlbnNpb24uCgo0LjguMDE2ICgyMDA5LTExLTIxKQoJLSBEb2N1bWVudCBJbmZvcm1hdGlvbiBEaWN0aW9uYXJ5IHdhcyBmaXhlZC4KCS0gQ1NTIGF0dHJpYnV0ZXMgJ3BhZ2UtYnJlYWstYmVmb3JlJywgJ3BhZ2UtYnJlYWstYWZ0ZXInIGFuZCAncGFnZS1icmVhay1pbnNpZGUnIGFyZSBub3cgc3VwcG9ydGVkLgoJLSBQcm9ibGVtIG9mIHVuY2xvc2VkIGxhc3QgcGFnZSB3YXMgZml4ZWQuCgktIFByb2JsZW0gb2YgJ3RoZWFkJyB1bm5lY2Vzc2FyaWx5IHJlcGVhdGVkIG9uIHRoZSBuZXh0IHBhZ2Ugd2FzIGZpeGVkLgoKNC44LjAxNSAoMjAwOS0xMS0yMCkKCS0gQSBwcm9ibGVtIHdpdGggc29tZSBQTkcgdHJhbnNwYXJlbmN5IGltYWdlcyB3YXMgZml4ZWQuCgktIEJ1ZyAjMjkwMDc2MiAiU29ydCBpc3N1ZXMgaW4gQm9va21hcmtzIiB3YXMgZml4ZWQuCgktIFRleHQganVzdGlmaWNhdGlvbiB3YXMgZml4ZWQgZm9yIHZhcmlvdXMgbW9kZXM6IHVuZGVybGluZSwgc3RyaWtlb3V0IGFuZCBiYWNrZ3JvdW5kLgoKNC44LjAxNCAoMjAwOS0xMS0wNCkKCS0gQnVnIGl0ZW0gIzI4OTEzMTYgIndyaXRlSFRNTCwgdW5kZXJsaW5pbmcgcmVwbGFjaW5nIHNwYWNlcyIgd2FzIGZpeGVkLgoJLSBUaGUgaGFuZGxpbmcgb2YgdGVtcG9yYXJ5IFJUTCB0ZXh0IGRpcmVjdGlvbiBtb2RlIHdhcyBmaXhlZC4KCjQuOC4wMTMgKDIwMDktMTAtMjYpCgktIEJ1ZyBpdGVtICMyODg0NzI5ICJQcm9ibGVtIHdpdGggd29yZC13cmFwIGFuZCBoeXBoZW4iIHdhcyBmaXhlZC4KCjQuOC4wMTIgKDIwMDktMTAtMjMpCgktIFRhYmxlIGNlbGwgYWxpZ25tZW50cyBmb3IgUlRMIGJvb2tsZXQgbW9kZSB3ZXJlIGZpeGVkLgoJLSBJbWFnZXMgYW5kIGJhcmNvZGUgYWxpZ25tZW50cyBmb3IgYm9va2xldCBtb2RlIHdlcmUgZml4ZWQuCgo0LjguMDExICgyMDA5LTEwLTIyKQoJLSBEZWphVnUgZm9udHMgd2VyZSB1cGRhdGVkIHRvIGxhdGVzdCB2ZXJzaW9uLgoKNC44LjAxMCAoMjAwOS0xMC0yMSkKCS0gQm9va21hcmsgZm9yIFRPQyBwYWdlIHdhcyBhZGRlZC4KCS0gU2lnbmF0dXJlIG9mIGFkZFRPQygpIG1ldGhvZCBpcyBjaGFuZ2VkLgoJLSBCb29rbWFya3MgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IHNvcnRlZCBieSBwYWdlIGFuZCBZIHBvc2l0aW9uLgoJLSBFeGFtcGxlIG4uIDQ1IHdhcyB1cGRhdGVkLgoJLSBFeGFtcGxlIG4uIDU1IHdhcyBhZGRlZCB0byBkaXNwbGF5IGFsbCBjaGFyYWN0ZXMgYXZhaWxhYmxlIG9uIGNvcmUgZm9udHMuCgo0LjguMDA5ICgyMDA5LTA5LTMwKQoJLSBDb21wYXRpYmlsaXR5IHdpdGggUEhQIDUuMyB3YXMgaW1wcm92ZWQuCgktIEFsbCBleGFtcGxlcyB3ZXJlIHVwZGF0ZWQuCgktIEluZGV4IGZpbGUgZm9yIGV4YW1wbGVzIHdhcyBhZGRlZC4KCjQuOC4wMDggKDIwMDktMDktMjkpCgktIEV4YW1wbGUgNDkgd2FzIHVwZGF0ZWQuCgktIFVuZGVybGluZSBhbmQgbGluZXRocm91Z2ggbm93IHdvcmtzIHdpdGggY2VsbCBzdHJldGNoaW5nIG1vZGUuCgo0LjguMDA3ICgyMDA5LTA5LTIzKQoJLSBJbmZpbml0ZSBsb29wIHByb2JsZW0gY2F1c2VkIGJ5IG5vYnIgYXR0cmlidXRlIHdhcyBmaXhlZC4KCjQuOC4wMDYgKDIwMDktMDktMjMpCgktIEJ1ZyBpdGVtICMyODY0NTIyICJObyBpbWFnZXMgaWYgRE9DVU1FTlRfUk9PVD09Jy8nIiB3YXMgZml4ZWQuCgktIFN1cHBvcnQgZm9yIHRleHQtaW5kZW50IENTUyBhdHRyaWJ1dGUgd2FzIGFkZGVkLgoJLSBNZXRob2Qgcm9sbGJhY2tUcmFuc2FjdGlvbigpIHdhcyBjaGFuZ2VkIHRvIHN1cHBvcnQgc2VsZi1yZWFzc2lnbWVudCBvZiBwcmV2aW91cyBvYmplY3QgKGNoZWNrIHNvdXJjZSBjb2RlIGRvY3VtZW50YXRpb24pLgoJLSBTdXBwb3J0IGZvciB0aGUgSFRNTCAibm9iciIgYXR0cmlidXRlIHdhcyBhZGRlZCB0byBhdm9pZCBzcGxpdHRpbmcgYSB0YWJsZSBvciBhIHRhYmxlIHJvdyBvbiB0d28gcGFnZXMgKGkuZS46IDx0ciBub2JyPSJ0cnVlIj4uLi48L3RyPikuCgo0LjguMDA1ICgyMDA5LTA5LTE3KQoJLSBBIGJ1ZyByZWxhdGl2ZSB0byBtdWx0aXBsZSB0cmFuc2Zvcm1hdGlvbnMgYW5kIGFubm90YXRpb25zIHdhcyBmaXhlZC4KCjQuOC4wMDQgKDIwMDktMDktMTYpCgktIEEgYnVnIG9uIF9wdXRhbm5vdHNyZWZzKCkgbWV0aG9kIHdhcyBmaXhlZC4KCjQuOC4wMDMgKDIwMDktMDktMTUpCgktIEJ1ZyBpdGVtICMyODU4NzU0ICJEaXZpc2lvbiBieSB6ZXJvIiB3YXMgZml4ZWQuCgktIEEgYnVnIHJlbGF0aXZlIHRvIEhUTUwgbGlzdCBpdGVtcyB3YXMgZml4ZWQuCgktIEEgYnVnIHJlbGF0aXZlIHRvIGZvcm0gZmllbGRzIG9uIG11bHRpcGxlIHBhZ2VzIHdhcyBmaXhlZC4KCS0gUG9seUxpbmUoKSBtZXRob2Qgd2FzIGFkZGVkIChzZWUgZXhhbXBsZSBuLiAxMikuCgktIFNpZ25hdHVyZSBvZiBQb2x5Z29uKCkgbWV0aG9kIHdhcyBjaGFuZ2VkLgoKNC44LjAwMiAoMjAwOS0wOS0xMikKCS0gQSBwcm9ibGVtIHJlbGF0ZWQgdG8gQ0lELTAgZm9udHMgb2Zmc2V0IHdhcyBmaXhlZDogaWYgdGhlICRjd1sxXSBlbnRyeSBvbiB0aGUgQ0lELTAgZm9udCBmaWxlIGlzIG5vdCBkZWZpbmVkLCB0aGVuIGEgQ0lEIGtleXMgb2Zmc2V0IGlzIGludHJvZHVjZWQuCgo0LjguMDAxICgyMDA5LTA5LTA5KQoJLSBUaGUgYXBwZWFyYW5jZSBzdHJlYW1zIChBUCkgZm9yIGFub3RhdGlvbnMgZm9ybSBmaWVsZHMgd2FzIGZpeGVkIChzZWUgZXhhbXBsZXMgbi4gMTQgYW5kIDU0KS4KCS0gUmFkaW9idXR0b25zIHdlcmUgZml4ZWQuCgo0LjguMDAwICgyMDA5LTA5LTA3KQoJLSBUaGlzIHZlcnNpb24gaW5jbHVkZXMgc29tZSBzdXBwb3J0IGZvciBGb3JtcyBmaWVsZHMgKHNlZSBleGFtcGxlIG4uIDE0KSBhbmQgWEhUTUwgZm9ybXMgKHNlZSBleGFtcGxlIG4uIDU0KS4KCS0gVGhlIGZvbGxvd2luZyBtZXRob2RzIHdlcmUgY2hhbmdlZCB0byB3b3JrIHdpdGhvdXQgSmF2YVNjcmlwdDogVGV4dEZpZWxkKCksIFJhZGlvQnV0dG9uKCksIExpc3RCb3goKSwgQ29tYm9Cb3goKSwgQ2hlY2tCb3goKSwgQnV0dG9uKCkuCgktIFN1cHBvcnQgZm9yIFdpZGdldCBhbm5vdGF0aW9ucyB3YXMgaW1wcm92ZWQuCgktIEFsaWdubWVudCBvZiBhbm5vdGF0aW9uIG9iamVjdHMgd2FzIGZpeGVkIChleGFtcGxlcyAzNiBhbmQgNDEgd2VyZSB1cGRhdGVkKS4KCS0gYWRkSmF2YXNjcmlwdE9iamVjdCgpIG1ldGhvZCB3YXMgYWRkZWQuCgktIFNpZ25hdHVyZSBvZiBJbWFnZSgpIG1ldGhvZCB3YXMgY2hhbmdlZC4KCS0gaHRtbGNvbG9ycy5waHAgZmlsZSB3YXMgdXBkYXRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKNC43LjAwMyAoMjAwOS0wOS0wMykKCS0gU3VwcG9ydCBmb3IgVENQREYgbWV0aG9kcyBvbiBIVE1MIHdhcyBpbXByb3ZlZCAoc2VlIGV4YW1wbGUgbi4gNDkpLgoKNC43LjAwMiAoMjAwOS0wOS0wMikKCS0gQnVnIGl0ZW0gIzI4NDg4OTIgIndyaXRlSFRNTCArIHRhYmxlOiBHYXBzIGJldHdlZW4gcm93cyIgd2FzIGZpeGVkLgoJLSBKYXZhU2NyaXB0IHN1cHBvcnQgd2FzIGZpeGVkIChzZWUgZXhhbXBsZSBuLiA1MykuCgo0LjcuMDAxICgyMDA5LTA4LTMwKQoJLSBUaGUgUG9seWdvbigpIGFuZCBBcnJvdygpIG1ldGhvZHMgd2VyZSBmaXhlZCBhbmQgaW1wcm92ZWQgKHNlZSBleGFtcGxlIG4uIDEyKS4KCjQuNy4wMDAgKDIwMDktMDgtMjkpCgktIFRoaXMgaXMgYSBtYWpvciByZWxlYXNlLgoJLSBTb21lIHByb2NlZHVyZXMgd2VyZSBpbnRlcm5hbGx5IG9wdGltaXplZC4KCS0gVGhlIHByb2JsZW0gb2YgbWl4ZWQgc2lnbmF0dXJlIGFuZCBhbm5vdGF0aW9ucyB3YXMgZml4ZWQgKGV4YW1wbGUgbi4gNTIpLgoKNC42LjAzMCAoMjAwOS0wOC0yOSkKCS0gSU1QT1JUQU5UOiBwZXJjZW50YWdlcyBvbiB0YWJsZSBjZWxsIHdpZHRocyBhcmUgbm93IHJlbGF0aXZlIHRvIHRoZSBmdWxsIHRhYmxlIHdpZHRoIChhcyBpbiBzdGFuZGFyZCBIVE1MKS4KCS0gVmFyaW91cyBtaW5vciBidWdzIHdlcmUgZml4ZWQuCgktIEV4YW1wbGUgbi4gNTIgKGRpZ2l0YWwgc2lnbmF0dXJlKSB3YXMgdXBkYXRlZC4KCjQuNi4wMjkgKDIwMDktMDgtMjYpCgktIFBIUDQgdmVyc2lvbiB3YXMgZml4ZWQuCgo0LjYuMDI4ICgyMDA5LTA4LTI1KQoJLSBTaWduYXR1cmUgYWxnb3JpdGhtIHdhcyBmaW5hbGx5IGZpeGVkIChzZWUgZXhhbXBsZSBuLiA1MikuCgo0LjYuMDI3ICgyMDA5LTA4LTI0KQoJLSBUQ1BERiBub3cgc3VwcG9ydHMgdW5lbWJlZGRlZCBUcnVlVHlwZVVuaWNvZGUgRm9udHMgKGp1c3QgY29tbWVudCB0aGUgJGZpbGUgZW50cnkgb24gdGhlIGZvbnRzJyBwaHAgZmlsZS4KCjQuNi4wMjYgKDIwMDktMDgtMjEpCgktIEJ1ZyAjMjg0MTY5MyAiUHJvYmxlbSB3aXRoIE11bHRpQ2VsbCBhbmQgaXNodG1sIGFuZCBqdXN0aWZpY2F0aW9uIiB3YXMgZml4ZWQuCgktIFNpZ25hdHVyZSBmdW5jdGlvbnMgd2VyZSBpbXByb3ZlZCBidXQgbm90IHlldCBmaXhlZCAodGNwZGYuY3J0IGFuZCBleGFtcGxlIG4uIDUyIHdlcmUgdXBkYXRlZCkuCgo0LjYuMDI1ICgyMDA5LTA4LTE3KQoJLSBDYXJyaWFnZSByZXR1cm5zIChccikgd2VyZSByZW1vdmVkIGZyb20gc291cmNlIGNvZGUuCgktIFByb2JsZW0gcmVsYXRlZCB0byBzZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoKSBkZXByYWNhdGVkIHdhcyBmaXhlZC4KCjQuNi4wMjQgKDIwMDktMDgtMDcpCgktIEJ1ZyBpdGVtICMyODMzNTU2ICJqdXN0aWZpY2F0aW9uIHVzaW5nIG90aGVyIHVuaXRzIHRoYW4gbW0iIHdhcyBmaXhlZC4KCS0gRG9jdW1lbnRhdGlvbiB3YXMgZml4ZWQvdXBkYXRlZC4KCjQuNi4wMjMgKDIwMDktMDgtMDIpCgktIEJ1ZyBpdGVtICMyODMwNTM3ICJNaXJyb3JIIGNhbiBzaG93IG1hc2sgZm9yIHRyYW5zcGFyZW50IFBOR3MiIHdhcyBmaXhlZC4KCjQuNi4wMjIgKDIwMDktMDctMjQpCgktIEEgYnVnIHJlbGF0aXZlIHRvIHNpbmdsZSBsaW5lIHByaW50aW5nIHdoZW4gdXNpbmcgV3JpdGVIVE1MQ2VsbCgpIHdhcyBmaXhlZC4KCS0gU2lnbmF0dXJlIHN1cHBvcnQgd2VyZSBpbXByb3ZlZCBidXQgaXMgc3RpbGwgZXhwZXJpbWVudGFsLgoJLSBGb250cyBGcmVlIGFuZCBEZWphdnUgd2VyZSB1cGRhdGVkIHRvIGxhdGVzdCB2ZXJzaW9ucy4KCjQuNi4wMjEgKDIwMDktMDctMjApCgktIEJ1ZyBpdGVtICMyODI0MDE1ICJYSFRNTCBBbXBlcnNhbmQgJmFtcDsgaW4gaHlwZXJsaW5rIGJ1ZyIgd2FzIGZpeGVkLgoJLSBCdWcgaXRlbSAjMjgyNDAzNiAiSW1hZ2UgYXMgaHlwZXJsaW5rIGluIHRhYmxlLCB0ZXh0IGRpc3BsYWNlZCBhdCBwYWdlIGJyZWFrIiB3YXMgZml4ZWQuCgktIExpbmtzIGFsaWdubWVudCBvbiBqdXN0aWZpZWQgdGV4dCB3YXMgZml4ZWQuCgktIFVuaWNvZGUgIlx1IiBtb2RpZmllciB3YXMgYWRkZWQgdG8gcmVfc3BhY2VzIHZhcmlhYmxlIGJ5IGRlZmF1bHQuCgo0LjYuMDIwICgyMDA5LTA3LTE2KQoJLSBCdWcgaXRlbSAjMjgyMTkyMSAiaXNzdWUgaW4gZXhhbXBsZSAxOCIgd2FzIGZpeGVkLgoJLSBTaWduYXR1cmUgb2YgU2V0UlRMKCkgbWV0aG9kIHdhcyBjaGFuZ2VkLgoKNC42LjAxOSAoMjAwOS0wNy0xMykKCS0gQnVnIGl0ZW0gIzI4MjA3MDMgInhyZWYgdGFibGUgYnJva2VuIiB3YXMgZml4ZWQuCgo0LjYuMDE4ICgyMDA5LTA3LTEwKQoJLSBCdWcgaXRlbSAjMjgxOTMxOSAiVGV4dCBvdmVyIHRleHQiIHdhcyBmaXhlZC4KCS0gTWV0aG9kIEFycm93KCkgd2FzIGFkZGVkIHRvIHByaW50IGdyYXBoaWMgYXJyb3dzIChleGFtcGxlIDEyIHdhcyB1cGRhdGVkKS4KCjQuNi4wMTcgKDIwMDktMDctMDUpCgktIEJ1ZyBpdGVtICMyODE2MDc5ICJFeGFtcGxlIDQ4IG5vdCB3b3JraW5nIiB3YXMgZml4ZWQuCgktIFRoZSBzaWduYXR1cmUgb2YgdGhlIGNoZWNrUGFnZUJyZWFrKCkgd2FzIGNoYW5nZWQuIFRoZSBwYXJhbWV0ZXIgJGFkZHBhZ2Ugd2FzIGFkZGVkIHRvIHR1cm4gb2ZmIHRoZSBhdXRvbWF0aWMgcGFnZSBjcmVhdGlvbi4KCjQuNi4wMTYgKDIwMDktMDYtMTYpCgktIE1ldGhvZCBzZXRTcGFjZXNSRSgpIHdhcyBhZGRlZCB0byBzZXQgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiB1c2VkIGZvciBkZXRlY3Rpbmcgd2l0aGVzcGFjZXMgb3Igd29yZCBzZXBhcmF0b3JzLiBJZiB5b3UgYXJlIHVzaW5nIGNoaW5lc2UsIHRyeTogc2V0U3BhY2VzUkUoJy9bXHNccHtafVxwe0xvfV0vJyk7LCBvdGhlcndpc2UgeW91IGNhbiB1c2Ugc2V0U3BhY2VzUkUoJy9bXHNccHtafV0vJyk7CgktIFRoZSBtZXRob2QgX3B1dGluZm8oKSBub3cgYXV0b21hdGljYWxseSBmaWxscyB0aGUgbWV0YWRhdGEgd2l0aCAnPycgaW4gY2FzZSBvZiBlbXB0eSBzdHJpbmcuCgo0LjYuMDE1ICgyMDA5LTA2LTExKQoJLSBCdWcgIzI4MDQ2NjcgIndvcmQgd3JhcCBidWciIHdhcyBmaXhlZC4KCjQuNi4wMTQgKDIwMDktMDYtMDQpCgktIEJ1ZyAjMjgwMDkzMSAiVGFibGUgdGhlYWQgdGFnIGJ1ZyIgd2FzIGZpeGVkLgoJLSBBIGJ1ZyByZWxhdGVkIHRvIDxwcmU+IHRhZyB3YXMgZml4ZWQuCgo0LjYuMDEzICgyMDA5LTA1LTI4KQoJLSBMaXN0IGJ1bGxldHMgcG9zaXRpb24gd2FzIGZpeGVkIGZvciBSVEwgbGFuZ3VhZ2VzLgoKNC42LjAxMiAoMjAwOS0wNS0yMykKCS0gc2V0VXNlclJpZ2h0cygpIG1ldGhvZCBkb2Vzbid0IHdvcmsgYW55bW9yZSB1bmxlc3MgeW91IGNhbGwgdGhlIHNldFNpZ25hdHVyZSgpIG1ldGhvZCB3aXRoIHRoZSBBZG9iZSBwcml2YXRlIGtleSEKCjQuNi4wMTEgKDIwMDktMDUtMTgpCgktIFNpZ25hdHVyZSBvZiB0aGUgSW1hZ2UoKSBtZXRob2Qgd2FzIGNoYW5nZWQgdG8gaW5jbHVkZSB0aGUgbmV3ICRmaXRib3ggcGFyYW1ldGVyIChzZWUgc291cmNlIGNvZGUgZG9jdW1lbnRhdGlvbikuCgo0LjYuMDEwICgyMDA5LTA1LTE3KQoJLSBJbWFnZSgpIG1ldGhvZCB3YXMgaW1wcm92ZWQ6IG5vdyBpcyBwb3NzaWJsZSB0byBzcGVjaWZ5IHRoZSBtYXhpbXVtIGRpbWVuc2lvbnMgZm9yIGEgY29uc3RyYWludCBib3ggZGVmaW5lZCBieSAkdyBhbmQgJGggcGFyYW1ldGVycywgYW5kIHNldHRpbmcgdGhlICRyZXNpemUgcGFyYW1ldGVyIHRvIG51bGwuCgktIDx0Y3BkZj4gdGFnIGluZGVudCBwcm9ibGVtIHdhcyBmaXhlZC4KCS0gJHkgcGFyYW1ldGVyIHdhcyBhZGRlZCB0byBjaGVja1BhZ2VCcmVhaygpIG1ldGhvZC4KCS0gQnVnIG4uIDI3OTE3NzMgIndyaXRlSFRNTCIgd2FzIGZpeGVkLgoKNC42LjAwOSAoMjAwOS0wNS0xMykKCS0geHJlZiB0YWJsZSBmb3IgZW1iZWRkZWQgZmlsZXMgd2FzIGZpeGVkLgoKNC42LjAwOCAoMjAwOS0wNS0wNykKCS0gc2V0U2lnbmF0dXJlKCkgbWV0aG9kIHdhcyBpbXByb3ZlZCAoYnV0IGlzIHN0aWxsIGV4cGVyaW1lbnRhbCkuCgktIEV4YW1wbGUgbi4gNTIgd2FzIGFkZGVkLgoKNC42LjAwNyAoMjAwOS0wNS0wNSkKCS0gQnVnICMyNzg2Njg1ICJ3cml0ZUh0bWxDZWxsIGFuZCA8YnIgLz4gaW4gY3VzdG9tIGZvb3RlciIgd2FzIGZpeGVkLgoJLSBUYWJsZSBoZWFkZXIgcmVwZWF0aW5nIGJ1ZyB3YXMgZml4ZWQuCgktIFNvbWUgbmV3bGluZXMgYW5kIHRhYnMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgZnJvbSBIVE1MIHN0cmluZ3MuCgo0LjYuMDA2ICgyMDA5LTA0LTI4KQoJLSBTdXBwb3J0IGZvciAiPGEgbmFtZT0iLi4uIj4uLi48L2E+IiB3YXMgYWRkZWQuCgktIEJ5IGRlZmF1bHQgVENQREYgcmVxdWlyZXMgUENSRSBVbmljb2RlIHN1cHBvcnQgdHVybmVkIG9uIGJ1dCBub3cgd29ya3MgYWxzbyB3aXRob3V0IGl0ICh3aXRoIGxpbWl0ZWQgYWJpbGl0eSB0byBkZXRlY3Qgc29tZSBVbmljb2RlIGJsYW5rIHNwYWNlcykuCgo0LjYuMDA1ICgyMDA5LTA0LTI1KQoJLSBQb2ludHMgKHB0KSBjb252ZXJzaW9uIGluIGdldEhUTUxVbml0VG9Vbml0cygpIHdhcyBmaXhlZC4KCS0gRGVmYXVsdCB0Y3BkZi5wZW0gY2VydGlmaWNhdGUgZmlsZSB3YXMgYWRkZWQuCgktIEV4cGVyaW1lbnRhbCBzdXBwb3J0IGZvciBzaWduaW5nIGRvY3VtZW50IHdhcyBhZGRlZCBidXQgaXQgaXMgbm90IHlldCBjb21wbGV0ZWQgKHNvbWUgaGVscCBpcyBuZWVkZWQgLSBJIHRoaW5rIHRoYXQgdGhlIGNhbGN1bGF0aW9uIG9mIHRoZSBCeXRlUmFuZ2UgaXMgT0sgYW5kIHRoZSBwcm9ibGVtIGlzIG9uIHRoZSBzaWduYXR1cmUgY2FsY3VsYXRpb24pLgoKNC42LjAwNCAoMjAwOS0wNC0yMykKCS0gTWV0aG9kIGRlbGV0ZVBhZ2UoKSB3YXMgYWRkZWQgdG8gZGVsZXRlIHBhZ2VzIChzZWUgZXhhbXBsZSBuLiA0NCkuCgo0LjYuMDAzICgyMDA5LTA0LTIxKQoJLSBUaGUgY2FjaGluZyBtZWNoYW5pc20gb2YgdGhlIFVURjhTdHJpbmdUb0FycmF5KCkgbWV0aG9kIHdhcyBmaXhlZC4KCjQuNi4wMDIgKDIwMDktMDQtMjApCgktIERvY3VtZW50YXRpb24gb2Ygcm9sbGJhY2tUcmFuc2FjdGlvbigpIG1ldGhvZCB3YXMgZml4ZWQuCgktIFRoZSBzZXRJbWFnZVNjYWxlKCkgYW5kIGdldEltYWdlU2NhbGUoKSBtZXRob2RzIG5vdyBzZXQgYW5kIGdldCB0aGUgYWRqdXN0aW5nIHBhcmFtZXRlciB1c2VkIGJ5IHBpeGVsc1RvVW5pdHMoKSBtZXRob2QuCgktIEhUTUwgaW1hZ2VzIG5vdyBzdXBwb3J0IG90aGVyIHVuaXRzIG9mIG1lYXN1cmUgdGhhbiBwaXhlbHMgKGdldEhUTUxVbml0VG9Vbml0cygpIGlzIG5vdyB1c2VkIGluc3RlYWQgb2YgcGl4ZWxzVG9Vbml0cygpKS4KCS0gV0FSTklORzogUERGX0lNQUdFX1NDQUxFX1JBVElPIGhhcyBiZWVuIGNoYW5nZWQgYnkgZGVmYXVsdCB0byAxLgoKNC42LjAwMSAoMjAwOS0wNC0xNykKCS0gU3BhY2VzIGJldHdlZW4gSFRNTCBibG9jayB0YWdzIGFyZSBub3cgYXV0b21hdGljYWxseSByZW1vdmVkLgoJLSBUaGUgYnVnIHJlbGF0ZWQgdG8gY01hcmdpbiBjaGFuZ2VzIGJldHdlZW4gdGFibGVzIHdhcyBmaXhlZC4KCjQuNi4wMDAgKDIwMDktMDQtMTYpCgktIFdBUk5JTkc6IFRISVMgVkVSU0lPTiBDSEFOR0VTIFRIRSBCRUhBVklPVVIgT0YgJHggYW5kICR5IHBhcmFtZXRlcnMgZm9yIHNldmVyYWwgVENQREYgbWV0aG9kczoKCQl6ZXJvIGNvb3JkaW5hdGVzIGZvciAkeCBhbmQgJHkgYXJlIG5vdyB2YWxpZCBjb29yZGluYXRlczsKCQlzZXQgJHggYW5kICR5IGFzIGVtcHR5IHN0cmluZ3MgdG8gZ2V0IHRoZSBjdXJyZW50IHZhbHVlLgoJLSBTb21lIGVycm9yIGNhdXNlZCBieSAnZW1wdHknIGZ1bnRpb24gd2VyZSBmaXhlZC4KCS0gRGVmYXVsdCBjb2xvciBmb3IgY29udmVydEhUTUxDb2xvclRvRGVjKCkgbWV0aG9kIHdhcyBjaGFuZ2VkIHRvIHdoaXRlIGFuZCB0aGUgcmV0dXJuIHZhbHVlIGZvciBpbnZhbGlkIGNvbG9yIGlzIGZhbHNlLgoJLSBIVE1MIG9uIGZvb3RlciBidWcgd2FzIGZpeGVkLgoJLSBUaGUgZm9sbG93aW5nIGV4YW1wbGVzIHdlcmUgZml4ZWQ6IDUsNywxMCwxNywxOSwyMCwyMSwzMyw0Miw0My4KCjQuNS4wNDMgKDIwMDktMDQtMTUpCgktIEJhcmNvZGUgY2xhc3MgKGJhcmNvZGUucGhwKSB3YXMgZXh0ZW5kZWQgdG8gaW5jbHVkZSBuZXcgbGluZWFyIGJhcmNvZGUgdHlwZXMgKHNlZSBleGFtcGxlIG4uIDI3KToKCQlDMzkgOiBDT0RFIDM5IC0gQU5TSSBNSDEwLjhNLTE5ODMgLSBVU0QtMyAtIDMgb2YgOQoJCUMzOSsgOiBDT0RFIDM5IHdpdGggY2hlY2tzdW0KCQlDMzlFIDogQ09ERSAzOSBFWFRFTkRFRAoJCUMzOUUrIDogQ09ERSAzOSBFWFRFTkRFRCArIENIRUNLU1VNCgkJQzkzIDogQ09ERSA5MyAtIFVTUy05MwoJCVMyNSA6IFN0YW5kYXJkIDIgb2YgNQoJCVMyNSsgOiBTdGFuZGFyZCAyIG9mIDUgKyBDSEVDS1NVTQoJCUkyNSA6IEludGVybGVhdmVkIDIgb2YgNQoJCUkyNSsgOiBJbnRlcmxlYXZlZCAyIG9mIDUgKyBDSEVDS1NVTQoJCUMxMjhBIDogQ09ERSAxMjggQQoJCUMxMjhCIDogQ09ERSAxMjggQgoJCUMxMjhDIDogQ09ERSAxMjggQwoJCUVBTjIgOiAyLURpZ2l0cyBVUEMtQmFzZWQgRXh0ZW50aW9uCgkJRUFONSA6IDUtRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb24KCQlFQU44IDogRUFOIDgKCQlFQU4xMyA6IEVBTiAxMwoJCVVQQ0EgOiBVUEMtQQoJCVVQQ0UgOiBVUEMtRQoJCU1TSSA6IE1TSSAoVmFyaWF0aW9uIG9mIFBsZXNzZXkgY29kZSkKCQlNU0krIDogTVNJICsgQ0hFQ0tTVU0gKG1vZHVsbyAxMSkKCQlQT1NUTkVUIDogUE9TVE5FVAoJCVBMQU5FVCA6IFBMQU5FVAoJCVJNUzRDQyA6IFJNUzRDQyAoUm95YWwgTWFpbCA0LXN0YXRlIEN1c3RvbWVyIENvZGUpIC0gQ0JDIChDdXN0b21lciBCYXIgQ29kZSkKCQlLSVggOiBLSVggKEtsYW50IGluZGV4IC0gQ3VzdG9tZXIgaW5kZXgpCgkJSU1COiBJbnRlbGxpZ2VudCBNYWlsIEJhcmNvZGUgLSBPbmVjb2RlIC0gVVNQUy1CLTMyMDAgKE5PVEU6IHJlcXVpcmVzIEJDTWF0aCBQSFAgZXh0ZW5zaW9uKQoJCUNPREFCQVIgOiBDT0RBQkFSCgkJQ09ERTExIDogQ09ERSAxMQoJCVBIQVJNQSA6IFBIQVJNQUNPREUKCQlQSEFSTUEyVCA6IFBIQVJNQUNPREUgVFdPLVRSQUNLUwoKNC41LjA0MiAoMjAwOS0wNC0xNSkKCS0gTWV0aG9kIFdyaXRlKCkgd2FzIGZpeGVkIGZvciB0aGUgc3RyaW5ncyBjb250YWluaW5nIG9ubHkgemVybyB2YWx1ZS4KCjQuNS4wNDEgKDIwMDktMDQtMTQpCgktIEJhcmNvZGUgbWV0aG9kcyB3ZXJlIGZpeGVkLgoKNC41LjA0MCAoMjAwOS0wNC0xNCkKCS0gTWV0aG9kIFdyaXRlKCkgd2FzIGZpeGVkIHRvIGhhbmRsZSBlbXB0eSBzdHJpbmdzLgoKNC41LjAzOSAoMjAwOS0wNC0xMSkKCS0gU3VwcG9ydCBmb3IgbGluZWFyIGJhcmNvZGVzIHdhcyBleHRlbmRlZCAoc2VlIGV4YW1wbGUgbi4gMjcgYW5kIGJhcmNvZGVzLnBocCBkb2N1bWVudGF0aW9uKS4KCjQuNS4wMzggKDIwMDktMDQtMTApCgktIFdyaXRlKCkgbWV0aG9kIHdhcyBpbXByb3ZlZCB0byBzdXBwb3J0IHNlcGFyYXRvcnMgZm9yIEphcGFuZXNlLCBLb3JlYW4sIENoaW5lc2UgVHJhZGl0aW9uYWwgYW5kIENoaW5lc2UgU2ltcGxpZmllZC4KCjQuNS4wMzcgKDIwMDktMDQtMDkpCgktIEdlbmVyYWwgcGVyZm9ybWFuY2VzIHdlcmUgaW1wcm92ZWQuCgktIFRoZSBzaWduYXR1cmUgb2YgdGhlIG1ldGhvZCB1dGY4QmlkaSgpIHdhcyBjaGFuZ2VkLgoJLSBUaGUgbWV0aG9kIFVuaUFyclN1YlN0cmluZygpIHdhcyBhZGRlZC4KCS0gRXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIDJEIGJhcmNvZGVzIHdlcmUgYWRkZWQgKHNlZSBleGFtcGxlIG4uIDUwIGFuZCAyZGJhcmNvZGVzLnBocCBjbGFzcykuCgo0LjUuMDM2ICgyMDA5LTA0LTAzKQoJLSBUQ1BERiBtZXRob2RzIGNhbiBiZSBjYWxsZWQgaW5zaWRlIHRoZSBIVE1MIGNvZGUgKHNlZSBleGFtcGxlIG4uIDQ5KS4KCS0gQWxsIHRhZyBhdHRyaWJ1dGVzLCBzdWNoIGFzIDxwIGFsaWduPSJjZW50ZXIiPiBtdXN0IGJlIGVuY2xvc2VkIHdpdGhpbiBkb3VibGUgcXVvdGVzLgoKNC41LjAzNSAoMjAwOS0wMy0yOCkKCS0gQnVnICMyNzE3NDM2ICJ3cml0ZUhUTUwgcm93c3BhbiBwcm9ibGVtIChjb250aW51ZWQpIiB3YXMgZml4ZWQuCgktIEJ1ZyAjMjcxOTA5MCAid3JpdGVIVE1MIGZpeCBmb2xsb3cgdXAiIHdhcyBmaXhlZC4KCS0gVGhlIG1ldGhvZCBfcHV0dXNlcnJpZ2h0cygpIHdhcyBjaGFuZ2VkIHRvIGF2b2lkIEFkb2JlIFJlYWRlciA5LjEgY3Jhc2guIFRoaXMgYnJva2VuIHRoZSAndHJpY2snIHRoYXQgd2FzIHVzZWQgdG8gZGlzcGxheSBmb3JtcyBpbiBBY3JvYmF0IFJlYWRlci4KCjQuNS4wMzQgKDIwMDktMDMtMjcpCgktIEJ1ZyAjMjcxNjkxNCAiQnVnIHdyaXRlSFRNTCBvZiBhIHRhYmxlIGluIGJvZHkgYW5kIGZvb3RlciByZWxhdGVkIHdpdGggcGIiIHdhcyBmaXhlZC4KCS0gQnVnICMyNzE3MDU2IF0gIndyaXRlSFRNTCBwcm9ibGVtIHdoZW4gc2V0dGluZyB0ciBzdHlsZSIgd2FzIGZpeGVkLgoJLSBUaGUgc2lnbmF0dXJlIG9mIHRoZSBDZWxsKCkgbWV0aG9kIHdhcyBjaGFuZ2VkLgoKNC41LjAzMyAoMjAwOS0wMy0yNykKCS0gVGhlIHN1cHBvcnQgZm9yIHJvd3NwYW4vY29sc3BhbiBvbiBIVE1MIHRhYmxlcyB3YXMgaW1wcm92ZWQgKHNlZSBleGFtcGxlIG4uIDQ4KS4KCjQuNS4wMzIgKDIwMDktMDMtMjMpCgktIHNldFByaW50Rm9vdGVyKGZhbHNlKSBidWcgd2FzIGZpeGVkLgoKNC41LjAzMSAoMjAwOS0wMy0yMCkKCS0gVGFibGUgaGVhZGVyIHN1cHBvcnQgd2FzIGV4dGVuZGVkIHRvIG11bHRpcGxlIHBhZ2VzLgoKNC41LjAzMCAoMjAwOS0wMy0yMCkKCS0gdGhlYWQgdGFnIGlzIG5vdyBzdXBwb3J0ZWQgb24gSFRNTCB0YWJsZXMgKGhlYWRlciByb3dzIGFyZSByZXBlYXRlZCBhZnRlciBwYWdlIGJyZWFrcykuCgktIFRoZSBzdGFydFRyYW5zYWN0aW9uKCkgd2FzIGltcHJvdmVkIHRvIGF1dG9jb21taXQuCgktIExpc3QgYnVsbGV0cyBub3cgdXNlcyB0aGUgZm9yZWdyb3VuZCBjb2xvciAocHV0SHRtbExpc3RCdWxsZXQoKSkuCgo0LjUuMDI5ICgyMDA5LTAzLTE5KQoJLSBUaGUgZm9sbG93aW5nIG1ldGhvZHMgd2VyZSBhZGRlZCB0byBVTkRPIGNvbW1hbmRzIChzZWUgZXhhbXBsZSA0Nyk6IHN0YXJ0VHJhbnNhY3Rpb24oKSwgY29tbWl0VHJhbnNhY3Rpb24oKSwgcm9sbGJhY2tUcmFuc2FjdGlvbigpLgoJLSBBbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkLgoKNC41LjAyOCAoMjAwOS0wMy0xOCkKCS0gQnVnICMyNjkwOTQ1ICJMaXN0IEJ1Z3MiIHdhcyBmaXhlZC4KCS0gSFRNTCB0ZXh0IGFsaWdubWVudCBvbiBsaXN0cyB3YXMgZml4ZWQuCgktIFRoZSBjb25zdGFudCBQREZfRk9OVF9NT05PU1BBQ0VEIHdhcyBhZGRlZCB0byB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBtb25vc3BhY2VkIGZvbnQuCgktIFRoZSBmb2xsb3dpbmcgbWV0aG9kcyB3ZXJlIGZpeGVkOiBnZXRQYWdlV2lkdGgoKSwgZ2V0UGFnZUhlaWdodCgpLCBnZXRCcmVha01hcmdpbigpLgoJLSBBbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkLgoKNC41LjAyNyAoMjAwOS0wMy0xNikKCS0gTWV0aG9kIGdldFBhZ2VEaW1lbnNpb25zKCkgd2FzIGFkZGVkIHRvIGdldCBwYWdlIGRpbWVuc2lvbnMuCgktIFRoZSBzaWduYXR1cmUgb2YgdGhlIGZvbGxvd2luZyBtZXRob3Mgd2VyZSBjaGFuZ2VkOiBnZXRQYWdlV2lkdGgoKSwgZ2V0UGFnZUhlaWdodCgpLCBnZXRCcmVha01hcmdpbigpLgoJLSBfcGFyc2VwbmcoKSBtZXRob2Qgd2FzIGZpeGVkIGZvciBQTkcgVVJMIGltYWdlcyAoZnJlYWQgYnVnKS4KCjQuNS4wMjYgKDIwMDktMDMtMTEpCgktIEJ1ZyAjMjY4MTc5MyBhZmZlY3RpbmcgVVJMIGltYWdlcyB3aXRoIHNwYWNlcyB3YXMgZml4ZWQuCgo0LjUuMDI1ICgyMDA5LTAzLTEwKQoJLSBBIHNtYWxsIGJ1ZyBhZmZlY3RpbmcgaHlwaGVuYXRpb24gc3VwcG9ydCB3YXMgZml4ZWQuCgktIFRoZSBtZXRob2QgU2V0RGVmYXVsdE1vbm9zcGFjZWRGb250KCkgd2FzIGFkZGVkIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBtb25vc3BhY2VkIGZvbnQuCgo0LjUuMDI0ICgyMDA5LTAzLTA3KQoJLSBUaGUgYnVnICMyNjY2NDkzIHdhcyBmaXhlZCAiRm9vdGVyIGNvcnJ1cHRzIGRvY3VtZW50Ii4KCjQuNS4wMjMgKDIwMDktMDMtMDYpCgktIFRoZSBidWcgIzI2NjY2ODggd2FzIGZpeGVkICJSb3dzcGFuIGluIHRhYmxlcyIuCgo0LjUuMDIyICgyMDA5LTAzLTA1KQoJLSBUaGUgYnVnICMyNjU5Njc2IHdhcyBmaXhlZCAicmVmZXIgdG8gIzIxNTcwOTkgdGVzdCA0IDwgQlIgPiBwcm9ibGVtIHN0aWxsIG5vdCBmaXhlZCIuCgktIGFkZFRPQygpIGZ1bmN0aW9uIGJ1ZyB3YXMgZml4ZWQuCgo0LjUuMDIwICgyMDA5LTAzLTAzKQoJLSBUaGUgZm9sbG93aW5nIGJ1ZyB3YXMgZml4ZWQ6ICJmdW5jdGlvbiByZW1vdmVTSFkgY29ycnVwdHMgdW5pY29kZSIuCgo0LjUuMDE5ICgyMDA5LTAyLTI4KQoJLSBUaGUgcHJvYmxlbSBvZiBkZWNpbWFsIHNlcGFyYXRvciB1c2luZyBkaWZmZXJlbnQgbG9jYWxlIHdhcyBmaXhlZC4KCS0gVGhlIHRleHQgaHlwaGVuYXRpb24gaXMgbm93IHN1cHBvcnRlZCAoc2VlIGV4YW1wbGUgbi4gNDYpLgoKNC41LjAxOCAoMjAwOS0wMi0yNikKCS0gVGhlIF9kZXN0cm95KCkgbWV0aG9kIHdhcyBhZGRlZCB0byB1bnNldCBhbGwgY2xhc3MgdmFyaWFibGVzIGFuZCBmcmVlcyBtZW1vcnkuCgktIE5vdyBpdCdzIHBvc3NpYmxlIHRvIGNhbGwgT3V0cHV0KCkgbWV0aG9kIG11bHRpcGxlIHRpbWVzLgoKNC41LjAxNyAoMjAwOS0wMi0yNCkKCS0gQSBtaW5vciBidWcgdGhhdCByYWlzZXMgYSBQSFAgd2FybmluZyB3YXMgZml4ZWQuCgo0LjUuMDE2ICgyMDA5LTAyLTI0KQoJLSBCdWcgaXRlbSAjMjYzMTIwMCAiZ2V0TnVtTGluZXMoKSBjb3VudHMgd3JvbmciIHdhcyBmaXhlZC4KCS0gTXVsdGlwbGUgYXR0YWNobWVudHMgYnVnIHdhcyBmaXhlZC4KCS0gQWxsIGNsYXNzIHZhcmlhYmxlcyBhcmUgbm93IGNsZWFyZWQgb24gT3V0cHV0KCkgZm9yIG1lbW9yeSBvdHBpbWl6YXRpb24uCgo0LjUuMDE1ICgyMDA5LTAyLTE4KQoJLSBCdWcgaXRlbSAjMjYxMjU1MyAiZnVuY3Rpb24gV3JpdGUoKSBtdXN0IG5vdCBicmVhayBhIGxpbmUgb24gJm5ic3A7ICBjaGFyYWN0ZXIiIHdhcyBmaXhlZC4KCjQuNS4wMTQgKDIwMDktMDItMTMpCgktIEJ1ZyBpdGVtICMyNTk1MDE1ICJQT1NUTkVUIEJhcmNvZGUgQ2hlY2tzdW0gRXJyb3IiIHdhcyBmaXhlZCAob24gYmFyY29kZS5waHApLgoJLSBQYWdlYnJlYWsgYnVnIGZvciBiYXJjb2RlIHdhcyBmaXhlZC4KCjQuNS4wMTMgKDIwMDktMDItMTIpCgktIGJvcmRlciBhdHRyaWJ1dGUgaXMgbm93IHN1cHBvcnRlZCBvbiBIVE1MIGltYWdlcyAob25seSBhY2NlcHRzIHRoZSBzYW1lIHZhbHVlcyBhY2NlcHRlZCBieSBDZWxsKCkpLgoKNC41LjAxMiAoMjAwOS0wMi0xMikKCS0gQW4gZXJyb3Igb24gaW1hZ2UgYm9yZGVyIGZlYXR1cmUgd2FzIGZpeGVkLgoKNC41LjAxMSAoMjAwOS0wMi0xMikKCS0gSFRNTCBsaW5rcyBmb3IgaW1hZ2VzIGFyZSBub3cgc3VwcG9ydGVkLgoJLSBoZWlnaHQgYXR0cmlidXRlIGlzIG5vdyBzdXBwb3J0ZWQgb24gSFRNTCBjZWxscy4KCS0gJGJvcmRlciBwYXJhbWV0ZXIgd2FzIGFkZGVkIHRvIEltYWdlKCkgYW5kIEltYWdlRXBzKCkgbWV0aG9kcy4KCS0gVGhlIG1ldGhvZCBnZXROdW1MaW5lcygpIHdhcyBhZGRlZCB0byBlc3RpbWF0ZSB0aGUgbnVtYmVyIG9mIGxpbmVzIHJlcXVpcmVkIGZvciB0aGUgc3BlY2lmaWVkIHRleHQuCgo0LjUuMDEwICgyMDA5LTAxLTI5KQoJLSBCdWcgbi4gMjU0NjEwOCAiQmFyQ29kZSBZIHBvc2l0aW9uIiB3YXMgZml4ZWQuCgo0LjUuMDA5ICgyMDA5LTAxLTI2KQoJLSBCdWcgbi4gMjUzODA5NCAiRW1wdHkgcGRmIGZpbGUgY3JlYXRlZCIgd2FzIGZpeGVkLgoKNC41LjAwOCAoMjAwOS0wMS0yNikKCS0gc2V0UGFnZSgpIG1ldGhvZCB3YXMgZml4ZWQgdG8gY29ycmVjdGx5IHJlc3RvcmUgZ3JhcGhpYyBzdGF0ZXMuCgktIFNvdXJjZSBjb2RlIHdhcyBjbGVhbmVkIHVwIGZvciBwZXJmb3JtYW5jZXMuCgo0LjUuMDA3ICgyMDA5LTAxLTI0KQoJLSBjaGVja1BhZ2VCcmVhaygpIGFuZCB3cml0ZTFEQmFyY29kZSgpIG1ldGhvZHMgd2VyZSBmaXhlZC4KCS0gU291cmNlIGNvZGUgd2FzIGNsZWFuZWQgdXAgZm9yIHBlcmZvcm1hbmNlcy4KCS0gYmFyY29kZXMucGhwIHdhcyB1cGRhdGVkLgoKNC41LjAwNiAoMjAwOS0wMS0yMykKCS0gZ2V0SFRNTFVuaXRUb1BvaW50cygpIG1ldGhvZCB3YXMgcmVwbGFjZWQgYnkgZ2V0SFRNTFVuaXRUb1VuaXRzKCkgdG8gZml4IEhUTUwgdW5pdHMgYnVncy4KCjQuNS4wMDUgKDIwMDktMDEtMjMpCgktIFBhZ2UgY2xvc2luZyBidWcgd2FzIGZpeGVkLgoKNC41LjAwNCAoMjAwOS0wMS0yMSkKCS0gVGhlIGFjY2VzcyBvZiBjb252ZXJ0SFRNTENvbG9yVG9EZWMoKSBtZXRob2Qgd2FzIGNoYW5nZWQgdG8gcHVibGljCgktIEZpeGVkIGJ1ZyBvbiBVTCB0YWcuCgo0LjUuMDAzICgyMDA5LTAxLTE5KQoJLSBGb250cyBvbiBkaWZmZXJlbnQgZm9sZGVycyBhcmUgbm93IHN1cHBvcnRlZC4KCjQuNS4wMDIgKDIwMDktMDEtMDcpCgktIGFkZFRPQygpIGZ1bmN0aW9uIHdhcyBpbXByb3ZlZCAoc2VlIGV4YW1wbGUgbi4gNDUpLgoKNC41LjAwMSAoMjAwOS0wMS0wNCkKCS0gVGhlIHNpZ25hdHVyZSBvZiBzdGFydFBhZ2VHcm91cCgpIGZ1bmN0aW9uIHdhcyBjaGFuZ2VkLgoJLSBNZXRob2QgRm9vdGVyKCkgd2FzIGltcHJvdmVkIHRvIGF1dG9tYXRpY2FsbHkgcHJpbnQgcGFnZSBvciBwYWdlLWdyb3VwIG51bWJlciAoc2VlIGV4YW1wbGUgbi4gMjMpLgoJLSBQcm90ZWN0ZWQgbWV0aG9kIGZvcm1hdFRPQ1BhZ2VOdW1iZXIoKSB3YXMgYWRkZWQgdG8gY3VzdG9taXplIHRoZSBmb3JtYXQgb2YgcGFnZSBudW1iZXJzIG9uIHRoZSBUYWJsZSBPZiBDb250ZW50LgoJLSBUaGUgc2lnbmF0dXJlIG9mIGFkZFRPQygpIHdhcyBjaGFuZ2VkIHRvIGluY2x1ZGUgdGhlIGZvbnQgdXNlZCBmb3IgcGFnZSBudW1iZXJzLgoKNC41LjAwMCAoMjAwOS0wMS0wMykKCS0gQSBuZXcgJGRpc2tjYWNoZSBwYXJhbWV0ZXIgd2FzIGFkZGVkIHRvIGNsYXNzIGNvbnN0cnVjdG9yIHRvIGVuYWJsZSBkaXNrIGNhY2hpbmcgYW5kIHJlZHVjZSBSQU0gbWVtb3J5IHVzYWdlIChzZWUgZXhhbXBsZSBuLiA0MykuCgktIFRoZSBtZXRob2QgbW92ZVBhZ2VUbygpIHdhcyBhZGRlZCB0byBtb3ZlIHBhZ2VzIHRvIHByZXZpb3VzIHBvc2l0aW9ucyAoc2VlIGV4YW1wbGUgbi4gNDQpLgoJLSBUaGUgbWV0aG9kcyBnZXRBbGlhc051bVBhZ2UoKSBhbmQgZ2V0UGFnZU51bUdyb3VwQWxpYXMoKSB3ZXJlIGFkZGVkIHRvIGdldCB0aGUgYWxpYXMgZm9yIHBhZ2UgbnVtYmVyIChuZWVkZWQgd2hlbiB1c2luZyBtb3ZlcGFnZVRvKCkpLgoJLSBUaGUgbWV0aG9kcyBhZGRUT0MoKSB3YXMgYWRkZWQgdG8gcHJpbnQgYSBUYWJsZSBPZiBDb250ZW50IChzZWUgZXhhbXBsZSBuLiA0NSkuCgktIEltYWdpY2sgY2xhc3MgY29uc3RhbnQgd2FzIHJlbW92ZWQgZm9yIGJldHRlciBjb21wYXRpYmlsaXR5IHdpdGggUEhQNC4KCS0gQWxsIGV4aXN0aW5nIGV4YW1wbGVzIHdlcmUgdXBkYXRlZCBhbmQgbmV3IGV4YW1wbGVzIHdlcmUgYWRkZWQuCgo0LjQuMDA5ICgyMDA4LTEyLTI5KQoJLSBFeGFtcGxlcyAxIGFuZCAzNSB3ZXJlIGZpeGVkLgoKNC40LjAwOCAoMjAwOC0xMi0yOCkKCS0gQnVnICMyNDcyMTY5ICJVbm9yZGVyZWQgYnVsbGV0IHNpemUgbm90IGFkanVzdGVkIGZvciB1bml0IHR5cGUiIHdhcyBmaXhlZC4KCjQuNC4wMDcgKDIwMDgtMTItMjMpCgktIEJ1ZyAjMjQ1OTkzNSAibm8gdW5pdCBjb252ZXJzaW9uIGZvciBoZWFkZXIgbGluZSIgd2FzIGZpeGVkLgoJLSBFeGFtcGxlIG4uIDQyIGZvciBpbWFnZSBhbHBoYSBjaGFubmVsIHdhcyBhZGRlZC4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCjQuNC4wMDYgKDIwMDgtMTItMTEpCgktIE1ldGhvZCBzZXRMSXN5bWJvbCgpIHdhcyBjaGFuZ2VkIHRvIHJlZmxlY3QgbGF0ZXN0IGNoYW5nZXMgaW4gSFRNTCBsaXN0IGhhbmRsaW5nLgoKNC40LjAwNSAoMjAwOC0xMi0xMCkKCS0gQnVnIGl0ZW0gIzI0MTM4NzAgIm9yZGVyZWQgbGlzdCBvdmVycmlkZSB2YWx1ZSIgd2FzIGZpeGVkLgoKNC40LjAwNCAoMjAwOC0xMi0xMCkKCS0gVGhlIHByb3RlY3RlZCBtZXRob2QgZ2V0SFRNTFVuaXRUb1BvaW50cygpIHdhcyBhZGRlZCB0byBhY2NlcHQgdmFyaW91cyBIVE1MIHVuaXRzIG9mIG1lYXN1cmUgKGVtLCBleCwgcHgsIGluLCBjbSwgbW0sIHB0LCBwYywgJSkuCgktIFRoZSBtZXRob2QgaW50VG9Sb21hbigpIHdhcyBhZGRlZCB0byBjb252ZXJ0IGludGVnZXIgbnVtYmVyIHRvIFJvbWFuIHJlcHJlc2VudGF0aW9uLgoJLSBTdXBwb3J0IGZvdCBIVE1MIGxpc3RzIHdhcyBpbXByb3ZlZDogdGhlIENTUyBwcm9wZXJ0eSBsaXN0LXN0eWxlLXR5cGUgaXMgbm93IHN1cHBvcnRlZC4KCjQuNC4wMDMgKDIwMDgtMTItMDkpCgktIEJ1ZyBpdGVtICMyNDEyMTQ3ICJXYXJuaW5nIG9uIGxpbmUgMzM2NyIgd2FzIGZpeGVkLgoJLSBNZXRob2Qgc2V0SHRtbExpbmtzU3R5bGUoKSB3YXMgYWRkZWQgdG8gc2V0IGRlZmF1bHQgSFRNTCBsaW5rIGNvbG9ycyBhbmQgZm9udCBzdHlsZS4KCS0gTWV0aG9kIGFkZEh0bWxMaW5rKCkgd2FzIGNoYW5nZWQgdG8gdXNlIGNvbG9yIGFuZCBzdHlsZSBkZWZpbmVkIG9uIHRoZSBpbmxpbmUgQ1NTLgoKNC40LjAwMiAoMjAwOC0xMi0wOSkKCS0gQm9yZGVycyBvbiBNdWx0aWNlbGwoKSB3ZXJlIGZpeGVkLgoJLSBQcm9ibGVtIG9mIE11bHRpY2VsbCgpIG9uIEhlYWRlciBmdW5jdGlvbiAoQnVnIGl0ZW0gIzI0MDc1NzkpIHdhcyBmaXhlZC4KCS0gUHJvYmxlbSBvbiBncmFwaGljcyB0cmFuZm9ybWF0aW9ucyBhcHBsaWVkIHRvIE11bHRpY2VsbCgpIHdhcyBmaXhlZC4KCS0gU3VwcG9ydCBmb3IgSW1hZ2VNYWdpY2sgd2FzIGFkZGVkLgoJLSBXaWR0aCBjYWxjdWxhdGlvbiBmb3IgbmVzdGVkIHRhYmxlcyB3YXMgZml4ZWQuCgo0LjQuMDAxICgyMDA4LTEyLTA4KQoJLSBTb21lIG1pc3NpbmcgY29yZSBmb250cyB3ZXJlIGFkZGVkIG9uIGZvbnRzIGRpcmVjdG9yeS4KCS0gQ0lEMCBmb250cyByZW5kZXJpbmcgd2FzIGZpeGVkLgoJLSBIVE1MIHN1cHBvcnQgd2FzIGltcHJvdmVkICg8cHJlPiBhbmQgPHR0PiB0YWdzIGFyZSBub3cgc3VwcG9ydGVkKS4KCS0gQnVnIGl0ZW0gIzI0MDYwMjIgIkxlZnQgcGFkZGluZyBidWcgaW4gTXVsdGlDZWxsIHdpdGggbWF4aCIgd2FzIGZpeGVkLgoKNC40LjAwMCAoMjAwOC0xMi0wNykKCS0gRmlsZSBhdHRhY2htZW50cyBhcmUgbm93IHN1cHBvcnRlZCAoc2VlIGV4YW1wbGUgbi4gNDEpLgoJLSBGb250IGZ1bmN0aW9ucyB3ZXJlIG9wdGltaXplZCB0byByZWR1Y2UgZG9jdW1lbnQgc2l6ZS4KCS0gbWFrZWZvbnQucGhwIHdhcyB1cGRhdGVkLgoJLSBMaW51eCBiaW5hcmllcyB3ZXJlIGFkZGVkIG9uIC9mb250cy91dGlscwoJLSBBbGwgZm9udHMgd2VyZSB1cGRhdGVkLgoJLSAkYXV0b3BhZGRpbmcgcGFyYW1ldGVyIHdhcyBhZGRlZCB0byBNdWx0aWNlbGwoKSB0byBkaXNhYmxlIGF1dG9tYXRpYyBwYWRkaW5nIGZlYXR1cmVzLgoJLSAkbWF4aCBwYXJhbWV0ZXIgd2FzIGFkZGVkIHRvIE11bHRpY2VsbCgpIGFuZCBXcml0ZSgpIHRvIHNldCBhIG1heGltdW0gaGVpZ2h0LgoKNC4zLjAwOSAoMjAwOC0xMi0wNSkKCS0gQnVnIGl0ZW0gIzIzOTI5ODkgKEN1c3RvbSBoZWFkZXIgKyBzZXRsaW5ld2lkdGggKyBjZWxsIGJvcmRlciBidWcpIHdhcyBmaXhlZC4KCjQuMy4wMDggKDIwMDgtMTItMDUpCgktIEJ1ZyBpdGVtICMyMzkwNTY2ICJyZWN0IGJ1ZyIgd2FzIGZpeGVkLgoJLSBGaWxlIHBhdGggd2FzIGZpeGVkIGZvciBmb250IGVtYmVkZGVkIGZpbGVzLgoJLSBTZXRGb250KCkgbWV0aG9kIHNpZ25hdHVyZSB3YXMgY2hhbmdlZCB0byBpbmNsdWRlIHRoZSBmb250IGZpbGVuYW1lLgoJLSBTb21lIGZvbnQtcmVsYXRlZCBtZXRob2RzIHdlcmUgaW1wcm92ZWQuCgktIE1ldGhvZHMgZ2V0Rm9udEZhbWlseSgpIGFuZCBnZXRGb250U3R5bGUoKSB3ZXJlIGFkZGVkLgoKNC4zLjAwNyAoMjAwOC0xMi0wMykKCS0gUE5HIGFscGhhIGNoYW5uZWwgaXMgbm93IHN1cHBvcnRlZCAoR0QgbGlicmFyeSBpcyByZXF1aXJlZCkuCgktIEFkZEZvbnQoKSBmdW5jdGlvbiBub3cgc3VwcG9ydCBjdXN0b20gZm9udCBmaWxlIHBhdGggb24gJGZpbGUgcGFyYW1ldGVyLgoJLSBUaGUgZGVmYXVsdCB3aWR0aCB2YXJpYWJsZSAoJGR3KSBpcyBub3cgYWx3YXlzIGRlZmluZWQgZm9yIGFueSBmb250LgoJLSBUaGUgJ1N0eWxlJyBhdHRyaWJ1dGUgb24gQ0lELTAgZm9udHMgd2FzIHJlbW92ZWQgYmVjYXVzZSBvZiBwcm90ZWN0aW9uIGJ1Zy4KCjQuMy4wMDYgKDIwMDgtMTItMDEpCgktIEEgcmVndWxhciBleHByZXNzaW9uIG9uIGdldEh0bWxEb21BcnJheSgpIHRvIGZpbmQgSFRNTCB0YWdzIHdhcyBmaXhlZC4KCjQuMy4wMDUgKDIwMDgtMTEtMjUpCgktIG1ha2Vmb250LnBocCB3YXMgZml4ZWQuCgktIEJ1ZyBpdGVtICMyMzM5ODc3IHdhcyBmaXhlZCAoZmFsc2UgbG9vcCBjb25kaXRpb24gZGV0ZWN0ZWQgb24gV3JpdGVIVE1MKCkpLgoJLSBCdWcgaXRlbSAjMjMzNjczMyB3YXMgZml4ZWQgKGxhc3RoIHZhbHVlIHVwZGF0ZSBvbiBNdWx0aWNlbGwoKSB3aGVuIGJvcmRlciBhbmQgZmlsbCBhcmUgZGlzYWJsZWQpLgoJLSBCdWcgaXRlbSAjMjM0MjMwMyB3YXMgZml4ZWQgKGF1dG9tYXRpYyBwYWdlLWJyZWFrIG9uIEltYWdlKCkgYW5kIEltYWdlRVBTKCkpLgoKNC4zLjAwNCAoMjAwOC0xMS0xOSkKCS0gRnVuY3Rpb24gX3RleHRzdHJpbmcoKSB3YXMgZml4ZWQgKGJ1ZyAyMzA5MDUxKS4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCjQuMy4wMDMgKDIwMDgtMTEtMTgpCgktIENJRC0wIGZvbnQgYnVnIHdhcyBmaXhlZC4KCS0gU29tZSBmdW5jdGlvbnMgd2VyZSBvcHRpbWl6ZWQuCgktIEZ1bmN0aW9uIGdldEdyb3VwUGFnZU5vRm9ybWF0dGVkKCkgd2FzIGFkZGVkLgoJLSBFeGFtcGxlIG4uIDIzIHdhcyB1cGRhdGVkLgoKNC4zLjAwMiAoMjAwOC0xMS0xNykKCS0gQnVnIGl0ZW0gIzIzMDU1MTggIkNJRC0wIGZvbnQgZG9uJ3Qgd29yayB3aXRoIGVuY3J5cHRpb24iIHdhcyBmaXhlZC4KCjQuMy4wMDEgKDIwMDgtMTEtMTcpCgktIEJ1ZyBpdGVtICMyMzAwMDA3ICJkb3dubG9hZCBtaW1ldHlwZSBwZGYiIHdhcyBmaXhlZC4KCS0gRG91YmxlIHF1b3RlcyB3ZXJlIHJlcGxhY2VkIGJ5IHNpbmdsZSBxdW90ZXMgdG8gaW1wcm92ZSBQSFAgcGVyZm9ybWFuY2VzLgoJLSBBIGJ1ZyByZWxhdGl2ZSB0byBIVE1MIGNlbGwgYm9yZGVycyB3YXMgZml4ZWQuCgo0LjMuMDAwICgyMDA4LTExLTE0KQoJLSBUaGUgZnVuY3Rpb24gc2V0T3BlbkNlbGwoKSB3YXMgYWRkZWQgdG8gc2V0IHRoZSB0b3AvYm90dG9tIGNlbGwgc2lkZXMgdG8gYmUgb3BlbiBvciBjbG9zZWQgd2hlbiB0aGUgY2VsbCBjcm9zcyB0aGUgcGFnZS4KCS0gQSBidWcgcmVsYXRpdmUgdG8gbGlzdCBpdGVtcyBpbmRlbnRhdGlvbiB3YXMgZml4ZWQuCgktIEEgYnVnIHJlbGF0aXZlIHRvIGJvcmRlcnMgb24gSFRNTCB0YWJsZXMgYW5kIE11bHRpY2VsbCB3YXMgZml4ZWQuCgktIEEgYnVnIHJlbGF0aXZlIHRvIHJvd3NwYW5uZWQgY2VsbHMgd2FzIGZpeGVkLgoJLSBBIGJ1ZyByZWxhdGl2ZSB0byBodG1sIGltYWdlcyBhY3Jvc3MgcGFnZXMgd2FzIGZpeGVkLgoKNC4yLjAwOSAoMjAwOC0xMS0xMykKCS0gU3BhY2VzIGJldHdlZW4gbGkgdGFncyBhcmUgbm93IGF1dG9tYXRpY2FsbHkgcmVtb3ZlZC4KCjQuMi4wMDggKDIwMDgtMTEtMTIpCgktIEEgYnVnIHJlbGF0aXZlIHRvIGZpbGwgY29sb3Igb24gbmV4dCBwYWdlIHdhcyBmaXhlZC4KCjQuMi4wMDcgKDIwMDgtMTEtMTIpCgktIFRoZSBmdW5jdGlvbiBzZXRMaXN0SW5kZW50V2lkdGgoKSB3YXMgYWRkZWQgdG8gc2V0IGN1c3RvbSBpbmRlbnRhdGlvbiB3aWRodCBmb3IgSFRNTCBsaXN0cy4KCjQuMi4wMDYgKDIwMDgtMTEtMDYpCgktIEEgYnVnIHJlbGF0aXZlIHRvIEhUTUwganVzdGlmaWNhdGlvbiB3YXMgZml4ZWQuCgo0LjIuMDA1ICgyMDA4LTExLTA2KQoJLSBBIGJ1ZyByZWxhdGl2ZSB0byBIVE1MIGp1c3RpZmljYXRpb24gd2FzIGZpeGVkLgoJLSBUaGUgbWV0aG9kcyBmb3JtYXRQYWdlTnVtYmVyKCkgYW5kIFBhZ2VOb0Zvcm1hdHRlZCgpIHdlcmUgYWRkZWQgdG8gZm9ybWF0IHBhZ2UgbnVtYmVycy4KCS0gRGVmYXVsdCBGb290ZXIoKSBtZXRob2Qgd2FzIGNoYW5nZWQgdG8gdXNlIFBhZ2VOb0Zvcm1hdHRlZCgpIGluc3RlYWQgb2YgUGFnZU5vKCkuCgktIEV4YW1wbGUgNiB3YXMgdXBkYXRlZC4KCjQuMi4wMDQgKDIwMDgtMTEtMDQpCgktIEJ1ZyBpdGVtIG4uIDIyMTcwMzkgImZpbGVuYW1lIGhhbmRsaW5nIGltcHJvdmVtZW50IiB3YXMgZml4ZWQuCgo0LjIuMDAzICgyMDA4LTEwLTMxKQoJLSBGb250IHN0eWxlIGJ1ZyB3YXMgZml4ZWQuCgo0LjIuMDAyICgyMDA4LTEwLTMxKQoJLSBCdWcgaXRlbSAjMjIxMDkyMiAoaHRtIGVsZW1lbnQgYnIgbm90IHdvcmspIHdhcyBmaXhlZC4KCS0gV3JpdGUoKSBmdW5jdGlvbiB3YXMgaW1wcm92ZWQgdG8gc3VwcG9ydCBtYXJnaW4gY2hhbmdlcy4KCjQuMi4wMDEgKDIwMDgtMTAtMzApCgktIHNldEh0bWxWU3BhY2UoJHRhZ3ZzKSBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gc2V0IGN1c3RvbSB2ZXJ0aWNhbCBzcGFjZXMgZm9yIEhUTUwgdGFncy4KCS0gd3JpdGVIVE1MKCkgZnVuY3Rpb24gbm93IHN1cHBvcnQgbWFyZ2luIGNoYW5nZXMgZHVyaW5nIGV4ZWN1dGlvbi4KCS0gU2lnbmF0dXJlIG9mIGFkZEhUTUxWZXJ0U3BhY2UoKSBmdW5jdGlvbiBpcyBjaGFuZ2VkLgoKNC4yLjAwMCAoMjAwOC0xMC0yOSkKCS0gaHRtbGNvbG9ycy5waHAgd2FzIGNoYW5nZWQgdG8gc3VwcG9ydCBjbGFzcy1sb2FkZXJzLgoJLSBJbWFnZUVwcygpIGZ1bmN0aW9uIHdhcyBpbXByb3ZlZCBpbiBwZXJmb3JtYW5jZXMuCgktIFNpZ25hdHVyZSBvZiBMaW5rKCkgQW5kIEFubm90YXRpb24oKSBmdW5jdGlvbnMgd2VyZSBjaGFuZ2VkLgoJLSAoQnVnIGl0ZW0gIzIxOTg5MjYpIExpbmtzIGFuZCBBbm5vdGF0aW9ucyBhbGlnbm1lbnQgd2VyZSBmaXhlZCAoc3VwcG9ydCBmb3IgZ2VvbWV0cmljIHRyYW5mb3JtYXRpb25zIHdhcyBhZGRlZCkuCgktIHJvd3NwYW4gbW9kZSBmb3IgSFRNTCB0YWJsZSBjZWxscyB3YXMgaW1wcm92ZWQgYW5kIGZpeGVkLgoJLSBCb29rbGV0IG1vZGUgZm9yIGRvdWJsZS1zaWRlZCBwYWdlcyB3YXMgYWRkZWQ7IHNlZSBTZXRCb29rbGV0KCkgZnVuY3Rpb24gYW5kIGV4YW1wbGUgbi4gNDAuCgktIGxhc3RQYWdlKCkgc2lnbmF0dXJlIGlzIGNoYW5nZWQuCgktIFNpZ25hdHVyZSBvZiBXcml0ZSgpIGZ1bmN0aW9uIGlzIGNoYW5nZWQuCgktIFNvbWUgSFRNTCBqdXN0aWZpY2F0aW9uIHByb2JsZW1zIHdlcmUgZml4ZWQuCgktIFNvbWUgZnVuY3Rpb25zIHdlcmUgZml4ZWQgdG8gYmV0dGVyIHN1cHBvcnQgUlRMIG1vZGUuCgktIEV4YW1wbGUgbi4gMTAgd2FzIGNoYW5nZWQgdG8gc3VwcG9ydCBSVEwgbW9kZS4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCjQuMS4wMDQgKDIwMDgtMTAtMjMpCgktIHVuaWNvZGVfZGF0YS5waHAgd2FzIGNoYW5nZWQgdG8gc3VwcG9ydCBjbGFzcy1sb2FkZXJzLgoJLSBCdWcgaXRlbSAjMjE4NjA0MC8yICh3cml0ZUhUTUwgbWFyZ2luIHByb2JsZW0pIHdhcyBmaXhlZC4KCjQuMS4wMDMgKDIwMDgtMTAtMjIpCgktIEJ1ZyBpdGVtICMyMTg1Mzk5IHdhcyBmaXhlZCAocm93c3BhbiBhbmQgcGFnZSBicmVhaykuCgktIEJ1Z3MgaXRlbSAjMjE4NjA0MCB3YXMgZml4ZWQgKHdyaXRlSFRNTCBtYXJnaW4gcHJvYmxlbSkuCgktIE5ld2xpbmUgYWZ0ZXIgdGFibGUgd2FzIHJlbW92ZWQuCgo0LjEuMDAyICgyMDA4LTEwLTIxKQoJLSBCdWcgaXRlbSAjMjE4NDUyNSB3YXMgZml4ZWQgKHJvd3NwYW4gb24gSFRNTCBjZWxsKS4KCjQuMS4wMDEgKDIwMDgtMTAtMjEpCgktIFN1cHBvcnQgZm9yICJzdGFydCIgYXR0cmlidXRlIHdhcyBhZGRlZCB0byBIVE1MIG9yZGVyZWQgbGlzdC4KCS0gdW5pY29kZV9kYXRhLnBocCBmaWxlIHdhcyBjaGFuZ2VkIHRvIGluY2x1ZGUgVVRGLTggdG8gQVNDSUkgdGFibGUuCgktIFNvbWUgZnVuY3Rpb25zIHdlcmUgbW9kaWZpZWQgdG8gYmV0dGVyIHN1cHBvcnQgVVRGLTggZXh0ZW5zaW9ucyB0byBjb3JlIGZvbnRzLgoJLSBTdXBwb3J0IGZvciBpbWFnZXMgb24gSFRNTCBsaXN0cyB3YXMgaW1wcm92ZWQuCgktIEV4YW1wbGVzIG4uIDEgYW5kIDYgd2VyZSB1cGRhdGVkLgoKNC4xLjAwMCAoMjAwOC0xMC0xOCkKCS0gUGFnZS1icmVhayBidWcgdXNpbmcgSFRNTCBjb250ZW50IHdhcyBmaXhlZC4KCS0gVGhlICJmYWxzZSIgcGFyYW1ldGVyIHdhcyByZWludHJvZHVjZWQgdG8gY2xhc3NfZXhpc3RzIGZ1bmN0aW9uIG9uIFBIUDUgdmVyc2lvbiB0byBhdm9pZCBhdXRvbG9hZC4KCS0gYWRkSHRtbExpbmsoKSBmdW5jdGlvbiB3YXMgaW1wcm92ZWQgdG8gc3VwcG9ydCBpbnRlcm5hbCBsaW5rcyAoaS5lLjogPGEgaHJlZj0iIzIzIj5saW5rIHRvIHBhZ2UgMjM8L2E+KS4KCS0gSnVzdGlmaWNhdGlvbiBhbGlnbm1lbnQgaXMgbm93IHN1cHBvcnRlZCBvbiBIVE1MIChzZWUgZXhhbXBsZSBuLiAzOSkuCgktIGV4YW1wbGVfMDA2LnBocCB3YXMgdXBkYXRlZC4KCjQuMC4wMzMgKDIwMDgtMTAtMTMpCgktIEJ1ZyBuLiAyMTU3MDk5IHdhcyBmaXhlZC4KCS0gU2V0WCgpIGFuZCBTZXRZKCkgZnVuY3Rpb25zIHdlcmUgaW1wcm92ZWQuCgktIFNldFkoKSBpbmNsdWRlcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYXZvaWQgdGhlIFggcmVzZXQuCgo0LjAuMDMyICgyMDA4LTEwLTEwKQoJLSBCdWcgbi4gMjE1NjkyNiB3YXMgZml4ZWQgKGJvbGQsIGl0YWxpYywgdW5kZXJsaW5lZCwgbGluZXRocm91Z2gpLgoJLSBzZXRTdHlsZSgpIG1ldGhvZCB3YXMgcmVtb3ZlZC4KCS0gQ29uZmlndXJhdGlvbiBmaWxlIHdhcyBjaGFuZ2VkIHRvIHVzZSBoZWx2ZXRpY2EgKG5vbi11bmljb2RlKSBmb250IGJ5IGRlZmF1bHQuCgktIFRoZSB1c2Ugb2YgbWl4ZWQgZm9udCB0eXBlcyB3YXMgaW1wcm92ZWQuCgktIEFsbCBleGFtcGxlcyB3ZXJlIHVwZGF0ZWQuCgo0LjAuMDMxICgyMDA4LTEwLTA5KQoJLSBfcHV0YW5ub3RzKCkgYW5kIF9wdXRib29rbWFya3MoKSBsaW5rcyBhbGlnbm1lbnRzIHdlcmUgZml4ZWQuCgo0LjAuMDMwICgyMDA4LTEwLTA3KQoJLSBfcHV0Ym9va21hcmtzKCkgZnVuY3Rpb24gd2FzIGZpeGVkLgoJLSBfcHV0YW5ub3RzKCkgd2FzIGZpeGVkIHRvIGluY2x1ZGUgaW50ZXJuYWwgbGlua3MuCgo0LjAuMDI5ICgyMDA4LTA5LTI3KQoJLSBJbmZpbml0ZSBsb29wIGJ1ZyB3YXMgZml4ZWQgW0J1ZyBpdGVtICMxMzAzMDldLgoJLSBNdWx0aWNlbGwoKSBwcm9ibGVtIG9uIEhlYWRlcigpIHdhcyBmaXhlZC4KCjQuMC4wMjggKDIwMDgtMDktMjYpCgktIHNldExJc3ltYm9sKCkgd2FzIGFkZGVkIHRvIHNldCB0aGUgTEkgc3ltYm9sIHVzZWQgb24gVUwgbGlzdHMuCgktIE1pc3NpbmcgJHBhZGRpbmcgYW5kICRlbmNyeXB0aW9uX2tleSB2YXJpYWJsZXMgZGVjbGFyYXRpb25zIHdlcmUgYWRkZWQgW0J1ZyBpdGVtICMyMTI5MDU4XS4KCjQuMC4wMjcgKDIwMDgtMDktMTkpCgktIEJ1ZyAjMjExODU4OCAiVW5kZWZpbmVkIG9mZnNldCBpbiB0Y3BkZi5waHAgb24gbGluZSA5NTgxIiB3YXMgZml4ZWQuCgktIGFyYWlsdW5pY2lkMC5waHAgZm9udCB3YXMgdXBkYXRlZC4KCS0gVGhlIHByb2JsZW0gb2YgamF2YXNjcmlwdCBmb3JtIGZpZWxkcyBkdXBsaWNhdGlvbiBhZnRlciBzYXZpbmcgd2FzIGZpeGVkLgoKNC4wLjAyNiAoMjAwOC0wOS0xNykKCS0gY29udmVydEhUTUxDb2xvclRvRGVjKCkgZnVuY3Rpb24gd2FzIGltcHJvdmVkIHRvIHN1cHBvcnQgcmdiKFJSLEdHLEJCKSBub3RhdGlvbi4KCS0gVGhlIGZvbGxvd2luZyBpbmxpbmUgQ1NTIGF0dHJpYnV0ZXMgYXJlIG5vdyBzdXBwb3J0ZWQ6IHRleHQtZGVjb3JhdGlvbiwgY29sb3IsIGJhY2tncm91bmQtY29sb3IgYW5kIGZvbnQtc2l6ZSBuYW1lczogeHgtc21hbGwsIHgtc21hbGwsIHNtYWxsLCBtZWRpdW0sIGxhcmdlLCB4LWxhcmdlLCB4eC1sYXJnZQoJLSBFeGFtcGxlIG4uIDYgd2FzIHVwZGF0ZWQuCgo0LjAuMDI1ICgyMDA4LTA5LTE1KQoJLSBfcHV0Y2lkZm9udDAgZnVuY3Rpb24gd2FzIGltcHJvdmVkIHRvIGluY2x1ZGUgQ0pLIGZvbnRzIChDaGluZXNlLCBKYXBhbmVzZSwgS29yZWFuLCBDSkssIEFzaWFuIGZvbnRzKSB3aXRob3V0IGVtYmVkZGluZy4KCS0gYXJpYWx1bmljaWQwIGZvbnQgd2FzIGFkZGVkIChzZWUgdGhlIG5ldyBleGFtcGxlIG4uIDM4KS4KCS0gVGhlIGZvbGxvd2luZyBVbmljb2RlIHRvIENJRC0wIHRhYmxlcyB3ZXJlIGFkZGVkIG9uIGZvbnRzIGZvbGRlcjogdW5pMmNpZF9hazEyLnBocCwgdW5pMmNpZF9hajE2LnBocCwgdW5pMmNpZF9hZzE1LnBocCwgdW5pMmNpZF9hYzE1LnBocC4KCjQuMC4wMjQgKDIwMDgtMDktMTIpCgktICJzdHJpcG9zIiBmdW5jdGlvbiB3YXMgcmVwbGFjZWQgd2l0aCAic3RycG9zICsgc3RydG9sb3dlciIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBQSFA0LgoJLSBzdXBwb3J0IGZvciBTcG90IENvbG9ycyB3ZXJlIGFkZGVkLiBDaGVjayB0aGUgbmV3IGV4YW1wbGUgbi4gMzcgYW5kIHRoZSBmb2xsb3dpbmcgbmV3IGZ1bmN0aW9uczoKCQlBZGRTcG90Q29sb3IoKQoJCVNldERyYXdTcG90Q29sb3IoKQoJCVNldEZpbGxTcG90Q29sb3IoKQoJCVNldFRleHRTcG90Q29sb3IoKQoJCV9wdXRzcG90Y29sb3JzKCkKCS0gQm9va21hcmsoKSBmdW5jdGlvbiB3YXMgaW1wcm92ZWQgdG8gZml4IHdyb25nIGxldmVscy4KCS0gJGxhc3RoIGNoYW5nZXMgYWZ0ZXIgaGVhZGVyL2Zvb3RlciBjYWxscyB3ZXJlIGZpeGVkLgoKNC4wLjAyMyAoMjAwOC0wOS0wNSkKCS0gU29tZSBIVE1MIHJlbGF0ZWQgcHJvYmxlbXMgd2VyZSBmaXhlZC4KCS0gSW1hZ2UgYWxpZ25tZW50IG9uIEhUTUwgd2FzIGNoYW5nZWQsIG5vdyBpdCBhbHdheXMgZGVmYXVsdHMgdG8gdGhlIG5vcm1hbCBtb2RlIChzZWUgZXhhbXBsZV8wMDYucGhwKS4KCjQuMC4wMjIgKDIwMDgtMDgtMjgpCgktIExpbmUgaGVpZ2h0IG9uIEhUTUwgd2FzIGZpeGVkLgoJLSBJbWFnZSBpbnNpZGUgYW4gSFRNTCBjZWxsIHByb2JsZW0gd2FzIGZpeGVkLgoJLSBBIG5ldyAiemFyYm9sZCIgcGVyc2lhbiBmb250IHdhcyBhZGRlZC4KCjQuMC4wMjEgKDIwMDgtMDgtMjQpCgktIEhUVFAgaGVhZGVycyB3ZXJlIGZpeGVkIG9uIE91dHB1dCBmdW5jdGlvbigpLgoJLSBnZXRBbGlhc05iUGFnZXMoKSBhbmQgZ2V0UGFnZUdyb3VwQWxpYXMoKSBmdW5jdGlvbnMgd2VyZSBjaGFuZ2VkIHRvIHN1cHBvcnQgbm9uLXVuaWNvZGUgZm9udHMgb24gdW5pY29kZSBkb2N1bWVudHMuCgktIEZ1bmN0aW9uIFdyaXRlKCkgd2FzIGZpeGVkLgoJLSBUaGUgcHJvYmxlbSBvZiBhZGRpdGlvbmFsIHZlcnRpY2FsIHNwYWNlcyBvbiBIVE1MIHdhcyBmaXhlZC4KCS0gVGhlIHByb2JsZW0gb2YgZnJhbWUgYXJvdW5kIEhUTUwgbGlua3Mgd2FzIGZpeGVkLgoKNC4wLjAyMCAoMjAwOC0wOC0xNSkKCS0gIlsyMDUyMjU5XSBXcml0ZUhUTUwgPHU+ICYgPGI+IiBidWcgd2FzIGZpeGVkLgoKNC4wLjAxOSAoMjAwOC0wOC0xMykKCS0gIlJvd3NwYW4gb24gZmlyc3QgY2VsbCIgYnVnIHdhcyBmaXhlZC4KCjQuMC4wMTggKDIwMDgtMDgtMDgpCgktIERlZmF1bHQgY2VsbHBhZGRpbmcgZm9yIEhUTUwgdGFibGVzIHdhcyBmaXhlZC4KCS0gQW5ub3RhdGlvbigpIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBzdXBwb3J0IHNvbWUgUERGIGFubm90YXRpb25zIChzZWUgZXhhbXBsZV8wMzYucGhwIGFuZCBzZWN0aW9uIDguNCBvZiBQREYgcmVmZXJlbmNlIDEuNykuCgktIEhUTUwgbGlua3MgYXJlIG5vdyBjb3JyZWNsdHkgc2hpZnRlZCBkdXJpbmcgbGluZSBhbGlnbm1lbnRzLgoJLSBmdW5jdGlvbiBnZXRBbGlhc05iUGFnZXMoKSB3YXMgYWRkZWQgYW5kIEZvb3RlcigpIHdhcyB1cGRhdGVkLgoJLSBSb3dTcGFuIG1vZGUgZm9yIEhUTUwgdGFibGVzIHdhcyBmaXhlZC4KCS0gQnVncyBpdGVtICMyMDQzNjEwICJNdWx0aXBsZSBzaXplcyB2ZXJ0aWNhbCBhbGlnbiB3cm9uZyIgd2FzIGZpeGVkLgoJLSBJbWFnZUVQUygpIGZ1bmN0aW9uIHdhcyBpbXByb3ZlZCBhbmQgUlRMIGFsaWdubWVudCB3YXMgZml4ZWQgKHNlZSBleGFtcGxlXzAzMi5waHApLgoKNC4wLjAxNyAoMjAwOC0wOC0wNSkKCS0gTWlzc2luZyBDTlogYW5kIENFTyBzdHlsZSBtb2RlcyB3ZXJlIGFkZGVkIHRvIFJlY3QoKSBmdW5jdGlvbi4KCS0gRm9udHMgdXRpbHMgd2VyZSB1cGRhdGVkIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgT3BlblR5cGUgZm9udHMuCgktIGdldExhc3RIKCkgZnVuY3Rpb24gd2FzIGFkZGVkLgoKNC4wLjAxNiAoMjAwOC0wNy0zMCkKCS0gc2V0UGFnZU1hcmsoKSBmdW5jdGlvbiB3YXMgYWRkZWQuIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgY2FsbGluZyBJbWFnZSgpIGZ1bmN0aW9uIGZvciBhIGJhY2tncm91bmQgaW1hZ2UuCgo0LjAuMDE1ICgyMDA4LTA3LTI5KQoJLSBTb21lIGZ1bmN0aW9ucyB3ZXJlIGNoYW5nZWQgdG8gc3VwcG9ydCBkaWZmZXJlbnQgcGFnZSBmb3JtYXRzIChzZWUgZXhhbXBsZV8wMjgucGhwKS4KCS0gVGhlIHNpZ25hdHVyZSBvZiBzZXRQYWdlKCkgZnVuY3Rpb24gaXMgY2hhbmdlZC4KCjQuMC4wMTQgKDIwMDgtMDctMjkpCgktIEtfUEFUSF9NQUlOIGNhbGN1bGF0aW9uIG9uIHRjcGRmX2NvbmZpZy5waHAgd2FzIGZpeGVkLgoJLSBIVE1MIHN1cHBvcnQgZm9yIEVQUy9BSSBpbWFnZXMgd2FzIGFkZGVkIChzZWUgZXhhbXBsZV8wMDYucGhwKS4KCS0gQnVncyBpdGVtICMyMDMwODA3ICJUcnVuY2F0ZWQgdGV4dCBvbiBtdWx0aXBhZ2UgaHRtbCBmaWVsZHMiIHdhcyBmaXhlZC4KCS0gUERGIGhlYWRlciBidWcgd2FzIGZpeGVkLgoJLSBoZWx2ZXRpY2Egd2FzIGFkZGVkIGFzIGRlZmF1bHQgZm9udCBmYW1pbHkuCgktIFN0cm9rZSBtb2RlIHdhcyBmaXhlZCBvbiBUZXh0IGZ1bmN0aW9uLgoJLSBzZXZlcmFsIG1pbm9yIGJ1Z3Mgd2VyZSBmaXhlZC4KCjQuMC4wMTMgKDIwMDgtMDctMjcpCgktIEJ1Z3MgaXRlbSAjMjAyNzc5OSAiIEJpZyBzcGFjZXMgYmV0d2VlbiBsaW5lcyBhZnRlciBwYWdlIGJyZWFrIiB3YXMgZml4ZWQuCgktIEtfUEFUSF9NQUlOIGNhbGN1bGF0aW9uIG9uIHRjcGRmX2NvbmZpZy5waHAgd2FzIGNoYW5nZWQuCgktIEZ1bmN0aW9uIHNldFZpc2liaWxpdHkoKSB3YXMgZml4ZWQgdG8gYXZvaWQgdGhlICJJbmNvcnJlY3QgUERFT2JqZWN0IHR5cGUiIGVycm9yIG1lc3NhZ2UuCgo0LjAuMDEyICgyMDA4LTA3LTI0KQoJLSBBZGRwYWdlKCksIEhlYWRlcigpIGFuZCBGb290ZXIoKSBmdW5jdGlvbnMgd2VyZSBjaGFuZ2VkIHRvIHNpbXBsaWZ5IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBleHRlcm5hbCBoZWFkZXIvZm9vdGVyIGZ1bmN0aW9ucy4KCS0gVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgd2VyZSBhZGRlZDoKCQkJc2V0SGVhZGVyKCkKCQkJc2V0Rm9vdGVyKCkKCQkJZ2V0SW1hZ2VSQlgoKQoJCQlnZXRJbWFnZVJCWSgpCgkJCWdldENlbGxIZWlnaHRSYXRpbygpCgkJCWdldEhlYWRlckZvbnQoKQoJCQlnZXRGb290ZXJGb250KCkKCQkJZ2V0UlRMKCkKCQkJZ2V0QmFyY29kZSgpCgkJCWdldEhlYWRlckRhdGEoKQoJCQlnZXRIZWFkZXJNYXJnaW4oKQoJCQlnZXRGb290ZXJNYXJnaW4oKQoKNC4wLjAxMSAoMjAwOC0wNy0yMykKCS0gRm9udCBzdXBwb3J0IHdhcyBpbXByb3ZlZC4KCS0gVGhlIGZvbGRlciAvZm9udHMvdXRpbHMgY29udGFpbnMgbmV3IHV0aWxpdGllcyBhbmQgaW5zdHJ1Y3Rpb25zIGZvciBlbWJlZGQgZm9udCBmaWxlcy4KCS0gRG9jdW1lbnRhdGlvbiB3YXMgdXBkYXRlZC4KCjQuMC4wMTAgKDIwMDgtMDctMjIpCgktIEhUTUwgdGFibGVzIHdlcmUgZml4ZWQgdG8gd29yayBhY3Jvc3MgcGFnZXMuCgktIEhlYWRlcigpIGFuZCBGb290ZXIoKSBmdW5jdGlvbnMgd2VyZSB1cGRhdGVkIHRvIHByZXNlcnZlIHByZXZpb3VzIHNldHRpbmdzLgoJLSBleGFtcGxlXzAzNS5waHAgd2FzIGFkZGVkLgoKNC4wLjAwOSAoMjAwOC0wNy0yMSkKCS0gVVRGOFN0cmluZ1RvQXJyYXkoKSBmdW5jdGlvbiB3YXMgZml4ZWQgZm9yIG5vbi11bmljb2RlIG1vZGUuCgo0LjAuMDA4ICgyMDA4LTA3LTIxKQoJLSBCYXJjb2RlcyBhbGlnbm1lbnQgd2FzIGZpeGVkIChzZWUgZXhhbXBsZV8wMjcucGhwKS4KCS0gdW5pY29kZV9kYXRhLnBocCB3YXMgdXBkYXRlZC4KCS0gQXJhYmljIHNoYXBpbmcgZm9yICJaZXJvLVdpZHRoIE5vbi1Kb2luZXIiIGNoYXJhY3RlciAoVSsyMDBDKSB3YXMgZml4ZWQuCgo0LjAuMDA3ICgyMDA4LTA3LTE4KQoJLSBzdHJfc3BsaXQgd2FzIHJlcGxhY2VkIGJ5IHByZWdfc3BsaXQgZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBQSFA0IHZlcnNpb24uCgktIENsaXBwaW5nIG1vZGUgd2FzIGFkZGVkIHRvIGFsbCBncmFwaGljIGZ1bmN0aW9ucyBieSB1c2luZyBwYXJhbWV0ZXIgJHN0eWxlID0gIkNOWiIgb3IgIkNFTyIgKHNlZSBleGFtcGxlXzAzNC5waHApLgoKNC4wLjAwNiAoMjAwOC0wNy0xNikKCS0gSFRNTCByb3dzcGFuIGJ1ZyB3YXMgZml4ZWQuCgktIExpbmUgc3R5bGUgZm9yIE11bHRpQ2VsbCgpIHdhcyBmaXhlZC4KCS0gV3JpdGVIVE1MKCkgZnVuY3Rpb24gd2FzIGltcHJvdmVkLgoJLSBDT0RFMTI4QyBiYXJjb2RlIHdhcyBmaXhlZCAoYmFyY29kZXMucGhwKS4KCjQuMC4wMDUgKDIwMDgtMDctMTEpCgktIEJ1ZyBbMjAxNTcxNV0gIlBIUCBFcnJvci9XYXJuaW5nIiB3YXMgZml4ZWQuCgo0LjAuMDA0ICgyMDA4LTA3LTA5KQoJLSBIVE1MIGNlbGwgaW50ZXJuYWwgcGFkZGluZyB3YXMgZml4ZWQuCgo0LjAuMDAzICgyMDA4LTA3LTA4KQoJLSBSZW1vdmVkIFVSTCBlbmNvZGluZyB3aGVuIEYgb3B0aW9uIGlzIHNlbGVjdGVkIG9uIE91dHB1dCgpIGZ1bmN0aW9uLgoJLSBmaXhlZCBzb21lIG1pbm9yIGJ1Z3MgaW4gaHRtbCB0YWJsZXMuCgo0LjAuMDAyICgyMDA4LTA3LTA3KQoJLSBCdWcgWzIwMDA4NjFdIHdhcyBzdGlsbCB1bmZpeGVkIGFuZCBoYXMgYmVlbiBmaXhlZC4KCjQuMC4wMDEgKDIwMDgtMDctMDUpCgktIEJ1ZyBbMjAwMDg2MV0gd2FzIGZpeGVkLgoKNC4wLjAwMCAoMjAwOC0wNy0wMykKCS0gVEhJUyBJUyBBIE1BSU4gUkVMRUFTRSBUSEFUIElOQ0xVREVTIFNFVkVSQUwgTkVXIEZFQVRVUkVTIEFORCBCVUdGSVhFUwoJLSBTaWduYXR1cmUgZm8gU2V0VGV4dENvbG9yKCkgYW5kIFNldEZpbGxDb2xvcigpIGZ1bmN0aW9ucyB3YXMgY2hhbmdlZCAocGFyYW1ldGVyICRzdG9yZXByZXYgd2FzIHJlbW92ZWQpLgoJLSBIVE1MIHN1cHBvcnQgd2FzIGNvbXBsZXRlbHkgcmV3cml0dGVuIGFuZCBpbXByb3ZlZCAoc2VlIGV4YW1wbGUgNikuCgktIEFsaWdubWVudHMgcGFyYW1ldGVycyB3ZXJlIGZpeGVkLgoJLSBGdW5jdGlvbnMgR2V0QXJyU3RyaW5nV2lkdGgoKSBhbmQgR2V0U3RyaW5nV2lkdGgoKSBub3cgaW5jbHVkZSBmb250IHBhcmFtZXRlcnMuCgktIEZvbnRzIHN1cHBvcnQgd2FzIGltcHJvdmVkLgoJLSBBbGwgY29yZSBmb250cyB3ZXJlIHJlcGxhY2VkIGFuZCBtb3ZlZCB0byBmb250cy8gZGlyZWN0b3J5LgoJLSBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkOiBnZXRNYXJnaW5zKCksIGdldEZvbnRTaXplKCksIGdldEZvbnRTaXplUHQoKS4KCS0gRmlsZSBjb25maWcvdGNwZGZfY29uZmlnX29sZC5waHAgd2FzIHJlbmFtZWQgdGNwZGZfY29uZmlnX2FsdC5waHAgYW5kIHVwZGF0ZWQuCgktIE11bHRpY2VsbCBhbmQgV3JpdGVIVE1MQ2VsbCBmaWxsIGZ1bmN0aW9uIHdhcyBmaXhlZC4KCS0gU2V2ZXJhbCBtaW5vciBidWdzIHdlcmUgZml4ZWQuCgktIGJhcmNvZGVzLnBocCB3YXMgdXBkYXRlZC4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKMy4xLjAwMSAoMjAwOC0wNi0xMykKCS0gQnVnIFsxOTkyNTE1XSAiS19QQVRIX0ZPTlRTIGRlZmF1bHQgdmFsdWUgd3JvbmciIHdhcyBmaXhlZC4KCS0gVmVyYSBmb250IHdhcyByZW1vdmVkLCBEZWphVnUgZm9udCBhbmQgRnJlZSBmb250cyB3ZXJlIHVwZGF0ZWQuCgktIEltYWdlIGhhbmRsaW5nIHdhcyBpbXByb3ZlZC4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCjMuMS4wMDAgKDIwMDgtMDYtMTEpCgktIHNldFBERlZlcnNpb24oKSB3YXMgYWRkZWQgdG8gY2hhbmdlIHRoZSBkZWZhdWx0IFBERiB2ZXJzaW9uIChjdXJyZW50bHkgMS43KS4KCS0gc2V0Vmlld2VyUHJlZmVyZW5jZXMoKSB3YXMgYWRkZWQgdG8gY29udHJvbCB0aGUgd2F5IHRoZSBkb2N1bWVudCBpcyB0byBiZSBwcmVzZW50ZWQgb24gdGhlIHNjcmVlbiBvciBwcmludGVkIChzZWUgZXhhbXBsZSAyOSkuCgktIFNldERpc3BsYXlNb2RlKCkgc2lnbmF0dXJlIHdhcyBjaGFuZ2VkIChuZXcgb3B0aW9ucyB3ZXJlIGFkZGVkKS4KCS0gTGluZWFyR3JhZGllbnQoKSwgUmFkaWFsR3JhZGllbnQoKSwgQ29vbnNQYXRjaE1lc2goKSBmdW5jdGlvbnMgd2VyZSBhZGRlZCB0byBwcmludCB2YXJpb3VzIGNvbG9yIGdyYWRpZW50cyAoc2VlIGV4YW1wbGUgMzApLgoJLSBQaWVTZWN0b3IoKSBmdW5jdGlvbiB3YXMgYWRkZWQgdG8gcmVuZGVyIHJlbmRlciBwaWUgY2hhcnRzIChzZWUgZXhhbXBsZSAzMSkuCgktIEltYWdlRXBzKCkgd2FzIGFkZGVkIHRvIGRpc3BsYXkgRVBTIGFuZCBBSSBpbWFnZXMgd2l0aCBsaW1pdGVkIHN1cHBvcnQgKHNlZSBleGFtcGxlIDMyKS4KCS0gd3JpdGVCYXJjb2RlKCkgZnVuY3Rpb24gaXMgbm93IGRlcHJhY2F0ZWQsIGEgbmV3IHdyaXRlMURCYXJjb2RlKCkgZnVuY3Rpb24gd2FzIGFkZGVkLiBUaGUgYmFyY29kZSBkaXJlY3Rvcnkgd2FzIHJlbW92ZWQgYW5kIGEgbmV3IGJhcmNvZGVzLnBocCBmaWxlIHdhcyBhZGRlZC4KCS0gVGhlIG5ldyB3cml0ZTFEQmFyY29kZSgpIGZ1bmN0aW9uIHN1cHBvcnQgbW9yZSBiYXJjb2RlcyBhbmQgZG8gbm90IG5lZWQgdGhlIEdEIGxpYnJhcnkgKHNlZSBleGFtcGxlIDAyNykuIEFsbCBiYXJjb2RlcyBhcmUgZGlyZWN0bHkgd3JpdHRlbiB0byBQREYgdXNpbmcgZ3JhcGhpYyBmdW5jdGlvbnMuCgktIEhUTUwgbGlzdHMgd2VyZSBpbXByb3ZlZCBhbmQgY291bGQgYmUgbmVzdGVkICh5b3UgbWF5IG5vdyByZXByZXNlbnQgdHJlZXMpLgoJLSBBZGRGb250KCkgYnVnIHdhcyBmaXhlZC4KCS0gX3B1dGZvbnRzKCkgYnVnIHdhcyBmaXhlZC4KCS0gZ3JhcGhpY3MgZnVuY3Rpb25zIHdlcmUgZml4ZWQuCgktIHVuaWNvZGVfZGF0YS5waHAgZmlsZSB3YXMgdXBkYXRlZCAoZml4ZWQpLgoJLSBhbG1vaGFuYWQgZm9udCB3YXMgdXBkYXRlZC4KCS0gZXhhbXBsZSAxOCB3YXMgdXBkYXRlZCAoRmFyc2kgYW5kIEFyYWJpYyBsYW5ndWFnZXMpLgoJLSBzb3VyY2UgY29kZSBjbGVhbnVwLgoJLSBBbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkIGFuZCBuZXcgZXhhbXBsZXMgd2VyZSBhZGRlZC4KCjMuMC4wMTUgKDIwMDgtMDYtMDYpCgktIEFkZFBhZ2UoKSBmdW5jdGlvbiBzaWduYXR1cmUgaXMgY2hhbmdlZCB0byBpbmNsdWRlIHBhZ2UgZm9ybWF0LgoJLSBleGFtcGxlIDI4IHdhcyBhZGRlZCB0byBzaG93IHBhZ2UgZm9ybWF0IGNoYW5nZXMuCgktIHNldFBhZ2VVbml0KCkgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGNoYW5nZSB0aGUgcGFnZSB1bml0cyBvZiBtZWFzdXJlLgoJLSBzZXRQYWdlRm9ybWF0KCkgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGNoYW5nZSB0aGUgcGFnZSBmb3JtYXQgYW5kIG9yaWVudGF0aW9uIGJldHdlZW4gcGFnZXMuCgktIHNldFBhZ2VPcmllbnRhdGlvbigpIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byBjaGFuZ2UgdGhlIHBhZ2Ugb3JpZW50YXRpb24uCgktIEFyYWJpYyBmb250IHNoYXBpbmcgd2FzIGZpeGVkIGZvciBsYWEgbGV0dGVyIGFuZCBzcXVhcmUgYm94ZXMgKHNlZSB0aGUgZXhhbXBsZSAxOCkuCgozLjAuMDE0ICgyMDA4LTA2LTA0KQoJLSBBcmFiaWMgZm9udCBzaGFwaW5nIHdhcyBmaXhlZC4KCS0gc2V0RGVmYXVsdFRhYmxlQ29sdW1ucygpIGZ1bmN0aW9uIHdhcyBhZGRlZC4KCS0gJGNlbGxfaGVpZ2h0X3JhdGlvIHZhcmlhYmxlIHdhcyBhZGRlZC4KCS0gc2V0Q2VsbEhlaWdodFJhdGlvKCkgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGRlZmluZSB0aGUgZGVmYXVsdCBoZWlnaHQgb2YgY2VsbCByZXBlY3QgZm9udCBoZWlnaHQuCgozLjAuMDEzICgyMDA4LTA2LTAzKQoJLSBNdWx0aWNlbGwgaGVpZ2h0IHBhcmFtZXRlciB3YXMgZml4ZWQuCgktIEFyYWJpYyBmb250IHNoYXBpbmcgd2FzIGltcHJvdmVkLgoJLSB1bmljb2RlX2RhdGEucGhwIHdhcyB1cGRhdGVkLgoKMy4wLjAxMiAoMjAwOC0wNS0zMCkKCS0gS19QQVRIX01BSU4gYW5kIEtfUEFUSF9VUkwgY29uc3RhbnRzIGFyZSBub3cgYXV0b21hdGljYWxseSBzZXQgb24gY29uZmlnIGZpbGUuCgktIERPQ1VNRU5UX1JPT1QgY29uc3RhbnQgd2FzIGZpeGVkIGZvciBJSVMgV2Vic2VydmVyIChjb25maWcgZmlsZSB3YXMgdXBkYXRlZCkuCgktIEFyYWJpYyBmb250IHNoYXBpbmcgd2FzIGltcHJvdmVkLgoJLSBUcmFuc2xhdGVZKCkgZnVuY3Rpb24gd2FzIGZpeGVkIChidWcgWzE5Nzc5NjJdKS4KCS0gc2V0VmlzaWJpbGl0eSgpIGZ1bmN0aW9uIHdhcyBmaXhlZC4KCS0gd3JpdGVCYXJjb2RlKCkgZnVuY3Rpb24gd2FzIGZpeGVkIHRvIHNjYWxlIHVzaW5nICR4cmVmIHBhcmFtZXRlci4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgdXBkYXRlZC4KCjMuMC4wMTEgKDIwMDgtMDUtMjMpCgktIENNWUsgY29sb3Igc3VwcG9ydCB3YXMgYWRkZWQgdG8gYWxsIGdyYXBoaWMgZnVuY3Rpb25zLgoJLSBIVE1MIHRhYmxlIHN1cHBvcnQgd2FzIGltcHJvdmVkOgoJICAtLSBub3cgaXQncyBwb3NzaWJsZSB0byBpbmNsdWRlIGFkZGl0aW9uYWwgaHRtbCB0YWdzIGluc2lkZSBhIGNlbGw7CgkgIC0tIGNvbHNwYW4gYXR0cmlidXRlIHdhcyBhZGRlZC4KCS0gZXhhbXBsZSAwMDYgd2FzIHVwZGF0ZWQuCgozLjAuMDEwICgyMDA4LTA1LTIxKQoJLSBmaXhlZCAkbGFhX2FycmF5IGluY2x1c2lvbiBvbiB1dGY4QmlkaSgpIGZ1bmN0aW9uLgoKMy4wLjAwOSAoMjAwOC0wNS0yMCkKCS0gdW5pY29kZV9kYXRhLnBocCB3YXMgdXBkYXRlZC4KCS0gQXJhYmljIGxhYSBsZXR0ZXIgcHJvYmxlbSB3YXMgZml4ZWQuCgozLjAuMDA4ICgyMDA4LTA1LTEyKQoJLSBBcmFiaWMgc3VwcG9ydCB3YXMgZml4ZWQgYW5kIGltcHJvdmVkICh1bmljb2RlX2RhdGEucGhwIHdhcyB1cGRhdGVkKS4KCS0gUG9seWN1cnZlKCkgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGRyYXcgYSBwb2x5LUJlemllciBjdXJ2ZS4KCS0gbGlzdCBpdGVtcyBhbGlnbm1lbnQgd2FzIGZpeGVkLgoJLSBleGFtcGxlIDYgd2FzIHVwZGF0ZWQuCgozLjAuMDA3ICgyMDA4LTA1LTA2KQoJLSBBcmFiaWMgc3VwcG9ydCB3YXMgZml4ZWQgYW5kIGltcHJvdmVkLgoJLSBBbE1vaGFuYWQgKGFyYWJpYykgZm9udCB3YXMgYWRkZWQuCgktIEMxMjggYmFyY29kZSBidWdzIHdlcmUgZml4ZWQuCgozLjAuMDA2ICgyMDA4LTA0LTIxKQoJLSBDb25kaXRpb24gdG8gY2hlY2sgbmVnYXRpdmUgd2lkdGggdmFsdWVzIHdhcyBhZGRlZC4KCjMuMC4wMDUgKDIwMDgtMDQtMTgpCgktIGJhY2stU2xhc2ggY2hhcmFjdGVyIGVzY2FwZSB3YXMgZml4ZWQgb24gd3JpdGVIVE1MKCkgZnVuY3Rpb24uCgktIEV4YW1wZSA2IHdhcyB1cGRhdGVkLgoKMy4wLjAwNCAoMjAwOC0wNC0xMSkKCS0gQnVnIFsxOTM5MzA0XSAoUmlnaHQgdG8gTGVmdCBJc3N1ZSkgd2FzIGZpeGVkLgoKMy4wLjAwMyAoMjAwOC0wNC0wNykKCS0gQnVnIFsxOTM0NTIzXShXb3JkcyBiZXR3ZWVuIEhUTUwgdGFncyBpbiBjZWxsIG5vdCBrZXB0IG9uIG9uZSBsaW5lKSB3YXMgZml4ZWQuCgktICJmYWNlIiBhdHRyaWJ1dGUgb2YgImZvbnQiIHRhZyBpcyBub3cgZnVsbHkgc3VwcG9ydGVkLgoKMy4wLjAwMiAoMjAwOC0wNC0wMSkKCS0gV3JpdGUoKSBmdW5jdGlvbnMgbm93IHJldHVybiB0aGUgbnVtYmVyIG9mIGNlbGxzIGFuZCBub3QgdGhlIG51bWJlciBvZiBsaW5lcy4KCS0gVENQREYgaXMgcmVsZWFzZWQgdW5kZXIgTEdQTCAyLjEsIG9yIGFueSBsYXRlciB2ZXJzaW9uLgoKMy4wLjAwMSAoMjAwOC0wNS0yOCkKCS0gX2xlZ2FjeXBhcnNlanBlZygpIGFuZCBfbGVnYWN5cGFyc2VwbmcoKSB3ZXJlIHJlbmFtZWQgX3BhcnNlanBlZygpIGFuZCBfcGFyc2VwbmcoKS4KCS0gZnVuY3Rpb24gd3JpdGVCYXJjb2RlKCkgd2FzIGZpeGVkLgoJLSBhbGwgZXhhbXBsZXMgd2VyZSB1cGRhdGVkLgoJLSBleGFtcGxlIDI3IHdhcyBhZGRlZCB0byBzaG93IHZhcmlvdXMgYmFyY29kZXMuCgozLjAuMDAwICgyMDA4LTAzLTI3KQoJLSBwcml2YXRlIGZ1bmN0aW9uIHBpeGVsc1RvTWlsbGltZXRlcnMoKSB3YXMgY2hhbmdlZCB0byBwdWJsaWMgZnVuY3Rpb24gcGl4ZWxzVG9Vbml0cygpIHRvIGZpeCBodG1sIGltYWdlIHNpemUgYnVnLgoJLSBJbWFnZS1yZWxhdGVkIGZ1bmN0aW9ucyB3ZXJlIHJld3JpdHRlbi4KCS0gcmVzaXplIHBhcmFtZXRlciB3YXMgYWRkZWQgdG8gSW1hZ2UoKSBzaWduYXR1cmUgdG8gcmVkdWNlIHRoZSBpbWFnZSBzaXplIGFuZCBmaXQgd2lkdGggYW5kIGhlaWdodCAoc2VlIGV4YW1wbGUgOSkuCgktIFRDUERGIG5vdyBzdXBwb3J0cyBhbGwgaW1hZ2VzIHN1cHBvcnRlZCBieSBHRCBsaWJyYXJ5OiBHRCwgR0QyLCBHRDJQQVJULCBHSUYsIEpQRUcsIFBORywgQk1QLCBYQk0sIFhQTS4KCS0gQ01ZSyBzdXBwb3J0IHdhcyBhZGRlZCB0byBTZXREcmF3Q29sb3IoKSwgU2V0RmlsbENvbG9yKCksIFNldFRleHRDb2xvcigpIChzZWUgZXhhbXBsZSAyMikuCgktIFBhZ2UgR3JvdXBzIHdlcmUgYWRkZWQgKHNlZSBleGFtcGxlIDIzKS4KCS0gc2V0VmlzaWJpbGl0eSgpIGZ1bmN0aW9uIHdhcyBhZGRlZCB0byByZXN0cmljdCB0aGUgcmVuZGVyaW5nIG9mIHNvbWUgZWxlbWVudHMgdG8gc2NyZWVuIG9yIHByaW50b3V0IChzZWUgZXhhbXBsZSAyNCkuCgktIEFsbCBwcml2YXRlIHZhcmlhYmxlcyBhbmQgZnVuY3Rpb25zIHdlcmUgY2hhbmdlZCB0byBwcm90ZWN0ZWQuCgktIHNldEFscGhhKCkgZnVuY3Rpb24gd2FzIGFkZGVkIHRvIGdpdmUgdHJhbnNwYXJlbmN5IHN1cHBvcnQgZm9yIGFsbCBvYmplY3RzIChzZWUgZXhhbXBsZSAyNSkuCgktIENsaXBwaW5nIGFuZCBzdHJva2UgbW9kZXMgd2VyZSBhZGRlZCB0byBUZXh0KCkgZnVuY3Rpb24gKHNlZSBleGFtcGxlIDI2KS4KCS0gQWxsIGV4YW1wbGVzIHdlcmUgbW92ZWQgdG8gImV4YW1wbGVzIiBkaXJlY3RvcnkuCgktIGZ1bmN0aW9uIHNldEpQRUdRdWFsaXR5KCkgd2FzIGFkZGVkIHRvIHNldCB0aGUgSlBFRyBpbWFnZSBjb21ycGVzc2lvbiAoc2VlIGV4YW1wbGUgOSkuCgoyLjkuMDAwICgyMDA4LTAzLTI2KQoJLSBodG1sY29sb3JzLnBocCBmaWxlIHdhcyBhZGRlZCB0byBpbmNsdWRlIGh0bWwgY29sb3JzLgoJLSBTdXBwb3J0IGZvciBIVE1MIGNvbG9yIG5hbWVzIGFuZCB0aHJlZS1kaWdpdCBoZXhhZGVjaW1hbCBjb2xvciBjb2RlcyB3YXMgYWRkZWQuCgktIHByaXZhdGUgZnVuY3Rpb24gY29udmVydENvbG9ySGV4VG9EZWMoKSB3YXMgcmVuYW1lZCBjb252ZXJ0SFRNTENvbG9yVG9EZWMoKS4KCS0gY29sb3IgYW5kIGJnY29sb3IgYXR0cmlidXRlcyBhcmUgbm93IHN1cHBvcnRlZCBvbiBhbGwgSFRNTCB0YWdzIChjb2xvciBuZXN0aW5nIGlzIGFsc28gc3VwcG9ydGVkKS4KCS0gV3JpdGUoKSBmdW5jdGlvbiB3ZXJlIGZpeGVkLgoJLSBleGFtcGxlXzAwNi5waHAgd2FzIHVwZGF0ZWQuCgktIHByaXZhdGUgZnVuY3Rpb24gc2V0VXNlclJpZ2h0cygpIHdhcyBhZGRlZCB0byByZWxlYXNlIHVzZXIgcmlnaHRzIG9uIEFjcm9iYXQgUmVhZGVyICh0aGlzIGFsbG93cyB0byBkaXNwbGF5IGZvcm1zLCBzZWUgZXhhbXBsZSAxNCkKCjIuOC4wMDAgKDIwMDgtMDMtMjApCgktIFByaXZhdGUgdmFyaWFibGVzIHdlcmUgY2hhbmdlZCB0byBwcm90ZWN0ZWQuCgktIEZ1bmN0aW9uIFdyaXRlKCkgd2FzIGZpeGVkIGFuZCBpbXByb3ZlZC4KCS0gU3VwcG9ydCBmb3IgZGwsIGR0LCBkZCwgZGVsIEhUTUwgdGFncyB3YXMgaW50cm9kdWNlZC4KCS0gTGluZS10cm91Z2h0IG1vZGUgd2FzIGFkZGVkIGZvciBIVE1MIGFuZCB0ZXh0LgoJLSBUZXh0IHZlcnRpY2FsIGFsaWdubWVudCBvbiBjZWxscyB3ZXJlIGZpeGVkLgoJLSBFeGFtcGxlcyB3ZXJlIHVwZGF0ZWQgdG8gcmVmbGVjdCBjaGFuZ2VzLgoKMi43LjAwMiAoMjAwOC0wMy0xMykKCS0gQnVnICJbMTkxMjE0Ml0gRW5jcnlwdGVkIFBERiBjcmVhdGVkL21vZGlmaWVkIGRhdGUiIHdhcyBmaXhlZC4KCjIuNy4wMDEgKDIwMDgtMDMtMTApCgktIENlbGwganVzdGlmaWNhdGlvbiB3YXMgZml4ZWQgZm9yIG5vbi11bmljb2RlIG1vZGUuCgoyLjcuMDAwICgyMDA4LTAzLTA5KQoJLSBDZWxsKCkgc3RyZXRjaGluZyBtb2RlIDQgKGZvcmNlZCBjaGFyYWN0ZXIgc3BhY2luZykgd2FzIGZpeGVkLgoJLSB3cml0ZUhUTUxDZWxsKCkgbm93IHVzZXMgTXVsdGljZWxsKCkgdG8gd3JpdGUuCgktIE11bHRpY2VsbCgpIGhhcyBhIG5ldyBwYXJhbWV0ZXIgJGlzaHRtbCB0byBhY3QgYXMgd3JpdGVIVE1MQ2VsbCgpLgoJLSBXcml0ZSgpIHNwZWVkIHdhcyBpbXByb3ZlZCBmb3Igbm9uLWFyYWJpYyBzdHJpbmdzLgoJLSBFeGFtcGxlIG4uIDIwIHdhcyBjaGFuZ2VkLgoKMi42LjAwMCAoMjAwOC0wMy0wNykKCS0gdmFyaW91cyBhbGlnbm1lbnRzIGJ1Z3Mgd2VyZSBmaXhlZC4KCjIuNS4wMDAgKDIwMDgtMDMtMDcpCgktIFNldmVyYWwgYnVncyB3ZXJlIGZpeGVkLgoJLSBleGFtcGxlXzAxOS5waHAgd2FzIGFkZGVkIHRvIHRlc3Qgbm9uLXVuaWNvZGUgbW9kZSB1c2luZyBvbGQgZm9udHMuCgoyLjQuMDAwICgyMDA4LTAzLTA2KQoJLSBSVEwgc3VwcG9ydCB3YXMgZGVlcGx5IGltcHJvdmVkLgoJLSBHZXRTdHJpbmdXaWR0aCgpIHdhcyBmaXhlZCB0byBzdXBwb3J0IFJUTCBsYW5ndWFnZXMuCgktIFRleHQoKSBSVEwgYWxpZ25tZW50IHdhcyBmaXhlZC4KCS0gU29tZSBmdW5jdGlvbnMgd2VyZSBhZGRlZDogR2V0QXJyU3RyaW5nV2lkdGgoKSwgR2V0Q2hhcldpZHRoKCksIHVuaW9yZCgpLCB1dGY4QmlkaSgpLgoJLSBleGFtcGxlXzAxOC5waHAgd2FzIGFkZGVkIGFuZCB0ZXN0X3VuaWNvZGUucGhwIHdhcyByZW1vdmVkLgoKMi4zLjAwMCAoMjAwOC0wMy0wNSkKCS0gTXVsdGlDZWxsKCkgc2lnbmF0dXJlIGlzIGNoYW5nZWQuIE5vdyBzdXBwb3J0IG11bHRpcGxlIGNvbHVtbnMgYWNyb3NzIHBhZ2VzIChzZWUgZXhhbXBsZV8wMTcpLgoJLSBXcml0ZSgpIHNpZ25hdHVyZSBpcyBjaGFuZ2VkLiBOb3cgc3VwcG9ydCB0aGUgY2VsbCBtb2RlIHRvIGJlIHVzZWQgd2l0aCBNdWx0aUNlbGwuCgktIEhlYWRlcigpIGFuZCBGb290ZXIoKSB3ZXJlIGNoYW5nZWQuCgktIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdlcmUgYWRkZWQ6IFVURjhBcnJTdWJTdHJpbmcoKSBhbmQgdW5pY2hyKCkuCgktIEV4YW1wbGVzIHdlcmUgdXBkYXRlZCB0byByZWZsZWN0IGxhc3QgY2hhbmdlcy4KCjIuMi4wMDQgKDIwMDgtMDMtMDQpCgktIFNldmVyYWwgZXhhbXBsZXMgd2VyZSBhZGRlZC4KCS0gQWRkUGFnZSgpIEhlYWRlcigpIGFuZCBGb290ZXIoKSB3ZXJlIGZpeGVkLgoJLSBEb2N1bWVudGF0aW9uIGlzIG5vdyBhdmFpbGFibGUgb24gaHR0cDovL3d3dy50Y3BkZi5vcmcKCjIuMi4wMDMgKDIwMDgtMDMtMDMpCgktIFsxODk0ODUzXSBQZXJmb3JtYW5jZSBvZiBNdWx0aUNlbGwoKSB3YXMgaW1wcm92ZWQuCgktIFJhZGlvQnV0dG9uIGFuZCBMaXN0Qm94IGZ1bmN0aW9ucyB3ZXJlIGFkZGVkLgoJLSBqYXZhc2NyaXB0IGZvcm0gZnVuY3Rpb25zIHdlcmUgcmV3cml0dGVuIGFuZCBwcm9wZXJ0aWVzIG5hbWVzIGFyZSBjaGFuZ2VkLiBUaGUgcHJvcGVydGllcyBmdW5jdGlvbiBzdXBwb3J0ZWQgYnkgZm9ybSBmaWVsZHMgYXJlIGxpc3RlZCBvbiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGxpc3RlZCBvbiBodHRwOi8vd3d3LmFkb2JlLmNvbS9kZXZuZXQvYWNyb2JhdC9wZGZzL2pzX2RldmVsb3Blcl9ndWlkZS5wZGYuCgoyLjIuMDAyICgyMDA4LTAyLTI4KQoJLSBbMTkwMDQ5NV0gaHRtbCBpbWFnZXMgcGF0aCB3YXMgZml4ZWQuCgktIExlZ2FjeSBpbWFnZSBmdW5jdGlvbnMgd2VyZSByZWludHJvZHVjZWQgdG8gYWxsb3cgUE5HIGFuZCBKUEVHIHN1cHBvcnQgd2l0aG91dCBHRCBsaWJyYXJ5LgoKMi4yLjAwMSAoMjAwOC0wMi0xNikKCS0gVGhlIGJ1ZyAiWzE4OTQ3MDBdIGJ1ZyB3aXRoIHJlcGxhY2UgcmVsYXRpdmUgcGF0aCIgd2FzIGZpeGVkCgktIEp1c3RpZmljYXRpb24gd2FzIGZpeGVkCgoyLjIuMDAwICgyMDA4LTAyLTEyKQoJLSBmaXhlZCBqYXZhc2NyaXB0IGJ1ZyBpbnRyb2R1Y2VkIHdpdGggbGF0ZXN0IHJlbGVhc2UKCjIuMS4wMDIgKDIwMDgtMDItMTIpCgktIEp1c3RpZnkgZnVuY3Rpb24gd2FzIGZpeGVkIG9uIFBIUDQgdmVyc2lvbi4KCS0gQm9va21hbmsgZnVuY3Rpb24gd2FzIGFkZGVkIChbMTU3ODI1MF0gVGFibGUgb2YgY29udGVudHMpLgoJLSBKYXZhc2NyaXB0IGFuZCBGb3JtIGZpZWxkcyBzdXBwb3J0IHdhcyBhZGRlZCAoWzE3OTYzNTldIEZvcm0gZmllbGRzKS4KCjIuMS4wMDEgKDIwMDgtMDItMTApCgktIFRoZSBidWcgIlsxODg1Nzc2XSBSYWNlIENvbmRpdGlvbiBpbiBmdW5jdGlvbiBqdXN0aXRmeSIgd2FzIGZpeGVkLgoJLSBUaGUgYnVnICJbMTg5MDIxN10geHBkZiBjb21wbGFpbnMgdGhhdCBwZGYgaXMgaW5jb3JyZWN0IiB3YXMgZml4ZWQuCgoyLjEuMDAwICgyMDA4LTAxLTA3KQoJLSBGUERGX0ZPTlRQQVRIIGNvbnN0YW50IHdhcyBjaGFuZ2VkIHRvIEtfUEFUSF9GT05UUyBvbiBjb25maWcgZmlsZQoJLSBCaWRpcmVjdGlvbmFsIEFsZ29yaXRobSB0byBjb3JyZWN0bHkgcmV2ZXJzZSBiaWRpcmVjdGlvbmFsIGxhbmd1YWdlcyB3YXMgYWRkZWQuCgktIFNldExlZnRNYXJnaW4sIFNldFRvcE1hcmdpbiwgU2V0UmlnaHRNYXJnaW4gZnVuY3Rpb25zIHdlcmUgZml4ZWQuCgktIFNldENlbGxQYWRkaW5nIGZ1bmN0aW9uIHdhcyBhZGRlZC4KCS0gd3JpdGVIVE1MIHdhcyB1cGRhdGVkIHdpdGggbmV3IHBhcmFtZXRlcnMuCgktIFRleHQgZnVuY3Rpb24gd2FzIGZpeGVkLgoJLSBNdWx0aUNlbGwgZnVuY3Rpb24gd2FzIGZpeGVkLCBub3cgd29ya3MgYWxzbyBhY3Jvc3MgbXVsdGlwbGUgcGFnZXMuCgktIExpbmUgd2lkdGggd2FzIGZpeGVkIG9uIEhlYWRlciBhbmQgRm9vdGVyIGZ1bmN0aW9ucyBhbmQgPGhyPiB0YWcuCgktICJHZXRJbWFnZVNpemUiIHdhcyByZW5hbWVkICJnZXRpbWFnZXNpemUiLgoJLSBEb2N1bWVudCB2ZXJzaW9uIHdhcyBjaGFuZ2VkIGZyb20gMS4zIHRvIDEuNS4KCS0gX2JlZ2luZG9jKCkgZnVuY3Rpb24gd2FzIGZpeGVkLgoJLSBDaGFuZ2VEYXRlIHdhcyBmaXhlZCBhbmQgTW9kRGF0ZSB3YXMgYWRkZWQuCgktIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHdlcmUgYWRkZWQ6CgkgIHNldFBhZ2UoKSA6IE1vdmUgcG9pbnRlciB0byB0aGUgc3BlY2lmaWVkIGRvY3VtZW50IHBhZ2UuCgkgIGdldFBhZ2UoKSA6IEdldCBjdXJyZW50IGRvY3VtZW50IHBhZ2UgbnVtYmVyLgoJICBsYXN0cGFnZSgpIDogUmVzZXQgcG9pbnRlciB0byB0aGUgbGFzdCBkb2N1bWVudCBwYWdlLgoJICBnZXROdW1QYWdlcygpIDogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5zZXJ0ZWQgcGFnZXMuCgkgIEdldE51bUNoYXJzKCkgOiBjb3VudCB0aGUgbnVtYmVyIG9mIChVVEYtOCkgY2hhcmFjdGVycyBpbiBhIHN0cmluZy4KCS0gJHN0cmV0Y2ggcGFyYW1ldGVyIHdhcyBhZGRlZCB0byBDZWxsKCkgZnVuY3Rpb24gdG8gZml0IHRleHQgb24gY2VsbDoKCQkJMCA9IGRpc2FibGVkCgkJCTEgPSBob3Jpem9udGFsIHNjYWxpbmcgb25seSBpZiBuZWNlc3NhcnkKCQkJMiA9IGZvcmNlZCBob3Jpem9udGFsIHNjYWxpbmcKCQkJMyA9IGNoYXJhY3RlciBzcGFjaW5nIG9ubHkgaWYgbmVjZXNzYXJ5CgkJCTQgPSBmb3JjZWQgY2hhcmFjdGVyIHNwYWNpbmcKCS0gTGluZSBmdW5jdGlvbiB3YXMgZml4ZWQgZm9yIFJUTC4KCS0gR3JhcGhpYyB0cmFuc2Zvcm1hdGlvbiBmdW5jdGlvbnMgd2VyZSBhZGRlZCBbMTgxMTE1OF06CgkJCVN0YXJ0VHJhbnNmb3JtKCkKCQkJU3RvcFRyYW5zZm9ybSgpCgkJCVNjYWxlWCgpCgkJCVNjYWxlWSgpCgkJCVNjYWxlWFkoKQoJCQlTY2FsZSgpCgkJCU1pcnJvckgoKQoJCQlNaXJyb3JWKCkKCQkJTWlycm9yUCgpCgkJCU1pcnJvckwoKQoJCQlUcmFuc2xhdGVYKCkKCQkJVHJhbnNsYXRlWSgpCgkJCVRyYW5zbGF0ZSgpCgkJCVJvdGF0ZSgpCgkJCVNrZXdYKCkKCQkJU2tld1koKQoJCQlTa2V3KCkKCS0gR3JhcGhpYyBmdW5jdGlvbiB3ZXJlIGFkZGVkL3VwZGF0ZWQgWzE2ODg1NDldOgoJCQlTZXRMaW5lU3R5bGUoKQoJCQlfb3V0UG9pbnQoKQoJCQlfb3V0TGluZSgpCgkJCV9vdXRSZWN0KCkKCQkJX291dEN1cnZlKCkKCQkJTGluZSgpCgkJCVJlY3QoKQoJCQlDdXJ2ZQoJCQlFbGxpcHNlCgkJCUNpcmNsZQoJCQlQb2x5Z29uCgkJCVJlZ3VsYXJQb2x5Z29uCgoyLjAuMDAwICgyMDA4LTAxLTA0KQoJLSBSVEwgKFJpZ2h0LVRvLUxlZnQpIGxhbmd1YWdlcyBzdXBwb3J0IHdhcyBhZGRlZC4gTGFuZ3VhZ2UgZGlyZWN0aW9uIGlzIHNldCB1c2luZyB0aGUgJGxbJ2FfbWV0YV9kaXInXSBzZXR0aW5nIG9uIC9jb25maWd1cmUvbGFuZ3VhZ2UveHh4LnBocCBsYW5ndWFnZSBmaWxlcy4KCS0gc2V0UlRMKCRlbmFibGUpIG1ldGhvZCB3YXMgYWRkZWQgdG8gbWFudWFsbHkgZW5hYmxlL2Rpc2FibGUgdGhlIFJUTCB0ZXh0IGRpcmVjdGlvbi4KCS0gVGhlIGF0dHJpYnV0ZSAiZGlyIiB3YXMgYWRkZWQgdG8gc3VwcG9ydCBjdXN0b20gdGV4dCBkaXJlY3Rpb24gb24gSFRNTCB0YWdzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOiBsdHIgLSBmb3IgTGVmdC1Uby1SaWdodCBhbmQgUlRMIGZvciBSaWdodC1Uby1MZWZ0LgoJLSBSQzQgNDBiaXQgZW5jcnlwdGlvbiB3YXMgYWRkZWQuIENoZWNrIHRoZSBTZXRQcm90ZWN0aW9uIG1ldGhvZC4KCS0gWzE4MTUyMTNdIEltcHJvdmVkIGltYWdlIHN1cHBvcnQgZm9yIEdJRiwgSlBFRywgUE5HIGZvcm1hdHMuCgktIFsxODAwMDk0XSBBdHRyaWJ1dGUgInZhbHVlIiB3YXMgYWRkZWQgdG8gb3JkZXJlZCBsaXN0IGl0ZW1zIDxsaT4uCgktIEltYWdlIGZ1bmN0aW9uIG5vdyBoYXMgYSBuZXcgImFsaWduIiBwYXJhbWV0ZXIgdGhhdCBpbmRpY2F0ZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcG9pbnRlciBuZXh0IHRvIGltYWdlIGluc2VydGlvbiBhbmQgcmVsYXRpdmUgdG8gaW1hZ2UgaGVpZ2h0LiBUaGUgdmFsdWUgY2FuIGJlOgoJCQlUOiB0b3AtcmlnaHQgZm9yIExUUiBvciB0b3AtbGVmdCBmb3IgUlRMCgkJCU06IG1pZGRsZS1yaWdodCBmb3IgTFRSIG9yIG1pZGRsZS1sZWZ0IGZvciBSVEwKCQkJQjogYm90dG9tLXJpZ2h0IGZvciBMVFIgb3IgYm90dG9tLWxlZnQgZm9yIFJUTAoJCQlOOiBuZXh0IGxpbmUKCS0gQXR0cmlidXRlICJhbGlnbiIgd2FzIGFkZGVkIHRvIDxpbWc+IGh0bWwgdGFnIHRvIHNldCB0aGUgYWJvdmUgaW1hZ2UgImFsaWduIiBwYXJhbWV0ZXIuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgkJCXRvcDogdG9wLXJpZ2h0IGZvciBMVFIgb3IgdG9wLWxlZnQgZm9yIFJUTAoJCQltaWRkbGU6IG1pZGRsZS1yaWdodCBmb3IgTFRSIG9yIG1pZGRsZS1sZWZ0IGZvciBSVEwKCQkJYm90dG9tOiBib3R0b20tcmlnaHQgZm9yIExUUiBvciBib3R0b20tbGVmdCBmb3IgUlRMCgktIFsxNzk4MTAzXSBuZXdsaW5lIHdhcyBhZGRlZCBhZnRlciA8L3VsPiwgPC9vbD4gYW5kIDwvcD4gdGFnZXMuCgktIFsxODE2MzkzXSBEb2N1bWVudGF0aW9uIHdhcyB1cGRhdGVkLgoJLSAnbG4nIHBhcmFtZXRlciB3YXMgZml4ZWQgb24gd3JpdGVIVE1MQ2VsbC4gTm93IGl0J3MgcG9zc2libGUgdG8gcHJpbnQgdHdvIG9yIG1vcmUgY29sdW1ucyBhY3Jvc3Mgc2V2ZXJhbCBwYWdlczsKCS0gVGhlIG1ldGhvZCBsYXN0UGFnZSgpIHdhcyBhZGRlZCB0byBtb3ZlIHRoZSBwb2ludGVyIG9uIHRoZSBsYXN0IHBhZ2U7CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCjEuNTMuMC5UQzAzNCAoMjAwNy0wNy0zMCkKCS0gZml4ZWQgaHRtbGVudGl0aWVzIGNvbnZlcnNpb24uCgktIE11bHRpQ2VsbCgpIGZ1bmN0aW9uIHJldHVybnMgdGhlIG51bWJlciBvZiBjZWxscy4KCjEuNTMuMC5UQzAzMyAoMjAwNy0wNy0zMCkKCS0gZml4ZWQgYnVnIDE3NjI1NTA6IGNhc2Ugc2Vuc2l0aXZlIGZvciBmb250IGZpbGVzCgktIE5PVEU6IGFsbCBmb250cyBmaWxlcyBuYW1lcyBtdXN0IGJlIGluIGxvd2VyY2FzZSEKCjEuNTMuMC5UQzAzMiAoMjAwNy0wNy0yNykKCS0gc2V0TGFzdEggbWV0aG9kIHdhcyBhZGRlZCB0byByZXNvbHZlIGJ1ZyAxNjg5MDcxLgoJLSBhbGwgZm9udHMgbmFtZXMgd2VyZSBjb252ZXJ0ZWQgaW4gbG93ZXJjYXNlIChidWcgMTcxMzAwNSkuCgktIGJ1ZyAxNzQwOTU0IHdhcyBmaXhlZC4KCS0ganVzdGlmaWNhdGlvbiB3YXMgYWRkZWQgYXMgQ2VsbCBvcHRpb24uCgoxLjUzLjAuVEMwMzEgKDIwMDctMDMtMjApCgktIFRvVW5pY29kZSBDTWFwIHdlcmUgYWRkZWQgb24gX3B1dHRydWV0eXBldW5pY29kZSBmdW5jdGlvbi4gTm93IHlvdSBtYXkgc2VhcmNoIGFuZCBjb3B5IHVuaWNvZGUgdGV4dC4KCjEuNTMuMC5UQzAzMCAoMjAwNy0wMy0wNikKCS0gZml4ZWQgYnVnIG9uIFBIUDQgdmVyc2lvbi4KCjEuNTMuMC5UQzAyOSAoMjAwNy0wMy0wNikKCS0gRGVqYVZ1IEZvbnRzIHdlcmUgYWRkZWQuCgoxLjUzLjAuVEMwMjggKDIwMDctMDMtMDMpCgktIE11bHRpQ2VsbCBmdW5jdGlvbiBzaWduYXR1cmUgd2VyZSBjaGFuZ2VkOiB0aGUgJGxuIHBhcmFtZXRlciB3ZXJlIGFkZGVkLiBDaGVjayBkb2N1bWVudGF0aW9uIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgoJLSBHcmVlayBsYW5ndWFnZSB3ZXJlIGFkZGVkIG9uIGV4YW1wbGUgc2VudGVuY2VzLgoJLSBzZXRQcmludEhlYWRlcigpIGFuZCBzZXRQcmludEZvb3RlcigpIGZ1bmN0aW9ucyB3ZXJlIGFkZGVkIHRvIGVuYWJsZSBvciBkaXNhYmxlIHBhZ2UgaGVhZGVyIGFuZCBmb290ZXIuCgoxLjUzLjAuVEMwMjcgKDIwMDYtMTItMTQpCgktICRhdHRyWydmYWNlJ10gYnVnIHdlcmUgZml4ZWQuCgktIEtfVENQREZfRVhURVJOQUxfQ09ORklHIGNvbnRyb2wgd2hlcmUgaW50cm9kdWNlZCBvbiAvY29uZmlnL3RjcGRmX2NvbmZpZy5waHAgdG8gdXNlIGV4dGVybmFsIGNvbmZpZ3VyYXRpb24gZmlsZXMuCgoxLjUzLjAuVEMwMjYgKDIwMDYtMTAtMjgpCgktIHdyaXRlSFRNTCBmdW5jdGlvbiBjYWxsIHdlcmUgZml4ZWQgb24gZXhhbXBsZXMuCgoxLjUzLjAuVEMwMjUgKDIwMDYtMTAtMjcpCgktIEJ1Z3MgaXRlbSAjMTQyMTI5MCB3ZXJlIGZpeGVkICgwRCAtIDBBIHN1YnN0aXR1dGlvbiBpbiBzb21lIGNoYXJhY3RlcnMpCgktIEJ1Z3MgaXRlbSAjMTU3MzE3NCB3ZXJlIGZpeGVkIChNdWx0aUNlbGwgZG9jdW1lbnRhdGlvbikKCjEuNTMuMC5UQzAyNCAoMjAwNi0wOS0yNikKCS0gZ2V0UGFnZUhlaWdodCgpIGZ1bmN0aW9uIHdlcmUgZml4ZWQgKGJ1ZyAxNTQzNDc2KS4KCS0gZml4ZWQgbWlzc2luZyBicmVha3Mgb24gY2xvc2VkSFRNTFRhZ0hhbmRsZXIgZnVuY3Rpb24gKGJ1ZyAxNTM1MjYzKS4KCS0gZml4ZWQgZXh0cmEgc3BhY2VzIG9uIFdyaXRlIGZ1bmN0aW9uIChidWcgMTUzNTI2MikuCgoxLjUzLjAuVEMwMjMgKDIwMDYtMDgtMDQpCgktIHBhdGhzIHRvIGJhcmNvZGUgZGlyZWN0b3J5IHdlcmUgZml4ZWQuCgktIGRvY3VtZW50YXRpb24gd2VyZSB1cGRhdGVkLgoKMS41My4wLlRDMDIyICgyMDA2LTA3LTE2KQoJLSBmaXhlZCBidWc6IFsgMTUxNjg1OCBdIFByb2JzIHdpdGggUEhQIGF1dG9sb2FkZXIgYW5kIGNsYXNzX2V4aXN0cygpCgoxLjUzLjAuVEMwMjEgKDIwMDYtMDctMDEpCgktIEhUTUwgYXR0cmlidXRlcyB3aXRoIHdoaXRlc3BhY2VzIGFyZSBub3cgc3VwcG9ydGVkICh0aGFua3MgdG8gTmVsc29uIEJlbml0ZXogZm9yIGhpcyBzdXBwb3J0KQoKMS41My4wLlRDMDIwICgyMDA2LTA2LTIzKQoJLSBjb2RlIGNsZWFudXAKCjEuNTMuMC5UQzAxOSAoMjAwNi0wNS0yMSkKCS0gZml4ZWQgPHN0cm9uZz4gYW5kIDxlbT4gY2xvc2luZyB0YWdzCgoxLjUzLjAuVEMwMTggKDIwMDYtMDUtMTgpCgktIGZpeGVkIGZvbnQgbmFtZXMgYnVnCgoxLjUzLjAuVEMwMTcgKDIwMDYtMDUtMTgpCgktIHRoZSBUVEYyVUZNIHV0aWxpdHkgdG8gY29udmVydCBUcnVlIFR5cGUgZm9udHMgZm9yIFRDUERGIHdlcmUgaW5jbHVkZWQgb24gZm9udHMgZm9sZGVyLgoJLSBuZXcgZnJlZSB1bmljb2RlIGZvbnRzIHdlcmUgaW5jbHVkZWQgb24gL2ZvbnRzL2ZyZWVmb250LgoJLSB0ZXN0X3VuaWNvZGUucGhwIGV4YW1wbGUgd2VyZSBleGVuZGVkLgoJLSBwYXJhbWV0ZXIgJGZpbGwgd2VyZSBhZGRlZCBvbiBXcml0ZSwgd3JpdGVIVE1MIGFuZCB3cml0ZUhUTUxDZWxsIGZ1bmN0aW9ucy4KCS0gZG9jdW1lbnRhdGlvbiB3ZXJlIHVwZGF0ZWQuCgoxLjUzLjAuVEMwMTYgKDIwMDYtMDMtMDkpCgktIGZpeGVkIGNsb3NpbmcgPHN0cm9uZz4gdGFnIG9uIGh0bWwgcGFyc2VyLgoKMS41My4wLlRDMDE2ICgyMDA1LTA4LTI4KQoJLSBmcGRmLnBocCBhbmQgdGNwZGYucGhwIGZpbGVzIHdlcmUgam9pbmVkIGluIG9uZSBzaW5nbGUgY2xhc3MgKHlvdSBjYW4gc3RpbGwgZXh0ZW5kIFRDUERGIHdpdGggeW91ciBvd24gY2xhc3MpLgoJLSBmaXhlZCBwcm9ibGVtIHdoZW4gbWJfaW50ZXJuYWxfZW5jb2RpbmcgaXMgc2V0LgoKMS41My4wLlRDMDE0ICgyMDA1LTA1LTI5KQoJLSBmaXhlZCBXcml0ZUhUTUxDZWxsIG5ldyBwYWdlIGlzc3VlLgoKMS41My4wLlRDMDEzICgyMDA1LTA1LTI5KQoJLSBmaXhlZCBXcml0ZUhUTUxDZWxsIGFjcm9zcyBwYWdlcy4KCjEuNTMuMC5UQzAxMiAoMjAwNS0wNS0yOSkKCS0gZm9udCBjb2xvciBhdHRyaWJ1dGUgYnVnIHdlcmUgZml4ZWQuCgoxLjUzLjAuVEMwMTEgKDIwMDUtMDMtMzEpCgktIFNldEZvbnQgZnVuY3Rpb24gd2VyZSBmaXhlZCAodGhhbmsgU2phYWsgTGF1d2VycyBmb3IgYnVnIG5vdGljZSkuCgoxLjUzLjAuVEMwMTAgKDIwMDUtMDMtMjIpCgktIHRoZSBodG1sIGZ1bmN0aW9ucyB3ZXJlIGltcHJvdmVkICh0aGFua3MgdG8gTWFuZnJlZCBWZXJ2dWVydCBmb3IgYnVnIHJlcG9ydGluZykuCgoxLjUzLjAuVEMwMDkgKDIwMDUtMDMtMTkpCgktIGEgd3JvbmcgcmVmZXJlbmNlIHRvIGNvbnZlcnRDb2xvckhleFRvRGVjIHdlcmUgZml4ZWQuCgoxLjUzLjAuVEMwMDggKDIwMDUtMDItMDcpCgktIHJlbW92ZWQgc29tZSBleHRyYSBieXRlcyBmcm9tIFBIUCBmaWxlcy4KCjEuNTMuMC5UQzAwNyAoMjAwNS0wMS0wOCkKCS0gZmlsbCBhdHRyaWJ1dGUgd2VyZSByZW1vdmVkIGZyb20gd3JpdGVIVE1MQ2VsbCBtZXRob2QuCgoxLjUzLjAuVEMwMDYgKDIwMDUtMDEtMDgpCgktIHRoZSBkb2N1bWVudGF0aW9uIHdlcmUgdXBkYXRlZC4KCjEuNTMuMC5UQzAwNSAoMjAwNS0wMS0wNSkKCS0gU3RldmVuIFdpdHRlbnMncyB1bmljb2RlIG1ldGhvZHMgd2VyZSByZW1vdmVkLgoJLSBBbGwgdW5pY29kZSBtZXRob2RzIHdlcmUgcmV3cml0dGVuIGZyb20gc2NyYXRjaC4KCS0gVENQREYgaXMgbm93IGxpY2Vuc2VkIGFzIExHUEwuCgoxLjUzLjAuVEMwMDQgKDIwMDUtMDEtMDQpCgktIHRoaXMgY2hhbmdlbG9nIHdlcmUgYWRkZWQuCgktIHJlbW92ZWQgY29tbWVyY2lhbCBmb250cyBmb3IgbGljZW5zaW5nIGlzc3VlLgoJLSBCaXRzdHJlYW0gVmVyYSBGb250cyB3ZXJlIGFkZGVkIChodHRwOi8vd3d3LmJpdHN0cmVhbS5jb20vZm9udF9yZW5kZXJpbmcvcHJvZHVjdHMvZGV2X2ZvbnRzL3ZlcmEuaHRtbCkuCgktIE5vdyB0aGUgQWRkRm9udCBhbmQgU2V0Rm9udCBmdW5jdGlvbnMgcmV0dXJucyB0aGUgYmFzaWMgZm9udCBpZiB0aGUgc3R5bGVkIHZlcnNpb24gZG8gbm90IGV4aXN0LgoKRU9GIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/composer.json</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ewoJIm5hbWUiOiAidGVjbmljay5jb20vdGNwZGYiLAoJInZlcnNpb24iOiAiNi4wLjA3MSIsCgkiaG9tZXBhZ2UiOiAiaHR0cDovL3d3dy50Y3BkZi5vcmcvIiwKCSJ0eXBlIjogImxpYnJhcnkiLAoJImRlc2NyaXB0aW9uIjogIlRDUERGIGlzIGEgUEhQIGNsYXNzIGZvciBnZW5lcmF0aW5nIFBERiBkb2N1bWVudHMuIiwKCSJrZXl3b3JkcyI6IFsiUERGIiwidGNwZGYiLCJQREZEMzIwMDAtMjAwOCIsInFyY29kZSIsImRhdGFtYXRyaXgiLCJwZGY0MTciLCJiYXJjb2RlcyJdLAoJImxpY2Vuc2UiOiAiTEdQTHYzIiwKCSJhdXRob3JzIjogWwoJewoJCSJuYW1lIjogIk5pY29sYSBBc3VuaSIsCgkJImVtYWlsIjogImluZm9AdGVjbmljay5jb20iLAoJCSJob21lcGFnZSI6ICJodHRwOi8vbmljb2xhYXN1bmkudGVjbmljay5jb20iCgl9CgldLAoJInJlcXVpcmUiOiB7CgkJInBocCI6ICI+PTUuMy4wIgoJfSwKCSJhdXRvbG9hZCI6IHsKCQkiY2xhc3NtYXAiOiBbCgkJImZvbnRzIiwKCQkiY29uZmlnIiwKCQkiaW5jbHVkZSIsCgkJInRjcGRmLnBocCIsCgkJInRjcGRmX3BhcnNlci5waHAiLAoJCSJ0Y3BkZl9pbXBvcnQucGhwIiwKCQkidGNwZGZfYmFyY29kZXNfMWQucGhwIiwKCQkidGNwZGZfYmFyY29kZXNfMmQucGhwIiwKCQkiaW5jbHVkZS90Y3BkZl9jb2xvcnMucGhwIiwKCQkiaW5jbHVkZS90Y3BkZl9maWx0ZXJzLnBocCIsCgkJImluY2x1ZGUvdGNwZGZfZm9udF9kYXRhLnBocCIsCgkJImluY2x1ZGUvdGNwZGZfZm9udHMucGhwIiwKCQkiaW5jbHVkZS90Y3BkZl9pbWFnZXMucGhwIiwKCQkiaW5jbHVkZS90Y3BkZl9zdGF0aWMucGhwIiwKCQkiaW5jbHVkZS9iYXJjb2Rlcy9kYXRhbWF0cml4LnBocCIsCgkJImluY2x1ZGUvYmFyY29kZXMvcGRmNDE3LnBocCIsCgkJImluY2x1ZGUvYmFyY29kZXMvcXJjb2RlLnBocCIKCQldCgl9Cn0K]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/config/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/config/tcpdf_config.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfY29uZmlnLnBocAovLyBCZWdpbiAgICAgICA6IDIwMDQtMDYtMTEKLy8gTGFzdCBVcGRhdGUgOiAyMDE0LTAxLTI1Ci8vCi8vIERlc2NyaXB0aW9uIDogQ29uZmlndXJhdGlvbiBmaWxlIGZvciBUQ1BERi4KLy8gQXV0aG9yICAgICAgOiBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQgLSB3d3cudGVjbmljay5jb20gLSBpbmZvQHRlY25pY2suY29tCi8vIExpY2Vuc2UgICAgIDogR05VLUxHUEwgdjMgKGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3B5cmlnaHQgKEMpIDIwMDQtMjAxNCAgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBDb25maWd1cmF0aW9uIGZpbGUgZm9yIFRDUERGLgogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAdmVyc2lvbiA0LjkuMDA1CiAqIEBzaW5jZSAyMDA0LTEwLTI3CiAqLwoKLy8gSU1QT1JUQU5UOgovLyBJZiB5b3UgZGVmaW5lIHRoZSBjb25zdGFudCBLX1RDUERGX0VYVEVSTkFMX0NPTkZJRywgYWxsIHRoZSBmb2xsb3dpbmcgc2V0dGluZ3Mgd2lsbCBiZSBpZ25vcmVkLgovLyBJZiB5b3UgdXNlIHRoZSB0Y3BkZl9hdXRvY29uZmlnLnBocCwgdGhlbiB5b3UgY2FuIG92ZXJ3cml0ZSBzb21lIHZhbHVlcyBoZXJlLgoKCi8qKgogKiBJbnN0YWxsYXRpb24gcGF0aCAoL3Zhci93d3cvdGNwZGYvKS4KICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQgYnV0IHlvdSBjYW4gYWxzbyBzZXQgaXQgYXMgYSBmaXhlZCBzdHJpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZXMuCiAqLwovL2RlZmluZSAoJ0tfUEFUSF9NQUlOJywgJycpOwoKLyoqCiAqIFVSTCBwYXRoIHRvIHRjcGRmIGluc3RhbGxhdGlvbiBmb2xkZXIgKGh0dHA6Ly9sb2NhbGhvc3QvdGNwZGYvKS4KICogQnkgZGVmYXVsdCBpdCBpcyBhdXRvbWF0aWNhbGx5IHNldCBidXQgeW91IGNhbiBhbHNvIHNldCBpdCBhcyBhIGZpeGVkIHN0cmluZyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlcy4KICovCi8vZGVmaW5lICgnS19QQVRIX1VSTCcsICcnKTsKCi8qKgogKiBQYXRoIGZvciBQREYgZm9udHMuCiAqIEJ5IGRlZmF1bHQgaXQgaXMgYXV0b21hdGljYWxseSBzZXQgYnV0IHlvdSBjYW4gYWxzbyBzZXQgaXQgYXMgYSBmaXhlZCBzdHJpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZXMuCiAqLwovL2RlZmluZSAoJ0tfUEFUSF9GT05UUycsIEtfUEFUSF9NQUlOLidmb250cy8nKTsKCi8qKgogKiBEZWZhdWx0IGltYWdlcyBkaXJlY3RvcnkuCiAqIEJ5IGRlZmF1bHQgaXQgaXMgYXV0b21hdGljYWxseSBzZXQgYnV0IHlvdSBjYW4gYWxzbyBzZXQgaXQgYXMgYSBmaXhlZCBzdHJpbmcgdG8gaW1wcm92ZSBwZXJmb3JtYW5jZXMuCiAqLwovL2RlZmluZSAoJ0tfUEFUSF9JTUFHRVMnLCAnJyk7CgovKioKICogRGVhZnVsdCBpbWFnZSBsb2dvIHVzZWQgYmUgdGhlIGRlZmF1bHQgSGVhZGVyKCkgbWV0aG9kLgogKiBQbGVhc2Ugc2V0IGhlcmUgeW91ciBvd24gbG9nbyBvciBhbiBlbXB0eSBzdHJpbmcgdG8gZGlzYWJsZSBpdC4KICovCi8vZGVmaW5lICgnUERGX0hFQURFUl9MT0dPJywgJycpOwoKLyoqCiAqIEhlYWRlciBsb2dvIGltYWdlIHdpZHRoIGluIHVzZXIgdW5pdHMuCiAqLwovL2RlZmluZSAoJ1BERl9IRUFERVJfTE9HT19XSURUSCcsIDApOwoKLyoqCiAqIENhY2hlIGRpcmVjdG9yeSBmb3IgdGVtcG9yYXJ5IGZpbGVzIChmdWxsIHBhdGgpLgogKi8KLy9kZWZpbmUgKCdLX1BBVEhfQ0FDSEUnLCAnL3RtcC8nKTsKCi8qKgogKiBHZW5lcmljIG5hbWUgZm9yIGEgYmxhbmsgaW1hZ2UuCiAqLwpkZWZpbmUgKCdLX0JMQU5LX0lNQUdFJywgJ19ibGFuay5wbmcnKTsKCi8qKgogKiBQYWdlIGZvcm1hdC4KICovCmRlZmluZSAoJ1BERl9QQUdFX0ZPUk1BVCcsICdBNCcpOwoKLyoqCiAqIFBhZ2Ugb3JpZW50YXRpb24gKFA9cG9ydHJhaXQsIEw9bGFuZHNjYXBlKS4KICovCmRlZmluZSAoJ1BERl9QQUdFX09SSUVOVEFUSU9OJywgJ1AnKTsKCi8qKgogKiBEb2N1bWVudCBjcmVhdG9yLgogKi8KZGVmaW5lICgnUERGX0NSRUFUT1InLCAnVENQREYnKTsKCi8qKgogKiBEb2N1bWVudCBhdXRob3IuCiAqLwpkZWZpbmUgKCdQREZfQVVUSE9SJywgJ1RDUERGJyk7CgovKioKICogSGVhZGVyIHRpdGxlLgogKi8KZGVmaW5lICgnUERGX0hFQURFUl9USVRMRScsICdUQ1BERiBFeGFtcGxlJyk7CgovKioKICogSGVhZGVyIGRlc2NyaXB0aW9uIHN0cmluZy4KICovCmRlZmluZSAoJ1BERl9IRUFERVJfU1RSSU5HJywgImJ5IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tXG53d3cudGNwZGYub3JnIik7CgovKioKICogRG9jdW1lbnQgdW5pdCBvZiBtZWFzdXJlIFtwdD1wb2ludCwgbW09bWlsbGltZXRlciwgY209Y2VudGltZXRlciwgaW49aW5jaF0uCiAqLwpkZWZpbmUgKCdQREZfVU5JVCcsICdtbScpOwoKLyoqCiAqIEhlYWRlciBtYXJnaW4uCiAqLwpkZWZpbmUgKCdQREZfTUFSR0lOX0hFQURFUicsIDUpOwoKLyoqCiAqIEZvb3RlciBtYXJnaW4uCiAqLwpkZWZpbmUgKCdQREZfTUFSR0lOX0ZPT1RFUicsIDEwKTsKCi8qKgogKiBUb3AgbWFyZ2luLgogKi8KZGVmaW5lICgnUERGX01BUkdJTl9UT1AnLCAyNyk7CgovKioKICogQm90dG9tIG1hcmdpbi4KICovCmRlZmluZSAoJ1BERl9NQVJHSU5fQk9UVE9NJywgMjUpOwoKLyoqCiAqIExlZnQgbWFyZ2luLgogKi8KZGVmaW5lICgnUERGX01BUkdJTl9MRUZUJywgMTUpOwoKLyoqCiAqIFJpZ2h0IG1hcmdpbi4KICovCmRlZmluZSAoJ1BERl9NQVJHSU5fUklHSFQnLCAxNSk7CgovKioKICogRGVmYXVsdCBtYWluIGZvbnQgbmFtZS4KICovCmRlZmluZSAoJ1BERl9GT05UX05BTUVfTUFJTicsICdoZWx2ZXRpY2EnKTsKCi8qKgogKiBEZWZhdWx0IG1haW4gZm9udCBzaXplLgogKi8KZGVmaW5lICgnUERGX0ZPTlRfU0laRV9NQUlOJywgMTApOwoKLyoqCiAqIERlZmF1bHQgZGF0YSBmb250IG5hbWUuCiAqLwpkZWZpbmUgKCdQREZfRk9OVF9OQU1FX0RBVEEnLCAnaGVsdmV0aWNhJyk7CgovKioKICogRGVmYXVsdCBkYXRhIGZvbnQgc2l6ZS4KICovCmRlZmluZSAoJ1BERl9GT05UX1NJWkVfREFUQScsIDgpOwoKLyoqCiAqIERlZmF1bHQgbW9ub3NwYWNlZCBmb250IG5hbWUuCiAqLwpkZWZpbmUgKCdQREZfRk9OVF9NT05PU1BBQ0VEJywgJ2NvdXJpZXInKTsKCi8qKgogKiBSYXRpbyB1c2VkIHRvIGFkanVzdCB0aGUgY29udmVyc2lvbiBvZiBwaXhlbHMgdG8gdXNlciB1bml0cy4KICovCmRlZmluZSAoJ1BERl9JTUFHRV9TQ0FMRV9SQVRJTycsIDEuMjUpOwoKLyoqCiAqIE1hZ25pZmljYXRpb24gZmFjdG9yIGZvciB0aXRsZXMuCiAqLwpkZWZpbmUoJ0hFQURfTUFHTklGSUNBVElPTicsIDEuMSk7CgovKioKICogSGVpZ2h0IG9mIGNlbGwgcmVzcGVjdCBmb250IGhlaWdodC4KICovCmRlZmluZSgnS19DRUxMX0hFSUdIVF9SQVRJTycsIDEuMjUpOwoKLyoqCiAqIFRpdGxlIG1hZ25pZmljYXRpb24gcmVzcGVjdCBtYWluIGZvbnQgc2l6ZS4KICovCmRlZmluZSgnS19USVRMRV9NQUdOSUZJQ0FUSU9OJywgMS4zKTsKCi8qKgogKiBSZWR1Y3Rpb24gZmFjdG9yIGZvciBzbWFsbCBmb250LgogKi8KZGVmaW5lKCdLX1NNQUxMX1JBVElPJywgMi8zKTsKCi8qKgogKiBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgdGhlIHNwZWNpYWwgcHJvY2VkdXJlIHVzZWQgdG8gYXZvaWQgdGhlIG92ZXJsYXBwaW5kIG9mIHN5bWJvbHMgb24gVGhhaSBsYW5ndWFnZS4KICovCmRlZmluZSgnS19USEFJX1RPUENIQVJTJywgdHJ1ZSk7CgovKioKICogSWYgdHJ1ZSBhbGxvd3MgdG8gY2FsbCBUQ1BERiBtZXRob2RzIHVzaW5nIEhUTUwgc3ludGF4CiAqIElNUE9SVEFOVDogRm9yIHNlY3VyaXR5IHJlYXNvbiwgZGlzYWJsZSB0aGlzIGZlYXR1cmUgaWYgeW91IGFyZSBwcmludGluZyB1c2VyIEhUTUwgY29udGVudC4KICovCmRlZmluZSgnS19UQ1BERl9DQUxMU19JTl9IVE1MJywgdHJ1ZSk7CgovKioKICogSWYgdHJ1ZSBhbmQgUEhQIHZlcnNpb24gaXMgZ3JlYXRlciB0aGFuIDUsIHRoZW4gdGhlIEVycm9yKCkgbWV0aG9kIHRocm93IG5ldyBleGNlcHRpb24gaW5zdGVhZCBvZiB0ZXJtaW5hdGluZyB0aGUgZXhlY3V0aW9uLgogKi8KZGVmaW5lKCdLX1RDUERGX1RIUk9XX0VYQ0VQVElPTl9FUlJPUicsIGZhbHNlKTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/barcodes/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/barcodes/datamatrix.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogZGF0YW1hdHJpeC5waHAKLy8gVmVyc2lvbiAgICAgOiAxLjAuMDA2Ci8vIEJlZ2luICAgICAgIDogMjAxMC0wNi0wNwovLyBMYXN0IFVwZGF0ZSA6IDIwMTQtMDQtMjQKLy8gQXV0aG9yICAgICAgOiBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQgLSB3d3cudGVjbmljay5jb20gLSBpbmZvQHRlY25pY2suY29tCi8vIExpY2Vuc2UgICAgIDogR05VLUxHUEwgdjMgKGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3B5cmlnaHQgKEMpIDIwMTAtMjAxNCAgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERFU0NSSVBUSU9OIDoKLy8KLy8gQ2xhc3MgdG8gY3JlYXRlIERhdGFNYXRyaXggRUNDIDIwMCBiYXJjb2RlIGFycmF5cyBmb3IgVENQREYgY2xhc3MuCi8vIERhdGFNYXRyaXggKElTTy9JRUMgMTYwMjI6MjAwNikgaXMgYSAyLWRpbWVuc2lvbmFsIGJhciBjb2RlLgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgoqIEBmaWxlCiogQ2xhc3MgdG8gY3JlYXRlIERhdGFNYXRyaXggRUNDIDIwMCBiYXJjb2RlIGFycmF5cyBmb3IgVENQREYgY2xhc3MuCiogRGF0YU1hdHJpeCAoSVNPL0lFQyAxNjAyMjoyMDA2KSBpcyBhIDItZGltZW5zaW9uYWwgYmFyIGNvZGUuCioKKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgoqIEBhdXRob3IgTmljb2xhIEFzdW5pCiogQHZlcnNpb24gMS4wLjAwNgoqLwoKLy8gY3VzdG9tIGRlZmluaXRpb25zCmlmICghZGVmaW5lZCgnREFUQU1BVFJJWERFRlMnKSkgewoKCS8qKgoJICogSW5kaWNhdGUgdGhhdCBkZWZpbml0aW9ucyBmb3IgdGhpcyBjbGFzcyBhcmUgc2V0CgkgKi8KCWRlZmluZSgnREFUQU1BVFJJWERFRlMnLCB0cnVlKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKfSAvLyBlbmQgb2YgY3VzdG9tIGRlZmluaXRpb25zCgovLyAjKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMKCgovKioKKiBBU0NJSSBlbmNvZGluZzogQVNDSUkgY2hhcmFjdGVyIDAgdG8gMTI3ICgxIGJ5dGUgcGVyIENXKQoqLwpkZWZpbmUoJ0VOQ19BU0NJSScsIDApOwoKLyoqCiogQzQwIGVuY29kaW5nOiBVcHBlci1jYXNlIGFscGhhbnVtZXJpYyAoMy8yIGJ5dGVzIHBlciBDVykKKi8KZGVmaW5lKCdFTkNfQzQwJywgMSk7CgovKioKKiBURVhUIGVuY29kaW5nOiBMb3dlci1jYXNlIGFscGhhbnVtZXJpYyAoMy8yIGJ5dGVzIHBlciBDVykKKi8KZGVmaW5lKCdFTkNfVFhUJywgMik7CgovKioKKiBYMTIgZW5jb2Rpbmc6IEFOU0kgWDEyICgzLzIgYnl0ZSBwZXIgQ1cpCiovCmRlZmluZSgnRU5DX1gxMicsIDMpOwoKLyoqCiogRURJRkFDVCBlbmNvZGluZzogQVNDSUkgY2hhcmFjdGVyIDMyIHRvIDk0ICg0LzMgYnl0ZXMgcGVyIENXKQoqLwpkZWZpbmUoJ0VOQ19FREYnLCA0KTsKCi8qKgoqIEJBU0UgMjU2IGVuY29kaW5nOiBBU0NJSSBjaGFyYWN0ZXIgMCB0byAyNTUgKDEgYnl0ZSBwZXIgQ1cpCiovCmRlZmluZSgnRU5DX0JBU0UyNTYnLCA1KTsKCi8qKgoqIEFTQ0lJIGV4dGVuZGVkIGVuY29kaW5nOiBBU0NJSSBjaGFyYWN0ZXIgMTI4IHRvIDI1NSAoMS8yIGJ5dGUgcGVyIENXKQoqLwpkZWZpbmUoJ0VOQ19BU0NJSV9FWFQnLCA2KTsKCi8qKgoqIEFTQ0lJIG51bWJlciBlbmNvZGluZzogQVNDSUkgZGlnaXRzICgyIGJ5dGVzIHBlciBDVykKKi8KZGVmaW5lKCdFTkNfQVNDSUlfTlVNJywgNyk7CgovKioKKiBAY2xhc3MgRGF0YW1hdHJpeAoqIENsYXNzIHRvIGNyZWF0ZSBEYXRhTWF0cml4IEVDQyAyMDAgYmFyY29kZSBhcnJheXMgZm9yIFRDUERGIGNsYXNzLgoqIERhdGFNYXRyaXggKElTTy9JRUMgMTYwMjI6MjAwNikgaXMgYSAyLWRpbWVuc2lvbmFsIGJhciBjb2RlLgoqCiogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoqIEB2ZXJzaW9uIDEuMC4wMDQKKi8KY2xhc3MgRGF0YW1hdHJpeCB7CgoJLyoqCgkgKiBCYXJjb2RlIGFycmF5IHRvIGJlIHJldHVybmVkIHdoaWNoIGlzIHJlYWRhYmxlIGJ5IFRDUERGLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOwoKCS8qKgoJICogU3RvcmUgbGFzdCB1c2VkIGVuY29kaW5nIGZvciBkYXRhIGNvZGV3b3Jkcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsYXN0X2VuYyA9IEVOQ19BU0NJSTsKCgkvKioKCSAqIFRhYmxlIG9mIERhdGEgTWF0cml4IEVDQyAyMDAgU3ltYm9sIEF0dHJpYnV0ZXM6PHVsPgoJICogPGxpPnRvdGFsIG1hdHJpeCByb3dzIChpbmNsdWRpbmcgZmluZGVyIHBhdHRlcm4pPC9saT4KCSAqIDxsaT50b3RhbCBtYXRyaXggY29scyAoaW5jbHVkaW5nIGZpbmRlciBwYXR0ZXJuKTwvbGk+CgkgKiA8bGk+dG90YWwgbWF0cml4IHJvd3MgKHdpdGhvdXQgZmluZGVyIHBhdHRlcm4pPC9saT4KCSAqIDxsaT50b3RhbCBtYXRyaXggY29scyAod2l0aG91dCBmaW5kZXIgcGF0dGVybik8L2xpPgoJICogPGxpPnJlZ2lvbiBkYXRhIHJvd3MgKHdpdGggZmluZGVyIHBhdHRlcm4pPC9saT4KCSAqIDxsaT5yZWdpb24gZGF0YSBjb2wgKHdpdGggZmluZGVyIHBhdHRlcm4pPC9saT4KCSAqIDxsaT5yZWdpb24gZGF0YSByb3dzICh3aXRob3V0IGZpbmRlciBwYXR0ZXJuKTwvbGk+CgkgKiA8bGk+cmVnaW9uIGRhdGEgY29sICh3aXRob3V0IGZpbmRlciBwYXR0ZXJuKTwvbGk+CgkgKiA8bGk+aG9yaXpvbnRhbCByZWdpb25zPC9saT4KCSAqIDxsaT52ZXJ0aWNhbCByZWdpb25zPC9saT4KCSAqIDxsaT5yZWdpb25zPC9saT4KCSAqIDxsaT5kYXRhIGNvZGV3b3JkczwvbGk+CgkgKiA8bGk+ZXJyb3IgY29kZXdvcmRzPC9saT4KCSAqIDxsaT5ibG9ja3M8L2xpPgoJICogPGxpPmRhdGEgY29kZXdvcmRzIHBlciBibG9jazwvbGk+CgkgKiA8bGk+ZXJyb3IgY29kZXdvcmRzIHBlciBibG9jazwvbGk+CgkgKiA8L3VsPgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHN5bWJhdHRyID0gYXJyYXkoCgkJLy8gc3F1YXJlIGZvcm0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJYXJyYXkoMHgwMGEsMHgwMGEsMHgwMDgsMHgwMDgsMHgwMGEsMHgwMGEsMHgwMDgsMHgwMDgsMHgwMDEsMHgwMDEsMHgwMDEsMHgwMDMsMHgwMDUsMHgwMDEsMHgwMDMsMHgwMDUpLCAvLyAxMHgxMAoJCWFycmF5KDB4MDBjLDB4MDBjLDB4MDBhLDB4MDBhLDB4MDBjLDB4MDBjLDB4MDBhLDB4MDBhLDB4MDAxLDB4MDAxLDB4MDAxLDB4MDA1LDB4MDA3LDB4MDAxLDB4MDA1LDB4MDA3KSwgLy8gMTJ4MTIKCQlhcnJheSgweDAwZSwweDAwZSwweDAwYywweDAwYywweDAwZSwweDAwZSwweDAwYywweDAwYywweDAwMSwweDAwMSwweDAwMSwweDAwOCwweDAwYSwweDAwMSwweDAwOCwweDAwYSksIC8vIDE0eDE0CgkJYXJyYXkoMHgwMTAsMHgwMTAsMHgwMGUsMHgwMGUsMHgwMTAsMHgwMTAsMHgwMGUsMHgwMGUsMHgwMDEsMHgwMDEsMHgwMDEsMHgwMGMsMHgwMGMsMHgwMDEsMHgwMGMsMHgwMGMpLCAvLyAxNngxNgoJCWFycmF5KDB4MDEyLDB4MDEyLDB4MDEwLDB4MDEwLDB4MDEyLDB4MDEyLDB4MDEwLDB4MDEwLDB4MDAxLDB4MDAxLDB4MDAxLDB4MDEyLDB4MDBlLDB4MDAxLDB4MDEyLDB4MDBlKSwgLy8gMTh4MTgKCQlhcnJheSgweDAxNCwweDAxNCwweDAxMiwweDAxMiwweDAxNCwweDAxNCwweDAxMiwweDAxMiwweDAwMSwweDAwMSwweDAwMSwweDAxNiwweDAxMiwweDAwMSwweDAxNiwweDAxMiksIC8vIDIweDIwCgkJYXJyYXkoMHgwMTYsMHgwMTYsMHgwMTQsMHgwMTQsMHgwMTYsMHgwMTYsMHgwMTQsMHgwMTQsMHgwMDEsMHgwMDEsMHgwMDEsMHgwMWUsMHgwMTQsMHgwMDEsMHgwMWUsMHgwMTQpLCAvLyAyMngyMgoJCWFycmF5KDB4MDE4LDB4MDE4LDB4MDE2LDB4MDE2LDB4MDE4LDB4MDE4LDB4MDE2LDB4MDE2LDB4MDAxLDB4MDAxLDB4MDAxLDB4MDI0LDB4MDE4LDB4MDAxLDB4MDI0LDB4MDE4KSwgLy8gMjR4MjQKCQlhcnJheSgweDAxYSwweDAxYSwweDAxOCwweDAxOCwweDAxYSwweDAxYSwweDAxOCwweDAxOCwweDAwMSwweDAwMSwweDAwMSwweDAyYywweDAxYywweDAwMSwweDAyYywweDAxYyksIC8vIDI2eDI2CgkJYXJyYXkoMHgwMjAsMHgwMjAsMHgwMWMsMHgwMWMsMHgwMTAsMHgwMTAsMHgwMGUsMHgwMGUsMHgwMDIsMHgwMDIsMHgwMDQsMHgwM2UsMHgwMjQsMHgwMDEsMHgwM2UsMHgwMjQpLCAvLyAzMngzMgoJCWFycmF5KDB4MDI0LDB4MDI0LDB4MDIwLDB4MDIwLDB4MDEyLDB4MDEyLDB4MDEwLDB4MDEwLDB4MDAyLDB4MDAyLDB4MDA0LDB4MDU2LDB4MDJhLDB4MDAxLDB4MDU2LDB4MDJhKSwgLy8gMzZ4MzYKCQlhcnJheSgweDAyOCwweDAyOCwweDAyNCwweDAyNCwweDAxNCwweDAxNCwweDAxMiwweDAxMiwweDAwMiwweDAwMiwweDAwNCwweDA3MiwweDAzMCwweDAwMSwweDA3MiwweDAzMCksIC8vIDQweDQwCgkJYXJyYXkoMHgwMmMsMHgwMmMsMHgwMjgsMHgwMjgsMHgwMTYsMHgwMTYsMHgwMTQsMHgwMTQsMHgwMDIsMHgwMDIsMHgwMDQsMHgwOTAsMHgwMzgsMHgwMDEsMHgwOTAsMHgwMzgpLCAvLyA0NHg0NAoJCWFycmF5KDB4MDMwLDB4MDMwLDB4MDJjLDB4MDJjLDB4MDE4LDB4MDE4LDB4MDE2LDB4MDE2LDB4MDAyLDB4MDAyLDB4MDA0LDB4MGFlLDB4MDQ0LDB4MDAxLDB4MGFlLDB4MDQ0KSwgLy8gNDh4NDgKCQlhcnJheSgweDAzNCwweDAzNCwweDAzMCwweDAzMCwweDAxYSwweDAxYSwweDAxOCwweDAxOCwweDAwMiwweDAwMiwweDAwNCwweDBjYywweDA1NCwweDAwMiwweDA2NiwweDAyYSksIC8vIDUyeDUyCgkJYXJyYXkoMHgwNDAsMHgwNDAsMHgwMzgsMHgwMzgsMHgwMTAsMHgwMTAsMHgwMGUsMHgwMGUsMHgwMDQsMHgwMDQsMHgwMTAsMHgxMTgsMHgwNzAsMHgwMDIsMHgwOGMsMHgwMzgpLCAvLyA2NHg2NAoJCWFycmF5KDB4MDQ4LDB4MDQ4LDB4MDQwLDB4MDQwLDB4MDEyLDB4MDEyLDB4MDEwLDB4MDEwLDB4MDA0LDB4MDA0LDB4MDEwLDB4MTcwLDB4MDkwLDB4MDA0LDB4MDVjLDB4MDI0KSwgLy8gNzJ4NzIKCQlhcnJheSgweDA1MCwweDA1MCwweDA0OCwweDA0OCwweDAxNCwweDAxNCwweDAxMiwweDAxMiwweDAwNCwweDAwNCwweDAxMCwweDFjOCwweDBjMCwweDAwNCwweDA3MiwweDAzMCksIC8vIDgweDgwCgkJYXJyYXkoMHgwNTgsMHgwNTgsMHgwNTAsMHgwNTAsMHgwMTYsMHgwMTYsMHgwMTQsMHgwMTQsMHgwMDQsMHgwMDQsMHgwMTAsMHgyNDAsMHgwZTAsMHgwMDQsMHgwOTAsMHgwMzgpLCAvLyA4OHg4OAoJCWFycmF5KDB4MDYwLDB4MDYwLDB4MDU4LDB4MDU4LDB4MDE4LDB4MDE4LDB4MDE2LDB4MDE2LDB4MDA0LDB4MDA0LDB4MDEwLDB4MmI4LDB4MTEwLDB4MDA0LDB4MGFlLDB4MDQ0KSwgLy8gOTZ4OTYKCQlhcnJheSgweDA2OCwweDA2OCwweDA2MCwweDA2MCwweDAxYSwweDAxYSwweDAxOCwweDAxOCwweDAwNCwweDAwNCwweDAxMCwweDMzMCwweDE1MCwweDAwNiwweDA4OCwweDAzOCksIC8vIDEwNHgxMDQKCQlhcnJheSgweDA3OCwweDA3OCwweDA2YywweDA2YywweDAxNCwweDAxNCwweDAxMiwweDAxMiwweDAwNiwweDAwNiwweDAyNCwweDQxYSwweDE5OCwweDAwNiwweDBhZiwweDA0NCksIC8vIDEyMHgxMjAKCQlhcnJheSgweDA4NCwweDA4NCwweDA3OCwweDA3OCwweDAxNiwweDAxNiwweDAxNCwweDAxNCwweDAwNiwweDAwNiwweDAyNCwweDUxOCwweDFmMCwweDAwOCwweDBhMywweDAzZSksIC8vIDEzMngxMzIKCQlhcnJheSgweDA5MCwweDA5MCwweDA4NCwweDA4NCwweDAxOCwweDAxOCwweDAxNiwweDAxNiwweDAwNiwweDAwNiwweDAyNCwweDYxNiwweDI2YywweDAwYSwweDA5YywweDAzZSksIC8vIDE0NHgxNDQKCQkvLyByZWN0YW5ndWxhciBmb3JtIChjdXJyZW50bHkgdW51c2VkKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQlhcnJheSgweDAwOCwweDAxMiwweDAwNiwweDAxMCwweDAwOCwweDAxMiwweDAwNiwweDAxMCwweDAwMSwweDAwMSwweDAwMSwweDAwNSwweDAwNywweDAwMSwweDAwNSwweDAwNyksIC8vIDh4MTgKCQlhcnJheSgweDAwOCwweDAyMCwweDAwNiwweDAxYywweDAwOCwweDAxMCwweDAwNiwweDAwZSwweDAwMSwweDAwMiwweDAwMiwweDAwYSwweDAwYiwweDAwMSwweDAwYSwweDAwYiksIC8vIDh4MzIKCQlhcnJheSgweDAwYywweDAxYSwweDAwYSwweDAxOCwweDAwYywweDAxYSwweDAwYSwweDAxOCwweDAwMSwweDAwMSwweDAwMSwweDAxMCwweDAwZSwweDAwMSwweDAxMCwweDAwZSksIC8vIDEyeDI2CgkJYXJyYXkoMHgwMGMsMHgwMjQsMHgwMGEsMHgwMjAsMHgwMGMsMHgwMTIsMHgwMGEsMHgwMTAsMHgwMDEsMHgwMDIsMHgwMDIsMHgwMGMsMHgwMTIsMHgwMDEsMHgwMGMsMHgwMTIpLCAvLyAxMngzNgoJCWFycmF5KDB4MDEwLDB4MDI0LDB4MDBlLDB4MDIwLDB4MDEwLDB4MDEyLDB4MDBlLDB4MDEwLDB4MDAxLDB4MDAyLDB4MDAyLDB4MDIwLDB4MDE4LDB4MDAxLDB4MDIwLDB4MDE4KSwgLy8gMTZ4MzYKCQlhcnJheSgweDAxMCwweDAzMCwweDAwZSwweDAyYywweDAxMCwweDAxOCwweDAwZSwweDAxNiwweDAwMSwweDAwMiwweDAwMiwweDAzMSwweDAxYywweDAwMSwweDAzMSwweDAxYykgIC8vIDE2eDQ4CgkpOwoKCS8qKgoJICogTWFwIGVuY29kYXRpb24gbW9kZXMgd2hpdCBjaGFyYWN0ZXIgc2V0cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRjaHNldF9pZCA9IGFycmF5KEVOQ19DNDAgPT4gJ0M0MCcsIEVOQ19UWFQgPT4gJ1RYVCcsIEVOQ19YMTIgPT4nWDEyJyk7CgoJLyoqCgkgKiBCYXNpYyBzZXQgb2YgY2hhcmFjdGVycyBmb3IgZWFjaCBlbmNvZGF0aW9uIG1vZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkY2hzZXQgPSBhcnJheSgKCQknQzQwJyA9PiBhcnJheSggLy8gQmFzaWMgc2V0IGZvciBDNDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQknUzEnPT4weDAwLCdTMic9PjB4MDEsJ1MzJz0+MHgwMiwweDIwPT4weDAzLDB4MzA9PjB4MDQsMHgzMT0+MHgwNSwweDMyPT4weDA2LDB4MzM9PjB4MDcsMHgzND0+MHgwOCwweDM1PT4weDA5LCAvLwoJCQkweDM2PT4weDBhLDB4Mzc9PjB4MGIsMHgzOD0+MHgwYywweDM5PT4weDBkLDB4NDE9PjB4MGUsMHg0Mj0+MHgwZiwweDQzPT4weDEwLDB4NDQ9PjB4MTEsMHg0NT0+MHgxMiwweDQ2PT4weDEzLCAvLwoJCQkweDQ3PT4weDE0LDB4NDg9PjB4MTUsMHg0OT0+MHgxNiwweDRhPT4weDE3LDB4NGI9PjB4MTgsMHg0Yz0+MHgxOSwweDRkPT4weDFhLDB4NGU9PjB4MWIsMHg0Zj0+MHgxYywweDUwPT4weDFkLCAvLwoJCQkweDUxPT4weDFlLDB4NTI9PjB4MWYsMHg1Mz0+MHgyMCwweDU0PT4weDIxLDB4NTU9PjB4MjIsMHg1Nj0+MHgyMywweDU3PT4weDI0LDB4NTg9PjB4MjUsMHg1OT0+MHgyNiwweDVhPT4weDI3KSwvLwoJCSdUWFQnID0+IGFycmF5KCAvLyBCYXNpYyBzZXQgZm9yIFRFWFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCSdTMSc9PjB4MDAsJ1MyJz0+MHgwMSwnUzMnPT4weDAyLDB4MjA9PjB4MDMsMHgzMD0+MHgwNCwweDMxPT4weDA1LDB4MzI9PjB4MDYsMHgzMz0+MHgwNywweDM0PT4weDA4LDB4MzU9PjB4MDksIC8vCgkJCTB4MzY9PjB4MGEsMHgzNz0+MHgwYiwweDM4PT4weDBjLDB4Mzk9PjB4MGQsMHg2MT0+MHgwZSwweDYyPT4weDBmLDB4NjM9PjB4MTAsMHg2ND0+MHgxMSwweDY1PT4weDEyLDB4NjY9PjB4MTMsIC8vCgkJCTB4Njc9PjB4MTQsMHg2OD0+MHgxNSwweDY5PT4weDE2LDB4NmE9PjB4MTcsMHg2Yj0+MHgxOCwweDZjPT4weDE5LDB4NmQ9PjB4MWEsMHg2ZT0+MHgxYiwweDZmPT4weDFjLDB4NzA9PjB4MWQsIC8vCgkJCTB4NzE9PjB4MWUsMHg3Mj0+MHgxZiwweDczPT4weDIwLDB4NzQ9PjB4MjEsMHg3NT0+MHgyMiwweDc2PT4weDIzLDB4Nzc9PjB4MjQsMHg3OD0+MHgyNSwweDc5PT4weDI2LDB4N2E9PjB4MjcpLC8vCgkJJ1NIMScgPT4gYXJyYXkoIC8vIFNoaWZ0IDEgc2V0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHgwMD0+MHgwMCwweDAxPT4weDAxLDB4MDI9PjB4MDIsMHgwMz0+MHgwMywweDA0PT4weDA0LDB4MDU9PjB4MDUsMHgwNj0+MHgwNiwweDA3PT4weDA3LDB4MDg9PjB4MDgsMHgwOT0+MHgwOSwgLy8KCQkJMHgwYT0+MHgwYSwweDBiPT4weDBiLDB4MGM9PjB4MGMsMHgwZD0+MHgwZCwweDBlPT4weDBlLDB4MGY9PjB4MGYsMHgxMD0+MHgxMCwweDExPT4weDExLDB4MTI9PjB4MTIsMHgxMz0+MHgxMywgLy8KCQkJMHgxND0+MHgxNCwweDE1PT4weDE1LDB4MTY9PjB4MTYsMHgxNz0+MHgxNywweDE4PT4weDE4LDB4MTk9PjB4MTksMHgxYT0+MHgxYSwweDFiPT4weDFiLDB4MWM9PjB4MWMsMHgxZD0+MHgxZCwgLy8KCQkJMHgxZT0+MHgxZSwweDFmPT4weDFmKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KCQknU0gyJyA9PiBhcnJheSggLy8gU2hpZnQgMiBzZXQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDIxPT4weDAwLDB4MjI9PjB4MDEsMHgyMz0+MHgwMiwweDI0PT4weDAzLDB4MjU9PjB4MDQsMHgyNj0+MHgwNSwweDI3PT4weDA2LDB4Mjg9PjB4MDcsMHgyOT0+MHgwOCwweDJhPT4weDA5LCAvLwoJCQkweDJiPT4weDBhLDB4MmM9PjB4MGIsMHgyZD0+MHgwYywweDJlPT4weDBkLDB4MmY9PjB4MGUsMHgzYT0+MHgwZiwweDNiPT4weDEwLDB4M2M9PjB4MTEsMHgzZD0+MHgxMiwweDNlPT4weDEzLCAvLwoJCQkweDNmPT4weDE0LDB4NDA9PjB4MTUsMHg1Yj0+MHgxNiwweDVjPT4weDE3LDB4NWQ9PjB4MTgsMHg1ZT0+MHgxOSwweDVmPT4weDFhLCdGMSc9PjB4MWIsJ1VTJz0+MHgxZSksICAgICAgICAgICAvLwoJCSdTM0MnID0+IGFycmF5KCAvLyBTaGlmdCAzIHNldCBmb3IgQzQwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCTB4NjA9PjB4MDAsMHg2MT0+MHgwMSwweDYyPT4weDAyLDB4NjM9PjB4MDMsMHg2ND0+MHgwNCwweDY1PT4weDA1LDB4NjY9PjB4MDYsMHg2Nz0+MHgwNywweDY4PT4weDA4LDB4Njk9PjB4MDksIC8vCgkJCTB4NmE9PjB4MGEsMHg2Yj0+MHgwYiwweDZjPT4weDBjLDB4NmQ9PjB4MGQsMHg2ZT0+MHgwZSwweDZmPT4weDBmLDB4NzA9PjB4MTAsMHg3MT0+MHgxMSwweDcyPT4weDEyLDB4NzM9PjB4MTMsIC8vCgkJCTB4NzQ9PjB4MTQsMHg3NT0+MHgxNSwweDc2PT4weDE2LDB4Nzc9PjB4MTcsMHg3OD0+MHgxOCwweDc5PT4weDE5LDB4N2E9PjB4MWEsMHg3Yj0+MHgxYiwweDdjPT4weDFjLDB4N2Q9PjB4MWQsIC8vCgkJCTB4N2U9PjB4MWUsMHg3Zj0+MHgxZiksCgkJJ1MzVCcgPT4gYXJyYXkoIC8vIFNoaWZ0IDMgc2V0IGZvciBURVhUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHg2MD0+MHgwMCwweDQxPT4weDAxLDB4NDI9PjB4MDIsMHg0Mz0+MHgwMywweDQ0PT4weDA0LDB4NDU9PjB4MDUsMHg0Nj0+MHgwNiwweDQ3PT4weDA3LDB4NDg9PjB4MDgsMHg0OT0+MHgwOSwgLy8KCQkJMHg0YT0+MHgwYSwweDRiPT4weDBiLDB4NGM9PjB4MGMsMHg0ZD0+MHgwZCwweDRlPT4weDBlLDB4NGY9PjB4MGYsMHg1MD0+MHgxMCwweDUxPT4weDExLDB4NTI9PjB4MTIsMHg1Mz0+MHgxMywgLy8KCQkJMHg1ND0+MHgxNCwweDU1PT4weDE1LDB4NTY9PjB4MTYsMHg1Nz0+MHgxNywweDU4PT4weDE4LDB4NTk9PjB4MTksMHg1YT0+MHgxYSwweDdiPT4weDFiLDB4N2M9PjB4MWMsMHg3ZD0+MHgxZCwgLy8KCQkJMHg3ZT0+MHgxZSwweDdmPT4weDFmKSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8KCQknWDEyJyA9PiBhcnJheSggLy8gU2V0IGZvciBYMTIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDBkPT4weDAwLDB4MmE9PjB4MDEsMHgzZT0+MHgwMiwweDIwPT4weDAzLDB4MzA9PjB4MDQsMHgzMT0+MHgwNSwweDMyPT4weDA2LDB4MzM9PjB4MDcsMHgzND0+MHgwOCwweDM1PT4weDA5LCAvLwoJCQkweDM2PT4weDBhLDB4Mzc9PjB4MGIsMHgzOD0+MHgwYywweDM5PT4weDBkLDB4NDE9PjB4MGUsMHg0Mj0+MHgwZiwweDQzPT4weDEwLDB4NDQ9PjB4MTEsMHg0NT0+MHgxMiwweDQ2PT4weDEzLCAvLwoJCQkweDQ3PT4weDE0LDB4NDg9PjB4MTUsMHg0OT0+MHgxNiwweDRhPT4weDE3LDB4NGI9PjB4MTgsMHg0Yz0+MHgxOSwweDRkPT4weDFhLDB4NGU9PjB4MWIsMHg0Zj0+MHgxYywweDUwPT4weDFkLCAvLwoJCQkweDUxPT4weDFlLDB4NTI9PjB4MWYsMHg1Mz0+MHgyMCwweDU0PT4weDIxLDB4NTU9PjB4MjIsMHg1Nj0+MHgyMywweDU3PT4weDI0LDB4NTg9PjB4MjUsMHg1OT0+MHgyNiwweDVhPT4weDI3KSAvLwoJCSk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogVGhpcyBpcyB0aGUgY2xhc3MgY29uc3RydWN0b3IuCgkgKiBDcmVhdGVzIGEgZGF0YW1hdHJpeCBvYmplY3QKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBDb2RlIHRvIHJlcHJlc2VudCB1c2luZyBEYXRhbWF0cml4LgoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvZGUpIHsKCQkkYmFyY29kZV9hcnJheSA9IGFycmF5KCk7CgkJaWYgKChpc19udWxsKCRjb2RlKSkgT1IgKCRjb2RlID09ICdcMCcpIE9SICgkY29kZSA9PSAnJykpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBnZXQgZGF0YSBjb2Rld29yZHMKCQkkY3cgPSAkdGhpcy0+Z2V0SGlnaExldmVsRW5jb2RpbmcoJGNvZGUpOwoJCS8vIG51bWJlciBvZiBkYXRhIGNvZGV3b3JkcwoJCSRuZCA9IGNvdW50KCRjdyk7CgkJLy8gY2hlY2sgc2l6ZQoJCWlmICgkbmQgPiAxNTU4KSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gZ2V0IG1pbmltdW0gcmVxdWlyZWQgbWF0cml4IHNpemUuCgkJZm9yZWFjaCAoJHRoaXMtPnN5bWJhdHRyIGFzICRwYXJhbXMpIHsKCQkJaWYgKCRwYXJhbXNbMTFdID49ICRuZCkgewoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCRwYXJhbXNbMTFdIDwgJG5kKSB7CgkJCS8vIHRvbyBtdWNoIGRhdGEKCQkJcmV0dXJuIGZhbHNlOwoJCX0gZWxzZWlmICgkcGFyYW1zWzExXSA+ICRuZCkgewoJCQkvLyBhZGQgcGFkZGluZwoJCQlpZiAoKCgkcGFyYW1zWzExXSAtICRuZCkgPiAxKSBBTkQgKCRjd1soJG5kIC0gMSldICE9IDI1NCkpIHsKCQkJCWlmICgkdGhpcy0+bGFzdF9lbmMgPT0gRU5DX0VERikgewoJCQkJCS8vIHN3aXRjaCB0byBBU0NJSSBlbmNvZGluZwoJCQkJCSRjd1tdID0gMTI0OwoJCQkJCSsrJG5kOwoJCQkJfSBlbHNlaWYgKCgkdGhpcy0+bGFzdF9lbmMgIT0gRU5DX0FTQ0lJKSBBTkQgKCR0aGlzLT5sYXN0X2VuYyAhPSBFTkNfQkFTRTI1NikpIHsKCQkJCQkvLyBzd2l0Y2ggdG8gQVNDSUkgZW5jb2RpbmcKCQkJCQkkY3dbXSA9IDI1NDsKCQkJCQkrKyRuZDsKCQkJCX0KCQkJfQoJCQlpZiAoJHBhcmFtc1sxMV0gPiAkbmQpIHsKCQkJCS8vIGFkZCBmaXJzdCBwYWQKCQkJCSRjd1tdID0gMTI5OwoJCQkJKyskbmQ7CgkJCQkvLyBhZGQgcmVtYWluaW5nIHBhZHMKCQkJCWZvciAoJGkgPSAkbmQ7ICRpIDwgJHBhcmFtc1sxMV07ICsrJGkpIHsKCQkJCQkkY3dbXSA9ICR0aGlzLT5nZXQyNTNTdGF0ZUNvZGV3b3JkKDEyOSwgJGkpOwoJCQkJfQoJCQl9CgkJfQoJCS8vIGFkZCBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkcwoJCSRjdyA9ICR0aGlzLT5nZXRFcnJvckNvcnJlY3Rpb24oJGN3LCAkcGFyYW1zWzEzXSwgJHBhcmFtc1sxNF0sICRwYXJhbXNbMTVdKTsKCQkvLyBpbml0aWFsaXplIGVtcHR5IGFycmF5cwoJCSRncmlkID0gYXJyYXlfZmlsbCgwLCAoJHBhcmFtc1syXSAqICRwYXJhbXNbM10pLCAwKTsKCQkvLyBnZXQgcGxhY2VtZW50IG1hcAoJCSRwbGFjZXMgPSAkdGhpcy0+Z2V0UGxhY2VtZW50TWFwKCRwYXJhbXNbMl0sICRwYXJhbXNbM10pOwoJCS8vIGZpbGwgdGhlIGdyaWQgd2l0aCBkYXRhCgkJJGdyaWQgPSBhcnJheSgpOwoJCSRpID0gMDsKCQkvLyByZWdpb24gZGF0YSByb3cgbWF4IGluZGV4CgkJJHJkcmkgPSAoJHBhcmFtc1s0XSAtIDEpOwoJCS8vIHJlZ2lvbiBkYXRhIGNvbHVtbiBtYXggaW5kZXgKCQkkcmRjaSA9ICgkcGFyYW1zWzVdIC0gMSk7CgkJLy8gZm9yIGVhY2ggdmVydGljYWwgcmVnaW9uCgkJZm9yICgkdnIgPSAwOyAkdnIgPCAkcGFyYW1zWzldOyArKyR2cikgewoJCQkvLyBmb3IgZWFjaCByb3cgb24gcmVnaW9uCgkJCWZvciAoJHIgPSAwOyAkciA8ICRwYXJhbXNbNF07ICsrJHIpIHsKCQkJCS8vIGdldCByb3cKCQkJCSRyb3cgPSAoKCR2ciAqICRwYXJhbXNbNF0pICsgJHIpOwoJCQkJLy8gZm9yIGVhY2ggaG9yaXpvbnRhbCByZWdpb24KCQkJCWZvciAoJGhyID0gMDsgJGhyIDwgJHBhcmFtc1s4XTsgKyskaHIpIHsKCQkJCQkvLyBmb3IgZWFjaCBjb2x1bW4gb24gcmVnaW9uCgkJCQkJZm9yICgkYyA9IDA7ICRjIDwgJHBhcmFtc1s1XTsgKyskYykgewoJCQkJCQkvLyBnZXQgY29sdW1uCgkJCQkJCSRjb2wgPSAoKCRociAqICRwYXJhbXNbNV0pICsgJGMpOwoJCQkJCQkvLyBicmF3IGJpdHMgYnkgY2FzZQoJCQkJCQlpZiAoJHIgPT0gMCkgewoJCQkJCQkJLy8gdG9wIGZpbmRlciBwYXR0ZXJuCgkJCQkJCQlpZiAoJGMgJSAyKSB7CgkJCQkJCQkJJGdyaWRbJHJvd11bJGNvbF0gPSAwOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkZ3JpZFskcm93XVskY29sXSA9IDE7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZWlmICgkciA9PSAkcmRyaSkgewoJCQkJCQkJLy8gYm90dG9tIGZpbmRlciBwYXR0ZXJuCgkJCQkJCQkkZ3JpZFskcm93XVskY29sXSA9IDE7CgkJCQkJCX0gZWxzZWlmICgkYyA9PSAwKSB7CgkJCQkJCQkvLyBsZWZ0IGZpbmRlciBwYXR0ZXJuCgkJCQkJCQkkZ3JpZFskcm93XVskY29sXSA9IDE7CgkJCQkJCX0gZWxzZWlmICgkYyA9PSAkcmRjaSkgewoJCQkJCQkJLy8gcmlnaHQgZmluZGVyIHBhdHRlcm4KCQkJCQkJCWlmICgkciAlIDIpIHsKCQkJCQkJCQkkZ3JpZFskcm93XVskY29sXSA9IDE7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRncmlkWyRyb3ddWyRjb2xdID0gMDsKCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsgLy8gZGF0YSBiaXQKCQkJCQkJCWlmICgkcGxhY2VzWyRpXSA8IDIpIHsKCQkJCQkJCQkkZ3JpZFskcm93XVskY29sXSA9ICRwbGFjZXNbJGldOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkvLyBjb2Rld29yZCBJRAoJCQkJCQkJCSRjd19pZCA9IChmbG9vcigkcGxhY2VzWyRpXSAvIDEwKSAtIDEpOwoJCQkJCQkJCS8vIGNvZGV3b3JkIEJJVCBtYXNrCgkJCQkJCQkJJGN3X2JpdCA9IHBvdygyLCAoOCAtICgkcGxhY2VzWyRpXSAlIDEwKSkpOwoJCQkJCQkJCSRncmlkWyRyb3ddWyRjb2xdID0gKCgkY3dbJGN3X2lkXSAmICRjd19iaXQpID09IDApID8gMCA6IDE7CgkJCQkJCQl9CgkJCQkJCQkrKyRpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCSR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fcm93cyddID0gJHBhcmFtc1swXTsKCQkkdGhpcy0+YmFyY29kZV9hcnJheVsnbnVtX2NvbHMnXSA9ICRwYXJhbXNbMV07CgkJJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ10gPSAkZ3JpZDsKCX0KCgkvKioKCSAqIFJldHVybnMgYSBiYXJjb2RlIGFycmF5IHdoaWNoIGlzIHJlYWRhYmxlIGJ5IFRDUERGCgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgYXJyYXkgcmVhZGFibGUgYnkgVENQREY7CgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCYXJjb2RlQXJyYXkoKSB7CgkJcmV0dXJuICR0aGlzLT5iYXJjb2RlX2FycmF5OwoJfQoKCS8qKgoJICogUHJvZHVjdCBvZiB0d28gbnVtYmVycyBpbiBhIFBvd2VyLW9mLVR3byBHYWxvaXMgRmllbGQKCSAqIEBwYXJhbSAkYSAoaW50KSBmaXJzdCBudW1iZXIgdG8gbXVsdGlwbHkuCgkgKiBAcGFyYW0gJGIgKGludCkgc2Vjb25kIG51bWJlciB0byBtdWx0aXBseS4KCSAqIEBwYXJhbSAkbG9nIChhcnJheSkgTG9nIHRhYmxlLgoJICogQHBhcmFtICRhbG9nIChhcnJheSkgQW50aS1Mb2cgdGFibGUuCgkgKiBAcGFyYW0gJGdmIChhcnJheSkgTnVtYmVyIG9mIEZhY3RvcnMgb2YgdGhlIFJlZWQtU29sb21vbiBwb2x5bm9taWFsLgoJICogQHJldHVybiBpbnQgcHJvZHVjdAoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0R0ZQcm9kdWN0KCRhLCAkYiwgJGxvZywgJGFsb2csICRnZikgewoJCWlmICgoJGEgPT0gMCkgT1IgKCRiID09IDApKSB7CgkJCXJldHVybiAwOwoJCX0KCQlyZXR1cm4gKCRhbG9nWygkbG9nWyRhXSArICRsb2dbJGJdKSAlICgkZ2YgLSAxKV0pOwoJfQoKCS8qKgoJICogQWRkIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzIHRvIGRhdGEgY29kZXdvcmRzIGFycmF5IChBTk5FWCBFKS4KCSAqIEBwYXJhbSAkd2QgKGFycmF5KSBBcnJheSBvZiBkYXRhY29kZXdvcmRzLgoJICogQHBhcmFtICRuYiAoaW50KSBOdW1iZXIgb2YgYmxvY2tzLgoJICogQHBhcmFtICRuZCAoaW50KSBOdW1iZXIgb2YgZGF0YSBjb2Rld29yZHMgcGVyIGJsb2NrLgoJICogQHBhcmFtICRuYyAoaW50KSBOdW1iZXIgb2YgY29ycmVjdGlvbiBjb2Rld29yZHMgcGVyIGJsb2NrLgoJICogQHBhcmFtICRnZiAoaW50KSBudW1uZXIgb2YgZmllbGRzIG9uIGxvZy9hbnRpbG9nIHRhYmxlIChwb3dlciBvZiAyKS4KCSAqIEBwYXJhbSAkcHAgKGludCkgVGhlIHZhbHVlIG9mIGl0cyBwcmltZSBtb2R1bHVzIHBvbHlub21pYWwgKDMwMSBmb3IgRUNDMjAwKS4KCSAqIEByZXR1cm4gYXJyYXkgZGF0YSBjb2Rld29yZHMgKyBlcnJvciBjb2Rld29yZHMKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVycm9yQ29ycmVjdGlvbigkd2QsICRuYiwgJG5kLCAkbmMsICRnZj0yNTYsICRwcD0zMDEpIHsKCQkvLyBnZW5lcmF0ZSB0aGUgbG9nICgkbG9nKSBhbmQgYW50aWxvZyAoJGFsb2cpIHRhYmxlcwoJCSRsb2dbMF0gPSAwOwoJCSRhbG9nWzBdID0gMTsKCQlmb3IgKCRpID0gMTsgJGkgPCAkZ2Y7ICsrJGkpIHsKCQkJJGFsb2dbJGldID0gKCRhbG9nWygkaSAtIDEpXSAqIDIpOwoJCQlpZiAoJGFsb2dbJGldID49ICRnZikgewoJCQkJJGFsb2dbJGldIF49ICRwcDsKCQkJfQoJCQkkbG9nWyRhbG9nWyRpXV0gPSAkaTsKCQl9CgkJa3NvcnQoJGxvZyk7CgkJLy8gZ2VuZXJhdGUgdGhlIHBvbHlub21pYWwgY29lZmZpY2llbnRzIChjKQoJCSRjID0gYXJyYXlfZmlsbCgwLCAoJG5jICsgMSksIDApOwoJCSRjWzBdID0gMTsKCQlmb3IgKCRpID0gMTsgJGkgPD0gJG5jOyArKyRpKSB7CgkJCSRjWyRpXSA9ICRjWygkaS0xKV07CgkJCWZvciAoJGogPSAoJGkgLSAxKTsgJGogPj0gMTsgLS0kaikgewoJCQkJJGNbJGpdID0gJGNbKCRqIC0gMSldIF4gJHRoaXMtPmdldEdGUHJvZHVjdCgkY1skal0sICRhbG9nWyRpXSwgJGxvZywgJGFsb2csICRnZik7CgkJCX0KCQkJJGNbMF0gPSAkdGhpcy0+Z2V0R0ZQcm9kdWN0KCRjWzBdLCAkYWxvZ1skaV0sICRsb2csICRhbG9nLCAkZ2YpOwoJCX0KCQlrc29ydCgkYyk7CgkJLy8gdG90YWwgbnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzCgkJJG51bV93ZCA9ICgkbmIgKiAkbmQpOwoJCS8vIHRvdGFsIG51bWJlciBvZiBlcnJvciBjb2Rld29yZHMKCQkkbnVtX3dlID0gKCRuYiAqICRuYyk7CgkJLy8gZm9yIGVhY2ggYmxvY2sKCQlmb3IgKCRiID0gMDsgJGIgPCAkbmI7ICsrJGIpIHsKCQkJLy8gY3JlYXRlIGludGVybGVhdmVkIGRhdGEgYmxvY2sKCQkJJGJsb2NrID0gYXJyYXkoKTsKCQkJZm9yICgkbiA9ICRiOyAkbiA8ICRudW1fd2Q7ICRuICs9ICRuYikgewoJCQkJJGJsb2NrW10gPSAkd2RbJG5dOwoJCQl9CgkJCS8vIGluaXRpYWxpemUgZXJyb3IgY29kZXdvcmRzCgkJCSR3ZSA9IGFycmF5X2ZpbGwoMCwgKCRuYyArIDEpLCAwKTsKCQkJLy8gY2FsY3VsYXRlIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzIGZvciB0aGlzIGJsb2NrCgkJCWZvciAoJGkgPSAwOyAkaSA8ICRuZDsgKyskaSkgewoJCQkJJGsgPSAoJHdlWzBdIF4gJGJsb2NrWyRpXSk7CgkJCQlmb3IgKCRqID0gMDsgJGogPCAkbmM7ICsrJGopIHsKCQkJCQkkd2VbJGpdID0gKCR3ZVsoJGogKyAxKV0gXiAkdGhpcy0+Z2V0R0ZQcm9kdWN0KCRrLCAkY1soJG5jIC0gJGogLSAxKV0sICRsb2csICRhbG9nLCAkZ2YpKTsKCQkJCX0KCQkJfQoJCQkvLyBhZGQgZXJyb3IgY29kZXdvcmRzIGF0IHRoZSBlbmQgb2YgZGF0YSBjb2Rld29yZHMKCQkJJGogPSAwOwoJCQlmb3IgKCRpID0gJGI7ICRpIDwgJG51bV93ZTsgJGkgKz0gJG5iKSB7CgkJCQkkd2RbKCRudW1fd2QgKyAkaSldID0gJHdlWyRqXTsKCQkJCSsrJGo7CgkJCX0KCQl9CgkJLy8gcmVvcmRlciBjb2Rld29yZHMKCQlrc29ydCgkd2QpOwoJCXJldHVybiAkd2Q7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIDI1My1zdGF0ZSBjb2Rld29yZAoJICogQHBhcmFtICRjd3BhZCAoaW50KSBQYWQgY29kZXdvcmQuCgkgKiBAcGFyYW0gJGN3cG9zIChpbnQpIE51bWJlciBvZiBkYXRhIGNvZGV3b3JkcyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgZW5jb2RlZCBkYXRhLgoJICogQHJldHVybiBwYWQgY29kZXdvcmQKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldDI1M1N0YXRlQ29kZXdvcmQoJGN3cGFkLCAkY3dwb3MpIHsKCQkkcGFkID0gKCRjd3BhZCArICgoKDE0OSAqICRjd3BvcykgJSAyNTMpICsgMSkpOwoJCWlmICgkcGFkID4gMjU0KSB7CgkJCSRwYWQgLT0gMjU0OwoJCX0KCQlyZXR1cm4gJHBhZDsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgMjU1LXN0YXRlIGNvZGV3b3JkCgkgKiBAcGFyYW0gJGN3cGFkIChpbnQpIFBhZCBjb2Rld29yZC4KCSAqIEBwYXJhbSAkY3dwb3MgKGludCkgTnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzIGZyb20gdGhlIGJlZ2lubmluZyBvZiBlbmNvZGVkIGRhdGEuCgkgKiBAcmV0dXJuIHBhZCBjb2Rld29yZAoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0MjU1U3RhdGVDb2Rld29yZCgkY3dwYWQsICRjd3BvcykgewoJCSRwYWQgPSAoJGN3cGFkICsgKCgoMTQ5ICogJGN3cG9zKSAlIDI1NSkgKyAxKSk7CgkJaWYgKCRwYWQgPiAyNTUpIHsKCQkJJHBhZCAtPSAyNTY7CgkJfQoJCXJldHVybiAkcGFkOwoJfQoKCS8qKgoJICogUmV0dXJucyB0cnVlIGlmIHRoZSBjaGFyIGJlbG9uZ3MgdG8gdGhlIHNlbGVjdGVkIG1vZGUKCSAqIEBwYXJhbSAkY2hyIChpbnQpIENoYXJhY3RlciAoYnl0ZSkgdG8gY2hlY2suCgkgKiBAcGFyYW0gJG1vZGUgKGludCkgQ3VycmVudCBlbmNvZGluZyBtb2RlLgoJICogQHJldHVybiBib29sZWFuIHRydWUgaWYgdGhlIGNoYXIgaXMgb2YgdGhlIHNlbGVjdGVkIG1vZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpc0NoYXJNb2RlKCRjaHIsICRtb2RlKSB7CgkJJHN0YXR1cyA9IGZhbHNlOwoJCXN3aXRjaCAoJG1vZGUpIHsKCQkJY2FzZSBFTkNfQVNDSUk6IHsgLy8gQVNDSUkgY2hhcmFjdGVyIDAgdG8gMTI3CgkJCQkkc3RhdHVzID0gKCgkY2hyID49IDApIEFORCAoJGNociA8PSAxMjcpKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgRU5DX0M0MDogeyAvLyBVcHBlci1jYXNlIGFscGhhbnVtZXJpYwoJCQkJJHN0YXR1cyA9ICgoJGNociA9PSAzMikgT1IgKCgkY2hyID49IDQ4KSBBTkQgKCRjaHIgPD0gNTcpKSBPUiAoKCRjaHIgPj0gNjUpIEFORCAoJGNociA8PSA5MCkpKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgRU5DX1RYVDogeyAvLyBMb3dlci1jYXNlIGFscGhhbnVtZXJpYwoJCQkJJHN0YXR1cyA9ICgoJGNociA9PSAzMikgT1IgKCgkY2hyID49IDQ4KSBBTkQgKCRjaHIgPD0gNTcpKSBPUiAoKCRjaHIgPj0gOTcpIEFORCAoJGNociA8PSAxMjIpKSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIEVOQ19YMTI6IHsgLy8gQU5TSSBYMTIKCQkJCSRzdGF0dXMgPSAoKCRjaHIgPT0gMTMpIE9SICgkY2hyID09IDQyKSBPUiAoJGNociA9PSA2MikpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBFTkNfRURGOiB7IC8vIEFTQ0lJIGNoYXJhY3RlciAzMiB0byA5NAoJCQkJJHN0YXR1cyA9ICgoJGNociA+PSAzMikgQU5EICgkY2hyIDw9IDk0KSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIEVOQ19CQVNFMjU2OiB7IC8vIEZ1bmN0aW9uIGNoYXJhY3RlciAoRk5DMSwgU3RydWN0dXJlZCBBcHBlbmQsIFJlYWRlciBQcm9ncmFtLCBvciBDb2RlIFBhZ2UpCgkJCQkkc3RhdHVzID0gKCgkY2hyID09IDIzMikgT1IgKCRjaHIgPT0gMjMzKSBPUiAoJGNociA9PSAyMzQpIE9SICgkY2hyID09IDI0MSkpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBFTkNfQVNDSUlfRVhUOiB7IC8vIEFTQ0lJIGNoYXJhY3RlciAxMjggdG8gMjU1CgkJCQkkc3RhdHVzID0gKCgkY2hyID49IDEyOCkgQU5EICgkY2hyIDw9IDI1NSkpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBFTkNfQVNDSUlfTlVNOiB7IC8vIEFTQ0lJIGRpZ2l0cwoJCQkJJHN0YXR1cyA9ICgoJGNociA+PSA0OCkgQU5EICgkY2hyIDw9IDU3KSk7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJHN0YXR1czsKCX0KCgkvKioKCSAqIFRoZSBsb29rLWFoZWFkIHRlc3Qgc2NhbnMgdGhlIGRhdGEgdG8gYmUgZW5jb2RlZCB0byBmaW5kIHRoZSBiZXN0IG1vZGUgKEFubmV4IFAgLSBzdGVwcyBmcm9tIEogdG8gUykuCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgZGF0YSB0byBlbmNvZGUKCSAqIEBwYXJhbSAkcG9zIChpbnQpIGN1cnJlbnQgcG9zaXRpb24KCSAqIEBwYXJhbSAkbW9kZSAoaW50KSBjdXJyZW50IGVuY29kaW5nIG1vZGUKCSAqIEByZXR1cm4gaW50IGVuY29kaW5nIG1vZGUKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvb2tBaGVhZFRlc3QoJGRhdGEsICRwb3MsICRtb2RlKSB7CgkJJGRhdGFfbGVuZ3RoID0gc3RybGVuKCRkYXRhKTsKCQlpZiAoJHBvcyA+PSAkZGF0YV9sZW5ndGgpIHsKCQkJcmV0dXJuICRtb2RlOwoJCX0KCQkkY2hhcnNjb3VudCA9IDA7IC8vIGNvdW50IHByb2Nlc3NlZCBjaGFycwoJCS8vIFNURVAgSgoJCWlmICgkbW9kZSA9PSBFTkNfQVNDSUkpIHsKCQkJJG51bWNoID0gYXJyYXkoMCwgMSwgMSwgMSwgMSwgMS4yNSk7CgkJfSBlbHNlIHsKCQkJJG51bWNoID0gYXJyYXkoMSwgMiwgMiwgMiwgMiwgMi4yNSk7CgkJCSRudW1jaFskbW9kZV0gPSAwOwoJCX0KCQl3aGlsZSAodHJ1ZSkgewoJCQkvLyBTVEVQIEsKCQkJaWYgKCgkcG9zICsgJGNoYXJzY291bnQpID09ICRkYXRhX2xlbmd0aCkgewoJCQkJaWYgKCRudW1jaFtFTkNfQVNDSUldIDw9IGNlaWwobWluKCRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX1gxMl0sICRudW1jaFtFTkNfRURGXSwgJG51bWNoW0VOQ19CQVNFMjU2XSkpKSB7CgkJCQkJcmV0dXJuIEVOQ19BU0NJSTsKCQkJCX0KCQkJCWlmICgkbnVtY2hbRU5DX0JBU0UyNTZdIDwgY2VpbChtaW4oJG51bWNoW0VOQ19BU0NJSV0sICRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX1gxMl0sICRudW1jaFtFTkNfRURGXSkpKSB7CgkJCQkJcmV0dXJuIEVOQ19CQVNFMjU2OwoJCQkJfQoJCQkJaWYgKCRudW1jaFtFTkNfRURGXSA8IGNlaWwobWluKCRudW1jaFtFTkNfQVNDSUldLCAkbnVtY2hbRU5DX0M0MF0sICRudW1jaFtFTkNfVFhUXSwgJG51bWNoW0VOQ19YMTJdLCAkbnVtY2hbRU5DX0JBU0UyNTZdKSkpIHsKCQkJCQlyZXR1cm4gRU5DX0VERjsKCQkJCX0KCQkJCWlmICgkbnVtY2hbRU5DX1RYVF0gPCBjZWlsKG1pbigkbnVtY2hbRU5DX0FTQ0lJXSwgJG51bWNoW0VOQ19DNDBdLCAkbnVtY2hbRU5DX1gxMl0sICRudW1jaFtFTkNfRURGXSwgJG51bWNoW0VOQ19CQVNFMjU2XSkpKSB7CgkJCQkJcmV0dXJuIEVOQ19UWFQ7CgkJCQl9CgkJCQlpZiAoJG51bWNoW0VOQ19YMTJdIDwgY2VpbChtaW4oJG51bWNoW0VOQ19BU0NJSV0sICRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX0VERl0sICRudW1jaFtFTkNfQkFTRTI1Nl0pKSkgewoJCQkJCXJldHVybiBFTkNfWDEyOwoJCQkJfQoJCQkJcmV0dXJuIEVOQ19DNDA7CgkJCX0KCQkJLy8gZ2V0IGNoYXIKCQkJJGNociA9IG9yZCgkZGF0YVskcG9zICsgJGNoYXJzY291bnRdKTsKCQkJJGNoYXJzY291bnQrKzsKCQkJLy8gU1RFUCBMCgkJCWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfQVNDSUlfTlVNKSkgewoJCQkJJG51bWNoW0VOQ19BU0NJSV0gKz0gKDEgLyAyKTsKCQkJfSBlbHNlaWYgKCR0aGlzLT5pc0NoYXJNb2RlKCRjaHIsIEVOQ19BU0NJSV9FWFQpKSB7CgkJCQkkbnVtY2hbRU5DX0FTQ0lJXSA9IGNlaWwoJG51bWNoW0VOQ19BU0NJSV0pOwoJCQkJJG51bWNoW0VOQ19BU0NJSV0gKz0gMjsKCQkJfSBlbHNlIHsKCQkJCSRudW1jaFtFTkNfQVNDSUldID0gY2VpbCgkbnVtY2hbRU5DX0FTQ0lJXSk7CgkJCQkkbnVtY2hbRU5DX0FTQ0lJXSArPSAxOwoJCQl9CgkJCS8vIFNURVAgTQoJCQlpZiAoJHRoaXMtPmlzQ2hhck1vZGUoJGNociwgRU5DX0M0MCkpIHsKCQkJCSRudW1jaFtFTkNfQzQwXSArPSAoMiAvIDMpOwoJCQl9IGVsc2VpZiAoJHRoaXMtPmlzQ2hhck1vZGUoJGNociwgRU5DX0FTQ0lJX0VYVCkpIHsKCQkJCSRudW1jaFtFTkNfQzQwXSArPSAoOCAvIDMpOwoJCQl9IGVsc2UgewoJCQkJJG51bWNoW0VOQ19DNDBdICs9ICg0IC8gMyk7CgkJCX0KCQkJLy8gU1RFUCBOCgkJCWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfVFhUKSkgewoJCQkJJG51bWNoW0VOQ19UWFRdICs9ICgyIC8gMyk7CgkJCX0gZWxzZWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfQVNDSUlfRVhUKSkgewoJCQkJJG51bWNoW0VOQ19UWFRdICs9ICg4IC8gMyk7CgkJCX0gZWxzZSB7CgkJCQkkbnVtY2hbRU5DX1RYVF0gKz0gKDQgLyAzKTsKCQkJfQoJCQkvLyBTVEVQIE8KCQkJaWYgKCR0aGlzLT5pc0NoYXJNb2RlKCRjaHIsIEVOQ19YMTIpIE9SICR0aGlzLT5pc0NoYXJNb2RlKCRjaHIsIEVOQ19DNDApKSB7CgkJCQkkbnVtY2hbRU5DX1gxMl0gKz0gKDIgLyAzKTsKCQkJfSBlbHNlaWYgKCR0aGlzLT5pc0NoYXJNb2RlKCRjaHIsIEVOQ19BU0NJSV9FWFQpKSB7CgkJCQkkbnVtY2hbRU5DX1gxMl0gKz0gKDEzIC8gMyk7CgkJCX0gZWxzZSB7CgkJCQkkbnVtY2hbRU5DX1gxMl0gKz0gKDEwIC8gMyk7CgkJCX0KCQkJLy8gU1RFUCBQCgkJCWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfRURGKSkgewoJCQkJJG51bWNoW0VOQ19FREZdICs9ICgzIC8gNCk7CgkJCX0gZWxzZWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfQVNDSUlfRVhUKSkgewoJCQkJJG51bWNoW0VOQ19FREZdICs9ICgxNyAvIDQpOwoJCQl9IGVsc2UgewoJCQkJJG51bWNoW0VOQ19FREZdICs9ICgxMyAvIDQpOwoJCQl9CgkJCS8vIFNURVAgUQoJCQlpZiAoJHRoaXMtPmlzQ2hhck1vZGUoJGNociwgRU5DX0JBU0UyNTYpKSB7CgkJCQkkbnVtY2hbRU5DX0JBU0UyNTZdICs9IDQ7CgkJCX0gZWxzZSB7CgkJCQkkbnVtY2hbRU5DX0JBU0UyNTZdICs9IDE7CgkJCX0KCQkJLy8gU1RFUCBSCgkJCWlmICgkY2hhcnNjb3VudCA+PSA0KSB7CgkJCQlpZiAoKCRudW1jaFtFTkNfQVNDSUldICsgMSkgPD0gbWluKCRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX1gxMl0sICRudW1jaFtFTkNfRURGXSwgJG51bWNoW0VOQ19CQVNFMjU2XSkpIHsKCQkJCQlyZXR1cm4gRU5DX0FTQ0lJOwoJCQkJfQoJCQkJaWYgKCgoJG51bWNoW0VOQ19CQVNFMjU2XSArIDEpIDw9ICRudW1jaFtFTkNfQVNDSUldKQoJCQkJCU9SICgoJG51bWNoW0VOQ19CQVNFMjU2XSArIDEpIDwgbWluKCRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX1gxMl0sICRudW1jaFtFTkNfRURGXSkpKSB7CgkJCQkJcmV0dXJuIEVOQ19CQVNFMjU2OwoJCQkJfQoJCQkJaWYgKCgkbnVtY2hbRU5DX0VERl0gKyAxKSA8IG1pbigkbnVtY2hbRU5DX0FTQ0lJXSwgJG51bWNoW0VOQ19DNDBdLCAkbnVtY2hbRU5DX1RYVF0sICRudW1jaFtFTkNfWDEyXSwgJG51bWNoW0VOQ19CQVNFMjU2XSkpIHsKCQkJCQlyZXR1cm4gRU5DX0VERjsKCQkJCX0KCQkJCWlmICgoJG51bWNoW0VOQ19UWFRdICsgMSkgPCBtaW4oJG51bWNoW0VOQ19BU0NJSV0sICRudW1jaFtFTkNfQzQwXSwgJG51bWNoW0VOQ19YMTJdLCAkbnVtY2hbRU5DX0VERl0sICRudW1jaFtFTkNfQkFTRTI1Nl0pKSB7CgkJCQkJcmV0dXJuIEVOQ19UWFQ7CgkJCQl9CgkJCQlpZiAoKCRudW1jaFtFTkNfWDEyXSArIDEpIDwgbWluKCRudW1jaFtFTkNfQVNDSUldLCAkbnVtY2hbRU5DX0M0MF0sICRudW1jaFtFTkNfVFhUXSwgJG51bWNoW0VOQ19FREZdLCAkbnVtY2hbRU5DX0JBU0UyNTZdKSkgewoJCQkJCXJldHVybiBFTkNfWDEyOwoJCQkJfQoJCQkJaWYgKCgkbnVtY2hbRU5DX0M0MF0gKyAxKSA8IG1pbigkbnVtY2hbRU5DX0FTQ0lJXSwgJG51bWNoW0VOQ19UWFRdLCAkbnVtY2hbRU5DX0VERl0sICRudW1jaFtFTkNfQkFTRTI1Nl0pKSB7CgkJCQkJaWYgKCRudW1jaFtFTkNfQzQwXSA8ICRudW1jaFtFTkNfWDEyXSkgewoJCQkJCQlyZXR1cm4gRU5DX0M0MDsKCQkJCQl9CgkJCQkJaWYgKCRudW1jaFtFTkNfQzQwXSA9PSAkbnVtY2hbRU5DX1gxMl0pIHsKCQkJCQkJJGsgPSAoJHBvcyArICRjaGFyc2NvdW50ICsgMSk7CgkJCQkJCXdoaWxlICgkayA8ICRkYXRhX2xlbmd0aCkgewoJCQkJCQkJJHRtcGNociA9IG9yZCgkZGF0YXska30pOwoJCQkJCQkJaWYgKCR0aGlzLT5pc0NoYXJNb2RlKCR0bXBjaHIsIEVOQ19YMTIpKSB7CgkJCQkJCQkJcmV0dXJuIEVOQ19YMTI7CgkJCQkJCQl9IGVsc2VpZiAoISgkdGhpcy0+aXNDaGFyTW9kZSgkdG1wY2hyLCBFTkNfWDEyKSBPUiAkdGhpcy0+aXNDaGFyTW9kZSgkdG1wY2hyLCBFTkNfQzQwKSkpIHsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJCSsrJGs7CgkJCQkJCX0KCQkJCQkJcmV0dXJuIEVOQ19DNDA7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSAvLyBlbmQgb2Ygd2hpbGUKCX0KCgkvKioKCSAqIEdldCB0aGUgc3dpdGNoaW5nIGNvZGV3b3JkIHRvIGEgbmV3IGVuY29kaW5nIG1vZGUgKGxhdGNoIGNvZGV3b3JkKQoJICogQHBhcmFtICRtb2RlIChpbnQpIE5ldyBlbmNvZGluZyBtb2RlLgoJICogQHJldHVybiAoaW50KSBTd2l0Y2ggY29kZXdvcmQuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRTd2l0Y2hFbmNvZGluZ0NvZGV3b3JkKCRtb2RlKSB7CgkJc3dpdGNoICgkbW9kZSkgewoJCQljYXNlIEVOQ19BU0NJSTogeyAvLyBBU0NJSSBjaGFyYWN0ZXIgMCB0byAxMjcKCQkJCSRjdyA9IDI1NDsKCQkJCWlmICgkdGhpcy0+bGFzdF9lbmMgPT0gRU5DX0VERikgewoJCQkJCSRjdyA9IDEyNDsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgRU5DX0M0MDogeyAvLyBVcHBlci1jYXNlIGFscGhhbnVtZXJpYwoJCQkJJGN3ID0gMjMwOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBFTkNfVFhUOiB7IC8vIExvd2VyLWNhc2UgYWxwaGFudW1lcmljCgkJCQkkY3cgPSAyMzk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIEVOQ19YMTI6IHsgLy8gQU5TSSBYMTIKCQkJCSRjdyA9IDIzODsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgRU5DX0VERjogeyAvLyBBU0NJSSBjaGFyYWN0ZXIgMzIgdG8gOTQKCQkJCSRjdyA9IDI0MDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgRU5DX0JBU0UyNTY6IHsgLy8gRnVuY3Rpb24gY2hhcmFjdGVyIChGTkMxLCBTdHJ1Y3R1cmVkIEFwcGVuZCwgUmVhZGVyIFByb2dyYW0sIG9yIENvZGUgUGFnZSkKCQkJCSRjdyA9IDIzMTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiAkY3c7Cgl9CgoJLyoqCgkgKiBDaG9vc2UgdGhlIG1pbmltdW0gbWF0cml4IHNpemUgYW5kIHJldHVybiB0aGUgbWF4IG51bWJlciBvZiBkYXRhIGNvZGV3b3Jkcy4KCSAqIEBwYXJhbSAkbnVtY3cgKGludCkgTnVtYmVyIG9mIGN1cnJlbnQgY29kZXdvcmRzLgoJICogQHJldHVybiBudW1iZXIgb2YgZGF0YSBjb2Rld29yZHMgaW4gbWF0cml4CgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNYXhEYXRhQ29kZXdvcmRzKCRudW1jdykgewoJCWZvcmVhY2ggKCR0aGlzLT5zeW1iYXR0ciBhcyAka2V5ID0+ICRtYXRyaXgpIHsKCQkJaWYgKCRtYXRyaXhbMTFdID49ICRudW1jdykgewoJCQkJcmV0dXJuICRtYXRyaXhbMTFdOwoJCQl9CgkJfQoJCXJldHVybiAwOwoJfQoKCS8qKgoJICogR2V0IGhpZ2ggbGV2ZWwgZW5jb2RpbmcgdXNpbmcgdGhlIG1pbmltdW0gc3ltYm9sIGRhdGEgY2hhcmFjdGVycyBmb3IgRUNDIDIwMAoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIGRhdGEgdG8gZW5jb2RlCgkgKiBAcmV0dXJuIGFycmF5IG9mIGNvZGV3b3JkcwoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SGlnaExldmVsRW5jb2RpbmcoJGRhdGEpIHsKCQkvLyBTVEVQIEEuIFN0YXJ0IGluIEFTQ0lJIGVuY29kYXRpb24uCgkJJGVuYyA9IEVOQ19BU0NJSTsgLy8gY3VycmVudCBlbmNvZGluZyBtb2RlCgkJJHBvcyA9IDA7IC8vIGN1cnJlbnQgcG9zaXRpb24KCQkkY3cgPSBhcnJheSgpOyAvLyBhcnJheSBvZiBjb2Rld29yZHMgdG8gYmUgcmV0dXJuZWQKCQkkY3dfbnVtID0gMDsgLy8gbnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzCgkJJGRhdGFfbGVuZ2h0ID0gc3RybGVuKCRkYXRhKTsgLy8gbnVtYmVyIG9mIGNoYXJzCgkJd2hpbGUgKCRwb3MgPCAkZGF0YV9sZW5naHQpIHsKCQkJLy8gc2V0IGxhc3QgdXNlZCBlbmNvZGluZwoJCQkkdGhpcy0+bGFzdF9lbmMgPSAkZW5jOwoJCQlzd2l0Y2ggKCRlbmMpIHsKCQkJCWNhc2UgRU5DX0FTQ0lJOiB7IC8vIFNURVAgQi4gV2hpbGUgaW4gQVNDSUkgZW5jb2RhdGlvbgoJCQkJCWlmICgoJGRhdGFfbGVuZ2h0ID4gMSkgQU5EICgkcG9zIDwgKCRkYXRhX2xlbmdodCAtIDEpKSBBTkQgKCR0aGlzLT5pc0NoYXJNb2RlKG9yZCgkZGF0YVskcG9zXSksIEVOQ19BU0NJSV9OVU0pIEFORCAkdGhpcy0+aXNDaGFyTW9kZShvcmQoJGRhdGFbJHBvcyArIDFdKSwgRU5DX0FTQ0lJX05VTSkpKSB7CgkJCQkJCS8vIDEuIElmIHRoZSBuZXh0IGRhdGEgc2VxdWVuY2UgaXMgYXQgbGVhc3QgMiBjb25zZWN1dGl2ZSBkaWdpdHMsIGVuY29kZSB0aGUgbmV4dCB0d28gZGlnaXRzIGFzIGEgZG91YmxlIGRpZ2l0IGluIEFTQ0lJIG1vZGUuCgkJCQkJCSRjd1tdID0gKGludHZhbChzdWJzdHIoJGRhdGEsICRwb3MsIDIpKSArIDEzMCk7CgkJCQkJCSsrJGN3X251bTsKCQkJCQkJJHBvcyArPSAyOwoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIDIuIElmIHRoZSBsb29rLWFoZWFkIHRlc3QgKHN0YXJ0aW5nIGF0IHN0ZXAgSikgaW5kaWNhdGVzIGFub3RoZXIgbW9kZSwgc3dpdGNoIHRvIHRoYXQgbW9kZS4KCQkJCQkJJG5ld2VuYyA9ICR0aGlzLT5sb29rQWhlYWRUZXN0KCRkYXRhLCAkcG9zLCAkZW5jKTsKCQkJCQkJaWYgKCRuZXdlbmMgIT0gJGVuYykgewoJCQkJCQkJLy8gc3dpdGNoIHRvIG5ldyBlbmNvZGluZwoJCQkJCQkJJGVuYyA9ICRuZXdlbmM7CgkJCQkJCQkkY3dbXSA9ICR0aGlzLT5nZXRTd2l0Y2hFbmNvZGluZ0NvZGV3b3JkKCRlbmMpOwoJCQkJCQkJKyskY3dfbnVtOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8gZ2V0IG5ldyBieXRlCgkJCQkJCQkkY2hyID0gb3JkKCRkYXRhWyRwb3NdKTsKCQkJCQkJCSsrJHBvczsKCQkJCQkJCWlmICgkdGhpcy0+aXNDaGFyTW9kZSgkY2hyLCBFTkNfQVNDSUlfRVhUKSkgewoJCQkJCQkJCS8vIDMuIElmIHRoZSBuZXh0IGRhdGEgY2hhcmFjdGVyIGlzIGV4dGVuZGVkIEFTQ0lJIChncmVhdGVyIHRoYW4gMTI3KSBlbmNvZGUgaXQgaW4gQVNDSUkgbW9kZSBmaXJzdCB1c2luZyB0aGUgVXBwZXIgU2hpZnQgKHZhbHVlIDIzNSkgY2hhcmFjdGVyLgoJCQkJCQkJCSRjd1tdID0gMjM1OwoJCQkJCQkJCSRjd1tdID0gKCRjaHIgLSAxMjcpOwoJCQkJCQkJCSRjd19udW0gKz0gMjsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJLy8gNC4gT3RoZXJ3aXNlIHByb2Nlc3MgdGhlIG5leHQgZGF0YSBjaGFyYWN0ZXIgaW4gQVNDSUkgZW5jb2RhdGlvbi4KCQkJCQkJCQkkY3dbXSA9ICgkY2hyICsgMSk7CgkJCQkJCQkJKyskY3dfbnVtOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBFTkNfQzQwIDogICAvLyBVcHBlci1jYXNlIGFscGhhbnVtZXJpYwoJCQkJY2FzZSBFTkNfVFhUIDogICAvLyBMb3dlci1jYXNlIGFscGhhbnVtZXJpYwoJCQkJY2FzZSBFTkNfWDEyIDogeyAvLyBBTlNJIFgxMgoJCQkJCSR0ZW1wX2N3ID0gYXJyYXkoKTsKCQkJCQkkcCA9IDA7CgkJCQkJJGVwb3MgPSAkcG9zOwoJCQkJCS8vIGdldCBjaGFyc2V0IElECgkJCQkJJHNldF9pZCA9ICR0aGlzLT5jaHNldF9pZFskZW5jXTsKCQkJCQkvLyBnZXQgYmFzaWMgY2hhcnNldCBmb3IgY3VycmVudCBlbmNvZGluZwoJCQkJCSRjaGFyc2V0ID0gJHRoaXMtPmNoc2V0WyRzZXRfaWRdOwoJCQkJCWRvIHsKCQkJCQkJLy8gMi4gcHJvY2VzcyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gQzQwIGVuY29kYXRpb24uCgkJCQkJCSRjaHIgPSBvcmQoJGRhdGFbJGVwb3NdKTsKCQkJCQkJKyskZXBvczsKCQkJCQkJLy8gY2hlY2sgZm9yIGV4dGVuZGVkIGNoYXJhY3RlcgoJCQkJCQlpZiAoJGNociAmIDB4ODApIHsKCQkJCQkJCWlmICgkZW5jID09IEVOQ19YMTIpIHsKCQkJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJCQl9CgkJCQkJCQkkY2hyID0gKCRjaHIgJiAweDdmKTsKCQkJCQkJCSR0ZW1wX2N3W10gPSAxOyAvLyBzaGlmdCAyCgkJCQkJCQkkdGVtcF9jd1tdID0gMzA7IC8vIHVwcGVyIHNoaWZ0CgkJCQkJCQkkcCArPSAyOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkY2hhcnNldFskY2hyXSkpIHsKCQkJCQkJCSR0ZW1wX2N3W10gPSAkY2hhcnNldFskY2hyXTsKCQkJCQkJCSsrJHA7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmNoc2V0WydTSDEnXVskY2hyXSkpIHsKCQkJCQkJCQkkdGVtcF9jd1tdID0gMDsgLy8gc2hpZnQgMQoJCQkJCQkJCSRzaGlmdHNldCA9ICR0aGlzLT5jaHNldFsnU0gxJ107CgkJCQkJCQl9IGVsc2VpZiAoaXNzZXQoJGNociwgJHRoaXMtPmNoc2V0WydTSDInXVskY2hyXSkpIHsKCQkJCQkJCQkkdGVtcF9jd1tdID0gMTsgLy8gc2hpZnQgMgoJCQkJCQkJCSRzaGlmdHNldCA9ICR0aGlzLT5jaHNldFsnU0gyJ107CgkJCQkJCQl9IGVsc2VpZiAoKCRlbmMgPT0gRU5DX0M0MCkgQU5EIGlzc2V0KCR0aGlzLT5jaHNldFsnUzNDJ11bJGNocl0pKSB7CgkJCQkJCQkJJHRlbXBfY3dbXSA9IDI7IC8vIHNoaWZ0IDMKCQkJCQkJCQkkc2hpZnRzZXQgPSAkdGhpcy0+Y2hzZXRbJ1MzQyddOwoJCQkJCQkJfSBlbHNlaWYgKCgkZW5jID09IEVOQ19UWFQpIEFORCBpc3NldCgkdGhpcy0+Y2hzZXRbJ1MzVCddWyRjaHJdKSkgewoJCQkJCQkJCSR0ZW1wX2N3W10gPSAyOyAvLyBzaGlmdCAzCgkJCQkJCQkJJHNoaWZ0c2V0ID0gJHRoaXMtPmNoc2V0WydTM1QnXTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCQkJfQoJCQkJCQkJJHRlbXBfY3dbXSA9ICRzaGlmdHNldFskY2hyXTsKCQkJCQkJCSRwICs9IDI7CgkJCQkJCX0KCQkJCQkJaWYgKCRwID49IDMpIHsKCQkJCQkJCSRjMSA9IGFycmF5X3NoaWZ0KCR0ZW1wX2N3KTsKCQkJCQkJCSRjMiA9IGFycmF5X3NoaWZ0KCR0ZW1wX2N3KTsKCQkJCQkJCSRjMyA9IGFycmF5X3NoaWZ0KCR0ZW1wX2N3KTsKCQkJCQkJCSRwIC09IDM7CgkJCQkJCQkkdG1wID0gKCgxNjAwICogJGMxKSArICg0MCAqICRjMikgKyAkYzMgKyAxKTsKCQkJCQkJCSRjd1tdID0gKCR0bXAgPj4gOCk7CgkJCQkJCQkkY3dbXSA9ICgkdG1wICUgMjU2KTsKCQkJCQkJCSRjd19udW0gKz0gMjsKCQkJCQkJCSRwb3MgPSAkZXBvczsKCQkJCQkJCS8vIDEuIElmIHRoZSBDNDAgZW5jb2RpbmcgaXMgYXQgdGhlIHBvaW50IG9mIHN0YXJ0aW5nIGEgbmV3IGRvdWJsZSBzeW1ib2wgY2hhcmFjdGVyIGFuZCBpZiB0aGUgbG9vay1haGVhZCB0ZXN0IChzdGFydGluZyBhdCBzdGVwIEopIGluZGljYXRlcyBhbm90aGVyIG1vZGUsIHN3aXRjaCB0byB0aGF0IG1vZGUuCgkJCQkJCQkkbmV3ZW5jID0gJHRoaXMtPmxvb2tBaGVhZFRlc3QoJGRhdGEsICRwb3MsICRlbmMpOwoJCQkJCQkJaWYgKCRuZXdlbmMgIT0gJGVuYykgewoJCQkJCQkJCS8vIHN3aXRjaCB0byBuZXcgZW5jb2RpbmcKCQkJCQkJCQkkZW5jID0gJG5ld2VuYzsKCQkJCQkJCQlpZiAoJGVuYyAhPSBFTkNfQVNDSUkpIHsKCQkJCQkJCQkJLy8gc2V0IHVubGF0Y2ggY2hhcmFjdGVyCgkJCQkJCQkJCSRjd1tdID0gJHRoaXMtPmdldFN3aXRjaEVuY29kaW5nQ29kZXdvcmQoRU5DX0FTQ0lJKTsKCQkJCQkJCQkJKyskY3dfbnVtOwoJCQkJCQkJCX0KCQkJCQkJCQkkY3dbXSA9ICR0aGlzLT5nZXRTd2l0Y2hFbmNvZGluZ0NvZGV3b3JkKCRlbmMpOwoJCQkJCQkJCSsrJGN3X251bTsKCQkJCQkJCQkkcG9zIC09ICRwOwoJCQkJCQkJCSRwID0gMDsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0gd2hpbGUgKCgkcCA+IDApIEFORCAoJGVwb3MgPCAkZGF0YV9sZW5naHQpKTsKCQkJCQkvLyBwcm9jZXNzIGxhc3QgZGF0YSAoaWYgYW55KQoJCQkJCWlmICgkcCA+IDApIHsKCQkJCQkJLy8gZ2V0IHJlbWFpbmluZyBudW1iZXIgb2YgZGF0YSBzeW1ib2xzCgkJCQkJCSRjd3IgPSAoJHRoaXMtPmdldE1heERhdGFDb2Rld29yZHMoJGN3X251bSkgLSAkY3dfbnVtKTsKCQkJCQkJaWYgKCgkY3dyID09IDEpIEFORCAoJHAgPT0gMSkpIHsKCQkJCQkJCS8vIGQuIElmIG9uZSBzeW1ib2wgY2hhcmFjdGVyIHJlbWFpbnMgYW5kIG9uZSBDNDAgdmFsdWUgKGRhdGEgY2hhcmFjdGVyKSByZW1haW5zIHRvIGJlIGVuY29kZWQKCQkJCQkJCSRjMSA9IGFycmF5X3NoaWZ0KCR0ZW1wX2N3KTsKCQkJCQkJCS0tJHA7CgkJCQkJCQkkY3dbXSA9ICgkY2hyICsgMSk7CgkJCQkJCQkrKyRjd19udW07CgkJCQkJCQkkcG9zID0gJGVwb3M7CgkJCQkJCX0gZWxzZWlmICgoJGN3ciA9PSAyKSBBTkQgKCRwID09IDEpKSB7CgkJCQkJCQkvLyBjLiBJZiB0d28gc3ltYm9sIGNoYXJhY3RlcnMgcmVtYWluIGFuZCBvbmx5IG9uZSBDNDAgdmFsdWUgKGRhdGEgY2hhcmFjdGVyKSByZW1haW5zIHRvIGJlIGVuY29kZWQKCQkJCQkJCSRjMSA9IGFycmF5X3NoaWZ0KCR0ZW1wX2N3KTsKCQkJCQkJCS0tJHA7CgkJCQkJCQkkY3dbXSA9IDI1NDsKCQkJCQkJCSRjd1tdID0gKCRjaHIgKyAxKTsKCQkJCQkJCSRjd19udW0gKz0gMjsKCQkJCQkJCSRwb3MgPSAkZXBvczsKCQkJCQkJfSBlbHNlaWYgKCgkY3dyID09IDIpIEFORCAoJHAgPT0gMikpIHsKCQkJCQkJCS8vIGIuIElmIHR3byBzeW1ib2wgY2hhcmFjdGVycyByZW1haW4gYW5kIHR3byBDNDAgdmFsdWVzIHJlbWFpbiB0byBiZSBlbmNvZGVkCgkJCQkJCQkkYzEgPSBhcnJheV9zaGlmdCgkdGVtcF9jdyk7CgkJCQkJCQkkYzIgPSBhcnJheV9zaGlmdCgkdGVtcF9jdyk7CgkJCQkJCQkkcCAtPSAyOwoJCQkJCQkJJHRtcCA9ICgoMTYwMCAqICRjMSkgKyAoNDAgKiAkYzIpICsgMSk7CgkJCQkJCQkkY3dbXSA9ICgkdG1wID4+IDgpOwoJCQkJCQkJJGN3W10gPSAoJHRtcCAlIDI1Nik7CgkJCQkJCQkkY3dfbnVtICs9IDI7CgkJCQkJCQkkcG9zID0gJGVwb3M7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkvLyBzd2l0Y2ggdG8gQVNDSUkgZW5jb2RpbmcKCQkJCQkJCWlmICgkZW5jICE9IEVOQ19BU0NJSSkgewoJCQkJCQkJCSRlbmMgPSBFTkNfQVNDSUk7CgkJCQkJCQkJJGN3W10gPSAkdGhpcy0+Z2V0U3dpdGNoRW5jb2RpbmdDb2Rld29yZCgkZW5jKTsKCQkJCQkJCQkrKyRjd19udW07CgkJCQkJCQkJJHBvcyA9ICgkZXBvcyAtICRwKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgRU5DX0VERjogeyAvLyBGLiBXaGlsZSBpbiBFRElGQUNUIChFREYpIGVuY29kYXRpb24KCQkJCQkvLyBpbml0aWFsaXplIHRlbXBvcmFyeSBhcnJheSB3aXRoIDAgbGVuZ2h0CgkJCQkJJHRlbXBfY3cgPSBhcnJheSgpOwoJCQkJCSRlcG9zID0gJHBvczsKCQkJCQkkZmllbGRfbGVuZ2h0ID0gMDsKCQkJCQkkbmV3ZW5jID0gJGVuYzsKCQkJCQlkbyB7CgkJCQkJCS8vIDIuIHByb2Nlc3MgdGhlIG5leHQgY2hhcmFjdGVyIGluIEVESUZBQ1QgZW5jb2RhdGlvbi4KCQkJCQkJJGNociA9IG9yZCgkZGF0YVskZXBvc10pOwoJCQkJCQlpZiAoJHRoaXMtPmlzQ2hhck1vZGUoJGNociwgRU5DX0VERikpIHsKCQkJCQkJCSsrJGVwb3M7CgkJCQkJCQkkdGVtcF9jd1tdID0gJGNocjsKCQkJCQkJCSsrJGZpZWxkX2xlbmdodDsKCQkJCQkJfQoJCQkJCQlpZiAoKCRmaWVsZF9sZW5naHQgPT0gNCkgT1IgKCRlcG9zID09ICRkYXRhX2xlbmdodCkgT1IgISR0aGlzLT5pc0NoYXJNb2RlKCRjaHIsIEVOQ19FREYpKSB7CgkJCQkJCQlpZiAoKCRlcG9zID09ICRkYXRhX2xlbmdodCkgQU5EICgkZmllbGRfbGVuZ2h0IDwgMykpIHsKCQkJCQkJCQkkZW5jID0gRU5DX0FTQ0lJOwoJCQkJCQkJCSRjd1tdID0gJHRoaXMtPmdldFN3aXRjaEVuY29kaW5nQ29kZXdvcmQoJGVuYyk7CgkJCQkJCQkJKyskY3dfbnVtOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCRmaWVsZF9sZW5naHQgPCA0KSB7CgkJCQkJCQkJLy8gc2V0IHVubGF0Y2ggY2hhcmFjdGVyCgkJCQkJCQkJJHRlbXBfY3dbXSA9IDB4MWY7CgkJCQkJCQkJKyskZmllbGRfbGVuZ2h0OwoJCQkJCQkJCS8vIGZpbGwgZW1wdHkgY2hhcmFjdGVycwoJCQkJCQkJCWZvciAoJGkgPSAkZmllbGRfbGVuZ2h0OyAkaSA8IDQ7ICsrJGkpIHsKCQkJCQkJCQkJJHRlbXBfY3dbXSA9IDA7CgkJCQkJCQkJfQoJCQkJCQkJCSRlbmMgPSBFTkNfQVNDSUk7CgkJCQkJCQkJJHRoaXMtPmxhc3RfZW5jID0gJGVuYzsKCQkJCQkJCX0KCQkJCQkJCS8vIGVuY29kZXMgZm91ciBkYXRhIGNoYXJhY3RlcnMgaW4gdGhyZWUgY29kZXdvcmRzCgkJCQkJCQkkdGN3ID0gKCgkdGVtcF9jd1swXSAmIDB4M0YpIDw8IDIpICsgKCgkdGVtcF9jd1sxXSAmIDB4MzApID4+IDQpOwoJCQkJCQkJaWYgKCR0Y3cgPiAwKSB7CgkJCQkJCQkJJGN3W10gPSAkdGN3OwoJCQkJCQkJCSRjd19udW0rKzsKCQkJCQkJCX0KCQkJCQkJCSR0Y3c9ICgoJHRlbXBfY3dbMV0gJiAweDBGKSA8PCA0KSArICgoJHRlbXBfY3dbMl0gJiAweDNDKSA+PiAyKTsKCQkJCQkJCWlmICgkdGN3ID4gMCkgewoJCQkJCQkJCSRjd1tdID0gJHRjdzsKCQkJCQkJCQkkY3dfbnVtKys7CgkJCQkJCQl9CgkJCQkJCQkkdGN3ID0gKCgkdGVtcF9jd1syXSAmIDB4MDMpIDw8IDYpICsgKCR0ZW1wX2N3WzNdICYgMHgzRik7CgkJCQkJCQlpZiAoJHRjdyA+IDApIHsKCQkJCQkJCQkkY3dbXSA9ICR0Y3c7CgkJCQkJCQkJJGN3X251bSsrOwoJCQkJCQkJfQoJCQkJCQkJJHRlbXBfY3cgPSBhcnJheSgpOwoJCQkJCQkJJHBvcyA9ICRlcG9zOwoJCQkJCQkJJGZpZWxkX2xlbmdodCA9IDA7CgkJCQkJCQlpZiAoJGVuYyA9PSBFTkNfQVNDSUkpIHsKCQkJCQkJCQlicmVhazsgLy8gZXhpdCBmcm9tIEVESUZBQ1QgbW9kZQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSB3aGlsZSAoJGVwb3MgPCAkZGF0YV9sZW5naHQpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBFTkNfQkFTRTI1NjogeyAvLyBHLiBXaGlsZSBpbiBCYXNlIDI1NiAoQjI1NikgZW5jb2RhdGlvbgoJCQkJCS8vIGluaXRpYWxpemUgdGVtcG9yYXJ5IGFycmF5IHdpdGggMCBsZW5naHQKCQkJCQkkdGVtcF9jdyA9IGFycmF5KCk7CgkJCQkJJGZpZWxkX2xlbmdodCA9IDA7CgkJCQkJd2hpbGUgKCgkcG9zIDwgJGRhdGFfbGVuZ2h0KSBBTkQgKCRmaWVsZF9sZW5naHQgPD0gMTU1NSkpIHsKCQkJCQkJJG5ld2VuYyA9ICR0aGlzLT5sb29rQWhlYWRUZXN0KCRkYXRhLCAkcG9zLCAkZW5jKTsKCQkJCQkJaWYgKCRuZXdlbmMgIT0gJGVuYykgewoJCQkJCQkJLy8gMS4gSWYgdGhlIGxvb2stYWhlYWQgdGVzdCAoc3RhcnRpbmcgYXQgc3RlcCBKKSBpbmRpY2F0ZXMgYW5vdGhlciBtb2RlLCBzd2l0Y2ggdG8gdGhhdCBtb2RlLgoJCQkJCQkJJGVuYyA9ICRuZXdlbmM7CgkJCQkJCQkkY3dbXSA9ICR0aGlzLT5nZXRTd2l0Y2hFbmNvZGluZ0NvZGV3b3JkKCRlbmMpOwoJCQkJCQkJKyskY3dfbnVtOwoJCQkJCQkJYnJlYWs7IC8vIGV4aXQgZnJvbSBCMjU2IG1vZGUKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCS8vIDIuIE90aGVyd2lzZSwgcHJvY2VzcyB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gQmFzZSAyNTYgZW5jb2RhdGlvbi4KCQkJCQkJCSRjaHIgPSBvcmQoJGRhdGFbJHBvc10pOwoJCQkJCQkJKyskcG9zOwoJCQkJCQkJJHRlbXBfY3dbXSA9ICRjaHI7CgkJCQkJCQkrKyRmaWVsZF9sZW5naHQ7CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gc2V0IGZpZWxkIGxlbmdodAoJCQkJCWlmICgkZmllbGRfbGVuZ2h0IDw9IDI0OSkgewoJCQkJCQkkY3dbXSA9ICR0aGlzLT5nZXQyNTVTdGF0ZUNvZGV3b3JkKCRmaWVsZF9sZW5naHQsICgkY3dfbnVtICsgMSkpOwoJCQkJCQkrKyRjd19udW07CgkJCQkJfSBlbHNlIHsKCQkJCQkJJGN3W10gPSAkdGhpcy0+Z2V0MjU1U3RhdGVDb2Rld29yZCgoZmxvb3IoJGZpZWxkX2xlbmdodCAvIDI1MCkgKyAyNDkpLCAoJGN3X251bSArIDEpKTsKCQkJCQkJJGN3W10gPSAkdGhpcy0+Z2V0MjU1U3RhdGVDb2Rld29yZCgoJGZpZWxkX2xlbmdodCAlIDI1MCksICgkY3dfbnVtICsgMikpOwoJCQkJCQkkY3dfbnVtICs9IDI7CgkJCQkJfQoJCQkJCWlmICghZW1wdHkoJHRlbXBfY3cpKSB7CgkJCQkJCS8vIGFkZCBCMjU2IGZpZWxkCgkJCQkJCWZvcmVhY2ggKCR0ZW1wX2N3IGFzICRwID0+ICRjaHQpIHsKCQkJCQkJCSRjd1tdID0gJHRoaXMtPmdldDI1NVN0YXRlQ29kZXdvcmQoJGNodCwgKCRjd19udW0gKyAkcCArIDEpKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJfSAvLyBlbmQgb2Ygc3dpdGNoIGVuYwoJCX0gLy8gZW5kIG9mIHdoaWxlCgkJcmV0dXJuICRjdzsKCX0KCgkvKioKCSAqIFBsYWNlcyAiY2hyK2JpdCIgd2l0aCBhcHByb3ByaWF0ZSB3cmFwcGluZyB3aXRoaW4gYXJyYXlbXS4KCSAqIChBbm5leCBGIC0gRUNDIDIwMCBzeW1ib2wgY2hhcmFjdGVyIHBsYWNlbWVudCkKCSAqIEBwYXJhbSAkbWFyciAoYXJyYXkpIEFycmF5IG9mIHN5bWJvbHMuCgkgKiBAcGFyYW0gJG5yb3cgKGludCkgTnVtYmVyIG9mIHJvd3MuCgkgKiBAcGFyYW0gJG5jb2wgKGludCkgTnVtYmVyIG9mIGNvbHVtbnMuCgkgKiBAcGFyYW0gJHJvdyAoaW50KSBSb3cgbnVtYmVyLgoJICogQHBhcmFtICRjb2wgKGludCkgQ29sdW1uIG51bWJlci4KCSAqIEBwYXJhbSAkY2hyIChpbnQpIENoYXIgYnl0ZS4KCSAqIEBwYXJhbSAkYml0IChpbnQpIEJpdC4KCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRyb3csICRjb2wsICRjaHIsICRiaXQpIHsKCQlpZiAoJHJvdyA8IDApIHsKCQkJJHJvdyArPSAkbnJvdzsKCQkJJGNvbCArPSAoNCAtICgoJG5yb3cgKyA0KSAlIDgpKTsKCQl9CgkJaWYgKCRjb2wgPCAwKSB7CgkJCSRjb2wgKz0gJG5jb2w7CgkJCSRyb3cgKz0gKDQgLSAoKCRuY29sICsgNCkgJSA4KSk7CgkJfQoJCSRtYXJyWygoJHJvdyAqICRuY29sKSArICRjb2wpXSA9ICgoMTAgKiAkY2hyKSArICRiaXQpOwoJCXJldHVybiAkbWFycjsKCX0KCgkvKioKCSAqIFBsYWNlcyB0aGUgOCBiaXRzIG9mIGEgdXRhaC1zaGFwZWQgc3ltYm9sIGNoYXJhY3Rlci4KCSAqIChBbm5leCBGIC0gRUNDIDIwMCBzeW1ib2wgY2hhcmFjdGVyIHBsYWNlbWVudCkKCSAqIEBwYXJhbSAkbWFyciAoYXJyYXkpIEFycmF5IG9mIHN5bWJvbHMuCgkgKiBAcGFyYW0gJG5yb3cgKGludCkgTnVtYmVyIG9mIHJvd3MuCgkgKiBAcGFyYW0gJG5jb2wgKGludCkgTnVtYmVyIG9mIGNvbHVtbnMuCgkgKiBAcGFyYW0gJHJvdyAoaW50KSBSb3cgbnVtYmVyLgoJICogQHBhcmFtICRjb2wgKGludCkgQ29sdW1uIG51bWJlci4KCSAqIEBwYXJhbSAkY2hyIChpbnQpIENoYXIgYnl0ZS4KCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBsYWNlVXRhaCgkbWFyciwgJG5yb3csICRuY29sLCAkcm93LCAkY29sLCAkY2hyKSB7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJHJvdy0yLCAkY29sLTIsICRjaHIsIDEpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRyb3ctMiwgJGNvbC0xLCAkY2hyLCAyKTsKCQkkbWFyciA9ICR0aGlzLT5wbGFjZU1vZHVsZSgkbWFyciwgJG5yb3csICRuY29sLCAkcm93LTEsICRjb2wtMiwgJGNociwgMyk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJHJvdy0xLCAkY29sLTEsICRjaHIsIDQpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRyb3ctMSwgJGNvbCwgICAkY2hyLCA1KTsKCQkkbWFyciA9ICR0aGlzLT5wbGFjZU1vZHVsZSgkbWFyciwgJG5yb3csICRuY29sLCAkcm93LCAgICRjb2wtMiwgJGNociwgNik7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJHJvdywgICAkY29sLTEsICRjaHIsIDcpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRyb3csICAgJGNvbCwgICAkY2hyLCA4KTsKCQlyZXR1cm4gJG1hcnI7Cgl9CgoJLyoqCgkgKiBQbGFjZXMgdGhlIDggYml0cyBvZiB0aGUgZmlyc3Qgc3BlY2lhbCBjb3JuZXIgY2FzZS4KCSAqIChBbm5leCBGIC0gRUNDIDIwMCBzeW1ib2wgY2hhcmFjdGVyIHBsYWNlbWVudCkKCSAqIEBwYXJhbSAkbWFyciAoYXJyYXkpIEFycmF5IG9mIHN5bWJvbHMuCgkgKiBAcGFyYW0gJG5yb3cgKGludCkgTnVtYmVyIG9mIHJvd3MuCgkgKiBAcGFyYW0gJG5jb2wgKGludCkgTnVtYmVyIG9mIGNvbHVtbnMuCgkgKiBAcGFyYW0gJGNociAoaW50KSBDaGFyIGJ5dGUuCgkgKiBAcmV0dXJuIGFycmF5CgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwbGFjZUNvcm5lckEoJG1hcnIsICRucm93LCAkbmNvbCwgJGNocikgewoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTEsIDAsICAgICAgICRjaHIsIDEpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTEsIDEsICAgICAgICRjaHIsIDIpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTEsIDIsICAgICAgICRjaHIsIDMpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTIsICRjaHIsIDQpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTEsICRjaHIsIDUpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDEsICAgICAgICRuY29sLTEsICRjaHIsIDYpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDIsICAgICAgICRuY29sLTEsICRjaHIsIDcpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDMsICAgICAgICRuY29sLTEsICRjaHIsIDgpOwoJCXJldHVybiAkbWFycjsKCX0KCgkvKioKCSAqIFBsYWNlcyB0aGUgOCBiaXRzIG9mIHRoZSBzZWNvbmQgc3BlY2lhbCBjb3JuZXIgY2FzZS4KCSAqIChBbm5leCBGIC0gRUNDIDIwMCBzeW1ib2wgY2hhcmFjdGVyIHBsYWNlbWVudCkKCSAqIEBwYXJhbSAkbWFyciAoYXJyYXkpIEFycmF5IG9mIHN5bWJvbHMuCgkgKiBAcGFyYW0gJG5yb3cgKGludCkgTnVtYmVyIG9mIHJvd3MuCgkgKiBAcGFyYW0gJG5jb2wgKGludCkgTnVtYmVyIG9mIGNvbHVtbnMuCgkgKiBAcGFyYW0gJGNociAoaW50KSBDaGFyIGJ5dGUuCgkgKiBAcmV0dXJuIGFycmF5CgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwbGFjZUNvcm5lckIoJG1hcnIsICRucm93LCAkbmNvbCwgJGNocikgewoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTMsIDAsICAgICAgICRjaHIsIDEpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTIsIDAsICAgICAgICRjaHIsIDIpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsICRucm93LTEsIDAsICAgICAgICRjaHIsIDMpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTQsICRjaHIsIDQpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTMsICRjaHIsIDUpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTIsICRjaHIsIDYpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDAsICAgICAgICRuY29sLTEsICRjaHIsIDcpOwoJCSRtYXJyID0gJHRoaXMtPnBsYWNlTW9kdWxlKCRtYXJyLCAkbnJvdywgJG5jb2wsIDEsICAgICAgICRuY29sLTEsICRjaHIsIDgpOwoJCXJldHVybiAkbWFycjsKCX0KCgkvKioKCSAqIFBsYWNlcyB0aGUgOCBiaXRzIG9mIHRoZSB0aGlyZCBzcGVjaWFsIGNvcm5lciBjYXNlLgoJICogKEFubmV4IEYgLSBFQ0MgMjAwIHN5bWJvbCBjaGFyYWN0ZXIgcGxhY2VtZW50KQoJICogQHBhcmFtICRtYXJyIChhcnJheSkgQXJyYXkgb2Ygc3ltYm9scy4KCSAqIEBwYXJhbSAkbnJvdyAoaW50KSBOdW1iZXIgb2Ygcm93cy4KCSAqIEBwYXJhbSAkbmNvbCAoaW50KSBOdW1iZXIgb2YgY29sdW1ucy4KCSAqIEBwYXJhbSAkY2hyIChpbnQpIENoYXIgYnl0ZS4KCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBsYWNlQ29ybmVyQygkbWFyciwgJG5yb3csICRuY29sLCAkY2hyKSB7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJG5yb3ctMywgMCwgICAgICAgJGNociwgMSk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJG5yb3ctMiwgMCwgICAgICAgJGNociwgMik7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJG5yb3ctMSwgMCwgICAgICAgJGNociwgMyk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMCwgICAgICAgJG5jb2wtMiwgJGNociwgNCk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMCwgICAgICAgJG5jb2wtMSwgJGNociwgNSk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMSwgICAgICAgJG5jb2wtMSwgJGNociwgNik7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMiwgICAgICAgJG5jb2wtMSwgJGNociwgNyk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMywgICAgICAgJG5jb2wtMSwgJGNociwgOCk7CgkJcmV0dXJuICRtYXJyOwoJfQoKCS8qKgoJICogUGxhY2VzIHRoZSA4IGJpdHMgb2YgdGhlIGZvdXJ0aCBzcGVjaWFsIGNvcm5lciBjYXNlLgoJICogKEFubmV4IEYgLSBFQ0MgMjAwIHN5bWJvbCBjaGFyYWN0ZXIgcGxhY2VtZW50KQoJICogQHBhcmFtICRtYXJyIChhcnJheSkgQXJyYXkgb2Ygc3ltYm9scy4KCSAqIEBwYXJhbSAkbnJvdyAoaW50KSBOdW1iZXIgb2Ygcm93cy4KCSAqIEBwYXJhbSAkbmNvbCAoaW50KSBOdW1iZXIgb2YgY29sdW1ucy4KCSAqIEBwYXJhbSAkY2hyIChpbnQpIENoYXIgYnl0ZS4KCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHBsYWNlQ29ybmVyRCgkbWFyciwgJG5yb3csICRuY29sLCAkY2hyKSB7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJG5yb3ctMSwgMCwgICAgICAgJGNociwgMSk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgJG5yb3ctMSwgJG5jb2wtMSwgJGNociwgMik7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMCwgICAgICAgJG5jb2wtMywgJGNociwgMyk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMCwgICAgICAgJG5jb2wtMiwgJGNociwgNCk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMCwgICAgICAgJG5jb2wtMSwgJGNociwgNSk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMSwgICAgICAgJG5jb2wtMywgJGNociwgNik7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMSwgICAgICAgJG5jb2wtMiwgJGNociwgNyk7CgkJJG1hcnIgPSAkdGhpcy0+cGxhY2VNb2R1bGUoJG1hcnIsICRucm93LCAkbmNvbCwgMSwgICAgICAgJG5jb2wtMSwgJGNociwgOCk7CgkJcmV0dXJuICRtYXJyOwoJfQoKCS8qKgoJICogQnVpbGQgYSBwbGFjZW1lbnQgbWFwLgoJICogKEFubmV4IEYgLSBFQ0MgMjAwIHN5bWJvbCBjaGFyYWN0ZXIgcGxhY2VtZW50KQoJICogQHBhcmFtICRucm93IChpbnQpIE51bWJlciBvZiByb3dzLgoJICogQHBhcmFtICRuY29sIChpbnQpIE51bWJlciBvZiBjb2x1bW5zLgoJICogQHJldHVybiBhcnJheQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UGxhY2VtZW50TWFwKCRucm93LCAkbmNvbCkgewoJCS8vIGluaXRpYWxpemUgYXJyYXkgd2l0aCB6ZXJvcwoJCSRtYXJyID0gYXJyYXlfZmlsbCgwLCAoJG5yb3cgKiAkbmNvbCksIDApOwoJCS8vIHNldCBzdGFydGluZyB2YWx1ZXMKCQkkY2hyID0gMTsKCQkkcm93ID0gNDsKCQkkY29sID0gMDsKCQlkbyB7CgkJCS8vIHJlcGVhdGVkbHkgZmlyc3QgY2hlY2sgZm9yIG9uZSBvZiB0aGUgc3BlY2lhbCBjb3JuZXIgY2FzZXMsIHRoZW4KCQkJaWYgKCgkcm93ID09ICRucm93KSBBTkQgKCRjb2wgPT0gMCkpIHsKCQkJCSRtYXJyID0gJHRoaXMtPnBsYWNlQ29ybmVyQSgkbWFyciwgJG5yb3csICRuY29sLCAkY2hyKTsKCQkJCSsrJGNocjsKCQkJfQoJCQlpZiAoKCRyb3cgPT0gKCRucm93IC0gMikpIEFORCAoJGNvbCA9PSAwKSBBTkQgKCRuY29sICUgNCkpIHsKCQkJCSRtYXJyID0gJHRoaXMtPnBsYWNlQ29ybmVyQigkbWFyciwgJG5yb3csICRuY29sLCAkY2hyKTsKCQkJCSsrJGNocjsKCQkJfQoJCQlpZiAoKCRyb3cgPT0gKCRucm93IC0gMikpIEFORCAoJGNvbCA9PSAwKSBBTkQgKCgkbmNvbCAlIDgpID09IDQpKSB7CgkJCQkkbWFyciA9ICR0aGlzLT5wbGFjZUNvcm5lckMoJG1hcnIsICRucm93LCAkbmNvbCwgJGNocik7CgkJCQkrKyRjaHI7CgkJCX0KCQkJaWYgKCgkcm93ID09ICgkbnJvdyArIDQpKSBBTkQgKCRjb2wgPT0gMikgQU5EICghKCRuY29sICUgOCkpKSB7CgkJCQkkbWFyciA9ICR0aGlzLT5wbGFjZUNvcm5lckQoJG1hcnIsICRucm93LCAkbmNvbCwgJGNocik7CgkJCQkrKyRjaHI7CgkJCX0KCQkJLy8gc3dlZXAgdXB3YXJkIGRpYWdvbmFsbHksIGluc2VydGluZyBzdWNjZXNzaXZlIGNoYXJhY3RlcnMsCgkJCWRvIHsKCQkJCWlmICgoJHJvdyA8ICRucm93KSBBTkQgKCRjb2wgPj0gMCkgQU5EICghJG1hcnJbKCgkcm93ICogJG5jb2wpICsgJGNvbCldKSkgewoJCQkJCSRtYXJyID0gJHRoaXMtPnBsYWNlVXRhaCgkbWFyciwgJG5yb3csICRuY29sLCAkcm93LCAkY29sLCAkY2hyKTsKCQkJCQkrKyRjaHI7CgkJCQl9CgkJCQkkcm93IC09IDI7CgkJCQkkY29sICs9IDI7CgkJCX0gd2hpbGUgKCgkcm93ID49IDApIEFORCAoJGNvbCA8ICRuY29sKSk7CgkJCSsrJHJvdzsKCQkJJGNvbCArPSAzOwoJCQkvLyAmIHRoZW4gc3dlZXAgZG93bndhcmQgZGlhZ29uYWxseSwgaW5zZXJ0aW5nIHN1Y2Nlc3NpdmUgY2hhcmFjdGVycywuLi4KCQkJZG8gewoJCQkJaWYgKCgkcm93ID49IDApIEFORCAoJGNvbCA8ICRuY29sKSBBTkQgKCEkbWFyclsoKCRyb3cgKiAkbmNvbCkgKyAkY29sKV0pKSB7CgkJCQkJJG1hcnIgPSAkdGhpcy0+cGxhY2VVdGFoKCRtYXJyLCAkbnJvdywgJG5jb2wsICRyb3csICRjb2wsICRjaHIpOwoJCQkJCSsrJGNocjsKCQkJCX0KCQkJCSRyb3cgKz0gMjsKCQkJCSRjb2wgLT0gMjsKCQkJfSB3aGlsZSAoKCRyb3cgPCAkbnJvdykgQU5EICgkY29sID49IDApKTsKCQkJJHJvdyArPSAzOwoJCQkrKyRjb2w7CgkJCS8vIC4uLiB1bnRpbCB0aGUgZW50aXJlIGFycmF5IGlzIHNjYW5uZWQKCQl9IHdoaWxlICgoJHJvdyA8ICRucm93KSBPUiAoJGNvbCA8ICRuY29sKSk7CgkJLy8gbGFzdGx5LCBpZiB0aGUgbG93ZXIgcmlnaHRoYW5kIGNvcm5lciBpcyB1bnRvdWNoZWQsIGZpbGwgaW4gZml4ZWQgcGF0dGVybgoJCWlmICghJG1hcnJbKCgkbnJvdyAqICRuY29sKSAtIDEpXSkgewoJCQkkbWFyclsoKCRucm93ICogJG5jb2wpIC0gMSldID0gMTsKCQkJJG1hcnJbKCgkbnJvdyAqICRuY29sKSAtICRuY29sIC0gMildID0gMTsKCQl9CgkJcmV0dXJuICRtYXJyOwoJfQoKfSAvLyBlbmQgRGF0YU1hdHJpeCBjbGFzcwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/barcodes/pdf417.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogcGRmNDE3LnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDUKLy8gQmVnaW4gICAgICAgOiAyMDEwLTA2LTAzCi8vIExhc3QgVXBkYXRlIDogMjAxNC0wNC0yNQovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEzICBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQKLy8KLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVENQREYgc29mdHdhcmUgbGlicmFyeS4KLy8KLy8gVENQREYgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAovLyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwovLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKLy8gTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8KLy8gVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgovLyBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gREVTQ1JJUFRJT04gOgovLwovLyBDbGFzcyB0byBjcmVhdGUgUERGNDE3IGJhcmNvZGUgYXJyYXlzIGZvciBUQ1BERiBjbGFzcy4KLy8gUERGNDE3IChJU08vSUVDIDE1NDM4OjIwMDYpIGlzIGEgMi1kaW1lbnNpb25hbCBzdGFja2VkIGJhciBjb2RlIGNyZWF0ZWQgYnkgU3ltYm9sIFRlY2hub2xvZ2llcyBpbiAxOTkxLgovLyBJdCBpcyBvbmUgb2YgdGhlIG1vc3QgcG9wdWxhciAyRCBjb2RlcyBiZWNhdXNlIG9mIGl0cyBhYmlsaXR5IHRvIGJlIHJlYWQgd2l0aCBzbGlnaHRseSBtb2RpZmllZCBoYW5kaGVsZCBsYXNlciBvciBsaW5lYXIgQ0NEIHNjYW5uZXJzLgovLyBURUNITklDQUwgREFUQSAvIEZFQVRVUkVTIE9GIFBERjQxNzoKLy8JCUVuY29kYWJsZSBDaGFyYWN0ZXIgU2V0OiAgICAgQWxsIDEyOCBBU0NJSSBDaGFyYWN0ZXJzIChpbmNsdWRpbmcgZXh0ZW5kZWQpCi8vCQlDb2RlIFR5cGU6ICAgICAgICAgICAgICAgICAgIENvbnRpbnVvdXMsIE11bHRpLVJvdwovLwkJU3ltYm9sIEhlaWdodDogICAgICAgICAgICAgICAzIC0gOTAgUm93cwovLwkJU3ltYm9sIFdpZHRoOiAgICAgICAgICAgICAgICA5MFggLSA1ODNYCi8vCQlCaWRpcmVjdGlvbmFsIERlY29kaW5nOiAgICAgIFllcwovLwkJRXJyb3IgQ29ycmVjdGlvbiBDaGFyYWN0ZXJzOiAyIC0gNTEyCi8vCQlNYXhpbXVtIERhdGEgQ2hhcmFjdGVyczogICAgIDE4NTAgdGV4dCwgMjcxMCBkaWdpdHMsIDExMDggYnl0ZXMKLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogQ2xhc3MgdG8gY3JlYXRlIFBERjQxNyBiYXJjb2RlIGFycmF5cyBmb3IgVENQREYgY2xhc3MuCiAqIFBERjQxNyAoSVNPL0lFQyAxNTQzODoyMDA2KSBpcyBhIDItZGltZW5zaW9uYWwgc3RhY2tlZCBiYXIgY29kZSBjcmVhdGVkIGJ5IFN5bWJvbCBUZWNobm9sb2dpZXMgaW4gMTk5MS4KICogKHJlcXVpcmVzIFBIUCBiY21hdGggZXh0ZW5zaW9uKQogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKiBAdmVyc2lvbiAxLjAuMDA1CiAqLwoKLy8gZGVmaW5pdGlvbnMKaWYgKCFkZWZpbmVkKCdQREY0MTdERUZTJykpIHsKCgkvKioKCSAqIEluZGljYXRlIHRoYXQgZGVmaW5pdGlvbnMgZm9yIHRoaXMgY2xhc3MgYXJlIHNldAoJICovCglkZWZpbmUoJ1BERjQxN0RFRlMnLCB0cnVlKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogUm93IGhlaWdodCByZXNwZWN0IFggZGltZW5zaW9uIG9mIHNpbmdsZSBtb2R1bGUKCSAqLwoJZGVmaW5lKCdST1dIRUlHSFQnLCA0KTsKCgkvKioKCSAqIEhvcml6b250YWwgcXVpZXQgem9uZSBpbiBtb2R1bGVzCgkgKi8KCWRlZmluZSgnUVVJRVRIJywgMik7CgoJLyoqCgkgKiBWZXJ0aWNhbCBxdWlldCB6b25lIGluIG1vZHVsZXMKCSAqLwoJZGVmaW5lKCdRVUlFVFYnLCAyKTsKCn0gLy8gZW5kIG9mIGRlZmluaXRpb25zCgovLyAjKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMKCi8qKgogKiBAY2xhc3MgUERGNDE3CiAqIENsYXNzIHRvIGNyZWF0ZSBQREY0MTcgYmFyY29kZSBhcnJheXMgZm9yIFRDUERGIGNsYXNzLgogKiBQREY0MTcgKElTTy9JRUMgMTU0Mzg6MjAwNikgaXMgYSAyLWRpbWVuc2lvbmFsIHN0YWNrZWQgYmFyIGNvZGUgY3JlYXRlZCBieSBTeW1ib2wgVGVjaG5vbG9naWVzIGluIDE5OTEuCiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMDMKICovCmNsYXNzIFBERjQxNyB7CgoJLyoqCgkgKiBCYXJjb2RlIGFycmF5IHRvIGJlIHJldHVybmVkIHdoaWNoIGlzIHJlYWRhYmxlIGJ5IFRDUERGLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOwoKCS8qKgoJICogU3RhcnQgcGF0dGVybi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRzdGFydF9wYXR0ZXJuID0gJzExMTExMTExMDEwMTAxMDAwJzsKCgkvKioKCSAqIFN0b3AgcGF0dGVybi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRzdG9wX3BhdHRlcm4gPSAnMTExMTExMTAxMDAwMTAxMDAxJzsKCgkvKioKCSAqIEFycmF5IG9mIHRleHQgQ29tcGFjdGlvbiBTdWItTW9kZXMgKHZhbHVlcyAweEZCIC0gMHhGRiBhcmUgdXNlZCBmb3Igc3VibW9kZSBjaGFuZ2VycykuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkdGV4dHN1Ym1vZGVzID0gYXJyYXkoCgkJYXJyYXkoMHg0MSwweDQyLDB4NDMsMHg0NCwweDQ1LDB4NDYsMHg0NywweDQ4LDB4NDksMHg0YSwweDRiLDB4NGMsMHg0ZCwweDRlLDB4NGYsMHg1MCwweDUxLDB4NTIsMHg1MywweDU0LDB4NTUsMHg1NiwweDU3LDB4NTgsMHg1OSwweDVhLDB4MjAsMHhGRCwweEZFLDB4RkYpLCAvLyBBbHBoYQoJCWFycmF5KDB4NjEsMHg2MiwweDYzLDB4NjQsMHg2NSwweDY2LDB4NjcsMHg2OCwweDY5LDB4NmEsMHg2YiwweDZjLDB4NmQsMHg2ZSwweDZmLDB4NzAsMHg3MSwweDcyLDB4NzMsMHg3NCwweDc1LDB4NzYsMHg3NywweDc4LDB4NzksMHg3YSwweDIwLDB4RkQsMHhGRSwweEZGKSwgLy8gTG93ZXIKCQlhcnJheSgweDMwLDB4MzEsMHgzMiwweDMzLDB4MzQsMHgzNSwweDM2LDB4MzcsMHgzOCwweDM5LDB4MjYsMHgwZCwweDA5LDB4MmMsMHgzYSwweDIzLDB4MmQsMHgyZSwweDI0LDB4MmYsMHgyYiwweDI1LDB4MmEsMHgzZCwweDVlLDB4RkIsMHgyMCwweEZELDB4RkUsMHhGRiksIC8vIE1peGVkCgkJYXJyYXkoMHgzYiwweDNjLDB4M2UsMHg0MCwweDViLDB4NWMsMHg1ZCwweDVmLDB4NjAsMHg3ZSwweDIxLDB4MGQsMHgwOSwweDJjLDB4M2EsMHgwYSwweDJkLDB4MmUsMHgyNCwweDJmLDB4MjIsMHg3YywweDJhLDB4MjgsMHgyOSwweDNmLDB4N2IsMHg3ZCwweDI3LDB4RkYpIC8vIFB1bnR1YWN0aW9uCgkpOwoKCS8qKgoJICogQXJyYXkgb2Ygc3dpdGNoaW5nIGNvZGVzIGZvciBUZXh0IENvbXBhY3Rpb24gU3ViLU1vZGVzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHRleHRsYXRjaCA9IGFycmF5KAoJCScwMScgPT4gYXJyYXkoMjcpLCAnMDInID0+IGFycmF5KDI4KSwgJzAzJyA9PiBhcnJheSgyOCwyNSksIC8vCgkJJzEwJyA9PiBhcnJheSgyOCwyOCksICcxMicgPT4gYXJyYXkoMjgpLCAnMTMnID0+IGFycmF5KDI4LDI1KSwgLy8KCQknMjAnID0+IGFycmF5KDI4KSwgJzIxJyA9PiBhcnJheSgyNyksICcyMycgPT4gYXJyYXkoMjUpLCAvLwoJCSczMCcgPT4gYXJyYXkoMjkpLCAnMzEnID0+IGFycmF5KDI5LDI3KSwgJzMyJyA9PiBhcnJheSgyOSwyOCkgLy8KCSk7CgoJLyoqCgkgKiBDbHVzdGVycyBvZiBjb2Rld29yZHMgKDAsIDMsIDYpPGJyLz4KCSAqIFZhbHVlcyBhcmUgaGV4IGVxdWl2YWxlbnRzIG9mIGJpbmFyeSByZXByZXNlbnRhdGlvbiBvZiBiYXJzICgxID0gYmFyLCAwID0gc3BhY2UpLjxici8+CgkgKiBUaGUgY29kZXdvcmRzIG51bWJlcmVkIGZyb20gOTAwIHRvIDkyOCBoYXZlIHNwZWNpYWwgbWVhbmluZywgc29tZSBlbmFibGUgdG8gc3dpdGNoIGJldHdlZW4gbW9kZXMgaW4gb3JkZXIgdG8gb3B0aW1pc2UgdGhlIGNvZGU6PHVsPgoJICogPGxpPjkwMCA6IFN3aXRjaCB0byAiVGV4dCIgbW9kZTwvbGk+CgkgKiA8bGk+OTAxIDogU3dpdGNoIHRvICJCeXRlIiBtb2RlPC9saT4KCSAqIDxsaT45MDIgOiBTd2l0Y2ggdG8gIk51bWVyaWMiIG1vZGU8L2xpPgoJICogPGxpPjkwMyAtIDkxMiA6IFJlc2VydmVkPC9saT4KCSAqIDxsaT45MTMgOiBTd2l0Y2ggdG8gIk9jdGV0IiBvbmx5IGZvciB0aGUgbmV4dCBjb2Rld29yZDwvbGk+CgkgKiA8bGk+OTE0IC0gOTIwIDogUmVzZXJ2ZWQ8L2xpPgoJICogPGxpPjkyMSA6IEluaXRpYWxpemF0aW9uPC9saT4KCSAqIDxsaT45MjIgOiBUZXJtaW5hdG9yIGNvZGV3b3JkIGZvciBNYWNybyBQREYgY29udHJvbCBibG9jazwvbGk+CgkgKiA8bGk+OTIzIDogU2VxdWVuY2UgdGFnIHRvIGlkZW50aWZ5IHRoZSBiZWdpbm5pbmcgb2Ygb3B0aW9uYWwgZmllbGRzIGluIHRoZSBNYWNybyBQREYgY29udHJvbCBibG9jazwvbGk+CgkgKiA8bGk+OTI0IDogU3dpdGNoIHRvICJCeXRlIiBtb2RlIChJZiB0aGUgdG90YWwgbnVtYmVyIG9mIGJ5dGUgaXMgbXVsdGlwbGUgb2YgNik8L2xpPgoJICogPGxpPjkyNSA6IElkZW50aWZpZXIgZm9yIGEgdXNlciBkZWZpbmVkIEV4dGVuZGVkIENoYW5uZWwgSW50ZXJwcmV0YXRpb24gKEVDSSk8L2xpPgoJICogPGxpPjkyNiA6IElkZW50aWZpZXIgZm9yIGEgZ2VuZXJhbCBwdXJwb3NlIEVDSSBmb3JtYXQ8L2xpPgoJICogPGxpPjkyNyA6IElkZW50aWZpZXIgZm9yIGFuIEVDSSBvZiBhIGNoYXJhY3RlciBzZXQgb3IgY29kZSBwYWdlPC9saT4KCSAqIDxsaT45MjggOiBNYWNybyBtYXJrZXIgY29kZXdvcmQgdG8gaW5kaWNhdGUgdGhlIGJlZ2lubmluZyBvZiBhIE1hY3JvIFBERiBDb250cm9sIEJsb2NrPC9saT4KCSAqIDwvdWw+CgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkY2x1c3RlcnMgPSBhcnJheSgKCQlhcnJheSggLy8gY2x1c3RlciAwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCTB4MWQ1YzAsMHgxZWFmMCwweDFmNTdjLDB4MWQ0ZTAsMHgxZWE3OCwweDFmNTNlLDB4MWE4YzAsMHgxZDQ3MCwweDFhODYwLDB4MTUwNDAsIC8vICAxMAoJCQkweDFhODMwLDB4MTUwMjAsMHgxYWRjMCwweDFkNmYwLDB4MWViN2MsMHgxYWNlMCwweDFkNjc4LDB4MWViM2UsMHgxNThjMCwweDFhYzcwLCAvLyAgMjAKCQkJMHgxNTg2MCwweDE1ZGMwLDB4MWFlZjAsMHgxZDc3YywweDE1Y2UwLDB4MWFlNzgsMHgxZDczZSwweDE1YzcwLDB4MWFlM2MsMHgxNWVmMCwgLy8gIDMwCgkJCTB4MWFmN2MsMHgxNWU3OCwweDFhZjNlLDB4MTVmN2MsMHgxZjVmYSwweDFkMmUwLDB4MWU5NzgsMHgxZjRiZSwweDFhNGMwLDB4MWQyNzAsIC8vICA0MAoJCQkweDFlOTNjLDB4MWE0NjAsMHgxZDIzOCwweDE0ODQwLDB4MWE0MzAsMHgxZDIxYywweDE0ODIwLDB4MWE0MTgsMHgxNDgxMCwweDFhNmUwLCAvLyAgNTAKCQkJMHgxZDM3OCwweDFlOWJlLDB4MTRjYzAsMHgxYTY3MCwweDFkMzNjLDB4MTRjNjAsMHgxYTYzOCwweDFkMzFlLDB4MTRjMzAsMHgxYTYxYywgLy8gIDYwCgkJCTB4MTRlZTAsMHgxYTc3OCwweDFkM2JlLDB4MTRlNzAsMHgxYTczYywweDE0ZTM4LDB4MWE3MWUsMHgxNGY3OCwweDFhN2JlLDB4MTRmM2MsIC8vICA3MAoJCQkweDE0ZjFlLDB4MWEyYzAsMHgxZDE3MCwweDFlOGJjLDB4MWEyNjAsMHgxZDEzOCwweDFlODllLDB4MTQ0NDAsMHgxYTIzMCwweDFkMTFjLCAvLyAgODAKCQkJMHgxNDQyMCwweDFhMjE4LDB4MTQ0MTAsMHgxNDQwOCwweDE0NmMwLDB4MWEzNzAsMHgxZDFiYywweDE0NjYwLDB4MWEzMzgsMHgxZDE5ZSwgLy8gIDkwCgkJCTB4MTQ2MzAsMHgxYTMxYywweDE0NjE4LDB4MTQ2MGMsMHgxNDc3MCwweDFhM2JjLDB4MTQ3MzgsMHgxYTM5ZSwweDE0NzFjLDB4MTQ3YmMsIC8vIDEwMAoJCQkweDFhMTYwLDB4MWQwYjgsMHgxZTg1ZSwweDE0MjQwLDB4MWExMzAsMHgxZDA5YywweDE0MjIwLDB4MWExMTgsMHgxZDA4ZSwweDE0MjEwLCAvLyAxMTAKCQkJMHgxYTEwYywweDE0MjA4LDB4MWExMDYsMHgxNDM2MCwweDFhMWI4LDB4MWQwZGUsMHgxNDMzMCwweDFhMTljLDB4MTQzMTgsMHgxYTE4ZSwgLy8gMTIwCgkJCTB4MTQzMGMsMHgxNDMwNiwweDFhMWRlLDB4MTQzOGUsMHgxNDE0MCwweDFhMGIwLDB4MWQwNWMsMHgxNDEyMCwweDFhMDk4LDB4MWQwNGUsIC8vIDEzMAoJCQkweDE0MTEwLDB4MWEwOGMsMHgxNDEwOCwweDFhMDg2LDB4MTQxMDQsMHgxNDFiMCwweDE0MTk4LDB4MTQxOGMsMHgxNDBhMCwweDFkMDJlLCAvLyAxNDAKCQkJMHgxYTA0YywweDFhMDQ2LDB4MTQwODIsMHgxY2FlMCwweDFlNTc4LDB4MWYyYmUsMHgxOTRjMCwweDFjYTcwLDB4MWU1M2MsMHgxOTQ2MCwgLy8gMTUwCgkJCTB4MWNhMzgsMHgxZTUxZSwweDEyODQwLDB4MTk0MzAsMHgxMjgyMCwweDE5NmUwLDB4MWNiNzgsMHgxZTViZSwweDEyY2MwLDB4MTk2NzAsIC8vIDE2MAoJCQkweDFjYjNjLDB4MTJjNjAsMHgxOTYzOCwweDEyYzMwLDB4MTJjMTgsMHgxMmVlMCwweDE5Nzc4LDB4MWNiYmUsMHgxMmU3MCwweDE5NzNjLCAvLyAxNzAKCQkJMHgxMmUzOCwweDEyZTFjLDB4MTJmNzgsMHgxOTdiZSwweDEyZjNjLDB4MTJmYmUsMHgxZGFjMCwweDFlZDcwLDB4MWY2YmMsMHgxZGE2MCwgLy8gMTgwCgkJCTB4MWVkMzgsMHgxZjY5ZSwweDFiNDQwLDB4MWRhMzAsMHgxZWQxYywweDFiNDIwLDB4MWRhMTgsMHgxZWQwZSwweDFiNDEwLDB4MWRhMGMsIC8vIDE5MAoJCQkweDE5MmMwLDB4MWM5NzAsMHgxZTRiYywweDFiNmMwLDB4MTkyNjAsMHgxYzkzOCwweDFlNDllLDB4MWI2NjAsMHgxZGIzOCwweDFlZDllLCAvLyAyMDAKCQkJMHgxNmM0MCwweDEyNDIwLDB4MTkyMTgsMHgxYzkwZSwweDE2YzIwLDB4MWI2MTgsMHgxNmMxMCwweDEyNmMwLDB4MTkzNzAsMHgxYzliYywgLy8gMjEwCgkJCTB4MTZlYzAsMHgxMjY2MCwweDE5MzM4LDB4MWM5OWUsMHgxNmU2MCwweDFiNzM4LDB4MWRiOWUsMHgxNmUzMCwweDEyNjE4LDB4MTZlMTgsIC8vIDIyMAoJCQkweDEyNzcwLDB4MTkzYmMsMHgxNmY3MCwweDEyNzM4LDB4MTkzOWUsMHgxNmYzOCwweDFiNzllLDB4MTZmMWMsMHgxMjdiYywweDE2ZmJjLCAvLyAyMzAKCQkJMHgxMjc5ZSwweDE2ZjllLDB4MWQ5NjAsMHgxZWNiOCwweDFmNjVlLDB4MWIyNDAsMHgxZDkzMCwweDFlYzljLDB4MWIyMjAsMHgxZDkxOCwgLy8gMjQwCgkJCTB4MWVjOGUsMHgxYjIxMCwweDFkOTBjLDB4MWIyMDgsMHgxYjIwNCwweDE5MTYwLDB4MWM4YjgsMHgxZTQ1ZSwweDFiMzYwLDB4MTkxMzAsIC8vIDI1MAoJCQkweDFjODljLDB4MTY2NDAsMHgxMjIyMCwweDFkOTljLDB4MWM4OGUsMHgxNjYyMCwweDEyMjEwLDB4MTkxMGMsMHgxNjYxMCwweDFiMzBjLCAvLyAyNjAKCQkJMHgxOTEwNiwweDEyMjA0LDB4MTIzNjAsMHgxOTFiOCwweDFjOGRlLDB4MTY3NjAsMHgxMjMzMCwweDE5MTljLDB4MTY3MzAsMHgxYjM5YywgLy8gMjcwCgkJCTB4MTkxOGUsMHgxNjcxOCwweDEyMzBjLDB4MTIzMDYsMHgxMjNiOCwweDE5MWRlLDB4MTY3YjgsMHgxMjM5YywweDE2NzljLDB4MTIzOGUsIC8vIDI4MAoJCQkweDE2NzhlLDB4MTY3ZGUsMHgxYjE0MCwweDFkOGIwLDB4MWVjNWMsMHgxYjEyMCwweDFkODk4LDB4MWVjNGUsMHgxYjExMCwweDFkODhjLCAvLyAyOTAKCQkJMHgxYjEwOCwweDFkODg2LDB4MWIxMDQsMHgxYjEwMiwweDEyMTQwLDB4MTkwYjAsMHgxYzg1YywweDE2MzQwLDB4MTIxMjAsMHgxOTA5OCwgLy8gMzAwCgkJCTB4MWM4NGUsMHgxNjMyMCwweDFiMTk4LDB4MWQ4Y2UsMHgxNjMxMCwweDEyMTA4LDB4MTkwODYsMHgxNjMwOCwweDFiMTg2LDB4MTYzMDQsIC8vIDMxMAoJCQkweDEyMWIwLDB4MTkwZGMsMHgxNjNiMCwweDEyMTk4LDB4MTkwY2UsMHgxNjM5OCwweDFiMWNlLDB4MTYzOGMsMHgxMjE4NiwweDE2Mzg2LCAvLyAzMjAKCQkJMHgxNjNkYywweDE2M2NlLDB4MWIwYTAsMHgxZDg1OCwweDFlYzJlLDB4MWIwOTAsMHgxZDg0YywweDFiMDg4LDB4MWQ4NDYsMHgxYjA4NCwgLy8gMzMwCgkJCTB4MWIwODIsMHgxMjBhMCwweDE5MDU4LDB4MWM4MmUsMHgxNjFhMCwweDEyMDkwLDB4MTkwNGMsMHgxNjE5MCwweDFiMGNjLDB4MTkwNDYsIC8vIDM0MAoJCQkweDE2MTg4LDB4MTIwODQsMHgxNjE4NCwweDEyMDgyLDB4MTIwZDgsMHgxNjFkOCwweDE2MWNjLDB4MTYxYzYsMHgxZDgyYywweDFkODI2LCAvLyAzNTAKCQkJMHgxYjA0MiwweDE5MDJjLDB4MTIwNDgsMHgxNjBjOCwweDE2MGM0LDB4MTYwYzIsMHgxOGFjMCwweDFjNTcwLDB4MWUyYmMsMHgxOGE2MCwgLy8gMzYwCgkJCTB4MWM1MzgsMHgxMTQ0MCwweDE4YTMwLDB4MWM1MWMsMHgxMTQyMCwweDE4YTE4LDB4MTE0MTAsMHgxMTQwOCwweDExNmMwLDB4MThiNzAsIC8vIDM3MAoJCQkweDFjNWJjLDB4MTE2NjAsMHgxOGIzOCwweDFjNTllLDB4MTE2MzAsMHgxOGIxYywweDExNjE4LDB4MTE2MGMsMHgxMTc3MCwweDE4YmJjLCAvLyAzODAKCQkJMHgxMTczOCwweDE4YjllLDB4MTE3MWMsMHgxMTdiYywweDExNzllLDB4MWNkNjAsMHgxZTZiOCwweDFmMzVlLDB4MTlhNDAsMHgxY2QzMCwgLy8gMzkwCgkJCTB4MWU2OWMsMHgxOWEyMCwweDFjZDE4LDB4MWU2OGUsMHgxOWExMCwweDFjZDBjLDB4MTlhMDgsMHgxY2QwNiwweDE4OTYwLDB4MWM0YjgsIC8vIDQwMAoJCQkweDFlMjVlLDB4MTliNjAsMHgxODkzMCwweDFjNDljLDB4MTM2NDAsMHgxMTIyMCwweDFjZDljLDB4MWM0OGUsMHgxMzYyMCwweDE5YjE4LCAvLyA0MTAKCQkJMHgxODkwYywweDEzNjEwLDB4MTEyMDgsMHgxMzYwOCwweDExMzYwLDB4MTg5YjgsMHgxYzRkZSwweDEzNzYwLDB4MTEzMzAsMHgxY2RkZSwgLy8gNDIwCgkJCTB4MTM3MzAsMHgxOWI5YywweDE4OThlLDB4MTM3MTgsMHgxMTMwYywweDEzNzBjLDB4MTEzYjgsMHgxODlkZSwweDEzN2I4LDB4MTEzOWMsIC8vIDQzMAoJCQkweDEzNzljLDB4MTEzOGUsMHgxMTNkZSwweDEzN2RlLDB4MWRkNDAsMHgxZWViMCwweDFmNzVjLDB4MWRkMjAsMHgxZWU5OCwweDFmNzRlLCAvLyA0NDAKCQkJMHgxZGQxMCwweDFlZThjLDB4MWRkMDgsMHgxZWU4NiwweDFkZDA0LDB4MTk5NDAsMHgxY2NiMCwweDFlNjVjLDB4MWJiNDAsMHgxOTkyMCwgLy8gNDUwCgkJCTB4MWVlZGMsMHgxZTY0ZSwweDFiYjIwLDB4MWRkOTgsMHgxZWVjZSwweDFiYjEwLDB4MTk5MDgsMHgxY2M4NiwweDFiYjA4LDB4MWRkODYsIC8vIDQ2MAoJCQkweDE5OTAyLDB4MTExNDAsMHgxODhiMCwweDFjNDVjLDB4MTMzNDAsMHgxMTEyMCwweDE4ODk4LDB4MWM0NGUsMHgxNzc0MCwweDEzMzIwLCAvLyA0NzAKCQkJMHgxOTk5OCwweDFjY2NlLDB4MTc3MjAsMHgxYmI5OCwweDFkZGNlLDB4MTg4ODYsMHgxNzcxMCwweDEzMzA4LDB4MTk5ODYsMHgxNzcwOCwgLy8gNDgwCgkJCTB4MTExMDIsMHgxMTFiMCwweDE4OGRjLDB4MTMzYjAsMHgxMTE5OCwweDE4OGNlLDB4MTc3YjAsMHgxMzM5OCwweDE5OWNlLDB4MTc3OTgsIC8vIDQ5MAoJCQkweDFiYmNlLDB4MTExODYsMHgxMzM4NiwweDExMWRjLDB4MTMzZGMsMHgxMTFjZSwweDE3N2RjLDB4MTMzY2UsMHgxZGNhMCwweDFlZTU4LCAvLyA1MDAKCQkJMHgxZjcyZSwweDFkYzkwLDB4MWVlNGMsMHgxZGM4OCwweDFlZTQ2LDB4MWRjODQsMHgxZGM4MiwweDE5OGEwLDB4MWNjNTgsMHgxZTYyZSwgLy8gNTEwCgkJCTB4MWI5YTAsMHgxOTg5MCwweDFlZTZlLDB4MWI5OTAsMHgxZGNjYywweDFjYzQ2LDB4MWI5ODgsMHgxOTg4NCwweDFiOTg0LDB4MTk4ODIsIC8vIDUyMAoJCQkweDFiOTgyLDB4MTEwYTAsMHgxODg1OCwweDFjNDJlLDB4MTMxYTAsMHgxMTA5MCwweDE4ODRjLDB4MTczYTAsMHgxMzE5MCwweDE5OGNjLCAvLyA1MzAKCQkJMHgxODg0NiwweDE3MzkwLDB4MWI5Y2MsMHgxMTA4NCwweDE3Mzg4LDB4MTMxODQsMHgxMTA4MiwweDEzMTgyLDB4MTEwZDgsMHgxODg2ZSwgLy8gNTQwCgkJCTB4MTMxZDgsMHgxMTBjYywweDE3M2Q4LDB4MTMxY2MsMHgxMTBjNiwweDE3M2NjLDB4MTMxYzYsMHgxMTBlZSwweDE3M2VlLDB4MWRjNTAsIC8vIDU1MAoJCQkweDFlZTJjLDB4MWRjNDgsMHgxZWUyNiwweDFkYzQ0LDB4MWRjNDIsMHgxOTg1MCwweDFjYzJjLDB4MWI4ZDAsMHgxOTg0OCwweDFjYzI2LCAvLyA1NjAKCQkJMHgxYjhjOCwweDFkYzY2LDB4MWI4YzQsMHgxOTg0MiwweDFiOGMyLDB4MTEwNTAsMHgxODgyYywweDEzMGQwLDB4MTEwNDgsMHgxODgyNiwgLy8gNTcwCgkJCTB4MTcxZDAsMHgxMzBjOCwweDE5ODY2LDB4MTcxYzgsMHgxYjhlNiwweDExMDQyLDB4MTcxYzQsMHgxMzBjMiwweDE3MWMyLDB4MTMwZWMsIC8vIDU4MAoJCQkweDE3MWVjLDB4MTcxZTYsMHgxZWUxNiwweDFkYzIyLDB4MWNjMTYsMHgxOTgyNCwweDE5ODIyLDB4MTEwMjgsMHgxMzA2OCwweDE3MGU4LCAvLyA1OTAKCQkJMHgxMTAyMiwweDEzMDYyLDB4MTg1NjAsMHgxMGE0MCwweDE4NTMwLDB4MTBhMjAsMHgxODUxOCwweDFjMjhlLDB4MTBhMTAsMHgxODUwYywgLy8gNjAwCgkJCTB4MTBhMDgsMHgxODUwNiwweDEwYjYwLDB4MTg1YjgsMHgxYzJkZSwweDEwYjMwLDB4MTg1OWMsMHgxMGIxOCwweDE4NThlLDB4MTBiMGMsIC8vIDYxMAoJCQkweDEwYjA2LDB4MTBiYjgsMHgxODVkZSwweDEwYjljLDB4MTBiOGUsMHgxMGJkZSwweDE4ZDQwLDB4MWM2YjAsMHgxZTM1YywweDE4ZDIwLCAvLyA2MjAKCQkJMHgxYzY5OCwweDE4ZDEwLDB4MWM2OGMsMHgxOGQwOCwweDFjNjg2LDB4MThkMDQsMHgxMDk0MCwweDE4NGIwLDB4MWMyNWMsMHgxMWI0MCwgLy8gNjMwCgkJCTB4MTA5MjAsMHgxYzZkYywweDFjMjRlLDB4MTFiMjAsMHgxOGQ5OCwweDFjNmNlLDB4MTFiMTAsMHgxMDkwOCwweDE4NDg2LDB4MTFiMDgsIC8vIDY0MAoJCQkweDE4ZDg2LDB4MTA5MDIsMHgxMDliMCwweDE4NGRjLDB4MTFiYjAsMHgxMDk5OCwweDE4NGNlLDB4MTFiOTgsMHgxOGRjZSwweDExYjhjLCAvLyA2NTAKCQkJMHgxMDk4NiwweDEwOWRjLDB4MTFiZGMsMHgxMDljZSwweDExYmNlLDB4MWNlYTAsMHgxZTc1OCwweDFmM2FlLDB4MWNlOTAsMHgxZTc0YywgLy8gNjYwCgkJCTB4MWNlODgsMHgxZTc0NiwweDFjZTg0LDB4MWNlODIsMHgxOGNhMCwweDFjNjU4LDB4MTlkYTAsMHgxOGM5MCwweDFjNjRjLDB4MTlkOTAsIC8vIDY3MAoJCQkweDFjZWNjLDB4MWM2NDYsMHgxOWQ4OCwweDE4Yzg0LDB4MTlkODQsMHgxOGM4MiwweDE5ZDgyLDB4MTA4YTAsMHgxODQ1OCwweDExOWEwLCAvLyA2ODAKCQkJMHgxMDg5MCwweDFjNjZlLDB4MTNiYTAsMHgxMTk5MCwweDE4Y2NjLDB4MTg0NDYsMHgxM2I5MCwweDE5ZGNjLDB4MTA4ODQsMHgxM2I4OCwgLy8gNjkwCgkJCTB4MTE5ODQsMHgxMDg4MiwweDExOTgyLDB4MTA4ZDgsMHgxODQ2ZSwweDExOWQ4LDB4MTA4Y2MsMHgxM2JkOCwweDExOWNjLDB4MTA4YzYsIC8vIDcwMAoJCQkweDEzYmNjLDB4MTE5YzYsMHgxMDhlZSwweDExOWVlLDB4MTNiZWUsMHgxZWY1MCwweDFmN2FjLDB4MWVmNDgsMHgxZjdhNiwweDFlZjQ0LCAvLyA3MTAKCQkJMHgxZWY0MiwweDFjZTUwLDB4MWU3MmMsMHgxZGVkMCwweDFlZjZjLDB4MWU3MjYsMHgxZGVjOCwweDFlZjY2LDB4MWRlYzQsMHgxY2U0MiwgLy8gNzIwCgkJCTB4MWRlYzIsMHgxOGM1MCwweDFjNjJjLDB4MTljZDAsMHgxOGM0OCwweDFjNjI2LDB4MWJkZDAsMHgxOWNjOCwweDFjZTY2LDB4MWJkYzgsIC8vIDczMAoJCQkweDFkZWU2LDB4MThjNDIsMHgxYmRjNCwweDE5Y2MyLDB4MWJkYzIsMHgxMDg1MCwweDE4NDJjLDB4MTE4ZDAsMHgxMDg0OCwweDE4NDI2LCAvLyA3NDAKCQkJMHgxMzlkMCwweDExOGM4LDB4MThjNjYsMHgxN2JkMCwweDEzOWM4LDB4MTljZTYsMHgxMDg0MiwweDE3YmM4LDB4MWJkZTYsMHgxMThjMiwgLy8gNzUwCgkJCTB4MTdiYzQsMHgxMDg2YywweDExOGVjLDB4MTA4NjYsMHgxMzllYywweDExOGU2LDB4MTdiZWMsMHgxMzllNiwweDE3YmU2LDB4MWVmMjgsIC8vIDc2MAoJCQkweDFmNzk2LDB4MWVmMjQsMHgxZWYyMiwweDFjZTI4LDB4MWU3MTYsMHgxZGU2OCwweDFlZjM2LDB4MWRlNjQsMHgxY2UyMiwweDFkZTYyLCAvLyA3NzAKCQkJMHgxOGMyOCwweDFjNjE2LDB4MTljNjgsMHgxOGMyNCwweDFiY2U4LDB4MTljNjQsMHgxOGMyMiwweDFiY2U0LDB4MTljNjIsMHgxYmNlMiwgLy8gNzgwCgkJCTB4MTA4MjgsMHgxODQxNiwweDExODY4LDB4MThjMzYsMHgxMzhlOCwweDExODY0LDB4MTA4MjIsMHgxNzllOCwweDEzOGU0LDB4MTE4NjIsIC8vIDc5MAoJCQkweDE3OWU0LDB4MTM4ZTIsMHgxNzllMiwweDExODc2LDB4MTc5ZjYsMHgxZWYxMiwweDFkZTM0LDB4MWRlMzIsMHgxOWMzNCwweDFiYzc0LCAvLyA4MDAKCQkJMHgxYmM3MiwweDExODM0LDB4MTM4NzQsMHgxNzhmNCwweDE3OGYyLDB4MTA1NDAsMHgxMDUyMCwweDE4Mjk4LDB4MTA1MTAsMHgxMDUwOCwgLy8gODEwCgkJCTB4MTA1MDQsMHgxMDViMCwweDEwNTk4LDB4MTA1OGMsMHgxMDU4NiwweDEwNWRjLDB4MTA1Y2UsMHgxODZhMCwweDE4NjkwLDB4MWMzNGMsIC8vIDgyMAoJCQkweDE4Njg4LDB4MWMzNDYsMHgxODY4NCwweDE4NjgyLDB4MTA0YTAsMHgxODI1OCwweDEwZGEwLDB4MTg2ZDgsMHgxODI0YywweDEwZDkwLCAvLyA4MzAKCQkJMHgxODZjYywweDEwZDg4LDB4MTg2YzYsMHgxMGQ4NCwweDEwNDgyLDB4MTBkODIsMHgxMDRkOCwweDE4MjZlLDB4MTBkZDgsMHgxODZlZSwgLy8gODQwCgkJCTB4MTBkY2MsMHgxMDRjNiwweDEwZGM2LDB4MTA0ZWUsMHgxMGRlZSwweDFjNzUwLDB4MWM3NDgsMHgxYzc0NCwweDFjNzQyLDB4MTg2NTAsIC8vIDg1MAoJCQkweDE4ZWQwLDB4MWM3NmMsMHgxYzMyNiwweDE4ZWM4LDB4MWM3NjYsMHgxOGVjNCwweDE4NjQyLDB4MThlYzIsMHgxMDQ1MCwweDEwY2QwLCAvLyA4NjAKCQkJMHgxMDQ0OCwweDE4MjI2LDB4MTFkZDAsMHgxMGNjOCwweDEwNDQ0LDB4MTFkYzgsMHgxMGNjNCwweDEwNDQyLDB4MTFkYzQsMHgxMGNjMiwgLy8gODcwCgkJCTB4MTA0NmMsMHgxMGNlYywweDEwNDY2LDB4MTFkZWMsMHgxMGNlNiwweDExZGU2LDB4MWU3YTgsMHgxZTdhNCwweDFlN2EyLDB4MWM3MjgsIC8vIDg4MAoJCQkweDFjZjY4LDB4MWU3YjYsMHgxY2Y2NCwweDFjNzIyLDB4MWNmNjIsMHgxODYyOCwweDFjMzE2LDB4MThlNjgsMHgxYzczNiwweDE5ZWU4LCAvLyA4OTAKCQkJMHgxOGU2NCwweDE4NjIyLDB4MTllZTQsMHgxOGU2MiwweDE5ZWUyLDB4MTA0MjgsMHgxODIxNiwweDEwYzY4LDB4MTg2MzYsMHgxMWNlOCwgLy8gOTAwCgkJCTB4MTBjNjQsMHgxMDQyMiwweDEzZGU4LDB4MTFjZTQsMHgxMGM2MiwweDEzZGU0LDB4MTFjZTIsMHgxMDQzNiwweDEwYzc2LDB4MTFjZjYsIC8vIDkxMAoJCQkweDEzZGY2LDB4MWY3ZDQsMHgxZjdkMiwweDFlNzk0LDB4MWVmYjQsMHgxZTc5MiwweDFlZmIyLDB4MWM3MTQsMHgxY2YzNCwweDFjNzEyLCAvLyA5MjAKCQkJMHgxZGY3NCwweDFjZjMyLDB4MWRmNzIsMHgxODYxNCwweDE4ZTM0LDB4MTg2MTIsMHgxOWU3NCwweDE4ZTMyLDB4MWJlZjQpLCAgICAgICAgLy8gOTI5CgkJYXJyYXkoIC8vIGNsdXN0ZXIgMyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDFmNTYwLDB4MWZhYjgsMHgxZWE0MCwweDFmNTMwLDB4MWZhOWMsMHgxZWEyMCwweDFmNTE4LDB4MWZhOGUsMHgxZWExMCwweDFmNTBjLCAvLyAgMTAKCQkJMHgxZWEwOCwweDFmNTA2LDB4MWVhMDQsMHgxZWI2MCwweDFmNWI4LDB4MWZhZGUsMHgxZDY0MCwweDFlYjMwLDB4MWY1OWMsMHgxZDYyMCwgLy8gIDIwCgkJCTB4MWViMTgsMHgxZjU4ZSwweDFkNjEwLDB4MWViMGMsMHgxZDYwOCwweDFlYjA2LDB4MWQ2MDQsMHgxZDc2MCwweDFlYmI4LDB4MWY1ZGUsIC8vICAzMAoJCQkweDFhZTQwLDB4MWQ3MzAsMHgxZWI5YywweDFhZTIwLDB4MWQ3MTgsMHgxZWI4ZSwweDFhZTEwLDB4MWQ3MGMsMHgxYWUwOCwweDFkNzA2LCAvLyAgNDAKCQkJMHgxYWUwNCwweDFhZjYwLDB4MWQ3YjgsMHgxZWJkZSwweDE1ZTQwLDB4MWFmMzAsMHgxZDc5YywweDE1ZTIwLDB4MWFmMTgsMHgxZDc4ZSwgLy8gIDUwCgkJCTB4MTVlMTAsMHgxYWYwYywweDE1ZTA4LDB4MWFmMDYsMHgxNWY2MCwweDFhZmI4LDB4MWQ3ZGUsMHgxNWYzMCwweDFhZjljLDB4MTVmMTgsIC8vICA2MAoJCQkweDFhZjhlLDB4MTVmMGMsMHgxNWZiOCwweDFhZmRlLDB4MTVmOWMsMHgxNWY4ZSwweDFlOTQwLDB4MWY0YjAsMHgxZmE1YywweDFlOTIwLCAvLyAgNzAKCQkJMHgxZjQ5OCwweDFmYTRlLDB4MWU5MTAsMHgxZjQ4YywweDFlOTA4LDB4MWY0ODYsMHgxZTkwNCwweDFlOTAyLDB4MWQzNDAsMHgxZTliMCwgLy8gIDgwCgkJCTB4MWY0ZGMsMHgxZDMyMCwweDFlOTk4LDB4MWY0Y2UsMHgxZDMxMCwweDFlOThjLDB4MWQzMDgsMHgxZTk4NiwweDFkMzA0LDB4MWQzMDIsIC8vICA5MAoJCQkweDFhNzQwLDB4MWQzYjAsMHgxZTlkYywweDFhNzIwLDB4MWQzOTgsMHgxZTljZSwweDFhNzEwLDB4MWQzOGMsMHgxYTcwOCwweDFkMzg2LCAvLyAxMDAKCQkJMHgxYTcwNCwweDFhNzAyLDB4MTRmNDAsMHgxYTdiMCwweDFkM2RjLDB4MTRmMjAsMHgxYTc5OCwweDFkM2NlLDB4MTRmMTAsMHgxYTc4YywgLy8gMTEwCgkJCTB4MTRmMDgsMHgxYTc4NiwweDE0ZjA0LDB4MTRmYjAsMHgxYTdkYywweDE0Zjk4LDB4MWE3Y2UsMHgxNGY4YywweDE0Zjg2LDB4MTRmZGMsIC8vIDEyMAoJCQkweDE0ZmNlLDB4MWU4YTAsMHgxZjQ1OCwweDFmYTJlLDB4MWU4OTAsMHgxZjQ0YywweDFlODg4LDB4MWY0NDYsMHgxZTg4NCwweDFlODgyLCAvLyAxMzAKCQkJMHgxZDFhMCwweDFlOGQ4LDB4MWY0NmUsMHgxZDE5MCwweDFlOGNjLDB4MWQxODgsMHgxZThjNiwweDFkMTg0LDB4MWQxODIsMHgxYTNhMCwgLy8gMTQwCgkJCTB4MWQxZDgsMHgxZThlZSwweDFhMzkwLDB4MWQxY2MsMHgxYTM4OCwweDFkMWM2LDB4MWEzODQsMHgxYTM4MiwweDE0N2EwLDB4MWEzZDgsIC8vIDE1MAoJCQkweDFkMWVlLDB4MTQ3OTAsMHgxYTNjYywweDE0Nzg4LDB4MWEzYzYsMHgxNDc4NCwweDE0NzgyLDB4MTQ3ZDgsMHgxYTNlZSwweDE0N2NjLCAvLyAxNjAKCQkJMHgxNDdjNiwweDE0N2VlLDB4MWU4NTAsMHgxZjQyYywweDFlODQ4LDB4MWY0MjYsMHgxZTg0NCwweDFlODQyLDB4MWQwZDAsMHgxZTg2YywgLy8gMTcwCgkJCTB4MWQwYzgsMHgxZTg2NiwweDFkMGM0LDB4MWQwYzIsMHgxYTFkMCwweDFkMGVjLDB4MWExYzgsMHgxZDBlNiwweDFhMWM0LDB4MWExYzIsIC8vIDE4MAoJCQkweDE0M2QwLDB4MWExZWMsMHgxNDNjOCwweDFhMWU2LDB4MTQzYzQsMHgxNDNjMiwweDE0M2VjLDB4MTQzZTYsMHgxZTgyOCwweDFmNDE2LCAvLyAxOTAKCQkJMHgxZTgyNCwweDFlODIyLDB4MWQwNjgsMHgxZTgzNiwweDFkMDY0LDB4MWQwNjIsMHgxYTBlOCwweDFkMDc2LDB4MWEwZTQsMHgxYTBlMiwgLy8gMjAwCgkJCTB4MTQxZTgsMHgxYTBmNiwweDE0MWU0LDB4MTQxZTIsMHgxZTgxNCwweDFlODEyLDB4MWQwMzQsMHgxZDAzMiwweDFhMDc0LDB4MWEwNzIsIC8vIDIxMAoJCQkweDFlNTQwLDB4MWYyYjAsMHgxZjk1YywweDFlNTIwLDB4MWYyOTgsMHgxZjk0ZSwweDFlNTEwLDB4MWYyOGMsMHgxZTUwOCwweDFmMjg2LCAvLyAyMjAKCQkJMHgxZTUwNCwweDFlNTAyLDB4MWNiNDAsMHgxZTViMCwweDFmMmRjLDB4MWNiMjAsMHgxZTU5OCwweDFmMmNlLDB4MWNiMTAsMHgxZTU4YywgLy8gMjMwCgkJCTB4MWNiMDgsMHgxZTU4NiwweDFjYjA0LDB4MWNiMDIsMHgxOTc0MCwweDFjYmIwLDB4MWU1ZGMsMHgxOTcyMCwweDFjYjk4LDB4MWU1Y2UsIC8vIDI0MAoJCQkweDE5NzEwLDB4MWNiOGMsMHgxOTcwOCwweDFjYjg2LDB4MTk3MDQsMHgxOTcwMiwweDEyZjQwLDB4MTk3YjAsMHgxY2JkYywweDEyZjIwLCAvLyAyNTAKCQkJMHgxOTc5OCwweDFjYmNlLDB4MTJmMTAsMHgxOTc4YywweDEyZjA4LDB4MTk3ODYsMHgxMmYwNCwweDEyZmIwLDB4MTk3ZGMsMHgxMmY5OCwgLy8gMjYwCgkJCTB4MTk3Y2UsMHgxMmY4YywweDEyZjg2LDB4MTJmZGMsMHgxMmZjZSwweDFmNmEwLDB4MWZiNTgsMHgxNmJmMCwweDFmNjkwLDB4MWZiNGMsIC8vIDI3MAoJCQkweDE2OWY4LDB4MWY2ODgsMHgxZmI0NiwweDE2OGZjLDB4MWY2ODQsMHgxZjY4MiwweDFlNGEwLDB4MWYyNTgsMHgxZjkyZSwweDFlZGEwLCAvLyAyODAKCQkJMHgxZTQ5MCwweDFmYjZlLDB4MWVkOTAsMHgxZjZjYywweDFmMjQ2LDB4MWVkODgsMHgxZTQ4NCwweDFlZDg0LDB4MWU0ODIsMHgxZWQ4MiwgLy8gMjkwCgkJCTB4MWM5YTAsMHgxZTRkOCwweDFmMjZlLDB4MWRiYTAsMHgxYzk5MCwweDFlNGNjLDB4MWRiOTAsMHgxZWRjYywweDFlNGM2LDB4MWRiODgsIC8vIDMwMAoJCQkweDFjOTg0LDB4MWRiODQsMHgxYzk4MiwweDFkYjgyLDB4MTkzYTAsMHgxYzlkOCwweDFlNGVlLDB4MWI3YTAsMHgxOTM5MCwweDFjOWNjLCAvLyAzMTAKCQkJMHgxYjc5MCwweDFkYmNjLDB4MWM5YzYsMHgxYjc4OCwweDE5Mzg0LDB4MWI3ODQsMHgxOTM4MiwweDFiNzgyLDB4MTI3YTAsMHgxOTNkOCwgLy8gMzIwCgkJCTB4MWM5ZWUsMHgxNmZhMCwweDEyNzkwLDB4MTkzY2MsMHgxNmY5MCwweDFiN2NjLDB4MTkzYzYsMHgxNmY4OCwweDEyNzg0LDB4MTZmODQsIC8vIDMzMAoJCQkweDEyNzgyLDB4MTI3ZDgsMHgxOTNlZSwweDE2ZmQ4LDB4MTI3Y2MsMHgxNmZjYywweDEyN2M2LDB4MTZmYzYsMHgxMjdlZSwweDFmNjUwLCAvLyAzNDAKCQkJMHgxZmIyYywweDE2NWY4LDB4MWY2NDgsMHgxZmIyNiwweDE2NGZjLDB4MWY2NDQsMHgxNjQ3ZSwweDFmNjQyLDB4MWU0NTAsMHgxZjIyYywgLy8gMzUwCgkJCTB4MWVjZDAsMHgxZTQ0OCwweDFmMjI2LDB4MWVjYzgsMHgxZjY2NiwweDFlY2M0LDB4MWU0NDIsMHgxZWNjMiwweDFjOGQwLDB4MWU0NmMsIC8vIDM2MAoJCQkweDFkOWQwLDB4MWM4YzgsMHgxZTQ2NiwweDFkOWM4LDB4MWVjZTYsMHgxZDljNCwweDFjOGMyLDB4MWQ5YzIsMHgxOTFkMCwweDFjOGVjLCAvLyAzNzAKCQkJMHgxYjNkMCwweDE5MWM4LDB4MWM4ZTYsMHgxYjNjOCwweDFkOWU2LDB4MWIzYzQsMHgxOTFjMiwweDFiM2MyLDB4MTIzZDAsMHgxOTFlYywgLy8gMzgwCgkJCTB4MTY3ZDAsMHgxMjNjOCwweDE5MWU2LDB4MTY3YzgsMHgxYjNlNiwweDE2N2M0LDB4MTIzYzIsMHgxNjdjMiwweDEyM2VjLDB4MTY3ZWMsIC8vIDM5MAoJCQkweDEyM2U2LDB4MTY3ZTYsMHgxZjYyOCwweDFmYjE2LDB4MTYyZmMsMHgxZjYyNCwweDE2MjdlLDB4MWY2MjIsMHgxZTQyOCwweDFmMjE2LCAvLyA0MDAKCQkJMHgxZWM2OCwweDFmNjM2LDB4MWVjNjQsMHgxZTQyMiwweDFlYzYyLDB4MWM4NjgsMHgxZTQzNiwweDFkOGU4LDB4MWM4NjQsMHgxZDhlNCwgLy8gNDEwCgkJCTB4MWM4NjIsMHgxZDhlMiwweDE5MGU4LDB4MWM4NzYsMHgxYjFlOCwweDFkOGY2LDB4MWIxZTQsMHgxOTBlMiwweDFiMWUyLDB4MTIxZTgsIC8vIDQyMAoJCQkweDE5MGY2LDB4MTYzZTgsMHgxMjFlNCwweDE2M2U0LDB4MTIxZTIsMHgxNjNlMiwweDEyMWY2LDB4MTYzZjYsMHgxZjYxNCwweDE2MTdlLCAvLyA0MzAKCQkJMHgxZjYxMiwweDFlNDE0LDB4MWVjMzQsMHgxZTQxMiwweDFlYzMyLDB4MWM4MzQsMHgxZDg3NCwweDFjODMyLDB4MWQ4NzIsMHgxOTA3NCwgLy8gNDQwCgkJCTB4MWIwZjQsMHgxOTA3MiwweDFiMGYyLDB4MTIwZjQsMHgxNjFmNCwweDEyMGYyLDB4MTYxZjIsMHgxZjYwYSwweDFlNDBhLDB4MWVjMWEsIC8vIDQ1MAoJCQkweDFjODFhLDB4MWQ4M2EsMHgxOTAzYSwweDFiMDdhLDB4MWUyYTAsMHgxZjE1OCwweDFmOGFlLDB4MWUyOTAsMHgxZjE0YywweDFlMjg4LCAvLyA0NjAKCQkJMHgxZjE0NiwweDFlMjg0LDB4MWUyODIsMHgxYzVhMCwweDFlMmQ4LDB4MWYxNmUsMHgxYzU5MCwweDFlMmNjLDB4MWM1ODgsMHgxZTJjNiwgLy8gNDcwCgkJCTB4MWM1ODQsMHgxYzU4MiwweDE4YmEwLDB4MWM1ZDgsMHgxZTJlZSwweDE4YjkwLDB4MWM1Y2MsMHgxOGI4OCwweDFjNWM2LDB4MThiODQsIC8vIDQ4MAoJCQkweDE4YjgyLDB4MTE3YTAsMHgxOGJkOCwweDFjNWVlLDB4MTE3OTAsMHgxOGJjYywweDExNzg4LDB4MThiYzYsMHgxMTc4NCwweDExNzgyLCAvLyA0OTAKCQkJMHgxMTdkOCwweDE4YmVlLDB4MTE3Y2MsMHgxMTdjNiwweDExN2VlLDB4MWYzNTAsMHgxZjlhYywweDEzNWY4LDB4MWYzNDgsMHgxZjlhNiwgLy8gNTAwCgkJCTB4MTM0ZmMsMHgxZjM0NCwweDEzNDdlLDB4MWYzNDIsMHgxZTI1MCwweDFmMTJjLDB4MWU2ZDAsMHgxZTI0OCwweDFmMTI2LDB4MWU2YzgsIC8vIDUxMAoJCQkweDFmMzY2LDB4MWU2YzQsMHgxZTI0MiwweDFlNmMyLDB4MWM0ZDAsMHgxZTI2YywweDFjZGQwLDB4MWM0YzgsMHgxZTI2NiwweDFjZGM4LCAvLyA1MjAKCQkJMHgxZTZlNiwweDFjZGM0LDB4MWM0YzIsMHgxY2RjMiwweDE4OWQwLDB4MWM0ZWMsMHgxOWJkMCwweDE4OWM4LDB4MWM0ZTYsMHgxOWJjOCwgLy8gNTMwCgkJCTB4MWNkZTYsMHgxOWJjNCwweDE4OWMyLDB4MTliYzIsMHgxMTNkMCwweDE4OWVjLDB4MTM3ZDAsMHgxMTNjOCwweDE4OWU2LDB4MTM3YzgsIC8vIDU0MAoJCQkweDE5YmU2LDB4MTM3YzQsMHgxMTNjMiwweDEzN2MyLDB4MTEzZWMsMHgxMzdlYywweDExM2U2LDB4MTM3ZTYsMHgxZmJhOCwweDE3NWYwLCAvLyA1NTAKCQkJMHgxYmFmYywweDFmYmE0LDB4MTc0ZjgsMHgxYmE3ZSwweDFmYmEyLDB4MTc0N2MsMHgxNzQzZSwweDFmMzI4LDB4MWY5OTYsMHgxMzJmYywgLy8gNTYwCgkJCTB4MWY3NjgsMHgxZmJiNiwweDE3NmZjLDB4MTMyN2UsMHgxZjc2NCwweDFmMzIyLDB4MTc2N2UsMHgxZjc2MiwweDFlMjI4LDB4MWYxMTYsIC8vIDU3MAoJCQkweDFlNjY4LDB4MWUyMjQsMHgxZWVlOCwweDFmNzc2LDB4MWUyMjIsMHgxZWVlNCwweDFlNjYyLDB4MWVlZTIsMHgxYzQ2OCwweDFlMjM2LCAvLyA1ODAKCQkJMHgxY2NlOCwweDFjNDY0LDB4MWRkZTgsMHgxY2NlNCwweDFjNDYyLDB4MWRkZTQsMHgxY2NlMiwweDFkZGUyLDB4MTg4ZTgsMHgxYzQ3NiwgLy8gNTkwCgkJCTB4MTk5ZTgsMHgxODhlNCwweDFiYmU4LDB4MTk5ZTQsMHgxODhlMiwweDFiYmU0LDB4MTk5ZTIsMHgxYmJlMiwweDExMWU4LDB4MTg4ZjYsIC8vIDYwMAoJCQkweDEzM2U4LDB4MTExZTQsMHgxNzdlOCwweDEzM2U0LDB4MTExZTIsMHgxNzdlNCwweDEzM2UyLDB4MTc3ZTIsMHgxMTFmNiwweDEzM2Y2LCAvLyA2MTAKCQkJMHgxZmI5NCwweDE3MmY4LDB4MWI5N2UsMHgxZmI5MiwweDE3MjdjLDB4MTcyM2UsMHgxZjMxNCwweDEzMTdlLDB4MWY3MzQsMHgxZjMxMiwgLy8gNjIwCgkJCTB4MTczN2UsMHgxZjczMiwweDFlMjE0LDB4MWU2MzQsMHgxZTIxMiwweDFlZTc0LDB4MWU2MzIsMHgxZWU3MiwweDFjNDM0LDB4MWNjNzQsIC8vIDYzMAoJCQkweDFjNDMyLDB4MWRjZjQsMHgxY2M3MiwweDFkY2YyLDB4MTg4NzQsMHgxOThmNCwweDE4ODcyLDB4MWI5ZjQsMHgxOThmMiwweDFiOWYyLCAvLyA2NDAKCQkJMHgxMTBmNCwweDEzMWY0LDB4MTEwZjIsMHgxNzNmNCwweDEzMWYyLDB4MTczZjIsMHgxZmI4YSwweDE3MTdjLDB4MTcxM2UsMHgxZjMwYSwgLy8gNjUwCgkJCTB4MWY3MWEsMHgxZTIwYSwweDFlNjFhLDB4MWVlM2EsMHgxYzQxYSwweDFjYzNhLDB4MWRjN2EsMHgxODgzYSwweDE5ODdhLDB4MWI4ZmEsIC8vIDY2MAoJCQkweDExMDdhLDB4MTMwZmEsMHgxNzFmYSwweDE3MGJlLDB4MWUxNTAsMHgxZjBhYywweDFlMTQ4LDB4MWYwYTYsMHgxZTE0NCwweDFlMTQyLCAvLyA2NzAKCQkJMHgxYzJkMCwweDFlMTZjLDB4MWMyYzgsMHgxZTE2NiwweDFjMmM0LDB4MWMyYzIsMHgxODVkMCwweDFjMmVjLDB4MTg1YzgsMHgxYzJlNiwgLy8gNjgwCgkJCTB4MTg1YzQsMHgxODVjMiwweDEwYmQwLDB4MTg1ZWMsMHgxMGJjOCwweDE4NWU2LDB4MTBiYzQsMHgxMGJjMiwweDEwYmVjLDB4MTBiZTYsIC8vIDY5MAoJCQkweDFmMWE4LDB4MWY4ZDYsMHgxMWFmYywweDFmMWE0LDB4MTFhN2UsMHgxZjFhMiwweDFlMTI4LDB4MWYwOTYsMHgxZTM2OCwweDFlMTI0LCAvLyA3MDAKCQkJMHgxZTM2NCwweDFlMTIyLDB4MWUzNjIsMHgxYzI2OCwweDFlMTM2LDB4MWM2ZTgsMHgxYzI2NCwweDFjNmU0LDB4MWMyNjIsMHgxYzZlMiwgLy8gNzEwCgkJCTB4MTg0ZTgsMHgxYzI3NiwweDE4ZGU4LDB4MTg0ZTQsMHgxOGRlNCwweDE4NGUyLDB4MThkZTIsMHgxMDllOCwweDE4NGY2LDB4MTFiZTgsIC8vIDcyMAoJCQkweDEwOWU0LDB4MTFiZTQsMHgxMDllMiwweDExYmUyLDB4MTA5ZjYsMHgxMWJmNiwweDFmOWQ0LDB4MTNhZjgsMHgxOWQ3ZSwweDFmOWQyLCAvLyA3MzAKCQkJMHgxM2E3YywweDEzYTNlLDB4MWYxOTQsMHgxMTk3ZSwweDFmM2I0LDB4MWYxOTIsMHgxM2I3ZSwweDFmM2IyLDB4MWUxMTQsMHgxZTMzNCwgLy8gNzQwCgkJCTB4MWUxMTIsMHgxZTc3NCwweDFlMzMyLDB4MWU3NzIsMHgxYzIzNCwweDFjNjc0LDB4MWMyMzIsMHgxY2VmNCwweDFjNjcyLDB4MWNlZjIsIC8vIDc1MAoJCQkweDE4NDc0LDB4MThjZjQsMHgxODQ3MiwweDE5ZGY0LDB4MThjZjIsMHgxOWRmMiwweDEwOGY0LDB4MTE5ZjQsMHgxMDhmMiwweDEzYmY0LCAvLyA3NjAKCQkJMHgxMTlmMiwweDEzYmYyLDB4MTdhZjAsMHgxYmQ3YywweDE3YTc4LDB4MWJkM2UsMHgxN2EzYywweDE3YTFlLDB4MWY5Y2EsMHgxMzk3YywgLy8gNzcwCgkJCTB4MWZiZGEsMHgxN2I3YywweDEzOTNlLDB4MTdiM2UsMHgxZjE4YSwweDFmMzlhLDB4MWY3YmEsMHgxZTEwYSwweDFlMzFhLDB4MWU3M2EsIC8vIDc4MAoJCQkweDFlZjdhLDB4MWMyMWEsMHgxYzYzYSwweDFjZTdhLDB4MWRlZmEsMHgxODQzYSwweDE4YzdhLDB4MTljZmEsMHgxYmRmYSwweDEwODdhLCAvLyA3OTAKCQkJMHgxMThmYSwweDEzOWZhLDB4MTc5NzgsMHgxYmNiZSwweDE3OTNjLDB4MTc5MWUsMHgxMzhiZSwweDE3OWJlLDB4MTc4YmMsMHgxNzg5ZSwgLy8gODAwCgkJCTB4MTc4NWUsMHgxZTBhOCwweDFlMGE0LDB4MWUwYTIsMHgxYzE2OCwweDFlMGI2LDB4MWMxNjQsMHgxYzE2MiwweDE4MmU4LDB4MWMxNzYsIC8vIDgxMAoJCQkweDE4MmU0LDB4MTgyZTIsMHgxMDVlOCwweDE4MmY2LDB4MTA1ZTQsMHgxMDVlMiwweDEwNWY2LDB4MWYwZDQsMHgxMGQ3ZSwweDFmMGQyLCAvLyA4MjAKCQkJMHgxZTA5NCwweDFlMWI0LDB4MWUwOTIsMHgxZTFiMiwweDFjMTM0LDB4MWMzNzQsMHgxYzEzMiwweDFjMzcyLDB4MTgyNzQsMHgxODZmNCwgLy8gODMwCgkJCTB4MTgyNzIsMHgxODZmMiwweDEwNGY0LDB4MTBkZjQsMHgxMDRmMiwweDEwZGYyLDB4MWY4ZWEsMHgxMWQ3YywweDExZDNlLDB4MWYwY2EsIC8vIDg0MAoJCQkweDFmMWRhLDB4MWUwOGEsMHgxZTE5YSwweDFlM2JhLDB4MWMxMWEsMHgxYzMzYSwweDFjNzdhLDB4MTgyM2EsMHgxODY3YSwweDE4ZWZhLCAvLyA4NTAKCQkJMHgxMDQ3YSwweDEwY2ZhLDB4MTFkZmEsMHgxM2Q3OCwweDE5ZWJlLDB4MTNkM2MsMHgxM2QxZSwweDExY2JlLDB4MTNkYmUsMHgxN2Q3MCwgLy8gODYwCgkJCTB4MWJlYmMsMHgxN2QzOCwweDFiZTllLDB4MTdkMWMsMHgxN2QwZSwweDEzY2JjLDB4MTdkYmMsMHgxM2M5ZSwweDE3ZDllLDB4MTdjYjgsIC8vIDg3MAoJCQkweDFiZTVlLDB4MTdjOWMsMHgxN2M4ZSwweDEzYzVlLDB4MTdjZGUsMHgxN2M1YywweDE3YzRlLDB4MTdjMmUsMHgxYzBiNCwweDFjMGIyLCAvLyA4ODAKCQkJMHgxODE3NCwweDE4MTcyLDB4MTAyZjQsMHgxMDJmMiwweDFlMGRhLDB4MWMwOWEsMHgxYzFiYSwweDE4MTNhLDB4MTgzN2EsMHgxMDI3YSwgLy8gODkwCgkJCTB4MTA2ZmEsMHgxMGViZSwweDExZWJjLDB4MTFlOWUsMHgxM2ViOCwweDE5ZjVlLDB4MTNlOWMsMHgxM2U4ZSwweDExZTVlLDB4MTNlZGUsIC8vIDkwMAoJCQkweDE3ZWIwLDB4MWJmNWMsMHgxN2U5OCwweDFiZjRlLDB4MTdlOGMsMHgxN2U4NiwweDEzZTVjLDB4MTdlZGMsMHgxM2U0ZSwweDE3ZWNlLCAvLyA5MTAKCQkJMHgxN2U1OCwweDFiZjJlLDB4MTdlNGMsMHgxN2U0NiwweDEzZTJlLDB4MTdlNmUsMHgxN2UyYywweDE3ZTI2LDB4MTBmNWUsMHgxMWY1YywgLy8gOTIwCgkJCTB4MTFmNGUsMHgxM2Y1OCwweDE5ZmFlLDB4MTNmNGMsMHgxM2Y0NiwweDExZjJlLDB4MTNmNmUsMHgxM2YyYywweDEzZjI2KSwgICAgICAgIC8vIDkyOQoJCWFycmF5KCAvLyBjbHVzdGVyIDYgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHgxYWJlMCwweDFkNWY4LDB4MTUzYzAsMHgxYTlmMCwweDFkNGZjLDB4MTUxZTAsMHgxYThmOCwweDFkNDdlLDB4MTUwZjAsMHgxYTg3YywgLy8gIDEwCgkJCTB4MTUwNzgsMHgxZmFkMCwweDE1YmUwLDB4MWFkZjgsMHgxZmFjOCwweDE1OWYwLDB4MWFjZmMsMHgxZmFjNCwweDE1OGY4LDB4MWFjN2UsIC8vICAyMAoJCQkweDFmYWMyLDB4MTU4N2MsMHgxZjVkMCwweDFmYWVjLDB4MTVkZjgsMHgxZjVjOCwweDFmYWU2LDB4MTVjZmMsMHgxZjVjNCwweDE1YzdlLCAvLyAgMzAKCQkJMHgxZjVjMiwweDFlYmQwLDB4MWY1ZWMsMHgxZWJjOCwweDFmNWU2LDB4MWViYzQsMHgxZWJjMiwweDFkN2QwLDB4MWViZWMsMHgxZDdjOCwgLy8gIDQwCgkJCTB4MWViZTYsMHgxZDdjNCwweDFkN2MyLDB4MWFmZDAsMHgxZDdlYywweDFhZmM4LDB4MWQ3ZTYsMHgxYWZjNCwweDE0YmMwLDB4MWE1ZjAsIC8vICA1MAoJCQkweDFkMmZjLDB4MTQ5ZTAsMHgxYTRmOCwweDFkMjdlLDB4MTQ4ZjAsMHgxYTQ3YywweDE0ODc4LDB4MWE0M2UsMHgxNDgzYywweDFmYTY4LCAvLyAgNjAKCQkJMHgxNGRmMCwweDFhNmZjLDB4MWZhNjQsMHgxNGNmOCwweDFhNjdlLDB4MWZhNjIsMHgxNGM3YywweDE0YzNlLDB4MWY0ZTgsMHgxZmE3NiwgLy8gIDcwCgkJCTB4MTRlZmMsMHgxZjRlNCwweDE0ZTdlLDB4MWY0ZTIsMHgxZTllOCwweDFmNGY2LDB4MWU5ZTQsMHgxZTllMiwweDFkM2U4LDB4MWU5ZjYsIC8vICA4MAoJCQkweDFkM2U0LDB4MWQzZTIsMHgxYTdlOCwweDFkM2Y2LDB4MWE3ZTQsMHgxYTdlMiwweDE0NWUwLDB4MWEyZjgsMHgxZDE3ZSwweDE0NGYwLCAvLyAgOTAKCQkJMHgxYTI3YywweDE0NDc4LDB4MWEyM2UsMHgxNDQzYywweDE0NDFlLDB4MWZhMzQsMHgxNDZmOCwweDFhMzdlLDB4MWZhMzIsMHgxNDY3YywgLy8gMTAwCgkJCTB4MTQ2M2UsMHgxZjQ3NCwweDE0NzdlLDB4MWY0NzIsMHgxZThmNCwweDFlOGYyLDB4MWQxZjQsMHgxZDFmMiwweDFhM2Y0LDB4MWEzZjIsIC8vIDExMAoJCQkweDE0MmYwLDB4MWExN2MsMHgxNDI3OCwweDFhMTNlLDB4MTQyM2MsMHgxNDIxZSwweDFmYTFhLDB4MTQzN2MsMHgxNDMzZSwweDFmNDNhLCAvLyAxMjAKCQkJMHgxZTg3YSwweDFkMGZhLDB4MTQxNzgsMHgxYTBiZSwweDE0MTNjLDB4MTQxMWUsMHgxNDFiZSwweDE0MGJjLDB4MTQwOWUsMHgxMmJjMCwgLy8gMTMwCgkJCTB4MTk1ZjAsMHgxY2FmYywweDEyOWUwLDB4MTk0ZjgsMHgxY2E3ZSwweDEyOGYwLDB4MTk0N2MsMHgxMjg3OCwweDE5NDNlLDB4MTI4M2MsIC8vIDE0MAoJCQkweDFmOTY4LDB4MTJkZjAsMHgxOTZmYywweDFmOTY0LDB4MTJjZjgsMHgxOTY3ZSwweDFmOTYyLDB4MTJjN2MsMHgxMmMzZSwweDFmMmU4LCAvLyAxNTAKCQkJMHgxZjk3NiwweDEyZWZjLDB4MWYyZTQsMHgxMmU3ZSwweDFmMmUyLDB4MWU1ZTgsMHgxZjJmNiwweDFlNWU0LDB4MWU1ZTIsMHgxY2JlOCwgLy8gMTYwCgkJCTB4MWU1ZjYsMHgxY2JlNCwweDFjYmUyLDB4MTk3ZTgsMHgxY2JmNiwweDE5N2U0LDB4MTk3ZTIsMHgxYjVlMCwweDFkYWY4LDB4MWVkN2UsIC8vIDE3MAoJCQkweDE2OWMwLDB4MWI0ZjAsMHgxZGE3YywweDE2OGUwLDB4MWI0NzgsMHgxZGEzZSwweDE2ODcwLDB4MWI0M2MsMHgxNjgzOCwweDFiNDFlLCAvLyAxODAKCQkJMHgxNjgxYywweDEyNWUwLDB4MTkyZjgsMHgxYzk3ZSwweDE2ZGUwLDB4MTI0ZjAsMHgxOTI3YywweDE2Y2YwLDB4MWI2N2MsMHgxOTIzZSwgLy8gMTkwCgkJCTB4MTZjNzgsMHgxMjQzYywweDE2YzNjLDB4MTI0MWUsMHgxNmMxZSwweDFmOTM0LDB4MTI2ZjgsMHgxOTM3ZSwweDFmYjc0LDB4MWY5MzIsIC8vIDIwMAoJCQkweDE2ZWY4LDB4MTI2N2MsMHgxZmI3MiwweDE2ZTdjLDB4MTI2M2UsMHgxNmUzZSwweDFmMjc0LDB4MTI3N2UsMHgxZjZmNCwweDFmMjcyLCAvLyAyMTAKCQkJMHgxNmY3ZSwweDFmNmYyLDB4MWU0ZjQsMHgxZWRmNCwweDFlNGYyLDB4MWVkZjIsMHgxYzlmNCwweDFkYmY0LDB4MWM5ZjIsMHgxZGJmMiwgLy8gMjIwCgkJCTB4MTkzZjQsMHgxOTNmMiwweDE2NWMwLDB4MWIyZjAsMHgxZDk3YywweDE2NGUwLDB4MWIyNzgsMHgxZDkzZSwweDE2NDcwLDB4MWIyM2MsIC8vIDIzMAoJCQkweDE2NDM4LDB4MWIyMWUsMHgxNjQxYywweDE2NDBlLDB4MTIyZjAsMHgxOTE3YywweDE2NmYwLDB4MTIyNzgsMHgxOTEzZSwweDE2Njc4LCAvLyAyNDAKCQkJMHgxYjMzZSwweDE2NjNjLDB4MTIyMWUsMHgxNjYxZSwweDFmOTFhLDB4MTIzN2MsMHgxZmIzYSwweDE2NzdjLDB4MTIzM2UsMHgxNjczZSwgLy8gMjUwCgkJCTB4MWYyM2EsMHgxZjY3YSwweDFlNDdhLDB4MWVjZmEsMHgxYzhmYSwweDFkOWZhLDB4MTkxZmEsMHgxNjJlMCwweDFiMTc4LDB4MWQ4YmUsIC8vIDI2MAoJCQkweDE2MjcwLDB4MWIxM2MsMHgxNjIzOCwweDFiMTFlLDB4MTYyMWMsMHgxNjIwZSwweDEyMTc4LDB4MTkwYmUsMHgxNjM3OCwweDEyMTNjLCAvLyAyNzAKCQkJMHgxNjMzYywweDEyMTFlLDB4MTYzMWUsMHgxMjFiZSwweDE2M2JlLDB4MTYxNzAsMHgxYjBiYywweDE2MTM4LDB4MWIwOWUsMHgxNjExYywgLy8gMjgwCgkJCTB4MTYxMGUsMHgxMjBiYywweDE2MWJjLDB4MTIwOWUsMHgxNjE5ZSwweDE2MGI4LDB4MWIwNWUsMHgxNjA5YywweDE2MDhlLDB4MTIwNWUsIC8vIDI5MAoJCQkweDE2MGRlLDB4MTYwNWMsMHgxNjA0ZSwweDExNWUwLDB4MThhZjgsMHgxYzU3ZSwweDExNGYwLDB4MThhN2MsMHgxMTQ3OCwweDE4YTNlLCAvLyAzMDAKCQkJMHgxMTQzYywweDExNDFlLDB4MWY4YjQsMHgxMTZmOCwweDE4YjdlLDB4MWY4YjIsMHgxMTY3YywweDExNjNlLDB4MWYxNzQsMHgxMTc3ZSwgLy8gMzEwCgkJCTB4MWYxNzIsMHgxZTJmNCwweDFlMmYyLDB4MWM1ZjQsMHgxYzVmMiwweDE4YmY0LDB4MThiZjIsMHgxMzVjMCwweDE5YWYwLDB4MWNkN2MsIC8vIDMyMAoJCQkweDEzNGUwLDB4MTlhNzgsMHgxY2QzZSwweDEzNDcwLDB4MTlhM2MsMHgxMzQzOCwweDE5YTFlLDB4MTM0MWMsMHgxMzQwZSwweDExMmYwLCAvLyAzMzAKCQkJMHgxODk3YywweDEzNmYwLDB4MTEyNzgsMHgxODkzZSwweDEzNjc4LDB4MTliM2UsMHgxMzYzYywweDExMjFlLDB4MTM2MWUsMHgxZjg5YSwgLy8gMzQwCgkJCTB4MTEzN2MsMHgxZjliYSwweDEzNzdjLDB4MTEzM2UsMHgxMzczZSwweDFmMTNhLDB4MWYzN2EsMHgxZTI3YSwweDFlNmZhLDB4MWM0ZmEsIC8vIDM1MAoJCQkweDFjZGZhLDB4MTg5ZmEsMHgxYmFlMCwweDFkZDc4LDB4MWVlYmUsMHgxNzRjMCwweDFiYTcwLDB4MWRkM2MsMHgxNzQ2MCwweDFiYTM4LCAvLyAzNjAKCQkJMHgxZGQxZSwweDE3NDMwLDB4MWJhMWMsMHgxNzQxOCwweDFiYTBlLDB4MTc0MGMsMHgxMzJlMCwweDE5OTc4LDB4MWNjYmUsMHgxNzZlMCwgLy8gMzcwCgkJCTB4MTMyNzAsMHgxOTkzYywweDE3NjcwLDB4MWJiM2MsMHgxOTkxZSwweDE3NjM4LDB4MTMyMWMsMHgxNzYxYywweDEzMjBlLDB4MTc2MGUsIC8vIDM4MAoJCQkweDExMTc4LDB4MTg4YmUsMHgxMzM3OCwweDExMTNjLDB4MTc3NzgsMHgxMzMzYywweDExMTFlLDB4MTc3M2MsMHgxMzMxZSwweDE3NzFlLCAvLyAzOTAKCQkJMHgxMTFiZSwweDEzM2JlLDB4MTc3YmUsMHgxNzJjMCwweDFiOTcwLDB4MWRjYmMsMHgxNzI2MCwweDFiOTM4LDB4MWRjOWUsMHgxNzIzMCwgLy8gNDAwCgkJCTB4MWI5MWMsMHgxNzIxOCwweDFiOTBlLDB4MTcyMGMsMHgxNzIwNiwweDEzMTcwLDB4MTk4YmMsMHgxNzM3MCwweDEzMTM4LDB4MTk4OWUsIC8vIDQxMAoJCQkweDE3MzM4LDB4MWI5OWUsMHgxNzMxYywweDEzMTBlLDB4MTczMGUsMHgxMTBiYywweDEzMWJjLDB4MTEwOWUsMHgxNzNiYywweDEzMTllLCAvLyA0MjAKCQkJMHgxNzM5ZSwweDE3MTYwLDB4MWI4YjgsMHgxZGM1ZSwweDE3MTMwLDB4MWI4OWMsMHgxNzExOCwweDFiODhlLDB4MTcxMGMsMHgxNzEwNiwgLy8gNDMwCgkJCTB4MTMwYjgsMHgxOTg1ZSwweDE3MWI4LDB4MTMwOWMsMHgxNzE5YywweDEzMDhlLDB4MTcxOGUsMHgxMTA1ZSwweDEzMGRlLDB4MTcxZGUsIC8vIDQ0MAoJCQkweDE3MGIwLDB4MWI4NWMsMHgxNzA5OCwweDFiODRlLDB4MTcwOGMsMHgxNzA4NiwweDEzMDVjLDB4MTcwZGMsMHgxMzA0ZSwweDE3MGNlLCAvLyA0NTAKCQkJMHgxNzA1OCwweDFiODJlLDB4MTcwNGMsMHgxNzA0NiwweDEzMDJlLDB4MTcwNmUsMHgxNzAyYywweDE3MDI2LDB4MTBhZjAsMHgxODU3YywgLy8gNDYwCgkJCTB4MTBhNzgsMHgxODUzZSwweDEwYTNjLDB4MTBhMWUsMHgxMGI3YywweDEwYjNlLDB4MWYwYmEsMHgxZTE3YSwweDFjMmZhLDB4MTg1ZmEsIC8vIDQ3MAoJCQkweDExYWUwLDB4MThkNzgsMHgxYzZiZSwweDExYTcwLDB4MThkM2MsMHgxMWEzOCwweDE4ZDFlLDB4MTFhMWMsMHgxMWEwZSwweDEwOTc4LCAvLyA0ODAKCQkJMHgxODRiZSwweDExYjc4LDB4MTA5M2MsMHgxMWIzYywweDEwOTFlLDB4MTFiMWUsMHgxMDliZSwweDExYmJlLDB4MTNhYzAsMHgxOWQ3MCwgLy8gNDkwCgkJCTB4MWNlYmMsMHgxM2E2MCwweDE5ZDM4LDB4MWNlOWUsMHgxM2EzMCwweDE5ZDFjLDB4MTNhMTgsMHgxOWQwZSwweDEzYTBjLDB4MTNhMDYsIC8vIDUwMAoJCQkweDExOTcwLDB4MThjYmMsMHgxM2I3MCwweDExOTM4LDB4MThjOWUsMHgxM2IzOCwweDExOTFjLDB4MTNiMWMsMHgxMTkwZSwweDEzYjBlLCAvLyA1MTAKCQkJMHgxMDhiYywweDExOWJjLDB4MTA4OWUsMHgxM2JiYywweDExOTllLDB4MTNiOWUsMHgxYmQ2MCwweDFkZWI4LDB4MWVmNWUsMHgxN2E0MCwgLy8gNTIwCgkJCTB4MWJkMzAsMHgxZGU5YywweDE3YTIwLDB4MWJkMTgsMHgxZGU4ZSwweDE3YTEwLDB4MWJkMGMsMHgxN2EwOCwweDFiZDA2LDB4MTdhMDQsIC8vIDUzMAoJCQkweDEzOTYwLDB4MTljYjgsMHgxY2U1ZSwweDE3YjYwLDB4MTM5MzAsMHgxOWM5YywweDE3YjMwLDB4MWJkOWMsMHgxOWM4ZSwweDE3YjE4LCAvLyA1NDAKCQkJMHgxMzkwYywweDE3YjBjLDB4MTM5MDYsMHgxN2IwNiwweDExOGI4LDB4MThjNWUsMHgxMzliOCwweDExODljLDB4MTdiYjgsMHgxMzk5YywgLy8gNTUwCgkJCTB4MTE4OGUsMHgxN2I5YywweDEzOThlLDB4MTdiOGUsMHgxMDg1ZSwweDExOGRlLDB4MTM5ZGUsMHgxN2JkZSwweDE3OTQwLDB4MWJjYjAsIC8vIDU2MAoJCQkweDFkZTVjLDB4MTc5MjAsMHgxYmM5OCwweDFkZTRlLDB4MTc5MTAsMHgxYmM4YywweDE3OTA4LDB4MWJjODYsMHgxNzkwNCwweDE3OTAyLCAvLyA1NzAKCQkJMHgxMzhiMCwweDE5YzVjLDB4MTc5YjAsMHgxMzg5OCwweDE5YzRlLDB4MTc5OTgsMHgxYmNjZSwweDE3OThjLDB4MTM4ODYsMHgxNzk4NiwgLy8gNTgwCgkJCTB4MTE4NWMsMHgxMzhkYywweDExODRlLDB4MTc5ZGMsMHgxMzhjZSwweDE3OWNlLDB4MTc4YTAsMHgxYmM1OCwweDFkZTJlLDB4MTc4OTAsIC8vIDU5MAoJCQkweDFiYzRjLDB4MTc4ODgsMHgxYmM0NiwweDE3ODg0LDB4MTc4ODIsMHgxMzg1OCwweDE5YzJlLDB4MTc4ZDgsMHgxMzg0YywweDE3OGNjLCAvLyA2MDAKCQkJMHgxMzg0NiwweDE3OGM2LDB4MTE4MmUsMHgxMzg2ZSwweDE3OGVlLDB4MTc4NTAsMHgxYmMyYywweDE3ODQ4LDB4MWJjMjYsMHgxNzg0NCwgLy8gNjEwCgkJCTB4MTc4NDIsMHgxMzgyYywweDE3ODZjLDB4MTM4MjYsMHgxNzg2NiwweDE3ODI4LDB4MWJjMTYsMHgxNzgyNCwweDE3ODIyLDB4MTM4MTYsIC8vIDYyMAoJCQkweDE3ODM2LDB4MTA1NzgsMHgxODJiZSwweDEwNTNjLDB4MTA1MWUsMHgxMDViZSwweDEwZDcwLDB4MTg2YmMsMHgxMGQzOCwweDE4NjllLCAvLyA2MzAKCQkJMHgxMGQxYywweDEwZDBlLDB4MTA0YmMsMHgxMGRiYywweDEwNDllLDB4MTBkOWUsMHgxMWQ2MCwweDE4ZWI4LDB4MWM3NWUsMHgxMWQzMCwgLy8gNjQwCgkJCTB4MThlOWMsMHgxMWQxOCwweDE4ZThlLDB4MTFkMGMsMHgxMWQwNiwweDEwY2I4LDB4MTg2NWUsMHgxMWRiOCwweDEwYzljLDB4MTFkOWMsIC8vIDY1MAoJCQkweDEwYzhlLDB4MTFkOGUsMHgxMDQ1ZSwweDEwY2RlLDB4MTFkZGUsMHgxM2Q0MCwweDE5ZWIwLDB4MWNmNWMsMHgxM2QyMCwweDE5ZTk4LCAvLyA2NjAKCQkJMHgxY2Y0ZSwweDEzZDEwLDB4MTllOGMsMHgxM2QwOCwweDE5ZTg2LDB4MTNkMDQsMHgxM2QwMiwweDExY2IwLDB4MThlNWMsMHgxM2RiMCwgLy8gNjcwCgkJCTB4MTFjOTgsMHgxOGU0ZSwweDEzZDk4LDB4MTllY2UsMHgxM2Q4YywweDExYzg2LDB4MTNkODYsMHgxMGM1YywweDExY2RjLDB4MTBjNGUsIC8vIDY4MAoJCQkweDEzZGRjLDB4MTFjY2UsMHgxM2RjZSwweDFiZWEwLDB4MWRmNTgsMHgxZWZhZSwweDFiZTkwLDB4MWRmNGMsMHgxYmU4OCwweDFkZjQ2LCAvLyA2OTAKCQkJMHgxYmU4NCwweDFiZTgyLDB4MTNjYTAsMHgxOWU1OCwweDFjZjJlLDB4MTdkYTAsMHgxM2M5MCwweDE5ZTRjLDB4MTdkOTAsMHgxYmVjYywgLy8gNzAwCgkJCTB4MTllNDYsMHgxN2Q4OCwweDEzYzg0LDB4MTdkODQsMHgxM2M4MiwweDE3ZDgyLDB4MTFjNTgsMHgxOGUyZSwweDEzY2Q4LDB4MTFjNGMsIC8vIDcxMAoJCQkweDE3ZGQ4LDB4MTNjY2MsMHgxMWM0NiwweDE3ZGNjLDB4MTNjYzYsMHgxN2RjNiwweDEwYzJlLDB4MTFjNmUsMHgxM2NlZSwweDE3ZGVlLCAvLyA3MjAKCQkJMHgxYmU1MCwweDFkZjJjLDB4MWJlNDgsMHgxZGYyNiwweDFiZTQ0LDB4MWJlNDIsMHgxM2M1MCwweDE5ZTJjLDB4MTdjZDAsMHgxM2M0OCwgLy8gNzMwCgkJCTB4MTllMjYsMHgxN2NjOCwweDFiZTY2LDB4MTdjYzQsMHgxM2M0MiwweDE3Y2MyLDB4MTFjMmMsMHgxM2M2YywweDExYzI2LDB4MTdjZWMsIC8vIDc0MAoJCQkweDEzYzY2LDB4MTdjZTYsMHgxYmUyOCwweDFkZjE2LDB4MWJlMjQsMHgxYmUyMiwweDEzYzI4LDB4MTllMTYsMHgxN2M2OCwweDEzYzI0LCAvLyA3NTAKCQkJMHgxN2M2NCwweDEzYzIyLDB4MTdjNjIsMHgxMWMxNiwweDEzYzM2LDB4MTdjNzYsMHgxYmUxNCwweDFiZTEyLDB4MTNjMTQsMHgxN2MzNCwgLy8gNzYwCgkJCTB4MTNjMTIsMHgxN2MzMiwweDEwMmJjLDB4MTAyOWUsMHgxMDZiOCwweDE4MzVlLDB4MTA2OWMsMHgxMDY4ZSwweDEwMjVlLDB4MTA2ZGUsIC8vIDc3MAoJCQkweDEwZWIwLDB4MTg3NWMsMHgxMGU5OCwweDE4NzRlLDB4MTBlOGMsMHgxMGU4NiwweDEwNjVjLDB4MTBlZGMsMHgxMDY0ZSwweDEwZWNlLCAvLyA3ODAKCQkJMHgxMWVhMCwweDE4ZjU4LDB4MWM3YWUsMHgxMWU5MCwweDE4ZjRjLDB4MTFlODgsMHgxOGY0NiwweDExZTg0LDB4MTFlODIsMHgxMGU1OCwgLy8gNzkwCgkJCTB4MTg3MmUsMHgxMWVkOCwweDE4ZjZlLDB4MTFlY2MsMHgxMGU0NiwweDExZWM2LDB4MTA2MmUsMHgxMGU2ZSwweDExZWVlLDB4MTlmNTAsIC8vIDgwMAoJCQkweDFjZmFjLDB4MTlmNDgsMHgxY2ZhNiwweDE5ZjQ0LDB4MTlmNDIsMHgxMWU1MCwweDE4ZjJjLDB4MTNlZDAsMHgxOWY2YywweDE4ZjI2LCAvLyA4MTAKCQkJMHgxM2VjOCwweDExZTQ0LDB4MTNlYzQsMHgxMWU0MiwweDEzZWMyLDB4MTBlMmMsMHgxMWU2YywweDEwZTI2LDB4MTNlZWMsMHgxMWU2NiwgLy8gODIwCgkJCTB4MTNlZTYsMHgxZGZhOCwweDFlZmQ2LDB4MWRmYTQsMHgxZGZhMiwweDE5ZjI4LDB4MWNmOTYsMHgxYmY2OCwweDE5ZjI0LDB4MWJmNjQsIC8vIDgzMAoJCQkweDE5ZjIyLDB4MWJmNjIsMHgxMWUyOCwweDE4ZjE2LDB4MTNlNjgsMHgxMWUyNCwweDE3ZWU4LDB4MTNlNjQsMHgxMWUyMiwweDE3ZWU0LCAvLyA4NDAKCQkJMHgxM2U2MiwweDE3ZWUyLDB4MTBlMTYsMHgxMWUzNiwweDEzZTc2LDB4MTdlZjYsMHgxZGY5NCwweDFkZjkyLDB4MTlmMTQsMHgxYmYzNCwgLy8gODUwCgkJCTB4MTlmMTIsMHgxYmYzMiwweDExZTE0LDB4MTNlMzQsMHgxMWUxMiwweDE3ZTc0LDB4MTNlMzIsMHgxN2U3MiwweDFkZjhhLDB4MTlmMGEsIC8vIDg2MAoJCQkweDFiZjFhLDB4MTFlMGEsMHgxM2UxYSwweDE3ZTNhLDB4MTAzNWMsMHgxMDM0ZSwweDEwNzU4LDB4MTgzYWUsMHgxMDc0YywweDEwNzQ2LCAvLyA4NzAKCQkJMHgxMDMyZSwweDEwNzZlLDB4MTBmNTAsMHgxODdhYywweDEwZjQ4LDB4MTg3YTYsMHgxMGY0NCwweDEwZjQyLDB4MTA3MmMsMHgxMGY2YywgLy8gODgwCgkJCTB4MTA3MjYsMHgxMGY2NiwweDE4ZmE4LDB4MWM3ZDYsMHgxOGZhNCwweDE4ZmEyLDB4MTBmMjgsMHgxODc5NiwweDExZjY4LDB4MThmYjYsIC8vIDg5MAoJCQkweDExZjY0LDB4MTBmMjIsMHgxMWY2MiwweDEwNzE2LDB4MTBmMzYsMHgxMWY3NiwweDFjZmQ0LDB4MWNmZDIsMHgxOGY5NCwweDE5ZmI0LCAvLyA5MDAKCQkJMHgxOGY5MiwweDE5ZmIyLDB4MTBmMTQsMHgxMWYzNCwweDEwZjEyLDB4MTNmNzQsMHgxMWYzMiwweDEzZjcyLDB4MWNmY2EsMHgxOGY4YSwgLy8gOTEwCgkJCTB4MTlmOWEsMHgxMGYwYSwweDExZjFhLDB4MTNmM2EsMHgxMDNhYywweDEwM2E2LDB4MTA3YTgsMHgxODNkNiwweDEwN2E0LDB4MTA3YTIsIC8vIDkyMAoJCQkweDEwMzk2LDB4MTA3YjYsMHgxODdkNCwweDE4N2QyLDB4MTA3OTQsMHgxMGZiNCwweDEwNzkyLDB4MTBmYjIsMHgxYzdlYSkgICAgICAgICAvLyA5MjkKCSk7IC8vIGVuZCBvZiAkY2x1c3RlcnMgYXJyYXkKCgkvKioKCSAqIEFycmF5IG9mIGZhY3RvcnMgb2YgdGhlIFJlZWQtU29sb21vbiBwb2x5bm9taWFsIGVxdWF0aW9ucyB1c2VkIGZvciBlcnJvciBjb3JyZWN0aW9uOyBvbmUgc3ViIGFycmF5IGZvciBlYWNoIGNvcnJlY3Rpb24gbGV2ZWwgKDAtOCkuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkcnNmYWN0b3JzID0gYXJyYXkoCgkJYXJyYXkoIC8vIEVDTCAwICgyIGZhY3RvcnMpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHgwMWIsMHgzOTUpLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgMgoJCWFycmF5KCAvLyBFQ0wgMSAoNCBmYWN0b3JzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCTB4MjBhLDB4MjM4LDB4MmQzLDB4MzI5KSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgIDQKCQlhcnJheSggLy8gRUNMIDIgKDggZmFjdG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDBlZCwweDEzNCwweDFiNCwweDExYywweDI4NiwweDI4ZCwweDFhYywweDE3YiksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICA4CgkJYXJyYXkoIC8vIEVDTCAzICgxNiBmYWN0b3JzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHgxMTIsMHgyMzIsMHgwZTgsMHgyZjMsMHgyNTcsMHgyMGMsMHgzMjEsMHgwODQsMHgxMjcsMHgwNzQsMHgxYmEsMHgxYWMsMHgxMjcsMHgwMmEsMHgwYjAsMHgwNDEpLC8vICAxNgoJCWFycmF5KCAvLyBFQ0wgNCAoMzIgZmFjdG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCTB4MTY5LDB4MjNmLDB4MzlhLDB4MjBkLDB4MGIwLDB4MjRhLDB4MjgwLDB4MTQxLDB4MjE4LDB4MmU2LDB4MmE1LDB4MmU2LDB4MmFmLDB4MTFjLDB4MGMxLDB4MjA1LCAvLyAgMTYKCQkJMHgxMTEsMHgxZWUsMHgxMDcsMHgwOTMsMHgyNTEsMHgzMjAsMHgyM2IsMHgxNDAsMHgzMjMsMHgwODUsMHgwZTcsMHgxODYsMHgyYWQsMHgxNGEsMHgwM2YsMHgxOWEpLC8vICAzMgoJCWFycmF5KCAvLyBFQ0wgNSAoNjQgZmFjdG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkJCTB4MjFiLDB4MWE2LDB4MDA2LDB4MDVkLDB4MzVlLDB4MzAzLDB4MWM1LDB4MDZhLDB4MjYyLDB4MTFmLDB4MDZiLDB4MWY5LDB4MmRkLDB4MzZkLDB4MTdkLDB4MjY0LCAvLyAgMTYKCQkJMHgyZDMsMHgxZGMsMHgxY2UsMHgwYWMsMHgxYWUsMHgyNjEsMHgzNWEsMHgzMzYsMHgyMWYsMHgxNzgsMHgxZmYsMHgxOTAsMHgyYTAsMHgyZmEsMHgxMWIsMHgwYjgsIC8vICAzMgoJCQkweDFiOCwweDAyMywweDIwNywweDAxZiwweDFjYywweDI1MiwweDBlMSwweDIxNywweDIwNSwweDE2MCwweDI1ZCwweDA5ZSwweDI4YiwweDBjOSwweDFlOCwweDFmNiwgLy8gIDQ4CgkJCTB4Mjg4LDB4MmRkLDB4MmNkLDB4MDUzLDB4MTk0LDB4MDYxLDB4MTE4LDB4MzAzLDB4MzQ4LDB4Mjc1LDB4MDA0LDB4MTdkLDB4MzRiLDB4MjZmLDB4MTA4LDB4MjFmKSwvLyAgNjQKCQlhcnJheSggLy8gRUNMIDYgKDEyOCBmYWN0b3JzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDIwOSwweDEzNiwweDM2MCwweDIyMywweDM1YSwweDI0NCwweDEyOCwweDE3YiwweDAzNSwweDMwYiwweDM4MSwweDFiYywweDE5MCwweDM5ZCwweDJlZCwweDE5ZiwgLy8gIDE2CgkJCTB4MzM2LDB4MDVkLDB4MGQ5LDB4MGQwLDB4M2EwLDB4MGY0LDB4MjQ3LDB4MjZjLDB4MGY2LDB4MDk0LDB4MWJmLDB4Mjc3LDB4MTI0LDB4MzhjLDB4MWVhLDB4MmMwLCAvLyAgMzIKCQkJMHgyMDQsMHgxMDIsMHgxYzksMHgzOGIsMHgyNTIsMHgyZDMsMHgyYTIsMHgxMjQsMHgxMTAsMHgwNjAsMHgyYWMsMHgxYjAsMHgyYWUsMHgyNWUsMHgzNWMsMHgyMzksIC8vICA0OAoJCQkweDBjMSwweDBkYiwweDA4MSwweDBiYSwweDBlYywweDExZiwweDBjMCwweDMwNywweDExNiwweDBhZCwweDAyOCwweDE3YiwweDJjOCwweDFjZiwweDI4NiwweDMwOCwgLy8gIDY0CgkJCTB4MGFiLDB4MWViLDB4MTI5LDB4MmZiLDB4MDljLDB4MmRjLDB4MDVmLDB4MTBlLDB4MWJmLDB4MDVhLDB4MWZiLDB4MDMwLDB4MGU0LDB4MzM1LDB4MzI4LDB4MzgyLCAvLyAgODAKCQkJMHgzMTAsMHgyOTcsMHgyNzMsMHgxN2EsMHgxN2UsMHgxMDYsMHgxN2MsMHgyNWEsMHgyZjIsMHgxNTAsMHgwNTksMHgyNjYsMHgwNTcsMHgxYjAsMHgyOWUsMHgyNjgsIC8vICA5NgoJCQkweDA5ZCwweDE3NiwweDBmMiwweDJkNiwweDI1OCwweDEwZCwweDE3NywweDM4MiwweDM0ZCwweDFjNiwweDE2MiwweDA4MiwweDMyZSwweDI0YiwweDMyNCwweDAyMiwgLy8gMTEyCgkJCTB4MGQzLDB4MTRhLDB4MjFiLDB4MTI5LDB4MzNiLDB4MzYxLDB4MDI1LDB4MjA1LDB4MzQyLDB4MTNiLDB4MjI2LDB4MDU2LDB4MzIxLDB4MDA0LDB4MDZjLDB4MjFiKSwvLyAxMjgKCQlhcnJheSggLy8gRUNMIDcgKDI1NiBmYWN0b3JzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJCQkweDIwYywweDM3ZSwweDA0YiwweDJmZSwweDM3MiwweDM1OSwweDA0YSwweDBjYywweDA1MiwweDI0YSwweDJjNCwweDBmYSwweDM4OSwweDMxMiwweDA4YSwweDJkMCwgLy8gIDE2CgkJCTB4MzVhLDB4MGMyLDB4MTM3LDB4MzkxLDB4MTEzLDB4MGJlLDB4MTc3LDB4MzUyLDB4MWI2LDB4MmRkLDB4MGMyLDB4MTE4LDB4MGM5LDB4MTE4LDB4MzNjLDB4MmY1LCAvLyAgMzIKCQkJMHgyYzYsMHgzMmUsMHgzOTcsMHgwNTksMHgwNDQsMHgyMzksMHgwMGIsMHgwY2MsMHgzMWMsMHgyNWQsMHgyMWMsMHgzOTEsMHgzMjEsMHgyYmMsMHgzMWYsMHgwODksIC8vICA0OAoJCQkweDFiNywweDFhMiwweDI1MCwweDI5YywweDE2MSwweDM1YiwweDE3MiwweDJiNiwweDE0NSwweDBmMCwweDBkOCwweDEwMSwweDExYywweDIyNSwweDBkMSwweDM3NCwgLy8gIDY0CgkJCTB4MTNiLDB4MDQ2LDB4MTQ5LDB4MzE5LDB4MWVhLDB4MTEyLDB4MzZkLDB4MGEyLDB4MmVkLDB4MzJjLDB4MmFjLDB4MWNkLDB4MTRlLDB4MTc4LDB4MzUxLDB4MjA5LCAvLyAgODAKCQkJMHgxMzMsMHgxMjMsMHgzMjMsMHgyYzgsMHgwMTMsMHgxNjYsMHgxOGYsMHgzOGMsMHgwNjcsMHgxZmYsMHgwMzMsMHgwMDgsMHgyMDUsMHgwZTEsMHgxMjEsMHgxZDYsIC8vICA5NgoJCQkweDI3ZCwweDJkYiwweDA0MiwweDBmZiwweDM5NSwweDEwZCwweDFjZiwweDMzZSwweDJkYSwweDFiMSwweDM1MCwweDI0OSwweDA4OCwweDIxYSwweDM4YSwweDA1YSwgLy8gMTEyCgkJCTB4MDAyLDB4MTIyLDB4MmU3LDB4MGM3LDB4MjhmLDB4Mzg3LDB4MTQ5LDB4MDMxLDB4MzIyLDB4MjQ0LDB4MTYzLDB4MjRjLDB4MGJjLDB4MWNlLDB4MDBhLDB4MDg2LCAvLyAxMjgKCQkJMHgyNzQsMHgxNDAsMHgxZGYsMHgwODIsMHgyZTMsMHgwNDcsMHgxMDcsMHgxM2UsMHgxNzYsMHgyNTksMHgwYzAsMHgyNWQsMHgwOGUsMHgyYTEsMHgyYWYsMHgwZWEsIC8vIDE0NAoJCQkweDJkMiwweDE4MCwweDBiMSwweDJmMCwweDI1ZiwweDI4MCwweDFjNywweDBjMSwweDJiMSwweDJjMywweDMyNSwweDI4MSwweDAzMCwweDAzYywweDJkYywweDI2ZCwgLy8gMTYwCgkJCTB4MzdmLDB4MjIwLDB4MTA1LDB4MzU0LDB4MjhmLDB4MTM1LDB4MmI5LDB4MmYzLDB4MmY0LDB4MDNjLDB4MGU3LDB4MzA1LDB4MWIyLDB4MWE1LDB4MmQ2LDB4MjEwLCAvLyAxNzYKCQkJMHgxZjcsMHgwNzYsMHgwMzEsMHgzMWIsMHgwMjAsMHgwOTAsMHgxZjQsMHgwZWUsMHgzNDQsMHgxOGEsMHgxMTgsMHgyMzYsMHgxM2YsMHgwMDksMHgyODcsMHgyMjYsIC8vIDE5MgoJCQkweDA0OSwweDM5MiwweDE1NiwweDA3ZSwweDAyMCwweDJhOSwweDE0YiwweDMxOCwweDI2YywweDAzYywweDI2MSwweDFiOSwweDBiNCwweDMxNywweDM3ZCwweDJmMiwgLy8gMjA4CgkJCTB4MjVkLDB4MTdmLDB4MGU0LDB4MmVkLDB4MmY4LDB4MGQ1LDB4MDM2LDB4MTI5LDB4MDg2LDB4MDM2LDB4MzQyLDB4MTJiLDB4MzlhLDB4MGJmLDB4MzhlLDB4MjE0LCAvLyAyMjQKCQkJMHgyNjEsMHgzM2QsMHgwYmQsMHgwMTQsMHgwYTcsMHgwMWQsMHgzNjgsMHgxYzEsMHgwNTMsMHgxOTIsMHgwMjksMHgyOTAsMHgxZjksMHgyNDMsMHgxZTEsMHgwYWQsIC8vIDI0MAoJCQkweDE5NCwweDBmYiwweDJiMCwweDA1ZiwweDFmMSwweDIyYiwweDI4MiwweDIxZiwweDEzMywweDA5ZiwweDM5YywweDIyZSwweDI4OCwweDAzNywweDFmMSwweDAwYSksLy8gMjU2CgkJYXJyYXkoIC8vIEVDTCA4ICg1MTIgZmFjdG9ycykgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCQkJMHgxNjAsMHgwNGQsMHgxNzUsMHgxZjgsMHgwMjMsMHgyNTcsMHgxYWMsMHgwY2YsMHgxOTksMHgyM2UsMHgwNzYsMHgxZjIsMHgxMWQsMHgxN2MsMHgxNWUsMHgxZWMsIC8vICAxNgoJCQkweDBjNSwweDEwOSwweDM5OCwweDA5YiwweDM5MiwweDEyYiwweDBlNSwweDI4MywweDEyNiwweDM2NywweDEzMiwweDA1OCwweDA1NywweDBjMSwweDE2MCwweDMwZCwgLy8gIDMyCgkJCTB4MzRlLDB4MDRiLDB4MTQ3LDB4MjA4LDB4MWIzLDB4MjFmLDB4MGNiLDB4MjlhLDB4MGY5LDB4MTVhLDB4MzBkLDB4MjZkLDB4MjgwLDB4MTBjLDB4MzFhLDB4MjE2LCAvLyAgNDgKCQkJMHgyMWIsMHgzMGQsMHgxOTgsMHgxODYsMHgyODQsMHgwNjYsMHgxZGMsMHgxZjMsMHgxMjIsMHgyNzgsMHgyMjEsMHgwMjUsMHgzNWEsMHgzOTQsMHgyMjgsMHgwMjksIC8vICA2NAoJCQkweDIxZSwweDEyMSwweDA3YSwweDExMCwweDE3ZiwweDMyMCwweDFlNSwweDA2MiwweDJmMCwweDFkOCwweDJmOSwweDA2YiwweDMxMCwweDM1YywweDI5MiwweDJlNSwgLy8gIDgwCgkJCTB4MTIyLDB4MGNjLDB4MmE5LDB4MTk3LDB4MzU3LDB4MDU1LDB4MDYzLDB4MDNlLDB4MWUyLDB4MGI0LDB4MDE0LDB4MTI5LDB4MWMzLDB4MjUxLDB4MzkxLDB4MDhlLCAvLyAgOTYKCQkJMHgzMjgsMHgyYWMsMHgxMWYsMHgyMTgsMHgyMzEsMHgwNGMsMHgyOGQsMHgzODMsMHgyZDksMHgyMzcsMHgyZTgsMHgxODYsMHgyMDEsMHgwYzAsMHgyMDQsMHgxMDIsIC8vIDExMgoJCQkweDBmMCwweDIwNiwweDMxYSwweDE4YiwweDMwMCwweDM1MCwweDAzMywweDI2MiwweDE4MCwweDBhOCwweDBiZSwweDMzYSwweDE0OCwweDI1NCwweDMxMiwweDEyZiwgLy8gMTI4CgkJCTB4MjNhLDB4MTdkLDB4MTlmLDB4MjgxLDB4MDljLDB4MGVkLDB4MDk3LDB4MWFkLDB4MjEzLDB4MGNmLDB4MmE0LDB4MmM2LDB4MDU5LDB4MGE4LDB4MTMwLDB4MTkyLCAvLyAxNDQKCQkJMHgwMjgsMHgyYzQsMHgyM2YsMHgwYTIsMHgzNjAsMHgwZTUsMHgwNDEsMHgzNWQsMHgzNDksMHgyMDAsMHgwYTQsMHgxZGQsMHgwZGQsMHgwNWMsMHgxNjYsMHgzMTEsIC8vIDE2MAoJCQkweDEyMCwweDE2NSwweDM1MiwweDM0NCwweDMzYiwweDJlMCwweDJjMywweDA1ZSwweDAwOCwweDFlZSwweDA3MiwweDIwOSwweDAwMiwweDFmMywweDM1MywweDIxZiwgLy8gMTc2CgkJCTB4MDk4LDB4MmQ5LDB4MzAzLDB4MDVmLDB4MGY4LDB4MTY5LDB4MjQyLDB4MTQzLDB4MzU4LDB4MzFkLDB4MTIxLDB4MDMzLDB4MmFjLDB4MWQyLDB4MjE1LDB4MzM0LCAvLyAxOTIKCQkJMHgyOWQsMHgwMmQsMHgzODYsMHgxYzQsMHgwYTcsMHgxNTYsMHgwZjQsMHgwYWQsMHgwMjMsMHgxY2YsMHgyOGIsMHgwMzMsMHgyYmIsMHgyNGYsMHgxYzQsMHgyNDIsIC8vIDIwOAoJCQkweDAyNSwweDA3YywweDEyYSwweDE0YywweDIyOCwweDAyYiwweDFhYiwweDA3NywweDI5NiwweDMwOSwweDFkYiwweDM1MiwweDJmYywweDE2YywweDI0MiwweDM4ZiwgLy8gMjI0CgkJCTB4MTFiLDB4MmM3LDB4MWQ4LDB4MWE0LDB4MGY1LDB4MTIwLDB4MjUyLDB4MThhLDB4MWZmLDB4MTQ3LDB4MjRkLDB4MzA5LDB4MmJiLDB4MmIwLDB4MDJiLDB4MTk4LCAvLyAyNDAKCQkJMHgzNGEsMHgxN2YsMHgyZDEsMHgyMDksMHgyMzAsMHgyODQsMHgyY2EsMHgyMmYsMHgwM2UsMHgwOTEsMHgzNjksMHgyOTcsMHgyYzksMHgwOWYsMHgyYTAsMHgyZDksIC8vIDI1NgoJCQkweDI3MCwweDAzYiwweDBjMSwweDFhMSwweDA5ZSwweDBkMSwweDIzMywweDIzNCwweDE1NywweDJiNSwweDA2ZCwweDI2MCwweDIzMywweDE2ZCwweDBiNSwweDMwNCwgLy8gMjcyCgkJCTB4MmE1LDB4MTM2LDB4MGY4LDB4MTYxLDB4MmM0LDB4MTlhLDB4MjQzLDB4MzY2LDB4MjY5LDB4MzQ5LDB4Mjc4LDB4MzVjLDB4MTIxLDB4MjE4LDB4MDIzLDB4MzA5LCAvLyAyODgKCQkJMHgyNmEsMHgyNGEsMHgxYTgsMHgzNDEsMHgwNGQsMHgyNTUsMHgxNWEsMHgxMGQsMHgyZjUsMHgyNzgsMHgyYjcsMHgyZWYsMHgxNGIsMHgwZjcsMHgwYjgsMHgwMmQsIC8vIDMwNAoJCQkweDMxMywweDJhOCwweDAxMiwweDA0MiwweDE5NywweDE3MSwweDAzNiwweDFlYywweDBlNCwweDI2NSwweDMzZSwweDM5YSwweDFiNSwweDIwNywweDI4NCwweDM4OSwgLy8gMzIwCgkJCTB4MzE1LDB4MWE0LDB4MTMxLDB4MWI5LDB4MGNmLDB4MTJjLDB4MzdjLDB4MzNiLDB4MDhkLDB4MjE5LDB4MTdkLDB4Mjk2LDB4MjAxLDB4MDM4LDB4MGZjLDB4MTU1LCAvLyAzMzYKCQkJMHgwZjIsMHgzMWQsMHgzNDYsMHgzNDUsMHgyZDAsMHgwZTAsMHgxMzMsMHgyNzcsMHgwM2QsMHgwNTcsMHgyMzAsMHgxMzYsMHgyZjQsMHgyOTksMHgxOGQsMHgzMjgsIC8vIDM1MgoJCQkweDM1MywweDEzNSwweDFkOSwweDMxYiwweDE3YSwweDAxZiwweDI4NywweDM5MywweDFjYiwweDMyNiwweDI0ZSwweDJkYiwweDFhOSwweDBkOCwweDIyNCwweDBmOSwgLy8gMzY4CgkJCTB4MTQxLDB4MzcxLDB4MmJiLDB4MjE3LDB4MmExLDB4MzBlLDB4MGQyLDB4MzJmLDB4Mzg5LDB4MTJmLDB4MzRiLDB4MzlhLDB4MTE5LDB4MDQ5LDB4MWQ1LDB4MzE3LCAvLyAzODQKCQkJMHgyOTQsMHgwYTIsMHgxZjIsMHgxMzQsMHgwOWIsMHgxYTYsMHgzOGIsMHgzMzEsMHgwYmIsMHgwM2UsMHgwMTAsMHgxYTksMHgyMTcsMHgxNTAsMHgxMWUsMHgxYjUsIC8vIDQwMAoJCQkweDE3NywweDExMSwweDI2MiwweDEyOCwweDBiNywweDM5YiwweDA3NCwweDI5YiwweDJlZiwweDE2MSwweDAzZSwweDE2ZSwweDJiMywweDE3YiwweDJhZiwweDM0YSwgLy8gNDE2CgkJCTB4MDI1LDB4MTY1LDB4MmQwLDB4MmU2LDB4MTRhLDB4MDA1LDB4MDI3LDB4MzliLDB4MTM3LDB4MWE4LDB4MGYyLDB4MmVkLDB4MTQxLDB4MDM2LDB4MjlkLDB4MTNjLCAvLyA0MzIKCQkJMHgxNTYsMHgxMmIsMHgyMTYsMHgwNjksMHgyOWIsMHgxZTgsMHgyODAsMHgyYTAsMHgyNDAsMHgyMWMsMHgxM2MsMHgxZTYsMHgyZDEsMHgyNjIsMHgwMmUsMHgyOTAsIC8vIDQ0OAoJCQkweDFiZiwweDBhYiwweDI2OCwweDFkMCwweDBiZSwweDIxMywweDEyOSwweDE0MSwweDJmYSwweDJmMCwweDIxNSwweDBhZiwweDA4NiwweDAwZSwweDE3ZCwweDFiMSwgLy8gNDY0CgkJCTB4MmNkLDB4MDJkLDB4MDZmLDB4MDE0LDB4MjU0LDB4MTFjLDB4MmUwLDB4MDhhLDB4Mjg2LDB4MTliLDB4MzZkLDB4MjlkLDB4MDhkLDB4Mzk3LDB4MDJkLDB4MzBjLCAvLyA0ODAKCQkJMHgxOTcsMHgwYTQsMHgxNGMsMHgzODMsMHgwYTUsMHgyZDYsMHgyNTgsMHgxNDUsMHgxZjIsMHgyOGYsMHgxNjUsMHgyZjAsMHgzMDAsMHgwZGYsMHgzNTEsMHgyODcsIC8vIDQ5NgoJCQkweDAzZiwweDEzNiwweDM1ZiwweDBmYiwweDE2ZSwweDEzMCwweDExYSwweDJlMiwweDJhMywweDE5YSwweDE4NSwweDBmNCwweDAxZiwweDA3OSwweDEyZiwweDEwNykgLy8gNTEyCgkpOwoKCS8qKgoJICogVGhpcyBpcyB0aGUgY2xhc3MgY29uc3RydWN0b3IuCgkgKiBDcmVhdGVzIGEgUERGNDE3IG9iamVjdAoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcmVwcmVzZW50IHVzaW5nIFBERjQxNwoJICogQHBhcmFtICRlY2wgKGludCkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCAoMC04KTsgZGVmYXVsdCAtMSA9IGF1dG9tYXRpYyBjb3JyZWN0aW9uIGxldmVsCgkgKiBAcGFyYW0gJGFzcGVjdHJhdGlvIChmbG9hdCkgdGhlIHdpZHRoIHRvIGhlaWdodCBvZiB0aGUgc3ltYm9sIChleGNsdWRpbmcgcXVpZXQgem9uZXMpCgkgKiBAcGFyYW0gJG1hY3JvIChhcnJheSkgaW5mb3JtYXRpb24gZm9yIG1hY3JvIGJsb2NrCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBfX2NvbnN0cnVjdCgkY29kZSwgJGVjbD0tMSwgJGFzcGVjdHJhdGlvPTIsICRtYWNybz1hcnJheSgpKSB7CgkJJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOwoJCWlmICgoaXNfbnVsbCgkY29kZSkpIE9SICgkY29kZSA9PSAnXDAnKSBPUiAoJGNvZGUgPT0gJycpKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gZ2V0IHRoZSBpbnB1dCBzZXF1ZW5jZSBhcnJheQoJCSRzZXF1ZW5jZSA9ICR0aGlzLT5nZXRJbnB1dFNlcXVlbmNlcygkY29kZSk7CgkJJGNvZGV3b3JkcyA9IGFycmF5KCk7IC8vIGFycmF5IG9mIGNvZGUtd29yZHMKCQlmb3JlYWNoKCRzZXF1ZW5jZSBhcyAkc2VxKSB7CgkJCSRjdyA9ICR0aGlzLT5nZXRDb21wYWN0aW9uKCRzZXFbMF0sICRzZXFbMV0sIHRydWUpOwoJCQkkY29kZXdvcmRzID0gYXJyYXlfbWVyZ2UoJGNvZGV3b3JkcywgJGN3KTsKCQl9CgkJaWYgKCRjb2Rld29yZHNbMF0gPT0gOTAwKSB7CgkJCS8vIFRleHQgQWxwaGEgaXMgdGhlIGRlZmF1bHQgbW9kZSwgc28gcmVtb3ZlIHRoZSBmaXJzdCBjb2RlCgkJCWFycmF5X3NoaWZ0KCRjb2Rld29yZHMpOwoJCX0KCQkvLyBjb3VudCBudW1iZXIgb2YgY29kZXdvcmRzCgkJJG51bWN3ID0gY291bnQoJGNvZGV3b3Jkcyk7CgkJaWYgKCRudW1jdyA+IDkyNSkgewoJCQkvLyByZWFjaGVkIG1heGltdW0gZGF0YSBjb2Rld29yZCBjYXBhY2l0eQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCS8vIGJ1aWxkIG1hY3JvIGNvbnRyb2wgYmxvY2sgY29kZXdvcmRzCgkJaWYgKCFlbXB0eSgkbWFjcm8pKSB7CgkJCSRtYWNyb2N3ID0gYXJyYXkoKTsKCQkJLy8gYmVnaW5uaW5nIG9mIG1hY3JvIGNvbnRyb2wgYmxvY2sKCQkJJG1hY3JvY3dbXSA9IDkyODsKCQkJLy8gc2VnbWVudCBpbmRleAoJCQkkY3cgPSAkdGhpcy0+Z2V0Q29tcGFjdGlvbig5MDIsIHNwcmludGYoJyUwNWQnLCAkbWFjcm9bJ3NlZ21lbnRfaW5kZXgnXSksIGZhbHNlKTsKCQkJJG1hY3JvY3cgPSBhcnJheV9tZXJnZSgkbWFjcm9jdywgJGN3KTsKCQkJLy8gZmlsZSBJRAoJCQkkY3cgPSAkdGhpcy0+Z2V0Q29tcGFjdGlvbig5MDAsICRtYWNyb1snZmlsZV9pZCddLCBmYWxzZSk7CgkJCSRtYWNyb2N3ID0gYXJyYXlfbWVyZ2UoJG1hY3JvY3csICRjdyk7CgkJCS8vIG9wdGlvbmFsIGZpZWxkcwoJCQkkb3B0bW9kZXMgPSBhcnJheSg5MDAsOTAyLDkwMiw5MDAsOTAwLDkwMiw5MDIpOwoJCQkkb3B0c2l6ZSA9IGFycmF5KC0xLDIsNCwtMSwtMSwtMSwyKTsKCQkJZm9yZWFjaCAoJG9wdG1vZGVzIGFzICRrID0+ICRvbW9kZSkgewoJCQkJaWYgKGlzc2V0KCRtYWNyb1snb3B0aW9uXycuJGtdKSkgewoJCQkJCSRtYWNyb2N3W10gPSA5MjM7CgkJCQkJJG1hY3JvY3dbXSA9ICRrOwoJCQkJCWlmICgkb3B0c2l6ZVska10gPT0gMikgewoJCQkJCQkkbWFjcm9bJ29wdGlvbl8nLiRrXSA9IHNwcmludGYoJyUwNWQnLCAkbWFjcm9bJ29wdGlvbl8nLiRrXSk7CgkJCQkJfSBlbHNlaWYgKCRvcHRzaXplWyRrXSA9PSA0KSB7CgkJCQkJCSRtYWNyb1snb3B0aW9uXycuJGtdID0gc3ByaW50ZignJTAxMGQnLCAkbWFjcm9bJ29wdGlvbl8nLiRrXSk7CgkJCQkJfQoJCQkJCSRjdyA9ICR0aGlzLT5nZXRDb21wYWN0aW9uKCRvbW9kZSwgJG1hY3JvWydvcHRpb25fJy4ka10sIGZhbHNlKTsKCQkJCQkkbWFjcm9jdyA9IGFycmF5X21lcmdlKCRtYWNyb2N3LCAkY3cpOwoJCQkJfQoJCQl9CgkJCWlmICgkbWFjcm9bJ3NlZ21lbnRfaW5kZXgnXSA9PSAoJG1hY3JvWydzZWdtZW50X3RvdGFsJ10gLSAxKSkgewoJCQkJLy8gZW5kIG9mIGNvbnRyb2wgYmxvY2sKCQkJCSRtYWNyb2N3W10gPSA5MjI7CgkJCX0KCQkJLy8gdXBkYXRlIHRvdGFsIGNvZGV3b3JkcwoJCQkkbnVtY3cgKz0gY291bnQoJG1hY3JvY3cpOwoJCX0KCQkvLyBzZXQgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJCSRlY2wgPSAkdGhpcy0+Z2V0RXJyb3JDb3JyZWN0aW9uTGV2ZWwoJGVjbCwgJG51bWN3KTsKCQkvLyBudW1iZXIgb2YgY29kZXdvcmRzIGZvciBlcnJvciBjb3JyZWN0aW9uCgkJJGVycnNpemUgPSAoMiA8PCAkZWNsKTsKCQkvLyBjYWxjdWxhdGUgbnVtYmVyIG9mIGNvbHVtbnMgKG51bWJlciBvZiBjb2Rld29yZHMgcGVyIHJvdykgYW5kIHJvd3MKCQkkbmNlID0gKCRudW1jdyArICRlcnJzaXplICsgMSk7CgkJJGNvbHMgPSByb3VuZCgoc3FydCg0NzYxICsgKDY4ICogJGFzcGVjdHJhdGlvICogUk9XSEVJR0hUICogJG5jZSkpIC0gNjkpIC8gMzQpOwoJCS8vIGFkanVzdCBjb2xzCgkJaWYgKCRjb2xzIDwgMSkgewoJCQkkY29scyA9IDE7CgkJfSBlbHNlaWYgKCRjb2xzID4gMzApIHsKCQkJJGNvbHMgPSAzMDsKCQl9CgkJJHJvd3MgPSBjZWlsKCRuY2UgLyAkY29scyk7CgkJJHNpemUgPSAoJGNvbHMgKiAkcm93cyk7CgkJLy8gYWRqdXN0IHJvd3MKCQlpZiAoKCRyb3dzIDwgMykgT1IgKCRyb3dzID4gOTApKSB7CgkJCWlmICgkcm93cyA8IDMpIHsKCQkJCSRyb3dzID0gMzsKCQkJfSBlbHNlaWYgKCRyb3dzID4gOTApIHsKCQkJCSRyb3dzID0gOTA7CgkJCX0KCQkJJGNvbHMgPSBjZWlsKCRzaXplIC8gJHJvd3MpOwoJCQkkc2l6ZSA9ICgkY29scyAqICRyb3dzKTsKCQl9CgkJaWYgKCRzaXplID4gOTI4KSB7CgkJCS8vIHNldCBkaW1lbnNpb25zIHRvIGdldCBtYXhpbXVtIGNhcGFjaXR5CgkJCWlmIChhYnMoJGFzcGVjdHJhdGlvIC0gKDE3ICogMjkgLyAzMikpIDwgYWJzKCRhc3BlY3RyYXRpbyAtICgxNyAqIDE2IC8gNTgpKSkgewoJCQkJJGNvbHMgPSAyOTsKCQkJCSRyb3dzID0gMzI7CgkJCX0gZWxzZSB7CgkJCQkkY29scyA9IDE2OwoJCQkJJHJvd3MgPSA1ODsKCQkJfQoJCQkkc2l6ZSA9IDkyODsKCQl9CgkJLy8gY2FsY3VsYXRlIHBhZGRpbmcKCQkkcGFkID0gKCRzaXplIC0gJG5jZSk7CgkJaWYgKCRwYWQgPiAwKSB7CgkJCWlmICgoJHNpemUgLSAkcm93cykgPT0gJG5jZSkgewoJCQkJLS0kcm93czsKCQkJCSRzaXplIC09ICRyb3dzOwoJCQl9IGVsc2UgewoJCQkJLy8gYWRkIHBhZGluZwoJCQkJJGNvZGV3b3JkcyA9IGFycmF5X21lcmdlKCRjb2Rld29yZHMsIGFycmF5X2ZpbGwoMCwgJHBhZCwgOTAwKSk7CgkJCX0KCQl9CgkJaWYgKCFlbXB0eSgkbWFjcm8pKSB7CgkJCS8vIGFkZCBtYWNybyBzZWN0aW9uCgkJCSRjb2Rld29yZHMgPSBhcnJheV9tZXJnZSgkY29kZXdvcmRzLCAkbWFjcm9jdyk7CgkJfQoJCS8vIFN5bWJvbCBMZW5naHQgRGVzY3JpcHRvciAobnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzIGluY2x1ZGluZyBTeW1ib2wgTGVuZ2h0IERlc2NyaXB0b3IgYW5kIHBhZCBjb2Rld29yZHMpCgkJJHNsZCA9ICRzaXplIC0gJGVycnNpemU7CgkJLy8gYWRkIHN5bWJvbCBsZW5ndGggZGVzY3JpcHRpb24KCQlhcnJheV91bnNoaWZ0KCRjb2Rld29yZHMsICRzbGQpOwoJCS8vIGNhbGN1bGF0ZSBlcnJvciBjb3JyZWN0aW9uCgkJJGVjdyA9ICR0aGlzLT5nZXRFcnJvckNvcnJlY3Rpb24oJGNvZGV3b3JkcywgJGVjbCk7CgkJLy8gYWRkIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzCgkJJGNvZGV3b3JkcyA9IGFycmF5X21lcmdlKCRjb2Rld29yZHMsICRlY3cpOwoJCS8vIGFkZCBob3Jpem9udGFsIHF1aWV0IHpvbmVzIHRvIHN0YXJ0IGFuZCBzdG9wIHBhdHRlcm5zCgkJJHBzdGFydCA9IHN0cl9yZXBlYXQoJzAnLCBRVUlFVEgpLiR0aGlzLT5zdGFydF9wYXR0ZXJuOwoJCSRwc3RvcCA9ICR0aGlzLT5zdG9wX3BhdHRlcm4uc3RyX3JlcGVhdCgnMCcsIFFVSUVUSCk7CgkJJGJhcmNvZGVfYXJyYXlbJ251bV9yb3dzJ10gPSAoJHJvd3MgKiBST1dIRUlHSFQpICsgKDIgKiBRVUlFVFYpOwoJCSRiYXJjb2RlX2FycmF5WydudW1fY29scyddID0gKCgkY29scyArIDIpICogMTcpICsgMzUgKyAoMiAqIFFVSUVUSCk7CgkJJGJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ10gPSBhcnJheSgpOwoJCS8vIGJ1aWxkIHJvd3MgZm9yIHZlcnRpY2FsIHF1aWV0IHpvbmUKCQlpZiAoUVVJRVRWID4gMCkgewoJCQkkZW1wdHlfcm93ID0gYXJyYXlfZmlsbCgwLCAkYmFyY29kZV9hcnJheVsnbnVtX2NvbHMnXSwgMCk7CgkJCWZvciAoJGkgPSAwOyAkaSA8IFFVSUVUVjsgKyskaSkgewoJCQkJLy8gYWRkIHZlcnRpY2FsIHF1aWV0IHJvd3MKCQkJCSRiYXJjb2RlX2FycmF5WydiY29kZSddW10gPSAkZW1wdHlfcm93OwoJCQl9CgkJfQoJCSRrID0gMDsgLy8gY29kZXdvcmQgaW5kZXgKCQkkY2lkID0gMDsgLy8gaW5pdGlhbCBjbHVzdGVyCgkJLy8gZm9yIGVhY2ggcm93CgkJZm9yICgkciA9IDA7ICRyIDwgJHJvd3M7ICsrJHIpIHsKCQkJLy8gcm93IHN0YXJ0IGNvZGUKCQkJJHJvdyA9ICRwc3RhcnQ7CgkJCXN3aXRjaCAoJGNpZCkgewoJCQkJY2FzZSAwOiB7CgkJCQkJJEwgPSAoKDMwICogaW50dmFsKCRyIC8gMykpICsgaW50dmFsKCgkcm93cyAtIDEpIC8gMykpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAxOiB7CgkJCQkJJEwgPSAoKDMwICogaW50dmFsKCRyIC8gMykpICsgKCRlY2wgKiAzKSArICgoJHJvd3MgLSAxKSAlIDMpKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMjogewoJCQkJCSRMID0gKCgzMCAqIGludHZhbCgkciAvIDMpKSArICgkY29scyAtIDEpKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkvLyBsZWZ0IHJvdyBpbmRpY2F0b3IKCQkJJHJvdyAuPSBzcHJpbnRmKCclMTdiJywgJHRoaXMtPmNsdXN0ZXJzWyRjaWRdWyRMXSk7CgkJCS8vIGZvciBlYWNoIGNvbHVtbgoJCQlmb3IgKCRjID0gMDsgJGMgPCAkY29sczsgKyskYykgewoJCQkJJHJvdyAuPSBzcHJpbnRmKCclMTdiJywgJHRoaXMtPmNsdXN0ZXJzWyRjaWRdWyRjb2Rld29yZHNbJGtdXSk7CgkJCQkrKyRrOwoJCQl9CgkJCXN3aXRjaCAoJGNpZCkgewoJCQkJY2FzZSAwOiB7CgkJCQkJJEwgPSAoKDMwICogaW50dmFsKCRyIC8gMykpICsgKCRjb2xzIC0gMSkpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAxOiB7CgkJCQkJJEwgPSAoKDMwICogaW50dmFsKCRyIC8gMykpICsgaW50dmFsKCgkcm93cyAtIDEpIC8gMykpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAyOiB7CgkJCQkJJEwgPSAoKDMwICogaW50dmFsKCRyIC8gMykpICsgKCRlY2wgKiAzKSArICgoJHJvd3MgLSAxKSAlIDMpKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkvLyByaWdodCByb3cgaW5kaWNhdG9yCgkJCSRyb3cgLj0gc3ByaW50ZignJTE3YicsICR0aGlzLT5jbHVzdGVyc1skY2lkXVskTF0pOwoJCQkvLyByb3cgc3RvcCBjb2RlCgkJCSRyb3cgLj0gJHBzdG9wOwoJCQkvLyBjb252ZXJ0IHRoZSBzdHJpbmcgdG8gYXJyYXkKCQkJJGFyb3cgPSBwcmVnX3NwbGl0KCcvLycsICRyb3csIC0xLCBQUkVHX1NQTElUX05PX0VNUFRZKTsKCQkJLy8gZHVwbGljYXRlIHJvdyB0byBnZXQgdGhlIGRlc2lyZWQgaGVpZ2h0CgkJCWZvciAoJGggPSAwOyAkaCA8IFJPV0hFSUdIVDsgKyskaCkgewoJCQkJJGJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ11bXSA9ICRhcm93OwoJCQl9CgkJCSsrJGNpZDsKCQkJaWYgKCRjaWQgPiAyKSB7CgkJCQkkY2lkID0gMDsKCQkJfQoJCX0KCQlpZiAoUVVJRVRWID4gMCkgewoJCQlmb3IgKCRpID0gMDsgJGkgPCBRVUlFVFY7ICsrJGkpIHsKCQkJCS8vIGFkZCB2ZXJ0aWNhbCBxdWlldCByb3dzCgkJCQkkYmFyY29kZV9hcnJheVsnYmNvZGUnXVtdID0gJGVtcHR5X3JvdzsKCQkJfQoJCX0KCQkkdGhpcy0+YmFyY29kZV9hcnJheSA9ICRiYXJjb2RlX2FycmF5OwoJfQoKCS8qKgoJICogUmV0dXJucyBhIGJhcmNvZGUgYXJyYXkgd2hpY2ggaXMgcmVhZGFibGUgYnkgVENQREYKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSBhcnJheSByZWFkYWJsZSBieSBUQ1BERjsKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEJhcmNvZGVBcnJheSgpIHsKCQlyZXR1cm4gJHRoaXMtPmJhcmNvZGVfYXJyYXk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBlcnJvciBjb3JyZWN0aW9uIGxldmVsICgwLTgpIHRvIGJlIHVzZWQKCSAqIEBwYXJhbSAkZWNsIChpbnQpIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCSAqIEBwYXJhbSAkbnVtY3cgKGludCkgbnVtYmVyIG9mIGRhdGEgY29kZXdvcmRzCgkgKiBAcmV0dXJuIGludCBlcnJvciBjb3JyZWN0aW9uIGxldmVsCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRFcnJvckNvcnJlY3Rpb25MZXZlbCgkZWNsLCAkbnVtY3cpIHsKCQkvLyBnZXQgbWF4aW11bSBjb3JyZWN0aW9uIGxldmVsCgkJJG1heGVjbCA9IDg7IC8vIHN0YXJ0aW5nIGVycm9yIGxldmVsCgkJJG1heGVycnNpemUgPSAoOTI4IC0gJG51bWN3KTsgLy8gYXZhaWxhYmxlIGNvZGV3b3JkcyBmb3IgZXJyb3IKCQl3aGlsZSAoJG1heGVjbCA+IDApIHsKCQkJJGVycnNpemUgPSAoMiA8PCAkZWNsKTsKCQkJaWYgKCRtYXhlcnJzaXplID49ICRlcnJzaXplKSB7CgkJCQlicmVhazsKCQkJfQoJCQktLSRtYXhlY2w7CgkJfQoJCS8vIGNoZWNrIGZvciBhdXRvbWF0aWMgbGV2ZWxzCgkJaWYgKCgkZWNsIDwgMCkgT1IgKCRlY2wgPiA4KSkgewoJCQlpZiAoJG51bWN3IDwgNDEpIHsKCQkJCSRlY2wgPSAyOwoJCQl9IGVsc2VpZiAoJG51bWN3IDwgMTYxKSB7CgkJCQkkZWNsID0gMzsKCQkJfSBlbHNlaWYgKCRudW1jdyA8IDMyMSkgewoJCQkJJGVjbCA9IDQ7CgkJCX0gZWxzZWlmICgkbnVtY3cgPCA4NjQpIHsKCQkJCSRlY2wgPSA1OwoJCQl9IGVsc2UgewoJCQkJJGVjbCA9ICRtYXhlY2w7CgkJCX0KCQl9CgkJaWYgKCRlY2wgPiAkbWF4ZWNsKSB7CgkJCSRlY2wgPSAkbWF4ZWNsOwoJCX0KCQlyZXR1cm4gJGVjbDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGVycm9yIGNvcnJlY3Rpb24gY29kZXdvcmRzCgkgKiBAcGFyYW0gJGN3IChhcnJheSkgYXJyYXkgb2YgY29kZXdvcmRzIGluY2x1ZGluZyBTeW1ib2wgTGVuZ2h0IERlc2NyaXB0b3IgYW5kIHBhZAoJICogQHBhcmFtICRlY2wgKGludCkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCAwLTgKCSAqIEByZXR1cm4gYXJyYXkgb2YgZXJyb3IgY29ycmVjdGlvbiBjb2Rld29yZHMKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVycm9yQ29ycmVjdGlvbigkY3csICRlY2wpIHsKCQkvLyBnZXQgZXJyb3IgY29ycmVjdGlvbiBjb2VmZmljaWVudHMKCQkkZWNjID0gJHRoaXMtPnJzZmFjdG9yc1skZWNsXTsKCQkvLyBudW1iZXIgb2YgZXJyb3IgY29ycmVjdGlvbiBmYWN0b3JzCgkJJGVjbHNpemUgPSAoMiA8PCAkZWNsKTsKCQkvLyBtYXhpbXVtIGluZGV4IGZvciAkcnNmYWN0b3JzWyRlY2xdCgkJJGVjbG1heGlkID0gKCRlY2xzaXplIC0gMSk7CgkJLy8gaW5pdGlhbGl6ZSBhcnJheSBvZiBlcnJvciBjb3JyZWN0aW9uIGNvZGV3b3JkcwoJCSRlY3cgPSBhcnJheV9maWxsKDAsICRlY2xzaXplLCAwKTsKCQkvLyBmb3IgZWFjaCBkYXRhIGNvZGV3b3JkCgkJZm9yZWFjaCgkY3cgYXMgJGsgPT4gJGQpIHsKCQkJJHQxID0gKCRkICsgJGVjd1skZWNsbWF4aWRdKSAlIDkyOTsKCQkJZm9yICgkaiA9ICRlY2xtYXhpZDsgJGogPiAwOyAtLSRqKSB7CgkJCQkkdDIgPSAoJHQxICogJGVjY1skal0pICUgOTI5OwoJCQkJJHQzID0gOTI5IC0gJHQyOwoJCQkJJGVjd1skal0gPSAoJGVjd1soJGogLSAxKV0gKyAkdDMpICUgOTI5OwoJCQl9CgkJCSR0MiA9ICgkdDEgKiAkZWNjWzBdKSAlIDkyOTsKCQkJJHQzID0gOTI5IC0gJHQyOwoJCQkkZWN3WzBdID0gJHQzICUgOTI5OwoJCX0KCQlmb3JlYWNoKCRlY3cgYXMgJGogPT4gJGUpIHsKCQkJaWYgKCRlICE9IDApIHsKCQkJCSRlY3dbJGpdID0gOTI5IC0gJGU7CgkJCX0KCQl9CgkJJGVjdyA9IGFycmF5X3JldmVyc2UoJGVjdyk7CgkJcmV0dXJuICRlY3c7Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYXJyYXkgb2Ygc2VxdWVuY2VzIGZyb20gaW5wdXQKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlCgkgKiBAcmV0dXJuIGJpZGltZW5zaW9uYWwgYXJyYXkgY29udGFpbmluZyBjaGFyYWN0ZXJzIGFuZCBjbGFzc2lmaWNhdGlvbgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SW5wdXRTZXF1ZW5jZXMoJGNvZGUpIHsKCQkkc2VxdWVuY2VfYXJyYXkgPSBhcnJheSgpOyAvLyBhcnJheSB0byBiZSByZXR1cm5lZAoJCSRudW1zZXEgPSBhcnJheSgpOwoJCS8vIGdldCBudW1lcmljIHNlcXVlbmNlcwoJCXByZWdfbWF0Y2hfYWxsKCcvKFswLTldezEzLDQ0fSkvJywgJGNvZGUsICRudW1zZXEsIFBSRUdfT0ZGU0VUX0NBUFRVUkUpOwoJCSRudW1zZXFbMV1bXSA9IGFycmF5KCcnLCBzdHJsZW4oJGNvZGUpKTsKCQkkb2Zmc2V0ID0gMDsKCQlmb3JlYWNoKCRudW1zZXFbMV0gYXMgJHNlcSkgewoJCQkkc2VxbGVuID0gc3RybGVuKCRzZXFbMF0pOwoJCQlpZiAoJHNlcVsxXSA+IDApIHsKCQkJCS8vIGV4dHJhY3QgdGV4dCBzZXF1ZW5jZSBiZWZvcmUgdGhlIG51bWJlciBzZXF1ZW5jZQoJCQkJJHByZXZzZXEgPSBzdWJzdHIoJGNvZGUsICRvZmZzZXQsICgkc2VxWzFdIC0gJG9mZnNldCkpOwoJCQkJJHRleHRzZXEgPSBhcnJheSgpOwoJCQkJLy8gZ2V0IHRleHQgc2VxdWVuY2VzCgkJCQlwcmVnX21hdGNoX2FsbCgnLyhbXHgwOVx4MGFceDBkXHgyMC1ceDdlXXs1LH0pLycsICRwcmV2c2VxLCAkdGV4dHNlcSwgUFJFR19PRkZTRVRfQ0FQVFVSRSk7CgkJCQkkdGV4dHNlcVsxXVtdID0gYXJyYXkoJycsIHN0cmxlbigkcHJldnNlcSkpOwoJCQkJJHR4dG9mZnNldCA9IDA7CgkJCQlmb3JlYWNoKCR0ZXh0c2VxWzFdIGFzICR0eHRzZXEpIHsKCQkJCQkkdHh0c2VxbGVuID0gc3RybGVuKCR0eHRzZXFbMF0pOwoJCQkJCWlmICgkdHh0c2VxWzFdID4gMCkgewoJCQkJCQkvLyBleHRyYWN0IGJ5dGUgc2VxdWVuY2UgYmVmb3JlIHRoZSB0ZXh0IHNlcXVlbmNlCgkJCQkJCSRwcmV2dHh0c2VxID0gc3Vic3RyKCRwcmV2c2VxLCAkdHh0b2Zmc2V0LCAoJHR4dHNlcVsxXSAtICR0eHRvZmZzZXQpKTsKCQkJCQkJaWYgKHN0cmxlbigkcHJldnR4dHNlcSkgPiAwKSB7CgkJCQkJCQkvLyBhZGQgQllURSBzZXF1ZW5jZQoJCQkJCQkJaWYgKChzdHJsZW4oJHByZXZ0eHRzZXEpID09IDEpIEFORCAoKGNvdW50KCRzZXF1ZW5jZV9hcnJheSkgPiAwKSBBTkQgKCRzZXF1ZW5jZV9hcnJheVsoY291bnQoJHNlcXVlbmNlX2FycmF5KSAtIDEpXVswXSA9PSA5MDApKSkgewoJCQkJCQkJCSRzZXF1ZW5jZV9hcnJheVtdID0gYXJyYXkoOTEzLCAkcHJldnR4dHNlcSk7CgkJCQkJCQl9IGVsc2VpZiAoKHN0cmxlbigkcHJldnR4dHNlcSkgJSA2KSA9PSAwKSB7CgkJCQkJCQkJJHNlcXVlbmNlX2FycmF5W10gPSBhcnJheSg5MjQsICRwcmV2dHh0c2VxKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHNlcXVlbmNlX2FycmF5W10gPSBhcnJheSg5MDEsICRwcmV2dHh0c2VxKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJHR4dHNlcWxlbiA+IDApIHsKCQkJCQkJLy8gYWRkIG51bWVyaWMgc2VxdWVuY2UKCQkJCQkJJHNlcXVlbmNlX2FycmF5W10gPSBhcnJheSg5MDAsICR0eHRzZXFbMF0pOwoJCQkJCX0KCQkJCQkkdHh0b2Zmc2V0ID0gJHR4dHNlcVsxXSArICR0eHRzZXFsZW47CgkJCQl9CgkJCX0KCQkJaWYgKCRzZXFsZW4gPiAwKSB7CgkJCQkvLyBhZGQgbnVtZXJpYyBzZXF1ZW5jZQoJCQkJJHNlcXVlbmNlX2FycmF5W10gPSBhcnJheSg5MDIsICRzZXFbMF0pOwoJCQl9CgkJCSRvZmZzZXQgPSAkc2VxWzFdICsgJHNlcWxlbjsKCQl9CgkJcmV0dXJuICRzZXF1ZW5jZV9hcnJheTsKCX0KCgkvKioKCSAqIENvbXBhY3QgZGF0YSBieSBtb2RlLgoJICogQHBhcmFtICRtb2RlIChpbnQpIGNvbXBhY3Rpb24gbW9kZSBudW1iZXIKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBkYXRhIHRvIGNvbXBhY3QKCSAqIEBwYXJhbSAkYWRkbW9kZSAoYm9vbGVhbikgaWYgdHJ1ZSBhZGQgdGhlIG1vZGUgY29kZXdvcmQgYXQgZmlyc3QgcG9zaXRpb24KCSAqIEByZXR1cm4gYXJyYXkgb2YgY29kZXdvcmRzCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRDb21wYWN0aW9uKCRtb2RlLCAkY29kZSwgJGFkZG1vZGU9dHJ1ZSkgewoJCSRjdyA9IGFycmF5KCk7IC8vIGFycmF5IG9mIGNvZGV3b3JkcyB0byByZXR1cm4KCQlzd2l0Y2goJG1vZGUpIHsKCQkJY2FzZSA5MDA6IHsgLy8gVGV4dCBDb21wYWN0aW9uIG1vZGUgbGF0Y2gKCQkJCSRzdWJtb2RlID0gMDsgLy8gZGVmYXVsdCBBbHBoYSBzdWItbW9kZQoJCQkJJHR4dGFyciA9IGFycmF5KCk7IC8vIGFycmF5IG9mIGNoYXJhY3RlcnMgYW5kIHN1Yi1tb2RlIHN3aXRjaGluZyBjaGFyYWN0ZXJzCgkJCQkkY29kZWxlbiA9IHN0cmxlbigkY29kZSk7CgkJCQlmb3IgKCRpID0gMDsgJGkgPCAkY29kZWxlbjsgKyskaSkgewoJCQkJCSRjaHZhbCA9IG9yZCgkY29kZXskaX0pOwoJCQkJCWlmICgoJGsgPSBhcnJheV9zZWFyY2goJGNodmFsLCAkdGhpcy0+dGV4dHN1Ym1vZGVzWyRzdWJtb2RlXSkpICE9PSBmYWxzZSkgewoJCQkJCQkvLyB3ZSBhcmUgb24gdGhlIHNhbWUgc3ViLW1vZGUKCQkJCQkJJHR4dGFycltdID0gJGs7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gdGhlIHN1Yi1tb2RlIGlzIGNoYW5nZWQKCQkJCQkJZm9yICgkcyA9IDA7ICRzIDwgNDsgKyskcykgewoJCQkJCQkJLy8gc2VhcmNoIG5ldyBzdWItbW9kZQoJCQkJCQkJaWYgKCgkcyAhPSAkc3VibW9kZSkgQU5EICgoJGsgPSBhcnJheV9zZWFyY2goJGNodmFsLCAkdGhpcy0+dGV4dHN1Ym1vZGVzWyRzXSkpICE9PSBmYWxzZSkpIHsKCQkJCQkJCQkvLyAkcyBpcyB0aGUgbmV3IHN1Ym1vZGUKCQkJCQkJCQlpZiAoKCgoJGkgKyAxKSA9PSAkY29kZWxlbikgT1IgKCgoJGkgKyAxKSA8ICRjb2RlbGVuKSBBTkQgKGFycmF5X3NlYXJjaChvcmQoJGNvZGV7KCRpICsgMSl9KSwgJHRoaXMtPnRleHRzdWJtb2Rlc1skc3VibW9kZV0pICE9PSBmYWxzZSkpKSBBTkQgKCgkcyA9PSAzKSBPUiAoKCRzID09IDApIEFORCAoJHN1Ym1vZGUgPT0gMSkpKSkgewoJCQkJCQkJCQkvLyBzaGlmdCAodGVtcG9yYXJ5IGNoYW5nZSBvbmx5IGZvciB0aGlzIGNoYXIpCgkJCQkJCQkJCWlmICgkcyA9PSAzKSB7CgkJCQkJCQkJCQkvLyBzaGlmdCB0byBwdW50dWFjdGlvbgoJCQkJCQkJCQkJJHR4dGFycltdID0gMjk7CgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkvLyBzaGlmdCBmcm9tIGxvd2VyIHRvIGFscGhhCgkJCQkJCQkJCQkkdHh0YXJyW10gPSAyNzsKCQkJCQkJCQkJfQoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCS8vIGxhdGNoCgkJCQkJCQkJCSR0eHRhcnIJPSBhcnJheV9tZXJnZSgkdHh0YXJyLCAkdGhpcy0+dGV4dGxhdGNoWycnLiRzdWJtb2RlLiRzXSk7CgkJCQkJCQkJCS8vIHNldCBuZXcgc3VibW9kZQoJCQkJCQkJCQkkc3VibW9kZSA9ICRzOwoJCQkJCQkJCX0KCQkJCQkJCQkvLyBhZGQgY2hhcmFjdGVkIGNvZGUgdG8gYXJyYXkKCQkJCQkJCQkkdHh0YXJyW10gPSAkazsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSR0eHRhcnJsZW4gPSBjb3VudCgkdHh0YXJyKTsKCQkJCWlmICgoJHR4dGFycmxlbiAlIDIpICE9IDApIHsKCQkJCQkvLyBhZGQgcGFkZGluZwoJCQkJCSR0eHRhcnJbXSA9IDI5OwoJCQkJCSsrJHR4dGFycmxlbjsKCQkJCX0KCQkJCS8vIGNhbGN1bGF0ZSBjb2Rld29yZHMKCQkJCWZvciAoJGkgPSAwOyAkaSA8ICR0eHRhcnJsZW47ICRpICs9IDIpIHsKCQkJCQkkY3dbXSA9ICgzMCAqICR0eHRhcnJbJGldKSArICR0eHRhcnJbKCRpICsgMSldOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSA5MDE6CgkJCWNhc2UgOTI0OiB7IC8vIEJ5dGUgQ29tcGFjdGlvbiBtb2RlIGxhdGNoCgkJCQl3aGlsZSAoKCRjb2RlbGVuID0gc3RybGVuKCRjb2RlKSkgPiAwKSB7CgkJCQkJaWYgKCRjb2RlbGVuID4gNikgewoJCQkJCQkkcmVzdCA9IHN1YnN0cigkY29kZSwgNik7CgkJCQkJCSRjb2RlID0gc3Vic3RyKCRjb2RlLCAwLCA2KTsKCQkJCQkJJHN1YmxlbiA9IDY7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHJlc3QgPSAnJzsKCQkJCQkJJHN1YmxlbiA9IHN0cmxlbigkY29kZSk7CgkJCQkJfQoJCQkJCWlmICgkc3VibGVuID09IDYpIHsKCQkJCQkJJHQgPSBiY211bCgnJy5vcmQoJGNvZGVbMF0pLCAnMTA5OTUxMTYyNzc3NicpOwoJCQkJCQkkdCA9IGJjYWRkKCR0LCBiY211bCgnJy5vcmQoJGNvZGV7MX0pLCAnNDI5NDk2NzI5NicpKTsKCQkJCQkJJHQgPSBiY2FkZCgkdCwgYmNtdWwoJycub3JkKCRjb2RlezJ9KSwgJzE2Nzc3MjE2JykpOwoJCQkJCQkkdCA9IGJjYWRkKCR0LCBiY211bCgnJy5vcmQoJGNvZGV7M30pLCAnNjU1MzYnKSk7CgkJCQkJCSR0ID0gYmNhZGQoJHQsIGJjbXVsKCcnLm9yZCgkY29kZXs0fSksICcyNTYnKSk7CgkJCQkJCSR0ID0gYmNhZGQoJHQsICcnLm9yZCgkY29kZXs1fSkpOwoJCQkJCQkvLyB0bXAgYXJyYXkgZm9yIHRoZSA2IGJ5dGVzIGJsb2NrCgkJCQkJCSRjdzYgPSBhcnJheSgpOwoJCQkJCQlkbyB7CgkJCQkJCQkkZCA9IGJjbW9kKCR0LCAnOTAwJyk7CgkJCQkJCQkkdCA9IGJjZGl2KCR0LCAnOTAwJyk7CgkJCQkJCQkvLyBwcmVwZW5kIHRoZSB2YWx1ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBhcnJheQoJCQkJCQkJYXJyYXlfdW5zaGlmdCgkY3c2LCAkZCk7CgkJCQkJCX0gd2hpbGUgKCR0ICE9ICcwJyk7CgkJCQkJCS8vIGFwcGVuZCB0aGUgcmVzdWx0IGFycmF5IGF0IHRoZSBlbmQKCQkJCQkJJGN3ID0gYXJyYXlfbWVyZ2UoJGN3LCAkY3c2KTsKCQkJCQl9IGVsc2UgewoJCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAkc3VibGVuOyArKyRpKSB7CgkJCQkJCQkkY3dbXSA9IG9yZCgkY29kZXskaX0pOwoJCQkJCQl9CgkJCQkJfQoJCQkJCSRjb2RlID0gJHJlc3Q7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDkwMjogeyAvLyBOdW1lcmljIENvbXBhY3Rpb24gbW9kZSBsYXRjaAoJCQkJd2hpbGUgKCgkY29kZWxlbiA9IHN0cmxlbigkY29kZSkpID4gMCkgewoJCQkJCWlmICgkY29kZWxlbiA+IDQ0KSB7CgkJCQkJCSRyZXN0ID0gc3Vic3RyKCRjb2RlLCA0NCk7CgkJCQkJCSRjb2RlID0gc3Vic3RyKCRjb2RlLCAwLCA0NCk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHJlc3QgPSAnJzsKCQkJCQl9CgkJCQkJJHQgPSAnMScuJGNvZGU7CgkJCQkJZG8gewoJCQkJCQkkZCA9IGJjbW9kKCR0LCAnOTAwJyk7CgkJCQkJCSR0ID0gYmNkaXYoJHQsICc5MDAnKTsKCQkJCQkJYXJyYXlfdW5zaGlmdCgkY3csICRkKTsKCQkJCQl9IHdoaWxlICgkdCAhPSAnMCcpOwoJCQkJCSRjb2RlID0gJHJlc3Q7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDkxMzogeyAvLyBCeXRlIENvbXBhY3Rpb24gbW9kZSBzaGlmdAoJCQkJJGN3W10gPSBvcmQoJGNvZGUpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKCRhZGRtb2RlKSB7CgkJCS8vIGFkZCB0aGUgY29tcGFjdGlvbiBtb2RlIGNvZGV3b3JkIGF0IHRoZSBiZWdpbm5pbmcKCQkJYXJyYXlfdW5zaGlmdCgkY3csICRtb2RlKTsKCQl9CgkJcmV0dXJuICRjdzsKCX0KCn0gLy8gZW5kIFBERjQxNyBjbGFzcwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEVORCBPRiBGSUxFCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/barcodes/qrcode.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogcXJjb2RlLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMTAKLy8gQmVnaW4gICAgICAgOiAyMDEwLTAzLTIyCi8vIExhc3QgVXBkYXRlIDogMjAxMi0wNy0yNQovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAxMC0yMDEyIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQovLyBhbG9uZyB3aXRoIFRDUERGLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgovLwovLyBTZWUgTElDRU5TRS5UWFQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBERVNDUklQVElPTiA6Ci8vCi8vIENsYXNzIHRvIGNyZWF0ZSBRUi1jb2RlIGFycmF5cyBmb3IgVENQREYgY2xhc3MuCi8vIFFSIENvZGUgc3ltYm9sIGlzIGEgMkQgYmFyY29kZSB0aGF0IGNhbiBiZSBzY2FubmVkIGJ5Ci8vIGhhbmR5IHRlcm1pbmFscyBzdWNoIGFzIGEgbW9iaWxlIHBob25lIHdpdGggQ0NELgovLyBUaGUgY2FwYWNpdHkgb2YgUVIgQ29kZSBpcyB1cCB0byA3MDAwIGRpZ2l0cyBvciA0MDAwCi8vIGNoYXJhY3RlcnMsIGFuZCBoYXMgaGlnaCByb2J1c3RuZXNzLgovLyBUaGlzIGNsYXNzIHN1cHBvcnRzIFFSIENvZGUgbW9kZWwgMiwgZGVzY3JpYmVkIGluCi8vIEpJUyAoSmFwYW5lc2UgSW5kdXN0cmlhbCBTdGFuZGFyZHMpIFgwNTEwOjIwMDQKLy8gb3IgSVNPL0lFQyAxODAwNC4KLy8gQ3VycmVudGx5IHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdCBzdXBwb3J0ZWQ6Ci8vIEVDSSBhbmQgRk5DMSBtb2RlLCBNaWNybyBRUiBDb2RlLCBRUiBDb2RlIG1vZGVsIDEsCi8vIFN0cnVjdHVyZWQgbW9kZS4KLy8KLy8gVGhpcyBjbGFzcyBpcyBkZXJpdmVkIGZyb20gdGhlIGZvbGxvd2luZyBwcm9qZWN0czoKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vICJQSFAgUVIgQ29kZSBlbmNvZGVyIgovLyBMaWNlbnNlOiBHTlUtTEdQTHYzCi8vIENvcHlyaWdodCAoQykgMjAxMCBieSBEb21pbmlrIER6aWVuaWEgPGRlbHRhbGFiIGF0IHBvY3p0YSBkb3QgZm0+Ci8vIGh0dHA6Ly9waHBxcmNvZGUuc291cmNlZm9yZ2UubmV0LwovLyBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9waHBxcmNvZGUvCi8vCi8vIFRoZSAiUEhQIFFSIENvZGUgZW5jb2RlciIgaXMgYmFzZWQgb24KLy8gIkMgbGlicXJlbmNvZGUgbGlicmFyeSIgKHZlci4gMy4xLjEpCi8vIExpY2Vuc2U6IEdOVS1MR1BMIDIuMQovLyBDb3B5cmlnaHQgKEMpIDIwMDYtMjAxMCBieSBLZW50YXJvIEZ1a3VjaGkKLy8gaHR0cDovL21lZ2F1aS5uZXQvZnVrdWNoaS93b3Jrcy9xcmVuY29kZS9pbmRleC5lbi5odG1sCi8vCi8vIFJlZWQtU29sb21vbiBjb2RlIGVuY29kZXIgaXMgd3JpdHRlbiBieSBQaGlsIEthcm4sIEtBOVEuCi8vIENvcHlyaWdodCAoQykgMjAwMi0yMDA2IFBoaWwgS2FybiwgS0E5UQovLwovLyBRUiBDb2RlIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIERFTlNPIFdBVkUgSU5DT1JQT1JBVEVECi8vIGh0dHA6Ly93d3cuZGVuc28td2F2ZS5jb20vcXJjb2RlL2luZGV4LWUuaHRtbAovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogQ2xhc3MgdG8gY3JlYXRlIFFSLWNvZGUgYXJyYXlzIGZvciBUQ1BERiBjbGFzcy4KICogUVIgQ29kZSBzeW1ib2wgaXMgYSAyRCBiYXJjb2RlIHRoYXQgY2FuIGJlIHNjYW5uZWQgYnkgaGFuZHkgdGVybWluYWxzIHN1Y2ggYXMgYSBtb2JpbGUgcGhvbmUgd2l0aCBDQ0QuCiAqIFRoZSBjYXBhY2l0eSBvZiBRUiBDb2RlIGlzIHVwIHRvIDcwMDAgZGlnaXRzIG9yIDQwMDAgY2hhcmFjdGVycywgYW5kIGhhcyBoaWdoIHJvYnVzdG5lc3MuCiAqIFRoaXMgY2xhc3Mgc3VwcG9ydHMgUVIgQ29kZSBtb2RlbCAyLCBkZXNjcmliZWQgaW4gSklTIChKYXBhbmVzZSBJbmR1c3RyaWFsIFN0YW5kYXJkcykgWDA1MTA6MjAwNCBvciBJU08vSUVDIDE4MDA0LgogKiBDdXJyZW50bHkgdGhlIGZvbGxvd2luZyBmZWF0dXJlcyBhcmUgbm90IHN1cHBvcnRlZDogRUNJIGFuZCBGTkMxIG1vZGUsIE1pY3JvIFFSIENvZGUsIFFSIENvZGUgbW9kZWwgMSwgU3RydWN0dXJlZCBtb2RlLgogKgogKiBUaGlzIGNsYXNzIGlzIGRlcml2ZWQgZnJvbSAiUEhQIFFSIENvZGUgZW5jb2RlciIgYnkgRG9taW5payBEemllbmlhIChodHRwOi8vcGhwcXJjb2RlLnNvdXJjZWZvcmdlLm5ldC8pIGJhc2VkIG9uICJsaWJxcmVuY29kZSBDIGxpYnJhcnkgMy4xLjEuIiBieSBLZW50YXJvIEZ1a3VjaGkgKGh0dHA6Ly9tZWdhdWkubmV0L2Z1a3VjaGkvd29ya3MvcXJlbmNvZGUvaW5kZXguZW4uaHRtbCksIGNvbnRhaW5zIFJlZWQtU29sb21vbiBjb2RlIHdyaXR0ZW4gYnkgUGhpbCBLYXJuLCBLQTlRLiBRUiBDb2RlIGlzIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIERFTlNPIFdBVkUgSU5DT1JQT1JBVEVEIChodHRwOi8vd3d3LmRlbnNvLXdhdmUuY29tL3FyY29kZS9pbmRleC1lLmh0bWwpLgogKiBQbGVhc2UgcmVhZCBjb21tZW50cyBvbiB0aGlzIGNsYXNzIHNvdXJjZSBmaWxlIGZvciBmdWxsIGNvcHlyaWdodCBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbi4KICoKICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGF1dGhvciBOaWNvbGEgQXN1bmkKICogQHZlcnNpb24gMS4wLjAxMAogKi8KCi8vIGRlZmluaXRpb25zCmlmICghZGVmaW5lZCgnUVJDT0RFREVGUycpKSB7CgoJLyoqCgkgKiBJbmRpY2F0ZSB0aGF0IGRlZmluaXRpb25zIGZvciB0aGlzIGNsYXNzIGFyZSBzZXQKCSAqLwoJZGVmaW5lKCdRUkNPREVERUZTJywgdHJ1ZSk7CgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvLyBFbmNvZGluZyBtb2RlcyAoY2hhcmFjdGVycyB3aGljaCBjYW4gYmUgZW5jb2RlZCBpbiBRUmNvZGUpCgoJLyoqCgkgKiBFbmNvZGluZyBtb2RlCgkgKi8KCWRlZmluZSgnUVJfTU9ERV9OTCcsIC0xKTsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUgbnVtZXJpYyAoMC05KS4gMyBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIHRvIDEwYml0IGxlbmd0aC4gSW4gdGhlb3J5LCA3MDg5IGNoYXJhY3RlcnMgb3IgbGVzcyBjYW4gYmUgc3RvcmVkIGluIGEgUVJjb2RlLgoJICovCglkZWZpbmUoJ1FSX01PREVfTk0nLCAwKTsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUgYWxwaGFudW1lcmljICgwLTlBLVogJCUqKy0uLzopIDQ1Y2hhcmFjdGVycy4gMiBjaGFyYWN0ZXJzIGFyZSBlbmNvZGVkIHRvIDExYml0IGxlbmd0aC4gSW4gdGhlb3J5LCA0Mjk2IGNoYXJhY3RlcnMgb3IgbGVzcyBjYW4gYmUgc3RvcmVkIGluIGEgUVJjb2RlLgoJICovCglkZWZpbmUoJ1FSX01PREVfQU4nLCAxKTsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUgOGJpdCBieXRlIGRhdGEuIEluIHRoZW9yeSwgMjk1MyBjaGFyYWN0ZXJzIG9yIGxlc3MgY2FuIGJlIHN0b3JlZCBpbiBhIFFSY29kZS4KCSAqLwoJZGVmaW5lKCdRUl9NT0RFXzhCJywgMik7CgoJLyoqCgkgKiBFbmNvZGluZyBtb2RlIEtBTkpJLiBBIEtBTkpJIGNoYXJhY3RlciAobXVsdGlieXRlIGNoYXJhY3RlcikgaXMgZW5jb2RlZCB0byAxM2JpdCBsZW5ndGguIEluIHRoZW9yeSwgMTgxNyBjaGFyYWN0ZXJzIG9yIGxlc3MgY2FuIGJlIHN0b3JlZCBpbiBhIFFSY29kZS4KCSAqLwoJZGVmaW5lKCdRUl9NT0RFX0tKJywgMyk7CgoJLyoqCgkgKiBFbmNvZGluZyBtb2RlIFNUUlVDVFVSRUQgKGN1cnJlbnRseSB1bnN1cHBvcnRlZCkKCSAqLwoJZGVmaW5lKCdRUl9NT0RFX1NUJywgNCk7CgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvLyBMZXZlbHMgb2YgZXJyb3IgY29ycmVjdGlvbi4KCS8vIFFSY29kZSBoYXMgYSBmdW5jdGlvbiBvZiBhbiBlcnJvciBjb3JyZWN0aW5nIGZvciBtaXNzIHJlYWRpbmcgdGhhdCB3aGl0ZSBpcyBibGFjay4KCS8vIEVycm9yIGNvcnJlY3RpbmcgaXMgZGVmaW5lZCBpbiA0IGxldmVsIGFzIGJlbG93LgoKCS8qKgoJICogRXJyb3IgY29ycmVjdGlvbiBsZXZlbCBMIDogQWJvdXQgNyUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC4KCSAqLwoJZGVmaW5lKCdRUl9FQ0xFVkVMX0wnLCAwKTsKCgkvKioKCSAqIEVycm9yIGNvcnJlY3Rpb24gbGV2ZWwgTSA6IEFib3V0IDE1JSBvciBsZXNzIGVycm9ycyBjYW4gYmUgY29ycmVjdGVkLgoJICovCglkZWZpbmUoJ1FSX0VDTEVWRUxfTScsIDEpOwoKCS8qKgoJICogRXJyb3IgY29ycmVjdGlvbiBsZXZlbCBRIDogQWJvdXQgMjUlIG9yIGxlc3MgZXJyb3JzIGNhbiBiZSBjb3JyZWN0ZWQuCgkgKi8KCWRlZmluZSgnUVJfRUNMRVZFTF9RJywgMik7CgoJLyoqCgkgKiBFcnJvciBjb3JyZWN0aW9uIGxldmVsIEggOiBBYm91dCAzMCUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC4KCSAqLwoJZGVmaW5lKCdRUl9FQ0xFVkVMX0gnLCAzKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8vIFZlcnNpb24uIFNpemUgb2YgUVJjb2RlIGlzIGRlZmluZWQgYXMgdmVyc2lvbi4KCS8vIFZlcnNpb24gaXMgZnJvbSAxIHRvIDQwLgoJLy8gVmVyc2lvbiAxIGlzIDIxKjIxIG1hdHJpeC4gQW5kIDQgbW9kdWxlcyBpbmNyZWFzZXMgd2hlbmV2ZXIgMSB2ZXJzaW9uIGluY3JlYXNlcy4KCS8vIFNvIHZlcnNpb24gNDAgaXMgMTc3KjE3NyBtYXRyaXguCgoJLyoqCgkgKiBNYXhpbXVtIFFSIENvZGUgdmVyc2lvbi4KCSAqLwoJZGVmaW5lKCdRUlNQRUNfVkVSU0lPTl9NQVgnLCA0MCk7CgoJLyoqCgkgKiBNYXhpbXVtIG1hdHJpeCBzaXplIGZvciBtYXhpbXVtIHZlcnNpb24gKHZlcnNpb24gNDAgaXMgMTc3KjE3NyBtYXRyaXgpLgoJICovCiAgICBkZWZpbmUoJ1FSU1BFQ19XSURUSF9NQVgnLCAxNzcpOwoKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBNYXRyaXggaW5kZXggdG8gZ2V0IHdpZHRoIGZyb20gJGNhcGFjaXR5IGFycmF5LgoJICovCiAgICBkZWZpbmUoJ1FSQ0FQX1dJRFRIJywgICAgMCk7CgogICAgLyoqCgkgKiBNYXRyaXggaW5kZXggdG8gZ2V0IG51bWJlciBvZiB3b3JkcyBmcm9tICRjYXBhY2l0eSBhcnJheS4KCSAqLwogICAgZGVmaW5lKCdRUkNBUF9XT1JEUycsICAgIDEpOwoKICAgIC8qKgoJICogTWF0cml4IGluZGV4IHRvIGdldCByZW1haW5kZXIgZnJvbSAkY2FwYWNpdHkgYXJyYXkuCgkgKi8KICAgIGRlZmluZSgnUVJDQVBfUkVNSU5ERVInLCAyKTsKCiAgICAvKioKCSAqIE1hdHJpeCBpbmRleCB0byBnZXQgZXJyb3IgY29ycmVjdGlvbiBsZXZlbCBmcm9tICRjYXBhY2l0eSBhcnJheS4KCSAqLwogICAgZGVmaW5lKCdRUkNBUF9FQycsICAgICAgIDMpOwoKCS8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gU3RydWN0dXJlIChjdXJyZW50bHkgdXN1cHBvcnRlZCkKCgkvKioKCSAqIE51bWJlciBvZiBoZWFkZXIgYml0cyBmb3Igc3RydWN0dXJlZCBtb2RlCgkgKi8KICAgIGRlZmluZSgnU1RSVUNUVVJFX0hFQURFUl9CSVRTJywgIDIwKTsKCiAgICAvKioKCSAqIE1heCBudW1iZXIgb2Ygc3ltYm9scyBmb3Igc3RydWN0dXJlZCBtb2RlCgkgKi8KICAgIGRlZmluZSgnTUFYX1NUUlVDVFVSRURfU1lNQk9MUycsIDE2KTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICAgIC8vIE1hc2tzCgogICAgLyoqCgkgKiBEb3duIHBvaW50IGJhc2UgdmFsdWUgZm9yIGNhc2UgMSBtYXNrIHBhdHRlcm4gKGNvbmNhdGVuYXRpb24gb2Ygc2FtZSBjb2xvciBpbiBhIGxpbmUgb3IgYSBjb2x1bW4pCgkgKi8KICAgIGRlZmluZSgnTjEnLCAgMyk7CgogICAgLyoqCgkgKiBEb3duIHBvaW50IGJhc2UgdmFsdWUgZm9yIGNhc2UgMiBtYXNrIHBhdHRlcm4gKG1vZHVsZSBibG9jayBvZiBzYW1lIGNvbG9yKQoJICovCglkZWZpbmUoJ04yJywgIDMpOwoKICAgIC8qKgoJICogRG93biBwb2ludCBiYXNlIHZhbHVlIGZvciBjYXNlIDMgbWFzayBwYXR0ZXJuICgxOjE6MzoxOjEoZGFyazpicmlnaHQ6ZGFyazpicmlnaHQ6ZGFyaylwYXR0ZXJuIGluIGEgbGluZSBvciBhIGNvbHVtbikKCSAqLwoJZGVmaW5lKCdOMycsIDQwKTsKCiAgICAvKioKCSAqIERvd24gcG9pbnQgYmFzZSB2YWx1ZSBmb3IgY2FzZSA0IG1hc2sgcGF0dGVybiAocmF0aW9uIG9mIGRhcmsgbW9kdWxlcyBpbiB3aG9sZSkKCSAqLwoJZGVmaW5lKCdONCcsIDEwKTsKCgkvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8vIE9wdGltaXphdGlvbiBzZXR0aW5ncwoKCS8qKgoJICogaWYgdHJ1ZSwgZXN0aW1hdGVzIGJlc3QgbWFzayAoc3BlYy4gZGVmYXVsdCwgYnV0IGV4dHJlbWFsbHkgc2xvdzsgc2V0IHRvIGZhbHNlIHRvIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGJvb3N0IGJ1dCAocHJvcGFibHkpIHdvcnN0IHF1YWxpdHkgY29kZQoJICovCglkZWZpbmUoJ1FSX0ZJTkRfQkVTVF9NQVNLJywgdHJ1ZSk7CgoJLyoqCgkgKiBpZiBmYWxzZSwgY2hlY2tzIGFsbCBtYXNrcyBhdmFpbGFibGUsIG90aGVyd2lzZSB2YWx1ZSB0ZWxscyBjb3VudCBvZiBtYXNrcyBuZWVkIHRvIGJlIGNoZWNrZWQsIG1hc2sgaWQgYXJlIGdvdCByYW5kb21seQoJICovCglkZWZpbmUoJ1FSX0ZJTkRfRlJPTV9SQU5ET00nLCAyKTsKCgkvKioKCSAqIHdoZW4gUVJfRklORF9CRVNUX01BU0sgPT09IGZhbHNlCgkgKi8KCWRlZmluZSgnUVJfREVGQVVMVF9NQVNLJywgMik7CgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCn0gLy8gZW5kIG9mIGRlZmluaXRpb25zCgovLyAjKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMqIyojKiMKCi8vIGZvciBjb21wYXRpYmlsaXR5IHdpdGggUEhQNAppZiAoIWZ1bmN0aW9uX2V4aXN0cygnc3RyX3NwbGl0JykpIHsKCS8qKgoJICogQ29udmVydCBhIHN0cmluZyB0byBhbiBhcnJheSAobmVlZGVkIGZvciBQSFA0IGNvbXBhdGliaWxpdHkpCgkgKiBAcGFyYW0gJHN0cmluZyAoc3RyaW5nKSBUaGUgaW5wdXQgc3RyaW5nLgoJICogQHBhcmFtICRzcGxpdF9sZW5ndGggKGludCkgTWF4aW11bSBsZW5ndGggb2YgdGhlIGNodW5rLgoJICogQHJldHVybiAgSWYgdGhlIG9wdGlvbmFsIHNwbGl0X2xlbmd0aCAgcGFyYW1ldGVyIGlzIHNwZWNpZmllZCwgdGhlIHJldHVybmVkIGFycmF5IHdpbGwgYmUgYnJva2VuIGRvd24gaW50byBjaHVua3Mgd2l0aCBlYWNoIGJlaW5nIHNwbGl0X2xlbmd0aCAgaW4gbGVuZ3RoLCBvdGhlcndpc2UgZWFjaCBjaHVuayB3aWxsIGJlIG9uZSBjaGFyYWN0ZXIgaW4gbGVuZ3RoLiBGQUxTRSBpcyByZXR1cm5lZCBpZiBzcGxpdF9sZW5ndGggaXMgbGVzcyB0aGFuIDEuIElmIHRoZSBzcGxpdF9sZW5ndGggbGVuZ3RoIGV4Y2VlZHMgdGhlIGxlbmd0aCBvZiBzdHJpbmcgLCB0aGUgZW50aXJlIHN0cmluZyBpcyByZXR1cm5lZCBhcyB0aGUgZmlyc3QgKGFuZCBvbmx5KSBhcnJheSBlbGVtZW50LgoJICovCglmdW5jdGlvbiBzdHJfc3BsaXQoJHN0cmluZywgJHNwbGl0X2xlbmd0aD0xKSB7CgkJaWYgKChzdHJsZW4oJHN0cmluZykgPiAkc3BsaXRfbGVuZ3RoKSBPUiAoISRzcGxpdF9sZW5ndGgpKSB7CgkJCWRvIHsKCQkJCSRjID0gc3RybGVuKCRzdHJpbmcpOwoJCQkJJHBhcnRzW10gPSBzdWJzdHIoJHN0cmluZywgMCwgJHNwbGl0X2xlbmd0aCk7CgkJCQkkc3RyaW5nID0gc3Vic3RyKCRzdHJpbmcsICRzcGxpdF9sZW5ndGgpOwoJCQl9IHdoaWxlICgkc3RyaW5nICE9PSBmYWxzZSk7CgkJfSBlbHNlIHsKCQkJJHBhcnRzID0gYXJyYXkoJHN0cmluZyk7CgkJfQoJCXJldHVybiAkcGFydHM7Cgl9Cn0KCi8vICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCgovKioKICogQGNsYXNzIFFSY29kZQogKiBDbGFzcyB0byBjcmVhdGUgUVItY29kZSBhcnJheXMgZm9yIFRDUERGIGNsYXNzLgogKiBRUiBDb2RlIHN5bWJvbCBpcyBhIDJEIGJhcmNvZGUgdGhhdCBjYW4gYmUgc2Nhbm5lZCBieSBoYW5keSB0ZXJtaW5hbHMgc3VjaCBhcyBhIG1vYmlsZSBwaG9uZSB3aXRoIENDRC4KICogVGhlIGNhcGFjaXR5IG9mIFFSIENvZGUgaXMgdXAgdG8gNzAwMCBkaWdpdHMgb3IgNDAwMCBjaGFyYWN0ZXJzLCBhbmQgaGFzIGhpZ2ggcm9idXN0bmVzcy4KICogVGhpcyBjbGFzcyBzdXBwb3J0cyBRUiBDb2RlIG1vZGVsIDIsIGRlc2NyaWJlZCBpbiBKSVMgKEphcGFuZXNlIEluZHVzdHJpYWwgU3RhbmRhcmRzKSBYMDUxMDoyMDA0IG9yIElTTy9JRUMgMTgwMDQuCiAqIEN1cnJlbnRseSB0aGUgZm9sbG93aW5nIGZlYXR1cmVzIGFyZSBub3Qgc3VwcG9ydGVkOiBFQ0kgYW5kIEZOQzEgbW9kZSwgTWljcm8gUVIgQ29kZSwgUVIgQ29kZSBtb2RlbCAxLCBTdHJ1Y3R1cmVkIG1vZGUuCiAqCiAqIFRoaXMgY2xhc3MgaXMgZGVyaXZlZCBmcm9tICJQSFAgUVIgQ29kZSBlbmNvZGVyIiBieSBEb21pbmlrIER6aWVuaWEgKGh0dHA6Ly9waHBxcmNvZGUuc291cmNlZm9yZ2UubmV0LykgYmFzZWQgb24gImxpYnFyZW5jb2RlIEMgbGlicmFyeSAzLjEuMS4iIGJ5IEtlbnRhcm8gRnVrdWNoaSAoaHR0cDovL21lZ2F1aS5uZXQvZnVrdWNoaS93b3Jrcy9xcmVuY29kZS9pbmRleC5lbi5odG1sKSwgY29udGFpbnMgUmVlZC1Tb2xvbW9uIGNvZGUgd3JpdHRlbiBieSBQaGlsIEthcm4sIEtBOVEuIFFSIENvZGUgaXMgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgREVOU08gV0FWRSBJTkNPUlBPUkFURUQgKGh0dHA6Ly93d3cuZGVuc28td2F2ZS5jb20vcXJjb2RlL2luZGV4LWUuaHRtbCkuCiAqIFBsZWFzZSByZWFkIGNvbW1lbnRzIG9uIHRoaXMgY2xhc3Mgc291cmNlIGZpbGUgZm9yIGZ1bGwgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uLgogKgogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKiBAdmVyc2lvbiAxLjAuMDEwCiAqLwpjbGFzcyBRUmNvZGUgewoKCS8qKgoJICogQmFyY29kZSBhcnJheSB0byBiZSByZXR1cm5lZCB3aGljaCBpcyByZWFkYWJsZSBieSBUQ1BERi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRiYXJjb2RlX2FycmF5ID0gYXJyYXkoKTsKCgkvKioKCSAqIFFSIGNvZGUgdmVyc2lvbi4gU2l6ZSBvZiBRUmNvZGUgaXMgZGVmaW5lZCBhcyB2ZXJzaW9uLiBWZXJzaW9uIGlzIGZyb20gMSB0byA0MC4gVmVyc2lvbiAxIGlzIDIxKjIxIG1hdHJpeC4gQW5kIDQgbW9kdWxlcyBpbmNyZWFzZXMgd2hlbmV2ZXIgMSB2ZXJzaW9uIGluY3JlYXNlcy4gU28gdmVyc2lvbiA0MCBpcyAxNzcqMTc3IG1hdHJpeC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR2ZXJzaW9uID0gMDsKCgkvKioKCSAqIExldmVscyBvZiBlcnJvciBjb3JyZWN0aW9uLiBTZWUgZGVmaW5pdGlvbnMgZm9yIHBvc3NpYmxlIHZhbHVlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsZXZlbCA9IFFSX0VDTEVWRUxfTDsKCgkvKioKCSAqIEVuY29kaW5nIG1vZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGludCA9IFFSX01PREVfOEI7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcsIGlmIHRydWUgdGhlIGlucHV0IHN0cmluZyB3aWxsIGJlIGNvbnZlcnRlZCB0byB1cHBlcmNhc2UuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkY2FzZXNlbnNpdGl2ZSA9IHRydWU7CgoJLyoqCgkgKiBTdHJ1Y3R1cmVkIFFSIGNvZGUgKG5vdCBzdXBwb3J0ZWQgeWV0KS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRzdHJ1Y3R1cmVkID0gMDsKCgkvKioKCSAqIE1hc2sgZGF0YS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRkYXRhOwoKCS8vIEZyYW1lRmlsbGVyCgoJLyoqCgkgKiBXaWR0aC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR3aWR0aDsKCgkvKioKCSAqIEZyYW1lLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGZyYW1lOwoKCS8qKgoJICogWCBwb3NpdGlvbiBvZiBiaXQuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkeDsKCgkvKioKCSAqIFkgcG9zaXRpb24gb2YgYml0LgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHk7CgoJLyoqCgkgKiBEaXJlY3Rpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZGlyOwoKCS8qKgoJICogU2luZ2xlIGJpdCB2YWx1ZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRiaXQ7CgoJLy8gLS0tLSBRUnJhd2NvZGUgLS0tLQoKCS8qKgoJICogRGF0YSBjb2RlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGRhdGFjb2RlID0gYXJyYXkoKTsKCgkvKioKCSAqIEVycm9yIGNvcnJlY3Rpb24gY29kZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRlY2Njb2RlID0gYXJyYXkoKTsKCgkvKioKCSAqIEJsb2Nrcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRibG9ja3M7CgoJLyoqCgkgKiBSZWVkLVNvbG9tb24gYmxvY2tzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHJzYmxvY2tzID0gYXJyYXkoKTsgLy9vZiBSU2Jsb2NrCgoJLyoqCgkgKiBDb3VudGVyLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNvdW50OwoKCS8qKgoJICogRGF0YSBsZW5ndGguCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZGF0YUxlbmd0aDsKCgkvKioKCSAqIEVycm9yIGNvcnJlY3Rpb24gbGVuZ3RoLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGVjY0xlbmd0aDsKCgkvKioKCSAqIFZhbHVlIGIxLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGIxOwoKCS8vIC0tLS0gUVJtYXNrIC0tLS0KCgkvKioKCSAqIFJ1biBsZW5ndGguCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkcnVuTGVuZ3RoID0gYXJyYXkoKTsKCgkvLyAtLS0tIFFSc3BsaXQgLS0tLQoKCS8qKgoJICogSW5wdXQgZGF0YSBzdHJpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZGF0YVN0ciA9ICcnOwoKCS8qKgoJICogSW5wdXQgaXRlbXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaXRlbXM7CgoJLy8gUmVlZC1Tb2xvbW9uIGl0ZW1zCgoJLyoqCgkgKiBSZWVkLVNvbG9tb24gaXRlbXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkcnNpdGVtcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBmcmFtZXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZnJhbWVzID0gYXJyYXkoKTsKCgkvKioKCSAqIEFscGhhYmV0LW51bWVyaWMgY29udmVzaW9uIHRhYmxlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGFuVGFibGUgPSBhcnJheSgKCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQkzNiwgLTEsIC0xLCAtMSwgMzcsIDM4LCAtMSwgLTEsIC0xLCAtMSwgMzksIDQwLCAtMSwgNDEsIDQyLCA0MywgLy8KCQkgMCwgIDEsICAyLCAgMywgIDQsICA1LCAgNiwgIDcsICA4LCAgOSwgNDQsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQktMSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwLCAyMSwgMjIsIDIzLCAyNCwgLy8KCQkyNSwgMjYsIDI3LCAyOCwgMjksIDMwLCAzMSwgMzIsIDMzLCAzNCwgMzUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLy8KCQktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSAgLy8KCQkpOwoKCS8qKgoJICogQXJyYXkgVGFibGUgb2YgdGhlIGNhcGFjaXR5IG9mIHN5bWJvbHMuCgkgKiBTZWUgVGFibGUgMSAocHAuMTMpIGFuZCBUYWJsZSAxMi0xNiAocHAuMzAtMzYpLCBKSVMgWDA1MTA6MjAwNC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRjYXBhY2l0eSA9IGFycmF5KAoJCWFycmF5KCAgMCwgICAgMCwgMCwgYXJyYXkoICAgMCwgICAgMCwgICAgMCwgICAgMCkpLCAvLwoJCWFycmF5KCAyMSwgICAyNiwgMCwgYXJyYXkoICAgNywgICAxMCwgICAxMywgICAxNykpLCAvLyAgMQoJCWFycmF5KCAyNSwgICA0NCwgNywgYXJyYXkoICAxMCwgICAxNiwgICAyMiwgICAyOCkpLCAvLwoJCWFycmF5KCAyOSwgICA3MCwgNywgYXJyYXkoICAxNSwgICAyNiwgICAzNiwgICA0NCkpLCAvLwoJCWFycmF5KCAzMywgIDEwMCwgNywgYXJyYXkoICAyMCwgICAzNiwgICA1MiwgICA2NCkpLCAvLwoJCWFycmF5KCAzNywgIDEzNCwgNywgYXJyYXkoICAyNiwgICA0OCwgICA3MiwgICA4OCkpLCAvLyAgNQoJCWFycmF5KCA0MSwgIDE3MiwgNywgYXJyYXkoICAzNiwgICA2NCwgICA5NiwgIDExMikpLCAvLwoJCWFycmF5KCA0NSwgIDE5NiwgMCwgYXJyYXkoICA0MCwgICA3MiwgIDEwOCwgIDEzMCkpLCAvLwoJCWFycmF5KCA0OSwgIDI0MiwgMCwgYXJyYXkoICA0OCwgICA4OCwgIDEzMiwgIDE1NikpLCAvLwoJCWFycmF5KCA1MywgIDI5MiwgMCwgYXJyYXkoICA2MCwgIDExMCwgIDE2MCwgIDE5MikpLCAvLwoJCWFycmF5KCA1NywgIDM0NiwgMCwgYXJyYXkoICA3MiwgIDEzMCwgIDE5MiwgIDIyNCkpLCAvLyAxMAoJCWFycmF5KCA2MSwgIDQwNCwgMCwgYXJyYXkoICA4MCwgIDE1MCwgIDIyNCwgIDI2NCkpLCAvLwoJCWFycmF5KCA2NSwgIDQ2NiwgMCwgYXJyYXkoICA5NiwgIDE3NiwgIDI2MCwgIDMwOCkpLCAvLwoJCWFycmF5KCA2OSwgIDUzMiwgMCwgYXJyYXkoIDEwNCwgIDE5OCwgIDI4OCwgIDM1MikpLCAvLwoJCWFycmF5KCA3MywgIDU4MSwgMywgYXJyYXkoIDEyMCwgIDIxNiwgIDMyMCwgIDM4NCkpLCAvLwoJCWFycmF5KCA3NywgIDY1NSwgMywgYXJyYXkoIDEzMiwgIDI0MCwgIDM2MCwgIDQzMikpLCAvLyAxNQoJCWFycmF5KCA4MSwgIDczMywgMywgYXJyYXkoIDE0NCwgIDI4MCwgIDQwOCwgIDQ4MCkpLCAvLwoJCWFycmF5KCA4NSwgIDgxNSwgMywgYXJyYXkoIDE2OCwgIDMwOCwgIDQ0OCwgIDUzMikpLCAvLwoJCWFycmF5KCA4OSwgIDkwMSwgMywgYXJyYXkoIDE4MCwgIDMzOCwgIDUwNCwgIDU4OCkpLCAvLwoJCWFycmF5KCA5MywgIDk5MSwgMywgYXJyYXkoIDE5NiwgIDM2NCwgIDU0NiwgIDY1MCkpLCAvLwoJCWFycmF5KCA5NywgMTA4NSwgMywgYXJyYXkoIDIyNCwgIDQxNiwgIDYwMCwgIDcwMCkpLCAvLyAyMAoJCWFycmF5KDEwMSwgMTE1NiwgNCwgYXJyYXkoIDIyNCwgIDQ0MiwgIDY0NCwgIDc1MCkpLCAvLwoJCWFycmF5KDEwNSwgMTI1OCwgNCwgYXJyYXkoIDI1MiwgIDQ3NiwgIDY5MCwgIDgxNikpLCAvLwoJCWFycmF5KDEwOSwgMTM2NCwgNCwgYXJyYXkoIDI3MCwgIDUwNCwgIDc1MCwgIDkwMCkpLCAvLwoJCWFycmF5KDExMywgMTQ3NCwgNCwgYXJyYXkoIDMwMCwgIDU2MCwgIDgxMCwgIDk2MCkpLCAvLwoJCWFycmF5KDExNywgMTU4OCwgNCwgYXJyYXkoIDMxMiwgIDU4OCwgIDg3MCwgMTA1MCkpLCAvLyAyNQoJCWFycmF5KDEyMSwgMTcwNiwgNCwgYXJyYXkoIDMzNiwgIDY0NCwgIDk1MiwgMTExMCkpLCAvLwoJCWFycmF5KDEyNSwgMTgyOCwgNCwgYXJyYXkoIDM2MCwgIDcwMCwgMTAyMCwgMTIwMCkpLCAvLwoJCWFycmF5KDEyOSwgMTkyMSwgMywgYXJyYXkoIDM5MCwgIDcyOCwgMTA1MCwgMTI2MCkpLCAvLwoJCWFycmF5KDEzMywgMjA1MSwgMywgYXJyYXkoIDQyMCwgIDc4NCwgMTE0MCwgMTM1MCkpLCAvLwoJCWFycmF5KDEzNywgMjE4NSwgMywgYXJyYXkoIDQ1MCwgIDgxMiwgMTIwMCwgMTQ0MCkpLCAvLyAzMAoJCWFycmF5KDE0MSwgMjMyMywgMywgYXJyYXkoIDQ4MCwgIDg2OCwgMTI5MCwgMTUzMCkpLCAvLwoJCWFycmF5KDE0NSwgMjQ2NSwgMywgYXJyYXkoIDUxMCwgIDkyNCwgMTM1MCwgMTYyMCkpLCAvLwoJCWFycmF5KDE0OSwgMjYxMSwgMywgYXJyYXkoIDU0MCwgIDk4MCwgMTQ0MCwgMTcxMCkpLCAvLwoJCWFycmF5KDE1MywgMjc2MSwgMywgYXJyYXkoIDU3MCwgMTAzNiwgMTUzMCwgMTgwMCkpLCAvLwoJCWFycmF5KDE1NywgMjg3NiwgMCwgYXJyYXkoIDU3MCwgMTA2NCwgMTU5MCwgMTg5MCkpLCAvLyAzNQoJCWFycmF5KDE2MSwgMzAzNCwgMCwgYXJyYXkoIDYwMCwgMTEyMCwgMTY4MCwgMTk4MCkpLCAvLwoJCWFycmF5KDE2NSwgMzE5NiwgMCwgYXJyYXkoIDYzMCwgMTIwNCwgMTc3MCwgMjEwMCkpLCAvLwoJCWFycmF5KDE2OSwgMzM2MiwgMCwgYXJyYXkoIDY2MCwgMTI2MCwgMTg2MCwgMjIyMCkpLCAvLwoJCWFycmF5KDE3MywgMzUzMiwgMCwgYXJyYXkoIDcyMCwgMTMxNiwgMTk1MCwgMjMxMCkpLCAvLwoJCWFycmF5KDE3NywgMzcwNiwgMCwgYXJyYXkoIDc1MCwgMTM3MiwgMjA0MCwgMjQzMCkpICAvLyA0MAoJKTsKCgkvKioKCSAqIEFycmF5IExlbmd0aCBpbmRpY2F0b3IuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkbGVuZ3RoVGFibGVCaXRzID0gYXJyYXkoCgkJYXJyYXkoMTAsIDEyLCAxNCksCgkJYXJyYXkoIDksIDExLCAxMyksCgkJYXJyYXkoIDgsIDE2LCAxNiksCgkJYXJyYXkoIDgsIDEwLCAxMikKCSk7CgoJLyoqCgkgKiBBcnJheSBUYWJsZSBvZiB0aGUgZXJyb3IgY29ycmVjdGlvbiBjb2RlIChSZWVkLVNvbG9tb24gYmxvY2spLgoJICogU2VlIFRhYmxlIDEyLTE2IChwcC4zMC0zNiksIEpJUyBYMDUxMDoyMDA0LgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGVjY1RhYmxlID0gYXJyYXkoCgkJYXJyYXkoYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSwgYXJyYXkoIDAsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSksIC8vICAxCgkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDEsICAwKSwgYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAyKSwgYXJyYXkoIDIsICAyKSksIC8vICA1CgkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDQsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDQsICAwKSwgYXJyYXkoIDIsICA0KSwgYXJyYXkoIDQsICAxKSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDIsICAyKSwgYXJyYXkoIDQsICAyKSwgYXJyYXkoIDQsICAyKSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICAwKSwgYXJyYXkoIDMsICAyKSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDQsICA0KSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICAyKSwgYXJyYXkoIDQsICAxKSwgYXJyYXkoIDYsICAyKSwgYXJyYXkoIDYsICAyKSksIC8vIDEwCgkJYXJyYXkoYXJyYXkoIDQsICAwKSwgYXJyYXkoIDEsICA0KSwgYXJyYXkoIDQsICA0KSwgYXJyYXkoIDMsICA4KSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICAyKSwgYXJyYXkoIDYsICAyKSwgYXJyYXkoIDQsICA2KSwgYXJyYXkoIDcsICA0KSksIC8vCgkJYXJyYXkoYXJyYXkoIDQsICAwKSwgYXJyYXkoIDgsICAxKSwgYXJyYXkoIDgsICA0KSwgYXJyYXkoMTIsICA0KSksIC8vCgkJYXJyYXkoYXJyYXkoIDMsICAxKSwgYXJyYXkoIDQsICA1KSwgYXJyYXkoMTEsICA1KSwgYXJyYXkoMTEsICA1KSksIC8vCgkJYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDUsICA1KSwgYXJyYXkoIDUsICA3KSwgYXJyYXkoMTEsICA3KSksIC8vIDE1CgkJYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDcsICAzKSwgYXJyYXkoMTUsICAyKSwgYXJyYXkoIDMsIDEzKSksIC8vCgkJYXJyYXkoYXJyYXkoIDEsICA1KSwgYXJyYXkoMTAsICAxKSwgYXJyYXkoIDEsIDE1KSwgYXJyYXkoIDIsIDE3KSksIC8vCgkJYXJyYXkoYXJyYXkoIDUsICAxKSwgYXJyYXkoIDksICA0KSwgYXJyYXkoMTcsICAxKSwgYXJyYXkoIDIsIDE5KSksIC8vCgkJYXJyYXkoYXJyYXkoIDMsICA0KSwgYXJyYXkoIDMsIDExKSwgYXJyYXkoMTcsICA0KSwgYXJyYXkoIDksIDE2KSksIC8vCgkJYXJyYXkoYXJyYXkoIDMsICA1KSwgYXJyYXkoIDMsIDEzKSwgYXJyYXkoMTUsICA1KSwgYXJyYXkoMTUsIDEwKSksIC8vIDIwCgkJYXJyYXkoYXJyYXkoIDQsICA0KSwgYXJyYXkoMTcsICAwKSwgYXJyYXkoMTcsICA2KSwgYXJyYXkoMTksICA2KSksIC8vCgkJYXJyYXkoYXJyYXkoIDIsICA3KSwgYXJyYXkoMTcsICAwKSwgYXJyYXkoIDcsIDE2KSwgYXJyYXkoMzQsICAwKSksIC8vCgkJYXJyYXkoYXJyYXkoIDQsICA1KSwgYXJyYXkoIDQsIDE0KSwgYXJyYXkoMTEsIDE0KSwgYXJyYXkoMTYsIDE0KSksIC8vCgkJYXJyYXkoYXJyYXkoIDYsICA0KSwgYXJyYXkoIDYsIDE0KSwgYXJyYXkoMTEsIDE2KSwgYXJyYXkoMzAsICAyKSksIC8vCgkJYXJyYXkoYXJyYXkoIDgsICA0KSwgYXJyYXkoIDgsIDEzKSwgYXJyYXkoIDcsIDIyKSwgYXJyYXkoMjIsIDEzKSksIC8vIDI1CgkJYXJyYXkoYXJyYXkoMTAsICAyKSwgYXJyYXkoMTksICA0KSwgYXJyYXkoMjgsICA2KSwgYXJyYXkoMzMsICA0KSksIC8vCgkJYXJyYXkoYXJyYXkoIDgsICA0KSwgYXJyYXkoMjIsICAzKSwgYXJyYXkoIDgsIDI2KSwgYXJyYXkoMTIsIDI4KSksIC8vCgkJYXJyYXkoYXJyYXkoIDMsIDEwKSwgYXJyYXkoIDMsIDIzKSwgYXJyYXkoIDQsIDMxKSwgYXJyYXkoMTEsIDMxKSksIC8vCgkJYXJyYXkoYXJyYXkoIDcsICA3KSwgYXJyYXkoMjEsICA3KSwgYXJyYXkoIDEsIDM3KSwgYXJyYXkoMTksIDI2KSksIC8vCgkJYXJyYXkoYXJyYXkoIDUsIDEwKSwgYXJyYXkoMTksIDEwKSwgYXJyYXkoMTUsIDI1KSwgYXJyYXkoMjMsIDI1KSksIC8vIDMwCgkJYXJyYXkoYXJyYXkoMTMsICAzKSwgYXJyYXkoIDIsIDI5KSwgYXJyYXkoNDIsICAxKSwgYXJyYXkoMjMsIDI4KSksIC8vCgkJYXJyYXkoYXJyYXkoMTcsICAwKSwgYXJyYXkoMTAsIDIzKSwgYXJyYXkoMTAsIDM1KSwgYXJyYXkoMTksIDM1KSksIC8vCgkJYXJyYXkoYXJyYXkoMTcsICAxKSwgYXJyYXkoMTQsIDIxKSwgYXJyYXkoMjksIDE5KSwgYXJyYXkoMTEsIDQ2KSksIC8vCgkJYXJyYXkoYXJyYXkoMTMsICA2KSwgYXJyYXkoMTQsIDIzKSwgYXJyYXkoNDQsICA3KSwgYXJyYXkoNTksICAxKSksIC8vCgkJYXJyYXkoYXJyYXkoMTIsICA3KSwgYXJyYXkoMTIsIDI2KSwgYXJyYXkoMzksIDE0KSwgYXJyYXkoMjIsIDQxKSksIC8vIDM1CgkJYXJyYXkoYXJyYXkoIDYsIDE0KSwgYXJyYXkoIDYsIDM0KSwgYXJyYXkoNDYsIDEwKSwgYXJyYXkoIDIsIDY0KSksIC8vCgkJYXJyYXkoYXJyYXkoMTcsICA0KSwgYXJyYXkoMjksIDE0KSwgYXJyYXkoNDksIDEwKSwgYXJyYXkoMjQsIDQ2KSksIC8vCgkJYXJyYXkoYXJyYXkoIDQsIDE4KSwgYXJyYXkoMTMsIDMyKSwgYXJyYXkoNDgsIDE0KSwgYXJyYXkoNDIsIDMyKSksIC8vCgkJYXJyYXkoYXJyYXkoMjAsICA0KSwgYXJyYXkoNDAsICA3KSwgYXJyYXkoNDMsIDIyKSwgYXJyYXkoMTAsIDY3KSksIC8vCgkJYXJyYXkoYXJyYXkoMTksICA2KSwgYXJyYXkoMTgsIDMxKSwgYXJyYXkoMzQsIDM0KSwgYXJyYXkoMjAsIDYxKSkgIC8vIDQwCgkpOwoKCS8qKgoJICogQXJyYXkgUG9zaXRpb25zIG9mIGFsaWdubWVudCBwYXR0ZXJucy4KCSAqIFRoaXMgYXJyYXkgaW5jbHVkZXMgb25seSB0aGUgc2Vjb25kIGFuZCB0aGUgdGhpcmQgcG9zaXRpb24gb2YgdGhlIGFsaWdubWVudCBwYXR0ZXJucy4gUmVzdCBvZiB0aGVtIGNhbiBiZSBjYWxjdWxhdGVkIGZyb20gdGhlIGRpc3RhbmNlIGJldHdlZW4gdGhlbS4KCSAqIFNlZSBUYWJsZSAxIGluIEFwcGVuZGl4IEUgKHBwLjcxKSBvZiBKSVMgWDA1MTA6MjAwNC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRhbGlnbm1lbnRQYXR0ZXJuID0gYXJyYXkoCgkJYXJyYXkoIDAsICAwKSwKCQlhcnJheSggMCwgIDApLCBhcnJheSgxOCwgIDApLCBhcnJheSgyMiwgIDApLCBhcnJheSgyNiwgIDApLCBhcnJheSgzMCwgIDApLCAvLyAgMS0gNQoJCWFycmF5KDM0LCAgMCksIGFycmF5KDIyLCAzOCksIGFycmF5KDI0LCA0MiksIGFycmF5KDI2LCA0NiksIGFycmF5KDI4LCA1MCksIC8vICA2LTEwCgkJYXJyYXkoMzAsIDU0KSwgYXJyYXkoMzIsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDQ2KSwgYXJyYXkoMjYsIDQ4KSwgLy8gMTEtMTUKCQlhcnJheSgyNiwgNTApLCBhcnJheSgzMCwgNTQpLCBhcnJheSgzMCwgNTYpLCBhcnJheSgzMCwgNTgpLCBhcnJheSgzNCwgNjIpLCAvLyAxNi0yMAoJCWFycmF5KDI4LCA1MCksIGFycmF5KDI2LCA1MCksIGFycmF5KDMwLCA1NCksIGFycmF5KDI4LCA1NCksIGFycmF5KDMyLCA1OCksIC8vIDIxLTI1CgkJYXJyYXkoMzAsIDU4KSwgYXJyYXkoMzQsIDYyKSwgYXJyYXkoMjYsIDUwKSwgYXJyYXkoMzAsIDU0KSwgYXJyYXkoMjYsIDUyKSwgLy8gMjYtMzAKCQlhcnJheSgzMCwgNTYpLCBhcnJheSgzNCwgNjApLCBhcnJheSgzMCwgNTgpLCBhcnJheSgzNCwgNjIpLCBhcnJheSgzMCwgNTQpLCAvLyAzMS0zNQoJCWFycmF5KDI0LCA1MCksIGFycmF5KDI4LCA1NCksIGFycmF5KDMyLCA1OCksIGFycmF5KDI2LCA1NCksIGFycmF5KDMwLCA1OCkgIC8vIDM1LTQwCgkpOwoKCS8qKgoJICogQXJyYXkgVmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIChCQ0ggY29kZWQpLgoJICogU2VlIFRhYmxlIDEgaW4gQXBwZW5kaXggRCAocHAuNjgpIG9mIEpJUyBYMDUxMDoyMDA0LgoJICogc2l6ZTogW1FSU1BFQ19WRVJTSU9OX01BWCAtIDZdCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkdmVyc2lvblBhdHRlcm4gPSBhcnJheSgKCQkweDA3Yzk0LCAweDA4NWJjLCAweDA5YTk5LCAweDBhNGQzLCAweDBiYmY2LCAweDBjNzYyLCAweDBkODQ3LCAweDBlNjBkLCAvLwoJCTB4MGY5MjgsIDB4MTBiNzgsIDB4MTE0NWQsIDB4MTJhMTcsIDB4MTM1MzIsIDB4MTQ5YTYsIDB4MTU2ODMsIDB4MTY4YzksIC8vCgkJMHgxNzdlYywgMHgxOGVjNCwgMHgxOTFlMSwgMHgxYWZhYiwgMHgxYjA4ZSwgMHgxY2MxYSwgMHgxZDMzZiwgMHgxZWQ3NSwgLy8KCQkweDFmMjUwLCAweDIwOWQ1LCAweDIxNmYwLCAweDIyOGJhLCAweDIzNzlmLCAweDI0YjBiLCAweDI1NDJlLCAweDI2YTY0LCAvLwoJCTB4Mjc1NDEsIDB4MjhjNjkKCSk7CgoJLyoqCgkgKiBBcnJheSBGb3JtYXQgaW5mb3JtYXRpb24KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmb3JtYXRJbmZvID0gYXJyYXkoCgkJYXJyYXkoMHg3N2M0LCAweDcyZjMsIDB4N2RhYSwgMHg3ODlkLCAweDY2MmYsIDB4NjMxOCwgMHg2YzQxLCAweDY5NzYpLCAvLwoJCWFycmF5KDB4NTQxMiwgMHg1MTI1LCAweDVlN2MsIDB4NWI0YiwgMHg0NWY5LCAweDQwY2UsIDB4NGY5NywgMHg0YWEwKSwgLy8KCQlhcnJheSgweDM1NWYsIDB4MzA2OCwgMHgzZjMxLCAweDNhMDYsIDB4MjRiNCwgMHgyMTgzLCAweDJlZGEsIDB4MmJlZCksIC8vCgkJYXJyYXkoMHgxNjg5LCAweDEzYmUsIDB4MWNlNywgMHgxOWQwLCAweDA3NjIsIDB4MDI1NSwgMHgwZDBjLCAweDA4M2IpICAvLwoJKTsKCgoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgkvKioKCSAqIFRoaXMgaXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yLgoJICogQ3JlYXRlcyBhIFFSY29kZSBvYmplY3QKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudCB1c2luZyBRUmNvZGUKCSAqIEBwYXJhbSAkZWNsZXZlbCAoc3RyaW5nKSBlcnJvciBsZXZlbDogPHVsPjxsaT5MIDogQWJvdXQgNyUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC48L2xpPjxsaT5NIDogQWJvdXQgMTUlIG9yIGxlc3MgZXJyb3JzIGNhbiBiZSBjb3JyZWN0ZWQuPC9saT48bGk+USA6IEFib3V0IDI1JSBvciBsZXNzIGVycm9ycyBjYW4gYmUgY29ycmVjdGVkLjwvbGk+PGxpPkggOiBBYm91dCAzMCUgb3IgbGVzcyBlcnJvcnMgY2FuIGJlIGNvcnJlY3RlZC48L2xpPjwvdWw+CgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wLjAwMAoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvZGUsICRlY2xldmVsID0gJ0wnKSB7CgkJJGJhcmNvZGVfYXJyYXkgPSBhcnJheSgpOwoJCWlmICgoaXNfbnVsbCgkY29kZSkpIE9SICgkY29kZSA9PSAnXDAnKSBPUiAoJGNvZGUgPT0gJycpKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gc2V0IGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCQkkdGhpcy0+bGV2ZWwgPSBhcnJheV9zZWFyY2goJGVjbGV2ZWwsIGFycmF5KCdMJywgJ00nLCAnUScsICdIJykpOwoJCWlmICgkdGhpcy0+bGV2ZWwgPT09IGZhbHNlKSB7CgkJCSR0aGlzLT5sZXZlbCA9IFFSX0VDTEVWRUxfTDsKCQl9CgkJaWYgKCgkdGhpcy0+aGludCAhPSBRUl9NT0RFXzhCKSBBTkQgKCR0aGlzLT5oaW50ICE9IFFSX01PREVfS0opKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYgKCgkdGhpcy0+dmVyc2lvbiA8IDApIE9SICgkdGhpcy0+dmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCkpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkkdGhpcy0+aXRlbXMgPSBhcnJheSgpOwoJCSR0aGlzLT5lbmNvZGVTdHJpbmcoJGNvZGUpOwoJCWlmIChpc19udWxsKCR0aGlzLT5kYXRhKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSRxclRhYiA9ICR0aGlzLT5iaW5hcml6ZSgkdGhpcy0+ZGF0YSk7CgkJJHNpemUgPSBjb3VudCgkcXJUYWIpOwoJCSRiYXJjb2RlX2FycmF5WydudW1fcm93cyddID0gJHNpemU7CgkJJGJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ10gPSAkc2l6ZTsKCQkkYmFyY29kZV9hcnJheVsnYmNvZGUnXSA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHFyVGFiIGFzICRsaW5lKSB7CgkJCSRhcnJBZGQgPSBhcnJheSgpOwoJCQlmb3JlYWNoIChzdHJfc3BsaXQoJGxpbmUpIGFzICRjaGFyKSB7CgkJCQkkYXJyQWRkW10gPSAoJGNoYXI9PScxJyk/MTowOwoJCQl9CgkJCSRiYXJjb2RlX2FycmF5WydiY29kZSddW10gPSAkYXJyQWRkOwoJCX0KCQkkdGhpcy0+YmFyY29kZV9hcnJheSA9ICRiYXJjb2RlX2FycmF5OwoJfQoKCS8qKgoJICogUmV0dXJucyBhIGJhcmNvZGUgYXJyYXkgd2hpY2ggaXMgcmVhZGFibGUgYnkgVENQREYKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSBhcnJheSByZWFkYWJsZSBieSBUQ1BERjsKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEJhcmNvZGVBcnJheSgpIHsKCQlyZXR1cm4gJHRoaXMtPmJhcmNvZGVfYXJyYXk7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IHRoZSBmcmFtZSBpbiBiaW5hcnkgZm9ybQoJICogQHBhcmFtICRmcmFtZSAoYXJyYXkpIGFycmF5IHRvIGJpbmFyaXplCgkgKiBAcmV0dXJuIGFycmF5IGZyYW1lIGluIGJpbmFyeSBmb3JtCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiaW5hcml6ZSgkZnJhbWUpIHsKCQkkbGVuID0gY291bnQoJGZyYW1lKTsKCQkvLyB0aGUgZnJhbWUgaXMgc3F1YXJlICh3aWR0aCA9IGhlaWdodCkKCQlmb3JlYWNoICgkZnJhbWUgYXMgJiRmcmFtZUxpbmUpIHsKCQkJZm9yICgkaT0wOyAkaTwkbGVuOyAkaSsrKSB7CgkJCQkkZnJhbWVMaW5lWyRpXSA9IChvcmQoJGZyYW1lTGluZVskaV0pJjEpPycxJzonMCc7CgkJCX0KCQl9CgkJcmV0dXJuICRmcmFtZTsKCX0KCgkvKioKCSAqIEVuY29kZSB0aGUgaW5wdXQgc3RyaW5nIHRvIFFSIGNvZGUKCSAqIEBwYXJhbSAkc3RyaW5nIChzdHJpbmcpIGlucHV0IHN0cmluZyB0byBlbmNvZGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZVN0cmluZygkc3RyaW5nKSB7CgkJJHRoaXMtPmRhdGFTdHIgPSAkc3RyaW5nOwoJCWlmICghJHRoaXMtPmNhc2VzZW5zaXRpdmUpIHsKCQkJJHRoaXMtPnRvVXBwZXIoKTsKCQl9CgkJJHJldCA9ICR0aGlzLT5zcGxpdFN0cmluZygpOwoJCWlmICgkcmV0IDwgMCkgewoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJJHRoaXMtPmVuY29kZU1hc2soLTEpOwoJfQoKCS8qKgoJICogRW5jb2RlIG1hc2sKCSAqIEBwYXJhbSAkbWFzayAoaW50KSBtYXNraW5nIG1vZGUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1hc2soJG1hc2spIHsKCQkkc3BlYyA9IGFycmF5KDAsIDAsIDAsIDAsIDApOwoJCSR0aGlzLT5kYXRhY29kZSA9ICR0aGlzLT5nZXRCeXRlU3RyZWFtKCR0aGlzLT5pdGVtcyk7CgkJaWYgKGlzX251bGwoJHRoaXMtPmRhdGFjb2RlKSkgewoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJJHNwZWMgPSAkdGhpcy0+Z2V0RWNjU3BlYygkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsLCAkc3BlYyk7CgkJJHRoaXMtPmIxID0gJHRoaXMtPnJzQmxvY2tOdW0xKCRzcGVjKTsKCQkkdGhpcy0+ZGF0YUxlbmd0aCA9ICR0aGlzLT5yc0RhdGFMZW5ndGgoJHNwZWMpOwoJCSR0aGlzLT5lY2NMZW5ndGggPSAkdGhpcy0+cnNFY2NMZW5ndGgoJHNwZWMpOwoJCSR0aGlzLT5lY2Njb2RlID0gYXJyYXlfZmlsbCgwLCAkdGhpcy0+ZWNjTGVuZ3RoLCAwKTsKCQkkdGhpcy0+YmxvY2tzID0gJHRoaXMtPnJzQmxvY2tOdW0oJHNwZWMpOwoJCSRyZXQgPSAkdGhpcy0+aW5pdCgkc3BlYyk7CgkJaWYgKCRyZXQgPCAwKSB7CgkJCXJldHVybiBOVUxMOwoJCX0KCQkkdGhpcy0+Y291bnQgPSAwOwoJCSR0aGlzLT53aWR0aCA9ICR0aGlzLT5nZXRXaWR0aCgkdGhpcy0+dmVyc2lvbik7CgkJJHRoaXMtPmZyYW1lID0gJHRoaXMtPm5ld0ZyYW1lKCR0aGlzLT52ZXJzaW9uKTsKCQkkdGhpcy0+eCA9ICR0aGlzLT53aWR0aCAtIDE7CgkJJHRoaXMtPnkgPSAkdGhpcy0+d2lkdGggLSAxOwoJCSR0aGlzLT5kaXIgPSAtMTsKCQkkdGhpcy0+Yml0ID0gLTE7CgkJLy8gaW50ZWxlYXZlZCBkYXRhIGFuZCBlY2MgY29kZXMKCQlmb3IgKCRpPTA7ICRpIDwgKCR0aGlzLT5kYXRhTGVuZ3RoICsgJHRoaXMtPmVjY0xlbmd0aCk7ICRpKyspIHsKCQkJJGNvZGUgPSAkdGhpcy0+Z2V0Q29kZSgpOwoJCQkkYml0ID0gMHg4MDsKCQkJZm9yICgkaj0wOyAkajw4OyAkaisrKSB7CgkJCQkkYWRkciA9ICR0aGlzLT5nZXROZXh0UG9zaXRpb24oKTsKCQkJCSR0aGlzLT5zZXRGcmFtZUF0KCRhZGRyLCAweDAyIHwgKCgkYml0ICYgJGNvZGUpICE9IDApKTsKCQkJCSRiaXQgPSAkYml0ID4+IDE7CgkJCX0KCQl9CgkJLy8gcmVtYWluZGVyIGJpdHMKCQkkaiA9ICR0aGlzLT5nZXRSZW1haW5kZXIoJHRoaXMtPnZlcnNpb24pOwoJCWZvciAoJGk9MDsgJGk8JGo7ICRpKyspIHsKCQkJJGFkZHIgPSAkdGhpcy0+Z2V0TmV4dFBvc2l0aW9uKCk7CgkJCSR0aGlzLT5zZXRGcmFtZUF0KCRhZGRyLCAweDAyKTsKCQl9CgkJLy8gbWFza2luZwoJCSR0aGlzLT5ydW5MZW5ndGggPSBhcnJheV9maWxsKDAsIFFSU1BFQ19XSURUSF9NQVggKyAxLCAwKTsKCQlpZiAoJG1hc2sgPCAwKSB7CgkJCWlmIChRUl9GSU5EX0JFU1RfTUFTSykgewoJCQkJJG1hc2tlZCA9ICR0aGlzLT5tYXNrKCR0aGlzLT53aWR0aCwgJHRoaXMtPmZyYW1lLCAkdGhpcy0+bGV2ZWwpOwoJCQl9IGVsc2UgewoJCQkJJG1hc2tlZCA9ICR0aGlzLT5tYWtlTWFzaygkdGhpcy0+d2lkdGgsICR0aGlzLT5mcmFtZSwgKGludHZhbChRUl9ERUZBVUxUX01BU0spICUgOCksICR0aGlzLT5sZXZlbCk7CgkJCX0KCQl9IGVsc2UgewoJCQkkbWFza2VkID0gJHRoaXMtPm1ha2VNYXNrKCR0aGlzLT53aWR0aCwgJHRoaXMtPmZyYW1lLCAkbWFzaywgJHRoaXMtPmxldmVsKTsKCQl9CgkJaWYgKCRtYXNrZWQgPT0gTlVMTCkgewoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJJHRoaXMtPmRhdGEgPSAkbWFza2VkOwoJfQoKCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkvLyBGcmFtZUZpbGxlcgoKCS8qKgoJICogU2V0IGZyYW1lIHZhbHVlIGF0IHNwZWNpZmllZCBwb3NpdGlvbgoJICogQHBhcmFtICRhdCAoYXJyYXkpIHgseSBwb3NpdGlvbgoJICogQHBhcmFtICR2YWwgKGludCkgdmFsdWUgb2YgdGhlIGNoYXJhY3RlciB0byBzZXQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEZyYW1lQXQoJGF0LCAkdmFsKSB7CgkJJHRoaXMtPmZyYW1lWyRhdFsneSddXVskYXRbJ3gnXV0gPSBjaHIoJHZhbCk7Cgl9CgoJLyoqCgkgKiBHZXQgZnJhbWUgdmFsdWUgYXQgc3BlY2lmaWVkIHBvc2l0aW9uCgkgKiBAcGFyYW0gJGF0IChhcnJheSkgeCx5IHBvc2l0aW9uCgkgKiBAcmV0dXJuIHZhbHVlIGF0IHNwZWNpZmllZCBwb3NpdGlvbgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0RnJhbWVBdCgkYXQpIHsKCQlyZXR1cm4gb3JkKCR0aGlzLT5mcmFtZVskYXRbJ3knXV1bJGF0Wyd4J11dKTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgbmV4dCBmcmFtZSBwb3NpdGlvbgoJICogQHJldHVybiBhcnJheSBvZiB4LHkgY29vcmRpbmF0ZXMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldE5leHRQb3NpdGlvbigpIHsKCQlkbyB7CgkJCWlmICgkdGhpcy0+Yml0ID09IC0xKSB7CgkJCQkkdGhpcy0+Yml0ID0gMDsKCQkJCXJldHVybiBhcnJheSgneCc9PiR0aGlzLT54LCAneSc9PiR0aGlzLT55KTsKCQkJfQoJCQkkeCA9ICR0aGlzLT54OwoJCQkkeSA9ICR0aGlzLT55OwoJCQkkdyA9ICR0aGlzLT53aWR0aDsKCQkJaWYgKCR0aGlzLT5iaXQgPT0gMCkgewoJCQkJJHgtLTsKCQkJCSR0aGlzLT5iaXQrKzsKCQkJfSBlbHNlIHsKCQkJCSR4Kys7CgkJCQkkeSArPSAkdGhpcy0+ZGlyOwoJCQkJJHRoaXMtPmJpdC0tOwoJCQl9CgkJCWlmICgkdGhpcy0+ZGlyIDwgMCkgewoJCQkJaWYgKCR5IDwgMCkgewoJCQkJCSR5ID0gMDsKCQkJCQkkeCAtPSAyOwoJCQkJCSR0aGlzLT5kaXIgPSAxOwoJCQkJCWlmICgkeCA9PSA2KSB7CgkJCQkJCSR4LS07CgkJCQkJCSR5ID0gOTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQlpZiAoJHkgPT0gJHcpIHsKCQkJCQkkeSA9ICR3IC0gMTsKCQkJCQkkeCAtPSAyOwoJCQkJCSR0aGlzLT5kaXIgPSAtMTsKCQkJCQlpZiAoJHggPT0gNikgewoJCQkJCQkkeC0tOwoJCQkJCQkkeSAtPSA4OwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZiAoKCR4IDwgMCkgT1IgKCR5IDwgMCkpIHsKCQkJCXJldHVybiBOVUxMOwoJCQl9CgkJCSR0aGlzLT54ID0gJHg7CgkJCSR0aGlzLT55ID0gJHk7CgkJfSB3aGlsZShvcmQoJHRoaXMtPmZyYW1lWyR5XVskeF0pICYgMHg4MCk7CgkJcmV0dXJuIGFycmF5KCd4Jz0+JHgsICd5Jz0+JHkpOwoJfQoKCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkvLyBRUnJhd2NvZGUKCgkvKioKCSAqIEluaXRpYWxpemUgY29kZS4KCSAqIEBwYXJhbSAkc3BlYyAoYXJyYXkpIGFycmF5IG9mIEVDQyBzcGVjaWZpY2F0aW9uCgkgKiBAcmV0dXJuIDAgaW4gY2FzZSBvZiBzdWNjZXNzLCAtMSBpbiBjYXNlIG9mIGVycm9yCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpbml0KCRzcGVjKSB7CgkJJGRsID0gJHRoaXMtPnJzRGF0YUNvZGVzMSgkc3BlYyk7CgkJJGVsID0gJHRoaXMtPnJzRWNjQ29kZXMxKCRzcGVjKTsKCQkkcnMgPSAkdGhpcy0+aW5pdF9ycyg4LCAweDExZCwgMCwgMSwgJGVsLCAyNTUgLSAkZGwgLSAkZWwpOwoJCSRibG9ja05vID0gMDsKCQkkZGF0YVBvcyA9IDA7CgkJJGVjY1BvcyA9IDA7CgkJJGVuZGZvciA9ICR0aGlzLT5yc0Jsb2NrTnVtMSgkc3BlYyk7CgkJZm9yICgkaT0wOyAkaSA8ICRlbmRmb3I7ICsrJGkpIHsKCQkJJGVjYyA9IGFycmF5X3NsaWNlKCR0aGlzLT5lY2Njb2RlLCAkZWNjUG9zKTsKCQkJJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXSA9IGFycmF5KCk7CgkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGFMZW5ndGgnXSA9ICRkbDsKCQkJJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZGF0YSddID0gYXJyYXlfc2xpY2UoJHRoaXMtPmRhdGFjb2RlLCAkZGF0YVBvcyk7CgkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2VjY0xlbmd0aCddID0gJGVsOwoJCQkkZWNjID0gJHRoaXMtPmVuY29kZV9yc19jaGFyKCRycywgJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZGF0YSddLCAkZWNjKTsKCQkJJHRoaXMtPnJzYmxvY2tzWyRibG9ja05vXVsnZWNjJ10gPSAkZWNjOwoJCQkkdGhpcy0+ZWNjY29kZSA9IGFycmF5X21lcmdlKGFycmF5X3NsaWNlKCR0aGlzLT5lY2Njb2RlLDAsICRlY2NQb3MpLCAkZWNjKTsKCQkJJGRhdGFQb3MgKz0gJGRsOwoJCQkkZWNjUG9zICs9ICRlbDsKCQkJJGJsb2NrTm8rKzsKCQl9CgkJaWYgKCR0aGlzLT5yc0Jsb2NrTnVtMigkc3BlYykgPT0gMCkgewoJCQlyZXR1cm4gMDsKCQl9CgkJJGRsID0gJHRoaXMtPnJzRGF0YUNvZGVzMigkc3BlYyk7CgkJJGVsID0gJHRoaXMtPnJzRWNjQ29kZXMyKCRzcGVjKTsKCQkkcnMgPSAkdGhpcy0+aW5pdF9ycyg4LCAweDExZCwgMCwgMSwgJGVsLCAyNTUgLSAkZGwgLSAkZWwpOwoJCWlmICgkcnMgPT0gTlVMTCkgewoJCQlyZXR1cm4gLTE7CgkJfQoJCSRlbmRmb3IgPSAkdGhpcy0+cnNCbG9ja051bTIoJHNwZWMpOwoJCWZvciAoJGk9MDsgJGkgPCAkZW5kZm9yOyArKyRpKSB7CgkJCSRlY2MgPSBhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwgJGVjY1Bvcyk7CgkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb10gPSBhcnJheSgpOwoJCQkkdGhpcy0+cnNibG9ja3NbJGJsb2NrTm9dWydkYXRhTGVuZ3RoJ10gPSAkZGw7CgkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGEnXSA9IGFycmF5X3NsaWNlKCR0aGlzLT5kYXRhY29kZSwgJGRhdGFQb3MpOwoJCQkkdGhpcy0+cnNibG9ja3NbJGJsb2NrTm9dWydlY2NMZW5ndGgnXSA9ICRlbDsKCQkJJGVjYyA9ICR0aGlzLT5lbmNvZGVfcnNfY2hhcigkcnMsICR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2RhdGEnXSwgJGVjYyk7CgkJCSR0aGlzLT5yc2Jsb2Nrc1skYmxvY2tOb11bJ2VjYyddID0gJGVjYzsKCQkJJHRoaXMtPmVjY2NvZGUgPSBhcnJheV9tZXJnZShhcnJheV9zbGljZSgkdGhpcy0+ZWNjY29kZSwgMCwgJGVjY1BvcyksICRlY2MpOwoJCQkkZGF0YVBvcyArPSAkZGw7CgkJCSRlY2NQb3MgKz0gJGVsOwoJCQkkYmxvY2tObysrOwoJCX0KCQlyZXR1cm4gMDsKCX0KCgkvKioKCSAqIFJldHVybiBSZWVkLVNvbG9tb24gYmxvY2sgY29kZS4KCSAqIEByZXR1cm4gYXJyYXkgcnNibG9ja3MKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENvZGUoKSB7CgkJaWYgKCR0aGlzLT5jb3VudCA8ICR0aGlzLT5kYXRhTGVuZ3RoKSB7CgkJCSRyb3cgPSAkdGhpcy0+Y291bnQgJSAkdGhpcy0+YmxvY2tzOwoJCQkkY29sID0gJHRoaXMtPmNvdW50IC8gJHRoaXMtPmJsb2NrczsKCQkJaWYgKCRjb2wgPj0gJHRoaXMtPnJzYmxvY2tzWzBdWydkYXRhTGVuZ3RoJ10pIHsKCQkJCSRyb3cgKz0gJHRoaXMtPmIxOwoJCQl9CgkJCSRyZXQgPSAkdGhpcy0+cnNibG9ja3NbJHJvd11bJ2RhdGEnXVskY29sXTsKCQl9IGVsc2VpZiAoJHRoaXMtPmNvdW50IDwgJHRoaXMtPmRhdGFMZW5ndGggKyAkdGhpcy0+ZWNjTGVuZ3RoKSB7CgkJCSRyb3cgPSAoJHRoaXMtPmNvdW50IC0gJHRoaXMtPmRhdGFMZW5ndGgpICUgJHRoaXMtPmJsb2NrczsKCQkJJGNvbCA9ICgkdGhpcy0+Y291bnQgLSAkdGhpcy0+ZGF0YUxlbmd0aCkgLyAkdGhpcy0+YmxvY2tzOwoJCQkkcmV0ID0gJHRoaXMtPnJzYmxvY2tzWyRyb3ddWydlY2MnXVskY29sXTsKCQl9IGVsc2UgewoJCQlyZXR1cm4gMDsKCQl9CgkJJHRoaXMtPmNvdW50Kys7CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8vIFFSbWFzawoKCS8qKgoJICogV3JpdGUgRm9ybWF0IEluZm9ybWF0aW9uIG9uIGZyYW1lIGFuZCByZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxhY2sgYml0cwoJICogQHBhcmFtICR3aWR0aCAoaW50KSBmcmFtZSB3aWR0aAoJICogQHBhcmFtICRmcmFtZSAoYXJyYXkpIGZyYW1lCgkgKiBAcGFyYW0gJG1hc2sgKGFycmF5KSBtYXNraW5nIG1vZGUKCSAqIEBwYXJhbSAkbGV2ZWwgKGludCkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJICogQHJldHVybiBpbnQgYmxhY2tzCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gd3JpdGVGb3JtYXRJbmZvcm1hdGlvbigkd2lkdGgsICYkZnJhbWUsICRtYXNrLCAkbGV2ZWwpIHsKCQkkYmxhY2tzID0gMDsKCQkkZm9ybWF0ID0gICR0aGlzLT5nZXRGb3JtYXRJbmZvKCRtYXNrLCAkbGV2ZWwpOwoJCWZvciAoJGk9MDsgJGk8ODsgKyskaSkgewoJCQlpZiAoJGZvcm1hdCAmIDEpIHsKCQkJCSRibGFja3MgKz0gMjsKCQkJCSR2ID0gMHg4NTsKCQkJfSBlbHNlIHsKCQkJCSR2ID0gMHg4NDsKCQkJfQoJCQkkZnJhbWVbOF1bJHdpZHRoIC0gMSAtICRpXSA9IGNocigkdik7CgkJCWlmICgkaSA8IDYpIHsKCQkJCSRmcmFtZVskaV1bOF0gPSBjaHIoJHYpOwoJCQl9IGVsc2UgewoJCQkJJGZyYW1lWyRpICsgMV1bOF0gPSBjaHIoJHYpOwoJCQl9CgkJCSRmb3JtYXQgPSAkZm9ybWF0ID4+IDE7CgkJfQoJCWZvciAoJGk9MDsgJGk8NzsgKyskaSkgewoJCWlmICgkZm9ybWF0ICYgMSkgewoJCQkkYmxhY2tzICs9IDI7CgkJCSR2ID0gMHg4NTsKCQl9IGVsc2UgewoJCQkkdiA9IDB4ODQ7CgkJfQoJCSRmcmFtZVskd2lkdGggLSA3ICsgJGldWzhdID0gY2hyKCR2KTsKCQlpZiAoJGkgPT0gMCkgewoJCQkkZnJhbWVbOF1bN10gPSBjaHIoJHYpOwoJCX0gZWxzZSB7CgkJCSRmcmFtZVs4XVs2IC0gJGldID0gY2hyKCR2KTsKCQl9CgkJJGZvcm1hdCA9ICRmb3JtYXQgPj4gMTsKCQl9CgkJcmV0dXJuICRibGFja3M7Cgl9CgoJLyoqCgkgKiBtYXNrMAoJICogQHBhcmFtICR4IChpbnQpIFggcG9zaXRpb24KCSAqIEBwYXJhbSAkeSAoaW50KSBZIHBvc2l0aW9uCgkgKiBAcmV0dXJuIGludCBtYXNrCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFzazAoJHgsICR5KSB7CgkJcmV0dXJuICgkeCArICR5KSAmIDE7Cgl9CgoJLyoqCgkgKiBtYXNrMQoJICogQHBhcmFtICR4IChpbnQpIFggcG9zaXRpb24KCSAqIEBwYXJhbSAkeSAoaW50KSBZIHBvc2l0aW9uCgkgKiBAcmV0dXJuIGludCBtYXNrCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFzazEoJHgsICR5KSB7CgkJcmV0dXJuICgkeSAmIDEpOwoJfQoKCS8qKgoJICogbWFzazIKCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgWSBwb3NpdGlvbgoJICogQHJldHVybiBpbnQgbWFzawoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2syKCR4LCAkeSkgewoJCXJldHVybiAoJHggJSAzKTsKCX0KCgkvKioKCSAqIG1hc2szCgkgKiBAcGFyYW0gJHggKGludCkgWCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIFkgcG9zaXRpb24KCSAqIEByZXR1cm4gaW50IG1hc2sKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrMygkeCwgJHkpIHsKCQlyZXR1cm4gKCR4ICsgJHkpICUgMzsKCX0KCgkvKioKCSAqIG1hc2s0CgkgKiBAcGFyYW0gJHggKGludCkgWCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIFkgcG9zaXRpb24KCSAqIEByZXR1cm4gaW50IG1hc2sKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBtYXNrNCgkeCwgJHkpIHsKCQlyZXR1cm4gKCgoaW50KSgkeSAvIDIpKSArICgoaW50KSgkeCAvIDMpKSkgJiAxOwoJfQoKCS8qKgoJICogbWFzazUKCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgWSBwb3NpdGlvbgoJICogQHJldHVybiBpbnQgbWFzawoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2s1KCR4LCAkeSkgewoJCXJldHVybiAoKCR4ICogJHkpICYgMSkgKyAoJHggKiAkeSkgJSAzOwoJfQoKCS8qKgoJICogbWFzazYKCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgWSBwb3NpdGlvbgoJICogQHJldHVybiBpbnQgbWFzawoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2s2KCR4LCAkeSkgewoJCXJldHVybiAoKCgkeCAqICR5KSAmIDEpICsgKCR4ICogJHkpICUgMykgJiAxOwoJfQoKCS8qKgoJICogbWFzazcKCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgWSBwb3NpdGlvbgoJICogQHJldHVybiBpbnQgbWFzawoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2s3KCR4LCAkeSkgewoJCXJldHVybiAoKCgkeCAqICR5KSAlIDMpICsgKCgkeCArICR5KSAmIDEpKSAmIDE7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gYml0bWFzawoJICogQHBhcmFtICRtYXNrTm8gKGludCkgbWFzayBudW1iZXIKCSAqIEBwYXJhbSAkd2lkdGggKGludCkgd2lkdGgKCSAqIEBwYXJhbSAkZnJhbWUgKGFycmF5KSBmcmFtZQoJICogQHJldHVybiBhcnJheSBiaXRtYXNrCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZW5lcmF0ZU1hc2tObygkbWFza05vLCAkd2lkdGgsICRmcmFtZSkgewoJCSRiaXRNYXNrID0gYXJyYXlfZmlsbCgwLCAkd2lkdGgsIGFycmF5X2ZpbGwoMCwgJHdpZHRoLCAwKSk7CgkJZm9yICgkeT0wOyAkeTwkd2lkdGg7ICsrJHkpIHsKCQkJZm9yICgkeD0wOyAkeDwkd2lkdGg7ICsrJHgpIHsKCQkJCWlmIChvcmQoJGZyYW1lWyR5XVskeF0pICYgMHg4MCkgewoJCQkJCSRiaXRNYXNrWyR5XVskeF0gPSAwOwoJCQkJfSBlbHNlIHsKCQkJCQkkbWFza0Z1bmMgPSBjYWxsX3VzZXJfZnVuYyhhcnJheSgkdGhpcywgJ21hc2snLiRtYXNrTm8pLCAkeCwgJHkpOwoJCQkJCSRiaXRNYXNrWyR5XVskeF0gPSAoJG1hc2tGdW5jID09IDApPzE6MDsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGJpdE1hc2s7Cgl9CgoJLyoqCgkgKiBtYWtlTWFza05vCgkgKiBAcGFyYW0gJG1hc2tObyAoaW50KQoJICogQHBhcmFtICR3aWR0aCAoaW50KQoJICogQHBhcmFtICRzIChpbnQpCgkgKiBAcGFyYW0gJGQgKGludCkKCSAqIEBwYXJhbSAkbWFza0dlbk9ubHkgKGJvb2xlYW4pCgkgKiBAcmV0dXJuIGludCBiCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbWFrZU1hc2tObygkbWFza05vLCAkd2lkdGgsICRzLCAmJGQsICRtYXNrR2VuT25seT1mYWxzZSkgewoJCSRiID0gMDsKCQkkYml0TWFzayA9IGFycmF5KCk7CgkJJGJpdE1hc2sgPSAkdGhpcy0+Z2VuZXJhdGVNYXNrTm8oJG1hc2tObywgJHdpZHRoLCAkcywgJGQpOwoJCWlmICgkbWFza0dlbk9ubHkpIHsKCQkJcmV0dXJuOwoJCX0KCQkkZCA9ICRzOwoJCWZvciAoJHk9MDsgJHk8JHdpZHRoOyArKyR5KSB7CgkJCWZvciAoJHg9MDsgJHg8JHdpZHRoOyArKyR4KSB7CgkJCQlpZiAoJGJpdE1hc2tbJHldWyR4XSA9PSAxKSB7CgkJCQkJJGRbJHldWyR4XSA9IGNocihvcmQoJHNbJHldWyR4XSkgXiAoKGludCkoJGJpdE1hc2tbJHldWyR4XSkpKTsKCQkJCX0KCQkJCSRiICs9IChpbnQpKG9yZCgkZFskeV1bJHhdKSAmIDEpOwoJCQl9CgkJfQoJCXJldHVybiAkYjsKCX0KCgkvKioKCSAqIG1ha2VNYXNrCgkgKiBAcGFyYW0gJHdpZHRoIChpbnQpCgkgKiBAcGFyYW0gJGZyYW1lIChhcnJheSkKCSAqIEBwYXJhbSAkbWFza05vIChpbnQpCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IG1hc2sKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBtYWtlTWFzaygkd2lkdGgsICRmcmFtZSwgJG1hc2tObywgJGxldmVsKSB7CgkJJG1hc2tlZCA9IGFycmF5X2ZpbGwoMCwgJHdpZHRoLCBzdHJfcmVwZWF0KCJcMCIsICR3aWR0aCkpOwoJCSR0aGlzLT5tYWtlTWFza05vKCRtYXNrTm8sICR3aWR0aCwgJGZyYW1lLCAkbWFza2VkKTsKCQkkdGhpcy0+d3JpdGVGb3JtYXRJbmZvcm1hdGlvbigkd2lkdGgsICRtYXNrZWQsICRtYXNrTm8sICRsZXZlbCk7CgkJcmV0dXJuICRtYXNrZWQ7Cgl9CgoJLyoqCgkgKiBjYWxjTjFOMwoJICogQHBhcmFtICRsZW5ndGggKGludCkKCSAqIEByZXR1cm4gaW50IGRlbWVyaXQKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjTjFOMygkbGVuZ3RoKSB7CgkJJGRlbWVyaXQgPSAwOwoJCWZvciAoJGk9MDsgJGk8JGxlbmd0aDsgKyskaSkgewoJCQlpZiAoJHRoaXMtPnJ1bkxlbmd0aFskaV0gPj0gNSkgewoJCQkJJGRlbWVyaXQgKz0gKE4xICsgKCR0aGlzLT5ydW5MZW5ndGhbJGldIC0gNSkpOwoJCQl9CgkJCWlmICgkaSAmIDEpIHsKCQkJCWlmICgoJGkgPj0gMykgQU5EICgkaSA8ICgkbGVuZ3RoLTIpKSBBTkQgKCR0aGlzLT5ydW5MZW5ndGhbJGldICUgMyA9PSAwKSkgewoJCQkJCSRmYWN0ID0gKGludCkoJHRoaXMtPnJ1bkxlbmd0aFskaV0gLyAzKTsKCQkJCQlpZiAoKCR0aGlzLT5ydW5MZW5ndGhbJGktMl0gPT0gJGZhY3QpCgkJCQkJCUFORCAoJHRoaXMtPnJ1bkxlbmd0aFskaS0xXSA9PSAkZmFjdCkKCQkJCQkJQU5EICgkdGhpcy0+cnVuTGVuZ3RoWyRpKzFdID09ICRmYWN0KQoJCQkJCQlBTkQgKCR0aGlzLT5ydW5MZW5ndGhbJGkrMl0gPT0gJGZhY3QpKSB7CgkJCQkJCWlmICgoJHRoaXMtPnJ1bkxlbmd0aFskaS0zXSA8IDApIE9SICgkdGhpcy0+cnVuTGVuZ3RoWyRpLTNdID49ICg0ICogJGZhY3QpKSkgewoJCQkJCQkJJGRlbWVyaXQgKz0gTjM7CgkJCQkJCX0gZWxzZWlmICgoKCRpKzMpID49ICRsZW5ndGgpIE9SICgkdGhpcy0+cnVuTGVuZ3RoWyRpKzNdID49ICg0ICogJGZhY3QpKSkgewoJCQkJCQkJJGRlbWVyaXQgKz0gTjM7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRkZW1lcml0OwoJfQoKCS8qKgoJICogZXZhbHVhdGVTeW1ib2wKCSAqIEBwYXJhbSAkd2lkdGggKGludCkKCSAqIEBwYXJhbSAkZnJhbWUgKGFycmF5KQoJICogQHJldHVybiBpbnQgZGVtZXJpdAoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGV2YWx1YXRlU3ltYm9sKCR3aWR0aCwgJGZyYW1lKSB7CgkJJGhlYWQgPSAwOwoJCSRkZW1lcml0ID0gMDsKCQlmb3IgKCR5PTA7ICR5PCR3aWR0aDsgKyskeSkgewoJCQkkaGVhZCA9IDA7CgkJCSR0aGlzLT5ydW5MZW5ndGhbMF0gPSAxOwoJCQkkZnJhbWVZID0gJGZyYW1lWyR5XTsKCQkJaWYgKCR5ID4gMCkgewoJCQkJJGZyYW1lWU0gPSAkZnJhbWVbJHktMV07CgkJCX0KCQkJZm9yICgkeD0wOyAkeDwkd2lkdGg7ICsrJHgpIHsKCQkJCWlmICgoJHggPiAwKSBBTkQgKCR5ID4gMCkpIHsKCQkJCQkkYjIyID0gb3JkKCRmcmFtZVlbJHhdKSAmIG9yZCgkZnJhbWVZWyR4LTFdKSAmIG9yZCgkZnJhbWVZTVskeF0pICYgb3JkKCRmcmFtZVlNWyR4LTFdKTsKCQkJCQkkdzIyID0gb3JkKCRmcmFtZVlbJHhdKSB8IG9yZCgkZnJhbWVZWyR4LTFdKSB8IG9yZCgkZnJhbWVZTVskeF0pIHwgb3JkKCRmcmFtZVlNWyR4LTFdKTsKCQkJCQlpZiAoKCRiMjIgfCAoJHcyMiBeIDEpKSAmIDEpIHsKCQkJCQkJJGRlbWVyaXQgKz0gTjI7CgkJCQkJfQoJCQkJfQoJCQkJaWYgKCgkeCA9PSAwKSBBTkQgKG9yZCgkZnJhbWVZWyR4XSkgJiAxKSkgewoJCQkJCSR0aGlzLT5ydW5MZW5ndGhbMF0gPSAtMTsKCQkJCQkkaGVhZCA9IDE7CgkJCQkJJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0gPSAxOwoJCQkJfSBlbHNlaWYgKCR4ID4gMCkgewoJCQkJCWlmICgob3JkKCRmcmFtZVlbJHhdKSBeIG9yZCgkZnJhbWVZWyR4LTFdKSkgJiAxKSB7CgkJCQkJCSRoZWFkKys7CgkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdID0gMTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSsrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkZGVtZXJpdCArPSAkdGhpcy0+Y2FsY04xTjMoJGhlYWQrMSk7CgkJfQoJCWZvciAoJHg9MDsgJHg8JHdpZHRoOyArKyR4KSB7CgkJCSRoZWFkID0gMDsKCQkJJHRoaXMtPnJ1bkxlbmd0aFswXSA9IDE7CgkJCWZvciAoJHk9MDsgJHk8JHdpZHRoOyArKyR5KSB7CgkJCQlpZiAoKCR5ID09IDApIEFORCAob3JkKCRmcmFtZVskeV1bJHhdKSAmIDEpKSB7CgkJCQkJJHRoaXMtPnJ1bkxlbmd0aFswXSA9IC0xOwoJCQkJCSRoZWFkID0gMTsKCQkJCQkkdGhpcy0+cnVuTGVuZ3RoWyRoZWFkXSA9IDE7CgkJCQl9IGVsc2VpZiAoJHkgPiAwKSB7CgkJCQkJaWYgKChvcmQoJGZyYW1lWyR5XVskeF0pIF4gb3JkKCRmcmFtZVskeS0xXVskeF0pKSAmIDEpIHsKCQkJCQkJJGhlYWQrKzsKCQkJCQkJJHRoaXMtPnJ1bkxlbmd0aFskaGVhZF0gPSAxOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT5ydW5MZW5ndGhbJGhlYWRdKys7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCSRkZW1lcml0ICs9ICR0aGlzLT5jYWxjTjFOMygkaGVhZCsxKTsKCQl9CgkJcmV0dXJuICRkZW1lcml0OwoJfQoKCS8qKgoJICogbWFzawoJICogQHBhcmFtICR3aWR0aCAoaW50KQoJICogQHBhcmFtICRmcmFtZSAoYXJyYXkpCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IGJlc3QgbWFzawoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1hc2soJHdpZHRoLCAkZnJhbWUsICRsZXZlbCkgewoJCSRtaW5EZW1lcml0ID0gUEhQX0lOVF9NQVg7CgkJJGJlc3RNYXNrTnVtID0gMDsKCQkkYmVzdE1hc2sgPSBhcnJheSgpOwoJCSRjaGVja2VkX21hc2tzID0gYXJyYXkoMCwgMSwgMiwgMywgNCwgNSwgNiwgNyk7CgkJaWYgKFFSX0ZJTkRfRlJPTV9SQU5ET00gIT09IGZhbHNlKSB7CgkJCSRob3dNYW51T3V0ID0gOCAtIChRUl9GSU5EX0ZST01fUkFORE9NICUgOSk7CgkJCWZvciAoJGkgPSAwOyAkaSA8ICAkaG93TWFudU91dDsgKyskaSkgewoJCQkJJHJlbVBvcyA9IHJhbmQgKDAsIGNvdW50KCRjaGVja2VkX21hc2tzKS0xKTsKCQkJCXVuc2V0KCRjaGVja2VkX21hc2tzWyRyZW1Qb3NdKTsKCQkJCSRjaGVja2VkX21hc2tzID0gYXJyYXlfdmFsdWVzKCRjaGVja2VkX21hc2tzKTsKCQkJfQoJCX0KCQkkYmVzdE1hc2sgPSAkZnJhbWU7CgkJZm9yZWFjaCAoJGNoZWNrZWRfbWFza3MgYXMgJGkpIHsKCQkJJG1hc2sgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgc3RyX3JlcGVhdCgiXDAiLCAkd2lkdGgpKTsKCQkJJGRlbWVyaXQgPSAwOwoJCQkkYmxhY2tzID0gMDsKCQkJJGJsYWNrcyAgPSAkdGhpcy0+bWFrZU1hc2tObygkaSwgJHdpZHRoLCAkZnJhbWUsICRtYXNrKTsKCQkJJGJsYWNrcyArPSAkdGhpcy0+d3JpdGVGb3JtYXRJbmZvcm1hdGlvbigkd2lkdGgsICRtYXNrLCAkaSwgJGxldmVsKTsKCQkJJGJsYWNrcyAgPSAoaW50KSgxMDAgKiAkYmxhY2tzIC8gKCR3aWR0aCAqICR3aWR0aCkpOwoJCQkkZGVtZXJpdCA9IChpbnQpKChpbnQpKGFicygkYmxhY2tzIC0gNTApIC8gNSkgKiBONCk7CgkJCSRkZW1lcml0ICs9ICR0aGlzLT5ldmFsdWF0ZVN5bWJvbCgkd2lkdGgsICRtYXNrKTsKCQkJaWYgKCRkZW1lcml0IDwgJG1pbkRlbWVyaXQpIHsKCQkJCSRtaW5EZW1lcml0ID0gJGRlbWVyaXQ7CgkJCQkkYmVzdE1hc2sgPSAkbWFzazsKCQkJCSRiZXN0TWFza051bSA9ICRpOwoJCQl9CgkJfQoJCXJldHVybiAkYmVzdE1hc2s7Cgl9CgoJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8vIFFSc3BsaXQKCgkvKioKCSAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgYXQgc3BlY2lmaWVkIHBvc2l0aW9uIGlzIGEgbnVtYmVyCgkgKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBzdHJpbmcKCSAqIEBwYXJhbSAkcG9zIChpbnQpIGNoYXJhY3RlZCBwb3NpdGlvbgoJICogQHJldHVybiBib29sZWFuIHRydWUgb2YgZmFsc2UKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBpc2RpZ2l0YXQoJHN0ciwgJHBvcykgewoJCWlmICgkcG9zID49IHN0cmxlbigkc3RyKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAoKG9yZCgkc3RyWyRwb3NdKSA+PSBvcmQoJzAnKSkmJihvcmQoJHN0clskcG9zXSkgPD0gb3JkKCc5JykpKTsKCX0KCgkvKioKCSAqIFJldHVybiB0cnVlIGlmIHRoZSBjaGFyYWN0ZXIgYXQgc3BlY2lmaWVkIHBvc2l0aW9uIGlzIGFuIGFscGhhbnVtZXJpYyBjaGFyYWN0ZXIKCSAqIEBwYXJhbSAkc3RyIChzdHJpbmcpIHN0cmluZwoJICogQHBhcmFtICRwb3MgKGludCkgY2hhcmFjdGVkIHBvc2l0aW9uCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBvZiBmYWxzZQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGlzYWxudW1hdCgkc3RyLCAkcG9zKSB7CgkJaWYgKCRwb3MgPj0gc3RybGVuKCRzdHIpKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJcmV0dXJuICgkdGhpcy0+bG9va0FuVGFibGUob3JkKCRzdHJbJHBvc10pKSA+PSAwKTsKCX0KCgkvKioKCSAqIGlkZW50aWZ5TW9kZQoJICogQHBhcmFtICRwb3MgKGludCkKCSAqIEByZXR1cm4gaW50IG1vZGUKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBpZGVudGlmeU1vZGUoJHBvcykgewoJCWlmICgkcG9zID49IHN0cmxlbigkdGhpcy0+ZGF0YVN0cikpIHsKCQkJcmV0dXJuIFFSX01PREVfTkw7CgkJfQoJCSRjID0gJHRoaXMtPmRhdGFTdHJbJHBvc107CgkJaWYgKCR0aGlzLT5pc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwb3MpKSB7CgkJCXJldHVybiBRUl9NT0RFX05NOwoJCX0gZWxzZWlmICgkdGhpcy0+aXNhbG51bWF0KCR0aGlzLT5kYXRhU3RyLCAkcG9zKSkgewoJCQlyZXR1cm4gUVJfTU9ERV9BTjsKCQl9IGVsc2VpZiAoJHRoaXMtPmhpbnQgPT0gUVJfTU9ERV9LSikgewoJCQlpZiAoJHBvcysxIDwgc3RybGVuKCR0aGlzLT5kYXRhU3RyKSkgewoJCQkJJGQgPSAkdGhpcy0+ZGF0YVN0clskcG9zKzFdOwoJCQkJJHdvcmQgPSAob3JkKCRjKSA8PCA4KSB8IG9yZCgkZCk7CgkJCQlpZiAoKCR3b3JkID49IDB4ODE0MCAmJiAkd29yZCA8PSAweDlmZmMpIE9SICgkd29yZCA+PSAweGUwNDAgJiYgJHdvcmQgPD0gMHhlYmJmKSkgewoJCQkJCXJldHVybiBRUl9NT0RFX0tKOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiBRUl9NT0RFXzhCOwoJfQoKCS8qKgoJICogZWF0TnVtCgkgKiBAcmV0dXJuIGludCBydW4KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlYXROdW0oKSB7CgkJJGxuID0gJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFX05NLCAkdGhpcy0+dmVyc2lvbik7CgkJJHAgPSAwOwoJCXdoaWxlKCR0aGlzLT5pc2RpZ2l0YXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgewoJCQkkcCsrOwoJCX0KCQkkcnVuID0gJHA7CgkJJG1vZGUgPSAkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKTsKCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV84QikgewoJCQkkZGlmID0gJHRoaXMtPmVzdGltYXRlQml0c01vZGVOdW0oJHJ1bikgKyA0ICsgJGxuCgkJCSsgJHRoaXMtPmVzdGltYXRlQml0c01vZGU4KDEpICAgICAgICAgLy8gKyA0ICsgbDgKCQkJLSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJHJ1biArIDEpOyAvLyAtIDQgLSBsOAoJCQlpZiAoJGRpZiA+IDApIHsKCQkJCXJldHVybiAkdGhpcy0+ZWF0OCgpOwoJCQl9CgkJfQoJCWlmICgkbW9kZSA9PSBRUl9NT0RFX0FOKSB7CgkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZU51bSgkcnVuKSArIDQgKyAkbG4KCQkJKyAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKDEpICAgICAgICAvLyArIDQgKyBsYQoJCQktICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlQW4oJHJ1biArIDEpOy8vIC0gNCAtIGxhCgkJCWlmICgkZGlmID4gMCkgewoJCQkJcmV0dXJuICR0aGlzLT5lYXRBbigpOwoJCQl9CgkJfQoJCSR0aGlzLT5pdGVtcyA9ICR0aGlzLT5hcHBlbmROZXdJbnB1dEl0ZW0oJHRoaXMtPml0ZW1zLCBRUl9NT0RFX05NLCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsKCQlyZXR1cm4gJHJ1bjsKCX0KCgkvKioKCSAqIGVhdEFuCgkgKiBAcmV0dXJuIGludCBydW4KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlYXRBbigpIHsKCQkkbGEgPSAkdGhpcy0+bGVuZ3RoSW5kaWNhdG9yKFFSX01PREVfQU4sICAkdGhpcy0+dmVyc2lvbik7CgkJJGxuID0gJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFX05NLCAkdGhpcy0+dmVyc2lvbik7CgkJJHAgPTEgOwoJCXdoaWxlKCR0aGlzLT5pc2FsbnVtYXQoJHRoaXMtPmRhdGFTdHIsICRwKSkgewoJCQlpZiAoJHRoaXMtPmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHApKSB7CgkJCQkkcSA9ICRwOwoJCQkJd2hpbGUoJHRoaXMtPmlzZGlnaXRhdCgkdGhpcy0+ZGF0YVN0ciwgJHEpKSB7CgkJCQkJJHErKzsKCQkJCX0KCQkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKCRwKSAvLyArIDQgKyBsYQoJCQkJKyAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZU51bSgkcSAtICRwKSArIDQgKyAkbG4KCQkJCS0gJHRoaXMtPmVzdGltYXRlQml0c01vZGVBbigkcSk7IC8vIC0gNCAtIGxhCgkJCQlpZiAoJGRpZiA8IDApIHsKCQkJCQlicmVhazsKCQkJCX0gZWxzZSB7CgkJCQkJJHAgPSAkcTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRwKys7CgkJCX0KCQl9CgkJJHJ1biA9ICRwOwoJCWlmICghJHRoaXMtPmlzYWxudW1hdCgkdGhpcy0+ZGF0YVN0ciwgJHApKSB7CgkJCSRkaWYgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKCRydW4pICsgNCArICRsYQoJCQkrICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgxKSAvLyArIDQgKyBsOAoJCQktICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcnVuICsgMSk7IC8vIC0gNCAtIGw4CgkJCWlmICgkZGlmID4gMCkgewoJCQkJcmV0dXJuICR0aGlzLT5lYXQ4KCk7CgkJCX0KCQl9CgkJJHRoaXMtPml0ZW1zID0gJHRoaXMtPmFwcGVuZE5ld0lucHV0SXRlbSgkdGhpcy0+aXRlbXMsIFFSX01PREVfQU4sICRydW4sIHN0cl9zcGxpdCgkdGhpcy0+ZGF0YVN0cikpOwoJCXJldHVybiAkcnVuOwoJfQoKCS8qKgoJICogZWF0S2FuamkKCSAqIEByZXR1cm4gaW50IHJ1bgoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVhdEthbmppKCkgewoJCSRwID0gMDsKCQl3aGlsZSgkdGhpcy0+aWRlbnRpZnlNb2RlKCRwKSA9PSBRUl9NT0RFX0tKKSB7CgkJCSRwICs9IDI7CgkJfQoJCSR0aGlzLT5pdGVtcyA9ICR0aGlzLT5hcHBlbmROZXdJbnB1dEl0ZW0oJHRoaXMtPml0ZW1zLCBRUl9NT0RFX0tKLCAkcCwgc3RyX3NwbGl0KCR0aGlzLT5kYXRhU3RyKSk7CgkJcmV0dXJuICRydW47Cgl9CgoJLyoqCgkgKiBlYXQ4CgkgKiBAcmV0dXJuIGludCBydW4KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlYXQ4KCkgewoJCSRsYSA9ICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9BTiwgJHRoaXMtPnZlcnNpb24pOwoJCSRsbiA9ICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9OTSwgJHRoaXMtPnZlcnNpb24pOwoJCSRwID0gMTsKCQkkZGF0YVN0ckxlbiA9IHN0cmxlbigkdGhpcy0+ZGF0YVN0cik7CgkJd2hpbGUoJHAgPCAkZGF0YVN0ckxlbikgewoJCQkkbW9kZSA9ICR0aGlzLT5pZGVudGlmeU1vZGUoJHApOwoJCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9LSikgewoJCQkJYnJlYWs7CgkJCX0KCQkJaWYgKCRtb2RlID09IFFSX01PREVfTk0pIHsKCQkJCSRxID0gJHA7CgkJCQl3aGlsZSgkdGhpcy0+aXNkaWdpdGF0KCR0aGlzLT5kYXRhU3RyLCAkcSkpIHsKCQkJCQkkcSsrOwoJCQkJfQoJCQkJJGRpZiA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcCkgLy8gKyA0ICsgbDgKCQkJCSsgJHRoaXMtPmVzdGltYXRlQml0c01vZGVOdW0oJHEgLSAkcCkgKyA0ICsgJGxuCgkJCQktICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcSk7IC8vIC0gNCAtIGw4CgkJCQlpZiAoJGRpZiA8IDApIHsKCQkJCQlicmVhazsKCQkJCX0gZWxzZSB7CgkJCQkJJHAgPSAkcTsKCQkJCX0KCQkJfSBlbHNlaWYgKCRtb2RlID09IFFSX01PREVfQU4pIHsKCQkJCSRxID0gJHA7CgkJCQl3aGlsZSgkdGhpcy0+aXNhbG51bWF0KCR0aGlzLT5kYXRhU3RyLCAkcSkpIHsKCQkJCQkkcSsrOwoJCQkJfQoJCQkJJGRpZiA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcCkgIC8vICsgNCArIGw4CgkJCQkrICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlQW4oJHEgLSAkcCkgKyA0ICsgJGxhCgkJCQktICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlOCgkcSk7IC8vIC0gNCAtIGw4CgkJCQlpZiAoJGRpZiA8IDApIHsKCQkJCQlicmVhazsKCQkJCX0gZWxzZSB7CgkJCQkJJHAgPSAkcTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRwKys7CgkJCX0KCQl9CgkJJHJ1biA9ICRwOwoJCSR0aGlzLT5pdGVtcyA9ICR0aGlzLT5hcHBlbmROZXdJbnB1dEl0ZW0oJHRoaXMtPml0ZW1zLCBRUl9NT0RFXzhCLCAkcnVuLCBzdHJfc3BsaXQoJHRoaXMtPmRhdGFTdHIpKTsKCQlyZXR1cm4gJHJ1bjsKCX0KCgkvKioKCSAqIHNwbGl0U3RyaW5nCgkgKiBAcmV0dXJuIChpbnQpCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gc3BsaXRTdHJpbmcoKSB7CgkJd2hpbGUgKHN0cmxlbigkdGhpcy0+ZGF0YVN0cikgPiAwKSB7CgkJCSRtb2RlID0gJHRoaXMtPmlkZW50aWZ5TW9kZSgwKTsKCQkJc3dpdGNoICgkbW9kZSkgewoJCQkJY2FzZSBRUl9NT0RFX05NOiB7CgkJCQkJJGxlbmd0aCA9ICR0aGlzLT5lYXROdW0oKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9BTjogewoJCQkJCSRsZW5ndGggPSAkdGhpcy0+ZWF0QW4oKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9LSjogewoJCQkJCWlmICgkaGludCA9PSBRUl9NT0RFX0tKKSB7CgkJCQkJCSRsZW5ndGggPSAkdGhpcy0+ZWF0S2FuamkoKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkbGVuZ3RoID0gJHRoaXMtPmVhdDgoKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlkZWZhdWx0OiB7CgkJCQkJJGxlbmd0aCA9ICR0aGlzLT5lYXQ4KCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYgKCRsZW5ndGggPT0gMCkgewoJCQkJcmV0dXJuIDA7CgkJCX0KCQkJaWYgKCRsZW5ndGggPCAwKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQkJJHRoaXMtPmRhdGFTdHIgPSBzdWJzdHIoJHRoaXMtPmRhdGFTdHIsICRsZW5ndGgpOwoJCX0KCQlyZXR1cm4gMDsKCX0KCgkvKioKCSAqIHRvVXBwZXIKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiB0b1VwcGVyKCkgewoJCSRzdHJpbmdMZW4gPSBzdHJsZW4oJHRoaXMtPmRhdGFTdHIpOwoJCSRwID0gMDsKCQl3aGlsZSAoJHAgPCAkc3RyaW5nTGVuKSB7CgkJCSRtb2RlID0gJHRoaXMtPmlkZW50aWZ5TW9kZShzdWJzdHIoJHRoaXMtPmRhdGFTdHIsICRwKSwgJHRoaXMtPmhpbnQpOwoJCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9LSikgewoJCQkJJHAgKz0gMjsKCQkJfSBlbHNlIHsKCQkJCWlmICgob3JkKCR0aGlzLT5kYXRhU3RyWyRwXSkgPj0gb3JkKCdhJykpIEFORCAob3JkKCR0aGlzLT5kYXRhU3RyWyRwXSkgPD0gb3JkKCd6JykpKSB7CgkJCQkJJHRoaXMtPmRhdGFTdHJbJHBdID0gY2hyKG9yZCgkdGhpcy0+ZGF0YVN0clskcF0pIC0gMzIpOwoJCQkJfQoJCQkJJHArKzsKCQkJfQoJCX0KCQlyZXR1cm4gJHRoaXMtPmRhdGFTdHI7Cgl9CgoJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8vIFFSaW5wdXRJdGVtCgoJLyoqCgkgKiBuZXdJbnB1dEl0ZW0KCSAqIEBwYXJhbSAkbW9kZSAoaW50KQoJICogQHBhcmFtICRzaXplIChpbnQpCgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KQoJICogQHBhcmFtICRic3RyZWFtIChhcnJheSkKCSAqIEByZXR1cm4gYXJyYXkgaW5wdXQgaXRlbQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG5ld0lucHV0SXRlbSgkbW9kZSwgJHNpemUsICRkYXRhLCAkYnN0cmVhbT1udWxsKSB7CgkJJHNldERhdGEgPSBhcnJheV9zbGljZSgkZGF0YSwgMCwgJHNpemUpOwoJCWlmIChjb3VudCgkc2V0RGF0YSkgPCAkc2l6ZSkgewoJCQkkc2V0RGF0YSA9IGFycmF5X21lcmdlKCRzZXREYXRhLCBhcnJheV9maWxsKDAsICgkc2l6ZSAtIGNvdW50KCRzZXREYXRhKSksIDApKTsKCQl9CgkJaWYgKCEkdGhpcy0+Y2hlY2soJG1vZGUsICRzaXplLCAkc2V0RGF0YSkpIHsKCQkJcmV0dXJuIE5VTEw7CgkJfQoJCSRpbnB1dGl0ZW0gPSBhcnJheSgpOwoJCSRpbnB1dGl0ZW1bJ21vZGUnXSA9ICRtb2RlOwoJCSRpbnB1dGl0ZW1bJ3NpemUnXSA9ICRzaXplOwoJCSRpbnB1dGl0ZW1bJ2RhdGEnXSA9ICRzZXREYXRhOwoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICRic3RyZWFtOwoJCXJldHVybiAkaW5wdXRpdGVtOwoJfQoKCS8qKgoJICogZW5jb2RlTW9kZU51bQoJICogQHBhcmFtICRpbnB1dGl0ZW0gKGFycmF5KQoJICogQHBhcmFtICR2ZXJzaW9uIChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IGlucHV0IGl0ZW0KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVNb2RlTnVtKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKSB7CgkJJHdvcmRzID0gKGludCkoJGlucHV0aXRlbVsnc2l6ZSddIC8gMyk7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkkdmFsID0gMHgxOwoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCAkdmFsKTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFX05NLCAkdmVyc2lvbiksICRpbnB1dGl0ZW1bJ3NpemUnXSk7CgkJZm9yICgkaT0wOyAkaSA8ICR3b3JkczsgKyskaSkgewoJCQkkdmFsICA9IChvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKjMgIF0pIC0gb3JkKCcwJykpICogMTAwOwoJCQkkdmFsICs9IChvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKjMrMV0pIC0gb3JkKCcwJykpICogMTA7CgkJCSR2YWwgKz0gKG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bJGkqMysyXSkgLSBvcmQoJzAnKSk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAxMCwgJHZhbCk7CgkJfQoJCWlmICgkaW5wdXRpdGVtWydzaXplJ10gLSAkd29yZHMgKiAzID09IDEpIHsKCQkJJHZhbCA9IG9yZCgkaW5wdXRpdGVtWydkYXRhJ11bJHdvcmRzKjNdKSAtIG9yZCgnMCcpOwoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgJHZhbCk7CgkJfSBlbHNlaWYgKCgkaW5wdXRpdGVtWydzaXplJ10gLSAoJHdvcmRzICogMykpID09IDIpIHsKCQkJJHZhbCAgPSAob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskd29yZHMqMyAgXSkgLSBvcmQoJzAnKSkgKiAxMDsKCQkJJHZhbCArPSAob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskd29yZHMqMysxXSkgLSBvcmQoJzAnKSk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA3LCAkdmFsKTsKCQl9CgkJcmV0dXJuICRpbnB1dGl0ZW07Cgl9CgoJLyoqCgkgKiBlbmNvZGVNb2RlQW4KCSAqIEBwYXJhbSAkaW5wdXRpdGVtIChhcnJheSkKCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KQoJICogQHJldHVybiBhcnJheSBpbnB1dCBpdGVtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlTW9kZUFuKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKSB7CgkJJHdvcmRzID0gKGludCkoJGlucHV0aXRlbVsnc2l6ZSddIC8gMik7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgMHgwMik7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sICR0aGlzLT5sZW5ndGhJbmRpY2F0b3IoUVJfTU9ERV9BTiwgJHZlcnNpb24pLCAkaW5wdXRpdGVtWydzaXplJ10pOwoJCWZvciAoJGk9MDsgJGkgPCAkd29yZHM7ICsrJGkpIHsKCQkJJHZhbCAgPSAoaW50KSgkdGhpcy0+bG9va0FuVGFibGUob3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskaSoyXSkpICogNDUpOwoJCQkkdmFsICs9IChpbnQpKCR0aGlzLT5sb29rQW5UYWJsZShvcmQoJGlucHV0aXRlbVsnZGF0YSddWygkaSoyKSsxXSkpKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDExLCAkdmFsKTsKCQl9CgkJaWYgKCRpbnB1dGl0ZW1bJ3NpemUnXSAmIDEpIHsKCQkJJHZhbCA9ICR0aGlzLT5sb29rQW5UYWJsZShvcmQoJGlucHV0aXRlbVsnZGF0YSddWygkd29yZHMgKiAyKV0pKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDYsICR2YWwpOwoJCX0KCQlyZXR1cm4gJGlucHV0aXRlbTsKCX0KCgkvKioKCSAqIGVuY29kZU1vZGU4CgkgKiBAcGFyYW0gJGlucHV0aXRlbSAoYXJyYXkpCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkKCSAqIEByZXR1cm4gYXJyYXkgaW5wdXQgaXRlbQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1vZGU4KCRpbnB1dGl0ZW0sICR2ZXJzaW9uKSB7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgMHg0KTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFXzhCLCAkdmVyc2lvbiksICRpbnB1dGl0ZW1bJ3NpemUnXSk7CgkJZm9yICgkaT0wOyAkaSA8ICRpbnB1dGl0ZW1bJ3NpemUnXTsgKyskaSkgewoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgOCwgb3JkKCRpbnB1dGl0ZW1bJ2RhdGEnXVskaV0pKTsKCQl9CgkJcmV0dXJuICRpbnB1dGl0ZW07Cgl9CgoJLyoqCgkgKiBlbmNvZGVNb2RlS2FuamkKCSAqIEBwYXJhbSAkaW5wdXRpdGVtIChhcnJheSkKCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KQoJICogQHJldHVybiBhcnJheSBpbnB1dCBpdGVtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlTW9kZUthbmppKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKSB7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgNCwgMHg4KTsKCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgJHRoaXMtPmxlbmd0aEluZGljYXRvcihRUl9NT0RFX0tKLCAkdmVyc2lvbiksIChpbnQpKCRpbnB1dGl0ZW1bJ3NpemUnXSAvIDIpKTsKCQlmb3IgKCRpPTA7ICRpPCRpbnB1dGl0ZW1bJ3NpemUnXTsgJGkrPTIpIHsKCQkJJHZhbCA9IChvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpXSkgPDwgOCkgfCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWyRpKzFdKTsKCQkJaWYgKCR2YWwgPD0gMHg5ZmZjKSB7CgkJCQkkdmFsIC09IDB4ODE0MDsKCQkJfSBlbHNlIHsKCQkJCSR2YWwgLT0gMHhjMTQwOwoJCQl9CgkJCSRoID0gKCR2YWwgPj4gOCkgKiAweGMwOwoJCQkkdmFsID0gKCR2YWwgJiAweGZmKSArICRoOwoJCQkkaW5wdXRpdGVtWydic3RyZWFtJ10gPSAkdGhpcy0+YXBwZW5kTnVtKCRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSwgMTMsICR2YWwpOwoJCX0KCQlyZXR1cm4gJGlucHV0aXRlbTsKCX0KCgkvKioKCSAqIGVuY29kZU1vZGVTdHJ1Y3R1cmUKCSAqIEBwYXJhbSAkaW5wdXRpdGVtIChhcnJheSkKCSAqIEByZXR1cm4gYXJyYXkgaW5wdXQgaXRlbQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVuY29kZU1vZGVTdHJ1Y3R1cmUoJGlucHV0aXRlbSkgewoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9IGFycmF5KCk7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZE51bSgkaW5wdXRpdGVtWydic3RyZWFtJ10sIDQsIDB4MDMpOwoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWzFdKSAtIDEpOwoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA0LCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWzBdKSAtIDEpOwoJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmROdW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCA4LCBvcmQoJGlucHV0aXRlbVsnZGF0YSddWzJdKSk7CgkJcmV0dXJuICRpbnB1dGl0ZW07Cgl9CgoJLyoqCgkgKiBlbmNvZGVCaXRTdHJlYW0KCSAqIEBwYXJhbSAkaW5wdXRpdGVtIChhcnJheSkKCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KQoJICogQHJldHVybiBhcnJheSBpbnB1dCBpdGVtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlQml0U3RyZWFtKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKSB7CgkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkkd29yZHMgPSAkdGhpcy0+bWF4aW11bVdvcmRzKCRpbnB1dGl0ZW1bJ21vZGUnXSwgJHZlcnNpb24pOwoJCWlmICgkaW5wdXRpdGVtWydzaXplJ10gPiAkd29yZHMpIHsKCQkJJHN0MSA9ICR0aGlzLT5uZXdJbnB1dEl0ZW0oJGlucHV0aXRlbVsnbW9kZSddLCAkd29yZHMsICRpbnB1dGl0ZW1bJ2RhdGEnXSk7CgkJCSRzdDIgPSAkdGhpcy0+bmV3SW5wdXRJdGVtKCRpbnB1dGl0ZW1bJ21vZGUnXSwgJGlucHV0aXRlbVsnc2l6ZSddIC0gJHdvcmRzLCBhcnJheV9zbGljZSgkaW5wdXRpdGVtWydkYXRhJ10sICR3b3JkcykpOwoJCQkkc3QxID0gJHRoaXMtPmVuY29kZUJpdFN0cmVhbSgkc3QxLCAkdmVyc2lvbik7CgkJCSRzdDIgPSAkdGhpcy0+ZW5jb2RlQml0U3RyZWFtKCRzdDIsICR2ZXJzaW9uKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gYXJyYXkoKTsKCQkJJGlucHV0aXRlbVsnYnN0cmVhbSddID0gJHRoaXMtPmFwcGVuZEJpdHN0cmVhbSgkaW5wdXRpdGVtWydic3RyZWFtJ10sICRzdDFbJ2JzdHJlYW0nXSk7CgkJCSRpbnB1dGl0ZW1bJ2JzdHJlYW0nXSA9ICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGlucHV0aXRlbVsnYnN0cmVhbSddLCAkc3QyWydic3RyZWFtJ10pOwoJCX0gZWxzZSB7CgkJCXN3aXRjaCgkaW5wdXRpdGVtWydtb2RlJ10pIHsKCQkJCWNhc2UgUVJfTU9ERV9OTTogewoJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZU51bSgkaW5wdXRpdGVtLCAkdmVyc2lvbik7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfQU46IHsKCQkJCQkkaW5wdXRpdGVtID0gJHRoaXMtPmVuY29kZU1vZGVBbigkaW5wdXRpdGVtLCAkdmVyc2lvbik7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfOEI6IHsKCQkJCQkkaW5wdXRpdGVtID0gJHRoaXMtPmVuY29kZU1vZGU4KCRpbnB1dGl0ZW0sICR2ZXJzaW9uKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9LSjogewoJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZUthbmppKCRpbnB1dGl0ZW0sICR2ZXJzaW9uKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgUVJfTU9ERV9TVDogewoJCQkJCSRpbnB1dGl0ZW0gPSAkdGhpcy0+ZW5jb2RlTW9kZVN0cnVjdHVyZSgkaW5wdXRpdGVtKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWRlZmF1bHQ6IHsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGlucHV0aXRlbTsKCX0KCgkvLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgoJLy8gUVJpbnB1dAoKCS8qKgoJICogQXBwZW5kIGRhdGEgdG8gYW4gaW5wdXQgb2JqZWN0LgoJICogVGhlIGRhdGEgaXMgY29waWVkIGFuZCBhcHBlbmRlZCB0byB0aGUgaW5wdXQgb2JqZWN0LgoJICogQHBhcmFtICRpdGVtcyAoYXJycmF5KSBpbnB1dCBpdGVtcwoJICogQHBhcmFtICRtb2RlIChpbnQpIGVuY29kaW5nIG1vZGUuCgkgKiBAcGFyYW0gJHNpemUgKGludCkgc2l6ZSBvZiBkYXRhIChieXRlKS4KCSAqIEBwYXJhbSAkZGF0YSAoYXJyYXkpIGFycmF5IG9mIGlucHV0IGRhdGEuCgkgKiBAcmV0dXJuIGl0ZW1zCgkgKgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kTmV3SW5wdXRJdGVtKCRpdGVtcywgJG1vZGUsICRzaXplLCAkZGF0YSkgewoJCSRuZXdpdGVtID0gJHRoaXMtPm5ld0lucHV0SXRlbSgkbW9kZSwgJHNpemUsICRkYXRhKTsKCQlpZiAoIWVtcHR5KCRuZXdpdGVtKSkgewoJCQkkaXRlbXNbXSA9ICRuZXdpdGVtOwoJCX0KCQlyZXR1cm4gJGl0ZW1zOwoJfQoKCS8qKgoJICogaW5zZXJ0U3RydWN0dXJlZEFwcGVuZEhlYWRlcgoJICogQHBhcmFtICRpdGVtcyAoYXJyYXkpCgkgKiBAcGFyYW0gJHNpemUgKGludCkKCSAqIEBwYXJhbSAkaW5kZXggKGludCkKCSAqIEBwYXJhbSAkcGFyaXR5IChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IGl0ZW1zCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5zZXJ0U3RydWN0dXJlZEFwcGVuZEhlYWRlcigkaXRlbXMsICRzaXplLCAkaW5kZXgsICRwYXJpdHkpIHsKCQlpZiAoJHNpemUgPiBNQVhfU1RSVUNUVVJFRF9TWU1CT0xTKSB7CgkJCXJldHVybiAtMTsKCQl9CgkJaWYgKCgkaW5kZXggPD0gMCkgT1IgKCRpbmRleCA+IE1BWF9TVFJVQ1RVUkVEX1NZTUJPTFMpKSB7CgkJCXJldHVybiAtMTsKCQl9CgkJJGJ1ZiA9IGFycmF5KCRzaXplLCAkaW5kZXgsICRwYXJpdHkpOwoJCSRlbnRyeSA9ICR0aGlzLT5uZXdJbnB1dEl0ZW0oUVJfTU9ERV9TVCwgMywgYnVmKTsKCQlhcnJheV91bnNoaWZ0KCRpdGVtcywgJGVudHJ5KTsKCQlyZXR1cm4gJGl0ZW1zOwoJfQoKCS8qKgoJICogY2FsY1Bhcml0eQoJICogQHBhcmFtICRpdGVtcyAoYXJyYXkpCgkgKiBAcmV0dXJuIGludCBwYXJpdHkKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBjYWxjUGFyaXR5KCRpdGVtcykgewoJCSRwYXJpdHkgPSAwOwoJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewoJCQlpZiAoJGl0ZW1bJ21vZGUnXSAhPSBRUl9NT0RFX1NUKSB7CgkJCQlmb3IgKCRpPSRpdGVtWydzaXplJ10tMTsgJGk+PTA7IC0tJGkpIHsKCQkJCQkkcGFyaXR5IF49ICRpdGVtWydkYXRhJ11bJGldOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkcGFyaXR5OwoJfQoKCS8qKgoJICogY2hlY2tNb2RlTnVtCgkgKiBAcGFyYW0gJHNpemUgKGludCkKCSAqIEBwYXJhbSAkZGF0YSAoYXJyYXkpCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBvciBmYWxzZQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrTW9kZU51bSgkc2l6ZSwgJGRhdGEpIHsKCQlmb3IgKCRpPTA7ICRpPCRzaXplOyArKyRpKSB7CgkJCWlmICgob3JkKCRkYXRhWyRpXSkgPCBvcmQoJzAnKSkgT1IgKG9yZCgkZGF0YVskaV0pID4gb3JkKCc5JykpKXsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCX0KCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioKCSAqIExvb2sgdXAgdGhlIGFscGhhYmV0LW51bWVyaWMgY29udmVzaW9uIHRhYmxlIChzZWUgSklTIFgwNTEwOjIwMDQsIHBwLjE5KS4KCSAqIEBwYXJhbSAkYyAoaW50KSBjaGFyYWN0ZXIgdmFsdWUKCSAqIEByZXR1cm4gdmFsdWUKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGxvb2tBblRhYmxlKCRjKSB7CgkJcmV0dXJuICgoJGMgPiAxMjcpPy0xOiR0aGlzLT5hblRhYmxlWyRjXSk7Cgl9CgoJLyoqCgkgKiBjaGVja01vZGVBbgoJICogQHBhcmFtICRzaXplIChpbnQpCgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KQoJICogQHJldHVybiBib29sZWFuIHRydWUgb3IgZmFsc2UKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBjaGVja01vZGVBbigkc2l6ZSwgJGRhdGEpIHsKCQlmb3IgKCRpPTA7ICRpPCRzaXplOyArKyRpKSB7CgkJCWlmICgkdGhpcy0+bG9va0FuVGFibGUob3JkKCRkYXRhWyRpXSkpID09IC0xKSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBlc3RpbWF0ZUJpdHNNb2RlTnVtCgkgKiBAcGFyYW0gJHNpemUgKGludCkKCSAqIEByZXR1cm4gaW50IG51bWJlciBvZiBiaXRzCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZU51bSgkc2l6ZSkgewoJCSR3ID0gKGludCkoJHNpemUgLyAzKTsKCQkkYml0cyA9ICgkdyAqIDEwKTsKCQlzd2l0Y2goJHNpemUgLSAoJHcgKiAzKSkgewoJCQljYXNlIDE6IHsKCQkJCSRiaXRzICs9IDQ7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDI6IHsKCQkJCSRiaXRzICs9IDc7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJGJpdHM7Cgl9CgoJLyoqCgkgKiBlc3RpbWF0ZUJpdHNNb2RlQW4KCSAqIEBwYXJhbSAkc2l6ZSAoaW50KQoJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGJpdHMKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlQW4oJHNpemUpIHsKCQkkYml0cyA9IChpbnQpKCRzaXplICogNS41KTsgLy8gKHNpemUgLyAyICkgKiAxMQoJCWlmICgkc2l6ZSAmIDEpIHsKCQkJJGJpdHMgKz0gNjsKCQl9CgkJcmV0dXJuICRiaXRzOwoJfQoKCS8qKgoJICogZXN0aW1hdGVCaXRzTW9kZTgKCSAqIEBwYXJhbSAkc2l6ZSAoaW50KQoJICogQHJldHVybiBpbnQgbnVtYmVyIG9mIGJpdHMKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlc3RpbWF0ZUJpdHNNb2RlOCgkc2l6ZSkgewoJCXJldHVybiAoaW50KSgkc2l6ZSAqIDgpOwoJfQoKCS8qKgoJICogZXN0aW1hdGVCaXRzTW9kZUthbmppCgkgKiBAcGFyYW0gJHNpemUgKGludCkKCSAqIEByZXR1cm4gaW50IG51bWJlciBvZiBiaXRzCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gZXN0aW1hdGVCaXRzTW9kZUthbmppKCRzaXplKSB7CgkJcmV0dXJuIChpbnQpKCRzaXplICogNi41KTsgLy8gKHNpemUgLyAyICkgKiAxMwoJfQoKCS8qKgoJICogY2hlY2tNb2RlS2FuamkKCSAqIEBwYXJhbSAkc2l6ZSAoaW50KQoJICogQHBhcmFtICRkYXRhIChhcnJheSkKCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIG9yIGZhbHNlCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKSB7CgkJaWYgKCRzaXplICYgMSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZvciAoJGk9MDsgJGk8JHNpemU7ICRpKz0yKSB7CgkJCSR2YWwgPSAob3JkKCRkYXRhWyRpXSkgPDwgOCkgfCBvcmQoJGRhdGFbJGkrMV0pOwoJCQlpZiAoKCR2YWwgPCAweDgxNDApIE9SICgoJHZhbCA+IDB4OWZmYykgQU5EICgkdmFsIDwgMHhlMDQwKSkgT1IgKCR2YWwgPiAweGViYmYpKSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQl9CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBWYWxpZGF0ZSB0aGUgaW5wdXQgZGF0YS4KCSAqIEBwYXJhbSAkbW9kZSAoaW50KSBlbmNvZGluZyBtb2RlLgoJICogQHBhcmFtICRzaXplIChpbnQpIHNpemUgb2YgZGF0YSAoYnl0ZSkuCgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KSBkYXRhIHRvIHZhbGlkYXRlCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpbiBjYXNlIG9mIHZhbGlkIGRhdGEsIGZhbHNlIG90aGVyd2lzZQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2soJG1vZGUsICRzaXplLCAkZGF0YSkgewoJCWlmICgkc2l6ZSA8PSAwKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJc3dpdGNoKCRtb2RlKSB7CgkJCWNhc2UgUVJfTU9ERV9OTTogewoJCQkJcmV0dXJuICR0aGlzLT5jaGVja01vZGVOdW0oJHNpemUsICRkYXRhKTsKCQkJfQoJCQljYXNlIFFSX01PREVfQU46IHsKCQkJCXJldHVybiAkdGhpcy0+Y2hlY2tNb2RlQW4oJHNpemUsICRkYXRhKTsKCQkJfQoJCQljYXNlIFFSX01PREVfS0o6IHsKCQkJCXJldHVybiAkdGhpcy0+Y2hlY2tNb2RlS2FuamkoJHNpemUsICRkYXRhKTsKCQkJfQoJCQljYXNlIFFSX01PREVfOEI6IHsKCQkJCXJldHVybiB0cnVlOwoJCQl9CgkJCWNhc2UgUVJfTU9ERV9TVDogewoJCQkJcmV0dXJuIHRydWU7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJcmV0dXJuIGZhbHNlOwoJfQoKCS8qKgoJICogZXN0aW1hdGVCaXRTdHJlYW1TaXplCgkgKiBAcGFyYW0gJGl0ZW1zIChhcnJheSkKCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KQoJICogQHJldHVybiBpbnQgYml0cwoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVzdGltYXRlQml0U3RyZWFtU2l6ZSgkaXRlbXMsICR2ZXJzaW9uKSB7CgkJJGJpdHMgPSAwOwoJCWlmICgkdmVyc2lvbiA9PSAwKSB7CgkJCSR2ZXJzaW9uID0gMTsKCQl9CgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7CgkJCXN3aXRjaCgkaXRlbVsnbW9kZSddKSB7CgkJCQljYXNlIFFSX01PREVfTk06IHsKCQkJCQkkYml0cyA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlTnVtKCRpdGVtWydzaXplJ10pOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBRUl9NT0RFX0FOOiB7CgkJCQkJJGJpdHMgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZUFuKCRpdGVtWydzaXplJ10pOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSBRUl9NT0RFXzhCOiB7CgkJCQkJJGJpdHMgPSAkdGhpcy0+ZXN0aW1hdGVCaXRzTW9kZTgoJGl0ZW1bJ3NpemUnXSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfS0o6IHsKCQkJCQkkYml0cyA9ICR0aGlzLT5lc3RpbWF0ZUJpdHNNb2RlS2FuamkoJGl0ZW1bJ3NpemUnXSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIFFSX01PREVfU1Q6IHsKCQkJCQlyZXR1cm4gU1RSVUNUVVJFX0hFQURFUl9CSVRTOwoJCQkJfQoJCQkJZGVmYXVsdDogewoJCQkJCXJldHVybiAwOwoJCQkJfQoJCQl9CgkJCSRsID0gJHRoaXMtPmxlbmd0aEluZGljYXRvcigkaXRlbVsnbW9kZSddLCAkdmVyc2lvbik7CgkJCSRtID0gMSA8PCAkbDsKCQkJJG51bSA9IChpbnQpKCgkaXRlbVsnc2l6ZSddICsgJG0gLSAxKSAvICRtKTsKCQkJJGJpdHMgKz0gJG51bSAqICg0ICsgJGwpOwoJCX0KCQlyZXR1cm4gJGJpdHM7Cgl9CgoJLyoqCgkgKiBlc3RpbWF0ZVZlcnNpb24KCSAqIEBwYXJhbSAkaXRlbXMgKGFycmF5KQoJICogQHJldHVybiBpbnQgdmVyc2lvbgoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGVzdGltYXRlVmVyc2lvbigkaXRlbXMpIHsKCQkkdmVyc2lvbiA9IDA7CgkJJHByZXYgPSAwOwoJCWRvIHsKCQkJJHByZXYgPSAkdmVyc2lvbjsKCQkJJGJpdHMgPSAkdGhpcy0+ZXN0aW1hdGVCaXRTdHJlYW1TaXplKCRpdGVtcywgJHByZXYpOwoJCQkkdmVyc2lvbiA9ICR0aGlzLT5nZXRNaW5pbXVtVmVyc2lvbigoaW50KSgoJGJpdHMgKyA3KSAvIDgpLCAkdGhpcy0+bGV2ZWwpOwoJCQlpZiAoJHZlcnNpb24gPCAwKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0KCQl9IHdoaWxlICgkdmVyc2lvbiA+ICRwcmV2KTsKCQlyZXR1cm4gJHZlcnNpb247Cgl9CgoJLyoqCgkgKiBsZW5ndGhPZkNvZGUKCSAqIEBwYXJhbSAkbW9kZSAoaW50KQoJICogQHBhcmFtICR2ZXJzaW9uIChpbnQpCgkgKiBAcGFyYW0gJGJpdHMgKGludCkKCSAqIEByZXR1cm4gaW50IHNpemUKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBsZW5ndGhPZkNvZGUoJG1vZGUsICR2ZXJzaW9uLCAkYml0cykgewoJCSRwYXlsb2FkID0gJGJpdHMgLSA0IC0gJHRoaXMtPmxlbmd0aEluZGljYXRvcigkbW9kZSwgJHZlcnNpb24pOwoJCXN3aXRjaCgkbW9kZSkgewoJCQljYXNlIFFSX01PREVfTk06IHsKCQkJCSRjaHVua3MgPSAoaW50KSgkcGF5bG9hZCAvIDEwKTsKCQkJCSRyZW1haW4gPSAkcGF5bG9hZCAtICRjaHVua3MgKiAxMDsKCQkJCSRzaXplID0gJGNodW5rcyAqIDM7CgkJCQlpZiAoJHJlbWFpbiA+PSA3KSB7CgkJCQkJJHNpemUgKz0gMjsKCQkJCX0gZWxzZWlmICgkcmVtYWluID49IDQpIHsKCQkJCQkkc2l6ZSArPSAxOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBRUl9NT0RFX0FOOiB7CgkJCQkkY2h1bmtzID0gKGludCkoJHBheWxvYWQgLyAxMSk7CgkJCQkkcmVtYWluID0gJHBheWxvYWQgLSAkY2h1bmtzICogMTE7CgkJCQkkc2l6ZSA9ICRjaHVua3MgKiAyOwoJCQkJaWYgKCRyZW1haW4gPj0gNikgewoJCQkJCSsrJHNpemU7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIFFSX01PREVfOEI6IHsKCQkJCSRzaXplID0gKGludCkoJHBheWxvYWQgLyA4KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgUVJfTU9ERV9LSjogewoJCQkJJHNpemUgPSAoaW50KSgoJHBheWxvYWQgLyAxMykgKiAyKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgUVJfTU9ERV9TVDogewoJCQkJJHNpemUgPSAoaW50KSgkcGF5bG9hZCAvIDgpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJHNpemUgPSAwOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJG1heHNpemUgPSAkdGhpcy0+bWF4aW11bVdvcmRzKCRtb2RlLCAkdmVyc2lvbik7CgkJaWYgKCRzaXplIDwgMCkgewoJCQkkc2l6ZSA9IDA7CgkJfQoJCWlmICgkc2l6ZSA+ICRtYXhzaXplKSB7CgkJCSRzaXplID0gJG1heHNpemU7CgkJfQoJCXJldHVybiAkc2l6ZTsKCX0KCgkvKioKCSAqIGNyZWF0ZUJpdFN0cmVhbQoJICogQHBhcmFtICRpdGVtcyAoYXJyYXkpCgkgKiBAcmV0dXJuIGFycmF5IG9mIGl0ZW1zIGFuZCB0b3RhbCBiaXRzCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlQml0U3RyZWFtKCRpdGVtcykgewoJCSR0b3RhbCA9IDA7CgkJZm9yZWFjaCAoJGl0ZW1zIGFzICRrZXkgPT4gJGl0ZW0pIHsKCQkJJGl0ZW1zWyRrZXldID0gJHRoaXMtPmVuY29kZUJpdFN0cmVhbSgkaXRlbSwgJHRoaXMtPnZlcnNpb24pOwoJCQkkYml0cyA9IGNvdW50KCRpdGVtc1ska2V5XVsnYnN0cmVhbSddKTsKCQkJJHRvdGFsICs9ICRiaXRzOwoJCX0KCQlyZXR1cm4gYXJyYXkoJGl0ZW1zLCAkdG90YWwpOwoJfQoKCS8qKgoJICogY29udmVydERhdGEKCSAqIEBwYXJhbSAkaXRlbXMgKGFycmF5KQoJICogQHJldHVybiBhcnJheSBpdGVtcwoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnZlcnREYXRhKCRpdGVtcykgewoJCSR2ZXIgPSAkdGhpcy0+ZXN0aW1hdGVWZXJzaW9uKCRpdGVtcyk7CgkJaWYgKCR2ZXIgPiAkdGhpcy0+dmVyc2lvbikgewoJCQkkdGhpcy0+dmVyc2lvbiA9ICR2ZXI7CgkJfQoJCXdoaWxlICh0cnVlKSB7CgkJCSRjYnMgPSAkdGhpcy0+Y3JlYXRlQml0U3RyZWFtKCRpdGVtcyk7CgkJCSRpdGVtcyA9ICRjYnNbMF07CgkJCSRiaXRzID0gJGNic1sxXTsKCQkJaWYgKCRiaXRzIDwgMCkgewoJCQkJcmV0dXJuIC0xOwoJCQl9CgkJCSR2ZXIgPSAkdGhpcy0+Z2V0TWluaW11bVZlcnNpb24oKGludCkoKCRiaXRzICsgNykgLyA4KSwgJHRoaXMtPmxldmVsKTsKCQkJaWYgKCR2ZXIgPCAwKSB7CgkJCQlyZXR1cm4gLTE7CgkJCX0gZWxzZWlmICgkdmVyID4gJHRoaXMtPnZlcnNpb24pIHsKCQkJCSR0aGlzLT52ZXJzaW9uID0gJHZlcjsKCQkJfSBlbHNlIHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiAkaXRlbXM7Cgl9CgoJLyoqCgkgKiBBcHBlbmQgUGFkZGluZyBCaXQgdG8gYml0c3RyZWFtCgkgKiBAcGFyYW0gJGJzdHJlYW0gKGFycmF5KQoJICogQHJldHVybiBhcnJheSBiaXRzdHJlYW0KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmRQYWRkaW5nQml0KCRic3RyZWFtKSB7CgkgCWlmIChpc19udWxsKCRic3RyZWFtKSkgewoJIAkJcmV0dXJuIG51bGw7CgkgCX0KCQkkYml0cyA9IGNvdW50KCRic3RyZWFtKTsKCQkkbWF4d29yZHMgPSAkdGhpcy0+Z2V0RGF0YUxlbmd0aCgkdGhpcy0+dmVyc2lvbiwgJHRoaXMtPmxldmVsKTsKCQkkbWF4Yml0cyA9ICRtYXh3b3JkcyAqIDg7CgkJaWYgKCRtYXhiaXRzID09ICRiaXRzKSB7CgkJCXJldHVybiAkYnN0cmVhbTsKCQl9CgkJaWYgKCRtYXhiaXRzIC0gJGJpdHMgPCA1KSB7CgkJCXJldHVybiAkdGhpcy0+YXBwZW5kTnVtKCRic3RyZWFtLCAkbWF4Yml0cyAtICRiaXRzLCAwKTsKCQl9CgkJJGJpdHMgKz0gNDsKCQkkd29yZHMgPSAoaW50KSgoJGJpdHMgKyA3KSAvIDgpOwoJCSRwYWRkaW5nID0gYXJyYXkoKTsKCQkkcGFkZGluZyA9ICR0aGlzLT5hcHBlbmROdW0oJHBhZGRpbmcsICR3b3JkcyAqIDggLSAkYml0cyArIDQsIDApOwoJCSRwYWRsZW4gPSAkbWF4d29yZHMgLSAkd29yZHM7CgkJaWYgKCRwYWRsZW4gPiAwKSB7CgkJCSRwYWRidWYgPSBhcnJheSgpOwoJCQlmb3IgKCRpPTA7ICRpPCRwYWRsZW47ICsrJGkpIHsKCQkJCSRwYWRidWZbJGldID0gKCRpJjEpPzB4MTE6MHhlYzsKCQkJfQoJCQkkcGFkZGluZyA9ICR0aGlzLT5hcHBlbmRCeXRlcygkcGFkZGluZywgJHBhZGxlbiwgJHBhZGJ1Zik7CgkJfQoJCXJldHVybiAkdGhpcy0+YXBwZW5kQml0c3RyZWFtKCRic3RyZWFtLCAkcGFkZGluZyk7Cgl9CgoJLyoqCgkgKiBtZXJnZUJpdFN0cmVhbQoJICogQHBhcmFtICRpdGVtcyAoYXJyYXkpIGl0ZW1zCgkgKiBAcmV0dXJuIGFycmF5IGJpdHN0cmVhbQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIG1lcmdlQml0U3RyZWFtKCRpdGVtcykgewoJCSRpdGVtcyA9ICR0aGlzLT5jb252ZXJ0RGF0YSgkaXRlbXMpOwoJCWlmICghaXNfYXJyYXkoJGl0ZW1zKSkgewoJCQlyZXR1cm4gbnVsbDsKCQl9CgkJJGJzdHJlYW0gPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRpdGVtcyBhcyAkaXRlbSkgewoJCQkkYnN0cmVhbSA9ICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGJzdHJlYW0sICRpdGVtWydic3RyZWFtJ10pOwoJCX0KCQlyZXR1cm4gJGJzdHJlYW07Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgc3RyZWFtIG9mIGJpdHMuCgkgKiBAcGFyYW0gJGl0ZW1zIChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IHBhZGRlZCBtZXJnZWQgYnl0ZSBzdHJlYW0KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEJpdFN0cmVhbSgkaXRlbXMpIHsKCQkkYnN0cmVhbSA9ICR0aGlzLT5tZXJnZUJpdFN0cmVhbSgkaXRlbXMpOwoJCXJldHVybiAkdGhpcy0+YXBwZW5kUGFkZGluZ0JpdCgkYnN0cmVhbSk7Cgl9CgoJLyoqCgkgKiBQYWNrIGFsbCBiaXQgc3RyZWFtcyBwYWRkaW5nIGJpdHMgaW50byBhIGJ5dGUgYXJyYXkuCgkgKiBAcGFyYW0gJGl0ZW1zIChpbnQpCgkgKiBAcmV0dXJuIGFycmF5IHBhZGRlZCBtZXJnZWQgYnl0ZSBzdHJlYW0KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEJ5dGVTdHJlYW0oJGl0ZW1zKSB7CgkJJGJzdHJlYW0gPSAkdGhpcy0+Z2V0Qml0U3RyZWFtKCRpdGVtcyk7CgkJcmV0dXJuICR0aGlzLT5iaXRzdHJlYW1Ub0J5dGUoJGJzdHJlYW0pOwoJfQoKCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkvLyBRUmJpdHN0cmVhbQoKCS8qKgoJICogUmV0dXJuIGFuIGFycmF5IHdpdGggemVyb3MKCSAqIEBwYXJhbSAkc2V0TGVuZ3RoIChpbnQpIGFycmF5IHNpemUKCSAqIEByZXR1cm4gYXJyYXkKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBhbGxvY2F0ZSgkc2V0TGVuZ3RoKSB7CgkJcmV0dXJuIGFycmF5X2ZpbGwoMCwgJHNldExlbmd0aCwgMCk7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gbmV3IGJpdHN0cmVhbSBmcm9tIG51bWJlcgoJICogQHBhcmFtICRiaXRzIChpbnQpIG51bWJlciBvZiBiaXRzCgkgKiBAcGFyYW0gJG51bSAoaW50KSBudW1iZXIKCSAqIEByZXR1cm4gYXJyYXkgYml0c3RyZWFtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gbmV3RnJvbU51bSgkYml0cywgJG51bSkgewoJCSRic3RyZWFtID0gJHRoaXMtPmFsbG9jYXRlKCRiaXRzKTsKCQkkbWFzayA9IDEgPDwgKCRiaXRzIC0gMSk7CgkJZm9yICgkaT0wOyAkaTwkYml0czsgKyskaSkgewoJCQlpZiAoJG51bSAmICRtYXNrKSB7CgkJCQkkYnN0cmVhbVskaV0gPSAxOwoJCQl9IGVsc2UgewoJCQkJJGJzdHJlYW1bJGldID0gMDsKCQkJfQoJCQkkbWFzayA9ICRtYXNrID4+IDE7CgkJfQoJCXJldHVybiAkYnN0cmVhbTsKCX0KCgkvKioKCSAqIFJldHVybiBuZXcgYml0c3RyZWFtIGZyb20gYnl0ZXMKCSAqIEBwYXJhbSAkc2l6ZSAoaW50KSBzaXplCgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KSBieXRlcwoJICogQHJldHVybiBhcnJheSBiaXRzdHJlYW0KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBuZXdGcm9tQnl0ZXMoJHNpemUsICRkYXRhKSB7CgkJJGJzdHJlYW0gPSAkdGhpcy0+YWxsb2NhdGUoJHNpemUgKiA4KTsKCQkkcD0wOwoJCWZvciAoJGk9MDsgJGk8JHNpemU7ICsrJGkpIHsKCQkJJG1hc2sgPSAweDgwOwoJCQlmb3IgKCRqPTA7ICRqPDg7ICsrJGopIHsKCQkJCWlmICgkZGF0YVskaV0gJiAkbWFzaykgewoJCQkJCSRic3RyZWFtWyRwXSA9IDE7CgkJCQl9IGVsc2UgewoJCQkJCSRic3RyZWFtWyRwXSA9IDA7CgkJCQl9CgkJCQkkcCsrOwoJCQkJJG1hc2sgPSAkbWFzayA+PiAxOwoJCQl9CgkJfQoJCXJldHVybiAkYnN0cmVhbTsKCX0KCgkvKioKCSAqIEFwcGVuZCBvbmUgYml0c3RyZWFtIHRvIGFub3RoZXIKCSAqIEBwYXJhbSAkYml0c3RyZWFtIChhcnJheSkgb3JpZ2luYWwgYml0c3RyZWFtCgkgKiBAcGFyYW0gJGFwcGVuZCAoYXJyYXkpIGJpdHN0cmVhbSB0byBhcHBlbmQKCSAqIEByZXR1cm4gYXJyYXkgYml0c3RyZWFtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kQml0c3RyZWFtKCRiaXRzdHJlYW0sICRhcHBlbmQpIHsKCQlpZiAoKCFpc19hcnJheSgkYXBwZW5kKSkgT1IgKGNvdW50KCRhcHBlbmQpID09IDApKSB7CgkJCXJldHVybiAkYml0c3RyZWFtOwoJCX0KCQlpZiAoY291bnQoJGJpdHN0cmVhbSkgPT0gMCkgewoJCQlyZXR1cm4gJGFwcGVuZDsKCQl9CgkJcmV0dXJuIGFycmF5X3ZhbHVlcyhhcnJheV9tZXJnZSgkYml0c3RyZWFtLCAkYXBwZW5kKSk7Cgl9CgoJLyoqCgkgKiBBcHBlbmQgb25lIGJpdHN0cmVhbSBjcmVhdGVkIGZyb20gbnVtYmVyIHRvIGFub3RoZXIKCSAqIEBwYXJhbSAkYml0c3RyZWFtIChhcnJheSkgb3JpZ2luYWwgYml0c3RyZWFtCgkgKiBAcGFyYW0gJGJpdHMgKGludCkgbnVtYmVyIG9mIGJpdHMKCSAqIEBwYXJhbSAkbnVtIChpbnQpIG51bWJlcgoJICogQHJldHVybiBhcnJheSBiaXRzdHJlYW0KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBhcHBlbmROdW0oJGJpdHN0cmVhbSwgJGJpdHMsICRudW0pIHsKCQlpZiAoJGJpdHMgPT0gMCkgewoJCQlyZXR1cm4gMDsKCQl9CgkJJGIgPSAkdGhpcy0+bmV3RnJvbU51bSgkYml0cywgJG51bSk7CgkJcmV0dXJuICR0aGlzLT5hcHBlbmRCaXRzdHJlYW0oJGJpdHN0cmVhbSwgJGIpOwoJfQoKCS8qKgoJICogQXBwZW5kIG9uZSBiaXRzdHJlYW0gY3JlYXRlZCBmcm9tIGJ5dGVzIHRvIGFub3RoZXIKCSAqIEBwYXJhbSAkYml0c3RyZWFtIChhcnJheSkgb3JpZ2luYWwgYml0c3RyZWFtCgkgKiBAcGFyYW0gJHNpemUgKGludCkgc2l6ZQoJICogQHBhcmFtICRkYXRhIChhcnJheSkgYnl0ZXMKCSAqIEByZXR1cm4gYXJyYXkgYml0c3RyZWFtCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gYXBwZW5kQnl0ZXMoJGJpdHN0cmVhbSwgJHNpemUsICRkYXRhKSB7CgkJaWYgKCRzaXplID09IDApIHsKCQkJcmV0dXJuIDA7CgkJfQoJCSRiID0gJHRoaXMtPm5ld0Zyb21CeXRlcygkc2l6ZSwgJGRhdGEpOwoJCXJldHVybiAkdGhpcy0+YXBwZW5kQml0c3RyZWFtKCRiaXRzdHJlYW0sICRiKTsKCX0KCgkvKioKCSAqIENvbnZlcnQgYml0c3RyZWFtIHRvIGJ5dGVzCgkgKiBAcGFyYW0gJGJzdHJlYW0gKGFycmF5KSBvcmlnaW5hbCBiaXRzdHJlYW0KCSAqIEByZXR1cm4gYXJyYXkgb2YgYnl0ZXMKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBiaXRzdHJlYW1Ub0J5dGUoJGJzdHJlYW0pIHsKCQlpZiAoaXNfbnVsbCgkYnN0cmVhbSkpIHsKCSAJCXJldHVybiBudWxsOwoJIAl9CgkJJHNpemUgPSBjb3VudCgkYnN0cmVhbSk7CgkJaWYgKCRzaXplID09IDApIHsKCQkJcmV0dXJuIGFycmF5KCk7CgkJfQoJCSRkYXRhID0gYXJyYXlfZmlsbCgwLCAoaW50KSgoJHNpemUgKyA3KSAvIDgpLCAwKTsKCQkkYnl0ZXMgPSAoaW50KSgkc2l6ZSAvIDgpOwoJCSRwID0gMDsKCQlmb3IgKCRpPTA7ICRpPCRieXRlczsgJGkrKykgewoJCQkkdiA9IDA7CgkJCWZvciAoJGo9MDsgJGo8ODsgJGorKykgewoJCQkJJHYgPSAkdiA8PCAxOwoJCQkJJHYgfD0gJGJzdHJlYW1bJHBdOwoJCQkJJHArKzsKCQkJfQoJCQkkZGF0YVskaV0gPSAkdjsKCQl9CgkJaWYgKCRzaXplICYgNykgewoJCQkkdiA9IDA7CgkJCWZvciAoJGo9MDsgJGo8KCRzaXplICYgNyk7ICRqKyspIHsKCQkJCSR2ID0gJHYgPDwgMTsKCQkJCSR2IHw9ICRic3RyZWFtWyRwXTsKCQkJCSRwKys7CgkJCX0KCQkJJGRhdGFbJGJ5dGVzXSA9ICR2OwoJCX0KCQlyZXR1cm4gJGRhdGE7Cgl9CgoJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8vIFFSc3BlYwoKCS8qKgoJICogUmVwbGFjZSBhIHZhbHVlIG9uIHRoZSBhcnJheSBhdCB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHNyY3RhYiAoYXJyYXkpCgkgKiBAcGFyYW0gJHggKGludCkgWCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIFkgcG9zaXRpb24KCSAqIEBwYXJhbSAkcmVwbCAoc3RyaW5nKSB2YWx1ZSB0byByZXBsYWNlCgkgKiBAcGFyYW0gJHJlcGxMZW4gKGludCkgbGVuZ3RoIG9mIHRoZSByZXBsIHN0cmluZwoJICogQHJldHVybiBhcnJheSBzcmN0YWIKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBxcnN0cnNldCgkc3JjdGFiLCAkeCwgJHksICRyZXBsLCAkcmVwbExlbj1mYWxzZSkgewoJCSRzcmN0YWJbJHldID0gc3Vic3RyX3JlcGxhY2UoJHNyY3RhYlskeV0sICgkcmVwbExlbiAhPT0gZmFsc2UpP3N1YnN0cigkcmVwbCwwLCRyZXBsTGVuKTokcmVwbCwgJHgsICgkcmVwbExlbiAhPT0gZmFsc2UpPyRyZXBsTGVuOnN0cmxlbigkcmVwbCkpOwoJCXJldHVybiAkc3JjdGFiOwoJfQoKCS8qKgoJICogUmV0dXJuIG1heGltdW0gZGF0YSBjb2RlIGxlbmd0aCAoYnl0ZXMpIGZvciB0aGUgdmVyc2lvbi4KCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KSB2ZXJzaW9uCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCSAqIEByZXR1cm4gaW50IG1heGltdW0gc2l6ZSAoYnl0ZXMpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXREYXRhTGVuZ3RoKCR2ZXJzaW9uLCAkbGV2ZWwpIHsKCQlyZXR1cm4gJHRoaXMtPmNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9XT1JEU10gLSAkdGhpcy0+Y2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX0VDXVskbGV2ZWxdOwoJfQoKCS8qKgoJICogUmV0dXJuIG1heGltdW0gZXJyb3IgY29ycmVjdGlvbiBjb2RlIGxlbmd0aCAoYnl0ZXMpIGZvciB0aGUgdmVyc2lvbi4KCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KSB2ZXJzaW9uCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCSAqIEByZXR1cm4gaW50IEVDQyBzaXplIChieXRlcykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVDQ0xlbmd0aCgkdmVyc2lvbiwgJGxldmVsKXsKCQlyZXR1cm4gJHRoaXMtPmNhcGFjaXR5WyR2ZXJzaW9uXVtRUkNBUF9FQ11bJGxldmVsXTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgd2lkdGggb2YgdGhlIHN5bWJvbCBmb3IgdGhlIHZlcnNpb24uCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBpbnQgd2lkdGgKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFdpZHRoKCR2ZXJzaW9uKSB7CgkJcmV0dXJuICR0aGlzLT5jYXBhY2l0eVskdmVyc2lvbl1bUVJDQVBfV0lEVEhdOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBudW1lciBvZiByZW1haW5kZXIgYml0cy4KCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KSB2ZXJzaW9uCgkgKiBAcmV0dXJuIGludCBudW1iZXIgb2YgcmVtYWluZGVyIGJpdHMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFJlbWFpbmRlcigkdmVyc2lvbikgewoJCXJldHVybiAkdGhpcy0+Y2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1JFTUlOREVSXTsKCX0KCgkvKioKCSAqIFJldHVybiBhIHZlcnNpb24gbnVtYmVyIHRoYXQgc2F0aXNmaWVzIHRoZSBpbnB1dCBjb2RlIGxlbmd0aC4KCSAqIEBwYXJhbSAkc2l6ZSAoaW50KSBpbnB1dCBjb2RlIGxlbmd0aCAoYnl0ZXMpCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpIGVycm9yIGNvcnJlY3Rpb24gbGV2ZWwKCSAqIEByZXR1cm4gaW50IHZlcnNpb24gbnVtYmVyCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRNaW5pbXVtVmVyc2lvbigkc2l6ZSwgJGxldmVsKSB7CgkJZm9yICgkaSA9IDE7ICRpIDw9IFFSU1BFQ19WRVJTSU9OX01BWDsgKyskaSkgewoJCQkkd29yZHMgPSAoJHRoaXMtPmNhcGFjaXR5WyRpXVtRUkNBUF9XT1JEU10gLSAkdGhpcy0+Y2FwYWNpdHlbJGldW1FSQ0FQX0VDXVskbGV2ZWxdKTsKCQkJaWYgKCR3b3JkcyA+PSAkc2l6ZSkgewoJCQkJcmV0dXJuICRpOwoJCQl9CgkJfQoJCS8vIHRoZSBzaXplIG9mIGlucHV0IGRhdGEgaXMgZ3JlYXRlciB0aGFuIFFSIGNhcGFjaXR5LCB0cnkgdG8gbG92ZXIgdGhlIGVycm9yIGNvcnJlY3Rpb24gbW9kZQoJCXJldHVybiAtMTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgc2l6ZSBvZiBsZW5ndGggaW5kaWNhdG9yIGZvciB0aGUgbW9kZSBhbmQgdmVyc2lvbi4KCSAqIEBwYXJhbSAkbW9kZSAoaW50KSBlbmNvZGluZyBtb2RlCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBpbnQgdGhlIHNpemUgb2YgdGhlIGFwcHJvcHJpYXRlIGxlbmd0aCBpbmRpY2F0b3IgKGJpdHMpLgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gbGVuZ3RoSW5kaWNhdG9yKCRtb2RlLCAkdmVyc2lvbikgewoJCWlmICgkbW9kZSA9PSBRUl9NT0RFX1NUKSB7CgkJCXJldHVybiAwOwoJCX0KCQlpZiAoJHZlcnNpb24gPD0gOSkgewoJCQkkbCA9IDA7CgkJfSBlbHNlaWYgKCR2ZXJzaW9uIDw9IDI2KSB7CgkJCSRsID0gMTsKCQl9IGVsc2UgewoJCQkkbCA9IDI7CgkJfQoJCXJldHVybiAkdGhpcy0+bGVuZ3RoVGFibGVCaXRzWyRtb2RlXVskbF07Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIG1heGltdW0gbGVuZ3RoIGZvciB0aGUgbW9kZSBhbmQgdmVyc2lvbi4KCSAqIEBwYXJhbSAkbW9kZSAoaW50KSBlbmNvZGluZyBtb2RlCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBpbnQgdGhlIG1heGltdW0gbGVuZ3RoIChieXRlcykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIG1heGltdW1Xb3JkcygkbW9kZSwgJHZlcnNpb24pIHsKCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9TVCkgewoJCQlyZXR1cm4gMzsKCQl9CgkJaWYgKCR2ZXJzaW9uIDw9IDkpIHsKCQkJJGwgPSAwOwoJCX0gZWxzZSBpZiAoJHZlcnNpb24gPD0gMjYpIHsKCQkJJGwgPSAxOwoJCX0gZWxzZSB7CgkJCSRsID0gMjsKCQl9CgkJJGJpdHMgPSAkdGhpcy0+bGVuZ3RoVGFibGVCaXRzWyRtb2RlXVskbF07CgkJJHdvcmRzID0gKDEgPDwgJGJpdHMpIC0gMTsKCQlpZiAoJG1vZGUgPT0gUVJfTU9ERV9LSikgewoJCQkkd29yZHMgKj0gMjsgLy8gdGhlIG51bWJlciBvZiBieXRlcyBpcyByZXF1aXJlZAoJCX0KCQlyZXR1cm4gJHdvcmRzOwoJfQoKCS8qKgoJICogUmV0dXJuIGFuIGFycmF5IG9mIEVDQyBzcGVjaWZpY2F0aW9uLgoJICogQHBhcmFtICR2ZXJzaW9uIChpbnQpIHZlcnNpb24KCSAqIEBwYXJhbSAkbGV2ZWwgKGludCkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJICogQHBhcmFtICRzcGVjIChhcnJheSkgYW4gYXJyYXkgb2YgRUNDIHNwZWNpZmljYXRpb24gY29udGFpbnMgYXMgZm9sbG93aW5nOiB7IyBvZiB0eXBlMSBibG9ja3MsICMgb2YgZGF0YSBjb2RlLCAjIG9mIGVjYyBjb2RlLCAjIG9mIHR5cGUyIGJsb2NrcywgIyBvZiBkYXRhIGNvZGV9CgkgKiBAcmV0dXJuIGFycmF5IHNwZWMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEVjY1NwZWMoJHZlcnNpb24sICRsZXZlbCwgJHNwZWMpIHsKCQlpZiAoY291bnQoJHNwZWMpIDwgNSkgewoJCQkkc3BlYyA9IGFycmF5KDAsIDAsIDAsIDAsIDApOwoJCX0KCQkkYjEgPSAkdGhpcy0+ZWNjVGFibGVbJHZlcnNpb25dWyRsZXZlbF1bMF07CgkJJGIyID0gJHRoaXMtPmVjY1RhYmxlWyR2ZXJzaW9uXVskbGV2ZWxdWzFdOwoJCSRkYXRhID0gJHRoaXMtPmdldERhdGFMZW5ndGgoJHZlcnNpb24sICRsZXZlbCk7CgkJJGVjYyA9ICR0aGlzLT5nZXRFQ0NMZW5ndGgoJHZlcnNpb24sICRsZXZlbCk7CgkJaWYgKCRiMiA9PSAwKSB7CgkJCSRzcGVjWzBdID0gJGIxOwoJCQkkc3BlY1sxXSA9IChpbnQpKCRkYXRhIC8gJGIxKTsKCQkJJHNwZWNbMl0gPSAoaW50KSgkZWNjIC8gJGIxKTsKCQkJJHNwZWNbM10gPSAwOwoJCQkkc3BlY1s0XSA9IDA7CgkJfSBlbHNlIHsKCQkJJHNwZWNbMF0gPSAkYjE7CgkJCSRzcGVjWzFdID0gKGludCkoJGRhdGEgLyAoJGIxICsgJGIyKSk7CgkJCSRzcGVjWzJdID0gKGludCkoJGVjYyAgLyAoJGIxICsgJGIyKSk7CgkJCSRzcGVjWzNdID0gJGIyOwoJCQkkc3BlY1s0XSA9ICRzcGVjWzFdICsgMTsKCQl9CgkJcmV0dXJuICRzcGVjOwoJfQoKCS8qKgoJICogUHV0IGFuIGFsaWdubWVudCBtYXJrZXIuCgkgKiBAcGFyYW0gJGZyYW1lIChhcnJheSkgZnJhbWUKCSAqIEBwYXJhbSAkb3ggKGludCkgWCBjZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybgoJICogQHBhcmFtICRveSAoaW50KSBZIGNlbnRlciBjb29yZGluYXRlIG9mIHRoZSBwYXR0ZXJuCgkgKiBAcmV0dXJuIGFycmF5IGZyYW1lCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwdXRBbGlnbm1lbnRNYXJrZXIoJGZyYW1lLCAkb3gsICRveSkgewoJCSRmaW5kZXIgPSBhcnJheSgKCQkJIlx4YTFceGExXHhhMVx4YTFceGExIiwKCQkJIlx4YTFceGEwXHhhMFx4YTBceGExIiwKCQkJIlx4YTFceGEwXHhhMVx4YTBceGExIiwKCQkJIlx4YTFceGEwXHhhMFx4YTBceGExIiwKCQkJIlx4YTFceGExXHhhMVx4YTFceGExIgoJCQkpOwoJCSR5U3RhcnQgPSAkb3kgLSAyOwoJCSR4U3RhcnQgPSAkb3ggLSAyOwoJCWZvciAoJHk9MDsgJHkgPCA1OyAkeSsrKSB7CgkJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsICR4U3RhcnQsICR5U3RhcnQrJHksICRmaW5kZXJbJHldKTsKCQl9CgkJcmV0dXJuICRmcmFtZTsKCX0KCgkvKioKCSAqIFB1dCBhbiBhbGlnbm1lbnQgcGF0dGVybi4KCSAqIEBwYXJhbSAkdmVyc2lvbiAoaW50KSB2ZXJzaW9uCgkgKiBAcGFyYW0gJGZyYW1lIChhcnJheSkgZnJhbWUKCSAqIEBwYXJhbSAkd2lkdGggKGludCkgd2lkdGgKCSAqIEByZXR1cm4gYXJyYXkgZnJhbWUKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBwdXRBbGlnbm1lbnRQYXR0ZXJuKCR2ZXJzaW9uLCAkZnJhbWUsICR3aWR0aCkgewoJCWlmICgkdmVyc2lvbiA8IDIpIHsKCQkJcmV0dXJuICRmcmFtZTsKCQl9CgkJJGQgPSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMV0gLSAkdGhpcy0+YWxpZ25tZW50UGF0dGVyblskdmVyc2lvbl1bMF07CgkJaWYgKCRkIDwgMCkgewoJCQkkdyA9IDI7CgkJfSBlbHNlIHsKCQkJJHcgPSAoaW50KSgoJHdpZHRoIC0gJHRoaXMtPmFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdKSAvICRkICsgMik7CgkJfQoJCWlmICgkdyAqICR3IC0gMyA9PSAxKSB7CgkJCSR4ID0gJHRoaXMtPmFsaWdubWVudFBhdHRlcm5bJHZlcnNpb25dWzBdOwoJCQkkeSA9ICR0aGlzLT5hbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsKCQkJJGZyYW1lID0gJHRoaXMtPnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsICR4LCAkeSk7CgkJCXJldHVybiAkZnJhbWU7CgkJfQoJCSRjeCA9ICR0aGlzLT5hbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsKCQkkd28gPSAkdyAtIDE7CgkJZm9yICgkeD0xOyAkeCA8ICR3bzsgKyskeCkgewoJCQkkZnJhbWUgPSAkdGhpcy0+cHV0QWxpZ25tZW50TWFya2VyKCRmcmFtZSwgNiwgJGN4KTsKCQkJJGZyYW1lID0gJHRoaXMtPnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsICRjeCwgIDYpOwoJCQkkY3ggKz0gJGQ7CgkJfQoJCSRjeSA9ICR0aGlzLT5hbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsKCQlmb3IgKCR5PTA7ICR5IDwgJHdvOyArKyR5KSB7CgkJCSRjeCA9ICR0aGlzLT5hbGlnbm1lbnRQYXR0ZXJuWyR2ZXJzaW9uXVswXTsKCQkJZm9yICgkeD0wOyAkeCA8ICR3bzsgKyskeCkgewoJCQkJJGZyYW1lID0gJHRoaXMtPnB1dEFsaWdubWVudE1hcmtlcigkZnJhbWUsICRjeCwgJGN5KTsKCQkJCSRjeCArPSAkZDsKCQkJfQoJCQkkY3kgKz0gJGQ7CgkJfQoJCXJldHVybiAkZnJhbWU7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gQkNIIGVuY29kZWQgdmVyc2lvbiBpbmZvcm1hdGlvbiBwYXR0ZXJuIHRoYXQgaXMgdXNlZCBmb3IgdGhlIHN5bWJvbCBvZiB2ZXJzaW9uIDcgb3IgZ3JlYXRlci4gVXNlIGxvd2VyIDE4IGJpdHMuCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBCQ0ggZW5jb2RlZCB2ZXJzaW9uIGluZm9ybWF0aW9uIHBhdHRlcm4KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFZlcnNpb25QYXR0ZXJuKCR2ZXJzaW9uKSB7CgkJaWYgKCgkdmVyc2lvbiA8IDcpIE9SICgkdmVyc2lvbiA+IFFSU1BFQ19WRVJTSU9OX01BWCkpIHsKCQkJcmV0dXJuIDA7CgkJfQoJCXJldHVybiAkdGhpcy0+dmVyc2lvblBhdHRlcm5bKCR2ZXJzaW9uIC0gNyldOwoJfQoKCS8qKgoJICogUmV0dXJuIEJDSCBlbmNvZGVkIGZvcm1hdCBpbmZvcm1hdGlvbiBwYXR0ZXJuLgoJICogQHBhcmFtICRtYXNrIChhcnJheSkKCSAqIEBwYXJhbSAkbGV2ZWwgKGludCkgZXJyb3IgY29ycmVjdGlvbiBsZXZlbAoJICogQHJldHVybiBCQ0ggZW5jb2RlZCBmb3JtYXQgaW5mb3JtYXRpb24gcGF0dGVybgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Rm9ybWF0SW5mbygkbWFzaywgJGxldmVsKSB7CgkJaWYgKCgkbWFzayA8IDApIE9SICgkbWFzayA+IDcpKSB7CgkJCXJldHVybiAwOwoJCX0KCQlpZiAoKCRsZXZlbCA8IDApIE9SICgkbGV2ZWwgPiAzKSkgewoJCQlyZXR1cm4gMDsKCQl9CgkJcmV0dXJuICR0aGlzLT5mb3JtYXRJbmZvWyRsZXZlbF1bJG1hc2tdOwoJfQoKCS8qKgoJICogUHV0IGEgZmluZGVyIHBhdHRlcm4uCgkgKiBAcGFyYW0gJGZyYW1lIChhcnJheSkgZnJhbWUKCSAqIEBwYXJhbSAkb3ggKGludCkgWCBjZW50ZXIgY29vcmRpbmF0ZSBvZiB0aGUgcGF0dGVybgoJICogQHBhcmFtICRveSAoaW50KSBZIGNlbnRlciBjb29yZGluYXRlIG9mIHRoZSBwYXR0ZXJuCgkgKiBAcmV0dXJuIGFycmF5IGZyYW1lCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBwdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgJG94LCAkb3kpIHsKCQkkZmluZGVyID0gYXJyYXkoCgkJIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiLAoJCSJceGMxXHhjMFx4YzBceGMwXHhjMFx4YzBceGMxIiwKCQkiXHhjMVx4YzBceGMxXHhjMVx4YzFceGMwXHhjMSIsCgkJIlx4YzFceGMwXHhjMVx4YzFceGMxXHhjMFx4YzEiLAoJCSJceGMxXHhjMFx4YzFceGMxXHhjMVx4YzBceGMxIiwKCQkiXHhjMVx4YzBceGMwXHhjMFx4YzBceGMwXHhjMSIsCgkJIlx4YzFceGMxXHhjMVx4YzFceGMxXHhjMVx4YzEiCgkJKTsKCQlmb3IgKCR5PTA7ICR5IDwgNzsgJHkrKykgewoJCQkkZnJhbWUgPSAkdGhpcy0+cXJzdHJzZXQoJGZyYW1lLCAkb3gsICgkb3kgKyAkeSksICRmaW5kZXJbJHldKTsKCQl9CgkJcmV0dXJuICRmcmFtZTsKCX0KCgkvKioKCSAqIFJldHVybiBhIGNvcHkgb2YgaW5pdGlhbGl6ZWQgZnJhbWUuCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBBcnJheSBvZiB1bnNpZ25lZCBjaGFyLgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gY3JlYXRlRnJhbWUoJHZlcnNpb24pIHsKCQkkd2lkdGggPSAkdGhpcy0+Y2FwYWNpdHlbJHZlcnNpb25dW1FSQ0FQX1dJRFRIXTsKCQkkZnJhbWVMaW5lID0gc3RyX3JlcGVhdCAoIlwwIiwgJHdpZHRoKTsKCQkkZnJhbWUgPSBhcnJheV9maWxsKDAsICR3aWR0aCwgJGZyYW1lTGluZSk7CgkJLy8gRmluZGVyIHBhdHRlcm4KCQkkZnJhbWUgPSAkdGhpcy0+cHV0RmluZGVyUGF0dGVybigkZnJhbWUsIDAsIDApOwoJCSRmcmFtZSA9ICR0aGlzLT5wdXRGaW5kZXJQYXR0ZXJuKCRmcmFtZSwgJHdpZHRoIC0gNywgMCk7CgkJJGZyYW1lID0gJHRoaXMtPnB1dEZpbmRlclBhdHRlcm4oJGZyYW1lLCAwLCAkd2lkdGggLSA3KTsKCQkvLyBTZXBhcmF0b3IKCQkkeU9mZnNldCA9ICR3aWR0aCAtIDc7CgkJZm9yICgkeT0wOyAkeSA8IDc7ICsrJHkpIHsKCQkJJGZyYW1lWyR5XVs3XSA9ICJceGMwIjsKCQkJJGZyYW1lWyR5XVskd2lkdGggLSA4XSA9ICJceGMwIjsKCQkJJGZyYW1lWyR5T2Zmc2V0XVs3XSA9ICJceGMwIjsKCQkJKyskeU9mZnNldDsKCQl9CgkJJHNldFBhdHRlcm4gPSBzdHJfcmVwZWF0KCJceGMwIiwgOCk7CgkJJGZyYW1lID0gJHRoaXMtPnFyc3Ryc2V0KCRmcmFtZSwgMCwgNywgJHNldFBhdHRlcm4pOwoJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsICR3aWR0aC04LCA3LCAkc2V0UGF0dGVybik7CgkJJGZyYW1lID0gJHRoaXMtPnFyc3Ryc2V0KCRmcmFtZSwgMCwgJHdpZHRoIC0gOCwgJHNldFBhdHRlcm4pOwoJCS8vIEZvcm1hdCBpbmZvCgkJJHNldFBhdHRlcm4gPSBzdHJfcmVwZWF0KCJceDg0IiwgOSk7CgkJJGZyYW1lID0gJHRoaXMtPnFyc3Ryc2V0KCRmcmFtZSwgMCwgOCwgJHNldFBhdHRlcm4pOwoJCSRmcmFtZSA9ICR0aGlzLT5xcnN0cnNldCgkZnJhbWUsICR3aWR0aCAtIDgsIDgsICRzZXRQYXR0ZXJuLCA4KTsKCQkkeU9mZnNldCA9ICR3aWR0aCAtIDg7CgkJZm9yICgkeT0wOyAkeSA8IDg7ICsrJHksKyskeU9mZnNldCkgewoJCQkkZnJhbWVbJHldWzhdID0gIlx4ODQiOwoJCQkkZnJhbWVbJHlPZmZzZXRdWzhdID0gIlx4ODQiOwoJCX0KCQkvLyBUaW1pbmcgcGF0dGVybgoJCSR3byA9ICR3aWR0aCAtIDE1OwoJCWZvciAoJGk9MTsgJGkgPCAkd287ICsrJGkpIHsKCQkJJGZyYW1lWzZdWzcrJGldID0gY2hyKDB4OTAgfCAoJGkgJiAxKSk7CgkJCSRmcmFtZVs3KyRpXVs2XSA9IGNocigweDkwIHwgKCRpICYgMSkpOwoJCX0KCQkvLyBBbGlnbm1lbnQgcGF0dGVybgoJCSRmcmFtZSA9ICR0aGlzLT5wdXRBbGlnbm1lbnRQYXR0ZXJuKCR2ZXJzaW9uLCAkZnJhbWUsICR3aWR0aCk7CgkJLy8gVmVyc2lvbiBpbmZvcm1hdGlvbgoJCWlmICgkdmVyc2lvbiA+PSA3KSB7CgkJCSR2aW5mID0gJHRoaXMtPmdldFZlcnNpb25QYXR0ZXJuKCR2ZXJzaW9uKTsKCQkJJHYgPSAkdmluZjsKCQkJZm9yICgkeD0wOyAkeDw2OyArKyR4KSB7CgkJCQlmb3IgKCR5PTA7ICR5PDM7ICsrJHkpIHsKCQkJCQkkZnJhbWVbKCR3aWR0aCAtIDExKSskeV1bJHhdID0gY2hyKDB4ODggfCAoJHYgJiAxKSk7CgkJCQkJJHYgPSAkdiA+PiAxOwoJCQkJfQoJCQl9CgkJCSR2ID0gJHZpbmY7CgkJCWZvciAoJHk9MDsgJHk8NjsgKyskeSkgewoJCQkJZm9yICgkeD0wOyAkeDwzOyArKyR4KSB7CgkJCQkJJGZyYW1lWyR5XVskeCsoJHdpZHRoIC0gMTEpXSA9IGNocigweDg4IHwgKCR2ICYgMSkpOwoJCQkJCSR2ID0gJHYgPj4gMTsKCQkJCX0KCQkJfQoJCX0KCQkvLyBhbmQgYSBsaXR0bGUgYml0Li4uCgkJJGZyYW1lWyR3aWR0aCAtIDhdWzhdID0gIlx4ODEiOwoJCXJldHVybiAkZnJhbWU7Cgl9CgoJLyoqCgkgKiBTZXQgbmV3IGZyYW1lIGZvciB0aGUgc3BlY2lmaWVkIHZlcnNpb24uCgkgKiBAcGFyYW0gJHZlcnNpb24gKGludCkgdmVyc2lvbgoJICogQHJldHVybiBBcnJheSBvZiB1bnNpZ25lZCBjaGFyLgoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gbmV3RnJhbWUoJHZlcnNpb24pIHsKCQlpZiAoKCR2ZXJzaW9uIDwgMSkgT1IgKCR2ZXJzaW9uID4gUVJTUEVDX1ZFUlNJT05fTUFYKSkgewoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXSkpIHsKCQkJJHRoaXMtPmZyYW1lc1skdmVyc2lvbl0gPSAkdGhpcy0+Y3JlYXRlRnJhbWUoJHZlcnNpb24pOwoJCX0KCQlpZiAoaXNfbnVsbCgkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXSkpIHsKCQkJcmV0dXJuIE5VTEw7CgkJfQoJCXJldHVybiAkdGhpcy0+ZnJhbWVzWyR2ZXJzaW9uXTsKCX0KCgkvKioKCSAqIFJldHVybiBibG9jayBudW1iZXIgMAoJICogQHBhcmFtICRzcGVjIChhcnJheSkKCSAqIEByZXR1cm4gaW50IHZhbHVlCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNCbG9ja051bSgkc3BlYykgewoJCXJldHVybiAoJHNwZWNbMF0gKyAkc3BlY1szXSk7Cgl9CgoJLyoqCgkqIFJldHVybiBibG9jayBudW1iZXIgMQoJICogQHBhcmFtICRzcGVjIChhcnJheSkKCSAqIEByZXR1cm4gaW50IHZhbHVlCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNCbG9ja051bTEoJHNwZWMpIHsKCQlyZXR1cm4gJHNwZWNbMF07Cgl9CgoJLyoqCgkgKiBSZXR1cm4gZGF0YSBjb2RlcyAxCgkgKiBAcGFyYW0gJHNwZWMgKGFycmF5KQoJICogQHJldHVybiBpbnQgdmFsdWUKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiByc0RhdGFDb2RlczEoJHNwZWMpIHsKCQlyZXR1cm4gJHNwZWNbMV07Cgl9CgoJLyoqCgkgKiBSZXR1cm4gZWNjIGNvZGVzIDEKCSAqIEBwYXJhbSAkc3BlYyAoYXJyYXkpCgkgKiBAcmV0dXJuIGludCB2YWx1ZQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIHJzRWNjQ29kZXMxKCRzcGVjKSB7CgkJcmV0dXJuICRzcGVjWzJdOwoJfQoKCS8qKgoJICogUmV0dXJuIGJsb2NrIG51bWJlciAyCgkgKiBAcGFyYW0gJHNwZWMgKGFycmF5KQoJICogQHJldHVybiBpbnQgdmFsdWUKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiByc0Jsb2NrTnVtMigkc3BlYykgewoJCXJldHVybiAkc3BlY1szXTsKCX0KCgkvKioKCSAqIFJldHVybiBkYXRhIGNvZGVzIDIKCSAqIEBwYXJhbSAkc3BlYyAoYXJyYXkpCgkgKiBAcmV0dXJuIGludCB2YWx1ZQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIHJzRGF0YUNvZGVzMigkc3BlYykgewoJCXJldHVybiAkc3BlY1s0XTsKCX0KCgkvKioKCSAqIFJldHVybiBlY2MgY29kZXMgMgoJICogQHBhcmFtICRzcGVjIChhcnJheSkKCSAqIEByZXR1cm4gaW50IHZhbHVlCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNFY2NDb2RlczIoJHNwZWMpIHsKCQlyZXR1cm4gJHNwZWNbMl07Cgl9CgoJLyoqCgkgKiBSZXR1cm4gZGF0YSBsZW5ndGgKCSAqIEBwYXJhbSAkc3BlYyAoYXJyYXkpCgkgKiBAcmV0dXJuIGludCB2YWx1ZQoJICovCgkgcHJvdGVjdGVkIGZ1bmN0aW9uIHJzRGF0YUxlbmd0aCgkc3BlYykgewoJCXJldHVybiAoJHNwZWNbMF0gKiAkc3BlY1sxXSkgKyAoJHNwZWNbM10gKiAkc3BlY1s0XSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gZWNjIGxlbmd0aAoJICogQHBhcmFtICRzcGVjIChhcnJheSkKCSAqIEByZXR1cm4gaW50IHZhbHVlCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gcnNFY2NMZW5ndGgoJHNwZWMpIHsKCQlyZXR1cm4gKCRzcGVjWzBdICsgJHNwZWNbM10pICogJHNwZWNbMl07Cgl9CgoJLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8vIFFScnMKCgkvKioKCSAqIEluaXRpYWxpemUgYSBSZWVkLVNvbG9tb24gY29kZWMgYW5kIGFkZCBpdCB0byBleGlzdGluZyByc2l0ZW1zCgkgKiBAcGFyYW0gJHN5bXNpemUgKGludCkgc3ltYm9sIHNpemUsIGJpdHMKCSAqIEBwYXJhbSAkZ2Zwb2x5IChpbnQpICBGaWVsZCBnZW5lcmF0b3IgcG9seW5vbWlhbCBjb2VmZmljaWVudHMKCSAqIEBwYXJhbSAkZmNyIChpbnQpICBmaXJzdCByb290IG9mIFJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwsIGluZGV4IGZvcm0KCSAqIEBwYXJhbSAkcHJpbSAoaW50KSAgcHJpbWl0aXZlIGVsZW1lbnQgdG8gZ2VuZXJhdGUgcG9seW5vbWlhbCByb290cwoJICogQHBhcmFtICRucm9vdHMgKGludCkgUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBkZWdyZWUgKG51bWJlciBvZiByb290cykKCSAqIEBwYXJhbSAkcGFkIChpbnQpICBwYWRkaW5nIGJ5dGVzIGF0IGZyb250IG9mIHNob3J0ZW5lZCBibG9jawoJICogQHJldHVybiBhcnJheSBBcnJheSBvZiBSUyB2YWx1ZXM6PHVsPjxsaT5tbSA9IEJpdHMgcGVyIHN5bWJvbDs8L2xpPjxsaT5ubiA9IFN5bWJvbHMgcGVyIGJsb2NrOzwvbGk+PGxpPmFscGhhX3RvID0gbG9nIGxvb2t1cCB0YWJsZSBhcnJheTs8L2xpPjxsaT5pbmRleF9vZiA9IEFudGlsb2cgbG9va3VwIHRhYmxlIGFycmF5OzwvbGk+PGxpPmdlbnBvbHkgPSBHZW5lcmF0b3IgcG9seW5vbWlhbCBhcnJheTs8L2xpPjxsaT5ucm9vdHMgPSBOdW1iZXIgb2YgZ2VuZXJhdG9yOzwvbGk+PGxpPnJvb3RzID0gbnVtYmVyIG9mIHBhcml0eSBzeW1ib2xzOzwvbGk+PGxpPmZjciA9IEZpcnN0IGNvbnNlY3V0aXZlIHJvb3QsIGluZGV4IGZvcm07PC9saT48bGk+cHJpbSA9IFByaW1pdGl2ZSBlbGVtZW50LCBpbmRleCBmb3JtOzwvbGk+PGxpPmlwcmltID0gcHJpbS10aCByb290IG9mIDEsIGluZGV4IGZvcm07PC9saT48bGk+cGFkID0gUGFkZGluZyBieXRlcyBpbiBzaG9ydGVuZWQgYmxvY2s7PC9saT48bGk+Z2Zwb2x5PC91bD4uCgkgKi8KCSBwcm90ZWN0ZWQgZnVuY3Rpb24gaW5pdF9ycygkc3ltc2l6ZSwgJGdmcG9seSwgJGZjciwgJHByaW0sICRucm9vdHMsICRwYWQpIHsKCQlmb3JlYWNoICgkdGhpcy0+cnNpdGVtcyBhcyAkcnMpIHsKCQkJaWYgKCgkcnNbJ3BhZCddICE9ICRwYWQpIE9SICgkcnNbJ25yb290cyddICE9ICRucm9vdHMpIE9SICgkcnNbJ21tJ10gIT0gJHN5bXNpemUpCgkJCQlPUiAoJHJzWydnZnBvbHknXSAhPSAkZ2Zwb2x5KSBPUiAoJHJzWydmY3InXSAhPSAkZmNyKSBPUiAoJHJzWydwcmltJ10gIT0gJHByaW0pKSB7CgkJCQljb250aW51ZTsKCQkJfQoJCQlyZXR1cm4gJHJzOwoJCX0KCQkkcnMgPSAkdGhpcy0+aW5pdF9yc19jaGFyKCRzeW1zaXplLCAkZ2Zwb2x5LCAkZmNyLCAkcHJpbSwgJG5yb290cywgJHBhZCk7CgkJYXJyYXlfdW5zaGlmdCgkdGhpcy0+cnNpdGVtcywgJHJzKTsKCQlyZXR1cm4gJHJzOwoJfQoKCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0KCgkvLyBRUnJzSXRlbQoKCS8qKgoJICogbW9kbm4KCSAqIEBwYXJhbSAkcnMgKGFycmF5KSBSUyB2YWx1ZXMKCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uCgkgKiBAcmV0dXJuIGludCBYIG9zaXRpb24KCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBtb2RubigkcnMsICR4KSB7CgkJd2hpbGUgKCR4ID49ICRyc1snbm4nXSkgewoJCQkkeCAtPSAkcnNbJ25uJ107CgkJCSR4ID0gKCR4ID4+ICRyc1snbW0nXSkgKyAoJHggJiAkcnNbJ25uJ10pOwoJCX0KCQlyZXR1cm4gJHg7Cgl9CgoJLyoqCgkgKiBJbml0aWFsaXplIGEgUmVlZC1Tb2xvbW9uIGNvZGVjIGFuZCByZXR1cm5zIGFuIGFycmF5IG9mIHZhbHVlcy4KCSAqIEBwYXJhbSAkc3ltc2l6ZSAoaW50KSBzeW1ib2wgc2l6ZSwgYml0cwoJICogQHBhcmFtICRnZnBvbHkgKGludCkgIEZpZWxkIGdlbmVyYXRvciBwb2x5bm9taWFsIGNvZWZmaWNpZW50cwoJICogQHBhcmFtICRmY3IgKGludCkgIGZpcnN0IHJvb3Qgb2YgUlMgY29kZSBnZW5lcmF0b3IgcG9seW5vbWlhbCwgaW5kZXggZm9ybQoJICogQHBhcmFtICRwcmltIChpbnQpICBwcmltaXRpdmUgZWxlbWVudCB0byBnZW5lcmF0ZSBwb2x5bm9taWFsIHJvb3RzCgkgKiBAcGFyYW0gJG5yb290cyAoaW50KSBSUyBjb2RlIGdlbmVyYXRvciBwb2x5bm9taWFsIGRlZ3JlZSAobnVtYmVyIG9mIHJvb3RzKQoJICogQHBhcmFtICRwYWQgKGludCkgIHBhZGRpbmcgYnl0ZXMgYXQgZnJvbnQgb2Ygc2hvcnRlbmVkIGJsb2NrCgkgKiBAcmV0dXJuIGFycmF5IEFycmF5IG9mIFJTIHZhbHVlczo8dWw+PGxpPm1tID0gQml0cyBwZXIgc3ltYm9sOzwvbGk+PGxpPm5uID0gU3ltYm9scyBwZXIgYmxvY2s7PC9saT48bGk+YWxwaGFfdG8gPSBsb2cgbG9va3VwIHRhYmxlIGFycmF5OzwvbGk+PGxpPmluZGV4X29mID0gQW50aWxvZyBsb29rdXAgdGFibGUgYXJyYXk7PC9saT48bGk+Z2VucG9seSA9IEdlbmVyYXRvciBwb2x5bm9taWFsIGFycmF5OzwvbGk+PGxpPm5yb290cyA9IE51bWJlciBvZiBnZW5lcmF0b3I7PC9saT48bGk+cm9vdHMgPSBudW1iZXIgb2YgcGFyaXR5IHN5bWJvbHM7PC9saT48bGk+ZmNyID0gRmlyc3QgY29uc2VjdXRpdmUgcm9vdCwgaW5kZXggZm9ybTs8L2xpPjxsaT5wcmltID0gUHJpbWl0aXZlIGVsZW1lbnQsIGluZGV4IGZvcm07PC9saT48bGk+aXByaW0gPSBwcmltLXRoIHJvb3Qgb2YgMSwgaW5kZXggZm9ybTs8L2xpPjxsaT5wYWQgPSBQYWRkaW5nIGJ5dGVzIGluIHNob3J0ZW5lZCBibG9jazs8L2xpPjxsaT5nZnBvbHk8L3VsPi4KCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGluaXRfcnNfY2hhcigkc3ltc2l6ZSwgJGdmcG9seSwgJGZjciwgJHByaW0sICRucm9vdHMsICRwYWQpIHsKCQkvLyBCYXNlZCBvbiBSZWVkIHNvbG9tb24gZW5jb2RlciBieSBQaGlsIEthcm4sIEtBOVEgKEdOVS1MR1BMdjIpCgkJJHJzID0gbnVsbDsKCQkvLyBDaGVjayBwYXJhbWV0ZXIgcmFuZ2VzCgkJaWYgKCgkc3ltc2l6ZSA8IDApIE9SICgkc3ltc2l6ZSA+IDgpKSB7CgkJCXJldHVybiAkcnM7CgkJfQoJCWlmICgoJGZjciA8IDApIE9SICgkZmNyID49ICgxPDwkc3ltc2l6ZSkpKSB7CgkJCXJldHVybiAkcnM7CgkJfQoJCWlmICgoJHByaW0gPD0gMCkgT1IgKCRwcmltID49ICgxPDwkc3ltc2l6ZSkpKSB7CgkJCXJldHVybiAkcnM7CgkJfQoJCWlmICgoJG5yb290cyA8IDApIE9SICgkbnJvb3RzID49ICgxPDwkc3ltc2l6ZSkpKSB7CgkJCXJldHVybiAkcnM7CgkJfQoJCWlmICgoJHBhZCA8IDApIE9SICgkcGFkID49ICgoMTw8JHN5bXNpemUpIC0xIC0gJG5yb290cykpKSB7CgkJCXJldHVybiAkcnM7CgkJfQoJCSRycyA9IGFycmF5KCk7CgkJJHJzWydtbSddID0gJHN5bXNpemU7CgkJJHJzWydubiddID0gKDEgPDwgJHN5bXNpemUpIC0gMTsKCQkkcnNbJ3BhZCddID0gJHBhZDsKCQkkcnNbJ2FscGhhX3RvJ10gPSBhcnJheV9maWxsKDAsICgkcnNbJ25uJ10gKyAxKSwgMCk7CgkJJHJzWydpbmRleF9vZiddID0gYXJyYXlfZmlsbCgwLCAoJHJzWydubiddICsgMSksIDApOwoJCS8vIFBIUCBzdHlsZSBtYWNybyByZXBsYWNlbWVudCA7KQoJCSROTiA9JiAkcnNbJ25uJ107CgkJJEEwID0mICROTjsKCQkvLyBHZW5lcmF0ZSBHYWxvaXMgZmllbGQgbG9va3VwIHRhYmxlcwoJCSRyc1snaW5kZXhfb2YnXVswXSA9ICRBMDsgLy8gbG9nKHplcm8pID0gLWluZgoJCSRyc1snYWxwaGFfdG8nXVskQTBdID0gMDsgLy8gYWxwaGEqKi1pbmYgPSAwCgkJJHNyID0gMTsKCQlmb3IgKCRpPTA7ICRpPCRyc1snbm4nXTsgKyskaSkgewoJCQkkcnNbJ2luZGV4X29mJ11bJHNyXSA9ICRpOwoJCQkkcnNbJ2FscGhhX3RvJ11bJGldID0gJHNyOwoJCQkkc3IgPDw9IDE7CgkJCWlmICgkc3IgJiAoMSA8PCAkc3ltc2l6ZSkpIHsKCQkJCSRzciBePSAkZ2Zwb2x5OwoJCQl9CgkJCSRzciAmPSAkcnNbJ25uJ107CgkJfQoJCWlmICgkc3IgIT0gMSkgewoJCQkvLyBmaWVsZCBnZW5lcmF0b3IgcG9seW5vbWlhbCBpcyBub3QgcHJpbWl0aXZlIQoJCQlyZXR1cm4gTlVMTDsKCQl9CgkJLy8gRm9ybSBSUyBjb2RlIGdlbmVyYXRvciBwb2x5bm9taWFsIGZyb20gaXRzIHJvb3RzCgkJJHJzWydnZW5wb2x5J10gPSBhcnJheV9maWxsKDAsICgkbnJvb3RzICsgMSksIDApOwoJCSRyc1snZmNyJ10gPSAkZmNyOwoJCSRyc1sncHJpbSddID0gJHByaW07CgkJJHJzWyducm9vdHMnXSA9ICRucm9vdHM7CgkJJHJzWydnZnBvbHknXSA9ICRnZnBvbHk7CgkJLy8gRmluZCBwcmltLXRoIHJvb3Qgb2YgMSwgdXNlZCBpbiBkZWNvZGluZwoJCWZvciAoJGlwcmltPTE7ICgkaXByaW0gJSAkcHJpbSkgIT0gMDsgJGlwcmltICs9ICRyc1snbm4nXSkgewoJCQk7IC8vIGludGVudGlvbmFsIGVtcHR5LWJvZHkgbG9vcCEKCQl9CgkJJHJzWydpcHJpbSddID0gKGludCkoJGlwcmltIC8gJHByaW0pOwoJCSRyc1snZ2VucG9seSddWzBdID0gMTsKCQlmb3IgKCRpID0gMCwkcm9vdD0kZmNyKiRwcmltOyAkaSA8ICRucm9vdHM7ICRpKyssICRyb290ICs9ICRwcmltKSB7CgkJCSRyc1snZ2VucG9seSddWyRpKzFdID0gMTsKCQkJLy8gTXVsdGlwbHkgcnMtPmdlbnBvbHlbXSBieSAgQCoqKHJvb3QgKyB4KQoJCQlmb3IgKCRqID0gJGk7ICRqID4gMDsgLS0kaikgewoJCQkJaWYgKCRyc1snZ2VucG9seSddWyRqXSAhPSAwKSB7CgkJCQkJJHJzWydnZW5wb2x5J11bJGpdID0gJHJzWydnZW5wb2x5J11bJGotMV0gXiAkcnNbJ2FscGhhX3RvJ11bJHRoaXMtPm1vZG5uKCRycywgJHJzWydpbmRleF9vZiddWyRyc1snZ2VucG9seSddWyRqXV0gKyAkcm9vdCldOwoJCQkJfSBlbHNlIHsKCQkJCQkkcnNbJ2dlbnBvbHknXVskal0gPSAkcnNbJ2dlbnBvbHknXVskai0xXTsKCQkJCX0KCQkJfQoJCQkvLyBycy0+Z2VucG9seVswXSBjYW4gbmV2ZXIgYmUgemVybwoJCQkkcnNbJ2dlbnBvbHknXVswXSA9ICRyc1snYWxwaGFfdG8nXVskdGhpcy0+bW9kbm4oJHJzLCAkcnNbJ2luZGV4X29mJ11bJHJzWydnZW5wb2x5J11bMF1dICsgJHJvb3QpXTsKCQl9CgkJLy8gY29udmVydCBycy0+Z2VucG9seVtdIHRvIGluZGV4IGZvcm0gZm9yIHF1aWNrZXIgZW5jb2RpbmcKCQlmb3IgKCRpID0gMDsgJGkgPD0gJG5yb290czsgKyskaSkgewoJCQkkcnNbJ2dlbnBvbHknXVskaV0gPSAkcnNbJ2luZGV4X29mJ11bJHJzWydnZW5wb2x5J11bJGldXTsKCQl9CgkJcmV0dXJuICRyczsKCX0KCgkvKioKCSAqIEVuY29kZSBhIFJlZWQtU29sb21vbiBjb2RlYyBhbmQgcmV0dXJucyB0aGUgcGFyaXR5IGFycmF5CgkgKiBAcGFyYW0gJHJzIChhcnJheSkgUlMgdmFsdWVzCgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KSBkYXRhCgkgKiBAcGFyYW0gJHBhcml0eSAoYXJyYXkpIHBhcml0eQoJICogQHJldHVybiBwYXJpdHkgYXJyYXkKCSAqLwoJIHByb3RlY3RlZCBmdW5jdGlvbiBlbmNvZGVfcnNfY2hhcigkcnMsICRkYXRhLCAkcGFyaXR5KSB7CgkJJE1NICAgICAgID0mICRyc1snbW0nXTsgLy8gYml0cyBwZXIgc3ltYm9sCgkJJE5OICAgICAgID0mICRyc1snbm4nXTsgLy8gdGhlIHRvdGFsIG51bWJlciBvZiBzeW1ib2xzIGluIGEgUlMgYmxvY2sKCQkkQUxQSEFfVE8gPSYgJHJzWydhbHBoYV90byddOyAvLyB0aGUgYWRkcmVzcyBvZiBhbiBhcnJheSBvZiBOTiBlbGVtZW50cyB0byBjb252ZXJ0IEdhbG9pcyBmaWVsZCBlbGVtZW50cyBpbiBpbmRleCAobG9nKSBmb3JtIHRvIHBvbHlub21pYWwgZm9ybQoJCSRJTkRFWF9PRiA9JiAkcnNbJ2luZGV4X29mJ107IC8vIHRoZSBhZGRyZXNzIG9mIGFuIGFycmF5IG9mIE5OIGVsZW1lbnRzIHRvIGNvbnZlcnQgR2Fsb2lzIGZpZWxkIGVsZW1lbnRzIGluIHBvbHlub21pYWwgZm9ybSB0byBpbmRleCAobG9nKSBmb3JtCgkJJEdFTlBPTFkgID0mICRyc1snZ2VucG9seSddOyAvLyBhbiBhcnJheSBvZiBOUk9PVFMrMSBlbGVtZW50cyBjb250YWluaW5nIHRoZSBnZW5lcmF0b3IgcG9seW5vbWlhbCBpbiBpbmRleCBmb3JtCgkJJE5ST09UUyAgID0mICRyc1snbnJvb3RzJ107IC8vIHRoZSBudW1iZXIgb2Ygcm9vdHMgaW4gdGhlIFJTIGNvZGUgZ2VuZXJhdG9yIHBvbHlub21pYWwsIHdoaWNoIGlzIHRoZSBzYW1lIGFzIHRoZSBudW1iZXIgb2YgcGFyaXR5IHN5bWJvbHMgaW4gYSBibG9jawoJCSRGQ1IgICAgICA9JiAkcnNbJ2ZjciddOyAvLyBmaXJzdCBjb25zZWN1dGl2ZSByb290LCBpbmRleCBmb3JtCgkJJFBSSU0gICAgID0mICRyc1sncHJpbSddOyAvLyBwcmltaXRpdmUgZWxlbWVudCwgaW5kZXggZm9ybQoJCSRJUFJJTSAgICA9JiAkcnNbJ2lwcmltJ107IC8vIHByaW0tdGggcm9vdCBvZiAxLCBpbmRleCBmb3JtCgkJJFBBRCAgICAgID0mICRyc1sncGFkJ107IC8vIHRoZSBudW1iZXIgb2YgcGFkIHN5bWJvbHMgaW4gYSBibG9jawoJCSRBMCAgICAgICA9JiAkTk47CgkJJHBhcml0eSA9IGFycmF5X2ZpbGwoMCwgJE5ST09UUywgMCk7CgkJZm9yICgkaT0wOyAkaSA8ICgkTk4gLSAkTlJPT1RTIC0gJFBBRCk7ICRpKyspIHsKCQkJJGZlZWRiYWNrID0gJElOREVYX09GWyRkYXRhWyRpXSBeICRwYXJpdHlbMF1dOwoJCQlpZiAoJGZlZWRiYWNrICE9ICRBMCkgewoJCQkJLy8gZmVlZGJhY2sgdGVybSBpcyBub24temVybwoJCQkJLy8gVGhpcyBsaW5lIGlzIHVubmVjZXNzYXJ5IHdoZW4gR0VOUE9MWVtOUk9PVFNdIGlzIHVuaXR5LCBhcyBpdCBtdXN0CgkJCQkvLyBhbHdheXMgYmUgZm9yIHRoZSBwb2x5bm9taWFscyBjb25zdHJ1Y3RlZCBieSBpbml0X3JzKCkKCQkJCSRmZWVkYmFjayA9ICR0aGlzLT5tb2RubigkcnMsICROTiAtICRHRU5QT0xZWyROUk9PVFNdICsgJGZlZWRiYWNrKTsKCQkJCWZvciAoJGo9MTsgJGogPCAkTlJPT1RTOyArKyRqKSB7CgkJCQkkcGFyaXR5WyRqXSBePSAkQUxQSEFfVE9bJHRoaXMtPm1vZG5uKCRycywgJGZlZWRiYWNrICsgJEdFTlBPTFlbKCROUk9PVFMgLSAkaildKV07CgkJCQl9CgkJCX0KCQkJLy8gU2hpZnQKCQkJYXJyYXlfc2hpZnQoJHBhcml0eSk7CgkJCWlmICgkZmVlZGJhY2sgIT0gJEEwKSB7CgkJCQlhcnJheV9wdXNoKCRwYXJpdHksICRBTFBIQV9UT1skdGhpcy0+bW9kbm4oJHJzLCAkZmVlZGJhY2sgKyAkR0VOUE9MWVswXSldKTsKCQkJfSBlbHNlIHsKCQkJCWFycmF5X3B1c2goJHBhcml0eSwgMCk7CgkJCX0KCQl9CgkJcmV0dXJuICRwYXJpdHk7Cgl9Cgp9IC8vIGVuZCBRUmNvZGUgY2xhc3MKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/sRGB.icc</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[AAAL6AAAAAACAAAAbW50clJHQiBYWVogB9kAAwAbABUAJAAfYWNzcAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAPbWAAEAAAAA0y0AAAAAKfg93q/yVa54QvrkyoM5DQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQZGVzYwAAAUQAAAB5YlhZWgAAAcAAAAAUYlRSQwAAAdQAAAgMZG1kZAAACeAAAACIZ1hZWgAACmgAAAAUZ1RSQwAAAdQAAAgMbHVtaQAACnwAAAAUbWVhcwAACpAAAAAkYmtwdAAACrQAAAAUclhZWgAACsgAAAAUclRSQwAAAdQAAAgMdGVjaAAACtwAAAAMdnVlZAAACugAAACHd3RwdAAAC3AAAAAUY3BydAAAC4QAAAA3Y2hhZAAAC7wAAAAsZGVzYwAAAAAAAAAfc1JHQiBJRUM2MTk2Ni0yLTEgYmxhY2sgc2NhbGVkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFhZWiAAAAAAAAAkoAAAD4QAALbPY3VydgAAAAAAAAQAAAAABQAKAA8AFAAZAB4AIwAoAC0AMgA3ADsAQABFAEoATwBUAFkAXgBjAGgAbQByAHcAfACBAIYAiwCQAJUAmgCfAKQAqQCuALIAtwC8AMEAxgDLANAA1QDbAOAA5QDrAPAA9gD7AQEBBwENARMBGQEfASUBKwEyATgBPgFFAUwBUgFZAWABZwFuAXUBfAGDAYsBkgGaAaEBqQGxAbkBwQHJAdEB2QHhAekB8gH6AgMCDAIUAh0CJgIvAjgCQQJLAlQCXQJnAnECegKEAo4CmAKiAqwCtgLBAssC1QLgAusC9QMAAwsDFgMhAy0DOANDA08DWgNmA3IDfgOKA5YDogOuA7oDxwPTA+AD7AP5BAYEEwQgBC0EOwRIBFUEYwRxBH4EjASaBKgEtgTEBNME4QTwBP4FDQUcBSsFOgVJBVgFZwV3BYYFlgWmBbUFxQXVBeUF9gYGBhYGJwY3BkgGWQZqBnsGjAadBq8GwAbRBuMG9QcHBxkHKwc9B08HYQd0B4YHmQesB78H0gflB/gICwgfCDIIRghaCG4IggiWCKoIvgjSCOcI+wkQCSUJOglPCWQJeQmPCaQJugnPCeUJ+woRCicKPQpUCmoKgQqYCq4KxQrcCvMLCwsiCzkLUQtpC4ALmAuwC8gL4Qv5DBIMKgxDDFwMdQyODKcMwAzZDPMNDQ0mDUANWg10DY4NqQ3DDd4N+A4TDi4OSQ5kDn8Omw62DtIO7g8JDyUPQQ9eD3oPlg+zD88P7BAJECYQQxBhEH4QmxC5ENcQ9RETETERTxFtEYwRqhHJEegSBxImEkUSZBKEEqMSwxLjEwMTIxNDE2MTgxOkE8UT5RQGFCcUSRRqFIsUrRTOFPAVEhU0FVYVeBWbFb0V4BYDFiYWSRZsFo8WshbWFvoXHRdBF2UXiReuF9IX9xgbGEAYZRiKGK8Y1Rj6GSAZRRlrGZEZtxndGgQaKhpRGncanhrFGuwbFBs7G2MbihuyG9ocAhwqHFIcexyjHMwc9R0eHUcdcB2ZHcMd7B4WHkAeah6UHr4e6R8THz4faR+UH78f6iAVIEEgbCCYIMQg8CEcIUghdSGhIc4h+yInIlUigiKvIt0jCiM4I2YjlCPCI/AkHyRNJHwkqyTaJQklOCVoJZclxyX3JicmVyaHJrcm6CcYJ0kneierJ9woDSg/KHEooijUKQYpOClrKZ0p0CoCKjUqaCqbKs8rAis2K2krnSvRLAUsOSxuLKIs1y0MLUEtdi2rLeEuFi5MLoIuty7uLyQvWi+RL8cv/jA1MGwwpDDbMRIxSjGCMbox8jIqMmMymzLUMw0zRjN/M7gz8TQrNGU0njTYNRM1TTWHNcI1/TY3NnI2rjbpNyQ3YDecN9c4FDhQOIw4yDkFOUI5fzm8Ofk6Njp0OrI67zstO2s7qjvoPCc8ZTykPOM9Ij1hPaE94D4gPmA+oD7gPyE/YT+iP+JAI0BkQKZA50EpQWpBrEHuQjBCckK1QvdDOkN9Q8BEA0RHRIpEzkUSRVVFmkXeRiJGZ0arRvBHNUd7R8BIBUhLSJFI10kdSWNJqUnwSjdKfUrESwxLU0uaS+JMKkxyTLpNAk1KTZNN3E4lTm5Ot08AT0lPk0/dUCdQcVC7UQZRUFGbUeZSMVJ8UsdTE1NfU6pT9lRCVI9U21UoVXVVwlYPVlxWqVb3V0RXklfgWC9YfVjLWRpZaVm4WgdaVlqmWvVbRVuVW+VcNVyGXNZdJ114XcleGl5sXr1fD19hX7NgBWBXYKpg/GFPYaJh9WJJYpxi8GNDY5dj62RAZJRk6WU9ZZJl52Y9ZpJm6Gc9Z5Nn6Wg/aJZo7GlDaZpp8WpIap9q92tPa6dr/2xXbK9tCG1gbbluEm5rbsRvHm94b9FwK3CGcOBxOnGVcfByS3KmcwFzXXO4dBR0cHTMdSh1hXXhdj52m3b4d1Z3s3gReG54zHkqeYl553pGeqV7BHtje8J8IXyBfOF9QX2hfgF+Yn7CfyN/hH/lgEeAqIEKgWuBzYIwgpKC9INXg7qEHYSAhOOFR4Wrhg6GcobXhzuHn4gEiGmIzokziZmJ/opkisqLMIuWi/yMY4zKjTGNmI3/jmaOzo82j56QBpBukNaRP5GokhGSepLjk02TtpQglIqU9JVflcmWNJaflwqXdZfgmEyYuJkkmZCZ/JpomtWbQpuvnByciZz3nWSd0p5Anq6fHZ+Ln/qgaaDYoUehtqImopajBqN2o+akVqTHpTilqaYapoum/adup+CoUqjEqTepqaocqo+rAqt1q+msXKzQrUStuK4trqGvFq+LsACwdbDqsWCx1rJLssKzOLOutCW0nLUTtYq2AbZ5tvC3aLfguFm40blKucK6O7q1uy67p7whvJu9Fb2Pvgq+hL7/v3q/9cBwwOzBZ8Hjwl/C28NYw9TEUcTOxUvFyMZGxsPHQce/yD3IvMk6ybnKOMq3yzbLtsw1zLXNNc21zjbOts83z7jQOdC60TzRvtI/0sHTRNPG1EnUy9VO1dHWVdbY11zX4Nhk2OjZbNnx2nba+9uA3AXcit0Q3ZbeHN6i3ynfr+A24L3hROHM4lPi2+Nj4+vkc+T85YTmDeaW5x/nqegy6LzpRunQ6lvq5etw6/vshu0R7ZzuKO6070DvzPBY8OXxcvH/8ozzGfOn9DT0wvVQ9d72bfb794r4Gfio+Tj5x/pX+uf7d/wH/Jj9Kf26/kv+3P9t//9kZXNjAAAAAAAAAC5JRUMgNjE5NjYtMi0xIERlZmF1bHQgUkdCIENvbG91ciBTcGFjZSAtIHNSR0IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAGKZAAC3hQAAGNpYWVogAAAAAAAAAAAAUAAAAAAAAG1lYXMAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlhZWiAAAAAAAAADFgAAAzMAAAKkWFlaIAAAAAAAAG+iAAA49QAAA5BzaWcgAAAAAENSVCBkZXNjAAAAAAAAAC1SZWZlcmVuY2UgVmlld2luZyBDb25kaXRpb24gaW4gSUVDIDYxOTY2LTItMQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWFlaIAAAAAAAAPbWAAEAAAAA0y10ZXh0AAAAAENvcHlyaWdodCBJbnRlcm5hdGlvbmFsIENvbG9yIENvbnNvcnRpdW0sIDIwMDkAAHNmMzIAAAAAAAEMRAAABd////MmAAAHlAAA/Y////uh///9ogAAA9sAAMB1]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_colors.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfY29sb3JzLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDQKLy8gQmVnaW4gICAgICAgOiAyMDAyLTA0LTA5Ci8vIExhc3QgVXBkYXRlIDogMjAxNC0wNC0yNQovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzICBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQKLy8KLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVENQREYgc29mdHdhcmUgbGlicmFyeS4KLy8KLy8gVENQREYgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAovLyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwovLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKLy8gTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8KLy8gVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgovLyBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRGVzY3JpcHRpb24gOiBBcnJheSBvZiBXRUIgc2FmZSBjb2xvcnMKLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogUEhQIGNvbG9yIGNsYXNzIGZvciBUQ1BERgogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKi8KCi8qKgogKiBAY2xhc3MgVENQREZfQ09MT1JTCiAqIFBIUCBjb2xvciBjbGFzcyBmb3IgVENQREYKICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQHZlcnNpb24gMS4wLjAwNAogKiBAYXV0aG9yIE5pY29sYSBBc3VuaSAtIGluZm9AdGVjbmljay5jb20KICovCmNsYXNzIFRDUERGX0NPTE9SUyB7CgoJLyoqCgkgKiBBcnJheSBvZiBXRUIgc2FmZSBjb2xvcnMKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgJHdlYmNvbG9yID0gYXJyYXkgKAoJCSdhbGljZWJsdWUnID0+ICdmMGY4ZmYnLAoJCSdhbnRpcXVld2hpdGUnID0+ICdmYWViZDcnLAoJCSdhcXVhJyA9PiAnMDBmZmZmJywKCQknYXF1YW1hcmluZScgPT4gJzdmZmZkNCcsCgkJJ2F6dXJlJyA9PiAnZjBmZmZmJywKCQknYmVpZ2UnID0+ICdmNWY1ZGMnLAoJCSdiaXNxdWUnID0+ICdmZmU0YzQnLAoJCSdibGFjaycgPT4gJzAwMDAwMCcsCgkJJ2JsYW5jaGVkYWxtb25kJyA9PiAnZmZlYmNkJywKCQknYmx1ZScgPT4gJzAwMDBmZicsCgkJJ2JsdWV2aW9sZXQnID0+ICc4YTJiZTInLAoJCSdicm93bicgPT4gJ2E1MmEyYScsCgkJJ2J1cmx5d29vZCcgPT4gJ2RlYjg4NycsCgkJJ2NhZGV0Ymx1ZScgPT4gJzVmOWVhMCcsCgkJJ2NoYXJ0cmV1c2UnID0+ICc3ZmZmMDAnLAoJCSdjaG9jb2xhdGUnID0+ICdkMjY5MWUnLAoJCSdjb3JhbCcgPT4gJ2ZmN2Y1MCcsCgkJJ2Nvcm5mbG93ZXJibHVlJyA9PiAnNjQ5NWVkJywKCQknY29ybnNpbGsnID0+ICdmZmY4ZGMnLAoJCSdjcmltc29uJyA9PiAnZGMxNDNjJywKCQknY3lhbicgPT4gJzAwZmZmZicsCgkJJ2RhcmtibHVlJyA9PiAnMDAwMDhiJywKCQknZGFya2N5YW4nID0+ICcwMDhiOGInLAoJCSdkYXJrZ29sZGVucm9kJyA9PiAnYjg4NjBiJywKCQknZGtncmF5JyA9PiAnYTlhOWE5JywKCQknZGFya2dyYXknID0+ICdhOWE5YTknLAoJCSdkYXJrZ3JleScgPT4gJ2E5YTlhOScsCgkJJ2RhcmtncmVlbicgPT4gJzAwNjQwMCcsCgkJJ2RhcmtraGFraScgPT4gJ2JkYjc2YicsCgkJJ2RhcmttYWdlbnRhJyA9PiAnOGIwMDhiJywKCQknZGFya29saXZlZ3JlZW4nID0+ICc1NTZiMmYnLAoJCSdkYXJrb3JhbmdlJyA9PiAnZmY4YzAwJywKCQknZGFya29yY2hpZCcgPT4gJzk5MzJjYycsCgkJJ2RhcmtyZWQnID0+ICc4YjAwMDAnLAoJCSdkYXJrc2FsbW9uJyA9PiAnZTk5NjdhJywKCQknZGFya3NlYWdyZWVuJyA9PiAnOGZiYzhmJywKCQknZGFya3NsYXRlYmx1ZScgPT4gJzQ4M2Q4YicsCgkJJ2RhcmtzbGF0ZWdyYXknID0+ICcyZjRmNGYnLAoJCSdkYXJrc2xhdGVncmV5JyA9PiAnMmY0ZjRmJywKCQknZGFya3R1cnF1b2lzZScgPT4gJzAwY2VkMScsCgkJJ2Rhcmt2aW9sZXQnID0+ICc5NDAwZDMnLAoJCSdkZWVwcGluaycgPT4gJ2ZmMTQ5MycsCgkJJ2RlZXBza3libHVlJyA9PiAnMDBiZmZmJywKCQknZGltZ3JheScgPT4gJzY5Njk2OScsCgkJJ2RpbWdyZXknID0+ICc2OTY5NjknLAoJCSdkb2RnZXJibHVlJyA9PiAnMWU5MGZmJywKCQknZmlyZWJyaWNrJyA9PiAnYjIyMjIyJywKCQknZmxvcmFsd2hpdGUnID0+ICdmZmZhZjAnLAoJCSdmb3Jlc3RncmVlbicgPT4gJzIyOGIyMicsCgkJJ2Z1Y2hzaWEnID0+ICdmZjAwZmYnLAoJCSdnYWluc2Jvcm8nID0+ICdkY2RjZGMnLAoJCSdnaG9zdHdoaXRlJyA9PiAnZjhmOGZmJywKCQknZ29sZCcgPT4gJ2ZmZDcwMCcsCgkJJ2dvbGRlbnJvZCcgPT4gJ2RhYTUyMCcsCgkJJ2dyYXknID0+ICc4MDgwODAnLAoJCSdncmV5JyA9PiAnODA4MDgwJywKCQknZ3JlZW4nID0+ICcwMDgwMDAnLAoJCSdncmVlbnllbGxvdycgPT4gJ2FkZmYyZicsCgkJJ2hvbmV5ZGV3JyA9PiAnZjBmZmYwJywKCQknaG90cGluaycgPT4gJ2ZmNjliNCcsCgkJJ2luZGlhbnJlZCcgPT4gJ2NkNWM1YycsCgkJJ2luZGlnbycgPT4gJzRiMDA4MicsCgkJJ2l2b3J5JyA9PiAnZmZmZmYwJywKCQkna2hha2knID0+ICdmMGU2OGMnLAoJCSdsYXZlbmRlcicgPT4gJ2U2ZTZmYScsCgkJJ2xhdmVuZGVyYmx1c2gnID0+ICdmZmYwZjUnLAoJCSdsYXduZ3JlZW4nID0+ICc3Y2ZjMDAnLAoJCSdsZW1vbmNoaWZmb24nID0+ICdmZmZhY2QnLAoJCSdsaWdodGJsdWUnID0+ICdhZGQ4ZTYnLAoJCSdsaWdodGNvcmFsJyA9PiAnZjA4MDgwJywKCQknbGlnaHRjeWFuJyA9PiAnZTBmZmZmJywKCQknbGlnaHRnb2xkZW5yb2R5ZWxsb3cnID0+ICdmYWZhZDInLAoJCSdsdGdyYXknID0+ICdkM2QzZDMnLAoJCSdsaWdodGdyYXknID0+ICdkM2QzZDMnLAoJCSdsaWdodGdyZXknID0+ICdkM2QzZDMnLAoJCSdsaWdodGdyZWVuJyA9PiAnOTBlZTkwJywKCQknbGlnaHRwaW5rJyA9PiAnZmZiNmMxJywKCQknbGlnaHRzYWxtb24nID0+ICdmZmEwN2EnLAoJCSdsaWdodHNlYWdyZWVuJyA9PiAnMjBiMmFhJywKCQknbGlnaHRza3libHVlJyA9PiAnODdjZWZhJywKCQknbGlnaHRzbGF0ZWdyYXknID0+ICc3Nzg4OTknLAoJCSdsaWdodHNsYXRlZ3JleScgPT4gJzc3ODg5OScsCgkJJ2xpZ2h0c3RlZWxibHVlJyA9PiAnYjBjNGRlJywKCQknbGlnaHR5ZWxsb3cnID0+ICdmZmZmZTAnLAoJCSdsaW1lJyA9PiAnMDBmZjAwJywKCQknbGltZWdyZWVuJyA9PiAnMzJjZDMyJywKCQknbGluZW4nID0+ICdmYWYwZTYnLAoJCSdtYWdlbnRhJyA9PiAnZmYwMGZmJywKCQknbWFyb29uJyA9PiAnODAwMDAwJywKCQknbWVkaXVtYXF1YW1hcmluZScgPT4gJzY2Y2RhYScsCgkJJ21lZGl1bWJsdWUnID0+ICcwMDAwY2QnLAoJCSdtZWRpdW1vcmNoaWQnID0+ICdiYTU1ZDMnLAoJCSdtZWRpdW1wdXJwbGUnID0+ICc5MzcwZDgnLAoJCSdtZWRpdW1zZWFncmVlbicgPT4gJzNjYjM3MScsCgkJJ21lZGl1bXNsYXRlYmx1ZScgPT4gJzdiNjhlZScsCgkJJ21lZGl1bXNwcmluZ2dyZWVuJyA9PiAnMDBmYTlhJywKCQknbWVkaXVtdHVycXVvaXNlJyA9PiAnNDhkMWNjJywKCQknbWVkaXVtdmlvbGV0cmVkJyA9PiAnYzcxNTg1JywKCQknbWlkbmlnaHRibHVlJyA9PiAnMTkxOTcwJywKCQknbWludGNyZWFtJyA9PiAnZjVmZmZhJywKCQknbWlzdHlyb3NlJyA9PiAnZmZlNGUxJywKCQknbW9jY2FzaW4nID0+ICdmZmU0YjUnLAoJCSduYXZham93aGl0ZScgPT4gJ2ZmZGVhZCcsCgkJJ25hdnknID0+ICcwMDAwODAnLAoJCSdvbGRsYWNlJyA9PiAnZmRmNWU2JywKCQknb2xpdmUnID0+ICc4MDgwMDAnLAoJCSdvbGl2ZWRyYWInID0+ICc2YjhlMjMnLAoJCSdvcmFuZ2UnID0+ICdmZmE1MDAnLAoJCSdvcmFuZ2VyZWQnID0+ICdmZjQ1MDAnLAoJCSdvcmNoaWQnID0+ICdkYTcwZDYnLAoJCSdwYWxlZ29sZGVucm9kJyA9PiAnZWVlOGFhJywKCQkncGFsZWdyZWVuJyA9PiAnOThmYjk4JywKCQkncGFsZXR1cnF1b2lzZScgPT4gJ2FmZWVlZScsCgkJJ3BhbGV2aW9sZXRyZWQnID0+ICdkODcwOTMnLAoJCSdwYXBheWF3aGlwJyA9PiAnZmZlZmQ1JywKCQkncGVhY2hwdWZmJyA9PiAnZmZkYWI5JywKCQkncGVydScgPT4gJ2NkODUzZicsCgkJJ3BpbmsnID0+ICdmZmMwY2InLAoJCSdwbHVtJyA9PiAnZGRhMGRkJywKCQkncG93ZGVyYmx1ZScgPT4gJ2IwZTBlNicsCgkJJ3B1cnBsZScgPT4gJzgwMDA4MCcsCgkJJ3JlZCcgPT4gJ2ZmMDAwMCcsCgkJJ3Jvc3licm93bicgPT4gJ2JjOGY4ZicsCgkJJ3JveWFsYmx1ZScgPT4gJzQxNjllMScsCgkJJ3NhZGRsZWJyb3duJyA9PiAnOGI0NTEzJywKCQknc2FsbW9uJyA9PiAnZmE4MDcyJywKCQknc2FuZHlicm93bicgPT4gJ2Y0YTQ2MCcsCgkJJ3NlYWdyZWVuJyA9PiAnMmU4YjU3JywKCQknc2Vhc2hlbGwnID0+ICdmZmY1ZWUnLAoJCSdzaWVubmEnID0+ICdhMDUyMmQnLAoJCSdzaWx2ZXInID0+ICdjMGMwYzAnLAoJCSdza3libHVlJyA9PiAnODdjZWViJywKCQknc2xhdGVibHVlJyA9PiAnNmE1YWNkJywKCQknc2xhdGVncmF5JyA9PiAnNzA4MDkwJywKCQknc2xhdGVncmV5JyA9PiAnNzA4MDkwJywKCQknc25vdycgPT4gJ2ZmZmFmYScsCgkJJ3NwcmluZ2dyZWVuJyA9PiAnMDBmZjdmJywKCQknc3RlZWxibHVlJyA9PiAnNDY4MmI0JywKCQkndGFuJyA9PiAnZDJiNDhjJywKCQkndGVhbCcgPT4gJzAwODA4MCcsCgkJJ3RoaXN0bGUnID0+ICdkOGJmZDgnLAoJCSd0b21hdG8nID0+ICdmZjYzNDcnLAoJCSd0dXJxdW9pc2UnID0+ICc0MGUwZDAnLAoJCSd2aW9sZXQnID0+ICdlZTgyZWUnLAoJCSd3aGVhdCcgPT4gJ2Y1ZGViMycsCgkJJ3doaXRlJyA9PiAnZmZmZmZmJywKCQknd2hpdGVzbW9rZScgPT4gJ2Y1ZjVmNScsCgkJJ3llbGxvdycgPT4gJ2ZmZmYwMCcsCgkJJ3llbGxvd2dyZWVuJyA9PiAnOWFjZDMyJwoJKTsgLy8gZW5kIG9mIHdlYiBjb2xvcnMKCgkvKioKCSAqIEFycmF5IG9mIHZhbGlkIEphdmFTY3JpcHQgY29sb3IgbmFtZXMKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgJGpzY29sb3IgPSBhcnJheSAoJ3RyYW5zcGFyZW50JywgJ2JsYWNrJywgJ3doaXRlJywgJ3JlZCcsICdncmVlbicsICdibHVlJywgJ2N5YW4nLCAnbWFnZW50YScsICd5ZWxsb3cnLCAnZGtHcmF5JywgJ2dyYXknLCAnbHRHcmF5Jyk7CgoJLyoqCgkgKiBBcnJheSBvZiBTcG90IGNvbG9ycyAoQyxNLFksSyxuYW1lKQoJICogQ29sb3Iga2V5cyBtdXN0IGJlIGluIGxvd2VyY2FzZSBhbmQgd2l0aG91dCBzcGFjZXMuCgkgKiBBcyBsb25nIGFzIG5vIG9wZW4gc3RhbmRhcmQgZm9yIHNwb3QgY29sb3VycyBleGlzdHMsIHlvdSBoYXZlIHRvIGJ1eSBhIGNvbG91ciBib29rIGJ5IG9uZSBvZiB0aGUgY29sb3VyIG1hbnVmYWN0dXJlcnMgYW5kIGluc2VydCB0aGUgdmFsdWVzIGFuZCBuYW1lcyBvZiBzcG90IGNvbG91cnMgZGlyZWN0bHkuCgkgKiBDb21tb24gaW5kdXN0cnkgc3RhbmRhcmQgc3BvdCBjb2xvcnMgYXJlOiBBTlBBLUNPTE9SLCBESUMsIEZPQ09MVE9ORSwgR0NNSSwgSEtTLCBQQU5UT05FLCBUT1lPLCBUUlVNQVRDSC4KCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgJHNwb3Rjb2xvciA9IGFycmF5ICgKCQkvLyBzcGVjaWFsIHJlZ2lzdHJhdGlvbiBjb2xvcnMKCQknbm9uZScgICAgPT4gYXJyYXkoICAwLCAgIDAsICAgMCwgICAwLCAnTm9uZScpLAoJCSdhbGwnICAgICA9PiBhcnJheSgxMDAsIDEwMCwgMTAwLCAxMDAsICdBbGwnKSwKCQkvLyBzdGFuZGFyZCBDTVlLIGNvbG9ycwoJCSdjeWFuJyAgICA9PiBhcnJheSgxMDAsICAgMCwgICAwLCAgIDAsICdDeWFuJyksCgkJJ21hZ2VudGEnID0+IGFycmF5KCAgMCwgMTAwLCAgIDAsICAgMCwgJ01hZ2VudGEnKSwKCQkneWVsbG93JyAgPT4gYXJyYXkoICAwLCAgIDAsIDEwMCwgICAwLCAnWWVsbG93JyksCgkJJ2tleScgICAgID0+IGFycmF5KCAgMCwgICAwLCAgIDAsIDEwMCwgJ0tleScpLAoJCS8vIGFsaWFzCgkJJ3doaXRlJyAgID0+IGFycmF5KCAgMCwgICAwLCAgIDAsICAgMCwgJ1doaXRlJyksCgkJJ2JsYWNrJyAgID0+IGFycmF5KCAgMCwgICAwLCAgIDAsIDEwMCwgJ0JsYWNrJyksCgkJLy8gc3RhbmRhcmQgUkdCIGNvbG9ycwoJCSdyZWQnICAgICA9PiBhcnJheSggIDAsIDEwMCwgMTAwLCAgIDAsICdSZWQnKSwKCQknZ3JlZW4nICAgPT4gYXJyYXkoMTAwLCAgIDAsIDEwMCwgICAwLCAnR3JlZW4nKSwKCQknYmx1ZScgICAgPT4gYXJyYXkoMTAwLCAxMDAsICAgMCwgICAwLCAnQmx1ZScpLAoJCS8vIEFkZCBoZXJlIHN0YW5kYXJkIHNwb3QgY29sb3JzIG9yIGR5bmFtaWNhbGx5IGRlZmluZSB0aGVtIHdpdGggQWRkU3BvdENvbG9yKCkKCQkvLyAuLi4KCSk7IC8vIGVuZCBvZiBzcG90IGNvbG9ycwoKCS8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgoJLyoqCgkgKiBSZXR1cm4gdGhlIFNwb3QgY29sb3IgYXJyYXkuCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgTmFtZSBvZiB0aGUgc3BvdCBjb2xvci4KCSAqIEBwYXJhbSAkc3BvdGMgKGFycmF5KSBSZWZlcmVuY2UgdG8gYW4gYXJyYXkgb2Ygc3BvdCBjb2xvcnMuCgkgKiBAcmV0dXJuIChhcnJheSkgU3BvdCBjb2xvciBhcnJheSBvciBmYWxzZSBpZiBub3QgZGVmaW5lZC4KCSAqIEBzaW5jZSA1LjkuMTI1ICgyMDExLTEwLTAzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTcG90Q29sb3IoJG5hbWUsICYkc3BvdGMpIHsKCQlpZiAoaXNzZXQoJHNwb3RjWyRuYW1lXSkpIHsKCQkJcmV0dXJuICRzcG90Y1skbmFtZV07CgkJfQoJCSRjb2xvciA9IHByZWdfcmVwbGFjZSgnL1tcc10qLycsICcnLCAkbmFtZSk7IC8vIHJlbW92ZSBleHRyYSBzcGFjZXMKCQkkY29sb3IgPSBzdHJ0b2xvd2VyKCRjb2xvcik7CgkJaWYgKGlzc2V0KHNlbGY6OiRzcG90Y29sb3JbJGNvbG9yXSkpIHsKCQkJaWYgKCFpc3NldCgkc3BvdGNbJG5hbWVdKSkgewoJCQkJJGkgPSAoMSArIGNvdW50KCRzcG90YykpOwoJCQkJJHNwb3RjWyRuYW1lXSA9IGFycmF5KCdDJyA9PiBzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bMF0sICdNJyA9PiBzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bMV0sICdZJyA9PiBzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bMl0sICdLJyA9PiBzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bM10sICduYW1lJyA9PiBzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bNF0sICdpJyA9PiAkaSk7CgkJCX0KCQkJcmV0dXJuICRzcG90Y1tzZWxmOjokc3BvdGNvbG9yWyRjb2xvcl1bNF1dOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGFuIGFycmF5IChSR0Igb3IgQ01ZSykgZnJvbSBhbiBodG1sIGNvbG9yIG5hbWUsIG9yIGEgc2l4LWRpZ2l0IChpLmUuICMzRkU1QUEpLCBvciB0aHJlZS1kaWdpdCAoaS5lLiAjN0ZGKSBoZXhhZGVjaW1hbCBjb2xvciwgb3IgYSBqYXZhc2NyaXB0IGNvbG9yIGFycmF5LCBvciBqYXZhc2NyaXB0IGNvbG9yIG5hbWUuCgkgKiBAcGFyYW0gJGhjb2xvciAoc3RyaW5nKSBIVE1MIGNvbG9yLgoJICogQHBhcmFtICRzcG90YyAoYXJyYXkpIFJlZmVyZW5jZSB0byBhbiBhcnJheSBvZiBzcG90IGNvbG9ycy4KCSAqIEBwYXJhbSAkZGVmY29sIChhcnJheSkgQ29sb3IgdG8gcmV0dXJuIGluIGNhc2Ugb2YgZXJyb3IuCgkgKiBAcmV0dXJuIGFycmF5IFJHQiBvciBDTVlLIGNvbG9yLCBvciBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb252ZXJ0SFRNTENvbG9yVG9EZWMoJGhjb2xvciwgJiRzcG90YywgJGRlZmNvbD1hcnJheSgnUic9PjEyOCwnRyc9PjEyOCwnQic9PjEyOCkpIHsKCQkkY29sb3IgPSBwcmVnX3JlcGxhY2UoJy9bXHNdKi8nLCAnJywgJGhjb2xvcik7IC8vIHJlbW92ZSBleHRyYSBzcGFjZXMKCQkkY29sb3IgPSBzdHJ0b2xvd2VyKCRjb2xvcik7CgkJLy8gY2hlY2sgZm9yIGphdmFzY3JpcHQgY29sb3IgYXJyYXkgc3ludGF4CgkJaWYgKHN0cnBvcygkY29sb3IsICdbJykgIT09IGZhbHNlKSB7CgkJCWlmIChwcmVnX21hdGNoKCcvW1xbXVtcIlwnXSh0fGd8cmdifGNteWspW1wiXCddW1wsXT8oWzAtOVwuXSopW1wsXT8oWzAtOVwuXSopW1wsXT8oWzAtOVwuXSopW1wsXT8oWzAtOVwuXSopW1xdXS8nLCAkY29sb3IsICRtKSA+IDApIHsKCQkJCSRyZXR1cm5jb2xvciA9IGFycmF5KCk7CgkJCQlzd2l0Y2ggKCRtWzFdKSB7CgkJCQkJY2FzZSAnY215ayc6IHsKCQkJCQkJLy8gUkdCCgkJCQkJCSRyZXR1cm5jb2xvclsnQyddID0gbWF4KDAsIG1pbigxMDAsIChmbG9hdHZhbCgkbVsyXSkgKiAxMDApKSk7CgkJCQkJCSRyZXR1cm5jb2xvclsnTSddID0gbWF4KDAsIG1pbigxMDAsIChmbG9hdHZhbCgkbVszXSkgKiAxMDApKSk7CgkJCQkJCSRyZXR1cm5jb2xvclsnWSddID0gbWF4KDAsIG1pbigxMDAsIChmbG9hdHZhbCgkbVs0XSkgKiAxMDApKSk7CgkJCQkJCSRyZXR1cm5jb2xvclsnSyddID0gbWF4KDAsIG1pbigxMDAsIChmbG9hdHZhbCgkbVs1XSkgKiAxMDApKSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdyZ2InOiB7CgkJCQkJCS8vIFJHQgoJCQkJCQkkcmV0dXJuY29sb3JbJ1InXSA9IG1heCgwLCBtaW4oMjU1LCAoZmxvYXR2YWwoJG1bMl0pICogMjU1KSkpOwoJCQkJCQkkcmV0dXJuY29sb3JbJ0cnXSA9IG1heCgwLCBtaW4oMjU1LCAoZmxvYXR2YWwoJG1bM10pICogMjU1KSkpOwoJCQkJCQkkcmV0dXJuY29sb3JbJ0InXSA9IG1heCgwLCBtaW4oMjU1LCAoZmxvYXR2YWwoJG1bNF0pICogMjU1KSkpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnZyc6IHsKCQkJCQkJLy8gZ3JheXNjYWxlCgkJCQkJCSRyZXR1cm5jb2xvclsnRyddID0gbWF4KDAsIG1pbigyNTUsIChmbG9hdHZhbCgkbVsyXSkgKiAyNTUpKSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICd0JzoKCQkJCQlkZWZhdWx0OiB7CgkJCQkJCS8vIHRyYW5zcGFyZW50IChlbXB0eSBhcnJheSkKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJcmV0dXJuICRyZXR1cm5jb2xvcjsKCQkJfQoJCX0gZWxzZWlmICgoc3Vic3RyKCRjb2xvciwgMCwgNCkgIT0gJ2NteWsnKSBBTkQgKHN1YnN0cigkY29sb3IsIDAsIDMpICE9ICdyZ2InKSBBTkQgKCgkZG90cG9zID0gc3RycG9zKCRjb2xvciwgJy4nKSkgIT09IGZhbHNlKSkgewoJCQkvLyByZW1vdmUgY2xhc3MgcGFyZW50IChpLmUuOiBjb2xvci5yZWQpCgkJCSRjb2xvciA9IHN1YnN0cigkY29sb3IsICgkZG90cG9zICsgMSkpOwoJCQlpZiAoJGNvbG9yID09ICd0cmFuc3BhcmVudCcpIHsKCQkJCS8vIHRyYW5zcGFyZW50IChlbXB0eSBhcnJheSkKCQkJCXJldHVybiBhcnJheSgpOwoJCQl9CgkJfQoJCWlmIChzdHJsZW4oJGNvbG9yKSA9PSAwKSB7CgkJCXJldHVybiAkZGVmY29sOwoJCX0KCQkvLyBSR0IgQVJSQVkKCQlpZiAoc3Vic3RyKCRjb2xvciwgMCwgMykgPT0gJ3JnYicpIHsKCQkJJGNvZGVzID0gc3Vic3RyKCRjb2xvciwgNCk7CgkJCSRjb2RlcyA9IHN0cl9yZXBsYWNlKCcpJywgJycsICRjb2Rlcyk7CgkJCSRyZXR1cm5jb2xvciA9IGV4cGxvZGUoJywnLCAkY29kZXMpOwoJCQlmb3JlYWNoICgkcmV0dXJuY29sb3IgYXMgJGtleSA9PiAkdmFsKSB7CgkJCQlpZiAoc3RycG9zKCR2YWwsICclJykgPiAwKSB7CgkJCQkJLy8gcGVyY2VudGFnZQoJCQkJCSRyZXR1cm5jb2xvclska2V5XSA9ICgyNTUgKiBpbnR2YWwoJHZhbCkgLyAxMDApOwoJCQkJfSBlbHNlIHsKCQkJCQkkcmV0dXJuY29sb3JbJGtleV0gPSBpbnR2YWwoJHZhbCk7CgkJCQl9CgkJCQkvLyBub3JtYWxpemUgdmFsdWUKCQkJCSRyZXR1cm5jb2xvclska2V5XSA9IG1heCgwLCBtaW4oMjU1LCAkcmV0dXJuY29sb3JbJGtleV0pKTsKCQkJfQoJCQlyZXR1cm4gJHJldHVybmNvbG9yOwoJCX0KCQkvLyBDTVlLIEFSUkFZCgkJaWYgKHN1YnN0cigkY29sb3IsIDAsIDQpID09ICdjbXlrJykgewoJCQkkY29kZXMgPSBzdWJzdHIoJGNvbG9yLCA1KTsKCQkJJGNvZGVzID0gc3RyX3JlcGxhY2UoJyknLCAnJywgJGNvZGVzKTsKCQkJJHJldHVybmNvbG9yID0gZXhwbG9kZSgnLCcsICRjb2Rlcyk7CgkJCWZvcmVhY2ggKCRyZXR1cm5jb2xvciBhcyAka2V5ID0+ICR2YWwpIHsKCQkJCWlmIChzdHJwb3MoJHZhbCwgJyUnKSAhPT0gZmFsc2UpIHsKCQkJCQkvLyBwZXJjZW50YWdlCgkJCQkJJHJldHVybmNvbG9yWyRrZXldID0gKDEwMCAqIGludHZhbCgkdmFsKSAvIDEwMCk7CgkJCQl9IGVsc2UgewoJCQkJCSRyZXR1cm5jb2xvclska2V5XSA9IGludHZhbCgkdmFsKTsKCQkJCX0KCQkJCS8vIG5vcm1hbGl6ZSB2YWx1ZQoJCQkJJHJldHVybmNvbG9yWyRrZXldID0gbWF4KDAsIG1pbigxMDAsICRyZXR1cm5jb2xvclska2V5XSkpOwoJCQl9CgkJCXJldHVybiAkcmV0dXJuY29sb3I7CgkJfQoJCWlmICgkY29sb3JbMF0gIT0gJyMnKSB7CgkJCS8vIENPTE9SIE5BTUUKCQkJaWYgKGlzc2V0KHNlbGY6OiR3ZWJjb2xvclskY29sb3JdKSkgewoJCQkJLy8gd2ViIGNvbG9yCgkJCQkkY29sb3JfY29kZSA9IHNlbGY6OiR3ZWJjb2xvclskY29sb3JdOwoJCQl9IGVsc2UgewoJCQkJLy8gc3BvdCBjb2xvcgoJCQkJJHJldHVybmNvbG9yID0gc2VsZjo6Z2V0U3BvdENvbG9yKCRjb2xvciwgJHNwb3RjKTsKCQkJCWlmICgkcmV0dXJuY29sb3IgPT09IGZhbHNlKSB7CgkJCQkJJHJldHVybmNvbG9yID0gJGRlZmNvbDsKCQkJCX0KCQkJCXJldHVybiAkcmV0dXJuY29sb3I7CgkJCX0KCQl9IGVsc2UgewoJCQkkY29sb3JfY29kZSA9IHN1YnN0cigkY29sb3IsIDEpOwoJCX0KCQkvLyBIRVhBREVDSU1BTCBSRVBSRVNFTlRBVElPTgoJCXN3aXRjaCAoc3RybGVuKCRjb2xvcl9jb2RlKSkgewoJCQljYXNlIDM6IHsKCQkJCS8vIDMtZGlnaXQgUkdCIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCgkJCQkkciA9IHN1YnN0cigkY29sb3JfY29kZSwgMCwgMSk7CgkJCQkkZyA9IHN1YnN0cigkY29sb3JfY29kZSwgMSwgMSk7CgkJCQkkYiA9IHN1YnN0cigkY29sb3JfY29kZSwgMiwgMSk7CgkJCQkkcmV0dXJuY29sb3IgPSBhcnJheSgpOwoJCQkJJHJldHVybmNvbG9yWydSJ10gPSBtYXgoMCwgbWluKDI1NSwgaGV4ZGVjKCRyLiRyKSkpOwoJCQkJJHJldHVybmNvbG9yWydHJ10gPSBtYXgoMCwgbWluKDI1NSwgaGV4ZGVjKCRnLiRnKSkpOwoJCQkJJHJldHVybmNvbG9yWydCJ10gPSBtYXgoMCwgbWluKDI1NSwgaGV4ZGVjKCRiLiRiKSkpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSA2OiB7CgkJCQkvLyA2LWRpZ2l0IFJHQiBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbgoJCQkJJHJldHVybmNvbG9yID0gYXJyYXkoKTsKCQkJCSRyZXR1cm5jb2xvclsnUiddID0gbWF4KDAsIG1pbigyNTUsIGhleGRlYyhzdWJzdHIoJGNvbG9yX2NvZGUsIDAsIDIpKSkpOwoJCQkJJHJldHVybmNvbG9yWydHJ10gPSBtYXgoMCwgbWluKDI1NSwgaGV4ZGVjKHN1YnN0cigkY29sb3JfY29kZSwgMiwgMikpKSk7CgkJCQkkcmV0dXJuY29sb3JbJ0InXSA9IG1heCgwLCBtaW4oMjU1LCBoZXhkZWMoc3Vic3RyKCRjb2xvcl9jb2RlLCA0LCAyKSkpKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgODogewoJCQkJLy8gOC1kaWdpdCBDTVlLIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uCgkJCQkkcmV0dXJuY29sb3IgPSBhcnJheSgpOwoJCQkJJHJldHVybmNvbG9yWydDJ10gPSBtYXgoMCwgbWluKDEwMCwgcm91bmQoaGV4ZGVjKHN1YnN0cigkY29sb3JfY29kZSwgMCwgMikpIC8gMi41NSkpKTsKCQkJCSRyZXR1cm5jb2xvclsnTSddID0gbWF4KDAsIG1pbigxMDAsIHJvdW5kKGhleGRlYyhzdWJzdHIoJGNvbG9yX2NvZGUsIDIsIDIpKSAvIDIuNTUpKSk7CgkJCQkkcmV0dXJuY29sb3JbJ1knXSA9IG1heCgwLCBtaW4oMTAwLCByb3VuZChoZXhkZWMoc3Vic3RyKCRjb2xvcl9jb2RlLCA0LCAyKSkgLyAyLjU1KSkpOwoJCQkJJHJldHVybmNvbG9yWydLJ10gPSBtYXgoMCwgbWluKDEwMCwgcm91bmQoaGV4ZGVjKHN1YnN0cigkY29sb3JfY29kZSwgNiwgMikpIC8gMi41NSkpKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCSRyZXR1cm5jb2xvciA9ICRkZWZjb2w7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHVybmNvbG9yOwoJfQoKCS8qKgoJICogQ29udmVydCBhIGNvbG9yIGFycmF5IGludG8gYSBzdHJpbmcgcmVwcmVzZW50YXRpb24uCgkgKiBAcGFyYW0gJGMgKGFycmF5KSBBcnJheSBvZiBjb2xvcnMuCgkgKiBAcmV0dXJuIChzdHJpbmcpIFRoZSBjb2xvciBhcnJheSByZXByZXNlbnRhdGlvbi4KCSAqIEBzaW5jZSA1LjkuMTM3ICgyMDExLTEyLTAxKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRDb2xvclN0cmluZ0Zyb21BcnJheSgkYykgewoJCSRjID0gYXJyYXlfdmFsdWVzKCRjKTsKCQkkY29sb3IgPSAnWyc7CgkJc3dpdGNoIChjb3VudCgkYykpIHsKCQkJY2FzZSA0OiB7CgkJCQkvLyBDTVlLCgkJCQkkY29sb3IgLj0gc3ByaW50ZignJUYgJUYgJUYgJUYnLCAobWF4KDAsIG1pbigxMDAsIGZsb2F0dmFsKCRjWzBdKSkpIC8gMTAwKSwgKG1heCgwLCBtaW4oMTAwLCBmbG9hdHZhbCgkY1sxXSkpKSAvIDEwMCksIChtYXgoMCwgbWluKDEwMCwgZmxvYXR2YWwoJGNbMl0pKSkgLyAxMDApLCAobWF4KDAsIG1pbigxMDAsIGZsb2F0dmFsKCRjWzNdKSkpIC8gMTAwKSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDM6IHsKCQkJCS8vIFJHQgoJCQkJJGNvbG9yIC49IHNwcmludGYoJyVGICVGICVGJywgKG1heCgwLCBtaW4oMjU1LCBmbG9hdHZhbCgkY1swXSkpKSAvIDI1NSksIChtYXgoMCwgbWluKDI1NSwgZmxvYXR2YWwoJGNbMV0pKSkgLyAyNTUpLCAobWF4KDAsIG1pbigyNTUsIGZsb2F0dmFsKCRjWzJdKSkpIC8gMjU1KSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDE6IHsKCQkJCS8vIGdyYXlzY2FsZQoJCQkJJGNvbG9yIC49IHNwcmludGYoJyVGJywgKG1heCgwLCBtaW4oMjU1LCBmbG9hdHZhbCgkY1swXSkpKSAvIDI1NSkpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJGNvbG9yIC49ICddJzsKCQlyZXR1cm4gJGNvbG9yOwoJfQoKCS8qKgoJICogQ29udmVydCBjb2xvciB0byBqYXZhc2NyaXB0IGNvbG9yLgoJICogQHBhcmFtICRjb2xvciAoc3RyaW5nKSBjb2xvciBuYW1lIG9yICIjUlJHR0JCIgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMS4wMDIgKDIwMDgtMDItMTIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9KU2NvbG9yKCRjb2xvcikgewoJCWlmIChzdWJzdHIoJGNvbG9yLCAwLCAxKSA9PSAnIycpIHsKCQkJcmV0dXJuIHNwcmludGYoIlsnUkdCJywlRiwlRiwlRl0iLCAoaGV4ZGVjKHN1YnN0cigkY29sb3IsIDEsIDIpKSAvIDI1NSksIChoZXhkZWMoc3Vic3RyKCRjb2xvciwgMywgMikpIC8gMjU1KSwgKGhleGRlYyhzdWJzdHIoJGNvbG9yLCA1LCAyKSkgLyAyNTUpKTsKCQl9CgkJaWYgKCFpbl9hcnJheSgkY29sb3IsIHNlbGY6OiRqc2NvbG9yKSkgewoJCQkvLyBkZWZhdWx0IHRyYW5zcGFyZW50IGNvbG9yCgkJCSRjb2xvciA9ICRqc2NvbG9yWzBdOwoJCX0KCQlyZXR1cm4gJ2NvbG9yLicuJGNvbG9yOwoJfQoKCn0gLy8gRU5EIE9GIFRDUERGX0NPTE9SUyBDTEFTUwoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEVORCBPRiBGSUxFCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_filters.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfZmlsdGVycy5waHAKLy8gVmVyc2lvbiAgICAgOiAxLjAuMDAxCi8vIEJlZ2luICAgICAgIDogMjAxMS0wNS0yMwovLyBMYXN0IFVwZGF0ZSA6IDIwMTQtMDQtMjUKLy8gQXV0aG9yICAgICAgOiBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQgLSB3d3cudGVjbmljay5jb20gLSBpbmZvQHRlY25pY2suY29tCi8vIExpY2Vuc2UgICAgIDogR05VLUxHUEwgdjMgKGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxMyBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQKLy8KLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVENQREYgc29mdHdhcmUgbGlicmFyeS4KLy8KLy8gVENQREYgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAovLyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwovLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKLy8gTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8KLy8gVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgovLyBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuIElmIG5vdCwgc2VlCi8vIDxodHRwOi8vd3d3LnRlY25pY2suY29tL3BhZ2VmaWxlcy90Y3BkZi9MSUNFTlNFLlRYVD4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDogVGhpcyBpcyBhIFBIUCBjbGFzcyBmb3IgZGVjb2RpbmcgY29tbW9uIFBERiBmaWx0ZXJzIChQREYgMzIwMDAtMjAwOCAtIDcuNCBGaWx0ZXJzKS4KLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogVGhpcyBpcyBhIFBIUCBjbGFzcyBmb3IgZGVjb2RpbmcgY29tbW9uIFBERiBmaWx0ZXJzIChQREYgMzIwMDAtMjAwOCAtIDcuNCBGaWx0ZXJzKS48YnI+CiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMDEKICovCgovKioKICogQGNsYXNzIFRDUERGX0ZJTFRFUlMKICogVGhpcyBpcyBhIFBIUCBjbGFzcyBmb3IgZGVjb2RpbmcgY29tbW9uIFBERiBmaWx0ZXJzIChQREYgMzIwMDAtMjAwOCAtIDcuNCBGaWx0ZXJzKS48YnI+CiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBicmllZiBUaGlzIGlzIGEgUEhQIGNsYXNzIGZvciBkZWNvZGluZyBjb21tb24gUERGIGZpbHRlcnMuCiAqIEB2ZXJzaW9uIDEuMC4wMDEKICogQGF1dGhvciBOaWNvbGEgQXN1bmkgLSBpbmZvQHRlY25pY2suY29tCiAqLwpjbGFzcyBUQ1BERl9GSUxURVJTIHsKCgkvKioKCSAqIERlZmluZSBhIGxpc3Qgb2YgYXZhaWxhYmxlIGZpbHRlciBkZWNvZGVycy4KCSAqIEBwcml2YXRlIHN0YXRpYwoJICovCglwcml2YXRlIHN0YXRpYyAkYXZhaWxhYmxlX2ZpbHRlcnMgPSBhcnJheSgnQVNDSUlIZXhEZWNvZGUnLCAnQVNDSUk4NURlY29kZScsICdMWldEZWNvZGUnLCAnRmxhdGVEZWNvZGUnLCAnUnVuTGVuZ3RoRGVjb2RlJyk7CgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogR2V0IGEgbGlzdCBvZiBhdmFpbGFibGUgZGVjb2RpbmcgZmlsdGVycy4KCSAqIEByZXR1cm4gKGFycmF5KSBBcnJheSBvZiBhdmFpbGFibGUgZmlsdGVyIGRlY29kZXJzLgoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEF2YWlsYWJsZUZpbHRlcnMoKSB7CgkJcmV0dXJuIHNlbGY6OiRhdmFpbGFibGVfZmlsdGVyczsKCX0KCgkvKioKCSAqIERlY29kZSBkYXRhIHVzaW5nIHRoZSBzcGVjaWZpZWQgZmlsdGVyIHR5cGUuCgkgKiBAcGFyYW0gJGZpbHRlciAoc3RyaW5nKSBGaWx0ZXIgbmFtZS4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBEYXRhIHRvIGRlY29kZS4KCSAqIEByZXR1cm4gRGVjb2RlZCBkYXRhIHN0cmluZy4KCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTIzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVGaWx0ZXIoJGZpbHRlciwgJGRhdGEpIHsKCQlzd2l0Y2ggKCRmaWx0ZXIpIHsKCQkJY2FzZSAnQVNDSUlIZXhEZWNvZGUnOiB7CgkJCQlyZXR1cm4gc2VsZjo6ZGVjb2RlRmlsdGVyQVNDSUlIZXhEZWNvZGUoJGRhdGEpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQVNDSUk4NURlY29kZSc6IHsKCQkJCXJldHVybiBzZWxmOjpkZWNvZGVGaWx0ZXJBU0NJSTg1RGVjb2RlKCRkYXRhKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0xaV0RlY29kZSc6IHsKCQkJCXJldHVybiBzZWxmOjpkZWNvZGVGaWx0ZXJMWldEZWNvZGUoJGRhdGEpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnRmxhdGVEZWNvZGUnOiB7CgkJCQlyZXR1cm4gc2VsZjo6ZGVjb2RlRmlsdGVyRmxhdGVEZWNvZGUoJGRhdGEpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnUnVuTGVuZ3RoRGVjb2RlJzogewoJCQkJcmV0dXJuIHNlbGY6OmRlY29kZUZpbHRlclJ1bkxlbmd0aERlY29kZSgkZGF0YSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDQ0lUVEZheERlY29kZSc6IHsKCQkJCXJldHVybiBzZWxmOjpkZWNvZGVGaWx0ZXJDQ0lUVEZheERlY29kZSgkZGF0YSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdKQklHMkRlY29kZSc6IHsKCQkJCXJldHVybiBzZWxmOjpkZWNvZGVGaWx0ZXJKQklHMkRlY29kZSgkZGF0YSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdEQ1REZWNvZGUnOiB7CgkJCQlyZXR1cm4gc2VsZjo6ZGVjb2RlRmlsdGVyRENURGVjb2RlKCRkYXRhKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0pQWERlY29kZSc6IHsKCQkJCXJldHVybiBzZWxmOjpkZWNvZGVGaWx0ZXJKUFhEZWNvZGUoJGRhdGEpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQ3J5cHQnOiB7CgkJCQlyZXR1cm4gc2VsZjo6ZGVjb2RlRmlsdGVyQ3J5cHQoJGRhdGEpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJcmV0dXJuIHNlbGY6OmRlY29kZUZpbHRlclN0YW5kYXJkKCRkYXRhKTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJfQoKCS8vIC0tLSBGSUxURVJTIChQREYgMzIwMDAtMjAwOCAtIDcuNCBGaWx0ZXJzKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvKioKCSAqIFN0YW5kYXJkCgkgKiBEZWZhdWx0IGRlY29kaW5nIGZpbHRlciAobGVhdmVzIGRhdGEgdW5jaGFuZ2VkKS4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBEYXRhIHRvIGRlY29kZS4KCSAqIEByZXR1cm4gRGVjb2RlZCBkYXRhIHN0cmluZy4KCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTIzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVGaWx0ZXJTdGFuZGFyZCgkZGF0YSkgewoJCXJldHVybiAkZGF0YTsKCX0KCgkvKioKCSAqIEFTQ0lJSGV4RGVjb2RlCgkgKiBEZWNvZGVzIGRhdGEgZW5jb2RlZCBpbiBhbiBBU0NJSSBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbiwgcmVwcm9kdWNpbmcgdGhlIG9yaWdpbmFsIGJpbmFyeSBkYXRhLgoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIERhdGEgdG8gZGVjb2RlLgoJICogQHJldHVybiBEZWNvZGVkIGRhdGEgc3RyaW5nLgoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZUZpbHRlckFTQ0lJSGV4RGVjb2RlKCRkYXRhKSB7CgkJLy8gaW50aWFsaXplIHN0cmluZyB0byByZXR1cm4KCQkkZGVjb2RlZCA9ICcnOwoJCS8vIGFsbCB3aGl0ZS1zcGFjZSBjaGFyYWN0ZXJzIHNoYWxsIGJlIGlnbm9yZWQKCQkkZGF0YSA9IHByZWdfcmVwbGFjZSgnL1tcc10vJywgJycsICRkYXRhKTsKCQkvLyBjaGVjayBmb3IgRU9EIGNoYXJhY3RlcjogR1JFQVRFUi1USEFOIFNJR04gKDNFaCkKCQkkZW9kID0gc3RycG9zKCRkYXRhLCAnPicpOwoJCWlmICgkZW9kICE9PSBmYWxzZSkgewoJCQkvLyByZW1vdmUgRU9EIGFuZCBleHRyYSBkYXRhIChpZiBhbnkpCgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCAkZW9kKTsKCQkJJGVvZCA9IHRydWU7CgkJfQoJCS8vIGdldCBkYXRhIGxlbmd0aAoJCSRkYXRhX2xlbmd0aCA9IHN0cmxlbigkZGF0YSk7CgkJaWYgKCgkZGF0YV9sZW5ndGggJSAyKSAhPSAwKSB7CgkJCS8vIG9kZCBudW1iZXIgb2YgaGV4YWRlY2ltYWwgZGlnaXRzCgkJCWlmICgkZW9kKSB7CgkJCQkvLyBFT0Qgc2hhbGwgYmVoYXZlIGFzIGlmIGEgMCAoemVybykgZm9sbG93ZWQgdGhlIGxhc3QgZGlnaXQKCQkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCAtMSkuJzAnLnN1YnN0cigkZGF0YSwgLTEpOwoJCQl9IGVsc2UgewoJCQkJc2VsZjo6RXJyb3IoJ2RlY29kZUZpbHRlckFTQ0lJSGV4RGVjb2RlOiBpbnZhbGlkIGNvZGUnKTsKCQkJfQoJCX0KCQkvLyBjaGVjayBmb3IgaW52YWxpZCBjaGFyYWN0ZXJzCgkJaWYgKHByZWdfbWF0Y2goJy9bXmEtZkEtRlxkXS8nLCAkZGF0YSkgPiAwKSB7CgkJCXNlbGY6OkVycm9yKCdkZWNvZGVGaWx0ZXJBU0NJSUhleERlY29kZTogaW52YWxpZCBjb2RlJyk7CgkJfQoJCS8vIGdldCBvbmUgYnl0ZSBvZiBiaW5hcnkgZGF0YSBmb3IgZWFjaCBwYWlyIG9mIEFTQ0lJIGhleGFkZWNpbWFsIGRpZ2l0cwoJCSRkZWNvZGVkID0gcGFjaygnSConLCAkZGF0YSk7CgkJcmV0dXJuICRkZWNvZGVkOwoJfQoKCS8qKgoJICogQVNDSUk4NURlY29kZQoJICogRGVjb2RlcyBkYXRhIGVuY29kZWQgaW4gYW4gQVNDSUkgYmFzZS04NSByZXByZXNlbnRhdGlvbiwgcmVwcm9kdWNpbmcgdGhlIG9yaWdpbmFsIGJpbmFyeSBkYXRhLgoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIERhdGEgdG8gZGVjb2RlLgoJICogQHJldHVybiBEZWNvZGVkIGRhdGEgc3RyaW5nLgoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZUZpbHRlckFTQ0lJODVEZWNvZGUoJGRhdGEpIHsKCQkvLyBpbnRpYWxpemUgc3RyaW5nIHRvIHJldHVybgoJCSRkZWNvZGVkID0gJyc7CgkJLy8gYWxsIHdoaXRlLXNwYWNlIGNoYXJhY3RlcnMgc2hhbGwgYmUgaWdub3JlZAoJCSRkYXRhID0gcHJlZ19yZXBsYWNlKCcvW1xzXS8nLCAnJywgJGRhdGEpOwoJCS8vIHJlbW92ZSBzdGFydCBzZXF1ZW5jZSAyLWNoYXJhY3RlciBzZXF1ZW5jZSA8fiAoM0NoKSg3RWgpCgkJaWYgKHN0cnBvcygkZGF0YSwgJzx+JykgIT09IGZhbHNlKSB7CgkJCS8vIHJlbW92ZSBFT0QgYW5kIGV4dHJhIGRhdGEgKGlmIGFueSkKCQkJJGRhdGEgPSBzdWJzdHIoJGRhdGEsIDIpOwoJCX0KCQkvLyBjaGVjayBmb3IgRU9EOiAyLWNoYXJhY3RlciBzZXF1ZW5jZSB+PiAoN0VoKSgzRWgpCgkJJGVvZCA9IHN0cnBvcygkZGF0YSwgJ34+Jyk7CgkJaWYgKCRlb2QgIT09IGZhbHNlKSB7CgkJCS8vIHJlbW92ZSBFT0QgYW5kIGV4dHJhIGRhdGEgKGlmIGFueSkKCQkJJGRhdGEgPSBzdWJzdHIoJGRhdGEsIDAsICRlb2QpOwoJCX0KCQkvLyBkYXRhIGxlbmd0aAoJCSRkYXRhX2xlbmd0aCA9IHN0cmxlbigkZGF0YSk7CgkJLy8gY2hlY2sgZm9yIGludmFsaWQgY2hhcmFjdGVycwoJCWlmIChwcmVnX21hdGNoKCcvW15ceDIxLVx4NzUsXHg3NF0vJywgJGRhdGEpID4gMCkgewoJCQlzZWxmOjpFcnJvcignZGVjb2RlRmlsdGVyQVNDSUk4NURlY29kZTogaW52YWxpZCBjb2RlJyk7CgkJfQoJCS8vIHogc2VxdWVuY2UKCQkkenNlcSA9IGNocigwKS5jaHIoMCkuY2hyKDApLmNocigwKTsKCQkvLyBwb3NpdGlvbiBpbnNpZGUgYSBncm91cCBvZiA0IGJ5dGVzICgwLTMpCgkJJGdyb3VwX3BvcyA9IDA7CgkJJHR1cGxlID0gMDsKCQkkcG93ODUgPSBhcnJheSgoODUqODUqODUqODUpLCAoODUqODUqODUpLCAoODUqODUpLCA4NSwgMSk7CgkJJGxhc3RfcG9zID0gKCRkYXRhX2xlbmd0aCAtIDEpOwoJCS8vIGZvciBlYWNoIGJ5dGUKCQlmb3IgKCRpID0gMDsgJGkgPCAkZGF0YV9sZW5ndGg7ICsrJGkpIHsKCQkJLy8gZ2V0IGNoYXIgdmFsdWUKCQkJJGNoYXIgPSBvcmQoJGRhdGFbJGldKTsKCQkJaWYgKCRjaGFyID09IDEyMikgeyAvLyAneicKCQkJCWlmICgkZ3JvdXBfcG9zID09IDApIHsKCQkJCQkkZGVjb2RlZCAuPSAkenNlcTsKCQkJCX0gZWxzZSB7CgkJCQkJc2VsZjo6RXJyb3IoJ2RlY29kZUZpbHRlckFTQ0lJODVEZWNvZGU6IGludmFsaWQgY29kZScpOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gdGhlIHZhbHVlIHJlcHJlc2VudGVkIGJ5IGEgZ3JvdXAgb2YgNSBjaGFyYWN0ZXJzIHNob3VsZCBuZXZlciBiZSBncmVhdGVyIHRoYW4gMl4zMiAtIDEKCQkJCSR0dXBsZSArPSAoKCRjaGFyIC0gMzMpICogJHBvdzg1WyRncm91cF9wb3NdKTsKCQkJCWlmICgkZ3JvdXBfcG9zID09IDQpIHsKCQkJCQkkZGVjb2RlZCAuPSBjaHIoJHR1cGxlID4+IDI0KS5jaHIoJHR1cGxlID4+IDE2KS5jaHIoJHR1cGxlID4+IDgpLmNocigkdHVwbGUpOwoJCQkJCSR0dXBsZSA9IDA7CgkJCQkJJGdyb3VwX3BvcyA9IDA7CgkJCQl9IGVsc2UgewoJCQkJCSsrJGdyb3VwX3BvczsKCQkJCX0KCQkJfQoJCX0KCQlpZiAoJGdyb3VwX3BvcyA+IDEpIHsKCQkJJHR1cGxlICs9ICRwb3c4NVsoJGdyb3VwX3BvcyAtIDEpXTsKCQl9CgkJLy8gbGFzdCB0dXBsZSAoaWYgYW55KQoJCXN3aXRjaCAoJGdyb3VwX3BvcykgewoJCQljYXNlIDQ6IHsKCQkJCSRkZWNvZGVkIC49IGNocigkdHVwbGUgPj4gMjQpLmNocigkdHVwbGUgPj4gMTYpLmNocigkdHVwbGUgPj4gOCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDM6IHsKCQkJCSRkZWNvZGVkIC49IGNocigkdHVwbGUgPj4gMjQpLmNocigkdHVwbGUgPj4gMTYpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAyOiB7CgkJCQkkZGVjb2RlZCAuPSBjaHIoJHR1cGxlID4+IDI0KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMTogewoJCQkJc2VsZjo6RXJyb3IoJ2RlY29kZUZpbHRlckFTQ0lJODVEZWNvZGU6IGludmFsaWQgY29kZScpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJcmV0dXJuICRkZWNvZGVkOwoJfQoKCS8qKgoJICogTFpXRGVjb2RlCgkgKiBEZWNvbXByZXNzZXMgZGF0YSBlbmNvZGVkIHVzaW5nIHRoZSBMWlcgKExlbXBlbC1aaXYtV2VsY2gpIGFkYXB0aXZlIGNvbXByZXNzaW9uIG1ldGhvZCwgcmVwcm9kdWNpbmcgdGhlIG9yaWdpbmFsIHRleHQgb3IgYmluYXJ5IGRhdGEuCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgRGF0YSB0byBkZWNvZGUuCgkgKiBAcmV0dXJuIERlY29kZWQgZGF0YSBzdHJpbmcuCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNS0yMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlRmlsdGVyTFpXRGVjb2RlKCRkYXRhKSB7CgkJLy8gaW50aWFsaXplIHN0cmluZyB0byByZXR1cm4KCQkkZGVjb2RlZCA9ICcnOwoJCS8vIGRhdGEgbGVuZ3RoCgkJJGRhdGFfbGVuZ3RoID0gc3RybGVuKCRkYXRhKTsKCQkvLyBjb252ZXJ0IHN0cmluZyB0byBiaW5hcnkgc3RyaW5nCgkJJGJpdHN0cmluZyA9ICcnOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRkYXRhX2xlbmd0aDsgKyskaSkgewoJCQkkYml0c3RyaW5nIC49IHNwcmludGYoJyUwOGInLCBvcmQoJGRhdGF7JGl9KSk7CgkJfQoJCS8vIGdldCB0aGUgbnVtYmVyIG9mIGJpdHMKCQkkZGF0YV9sZW5ndGggPSBzdHJsZW4oJGJpdHN0cmluZyk7CgkJLy8gaW5pdGlhbGl6ZSBjb2RlIGxlbmd0aCBpbiBiaXRzCgkJJGJpdGxlbiA9IDk7CgkJLy8gaW5pdGlhbGl6ZSBkaWN0aW9uYXJ5IGluZGV4CgkJJGRpeCA9IDI1ODsKCQkvLyBpbml0aWFsaXplIHRoZSBkaWN0aW9uYXJ5ICh3aXRoIHRoZSBmaXJzdCAyNTYgZW50cmllcykuCgkJJGRpY3Rpb25hcnkgPSBhcnJheSgpOwoJCWZvciAoJGkgPSAwOyAkaSA8IDI1NjsgKyskaSkgewoJCQkkZGljdGlvbmFyeVskaV0gPSBjaHIoJGkpOwoJCX0KCQkvLyBwcmV2aW91cyB2YWwKCQkkcHJldl9pbmRleCA9IDA7CgkJLy8gd2hpbGUgd2UgZW5jb3VudGVyIEVPRCBtYXJrZXIgKDI1NyksIHJlYWQgY29kZV9sZW5ndGggYml0cwoJCXdoaWxlICgoJGRhdGFfbGVuZ3RoID4gMCkgQU5EICgoJGluZGV4ID0gYmluZGVjKHN1YnN0cigkYml0c3RyaW5nLCAwLCAkYml0bGVuKSkpICE9IDI1NykpIHsKCQkJLy8gcmVtb3ZlIHJlYWQgYml0cyBmcm9tIHN0cmluZwoJCQkkYml0c3RyaW5nID0gc3Vic3RyKCRiaXRzdHJpbmcsICRiaXRsZW4pOwoJCQkvLyB1cGRhdGUgbnVtYmVyIG9mIGJpdHMKCQkJJGRhdGFfbGVuZ3RoIC09ICRiaXRsZW47CgkJCWlmICgkaW5kZXggPT0gMjU2KSB7IC8vIGNsZWFyLXRhYmxlIG1hcmtlcgoJCQkJLy8gcmVzZXQgY29kZSBsZW5ndGggaW4gYml0cwoJCQkJJGJpdGxlbiA9IDk7CgkJCQkvLyByZXNldCBkaWN0aW9uYXJ5IGluZGV4CgkJCQkkZGl4ID0gMjU4OwoJCQkJJHByZXZfaW5kZXggPSAyNTY7CgkJCQkvLyByZXNldCB0aGUgZGljdGlvbmFyeSAod2l0aCB0aGUgZmlyc3QgMjU2IGVudHJpZXMpLgoJCQkJJGRpY3Rpb25hcnkgPSBhcnJheSgpOwoJCQkJZm9yICgkaSA9IDA7ICRpIDwgMjU2OyArKyRpKSB7CgkJCQkJJGRpY3Rpb25hcnlbJGldID0gY2hyKCRpKTsKCQkJCX0KCQkJfSBlbHNlaWYgKCRwcmV2X2luZGV4ID09IDI1NikgewoJCQkJLy8gZmlyc3QgZW50cnkKCQkJCSRkZWNvZGVkIC49ICRkaWN0aW9uYXJ5WyRpbmRleF07CgkJCQkkcHJldl9pbmRleCA9ICRpbmRleDsKCQkJfSBlbHNlIHsKCQkJCS8vIGNoZWNrIGlmIGluZGV4IGV4aXN0IGluIHRoZSBkaWN0aW9uYXJ5CgkJCQlpZiAoJGluZGV4IDwgJGRpeCkgewoJCQkJCS8vIGluZGV4IGV4aXN0IG9uIGRpY3Rpb25hcnkKCQkJCQkkZGVjb2RlZCAuPSAkZGljdGlvbmFyeVskaW5kZXhdOwoJCQkJCSRkaWNfdmFsID0gJGRpY3Rpb25hcnlbJHByZXZfaW5kZXhdLiRkaWN0aW9uYXJ5WyRpbmRleF1bMF07CgkJCQkJLy8gc3RvcmUgY3VycmVudCBpbmRleAoJCQkJCSRwcmV2X2luZGV4ID0gJGluZGV4OwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBpbmRleCBkbyBub3QgZXhpc3Qgb24gZGljdGlvbmFyeQoJCQkJCSRkaWNfdmFsID0gJGRpY3Rpb25hcnlbJHByZXZfaW5kZXhdLiRkaWN0aW9uYXJ5WyRwcmV2X2luZGV4XVswXTsKCQkJCQkkZGVjb2RlZCAuPSAkZGljX3ZhbDsKCQkJCX0KCQkJCS8vIHVwZGF0ZSBkaWN0aW9uYXJ5CgkJCQkkZGljdGlvbmFyeVskZGl4XSA9ICRkaWNfdmFsOwoJCQkJKyskZGl4OwoJCQkJLy8gY2hhbmdlIGJpdCBsZW5ndGggYnkgY2FzZQoJCQkJaWYgKCRkaXggPT0gMjA0NykgewoJCQkJCSRiaXRsZW4gPSAxMjsKCQkJCX0gZWxzZWlmICgkZGl4ID09IDEwMjMpIHsKCQkJCQkkYml0bGVuID0gMTE7CgkJCQl9IGVsc2VpZiAoJGRpeCA9PSA1MTEpIHsKCQkJCQkkYml0bGVuID0gMTA7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRkZWNvZGVkOwoJfQoKCS8qKgoJICogRmxhdGVEZWNvZGUKCSAqIERlY29tcHJlc3NlcyBkYXRhIGVuY29kZWQgdXNpbmcgdGhlIHpsaWIvZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QsIHJlcHJvZHVjaW5nIHRoZSBvcmlnaW5hbCB0ZXh0IG9yIGJpbmFyeSBkYXRhLgoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIERhdGEgdG8gZGVjb2RlLgoJICogQHJldHVybiBEZWNvZGVkIGRhdGEgc3RyaW5nLgoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZUZpbHRlckZsYXRlRGVjb2RlKCRkYXRhKSB7CgkJLy8gaW50aWFsaXplIHN0cmluZyB0byByZXR1cm4KCQkkZGVjb2RlZCA9IEBnenVuY29tcHJlc3MoJGRhdGEpOwoJCWlmICgkZGVjb2RlZCA9PT0gZmFsc2UpIHsKCQkJc2VsZjo6RXJyb3IoJ2RlY29kZUZpbHRlckZsYXRlRGVjb2RlOiBpbnZhbGlkIGNvZGUnKTsKCQl9CgkJcmV0dXJuICRkZWNvZGVkOwoJfQoKCS8qKgoJICogUnVuTGVuZ3RoRGVjb2RlCgkgKiBEZWNvbXByZXNzZXMgZGF0YSBlbmNvZGVkIHVzaW5nIGEgYnl0ZS1vcmllbnRlZCBydW4tbGVuZ3RoIGVuY29kaW5nIGFsZ29yaXRobS4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBEYXRhIHRvIGRlY29kZS4KCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTIzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVGaWx0ZXJSdW5MZW5ndGhEZWNvZGUoJGRhdGEpIHsKCQkvLyBpbnRpYWxpemUgc3RyaW5nIHRvIHJldHVybgoJCSRkZWNvZGVkID0gJyc7CgkJLy8gZGF0YSBsZW5ndGgKCQkkZGF0YV9sZW5ndGggPSBzdHJsZW4oJGRhdGEpOwoJCSRpID0gMDsKCQl3aGlsZSgkaSA8ICRkYXRhX2xlbmd0aCkgewoJCQkvLyBnZXQgY3VycmVudCBieXRlIHZhbHVlCgkJCSRieXRlID0gb3JkKCRkYXRheyRpfSk7CgkJCWlmICgkYnl0ZSA9PSAxMjgpIHsKCQkJCS8vIGEgbGVuZ3RoIHZhbHVlIG9mIDEyOCBkZW5vdGUgRU9ECgkJCQlicmVhazsKCQkJfSBlbHNlaWYgKCRieXRlIDwgMTI4KSB7CgkJCQkvLyBpZiB0aGUgbGVuZ3RoIGJ5dGUgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMTI3CgkJCQkvLyB0aGUgZm9sbG93aW5nIGxlbmd0aCArIDEgKDEgdG8gMTI4KSBieXRlcyBzaGFsbCBiZSBjb3BpZWQgbGl0ZXJhbGx5IGR1cmluZyBkZWNvbXByZXNzaW9uCgkJCQkkZGVjb2RlZCAuPSBzdWJzdHIoJGRhdGEsICgkaSArIDEpLCAoJGJ5dGUgKyAxKSk7CgkJCQkvLyBtb3ZlIHRvIG5leHQgYmxvY2sKCQkJCSRpICs9ICgkYnl0ZSArIDIpOwoJCQl9IGVsc2UgewoJCQkJLy8gaWYgbGVuZ3RoIGlzIGluIHRoZSByYW5nZSAxMjkgdG8gMjU1LAoJCQkJLy8gdGhlIGZvbGxvd2luZyBzaW5nbGUgYnl0ZSBzaGFsbCBiZSBjb3BpZWQgMjU3IC0gbGVuZ3RoICgyIHRvIDEyOCkgdGltZXMgZHVyaW5nIGRlY29tcHJlc3Npb24KCQkJCSRkZWNvZGVkIC49IHN0cl9yZXBlYXQoJGRhdGF7KCRpICsgMSl9LCAoMjU3IC0gJGJ5dGUpKTsKCQkJCS8vIG1vdmUgdG8gbmV4dCBibG9jawoJCQkJJGkgKz0gMjsKCQkJfQoJCX0KCQlyZXR1cm4gJGRlY29kZWQ7Cgl9CgoJLyoqCgkgKiBDQ0lUVEZheERlY29kZSAoTk9UIElNUExFTUVURUQgLSBSRVRVUk4gQU4gRVhDRVBUSU9OKQoJICogRGVjb21wcmVzc2VzIGRhdGEgZW5jb2RlZCB1c2luZyB0aGUgQ0NJVFQgZmFjc2ltaWxlIHN0YW5kYXJkLCByZXByb2R1Y2luZyB0aGUgb3JpZ2luYWwgZGF0YSAodHlwaWNhbGx5IG1vbm9jaHJvbWUgaW1hZ2UgZGF0YSBhdCAxIGJpdCBwZXIgcGl4ZWwpLgoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIERhdGEgdG8gZGVjb2RlLgoJICogQHJldHVybiBEZWNvZGVkIGRhdGEgc3RyaW5nLgoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGRlY29kZUZpbHRlckNDSVRURmF4RGVjb2RlKCRkYXRhKSB7CgkJc2VsZjo6RXJyb3IoJ35kZWNvZGVGaWx0ZXJDQ0lUVEZheERlY29kZTogdGhpcyBtZXRob2QgaGFzIG5vdCBiZWVuIHlldCBpbXBsZW1lbnRlZCcpOwoJCS8vcmV0dXJuICRkYXRhOwoJfQoKCS8qKgoJICogSkJJRzJEZWNvZGUgKE5PVCBJTVBMRU1FVEVEIC0gUkVUVVJOIEFOIEVYQ0VQVElPTikKCSAqIERlY29tcHJlc3NlcyBkYXRhIGVuY29kZWQgdXNpbmcgdGhlIEpCSUcyIHN0YW5kYXJkLCByZXByb2R1Y2luZyB0aGUgb3JpZ2luYWwgbW9ub2Nocm9tZSAoMSBiaXQgcGVyIHBpeGVsKSBpbWFnZSBkYXRhIChvciBhbiBhcHByb3hpbWF0aW9uIG9mIHRoYXQgZGF0YSkuCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgRGF0YSB0byBkZWNvZGUuCgkgKiBAcmV0dXJuIERlY29kZWQgZGF0YSBzdHJpbmcuCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNS0yMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlRmlsdGVySkJJRzJEZWNvZGUoJGRhdGEpIHsKCQlzZWxmOjpFcnJvcignfmRlY29kZUZpbHRlckpCSUcyRGVjb2RlOiB0aGlzIG1ldGhvZCBoYXMgbm90IGJlZW4geWV0IGltcGxlbWVudGVkJyk7CgkJLy9yZXR1cm4gJGRhdGE7Cgl9CgoJLyoqCgkgKiBEQ1REZWNvZGUgKE5PVCBJTVBMRU1FVEVEIC0gUkVUVVJOIEFOIEVYQ0VQVElPTikKCSAqIERlY29tcHJlc3NlcyBkYXRhIGVuY29kZWQgdXNpbmcgYSBEQ1QgKGRpc2NyZXRlIGNvc2luZSB0cmFuc2Zvcm0pIHRlY2huaXF1ZSBiYXNlZCBvbiB0aGUgSlBFRyBzdGFuZGFyZCwgcmVwcm9kdWNpbmcgaW1hZ2Ugc2FtcGxlIGRhdGEgdGhhdCBhcHByb3hpbWF0ZXMgdGhlIG9yaWdpbmFsIGRhdGEuCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgRGF0YSB0byBkZWNvZGUuCgkgKiBAcmV0dXJuIERlY29kZWQgZGF0YSBzdHJpbmcuCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNS0yMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlRmlsdGVyRENURGVjb2RlKCRkYXRhKSB7CgkJc2VsZjo6RXJyb3IoJ35kZWNvZGVGaWx0ZXJEQ1REZWNvZGU6IHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiB5ZXQgaW1wbGVtZW50ZWQnKTsKCQkvL3JldHVybiAkZGF0YTsKCX0KCgkvKioKCSAqIEpQWERlY29kZSAoTk9UIElNUExFTUVURUQgLSBSRVRVUk4gQU4gRVhDRVBUSU9OKQoJICogRGVjb21wcmVzc2VzIGRhdGEgZW5jb2RlZCB1c2luZyB0aGUgd2F2ZWxldC1iYXNlZCBKUEVHMjAwMCBzdGFuZGFyZCwgcmVwcm9kdWNpbmcgdGhlIG9yaWdpbmFsIGltYWdlIGRhdGEuCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgRGF0YSB0byBkZWNvZGUuCgkgKiBAcmV0dXJuIERlY29kZWQgZGF0YSBzdHJpbmcuCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNS0yMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZGVjb2RlRmlsdGVySlBYRGVjb2RlKCRkYXRhKSB7CgkJc2VsZjo6RXJyb3IoJ35kZWNvZGVGaWx0ZXJKUFhEZWNvZGU6IHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiB5ZXQgaW1wbGVtZW50ZWQnKTsKCQkvL3JldHVybiAkZGF0YTsKCX0KCgkvKioKCSAqIENyeXB0IChOT1QgSU1QTEVNRVRFRCAtIFJFVFVSTiBBTiBFWENFUFRJT04pCgkgKiBEZWNyeXB0cyBkYXRhIGVuY3J5cHRlZCBieSBhIHNlY3VyaXR5IGhhbmRsZXIsIHJlcHJvZHVjaW5nIHRoZSBkYXRhIGFzIGl0IHdhcyBiZWZvcmUgZW5jcnlwdGlvbi4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBEYXRhIHRvIGRlY29kZS4KCSAqIEByZXR1cm4gRGVjb2RlZCBkYXRhIHN0cmluZy4KCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTIzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBkZWNvZGVGaWx0ZXJDcnlwdCgkZGF0YSkgewoJCXNlbGY6OkVycm9yKCd+ZGVjb2RlRmlsdGVyQ3J5cHQ6IHRoaXMgbWV0aG9kIGhhcyBub3QgYmVlbiB5ZXQgaW1wbGVtZW50ZWQnKTsKCQkvL3JldHVybiAkZGF0YTsKCX0KCgkvLyAtLS0gRU5EIEZJTFRFUlMgU0VDVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBUaHJvdyBhbiBleGNlcHRpb24uCgkgKiBAcGFyYW0gJG1zZyAoc3RyaW5nKSBUaGUgZXJyb3IgbWVzc2FnZQoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIEVycm9yKCRtc2cpIHsKCQl0aHJvdyBuZXcgRXhjZXB0aW9uKCdUQ1BERl9QQVJTRVIgRVJST1I6ICcuJG1zZyk7Cgl9Cgp9IC8vIEVORCBPRiBUQ1BERl9GSUxURVJTIENMQVNTCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_fonts.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfZm9udHMucGhwCi8vIFZlcnNpb24gICAgIDogMS4wLjAxMQovLyBCZWdpbiAgICAgICA6IDIwMDgtMDEtMDEKLy8gTGFzdCBVcGRhdGUgOiAyMDE0LTAxLTAzCi8vIEF1dGhvciAgICAgIDogTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFREIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQovLyBMaWNlbnNlICAgICA6IEdOVS1MR1BMIHYzIChodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwpCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTQgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDpGb250IG1ldGhvZHMgZm9yIFRDUERGIGxpYnJhcnkuCi8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwoKLyoqCiAqIEBmaWxlCiAqIFVuaWNvZGUgZGF0YSBhbmQgZm9udCBtZXRob2RzIGZvciBUQ1BERiBsaWJyYXJ5LgogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKi8KCi8qKgogKiBAY2xhc3MgVENQREZfRk9OVFMKICogRm9udCBtZXRob2RzIGZvciBUQ1BERiBsaWJyYXJ5LgogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAdmVyc2lvbiAxLjAuMDExCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pIC0gaW5mb0B0ZWNuaWNrLmNvbQogKi8KY2xhc3MgVENQREZfRk9OVFMgewoKCS8qKgoJICogU3RhdGljIGNhY2hlIHVzZWQgZm9yIHNwZWVkIHVwIHVuaW9yZCBwZXJmb3JtYW5jZXMKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIHN0YXRpYyAkY2FjaGVfdW5pb3JkID0gYXJyYXkoKTsKCgkvKioKCSAqIENvbnZlcnQgYW5kIGFkZCB0aGUgc2VsZWN0ZWQgVHJ1ZVR5cGUgb3IgVHlwZTEgZm9udCB0byB0aGUgZm9udHMgZm9sZGVyICh0aGF0IG11c3QgYmUgd3JpdGVhYmxlKS4KCSAqIEBwYXJhbSAkZm9udGZpbGUgKHN0cmluZykgRm9udCBmaWxlIChmdWxsIHBhdGgpLgoJICogQHBhcmFtICRmb250dHlwZSAoc3RyaW5nKSBGb250IHR5cGUuIExlYXZlIGVtcHR5IGZvciBhdXRvZGV0ZWN0IG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6IFRydWVUeXBlVW5pY29kZSwgVHJ1ZVR5cGUsIFR5cGUxLCBDSUQwSlAgPSBDSUQtMCBKYXBhbmVzZSwgQ0lEMEtSID0gQ0lELTAgS29yZWFuLCBDSUQwQ1MgPSBDSUQtMCBDaGluZXNlIFNpbXBsaWZpZWQsIENJRDBDVCA9IENJRC0wIENoaW5lc2UgVHJhZGl0aW9uYWwuCgkgKiBAcGFyYW0gJGVuYyAoc3RyaW5nKSBOYW1lIG9mIHRoZSBlbmNvZGluZyB0YWJsZSB0byB1c2UuIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0IG1vZGUuIE9taXQgdGhpcyBwYXJhbWV0ZXIgZm9yIFRydWVUeXBlIFVuaWNvZGUgYW5kIHN5bWJvbGljIGZvbnRzIGxpa2UgU3ltYm9sIG9yIFphcGZEaW5nQmF0cy4KCSAqIEBwYXJhbSAkZmxhZ3MgKGludCkgVW5zaWduZWQgMzItYml0IGludGVnZXIgY29udGFpbmluZyBmbGFncyBzcGVjaWZ5aW5nIHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBmb250IChQREYzMjAwMDoyMDA4IC0gOS44LjIgRm9udCBEZXNjcmlwdG9yIEZsYWdzKTogKzEgZm9yIGZpeGVkIGZvbnQ7ICs0IGZvciBzeW1ib2wgb3IgKzMyIGZvciBub24tc3ltYm9sOyArNjQgZm9yIGl0YWxpYy4gRml4ZWQgYW5kIEl0YWxpYyBtb2RlIGFyZSBnZW5lcmFsbHkgYXV0b2RldGVjdGVkIHNvIHlvdSBoYXZlIHRvIHNldCBpdCB0byAzMiA9IG5vbi1zeW1ib2xpYyBmb250IChkZWZhdWx0KSBvciA0ID0gc3ltYm9saWMgZm9udC4KCSAqIEBwYXJhbSAkb3V0cGF0aCAoc3RyaW5nKSBPdXRwdXQgcGF0aCBmb3IgZ2VuZXJhdGVkIGZvbnQgZmlsZXMgKG11c3QgYmUgd3JpdGVhYmxlIGJ5IHRoZSB3ZWIgc2VydmVyKS4gTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgZm9udCBmb2xkZXIuCgkgKiBAcGFyYW0gJHBsYXRpZCAoaW50KSBQbGF0Zm9ybSBJRCBmb3IgQ01BUCB0YWJsZSB0byBleHRyYWN0ICh3aGVuIGJ1aWxkaW5nIGEgVW5pY29kZSBmb250IGZvciBXaW5kb3dzIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDMsIGZvciBNYWNpbnRvc2ggc2hvdWxkIGJlIDEpLgoJICogQHBhcmFtICRlbmNpZCAoaW50KSBFbmNvZGluZyBJRCBmb3IgQ01BUCB0YWJsZSB0byBleHRyYWN0ICh3aGVuIGJ1aWxkaW5nIGEgVW5pY29kZSBmb250IGZvciBXaW5kb3dzIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDEsIGZvciBNYWNpbnRvc2ggc2hvdWxkIGJlIDApLiBXaGVuIFBsYXRmb3JtIElEIGlzIDMsIGxlZ2FsIHZhbHVlcyBmb3IgRW5jb2RpbmcgSUQgYXJlOiAwPVN5bWJvbCwgMT1Vbmljb2RlLCAyPVNoaWZ0SklTLCAzPVBSQywgND1CaWc1LCA1PVdhbnN1bmcsIDY9Sm9oYWIsIDc9UmVzZXJ2ZWQsIDg9UmVzZXJ2ZWQsIDk9UmVzZXJ2ZWQsIDEwPVVDUy00LgoJICogQHBhcmFtICRhZGRjYmJveCAoYm9vbGVhbikgSWYgdHJ1ZSBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGJvdW5kaW5nIGJveCBpbmZvcm1hdGlvbiBvbiB0aGUgcGhwIGZvbnQgZmlsZS4KCSAqIEBwYXJhbSAkbGluayAoYm9vbGVhbikgSWYgdHJ1ZSBsaW5rIHRvIHN5c3RlbSBmb250IGluc3RlYWQgb2YgY29weWluZyB0aGUgZm9udCBkYXRhIChub3QgdHJhbnNwb3J0YWJsZSkgLSBOb3RlOiBkbyBub3Qgd29yayB3aXRoIFR5cGUxIGZvbnRzLgoJICogQHJldHVybiAoc3RyaW5nKSBUQ1BERiBmb250IG5hbWUgb3IgYm9vbGVhbiBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjkuMTIzICgyMDEwLTA5LTMwKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhZGRUVEZmb250KCRmb250ZmlsZSwgJGZvbnR0eXBlPScnLCAkZW5jPScnLCAkZmxhZ3M9MzIsICRvdXRwYXRoPScnLCAkcGxhdGlkPTMsICRlbmNpZD0xLCAkYWRkY2Jib3g9ZmFsc2UsICRsaW5rPWZhbHNlKSB7CgkJaWYgKCFmaWxlX2V4aXN0cygkZm9udGZpbGUpKSB7CgkJCS8vIENvdWxkIG5vdCBmaW5kIGZpbGUKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBmb250IG1ldHJpY3MKCQkkZm1ldHJpYyA9IGFycmF5KCk7CgkJLy8gYnVpbGQgbmV3IGZvbnQgbmFtZSBmb3IgVENQREYgY29tcGF0aWJpbGl0eQoJCSRmb250X3BhdGhfcGFydHMgPSBwYXRoaW5mbygkZm9udGZpbGUpOwoJCWlmICghaXNzZXQoJGZvbnRfcGF0aF9wYXJ0c1snZmlsZW5hbWUnXSkpIHsKCQkJJGZvbnRfcGF0aF9wYXJ0c1snZmlsZW5hbWUnXSA9IHN1YnN0cigkZm9udF9wYXRoX3BhcnRzWydiYXNlbmFtZSddLCAwLCAtKHN0cmxlbigkZm9udF9wYXRoX3BhcnRzWydleHRlbnNpb24nXSkgKyAxKSk7CgkJfQoJCSRmb250X25hbWUgPSBzdHJ0b2xvd2VyKCRmb250X3BhdGhfcGFydHNbJ2ZpbGVuYW1lJ10pOwoJCSRmb250X25hbWUgPSBwcmVnX3JlcGxhY2UoJy9bXmEtejAtOV9dLycsICcnLCAkZm9udF9uYW1lKTsKCQkkc2VhcmNoICA9IGFycmF5KCdib2xkJywgJ29ibGlxdWUnLCAnaXRhbGljJywgJ3JlZ3VsYXInKTsKCQkkcmVwbGFjZSA9IGFycmF5KCdiJywgJ2knLCAnaScsICcnKTsKCQkkZm9udF9uYW1lID0gc3RyX3JlcGxhY2UoJHNlYXJjaCwgJHJlcGxhY2UsICRmb250X25hbWUpOwoJCWlmIChlbXB0eSgkZm9udF9uYW1lKSkgewoJCQkvLyBzZXQgZ2VuZXJpYyBuYW1lCgkJCSRmb250X25hbWUgPSAndGNwZGZmb250JzsKCQl9CgkJLy8gc2V0IG91dHB1dCBwYXRoCgkJaWYgKGVtcHR5KCRvdXRwYXRoKSkgewoJCQkkb3V0cGF0aCA9IHNlbGY6Ol9nZXRmb250cGF0aCgpOwoJCX0KCQkvLyBjaGVjayBpZiB0aGlzIGZvbnQgYWxyZWFkeSBleGlzdAoJCWlmIChAZmlsZV9leGlzdHMoJG91dHBhdGguJGZvbnRfbmFtZS4nLnBocCcpKSB7CgkJCS8vIHRoaXMgZm9udCBhbHJlYWR5IGV4aXN0IChkZWxldGUgaXQgZnJvbSBmb250cyBmb2xkZXIgdG8gcmVidWlsZCBpdCkKCQkJcmV0dXJuICRmb250X25hbWU7CgkJfQoJCSRmbWV0cmljWydmaWxlJ10gPSAkZm9udF9uYW1lOwoJCSRmbWV0cmljWydjdGcnXSA9ICRmb250X25hbWUuJy5jdGcueic7CgkJLy8gZ2V0IGZvbnQgZGF0YQoJCSRmb250ID0gZmlsZV9nZXRfY29udGVudHMoJGZvbnRmaWxlKTsKCQkkZm1ldHJpY1snb3JpZ2luYWxzaXplJ10gPSBzdHJsZW4oJGZvbnQpOwoJCS8vIGF1dG9kZXRlY3QgZm9udCB0eXBlCgkJaWYgKGVtcHR5KCRmb250dHlwZSkpIHsKCQkJaWYgKFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAwKSA9PSAweDEwMDAwKSB7CgkJCQkvLyBUcnVlIFR5cGUgKFVuaWNvZGUgb3Igbm90KQoJCQkJJGZvbnR0eXBlID0gJ1RydWVUeXBlVW5pY29kZSc7CgkJCX0gZWxzZWlmIChzdWJzdHIoJGZvbnQsIDAsIDQpID09ICdPVFRPJykgewoJCQkJLy8gT3BlbiBUeXBlIChVbmljb2RlIG9yIG5vdCkKCQkJCS8vVW5zdXBwb3J0ZWQgZm9udCBmb3JtYXQ6IE9wZW5UeXBlIHdpdGggQ0ZGIGRhdGEKCQkJCXJldHVybiBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCS8vIFR5cGUgMQoJCQkJJGZvbnR0eXBlID0gJ1R5cGUxJzsKCQkJfQoJCX0KCQkvLyBzZXQgZm9udCB0eXBlCgkJc3dpdGNoICgkZm9udHR5cGUpIHsKCQkJY2FzZSAnQ0lEMENUJzoKCQkJY2FzZSAnQ0lEMENTJzoKCQkJY2FzZSAnQ0lEMEtSJzoKCQkJY2FzZSAnQ0lEMEpQJzogewoJCQkJJGZtZXRyaWNbJ3R5cGUnXSA9ICdjaWRmb250MCc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdUeXBlMSc6IHsKCQkJCSRmbWV0cmljWyd0eXBlJ10gPSAnVHlwZTEnOwoJCQkJaWYgKGVtcHR5KCRlbmMpIEFORCAoKCRmbGFncyAmIDQpID09IDApKSB7CgkJCQkJJGVuYyA9ICdjcDEyNTInOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnVHJ1ZVR5cGUnOiB7CgkJCQkkZm1ldHJpY1sndHlwZSddID0gJ1RydWVUeXBlJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1RydWVUeXBlVW5pY29kZSc6CgkJCWRlZmF1bHQ6IHsKCQkJCSRmbWV0cmljWyd0eXBlJ10gPSAnVHJ1ZVR5cGVVbmljb2RlJzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCS8vIHNldCBlbmNvZGluZyBtYXBzIChpZiBhbnkpCgkJJGZtZXRyaWNbJ2VuYyddID0gcHJlZ19yZXBsYWNlKCcvW15BLVphLXowLTlfXC1dLycsICcnLCAkZW5jKTsKCQkkZm1ldHJpY1snZGlmZiddID0gJyc7CgkJaWYgKCgkZm1ldHJpY1sndHlwZSddID09ICdUcnVlVHlwZScpIE9SICgkZm1ldHJpY1sndHlwZSddID09ICdUeXBlMScpKSB7CgkJCWlmICghZW1wdHkoJGVuYykgQU5EICgkZW5jICE9ICdjcDEyNTInKSBBTkQgaXNzZXQoVENQREZfRk9OVF9EQVRBOjokZW5jbWFwWyRlbmNdKSkgewoJCQkJLy8gYnVpbGQgZGlmZmVyZW5jZXMgZnJvbSByZWZlcmVuY2UgZW5jb2RpbmcKCQkJCSRlbmNfcmVmID0gVENQREZfRk9OVF9EQVRBOjokZW5jbWFwWydjcDEyNTInXTsKCQkJCSRlbmNfdGFyZ2V0ID0gVENQREZfRk9OVF9EQVRBOjokZW5jbWFwWyRlbmNdOwoJCQkJJGxhc3QgPSAwOwoJCQkJZm9yICgkaSA9IDMyOyAkaSA8PSAyNTU7ICsrJGkpIHsKCQkJCQlpZiAoJGVuY190YXJnZXQgIT0gJGVuY19yZWZbJGldKSB7CgkJCQkJCWlmICgkaSAhPSAoJGxhc3QgKyAxKSkgewoJCQkJCQkJJGZtZXRyaWNbJ2RpZmYnXSAuPSAkaS4nICc7CgkJCQkJCX0KCQkJCQkJJGxhc3QgPSAkaTsKCQkJCQkJJGZtZXRyaWNbJ2RpZmYnXSAuPSAnLycuJGVuY190YXJnZXRbJGldLicgJzsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLy8gcGFyc2UgdGhlIGZvbnQgYnkgdHlwZQoJCWlmICgkZm1ldHJpY1sndHlwZSddID09ICdUeXBlMScpIHsKCQkJLy8gLS0tLS0tLS0tLSBUWVBFIDEgLS0tLS0tLS0tLQoJCQkvLyByZWFkIGZpcnN0IHNlZ21lbnQKCQkJJGEgPSB1bnBhY2soJ0NtYXJrZXIvQ3R5cGUvVnNpemUnLCBzdWJzdHIoJGZvbnQsIDAsIDYpKTsKCQkJaWYgKCRhWydtYXJrZXInXSAhPSAxMjgpIHsKCQkJCS8vIEZvbnQgZmlsZSBpcyBub3QgYSB2YWxpZCBiaW5hcnkgVHlwZTEKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkZm1ldHJpY1snc2l6ZTEnXSA9ICRhWydzaXplJ107CgkJCSRkYXRhID0gc3Vic3RyKCRmb250LCA2LCAkZm1ldHJpY1snc2l6ZTEnXSk7CgkJCS8vIHJlYWQgc2Vjb25kIHNlZ21lbnQKCQkJJGEgPSB1bnBhY2soJ0NtYXJrZXIvQ3R5cGUvVnNpemUnLCBzdWJzdHIoJGZvbnQsICg2ICsgJGZtZXRyaWNbJ3NpemUxJ10pLCA2KSk7CgkJCWlmICgkYVsnbWFya2VyJ10gIT0gMTI4KSB7CgkJCQkvLyBGb250IGZpbGUgaXMgbm90IGEgdmFsaWQgYmluYXJ5IFR5cGUxCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJJGZtZXRyaWNbJ3NpemUyJ10gPSAkYVsnc2l6ZSddOwoJCQkkZW5jcnlwdGVkID0gc3Vic3RyKCRmb250LCAoMTIgKyAkZm1ldHJpY1snc2l6ZTEnXSksICRmbWV0cmljWydzaXplMiddKTsKCQkJJGRhdGEgLj0gJGVuY3J5cHRlZDsKCQkJLy8gc3RvcmUgY29tcHJlc3NlZCBmb250CgkJCSRmbWV0cmljWydmaWxlJ10gLj0gJy56JzsKCQkJJGZwID0gZm9wZW4oJG91dHBhdGguJGZtZXRyaWNbJ2ZpbGUnXSwgJ3diJyk7CgkJCWZ3cml0ZSgkZnAsIGd6Y29tcHJlc3MoJGRhdGEpKTsKCQkJZmNsb3NlKCRmcCk7CgkJCS8vIGdldCBmb250IGluZm8KCQkJJGZtZXRyaWNbJ0ZsYWdzJ10gPSAkZmxhZ3M7CgkJCXByZWdfbWF0Y2ggKCcjL0Z1bGxOYW1lW1xzXSpcKChbXlwpXSopIycsICRmb250LCAkbWF0Y2hlcyk7CgkJCSRmbWV0cmljWyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWjAtOV9cLV0vJywgJycsICRtYXRjaGVzWzFdKTsKCQkJcHJlZ19tYXRjaCgnIy9Gb250QkJveFtcc10qeyhbXn1dKikjJywgJGZvbnQsICRtYXRjaGVzKTsKCQkJJGZtZXRyaWNbJ2Jib3gnXSA9IHRyaW0oJG1hdGNoZXNbMV0pOwoJCQkkYnYgPSBleHBsb2RlKCcgJywgJGZtZXRyaWNbJ2Jib3gnXSk7CgkJCSRmbWV0cmljWydBc2NlbnQnXSA9IGludHZhbCgkYnZbM10pOwoJCQkkZm1ldHJpY1snRGVzY2VudCddID0gaW50dmFsKCRidlsxXSk7CgkJCXByZWdfbWF0Y2goJyMvSXRhbGljQW5nbGVbXHNdKihbMC05XCtcLV0qKSMnLCAkZm9udCwgJG1hdGNoZXMpOwoJCQkkZm1ldHJpY1snaXRhbGljQW5nbGUnXSA9IGludHZhbCgkbWF0Y2hlc1sxXSk7CgkJCWlmICgkZm1ldHJpY1snaXRhbGljQW5nbGUnXSAhPSAwKSB7CgkJCQkkZm1ldHJpY1snRmxhZ3MnXSB8PSA2NDsKCQkJfQoJCQlwcmVnX21hdGNoKCcjL1VuZGVybGluZVBvc2l0aW9uW1xzXSooWzAtOVwrXC1dKikjJywgJGZvbnQsICRtYXRjaGVzKTsKCQkJJGZtZXRyaWNbJ3VuZGVybGluZVBvc2l0aW9uJ10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pOwoJCQlwcmVnX21hdGNoKCcjL1VuZGVybGluZVRoaWNrbmVzc1tcc10qKFswLTlcK1wtXSopIycsICRmb250LCAkbWF0Y2hlcyk7CgkJCSRmbWV0cmljWyd1bmRlcmxpbmVUaGlja25lc3MnXSA9IGludHZhbCgkbWF0Y2hlc1sxXSk7CgkJCXByZWdfbWF0Y2goJyMvaXNGaXhlZFBpdGNoW1xzXSooW15cc10qKSMnLCAkZm9udCwgJG1hdGNoZXMpOwoJCQlpZiAoJG1hdGNoZXNbMV0gPT0gJ3RydWUnKSB7CgkJCQkkZm1ldHJpY1snRmxhZ3MnXSB8PSAxOwoJCQl9CgkJCS8vIGdldCBpbnRlcm5hbCBtYXAKCQkJJGltYXAgPSBhcnJheSgpOwoJCQlpZiAocHJlZ19tYXRjaF9hbGwoJyNkdXBbXHNdKFswLTldKylbXHNdKi8oW15cc10qKVtcc11wdXQjc1UnLCAkZm9udCwgJGZtYXAsIFBSRUdfU0VUX09SREVSKSA+IDApIHsKCQkJCWZvcmVhY2ggKCRmbWFwIGFzICR2KSB7CgkJCQkJJGltYXBbJHZbMl1dID0gJHZbMV07CgkJCQl9CgkJCX0KCQkJLy8gZGVjcnlwdCBlZXhlYyBlbmNyeXB0ZWQgcGFydAoJCQkkciA9IDU1NjY1OyAvLyBlZXhlYyBlbmNyeXB0aW9uIGNvbnN0YW50CgkJCSRjMSA9IDUyODQ1OwoJCQkkYzIgPSAyMjcxOTsKCQkJJGVsZW4gPSBzdHJsZW4oJGVuY3J5cHRlZCk7CgkJCSRlcGxhaW4gPSAnJzsKCQkJZm9yICgkaSA9IDA7ICRpIDwgJGVsZW47ICsrJGkpIHsKCQkJCSRjaHIgPSBvcmQoJGVuY3J5cHRlZFskaV0pOwoJCQkJJGVwbGFpbiAuPSBjaHIoJGNociBeICgkciA+PiA4KSk7CgkJCQkkciA9ICgoKCRjaHIgKyAkcikgKiAkYzEgKyAkYzIpICUgNjU1MzYpOwoJCQl9CgkJCWlmIChwcmVnX21hdGNoKCcjL0ZvcmNlQm9sZFtcc10qKFteXHNdKikjJywgJGVwbGFpbiwgJG1hdGNoZXMpID4gMCkgewoJCQkJaWYgKCRtYXRjaGVzWzFdID09ICd0cnVlJykgewoJCQkJCSRmbWV0cmljWydGbGFncyddIHw9IDB4NDAwMDA7CgkJCQl9CgkJCX0KCQkJaWYgKHByZWdfbWF0Y2goJyMvU3RkVldbXHNdKlxbKFteXF1dKikjJywgJGVwbGFpbiwgJG1hdGNoZXMpID4gMCkgewoJCQkJJGZtZXRyaWNbJ1N0ZW1WJ10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pOwoJCQl9IGVsc2UgewoJCQkJJGZtZXRyaWNbJ1N0ZW1WJ10gPSA3MDsKCQkJfQoJCQlpZiAocHJlZ19tYXRjaCgnIy9TdGRIV1tcc10qXFsoW15cXV0qKSMnLCAkZXBsYWluLCAkbWF0Y2hlcykgPiAwKSB7CgkJCQkkZm1ldHJpY1snU3RlbUgnXSA9IGludHZhbCgkbWF0Y2hlc1sxXSk7CgkJCX0gZWxzZSB7CgkJCQkkZm1ldHJpY1snU3RlbUgnXSA9IDMwOwoJCQl9CgkJCWlmIChwcmVnX21hdGNoKCcjL0JsdWVWYWx1ZXNbXHNdKlxbKFteXF1dKikjJywgJGVwbGFpbiwgJG1hdGNoZXMpID4gMCkgewoJCQkJJGJ2ID0gZXhwbG9kZSgnICcsICRtYXRjaGVzWzFdKTsKCQkJCWlmIChjb3VudCgkYnYpID49IDYpIHsKCQkJCQkkdjEgPSBpbnR2YWwoJGJ2WzJdKTsKCQkJCQkkdjIgPSBpbnR2YWwoJGJ2WzRdKTsKCQkJCQlpZiAoJHYxIDw9ICR2MikgewoJCQkJCQkkZm1ldHJpY1snWEhlaWdodCddID0gJHYxOwoJCQkJCQkkZm1ldHJpY1snQ2FwSGVpZ2h0J10gPSAkdjI7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJGZtZXRyaWNbJ1hIZWlnaHQnXSA9ICR2MjsKCQkJCQkJJGZtZXRyaWNbJ0NhcEhlaWdodCddID0gJHYxOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJGZtZXRyaWNbJ1hIZWlnaHQnXSA9IDQ1MDsKCQkJCQkkZm1ldHJpY1snQ2FwSGVpZ2h0J10gPSA3MDA7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkZm1ldHJpY1snWEhlaWdodCddID0gNDUwOwoJCQkJJGZtZXRyaWNbJ0NhcEhlaWdodCddID0gNzAwOwoJCQl9CgkJCS8vIGdldCB0aGUgbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBhdCB0aGUgYmVnaW5uaW5nIG9mIGNoYXJzdHJpbmdzCgkJCWlmIChwcmVnX21hdGNoKCcjL2xlbklWW1xzXSooWzAtOV0qKSMnLCAkZXBsYWluLCAkbWF0Y2hlcykgPiAwKSB7CgkJCQkkbGVuSVYgPSBpbnR2YWwoJG1hdGNoZXNbMV0pOwoJCQl9IGVsc2UgewoJCQkJJGxlbklWID0gNDsKCQkJfQoJCQkkZm1ldHJpY1snTGVhZGluZyddID0gMDsKCQkJLy8gZ2V0IGNoYXJzdHJpbmcgZGF0YQoJCQkkZXBsYWluID0gc3Vic3RyKCRlcGxhaW4sIChzdHJwb3MoJGVwbGFpbiwgJy9DaGFyU3RyaW5ncycpICsgMSkpOwoJCQlwcmVnX21hdGNoX2FsbCgnIy8oW0EtWmEtejAtOVwuXSopW1xzXVswLTldK1tcc11SRFtcc10oLiopW1xzXU5EI3NVJywgJGVwbGFpbiwgJG1hdGNoZXMsIFBSRUdfU0VUX09SREVSKTsKCQkJaWYgKCFlbXB0eSgkZW5jKSBBTkQgaXNzZXQoVENQREZfRk9OVF9EQVRBOjokZW5jbWFwWyRlbmNdKSkgewoJCQkJJGVuY19tYXAgPSBUQ1BERl9GT05UX0RBVEE6OiRlbmNtYXBbJGVuY107CgkJCX0gZWxzZSB7CgkJCQkkZW5jX21hcCA9IGZhbHNlOwoJCQl9CgkJCSRmbWV0cmljWydjdyddID0gJyc7CgkJCSRmbWV0cmljWydNYXhXaWR0aCddID0gMDsKCQkJJGN3aWR0aHMgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkbWF0Y2hlcyBhcyAkayA9PiAkdikgewoJCQkJJGNpZCA9IDA7CgkJCQlpZiAoaXNzZXQoJGltYXBbJHZbMV1dKSkgewoJCQkJCSRjaWQgPSAkaW1hcFskdlsxXV07CgkJCQl9IGVsc2VpZiAoJGVuY19tYXAgIT09IGZhbHNlKSB7CgkJCQkJJGNpZCA9IGFycmF5X3NlYXJjaCgkdlsxXSwgJGVuY19tYXApOwoJCQkJCWlmICgkY2lkID09PSBmYWxzZSkgewoJCQkJCQkkY2lkID0gMDsKCQkJCQl9IGVsc2VpZiAoJGNpZCA+IDEwMDApIHsKCQkJCQkJJGNpZCAtPSAxMDAwOwoJCQkJCX0KCQkJCX0KCQkJCS8vIGRlY3J5cHQgY2hhcnN0cmluZyBlbmNyeXB0ZWQgcGFydAoJCQkJJHIgPSA0MzMwOyAvLyBjaGFyc3RyaW5nIGVuY3J5cHRpb24gY29uc3RhbnQKCQkJCSRjMSA9IDUyODQ1OwoJCQkJJGMyID0gMjI3MTk7CgkJCQkkY2QgPSAkdlsyXTsKCQkJCSRjbGVuID0gc3RybGVuKCRjZCk7CgkJCQkkY2NvbSA9IGFycmF5KCk7CgkJCQlmb3IgKCRpID0gMDsgJGkgPCAkY2xlbjsgKyskaSkgewoJCQkJCSRjaHIgPSBvcmQoJGNkWyRpXSk7CgkJCQkJJGNjb21bXSA9ICgkY2hyIF4gKCRyID4+IDgpKTsKCQkJCQkkciA9ICgoKCRjaHIgKyAkcikgKiAkYzEgKyAkYzIpICUgNjU1MzYpOwoJCQkJfQoJCQkJLy8gZGVjb2RlIG51bWJlcnMKCQkJCSRjZGVjID0gYXJyYXkoKTsKCQkJCSRjayA9IDA7CgkJCQkkaSA9ICRsZW5JVjsKCQkJCXdoaWxlICgkaSA8ICRjbGVuKSB7CgkJCQkJaWYgKCRjY29tWyRpXSA8IDMyKSB7CgkJCQkJCSRjZGVjWyRja10gPSAkY2NvbVskaV07CgkJCQkJCWlmICgoJGNrID4gMCkgQU5EICgkY2RlY1skY2tdID09IDEzKSkgewoJCQkJCQkJLy8gaHNidyBjb21tYW5kOiB1cGRhdGUgd2lkdGgKCQkJCQkJCSRjd2lkdGhzWyRjaWRdID0gJGNkZWNbKCRjayAtIDEpXTsKCQkJCQkJfQoJCQkJCQkrKyRpOwoJCQkJCX0gZWxzZWlmICgoJGNjb21bJGldID49IDMyKSBBTkQgKCRjY29tWyRpXSA8PSAyNDYpKSB7CgkJCQkJCSRjZGVjWyRja10gPSAoJGNjb21bJGldIC0gMTM5KTsKCQkJCQkJKyskaTsKCQkJCQl9IGVsc2VpZiAoKCRjY29tWyRpXSA+PSAyNDcpIEFORCAoJGNjb21bJGldIDw9IDI1MCkpIHsKCQkJCQkJJGNkZWNbJGNrXSA9ICgoKCRjY29tWyRpXSAtIDI0NykgKiAyNTYpICsgJGNjb21bKCRpICsgMSldICsgMTA4KTsKCQkJCQkJJGkgKz0gMjsKCQkJCQl9IGVsc2VpZiAoKCRjY29tWyRpXSA+PSAyNTEpIEFORCAoJGNjb21bJGldIDw9IDI1NCkpIHsKCQkJCQkJJGNkZWNbJGNrXSA9ICgoLSgkY2NvbVskaV0gLSAyNTEpICogMjU2KSAtICRjY29tWygkaSArIDEpXSAtIDEwOCk7CgkJCQkJCSRpICs9IDI7CgkJCQkJfSBlbHNlaWYgKCRjY29tWyRpXSA9PSAyNTUpIHsKCQkJCQkJJHN2YWwgPSBjaHIoJGNjb21bKCRpICsgMSldKS5jaHIoJGNjb21bKCRpICsgMildKS5jaHIoJGNjb21bKCRpICsgMyldKS5jaHIoJGNjb21bKCRpICsgNCldKTsKCQkJCQkJJHZzdmFsID0gdW5wYWNrKCdsaScsICRzdmFsKTsKCQkJCQkJJGNkZWNbJGNrXSA9ICR2c3ZhbFsnaSddOwoJCQkJCQkkaSArPSA1OwoJCQkJCX0KCQkJCQkrKyRjazsKCQkJCX0KCQkJfSAvLyBlbmQgZm9yIGVhY2ggbWF0Y2hlcwoJCQkkZm1ldHJpY1snTWlzc2luZ1dpZHRoJ10gPSAkY3dpZHRoc1swXTsKCQkJJGZtZXRyaWNbJ01heFdpZHRoJ10gPSAkZm1ldHJpY1snTWlzc2luZ1dpZHRoJ107CgkJCSRmbWV0cmljWydBdmdXaWR0aCddID0gMDsKCQkJLy8gc2V0IGNoYXJzIHdpZHRocwoJCQlmb3IgKCRjaWQgPSAwOyAkY2lkIDw9IDI1NTsgKyskY2lkKSB7CgkJCQlpZiAoaXNzZXQoJGN3aWR0aHNbJGNpZF0pKSB7CgkJCQkJaWYgKCRjd2lkdGhzWyRjaWRdID4gJGZtZXRyaWNbJ01heFdpZHRoJ10pIHsKCQkJCQkJJGZtZXRyaWNbJ01heFdpZHRoJ10gPSAkY3dpZHRoc1skY2lkXTsKCQkJCQl9CgkJCQkJJGZtZXRyaWNbJ0F2Z1dpZHRoJ10gKz0gJGN3aWR0aHNbJGNpZF07CgkJCQkJJGZtZXRyaWNbJ2N3J10gLj0gJywnLiRjaWQuJz0+Jy4kY3dpZHRoc1skY2lkXTsKCQkJCX0gZWxzZSB7CgkJCQkJJGZtZXRyaWNbJ2N3J10gLj0gJywnLiRjaWQuJz0+Jy4kZm1ldHJpY1snTWlzc2luZ1dpZHRoJ107CgkJCQl9CgkJCX0KCQkJJGZtZXRyaWNbJ0F2Z1dpZHRoJ10gPSByb3VuZCgkZm1ldHJpY1snQXZnV2lkdGgnXSAvIGNvdW50KCRjd2lkdGhzKSk7CgkJfSBlbHNlIHsKCQkJLy8gLS0tLS0tLS0tLSBUUlVFIFRZUEUgLS0tLS0tLS0tLQoJCQlpZiAoJGZtZXRyaWNbJ3R5cGUnXSAhPSAnY2lkZm9udDAnKSB7CgkJCQlpZiAoJGxpbmspIHsKCQkJCQkvLyBjcmVhdGVzIGEgc3ltYm9saWMgbGluayB0byB0aGUgZXhpc3RpbmcgZm9udAoJCQkJCXN5bWxpbmsoJGZvbnRmaWxlLCAkb3V0cGF0aC4kZm1ldHJpY1snZmlsZSddKTsKCQkJCX0gZWxzZSB7CgkJCQkJLy8gc3RvcmUgY29tcHJlc3NlZCBmb250CgkJCQkJJGZtZXRyaWNbJ2ZpbGUnXSAuPSAnLnonOwoJCQkJCSRmcCA9IGZvcGVuKCRvdXRwYXRoLiRmbWV0cmljWydmaWxlJ10sICd3YicpOwoJCQkJCWZ3cml0ZSgkZnAsIGd6Y29tcHJlc3MoJGZvbnQpKTsKCQkJCQlmY2xvc2UoJGZwKTsKCQkJCX0KCQkJfQoJCQkkb2Zmc2V0ID0gMDsgLy8gb2Zmc2V0IHBvc2l0aW9uIG9mIHRoZSBmb250IGRhdGEKCQkJaWYgKFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KSAhPSAweDEwMDAwKSB7CgkJCQkvLyBzZm50IHZlcnNpb24gbXVzdCBiZSAweDAwMDEwMDAwIGZvciBUcnVlVHlwZSB2ZXJzaW9uIDEuMC4KCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkb2Zmc2V0ICs9IDQ7CgkJCS8vIGdldCBudW1iZXIgb2YgdGFibGVzCgkJCSRudW1UYWJsZXMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCS8vIHNraXAgc2VhcmNoUmFuZ2UsIGVudHJ5U2VsZWN0b3IgYW5kIHJhbmdlU2hpZnQKCQkJJG9mZnNldCArPSA2OwoJCQkvLyB0YWJsZXMgYXJyYXkKCQkJJHRhYmxlID0gYXJyYXkoKTsKCQkJLy8gLS0tLS0tLS0tLSBnZXQgdGFibGVzIC0tLS0tLS0tLS0KCQkJZm9yICgkaSA9IDA7ICRpIDwgJG51bVRhYmxlczsgKyskaSkgewoJCQkJLy8gZ2V0IHRhYmxlIGluZm8KCQkJCSR0YWcgPSBzdWJzdHIoJGZvbnQsICRvZmZzZXQsIDQpOwoJCQkJJG9mZnNldCArPSA0OwoJCQkJJHRhYmxlWyR0YWddID0gYXJyYXkoKTsKCQkJCSR0YWJsZVskdGFnXVsnY2hlY2tTdW0nXSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCSRvZmZzZXQgKz0gNDsKCQkJCSR0YWJsZVskdGFnXVsnb2Zmc2V0J10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkkdGFibGVbJHRhZ11bJ2xlbmd0aCddID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJJG9mZnNldCArPSA0OwoJCQl9CgkJCS8vIGNoZWNrIG1hZ2ljTnVtYmVyCgkJCSRvZmZzZXQgPSAkdGFibGVbJ2hlYWQnXVsnb2Zmc2V0J10gKyAxMjsKCQkJaWYgKFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KSAhPSAweDVGMEYzQ0Y1KSB7CgkJCQkvLyBtYWdpY051bWJlciBtdXN0IGJlIDB4NUYwRjNDRjUKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkb2Zmc2V0ICs9IDQ7CgkJCSRvZmZzZXQgKz0gMjsgLy8gc2tpcCBmbGFncwoJCQkvLyBnZXQgRlVuaXRzCgkJCSRmbWV0cmljWyd1bml0c1BlckVtJ10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCS8vIHVuaXRzIHJhdGlvIGNvbnN0YW50CgkJCSR1cmsgPSAoMTAwMCAvICRmbWV0cmljWyd1bml0c1BlckVtJ10pOwoJCQkkb2Zmc2V0ICs9IDE2OyAvLyBza2lwIGNyZWF0ZWQsIG1vZGlmaWVkCgkJCSR4TWluID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpICogJHVyayk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJJHlNaW4gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJJG9mZnNldCArPSAyOwoJCQkkeE1heCA9IHJvdW5kKFRDUERGX1NUQVRJQzo6X2dldEZXT1JEKCRmb250LCAkb2Zmc2V0KSAqICR1cmspOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSR5TWF4ID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpICogJHVyayk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJJGZtZXRyaWNbJ2Jib3gnXSA9ICcnLiR4TWluLicgJy4keU1pbi4nICcuJHhNYXguJyAnLiR5TWF4LicnOwoJCQkkbWFjU3R5bGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCS8vIFBERiBmb250IGZsYWdzCgkJCSRmbWV0cmljWydGbGFncyddID0gJGZsYWdzOwoJCQlpZiAoKCRtYWNTdHlsZSAmIDIpID09IDIpIHsKCQkJCS8vIGl0YWxpYyBmbGFnCgkJCQkkZm1ldHJpY1snRmxhZ3MnXSB8PSA2NDsKCQkJfQoJCQkvLyBnZXQgb2Zmc2V0IG1vZGUgKGluZGV4VG9Mb2NGb3JtYXQgOiAwID0gc2hvcnQsIDEgPSBsb25nKQoJCQkkb2Zmc2V0ID0gJHRhYmxlWydoZWFkJ11bJ29mZnNldCddICsgNTA7CgkJCSRzaG9ydF9vZmZzZXQgPSAoVENQREZfU1RBVElDOjpfZ2V0U0hPUlQoJGZvbnQsICRvZmZzZXQpID09IDApOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCS8vIGdldCB0aGUgb2Zmc2V0cyB0byB0aGUgbG9jYXRpb25zIG9mIHRoZSBnbHlwaHMgaW4gdGhlIGZvbnQsIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdseXBoRGF0YSB0YWJsZQoJCQkkaW5kZXhUb0xvYyA9IGFycmF5KCk7CgkJCSRvZmZzZXQgPSAkdGFibGVbJ2xvY2EnXVsnb2Zmc2V0J107CgkJCWlmICgkc2hvcnRfb2Zmc2V0KSB7CgkJCQkvLyBzaG9ydCB2ZXJzaW9uCgkJCQkkdG90X251bV9nbHlwaHMgPSBmbG9vcigkdGFibGVbJ2xvY2EnXVsnbGVuZ3RoJ10gLyAyKTsgLy8gbnVtR2x5cGhzICsgMQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgJHRvdF9udW1fZ2x5cGhzOyArKyRpKSB7CgkJCQkJJGluZGV4VG9Mb2NbJGldID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KSAqIDI7CgkJCQkJJG9mZnNldCArPSAyOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gbG9uZyB2ZXJzaW9uCgkJCQkkdG90X251bV9nbHlwaHMgPSBmbG9vcigkdGFibGVbJ2xvY2EnXVsnbGVuZ3RoJ10gLyA0KTsgLy8gbnVtR2x5cGhzICsgMQoJCQkJZm9yICgkaSA9IDA7ICRpIDwgJHRvdF9udW1fZ2x5cGhzOyArKyRpKSB7CgkJCQkJJGluZGV4VG9Mb2NbJGldID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCX0KCQkJfQoJCQkvLyBnZXQgZ2x5cGhzIGluZGV4ZXMgb2YgY2hhcnMgZnJvbSBjbWFwIHRhYmxlCgkJCSRvZmZzZXQgPSAkdGFibGVbJ2NtYXAnXVsnb2Zmc2V0J10gKyAyOwoJCQkkbnVtRW5jb2RpbmdUYWJsZXMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSRlbmNvZGluZ1RhYmxlcyA9IGFycmF5KCk7CgkJCWZvciAoJGkgPSAwOyAkaSA8ICRudW1FbmNvZGluZ1RhYmxlczsgKyskaSkgewoJCQkJJGVuY29kaW5nVGFibGVzWyRpXVsncGxhdGZvcm1JRCddID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCSRvZmZzZXQgKz0gMjsKCQkJCSRlbmNvZGluZ1RhYmxlc1skaV1bJ2VuY29kaW5nSUQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkkZW5jb2RpbmdUYWJsZXNbJGldWydvZmZzZXQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCSRvZmZzZXQgKz0gNDsKCQkJfQoJCQkvLyAtLS0tLS0tLS0tIGdldCBvcy8yIG1ldHJpY3MgLS0tLS0tLS0tLQoJCQkkb2Zmc2V0ID0gJHRhYmxlWydPUy8yJ11bJ29mZnNldCddOwoJCQkkb2Zmc2V0ICs9IDI7IC8vIHNraXAgdmVyc2lvbgoJCQkvLyB4QXZnQ2hhcldpZHRoCgkJCSRmbWV0cmljWydBdmdXaWR0aCddID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpICogJHVyayk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJLy8gdXNXZWlnaHRDbGFzcwoJCQkkdXNXZWlnaHRDbGFzcyA9IHJvdW5kKFRDUERGX1NUQVRJQzo6X2dldFVGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJLy8gZXN0aW1hdGUgU3RlbVYgYW5kIFN0ZW1IICg0MDAgPSB1c1dlaWdodENsYXNzIGZvciBOb3JtYWwgLSBSZWd1bGFyIGZvbnQpCgkJCSRmbWV0cmljWydTdGVtViddID0gcm91bmQoKDcwICogJHVzV2VpZ2h0Q2xhc3MpIC8gNDAwKTsKCQkJJGZtZXRyaWNbJ1N0ZW1IJ10gPSByb3VuZCgoMzAgKiAkdXNXZWlnaHRDbGFzcykgLyA0MDApOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSRvZmZzZXQgKz0gMjsgLy8gdXNXaWR0aENsYXNzCgkJCSRmc1R5cGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJaWYgKCRmc1R5cGUgPT0gMikgewoJCQkJLy8gVGhpcyBGb250IGNhbm5vdCBiZSBtb2RpZmllZCwgZW1iZWRkZWQgb3IgZXhjaGFuZ2VkIGluIGFueSBtYW5uZXIgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgcGVybWlzc2lvbiBvZiB0aGUgbGVnYWwgb3duZXIuCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJLy8gLS0tLS0tLS0tLSBnZXQgZm9udCBuYW1lIC0tLS0tLS0tLS0KCQkJJGZtZXRyaWNbJ25hbWUnXSA9ICcnOwoJCQkkb2Zmc2V0ID0gJHRhYmxlWyduYW1lJ11bJ29mZnNldCddOwoJCQkkb2Zmc2V0ICs9IDI7IC8vIHNraXAgRm9ybWF0IHNlbGVjdG9yICg9MCkuCgkJCS8vIE51bWJlciBvZiBOYW1lUmVjb3JkcyB0aGF0IGZvbGxvdyBuLgoJCQkkbnVtTmFtZVJlY29yZHMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCS8vIE9mZnNldCB0byBzdGFydCBvZiBzdHJpbmcgc3RvcmFnZSAoZnJvbSBzdGFydCBvZiB0YWJsZSkuCgkJCSRzdHJpbmdTdG9yYWdlT2Zmc2V0ID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJJG9mZnNldCArPSAyOwoJCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtTmFtZVJlY29yZHM7ICsrJGkpIHsKCQkJCSRvZmZzZXQgKz0gNjsgLy8gc2tpcCBQbGF0Zm9ybSBJRCwgUGxhdGZvcm0tc3BlY2lmaWMgZW5jb2RpbmcgSUQsIExhbmd1YWdlIElELgoJCQkJLy8gTmFtZSBJRC4KCQkJCSRuYW1lSUQgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJJG9mZnNldCArPSAyOwoJCQkJaWYgKCRuYW1lSUQgPT0gNikgewoJCQkJCS8vIFN0cmluZyBsZW5ndGggKGluIGJ5dGVzKS4KCQkJCQkkc3RyaW5nTGVuZ3RoID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJLy8gU3RyaW5nIG9mZnNldCBmcm9tIHN0YXJ0IG9mIHN0b3JhZ2UgYXJlYSAoaW4gYnl0ZXMpLgoJCQkJCSRzdHJpbmdPZmZzZXQgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkkb2Zmc2V0ID0gKCR0YWJsZVsnbmFtZSddWydvZmZzZXQnXSArICRzdHJpbmdTdG9yYWdlT2Zmc2V0ICsgJHN0cmluZ09mZnNldCk7CgkJCQkJJGZtZXRyaWNbJ25hbWUnXSA9IHN1YnN0cigkZm9udCwgJG9mZnNldCwgJHN0cmluZ0xlbmd0aCk7CgkJCQkJJGZtZXRyaWNbJ25hbWUnXSA9IHByZWdfcmVwbGFjZSgnL1teYS16QS1aMC05X1wtXS8nLCAnJywgJGZtZXRyaWNbJ25hbWUnXSk7CgkJCQkJYnJlYWs7CgkJCQl9IGVsc2UgewoJCQkJCSRvZmZzZXQgKz0gNDsgLy8gc2tpcCBTdHJpbmcgbGVuZ3RoLCBTdHJpbmcgb2Zmc2V0CgkJCQl9CgkJCX0KCQkJaWYgKGVtcHR5KCRmbWV0cmljWyduYW1lJ10pKSB7CgkJCQkkZm1ldHJpY1snbmFtZSddID0gJGZvbnRfbmFtZTsKCQkJfQoJCQkvLyAtLS0tLS0tLS0tIGdldCBwb3N0IGRhdGEgLS0tLS0tLS0tLQoJCQkkb2Zmc2V0ID0gJHRhYmxlWydwb3N0J11bJ29mZnNldCddOwoJCQkkb2Zmc2V0ICs9IDQ7IC8vIHNraXAgRm9ybWF0IFR5cGUKCQkJJGZtZXRyaWNbJ2l0YWxpY0FuZ2xlJ10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRGSVhFRCgkZm9udCwgJG9mZnNldCk7CgkJCSRvZmZzZXQgKz0gNDsKCQkJJGZtZXRyaWNbJ3VuZGVybGluZVBvc2l0aW9uJ10gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJJG9mZnNldCArPSAyOwoJCQkkZm1ldHJpY1sndW5kZXJsaW5lVGhpY2tuZXNzJ10gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJJG9mZnNldCArPSAyOwoJCQkkaXNGaXhlZFBpdGNoID0gKFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KSA9PSAwKSA/IGZhbHNlIDogdHJ1ZTsKCQkJJG9mZnNldCArPSAyOwoJCQlpZiAoJGlzRml4ZWRQaXRjaCkgewoJCQkJJGZtZXRyaWNbJ0ZsYWdzJ10gfD0gMTsKCQkJfQoJCQkvLyAtLS0tLS0tLS0tIGdldCBoaGVhIGRhdGEgLS0tLS0tLS0tLQoJCQkkb2Zmc2V0ID0gJHRhYmxlWydoaGVhJ11bJ29mZnNldCddOwoJCQkkb2Zmc2V0ICs9IDQ7IC8vIHNraXAgVGFibGUgdmVyc2lvbiBudW1iZXIKCQkJLy8gQXNjZW5kZXIKCQkJJGZtZXRyaWNbJ0FzY2VudCddID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpICogJHVyayk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJLy8gRGVzY2VuZGVyCgkJCSRmbWV0cmljWydEZXNjZW50J10gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJJG9mZnNldCArPSAyOwoJCQkvLyBMaW5lR2FwCgkJCSRmbWV0cmljWydMZWFkaW5nJ10gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCkgKiAkdXJrKTsKCQkJJG9mZnNldCArPSAyOwoJCQkvLyBhZHZhbmNlV2lkdGhNYXgKCQkJJGZtZXRyaWNbJ01heFdpZHRoJ10gPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRVRldPUkQoJGZvbnQsICRvZmZzZXQpICogJHVyayk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJJG9mZnNldCArPSAyMjsgLy8gc2tpcCBzb21lIHZhbHVlcwoJCQkvLyBnZXQgdGhlIG51bWJlciBvZiBoTWV0cmljIGVudHJpZXMgaW4gaG10eCB0YWJsZQoJCQkkbnVtYmVyT2ZITWV0cmljcyA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCS8vIC0tLS0tLS0tLS0gZ2V0IG1heHAgZGF0YSAtLS0tLS0tLS0tCgkJCSRvZmZzZXQgPSAkdGFibGVbJ21heHAnXVsnb2Zmc2V0J107CgkJCSRvZmZzZXQgKz0gNDsgLy8gc2tpcCBUYWJsZSB2ZXJzaW9uIG51bWJlcgoJCQkvLyBnZXQgdGhlIHRoZSBudW1iZXIgb2YgZ2x5cGhzIGluIHRoZSBmb250LgoJCQkkbnVtR2x5cGhzID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJLy8gLS0tLS0tLS0tLSBnZXQgQ0lEVG9HSURNYXAgLS0tLS0tLS0tLQoJCQkkY3RnID0gYXJyYXkoKTsKCQkJZm9yZWFjaCAoJGVuY29kaW5nVGFibGVzIGFzICRlbmN0YWJsZSkgewoJCQkJLy8gZ2V0IG9ubHkgc3BlY2lmaWVkIFBsYXRmb3JtIElEIGFuZCBFbmNvZGluZyBJRAoJCQkJaWYgKCgkZW5jdGFibGVbJ3BsYXRmb3JtSUQnXSA9PSAkcGxhdGlkKSBBTkQgKCRlbmN0YWJsZVsnZW5jb2RpbmdJRCddID09ICRlbmNpZCkpIHsKCQkJCQkkb2Zmc2V0ID0gJHRhYmxlWydjbWFwJ11bJ29mZnNldCddICsgJGVuY3RhYmxlWydvZmZzZXQnXTsKCQkJCQkkZm9ybWF0ID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJc3dpdGNoICgkZm9ybWF0KSB7CgkJCQkJCWNhc2UgMDogeyAvLyBGb3JtYXQgMDogQnl0ZSBlbmNvZGluZyB0YWJsZQoJCQkJCQkJJG9mZnNldCArPSA0OyAvLyBza2lwIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCQkJZm9yICgkYyA9IDA7ICRjIDwgMjU2OyArKyRjKSB7CgkJCQkJCQkJJGcgPSBUQ1BERl9TVEFUSUM6Ol9nZXRCWVRFKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkY3RnWyRjXSA9ICRnOwoJCQkJCQkJCSsrJG9mZnNldDsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgMjogeyAvLyBGb3JtYXQgMjogSGlnaC1ieXRlIG1hcHBpbmcgdGhyb3VnaCB0YWJsZQoJCQkJCQkJJG9mZnNldCArPSA0OyAvLyBza2lwIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCQkJJG51bVN1YkhlYWRlcnMgPSAwOwoJCQkJCQkJZm9yICgkaSA9IDA7ICRpIDwgMjU2OyArKyRpKSB7CgkJCQkJCQkJLy8gQXJyYXkgdGhhdCBtYXBzIGhpZ2ggYnl0ZXMgdG8gc3ViSGVhZGVyczogdmFsdWUgaXMgc3ViSGVhZGVyIGluZGV4ICogOC4KCQkJCQkJCQkkc3ViSGVhZGVyS2V5c1skaV0gPSAoVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KSAvIDgpOwoJCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCQlpZiAoJG51bVN1YkhlYWRlcnMgPCAkc3ViSGVhZGVyS2V5c1skaV0pIHsKCQkJCQkJCQkJJG51bVN1YkhlYWRlcnMgPSAkc3ViSGVhZGVyS2V5c1skaV07CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJLy8gdGhlIG51bWJlciBvZiBzdWJIZWFkZXJzIGlzIGVxdWFsIHRvIHRoZSBtYXggb2Ygc3ViSGVhZGVyS2V5cyArIDEKCQkJCQkJCSsrJG51bVN1YkhlYWRlcnM7CgkJCQkJCQkvLyByZWFkIHN1YkhlYWRlciBzdHJ1Y3R1cmVzCgkJCQkJCQkkc3ViSGVhZGVycyA9IGFycmF5KCk7CgkJCQkJCQkkbnVtR2x5cGhJbmRleEFycmF5ID0gMDsKCQkJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRudW1TdWJIZWFkZXJzOyArKyRrKSB7CgkJCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydmaXJzdENvZGUnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJCSRzdWJIZWFkZXJzWyRrXVsnZW50cnlDb3VudCddID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydpZERlbHRhJ10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCQkkc3ViSGVhZGVyc1ska11bJ2lkUmFuZ2VPZmZzZXQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJCSRzdWJIZWFkZXJzWyRrXVsnaWRSYW5nZU9mZnNldCddIC09ICgyICsgKCgkbnVtU3ViSGVhZGVycyAtICRrIC0gMSkgKiA4KSk7CgkJCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydpZFJhbmdlT2Zmc2V0J10gLz0gMjsKCQkJCQkJCQkkbnVtR2x5cGhJbmRleEFycmF5ICs9ICRzdWJIZWFkZXJzWyRrXVsnZW50cnlDb3VudCddOwoJCQkJCQkJfQoJCQkJCQkJZm9yICgkayA9IDA7ICRrIDwgJG51bUdseXBoSW5kZXhBcnJheTsgKyskaykgewoJCQkJCQkJCSRnbHlwaEluZGV4QXJyYXlbJGtdID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQl9CgkJCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAyNTY7ICsrJGkpIHsKCQkJCQkJCQkkayA9ICRzdWJIZWFkZXJLZXlzWyRpXTsKCQkJCQkJCQlpZiAoJGsgPT0gMCkgewoJCQkJCQkJCQkvLyBvbmUgYnl0ZSBjb2RlCgkJCQkJCQkJCSRjID0gJGk7CgkJCQkJCQkJCSRnID0gJGdseXBoSW5kZXhBcnJheVswXTsKCQkJCQkJCQkJJGN0Z1skY10gPSAkZzsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkvLyB0d28gYnl0ZXMgY29kZQoJCQkJCQkJCQkkc3RhcnRfYnl0ZSA9ICRzdWJIZWFkZXJzWyRrXVsnZmlyc3RDb2RlJ107CgkJCQkJCQkJCSRlbmRfYnl0ZSA9ICRzdGFydF9ieXRlICsgJHN1YkhlYWRlcnNbJGtdWydlbnRyeUNvdW50J107CgkJCQkJCQkJCWZvciAoJGogPSAkc3RhcnRfYnl0ZTsgJGogPCAkZW5kX2J5dGU7ICsrJGopIHsKCQkJCQkJCQkJCS8vIGNvbWJpbmUgaGlnaCBhbmQgbG93IGJ5dGVzCgkJCQkJCQkJCQkkYyA9ICgoJGkgPDwgOCkgKyAkaik7CgkJCQkJCQkJCQkkaWRSYW5nZU9mZnNldCA9ICgkc3ViSGVhZGVyc1ska11bJ2lkUmFuZ2VPZmZzZXQnXSArICRqIC0gJHN1YkhlYWRlcnNbJGtdWydmaXJzdENvZGUnXSk7CgkJCQkJCQkJCQkkZyA9ICgkZ2x5cGhJbmRleEFycmF5WyRpZFJhbmdlT2Zmc2V0XSArICRzdWJIZWFkZXJzWyRrXVsnaWREZWx0YSddKSAlIDY1NTM2OwoJCQkJCQkJCQkJaWYgKCRnIDwgMCkgewoJCQkJCQkJCQkJCSRnID0gMDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCSRjdGdbJGNdID0gJGc7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlIDQ6IHsgLy8gRm9ybWF0IDQ6IFNlZ21lbnQgbWFwcGluZyB0byBkZWx0YSB2YWx1ZXMKCQkJCQkJCSRsZW5ndGggPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJJG9mZnNldCArPSAyOyAvLyBza2lwIHZlcnNpb24vbGFuZ3VhZ2UKCQkJCQkJCSRzZWdDb3VudCA9IGZsb29yKFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCkgLyAyKTsKCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCSRvZmZzZXQgKz0gNjsgLy8gc2tpcCBzZWFyY2hSYW5nZSwgZW50cnlTZWxlY3RvciwgcmFuZ2VTaGlmdAoJCQkJCQkJJGVuZENvdW50ID0gYXJyYXkoKTsgLy8gYXJyYXkgb2YgZW5kIGNoYXJhY3RlciBjb2RlcyBmb3IgZWFjaCBzZWdtZW50CgkJCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkc2VnQ291bnQ7ICsrJGspIHsKCQkJCQkJCQkkZW5kQ291bnRbJGtdID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQl9CgkJCQkJCQkkb2Zmc2V0ICs9IDI7IC8vIHNraXAgcmVzZXJ2ZWRQYWQKCQkJCQkJCSRzdGFydENvdW50ID0gYXJyYXkoKTsgLy8gYXJyYXkgb2Ygc3RhcnQgY2hhcmFjdGVyIGNvZGVzIGZvciBlYWNoIHNlZ21lbnQKCQkJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRzZWdDb3VudDsgKyskaykgewoJCQkJCQkJCSRzdGFydENvdW50WyRrXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJfQoJCQkJCQkJJGlkRGVsdGEgPSBhcnJheSgpOyAvLyBkZWx0YSBmb3IgYWxsIGNoYXJhY3RlciBjb2RlcyBpbiBzZWdtZW50CgkJCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkc2VnQ291bnQ7ICsrJGspIHsKCQkJCQkJCQkkaWREZWx0YVska10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCX0KCQkJCQkJCSRpZFJhbmdlT2Zmc2V0ID0gYXJyYXkoKTsgLy8gT2Zmc2V0cyBpbnRvIGdseXBoSWRBcnJheSBvciAwCgkJCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkc2VnQ291bnQ7ICsrJGspIHsKCQkJCQkJCQkkaWRSYW5nZU9mZnNldFska10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCX0KCQkJCQkJCSRnaWRsZW4gPSAoZmxvb3IoJGxlbmd0aCAvIDIpIC0gOCAtICg0ICogJHNlZ0NvdW50KSk7CgkJCQkJCQkkZ2x5cGhJZEFycmF5ID0gYXJyYXkoKTsgLy8gZ2x5cGggaW5kZXggYXJyYXkKCQkJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRnaWRsZW47ICsrJGspIHsKCQkJCQkJCQkkZ2x5cGhJZEFycmF5WyRrXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJfQoJCQkJCQkJZm9yICgkayA9IDA7ICRrIDwgJHNlZ0NvdW50OyArKyRrKSB7CgkJCQkJCQkJZm9yICgkYyA9ICRzdGFydENvdW50WyRrXTsgJGMgPD0gJGVuZENvdW50WyRrXTsgKyskYykgewoJCQkJCQkJCQlpZiAoJGlkUmFuZ2VPZmZzZXRbJGtdID09IDApIHsKCQkJCQkJCQkJCSRnID0gKCRpZERlbHRhWyRrXSArICRjKSAlIDY1NTM2OwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJJGdpZCA9IChmbG9vcigkaWRSYW5nZU9mZnNldFska10gLyAyKSArICgkYyAtICRzdGFydENvdW50WyRrXSkgLSAoJHNlZ0NvdW50IC0gJGspKTsKCQkJCQkJCQkJCSRnID0gKCRnbHlwaElkQXJyYXlbJGdpZF0gKyAkaWREZWx0YVska10pICUgNjU1MzY7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKCRnIDwgMCkgewoJCQkJCQkJCQkJJGcgPSAwOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRjdGdbJGNdID0gJGc7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSA2OiB7IC8vIEZvcm1hdCA2OiBUcmltbWVkIHRhYmxlIG1hcHBpbmcKCQkJCQkJCSRvZmZzZXQgKz0gNDsgLy8gc2tpcCBsZW5ndGggYW5kIHZlcnNpb24vbGFuZ3VhZ2UKCQkJCQkJCSRmaXJzdENvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJJGVudHJ5Q291bnQgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJZm9yICgkayA9IDA7ICRrIDwgJGVudHJ5Q291bnQ7ICsrJGspIHsKCQkJCQkJCQkkYyA9ICgkayArICRmaXJzdENvZGUpOwoJCQkJCQkJCSRnID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQkJJGN0Z1skY10gPSAkZzsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgODogeyAvLyBGb3JtYXQgODogTWl4ZWQgMTYtYml0IGFuZCAzMi1iaXQgY292ZXJhZ2UKCQkJCQkJCSRvZmZzZXQgKz0gMTA7IC8vIHNraXAgcmVzZXJ2ZWQsIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCQkJZm9yICgkayA9IDA7ICRrIDwgODE5MjsgKyskaykgewoJCQkJCQkJCSRpczMyWyRrXSA9IFRDUERGX1NUQVRJQzo6X2dldEJZVEUoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSsrJG9mZnNldDsKCQkJCQkJCX0KCQkJCQkJCSRuR3JvdXBzID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSA0OwoJCQkJCQkJZm9yICgkaSA9IDA7ICRpIDwgJG5Hcm91cHM7ICsrJGkpIHsKCQkJCQkJCQkkc3RhcnRDaGFyQ29kZSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCQkJJGVuZENoYXJDb2RlID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJCQkkc3RhcnRHbHlwaElEID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJCQlmb3IgKCRrID0gJHN0YXJ0Q2hhckNvZGU7ICRrIDw9ICRlbmRDaGFyQ29kZTsgKyskaykgewoJCQkJCQkJCQkkaXMzMmlkeCA9IGZsb29yKCRjIC8gOCk7CgkJCQkJCQkJCWlmICgoaXNzZXQoJGlzMzJbJGlzMzJpZHhdKSkgQU5EICgoJGlzMzJbJGlzMzJpZHhdICYgKDEgPDwgKDcgLSAoJGMgJSA4KSkpKSA9PSAwKSkgewoJCQkJCQkJCQkJJGMgPSAkazsKCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCS8vIDMyIGJpdCBmb3JtYXQKCQkJCQkJCQkJCS8vIGNvbnZlcnQgdG8gZGVjaW1hbCAoaHR0cDovL3d3dy51bmljb2RlLm9yZy9mYXEvL3V0Zl9ib20uaHRtbCN1dGYxNi00KQoJCQkJCQkJCQkJLy9MRUFEX09GRlNFVCA9ICgweEQ4MDAgLSAoMHgxMDAwMCA+PiAxMCkpID0gNTUyMzIKCQkJCQkJCQkJCS8vU1VSUk9HQVRFX09GRlNFVCA9ICgweDEwMDAwIC0gKDB4RDgwMCA8PCAxMCkgLSAweERDMDApID0gLTU2NjEzODg4CgkJCQkJCQkJCQkkYyA9ICgoNTUyMzIgKyAoJGsgPj4gMTApKSA8PCAxMCkgKyAoMHhEQzAwICsgKCRrICYgMHgzRkYpKSAtNTY2MTM4ODg7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGN0Z1skY10gPSAwOwoJCQkJCQkJCQkrKyRzdGFydEdseXBoSUQ7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAxMDogeyAvLyBGb3JtYXQgMTA6IFRyaW1tZWQgYXJyYXkKCQkJCQkJCSRvZmZzZXQgKz0gMTA7IC8vIHNraXAgcmVzZXJ2ZWQsIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCQkJJHN0YXJ0Q2hhckNvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCQkkbnVtQ2hhcnMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkbnVtQ2hhcnM7ICsrJGspIHsKCQkJCQkJCQkkYyA9ICgkayArICRzdGFydENoYXJDb2RlKTsKCQkJCQkJCQkkZyA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJGN0Z1skY10gPSAkZzsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlIDEyOiB7IC8vIEZvcm1hdCAxMjogU2VnbWVudGVkIGNvdmVyYWdlCgkJCQkJCQkkb2Zmc2V0ICs9IDEwOyAvLyBza2lwIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCQkJJG5Hcm91cHMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkbkdyb3VwczsgKyskaykgewoJCQkJCQkJCSRzdGFydENoYXJDb2RlID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJCQkkZW5kQ2hhckNvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkJJG9mZnNldCArPSA0OwoJCQkJCQkJCSRzdGFydEdseXBoQ29kZSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCQkJZm9yICgkYyA9ICRzdGFydENoYXJDb2RlOyAkYyA8PSAkZW5kQ2hhckNvZGU7ICsrJGMpIHsKCQkJCQkJCQkJJGN0Z1skY10gPSAkc3RhcnRHbHlwaENvZGU7CgkJCQkJCQkJCSsrJHN0YXJ0R2x5cGhDb2RlOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgMTM6IHsgLy8gRm9ybWF0IDEzOiBNYW55LXRvLW9uZSByYW5nZSBtYXBwaW5ncwoJCQkJCQkJLy8gdG8gYmUgaW1wbGVtZW50ZWQgLi4uCgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlIDE0OiB7IC8vIEZvcm1hdCAxNDogVW5pY29kZSBWYXJpYXRpb24gU2VxdWVuY2VzCgkJCQkJCQkvLyB0byBiZSBpbXBsZW1lbnRlZCAuLi4KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICghaXNzZXQoJGN0Z1swXSkpIHsKCQkJCSRjdGdbMF0gPSAwOwoJCQl9CgkJCS8vIGdldCB4SGVpZ2h0IChoZWlnaHQgb2YgeCkKCQkJJG9mZnNldCA9ICgkdGFibGVbJ2dseWYnXVsnb2Zmc2V0J10gKyAkaW5kZXhUb0xvY1skY3RnWzEyMF1dICsgNCk7CgkJCSR5TWluID0gVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDQ7CgkJCSR5TWF4ID0gVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSRmbWV0cmljWydYSGVpZ2h0J10gPSByb3VuZCgoJHlNYXggLSAkeU1pbikgKiAkdXJrKTsKCQkJLy8gZ2V0IENhcEhlaWdodCAoaGVpZ2h0IG9mIEgpCgkJCSRvZmZzZXQgPSAoJHRhYmxlWydnbHlmJ11bJ29mZnNldCddICsgJGluZGV4VG9Mb2NbJGN0Z1s3Ml1dICsgNCk7CgkJCSR5TWluID0gVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDQ7CgkJCSR5TWF4ID0gVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSRmbWV0cmljWydDYXBIZWlnaHQnXSA9IHJvdW5kKCgkeU1heCAtICR5TWluKSAqICR1cmspOwoJCQkvLyBjZWF0ZSB3aWR0aHMgYXJyYXkKCQkJJGN3ID0gYXJyYXkoKTsKCQkJJG9mZnNldCA9ICR0YWJsZVsnaG10eCddWydvZmZzZXQnXTsKCQkJZm9yICgkaSA9IDAgOyAkaSA8ICRudW1iZXJPZkhNZXRyaWNzOyArKyRpKSB7CgkJCQkkY3dbJGldID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0VUZXT1JEKCRmb250LCAkb2Zmc2V0KSAqICR1cmspOwoJCQkJJG9mZnNldCArPSA0OyAvLyBza2lwIGxzYgoJCQl9CgkJCWlmICgkbnVtYmVyT2ZITWV0cmljcyA8ICRudW1HbHlwaHMpIHsKCQkJCS8vIGZpbGwgbWlzc2luZyB3aWR0aHMgd2l0aCB0aGUgbGFzdCB2YWx1ZQoJCQkJJGN3ID0gYXJyYXlfcGFkKCRjdywgJG51bUdseXBocywgJGN3WygkbnVtYmVyT2ZITWV0cmljcyAtIDEpXSk7CgkJCX0KCQkJJGZtZXRyaWNbJ01pc3NpbmdXaWR0aCddID0gJGN3WzBdOwoJCQkkZm1ldHJpY1snY3cnXSA9ICcnOwoJCQlmb3IgKCRjaWQgPSAwOyAkY2lkIDw9IDY1NTM1OyArKyRjaWQpIHsKCQkJCWlmIChpc3NldCgkY3RnWyRjaWRdKSkgewoJCQkJCWlmIChpc3NldCgkY3dbJGN0Z1skY2lkXV0pKSB7CgkJCQkJCSRmbWV0cmljWydjdyddIC49ICcsJy4kY2lkLic9PicuJGN3WyRjdGdbJGNpZF1dOwoJCQkJCX0KCQkJCQlpZiAoJGFkZGNiYm94IEFORCBpc3NldCgkaW5kZXhUb0xvY1skY3RnWyRjaWRdXSkpIHsKCQkJCQkJJG9mZnNldCA9ICgkdGFibGVbJ2dseWYnXVsnb2Zmc2V0J10gKyAkaW5kZXhUb0xvY1skY3RnWyRjaWRdXSk7CgkJCQkJCSR4TWluID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQgKyAyKSAqICR1cmspOwoJCQkJCQkkeU1pbiA9IHJvdW5kKFRDUERGX1NUQVRJQzo6X2dldEZXT1JEKCRmb250LCAkb2Zmc2V0ICsgNCkgKiAkdXJrKTsKCQkJCQkJJHhNYXggPSByb3VuZChUQ1BERl9TVEFUSUM6Ol9nZXRGV09SRCgkZm9udCwgJG9mZnNldCArIDYpICogJHVyayk7CgkJCQkJCSR5TWF4ID0gcm91bmQoVENQREZfU1RBVElDOjpfZ2V0RldPUkQoJGZvbnQsICRvZmZzZXQgKyA4KSAqICR1cmspOwoJCQkJCQkkZm1ldHJpY1snY2Jib3gnXSAuPSAnLCcuJGNpZC4nPT5hcnJheSgnLiR4TWluLicsJy4keU1pbi4nLCcuJHhNYXguJywnLiR5TWF4LicpJzsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9IC8vIGVuZCBvZiB0cnVlIHR5cGUKCQlpZiAoKCRmbWV0cmljWyd0eXBlJ10gPT0gJ1RydWVUeXBlVW5pY29kZScpIEFORCAoY291bnQoJGN0ZykgPT0gMjU2KSkgewoJCQkkZm1ldHJpY1sndHlwZSddID09ICdUcnVlVHlwZSc7CgkJfQoJCS8vIC0tLS0tLS0tLS0gY3JlYXRlIHBocCBmb250IGZpbGUgLS0tLS0tLS0tLQoJCSRwZmlsZSA9ICc8Jy4nPycuJ3BocCcuIlxuIjsKCQkkcGZpbGUgLj0gJy8vIFRDUERGIEZPTlQgRklMRSBERVNDUklQVElPTicuIlxuIjsKCQkkcGZpbGUgLj0gJyR0eXBlPVwnJy4kZm1ldHJpY1sndHlwZSddLidcJzsnLiJcbiI7CgkJJHBmaWxlIC49ICckbmFtZT1cJycuJGZtZXRyaWNbJ25hbWUnXS4nXCc7Jy4iXG4iOwoJCSRwZmlsZSAuPSAnJHVwPScuJGZtZXRyaWNbJ3VuZGVybGluZVBvc2l0aW9uJ10uJzsnLiJcbiI7CgkJJHBmaWxlIC49ICckdXQ9Jy4kZm1ldHJpY1sndW5kZXJsaW5lVGhpY2tuZXNzJ10uJzsnLiJcbiI7CgkJaWYgKCRmbWV0cmljWydNaXNzaW5nV2lkdGgnXSA+IDApIHsKCQkJJHBmaWxlIC49ICckZHc9Jy4kZm1ldHJpY1snTWlzc2luZ1dpZHRoJ10uJzsnLiJcbiI7CgkJfSBlbHNlIHsKCQkJJHBmaWxlIC49ICckZHc9Jy4kZm1ldHJpY1snQXZnV2lkdGgnXS4nOycuIlxuIjsKCQl9CgkJJHBmaWxlIC49ICckZGlmZj1cJycuJGZtZXRyaWNbJ2RpZmYnXS4nXCc7Jy4iXG4iOwoJCWlmICgkZm1ldHJpY1sndHlwZSddID09ICdUeXBlMScpIHsKCQkJLy8gVHlwZSAxCgkJCSRwZmlsZSAuPSAnJGVuYz1cJycuJGZtZXRyaWNbJ2VuYyddLidcJzsnLiJcbiI7CgkJCSRwZmlsZSAuPSAnJGZpbGU9XCcnLiRmbWV0cmljWydmaWxlJ10uJ1wnOycuIlxuIjsKCQkJJHBmaWxlIC49ICckc2l6ZTE9Jy4kZm1ldHJpY1snc2l6ZTEnXS4nOycuIlxuIjsKCQkJJHBmaWxlIC49ICckc2l6ZTI9Jy4kZm1ldHJpY1snc2l6ZTInXS4nOycuIlxuIjsKCQl9IGVsc2UgewoJCQkkcGZpbGUgLj0gJyRvcmlnaW5hbHNpemU9Jy4kZm1ldHJpY1snb3JpZ2luYWxzaXplJ10uJzsnLiJcbiI7CgkJCWlmICgkZm1ldHJpY1sndHlwZSddID09ICdjaWRmb250MCcpIHsKCQkJCS8vIENJRC0wCgkJCQlzd2l0Y2ggKCRmb250dHlwZSkgewoJCQkJCWNhc2UgJ0NJRDBKUCc6IHsKCQkJCQkJJHBmaWxlIC49ICcvLyBKYXBhbmVzZScuIlxuIjsKCQkJCQkJJHBmaWxlIC49ICckZW5jPVwnVW5pSklTLVVURjE2LUhcJzsnLiJcbiI7CgkJCQkJCSRwZmlsZSAuPSAnJGNpZGluZm89YXJyYXkoXCdSZWdpc3RyeVwnPT5cJ0Fkb2JlXCcsIFwnT3JkZXJpbmdcJz0+XCdKYXBhbjFcJyxcJ1N1cHBsZW1lbnRcJz0+NSk7Jy4iXG4iOwoJCQkJCQkkcGZpbGUgLj0gJ2luY2x1ZGUoZGlybmFtZShfX0ZJTEVfXykuXCcvdW5pMmNpZF9hajE2LnBocFwnKTsnLiJcbiI7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdDSUQwS1InOiB7CgkJCQkJCSRwZmlsZSAuPSAnLy8gS29yZWFuJy4iXG4iOwoJCQkJCQkkcGZpbGUgLj0gJyRlbmM9XCdVbmlLUy1VVEYxNi1IXCc7Jy4iXG4iOwoJCQkJCQkkcGZpbGUgLj0gJyRjaWRpbmZvPWFycmF5KFwnUmVnaXN0cnlcJz0+XCdBZG9iZVwnLCBcJ09yZGVyaW5nXCc9PlwnS29yZWExXCcsXCdTdXBwbGVtZW50XCc9PjApOycuIlxuIjsKCQkJCQkJJHBmaWxlIC49ICdpbmNsdWRlKGRpcm5hbWUoX19GSUxFX18pLlwnL3VuaTJjaWRfYWsxMi5waHBcJyk7Jy4iXG4iOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnQ0lEMENTJzogewoJCQkJCQkkcGZpbGUgLj0gJy8vIENoaW5lc2UgU2ltcGxpZmllZCcuIlxuIjsKCQkJCQkJJHBmaWxlIC49ICckZW5jPVwnVW5pR0ItVVRGMTYtSFwnOycuIlxuIjsKCQkJCQkJJHBmaWxlIC49ICckY2lkaW5mbz1hcnJheShcJ1JlZ2lzdHJ5XCc9PlwnQWRvYmVcJywgXCdPcmRlcmluZ1wnPT5cJ0dCMVwnLFwnU3VwcGxlbWVudFwnPT4yKTsnLiJcbiI7CgkJCQkJCSRwZmlsZSAuPSAnaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS5cJy91bmkyY2lkX2FnMTUucGhwXCcpOycuIlxuIjsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ0NJRDBDVCc6CgkJCQkJZGVmYXVsdDogewoJCQkJCQkkcGZpbGUgLj0gJy8vIENoaW5lc2UgVHJhZGl0aW9uYWwnLiJcbiI7CgkJCQkJCSRwZmlsZSAuPSAnJGVuYz1cJ1VuaUNOUy1VVEYxNi1IXCc7Jy4iXG4iOwoJCQkJCQkkcGZpbGUgLj0gJyRjaWRpbmZvPWFycmF5KFwnUmVnaXN0cnlcJz0+XCdBZG9iZVwnLCBcJ09yZGVyaW5nXCc9PlwnQ05TMVwnLFwnU3VwcGxlbWVudFwnPT4wKTsnLiJcbiI7CgkJCQkJCSRwZmlsZSAuPSAnaW5jbHVkZShkaXJuYW1lKF9fRklMRV9fKS5cJy91bmkyY2lkX2FqMTYucGhwXCcpOycuIlxuIjsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJLy8gVHJ1ZVR5cGUKCQkJCSRwZmlsZSAuPSAnJGVuYz1cJycuJGZtZXRyaWNbJ2VuYyddLidcJzsnLiJcbiI7CgkJCQkkcGZpbGUgLj0gJyRmaWxlPVwnJy4kZm1ldHJpY1snZmlsZSddLidcJzsnLiJcbiI7CgkJCQkkcGZpbGUgLj0gJyRjdGc9XCcnLiRmbWV0cmljWydjdGcnXS4nXCc7Jy4iXG4iOwoJCQkJLy8gY3JlYXRlIENJRFRvR0lETWFwCgkJCQkkY2lkdG9naWRtYXAgPSBzdHJfcGFkKCcnLCAxMzEwNzIsICJceDAwIik7IC8vICgyNTYgKiAyNTYgKiAyKSA9IDEzMTA3MgoJCQkJZm9yZWFjaCAoJGN0ZyBhcyAkY2lkID0+ICRnaWQpIHsKCQkJCQkkY2lkdG9naWRtYXAgPSBzZWxmOjp1cGRhdGVDSUR0b0dJRG1hcCgkY2lkdG9naWRtYXAsICRjaWQsICRjdGdbJGNpZF0pOwoJCQkJfQoJCQkJLy8gc3RvcmUgY29tcHJlc3NlZCBDSURUb0dJRE1hcAoJCQkJJGZwID0gZm9wZW4oJG91dHBhdGguJGZtZXRyaWNbJ2N0ZyddLCAnd2InKTsKCQkJCWZ3cml0ZSgkZnAsIGd6Y29tcHJlc3MoJGNpZHRvZ2lkbWFwKSk7CgkJCQlmY2xvc2UoJGZwKTsKCQkJfQoJCX0KCQkkcGZpbGUgLj0gJyRkZXNjPWFycmF5KCc7CgkJJHBmaWxlIC49ICdcJ0ZsYWdzXCc9PicuJGZtZXRyaWNbJ0ZsYWdzJ10uJywnOwoJCSRwZmlsZSAuPSAnXCdGb250QkJveFwnPT5cJ1snLiRmbWV0cmljWydiYm94J10uJ11cJywnOwoJCSRwZmlsZSAuPSAnXCdJdGFsaWNBbmdsZVwnPT4nLiRmbWV0cmljWydpdGFsaWNBbmdsZSddLicsJzsKCQkkcGZpbGUgLj0gJ1wnQXNjZW50XCc9PicuJGZtZXRyaWNbJ0FzY2VudCddLicsJzsKCQkkcGZpbGUgLj0gJ1wnRGVzY2VudFwnPT4nLiRmbWV0cmljWydEZXNjZW50J10uJywnOwoJCSRwZmlsZSAuPSAnXCdMZWFkaW5nXCc9PicuJGZtZXRyaWNbJ0xlYWRpbmcnXS4nLCc7CgkJJHBmaWxlIC49ICdcJ0NhcEhlaWdodFwnPT4nLiRmbWV0cmljWydDYXBIZWlnaHQnXS4nLCc7CgkJJHBmaWxlIC49ICdcJ1hIZWlnaHRcJz0+Jy4kZm1ldHJpY1snWEhlaWdodCddLicsJzsKCQkkcGZpbGUgLj0gJ1wnU3RlbVZcJz0+Jy4kZm1ldHJpY1snU3RlbVYnXS4nLCc7CgkJJHBmaWxlIC49ICdcJ1N0ZW1IXCc9PicuJGZtZXRyaWNbJ1N0ZW1IJ10uJywnOwoJCSRwZmlsZSAuPSAnXCdBdmdXaWR0aFwnPT4nLiRmbWV0cmljWydBdmdXaWR0aCddLicsJzsKCQkkcGZpbGUgLj0gJ1wnTWF4V2lkdGhcJz0+Jy4kZm1ldHJpY1snTWF4V2lkdGgnXS4nLCc7CgkJJHBmaWxlIC49ICdcJ01pc3NpbmdXaWR0aFwnPT4nLiRmbWV0cmljWydNaXNzaW5nV2lkdGgnXS4nJzsKCQkkcGZpbGUgLj0gJyk7Jy4iXG4iOwoJCWlmIChpc3NldCgkZm1ldHJpY1snY2Jib3gnXSkpIHsKCQkJJHBmaWxlIC49ICckY2Jib3g9YXJyYXkoJy5zdWJzdHIoJGZtZXRyaWNbJ2NiYm94J10sIDEpLicpOycuIlxuIjsKCQl9CgkJJHBmaWxlIC49ICckY3c9YXJyYXkoJy5zdWJzdHIoJGZtZXRyaWNbJ2N3J10sIDEpLicpOycuIlxuIjsKCQkkcGZpbGUgLj0gJy8vIC0tLSBFT0YgLS0tJy4iXG4iOwoJCS8vIHN0b3JlIGZpbGUKCQkkZnAgPSBmb3Blbigkb3V0cGF0aC4kZm9udF9uYW1lLicucGhwJywgJ3cnKTsKCQlmd3JpdGUoJGZwLCAkcGZpbGUpOwoJCWZjbG9zZSgkZnApOwoJCS8vIHJldHVybiBUQ1BERiBmb250IG5hbWUKCQlyZXR1cm4gJGZvbnRfbmFtZTsKCX0KCgkvKioKCSAqIFJldHVycyB0aGUgY2hlY2tzdW0gb2YgYSBUVEYgdGFibGUuCgkgKiBAcGFyYW0gJHRhYmxlIChzdHJpbmcpIHRhYmxlIHRvIGNoZWNrCgkgKiBAcGFyYW0gJGxlbmd0aCAoaW50KSBsZW5ndGggb2YgdGFibGUgaW4gYnl0ZXMKCSAqIEByZXR1cm4gaW50IGNoZWNrc3VtCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMi4wMDAgKDIwMTAtMDYtMDIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRUVEZ0YWJsZUNoZWNrc3VtKCR0YWJsZSwgJGxlbmd0aCkgewoJCSRzdW0gPSAwOwoJCSR0bGVuID0gKCRsZW5ndGggLyA0KTsKCQkkb2Zmc2V0ID0gMDsKCQlmb3IgKCRpID0gMDsgJGkgPCAkdGxlbjsgKyskaSkgewoJCQkkdiA9IHVucGFjaygnTmknLCBzdWJzdHIoJHRhYmxlLCAkb2Zmc2V0LCA0KSk7CgkJCSRzdW0gKz0gJHZbJ2knXTsKCQkJJG9mZnNldCArPSA0OwoJCX0KCQkkc3VtID0gdW5wYWNrKCdOaScsIHBhY2soJ04nLCAkc3VtKSk7CgkJcmV0dXJuICRzdW1bJ2knXTsKCX0KCgkvKioKCSAqIFJldHVybnMgYSBzdWJzZXQgb2YgdGhlIFRydWVUeXBlIGZvbnQgZGF0YSB3aXRob3V0IHRoZSB1bnVzZWQgZ2x5cGhzLgoJICogQHBhcmFtICRmb250IChzdHJpbmcpIFRydWVUeXBlIGZvbnQgZGF0YS4KCSAqIEBwYXJhbSAkc3Vic2V0Y2hhcnMgKGFycmF5KSBBcnJheSBvZiB1c2VkIGNoYXJhY3RlcnMgKHRoZSBnbHlwaHMgdG8ga2VlcCkuCgkgKiBAcmV0dXJuIChzdHJpbmcpIEEgc3Vic2V0IG9mIFRydWVUeXBlIGZvbnQgZGF0YSB3aXRob3V0IHRoZSB1bnVzZWQgZ2x5cGhzLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjIuMDAwICgyMDEwLTA2LTAyKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZ2V0VHJ1ZVR5cGVGb250U3Vic2V0KCRmb250LCAkc3Vic2V0Y2hhcnMpIHsKCQlrc29ydCgkc3Vic2V0Y2hhcnMpOwoJCSRvZmZzZXQgPSAwOyAvLyBvZmZzZXQgcG9zaXRpb24gb2YgdGhlIGZvbnQgZGF0YQoJCWlmIChUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCkgIT0gMHgxMDAwMCkgewoJCQkvLyBzZm50IHZlcnNpb24gbXVzdCBiZSAweDAwMDEwMDAwIGZvciBUcnVlVHlwZSB2ZXJzaW9uIDEuMC4KCQkJcmV0dXJuICRmb250OwoJCX0KCQkkb2Zmc2V0ICs9IDQ7CgkJLy8gZ2V0IG51bWJlciBvZiB0YWJsZXMKCQkkbnVtVGFibGVzID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkkb2Zmc2V0ICs9IDI7CgkJLy8gc2tpcCBzZWFyY2hSYW5nZSwgZW50cnlTZWxlY3RvciBhbmQgcmFuZ2VTaGlmdAoJCSRvZmZzZXQgKz0gNjsKCQkvLyB0YWJsZXMgYXJyYXkKCQkkdGFibGUgPSBhcnJheSgpOwoJCS8vIGZvciBlYWNoIHRhYmxlCgkJZm9yICgkaSA9IDA7ICRpIDwgJG51bVRhYmxlczsgKyskaSkgewoJCQkvLyBnZXQgdGFibGUgaW5mbwoJCQkkdGFnID0gc3Vic3RyKCRmb250LCAkb2Zmc2V0LCA0KTsKCQkJJG9mZnNldCArPSA0OwoJCQkkdGFibGVbJHRhZ10gPSBhcnJheSgpOwoJCQkkdGFibGVbJHRhZ11bJ2NoZWNrU3VtJ10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCSRvZmZzZXQgKz0gNDsKCQkJJHRhYmxlWyR0YWddWydvZmZzZXQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJJG9mZnNldCArPSA0OwoJCQkkdGFibGVbJHRhZ11bJ2xlbmd0aCddID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDQ7CgkJfQoJCS8vIGNoZWNrIG1hZ2ljTnVtYmVyCgkJJG9mZnNldCA9ICR0YWJsZVsnaGVhZCddWydvZmZzZXQnXSArIDEyOwoJCWlmIChUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCkgIT0gMHg1RjBGM0NGNSkgewoJCQkvLyBtYWdpY051bWJlciBtdXN0IGJlIDB4NUYwRjNDRjUKCQkJcmV0dXJuICRmb250OwoJCX0KCQkkb2Zmc2V0ICs9IDQ7CgkJLy8gZ2V0IG9mZnNldCBtb2RlIChpbmRleFRvTG9jRm9ybWF0IDogMCA9IHNob3J0LCAxID0gbG9uZykKCQkkb2Zmc2V0ID0gJHRhYmxlWydoZWFkJ11bJ29mZnNldCddICsgNTA7CgkJJHNob3J0X29mZnNldCA9IChUQ1BERl9TVEFUSUM6Ol9nZXRTSE9SVCgkZm9udCwgJG9mZnNldCkgPT0gMCk7CgkJJG9mZnNldCArPSAyOwoJCS8vIGdldCB0aGUgb2Zmc2V0cyB0byB0aGUgbG9jYXRpb25zIG9mIHRoZSBnbHlwaHMgaW4gdGhlIGZvbnQsIHJlbGF0aXZlIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGdseXBoRGF0YSB0YWJsZQoJCSRpbmRleFRvTG9jID0gYXJyYXkoKTsKCQkkb2Zmc2V0ID0gJHRhYmxlWydsb2NhJ11bJ29mZnNldCddOwoJCWlmICgkc2hvcnRfb2Zmc2V0KSB7CgkJCS8vIHNob3J0IHZlcnNpb24KCQkJJHRvdF9udW1fZ2x5cGhzID0gZmxvb3IoJHRhYmxlWydsb2NhJ11bJ2xlbmd0aCddIC8gMik7IC8vIG51bUdseXBocyArIDEKCQkJZm9yICgkaSA9IDA7ICRpIDwgJHRvdF9udW1fZ2x5cGhzOyArKyRpKSB7CgkJCQkkaW5kZXhUb0xvY1skaV0gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpICogMjsKCQkJCSRvZmZzZXQgKz0gMjsKCQkJfQoJCX0gZWxzZSB7CgkJCS8vIGxvbmcgdmVyc2lvbgoJCQkkdG90X251bV9nbHlwaHMgPSAoJHRhYmxlWydsb2NhJ11bJ2xlbmd0aCddIC8gNCk7IC8vIG51bUdseXBocyArIDEKCQkJZm9yICgkaSA9IDA7ICRpIDwgJHRvdF9udW1fZ2x5cGhzOyArKyRpKSB7CgkJCQkkaW5kZXhUb0xvY1skaV0gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkkb2Zmc2V0ICs9IDQ7CgkJCX0KCQl9CgkJLy8gZ2V0IGdseXBocyBpbmRleGVzIG9mIGNoYXJzIGZyb20gY21hcCB0YWJsZQoJCSRzdWJzZXRnbHlwaHMgPSBhcnJheSgpOyAvLyBnbHlwaCBJRHMgb24ga2V5CgkJJHN1YnNldGdseXBoc1swXSA9IHRydWU7IC8vIGNoYXJhY3RlciBjb2RlcyB0aGF0IGRvIG5vdCBjb3JyZXNwb25kIHRvIGFueSBnbHlwaCBpbiB0aGUgZm9udCBzaG91bGQgYmUgbWFwcGVkIHRvIGdseXBoIGluZGV4IDAKCQkkb2Zmc2V0ID0gJHRhYmxlWydjbWFwJ11bJ29mZnNldCddICsgMjsKCQkkbnVtRW5jb2RpbmdUYWJsZXMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCSRvZmZzZXQgKz0gMjsKCQkkZW5jb2RpbmdUYWJsZXMgPSBhcnJheSgpOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRudW1FbmNvZGluZ1RhYmxlczsgKyskaSkgewoJCQkkZW5jb2RpbmdUYWJsZXNbJGldWydwbGF0Zm9ybUlEJ10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkkb2Zmc2V0ICs9IDI7CgkJCSRlbmNvZGluZ1RhYmxlc1skaV1bJ2VuY29kaW5nSUQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCSRvZmZzZXQgKz0gMjsKCQkJJGVuY29kaW5nVGFibGVzWyRpXVsnb2Zmc2V0J10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCSRvZmZzZXQgKz0gNDsKCQl9CgkJZm9yZWFjaCAoJGVuY29kaW5nVGFibGVzIGFzICRlbmN0YWJsZSkgewoJCQkvLyBnZXQgYWxsIHBsYXRmb3JtcyBhbmQgZW5jb2RpbmdzCgkJCSRvZmZzZXQgPSAkdGFibGVbJ2NtYXAnXVsnb2Zmc2V0J10gKyAkZW5jdGFibGVbJ29mZnNldCddOwoJCQkkZm9ybWF0ID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJJG9mZnNldCArPSAyOwoJCQlzd2l0Y2ggKCRmb3JtYXQpIHsKCQkJCWNhc2UgMDogeyAvLyBGb3JtYXQgMDogQnl0ZSBlbmNvZGluZyB0YWJsZQoJCQkJCSRvZmZzZXQgKz0gNDsgLy8gc2tpcCBsZW5ndGggYW5kIHZlcnNpb24vbGFuZ3VhZ2UKCQkJCQlmb3IgKCRjID0gMDsgJGMgPCAyNTY7ICsrJGMpIHsKCQkJCQkJaWYgKGlzc2V0KCRzdWJzZXRjaGFyc1skY10pKSB7CgkJCQkJCQkkZyA9IFRDUERGX1NUQVRJQzo6X2dldEJZVEUoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJHN1YnNldGdseXBoc1skZ10gPSB0cnVlOwoJCQkJCQl9CgkJCQkJCSsrJG9mZnNldDsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDI6IHsgLy8gRm9ybWF0IDI6IEhpZ2gtYnl0ZSBtYXBwaW5nIHRocm91Z2ggdGFibGUKCQkJCQkkb2Zmc2V0ICs9IDQ7IC8vIHNraXAgbGVuZ3RoIGFuZCB2ZXJzaW9uL2xhbmd1YWdlCgkJCQkJJG51bVN1YkhlYWRlcnMgPSAwOwoJCQkJCWZvciAoJGkgPSAwOyAkaSA8IDI1NjsgKyskaSkgewoJCQkJCQkvLyBBcnJheSB0aGF0IG1hcHMgaGlnaCBieXRlcyB0byBzdWJIZWFkZXJzOiB2YWx1ZSBpcyBzdWJIZWFkZXIgaW5kZXggKiA4LgoJCQkJCQkkc3ViSGVhZGVyS2V5c1skaV0gPSAoVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KSAvIDgpOwoJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCWlmICgkbnVtU3ViSGVhZGVycyA8ICRzdWJIZWFkZXJLZXlzWyRpXSkgewoJCQkJCQkJJG51bVN1YkhlYWRlcnMgPSAkc3ViSGVhZGVyS2V5c1skaV07CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gdGhlIG51bWJlciBvZiBzdWJIZWFkZXJzIGlzIGVxdWFsIHRvIHRoZSBtYXggb2Ygc3ViSGVhZGVyS2V5cyArIDEKCQkJCQkrKyRudW1TdWJIZWFkZXJzOwoJCQkJCS8vIHJlYWQgc3ViSGVhZGVyIHN0cnVjdHVyZXMKCQkJCQkkc3ViSGVhZGVycyA9IGFycmF5KCk7CgkJCQkJJG51bUdseXBoSW5kZXhBcnJheSA9IDA7CgkJCQkJZm9yICgkayA9IDA7ICRrIDwgJG51bVN1YkhlYWRlcnM7ICsrJGspIHsKCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydmaXJzdENvZGUnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydlbnRyeUNvdW50J10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCSRzdWJIZWFkZXJzWyRrXVsnaWREZWx0YSddID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkkc3ViSGVhZGVyc1ska11bJ2lkUmFuZ2VPZmZzZXQnXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydpZFJhbmdlT2Zmc2V0J10gLT0gKDIgKyAoKCRudW1TdWJIZWFkZXJzIC0gJGsgLSAxKSAqIDgpKTsKCQkJCQkJJHN1YkhlYWRlcnNbJGtdWydpZFJhbmdlT2Zmc2V0J10gLz0gMjsKCQkJCQkJJG51bUdseXBoSW5kZXhBcnJheSArPSAkc3ViSGVhZGVyc1ska11bJ2VudHJ5Q291bnQnXTsKCQkJCQl9CgkJCQkJZm9yICgkayA9IDA7ICRrIDwgJG51bUdseXBoSW5kZXhBcnJheTsgKyskaykgewoJCQkJCQkkZ2x5cGhJbmRleEFycmF5WyRrXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQl9CgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgMjU2OyArKyRpKSB7CgkJCQkJCSRrID0gJHN1YkhlYWRlcktleXNbJGldOwoJCQkJCQlpZiAoJGsgPT0gMCkgewoJCQkJCQkJLy8gb25lIGJ5dGUgY29kZQoJCQkJCQkJJGMgPSAkaTsKCQkJCQkJCWlmIChpc3NldCgkc3Vic2V0Y2hhcnNbJGNdKSkgewoJCQkJCQkJCSRnID0gJGdseXBoSW5kZXhBcnJheVswXTsKCQkJCQkJCQkkc3Vic2V0Z2x5cGhzWyRnXSA9IHRydWU7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkvLyB0d28gYnl0ZXMgY29kZQoJCQkJCQkJJHN0YXJ0X2J5dGUgPSAkc3ViSGVhZGVyc1ska11bJ2ZpcnN0Q29kZSddOwoJCQkJCQkJJGVuZF9ieXRlID0gJHN0YXJ0X2J5dGUgKyAkc3ViSGVhZGVyc1ska11bJ2VudHJ5Q291bnQnXTsKCQkJCQkJCWZvciAoJGogPSAkc3RhcnRfYnl0ZTsgJGogPCAkZW5kX2J5dGU7ICsrJGopIHsKCQkJCQkJCQkvLyBjb21iaW5lIGhpZ2ggYW5kIGxvdyBieXRlcwoJCQkJCQkJCSRjID0gKCgkaSA8PCA4KSArICRqKTsKCQkJCQkJCQlpZiAoaXNzZXQoJHN1YnNldGNoYXJzWyRjXSkpIHsKCQkJCQkJCQkJJGlkUmFuZ2VPZmZzZXQgPSAoJHN1YkhlYWRlcnNbJGtdWydpZFJhbmdlT2Zmc2V0J10gKyAkaiAtICRzdWJIZWFkZXJzWyRrXVsnZmlyc3RDb2RlJ10pOwoJCQkJCQkJCQkkZyA9ICgkZ2x5cGhJbmRleEFycmF5WyRpZFJhbmdlT2Zmc2V0XSArICRzdWJIZWFkZXJzWyRrXVsnaWREZWx0YSddKSAlIDY1NTM2OwoJCQkJCQkJCQlpZiAoJGcgPCAwKSB7CgkJCQkJCQkJCQkkZyA9IDA7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJHN1YnNldGdseXBoc1skZ10gPSB0cnVlOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgNDogeyAvLyBGb3JtYXQgNDogU2VnbWVudCBtYXBwaW5nIHRvIGRlbHRhIHZhbHVlcwoJCQkJCSRsZW5ndGggPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkkb2Zmc2V0ICs9IDI7IC8vIHNraXAgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCSRzZWdDb3VudCA9IGZsb29yKFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCkgLyAyKTsKCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJJG9mZnNldCArPSA2OyAvLyBza2lwIHNlYXJjaFJhbmdlLCBlbnRyeVNlbGVjdG9yLCByYW5nZVNoaWZ0CgkJCQkJJGVuZENvdW50ID0gYXJyYXkoKTsgLy8gYXJyYXkgb2YgZW5kIGNoYXJhY3RlciBjb2RlcyBmb3IgZWFjaCBzZWdtZW50CgkJCQkJZm9yICgkayA9IDA7ICRrIDwgJHNlZ0NvdW50OyArKyRrKSB7CgkJCQkJCSRlbmRDb3VudFska10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJfQoJCQkJCSRvZmZzZXQgKz0gMjsgLy8gc2tpcCByZXNlcnZlZFBhZAoJCQkJCSRzdGFydENvdW50ID0gYXJyYXkoKTsgLy8gYXJyYXkgb2Ygc3RhcnQgY2hhcmFjdGVyIGNvZGVzIGZvciBlYWNoIHNlZ21lbnQKCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkc2VnQ291bnQ7ICsrJGspIHsKCQkJCQkJJHN0YXJ0Q291bnRbJGtdID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCX0KCQkJCQkkaWREZWx0YSA9IGFycmF5KCk7IC8vIGRlbHRhIGZvciBhbGwgY2hhcmFjdGVyIGNvZGVzIGluIHNlZ21lbnQKCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkc2VnQ291bnQ7ICsrJGspIHsKCQkJCQkJJGlkRGVsdGFbJGtdID0gVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCX0KCQkJCQkkaWRSYW5nZU9mZnNldCA9IGFycmF5KCk7IC8vIE9mZnNldHMgaW50byBnbHlwaElkQXJyYXkgb3IgMAoJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRzZWdDb3VudDsgKyskaykgewoJCQkJCQkkaWRSYW5nZU9mZnNldFska10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJfQoJCQkJCSRnaWRsZW4gPSAoZmxvb3IoJGxlbmd0aCAvIDIpIC0gOCAtICg0ICogJHNlZ0NvdW50KSk7CgkJCQkJJGdseXBoSWRBcnJheSA9IGFycmF5KCk7IC8vIGdseXBoIGluZGV4IGFycmF5CgkJCQkJZm9yICgkayA9IDA7ICRrIDwgJGdpZGxlbjsgKyskaykgewoJCQkJCQkkZ2x5cGhJZEFycmF5WyRrXSA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQl9CgkJCQkJZm9yICgkayA9IDA7ICRrIDwgJHNlZ0NvdW50OyArKyRrKSB7CgkJCQkJCWZvciAoJGMgPSAkc3RhcnRDb3VudFska107ICRjIDw9ICRlbmRDb3VudFska107ICsrJGMpIHsKCQkJCQkJCWlmIChpc3NldCgkc3Vic2V0Y2hhcnNbJGNdKSkgewoJCQkJCQkJCWlmICgkaWRSYW5nZU9mZnNldFska10gPT0gMCkgewoJCQkJCQkJCQkkZyA9ICgkaWREZWx0YVska10gKyAkYykgJSA2NTUzNjsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkZ2lkID0gKGZsb29yKCRpZFJhbmdlT2Zmc2V0WyRrXSAvIDIpICsgKCRjIC0gJHN0YXJ0Q291bnRbJGtdKSAtICgkc2VnQ291bnQgLSAkaykpOwoJCQkJCQkJCQkkZyA9ICgkZ2x5cGhJZEFycmF5WyRnaWRdICsgJGlkRGVsdGFbJGtdKSAlIDY1NTM2OwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoJGcgPCAwKSB7CgkJCQkJCQkJCSRnID0gMDsKCQkJCQkJCQl9CgkJCQkJCQkJJHN1YnNldGdseXBoc1skZ10gPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQkKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgNjogeyAvLyBGb3JtYXQgNjogVHJpbW1lZCB0YWJsZSBtYXBwaW5nCgkJCQkJJG9mZnNldCArPSA0OyAvLyBza2lwIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCSRmaXJzdENvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkkZW50cnlDb3VudCA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJJG9mZnNldCArPSAyOwoJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRlbnRyeUNvdW50OyArKyRrKSB7CgkJCQkJCSRjID0gKCRrICsgJGZpcnN0Q29kZSk7CgkJCQkJCWlmIChpc3NldCgkc3Vic2V0Y2hhcnNbJGNdKSkgewoJCQkJCQkJJGcgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJHN1YnNldGdseXBoc1skZ10gPSB0cnVlOwoJCQkJCQl9CgkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDg6IHsgLy8gRm9ybWF0IDg6IE1peGVkIDE2LWJpdCBhbmQgMzItYml0IGNvdmVyYWdlCgkJCQkJJG9mZnNldCArPSAxMDsgLy8gc2tpcCByZXNlcnZlZCwgbGVuZ3RoIGFuZCB2ZXJzaW9uL2xhbmd1YWdlCgkJCQkJZm9yICgkayA9IDA7ICRrIDwgODE5MjsgKyskaykgewoJCQkJCQkkaXMzMlska10gPSBUQ1BERl9TVEFUSUM6Ol9nZXRCWVRFKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJKyskb2Zmc2V0OwoJCQkJCX0KCQkJCQkkbkdyb3VwcyA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgJG5Hcm91cHM7ICsrJGkpIHsKCQkJCQkJJHN0YXJ0Q2hhckNvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJJGVuZENoYXJDb2RlID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCSRzdGFydEdseXBoSUQgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJZm9yICgkayA9ICRzdGFydENoYXJDb2RlOyAkayA8PSAkZW5kQ2hhckNvZGU7ICsrJGspIHsKCQkJCQkJCSRpczMyaWR4ID0gZmxvb3IoJGMgLyA4KTsKCQkJCQkJCWlmICgoaXNzZXQoJGlzMzJbJGlzMzJpZHhdKSkgQU5EICgoJGlzMzJbJGlzMzJpZHhdICYgKDEgPDwgKDcgLSAoJGMgJSA4KSkpKSA9PSAwKSkgewoJCQkJCQkJCSRjID0gJGs7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCS8vIDMyIGJpdCBmb3JtYXQKCQkJCQkJCQkvLyBjb252ZXJ0IHRvIGRlY2ltYWwgKGh0dHA6Ly93d3cudW5pY29kZS5vcmcvZmFxLy91dGZfYm9tLmh0bWwjdXRmMTYtNCkKCQkJCQkJCQkvL0xFQURfT0ZGU0VUID0gKDB4RDgwMCAtICgweDEwMDAwID4+IDEwKSkgPSA1NTIzMgoJCQkJCQkJCS8vU1VSUk9HQVRFX09GRlNFVCA9ICgweDEwMDAwIC0gKDB4RDgwMCA8PCAxMCkgLSAweERDMDApID0gLTU2NjEzODg4CgkJCQkJCQkJJGMgPSAoKDU1MjMyICsgKCRrID4+IDEwKSkgPDwgMTApICsgKDB4REMwMCArICgkayAmIDB4M0ZGKSkgLTU2NjEzODg4OwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRzdWJzZXRjaGFyc1skY10pKSB7CgkJCQkJCQkJJHN1YnNldGdseXBoc1skc3RhcnRHbHlwaElEXSA9IHRydWU7CgkJCQkJCQl9CgkJCQkJCQkrKyRzdGFydEdseXBoSUQ7CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDEwOiB7IC8vIEZvcm1hdCAxMDogVHJpbW1lZCBhcnJheQoJCQkJCSRvZmZzZXQgKz0gMTA7IC8vIHNraXAgcmVzZXJ2ZWQsIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCSRzdGFydENoYXJDb2RlID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkkbnVtQ2hhcnMgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJJG9mZnNldCArPSA0OwoJCQkJCWZvciAoJGsgPSAwOyAkayA8ICRudW1DaGFyczsgKyskaykgewoJCQkJCQkkYyA9ICgkayArICRzdGFydENoYXJDb2RlKTsKCQkJCQkJaWYgKGlzc2V0KCRzdWJzZXRjaGFyc1skY10pKSB7CgkJCQkJCQkkZyA9IFRDUERGX1NUQVRJQzo6X2dldFVTSE9SVCgkZm9udCwgJG9mZnNldCk7CgkJCQkJCQkkc3Vic2V0Z2x5cGhzWyRnXSA9IHRydWU7CgkJCQkJCX0KCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMTI6IHsgLy8gRm9ybWF0IDEyOiBTZWdtZW50ZWQgY292ZXJhZ2UKCQkJCQkkb2Zmc2V0ICs9IDEwOyAvLyBza2lwIGxlbmd0aCBhbmQgdmVyc2lvbi9sYW5ndWFnZQoJCQkJCSRuR3JvdXBzID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQlmb3IgKCRrID0gMDsgJGsgPCAkbkdyb3VwczsgKyskaykgewoJCQkJCQkkc3RhcnRDaGFyQ29kZSA9IFRDUERGX1NUQVRJQzo6X2dldFVMT05HKCRmb250LCAkb2Zmc2V0KTsKCQkJCQkJJG9mZnNldCArPSA0OwoJCQkJCQkkZW5kQ2hhckNvZGUgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVTE9ORygkZm9udCwgJG9mZnNldCk7CgkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJJHN0YXJ0R2x5cGhDb2RlID0gVENQREZfU1RBVElDOjpfZ2V0VUxPTkcoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ICs9IDQ7CgkJCQkJCWZvciAoJGMgPSAkc3RhcnRDaGFyQ29kZTsgJGMgPD0gJGVuZENoYXJDb2RlOyArKyRjKSB7CgkJCQkJCQlpZiAoaXNzZXQoJHN1YnNldGNoYXJzWyRjXSkpIHsKCQkJCQkJCQkkc3Vic2V0Z2x5cGhzWyRzdGFydEdseXBoQ29kZV0gPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQkJKyskc3RhcnRHbHlwaENvZGU7CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDEzOiB7IC8vIEZvcm1hdCAxMzogTWFueS10by1vbmUgcmFuZ2UgbWFwcGluZ3MKCQkJCQkvLyB0byBiZSBpbXBsZW1lbnRlZCAuLi4KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMTQ6IHsgLy8gRm9ybWF0IDE0OiBVbmljb2RlIFZhcmlhdGlvbiBTZXF1ZW5jZXMKCQkJCQkvLyB0byBiZSBpbXBsZW1lbnRlZCAuLi4KCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkvLyBpbmNsdWRlIGFsbCBwYXJ0cyBvZiBjb21wb3NpdGUgZ2x5cGhzCgkJJG5ld19zZ2EgPSAkc3Vic2V0Z2x5cGhzOwoJCXdoaWxlICghZW1wdHkoJG5ld19zZ2EpKSB7CgkJCSRzZ2EgPSAkbmV3X3NnYTsKCQkJJG5ld19zZ2EgPSBhcnJheSgpOwoJCQlmb3JlYWNoICgkc2dhIGFzICRrZXkgPT4gJHZhbCkgewoJCQkJaWYgKGlzc2V0KCRpbmRleFRvTG9jWyRrZXldKSkgewoJCQkJCSRvZmZzZXQgPSAoJHRhYmxlWydnbHlmJ11bJ29mZnNldCddICsgJGluZGV4VG9Mb2NbJGtleV0pOwoJCQkJCSRudW1iZXJPZkNvbnRvdXJzID0gVENQREZfU1RBVElDOjpfZ2V0U0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQlpZiAoJG51bWJlck9mQ29udG91cnMgPCAwKSB7IC8vIGNvbXBvc2l0ZSBnbHlwaAoJCQkJCQkkb2Zmc2V0ICs9IDg7IC8vIHNraXAgeE1pbiwgeU1pbiwgeE1heCwgeU1heAoJCQkJCQlkbyB7CgkJCQkJCQkkZmxhZ3MgPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJJGdseXBoSW5kZXggPSBUQ1BERl9TVEFUSUM6Ol9nZXRVU0hPUlQoJGZvbnQsICRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCArPSAyOwoJCQkJCQkJaWYgKCFpc3NldCgkc3Vic2V0Z2x5cGhzWyRnbHlwaEluZGV4XSkpIHsKCQkJCQkJCQkvLyBhZGQgbWlzc2luZyBnbHlwaHMKCQkJCQkJCQkkbmV3X3NnYVskZ2x5cGhJbmRleF0gPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQkJLy8gc2tpcCBzb21lIGJ5dGVzIGJ5IGNhc2UKCQkJCQkJCWlmICgkZmxhZ3MgJiAxKSB7CgkJCQkJCQkJJG9mZnNldCArPSA0OwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkb2Zmc2V0ICs9IDI7CgkJCQkJCQl9CgkJCQkJCQlpZiAoJGZsYWdzICYgOCkgewoJCQkJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQkJCX0gZWxzZWlmICgkZmxhZ3MgJiA2NCkgewoJCQkJCQkJCSRvZmZzZXQgKz0gNDsKCQkJCQkJCX0gZWxzZWlmICgkZmxhZ3MgJiAxMjgpIHsKCQkJCQkJCQkkb2Zmc2V0ICs9IDg7CgkJCQkJCQl9CgkJCQkJCX0gd2hpbGUgKCRmbGFncyAmIDMyKTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJJHN1YnNldGdseXBocyArPSAkbmV3X3NnYTsKCQl9CgkJLy8gc29ydCBnbHlwaHMgYnkga2V5IChhbmQgcmVtb3ZlIGR1cGxpY2F0ZXMpCgkJa3NvcnQoJHN1YnNldGdseXBocyk7CgkJLy8gYnVpbGQgbmV3IGdseWYgYW5kIGxvY2EgdGFibGVzCgkJJGdseWYgPSAnJzsKCQkkbG9jYSA9ICcnOwoJCSRvZmZzZXQgPSAwOwoJCSRnbHlmX29mZnNldCA9ICR0YWJsZVsnZ2x5ZiddWydvZmZzZXQnXTsKCQlmb3IgKCRpID0gMDsgJGkgPCAkdG90X251bV9nbHlwaHM7ICsrJGkpIHsKCQkJaWYgKGlzc2V0KCRzdWJzZXRnbHlwaHNbJGldKSkgewoJCQkJJGxlbmd0aCA9ICgkaW5kZXhUb0xvY1soJGkgKyAxKV0gLSAkaW5kZXhUb0xvY1skaV0pOwoJCQkJJGdseWYgLj0gc3Vic3RyKCRmb250LCAoJGdseWZfb2Zmc2V0ICsgJGluZGV4VG9Mb2NbJGldKSwgJGxlbmd0aCk7CgkJCX0gZWxzZSB7CgkJCQkkbGVuZ3RoID0gMDsKCQkJfQoJCQlpZiAoJHNob3J0X29mZnNldCkgewoJCQkJJGxvY2EgLj0gcGFjaygnbicsIGZsb29yKCRvZmZzZXQgLyAyKSk7CgkJCX0gZWxzZSB7CgkJCQkkbG9jYSAuPSBwYWNrKCdOJywgJG9mZnNldCk7CgkJCX0KCQkJJG9mZnNldCArPSAkbGVuZ3RoOwoJCX0KCQkvLyBhcnJheSBvZiB0YWJsZSBuYW1lcyB0byBwcmVzZXJ2ZSAobG9jYSBhbmQgZ2x5ZiB0YWJsZXMgd2lsbCBiZSBhZGRlZCBsYXRlcikKCQkvLyB0aGUgY21hcCB0YWJsZSBpcyBub3QgbmVlZGVkIGFuZCBzaGFsbCBub3QgYmUgcHJlc2VudCwgc2luY2UgdGhlIG1hcHBpbmcgZnJvbSBjaGFyYWN0ZXIgY29kZXMgdG8gZ2x5cGggZGVzY3JpcHRpb25zIGlzIHByb3ZpZGVkIHNlcGFyYXRlbHkKCQkkdGFibGVfbmFtZXMgPSBhcnJheSAoJ2hlYWQnLCAnaGhlYScsICdobXR4JywgJ21heHAnLCAnY3Z0ICcsICdmcGdtJywgJ3ByZXAnKTsgLy8gbWluaW11bSByZXF1aXJlZCB0YWJsZSBuYW1lcwoJCS8vIGdldCB0aGUgdGFibGVzIHRvIHByZXNlcnZlCgkJJG9mZnNldCA9IDEyOwoJCWZvcmVhY2ggKCR0YWJsZSBhcyAkdGFnID0+ICR2YWwpIHsKCQkJaWYgKGluX2FycmF5KCR0YWcsICR0YWJsZV9uYW1lcykpIHsKCQkJCSR0YWJsZVskdGFnXVsnZGF0YSddID0gc3Vic3RyKCRmb250LCAkdGFibGVbJHRhZ11bJ29mZnNldCddLCAkdGFibGVbJHRhZ11bJ2xlbmd0aCddKTsKCQkJCWlmICgkdGFnID09ICdoZWFkJykgewoJCQkJCS8vIHNldCB0aGUgY2hlY2tTdW1BZGp1c3RtZW50IHRvIDAKCQkJCQkkdGFibGVbJHRhZ11bJ2RhdGEnXSA9IHN1YnN0cigkdGFibGVbJHRhZ11bJ2RhdGEnXSwgMCwgOCkuIlx4MFx4MFx4MFx4MCIuc3Vic3RyKCR0YWJsZVskdGFnXVsnZGF0YSddLCAxMik7CgkJCQl9CgkJCQkkcGFkID0gNCAtICgkdGFibGVbJHRhZ11bJ2xlbmd0aCddICUgNCk7CgkJCQlpZiAoJHBhZCAhPSA0KSB7CgkJCQkJLy8gdGhlIGxlbmd0aCBvZiBhIHRhYmxlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzCgkJCQkJJHRhYmxlWyR0YWddWydsZW5ndGgnXSArPSAkcGFkOwoJCQkJCSR0YWJsZVskdGFnXVsnZGF0YSddIC49IHN0cl9yZXBlYXQoIlx4MCIsICRwYWQpOwoJCQkJfQoJCQkJJHRhYmxlWyR0YWddWydvZmZzZXQnXSA9ICRvZmZzZXQ7CgkJCQkkb2Zmc2V0ICs9ICR0YWJsZVskdGFnXVsnbGVuZ3RoJ107CgkJCQkvLyBjaGVjayBzdW0gaXMgbm90IGNoYW5nZWQgKHNvIGtlZXAgdGhlIGZvbGxvd2luZyBsaW5lIGNvbW1lbnRlZCkKCQkJCS8vJHRhYmxlWyR0YWddWydjaGVja1N1bSddID0gc2VsZjo6X2dldFRURnRhYmxlQ2hlY2tzdW0oJHRhYmxlWyR0YWddWydkYXRhJ10sICR0YWJsZVskdGFnXVsnbGVuZ3RoJ10pOwoJCQl9IGVsc2UgewoJCQkJdW5zZXQoJHRhYmxlWyR0YWddKTsKCQkJfQoJCX0KCQkvLyBhZGQgbG9jYQoJCSR0YWJsZVsnbG9jYSddWydkYXRhJ10gPSAkbG9jYTsKCQkkdGFibGVbJ2xvY2EnXVsnbGVuZ3RoJ10gPSBzdHJsZW4oJGxvY2EpOwoJCSRwYWQgPSA0IC0gKCR0YWJsZVsnbG9jYSddWydsZW5ndGgnXSAlIDQpOwoJCWlmICgkcGFkICE9IDQpIHsKCQkJLy8gdGhlIGxlbmd0aCBvZiBhIHRhYmxlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzCgkJCSR0YWJsZVsnbG9jYSddWydsZW5ndGgnXSArPSAkcGFkOwoJCQkkdGFibGVbJ2xvY2EnXVsnZGF0YSddIC49IHN0cl9yZXBlYXQoIlx4MCIsICRwYWQpOwoJCX0KCQkkdGFibGVbJ2xvY2EnXVsnb2Zmc2V0J10gPSAkb2Zmc2V0OwoJCSR0YWJsZVsnbG9jYSddWydjaGVja1N1bSddID0gc2VsZjo6X2dldFRURnRhYmxlQ2hlY2tzdW0oJHRhYmxlWydsb2NhJ11bJ2RhdGEnXSwgJHRhYmxlWydsb2NhJ11bJ2xlbmd0aCddKTsKCQkkb2Zmc2V0ICs9ICR0YWJsZVsnbG9jYSddWydsZW5ndGgnXTsKCQkvLyBhZGQgZ2x5ZgoJCSR0YWJsZVsnZ2x5ZiddWydkYXRhJ10gPSAkZ2x5ZjsKCQkkdGFibGVbJ2dseWYnXVsnbGVuZ3RoJ10gPSBzdHJsZW4oJGdseWYpOwoJCSRwYWQgPSA0IC0gKCR0YWJsZVsnZ2x5ZiddWydsZW5ndGgnXSAlIDQpOwoJCWlmICgkcGFkICE9IDQpIHsKCQkJLy8gdGhlIGxlbmd0aCBvZiBhIHRhYmxlIG11c3QgYmUgYSBtdWx0aXBsZSBvZiBmb3VyIGJ5dGVzCgkJCSR0YWJsZVsnZ2x5ZiddWydsZW5ndGgnXSArPSAkcGFkOwoJCQkkdGFibGVbJ2dseWYnXVsnZGF0YSddIC49IHN0cl9yZXBlYXQoIlx4MCIsICRwYWQpOwoJCX0KCQkkdGFibGVbJ2dseWYnXVsnb2Zmc2V0J10gPSAkb2Zmc2V0OwoJCSR0YWJsZVsnZ2x5ZiddWydjaGVja1N1bSddID0gc2VsZjo6X2dldFRURnRhYmxlQ2hlY2tzdW0oJHRhYmxlWydnbHlmJ11bJ2RhdGEnXSwgJHRhYmxlWydnbHlmJ11bJ2xlbmd0aCddKTsKCQkvLyByZWJ1aWxkIGZvbnQKCQkkZm9udCA9ICcnOwoJCSRmb250IC49IHBhY2soJ04nLCAweDEwMDAwKTsgLy8gc2ZudCB2ZXJzaW9uCgkJJG51bVRhYmxlcyA9IGNvdW50KCR0YWJsZSk7CgkJJGZvbnQgLj0gcGFjaygnbicsICRudW1UYWJsZXMpOyAvLyBudW1UYWJsZXMKCQkkZW50cnlTZWxlY3RvciA9IGZsb29yKGxvZygkbnVtVGFibGVzLCAyKSk7CgkJJHNlYXJjaFJhbmdlID0gcG93KDIsICRlbnRyeVNlbGVjdG9yKSAqIDE2OwoJCSRyYW5nZVNoaWZ0ID0gKCRudW1UYWJsZXMgKiAxNikgLSAkc2VhcmNoUmFuZ2U7CgkJJGZvbnQgLj0gcGFjaygnbicsICRzZWFyY2hSYW5nZSk7IC8vIHNlYXJjaFJhbmdlCgkJJGZvbnQgLj0gcGFjaygnbicsICRlbnRyeVNlbGVjdG9yKTsgLy8gZW50cnlTZWxlY3RvcgoJCSRmb250IC49IHBhY2soJ24nLCAkcmFuZ2VTaGlmdCk7IC8vIHJhbmdlU2hpZnQKCQkkb2Zmc2V0ID0gKCRudW1UYWJsZXMgKiAxNik7CgkJZm9yZWFjaCAoJHRhYmxlIGFzICR0YWcgPT4gJGRhdGEpIHsKCQkJJGZvbnQgLj0gJHRhZzsgLy8gdGFnCgkJCSRmb250IC49IHBhY2soJ04nLCAkZGF0YVsnY2hlY2tTdW0nXSk7IC8vIGNoZWNrU3VtCgkJCSRmb250IC49IHBhY2soJ04nLCAoJGRhdGFbJ29mZnNldCddICsgJG9mZnNldCkpOyAvLyBvZmZzZXQKCQkJJGZvbnQgLj0gcGFjaygnTicsICRkYXRhWydsZW5ndGgnXSk7IC8vIGxlbmd0aAoJCX0KCQlmb3JlYWNoICgkdGFibGUgYXMgJGRhdGEpIHsKCQkJJGZvbnQgLj0gJGRhdGFbJ2RhdGEnXTsKCQl9CgkJLy8gc2V0IGNoZWNrU3VtQWRqdXN0bWVudCBvbiBoZWFkIHRhYmxlCgkJJGNoZWNrU3VtQWRqdXN0bWVudCA9IDB4QjFCMEFGQkEgLSBzZWxmOjpfZ2V0VFRGdGFibGVDaGVja3N1bSgkZm9udCwgc3RybGVuKCRmb250KSk7CgkJJGZvbnQgPSBzdWJzdHIoJGZvbnQsIDAsICR0YWJsZVsnaGVhZCddWydvZmZzZXQnXSArIDgpLnBhY2soJ04nLCAkY2hlY2tTdW1BZGp1c3RtZW50KS5zdWJzdHIoJGZvbnQsICR0YWJsZVsnaGVhZCddWydvZmZzZXQnXSArIDEyKTsKCQlyZXR1cm4gJGZvbnQ7Cgl9CgoJLyoqCgkgKiBPdXRwdXRzIGZvbnQgd2lkdGhzCgkgKiBAcGFyYW0gJGZvbnQgKGFycmF5KSBmb250IGRhdGEKCSAqIEBwYXJhbSAkY2lkb2Zmc2V0IChpbnQpIG9mZnNldCBmb3IgQ0lEIHZhbHVlcwoJICogQHJldHVybiBQREYgY29tbWFuZCBzdHJpbmcgZm9yIGZvbnQgd2lkdGhzCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuNC4wMDAgKDIwMDgtMTItMDcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9wdXRmb250d2lkdGhzKCRmb250LCAkY2lkb2Zmc2V0PTApIHsKCQlrc29ydCgkZm9udFsnY3cnXSk7CgkJJHJhbmdlaWQgPSAwOwoJCSRyYW5nZSA9IGFycmF5KCk7CgkJJHByZXZjaWQgPSAtMjsKCQkkcHJldndpZHRoID0gLTE7CgkJJGludGVydmFsID0gZmFsc2U7CgkJLy8gZm9yIGVhY2ggY2hhcmFjdGVyCgkJZm9yZWFjaCAoJGZvbnRbJ2N3J10gYXMgJGNpZCA9PiAkd2lkdGgpIHsKCQkJJGNpZCAtPSAkY2lkb2Zmc2V0OwoJCQlpZiAoJGZvbnRbJ3N1YnNldCddIEFORCAoIWlzc2V0KCRmb250WydzdWJzZXRjaGFycyddWyRjaWRdKSkpIHsKCQkJCS8vIGlnbm9yZSB0aGUgdW51c2VkIGNoYXJhY3RlcnMgKGZvbnQgc3Vic2V0dGluZykKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCWlmICgkd2lkdGggIT0gJGZvbnRbJ2R3J10pIHsKCQkJCWlmICgkY2lkID09ICgkcHJldmNpZCArIDEpKSB7CgkJCQkJLy8gY29uc2VjdXRpdmUgQ0lECgkJCQkJaWYgKCR3aWR0aCA9PSAkcHJldndpZHRoKSB7CgkJCQkJCWlmICgkd2lkdGggPT0gJHJhbmdlWyRyYW5nZWlkXVswXSkgewoJCQkJCQkJJHJhbmdlWyRyYW5nZWlkXVtdID0gJHdpZHRoOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJYXJyYXlfcG9wKCRyYW5nZVskcmFuZ2VpZF0pOwoJCQkJCQkJLy8gbmV3IHJhbmdlCgkJCQkJCQkkcmFuZ2VpZCA9ICRwcmV2Y2lkOwoJCQkJCQkJJHJhbmdlWyRyYW5nZWlkXSA9IGFycmF5KCk7CgkJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkcHJldndpZHRoOwoJCQkJCQkJJHJhbmdlWyRyYW5nZWlkXVtdID0gJHdpZHRoOwoJCQkJCQl9CgkJCQkJCSRpbnRlcnZhbCA9IHRydWU7CgkJCQkJCSRyYW5nZVskcmFuZ2VpZF1bJ2ludGVydmFsJ10gPSB0cnVlOwoJCQkJCX0gZWxzZSB7CgkJCQkJCWlmICgkaW50ZXJ2YWwpIHsKCQkJCQkJCS8vIG5ldyByYW5nZQoJCQkJCQkJJHJhbmdlaWQgPSAkY2lkOwoJCQkJCQkJJHJhbmdlWyRyYW5nZWlkXSA9IGFycmF5KCk7CgkJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkd2lkdGg7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcmFuZ2VbJHJhbmdlaWRdW10gPSAkd2lkdGg7CgkJCQkJCX0KCQkJCQkJJGludGVydmFsID0gZmFsc2U7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQkvLyBuZXcgcmFuZ2UKCQkJCQkkcmFuZ2VpZCA9ICRjaWQ7CgkJCQkJJHJhbmdlWyRyYW5nZWlkXSA9IGFycmF5KCk7CgkJCQkJJHJhbmdlWyRyYW5nZWlkXVtdID0gJHdpZHRoOwoJCQkJCSRpbnRlcnZhbCA9IGZhbHNlOwoJCQkJfQoJCQkJJHByZXZjaWQgPSAkY2lkOwoJCQkJJHByZXZ3aWR0aCA9ICR3aWR0aDsKCQkJfQoJCX0KCQkvLyBvcHRpbWl6ZSByYW5nZXMKCQkkcHJldmsgPSAtMTsKCQkkbmV4dGsgPSAtMTsKCQkkcHJldmludCA9IGZhbHNlOwoJCWZvcmVhY2ggKCRyYW5nZSBhcyAkayA9PiAkd3MpIHsKCQkJJGN3cyA9IGNvdW50KCR3cyk7CgkJCWlmICgoJGsgPT0gJG5leHRrKSBBTkQgKCEkcHJldmludCkgQU5EICgoIWlzc2V0KCR3c1snaW50ZXJ2YWwnXSkpIE9SICgkY3dzIDwgNCkpKSB7CgkJCQlpZiAoaXNzZXQoJHJhbmdlWyRrXVsnaW50ZXJ2YWwnXSkpIHsKCQkJCQl1bnNldCgkcmFuZ2VbJGtdWydpbnRlcnZhbCddKTsKCQkJCX0KCQkJCSRyYW5nZVskcHJldmtdID0gYXJyYXlfbWVyZ2UoJHJhbmdlWyRwcmV2a10sICRyYW5nZVska10pOwoJCQkJdW5zZXQoJHJhbmdlWyRrXSk7CgkJCX0gZWxzZSB7CgkJCQkkcHJldmsgPSAkazsKCQkJfQoJCQkkbmV4dGsgPSAkayArICRjd3M7CgkJCWlmIChpc3NldCgkd3NbJ2ludGVydmFsJ10pKSB7CgkJCQlpZiAoJGN3cyA+IDMpIHsKCQkJCQkkcHJldmludCA9IHRydWU7CgkJCQl9IGVsc2UgewoJCQkJCSRwcmV2aW50ID0gZmFsc2U7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHJhbmdlWyRrXVsnaW50ZXJ2YWwnXSkpIHsKCQkJCQl1bnNldCgkcmFuZ2VbJGtdWydpbnRlcnZhbCddKTsKCQkJCX0KCQkJCS0tJG5leHRrOwoJCQl9IGVsc2UgewoJCQkJJHByZXZpbnQgPSBmYWxzZTsKCQkJfQoJCX0KCQkvLyBvdXRwdXQgZGF0YQoJCSR3ID0gJyc7CgkJZm9yZWFjaCAoJHJhbmdlIGFzICRrID0+ICR3cykgewoJCQlpZiAoY291bnQoYXJyYXlfY291bnRfdmFsdWVzKCR3cykpID09IDEpIHsKCQkJCS8vIGludGVydmFsIG1vZGUgaXMgbW9yZSBjb21wYWN0CgkJCQkkdyAuPSAnICcuJGsuJyAnLigkayArIGNvdW50KCR3cykgLSAxKS4nICcuJHdzWzBdOwoJCQl9IGVsc2UgewoJCQkJLy8gcmFuZ2UgbW9kZQoJCQkJJHcgLj0gJyAnLiRrLicgWyAnLmltcGxvZGUoJyAnLCAkd3MpLicgXSc7CgkJCX0KCQl9CgkJcmV0dXJuICcvVyBbJy4kdy4nIF0nOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgdW5pY29kZSBjYXJhY3RlciBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlCgkgKiBAcGFyYW0gJGMgKGludCkgVVRGLTggdmFsdWUKCSAqIEBwYXJhbSAkdW5pY29kZSAoYm9vbGVhbikgVHJ1ZSBpZiB3ZSBhcmUgaW4gdW5pY29kZSBtb2RlLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcmV0dXJuIFJldHVybnMgdGhlIHNwZWNpZmllZCBjaGFyYWN0ZXIuCgkgKiBAc2luY2UgMi4zLjAwMCAoMjAwOC0wMy0wNSkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5pY2hyKCRjLCAkdW5pY29kZT10cnVlKSB7CgkJaWYgKCEkdW5pY29kZSkgewoJCQlyZXR1cm4gY2hyKCRjKTsKCQl9IGVsc2VpZiAoJGMgPD0gMHg3RikgewoJCQkvLyBvbmUgYnl0ZQoJCQlyZXR1cm4gY2hyKCRjKTsKCQl9IGVsc2VpZiAoJGMgPD0gMHg3RkYpIHsKCQkJLy8gdHdvIGJ5dGVzCgkJCXJldHVybiBjaHIoMHhDMCB8ICRjID4+IDYpLmNocigweDgwIHwgJGMgJiAweDNGKTsKCQl9IGVsc2VpZiAoJGMgPD0gMHhGRkZGKSB7CgkJCS8vIHRocmVlIGJ5dGVzCgkJCXJldHVybiBjaHIoMHhFMCB8ICRjID4+IDEyKS5jaHIoMHg4MCB8ICRjID4+IDYgJiAweDNGKS5jaHIoMHg4MCB8ICRjICYgMHgzRik7CgkJfSBlbHNlaWYgKCRjIDw9IDB4MTBGRkZGKSB7CgkJCS8vIGZvdXIgYnl0ZXMKCQkJcmV0dXJuIGNocigweEYwIHwgJGMgPj4gMTgpLmNocigweDgwIHwgJGMgPj4gMTIgJiAweDNGKS5jaHIoMHg4MCB8ICRjID4+IDYgJiAweDNGKS5jaHIoMHg4MCB8ICRjICYgMHgzRik7CgkJfSBlbHNlIHsKCQkJcmV0dXJuICcnOwoJCX0KCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHVuaWNvZGUgY2FyYWN0ZXIgc3BlY2lmaWVkIGJ5IFVURi04IHZhbHVlCgkgKiBAcGFyYW0gJGMgKGludCkgVVRGLTggdmFsdWUKCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdW5pY2hyVW5pY29kZSgkYykgewoJCXJldHVybiBzZWxmOjp1bmljaHIoJGMsIHRydWUpOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgdW5pY29kZSBjYXJhY3RlciBzcGVjaWZpZWQgYnkgQVNDSUkgdmFsdWUKCSAqIEBwYXJhbSAkYyAoaW50KSBVVEYtOCB2YWx1ZQoJICogQHJldHVybiBSZXR1cm5zIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVyLgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1bmljaHJBU0NJSSgkYykgewoJCXJldHVybiBzZWxmOjp1bmljaHIoJGMsIGZhbHNlKTsKCX0KCgkvKioKCSAqIENvbnZlcnRzIGFycmF5IG9mIFVURi04IGNoYXJhY3RlcnMgdG8gVVRGMTYtQkUgc3RyaW5nLjxicj4KCSAqIEJhc2VkIG9uOiBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMjc4MS5odG1sCgkgKiA8cHJlPgoJICogICBFbmNvZGluZyBVVEYtMTY6CgkgKgoJICogICBFbmNvZGluZyBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBhbiBJU08gMTA2NDYgY2hhcmFjdGVyIHZhbHVlIHRvCgkgKiAgICBVVEYtMTYgcHJvY2VlZHMgYXMgZm9sbG93cy4gTGV0IFUgYmUgdGhlIGNoYXJhY3RlciBudW1iZXIsIG5vIGdyZWF0ZXIKCSAqICAgIHRoYW4gMHgxMEZGRkYuCgkgKgoJICogICAgMSkgSWYgVSA8IDB4MTAwMDAsIGVuY29kZSBVIGFzIGEgMTYtYml0IHVuc2lnbmVkIGludGVnZXIgYW5kCgkgKiAgICAgICB0ZXJtaW5hdGUuCgkgKgoJICogICAgMikgTGV0IFUnID0gVSAtIDB4MTAwMDAuIEJlY2F1c2UgVSBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gMHgxMEZGRkYsCgkgKiAgICAgICBVJyBtdXN0IGJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byAweEZGRkZGLiBUaGF0IGlzLCBVJyBjYW4gYmUKCSAqICAgICAgIHJlcHJlc2VudGVkIGluIDIwIGJpdHMuCgkgKgoJICogICAgMykgSW5pdGlhbGl6ZSB0d28gMTYtYml0IHVuc2lnbmVkIGludGVnZXJzLCBXMSBhbmQgVzIsIHRvIDB4RDgwMCBhbmQKCSAqICAgICAgIDB4REMwMCwgcmVzcGVjdGl2ZWx5LiBUaGVzZSBpbnRlZ2VycyBlYWNoIGhhdmUgMTAgYml0cyBmcmVlIHRvCgkgKiAgICAgICBlbmNvZGUgdGhlIGNoYXJhY3RlciB2YWx1ZSwgZm9yIGEgdG90YWwgb2YgMjAgYml0cy4KCSAqCgkgKiAgICA0KSBBc3NpZ24gdGhlIDEwIGhpZ2gtb3JkZXIgYml0cyBvZiB0aGUgMjAtYml0IFUnIHRvIHRoZSAxMCBsb3ctb3JkZXIKCSAqICAgICAgIGJpdHMgb2YgVzEgYW5kIHRoZSAxMCBsb3ctb3JkZXIgYml0cyBvZiBVJyB0byB0aGUgMTAgbG93LW9yZGVyCgkgKiAgICAgICBiaXRzIG9mIFcyLiBUZXJtaW5hdGUuCgkgKgoJICogICAgR3JhcGhpY2FsbHksIHN0ZXBzIDIgdGhyb3VnaCA0IGxvb2sgbGlrZToKCSAqICAgIFUnID0geXl5eXl5eXl5eXh4eHh4eHh4eHgKCSAqICAgIFcxID0gMTEwMTEweXl5eXl5eXl5eQoJICogICAgVzIgPSAxMTAxMTF4eHh4eHh4eHh4CgkgKiA8L3ByZT4KCSAqIEBwYXJhbSAkdW5pY29kZSAoYXJyYXkpIGFycmF5IGNvbnRhaW5pbmcgVVRGLTggdW5pY29kZSB2YWx1ZXMKCSAqIEBwYXJhbSAkc2V0Ym9tIChib29sZWFuKSBpZiB0cnVlIHNldCB0aGUgQnl0ZSBPcmRlciBNYXJrIChCT00gPSAweEZFRkYpCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA4KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBhcnJVVEY4VG9VVEYxNkJFKCR1bmljb2RlLCAkc2V0Ym9tPWZhbHNlKSB7CgkJJG91dHN0ciA9ICcnOyAvLyBzdHJpbmcgdG8gYmUgcmV0dXJuZWQKCQlpZiAoJHNldGJvbSkgewoJCQkkb3V0c3RyIC49ICJceEZFXHhGRiI7IC8vIEJ5dGUgT3JkZXIgTWFyayAoQk9NKQoJCX0KCQlmb3JlYWNoICgkdW5pY29kZSBhcyAkY2hhcikgewoJCQlpZiAoJGNoYXIgPT0gMHgyMDBiKSB7CgkJCQkvLyBza2lwIFVuaWNvZGUgQ2hhcmFjdGVyICdaRVJPIFdJRFRIIFNQQUNFJyAoREVDOjgyMDMsIFUrMjAwQikKCQkJfSBlbHNlaWYgKCRjaGFyID09IDB4RkZGRCkgewoJCQkJJG91dHN0ciAuPSAiXHhGRlx4RkQiOyAvLyByZXBsYWNlbWVudCBjaGFyYWN0ZXIKCQkJfSBlbHNlaWYgKCRjaGFyIDwgMHgxMDAwMCkgewoJCQkJJG91dHN0ciAuPSBjaHIoJGNoYXIgPj4gMHgwOCk7CgkJCQkkb3V0c3RyIC49IGNocigkY2hhciAmIDB4RkYpOwoJCQl9IGVsc2UgewoJCQkJJGNoYXIgLT0gMHgxMDAwMDsKCQkJCSR3MSA9IDB4RDgwMCB8ICgkY2hhciA+PiAweDBhKTsKCQkJCSR3MiA9IDB4REMwMCB8ICgkY2hhciAmIDB4M0ZGKTsKCQkJCSRvdXRzdHIgLj0gY2hyKCR3MSA+PiAweDA4KTsKCQkJCSRvdXRzdHIgLj0gY2hyKCR3MSAmIDB4RkYpOwoJCQkJJG91dHN0ciAuPSBjaHIoJHcyID4+IDB4MDgpOwoJCQkJJG91dHN0ciAuPSBjaHIoJHcyICYgMHhGRik7CgkJCX0KCQl9CgkJcmV0dXJuICRvdXRzdHI7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IGFuIGFycmF5IG9mIFVURjggdmFsdWVzIHRvIGFycmF5IG9mIHVuaWNvZGUgY2hhcmFjdGVycwoJICogQHBhcmFtICR0YSAoYXJyYXkpIFRoZSBpbnB1dCBhcnJheSBvZiBVVEY4IHZhbHVlcy4KCSAqIEBwYXJhbSAkaXN1bmljb2RlIChib29sZWFuKSBUcnVlIGZvciBVbmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEByZXR1cm4gUmV0dXJuIGFycmF5IG9mIHVuaWNvZGUgY2hhcmFjdGVycwoJICogQHNpbmNlIDQuNS4wMzcgKDIwMDktMDQtMDcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFVURjhBcnJheVRvVW5pQXJyYXkoJHRhLCAkaXN1bmljb2RlPXRydWUpIHsKCQlpZiAoJGlzdW5pY29kZSkgewoJCQlyZXR1cm4gYXJyYXlfbWFwKGFycmF5KCdUQ1BERl9GT05UUycsICd1bmljaHJVbmljb2RlJyksICR0YSk7CgkJfQoJCXJldHVybiBhcnJheV9tYXAoYXJyYXkoJ1RDUERGX0ZPTlRTJywgJ3VuaWNockFTQ0lJJyksICR0YSk7Cgl9CgoJLyoqCgkgKiBFeHRyYWN0IGEgc2xpY2Ugb2YgdGhlICRzdHJhcnIgYXJyYXkgYW5kIHJldHVybiBpdCBhcyBzdHJpbmcuCgkgKiBAcGFyYW0gJHN0cmFyciAoc3RyaW5nKSBUaGUgaW5wdXQgYXJyYXkgb2YgY2hhcmFjdGVycy4KCSAqIEBwYXJhbSAkc3RhcnQgKGludCkgdGhlIHN0YXJ0aW5nIGVsZW1lbnQgb2YgJHN0cmFyci4KCSAqIEBwYXJhbSAkZW5kIChpbnQpIGZpcnN0IGVsZW1lbnQgdGhhdCB3aWxsIG5vdCBiZSByZXR1cm5lZC4KCSAqIEBwYXJhbSAkdW5pY29kZSAoYm9vbGVhbikgVHJ1ZSBpZiB3ZSBhcmUgaW4gdW5pY29kZSBtb2RlLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcmV0dXJuIFJldHVybiBwYXJ0IG9mIGEgc3RyaW5nCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFVURjhBcnJTdWJTdHJpbmcoJHN0cmFyciwgJHN0YXJ0PScnLCAkZW5kPScnLCAkdW5pY29kZT10cnVlKSB7CgkJaWYgKHN0cmxlbigkc3RhcnQpID09IDApIHsKCQkJJHN0YXJ0ID0gMDsKCQl9CgkJaWYgKHN0cmxlbigkZW5kKSA9PSAwKSB7CgkJCSRlbmQgPSBjb3VudCgkc3RyYXJyKTsKCQl9CgkJJHN0cmluZyA9ICcnOwoJCWZvciAoJGkgPSAkc3RhcnQ7ICRpIDwgJGVuZDsgKyskaSkgewoJCQkkc3RyaW5nIC49IHNlbGY6OnVuaWNocigkc3RyYXJyWyRpXSwgJHVuaWNvZGUpOwoJCX0KCQlyZXR1cm4gJHN0cmluZzsKCX0KCgkvKioKCSAqIEV4dHJhY3QgYSBzbGljZSBvZiB0aGUgJHVuaWFyciBhcnJheSBhbmQgcmV0dXJuIGl0IGFzIHN0cmluZy4KCSAqIEBwYXJhbSAkdW5pYXJyIChzdHJpbmcpIFRoZSBpbnB1dCBhcnJheSBvZiBjaGFyYWN0ZXJzLgoJICogQHBhcmFtICRzdGFydCAoaW50KSB0aGUgc3RhcnRpbmcgZWxlbWVudCBvZiAkc3RyYXJyLgoJICogQHBhcmFtICRlbmQgKGludCkgZmlyc3QgZWxlbWVudCB0aGF0IHdpbGwgbm90IGJlIHJldHVybmVkLgoJICogQHJldHVybiBSZXR1cm4gcGFydCBvZiBhIHN0cmluZwoJICogQHNpbmNlIDQuNS4wMzcgKDIwMDktMDQtMDcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIFVuaUFyclN1YlN0cmluZygkdW5pYXJyLCAkc3RhcnQ9JycsICRlbmQ9JycpIHsKCQlpZiAoc3RybGVuKCRzdGFydCkgPT0gMCkgewoJCQkkc3RhcnQgPSAwOwoJCX0KCQlpZiAoc3RybGVuKCRlbmQpID09IDApIHsKCQkJJGVuZCA9IGNvdW50KCR1bmlhcnIpOwoJCX0KCQkkc3RyaW5nID0gJyc7CgkJZm9yICgkaT0kc3RhcnQ7ICRpIDwgJGVuZDsgKyskaSkgewoJCQkkc3RyaW5nIC49ICR1bmlhcnJbJGldOwoJCX0KCQlyZXR1cm4gJHN0cmluZzsKCX0KCgkvKioKCSAqIFVwZGF0ZSB0aGUgQ0lEVG9HSURNYXAgc3RyaW5nIHdpdGggYSBuZXcgdmFsdWUuCgkgKiBAcGFyYW0gJG1hcCAoc3RyaW5nKSBDSURUb0dJRE1hcC4KCSAqIEBwYXJhbSAkY2lkIChpbnQpIENJRCB2YWx1ZS4KCSAqIEBwYXJhbSAkZ2lkIChpbnQpIEdJRCB2YWx1ZS4KCSAqIEByZXR1cm4gKHN0cmluZykgQ0lEVG9HSURNYXAuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4xMjMgKDIwMTEtMDktMjkpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVwZGF0ZUNJRHRvR0lEbWFwKCRtYXAsICRjaWQsICRnaWQpIHsKCQlpZiAoKCRjaWQgPj0gMCkgQU5EICgkY2lkIDw9IDB4RkZGRikgQU5EICgkZ2lkID49IDApKSB7CgkJCWlmICgkZ2lkID4gMHhGRkZGKSB7CgkJCQkkZ2lkIC09IDB4MTAwMDA7CgkJCX0KCQkJJG1hcFsoJGNpZCAqIDIpXSA9IGNocigkZ2lkID4+IDgpOwoJCQkkbWFwWygoJGNpZCAqIDIpICsgMSldID0gY2hyKCRnaWQgJiAweEZGKTsKCQl9CgkJcmV0dXJuICRtYXA7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gZm9udHMgcGF0aAoJICogQHJldHVybiBzdHJpbmcKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2dldGZvbnRwYXRoKCkgewoJCWlmICghZGVmaW5lZCgnS19QQVRIX0ZPTlRTJykgQU5EIGlzX2RpcigkZmRpciA9IHJlYWxwYXRoKGRpcm5hbWUoX19GSUxFX18pLicvLi4vZm9udHMnKSkpIHsKCQkJaWYgKHN1YnN0cigkZmRpciwgLTEpICE9ICcvJykgewoJCQkJJGZkaXIgLj0gJy8nOwoJCQl9CgkJCWRlZmluZSgnS19QQVRIX0ZPTlRTJywgJGZkaXIpOwoJCX0KCQlyZXR1cm4gZGVmaW5lZCgnS19QQVRIX0ZPTlRTJykgPyBLX1BBVEhfRk9OVFMgOiAnJzsKCX0KCgkvKioKCSAqIFJldHVybiBmb250IGZ1bGwgcGF0aAoJICogQHBhcmFtICRmaWxlIChzdHJpbmcpIEZvbnQgZmlsZSBuYW1lLgoJICogQHBhcmFtICRmb250ZGlyIChzdHJpbmcpIEZvbnQgZGlyZWN0b3J5IChzZXQgdG8gZmFsc2UgZnRvIHNlYXJjaCBvbiBkZWZhdWx0IGRpcmVjdG9yaWVzKQoJICogQHJldHVybiBzdHJpbmcgRm9udCBmdWxsIHBhdGggb3IgZW1wdHkgc3RyaW5nCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDYuMC4wMjUKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Rm9udEZ1bGxQYXRoKCRmaWxlLCAkZm9udGRpcj1mYWxzZSkgewoJCSRmb250ZmlsZSA9ICcnOwoJCS8vIHNlYXJjaCBmaWxlcyBvbiB2YXJpb3VzIGRpcmVjdG9yaWVzCgkJaWYgKCgkZm9udGRpciAhPT0gZmFsc2UpIEFORCBAZmlsZV9leGlzdHMoJGZvbnRkaXIuJGZpbGUpKSB7CgkJCSRmb250ZmlsZSA9ICRmb250ZGlyLiRmaWxlOwoJCX0gZWxzZWlmIChAZmlsZV9leGlzdHMoc2VsZjo6X2dldGZvbnRwYXRoKCkuJGZpbGUpKSB7CgkJCSRmb250ZmlsZSA9IHNlbGY6Ol9nZXRmb250cGF0aCgpLiRmaWxlOwoJCX0gZWxzZWlmIChAZmlsZV9leGlzdHMoJGZpbGUpKSB7CgkJCSRmb250ZmlsZSA9ICRmaWxlOwoJCX0KCQlyZXR1cm4gJGZvbnRmaWxlOwoJfQoKCS8qKgoJICogQ29udmVydHMgVVRGLTggY2hhcmFjdGVycyBhcnJheSB0byBhcnJheSBvZiBMYXRpbjEgY2hhcmFjdGVycyBhcnJheTxicj4KCSAqIEBwYXJhbSAkdW5pY29kZSAoYXJyYXkpIGFycmF5IGNvbnRhaW5pbmcgVVRGLTggdW5pY29kZSB2YWx1ZXMKCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC44LjAyMyAoMjAxMC0wMS0xNSkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gVVRGOEFyclRvTGF0aW4xQXJyKCR1bmljb2RlKSB7CgkJJG91dGFyciA9IGFycmF5KCk7IC8vIGFycmF5IHRvIGJlIHJldHVybmVkCgkJZm9yZWFjaCAoJHVuaWNvZGUgYXMgJGNoYXIpIHsKCQkJaWYgKCRjaGFyIDwgMjU2KSB7CgkJCQkkb3V0YXJyW10gPSAkY2hhcjsKCQkJfSBlbHNlaWYgKGFycmF5X2tleV9leGlzdHMoJGNoYXIsIFRDUERGX0ZPTlRfREFUQTo6JHVuaV91dGY4dG9sYXRpbikpIHsKCQkJCS8vIG1hcCBmcm9tIFVURi04CgkJCQkkb3V0YXJyW10gPSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfdXRmOHRvbGF0aW5bJGNoYXJdOwoJCQl9IGVsc2VpZiAoJGNoYXIgPT0gMHhGRkZEKSB7CgkJCQkvLyBza2lwCgkJCX0gZWxzZSB7CgkJCQkkb3V0YXJyW10gPSA2MzsgLy8gJz8nIGNoYXJhY3RlcgoJCQl9CgkJfQoJCXJldHVybiAkb3V0YXJyOwoJfQoKCS8qKgoJICogQ29udmVydHMgVVRGLTggY2hhcmFjdGVycyBhcnJheSB0byBhcnJheSBvZiBMYXRpbjEgc3RyaW5nPGJyPgoJICogQHBhcmFtICR1bmljb2RlIChhcnJheSkgYXJyYXkgY29udGFpbmluZyBVVEYtOCB1bmljb2RlIHZhbHVlcwoJICogQHJldHVybiBhcnJheQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDIzICgyMDEwLTAxLTE1KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBVVEY4QXJyVG9MYXRpbjEoJHVuaWNvZGUpIHsKCQkkb3V0c3RyID0gJyc7IC8vIHN0cmluZyB0byBiZSByZXR1cm5lZAoJCWZvcmVhY2ggKCR1bmljb2RlIGFzICRjaGFyKSB7CgkJCWlmICgkY2hhciA8IDI1NikgewoJCQkJJG91dHN0ciAuPSBjaHIoJGNoYXIpOwoJCQl9IGVsc2VpZiAoYXJyYXlfa2V5X2V4aXN0cygkY2hhciwgVENQREZfRk9OVF9EQVRBOjokdW5pX3V0Zjh0b2xhdGluKSkgewoJCQkJLy8gbWFwIGZyb20gVVRGLTgKCQkJCSRvdXRzdHIgLj0gY2hyKFRDUERGX0ZPTlRfREFUQTo6JHVuaV91dGY4dG9sYXRpblskY2hhcl0pOwoJCQl9IGVsc2VpZiAoJGNoYXIgPT0gMHhGRkZEKSB7CgkJCQkvLyBza2lwCgkJCX0gZWxzZSB7CgkJCQkkb3V0c3RyIC49ICc/JzsKCQkJfQoJCX0KCQlyZXR1cm4gJG91dHN0cjsKCX0KCgkvKioKCSAqIENvbnZlcnRzIFVURi04IGNoYXJhY3RlciB0byBpbnRlZ2VyIHZhbHVlLjxicj4KCSAqIFVzZXMgdGhlIGdldFVuaW9yZCgpIG1ldGhvZCBpZiB0aGUgdmFsdWUgaXMgbm90IGNhY2hlZC4KCSAqIEBwYXJhbSAkdWNoIChzdHJpbmcpIGNoYXJhY3RlciBzdHJpbmcgdG8gcHJvY2Vzcy4KCSAqIEByZXR1cm4gaW50ZWdlciBVbmljb2RlIHZhbHVlCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHVuaW9yZCgkdWNoKSB7CgkJaWYgKCFpc3NldChzZWxmOjokY2FjaGVfdW5pb3JkWyR1Y2hdKSkgewoJCQlzZWxmOjokY2FjaGVfdW5pb3JkWyR1Y2hdID0gc2VsZjo6Z2V0VW5pb3JkKCR1Y2gpOwoJCX0KCQlyZXR1cm4gc2VsZjo6JGNhY2hlX3VuaW9yZFskdWNoXTsKCX0KCgkvKioKCSAqIENvbnZlcnRzIFVURi04IGNoYXJhY3RlciB0byBpbnRlZ2VyIHZhbHVlLjxicj4KCSAqIEludmFsaWQgYnl0ZSBzZXF1ZW5jZXMgd2lsbCBiZSByZXBsYWNlZCB3aXRoIDB4RkZGRCAocmVwbGFjZW1lbnQgY2hhcmFjdGVyKTxicj4KCSAqIEJhc2VkIG9uOiBodHRwOi8vd3d3LmZhcXMub3JnL3JmY3MvcmZjMzYyOS5odG1sCgkgKiA8cHJlPgoJICogICAgQ2hhci4gbnVtYmVyIHJhbmdlICB8ICAgICAgICBVVEYtOCBvY3RldCBzZXF1ZW5jZQoJICogICAgICAgKGhleGFkZWNpbWFsKSAgICB8ICAgICAgICAgICAgICAoYmluYXJ5KQoJICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAqICAgIDAwMDAgMDAwMC0wMDAwIDAwN0YgfCAweHh4eHh4eAoJICogICAgMDAwMCAwMDgwLTAwMDAgMDdGRiB8IDExMHh4eHh4IDEweHh4eHh4CgkgKiAgICAwMDAwIDA4MDAtMDAwMCBGRkZGIHwgMTExMHh4eHggMTB4eHh4eHggMTB4eHh4eHgKCSAqICAgIDAwMDEgMDAwMC0wMDEwIEZGRkYgfCAxMTExMHh4eCAxMHh4eHh4eCAxMHh4eHh4eCAxMHh4eHh4eAoJICogICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkgKgoJICogICBBQkZOIG5vdGF0aW9uOgoJICogICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCSAqICAgVVRGOC1vY3RldHMgPSAqKCBVVEY4LWNoYXIgKQoJICogICBVVEY4LWNoYXIgICA9IFVURjgtMSAvIFVURjgtMiAvIFVURjgtMyAvIFVURjgtNAoJICogICBVVEY4LTEgICAgICA9ICV4MDAtN0YKCSAqICAgVVRGOC0yICAgICAgPSAleEMyLURGIFVURjgtdGFpbAoJICoKCSAqICAgVVRGOC0zICAgICAgPSAleEUwICV4QTAtQkYgVVRGOC10YWlsIC8gJXhFMS1FQyAyKCBVVEY4LXRhaWwgKSAvCgkgKiAgICAgICAgICAgICAgICAgJXhFRCAleDgwLTlGIFVURjgtdGFpbCAvICV4RUUtRUYgMiggVVRGOC10YWlsICkKCSAqICAgVVRGOC00ICAgICAgPSAleEYwICV4OTAtQkYgMiggVVRGOC10YWlsICkgLyAleEYxLUYzIDMoIFVURjgtdGFpbCApIC8KCSAqICAgICAgICAgICAgICAgICAleEY0ICV4ODAtOEYgMiggVVRGOC10YWlsICkKCSAqICAgVVRGOC10YWlsICAgPSAleDgwLUJGCgkgKiAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoJICogPC9wcmU+CgkgKiBAcGFyYW0gJHVjaCAoc3RyaW5nKSBjaGFyYWN0ZXIgc3RyaW5nIHRvIHByb2Nlc3MuCgkgKiBAcmV0dXJuIGludGVnZXIgVW5pY29kZSB2YWx1ZQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0VW5pb3JkKCR1Y2gpIHsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9jb252ZXJ0X2VuY29kaW5nJykpIHsKCQkJbGlzdCgsICRjaGFyKSA9IEB1bnBhY2soJ04nLCBtYl9jb252ZXJ0X2VuY29kaW5nKCR1Y2gsICdVQ1MtNEJFJywgJ1VURi04JykpOwoJCQlpZiAoJGNoYXIgPj0gMCkgewoJCQkJcmV0dXJuICRjaGFyOwoJCQl9CgkJfQoJCSRieXRlcyA9IGFycmF5KCk7IC8vIGFycmF5IGNvbnRhaW5pbmcgc2luZ2xlIGNoYXJhY3RlciBieXRlIHNlcXVlbmNlcwoJCSRjb3VudGJ5dGVzID0gMDsKCQkkbnVtYnl0ZXMgPSAxOyAvLyBudW1iZXIgb2Ygb2N0ZXRjIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIFVURi04IGNoYXJhY3RlcgoJCSRsZW5ndGggPSBzdHJsZW4oJHVjaCk7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgKyskaSkgewoJCQkkY2hhciA9IG9yZCgkdWNoWyRpXSk7IC8vIGdldCBvbmUgc3RyaW5nIGNoYXJhY3RlciBhdCB0aW1lCgkJCWlmICgkY291bnRieXRlcyA9PSAwKSB7IC8vIGdldCBzdGFydGluZyBvY3RlY3QKCQkJCWlmICgkY2hhciA8PSAweDdGKSB7CgkJCQkJcmV0dXJuICRjaGFyOyAvLyB1c2UgdGhlIGNoYXJhY3RlciAiYXMgaXMiIGJlY2F1c2UgaXMgQVNDSUkKCQkJCX0gZWxzZWlmICgoJGNoYXIgPj4gMHgwNSkgPT0gMHgwNikgeyAvLyAyIGJ5dGVzIGNoYXJhY3RlciAoMHgwNiA9IDExMCBCSU4pCgkJCQkJJGJ5dGVzW10gPSAoJGNoYXIgLSAweEMwKSA8PCAweDA2OwoJCQkJCSsrJGNvdW50Ynl0ZXM7CgkJCQkJJG51bWJ5dGVzID0gMjsKCQkJCX0gZWxzZWlmICgoJGNoYXIgPj4gMHgwNCkgPT0gMHgwRSkgeyAvLyAzIGJ5dGVzIGNoYXJhY3RlciAoMHgwRSA9IDExMTAgQklOKQoJCQkJCSRieXRlc1tdID0gKCRjaGFyIC0gMHhFMCkgPDwgMHgwQzsKCQkJCQkrKyRjb3VudGJ5dGVzOwoJCQkJCSRudW1ieXRlcyA9IDM7CgkJCQl9IGVsc2VpZiAoKCRjaGFyID4+IDB4MDMpID09IDB4MUUpIHsgLy8gNCBieXRlcyBjaGFyYWN0ZXIgKDB4MUUgPSAxMTExMCBCSU4pCgkJCQkJJGJ5dGVzW10gPSAoJGNoYXIgLSAweEYwKSA8PCAweDEyOwoJCQkJCSsrJGNvdW50Ynl0ZXM7CgkJCQkJJG51bWJ5dGVzID0gNDsKCQkJCX0gZWxzZSB7CgkJCQkJLy8gdXNlIHJlcGxhY2VtZW50IGNoYXJhY3RlciBmb3Igb3RoZXIgaW52YWxpZCBzZXF1ZW5jZXMKCQkJCQlyZXR1cm4gMHhGRkZEOwoJCQkJfQoJCQl9IGVsc2VpZiAoKCRjaGFyID4+IDB4MDYpID09IDB4MDIpIHsgLy8gYnl0ZXMgMiwgMyBhbmQgNCBtdXN0IHN0YXJ0IHdpdGggMHgwMiA9IDEwIEJJTgoJCQkJJGJ5dGVzW10gPSAkY2hhciAtIDB4ODA7CgkJCQkrKyRjb3VudGJ5dGVzOwoJCQkJaWYgKCRjb3VudGJ5dGVzID09ICRudW1ieXRlcykgewoJCQkJCS8vIGNvbXBvc2UgVVRGLTggYnl0ZXMgdG8gYSBzaW5nbGUgdW5pY29kZSB2YWx1ZQoJCQkJCSRjaGFyID0gJGJ5dGVzWzBdOwoJCQkJCWZvciAoJGogPSAxOyAkaiA8ICRudW1ieXRlczsgKyskaikgewoJCQkJCQkkY2hhciArPSAoJGJ5dGVzWyRqXSA8PCAoKCRudW1ieXRlcyAtICRqIC0gMSkgKiAweDA2KSk7CgkJCQkJfQoJCQkJCWlmICgoKCRjaGFyID49IDB4RDgwMCkgQU5EICgkY2hhciA8PSAweERGRkYpKSBPUiAoJGNoYXIgPj0gMHgxMEZGRkYpKSB7CgkJCQkJCS8vIFRoZSBkZWZpbml0aW9uIG9mIFVURi04IHByb2hpYml0cyBlbmNvZGluZyBjaGFyYWN0ZXIgbnVtYmVycyBiZXR3ZWVuCgkJCQkJCS8vIFUrRDgwMCBhbmQgVStERkZGLCB3aGljaCBhcmUgcmVzZXJ2ZWQgZm9yIHVzZSB3aXRoIHRoZSBVVEYtMTYKCQkJCQkJLy8gZW5jb2RpbmcgZm9ybSAoYXMgc3Vycm9nYXRlIHBhaXJzKSBhbmQgZG8gbm90IGRpcmVjdGx5IHJlcHJlc2VudAoJCQkJCQkvLyBjaGFyYWN0ZXJzLgoJCQkJCQlyZXR1cm4gMHhGRkZEOyAvLyB1c2UgcmVwbGFjZW1lbnQgY2hhcmFjdGVyCgkJCQkJfSBlbHNlIHsKCQkJCQkJcmV0dXJuICRjaGFyOwoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCS8vIHVzZSByZXBsYWNlbWVudCBjaGFyYWN0ZXIgZm9yIG90aGVyIGludmFsaWQgc2VxdWVuY2VzCgkJCQlyZXR1cm4gMHhGRkZEOwoJCQl9CgkJfQoJCXJldHVybiAweEZGRkQ7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0cyBVVEYtOCBzdHJpbmdzIHRvIGNvZGVwb2ludHMgYXJyYXkuPGJyPgoJICogSW52YWxpZCBieXRlIHNlcXVlbmNlcyB3aWxsIGJlIHJlcGxhY2VkIHdpdGggMHhGRkZEIChyZXBsYWNlbWVudCBjaGFyYWN0ZXIpPGJyPgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIHRvIHByb2Nlc3MuCgkgKiBAcGFyYW0gJGlzdW5pY29kZSAoYm9vbGVhbikgVHJ1ZSB3aGVuIHRoZSBkb2N1bWV0biBpcyBpbiBVbmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwYXJhbSAkY3VycmVudGZvbnQgKGFycmF5KSBSZWZlcmVuY2UgdG8gY3VycmVudCBmb250IGFycmF5LgoJICogQHJldHVybiBhcnJheSBjb250YWluaW5nIGNvZGVwb2ludHMgKFVURi04IGNoYXJhY3RlcnMgdmFsdWVzKQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gVVRGOFN0cmluZ1RvQXJyYXkoJHN0ciwgJGlzdW5pY29kZT10cnVlLCAmJGN1cnJlbnRmb250KSB7CgkJaWYgKCRpc3VuaWNvZGUpIHsKCQkJLy8gcmVxdWlyZXMgUENSRSB1bmljb2RlIHN1cHBvcnQgdHVybmVkIG9uCgkJCSRjaGFycyA9IFRDUERGX1NUQVRJQzo6cHJlZ1NwbGl0KCcvLycsJ3UnLCAkc3RyLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgkJCSRjYXJyID0gYXJyYXlfbWFwKGFycmF5KCdUQ1BERl9GT05UUycsICd1bmlvcmQnKSwgJGNoYXJzKTsKCQl9IGVsc2UgewoJCQkkY2hhcnMgPSBzdHJfc3BsaXQoJHN0cik7CgkJCSRjYXJyID0gYXJyYXlfbWFwKCdvcmQnLCAkY2hhcnMpOwoJCX0KCQkkY3VycmVudGZvbnRbJ3N1YnNldGNoYXJzJ10gKz0gYXJyYXlfZmlsbF9rZXlzKCRjYXJyLCB0cnVlKTsKCQlyZXR1cm4gJGNhcnI7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0cyBVVEYtOCBzdHJpbmdzIHRvIExhdGluMSB3aGVuIHVzaW5nIHRoZSBzdGFuZGFyZCAxNCBjb3JlIGZvbnRzLjxicj4KCSAqIEBwYXJhbSAkc3RyIChzdHJpbmcpIHN0cmluZyB0byBwcm9jZXNzLgoJICogQHBhcmFtICRpc3VuaWNvZGUgKGJvb2xlYW4pIFRydWUgd2hlbiB0aGUgZG9jdW1ldG4gaXMgaW4gVW5pY29kZSBtb2RlLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcGFyYW0gJGN1cnJlbnRmb250IChhcnJheSkgUmVmZXJlbmNlIHRvIGN1cnJlbnQgZm9udCBhcnJheS4KCSAqIEByZXR1cm4gc3RyaW5nCgkgKiBAc2luY2UgMy4yLjAwMCAoMjAwOC0wNi0yMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gVVRGOFRvTGF0aW4xKCRzdHIsICRpc3VuaWNvZGU9dHJ1ZSwgJiRjdXJyZW50Zm9udCkgewoJCSR1bmljb2RlID0gc2VsZjo6VVRGOFN0cmluZ1RvQXJyYXkoJHN0ciwgJGlzdW5pY29kZSwgJGN1cnJlbnRmb250KTsgLy8gYXJyYXkgY29udGFpbmluZyBVVEYtOCB1bmljb2RlIHZhbHVlcwoJCXJldHVybiBzZWxmOjpVVEY4QXJyVG9MYXRpbjEoJHVuaWNvZGUpOwoJfQoKCS8qKgoJICogQ29udmVydHMgVVRGLTggc3RyaW5ncyB0byBVVEYxNi1CRS48YnI+CgkgKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBzdHJpbmcgdG8gcHJvY2Vzcy4KCSAqIEBwYXJhbSAkc2V0Ym9tIChib29sZWFuKSBpZiB0cnVlIHNldCB0aGUgQnl0ZSBPcmRlciBNYXJrIChCT00gPSAweEZFRkYpCgkgKiBAcGFyYW0gJGlzdW5pY29kZSAoYm9vbGVhbikgVHJ1ZSB3aGVuIHRoZSBkb2N1bWV0biBpcyBpbiBVbmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwYXJhbSAkY3VycmVudGZvbnQgKGFycmF5KSBSZWZlcmVuY2UgdG8gY3VycmVudCBmb250IGFycmF5LgoJICogQHJldHVybiBzdHJpbmcKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgMS41My4wLlRDMDA1ICgyMDA1LTAxLTA1KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBVVEY4VG9VVEYxNkJFKCRzdHIsICRzZXRib209ZmFsc2UsICRpc3VuaWNvZGU9dHJ1ZSwgJiRjdXJyZW50Zm9udCkgewoJCWlmICghJGlzdW5pY29kZSkgewoJCQlyZXR1cm4gJHN0cjsgLy8gc3RyaW5nIGlzIG5vdCBpbiB1bmljb2RlCgkJfQoJCSR1bmljb2RlID0gc2VsZjo6VVRGOFN0cmluZ1RvQXJyYXkoJHN0ciwgJGlzdW5pY29kZSwgJGN1cnJlbnRmb250KTsgLy8gYXJyYXkgY29udGFpbmluZyBVVEYtOCB1bmljb2RlIHZhbHVlcwoJCXJldHVybiBzZWxmOjphcnJVVEY4VG9VVEYxNkJFKCR1bmljb2RlLCAkc2V0Ym9tKTsKCX0KCgkvKioKCSAqIFJldmVyc2UgdGhlIFJMVCBzdWJzdHJpbmdzIHVzaW5nIHRoZSBCaWRpcmVjdGlvbmFsIEFsZ29yaXRobSAoaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LykuCgkgKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBzdHJpbmcgdG8gbWFuaXB1bGF0ZS4KCSAqIEBwYXJhbSAkc2V0Ym9tIChib29sKSBpZiB0cnVlIHNldCB0aGUgQnl0ZSBPcmRlciBNYXJrIChCT00gPSAweEZFRkYpCgkgKiBAcGFyYW0gJGZvcmNlcnRsIChib29sKSBpZiB0cnVlIGZvcmNlcyBSVEwgdGV4dCBkaXJlY3Rpb24KCSAqIEBwYXJhbSAkaXN1bmljb2RlIChib29sZWFuKSBUcnVlIGlmIHRoZSBkb2N1bWVudCBpcyBpbiBVbmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwYXJhbSAkY3VycmVudGZvbnQgKGFycmF5KSBSZWZlcmVuY2UgdG8gY3VycmVudCBmb250IGFycmF5LgoJICogQHJldHVybiBzdHJpbmcKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXRmOFN0clJldigkc3RyLCAkc2V0Ym9tPWZhbHNlLCAkZm9yY2VydGw9ZmFsc2UsICRpc3VuaWNvZGU9dHJ1ZSwgJiRjdXJyZW50Zm9udCkgewoJCXJldHVybiBzZWxmOjp1dGY4U3RyQXJyUmV2KHNlbGY6OlVURjhTdHJpbmdUb0FycmF5KCRzdHIsICRpc3VuaWNvZGUsICRjdXJyZW50Zm9udCksICRzdHIsICRzZXRib20sICRmb3JjZXJ0bCwgJGlzdW5pY29kZSwgJGN1cnJlbnRmb250KTsKCX0KCgkvKioKCSAqIFJldmVyc2UgdGhlIFJMVCBzdWJzdHJpbmdzIGFycmF5IHVzaW5nIHRoZSBCaWRpcmVjdGlvbmFsIEFsZ29yaXRobSAoaHR0cDovL3VuaWNvZGUub3JnL3JlcG9ydHMvdHI5LykuCgkgKiBAcGFyYW0gJGFyciAoYXJyYXkpIGFycmF5IG9mIHVuaWNvZGUgdmFsdWVzLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIHRvIG1hbmlwdWxhdGUgKG9yIGVtcHR5IHZhbHVlKS4KCSAqIEBwYXJhbSAkc2V0Ym9tIChib29sKSBpZiB0cnVlIHNldCB0aGUgQnl0ZSBPcmRlciBNYXJrIChCT00gPSAweEZFRkYpCgkgKiBAcGFyYW0gJGZvcmNlcnRsIChib29sKSBpZiB0cnVlIGZvcmNlcyBSVEwgdGV4dCBkaXJlY3Rpb24KCSAqIEBwYXJhbSAkaXN1bmljb2RlIChib29sZWFuKSBUcnVlIGlmIHRoZSBkb2N1bWVudCBpcyBpbiBVbmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwYXJhbSAkY3VycmVudGZvbnQgKGFycmF5KSBSZWZlcmVuY2UgdG8gY3VycmVudCBmb250IGFycmF5LgoJICogQHJldHVybiBzdHJpbmcKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC45LjAwMCAoMjAxMC0wMy0yNykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gdXRmOFN0ckFyclJldigkYXJyLCAkc3RyPScnLCAkc2V0Ym9tPWZhbHNlLCAkZm9yY2VydGw9ZmFsc2UsICRpc3VuaWNvZGU9dHJ1ZSwgJiRjdXJyZW50Zm9udCkgewoJCXJldHVybiBzZWxmOjphcnJVVEY4VG9VVEYxNkJFKHNlbGY6OnV0ZjhCaWRpKCRhcnIsICRzdHIsICRmb3JjZXJ0bCwgJGlzdW5pY29kZSwgJGN1cnJlbnRmb250KSwgJHNldGJvbSk7Cgl9CgoJLyoqCgkgKiBSZXZlcnNlIHRoZSBSTFQgc3Vic3RyaW5ncyB1c2luZyB0aGUgQmlkaXJlY3Rpb25hbCBBbGdvcml0aG0gKGh0dHA6Ly91bmljb2RlLm9yZy9yZXBvcnRzL3RyOS8pLgoJICogQHBhcmFtICR0YSAoYXJyYXkpIGFycmF5IG9mIGNoYXJhY3RlcnMgY29tcG9zaW5nIHRoZSBzdHJpbmcuCgkgKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBzdHJpbmcgdG8gcHJvY2VzcwoJICogQHBhcmFtICRmb3JjZXJ0bCAoYm9vbCkgaWYgJ1InIGZvcmNlcyBSVEwsIGlmICdMJyBmb3JjZXMgTFRSCgkgKiBAcGFyYW0gJGlzdW5pY29kZSAoYm9vbGVhbikgVHJ1ZSBpZiB0aGUgZG9jdW1lbnQgaXMgaW4gVW5pY29kZSBtb2RlLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcGFyYW0gJGN1cnJlbnRmb250IChhcnJheSkgUmVmZXJlbmNlIHRvIGN1cnJlbnQgZm9udCBhcnJheS4KCSAqIEByZXR1cm4gYXJyYXkgb2YgdW5pY29kZSBjaGFycwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAyLjQuMDAwICgyMDA4LTAzLTA2KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiB1dGY4QmlkaSgkdGEsICRzdHI9JycsICRmb3JjZXJ0bD1mYWxzZSwgJGlzdW5pY29kZT10cnVlLCAmJGN1cnJlbnRmb250KSB7CgkJLy8gcGFyYWdyYXBoIGVtYmVkZGluZyBsZXZlbAoJCSRwZWwgPSAwOwoJCS8vIG1heCBsZXZlbAoJCSRtYXhsZXZlbCA9IDA7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRzdHIpKSB7CgkJCS8vIGNyZWF0ZSBzdHJpbmcgZnJvbSBhcnJheQoJCQkkc3RyID0gc2VsZjo6VVRGOEFyclN1YlN0cmluZygkdGEsICcnLCAnJywgJGlzdW5pY29kZSk7CgkJfQoJCS8vIGNoZWNrIGlmIHN0cmluZyBjb250YWlucyBhcmFiaWMgdGV4dAoJCWlmIChwcmVnX21hdGNoKFRDUERGX0ZPTlRfREFUQTo6JHVuaV9SRV9QQVRURVJOX0FSQUJJQywgJHN0cikpIHsKCQkJJGFyYWJpYyA9IHRydWU7CgkJfSBlbHNlIHsKCQkJJGFyYWJpYyA9IGZhbHNlOwoJCX0KCQkvLyBjaGVjayBpZiBzdHJpbmcgY29udGFpbnMgUlRMIHRleHQKCQlpZiAoISgkZm9yY2VydGwgT1IgJGFyYWJpYyBPUiBwcmVnX21hdGNoKFRDUERGX0ZPTlRfREFUQTo6JHVuaV9SRV9QQVRURVJOX1JUTCwgJHN0cikpKSB7CgkJCXJldHVybiAkdGE7CgkJfQoKCQkvLyBnZXQgbnVtYmVyIG9mIGNoYXJzCgkJJG51bWNoYXJzID0gY291bnQoJHRhKTsKCgkJaWYgKCRmb3JjZXJ0bCA9PSAnUicpIHsKCQkJJHBlbCA9IDE7CgkJfSBlbHNlaWYgKCRmb3JjZXJ0bCA9PSAnTCcpIHsKCQkJJHBlbCA9IDA7CgkJfSBlbHNlIHsKCQkJLy8gUDIuIEluIGVhY2ggcGFyYWdyYXBoLCBmaW5kIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdHlwZSBMLCBBTCwgb3IgUi4KCQkJLy8gUDMuIElmIGEgY2hhcmFjdGVyIGlzIGZvdW5kIGluIFAyIGFuZCBpdCBpcyBvZiB0eXBlIEFMIG9yIFIsIHRoZW4gc2V0IHRoZSBwYXJhZ3JhcGggZW1iZWRkaW5nIGxldmVsIHRvIG9uZTsgb3RoZXJ3aXNlLCBzZXQgaXQgdG8gemVyby4KCQkJZm9yICgkaT0wOyAkaSA8ICRudW1jaGFyczsgKyskaSkgewoJCQkJJHR5cGUgPSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfdHlwZVskdGFbJGldXTsKCQkJCWlmICgkdHlwZSA9PSAnTCcpIHsKCQkJCQkkcGVsID0gMDsKCQkJCQlicmVhazsKCQkJCX0gZWxzZWlmICgoJHR5cGUgPT0gJ0FMJykgT1IgKCR0eXBlID09ICdSJykpIHsKCQkJCQkkcGVsID0gMTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gQ3VycmVudCBFbWJlZGRpbmcgTGV2ZWwKCQkkY2VsID0gJHBlbDsKCQkvLyBkaXJlY3Rpb25hbCBvdmVycmlkZSBzdGF0dXMKCQkkZG9zID0gJ04nOwoJCSRyZW1lbWJlciA9IGFycmF5KCk7CgkJLy8gc3RhcnQtb2YtbGV2ZWwtcnVuCgkJJHNvciA9ICRwZWwgJSAyID8gJ1InIDogJ0wnOwoJCSRlb3IgPSAkc29yOwoKCQkvLyBBcnJheSBvZiBjaGFyYWN0ZXJzIGRhdGEKCQkkY2hhcmRhdGEgPSBBcnJheSgpOwoKCQkvLyBYMS4gQmVnaW4gYnkgc2V0dGluZyB0aGUgY3VycmVudCBlbWJlZGRpbmcgbGV2ZWwgdG8gdGhlIHBhcmFncmFwaCBlbWJlZGRpbmcgbGV2ZWwuIFNldCB0aGUgZGlyZWN0aW9uYWwgb3ZlcnJpZGUgc3RhdHVzIHRvIG5ldXRyYWwuIFByb2Nlc3MgZWFjaCBjaGFyYWN0ZXIgaXRlcmF0aXZlbHksIGFwcGx5aW5nIHJ1bGVzIFgyIHRocm91Z2ggWDkuIE9ubHkgZW1iZWRkaW5nIGxldmVscyBmcm9tIDAgdG8gNjEgYXJlIHZhbGlkIGluIHRoaXMgcGhhc2UuCgkJLy8gSW4gdGhlIHJlc29sdXRpb24gb2YgbGV2ZWxzIGluIHJ1bGVzIEkxIGFuZCBJMiwgdGhlIG1heGltdW0gZW1iZWRkaW5nIGxldmVsIG9mIDYyIGNhbiBiZSByZWFjaGVkLgoJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJaWYgKCR0YVskaV0gPT0gVENQREZfRk9OVF9EQVRBOjokdW5pX1JMRSkgewoJCQkJLy8gWDIuIFdpdGggZWFjaCBSTEUsIGNvbXB1dGUgdGhlIGxlYXN0IGdyZWF0ZXIgb2RkIGVtYmVkZGluZyBsZXZlbC4KCQkJCS8vCWEuIElmIHRoaXMgbmV3IGxldmVsIHdvdWxkIGJlIHZhbGlkLCB0aGVuIHRoaXMgZW1iZWRkaW5nIGNvZGUgaXMgdmFsaWQuIFJlbWVtYmVyIChwdXNoKSB0aGUgY3VycmVudCBlbWJlZGRpbmcgbGV2ZWwgYW5kIG92ZXJyaWRlIHN0YXR1cy4gUmVzZXQgdGhlIGN1cnJlbnQgbGV2ZWwgdG8gdGhpcyBuZXcgbGV2ZWwsIGFuZCByZXNldCB0aGUgb3ZlcnJpZGUgc3RhdHVzIHRvIG5ldXRyYWwuCgkJCQkvLwliLiBJZiB0aGUgbmV3IGxldmVsIHdvdWxkIG5vdCBiZSB2YWxpZCwgdGhlbiB0aGlzIGNvZGUgaXMgaW52YWxpZC4gRG8gbm90IGNoYW5nZSB0aGUgY3VycmVudCBsZXZlbCBvciBvdmVycmlkZSBzdGF0dXMuCgkJCQkkbmV4dF9sZXZlbCA9ICRjZWwgKyAoJGNlbCAlIDIpICsgMTsKCQkJCWlmICgkbmV4dF9sZXZlbCA8IDYyKSB7CgkJCQkJJHJlbWVtYmVyW10gPSBhcnJheSgnbnVtJyA9PiBUQ1BERl9GT05UX0RBVEE6OiR1bmlfUkxFLCAnY2VsJyA9PiAkY2VsLCAnZG9zJyA9PiAkZG9zKTsKCQkJCQkkY2VsID0gJG5leHRfbGV2ZWw7CgkJCQkJJGRvcyA9ICdOJzsKCQkJCQkkc29yID0gJGVvcjsKCQkJCQkkZW9yID0gJGNlbCAlIDIgPyAnUicgOiAnTCc7CgkJCQl9CgkJCX0gZWxzZWlmICgkdGFbJGldID09IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9MUkUpIHsKCQkJCS8vIFgzLiBXaXRoIGVhY2ggTFJFLCBjb21wdXRlIHRoZSBsZWFzdCBncmVhdGVyIGV2ZW4gZW1iZWRkaW5nIGxldmVsLgoJCQkJLy8JYS4gSWYgdGhpcyBuZXcgbGV2ZWwgd291bGQgYmUgdmFsaWQsIHRoZW4gdGhpcyBlbWJlZGRpbmcgY29kZSBpcyB2YWxpZC4gUmVtZW1iZXIgKHB1c2gpIHRoZSBjdXJyZW50IGVtYmVkZGluZyBsZXZlbCBhbmQgb3ZlcnJpZGUgc3RhdHVzLiBSZXNldCB0aGUgY3VycmVudCBsZXZlbCB0byB0aGlzIG5ldyBsZXZlbCwgYW5kIHJlc2V0IHRoZSBvdmVycmlkZSBzdGF0dXMgdG8gbmV1dHJhbC4KCQkJCS8vCWIuIElmIHRoZSBuZXcgbGV2ZWwgd291bGQgbm90IGJlIHZhbGlkLCB0aGVuIHRoaXMgY29kZSBpcyBpbnZhbGlkLiBEbyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IGxldmVsIG9yIG92ZXJyaWRlIHN0YXR1cy4KCQkJCSRuZXh0X2xldmVsID0gJGNlbCArIDIgLSAoJGNlbCAlIDIpOwoJCQkJaWYgKCAkbmV4dF9sZXZlbCA8IDYyICkgewoJCQkJCSRyZW1lbWJlcltdID0gYXJyYXkoJ251bScgPT4gVENQREZfRk9OVF9EQVRBOjokdW5pX0xSRSwgJ2NlbCcgPT4gJGNlbCwgJ2RvcycgPT4gJGRvcyk7CgkJCQkJJGNlbCA9ICRuZXh0X2xldmVsOwoJCQkJCSRkb3MgPSAnTic7CgkJCQkJJHNvciA9ICRlb3I7CgkJCQkJJGVvciA9ICRjZWwgJSAyID8gJ1InIDogJ0wnOwoJCQkJfQoJCQl9IGVsc2VpZiAoJHRhWyRpXSA9PSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfUkxPKSB7CgkJCQkvLyBYNC4gV2l0aCBlYWNoIFJMTywgY29tcHV0ZSB0aGUgbGVhc3QgZ3JlYXRlciBvZGQgZW1iZWRkaW5nIGxldmVsLgoJCQkJLy8JYS4gSWYgdGhpcyBuZXcgbGV2ZWwgd291bGQgYmUgdmFsaWQsIHRoZW4gdGhpcyBlbWJlZGRpbmcgY29kZSBpcyB2YWxpZC4gUmVtZW1iZXIgKHB1c2gpIHRoZSBjdXJyZW50IGVtYmVkZGluZyBsZXZlbCBhbmQgb3ZlcnJpZGUgc3RhdHVzLiBSZXNldCB0aGUgY3VycmVudCBsZXZlbCB0byB0aGlzIG5ldyBsZXZlbCwgYW5kIHJlc2V0IHRoZSBvdmVycmlkZSBzdGF0dXMgdG8gcmlnaHQtdG8tbGVmdC4KCQkJCS8vCWIuIElmIHRoZSBuZXcgbGV2ZWwgd291bGQgbm90IGJlIHZhbGlkLCB0aGVuIHRoaXMgY29kZSBpcyBpbnZhbGlkLiBEbyBub3QgY2hhbmdlIHRoZSBjdXJyZW50IGxldmVsIG9yIG92ZXJyaWRlIHN0YXR1cy4KCQkJCSRuZXh0X2xldmVsID0gJGNlbCArICgkY2VsICUgMikgKyAxOwoJCQkJaWYgKCRuZXh0X2xldmVsIDwgNjIpIHsKCQkJCQkkcmVtZW1iZXJbXSA9IGFycmF5KCdudW0nID0+IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9STE8sICdjZWwnID0+ICRjZWwsICdkb3MnID0+ICRkb3MpOwoJCQkJCSRjZWwgPSAkbmV4dF9sZXZlbDsKCQkJCQkkZG9zID0gJ1InOwoJCQkJCSRzb3IgPSAkZW9yOwoJCQkJCSRlb3IgPSAkY2VsICUgMiA/ICdSJyA6ICdMJzsKCQkJCX0KCQkJfSBlbHNlaWYgKCR0YVskaV0gPT0gVENQREZfRk9OVF9EQVRBOjokdW5pX0xSTykgewoJCQkJLy8gWDUuIFdpdGggZWFjaCBMUk8sIGNvbXB1dGUgdGhlIGxlYXN0IGdyZWF0ZXIgZXZlbiBlbWJlZGRpbmcgbGV2ZWwuCgkJCQkvLwlhLiBJZiB0aGlzIG5ldyBsZXZlbCB3b3VsZCBiZSB2YWxpZCwgdGhlbiB0aGlzIGVtYmVkZGluZyBjb2RlIGlzIHZhbGlkLiBSZW1lbWJlciAocHVzaCkgdGhlIGN1cnJlbnQgZW1iZWRkaW5nIGxldmVsIGFuZCBvdmVycmlkZSBzdGF0dXMuIFJlc2V0IHRoZSBjdXJyZW50IGxldmVsIHRvIHRoaXMgbmV3IGxldmVsLCBhbmQgcmVzZXQgdGhlIG92ZXJyaWRlIHN0YXR1cyB0byBsZWZ0LXRvLXJpZ2h0LgoJCQkJLy8JYi4gSWYgdGhlIG5ldyBsZXZlbCB3b3VsZCBub3QgYmUgdmFsaWQsIHRoZW4gdGhpcyBjb2RlIGlzIGludmFsaWQuIERvIG5vdCBjaGFuZ2UgdGhlIGN1cnJlbnQgbGV2ZWwgb3Igb3ZlcnJpZGUgc3RhdHVzLgoJCQkJJG5leHRfbGV2ZWwgPSAkY2VsICsgMiAtICgkY2VsICUgMik7CgkJCQlpZiAoICRuZXh0X2xldmVsIDwgNjIgKSB7CgkJCQkJJHJlbWVtYmVyW10gPSBhcnJheSgnbnVtJyA9PiBUQ1BERl9GT05UX0RBVEE6OiR1bmlfTFJPLCAnY2VsJyA9PiAkY2VsLCAnZG9zJyA9PiAkZG9zKTsKCQkJCQkkY2VsID0gJG5leHRfbGV2ZWw7CgkJCQkJJGRvcyA9ICdMJzsKCQkJCQkkc29yID0gJGVvcjsKCQkJCQkkZW9yID0gJGNlbCAlIDIgPyAnUicgOiAnTCc7CgkJCQl9CgkJCX0gZWxzZWlmICgkdGFbJGldID09IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9QREYpIHsKCQkJCS8vIFg3LiBXaXRoIGVhY2ggUERGLCBkZXRlcm1pbmUgdGhlIG1hdGNoaW5nIGVtYmVkZGluZyBvciBvdmVycmlkZSBjb2RlLiBJZiB0aGVyZSB3YXMgYSB2YWxpZCBtYXRjaGluZyBjb2RlLCByZXN0b3JlIChwb3ApIHRoZSBsYXN0IHJlbWVtYmVyZWQgKHB1c2hlZCkgZW1iZWRkaW5nIGxldmVsIGFuZCBkaXJlY3Rpb25hbCBvdmVycmlkZS4KCQkJCWlmIChjb3VudCgkcmVtZW1iZXIpKSB7CgkJCQkJJGxhc3QgPSBjb3VudCgkcmVtZW1iZXIgKSAtIDE7CgkJCQkJaWYgKCgkcmVtZW1iZXJbJGxhc3RdWydudW0nXSA9PSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfUkxFKSBPUgoJCQkJCQkoJHJlbWVtYmVyWyRsYXN0XVsnbnVtJ10gPT0gVENQREZfRk9OVF9EQVRBOjokdW5pX0xSRSkgT1IKCQkJCQkJKCRyZW1lbWJlclskbGFzdF1bJ251bSddID09IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9STE8pIE9SCgkJCQkJCSgkcmVtZW1iZXJbJGxhc3RdWydudW0nXSA9PSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfTFJPKSkgewoJCQkJCQkkbWF0Y2ggPSBhcnJheV9wb3AoJHJlbWVtYmVyKTsKCQkJCQkJJGNlbCA9ICRtYXRjaFsnY2VsJ107CgkJCQkJCSRkb3MgPSAkbWF0Y2hbJ2RvcyddOwoJCQkJCQkkc29yID0gJGVvcjsKCQkJCQkJJGVvciA9ICgkY2VsID4gJG1hdGNoWydjZWwnXSA/ICRjZWwgOiAkbWF0Y2hbJ2NlbCddKSAlIDIgPyAnUicgOiAnTCc7CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2VpZiAoKCR0YVskaV0gIT0gVENQREZfRk9OVF9EQVRBOjokdW5pX1JMRSkgQU5ECgkJCQkJCQkgKCR0YVskaV0gIT0gVENQREZfRk9OVF9EQVRBOjokdW5pX0xSRSkgQU5ECgkJCQkJCQkgKCR0YVskaV0gIT0gVENQREZfRk9OVF9EQVRBOjokdW5pX1JMTykgQU5ECgkJCQkJCQkgKCR0YVskaV0gIT0gVENQREZfRk9OVF9EQVRBOjokdW5pX0xSTykgQU5ECgkJCQkJCQkgKCR0YVskaV0gIT0gVENQREZfRk9OVF9EQVRBOjokdW5pX1BERikpIHsKCQkJCS8vIFg2LiBGb3IgYWxsIHR5cGVzIGJlc2lkZXMgUkxFLCBMUkUsIFJMTywgTFJPLCBhbmQgUERGOgoJCQkJLy8JYS4gU2V0IHRoZSBsZXZlbCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXIgdG8gdGhlIGN1cnJlbnQgZW1iZWRkaW5nIGxldmVsLgoJCQkJLy8JYi4gV2hlbmV2ZXIgdGhlIGRpcmVjdGlvbmFsIG92ZXJyaWRlIHN0YXR1cyBpcyBub3QgbmV1dHJhbCwgcmVzZXQgdGhlIGN1cnJlbnQgY2hhcmFjdGVyIHR5cGUgdG8gdGhlIGRpcmVjdGlvbmFsIG92ZXJyaWRlIHN0YXR1cy4KCQkJCWlmICgkZG9zICE9ICdOJykgewoJCQkJCSRjaGFyZGlyID0gJGRvczsKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKGlzc2V0KFRDUERGX0ZPTlRfREFUQTo6JHVuaV90eXBlWyR0YVskaV1dKSkgewoJCQkJCQkkY2hhcmRpciA9IFRDUERGX0ZPTlRfREFUQTo6JHVuaV90eXBlWyR0YVskaV1dOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRjaGFyZGlyID0gJ0wnOwoJCQkJCX0KCQkJCX0KCQkJCS8vIHN0b3JlcyBzdHJpbmcgY2hhcmFjdGVycyBhbmQgb3RoZXIgaW5mb3JtYXRpb24KCQkJCSRjaGFyZGF0YVtdID0gYXJyYXkoJ2NoYXInID0+ICR0YVskaV0sICdsZXZlbCcgPT4gJGNlbCwgJ3R5cGUnID0+ICRjaGFyZGlyLCAnc29yJyA9PiAkc29yLCAnZW9yJyA9PiAkZW9yKTsKCQkJfQoJCX0gLy8gZW5kIGZvciBlYWNoIGNoYXIKCgkJLy8gWDguIEFsbCBleHBsaWNpdCBkaXJlY3Rpb25hbCBlbWJlZGRpbmdzIGFuZCBvdmVycmlkZXMgYXJlIGNvbXBsZXRlbHkgdGVybWluYXRlZCBhdCB0aGUgZW5kIG9mIGVhY2ggcGFyYWdyYXBoLiBQYXJhZ3JhcGggc2VwYXJhdG9ycyBhcmUgbm90IGluY2x1ZGVkIGluIHRoZSBlbWJlZGRpbmcuCgkJLy8gWDkuIFJlbW92ZSBhbGwgUkxFLCBMUkUsIFJMTywgTFJPLCBQREYsIGFuZCBCTiBjb2Rlcy4KCQkvLyBYMTAuIFRoZSByZW1haW5pbmcgcnVsZXMgYXJlIGFwcGxpZWQgdG8gZWFjaCBydW4gb2YgY2hhcmFjdGVycyBhdCB0aGUgc2FtZSBsZXZlbC4gRm9yIGVhY2ggcnVuLCBkZXRlcm1pbmUgdGhlIHN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKSBhbmQgZW5kLW9mLWxldmVsLXJ1biAoZW9yKSB0eXBlLCBlaXRoZXIgTCBvciBSLiBUaGlzIGRlcGVuZHMgb24gdGhlIGhpZ2hlciBvZiB0aGUgdHdvIGxldmVscyBvbiBlaXRoZXIgc2lkZSBvZiB0aGUgYm91bmRhcnkgKGF0IHRoZSBzdGFydCBvciBlbmQgb2YgdGhlIHBhcmFncmFwaCwgdGhlIGxldmVsIG9mIHRoZSAnb3RoZXInIHJ1biBpcyB0aGUgYmFzZSBlbWJlZGRpbmcgbGV2ZWwpLiBJZiB0aGUgaGlnaGVyIGxldmVsIGlzIG9kZCwgdGhlIHR5cGUgaXMgUjsgb3RoZXJ3aXNlLCBpdCBpcyBMLgoKCQkvLyAzLjMuMyBSZXNvbHZpbmcgV2VhayBUeXBlcwoJCS8vIFdlYWsgdHlwZXMgYXJlIG5vdyByZXNvbHZlZCBvbmUgbGV2ZWwgcnVuIGF0IGEgdGltZS4gQXQgbGV2ZWwgcnVuIGJvdW5kYXJpZXMgd2hlcmUgdGhlIHR5cGUgb2YgdGhlIGNoYXJhY3RlciBvbiB0aGUgb3RoZXIgc2lkZSBvZiB0aGUgYm91bmRhcnkgaXMgcmVxdWlyZWQsIHRoZSB0eXBlIGFzc2lnbmVkIHRvIHNvciBvciBlb3IgaXMgdXNlZC4KCQkvLyBOb25zcGFjaW5nIG1hcmtzIGFyZSBub3cgcmVzb2x2ZWQgYmFzZWQgb24gdGhlIHByZXZpb3VzIGNoYXJhY3RlcnMuCgkJJG51bWNoYXJzID0gY291bnQoJGNoYXJkYXRhKTsKCgkJLy8gVzEuIEV4YW1pbmUgZWFjaCBub25zcGFjaW5nIG1hcmsgKE5TTSkgaW4gdGhlIGxldmVsIHJ1biwgYW5kIGNoYW5nZSB0aGUgdHlwZSBvZiB0aGUgTlNNIHRvIHRoZSB0eXBlIG9mIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIuIElmIHRoZSBOU00gaXMgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsZXZlbCBydW4sIGl0IHdpbGwgZ2V0IHRoZSB0eXBlIG9mIHNvci4KCQkkcHJldmxldmVsID0gLTE7IC8vIHRyYWNrIGxldmVsIGNoYW5nZXMKCQkkbGV2Y291bnQgPSAwOyAvLyBjb3VudHMgY29uc2VjdXRpdmUgY2hhcnMgYXQgdGhlIHNhbWUgbGV2ZWwKCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCWlmICgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ05TTScpIHsKCQkJCWlmICgkbGV2Y291bnQpIHsKCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAkY2hhcmRhdGFbJGldWydzb3InXTsKCQkJCX0gZWxzZWlmICgkaSA+IDApIHsKCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddOwoJCQkJfQoJCQl9CgkJCWlmICgkY2hhcmRhdGFbJGldWydsZXZlbCddICE9ICRwcmV2bGV2ZWwpIHsKCQkJCSRsZXZjb3VudCA9IDA7CgkJCX0gZWxzZSB7CgkJCQkrKyRsZXZjb3VudDsKCQkJfQoJCQkkcHJldmxldmVsID0gJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXTsKCQl9CgoJCS8vIFcyLiBTZWFyY2ggYmFja3dhcmQgZnJvbSBlYWNoIGluc3RhbmNlIG9mIGEgRXVyb3BlYW4gbnVtYmVyIHVudGlsIHRoZSBmaXJzdCBzdHJvbmcgdHlwZSAoUiwgTCwgQUwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEFMIGlzIGZvdW5kLCBjaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIEV1cm9wZWFuIG51bWJlciB0byBBcmFiaWMgbnVtYmVyLgoJCSRwcmV2bGV2ZWwgPSAtMTsKCQkkbGV2Y291bnQgPSAwOwoJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJaWYgKCRjaGFyZGF0YVskaV1bJ2NoYXInXSA9PSAnRU4nKSB7CgkJCQlmb3IgKCRqPSRsZXZjb3VudDsgJGogPj0gMDsgJGotLSkgewoJCQkJCWlmICgkY2hhcmRhdGFbJGpdWyd0eXBlJ10gPT0gJ0FMJykgewoJCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnQU4nOwoJCQkJCX0gZWxzZWlmICgoJGNoYXJkYXRhWyRqXVsndHlwZSddID09ICdMJykgT1IgKCRjaGFyZGF0YVskal1bJ3R5cGUnXSA9PSAnUicpKSB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlpZiAoJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXSAhPSAkcHJldmxldmVsKSB7CgkJCQkkbGV2Y291bnQgPSAwOwoJCQl9IGVsc2UgewoJCQkJKyskbGV2Y291bnQ7CgkJCX0KCQkJJHByZXZsZXZlbCA9ICRjaGFyZGF0YVskaV1bJ2xldmVsJ107CgkJfQoKCQkvLyBXMy4gQ2hhbmdlIGFsbCBBTHMgdG8gUi4KCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCWlmICgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ0FMJykgewoJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJ1InOwoJCQl9CgkJfQoKCQkvLyBXNC4gQSBzaW5nbGUgRXVyb3BlYW4gc2VwYXJhdG9yIGJldHdlZW4gdHdvIEV1cm9wZWFuIG51bWJlcnMgY2hhbmdlcyB0byBhIEV1cm9wZWFuIG51bWJlci4gQSBzaW5nbGUgY29tbW9uIHNlcGFyYXRvciBiZXR3ZWVuIHR3byBudW1iZXJzIG9mIHRoZSBzYW1lIHR5cGUgY2hhbmdlcyB0byB0aGF0IHR5cGUuCgkJJHByZXZsZXZlbCA9IC0xOwoJCSRsZXZjb3VudCA9IDA7CgkJZm9yICgkaT0wOyAkaSA8ICRudW1jaGFyczsgKyskaSkgewoJCQlpZiAoKCRsZXZjb3VudCA+IDApIEFORCAoKCRpKzEpIDwgJG51bWNoYXJzKSBBTkQgKCRjaGFyZGF0YVsoJGkrMSldWydsZXZlbCddID09ICRwcmV2bGV2ZWwpKSB7CgkJCQlpZiAoKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnRVMnKSBBTkQgKCRjaGFyZGF0YVsoJGktMSldWyd0eXBlJ10gPT0gJ0VOJykgQU5EICgkY2hhcmRhdGFbKCRpKzEpXVsndHlwZSddID09ICdFTicpKSB7CgkJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJ0VOJzsKCQkJCX0gZWxzZWlmICgoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdDUycpIEFORCAoJGNoYXJkYXRhWygkaS0xKV1bJ3R5cGUnXSA9PSAnRU4nKSBBTkQgKCRjaGFyZGF0YVsoJGkrMSldWyd0eXBlJ10gPT0gJ0VOJykpIHsKCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnRU4nOwoJCQkJfSBlbHNlaWYgKCgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ0NTJykgQU5EICgkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddID09ICdBTicpIEFORCAoJGNoYXJkYXRhWygkaSsxKV1bJ3R5cGUnXSA9PSAnQU4nKSkgewoJCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICdBTic7CgkJCQl9CgkJCX0KCQkJaWYgKCRjaGFyZGF0YVskaV1bJ2xldmVsJ10gIT0gJHByZXZsZXZlbCkgewoJCQkJJGxldmNvdW50ID0gMDsKCQkJfSBlbHNlIHsKCQkJCSsrJGxldmNvdW50OwoJCQl9CgkJCSRwcmV2bGV2ZWwgPSAkY2hhcmRhdGFbJGldWydsZXZlbCddOwoJCX0KCgkJLy8gVzUuIEEgc2VxdWVuY2Ugb2YgRXVyb3BlYW4gdGVybWluYXRvcnMgYWRqYWNlbnQgdG8gRXVyb3BlYW4gbnVtYmVycyBjaGFuZ2VzIHRvIGFsbCBFdXJvcGVhbiBudW1iZXJzLgoJCSRwcmV2bGV2ZWwgPSAtMTsKCQkkbGV2Y291bnQgPSAwOwoJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJaWYgKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnRVQnKSB7CgkJCQlpZiAoKCRsZXZjb3VudCA+IDApIEFORCAoJGNoYXJkYXRhWygkaS0xKV1bJ3R5cGUnXSA9PSAnRU4nKSkgewoJCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICdFTic7CgkJCQl9IGVsc2UgewoJCQkJCSRqID0gJGkrMTsKCQkJCQl3aGlsZSAoKCRqIDwgJG51bWNoYXJzKSBBTkQgKCRjaGFyZGF0YVskal1bJ2xldmVsJ10gPT0gJHByZXZsZXZlbCkpIHsKCQkJCQkJaWYgKCRjaGFyZGF0YVskal1bJ3R5cGUnXSA9PSAnRU4nKSB7CgkJCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnRU4nOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0gZWxzZWlmICgkY2hhcmRhdGFbJGpdWyd0eXBlJ10gIT0gJ0VUJykgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJKyskajsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJaWYgKCRjaGFyZGF0YVskaV1bJ2xldmVsJ10gIT0gJHByZXZsZXZlbCkgewoJCQkJJGxldmNvdW50ID0gMDsKCQkJfSBlbHNlIHsKCQkJCSsrJGxldmNvdW50OwoJCQl9CgkJCSRwcmV2bGV2ZWwgPSAkY2hhcmRhdGFbJGldWydsZXZlbCddOwoJCX0KCgkJLy8gVzYuIE90aGVyd2lzZSwgc2VwYXJhdG9ycyBhbmQgdGVybWluYXRvcnMgY2hhbmdlIHRvIE90aGVyIE5ldXRyYWwuCgkJJHByZXZsZXZlbCA9IC0xOwoJCSRsZXZjb3VudCA9IDA7CgkJZm9yICgkaT0wOyAkaSA8ICRudW1jaGFyczsgKyskaSkgewoJCQlpZiAoKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnRVQnKSBPUiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdFUycpIE9SICgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ0NTJykpIHsKCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICdPTic7CgkJCX0KCQkJaWYgKCRjaGFyZGF0YVskaV1bJ2xldmVsJ10gIT0gJHByZXZsZXZlbCkgewoJCQkJJGxldmNvdW50ID0gMDsKCQkJfSBlbHNlIHsKCQkJCSsrJGxldmNvdW50OwoJCQl9CgkJCSRwcmV2bGV2ZWwgPSAkY2hhcmRhdGFbJGldWydsZXZlbCddOwoJCX0KCgkJLy9XNy4gU2VhcmNoIGJhY2t3YXJkIGZyb20gZWFjaCBpbnN0YW5jZSBvZiBhIEV1cm9wZWFuIG51bWJlciB1bnRpbCB0aGUgZmlyc3Qgc3Ryb25nIHR5cGUgKFIsIEwsIG9yIHNvcikgaXMgZm91bmQuIElmIGFuIEwgaXMgZm91bmQsIHRoZW4gY2hhbmdlIHRoZSB0eXBlIG9mIHRoZSBFdXJvcGVhbiBudW1iZXIgdG8gTC4KCQkkcHJldmxldmVsID0gLTE7CgkJJGxldmNvdW50ID0gMDsKCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCWlmICgkY2hhcmRhdGFbJGldWydjaGFyJ10gPT0gJ0VOJykgewoJCQkJZm9yICgkaj0kbGV2Y291bnQ7ICRqID49IDA7ICRqLS0pIHsKCQkJCQlpZiAoJGNoYXJkYXRhWyRqXVsndHlwZSddID09ICdMJykgewoJCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnTCc7CgkJCQkJfSBlbHNlaWYgKCRjaGFyZGF0YVskal1bJ3R5cGUnXSA9PSAnUicpIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICgkY2hhcmRhdGFbJGldWydsZXZlbCddICE9ICRwcmV2bGV2ZWwpIHsKCQkJCSRsZXZjb3VudCA9IDA7CgkJCX0gZWxzZSB7CgkJCQkrKyRsZXZjb3VudDsKCQkJfQoJCQkkcHJldmxldmVsID0gJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXTsKCQl9CgoJCS8vIE4xLiBBIHNlcXVlbmNlIG9mIG5ldXRyYWxzIHRha2VzIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHN1cnJvdW5kaW5nIHN0cm9uZyB0ZXh0IGlmIHRoZSB0ZXh0IG9uIGJvdGggc2lkZXMgaGFzIHRoZSBzYW1lIGRpcmVjdGlvbi4gRXVyb3BlYW4gYW5kIEFyYWJpYyBudW1iZXJzIGFjdCBhcyBpZiB0aGV5IHdlcmUgUiBpbiB0ZXJtcyBvZiB0aGVpciBpbmZsdWVuY2Ugb24gbmV1dHJhbHMuIFN0YXJ0LW9mLWxldmVsLXJ1biAoc29yKSBhbmQgZW5kLW9mLWxldmVsLXJ1biAoZW9yKSBhcmUgdXNlZCBhdCBsZXZlbCBydW4gYm91bmRhcmllcy4KCQkkcHJldmxldmVsID0gLTE7CgkJJGxldmNvdW50ID0gMDsKCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCWlmICgoJGxldmNvdW50ID4gMCkgQU5EICgoJGkrMSkgPCAkbnVtY2hhcnMpIEFORCAoJGNoYXJkYXRhWygkaSsxKV1bJ2xldmVsJ10gPT0gJHByZXZsZXZlbCkpIHsKCQkJCWlmICgoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdOJykgQU5EICgkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddID09ICdMJykgQU5EICgkY2hhcmRhdGFbKCRpKzEpXVsndHlwZSddID09ICdMJykpIHsKCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnTCc7CgkJCQl9IGVsc2VpZiAoKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnTicpIEFORAoJCQkJICgoJGNoYXJkYXRhWygkaS0xKV1bJ3R5cGUnXSA9PSAnUicpIE9SICgkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddID09ICdFTicpIE9SICgkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddID09ICdBTicpKSBBTkQKCQkJCSAoKCRjaGFyZGF0YVsoJGkrMSldWyd0eXBlJ10gPT0gJ1InKSBPUiAoJGNoYXJkYXRhWygkaSsxKV1bJ3R5cGUnXSA9PSAnRU4nKSBPUiAoJGNoYXJkYXRhWygkaSsxKV1bJ3R5cGUnXSA9PSAnQU4nKSkpIHsKCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAnUic7CgkJCQl9IGVsc2VpZiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdOJykgewoJCQkJCS8vIE4yLiBBbnkgcmVtYWluaW5nIG5ldXRyYWxzIHRha2UgdGhlIGVtYmVkZGluZyBkaXJlY3Rpb24KCQkJCQkkY2hhcmRhdGFbJGldWyd0eXBlJ10gPSAkY2hhcmRhdGFbJGldWydzb3InXTsKCQkJCX0KCQkJfSBlbHNlaWYgKCgkbGV2Y291bnQgPT0gMCkgQU5EICgoJGkrMSkgPCAkbnVtY2hhcnMpIEFORCAoJGNoYXJkYXRhWygkaSsxKV1bJ2xldmVsJ10gPT0gJHByZXZsZXZlbCkpIHsKCQkJCS8vIGZpcnN0IGNoYXIKCQkJCWlmICgoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdOJykgQU5EICgkY2hhcmRhdGFbJGldWydzb3InXSA9PSAnTCcpIEFORCAoJGNoYXJkYXRhWygkaSsxKV1bJ3R5cGUnXSA9PSAnTCcpKSB7CgkJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJ0wnOwoJCQkJfSBlbHNlaWYgKCgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ04nKSBBTkQKCQkJCSAoKCRjaGFyZGF0YVskaV1bJ3NvciddID09ICdSJykgT1IgKCRjaGFyZGF0YVskaV1bJ3NvciddID09ICdFTicpIE9SICgkY2hhcmRhdGFbJGldWydzb3InXSA9PSAnQU4nKSkgQU5ECgkJCQkgKCgkY2hhcmRhdGFbKCRpKzEpXVsndHlwZSddID09ICdSJykgT1IgKCRjaGFyZGF0YVsoJGkrMSldWyd0eXBlJ10gPT0gJ0VOJykgT1IgKCRjaGFyZGF0YVsoJGkrMSldWyd0eXBlJ10gPT0gJ0FOJykpKSB7CgkJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJ1InOwoJCQkJfSBlbHNlaWYgKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnTicpIHsKCQkJCQkvLyBOMi4gQW55IHJlbWFpbmluZyBuZXV0cmFscyB0YWtlIHRoZSBlbWJlZGRpbmcgZGlyZWN0aW9uCgkJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJGNoYXJkYXRhWyRpXVsnc29yJ107CgkJCQl9CgkJCX0gZWxzZWlmICgoJGxldmNvdW50ID4gMCkgQU5EICgoKCRpKzEpID09ICRudW1jaGFycykgT1IgKCgkaSsxKSA8ICRudW1jaGFycykgQU5EICgkY2hhcmRhdGFbKCRpKzEpXVsnbGV2ZWwnXSAhPSAkcHJldmxldmVsKSkpIHsKCQkJCS8vbGFzdCBjaGFyCgkJCQlpZiAoKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnTicpIEFORCAoJGNoYXJkYXRhWygkaS0xKV1bJ3R5cGUnXSA9PSAnTCcpIEFORCAoJGNoYXJkYXRhWyRpXVsnZW9yJ10gPT0gJ0wnKSkgewoJCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICdMJzsKCQkJCX0gZWxzZWlmICgoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdOJykgQU5ECgkJCQkgKCgkY2hhcmRhdGFbKCRpLTEpXVsndHlwZSddID09ICdSJykgT1IgKCRjaGFyZGF0YVsoJGktMSldWyd0eXBlJ10gPT0gJ0VOJykgT1IgKCRjaGFyZGF0YVsoJGktMSldWyd0eXBlJ10gPT0gJ0FOJykpIEFORAoJCQkJICgoJGNoYXJkYXRhWyRpXVsnZW9yJ10gPT0gJ1InKSBPUiAoJGNoYXJkYXRhWyRpXVsnZW9yJ10gPT0gJ0VOJykgT1IgKCRjaGFyZGF0YVskaV1bJ2VvciddID09ICdBTicpKSkgewoJCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICdSJzsKCQkJCX0gZWxzZWlmICgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ04nKSB7CgkJCQkJLy8gTjIuIEFueSByZW1haW5pbmcgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbgoJCQkJCSRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9ICRjaGFyZGF0YVskaV1bJ3NvciddOwoJCQkJfQoJCQl9IGVsc2VpZiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdOJykgewoJCQkJLy8gTjIuIEFueSByZW1haW5pbmcgbmV1dHJhbHMgdGFrZSB0aGUgZW1iZWRkaW5nIGRpcmVjdGlvbgoJCQkJJGNoYXJkYXRhWyRpXVsndHlwZSddID0gJGNoYXJkYXRhWyRpXVsnc29yJ107CgkJCX0KCQkJaWYgKCRjaGFyZGF0YVskaV1bJ2xldmVsJ10gIT0gJHByZXZsZXZlbCkgewoJCQkJJGxldmNvdW50ID0gMDsKCQkJfSBlbHNlIHsKCQkJCSsrJGxldmNvdW50OwoJCQl9CgkJCSRwcmV2bGV2ZWwgPSAkY2hhcmRhdGFbJGldWydsZXZlbCddOwoJCX0KCgkJLy8gSTEuIEZvciBhbGwgY2hhcmFjdGVycyB3aXRoIGFuIGV2ZW4gKGxlZnQtdG8tcmlnaHQpIGVtYmVkZGluZyBkaXJlY3Rpb24sIHRob3NlIG9mIHR5cGUgUiBnbyB1cCBvbmUgbGV2ZWwgYW5kIHRob3NlIG9mIHR5cGUgQU4gb3IgRU4gZ28gdXAgdHdvIGxldmVscy4KCQkvLyBJMi4gRm9yIGFsbCBjaGFyYWN0ZXJzIHdpdGggYW4gb2RkIChyaWdodC10by1sZWZ0KSBlbWJlZGRpbmcgZGlyZWN0aW9uLCB0aG9zZSBvZiB0eXBlIEwsIEVOIG9yIEFOIGdvIHVwIG9uZSBsZXZlbC4KCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCSRvZGQgPSAkY2hhcmRhdGFbJGldWydsZXZlbCddICUgMjsKCQkJaWYgKCRvZGQpIHsKCQkJCWlmICgoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdMJykgT1IgKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnQU4nKSBPUiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdFTicpKSB7CgkJCQkJJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXSArPSAxOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJaWYgKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnUicpIHsKCQkJCQkkY2hhcmRhdGFbJGldWydsZXZlbCddICs9IDE7CgkJCQl9IGVsc2VpZiAoKCRjaGFyZGF0YVskaV1bJ3R5cGUnXSA9PSAnQU4nKSBPUiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdFTicpKSB7CgkJCQkJJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXSArPSAyOwoJCQkJfQoJCQl9CgkJCSRtYXhsZXZlbCA9IG1heCgkY2hhcmRhdGFbJGldWydsZXZlbCddLCRtYXhsZXZlbCk7CgkJfQoKCQkvLyBMMS4gT24gZWFjaCBsaW5lLCByZXNldCB0aGUgZW1iZWRkaW5nIGxldmVsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyB0byB0aGUgcGFyYWdyYXBoIGVtYmVkZGluZyBsZXZlbDoKCQkvLwkxLiBTZWdtZW50IHNlcGFyYXRvcnMsCgkJLy8JMi4gUGFyYWdyYXBoIHNlcGFyYXRvcnMsCgkJLy8JMy4gQW55IHNlcXVlbmNlIG9mIHdoaXRlc3BhY2UgY2hhcmFjdGVycyBwcmVjZWRpbmcgYSBzZWdtZW50IHNlcGFyYXRvciBvciBwYXJhZ3JhcGggc2VwYXJhdG9yLCBhbmQKCQkvLwk0LiBBbnkgc2VxdWVuY2Ugb2Ygd2hpdGUgc3BhY2UgY2hhcmFjdGVycyBhdCB0aGUgZW5kIG9mIHRoZSBsaW5lLgoJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJaWYgKCgkY2hhcmRhdGFbJGldWyd0eXBlJ10gPT0gJ0InKSBPUiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdTJykpIHsKCQkJCSRjaGFyZGF0YVskaV1bJ2xldmVsJ10gPSAkcGVsOwoJCQl9IGVsc2VpZiAoJGNoYXJkYXRhWyRpXVsndHlwZSddID09ICdXUycpIHsKCQkJCSRqID0gJGkrMTsKCQkJCXdoaWxlICgkaiA8ICRudW1jaGFycykgewoJCQkJCWlmICgoKCRjaGFyZGF0YVskal1bJ3R5cGUnXSA9PSAnQicpIE9SICgkY2hhcmRhdGFbJGpdWyd0eXBlJ10gPT0gJ1MnKSkgT1IKCQkJCQkJKCgkaiA9PSAoJG51bWNoYXJzLTEpKSBBTkQgKCRjaGFyZGF0YVskal1bJ3R5cGUnXSA9PSAnV1MnKSkpIHsKCQkJCQkJJGNoYXJkYXRhWyRpXVsnbGV2ZWwnXSA9ICRwZWw7CgkJCQkJCWJyZWFrOwoJCQkJCX0gZWxzZWlmICgkY2hhcmRhdGFbJGpdWyd0eXBlJ10gIT0gJ1dTJykgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJKyskajsKCQkJCX0KCQkJfQoJCX0KCgkJLy8gQXJhYmljIFNoYXBpbmcKCQkvLyBDdXJzaXZlbHkgY29ubmVjdGVkIHNjcmlwdHMsIHN1Y2ggYXMgQXJhYmljIG9yIFN5cmlhYywgcmVxdWlyZSB0aGUgc2VsZWN0aW9uIG9mIHBvc2l0aW9uYWwgY2hhcmFjdGVyIHNoYXBlcyB0aGF0IGRlcGVuZCBvbiBhZGphY2VudCBjaGFyYWN0ZXJzLiBTaGFwaW5nIGlzIGxvZ2ljYWxseSBhcHBsaWVkIGFmdGVyIHRoZSBCaWRpcmVjdGlvbmFsIEFsZ29yaXRobSBpcyB1c2VkIGFuZCBpcyBsaW1pdGVkIHRvIGNoYXJhY3RlcnMgd2l0aGluIHRoZSBzYW1lIGRpcmVjdGlvbmFsIHJ1bi4KCQlpZiAoJGFyYWJpYykgewoJCQkkZW5kZWRsZXR0ZXIgPSBhcnJheSgxNTY5LDE1NzAsMTU3MSwxNTcyLDE1NzMsMTU3NSwxNTc3LDE1ODMsMTU4NCwxNTg1LDE1ODYsMTYwOCwxNjg4KTsKCQkJJGFsZmxldHRlciA9IGFycmF5KDE1NzAsMTU3MSwxNTczLDE1NzUpOwoJCQkkY2hhcmRhdGEyID0gJGNoYXJkYXRhOwoJCQkkbGFhbGV0dGVyID0gZmFsc2U7CgkJCSRjaGFyQUwgPSBhcnJheSgpOwoJCQkkeCA9IDA7CgkJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJCWlmICgoVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJGNoYXJkYXRhWyRpXVsnY2hhciddXSA9PSAnQUwnKSBPUiAoJGNoYXJkYXRhWyRpXVsnY2hhciddID09IDMyKSBPUiAoJGNoYXJkYXRhWyRpXVsnY2hhciddID09IDgyMDQpKSB7CgkJCQkJJGNoYXJBTFskeF0gPSAkY2hhcmRhdGFbJGldOwoJCQkJCSRjaGFyQUxbJHhdWydpJ10gPSAkaTsKCQkJCQkkY2hhcmRhdGFbJGldWyd4J10gPSAkeDsKCQkJCQkrKyR4OwoJCQkJfQoJCQl9CgkJCSRudW1BTCA9ICR4OwoJCQlmb3IgKCRpPTA7ICRpIDwgJG51bWNoYXJzOyArKyRpKSB7CgkJCQkkdGhpc2NoYXIgPSAkY2hhcmRhdGFbJGldOwoJCQkJaWYgKCRpID4gMCkgewoJCQkJCSRwcmV2Y2hhciA9ICRjaGFyZGF0YVsoJGktMSldOwoJCQkJfSBlbHNlIHsKCQkJCQkkcHJldmNoYXIgPSBmYWxzZTsKCQkJCX0KCQkJCWlmICgoJGkrMSkgPCAkbnVtY2hhcnMpIHsKCQkJCQkkbmV4dGNoYXIgPSAkY2hhcmRhdGFbKCRpKzEpXTsKCQkJCX0gZWxzZSB7CgkJCQkJJG5leHRjaGFyID0gZmFsc2U7CgkJCQl9CgkJCQlpZiAoVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJHRoaXNjaGFyWydjaGFyJ11dID09ICdBTCcpIHsKCQkJCQkkeCA9ICR0aGlzY2hhclsneCddOwoJCQkJCWlmICgkeCA+IDApIHsKCQkJCQkJJHByZXZjaGFyID0gJGNoYXJBTFsoJHgtMSldOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRwcmV2Y2hhciA9IGZhbHNlOwoJCQkJCX0KCQkJCQlpZiAoKCR4KzEpIDwgJG51bUFMKSB7CgkJCQkJCSRuZXh0Y2hhciA9ICRjaGFyQUxbKCR4KzEpXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkbmV4dGNoYXIgPSBmYWxzZTsKCQkJCQl9CgkJCQkJLy8gaWYgbGFhIGxldHRlcgoJCQkJCWlmICgoJHByZXZjaGFyICE9PSBmYWxzZSkgQU5EICgkcHJldmNoYXJbJ2NoYXInXSA9PSAxNjA0KSBBTkQgKGluX2FycmF5KCR0aGlzY2hhclsnY2hhciddLCAkYWxmbGV0dGVyKSkpIHsKCQkJCQkJJGFyYWJpY2FyciA9IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9sYWFfYXJyYXk7CgkJCQkJCSRsYWFsZXR0ZXIgPSB0cnVlOwoJCQkJCQlpZiAoJHggPiAxKSB7CgkJCQkJCQkkcHJldmNoYXIgPSAkY2hhckFMWygkeC0yKV07CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcHJldmNoYXIgPSBmYWxzZTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCSRhcmFiaWNhcnIgPSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfYXJhYmljc3Vic3Q7CgkJCQkJCSRsYWFsZXR0ZXIgPSBmYWxzZTsKCQkJCQl9CgkJCQkJaWYgKCgkcHJldmNoYXIgIT09IGZhbHNlKSBBTkQgKCRuZXh0Y2hhciAhPT0gZmFsc2UpIEFORAoJCQkJCQkoKFRDUERGX0ZPTlRfREFUQTo6JHVuaV90eXBlWyRwcmV2Y2hhclsnY2hhciddXSA9PSAnQUwnKSBPUiAoVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJHByZXZjaGFyWydjaGFyJ11dID09ICdOU00nKSkgQU5ECgkJCQkJCSgoVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJG5leHRjaGFyWydjaGFyJ11dID09ICdBTCcpIE9SIChUQ1BERl9GT05UX0RBVEE6OiR1bmlfdHlwZVskbmV4dGNoYXJbJ2NoYXInXV0gPT0gJ05TTScpKSBBTkQKCQkJCQkJKCRwcmV2Y2hhclsndHlwZSddID09ICR0aGlzY2hhclsndHlwZSddKSBBTkQKCQkJCQkJKCRuZXh0Y2hhclsndHlwZSddID09ICR0aGlzY2hhclsndHlwZSddKSBBTkQKCQkJCQkJKCRuZXh0Y2hhclsnY2hhciddICE9IDE1NjcpKSB7CgkJCQkJCWlmIChpbl9hcnJheSgkcHJldmNoYXJbJ2NoYXInXSwgJGVuZGVkbGV0dGVyKSkgewoJCQkJCQkJaWYgKGlzc2V0KCRhcmFiaWNhcnJbJHRoaXNjaGFyWydjaGFyJ11dWzJdKSkgewoJCQkJCQkJCS8vIGluaXRpYWwKCQkJCQkJCQkkY2hhcmRhdGEyWyRpXVsnY2hhciddID0gJGFyYWJpY2FyclskdGhpc2NoYXJbJ2NoYXInXV1bMl07CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQlpZiAoaXNzZXQoJGFyYWJpY2FyclskdGhpc2NoYXJbJ2NoYXInXV1bM10pKSB7CgkJCQkJCQkJLy8gbWVkaWFsCgkJCQkJCQkJJGNoYXJkYXRhMlskaV1bJ2NoYXInXSA9ICRhcmFiaWNhcnJbJHRoaXNjaGFyWydjaGFyJ11dWzNdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSBlbHNlaWYgKCgkbmV4dGNoYXIgIT09IGZhbHNlKSBBTkQKCQkJCQkJKChUQ1BERl9GT05UX0RBVEE6OiR1bmlfdHlwZVskbmV4dGNoYXJbJ2NoYXInXV0gPT0gJ0FMJykgT1IgKFRDUERGX0ZPTlRfREFUQTo6JHVuaV90eXBlWyRuZXh0Y2hhclsnY2hhciddXSA9PSAnTlNNJykpIEFORAoJCQkJCQkoJG5leHRjaGFyWyd0eXBlJ10gPT0gJHRoaXNjaGFyWyd0eXBlJ10pIEFORAoJCQkJCQkoJG5leHRjaGFyWydjaGFyJ10gIT0gMTU2NykpIHsKCQkJCQkJaWYgKGlzc2V0KCRhcmFiaWNhcnJbJGNoYXJkYXRhWyRpXVsnY2hhciddXVsyXSkpIHsKCQkJCQkJCS8vIGluaXRpYWwKCQkJCQkJCSRjaGFyZGF0YTJbJGldWydjaGFyJ10gPSAkYXJhYmljYXJyWyR0aGlzY2hhclsnY2hhciddXVsyXTsKCQkJCQkJfQoJCQkJCX0gZWxzZWlmICgoKCRwcmV2Y2hhciAhPT0gZmFsc2UpIEFORAoJCQkJCQkoKFRDUERGX0ZPTlRfREFUQTo6JHVuaV90eXBlWyRwcmV2Y2hhclsnY2hhciddXSA9PSAnQUwnKSBPUiAoVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJHByZXZjaGFyWydjaGFyJ11dID09ICdOU00nKSkgQU5ECgkJCQkJCSgkcHJldmNoYXJbJ3R5cGUnXSA9PSAkdGhpc2NoYXJbJ3R5cGUnXSkpIE9SCgkJCQkJCSgoJG5leHRjaGFyICE9PSBmYWxzZSkgQU5EICgkbmV4dGNoYXJbJ2NoYXInXSA9PSAxNTY3KSkpIHsKCQkJCQkJLy8gZmluYWwKCQkJCQkJaWYgKCgkaSA+IDEpIEFORCAoJHRoaXNjaGFyWydjaGFyJ10gPT0gMTYwNykgQU5ECgkJCQkJCQkoJGNoYXJkYXRhWyRpLTFdWydjaGFyJ10gPT0gMTYwNCkgQU5ECgkJCQkJCQkoJGNoYXJkYXRhWyRpLTJdWydjaGFyJ10gPT0gMTYwNCkpIHsKCQkJCQkJCS8vQWxsYWggV29yZAoJCQkJCQkJLy8gbWFyayBjaGFyYWN0ZXJzIHRvIGRlbGV0ZSB3aXRoIGZhbHNlCgkJCQkJCQkkY2hhcmRhdGEyWyRpLTJdWydjaGFyJ10gPSBmYWxzZTsKCQkJCQkJCSRjaGFyZGF0YTJbJGktMV1bJ2NoYXInXSA9IGZhbHNlOwoJCQkJCQkJJGNoYXJkYXRhMlskaV1bJ2NoYXInXSA9IDY1MDEwOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJaWYgKCgkcHJldmNoYXIgIT09IGZhbHNlKSBBTkQgaW5fYXJyYXkoJHByZXZjaGFyWydjaGFyJ10sICRlbmRlZGxldHRlcikpIHsKCQkJCQkJCQlpZiAoaXNzZXQoJGFyYWJpY2FyclskdGhpc2NoYXJbJ2NoYXInXV1bMF0pKSB7CgkJCQkJCQkJCS8vIGlzb2xhdGVkCgkJCQkJCQkJCSRjaGFyZGF0YTJbJGldWydjaGFyJ10gPSAkYXJhYmljYXJyWyR0aGlzY2hhclsnY2hhciddXVswXTsKCQkJCQkJCQl9CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCWlmIChpc3NldCgkYXJhYmljYXJyWyR0aGlzY2hhclsnY2hhciddXVsxXSkpIHsKCQkJCQkJCQkJLy8gZmluYWwKCQkJCQkJCQkJJGNoYXJkYXRhMlskaV1bJ2NoYXInXSA9ICRhcmFiaWNhcnJbJHRoaXNjaGFyWydjaGFyJ11dWzFdOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0gZWxzZWlmIChpc3NldCgkYXJhYmljYXJyWyR0aGlzY2hhclsnY2hhciddXVswXSkpIHsKCQkJCQkJLy8gaXNvbGF0ZWQKCQkJCQkJJGNoYXJkYXRhMlskaV1bJ2NoYXInXSA9ICRhcmFiaWNhcnJbJHRoaXNjaGFyWydjaGFyJ11dWzBdOwoJCQkJCX0KCQkJCQkvLyBpZiBsYWEgbGV0dGVyCgkJCQkJaWYgKCRsYWFsZXR0ZXIpIHsKCQkJCQkJLy8gbWFyayBjaGFyYWN0ZXJzIHRvIGRlbGV0ZSB3aXRoIGZhbHNlCgkJCQkJCSRjaGFyZGF0YTJbKCRjaGFyQUxbKCR4LTEpXVsnaSddKV1bJ2NoYXInXSA9IGZhbHNlOwoJCQkJCX0KCQkJCX0gLy8gZW5kIGlmIEFMIChBcmFiaWMgTGV0dGVyKQoJCQl9IC8vIGVuZCBmb3IgZWFjaCBjaGFyCgkJCS8qCgkJCSAqIENvbWJpbmluZyBjaGFyYWN0ZXJzIHRoYXQgY2FuIG9jY3VyIHdpdGggQXJhYmljIFNoYWRkYSAoMDY1MSBIRVgsIDE2MTcgREVDKSBhcmUgcmVwbGFjZWQuCgkJCSAqIFB1dHRpbmcgdGhlIGNvbWJpbmluZyBtYXJrIGFuZCBzaGFkZGEgaW4gdGhlIHNhbWUgZ2x5cGggYWxsb3dzIHVzIHRvIGF2b2lkIHRoZSB0d28gbWFya3Mgb3ZlcmxhcHBpbmcgZWFjaCBvdGhlciBpbiBhbiBpbGxlZ2libGUgbWFubmVyLgoJCQkgKi8KCQkJZm9yICgkaSA9IDA7ICRpIDwgKCRudW1jaGFycy0xKTsgKyskaSkgewoJCQkJaWYgKCgkY2hhcmRhdGEyWyRpXVsnY2hhciddID09IDE2MTcpIEFORCAoaXNzZXQoVENQREZfRk9OVF9EQVRBOjokdW5pX2RpYWNyaXRpY3NbKCRjaGFyZGF0YTJbJGkrMV1bJ2NoYXInXSldKSkpIHsKCQkJCQkvLyBjaGVjayBpZiB0aGUgc3VidGl0dXRpb24gZm9udCBpcyBkZWZpbmVkIG9uIGN1cnJlbnQgZm9udAoJCQkJCWlmIChpc3NldCgkY3VycmVudGZvbnRbJ2N3J11bKFRDUERGX0ZPTlRfREFUQTo6JHVuaV9kaWFjcml0aWNzWygkY2hhcmRhdGEyWyRpKzFdWydjaGFyJ10pXSldKSkgewoJCQkJCQkkY2hhcmRhdGEyWyRpXVsnY2hhciddID0gZmFsc2U7CgkJCQkJCSRjaGFyZGF0YTJbJGkrMV1bJ2NoYXInXSA9IFRDUERGX0ZPTlRfREFUQTo6JHVuaV9kaWFjcml0aWNzWygkY2hhcmRhdGEyWyRpKzFdWydjaGFyJ10pXTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gcmVtb3ZlIG1hcmtlZCBjaGFyYWN0ZXJzCgkJCWZvcmVhY2ggKCRjaGFyZGF0YTIgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCWlmICgkdmFsdWVbJ2NoYXInXSA9PT0gZmFsc2UpIHsKCQkJCQl1bnNldCgkY2hhcmRhdGEyWyRrZXldKTsKCQkJCX0KCQkJfQoJCQkkY2hhcmRhdGEgPSBhcnJheV92YWx1ZXMoJGNoYXJkYXRhMik7CgkJCSRudW1jaGFycyA9IGNvdW50KCRjaGFyZGF0YSk7CgkJCXVuc2V0KCRjaGFyZGF0YTIpOwoJCQl1bnNldCgkYXJhYmljYXJyKTsKCQkJdW5zZXQoJGxhYWxldHRlcik7CgkJCXVuc2V0KCRjaGFyQUwpOwoJCX0KCgkJLy8gTDIuIEZyb20gdGhlIGhpZ2hlc3QgbGV2ZWwgZm91bmQgaW4gdGhlIHRleHQgdG8gdGhlIGxvd2VzdCBvZGQgbGV2ZWwgb24gZWFjaCBsaW5lLCBpbmNsdWRpbmcgaW50ZXJtZWRpYXRlIGxldmVscyBub3QgYWN0dWFsbHkgcHJlc2VudCBpbiB0aGUgdGV4dCwgcmV2ZXJzZSBhbnkgY29udGlndW91cyBzZXF1ZW5jZSBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGF0IHRoYXQgbGV2ZWwgb3IgaGlnaGVyLgoJCWZvciAoJGo9JG1heGxldmVsOyAkaiA+IDA7ICRqLS0pIHsKCQkJJG9yZGFycmF5ID0gQXJyYXkoKTsKCQkJJHJldmFyciA9IEFycmF5KCk7CgkJCSRvbmxldmVsID0gZmFsc2U7CgkJCWZvciAoJGk9MDsgJGkgPCAkbnVtY2hhcnM7ICsrJGkpIHsKCQkJCWlmICgkY2hhcmRhdGFbJGldWydsZXZlbCddID49ICRqKSB7CgkJCQkJJG9ubGV2ZWwgPSB0cnVlOwoJCQkJCWlmIChpc3NldChUQ1BERl9GT05UX0RBVEE6OiR1bmlfbWlycm9yWyRjaGFyZGF0YVskaV1bJ2NoYXInXV0pKSB7CgkJCQkJCS8vIEw0LiBBIGNoYXJhY3RlciBpcyBkZXBpY3RlZCBieSBhIG1pcnJvcmVkIGdseXBoIGlmIGFuZCBvbmx5IGlmIChhKSB0aGUgcmVzb2x2ZWQgZGlyZWN0aW9uYWxpdHkgb2YgdGhhdCBjaGFyYWN0ZXIgaXMgUiwgYW5kIChiKSB0aGUgQmlkaV9NaXJyb3JlZCBwcm9wZXJ0eSB2YWx1ZSBvZiB0aGF0IGNoYXJhY3RlciBpcyB0cnVlLgoJCQkJCQkkY2hhcmRhdGFbJGldWydjaGFyJ10gPSBUQ1BERl9GT05UX0RBVEE6OiR1bmlfbWlycm9yWyRjaGFyZGF0YVskaV1bJ2NoYXInXV07CgkJCQkJfQoJCQkJCSRyZXZhcnJbXSA9ICRjaGFyZGF0YVskaV07CgkJCQl9IGVsc2UgewoJCQkJCWlmICgkb25sZXZlbCkgewoJCQkJCQkkcmV2YXJyID0gYXJyYXlfcmV2ZXJzZSgkcmV2YXJyKTsKCQkJCQkJJG9yZGFycmF5ID0gYXJyYXlfbWVyZ2UoJG9yZGFycmF5LCAkcmV2YXJyKTsKCQkJCQkJJHJldmFyciA9IEFycmF5KCk7CgkJCQkJCSRvbmxldmVsID0gZmFsc2U7CgkJCQkJfQoJCQkJCSRvcmRhcnJheVtdID0gJGNoYXJkYXRhWyRpXTsKCQkJCX0KCQkJfQoJCQlpZiAoJG9ubGV2ZWwpIHsKCQkJCSRyZXZhcnIgPSBhcnJheV9yZXZlcnNlKCRyZXZhcnIpOwoJCQkJJG9yZGFycmF5ID0gYXJyYXlfbWVyZ2UoJG9yZGFycmF5LCAkcmV2YXJyKTsKCQkJfQoJCQkkY2hhcmRhdGEgPSAkb3JkYXJyYXk7CgkJfQoJCSRvcmRhcnJheSA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJGNoYXJkYXRhIGFzICRjZCkgewoJCQkkb3JkYXJyYXlbXSA9ICRjZFsnY2hhciddOwoJCQkvLyBzdG9yZSBjaGFyIHZhbHVlcyBmb3Igc3Vic2V0dGluZwoJCQkkY3VycmVudGZvbnRbJ3N1YnNldGNoYXJzJ11bJGNkWydjaGFyJ11dID0gdHJ1ZTsKCQl9CgkJcmV0dXJuICRvcmRhcnJheTsKCX0KCgkvKioKCSAqIEdldCBhIHJlZmVyZW5jZSBmb250IHNpemUuCgkgKiBAcGFyYW0gJHNpemUgKHN0cmluZykgU3RyaW5nIGNvbnRhaW5pbmcgZm9udCBzaXplIHZhbHVlLgoJICogQHBhcmFtICRyZWZzaXplIChmbG9hdCkgUmVmZXJlbmNlIGZvbnQgc2l6ZSBpbiBwb2ludHMuCgkgKiBAcmV0dXJuIGZsb2F0IHZhbHVlIGluIHBvaW50cwoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRGb250UmVmU2l6ZSgkc2l6ZSwgJHJlZnNpemU9MTIpIHsKCQlzd2l0Y2ggKCRzaXplKSB7CgkJCWNhc2UgJ3h4LXNtYWxsJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgLSA0KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3gtc21hbGwnOiB7CgkJCQkkc2l6ZSA9ICgkcmVmc2l6ZSAtIDMpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnc21hbGwnOiB7CgkJCQkkc2l6ZSA9ICgkcmVmc2l6ZSAtIDIpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnbWVkaXVtJzogewoJCQkJJHNpemUgPSAkcmVmc2l6ZTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2xhcmdlJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgKyAyKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3gtbGFyZ2UnOiB7CgkJCQkkc2l6ZSA9ICgkcmVmc2l6ZSArIDQpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAneHgtbGFyZ2UnOiB7CgkJCQkkc2l6ZSA9ICgkcmVmc2l6ZSArIDYpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnc21hbGxlcic6IHsKCQkJCSRzaXplID0gKCRyZWZzaXplIC0gMyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdsYXJnZXInOiB7CgkJCQkkc2l6ZSA9ICgkcmVmc2l6ZSArIDMpOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJcmV0dXJuICRzaXplOwoJfQoKfSAvLyBFTkQgT0YgVENQREZfRk9OVFMgQ0xBU1MKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_font_data.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfZm9udF9kYXRhLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDEKLy8gQmVnaW4gICAgICAgOiAyMDA4LTAxLTAxCi8vIExhc3QgVXBkYXRlIDogMjAxMy0wNC0wMQovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAwOC0yMDEzIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQovLyBhbG9uZyB3aXRoIFRDUERGLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgovLwovLyBTZWUgTElDRU5TRS5UWFQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBEZXNjcmlwdGlvbiA6IFVuaWNvZGUgZGF0YSBhbmQgZW5jb2RpbmcgbWFwcyBmb3IgVENQREYuCi8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwoKLyoqCiAqIEBmaWxlCiAqIFVuaWNvZGUgZGF0YSBhbmQgZW5jb2RpbmcgbWFwcyBmb3IgVENQREYuCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqLwoKLyoqCiAqIEBjbGFzcyBUQ1BERl9GT05UX0RBVEEKICogVW5pY29kZSBkYXRhIGFuZCBlbmNvZGluZyBtYXBzIGZvciBUQ1BERi4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQHZlcnNpb24gMS4wLjAwMQogKiBAYXV0aG9yIE5pY29sYSBBc3VuaSAtIGluZm9AdGVjbmljay5jb20KICovCmNsYXNzIFRDUERGX0ZPTlRfREFUQSB7CgovKioKICogVW5pY29kZSBjb2RlIGZvciBMZWZ0LXRvLVJpZ2h0IE1hcmsuCiAqIEBwdWJsaWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9MUk0gPSA4MjA2OwoKLyoqCiAqIFVuaWNvZGUgY29kZSBmb3IgUmlnaHQtdG8tTGVmdCBNYXJrLgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfUkxNID0gODIwNzsKCi8qKgogKiBVbmljb2RlIGNvZGUgZm9yIExlZnQtdG8tUmlnaHQgRW1iZWRkaW5nLgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfTFJFID0gODIzNDsKCi8qKgogKiBVbmljb2RlIGNvZGUgZm9yIFJpZ2h0LXRvLUxlZnQgRW1iZWRkaW5nLgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfUkxFID0gODIzNTsKCi8qKgogKiBVbmljb2RlIGNvZGUgZm9yIFBvcCBEaXJlY3Rpb25hbCBGb3JtYXQuCiAqIEBwdWJsaWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9QREYgPSA4MjM2OwoKLyoqCiAqIFVuaWNvZGUgY29kZSBmb3IgTGVmdC10by1SaWdodCBPdmVycmlkZS4KICogQHB1YmxpYwogKi8KcHVibGljIHN0YXRpYyAkdW5pX0xSTyA9IDgyMzc7CgovKioKICogVW5pY29kZSBjb2RlIGZvciBSaWdodC10by1MZWZ0IE92ZXJyaWRlLgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfUkxPID0gODIzODsKCi8qKgogKiBQYXR0ZXJuIHRvIHRlc3QgUlRMIChSaWdoLVRvLUxlZnQpIHN0cmluZ3MgdXNpbmcgcmVndWxhciBleHByZXNzaW9ucy4KICogQHB1YmxpYwogKi8KcHVibGljIHN0YXRpYyAkdW5pX1JFX1BBVFRFUk5fUlRMID0gIi8oCgkgIFx4RDZceEJFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RDdbXHg4MFx4ODNceDg2XHg5MC1ceEFBXHhCMC1ceEI0XSAgICAgICAgICAgICAgICAgIyBSCgl8IFx4REZbXHg4MC1ceEFBXHhCNFx4QjVceEJBXSAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RTJceDgwXHg4RiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RUZceEFDW1x4OURceDlGXHhBMC1ceEE4XHhBQS1ceEI2XHhCOC1ceEJDXHhCRV0gICAgIyBSCgl8IFx4RUZceEFEW1x4ODBceDgxXHg4M1x4ODRceDg2LVx4OEZdICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RjBceDkwXHhBMFtceDgwLVx4ODVceDg4XHg4QS1ceEI1XHhCN1x4QjhceEJDXHhCRl0gIyBSCgl8IFx4RjBceDkwXHhBNFtceDgwLVx4OTldICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RjBceDkwXHhBOFtceDgwXHg5MC1ceDkzXHg5NS1ceDk3XHg5OS1ceEIzXSAgICAgICAgIyBSCgl8IFx4RjBceDkwXHhBOVtceDgwLVx4ODdceDkwLVx4OThdICAgICAgICAgICAgICAgICAgICAgIyBSCgl8IFx4RTJceDgwW1x4QUJceEFFXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBSTEUgJiBSTE8KCSkveCI7CgovKioKICogUGF0dGVybiB0byB0ZXN0IEFyYWJpYyBzdHJpbmdzIHVzaW5nIHJlZ3VsYXIgZXhwcmVzc2lvbnMuIFNvdXJjZTogaHR0cDovL3d3dy53My5vcmcvSW50ZXJuYXRpb25hbC9xdWVzdGlvbnMvcWEtZm9ybXMtdXRmLTgKICogQHB1YmxpYwogKi8KcHVibGljIHN0YXRpYyAkdW5pX1JFX1BBVFRFUk5fQVJBQklDID0gIi8oCgkJICBceEQ4W1x4ODAtXHg4M1x4OEJceDhEXHg5Qlx4OUVceDlGXHhBMS1ceEJBXSAgIyBBTAoJCXwgXHhEOVtceDgwLVx4OEFceEFELVx4QUZceEIxLVx4QkZdICAgICAgICAgICAgICMgQUwKCQl8IFx4REFbXHg4MC1ceEJGXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceERCW1x4ODAtXHg5NVx4OURceEE1XHhBNlx4QUVceEFGXHhCQS1ceEJGXSAgIyBBTAoJCXwgXHhEQ1tceDgwLVx4OERceDkwXHg5Mi1ceEFGXSAgICAgICAgICAgICAgICAgICMgQUwKCQl8IFx4RERbXHg4RC1ceEFEXSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceERFW1x4ODAtXHhBNVx4QjFdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBTAoJCXwgXHhFRlx4QURbXHg5MC1ceEJGXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQUwKCQl8IFx4RUZceEFFW1x4ODAtXHhCMV0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceEVGXHhBRltceDkzLVx4QkZdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBTAoJCXwgXHhFRltceEIwLVx4QjNdW1x4ODAtXHhCRl0gICAgICAgICAgICAgICAgICAgICMgQUwKCQl8IFx4RUZceEI0W1x4ODAtXHhCRF0gICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceEVGXHhCNVtceDkwLVx4QkZdICAgICAgICAgICAgICAgICAgICAgICAgICAgIyBBTAoJCXwgXHhFRlx4QjZbXHg4MC1ceDhGXHg5Mi1ceEJGXSAgICAgICAgICAgICAgICAgICMgQUwKCQl8IFx4RUZceEI3W1x4ODAtXHg4N1x4QjAtXHhCQ10gICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceEVGXHhCOVtceEIwLVx4QjRceEI2LVx4QkZdICAgICAgICAgICAgICAgICAgIyBBTAoJCXwgXHhFRlx4QkFbXHg4MC1ceEJGXSAgICAgICAgICAgICAgICAgICAgICAgICAgICMgQUwKCQl8IFx4RUZceEJCW1x4ODAtXHhCQ10gICAgICAgICAgICAgICAgICAgICAgICAgICAjIEFMCgkJfCBceEQ5W1x4QTAtXHhBOVx4QUJceEFDXSAgICAgICAgICAgICAgICAgICAgICAgIyBBTgoJCSkveCI7CgovKioKICogQXJyYXkgb2YgVW5pY29kZSB0eXBlcy4KICogQHB1YmxpYwogKi8KcHVibGljIHN0YXRpYyAkdW5pX3R5cGUgPSBhcnJheSgKMD0+J0JOJywKMT0+J0JOJywKMj0+J0JOJywKMz0+J0JOJywKND0+J0JOJywKNT0+J0JOJywKNj0+J0JOJywKNz0+J0JOJywKOD0+J0JOJywKOT0+J1MnLAoxMD0+J0InLAoxMT0+J1MnLAoxMj0+J1dTJywKMTM9PidCJywKMTQ9PidCTicsCjE1PT4nQk4nLAoxNj0+J0JOJywKMTc9PidCTicsCjE4PT4nQk4nLAoxOT0+J0JOJywKMjA9PidCTicsCjIxPT4nQk4nLAoyMj0+J0JOJywKMjM9PidCTicsCjI0PT4nQk4nLAoyNT0+J0JOJywKMjY9PidCTicsCjI3PT4nQk4nLAoyOD0+J0InLAoyOT0+J0InLAozMD0+J0InLAozMT0+J1MnLAozMj0+J1dTJywKMzM9PidPTicsCjM0PT4nT04nLAozNT0+J0VUJywKMzY9PidFVCcsCjM3PT4nRVQnLAozOD0+J09OJywKMzk9PidPTicsCjQwPT4nT04nLAo0MT0+J09OJywKNDI9PidPTicsCjQzPT4nRVMnLAo0ND0+J0NTJywKNDU9PidFUycsCjQ2PT4nQ1MnLAo0Nz0+J0NTJywKNDg9PidFTicsCjQ5PT4nRU4nLAo1MD0+J0VOJywKNTE9PidFTicsCjUyPT4nRU4nLAo1Mz0+J0VOJywKNTQ9PidFTicsCjU1PT4nRU4nLAo1Nj0+J0VOJywKNTc9PidFTicsCjU4PT4nQ1MnLAo1OT0+J09OJywKNjA9PidPTicsCjYxPT4nT04nLAo2Mj0+J09OJywKNjM9PidPTicsCjY0PT4nT04nLAo2NT0+J0wnLAo2Nj0+J0wnLAo2Nz0+J0wnLAo2OD0+J0wnLAo2OT0+J0wnLAo3MD0+J0wnLAo3MT0+J0wnLAo3Mj0+J0wnLAo3Mz0+J0wnLAo3ND0+J0wnLAo3NT0+J0wnLAo3Nj0+J0wnLAo3Nz0+J0wnLAo3OD0+J0wnLAo3OT0+J0wnLAo4MD0+J0wnLAo4MT0+J0wnLAo4Mj0+J0wnLAo4Mz0+J0wnLAo4ND0+J0wnLAo4NT0+J0wnLAo4Nj0+J0wnLAo4Nz0+J0wnLAo4OD0+J0wnLAo4OT0+J0wnLAo5MD0+J0wnLAo5MT0+J09OJywKOTI9PidPTicsCjkzPT4nT04nLAo5ND0+J09OJywKOTU9PidPTicsCjk2PT4nT04nLAo5Nz0+J0wnLAo5OD0+J0wnLAo5OT0+J0wnLAoxMDA9PidMJywKMTAxPT4nTCcsCjEwMj0+J0wnLAoxMDM9PidMJywKMTA0PT4nTCcsCjEwNT0+J0wnLAoxMDY9PidMJywKMTA3PT4nTCcsCjEwOD0+J0wnLAoxMDk9PidMJywKMTEwPT4nTCcsCjExMT0+J0wnLAoxMTI9PidMJywKMTEzPT4nTCcsCjExND0+J0wnLAoxMTU9PidMJywKMTE2PT4nTCcsCjExNz0+J0wnLAoxMTg9PidMJywKMTE5PT4nTCcsCjEyMD0+J0wnLAoxMjE9PidMJywKMTIyPT4nTCcsCjEyMz0+J09OJywKMTI0PT4nT04nLAoxMjU9PidPTicsCjEyNj0+J09OJywKMTI3PT4nQk4nLAoxMjg9PidCTicsCjEyOT0+J0JOJywKMTMwPT4nQk4nLAoxMzE9PidCTicsCjEzMj0+J0JOJywKMTMzPT4nQicsCjEzND0+J0JOJywKMTM1PT4nQk4nLAoxMzY9PidCTicsCjEzNz0+J0JOJywKMTM4PT4nQk4nLAoxMzk9PidCTicsCjE0MD0+J0JOJywKMTQxPT4nQk4nLAoxNDI9PidCTicsCjE0Mz0+J0JOJywKMTQ0PT4nQk4nLAoxNDU9PidCTicsCjE0Nj0+J0JOJywKMTQ3PT4nQk4nLAoxNDg9PidCTicsCjE0OT0+J0JOJywKMTUwPT4nQk4nLAoxNTE9PidCTicsCjE1Mj0+J0JOJywKMTUzPT4nQk4nLAoxNTQ9PidCTicsCjE1NT0+J0JOJywKMTU2PT4nQk4nLAoxNTc9PidCTicsCjE1OD0+J0JOJywKMTU5PT4nQk4nLAoxNjA9PidDUycsCjE2MT0+J09OJywKMTYyPT4nRVQnLAoxNjM9PidFVCcsCjE2ND0+J0VUJywKMTY1PT4nRVQnLAoxNjY9PidPTicsCjE2Nz0+J09OJywKMTY4PT4nT04nLAoxNjk9PidPTicsCjE3MD0+J0wnLAoxNzE9PidPTicsCjE3Mj0+J09OJywKMTczPT4nQk4nLAoxNzQ9PidPTicsCjE3NT0+J09OJywKMTc2PT4nRVQnLAoxNzc9PidFVCcsCjE3OD0+J0VOJywKMTc5PT4nRU4nLAoxODA9PidPTicsCjE4MT0+J0wnLAoxODI9PidPTicsCjE4Mz0+J09OJywKMTg0PT4nT04nLAoxODU9PidFTicsCjE4Nj0+J0wnLAoxODc9PidPTicsCjE4OD0+J09OJywKMTg5PT4nT04nLAoxOTA9PidPTicsCjE5MT0+J09OJywKMTkyPT4nTCcsCjE5Mz0+J0wnLAoxOTQ9PidMJywKMTk1PT4nTCcsCjE5Nj0+J0wnLAoxOTc9PidMJywKMTk4PT4nTCcsCjE5OT0+J0wnLAoyMDA9PidMJywKMjAxPT4nTCcsCjIwMj0+J0wnLAoyMDM9PidMJywKMjA0PT4nTCcsCjIwNT0+J0wnLAoyMDY9PidMJywKMjA3PT4nTCcsCjIwOD0+J0wnLAoyMDk9PidMJywKMjEwPT4nTCcsCjIxMT0+J0wnLAoyMTI9PidMJywKMjEzPT4nTCcsCjIxND0+J0wnLAoyMTU9PidPTicsCjIxNj0+J0wnLAoyMTc9PidMJywKMjE4PT4nTCcsCjIxOT0+J0wnLAoyMjA9PidMJywKMjIxPT4nTCcsCjIyMj0+J0wnLAoyMjM9PidMJywKMjI0PT4nTCcsCjIyNT0+J0wnLAoyMjY9PidMJywKMjI3PT4nTCcsCjIyOD0+J0wnLAoyMjk9PidMJywKMjMwPT4nTCcsCjIzMT0+J0wnLAoyMzI9PidMJywKMjMzPT4nTCcsCjIzND0+J0wnLAoyMzU9PidMJywKMjM2PT4nTCcsCjIzNz0+J0wnLAoyMzg9PidMJywKMjM5PT4nTCcsCjI0MD0+J0wnLAoyNDE9PidMJywKMjQyPT4nTCcsCjI0Mz0+J0wnLAoyNDQ9PidMJywKMjQ1PT4nTCcsCjI0Nj0+J0wnLAoyNDc9PidPTicsCjI0OD0+J0wnLAoyNDk9PidMJywKMjUwPT4nTCcsCjI1MT0+J0wnLAoyNTI9PidMJywKMjUzPT4nTCcsCjI1ND0+J0wnLAoyNTU9PidMJywKMjU2PT4nTCcsCjI1Nz0+J0wnLAoyNTg9PidMJywKMjU5PT4nTCcsCjI2MD0+J0wnLAoyNjE9PidMJywKMjYyPT4nTCcsCjI2Mz0+J0wnLAoyNjQ9PidMJywKMjY1PT4nTCcsCjI2Nj0+J0wnLAoyNjc9PidMJywKMjY4PT4nTCcsCjI2OT0+J0wnLAoyNzA9PidMJywKMjcxPT4nTCcsCjI3Mj0+J0wnLAoyNzM9PidMJywKMjc0PT4nTCcsCjI3NT0+J0wnLAoyNzY9PidMJywKMjc3PT4nTCcsCjI3OD0+J0wnLAoyNzk9PidMJywKMjgwPT4nTCcsCjI4MT0+J0wnLAoyODI9PidMJywKMjgzPT4nTCcsCjI4ND0+J0wnLAoyODU9PidMJywKMjg2PT4nTCcsCjI4Nz0+J0wnLAoyODg9PidMJywKMjg5PT4nTCcsCjI5MD0+J0wnLAoyOTE9PidMJywKMjkyPT4nTCcsCjI5Mz0+J0wnLAoyOTQ9PidMJywKMjk1PT4nTCcsCjI5Nj0+J0wnLAoyOTc9PidMJywKMjk4PT4nTCcsCjI5OT0+J0wnLAozMDA9PidMJywKMzAxPT4nTCcsCjMwMj0+J0wnLAozMDM9PidMJywKMzA0PT4nTCcsCjMwNT0+J0wnLAozMDY9PidMJywKMzA3PT4nTCcsCjMwOD0+J0wnLAozMDk9PidMJywKMzEwPT4nTCcsCjMxMT0+J0wnLAozMTI9PidMJywKMzEzPT4nTCcsCjMxND0+J0wnLAozMTU9PidMJywKMzE2PT4nTCcsCjMxNz0+J0wnLAozMTg9PidMJywKMzE5PT4nTCcsCjMyMD0+J0wnLAozMjE9PidMJywKMzIyPT4nTCcsCjMyMz0+J0wnLAozMjQ9PidMJywKMzI1PT4nTCcsCjMyNj0+J0wnLAozMjc9PidMJywKMzI4PT4nTCcsCjMyOT0+J0wnLAozMzA9PidMJywKMzMxPT4nTCcsCjMzMj0+J0wnLAozMzM9PidMJywKMzM0PT4nTCcsCjMzNT0+J0wnLAozMzY9PidMJywKMzM3PT4nTCcsCjMzOD0+J0wnLAozMzk9PidMJywKMzQwPT4nTCcsCjM0MT0+J0wnLAozNDI9PidMJywKMzQzPT4nTCcsCjM0ND0+J0wnLAozNDU9PidMJywKMzQ2PT4nTCcsCjM0Nz0+J0wnLAozNDg9PidMJywKMzQ5PT4nTCcsCjM1MD0+J0wnLAozNTE9PidMJywKMzUyPT4nTCcsCjM1Mz0+J0wnLAozNTQ9PidMJywKMzU1PT4nTCcsCjM1Nj0+J0wnLAozNTc9PidMJywKMzU4PT4nTCcsCjM1OT0+J0wnLAozNjA9PidMJywKMzYxPT4nTCcsCjM2Mj0+J0wnLAozNjM9PidMJywKMzY0PT4nTCcsCjM2NT0+J0wnLAozNjY9PidMJywKMzY3PT4nTCcsCjM2OD0+J0wnLAozNjk9PidMJywKMzcwPT4nTCcsCjM3MT0+J0wnLAozNzI9PidMJywKMzczPT4nTCcsCjM3ND0+J0wnLAozNzU9PidMJywKMzc2PT4nTCcsCjM3Nz0+J0wnLAozNzg9PidMJywKMzc5PT4nTCcsCjM4MD0+J0wnLAozODE9PidMJywKMzgyPT4nTCcsCjM4Mz0+J0wnLAozODQ9PidMJywKMzg1PT4nTCcsCjM4Nj0+J0wnLAozODc9PidMJywKMzg4PT4nTCcsCjM4OT0+J0wnLAozOTA9PidMJywKMzkxPT4nTCcsCjM5Mj0+J0wnLAozOTM9PidMJywKMzk0PT4nTCcsCjM5NT0+J0wnLAozOTY9PidMJywKMzk3PT4nTCcsCjM5OD0+J0wnLAozOTk9PidMJywKNDAwPT4nTCcsCjQwMT0+J0wnLAo0MDI9PidMJywKNDAzPT4nTCcsCjQwND0+J0wnLAo0MDU9PidMJywKNDA2PT4nTCcsCjQwNz0+J0wnLAo0MDg9PidMJywKNDA5PT4nTCcsCjQxMD0+J0wnLAo0MTE9PidMJywKNDEyPT4nTCcsCjQxMz0+J0wnLAo0MTQ9PidMJywKNDE1PT4nTCcsCjQxNj0+J0wnLAo0MTc9PidMJywKNDE4PT4nTCcsCjQxOT0+J0wnLAo0MjA9PidMJywKNDIxPT4nTCcsCjQyMj0+J0wnLAo0MjM9PidMJywKNDI0PT4nTCcsCjQyNT0+J0wnLAo0MjY9PidMJywKNDI3PT4nTCcsCjQyOD0+J0wnLAo0Mjk9PidMJywKNDMwPT4nTCcsCjQzMT0+J0wnLAo0MzI9PidMJywKNDMzPT4nTCcsCjQzND0+J0wnLAo0MzU9PidMJywKNDM2PT4nTCcsCjQzNz0+J0wnLAo0Mzg9PidMJywKNDM5PT4nTCcsCjQ0MD0+J0wnLAo0NDE9PidMJywKNDQyPT4nTCcsCjQ0Mz0+J0wnLAo0NDQ9PidMJywKNDQ1PT4nTCcsCjQ0Nj0+J0wnLAo0NDc9PidMJywKNDQ4PT4nTCcsCjQ0OT0+J0wnLAo0NTA9PidMJywKNDUxPT4nTCcsCjQ1Mj0+J0wnLAo0NTM9PidMJywKNDU0PT4nTCcsCjQ1NT0+J0wnLAo0NTY9PidMJywKNDU3PT4nTCcsCjQ1OD0+J0wnLAo0NTk9PidMJywKNDYwPT4nTCcsCjQ2MT0+J0wnLAo0NjI9PidMJywKNDYzPT4nTCcsCjQ2ND0+J0wnLAo0NjU9PidMJywKNDY2PT4nTCcsCjQ2Nz0+J0wnLAo0Njg9PidMJywKNDY5PT4nTCcsCjQ3MD0+J0wnLAo0NzE9PidMJywKNDcyPT4nTCcsCjQ3Mz0+J0wnLAo0NzQ9PidMJywKNDc1PT4nTCcsCjQ3Nj0+J0wnLAo0Nzc9PidMJywKNDc4PT4nTCcsCjQ3OT0+J0wnLAo0ODA9PidMJywKNDgxPT4nTCcsCjQ4Mj0+J0wnLAo0ODM9PidMJywKNDg0PT4nTCcsCjQ4NT0+J0wnLAo0ODY9PidMJywKNDg3PT4nTCcsCjQ4OD0+J0wnLAo0ODk9PidMJywKNDkwPT4nTCcsCjQ5MT0+J0wnLAo0OTI9PidMJywKNDkzPT4nTCcsCjQ5ND0+J0wnLAo0OTU9PidMJywKNDk2PT4nTCcsCjQ5Nz0+J0wnLAo0OTg9PidMJywKNDk5PT4nTCcsCjUwMD0+J0wnLAo1MDE9PidMJywKNTAyPT4nTCcsCjUwMz0+J0wnLAo1MDQ9PidMJywKNTA1PT4nTCcsCjUwNj0+J0wnLAo1MDc9PidMJywKNTA4PT4nTCcsCjUwOT0+J0wnLAo1MTA9PidMJywKNTExPT4nTCcsCjUxMj0+J0wnLAo1MTM9PidMJywKNTE0PT4nTCcsCjUxNT0+J0wnLAo1MTY9PidMJywKNTE3PT4nTCcsCjUxOD0+J0wnLAo1MTk9PidMJywKNTIwPT4nTCcsCjUyMT0+J0wnLAo1MjI9PidMJywKNTIzPT4nTCcsCjUyND0+J0wnLAo1MjU9PidMJywKNTI2PT4nTCcsCjUyNz0+J0wnLAo1Mjg9PidMJywKNTI5PT4nTCcsCjUzMD0+J0wnLAo1MzE9PidMJywKNTMyPT4nTCcsCjUzMz0+J0wnLAo1MzQ9PidMJywKNTM1PT4nTCcsCjUzNj0+J0wnLAo1Mzc9PidMJywKNTM4PT4nTCcsCjUzOT0+J0wnLAo1NDA9PidMJywKNTQxPT4nTCcsCjU0Mj0+J0wnLAo1NDM9PidMJywKNTQ0PT4nTCcsCjU0NT0+J0wnLAo1NDY9PidMJywKNTQ3PT4nTCcsCjU0OD0+J0wnLAo1NDk9PidMJywKNTUwPT4nTCcsCjU1MT0+J0wnLAo1NTI9PidMJywKNTUzPT4nTCcsCjU1ND0+J0wnLAo1NTU9PidMJywKNTU2PT4nTCcsCjU1Nz0+J0wnLAo1NTg9PidMJywKNTU5PT4nTCcsCjU2MD0+J0wnLAo1NjE9PidMJywKNTYyPT4nTCcsCjU2Mz0+J0wnLAo1NjQ9PidMJywKNTY1PT4nTCcsCjU2Nj0+J0wnLAo1Njc9PidMJywKNTY4PT4nTCcsCjU2OT0+J0wnLAo1NzA9PidMJywKNTcxPT4nTCcsCjU3Mj0+J0wnLAo1NzM9PidMJywKNTc0PT4nTCcsCjU3NT0+J0wnLAo1NzY9PidMJywKNTc3PT4nTCcsCjU3OD0+J0wnLAo1Nzk9PidMJywKNTgwPT4nTCcsCjU4MT0+J0wnLAo1ODI9PidMJywKNTgzPT4nTCcsCjU4ND0+J0wnLAo1ODU9PidMJywKNTg2PT4nTCcsCjU4Nz0+J0wnLAo1ODg9PidMJywKNTg5PT4nTCcsCjU5MD0+J0wnLAo1OTE9PidMJywKNTkyPT4nTCcsCjU5Mz0+J0wnLAo1OTQ9PidMJywKNTk1PT4nTCcsCjU5Nj0+J0wnLAo1OTc9PidMJywKNTk4PT4nTCcsCjU5OT0+J0wnLAo2MDA9PidMJywKNjAxPT4nTCcsCjYwMj0+J0wnLAo2MDM9PidMJywKNjA0PT4nTCcsCjYwNT0+J0wnLAo2MDY9PidMJywKNjA3PT4nTCcsCjYwOD0+J0wnLAo2MDk9PidMJywKNjEwPT4nTCcsCjYxMT0+J0wnLAo2MTI9PidMJywKNjEzPT4nTCcsCjYxND0+J0wnLAo2MTU9PidMJywKNjE2PT4nTCcsCjYxNz0+J0wnLAo2MTg9PidMJywKNjE5PT4nTCcsCjYyMD0+J0wnLAo2MjE9PidMJywKNjIyPT4nTCcsCjYyMz0+J0wnLAo2MjQ9PidMJywKNjI1PT4nTCcsCjYyNj0+J0wnLAo2Mjc9PidMJywKNjI4PT4nTCcsCjYyOT0+J0wnLAo2MzA9PidMJywKNjMxPT4nTCcsCjYzMj0+J0wnLAo2MzM9PidMJywKNjM0PT4nTCcsCjYzNT0+J0wnLAo2MzY9PidMJywKNjM3PT4nTCcsCjYzOD0+J0wnLAo2Mzk9PidMJywKNjQwPT4nTCcsCjY0MT0+J0wnLAo2NDI9PidMJywKNjQzPT4nTCcsCjY0ND0+J0wnLAo2NDU9PidMJywKNjQ2PT4nTCcsCjY0Nz0+J0wnLAo2NDg9PidMJywKNjQ5PT4nTCcsCjY1MD0+J0wnLAo2NTE9PidMJywKNjUyPT4nTCcsCjY1Mz0+J0wnLAo2NTQ9PidMJywKNjU1PT4nTCcsCjY1Nj0+J0wnLAo2NTc9PidMJywKNjU4PT4nTCcsCjY1OT0+J0wnLAo2NjA9PidMJywKNjYxPT4nTCcsCjY2Mj0+J0wnLAo2NjM9PidMJywKNjY0PT4nTCcsCjY2NT0+J0wnLAo2NjY9PidMJywKNjY3PT4nTCcsCjY2OD0+J0wnLAo2Njk9PidMJywKNjcwPT4nTCcsCjY3MT0+J0wnLAo2NzI9PidMJywKNjczPT4nTCcsCjY3ND0+J0wnLAo2NzU9PidMJywKNjc2PT4nTCcsCjY3Nz0+J0wnLAo2Nzg9PidMJywKNjc5PT4nTCcsCjY4MD0+J0wnLAo2ODE9PidMJywKNjgyPT4nTCcsCjY4Mz0+J0wnLAo2ODQ9PidMJywKNjg1PT4nTCcsCjY4Nj0+J0wnLAo2ODc9PidMJywKNjg4PT4nTCcsCjY4OT0+J0wnLAo2OTA9PidMJywKNjkxPT4nTCcsCjY5Mj0+J0wnLAo2OTM9PidMJywKNjk0PT4nTCcsCjY5NT0+J0wnLAo2OTY9PidMJywKNjk3PT4nT04nLAo2OTg9PidPTicsCjY5OT0+J0wnLAo3MDA9PidMJywKNzAxPT4nTCcsCjcwMj0+J0wnLAo3MDM9PidMJywKNzA0PT4nTCcsCjcwNT0+J0wnLAo3MDY9PidPTicsCjcwNz0+J09OJywKNzA4PT4nT04nLAo3MDk9PidPTicsCjcxMD0+J09OJywKNzExPT4nT04nLAo3MTI9PidPTicsCjcxMz0+J09OJywKNzE0PT4nT04nLAo3MTU9PidPTicsCjcxNj0+J09OJywKNzE3PT4nT04nLAo3MTg9PidPTicsCjcxOT0+J09OJywKNzIwPT4nTCcsCjcyMT0+J0wnLAo3MjI9PidPTicsCjcyMz0+J09OJywKNzI0PT4nT04nLAo3MjU9PidPTicsCjcyNj0+J09OJywKNzI3PT4nT04nLAo3Mjg9PidPTicsCjcyOT0+J09OJywKNzMwPT4nT04nLAo3MzE9PidPTicsCjczMj0+J09OJywKNzMzPT4nT04nLAo3MzQ9PidPTicsCjczNT0+J09OJywKNzM2PT4nTCcsCjczNz0+J0wnLAo3Mzg9PidMJywKNzM5PT4nTCcsCjc0MD0+J0wnLAo3NDE9PidPTicsCjc0Mj0+J09OJywKNzQzPT4nT04nLAo3NDQ9PidPTicsCjc0NT0+J09OJywKNzQ2PT4nT04nLAo3NDc9PidPTicsCjc0OD0+J09OJywKNzQ5PT4nT04nLAo3NTA9PidMJywKNzUxPT4nT04nLAo3NTI9PidPTicsCjc1Mz0+J09OJywKNzU0PT4nT04nLAo3NTU9PidPTicsCjc1Nj0+J09OJywKNzU3PT4nT04nLAo3NTg9PidPTicsCjc1OT0+J09OJywKNzYwPT4nT04nLAo3NjE9PidPTicsCjc2Mj0+J09OJywKNzYzPT4nT04nLAo3NjQ9PidPTicsCjc2NT0+J09OJywKNzY2PT4nT04nLAo3Njc9PidPTicsCjc2OD0+J05TTScsCjc2OT0+J05TTScsCjc3MD0+J05TTScsCjc3MT0+J05TTScsCjc3Mj0+J05TTScsCjc3Mz0+J05TTScsCjc3ND0+J05TTScsCjc3NT0+J05TTScsCjc3Nj0+J05TTScsCjc3Nz0+J05TTScsCjc3OD0+J05TTScsCjc3OT0+J05TTScsCjc4MD0+J05TTScsCjc4MT0+J05TTScsCjc4Mj0+J05TTScsCjc4Mz0+J05TTScsCjc4ND0+J05TTScsCjc4NT0+J05TTScsCjc4Nj0+J05TTScsCjc4Nz0+J05TTScsCjc4OD0+J05TTScsCjc4OT0+J05TTScsCjc5MD0+J05TTScsCjc5MT0+J05TTScsCjc5Mj0+J05TTScsCjc5Mz0+J05TTScsCjc5ND0+J05TTScsCjc5NT0+J05TTScsCjc5Nj0+J05TTScsCjc5Nz0+J05TTScsCjc5OD0+J05TTScsCjc5OT0+J05TTScsCjgwMD0+J05TTScsCjgwMT0+J05TTScsCjgwMj0+J05TTScsCjgwMz0+J05TTScsCjgwND0+J05TTScsCjgwNT0+J05TTScsCjgwNj0+J05TTScsCjgwNz0+J05TTScsCjgwOD0+J05TTScsCjgwOT0+J05TTScsCjgxMD0+J05TTScsCjgxMT0+J05TTScsCjgxMj0+J05TTScsCjgxMz0+J05TTScsCjgxND0+J05TTScsCjgxNT0+J05TTScsCjgxNj0+J05TTScsCjgxNz0+J05TTScsCjgxOD0+J05TTScsCjgxOT0+J05TTScsCjgyMD0+J05TTScsCjgyMT0+J05TTScsCjgyMj0+J05TTScsCjgyMz0+J05TTScsCjgyND0+J05TTScsCjgyNT0+J05TTScsCjgyNj0+J05TTScsCjgyNz0+J05TTScsCjgyOD0+J05TTScsCjgyOT0+J05TTScsCjgzMD0+J05TTScsCjgzMT0+J05TTScsCjgzMj0+J05TTScsCjgzMz0+J05TTScsCjgzND0+J05TTScsCjgzNT0+J05TTScsCjgzNj0+J05TTScsCjgzNz0+J05TTScsCjgzOD0+J05TTScsCjgzOT0+J05TTScsCjg0MD0+J05TTScsCjg0MT0+J05TTScsCjg0Mj0+J05TTScsCjg0Mz0+J05TTScsCjg0ND0+J05TTScsCjg0NT0+J05TTScsCjg0Nj0+J05TTScsCjg0Nz0+J05TTScsCjg0OD0+J05TTScsCjg0OT0+J05TTScsCjg1MD0+J05TTScsCjg1MT0+J05TTScsCjg1Mj0+J05TTScsCjg1Mz0+J05TTScsCjg1ND0+J05TTScsCjg1NT0+J05TTScsCjg1Nj0+J05TTScsCjg1Nz0+J05TTScsCjg1OD0+J05TTScsCjg1OT0+J05TTScsCjg2MD0+J05TTScsCjg2MT0+J05TTScsCjg2Mj0+J05TTScsCjg2Mz0+J05TTScsCjg2ND0+J05TTScsCjg2NT0+J05TTScsCjg2Nj0+J05TTScsCjg2Nz0+J05TTScsCjg2OD0+J05TTScsCjg2OT0+J05TTScsCjg3MD0+J05TTScsCjg3MT0+J05TTScsCjg3Mj0+J05TTScsCjg3Mz0+J05TTScsCjg3ND0+J05TTScsCjg3NT0+J05TTScsCjg3Nj0+J05TTScsCjg3Nz0+J05TTScsCjg3OD0+J05TTScsCjg3OT0+J05TTScsCjg4ND0+J09OJywKODg1PT4nT04nLAo4OTA9PidMJywKODkxPT4nTCcsCjg5Mj0+J0wnLAo4OTM9PidMJywKODk0PT4nT04nLAo5MDA9PidPTicsCjkwMT0+J09OJywKOTAyPT4nTCcsCjkwMz0+J09OJywKOTA0PT4nTCcsCjkwNT0+J0wnLAo5MDY9PidMJywKOTA4PT4nTCcsCjkxMD0+J0wnLAo5MTE9PidMJywKOTEyPT4nTCcsCjkxMz0+J0wnLAo5MTQ9PidMJywKOTE1PT4nTCcsCjkxNj0+J0wnLAo5MTc9PidMJywKOTE4PT4nTCcsCjkxOT0+J0wnLAo5MjA9PidMJywKOTIxPT4nTCcsCjkyMj0+J0wnLAo5MjM9PidMJywKOTI0PT4nTCcsCjkyNT0+J0wnLAo5MjY9PidMJywKOTI3PT4nTCcsCjkyOD0+J0wnLAo5Mjk9PidMJywKOTMxPT4nTCcsCjkzMj0+J0wnLAo5MzM9PidMJywKOTM0PT4nTCcsCjkzNT0+J0wnLAo5MzY9PidMJywKOTM3PT4nTCcsCjkzOD0+J0wnLAo5Mzk9PidMJywKOTQwPT4nTCcsCjk0MT0+J0wnLAo5NDI9PidMJywKOTQzPT4nTCcsCjk0ND0+J0wnLAo5NDU9PidMJywKOTQ2PT4nTCcsCjk0Nz0+J0wnLAo5NDg9PidMJywKOTQ5PT4nTCcsCjk1MD0+J0wnLAo5NTE9PidMJywKOTUyPT4nTCcsCjk1Mz0+J0wnLAo5NTQ9PidMJywKOTU1PT4nTCcsCjk1Nj0+J0wnLAo5NTc9PidMJywKOTU4PT4nTCcsCjk1OT0+J0wnLAo5NjA9PidMJywKOTYxPT4nTCcsCjk2Mj0+J0wnLAo5NjM9PidMJywKOTY0PT4nTCcsCjk2NT0+J0wnLAo5NjY9PidMJywKOTY3PT4nTCcsCjk2OD0+J0wnLAo5Njk9PidMJywKOTcwPT4nTCcsCjk3MT0+J0wnLAo5NzI9PidMJywKOTczPT4nTCcsCjk3ND0+J0wnLAo5NzY9PidMJywKOTc3PT4nTCcsCjk3OD0+J0wnLAo5Nzk9PidMJywKOTgwPT4nTCcsCjk4MT0+J0wnLAo5ODI9PidMJywKOTgzPT4nTCcsCjk4ND0+J0wnLAo5ODU9PidMJywKOTg2PT4nTCcsCjk4Nz0+J0wnLAo5ODg9PidMJywKOTg5PT4nTCcsCjk5MD0+J0wnLAo5OTE9PidMJywKOTkyPT4nTCcsCjk5Mz0+J0wnLAo5OTQ9PidMJywKOTk1PT4nTCcsCjk5Nj0+J0wnLAo5OTc9PidMJywKOTk4PT4nTCcsCjk5OT0+J0wnLAoxMDAwPT4nTCcsCjEwMDE9PidMJywKMTAwMj0+J0wnLAoxMDAzPT4nTCcsCjEwMDQ9PidMJywKMTAwNT0+J0wnLAoxMDA2PT4nTCcsCjEwMDc9PidMJywKMTAwOD0+J0wnLAoxMDA5PT4nTCcsCjEwMTA9PidMJywKMTAxMT0+J0wnLAoxMDEyPT4nTCcsCjEwMTM9PidMJywKMTAxND0+J09OJywKMTAxNT0+J0wnLAoxMDE2PT4nTCcsCjEwMTc9PidMJywKMTAxOD0+J0wnLAoxMDE5PT4nTCcsCjEwMjA9PidMJywKMTAyMT0+J0wnLAoxMDIyPT4nTCcsCjEwMjM9PidMJywKMTAyND0+J0wnLAoxMDI1PT4nTCcsCjEwMjY9PidMJywKMTAyNz0+J0wnLAoxMDI4PT4nTCcsCjEwMjk9PidMJywKMTAzMD0+J0wnLAoxMDMxPT4nTCcsCjEwMzI9PidMJywKMTAzMz0+J0wnLAoxMDM0PT4nTCcsCjEwMzU9PidMJywKMTAzNj0+J0wnLAoxMDM3PT4nTCcsCjEwMzg9PidMJywKMTAzOT0+J0wnLAoxMDQwPT4nTCcsCjEwNDE9PidMJywKMTA0Mj0+J0wnLAoxMDQzPT4nTCcsCjEwNDQ9PidMJywKMTA0NT0+J0wnLAoxMDQ2PT4nTCcsCjEwNDc9PidMJywKMTA0OD0+J0wnLAoxMDQ5PT4nTCcsCjEwNTA9PidMJywKMTA1MT0+J0wnLAoxMDUyPT4nTCcsCjEwNTM9PidMJywKMTA1ND0+J0wnLAoxMDU1PT4nTCcsCjEwNTY9PidMJywKMTA1Nz0+J0wnLAoxMDU4PT4nTCcsCjEwNTk9PidMJywKMTA2MD0+J0wnLAoxMDYxPT4nTCcsCjEwNjI9PidMJywKMTA2Mz0+J0wnLAoxMDY0PT4nTCcsCjEwNjU9PidMJywKMTA2Nj0+J0wnLAoxMDY3PT4nTCcsCjEwNjg9PidMJywKMTA2OT0+J0wnLAoxMDcwPT4nTCcsCjEwNzE9PidMJywKMTA3Mj0+J0wnLAoxMDczPT4nTCcsCjEwNzQ9PidMJywKMTA3NT0+J0wnLAoxMDc2PT4nTCcsCjEwNzc9PidMJywKMTA3OD0+J0wnLAoxMDc5PT4nTCcsCjEwODA9PidMJywKMTA4MT0+J0wnLAoxMDgyPT4nTCcsCjEwODM9PidMJywKMTA4ND0+J0wnLAoxMDg1PT4nTCcsCjEwODY9PidMJywKMTA4Nz0+J0wnLAoxMDg4PT4nTCcsCjEwODk9PidMJywKMTA5MD0+J0wnLAoxMDkxPT4nTCcsCjEwOTI9PidMJywKMTA5Mz0+J0wnLAoxMDk0PT4nTCcsCjEwOTU9PidMJywKMTA5Nj0+J0wnLAoxMDk3PT4nTCcsCjEwOTg9PidMJywKMTA5OT0+J0wnLAoxMTAwPT4nTCcsCjExMDE9PidMJywKMTEwMj0+J0wnLAoxMTAzPT4nTCcsCjExMDQ9PidMJywKMTEwNT0+J0wnLAoxMTA2PT4nTCcsCjExMDc9PidMJywKMTEwOD0+J0wnLAoxMTA5PT4nTCcsCjExMTA9PidMJywKMTExMT0+J0wnLAoxMTEyPT4nTCcsCjExMTM9PidMJywKMTExND0+J0wnLAoxMTE1PT4nTCcsCjExMTY9PidMJywKMTExNz0+J0wnLAoxMTE4PT4nTCcsCjExMTk9PidMJywKMTEyMD0+J0wnLAoxMTIxPT4nTCcsCjExMjI9PidMJywKMTEyMz0+J0wnLAoxMTI0PT4nTCcsCjExMjU9PidMJywKMTEyNj0+J0wnLAoxMTI3PT4nTCcsCjExMjg9PidMJywKMTEyOT0+J0wnLAoxMTMwPT4nTCcsCjExMzE9PidMJywKMTEzMj0+J0wnLAoxMTMzPT4nTCcsCjExMzQ9PidMJywKMTEzNT0+J0wnLAoxMTM2PT4nTCcsCjExMzc9PidMJywKMTEzOD0+J0wnLAoxMTM5PT4nTCcsCjExNDA9PidMJywKMTE0MT0+J0wnLAoxMTQyPT4nTCcsCjExNDM9PidMJywKMTE0ND0+J0wnLAoxMTQ1PT4nTCcsCjExNDY9PidMJywKMTE0Nz0+J0wnLAoxMTQ4PT4nTCcsCjExNDk9PidMJywKMTE1MD0+J0wnLAoxMTUxPT4nTCcsCjExNTI9PidMJywKMTE1Mz0+J0wnLAoxMTU0PT4nTCcsCjExNTU9PidOU00nLAoxMTU2PT4nTlNNJywKMTE1Nz0+J05TTScsCjExNTg9PidOU00nLAoxMTYwPT4nTlNNJywKMTE2MT0+J05TTScsCjExNjI9PidMJywKMTE2Mz0+J0wnLAoxMTY0PT4nTCcsCjExNjU9PidMJywKMTE2Nj0+J0wnLAoxMTY3PT4nTCcsCjExNjg9PidMJywKMTE2OT0+J0wnLAoxMTcwPT4nTCcsCjExNzE9PidMJywKMTE3Mj0+J0wnLAoxMTczPT4nTCcsCjExNzQ9PidMJywKMTE3NT0+J0wnLAoxMTc2PT4nTCcsCjExNzc9PidMJywKMTE3OD0+J0wnLAoxMTc5PT4nTCcsCjExODA9PidMJywKMTE4MT0+J0wnLAoxMTgyPT4nTCcsCjExODM9PidMJywKMTE4ND0+J0wnLAoxMTg1PT4nTCcsCjExODY9PidMJywKMTE4Nz0+J0wnLAoxMTg4PT4nTCcsCjExODk9PidMJywKMTE5MD0+J0wnLAoxMTkxPT4nTCcsCjExOTI9PidMJywKMTE5Mz0+J0wnLAoxMTk0PT4nTCcsCjExOTU9PidMJywKMTE5Nj0+J0wnLAoxMTk3PT4nTCcsCjExOTg9PidMJywKMTE5OT0+J0wnLAoxMjAwPT4nTCcsCjEyMDE9PidMJywKMTIwMj0+J0wnLAoxMjAzPT4nTCcsCjEyMDQ9PidMJywKMTIwNT0+J0wnLAoxMjA2PT4nTCcsCjEyMDc9PidMJywKMTIwOD0+J0wnLAoxMjA5PT4nTCcsCjEyMTA9PidMJywKMTIxMT0+J0wnLAoxMjEyPT4nTCcsCjEyMTM9PidMJywKMTIxND0+J0wnLAoxMjE1PT4nTCcsCjEyMTY9PidMJywKMTIxNz0+J0wnLAoxMjE4PT4nTCcsCjEyMTk9PidMJywKMTIyMD0+J0wnLAoxMjIxPT4nTCcsCjEyMjI9PidMJywKMTIyMz0+J0wnLAoxMjI0PT4nTCcsCjEyMjU9PidMJywKMTIyNj0+J0wnLAoxMjI3PT4nTCcsCjEyMjg9PidMJywKMTIyOT0+J0wnLAoxMjMwPT4nTCcsCjEyMzE9PidMJywKMTIzMj0+J0wnLAoxMjMzPT4nTCcsCjEyMzQ9PidMJywKMTIzNT0+J0wnLAoxMjM2PT4nTCcsCjEyMzc9PidMJywKMTIzOD0+J0wnLAoxMjM5PT4nTCcsCjEyNDA9PidMJywKMTI0MT0+J0wnLAoxMjQyPT4nTCcsCjEyNDM9PidMJywKMTI0ND0+J0wnLAoxMjQ1PT4nTCcsCjEyNDY9PidMJywKMTI0Nz0+J0wnLAoxMjQ4PT4nTCcsCjEyNDk9PidMJywKMTI1MD0+J0wnLAoxMjUxPT4nTCcsCjEyNTI9PidMJywKMTI1Mz0+J0wnLAoxMjU0PT4nTCcsCjEyNTU9PidMJywKMTI1Nj0+J0wnLAoxMjU3PT4nTCcsCjEyNTg9PidMJywKMTI1OT0+J0wnLAoxMjYwPT4nTCcsCjEyNjE9PidMJywKMTI2Mj0+J0wnLAoxMjYzPT4nTCcsCjEyNjQ9PidMJywKMTI2NT0+J0wnLAoxMjY2PT4nTCcsCjEyNjc9PidMJywKMTI2OD0+J0wnLAoxMjY5PT4nTCcsCjEyNzA9PidMJywKMTI3MT0+J0wnLAoxMjcyPT4nTCcsCjEyNzM9PidMJywKMTI3ND0+J0wnLAoxMjc1PT4nTCcsCjEyNzY9PidMJywKMTI3Nz0+J0wnLAoxMjc4PT4nTCcsCjEyNzk9PidMJywKMTI4MD0+J0wnLAoxMjgxPT4nTCcsCjEyODI9PidMJywKMTI4Mz0+J0wnLAoxMjg0PT4nTCcsCjEyODU9PidMJywKMTI4Nj0+J0wnLAoxMjg3PT4nTCcsCjEyODg9PidMJywKMTI4OT0+J0wnLAoxMjkwPT4nTCcsCjEyOTE9PidMJywKMTI5Mj0+J0wnLAoxMjkzPT4nTCcsCjEyOTQ9PidMJywKMTI5NT0+J0wnLAoxMjk2PT4nTCcsCjEyOTc9PidMJywKMTI5OD0+J0wnLAoxMjk5PT4nTCcsCjEzMjk9PidMJywKMTMzMD0+J0wnLAoxMzMxPT4nTCcsCjEzMzI9PidMJywKMTMzMz0+J0wnLAoxMzM0PT4nTCcsCjEzMzU9PidMJywKMTMzNj0+J0wnLAoxMzM3PT4nTCcsCjEzMzg9PidMJywKMTMzOT0+J0wnLAoxMzQwPT4nTCcsCjEzNDE9PidMJywKMTM0Mj0+J0wnLAoxMzQzPT4nTCcsCjEzNDQ9PidMJywKMTM0NT0+J0wnLAoxMzQ2PT4nTCcsCjEzNDc9PidMJywKMTM0OD0+J0wnLAoxMzQ5PT4nTCcsCjEzNTA9PidMJywKMTM1MT0+J0wnLAoxMzUyPT4nTCcsCjEzNTM9PidMJywKMTM1ND0+J0wnLAoxMzU1PT4nTCcsCjEzNTY9PidMJywKMTM1Nz0+J0wnLAoxMzU4PT4nTCcsCjEzNTk9PidMJywKMTM2MD0+J0wnLAoxMzYxPT4nTCcsCjEzNjI9PidMJywKMTM2Mz0+J0wnLAoxMzY0PT4nTCcsCjEzNjU9PidMJywKMTM2Nj0+J0wnLAoxMzY5PT4nTCcsCjEzNzA9PidMJywKMTM3MT0+J0wnLAoxMzcyPT4nTCcsCjEzNzM9PidMJywKMTM3ND0+J0wnLAoxMzc1PT4nTCcsCjEzNzc9PidMJywKMTM3OD0+J0wnLAoxMzc5PT4nTCcsCjEzODA9PidMJywKMTM4MT0+J0wnLAoxMzgyPT4nTCcsCjEzODM9PidMJywKMTM4ND0+J0wnLAoxMzg1PT4nTCcsCjEzODY9PidMJywKMTM4Nz0+J0wnLAoxMzg4PT4nTCcsCjEzODk9PidMJywKMTM5MD0+J0wnLAoxMzkxPT4nTCcsCjEzOTI9PidMJywKMTM5Mz0+J0wnLAoxMzk0PT4nTCcsCjEzOTU9PidMJywKMTM5Nj0+J0wnLAoxMzk3PT4nTCcsCjEzOTg9PidMJywKMTM5OT0+J0wnLAoxNDAwPT4nTCcsCjE0MDE9PidMJywKMTQwMj0+J0wnLAoxNDAzPT4nTCcsCjE0MDQ9PidMJywKMTQwNT0+J0wnLAoxNDA2PT4nTCcsCjE0MDc9PidMJywKMTQwOD0+J0wnLAoxNDA5PT4nTCcsCjE0MTA9PidMJywKMTQxMT0+J0wnLAoxNDEyPT4nTCcsCjE0MTM9PidMJywKMTQxND0+J0wnLAoxNDE1PT4nTCcsCjE0MTc9PidMJywKMTQxOD0+J09OJywKMTQyNT0+J05TTScsCjE0MjY9PidOU00nLAoxNDI3PT4nTlNNJywKMTQyOD0+J05TTScsCjE0Mjk9PidOU00nLAoxNDMwPT4nTlNNJywKMTQzMT0+J05TTScsCjE0MzI9PidOU00nLAoxNDMzPT4nTlNNJywKMTQzND0+J05TTScsCjE0MzU9PidOU00nLAoxNDM2PT4nTlNNJywKMTQzNz0+J05TTScsCjE0Mzg9PidOU00nLAoxNDM5PT4nTlNNJywKMTQ0MD0+J05TTScsCjE0NDE9PidOU00nLAoxNDQyPT4nTlNNJywKMTQ0Mz0+J05TTScsCjE0NDQ9PidOU00nLAoxNDQ1PT4nTlNNJywKMTQ0Nj0+J05TTScsCjE0NDc9PidOU00nLAoxNDQ4PT4nTlNNJywKMTQ0OT0+J05TTScsCjE0NTA9PidOU00nLAoxNDUxPT4nTlNNJywKMTQ1Mj0+J05TTScsCjE0NTM9PidOU00nLAoxNDU0PT4nTlNNJywKMTQ1NT0+J05TTScsCjE0NTY9PidOU00nLAoxNDU3PT4nTlNNJywKMTQ1OD0+J05TTScsCjE0NTk9PidOU00nLAoxNDYwPT4nTlNNJywKMTQ2MT0+J05TTScsCjE0NjI9PidOU00nLAoxNDYzPT4nTlNNJywKMTQ2ND0+J05TTScsCjE0NjU9PidOU00nLAoxNDY2PT4nTlNNJywKMTQ2Nz0+J05TTScsCjE0Njg9PidOU00nLAoxNDY5PT4nTlNNJywKMTQ3MD0+J1InLAoxNDcxPT4nTlNNJywKMTQ3Mj0+J1InLAoxNDczPT4nTlNNJywKMTQ3ND0+J05TTScsCjE0NzU9PidSJywKMTQ3Nj0+J05TTScsCjE0Nzc9PidOU00nLAoxNDc4PT4nUicsCjE0Nzk9PidOU00nLAoxNDg4PT4nUicsCjE0ODk9PidSJywKMTQ5MD0+J1InLAoxNDkxPT4nUicsCjE0OTI9PidSJywKMTQ5Mz0+J1InLAoxNDk0PT4nUicsCjE0OTU9PidSJywKMTQ5Nj0+J1InLAoxNDk3PT4nUicsCjE0OTg9PidSJywKMTQ5OT0+J1InLAoxNTAwPT4nUicsCjE1MDE9PidSJywKMTUwMj0+J1InLAoxNTAzPT4nUicsCjE1MDQ9PidSJywKMTUwNT0+J1InLAoxNTA2PT4nUicsCjE1MDc9PidSJywKMTUwOD0+J1InLAoxNTA5PT4nUicsCjE1MTA9PidSJywKMTUxMT0+J1InLAoxNTEyPT4nUicsCjE1MTM9PidSJywKMTUxND0+J1InLAoxNTIwPT4nUicsCjE1MjE9PidSJywKMTUyMj0+J1InLAoxNTIzPT4nUicsCjE1MjQ9PidSJywKMTUzNj0+J0FMJywKMTUzNz0+J0FMJywKMTUzOD0+J0FMJywKMTUzOT0+J0FMJywKMTU0Nz0+J0FMJywKMTU0OD0+J0NTJywKMTU0OT0+J0FMJywKMTU1MD0+J09OJywKMTU1MT0+J09OJywKMTU1Mj0+J05TTScsCjE1NTM9PidOU00nLAoxNTU0PT4nTlNNJywKMTU1NT0+J05TTScsCjE1NTY9PidOU00nLAoxNTU3PT4nTlNNJywKMTU2Mz0+J0FMJywKMTU2Nj0+J0FMJywKMTU2Nz0+J0FMJywKMTU2OT0+J0FMJywKMTU3MD0+J0FMJywKMTU3MT0+J0FMJywKMTU3Mj0+J0FMJywKMTU3Mz0+J0FMJywKMTU3ND0+J0FMJywKMTU3NT0+J0FMJywKMTU3Nj0+J0FMJywKMTU3Nz0+J0FMJywKMTU3OD0+J0FMJywKMTU3OT0+J0FMJywKMTU4MD0+J0FMJywKMTU4MT0+J0FMJywKMTU4Mj0+J0FMJywKMTU4Mz0+J0FMJywKMTU4ND0+J0FMJywKMTU4NT0+J0FMJywKMTU4Nj0+J0FMJywKMTU4Nz0+J0FMJywKMTU4OD0+J0FMJywKMTU4OT0+J0FMJywKMTU5MD0+J0FMJywKMTU5MT0+J0FMJywKMTU5Mj0+J0FMJywKMTU5Mz0+J0FMJywKMTU5ND0+J0FMJywKMTYwMD0+J0FMJywKMTYwMT0+J0FMJywKMTYwMj0+J0FMJywKMTYwMz0+J0FMJywKMTYwND0+J0FMJywKMTYwNT0+J0FMJywKMTYwNj0+J0FMJywKMTYwNz0+J0FMJywKMTYwOD0+J0FMJywKMTYwOT0+J0FMJywKMTYxMD0+J0FMJywKMTYxMT0+J05TTScsCjE2MTI9PidOU00nLAoxNjEzPT4nTlNNJywKMTYxND0+J05TTScsCjE2MTU9PidOU00nLAoxNjE2PT4nTlNNJywKMTYxNz0+J05TTScsCjE2MTg9PidOU00nLAoxNjE5PT4nTlNNJywKMTYyMD0+J05TTScsCjE2MjE9PidOU00nLAoxNjIyPT4nTlNNJywKMTYyMz0+J05TTScsCjE2MjQ9PidOU00nLAoxNjI1PT4nTlNNJywKMTYyNj0+J05TTScsCjE2Mjc9PidOU00nLAoxNjI4PT4nTlNNJywKMTYyOT0+J05TTScsCjE2MzA9PidOU00nLAoxNjMyPT4nQU4nLAoxNjMzPT4nQU4nLAoxNjM0PT4nQU4nLAoxNjM1PT4nQU4nLAoxNjM2PT4nQU4nLAoxNjM3PT4nQU4nLAoxNjM4PT4nQU4nLAoxNjM5PT4nQU4nLAoxNjQwPT4nQU4nLAoxNjQxPT4nQU4nLAoxNjQyPT4nRVQnLAoxNjQzPT4nQU4nLAoxNjQ0PT4nQU4nLAoxNjQ1PT4nQUwnLAoxNjQ2PT4nQUwnLAoxNjQ3PT4nQUwnLAoxNjQ4PT4nTlNNJywKMTY0OT0+J0FMJywKMTY1MD0+J0FMJywKMTY1MT0+J0FMJywKMTY1Mj0+J0FMJywKMTY1Mz0+J0FMJywKMTY1ND0+J0FMJywKMTY1NT0+J0FMJywKMTY1Nj0+J0FMJywKMTY1Nz0+J0FMJywKMTY1OD0+J0FMJywKMTY1OT0+J0FMJywKMTY2MD0+J0FMJywKMTY2MT0+J0FMJywKMTY2Mj0+J0FMJywKMTY2Mz0+J0FMJywKMTY2ND0+J0FMJywKMTY2NT0+J0FMJywKMTY2Nj0+J0FMJywKMTY2Nz0+J0FMJywKMTY2OD0+J0FMJywKMTY2OT0+J0FMJywKMTY3MD0+J0FMJywKMTY3MT0+J0FMJywKMTY3Mj0+J0FMJywKMTY3Mz0+J0FMJywKMTY3ND0+J0FMJywKMTY3NT0+J0FMJywKMTY3Nj0+J0FMJywKMTY3Nz0+J0FMJywKMTY3OD0+J0FMJywKMTY3OT0+J0FMJywKMTY4MD0+J0FMJywKMTY4MT0+J0FMJywKMTY4Mj0+J0FMJywKMTY4Mz0+J0FMJywKMTY4ND0+J0FMJywKMTY4NT0+J0FMJywKMTY4Nj0+J0FMJywKMTY4Nz0+J0FMJywKMTY4OD0+J0FMJywKMTY4OT0+J0FMJywKMTY5MD0+J0FMJywKMTY5MT0+J0FMJywKMTY5Mj0+J0FMJywKMTY5Mz0+J0FMJywKMTY5ND0+J0FMJywKMTY5NT0+J0FMJywKMTY5Nj0+J0FMJywKMTY5Nz0+J0FMJywKMTY5OD0+J0FMJywKMTY5OT0+J0FMJywKMTcwMD0+J0FMJywKMTcwMT0+J0FMJywKMTcwMj0+J0FMJywKMTcwMz0+J0FMJywKMTcwND0+J0FMJywKMTcwNT0+J0FMJywKMTcwNj0+J0FMJywKMTcwNz0+J0FMJywKMTcwOD0+J0FMJywKMTcwOT0+J0FMJywKMTcxMD0+J0FMJywKMTcxMT0+J0FMJywKMTcxMj0+J0FMJywKMTcxMz0+J0FMJywKMTcxND0+J0FMJywKMTcxNT0+J0FMJywKMTcxNj0+J0FMJywKMTcxNz0+J0FMJywKMTcxOD0+J0FMJywKMTcxOT0+J0FMJywKMTcyMD0+J0FMJywKMTcyMT0+J0FMJywKMTcyMj0+J0FMJywKMTcyMz0+J0FMJywKMTcyND0+J0FMJywKMTcyNT0+J0FMJywKMTcyNj0+J0FMJywKMTcyNz0+J0FMJywKMTcyOD0+J0FMJywKMTcyOT0+J0FMJywKMTczMD0+J0FMJywKMTczMT0+J0FMJywKMTczMj0+J0FMJywKMTczMz0+J0FMJywKMTczND0+J0FMJywKMTczNT0+J0FMJywKMTczNj0+J0FMJywKMTczNz0+J0FMJywKMTczOD0+J0FMJywKMTczOT0+J0FMJywKMTc0MD0+J0FMJywKMTc0MT0+J0FMJywKMTc0Mj0+J0FMJywKMTc0Mz0+J0FMJywKMTc0ND0+J0FMJywKMTc0NT0+J0FMJywKMTc0Nj0+J0FMJywKMTc0Nz0+J0FMJywKMTc0OD0+J0FMJywKMTc0OT0+J0FMJywKMTc1MD0+J05TTScsCjE3NTE9PidOU00nLAoxNzUyPT4nTlNNJywKMTc1Mz0+J05TTScsCjE3NTQ9PidOU00nLAoxNzU1PT4nTlNNJywKMTc1Nj0+J05TTScsCjE3NTc9PidBTCcsCjE3NTg9PidOU00nLAoxNzU5PT4nTlNNJywKMTc2MD0+J05TTScsCjE3NjE9PidOU00nLAoxNzYyPT4nTlNNJywKMTc2Mz0+J05TTScsCjE3NjQ9PidOU00nLAoxNzY1PT4nQUwnLAoxNzY2PT4nQUwnLAoxNzY3PT4nTlNNJywKMTc2OD0+J05TTScsCjE3Njk9PidPTicsCjE3NzA9PidOU00nLAoxNzcxPT4nTlNNJywKMTc3Mj0+J05TTScsCjE3NzM9PidOU00nLAoxNzc0PT4nQUwnLAoxNzc1PT4nQUwnLAoxNzc2PT4nRU4nLAoxNzc3PT4nRU4nLAoxNzc4PT4nRU4nLAoxNzc5PT4nRU4nLAoxNzgwPT4nRU4nLAoxNzgxPT4nRU4nLAoxNzgyPT4nRU4nLAoxNzgzPT4nRU4nLAoxNzg0PT4nRU4nLAoxNzg1PT4nRU4nLAoxNzg2PT4nQUwnLAoxNzg3PT4nQUwnLAoxNzg4PT4nQUwnLAoxNzg5PT4nQUwnLAoxNzkwPT4nQUwnLAoxNzkxPT4nQUwnLAoxNzkyPT4nQUwnLAoxNzkzPT4nQUwnLAoxNzk0PT4nQUwnLAoxNzk1PT4nQUwnLAoxNzk2PT4nQUwnLAoxNzk3PT4nQUwnLAoxNzk4PT4nQUwnLAoxNzk5PT4nQUwnLAoxODAwPT4nQUwnLAoxODAxPT4nQUwnLAoxODAyPT4nQUwnLAoxODAzPT4nQUwnLAoxODA0PT4nQUwnLAoxODA1PT4nQUwnLAoxODA3PT4nQk4nLAoxODA4PT4nQUwnLAoxODA5PT4nTlNNJywKMTgxMD0+J0FMJywKMTgxMT0+J0FMJywKMTgxMj0+J0FMJywKMTgxMz0+J0FMJywKMTgxND0+J0FMJywKMTgxNT0+J0FMJywKMTgxNj0+J0FMJywKMTgxNz0+J0FMJywKMTgxOD0+J0FMJywKMTgxOT0+J0FMJywKMTgyMD0+J0FMJywKMTgyMT0+J0FMJywKMTgyMj0+J0FMJywKMTgyMz0+J0FMJywKMTgyND0+J0FMJywKMTgyNT0+J0FMJywKMTgyNj0+J0FMJywKMTgyNz0+J0FMJywKMTgyOD0+J0FMJywKMTgyOT0+J0FMJywKMTgzMD0+J0FMJywKMTgzMT0+J0FMJywKMTgzMj0+J0FMJywKMTgzMz0+J0FMJywKMTgzND0+J0FMJywKMTgzNT0+J0FMJywKMTgzNj0+J0FMJywKMTgzNz0+J0FMJywKMTgzOD0+J0FMJywKMTgzOT0+J0FMJywKMTg0MD0+J05TTScsCjE4NDE9PidOU00nLAoxODQyPT4nTlNNJywKMTg0Mz0+J05TTScsCjE4NDQ9PidOU00nLAoxODQ1PT4nTlNNJywKMTg0Nj0+J05TTScsCjE4NDc9PidOU00nLAoxODQ4PT4nTlNNJywKMTg0OT0+J05TTScsCjE4NTA9PidOU00nLAoxODUxPT4nTlNNJywKMTg1Mj0+J05TTScsCjE4NTM9PidOU00nLAoxODU0PT4nTlNNJywKMTg1NT0+J05TTScsCjE4NTY9PidOU00nLAoxODU3PT4nTlNNJywKMTg1OD0+J05TTScsCjE4NTk9PidOU00nLAoxODYwPT4nTlNNJywKMTg2MT0+J05TTScsCjE4NjI9PidOU00nLAoxODYzPT4nTlNNJywKMTg2ND0+J05TTScsCjE4NjU9PidOU00nLAoxODY2PT4nTlNNJywKMTg2OT0+J0FMJywKMTg3MD0+J0FMJywKMTg3MT0+J0FMJywKMTg3Mj0+J0FMJywKMTg3Mz0+J0FMJywKMTg3ND0+J0FMJywKMTg3NT0+J0FMJywKMTg3Nj0+J0FMJywKMTg3Nz0+J0FMJywKMTg3OD0+J0FMJywKMTg3OT0+J0FMJywKMTg4MD0+J0FMJywKMTg4MT0+J0FMJywKMTg4Mj0+J0FMJywKMTg4Mz0+J0FMJywKMTg4ND0+J0FMJywKMTg4NT0+J0FMJywKMTg4Nj0+J0FMJywKMTg4Nz0+J0FMJywKMTg4OD0+J0FMJywKMTg4OT0+J0FMJywKMTg5MD0+J0FMJywKMTg5MT0+J0FMJywKMTg5Mj0+J0FMJywKMTg5Mz0+J0FMJywKMTg5ND0+J0FMJywKMTg5NT0+J0FMJywKMTg5Nj0+J0FMJywKMTg5Nz0+J0FMJywKMTg5OD0+J0FMJywKMTg5OT0+J0FMJywKMTkwMD0+J0FMJywKMTkwMT0+J0FMJywKMTkyMD0+J0FMJywKMTkyMT0+J0FMJywKMTkyMj0+J0FMJywKMTkyMz0+J0FMJywKMTkyND0+J0FMJywKMTkyNT0+J0FMJywKMTkyNj0+J0FMJywKMTkyNz0+J0FMJywKMTkyOD0+J0FMJywKMTkyOT0+J0FMJywKMTkzMD0+J0FMJywKMTkzMT0+J0FMJywKMTkzMj0+J0FMJywKMTkzMz0+J0FMJywKMTkzND0+J0FMJywKMTkzNT0+J0FMJywKMTkzNj0+J0FMJywKMTkzNz0+J0FMJywKMTkzOD0+J0FMJywKMTkzOT0+J0FMJywKMTk0MD0+J0FMJywKMTk0MT0+J0FMJywKMTk0Mj0+J0FMJywKMTk0Mz0+J0FMJywKMTk0ND0+J0FMJywKMTk0NT0+J0FMJywKMTk0Nj0+J0FMJywKMTk0Nz0+J0FMJywKMTk0OD0+J0FMJywKMTk0OT0+J0FMJywKMTk1MD0+J0FMJywKMTk1MT0+J0FMJywKMTk1Mj0+J0FMJywKMTk1Mz0+J0FMJywKMTk1ND0+J0FMJywKMTk1NT0+J0FMJywKMTk1Nj0+J0FMJywKMTk1Nz0+J0FMJywKMTk1OD0+J05TTScsCjE5NTk9PidOU00nLAoxOTYwPT4nTlNNJywKMTk2MT0+J05TTScsCjE5NjI9PidOU00nLAoxOTYzPT4nTlNNJywKMTk2ND0+J05TTScsCjE5NjU9PidOU00nLAoxOTY2PT4nTlNNJywKMTk2Nz0+J05TTScsCjE5Njg9PidOU00nLAoxOTY5PT4nQUwnLAoxOTg0PT4nUicsCjE5ODU9PidSJywKMTk4Nj0+J1InLAoxOTg3PT4nUicsCjE5ODg9PidSJywKMTk4OT0+J1InLAoxOTkwPT4nUicsCjE5OTE9PidSJywKMTk5Mj0+J1InLAoxOTkzPT4nUicsCjE5OTQ9PidSJywKMTk5NT0+J1InLAoxOTk2PT4nUicsCjE5OTc9PidSJywKMTk5OD0+J1InLAoxOTk5PT4nUicsCjIwMDA9PidSJywKMjAwMT0+J1InLAoyMDAyPT4nUicsCjIwMDM9PidSJywKMjAwND0+J1InLAoyMDA1PT4nUicsCjIwMDY9PidSJywKMjAwNz0+J1InLAoyMDA4PT4nUicsCjIwMDk9PidSJywKMjAxMD0+J1InLAoyMDExPT4nUicsCjIwMTI9PidSJywKMjAxMz0+J1InLAoyMDE0PT4nUicsCjIwMTU9PidSJywKMjAxNj0+J1InLAoyMDE3PT4nUicsCjIwMTg9PidSJywKMjAxOT0+J1InLAoyMDIwPT4nUicsCjIwMjE9PidSJywKMjAyMj0+J1InLAoyMDIzPT4nUicsCjIwMjQ9PidSJywKMjAyNT0+J1InLAoyMDI2PT4nUicsCjIwMjc9PidOU00nLAoyMDI4PT4nTlNNJywKMjAyOT0+J05TTScsCjIwMzA9PidOU00nLAoyMDMxPT4nTlNNJywKMjAzMj0+J05TTScsCjIwMzM9PidOU00nLAoyMDM0PT4nTlNNJywKMjAzNT0+J05TTScsCjIwMzY9PidSJywKMjAzNz0+J1InLAoyMDM4PT4nT04nLAoyMDM5PT4nT04nLAoyMDQwPT4nT04nLAoyMDQxPT4nT04nLAoyMDQyPT4nUicsCjIzMDU9PidOU00nLAoyMzA2PT4nTlNNJywKMjMwNz0+J0wnLAoyMzA4PT4nTCcsCjIzMDk9PidMJywKMjMxMD0+J0wnLAoyMzExPT4nTCcsCjIzMTI9PidMJywKMjMxMz0+J0wnLAoyMzE0PT4nTCcsCjIzMTU9PidMJywKMjMxNj0+J0wnLAoyMzE3PT4nTCcsCjIzMTg9PidMJywKMjMxOT0+J0wnLAoyMzIwPT4nTCcsCjIzMjE9PidMJywKMjMyMj0+J0wnLAoyMzIzPT4nTCcsCjIzMjQ9PidMJywKMjMyNT0+J0wnLAoyMzI2PT4nTCcsCjIzMjc9PidMJywKMjMyOD0+J0wnLAoyMzI5PT4nTCcsCjIzMzA9PidMJywKMjMzMT0+J0wnLAoyMzMyPT4nTCcsCjIzMzM9PidMJywKMjMzND0+J0wnLAoyMzM1PT4nTCcsCjIzMzY9PidMJywKMjMzNz0+J0wnLAoyMzM4PT4nTCcsCjIzMzk9PidMJywKMjM0MD0+J0wnLAoyMzQxPT4nTCcsCjIzNDI9PidMJywKMjM0Mz0+J0wnLAoyMzQ0PT4nTCcsCjIzNDU9PidMJywKMjM0Nj0+J0wnLAoyMzQ3PT4nTCcsCjIzNDg9PidMJywKMjM0OT0+J0wnLAoyMzUwPT4nTCcsCjIzNTE9PidMJywKMjM1Mj0+J0wnLAoyMzUzPT4nTCcsCjIzNTQ9PidMJywKMjM1NT0+J0wnLAoyMzU2PT4nTCcsCjIzNTc9PidMJywKMjM1OD0+J0wnLAoyMzU5PT4nTCcsCjIzNjA9PidMJywKMjM2MT0+J0wnLAoyMzY0PT4nTlNNJywKMjM2NT0+J0wnLAoyMzY2PT4nTCcsCjIzNjc9PidMJywKMjM2OD0+J0wnLAoyMzY5PT4nTlNNJywKMjM3MD0+J05TTScsCjIzNzE9PidOU00nLAoyMzcyPT4nTlNNJywKMjM3Mz0+J05TTScsCjIzNzQ9PidOU00nLAoyMzc1PT4nTlNNJywKMjM3Nj0+J05TTScsCjIzNzc9PidMJywKMjM3OD0+J0wnLAoyMzc5PT4nTCcsCjIzODA9PidMJywKMjM4MT0+J05TTScsCjIzODQ9PidMJywKMjM4NT0+J05TTScsCjIzODY9PidOU00nLAoyMzg3PT4nTlNNJywKMjM4OD0+J05TTScsCjIzOTI9PidMJywKMjM5Mz0+J0wnLAoyMzk0PT4nTCcsCjIzOTU9PidMJywKMjM5Nj0+J0wnLAoyMzk3PT4nTCcsCjIzOTg9PidMJywKMjM5OT0+J0wnLAoyNDAwPT4nTCcsCjI0MDE9PidMJywKMjQwMj0+J05TTScsCjI0MDM9PidOU00nLAoyNDA0PT4nTCcsCjI0MDU9PidMJywKMjQwNj0+J0wnLAoyNDA3PT4nTCcsCjI0MDg9PidMJywKMjQwOT0+J0wnLAoyNDEwPT4nTCcsCjI0MTE9PidMJywKMjQxMj0+J0wnLAoyNDEzPT4nTCcsCjI0MTQ9PidMJywKMjQxNT0+J0wnLAoyNDE2PT4nTCcsCjI0Mjc9PidMJywKMjQyOD0+J0wnLAoyNDI5PT4nTCcsCjI0MzA9PidMJywKMjQzMT0+J0wnLAoyNDMzPT4nTlNNJywKMjQzND0+J0wnLAoyNDM1PT4nTCcsCjI0Mzc9PidMJywKMjQzOD0+J0wnLAoyNDM5PT4nTCcsCjI0NDA9PidMJywKMjQ0MT0+J0wnLAoyNDQyPT4nTCcsCjI0NDM9PidMJywKMjQ0ND0+J0wnLAoyNDQ3PT4nTCcsCjI0NDg9PidMJywKMjQ1MT0+J0wnLAoyNDUyPT4nTCcsCjI0NTM9PidMJywKMjQ1ND0+J0wnLAoyNDU1PT4nTCcsCjI0NTY9PidMJywKMjQ1Nz0+J0wnLAoyNDU4PT4nTCcsCjI0NTk9PidMJywKMjQ2MD0+J0wnLAoyNDYxPT4nTCcsCjI0NjI9PidMJywKMjQ2Mz0+J0wnLAoyNDY0PT4nTCcsCjI0NjU9PidMJywKMjQ2Nj0+J0wnLAoyNDY3PT4nTCcsCjI0Njg9PidMJywKMjQ2OT0+J0wnLAoyNDcwPT4nTCcsCjI0NzE9PidMJywKMjQ3Mj0+J0wnLAoyNDc0PT4nTCcsCjI0NzU9PidMJywKMjQ3Nj0+J0wnLAoyNDc3PT4nTCcsCjI0Nzg9PidMJywKMjQ3OT0+J0wnLAoyNDgwPT4nTCcsCjI0ODI9PidMJywKMjQ4Nj0+J0wnLAoyNDg3PT4nTCcsCjI0ODg9PidMJywKMjQ4OT0+J0wnLAoyNDkyPT4nTlNNJywKMjQ5Mz0+J0wnLAoyNDk0PT4nTCcsCjI0OTU9PidMJywKMjQ5Nj0+J0wnLAoyNDk3PT4nTlNNJywKMjQ5OD0+J05TTScsCjI0OTk9PidOU00nLAoyNTAwPT4nTlNNJywKMjUwMz0+J0wnLAoyNTA0PT4nTCcsCjI1MDc9PidMJywKMjUwOD0+J0wnLAoyNTA5PT4nTlNNJywKMjUxMD0+J0wnLAoyNTE5PT4nTCcsCjI1MjQ9PidMJywKMjUyNT0+J0wnLAoyNTI3PT4nTCcsCjI1Mjg9PidMJywKMjUyOT0+J0wnLAoyNTMwPT4nTlNNJywKMjUzMT0+J05TTScsCjI1MzQ9PidMJywKMjUzNT0+J0wnLAoyNTM2PT4nTCcsCjI1Mzc9PidMJywKMjUzOD0+J0wnLAoyNTM5PT4nTCcsCjI1NDA9PidMJywKMjU0MT0+J0wnLAoyNTQyPT4nTCcsCjI1NDM9PidMJywKMjU0ND0+J0wnLAoyNTQ1PT4nTCcsCjI1NDY9PidFVCcsCjI1NDc9PidFVCcsCjI1NDg9PidMJywKMjU0OT0+J0wnLAoyNTUwPT4nTCcsCjI1NTE9PidMJywKMjU1Mj0+J0wnLAoyNTUzPT4nTCcsCjI1NTQ9PidMJywKMjU2MT0+J05TTScsCjI1NjI9PidOU00nLAoyNTYzPT4nTCcsCjI1NjU9PidMJywKMjU2Nj0+J0wnLAoyNTY3PT4nTCcsCjI1Njg9PidMJywKMjU2OT0+J0wnLAoyNTcwPT4nTCcsCjI1NzU9PidMJywKMjU3Nj0+J0wnLAoyNTc5PT4nTCcsCjI1ODA9PidMJywKMjU4MT0+J0wnLAoyNTgyPT4nTCcsCjI1ODM9PidMJywKMjU4ND0+J0wnLAoyNTg1PT4nTCcsCjI1ODY9PidMJywKMjU4Nz0+J0wnLAoyNTg4PT4nTCcsCjI1ODk9PidMJywKMjU5MD0+J0wnLAoyNTkxPT4nTCcsCjI1OTI9PidMJywKMjU5Mz0+J0wnLAoyNTk0PT4nTCcsCjI1OTU9PidMJywKMjU5Nj0+J0wnLAoyNTk3PT4nTCcsCjI1OTg9PidMJywKMjU5OT0+J0wnLAoyNjAwPT4nTCcsCjI2MDI9PidMJywKMjYwMz0+J0wnLAoyNjA0PT4nTCcsCjI2MDU9PidMJywKMjYwNj0+J0wnLAoyNjA3PT4nTCcsCjI2MDg9PidMJywKMjYxMD0+J0wnLAoyNjExPT4nTCcsCjI2MTM9PidMJywKMjYxND0+J0wnLAoyNjE2PT4nTCcsCjI2MTc9PidMJywKMjYyMD0+J05TTScsCjI2MjI9PidMJywKMjYyMz0+J0wnLAoyNjI0PT4nTCcsCjI2MjU9PidOU00nLAoyNjI2PT4nTlNNJywKMjYzMT0+J05TTScsCjI2MzI9PidOU00nLAoyNjM1PT4nTlNNJywKMjYzNj0+J05TTScsCjI2Mzc9PidOU00nLAoyNjQ5PT4nTCcsCjI2NTA9PidMJywKMjY1MT0+J0wnLAoyNjUyPT4nTCcsCjI2NTQ9PidMJywKMjY2Mj0+J0wnLAoyNjYzPT4nTCcsCjI2NjQ9PidMJywKMjY2NT0+J0wnLAoyNjY2PT4nTCcsCjI2Njc9PidMJywKMjY2OD0+J0wnLAoyNjY5PT4nTCcsCjI2NzA9PidMJywKMjY3MT0+J0wnLAoyNjcyPT4nTlNNJywKMjY3Mz0+J05TTScsCjI2NzQ9PidMJywKMjY3NT0+J0wnLAoyNjc2PT4nTCcsCjI2ODk9PidOU00nLAoyNjkwPT4nTlNNJywKMjY5MT0+J0wnLAoyNjkzPT4nTCcsCjI2OTQ9PidMJywKMjY5NT0+J0wnLAoyNjk2PT4nTCcsCjI2OTc9PidMJywKMjY5OD0+J0wnLAoyNjk5PT4nTCcsCjI3MDA9PidMJywKMjcwMT0+J0wnLAoyNzAzPT4nTCcsCjI3MDQ9PidMJywKMjcwNT0+J0wnLAoyNzA3PT4nTCcsCjI3MDg9PidMJywKMjcwOT0+J0wnLAoyNzEwPT4nTCcsCjI3MTE9PidMJywKMjcxMj0+J0wnLAoyNzEzPT4nTCcsCjI3MTQ9PidMJywKMjcxNT0+J0wnLAoyNzE2PT4nTCcsCjI3MTc9PidMJywKMjcxOD0+J0wnLAoyNzE5PT4nTCcsCjI3MjA9PidMJywKMjcyMT0+J0wnLAoyNzIyPT4nTCcsCjI3MjM9PidMJywKMjcyND0+J0wnLAoyNzI1PT4nTCcsCjI3MjY9PidMJywKMjcyNz0+J0wnLAoyNzI4PT4nTCcsCjI3MzA9PidMJywKMjczMT0+J0wnLAoyNzMyPT4nTCcsCjI3MzM9PidMJywKMjczND0+J0wnLAoyNzM1PT4nTCcsCjI3MzY9PidMJywKMjczOD0+J0wnLAoyNzM5PT4nTCcsCjI3NDE9PidMJywKMjc0Mj0+J0wnLAoyNzQzPT4nTCcsCjI3NDQ9PidMJywKMjc0NT0+J0wnLAoyNzQ4PT4nTlNNJywKMjc0OT0+J0wnLAoyNzUwPT4nTCcsCjI3NTE9PidMJywKMjc1Mj0+J0wnLAoyNzUzPT4nTlNNJywKMjc1ND0+J05TTScsCjI3NTU9PidOU00nLAoyNzU2PT4nTlNNJywKMjc1Nz0+J05TTScsCjI3NTk9PidOU00nLAoyNzYwPT4nTlNNJywKMjc2MT0+J0wnLAoyNzYzPT4nTCcsCjI3NjQ9PidMJywKMjc2NT0+J05TTScsCjI3Njg9PidMJywKMjc4ND0+J0wnLAoyNzg1PT4nTCcsCjI3ODY9PidOU00nLAoyNzg3PT4nTlNNJywKMjc5MD0+J0wnLAoyNzkxPT4nTCcsCjI3OTI9PidMJywKMjc5Mz0+J0wnLAoyNzk0PT4nTCcsCjI3OTU9PidMJywKMjc5Nj0+J0wnLAoyNzk3PT4nTCcsCjI3OTg9PidMJywKMjc5OT0+J0wnLAoyODAxPT4nRVQnLAoyODE3PT4nTlNNJywKMjgxOD0+J0wnLAoyODE5PT4nTCcsCjI4MjE9PidMJywKMjgyMj0+J0wnLAoyODIzPT4nTCcsCjI4MjQ9PidMJywKMjgyNT0+J0wnLAoyODI2PT4nTCcsCjI4Mjc9PidMJywKMjgyOD0+J0wnLAoyODMxPT4nTCcsCjI4MzI9PidMJywKMjgzNT0+J0wnLAoyODM2PT4nTCcsCjI4Mzc9PidMJywKMjgzOD0+J0wnLAoyODM5PT4nTCcsCjI4NDA9PidMJywKMjg0MT0+J0wnLAoyODQyPT4nTCcsCjI4NDM9PidMJywKMjg0ND0+J0wnLAoyODQ1PT4nTCcsCjI4NDY9PidMJywKMjg0Nz0+J0wnLAoyODQ4PT4nTCcsCjI4NDk9PidMJywKMjg1MD0+J0wnLAoyODUxPT4nTCcsCjI4NTI9PidMJywKMjg1Mz0+J0wnLAoyODU0PT4nTCcsCjI4NTU9PidMJywKMjg1Nj0+J0wnLAoyODU4PT4nTCcsCjI4NTk9PidMJywKMjg2MD0+J0wnLAoyODYxPT4nTCcsCjI4NjI9PidMJywKMjg2Mz0+J0wnLAoyODY0PT4nTCcsCjI4NjY9PidMJywKMjg2Nz0+J0wnLAoyODY5PT4nTCcsCjI4NzA9PidMJywKMjg3MT0+J0wnLAoyODcyPT4nTCcsCjI4NzM9PidMJywKMjg3Nj0+J05TTScsCjI4Nzc9PidMJywKMjg3OD0+J0wnLAoyODc5PT4nTlNNJywKMjg4MD0+J0wnLAoyODgxPT4nTlNNJywKMjg4Mj0+J05TTScsCjI4ODM9PidOU00nLAoyODg3PT4nTCcsCjI4ODg9PidMJywKMjg5MT0+J0wnLAoyODkyPT4nTCcsCjI4OTM9PidOU00nLAoyOTAyPT4nTlNNJywKMjkwMz0+J0wnLAoyOTA4PT4nTCcsCjI5MDk9PidMJywKMjkxMT0+J0wnLAoyOTEyPT4nTCcsCjI5MTM9PidMJywKMjkxOD0+J0wnLAoyOTE5PT4nTCcsCjI5MjA9PidMJywKMjkyMT0+J0wnLAoyOTIyPT4nTCcsCjI5MjM9PidMJywKMjkyND0+J0wnLAoyOTI1PT4nTCcsCjI5MjY9PidMJywKMjkyNz0+J0wnLAoyOTI4PT4nTCcsCjI5Mjk9PidMJywKMjk0Nj0+J05TTScsCjI5NDc9PidMJywKMjk0OT0+J0wnLAoyOTUwPT4nTCcsCjI5NTE9PidMJywKMjk1Mj0+J0wnLAoyOTUzPT4nTCcsCjI5NTQ9PidMJywKMjk1OD0+J0wnLAoyOTU5PT4nTCcsCjI5NjA9PidMJywKMjk2Mj0+J0wnLAoyOTYzPT4nTCcsCjI5NjQ9PidMJywKMjk2NT0+J0wnLAoyOTY5PT4nTCcsCjI5NzA9PidMJywKMjk3Mj0+J0wnLAoyOTc0PT4nTCcsCjI5NzU9PidMJywKMjk3OT0+J0wnLAoyOTgwPT4nTCcsCjI5ODQ9PidMJywKMjk4NT0+J0wnLAoyOTg2PT4nTCcsCjI5OTA9PidMJywKMjk5MT0+J0wnLAoyOTkyPT4nTCcsCjI5OTM9PidMJywKMjk5ND0+J0wnLAoyOTk1PT4nTCcsCjI5OTY9PidMJywKMjk5Nz0+J0wnLAoyOTk4PT4nTCcsCjI5OTk9PidMJywKMzAwMD0+J0wnLAozMDAxPT4nTCcsCjMwMDY9PidMJywKMzAwNz0+J0wnLAozMDA4PT4nTlNNJywKMzAwOT0+J0wnLAozMDEwPT4nTCcsCjMwMTQ9PidMJywKMzAxNT0+J0wnLAozMDE2PT4nTCcsCjMwMTg9PidMJywKMzAxOT0+J0wnLAozMDIwPT4nTCcsCjMwMjE9PidOU00nLAozMDMxPT4nTCcsCjMwNDY9PidMJywKMzA0Nz0+J0wnLAozMDQ4PT4nTCcsCjMwNDk9PidMJywKMzA1MD0+J0wnLAozMDUxPT4nTCcsCjMwNTI9PidMJywKMzA1Mz0+J0wnLAozMDU0PT4nTCcsCjMwNTU9PidMJywKMzA1Nj0+J0wnLAozMDU3PT4nTCcsCjMwNTg9PidMJywKMzA1OT0+J09OJywKMzA2MD0+J09OJywKMzA2MT0+J09OJywKMzA2Mj0+J09OJywKMzA2Mz0+J09OJywKMzA2ND0+J09OJywKMzA2NT0+J0VUJywKMzA2Nj0+J09OJywKMzA3Mz0+J0wnLAozMDc0PT4nTCcsCjMwNzU9PidMJywKMzA3Nz0+J0wnLAozMDc4PT4nTCcsCjMwNzk9PidMJywKMzA4MD0+J0wnLAozMDgxPT4nTCcsCjMwODI9PidMJywKMzA4Mz0+J0wnLAozMDg0PT4nTCcsCjMwODY9PidMJywKMzA4Nz0+J0wnLAozMDg4PT4nTCcsCjMwOTA9PidMJywKMzA5MT0+J0wnLAozMDkyPT4nTCcsCjMwOTM9PidMJywKMzA5ND0+J0wnLAozMDk1PT4nTCcsCjMwOTY9PidMJywKMzA5Nz0+J0wnLAozMDk4PT4nTCcsCjMwOTk9PidMJywKMzEwMD0+J0wnLAozMTAxPT4nTCcsCjMxMDI9PidMJywKMzEwMz0+J0wnLAozMTA0PT4nTCcsCjMxMDU9PidMJywKMzEwNj0+J0wnLAozMTA3PT4nTCcsCjMxMDg9PidMJywKMzEwOT0+J0wnLAozMTEwPT4nTCcsCjMxMTE9PidMJywKMzExMj0+J0wnLAozMTE0PT4nTCcsCjMxMTU9PidMJywKMzExNj0+J0wnLAozMTE3PT4nTCcsCjMxMTg9PidMJywKMzExOT0+J0wnLAozMTIwPT4nTCcsCjMxMjE9PidMJywKMzEyMj0+J0wnLAozMTIzPT4nTCcsCjMxMjU9PidMJywKMzEyNj0+J0wnLAozMTI3PT4nTCcsCjMxMjg9PidMJywKMzEyOT0+J0wnLAozMTM0PT4nTlNNJywKMzEzNT0+J05TTScsCjMxMzY9PidOU00nLAozMTM3PT4nTCcsCjMxMzg9PidMJywKMzEzOT0+J0wnLAozMTQwPT4nTCcsCjMxNDI9PidOU00nLAozMTQzPT4nTlNNJywKMzE0ND0+J05TTScsCjMxNDY9PidOU00nLAozMTQ3PT4nTlNNJywKMzE0OD0+J05TTScsCjMxNDk9PidOU00nLAozMTU3PT4nTlNNJywKMzE1OD0+J05TTScsCjMxNjg9PidMJywKMzE2OT0+J0wnLAozMTc0PT4nTCcsCjMxNzU9PidMJywKMzE3Nj0+J0wnLAozMTc3PT4nTCcsCjMxNzg9PidMJywKMzE3OT0+J0wnLAozMTgwPT4nTCcsCjMxODE9PidMJywKMzE4Mj0+J0wnLAozMTgzPT4nTCcsCjMyMDI9PidMJywKMzIwMz0+J0wnLAozMjA1PT4nTCcsCjMyMDY9PidMJywKMzIwNz0+J0wnLAozMjA4PT4nTCcsCjMyMDk9PidMJywKMzIxMD0+J0wnLAozMjExPT4nTCcsCjMyMTI9PidMJywKMzIxND0+J0wnLAozMjE1PT4nTCcsCjMyMTY9PidMJywKMzIxOD0+J0wnLAozMjE5PT4nTCcsCjMyMjA9PidMJywKMzIyMT0+J0wnLAozMjIyPT4nTCcsCjMyMjM9PidMJywKMzIyND0+J0wnLAozMjI1PT4nTCcsCjMyMjY9PidMJywKMzIyNz0+J0wnLAozMjI4PT4nTCcsCjMyMjk9PidMJywKMzIzMD0+J0wnLAozMjMxPT4nTCcsCjMyMzI9PidMJywKMzIzMz0+J0wnLAozMjM0PT4nTCcsCjMyMzU9PidMJywKMzIzNj0+J0wnLAozMjM3PT4nTCcsCjMyMzg9PidMJywKMzIzOT0+J0wnLAozMjQwPT4nTCcsCjMyNDI9PidMJywKMzI0Mz0+J0wnLAozMjQ0PT4nTCcsCjMyNDU9PidMJywKMzI0Nj0+J0wnLAozMjQ3PT4nTCcsCjMyNDg9PidMJywKMzI0OT0+J0wnLAozMjUwPT4nTCcsCjMyNTE9PidMJywKMzI1Mz0+J0wnLAozMjU0PT4nTCcsCjMyNTU9PidMJywKMzI1Nj0+J0wnLAozMjU3PT4nTCcsCjMyNjA9PidOU00nLAozMjYxPT4nTCcsCjMyNjI9PidMJywKMzI2Mz0+J0wnLAozMjY0PT4nTCcsCjMyNjU9PidMJywKMzI2Nj0+J0wnLAozMjY3PT4nTCcsCjMyNjg9PidMJywKMzI3MD0+J0wnLAozMjcxPT4nTCcsCjMyNzI9PidMJywKMzI3ND0+J0wnLAozMjc1PT4nTCcsCjMyNzY9PidOU00nLAozMjc3PT4nTlNNJywKMzI4NT0+J0wnLAozMjg2PT4nTCcsCjMyOTQ9PidMJywKMzI5Nj0+J0wnLAozMjk3PT4nTCcsCjMyOTg9PidOU00nLAozMjk5PT4nTlNNJywKMzMwMj0+J0wnLAozMzAzPT4nTCcsCjMzMDQ9PidMJywKMzMwNT0+J0wnLAozMzA2PT4nTCcsCjMzMDc9PidMJywKMzMwOD0+J0wnLAozMzA5PT4nTCcsCjMzMTA9PidMJywKMzMxMT0+J0wnLAozMzEzPT4nT04nLAozMzE0PT4nT04nLAozMzMwPT4nTCcsCjMzMzE9PidMJywKMzMzMz0+J0wnLAozMzM0PT4nTCcsCjMzMzU9PidMJywKMzMzNj0+J0wnLAozMzM3PT4nTCcsCjMzMzg9PidMJywKMzMzOT0+J0wnLAozMzQwPT4nTCcsCjMzNDI9PidMJywKMzM0Mz0+J0wnLAozMzQ0PT4nTCcsCjMzNDY9PidMJywKMzM0Nz0+J0wnLAozMzQ4PT4nTCcsCjMzNDk9PidMJywKMzM1MD0+J0wnLAozMzUxPT4nTCcsCjMzNTI9PidMJywKMzM1Mz0+J0wnLAozMzU0PT4nTCcsCjMzNTU9PidMJywKMzM1Nj0+J0wnLAozMzU3PT4nTCcsCjMzNTg9PidMJywKMzM1OT0+J0wnLAozMzYwPT4nTCcsCjMzNjE9PidMJywKMzM2Mj0+J0wnLAozMzYzPT4nTCcsCjMzNjQ9PidMJywKMzM2NT0+J0wnLAozMzY2PT4nTCcsCjMzNjc9PidMJywKMzM2OD0+J0wnLAozMzcwPT4nTCcsCjMzNzE9PidMJywKMzM3Mj0+J0wnLAozMzczPT4nTCcsCjMzNzQ9PidMJywKMzM3NT0+J0wnLAozMzc2PT4nTCcsCjMzNzc9PidMJywKMzM3OD0+J0wnLAozMzc5PT4nTCcsCjMzODA9PidMJywKMzM4MT0+J0wnLAozMzgyPT4nTCcsCjMzODM9PidMJywKMzM4ND0+J0wnLAozMzg1PT4nTCcsCjMzOTA9PidMJywKMzM5MT0+J0wnLAozMzkyPT4nTCcsCjMzOTM9PidOU00nLAozMzk0PT4nTlNNJywKMzM5NT0+J05TTScsCjMzOTg9PidMJywKMzM5OT0+J0wnLAozNDAwPT4nTCcsCjM0MDI9PidMJywKMzQwMz0+J0wnLAozNDA0PT4nTCcsCjM0MDU9PidOU00nLAozNDE1PT4nTCcsCjM0MjQ9PidMJywKMzQyNT0+J0wnLAozNDMwPT4nTCcsCjM0MzE9PidMJywKMzQzMj0+J0wnLAozNDMzPT4nTCcsCjM0MzQ9PidMJywKMzQzNT0+J0wnLAozNDM2PT4nTCcsCjM0Mzc9PidMJywKMzQzOD0+J0wnLAozNDM5PT4nTCcsCjM0NTg9PidMJywKMzQ1OT0+J0wnLAozNDYxPT4nTCcsCjM0NjI9PidMJywKMzQ2Mz0+J0wnLAozNDY0PT4nTCcsCjM0NjU9PidMJywKMzQ2Nj0+J0wnLAozNDY3PT4nTCcsCjM0Njg9PidMJywKMzQ2OT0+J0wnLAozNDcwPT4nTCcsCjM0NzE9PidMJywKMzQ3Mj0+J0wnLAozNDczPT4nTCcsCjM0NzQ9PidMJywKMzQ3NT0+J0wnLAozNDc2PT4nTCcsCjM0Nzc9PidMJywKMzQ3OD0+J0wnLAozNDgyPT4nTCcsCjM0ODM9PidMJywKMzQ4ND0+J0wnLAozNDg1PT4nTCcsCjM0ODY9PidMJywKMzQ4Nz0+J0wnLAozNDg4PT4nTCcsCjM0ODk9PidMJywKMzQ5MD0+J0wnLAozNDkxPT4nTCcsCjM0OTI9PidMJywKMzQ5Mz0+J0wnLAozNDk0PT4nTCcsCjM0OTU9PidMJywKMzQ5Nj0+J0wnLAozNDk3PT4nTCcsCjM0OTg9PidMJywKMzQ5OT0+J0wnLAozNTAwPT4nTCcsCjM1MDE9PidMJywKMzUwMj0+J0wnLAozNTAzPT4nTCcsCjM1MDQ9PidMJywKMzUwNT0+J0wnLAozNTA3PT4nTCcsCjM1MDg9PidMJywKMzUwOT0+J0wnLAozNTEwPT4nTCcsCjM1MTE9PidMJywKMzUxMj0+J0wnLAozNTEzPT4nTCcsCjM1MTQ9PidMJywKMzUxNT0+J0wnLAozNTE3PT4nTCcsCjM1MjA9PidMJywKMzUyMT0+J0wnLAozNTIyPT4nTCcsCjM1MjM9PidMJywKMzUyND0+J0wnLAozNTI1PT4nTCcsCjM1MjY9PidMJywKMzUzMD0+J05TTScsCjM1MzU9PidMJywKMzUzNj0+J0wnLAozNTM3PT4nTCcsCjM1Mzg9PidOU00nLAozNTM5PT4nTlNNJywKMzU0MD0+J05TTScsCjM1NDI9PidOU00nLAozNTQ0PT4nTCcsCjM1NDU9PidMJywKMzU0Nj0+J0wnLAozNTQ3PT4nTCcsCjM1NDg9PidMJywKMzU0OT0+J0wnLAozNTUwPT4nTCcsCjM1NTE9PidMJywKMzU3MD0+J0wnLAozNTcxPT4nTCcsCjM1NzI9PidMJywKMzU4NT0+J0wnLAozNTg2PT4nTCcsCjM1ODc9PidMJywKMzU4OD0+J0wnLAozNTg5PT4nTCcsCjM1OTA9PidMJywKMzU5MT0+J0wnLAozNTkyPT4nTCcsCjM1OTM9PidMJywKMzU5ND0+J0wnLAozNTk1PT4nTCcsCjM1OTY9PidMJywKMzU5Nz0+J0wnLAozNTk4PT4nTCcsCjM1OTk9PidMJywKMzYwMD0+J0wnLAozNjAxPT4nTCcsCjM2MDI9PidMJywKMzYwMz0+J0wnLAozNjA0PT4nTCcsCjM2MDU9PidMJywKMzYwNj0+J0wnLAozNjA3PT4nTCcsCjM2MDg9PidMJywKMzYwOT0+J0wnLAozNjEwPT4nTCcsCjM2MTE9PidMJywKMzYxMj0+J0wnLAozNjEzPT4nTCcsCjM2MTQ9PidMJywKMzYxNT0+J0wnLAozNjE2PT4nTCcsCjM2MTc9PidMJywKMzYxOD0+J0wnLAozNjE5PT4nTCcsCjM2MjA9PidMJywKMzYyMT0+J0wnLAozNjIyPT4nTCcsCjM2MjM9PidMJywKMzYyND0+J0wnLAozNjI1PT4nTCcsCjM2MjY9PidMJywKMzYyNz0+J0wnLAozNjI4PT4nTCcsCjM2Mjk9PidMJywKMzYzMD0+J0wnLAozNjMxPT4nTCcsCjM2MzI9PidMJywKMzYzMz0+J05TTScsCjM2MzQ9PidMJywKMzYzNT0+J0wnLAozNjM2PT4nTlNNJywKMzYzNz0+J05TTScsCjM2Mzg9PidOU00nLAozNjM5PT4nTlNNJywKMzY0MD0+J05TTScsCjM2NDE9PidOU00nLAozNjQyPT4nTlNNJywKMzY0Nz0+J0VUJywKMzY0OD0+J0wnLAozNjQ5PT4nTCcsCjM2NTA9PidMJywKMzY1MT0+J0wnLAozNjUyPT4nTCcsCjM2NTM9PidMJywKMzY1ND0+J0wnLAozNjU1PT4nTlNNJywKMzY1Nj0+J05TTScsCjM2NTc9PidOU00nLAozNjU4PT4nTlNNJywKMzY1OT0+J05TTScsCjM2NjA9PidOU00nLAozNjYxPT4nTlNNJywKMzY2Mj0+J05TTScsCjM2NjM9PidMJywKMzY2ND0+J0wnLAozNjY1PT4nTCcsCjM2NjY9PidMJywKMzY2Nz0+J0wnLAozNjY4PT4nTCcsCjM2Njk9PidMJywKMzY3MD0+J0wnLAozNjcxPT4nTCcsCjM2NzI9PidMJywKMzY3Mz0+J0wnLAozNjc0PT4nTCcsCjM2NzU9PidMJywKMzcxMz0+J0wnLAozNzE0PT4nTCcsCjM3MTY9PidMJywKMzcxOT0+J0wnLAozNzIwPT4nTCcsCjM3MjI9PidMJywKMzcyNT0+J0wnLAozNzMyPT4nTCcsCjM3MzM9PidMJywKMzczND0+J0wnLAozNzM1PT4nTCcsCjM3Mzc9PidMJywKMzczOD0+J0wnLAozNzM5PT4nTCcsCjM3NDA9PidMJywKMzc0MT0+J0wnLAozNzQyPT4nTCcsCjM3NDM9PidMJywKMzc0NT0+J0wnLAozNzQ2PT4nTCcsCjM3NDc9PidMJywKMzc0OT0+J0wnLAozNzUxPT4nTCcsCjM3NTQ9PidMJywKMzc1NT0+J0wnLAozNzU3PT4nTCcsCjM3NTg9PidMJywKMzc1OT0+J0wnLAozNzYwPT4nTCcsCjM3NjE9PidOU00nLAozNzYyPT4nTCcsCjM3NjM9PidMJywKMzc2ND0+J05TTScsCjM3NjU9PidOU00nLAozNzY2PT4nTlNNJywKMzc2Nz0+J05TTScsCjM3Njg9PidOU00nLAozNzY5PT4nTlNNJywKMzc3MT0+J05TTScsCjM3NzI9PidOU00nLAozNzczPT4nTCcsCjM3NzY9PidMJywKMzc3Nz0+J0wnLAozNzc4PT4nTCcsCjM3Nzk9PidMJywKMzc4MD0+J0wnLAozNzgyPT4nTCcsCjM3ODQ9PidOU00nLAozNzg1PT4nTlNNJywKMzc4Nj0+J05TTScsCjM3ODc9PidOU00nLAozNzg4PT4nTlNNJywKMzc4OT0+J05TTScsCjM3OTI9PidMJywKMzc5Mz0+J0wnLAozNzk0PT4nTCcsCjM3OTU9PidMJywKMzc5Nj0+J0wnLAozNzk3PT4nTCcsCjM3OTg9PidMJywKMzc5OT0+J0wnLAozODAwPT4nTCcsCjM4MDE9PidMJywKMzgwND0+J0wnLAozODA1PT4nTCcsCjM4NDA9PidMJywKMzg0MT0+J0wnLAozODQyPT4nTCcsCjM4NDM9PidMJywKMzg0ND0+J0wnLAozODQ1PT4nTCcsCjM4NDY9PidMJywKMzg0Nz0+J0wnLAozODQ4PT4nTCcsCjM4NDk9PidMJywKMzg1MD0+J0wnLAozODUxPT4nTCcsCjM4NTI9PidMJywKMzg1Mz0+J0wnLAozODU0PT4nTCcsCjM4NTU9PidMJywKMzg1Nj0+J0wnLAozODU3PT4nTCcsCjM4NTg9PidMJywKMzg1OT0+J0wnLAozODYwPT4nTCcsCjM4NjE9PidMJywKMzg2Mj0+J0wnLAozODYzPT4nTCcsCjM4NjQ9PidOU00nLAozODY1PT4nTlNNJywKMzg2Nj0+J0wnLAozODY3PT4nTCcsCjM4Njg9PidMJywKMzg2OT0+J0wnLAozODcwPT4nTCcsCjM4NzE9PidMJywKMzg3Mj0+J0wnLAozODczPT4nTCcsCjM4NzQ9PidMJywKMzg3NT0+J0wnLAozODc2PT4nTCcsCjM4Nzc9PidMJywKMzg3OD0+J0wnLAozODc5PT4nTCcsCjM4ODA9PidMJywKMzg4MT0+J0wnLAozODgyPT4nTCcsCjM4ODM9PidMJywKMzg4ND0+J0wnLAozODg1PT4nTCcsCjM4ODY9PidMJywKMzg4Nz0+J0wnLAozODg4PT4nTCcsCjM4ODk9PidMJywKMzg5MD0+J0wnLAozODkxPT4nTCcsCjM4OTI9PidMJywKMzg5Mz0+J05TTScsCjM4OTQ9PidMJywKMzg5NT0+J05TTScsCjM4OTY9PidMJywKMzg5Nz0+J05TTScsCjM4OTg9PidPTicsCjM4OTk9PidPTicsCjM5MDA9PidPTicsCjM5MDE9PidPTicsCjM5MDI9PidMJywKMzkwMz0+J0wnLAozOTA0PT4nTCcsCjM5MDU9PidMJywKMzkwNj0+J0wnLAozOTA3PT4nTCcsCjM5MDg9PidMJywKMzkwOT0+J0wnLAozOTEwPT4nTCcsCjM5MTE9PidMJywKMzkxMz0+J0wnLAozOTE0PT4nTCcsCjM5MTU9PidMJywKMzkxNj0+J0wnLAozOTE3PT4nTCcsCjM5MTg9PidMJywKMzkxOT0+J0wnLAozOTIwPT4nTCcsCjM5MjE9PidMJywKMzkyMj0+J0wnLAozOTIzPT4nTCcsCjM5MjQ9PidMJywKMzkyNT0+J0wnLAozOTI2PT4nTCcsCjM5Mjc9PidMJywKMzkyOD0+J0wnLAozOTI5PT4nTCcsCjM5MzA9PidMJywKMzkzMT0+J0wnLAozOTMyPT4nTCcsCjM5MzM9PidMJywKMzkzND0+J0wnLAozOTM1PT4nTCcsCjM5MzY9PidMJywKMzkzNz0+J0wnLAozOTM4PT4nTCcsCjM5Mzk9PidMJywKMzk0MD0+J0wnLAozOTQxPT4nTCcsCjM5NDI9PidMJywKMzk0Mz0+J0wnLAozOTQ0PT4nTCcsCjM5NDU9PidMJywKMzk0Nj0+J0wnLAozOTUzPT4nTlNNJywKMzk1ND0+J05TTScsCjM5NTU9PidOU00nLAozOTU2PT4nTlNNJywKMzk1Nz0+J05TTScsCjM5NTg9PidOU00nLAozOTU5PT4nTlNNJywKMzk2MD0+J05TTScsCjM5NjE9PidOU00nLAozOTYyPT4nTlNNJywKMzk2Mz0+J05TTScsCjM5NjQ9PidOU00nLAozOTY1PT4nTlNNJywKMzk2Nj0+J05TTScsCjM5Njc9PidMJywKMzk2OD0+J05TTScsCjM5Njk9PidOU00nLAozOTcwPT4nTlNNJywKMzk3MT0+J05TTScsCjM5NzI9PidOU00nLAozOTczPT4nTCcsCjM5NzQ9PidOU00nLAozOTc1PT4nTlNNJywKMzk3Nj0+J0wnLAozOTc3PT4nTCcsCjM5Nzg9PidMJywKMzk3OT0+J0wnLAozOTg0PT4nTlNNJywKMzk4NT0+J05TTScsCjM5ODY9PidOU00nLAozOTg3PT4nTlNNJywKMzk4OD0+J05TTScsCjM5ODk9PidOU00nLAozOTkwPT4nTlNNJywKMzk5MT0+J05TTScsCjM5OTM9PidOU00nLAozOTk0PT4nTlNNJywKMzk5NT0+J05TTScsCjM5OTY9PidOU00nLAozOTk3PT4nTlNNJywKMzk5OD0+J05TTScsCjM5OTk9PidOU00nLAo0MDAwPT4nTlNNJywKNDAwMT0+J05TTScsCjQwMDI9PidOU00nLAo0MDAzPT4nTlNNJywKNDAwND0+J05TTScsCjQwMDU9PidOU00nLAo0MDA2PT4nTlNNJywKNDAwNz0+J05TTScsCjQwMDg9PidOU00nLAo0MDA5PT4nTlNNJywKNDAxMD0+J05TTScsCjQwMTE9PidOU00nLAo0MDEyPT4nTlNNJywKNDAxMz0+J05TTScsCjQwMTQ9PidOU00nLAo0MDE1PT4nTlNNJywKNDAxNj0+J05TTScsCjQwMTc9PidOU00nLAo0MDE4PT4nTlNNJywKNDAxOT0+J05TTScsCjQwMjA9PidOU00nLAo0MDIxPT4nTlNNJywKNDAyMj0+J05TTScsCjQwMjM9PidOU00nLAo0MDI0PT4nTlNNJywKNDAyNT0+J05TTScsCjQwMjY9PidOU00nLAo0MDI3PT4nTlNNJywKNDAyOD0+J05TTScsCjQwMzA9PidMJywKNDAzMT0+J0wnLAo0MDMyPT4nTCcsCjQwMzM9PidMJywKNDAzND0+J0wnLAo0MDM1PT4nTCcsCjQwMzY9PidMJywKNDAzNz0+J0wnLAo0MDM4PT4nTlNNJywKNDAzOT0+J0wnLAo0MDQwPT4nTCcsCjQwNDE9PidMJywKNDA0Mj0+J0wnLAo0MDQzPT4nTCcsCjQwNDQ9PidMJywKNDA0Nz0+J0wnLAo0MDQ4PT4nTCcsCjQwNDk9PidMJywKNDA5Nj0+J0wnLAo0MDk3PT4nTCcsCjQwOTg9PidMJywKNDA5OT0+J0wnLAo0MTAwPT4nTCcsCjQxMDE9PidMJywKNDEwMj0+J0wnLAo0MTAzPT4nTCcsCjQxMDQ9PidMJywKNDEwNT0+J0wnLAo0MTA2PT4nTCcsCjQxMDc9PidMJywKNDEwOD0+J0wnLAo0MTA5PT4nTCcsCjQxMTA9PidMJywKNDExMT0+J0wnLAo0MTEyPT4nTCcsCjQxMTM9PidMJywKNDExND0+J0wnLAo0MTE1PT4nTCcsCjQxMTY9PidMJywKNDExNz0+J0wnLAo0MTE4PT4nTCcsCjQxMTk9PidMJywKNDEyMD0+J0wnLAo0MTIxPT4nTCcsCjQxMjI9PidMJywKNDEyMz0+J0wnLAo0MTI0PT4nTCcsCjQxMjU9PidMJywKNDEyNj0+J0wnLAo0MTI3PT4nTCcsCjQxMjg9PidMJywKNDEyOT0+J0wnLAo0MTMxPT4nTCcsCjQxMzI9PidMJywKNDEzMz0+J0wnLAo0MTM0PT4nTCcsCjQxMzU9PidMJywKNDEzNz0+J0wnLAo0MTM4PT4nTCcsCjQxNDA9PidMJywKNDE0MT0+J05TTScsCjQxNDI9PidOU00nLAo0MTQzPT4nTlNNJywKNDE0ND0+J05TTScsCjQxNDU9PidMJywKNDE0Nj0+J05TTScsCjQxNTA9PidOU00nLAo0MTUxPT4nTlNNJywKNDE1Mj0+J0wnLAo0MTUzPT4nTlNNJywKNDE2MD0+J0wnLAo0MTYxPT4nTCcsCjQxNjI9PidMJywKNDE2Mz0+J0wnLAo0MTY0PT4nTCcsCjQxNjU9PidMJywKNDE2Nj0+J0wnLAo0MTY3PT4nTCcsCjQxNjg9PidMJywKNDE2OT0+J0wnLAo0MTcwPT4nTCcsCjQxNzE9PidMJywKNDE3Mj0+J0wnLAo0MTczPT4nTCcsCjQxNzQ9PidMJywKNDE3NT0+J0wnLAo0MTc2PT4nTCcsCjQxNzc9PidMJywKNDE3OD0+J0wnLAo0MTc5PT4nTCcsCjQxODA9PidMJywKNDE4MT0+J0wnLAo0MTgyPT4nTCcsCjQxODM9PidMJywKNDE4ND0+J05TTScsCjQxODU9PidOU00nLAo0MjU2PT4nTCcsCjQyNTc9PidMJywKNDI1OD0+J0wnLAo0MjU5PT4nTCcsCjQyNjA9PidMJywKNDI2MT0+J0wnLAo0MjYyPT4nTCcsCjQyNjM9PidMJywKNDI2ND0+J0wnLAo0MjY1PT4nTCcsCjQyNjY9PidMJywKNDI2Nz0+J0wnLAo0MjY4PT4nTCcsCjQyNjk9PidMJywKNDI3MD0+J0wnLAo0MjcxPT4nTCcsCjQyNzI9PidMJywKNDI3Mz0+J0wnLAo0Mjc0PT4nTCcsCjQyNzU9PidMJywKNDI3Nj0+J0wnLAo0Mjc3PT4nTCcsCjQyNzg9PidMJywKNDI3OT0+J0wnLAo0MjgwPT4nTCcsCjQyODE9PidMJywKNDI4Mj0+J0wnLAo0MjgzPT4nTCcsCjQyODQ9PidMJywKNDI4NT0+J0wnLAo0Mjg2PT4nTCcsCjQyODc9PidMJywKNDI4OD0+J0wnLAo0Mjg5PT4nTCcsCjQyOTA9PidMJywKNDI5MT0+J0wnLAo0MjkyPT4nTCcsCjQyOTM9PidMJywKNDMwND0+J0wnLAo0MzA1PT4nTCcsCjQzMDY9PidMJywKNDMwNz0+J0wnLAo0MzA4PT4nTCcsCjQzMDk9PidMJywKNDMxMD0+J0wnLAo0MzExPT4nTCcsCjQzMTI9PidMJywKNDMxMz0+J0wnLAo0MzE0PT4nTCcsCjQzMTU9PidMJywKNDMxNj0+J0wnLAo0MzE3PT4nTCcsCjQzMTg9PidMJywKNDMxOT0+J0wnLAo0MzIwPT4nTCcsCjQzMjE9PidMJywKNDMyMj0+J0wnLAo0MzIzPT4nTCcsCjQzMjQ9PidMJywKNDMyNT0+J0wnLAo0MzI2PT4nTCcsCjQzMjc9PidMJywKNDMyOD0+J0wnLAo0MzI5PT4nTCcsCjQzMzA9PidMJywKNDMzMT0+J0wnLAo0MzMyPT4nTCcsCjQzMzM9PidMJywKNDMzND0+J0wnLAo0MzM1PT4nTCcsCjQzMzY9PidMJywKNDMzNz0+J0wnLAo0MzM4PT4nTCcsCjQzMzk9PidMJywKNDM0MD0+J0wnLAo0MzQxPT4nTCcsCjQzNDI9PidMJywKNDM0Mz0+J0wnLAo0MzQ0PT4nTCcsCjQzNDU9PidMJywKNDM0Nj0+J0wnLAo0MzQ3PT4nTCcsCjQzNDg9PidMJywKNDM1Mj0+J0wnLAo0MzUzPT4nTCcsCjQzNTQ9PidMJywKNDM1NT0+J0wnLAo0MzU2PT4nTCcsCjQzNTc9PidMJywKNDM1OD0+J0wnLAo0MzU5PT4nTCcsCjQzNjA9PidMJywKNDM2MT0+J0wnLAo0MzYyPT4nTCcsCjQzNjM9PidMJywKNDM2ND0+J0wnLAo0MzY1PT4nTCcsCjQzNjY9PidMJywKNDM2Nz0+J0wnLAo0MzY4PT4nTCcsCjQzNjk9PidMJywKNDM3MD0+J0wnLAo0MzcxPT4nTCcsCjQzNzI9PidMJywKNDM3Mz0+J0wnLAo0Mzc0PT4nTCcsCjQzNzU9PidMJywKNDM3Nj0+J0wnLAo0Mzc3PT4nTCcsCjQzNzg9PidMJywKNDM3OT0+J0wnLAo0MzgwPT4nTCcsCjQzODE9PidMJywKNDM4Mj0+J0wnLAo0MzgzPT4nTCcsCjQzODQ9PidMJywKNDM4NT0+J0wnLAo0Mzg2PT4nTCcsCjQzODc9PidMJywKNDM4OD0+J0wnLAo0Mzg5PT4nTCcsCjQzOTA9PidMJywKNDM5MT0+J0wnLAo0MzkyPT4nTCcsCjQzOTM9PidMJywKNDM5ND0+J0wnLAo0Mzk1PT4nTCcsCjQzOTY9PidMJywKNDM5Nz0+J0wnLAo0Mzk4PT4nTCcsCjQzOTk9PidMJywKNDQwMD0+J0wnLAo0NDAxPT4nTCcsCjQ0MDI9PidMJywKNDQwMz0+J0wnLAo0NDA0PT4nTCcsCjQ0MDU9PidMJywKNDQwNj0+J0wnLAo0NDA3PT4nTCcsCjQ0MDg9PidMJywKNDQwOT0+J0wnLAo0NDEwPT4nTCcsCjQ0MTE9PidMJywKNDQxMj0+J0wnLAo0NDEzPT4nTCcsCjQ0MTQ9PidMJywKNDQxNT0+J0wnLAo0NDE2PT4nTCcsCjQ0MTc9PidMJywKNDQxOD0+J0wnLAo0NDE5PT4nTCcsCjQ0MjA9PidMJywKNDQyMT0+J0wnLAo0NDIyPT4nTCcsCjQ0MjM9PidMJywKNDQyND0+J0wnLAo0NDI1PT4nTCcsCjQ0MjY9PidMJywKNDQyNz0+J0wnLAo0NDI4PT4nTCcsCjQ0Mjk9PidMJywKNDQzMD0+J0wnLAo0NDMxPT4nTCcsCjQ0MzI9PidMJywKNDQzMz0+J0wnLAo0NDM0PT4nTCcsCjQ0MzU9PidMJywKNDQzNj0+J0wnLAo0NDM3PT4nTCcsCjQ0Mzg9PidMJywKNDQzOT0+J0wnLAo0NDQwPT4nTCcsCjQ0NDE9PidMJywKNDQ0Nz0+J0wnLAo0NDQ4PT4nTCcsCjQ0NDk9PidMJywKNDQ1MD0+J0wnLAo0NDUxPT4nTCcsCjQ0NTI9PidMJywKNDQ1Mz0+J0wnLAo0NDU0PT4nTCcsCjQ0NTU9PidMJywKNDQ1Nj0+J0wnLAo0NDU3PT4nTCcsCjQ0NTg9PidMJywKNDQ1OT0+J0wnLAo0NDYwPT4nTCcsCjQ0NjE9PidMJywKNDQ2Mj0+J0wnLAo0NDYzPT4nTCcsCjQ0NjQ9PidMJywKNDQ2NT0+J0wnLAo0NDY2PT4nTCcsCjQ0Njc9PidMJywKNDQ2OD0+J0wnLAo0NDY5PT4nTCcsCjQ0NzA9PidMJywKNDQ3MT0+J0wnLAo0NDcyPT4nTCcsCjQ0NzM9PidMJywKNDQ3ND0+J0wnLAo0NDc1PT4nTCcsCjQ0NzY9PidMJywKNDQ3Nz0+J0wnLAo0NDc4PT4nTCcsCjQ0Nzk9PidMJywKNDQ4MD0+J0wnLAo0NDgxPT4nTCcsCjQ0ODI9PidMJywKNDQ4Mz0+J0wnLAo0NDg0PT4nTCcsCjQ0ODU9PidMJywKNDQ4Nj0+J0wnLAo0NDg3PT4nTCcsCjQ0ODg9PidMJywKNDQ4OT0+J0wnLAo0NDkwPT4nTCcsCjQ0OTE9PidMJywKNDQ5Mj0+J0wnLAo0NDkzPT4nTCcsCjQ0OTQ9PidMJywKNDQ5NT0+J0wnLAo0NDk2PT4nTCcsCjQ0OTc9PidMJywKNDQ5OD0+J0wnLAo0NDk5PT4nTCcsCjQ1MDA9PidMJywKNDUwMT0+J0wnLAo0NTAyPT4nTCcsCjQ1MDM9PidMJywKNDUwND0+J0wnLAo0NTA1PT4nTCcsCjQ1MDY9PidMJywKNDUwNz0+J0wnLAo0NTA4PT4nTCcsCjQ1MDk9PidMJywKNDUxMD0+J0wnLAo0NTExPT4nTCcsCjQ1MTI9PidMJywKNDUxMz0+J0wnLAo0NTE0PT4nTCcsCjQ1MjA9PidMJywKNDUyMT0+J0wnLAo0NTIyPT4nTCcsCjQ1MjM9PidMJywKNDUyND0+J0wnLAo0NTI1PT4nTCcsCjQ1MjY9PidMJywKNDUyNz0+J0wnLAo0NTI4PT4nTCcsCjQ1Mjk9PidMJywKNDUzMD0+J0wnLAo0NTMxPT4nTCcsCjQ1MzI9PidMJywKNDUzMz0+J0wnLAo0NTM0PT4nTCcsCjQ1MzU9PidMJywKNDUzNj0+J0wnLAo0NTM3PT4nTCcsCjQ1Mzg9PidMJywKNDUzOT0+J0wnLAo0NTQwPT4nTCcsCjQ1NDE9PidMJywKNDU0Mj0+J0wnLAo0NTQzPT4nTCcsCjQ1NDQ9PidMJywKNDU0NT0+J0wnLAo0NTQ2PT4nTCcsCjQ1NDc9PidMJywKNDU0OD0+J0wnLAo0NTQ5PT4nTCcsCjQ1NTA9PidMJywKNDU1MT0+J0wnLAo0NTUyPT4nTCcsCjQ1NTM9PidMJywKNDU1ND0+J0wnLAo0NTU1PT4nTCcsCjQ1NTY9PidMJywKNDU1Nz0+J0wnLAo0NTU4PT4nTCcsCjQ1NTk9PidMJywKNDU2MD0+J0wnLAo0NTYxPT4nTCcsCjQ1NjI9PidMJywKNDU2Mz0+J0wnLAo0NTY0PT4nTCcsCjQ1NjU9PidMJywKNDU2Nj0+J0wnLAo0NTY3PT4nTCcsCjQ1Njg9PidMJywKNDU2OT0+J0wnLAo0NTcwPT4nTCcsCjQ1NzE9PidMJywKNDU3Mj0+J0wnLAo0NTczPT4nTCcsCjQ1NzQ9PidMJywKNDU3NT0+J0wnLAo0NTc2PT4nTCcsCjQ1Nzc9PidMJywKNDU3OD0+J0wnLAo0NTc5PT4nTCcsCjQ1ODA9PidMJywKNDU4MT0+J0wnLAo0NTgyPT4nTCcsCjQ1ODM9PidMJywKNDU4ND0+J0wnLAo0NTg1PT4nTCcsCjQ1ODY9PidMJywKNDU4Nz0+J0wnLAo0NTg4PT4nTCcsCjQ1ODk9PidMJywKNDU5MD0+J0wnLAo0NTkxPT4nTCcsCjQ1OTI9PidMJywKNDU5Mz0+J0wnLAo0NTk0PT4nTCcsCjQ1OTU9PidMJywKNDU5Nj0+J0wnLAo0NTk3PT4nTCcsCjQ1OTg9PidMJywKNDU5OT0+J0wnLAo0NjAwPT4nTCcsCjQ2MDE9PidMJywKNDYwOD0+J0wnLAo0NjA5PT4nTCcsCjQ2MTA9PidMJywKNDYxMT0+J0wnLAo0NjEyPT4nTCcsCjQ2MTM9PidMJywKNDYxND0+J0wnLAo0NjE1PT4nTCcsCjQ2MTY9PidMJywKNDYxNz0+J0wnLAo0NjE4PT4nTCcsCjQ2MTk9PidMJywKNDYyMD0+J0wnLAo0NjIxPT4nTCcsCjQ2MjI9PidMJywKNDYyMz0+J0wnLAo0NjI0PT4nTCcsCjQ2MjU9PidMJywKNDYyNj0+J0wnLAo0NjI3PT4nTCcsCjQ2Mjg9PidMJywKNDYyOT0+J0wnLAo0NjMwPT4nTCcsCjQ2MzE9PidMJywKNDYzMj0+J0wnLAo0NjMzPT4nTCcsCjQ2MzQ9PidMJywKNDYzNT0+J0wnLAo0NjM2PT4nTCcsCjQ2Mzc9PidMJywKNDYzOD0+J0wnLAo0NjM5PT4nTCcsCjQ2NDA9PidMJywKNDY0MT0+J0wnLAo0NjQyPT4nTCcsCjQ2NDM9PidMJywKNDY0ND0+J0wnLAo0NjQ1PT4nTCcsCjQ2NDY9PidMJywKNDY0Nz0+J0wnLAo0NjQ4PT4nTCcsCjQ2NDk9PidMJywKNDY1MD0+J0wnLAo0NjUxPT4nTCcsCjQ2NTI9PidMJywKNDY1Mz0+J0wnLAo0NjU0PT4nTCcsCjQ2NTU9PidMJywKNDY1Nj0+J0wnLAo0NjU3PT4nTCcsCjQ2NTg9PidMJywKNDY1OT0+J0wnLAo0NjYwPT4nTCcsCjQ2NjE9PidMJywKNDY2Mj0+J0wnLAo0NjYzPT4nTCcsCjQ2NjQ9PidMJywKNDY2NT0+J0wnLAo0NjY2PT4nTCcsCjQ2Njc9PidMJywKNDY2OD0+J0wnLAo0NjY5PT4nTCcsCjQ2NzA9PidMJywKNDY3MT0+J0wnLAo0NjcyPT4nTCcsCjQ2NzM9PidMJywKNDY3ND0+J0wnLAo0Njc1PT4nTCcsCjQ2NzY9PidMJywKNDY3Nz0+J0wnLAo0Njc4PT4nTCcsCjQ2Nzk9PidMJywKNDY4MD0+J0wnLAo0NjgyPT4nTCcsCjQ2ODM9PidMJywKNDY4ND0+J0wnLAo0Njg1PT4nTCcsCjQ2ODg9PidMJywKNDY4OT0+J0wnLAo0NjkwPT4nTCcsCjQ2OTE9PidMJywKNDY5Mj0+J0wnLAo0NjkzPT4nTCcsCjQ2OTQ9PidMJywKNDY5Nj0+J0wnLAo0Njk4PT4nTCcsCjQ2OTk9PidMJywKNDcwMD0+J0wnLAo0NzAxPT4nTCcsCjQ3MDQ9PidMJywKNDcwNT0+J0wnLAo0NzA2PT4nTCcsCjQ3MDc9PidMJywKNDcwOD0+J0wnLAo0NzA5PT4nTCcsCjQ3MTA9PidMJywKNDcxMT0+J0wnLAo0NzEyPT4nTCcsCjQ3MTM9PidMJywKNDcxND0+J0wnLAo0NzE1PT4nTCcsCjQ3MTY9PidMJywKNDcxNz0+J0wnLAo0NzE4PT4nTCcsCjQ3MTk9PidMJywKNDcyMD0+J0wnLAo0NzIxPT4nTCcsCjQ3MjI9PidMJywKNDcyMz0+J0wnLAo0NzI0PT4nTCcsCjQ3MjU9PidMJywKNDcyNj0+J0wnLAo0NzI3PT4nTCcsCjQ3Mjg9PidMJywKNDcyOT0+J0wnLAo0NzMwPT4nTCcsCjQ3MzE9PidMJywKNDczMj0+J0wnLAo0NzMzPT4nTCcsCjQ3MzQ9PidMJywKNDczNT0+J0wnLAo0NzM2PT4nTCcsCjQ3Mzc9PidMJywKNDczOD0+J0wnLAo0NzM5PT4nTCcsCjQ3NDA9PidMJywKNDc0MT0+J0wnLAo0NzQyPT4nTCcsCjQ3NDM9PidMJywKNDc0ND0+J0wnLAo0NzQ2PT4nTCcsCjQ3NDc9PidMJywKNDc0OD0+J0wnLAo0NzQ5PT4nTCcsCjQ3NTI9PidMJywKNDc1Mz0+J0wnLAo0NzU0PT4nTCcsCjQ3NTU9PidMJywKNDc1Nj0+J0wnLAo0NzU3PT4nTCcsCjQ3NTg9PidMJywKNDc1OT0+J0wnLAo0NzYwPT4nTCcsCjQ3NjE9PidMJywKNDc2Mj0+J0wnLAo0NzYzPT4nTCcsCjQ3NjQ9PidMJywKNDc2NT0+J0wnLAo0NzY2PT4nTCcsCjQ3Njc9PidMJywKNDc2OD0+J0wnLAo0NzY5PT4nTCcsCjQ3NzA9PidMJywKNDc3MT0+J0wnLAo0NzcyPT4nTCcsCjQ3NzM9PidMJywKNDc3ND0+J0wnLAo0Nzc1PT4nTCcsCjQ3NzY9PidMJywKNDc3Nz0+J0wnLAo0Nzc4PT4nTCcsCjQ3Nzk9PidMJywKNDc4MD0+J0wnLAo0NzgxPT4nTCcsCjQ3ODI9PidMJywKNDc4Mz0+J0wnLAo0Nzg0PT4nTCcsCjQ3ODY9PidMJywKNDc4Nz0+J0wnLAo0Nzg4PT4nTCcsCjQ3ODk9PidMJywKNDc5Mj0+J0wnLAo0NzkzPT4nTCcsCjQ3OTQ9PidMJywKNDc5NT0+J0wnLAo0Nzk2PT4nTCcsCjQ3OTc9PidMJywKNDc5OD0+J0wnLAo0ODAwPT4nTCcsCjQ4MDI9PidMJywKNDgwMz0+J0wnLAo0ODA0PT4nTCcsCjQ4MDU9PidMJywKNDgwOD0+J0wnLAo0ODA5PT4nTCcsCjQ4MTA9PidMJywKNDgxMT0+J0wnLAo0ODEyPT4nTCcsCjQ4MTM9PidMJywKNDgxND0+J0wnLAo0ODE1PT4nTCcsCjQ4MTY9PidMJywKNDgxNz0+J0wnLAo0ODE4PT4nTCcsCjQ4MTk9PidMJywKNDgyMD0+J0wnLAo0ODIxPT4nTCcsCjQ4MjI9PidMJywKNDgyND0+J0wnLAo0ODI1PT4nTCcsCjQ4MjY9PidMJywKNDgyNz0+J0wnLAo0ODI4PT4nTCcsCjQ4Mjk9PidMJywKNDgzMD0+J0wnLAo0ODMxPT4nTCcsCjQ4MzI9PidMJywKNDgzMz0+J0wnLAo0ODM0PT4nTCcsCjQ4MzU9PidMJywKNDgzNj0+J0wnLAo0ODM3PT4nTCcsCjQ4Mzg9PidMJywKNDgzOT0+J0wnLAo0ODQwPT4nTCcsCjQ4NDE9PidMJywKNDg0Mj0+J0wnLAo0ODQzPT4nTCcsCjQ4NDQ9PidMJywKNDg0NT0+J0wnLAo0ODQ2PT4nTCcsCjQ4NDc9PidMJywKNDg0OD0+J0wnLAo0ODQ5PT4nTCcsCjQ4NTA9PidMJywKNDg1MT0+J0wnLAo0ODUyPT4nTCcsCjQ4NTM9PidMJywKNDg1ND0+J0wnLAo0ODU1PT4nTCcsCjQ4NTY9PidMJywKNDg1Nz0+J0wnLAo0ODU4PT4nTCcsCjQ4NTk9PidMJywKNDg2MD0+J0wnLAo0ODYxPT4nTCcsCjQ4NjI9PidMJywKNDg2Mz0+J0wnLAo0ODY0PT4nTCcsCjQ4NjU9PidMJywKNDg2Nj0+J0wnLAo0ODY3PT4nTCcsCjQ4Njg9PidMJywKNDg2OT0+J0wnLAo0ODcwPT4nTCcsCjQ4NzE9PidMJywKNDg3Mj0+J0wnLAo0ODczPT4nTCcsCjQ4NzQ9PidMJywKNDg3NT0+J0wnLAo0ODc2PT4nTCcsCjQ4Nzc9PidMJywKNDg3OD0+J0wnLAo0ODc5PT4nTCcsCjQ4ODA9PidMJywKNDg4Mj0+J0wnLAo0ODgzPT4nTCcsCjQ4ODQ9PidMJywKNDg4NT0+J0wnLAo0ODg4PT4nTCcsCjQ4ODk9PidMJywKNDg5MD0+J0wnLAo0ODkxPT4nTCcsCjQ4OTI9PidMJywKNDg5Mz0+J0wnLAo0ODk0PT4nTCcsCjQ4OTU9PidMJywKNDg5Nj0+J0wnLAo0ODk3PT4nTCcsCjQ4OTg9PidMJywKNDg5OT0+J0wnLAo0OTAwPT4nTCcsCjQ5MDE9PidMJywKNDkwMj0+J0wnLAo0OTAzPT4nTCcsCjQ5MDQ9PidMJywKNDkwNT0+J0wnLAo0OTA2PT4nTCcsCjQ5MDc9PidMJywKNDkwOD0+J0wnLAo0OTA5PT4nTCcsCjQ5MTA9PidMJywKNDkxMT0+J0wnLAo0OTEyPT4nTCcsCjQ5MTM9PidMJywKNDkxND0+J0wnLAo0OTE1PT4nTCcsCjQ5MTY9PidMJywKNDkxNz0+J0wnLAo0OTE4PT4nTCcsCjQ5MTk9PidMJywKNDkyMD0+J0wnLAo0OTIxPT4nTCcsCjQ5MjI9PidMJywKNDkyMz0+J0wnLAo0OTI0PT4nTCcsCjQ5MjU9PidMJywKNDkyNj0+J0wnLAo0OTI3PT4nTCcsCjQ5Mjg9PidMJywKNDkyOT0+J0wnLAo0OTMwPT4nTCcsCjQ5MzE9PidMJywKNDkzMj0+J0wnLAo0OTMzPT4nTCcsCjQ5MzQ9PidMJywKNDkzNT0+J0wnLAo0OTM2PT4nTCcsCjQ5Mzc9PidMJywKNDkzOD0+J0wnLAo0OTM5PT4nTCcsCjQ5NDA9PidMJywKNDk0MT0+J0wnLAo0OTQyPT4nTCcsCjQ5NDM9PidMJywKNDk0ND0+J0wnLAo0OTQ1PT4nTCcsCjQ5NDY9PidMJywKNDk0Nz0+J0wnLAo0OTQ4PT4nTCcsCjQ5NDk9PidMJywKNDk1MD0+J0wnLAo0OTUxPT4nTCcsCjQ5NTI9PidMJywKNDk1Mz0+J0wnLAo0OTU0PT4nTCcsCjQ5NTk9PidOU00nLAo0OTYwPT4nTCcsCjQ5NjE9PidMJywKNDk2Mj0+J0wnLAo0OTYzPT4nTCcsCjQ5NjQ9PidMJywKNDk2NT0+J0wnLAo0OTY2PT4nTCcsCjQ5Njc9PidMJywKNDk2OD0+J0wnLAo0OTY5PT4nTCcsCjQ5NzA9PidMJywKNDk3MT0+J0wnLAo0OTcyPT4nTCcsCjQ5NzM9PidMJywKNDk3ND0+J0wnLAo0OTc1PT4nTCcsCjQ5NzY9PidMJywKNDk3Nz0+J0wnLAo0OTc4PT4nTCcsCjQ5Nzk9PidMJywKNDk4MD0+J0wnLAo0OTgxPT4nTCcsCjQ5ODI9PidMJywKNDk4Mz0+J0wnLAo0OTg0PT4nTCcsCjQ5ODU9PidMJywKNDk4Nj0+J0wnLAo0OTg3PT4nTCcsCjQ5ODg9PidMJywKNDk5Mj0+J0wnLAo0OTkzPT4nTCcsCjQ5OTQ9PidMJywKNDk5NT0+J0wnLAo0OTk2PT4nTCcsCjQ5OTc9PidMJywKNDk5OD0+J0wnLAo0OTk5PT4nTCcsCjUwMDA9PidMJywKNTAwMT0+J0wnLAo1MDAyPT4nTCcsCjUwMDM9PidMJywKNTAwND0+J0wnLAo1MDA1PT4nTCcsCjUwMDY9PidMJywKNTAwNz0+J0wnLAo1MDA4PT4nT04nLAo1MDA5PT4nT04nLAo1MDEwPT4nT04nLAo1MDExPT4nT04nLAo1MDEyPT4nT04nLAo1MDEzPT4nT04nLAo1MDE0PT4nT04nLAo1MDE1PT4nT04nLAo1MDE2PT4nT04nLAo1MDE3PT4nT04nLAo1MDI0PT4nTCcsCjUwMjU9PidMJywKNTAyNj0+J0wnLAo1MDI3PT4nTCcsCjUwMjg9PidMJywKNTAyOT0+J0wnLAo1MDMwPT4nTCcsCjUwMzE9PidMJywKNTAzMj0+J0wnLAo1MDMzPT4nTCcsCjUwMzQ9PidMJywKNTAzNT0+J0wnLAo1MDM2PT4nTCcsCjUwMzc9PidMJywKNTAzOD0+J0wnLAo1MDM5PT4nTCcsCjUwNDA9PidMJywKNTA0MT0+J0wnLAo1MDQyPT4nTCcsCjUwNDM9PidMJywKNTA0ND0+J0wnLAo1MDQ1PT4nTCcsCjUwNDY9PidMJywKNTA0Nz0+J0wnLAo1MDQ4PT4nTCcsCjUwNDk9PidMJywKNTA1MD0+J0wnLAo1MDUxPT4nTCcsCjUwNTI9PidMJywKNTA1Mz0+J0wnLAo1MDU0PT4nTCcsCjUwNTU9PidMJywKNTA1Nj0+J0wnLAo1MDU3PT4nTCcsCjUwNTg9PidMJywKNTA1OT0+J0wnLAo1MDYwPT4nTCcsCjUwNjE9PidMJywKNTA2Mj0+J0wnLAo1MDYzPT4nTCcsCjUwNjQ9PidMJywKNTA2NT0+J0wnLAo1MDY2PT4nTCcsCjUwNjc9PidMJywKNTA2OD0+J0wnLAo1MDY5PT4nTCcsCjUwNzA9PidMJywKNTA3MT0+J0wnLAo1MDcyPT4nTCcsCjUwNzM9PidMJywKNTA3ND0+J0wnLAo1MDc1PT4nTCcsCjUwNzY9PidMJywKNTA3Nz0+J0wnLAo1MDc4PT4nTCcsCjUwNzk9PidMJywKNTA4MD0+J0wnLAo1MDgxPT4nTCcsCjUwODI9PidMJywKNTA4Mz0+J0wnLAo1MDg0PT4nTCcsCjUwODU9PidMJywKNTA4Nj0+J0wnLAo1MDg3PT4nTCcsCjUwODg9PidMJywKNTA4OT0+J0wnLAo1MDkwPT4nTCcsCjUwOTE9PidMJywKNTA5Mj0+J0wnLAo1MDkzPT4nTCcsCjUwOTQ9PidMJywKNTA5NT0+J0wnLAo1MDk2PT4nTCcsCjUwOTc9PidMJywKNTA5OD0+J0wnLAo1MDk5PT4nTCcsCjUxMDA9PidMJywKNTEwMT0+J0wnLAo1MTAyPT4nTCcsCjUxMDM9PidMJywKNTEwND0+J0wnLAo1MTA1PT4nTCcsCjUxMDY9PidMJywKNTEwNz0+J0wnLAo1MTA4PT4nTCcsCjUxMjE9PidMJywKNTEyMj0+J0wnLAo1MTIzPT4nTCcsCjUxMjQ9PidMJywKNTEyNT0+J0wnLAo1MTI2PT4nTCcsCjUxMjc9PidMJywKNTEyOD0+J0wnLAo1MTI5PT4nTCcsCjUxMzA9PidMJywKNTEzMT0+J0wnLAo1MTMyPT4nTCcsCjUxMzM9PidMJywKNTEzND0+J0wnLAo1MTM1PT4nTCcsCjUxMzY9PidMJywKNTEzNz0+J0wnLAo1MTM4PT4nTCcsCjUxMzk9PidMJywKNTE0MD0+J0wnLAo1MTQxPT4nTCcsCjUxNDI9PidMJywKNTE0Mz0+J0wnLAo1MTQ0PT4nTCcsCjUxNDU9PidMJywKNTE0Nj0+J0wnLAo1MTQ3PT4nTCcsCjUxNDg9PidMJywKNTE0OT0+J0wnLAo1MTUwPT4nTCcsCjUxNTE9PidMJywKNTE1Mj0+J0wnLAo1MTUzPT4nTCcsCjUxNTQ9PidMJywKNTE1NT0+J0wnLAo1MTU2PT4nTCcsCjUxNTc9PidMJywKNTE1OD0+J0wnLAo1MTU5PT4nTCcsCjUxNjA9PidMJywKNTE2MT0+J0wnLAo1MTYyPT4nTCcsCjUxNjM9PidMJywKNTE2ND0+J0wnLAo1MTY1PT4nTCcsCjUxNjY9PidMJywKNTE2Nz0+J0wnLAo1MTY4PT4nTCcsCjUxNjk9PidMJywKNTE3MD0+J0wnLAo1MTcxPT4nTCcsCjUxNzI9PidMJywKNTE3Mz0+J0wnLAo1MTc0PT4nTCcsCjUxNzU9PidMJywKNTE3Nj0+J0wnLAo1MTc3PT4nTCcsCjUxNzg9PidMJywKNTE3OT0+J0wnLAo1MTgwPT4nTCcsCjUxODE9PidMJywKNTE4Mj0+J0wnLAo1MTgzPT4nTCcsCjUxODQ9PidMJywKNTE4NT0+J0wnLAo1MTg2PT4nTCcsCjUxODc9PidMJywKNTE4OD0+J0wnLAo1MTg5PT4nTCcsCjUxOTA9PidMJywKNTE5MT0+J0wnLAo1MTkyPT4nTCcsCjUxOTM9PidMJywKNTE5ND0+J0wnLAo1MTk1PT4nTCcsCjUxOTY9PidMJywKNTE5Nz0+J0wnLAo1MTk4PT4nTCcsCjUxOTk9PidMJywKNTIwMD0+J0wnLAo1MjAxPT4nTCcsCjUyMDI9PidMJywKNTIwMz0+J0wnLAo1MjA0PT4nTCcsCjUyMDU9PidMJywKNTIwNj0+J0wnLAo1MjA3PT4nTCcsCjUyMDg9PidMJywKNTIwOT0+J0wnLAo1MjEwPT4nTCcsCjUyMTE9PidMJywKNTIxMj0+J0wnLAo1MjEzPT4nTCcsCjUyMTQ9PidMJywKNTIxNT0+J0wnLAo1MjE2PT4nTCcsCjUyMTc9PidMJywKNTIxOD0+J0wnLAo1MjE5PT4nTCcsCjUyMjA9PidMJywKNTIyMT0+J0wnLAo1MjIyPT4nTCcsCjUyMjM9PidMJywKNTIyND0+J0wnLAo1MjI1PT4nTCcsCjUyMjY9PidMJywKNTIyNz0+J0wnLAo1MjI4PT4nTCcsCjUyMjk9PidMJywKNTIzMD0+J0wnLAo1MjMxPT4nTCcsCjUyMzI9PidMJywKNTIzMz0+J0wnLAo1MjM0PT4nTCcsCjUyMzU9PidMJywKNTIzNj0+J0wnLAo1MjM3PT4nTCcsCjUyMzg9PidMJywKNTIzOT0+J0wnLAo1MjQwPT4nTCcsCjUyNDE9PidMJywKNTI0Mj0+J0wnLAo1MjQzPT4nTCcsCjUyNDQ9PidMJywKNTI0NT0+J0wnLAo1MjQ2PT4nTCcsCjUyNDc9PidMJywKNTI0OD0+J0wnLAo1MjQ5PT4nTCcsCjUyNTA9PidMJywKNTI1MT0+J0wnLAo1MjUyPT4nTCcsCjUyNTM9PidMJywKNTI1ND0+J0wnLAo1MjU1PT4nTCcsCjUyNTY9PidMJywKNTI1Nz0+J0wnLAo1MjU4PT4nTCcsCjUyNTk9PidMJywKNTI2MD0+J0wnLAo1MjYxPT4nTCcsCjUyNjI9PidMJywKNTI2Mz0+J0wnLAo1MjY0PT4nTCcsCjUyNjU9PidMJywKNTI2Nj0+J0wnLAo1MjY3PT4nTCcsCjUyNjg9PidMJywKNTI2OT0+J0wnLAo1MjcwPT4nTCcsCjUyNzE9PidMJywKNTI3Mj0+J0wnLAo1MjczPT4nTCcsCjUyNzQ9PidMJywKNTI3NT0+J0wnLAo1Mjc2PT4nTCcsCjUyNzc9PidMJywKNTI3OD0+J0wnLAo1Mjc5PT4nTCcsCjUyODA9PidMJywKNTI4MT0+J0wnLAo1MjgyPT4nTCcsCjUyODM9PidMJywKNTI4ND0+J0wnLAo1Mjg1PT4nTCcsCjUyODY9PidMJywKNTI4Nz0+J0wnLAo1Mjg4PT4nTCcsCjUyODk9PidMJywKNTI5MD0+J0wnLAo1MjkxPT4nTCcsCjUyOTI9PidMJywKNTI5Mz0+J0wnLAo1Mjk0PT4nTCcsCjUyOTU9PidMJywKNTI5Nj0+J0wnLAo1Mjk3PT4nTCcsCjUyOTg9PidMJywKNTI5OT0+J0wnLAo1MzAwPT4nTCcsCjUzMDE9PidMJywKNTMwMj0+J0wnLAo1MzAzPT4nTCcsCjUzMDQ9PidMJywKNTMwNT0+J0wnLAo1MzA2PT4nTCcsCjUzMDc9PidMJywKNTMwOD0+J0wnLAo1MzA5PT4nTCcsCjUzMTA9PidMJywKNTMxMT0+J0wnLAo1MzEyPT4nTCcsCjUzMTM9PidMJywKNTMxND0+J0wnLAo1MzE1PT4nTCcsCjUzMTY9PidMJywKNTMxNz0+J0wnLAo1MzE4PT4nTCcsCjUzMTk9PidMJywKNTMyMD0+J0wnLAo1MzIxPT4nTCcsCjUzMjI9PidMJywKNTMyMz0+J0wnLAo1MzI0PT4nTCcsCjUzMjU9PidMJywKNTMyNj0+J0wnLAo1MzI3PT4nTCcsCjUzMjg9PidMJywKNTMyOT0+J0wnLAo1MzMwPT4nTCcsCjUzMzE9PidMJywKNTMzMj0+J0wnLAo1MzMzPT4nTCcsCjUzMzQ9PidMJywKNTMzNT0+J0wnLAo1MzM2PT4nTCcsCjUzMzc9PidMJywKNTMzOD0+J0wnLAo1MzM5PT4nTCcsCjUzNDA9PidMJywKNTM0MT0+J0wnLAo1MzQyPT4nTCcsCjUzNDM9PidMJywKNTM0ND0+J0wnLAo1MzQ1PT4nTCcsCjUzNDY9PidMJywKNTM0Nz0+J0wnLAo1MzQ4PT4nTCcsCjUzNDk9PidMJywKNTM1MD0+J0wnLAo1MzUxPT4nTCcsCjUzNTI9PidMJywKNTM1Mz0+J0wnLAo1MzU0PT4nTCcsCjUzNTU9PidMJywKNTM1Nj0+J0wnLAo1MzU3PT4nTCcsCjUzNTg9PidMJywKNTM1OT0+J0wnLAo1MzYwPT4nTCcsCjUzNjE9PidMJywKNTM2Mj0+J0wnLAo1MzYzPT4nTCcsCjUzNjQ9PidMJywKNTM2NT0+J0wnLAo1MzY2PT4nTCcsCjUzNjc9PidMJywKNTM2OD0+J0wnLAo1MzY5PT4nTCcsCjUzNzA9PidMJywKNTM3MT0+J0wnLAo1MzcyPT4nTCcsCjUzNzM9PidMJywKNTM3ND0+J0wnLAo1Mzc1PT4nTCcsCjUzNzY9PidMJywKNTM3Nz0+J0wnLAo1Mzc4PT4nTCcsCjUzNzk9PidMJywKNTM4MD0+J0wnLAo1MzgxPT4nTCcsCjUzODI9PidMJywKNTM4Mz0+J0wnLAo1Mzg0PT4nTCcsCjUzODU9PidMJywKNTM4Nj0+J0wnLAo1Mzg3PT4nTCcsCjUzODg9PidMJywKNTM4OT0+J0wnLAo1MzkwPT4nTCcsCjUzOTE9PidMJywKNTM5Mj0+J0wnLAo1MzkzPT4nTCcsCjUzOTQ9PidMJywKNTM5NT0+J0wnLAo1Mzk2PT4nTCcsCjUzOTc9PidMJywKNTM5OD0+J0wnLAo1Mzk5PT4nTCcsCjU0MDA9PidMJywKNTQwMT0+J0wnLAo1NDAyPT4nTCcsCjU0MDM9PidMJywKNTQwND0+J0wnLAo1NDA1PT4nTCcsCjU0MDY9PidMJywKNTQwNz0+J0wnLAo1NDA4PT4nTCcsCjU0MDk9PidMJywKNTQxMD0+J0wnLAo1NDExPT4nTCcsCjU0MTI9PidMJywKNTQxMz0+J0wnLAo1NDE0PT4nTCcsCjU0MTU9PidMJywKNTQxNj0+J0wnLAo1NDE3PT4nTCcsCjU0MTg9PidMJywKNTQxOT0+J0wnLAo1NDIwPT4nTCcsCjU0MjE9PidMJywKNTQyMj0+J0wnLAo1NDIzPT4nTCcsCjU0MjQ9PidMJywKNTQyNT0+J0wnLAo1NDI2PT4nTCcsCjU0Mjc9PidMJywKNTQyOD0+J0wnLAo1NDI5PT4nTCcsCjU0MzA9PidMJywKNTQzMT0+J0wnLAo1NDMyPT4nTCcsCjU0MzM9PidMJywKNTQzND0+J0wnLAo1NDM1PT4nTCcsCjU0MzY9PidMJywKNTQzNz0+J0wnLAo1NDM4PT4nTCcsCjU0Mzk9PidMJywKNTQ0MD0+J0wnLAo1NDQxPT4nTCcsCjU0NDI9PidMJywKNTQ0Mz0+J0wnLAo1NDQ0PT4nTCcsCjU0NDU9PidMJywKNTQ0Nj0+J0wnLAo1NDQ3PT4nTCcsCjU0NDg9PidMJywKNTQ0OT0+J0wnLAo1NDUwPT4nTCcsCjU0NTE9PidMJywKNTQ1Mj0+J0wnLAo1NDUzPT4nTCcsCjU0NTQ9PidMJywKNTQ1NT0+J0wnLAo1NDU2PT4nTCcsCjU0NTc9PidMJywKNTQ1OD0+J0wnLAo1NDU5PT4nTCcsCjU0NjA9PidMJywKNTQ2MT0+J0wnLAo1NDYyPT4nTCcsCjU0NjM9PidMJywKNTQ2ND0+J0wnLAo1NDY1PT4nTCcsCjU0NjY9PidMJywKNTQ2Nz0+J0wnLAo1NDY4PT4nTCcsCjU0Njk9PidMJywKNTQ3MD0+J0wnLAo1NDcxPT4nTCcsCjU0NzI9PidMJywKNTQ3Mz0+J0wnLAo1NDc0PT4nTCcsCjU0NzU9PidMJywKNTQ3Nj0+J0wnLAo1NDc3PT4nTCcsCjU0Nzg9PidMJywKNTQ3OT0+J0wnLAo1NDgwPT4nTCcsCjU0ODE9PidMJywKNTQ4Mj0+J0wnLAo1NDgzPT4nTCcsCjU0ODQ9PidMJywKNTQ4NT0+J0wnLAo1NDg2PT4nTCcsCjU0ODc9PidMJywKNTQ4OD0+J0wnLAo1NDg5PT4nTCcsCjU0OTA9PidMJywKNTQ5MT0+J0wnLAo1NDkyPT4nTCcsCjU0OTM9PidMJywKNTQ5ND0+J0wnLAo1NDk1PT4nTCcsCjU0OTY9PidMJywKNTQ5Nz0+J0wnLAo1NDk4PT4nTCcsCjU0OTk9PidMJywKNTUwMD0+J0wnLAo1NTAxPT4nTCcsCjU1MDI9PidMJywKNTUwMz0+J0wnLAo1NTA0PT4nTCcsCjU1MDU9PidMJywKNTUwNj0+J0wnLAo1NTA3PT4nTCcsCjU1MDg9PidMJywKNTUwOT0+J0wnLAo1NTEwPT4nTCcsCjU1MTE9PidMJywKNTUxMj0+J0wnLAo1NTEzPT4nTCcsCjU1MTQ9PidMJywKNTUxNT0+J0wnLAo1NTE2PT4nTCcsCjU1MTc9PidMJywKNTUxOD0+J0wnLAo1NTE5PT4nTCcsCjU1MjA9PidMJywKNTUyMT0+J0wnLAo1NTIyPT4nTCcsCjU1MjM9PidMJywKNTUyND0+J0wnLAo1NTI1PT4nTCcsCjU1MjY9PidMJywKNTUyNz0+J0wnLAo1NTI4PT4nTCcsCjU1Mjk9PidMJywKNTUzMD0+J0wnLAo1NTMxPT4nTCcsCjU1MzI9PidMJywKNTUzMz0+J0wnLAo1NTM0PT4nTCcsCjU1MzU9PidMJywKNTUzNj0+J0wnLAo1NTM3PT4nTCcsCjU1Mzg9PidMJywKNTUzOT0+J0wnLAo1NTQwPT4nTCcsCjU1NDE9PidMJywKNTU0Mj0+J0wnLAo1NTQzPT4nTCcsCjU1NDQ9PidMJywKNTU0NT0+J0wnLAo1NTQ2PT4nTCcsCjU1NDc9PidMJywKNTU0OD0+J0wnLAo1NTQ5PT4nTCcsCjU1NTA9PidMJywKNTU1MT0+J0wnLAo1NTUyPT4nTCcsCjU1NTM9PidMJywKNTU1ND0+J0wnLAo1NTU1PT4nTCcsCjU1NTY9PidMJywKNTU1Nz0+J0wnLAo1NTU4PT4nTCcsCjU1NTk9PidMJywKNTU2MD0+J0wnLAo1NTYxPT4nTCcsCjU1NjI9PidMJywKNTU2Mz0+J0wnLAo1NTY0PT4nTCcsCjU1NjU9PidMJywKNTU2Nj0+J0wnLAo1NTY3PT4nTCcsCjU1Njg9PidMJywKNTU2OT0+J0wnLAo1NTcwPT4nTCcsCjU1NzE9PidMJywKNTU3Mj0+J0wnLAo1NTczPT4nTCcsCjU1NzQ9PidMJywKNTU3NT0+J0wnLAo1NTc2PT4nTCcsCjU1Nzc9PidMJywKNTU3OD0+J0wnLAo1NTc5PT4nTCcsCjU1ODA9PidMJywKNTU4MT0+J0wnLAo1NTgyPT4nTCcsCjU1ODM9PidMJywKNTU4ND0+J0wnLAo1NTg1PT4nTCcsCjU1ODY9PidMJywKNTU4Nz0+J0wnLAo1NTg4PT4nTCcsCjU1ODk9PidMJywKNTU5MD0+J0wnLAo1NTkxPT4nTCcsCjU1OTI9PidMJywKNTU5Mz0+J0wnLAo1NTk0PT4nTCcsCjU1OTU9PidMJywKNTU5Nj0+J0wnLAo1NTk3PT4nTCcsCjU1OTg9PidMJywKNTU5OT0+J0wnLAo1NjAwPT4nTCcsCjU2MDE9PidMJywKNTYwMj0+J0wnLAo1NjAzPT4nTCcsCjU2MDQ9PidMJywKNTYwNT0+J0wnLAo1NjA2PT4nTCcsCjU2MDc9PidMJywKNTYwOD0+J0wnLAo1NjA5PT4nTCcsCjU2MTA9PidMJywKNTYxMT0+J0wnLAo1NjEyPT4nTCcsCjU2MTM9PidMJywKNTYxND0+J0wnLAo1NjE1PT4nTCcsCjU2MTY9PidMJywKNTYxNz0+J0wnLAo1NjE4PT4nTCcsCjU2MTk9PidMJywKNTYyMD0+J0wnLAo1NjIxPT4nTCcsCjU2MjI9PidMJywKNTYyMz0+J0wnLAo1NjI0PT4nTCcsCjU2MjU9PidMJywKNTYyNj0+J0wnLAo1NjI3PT4nTCcsCjU2Mjg9PidMJywKNTYyOT0+J0wnLAo1NjMwPT4nTCcsCjU2MzE9PidMJywKNTYzMj0+J0wnLAo1NjMzPT4nTCcsCjU2MzQ9PidMJywKNTYzNT0+J0wnLAo1NjM2PT4nTCcsCjU2Mzc9PidMJywKNTYzOD0+J0wnLAo1NjM5PT4nTCcsCjU2NDA9PidMJywKNTY0MT0+J0wnLAo1NjQyPT4nTCcsCjU2NDM9PidMJywKNTY0ND0+J0wnLAo1NjQ1PT4nTCcsCjU2NDY9PidMJywKNTY0Nz0+J0wnLAo1NjQ4PT4nTCcsCjU2NDk9PidMJywKNTY1MD0+J0wnLAo1NjUxPT4nTCcsCjU2NTI9PidMJywKNTY1Mz0+J0wnLAo1NjU0PT4nTCcsCjU2NTU9PidMJywKNTY1Nj0+J0wnLAo1NjU3PT4nTCcsCjU2NTg9PidMJywKNTY1OT0+J0wnLAo1NjYwPT4nTCcsCjU2NjE9PidMJywKNTY2Mj0+J0wnLAo1NjYzPT4nTCcsCjU2NjQ9PidMJywKNTY2NT0+J0wnLAo1NjY2PT4nTCcsCjU2Njc9PidMJywKNTY2OD0+J0wnLAo1NjY5PT4nTCcsCjU2NzA9PidMJywKNTY3MT0+J0wnLAo1NjcyPT4nTCcsCjU2NzM9PidMJywKNTY3ND0+J0wnLAo1Njc1PT4nTCcsCjU2NzY9PidMJywKNTY3Nz0+J0wnLAo1Njc4PT4nTCcsCjU2Nzk9PidMJywKNTY4MD0+J0wnLAo1NjgxPT4nTCcsCjU2ODI9PidMJywKNTY4Mz0+J0wnLAo1Njg0PT4nTCcsCjU2ODU9PidMJywKNTY4Nj0+J0wnLAo1Njg3PT4nTCcsCjU2ODg9PidMJywKNTY4OT0+J0wnLAo1NjkwPT4nTCcsCjU2OTE9PidMJywKNTY5Mj0+J0wnLAo1NjkzPT4nTCcsCjU2OTQ9PidMJywKNTY5NT0+J0wnLAo1Njk2PT4nTCcsCjU2OTc9PidMJywKNTY5OD0+J0wnLAo1Njk5PT4nTCcsCjU3MDA9PidMJywKNTcwMT0+J0wnLAo1NzAyPT4nTCcsCjU3MDM9PidMJywKNTcwND0+J0wnLAo1NzA1PT4nTCcsCjU3MDY9PidMJywKNTcwNz0+J0wnLAo1NzA4PT4nTCcsCjU3MDk9PidMJywKNTcxMD0+J0wnLAo1NzExPT4nTCcsCjU3MTI9PidMJywKNTcxMz0+J0wnLAo1NzE0PT4nTCcsCjU3MTU9PidMJywKNTcxNj0+J0wnLAo1NzE3PT4nTCcsCjU3MTg9PidMJywKNTcxOT0+J0wnLAo1NzIwPT4nTCcsCjU3MjE9PidMJywKNTcyMj0+J0wnLAo1NzIzPT4nTCcsCjU3MjQ9PidMJywKNTcyNT0+J0wnLAo1NzI2PT4nTCcsCjU3Mjc9PidMJywKNTcyOD0+J0wnLAo1NzI5PT4nTCcsCjU3MzA9PidMJywKNTczMT0+J0wnLAo1NzMyPT4nTCcsCjU3MzM9PidMJywKNTczND0+J0wnLAo1NzM1PT4nTCcsCjU3MzY9PidMJywKNTczNz0+J0wnLAo1NzM4PT4nTCcsCjU3Mzk9PidMJywKNTc0MD0+J0wnLAo1NzQxPT4nTCcsCjU3NDI9PidMJywKNTc0Mz0+J0wnLAo1NzQ0PT4nTCcsCjU3NDU9PidMJywKNTc0Nj0+J0wnLAo1NzQ3PT4nTCcsCjU3NDg9PidMJywKNTc0OT0+J0wnLAo1NzUwPT4nTCcsCjU3NjA9PidXUycsCjU3NjE9PidMJywKNTc2Mj0+J0wnLAo1NzYzPT4nTCcsCjU3NjQ9PidMJywKNTc2NT0+J0wnLAo1NzY2PT4nTCcsCjU3Njc9PidMJywKNTc2OD0+J0wnLAo1NzY5PT4nTCcsCjU3NzA9PidMJywKNTc3MT0+J0wnLAo1NzcyPT4nTCcsCjU3NzM9PidMJywKNTc3ND0+J0wnLAo1Nzc1PT4nTCcsCjU3NzY9PidMJywKNTc3Nz0+J0wnLAo1Nzc4PT4nTCcsCjU3Nzk9PidMJywKNTc4MD0+J0wnLAo1NzgxPT4nTCcsCjU3ODI9PidMJywKNTc4Mz0+J0wnLAo1Nzg0PT4nTCcsCjU3ODU9PidMJywKNTc4Nj0+J0wnLAo1Nzg3PT4nT04nLAo1Nzg4PT4nT04nLAo1NzkyPT4nTCcsCjU3OTM9PidMJywKNTc5ND0+J0wnLAo1Nzk1PT4nTCcsCjU3OTY9PidMJywKNTc5Nz0+J0wnLAo1Nzk4PT4nTCcsCjU3OTk9PidMJywKNTgwMD0+J0wnLAo1ODAxPT4nTCcsCjU4MDI9PidMJywKNTgwMz0+J0wnLAo1ODA0PT4nTCcsCjU4MDU9PidMJywKNTgwNj0+J0wnLAo1ODA3PT4nTCcsCjU4MDg9PidMJywKNTgwOT0+J0wnLAo1ODEwPT4nTCcsCjU4MTE9PidMJywKNTgxMj0+J0wnLAo1ODEzPT4nTCcsCjU4MTQ9PidMJywKNTgxNT0+J0wnLAo1ODE2PT4nTCcsCjU4MTc9PidMJywKNTgxOD0+J0wnLAo1ODE5PT4nTCcsCjU4MjA9PidMJywKNTgyMT0+J0wnLAo1ODIyPT4nTCcsCjU4MjM9PidMJywKNTgyND0+J0wnLAo1ODI1PT4nTCcsCjU4MjY9PidMJywKNTgyNz0+J0wnLAo1ODI4PT4nTCcsCjU4Mjk9PidMJywKNTgzMD0+J0wnLAo1ODMxPT4nTCcsCjU4MzI9PidMJywKNTgzMz0+J0wnLAo1ODM0PT4nTCcsCjU4MzU9PidMJywKNTgzNj0+J0wnLAo1ODM3PT4nTCcsCjU4Mzg9PidMJywKNTgzOT0+J0wnLAo1ODQwPT4nTCcsCjU4NDE9PidMJywKNTg0Mj0+J0wnLAo1ODQzPT4nTCcsCjU4NDQ9PidMJywKNTg0NT0+J0wnLAo1ODQ2PT4nTCcsCjU4NDc9PidMJywKNTg0OD0+J0wnLAo1ODQ5PT4nTCcsCjU4NTA9PidMJywKNTg1MT0+J0wnLAo1ODUyPT4nTCcsCjU4NTM9PidMJywKNTg1ND0+J0wnLAo1ODU1PT4nTCcsCjU4NTY9PidMJywKNTg1Nz0+J0wnLAo1ODU4PT4nTCcsCjU4NTk9PidMJywKNTg2MD0+J0wnLAo1ODYxPT4nTCcsCjU4NjI9PidMJywKNTg2Mz0+J0wnLAo1ODY0PT4nTCcsCjU4NjU9PidMJywKNTg2Nj0+J0wnLAo1ODY3PT4nTCcsCjU4Njg9PidMJywKNTg2OT0+J0wnLAo1ODcwPT4nTCcsCjU4NzE9PidMJywKNTg3Mj0+J0wnLAo1ODg4PT4nTCcsCjU4ODk9PidMJywKNTg5MD0+J0wnLAo1ODkxPT4nTCcsCjU4OTI9PidMJywKNTg5Mz0+J0wnLAo1ODk0PT4nTCcsCjU4OTU9PidMJywKNTg5Nj0+J0wnLAo1ODk3PT4nTCcsCjU4OTg9PidMJywKNTg5OT0+J0wnLAo1OTAwPT4nTCcsCjU5MDI9PidMJywKNTkwMz0+J0wnLAo1OTA0PT4nTCcsCjU5MDU9PidMJywKNTkwNj0+J05TTScsCjU5MDc9PidOU00nLAo1OTA4PT4nTlNNJywKNTkyMD0+J0wnLAo1OTIxPT4nTCcsCjU5MjI9PidMJywKNTkyMz0+J0wnLAo1OTI0PT4nTCcsCjU5MjU9PidMJywKNTkyNj0+J0wnLAo1OTI3PT4nTCcsCjU5Mjg9PidMJywKNTkyOT0+J0wnLAo1OTMwPT4nTCcsCjU5MzE9PidMJywKNTkzMj0+J0wnLAo1OTMzPT4nTCcsCjU5MzQ9PidMJywKNTkzNT0+J0wnLAo1OTM2PT4nTCcsCjU5Mzc9PidMJywKNTkzOD0+J05TTScsCjU5Mzk9PidOU00nLAo1OTQwPT4nTlNNJywKNTk0MT0+J0wnLAo1OTQyPT4nTCcsCjU5NTI9PidMJywKNTk1Mz0+J0wnLAo1OTU0PT4nTCcsCjU5NTU9PidMJywKNTk1Nj0+J0wnLAo1OTU3PT4nTCcsCjU5NTg9PidMJywKNTk1OT0+J0wnLAo1OTYwPT4nTCcsCjU5NjE9PidMJywKNTk2Mj0+J0wnLAo1OTYzPT4nTCcsCjU5NjQ9PidMJywKNTk2NT0+J0wnLAo1OTY2PT4nTCcsCjU5Njc9PidMJywKNTk2OD0+J0wnLAo1OTY5PT4nTCcsCjU5NzA9PidOU00nLAo1OTcxPT4nTlNNJywKNTk4ND0+J0wnLAo1OTg1PT4nTCcsCjU5ODY9PidMJywKNTk4Nz0+J0wnLAo1OTg4PT4nTCcsCjU5ODk9PidMJywKNTk5MD0+J0wnLAo1OTkxPT4nTCcsCjU5OTI9PidMJywKNTk5Mz0+J0wnLAo1OTk0PT4nTCcsCjU5OTU9PidMJywKNTk5Nj0+J0wnLAo1OTk4PT4nTCcsCjU5OTk9PidMJywKNjAwMD0+J0wnLAo2MDAyPT4nTlNNJywKNjAwMz0+J05TTScsCjYwMTY9PidMJywKNjAxNz0+J0wnLAo2MDE4PT4nTCcsCjYwMTk9PidMJywKNjAyMD0+J0wnLAo2MDIxPT4nTCcsCjYwMjI9PidMJywKNjAyMz0+J0wnLAo2MDI0PT4nTCcsCjYwMjU9PidMJywKNjAyNj0+J0wnLAo2MDI3PT4nTCcsCjYwMjg9PidMJywKNjAyOT0+J0wnLAo2MDMwPT4nTCcsCjYwMzE9PidMJywKNjAzMj0+J0wnLAo2MDMzPT4nTCcsCjYwMzQ9PidMJywKNjAzNT0+J0wnLAo2MDM2PT4nTCcsCjYwMzc9PidMJywKNjAzOD0+J0wnLAo2MDM5PT4nTCcsCjYwNDA9PidMJywKNjA0MT0+J0wnLAo2MDQyPT4nTCcsCjYwNDM9PidMJywKNjA0ND0+J0wnLAo2MDQ1PT4nTCcsCjYwNDY9PidMJywKNjA0Nz0+J0wnLAo2MDQ4PT4nTCcsCjYwNDk9PidMJywKNjA1MD0+J0wnLAo2MDUxPT4nTCcsCjYwNTI9PidMJywKNjA1Mz0+J0wnLAo2MDU0PT4nTCcsCjYwNTU9PidMJywKNjA1Nj0+J0wnLAo2MDU3PT4nTCcsCjYwNTg9PidMJywKNjA1OT0+J0wnLAo2MDYwPT4nTCcsCjYwNjE9PidMJywKNjA2Mj0+J0wnLAo2MDYzPT4nTCcsCjYwNjQ9PidMJywKNjA2NT0+J0wnLAo2MDY2PT4nTCcsCjYwNjc9PidMJywKNjA2OD0+J0wnLAo2MDY5PT4nTCcsCjYwNzA9PidMJywKNjA3MT0+J05TTScsCjYwNzI9PidOU00nLAo2MDczPT4nTlNNJywKNjA3ND0+J05TTScsCjYwNzU9PidOU00nLAo2MDc2PT4nTlNNJywKNjA3Nz0+J05TTScsCjYwNzg9PidMJywKNjA3OT0+J0wnLAo2MDgwPT4nTCcsCjYwODE9PidMJywKNjA4Mj0+J0wnLAo2MDgzPT4nTCcsCjYwODQ9PidMJywKNjA4NT0+J0wnLAo2MDg2PT4nTlNNJywKNjA4Nz0+J0wnLAo2MDg4PT4nTCcsCjYwODk9PidOU00nLAo2MDkwPT4nTlNNJywKNjA5MT0+J05TTScsCjYwOTI9PidOU00nLAo2MDkzPT4nTlNNJywKNjA5ND0+J05TTScsCjYwOTU9PidOU00nLAo2MDk2PT4nTlNNJywKNjA5Nz0+J05TTScsCjYwOTg9PidOU00nLAo2MDk5PT4nTlNNJywKNjEwMD0+J0wnLAo2MTAxPT4nTCcsCjYxMDI9PidMJywKNjEwMz0+J0wnLAo2MTA0PT4nTCcsCjYxMDU9PidMJywKNjEwNj0+J0wnLAo2MTA3PT4nRVQnLAo2MTA4PT4nTCcsCjYxMDk9PidOU00nLAo2MTEyPT4nTCcsCjYxMTM9PidMJywKNjExND0+J0wnLAo2MTE1PT4nTCcsCjYxMTY9PidMJywKNjExNz0+J0wnLAo2MTE4PT4nTCcsCjYxMTk9PidMJywKNjEyMD0+J0wnLAo2MTIxPT4nTCcsCjYxMjg9PidPTicsCjYxMjk9PidPTicsCjYxMzA9PidPTicsCjYxMzE9PidPTicsCjYxMzI9PidPTicsCjYxMzM9PidPTicsCjYxMzQ9PidPTicsCjYxMzU9PidPTicsCjYxMzY9PidPTicsCjYxMzc9PidPTicsCjYxNDQ9PidPTicsCjYxNDU9PidPTicsCjYxNDY9PidPTicsCjYxNDc9PidPTicsCjYxNDg9PidPTicsCjYxNDk9PidPTicsCjYxNTA9PidPTicsCjYxNTE9PidPTicsCjYxNTI9PidPTicsCjYxNTM9PidPTicsCjYxNTQ9PidPTicsCjYxNTU9PidOU00nLAo2MTU2PT4nTlNNJywKNjE1Nz0+J05TTScsCjYxNTg9PidXUycsCjYxNjA9PidMJywKNjE2MT0+J0wnLAo2MTYyPT4nTCcsCjYxNjM9PidMJywKNjE2ND0+J0wnLAo2MTY1PT4nTCcsCjYxNjY9PidMJywKNjE2Nz0+J0wnLAo2MTY4PT4nTCcsCjYxNjk9PidMJywKNjE3Nj0+J0wnLAo2MTc3PT4nTCcsCjYxNzg9PidMJywKNjE3OT0+J0wnLAo2MTgwPT4nTCcsCjYxODE9PidMJywKNjE4Mj0+J0wnLAo2MTgzPT4nTCcsCjYxODQ9PidMJywKNjE4NT0+J0wnLAo2MTg2PT4nTCcsCjYxODc9PidMJywKNjE4OD0+J0wnLAo2MTg5PT4nTCcsCjYxOTA9PidMJywKNjE5MT0+J0wnLAo2MTkyPT4nTCcsCjYxOTM9PidMJywKNjE5ND0+J0wnLAo2MTk1PT4nTCcsCjYxOTY9PidMJywKNjE5Nz0+J0wnLAo2MTk4PT4nTCcsCjYxOTk9PidMJywKNjIwMD0+J0wnLAo2MjAxPT4nTCcsCjYyMDI9PidMJywKNjIwMz0+J0wnLAo2MjA0PT4nTCcsCjYyMDU9PidMJywKNjIwNj0+J0wnLAo2MjA3PT4nTCcsCjYyMDg9PidMJywKNjIwOT0+J0wnLAo2MjEwPT4nTCcsCjYyMTE9PidMJywKNjIxMj0+J0wnLAo2MjEzPT4nTCcsCjYyMTQ9PidMJywKNjIxNT0+J0wnLAo2MjE2PT4nTCcsCjYyMTc9PidMJywKNjIxOD0+J0wnLAo2MjE5PT4nTCcsCjYyMjA9PidMJywKNjIyMT0+J0wnLAo2MjIyPT4nTCcsCjYyMjM9PidMJywKNjIyND0+J0wnLAo2MjI1PT4nTCcsCjYyMjY9PidMJywKNjIyNz0+J0wnLAo2MjI4PT4nTCcsCjYyMjk9PidMJywKNjIzMD0+J0wnLAo2MjMxPT4nTCcsCjYyMzI9PidMJywKNjIzMz0+J0wnLAo2MjM0PT4nTCcsCjYyMzU9PidMJywKNjIzNj0+J0wnLAo2MjM3PT4nTCcsCjYyMzg9PidMJywKNjIzOT0+J0wnLAo2MjQwPT4nTCcsCjYyNDE9PidMJywKNjI0Mj0+J0wnLAo2MjQzPT4nTCcsCjYyNDQ9PidMJywKNjI0NT0+J0wnLAo2MjQ2PT4nTCcsCjYyNDc9PidMJywKNjI0OD0+J0wnLAo2MjQ5PT4nTCcsCjYyNTA9PidMJywKNjI1MT0+J0wnLAo2MjUyPT4nTCcsCjYyNTM9PidMJywKNjI1ND0+J0wnLAo2MjU1PT4nTCcsCjYyNTY9PidMJywKNjI1Nz0+J0wnLAo2MjU4PT4nTCcsCjYyNTk9PidMJywKNjI2MD0+J0wnLAo2MjYxPT4nTCcsCjYyNjI9PidMJywKNjI2Mz0+J0wnLAo2MjcyPT4nTCcsCjYyNzM9PidMJywKNjI3ND0+J0wnLAo2Mjc1PT4nTCcsCjYyNzY9PidMJywKNjI3Nz0+J0wnLAo2Mjc4PT4nTCcsCjYyNzk9PidMJywKNjI4MD0+J0wnLAo2MjgxPT4nTCcsCjYyODI9PidMJywKNjI4Mz0+J0wnLAo2Mjg0PT4nTCcsCjYyODU9PidMJywKNjI4Nj0+J0wnLAo2Mjg3PT4nTCcsCjYyODg9PidMJywKNjI4OT0+J0wnLAo2MjkwPT4nTCcsCjYyOTE9PidMJywKNjI5Mj0+J0wnLAo2MjkzPT4nTCcsCjYyOTQ9PidMJywKNjI5NT0+J0wnLAo2Mjk2PT4nTCcsCjYyOTc9PidMJywKNjI5OD0+J0wnLAo2Mjk5PT4nTCcsCjYzMDA9PidMJywKNjMwMT0+J0wnLAo2MzAyPT4nTCcsCjYzMDM9PidMJywKNjMwND0+J0wnLAo2MzA1PT4nTCcsCjYzMDY9PidMJywKNjMwNz0+J0wnLAo2MzA4PT4nTCcsCjYzMDk9PidMJywKNjMxMD0+J0wnLAo2MzExPT4nTCcsCjYzMTI9PidMJywKNjMxMz0+J05TTScsCjY0MDA9PidMJywKNjQwMT0+J0wnLAo2NDAyPT4nTCcsCjY0MDM9PidMJywKNjQwND0+J0wnLAo2NDA1PT4nTCcsCjY0MDY9PidMJywKNjQwNz0+J0wnLAo2NDA4PT4nTCcsCjY0MDk9PidMJywKNjQxMD0+J0wnLAo2NDExPT4nTCcsCjY0MTI9PidMJywKNjQxMz0+J0wnLAo2NDE0PT4nTCcsCjY0MTU9PidMJywKNjQxNj0+J0wnLAo2NDE3PT4nTCcsCjY0MTg9PidMJywKNjQxOT0+J0wnLAo2NDIwPT4nTCcsCjY0MjE9PidMJywKNjQyMj0+J0wnLAo2NDIzPT4nTCcsCjY0MjQ9PidMJywKNjQyNT0+J0wnLAo2NDI2PT4nTCcsCjY0Mjc9PidMJywKNjQyOD0+J0wnLAo2NDMyPT4nTlNNJywKNjQzMz0+J05TTScsCjY0MzQ9PidOU00nLAo2NDM1PT4nTCcsCjY0MzY9PidMJywKNjQzNz0+J0wnLAo2NDM4PT4nTCcsCjY0Mzk9PidOU00nLAo2NDQwPT4nTlNNJywKNjQ0MT0+J05TTScsCjY0NDI9PidOU00nLAo2NDQzPT4nTlNNJywKNjQ0OD0+J0wnLAo2NDQ5PT4nTCcsCjY0NTA9PidOU00nLAo2NDUxPT4nTCcsCjY0NTI9PidMJywKNjQ1Mz0+J0wnLAo2NDU0PT4nTCcsCjY0NTU9PidMJywKNjQ1Nj0+J0wnLAo2NDU3PT4nTlNNJywKNjQ1OD0+J05TTScsCjY0NTk9PidOU00nLAo2NDY0PT4nT04nLAo2NDY4PT4nT04nLAo2NDY5PT4nT04nLAo2NDcwPT4nTCcsCjY0NzE9PidMJywKNjQ3Mj0+J0wnLAo2NDczPT4nTCcsCjY0NzQ9PidMJywKNjQ3NT0+J0wnLAo2NDc2PT4nTCcsCjY0Nzc9PidMJywKNjQ3OD0+J0wnLAo2NDc5PT4nTCcsCjY0ODA9PidMJywKNjQ4MT0+J0wnLAo2NDgyPT4nTCcsCjY0ODM9PidMJywKNjQ4ND0+J0wnLAo2NDg1PT4nTCcsCjY0ODY9PidMJywKNjQ4Nz0+J0wnLAo2NDg4PT4nTCcsCjY0ODk9PidMJywKNjQ5MD0+J0wnLAo2NDkxPT4nTCcsCjY0OTI9PidMJywKNjQ5Mz0+J0wnLAo2NDk0PT4nTCcsCjY0OTU9PidMJywKNjQ5Nj0+J0wnLAo2NDk3PT4nTCcsCjY0OTg9PidMJywKNjQ5OT0+J0wnLAo2NTAwPT4nTCcsCjY1MDE9PidMJywKNjUwMj0+J0wnLAo2NTAzPT4nTCcsCjY1MDQ9PidMJywKNjUwNT0+J0wnLAo2NTA2PT4nTCcsCjY1MDc9PidMJywKNjUwOD0+J0wnLAo2NTA5PT4nTCcsCjY1MTI9PidMJywKNjUxMz0+J0wnLAo2NTE0PT4nTCcsCjY1MTU9PidMJywKNjUxNj0+J0wnLAo2NTI4PT4nTCcsCjY1Mjk9PidMJywKNjUzMD0+J0wnLAo2NTMxPT4nTCcsCjY1MzI9PidMJywKNjUzMz0+J0wnLAo2NTM0PT4nTCcsCjY1MzU9PidMJywKNjUzNj0+J0wnLAo2NTM3PT4nTCcsCjY1Mzg9PidMJywKNjUzOT0+J0wnLAo2NTQwPT4nTCcsCjY1NDE9PidMJywKNjU0Mj0+J0wnLAo2NTQzPT4nTCcsCjY1NDQ9PidMJywKNjU0NT0+J0wnLAo2NTQ2PT4nTCcsCjY1NDc9PidMJywKNjU0OD0+J0wnLAo2NTQ5PT4nTCcsCjY1NTA9PidMJywKNjU1MT0+J0wnLAo2NTUyPT4nTCcsCjY1NTM9PidMJywKNjU1ND0+J0wnLAo2NTU1PT4nTCcsCjY1NTY9PidMJywKNjU1Nz0+J0wnLAo2NTU4PT4nTCcsCjY1NTk9PidMJywKNjU2MD0+J0wnLAo2NTYxPT4nTCcsCjY1NjI9PidMJywKNjU2Mz0+J0wnLAo2NTY0PT4nTCcsCjY1NjU9PidMJywKNjU2Nj0+J0wnLAo2NTY3PT4nTCcsCjY1Njg9PidMJywKNjU2OT0+J0wnLAo2NTc2PT4nTCcsCjY1Nzc9PidMJywKNjU3OD0+J0wnLAo2NTc5PT4nTCcsCjY1ODA9PidMJywKNjU4MT0+J0wnLAo2NTgyPT4nTCcsCjY1ODM9PidMJywKNjU4ND0+J0wnLAo2NTg1PT4nTCcsCjY1ODY9PidMJywKNjU4Nz0+J0wnLAo2NTg4PT4nTCcsCjY1ODk9PidMJywKNjU5MD0+J0wnLAo2NTkxPT4nTCcsCjY1OTI9PidMJywKNjU5Mz0+J0wnLAo2NTk0PT4nTCcsCjY1OTU9PidMJywKNjU5Nj0+J0wnLAo2NTk3PT4nTCcsCjY1OTg9PidMJywKNjU5OT0+J0wnLAo2NjAwPT4nTCcsCjY2MDE9PidMJywKNjYwOD0+J0wnLAo2NjA5PT4nTCcsCjY2MTA9PidMJywKNjYxMT0+J0wnLAo2NjEyPT4nTCcsCjY2MTM9PidMJywKNjYxND0+J0wnLAo2NjE1PT4nTCcsCjY2MTY9PidMJywKNjYxNz0+J0wnLAo2NjIyPT4nT04nLAo2NjIzPT4nT04nLAo2NjI0PT4nT04nLAo2NjI1PT4nT04nLAo2NjI2PT4nT04nLAo2NjI3PT4nT04nLAo2NjI4PT4nT04nLAo2NjI5PT4nT04nLAo2NjMwPT4nT04nLAo2NjMxPT4nT04nLAo2NjMyPT4nT04nLAo2NjMzPT4nT04nLAo2NjM0PT4nT04nLAo2NjM1PT4nT04nLAo2NjM2PT4nT04nLAo2NjM3PT4nT04nLAo2NjM4PT4nT04nLAo2NjM5PT4nT04nLAo2NjQwPT4nT04nLAo2NjQxPT4nT04nLAo2NjQyPT4nT04nLAo2NjQzPT4nT04nLAo2NjQ0PT4nT04nLAo2NjQ1PT4nT04nLAo2NjQ2PT4nT04nLAo2NjQ3PT4nT04nLAo2NjQ4PT4nT04nLAo2NjQ5PT4nT04nLAo2NjUwPT4nT04nLAo2NjUxPT4nT04nLAo2NjUyPT4nT04nLAo2NjUzPT4nT04nLAo2NjU0PT4nT04nLAo2NjU1PT4nT04nLAo2NjU2PT4nTCcsCjY2NTc9PidMJywKNjY1OD0+J0wnLAo2NjU5PT4nTCcsCjY2NjA9PidMJywKNjY2MT0+J0wnLAo2NjYyPT4nTCcsCjY2NjM9PidMJywKNjY2ND0+J0wnLAo2NjY1PT4nTCcsCjY2NjY9PidMJywKNjY2Nz0+J0wnLAo2NjY4PT4nTCcsCjY2Njk9PidMJywKNjY3MD0+J0wnLAo2NjcxPT4nTCcsCjY2NzI9PidMJywKNjY3Mz0+J0wnLAo2Njc0PT4nTCcsCjY2NzU9PidMJywKNjY3Nj0+J0wnLAo2Njc3PT4nTCcsCjY2Nzg9PidMJywKNjY3OT0+J05TTScsCjY2ODA9PidOU00nLAo2NjgxPT4nTCcsCjY2ODI9PidMJywKNjY4Mz0+J0wnLAo2Njg2PT4nTCcsCjY2ODc9PidMJywKNjkxMj0+J05TTScsCjY5MTM9PidOU00nLAo2OTE0PT4nTlNNJywKNjkxNT0+J05TTScsCjY5MTY9PidMJywKNjkxNz0+J0wnLAo2OTE4PT4nTCcsCjY5MTk9PidMJywKNjkyMD0+J0wnLAo2OTIxPT4nTCcsCjY5MjI9PidMJywKNjkyMz0+J0wnLAo2OTI0PT4nTCcsCjY5MjU9PidMJywKNjkyNj0+J0wnLAo2OTI3PT4nTCcsCjY5Mjg9PidMJywKNjkyOT0+J0wnLAo2OTMwPT4nTCcsCjY5MzE9PidMJywKNjkzMj0+J0wnLAo2OTMzPT4nTCcsCjY5MzQ9PidMJywKNjkzNT0+J0wnLAo2OTM2PT4nTCcsCjY5Mzc9PidMJywKNjkzOD0+J0wnLAo2OTM5PT4nTCcsCjY5NDA9PidMJywKNjk0MT0+J0wnLAo2OTQyPT4nTCcsCjY5NDM9PidMJywKNjk0ND0+J0wnLAo2OTQ1PT4nTCcsCjY5NDY9PidMJywKNjk0Nz0+J0wnLAo2OTQ4PT4nTCcsCjY5NDk9PidMJywKNjk1MD0+J0wnLAo2OTUxPT4nTCcsCjY5NTI9PidMJywKNjk1Mz0+J0wnLAo2OTU0PT4nTCcsCjY5NTU9PidMJywKNjk1Nj0+J0wnLAo2OTU3PT4nTCcsCjY5NTg9PidMJywKNjk1OT0+J0wnLAo2OTYwPT4nTCcsCjY5NjE9PidMJywKNjk2Mj0+J0wnLAo2OTYzPT4nTCcsCjY5NjQ9PidOU00nLAo2OTY1PT4nTCcsCjY5NjY9PidOU00nLAo2OTY3PT4nTlNNJywKNjk2OD0+J05TTScsCjY5Njk9PidOU00nLAo2OTcwPT4nTlNNJywKNjk3MT0+J0wnLAo2OTcyPT4nTlNNJywKNjk3Mz0+J0wnLAo2OTc0PT4nTCcsCjY5NzU9PidMJywKNjk3Nj0+J0wnLAo2OTc3PT4nTCcsCjY5Nzg9PidOU00nLAo2OTc5PT4nTCcsCjY5ODA9PidMJywKNjk4MT0+J0wnLAo2OTgyPT4nTCcsCjY5ODM9PidMJywKNjk4ND0+J0wnLAo2OTg1PT4nTCcsCjY5ODY9PidMJywKNjk4Nz0+J0wnLAo2OTkyPT4nTCcsCjY5OTM9PidMJywKNjk5ND0+J0wnLAo2OTk1PT4nTCcsCjY5OTY9PidMJywKNjk5Nz0+J0wnLAo2OTk4PT4nTCcsCjY5OTk9PidMJywKNzAwMD0+J0wnLAo3MDAxPT4nTCcsCjcwMDI9PidMJywKNzAwMz0+J0wnLAo3MDA0PT4nTCcsCjcwMDU9PidMJywKNzAwNj0+J0wnLAo3MDA3PT4nTCcsCjcwMDg9PidMJywKNzAwOT0+J0wnLAo3MDEwPT4nTCcsCjcwMTE9PidMJywKNzAxMj0+J0wnLAo3MDEzPT4nTCcsCjcwMTQ9PidMJywKNzAxNT0+J0wnLAo3MDE2PT4nTCcsCjcwMTc9PidMJywKNzAxOD0+J0wnLAo3MDE5PT4nTlNNJywKNzAyMD0+J05TTScsCjcwMjE9PidOU00nLAo3MDIyPT4nTlNNJywKNzAyMz0+J05TTScsCjcwMjQ9PidOU00nLAo3MDI1PT4nTlNNJywKNzAyNj0+J05TTScsCjcwMjc9PidOU00nLAo3MDI4PT4nTCcsCjcwMjk9PidMJywKNzAzMD0+J0wnLAo3MDMxPT4nTCcsCjcwMzI9PidMJywKNzAzMz0+J0wnLAo3MDM0PT4nTCcsCjcwMzU9PidMJywKNzAzNj0+J0wnLAo3NDI0PT4nTCcsCjc0MjU9PidMJywKNzQyNj0+J0wnLAo3NDI3PT4nTCcsCjc0Mjg9PidMJywKNzQyOT0+J0wnLAo3NDMwPT4nTCcsCjc0MzE9PidMJywKNzQzMj0+J0wnLAo3NDMzPT4nTCcsCjc0MzQ9PidMJywKNzQzNT0+J0wnLAo3NDM2PT4nTCcsCjc0Mzc9PidMJywKNzQzOD0+J0wnLAo3NDM5PT4nTCcsCjc0NDA9PidMJywKNzQ0MT0+J0wnLAo3NDQyPT4nTCcsCjc0NDM9PidMJywKNzQ0ND0+J0wnLAo3NDQ1PT4nTCcsCjc0NDY9PidMJywKNzQ0Nz0+J0wnLAo3NDQ4PT4nTCcsCjc0NDk9PidMJywKNzQ1MD0+J0wnLAo3NDUxPT4nTCcsCjc0NTI9PidMJywKNzQ1Mz0+J0wnLAo3NDU0PT4nTCcsCjc0NTU9PidMJywKNzQ1Nj0+J0wnLAo3NDU3PT4nTCcsCjc0NTg9PidMJywKNzQ1OT0+J0wnLAo3NDYwPT4nTCcsCjc0NjE9PidMJywKNzQ2Mj0+J0wnLAo3NDYzPT4nTCcsCjc0NjQ9PidMJywKNzQ2NT0+J0wnLAo3NDY2PT4nTCcsCjc0Njc9PidMJywKNzQ2OD0+J0wnLAo3NDY5PT4nTCcsCjc0NzA9PidMJywKNzQ3MT0+J0wnLAo3NDcyPT4nTCcsCjc0NzM9PidMJywKNzQ3ND0+J0wnLAo3NDc1PT4nTCcsCjc0NzY9PidMJywKNzQ3Nz0+J0wnLAo3NDc4PT4nTCcsCjc0Nzk9PidMJywKNzQ4MD0+J0wnLAo3NDgxPT4nTCcsCjc0ODI9PidMJywKNzQ4Mz0+J0wnLAo3NDg0PT4nTCcsCjc0ODU9PidMJywKNzQ4Nj0+J0wnLAo3NDg3PT4nTCcsCjc0ODg9PidMJywKNzQ4OT0+J0wnLAo3NDkwPT4nTCcsCjc0OTE9PidMJywKNzQ5Mj0+J0wnLAo3NDkzPT4nTCcsCjc0OTQ9PidMJywKNzQ5NT0+J0wnLAo3NDk2PT4nTCcsCjc0OTc9PidMJywKNzQ5OD0+J0wnLAo3NDk5PT4nTCcsCjc1MDA9PidMJywKNzUwMT0+J0wnLAo3NTAyPT4nTCcsCjc1MDM9PidMJywKNzUwND0+J0wnLAo3NTA1PT4nTCcsCjc1MDY9PidMJywKNzUwNz0+J0wnLAo3NTA4PT4nTCcsCjc1MDk9PidMJywKNzUxMD0+J0wnLAo3NTExPT4nTCcsCjc1MTI9PidMJywKNzUxMz0+J0wnLAo3NTE0PT4nTCcsCjc1MTU9PidMJywKNzUxNj0+J0wnLAo3NTE3PT4nTCcsCjc1MTg9PidMJywKNzUxOT0+J0wnLAo3NTIwPT4nTCcsCjc1MjE9PidMJywKNzUyMj0+J0wnLAo3NTIzPT4nTCcsCjc1MjQ9PidMJywKNzUyNT0+J0wnLAo3NTI2PT4nTCcsCjc1Mjc9PidMJywKNzUyOD0+J0wnLAo3NTI5PT4nTCcsCjc1MzA9PidMJywKNzUzMT0+J0wnLAo3NTMyPT4nTCcsCjc1MzM9PidMJywKNzUzND0+J0wnLAo3NTM1PT4nTCcsCjc1MzY9PidMJywKNzUzNz0+J0wnLAo3NTM4PT4nTCcsCjc1Mzk9PidMJywKNzU0MD0+J0wnLAo3NTQxPT4nTCcsCjc1NDI9PidMJywKNzU0Mz0+J0wnLAo3NTQ0PT4nTCcsCjc1NDU9PidMJywKNzU0Nj0+J0wnLAo3NTQ3PT4nTCcsCjc1NDg9PidMJywKNzU0OT0+J0wnLAo3NTUwPT4nTCcsCjc1NTE9PidMJywKNzU1Mj0+J0wnLAo3NTUzPT4nTCcsCjc1NTQ9PidMJywKNzU1NT0+J0wnLAo3NTU2PT4nTCcsCjc1NTc9PidMJywKNzU1OD0+J0wnLAo3NTU5PT4nTCcsCjc1NjA9PidMJywKNzU2MT0+J0wnLAo3NTYyPT4nTCcsCjc1NjM9PidMJywKNzU2ND0+J0wnLAo3NTY1PT4nTCcsCjc1NjY9PidMJywKNzU2Nz0+J0wnLAo3NTY4PT4nTCcsCjc1Njk9PidMJywKNzU3MD0+J0wnLAo3NTcxPT4nTCcsCjc1NzI9PidMJywKNzU3Mz0+J0wnLAo3NTc0PT4nTCcsCjc1NzU9PidMJywKNzU3Nj0+J0wnLAo3NTc3PT4nTCcsCjc1Nzg9PidMJywKNzU3OT0+J0wnLAo3NTgwPT4nTCcsCjc1ODE9PidMJywKNzU4Mj0+J0wnLAo3NTgzPT4nTCcsCjc1ODQ9PidMJywKNzU4NT0+J0wnLAo3NTg2PT4nTCcsCjc1ODc9PidMJywKNzU4OD0+J0wnLAo3NTg5PT4nTCcsCjc1OTA9PidMJywKNzU5MT0+J0wnLAo3NTkyPT4nTCcsCjc1OTM9PidMJywKNzU5ND0+J0wnLAo3NTk1PT4nTCcsCjc1OTY9PidMJywKNzU5Nz0+J0wnLAo3NTk4PT4nTCcsCjc1OTk9PidMJywKNzYwMD0+J0wnLAo3NjAxPT4nTCcsCjc2MDI9PidMJywKNzYwMz0+J0wnLAo3NjA0PT4nTCcsCjc2MDU9PidMJywKNzYwNj0+J0wnLAo3NjA3PT4nTCcsCjc2MDg9PidMJywKNzYwOT0+J0wnLAo3NjEwPT4nTCcsCjc2MTE9PidMJywKNzYxMj0+J0wnLAo3NjEzPT4nTCcsCjc2MTQ9PidMJywKNzYxNT0+J0wnLAo3NjE2PT4nTlNNJywKNzYxNz0+J05TTScsCjc2MTg9PidOU00nLAo3NjE5PT4nTlNNJywKNzYyMD0+J05TTScsCjc2MjE9PidOU00nLAo3NjIyPT4nTlNNJywKNzYyMz0+J05TTScsCjc2MjQ9PidOU00nLAo3NjI1PT4nTlNNJywKNzYyNj0+J05TTScsCjc2Nzg9PidOU00nLAo3Njc5PT4nTlNNJywKNzY4MD0+J0wnLAo3NjgxPT4nTCcsCjc2ODI9PidMJywKNzY4Mz0+J0wnLAo3Njg0PT4nTCcsCjc2ODU9PidMJywKNzY4Nj0+J0wnLAo3Njg3PT4nTCcsCjc2ODg9PidMJywKNzY4OT0+J0wnLAo3NjkwPT4nTCcsCjc2OTE9PidMJywKNzY5Mj0+J0wnLAo3NjkzPT4nTCcsCjc2OTQ9PidMJywKNzY5NT0+J0wnLAo3Njk2PT4nTCcsCjc2OTc9PidMJywKNzY5OD0+J0wnLAo3Njk5PT4nTCcsCjc3MDA9PidMJywKNzcwMT0+J0wnLAo3NzAyPT4nTCcsCjc3MDM9PidMJywKNzcwND0+J0wnLAo3NzA1PT4nTCcsCjc3MDY9PidMJywKNzcwNz0+J0wnLAo3NzA4PT4nTCcsCjc3MDk9PidMJywKNzcxMD0+J0wnLAo3NzExPT4nTCcsCjc3MTI9PidMJywKNzcxMz0+J0wnLAo3NzE0PT4nTCcsCjc3MTU9PidMJywKNzcxNj0+J0wnLAo3NzE3PT4nTCcsCjc3MTg9PidMJywKNzcxOT0+J0wnLAo3NzIwPT4nTCcsCjc3MjE9PidMJywKNzcyMj0+J0wnLAo3NzIzPT4nTCcsCjc3MjQ9PidMJywKNzcyNT0+J0wnLAo3NzI2PT4nTCcsCjc3Mjc9PidMJywKNzcyOD0+J0wnLAo3NzI5PT4nTCcsCjc3MzA9PidMJywKNzczMT0+J0wnLAo3NzMyPT4nTCcsCjc3MzM9PidMJywKNzczND0+J0wnLAo3NzM1PT4nTCcsCjc3MzY9PidMJywKNzczNz0+J0wnLAo3NzM4PT4nTCcsCjc3Mzk9PidMJywKNzc0MD0+J0wnLAo3NzQxPT4nTCcsCjc3NDI9PidMJywKNzc0Mz0+J0wnLAo3NzQ0PT4nTCcsCjc3NDU9PidMJywKNzc0Nj0+J0wnLAo3NzQ3PT4nTCcsCjc3NDg9PidMJywKNzc0OT0+J0wnLAo3NzUwPT4nTCcsCjc3NTE9PidMJywKNzc1Mj0+J0wnLAo3NzUzPT4nTCcsCjc3NTQ9PidMJywKNzc1NT0+J0wnLAo3NzU2PT4nTCcsCjc3NTc9PidMJywKNzc1OD0+J0wnLAo3NzU5PT4nTCcsCjc3NjA9PidMJywKNzc2MT0+J0wnLAo3NzYyPT4nTCcsCjc3NjM9PidMJywKNzc2ND0+J0wnLAo3NzY1PT4nTCcsCjc3NjY9PidMJywKNzc2Nz0+J0wnLAo3NzY4PT4nTCcsCjc3Njk9PidMJywKNzc3MD0+J0wnLAo3NzcxPT4nTCcsCjc3NzI9PidMJywKNzc3Mz0+J0wnLAo3Nzc0PT4nTCcsCjc3NzU9PidMJywKNzc3Nj0+J0wnLAo3Nzc3PT4nTCcsCjc3Nzg9PidMJywKNzc3OT0+J0wnLAo3NzgwPT4nTCcsCjc3ODE9PidMJywKNzc4Mj0+J0wnLAo3NzgzPT4nTCcsCjc3ODQ9PidMJywKNzc4NT0+J0wnLAo3Nzg2PT4nTCcsCjc3ODc9PidMJywKNzc4OD0+J0wnLAo3Nzg5PT4nTCcsCjc3OTA9PidMJywKNzc5MT0+J0wnLAo3NzkyPT4nTCcsCjc3OTM9PidMJywKNzc5ND0+J0wnLAo3Nzk1PT4nTCcsCjc3OTY9PidMJywKNzc5Nz0+J0wnLAo3Nzk4PT4nTCcsCjc3OTk9PidMJywKNzgwMD0+J0wnLAo3ODAxPT4nTCcsCjc4MDI9PidMJywKNzgwMz0+J0wnLAo3ODA0PT4nTCcsCjc4MDU9PidMJywKNzgwNj0+J0wnLAo3ODA3PT4nTCcsCjc4MDg9PidMJywKNzgwOT0+J0wnLAo3ODEwPT4nTCcsCjc4MTE9PidMJywKNzgxMj0+J0wnLAo3ODEzPT4nTCcsCjc4MTQ9PidMJywKNzgxNT0+J0wnLAo3ODE2PT4nTCcsCjc4MTc9PidMJywKNzgxOD0+J0wnLAo3ODE5PT4nTCcsCjc4MjA9PidMJywKNzgyMT0+J0wnLAo3ODIyPT4nTCcsCjc4MjM9PidMJywKNzgyND0+J0wnLAo3ODI1PT4nTCcsCjc4MjY9PidMJywKNzgyNz0+J0wnLAo3ODI4PT4nTCcsCjc4Mjk9PidMJywKNzgzMD0+J0wnLAo3ODMxPT4nTCcsCjc4MzI9PidMJywKNzgzMz0+J0wnLAo3ODM0PT4nTCcsCjc4MzU9PidMJywKNzg0MD0+J0wnLAo3ODQxPT4nTCcsCjc4NDI9PidMJywKNzg0Mz0+J0wnLAo3ODQ0PT4nTCcsCjc4NDU9PidMJywKNzg0Nj0+J0wnLAo3ODQ3PT4nTCcsCjc4NDg9PidMJywKNzg0OT0+J0wnLAo3ODUwPT4nTCcsCjc4NTE9PidMJywKNzg1Mj0+J0wnLAo3ODUzPT4nTCcsCjc4NTQ9PidMJywKNzg1NT0+J0wnLAo3ODU2PT4nTCcsCjc4NTc9PidMJywKNzg1OD0+J0wnLAo3ODU5PT4nTCcsCjc4NjA9PidMJywKNzg2MT0+J0wnLAo3ODYyPT4nTCcsCjc4NjM9PidMJywKNzg2ND0+J0wnLAo3ODY1PT4nTCcsCjc4NjY9PidMJywKNzg2Nz0+J0wnLAo3ODY4PT4nTCcsCjc4Njk9PidMJywKNzg3MD0+J0wnLAo3ODcxPT4nTCcsCjc4NzI9PidMJywKNzg3Mz0+J0wnLAo3ODc0PT4nTCcsCjc4NzU9PidMJywKNzg3Nj0+J0wnLAo3ODc3PT4nTCcsCjc4Nzg9PidMJywKNzg3OT0+J0wnLAo3ODgwPT4nTCcsCjc4ODE9PidMJywKNzg4Mj0+J0wnLAo3ODgzPT4nTCcsCjc4ODQ9PidMJywKNzg4NT0+J0wnLAo3ODg2PT4nTCcsCjc4ODc9PidMJywKNzg4OD0+J0wnLAo3ODg5PT4nTCcsCjc4OTA9PidMJywKNzg5MT0+J0wnLAo3ODkyPT4nTCcsCjc4OTM9PidMJywKNzg5ND0+J0wnLAo3ODk1PT4nTCcsCjc4OTY9PidMJywKNzg5Nz0+J0wnLAo3ODk4PT4nTCcsCjc4OTk9PidMJywKNzkwMD0+J0wnLAo3OTAxPT4nTCcsCjc5MDI9PidMJywKNzkwMz0+J0wnLAo3OTA0PT4nTCcsCjc5MDU9PidMJywKNzkwNj0+J0wnLAo3OTA3PT4nTCcsCjc5MDg9PidMJywKNzkwOT0+J0wnLAo3OTEwPT4nTCcsCjc5MTE9PidMJywKNzkxMj0+J0wnLAo3OTEzPT4nTCcsCjc5MTQ9PidMJywKNzkxNT0+J0wnLAo3OTE2PT4nTCcsCjc5MTc9PidMJywKNzkxOD0+J0wnLAo3OTE5PT4nTCcsCjc5MjA9PidMJywKNzkyMT0+J0wnLAo3OTIyPT4nTCcsCjc5MjM9PidMJywKNzkyND0+J0wnLAo3OTI1PT4nTCcsCjc5MjY9PidMJywKNzkyNz0+J0wnLAo3OTI4PT4nTCcsCjc5Mjk9PidMJywKNzkzNj0+J0wnLAo3OTM3PT4nTCcsCjc5Mzg9PidMJywKNzkzOT0+J0wnLAo3OTQwPT4nTCcsCjc5NDE9PidMJywKNzk0Mj0+J0wnLAo3OTQzPT4nTCcsCjc5NDQ9PidMJywKNzk0NT0+J0wnLAo3OTQ2PT4nTCcsCjc5NDc9PidMJywKNzk0OD0+J0wnLAo3OTQ5PT4nTCcsCjc5NTA9PidMJywKNzk1MT0+J0wnLAo3OTUyPT4nTCcsCjc5NTM9PidMJywKNzk1ND0+J0wnLAo3OTU1PT4nTCcsCjc5NTY9PidMJywKNzk1Nz0+J0wnLAo3OTYwPT4nTCcsCjc5NjE9PidMJywKNzk2Mj0+J0wnLAo3OTYzPT4nTCcsCjc5NjQ9PidMJywKNzk2NT0+J0wnLAo3OTY4PT4nTCcsCjc5Njk9PidMJywKNzk3MD0+J0wnLAo3OTcxPT4nTCcsCjc5NzI9PidMJywKNzk3Mz0+J0wnLAo3OTc0PT4nTCcsCjc5NzU9PidMJywKNzk3Nj0+J0wnLAo3OTc3PT4nTCcsCjc5Nzg9PidMJywKNzk3OT0+J0wnLAo3OTgwPT4nTCcsCjc5ODE9PidMJywKNzk4Mj0+J0wnLAo3OTgzPT4nTCcsCjc5ODQ9PidMJywKNzk4NT0+J0wnLAo3OTg2PT4nTCcsCjc5ODc9PidMJywKNzk4OD0+J0wnLAo3OTg5PT4nTCcsCjc5OTA9PidMJywKNzk5MT0+J0wnLAo3OTkyPT4nTCcsCjc5OTM9PidMJywKNzk5ND0+J0wnLAo3OTk1PT4nTCcsCjc5OTY9PidMJywKNzk5Nz0+J0wnLAo3OTk4PT4nTCcsCjc5OTk9PidMJywKODAwMD0+J0wnLAo4MDAxPT4nTCcsCjgwMDI9PidMJywKODAwMz0+J0wnLAo4MDA0PT4nTCcsCjgwMDU9PidMJywKODAwOD0+J0wnLAo4MDA5PT4nTCcsCjgwMTA9PidMJywKODAxMT0+J0wnLAo4MDEyPT4nTCcsCjgwMTM9PidMJywKODAxNj0+J0wnLAo4MDE3PT4nTCcsCjgwMTg9PidMJywKODAxOT0+J0wnLAo4MDIwPT4nTCcsCjgwMjE9PidMJywKODAyMj0+J0wnLAo4MDIzPT4nTCcsCjgwMjU9PidMJywKODAyNz0+J0wnLAo4MDI5PT4nTCcsCjgwMzE9PidMJywKODAzMj0+J0wnLAo4MDMzPT4nTCcsCjgwMzQ9PidMJywKODAzNT0+J0wnLAo4MDM2PT4nTCcsCjgwMzc9PidMJywKODAzOD0+J0wnLAo4MDM5PT4nTCcsCjgwNDA9PidMJywKODA0MT0+J0wnLAo4MDQyPT4nTCcsCjgwNDM9PidMJywKODA0ND0+J0wnLAo4MDQ1PT4nTCcsCjgwNDY9PidMJywKODA0Nz0+J0wnLAo4MDQ4PT4nTCcsCjgwNDk9PidMJywKODA1MD0+J0wnLAo4MDUxPT4nTCcsCjgwNTI9PidMJywKODA1Mz0+J0wnLAo4MDU0PT4nTCcsCjgwNTU9PidMJywKODA1Nj0+J0wnLAo4MDU3PT4nTCcsCjgwNTg9PidMJywKODA1OT0+J0wnLAo4MDYwPT4nTCcsCjgwNjE9PidMJywKODA2ND0+J0wnLAo4MDY1PT4nTCcsCjgwNjY9PidMJywKODA2Nz0+J0wnLAo4MDY4PT4nTCcsCjgwNjk9PidMJywKODA3MD0+J0wnLAo4MDcxPT4nTCcsCjgwNzI9PidMJywKODA3Mz0+J0wnLAo4MDc0PT4nTCcsCjgwNzU9PidMJywKODA3Nj0+J0wnLAo4MDc3PT4nTCcsCjgwNzg9PidMJywKODA3OT0+J0wnLAo4MDgwPT4nTCcsCjgwODE9PidMJywKODA4Mj0+J0wnLAo4MDgzPT4nTCcsCjgwODQ9PidMJywKODA4NT0+J0wnLAo4MDg2PT4nTCcsCjgwODc9PidMJywKODA4OD0+J0wnLAo4MDg5PT4nTCcsCjgwOTA9PidMJywKODA5MT0+J0wnLAo4MDkyPT4nTCcsCjgwOTM9PidMJywKODA5ND0+J0wnLAo4MDk1PT4nTCcsCjgwOTY9PidMJywKODA5Nz0+J0wnLAo4MDk4PT4nTCcsCjgwOTk9PidMJywKODEwMD0+J0wnLAo4MTAxPT4nTCcsCjgxMDI9PidMJywKODEwMz0+J0wnLAo4MTA0PT4nTCcsCjgxMDU9PidMJywKODEwNj0+J0wnLAo4MTA3PT4nTCcsCjgxMDg9PidMJywKODEwOT0+J0wnLAo4MTEwPT4nTCcsCjgxMTE9PidMJywKODExMj0+J0wnLAo4MTEzPT4nTCcsCjgxMTQ9PidMJywKODExNT0+J0wnLAo4MTE2PT4nTCcsCjgxMTg9PidMJywKODExOT0+J0wnLAo4MTIwPT4nTCcsCjgxMjE9PidMJywKODEyMj0+J0wnLAo4MTIzPT4nTCcsCjgxMjQ9PidMJywKODEyNT0+J09OJywKODEyNj0+J0wnLAo4MTI3PT4nT04nLAo4MTI4PT4nT04nLAo4MTI5PT4nT04nLAo4MTMwPT4nTCcsCjgxMzE9PidMJywKODEzMj0+J0wnLAo4MTM0PT4nTCcsCjgxMzU9PidMJywKODEzNj0+J0wnLAo4MTM3PT4nTCcsCjgxMzg9PidMJywKODEzOT0+J0wnLAo4MTQwPT4nTCcsCjgxNDE9PidPTicsCjgxNDI9PidPTicsCjgxNDM9PidPTicsCjgxNDQ9PidMJywKODE0NT0+J0wnLAo4MTQ2PT4nTCcsCjgxNDc9PidMJywKODE1MD0+J0wnLAo4MTUxPT4nTCcsCjgxNTI9PidMJywKODE1Mz0+J0wnLAo4MTU0PT4nTCcsCjgxNTU9PidMJywKODE1Nz0+J09OJywKODE1OD0+J09OJywKODE1OT0+J09OJywKODE2MD0+J0wnLAo4MTYxPT4nTCcsCjgxNjI9PidMJywKODE2Mz0+J0wnLAo4MTY0PT4nTCcsCjgxNjU9PidMJywKODE2Nj0+J0wnLAo4MTY3PT4nTCcsCjgxNjg9PidMJywKODE2OT0+J0wnLAo4MTcwPT4nTCcsCjgxNzE9PidMJywKODE3Mj0+J0wnLAo4MTczPT4nT04nLAo4MTc0PT4nT04nLAo4MTc1PT4nT04nLAo4MTc4PT4nTCcsCjgxNzk9PidMJywKODE4MD0+J0wnLAo4MTgyPT4nTCcsCjgxODM9PidMJywKODE4ND0+J0wnLAo4MTg1PT4nTCcsCjgxODY9PidMJywKODE4Nz0+J0wnLAo4MTg4PT4nTCcsCjgxODk9PidPTicsCjgxOTA9PidPTicsCjgxOTI9PidXUycsCjgxOTM9PidXUycsCjgxOTQ9PidXUycsCjgxOTU9PidXUycsCjgxOTY9PidXUycsCjgxOTc9PidXUycsCjgxOTg9PidXUycsCjgxOTk9PidXUycsCjgyMDA9PidXUycsCjgyMDE9PidXUycsCjgyMDI9PidXUycsCjgyMDM9PidCTicsCjgyMDQ9PidCTicsCjgyMDU9PidCTicsCjgyMDY9PidMJywKODIwNz0+J1InLAo4MjA4PT4nT04nLAo4MjA5PT4nT04nLAo4MjEwPT4nT04nLAo4MjExPT4nT04nLAo4MjEyPT4nT04nLAo4MjEzPT4nT04nLAo4MjE0PT4nT04nLAo4MjE1PT4nT04nLAo4MjE2PT4nT04nLAo4MjE3PT4nT04nLAo4MjE4PT4nT04nLAo4MjE5PT4nT04nLAo4MjIwPT4nT04nLAo4MjIxPT4nT04nLAo4MjIyPT4nT04nLAo4MjIzPT4nT04nLAo4MjI0PT4nT04nLAo4MjI1PT4nT04nLAo4MjI2PT4nT04nLAo4MjI3PT4nT04nLAo4MjI4PT4nT04nLAo4MjI5PT4nT04nLAo4MjMwPT4nT04nLAo4MjMxPT4nT04nLAo4MjMyPT4nV1MnLAo4MjMzPT4nQicsCjgyMzQ9PidMUkUnLAo4MjM1PT4nUkxFJywKODIzNj0+J1BERicsCjgyMzc9PidMUk8nLAo4MjM4PT4nUkxPJywKODIzOT0+J0NTJywKODI0MD0+J0VUJywKODI0MT0+J0VUJywKODI0Mj0+J0VUJywKODI0Mz0+J0VUJywKODI0ND0+J0VUJywKODI0NT0+J09OJywKODI0Nj0+J09OJywKODI0Nz0+J09OJywKODI0OD0+J09OJywKODI0OT0+J09OJywKODI1MD0+J09OJywKODI1MT0+J09OJywKODI1Mj0+J09OJywKODI1Mz0+J09OJywKODI1ND0+J09OJywKODI1NT0+J09OJywKODI1Nj0+J09OJywKODI1Nz0+J09OJywKODI1OD0+J09OJywKODI1OT0+J09OJywKODI2MD0+J0NTJywKODI2MT0+J09OJywKODI2Mj0+J09OJywKODI2Mz0+J09OJywKODI2ND0+J09OJywKODI2NT0+J09OJywKODI2Nj0+J09OJywKODI2Nz0+J09OJywKODI2OD0+J09OJywKODI2OT0+J09OJywKODI3MD0+J09OJywKODI3MT0+J09OJywKODI3Mj0+J09OJywKODI3Mz0+J09OJywKODI3ND0+J09OJywKODI3NT0+J09OJywKODI3Nj0+J09OJywKODI3Nz0+J09OJywKODI3OD0+J09OJywKODI3OT0+J09OJywKODI4MD0+J09OJywKODI4MT0+J09OJywKODI4Mj0+J09OJywKODI4Mz0+J09OJywKODI4ND0+J09OJywKODI4NT0+J09OJywKODI4Nj0+J09OJywKODI4Nz0+J1dTJywKODI4OD0+J0JOJywKODI4OT0+J0JOJywKODI5MD0+J0JOJywKODI5MT0+J0JOJywKODI5OD0+J0JOJywKODI5OT0+J0JOJywKODMwMD0+J0JOJywKODMwMT0+J0JOJywKODMwMj0+J0JOJywKODMwMz0+J0JOJywKODMwND0+J0VOJywKODMwNT0+J0wnLAo4MzA4PT4nRU4nLAo4MzA5PT4nRU4nLAo4MzEwPT4nRU4nLAo4MzExPT4nRU4nLAo4MzEyPT4nRU4nLAo4MzEzPT4nRU4nLAo4MzE0PT4nRVMnLAo4MzE1PT4nRVMnLAo4MzE2PT4nT04nLAo4MzE3PT4nT04nLAo4MzE4PT4nT04nLAo4MzE5PT4nTCcsCjgzMjA9PidFTicsCjgzMjE9PidFTicsCjgzMjI9PidFTicsCjgzMjM9PidFTicsCjgzMjQ9PidFTicsCjgzMjU9PidFTicsCjgzMjY9PidFTicsCjgzMjc9PidFTicsCjgzMjg9PidFTicsCjgzMjk9PidFTicsCjgzMzA9PidFUycsCjgzMzE9PidFUycsCjgzMzI9PidPTicsCjgzMzM9PidPTicsCjgzMzQ9PidPTicsCjgzMzY9PidMJywKODMzNz0+J0wnLAo4MzM4PT4nTCcsCjgzMzk9PidMJywKODM0MD0+J0wnLAo4MzUyPT4nRVQnLAo4MzUzPT4nRVQnLAo4MzU0PT4nRVQnLAo4MzU1PT4nRVQnLAo4MzU2PT4nRVQnLAo4MzU3PT4nRVQnLAo4MzU4PT4nRVQnLAo4MzU5PT4nRVQnLAo4MzYwPT4nRVQnLAo4MzYxPT4nRVQnLAo4MzYyPT4nRVQnLAo4MzYzPT4nRVQnLAo4MzY0PT4nRVQnLAo4MzY1PT4nRVQnLAo4MzY2PT4nRVQnLAo4MzY3PT4nRVQnLAo4MzY4PT4nRVQnLAo4MzY5PT4nRVQnLAo4MzcwPT4nRVQnLAo4MzcxPT4nRVQnLAo4MzcyPT4nRVQnLAo4MzczPT4nRVQnLAo4NDAwPT4nTlNNJywKODQwMT0+J05TTScsCjg0MDI9PidOU00nLAo4NDAzPT4nTlNNJywKODQwND0+J05TTScsCjg0MDU9PidOU00nLAo4NDA2PT4nTlNNJywKODQwNz0+J05TTScsCjg0MDg9PidOU00nLAo4NDA5PT4nTlNNJywKODQxMD0+J05TTScsCjg0MTE9PidOU00nLAo4NDEyPT4nTlNNJywKODQxMz0+J05TTScsCjg0MTQ9PidOU00nLAo4NDE1PT4nTlNNJywKODQxNj0+J05TTScsCjg0MTc9PidOU00nLAo4NDE4PT4nTlNNJywKODQxOT0+J05TTScsCjg0MjA9PidOU00nLAo4NDIxPT4nTlNNJywKODQyMj0+J05TTScsCjg0MjM9PidOU00nLAo4NDI0PT4nTlNNJywKODQyNT0+J05TTScsCjg0MjY9PidOU00nLAo4NDI3PT4nTlNNJywKODQyOD0+J05TTScsCjg0Mjk9PidOU00nLAo4NDMwPT4nTlNNJywKODQzMT0+J05TTScsCjg0NDg9PidPTicsCjg0NDk9PidPTicsCjg0NTA9PidMJywKODQ1MT0+J09OJywKODQ1Mj0+J09OJywKODQ1Mz0+J09OJywKODQ1ND0+J09OJywKODQ1NT0+J0wnLAo4NDU2PT4nT04nLAo4NDU3PT4nT04nLAo4NDU4PT4nTCcsCjg0NTk9PidMJywKODQ2MD0+J0wnLAo4NDYxPT4nTCcsCjg0NjI9PidMJywKODQ2Mz0+J0wnLAo4NDY0PT4nTCcsCjg0NjU9PidMJywKODQ2Nj0+J0wnLAo4NDY3PT4nTCcsCjg0Njg9PidPTicsCjg0Njk9PidMJywKODQ3MD0+J09OJywKODQ3MT0+J09OJywKODQ3Mj0+J09OJywKODQ3Mz0+J0wnLAo4NDc0PT4nTCcsCjg0NzU9PidMJywKODQ3Nj0+J0wnLAo4NDc3PT4nTCcsCjg0Nzg9PidPTicsCjg0Nzk9PidPTicsCjg0ODA9PidPTicsCjg0ODE9PidPTicsCjg0ODI9PidPTicsCjg0ODM9PidPTicsCjg0ODQ9PidMJywKODQ4NT0+J09OJywKODQ4Nj0+J0wnLAo4NDg3PT4nT04nLAo4NDg4PT4nTCcsCjg0ODk9PidPTicsCjg0OTA9PidMJywKODQ5MT0+J0wnLAo4NDkyPT4nTCcsCjg0OTM9PidMJywKODQ5ND0+J0VUJywKODQ5NT0+J0wnLAo4NDk2PT4nTCcsCjg0OTc9PidMJywKODQ5OD0+J0wnLAo4NDk5PT4nTCcsCjg1MDA9PidMJywKODUwMT0+J0wnLAo4NTAyPT4nTCcsCjg1MDM9PidMJywKODUwND0+J0wnLAo4NTA1PT4nTCcsCjg1MDY9PidPTicsCjg1MDc9PidPTicsCjg1MDg9PidMJywKODUwOT0+J0wnLAo4NTEwPT4nTCcsCjg1MTE9PidMJywKODUxMj0+J09OJywKODUxMz0+J09OJywKODUxND0+J09OJywKODUxNT0+J09OJywKODUxNj0+J09OJywKODUxNz0+J0wnLAo4NTE4PT4nTCcsCjg1MTk9PidMJywKODUyMD0+J0wnLAo4NTIxPT4nTCcsCjg1MjI9PidPTicsCjg1MjM9PidPTicsCjg1MjQ9PidPTicsCjg1MjU9PidPTicsCjg1MjY9PidMJywKODUzMT0+J09OJywKODUzMj0+J09OJywKODUzMz0+J09OJywKODUzND0+J09OJywKODUzNT0+J09OJywKODUzNj0+J09OJywKODUzNz0+J09OJywKODUzOD0+J09OJywKODUzOT0+J09OJywKODU0MD0+J09OJywKODU0MT0+J09OJywKODU0Mj0+J09OJywKODU0Mz0+J09OJywKODU0ND0+J0wnLAo4NTQ1PT4nTCcsCjg1NDY9PidMJywKODU0Nz0+J0wnLAo4NTQ4PT4nTCcsCjg1NDk9PidMJywKODU1MD0+J0wnLAo4NTUxPT4nTCcsCjg1NTI9PidMJywKODU1Mz0+J0wnLAo4NTU0PT4nTCcsCjg1NTU9PidMJywKODU1Nj0+J0wnLAo4NTU3PT4nTCcsCjg1NTg9PidMJywKODU1OT0+J0wnLAo4NTYwPT4nTCcsCjg1NjE9PidMJywKODU2Mj0+J0wnLAo4NTYzPT4nTCcsCjg1NjQ9PidMJywKODU2NT0+J0wnLAo4NTY2PT4nTCcsCjg1Njc9PidMJywKODU2OD0+J0wnLAo4NTY5PT4nTCcsCjg1NzA9PidMJywKODU3MT0+J0wnLAo4NTcyPT4nTCcsCjg1NzM9PidMJywKODU3ND0+J0wnLAo4NTc1PT4nTCcsCjg1NzY9PidMJywKODU3Nz0+J0wnLAo4NTc4PT4nTCcsCjg1Nzk9PidMJywKODU4MD0+J0wnLAo4NTkyPT4nT04nLAo4NTkzPT4nT04nLAo4NTk0PT4nT04nLAo4NTk1PT4nT04nLAo4NTk2PT4nT04nLAo4NTk3PT4nT04nLAo4NTk4PT4nT04nLAo4NTk5PT4nT04nLAo4NjAwPT4nT04nLAo4NjAxPT4nT04nLAo4NjAyPT4nT04nLAo4NjAzPT4nT04nLAo4NjA0PT4nT04nLAo4NjA1PT4nT04nLAo4NjA2PT4nT04nLAo4NjA3PT4nT04nLAo4NjA4PT4nT04nLAo4NjA5PT4nT04nLAo4NjEwPT4nT04nLAo4NjExPT4nT04nLAo4NjEyPT4nT04nLAo4NjEzPT4nT04nLAo4NjE0PT4nT04nLAo4NjE1PT4nT04nLAo4NjE2PT4nT04nLAo4NjE3PT4nT04nLAo4NjE4PT4nT04nLAo4NjE5PT4nT04nLAo4NjIwPT4nT04nLAo4NjIxPT4nT04nLAo4NjIyPT4nT04nLAo4NjIzPT4nT04nLAo4NjI0PT4nT04nLAo4NjI1PT4nT04nLAo4NjI2PT4nT04nLAo4NjI3PT4nT04nLAo4NjI4PT4nT04nLAo4NjI5PT4nT04nLAo4NjMwPT4nT04nLAo4NjMxPT4nT04nLAo4NjMyPT4nT04nLAo4NjMzPT4nT04nLAo4NjM0PT4nT04nLAo4NjM1PT4nT04nLAo4NjM2PT4nT04nLAo4NjM3PT4nT04nLAo4NjM4PT4nT04nLAo4NjM5PT4nT04nLAo4NjQwPT4nT04nLAo4NjQxPT4nT04nLAo4NjQyPT4nT04nLAo4NjQzPT4nT04nLAo4NjQ0PT4nT04nLAo4NjQ1PT4nT04nLAo4NjQ2PT4nT04nLAo4NjQ3PT4nT04nLAo4NjQ4PT4nT04nLAo4NjQ5PT4nT04nLAo4NjUwPT4nT04nLAo4NjUxPT4nT04nLAo4NjUyPT4nT04nLAo4NjUzPT4nT04nLAo4NjU0PT4nT04nLAo4NjU1PT4nT04nLAo4NjU2PT4nT04nLAo4NjU3PT4nT04nLAo4NjU4PT4nT04nLAo4NjU5PT4nT04nLAo4NjYwPT4nT04nLAo4NjYxPT4nT04nLAo4NjYyPT4nT04nLAo4NjYzPT4nT04nLAo4NjY0PT4nT04nLAo4NjY1PT4nT04nLAo4NjY2PT4nT04nLAo4NjY3PT4nT04nLAo4NjY4PT4nT04nLAo4NjY5PT4nT04nLAo4NjcwPT4nT04nLAo4NjcxPT4nT04nLAo4NjcyPT4nT04nLAo4NjczPT4nT04nLAo4Njc0PT4nT04nLAo4Njc1PT4nT04nLAo4Njc2PT4nT04nLAo4Njc3PT4nT04nLAo4Njc4PT4nT04nLAo4Njc5PT4nT04nLAo4NjgwPT4nT04nLAo4NjgxPT4nT04nLAo4NjgyPT4nT04nLAo4NjgzPT4nT04nLAo4Njg0PT4nT04nLAo4Njg1PT4nT04nLAo4Njg2PT4nT04nLAo4Njg3PT4nT04nLAo4Njg4PT4nT04nLAo4Njg5PT4nT04nLAo4NjkwPT4nT04nLAo4NjkxPT4nT04nLAo4NjkyPT4nT04nLAo4NjkzPT4nT04nLAo4Njk0PT4nT04nLAo4Njk1PT4nT04nLAo4Njk2PT4nT04nLAo4Njk3PT4nT04nLAo4Njk4PT4nT04nLAo4Njk5PT4nT04nLAo4NzAwPT4nT04nLAo4NzAxPT4nT04nLAo4NzAyPT4nT04nLAo4NzAzPT4nT04nLAo4NzA0PT4nT04nLAo4NzA1PT4nT04nLAo4NzA2PT4nT04nLAo4NzA3PT4nT04nLAo4NzA4PT4nT04nLAo4NzA5PT4nT04nLAo4NzEwPT4nT04nLAo4NzExPT4nT04nLAo4NzEyPT4nT04nLAo4NzEzPT4nT04nLAo4NzE0PT4nT04nLAo4NzE1PT4nT04nLAo4NzE2PT4nT04nLAo4NzE3PT4nT04nLAo4NzE4PT4nT04nLAo4NzE5PT4nT04nLAo4NzIwPT4nT04nLAo4NzIxPT4nT04nLAo4NzIyPT4nRVMnLAo4NzIzPT4nRVQnLAo4NzI0PT4nT04nLAo4NzI1PT4nT04nLAo4NzI2PT4nT04nLAo4NzI3PT4nT04nLAo4NzI4PT4nT04nLAo4NzI5PT4nT04nLAo4NzMwPT4nT04nLAo4NzMxPT4nT04nLAo4NzMyPT4nT04nLAo4NzMzPT4nT04nLAo4NzM0PT4nT04nLAo4NzM1PT4nT04nLAo4NzM2PT4nT04nLAo4NzM3PT4nT04nLAo4NzM4PT4nT04nLAo4NzM5PT4nT04nLAo4NzQwPT4nT04nLAo4NzQxPT4nT04nLAo4NzQyPT4nT04nLAo4NzQzPT4nT04nLAo4NzQ0PT4nT04nLAo4NzQ1PT4nT04nLAo4NzQ2PT4nT04nLAo4NzQ3PT4nT04nLAo4NzQ4PT4nT04nLAo4NzQ5PT4nT04nLAo4NzUwPT4nT04nLAo4NzUxPT4nT04nLAo4NzUyPT4nT04nLAo4NzUzPT4nT04nLAo4NzU0PT4nT04nLAo4NzU1PT4nT04nLAo4NzU2PT4nT04nLAo4NzU3PT4nT04nLAo4NzU4PT4nT04nLAo4NzU5PT4nT04nLAo4NzYwPT4nT04nLAo4NzYxPT4nT04nLAo4NzYyPT4nT04nLAo4NzYzPT4nT04nLAo4NzY0PT4nT04nLAo4NzY1PT4nT04nLAo4NzY2PT4nT04nLAo4NzY3PT4nT04nLAo4NzY4PT4nT04nLAo4NzY5PT4nT04nLAo4NzcwPT4nT04nLAo4NzcxPT4nT04nLAo4NzcyPT4nT04nLAo4NzczPT4nT04nLAo4Nzc0PT4nT04nLAo4Nzc1PT4nT04nLAo4Nzc2PT4nT04nLAo4Nzc3PT4nT04nLAo4Nzc4PT4nT04nLAo4Nzc5PT4nT04nLAo4NzgwPT4nT04nLAo4NzgxPT4nT04nLAo4NzgyPT4nT04nLAo4NzgzPT4nT04nLAo4Nzg0PT4nT04nLAo4Nzg1PT4nT04nLAo4Nzg2PT4nT04nLAo4Nzg3PT4nT04nLAo4Nzg4PT4nT04nLAo4Nzg5PT4nT04nLAo4NzkwPT4nT04nLAo4NzkxPT4nT04nLAo4NzkyPT4nT04nLAo4NzkzPT4nT04nLAo4Nzk0PT4nT04nLAo4Nzk1PT4nT04nLAo4Nzk2PT4nT04nLAo4Nzk3PT4nT04nLAo4Nzk4PT4nT04nLAo4Nzk5PT4nT04nLAo4ODAwPT4nT04nLAo4ODAxPT4nT04nLAo4ODAyPT4nT04nLAo4ODAzPT4nT04nLAo4ODA0PT4nT04nLAo4ODA1PT4nT04nLAo4ODA2PT4nT04nLAo4ODA3PT4nT04nLAo4ODA4PT4nT04nLAo4ODA5PT4nT04nLAo4ODEwPT4nT04nLAo4ODExPT4nT04nLAo4ODEyPT4nT04nLAo4ODEzPT4nT04nLAo4ODE0PT4nT04nLAo4ODE1PT4nT04nLAo4ODE2PT4nT04nLAo4ODE3PT4nT04nLAo4ODE4PT4nT04nLAo4ODE5PT4nT04nLAo4ODIwPT4nT04nLAo4ODIxPT4nT04nLAo4ODIyPT4nT04nLAo4ODIzPT4nT04nLAo4ODI0PT4nT04nLAo4ODI1PT4nT04nLAo4ODI2PT4nT04nLAo4ODI3PT4nT04nLAo4ODI4PT4nT04nLAo4ODI5PT4nT04nLAo4ODMwPT4nT04nLAo4ODMxPT4nT04nLAo4ODMyPT4nT04nLAo4ODMzPT4nT04nLAo4ODM0PT4nT04nLAo4ODM1PT4nT04nLAo4ODM2PT4nT04nLAo4ODM3PT4nT04nLAo4ODM4PT4nT04nLAo4ODM5PT4nT04nLAo4ODQwPT4nT04nLAo4ODQxPT4nT04nLAo4ODQyPT4nT04nLAo4ODQzPT4nT04nLAo4ODQ0PT4nT04nLAo4ODQ1PT4nT04nLAo4ODQ2PT4nT04nLAo4ODQ3PT4nT04nLAo4ODQ4PT4nT04nLAo4ODQ5PT4nT04nLAo4ODUwPT4nT04nLAo4ODUxPT4nT04nLAo4ODUyPT4nT04nLAo4ODUzPT4nT04nLAo4ODU0PT4nT04nLAo4ODU1PT4nT04nLAo4ODU2PT4nT04nLAo4ODU3PT4nT04nLAo4ODU4PT4nT04nLAo4ODU5PT4nT04nLAo4ODYwPT4nT04nLAo4ODYxPT4nT04nLAo4ODYyPT4nT04nLAo4ODYzPT4nT04nLAo4ODY0PT4nT04nLAo4ODY1PT4nT04nLAo4ODY2PT4nT04nLAo4ODY3PT4nT04nLAo4ODY4PT4nT04nLAo4ODY5PT4nT04nLAo4ODcwPT4nT04nLAo4ODcxPT4nT04nLAo4ODcyPT4nT04nLAo4ODczPT4nT04nLAo4ODc0PT4nT04nLAo4ODc1PT4nT04nLAo4ODc2PT4nT04nLAo4ODc3PT4nT04nLAo4ODc4PT4nT04nLAo4ODc5PT4nT04nLAo4ODgwPT4nT04nLAo4ODgxPT4nT04nLAo4ODgyPT4nT04nLAo4ODgzPT4nT04nLAo4ODg0PT4nT04nLAo4ODg1PT4nT04nLAo4ODg2PT4nT04nLAo4ODg3PT4nT04nLAo4ODg4PT4nT04nLAo4ODg5PT4nT04nLAo4ODkwPT4nT04nLAo4ODkxPT4nT04nLAo4ODkyPT4nT04nLAo4ODkzPT4nT04nLAo4ODk0PT4nT04nLAo4ODk1PT4nT04nLAo4ODk2PT4nT04nLAo4ODk3PT4nT04nLAo4ODk4PT4nT04nLAo4ODk5PT4nT04nLAo4OTAwPT4nT04nLAo4OTAxPT4nT04nLAo4OTAyPT4nT04nLAo4OTAzPT4nT04nLAo4OTA0PT4nT04nLAo4OTA1PT4nT04nLAo4OTA2PT4nT04nLAo4OTA3PT4nT04nLAo4OTA4PT4nT04nLAo4OTA5PT4nT04nLAo4OTEwPT4nT04nLAo4OTExPT4nT04nLAo4OTEyPT4nT04nLAo4OTEzPT4nT04nLAo4OTE0PT4nT04nLAo4OTE1PT4nT04nLAo4OTE2PT4nT04nLAo4OTE3PT4nT04nLAo4OTE4PT4nT04nLAo4OTE5PT4nT04nLAo4OTIwPT4nT04nLAo4OTIxPT4nT04nLAo4OTIyPT4nT04nLAo4OTIzPT4nT04nLAo4OTI0PT4nT04nLAo4OTI1PT4nT04nLAo4OTI2PT4nT04nLAo4OTI3PT4nT04nLAo4OTI4PT4nT04nLAo4OTI5PT4nT04nLAo4OTMwPT4nT04nLAo4OTMxPT4nT04nLAo4OTMyPT4nT04nLAo4OTMzPT4nT04nLAo4OTM0PT4nT04nLAo4OTM1PT4nT04nLAo4OTM2PT4nT04nLAo4OTM3PT4nT04nLAo4OTM4PT4nT04nLAo4OTM5PT4nT04nLAo4OTQwPT4nT04nLAo4OTQxPT4nT04nLAo4OTQyPT4nT04nLAo4OTQzPT4nT04nLAo4OTQ0PT4nT04nLAo4OTQ1PT4nT04nLAo4OTQ2PT4nT04nLAo4OTQ3PT4nT04nLAo4OTQ4PT4nT04nLAo4OTQ5PT4nT04nLAo4OTUwPT4nT04nLAo4OTUxPT4nT04nLAo4OTUyPT4nT04nLAo4OTUzPT4nT04nLAo4OTU0PT4nT04nLAo4OTU1PT4nT04nLAo4OTU2PT4nT04nLAo4OTU3PT4nT04nLAo4OTU4PT4nT04nLAo4OTU5PT4nT04nLAo4OTYwPT4nT04nLAo4OTYxPT4nT04nLAo4OTYyPT4nT04nLAo4OTYzPT4nT04nLAo4OTY0PT4nT04nLAo4OTY1PT4nT04nLAo4OTY2PT4nT04nLAo4OTY3PT4nT04nLAo4OTY4PT4nT04nLAo4OTY5PT4nT04nLAo4OTcwPT4nT04nLAo4OTcxPT4nT04nLAo4OTcyPT4nT04nLAo4OTczPT4nT04nLAo4OTc0PT4nT04nLAo4OTc1PT4nT04nLAo4OTc2PT4nT04nLAo4OTc3PT4nT04nLAo4OTc4PT4nT04nLAo4OTc5PT4nT04nLAo4OTgwPT4nT04nLAo4OTgxPT4nT04nLAo4OTgyPT4nT04nLAo4OTgzPT4nT04nLAo4OTg0PT4nT04nLAo4OTg1PT4nT04nLAo4OTg2PT4nT04nLAo4OTg3PT4nT04nLAo4OTg4PT4nT04nLAo4OTg5PT4nT04nLAo4OTkwPT4nT04nLAo4OTkxPT4nT04nLAo4OTkyPT4nT04nLAo4OTkzPT4nT04nLAo4OTk0PT4nT04nLAo4OTk1PT4nT04nLAo4OTk2PT4nT04nLAo4OTk3PT4nT04nLAo4OTk4PT4nT04nLAo4OTk5PT4nT04nLAo5MDAwPT4nT04nLAo5MDAxPT4nT04nLAo5MDAyPT4nT04nLAo5MDAzPT4nT04nLAo5MDA0PT4nT04nLAo5MDA1PT4nT04nLAo5MDA2PT4nT04nLAo5MDA3PT4nT04nLAo5MDA4PT4nT04nLAo5MDA5PT4nT04nLAo5MDEwPT4nT04nLAo5MDExPT4nT04nLAo5MDEyPT4nT04nLAo5MDEzPT4nT04nLAo5MDE0PT4nTCcsCjkwMTU9PidMJywKOTAxNj0+J0wnLAo5MDE3PT4nTCcsCjkwMTg9PidMJywKOTAxOT0+J0wnLAo5MDIwPT4nTCcsCjkwMjE9PidMJywKOTAyMj0+J0wnLAo5MDIzPT4nTCcsCjkwMjQ9PidMJywKOTAyNT0+J0wnLAo5MDI2PT4nTCcsCjkwMjc9PidMJywKOTAyOD0+J0wnLAo5MDI5PT4nTCcsCjkwMzA9PidMJywKOTAzMT0+J0wnLAo5MDMyPT4nTCcsCjkwMzM9PidMJywKOTAzND0+J0wnLAo5MDM1PT4nTCcsCjkwMzY9PidMJywKOTAzNz0+J0wnLAo5MDM4PT4nTCcsCjkwMzk9PidMJywKOTA0MD0+J0wnLAo5MDQxPT4nTCcsCjkwNDI9PidMJywKOTA0Mz0+J0wnLAo5MDQ0PT4nTCcsCjkwNDU9PidMJywKOTA0Nj0+J0wnLAo5MDQ3PT4nTCcsCjkwNDg9PidMJywKOTA0OT0+J0wnLAo5MDUwPT4nTCcsCjkwNTE9PidMJywKOTA1Mj0+J0wnLAo5MDUzPT4nTCcsCjkwNTQ9PidMJywKOTA1NT0+J0wnLAo5MDU2PT4nTCcsCjkwNTc9PidMJywKOTA1OD0+J0wnLAo5MDU5PT4nTCcsCjkwNjA9PidMJywKOTA2MT0+J0wnLAo5MDYyPT4nTCcsCjkwNjM9PidMJywKOTA2ND0+J0wnLAo5MDY1PT4nTCcsCjkwNjY9PidMJywKOTA2Nz0+J0wnLAo5MDY4PT4nTCcsCjkwNjk9PidMJywKOTA3MD0+J0wnLAo5MDcxPT4nTCcsCjkwNzI9PidMJywKOTA3Mz0+J0wnLAo5MDc0PT4nTCcsCjkwNzU9PidMJywKOTA3Nj0+J0wnLAo5MDc3PT4nTCcsCjkwNzg9PidMJywKOTA3OT0+J0wnLAo5MDgwPT4nTCcsCjkwODE9PidMJywKOTA4Mj0+J0wnLAo5MDgzPT4nT04nLAo5MDg0PT4nT04nLAo5MDg1PT4nT04nLAo5MDg2PT4nT04nLAo5MDg3PT4nT04nLAo5MDg4PT4nT04nLAo5MDg5PT4nT04nLAo5MDkwPT4nT04nLAo5MDkxPT4nT04nLAo5MDkyPT4nT04nLAo5MDkzPT4nT04nLAo5MDk0PT4nT04nLAo5MDk1PT4nT04nLAo5MDk2PT4nT04nLAo5MDk3PT4nT04nLAo5MDk4PT4nT04nLAo5MDk5PT4nT04nLAo5MTAwPT4nT04nLAo5MTAxPT4nT04nLAo5MTAyPT4nT04nLAo5MTAzPT4nT04nLAo5MTA0PT4nT04nLAo5MTA1PT4nT04nLAo5MTA2PT4nT04nLAo5MTA3PT4nT04nLAo5MTA4PT4nT04nLAo5MTA5PT4nTCcsCjkxMTA9PidPTicsCjkxMTE9PidPTicsCjkxMTI9PidPTicsCjkxMTM9PidPTicsCjkxMTQ9PidPTicsCjkxMTU9PidPTicsCjkxMTY9PidPTicsCjkxMTc9PidPTicsCjkxMTg9PidPTicsCjkxMTk9PidPTicsCjkxMjA9PidPTicsCjkxMjE9PidPTicsCjkxMjI9PidPTicsCjkxMjM9PidPTicsCjkxMjQ9PidPTicsCjkxMjU9PidPTicsCjkxMjY9PidPTicsCjkxMjc9PidPTicsCjkxMjg9PidPTicsCjkxMjk9PidPTicsCjkxMzA9PidPTicsCjkxMzE9PidPTicsCjkxMzI9PidPTicsCjkxMzM9PidPTicsCjkxMzQ9PidPTicsCjkxMzU9PidPTicsCjkxMzY9PidPTicsCjkxMzc9PidPTicsCjkxMzg9PidPTicsCjkxMzk9PidPTicsCjkxNDA9PidPTicsCjkxNDE9PidPTicsCjkxNDI9PidPTicsCjkxNDM9PidPTicsCjkxNDQ9PidPTicsCjkxNDU9PidPTicsCjkxNDY9PidPTicsCjkxNDc9PidPTicsCjkxNDg9PidPTicsCjkxNDk9PidPTicsCjkxNTA9PidPTicsCjkxNTE9PidPTicsCjkxNTI9PidPTicsCjkxNTM9PidPTicsCjkxNTQ9PidPTicsCjkxNTU9PidPTicsCjkxNTY9PidPTicsCjkxNTc9PidPTicsCjkxNTg9PidPTicsCjkxNTk9PidPTicsCjkxNjA9PidPTicsCjkxNjE9PidPTicsCjkxNjI9PidPTicsCjkxNjM9PidPTicsCjkxNjQ9PidPTicsCjkxNjU9PidPTicsCjkxNjY9PidPTicsCjkxNjc9PidPTicsCjkxNjg9PidPTicsCjkxNjk9PidPTicsCjkxNzA9PidPTicsCjkxNzE9PidPTicsCjkxNzI9PidPTicsCjkxNzM9PidPTicsCjkxNzQ9PidPTicsCjkxNzU9PidPTicsCjkxNzY9PidPTicsCjkxNzc9PidPTicsCjkxNzg9PidPTicsCjkxNzk9PidPTicsCjkxODA9PidPTicsCjkxODE9PidPTicsCjkxODI9PidPTicsCjkxODM9PidPTicsCjkxODQ9PidPTicsCjkxODU9PidPTicsCjkxODY9PidPTicsCjkxODc9PidPTicsCjkxODg9PidPTicsCjkxODk9PidPTicsCjkxOTA9PidPTicsCjkxOTE9PidPTicsCjkyMTY9PidPTicsCjkyMTc9PidPTicsCjkyMTg9PidPTicsCjkyMTk9PidPTicsCjkyMjA9PidPTicsCjkyMjE9PidPTicsCjkyMjI9PidPTicsCjkyMjM9PidPTicsCjkyMjQ9PidPTicsCjkyMjU9PidPTicsCjkyMjY9PidPTicsCjkyMjc9PidPTicsCjkyMjg9PidPTicsCjkyMjk9PidPTicsCjkyMzA9PidPTicsCjkyMzE9PidPTicsCjkyMzI9PidPTicsCjkyMzM9PidPTicsCjkyMzQ9PidPTicsCjkyMzU9PidPTicsCjkyMzY9PidPTicsCjkyMzc9PidPTicsCjkyMzg9PidPTicsCjkyMzk9PidPTicsCjkyNDA9PidPTicsCjkyNDE9PidPTicsCjkyNDI9PidPTicsCjkyNDM9PidPTicsCjkyNDQ9PidPTicsCjkyNDU9PidPTicsCjkyNDY9PidPTicsCjkyNDc9PidPTicsCjkyNDg9PidPTicsCjkyNDk9PidPTicsCjkyNTA9PidPTicsCjkyNTE9PidPTicsCjkyNTI9PidPTicsCjkyNTM9PidPTicsCjkyNTQ9PidPTicsCjkyODA9PidPTicsCjkyODE9PidPTicsCjkyODI9PidPTicsCjkyODM9PidPTicsCjkyODQ9PidPTicsCjkyODU9PidPTicsCjkyODY9PidPTicsCjkyODc9PidPTicsCjkyODg9PidPTicsCjkyODk9PidPTicsCjkyOTA9PidPTicsCjkzMTI9PidPTicsCjkzMTM9PidPTicsCjkzMTQ9PidPTicsCjkzMTU9PidPTicsCjkzMTY9PidPTicsCjkzMTc9PidPTicsCjkzMTg9PidPTicsCjkzMTk9PidPTicsCjkzMjA9PidPTicsCjkzMjE9PidPTicsCjkzMjI9PidPTicsCjkzMjM9PidPTicsCjkzMjQ9PidPTicsCjkzMjU9PidPTicsCjkzMjY9PidPTicsCjkzMjc9PidPTicsCjkzMjg9PidPTicsCjkzMjk9PidPTicsCjkzMzA9PidPTicsCjkzMzE9PidPTicsCjkzMzI9PidPTicsCjkzMzM9PidPTicsCjkzMzQ9PidPTicsCjkzMzU9PidPTicsCjkzMzY9PidPTicsCjkzMzc9PidPTicsCjkzMzg9PidPTicsCjkzMzk9PidPTicsCjkzNDA9PidPTicsCjkzNDE9PidPTicsCjkzNDI9PidPTicsCjkzNDM9PidPTicsCjkzNDQ9PidPTicsCjkzNDU9PidPTicsCjkzNDY9PidPTicsCjkzNDc9PidPTicsCjkzNDg9PidPTicsCjkzNDk9PidPTicsCjkzNTA9PidPTicsCjkzNTE9PidPTicsCjkzNTI9PidFTicsCjkzNTM9PidFTicsCjkzNTQ9PidFTicsCjkzNTU9PidFTicsCjkzNTY9PidFTicsCjkzNTc9PidFTicsCjkzNTg9PidFTicsCjkzNTk9PidFTicsCjkzNjA9PidFTicsCjkzNjE9PidFTicsCjkzNjI9PidFTicsCjkzNjM9PidFTicsCjkzNjQ9PidFTicsCjkzNjU9PidFTicsCjkzNjY9PidFTicsCjkzNjc9PidFTicsCjkzNjg9PidFTicsCjkzNjk9PidFTicsCjkzNzA9PidFTicsCjkzNzE9PidFTicsCjkzNzI9PidMJywKOTM3Mz0+J0wnLAo5Mzc0PT4nTCcsCjkzNzU9PidMJywKOTM3Nj0+J0wnLAo5Mzc3PT4nTCcsCjkzNzg9PidMJywKOTM3OT0+J0wnLAo5MzgwPT4nTCcsCjkzODE9PidMJywKOTM4Mj0+J0wnLAo5MzgzPT4nTCcsCjkzODQ9PidMJywKOTM4NT0+J0wnLAo5Mzg2PT4nTCcsCjkzODc9PidMJywKOTM4OD0+J0wnLAo5Mzg5PT4nTCcsCjkzOTA9PidMJywKOTM5MT0+J0wnLAo5MzkyPT4nTCcsCjkzOTM9PidMJywKOTM5ND0+J0wnLAo5Mzk1PT4nTCcsCjkzOTY9PidMJywKOTM5Nz0+J0wnLAo5Mzk4PT4nTCcsCjkzOTk9PidMJywKOTQwMD0+J0wnLAo5NDAxPT4nTCcsCjk0MDI9PidMJywKOTQwMz0+J0wnLAo5NDA0PT4nTCcsCjk0MDU9PidMJywKOTQwNj0+J0wnLAo5NDA3PT4nTCcsCjk0MDg9PidMJywKOTQwOT0+J0wnLAo5NDEwPT4nTCcsCjk0MTE9PidMJywKOTQxMj0+J0wnLAo5NDEzPT4nTCcsCjk0MTQ9PidMJywKOTQxNT0+J0wnLAo5NDE2PT4nTCcsCjk0MTc9PidMJywKOTQxOD0+J0wnLAo5NDE5PT4nTCcsCjk0MjA9PidMJywKOTQyMT0+J0wnLAo5NDIyPT4nTCcsCjk0MjM9PidMJywKOTQyND0+J0wnLAo5NDI1PT4nTCcsCjk0MjY9PidMJywKOTQyNz0+J0wnLAo5NDI4PT4nTCcsCjk0Mjk9PidMJywKOTQzMD0+J0wnLAo5NDMxPT4nTCcsCjk0MzI9PidMJywKOTQzMz0+J0wnLAo5NDM0PT4nTCcsCjk0MzU9PidMJywKOTQzNj0+J0wnLAo5NDM3PT4nTCcsCjk0Mzg9PidMJywKOTQzOT0+J0wnLAo5NDQwPT4nTCcsCjk0NDE9PidMJywKOTQ0Mj0+J0wnLAo5NDQzPT4nTCcsCjk0NDQ9PidMJywKOTQ0NT0+J0wnLAo5NDQ2PT4nTCcsCjk0NDc9PidMJywKOTQ0OD0+J0wnLAo5NDQ5PT4nTCcsCjk0NTA9PidPTicsCjk0NTE9PidPTicsCjk0NTI9PidPTicsCjk0NTM9PidPTicsCjk0NTQ9PidPTicsCjk0NTU9PidPTicsCjk0NTY9PidPTicsCjk0NTc9PidPTicsCjk0NTg9PidPTicsCjk0NTk9PidPTicsCjk0NjA9PidPTicsCjk0NjE9PidPTicsCjk0NjI9PidPTicsCjk0NjM9PidPTicsCjk0NjQ9PidPTicsCjk0NjU9PidPTicsCjk0NjY9PidPTicsCjk0Njc9PidPTicsCjk0Njg9PidPTicsCjk0Njk9PidPTicsCjk0NzA9PidPTicsCjk0NzE9PidPTicsCjk0NzI9PidPTicsCjk0NzM9PidPTicsCjk0NzQ9PidPTicsCjk0NzU9PidPTicsCjk0NzY9PidPTicsCjk0Nzc9PidPTicsCjk0Nzg9PidPTicsCjk0Nzk9PidPTicsCjk0ODA9PidPTicsCjk0ODE9PidPTicsCjk0ODI9PidPTicsCjk0ODM9PidPTicsCjk0ODQ9PidPTicsCjk0ODU9PidPTicsCjk0ODY9PidPTicsCjk0ODc9PidPTicsCjk0ODg9PidPTicsCjk0ODk9PidPTicsCjk0OTA9PidPTicsCjk0OTE9PidPTicsCjk0OTI9PidPTicsCjk0OTM9PidPTicsCjk0OTQ9PidPTicsCjk0OTU9PidPTicsCjk0OTY9PidPTicsCjk0OTc9PidPTicsCjk0OTg9PidPTicsCjk0OTk9PidPTicsCjk1MDA9PidPTicsCjk1MDE9PidPTicsCjk1MDI9PidPTicsCjk1MDM9PidPTicsCjk1MDQ9PidPTicsCjk1MDU9PidPTicsCjk1MDY9PidPTicsCjk1MDc9PidPTicsCjk1MDg9PidPTicsCjk1MDk9PidPTicsCjk1MTA9PidPTicsCjk1MTE9PidPTicsCjk1MTI9PidPTicsCjk1MTM9PidPTicsCjk1MTQ9PidPTicsCjk1MTU9PidPTicsCjk1MTY9PidPTicsCjk1MTc9PidPTicsCjk1MTg9PidPTicsCjk1MTk9PidPTicsCjk1MjA9PidPTicsCjk1MjE9PidPTicsCjk1MjI9PidPTicsCjk1MjM9PidPTicsCjk1MjQ9PidPTicsCjk1MjU9PidPTicsCjk1MjY9PidPTicsCjk1Mjc9PidPTicsCjk1Mjg9PidPTicsCjk1Mjk9PidPTicsCjk1MzA9PidPTicsCjk1MzE9PidPTicsCjk1MzI9PidPTicsCjk1MzM9PidPTicsCjk1MzQ9PidPTicsCjk1MzU9PidPTicsCjk1MzY9PidPTicsCjk1Mzc9PidPTicsCjk1Mzg9PidPTicsCjk1Mzk9PidPTicsCjk1NDA9PidPTicsCjk1NDE9PidPTicsCjk1NDI9PidPTicsCjk1NDM9PidPTicsCjk1NDQ9PidPTicsCjk1NDU9PidPTicsCjk1NDY9PidPTicsCjk1NDc9PidPTicsCjk1NDg9PidPTicsCjk1NDk9PidPTicsCjk1NTA9PidPTicsCjk1NTE9PidPTicsCjk1NTI9PidPTicsCjk1NTM9PidPTicsCjk1NTQ9PidPTicsCjk1NTU9PidPTicsCjk1NTY9PidPTicsCjk1NTc9PidPTicsCjk1NTg9PidPTicsCjk1NTk9PidPTicsCjk1NjA9PidPTicsCjk1NjE9PidPTicsCjk1NjI9PidPTicsCjk1NjM9PidPTicsCjk1NjQ9PidPTicsCjk1NjU9PidPTicsCjk1NjY9PidPTicsCjk1Njc9PidPTicsCjk1Njg9PidPTicsCjk1Njk9PidPTicsCjk1NzA9PidPTicsCjk1NzE9PidPTicsCjk1NzI9PidPTicsCjk1NzM9PidPTicsCjk1NzQ9PidPTicsCjk1NzU9PidPTicsCjk1NzY9PidPTicsCjk1Nzc9PidPTicsCjk1Nzg9PidPTicsCjk1Nzk9PidPTicsCjk1ODA9PidPTicsCjk1ODE9PidPTicsCjk1ODI9PidPTicsCjk1ODM9PidPTicsCjk1ODQ9PidPTicsCjk1ODU9PidPTicsCjk1ODY9PidPTicsCjk1ODc9PidPTicsCjk1ODg9PidPTicsCjk1ODk9PidPTicsCjk1OTA9PidPTicsCjk1OTE9PidPTicsCjk1OTI9PidPTicsCjk1OTM9PidPTicsCjk1OTQ9PidPTicsCjk1OTU9PidPTicsCjk1OTY9PidPTicsCjk1OTc9PidPTicsCjk1OTg9PidPTicsCjk1OTk9PidPTicsCjk2MDA9PidPTicsCjk2MDE9PidPTicsCjk2MDI9PidPTicsCjk2MDM9PidPTicsCjk2MDQ9PidPTicsCjk2MDU9PidPTicsCjk2MDY9PidPTicsCjk2MDc9PidPTicsCjk2MDg9PidPTicsCjk2MDk9PidPTicsCjk2MTA9PidPTicsCjk2MTE9PidPTicsCjk2MTI9PidPTicsCjk2MTM9PidPTicsCjk2MTQ9PidPTicsCjk2MTU9PidPTicsCjk2MTY9PidPTicsCjk2MTc9PidPTicsCjk2MTg9PidPTicsCjk2MTk9PidPTicsCjk2MjA9PidPTicsCjk2MjE9PidPTicsCjk2MjI9PidPTicsCjk2MjM9PidPTicsCjk2MjQ9PidPTicsCjk2MjU9PidPTicsCjk2MjY9PidPTicsCjk2Mjc9PidPTicsCjk2Mjg9PidPTicsCjk2Mjk9PidPTicsCjk2MzA9PidPTicsCjk2MzE9PidPTicsCjk2MzI9PidPTicsCjk2MzM9PidPTicsCjk2MzQ9PidPTicsCjk2MzU9PidPTicsCjk2MzY9PidPTicsCjk2Mzc9PidPTicsCjk2Mzg9PidPTicsCjk2Mzk9PidPTicsCjk2NDA9PidPTicsCjk2NDE9PidPTicsCjk2NDI9PidPTicsCjk2NDM9PidPTicsCjk2NDQ9PidPTicsCjk2NDU9PidPTicsCjk2NDY9PidPTicsCjk2NDc9PidPTicsCjk2NDg9PidPTicsCjk2NDk9PidPTicsCjk2NTA9PidPTicsCjk2NTE9PidPTicsCjk2NTI9PidPTicsCjk2NTM9PidPTicsCjk2NTQ9PidPTicsCjk2NTU9PidPTicsCjk2NTY9PidPTicsCjk2NTc9PidPTicsCjk2NTg9PidPTicsCjk2NTk9PidPTicsCjk2NjA9PidPTicsCjk2NjE9PidPTicsCjk2NjI9PidPTicsCjk2NjM9PidPTicsCjk2NjQ9PidPTicsCjk2NjU9PidPTicsCjk2NjY9PidPTicsCjk2Njc9PidPTicsCjk2Njg9PidPTicsCjk2Njk9PidPTicsCjk2NzA9PidPTicsCjk2NzE9PidPTicsCjk2NzI9PidPTicsCjk2NzM9PidPTicsCjk2NzQ9PidPTicsCjk2NzU9PidPTicsCjk2NzY9PidPTicsCjk2Nzc9PidPTicsCjk2Nzg9PidPTicsCjk2Nzk9PidPTicsCjk2ODA9PidPTicsCjk2ODE9PidPTicsCjk2ODI9PidPTicsCjk2ODM9PidPTicsCjk2ODQ9PidPTicsCjk2ODU9PidPTicsCjk2ODY9PidPTicsCjk2ODc9PidPTicsCjk2ODg9PidPTicsCjk2ODk9PidPTicsCjk2OTA9PidPTicsCjk2OTE9PidPTicsCjk2OTI9PidPTicsCjk2OTM9PidPTicsCjk2OTQ9PidPTicsCjk2OTU9PidPTicsCjk2OTY9PidPTicsCjk2OTc9PidPTicsCjk2OTg9PidPTicsCjk2OTk9PidPTicsCjk3MDA9PidPTicsCjk3MDE9PidPTicsCjk3MDI9PidPTicsCjk3MDM9PidPTicsCjk3MDQ9PidPTicsCjk3MDU9PidPTicsCjk3MDY9PidPTicsCjk3MDc9PidPTicsCjk3MDg9PidPTicsCjk3MDk9PidPTicsCjk3MTA9PidPTicsCjk3MTE9PidPTicsCjk3MTI9PidPTicsCjk3MTM9PidPTicsCjk3MTQ9PidPTicsCjk3MTU9PidPTicsCjk3MTY9PidPTicsCjk3MTc9PidPTicsCjk3MTg9PidPTicsCjk3MTk9PidPTicsCjk3MjA9PidPTicsCjk3MjE9PidPTicsCjk3MjI9PidPTicsCjk3MjM9PidPTicsCjk3MjQ9PidPTicsCjk3MjU9PidPTicsCjk3MjY9PidPTicsCjk3Mjc9PidPTicsCjk3Mjg9PidPTicsCjk3Mjk9PidPTicsCjk3MzA9PidPTicsCjk3MzE9PidPTicsCjk3MzI9PidPTicsCjk3MzM9PidPTicsCjk3MzQ9PidPTicsCjk3MzU9PidPTicsCjk3MzY9PidPTicsCjk3Mzc9PidPTicsCjk3Mzg9PidPTicsCjk3Mzk9PidPTicsCjk3NDA9PidPTicsCjk3NDE9PidPTicsCjk3NDI9PidPTicsCjk3NDM9PidPTicsCjk3NDQ9PidPTicsCjk3NDU9PidPTicsCjk3NDY9PidPTicsCjk3NDc9PidPTicsCjk3NDg9PidPTicsCjk3NDk9PidPTicsCjk3NTA9PidPTicsCjk3NTE9PidPTicsCjk3NTI9PidPTicsCjk3NTM9PidPTicsCjk3NTQ9PidPTicsCjk3NTU9PidPTicsCjk3NTY9PidPTicsCjk3NTc9PidPTicsCjk3NTg9PidPTicsCjk3NTk9PidPTicsCjk3NjA9PidPTicsCjk3NjE9PidPTicsCjk3NjI9PidPTicsCjk3NjM9PidPTicsCjk3NjQ9PidPTicsCjk3NjU9PidPTicsCjk3NjY9PidPTicsCjk3Njc9PidPTicsCjk3Njg9PidPTicsCjk3Njk9PidPTicsCjk3NzA9PidPTicsCjk3NzE9PidPTicsCjk3NzI9PidPTicsCjk3NzM9PidPTicsCjk3NzQ9PidPTicsCjk3NzU9PidPTicsCjk3NzY9PidPTicsCjk3Nzc9PidPTicsCjk3Nzg9PidPTicsCjk3Nzk9PidPTicsCjk3ODA9PidPTicsCjk3ODE9PidPTicsCjk3ODI9PidPTicsCjk3ODM9PidPTicsCjk3ODQ9PidPTicsCjk3ODU9PidPTicsCjk3ODY9PidPTicsCjk3ODc9PidPTicsCjk3ODg9PidPTicsCjk3ODk9PidPTicsCjk3OTA9PidPTicsCjk3OTE9PidPTicsCjk3OTI9PidPTicsCjk3OTM9PidPTicsCjk3OTQ9PidPTicsCjk3OTU9PidPTicsCjk3OTY9PidPTicsCjk3OTc9PidPTicsCjk3OTg9PidPTicsCjk3OTk9PidPTicsCjk4MDA9PidPTicsCjk4MDE9PidPTicsCjk4MDI9PidPTicsCjk4MDM9PidPTicsCjk4MDQ9PidPTicsCjk4MDU9PidPTicsCjk4MDY9PidPTicsCjk4MDc9PidPTicsCjk4MDg9PidPTicsCjk4MDk9PidPTicsCjk4MTA9PidPTicsCjk4MTE9PidPTicsCjk4MTI9PidPTicsCjk4MTM9PidPTicsCjk4MTQ9PidPTicsCjk4MTU9PidPTicsCjk4MTY9PidPTicsCjk4MTc9PidPTicsCjk4MTg9PidPTicsCjk4MTk9PidPTicsCjk4MjA9PidPTicsCjk4MjE9PidPTicsCjk4MjI9PidPTicsCjk4MjM9PidPTicsCjk4MjQ9PidPTicsCjk4MjU9PidPTicsCjk4MjY9PidPTicsCjk4Mjc9PidPTicsCjk4Mjg9PidPTicsCjk4Mjk9PidPTicsCjk4MzA9PidPTicsCjk4MzE9PidPTicsCjk4MzI9PidPTicsCjk4MzM9PidPTicsCjk4MzQ9PidPTicsCjk4MzU9PidPTicsCjk4MzY9PidPTicsCjk4Mzc9PidPTicsCjk4Mzg9PidPTicsCjk4Mzk9PidPTicsCjk4NDA9PidPTicsCjk4NDE9PidPTicsCjk4NDI9PidPTicsCjk4NDM9PidPTicsCjk4NDQ9PidPTicsCjk4NDU9PidPTicsCjk4NDY9PidPTicsCjk4NDc9PidPTicsCjk4NDg9PidPTicsCjk4NDk9PidPTicsCjk4NTA9PidPTicsCjk4NTE9PidPTicsCjk4NTI9PidPTicsCjk4NTM9PidPTicsCjk4NTQ9PidPTicsCjk4NTU9PidPTicsCjk4NTY9PidPTicsCjk4NTc9PidPTicsCjk4NTg9PidPTicsCjk4NTk9PidPTicsCjk4NjA9PidPTicsCjk4NjE9PidPTicsCjk4NjI9PidPTicsCjk4NjM9PidPTicsCjk4NjQ9PidPTicsCjk4NjU9PidPTicsCjk4NjY9PidPTicsCjk4Njc9PidPTicsCjk4Njg9PidPTicsCjk4Njk9PidPTicsCjk4NzA9PidPTicsCjk4NzE9PidPTicsCjk4NzI9PidPTicsCjk4NzM9PidPTicsCjk4NzQ9PidPTicsCjk4NzU9PidPTicsCjk4NzY9PidPTicsCjk4Nzc9PidPTicsCjk4Nzg9PidPTicsCjk4Nzk9PidPTicsCjk4ODA9PidPTicsCjk4ODE9PidPTicsCjk4ODI9PidPTicsCjk4ODM9PidPTicsCjk4ODQ9PidPTicsCjk4ODg9PidPTicsCjk4ODk9PidPTicsCjk4OTA9PidPTicsCjk4OTE9PidPTicsCjk4OTI9PidPTicsCjk4OTM9PidPTicsCjk4OTQ9PidPTicsCjk4OTU9PidPTicsCjk4OTY9PidPTicsCjk4OTc9PidPTicsCjk4OTg9PidPTicsCjk4OTk9PidPTicsCjk5MDA9PidMJywKOTkwMT0+J09OJywKOTkwMj0+J09OJywKOTkwMz0+J09OJywKOTkwND0+J09OJywKOTkwNT0+J09OJywKOTkwNj0+J09OJywKOTk4NT0+J09OJywKOTk4Nj0+J09OJywKOTk4Nz0+J09OJywKOTk4OD0+J09OJywKOTk5MD0+J09OJywKOTk5MT0+J09OJywKOTk5Mj0+J09OJywKOTk5Mz0+J09OJywKOTk5Nj0+J09OJywKOTk5Nz0+J09OJywKOTk5OD0+J09OJywKOTk5OT0+J09OJywKMTAwMDA9PidPTicsCjEwMDAxPT4nT04nLAoxMDAwMj0+J09OJywKMTAwMDM9PidPTicsCjEwMDA0PT4nT04nLAoxMDAwNT0+J09OJywKMTAwMDY9PidPTicsCjEwMDA3PT4nT04nLAoxMDAwOD0+J09OJywKMTAwMDk9PidPTicsCjEwMDEwPT4nT04nLAoxMDAxMT0+J09OJywKMTAwMTI9PidPTicsCjEwMDEzPT4nT04nLAoxMDAxND0+J09OJywKMTAwMTU9PidPTicsCjEwMDE2PT4nT04nLAoxMDAxNz0+J09OJywKMTAwMTg9PidPTicsCjEwMDE5PT4nT04nLAoxMDAyMD0+J09OJywKMTAwMjE9PidPTicsCjEwMDIyPT4nT04nLAoxMDAyMz0+J09OJywKMTAwMjU9PidPTicsCjEwMDI2PT4nT04nLAoxMDAyNz0+J09OJywKMTAwMjg9PidPTicsCjEwMDI5PT4nT04nLAoxMDAzMD0+J09OJywKMTAwMzE9PidPTicsCjEwMDMyPT4nT04nLAoxMDAzMz0+J09OJywKMTAwMzQ9PidPTicsCjEwMDM1PT4nT04nLAoxMDAzNj0+J09OJywKMTAwMzc9PidPTicsCjEwMDM4PT4nT04nLAoxMDAzOT0+J09OJywKMTAwNDA9PidPTicsCjEwMDQxPT4nT04nLAoxMDA0Mj0+J09OJywKMTAwNDM9PidPTicsCjEwMDQ0PT4nT04nLAoxMDA0NT0+J09OJywKMTAwNDY9PidPTicsCjEwMDQ3PT4nT04nLAoxMDA0OD0+J09OJywKMTAwNDk9PidPTicsCjEwMDUwPT4nT04nLAoxMDA1MT0+J09OJywKMTAwNTI9PidPTicsCjEwMDUzPT4nT04nLAoxMDA1ND0+J09OJywKMTAwNTU9PidPTicsCjEwMDU2PT4nT04nLAoxMDA1Nz0+J09OJywKMTAwNTg9PidPTicsCjEwMDU5PT4nT04nLAoxMDA2MT0+J09OJywKMTAwNjM9PidPTicsCjEwMDY0PT4nT04nLAoxMDA2NT0+J09OJywKMTAwNjY9PidPTicsCjEwMDcwPT4nT04nLAoxMDA3Mj0+J09OJywKMTAwNzM9PidPTicsCjEwMDc0PT4nT04nLAoxMDA3NT0+J09OJywKMTAwNzY9PidPTicsCjEwMDc3PT4nT04nLAoxMDA3OD0+J09OJywKMTAwODE9PidPTicsCjEwMDgyPT4nT04nLAoxMDA4Mz0+J09OJywKMTAwODQ9PidPTicsCjEwMDg1PT4nT04nLAoxMDA4Nj0+J09OJywKMTAwODc9PidPTicsCjEwMDg4PT4nT04nLAoxMDA4OT0+J09OJywKMTAwOTA9PidPTicsCjEwMDkxPT4nT04nLAoxMDA5Mj0+J09OJywKMTAwOTM9PidPTicsCjEwMDk0PT4nT04nLAoxMDA5NT0+J09OJywKMTAwOTY9PidPTicsCjEwMDk3PT4nT04nLAoxMDA5OD0+J09OJywKMTAwOTk9PidPTicsCjEwMTAwPT4nT04nLAoxMDEwMT0+J09OJywKMTAxMDI9PidPTicsCjEwMTAzPT4nT04nLAoxMDEwND0+J09OJywKMTAxMDU9PidPTicsCjEwMTA2PT4nT04nLAoxMDEwNz0+J09OJywKMTAxMDg9PidPTicsCjEwMTA5PT4nT04nLAoxMDExMD0+J09OJywKMTAxMTE9PidPTicsCjEwMTEyPT4nT04nLAoxMDExMz0+J09OJywKMTAxMTQ9PidPTicsCjEwMTE1PT4nT04nLAoxMDExNj0+J09OJywKMTAxMTc9PidPTicsCjEwMTE4PT4nT04nLAoxMDExOT0+J09OJywKMTAxMjA9PidPTicsCjEwMTIxPT4nT04nLAoxMDEyMj0+J09OJywKMTAxMjM9PidPTicsCjEwMTI0PT4nT04nLAoxMDEyNT0+J09OJywKMTAxMjY9PidPTicsCjEwMTI3PT4nT04nLAoxMDEyOD0+J09OJywKMTAxMjk9PidPTicsCjEwMTMwPT4nT04nLAoxMDEzMT0+J09OJywKMTAxMzI9PidPTicsCjEwMTM2PT4nT04nLAoxMDEzNz0+J09OJywKMTAxMzg9PidPTicsCjEwMTM5PT4nT04nLAoxMDE0MD0+J09OJywKMTAxNDE9PidPTicsCjEwMTQyPT4nT04nLAoxMDE0Mz0+J09OJywKMTAxNDQ9PidPTicsCjEwMTQ1PT4nT04nLAoxMDE0Nj0+J09OJywKMTAxNDc9PidPTicsCjEwMTQ4PT4nT04nLAoxMDE0OT0+J09OJywKMTAxNTA9PidPTicsCjEwMTUxPT4nT04nLAoxMDE1Mj0+J09OJywKMTAxNTM9PidPTicsCjEwMTU0PT4nT04nLAoxMDE1NT0+J09OJywKMTAxNTY9PidPTicsCjEwMTU3PT4nT04nLAoxMDE1OD0+J09OJywKMTAxNTk9PidPTicsCjEwMTYxPT4nT04nLAoxMDE2Mj0+J09OJywKMTAxNjM9PidPTicsCjEwMTY0PT4nT04nLAoxMDE2NT0+J09OJywKMTAxNjY9PidPTicsCjEwMTY3PT4nT04nLAoxMDE2OD0+J09OJywKMTAxNjk9PidPTicsCjEwMTcwPT4nT04nLAoxMDE3MT0+J09OJywKMTAxNzI9PidPTicsCjEwMTczPT4nT04nLAoxMDE3ND0+J09OJywKMTAxNzY9PidPTicsCjEwMTc3PT4nT04nLAoxMDE3OD0+J09OJywKMTAxNzk9PidPTicsCjEwMTgwPT4nT04nLAoxMDE4MT0+J09OJywKMTAxODI9PidPTicsCjEwMTgzPT4nT04nLAoxMDE4ND0+J09OJywKMTAxODU9PidPTicsCjEwMTg2PT4nT04nLAoxMDE5Mj0+J09OJywKMTAxOTM9PidPTicsCjEwMTk0PT4nT04nLAoxMDE5NT0+J09OJywKMTAxOTY9PidPTicsCjEwMTk3PT4nT04nLAoxMDE5OD0+J09OJywKMTAxOTk9PidPTicsCjEwMjAwPT4nT04nLAoxMDIwMT0+J09OJywKMTAyMDI9PidPTicsCjEwMjAzPT4nT04nLAoxMDIwND0+J09OJywKMTAyMDU9PidPTicsCjEwMjA2PT4nT04nLAoxMDIwNz0+J09OJywKMTAyMDg9PidPTicsCjEwMjA5PT4nT04nLAoxMDIxMD0+J09OJywKMTAyMTE9PidPTicsCjEwMjEyPT4nT04nLAoxMDIxMz0+J09OJywKMTAyMTQ9PidPTicsCjEwMjE1PT4nT04nLAoxMDIxNj0+J09OJywKMTAyMTc9PidPTicsCjEwMjE4PT4nT04nLAoxMDIxOT0+J09OJywKMTAyMjQ9PidPTicsCjEwMjI1PT4nT04nLAoxMDIyNj0+J09OJywKMTAyMjc9PidPTicsCjEwMjI4PT4nT04nLAoxMDIyOT0+J09OJywKMTAyMzA9PidPTicsCjEwMjMxPT4nT04nLAoxMDIzMj0+J09OJywKMTAyMzM9PidPTicsCjEwMjM0PT4nT04nLAoxMDIzNT0+J09OJywKMTAyMzY9PidPTicsCjEwMjM3PT4nT04nLAoxMDIzOD0+J09OJywKMTAyMzk9PidPTicsCjEwMjQwPT4nTCcsCjEwMjQxPT4nTCcsCjEwMjQyPT4nTCcsCjEwMjQzPT4nTCcsCjEwMjQ0PT4nTCcsCjEwMjQ1PT4nTCcsCjEwMjQ2PT4nTCcsCjEwMjQ3PT4nTCcsCjEwMjQ4PT4nTCcsCjEwMjQ5PT4nTCcsCjEwMjUwPT4nTCcsCjEwMjUxPT4nTCcsCjEwMjUyPT4nTCcsCjEwMjUzPT4nTCcsCjEwMjU0PT4nTCcsCjEwMjU1PT4nTCcsCjEwMjU2PT4nTCcsCjEwMjU3PT4nTCcsCjEwMjU4PT4nTCcsCjEwMjU5PT4nTCcsCjEwMjYwPT4nTCcsCjEwMjYxPT4nTCcsCjEwMjYyPT4nTCcsCjEwMjYzPT4nTCcsCjEwMjY0PT4nTCcsCjEwMjY1PT4nTCcsCjEwMjY2PT4nTCcsCjEwMjY3PT4nTCcsCjEwMjY4PT4nTCcsCjEwMjY5PT4nTCcsCjEwMjcwPT4nTCcsCjEwMjcxPT4nTCcsCjEwMjcyPT4nTCcsCjEwMjczPT4nTCcsCjEwMjc0PT4nTCcsCjEwMjc1PT4nTCcsCjEwMjc2PT4nTCcsCjEwMjc3PT4nTCcsCjEwMjc4PT4nTCcsCjEwMjc5PT4nTCcsCjEwMjgwPT4nTCcsCjEwMjgxPT4nTCcsCjEwMjgyPT4nTCcsCjEwMjgzPT4nTCcsCjEwMjg0PT4nTCcsCjEwMjg1PT4nTCcsCjEwMjg2PT4nTCcsCjEwMjg3PT4nTCcsCjEwMjg4PT4nTCcsCjEwMjg5PT4nTCcsCjEwMjkwPT4nTCcsCjEwMjkxPT4nTCcsCjEwMjkyPT4nTCcsCjEwMjkzPT4nTCcsCjEwMjk0PT4nTCcsCjEwMjk1PT4nTCcsCjEwMjk2PT4nTCcsCjEwMjk3PT4nTCcsCjEwMjk4PT4nTCcsCjEwMjk5PT4nTCcsCjEwMzAwPT4nTCcsCjEwMzAxPT4nTCcsCjEwMzAyPT4nTCcsCjEwMzAzPT4nTCcsCjEwMzA0PT4nTCcsCjEwMzA1PT4nTCcsCjEwMzA2PT4nTCcsCjEwMzA3PT4nTCcsCjEwMzA4PT4nTCcsCjEwMzA5PT4nTCcsCjEwMzEwPT4nTCcsCjEwMzExPT4nTCcsCjEwMzEyPT4nTCcsCjEwMzEzPT4nTCcsCjEwMzE0PT4nTCcsCjEwMzE1PT4nTCcsCjEwMzE2PT4nTCcsCjEwMzE3PT4nTCcsCjEwMzE4PT4nTCcsCjEwMzE5PT4nTCcsCjEwMzIwPT4nTCcsCjEwMzIxPT4nTCcsCjEwMzIyPT4nTCcsCjEwMzIzPT4nTCcsCjEwMzI0PT4nTCcsCjEwMzI1PT4nTCcsCjEwMzI2PT4nTCcsCjEwMzI3PT4nTCcsCjEwMzI4PT4nTCcsCjEwMzI5PT4nTCcsCjEwMzMwPT4nTCcsCjEwMzMxPT4nTCcsCjEwMzMyPT4nTCcsCjEwMzMzPT4nTCcsCjEwMzM0PT4nTCcsCjEwMzM1PT4nTCcsCjEwMzM2PT4nTCcsCjEwMzM3PT4nTCcsCjEwMzM4PT4nTCcsCjEwMzM5PT4nTCcsCjEwMzQwPT4nTCcsCjEwMzQxPT4nTCcsCjEwMzQyPT4nTCcsCjEwMzQzPT4nTCcsCjEwMzQ0PT4nTCcsCjEwMzQ1PT4nTCcsCjEwMzQ2PT4nTCcsCjEwMzQ3PT4nTCcsCjEwMzQ4PT4nTCcsCjEwMzQ5PT4nTCcsCjEwMzUwPT4nTCcsCjEwMzUxPT4nTCcsCjEwMzUyPT4nTCcsCjEwMzUzPT4nTCcsCjEwMzU0PT4nTCcsCjEwMzU1PT4nTCcsCjEwMzU2PT4nTCcsCjEwMzU3PT4nTCcsCjEwMzU4PT4nTCcsCjEwMzU5PT4nTCcsCjEwMzYwPT4nTCcsCjEwMzYxPT4nTCcsCjEwMzYyPT4nTCcsCjEwMzYzPT4nTCcsCjEwMzY0PT4nTCcsCjEwMzY1PT4nTCcsCjEwMzY2PT4nTCcsCjEwMzY3PT4nTCcsCjEwMzY4PT4nTCcsCjEwMzY5PT4nTCcsCjEwMzcwPT4nTCcsCjEwMzcxPT4nTCcsCjEwMzcyPT4nTCcsCjEwMzczPT4nTCcsCjEwMzc0PT4nTCcsCjEwMzc1PT4nTCcsCjEwMzc2PT4nTCcsCjEwMzc3PT4nTCcsCjEwMzc4PT4nTCcsCjEwMzc5PT4nTCcsCjEwMzgwPT4nTCcsCjEwMzgxPT4nTCcsCjEwMzgyPT4nTCcsCjEwMzgzPT4nTCcsCjEwMzg0PT4nTCcsCjEwMzg1PT4nTCcsCjEwMzg2PT4nTCcsCjEwMzg3PT4nTCcsCjEwMzg4PT4nTCcsCjEwMzg5PT4nTCcsCjEwMzkwPT4nTCcsCjEwMzkxPT4nTCcsCjEwMzkyPT4nTCcsCjEwMzkzPT4nTCcsCjEwMzk0PT4nTCcsCjEwMzk1PT4nTCcsCjEwMzk2PT4nTCcsCjEwMzk3PT4nTCcsCjEwMzk4PT4nTCcsCjEwMzk5PT4nTCcsCjEwNDAwPT4nTCcsCjEwNDAxPT4nTCcsCjEwNDAyPT4nTCcsCjEwNDAzPT4nTCcsCjEwNDA0PT4nTCcsCjEwNDA1PT4nTCcsCjEwNDA2PT4nTCcsCjEwNDA3PT4nTCcsCjEwNDA4PT4nTCcsCjEwNDA5PT4nTCcsCjEwNDEwPT4nTCcsCjEwNDExPT4nTCcsCjEwNDEyPT4nTCcsCjEwNDEzPT4nTCcsCjEwNDE0PT4nTCcsCjEwNDE1PT4nTCcsCjEwNDE2PT4nTCcsCjEwNDE3PT4nTCcsCjEwNDE4PT4nTCcsCjEwNDE5PT4nTCcsCjEwNDIwPT4nTCcsCjEwNDIxPT4nTCcsCjEwNDIyPT4nTCcsCjEwNDIzPT4nTCcsCjEwNDI0PT4nTCcsCjEwNDI1PT4nTCcsCjEwNDI2PT4nTCcsCjEwNDI3PT4nTCcsCjEwNDI4PT4nTCcsCjEwNDI5PT4nTCcsCjEwNDMwPT4nTCcsCjEwNDMxPT4nTCcsCjEwNDMyPT4nTCcsCjEwNDMzPT4nTCcsCjEwNDM0PT4nTCcsCjEwNDM1PT4nTCcsCjEwNDM2PT4nTCcsCjEwNDM3PT4nTCcsCjEwNDM4PT4nTCcsCjEwNDM5PT4nTCcsCjEwNDQwPT4nTCcsCjEwNDQxPT4nTCcsCjEwNDQyPT4nTCcsCjEwNDQzPT4nTCcsCjEwNDQ0PT4nTCcsCjEwNDQ1PT4nTCcsCjEwNDQ2PT4nTCcsCjEwNDQ3PT4nTCcsCjEwNDQ4PT4nTCcsCjEwNDQ5PT4nTCcsCjEwNDUwPT4nTCcsCjEwNDUxPT4nTCcsCjEwNDUyPT4nTCcsCjEwNDUzPT4nTCcsCjEwNDU0PT4nTCcsCjEwNDU1PT4nTCcsCjEwNDU2PT4nTCcsCjEwNDU3PT4nTCcsCjEwNDU4PT4nTCcsCjEwNDU5PT4nTCcsCjEwNDYwPT4nTCcsCjEwNDYxPT4nTCcsCjEwNDYyPT4nTCcsCjEwNDYzPT4nTCcsCjEwNDY0PT4nTCcsCjEwNDY1PT4nTCcsCjEwNDY2PT4nTCcsCjEwNDY3PT4nTCcsCjEwNDY4PT4nTCcsCjEwNDY5PT4nTCcsCjEwNDcwPT4nTCcsCjEwNDcxPT4nTCcsCjEwNDcyPT4nTCcsCjEwNDczPT4nTCcsCjEwNDc0PT4nTCcsCjEwNDc1PT4nTCcsCjEwNDc2PT4nTCcsCjEwNDc3PT4nTCcsCjEwNDc4PT4nTCcsCjEwNDc5PT4nTCcsCjEwNDgwPT4nTCcsCjEwNDgxPT4nTCcsCjEwNDgyPT4nTCcsCjEwNDgzPT4nTCcsCjEwNDg0PT4nTCcsCjEwNDg1PT4nTCcsCjEwNDg2PT4nTCcsCjEwNDg3PT4nTCcsCjEwNDg4PT4nTCcsCjEwNDg5PT4nTCcsCjEwNDkwPT4nTCcsCjEwNDkxPT4nTCcsCjEwNDkyPT4nTCcsCjEwNDkzPT4nTCcsCjEwNDk0PT4nTCcsCjEwNDk1PT4nTCcsCjEwNDk2PT4nT04nLAoxMDQ5Nz0+J09OJywKMTA0OTg9PidPTicsCjEwNDk5PT4nT04nLAoxMDUwMD0+J09OJywKMTA1MDE9PidPTicsCjEwNTAyPT4nT04nLAoxMDUwMz0+J09OJywKMTA1MDQ9PidPTicsCjEwNTA1PT4nT04nLAoxMDUwNj0+J09OJywKMTA1MDc9PidPTicsCjEwNTA4PT4nT04nLAoxMDUwOT0+J09OJywKMTA1MTA9PidPTicsCjEwNTExPT4nT04nLAoxMDUxMj0+J09OJywKMTA1MTM9PidPTicsCjEwNTE0PT4nT04nLAoxMDUxNT0+J09OJywKMTA1MTY9PidPTicsCjEwNTE3PT4nT04nLAoxMDUxOD0+J09OJywKMTA1MTk9PidPTicsCjEwNTIwPT4nT04nLAoxMDUyMT0+J09OJywKMTA1MjI9PidPTicsCjEwNTIzPT4nT04nLAoxMDUyND0+J09OJywKMTA1MjU9PidPTicsCjEwNTI2PT4nT04nLAoxMDUyNz0+J09OJywKMTA1Mjg9PidPTicsCjEwNTI5PT4nT04nLAoxMDUzMD0+J09OJywKMTA1MzE9PidPTicsCjEwNTMyPT4nT04nLAoxMDUzMz0+J09OJywKMTA1MzQ9PidPTicsCjEwNTM1PT4nT04nLAoxMDUzNj0+J09OJywKMTA1Mzc9PidPTicsCjEwNTM4PT4nT04nLAoxMDUzOT0+J09OJywKMTA1NDA9PidPTicsCjEwNTQxPT4nT04nLAoxMDU0Mj0+J09OJywKMTA1NDM9PidPTicsCjEwNTQ0PT4nT04nLAoxMDU0NT0+J09OJywKMTA1NDY9PidPTicsCjEwNTQ3PT4nT04nLAoxMDU0OD0+J09OJywKMTA1NDk9PidPTicsCjEwNTUwPT4nT04nLAoxMDU1MT0+J09OJywKMTA1NTI9PidPTicsCjEwNTUzPT4nT04nLAoxMDU1ND0+J09OJywKMTA1NTU9PidPTicsCjEwNTU2PT4nT04nLAoxMDU1Nz0+J09OJywKMTA1NTg9PidPTicsCjEwNTU5PT4nT04nLAoxMDU2MD0+J09OJywKMTA1NjE9PidPTicsCjEwNTYyPT4nT04nLAoxMDU2Mz0+J09OJywKMTA1NjQ9PidPTicsCjEwNTY1PT4nT04nLAoxMDU2Nj0+J09OJywKMTA1Njc9PidPTicsCjEwNTY4PT4nT04nLAoxMDU2OT0+J09OJywKMTA1NzA9PidPTicsCjEwNTcxPT4nT04nLAoxMDU3Mj0+J09OJywKMTA1NzM9PidPTicsCjEwNTc0PT4nT04nLAoxMDU3NT0+J09OJywKMTA1NzY9PidPTicsCjEwNTc3PT4nT04nLAoxMDU3OD0+J09OJywKMTA1Nzk9PidPTicsCjEwNTgwPT4nT04nLAoxMDU4MT0+J09OJywKMTA1ODI9PidPTicsCjEwNTgzPT4nT04nLAoxMDU4ND0+J09OJywKMTA1ODU9PidPTicsCjEwNTg2PT4nT04nLAoxMDU4Nz0+J09OJywKMTA1ODg9PidPTicsCjEwNTg5PT4nT04nLAoxMDU5MD0+J09OJywKMTA1OTE9PidPTicsCjEwNTkyPT4nT04nLAoxMDU5Mz0+J09OJywKMTA1OTQ9PidPTicsCjEwNTk1PT4nT04nLAoxMDU5Nj0+J09OJywKMTA1OTc9PidPTicsCjEwNTk4PT4nT04nLAoxMDU5OT0+J09OJywKMTA2MDA9PidPTicsCjEwNjAxPT4nT04nLAoxMDYwMj0+J09OJywKMTA2MDM9PidPTicsCjEwNjA0PT4nT04nLAoxMDYwNT0+J09OJywKMTA2MDY9PidPTicsCjEwNjA3PT4nT04nLAoxMDYwOD0+J09OJywKMTA2MDk9PidPTicsCjEwNjEwPT4nT04nLAoxMDYxMT0+J09OJywKMTA2MTI9PidPTicsCjEwNjEzPT4nT04nLAoxMDYxND0+J09OJywKMTA2MTU9PidPTicsCjEwNjE2PT4nT04nLAoxMDYxNz0+J09OJywKMTA2MTg9PidPTicsCjEwNjE5PT4nT04nLAoxMDYyMD0+J09OJywKMTA2MjE9PidPTicsCjEwNjIyPT4nT04nLAoxMDYyMz0+J09OJywKMTA2MjQ9PidPTicsCjEwNjI1PT4nT04nLAoxMDYyNj0+J09OJywKMTA2Mjc9PidPTicsCjEwNjI4PT4nT04nLAoxMDYyOT0+J09OJywKMTA2MzA9PidPTicsCjEwNjMxPT4nT04nLAoxMDYzMj0+J09OJywKMTA2MzM9PidPTicsCjEwNjM0PT4nT04nLAoxMDYzNT0+J09OJywKMTA2MzY9PidPTicsCjEwNjM3PT4nT04nLAoxMDYzOD0+J09OJywKMTA2Mzk9PidPTicsCjEwNjQwPT4nT04nLAoxMDY0MT0+J09OJywKMTA2NDI9PidPTicsCjEwNjQzPT4nT04nLAoxMDY0ND0+J09OJywKMTA2NDU9PidPTicsCjEwNjQ2PT4nT04nLAoxMDY0Nz0+J09OJywKMTA2NDg9PidPTicsCjEwNjQ5PT4nT04nLAoxMDY1MD0+J09OJywKMTA2NTE9PidPTicsCjEwNjUyPT4nT04nLAoxMDY1Mz0+J09OJywKMTA2NTQ9PidPTicsCjEwNjU1PT4nT04nLAoxMDY1Nj0+J09OJywKMTA2NTc9PidPTicsCjEwNjU4PT4nT04nLAoxMDY1OT0+J09OJywKMTA2NjA9PidPTicsCjEwNjYxPT4nT04nLAoxMDY2Mj0+J09OJywKMTA2NjM9PidPTicsCjEwNjY0PT4nT04nLAoxMDY2NT0+J09OJywKMTA2NjY9PidPTicsCjEwNjY3PT4nT04nLAoxMDY2OD0+J09OJywKMTA2Njk9PidPTicsCjEwNjcwPT4nT04nLAoxMDY3MT0+J09OJywKMTA2NzI9PidPTicsCjEwNjczPT4nT04nLAoxMDY3ND0+J09OJywKMTA2NzU9PidPTicsCjEwNjc2PT4nT04nLAoxMDY3Nz0+J09OJywKMTA2Nzg9PidPTicsCjEwNjc5PT4nT04nLAoxMDY4MD0+J09OJywKMTA2ODE9PidPTicsCjEwNjgyPT4nT04nLAoxMDY4Mz0+J09OJywKMTA2ODQ9PidPTicsCjEwNjg1PT4nT04nLAoxMDY4Nj0+J09OJywKMTA2ODc9PidPTicsCjEwNjg4PT4nT04nLAoxMDY4OT0+J09OJywKMTA2OTA9PidPTicsCjEwNjkxPT4nT04nLAoxMDY5Mj0+J09OJywKMTA2OTM9PidPTicsCjEwNjk0PT4nT04nLAoxMDY5NT0+J09OJywKMTA2OTY9PidPTicsCjEwNjk3PT4nT04nLAoxMDY5OD0+J09OJywKMTA2OTk9PidPTicsCjEwNzAwPT4nT04nLAoxMDcwMT0+J09OJywKMTA3MDI9PidPTicsCjEwNzAzPT4nT04nLAoxMDcwND0+J09OJywKMTA3MDU9PidPTicsCjEwNzA2PT4nT04nLAoxMDcwNz0+J09OJywKMTA3MDg9PidPTicsCjEwNzA5PT4nT04nLAoxMDcxMD0+J09OJywKMTA3MTE9PidPTicsCjEwNzEyPT4nT04nLAoxMDcxMz0+J09OJywKMTA3MTQ9PidPTicsCjEwNzE1PT4nT04nLAoxMDcxNj0+J09OJywKMTA3MTc9PidPTicsCjEwNzE4PT4nT04nLAoxMDcxOT0+J09OJywKMTA3MjA9PidPTicsCjEwNzIxPT4nT04nLAoxMDcyMj0+J09OJywKMTA3MjM9PidPTicsCjEwNzI0PT4nT04nLAoxMDcyNT0+J09OJywKMTA3MjY9PidPTicsCjEwNzI3PT4nT04nLAoxMDcyOD0+J09OJywKMTA3Mjk9PidPTicsCjEwNzMwPT4nT04nLAoxMDczMT0+J09OJywKMTA3MzI9PidPTicsCjEwNzMzPT4nT04nLAoxMDczND0+J09OJywKMTA3MzU9PidPTicsCjEwNzM2PT4nT04nLAoxMDczNz0+J09OJywKMTA3Mzg9PidPTicsCjEwNzM5PT4nT04nLAoxMDc0MD0+J09OJywKMTA3NDE9PidPTicsCjEwNzQyPT4nT04nLAoxMDc0Mz0+J09OJywKMTA3NDQ9PidPTicsCjEwNzQ1PT4nT04nLAoxMDc0Nj0+J09OJywKMTA3NDc9PidPTicsCjEwNzQ4PT4nT04nLAoxMDc0OT0+J09OJywKMTA3NTA9PidPTicsCjEwNzUxPT4nT04nLAoxMDc1Mj0+J09OJywKMTA3NTM9PidPTicsCjEwNzU0PT4nT04nLAoxMDc1NT0+J09OJywKMTA3NTY9PidPTicsCjEwNzU3PT4nT04nLAoxMDc1OD0+J09OJywKMTA3NTk9PidPTicsCjEwNzYwPT4nT04nLAoxMDc2MT0+J09OJywKMTA3NjI9PidPTicsCjEwNzYzPT4nT04nLAoxMDc2ND0+J09OJywKMTA3NjU9PidPTicsCjEwNzY2PT4nT04nLAoxMDc2Nz0+J09OJywKMTA3Njg9PidPTicsCjEwNzY5PT4nT04nLAoxMDc3MD0+J09OJywKMTA3NzE9PidPTicsCjEwNzcyPT4nT04nLAoxMDc3Mz0+J09OJywKMTA3NzQ9PidPTicsCjEwNzc1PT4nT04nLAoxMDc3Nj0+J09OJywKMTA3Nzc9PidPTicsCjEwNzc4PT4nT04nLAoxMDc3OT0+J09OJywKMTA3ODA9PidPTicsCjEwNzgxPT4nT04nLAoxMDc4Mj0+J09OJywKMTA3ODM9PidPTicsCjEwNzg0PT4nT04nLAoxMDc4NT0+J09OJywKMTA3ODY9PidPTicsCjEwNzg3PT4nT04nLAoxMDc4OD0+J09OJywKMTA3ODk9PidPTicsCjEwNzkwPT4nT04nLAoxMDc5MT0+J09OJywKMTA3OTI9PidPTicsCjEwNzkzPT4nT04nLAoxMDc5ND0+J09OJywKMTA3OTU9PidPTicsCjEwNzk2PT4nT04nLAoxMDc5Nz0+J09OJywKMTA3OTg9PidPTicsCjEwNzk5PT4nT04nLAoxMDgwMD0+J09OJywKMTA4MDE9PidPTicsCjEwODAyPT4nT04nLAoxMDgwMz0+J09OJywKMTA4MDQ9PidPTicsCjEwODA1PT4nT04nLAoxMDgwNj0+J09OJywKMTA4MDc9PidPTicsCjEwODA4PT4nT04nLAoxMDgwOT0+J09OJywKMTA4MTA9PidPTicsCjEwODExPT4nT04nLAoxMDgxMj0+J09OJywKMTA4MTM9PidPTicsCjEwODE0PT4nT04nLAoxMDgxNT0+J09OJywKMTA4MTY9PidPTicsCjEwODE3PT4nT04nLAoxMDgxOD0+J09OJywKMTA4MTk9PidPTicsCjEwODIwPT4nT04nLAoxMDgyMT0+J09OJywKMTA4MjI9PidPTicsCjEwODIzPT4nT04nLAoxMDgyND0+J09OJywKMTA4MjU9PidPTicsCjEwODI2PT4nT04nLAoxMDgyNz0+J09OJywKMTA4Mjg9PidPTicsCjEwODI5PT4nT04nLAoxMDgzMD0+J09OJywKMTA4MzE9PidPTicsCjEwODMyPT4nT04nLAoxMDgzMz0+J09OJywKMTA4MzQ9PidPTicsCjEwODM1PT4nT04nLAoxMDgzNj0+J09OJywKMTA4Mzc9PidPTicsCjEwODM4PT4nT04nLAoxMDgzOT0+J09OJywKMTA4NDA9PidPTicsCjEwODQxPT4nT04nLAoxMDg0Mj0+J09OJywKMTA4NDM9PidPTicsCjEwODQ0PT4nT04nLAoxMDg0NT0+J09OJywKMTA4NDY9PidPTicsCjEwODQ3PT4nT04nLAoxMDg0OD0+J09OJywKMTA4NDk9PidPTicsCjEwODUwPT4nT04nLAoxMDg1MT0+J09OJywKMTA4NTI9PidPTicsCjEwODUzPT4nT04nLAoxMDg1ND0+J09OJywKMTA4NTU9PidPTicsCjEwODU2PT4nT04nLAoxMDg1Nz0+J09OJywKMTA4NTg9PidPTicsCjEwODU5PT4nT04nLAoxMDg2MD0+J09OJywKMTA4NjE9PidPTicsCjEwODYyPT4nT04nLAoxMDg2Mz0+J09OJywKMTA4NjQ9PidPTicsCjEwODY1PT4nT04nLAoxMDg2Nj0+J09OJywKMTA4Njc9PidPTicsCjEwODY4PT4nT04nLAoxMDg2OT0+J09OJywKMTA4NzA9PidPTicsCjEwODcxPT4nT04nLAoxMDg3Mj0+J09OJywKMTA4NzM9PidPTicsCjEwODc0PT4nT04nLAoxMDg3NT0+J09OJywKMTA4NzY9PidPTicsCjEwODc3PT4nT04nLAoxMDg3OD0+J09OJywKMTA4Nzk9PidPTicsCjEwODgwPT4nT04nLAoxMDg4MT0+J09OJywKMTA4ODI9PidPTicsCjEwODgzPT4nT04nLAoxMDg4ND0+J09OJywKMTA4ODU9PidPTicsCjEwODg2PT4nT04nLAoxMDg4Nz0+J09OJywKMTA4ODg9PidPTicsCjEwODg5PT4nT04nLAoxMDg5MD0+J09OJywKMTA4OTE9PidPTicsCjEwODkyPT4nT04nLAoxMDg5Mz0+J09OJywKMTA4OTQ9PidPTicsCjEwODk1PT4nT04nLAoxMDg5Nj0+J09OJywKMTA4OTc9PidPTicsCjEwODk4PT4nT04nLAoxMDg5OT0+J09OJywKMTA5MDA9PidPTicsCjEwOTAxPT4nT04nLAoxMDkwMj0+J09OJywKMTA5MDM9PidPTicsCjEwOTA0PT4nT04nLAoxMDkwNT0+J09OJywKMTA5MDY9PidPTicsCjEwOTA3PT4nT04nLAoxMDkwOD0+J09OJywKMTA5MDk9PidPTicsCjEwOTEwPT4nT04nLAoxMDkxMT0+J09OJywKMTA5MTI9PidPTicsCjEwOTEzPT4nT04nLAoxMDkxND0+J09OJywKMTA5MTU9PidPTicsCjEwOTE2PT4nT04nLAoxMDkxNz0+J09OJywKMTA5MTg9PidPTicsCjEwOTE5PT4nT04nLAoxMDkyMD0+J09OJywKMTA5MjE9PidPTicsCjEwOTIyPT4nT04nLAoxMDkyMz0+J09OJywKMTA5MjQ9PidPTicsCjEwOTI1PT4nT04nLAoxMDkyNj0+J09OJywKMTA5Mjc9PidPTicsCjEwOTI4PT4nT04nLAoxMDkyOT0+J09OJywKMTA5MzA9PidPTicsCjEwOTMxPT4nT04nLAoxMDkzMj0+J09OJywKMTA5MzM9PidPTicsCjEwOTM0PT4nT04nLAoxMDkzNT0+J09OJywKMTA5MzY9PidPTicsCjEwOTM3PT4nT04nLAoxMDkzOD0+J09OJywKMTA5Mzk9PidPTicsCjEwOTQwPT4nT04nLAoxMDk0MT0+J09OJywKMTA5NDI9PidPTicsCjEwOTQzPT4nT04nLAoxMDk0ND0+J09OJywKMTA5NDU9PidPTicsCjEwOTQ2PT4nT04nLAoxMDk0Nz0+J09OJywKMTA5NDg9PidPTicsCjEwOTQ5PT4nT04nLAoxMDk1MD0+J09OJywKMTA5NTE9PidPTicsCjEwOTUyPT4nT04nLAoxMDk1Mz0+J09OJywKMTA5NTQ9PidPTicsCjEwOTU1PT4nT04nLAoxMDk1Nj0+J09OJywKMTA5NTc9PidPTicsCjEwOTU4PT4nT04nLAoxMDk1OT0+J09OJywKMTA5NjA9PidPTicsCjEwOTYxPT4nT04nLAoxMDk2Mj0+J09OJywKMTA5NjM9PidPTicsCjEwOTY0PT4nT04nLAoxMDk2NT0+J09OJywKMTA5NjY9PidPTicsCjEwOTY3PT4nT04nLAoxMDk2OD0+J09OJywKMTA5Njk9PidPTicsCjEwOTcwPT4nT04nLAoxMDk3MT0+J09OJywKMTA5NzI9PidPTicsCjEwOTczPT4nT04nLAoxMDk3ND0+J09OJywKMTA5NzU9PidPTicsCjEwOTc2PT4nT04nLAoxMDk3Nz0+J09OJywKMTA5Nzg9PidPTicsCjEwOTc5PT4nT04nLAoxMDk4MD0+J09OJywKMTA5ODE9PidPTicsCjEwOTgyPT4nT04nLAoxMDk4Mz0+J09OJywKMTA5ODQ9PidPTicsCjEwOTg1PT4nT04nLAoxMDk4Nj0+J09OJywKMTA5ODc9PidPTicsCjEwOTg4PT4nT04nLAoxMDk4OT0+J09OJywKMTA5OTA9PidPTicsCjEwOTkxPT4nT04nLAoxMDk5Mj0+J09OJywKMTA5OTM9PidPTicsCjEwOTk0PT4nT04nLAoxMDk5NT0+J09OJywKMTA5OTY9PidPTicsCjEwOTk3PT4nT04nLAoxMDk5OD0+J09OJywKMTA5OTk9PidPTicsCjExMDAwPT4nT04nLAoxMTAwMT0+J09OJywKMTEwMDI9PidPTicsCjExMDAzPT4nT04nLAoxMTAwND0+J09OJywKMTEwMDU9PidPTicsCjExMDA2PT4nT04nLAoxMTAwNz0+J09OJywKMTEwMDg9PidPTicsCjExMDA5PT4nT04nLAoxMTAxMD0+J09OJywKMTEwMTE9PidPTicsCjExMDEyPT4nT04nLAoxMTAxMz0+J09OJywKMTEwMTQ9PidPTicsCjExMDE1PT4nT04nLAoxMTAxNj0+J09OJywKMTEwMTc9PidPTicsCjExMDE4PT4nT04nLAoxMTAxOT0+J09OJywKMTEwMjA9PidPTicsCjExMDIxPT4nT04nLAoxMTAyMj0+J09OJywKMTEwMjM9PidPTicsCjExMDI0PT4nT04nLAoxMTAyNT0+J09OJywKMTEwMjY9PidPTicsCjExMDI3PT4nT04nLAoxMTAyOD0+J09OJywKMTEwMjk9PidPTicsCjExMDMwPT4nT04nLAoxMTAzMT0+J09OJywKMTEwMzI9PidPTicsCjExMDMzPT4nT04nLAoxMTAzND0+J09OJywKMTEwNDA9PidPTicsCjExMDQxPT4nT04nLAoxMTA0Mj0+J09OJywKMTEwNDM9PidPTicsCjExMjY0PT4nTCcsCjExMjY1PT4nTCcsCjExMjY2PT4nTCcsCjExMjY3PT4nTCcsCjExMjY4PT4nTCcsCjExMjY5PT4nTCcsCjExMjcwPT4nTCcsCjExMjcxPT4nTCcsCjExMjcyPT4nTCcsCjExMjczPT4nTCcsCjExMjc0PT4nTCcsCjExMjc1PT4nTCcsCjExMjc2PT4nTCcsCjExMjc3PT4nTCcsCjExMjc4PT4nTCcsCjExMjc5PT4nTCcsCjExMjgwPT4nTCcsCjExMjgxPT4nTCcsCjExMjgyPT4nTCcsCjExMjgzPT4nTCcsCjExMjg0PT4nTCcsCjExMjg1PT4nTCcsCjExMjg2PT4nTCcsCjExMjg3PT4nTCcsCjExMjg4PT4nTCcsCjExMjg5PT4nTCcsCjExMjkwPT4nTCcsCjExMjkxPT4nTCcsCjExMjkyPT4nTCcsCjExMjkzPT4nTCcsCjExMjk0PT4nTCcsCjExMjk1PT4nTCcsCjExMjk2PT4nTCcsCjExMjk3PT4nTCcsCjExMjk4PT4nTCcsCjExMjk5PT4nTCcsCjExMzAwPT4nTCcsCjExMzAxPT4nTCcsCjExMzAyPT4nTCcsCjExMzAzPT4nTCcsCjExMzA0PT4nTCcsCjExMzA1PT4nTCcsCjExMzA2PT4nTCcsCjExMzA3PT4nTCcsCjExMzA4PT4nTCcsCjExMzA5PT4nTCcsCjExMzEwPT4nTCcsCjExMzEyPT4nTCcsCjExMzEzPT4nTCcsCjExMzE0PT4nTCcsCjExMzE1PT4nTCcsCjExMzE2PT4nTCcsCjExMzE3PT4nTCcsCjExMzE4PT4nTCcsCjExMzE5PT4nTCcsCjExMzIwPT4nTCcsCjExMzIxPT4nTCcsCjExMzIyPT4nTCcsCjExMzIzPT4nTCcsCjExMzI0PT4nTCcsCjExMzI1PT4nTCcsCjExMzI2PT4nTCcsCjExMzI3PT4nTCcsCjExMzI4PT4nTCcsCjExMzI5PT4nTCcsCjExMzMwPT4nTCcsCjExMzMxPT4nTCcsCjExMzMyPT4nTCcsCjExMzMzPT4nTCcsCjExMzM0PT4nTCcsCjExMzM1PT4nTCcsCjExMzM2PT4nTCcsCjExMzM3PT4nTCcsCjExMzM4PT4nTCcsCjExMzM5PT4nTCcsCjExMzQwPT4nTCcsCjExMzQxPT4nTCcsCjExMzQyPT4nTCcsCjExMzQzPT4nTCcsCjExMzQ0PT4nTCcsCjExMzQ1PT4nTCcsCjExMzQ2PT4nTCcsCjExMzQ3PT4nTCcsCjExMzQ4PT4nTCcsCjExMzQ5PT4nTCcsCjExMzUwPT4nTCcsCjExMzUxPT4nTCcsCjExMzUyPT4nTCcsCjExMzUzPT4nTCcsCjExMzU0PT4nTCcsCjExMzU1PT4nTCcsCjExMzU2PT4nTCcsCjExMzU3PT4nTCcsCjExMzU4PT4nTCcsCjExMzYwPT4nTCcsCjExMzYxPT4nTCcsCjExMzYyPT4nTCcsCjExMzYzPT4nTCcsCjExMzY0PT4nTCcsCjExMzY1PT4nTCcsCjExMzY2PT4nTCcsCjExMzY3PT4nTCcsCjExMzY4PT4nTCcsCjExMzY5PT4nTCcsCjExMzcwPT4nTCcsCjExMzcxPT4nTCcsCjExMzcyPT4nTCcsCjExMzgwPT4nTCcsCjExMzgxPT4nTCcsCjExMzgyPT4nTCcsCjExMzgzPT4nTCcsCjExMzkyPT4nTCcsCjExMzkzPT4nTCcsCjExMzk0PT4nTCcsCjExMzk1PT4nTCcsCjExMzk2PT4nTCcsCjExMzk3PT4nTCcsCjExMzk4PT4nTCcsCjExMzk5PT4nTCcsCjExNDAwPT4nTCcsCjExNDAxPT4nTCcsCjExNDAyPT4nTCcsCjExNDAzPT4nTCcsCjExNDA0PT4nTCcsCjExNDA1PT4nTCcsCjExNDA2PT4nTCcsCjExNDA3PT4nTCcsCjExNDA4PT4nTCcsCjExNDA5PT4nTCcsCjExNDEwPT4nTCcsCjExNDExPT4nTCcsCjExNDEyPT4nTCcsCjExNDEzPT4nTCcsCjExNDE0PT4nTCcsCjExNDE1PT4nTCcsCjExNDE2PT4nTCcsCjExNDE3PT4nTCcsCjExNDE4PT4nTCcsCjExNDE5PT4nTCcsCjExNDIwPT4nTCcsCjExNDIxPT4nTCcsCjExNDIyPT4nTCcsCjExNDIzPT4nTCcsCjExNDI0PT4nTCcsCjExNDI1PT4nTCcsCjExNDI2PT4nTCcsCjExNDI3PT4nTCcsCjExNDI4PT4nTCcsCjExNDI5PT4nTCcsCjExNDMwPT4nTCcsCjExNDMxPT4nTCcsCjExNDMyPT4nTCcsCjExNDMzPT4nTCcsCjExNDM0PT4nTCcsCjExNDM1PT4nTCcsCjExNDM2PT4nTCcsCjExNDM3PT4nTCcsCjExNDM4PT4nTCcsCjExNDM5PT4nTCcsCjExNDQwPT4nTCcsCjExNDQxPT4nTCcsCjExNDQyPT4nTCcsCjExNDQzPT4nTCcsCjExNDQ0PT4nTCcsCjExNDQ1PT4nTCcsCjExNDQ2PT4nTCcsCjExNDQ3PT4nTCcsCjExNDQ4PT4nTCcsCjExNDQ5PT4nTCcsCjExNDUwPT4nTCcsCjExNDUxPT4nTCcsCjExNDUyPT4nTCcsCjExNDUzPT4nTCcsCjExNDU0PT4nTCcsCjExNDU1PT4nTCcsCjExNDU2PT4nTCcsCjExNDU3PT4nTCcsCjExNDU4PT4nTCcsCjExNDU5PT4nTCcsCjExNDYwPT4nTCcsCjExNDYxPT4nTCcsCjExNDYyPT4nTCcsCjExNDYzPT4nTCcsCjExNDY0PT4nTCcsCjExNDY1PT4nTCcsCjExNDY2PT4nTCcsCjExNDY3PT4nTCcsCjExNDY4PT4nTCcsCjExNDY5PT4nTCcsCjExNDcwPT4nTCcsCjExNDcxPT4nTCcsCjExNDcyPT4nTCcsCjExNDczPT4nTCcsCjExNDc0PT4nTCcsCjExNDc1PT4nTCcsCjExNDc2PT4nTCcsCjExNDc3PT4nTCcsCjExNDc4PT4nTCcsCjExNDc5PT4nTCcsCjExNDgwPT4nTCcsCjExNDgxPT4nTCcsCjExNDgyPT4nTCcsCjExNDgzPT4nTCcsCjExNDg0PT4nTCcsCjExNDg1PT4nTCcsCjExNDg2PT4nTCcsCjExNDg3PT4nTCcsCjExNDg4PT4nTCcsCjExNDg5PT4nTCcsCjExNDkwPT4nTCcsCjExNDkxPT4nTCcsCjExNDkyPT4nTCcsCjExNDkzPT4nT04nLAoxMTQ5ND0+J09OJywKMTE0OTU9PidPTicsCjExNDk2PT4nT04nLAoxMTQ5Nz0+J09OJywKMTE0OTg9PidPTicsCjExNTEzPT4nT04nLAoxMTUxND0+J09OJywKMTE1MTU9PidPTicsCjExNTE2PT4nT04nLAoxMTUxNz0+J09OJywKMTE1MTg9PidPTicsCjExNTE5PT4nT04nLAoxMTUyMD0+J0wnLAoxMTUyMT0+J0wnLAoxMTUyMj0+J0wnLAoxMTUyMz0+J0wnLAoxMTUyND0+J0wnLAoxMTUyNT0+J0wnLAoxMTUyNj0+J0wnLAoxMTUyNz0+J0wnLAoxMTUyOD0+J0wnLAoxMTUyOT0+J0wnLAoxMTUzMD0+J0wnLAoxMTUzMT0+J0wnLAoxMTUzMj0+J0wnLAoxMTUzMz0+J0wnLAoxMTUzND0+J0wnLAoxMTUzNT0+J0wnLAoxMTUzNj0+J0wnLAoxMTUzNz0+J0wnLAoxMTUzOD0+J0wnLAoxMTUzOT0+J0wnLAoxMTU0MD0+J0wnLAoxMTU0MT0+J0wnLAoxMTU0Mj0+J0wnLAoxMTU0Mz0+J0wnLAoxMTU0ND0+J0wnLAoxMTU0NT0+J0wnLAoxMTU0Nj0+J0wnLAoxMTU0Nz0+J0wnLAoxMTU0OD0+J0wnLAoxMTU0OT0+J0wnLAoxMTU1MD0+J0wnLAoxMTU1MT0+J0wnLAoxMTU1Mj0+J0wnLAoxMTU1Mz0+J0wnLAoxMTU1ND0+J0wnLAoxMTU1NT0+J0wnLAoxMTU1Nj0+J0wnLAoxMTU1Nz0+J0wnLAoxMTU2OD0+J0wnLAoxMTU2OT0+J0wnLAoxMTU3MD0+J0wnLAoxMTU3MT0+J0wnLAoxMTU3Mj0+J0wnLAoxMTU3Mz0+J0wnLAoxMTU3ND0+J0wnLAoxMTU3NT0+J0wnLAoxMTU3Nj0+J0wnLAoxMTU3Nz0+J0wnLAoxMTU3OD0+J0wnLAoxMTU3OT0+J0wnLAoxMTU4MD0+J0wnLAoxMTU4MT0+J0wnLAoxMTU4Mj0+J0wnLAoxMTU4Mz0+J0wnLAoxMTU4ND0+J0wnLAoxMTU4NT0+J0wnLAoxMTU4Nj0+J0wnLAoxMTU4Nz0+J0wnLAoxMTU4OD0+J0wnLAoxMTU4OT0+J0wnLAoxMTU5MD0+J0wnLAoxMTU5MT0+J0wnLAoxMTU5Mj0+J0wnLAoxMTU5Mz0+J0wnLAoxMTU5ND0+J0wnLAoxMTU5NT0+J0wnLAoxMTU5Nj0+J0wnLAoxMTU5Nz0+J0wnLAoxMTU5OD0+J0wnLAoxMTU5OT0+J0wnLAoxMTYwMD0+J0wnLAoxMTYwMT0+J0wnLAoxMTYwMj0+J0wnLAoxMTYwMz0+J0wnLAoxMTYwND0+J0wnLAoxMTYwNT0+J0wnLAoxMTYwNj0+J0wnLAoxMTYwNz0+J0wnLAoxMTYwOD0+J0wnLAoxMTYwOT0+J0wnLAoxMTYxMD0+J0wnLAoxMTYxMT0+J0wnLAoxMTYxMj0+J0wnLAoxMTYxMz0+J0wnLAoxMTYxND0+J0wnLAoxMTYxNT0+J0wnLAoxMTYxNj0+J0wnLAoxMTYxNz0+J0wnLAoxMTYxOD0+J0wnLAoxMTYxOT0+J0wnLAoxMTYyMD0+J0wnLAoxMTYyMT0+J0wnLAoxMTYzMT0+J0wnLAoxMTY0OD0+J0wnLAoxMTY0OT0+J0wnLAoxMTY1MD0+J0wnLAoxMTY1MT0+J0wnLAoxMTY1Mj0+J0wnLAoxMTY1Mz0+J0wnLAoxMTY1ND0+J0wnLAoxMTY1NT0+J0wnLAoxMTY1Nj0+J0wnLAoxMTY1Nz0+J0wnLAoxMTY1OD0+J0wnLAoxMTY1OT0+J0wnLAoxMTY2MD0+J0wnLAoxMTY2MT0+J0wnLAoxMTY2Mj0+J0wnLAoxMTY2Mz0+J0wnLAoxMTY2ND0+J0wnLAoxMTY2NT0+J0wnLAoxMTY2Nj0+J0wnLAoxMTY2Nz0+J0wnLAoxMTY2OD0+J0wnLAoxMTY2OT0+J0wnLAoxMTY3MD0+J0wnLAoxMTY4MD0+J0wnLAoxMTY4MT0+J0wnLAoxMTY4Mj0+J0wnLAoxMTY4Mz0+J0wnLAoxMTY4ND0+J0wnLAoxMTY4NT0+J0wnLAoxMTY4Nj0+J0wnLAoxMTY4OD0+J0wnLAoxMTY4OT0+J0wnLAoxMTY5MD0+J0wnLAoxMTY5MT0+J0wnLAoxMTY5Mj0+J0wnLAoxMTY5Mz0+J0wnLAoxMTY5ND0+J0wnLAoxMTY5Nj0+J0wnLAoxMTY5Nz0+J0wnLAoxMTY5OD0+J0wnLAoxMTY5OT0+J0wnLAoxMTcwMD0+J0wnLAoxMTcwMT0+J0wnLAoxMTcwMj0+J0wnLAoxMTcwND0+J0wnLAoxMTcwNT0+J0wnLAoxMTcwNj0+J0wnLAoxMTcwNz0+J0wnLAoxMTcwOD0+J0wnLAoxMTcwOT0+J0wnLAoxMTcxMD0+J0wnLAoxMTcxMj0+J0wnLAoxMTcxMz0+J0wnLAoxMTcxND0+J0wnLAoxMTcxNT0+J0wnLAoxMTcxNj0+J0wnLAoxMTcxNz0+J0wnLAoxMTcxOD0+J0wnLAoxMTcyMD0+J0wnLAoxMTcyMT0+J0wnLAoxMTcyMj0+J0wnLAoxMTcyMz0+J0wnLAoxMTcyND0+J0wnLAoxMTcyNT0+J0wnLAoxMTcyNj0+J0wnLAoxMTcyOD0+J0wnLAoxMTcyOT0+J0wnLAoxMTczMD0+J0wnLAoxMTczMT0+J0wnLAoxMTczMj0+J0wnLAoxMTczMz0+J0wnLAoxMTczND0+J0wnLAoxMTczNj0+J0wnLAoxMTczNz0+J0wnLAoxMTczOD0+J0wnLAoxMTczOT0+J0wnLAoxMTc0MD0+J0wnLAoxMTc0MT0+J0wnLAoxMTc0Mj0+J0wnLAoxMTc3Nj0+J09OJywKMTE3Nzc9PidPTicsCjExNzc4PT4nT04nLAoxMTc3OT0+J09OJywKMTE3ODA9PidPTicsCjExNzgxPT4nT04nLAoxMTc4Mj0+J09OJywKMTE3ODM9PidPTicsCjExNzg0PT4nT04nLAoxMTc4NT0+J09OJywKMTE3ODY9PidPTicsCjExNzg3PT4nT04nLAoxMTc4OD0+J09OJywKMTE3ODk9PidPTicsCjExNzkwPT4nT04nLAoxMTc5MT0+J09OJywKMTE3OTI9PidPTicsCjExNzkzPT4nT04nLAoxMTc5ND0+J09OJywKMTE3OTU9PidPTicsCjExNzk2PT4nT04nLAoxMTc5Nz0+J09OJywKMTE3OTg9PidPTicsCjExNzk5PT4nT04nLAoxMTgwND0+J09OJywKMTE4MDU9PidPTicsCjExOTA0PT4nT04nLAoxMTkwNT0+J09OJywKMTE5MDY9PidPTicsCjExOTA3PT4nT04nLAoxMTkwOD0+J09OJywKMTE5MDk9PidPTicsCjExOTEwPT4nT04nLAoxMTkxMT0+J09OJywKMTE5MTI9PidPTicsCjExOTEzPT4nT04nLAoxMTkxND0+J09OJywKMTE5MTU9PidPTicsCjExOTE2PT4nT04nLAoxMTkxNz0+J09OJywKMTE5MTg9PidPTicsCjExOTE5PT4nT04nLAoxMTkyMD0+J09OJywKMTE5MjE9PidPTicsCjExOTIyPT4nT04nLAoxMTkyMz0+J09OJywKMTE5MjQ9PidPTicsCjExOTI1PT4nT04nLAoxMTkyNj0+J09OJywKMTE5Mjc9PidPTicsCjExOTI4PT4nT04nLAoxMTkyOT0+J09OJywKMTE5MzE9PidPTicsCjExOTMyPT4nT04nLAoxMTkzMz0+J09OJywKMTE5MzQ9PidPTicsCjExOTM1PT4nT04nLAoxMTkzNj0+J09OJywKMTE5Mzc9PidPTicsCjExOTM4PT4nT04nLAoxMTkzOT0+J09OJywKMTE5NDA9PidPTicsCjExOTQxPT4nT04nLAoxMTk0Mj0+J09OJywKMTE5NDM9PidPTicsCjExOTQ0PT4nT04nLAoxMTk0NT0+J09OJywKMTE5NDY9PidPTicsCjExOTQ3PT4nT04nLAoxMTk0OD0+J09OJywKMTE5NDk9PidPTicsCjExOTUwPT4nT04nLAoxMTk1MT0+J09OJywKMTE5NTI9PidPTicsCjExOTUzPT4nT04nLAoxMTk1ND0+J09OJywKMTE5NTU9PidPTicsCjExOTU2PT4nT04nLAoxMTk1Nz0+J09OJywKMTE5NTg9PidPTicsCjExOTU5PT4nT04nLAoxMTk2MD0+J09OJywKMTE5NjE9PidPTicsCjExOTYyPT4nT04nLAoxMTk2Mz0+J09OJywKMTE5NjQ9PidPTicsCjExOTY1PT4nT04nLAoxMTk2Nj0+J09OJywKMTE5Njc9PidPTicsCjExOTY4PT4nT04nLAoxMTk2OT0+J09OJywKMTE5NzA9PidPTicsCjExOTcxPT4nT04nLAoxMTk3Mj0+J09OJywKMTE5NzM9PidPTicsCjExOTc0PT4nT04nLAoxMTk3NT0+J09OJywKMTE5NzY9PidPTicsCjExOTc3PT4nT04nLAoxMTk3OD0+J09OJywKMTE5Nzk9PidPTicsCjExOTgwPT4nT04nLAoxMTk4MT0+J09OJywKMTE5ODI9PidPTicsCjExOTgzPT4nT04nLAoxMTk4ND0+J09OJywKMTE5ODU9PidPTicsCjExOTg2PT4nT04nLAoxMTk4Nz0+J09OJywKMTE5ODg9PidPTicsCjExOTg5PT4nT04nLAoxMTk5MD0+J09OJywKMTE5OTE9PidPTicsCjExOTkyPT4nT04nLAoxMTk5Mz0+J09OJywKMTE5OTQ9PidPTicsCjExOTk1PT4nT04nLAoxMTk5Nj0+J09OJywKMTE5OTc9PidPTicsCjExOTk4PT4nT04nLAoxMTk5OT0+J09OJywKMTIwMDA9PidPTicsCjEyMDAxPT4nT04nLAoxMjAwMj0+J09OJywKMTIwMDM9PidPTicsCjEyMDA0PT4nT04nLAoxMjAwNT0+J09OJywKMTIwMDY9PidPTicsCjEyMDA3PT4nT04nLAoxMjAwOD0+J09OJywKMTIwMDk9PidPTicsCjEyMDEwPT4nT04nLAoxMjAxMT0+J09OJywKMTIwMTI9PidPTicsCjEyMDEzPT4nT04nLAoxMjAxND0+J09OJywKMTIwMTU9PidPTicsCjEyMDE2PT4nT04nLAoxMjAxNz0+J09OJywKMTIwMTg9PidPTicsCjEyMDE5PT4nT04nLAoxMjAzMj0+J09OJywKMTIwMzM9PidPTicsCjEyMDM0PT4nT04nLAoxMjAzNT0+J09OJywKMTIwMzY9PidPTicsCjEyMDM3PT4nT04nLAoxMjAzOD0+J09OJywKMTIwMzk9PidPTicsCjEyMDQwPT4nT04nLAoxMjA0MT0+J09OJywKMTIwNDI9PidPTicsCjEyMDQzPT4nT04nLAoxMjA0ND0+J09OJywKMTIwNDU9PidPTicsCjEyMDQ2PT4nT04nLAoxMjA0Nz0+J09OJywKMTIwNDg9PidPTicsCjEyMDQ5PT4nT04nLAoxMjA1MD0+J09OJywKMTIwNTE9PidPTicsCjEyMDUyPT4nT04nLAoxMjA1Mz0+J09OJywKMTIwNTQ9PidPTicsCjEyMDU1PT4nT04nLAoxMjA1Nj0+J09OJywKMTIwNTc9PidPTicsCjEyMDU4PT4nT04nLAoxMjA1OT0+J09OJywKMTIwNjA9PidPTicsCjEyMDYxPT4nT04nLAoxMjA2Mj0+J09OJywKMTIwNjM9PidPTicsCjEyMDY0PT4nT04nLAoxMjA2NT0+J09OJywKMTIwNjY9PidPTicsCjEyMDY3PT4nT04nLAoxMjA2OD0+J09OJywKMTIwNjk9PidPTicsCjEyMDcwPT4nT04nLAoxMjA3MT0+J09OJywKMTIwNzI9PidPTicsCjEyMDczPT4nT04nLAoxMjA3ND0+J09OJywKMTIwNzU9PidPTicsCjEyMDc2PT4nT04nLAoxMjA3Nz0+J09OJywKMTIwNzg9PidPTicsCjEyMDc5PT4nT04nLAoxMjA4MD0+J09OJywKMTIwODE9PidPTicsCjEyMDgyPT4nT04nLAoxMjA4Mz0+J09OJywKMTIwODQ9PidPTicsCjEyMDg1PT4nT04nLAoxMjA4Nj0+J09OJywKMTIwODc9PidPTicsCjEyMDg4PT4nT04nLAoxMjA4OT0+J09OJywKMTIwOTA9PidPTicsCjEyMDkxPT4nT04nLAoxMjA5Mj0+J09OJywKMTIwOTM9PidPTicsCjEyMDk0PT4nT04nLAoxMjA5NT0+J09OJywKMTIwOTY9PidPTicsCjEyMDk3PT4nT04nLAoxMjA5OD0+J09OJywKMTIwOTk9PidPTicsCjEyMTAwPT4nT04nLAoxMjEwMT0+J09OJywKMTIxMDI9PidPTicsCjEyMTAzPT4nT04nLAoxMjEwND0+J09OJywKMTIxMDU9PidPTicsCjEyMTA2PT4nT04nLAoxMjEwNz0+J09OJywKMTIxMDg9PidPTicsCjEyMTA5PT4nT04nLAoxMjExMD0+J09OJywKMTIxMTE9PidPTicsCjEyMTEyPT4nT04nLAoxMjExMz0+J09OJywKMTIxMTQ9PidPTicsCjEyMTE1PT4nT04nLAoxMjExNj0+J09OJywKMTIxMTc9PidPTicsCjEyMTE4PT4nT04nLAoxMjExOT0+J09OJywKMTIxMjA9PidPTicsCjEyMTIxPT4nT04nLAoxMjEyMj0+J09OJywKMTIxMjM9PidPTicsCjEyMTI0PT4nT04nLAoxMjEyNT0+J09OJywKMTIxMjY9PidPTicsCjEyMTI3PT4nT04nLAoxMjEyOD0+J09OJywKMTIxMjk9PidPTicsCjEyMTMwPT4nT04nLAoxMjEzMT0+J09OJywKMTIxMzI9PidPTicsCjEyMTMzPT4nT04nLAoxMjEzND0+J09OJywKMTIxMzU9PidPTicsCjEyMTM2PT4nT04nLAoxMjEzNz0+J09OJywKMTIxMzg9PidPTicsCjEyMTM5PT4nT04nLAoxMjE0MD0+J09OJywKMTIxNDE9PidPTicsCjEyMTQyPT4nT04nLAoxMjE0Mz0+J09OJywKMTIxNDQ9PidPTicsCjEyMTQ1PT4nT04nLAoxMjE0Nj0+J09OJywKMTIxNDc9PidPTicsCjEyMTQ4PT4nT04nLAoxMjE0OT0+J09OJywKMTIxNTA9PidPTicsCjEyMTUxPT4nT04nLAoxMjE1Mj0+J09OJywKMTIxNTM9PidPTicsCjEyMTU0PT4nT04nLAoxMjE1NT0+J09OJywKMTIxNTY9PidPTicsCjEyMTU3PT4nT04nLAoxMjE1OD0+J09OJywKMTIxNTk9PidPTicsCjEyMTYwPT4nT04nLAoxMjE2MT0+J09OJywKMTIxNjI9PidPTicsCjEyMTYzPT4nT04nLAoxMjE2ND0+J09OJywKMTIxNjU9PidPTicsCjEyMTY2PT4nT04nLAoxMjE2Nz0+J09OJywKMTIxNjg9PidPTicsCjEyMTY5PT4nT04nLAoxMjE3MD0+J09OJywKMTIxNzE9PidPTicsCjEyMTcyPT4nT04nLAoxMjE3Mz0+J09OJywKMTIxNzQ9PidPTicsCjEyMTc1PT4nT04nLAoxMjE3Nj0+J09OJywKMTIxNzc9PidPTicsCjEyMTc4PT4nT04nLAoxMjE3OT0+J09OJywKMTIxODA9PidPTicsCjEyMTgxPT4nT04nLAoxMjE4Mj0+J09OJywKMTIxODM9PidPTicsCjEyMTg0PT4nT04nLAoxMjE4NT0+J09OJywKMTIxODY9PidPTicsCjEyMTg3PT4nT04nLAoxMjE4OD0+J09OJywKMTIxODk9PidPTicsCjEyMTkwPT4nT04nLAoxMjE5MT0+J09OJywKMTIxOTI9PidPTicsCjEyMTkzPT4nT04nLAoxMjE5ND0+J09OJywKMTIxOTU9PidPTicsCjEyMTk2PT4nT04nLAoxMjE5Nz0+J09OJywKMTIxOTg9PidPTicsCjEyMTk5PT4nT04nLAoxMjIwMD0+J09OJywKMTIyMDE9PidPTicsCjEyMjAyPT4nT04nLAoxMjIwMz0+J09OJywKMTIyMDQ9PidPTicsCjEyMjA1PT4nT04nLAoxMjIwNj0+J09OJywKMTIyMDc9PidPTicsCjEyMjA4PT4nT04nLAoxMjIwOT0+J09OJywKMTIyMTA9PidPTicsCjEyMjExPT4nT04nLAoxMjIxMj0+J09OJywKMTIyMTM9PidPTicsCjEyMjE0PT4nT04nLAoxMjIxNT0+J09OJywKMTIyMTY9PidPTicsCjEyMjE3PT4nT04nLAoxMjIxOD0+J09OJywKMTIyMTk9PidPTicsCjEyMjIwPT4nT04nLAoxMjIyMT0+J09OJywKMTIyMjI9PidPTicsCjEyMjIzPT4nT04nLAoxMjIyND0+J09OJywKMTIyMjU9PidPTicsCjEyMjI2PT4nT04nLAoxMjIyNz0+J09OJywKMTIyMjg9PidPTicsCjEyMjI5PT4nT04nLAoxMjIzMD0+J09OJywKMTIyMzE9PidPTicsCjEyMjMyPT4nT04nLAoxMjIzMz0+J09OJywKMTIyMzQ9PidPTicsCjEyMjM1PT4nT04nLAoxMjIzNj0+J09OJywKMTIyMzc9PidPTicsCjEyMjM4PT4nT04nLAoxMjIzOT0+J09OJywKMTIyNDA9PidPTicsCjEyMjQxPT4nT04nLAoxMjI0Mj0+J09OJywKMTIyNDM9PidPTicsCjEyMjQ0PT4nT04nLAoxMjI0NT0+J09OJywKMTIyNzI9PidPTicsCjEyMjczPT4nT04nLAoxMjI3ND0+J09OJywKMTIyNzU9PidPTicsCjEyMjc2PT4nT04nLAoxMjI3Nz0+J09OJywKMTIyNzg9PidPTicsCjEyMjc5PT4nT04nLAoxMjI4MD0+J09OJywKMTIyODE9PidPTicsCjEyMjgyPT4nT04nLAoxMjI4Mz0+J09OJywKMTIyODg9PidXUycsCjEyMjg5PT4nT04nLAoxMjI5MD0+J09OJywKMTIyOTE9PidPTicsCjEyMjkyPT4nT04nLAoxMjI5Mz0+J0wnLAoxMjI5ND0+J0wnLAoxMjI5NT0+J0wnLAoxMjI5Nj0+J09OJywKMTIyOTc9PidPTicsCjEyMjk4PT4nT04nLAoxMjI5OT0+J09OJywKMTIzMDA9PidPTicsCjEyMzAxPT4nT04nLAoxMjMwMj0+J09OJywKMTIzMDM9PidPTicsCjEyMzA0PT4nT04nLAoxMjMwNT0+J09OJywKMTIzMDY9PidPTicsCjEyMzA3PT4nT04nLAoxMjMwOD0+J09OJywKMTIzMDk9PidPTicsCjEyMzEwPT4nT04nLAoxMjMxMT0+J09OJywKMTIzMTI9PidPTicsCjEyMzEzPT4nT04nLAoxMjMxND0+J09OJywKMTIzMTU9PidPTicsCjEyMzE2PT4nT04nLAoxMjMxNz0+J09OJywKMTIzMTg9PidPTicsCjEyMzE5PT4nT04nLAoxMjMyMD0+J09OJywKMTIzMjE9PidMJywKMTIzMjI9PidMJywKMTIzMjM9PidMJywKMTIzMjQ9PidMJywKMTIzMjU9PidMJywKMTIzMjY9PidMJywKMTIzMjc9PidMJywKMTIzMjg9PidMJywKMTIzMjk9PidMJywKMTIzMzA9PidOU00nLAoxMjMzMT0+J05TTScsCjEyMzMyPT4nTlNNJywKMTIzMzM9PidOU00nLAoxMjMzND0+J05TTScsCjEyMzM1PT4nTlNNJywKMTIzMzY9PidPTicsCjEyMzM3PT4nTCcsCjEyMzM4PT4nTCcsCjEyMzM5PT4nTCcsCjEyMzQwPT4nTCcsCjEyMzQxPT4nTCcsCjEyMzQyPT4nT04nLAoxMjM0Mz0+J09OJywKMTIzNDQ9PidMJywKMTIzNDU9PidMJywKMTIzNDY9PidMJywKMTIzNDc9PidMJywKMTIzNDg9PidMJywKMTIzNDk9PidPTicsCjEyMzUwPT4nT04nLAoxMjM1MT0+J09OJywKMTIzNTM9PidMJywKMTIzNTQ9PidMJywKMTIzNTU9PidMJywKMTIzNTY9PidMJywKMTIzNTc9PidMJywKMTIzNTg9PidMJywKMTIzNTk9PidMJywKMTIzNjA9PidMJywKMTIzNjE9PidMJywKMTIzNjI9PidMJywKMTIzNjM9PidMJywKMTIzNjQ9PidMJywKMTIzNjU9PidMJywKMTIzNjY9PidMJywKMTIzNjc9PidMJywKMTIzNjg9PidMJywKMTIzNjk9PidMJywKMTIzNzA9PidMJywKMTIzNzE9PidMJywKMTIzNzI9PidMJywKMTIzNzM9PidMJywKMTIzNzQ9PidMJywKMTIzNzU9PidMJywKMTIzNzY9PidMJywKMTIzNzc9PidMJywKMTIzNzg9PidMJywKMTIzNzk9PidMJywKMTIzODA9PidMJywKMTIzODE9PidMJywKMTIzODI9PidMJywKMTIzODM9PidMJywKMTIzODQ9PidMJywKMTIzODU9PidMJywKMTIzODY9PidMJywKMTIzODc9PidMJywKMTIzODg9PidMJywKMTIzODk9PidMJywKMTIzOTA9PidMJywKMTIzOTE9PidMJywKMTIzOTI9PidMJywKMTIzOTM9PidMJywKMTIzOTQ9PidMJywKMTIzOTU9PidMJywKMTIzOTY9PidMJywKMTIzOTc9PidMJywKMTIzOTg9PidMJywKMTIzOTk9PidMJywKMTI0MDA9PidMJywKMTI0MDE9PidMJywKMTI0MDI9PidMJywKMTI0MDM9PidMJywKMTI0MDQ9PidMJywKMTI0MDU9PidMJywKMTI0MDY9PidMJywKMTI0MDc9PidMJywKMTI0MDg9PidMJywKMTI0MDk9PidMJywKMTI0MTA9PidMJywKMTI0MTE9PidMJywKMTI0MTI9PidMJywKMTI0MTM9PidMJywKMTI0MTQ9PidMJywKMTI0MTU9PidMJywKMTI0MTY9PidMJywKMTI0MTc9PidMJywKMTI0MTg9PidMJywKMTI0MTk9PidMJywKMTI0MjA9PidMJywKMTI0MjE9PidMJywKMTI0MjI9PidMJywKMTI0MjM9PidMJywKMTI0MjQ9PidMJywKMTI0MjU9PidMJywKMTI0MjY9PidMJywKMTI0Mjc9PidMJywKMTI0Mjg9PidMJywKMTI0Mjk9PidMJywKMTI0MzA9PidMJywKMTI0MzE9PidMJywKMTI0MzI9PidMJywKMTI0MzM9PidMJywKMTI0MzQ9PidMJywKMTI0MzU9PidMJywKMTI0MzY9PidMJywKMTI0Mzc9PidMJywKMTI0Mzg9PidMJywKMTI0NDE9PidOU00nLAoxMjQ0Mj0+J05TTScsCjEyNDQzPT4nT04nLAoxMjQ0ND0+J09OJywKMTI0NDU9PidMJywKMTI0NDY9PidMJywKMTI0NDc9PidMJywKMTI0NDg9PidPTicsCjEyNDQ5PT4nTCcsCjEyNDUwPT4nTCcsCjEyNDUxPT4nTCcsCjEyNDUyPT4nTCcsCjEyNDUzPT4nTCcsCjEyNDU0PT4nTCcsCjEyNDU1PT4nTCcsCjEyNDU2PT4nTCcsCjEyNDU3PT4nTCcsCjEyNDU4PT4nTCcsCjEyNDU5PT4nTCcsCjEyNDYwPT4nTCcsCjEyNDYxPT4nTCcsCjEyNDYyPT4nTCcsCjEyNDYzPT4nTCcsCjEyNDY0PT4nTCcsCjEyNDY1PT4nTCcsCjEyNDY2PT4nTCcsCjEyNDY3PT4nTCcsCjEyNDY4PT4nTCcsCjEyNDY5PT4nTCcsCjEyNDcwPT4nTCcsCjEyNDcxPT4nTCcsCjEyNDcyPT4nTCcsCjEyNDczPT4nTCcsCjEyNDc0PT4nTCcsCjEyNDc1PT4nTCcsCjEyNDc2PT4nTCcsCjEyNDc3PT4nTCcsCjEyNDc4PT4nTCcsCjEyNDc5PT4nTCcsCjEyNDgwPT4nTCcsCjEyNDgxPT4nTCcsCjEyNDgyPT4nTCcsCjEyNDgzPT4nTCcsCjEyNDg0PT4nTCcsCjEyNDg1PT4nTCcsCjEyNDg2PT4nTCcsCjEyNDg3PT4nTCcsCjEyNDg4PT4nTCcsCjEyNDg5PT4nTCcsCjEyNDkwPT4nTCcsCjEyNDkxPT4nTCcsCjEyNDkyPT4nTCcsCjEyNDkzPT4nTCcsCjEyNDk0PT4nTCcsCjEyNDk1PT4nTCcsCjEyNDk2PT4nTCcsCjEyNDk3PT4nTCcsCjEyNDk4PT4nTCcsCjEyNDk5PT4nTCcsCjEyNTAwPT4nTCcsCjEyNTAxPT4nTCcsCjEyNTAyPT4nTCcsCjEyNTAzPT4nTCcsCjEyNTA0PT4nTCcsCjEyNTA1PT4nTCcsCjEyNTA2PT4nTCcsCjEyNTA3PT4nTCcsCjEyNTA4PT4nTCcsCjEyNTA5PT4nTCcsCjEyNTEwPT4nTCcsCjEyNTExPT4nTCcsCjEyNTEyPT4nTCcsCjEyNTEzPT4nTCcsCjEyNTE0PT4nTCcsCjEyNTE1PT4nTCcsCjEyNTE2PT4nTCcsCjEyNTE3PT4nTCcsCjEyNTE4PT4nTCcsCjEyNTE5PT4nTCcsCjEyNTIwPT4nTCcsCjEyNTIxPT4nTCcsCjEyNTIyPT4nTCcsCjEyNTIzPT4nTCcsCjEyNTI0PT4nTCcsCjEyNTI1PT4nTCcsCjEyNTI2PT4nTCcsCjEyNTI3PT4nTCcsCjEyNTI4PT4nTCcsCjEyNTI5PT4nTCcsCjEyNTMwPT4nTCcsCjEyNTMxPT4nTCcsCjEyNTMyPT4nTCcsCjEyNTMzPT4nTCcsCjEyNTM0PT4nTCcsCjEyNTM1PT4nTCcsCjEyNTM2PT4nTCcsCjEyNTM3PT4nTCcsCjEyNTM4PT4nTCcsCjEyNTM5PT4nT04nLAoxMjU0MD0+J0wnLAoxMjU0MT0+J0wnLAoxMjU0Mj0+J0wnLAoxMjU0Mz0+J0wnLAoxMjU0OT0+J0wnLAoxMjU1MD0+J0wnLAoxMjU1MT0+J0wnLAoxMjU1Mj0+J0wnLAoxMjU1Mz0+J0wnLAoxMjU1ND0+J0wnLAoxMjU1NT0+J0wnLAoxMjU1Nj0+J0wnLAoxMjU1Nz0+J0wnLAoxMjU1OD0+J0wnLAoxMjU1OT0+J0wnLAoxMjU2MD0+J0wnLAoxMjU2MT0+J0wnLAoxMjU2Mj0+J0wnLAoxMjU2Mz0+J0wnLAoxMjU2ND0+J0wnLAoxMjU2NT0+J0wnLAoxMjU2Nj0+J0wnLAoxMjU2Nz0+J0wnLAoxMjU2OD0+J0wnLAoxMjU2OT0+J0wnLAoxMjU3MD0+J0wnLAoxMjU3MT0+J0wnLAoxMjU3Mj0+J0wnLAoxMjU3Mz0+J0wnLAoxMjU3ND0+J0wnLAoxMjU3NT0+J0wnLAoxMjU3Nj0+J0wnLAoxMjU3Nz0+J0wnLAoxMjU3OD0+J0wnLAoxMjU3OT0+J0wnLAoxMjU4MD0+J0wnLAoxMjU4MT0+J0wnLAoxMjU4Mj0+J0wnLAoxMjU4Mz0+J0wnLAoxMjU4ND0+J0wnLAoxMjU4NT0+J0wnLAoxMjU4Nj0+J0wnLAoxMjU4Nz0+J0wnLAoxMjU4OD0+J0wnLAoxMjU5Mz0+J0wnLAoxMjU5ND0+J0wnLAoxMjU5NT0+J0wnLAoxMjU5Nj0+J0wnLAoxMjU5Nz0+J0wnLAoxMjU5OD0+J0wnLAoxMjU5OT0+J0wnLAoxMjYwMD0+J0wnLAoxMjYwMT0+J0wnLAoxMjYwMj0+J0wnLAoxMjYwMz0+J0wnLAoxMjYwND0+J0wnLAoxMjYwNT0+J0wnLAoxMjYwNj0+J0wnLAoxMjYwNz0+J0wnLAoxMjYwOD0+J0wnLAoxMjYwOT0+J0wnLAoxMjYxMD0+J0wnLAoxMjYxMT0+J0wnLAoxMjYxMj0+J0wnLAoxMjYxMz0+J0wnLAoxMjYxND0+J0wnLAoxMjYxNT0+J0wnLAoxMjYxNj0+J0wnLAoxMjYxNz0+J0wnLAoxMjYxOD0+J0wnLAoxMjYxOT0+J0wnLAoxMjYyMD0+J0wnLAoxMjYyMT0+J0wnLAoxMjYyMj0+J0wnLAoxMjYyMz0+J0wnLAoxMjYyND0+J0wnLAoxMjYyNT0+J0wnLAoxMjYyNj0+J0wnLAoxMjYyNz0+J0wnLAoxMjYyOD0+J0wnLAoxMjYyOT0+J0wnLAoxMjYzMD0+J0wnLAoxMjYzMT0+J0wnLAoxMjYzMj0+J0wnLAoxMjYzMz0+J0wnLAoxMjYzND0+J0wnLAoxMjYzNT0+J0wnLAoxMjYzNj0+J0wnLAoxMjYzNz0+J0wnLAoxMjYzOD0+J0wnLAoxMjYzOT0+J0wnLAoxMjY0MD0+J0wnLAoxMjY0MT0+J0wnLAoxMjY0Mj0+J0wnLAoxMjY0Mz0+J0wnLAoxMjY0ND0+J0wnLAoxMjY0NT0+J0wnLAoxMjY0Nj0+J0wnLAoxMjY0Nz0+J0wnLAoxMjY0OD0+J0wnLAoxMjY0OT0+J0wnLAoxMjY1MD0+J0wnLAoxMjY1MT0+J0wnLAoxMjY1Mj0+J0wnLAoxMjY1Mz0+J0wnLAoxMjY1ND0+J0wnLAoxMjY1NT0+J0wnLAoxMjY1Nj0+J0wnLAoxMjY1Nz0+J0wnLAoxMjY1OD0+J0wnLAoxMjY1OT0+J0wnLAoxMjY2MD0+J0wnLAoxMjY2MT0+J0wnLAoxMjY2Mj0+J0wnLAoxMjY2Mz0+J0wnLAoxMjY2ND0+J0wnLAoxMjY2NT0+J0wnLAoxMjY2Nj0+J0wnLAoxMjY2Nz0+J0wnLAoxMjY2OD0+J0wnLAoxMjY2OT0+J0wnLAoxMjY3MD0+J0wnLAoxMjY3MT0+J0wnLAoxMjY3Mj0+J0wnLAoxMjY3Mz0+J0wnLAoxMjY3ND0+J0wnLAoxMjY3NT0+J0wnLAoxMjY3Nj0+J0wnLAoxMjY3Nz0+J0wnLAoxMjY3OD0+J0wnLAoxMjY3OT0+J0wnLAoxMjY4MD0+J0wnLAoxMjY4MT0+J0wnLAoxMjY4Mj0+J0wnLAoxMjY4Mz0+J0wnLAoxMjY4ND0+J0wnLAoxMjY4NT0+J0wnLAoxMjY4Nj0+J0wnLAoxMjY4OD0+J0wnLAoxMjY4OT0+J0wnLAoxMjY5MD0+J0wnLAoxMjY5MT0+J0wnLAoxMjY5Mj0+J0wnLAoxMjY5Mz0+J0wnLAoxMjY5ND0+J0wnLAoxMjY5NT0+J0wnLAoxMjY5Nj0+J0wnLAoxMjY5Nz0+J0wnLAoxMjY5OD0+J0wnLAoxMjY5OT0+J0wnLAoxMjcwMD0+J0wnLAoxMjcwMT0+J0wnLAoxMjcwMj0+J0wnLAoxMjcwMz0+J0wnLAoxMjcwND0+J0wnLAoxMjcwNT0+J0wnLAoxMjcwNj0+J0wnLAoxMjcwNz0+J0wnLAoxMjcwOD0+J0wnLAoxMjcwOT0+J0wnLAoxMjcxMD0+J0wnLAoxMjcxMT0+J0wnLAoxMjcxMj0+J0wnLAoxMjcxMz0+J0wnLAoxMjcxND0+J0wnLAoxMjcxNT0+J0wnLAoxMjcxNj0+J0wnLAoxMjcxNz0+J0wnLAoxMjcxOD0+J0wnLAoxMjcxOT0+J0wnLAoxMjcyMD0+J0wnLAoxMjcyMT0+J0wnLAoxMjcyMj0+J0wnLAoxMjcyMz0+J0wnLAoxMjcyND0+J0wnLAoxMjcyNT0+J0wnLAoxMjcyNj0+J0wnLAoxMjcyNz0+J0wnLAoxMjczNj0+J09OJywKMTI3Mzc9PidPTicsCjEyNzM4PT4nT04nLAoxMjczOT0+J09OJywKMTI3NDA9PidPTicsCjEyNzQxPT4nT04nLAoxMjc0Mj0+J09OJywKMTI3NDM9PidPTicsCjEyNzQ0PT4nT04nLAoxMjc0NT0+J09OJywKMTI3NDY9PidPTicsCjEyNzQ3PT4nT04nLAoxMjc0OD0+J09OJywKMTI3NDk9PidPTicsCjEyNzUwPT4nT04nLAoxMjc1MT0+J09OJywKMTI3ODQ9PidMJywKMTI3ODU9PidMJywKMTI3ODY9PidMJywKMTI3ODc9PidMJywKMTI3ODg9PidMJywKMTI3ODk9PidMJywKMTI3OTA9PidMJywKMTI3OTE9PidMJywKMTI3OTI9PidMJywKMTI3OTM9PidMJywKMTI3OTQ9PidMJywKMTI3OTU9PidMJywKMTI3OTY9PidMJywKMTI3OTc9PidMJywKMTI3OTg9PidMJywKMTI3OTk9PidMJywKMTI4MDA9PidMJywKMTI4MDE9PidMJywKMTI4MDI9PidMJywKMTI4MDM9PidMJywKMTI4MDQ9PidMJywKMTI4MDU9PidMJywKMTI4MDY9PidMJywKMTI4MDc9PidMJywKMTI4MDg9PidMJywKMTI4MDk9PidMJywKMTI4MTA9PidMJywKMTI4MTE9PidMJywKMTI4MTI9PidMJywKMTI4MTM9PidMJywKMTI4MTQ9PidMJywKMTI4MTU9PidMJywKMTI4MTY9PidMJywKMTI4MTc9PidMJywKMTI4MTg9PidMJywKMTI4MTk9PidMJywKMTI4MjA9PidMJywKMTI4MjE9PidMJywKMTI4MjI9PidMJywKMTI4MjM9PidMJywKMTI4MjQ9PidMJywKMTI4MjU9PidMJywKMTI4MjY9PidMJywKMTI4Mjc9PidMJywKMTI4Mjg9PidMJywKMTI4Mjk9PidPTicsCjEyODMwPT4nT04nLAoxMjgzMj0+J0wnLAoxMjgzMz0+J0wnLAoxMjgzND0+J0wnLAoxMjgzNT0+J0wnLAoxMjgzNj0+J0wnLAoxMjgzNz0+J0wnLAoxMjgzOD0+J0wnLAoxMjgzOT0+J0wnLAoxMjg0MD0+J0wnLAoxMjg0MT0+J0wnLAoxMjg0Mj0+J0wnLAoxMjg0Mz0+J0wnLAoxMjg0ND0+J0wnLAoxMjg0NT0+J0wnLAoxMjg0Nj0+J0wnLAoxMjg0Nz0+J0wnLAoxMjg0OD0+J0wnLAoxMjg0OT0+J0wnLAoxMjg1MD0+J0wnLAoxMjg1MT0+J0wnLAoxMjg1Mj0+J0wnLAoxMjg1Mz0+J0wnLAoxMjg1ND0+J0wnLAoxMjg1NT0+J0wnLAoxMjg1Nj0+J0wnLAoxMjg1Nz0+J0wnLAoxMjg1OD0+J0wnLAoxMjg1OT0+J0wnLAoxMjg2MD0+J0wnLAoxMjg2MT0+J0wnLAoxMjg2Mj0+J0wnLAoxMjg2Mz0+J0wnLAoxMjg2ND0+J0wnLAoxMjg2NT0+J0wnLAoxMjg2Nj0+J0wnLAoxMjg2Nz0+J0wnLAoxMjg4MD0+J09OJywKMTI4ODE9PidPTicsCjEyODgyPT4nT04nLAoxMjg4Mz0+J09OJywKMTI4ODQ9PidPTicsCjEyODg1PT4nT04nLAoxMjg4Nj0+J09OJywKMTI4ODc9PidPTicsCjEyODg4PT4nT04nLAoxMjg4OT0+J09OJywKMTI4OTA9PidPTicsCjEyODkxPT4nT04nLAoxMjg5Mj0+J09OJywKMTI4OTM9PidPTicsCjEyODk0PT4nT04nLAoxMjg5NT0+J09OJywKMTI4OTY9PidMJywKMTI4OTc9PidMJywKMTI4OTg9PidMJywKMTI4OTk9PidMJywKMTI5MDA9PidMJywKMTI5MDE9PidMJywKMTI5MDI9PidMJywKMTI5MDM9PidMJywKMTI5MDQ9PidMJywKMTI5MDU9PidMJywKMTI5MDY9PidMJywKMTI5MDc9PidMJywKMTI5MDg9PidMJywKMTI5MDk9PidMJywKMTI5MTA9PidMJywKMTI5MTE9PidMJywKMTI5MTI9PidMJywKMTI5MTM9PidMJywKMTI5MTQ9PidMJywKMTI5MTU9PidMJywKMTI5MTY9PidMJywKMTI5MTc9PidMJywKMTI5MTg9PidMJywKMTI5MTk9PidMJywKMTI5MjA9PidMJywKMTI5MjE9PidMJywKMTI5MjI9PidMJywKMTI5MjM9PidMJywKMTI5MjQ9PidPTicsCjEyOTI1PT4nT04nLAoxMjkyNj0+J09OJywKMTI5Mjc9PidMJywKMTI5Mjg9PidMJywKMTI5Mjk9PidMJywKMTI5MzA9PidMJywKMTI5MzE9PidMJywKMTI5MzI9PidMJywKMTI5MzM9PidMJywKMTI5MzQ9PidMJywKMTI5MzU9PidMJywKMTI5MzY9PidMJywKMTI5Mzc9PidMJywKMTI5Mzg9PidMJywKMTI5Mzk9PidMJywKMTI5NDA9PidMJywKMTI5NDE9PidMJywKMTI5NDI9PidMJywKMTI5NDM9PidMJywKMTI5NDQ9PidMJywKMTI5NDU9PidMJywKMTI5NDY9PidMJywKMTI5NDc9PidMJywKMTI5NDg9PidMJywKMTI5NDk9PidMJywKMTI5NTA9PidMJywKMTI5NTE9PidMJywKMTI5NTI9PidMJywKMTI5NTM9PidMJywKMTI5NTQ9PidMJywKMTI5NTU9PidMJywKMTI5NTY9PidMJywKMTI5NTc9PidMJywKMTI5NTg9PidMJywKMTI5NTk9PidMJywKMTI5NjA9PidMJywKMTI5NjE9PidMJywKMTI5NjI9PidMJywKMTI5NjM9PidMJywKMTI5NjQ9PidMJywKMTI5NjU9PidMJywKMTI5NjY9PidMJywKMTI5Njc9PidMJywKMTI5Njg9PidMJywKMTI5Njk9PidMJywKMTI5NzA9PidMJywKMTI5NzE9PidMJywKMTI5NzI9PidMJywKMTI5NzM9PidMJywKMTI5NzQ9PidMJywKMTI5NzU9PidMJywKMTI5NzY9PidMJywKMTI5Nzc9PidPTicsCjEyOTc4PT4nT04nLAoxMjk3OT0+J09OJywKMTI5ODA9PidPTicsCjEyOTgxPT4nT04nLAoxMjk4Mj0+J09OJywKMTI5ODM9PidPTicsCjEyOTg0PT4nT04nLAoxMjk4NT0+J09OJywKMTI5ODY9PidPTicsCjEyOTg3PT4nT04nLAoxMjk4OD0+J09OJywKMTI5ODk9PidPTicsCjEyOTkwPT4nT04nLAoxMjk5MT0+J09OJywKMTI5OTI9PidMJywKMTI5OTM9PidMJywKMTI5OTQ9PidMJywKMTI5OTU9PidMJywKMTI5OTY9PidMJywKMTI5OTc9PidMJywKMTI5OTg9PidMJywKMTI5OTk9PidMJywKMTMwMDA9PidMJywKMTMwMDE9PidMJywKMTMwMDI9PidMJywKMTMwMDM9PidMJywKMTMwMDQ9PidPTicsCjEzMDA1PT4nT04nLAoxMzAwNj0+J09OJywKMTMwMDc9PidPTicsCjEzMDA4PT4nTCcsCjEzMDA5PT4nTCcsCjEzMDEwPT4nTCcsCjEzMDExPT4nTCcsCjEzMDEyPT4nTCcsCjEzMDEzPT4nTCcsCjEzMDE0PT4nTCcsCjEzMDE1PT4nTCcsCjEzMDE2PT4nTCcsCjEzMDE3PT4nTCcsCjEzMDE4PT4nTCcsCjEzMDE5PT4nTCcsCjEzMDIwPT4nTCcsCjEzMDIxPT4nTCcsCjEzMDIyPT4nTCcsCjEzMDIzPT4nTCcsCjEzMDI0PT4nTCcsCjEzMDI1PT4nTCcsCjEzMDI2PT4nTCcsCjEzMDI3PT4nTCcsCjEzMDI4PT4nTCcsCjEzMDI5PT4nTCcsCjEzMDMwPT4nTCcsCjEzMDMxPT4nTCcsCjEzMDMyPT4nTCcsCjEzMDMzPT4nTCcsCjEzMDM0PT4nTCcsCjEzMDM1PT4nTCcsCjEzMDM2PT4nTCcsCjEzMDM3PT4nTCcsCjEzMDM4PT4nTCcsCjEzMDM5PT4nTCcsCjEzMDQwPT4nTCcsCjEzMDQxPT4nTCcsCjEzMDQyPT4nTCcsCjEzMDQzPT4nTCcsCjEzMDQ0PT4nTCcsCjEzMDQ1PT4nTCcsCjEzMDQ2PT4nTCcsCjEzMDQ3PT4nTCcsCjEzMDQ4PT4nTCcsCjEzMDQ5PT4nTCcsCjEzMDUwPT4nTCcsCjEzMDUxPT4nTCcsCjEzMDUyPT4nTCcsCjEzMDUzPT4nTCcsCjEzMDU0PT4nTCcsCjEzMDU2PT4nTCcsCjEzMDU3PT4nTCcsCjEzMDU4PT4nTCcsCjEzMDU5PT4nTCcsCjEzMDYwPT4nTCcsCjEzMDYxPT4nTCcsCjEzMDYyPT4nTCcsCjEzMDYzPT4nTCcsCjEzMDY0PT4nTCcsCjEzMDY1PT4nTCcsCjEzMDY2PT4nTCcsCjEzMDY3PT4nTCcsCjEzMDY4PT4nTCcsCjEzMDY5PT4nTCcsCjEzMDcwPT4nTCcsCjEzMDcxPT4nTCcsCjEzMDcyPT4nTCcsCjEzMDczPT4nTCcsCjEzMDc0PT4nTCcsCjEzMDc1PT4nTCcsCjEzMDc2PT4nTCcsCjEzMDc3PT4nTCcsCjEzMDc4PT4nTCcsCjEzMDc5PT4nTCcsCjEzMDgwPT4nTCcsCjEzMDgxPT4nTCcsCjEzMDgyPT4nTCcsCjEzMDgzPT4nTCcsCjEzMDg0PT4nTCcsCjEzMDg1PT4nTCcsCjEzMDg2PT4nTCcsCjEzMDg3PT4nTCcsCjEzMDg4PT4nTCcsCjEzMDg5PT4nTCcsCjEzMDkwPT4nTCcsCjEzMDkxPT4nTCcsCjEzMDkyPT4nTCcsCjEzMDkzPT4nTCcsCjEzMDk0PT4nTCcsCjEzMDk1PT4nTCcsCjEzMDk2PT4nTCcsCjEzMDk3PT4nTCcsCjEzMDk4PT4nTCcsCjEzMDk5PT4nTCcsCjEzMTAwPT4nTCcsCjEzMTAxPT4nTCcsCjEzMTAyPT4nTCcsCjEzMTAzPT4nTCcsCjEzMTA0PT4nTCcsCjEzMTA1PT4nTCcsCjEzMTA2PT4nTCcsCjEzMTA3PT4nTCcsCjEzMTA4PT4nTCcsCjEzMTA5PT4nTCcsCjEzMTEwPT4nTCcsCjEzMTExPT4nTCcsCjEzMTEyPT4nTCcsCjEzMTEzPT4nTCcsCjEzMTE0PT4nTCcsCjEzMTE1PT4nTCcsCjEzMTE2PT4nTCcsCjEzMTE3PT4nTCcsCjEzMTE4PT4nTCcsCjEzMTE5PT4nTCcsCjEzMTIwPT4nTCcsCjEzMTIxPT4nTCcsCjEzMTIyPT4nTCcsCjEzMTIzPT4nTCcsCjEzMTI0PT4nTCcsCjEzMTI1PT4nTCcsCjEzMTI2PT4nTCcsCjEzMTI3PT4nTCcsCjEzMTI4PT4nTCcsCjEzMTI5PT4nTCcsCjEzMTMwPT4nTCcsCjEzMTMxPT4nTCcsCjEzMTMyPT4nTCcsCjEzMTMzPT4nTCcsCjEzMTM0PT4nTCcsCjEzMTM1PT4nTCcsCjEzMTM2PT4nTCcsCjEzMTM3PT4nTCcsCjEzMTM4PT4nTCcsCjEzMTM5PT4nTCcsCjEzMTQwPT4nTCcsCjEzMTQxPT4nTCcsCjEzMTQyPT4nTCcsCjEzMTQzPT4nTCcsCjEzMTQ0PT4nTCcsCjEzMTQ1PT4nTCcsCjEzMTQ2PT4nTCcsCjEzMTQ3PT4nTCcsCjEzMTQ4PT4nTCcsCjEzMTQ5PT4nTCcsCjEzMTUwPT4nTCcsCjEzMTUxPT4nTCcsCjEzMTUyPT4nTCcsCjEzMTUzPT4nTCcsCjEzMTU0PT4nTCcsCjEzMTU1PT4nTCcsCjEzMTU2PT4nTCcsCjEzMTU3PT4nTCcsCjEzMTU4PT4nTCcsCjEzMTU5PT4nTCcsCjEzMTYwPT4nTCcsCjEzMTYxPT4nTCcsCjEzMTYyPT4nTCcsCjEzMTYzPT4nTCcsCjEzMTY0PT4nTCcsCjEzMTY1PT4nTCcsCjEzMTY2PT4nTCcsCjEzMTY3PT4nTCcsCjEzMTY4PT4nTCcsCjEzMTY5PT4nTCcsCjEzMTcwPT4nTCcsCjEzMTcxPT4nTCcsCjEzMTcyPT4nTCcsCjEzMTczPT4nTCcsCjEzMTc0PT4nTCcsCjEzMTc1PT4nT04nLAoxMzE3Nj0+J09OJywKMTMxNzc9PidPTicsCjEzMTc4PT4nT04nLAoxMzE3OT0+J0wnLAoxMzE4MD0+J0wnLAoxMzE4MT0+J0wnLAoxMzE4Mj0+J0wnLAoxMzE4Mz0+J0wnLAoxMzE4ND0+J0wnLAoxMzE4NT0+J0wnLAoxMzE4Nj0+J0wnLAoxMzE4Nz0+J0wnLAoxMzE4OD0+J0wnLAoxMzE4OT0+J0wnLAoxMzE5MD0+J0wnLAoxMzE5MT0+J0wnLAoxMzE5Mj0+J0wnLAoxMzE5Mz0+J0wnLAoxMzE5ND0+J0wnLAoxMzE5NT0+J0wnLAoxMzE5Nj0+J0wnLAoxMzE5Nz0+J0wnLAoxMzE5OD0+J0wnLAoxMzE5OT0+J0wnLAoxMzIwMD0+J0wnLAoxMzIwMT0+J0wnLAoxMzIwMj0+J0wnLAoxMzIwMz0+J0wnLAoxMzIwND0+J0wnLAoxMzIwNT0+J0wnLAoxMzIwNj0+J0wnLAoxMzIwNz0+J0wnLAoxMzIwOD0+J0wnLAoxMzIwOT0+J0wnLAoxMzIxMD0+J0wnLAoxMzIxMT0+J0wnLAoxMzIxMj0+J0wnLAoxMzIxMz0+J0wnLAoxMzIxND0+J0wnLAoxMzIxNT0+J0wnLAoxMzIxNj0+J0wnLAoxMzIxNz0+J0wnLAoxMzIxOD0+J0wnLAoxMzIxOT0+J0wnLAoxMzIyMD0+J0wnLAoxMzIyMT0+J0wnLAoxMzIyMj0+J0wnLAoxMzIyMz0+J0wnLAoxMzIyND0+J0wnLAoxMzIyNT0+J0wnLAoxMzIyNj0+J0wnLAoxMzIyNz0+J0wnLAoxMzIyOD0+J0wnLAoxMzIyOT0+J0wnLAoxMzIzMD0+J0wnLAoxMzIzMT0+J0wnLAoxMzIzMj0+J0wnLAoxMzIzMz0+J0wnLAoxMzIzND0+J0wnLAoxMzIzNT0+J0wnLAoxMzIzNj0+J0wnLAoxMzIzNz0+J0wnLAoxMzIzOD0+J0wnLAoxMzIzOT0+J0wnLAoxMzI0MD0+J0wnLAoxMzI0MT0+J0wnLAoxMzI0Mj0+J0wnLAoxMzI0Mz0+J0wnLAoxMzI0ND0+J0wnLAoxMzI0NT0+J0wnLAoxMzI0Nj0+J0wnLAoxMzI0Nz0+J0wnLAoxMzI0OD0+J0wnLAoxMzI0OT0+J0wnLAoxMzI1MD0+J0wnLAoxMzI1MT0+J0wnLAoxMzI1Mj0+J0wnLAoxMzI1Mz0+J0wnLAoxMzI1ND0+J0wnLAoxMzI1NT0+J0wnLAoxMzI1Nj0+J0wnLAoxMzI1Nz0+J0wnLAoxMzI1OD0+J0wnLAoxMzI1OT0+J0wnLAoxMzI2MD0+J0wnLAoxMzI2MT0+J0wnLAoxMzI2Mj0+J0wnLAoxMzI2Mz0+J0wnLAoxMzI2ND0+J0wnLAoxMzI2NT0+J0wnLAoxMzI2Nj0+J0wnLAoxMzI2Nz0+J0wnLAoxMzI2OD0+J0wnLAoxMzI2OT0+J0wnLAoxMzI3MD0+J0wnLAoxMzI3MT0+J0wnLAoxMzI3Mj0+J0wnLAoxMzI3Mz0+J0wnLAoxMzI3ND0+J0wnLAoxMzI3NT0+J0wnLAoxMzI3Nj0+J0wnLAoxMzI3Nz0+J0wnLAoxMzI3OD0+J09OJywKMTMyNzk9PidPTicsCjEzMjgwPT4nTCcsCjEzMjgxPT4nTCcsCjEzMjgyPT4nTCcsCjEzMjgzPT4nTCcsCjEzMjg0PT4nTCcsCjEzMjg1PT4nTCcsCjEzMjg2PT4nTCcsCjEzMjg3PT4nTCcsCjEzMjg4PT4nTCcsCjEzMjg5PT4nTCcsCjEzMjkwPT4nTCcsCjEzMjkxPT4nTCcsCjEzMjkyPT4nTCcsCjEzMjkzPT4nTCcsCjEzMjk0PT4nTCcsCjEzMjk1PT4nTCcsCjEzMjk2PT4nTCcsCjEzMjk3PT4nTCcsCjEzMjk4PT4nTCcsCjEzMjk5PT4nTCcsCjEzMzAwPT4nTCcsCjEzMzAxPT4nTCcsCjEzMzAyPT4nTCcsCjEzMzAzPT4nTCcsCjEzMzA0PT4nTCcsCjEzMzA1PT4nTCcsCjEzMzA2PT4nTCcsCjEzMzA3PT4nTCcsCjEzMzA4PT4nTCcsCjEzMzA5PT4nTCcsCjEzMzEwPT4nTCcsCjEzMzExPT4nT04nLAoxMzMxMj0+J0wnLAoxOTg5Mz0+J0wnLAoxOTkwND0+J09OJywKMTk5MDU9PidPTicsCjE5OTA2PT4nT04nLAoxOTkwNz0+J09OJywKMTk5MDg9PidPTicsCjE5OTA5PT4nT04nLAoxOTkxMD0+J09OJywKMTk5MTE9PidPTicsCjE5OTEyPT4nT04nLAoxOTkxMz0+J09OJywKMTk5MTQ9PidPTicsCjE5OTE1PT4nT04nLAoxOTkxNj0+J09OJywKMTk5MTc9PidPTicsCjE5OTE4PT4nT04nLAoxOTkxOT0+J09OJywKMTk5MjA9PidPTicsCjE5OTIxPT4nT04nLAoxOTkyMj0+J09OJywKMTk5MjM9PidPTicsCjE5OTI0PT4nT04nLAoxOTkyNT0+J09OJywKMTk5MjY9PidPTicsCjE5OTI3PT4nT04nLAoxOTkyOD0+J09OJywKMTk5Mjk9PidPTicsCjE5OTMwPT4nT04nLAoxOTkzMT0+J09OJywKMTk5MzI9PidPTicsCjE5OTMzPT4nT04nLAoxOTkzND0+J09OJywKMTk5MzU9PidPTicsCjE5OTM2PT4nT04nLAoxOTkzNz0+J09OJywKMTk5Mzg9PidPTicsCjE5OTM5PT4nT04nLAoxOTk0MD0+J09OJywKMTk5NDE9PidPTicsCjE5OTQyPT4nT04nLAoxOTk0Mz0+J09OJywKMTk5NDQ9PidPTicsCjE5OTQ1PT4nT04nLAoxOTk0Nj0+J09OJywKMTk5NDc9PidPTicsCjE5OTQ4PT4nT04nLAoxOTk0OT0+J09OJywKMTk5NTA9PidPTicsCjE5OTUxPT4nT04nLAoxOTk1Mj0+J09OJywKMTk5NTM9PidPTicsCjE5OTU0PT4nT04nLAoxOTk1NT0+J09OJywKMTk5NTY9PidPTicsCjE5OTU3PT4nT04nLAoxOTk1OD0+J09OJywKMTk5NTk9PidPTicsCjE5OTYwPT4nT04nLAoxOTk2MT0+J09OJywKMTk5NjI9PidPTicsCjE5OTYzPT4nT04nLAoxOTk2ND0+J09OJywKMTk5NjU9PidPTicsCjE5OTY2PT4nT04nLAoxOTk2Nz0+J09OJywKMTk5Njg9PidMJywKNDA4OTE9PidMJywKNDA5NjA9PidMJywKNDA5NjE9PidMJywKNDA5NjI9PidMJywKNDA5NjM9PidMJywKNDA5NjQ9PidMJywKNDA5NjU9PidMJywKNDA5NjY9PidMJywKNDA5Njc9PidMJywKNDA5Njg9PidMJywKNDA5Njk9PidMJywKNDA5NzA9PidMJywKNDA5NzE9PidMJywKNDA5NzI9PidMJywKNDA5NzM9PidMJywKNDA5NzQ9PidMJywKNDA5NzU9PidMJywKNDA5NzY9PidMJywKNDA5Nzc9PidMJywKNDA5Nzg9PidMJywKNDA5Nzk9PidMJywKNDA5ODA9PidMJywKNDA5ODE9PidMJywKNDA5ODI9PidMJywKNDA5ODM9PidMJywKNDA5ODQ9PidMJywKNDA5ODU9PidMJywKNDA5ODY9PidMJywKNDA5ODc9PidMJywKNDA5ODg9PidMJywKNDA5ODk9PidMJywKNDA5OTA9PidMJywKNDA5OTE9PidMJywKNDA5OTI9PidMJywKNDA5OTM9PidMJywKNDA5OTQ9PidMJywKNDA5OTU9PidMJywKNDA5OTY9PidMJywKNDA5OTc9PidMJywKNDA5OTg9PidMJywKNDA5OTk9PidMJywKNDEwMDA9PidMJywKNDEwMDE9PidMJywKNDEwMDI9PidMJywKNDEwMDM9PidMJywKNDEwMDQ9PidMJywKNDEwMDU9PidMJywKNDEwMDY9PidMJywKNDEwMDc9PidMJywKNDEwMDg9PidMJywKNDEwMDk9PidMJywKNDEwMTA9PidMJywKNDEwMTE9PidMJywKNDEwMTI9PidMJywKNDEwMTM9PidMJywKNDEwMTQ9PidMJywKNDEwMTU9PidMJywKNDEwMTY9PidMJywKNDEwMTc9PidMJywKNDEwMTg9PidMJywKNDEwMTk9PidMJywKNDEwMjA9PidMJywKNDEwMjE9PidMJywKNDEwMjI9PidMJywKNDEwMjM9PidMJywKNDEwMjQ9PidMJywKNDEwMjU9PidMJywKNDEwMjY9PidMJywKNDEwMjc9PidMJywKNDEwMjg9PidMJywKNDEwMjk9PidMJywKNDEwMzA9PidMJywKNDEwMzE9PidMJywKNDEwMzI9PidMJywKNDEwMzM9PidMJywKNDEwMzQ9PidMJywKNDEwMzU9PidMJywKNDEwMzY9PidMJywKNDEwMzc9PidMJywKNDEwMzg9PidMJywKNDEwMzk9PidMJywKNDEwNDA9PidMJywKNDEwNDE9PidMJywKNDEwNDI9PidMJywKNDEwNDM9PidMJywKNDEwNDQ9PidMJywKNDEwNDU9PidMJywKNDEwNDY9PidMJywKNDEwNDc9PidMJywKNDEwNDg9PidMJywKNDEwNDk9PidMJywKNDEwNTA9PidMJywKNDEwNTE9PidMJywKNDEwNTI9PidMJywKNDEwNTM9PidMJywKNDEwNTQ9PidMJywKNDEwNTU9PidMJywKNDEwNTY9PidMJywKNDEwNTc9PidMJywKNDEwNTg9PidMJywKNDEwNTk9PidMJywKNDEwNjA9PidMJywKNDEwNjE9PidMJywKNDEwNjI9PidMJywKNDEwNjM9PidMJywKNDEwNjQ9PidMJywKNDEwNjU9PidMJywKNDEwNjY9PidMJywKNDEwNjc9PidMJywKNDEwNjg9PidMJywKNDEwNjk9PidMJywKNDEwNzA9PidMJywKNDEwNzE9PidMJywKNDEwNzI9PidMJywKNDEwNzM9PidMJywKNDEwNzQ9PidMJywKNDEwNzU9PidMJywKNDEwNzY9PidMJywKNDEwNzc9PidMJywKNDEwNzg9PidMJywKNDEwNzk9PidMJywKNDEwODA9PidMJywKNDEwODE9PidMJywKNDEwODI9PidMJywKNDEwODM9PidMJywKNDEwODQ9PidMJywKNDEwODU9PidMJywKNDEwODY9PidMJywKNDEwODc9PidMJywKNDEwODg9PidMJywKNDEwODk9PidMJywKNDEwOTA9PidMJywKNDEwOTE9PidMJywKNDEwOTI9PidMJywKNDEwOTM9PidMJywKNDEwOTQ9PidMJywKNDEwOTU9PidMJywKNDEwOTY9PidMJywKNDEwOTc9PidMJywKNDEwOTg9PidMJywKNDEwOTk9PidMJywKNDExMDA9PidMJywKNDExMDE9PidMJywKNDExMDI9PidMJywKNDExMDM9PidMJywKNDExMDQ9PidMJywKNDExMDU9PidMJywKNDExMDY9PidMJywKNDExMDc9PidMJywKNDExMDg9PidMJywKNDExMDk9PidMJywKNDExMTA9PidMJywKNDExMTE9PidMJywKNDExMTI9PidMJywKNDExMTM9PidMJywKNDExMTQ9PidMJywKNDExMTU9PidMJywKNDExMTY9PidMJywKNDExMTc9PidMJywKNDExMTg9PidMJywKNDExMTk9PidMJywKNDExMjA9PidMJywKNDExMjE9PidMJywKNDExMjI9PidMJywKNDExMjM9PidMJywKNDExMjQ9PidMJywKNDExMjU9PidMJywKNDExMjY9PidMJywKNDExMjc9PidMJywKNDExMjg9PidMJywKNDExMjk9PidMJywKNDExMzA9PidMJywKNDExMzE9PidMJywKNDExMzI9PidMJywKNDExMzM9PidMJywKNDExMzQ9PidMJywKNDExMzU9PidMJywKNDExMzY9PidMJywKNDExMzc9PidMJywKNDExMzg9PidMJywKNDExMzk9PidMJywKNDExNDA9PidMJywKNDExNDE9PidMJywKNDExNDI9PidMJywKNDExNDM9PidMJywKNDExNDQ9PidMJywKNDExNDU9PidMJywKNDExNDY9PidMJywKNDExNDc9PidMJywKNDExNDg9PidMJywKNDExNDk9PidMJywKNDExNTA9PidMJywKNDExNTE9PidMJywKNDExNTI9PidMJywKNDExNTM9PidMJywKNDExNTQ9PidMJywKNDExNTU9PidMJywKNDExNTY9PidMJywKNDExNTc9PidMJywKNDExNTg9PidMJywKNDExNTk9PidMJywKNDExNjA9PidMJywKNDExNjE9PidMJywKNDExNjI9PidMJywKNDExNjM9PidMJywKNDExNjQ9PidMJywKNDExNjU9PidMJywKNDExNjY9PidMJywKNDExNjc9PidMJywKNDExNjg9PidMJywKNDExNjk9PidMJywKNDExNzA9PidMJywKNDExNzE9PidMJywKNDExNzI9PidMJywKNDExNzM9PidMJywKNDExNzQ9PidMJywKNDExNzU9PidMJywKNDExNzY9PidMJywKNDExNzc9PidMJywKNDExNzg9PidMJywKNDExNzk9PidMJywKNDExODA9PidMJywKNDExODE9PidMJywKNDExODI9PidMJywKNDExODM9PidMJywKNDExODQ9PidMJywKNDExODU9PidMJywKNDExODY9PidMJywKNDExODc9PidMJywKNDExODg9PidMJywKNDExODk9PidMJywKNDExOTA9PidMJywKNDExOTE9PidMJywKNDExOTI9PidMJywKNDExOTM9PidMJywKNDExOTQ9PidMJywKNDExOTU9PidMJywKNDExOTY9PidMJywKNDExOTc9PidMJywKNDExOTg9PidMJywKNDExOTk9PidMJywKNDEyMDA9PidMJywKNDEyMDE9PidMJywKNDEyMDI9PidMJywKNDEyMDM9PidMJywKNDEyMDQ9PidMJywKNDEyMDU9PidMJywKNDEyMDY9PidMJywKNDEyMDc9PidMJywKNDEyMDg9PidMJywKNDEyMDk9PidMJywKNDEyMTA9PidMJywKNDEyMTE9PidMJywKNDEyMTI9PidMJywKNDEyMTM9PidMJywKNDEyMTQ9PidMJywKNDEyMTU9PidMJywKNDEyMTY9PidMJywKNDEyMTc9PidMJywKNDEyMTg9PidMJywKNDEyMTk9PidMJywKNDEyMjA9PidMJywKNDEyMjE9PidMJywKNDEyMjI9PidMJywKNDEyMjM9PidMJywKNDEyMjQ9PidMJywKNDEyMjU9PidMJywKNDEyMjY9PidMJywKNDEyMjc9PidMJywKNDEyMjg9PidMJywKNDEyMjk9PidMJywKNDEyMzA9PidMJywKNDEyMzE9PidMJywKNDEyMzI9PidMJywKNDEyMzM9PidMJywKNDEyMzQ9PidMJywKNDEyMzU9PidMJywKNDEyMzY9PidMJywKNDEyMzc9PidMJywKNDEyMzg9PidMJywKNDEyMzk9PidMJywKNDEyNDA9PidMJywKNDEyNDE9PidMJywKNDEyNDI9PidMJywKNDEyNDM9PidMJywKNDEyNDQ9PidMJywKNDEyNDU9PidMJywKNDEyNDY9PidMJywKNDEyNDc9PidMJywKNDEyNDg9PidMJywKNDEyNDk9PidMJywKNDEyNTA9PidMJywKNDEyNTE9PidMJywKNDEyNTI9PidMJywKNDEyNTM9PidMJywKNDEyNTQ9PidMJywKNDEyNTU9PidMJywKNDEyNTY9PidMJywKNDEyNTc9PidMJywKNDEyNTg9PidMJywKNDEyNTk9PidMJywKNDEyNjA9PidMJywKNDEyNjE9PidMJywKNDEyNjI9PidMJywKNDEyNjM9PidMJywKNDEyNjQ9PidMJywKNDEyNjU9PidMJywKNDEyNjY9PidMJywKNDEyNjc9PidMJywKNDEyNjg9PidMJywKNDEyNjk9PidMJywKNDEyNzA9PidMJywKNDEyNzE9PidMJywKNDEyNzI9PidMJywKNDEyNzM9PidMJywKNDEyNzQ9PidMJywKNDEyNzU9PidMJywKNDEyNzY9PidMJywKNDEyNzc9PidMJywKNDEyNzg9PidMJywKNDEyNzk9PidMJywKNDEyODA9PidMJywKNDEyODE9PidMJywKNDEyODI9PidMJywKNDEyODM9PidMJywKNDEyODQ9PidMJywKNDEyODU9PidMJywKNDEyODY9PidMJywKNDEyODc9PidMJywKNDEyODg9PidMJywKNDEyODk9PidMJywKNDEyOTA9PidMJywKNDEyOTE9PidMJywKNDEyOTI9PidMJywKNDEyOTM9PidMJywKNDEyOTQ9PidMJywKNDEyOTU9PidMJywKNDEyOTY9PidMJywKNDEyOTc9PidMJywKNDEyOTg9PidMJywKNDEyOTk9PidMJywKNDEzMDA9PidMJywKNDEzMDE9PidMJywKNDEzMDI9PidMJywKNDEzMDM9PidMJywKNDEzMDQ9PidMJywKNDEzMDU9PidMJywKNDEzMDY9PidMJywKNDEzMDc9PidMJywKNDEzMDg9PidMJywKNDEzMDk9PidMJywKNDEzMTA9PidMJywKNDEzMTE9PidMJywKNDEzMTI9PidMJywKNDEzMTM9PidMJywKNDEzMTQ9PidMJywKNDEzMTU9PidMJywKNDEzMTY9PidMJywKNDEzMTc9PidMJywKNDEzMTg9PidMJywKNDEzMTk9PidMJywKNDEzMjA9PidMJywKNDEzMjE9PidMJywKNDEzMjI9PidMJywKNDEzMjM9PidMJywKNDEzMjQ9PidMJywKNDEzMjU9PidMJywKNDEzMjY9PidMJywKNDEzMjc9PidMJywKNDEzMjg9PidMJywKNDEzMjk9PidMJywKNDEzMzA9PidMJywKNDEzMzE9PidMJywKNDEzMzI9PidMJywKNDEzMzM9PidMJywKNDEzMzQ9PidMJywKNDEzMzU9PidMJywKNDEzMzY9PidMJywKNDEzMzc9PidMJywKNDEzMzg9PidMJywKNDEzMzk9PidMJywKNDEzNDA9PidMJywKNDEzNDE9PidMJywKNDEzNDI9PidMJywKNDEzNDM9PidMJywKNDEzNDQ9PidMJywKNDEzNDU9PidMJywKNDEzNDY9PidMJywKNDEzNDc9PidMJywKNDEzNDg9PidMJywKNDEzNDk9PidMJywKNDEzNTA9PidMJywKNDEzNTE9PidMJywKNDEzNTI9PidMJywKNDEzNTM9PidMJywKNDEzNTQ9PidMJywKNDEzNTU9PidMJywKNDEzNTY9PidMJywKNDEzNTc9PidMJywKNDEzNTg9PidMJywKNDEzNTk9PidMJywKNDEzNjA9PidMJywKNDEzNjE9PidMJywKNDEzNjI9PidMJywKNDEzNjM9PidMJywKNDEzNjQ9PidMJywKNDEzNjU9PidMJywKNDEzNjY9PidMJywKNDEzNjc9PidMJywKNDEzNjg9PidMJywKNDEzNjk9PidMJywKNDEzNzA9PidMJywKNDEzNzE9PidMJywKNDEzNzI9PidMJywKNDEzNzM9PidMJywKNDEzNzQ9PidMJywKNDEzNzU9PidMJywKNDEzNzY9PidMJywKNDEzNzc9PidMJywKNDEzNzg9PidMJywKNDEzNzk9PidMJywKNDEzODA9PidMJywKNDEzODE9PidMJywKNDEzODI9PidMJywKNDEzODM9PidMJywKNDEzODQ9PidMJywKNDEzODU9PidMJywKNDEzODY9PidMJywKNDEzODc9PidMJywKNDEzODg9PidMJywKNDEzODk9PidMJywKNDEzOTA9PidMJywKNDEzOTE9PidMJywKNDEzOTI9PidMJywKNDEzOTM9PidMJywKNDEzOTQ9PidMJywKNDEzOTU9PidMJywKNDEzOTY9PidMJywKNDEzOTc9PidMJywKNDEzOTg9PidMJywKNDEzOTk9PidMJywKNDE0MDA9PidMJywKNDE0MDE9PidMJywKNDE0MDI9PidMJywKNDE0MDM9PidMJywKNDE0MDQ9PidMJywKNDE0MDU9PidMJywKNDE0MDY9PidMJywKNDE0MDc9PidMJywKNDE0MDg9PidMJywKNDE0MDk9PidMJywKNDE0MTA9PidMJywKNDE0MTE9PidMJywKNDE0MTI9PidMJywKNDE0MTM9PidMJywKNDE0MTQ9PidMJywKNDE0MTU9PidMJywKNDE0MTY9PidMJywKNDE0MTc9PidMJywKNDE0MTg9PidMJywKNDE0MTk9PidMJywKNDE0MjA9PidMJywKNDE0MjE9PidMJywKNDE0MjI9PidMJywKNDE0MjM9PidMJywKNDE0MjQ9PidMJywKNDE0MjU9PidMJywKNDE0MjY9PidMJywKNDE0Mjc9PidMJywKNDE0Mjg9PidMJywKNDE0Mjk9PidMJywKNDE0MzA9PidMJywKNDE0MzE9PidMJywKNDE0MzI9PidMJywKNDE0MzM9PidMJywKNDE0MzQ9PidMJywKNDE0MzU9PidMJywKNDE0MzY9PidMJywKNDE0Mzc9PidMJywKNDE0Mzg9PidMJywKNDE0Mzk9PidMJywKNDE0NDA9PidMJywKNDE0NDE9PidMJywKNDE0NDI9PidMJywKNDE0NDM9PidMJywKNDE0NDQ9PidMJywKNDE0NDU9PidMJywKNDE0NDY9PidMJywKNDE0NDc9PidMJywKNDE0NDg9PidMJywKNDE0NDk9PidMJywKNDE0NTA9PidMJywKNDE0NTE9PidMJywKNDE0NTI9PidMJywKNDE0NTM9PidMJywKNDE0NTQ9PidMJywKNDE0NTU9PidMJywKNDE0NTY9PidMJywKNDE0NTc9PidMJywKNDE0NTg9PidMJywKNDE0NTk9PidMJywKNDE0NjA9PidMJywKNDE0NjE9PidMJywKNDE0NjI9PidMJywKNDE0NjM9PidMJywKNDE0NjQ9PidMJywKNDE0NjU9PidMJywKNDE0NjY9PidMJywKNDE0Njc9PidMJywKNDE0Njg9PidMJywKNDE0Njk9PidMJywKNDE0NzA9PidMJywKNDE0NzE9PidMJywKNDE0NzI9PidMJywKNDE0NzM9PidMJywKNDE0NzQ9PidMJywKNDE0NzU9PidMJywKNDE0NzY9PidMJywKNDE0Nzc9PidMJywKNDE0Nzg9PidMJywKNDE0Nzk9PidMJywKNDE0ODA9PidMJywKNDE0ODE9PidMJywKNDE0ODI9PidMJywKNDE0ODM9PidMJywKNDE0ODQ9PidMJywKNDE0ODU9PidMJywKNDE0ODY9PidMJywKNDE0ODc9PidMJywKNDE0ODg9PidMJywKNDE0ODk9PidMJywKNDE0OTA9PidMJywKNDE0OTE9PidMJywKNDE0OTI9PidMJywKNDE0OTM9PidMJywKNDE0OTQ9PidMJywKNDE0OTU9PidMJywKNDE0OTY9PidMJywKNDE0OTc9PidMJywKNDE0OTg9PidMJywKNDE0OTk9PidMJywKNDE1MDA9PidMJywKNDE1MDE9PidMJywKNDE1MDI9PidMJywKNDE1MDM9PidMJywKNDE1MDQ9PidMJywKNDE1MDU9PidMJywKNDE1MDY9PidMJywKNDE1MDc9PidMJywKNDE1MDg9PidMJywKNDE1MDk9PidMJywKNDE1MTA9PidMJywKNDE1MTE9PidMJywKNDE1MTI9PidMJywKNDE1MTM9PidMJywKNDE1MTQ9PidMJywKNDE1MTU9PidMJywKNDE1MTY9PidMJywKNDE1MTc9PidMJywKNDE1MTg9PidMJywKNDE1MTk9PidMJywKNDE1MjA9PidMJywKNDE1MjE9PidMJywKNDE1MjI9PidMJywKNDE1MjM9PidMJywKNDE1MjQ9PidMJywKNDE1MjU9PidMJywKNDE1MjY9PidMJywKNDE1Mjc9PidMJywKNDE1Mjg9PidMJywKNDE1Mjk9PidMJywKNDE1MzA9PidMJywKNDE1MzE9PidMJywKNDE1MzI9PidMJywKNDE1MzM9PidMJywKNDE1MzQ9PidMJywKNDE1MzU9PidMJywKNDE1MzY9PidMJywKNDE1Mzc9PidMJywKNDE1Mzg9PidMJywKNDE1Mzk9PidMJywKNDE1NDA9PidMJywKNDE1NDE9PidMJywKNDE1NDI9PidMJywKNDE1NDM9PidMJywKNDE1NDQ9PidMJywKNDE1NDU9PidMJywKNDE1NDY9PidMJywKNDE1NDc9PidMJywKNDE1NDg9PidMJywKNDE1NDk9PidMJywKNDE1NTA9PidMJywKNDE1NTE9PidMJywKNDE1NTI9PidMJywKNDE1NTM9PidMJywKNDE1NTQ9PidMJywKNDE1NTU9PidMJywKNDE1NTY9PidMJywKNDE1NTc9PidMJywKNDE1NTg9PidMJywKNDE1NTk9PidMJywKNDE1NjA9PidMJywKNDE1NjE9PidMJywKNDE1NjI9PidMJywKNDE1NjM9PidMJywKNDE1NjQ9PidMJywKNDE1NjU9PidMJywKNDE1NjY9PidMJywKNDE1Njc9PidMJywKNDE1Njg9PidMJywKNDE1Njk9PidMJywKNDE1NzA9PidMJywKNDE1NzE9PidMJywKNDE1NzI9PidMJywKNDE1NzM9PidMJywKNDE1NzQ9PidMJywKNDE1NzU9PidMJywKNDE1NzY9PidMJywKNDE1Nzc9PidMJywKNDE1Nzg9PidMJywKNDE1Nzk9PidMJywKNDE1ODA9PidMJywKNDE1ODE9PidMJywKNDE1ODI9PidMJywKNDE1ODM9PidMJywKNDE1ODQ9PidMJywKNDE1ODU9PidMJywKNDE1ODY9PidMJywKNDE1ODc9PidMJywKNDE1ODg9PidMJywKNDE1ODk9PidMJywKNDE1OTA9PidMJywKNDE1OTE9PidMJywKNDE1OTI9PidMJywKNDE1OTM9PidMJywKNDE1OTQ9PidMJywKNDE1OTU9PidMJywKNDE1OTY9PidMJywKNDE1OTc9PidMJywKNDE1OTg9PidMJywKNDE1OTk9PidMJywKNDE2MDA9PidMJywKNDE2MDE9PidMJywKNDE2MDI9PidMJywKNDE2MDM9PidMJywKNDE2MDQ9PidMJywKNDE2MDU9PidMJywKNDE2MDY9PidMJywKNDE2MDc9PidMJywKNDE2MDg9PidMJywKNDE2MDk9PidMJywKNDE2MTA9PidMJywKNDE2MTE9PidMJywKNDE2MTI9PidMJywKNDE2MTM9PidMJywKNDE2MTQ9PidMJywKNDE2MTU9PidMJywKNDE2MTY9PidMJywKNDE2MTc9PidMJywKNDE2MTg9PidMJywKNDE2MTk9PidMJywKNDE2MjA9PidMJywKNDE2MjE9PidMJywKNDE2MjI9PidMJywKNDE2MjM9PidMJywKNDE2MjQ9PidMJywKNDE2MjU9PidMJywKNDE2MjY9PidMJywKNDE2Mjc9PidMJywKNDE2Mjg9PidMJywKNDE2Mjk9PidMJywKNDE2MzA9PidMJywKNDE2MzE9PidMJywKNDE2MzI9PidMJywKNDE2MzM9PidMJywKNDE2MzQ9PidMJywKNDE2MzU9PidMJywKNDE2MzY9PidMJywKNDE2Mzc9PidMJywKNDE2Mzg9PidMJywKNDE2Mzk9PidMJywKNDE2NDA9PidMJywKNDE2NDE9PidMJywKNDE2NDI9PidMJywKNDE2NDM9PidMJywKNDE2NDQ9PidMJywKNDE2NDU9PidMJywKNDE2NDY9PidMJywKNDE2NDc9PidMJywKNDE2NDg9PidMJywKNDE2NDk9PidMJywKNDE2NTA9PidMJywKNDE2NTE9PidMJywKNDE2NTI9PidMJywKNDE2NTM9PidMJywKNDE2NTQ9PidMJywKNDE2NTU9PidMJywKNDE2NTY9PidMJywKNDE2NTc9PidMJywKNDE2NTg9PidMJywKNDE2NTk9PidMJywKNDE2NjA9PidMJywKNDE2NjE9PidMJywKNDE2NjI9PidMJywKNDE2NjM9PidMJywKNDE2NjQ9PidMJywKNDE2NjU9PidMJywKNDE2NjY9PidMJywKNDE2Njc9PidMJywKNDE2Njg9PidMJywKNDE2Njk9PidMJywKNDE2NzA9PidMJywKNDE2NzE9PidMJywKNDE2NzI9PidMJywKNDE2NzM9PidMJywKNDE2NzQ9PidMJywKNDE2NzU9PidMJywKNDE2NzY9PidMJywKNDE2Nzc9PidMJywKNDE2Nzg9PidMJywKNDE2Nzk9PidMJywKNDE2ODA9PidMJywKNDE2ODE9PidMJywKNDE2ODI9PidMJywKNDE2ODM9PidMJywKNDE2ODQ9PidMJywKNDE2ODU9PidMJywKNDE2ODY9PidMJywKNDE2ODc9PidMJywKNDE2ODg9PidMJywKNDE2ODk9PidMJywKNDE2OTA9PidMJywKNDE2OTE9PidMJywKNDE2OTI9PidMJywKNDE2OTM9PidMJywKNDE2OTQ9PidMJywKNDE2OTU9PidMJywKNDE2OTY9PidMJywKNDE2OTc9PidMJywKNDE2OTg9PidMJywKNDE2OTk9PidMJywKNDE3MDA9PidMJywKNDE3MDE9PidMJywKNDE3MDI9PidMJywKNDE3MDM9PidMJywKNDE3MDQ9PidMJywKNDE3MDU9PidMJywKNDE3MDY9PidMJywKNDE3MDc9PidMJywKNDE3MDg9PidMJywKNDE3MDk9PidMJywKNDE3MTA9PidMJywKNDE3MTE9PidMJywKNDE3MTI9PidMJywKNDE3MTM9PidMJywKNDE3MTQ9PidMJywKNDE3MTU9PidMJywKNDE3MTY9PidMJywKNDE3MTc9PidMJywKNDE3MTg9PidMJywKNDE3MTk9PidMJywKNDE3MjA9PidMJywKNDE3MjE9PidMJywKNDE3MjI9PidMJywKNDE3MjM9PidMJywKNDE3MjQ9PidMJywKNDE3MjU9PidMJywKNDE3MjY9PidMJywKNDE3Mjc9PidMJywKNDE3Mjg9PidMJywKNDE3Mjk9PidMJywKNDE3MzA9PidMJywKNDE3MzE9PidMJywKNDE3MzI9PidMJywKNDE3MzM9PidMJywKNDE3MzQ9PidMJywKNDE3MzU9PidMJywKNDE3MzY9PidMJywKNDE3Mzc9PidMJywKNDE3Mzg9PidMJywKNDE3Mzk9PidMJywKNDE3NDA9PidMJywKNDE3NDE9PidMJywKNDE3NDI9PidMJywKNDE3NDM9PidMJywKNDE3NDQ9PidMJywKNDE3NDU9PidMJywKNDE3NDY9PidMJywKNDE3NDc9PidMJywKNDE3NDg9PidMJywKNDE3NDk9PidMJywKNDE3NTA9PidMJywKNDE3NTE9PidMJywKNDE3NTI9PidMJywKNDE3NTM9PidMJywKNDE3NTQ9PidMJywKNDE3NTU9PidMJywKNDE3NTY9PidMJywKNDE3NTc9PidMJywKNDE3NTg9PidMJywKNDE3NTk9PidMJywKNDE3NjA9PidMJywKNDE3NjE9PidMJywKNDE3NjI9PidMJywKNDE3NjM9PidMJywKNDE3NjQ9PidMJywKNDE3NjU9PidMJywKNDE3NjY9PidMJywKNDE3Njc9PidMJywKNDE3Njg9PidMJywKNDE3Njk9PidMJywKNDE3NzA9PidMJywKNDE3NzE9PidMJywKNDE3NzI9PidMJywKNDE3NzM9PidMJywKNDE3NzQ9PidMJywKNDE3NzU9PidMJywKNDE3NzY9PidMJywKNDE3Nzc9PidMJywKNDE3Nzg9PidMJywKNDE3Nzk9PidMJywKNDE3ODA9PidMJywKNDE3ODE9PidMJywKNDE3ODI9PidMJywKNDE3ODM9PidMJywKNDE3ODQ9PidMJywKNDE3ODU9PidMJywKNDE3ODY9PidMJywKNDE3ODc9PidMJywKNDE3ODg9PidMJywKNDE3ODk9PidMJywKNDE3OTA9PidMJywKNDE3OTE9PidMJywKNDE3OTI9PidMJywKNDE3OTM9PidMJywKNDE3OTQ9PidMJywKNDE3OTU9PidMJywKNDE3OTY9PidMJywKNDE3OTc9PidMJywKNDE3OTg9PidMJywKNDE3OTk9PidMJywKNDE4MDA9PidMJywKNDE4MDE9PidMJywKNDE4MDI9PidMJywKNDE4MDM9PidMJywKNDE4MDQ9PidMJywKNDE4MDU9PidMJywKNDE4MDY9PidMJywKNDE4MDc9PidMJywKNDE4MDg9PidMJywKNDE4MDk9PidMJywKNDE4MTA9PidMJywKNDE4MTE9PidMJywKNDE4MTI9PidMJywKNDE4MTM9PidMJywKNDE4MTQ9PidMJywKNDE4MTU9PidMJywKNDE4MTY9PidMJywKNDE4MTc9PidMJywKNDE4MTg9PidMJywKNDE4MTk9PidMJywKNDE4MjA9PidMJywKNDE4MjE9PidMJywKNDE4MjI9PidMJywKNDE4MjM9PidMJywKNDE4MjQ9PidMJywKNDE4MjU9PidMJywKNDE4MjY9PidMJywKNDE4Mjc9PidMJywKNDE4Mjg9PidMJywKNDE4Mjk9PidMJywKNDE4MzA9PidMJywKNDE4MzE9PidMJywKNDE4MzI9PidMJywKNDE4MzM9PidMJywKNDE4MzQ9PidMJywKNDE4MzU9PidMJywKNDE4MzY9PidMJywKNDE4Mzc9PidMJywKNDE4Mzg9PidMJywKNDE4Mzk9PidMJywKNDE4NDA9PidMJywKNDE4NDE9PidMJywKNDE4NDI9PidMJywKNDE4NDM9PidMJywKNDE4NDQ9PidMJywKNDE4NDU9PidMJywKNDE4NDY9PidMJywKNDE4NDc9PidMJywKNDE4NDg9PidMJywKNDE4NDk9PidMJywKNDE4NTA9PidMJywKNDE4NTE9PidMJywKNDE4NTI9PidMJywKNDE4NTM9PidMJywKNDE4NTQ9PidMJywKNDE4NTU9PidMJywKNDE4NTY9PidMJywKNDE4NTc9PidMJywKNDE4NTg9PidMJywKNDE4NTk9PidMJywKNDE4NjA9PidMJywKNDE4NjE9PidMJywKNDE4NjI9PidMJywKNDE4NjM9PidMJywKNDE4NjQ9PidMJywKNDE4NjU9PidMJywKNDE4NjY9PidMJywKNDE4Njc9PidMJywKNDE4Njg9PidMJywKNDE4Njk9PidMJywKNDE4NzA9PidMJywKNDE4NzE9PidMJywKNDE4NzI9PidMJywKNDE4NzM9PidMJywKNDE4NzQ9PidMJywKNDE4NzU9PidMJywKNDE4NzY9PidMJywKNDE4Nzc9PidMJywKNDE4Nzg9PidMJywKNDE4Nzk9PidMJywKNDE4ODA9PidMJywKNDE4ODE9PidMJywKNDE4ODI9PidMJywKNDE4ODM9PidMJywKNDE4ODQ9PidMJywKNDE4ODU9PidMJywKNDE4ODY9PidMJywKNDE4ODc9PidMJywKNDE4ODg9PidMJywKNDE4ODk9PidMJywKNDE4OTA9PidMJywKNDE4OTE9PidMJywKNDE4OTI9PidMJywKNDE4OTM9PidMJywKNDE4OTQ9PidMJywKNDE4OTU9PidMJywKNDE4OTY9PidMJywKNDE4OTc9PidMJywKNDE4OTg9PidMJywKNDE4OTk9PidMJywKNDE5MDA9PidMJywKNDE5MDE9PidMJywKNDE5MDI9PidMJywKNDE5MDM9PidMJywKNDE5MDQ9PidMJywKNDE5MDU9PidMJywKNDE5MDY9PidMJywKNDE5MDc9PidMJywKNDE5MDg9PidMJywKNDE5MDk9PidMJywKNDE5MTA9PidMJywKNDE5MTE9PidMJywKNDE5MTI9PidMJywKNDE5MTM9PidMJywKNDE5MTQ9PidMJywKNDE5MTU9PidMJywKNDE5MTY9PidMJywKNDE5MTc9PidMJywKNDE5MTg9PidMJywKNDE5MTk9PidMJywKNDE5MjA9PidMJywKNDE5MjE9PidMJywKNDE5MjI9PidMJywKNDE5MjM9PidMJywKNDE5MjQ9PidMJywKNDE5MjU9PidMJywKNDE5MjY9PidMJywKNDE5Mjc9PidMJywKNDE5Mjg9PidMJywKNDE5Mjk9PidMJywKNDE5MzA9PidMJywKNDE5MzE9PidMJywKNDE5MzI9PidMJywKNDE5MzM9PidMJywKNDE5MzQ9PidMJywKNDE5MzU9PidMJywKNDE5MzY9PidMJywKNDE5Mzc9PidMJywKNDE5Mzg9PidMJywKNDE5Mzk9PidMJywKNDE5NDA9PidMJywKNDE5NDE9PidMJywKNDE5NDI9PidMJywKNDE5NDM9PidMJywKNDE5NDQ9PidMJywKNDE5NDU9PidMJywKNDE5NDY9PidMJywKNDE5NDc9PidMJywKNDE5NDg9PidMJywKNDE5NDk9PidMJywKNDE5NTA9PidMJywKNDE5NTE9PidMJywKNDE5NTI9PidMJywKNDE5NTM9PidMJywKNDE5NTQ9PidMJywKNDE5NTU9PidMJywKNDE5NTY9PidMJywKNDE5NTc9PidMJywKNDE5NTg9PidMJywKNDE5NTk9PidMJywKNDE5NjA9PidMJywKNDE5NjE9PidMJywKNDE5NjI9PidMJywKNDE5NjM9PidMJywKNDE5NjQ9PidMJywKNDE5NjU9PidMJywKNDE5NjY9PidMJywKNDE5Njc9PidMJywKNDE5Njg9PidMJywKNDE5Njk9PidMJywKNDE5NzA9PidMJywKNDE5NzE9PidMJywKNDE5NzI9PidMJywKNDE5NzM9PidMJywKNDE5NzQ9PidMJywKNDE5NzU9PidMJywKNDE5NzY9PidMJywKNDE5Nzc9PidMJywKNDE5Nzg9PidMJywKNDE5Nzk9PidMJywKNDE5ODA9PidMJywKNDE5ODE9PidMJywKNDE5ODI9PidMJywKNDE5ODM9PidMJywKNDE5ODQ9PidMJywKNDE5ODU9PidMJywKNDE5ODY9PidMJywKNDE5ODc9PidMJywKNDE5ODg9PidMJywKNDE5ODk9PidMJywKNDE5OTA9PidMJywKNDE5OTE9PidMJywKNDE5OTI9PidMJywKNDE5OTM9PidMJywKNDE5OTQ9PidMJywKNDE5OTU9PidMJywKNDE5OTY9PidMJywKNDE5OTc9PidMJywKNDE5OTg9PidMJywKNDE5OTk9PidMJywKNDIwMDA9PidMJywKNDIwMDE9PidMJywKNDIwMDI9PidMJywKNDIwMDM9PidMJywKNDIwMDQ9PidMJywKNDIwMDU9PidMJywKNDIwMDY9PidMJywKNDIwMDc9PidMJywKNDIwMDg9PidMJywKNDIwMDk9PidMJywKNDIwMTA9PidMJywKNDIwMTE9PidMJywKNDIwMTI9PidMJywKNDIwMTM9PidMJywKNDIwMTQ9PidMJywKNDIwMTU9PidMJywKNDIwMTY9PidMJywKNDIwMTc9PidMJywKNDIwMTg9PidMJywKNDIwMTk9PidMJywKNDIwMjA9PidMJywKNDIwMjE9PidMJywKNDIwMjI9PidMJywKNDIwMjM9PidMJywKNDIwMjQ9PidMJywKNDIwMjU9PidMJywKNDIwMjY9PidMJywKNDIwMjc9PidMJywKNDIwMjg9PidMJywKNDIwMjk9PidMJywKNDIwMzA9PidMJywKNDIwMzE9PidMJywKNDIwMzI9PidMJywKNDIwMzM9PidMJywKNDIwMzQ9PidMJywKNDIwMzU9PidMJywKNDIwMzY9PidMJywKNDIwMzc9PidMJywKNDIwMzg9PidMJywKNDIwMzk9PidMJywKNDIwNDA9PidMJywKNDIwNDE9PidMJywKNDIwNDI9PidMJywKNDIwNDM9PidMJywKNDIwNDQ9PidMJywKNDIwNDU9PidMJywKNDIwNDY9PidMJywKNDIwNDc9PidMJywKNDIwNDg9PidMJywKNDIwNDk9PidMJywKNDIwNTA9PidMJywKNDIwNTE9PidMJywKNDIwNTI9PidMJywKNDIwNTM9PidMJywKNDIwNTQ9PidMJywKNDIwNTU9PidMJywKNDIwNTY9PidMJywKNDIwNTc9PidMJywKNDIwNTg9PidMJywKNDIwNTk9PidMJywKNDIwNjA9PidMJywKNDIwNjE9PidMJywKNDIwNjI9PidMJywKNDIwNjM9PidMJywKNDIwNjQ9PidMJywKNDIwNjU9PidMJywKNDIwNjY9PidMJywKNDIwNjc9PidMJywKNDIwNjg9PidMJywKNDIwNjk9PidMJywKNDIwNzA9PidMJywKNDIwNzE9PidMJywKNDIwNzI9PidMJywKNDIwNzM9PidMJywKNDIwNzQ9PidMJywKNDIwNzU9PidMJywKNDIwNzY9PidMJywKNDIwNzc9PidMJywKNDIwNzg9PidMJywKNDIwNzk9PidMJywKNDIwODA9PidMJywKNDIwODE9PidMJywKNDIwODI9PidMJywKNDIwODM9PidMJywKNDIwODQ9PidMJywKNDIwODU9PidMJywKNDIwODY9PidMJywKNDIwODc9PidMJywKNDIwODg9PidMJywKNDIwODk9PidMJywKNDIwOTA9PidMJywKNDIwOTE9PidMJywKNDIwOTI9PidMJywKNDIwOTM9PidMJywKNDIwOTQ9PidMJywKNDIwOTU9PidMJywKNDIwOTY9PidMJywKNDIwOTc9PidMJywKNDIwOTg9PidMJywKNDIwOTk9PidMJywKNDIxMDA9PidMJywKNDIxMDE9PidMJywKNDIxMDI9PidMJywKNDIxMDM9PidMJywKNDIxMDQ9PidMJywKNDIxMDU9PidMJywKNDIxMDY9PidMJywKNDIxMDc9PidMJywKNDIxMDg9PidMJywKNDIxMDk9PidMJywKNDIxMTA9PidMJywKNDIxMTE9PidMJywKNDIxMTI9PidMJywKNDIxMTM9PidMJywKNDIxMTQ9PidMJywKNDIxMTU9PidMJywKNDIxMTY9PidMJywKNDIxMTc9PidMJywKNDIxMTg9PidMJywKNDIxMTk9PidMJywKNDIxMjA9PidMJywKNDIxMjE9PidMJywKNDIxMjI9PidMJywKNDIxMjM9PidMJywKNDIxMjQ9PidMJywKNDIxMjg9PidPTicsCjQyMTI5PT4nT04nLAo0MjEzMD0+J09OJywKNDIxMzE9PidPTicsCjQyMTMyPT4nT04nLAo0MjEzMz0+J09OJywKNDIxMzQ9PidPTicsCjQyMTM1PT4nT04nLAo0MjEzNj0+J09OJywKNDIxMzc9PidPTicsCjQyMTM4PT4nT04nLAo0MjEzOT0+J09OJywKNDIxNDA9PidPTicsCjQyMTQxPT4nT04nLAo0MjE0Mj0+J09OJywKNDIxNDM9PidPTicsCjQyMTQ0PT4nT04nLAo0MjE0NT0+J09OJywKNDIxNDY9PidPTicsCjQyMTQ3PT4nT04nLAo0MjE0OD0+J09OJywKNDIxNDk9PidPTicsCjQyMTUwPT4nT04nLAo0MjE1MT0+J09OJywKNDIxNTI9PidPTicsCjQyMTUzPT4nT04nLAo0MjE1ND0+J09OJywKNDIxNTU9PidPTicsCjQyMTU2PT4nT04nLAo0MjE1Nz0+J09OJywKNDIxNTg9PidPTicsCjQyMTU5PT4nT04nLAo0MjE2MD0+J09OJywKNDIxNjE9PidPTicsCjQyMTYyPT4nT04nLAo0MjE2Mz0+J09OJywKNDIxNjQ9PidPTicsCjQyMTY1PT4nT04nLAo0MjE2Nj0+J09OJywKNDIxNjc9PidPTicsCjQyMTY4PT4nT04nLAo0MjE2OT0+J09OJywKNDIxNzA9PidPTicsCjQyMTcxPT4nT04nLAo0MjE3Mj0+J09OJywKNDIxNzM9PidPTicsCjQyMTc0PT4nT04nLAo0MjE3NT0+J09OJywKNDIxNzY9PidPTicsCjQyMTc3PT4nT04nLAo0MjE3OD0+J09OJywKNDIxNzk9PidPTicsCjQyMTgwPT4nT04nLAo0MjE4MT0+J09OJywKNDIxODI9PidPTicsCjQyNzUyPT4nT04nLAo0Mjc1Mz0+J09OJywKNDI3NTQ9PidPTicsCjQyNzU1PT4nT04nLAo0Mjc1Nj0+J09OJywKNDI3NTc9PidPTicsCjQyNzU4PT4nT04nLAo0Mjc1OT0+J09OJywKNDI3NjA9PidPTicsCjQyNzYxPT4nT04nLAo0Mjc2Mj0+J09OJywKNDI3NjM9PidPTicsCjQyNzY0PT4nT04nLAo0Mjc2NT0+J09OJywKNDI3NjY9PidPTicsCjQyNzY3PT4nT04nLAo0Mjc2OD0+J09OJywKNDI3Njk9PidPTicsCjQyNzcwPT4nT04nLAo0Mjc3MT0+J09OJywKNDI3NzI9PidPTicsCjQyNzczPT4nT04nLAo0Mjc3ND0+J09OJywKNDI3NzU9PidPTicsCjQyNzc2PT4nT04nLAo0Mjc3Nz0+J09OJywKNDI3Nzg9PidPTicsCjQyNzg0PT4nT04nLAo0Mjc4NT0+J09OJywKNDMwMDg9PidMJywKNDMwMDk9PidMJywKNDMwMTA9PidOU00nLAo0MzAxMT0+J0wnLAo0MzAxMj0+J0wnLAo0MzAxMz0+J0wnLAo0MzAxND0+J05TTScsCjQzMDE1PT4nTCcsCjQzMDE2PT4nTCcsCjQzMDE3PT4nTCcsCjQzMDE4PT4nTCcsCjQzMDE5PT4nTlNNJywKNDMwMjA9PidMJywKNDMwMjE9PidMJywKNDMwMjI9PidMJywKNDMwMjM9PidMJywKNDMwMjQ9PidMJywKNDMwMjU9PidMJywKNDMwMjY9PidMJywKNDMwMjc9PidMJywKNDMwMjg9PidMJywKNDMwMjk9PidMJywKNDMwMzA9PidMJywKNDMwMzE9PidMJywKNDMwMzI9PidMJywKNDMwMzM9PidMJywKNDMwMzQ9PidMJywKNDMwMzU9PidMJywKNDMwMzY9PidMJywKNDMwMzc9PidMJywKNDMwMzg9PidMJywKNDMwMzk9PidMJywKNDMwNDA9PidMJywKNDMwNDE9PidMJywKNDMwNDI9PidMJywKNDMwNDM9PidMJywKNDMwNDQ9PidMJywKNDMwNDU9PidOU00nLAo0MzA0Nj0+J05TTScsCjQzMDQ3PT4nTCcsCjQzMDQ4PT4nT04nLAo0MzA0OT0+J09OJywKNDMwNTA9PidPTicsCjQzMDUxPT4nT04nLAo0MzA3Mj0+J0wnLAo0MzA3Mz0+J0wnLAo0MzA3ND0+J0wnLAo0MzA3NT0+J0wnLAo0MzA3Nj0+J0wnLAo0MzA3Nz0+J0wnLAo0MzA3OD0+J0wnLAo0MzA3OT0+J0wnLAo0MzA4MD0+J0wnLAo0MzA4MT0+J0wnLAo0MzA4Mj0+J0wnLAo0MzA4Mz0+J0wnLAo0MzA4ND0+J0wnLAo0MzA4NT0+J0wnLAo0MzA4Nj0+J0wnLAo0MzA4Nz0+J0wnLAo0MzA4OD0+J0wnLAo0MzA4OT0+J0wnLAo0MzA5MD0+J0wnLAo0MzA5MT0+J0wnLAo0MzA5Mj0+J0wnLAo0MzA5Mz0+J0wnLAo0MzA5ND0+J0wnLAo0MzA5NT0+J0wnLAo0MzA5Nj0+J0wnLAo0MzA5Nz0+J0wnLAo0MzA5OD0+J0wnLAo0MzA5OT0+J0wnLAo0MzEwMD0+J0wnLAo0MzEwMT0+J0wnLAo0MzEwMj0+J0wnLAo0MzEwMz0+J0wnLAo0MzEwND0+J0wnLAo0MzEwNT0+J0wnLAo0MzEwNj0+J0wnLAo0MzEwNz0+J0wnLAo0MzEwOD0+J0wnLAo0MzEwOT0+J0wnLAo0MzExMD0+J0wnLAo0MzExMT0+J0wnLAo0MzExMj0+J0wnLAo0MzExMz0+J0wnLAo0MzExND0+J0wnLAo0MzExNT0+J0wnLAo0MzExNj0+J0wnLAo0MzExNz0+J0wnLAo0MzExOD0+J0wnLAo0MzExOT0+J0wnLAo0MzEyMD0+J0wnLAo0MzEyMT0+J0wnLAo0MzEyMj0+J0wnLAo0MzEyMz0+J0wnLAo0MzEyND0+J09OJywKNDMxMjU9PidPTicsCjQzMTI2PT4nT04nLAo0MzEyNz0+J09OJywKNDQwMzI9PidMJywKNTUyMDM9PidMJywKNTUyOTY9PidMJywKNTYxOTE9PidMJywKNTYxOTI9PidMJywKNTYzMTk9PidMJywKNTYzMjA9PidMJywKNTczNDM9PidMJywKNTczNDQ9PidMJywKNjM3NDM9PidMJywKNjM3NDQ9PidMJywKNjM3NDU9PidMJywKNjM3NDY9PidMJywKNjM3NDc9PidMJywKNjM3NDg9PidMJywKNjM3NDk9PidMJywKNjM3NTA9PidMJywKNjM3NTE9PidMJywKNjM3NTI9PidMJywKNjM3NTM9PidMJywKNjM3NTQ9PidMJywKNjM3NTU9PidMJywKNjM3NTY9PidMJywKNjM3NTc9PidMJywKNjM3NTg9PidMJywKNjM3NTk9PidMJywKNjM3NjA9PidMJywKNjM3NjE9PidMJywKNjM3NjI9PidMJywKNjM3NjM9PidMJywKNjM3NjQ9PidMJywKNjM3NjU9PidMJywKNjM3NjY9PidMJywKNjM3Njc9PidMJywKNjM3Njg9PidMJywKNjM3Njk9PidMJywKNjM3NzA9PidMJywKNjM3NzE9PidMJywKNjM3NzI9PidMJywKNjM3NzM9PidMJywKNjM3NzQ9PidMJywKNjM3NzU9PidMJywKNjM3NzY9PidMJywKNjM3Nzc9PidMJywKNjM3Nzg9PidMJywKNjM3Nzk9PidMJywKNjM3ODA9PidMJywKNjM3ODE9PidMJywKNjM3ODI9PidMJywKNjM3ODM9PidMJywKNjM3ODQ9PidMJywKNjM3ODU9PidMJywKNjM3ODY9PidMJywKNjM3ODc9PidMJywKNjM3ODg9PidMJywKNjM3ODk9PidMJywKNjM3OTA9PidMJywKNjM3OTE9PidMJywKNjM3OTI9PidMJywKNjM3OTM9PidMJywKNjM3OTQ9PidMJywKNjM3OTU9PidMJywKNjM3OTY9PidMJywKNjM3OTc9PidMJywKNjM3OTg9PidMJywKNjM3OTk9PidMJywKNjM4MDA9PidMJywKNjM4MDE9PidMJywKNjM4MDI9PidMJywKNjM4MDM9PidMJywKNjM4MDQ9PidMJywKNjM4MDU9PidMJywKNjM4MDY9PidMJywKNjM4MDc9PidMJywKNjM4MDg9PidMJywKNjM4MDk9PidMJywKNjM4MTA9PidMJywKNjM4MTE9PidMJywKNjM4MTI9PidMJywKNjM4MTM9PidMJywKNjM4MTQ9PidMJywKNjM4MTU9PidMJywKNjM4MTY9PidMJywKNjM4MTc9PidMJywKNjM4MTg9PidMJywKNjM4MTk9PidMJywKNjM4MjA9PidMJywKNjM4MjE9PidMJywKNjM4MjI9PidMJywKNjM4MjM9PidMJywKNjM4MjQ9PidMJywKNjM4MjU9PidMJywKNjM4MjY9PidMJywKNjM4Mjc9PidMJywKNjM4Mjg9PidMJywKNjM4Mjk9PidMJywKNjM4MzA9PidMJywKNjM4MzE9PidMJywKNjM4MzI9PidMJywKNjM4MzM9PidMJywKNjM4MzQ9PidMJywKNjM4MzU9PidMJywKNjM4MzY9PidMJywKNjM4Mzc9PidMJywKNjM4Mzg9PidMJywKNjM4Mzk9PidMJywKNjM4NDA9PidMJywKNjM4NDE9PidMJywKNjM4NDI9PidMJywKNjM4NDM9PidMJywKNjM4NDQ9PidMJywKNjM4NDU9PidMJywKNjM4NDY9PidMJywKNjM4NDc9PidMJywKNjM4NDg9PidMJywKNjM4NDk9PidMJywKNjM4NTA9PidMJywKNjM4NTE9PidMJywKNjM4NTI9PidMJywKNjM4NTM9PidMJywKNjM4NTQ9PidMJywKNjM4NTU9PidMJywKNjM4NTY9PidMJywKNjM4NTc9PidMJywKNjM4NTg9PidMJywKNjM4NTk9PidMJywKNjM4NjA9PidMJywKNjM4NjE9PidMJywKNjM4NjI9PidMJywKNjM4NjM9PidMJywKNjM4NjQ9PidMJywKNjM4NjU9PidMJywKNjM4NjY9PidMJywKNjM4Njc9PidMJywKNjM4Njg9PidMJywKNjM4Njk9PidMJywKNjM4NzA9PidMJywKNjM4NzE9PidMJywKNjM4NzI9PidMJywKNjM4NzM9PidMJywKNjM4NzQ9PidMJywKNjM4NzU9PidMJywKNjM4NzY9PidMJywKNjM4Nzc9PidMJywKNjM4Nzg9PidMJywKNjM4Nzk9PidMJywKNjM4ODA9PidMJywKNjM4ODE9PidMJywKNjM4ODI9PidMJywKNjM4ODM9PidMJywKNjM4ODQ9PidMJywKNjM4ODU9PidMJywKNjM4ODY9PidMJywKNjM4ODc9PidMJywKNjM4ODg9PidMJywKNjM4ODk9PidMJywKNjM4OTA9PidMJywKNjM4OTE9PidMJywKNjM4OTI9PidMJywKNjM4OTM9PidMJywKNjM4OTQ9PidMJywKNjM4OTU9PidMJywKNjM4OTY9PidMJywKNjM4OTc9PidMJywKNjM4OTg9PidMJywKNjM4OTk9PidMJywKNjM5MDA9PidMJywKNjM5MDE9PidMJywKNjM5MDI9PidMJywKNjM5MDM9PidMJywKNjM5MDQ9PidMJywKNjM5MDU9PidMJywKNjM5MDY9PidMJywKNjM5MDc9PidMJywKNjM5MDg9PidMJywKNjM5MDk9PidMJywKNjM5MTA9PidMJywKNjM5MTE9PidMJywKNjM5MTI9PidMJywKNjM5MTM9PidMJywKNjM5MTQ9PidMJywKNjM5MTU9PidMJywKNjM5MTY9PidMJywKNjM5MTc9PidMJywKNjM5MTg9PidMJywKNjM5MTk9PidMJywKNjM5MjA9PidMJywKNjM5MjE9PidMJywKNjM5MjI9PidMJywKNjM5MjM9PidMJywKNjM5MjQ9PidMJywKNjM5MjU9PidMJywKNjM5MjY9PidMJywKNjM5Mjc9PidMJywKNjM5Mjg9PidMJywKNjM5Mjk9PidMJywKNjM5MzA9PidMJywKNjM5MzE9PidMJywKNjM5MzI9PidMJywKNjM5MzM9PidMJywKNjM5MzQ9PidMJywKNjM5MzU9PidMJywKNjM5MzY9PidMJywKNjM5Mzc9PidMJywKNjM5Mzg9PidMJywKNjM5Mzk9PidMJywKNjM5NDA9PidMJywKNjM5NDE9PidMJywKNjM5NDI9PidMJywKNjM5NDM9PidMJywKNjM5NDQ9PidMJywKNjM5NDU9PidMJywKNjM5NDY9PidMJywKNjM5NDc9PidMJywKNjM5NDg9PidMJywKNjM5NDk9PidMJywKNjM5NTA9PidMJywKNjM5NTE9PidMJywKNjM5NTI9PidMJywKNjM5NTM9PidMJywKNjM5NTQ9PidMJywKNjM5NTU9PidMJywKNjM5NTY9PidMJywKNjM5NTc9PidMJywKNjM5NTg9PidMJywKNjM5NTk9PidMJywKNjM5NjA9PidMJywKNjM5NjE9PidMJywKNjM5NjI9PidMJywKNjM5NjM9PidMJywKNjM5NjQ9PidMJywKNjM5NjU9PidMJywKNjM5NjY9PidMJywKNjM5Njc9PidMJywKNjM5Njg9PidMJywKNjM5Njk9PidMJywKNjM5NzA9PidMJywKNjM5NzE9PidMJywKNjM5NzI9PidMJywKNjM5NzM9PidMJywKNjM5NzQ9PidMJywKNjM5NzU9PidMJywKNjM5NzY9PidMJywKNjM5Nzc9PidMJywKNjM5Nzg9PidMJywKNjM5Nzk9PidMJywKNjM5ODA9PidMJywKNjM5ODE9PidMJywKNjM5ODI9PidMJywKNjM5ODM9PidMJywKNjM5ODQ9PidMJywKNjM5ODU9PidMJywKNjM5ODY9PidMJywKNjM5ODc9PidMJywKNjM5ODg9PidMJywKNjM5ODk9PidMJywKNjM5OTA9PidMJywKNjM5OTE9PidMJywKNjM5OTI9PidMJywKNjM5OTM9PidMJywKNjM5OTQ9PidMJywKNjM5OTU9PidMJywKNjM5OTY9PidMJywKNjM5OTc9PidMJywKNjM5OTg9PidMJywKNjM5OTk9PidMJywKNjQwMDA9PidMJywKNjQwMDE9PidMJywKNjQwMDI9PidMJywKNjQwMDM9PidMJywKNjQwMDQ9PidMJywKNjQwMDU9PidMJywKNjQwMDY9PidMJywKNjQwMDc9PidMJywKNjQwMDg9PidMJywKNjQwMDk9PidMJywKNjQwMTA9PidMJywKNjQwMTE9PidMJywKNjQwMTI9PidMJywKNjQwMTM9PidMJywKNjQwMTQ9PidMJywKNjQwMTU9PidMJywKNjQwMTY9PidMJywKNjQwMTc9PidMJywKNjQwMTg9PidMJywKNjQwMTk9PidMJywKNjQwMjA9PidMJywKNjQwMjE9PidMJywKNjQwMjI9PidMJywKNjQwMjM9PidMJywKNjQwMjQ9PidMJywKNjQwMjU9PidMJywKNjQwMjY9PidMJywKNjQwMjc9PidMJywKNjQwMjg9PidMJywKNjQwMjk9PidMJywKNjQwMzA9PidMJywKNjQwMzE9PidMJywKNjQwMzI9PidMJywKNjQwMzM9PidMJywKNjQwMzQ9PidMJywKNjQwMzU9PidMJywKNjQwMzY9PidMJywKNjQwMzc9PidMJywKNjQwMzg9PidMJywKNjQwMzk9PidMJywKNjQwNDA9PidMJywKNjQwNDE9PidMJywKNjQwNDI9PidMJywKNjQwNDM9PidMJywKNjQwNDQ9PidMJywKNjQwNDU9PidMJywKNjQwNDg9PidMJywKNjQwNDk9PidMJywKNjQwNTA9PidMJywKNjQwNTE9PidMJywKNjQwNTI9PidMJywKNjQwNTM9PidMJywKNjQwNTQ9PidMJywKNjQwNTU9PidMJywKNjQwNTY9PidMJywKNjQwNTc9PidMJywKNjQwNTg9PidMJywKNjQwNTk9PidMJywKNjQwNjA9PidMJywKNjQwNjE9PidMJywKNjQwNjI9PidMJywKNjQwNjM9PidMJywKNjQwNjQ9PidMJywKNjQwNjU9PidMJywKNjQwNjY9PidMJywKNjQwNjc9PidMJywKNjQwNjg9PidMJywKNjQwNjk9PidMJywKNjQwNzA9PidMJywKNjQwNzE9PidMJywKNjQwNzI9PidMJywKNjQwNzM9PidMJywKNjQwNzQ9PidMJywKNjQwNzU9PidMJywKNjQwNzY9PidMJywKNjQwNzc9PidMJywKNjQwNzg9PidMJywKNjQwNzk9PidMJywKNjQwODA9PidMJywKNjQwODE9PidMJywKNjQwODI9PidMJywKNjQwODM9PidMJywKNjQwODQ9PidMJywKNjQwODU9PidMJywKNjQwODY9PidMJywKNjQwODc9PidMJywKNjQwODg9PidMJywKNjQwODk9PidMJywKNjQwOTA9PidMJywKNjQwOTE9PidMJywKNjQwOTI9PidMJywKNjQwOTM9PidMJywKNjQwOTQ9PidMJywKNjQwOTU9PidMJywKNjQwOTY9PidMJywKNjQwOTc9PidMJywKNjQwOTg9PidMJywKNjQwOTk9PidMJywKNjQxMDA9PidMJywKNjQxMDE9PidMJywKNjQxMDI9PidMJywKNjQxMDM9PidMJywKNjQxMDQ9PidMJywKNjQxMDU9PidMJywKNjQxMDY9PidMJywKNjQxMTI9PidMJywKNjQxMTM9PidMJywKNjQxMTQ9PidMJywKNjQxMTU9PidMJywKNjQxMTY9PidMJywKNjQxMTc9PidMJywKNjQxMTg9PidMJywKNjQxMTk9PidMJywKNjQxMjA9PidMJywKNjQxMjE9PidMJywKNjQxMjI9PidMJywKNjQxMjM9PidMJywKNjQxMjQ9PidMJywKNjQxMjU9PidMJywKNjQxMjY9PidMJywKNjQxMjc9PidMJywKNjQxMjg9PidMJywKNjQxMjk9PidMJywKNjQxMzA9PidMJywKNjQxMzE9PidMJywKNjQxMzI9PidMJywKNjQxMzM9PidMJywKNjQxMzQ9PidMJywKNjQxMzU9PidMJywKNjQxMzY9PidMJywKNjQxMzc9PidMJywKNjQxMzg9PidMJywKNjQxMzk9PidMJywKNjQxNDA9PidMJywKNjQxNDE9PidMJywKNjQxNDI9PidMJywKNjQxNDM9PidMJywKNjQxNDQ9PidMJywKNjQxNDU9PidMJywKNjQxNDY9PidMJywKNjQxNDc9PidMJywKNjQxNDg9PidMJywKNjQxNDk9PidMJywKNjQxNTA9PidMJywKNjQxNTE9PidMJywKNjQxNTI9PidMJywKNjQxNTM9PidMJywKNjQxNTQ9PidMJywKNjQxNTU9PidMJywKNjQxNTY9PidMJywKNjQxNTc9PidMJywKNjQxNTg9PidMJywKNjQxNTk9PidMJywKNjQxNjA9PidMJywKNjQxNjE9PidMJywKNjQxNjI9PidMJywKNjQxNjM9PidMJywKNjQxNjQ9PidMJywKNjQxNjU9PidMJywKNjQxNjY9PidMJywKNjQxNjc9PidMJywKNjQxNjg9PidMJywKNjQxNjk9PidMJywKNjQxNzA9PidMJywKNjQxNzE9PidMJywKNjQxNzI9PidMJywKNjQxNzM9PidMJywKNjQxNzQ9PidMJywKNjQxNzU9PidMJywKNjQxNzY9PidMJywKNjQxNzc9PidMJywKNjQxNzg9PidMJywKNjQxNzk9PidMJywKNjQxODA9PidMJywKNjQxODE9PidMJywKNjQxODI9PidMJywKNjQxODM9PidMJywKNjQxODQ9PidMJywKNjQxODU9PidMJywKNjQxODY9PidMJywKNjQxODc9PidMJywKNjQxODg9PidMJywKNjQxODk9PidMJywKNjQxOTA9PidMJywKNjQxOTE9PidMJywKNjQxOTI9PidMJywKNjQxOTM9PidMJywKNjQxOTQ9PidMJywKNjQxOTU9PidMJywKNjQxOTY9PidMJywKNjQxOTc9PidMJywKNjQxOTg9PidMJywKNjQxOTk9PidMJywKNjQyMDA9PidMJywKNjQyMDE9PidMJywKNjQyMDI9PidMJywKNjQyMDM9PidMJywKNjQyMDQ9PidMJywKNjQyMDU9PidMJywKNjQyMDY9PidMJywKNjQyMDc9PidMJywKNjQyMDg9PidMJywKNjQyMDk9PidMJywKNjQyMTA9PidMJywKNjQyMTE9PidMJywKNjQyMTI9PidMJywKNjQyMTM9PidMJywKNjQyMTQ9PidMJywKNjQyMTU9PidMJywKNjQyMTY9PidMJywKNjQyMTc9PidMJywKNjQyNTY9PidMJywKNjQyNTc9PidMJywKNjQyNTg9PidMJywKNjQyNTk9PidMJywKNjQyNjA9PidMJywKNjQyNjE9PidMJywKNjQyNjI9PidMJywKNjQyNzU9PidMJywKNjQyNzY9PidMJywKNjQyNzc9PidMJywKNjQyNzg9PidMJywKNjQyNzk9PidMJywKNjQyODU9PidSJywKNjQyODY9PidOU00nLAo2NDI4Nz0+J1InLAo2NDI4OD0+J1InLAo2NDI4OT0+J1InLAo2NDI5MD0+J1InLAo2NDI5MT0+J1InLAo2NDI5Mj0+J1InLAo2NDI5Mz0+J1InLAo2NDI5ND0+J1InLAo2NDI5NT0+J1InLAo2NDI5Nj0+J1InLAo2NDI5Nz0+J0VTJywKNjQyOTg9PidSJywKNjQyOTk9PidSJywKNjQzMDA9PidSJywKNjQzMDE9PidSJywKNjQzMDI9PidSJywKNjQzMDM9PidSJywKNjQzMDQ9PidSJywKNjQzMDU9PidSJywKNjQzMDY9PidSJywKNjQzMDc9PidSJywKNjQzMDg9PidSJywKNjQzMDk9PidSJywKNjQzMTA9PidSJywKNjQzMTI9PidSJywKNjQzMTM9PidSJywKNjQzMTQ9PidSJywKNjQzMTU9PidSJywKNjQzMTY9PidSJywKNjQzMTg9PidSJywKNjQzMjA9PidSJywKNjQzMjE9PidSJywKNjQzMjM9PidSJywKNjQzMjQ9PidSJywKNjQzMjY9PidSJywKNjQzMjc9PidSJywKNjQzMjg9PidSJywKNjQzMjk9PidSJywKNjQzMzA9PidSJywKNjQzMzE9PidSJywKNjQzMzI9PidSJywKNjQzMzM9PidSJywKNjQzMzQ9PidSJywKNjQzMzU9PidSJywKNjQzMzY9PidBTCcsCjY0MzM3PT4nQUwnLAo2NDMzOD0+J0FMJywKNjQzMzk9PidBTCcsCjY0MzQwPT4nQUwnLAo2NDM0MT0+J0FMJywKNjQzNDI9PidBTCcsCjY0MzQzPT4nQUwnLAo2NDM0ND0+J0FMJywKNjQzNDU9PidBTCcsCjY0MzQ2PT4nQUwnLAo2NDM0Nz0+J0FMJywKNjQzNDg9PidBTCcsCjY0MzQ5PT4nQUwnLAo2NDM1MD0+J0FMJywKNjQzNTE9PidBTCcsCjY0MzUyPT4nQUwnLAo2NDM1Mz0+J0FMJywKNjQzNTQ9PidBTCcsCjY0MzU1PT4nQUwnLAo2NDM1Nj0+J0FMJywKNjQzNTc9PidBTCcsCjY0MzU4PT4nQUwnLAo2NDM1OT0+J0FMJywKNjQzNjA9PidBTCcsCjY0MzYxPT4nQUwnLAo2NDM2Mj0+J0FMJywKNjQzNjM9PidBTCcsCjY0MzY0PT4nQUwnLAo2NDM2NT0+J0FMJywKNjQzNjY9PidBTCcsCjY0MzY3PT4nQUwnLAo2NDM2OD0+J0FMJywKNjQzNjk9PidBTCcsCjY0MzcwPT4nQUwnLAo2NDM3MT0+J0FMJywKNjQzNzI9PidBTCcsCjY0MzczPT4nQUwnLAo2NDM3ND0+J0FMJywKNjQzNzU9PidBTCcsCjY0Mzc2PT4nQUwnLAo2NDM3Nz0+J0FMJywKNjQzNzg9PidBTCcsCjY0Mzc5PT4nQUwnLAo2NDM4MD0+J0FMJywKNjQzODE9PidBTCcsCjY0MzgyPT4nQUwnLAo2NDM4Mz0+J0FMJywKNjQzODQ9PidBTCcsCjY0Mzg1PT4nQUwnLAo2NDM4Nj0+J0FMJywKNjQzODc9PidBTCcsCjY0Mzg4PT4nQUwnLAo2NDM4OT0+J0FMJywKNjQzOTA9PidBTCcsCjY0MzkxPT4nQUwnLAo2NDM5Mj0+J0FMJywKNjQzOTM9PidBTCcsCjY0Mzk0PT4nQUwnLAo2NDM5NT0+J0FMJywKNjQzOTY9PidBTCcsCjY0Mzk3PT4nQUwnLAo2NDM5OD0+J0FMJywKNjQzOTk9PidBTCcsCjY0NDAwPT4nQUwnLAo2NDQwMT0+J0FMJywKNjQ0MDI9PidBTCcsCjY0NDAzPT4nQUwnLAo2NDQwND0+J0FMJywKNjQ0MDU9PidBTCcsCjY0NDA2PT4nQUwnLAo2NDQwNz0+J0FMJywKNjQ0MDg9PidBTCcsCjY0NDA5PT4nQUwnLAo2NDQxMD0+J0FMJywKNjQ0MTE9PidBTCcsCjY0NDEyPT4nQUwnLAo2NDQxMz0+J0FMJywKNjQ0MTQ9PidBTCcsCjY0NDE1PT4nQUwnLAo2NDQxNj0+J0FMJywKNjQ0MTc9PidBTCcsCjY0NDE4PT4nQUwnLAo2NDQxOT0+J0FMJywKNjQ0MjA9PidBTCcsCjY0NDIxPT4nQUwnLAo2NDQyMj0+J0FMJywKNjQ0MjM9PidBTCcsCjY0NDI0PT4nQUwnLAo2NDQyNT0+J0FMJywKNjQ0MjY9PidBTCcsCjY0NDI3PT4nQUwnLAo2NDQyOD0+J0FMJywKNjQ0Mjk9PidBTCcsCjY0NDMwPT4nQUwnLAo2NDQzMT0+J0FMJywKNjQ0MzI9PidBTCcsCjY0NDMzPT4nQUwnLAo2NDQ2Nz0+J0FMJywKNjQ0Njg9PidBTCcsCjY0NDY5PT4nQUwnLAo2NDQ3MD0+J0FMJywKNjQ0NzE9PidBTCcsCjY0NDcyPT4nQUwnLAo2NDQ3Mz0+J0FMJywKNjQ0NzQ9PidBTCcsCjY0NDc1PT4nQUwnLAo2NDQ3Nj0+J0FMJywKNjQ0Nzc9PidBTCcsCjY0NDc4PT4nQUwnLAo2NDQ3OT0+J0FMJywKNjQ0ODA9PidBTCcsCjY0NDgxPT4nQUwnLAo2NDQ4Mj0+J0FMJywKNjQ0ODM9PidBTCcsCjY0NDg0PT4nQUwnLAo2NDQ4NT0+J0FMJywKNjQ0ODY9PidBTCcsCjY0NDg3PT4nQUwnLAo2NDQ4OD0+J0FMJywKNjQ0ODk9PidBTCcsCjY0NDkwPT4nQUwnLAo2NDQ5MT0+J0FMJywKNjQ0OTI9PidBTCcsCjY0NDkzPT4nQUwnLAo2NDQ5ND0+J0FMJywKNjQ0OTU9PidBTCcsCjY0NDk2PT4nQUwnLAo2NDQ5Nz0+J0FMJywKNjQ0OTg9PidBTCcsCjY0NDk5PT4nQUwnLAo2NDUwMD0+J0FMJywKNjQ1MDE9PidBTCcsCjY0NTAyPT4nQUwnLAo2NDUwMz0+J0FMJywKNjQ1MDQ9PidBTCcsCjY0NTA1PT4nQUwnLAo2NDUwNj0+J0FMJywKNjQ1MDc9PidBTCcsCjY0NTA4PT4nQUwnLAo2NDUwOT0+J0FMJywKNjQ1MTA9PidBTCcsCjY0NTExPT4nQUwnLAo2NDUxMj0+J0FMJywKNjQ1MTM9PidBTCcsCjY0NTE0PT4nQUwnLAo2NDUxNT0+J0FMJywKNjQ1MTY9PidBTCcsCjY0NTE3PT4nQUwnLAo2NDUxOD0+J0FMJywKNjQ1MTk9PidBTCcsCjY0NTIwPT4nQUwnLAo2NDUyMT0+J0FMJywKNjQ1MjI9PidBTCcsCjY0NTIzPT4nQUwnLAo2NDUyND0+J0FMJywKNjQ1MjU9PidBTCcsCjY0NTI2PT4nQUwnLAo2NDUyNz0+J0FMJywKNjQ1Mjg9PidBTCcsCjY0NTI5PT4nQUwnLAo2NDUzMD0+J0FMJywKNjQ1MzE9PidBTCcsCjY0NTMyPT4nQUwnLAo2NDUzMz0+J0FMJywKNjQ1MzQ9PidBTCcsCjY0NTM1PT4nQUwnLAo2NDUzNj0+J0FMJywKNjQ1Mzc9PidBTCcsCjY0NTM4PT4nQUwnLAo2NDUzOT0+J0FMJywKNjQ1NDA9PidBTCcsCjY0NTQxPT4nQUwnLAo2NDU0Mj0+J0FMJywKNjQ1NDM9PidBTCcsCjY0NTQ0PT4nQUwnLAo2NDU0NT0+J0FMJywKNjQ1NDY9PidBTCcsCjY0NTQ3PT4nQUwnLAo2NDU0OD0+J0FMJywKNjQ1NDk9PidBTCcsCjY0NTUwPT4nQUwnLAo2NDU1MT0+J0FMJywKNjQ1NTI9PidBTCcsCjY0NTUzPT4nQUwnLAo2NDU1ND0+J0FMJywKNjQ1NTU9PidBTCcsCjY0NTU2PT4nQUwnLAo2NDU1Nz0+J0FMJywKNjQ1NTg9PidBTCcsCjY0NTU5PT4nQUwnLAo2NDU2MD0+J0FMJywKNjQ1NjE9PidBTCcsCjY0NTYyPT4nQUwnLAo2NDU2Mz0+J0FMJywKNjQ1NjQ9PidBTCcsCjY0NTY1PT4nQUwnLAo2NDU2Nj0+J0FMJywKNjQ1Njc9PidBTCcsCjY0NTY4PT4nQUwnLAo2NDU2OT0+J0FMJywKNjQ1NzA9PidBTCcsCjY0NTcxPT4nQUwnLAo2NDU3Mj0+J0FMJywKNjQ1NzM9PidBTCcsCjY0NTc0PT4nQUwnLAo2NDU3NT0+J0FMJywKNjQ1NzY9PidBTCcsCjY0NTc3PT4nQUwnLAo2NDU3OD0+J0FMJywKNjQ1Nzk9PidBTCcsCjY0NTgwPT4nQUwnLAo2NDU4MT0+J0FMJywKNjQ1ODI9PidBTCcsCjY0NTgzPT4nQUwnLAo2NDU4ND0+J0FMJywKNjQ1ODU9PidBTCcsCjY0NTg2PT4nQUwnLAo2NDU4Nz0+J0FMJywKNjQ1ODg9PidBTCcsCjY0NTg5PT4nQUwnLAo2NDU5MD0+J0FMJywKNjQ1OTE9PidBTCcsCjY0NTkyPT4nQUwnLAo2NDU5Mz0+J0FMJywKNjQ1OTQ9PidBTCcsCjY0NTk1PT4nQUwnLAo2NDU5Nj0+J0FMJywKNjQ1OTc9PidBTCcsCjY0NTk4PT4nQUwnLAo2NDU5OT0+J0FMJywKNjQ2MDA9PidBTCcsCjY0NjAxPT4nQUwnLAo2NDYwMj0+J0FMJywKNjQ2MDM9PidBTCcsCjY0NjA0PT4nQUwnLAo2NDYwNT0+J0FMJywKNjQ2MDY9PidBTCcsCjY0NjA3PT4nQUwnLAo2NDYwOD0+J0FMJywKNjQ2MDk9PidBTCcsCjY0NjEwPT4nQUwnLAo2NDYxMT0+J0FMJywKNjQ2MTI9PidBTCcsCjY0NjEzPT4nQUwnLAo2NDYxND0+J0FMJywKNjQ2MTU9PidBTCcsCjY0NjE2PT4nQUwnLAo2NDYxNz0+J0FMJywKNjQ2MTg9PidBTCcsCjY0NjE5PT4nQUwnLAo2NDYyMD0+J0FMJywKNjQ2MjE9PidBTCcsCjY0NjIyPT4nQUwnLAo2NDYyMz0+J0FMJywKNjQ2MjQ9PidBTCcsCjY0NjI1PT4nQUwnLAo2NDYyNj0+J0FMJywKNjQ2Mjc9PidBTCcsCjY0NjI4PT4nQUwnLAo2NDYyOT0+J0FMJywKNjQ2MzA9PidBTCcsCjY0NjMxPT4nQUwnLAo2NDYzMj0+J0FMJywKNjQ2MzM9PidBTCcsCjY0NjM0PT4nQUwnLAo2NDYzNT0+J0FMJywKNjQ2MzY9PidBTCcsCjY0NjM3PT4nQUwnLAo2NDYzOD0+J0FMJywKNjQ2Mzk9PidBTCcsCjY0NjQwPT4nQUwnLAo2NDY0MT0+J0FMJywKNjQ2NDI9PidBTCcsCjY0NjQzPT4nQUwnLAo2NDY0ND0+J0FMJywKNjQ2NDU9PidBTCcsCjY0NjQ2PT4nQUwnLAo2NDY0Nz0+J0FMJywKNjQ2NDg9PidBTCcsCjY0NjQ5PT4nQUwnLAo2NDY1MD0+J0FMJywKNjQ2NTE9PidBTCcsCjY0NjUyPT4nQUwnLAo2NDY1Mz0+J0FMJywKNjQ2NTQ9PidBTCcsCjY0NjU1PT4nQUwnLAo2NDY1Nj0+J0FMJywKNjQ2NTc9PidBTCcsCjY0NjU4PT4nQUwnLAo2NDY1OT0+J0FMJywKNjQ2NjA9PidBTCcsCjY0NjYxPT4nQUwnLAo2NDY2Mj0+J0FMJywKNjQ2NjM9PidBTCcsCjY0NjY0PT4nQUwnLAo2NDY2NT0+J0FMJywKNjQ2NjY9PidBTCcsCjY0NjY3PT4nQUwnLAo2NDY2OD0+J0FMJywKNjQ2Njk9PidBTCcsCjY0NjcwPT4nQUwnLAo2NDY3MT0+J0FMJywKNjQ2NzI9PidBTCcsCjY0NjczPT4nQUwnLAo2NDY3ND0+J0FMJywKNjQ2NzU9PidBTCcsCjY0Njc2PT4nQUwnLAo2NDY3Nz0+J0FMJywKNjQ2Nzg9PidBTCcsCjY0Njc5PT4nQUwnLAo2NDY4MD0+J0FMJywKNjQ2ODE9PidBTCcsCjY0NjgyPT4nQUwnLAo2NDY4Mz0+J0FMJywKNjQ2ODQ9PidBTCcsCjY0Njg1PT4nQUwnLAo2NDY4Nj0+J0FMJywKNjQ2ODc9PidBTCcsCjY0Njg4PT4nQUwnLAo2NDY4OT0+J0FMJywKNjQ2OTA9PidBTCcsCjY0NjkxPT4nQUwnLAo2NDY5Mj0+J0FMJywKNjQ2OTM9PidBTCcsCjY0Njk0PT4nQUwnLAo2NDY5NT0+J0FMJywKNjQ2OTY9PidBTCcsCjY0Njk3PT4nQUwnLAo2NDY5OD0+J0FMJywKNjQ2OTk9PidBTCcsCjY0NzAwPT4nQUwnLAo2NDcwMT0+J0FMJywKNjQ3MDI9PidBTCcsCjY0NzAzPT4nQUwnLAo2NDcwND0+J0FMJywKNjQ3MDU9PidBTCcsCjY0NzA2PT4nQUwnLAo2NDcwNz0+J0FMJywKNjQ3MDg9PidBTCcsCjY0NzA5PT4nQUwnLAo2NDcxMD0+J0FMJywKNjQ3MTE9PidBTCcsCjY0NzEyPT4nQUwnLAo2NDcxMz0+J0FMJywKNjQ3MTQ9PidBTCcsCjY0NzE1PT4nQUwnLAo2NDcxNj0+J0FMJywKNjQ3MTc9PidBTCcsCjY0NzE4PT4nQUwnLAo2NDcxOT0+J0FMJywKNjQ3MjA9PidBTCcsCjY0NzIxPT4nQUwnLAo2NDcyMj0+J0FMJywKNjQ3MjM9PidBTCcsCjY0NzI0PT4nQUwnLAo2NDcyNT0+J0FMJywKNjQ3MjY9PidBTCcsCjY0NzI3PT4nQUwnLAo2NDcyOD0+J0FMJywKNjQ3Mjk9PidBTCcsCjY0NzMwPT4nQUwnLAo2NDczMT0+J0FMJywKNjQ3MzI9PidBTCcsCjY0NzMzPT4nQUwnLAo2NDczND0+J0FMJywKNjQ3MzU9PidBTCcsCjY0NzM2PT4nQUwnLAo2NDczNz0+J0FMJywKNjQ3Mzg9PidBTCcsCjY0NzM5PT4nQUwnLAo2NDc0MD0+J0FMJywKNjQ3NDE9PidBTCcsCjY0NzQyPT4nQUwnLAo2NDc0Mz0+J0FMJywKNjQ3NDQ9PidBTCcsCjY0NzQ1PT4nQUwnLAo2NDc0Nj0+J0FMJywKNjQ3NDc9PidBTCcsCjY0NzQ4PT4nQUwnLAo2NDc0OT0+J0FMJywKNjQ3NTA9PidBTCcsCjY0NzUxPT4nQUwnLAo2NDc1Mj0+J0FMJywKNjQ3NTM9PidBTCcsCjY0NzU0PT4nQUwnLAo2NDc1NT0+J0FMJywKNjQ3NTY9PidBTCcsCjY0NzU3PT4nQUwnLAo2NDc1OD0+J0FMJywKNjQ3NTk9PidBTCcsCjY0NzYwPT4nQUwnLAo2NDc2MT0+J0FMJywKNjQ3NjI9PidBTCcsCjY0NzYzPT4nQUwnLAo2NDc2ND0+J0FMJywKNjQ3NjU9PidBTCcsCjY0NzY2PT4nQUwnLAo2NDc2Nz0+J0FMJywKNjQ3Njg9PidBTCcsCjY0NzY5PT4nQUwnLAo2NDc3MD0+J0FMJywKNjQ3NzE9PidBTCcsCjY0NzcyPT4nQUwnLAo2NDc3Mz0+J0FMJywKNjQ3NzQ9PidBTCcsCjY0Nzc1PT4nQUwnLAo2NDc3Nj0+J0FMJywKNjQ3Nzc9PidBTCcsCjY0Nzc4PT4nQUwnLAo2NDc3OT0+J0FMJywKNjQ3ODA9PidBTCcsCjY0NzgxPT4nQUwnLAo2NDc4Mj0+J0FMJywKNjQ3ODM9PidBTCcsCjY0Nzg0PT4nQUwnLAo2NDc4NT0+J0FMJywKNjQ3ODY9PidBTCcsCjY0Nzg3PT4nQUwnLAo2NDc4OD0+J0FMJywKNjQ3ODk9PidBTCcsCjY0NzkwPT4nQUwnLAo2NDc5MT0+J0FMJywKNjQ3OTI9PidBTCcsCjY0NzkzPT4nQUwnLAo2NDc5ND0+J0FMJywKNjQ3OTU9PidBTCcsCjY0Nzk2PT4nQUwnLAo2NDc5Nz0+J0FMJywKNjQ3OTg9PidBTCcsCjY0Nzk5PT4nQUwnLAo2NDgwMD0+J0FMJywKNjQ4MDE9PidBTCcsCjY0ODAyPT4nQUwnLAo2NDgwMz0+J0FMJywKNjQ4MDQ9PidBTCcsCjY0ODA1PT4nQUwnLAo2NDgwNj0+J0FMJywKNjQ4MDc9PidBTCcsCjY0ODA4PT4nQUwnLAo2NDgwOT0+J0FMJywKNjQ4MTA9PidBTCcsCjY0ODExPT4nQUwnLAo2NDgxMj0+J0FMJywKNjQ4MTM9PidBTCcsCjY0ODE0PT4nQUwnLAo2NDgxNT0+J0FMJywKNjQ4MTY9PidBTCcsCjY0ODE3PT4nQUwnLAo2NDgxOD0+J0FMJywKNjQ4MTk9PidBTCcsCjY0ODIwPT4nQUwnLAo2NDgyMT0+J0FMJywKNjQ4MjI9PidBTCcsCjY0ODIzPT4nQUwnLAo2NDgyND0+J0FMJywKNjQ4MjU9PidBTCcsCjY0ODI2PT4nQUwnLAo2NDgyNz0+J0FMJywKNjQ4Mjg9PidBTCcsCjY0ODI5PT4nQUwnLAo2NDgzMD0+J09OJywKNjQ4MzE9PidPTicsCjY0ODQ4PT4nQUwnLAo2NDg0OT0+J0FMJywKNjQ4NTA9PidBTCcsCjY0ODUxPT4nQUwnLAo2NDg1Mj0+J0FMJywKNjQ4NTM9PidBTCcsCjY0ODU0PT4nQUwnLAo2NDg1NT0+J0FMJywKNjQ4NTY9PidBTCcsCjY0ODU3PT4nQUwnLAo2NDg1OD0+J0FMJywKNjQ4NTk9PidBTCcsCjY0ODYwPT4nQUwnLAo2NDg2MT0+J0FMJywKNjQ4NjI9PidBTCcsCjY0ODYzPT4nQUwnLAo2NDg2ND0+J0FMJywKNjQ4NjU9PidBTCcsCjY0ODY2PT4nQUwnLAo2NDg2Nz0+J0FMJywKNjQ4Njg9PidBTCcsCjY0ODY5PT4nQUwnLAo2NDg3MD0+J0FMJywKNjQ4NzE9PidBTCcsCjY0ODcyPT4nQUwnLAo2NDg3Mz0+J0FMJywKNjQ4NzQ9PidBTCcsCjY0ODc1PT4nQUwnLAo2NDg3Nj0+J0FMJywKNjQ4Nzc9PidBTCcsCjY0ODc4PT4nQUwnLAo2NDg3OT0+J0FMJywKNjQ4ODA9PidBTCcsCjY0ODgxPT4nQUwnLAo2NDg4Mj0+J0FMJywKNjQ4ODM9PidBTCcsCjY0ODg0PT4nQUwnLAo2NDg4NT0+J0FMJywKNjQ4ODY9PidBTCcsCjY0ODg3PT4nQUwnLAo2NDg4OD0+J0FMJywKNjQ4ODk9PidBTCcsCjY0ODkwPT4nQUwnLAo2NDg5MT0+J0FMJywKNjQ4OTI9PidBTCcsCjY0ODkzPT4nQUwnLAo2NDg5ND0+J0FMJywKNjQ4OTU9PidBTCcsCjY0ODk2PT4nQUwnLAo2NDg5Nz0+J0FMJywKNjQ4OTg9PidBTCcsCjY0ODk5PT4nQUwnLAo2NDkwMD0+J0FMJywKNjQ5MDE9PidBTCcsCjY0OTAyPT4nQUwnLAo2NDkwMz0+J0FMJywKNjQ5MDQ9PidBTCcsCjY0OTA1PT4nQUwnLAo2NDkwNj0+J0FMJywKNjQ5MDc9PidBTCcsCjY0OTA4PT4nQUwnLAo2NDkwOT0+J0FMJywKNjQ5MTA9PidBTCcsCjY0OTExPT4nQUwnLAo2NDkxND0+J0FMJywKNjQ5MTU9PidBTCcsCjY0OTE2PT4nQUwnLAo2NDkxNz0+J0FMJywKNjQ5MTg9PidBTCcsCjY0OTE5PT4nQUwnLAo2NDkyMD0+J0FMJywKNjQ5MjE9PidBTCcsCjY0OTIyPT4nQUwnLAo2NDkyMz0+J0FMJywKNjQ5MjQ9PidBTCcsCjY0OTI1PT4nQUwnLAo2NDkyNj0+J0FMJywKNjQ5Mjc9PidBTCcsCjY0OTI4PT4nQUwnLAo2NDkyOT0+J0FMJywKNjQ5MzA9PidBTCcsCjY0OTMxPT4nQUwnLAo2NDkzMj0+J0FMJywKNjQ5MzM9PidBTCcsCjY0OTM0PT4nQUwnLAo2NDkzNT0+J0FMJywKNjQ5MzY9PidBTCcsCjY0OTM3PT4nQUwnLAo2NDkzOD0+J0FMJywKNjQ5Mzk9PidBTCcsCjY0OTQwPT4nQUwnLAo2NDk0MT0+J0FMJywKNjQ5NDI9PidBTCcsCjY0OTQzPT4nQUwnLAo2NDk0ND0+J0FMJywKNjQ5NDU9PidBTCcsCjY0OTQ2PT4nQUwnLAo2NDk0Nz0+J0FMJywKNjQ5NDg9PidBTCcsCjY0OTQ5PT4nQUwnLAo2NDk1MD0+J0FMJywKNjQ5NTE9PidBTCcsCjY0OTUyPT4nQUwnLAo2NDk1Mz0+J0FMJywKNjQ5NTQ9PidBTCcsCjY0OTU1PT4nQUwnLAo2NDk1Nj0+J0FMJywKNjQ5NTc9PidBTCcsCjY0OTU4PT4nQUwnLAo2NDk1OT0+J0FMJywKNjQ5NjA9PidBTCcsCjY0OTYxPT4nQUwnLAo2NDk2Mj0+J0FMJywKNjQ5NjM9PidBTCcsCjY0OTY0PT4nQUwnLAo2NDk2NT0+J0FMJywKNjQ5NjY9PidBTCcsCjY0OTY3PT4nQUwnLAo2NTAwOD0+J0FMJywKNjUwMDk9PidBTCcsCjY1MDEwPT4nQUwnLAo2NTAxMT0+J0FMJywKNjUwMTI9PidBTCcsCjY1MDEzPT4nQUwnLAo2NTAxND0+J0FMJywKNjUwMTU9PidBTCcsCjY1MDE2PT4nQUwnLAo2NTAxNz0+J0FMJywKNjUwMTg9PidBTCcsCjY1MDE5PT4nQUwnLAo2NTAyMD0+J0FMJywKNjUwMjE9PidPTicsCjY1MDI0PT4nTlNNJywKNjUwMjU9PidOU00nLAo2NTAyNj0+J05TTScsCjY1MDI3PT4nTlNNJywKNjUwMjg9PidOU00nLAo2NTAyOT0+J05TTScsCjY1MDMwPT4nTlNNJywKNjUwMzE9PidOU00nLAo2NTAzMj0+J05TTScsCjY1MDMzPT4nTlNNJywKNjUwMzQ9PidOU00nLAo2NTAzNT0+J05TTScsCjY1MDM2PT4nTlNNJywKNjUwMzc9PidOU00nLAo2NTAzOD0+J05TTScsCjY1MDM5PT4nTlNNJywKNjUwNDA9PidPTicsCjY1MDQxPT4nT04nLAo2NTA0Mj0+J09OJywKNjUwNDM9PidPTicsCjY1MDQ0PT4nT04nLAo2NTA0NT0+J09OJywKNjUwNDY9PidPTicsCjY1MDQ3PT4nT04nLAo2NTA0OD0+J09OJywKNjUwNDk9PidPTicsCjY1MDU2PT4nTlNNJywKNjUwNTc9PidOU00nLAo2NTA1OD0+J05TTScsCjY1MDU5PT4nTlNNJywKNjUwNzI9PidPTicsCjY1MDczPT4nT04nLAo2NTA3ND0+J09OJywKNjUwNzU9PidPTicsCjY1MDc2PT4nT04nLAo2NTA3Nz0+J09OJywKNjUwNzg9PidPTicsCjY1MDc5PT4nT04nLAo2NTA4MD0+J09OJywKNjUwODE9PidPTicsCjY1MDgyPT4nT04nLAo2NTA4Mz0+J09OJywKNjUwODQ9PidPTicsCjY1MDg1PT4nT04nLAo2NTA4Nj0+J09OJywKNjUwODc9PidPTicsCjY1MDg4PT4nT04nLAo2NTA4OT0+J09OJywKNjUwOTA9PidPTicsCjY1MDkxPT4nT04nLAo2NTA5Mj0+J09OJywKNjUwOTM9PidPTicsCjY1MDk0PT4nT04nLAo2NTA5NT0+J09OJywKNjUwOTY9PidPTicsCjY1MDk3PT4nT04nLAo2NTA5OD0+J09OJywKNjUwOTk9PidPTicsCjY1MTAwPT4nT04nLAo2NTEwMT0+J09OJywKNjUxMDI9PidPTicsCjY1MTAzPT4nT04nLAo2NTEwND0+J0NTJywKNjUxMDU9PidPTicsCjY1MTA2PT4nQ1MnLAo2NTEwOD0+J09OJywKNjUxMDk9PidDUycsCjY1MTEwPT4nT04nLAo2NTExMT0+J09OJywKNjUxMTI9PidPTicsCjY1MTEzPT4nT04nLAo2NTExND0+J09OJywKNjUxMTU9PidPTicsCjY1MTE2PT4nT04nLAo2NTExNz0+J09OJywKNjUxMTg9PidPTicsCjY1MTE5PT4nRVQnLAo2NTEyMD0+J09OJywKNjUxMjE9PidPTicsCjY1MTIyPT4nRVMnLAo2NTEyMz0+J0VTJywKNjUxMjQ9PidPTicsCjY1MTI1PT4nT04nLAo2NTEyNj0+J09OJywKNjUxMjg9PidPTicsCjY1MTI5PT4nRVQnLAo2NTEzMD0+J0VUJywKNjUxMzE9PidPTicsCjY1MTM2PT4nQUwnLAo2NTEzNz0+J0FMJywKNjUxMzg9PidBTCcsCjY1MTM5PT4nQUwnLAo2NTE0MD0+J0FMJywKNjUxNDI9PidBTCcsCjY1MTQzPT4nQUwnLAo2NTE0ND0+J0FMJywKNjUxNDU9PidBTCcsCjY1MTQ2PT4nQUwnLAo2NTE0Nz0+J0FMJywKNjUxNDg9PidBTCcsCjY1MTQ5PT4nQUwnLAo2NTE1MD0+J0FMJywKNjUxNTE9PidBTCcsCjY1MTUyPT4nQUwnLAo2NTE1Mz0+J0FMJywKNjUxNTQ9PidBTCcsCjY1MTU1PT4nQUwnLAo2NTE1Nj0+J0FMJywKNjUxNTc9PidBTCcsCjY1MTU4PT4nQUwnLAo2NTE1OT0+J0FMJywKNjUxNjA9PidBTCcsCjY1MTYxPT4nQUwnLAo2NTE2Mj0+J0FMJywKNjUxNjM9PidBTCcsCjY1MTY0PT4nQUwnLAo2NTE2NT0+J0FMJywKNjUxNjY9PidBTCcsCjY1MTY3PT4nQUwnLAo2NTE2OD0+J0FMJywKNjUxNjk9PidBTCcsCjY1MTcwPT4nQUwnLAo2NTE3MT0+J0FMJywKNjUxNzI9PidBTCcsCjY1MTczPT4nQUwnLAo2NTE3ND0+J0FMJywKNjUxNzU9PidBTCcsCjY1MTc2PT4nQUwnLAo2NTE3Nz0+J0FMJywKNjUxNzg9PidBTCcsCjY1MTc5PT4nQUwnLAo2NTE4MD0+J0FMJywKNjUxODE9PidBTCcsCjY1MTgyPT4nQUwnLAo2NTE4Mz0+J0FMJywKNjUxODQ9PidBTCcsCjY1MTg1PT4nQUwnLAo2NTE4Nj0+J0FMJywKNjUxODc9PidBTCcsCjY1MTg4PT4nQUwnLAo2NTE4OT0+J0FMJywKNjUxOTA9PidBTCcsCjY1MTkxPT4nQUwnLAo2NTE5Mj0+J0FMJywKNjUxOTM9PidBTCcsCjY1MTk0PT4nQUwnLAo2NTE5NT0+J0FMJywKNjUxOTY9PidBTCcsCjY1MTk3PT4nQUwnLAo2NTE5OD0+J0FMJywKNjUxOTk9PidBTCcsCjY1MjAwPT4nQUwnLAo2NTIwMT0+J0FMJywKNjUyMDI9PidBTCcsCjY1MjAzPT4nQUwnLAo2NTIwND0+J0FMJywKNjUyMDU9PidBTCcsCjY1MjA2PT4nQUwnLAo2NTIwNz0+J0FMJywKNjUyMDg9PidBTCcsCjY1MjA5PT4nQUwnLAo2NTIxMD0+J0FMJywKNjUyMTE9PidBTCcsCjY1MjEyPT4nQUwnLAo2NTIxMz0+J0FMJywKNjUyMTQ9PidBTCcsCjY1MjE1PT4nQUwnLAo2NTIxNj0+J0FMJywKNjUyMTc9PidBTCcsCjY1MjE4PT4nQUwnLAo2NTIxOT0+J0FMJywKNjUyMjA9PidBTCcsCjY1MjIxPT4nQUwnLAo2NTIyMj0+J0FMJywKNjUyMjM9PidBTCcsCjY1MjI0PT4nQUwnLAo2NTIyNT0+J0FMJywKNjUyMjY9PidBTCcsCjY1MjI3PT4nQUwnLAo2NTIyOD0+J0FMJywKNjUyMjk9PidBTCcsCjY1MjMwPT4nQUwnLAo2NTIzMT0+J0FMJywKNjUyMzI9PidBTCcsCjY1MjMzPT4nQUwnLAo2NTIzND0+J0FMJywKNjUyMzU9PidBTCcsCjY1MjM2PT4nQUwnLAo2NTIzNz0+J0FMJywKNjUyMzg9PidBTCcsCjY1MjM5PT4nQUwnLAo2NTI0MD0+J0FMJywKNjUyNDE9PidBTCcsCjY1MjQyPT4nQUwnLAo2NTI0Mz0+J0FMJywKNjUyNDQ9PidBTCcsCjY1MjQ1PT4nQUwnLAo2NTI0Nj0+J0FMJywKNjUyNDc9PidBTCcsCjY1MjQ4PT4nQUwnLAo2NTI0OT0+J0FMJywKNjUyNTA9PidBTCcsCjY1MjUxPT4nQUwnLAo2NTI1Mj0+J0FMJywKNjUyNTM9PidBTCcsCjY1MjU0PT4nQUwnLAo2NTI1NT0+J0FMJywKNjUyNTY9PidBTCcsCjY1MjU3PT4nQUwnLAo2NTI1OD0+J0FMJywKNjUyNTk9PidBTCcsCjY1MjYwPT4nQUwnLAo2NTI2MT0+J0FMJywKNjUyNjI9PidBTCcsCjY1MjYzPT4nQUwnLAo2NTI2ND0+J0FMJywKNjUyNjU9PidBTCcsCjY1MjY2PT4nQUwnLAo2NTI2Nz0+J0FMJywKNjUyNjg9PidBTCcsCjY1MjY5PT4nQUwnLAo2NTI3MD0+J0FMJywKNjUyNzE9PidBTCcsCjY1MjcyPT4nQUwnLAo2NTI3Mz0+J0FMJywKNjUyNzQ9PidBTCcsCjY1Mjc1PT4nQUwnLAo2NTI3Nj0+J0FMJywKNjUyNzk9PidCTicsCjY1MjgxPT4nT04nLAo2NTI4Mj0+J09OJywKNjUyODM9PidFVCcsCjY1Mjg0PT4nRVQnLAo2NTI4NT0+J0VUJywKNjUyODY9PidPTicsCjY1Mjg3PT4nT04nLAo2NTI4OD0+J09OJywKNjUyODk9PidPTicsCjY1MjkwPT4nT04nLAo2NTI5MT0+J0VTJywKNjUyOTI9PidDUycsCjY1MjkzPT4nRVMnLAo2NTI5ND0+J0NTJywKNjUyOTU9PidDUycsCjY1Mjk2PT4nRU4nLAo2NTI5Nz0+J0VOJywKNjUyOTg9PidFTicsCjY1Mjk5PT4nRU4nLAo2NTMwMD0+J0VOJywKNjUzMDE9PidFTicsCjY1MzAyPT4nRU4nLAo2NTMwMz0+J0VOJywKNjUzMDQ9PidFTicsCjY1MzA1PT4nRU4nLAo2NTMwNj0+J0NTJywKNjUzMDc9PidPTicsCjY1MzA4PT4nT04nLAo2NTMwOT0+J09OJywKNjUzMTA9PidPTicsCjY1MzExPT4nT04nLAo2NTMxMj0+J09OJywKNjUzMTM9PidMJywKNjUzMTQ9PidMJywKNjUzMTU9PidMJywKNjUzMTY9PidMJywKNjUzMTc9PidMJywKNjUzMTg9PidMJywKNjUzMTk9PidMJywKNjUzMjA9PidMJywKNjUzMjE9PidMJywKNjUzMjI9PidMJywKNjUzMjM9PidMJywKNjUzMjQ9PidMJywKNjUzMjU9PidMJywKNjUzMjY9PidMJywKNjUzMjc9PidMJywKNjUzMjg9PidMJywKNjUzMjk9PidMJywKNjUzMzA9PidMJywKNjUzMzE9PidMJywKNjUzMzI9PidMJywKNjUzMzM9PidMJywKNjUzMzQ9PidMJywKNjUzMzU9PidMJywKNjUzMzY9PidMJywKNjUzMzc9PidMJywKNjUzMzg9PidMJywKNjUzMzk9PidPTicsCjY1MzQwPT4nT04nLAo2NTM0MT0+J09OJywKNjUzNDI9PidPTicsCjY1MzQzPT4nT04nLAo2NTM0ND0+J09OJywKNjUzNDU9PidMJywKNjUzNDY9PidMJywKNjUzNDc9PidMJywKNjUzNDg9PidMJywKNjUzNDk9PidMJywKNjUzNTA9PidMJywKNjUzNTE9PidMJywKNjUzNTI9PidMJywKNjUzNTM9PidMJywKNjUzNTQ9PidMJywKNjUzNTU9PidMJywKNjUzNTY9PidMJywKNjUzNTc9PidMJywKNjUzNTg9PidMJywKNjUzNTk9PidMJywKNjUzNjA9PidMJywKNjUzNjE9PidMJywKNjUzNjI9PidMJywKNjUzNjM9PidMJywKNjUzNjQ9PidMJywKNjUzNjU9PidMJywKNjUzNjY9PidMJywKNjUzNjc9PidMJywKNjUzNjg9PidMJywKNjUzNjk9PidMJywKNjUzNzA9PidMJywKNjUzNzE9PidPTicsCjY1MzcyPT4nT04nLAo2NTM3Mz0+J09OJywKNjUzNzQ9PidPTicsCjY1Mzc1PT4nT04nLAo2NTM3Nj0+J09OJywKNjUzNzc9PidPTicsCjY1Mzc4PT4nT04nLAo2NTM3OT0+J09OJywKNjUzODA9PidPTicsCjY1MzgxPT4nT04nLAo2NTM4Mj0+J0wnLAo2NTM4Mz0+J0wnLAo2NTM4ND0+J0wnLAo2NTM4NT0+J0wnLAo2NTM4Nj0+J0wnLAo2NTM4Nz0+J0wnLAo2NTM4OD0+J0wnLAo2NTM4OT0+J0wnLAo2NTM5MD0+J0wnLAo2NTM5MT0+J0wnLAo2NTM5Mj0+J0wnLAo2NTM5Mz0+J0wnLAo2NTM5ND0+J0wnLAo2NTM5NT0+J0wnLAo2NTM5Nj0+J0wnLAo2NTM5Nz0+J0wnLAo2NTM5OD0+J0wnLAo2NTM5OT0+J0wnLAo2NTQwMD0+J0wnLAo2NTQwMT0+J0wnLAo2NTQwMj0+J0wnLAo2NTQwMz0+J0wnLAo2NTQwND0+J0wnLAo2NTQwNT0+J0wnLAo2NTQwNj0+J0wnLAo2NTQwNz0+J0wnLAo2NTQwOD0+J0wnLAo2NTQwOT0+J0wnLAo2NTQxMD0+J0wnLAo2NTQxMT0+J0wnLAo2NTQxMj0+J0wnLAo2NTQxMz0+J0wnLAo2NTQxND0+J0wnLAo2NTQxNT0+J0wnLAo2NTQxNj0+J0wnLAo2NTQxNz0+J0wnLAo2NTQxOD0+J0wnLAo2NTQxOT0+J0wnLAo2NTQyMD0+J0wnLAo2NTQyMT0+J0wnLAo2NTQyMj0+J0wnLAo2NTQyMz0+J0wnLAo2NTQyND0+J0wnLAo2NTQyNT0+J0wnLAo2NTQyNj0+J0wnLAo2NTQyNz0+J0wnLAo2NTQyOD0+J0wnLAo2NTQyOT0+J0wnLAo2NTQzMD0+J0wnLAo2NTQzMT0+J0wnLAo2NTQzMj0+J0wnLAo2NTQzMz0+J0wnLAo2NTQzND0+J0wnLAo2NTQzNT0+J0wnLAo2NTQzNj0+J0wnLAo2NTQzNz0+J0wnLAo2NTQzOD0+J0wnLAo2NTQzOT0+J0wnLAo2NTQ0MD0+J0wnLAo2NTQ0MT0+J0wnLAo2NTQ0Mj0+J0wnLAo2NTQ0Mz0+J0wnLAo2NTQ0ND0+J0wnLAo2NTQ0NT0+J0wnLAo2NTQ0Nj0+J0wnLAo2NTQ0Nz0+J0wnLAo2NTQ0OD0+J0wnLAo2NTQ0OT0+J0wnLAo2NTQ1MD0+J0wnLAo2NTQ1MT0+J0wnLAo2NTQ1Mj0+J0wnLAo2NTQ1Mz0+J0wnLAo2NTQ1ND0+J0wnLAo2NTQ1NT0+J0wnLAo2NTQ1Nj0+J0wnLAo2NTQ1Nz0+J0wnLAo2NTQ1OD0+J0wnLAo2NTQ1OT0+J0wnLAo2NTQ2MD0+J0wnLAo2NTQ2MT0+J0wnLAo2NTQ2Mj0+J0wnLAo2NTQ2Mz0+J0wnLAo2NTQ2ND0+J0wnLAo2NTQ2NT0+J0wnLAo2NTQ2Nj0+J0wnLAo2NTQ2Nz0+J0wnLAo2NTQ2OD0+J0wnLAo2NTQ2OT0+J0wnLAo2NTQ3MD0+J0wnLAo2NTQ3ND0+J0wnLAo2NTQ3NT0+J0wnLAo2NTQ3Nj0+J0wnLAo2NTQ3Nz0+J0wnLAo2NTQ3OD0+J0wnLAo2NTQ3OT0+J0wnLAo2NTQ4Mj0+J0wnLAo2NTQ4Mz0+J0wnLAo2NTQ4ND0+J0wnLAo2NTQ4NT0+J0wnLAo2NTQ4Nj0+J0wnLAo2NTQ4Nz0+J0wnLAo2NTQ5MD0+J0wnLAo2NTQ5MT0+J0wnLAo2NTQ5Mj0+J0wnLAo2NTQ5Mz0+J0wnLAo2NTQ5ND0+J0wnLAo2NTQ5NT0+J0wnLAo2NTQ5OD0+J0wnLAo2NTQ5OT0+J0wnLAo2NTUwMD0+J0wnLAo2NTUwND0+J0VUJywKNjU1MDU9PidFVCcsCjY1NTA2PT4nT04nLAo2NTUwNz0+J09OJywKNjU1MDg9PidPTicsCjY1NTA5PT4nRVQnLAo2NTUxMD0+J0VUJywKNjU1MTI9PidPTicsCjY1NTEzPT4nT04nLAo2NTUxND0+J09OJywKNjU1MTU9PidPTicsCjY1NTE2PT4nT04nLAo2NTUxNz0+J09OJywKNjU1MTg9PidPTicsCjY1NTI5PT4nT04nLAo2NTUzMD0+J09OJywKNjU1MzE9PidPTicsCjY1NTMyPT4nT04nLAo2NTUzMz0+J09OJywKNjU1MzY9PidMJywKNjU1Mzc9PidMJywKNjU1Mzg9PidMJywKNjU1Mzk9PidMJywKNjU1NDA9PidMJywKNjU1NDE9PidMJywKNjU1NDI9PidMJywKNjU1NDM9PidMJywKNjU1NDQ9PidMJywKNjU1NDU9PidMJywKNjU1NDY9PidMJywKNjU1NDc9PidMJywKNjU1NDk9PidMJywKNjU1NTA9PidMJywKNjU1NTE9PidMJywKNjU1NTI9PidMJywKNjU1NTM9PidMJywKNjU1NTQ9PidMJywKNjU1NTU9PidMJywKNjU1NTY9PidMJywKNjU1NTc9PidMJywKNjU1NTg9PidMJywKNjU1NTk9PidMJywKNjU1NjA9PidMJywKNjU1NjE9PidMJywKNjU1NjI9PidMJywKNjU1NjM9PidMJywKNjU1NjQ9PidMJywKNjU1NjU9PidMJywKNjU1NjY9PidMJywKNjU1Njc9PidMJywKNjU1Njg9PidMJywKNjU1Njk9PidMJywKNjU1NzA9PidMJywKNjU1NzE9PidMJywKNjU1NzI9PidMJywKNjU1NzM9PidMJywKNjU1NzQ9PidMJywKNjU1NzY9PidMJywKNjU1Nzc9PidMJywKNjU1Nzg9PidMJywKNjU1Nzk9PidMJywKNjU1ODA9PidMJywKNjU1ODE9PidMJywKNjU1ODI9PidMJywKNjU1ODM9PidMJywKNjU1ODQ9PidMJywKNjU1ODU9PidMJywKNjU1ODY9PidMJywKNjU1ODc9PidMJywKNjU1ODg9PidMJywKNjU1ODk9PidMJywKNjU1OTA9PidMJywKNjU1OTE9PidMJywKNjU1OTI9PidMJywKNjU1OTM9PidMJywKNjU1OTQ9PidMJywKNjU1OTY9PidMJywKNjU1OTc9PidMJywKNjU1OTk9PidMJywKNjU2MDA9PidMJywKNjU2MDE9PidMJywKNjU2MDI9PidMJywKNjU2MDM9PidMJywKNjU2MDQ9PidMJywKNjU2MDU9PidMJywKNjU2MDY9PidMJywKNjU2MDc9PidMJywKNjU2MDg9PidMJywKNjU2MDk9PidMJywKNjU2MTA9PidMJywKNjU2MTE9PidMJywKNjU2MTI9PidMJywKNjU2MTM9PidMJywKNjU2MTY9PidMJywKNjU2MTc9PidMJywKNjU2MTg9PidMJywKNjU2MTk9PidMJywKNjU2MjA9PidMJywKNjU2MjE9PidMJywKNjU2MjI9PidMJywKNjU2MjM9PidMJywKNjU2MjQ9PidMJywKNjU2MjU9PidMJywKNjU2MjY9PidMJywKNjU2Mjc9PidMJywKNjU2Mjg9PidMJywKNjU2Mjk9PidMJywKNjU2NjQ9PidMJywKNjU2NjU9PidMJywKNjU2NjY9PidMJywKNjU2Njc9PidMJywKNjU2Njg9PidMJywKNjU2Njk9PidMJywKNjU2NzA9PidMJywKNjU2NzE9PidMJywKNjU2NzI9PidMJywKNjU2NzM9PidMJywKNjU2NzQ9PidMJywKNjU2NzU9PidMJywKNjU2NzY9PidMJywKNjU2Nzc9PidMJywKNjU2Nzg9PidMJywKNjU2Nzk9PidMJywKNjU2ODA9PidMJywKNjU2ODE9PidMJywKNjU2ODI9PidMJywKNjU2ODM9PidMJywKNjU2ODQ9PidMJywKNjU2ODU9PidMJywKNjU2ODY9PidMJywKNjU2ODc9PidMJywKNjU2ODg9PidMJywKNjU2ODk9PidMJywKNjU2OTA9PidMJywKNjU2OTE9PidMJywKNjU2OTI9PidMJywKNjU2OTM9PidMJywKNjU2OTQ9PidMJywKNjU2OTU9PidMJywKNjU2OTY9PidMJywKNjU2OTc9PidMJywKNjU2OTg9PidMJywKNjU2OTk9PidMJywKNjU3MDA9PidMJywKNjU3MDE9PidMJywKNjU3MDI9PidMJywKNjU3MDM9PidMJywKNjU3MDQ9PidMJywKNjU3MDU9PidMJywKNjU3MDY9PidMJywKNjU3MDc9PidMJywKNjU3MDg9PidMJywKNjU3MDk9PidMJywKNjU3MTA9PidMJywKNjU3MTE9PidMJywKNjU3MTI9PidMJywKNjU3MTM9PidMJywKNjU3MTQ9PidMJywKNjU3MTU9PidMJywKNjU3MTY9PidMJywKNjU3MTc9PidMJywKNjU3MTg9PidMJywKNjU3MTk9PidMJywKNjU3MjA9PidMJywKNjU3MjE9PidMJywKNjU3MjI9PidMJywKNjU3MjM9PidMJywKNjU3MjQ9PidMJywKNjU3MjU9PidMJywKNjU3MjY9PidMJywKNjU3Mjc9PidMJywKNjU3Mjg9PidMJywKNjU3Mjk9PidMJywKNjU3MzA9PidMJywKNjU3MzE9PidMJywKNjU3MzI9PidMJywKNjU3MzM9PidMJywKNjU3MzQ9PidMJywKNjU3MzU9PidMJywKNjU3MzY9PidMJywKNjU3Mzc9PidMJywKNjU3Mzg9PidMJywKNjU3Mzk9PidMJywKNjU3NDA9PidMJywKNjU3NDE9PidMJywKNjU3NDI9PidMJywKNjU3NDM9PidMJywKNjU3NDQ9PidMJywKNjU3NDU9PidMJywKNjU3NDY9PidMJywKNjU3NDc9PidMJywKNjU3NDg9PidMJywKNjU3NDk9PidMJywKNjU3NTA9PidMJywKNjU3NTE9PidMJywKNjU3NTI9PidMJywKNjU3NTM9PidMJywKNjU3NTQ9PidMJywKNjU3NTU9PidMJywKNjU3NTY9PidMJywKNjU3NTc9PidMJywKNjU3NTg9PidMJywKNjU3NTk9PidMJywKNjU3NjA9PidMJywKNjU3NjE9PidMJywKNjU3NjI9PidMJywKNjU3NjM9PidMJywKNjU3NjQ9PidMJywKNjU3NjU9PidMJywKNjU3NjY9PidMJywKNjU3Njc9PidMJywKNjU3Njg9PidMJywKNjU3Njk9PidMJywKNjU3NzA9PidMJywKNjU3NzE9PidMJywKNjU3NzI9PidMJywKNjU3NzM9PidMJywKNjU3NzQ9PidMJywKNjU3NzU9PidMJywKNjU3NzY9PidMJywKNjU3Nzc9PidMJywKNjU3Nzg9PidMJywKNjU3Nzk9PidMJywKNjU3ODA9PidMJywKNjU3ODE9PidMJywKNjU3ODI9PidMJywKNjU3ODM9PidMJywKNjU3ODQ9PidMJywKNjU3ODU9PidMJywKNjU3ODY9PidMJywKNjU3OTI9PidMJywKNjU3OTM9PidPTicsCjY1Nzk0PT4nTCcsCjY1Nzk5PT4nTCcsCjY1ODAwPT4nTCcsCjY1ODAxPT4nTCcsCjY1ODAyPT4nTCcsCjY1ODAzPT4nTCcsCjY1ODA0PT4nTCcsCjY1ODA1PT4nTCcsCjY1ODA2PT4nTCcsCjY1ODA3PT4nTCcsCjY1ODA4PT4nTCcsCjY1ODA5PT4nTCcsCjY1ODEwPT4nTCcsCjY1ODExPT4nTCcsCjY1ODEyPT4nTCcsCjY1ODEzPT4nTCcsCjY1ODE0PT4nTCcsCjY1ODE1PT4nTCcsCjY1ODE2PT4nTCcsCjY1ODE3PT4nTCcsCjY1ODE4PT4nTCcsCjY1ODE5PT4nTCcsCjY1ODIwPT4nTCcsCjY1ODIxPT4nTCcsCjY1ODIyPT4nTCcsCjY1ODIzPT4nTCcsCjY1ODI0PT4nTCcsCjY1ODI1PT4nTCcsCjY1ODI2PT4nTCcsCjY1ODI3PT4nTCcsCjY1ODI4PT4nTCcsCjY1ODI5PT4nTCcsCjY1ODMwPT4nTCcsCjY1ODMxPT4nTCcsCjY1ODMyPT4nTCcsCjY1ODMzPT4nTCcsCjY1ODM0PT4nTCcsCjY1ODM1PT4nTCcsCjY1ODM2PT4nTCcsCjY1ODM3PT4nTCcsCjY1ODM4PT4nTCcsCjY1ODM5PT4nTCcsCjY1ODQwPT4nTCcsCjY1ODQxPT4nTCcsCjY1ODQyPT4nTCcsCjY1ODQzPT4nTCcsCjY1ODQ3PT4nTCcsCjY1ODQ4PT4nTCcsCjY1ODQ5PT4nTCcsCjY1ODUwPT4nTCcsCjY1ODUxPT4nTCcsCjY1ODUyPT4nTCcsCjY1ODUzPT4nTCcsCjY1ODU0PT4nTCcsCjY1ODU1PT4nTCcsCjY1ODU2PT4nT04nLAo2NTg1Nz0+J09OJywKNjU4NTg9PidPTicsCjY1ODU5PT4nT04nLAo2NTg2MD0+J09OJywKNjU4NjE9PidPTicsCjY1ODYyPT4nT04nLAo2NTg2Mz0+J09OJywKNjU4NjQ9PidPTicsCjY1ODY1PT4nT04nLAo2NTg2Nj0+J09OJywKNjU4Njc9PidPTicsCjY1ODY4PT4nT04nLAo2NTg2OT0+J09OJywKNjU4NzA9PidPTicsCjY1ODcxPT4nT04nLAo2NTg3Mj0+J09OJywKNjU4NzM9PidPTicsCjY1ODc0PT4nT04nLAo2NTg3NT0+J09OJywKNjU4NzY9PidPTicsCjY1ODc3PT4nT04nLAo2NTg3OD0+J09OJywKNjU4Nzk9PidPTicsCjY1ODgwPT4nT04nLAo2NTg4MT0+J09OJywKNjU4ODI9PidPTicsCjY1ODgzPT4nT04nLAo2NTg4ND0+J09OJywKNjU4ODU9PidPTicsCjY1ODg2PT4nT04nLAo2NTg4Nz0+J09OJywKNjU4ODg9PidPTicsCjY1ODg5PT4nT04nLAo2NTg5MD0+J09OJywKNjU4OTE9PidPTicsCjY1ODkyPT4nT04nLAo2NTg5Mz0+J09OJywKNjU4OTQ9PidPTicsCjY1ODk1PT4nT04nLAo2NTg5Nj0+J09OJywKNjU4OTc9PidPTicsCjY1ODk4PT4nT04nLAo2NTg5OT0+J09OJywKNjU5MDA9PidPTicsCjY1OTAxPT4nT04nLAo2NTkwMj0+J09OJywKNjU5MDM9PidPTicsCjY1OTA0PT4nT04nLAo2NTkwNT0+J09OJywKNjU5MDY9PidPTicsCjY1OTA3PT4nT04nLAo2NTkwOD0+J09OJywKNjU5MDk9PidPTicsCjY1OTEwPT4nT04nLAo2NTkxMT0+J09OJywKNjU5MTI9PidPTicsCjY1OTEzPT4nT04nLAo2NTkxND0+J09OJywKNjU5MTU9PidPTicsCjY1OTE2PT4nT04nLAo2NTkxNz0+J09OJywKNjU5MTg9PidPTicsCjY1OTE5PT4nT04nLAo2NTkyMD0+J09OJywKNjU5MjE9PidPTicsCjY1OTIyPT4nT04nLAo2NTkyMz0+J09OJywKNjU5MjQ9PidPTicsCjY1OTI1PT4nT04nLAo2NTkyNj0+J09OJywKNjU5Mjc9PidPTicsCjY1OTI4PT4nT04nLAo2NTkyOT0+J09OJywKNjU5MzA9PidPTicsCjY2MzA0PT4nTCcsCjY2MzA1PT4nTCcsCjY2MzA2PT4nTCcsCjY2MzA3PT4nTCcsCjY2MzA4PT4nTCcsCjY2MzA5PT4nTCcsCjY2MzEwPT4nTCcsCjY2MzExPT4nTCcsCjY2MzEyPT4nTCcsCjY2MzEzPT4nTCcsCjY2MzE0PT4nTCcsCjY2MzE1PT4nTCcsCjY2MzE2PT4nTCcsCjY2MzE3PT4nTCcsCjY2MzE4PT4nTCcsCjY2MzE5PT4nTCcsCjY2MzIwPT4nTCcsCjY2MzIxPT4nTCcsCjY2MzIyPT4nTCcsCjY2MzIzPT4nTCcsCjY2MzI0PT4nTCcsCjY2MzI1PT4nTCcsCjY2MzI2PT4nTCcsCjY2MzI3PT4nTCcsCjY2MzI4PT4nTCcsCjY2MzI5PT4nTCcsCjY2MzMwPT4nTCcsCjY2MzMxPT4nTCcsCjY2MzMyPT4nTCcsCjY2MzMzPT4nTCcsCjY2MzM0PT4nTCcsCjY2MzM2PT4nTCcsCjY2MzM3PT4nTCcsCjY2MzM4PT4nTCcsCjY2MzM5PT4nTCcsCjY2MzUyPT4nTCcsCjY2MzUzPT4nTCcsCjY2MzU0PT4nTCcsCjY2MzU1PT4nTCcsCjY2MzU2PT4nTCcsCjY2MzU3PT4nTCcsCjY2MzU4PT4nTCcsCjY2MzU5PT4nTCcsCjY2MzYwPT4nTCcsCjY2MzYxPT4nTCcsCjY2MzYyPT4nTCcsCjY2MzYzPT4nTCcsCjY2MzY0PT4nTCcsCjY2MzY1PT4nTCcsCjY2MzY2PT4nTCcsCjY2MzY3PT4nTCcsCjY2MzY4PT4nTCcsCjY2MzY5PT4nTCcsCjY2MzcwPT4nTCcsCjY2MzcxPT4nTCcsCjY2MzcyPT4nTCcsCjY2MzczPT4nTCcsCjY2Mzc0PT4nTCcsCjY2Mzc1PT4nTCcsCjY2Mzc2PT4nTCcsCjY2Mzc3PT4nTCcsCjY2Mzc4PT4nTCcsCjY2NDMyPT4nTCcsCjY2NDMzPT4nTCcsCjY2NDM0PT4nTCcsCjY2NDM1PT4nTCcsCjY2NDM2PT4nTCcsCjY2NDM3PT4nTCcsCjY2NDM4PT4nTCcsCjY2NDM5PT4nTCcsCjY2NDQwPT4nTCcsCjY2NDQxPT4nTCcsCjY2NDQyPT4nTCcsCjY2NDQzPT4nTCcsCjY2NDQ0PT4nTCcsCjY2NDQ1PT4nTCcsCjY2NDQ2PT4nTCcsCjY2NDQ3PT4nTCcsCjY2NDQ4PT4nTCcsCjY2NDQ5PT4nTCcsCjY2NDUwPT4nTCcsCjY2NDUxPT4nTCcsCjY2NDUyPT4nTCcsCjY2NDUzPT4nTCcsCjY2NDU0PT4nTCcsCjY2NDU1PT4nTCcsCjY2NDU2PT4nTCcsCjY2NDU3PT4nTCcsCjY2NDU4PT4nTCcsCjY2NDU5PT4nTCcsCjY2NDYwPT4nTCcsCjY2NDYxPT4nTCcsCjY2NDYzPT4nTCcsCjY2NDY0PT4nTCcsCjY2NDY1PT4nTCcsCjY2NDY2PT4nTCcsCjY2NDY3PT4nTCcsCjY2NDY4PT4nTCcsCjY2NDY5PT4nTCcsCjY2NDcwPT4nTCcsCjY2NDcxPT4nTCcsCjY2NDcyPT4nTCcsCjY2NDczPT4nTCcsCjY2NDc0PT4nTCcsCjY2NDc1PT4nTCcsCjY2NDc2PT4nTCcsCjY2NDc3PT4nTCcsCjY2NDc4PT4nTCcsCjY2NDc5PT4nTCcsCjY2NDgwPT4nTCcsCjY2NDgxPT4nTCcsCjY2NDgyPT4nTCcsCjY2NDgzPT4nTCcsCjY2NDg0PT4nTCcsCjY2NDg1PT4nTCcsCjY2NDg2PT4nTCcsCjY2NDg3PT4nTCcsCjY2NDg4PT4nTCcsCjY2NDg5PT4nTCcsCjY2NDkwPT4nTCcsCjY2NDkxPT4nTCcsCjY2NDkyPT4nTCcsCjY2NDkzPT4nTCcsCjY2NDk0PT4nTCcsCjY2NDk1PT4nTCcsCjY2NDk2PT4nTCcsCjY2NDk3PT4nTCcsCjY2NDk4PT4nTCcsCjY2NDk5PT4nTCcsCjY2NTA0PT4nTCcsCjY2NTA1PT4nTCcsCjY2NTA2PT4nTCcsCjY2NTA3PT4nTCcsCjY2NTA4PT4nTCcsCjY2NTA5PT4nTCcsCjY2NTEwPT4nTCcsCjY2NTExPT4nTCcsCjY2NTEyPT4nTCcsCjY2NTEzPT4nTCcsCjY2NTE0PT4nTCcsCjY2NTE1PT4nTCcsCjY2NTE2PT4nTCcsCjY2NTE3PT4nTCcsCjY2NTYwPT4nTCcsCjY2NTYxPT4nTCcsCjY2NTYyPT4nTCcsCjY2NTYzPT4nTCcsCjY2NTY0PT4nTCcsCjY2NTY1PT4nTCcsCjY2NTY2PT4nTCcsCjY2NTY3PT4nTCcsCjY2NTY4PT4nTCcsCjY2NTY5PT4nTCcsCjY2NTcwPT4nTCcsCjY2NTcxPT4nTCcsCjY2NTcyPT4nTCcsCjY2NTczPT4nTCcsCjY2NTc0PT4nTCcsCjY2NTc1PT4nTCcsCjY2NTc2PT4nTCcsCjY2NTc3PT4nTCcsCjY2NTc4PT4nTCcsCjY2NTc5PT4nTCcsCjY2NTgwPT4nTCcsCjY2NTgxPT4nTCcsCjY2NTgyPT4nTCcsCjY2NTgzPT4nTCcsCjY2NTg0PT4nTCcsCjY2NTg1PT4nTCcsCjY2NTg2PT4nTCcsCjY2NTg3PT4nTCcsCjY2NTg4PT4nTCcsCjY2NTg5PT4nTCcsCjY2NTkwPT4nTCcsCjY2NTkxPT4nTCcsCjY2NTkyPT4nTCcsCjY2NTkzPT4nTCcsCjY2NTk0PT4nTCcsCjY2NTk1PT4nTCcsCjY2NTk2PT4nTCcsCjY2NTk3PT4nTCcsCjY2NTk4PT4nTCcsCjY2NTk5PT4nTCcsCjY2NjAwPT4nTCcsCjY2NjAxPT4nTCcsCjY2NjAyPT4nTCcsCjY2NjAzPT4nTCcsCjY2NjA0PT4nTCcsCjY2NjA1PT4nTCcsCjY2NjA2PT4nTCcsCjY2NjA3PT4nTCcsCjY2NjA4PT4nTCcsCjY2NjA5PT4nTCcsCjY2NjEwPT4nTCcsCjY2NjExPT4nTCcsCjY2NjEyPT4nTCcsCjY2NjEzPT4nTCcsCjY2NjE0PT4nTCcsCjY2NjE1PT4nTCcsCjY2NjE2PT4nTCcsCjY2NjE3PT4nTCcsCjY2NjE4PT4nTCcsCjY2NjE5PT4nTCcsCjY2NjIwPT4nTCcsCjY2NjIxPT4nTCcsCjY2NjIyPT4nTCcsCjY2NjIzPT4nTCcsCjY2NjI0PT4nTCcsCjY2NjI1PT4nTCcsCjY2NjI2PT4nTCcsCjY2NjI3PT4nTCcsCjY2NjI4PT4nTCcsCjY2NjI5PT4nTCcsCjY2NjMwPT4nTCcsCjY2NjMxPT4nTCcsCjY2NjMyPT4nTCcsCjY2NjMzPT4nTCcsCjY2NjM0PT4nTCcsCjY2NjM1PT4nTCcsCjY2NjM2PT4nTCcsCjY2NjM3PT4nTCcsCjY2NjM4PT4nTCcsCjY2NjM5PT4nTCcsCjY2NjQwPT4nTCcsCjY2NjQxPT4nTCcsCjY2NjQyPT4nTCcsCjY2NjQzPT4nTCcsCjY2NjQ0PT4nTCcsCjY2NjQ1PT4nTCcsCjY2NjQ2PT4nTCcsCjY2NjQ3PT4nTCcsCjY2NjQ4PT4nTCcsCjY2NjQ5PT4nTCcsCjY2NjUwPT4nTCcsCjY2NjUxPT4nTCcsCjY2NjUyPT4nTCcsCjY2NjUzPT4nTCcsCjY2NjU0PT4nTCcsCjY2NjU1PT4nTCcsCjY2NjU2PT4nTCcsCjY2NjU3PT4nTCcsCjY2NjU4PT4nTCcsCjY2NjU5PT4nTCcsCjY2NjYwPT4nTCcsCjY2NjYxPT4nTCcsCjY2NjYyPT4nTCcsCjY2NjYzPT4nTCcsCjY2NjY0PT4nTCcsCjY2NjY1PT4nTCcsCjY2NjY2PT4nTCcsCjY2NjY3PT4nTCcsCjY2NjY4PT4nTCcsCjY2NjY5PT4nTCcsCjY2NjcwPT4nTCcsCjY2NjcxPT4nTCcsCjY2NjcyPT4nTCcsCjY2NjczPT4nTCcsCjY2Njc0PT4nTCcsCjY2Njc1PT4nTCcsCjY2Njc2PT4nTCcsCjY2Njc3PT4nTCcsCjY2Njc4PT4nTCcsCjY2Njc5PT4nTCcsCjY2NjgwPT4nTCcsCjY2NjgxPT4nTCcsCjY2NjgyPT4nTCcsCjY2NjgzPT4nTCcsCjY2Njg0PT4nTCcsCjY2Njg1PT4nTCcsCjY2Njg2PT4nTCcsCjY2Njg3PT4nTCcsCjY2Njg4PT4nTCcsCjY2Njg5PT4nTCcsCjY2NjkwPT4nTCcsCjY2NjkxPT4nTCcsCjY2NjkyPT4nTCcsCjY2NjkzPT4nTCcsCjY2Njk0PT4nTCcsCjY2Njk1PT4nTCcsCjY2Njk2PT4nTCcsCjY2Njk3PT4nTCcsCjY2Njk4PT4nTCcsCjY2Njk5PT4nTCcsCjY2NzAwPT4nTCcsCjY2NzAxPT4nTCcsCjY2NzAyPT4nTCcsCjY2NzAzPT4nTCcsCjY2NzA0PT4nTCcsCjY2NzA1PT4nTCcsCjY2NzA2PT4nTCcsCjY2NzA3PT4nTCcsCjY2NzA4PT4nTCcsCjY2NzA5PT4nTCcsCjY2NzEwPT4nTCcsCjY2NzExPT4nTCcsCjY2NzEyPT4nTCcsCjY2NzEzPT4nTCcsCjY2NzE0PT4nTCcsCjY2NzE1PT4nTCcsCjY2NzE2PT4nTCcsCjY2NzE3PT4nTCcsCjY2NzIwPT4nTCcsCjY2NzIxPT4nTCcsCjY2NzIyPT4nTCcsCjY2NzIzPT4nTCcsCjY2NzI0PT4nTCcsCjY2NzI1PT4nTCcsCjY2NzI2PT4nTCcsCjY2NzI3PT4nTCcsCjY2NzI4PT4nTCcsCjY2NzI5PT4nTCcsCjY3NTg0PT4nUicsCjY3NTg1PT4nUicsCjY3NTg2PT4nUicsCjY3NTg3PT4nUicsCjY3NTg4PT4nUicsCjY3NTg5PT4nUicsCjY3NTkyPT4nUicsCjY3NTk0PT4nUicsCjY3NTk1PT4nUicsCjY3NTk2PT4nUicsCjY3NTk3PT4nUicsCjY3NTk4PT4nUicsCjY3NTk5PT4nUicsCjY3NjAwPT4nUicsCjY3NjAxPT4nUicsCjY3NjAyPT4nUicsCjY3NjAzPT4nUicsCjY3NjA0PT4nUicsCjY3NjA1PT4nUicsCjY3NjA2PT4nUicsCjY3NjA3PT4nUicsCjY3NjA4PT4nUicsCjY3NjA5PT4nUicsCjY3NjEwPT4nUicsCjY3NjExPT4nUicsCjY3NjEyPT4nUicsCjY3NjEzPT4nUicsCjY3NjE0PT4nUicsCjY3NjE1PT4nUicsCjY3NjE2PT4nUicsCjY3NjE3PT4nUicsCjY3NjE4PT4nUicsCjY3NjE5PT4nUicsCjY3NjIwPT4nUicsCjY3NjIxPT4nUicsCjY3NjIyPT4nUicsCjY3NjIzPT4nUicsCjY3NjI0PT4nUicsCjY3NjI1PT4nUicsCjY3NjI2PT4nUicsCjY3NjI3PT4nUicsCjY3NjI4PT4nUicsCjY3NjI5PT4nUicsCjY3NjMwPT4nUicsCjY3NjMxPT4nUicsCjY3NjMyPT4nUicsCjY3NjMzPT4nUicsCjY3NjM0PT4nUicsCjY3NjM1PT4nUicsCjY3NjM2PT4nUicsCjY3NjM3PT4nUicsCjY3NjM5PT4nUicsCjY3NjQwPT4nUicsCjY3NjQ0PT4nUicsCjY3NjQ3PT4nUicsCjY3ODQwPT4nUicsCjY3ODQxPT4nUicsCjY3ODQyPT4nUicsCjY3ODQzPT4nUicsCjY3ODQ0PT4nUicsCjY3ODQ1PT4nUicsCjY3ODQ2PT4nUicsCjY3ODQ3PT4nUicsCjY3ODQ4PT4nUicsCjY3ODQ5PT4nUicsCjY3ODUwPT4nUicsCjY3ODUxPT4nUicsCjY3ODUyPT4nUicsCjY3ODUzPT4nUicsCjY3ODU0PT4nUicsCjY3ODU1PT4nUicsCjY3ODU2PT4nUicsCjY3ODU3PT4nUicsCjY3ODU4PT4nUicsCjY3ODU5PT4nUicsCjY3ODYwPT4nUicsCjY3ODYxPT4nUicsCjY3ODYyPT4nUicsCjY3ODYzPT4nUicsCjY3ODY0PT4nUicsCjY3ODY1PT4nUicsCjY3ODcxPT4nT04nLAo2ODA5Nj0+J1InLAo2ODA5Nz0+J05TTScsCjY4MDk4PT4nTlNNJywKNjgwOTk9PidOU00nLAo2ODEwMT0+J05TTScsCjY4MTAyPT4nTlNNJywKNjgxMDg9PidOU00nLAo2ODEwOT0+J05TTScsCjY4MTEwPT4nTlNNJywKNjgxMTE9PidOU00nLAo2ODExMj0+J1InLAo2ODExMz0+J1InLAo2ODExND0+J1InLAo2ODExNT0+J1InLAo2ODExNz0+J1InLAo2ODExOD0+J1InLAo2ODExOT0+J1InLAo2ODEyMT0+J1InLAo2ODEyMj0+J1InLAo2ODEyMz0+J1InLAo2ODEyND0+J1InLAo2ODEyNT0+J1InLAo2ODEyNj0+J1InLAo2ODEyNz0+J1InLAo2ODEyOD0+J1InLAo2ODEyOT0+J1InLAo2ODEzMD0+J1InLAo2ODEzMT0+J1InLAo2ODEzMj0+J1InLAo2ODEzMz0+J1InLAo2ODEzND0+J1InLAo2ODEzNT0+J1InLAo2ODEzNj0+J1InLAo2ODEzNz0+J1InLAo2ODEzOD0+J1InLAo2ODEzOT0+J1InLAo2ODE0MD0+J1InLAo2ODE0MT0+J1InLAo2ODE0Mj0+J1InLAo2ODE0Mz0+J1InLAo2ODE0ND0+J1InLAo2ODE0NT0+J1InLAo2ODE0Nj0+J1InLAo2ODE0Nz0+J1InLAo2ODE1Mj0+J05TTScsCjY4MTUzPT4nTlNNJywKNjgxNTQ9PidOU00nLAo2ODE1OT0+J05TTScsCjY4MTYwPT4nUicsCjY4MTYxPT4nUicsCjY4MTYyPT4nUicsCjY4MTYzPT4nUicsCjY4MTY0PT4nUicsCjY4MTY1PT4nUicsCjY4MTY2PT4nUicsCjY4MTY3PT4nUicsCjY4MTc2PT4nUicsCjY4MTc3PT4nUicsCjY4MTc4PT4nUicsCjY4MTc5PT4nUicsCjY4MTgwPT4nUicsCjY4MTgxPT4nUicsCjY4MTgyPT4nUicsCjY4MTgzPT4nUicsCjY4MTg0PT4nUicsCjczNzI4PT4nTCcsCjczNzI5PT4nTCcsCjczNzMwPT4nTCcsCjczNzMxPT4nTCcsCjczNzMyPT4nTCcsCjczNzMzPT4nTCcsCjczNzM0PT4nTCcsCjczNzM1PT4nTCcsCjczNzM2PT4nTCcsCjczNzM3PT4nTCcsCjczNzM4PT4nTCcsCjczNzM5PT4nTCcsCjczNzQwPT4nTCcsCjczNzQxPT4nTCcsCjczNzQyPT4nTCcsCjczNzQzPT4nTCcsCjczNzQ0PT4nTCcsCjczNzQ1PT4nTCcsCjczNzQ2PT4nTCcsCjczNzQ3PT4nTCcsCjczNzQ4PT4nTCcsCjczNzQ5PT4nTCcsCjczNzUwPT4nTCcsCjczNzUxPT4nTCcsCjczNzUyPT4nTCcsCjczNzUzPT4nTCcsCjczNzU0PT4nTCcsCjczNzU1PT4nTCcsCjczNzU2PT4nTCcsCjczNzU3PT4nTCcsCjczNzU4PT4nTCcsCjczNzU5PT4nTCcsCjczNzYwPT4nTCcsCjczNzYxPT4nTCcsCjczNzYyPT4nTCcsCjczNzYzPT4nTCcsCjczNzY0PT4nTCcsCjczNzY1PT4nTCcsCjczNzY2PT4nTCcsCjczNzY3PT4nTCcsCjczNzY4PT4nTCcsCjczNzY5PT4nTCcsCjczNzcwPT4nTCcsCjczNzcxPT4nTCcsCjczNzcyPT4nTCcsCjczNzczPT4nTCcsCjczNzc0PT4nTCcsCjczNzc1PT4nTCcsCjczNzc2PT4nTCcsCjczNzc3PT4nTCcsCjczNzc4PT4nTCcsCjczNzc5PT4nTCcsCjczNzgwPT4nTCcsCjczNzgxPT4nTCcsCjczNzgyPT4nTCcsCjczNzgzPT4nTCcsCjczNzg0PT4nTCcsCjczNzg1PT4nTCcsCjczNzg2PT4nTCcsCjczNzg3PT4nTCcsCjczNzg4PT4nTCcsCjczNzg5PT4nTCcsCjczNzkwPT4nTCcsCjczNzkxPT4nTCcsCjczNzkyPT4nTCcsCjczNzkzPT4nTCcsCjczNzk0PT4nTCcsCjczNzk1PT4nTCcsCjczNzk2PT4nTCcsCjczNzk3PT4nTCcsCjczNzk4PT4nTCcsCjczNzk5PT4nTCcsCjczODAwPT4nTCcsCjczODAxPT4nTCcsCjczODAyPT4nTCcsCjczODAzPT4nTCcsCjczODA0PT4nTCcsCjczODA1PT4nTCcsCjczODA2PT4nTCcsCjczODA3PT4nTCcsCjczODA4PT4nTCcsCjczODA5PT4nTCcsCjczODEwPT4nTCcsCjczODExPT4nTCcsCjczODEyPT4nTCcsCjczODEzPT4nTCcsCjczODE0PT4nTCcsCjczODE1PT4nTCcsCjczODE2PT4nTCcsCjczODE3PT4nTCcsCjczODE4PT4nTCcsCjczODE5PT4nTCcsCjczODIwPT4nTCcsCjczODIxPT4nTCcsCjczODIyPT4nTCcsCjczODIzPT4nTCcsCjczODI0PT4nTCcsCjczODI1PT4nTCcsCjczODI2PT4nTCcsCjczODI3PT4nTCcsCjczODI4PT4nTCcsCjczODI5PT4nTCcsCjczODMwPT4nTCcsCjczODMxPT4nTCcsCjczODMyPT4nTCcsCjczODMzPT4nTCcsCjczODM0PT4nTCcsCjczODM1PT4nTCcsCjczODM2PT4nTCcsCjczODM3PT4nTCcsCjczODM4PT4nTCcsCjczODM5PT4nTCcsCjczODQwPT4nTCcsCjczODQxPT4nTCcsCjczODQyPT4nTCcsCjczODQzPT4nTCcsCjczODQ0PT4nTCcsCjczODQ1PT4nTCcsCjczODQ2PT4nTCcsCjczODQ3PT4nTCcsCjczODQ4PT4nTCcsCjczODQ5PT4nTCcsCjczODUwPT4nTCcsCjczODUxPT4nTCcsCjczODUyPT4nTCcsCjczODUzPT4nTCcsCjczODU0PT4nTCcsCjczODU1PT4nTCcsCjczODU2PT4nTCcsCjczODU3PT4nTCcsCjczODU4PT4nTCcsCjczODU5PT4nTCcsCjczODYwPT4nTCcsCjczODYxPT4nTCcsCjczODYyPT4nTCcsCjczODYzPT4nTCcsCjczODY0PT4nTCcsCjczODY1PT4nTCcsCjczODY2PT4nTCcsCjczODY3PT4nTCcsCjczODY4PT4nTCcsCjczODY5PT4nTCcsCjczODcwPT4nTCcsCjczODcxPT4nTCcsCjczODcyPT4nTCcsCjczODczPT4nTCcsCjczODc0PT4nTCcsCjczODc1PT4nTCcsCjczODc2PT4nTCcsCjczODc3PT4nTCcsCjczODc4PT4nTCcsCjczODc5PT4nTCcsCjczODgwPT4nTCcsCjczODgxPT4nTCcsCjczODgyPT4nTCcsCjczODgzPT4nTCcsCjczODg0PT4nTCcsCjczODg1PT4nTCcsCjczODg2PT4nTCcsCjczODg3PT4nTCcsCjczODg4PT4nTCcsCjczODg5PT4nTCcsCjczODkwPT4nTCcsCjczODkxPT4nTCcsCjczODkyPT4nTCcsCjczODkzPT4nTCcsCjczODk0PT4nTCcsCjczODk1PT4nTCcsCjczODk2PT4nTCcsCjczODk3PT4nTCcsCjczODk4PT4nTCcsCjczODk5PT4nTCcsCjczOTAwPT4nTCcsCjczOTAxPT4nTCcsCjczOTAyPT4nTCcsCjczOTAzPT4nTCcsCjczOTA0PT4nTCcsCjczOTA1PT4nTCcsCjczOTA2PT4nTCcsCjczOTA3PT4nTCcsCjczOTA4PT4nTCcsCjczOTA5PT4nTCcsCjczOTEwPT4nTCcsCjczOTExPT4nTCcsCjczOTEyPT4nTCcsCjczOTEzPT4nTCcsCjczOTE0PT4nTCcsCjczOTE1PT4nTCcsCjczOTE2PT4nTCcsCjczOTE3PT4nTCcsCjczOTE4PT4nTCcsCjczOTE5PT4nTCcsCjczOTIwPT4nTCcsCjczOTIxPT4nTCcsCjczOTIyPT4nTCcsCjczOTIzPT4nTCcsCjczOTI0PT4nTCcsCjczOTI1PT4nTCcsCjczOTI2PT4nTCcsCjczOTI3PT4nTCcsCjczOTI4PT4nTCcsCjczOTI5PT4nTCcsCjczOTMwPT4nTCcsCjczOTMxPT4nTCcsCjczOTMyPT4nTCcsCjczOTMzPT4nTCcsCjczOTM0PT4nTCcsCjczOTM1PT4nTCcsCjczOTM2PT4nTCcsCjczOTM3PT4nTCcsCjczOTM4PT4nTCcsCjczOTM5PT4nTCcsCjczOTQwPT4nTCcsCjczOTQxPT4nTCcsCjczOTQyPT4nTCcsCjczOTQzPT4nTCcsCjczOTQ0PT4nTCcsCjczOTQ1PT4nTCcsCjczOTQ2PT4nTCcsCjczOTQ3PT4nTCcsCjczOTQ4PT4nTCcsCjczOTQ5PT4nTCcsCjczOTUwPT4nTCcsCjczOTUxPT4nTCcsCjczOTUyPT4nTCcsCjczOTUzPT4nTCcsCjczOTU0PT4nTCcsCjczOTU1PT4nTCcsCjczOTU2PT4nTCcsCjczOTU3PT4nTCcsCjczOTU4PT4nTCcsCjczOTU5PT4nTCcsCjczOTYwPT4nTCcsCjczOTYxPT4nTCcsCjczOTYyPT4nTCcsCjczOTYzPT4nTCcsCjczOTY0PT4nTCcsCjczOTY1PT4nTCcsCjczOTY2PT4nTCcsCjczOTY3PT4nTCcsCjczOTY4PT4nTCcsCjczOTY5PT4nTCcsCjczOTcwPT4nTCcsCjczOTcxPT4nTCcsCjczOTcyPT4nTCcsCjczOTczPT4nTCcsCjczOTc0PT4nTCcsCjczOTc1PT4nTCcsCjczOTc2PT4nTCcsCjczOTc3PT4nTCcsCjczOTc4PT4nTCcsCjczOTc5PT4nTCcsCjczOTgwPT4nTCcsCjczOTgxPT4nTCcsCjczOTgyPT4nTCcsCjczOTgzPT4nTCcsCjczOTg0PT4nTCcsCjczOTg1PT4nTCcsCjczOTg2PT4nTCcsCjczOTg3PT4nTCcsCjczOTg4PT4nTCcsCjczOTg5PT4nTCcsCjczOTkwPT4nTCcsCjczOTkxPT4nTCcsCjczOTkyPT4nTCcsCjczOTkzPT4nTCcsCjczOTk0PT4nTCcsCjczOTk1PT4nTCcsCjczOTk2PT4nTCcsCjczOTk3PT4nTCcsCjczOTk4PT4nTCcsCjczOTk5PT4nTCcsCjc0MDAwPT4nTCcsCjc0MDAxPT4nTCcsCjc0MDAyPT4nTCcsCjc0MDAzPT4nTCcsCjc0MDA0PT4nTCcsCjc0MDA1PT4nTCcsCjc0MDA2PT4nTCcsCjc0MDA3PT4nTCcsCjc0MDA4PT4nTCcsCjc0MDA5PT4nTCcsCjc0MDEwPT4nTCcsCjc0MDExPT4nTCcsCjc0MDEyPT4nTCcsCjc0MDEzPT4nTCcsCjc0MDE0PT4nTCcsCjc0MDE1PT4nTCcsCjc0MDE2PT4nTCcsCjc0MDE3PT4nTCcsCjc0MDE4PT4nTCcsCjc0MDE5PT4nTCcsCjc0MDIwPT4nTCcsCjc0MDIxPT4nTCcsCjc0MDIyPT4nTCcsCjc0MDIzPT4nTCcsCjc0MDI0PT4nTCcsCjc0MDI1PT4nTCcsCjc0MDI2PT4nTCcsCjc0MDI3PT4nTCcsCjc0MDI4PT4nTCcsCjc0MDI5PT4nTCcsCjc0MDMwPT4nTCcsCjc0MDMxPT4nTCcsCjc0MDMyPT4nTCcsCjc0MDMzPT4nTCcsCjc0MDM0PT4nTCcsCjc0MDM1PT4nTCcsCjc0MDM2PT4nTCcsCjc0MDM3PT4nTCcsCjc0MDM4PT4nTCcsCjc0MDM5PT4nTCcsCjc0MDQwPT4nTCcsCjc0MDQxPT4nTCcsCjc0MDQyPT4nTCcsCjc0MDQzPT4nTCcsCjc0MDQ0PT4nTCcsCjc0MDQ1PT4nTCcsCjc0MDQ2PT4nTCcsCjc0MDQ3PT4nTCcsCjc0MDQ4PT4nTCcsCjc0MDQ5PT4nTCcsCjc0MDUwPT4nTCcsCjc0MDUxPT4nTCcsCjc0MDUyPT4nTCcsCjc0MDUzPT4nTCcsCjc0MDU0PT4nTCcsCjc0MDU1PT4nTCcsCjc0MDU2PT4nTCcsCjc0MDU3PT4nTCcsCjc0MDU4PT4nTCcsCjc0MDU5PT4nTCcsCjc0MDYwPT4nTCcsCjc0MDYxPT4nTCcsCjc0MDYyPT4nTCcsCjc0MDYzPT4nTCcsCjc0MDY0PT4nTCcsCjc0MDY1PT4nTCcsCjc0MDY2PT4nTCcsCjc0MDY3PT4nTCcsCjc0MDY4PT4nTCcsCjc0MDY5PT4nTCcsCjc0MDcwPT4nTCcsCjc0MDcxPT4nTCcsCjc0MDcyPT4nTCcsCjc0MDczPT4nTCcsCjc0MDc0PT4nTCcsCjc0MDc1PT4nTCcsCjc0MDc2PT4nTCcsCjc0MDc3PT4nTCcsCjc0MDc4PT4nTCcsCjc0MDc5PT4nTCcsCjc0MDgwPT4nTCcsCjc0MDgxPT4nTCcsCjc0MDgyPT4nTCcsCjc0MDgzPT4nTCcsCjc0MDg0PT4nTCcsCjc0MDg1PT4nTCcsCjc0MDg2PT4nTCcsCjc0MDg3PT4nTCcsCjc0MDg4PT4nTCcsCjc0MDg5PT4nTCcsCjc0MDkwPT4nTCcsCjc0MDkxPT4nTCcsCjc0MDkyPT4nTCcsCjc0MDkzPT4nTCcsCjc0MDk0PT4nTCcsCjc0MDk1PT4nTCcsCjc0MDk2PT4nTCcsCjc0MDk3PT4nTCcsCjc0MDk4PT4nTCcsCjc0MDk5PT4nTCcsCjc0MTAwPT4nTCcsCjc0MTAxPT4nTCcsCjc0MTAyPT4nTCcsCjc0MTAzPT4nTCcsCjc0MTA0PT4nTCcsCjc0MTA1PT4nTCcsCjc0MTA2PT4nTCcsCjc0MTA3PT4nTCcsCjc0MTA4PT4nTCcsCjc0MTA5PT4nTCcsCjc0MTEwPT4nTCcsCjc0MTExPT4nTCcsCjc0MTEyPT4nTCcsCjc0MTEzPT4nTCcsCjc0MTE0PT4nTCcsCjc0MTE1PT4nTCcsCjc0MTE2PT4nTCcsCjc0MTE3PT4nTCcsCjc0MTE4PT4nTCcsCjc0MTE5PT4nTCcsCjc0MTIwPT4nTCcsCjc0MTIxPT4nTCcsCjc0MTIyPT4nTCcsCjc0MTIzPT4nTCcsCjc0MTI0PT4nTCcsCjc0MTI1PT4nTCcsCjc0MTI2PT4nTCcsCjc0MTI3PT4nTCcsCjc0MTI4PT4nTCcsCjc0MTI5PT4nTCcsCjc0MTMwPT4nTCcsCjc0MTMxPT4nTCcsCjc0MTMyPT4nTCcsCjc0MTMzPT4nTCcsCjc0MTM0PT4nTCcsCjc0MTM1PT4nTCcsCjc0MTM2PT4nTCcsCjc0MTM3PT4nTCcsCjc0MTM4PT4nTCcsCjc0MTM5PT4nTCcsCjc0MTQwPT4nTCcsCjc0MTQxPT4nTCcsCjc0MTQyPT4nTCcsCjc0MTQzPT4nTCcsCjc0MTQ0PT4nTCcsCjc0MTQ1PT4nTCcsCjc0MTQ2PT4nTCcsCjc0MTQ3PT4nTCcsCjc0MTQ4PT4nTCcsCjc0MTQ5PT4nTCcsCjc0MTUwPT4nTCcsCjc0MTUxPT4nTCcsCjc0MTUyPT4nTCcsCjc0MTUzPT4nTCcsCjc0MTU0PT4nTCcsCjc0MTU1PT4nTCcsCjc0MTU2PT4nTCcsCjc0MTU3PT4nTCcsCjc0MTU4PT4nTCcsCjc0MTU5PT4nTCcsCjc0MTYwPT4nTCcsCjc0MTYxPT4nTCcsCjc0MTYyPT4nTCcsCjc0MTYzPT4nTCcsCjc0MTY0PT4nTCcsCjc0MTY1PT4nTCcsCjc0MTY2PT4nTCcsCjc0MTY3PT4nTCcsCjc0MTY4PT4nTCcsCjc0MTY5PT4nTCcsCjc0MTcwPT4nTCcsCjc0MTcxPT4nTCcsCjc0MTcyPT4nTCcsCjc0MTczPT4nTCcsCjc0MTc0PT4nTCcsCjc0MTc1PT4nTCcsCjc0MTc2PT4nTCcsCjc0MTc3PT4nTCcsCjc0MTc4PT4nTCcsCjc0MTc5PT4nTCcsCjc0MTgwPT4nTCcsCjc0MTgxPT4nTCcsCjc0MTgyPT4nTCcsCjc0MTgzPT4nTCcsCjc0MTg0PT4nTCcsCjc0MTg1PT4nTCcsCjc0MTg2PT4nTCcsCjc0MTg3PT4nTCcsCjc0MTg4PT4nTCcsCjc0MTg5PT4nTCcsCjc0MTkwPT4nTCcsCjc0MTkxPT4nTCcsCjc0MTkyPT4nTCcsCjc0MTkzPT4nTCcsCjc0MTk0PT4nTCcsCjc0MTk1PT4nTCcsCjc0MTk2PT4nTCcsCjc0MTk3PT4nTCcsCjc0MTk4PT4nTCcsCjc0MTk5PT4nTCcsCjc0MjAwPT4nTCcsCjc0MjAxPT4nTCcsCjc0MjAyPT4nTCcsCjc0MjAzPT4nTCcsCjc0MjA0PT4nTCcsCjc0MjA1PT4nTCcsCjc0MjA2PT4nTCcsCjc0MjA3PT4nTCcsCjc0MjA4PT4nTCcsCjc0MjA5PT4nTCcsCjc0MjEwPT4nTCcsCjc0MjExPT4nTCcsCjc0MjEyPT4nTCcsCjc0MjEzPT4nTCcsCjc0MjE0PT4nTCcsCjc0MjE1PT4nTCcsCjc0MjE2PT4nTCcsCjc0MjE3PT4nTCcsCjc0MjE4PT4nTCcsCjc0MjE5PT4nTCcsCjc0MjIwPT4nTCcsCjc0MjIxPT4nTCcsCjc0MjIyPT4nTCcsCjc0MjIzPT4nTCcsCjc0MjI0PT4nTCcsCjc0MjI1PT4nTCcsCjc0MjI2PT4nTCcsCjc0MjI3PT4nTCcsCjc0MjI4PT4nTCcsCjc0MjI5PT4nTCcsCjc0MjMwPT4nTCcsCjc0MjMxPT4nTCcsCjc0MjMyPT4nTCcsCjc0MjMzPT4nTCcsCjc0MjM0PT4nTCcsCjc0MjM1PT4nTCcsCjc0MjM2PT4nTCcsCjc0MjM3PT4nTCcsCjc0MjM4PT4nTCcsCjc0MjM5PT4nTCcsCjc0MjQwPT4nTCcsCjc0MjQxPT4nTCcsCjc0MjQyPT4nTCcsCjc0MjQzPT4nTCcsCjc0MjQ0PT4nTCcsCjc0MjQ1PT4nTCcsCjc0MjQ2PT4nTCcsCjc0MjQ3PT4nTCcsCjc0MjQ4PT4nTCcsCjc0MjQ5PT4nTCcsCjc0MjUwPT4nTCcsCjc0MjUxPT4nTCcsCjc0MjUyPT4nTCcsCjc0MjUzPT4nTCcsCjc0MjU0PT4nTCcsCjc0MjU1PT4nTCcsCjc0MjU2PT4nTCcsCjc0MjU3PT4nTCcsCjc0MjU4PT4nTCcsCjc0MjU5PT4nTCcsCjc0MjYwPT4nTCcsCjc0MjYxPT4nTCcsCjc0MjYyPT4nTCcsCjc0MjYzPT4nTCcsCjc0MjY0PT4nTCcsCjc0MjY1PT4nTCcsCjc0MjY2PT4nTCcsCjc0MjY3PT4nTCcsCjc0MjY4PT4nTCcsCjc0MjY5PT4nTCcsCjc0MjcwPT4nTCcsCjc0MjcxPT4nTCcsCjc0MjcyPT4nTCcsCjc0MjczPT4nTCcsCjc0Mjc0PT4nTCcsCjc0Mjc1PT4nTCcsCjc0Mjc2PT4nTCcsCjc0Mjc3PT4nTCcsCjc0Mjc4PT4nTCcsCjc0Mjc5PT4nTCcsCjc0MjgwPT4nTCcsCjc0MjgxPT4nTCcsCjc0MjgyPT4nTCcsCjc0MjgzPT4nTCcsCjc0Mjg0PT4nTCcsCjc0Mjg1PT4nTCcsCjc0Mjg2PT4nTCcsCjc0Mjg3PT4nTCcsCjc0Mjg4PT4nTCcsCjc0Mjg5PT4nTCcsCjc0MjkwPT4nTCcsCjc0MjkxPT4nTCcsCjc0MjkyPT4nTCcsCjc0MjkzPT4nTCcsCjc0Mjk0PT4nTCcsCjc0Mjk1PT4nTCcsCjc0Mjk2PT4nTCcsCjc0Mjk3PT4nTCcsCjc0Mjk4PT4nTCcsCjc0Mjk5PT4nTCcsCjc0MzAwPT4nTCcsCjc0MzAxPT4nTCcsCjc0MzAyPT4nTCcsCjc0MzAzPT4nTCcsCjc0MzA0PT4nTCcsCjc0MzA1PT4nTCcsCjc0MzA2PT4nTCcsCjc0MzA3PT4nTCcsCjc0MzA4PT4nTCcsCjc0MzA5PT4nTCcsCjc0MzEwPT4nTCcsCjc0MzExPT4nTCcsCjc0MzEyPT4nTCcsCjc0MzEzPT4nTCcsCjc0MzE0PT4nTCcsCjc0MzE1PT4nTCcsCjc0MzE2PT4nTCcsCjc0MzE3PT4nTCcsCjc0MzE4PT4nTCcsCjc0MzE5PT4nTCcsCjc0MzIwPT4nTCcsCjc0MzIxPT4nTCcsCjc0MzIyPT4nTCcsCjc0MzIzPT4nTCcsCjc0MzI0PT4nTCcsCjc0MzI1PT4nTCcsCjc0MzI2PT4nTCcsCjc0MzI3PT4nTCcsCjc0MzI4PT4nTCcsCjc0MzI5PT4nTCcsCjc0MzMwPT4nTCcsCjc0MzMxPT4nTCcsCjc0MzMyPT4nTCcsCjc0MzMzPT4nTCcsCjc0MzM0PT4nTCcsCjc0MzM1PT4nTCcsCjc0MzM2PT4nTCcsCjc0MzM3PT4nTCcsCjc0MzM4PT4nTCcsCjc0MzM5PT4nTCcsCjc0MzQwPT4nTCcsCjc0MzQxPT4nTCcsCjc0MzQyPT4nTCcsCjc0MzQzPT4nTCcsCjc0MzQ0PT4nTCcsCjc0MzQ1PT4nTCcsCjc0MzQ2PT4nTCcsCjc0MzQ3PT4nTCcsCjc0MzQ4PT4nTCcsCjc0MzQ5PT4nTCcsCjc0MzUwPT4nTCcsCjc0MzUxPT4nTCcsCjc0MzUyPT4nTCcsCjc0MzUzPT4nTCcsCjc0MzU0PT4nTCcsCjc0MzU1PT4nTCcsCjc0MzU2PT4nTCcsCjc0MzU3PT4nTCcsCjc0MzU4PT4nTCcsCjc0MzU5PT4nTCcsCjc0MzYwPT4nTCcsCjc0MzYxPT4nTCcsCjc0MzYyPT4nTCcsCjc0MzYzPT4nTCcsCjc0MzY0PT4nTCcsCjc0MzY1PT4nTCcsCjc0MzY2PT4nTCcsCjc0MzY3PT4nTCcsCjc0MzY4PT4nTCcsCjc0MzY5PT4nTCcsCjc0MzcwPT4nTCcsCjc0MzcxPT4nTCcsCjc0MzcyPT4nTCcsCjc0MzczPT4nTCcsCjc0Mzc0PT4nTCcsCjc0Mzc1PT4nTCcsCjc0Mzc2PT4nTCcsCjc0Mzc3PT4nTCcsCjc0Mzc4PT4nTCcsCjc0Mzc5PT4nTCcsCjc0MzgwPT4nTCcsCjc0MzgxPT4nTCcsCjc0MzgyPT4nTCcsCjc0MzgzPT4nTCcsCjc0Mzg0PT4nTCcsCjc0Mzg1PT4nTCcsCjc0Mzg2PT4nTCcsCjc0Mzg3PT4nTCcsCjc0Mzg4PT4nTCcsCjc0Mzg5PT4nTCcsCjc0MzkwPT4nTCcsCjc0MzkxPT4nTCcsCjc0MzkyPT4nTCcsCjc0MzkzPT4nTCcsCjc0Mzk0PT4nTCcsCjc0Mzk1PT4nTCcsCjc0Mzk2PT4nTCcsCjc0Mzk3PT4nTCcsCjc0Mzk4PT4nTCcsCjc0Mzk5PT4nTCcsCjc0NDAwPT4nTCcsCjc0NDAxPT4nTCcsCjc0NDAyPT4nTCcsCjc0NDAzPT4nTCcsCjc0NDA0PT4nTCcsCjc0NDA1PT4nTCcsCjc0NDA2PT4nTCcsCjc0NDA3PT4nTCcsCjc0NDA4PT4nTCcsCjc0NDA5PT4nTCcsCjc0NDEwPT4nTCcsCjc0NDExPT4nTCcsCjc0NDEyPT4nTCcsCjc0NDEzPT4nTCcsCjc0NDE0PT4nTCcsCjc0NDE1PT4nTCcsCjc0NDE2PT4nTCcsCjc0NDE3PT4nTCcsCjc0NDE4PT4nTCcsCjc0NDE5PT4nTCcsCjc0NDIwPT4nTCcsCjc0NDIxPT4nTCcsCjc0NDIyPT4nTCcsCjc0NDIzPT4nTCcsCjc0NDI0PT4nTCcsCjc0NDI1PT4nTCcsCjc0NDI2PT4nTCcsCjc0NDI3PT4nTCcsCjc0NDI4PT4nTCcsCjc0NDI5PT4nTCcsCjc0NDMwPT4nTCcsCjc0NDMxPT4nTCcsCjc0NDMyPT4nTCcsCjc0NDMzPT4nTCcsCjc0NDM0PT4nTCcsCjc0NDM1PT4nTCcsCjc0NDM2PT4nTCcsCjc0NDM3PT4nTCcsCjc0NDM4PT4nTCcsCjc0NDM5PT4nTCcsCjc0NDQwPT4nTCcsCjc0NDQxPT4nTCcsCjc0NDQyPT4nTCcsCjc0NDQzPT4nTCcsCjc0NDQ0PT4nTCcsCjc0NDQ1PT4nTCcsCjc0NDQ2PT4nTCcsCjc0NDQ3PT4nTCcsCjc0NDQ4PT4nTCcsCjc0NDQ5PT4nTCcsCjc0NDUwPT4nTCcsCjc0NDUxPT4nTCcsCjc0NDUyPT4nTCcsCjc0NDUzPT4nTCcsCjc0NDU0PT4nTCcsCjc0NDU1PT4nTCcsCjc0NDU2PT4nTCcsCjc0NDU3PT4nTCcsCjc0NDU4PT4nTCcsCjc0NDU5PT4nTCcsCjc0NDYwPT4nTCcsCjc0NDYxPT4nTCcsCjc0NDYyPT4nTCcsCjc0NDYzPT4nTCcsCjc0NDY0PT4nTCcsCjc0NDY1PT4nTCcsCjc0NDY2PT4nTCcsCjc0NDY3PT4nTCcsCjc0NDY4PT4nTCcsCjc0NDY5PT4nTCcsCjc0NDcwPT4nTCcsCjc0NDcxPT4nTCcsCjc0NDcyPT4nTCcsCjc0NDczPT4nTCcsCjc0NDc0PT4nTCcsCjc0NDc1PT4nTCcsCjc0NDc2PT4nTCcsCjc0NDc3PT4nTCcsCjc0NDc4PT4nTCcsCjc0NDc5PT4nTCcsCjc0NDgwPT4nTCcsCjc0NDgxPT4nTCcsCjc0NDgyPT4nTCcsCjc0NDgzPT4nTCcsCjc0NDg0PT4nTCcsCjc0NDg1PT4nTCcsCjc0NDg2PT4nTCcsCjc0NDg3PT4nTCcsCjc0NDg4PT4nTCcsCjc0NDg5PT4nTCcsCjc0NDkwPT4nTCcsCjc0NDkxPT4nTCcsCjc0NDkyPT4nTCcsCjc0NDkzPT4nTCcsCjc0NDk0PT4nTCcsCjc0NDk1PT4nTCcsCjc0NDk2PT4nTCcsCjc0NDk3PT4nTCcsCjc0NDk4PT4nTCcsCjc0NDk5PT4nTCcsCjc0NTAwPT4nTCcsCjc0NTAxPT4nTCcsCjc0NTAyPT4nTCcsCjc0NTAzPT4nTCcsCjc0NTA0PT4nTCcsCjc0NTA1PT4nTCcsCjc0NTA2PT4nTCcsCjc0NTA3PT4nTCcsCjc0NTA4PT4nTCcsCjc0NTA5PT4nTCcsCjc0NTEwPT4nTCcsCjc0NTExPT4nTCcsCjc0NTEyPT4nTCcsCjc0NTEzPT4nTCcsCjc0NTE0PT4nTCcsCjc0NTE1PT4nTCcsCjc0NTE2PT4nTCcsCjc0NTE3PT4nTCcsCjc0NTE4PT4nTCcsCjc0NTE5PT4nTCcsCjc0NTIwPT4nTCcsCjc0NTIxPT4nTCcsCjc0NTIyPT4nTCcsCjc0NTIzPT4nTCcsCjc0NTI0PT4nTCcsCjc0NTI1PT4nTCcsCjc0NTI2PT4nTCcsCjc0NTI3PT4nTCcsCjc0NTI4PT4nTCcsCjc0NTI5PT4nTCcsCjc0NTMwPT4nTCcsCjc0NTMxPT4nTCcsCjc0NTMyPT4nTCcsCjc0NTMzPT4nTCcsCjc0NTM0PT4nTCcsCjc0NTM1PT4nTCcsCjc0NTM2PT4nTCcsCjc0NTM3PT4nTCcsCjc0NTM4PT4nTCcsCjc0NTM5PT4nTCcsCjc0NTQwPT4nTCcsCjc0NTQxPT4nTCcsCjc0NTQyPT4nTCcsCjc0NTQzPT4nTCcsCjc0NTQ0PT4nTCcsCjc0NTQ1PT4nTCcsCjc0NTQ2PT4nTCcsCjc0NTQ3PT4nTCcsCjc0NTQ4PT4nTCcsCjc0NTQ5PT4nTCcsCjc0NTUwPT4nTCcsCjc0NTUxPT4nTCcsCjc0NTUyPT4nTCcsCjc0NTUzPT4nTCcsCjc0NTU0PT4nTCcsCjc0NTU1PT4nTCcsCjc0NTU2PT4nTCcsCjc0NTU3PT4nTCcsCjc0NTU4PT4nTCcsCjc0NTU5PT4nTCcsCjc0NTYwPT4nTCcsCjc0NTYxPT4nTCcsCjc0NTYyPT4nTCcsCjc0NTYzPT4nTCcsCjc0NTY0PT4nTCcsCjc0NTY1PT4nTCcsCjc0NTY2PT4nTCcsCjc0NTY3PT4nTCcsCjc0NTY4PT4nTCcsCjc0NTY5PT4nTCcsCjc0NTcwPT4nTCcsCjc0NTcxPT4nTCcsCjc0NTcyPT4nTCcsCjc0NTczPT4nTCcsCjc0NTc0PT4nTCcsCjc0NTc1PT4nTCcsCjc0NTc2PT4nTCcsCjc0NTc3PT4nTCcsCjc0NTc4PT4nTCcsCjc0NTc5PT4nTCcsCjc0NTgwPT4nTCcsCjc0NTgxPT4nTCcsCjc0NTgyPT4nTCcsCjc0NTgzPT4nTCcsCjc0NTg0PT4nTCcsCjc0NTg1PT4nTCcsCjc0NTg2PT4nTCcsCjc0NTg3PT4nTCcsCjc0NTg4PT4nTCcsCjc0NTg5PT4nTCcsCjc0NTkwPT4nTCcsCjc0NTkxPT4nTCcsCjc0NTkyPT4nTCcsCjc0NTkzPT4nTCcsCjc0NTk0PT4nTCcsCjc0NTk1PT4nTCcsCjc0NTk2PT4nTCcsCjc0NTk3PT4nTCcsCjc0NTk4PT4nTCcsCjc0NTk5PT4nTCcsCjc0NjAwPT4nTCcsCjc0NjAxPT4nTCcsCjc0NjAyPT4nTCcsCjc0NjAzPT4nTCcsCjc0NjA0PT4nTCcsCjc0NjA1PT4nTCcsCjc0NjA2PT4nTCcsCjc0NzUyPT4nTCcsCjc0NzUzPT4nTCcsCjc0NzU0PT4nTCcsCjc0NzU1PT4nTCcsCjc0NzU2PT4nTCcsCjc0NzU3PT4nTCcsCjc0NzU4PT4nTCcsCjc0NzU5PT4nTCcsCjc0NzYwPT4nTCcsCjc0NzYxPT4nTCcsCjc0NzYyPT4nTCcsCjc0NzYzPT4nTCcsCjc0NzY0PT4nTCcsCjc0NzY1PT4nTCcsCjc0NzY2PT4nTCcsCjc0NzY3PT4nTCcsCjc0NzY4PT4nTCcsCjc0NzY5PT4nTCcsCjc0NzcwPT4nTCcsCjc0NzcxPT4nTCcsCjc0NzcyPT4nTCcsCjc0NzczPT4nTCcsCjc0Nzc0PT4nTCcsCjc0Nzc1PT4nTCcsCjc0Nzc2PT4nTCcsCjc0Nzc3PT4nTCcsCjc0Nzc4PT4nTCcsCjc0Nzc5PT4nTCcsCjc0NzgwPT4nTCcsCjc0NzgxPT4nTCcsCjc0NzgyPT4nTCcsCjc0NzgzPT4nTCcsCjc0Nzg0PT4nTCcsCjc0Nzg1PT4nTCcsCjc0Nzg2PT4nTCcsCjc0Nzg3PT4nTCcsCjc0Nzg4PT4nTCcsCjc0Nzg5PT4nTCcsCjc0NzkwPT4nTCcsCjc0NzkxPT4nTCcsCjc0NzkyPT4nTCcsCjc0NzkzPT4nTCcsCjc0Nzk0PT4nTCcsCjc0Nzk1PT4nTCcsCjc0Nzk2PT4nTCcsCjc0Nzk3PT4nTCcsCjc0Nzk4PT4nTCcsCjc0Nzk5PT4nTCcsCjc0ODAwPT4nTCcsCjc0ODAxPT4nTCcsCjc0ODAyPT4nTCcsCjc0ODAzPT4nTCcsCjc0ODA0PT4nTCcsCjc0ODA1PT4nTCcsCjc0ODA2PT4nTCcsCjc0ODA3PT4nTCcsCjc0ODA4PT4nTCcsCjc0ODA5PT4nTCcsCjc0ODEwPT4nTCcsCjc0ODExPT4nTCcsCjc0ODEyPT4nTCcsCjc0ODEzPT4nTCcsCjc0ODE0PT4nTCcsCjc0ODE1PT4nTCcsCjc0ODE2PT4nTCcsCjc0ODE3PT4nTCcsCjc0ODE4PT4nTCcsCjc0ODE5PT4nTCcsCjc0ODIwPT4nTCcsCjc0ODIxPT4nTCcsCjc0ODIyPT4nTCcsCjc0ODIzPT4nTCcsCjc0ODI0PT4nTCcsCjc0ODI1PT4nTCcsCjc0ODI2PT4nTCcsCjc0ODI3PT4nTCcsCjc0ODI4PT4nTCcsCjc0ODI5PT4nTCcsCjc0ODMwPT4nTCcsCjc0ODMxPT4nTCcsCjc0ODMyPT4nTCcsCjc0ODMzPT4nTCcsCjc0ODM0PT4nTCcsCjc0ODM1PT4nTCcsCjc0ODM2PT4nTCcsCjc0ODM3PT4nTCcsCjc0ODM4PT4nTCcsCjc0ODM5PT4nTCcsCjc0ODQwPT4nTCcsCjc0ODQxPT4nTCcsCjc0ODQyPT4nTCcsCjc0ODQzPT4nTCcsCjc0ODQ0PT4nTCcsCjc0ODQ1PT4nTCcsCjc0ODQ2PT4nTCcsCjc0ODQ3PT4nTCcsCjc0ODQ4PT4nTCcsCjc0ODQ5PT4nTCcsCjc0ODUwPT4nTCcsCjc0ODY0PT4nTCcsCjc0ODY1PT4nTCcsCjc0ODY2PT4nTCcsCjc0ODY3PT4nTCcsCjExODc4ND0+J0wnLAoxMTg3ODU9PidMJywKMTE4Nzg2PT4nTCcsCjExODc4Nz0+J0wnLAoxMTg3ODg9PidMJywKMTE4Nzg5PT4nTCcsCjExODc5MD0+J0wnLAoxMTg3OTE9PidMJywKMTE4NzkyPT4nTCcsCjExODc5Mz0+J0wnLAoxMTg3OTQ9PidMJywKMTE4Nzk1PT4nTCcsCjExODc5Nj0+J0wnLAoxMTg3OTc9PidMJywKMTE4Nzk4PT4nTCcsCjExODc5OT0+J0wnLAoxMTg4MDA9PidMJywKMTE4ODAxPT4nTCcsCjExODgwMj0+J0wnLAoxMTg4MDM9PidMJywKMTE4ODA0PT4nTCcsCjExODgwNT0+J0wnLAoxMTg4MDY9PidMJywKMTE4ODA3PT4nTCcsCjExODgwOD0+J0wnLAoxMTg4MDk9PidMJywKMTE4ODEwPT4nTCcsCjExODgxMT0+J0wnLAoxMTg4MTI9PidMJywKMTE4ODEzPT4nTCcsCjExODgxND0+J0wnLAoxMTg4MTU9PidMJywKMTE4ODE2PT4nTCcsCjExODgxNz0+J0wnLAoxMTg4MTg9PidMJywKMTE4ODE5PT4nTCcsCjExODgyMD0+J0wnLAoxMTg4MjE9PidMJywKMTE4ODIyPT4nTCcsCjExODgyMz0+J0wnLAoxMTg4MjQ9PidMJywKMTE4ODI1PT4nTCcsCjExODgyNj0+J0wnLAoxMTg4Mjc9PidMJywKMTE4ODI4PT4nTCcsCjExODgyOT0+J0wnLAoxMTg4MzA9PidMJywKMTE4ODMxPT4nTCcsCjExODgzMj0+J0wnLAoxMTg4MzM9PidMJywKMTE4ODM0PT4nTCcsCjExODgzNT0+J0wnLAoxMTg4MzY9PidMJywKMTE4ODM3PT4nTCcsCjExODgzOD0+J0wnLAoxMTg4Mzk9PidMJywKMTE4ODQwPT4nTCcsCjExODg0MT0+J0wnLAoxMTg4NDI9PidMJywKMTE4ODQzPT4nTCcsCjExODg0ND0+J0wnLAoxMTg4NDU9PidMJywKMTE4ODQ2PT4nTCcsCjExODg0Nz0+J0wnLAoxMTg4NDg9PidMJywKMTE4ODQ5PT4nTCcsCjExODg1MD0+J0wnLAoxMTg4NTE9PidMJywKMTE4ODUyPT4nTCcsCjExODg1Mz0+J0wnLAoxMTg4NTQ9PidMJywKMTE4ODU1PT4nTCcsCjExODg1Nj0+J0wnLAoxMTg4NTc9PidMJywKMTE4ODU4PT4nTCcsCjExODg1OT0+J0wnLAoxMTg4NjA9PidMJywKMTE4ODYxPT4nTCcsCjExODg2Mj0+J0wnLAoxMTg4NjM9PidMJywKMTE4ODY0PT4nTCcsCjExODg2NT0+J0wnLAoxMTg4NjY9PidMJywKMTE4ODY3PT4nTCcsCjExODg2OD0+J0wnLAoxMTg4Njk9PidMJywKMTE4ODcwPT4nTCcsCjExODg3MT0+J0wnLAoxMTg4NzI9PidMJywKMTE4ODczPT4nTCcsCjExODg3ND0+J0wnLAoxMTg4NzU9PidMJywKMTE4ODc2PT4nTCcsCjExODg3Nz0+J0wnLAoxMTg4Nzg9PidMJywKMTE4ODc5PT4nTCcsCjExODg4MD0+J0wnLAoxMTg4ODE9PidMJywKMTE4ODgyPT4nTCcsCjExODg4Mz0+J0wnLAoxMTg4ODQ9PidMJywKMTE4ODg1PT4nTCcsCjExODg4Nj0+J0wnLAoxMTg4ODc9PidMJywKMTE4ODg4PT4nTCcsCjExODg4OT0+J0wnLAoxMTg4OTA9PidMJywKMTE4ODkxPT4nTCcsCjExODg5Mj0+J0wnLAoxMTg4OTM9PidMJywKMTE4ODk0PT4nTCcsCjExODg5NT0+J0wnLAoxMTg4OTY9PidMJywKMTE4ODk3PT4nTCcsCjExODg5OD0+J0wnLAoxMTg4OTk9PidMJywKMTE4OTAwPT4nTCcsCjExODkwMT0+J0wnLAoxMTg5MDI9PidMJywKMTE4OTAzPT4nTCcsCjExODkwND0+J0wnLAoxMTg5MDU9PidMJywKMTE4OTA2PT4nTCcsCjExODkwNz0+J0wnLAoxMTg5MDg9PidMJywKMTE4OTA5PT4nTCcsCjExODkxMD0+J0wnLAoxMTg5MTE9PidMJywKMTE4OTEyPT4nTCcsCjExODkxMz0+J0wnLAoxMTg5MTQ9PidMJywKMTE4OTE1PT4nTCcsCjExODkxNj0+J0wnLAoxMTg5MTc9PidMJywKMTE4OTE4PT4nTCcsCjExODkxOT0+J0wnLAoxMTg5MjA9PidMJywKMTE4OTIxPT4nTCcsCjExODkyMj0+J0wnLAoxMTg5MjM9PidMJywKMTE4OTI0PT4nTCcsCjExODkyNT0+J0wnLAoxMTg5MjY9PidMJywKMTE4OTI3PT4nTCcsCjExODkyOD0+J0wnLAoxMTg5Mjk9PidMJywKMTE4OTMwPT4nTCcsCjExODkzMT0+J0wnLAoxMTg5MzI9PidMJywKMTE4OTMzPT4nTCcsCjExODkzND0+J0wnLAoxMTg5MzU9PidMJywKMTE4OTM2PT4nTCcsCjExODkzNz0+J0wnLAoxMTg5Mzg9PidMJywKMTE4OTM5PT4nTCcsCjExODk0MD0+J0wnLAoxMTg5NDE9PidMJywKMTE4OTQyPT4nTCcsCjExODk0Mz0+J0wnLAoxMTg5NDQ9PidMJywKMTE4OTQ1PT4nTCcsCjExODk0Nj0+J0wnLAoxMTg5NDc9PidMJywKMTE4OTQ4PT4nTCcsCjExODk0OT0+J0wnLAoxMTg5NTA9PidMJywKMTE4OTUxPT4nTCcsCjExODk1Mj0+J0wnLAoxMTg5NTM9PidMJywKMTE4OTU0PT4nTCcsCjExODk1NT0+J0wnLAoxMTg5NTY9PidMJywKMTE4OTU3PT4nTCcsCjExODk1OD0+J0wnLAoxMTg5NTk9PidMJywKMTE4OTYwPT4nTCcsCjExODk2MT0+J0wnLAoxMTg5NjI9PidMJywKMTE4OTYzPT4nTCcsCjExODk2ND0+J0wnLAoxMTg5NjU9PidMJywKMTE4OTY2PT4nTCcsCjExODk2Nz0+J0wnLAoxMTg5Njg9PidMJywKMTE4OTY5PT4nTCcsCjExODk3MD0+J0wnLAoxMTg5NzE9PidMJywKMTE4OTcyPT4nTCcsCjExODk3Mz0+J0wnLAoxMTg5NzQ9PidMJywKMTE4OTc1PT4nTCcsCjExODk3Nj0+J0wnLAoxMTg5Nzc9PidMJywKMTE4OTc4PT4nTCcsCjExODk3OT0+J0wnLAoxMTg5ODA9PidMJywKMTE4OTgxPT4nTCcsCjExODk4Mj0+J0wnLAoxMTg5ODM9PidMJywKMTE4OTg0PT4nTCcsCjExODk4NT0+J0wnLAoxMTg5ODY9PidMJywKMTE4OTg3PT4nTCcsCjExODk4OD0+J0wnLAoxMTg5ODk9PidMJywKMTE4OTkwPT4nTCcsCjExODk5MT0+J0wnLAoxMTg5OTI9PidMJywKMTE4OTkzPT4nTCcsCjExODk5ND0+J0wnLAoxMTg5OTU9PidMJywKMTE4OTk2PT4nTCcsCjExODk5Nz0+J0wnLAoxMTg5OTg9PidMJywKMTE4OTk5PT4nTCcsCjExOTAwMD0+J0wnLAoxMTkwMDE9PidMJywKMTE5MDAyPT4nTCcsCjExOTAwMz0+J0wnLAoxMTkwMDQ9PidMJywKMTE5MDA1PT4nTCcsCjExOTAwNj0+J0wnLAoxMTkwMDc9PidMJywKMTE5MDA4PT4nTCcsCjExOTAwOT0+J0wnLAoxMTkwMTA9PidMJywKMTE5MDExPT4nTCcsCjExOTAxMj0+J0wnLAoxMTkwMTM9PidMJywKMTE5MDE0PT4nTCcsCjExOTAxNT0+J0wnLAoxMTkwMTY9PidMJywKMTE5MDE3PT4nTCcsCjExOTAxOD0+J0wnLAoxMTkwMTk9PidMJywKMTE5MDIwPT4nTCcsCjExOTAyMT0+J0wnLAoxMTkwMjI9PidMJywKMTE5MDIzPT4nTCcsCjExOTAyND0+J0wnLAoxMTkwMjU9PidMJywKMTE5MDI2PT4nTCcsCjExOTAyNz0+J0wnLAoxMTkwMjg9PidMJywKMTE5MDI5PT4nTCcsCjExOTA0MD0+J0wnLAoxMTkwNDE9PidMJywKMTE5MDQyPT4nTCcsCjExOTA0Mz0+J0wnLAoxMTkwNDQ9PidMJywKMTE5MDQ1PT4nTCcsCjExOTA0Nj0+J0wnLAoxMTkwNDc9PidMJywKMTE5MDQ4PT4nTCcsCjExOTA0OT0+J0wnLAoxMTkwNTA9PidMJywKMTE5MDUxPT4nTCcsCjExOTA1Mj0+J0wnLAoxMTkwNTM9PidMJywKMTE5MDU0PT4nTCcsCjExOTA1NT0+J0wnLAoxMTkwNTY9PidMJywKMTE5MDU3PT4nTCcsCjExOTA1OD0+J0wnLAoxMTkwNTk9PidMJywKMTE5MDYwPT4nTCcsCjExOTA2MT0+J0wnLAoxMTkwNjI9PidMJywKMTE5MDYzPT4nTCcsCjExOTA2ND0+J0wnLAoxMTkwNjU9PidMJywKMTE5MDY2PT4nTCcsCjExOTA2Nz0+J0wnLAoxMTkwNjg9PidMJywKMTE5MDY5PT4nTCcsCjExOTA3MD0+J0wnLAoxMTkwNzE9PidMJywKMTE5MDcyPT4nTCcsCjExOTA3Mz0+J0wnLAoxMTkwNzQ9PidMJywKMTE5MDc1PT4nTCcsCjExOTA3Nj0+J0wnLAoxMTkwNzc9PidMJywKMTE5MDc4PT4nTCcsCjExOTA4Mj0+J0wnLAoxMTkwODM9PidMJywKMTE5MDg0PT4nTCcsCjExOTA4NT0+J0wnLAoxMTkwODY9PidMJywKMTE5MDg3PT4nTCcsCjExOTA4OD0+J0wnLAoxMTkwODk9PidMJywKMTE5MDkwPT4nTCcsCjExOTA5MT0+J0wnLAoxMTkwOTI9PidMJywKMTE5MDkzPT4nTCcsCjExOTA5ND0+J0wnLAoxMTkwOTU9PidMJywKMTE5MDk2PT4nTCcsCjExOTA5Nz0+J0wnLAoxMTkwOTg9PidMJywKMTE5MDk5PT4nTCcsCjExOTEwMD0+J0wnLAoxMTkxMDE9PidMJywKMTE5MTAyPT4nTCcsCjExOTEwMz0+J0wnLAoxMTkxMDQ9PidMJywKMTE5MTA1PT4nTCcsCjExOTEwNj0+J0wnLAoxMTkxMDc9PidMJywKMTE5MTA4PT4nTCcsCjExOTEwOT0+J0wnLAoxMTkxMTA9PidMJywKMTE5MTExPT4nTCcsCjExOTExMj0+J0wnLAoxMTkxMTM9PidMJywKMTE5MTE0PT4nTCcsCjExOTExNT0+J0wnLAoxMTkxMTY9PidMJywKMTE5MTE3PT4nTCcsCjExOTExOD0+J0wnLAoxMTkxMTk9PidMJywKMTE5MTIwPT4nTCcsCjExOTEyMT0+J0wnLAoxMTkxMjI9PidMJywKMTE5MTIzPT4nTCcsCjExOTEyND0+J0wnLAoxMTkxMjU9PidMJywKMTE5MTI2PT4nTCcsCjExOTEyNz0+J0wnLAoxMTkxMjg9PidMJywKMTE5MTI5PT4nTCcsCjExOTEzMD0+J0wnLAoxMTkxMzE9PidMJywKMTE5MTMyPT4nTCcsCjExOTEzMz0+J0wnLAoxMTkxMzQ9PidMJywKMTE5MTM1PT4nTCcsCjExOTEzNj0+J0wnLAoxMTkxMzc9PidMJywKMTE5MTM4PT4nTCcsCjExOTEzOT0+J0wnLAoxMTkxNDA9PidMJywKMTE5MTQxPT4nTCcsCjExOTE0Mj0+J0wnLAoxMTkxNDM9PidOU00nLAoxMTkxNDQ9PidOU00nLAoxMTkxNDU9PidOU00nLAoxMTkxNDY9PidMJywKMTE5MTQ3PT4nTCcsCjExOTE0OD0+J0wnLAoxMTkxNDk9PidMJywKMTE5MTUwPT4nTCcsCjExOTE1MT0+J0wnLAoxMTkxNTI9PidMJywKMTE5MTUzPT4nTCcsCjExOTE1ND0+J0wnLAoxMTkxNTU9PidCTicsCjExOTE1Nj0+J0JOJywKMTE5MTU3PT4nQk4nLAoxMTkxNTg9PidCTicsCjExOTE1OT0+J0JOJywKMTE5MTYwPT4nQk4nLAoxMTkxNjE9PidCTicsCjExOTE2Mj0+J0JOJywKMTE5MTYzPT4nTlNNJywKMTE5MTY0PT4nTlNNJywKMTE5MTY1PT4nTlNNJywKMTE5MTY2PT4nTlNNJywKMTE5MTY3PT4nTlNNJywKMTE5MTY4PT4nTlNNJywKMTE5MTY5PT4nTlNNJywKMTE5MTcwPT4nTlNNJywKMTE5MTcxPT4nTCcsCjExOTE3Mj0+J0wnLAoxMTkxNzM9PidOU00nLAoxMTkxNzQ9PidOU00nLAoxMTkxNzU9PidOU00nLAoxMTkxNzY9PidOU00nLAoxMTkxNzc9PidOU00nLAoxMTkxNzg9PidOU00nLAoxMTkxNzk9PidOU00nLAoxMTkxODA9PidMJywKMTE5MTgxPT4nTCcsCjExOTE4Mj0+J0wnLAoxMTkxODM9PidMJywKMTE5MTg0PT4nTCcsCjExOTE4NT0+J0wnLAoxMTkxODY9PidMJywKMTE5MTg3PT4nTCcsCjExOTE4OD0+J0wnLAoxMTkxODk9PidMJywKMTE5MTkwPT4nTCcsCjExOTE5MT0+J0wnLAoxMTkxOTI9PidMJywKMTE5MTkzPT4nTCcsCjExOTE5ND0+J0wnLAoxMTkxOTU9PidMJywKMTE5MTk2PT4nTCcsCjExOTE5Nz0+J0wnLAoxMTkxOTg9PidMJywKMTE5MTk5PT4nTCcsCjExOTIwMD0+J0wnLAoxMTkyMDE9PidMJywKMTE5MjAyPT4nTCcsCjExOTIwMz0+J0wnLAoxMTkyMDQ9PidMJywKMTE5MjA1PT4nTCcsCjExOTIwNj0+J0wnLAoxMTkyMDc9PidMJywKMTE5MjA4PT4nTCcsCjExOTIwOT0+J0wnLAoxMTkyMTA9PidOU00nLAoxMTkyMTE9PidOU00nLAoxMTkyMTI9PidOU00nLAoxMTkyMTM9PidOU00nLAoxMTkyMTQ9PidMJywKMTE5MjE1PT4nTCcsCjExOTIxNj0+J0wnLAoxMTkyMTc9PidMJywKMTE5MjE4PT4nTCcsCjExOTIxOT0+J0wnLAoxMTkyMjA9PidMJywKMTE5MjIxPT4nTCcsCjExOTIyMj0+J0wnLAoxMTkyMjM9PidMJywKMTE5MjI0PT4nTCcsCjExOTIyNT0+J0wnLAoxMTkyMjY9PidMJywKMTE5MjI3PT4nTCcsCjExOTIyOD0+J0wnLAoxMTkyMjk9PidMJywKMTE5MjMwPT4nTCcsCjExOTIzMT0+J0wnLAoxMTkyMzI9PidMJywKMTE5MjMzPT4nTCcsCjExOTIzND0+J0wnLAoxMTkyMzU9PidMJywKMTE5MjM2PT4nTCcsCjExOTIzNz0+J0wnLAoxMTkyMzg9PidMJywKMTE5MjM5PT4nTCcsCjExOTI0MD0+J0wnLAoxMTkyNDE9PidMJywKMTE5MjQyPT4nTCcsCjExOTI0Mz0+J0wnLAoxMTkyNDQ9PidMJywKMTE5MjQ1PT4nTCcsCjExOTI0Nj0+J0wnLAoxMTkyNDc9PidMJywKMTE5MjQ4PT4nTCcsCjExOTI0OT0+J0wnLAoxMTkyNTA9PidMJywKMTE5MjUxPT4nTCcsCjExOTI1Mj0+J0wnLAoxMTkyNTM9PidMJywKMTE5MjU0PT4nTCcsCjExOTI1NT0+J0wnLAoxMTkyNTY9PidMJywKMTE5MjU3PT4nTCcsCjExOTI1OD0+J0wnLAoxMTkyNTk9PidMJywKMTE5MjYwPT4nTCcsCjExOTI2MT0+J0wnLAoxMTkyOTY9PidPTicsCjExOTI5Nz0+J09OJywKMTE5Mjk4PT4nT04nLAoxMTkyOTk9PidPTicsCjExOTMwMD0+J09OJywKMTE5MzAxPT4nT04nLAoxMTkzMDI9PidPTicsCjExOTMwMz0+J09OJywKMTE5MzA0PT4nT04nLAoxMTkzMDU9PidPTicsCjExOTMwNj0+J09OJywKMTE5MzA3PT4nT04nLAoxMTkzMDg9PidPTicsCjExOTMwOT0+J09OJywKMTE5MzEwPT4nT04nLAoxMTkzMTE9PidPTicsCjExOTMxMj0+J09OJywKMTE5MzEzPT4nT04nLAoxMTkzMTQ9PidPTicsCjExOTMxNT0+J09OJywKMTE5MzE2PT4nT04nLAoxMTkzMTc9PidPTicsCjExOTMxOD0+J09OJywKMTE5MzE5PT4nT04nLAoxMTkzMjA9PidPTicsCjExOTMyMT0+J09OJywKMTE5MzIyPT4nT04nLAoxMTkzMjM9PidPTicsCjExOTMyND0+J09OJywKMTE5MzI1PT4nT04nLAoxMTkzMjY9PidPTicsCjExOTMyNz0+J09OJywKMTE5MzI4PT4nT04nLAoxMTkzMjk9PidPTicsCjExOTMzMD0+J09OJywKMTE5MzMxPT4nT04nLAoxMTkzMzI9PidPTicsCjExOTMzMz0+J09OJywKMTE5MzM0PT4nT04nLAoxMTkzMzU9PidPTicsCjExOTMzNj0+J09OJywKMTE5MzM3PT4nT04nLAoxMTkzMzg9PidPTicsCjExOTMzOT0+J09OJywKMTE5MzQwPT4nT04nLAoxMTkzNDE9PidPTicsCjExOTM0Mj0+J09OJywKMTE5MzQzPT4nT04nLAoxMTkzNDQ9PidPTicsCjExOTM0NT0+J09OJywKMTE5MzQ2PT4nT04nLAoxMTkzNDc9PidPTicsCjExOTM0OD0+J09OJywKMTE5MzQ5PT4nT04nLAoxMTkzNTA9PidPTicsCjExOTM1MT0+J09OJywKMTE5MzUyPT4nT04nLAoxMTkzNTM9PidPTicsCjExOTM1ND0+J09OJywKMTE5MzU1PT4nT04nLAoxMTkzNTY9PidPTicsCjExOTM1Nz0+J09OJywKMTE5MzU4PT4nT04nLAoxMTkzNTk9PidPTicsCjExOTM2MD0+J09OJywKMTE5MzYxPT4nT04nLAoxMTkzNjI9PidOU00nLAoxMTkzNjM9PidOU00nLAoxMTkzNjQ9PidOU00nLAoxMTkzNjU9PidPTicsCjExOTU1Mj0+J09OJywKMTE5NTUzPT4nT04nLAoxMTk1NTQ9PidPTicsCjExOTU1NT0+J09OJywKMTE5NTU2PT4nT04nLAoxMTk1NTc9PidPTicsCjExOTU1OD0+J09OJywKMTE5NTU5PT4nT04nLAoxMTk1NjA9PidPTicsCjExOTU2MT0+J09OJywKMTE5NTYyPT4nT04nLAoxMTk1NjM9PidPTicsCjExOTU2ND0+J09OJywKMTE5NTY1PT4nT04nLAoxMTk1NjY9PidPTicsCjExOTU2Nz0+J09OJywKMTE5NTY4PT4nT04nLAoxMTk1Njk9PidPTicsCjExOTU3MD0+J09OJywKMTE5NTcxPT4nT04nLAoxMTk1NzI9PidPTicsCjExOTU3Mz0+J09OJywKMTE5NTc0PT4nT04nLAoxMTk1NzU9PidPTicsCjExOTU3Nj0+J09OJywKMTE5NTc3PT4nT04nLAoxMTk1Nzg9PidPTicsCjExOTU3OT0+J09OJywKMTE5NTgwPT4nT04nLAoxMTk1ODE9PidPTicsCjExOTU4Mj0+J09OJywKMTE5NTgzPT4nT04nLAoxMTk1ODQ9PidPTicsCjExOTU4NT0+J09OJywKMTE5NTg2PT4nT04nLAoxMTk1ODc9PidPTicsCjExOTU4OD0+J09OJywKMTE5NTg5PT4nT04nLAoxMTk1OTA9PidPTicsCjExOTU5MT0+J09OJywKMTE5NTkyPT4nT04nLAoxMTk1OTM9PidPTicsCjExOTU5ND0+J09OJywKMTE5NTk1PT4nT04nLAoxMTk1OTY9PidPTicsCjExOTU5Nz0+J09OJywKMTE5NTk4PT4nT04nLAoxMTk1OTk9PidPTicsCjExOTYwMD0+J09OJywKMTE5NjAxPT4nT04nLAoxMTk2MDI9PidPTicsCjExOTYwMz0+J09OJywKMTE5NjA0PT4nT04nLAoxMTk2MDU9PidPTicsCjExOTYwNj0+J09OJywKMTE5NjA3PT4nT04nLAoxMTk2MDg9PidPTicsCjExOTYwOT0+J09OJywKMTE5NjEwPT4nT04nLAoxMTk2MTE9PidPTicsCjExOTYxMj0+J09OJywKMTE5NjEzPT4nT04nLAoxMTk2MTQ9PidPTicsCjExOTYxNT0+J09OJywKMTE5NjE2PT4nT04nLAoxMTk2MTc9PidPTicsCjExOTYxOD0+J09OJywKMTE5NjE5PT4nT04nLAoxMTk2MjA9PidPTicsCjExOTYyMT0+J09OJywKMTE5NjIyPT4nT04nLAoxMTk2MjM9PidPTicsCjExOTYyND0+J09OJywKMTE5NjI1PT4nT04nLAoxMTk2MjY9PidPTicsCjExOTYyNz0+J09OJywKMTE5NjI4PT4nT04nLAoxMTk2Mjk9PidPTicsCjExOTYzMD0+J09OJywKMTE5NjMxPT4nT04nLAoxMTk2MzI9PidPTicsCjExOTYzMz0+J09OJywKMTE5NjM0PT4nT04nLAoxMTk2MzU9PidPTicsCjExOTYzNj0+J09OJywKMTE5NjM3PT4nT04nLAoxMTk2Mzg9PidPTicsCjExOTY0OD0+J0wnLAoxMTk2NDk9PidMJywKMTE5NjUwPT4nTCcsCjExOTY1MT0+J0wnLAoxMTk2NTI9PidMJywKMTE5NjUzPT4nTCcsCjExOTY1ND0+J0wnLAoxMTk2NTU9PidMJywKMTE5NjU2PT4nTCcsCjExOTY1Nz0+J0wnLAoxMTk2NTg9PidMJywKMTE5NjU5PT4nTCcsCjExOTY2MD0+J0wnLAoxMTk2NjE9PidMJywKMTE5NjYyPT4nTCcsCjExOTY2Mz0+J0wnLAoxMTk2NjQ9PidMJywKMTE5NjY1PT4nTCcsCjExOTgwOD0+J0wnLAoxMTk4MDk9PidMJywKMTE5ODEwPT4nTCcsCjExOTgxMT0+J0wnLAoxMTk4MTI9PidMJywKMTE5ODEzPT4nTCcsCjExOTgxND0+J0wnLAoxMTk4MTU9PidMJywKMTE5ODE2PT4nTCcsCjExOTgxNz0+J0wnLAoxMTk4MTg9PidMJywKMTE5ODE5PT4nTCcsCjExOTgyMD0+J0wnLAoxMTk4MjE9PidMJywKMTE5ODIyPT4nTCcsCjExOTgyMz0+J0wnLAoxMTk4MjQ9PidMJywKMTE5ODI1PT4nTCcsCjExOTgyNj0+J0wnLAoxMTk4Mjc9PidMJywKMTE5ODI4PT4nTCcsCjExOTgyOT0+J0wnLAoxMTk4MzA9PidMJywKMTE5ODMxPT4nTCcsCjExOTgzMj0+J0wnLAoxMTk4MzM9PidMJywKMTE5ODM0PT4nTCcsCjExOTgzNT0+J0wnLAoxMTk4MzY9PidMJywKMTE5ODM3PT4nTCcsCjExOTgzOD0+J0wnLAoxMTk4Mzk9PidMJywKMTE5ODQwPT4nTCcsCjExOTg0MT0+J0wnLAoxMTk4NDI9PidMJywKMTE5ODQzPT4nTCcsCjExOTg0ND0+J0wnLAoxMTk4NDU9PidMJywKMTE5ODQ2PT4nTCcsCjExOTg0Nz0+J0wnLAoxMTk4NDg9PidMJywKMTE5ODQ5PT4nTCcsCjExOTg1MD0+J0wnLAoxMTk4NTE9PidMJywKMTE5ODUyPT4nTCcsCjExOTg1Mz0+J0wnLAoxMTk4NTQ9PidMJywKMTE5ODU1PT4nTCcsCjExOTg1Nj0+J0wnLAoxMTk4NTc9PidMJywKMTE5ODU4PT4nTCcsCjExOTg1OT0+J0wnLAoxMTk4NjA9PidMJywKMTE5ODYxPT4nTCcsCjExOTg2Mj0+J0wnLAoxMTk4NjM9PidMJywKMTE5ODY0PT4nTCcsCjExOTg2NT0+J0wnLAoxMTk4NjY9PidMJywKMTE5ODY3PT4nTCcsCjExOTg2OD0+J0wnLAoxMTk4Njk9PidMJywKMTE5ODcwPT4nTCcsCjExOTg3MT0+J0wnLAoxMTk4NzI9PidMJywKMTE5ODczPT4nTCcsCjExOTg3ND0+J0wnLAoxMTk4NzU9PidMJywKMTE5ODc2PT4nTCcsCjExOTg3Nz0+J0wnLAoxMTk4Nzg9PidMJywKMTE5ODc5PT4nTCcsCjExOTg4MD0+J0wnLAoxMTk4ODE9PidMJywKMTE5ODgyPT4nTCcsCjExOTg4Mz0+J0wnLAoxMTk4ODQ9PidMJywKMTE5ODg1PT4nTCcsCjExOTg4Nj0+J0wnLAoxMTk4ODc9PidMJywKMTE5ODg4PT4nTCcsCjExOTg4OT0+J0wnLAoxMTk4OTA9PidMJywKMTE5ODkxPT4nTCcsCjExOTg5Mj0+J0wnLAoxMTk4OTQ9PidMJywKMTE5ODk1PT4nTCcsCjExOTg5Nj0+J0wnLAoxMTk4OTc9PidMJywKMTE5ODk4PT4nTCcsCjExOTg5OT0+J0wnLAoxMTk5MDA9PidMJywKMTE5OTAxPT4nTCcsCjExOTkwMj0+J0wnLAoxMTk5MDM9PidMJywKMTE5OTA0PT4nTCcsCjExOTkwNT0+J0wnLAoxMTk5MDY9PidMJywKMTE5OTA3PT4nTCcsCjExOTkwOD0+J0wnLAoxMTk5MDk9PidMJywKMTE5OTEwPT4nTCcsCjExOTkxMT0+J0wnLAoxMTk5MTI9PidMJywKMTE5OTEzPT4nTCcsCjExOTkxND0+J0wnLAoxMTk5MTU9PidMJywKMTE5OTE2PT4nTCcsCjExOTkxNz0+J0wnLAoxMTk5MTg9PidMJywKMTE5OTE5PT4nTCcsCjExOTkyMD0+J0wnLAoxMTk5MjE9PidMJywKMTE5OTIyPT4nTCcsCjExOTkyMz0+J0wnLAoxMTk5MjQ9PidMJywKMTE5OTI1PT4nTCcsCjExOTkyNj0+J0wnLAoxMTk5Mjc9PidMJywKMTE5OTI4PT4nTCcsCjExOTkyOT0+J0wnLAoxMTk5MzA9PidMJywKMTE5OTMxPT4nTCcsCjExOTkzMj0+J0wnLAoxMTk5MzM9PidMJywKMTE5OTM0PT4nTCcsCjExOTkzNT0+J0wnLAoxMTk5MzY9PidMJywKMTE5OTM3PT4nTCcsCjExOTkzOD0+J0wnLAoxMTk5Mzk9PidMJywKMTE5OTQwPT4nTCcsCjExOTk0MT0+J0wnLAoxMTk5NDI9PidMJywKMTE5OTQzPT4nTCcsCjExOTk0ND0+J0wnLAoxMTk5NDU9PidMJywKMTE5OTQ2PT4nTCcsCjExOTk0Nz0+J0wnLAoxMTk5NDg9PidMJywKMTE5OTQ5PT4nTCcsCjExOTk1MD0+J0wnLAoxMTk5NTE9PidMJywKMTE5OTUyPT4nTCcsCjExOTk1Mz0+J0wnLAoxMTk5NTQ9PidMJywKMTE5OTU1PT4nTCcsCjExOTk1Nj0+J0wnLAoxMTk5NTc9PidMJywKMTE5OTU4PT4nTCcsCjExOTk1OT0+J0wnLAoxMTk5NjA9PidMJywKMTE5OTYxPT4nTCcsCjExOTk2Mj0+J0wnLAoxMTk5NjM9PidMJywKMTE5OTY0PT4nTCcsCjExOTk2Nj0+J0wnLAoxMTk5Njc9PidMJywKMTE5OTcwPT4nTCcsCjExOTk3Mz0+J0wnLAoxMTk5NzQ9PidMJywKMTE5OTc3PT4nTCcsCjExOTk3OD0+J0wnLAoxMTk5Nzk9PidMJywKMTE5OTgwPT4nTCcsCjExOTk4Mj0+J0wnLAoxMTk5ODM9PidMJywKMTE5OTg0PT4nTCcsCjExOTk4NT0+J0wnLAoxMTk5ODY9PidMJywKMTE5OTg3PT4nTCcsCjExOTk4OD0+J0wnLAoxMTk5ODk9PidMJywKMTE5OTkwPT4nTCcsCjExOTk5MT0+J0wnLAoxMTk5OTI9PidMJywKMTE5OTkzPT4nTCcsCjExOTk5NT0+J0wnLAoxMTk5OTc9PidMJywKMTE5OTk4PT4nTCcsCjExOTk5OT0+J0wnLAoxMjAwMDA9PidMJywKMTIwMDAxPT4nTCcsCjEyMDAwMj0+J0wnLAoxMjAwMDM9PidMJywKMTIwMDA1PT4nTCcsCjEyMDAwNj0+J0wnLAoxMjAwMDc9PidMJywKMTIwMDA4PT4nTCcsCjEyMDAwOT0+J0wnLAoxMjAwMTA9PidMJywKMTIwMDExPT4nTCcsCjEyMDAxMj0+J0wnLAoxMjAwMTM9PidMJywKMTIwMDE0PT4nTCcsCjEyMDAxNT0+J0wnLAoxMjAwMTY9PidMJywKMTIwMDE3PT4nTCcsCjEyMDAxOD0+J0wnLAoxMjAwMTk9PidMJywKMTIwMDIwPT4nTCcsCjEyMDAyMT0+J0wnLAoxMjAwMjI9PidMJywKMTIwMDIzPT4nTCcsCjEyMDAyND0+J0wnLAoxMjAwMjU9PidMJywKMTIwMDI2PT4nTCcsCjEyMDAyNz0+J0wnLAoxMjAwMjg9PidMJywKMTIwMDI5PT4nTCcsCjEyMDAzMD0+J0wnLAoxMjAwMzE9PidMJywKMTIwMDMyPT4nTCcsCjEyMDAzMz0+J0wnLAoxMjAwMzQ9PidMJywKMTIwMDM1PT4nTCcsCjEyMDAzNj0+J0wnLAoxMjAwMzc9PidMJywKMTIwMDM4PT4nTCcsCjEyMDAzOT0+J0wnLAoxMjAwNDA9PidMJywKMTIwMDQxPT4nTCcsCjEyMDA0Mj0+J0wnLAoxMjAwNDM9PidMJywKMTIwMDQ0PT4nTCcsCjEyMDA0NT0+J0wnLAoxMjAwNDY9PidMJywKMTIwMDQ3PT4nTCcsCjEyMDA0OD0+J0wnLAoxMjAwNDk9PidMJywKMTIwMDUwPT4nTCcsCjEyMDA1MT0+J0wnLAoxMjAwNTI9PidMJywKMTIwMDUzPT4nTCcsCjEyMDA1ND0+J0wnLAoxMjAwNTU9PidMJywKMTIwMDU2PT4nTCcsCjEyMDA1Nz0+J0wnLAoxMjAwNTg9PidMJywKMTIwMDU5PT4nTCcsCjEyMDA2MD0+J0wnLAoxMjAwNjE9PidMJywKMTIwMDYyPT4nTCcsCjEyMDA2Mz0+J0wnLAoxMjAwNjQ9PidMJywKMTIwMDY1PT4nTCcsCjEyMDA2Nj0+J0wnLAoxMjAwNjc9PidMJywKMTIwMDY4PT4nTCcsCjEyMDA2OT0+J0wnLAoxMjAwNzE9PidMJywKMTIwMDcyPT4nTCcsCjEyMDA3Mz0+J0wnLAoxMjAwNzQ9PidMJywKMTIwMDc3PT4nTCcsCjEyMDA3OD0+J0wnLAoxMjAwNzk9PidMJywKMTIwMDgwPT4nTCcsCjEyMDA4MT0+J0wnLAoxMjAwODI9PidMJywKMTIwMDgzPT4nTCcsCjEyMDA4ND0+J0wnLAoxMjAwODY9PidMJywKMTIwMDg3PT4nTCcsCjEyMDA4OD0+J0wnLAoxMjAwODk9PidMJywKMTIwMDkwPT4nTCcsCjEyMDA5MT0+J0wnLAoxMjAwOTI9PidMJywKMTIwMDk0PT4nTCcsCjEyMDA5NT0+J0wnLAoxMjAwOTY9PidMJywKMTIwMDk3PT4nTCcsCjEyMDA5OD0+J0wnLAoxMjAwOTk9PidMJywKMTIwMTAwPT4nTCcsCjEyMDEwMT0+J0wnLAoxMjAxMDI9PidMJywKMTIwMTAzPT4nTCcsCjEyMDEwND0+J0wnLAoxMjAxMDU9PidMJywKMTIwMTA2PT4nTCcsCjEyMDEwNz0+J0wnLAoxMjAxMDg9PidMJywKMTIwMTA5PT4nTCcsCjEyMDExMD0+J0wnLAoxMjAxMTE9PidMJywKMTIwMTEyPT4nTCcsCjEyMDExMz0+J0wnLAoxMjAxMTQ9PidMJywKMTIwMTE1PT4nTCcsCjEyMDExNj0+J0wnLAoxMjAxMTc9PidMJywKMTIwMTE4PT4nTCcsCjEyMDExOT0+J0wnLAoxMjAxMjA9PidMJywKMTIwMTIxPT4nTCcsCjEyMDEyMz0+J0wnLAoxMjAxMjQ9PidMJywKMTIwMTI1PT4nTCcsCjEyMDEyNj0+J0wnLAoxMjAxMjg9PidMJywKMTIwMTI5PT4nTCcsCjEyMDEzMD0+J0wnLAoxMjAxMzE9PidMJywKMTIwMTMyPT4nTCcsCjEyMDEzND0+J0wnLAoxMjAxMzg9PidMJywKMTIwMTM5PT4nTCcsCjEyMDE0MD0+J0wnLAoxMjAxNDE9PidMJywKMTIwMTQyPT4nTCcsCjEyMDE0Mz0+J0wnLAoxMjAxNDQ9PidMJywKMTIwMTQ2PT4nTCcsCjEyMDE0Nz0+J0wnLAoxMjAxNDg9PidMJywKMTIwMTQ5PT4nTCcsCjEyMDE1MD0+J0wnLAoxMjAxNTE9PidMJywKMTIwMTUyPT4nTCcsCjEyMDE1Mz0+J0wnLAoxMjAxNTQ9PidMJywKMTIwMTU1PT4nTCcsCjEyMDE1Nj0+J0wnLAoxMjAxNTc9PidMJywKMTIwMTU4PT4nTCcsCjEyMDE1OT0+J0wnLAoxMjAxNjA9PidMJywKMTIwMTYxPT4nTCcsCjEyMDE2Mj0+J0wnLAoxMjAxNjM9PidMJywKMTIwMTY0PT4nTCcsCjEyMDE2NT0+J0wnLAoxMjAxNjY9PidMJywKMTIwMTY3PT4nTCcsCjEyMDE2OD0+J0wnLAoxMjAxNjk9PidMJywKMTIwMTcwPT4nTCcsCjEyMDE3MT0+J0wnLAoxMjAxNzI9PidMJywKMTIwMTczPT4nTCcsCjEyMDE3ND0+J0wnLAoxMjAxNzU9PidMJywKMTIwMTc2PT4nTCcsCjEyMDE3Nz0+J0wnLAoxMjAxNzg9PidMJywKMTIwMTc5PT4nTCcsCjEyMDE4MD0+J0wnLAoxMjAxODE9PidMJywKMTIwMTgyPT4nTCcsCjEyMDE4Mz0+J0wnLAoxMjAxODQ9PidMJywKMTIwMTg1PT4nTCcsCjEyMDE4Nj0+J0wnLAoxMjAxODc9PidMJywKMTIwMTg4PT4nTCcsCjEyMDE4OT0+J0wnLAoxMjAxOTA9PidMJywKMTIwMTkxPT4nTCcsCjEyMDE5Mj0+J0wnLAoxMjAxOTM9PidMJywKMTIwMTk0PT4nTCcsCjEyMDE5NT0+J0wnLAoxMjAxOTY9PidMJywKMTIwMTk3PT4nTCcsCjEyMDE5OD0+J0wnLAoxMjAxOTk9PidMJywKMTIwMjAwPT4nTCcsCjEyMDIwMT0+J0wnLAoxMjAyMDI9PidMJywKMTIwMjAzPT4nTCcsCjEyMDIwND0+J0wnLAoxMjAyMDU9PidMJywKMTIwMjA2PT4nTCcsCjEyMDIwNz0+J0wnLAoxMjAyMDg9PidMJywKMTIwMjA5PT4nTCcsCjEyMDIxMD0+J0wnLAoxMjAyMTE9PidMJywKMTIwMjEyPT4nTCcsCjEyMDIxMz0+J0wnLAoxMjAyMTQ9PidMJywKMTIwMjE1PT4nTCcsCjEyMDIxNj0+J0wnLAoxMjAyMTc9PidMJywKMTIwMjE4PT4nTCcsCjEyMDIxOT0+J0wnLAoxMjAyMjA9PidMJywKMTIwMjIxPT4nTCcsCjEyMDIyMj0+J0wnLAoxMjAyMjM9PidMJywKMTIwMjI0PT4nTCcsCjEyMDIyNT0+J0wnLAoxMjAyMjY9PidMJywKMTIwMjI3PT4nTCcsCjEyMDIyOD0+J0wnLAoxMjAyMjk9PidMJywKMTIwMjMwPT4nTCcsCjEyMDIzMT0+J0wnLAoxMjAyMzI9PidMJywKMTIwMjMzPT4nTCcsCjEyMDIzND0+J0wnLAoxMjAyMzU9PidMJywKMTIwMjM2PT4nTCcsCjEyMDIzNz0+J0wnLAoxMjAyMzg9PidMJywKMTIwMjM5PT4nTCcsCjEyMDI0MD0+J0wnLAoxMjAyNDE9PidMJywKMTIwMjQyPT4nTCcsCjEyMDI0Mz0+J0wnLAoxMjAyNDQ9PidMJywKMTIwMjQ1PT4nTCcsCjEyMDI0Nj0+J0wnLAoxMjAyNDc9PidMJywKMTIwMjQ4PT4nTCcsCjEyMDI0OT0+J0wnLAoxMjAyNTA9PidMJywKMTIwMjUxPT4nTCcsCjEyMDI1Mj0+J0wnLAoxMjAyNTM9PidMJywKMTIwMjU0PT4nTCcsCjEyMDI1NT0+J0wnLAoxMjAyNTY9PidMJywKMTIwMjU3PT4nTCcsCjEyMDI1OD0+J0wnLAoxMjAyNTk9PidMJywKMTIwMjYwPT4nTCcsCjEyMDI2MT0+J0wnLAoxMjAyNjI9PidMJywKMTIwMjYzPT4nTCcsCjEyMDI2ND0+J0wnLAoxMjAyNjU9PidMJywKMTIwMjY2PT4nTCcsCjEyMDI2Nz0+J0wnLAoxMjAyNjg9PidMJywKMTIwMjY5PT4nTCcsCjEyMDI3MD0+J0wnLAoxMjAyNzE9PidMJywKMTIwMjcyPT4nTCcsCjEyMDI3Mz0+J0wnLAoxMjAyNzQ9PidMJywKMTIwMjc1PT4nTCcsCjEyMDI3Nj0+J0wnLAoxMjAyNzc9PidMJywKMTIwMjc4PT4nTCcsCjEyMDI3OT0+J0wnLAoxMjAyODA9PidMJywKMTIwMjgxPT4nTCcsCjEyMDI4Mj0+J0wnLAoxMjAyODM9PidMJywKMTIwMjg0PT4nTCcsCjEyMDI4NT0+J0wnLAoxMjAyODY9PidMJywKMTIwMjg3PT4nTCcsCjEyMDI4OD0+J0wnLAoxMjAyODk9PidMJywKMTIwMjkwPT4nTCcsCjEyMDI5MT0+J0wnLAoxMjAyOTI9PidMJywKMTIwMjkzPT4nTCcsCjEyMDI5ND0+J0wnLAoxMjAyOTU9PidMJywKMTIwMjk2PT4nTCcsCjEyMDI5Nz0+J0wnLAoxMjAyOTg9PidMJywKMTIwMjk5PT4nTCcsCjEyMDMwMD0+J0wnLAoxMjAzMDE9PidMJywKMTIwMzAyPT4nTCcsCjEyMDMwMz0+J0wnLAoxMjAzMDQ9PidMJywKMTIwMzA1PT4nTCcsCjEyMDMwNj0+J0wnLAoxMjAzMDc9PidMJywKMTIwMzA4PT4nTCcsCjEyMDMwOT0+J0wnLAoxMjAzMTA9PidMJywKMTIwMzExPT4nTCcsCjEyMDMxMj0+J0wnLAoxMjAzMTM9PidMJywKMTIwMzE0PT4nTCcsCjEyMDMxNT0+J0wnLAoxMjAzMTY9PidMJywKMTIwMzE3PT4nTCcsCjEyMDMxOD0+J0wnLAoxMjAzMTk9PidMJywKMTIwMzIwPT4nTCcsCjEyMDMyMT0+J0wnLAoxMjAzMjI9PidMJywKMTIwMzIzPT4nTCcsCjEyMDMyND0+J0wnLAoxMjAzMjU9PidMJywKMTIwMzI2PT4nTCcsCjEyMDMyNz0+J0wnLAoxMjAzMjg9PidMJywKMTIwMzI5PT4nTCcsCjEyMDMzMD0+J0wnLAoxMjAzMzE9PidMJywKMTIwMzMyPT4nTCcsCjEyMDMzMz0+J0wnLAoxMjAzMzQ9PidMJywKMTIwMzM1PT4nTCcsCjEyMDMzNj0+J0wnLAoxMjAzMzc9PidMJywKMTIwMzM4PT4nTCcsCjEyMDMzOT0+J0wnLAoxMjAzNDA9PidMJywKMTIwMzQxPT4nTCcsCjEyMDM0Mj0+J0wnLAoxMjAzNDM9PidMJywKMTIwMzQ0PT4nTCcsCjEyMDM0NT0+J0wnLAoxMjAzNDY9PidMJywKMTIwMzQ3PT4nTCcsCjEyMDM0OD0+J0wnLAoxMjAzNDk9PidMJywKMTIwMzUwPT4nTCcsCjEyMDM1MT0+J0wnLAoxMjAzNTI9PidMJywKMTIwMzUzPT4nTCcsCjEyMDM1ND0+J0wnLAoxMjAzNTU9PidMJywKMTIwMzU2PT4nTCcsCjEyMDM1Nz0+J0wnLAoxMjAzNTg9PidMJywKMTIwMzU5PT4nTCcsCjEyMDM2MD0+J0wnLAoxMjAzNjE9PidMJywKMTIwMzYyPT4nTCcsCjEyMDM2Mz0+J0wnLAoxMjAzNjQ9PidMJywKMTIwMzY1PT4nTCcsCjEyMDM2Nj0+J0wnLAoxMjAzNjc9PidMJywKMTIwMzY4PT4nTCcsCjEyMDM2OT0+J0wnLAoxMjAzNzA9PidMJywKMTIwMzcxPT4nTCcsCjEyMDM3Mj0+J0wnLAoxMjAzNzM9PidMJywKMTIwMzc0PT4nTCcsCjEyMDM3NT0+J0wnLAoxMjAzNzY9PidMJywKMTIwMzc3PT4nTCcsCjEyMDM3OD0+J0wnLAoxMjAzNzk9PidMJywKMTIwMzgwPT4nTCcsCjEyMDM4MT0+J0wnLAoxMjAzODI9PidMJywKMTIwMzgzPT4nTCcsCjEyMDM4ND0+J0wnLAoxMjAzODU9PidMJywKMTIwMzg2PT4nTCcsCjEyMDM4Nz0+J0wnLAoxMjAzODg9PidMJywKMTIwMzg5PT4nTCcsCjEyMDM5MD0+J0wnLAoxMjAzOTE9PidMJywKMTIwMzkyPT4nTCcsCjEyMDM5Mz0+J0wnLAoxMjAzOTQ9PidMJywKMTIwMzk1PT4nTCcsCjEyMDM5Nj0+J0wnLAoxMjAzOTc9PidMJywKMTIwMzk4PT4nTCcsCjEyMDM5OT0+J0wnLAoxMjA0MDA9PidMJywKMTIwNDAxPT4nTCcsCjEyMDQwMj0+J0wnLAoxMjA0MDM9PidMJywKMTIwNDA0PT4nTCcsCjEyMDQwNT0+J0wnLAoxMjA0MDY9PidMJywKMTIwNDA3PT4nTCcsCjEyMDQwOD0+J0wnLAoxMjA0MDk9PidMJywKMTIwNDEwPT4nTCcsCjEyMDQxMT0+J0wnLAoxMjA0MTI9PidMJywKMTIwNDEzPT4nTCcsCjEyMDQxND0+J0wnLAoxMjA0MTU9PidMJywKMTIwNDE2PT4nTCcsCjEyMDQxNz0+J0wnLAoxMjA0MTg9PidMJywKMTIwNDE5PT4nTCcsCjEyMDQyMD0+J0wnLAoxMjA0MjE9PidMJywKMTIwNDIyPT4nTCcsCjEyMDQyMz0+J0wnLAoxMjA0MjQ9PidMJywKMTIwNDI1PT4nTCcsCjEyMDQyNj0+J0wnLAoxMjA0Mjc9PidMJywKMTIwNDI4PT4nTCcsCjEyMDQyOT0+J0wnLAoxMjA0MzA9PidMJywKMTIwNDMxPT4nTCcsCjEyMDQzMj0+J0wnLAoxMjA0MzM9PidMJywKMTIwNDM0PT4nTCcsCjEyMDQzNT0+J0wnLAoxMjA0MzY9PidMJywKMTIwNDM3PT4nTCcsCjEyMDQzOD0+J0wnLAoxMjA0Mzk9PidMJywKMTIwNDQwPT4nTCcsCjEyMDQ0MT0+J0wnLAoxMjA0NDI9PidMJywKMTIwNDQzPT4nTCcsCjEyMDQ0ND0+J0wnLAoxMjA0NDU9PidMJywKMTIwNDQ2PT4nTCcsCjEyMDQ0Nz0+J0wnLAoxMjA0NDg9PidMJywKMTIwNDQ5PT4nTCcsCjEyMDQ1MD0+J0wnLAoxMjA0NTE9PidMJywKMTIwNDUyPT4nTCcsCjEyMDQ1Mz0+J0wnLAoxMjA0NTQ9PidMJywKMTIwNDU1PT4nTCcsCjEyMDQ1Nj0+J0wnLAoxMjA0NTc9PidMJywKMTIwNDU4PT4nTCcsCjEyMDQ1OT0+J0wnLAoxMjA0NjA9PidMJywKMTIwNDYxPT4nTCcsCjEyMDQ2Mj0+J0wnLAoxMjA0NjM9PidMJywKMTIwNDY0PT4nTCcsCjEyMDQ2NT0+J0wnLAoxMjA0NjY9PidMJywKMTIwNDY3PT4nTCcsCjEyMDQ2OD0+J0wnLAoxMjA0Njk9PidMJywKMTIwNDcwPT4nTCcsCjEyMDQ3MT0+J0wnLAoxMjA0NzI9PidMJywKMTIwNDczPT4nTCcsCjEyMDQ3ND0+J0wnLAoxMjA0NzU9PidMJywKMTIwNDc2PT4nTCcsCjEyMDQ3Nz0+J0wnLAoxMjA0Nzg9PidMJywKMTIwNDc5PT4nTCcsCjEyMDQ4MD0+J0wnLAoxMjA0ODE9PidMJywKMTIwNDgyPT4nTCcsCjEyMDQ4Mz0+J0wnLAoxMjA0ODQ9PidMJywKMTIwNDg1PT4nTCcsCjEyMDQ4OD0+J0wnLAoxMjA0ODk9PidMJywKMTIwNDkwPT4nTCcsCjEyMDQ5MT0+J0wnLAoxMjA0OTI9PidMJywKMTIwNDkzPT4nTCcsCjEyMDQ5ND0+J0wnLAoxMjA0OTU9PidMJywKMTIwNDk2PT4nTCcsCjEyMDQ5Nz0+J0wnLAoxMjA0OTg9PidMJywKMTIwNDk5PT4nTCcsCjEyMDUwMD0+J0wnLAoxMjA1MDE9PidMJywKMTIwNTAyPT4nTCcsCjEyMDUwMz0+J0wnLAoxMjA1MDQ9PidMJywKMTIwNTA1PT4nTCcsCjEyMDUwNj0+J0wnLAoxMjA1MDc9PidMJywKMTIwNTA4PT4nTCcsCjEyMDUwOT0+J0wnLAoxMjA1MTA9PidMJywKMTIwNTExPT4nTCcsCjEyMDUxMj0+J0wnLAoxMjA1MTM9PidMJywKMTIwNTE0PT4nTCcsCjEyMDUxNT0+J0wnLAoxMjA1MTY9PidMJywKMTIwNTE3PT4nTCcsCjEyMDUxOD0+J0wnLAoxMjA1MTk9PidMJywKMTIwNTIwPT4nTCcsCjEyMDUyMT0+J0wnLAoxMjA1MjI9PidMJywKMTIwNTIzPT4nTCcsCjEyMDUyND0+J0wnLAoxMjA1MjU9PidMJywKMTIwNTI2PT4nTCcsCjEyMDUyNz0+J0wnLAoxMjA1Mjg9PidMJywKMTIwNTI5PT4nTCcsCjEyMDUzMD0+J0wnLAoxMjA1MzE9PidMJywKMTIwNTMyPT4nTCcsCjEyMDUzMz0+J0wnLAoxMjA1MzQ9PidMJywKMTIwNTM1PT4nTCcsCjEyMDUzNj0+J0wnLAoxMjA1Mzc9PidMJywKMTIwNTM4PT4nTCcsCjEyMDUzOT0+J0wnLAoxMjA1NDA9PidMJywKMTIwNTQxPT4nTCcsCjEyMDU0Mj0+J0wnLAoxMjA1NDM9PidMJywKMTIwNTQ0PT4nTCcsCjEyMDU0NT0+J0wnLAoxMjA1NDY9PidMJywKMTIwNTQ3PT4nTCcsCjEyMDU0OD0+J0wnLAoxMjA1NDk9PidMJywKMTIwNTUwPT4nTCcsCjEyMDU1MT0+J0wnLAoxMjA1NTI9PidMJywKMTIwNTUzPT4nTCcsCjEyMDU1ND0+J0wnLAoxMjA1NTU9PidMJywKMTIwNTU2PT4nTCcsCjEyMDU1Nz0+J0wnLAoxMjA1NTg9PidMJywKMTIwNTU5PT4nTCcsCjEyMDU2MD0+J0wnLAoxMjA1NjE9PidMJywKMTIwNTYyPT4nTCcsCjEyMDU2Mz0+J0wnLAoxMjA1NjQ9PidMJywKMTIwNTY1PT4nTCcsCjEyMDU2Nj0+J0wnLAoxMjA1Njc9PidMJywKMTIwNTY4PT4nTCcsCjEyMDU2OT0+J0wnLAoxMjA1NzA9PidMJywKMTIwNTcxPT4nTCcsCjEyMDU3Mj0+J0wnLAoxMjA1NzM9PidMJywKMTIwNTc0PT4nTCcsCjEyMDU3NT0+J0wnLAoxMjA1NzY9PidMJywKMTIwNTc3PT4nTCcsCjEyMDU3OD0+J0wnLAoxMjA1Nzk9PidMJywKMTIwNTgwPT4nTCcsCjEyMDU4MT0+J0wnLAoxMjA1ODI9PidMJywKMTIwNTgzPT4nTCcsCjEyMDU4ND0+J0wnLAoxMjA1ODU9PidMJywKMTIwNTg2PT4nTCcsCjEyMDU4Nz0+J0wnLAoxMjA1ODg9PidMJywKMTIwNTg5PT4nTCcsCjEyMDU5MD0+J0wnLAoxMjA1OTE9PidMJywKMTIwNTkyPT4nTCcsCjEyMDU5Mz0+J0wnLAoxMjA1OTQ9PidMJywKMTIwNTk1PT4nTCcsCjEyMDU5Nj0+J0wnLAoxMjA1OTc9PidMJywKMTIwNTk4PT4nTCcsCjEyMDU5OT0+J0wnLAoxMjA2MDA9PidMJywKMTIwNjAxPT4nTCcsCjEyMDYwMj0+J0wnLAoxMjA2MDM9PidMJywKMTIwNjA0PT4nTCcsCjEyMDYwNT0+J0wnLAoxMjA2MDY9PidMJywKMTIwNjA3PT4nTCcsCjEyMDYwOD0+J0wnLAoxMjA2MDk9PidMJywKMTIwNjEwPT4nTCcsCjEyMDYxMT0+J0wnLAoxMjA2MTI9PidMJywKMTIwNjEzPT4nTCcsCjEyMDYxND0+J0wnLAoxMjA2MTU9PidMJywKMTIwNjE2PT4nTCcsCjEyMDYxNz0+J0wnLAoxMjA2MTg9PidMJywKMTIwNjE5PT4nTCcsCjEyMDYyMD0+J0wnLAoxMjA2MjE9PidMJywKMTIwNjIyPT4nTCcsCjEyMDYyMz0+J0wnLAoxMjA2MjQ9PidMJywKMTIwNjI1PT4nTCcsCjEyMDYyNj0+J0wnLAoxMjA2Mjc9PidMJywKMTIwNjI4PT4nTCcsCjEyMDYyOT0+J0wnLAoxMjA2MzA9PidMJywKMTIwNjMxPT4nTCcsCjEyMDYzMj0+J0wnLAoxMjA2MzM9PidMJywKMTIwNjM0PT4nTCcsCjEyMDYzNT0+J0wnLAoxMjA2MzY9PidMJywKMTIwNjM3PT4nTCcsCjEyMDYzOD0+J0wnLAoxMjA2Mzk9PidMJywKMTIwNjQwPT4nTCcsCjEyMDY0MT0+J0wnLAoxMjA2NDI9PidMJywKMTIwNjQzPT4nTCcsCjEyMDY0ND0+J0wnLAoxMjA2NDU9PidMJywKMTIwNjQ2PT4nTCcsCjEyMDY0Nz0+J0wnLAoxMjA2NDg9PidMJywKMTIwNjQ5PT4nTCcsCjEyMDY1MD0+J0wnLAoxMjA2NTE9PidMJywKMTIwNjUyPT4nTCcsCjEyMDY1Mz0+J0wnLAoxMjA2NTQ9PidMJywKMTIwNjU1PT4nTCcsCjEyMDY1Nj0+J0wnLAoxMjA2NTc9PidMJywKMTIwNjU4PT4nTCcsCjEyMDY1OT0+J0wnLAoxMjA2NjA9PidMJywKMTIwNjYxPT4nTCcsCjEyMDY2Mj0+J0wnLAoxMjA2NjM9PidMJywKMTIwNjY0PT4nTCcsCjEyMDY2NT0+J0wnLAoxMjA2NjY9PidMJywKMTIwNjY3PT4nTCcsCjEyMDY2OD0+J0wnLAoxMjA2Njk9PidMJywKMTIwNjcwPT4nTCcsCjEyMDY3MT0+J0wnLAoxMjA2NzI9PidMJywKMTIwNjczPT4nTCcsCjEyMDY3ND0+J0wnLAoxMjA2NzU9PidMJywKMTIwNjc2PT4nTCcsCjEyMDY3Nz0+J0wnLAoxMjA2Nzg9PidMJywKMTIwNjc5PT4nTCcsCjEyMDY4MD0+J0wnLAoxMjA2ODE9PidMJywKMTIwNjgyPT4nTCcsCjEyMDY4Mz0+J0wnLAoxMjA2ODQ9PidMJywKMTIwNjg1PT4nTCcsCjEyMDY4Nj0+J0wnLAoxMjA2ODc9PidMJywKMTIwNjg4PT4nTCcsCjEyMDY4OT0+J0wnLAoxMjA2OTA9PidMJywKMTIwNjkxPT4nTCcsCjEyMDY5Mj0+J0wnLAoxMjA2OTM9PidMJywKMTIwNjk0PT4nTCcsCjEyMDY5NT0+J0wnLAoxMjA2OTY9PidMJywKMTIwNjk3PT4nTCcsCjEyMDY5OD0+J0wnLAoxMjA2OTk9PidMJywKMTIwNzAwPT4nTCcsCjEyMDcwMT0+J0wnLAoxMjA3MDI9PidMJywKMTIwNzAzPT4nTCcsCjEyMDcwND0+J0wnLAoxMjA3MDU9PidMJywKMTIwNzA2PT4nTCcsCjEyMDcwNz0+J0wnLAoxMjA3MDg9PidMJywKMTIwNzA5PT4nTCcsCjEyMDcxMD0+J0wnLAoxMjA3MTE9PidMJywKMTIwNzEyPT4nTCcsCjEyMDcxMz0+J0wnLAoxMjA3MTQ9PidMJywKMTIwNzE1PT4nTCcsCjEyMDcxNj0+J0wnLAoxMjA3MTc9PidMJywKMTIwNzE4PT4nTCcsCjEyMDcxOT0+J0wnLAoxMjA3MjA9PidMJywKMTIwNzIxPT4nTCcsCjEyMDcyMj0+J0wnLAoxMjA3MjM9PidMJywKMTIwNzI0PT4nTCcsCjEyMDcyNT0+J0wnLAoxMjA3MjY9PidMJywKMTIwNzI3PT4nTCcsCjEyMDcyOD0+J0wnLAoxMjA3Mjk9PidMJywKMTIwNzMwPT4nTCcsCjEyMDczMT0+J0wnLAoxMjA3MzI9PidMJywKMTIwNzMzPT4nTCcsCjEyMDczND0+J0wnLAoxMjA3MzU9PidMJywKMTIwNzM2PT4nTCcsCjEyMDczNz0+J0wnLAoxMjA3Mzg9PidMJywKMTIwNzM5PT4nTCcsCjEyMDc0MD0+J0wnLAoxMjA3NDE9PidMJywKMTIwNzQyPT4nTCcsCjEyMDc0Mz0+J0wnLAoxMjA3NDQ9PidMJywKMTIwNzQ1PT4nTCcsCjEyMDc0Nj0+J0wnLAoxMjA3NDc9PidMJywKMTIwNzQ4PT4nTCcsCjEyMDc0OT0+J0wnLAoxMjA3NTA9PidMJywKMTIwNzUxPT4nTCcsCjEyMDc1Mj0+J0wnLAoxMjA3NTM9PidMJywKMTIwNzU0PT4nTCcsCjEyMDc1NT0+J0wnLAoxMjA3NTY9PidMJywKMTIwNzU3PT4nTCcsCjEyMDc1OD0+J0wnLAoxMjA3NTk9PidMJywKMTIwNzYwPT4nTCcsCjEyMDc2MT0+J0wnLAoxMjA3NjI9PidMJywKMTIwNzYzPT4nTCcsCjEyMDc2ND0+J0wnLAoxMjA3NjU9PidMJywKMTIwNzY2PT4nTCcsCjEyMDc2Nz0+J0wnLAoxMjA3Njg9PidMJywKMTIwNzY5PT4nTCcsCjEyMDc3MD0+J0wnLAoxMjA3NzE9PidMJywKMTIwNzcyPT4nTCcsCjEyMDc3Mz0+J0wnLAoxMjA3NzQ9PidMJywKMTIwNzc1PT4nTCcsCjEyMDc3Nj0+J0wnLAoxMjA3Nzc9PidMJywKMTIwNzc4PT4nTCcsCjEyMDc3OT0+J0wnLAoxMjA3ODI9PidFTicsCjEyMDc4Mz0+J0VOJywKMTIwNzg0PT4nRU4nLAoxMjA3ODU9PidFTicsCjEyMDc4Nj0+J0VOJywKMTIwNzg3PT4nRU4nLAoxMjA3ODg9PidFTicsCjEyMDc4OT0+J0VOJywKMTIwNzkwPT4nRU4nLAoxMjA3OTE9PidFTicsCjEyMDc5Mj0+J0VOJywKMTIwNzkzPT4nRU4nLAoxMjA3OTQ9PidFTicsCjEyMDc5NT0+J0VOJywKMTIwNzk2PT4nRU4nLAoxMjA3OTc9PidFTicsCjEyMDc5OD0+J0VOJywKMTIwNzk5PT4nRU4nLAoxMjA4MDA9PidFTicsCjEyMDgwMT0+J0VOJywKMTIwODAyPT4nRU4nLAoxMjA4MDM9PidFTicsCjEyMDgwND0+J0VOJywKMTIwODA1PT4nRU4nLAoxMjA4MDY9PidFTicsCjEyMDgwNz0+J0VOJywKMTIwODA4PT4nRU4nLAoxMjA4MDk9PidFTicsCjEyMDgxMD0+J0VOJywKMTIwODExPT4nRU4nLAoxMjA4MTI9PidFTicsCjEyMDgxMz0+J0VOJywKMTIwODE0PT4nRU4nLAoxMjA4MTU9PidFTicsCjEyMDgxNj0+J0VOJywKMTIwODE3PT4nRU4nLAoxMjA4MTg9PidFTicsCjEyMDgxOT0+J0VOJywKMTIwODIwPT4nRU4nLAoxMjA4MjE9PidFTicsCjEyMDgyMj0+J0VOJywKMTIwODIzPT4nRU4nLAoxMjA4MjQ9PidFTicsCjEyMDgyNT0+J0VOJywKMTIwODI2PT4nRU4nLAoxMjA4Mjc9PidFTicsCjEyMDgyOD0+J0VOJywKMTIwODI5PT4nRU4nLAoxMjA4MzA9PidFTicsCjEyMDgzMT0+J0VOJywKMTMxMDcyPT4nTCcsCjE3Mzc4Mj0+J0wnLAoxOTQ1NjA9PidMJywKMTk0NTYxPT4nTCcsCjE5NDU2Mj0+J0wnLAoxOTQ1NjM9PidMJywKMTk0NTY0PT4nTCcsCjE5NDU2NT0+J0wnLAoxOTQ1NjY9PidMJywKMTk0NTY3PT4nTCcsCjE5NDU2OD0+J0wnLAoxOTQ1Njk9PidMJywKMTk0NTcwPT4nTCcsCjE5NDU3MT0+J0wnLAoxOTQ1NzI9PidMJywKMTk0NTczPT4nTCcsCjE5NDU3ND0+J0wnLAoxOTQ1NzU9PidMJywKMTk0NTc2PT4nTCcsCjE5NDU3Nz0+J0wnLAoxOTQ1Nzg9PidMJywKMTk0NTc5PT4nTCcsCjE5NDU4MD0+J0wnLAoxOTQ1ODE9PidMJywKMTk0NTgyPT4nTCcsCjE5NDU4Mz0+J0wnLAoxOTQ1ODQ9PidMJywKMTk0NTg1PT4nTCcsCjE5NDU4Nj0+J0wnLAoxOTQ1ODc9PidMJywKMTk0NTg4PT4nTCcsCjE5NDU4OT0+J0wnLAoxOTQ1OTA9PidMJywKMTk0NTkxPT4nTCcsCjE5NDU5Mj0+J0wnLAoxOTQ1OTM9PidMJywKMTk0NTk0PT4nTCcsCjE5NDU5NT0+J0wnLAoxOTQ1OTY9PidMJywKMTk0NTk3PT4nTCcsCjE5NDU5OD0+J0wnLAoxOTQ1OTk9PidMJywKMTk0NjAwPT4nTCcsCjE5NDYwMT0+J0wnLAoxOTQ2MDI9PidMJywKMTk0NjAzPT4nTCcsCjE5NDYwND0+J0wnLAoxOTQ2MDU9PidMJywKMTk0NjA2PT4nTCcsCjE5NDYwNz0+J0wnLAoxOTQ2MDg9PidMJywKMTk0NjA5PT4nTCcsCjE5NDYxMD0+J0wnLAoxOTQ2MTE9PidMJywKMTk0NjEyPT4nTCcsCjE5NDYxMz0+J0wnLAoxOTQ2MTQ9PidMJywKMTk0NjE1PT4nTCcsCjE5NDYxNj0+J0wnLAoxOTQ2MTc9PidMJywKMTk0NjE4PT4nTCcsCjE5NDYxOT0+J0wnLAoxOTQ2MjA9PidMJywKMTk0NjIxPT4nTCcsCjE5NDYyMj0+J0wnLAoxOTQ2MjM9PidMJywKMTk0NjI0PT4nTCcsCjE5NDYyNT0+J0wnLAoxOTQ2MjY9PidMJywKMTk0NjI3PT4nTCcsCjE5NDYyOD0+J0wnLAoxOTQ2Mjk9PidMJywKMTk0NjMwPT4nTCcsCjE5NDYzMT0+J0wnLAoxOTQ2MzI9PidMJywKMTk0NjMzPT4nTCcsCjE5NDYzND0+J0wnLAoxOTQ2MzU9PidMJywKMTk0NjM2PT4nTCcsCjE5NDYzNz0+J0wnLAoxOTQ2Mzg9PidMJywKMTk0NjM5PT4nTCcsCjE5NDY0MD0+J0wnLAoxOTQ2NDE9PidMJywKMTk0NjQyPT4nTCcsCjE5NDY0Mz0+J0wnLAoxOTQ2NDQ9PidMJywKMTk0NjQ1PT4nTCcsCjE5NDY0Nj0+J0wnLAoxOTQ2NDc9PidMJywKMTk0NjQ4PT4nTCcsCjE5NDY0OT0+J0wnLAoxOTQ2NTA9PidMJywKMTk0NjUxPT4nTCcsCjE5NDY1Mj0+J0wnLAoxOTQ2NTM9PidMJywKMTk0NjU0PT4nTCcsCjE5NDY1NT0+J0wnLAoxOTQ2NTY9PidMJywKMTk0NjU3PT4nTCcsCjE5NDY1OD0+J0wnLAoxOTQ2NTk9PidMJywKMTk0NjYwPT4nTCcsCjE5NDY2MT0+J0wnLAoxOTQ2NjI9PidMJywKMTk0NjYzPT4nTCcsCjE5NDY2ND0+J0wnLAoxOTQ2NjU9PidMJywKMTk0NjY2PT4nTCcsCjE5NDY2Nz0+J0wnLAoxOTQ2Njg9PidMJywKMTk0NjY5PT4nTCcsCjE5NDY3MD0+J0wnLAoxOTQ2NzE9PidMJywKMTk0NjcyPT4nTCcsCjE5NDY3Mz0+J0wnLAoxOTQ2NzQ9PidMJywKMTk0Njc1PT4nTCcsCjE5NDY3Nj0+J0wnLAoxOTQ2Nzc9PidMJywKMTk0Njc4PT4nTCcsCjE5NDY3OT0+J0wnLAoxOTQ2ODA9PidMJywKMTk0NjgxPT4nTCcsCjE5NDY4Mj0+J0wnLAoxOTQ2ODM9PidMJywKMTk0Njg0PT4nTCcsCjE5NDY4NT0+J0wnLAoxOTQ2ODY9PidMJywKMTk0Njg3PT4nTCcsCjE5NDY4OD0+J0wnLAoxOTQ2ODk9PidMJywKMTk0NjkwPT4nTCcsCjE5NDY5MT0+J0wnLAoxOTQ2OTI9PidMJywKMTk0NjkzPT4nTCcsCjE5NDY5ND0+J0wnLAoxOTQ2OTU9PidMJywKMTk0Njk2PT4nTCcsCjE5NDY5Nz0+J0wnLAoxOTQ2OTg9PidMJywKMTk0Njk5PT4nTCcsCjE5NDcwMD0+J0wnLAoxOTQ3MDE9PidMJywKMTk0NzAyPT4nTCcsCjE5NDcwMz0+J0wnLAoxOTQ3MDQ9PidMJywKMTk0NzA1PT4nTCcsCjE5NDcwNj0+J0wnLAoxOTQ3MDc9PidMJywKMTk0NzA4PT4nTCcsCjE5NDcwOT0+J0wnLAoxOTQ3MTA9PidMJywKMTk0NzExPT4nTCcsCjE5NDcxMj0+J0wnLAoxOTQ3MTM9PidMJywKMTk0NzE0PT4nTCcsCjE5NDcxNT0+J0wnLAoxOTQ3MTY9PidMJywKMTk0NzE3PT4nTCcsCjE5NDcxOD0+J0wnLAoxOTQ3MTk9PidMJywKMTk0NzIwPT4nTCcsCjE5NDcyMT0+J0wnLAoxOTQ3MjI9PidMJywKMTk0NzIzPT4nTCcsCjE5NDcyND0+J0wnLAoxOTQ3MjU9PidMJywKMTk0NzI2PT4nTCcsCjE5NDcyNz0+J0wnLAoxOTQ3Mjg9PidMJywKMTk0NzI5PT4nTCcsCjE5NDczMD0+J0wnLAoxOTQ3MzE9PidMJywKMTk0NzMyPT4nTCcsCjE5NDczMz0+J0wnLAoxOTQ3MzQ9PidMJywKMTk0NzM1PT4nTCcsCjE5NDczNj0+J0wnLAoxOTQ3Mzc9PidMJywKMTk0NzM4PT4nTCcsCjE5NDczOT0+J0wnLAoxOTQ3NDA9PidMJywKMTk0NzQxPT4nTCcsCjE5NDc0Mj0+J0wnLAoxOTQ3NDM9PidMJywKMTk0NzQ0PT4nTCcsCjE5NDc0NT0+J0wnLAoxOTQ3NDY9PidMJywKMTk0NzQ3PT4nTCcsCjE5NDc0OD0+J0wnLAoxOTQ3NDk9PidMJywKMTk0NzUwPT4nTCcsCjE5NDc1MT0+J0wnLAoxOTQ3NTI9PidMJywKMTk0NzUzPT4nTCcsCjE5NDc1ND0+J0wnLAoxOTQ3NTU9PidMJywKMTk0NzU2PT4nTCcsCjE5NDc1Nz0+J0wnLAoxOTQ3NTg9PidMJywKMTk0NzU5PT4nTCcsCjE5NDc2MD0+J0wnLAoxOTQ3NjE9PidMJywKMTk0NzYyPT4nTCcsCjE5NDc2Mz0+J0wnLAoxOTQ3NjQ9PidMJywKMTk0NzY1PT4nTCcsCjE5NDc2Nj0+J0wnLAoxOTQ3Njc9PidMJywKMTk0NzY4PT4nTCcsCjE5NDc2OT0+J0wnLAoxOTQ3NzA9PidMJywKMTk0NzcxPT4nTCcsCjE5NDc3Mj0+J0wnLAoxOTQ3NzM9PidMJywKMTk0Nzc0PT4nTCcsCjE5NDc3NT0+J0wnLAoxOTQ3NzY9PidMJywKMTk0Nzc3PT4nTCcsCjE5NDc3OD0+J0wnLAoxOTQ3Nzk9PidMJywKMTk0NzgwPT4nTCcsCjE5NDc4MT0+J0wnLAoxOTQ3ODI9PidMJywKMTk0NzgzPT4nTCcsCjE5NDc4ND0+J0wnLAoxOTQ3ODU9PidMJywKMTk0Nzg2PT4nTCcsCjE5NDc4Nz0+J0wnLAoxOTQ3ODg9PidMJywKMTk0Nzg5PT4nTCcsCjE5NDc5MD0+J0wnLAoxOTQ3OTE9PidMJywKMTk0NzkyPT4nTCcsCjE5NDc5Mz0+J0wnLAoxOTQ3OTQ9PidMJywKMTk0Nzk1PT4nTCcsCjE5NDc5Nj0+J0wnLAoxOTQ3OTc9PidMJywKMTk0Nzk4PT4nTCcsCjE5NDc5OT0+J0wnLAoxOTQ4MDA9PidMJywKMTk0ODAxPT4nTCcsCjE5NDgwMj0+J0wnLAoxOTQ4MDM9PidMJywKMTk0ODA0PT4nTCcsCjE5NDgwNT0+J0wnLAoxOTQ4MDY9PidMJywKMTk0ODA3PT4nTCcsCjE5NDgwOD0+J0wnLAoxOTQ4MDk9PidMJywKMTk0ODEwPT4nTCcsCjE5NDgxMT0+J0wnLAoxOTQ4MTI9PidMJywKMTk0ODEzPT4nTCcsCjE5NDgxND0+J0wnLAoxOTQ4MTU9PidMJywKMTk0ODE2PT4nTCcsCjE5NDgxNz0+J0wnLAoxOTQ4MTg9PidMJywKMTk0ODE5PT4nTCcsCjE5NDgyMD0+J0wnLAoxOTQ4MjE9PidMJywKMTk0ODIyPT4nTCcsCjE5NDgyMz0+J0wnLAoxOTQ4MjQ9PidMJywKMTk0ODI1PT4nTCcsCjE5NDgyNj0+J0wnLAoxOTQ4Mjc9PidMJywKMTk0ODI4PT4nTCcsCjE5NDgyOT0+J0wnLAoxOTQ4MzA9PidMJywKMTk0ODMxPT4nTCcsCjE5NDgzMj0+J0wnLAoxOTQ4MzM9PidMJywKMTk0ODM0PT4nTCcsCjE5NDgzNT0+J0wnLAoxOTQ4MzY9PidMJywKMTk0ODM3PT4nTCcsCjE5NDgzOD0+J0wnLAoxOTQ4Mzk9PidMJywKMTk0ODQwPT4nTCcsCjE5NDg0MT0+J0wnLAoxOTQ4NDI9PidMJywKMTk0ODQzPT4nTCcsCjE5NDg0ND0+J0wnLAoxOTQ4NDU9PidMJywKMTk0ODQ2PT4nTCcsCjE5NDg0Nz0+J0wnLAoxOTQ4NDg9PidMJywKMTk0ODQ5PT4nTCcsCjE5NDg1MD0+J0wnLAoxOTQ4NTE9PidMJywKMTk0ODUyPT4nTCcsCjE5NDg1Mz0+J0wnLAoxOTQ4NTQ9PidMJywKMTk0ODU1PT4nTCcsCjE5NDg1Nj0+J0wnLAoxOTQ4NTc9PidMJywKMTk0ODU4PT4nTCcsCjE5NDg1OT0+J0wnLAoxOTQ4NjA9PidMJywKMTk0ODYxPT4nTCcsCjE5NDg2Mj0+J0wnLAoxOTQ4NjM9PidMJywKMTk0ODY0PT4nTCcsCjE5NDg2NT0+J0wnLAoxOTQ4NjY9PidMJywKMTk0ODY3PT4nTCcsCjE5NDg2OD0+J0wnLAoxOTQ4Njk9PidMJywKMTk0ODcwPT4nTCcsCjE5NDg3MT0+J0wnLAoxOTQ4NzI9PidMJywKMTk0ODczPT4nTCcsCjE5NDg3ND0+J0wnLAoxOTQ4NzU9PidMJywKMTk0ODc2PT4nTCcsCjE5NDg3Nz0+J0wnLAoxOTQ4Nzg9PidMJywKMTk0ODc5PT4nTCcsCjE5NDg4MD0+J0wnLAoxOTQ4ODE9PidMJywKMTk0ODgyPT4nTCcsCjE5NDg4Mz0+J0wnLAoxOTQ4ODQ9PidMJywKMTk0ODg1PT4nTCcsCjE5NDg4Nj0+J0wnLAoxOTQ4ODc9PidMJywKMTk0ODg4PT4nTCcsCjE5NDg4OT0+J0wnLAoxOTQ4OTA9PidMJywKMTk0ODkxPT4nTCcsCjE5NDg5Mj0+J0wnLAoxOTQ4OTM9PidMJywKMTk0ODk0PT4nTCcsCjE5NDg5NT0+J0wnLAoxOTQ4OTY9PidMJywKMTk0ODk3PT4nTCcsCjE5NDg5OD0+J0wnLAoxOTQ4OTk9PidMJywKMTk0OTAwPT4nTCcsCjE5NDkwMT0+J0wnLAoxOTQ5MDI9PidMJywKMTk0OTAzPT4nTCcsCjE5NDkwND0+J0wnLAoxOTQ5MDU9PidMJywKMTk0OTA2PT4nTCcsCjE5NDkwNz0+J0wnLAoxOTQ5MDg9PidMJywKMTk0OTA5PT4nTCcsCjE5NDkxMD0+J0wnLAoxOTQ5MTE9PidMJywKMTk0OTEyPT4nTCcsCjE5NDkxMz0+J0wnLAoxOTQ5MTQ9PidMJywKMTk0OTE1PT4nTCcsCjE5NDkxNj0+J0wnLAoxOTQ5MTc9PidMJywKMTk0OTE4PT4nTCcsCjE5NDkxOT0+J0wnLAoxOTQ5MjA9PidMJywKMTk0OTIxPT4nTCcsCjE5NDkyMj0+J0wnLAoxOTQ5MjM9PidMJywKMTk0OTI0PT4nTCcsCjE5NDkyNT0+J0wnLAoxOTQ5MjY9PidMJywKMTk0OTI3PT4nTCcsCjE5NDkyOD0+J0wnLAoxOTQ5Mjk9PidMJywKMTk0OTMwPT4nTCcsCjE5NDkzMT0+J0wnLAoxOTQ5MzI9PidMJywKMTk0OTMzPT4nTCcsCjE5NDkzND0+J0wnLAoxOTQ5MzU9PidMJywKMTk0OTM2PT4nTCcsCjE5NDkzNz0+J0wnLAoxOTQ5Mzg9PidMJywKMTk0OTM5PT4nTCcsCjE5NDk0MD0+J0wnLAoxOTQ5NDE9PidMJywKMTk0OTQyPT4nTCcsCjE5NDk0Mz0+J0wnLAoxOTQ5NDQ9PidMJywKMTk0OTQ1PT4nTCcsCjE5NDk0Nj0+J0wnLAoxOTQ5NDc9PidMJywKMTk0OTQ4PT4nTCcsCjE5NDk0OT0+J0wnLAoxOTQ5NTA9PidMJywKMTk0OTUxPT4nTCcsCjE5NDk1Mj0+J0wnLAoxOTQ5NTM9PidMJywKMTk0OTU0PT4nTCcsCjE5NDk1NT0+J0wnLAoxOTQ5NTY9PidMJywKMTk0OTU3PT4nTCcsCjE5NDk1OD0+J0wnLAoxOTQ5NTk9PidMJywKMTk0OTYwPT4nTCcsCjE5NDk2MT0+J0wnLAoxOTQ5NjI9PidMJywKMTk0OTYzPT4nTCcsCjE5NDk2ND0+J0wnLAoxOTQ5NjU9PidMJywKMTk0OTY2PT4nTCcsCjE5NDk2Nz0+J0wnLAoxOTQ5Njg9PidMJywKMTk0OTY5PT4nTCcsCjE5NDk3MD0+J0wnLAoxOTQ5NzE9PidMJywKMTk0OTcyPT4nTCcsCjE5NDk3Mz0+J0wnLAoxOTQ5NzQ9PidMJywKMTk0OTc1PT4nTCcsCjE5NDk3Nj0+J0wnLAoxOTQ5Nzc9PidMJywKMTk0OTc4PT4nTCcsCjE5NDk3OT0+J0wnLAoxOTQ5ODA9PidMJywKMTk0OTgxPT4nTCcsCjE5NDk4Mj0+J0wnLAoxOTQ5ODM9PidMJywKMTk0OTg0PT4nTCcsCjE5NDk4NT0+J0wnLAoxOTQ5ODY9PidMJywKMTk0OTg3PT4nTCcsCjE5NDk4OD0+J0wnLAoxOTQ5ODk9PidMJywKMTk0OTkwPT4nTCcsCjE5NDk5MT0+J0wnLAoxOTQ5OTI9PidMJywKMTk0OTkzPT4nTCcsCjE5NDk5ND0+J0wnLAoxOTQ5OTU9PidMJywKMTk0OTk2PT4nTCcsCjE5NDk5Nz0+J0wnLAoxOTQ5OTg9PidMJywKMTk0OTk5PT4nTCcsCjE5NTAwMD0+J0wnLAoxOTUwMDE9PidMJywKMTk1MDAyPT4nTCcsCjE5NTAwMz0+J0wnLAoxOTUwMDQ9PidMJywKMTk1MDA1PT4nTCcsCjE5NTAwNj0+J0wnLAoxOTUwMDc9PidMJywKMTk1MDA4PT4nTCcsCjE5NTAwOT0+J0wnLAoxOTUwMTA9PidMJywKMTk1MDExPT4nTCcsCjE5NTAxMj0+J0wnLAoxOTUwMTM9PidMJywKMTk1MDE0PT4nTCcsCjE5NTAxNT0+J0wnLAoxOTUwMTY9PidMJywKMTk1MDE3PT4nTCcsCjE5NTAxOD0+J0wnLAoxOTUwMTk9PidMJywKMTk1MDIwPT4nTCcsCjE5NTAyMT0+J0wnLAoxOTUwMjI9PidMJywKMTk1MDIzPT4nTCcsCjE5NTAyND0+J0wnLAoxOTUwMjU9PidMJywKMTk1MDI2PT4nTCcsCjE5NTAyNz0+J0wnLAoxOTUwMjg9PidMJywKMTk1MDI5PT4nTCcsCjE5NTAzMD0+J0wnLAoxOTUwMzE9PidMJywKMTk1MDMyPT4nTCcsCjE5NTAzMz0+J0wnLAoxOTUwMzQ9PidMJywKMTk1MDM1PT4nTCcsCjE5NTAzNj0+J0wnLAoxOTUwMzc9PidMJywKMTk1MDM4PT4nTCcsCjE5NTAzOT0+J0wnLAoxOTUwNDA9PidMJywKMTk1MDQxPT4nTCcsCjE5NTA0Mj0+J0wnLAoxOTUwNDM9PidMJywKMTk1MDQ0PT4nTCcsCjE5NTA0NT0+J0wnLAoxOTUwNDY9PidMJywKMTk1MDQ3PT4nTCcsCjE5NTA0OD0+J0wnLAoxOTUwNDk9PidMJywKMTk1MDUwPT4nTCcsCjE5NTA1MT0+J0wnLAoxOTUwNTI9PidMJywKMTk1MDUzPT4nTCcsCjE5NTA1ND0+J0wnLAoxOTUwNTU9PidMJywKMTk1MDU2PT4nTCcsCjE5NTA1Nz0+J0wnLAoxOTUwNTg9PidMJywKMTk1MDU5PT4nTCcsCjE5NTA2MD0+J0wnLAoxOTUwNjE9PidMJywKMTk1MDYyPT4nTCcsCjE5NTA2Mz0+J0wnLAoxOTUwNjQ9PidMJywKMTk1MDY1PT4nTCcsCjE5NTA2Nj0+J0wnLAoxOTUwNjc9PidMJywKMTk1MDY4PT4nTCcsCjE5NTA2OT0+J0wnLAoxOTUwNzA9PidMJywKMTk1MDcxPT4nTCcsCjE5NTA3Mj0+J0wnLAoxOTUwNzM9PidMJywKMTk1MDc0PT4nTCcsCjE5NTA3NT0+J0wnLAoxOTUwNzY9PidMJywKMTk1MDc3PT4nTCcsCjE5NTA3OD0+J0wnLAoxOTUwNzk9PidMJywKMTk1MDgwPT4nTCcsCjE5NTA4MT0+J0wnLAoxOTUwODI9PidMJywKMTk1MDgzPT4nTCcsCjE5NTA4ND0+J0wnLAoxOTUwODU9PidMJywKMTk1MDg2PT4nTCcsCjE5NTA4Nz0+J0wnLAoxOTUwODg9PidMJywKMTk1MDg5PT4nTCcsCjE5NTA5MD0+J0wnLAoxOTUwOTE9PidMJywKMTk1MDkyPT4nTCcsCjE5NTA5Mz0+J0wnLAoxOTUwOTQ9PidMJywKMTk1MDk1PT4nTCcsCjE5NTA5Nj0+J0wnLAoxOTUwOTc9PidMJywKMTk1MDk4PT4nTCcsCjE5NTA5OT0+J0wnLAoxOTUxMDA9PidMJywKMTk1MTAxPT4nTCcsCjkxNzUwNT0+J0JOJywKOTE3NTM2PT4nQk4nLAo5MTc1Mzc9PidCTicsCjkxNzUzOD0+J0JOJywKOTE3NTM5PT4nQk4nLAo5MTc1NDA9PidCTicsCjkxNzU0MT0+J0JOJywKOTE3NTQyPT4nQk4nLAo5MTc1NDM9PidCTicsCjkxNzU0ND0+J0JOJywKOTE3NTQ1PT4nQk4nLAo5MTc1NDY9PidCTicsCjkxNzU0Nz0+J0JOJywKOTE3NTQ4PT4nQk4nLAo5MTc1NDk9PidCTicsCjkxNzU1MD0+J0JOJywKOTE3NTUxPT4nQk4nLAo5MTc1NTI9PidCTicsCjkxNzU1Mz0+J0JOJywKOTE3NTU0PT4nQk4nLAo5MTc1NTU9PidCTicsCjkxNzU1Nj0+J0JOJywKOTE3NTU3PT4nQk4nLAo5MTc1NTg9PidCTicsCjkxNzU1OT0+J0JOJywKOTE3NTYwPT4nQk4nLAo5MTc1NjE9PidCTicsCjkxNzU2Mj0+J0JOJywKOTE3NTYzPT4nQk4nLAo5MTc1NjQ9PidCTicsCjkxNzU2NT0+J0JOJywKOTE3NTY2PT4nQk4nLAo5MTc1Njc9PidCTicsCjkxNzU2OD0+J0JOJywKOTE3NTY5PT4nQk4nLAo5MTc1NzA9PidCTicsCjkxNzU3MT0+J0JOJywKOTE3NTcyPT4nQk4nLAo5MTc1NzM9PidCTicsCjkxNzU3ND0+J0JOJywKOTE3NTc1PT4nQk4nLAo5MTc1NzY9PidCTicsCjkxNzU3Nz0+J0JOJywKOTE3NTc4PT4nQk4nLAo5MTc1Nzk9PidCTicsCjkxNzU4MD0+J0JOJywKOTE3NTgxPT4nQk4nLAo5MTc1ODI9PidCTicsCjkxNzU4Mz0+J0JOJywKOTE3NTg0PT4nQk4nLAo5MTc1ODU9PidCTicsCjkxNzU4Nj0+J0JOJywKOTE3NTg3PT4nQk4nLAo5MTc1ODg9PidCTicsCjkxNzU4OT0+J0JOJywKOTE3NTkwPT4nQk4nLAo5MTc1OTE9PidCTicsCjkxNzU5Mj0+J0JOJywKOTE3NTkzPT4nQk4nLAo5MTc1OTQ9PidCTicsCjkxNzU5NT0+J0JOJywKOTE3NTk2PT4nQk4nLAo5MTc1OTc9PidCTicsCjkxNzU5OD0+J0JOJywKOTE3NTk5PT4nQk4nLAo5MTc2MDA9PidCTicsCjkxNzYwMT0+J0JOJywKOTE3NjAyPT4nQk4nLAo5MTc2MDM9PidCTicsCjkxNzYwND0+J0JOJywKOTE3NjA1PT4nQk4nLAo5MTc2MDY9PidCTicsCjkxNzYwNz0+J0JOJywKOTE3NjA4PT4nQk4nLAo5MTc2MDk9PidCTicsCjkxNzYxMD0+J0JOJywKOTE3NjExPT4nQk4nLAo5MTc2MTI9PidCTicsCjkxNzYxMz0+J0JOJywKOTE3NjE0PT4nQk4nLAo5MTc2MTU9PidCTicsCjkxNzYxNj0+J0JOJywKOTE3NjE3PT4nQk4nLAo5MTc2MTg9PidCTicsCjkxNzYxOT0+J0JOJywKOTE3NjIwPT4nQk4nLAo5MTc2MjE9PidCTicsCjkxNzYyMj0+J0JOJywKOTE3NjIzPT4nQk4nLAo5MTc2MjQ9PidCTicsCjkxNzYyNT0+J0JOJywKOTE3NjI2PT4nQk4nLAo5MTc2Mjc9PidCTicsCjkxNzYyOD0+J0JOJywKOTE3NjI5PT4nQk4nLAo5MTc2MzA9PidCTicsCjkxNzYzMT0+J0JOJywKOTE3NzYwPT4nTlNNJywKOTE3NzYxPT4nTlNNJywKOTE3NzYyPT4nTlNNJywKOTE3NzYzPT4nTlNNJywKOTE3NzY0PT4nTlNNJywKOTE3NzY1PT4nTlNNJywKOTE3NzY2PT4nTlNNJywKOTE3NzY3PT4nTlNNJywKOTE3NzY4PT4nTlNNJywKOTE3NzY5PT4nTlNNJywKOTE3NzcwPT4nTlNNJywKOTE3NzcxPT4nTlNNJywKOTE3NzcyPT4nTlNNJywKOTE3NzczPT4nTlNNJywKOTE3Nzc0PT4nTlNNJywKOTE3Nzc1PT4nTlNNJywKOTE3Nzc2PT4nTlNNJywKOTE3Nzc3PT4nTlNNJywKOTE3Nzc4PT4nTlNNJywKOTE3Nzc5PT4nTlNNJywKOTE3NzgwPT4nTlNNJywKOTE3NzgxPT4nTlNNJywKOTE3NzgyPT4nTlNNJywKOTE3NzgzPT4nTlNNJywKOTE3Nzg0PT4nTlNNJywKOTE3Nzg1PT4nTlNNJywKOTE3Nzg2PT4nTlNNJywKOTE3Nzg3PT4nTlNNJywKOTE3Nzg4PT4nTlNNJywKOTE3Nzg5PT4nTlNNJywKOTE3NzkwPT4nTlNNJywKOTE3NzkxPT4nTlNNJywKOTE3NzkyPT4nTlNNJywKOTE3NzkzPT4nTlNNJywKOTE3Nzk0PT4nTlNNJywKOTE3Nzk1PT4nTlNNJywKOTE3Nzk2PT4nTlNNJywKOTE3Nzk3PT4nTlNNJywKOTE3Nzk4PT4nTlNNJywKOTE3Nzk5PT4nTlNNJywKOTE3ODAwPT4nTlNNJywKOTE3ODAxPT4nTlNNJywKOTE3ODAyPT4nTlNNJywKOTE3ODAzPT4nTlNNJywKOTE3ODA0PT4nTlNNJywKOTE3ODA1PT4nTlNNJywKOTE3ODA2PT4nTlNNJywKOTE3ODA3PT4nTlNNJywKOTE3ODA4PT4nTlNNJywKOTE3ODA5PT4nTlNNJywKOTE3ODEwPT4nTlNNJywKOTE3ODExPT4nTlNNJywKOTE3ODEyPT4nTlNNJywKOTE3ODEzPT4nTlNNJywKOTE3ODE0PT4nTlNNJywKOTE3ODE1PT4nTlNNJywKOTE3ODE2PT4nTlNNJywKOTE3ODE3PT4nTlNNJywKOTE3ODE4PT4nTlNNJywKOTE3ODE5PT4nTlNNJywKOTE3ODIwPT4nTlNNJywKOTE3ODIxPT4nTlNNJywKOTE3ODIyPT4nTlNNJywKOTE3ODIzPT4nTlNNJywKOTE3ODI0PT4nTlNNJywKOTE3ODI1PT4nTlNNJywKOTE3ODI2PT4nTlNNJywKOTE3ODI3PT4nTlNNJywKOTE3ODI4PT4nTlNNJywKOTE3ODI5PT4nTlNNJywKOTE3ODMwPT4nTlNNJywKOTE3ODMxPT4nTlNNJywKOTE3ODMyPT4nTlNNJywKOTE3ODMzPT4nTlNNJywKOTE3ODM0PT4nTlNNJywKOTE3ODM1PT4nTlNNJywKOTE3ODM2PT4nTlNNJywKOTE3ODM3PT4nTlNNJywKOTE3ODM4PT4nTlNNJywKOTE3ODM5PT4nTlNNJywKOTE3ODQwPT4nTlNNJywKOTE3ODQxPT4nTlNNJywKOTE3ODQyPT4nTlNNJywKOTE3ODQzPT4nTlNNJywKOTE3ODQ0PT4nTlNNJywKOTE3ODQ1PT4nTlNNJywKOTE3ODQ2PT4nTlNNJywKOTE3ODQ3PT4nTlNNJywKOTE3ODQ4PT4nTlNNJywKOTE3ODQ5PT4nTlNNJywKOTE3ODUwPT4nTlNNJywKOTE3ODUxPT4nTlNNJywKOTE3ODUyPT4nTlNNJywKOTE3ODUzPT4nTlNNJywKOTE3ODU0PT4nTlNNJywKOTE3ODU1PT4nTlNNJywKOTE3ODU2PT4nTlNNJywKOTE3ODU3PT4nTlNNJywKOTE3ODU4PT4nTlNNJywKOTE3ODU5PT4nTlNNJywKOTE3ODYwPT4nTlNNJywKOTE3ODYxPT4nTlNNJywKOTE3ODYyPT4nTlNNJywKOTE3ODYzPT4nTlNNJywKOTE3ODY0PT4nTlNNJywKOTE3ODY1PT4nTlNNJywKOTE3ODY2PT4nTlNNJywKOTE3ODY3PT4nTlNNJywKOTE3ODY4PT4nTlNNJywKOTE3ODY5PT4nTlNNJywKOTE3ODcwPT4nTlNNJywKOTE3ODcxPT4nTlNNJywKOTE3ODcyPT4nTlNNJywKOTE3ODczPT4nTlNNJywKOTE3ODc0PT4nTlNNJywKOTE3ODc1PT4nTlNNJywKOTE3ODc2PT4nTlNNJywKOTE3ODc3PT4nTlNNJywKOTE3ODc4PT4nTlNNJywKOTE3ODc5PT4nTlNNJywKOTE3ODgwPT4nTlNNJywKOTE3ODgxPT4nTlNNJywKOTE3ODgyPT4nTlNNJywKOTE3ODgzPT4nTlNNJywKOTE3ODg0PT4nTlNNJywKOTE3ODg1PT4nTlNNJywKOTE3ODg2PT4nTlNNJywKOTE3ODg3PT4nTlNNJywKOTE3ODg4PT4nTlNNJywKOTE3ODg5PT4nTlNNJywKOTE3ODkwPT4nTlNNJywKOTE3ODkxPT4nTlNNJywKOTE3ODkyPT4nTlNNJywKOTE3ODkzPT4nTlNNJywKOTE3ODk0PT4nTlNNJywKOTE3ODk1PT4nTlNNJywKOTE3ODk2PT4nTlNNJywKOTE3ODk3PT4nTlNNJywKOTE3ODk4PT4nTlNNJywKOTE3ODk5PT4nTlNNJywKOTE3OTAwPT4nTlNNJywKOTE3OTAxPT4nTlNNJywKOTE3OTAyPT4nTlNNJywKOTE3OTAzPT4nTlNNJywKOTE3OTA0PT4nTlNNJywKOTE3OTA1PT4nTlNNJywKOTE3OTA2PT4nTlNNJywKOTE3OTA3PT4nTlNNJywKOTE3OTA4PT4nTlNNJywKOTE3OTA5PT4nTlNNJywKOTE3OTEwPT4nTlNNJywKOTE3OTExPT4nTlNNJywKOTE3OTEyPT4nTlNNJywKOTE3OTEzPT4nTlNNJywKOTE3OTE0PT4nTlNNJywKOTE3OTE1PT4nTlNNJywKOTE3OTE2PT4nTlNNJywKOTE3OTE3PT4nTlNNJywKOTE3OTE4PT4nTlNNJywKOTE3OTE5PT4nTlNNJywKOTE3OTIwPT4nTlNNJywKOTE3OTIxPT4nTlNNJywKOTE3OTIyPT4nTlNNJywKOTE3OTIzPT4nTlNNJywKOTE3OTI0PT4nTlNNJywKOTE3OTI1PT4nTlNNJywKOTE3OTI2PT4nTlNNJywKOTE3OTI3PT4nTlNNJywKOTE3OTI4PT4nTlNNJywKOTE3OTI5PT4nTlNNJywKOTE3OTMwPT4nTlNNJywKOTE3OTMxPT4nTlNNJywKOTE3OTMyPT4nTlNNJywKOTE3OTMzPT4nTlNNJywKOTE3OTM0PT4nTlNNJywKOTE3OTM1PT4nTlNNJywKOTE3OTM2PT4nTlNNJywKOTE3OTM3PT4nTlNNJywKOTE3OTM4PT4nTlNNJywKOTE3OTM5PT4nTlNNJywKOTE3OTQwPT4nTlNNJywKOTE3OTQxPT4nTlNNJywKOTE3OTQyPT4nTlNNJywKOTE3OTQzPT4nTlNNJywKOTE3OTQ0PT4nTlNNJywKOTE3OTQ1PT4nTlNNJywKOTE3OTQ2PT4nTlNNJywKOTE3OTQ3PT4nTlNNJywKOTE3OTQ4PT4nTlNNJywKOTE3OTQ5PT4nTlNNJywKOTE3OTUwPT4nTlNNJywKOTE3OTUxPT4nTlNNJywKOTE3OTUyPT4nTlNNJywKOTE3OTUzPT4nTlNNJywKOTE3OTU0PT4nTlNNJywKOTE3OTU1PT4nTlNNJywKOTE3OTU2PT4nTlNNJywKOTE3OTU3PT4nTlNNJywKOTE3OTU4PT4nTlNNJywKOTE3OTU5PT4nTlNNJywKOTE3OTYwPT4nTlNNJywKOTE3OTYxPT4nTlNNJywKOTE3OTYyPT4nTlNNJywKOTE3OTYzPT4nTlNNJywKOTE3OTY0PT4nTlNNJywKOTE3OTY1PT4nTlNNJywKOTE3OTY2PT4nTlNNJywKOTE3OTY3PT4nTlNNJywKOTE3OTY4PT4nTlNNJywKOTE3OTY5PT4nTlNNJywKOTE3OTcwPT4nTlNNJywKOTE3OTcxPT4nTlNNJywKOTE3OTcyPT4nTlNNJywKOTE3OTczPT4nTlNNJywKOTE3OTc0PT4nTlNNJywKOTE3OTc1PT4nTlNNJywKOTE3OTc2PT4nTlNNJywKOTE3OTc3PT4nTlNNJywKOTE3OTc4PT4nTlNNJywKOTE3OTc5PT4nTlNNJywKOTE3OTgwPT4nTlNNJywKOTE3OTgxPT4nTlNNJywKOTE3OTgyPT4nTlNNJywKOTE3OTgzPT4nTlNNJywKOTE3OTg0PT4nTlNNJywKOTE3OTg1PT4nTlNNJywKOTE3OTg2PT4nTlNNJywKOTE3OTg3PT4nTlNNJywKOTE3OTg4PT4nTlNNJywKOTE3OTg5PT4nTlNNJywKOTE3OTkwPT4nTlNNJywKOTE3OTkxPT4nTlNNJywKOTE3OTkyPT4nTlNNJywKOTE3OTkzPT4nTlNNJywKOTE3OTk0PT4nTlNNJywKOTE3OTk1PT4nTlNNJywKOTE3OTk2PT4nTlNNJywKOTE3OTk3PT4nTlNNJywKOTE3OTk4PT4nTlNNJywKOTE3OTk5PT4nTlNNJywKOTgzMDQwPT4nTCcsCjEwNDg1NzM9PidMJywKMTA0ODU3Nj0+J0wnLAoxMTE0MTA5PT4nTCcKKTsKCi8qKgogKiBNaXJyb3IgdW5pY29kZSBjaGFyYWN0ZXJzLiBGb3IgaW5mb3JtYXRpb24gb24gYmlkaSBtaXJyb3JpbmcsIHNlZSBVQVggIzk6IEJpZGlyZWN0aW9uYWwgQWxnb3JpdGhtLCBhdCBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3VuaWNvZGUvcmVwb3J0cy90cjkvCiAqIEBwdWJsaWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9taXJyb3IgPSBhcnJheSAoCjB4MDAyOD0+MHgwMDI5LAoweDAwMjk9PjB4MDAyOCwKMHgwMDNDPT4weDAwM0UsCjB4MDAzRT0+MHgwMDNDLAoweDAwNUI9PjB4MDA1RCwKMHgwMDVEPT4weDAwNUIsCjB4MDA3Qj0+MHgwMDdELAoweDAwN0Q9PjB4MDA3QiwKMHgwMEFCPT4weDAwQkIsCjB4MDBCQj0+MHgwMEFCLAoweDBGM0E9PjB4MEYzQiwKMHgwRjNCPT4weDBGM0EsCjB4MEYzQz0+MHgwRjNELAoweDBGM0Q9PjB4MEYzQywKMHgxNjlCPT4weDE2OUMsCjB4MTY5Qz0+MHgxNjlCLAoweDIwMTg9PjB4MjAxOSwKMHgyMDE5PT4weDIwMTgsCjB4MjAxQz0+MHgyMDFELAoweDIwMUQ9PjB4MjAxQywKMHgyMDM5PT4weDIwM0EsCjB4MjAzQT0+MHgyMDM5LAoweDIwNDU9PjB4MjA0NiwKMHgyMDQ2PT4weDIwNDUsCjB4MjA3RD0+MHgyMDdFLAoweDIwN0U9PjB4MjA3RCwKMHgyMDhEPT4weDIwOEUsCjB4MjA4RT0+MHgyMDhELAoweDIyMDg9PjB4MjIwQiwKMHgyMjA5PT4weDIyMEMsCjB4MjIwQT0+MHgyMjBELAoweDIyMEI9PjB4MjIwOCwKMHgyMjBDPT4weDIyMDksCjB4MjIwRD0+MHgyMjBBLAoweDIyMTU9PjB4MjlGNSwKMHgyMjNDPT4weDIyM0QsCjB4MjIzRD0+MHgyMjNDLAoweDIyNDM9PjB4MjJDRCwKMHgyMjUyPT4weDIyNTMsCjB4MjI1Mz0+MHgyMjUyLAoweDIyNTQ9PjB4MjI1NSwKMHgyMjU1PT4weDIyNTQsCjB4MjI2ND0+MHgyMjY1LAoweDIyNjU9PjB4MjI2NCwKMHgyMjY2PT4weDIyNjcsCjB4MjI2Nz0+MHgyMjY2LAoweDIyNjg9PjB4MjI2OSwKMHgyMjY5PT4weDIyNjgsCjB4MjI2QT0+MHgyMjZCLAoweDIyNkI9PjB4MjI2QSwKMHgyMjZFPT4weDIyNkYsCjB4MjI2Rj0+MHgyMjZFLAoweDIyNzA9PjB4MjI3MSwKMHgyMjcxPT4weDIyNzAsCjB4MjI3Mj0+MHgyMjczLAoweDIyNzM9PjB4MjI3MiwKMHgyMjc0PT4weDIyNzUsCjB4MjI3NT0+MHgyMjc0LAoweDIyNzY9PjB4MjI3NywKMHgyMjc3PT4weDIyNzYsCjB4MjI3OD0+MHgyMjc5LAoweDIyNzk9PjB4MjI3OCwKMHgyMjdBPT4weDIyN0IsCjB4MjI3Qj0+MHgyMjdBLAoweDIyN0M9PjB4MjI3RCwKMHgyMjdEPT4weDIyN0MsCjB4MjI3RT0+MHgyMjdGLAoweDIyN0Y9PjB4MjI3RSwKMHgyMjgwPT4weDIyODEsCjB4MjI4MT0+MHgyMjgwLAoweDIyODI9PjB4MjI4MywKMHgyMjgzPT4weDIyODIsCjB4MjI4ND0+MHgyMjg1LAoweDIyODU9PjB4MjI4NCwKMHgyMjg2PT4weDIyODcsCjB4MjI4Nz0+MHgyMjg2LAoweDIyODg9PjB4MjI4OSwKMHgyMjg5PT4weDIyODgsCjB4MjI4QT0+MHgyMjhCLAoweDIyOEI9PjB4MjI4QSwKMHgyMjhGPT4weDIyOTAsCjB4MjI5MD0+MHgyMjhGLAoweDIyOTE9PjB4MjI5MiwKMHgyMjkyPT4weDIyOTEsCjB4MjI5OD0+MHgyOUI4LAoweDIyQTI9PjB4MjJBMywKMHgyMkEzPT4weDIyQTIsCjB4MjJBNj0+MHgyQURFLAoweDIyQTg9PjB4MkFFNCwKMHgyMkE5PT4weDJBRTMsCjB4MjJBQj0+MHgyQUU1LAoweDIyQjA9PjB4MjJCMSwKMHgyMkIxPT4weDIyQjAsCjB4MjJCMj0+MHgyMkIzLAoweDIyQjM9PjB4MjJCMiwKMHgyMkI0PT4weDIyQjUsCjB4MjJCNT0+MHgyMkI0LAoweDIyQjY9PjB4MjJCNywKMHgyMkI3PT4weDIyQjYsCjB4MjJDOT0+MHgyMkNBLAoweDIyQ0E9PjB4MjJDOSwKMHgyMkNCPT4weDIyQ0MsCjB4MjJDQz0+MHgyMkNCLAoweDIyQ0Q9PjB4MjI0MywKMHgyMkQwPT4weDIyRDEsCjB4MjJEMT0+MHgyMkQwLAoweDIyRDY9PjB4MjJENywKMHgyMkQ3PT4weDIyRDYsCjB4MjJEOD0+MHgyMkQ5LAoweDIyRDk9PjB4MjJEOCwKMHgyMkRBPT4weDIyREIsCjB4MjJEQj0+MHgyMkRBLAoweDIyREM9PjB4MjJERCwKMHgyMkREPT4weDIyREMsCjB4MjJERT0+MHgyMkRGLAoweDIyREY9PjB4MjJERSwKMHgyMkUwPT4weDIyRTEsCjB4MjJFMT0+MHgyMkUwLAoweDIyRTI9PjB4MjJFMywKMHgyMkUzPT4weDIyRTIsCjB4MjJFND0+MHgyMkU1LAoweDIyRTU9PjB4MjJFNCwKMHgyMkU2PT4weDIyRTcsCjB4MjJFNz0+MHgyMkU2LAoweDIyRTg9PjB4MjJFOSwKMHgyMkU5PT4weDIyRTgsCjB4MjJFQT0+MHgyMkVCLAoweDIyRUI9PjB4MjJFQSwKMHgyMkVDPT4weDIyRUQsCjB4MjJFRD0+MHgyMkVDLAoweDIyRjA9PjB4MjJGMSwKMHgyMkYxPT4weDIyRjAsCjB4MjJGMj0+MHgyMkZBLAoweDIyRjM9PjB4MjJGQiwKMHgyMkY0PT4weDIyRkMsCjB4MjJGNj0+MHgyMkZELAoweDIyRjc9PjB4MjJGRSwKMHgyMkZBPT4weDIyRjIsCjB4MjJGQj0+MHgyMkYzLAoweDIyRkM9PjB4MjJGNCwKMHgyMkZEPT4weDIyRjYsCjB4MjJGRT0+MHgyMkY3LAoweDIzMDg9PjB4MjMwOSwKMHgyMzA5PT4weDIzMDgsCjB4MjMwQT0+MHgyMzBCLAoweDIzMEI9PjB4MjMwQSwKMHgyMzI5PT4weDIzMkEsCjB4MjMyQT0+MHgyMzI5LAoweDI3Njg9PjB4Mjc2OSwKMHgyNzY5PT4weDI3NjgsCjB4Mjc2QT0+MHgyNzZCLAoweDI3NkI9PjB4Mjc2QSwKMHgyNzZDPT4weDI3NkQsCjB4Mjc2RD0+MHgyNzZDLAoweDI3NkU9PjB4Mjc2RiwKMHgyNzZGPT4weDI3NkUsCjB4Mjc3MD0+MHgyNzcxLAoweDI3NzE9PjB4Mjc3MCwKMHgyNzcyPT4weDI3NzMsCjB4Mjc3Mz0+MHgyNzcyLAoweDI3NzQ9PjB4Mjc3NSwKMHgyNzc1PT4weDI3NzQsCjB4MjdDMz0+MHgyN0M0LAoweDI3QzQ9PjB4MjdDMywKMHgyN0M1PT4weDI3QzYsCjB4MjdDNj0+MHgyN0M1LAoweDI3RDU9PjB4MjdENiwKMHgyN0Q2PT4weDI3RDUsCjB4MjdERD0+MHgyN0RFLAoweDI3REU9PjB4MjdERCwKMHgyN0UyPT4weDI3RTMsCjB4MjdFMz0+MHgyN0UyLAoweDI3RTQ9PjB4MjdFNSwKMHgyN0U1PT4weDI3RTQsCjB4MjdFNj0+MHgyN0U3LAoweDI3RTc9PjB4MjdFNiwKMHgyN0U4PT4weDI3RTksCjB4MjdFOT0+MHgyN0U4LAoweDI3RUE9PjB4MjdFQiwKMHgyN0VCPT4weDI3RUEsCjB4Mjk4Mz0+MHgyOTg0LAoweDI5ODQ9PjB4Mjk4MywKMHgyOTg1PT4weDI5ODYsCjB4Mjk4Nj0+MHgyOTg1LAoweDI5ODc9PjB4Mjk4OCwKMHgyOTg4PT4weDI5ODcsCjB4Mjk4OT0+MHgyOThBLAoweDI5OEE9PjB4Mjk4OSwKMHgyOThCPT4weDI5OEMsCjB4Mjk4Qz0+MHgyOThCLAoweDI5OEQ9PjB4Mjk5MCwKMHgyOThFPT4weDI5OEYsCjB4Mjk4Rj0+MHgyOThFLAoweDI5OTA9PjB4Mjk4RCwKMHgyOTkxPT4weDI5OTIsCjB4Mjk5Mj0+MHgyOTkxLAoweDI5OTM9PjB4Mjk5NCwKMHgyOTk0PT4weDI5OTMsCjB4Mjk5NT0+MHgyOTk2LAoweDI5OTY9PjB4Mjk5NSwKMHgyOTk3PT4weDI5OTgsCjB4Mjk5OD0+MHgyOTk3LAoweDI5Qjg9PjB4MjI5OCwKMHgyOUMwPT4weDI5QzEsCjB4MjlDMT0+MHgyOUMwLAoweDI5QzQ9PjB4MjlDNSwKMHgyOUM1PT4weDI5QzQsCjB4MjlDRj0+MHgyOUQwLAoweDI5RDA9PjB4MjlDRiwKMHgyOUQxPT4weDI5RDIsCjB4MjlEMj0+MHgyOUQxLAoweDI5RDQ9PjB4MjlENSwKMHgyOUQ1PT4weDI5RDQsCjB4MjlEOD0+MHgyOUQ5LAoweDI5RDk9PjB4MjlEOCwKMHgyOURBPT4weDI5REIsCjB4MjlEQj0+MHgyOURBLAoweDI5RjU9PjB4MjIxNSwKMHgyOUY4PT4weDI5RjksCjB4MjlGOT0+MHgyOUY4LAoweDI5RkM9PjB4MjlGRCwKMHgyOUZEPT4weDI5RkMsCjB4MkEyQj0+MHgyQTJDLAoweDJBMkM9PjB4MkEyQiwKMHgyQTJEPT4weDJBMkUsCjB4MkEyRT0+MHgyQTJELAoweDJBMzQ9PjB4MkEzNSwKMHgyQTM1PT4weDJBMzQsCjB4MkEzQz0+MHgyQTNELAoweDJBM0Q9PjB4MkEzQywKMHgyQTY0PT4weDJBNjUsCjB4MkE2NT0+MHgyQTY0LAoweDJBNzk9PjB4MkE3QSwKMHgyQTdBPT4weDJBNzksCjB4MkE3RD0+MHgyQTdFLAoweDJBN0U9PjB4MkE3RCwKMHgyQTdGPT4weDJBODAsCjB4MkE4MD0+MHgyQTdGLAoweDJBODE9PjB4MkE4MiwKMHgyQTgyPT4weDJBODEsCjB4MkE4Mz0+MHgyQTg0LAoweDJBODQ9PjB4MkE4MywKMHgyQThCPT4weDJBOEMsCjB4MkE4Qz0+MHgyQThCLAoweDJBOTE9PjB4MkE5MiwKMHgyQTkyPT4weDJBOTEsCjB4MkE5Mz0+MHgyQTk0LAoweDJBOTQ9PjB4MkE5MywKMHgyQTk1PT4weDJBOTYsCjB4MkE5Nj0+MHgyQTk1LAoweDJBOTc9PjB4MkE5OCwKMHgyQTk4PT4weDJBOTcsCjB4MkE5OT0+MHgyQTlBLAoweDJBOUE9PjB4MkE5OSwKMHgyQTlCPT4weDJBOUMsCjB4MkE5Qz0+MHgyQTlCLAoweDJBQTE9PjB4MkFBMiwKMHgyQUEyPT4weDJBQTEsCjB4MkFBNj0+MHgyQUE3LAoweDJBQTc9PjB4MkFBNiwKMHgyQUE4PT4weDJBQTksCjB4MkFBOT0+MHgyQUE4LAoweDJBQUE9PjB4MkFBQiwKMHgyQUFCPT4weDJBQUEsCjB4MkFBQz0+MHgyQUFELAoweDJBQUQ9PjB4MkFBQywKMHgyQUFGPT4weDJBQjAsCjB4MkFCMD0+MHgyQUFGLAoweDJBQjM9PjB4MkFCNCwKMHgyQUI0PT4weDJBQjMsCjB4MkFCQj0+MHgyQUJDLAoweDJBQkM9PjB4MkFCQiwKMHgyQUJEPT4weDJBQkUsCjB4MkFCRT0+MHgyQUJELAoweDJBQkY9PjB4MkFDMCwKMHgyQUMwPT4weDJBQkYsCjB4MkFDMT0+MHgyQUMyLAoweDJBQzI9PjB4MkFDMSwKMHgyQUMzPT4weDJBQzQsCjB4MkFDND0+MHgyQUMzLAoweDJBQzU9PjB4MkFDNiwKMHgyQUM2PT4weDJBQzUsCjB4MkFDRD0+MHgyQUNFLAoweDJBQ0U9PjB4MkFDRCwKMHgyQUNGPT4weDJBRDAsCjB4MkFEMD0+MHgyQUNGLAoweDJBRDE9PjB4MkFEMiwKMHgyQUQyPT4weDJBRDEsCjB4MkFEMz0+MHgyQUQ0LAoweDJBRDQ9PjB4MkFEMywKMHgyQUQ1PT4weDJBRDYsCjB4MkFENj0+MHgyQUQ1LAoweDJBREU9PjB4MjJBNiwKMHgyQUUzPT4weDIyQTksCjB4MkFFND0+MHgyMkE4LAoweDJBRTU9PjB4MjJBQiwKMHgyQUVDPT4weDJBRUQsCjB4MkFFRD0+MHgyQUVDLAoweDJBRjc9PjB4MkFGOCwKMHgyQUY4PT4weDJBRjcsCjB4MkFGOT0+MHgyQUZBLAoweDJBRkE9PjB4MkFGOSwKMHgyRTAyPT4weDJFMDMsCjB4MkUwMz0+MHgyRTAyLAoweDJFMDQ9PjB4MkUwNSwKMHgyRTA1PT4weDJFMDQsCjB4MkUwOT0+MHgyRTBBLAoweDJFMEE9PjB4MkUwOSwKMHgyRTBDPT4weDJFMEQsCjB4MkUwRD0+MHgyRTBDLAoweDJFMUM9PjB4MkUxRCwKMHgyRTFEPT4weDJFMUMsCjB4MzAwOD0+MHgzMDA5LAoweDMwMDk9PjB4MzAwOCwKMHgzMDBBPT4weDMwMEIsCjB4MzAwQj0+MHgzMDBBLAoweDMwMEM9PjB4MzAwRCwKMHgzMDBEPT4weDMwMEMsCjB4MzAwRT0+MHgzMDBGLAoweDMwMEY9PjB4MzAwRSwKMHgzMDEwPT4weDMwMTEsCjB4MzAxMT0+MHgzMDEwLAoweDMwMTQ9PjB4MzAxNSwKMHgzMDE1PT4weDMwMTQsCjB4MzAxNj0+MHgzMDE3LAoweDMwMTc9PjB4MzAxNiwKMHgzMDE4PT4weDMwMTksCjB4MzAxOT0+MHgzMDE4LAoweDMwMUE9PjB4MzAxQiwKMHgzMDFCPT4weDMwMUEsCjB4MzAxRD0+MHgzMDFFLAoweDMwMUU9PjB4MzAxRCwKMHhGRTU5PT4weEZFNUEsCjB4RkU1QT0+MHhGRTU5LAoweEZFNUI9PjB4RkU1QywKMHhGRTVDPT4weEZFNUIsCjB4RkU1RD0+MHhGRTVFLAoweEZFNUU9PjB4RkU1RCwKMHhGRTY0PT4weEZFNjUsCjB4RkU2NT0+MHhGRTY0LAoweEZGMDg9PjB4RkYwOSwKMHhGRjA5PT4weEZGMDgsCjB4RkYxQz0+MHhGRjFFLAoweEZGMUU9PjB4RkYxQywKMHhGRjNCPT4weEZGM0QsCjB4RkYzRD0+MHhGRjNCLAoweEZGNUI9PjB4RkY1RCwKMHhGRjVEPT4weEZGNUIsCjB4RkY1Rj0+MHhGRjYwLAoweEZGNjA9PjB4RkY1RiwKMHhGRjYyPT4weEZGNjMsCjB4RkY2Mz0+MHhGRjYyKTsKCi8qKgogKiBBcmFiaWMgc2hhcGUgc3Vic3RpdHV0aW9uczogY2hhciBjb2RlID0+IChpc29sYXRlZCwgZmluYWwsIGluaXRpYWwsIG1lZGlhbCkuCiAqIEBwdWJsaWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9hcmFiaWNzdWJzdCA9IGFycmF5KAoxNTY5PT5hcnJheSg2NTE1MiksCjE1NzA9PmFycmF5KDY1MTUzLCA2NTE1NCwgNjUxNTMsIDY1MTU0KSwKMTU3MT0+YXJyYXkoNjUxNTUsIDY1MTU2LCA2NTE1NSwgNjUxNTYpLAoxNTcyPT5hcnJheSg2NTE1NywgNjUxNTgpLAoxNTczPT5hcnJheSg2NTE1OSwgNjUxNjAsIDY1MTU5LCA2NTE2MCksCjE1NzQ9PmFycmF5KDY1MTYxLCA2NTE2MiwgNjUxNjMsIDY1MTY0KSwKMTU3NT0+YXJyYXkoNjUxNjUsIDY1MTY2LCA2NTE2NSwgNjUxNjYpLAoxNTc2PT5hcnJheSg2NTE2NywgNjUxNjgsIDY1MTY5LCA2NTE3MCksCjE1Nzc9PmFycmF5KDY1MTcxLCA2NTE3MiksCjE1Nzg9PmFycmF5KDY1MTczLCA2NTE3NCwgNjUxNzUsIDY1MTc2KSwKMTU3OT0+YXJyYXkoNjUxNzcsIDY1MTc4LCA2NTE3OSwgNjUxODApLAoxNTgwPT5hcnJheSg2NTE4MSwgNjUxODIsIDY1MTgzLCA2NTE4NCksCjE1ODE9PmFycmF5KDY1MTg1LCA2NTE4NiwgNjUxODcsIDY1MTg4KSwKMTU4Mj0+YXJyYXkoNjUxODksIDY1MTkwLCA2NTE5MSwgNjUxOTIpLAoxNTgzPT5hcnJheSg2NTE5MywgNjUxOTQsIDY1MTkzLCA2NTE5NCksCjE1ODQ9PmFycmF5KDY1MTk1LCA2NTE5NiwgNjUxOTUsIDY1MTk2KSwKMTU4NT0+YXJyYXkoNjUxOTcsIDY1MTk4LCA2NTE5NywgNjUxOTgpLAoxNTg2PT5hcnJheSg2NTE5OSwgNjUyMDAsIDY1MTk5LCA2NTIwMCksCjE1ODc9PmFycmF5KDY1MjAxLCA2NTIwMiwgNjUyMDMsIDY1MjA0KSwKMTU4OD0+YXJyYXkoNjUyMDUsIDY1MjA2LCA2NTIwNywgNjUyMDgpLAoxNTg5PT5hcnJheSg2NTIwOSwgNjUyMTAsIDY1MjExLCA2NTIxMiksCjE1OTA9PmFycmF5KDY1MjEzLCA2NTIxNCwgNjUyMTUsIDY1MjE2KSwKMTU5MT0+YXJyYXkoNjUyMTcsIDY1MjE4LCA2NTIxOSwgNjUyMjApLAoxNTkyPT5hcnJheSg2NTIyMSwgNjUyMjIsIDY1MjIzLCA2NTIyNCksCjE1OTM9PmFycmF5KDY1MjI1LCA2NTIyNiwgNjUyMjcsIDY1MjI4KSwKMTU5ND0+YXJyYXkoNjUyMjksIDY1MjMwLCA2NTIzMSwgNjUyMzIpLAoxNjAxPT5hcnJheSg2NTIzMywgNjUyMzQsIDY1MjM1LCA2NTIzNiksCjE2MDI9PmFycmF5KDY1MjM3LCA2NTIzOCwgNjUyMzksIDY1MjQwKSwKMTYwMz0+YXJyYXkoNjUyNDEsIDY1MjQyLCA2NTI0MywgNjUyNDQpLAoxNjA0PT5hcnJheSg2NTI0NSwgNjUyNDYsIDY1MjQ3LCA2NTI0OCksCjE2MDU9PmFycmF5KDY1MjQ5LCA2NTI1MCwgNjUyNTEsIDY1MjUyKSwKMTYwNj0+YXJyYXkoNjUyNTMsIDY1MjU0LCA2NTI1NSwgNjUyNTYpLAoxNjA3PT5hcnJheSg2NTI1NywgNjUyNTgsIDY1MjU5LCA2NTI2MCksCjE2MDg9PmFycmF5KDY1MjYxLCA2NTI2MiwgNjUyNjEsIDY1MjYyKSwKMTYwOT0+YXJyYXkoNjUyNjMsIDY1MjY0LCA2NDQ4OCwgNjQ0ODkpLAoxNjEwPT5hcnJheSg2NTI2NSwgNjUyNjYsIDY1MjY3LCA2NTI2OCksCjE2NDk9PmFycmF5KDY0MzM2LCA2NDMzNyksCjE2NTU9PmFycmF5KDY0NDc3KSwKMTY1Nz0+YXJyYXkoNjQzNTgsIDY0MzU5LCA2NDM2MCwgNjQzNjEpLAoxNjU4PT5hcnJheSg2NDM1MCwgNjQzNTEsIDY0MzUyLCA2NDM1MyksCjE2NTk9PmFycmF5KDY0MzM4LCA2NDMzOSwgNjQzNDAsIDY0MzQxKSwKMTY2Mj0+YXJyYXkoNjQzNDIsIDY0MzQzLCA2NDM0NCwgNjQzNDUpLAoxNjYzPT5hcnJheSg2NDM1NCwgNjQzNTUsIDY0MzU2LCA2NDM1NyksCjE2NjQ9PmFycmF5KDY0MzQ2LCA2NDM0NywgNjQzNDgsIDY0MzQ5KSwKMTY2Nz0+YXJyYXkoNjQzNzQsIDY0Mzc1LCA2NDM3NiwgNjQzNzcpLAoxNjY4PT5hcnJheSg2NDM3MCwgNjQzNzEsIDY0MzcyLCA2NDM3MyksCjE2NzA9PmFycmF5KDY0Mzc4LCA2NDM3OSwgNjQzODAsIDY0MzgxKSwKMTY3MT0+YXJyYXkoNjQzODIsIDY0MzgzLCA2NDM4NCwgNjQzODUpLAoxNjcyPT5hcnJheSg2NDM5MiwgNjQzOTMpLAoxNjc2PT5hcnJheSg2NDM4OCwgNjQzODkpLAoxNjc3PT5hcnJheSg2NDM4NiwgNjQzODcpLAoxNjc4PT5hcnJheSg2NDM5MCwgNjQzOTEpLAoxNjgxPT5hcnJheSg2NDM5NiwgNjQzOTcpLAoxNjg4PT5hcnJheSg2NDM5NCwgNjQzOTUsIDY0Mzk0LCA2NDM5NSksCjE3MDA9PmFycmF5KDY0MzYyLCA2NDM2MywgNjQzNjQsIDY0MzY1KSwKMTcwMj0+YXJyYXkoNjQzNjYsIDY0MzY3LCA2NDM2OCwgNjQzNjkpLAoxNzA1PT5hcnJheSg2NDM5OCwgNjQzOTksIDY0NDAwLCA2NDQwMSksCjE3MDk9PmFycmF5KDY0NDY3LCA2NDQ2OCwgNjQ0NjksIDY0NDcwKSwKMTcxMT0+YXJyYXkoNjQ0MDIsIDY0NDAzLCA2NDQwNCwgNjQ0MDUpLAoxNzEzPT5hcnJheSg2NDQxMCwgNjQ0MTEsIDY0NDEyLCA2NDQxMyksCjE3MTU9PmFycmF5KDY0NDA2LCA2NDQwNywgNjQ0MDgsIDY0NDA5KSwKMTcyMj0+YXJyYXkoNjQ0MTQsIDY0NDE1KSwKMTcyMz0+YXJyYXkoNjQ0MTYsIDY0NDE3LCA2NDQxOCwgNjQ0MTkpLAoxNzI2PT5hcnJheSg2NDQyNiwgNjQ0MjcsIDY0NDI4LCA2NDQyOSksCjE3Mjg9PmFycmF5KDY0NDIwLCA2NDQyMSksCjE3Mjk9PmFycmF5KDY0NDIyLCA2NDQyMywgNjQ0MjQsIDY0NDI1KSwKMTczMz0+YXJyYXkoNjQ0ODAsIDY0NDgxKSwKMTczND0+YXJyYXkoNjQ0NzMsIDY0NDc0KSwKMTczNT0+YXJyYXkoNjQ0NzEsIDY0NDcyKSwKMTczNj0+YXJyYXkoNjQ0NzUsIDY0NDc2KSwKMTczNz0+YXJyYXkoNjQ0ODIsIDY0NDgzKSwKMTczOT0+YXJyYXkoNjQ0NzgsIDY0NDc5KSwKMTc0MD0+YXJyYXkoNjQ1MDgsIDY0NTA5LCA2NDUxMCwgNjQ1MTEpLAoxNzQ0PT5hcnJheSg2NDQ4NCwgNjQ0ODUsIDY0NDg2LCA2NDQ4NyksCjE3NDY9PmFycmF5KDY0NDMwLCA2NDQzMSksCjE3NDc9PmFycmF5KDY0NDMyLCA2NDQzMykKKTsKCi8qKgogKiBBcmFiaWMgbGFhIGxldHRlcjogKGNoYXIgY29kZSA9PiBpc29sYXRlZCwgZmluYWwsIGluaXRpYWwsIG1lZGlhbCkuCiAqIEBwdWJsaWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9sYWFfYXJyYXkgPSBhcnJheSAoCjE1NzAgPT5hcnJheSg2NTI2OSwgNjUyNzAsIDY1MjY5LCA2NTI3MCksCjE1NzEgPT5hcnJheSg2NTI3MSwgNjUyNzIsIDY1MjcxLCA2NTI3MiksCjE1NzMgPT5hcnJheSg2NTI3MywgNjUyNzQsIDY1MjczLCA2NTI3NCksCjE1NzUgPT5hcnJheSg2NTI3NSwgNjUyNzYsIDY1Mjc1LCA2NTI3NikKKTsKCi8qKgogKiBBcnJheSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucyBmb3Igc2VxdWVuY2VzIG9mIHR3byBkaWFjcml0aWNzIHN5bWJvbHMuCiAqIFB1dHRpbmcgdGhlIGNvbWJpbmluZyBtYXJrIGFuZCBjaGFyYWN0ZXIgaW4gdGhlIHNhbWUgZ2x5cGggYWxsb3dzIHVzIHRvIGF2b2lkIHRoZSB0d28gbWFya3Mgb3ZlcmxhcHBpbmcgZWFjaCBvdGhlciBpbiBhbiBpbGxlZ2libGUgbWFubmVyLgogKiBzZWNvbmQgTlNNIGNoYXIgY29kZSA9PiBzdWJzdGl0dXRpb24gY2hhcgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfZGlhY3JpdGljcyA9IGFycmF5ICgKMTYxMj0+NjQ2MDYsICMgU2hhZGRhICsgRGFtbWF0YW4KMTYxMz0+NjQ2MDcsICMgU2hhZGRhICsgS2FzcmF0YW4KMTYxND0+NjQ2MDgsICMgU2hhZGRhICsgRmF0aGEKMTYxNT0+NjQ2MDksICMgU2hhZGRhICsgRGFtbWEKMTYxNj0+NjQ2MTAgICMgU2hhZGRhICsgS2FzcmEKKTsKCi8qKgogKiBBcnJheSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucyBmcm9tIFVURi04IFVuaWNvZGUgdG8gTGF0aW4xLgogKiBAcHVibGljCiAqLwpwdWJsaWMgc3RhdGljICR1bmlfdXRmOHRvbGF0aW4gPSBhcnJheSAoCjgzNjQ9PjEyOCwgIyBFdXJvMQozMzg9PjE0MCwgICMgT0UKMzUyPT4xMzgsICAjIFNjYXJvbgozNzY9PjE1OSwgICMgWWRpZXJlc2lzCjM4MT0+MTQyLCAgIyBaY2Fyb24yCjgyMjY9PjE0OSwgIyBidWxsZXQzCjcxMD0+MTM2LCAgIyBjaXJjdW1mbGV4CjgyMjQ9PjEzNCwgIyBkYWdnZXIKODIyNT0+MTM1LCAjIGRhZ2dlcmRibAo4MjMwPT4xMzMsICMgZWxsaXBzaXMKODIxMj0+MTUxLCAjIGVtZGFzaAo4MjExPT4xNTAsICMgZW5kYXNoCjQwMj0+MTMxLCAgIyBmbG9yaW4KODI0OT0+MTM5LCAjIGd1aWxzaW5nbGxlZnQKODI1MD0+MTU1LCAjIGd1aWxzaW5nbHJpZ2h0CjMzOT0+MTU2LCAgIyBvZQo4MjQwPT4xMzcsICMgcGVydGhvdXNhbmQKODIyMj0+MTMyLCAjIHF1b3RlZGJsYmFzZQo4MjIwPT4xNDcsICMgcXVvdGVkYmxsZWZ0CjgyMjE9PjE0OCwgIyBxdW90ZWRibHJpZ2h0CjgyMTY9PjE0NSwgIyBxdW90ZWxlZnQKODIxNz0+MTQ2LCAjIHF1b3RlcmlnaHQKODIxOD0+MTMwLCAjIHF1b3Rlc2luZ2xiYXNlCjM1Mz0+MTU0LCAgIyBzY2Fyb24KNzMyPT4xNTIsICAjIHRpbGRlCjg0ODI9PjE1MywgIyB0cmFkZW1hcmsKMzgyPT4xNTggICAjIHpjYXJvbjIKKTsKCi8qKgogKiBBcnJheSBvZiBFbmNvZGluZyBNYXBzLgogKiBAcHVibGljIHN0YXRpYwogKi8KcHVibGljIHN0YXRpYyAkZW5jbWFwID0gYXJyYXkoCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDg3NAonY3A4NzQnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+J0V1cm8nLDEyOT0+Jy5ub3RkZWYnLDEzMD0+Jy5ub3RkZWYnLDEzMT0+Jy5ub3RkZWYnLDEzMj0+Jy5ub3RkZWYnLDEzMz0+J2VsbGlwc2lzJywxMzQ9Picubm90ZGVmJywxMzU9Picubm90ZGVmJywxMzY9Picubm90ZGVmJywxMzc9Picubm90ZGVmJywxMzg9Picubm90ZGVmJywxMzk9Picubm90ZGVmJywxNDA9Picubm90ZGVmJywxNDE9Picubm90ZGVmJywxNDI9Picubm90ZGVmJywxNDM9Picubm90ZGVmJywxNDQ9Picubm90ZGVmJywxNDU9PidxdW90ZWxlZnQnLDE0Nj0+J3F1b3RlcmlnaHQnLDE0Nz0+J3F1b3RlZGJsbGVmdCcsMTQ4PT4ncXVvdGVkYmxyaWdodCcsMTQ5PT4nYnVsbGV0JywxNTA9PidlbmRhc2gnLDE1MT0+J2VtZGFzaCcsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J2tva2FpdGhhaScsMTYyPT4na2hva2hhaXRoYWknLDE2Mz0+J2tob2todWF0dGhhaScsMTY0PT4na2hva2h3YWl0aGFpJywxNjU9PidraG9raG9udGhhaScsMTY2PT4na2hvcmFraGFuZ3RoYWknLDE2Nz0+J25nb25ndXRoYWknLDE2OD0+J2Nob2NoYW50aGFpJywxNjk9PidjaG9jaGluZ3RoYWknLDE3MD0+J2Nob2NoYW5ndGhhaScsMTcxPT4nc29zb3RoYWknLDE3Mj0+J2Nob2Nob2V0aGFpJywxNzM9Pid5b3lpbmd0aGFpJywxNzQ9Pidkb2NoYWRhdGhhaScsMTc1PT4ndG9wYXRha3RoYWknLDE3Nj0+J3Rob3RoYW50aGFpJywxNzc9Pid0aG9uYW5nbW9udGhvdGhhaScsMTc4PT4ndGhvcGh1dGhhb3RoYWknLDE3OT0+J25vbmVudGhhaScsMTgwPT4nZG9kZWt0aGFpJywxODE9Pid0b3Rhb3RoYWknLDE4Mj0+J3Rob3RodW5ndGhhaScsMTgzPT4ndGhvdGhhaGFudGhhaScsMTg0PT4ndGhvdGhvbmd0aGFpJywxODU9Pidub251dGhhaScsMTg2PT4nYm9iYWltYWl0aGFpJywxODc9Pidwb3BsYXRoYWknLDE4OD0+J3Bob3BodW5ndGhhaScsMTg5PT4nZm9mYXRoYWknLDE5MD0+J3Bob3BoYW50aGFpJywxOTE9Pidmb2ZhbnRoYWknLDE5Mj0+J3Bob3NhbXBoYW90aGFpJywxOTM9Pidtb21hdGhhaScsMTk0PT4neW95YWt0aGFpJywxOTU9Pidyb3J1YXRoYWknLDE5Nj0+J3J1dGhhaScsMTk3PT4nbG9saW5ndGhhaScsMTk4PT4nbHV0aGFpJywxOTk9Pid3b3dhZW50aGFpJywyMDA9Pidzb3NhbGF0aGFpJywyMDE9Pidzb3J1c2l0aGFpJywyMDI9Pidzb3N1YXRoYWknLDIwMz0+J2hvaGlwdGhhaScsMjA0PT4nbG9jaHVsYXRoYWknLDIwNT0+J29hbmd0aGFpJywyMDY9Pidob25va2h1a3RoYWknLDIwNz0+J3BhaXlhbm5vaXRoYWknLDIwOD0+J3NhcmFhdGhhaScsMjA5PT4nbWFpaGFuYWthdHRoYWknLDIxMD0+J3NhcmFhYXRoYWknLDIxMT0+J3NhcmFhbXRoYWknLDIxMj0+J3NhcmFpdGhhaScsMjEzPT4nc2FyYWlpdGhhaScsMjE0PT4nc2FyYXVldGhhaScsMjE1PT4nc2FyYXVlZXRoYWknLDIxNj0+J3NhcmF1dGhhaScsMjE3PT4nc2FyYXV1dGhhaScsMjE4PT4ncGhpbnRodXRoYWknLDIxOT0+Jy5ub3RkZWYnLDIyMD0+Jy5ub3RkZWYnLDIyMT0+Jy5ub3RkZWYnLDIyMj0+Jy5ub3RkZWYnLDIyMz0+J2JhaHR0aGFpJywyMjQ9PidzYXJhZXRoYWknLDIyNT0+J3NhcmFhZXRoYWknLDIyNj0+J3NhcmFvdGhhaScsMjI3PT4nc2FyYWFpbWFpbXVhbnRoYWknLDIyOD0+J3NhcmFhaW1haW1hbGFpdGhhaScsMjI5PT4nbGFra2hhbmd5YW90aGFpJywyMzA9PidtYWl5YW1va3RoYWknLDIzMT0+J21haXRhaWtodXRoYWknLDIzMj0+J21haWVrdGhhaScsMjMzPT4nbWFpdGhvdGhhaScsMjM0PT4nbWFpdHJpdGhhaScsMjM1PT4nbWFpY2hhdHRhd2F0aGFpJywyMzY9Pid0aGFudGhha2hhdHRoYWknLDIzNz0+J25pa2hhaGl0dGhhaScsMjM4PT4neWFtYWtrYW50aGFpJywyMzk9Pidmb25nbWFudGhhaScsMjQwPT4nemVyb3RoYWknLDI0MT0+J29uZXRoYWknLDI0Mj0+J3R3b3RoYWknLDI0Mz0+J3RocmVldGhhaScsMjQ0PT4nZm91cnRoYWknLDI0NT0+J2ZpdmV0aGFpJywyNDY9PidzaXh0aGFpJywyNDc9PidzZXZlbnRoYWknLDI0OD0+J2VpZ2h0dGhhaScsMjQ5PT4nbmluZXRoYWknLDI1MD0+J2FuZ2toYW5raHV0aGFpJywyNTE9PidraG9tdXR0aGFpJywyNTI9Picubm90ZGVmJywyNTM9Picubm90ZGVmJywyNTQ9Picubm90ZGVmJywyNTU9Picubm90ZGVmJyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDEyNTAKJ2NwMTI1MCcgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nRXVybycsMTI5PT4nLm5vdGRlZicsMTMwPT4ncXVvdGVzaW5nbGJhc2UnLDEzMT0+Jy5ub3RkZWYnLDEzMj0+J3F1b3RlZGJsYmFzZScsMTMzPT4nZWxsaXBzaXMnLDEzND0+J2RhZ2dlcicsMTM1PT4nZGFnZ2VyZGJsJywxMzY9Picubm90ZGVmJywxMzc9PidwZXJ0aG91c2FuZCcsMTM4PT4nU2Nhcm9uJywxMzk9PidndWlsc2luZ2xsZWZ0JywxNDA9PidTYWN1dGUnLDE0MT0+J1RjYXJvbicsMTQyPT4nWmNhcm9uJywxNDM9PidaYWN1dGUnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+J3F1b3RlbGVmdCcsMTQ2PT4ncXVvdGVyaWdodCcsMTQ3PT4ncXVvdGVkYmxsZWZ0JywxNDg9PidxdW90ZWRibHJpZ2h0JywxNDk9PididWxsZXQnLDE1MD0+J2VuZGFzaCcsMTUxPT4nZW1kYXNoJywxNTI9Picubm90ZGVmJywxNTM9Pid0cmFkZW1hcmsnLDE1ND0+J3NjYXJvbicsMTU1PT4nZ3VpbHNpbmdscmlnaHQnLDE1Nj0+J3NhY3V0ZScsMTU3PT4ndGNhcm9uJywxNTg9Pid6Y2Fyb24nLDE1OT0+J3phY3V0ZScsMTYwPT4nc3BhY2UnLDE2MT0+J2Nhcm9uJywxNjI9PidicmV2ZScsMTYzPT4nTHNsYXNoJywxNjQ9PidjdXJyZW5jeScsMTY1PT4nQW9nb25laycsMTY2PT4nYnJva2VuYmFyJywxNjc9PidzZWN0aW9uJywxNjg9PidkaWVyZXNpcycsMTY5PT4nY29weXJpZ2h0JywxNzA9PidTY2VkaWxsYScsMTcxPT4nZ3VpbGxlbW90bGVmdCcsMTcyPT4nbG9naWNhbG5vdCcsMTczPT4naHlwaGVuJywxNzQ9PidyZWdpc3RlcmVkJywxNzU9PidaZG90YWNjZW50JywxNzY9PidkZWdyZWUnLDE3Nz0+J3BsdXNtaW51cycsMTc4PT4nb2dvbmVrJywxNzk9Pidsc2xhc2gnLDE4MD0+J2FjdXRlJywxODE9PidtdScsMTgyPT4ncGFyYWdyYXBoJywxODM9PidwZXJpb2RjZW50ZXJlZCcsMTg0PT4nY2VkaWxsYScsMTg1PT4nYW9nb25laycsMTg2PT4nc2NlZGlsbGEnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidMY2Fyb24nLDE4OT0+J2h1bmdhcnVtbGF1dCcsMTkwPT4nbGNhcm9uJywxOTE9Pid6ZG90YWNjZW50JywxOTI9PidSYWN1dGUnLDE5Mz0+J0FhY3V0ZScsMTk0PT4nQWNpcmN1bWZsZXgnLDE5NT0+J0FicmV2ZScsMTk2PT4nQWRpZXJlc2lzJywxOTc9PidMYWN1dGUnLDE5OD0+J0NhY3V0ZScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0NjYXJvbicsMjAxPT4nRWFjdXRlJywyMDI9PidFb2dvbmVrJywyMDM9PidFZGllcmVzaXMnLDIwND0+J0VjYXJvbicsMjA1PT4nSWFjdXRlJywyMDY9PidJY2lyY3VtZmxleCcsMjA3PT4nRGNhcm9uJywyMDg9PidEY3JvYXQnLDIwOT0+J05hY3V0ZScsMjEwPT4nTmNhcm9uJywyMTE9PidPYWN1dGUnLDIxMj0+J09jaXJjdW1mbGV4JywyMTM9PidPaHVuZ2FydW1sYXV0JywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidSY2Fyb24nLDIxNz0+J1VyaW5nJywyMTg9PidVYWN1dGUnLDIxOT0+J1VodW5nYXJ1bWxhdXQnLDIyMD0+J1VkaWVyZXNpcycsMjIxPT4nWWFjdXRlJywyMjI9PidUY29tbWFhY2NlbnQnLDIyMz0+J2dlcm1hbmRibHMnLDIyND0+J3JhY3V0ZScsMjI1PT4nYWFjdXRlJywyMjY9PidhY2lyY3VtZmxleCcsMjI3PT4nYWJyZXZlJywyMjg9PidhZGllcmVzaXMnLDIyOT0+J2xhY3V0ZScsMjMwPT4nY2FjdXRlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nY2Nhcm9uJywyMzM9PidlYWN1dGUnLDIzND0+J2VvZ29uZWsnLDIzNT0+J2VkaWVyZXNpcycsMjM2PT4nZWNhcm9uJywyMzc9PidpYWN1dGUnLDIzOD0+J2ljaXJjdW1mbGV4JywyMzk9PidkY2Fyb24nLDI0MD0+J2Rjcm9hdCcsMjQxPT4nbmFjdXRlJywyNDI9PiduY2Fyb24nLDI0Mz0+J29hY3V0ZScsMjQ0PT4nb2NpcmN1bWZsZXgnLDI0NT0+J29odW5nYXJ1bWxhdXQnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9PidyY2Fyb24nLDI0OT0+J3VyaW5nJywyNTA9Pid1YWN1dGUnLDI1MT0+J3VodW5nYXJ1bWxhdXQnLDI1Mj0+J3VkaWVyZXNpcycsMjUzPT4neWFjdXRlJywyNTQ9Pid0Y29tbWFhY2NlbnQnLDI1NT0+J2RvdGFjY2VudCcpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogY3AxMjUxCidjcDEyNTEnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+J2FmaWkxMDA1MScsMTI5PT4nYWZpaTEwMDUyJywxMzA9PidxdW90ZXNpbmdsYmFzZScsMTMxPT4nYWZpaTEwMTAwJywxMzI9PidxdW90ZWRibGJhc2UnLDEzMz0+J2VsbGlwc2lzJywxMzQ9PidkYWdnZXInLDEzNT0+J2RhZ2dlcmRibCcsMTM2PT4nRXVybycsMTM3PT4ncGVydGhvdXNhbmQnLDEzOD0+J2FmaWkxMDA1OCcsMTM5PT4nZ3VpbHNpbmdsbGVmdCcsMTQwPT4nYWZpaTEwMDU5JywxNDE9PidhZmlpMTAwNjEnLDE0Mj0+J2FmaWkxMDA2MCcsMTQzPT4nYWZpaTEwMTQ1JywxNDQ9PidhZmlpMTAwOTknLDE0NT0+J3F1b3RlbGVmdCcsMTQ2PT4ncXVvdGVyaWdodCcsMTQ3PT4ncXVvdGVkYmxsZWZ0JywxNDg9PidxdW90ZWRibHJpZ2h0JywxNDk9PididWxsZXQnLDE1MD0+J2VuZGFzaCcsMTUxPT4nZW1kYXNoJywxNTI9Picubm90ZGVmJywxNTM9Pid0cmFkZW1hcmsnLDE1ND0+J2FmaWkxMDEwNicsMTU1PT4nZ3VpbHNpbmdscmlnaHQnLDE1Nj0+J2FmaWkxMDEwNycsMTU3PT4nYWZpaTEwMTA5JywxNTg9PidhZmlpMTAxMDgnLDE1OT0+J2FmaWkxMDE5MycsMTYwPT4nc3BhY2UnLDE2MT0+J2FmaWkxMDA2MicsMTYyPT4nYWZpaTEwMTEwJywxNjM9PidhZmlpMTAwNTcnLDE2ND0+J2N1cnJlbmN5JywxNjU9PidhZmlpMTAwNTAnLDE2Nj0+J2Jyb2tlbmJhcicsMTY3PT4nc2VjdGlvbicsMTY4PT4nYWZpaTEwMDIzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J2FmaWkxMDA1MycsMTcxPT4nZ3VpbGxlbW90bGVmdCcsMTcyPT4nbG9naWNhbG5vdCcsMTczPT4naHlwaGVuJywxNzQ9PidyZWdpc3RlcmVkJywxNzU9PidhZmlpMTAwNTYnLDE3Nj0+J2RlZ3JlZScsMTc3PT4ncGx1c21pbnVzJywxNzg9PidhZmlpMTAwNTUnLDE3OT0+J2FmaWkxMDEwMycsMTgwPT4nYWZpaTEwMDk4JywxODE9PidtdScsMTgyPT4ncGFyYWdyYXBoJywxODM9PidwZXJpb2RjZW50ZXJlZCcsMTg0PT4nYWZpaTEwMDcxJywxODU9PidhZmlpNjEzNTInLDE4Nj0+J2FmaWkxMDEwMScsMTg3PT4nZ3VpbGxlbW90cmlnaHQnLDE4OD0+J2FmaWkxMDEwNScsMTg5PT4nYWZpaTEwMDU0JywxOTA9PidhZmlpMTAxMDInLDE5MT0+J2FmaWkxMDEwNCcsMTkyPT4nYWZpaTEwMDE3JywxOTM9PidhZmlpMTAwMTgnLDE5ND0+J2FmaWkxMDAxOScsMTk1PT4nYWZpaTEwMDIwJywxOTY9PidhZmlpMTAwMjEnLDE5Nz0+J2FmaWkxMDAyMicsMTk4PT4nYWZpaTEwMDI0JywxOTk9PidhZmlpMTAwMjUnLDIwMD0+J2FmaWkxMDAyNicsMjAxPT4nYWZpaTEwMDI3JywyMDI9PidhZmlpMTAwMjgnLDIwMz0+J2FmaWkxMDAyOScsMjA0PT4nYWZpaTEwMDMwJywyMDU9PidhZmlpMTAwMzEnLDIwNj0+J2FmaWkxMDAzMicsMjA3PT4nYWZpaTEwMDMzJywyMDg9PidhZmlpMTAwMzQnLDIwOT0+J2FmaWkxMDAzNScsMjEwPT4nYWZpaTEwMDM2JywyMTE9PidhZmlpMTAwMzcnLDIxMj0+J2FmaWkxMDAzOCcsMjEzPT4nYWZpaTEwMDM5JywyMTQ9PidhZmlpMTAwNDAnLDIxNT0+J2FmaWkxMDA0MScsMjE2PT4nYWZpaTEwMDQyJywyMTc9PidhZmlpMTAwNDMnLDIxOD0+J2FmaWkxMDA0NCcsMjE5PT4nYWZpaTEwMDQ1JywyMjA9PidhZmlpMTAwNDYnLDIyMT0+J2FmaWkxMDA0NycsMjIyPT4nYWZpaTEwMDQ4JywyMjM9PidhZmlpMTAwNDknLDIyND0+J2FmaWkxMDA2NScsMjI1PT4nYWZpaTEwMDY2JywyMjY9PidhZmlpMTAwNjcnLDIyNz0+J2FmaWkxMDA2OCcsMjI4PT4nYWZpaTEwMDY5JywyMjk9PidhZmlpMTAwNzAnLDIzMD0+J2FmaWkxMDA3MicsMjMxPT4nYWZpaTEwMDczJywyMzI9PidhZmlpMTAwNzQnLDIzMz0+J2FmaWkxMDA3NScsMjM0PT4nYWZpaTEwMDc2JywyMzU9PidhZmlpMTAwNzcnLDIzNj0+J2FmaWkxMDA3OCcsMjM3PT4nYWZpaTEwMDc5JywyMzg9PidhZmlpMTAwODAnLDIzOT0+J2FmaWkxMDA4MScsMjQwPT4nYWZpaTEwMDgyJywyNDE9PidhZmlpMTAwODMnLDI0Mj0+J2FmaWkxMDA4NCcsMjQzPT4nYWZpaTEwMDg1JywyNDQ9PidhZmlpMTAwODYnLDI0NT0+J2FmaWkxMDA4NycsMjQ2PT4nYWZpaTEwMDg4JywyNDc9PidhZmlpMTAwODknLDI0OD0+J2FmaWkxMDA5MCcsMjQ5PT4nYWZpaTEwMDkxJywyNTA9PidhZmlpMTAwOTInLDI1MT0+J2FmaWkxMDA5MycsMjUyPT4nYWZpaTEwMDk0JywyNTM9PidhZmlpMTAwOTUnLDI1ND0+J2FmaWkxMDA5NicsMjU1PT4nYWZpaTEwMDk3JyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDEyNTIKJ2NwMTI1MicgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nRXVybycsMTI5PT4nLm5vdGRlZicsMTMwPT4ncXVvdGVzaW5nbGJhc2UnLDEzMT0+J2Zsb3JpbicsMTMyPT4ncXVvdGVkYmxiYXNlJywxMzM9PidlbGxpcHNpcycsMTM0PT4nZGFnZ2VyJywxMzU9PidkYWdnZXJkYmwnLDEzNj0+J2NpcmN1bWZsZXgnLDEzNz0+J3BlcnRob3VzYW5kJywxMzg9PidTY2Fyb24nLDEzOT0+J2d1aWxzaW5nbGxlZnQnLDE0MD0+J09FJywxNDE9Picubm90ZGVmJywxNDI9PidaY2Fyb24nLDE0Mz0+Jy5ub3RkZWYnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+J3F1b3RlbGVmdCcsMTQ2PT4ncXVvdGVyaWdodCcsMTQ3PT4ncXVvdGVkYmxsZWZ0JywxNDg9PidxdW90ZWRibHJpZ2h0JywxNDk9PididWxsZXQnLDE1MD0+J2VuZGFzaCcsMTUxPT4nZW1kYXNoJywxNTI9Pid0aWxkZScsMTUzPT4ndHJhZGVtYXJrJywxNTQ9PidzY2Fyb24nLDE1NT0+J2d1aWxzaW5nbHJpZ2h0JywxNTY9PidvZScsMTU3PT4nLm5vdGRlZicsMTU4PT4nemNhcm9uJywxNTk9PidZZGllcmVzaXMnLDE2MD0+J3NwYWNlJywxNjE9PidleGNsYW1kb3duJywxNjI9PidjZW50JywxNjM9PidzdGVybGluZycsMTY0PT4nY3VycmVuY3knLDE2NT0+J3llbicsMTY2PT4nYnJva2VuYmFyJywxNjc9PidzZWN0aW9uJywxNjg9PidkaWVyZXNpcycsMTY5PT4nY29weXJpZ2h0JywxNzA9PidvcmRmZW1pbmluZScsMTcxPT4nZ3VpbGxlbW90bGVmdCcsMTcyPT4nbG9naWNhbG5vdCcsMTczPT4naHlwaGVuJywxNzQ9PidyZWdpc3RlcmVkJywxNzU9PidtYWNyb24nLDE3Nj0+J2RlZ3JlZScsMTc3PT4ncGx1c21pbnVzJywxNzg9Pid0d29zdXBlcmlvcicsMTc5PT4ndGhyZWVzdXBlcmlvcicsMTgwPT4nYWN1dGUnLDE4MT0+J211JywxODI9PidwYXJhZ3JhcGgnLDE4Mz0+J3BlcmlvZGNlbnRlcmVkJywxODQ9PidjZWRpbGxhJywxODU9PidvbmVzdXBlcmlvcicsMTg2PT4nb3JkbWFzY3VsaW5lJywxODc9PidndWlsbGVtb3RyaWdodCcsMTg4PT4nb25lcXVhcnRlcicsMTg5PT4nb25laGFsZicsMTkwPT4ndGhyZWVxdWFydGVycycsMTkxPT4ncXVlc3Rpb25kb3duJywxOTI9PidBZ3JhdmUnLDE5Mz0+J0FhY3V0ZScsMTk0PT4nQWNpcmN1bWZsZXgnLDE5NT0+J0F0aWxkZScsMTk2PT4nQWRpZXJlc2lzJywxOTc9PidBcmluZycsMTk4PT4nQUUnLDE5OT0+J0NjZWRpbGxhJywyMDA9PidFZ3JhdmUnLDIwMT0+J0VhY3V0ZScsMjAyPT4nRWNpcmN1bWZsZXgnLDIwMz0+J0VkaWVyZXNpcycsMjA0PT4nSWdyYXZlJywyMDU9PidJYWN1dGUnLDIwNj0+J0ljaXJjdW1mbGV4JywyMDc9PidJZGllcmVzaXMnLDIwOD0+J0V0aCcsMjA5PT4nTnRpbGRlJywyMTA9PidPZ3JhdmUnLDIxMT0+J09hY3V0ZScsMjEyPT4nT2NpcmN1bWZsZXgnLDIxMz0+J090aWxkZScsMjE0PT4nT2RpZXJlc2lzJywyMTU9PidtdWx0aXBseScsMjE2PT4nT3NsYXNoJywyMTc9PidVZ3JhdmUnLDIxOD0+J1VhY3V0ZScsMjE5PT4nVWNpcmN1bWZsZXgnLDIyMD0+J1VkaWVyZXNpcycsMjIxPT4nWWFjdXRlJywyMjI9PidUaG9ybicsMjIzPT4nZ2VybWFuZGJscycsMjI0PT4nYWdyYXZlJywyMjU9PidhYWN1dGUnLDIyNj0+J2FjaXJjdW1mbGV4JywyMjc9PidhdGlsZGUnLDIyOD0+J2FkaWVyZXNpcycsMjI5PT4nYXJpbmcnLDIzMD0+J2FlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nZWdyYXZlJywyMzM9PidlYWN1dGUnLDIzND0+J2VjaXJjdW1mbGV4JywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2lncmF2ZScsMjM3PT4naWFjdXRlJywyMzg9PidpY2lyY3VtZmxleCcsMjM5PT4naWRpZXJlc2lzJywyNDA9PidldGgnLDI0MT0+J250aWxkZScsMjQyPT4nb2dyYXZlJywyNDM9PidvYWN1dGUnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pidvc2xhc2gnLDI0OT0+J3VncmF2ZScsMjUwPT4ndWFjdXRlJywyNTE9Pid1Y2lyY3VtZmxleCcsMjUyPT4ndWRpZXJlc2lzJywyNTM9Pid5YWN1dGUnLDI1ND0+J3Rob3JuJywyNTU9Pid5ZGllcmVzaXMnKSwKCi8vIGVuY29kaW5nIG1hcCBmb3I6IGNwMTI1MwonY3AxMjUzJyA9PiBhcnJheSgwPT4nLm5vdGRlZicsMT0+Jy5ub3RkZWYnLDI9Picubm90ZGVmJywzPT4nLm5vdGRlZicsND0+Jy5ub3RkZWYnLDU9Picubm90ZGVmJyw2PT4nLm5vdGRlZicsNz0+Jy5ub3RkZWYnLDg9Picubm90ZGVmJyw5PT4nLm5vdGRlZicsMTA9Picubm90ZGVmJywxMT0+Jy5ub3RkZWYnLDEyPT4nLm5vdGRlZicsMTM9Picubm90ZGVmJywxND0+Jy5ub3RkZWYnLDE1PT4nLm5vdGRlZicsMTY9Picubm90ZGVmJywxNz0+Jy5ub3RkZWYnLDE4PT4nLm5vdGRlZicsMTk9Picubm90ZGVmJywyMD0+Jy5ub3RkZWYnLDIxPT4nLm5vdGRlZicsMjI9Picubm90ZGVmJywyMz0+Jy5ub3RkZWYnLDI0PT4nLm5vdGRlZicsMjU9Picubm90ZGVmJywyNj0+Jy5ub3RkZWYnLDI3PT4nLm5vdGRlZicsMjg9Picubm90ZGVmJywyOT0+Jy5ub3RkZWYnLDMwPT4nLm5vdGRlZicsMzE9Picubm90ZGVmJywzMj0+J3NwYWNlJywzMz0+J2V4Y2xhbScsMzQ9PidxdW90ZWRibCcsMzU9PidudW1iZXJzaWduJywzNj0+J2RvbGxhcicsMzc9PidwZXJjZW50JywzOD0+J2FtcGVyc2FuZCcsMzk9PidxdW90ZXNpbmdsZScsNDA9PidwYXJlbmxlZnQnLDQxPT4ncGFyZW5yaWdodCcsNDI9Pidhc3RlcmlzaycsNDM9PidwbHVzJyw0ND0+J2NvbW1hJyw0NT0+J2h5cGhlbicsNDY9PidwZXJpb2QnLDQ3PT4nc2xhc2gnLDQ4PT4nemVybycsNDk9PidvbmUnLDUwPT4ndHdvJyw1MT0+J3RocmVlJyw1Mj0+J2ZvdXInLDUzPT4nZml2ZScsNTQ9PidzaXgnLDU1PT4nc2V2ZW4nLDU2PT4nZWlnaHQnLDU3PT4nbmluZScsNTg9Pidjb2xvbicsNTk9PidzZW1pY29sb24nLDYwPT4nbGVzcycsNjE9PidlcXVhbCcsNjI9PidncmVhdGVyJyw2Mz0+J3F1ZXN0aW9uJyw2ND0+J2F0Jyw2NT0+J0EnLDY2PT4nQicsNjc9PidDJyw2OD0+J0QnLDY5PT4nRScsNzA9PidGJyw3MT0+J0cnLDcyPT4nSCcsNzM9PidJJyw3ND0+J0onLDc1PT4nSycsNzY9PidMJyw3Nz0+J00nLDc4PT4nTicsNzk9PidPJyw4MD0+J1AnLDgxPT4nUScsODI9PidSJyw4Mz0+J1MnLDg0PT4nVCcsODU9PidVJyw4Nj0+J1YnLDg3PT4nVycsODg9PidYJyw4OT0+J1knLDkwPT4nWicsOTE9PidicmFja2V0bGVmdCcsOTI9PidiYWNrc2xhc2gnLDkzPT4nYnJhY2tldHJpZ2h0Jyw5ND0+J2FzY2lpY2lyY3VtJyw5NT0+J3VuZGVyc2NvcmUnLDk2PT4nZ3JhdmUnLDk3PT4nYScsOTg9PidiJyw5OT0+J2MnLDEwMD0+J2QnLDEwMT0+J2UnLDEwMj0+J2YnLDEwMz0+J2cnLDEwND0+J2gnLDEwNT0+J2knLDEwNj0+J2onLDEwNz0+J2snLDEwOD0+J2wnLDEwOT0+J20nLDExMD0+J24nLDExMT0+J28nLDExMj0+J3AnLDExMz0+J3EnLDExND0+J3InLDExNT0+J3MnLDExNj0+J3QnLDExNz0+J3UnLDExOD0+J3YnLDExOT0+J3cnLDEyMD0+J3gnLDEyMT0+J3knLDEyMj0+J3onLDEyMz0+J2JyYWNlbGVmdCcsMTI0PT4nYmFyJywxMjU9PidicmFjZXJpZ2h0JywxMjY9Pidhc2NpaXRpbGRlJywxMjc9Picubm90ZGVmJywxMjg9PidFdXJvJywxMjk9Picubm90ZGVmJywxMzA9PidxdW90ZXNpbmdsYmFzZScsMTMxPT4nZmxvcmluJywxMzI9PidxdW90ZWRibGJhc2UnLDEzMz0+J2VsbGlwc2lzJywxMzQ9PidkYWdnZXInLDEzNT0+J2RhZ2dlcmRibCcsMTM2PT4nLm5vdGRlZicsMTM3PT4ncGVydGhvdXNhbmQnLDEzOD0+Jy5ub3RkZWYnLDEzOT0+J2d1aWxzaW5nbGxlZnQnLDE0MD0+Jy5ub3RkZWYnLDE0MT0+Jy5ub3RkZWYnLDE0Mj0+Jy5ub3RkZWYnLDE0Mz0+Jy5ub3RkZWYnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+J3F1b3RlbGVmdCcsMTQ2PT4ncXVvdGVyaWdodCcsMTQ3PT4ncXVvdGVkYmxsZWZ0JywxNDg9PidxdW90ZWRibHJpZ2h0JywxNDk9PididWxsZXQnLDE1MD0+J2VuZGFzaCcsMTUxPT4nZW1kYXNoJywxNTI9Picubm90ZGVmJywxNTM9Pid0cmFkZW1hcmsnLDE1ND0+Jy5ub3RkZWYnLDE1NT0+J2d1aWxzaW5nbHJpZ2h0JywxNTY9Picubm90ZGVmJywxNTc9Picubm90ZGVmJywxNTg9Picubm90ZGVmJywxNTk9Picubm90ZGVmJywxNjA9PidzcGFjZScsMTYxPT4nZGllcmVzaXN0b25vcycsMTYyPT4nQWxwaGF0b25vcycsMTYzPT4nc3RlcmxpbmcnLDE2ND0+J2N1cnJlbmN5JywxNjU9Pid5ZW4nLDE2Nj0+J2Jyb2tlbmJhcicsMTY3PT4nc2VjdGlvbicsMTY4PT4nZGllcmVzaXMnLDE2OT0+J2NvcHlyaWdodCcsMTcwPT4nLm5vdGRlZicsMTcxPT4nZ3VpbGxlbW90bGVmdCcsMTcyPT4nbG9naWNhbG5vdCcsMTczPT4naHlwaGVuJywxNzQ9PidyZWdpc3RlcmVkJywxNzU9PidhZmlpMDAyMDgnLDE3Nj0+J2RlZ3JlZScsMTc3PT4ncGx1c21pbnVzJywxNzg9Pid0d29zdXBlcmlvcicsMTc5PT4ndGhyZWVzdXBlcmlvcicsMTgwPT4ndG9ub3MnLDE4MT0+J211JywxODI9PidwYXJhZ3JhcGgnLDE4Mz0+J3BlcmlvZGNlbnRlcmVkJywxODQ9PidFcHNpbG9udG9ub3MnLDE4NT0+J0V0YXRvbm9zJywxODY9PidJb3RhdG9ub3MnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidPbWljcm9udG9ub3MnLDE4OT0+J29uZWhhbGYnLDE5MD0+J1Vwc2lsb250b25vcycsMTkxPT4nT21lZ2F0b25vcycsMTkyPT4naW90YWRpZXJlc2lzdG9ub3MnLDE5Mz0+J0FscGhhJywxOTQ9PidCZXRhJywxOTU9PidHYW1tYScsMTk2PT4nRGVsdGEnLDE5Nz0+J0Vwc2lsb24nLDE5OD0+J1pldGEnLDE5OT0+J0V0YScsMjAwPT4nVGhldGEnLDIwMT0+J0lvdGEnLDIwMj0+J0thcHBhJywyMDM9PidMYW1iZGEnLDIwND0+J011JywyMDU9PidOdScsMjA2PT4nWGknLDIwNz0+J09taWNyb24nLDIwOD0+J1BpJywyMDk9PidSaG8nLDIxMD0+Jy5ub3RkZWYnLDIxMT0+J1NpZ21hJywyMTI9PidUYXUnLDIxMz0+J1Vwc2lsb24nLDIxND0+J1BoaScsMjE1PT4nQ2hpJywyMTY9PidQc2knLDIxNz0+J09tZWdhJywyMTg9PidJb3RhZGllcmVzaXMnLDIxOT0+J1Vwc2lsb25kaWVyZXNpcycsMjIwPT4nYWxwaGF0b25vcycsMjIxPT4nZXBzaWxvbnRvbm9zJywyMjI9PidldGF0b25vcycsMjIzPT4naW90YXRvbm9zJywyMjQ9Pid1cHNpbG9uZGllcmVzaXN0b25vcycsMjI1PT4nYWxwaGEnLDIyNj0+J2JldGEnLDIyNz0+J2dhbW1hJywyMjg9PidkZWx0YScsMjI5PT4nZXBzaWxvbicsMjMwPT4nemV0YScsMjMxPT4nZXRhJywyMzI9Pid0aGV0YScsMjMzPT4naW90YScsMjM0PT4na2FwcGEnLDIzNT0+J2xhbWJkYScsMjM2PT4nbXUnLDIzNz0+J251JywyMzg9Pid4aScsMjM5PT4nb21pY3JvbicsMjQwPT4ncGknLDI0MT0+J3JobycsMjQyPT4nc2lnbWExJywyNDM9PidzaWdtYScsMjQ0PT4ndGF1JywyNDU9Pid1cHNpbG9uJywyNDY9PidwaGknLDI0Nz0+J2NoaScsMjQ4PT4ncHNpJywyNDk9PidvbWVnYScsMjUwPT4naW90YWRpZXJlc2lzJywyNTE9Pid1cHNpbG9uZGllcmVzaXMnLDI1Mj0+J29taWNyb250b25vcycsMjUzPT4ndXBzaWxvbnRvbm9zJywyNTQ9PidvbWVnYXRvbm9zJywyNTU9Picubm90ZGVmJyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDEyNTQKJ2NwMTI1NCcgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nRXVybycsMTI5PT4nLm5vdGRlZicsMTMwPT4ncXVvdGVzaW5nbGJhc2UnLDEzMT0+J2Zsb3JpbicsMTMyPT4ncXVvdGVkYmxiYXNlJywxMzM9PidlbGxpcHNpcycsMTM0PT4nZGFnZ2VyJywxMzU9PidkYWdnZXJkYmwnLDEzNj0+J2NpcmN1bWZsZXgnLDEzNz0+J3BlcnRob3VzYW5kJywxMzg9PidTY2Fyb24nLDEzOT0+J2d1aWxzaW5nbGxlZnQnLDE0MD0+J09FJywxNDE9Picubm90ZGVmJywxNDI9Picubm90ZGVmJywxNDM9Picubm90ZGVmJywxNDQ9Picubm90ZGVmJywxNDU9PidxdW90ZWxlZnQnLDE0Nj0+J3F1b3RlcmlnaHQnLDE0Nz0+J3F1b3RlZGJsbGVmdCcsMTQ4PT4ncXVvdGVkYmxyaWdodCcsMTQ5PT4nYnVsbGV0JywxNTA9PidlbmRhc2gnLDE1MT0+J2VtZGFzaCcsMTUyPT4ndGlsZGUnLDE1Mz0+J3RyYWRlbWFyaycsMTU0PT4nc2Nhcm9uJywxNTU9PidndWlsc2luZ2xyaWdodCcsMTU2PT4nb2UnLDE1Nz0+Jy5ub3RkZWYnLDE1OD0+Jy5ub3RkZWYnLDE1OT0+J1lkaWVyZXNpcycsMTYwPT4nc3BhY2UnLDE2MT0+J2V4Y2xhbWRvd24nLDE2Mj0+J2NlbnQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9PidjdXJyZW5jeScsMTY1PT4neWVuJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J29yZGZlbWluaW5lJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J2NlZGlsbGEnLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidvcmRtYXNjdWxpbmUnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidvbmVxdWFydGVyJywxODk9PidvbmVoYWxmJywxOTA9Pid0aHJlZXF1YXJ0ZXJzJywxOTE9PidxdWVzdGlvbmRvd24nLDE5Mj0+J0FncmF2ZScsMTkzPT4nQWFjdXRlJywxOTQ9PidBY2lyY3VtZmxleCcsMTk1PT4nQXRpbGRlJywxOTY9PidBZGllcmVzaXMnLDE5Nz0+J0FyaW5nJywxOTg9PidBRScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0VncmF2ZScsMjAxPT4nRWFjdXRlJywyMDI9PidFY2lyY3VtZmxleCcsMjAzPT4nRWRpZXJlc2lzJywyMDQ9PidJZ3JhdmUnLDIwNT0+J0lhY3V0ZScsMjA2PT4nSWNpcmN1bWZsZXgnLDIwNz0+J0lkaWVyZXNpcycsMjA4PT4nR2JyZXZlJywyMDk9PidOdGlsZGUnLDIxMD0+J09ncmF2ZScsMjExPT4nT2FjdXRlJywyMTI9PidPY2lyY3VtZmxleCcsMjEzPT4nT3RpbGRlJywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidPc2xhc2gnLDIxNz0+J1VncmF2ZScsMjE4PT4nVWFjdXRlJywyMTk9PidVY2lyY3VtZmxleCcsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidJZG90YWNjZW50JywyMjI9PidTY2VkaWxsYScsMjIzPT4nZ2VybWFuZGJscycsMjI0PT4nYWdyYXZlJywyMjU9PidhYWN1dGUnLDIyNj0+J2FjaXJjdW1mbGV4JywyMjc9PidhdGlsZGUnLDIyOD0+J2FkaWVyZXNpcycsMjI5PT4nYXJpbmcnLDIzMD0+J2FlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nZWdyYXZlJywyMzM9PidlYWN1dGUnLDIzND0+J2VjaXJjdW1mbGV4JywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2lncmF2ZScsMjM3PT4naWFjdXRlJywyMzg9PidpY2lyY3VtZmxleCcsMjM5PT4naWRpZXJlc2lzJywyNDA9PidnYnJldmUnLDI0MT0+J250aWxkZScsMjQyPT4nb2dyYXZlJywyNDM9PidvYWN1dGUnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pidvc2xhc2gnLDI0OT0+J3VncmF2ZScsMjUwPT4ndWFjdXRlJywyNTE9Pid1Y2lyY3VtZmxleCcsMjUyPT4ndWRpZXJlc2lzJywyNTM9Pidkb3RsZXNzaScsMjU0PT4nc2NlZGlsbGEnLDI1NT0+J3lkaWVyZXNpcycpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogY3AxMjU1CidjcDEyNTUnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+J0V1cm8nLDEyOT0+Jy5ub3RkZWYnLDEzMD0+J3F1b3Rlc2luZ2xiYXNlJywxMzE9PidmbG9yaW4nLDEzMj0+J3F1b3RlZGJsYmFzZScsMTMzPT4nZWxsaXBzaXMnLDEzND0+J2RhZ2dlcicsMTM1PT4nZGFnZ2VyZGJsJywxMzY9PidjaXJjdW1mbGV4JywxMzc9PidwZXJ0aG91c2FuZCcsMTM4PT4nLm5vdGRlZicsMTM5PT4nZ3VpbHNpbmdsbGVmdCcsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4ncXVvdGVsZWZ0JywxNDY9PidxdW90ZXJpZ2h0JywxNDc9PidxdW90ZWRibGxlZnQnLDE0OD0+J3F1b3RlZGJscmlnaHQnLDE0OT0+J2J1bGxldCcsMTUwPT4nZW5kYXNoJywxNTE9PidlbWRhc2gnLDE1Mj0+J3RpbGRlJywxNTM9Pid0cmFkZW1hcmsnLDE1ND0+Jy5ub3RkZWYnLDE1NT0+J2d1aWxzaW5nbHJpZ2h0JywxNTY9Picubm90ZGVmJywxNTc9Picubm90ZGVmJywxNTg9Picubm90ZGVmJywxNTk9Picubm90ZGVmJywxNjA9PidzcGFjZScsMTYxPT4nZXhjbGFtZG93bicsMTYyPT4nY2VudCcsMTYzPT4nc3RlcmxpbmcnLDE2ND0+J2FmaWk1NzYzNicsMTY1PT4neWVuJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J211bHRpcGx5JywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidzZnRoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4nbWlkZG90JywxODQ9PidjZWRpbGxhJywxODU9PidvbmVzdXBlcmlvcicsMTg2PT4nZGl2aWRlJywxODc9PidndWlsbGVtb3RyaWdodCcsMTg4PT4nb25lcXVhcnRlcicsMTg5PT4nb25laGFsZicsMTkwPT4ndGhyZWVxdWFydGVycycsMTkxPT4ncXVlc3Rpb25kb3duJywxOTI9PidhZmlpNTc3OTknLDE5Mz0+J2FmaWk1NzgwMScsMTk0PT4nYWZpaTU3ODAwJywxOTU9PidhZmlpNTc4MDInLDE5Nj0+J2FmaWk1Nzc5MycsMTk3PT4nYWZpaTU3Nzk0JywxOTg9PidhZmlpNTc3OTUnLDE5OT0+J2FmaWk1Nzc5OCcsMjAwPT4nYWZpaTU3Nzk3JywyMDE9PidhZmlpNTc4MDYnLDIwMj0+Jy5ub3RkZWYnLDIwMz0+J2FmaWk1Nzc5NicsMjA0PT4nYWZpaTU3ODA3JywyMDU9PidhZmlpNTc4MzknLDIwNj0+J2FmaWk1NzY0NScsMjA3PT4nYWZpaTU3ODQxJywyMDg9PidhZmlpNTc4NDInLDIwOT0+J2FmaWk1NzgwNCcsMjEwPT4nYWZpaTU3ODAzJywyMTE9PidhZmlpNTc2NTgnLDIxMj0+J2FmaWk1NzcxNicsMjEzPT4nYWZpaTU3NzE3JywyMTQ9PidhZmlpNTc3MTgnLDIxNT0+J2dlcmVzaGhlYnJldycsMjE2PT4nZ2Vyc2hheWltaGVicmV3JywyMTc9Picubm90ZGVmJywyMTg9Picubm90ZGVmJywyMTk9Picubm90ZGVmJywyMjA9Picubm90ZGVmJywyMjE9Picubm90ZGVmJywyMjI9Picubm90ZGVmJywyMjM9Picubm90ZGVmJywyMjQ9PidhZmlpNTc2NjQnLDIyNT0+J2FmaWk1NzY2NScsMjI2PT4nYWZpaTU3NjY2JywyMjc9PidhZmlpNTc2NjcnLDIyOD0+J2FmaWk1NzY2OCcsMjI5PT4nYWZpaTU3NjY5JywyMzA9PidhZmlpNTc2NzAnLDIzMT0+J2FmaWk1NzY3MScsMjMyPT4nYWZpaTU3NjcyJywyMzM9PidhZmlpNTc2NzMnLDIzND0+J2FmaWk1NzY3NCcsMjM1PT4nYWZpaTU3Njc1JywyMzY9PidhZmlpNTc2NzYnLDIzNz0+J2FmaWk1NzY3NycsMjM4PT4nYWZpaTU3Njc4JywyMzk9PidhZmlpNTc2NzknLDI0MD0+J2FmaWk1NzY4MCcsMjQxPT4nYWZpaTU3NjgxJywyNDI9PidhZmlpNTc2ODInLDI0Mz0+J2FmaWk1NzY4MycsMjQ0PT4nYWZpaTU3Njg0JywyNDU9PidhZmlpNTc2ODUnLDI0Nj0+J2FmaWk1NzY4NicsMjQ3PT4nYWZpaTU3Njg3JywyNDg9PidhZmlpNTc2ODgnLDI0OT0+J2FmaWk1NzY4OScsMjUwPT4nYWZpaTU3NjkwJywyNTE9Picubm90ZGVmJywyNTI9Picubm90ZGVmJywyNTM9PidhZmlpMjk5JywyNTQ9PidhZmlpMzAwJywyNTU9Picubm90ZGVmJyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDEyNTYKJ2NwMTI1NicgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nRXVybycsMTI5PT4nYWZpaTU3NTA2JywxMzA9PidxdW90ZXNpbmdsYmFzZScsMTMxPT4nZmxvcmluJywxMzI9PidxdW90ZWRibGJhc2UnLDEzMz0+J2VsbGlwc2lzJywxMzQ9PidkYWdnZXInLDEzNT0+J2RhZ2dlcmRibCcsMTM2PT4nY2lyY3VtZmxleCcsMTM3PT4ncGVydGhvdXNhbmQnLDEzOD0+J2FmaWk1NzUxMScsMTM5PT4nZ3VpbHNpbmdsbGVmdCcsMTQwPT4nT0UnLDE0MT0+J2FmaWk1NzUwNycsMTQyPT4nYWZpaTU3NTA4JywxNDM9PidhZmlpNTc1MTInLDE0ND0+J2FmaWk1NzUwOScsMTQ1PT4ncXVvdGVsZWZ0JywxNDY9PidxdW90ZXJpZ2h0JywxNDc9PidxdW90ZWRibGxlZnQnLDE0OD0+J3F1b3RlZGJscmlnaHQnLDE0OT0+J2J1bGxldCcsMTUwPT4nZW5kYXNoJywxNTE9PidlbWRhc2gnLDE1Mj0+Jy5ub3RkZWYnLDE1Mz0+J3RyYWRlbWFyaycsMTU0PT4nYWZpaTU3NTEzJywxNTU9PidndWlsc2luZ2xyaWdodCcsMTU2PT4nb2UnLDE1Nz0+J2FmaWk2MTY2NCcsMTU4PT4nYWZpaTMwMScsMTU5PT4nYWZpaTU3NTE0JywxNjA9PidzcGFjZScsMTYxPT4nYWZpaTU3Mzg4JywxNjI9PidjZW50JywxNjM9PidzdGVybGluZycsMTY0PT4nY3VycmVuY3knLDE2NT0+J3llbicsMTY2PT4nYnJva2VuYmFyJywxNjc9PidzZWN0aW9uJywxNjg9PidkaWVyZXNpcycsMTY5PT4nY29weXJpZ2h0JywxNzA9Picubm90ZGVmJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J2NlZGlsbGEnLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidhZmlpNTc0MDMnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidvbmVxdWFydGVyJywxODk9PidvbmVoYWxmJywxOTA9Pid0aHJlZXF1YXJ0ZXJzJywxOTE9PidhZmlpNTc0MDcnLDE5Mj0+Jy5ub3RkZWYnLDE5Mz0+J2FmaWk1NzQwOScsMTk0PT4nYWZpaTU3NDEwJywxOTU9PidhZmlpNTc0MTEnLDE5Nj0+J2FmaWk1NzQxMicsMTk3PT4nYWZpaTU3NDEzJywxOTg9PidhZmlpNTc0MTQnLDE5OT0+J2FmaWk1NzQxNScsMjAwPT4nYWZpaTU3NDE2JywyMDE9PidhZmlpNTc0MTcnLDIwMj0+J2FmaWk1NzQxOCcsMjAzPT4nYWZpaTU3NDE5JywyMDQ9PidhZmlpNTc0MjAnLDIwNT0+J2FmaWk1NzQyMScsMjA2PT4nYWZpaTU3NDIyJywyMDc9PidhZmlpNTc0MjMnLDIwOD0+J2FmaWk1NzQyNCcsMjA5PT4nYWZpaTU3NDI1JywyMTA9PidhZmlpNTc0MjYnLDIxMT0+J2FmaWk1NzQyNycsMjEyPT4nYWZpaTU3NDI4JywyMTM9PidhZmlpNTc0MjknLDIxND0+J2FmaWk1NzQzMCcsMjE1PT4nbXVsdGlwbHknLDIxNj0+J2FmaWk1NzQzMScsMjE3PT4nYWZpaTU3NDMyJywyMTg9PidhZmlpNTc0MzMnLDIxOT0+J2FmaWk1NzQzNCcsMjIwPT4nYWZpaTU3NDQwJywyMjE9PidhZmlpNTc0NDEnLDIyMj0+J2FmaWk1NzQ0MicsMjIzPT4nYWZpaTU3NDQzJywyMjQ9PidhZ3JhdmUnLDIyNT0+J2FmaWk1NzQ0NCcsMjI2PT4nYWNpcmN1bWZsZXgnLDIyNz0+J2FmaWk1NzQ0NScsMjI4PT4nYWZpaTU3NDQ2JywyMjk9PidhZmlpNTc0NzAnLDIzMD0+J2FmaWk1NzQ0OCcsMjMxPT4nY2NlZGlsbGEnLDIzMj0+J2VncmF2ZScsMjMzPT4nZWFjdXRlJywyMzQ9PidlY2lyY3VtZmxleCcsMjM1PT4nZWRpZXJlc2lzJywyMzY9PidhZmlpNTc0NDknLDIzNz0+J2FmaWk1NzQ1MCcsMjM4PT4naWNpcmN1bWZsZXgnLDIzOT0+J2lkaWVyZXNpcycsMjQwPT4nYWZpaTU3NDUxJywyNDE9PidhZmlpNTc0NTInLDI0Mj0+J2FmaWk1NzQ1MycsMjQzPT4nYWZpaTU3NDU0JywyNDQ9PidvY2lyY3VtZmxleCcsMjQ1PT4nYWZpaTU3NDU1JywyNDY9PidhZmlpNTc0NTYnLDI0Nz0+J2RpdmlkZScsMjQ4PT4nYWZpaTU3NDU3JywyNDk9Pid1Z3JhdmUnLDI1MD0+J2FmaWk1NzQ1OCcsMjUxPT4ndWNpcmN1bWZsZXgnLDI1Mj0+J3VkaWVyZXNpcycsMjUzPT4nYWZpaTI5OScsMjU0PT4nYWZpaTMwMCcsMjU1PT4nYWZpaTU3NTE5JyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBjcDEyNTcKJ2NwMTI1NycgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nRXVybycsMTI5PT4nLm5vdGRlZicsMTMwPT4ncXVvdGVzaW5nbGJhc2UnLDEzMT0+Jy5ub3RkZWYnLDEzMj0+J3F1b3RlZGJsYmFzZScsMTMzPT4nZWxsaXBzaXMnLDEzND0+J2RhZ2dlcicsMTM1PT4nZGFnZ2VyZGJsJywxMzY9Picubm90ZGVmJywxMzc9PidwZXJ0aG91c2FuZCcsMTM4PT4nLm5vdGRlZicsMTM5PT4nZ3VpbHNpbmdsbGVmdCcsMTQwPT4nLm5vdGRlZicsMTQxPT4nZGllcmVzaXMnLDE0Mj0+J2Nhcm9uJywxNDM9PidjZWRpbGxhJywxNDQ9Picubm90ZGVmJywxNDU9PidxdW90ZWxlZnQnLDE0Nj0+J3F1b3RlcmlnaHQnLDE0Nz0+J3F1b3RlZGJsbGVmdCcsMTQ4PT4ncXVvdGVkYmxyaWdodCcsMTQ5PT4nYnVsbGV0JywxNTA9PidlbmRhc2gnLDE1MT0+J2VtZGFzaCcsMTUyPT4nLm5vdGRlZicsMTUzPT4ndHJhZGVtYXJrJywxNTQ9Picubm90ZGVmJywxNTU9PidndWlsc2luZ2xyaWdodCcsMTU2PT4nLm5vdGRlZicsMTU3PT4nbWFjcm9uJywxNTg9PidvZ29uZWsnLDE1OT0+Jy5ub3RkZWYnLDE2MD0+J3NwYWNlJywxNjE9Picubm90ZGVmJywxNjI9PidjZW50JywxNjM9PidzdGVybGluZycsMTY0PT4nY3VycmVuY3knLDE2NT0+Jy5ub3RkZWYnLDE2Nj0+J2Jyb2tlbmJhcicsMTY3PT4nc2VjdGlvbicsMTY4PT4nT3NsYXNoJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J1Jjb21tYWFjY2VudCcsMTcxPT4nZ3VpbGxlbW90bGVmdCcsMTcyPT4nbG9naWNhbG5vdCcsMTczPT4naHlwaGVuJywxNzQ9PidyZWdpc3RlcmVkJywxNzU9PidBRScsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J29zbGFzaCcsMTg1PT4nb25lc3VwZXJpb3InLDE4Nj0+J3Jjb21tYWFjY2VudCcsMTg3PT4nZ3VpbGxlbW90cmlnaHQnLDE4OD0+J29uZXF1YXJ0ZXInLDE4OT0+J29uZWhhbGYnLDE5MD0+J3RocmVlcXVhcnRlcnMnLDE5MT0+J2FlJywxOTI9PidBb2dvbmVrJywxOTM9PidJb2dvbmVrJywxOTQ9PidBbWFjcm9uJywxOTU9PidDYWN1dGUnLDE5Nj0+J0FkaWVyZXNpcycsMTk3PT4nQXJpbmcnLDE5OD0+J0VvZ29uZWsnLDE5OT0+J0VtYWNyb24nLDIwMD0+J0NjYXJvbicsMjAxPT4nRWFjdXRlJywyMDI9PidaYWN1dGUnLDIwMz0+J0Vkb3RhY2NlbnQnLDIwND0+J0djb21tYWFjY2VudCcsMjA1PT4nS2NvbW1hYWNjZW50JywyMDY9PidJbWFjcm9uJywyMDc9PidMY29tbWFhY2NlbnQnLDIwOD0+J1NjYXJvbicsMjA5PT4nTmFjdXRlJywyMTA9PidOY29tbWFhY2NlbnQnLDIxMT0+J09hY3V0ZScsMjEyPT4nT21hY3JvbicsMjEzPT4nT3RpbGRlJywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidVb2dvbmVrJywyMTc9PidMc2xhc2gnLDIxOD0+J1NhY3V0ZScsMjE5PT4nVW1hY3JvbicsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidaZG90YWNjZW50JywyMjI9PidaY2Fyb24nLDIyMz0+J2dlcm1hbmRibHMnLDIyND0+J2FvZ29uZWsnLDIyNT0+J2lvZ29uZWsnLDIyNj0+J2FtYWNyb24nLDIyNz0+J2NhY3V0ZScsMjI4PT4nYWRpZXJlc2lzJywyMjk9PidhcmluZycsMjMwPT4nZW9nb25laycsMjMxPT4nZW1hY3JvbicsMjMyPT4nY2Nhcm9uJywyMzM9PidlYWN1dGUnLDIzND0+J3phY3V0ZScsMjM1PT4nZWRvdGFjY2VudCcsMjM2PT4nZ2NvbW1hYWNjZW50JywyMzc9PidrY29tbWFhY2NlbnQnLDIzOD0+J2ltYWNyb24nLDIzOT0+J2xjb21tYWFjY2VudCcsMjQwPT4nc2Nhcm9uJywyNDE9PiduYWN1dGUnLDI0Mj0+J25jb21tYWFjY2VudCcsMjQzPT4nb2FjdXRlJywyNDQ9PidvbWFjcm9uJywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pid1b2dvbmVrJywyNDk9Pidsc2xhc2gnLDI1MD0+J3NhY3V0ZScsMjUxPT4ndW1hY3JvbicsMjUyPT4ndWRpZXJlc2lzJywyNTM9Pid6ZG90YWNjZW50JywyNTQ9Pid6Y2Fyb24nLDI1NT0+J2RvdGFjY2VudCcpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogY3AxMjU4CidjcDEyNTgnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+J0V1cm8nLDEyOT0+Jy5ub3RkZWYnLDEzMD0+J3F1b3Rlc2luZ2xiYXNlJywxMzE9PidmbG9yaW4nLDEzMj0+J3F1b3RlZGJsYmFzZScsMTMzPT4nZWxsaXBzaXMnLDEzND0+J2RhZ2dlcicsMTM1PT4nZGFnZ2VyZGJsJywxMzY9PidjaXJjdW1mbGV4JywxMzc9PidwZXJ0aG91c2FuZCcsMTM4PT4nLm5vdGRlZicsMTM5PT4nZ3VpbHNpbmdsbGVmdCcsMTQwPT4nT0UnLDE0MT0+Jy5ub3RkZWYnLDE0Mj0+Jy5ub3RkZWYnLDE0Mz0+Jy5ub3RkZWYnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+J3F1b3RlbGVmdCcsMTQ2PT4ncXVvdGVyaWdodCcsMTQ3PT4ncXVvdGVkYmxsZWZ0JywxNDg9PidxdW90ZWRibHJpZ2h0JywxNDk9PididWxsZXQnLDE1MD0+J2VuZGFzaCcsMTUxPT4nZW1kYXNoJywxNTI9Pid0aWxkZScsMTUzPT4ndHJhZGVtYXJrJywxNTQ9Picubm90ZGVmJywxNTU9PidndWlsc2luZ2xyaWdodCcsMTU2PT4nb2UnLDE1Nz0+Jy5ub3RkZWYnLDE1OD0+Jy5ub3RkZWYnLDE1OT0+J1lkaWVyZXNpcycsMTYwPT4nc3BhY2UnLDE2MT0+J2V4Y2xhbWRvd24nLDE2Mj0+J2NlbnQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9PidjdXJyZW5jeScsMTY1PT4neWVuJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J29yZGZlbWluaW5lJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J2NlZGlsbGEnLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidvcmRtYXNjdWxpbmUnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidvbmVxdWFydGVyJywxODk9PidvbmVoYWxmJywxOTA9Pid0aHJlZXF1YXJ0ZXJzJywxOTE9PidxdWVzdGlvbmRvd24nLDE5Mj0+J0FncmF2ZScsMTkzPT4nQWFjdXRlJywxOTQ9PidBY2lyY3VtZmxleCcsMTk1PT4nQWJyZXZlJywxOTY9PidBZGllcmVzaXMnLDE5Nz0+J0FyaW5nJywxOTg9PidBRScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0VncmF2ZScsMjAxPT4nRWFjdXRlJywyMDI9PidFY2lyY3VtZmxleCcsMjAzPT4nRWRpZXJlc2lzJywyMDQ9PidncmF2ZWNvbWInLDIwNT0+J0lhY3V0ZScsMjA2PT4nSWNpcmN1bWZsZXgnLDIwNz0+J0lkaWVyZXNpcycsMjA4PT4nRGNyb2F0JywyMDk9PidOdGlsZGUnLDIxMD0+J2hvb2thYm92ZWNvbWInLDIxMT0+J09hY3V0ZScsMjEyPT4nT2NpcmN1bWZsZXgnLDIxMz0+J09ob3JuJywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidPc2xhc2gnLDIxNz0+J1VncmF2ZScsMjE4PT4nVWFjdXRlJywyMTk9PidVY2lyY3VtZmxleCcsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidVaG9ybicsMjIyPT4ndGlsZGVjb21iJywyMjM9PidnZXJtYW5kYmxzJywyMjQ9PidhZ3JhdmUnLDIyNT0+J2FhY3V0ZScsMjI2PT4nYWNpcmN1bWZsZXgnLDIyNz0+J2FicmV2ZScsMjI4PT4nYWRpZXJlc2lzJywyMjk9PidhcmluZycsMjMwPT4nYWUnLDIzMT0+J2NjZWRpbGxhJywyMzI9PidlZ3JhdmUnLDIzMz0+J2VhY3V0ZScsMjM0PT4nZWNpcmN1bWZsZXgnLDIzNT0+J2VkaWVyZXNpcycsMjM2PT4nYWN1dGVjb21iJywyMzc9PidpYWN1dGUnLDIzOD0+J2ljaXJjdW1mbGV4JywyMzk9PidpZGllcmVzaXMnLDI0MD0+J2Rjcm9hdCcsMjQxPT4nbnRpbGRlJywyNDI9Pidkb3RiZWxvd2NvbWInLDI0Mz0+J29hY3V0ZScsMjQ0PT4nb2NpcmN1bWZsZXgnLDI0NT0+J29ob3JuJywyNDY9PidvZGllcmVzaXMnLDI0Nz0+J2RpdmlkZScsMjQ4PT4nb3NsYXNoJywyNDk9Pid1Z3JhdmUnLDI1MD0+J3VhY3V0ZScsMjUxPT4ndWNpcmN1bWZsZXgnLDI1Mj0+J3VkaWVyZXNpcycsMjUzPT4ndWhvcm4nLDI1ND0+J2RvbmcnLDI1NT0+J3lkaWVyZXNpcycpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogaXNvLTg4NTktMQonaXNvLTg4NTktMScgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J2V4Y2xhbWRvd24nLDE2Mj0+J2NlbnQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9PidjdXJyZW5jeScsMTY1PT4neWVuJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J29yZGZlbWluaW5lJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J2NlZGlsbGEnLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidvcmRtYXNjdWxpbmUnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidvbmVxdWFydGVyJywxODk9PidvbmVoYWxmJywxOTA9Pid0aHJlZXF1YXJ0ZXJzJywxOTE9PidxdWVzdGlvbmRvd24nLDE5Mj0+J0FncmF2ZScsMTkzPT4nQWFjdXRlJywxOTQ9PidBY2lyY3VtZmxleCcsMTk1PT4nQXRpbGRlJywxOTY9PidBZGllcmVzaXMnLDE5Nz0+J0FyaW5nJywxOTg9PidBRScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0VncmF2ZScsMjAxPT4nRWFjdXRlJywyMDI9PidFY2lyY3VtZmxleCcsMjAzPT4nRWRpZXJlc2lzJywyMDQ9PidJZ3JhdmUnLDIwNT0+J0lhY3V0ZScsMjA2PT4nSWNpcmN1bWZsZXgnLDIwNz0+J0lkaWVyZXNpcycsMjA4PT4nRXRoJywyMDk9PidOdGlsZGUnLDIxMD0+J09ncmF2ZScsMjExPT4nT2FjdXRlJywyMTI9PidPY2lyY3VtZmxleCcsMjEzPT4nT3RpbGRlJywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidPc2xhc2gnLDIxNz0+J1VncmF2ZScsMjE4PT4nVWFjdXRlJywyMTk9PidVY2lyY3VtZmxleCcsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidZYWN1dGUnLDIyMj0+J1Rob3JuJywyMjM9PidnZXJtYW5kYmxzJywyMjQ9PidhZ3JhdmUnLDIyNT0+J2FhY3V0ZScsMjI2PT4nYWNpcmN1bWZsZXgnLDIyNz0+J2F0aWxkZScsMjI4PT4nYWRpZXJlc2lzJywyMjk9PidhcmluZycsMjMwPT4nYWUnLDIzMT0+J2NjZWRpbGxhJywyMzI9PidlZ3JhdmUnLDIzMz0+J2VhY3V0ZScsMjM0PT4nZWNpcmN1bWZsZXgnLDIzNT0+J2VkaWVyZXNpcycsMjM2PT4naWdyYXZlJywyMzc9PidpYWN1dGUnLDIzOD0+J2ljaXJjdW1mbGV4JywyMzk9PidpZGllcmVzaXMnLDI0MD0+J2V0aCcsMjQxPT4nbnRpbGRlJywyNDI9PidvZ3JhdmUnLDI0Mz0+J29hY3V0ZScsMjQ0PT4nb2NpcmN1bWZsZXgnLDI0NT0+J290aWxkZScsMjQ2PT4nb2RpZXJlc2lzJywyNDc9PidkaXZpZGUnLDI0OD0+J29zbGFzaCcsMjQ5PT4ndWdyYXZlJywyNTA9Pid1YWN1dGUnLDI1MT0+J3VjaXJjdW1mbGV4JywyNTI9Pid1ZGllcmVzaXMnLDI1Mz0+J3lhY3V0ZScsMjU0PT4ndGhvcm4nLDI1NT0+J3lkaWVyZXNpcycpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogaXNvLTg4NTktMgonaXNvLTg4NTktMicgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J0FvZ29uZWsnLDE2Mj0+J2JyZXZlJywxNjM9PidMc2xhc2gnLDE2ND0+J2N1cnJlbmN5JywxNjU9PidMY2Fyb24nLDE2Nj0+J1NhY3V0ZScsMTY3PT4nc2VjdGlvbicsMTY4PT4nZGllcmVzaXMnLDE2OT0+J1NjYXJvbicsMTcwPT4nU2NlZGlsbGEnLDE3MT0+J1RjYXJvbicsMTcyPT4nWmFjdXRlJywxNzM9PidoeXBoZW4nLDE3ND0+J1pjYXJvbicsMTc1PT4nWmRvdGFjY2VudCcsMTc2PT4nZGVncmVlJywxNzc9Pidhb2dvbmVrJywxNzg9PidvZ29uZWsnLDE3OT0+J2xzbGFzaCcsMTgwPT4nYWN1dGUnLDE4MT0+J2xjYXJvbicsMTgyPT4nc2FjdXRlJywxODM9PidjYXJvbicsMTg0PT4nY2VkaWxsYScsMTg1PT4nc2Nhcm9uJywxODY9PidzY2VkaWxsYScsMTg3PT4ndGNhcm9uJywxODg9Pid6YWN1dGUnLDE4OT0+J2h1bmdhcnVtbGF1dCcsMTkwPT4nemNhcm9uJywxOTE9Pid6ZG90YWNjZW50JywxOTI9PidSYWN1dGUnLDE5Mz0+J0FhY3V0ZScsMTk0PT4nQWNpcmN1bWZsZXgnLDE5NT0+J0FicmV2ZScsMTk2PT4nQWRpZXJlc2lzJywxOTc9PidMYWN1dGUnLDE5OD0+J0NhY3V0ZScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0NjYXJvbicsMjAxPT4nRWFjdXRlJywyMDI9PidFb2dvbmVrJywyMDM9PidFZGllcmVzaXMnLDIwND0+J0VjYXJvbicsMjA1PT4nSWFjdXRlJywyMDY9PidJY2lyY3VtZmxleCcsMjA3PT4nRGNhcm9uJywyMDg9PidEY3JvYXQnLDIwOT0+J05hY3V0ZScsMjEwPT4nTmNhcm9uJywyMTE9PidPYWN1dGUnLDIxMj0+J09jaXJjdW1mbGV4JywyMTM9PidPaHVuZ2FydW1sYXV0JywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidSY2Fyb24nLDIxNz0+J1VyaW5nJywyMTg9PidVYWN1dGUnLDIxOT0+J1VodW5nYXJ1bWxhdXQnLDIyMD0+J1VkaWVyZXNpcycsMjIxPT4nWWFjdXRlJywyMjI9PidUY29tbWFhY2NlbnQnLDIyMz0+J2dlcm1hbmRibHMnLDIyND0+J3JhY3V0ZScsMjI1PT4nYWFjdXRlJywyMjY9PidhY2lyY3VtZmxleCcsMjI3PT4nYWJyZXZlJywyMjg9PidhZGllcmVzaXMnLDIyOT0+J2xhY3V0ZScsMjMwPT4nY2FjdXRlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nY2Nhcm9uJywyMzM9PidlYWN1dGUnLDIzND0+J2VvZ29uZWsnLDIzNT0+J2VkaWVyZXNpcycsMjM2PT4nZWNhcm9uJywyMzc9PidpYWN1dGUnLDIzOD0+J2ljaXJjdW1mbGV4JywyMzk9PidkY2Fyb24nLDI0MD0+J2Rjcm9hdCcsMjQxPT4nbmFjdXRlJywyNDI9PiduY2Fyb24nLDI0Mz0+J29hY3V0ZScsMjQ0PT4nb2NpcmN1bWZsZXgnLDI0NT0+J29odW5nYXJ1bWxhdXQnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9PidyY2Fyb24nLDI0OT0+J3VyaW5nJywyNTA9Pid1YWN1dGUnLDI1MT0+J3VodW5nYXJ1bWxhdXQnLDI1Mj0+J3VkaWVyZXNpcycsMjUzPT4neWFjdXRlJywyNTQ9Pid0Y29tbWFhY2NlbnQnLDI1NT0+J2RvdGFjY2VudCcpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogaXNvLTg4NTktNAonaXNvLTg4NTktNCcgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J0FvZ29uZWsnLDE2Mj0+J2tncmVlbmxhbmRpYycsMTYzPT4nUmNvbW1hYWNjZW50JywxNjQ9PidjdXJyZW5jeScsMTY1PT4nSXRpbGRlJywxNjY9PidMY29tbWFhY2NlbnQnLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9PidTY2Fyb24nLDE3MD0+J0VtYWNyb24nLDE3MT0+J0djb21tYWFjY2VudCcsMTcyPT4nVGJhcicsMTczPT4naHlwaGVuJywxNzQ9PidaY2Fyb24nLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9Pidhb2dvbmVrJywxNzg9PidvZ29uZWsnLDE3OT0+J3Jjb21tYWFjY2VudCcsMTgwPT4nYWN1dGUnLDE4MT0+J2l0aWxkZScsMTgyPT4nbGNvbW1hYWNjZW50JywxODM9PidjYXJvbicsMTg0PT4nY2VkaWxsYScsMTg1PT4nc2Nhcm9uJywxODY9PidlbWFjcm9uJywxODc9PidnY29tbWFhY2NlbnQnLDE4OD0+J3RiYXInLDE4OT0+J0VuZycsMTkwPT4nemNhcm9uJywxOTE9PidlbmcnLDE5Mj0+J0FtYWNyb24nLDE5Mz0+J0FhY3V0ZScsMTk0PT4nQWNpcmN1bWZsZXgnLDE5NT0+J0F0aWxkZScsMTk2PT4nQWRpZXJlc2lzJywxOTc9PidBcmluZycsMTk4PT4nQUUnLDE5OT0+J0lvZ29uZWsnLDIwMD0+J0NjYXJvbicsMjAxPT4nRWFjdXRlJywyMDI9PidFb2dvbmVrJywyMDM9PidFZGllcmVzaXMnLDIwND0+J0Vkb3RhY2NlbnQnLDIwNT0+J0lhY3V0ZScsMjA2PT4nSWNpcmN1bWZsZXgnLDIwNz0+J0ltYWNyb24nLDIwOD0+J0Rjcm9hdCcsMjA5PT4nTmNvbW1hYWNjZW50JywyMTA9PidPbWFjcm9uJywyMTE9PidLY29tbWFhY2NlbnQnLDIxMj0+J09jaXJjdW1mbGV4JywyMTM9PidPdGlsZGUnLDIxND0+J09kaWVyZXNpcycsMjE1PT4nbXVsdGlwbHknLDIxNj0+J09zbGFzaCcsMjE3PT4nVW9nb25laycsMjE4PT4nVWFjdXRlJywyMTk9PidVY2lyY3VtZmxleCcsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidVdGlsZGUnLDIyMj0+J1VtYWNyb24nLDIyMz0+J2dlcm1hbmRibHMnLDIyND0+J2FtYWNyb24nLDIyNT0+J2FhY3V0ZScsMjI2PT4nYWNpcmN1bWZsZXgnLDIyNz0+J2F0aWxkZScsMjI4PT4nYWRpZXJlc2lzJywyMjk9PidhcmluZycsMjMwPT4nYWUnLDIzMT0+J2lvZ29uZWsnLDIzMj0+J2NjYXJvbicsMjMzPT4nZWFjdXRlJywyMzQ9Pidlb2dvbmVrJywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2Vkb3RhY2NlbnQnLDIzNz0+J2lhY3V0ZScsMjM4PT4naWNpcmN1bWZsZXgnLDIzOT0+J2ltYWNyb24nLDI0MD0+J2Rjcm9hdCcsMjQxPT4nbmNvbW1hYWNjZW50JywyNDI9PidvbWFjcm9uJywyNDM9PidrY29tbWFhY2NlbnQnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pidvc2xhc2gnLDI0OT0+J3VvZ29uZWsnLDI1MD0+J3VhY3V0ZScsMjUxPT4ndWNpcmN1bWZsZXgnLDI1Mj0+J3VkaWVyZXNpcycsMjUzPT4ndXRpbGRlJywyNTQ9Pid1bWFjcm9uJywyNTU9Pidkb3RhY2NlbnQnKSwKCi8vIGVuY29kaW5nIG1hcCBmb3I6IGlzby04ODU5LTUKJ2lzby04ODU5LTUnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+Jy5ub3RkZWYnLDEyOT0+Jy5ub3RkZWYnLDEzMD0+Jy5ub3RkZWYnLDEzMT0+Jy5ub3RkZWYnLDEzMj0+Jy5ub3RkZWYnLDEzMz0+Jy5ub3RkZWYnLDEzND0+Jy5ub3RkZWYnLDEzNT0+Jy5ub3RkZWYnLDEzNj0+Jy5ub3RkZWYnLDEzNz0+Jy5ub3RkZWYnLDEzOD0+Jy5ub3RkZWYnLDEzOT0+Jy5ub3RkZWYnLDE0MD0+Jy5ub3RkZWYnLDE0MT0+Jy5ub3RkZWYnLDE0Mj0+Jy5ub3RkZWYnLDE0Mz0+Jy5ub3RkZWYnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+Jy5ub3RkZWYnLDE0Nj0+Jy5ub3RkZWYnLDE0Nz0+Jy5ub3RkZWYnLDE0OD0+Jy5ub3RkZWYnLDE0OT0+Jy5ub3RkZWYnLDE1MD0+Jy5ub3RkZWYnLDE1MT0+Jy5ub3RkZWYnLDE1Mj0+Jy5ub3RkZWYnLDE1Mz0+Jy5ub3RkZWYnLDE1ND0+Jy5ub3RkZWYnLDE1NT0+Jy5ub3RkZWYnLDE1Nj0+Jy5ub3RkZWYnLDE1Nz0+Jy5ub3RkZWYnLDE1OD0+Jy5ub3RkZWYnLDE1OT0+Jy5ub3RkZWYnLDE2MD0+J3NwYWNlJywxNjE9PidhZmlpMTAwMjMnLDE2Mj0+J2FmaWkxMDA1MScsMTYzPT4nYWZpaTEwMDUyJywxNjQ9PidhZmlpMTAwNTMnLDE2NT0+J2FmaWkxMDA1NCcsMTY2PT4nYWZpaTEwMDU1JywxNjc9PidhZmlpMTAwNTYnLDE2OD0+J2FmaWkxMDA1NycsMTY5PT4nYWZpaTEwMDU4JywxNzA9PidhZmlpMTAwNTknLDE3MT0+J2FmaWkxMDA2MCcsMTcyPT4nYWZpaTEwMDYxJywxNzM9PidoeXBoZW4nLDE3ND0+J2FmaWkxMDA2MicsMTc1PT4nYWZpaTEwMTQ1JywxNzY9PidhZmlpMTAwMTcnLDE3Nz0+J2FmaWkxMDAxOCcsMTc4PT4nYWZpaTEwMDE5JywxNzk9PidhZmlpMTAwMjAnLDE4MD0+J2FmaWkxMDAyMScsMTgxPT4nYWZpaTEwMDIyJywxODI9PidhZmlpMTAwMjQnLDE4Mz0+J2FmaWkxMDAyNScsMTg0PT4nYWZpaTEwMDI2JywxODU9PidhZmlpMTAwMjcnLDE4Nj0+J2FmaWkxMDAyOCcsMTg3PT4nYWZpaTEwMDI5JywxODg9PidhZmlpMTAwMzAnLDE4OT0+J2FmaWkxMDAzMScsMTkwPT4nYWZpaTEwMDMyJywxOTE9PidhZmlpMTAwMzMnLDE5Mj0+J2FmaWkxMDAzNCcsMTkzPT4nYWZpaTEwMDM1JywxOTQ9PidhZmlpMTAwMzYnLDE5NT0+J2FmaWkxMDAzNycsMTk2PT4nYWZpaTEwMDM4JywxOTc9PidhZmlpMTAwMzknLDE5OD0+J2FmaWkxMDA0MCcsMTk5PT4nYWZpaTEwMDQxJywyMDA9PidhZmlpMTAwNDInLDIwMT0+J2FmaWkxMDA0MycsMjAyPT4nYWZpaTEwMDQ0JywyMDM9PidhZmlpMTAwNDUnLDIwND0+J2FmaWkxMDA0NicsMjA1PT4nYWZpaTEwMDQ3JywyMDY9PidhZmlpMTAwNDgnLDIwNz0+J2FmaWkxMDA0OScsMjA4PT4nYWZpaTEwMDY1JywyMDk9PidhZmlpMTAwNjYnLDIxMD0+J2FmaWkxMDA2NycsMjExPT4nYWZpaTEwMDY4JywyMTI9PidhZmlpMTAwNjknLDIxMz0+J2FmaWkxMDA3MCcsMjE0PT4nYWZpaTEwMDcyJywyMTU9PidhZmlpMTAwNzMnLDIxNj0+J2FmaWkxMDA3NCcsMjE3PT4nYWZpaTEwMDc1JywyMTg9PidhZmlpMTAwNzYnLDIxOT0+J2FmaWkxMDA3NycsMjIwPT4nYWZpaTEwMDc4JywyMjE9PidhZmlpMTAwNzknLDIyMj0+J2FmaWkxMDA4MCcsMjIzPT4nYWZpaTEwMDgxJywyMjQ9PidhZmlpMTAwODInLDIyNT0+J2FmaWkxMDA4MycsMjI2PT4nYWZpaTEwMDg0JywyMjc9PidhZmlpMTAwODUnLDIyOD0+J2FmaWkxMDA4NicsMjI5PT4nYWZpaTEwMDg3JywyMzA9PidhZmlpMTAwODgnLDIzMT0+J2FmaWkxMDA4OScsMjMyPT4nYWZpaTEwMDkwJywyMzM9PidhZmlpMTAwOTEnLDIzND0+J2FmaWkxMDA5MicsMjM1PT4nYWZpaTEwMDkzJywyMzY9PidhZmlpMTAwOTQnLDIzNz0+J2FmaWkxMDA5NScsMjM4PT4nYWZpaTEwMDk2JywyMzk9PidhZmlpMTAwOTcnLDI0MD0+J2FmaWk2MTM1MicsMjQxPT4nYWZpaTEwMDcxJywyNDI9PidhZmlpMTAwOTknLDI0Mz0+J2FmaWkxMDEwMCcsMjQ0PT4nYWZpaTEwMTAxJywyNDU9PidhZmlpMTAxMDInLDI0Nj0+J2FmaWkxMDEwMycsMjQ3PT4nYWZpaTEwMTA0JywyNDg9PidhZmlpMTAxMDUnLDI0OT0+J2FmaWkxMDEwNicsMjUwPT4nYWZpaTEwMTA3JywyNTE9PidhZmlpMTAxMDgnLDI1Mj0+J2FmaWkxMDEwOScsMjUzPT4nc2VjdGlvbicsMjU0PT4nYWZpaTEwMTEwJywyNTU9PidhZmlpMTAxOTMnKSwKCi8vIGVuY29kaW5nIG1hcCBmb3I6IGlzby04ODU5LTcKJ2lzby04ODU5LTcnID0+IGFycmF5KDA9Picubm90ZGVmJywxPT4nLm5vdGRlZicsMj0+Jy5ub3RkZWYnLDM9Picubm90ZGVmJyw0PT4nLm5vdGRlZicsNT0+Jy5ub3RkZWYnLDY9Picubm90ZGVmJyw3PT4nLm5vdGRlZicsOD0+Jy5ub3RkZWYnLDk9Picubm90ZGVmJywxMD0+Jy5ub3RkZWYnLDExPT4nLm5vdGRlZicsMTI9Picubm90ZGVmJywxMz0+Jy5ub3RkZWYnLDE0PT4nLm5vdGRlZicsMTU9Picubm90ZGVmJywxNj0+Jy5ub3RkZWYnLDE3PT4nLm5vdGRlZicsMTg9Picubm90ZGVmJywxOT0+Jy5ub3RkZWYnLDIwPT4nLm5vdGRlZicsMjE9Picubm90ZGVmJywyMj0+Jy5ub3RkZWYnLDIzPT4nLm5vdGRlZicsMjQ9Picubm90ZGVmJywyNT0+Jy5ub3RkZWYnLDI2PT4nLm5vdGRlZicsMjc9Picubm90ZGVmJywyOD0+Jy5ub3RkZWYnLDI5PT4nLm5vdGRlZicsMzA9Picubm90ZGVmJywzMT0+Jy5ub3RkZWYnLDMyPT4nc3BhY2UnLDMzPT4nZXhjbGFtJywzND0+J3F1b3RlZGJsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZG9sbGFyJywzNz0+J3BlcmNlbnQnLDM4PT4nYW1wZXJzYW5kJywzOT0+J3F1b3Rlc2luZ2xlJyw0MD0+J3BhcmVubGVmdCcsNDE9PidwYXJlbnJpZ2h0Jyw0Mj0+J2FzdGVyaXNrJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4naHlwaGVuJyw0Nj0+J3BlcmlvZCcsNDc9PidzbGFzaCcsNDg9Pid6ZXJvJyw0OT0+J29uZScsNTA9Pid0d28nLDUxPT4ndGhyZWUnLDUyPT4nZm91cicsNTM9PidmaXZlJyw1ND0+J3NpeCcsNTU9PidzZXZlbicsNTY9PidlaWdodCcsNTc9PiduaW5lJyw1OD0+J2NvbG9uJyw1OT0+J3NlbWljb2xvbicsNjA9PidsZXNzJyw2MT0+J2VxdWFsJyw2Mj0+J2dyZWF0ZXInLDYzPT4ncXVlc3Rpb24nLDY0PT4nYXQnLDY1PT4nQScsNjY9PidCJyw2Nz0+J0MnLDY4PT4nRCcsNjk9PidFJyw3MD0+J0YnLDcxPT4nRycsNzI9PidIJyw3Mz0+J0knLDc0PT4nSicsNzU9PidLJyw3Nj0+J0wnLDc3PT4nTScsNzg9PidOJyw3OT0+J08nLDgwPT4nUCcsODE9PidRJyw4Mj0+J1InLDgzPT4nUycsODQ9PidUJyw4NT0+J1UnLDg2PT4nVicsODc9PidXJyw4OD0+J1gnLDg5PT4nWScsOTA9PidaJyw5MT0+J2JyYWNrZXRsZWZ0Jyw5Mj0+J2JhY2tzbGFzaCcsOTM9PidicmFja2V0cmlnaHQnLDk0PT4nYXNjaWljaXJjdW0nLDk1PT4ndW5kZXJzY29yZScsOTY9PidncmF2ZScsOTc9PidhJyw5OD0+J2InLDk5PT4nYycsMTAwPT4nZCcsMTAxPT4nZScsMTAyPT4nZicsMTAzPT4nZycsMTA0PT4naCcsMTA1PT4naScsMTA2PT4naicsMTA3PT4naycsMTA4PT4nbCcsMTA5PT4nbScsMTEwPT4nbicsMTExPT4nbycsMTEyPT4ncCcsMTEzPT4ncScsMTE0PT4ncicsMTE1PT4ncycsMTE2PT4ndCcsMTE3PT4ndScsMTE4PT4ndicsMTE5PT4ndycsMTIwPT4neCcsMTIxPT4neScsMTIyPT4neicsMTIzPT4nYnJhY2VsZWZ0JywxMjQ9PidiYXInLDEyNT0+J2JyYWNlcmlnaHQnLDEyNj0+J2FzY2lpdGlsZGUnLDEyNz0+Jy5ub3RkZWYnLDEyOD0+Jy5ub3RkZWYnLDEyOT0+Jy5ub3RkZWYnLDEzMD0+Jy5ub3RkZWYnLDEzMT0+Jy5ub3RkZWYnLDEzMj0+Jy5ub3RkZWYnLDEzMz0+Jy5ub3RkZWYnLDEzND0+Jy5ub3RkZWYnLDEzNT0+Jy5ub3RkZWYnLDEzNj0+Jy5ub3RkZWYnLDEzNz0+Jy5ub3RkZWYnLDEzOD0+Jy5ub3RkZWYnLDEzOT0+Jy5ub3RkZWYnLDE0MD0+Jy5ub3RkZWYnLDE0MT0+Jy5ub3RkZWYnLDE0Mj0+Jy5ub3RkZWYnLDE0Mz0+Jy5ub3RkZWYnLDE0ND0+Jy5ub3RkZWYnLDE0NT0+Jy5ub3RkZWYnLDE0Nj0+Jy5ub3RkZWYnLDE0Nz0+Jy5ub3RkZWYnLDE0OD0+Jy5ub3RkZWYnLDE0OT0+Jy5ub3RkZWYnLDE1MD0+Jy5ub3RkZWYnLDE1MT0+Jy5ub3RkZWYnLDE1Mj0+Jy5ub3RkZWYnLDE1Mz0+Jy5ub3RkZWYnLDE1ND0+Jy5ub3RkZWYnLDE1NT0+Jy5ub3RkZWYnLDE1Nj0+Jy5ub3RkZWYnLDE1Nz0+Jy5ub3RkZWYnLDE1OD0+Jy5ub3RkZWYnLDE1OT0+Jy5ub3RkZWYnLDE2MD0+J3NwYWNlJywxNjE9PidxdW90ZWxlZnQnLDE2Mj0+J3F1b3RlcmlnaHQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9Picubm90ZGVmJywxNjU9Picubm90ZGVmJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+Jy5ub3RkZWYnLDE3MT0+J2d1aWxsZW1vdGxlZnQnLDE3Mj0+J2xvZ2ljYWxub3QnLDE3Mz0+J2h5cGhlbicsMTc0PT4nLm5vdGRlZicsMTc1PT4nYWZpaTAwMjA4JywxNzY9PidkZWdyZWUnLDE3Nz0+J3BsdXNtaW51cycsMTc4PT4ndHdvc3VwZXJpb3InLDE3OT0+J3RocmVlc3VwZXJpb3InLDE4MD0+J3Rvbm9zJywxODE9PidkaWVyZXNpc3Rvbm9zJywxODI9PidBbHBoYXRvbm9zJywxODM9PidwZXJpb2RjZW50ZXJlZCcsMTg0PT4nRXBzaWxvbnRvbm9zJywxODU9PidFdGF0b25vcycsMTg2PT4nSW90YXRvbm9zJywxODc9PidndWlsbGVtb3RyaWdodCcsMTg4PT4nT21pY3JvbnRvbm9zJywxODk9PidvbmVoYWxmJywxOTA9PidVcHNpbG9udG9ub3MnLDE5MT0+J09tZWdhdG9ub3MnLDE5Mj0+J2lvdGFkaWVyZXNpc3Rvbm9zJywxOTM9PidBbHBoYScsMTk0PT4nQmV0YScsMTk1PT4nR2FtbWEnLDE5Nj0+J0RlbHRhJywxOTc9PidFcHNpbG9uJywxOTg9PidaZXRhJywxOTk9PidFdGEnLDIwMD0+J1RoZXRhJywyMDE9PidJb3RhJywyMDI9PidLYXBwYScsMjAzPT4nTGFtYmRhJywyMDQ9PidNdScsMjA1PT4nTnUnLDIwNj0+J1hpJywyMDc9PidPbWljcm9uJywyMDg9PidQaScsMjA5PT4nUmhvJywyMTA9Picubm90ZGVmJywyMTE9PidTaWdtYScsMjEyPT4nVGF1JywyMTM9PidVcHNpbG9uJywyMTQ9PidQaGknLDIxNT0+J0NoaScsMjE2PT4nUHNpJywyMTc9PidPbWVnYScsMjE4PT4nSW90YWRpZXJlc2lzJywyMTk9PidVcHNpbG9uZGllcmVzaXMnLDIyMD0+J2FscGhhdG9ub3MnLDIyMT0+J2Vwc2lsb250b25vcycsMjIyPT4nZXRhdG9ub3MnLDIyMz0+J2lvdGF0b25vcycsMjI0PT4ndXBzaWxvbmRpZXJlc2lzdG9ub3MnLDIyNT0+J2FscGhhJywyMjY9PidiZXRhJywyMjc9PidnYW1tYScsMjI4PT4nZGVsdGEnLDIyOT0+J2Vwc2lsb24nLDIzMD0+J3pldGEnLDIzMT0+J2V0YScsMjMyPT4ndGhldGEnLDIzMz0+J2lvdGEnLDIzND0+J2thcHBhJywyMzU9PidsYW1iZGEnLDIzNj0+J211JywyMzc9PidudScsMjM4PT4neGknLDIzOT0+J29taWNyb24nLDI0MD0+J3BpJywyNDE9PidyaG8nLDI0Mj0+J3NpZ21hMScsMjQzPT4nc2lnbWEnLDI0ND0+J3RhdScsMjQ1PT4ndXBzaWxvbicsMjQ2PT4ncGhpJywyNDc9PidjaGknLDI0OD0+J3BzaScsMjQ5PT4nb21lZ2EnLDI1MD0+J2lvdGFkaWVyZXNpcycsMjUxPT4ndXBzaWxvbmRpZXJlc2lzJywyNTI9PidvbWljcm9udG9ub3MnLDI1Mz0+J3Vwc2lsb250b25vcycsMjU0PT4nb21lZ2F0b25vcycsMjU1PT4nLm5vdGRlZicpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogaXNvLTg4NTktOQonaXNvLTg4NTktOScgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J2V4Y2xhbWRvd24nLDE2Mj0+J2NlbnQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9PidjdXJyZW5jeScsMTY1PT4neWVuJywxNjY9Pidicm9rZW5iYXInLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J2RpZXJlc2lzJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J29yZGZlbWluaW5lJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidhY3V0ZScsMTgxPT4nbXUnLDE4Mj0+J3BhcmFncmFwaCcsMTgzPT4ncGVyaW9kY2VudGVyZWQnLDE4ND0+J2NlZGlsbGEnLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidvcmRtYXNjdWxpbmUnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidvbmVxdWFydGVyJywxODk9PidvbmVoYWxmJywxOTA9Pid0aHJlZXF1YXJ0ZXJzJywxOTE9PidxdWVzdGlvbmRvd24nLDE5Mj0+J0FncmF2ZScsMTkzPT4nQWFjdXRlJywxOTQ9PidBY2lyY3VtZmxleCcsMTk1PT4nQXRpbGRlJywxOTY9PidBZGllcmVzaXMnLDE5Nz0+J0FyaW5nJywxOTg9PidBRScsMTk5PT4nQ2NlZGlsbGEnLDIwMD0+J0VncmF2ZScsMjAxPT4nRWFjdXRlJywyMDI9PidFY2lyY3VtZmxleCcsMjAzPT4nRWRpZXJlc2lzJywyMDQ9PidJZ3JhdmUnLDIwNT0+J0lhY3V0ZScsMjA2PT4nSWNpcmN1bWZsZXgnLDIwNz0+J0lkaWVyZXNpcycsMjA4PT4nR2JyZXZlJywyMDk9PidOdGlsZGUnLDIxMD0+J09ncmF2ZScsMjExPT4nT2FjdXRlJywyMTI9PidPY2lyY3VtZmxleCcsMjEzPT4nT3RpbGRlJywyMTQ9PidPZGllcmVzaXMnLDIxNT0+J211bHRpcGx5JywyMTY9PidPc2xhc2gnLDIxNz0+J1VncmF2ZScsMjE4PT4nVWFjdXRlJywyMTk9PidVY2lyY3VtZmxleCcsMjIwPT4nVWRpZXJlc2lzJywyMjE9PidJZG90YWNjZW50JywyMjI9PidTY2VkaWxsYScsMjIzPT4nZ2VybWFuZGJscycsMjI0PT4nYWdyYXZlJywyMjU9PidhYWN1dGUnLDIyNj0+J2FjaXJjdW1mbGV4JywyMjc9PidhdGlsZGUnLDIyOD0+J2FkaWVyZXNpcycsMjI5PT4nYXJpbmcnLDIzMD0+J2FlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nZWdyYXZlJywyMzM9PidlYWN1dGUnLDIzND0+J2VjaXJjdW1mbGV4JywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2lncmF2ZScsMjM3PT4naWFjdXRlJywyMzg9PidpY2lyY3VtZmxleCcsMjM5PT4naWRpZXJlc2lzJywyNDA9PidnYnJldmUnLDI0MT0+J250aWxkZScsMjQyPT4nb2dyYXZlJywyNDM9PidvYWN1dGUnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pidvc2xhc2gnLDI0OT0+J3VncmF2ZScsMjUwPT4ndWFjdXRlJywyNTE9Pid1Y2lyY3VtZmxleCcsMjUyPT4ndWRpZXJlc2lzJywyNTM9Pidkb3RsZXNzaScsMjU0PT4nc2NlZGlsbGEnLDI1NT0+J3lkaWVyZXNpcycpLAoKLy8gZW5jb2RpbmcgbWFwIGZvcjogaXNvLTg4NTktMTEKJ2lzby04ODU5LTExJyA9PiBhcnJheSgwPT4nLm5vdGRlZicsMT0+Jy5ub3RkZWYnLDI9Picubm90ZGVmJywzPT4nLm5vdGRlZicsND0+Jy5ub3RkZWYnLDU9Picubm90ZGVmJyw2PT4nLm5vdGRlZicsNz0+Jy5ub3RkZWYnLDg9Picubm90ZGVmJyw5PT4nLm5vdGRlZicsMTA9Picubm90ZGVmJywxMT0+Jy5ub3RkZWYnLDEyPT4nLm5vdGRlZicsMTM9Picubm90ZGVmJywxND0+Jy5ub3RkZWYnLDE1PT4nLm5vdGRlZicsMTY9Picubm90ZGVmJywxNz0+Jy5ub3RkZWYnLDE4PT4nLm5vdGRlZicsMTk9Picubm90ZGVmJywyMD0+Jy5ub3RkZWYnLDIxPT4nLm5vdGRlZicsMjI9Picubm90ZGVmJywyMz0+Jy5ub3RkZWYnLDI0PT4nLm5vdGRlZicsMjU9Picubm90ZGVmJywyNj0+Jy5ub3RkZWYnLDI3PT4nLm5vdGRlZicsMjg9Picubm90ZGVmJywyOT0+Jy5ub3RkZWYnLDMwPT4nLm5vdGRlZicsMzE9Picubm90ZGVmJywzMj0+J3NwYWNlJywzMz0+J2V4Y2xhbScsMzQ9PidxdW90ZWRibCcsMzU9PidudW1iZXJzaWduJywzNj0+J2RvbGxhcicsMzc9PidwZXJjZW50JywzOD0+J2FtcGVyc2FuZCcsMzk9PidxdW90ZXNpbmdsZScsNDA9PidwYXJlbmxlZnQnLDQxPT4ncGFyZW5yaWdodCcsNDI9Pidhc3RlcmlzaycsNDM9PidwbHVzJyw0ND0+J2NvbW1hJyw0NT0+J2h5cGhlbicsNDY9PidwZXJpb2QnLDQ3PT4nc2xhc2gnLDQ4PT4nemVybycsNDk9PidvbmUnLDUwPT4ndHdvJyw1MT0+J3RocmVlJyw1Mj0+J2ZvdXInLDUzPT4nZml2ZScsNTQ9PidzaXgnLDU1PT4nc2V2ZW4nLDU2PT4nZWlnaHQnLDU3PT4nbmluZScsNTg9Pidjb2xvbicsNTk9PidzZW1pY29sb24nLDYwPT4nbGVzcycsNjE9PidlcXVhbCcsNjI9PidncmVhdGVyJyw2Mz0+J3F1ZXN0aW9uJyw2ND0+J2F0Jyw2NT0+J0EnLDY2PT4nQicsNjc9PidDJyw2OD0+J0QnLDY5PT4nRScsNzA9PidGJyw3MT0+J0cnLDcyPT4nSCcsNzM9PidJJyw3ND0+J0onLDc1PT4nSycsNzY9PidMJyw3Nz0+J00nLDc4PT4nTicsNzk9PidPJyw4MD0+J1AnLDgxPT4nUScsODI9PidSJyw4Mz0+J1MnLDg0PT4nVCcsODU9PidVJyw4Nj0+J1YnLDg3PT4nVycsODg9PidYJyw4OT0+J1knLDkwPT4nWicsOTE9PidicmFja2V0bGVmdCcsOTI9PidiYWNrc2xhc2gnLDkzPT4nYnJhY2tldHJpZ2h0Jyw5ND0+J2FzY2lpY2lyY3VtJyw5NT0+J3VuZGVyc2NvcmUnLDk2PT4nZ3JhdmUnLDk3PT4nYScsOTg9PidiJyw5OT0+J2MnLDEwMD0+J2QnLDEwMT0+J2UnLDEwMj0+J2YnLDEwMz0+J2cnLDEwND0+J2gnLDEwNT0+J2knLDEwNj0+J2onLDEwNz0+J2snLDEwOD0+J2wnLDEwOT0+J20nLDExMD0+J24nLDExMT0+J28nLDExMj0+J3AnLDExMz0+J3EnLDExND0+J3InLDExNT0+J3MnLDExNj0+J3QnLDExNz0+J3UnLDExOD0+J3YnLDExOT0+J3cnLDEyMD0+J3gnLDEyMT0+J3knLDEyMj0+J3onLDEyMz0+J2JyYWNlbGVmdCcsMTI0PT4nYmFyJywxMjU9PidicmFjZXJpZ2h0JywxMjY9Pidhc2NpaXRpbGRlJywxMjc9Picubm90ZGVmJywxMjg9Picubm90ZGVmJywxMjk9Picubm90ZGVmJywxMzA9Picubm90ZGVmJywxMzE9Picubm90ZGVmJywxMzI9Picubm90ZGVmJywxMzM9Picubm90ZGVmJywxMzQ9Picubm90ZGVmJywxMzU9Picubm90ZGVmJywxMzY9Picubm90ZGVmJywxMzc9Picubm90ZGVmJywxMzg9Picubm90ZGVmJywxMzk9Picubm90ZGVmJywxNDA9Picubm90ZGVmJywxNDE9Picubm90ZGVmJywxNDI9Picubm90ZGVmJywxNDM9Picubm90ZGVmJywxNDQ9Picubm90ZGVmJywxNDU9Picubm90ZGVmJywxNDY9Picubm90ZGVmJywxNDc9Picubm90ZGVmJywxNDg9Picubm90ZGVmJywxNDk9Picubm90ZGVmJywxNTA9Picubm90ZGVmJywxNTE9Picubm90ZGVmJywxNTI9Picubm90ZGVmJywxNTM9Picubm90ZGVmJywxNTQ9Picubm90ZGVmJywxNTU9Picubm90ZGVmJywxNTY9Picubm90ZGVmJywxNTc9Picubm90ZGVmJywxNTg9Picubm90ZGVmJywxNTk9Picubm90ZGVmJywxNjA9PidzcGFjZScsMTYxPT4na29rYWl0aGFpJywxNjI9PidraG9raGFpdGhhaScsMTYzPT4na2hva2h1YXR0aGFpJywxNjQ9PidraG9raHdhaXRoYWknLDE2NT0+J2tob2tob250aGFpJywxNjY9PidraG9yYWtoYW5ndGhhaScsMTY3PT4nbmdvbmd1dGhhaScsMTY4PT4nY2hvY2hhbnRoYWknLDE2OT0+J2Nob2NoaW5ndGhhaScsMTcwPT4nY2hvY2hhbmd0aGFpJywxNzE9Pidzb3NvdGhhaScsMTcyPT4nY2hvY2hvZXRoYWknLDE3Mz0+J3lveWluZ3RoYWknLDE3ND0+J2RvY2hhZGF0aGFpJywxNzU9Pid0b3BhdGFrdGhhaScsMTc2PT4ndGhvdGhhbnRoYWknLDE3Nz0+J3Rob25hbmdtb250aG90aGFpJywxNzg9Pid0aG9waHV0aGFvdGhhaScsMTc5PT4nbm9uZW50aGFpJywxODA9Pidkb2Rla3RoYWknLDE4MT0+J3RvdGFvdGhhaScsMTgyPT4ndGhvdGh1bmd0aGFpJywxODM9Pid0aG90aGFoYW50aGFpJywxODQ9Pid0aG90aG9uZ3RoYWknLDE4NT0+J25vbnV0aGFpJywxODY9Pidib2JhaW1haXRoYWknLDE4Nz0+J3BvcGxhdGhhaScsMTg4PT4ncGhvcGh1bmd0aGFpJywxODk9Pidmb2ZhdGhhaScsMTkwPT4ncGhvcGhhbnRoYWknLDE5MT0+J2ZvZmFudGhhaScsMTkyPT4ncGhvc2FtcGhhb3RoYWknLDE5Mz0+J21vbWF0aGFpJywxOTQ9Pid5b3lha3RoYWknLDE5NT0+J3JvcnVhdGhhaScsMTk2PT4ncnV0aGFpJywxOTc9Pidsb2xpbmd0aGFpJywxOTg9PidsdXRoYWknLDE5OT0+J3dvd2FlbnRoYWknLDIwMD0+J3Nvc2FsYXRoYWknLDIwMT0+J3NvcnVzaXRoYWknLDIwMj0+J3Nvc3VhdGhhaScsMjAzPT4naG9oaXB0aGFpJywyMDQ9Pidsb2NodWxhdGhhaScsMjA1PT4nb2FuZ3RoYWknLDIwNj0+J2hvbm9raHVrdGhhaScsMjA3PT4ncGFpeWFubm9pdGhhaScsMjA4PT4nc2FyYWF0aGFpJywyMDk9PidtYWloYW5ha2F0dGhhaScsMjEwPT4nc2FyYWFhdGhhaScsMjExPT4nc2FyYWFtdGhhaScsMjEyPT4nc2FyYWl0aGFpJywyMTM9PidzYXJhaWl0aGFpJywyMTQ9PidzYXJhdWV0aGFpJywyMTU9PidzYXJhdWVldGhhaScsMjE2PT4nc2FyYXV0aGFpJywyMTc9PidzYXJhdXV0aGFpJywyMTg9PidwaGludGh1dGhhaScsMjE5PT4nLm5vdGRlZicsMjIwPT4nLm5vdGRlZicsMjIxPT4nLm5vdGRlZicsMjIyPT4nLm5vdGRlZicsMjIzPT4nYmFodHRoYWknLDIyND0+J3NhcmFldGhhaScsMjI1PT4nc2FyYWFldGhhaScsMjI2PT4nc2FyYW90aGFpJywyMjc9PidzYXJhYWltYWltdWFudGhhaScsMjI4PT4nc2FyYWFpbWFpbWFsYWl0aGFpJywyMjk9PidsYWtraGFuZ3lhb3RoYWknLDIzMD0+J21haXlhbW9rdGhhaScsMjMxPT4nbWFpdGFpa2h1dGhhaScsMjMyPT4nbWFpZWt0aGFpJywyMzM9PidtYWl0aG90aGFpJywyMzQ9PidtYWl0cml0aGFpJywyMzU9PidtYWljaGF0dGF3YXRoYWknLDIzNj0+J3RoYW50aGFraGF0dGhhaScsMjM3PT4nbmlraGFoaXR0aGFpJywyMzg9Pid5YW1ha2thbnRoYWknLDIzOT0+J2ZvbmdtYW50aGFpJywyNDA9Pid6ZXJvdGhhaScsMjQxPT4nb25ldGhhaScsMjQyPT4ndHdvdGhhaScsMjQzPT4ndGhyZWV0aGFpJywyNDQ9Pidmb3VydGhhaScsMjQ1PT4nZml2ZXRoYWknLDI0Nj0+J3NpeHRoYWknLDI0Nz0+J3NldmVudGhhaScsMjQ4PT4nZWlnaHR0aGFpJywyNDk9PiduaW5ldGhhaScsMjUwPT4nYW5na2hhbmtodXRoYWknLDI1MT0+J2tob211dHRoYWknLDI1Mj0+Jy5ub3RkZWYnLDI1Mz0+Jy5ub3RkZWYnLDI1ND0+Jy5ub3RkZWYnLDI1NT0+Jy5ub3RkZWYnKSwKCi8vIGVuY29kaW5nIG1hcCBmb3I6IGlzby04ODU5LTE1Cidpc28tODg1OS0xNScgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J2V4Y2xhbWRvd24nLDE2Mj0+J2NlbnQnLDE2Mz0+J3N0ZXJsaW5nJywxNjQ9PidFdXJvJywxNjU9Pid5ZW4nLDE2Nj0+J1NjYXJvbicsMTY3PT4nc2VjdGlvbicsMTY4PT4nc2Nhcm9uJywxNjk9Pidjb3B5cmlnaHQnLDE3MD0+J29yZGZlbWluaW5lJywxNzE9PidndWlsbGVtb3RsZWZ0JywxNzI9Pidsb2dpY2Fsbm90JywxNzM9PidoeXBoZW4nLDE3ND0+J3JlZ2lzdGVyZWQnLDE3NT0+J21hY3JvbicsMTc2PT4nZGVncmVlJywxNzc9PidwbHVzbWludXMnLDE3OD0+J3R3b3N1cGVyaW9yJywxNzk9Pid0aHJlZXN1cGVyaW9yJywxODA9PidaY2Fyb24nLDE4MT0+J211JywxODI9PidwYXJhZ3JhcGgnLDE4Mz0+J3BlcmlvZGNlbnRlcmVkJywxODQ9Pid6Y2Fyb24nLDE4NT0+J29uZXN1cGVyaW9yJywxODY9PidvcmRtYXNjdWxpbmUnLDE4Nz0+J2d1aWxsZW1vdHJpZ2h0JywxODg9PidPRScsMTg5PT4nb2UnLDE5MD0+J1lkaWVyZXNpcycsMTkxPT4ncXVlc3Rpb25kb3duJywxOTI9PidBZ3JhdmUnLDE5Mz0+J0FhY3V0ZScsMTk0PT4nQWNpcmN1bWZsZXgnLDE5NT0+J0F0aWxkZScsMTk2PT4nQWRpZXJlc2lzJywxOTc9PidBcmluZycsMTk4PT4nQUUnLDE5OT0+J0NjZWRpbGxhJywyMDA9PidFZ3JhdmUnLDIwMT0+J0VhY3V0ZScsMjAyPT4nRWNpcmN1bWZsZXgnLDIwMz0+J0VkaWVyZXNpcycsMjA0PT4nSWdyYXZlJywyMDU9PidJYWN1dGUnLDIwNj0+J0ljaXJjdW1mbGV4JywyMDc9PidJZGllcmVzaXMnLDIwOD0+J0V0aCcsMjA5PT4nTnRpbGRlJywyMTA9PidPZ3JhdmUnLDIxMT0+J09hY3V0ZScsMjEyPT4nT2NpcmN1bWZsZXgnLDIxMz0+J090aWxkZScsMjE0PT4nT2RpZXJlc2lzJywyMTU9PidtdWx0aXBseScsMjE2PT4nT3NsYXNoJywyMTc9PidVZ3JhdmUnLDIxOD0+J1VhY3V0ZScsMjE5PT4nVWNpcmN1bWZsZXgnLDIyMD0+J1VkaWVyZXNpcycsMjIxPT4nWWFjdXRlJywyMjI9PidUaG9ybicsMjIzPT4nZ2VybWFuZGJscycsMjI0PT4nYWdyYXZlJywyMjU9PidhYWN1dGUnLDIyNj0+J2FjaXJjdW1mbGV4JywyMjc9PidhdGlsZGUnLDIyOD0+J2FkaWVyZXNpcycsMjI5PT4nYXJpbmcnLDIzMD0+J2FlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nZWdyYXZlJywyMzM9PidlYWN1dGUnLDIzND0+J2VjaXJjdW1mbGV4JywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2lncmF2ZScsMjM3PT4naWFjdXRlJywyMzg9PidpY2lyY3VtZmxleCcsMjM5PT4naWRpZXJlc2lzJywyNDA9PidldGgnLDI0MT0+J250aWxkZScsMjQyPT4nb2dyYXZlJywyNDM9PidvYWN1dGUnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvdGlsZGUnLDI0Nj0+J29kaWVyZXNpcycsMjQ3PT4nZGl2aWRlJywyNDg9Pidvc2xhc2gnLDI0OT0+J3VncmF2ZScsMjUwPT4ndWFjdXRlJywyNTE9Pid1Y2lyY3VtZmxleCcsMjUyPT4ndWRpZXJlc2lzJywyNTM9Pid5YWN1dGUnLDI1ND0+J3Rob3JuJywyNTU9Pid5ZGllcmVzaXMnKSwKCi8vIGVuY29kaW5nIG1hcCBmb3I6IGlzby04ODU5LTE2Cidpc28tODg1OS0xNicgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nc3BhY2UnLDE2MT0+J0FvZ29uZWsnLDE2Mj0+J2FvZ29uZWsnLDE2Mz0+J0xzbGFzaCcsMTY0PT4nRXVybycsMTY1PT4ncXVvdGVkYmxiYXNlJywxNjY9PidTY2Fyb24nLDE2Nz0+J3NlY3Rpb24nLDE2OD0+J3NjYXJvbicsMTY5PT4nY29weXJpZ2h0JywxNzA9PidTY29tbWFhY2NlbnQnLDE3MT0+J2d1aWxsZW1vdGxlZnQnLDE3Mj0+J1phY3V0ZScsMTczPT4naHlwaGVuJywxNzQ9Pid6YWN1dGUnLDE3NT0+J1pkb3RhY2NlbnQnLDE3Nj0+J2RlZ3JlZScsMTc3PT4ncGx1c21pbnVzJywxNzg9PidDY2Fyb24nLDE3OT0+J2xzbGFzaCcsMTgwPT4nWmNhcm9uJywxODE9PidxdW90ZWRibHJpZ2h0JywxODI9PidwYXJhZ3JhcGgnLDE4Mz0+J3BlcmlvZGNlbnRlcmVkJywxODQ9Pid6Y2Fyb24nLDE4NT0+J2NjYXJvbicsMTg2PT4nc2NvbW1hYWNjZW50JywxODc9PidndWlsbGVtb3RyaWdodCcsMTg4PT4nT0UnLDE4OT0+J29lJywxOTA9PidZZGllcmVzaXMnLDE5MT0+J3pkb3RhY2NlbnQnLDE5Mj0+J0FncmF2ZScsMTkzPT4nQWFjdXRlJywxOTQ9PidBY2lyY3VtZmxleCcsMTk1PT4nQWJyZXZlJywxOTY9PidBZGllcmVzaXMnLDE5Nz0+J0NhY3V0ZScsMTk4PT4nQUUnLDE5OT0+J0NjZWRpbGxhJywyMDA9PidFZ3JhdmUnLDIwMT0+J0VhY3V0ZScsMjAyPT4nRWNpcmN1bWZsZXgnLDIwMz0+J0VkaWVyZXNpcycsMjA0PT4nSWdyYXZlJywyMDU9PidJYWN1dGUnLDIwNj0+J0ljaXJjdW1mbGV4JywyMDc9PidJZGllcmVzaXMnLDIwOD0+J0Rjcm9hdCcsMjA5PT4nTmFjdXRlJywyMTA9PidPZ3JhdmUnLDIxMT0+J09hY3V0ZScsMjEyPT4nT2NpcmN1bWZsZXgnLDIxMz0+J09odW5nYXJ1bWxhdXQnLDIxND0+J09kaWVyZXNpcycsMjE1PT4nU2FjdXRlJywyMTY9PidVaHVuZ2FydW1sYXV0JywyMTc9PidVZ3JhdmUnLDIxOD0+J1VhY3V0ZScsMjE5PT4nVWNpcmN1bWZsZXgnLDIyMD0+J1VkaWVyZXNpcycsMjIxPT4nRW9nb25laycsMjIyPT4nVGNvbW1hYWNjZW50JywyMjM9PidnZXJtYW5kYmxzJywyMjQ9PidhZ3JhdmUnLDIyNT0+J2FhY3V0ZScsMjI2PT4nYWNpcmN1bWZsZXgnLDIyNz0+J2FicmV2ZScsMjI4PT4nYWRpZXJlc2lzJywyMjk9PidjYWN1dGUnLDIzMD0+J2FlJywyMzE9PidjY2VkaWxsYScsMjMyPT4nZWdyYXZlJywyMzM9PidlYWN1dGUnLDIzND0+J2VjaXJjdW1mbGV4JywyMzU9PidlZGllcmVzaXMnLDIzNj0+J2lncmF2ZScsMjM3PT4naWFjdXRlJywyMzg9PidpY2lyY3VtZmxleCcsMjM5PT4naWRpZXJlc2lzJywyNDA9PidkY3JvYXQnLDI0MT0+J25hY3V0ZScsMjQyPT4nb2dyYXZlJywyNDM9PidvYWN1dGUnLDI0ND0+J29jaXJjdW1mbGV4JywyNDU9PidvaHVuZ2FydW1sYXV0JywyNDY9PidvZGllcmVzaXMnLDI0Nz0+J3NhY3V0ZScsMjQ4PT4ndWh1bmdhcnVtbGF1dCcsMjQ5PT4ndWdyYXZlJywyNTA9Pid1YWN1dGUnLDI1MT0+J3VjaXJjdW1mbGV4JywyNTI9Pid1ZGllcmVzaXMnLDI1Mz0+J2VvZ29uZWsnLDI1ND0+J3Rjb21tYWFjY2VudCcsMjU1PT4neWRpZXJlc2lzJyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBrb2k4LXIKJ2tvaTgtcicgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nU0YxMDAwMDAnLDEyOT0+J1NGMTEwMDAwJywxMzA9PidTRjAxMDAwMCcsMTMxPT4nU0YwMzAwMDAnLDEzMj0+J1NGMDIwMDAwJywxMzM9PidTRjA0MDAwMCcsMTM0PT4nU0YwODAwMDAnLDEzNT0+J1NGMDkwMDAwJywxMzY9PidTRjA2MDAwMCcsMTM3PT4nU0YwNzAwMDAnLDEzOD0+J1NGMDUwMDAwJywxMzk9Pid1cGJsb2NrJywxNDA9PidkbmJsb2NrJywxNDE9PidibG9jaycsMTQyPT4nbGZibG9jaycsMTQzPT4ncnRibG9jaycsMTQ0PT4nbHRzaGFkZScsMTQ1PT4nc2hhZGUnLDE0Nj0+J2Rrc2hhZGUnLDE0Nz0+J2ludGVncmFsdHAnLDE0OD0+J2ZpbGxlZGJveCcsMTQ5PT4ncGVyaW9kY2VudGVyZWQnLDE1MD0+J3JhZGljYWwnLDE1MT0+J2FwcHJveGVxdWFsJywxNTI9PidsZXNzZXF1YWwnLDE1Mz0+J2dyZWF0ZXJlcXVhbCcsMTU0PT4nc3BhY2UnLDE1NT0+J2ludGVncmFsYnQnLDE1Nj0+J2RlZ3JlZScsMTU3PT4ndHdvc3VwZXJpb3InLDE1OD0+J3BlcmlvZGNlbnRlcmVkJywxNTk9PidkaXZpZGUnLDE2MD0+J1NGNDMwMDAwJywxNjE9PidTRjI0MDAwMCcsMTYyPT4nU0Y1MTAwMDAnLDE2Mz0+J2FmaWkxMDA3MScsMTY0PT4nU0Y1MjAwMDAnLDE2NT0+J1NGMzkwMDAwJywxNjY9PidTRjIyMDAwMCcsMTY3PT4nU0YyMTAwMDAnLDE2OD0+J1NGMjUwMDAwJywxNjk9PidTRjUwMDAwMCcsMTcwPT4nU0Y0OTAwMDAnLDE3MT0+J1NGMzgwMDAwJywxNzI9PidTRjI4MDAwMCcsMTczPT4nU0YyNzAwMDAnLDE3ND0+J1NGMjYwMDAwJywxNzU9PidTRjM2MDAwMCcsMTc2PT4nU0YzNzAwMDAnLDE3Nz0+J1NGNDIwMDAwJywxNzg9PidTRjE5MDAwMCcsMTc5PT4nYWZpaTEwMDIzJywxODA9PidTRjIwMDAwMCcsMTgxPT4nU0YyMzAwMDAnLDE4Mj0+J1NGNDcwMDAwJywxODM9PidTRjQ4MDAwMCcsMTg0PT4nU0Y0MTAwMDAnLDE4NT0+J1NGNDUwMDAwJywxODY9PidTRjQ2MDAwMCcsMTg3PT4nU0Y0MDAwMDAnLDE4OD0+J1NGNTQwMDAwJywxODk9PidTRjUzMDAwMCcsMTkwPT4nU0Y0NDAwMDAnLDE5MT0+J2NvcHlyaWdodCcsMTkyPT4nYWZpaTEwMDk2JywxOTM9PidhZmlpMTAwNjUnLDE5ND0+J2FmaWkxMDA2NicsMTk1PT4nYWZpaTEwMDg4JywxOTY9PidhZmlpMTAwNjknLDE5Nz0+J2FmaWkxMDA3MCcsMTk4PT4nYWZpaTEwMDg2JywxOTk9PidhZmlpMTAwNjgnLDIwMD0+J2FmaWkxMDA4NycsMjAxPT4nYWZpaTEwMDc0JywyMDI9PidhZmlpMTAwNzUnLDIwMz0+J2FmaWkxMDA3NicsMjA0PT4nYWZpaTEwMDc3JywyMDU9PidhZmlpMTAwNzgnLDIwNj0+J2FmaWkxMDA3OScsMjA3PT4nYWZpaTEwMDgwJywyMDg9PidhZmlpMTAwODEnLDIwOT0+J2FmaWkxMDA5NycsMjEwPT4nYWZpaTEwMDgyJywyMTE9PidhZmlpMTAwODMnLDIxMj0+J2FmaWkxMDA4NCcsMjEzPT4nYWZpaTEwMDg1JywyMTQ9PidhZmlpMTAwNzInLDIxNT0+J2FmaWkxMDA2NycsMjE2PT4nYWZpaTEwMDk0JywyMTc9PidhZmlpMTAwOTMnLDIxOD0+J2FmaWkxMDA3MycsMjE5PT4nYWZpaTEwMDkwJywyMjA9PidhZmlpMTAwOTUnLDIyMT0+J2FmaWkxMDA5MScsMjIyPT4nYWZpaTEwMDg5JywyMjM9PidhZmlpMTAwOTInLDIyND0+J2FmaWkxMDA0OCcsMjI1PT4nYWZpaTEwMDE3JywyMjY9PidhZmlpMTAwMTgnLDIyNz0+J2FmaWkxMDA0MCcsMjI4PT4nYWZpaTEwMDIxJywyMjk9PidhZmlpMTAwMjInLDIzMD0+J2FmaWkxMDAzOCcsMjMxPT4nYWZpaTEwMDIwJywyMzI9PidhZmlpMTAwMzknLDIzMz0+J2FmaWkxMDAyNicsMjM0PT4nYWZpaTEwMDI3JywyMzU9PidhZmlpMTAwMjgnLDIzNj0+J2FmaWkxMDAyOScsMjM3PT4nYWZpaTEwMDMwJywyMzg9PidhZmlpMTAwMzEnLDIzOT0+J2FmaWkxMDAzMicsMjQwPT4nYWZpaTEwMDMzJywyNDE9PidhZmlpMTAwNDknLDI0Mj0+J2FmaWkxMDAzNCcsMjQzPT4nYWZpaTEwMDM1JywyNDQ9PidhZmlpMTAwMzYnLDI0NT0+J2FmaWkxMDAzNycsMjQ2PT4nYWZpaTEwMDI0JywyNDc9PidhZmlpMTAwMTknLDI0OD0+J2FmaWkxMDA0NicsMjQ5PT4nYWZpaTEwMDQ1JywyNTA9PidhZmlpMTAwMjUnLDI1MT0+J2FmaWkxMDA0MicsMjUyPT4nYWZpaTEwMDQ3JywyNTM9PidhZmlpMTAwNDMnLDI1ND0+J2FmaWkxMDA0MScsMjU1PT4nYWZpaTEwMDQ0JyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBrb2k4LXUKJ2tvaTgtdScgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ncXVvdGVkYmwnLDM1PT4nbnVtYmVyc2lnbicsMzY9Pidkb2xsYXInLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4ncXVvdGVzaW5nbGUnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2snLDQzPT4ncGx1cycsNDQ9Pidjb21tYScsNDU9PidoeXBoZW4nLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9PidhdCcsNjU9PidBJyw2Nj0+J0InLDY3PT4nQycsNjg9PidEJyw2OT0+J0UnLDcwPT4nRicsNzE9PidHJyw3Mj0+J0gnLDczPT4nSScsNzQ9PidKJyw3NT0+J0snLDc2PT4nTCcsNzc9PidNJyw3OD0+J04nLDc5PT4nTycsODA9PidQJyw4MT0+J1EnLDgyPT4nUicsODM9PidTJyw4ND0+J1QnLDg1PT4nVScsODY9PidWJyw4Nz0+J1cnLDg4PT4nWCcsODk9PidZJyw5MD0+J1onLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4nYmFja3NsYXNoJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9Pidhc2NpaWNpcmN1bScsOTU9Pid1bmRlcnNjb3JlJyw5Nj0+J2dyYXZlJyw5Nz0+J2EnLDk4PT4nYicsOTk9PidjJywxMDA9PidkJywxMDE9PidlJywxMDI9PidmJywxMDM9PidnJywxMDQ9PidoJywxMDU9PidpJywxMDY9PidqJywxMDc9PidrJywxMDg9PidsJywxMDk9PidtJywxMTA9PiduJywxMTE9PidvJywxMTI9PidwJywxMTM9PidxJywxMTQ9PidyJywxMTU9PidzJywxMTY9Pid0JywxMTc9Pid1JywxMTg9Pid2JywxMTk9Pid3JywxMjA9Pid4JywxMjE9Pid5JywxMjI9Pid6JywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nYXNjaWl0aWxkZScsMTI3PT4nLm5vdGRlZicsMTI4PT4nU0YxMDAwMDAnLDEyOT0+J1NGMTEwMDAwJywxMzA9PidTRjAxMDAwMCcsMTMxPT4nU0YwMzAwMDAnLDEzMj0+J1NGMDIwMDAwJywxMzM9PidTRjA0MDAwMCcsMTM0PT4nU0YwODAwMDAnLDEzNT0+J1NGMDkwMDAwJywxMzY9PidTRjA2MDAwMCcsMTM3PT4nU0YwNzAwMDAnLDEzOD0+J1NGMDUwMDAwJywxMzk9Pid1cGJsb2NrJywxNDA9PidkbmJsb2NrJywxNDE9PidibG9jaycsMTQyPT4nbGZibG9jaycsMTQzPT4ncnRibG9jaycsMTQ0PT4nbHRzaGFkZScsMTQ1PT4nc2hhZGUnLDE0Nj0+J2Rrc2hhZGUnLDE0Nz0+J2ludGVncmFsdHAnLDE0OD0+J2ZpbGxlZGJveCcsMTQ5PT4nYnVsbGV0JywxNTA9PidyYWRpY2FsJywxNTE9PidhcHByb3hlcXVhbCcsMTUyPT4nbGVzc2VxdWFsJywxNTM9PidncmVhdGVyZXF1YWwnLDE1ND0+J3NwYWNlJywxNTU9PidpbnRlZ3JhbGJ0JywxNTY9PidkZWdyZWUnLDE1Nz0+J3R3b3N1cGVyaW9yJywxNTg9PidwZXJpb2RjZW50ZXJlZCcsMTU5PT4nZGl2aWRlJywxNjA9PidTRjQzMDAwMCcsMTYxPT4nU0YyNDAwMDAnLDE2Mj0+J1NGNTEwMDAwJywxNjM9PidhZmlpMTAwNzEnLDE2ND0+J2FmaWkxMDEwMScsMTY1PT4nU0YzOTAwMDAnLDE2Nj0+J2FmaWkxMDEwMycsMTY3PT4nYWZpaTEwMTA0JywxNjg9PidTRjI1MDAwMCcsMTY5PT4nU0Y1MDAwMDAnLDE3MD0+J1NGNDkwMDAwJywxNzE9PidTRjM4MDAwMCcsMTcyPT4nU0YyODAwMDAnLDE3Mz0+J2FmaWkxMDA5OCcsMTc0PT4nU0YyNjAwMDAnLDE3NT0+J1NGMzYwMDAwJywxNzY9PidTRjM3MDAwMCcsMTc3PT4nU0Y0MjAwMDAnLDE3OD0+J1NGMTkwMDAwJywxNzk9PidhZmlpMTAwMjMnLDE4MD0+J2FmaWkxMDA1MycsMTgxPT4nU0YyMzAwMDAnLDE4Mj0+J2FmaWkxMDA1NScsMTgzPT4nYWZpaTEwMDU2JywxODQ9PidTRjQxMDAwMCcsMTg1PT4nU0Y0NTAwMDAnLDE4Nj0+J1NGNDYwMDAwJywxODc9PidTRjQwMDAwMCcsMTg4PT4nU0Y1NDAwMDAnLDE4OT0+J2FmaWkxMDA1MCcsMTkwPT4nU0Y0NDAwMDAnLDE5MT0+J2NvcHlyaWdodCcsMTkyPT4nYWZpaTEwMDk2JywxOTM9PidhZmlpMTAwNjUnLDE5ND0+J2FmaWkxMDA2NicsMTk1PT4nYWZpaTEwMDg4JywxOTY9PidhZmlpMTAwNjknLDE5Nz0+J2FmaWkxMDA3MCcsMTk4PT4nYWZpaTEwMDg2JywxOTk9PidhZmlpMTAwNjgnLDIwMD0+J2FmaWkxMDA4NycsMjAxPT4nYWZpaTEwMDc0JywyMDI9PidhZmlpMTAwNzUnLDIwMz0+J2FmaWkxMDA3NicsMjA0PT4nYWZpaTEwMDc3JywyMDU9PidhZmlpMTAwNzgnLDIwNj0+J2FmaWkxMDA3OScsMjA3PT4nYWZpaTEwMDgwJywyMDg9PidhZmlpMTAwODEnLDIwOT0+J2FmaWkxMDA5NycsMjEwPT4nYWZpaTEwMDgyJywyMTE9PidhZmlpMTAwODMnLDIxMj0+J2FmaWkxMDA4NCcsMjEzPT4nYWZpaTEwMDg1JywyMTQ9PidhZmlpMTAwNzInLDIxNT0+J2FmaWkxMDA2NycsMjE2PT4nYWZpaTEwMDk0JywyMTc9PidhZmlpMTAwOTMnLDIxOD0+J2FmaWkxMDA3MycsMjE5PT4nYWZpaTEwMDkwJywyMjA9PidhZmlpMTAwOTUnLDIyMT0+J2FmaWkxMDA5MScsMjIyPT4nYWZpaTEwMDg5JywyMjM9PidhZmlpMTAwOTInLDIyND0+J2FmaWkxMDA0OCcsMjI1PT4nYWZpaTEwMDE3JywyMjY9PidhZmlpMTAwMTgnLDIyNz0+J2FmaWkxMDA0MCcsMjI4PT4nYWZpaTEwMDIxJywyMjk9PidhZmlpMTAwMjInLDIzMD0+J2FmaWkxMDAzOCcsMjMxPT4nYWZpaTEwMDIwJywyMzI9PidhZmlpMTAwMzknLDIzMz0+J2FmaWkxMDAyNicsMjM0PT4nYWZpaTEwMDI3JywyMzU9PidhZmlpMTAwMjgnLDIzNj0+J2FmaWkxMDAyOScsMjM3PT4nYWZpaTEwMDMwJywyMzg9PidhZmlpMTAwMzEnLDIzOT0+J2FmaWkxMDAzMicsMjQwPT4nYWZpaTEwMDMzJywyNDE9PidhZmlpMTAwNDknLDI0Mj0+J2FmaWkxMDAzNCcsMjQzPT4nYWZpaTEwMDM1JywyNDQ9PidhZmlpMTAwMzYnLDI0NT0+J2FmaWkxMDAzNycsMjQ2PT4nYWZpaTEwMDI0JywyNDc9PidhZmlpMTAwMTknLDI0OD0+J2FmaWkxMDA0NicsMjQ5PT4nYWZpaTEwMDQ1JywyNTA9PidhZmlpMTAwMjUnLDI1MT0+J2FmaWkxMDA0MicsMjUyPT4nYWZpaTEwMDQ3JywyNTM9PidhZmlpMTAwNDMnLDI1ND0+J2FmaWkxMDA0MScsMjU1PT4nYWZpaTEwMDQ0JyksCgovLyBlbmNvZGluZyBtYXAgZm9yOiBzeW1ib2wKJ3N5bWJvbCcgPT4gYXJyYXkoMD0+Jy5ub3RkZWYnLDE9Picubm90ZGVmJywyPT4nLm5vdGRlZicsMz0+Jy5ub3RkZWYnLDQ9Picubm90ZGVmJyw1PT4nLm5vdGRlZicsNj0+Jy5ub3RkZWYnLDc9Picubm90ZGVmJyw4PT4nLm5vdGRlZicsOT0+Jy5ub3RkZWYnLDEwPT4nLm5vdGRlZicsMTE9Picubm90ZGVmJywxMj0+Jy5ub3RkZWYnLDEzPT4nLm5vdGRlZicsMTQ9Picubm90ZGVmJywxNT0+Jy5ub3RkZWYnLDE2PT4nLm5vdGRlZicsMTc9Picubm90ZGVmJywxOD0+Jy5ub3RkZWYnLDE5PT4nLm5vdGRlZicsMjA9Picubm90ZGVmJywyMT0+Jy5ub3RkZWYnLDIyPT4nLm5vdGRlZicsMjM9Picubm90ZGVmJywyND0+Jy5ub3RkZWYnLDI1PT4nLm5vdGRlZicsMjY9Picubm90ZGVmJywyNz0+Jy5ub3RkZWYnLDI4PT4nLm5vdGRlZicsMjk9Picubm90ZGVmJywzMD0+Jy5ub3RkZWYnLDMxPT4nLm5vdGRlZicsMzI9PidzcGFjZScsMzM9PidleGNsYW0nLDM0PT4ndW5pdmVyc2FsJywzNT0+J251bWJlcnNpZ24nLDM2PT4nZXhpc3RlbnRpYWwnLDM3PT4ncGVyY2VudCcsMzg9PidhbXBlcnNhbmQnLDM5PT4nc3VjaHRoYXQnLDQwPT4ncGFyZW5sZWZ0Jyw0MT0+J3BhcmVucmlnaHQnLDQyPT4nYXN0ZXJpc2ttYXRoJyw0Mz0+J3BsdXMnLDQ0PT4nY29tbWEnLDQ1PT4nbWludXMnLDQ2PT4ncGVyaW9kJyw0Nz0+J3NsYXNoJyw0OD0+J3plcm8nLDQ5PT4nb25lJyw1MD0+J3R3bycsNTE9Pid0aHJlZScsNTI9Pidmb3VyJyw1Mz0+J2ZpdmUnLDU0PT4nc2l4Jyw1NT0+J3NldmVuJyw1Nj0+J2VpZ2h0Jyw1Nz0+J25pbmUnLDU4PT4nY29sb24nLDU5PT4nc2VtaWNvbG9uJyw2MD0+J2xlc3MnLDYxPT4nZXF1YWwnLDYyPT4nZ3JlYXRlcicsNjM9PidxdWVzdGlvbicsNjQ9Pidjb25ncnVlbnQnLDY1PT4nQWxwaGEnLDY2PT4nQmV0YScsNjc9PidDaGknLDY4PT4nRGVsdGEnLDY5PT4nRXBzaWxvbicsNzA9PidQaGknLDcxPT4nR2FtbWEnLDcyPT4nRXRhJyw3Mz0+J0lvdGEnLDc0PT4ndGhldGExJyw3NT0+J0thcHBhJyw3Nj0+J0xhbWJkYScsNzc9PidNdScsNzg9PidOdScsNzk9PidPbWljcm9uJyw4MD0+J1BpJyw4MT0+J1RoZXRhJyw4Mj0+J1JobycsODM9PidTaWdtYScsODQ9PidUYXUnLDg1PT4nVXBzaWxvbicsODY9PidzaWdtYTEnLDg3PT4nT21lZ2EnLDg4PT4nWGknLDg5PT4nUHNpJyw5MD0+J1pldGEnLDkxPT4nYnJhY2tldGxlZnQnLDkyPT4ndGhlcmVmb3JlJyw5Mz0+J2JyYWNrZXRyaWdodCcsOTQ9PidwZXJwZW5kaWN1bGFyJyw5NT0+J3VuZGVyc2NvcmUnLDk2PT4ncmFkaWNhbGV4Jyw5Nz0+J2FscGhhJyw5OD0+J2JldGEnLDk5PT4nY2hpJywxMDA9PidkZWx0YScsMTAxPT4nZXBzaWxvbicsMTAyPT4ncGhpJywxMDM9PidnYW1tYScsMTA0PT4nZXRhJywxMDU9Pidpb3RhJywxMDY9PidwaGkxJywxMDc9PidrYXBwYScsMTA4PT4nbGFtYmRhJywxMDk9PidtdScsMTEwPT4nbnUnLDExMT0+J29taWNyb24nLDExMj0+J3BpJywxMTM9Pid0aGV0YScsMTE0PT4ncmhvJywxMTU9PidzaWdtYScsMTE2PT4ndGF1JywxMTc9Pid1cHNpbG9uJywxMTg9PidvbWVnYTEnLDExOT0+J29tZWdhJywxMjA9Pid4aScsMTIxPT4ncHNpJywxMjI9Pid6ZXRhJywxMjM9PidicmFjZWxlZnQnLDEyND0+J2JhcicsMTI1PT4nYnJhY2VyaWdodCcsMTI2PT4nc2ltaWxhcicsMTI3PT4nLm5vdGRlZicsMTI4PT4nLm5vdGRlZicsMTI5PT4nLm5vdGRlZicsMTMwPT4nLm5vdGRlZicsMTMxPT4nLm5vdGRlZicsMTMyPT4nLm5vdGRlZicsMTMzPT4nLm5vdGRlZicsMTM0PT4nLm5vdGRlZicsMTM1PT4nLm5vdGRlZicsMTM2PT4nLm5vdGRlZicsMTM3PT4nLm5vdGRlZicsMTM4PT4nLm5vdGRlZicsMTM5PT4nLm5vdGRlZicsMTQwPT4nLm5vdGRlZicsMTQxPT4nLm5vdGRlZicsMTQyPT4nLm5vdGRlZicsMTQzPT4nLm5vdGRlZicsMTQ0PT4nLm5vdGRlZicsMTQ1PT4nLm5vdGRlZicsMTQ2PT4nLm5vdGRlZicsMTQ3PT4nLm5vdGRlZicsMTQ4PT4nLm5vdGRlZicsMTQ5PT4nLm5vdGRlZicsMTUwPT4nLm5vdGRlZicsMTUxPT4nLm5vdGRlZicsMTUyPT4nLm5vdGRlZicsMTUzPT4nLm5vdGRlZicsMTU0PT4nLm5vdGRlZicsMTU1PT4nLm5vdGRlZicsMTU2PT4nLm5vdGRlZicsMTU3PT4nLm5vdGRlZicsMTU4PT4nLm5vdGRlZicsMTU5PT4nLm5vdGRlZicsMTYwPT4nRXVybycsMTYxPT4nVXBzaWxvbjEnLDE2Mj0+J21pbnV0ZScsMTYzPT4nbGVzc2VxdWFsJywxNjQ9PidmcmFjdGlvbicsMTY1PT4naW5maW5pdHknLDE2Nj0+J2Zsb3JpbicsMTY3PT4nY2x1YicsMTY4PT4nZGlhbW9uZCcsMTY5PT4naGVhcnQnLDE3MD0+J3NwYWRlJywxNzE9PidhcnJvd2JvdGgnLDE3Mj0+J2Fycm93bGVmdCcsMTczPT4nYXJyb3d1cCcsMTc0PT4nYXJyb3dyaWdodCcsMTc1PT4nYXJyb3dkb3duJywxNzY9PidkZWdyZWUnLDE3Nz0+J3BsdXNtaW51cycsMTc4PT4nc2Vjb25kJywxNzk9PidncmVhdGVyZXF1YWwnLDE4MD0+J211bHRpcGx5JywxODE9Pidwcm9wb3J0aW9uYWwnLDE4Mj0+J3BhcnRpYWxkaWZmJywxODM9PididWxsZXQnLDE4ND0+J2RpdmlkZScsMTg1PT4nbm90ZXF1YWwnLDE4Nj0+J2VxdWl2YWxlbmNlJywxODc9PidhcHByb3hlcXVhbCcsMTg4PT4nZWxsaXBzaXMnLDE4OT0+J2Fycm93dmVydGV4JywxOTA9PidhcnJvd2hvcml6ZXgnLDE5MT0+J2NhcnJpYWdlcmV0dXJuJywxOTI9PidhbGVwaCcsMTkzPT4nSWZyYWt0dXInLDE5ND0+J1JmcmFrdHVyJywxOTU9Pid3ZWllcnN0cmFzcycsMTk2PT4nY2lyY2xlbXVsdGlwbHknLDE5Nz0+J2NpcmNsZXBsdXMnLDE5OD0+J2VtcHR5c2V0JywxOTk9PidpbnRlcnNlY3Rpb24nLDIwMD0+J3VuaW9uJywyMDE9Pidwcm9wZXJzdXBlcnNldCcsMjAyPT4ncmVmbGV4c3VwZXJzZXQnLDIwMz0+J25vdHN1YnNldCcsMjA0PT4ncHJvcGVyc3Vic2V0JywyMDU9PidyZWZsZXhzdWJzZXQnLDIwNj0+J2VsZW1lbnQnLDIwNz0+J25vdGVsZW1lbnQnLDIwOD0+J2FuZ2xlJywyMDk9PidncmFkaWVudCcsMjEwPT4ncmVnaXN0ZXJzZXJpZicsMjExPT4nY29weXJpZ2h0c2VyaWYnLDIxMj0+J3RyYWRlbWFya3NlcmlmJywyMTM9Pidwcm9kdWN0JywyMTQ9PidyYWRpY2FsJywyMTU9Pidkb3RtYXRoJywyMTY9Pidsb2dpY2Fsbm90JywyMTc9Pidsb2dpY2FsYW5kJywyMTg9Pidsb2dpY2Fsb3InLDIxOT0+J2Fycm93ZGJsYm90aCcsMjIwPT4nYXJyb3dkYmxsZWZ0JywyMjE9PidhcnJvd2RibHVwJywyMjI9PidhcnJvd2RibHJpZ2h0JywyMjM9PidhcnJvd2RibGRvd24nLDIyND0+J2xvemVuZ2UnLDIyNT0+J2FuZ2xlbGVmdCcsMjI2PT4ncmVnaXN0ZXJzYW5zJywyMjc9Pidjb3B5cmlnaHRzYW5zJywyMjg9Pid0cmFkZW1hcmtzYW5zJywyMjk9PidzdW1tYXRpb24nLDIzMD0+J3BhcmVubGVmdHRwJywyMzE9PidwYXJlbmxlZnRleCcsMjMyPT4ncGFyZW5sZWZ0YnQnLDIzMz0+J2JyYWNrZXRsZWZ0dHAnLDIzND0+J2JyYWNrZXRsZWZ0ZXgnLDIzNT0+J2JyYWNrZXRsZWZ0YnQnLDIzNj0+J2JyYWNlbGVmdHRwJywyMzc9PidicmFjZWxlZnRtaWQnLDIzOD0+J2JyYWNlbGVmdGJ0JywyMzk9PidicmFjZWV4JywyNDA9Picubm90ZGVmJywyNDE9PidhbmdsZXJpZ2h0JywyNDI9PidpbnRlZ3JhbCcsMjQzPT4naW50ZWdyYWx0cCcsMjQ0PT4naW50ZWdyYWxleCcsMjQ1PT4naW50ZWdyYWxidCcsMjQ2PT4ncGFyZW5yaWdodHRwJywyNDc9PidwYXJlbnJpZ2h0ZXgnLDI0OD0+J3BhcmVucmlnaHRidCcsMjQ5PT4nYnJhY2tldHJpZ2h0dHAnLDI1MD0+J2JyYWNrZXRyaWdodGV4JywyNTE9PidicmFja2V0cmlnaHRidCcsMjUyPT4nYnJhY2VyaWdodHRwJywyNTM9PidicmFjZXJpZ2h0bWlkJywyNTQ9PidicmFjZXJpZ2h0YnQnLDI1NT0+Jy5ub3RkZWYnLDEyMjY9PidyZWdpc3RlcmVkJywxMjI3PT4nY29weXJpZ2h0JywxMjI4PT4ndHJhZGVtYXJrJykKCik7IC8vIGVuZCBvZiBlbmNvZGluZyBtYXBzCgovKioKICogVG9Vbmljb2RlIG1hcCBmb3IgSWRlbnRpdHktSCBzdHJlYW0KICogQHB1YmxpYyBzdGF0aWMKICovCnB1YmxpYyBzdGF0aWMgJHVuaV9pZGVudGl0eV9oID0gIi9DSURJbml0IC9Qcm9jU2V0IGZpbmRyZXNvdXJjZSBiZWdpblxuMTIgZGljdCBiZWdpblxuYmVnaW5jbWFwXG4vQ0lEU3lzdGVtSW5mbyA8PCAvUmVnaXN0cnkgKEFkb2JlKSAvT3JkZXJpbmcgKFVDUykgL1N1cHBsZW1lbnQgMCA+PiBkZWZcbi9DTWFwTmFtZSAvQWRvYmUtSWRlbnRpdHktVUNTIGRlZlxuL0NNYXBUeXBlIDIgZGVmXG4vV01vZGUgMCBkZWZcbjEgYmVnaW5jb2Rlc3BhY2VyYW5nZVxuPDAwMDA+IDxGRkZGPlxuZW5kY29kZXNwYWNlcmFuZ2VcbjEwMCBiZWdpbmJmcmFuZ2VcbjwwMDAwPiA8MDBmZj4gPDAwMDA+XG48MDEwMD4gPDAxZmY+IDwwMTAwPlxuPDAyMDA+IDwwMmZmPiA8MDIwMD5cbjwwMzAwPiA8MDNmZj4gPDAzMDA+XG48MDQwMD4gPDA0ZmY+IDwwNDAwPlxuPDA1MDA+IDwwNWZmPiA8MDUwMD5cbjwwNjAwPiA8MDZmZj4gPDA2MDA+XG48MDcwMD4gPDA3ZmY+IDwwNzAwPlxuPDA4MDA+IDwwOGZmPiA8MDgwMD5cbjwwOTAwPiA8MDlmZj4gPDA5MDA+XG48MGEwMD4gPDBhZmY+IDwwYTAwPlxuPDBiMDA+IDwwYmZmPiA8MGIwMD5cbjwwYzAwPiA8MGNmZj4gPDBjMDA+XG48MGQwMD4gPDBkZmY+IDwwZDAwPlxuPDBlMDA+IDwwZWZmPiA8MGUwMD5cbjwwZjAwPiA8MGZmZj4gPDBmMDA+XG48MTAwMD4gPDEwZmY+IDwxMDAwPlxuPDExMDA+IDwxMWZmPiA8MTEwMD5cbjwxMjAwPiA8MTJmZj4gPDEyMDA+XG48MTMwMD4gPDEzZmY+IDwxMzAwPlxuPDE0MDA+IDwxNGZmPiA8MTQwMD5cbjwxNTAwPiA8MTVmZj4gPDE1MDA+XG48MTYwMD4gPDE2ZmY+IDwxNjAwPlxuPDE3MDA+IDwxN2ZmPiA8MTcwMD5cbjwxODAwPiA8MThmZj4gPDE4MDA+XG48MTkwMD4gPDE5ZmY+IDwxOTAwPlxuPDFhMDA+IDwxYWZmPiA8MWEwMD5cbjwxYjAwPiA8MWJmZj4gPDFiMDA+XG48MWMwMD4gPDFjZmY+IDwxYzAwPlxuPDFkMDA+IDwxZGZmPiA8MWQwMD5cbjwxZTAwPiA8MWVmZj4gPDFlMDA+XG48MWYwMD4gPDFmZmY+IDwxZjAwPlxuPDIwMDA+IDwyMGZmPiA8MjAwMD5cbjwyMTAwPiA8MjFmZj4gPDIxMDA+XG48MjIwMD4gPDIyZmY+IDwyMjAwPlxuPDIzMDA+IDwyM2ZmPiA8MjMwMD5cbjwyNDAwPiA8MjRmZj4gPDI0MDA+XG48MjUwMD4gPDI1ZmY+IDwyNTAwPlxuPDI2MDA+IDwyNmZmPiA8MjYwMD5cbjwyNzAwPiA8MjdmZj4gPDI3MDA+XG48MjgwMD4gPDI4ZmY+IDwyODAwPlxuPDI5MDA+IDwyOWZmPiA8MjkwMD5cbjwyYTAwPiA8MmFmZj4gPDJhMDA+XG48MmIwMD4gPDJiZmY+IDwyYjAwPlxuPDJjMDA+IDwyY2ZmPiA8MmMwMD5cbjwyZDAwPiA8MmRmZj4gPDJkMDA+XG48MmUwMD4gPDJlZmY+IDwyZTAwPlxuPDJmMDA+IDwyZmZmPiA8MmYwMD5cbjwzMDAwPiA8MzBmZj4gPDMwMDA+XG48MzEwMD4gPDMxZmY+IDwzMTAwPlxuPDMyMDA+IDwzMmZmPiA8MzIwMD5cbjwzMzAwPiA8MzNmZj4gPDMzMDA+XG48MzQwMD4gPDM0ZmY+IDwzNDAwPlxuPDM1MDA+IDwzNWZmPiA8MzUwMD5cbjwzNjAwPiA8MzZmZj4gPDM2MDA+XG48MzcwMD4gPDM3ZmY+IDwzNzAwPlxuPDM4MDA+IDwzOGZmPiA8MzgwMD5cbjwzOTAwPiA8MzlmZj4gPDM5MDA+XG48M2EwMD4gPDNhZmY+IDwzYTAwPlxuPDNiMDA+IDwzYmZmPiA8M2IwMD5cbjwzYzAwPiA8M2NmZj4gPDNjMDA+XG48M2QwMD4gPDNkZmY+IDwzZDAwPlxuPDNlMDA+IDwzZWZmPiA8M2UwMD5cbjwzZjAwPiA8M2ZmZj4gPDNmMDA+XG48NDAwMD4gPDQwZmY+IDw0MDAwPlxuPDQxMDA+IDw0MWZmPiA8NDEwMD5cbjw0MjAwPiA8NDJmZj4gPDQyMDA+XG48NDMwMD4gPDQzZmY+IDw0MzAwPlxuPDQ0MDA+IDw0NGZmPiA8NDQwMD5cbjw0NTAwPiA8NDVmZj4gPDQ1MDA+XG48NDYwMD4gPDQ2ZmY+IDw0NjAwPlxuPDQ3MDA+IDw0N2ZmPiA8NDcwMD5cbjw0ODAwPiA8NDhmZj4gPDQ4MDA+XG48NDkwMD4gPDQ5ZmY+IDw0OTAwPlxuPDRhMDA+IDw0YWZmPiA8NGEwMD5cbjw0YjAwPiA8NGJmZj4gPDRiMDA+XG48NGMwMD4gPDRjZmY+IDw0YzAwPlxuPDRkMDA+IDw0ZGZmPiA8NGQwMD5cbjw0ZTAwPiA8NGVmZj4gPDRlMDA+XG48NGYwMD4gPDRmZmY+IDw0ZjAwPlxuPDUwMDA+IDw1MGZmPiA8NTAwMD5cbjw1MTAwPiA8NTFmZj4gPDUxMDA+XG48NTIwMD4gPDUyZmY+IDw1MjAwPlxuPDUzMDA+IDw1M2ZmPiA8NTMwMD5cbjw1NDAwPiA8NTRmZj4gPDU0MDA+XG48NTUwMD4gPDU1ZmY+IDw1NTAwPlxuPDU2MDA+IDw1NmZmPiA8NTYwMD5cbjw1NzAwPiA8NTdmZj4gPDU3MDA+XG48NTgwMD4gPDU4ZmY+IDw1ODAwPlxuPDU5MDA+IDw1OWZmPiA8NTkwMD5cbjw1YTAwPiA8NWFmZj4gPDVhMDA+XG48NWIwMD4gPDViZmY+IDw1YjAwPlxuPDVjMDA+IDw1Y2ZmPiA8NWMwMD5cbjw1ZDAwPiA8NWRmZj4gPDVkMDA+XG48NWUwMD4gPDVlZmY+IDw1ZTAwPlxuPDVmMDA+IDw1ZmZmPiA8NWYwMD5cbjw2MDAwPiA8NjBmZj4gPDYwMDA+XG48NjEwMD4gPDYxZmY+IDw2MTAwPlxuPDYyMDA+IDw2MmZmPiA8NjIwMD5cbjw2MzAwPiA8NjNmZj4gPDYzMDA+XG5lbmRiZnJhbmdlXG4xMDAgYmVnaW5iZnJhbmdlXG48NjQwMD4gPDY0ZmY+IDw2NDAwPlxuPDY1MDA+IDw2NWZmPiA8NjUwMD5cbjw2NjAwPiA8NjZmZj4gPDY2MDA+XG48NjcwMD4gPDY3ZmY+IDw2NzAwPlxuPDY4MDA+IDw2OGZmPiA8NjgwMD5cbjw2OTAwPiA8NjlmZj4gPDY5MDA+XG48NmEwMD4gPDZhZmY+IDw2YTAwPlxuPDZiMDA+IDw2YmZmPiA8NmIwMD5cbjw2YzAwPiA8NmNmZj4gPDZjMDA+XG48NmQwMD4gPDZkZmY+IDw2ZDAwPlxuPDZlMDA+IDw2ZWZmPiA8NmUwMD5cbjw2ZjAwPiA8NmZmZj4gPDZmMDA+XG48NzAwMD4gPDcwZmY+IDw3MDAwPlxuPDcxMDA+IDw3MWZmPiA8NzEwMD5cbjw3MjAwPiA8NzJmZj4gPDcyMDA+XG48NzMwMD4gPDczZmY+IDw3MzAwPlxuPDc0MDA+IDw3NGZmPiA8NzQwMD5cbjw3NTAwPiA8NzVmZj4gPDc1MDA+XG48NzYwMD4gPDc2ZmY+IDw3NjAwPlxuPDc3MDA+IDw3N2ZmPiA8NzcwMD5cbjw3ODAwPiA8NzhmZj4gPDc4MDA+XG48NzkwMD4gPDc5ZmY+IDw3OTAwPlxuPDdhMDA+IDw3YWZmPiA8N2EwMD5cbjw3YjAwPiA8N2JmZj4gPDdiMDA+XG48N2MwMD4gPDdjZmY+IDw3YzAwPlxuPDdkMDA+IDw3ZGZmPiA8N2QwMD5cbjw3ZTAwPiA8N2VmZj4gPDdlMDA+XG48N2YwMD4gPDdmZmY+IDw3ZjAwPlxuPDgwMDA+IDw4MGZmPiA8ODAwMD5cbjw4MTAwPiA8ODFmZj4gPDgxMDA+XG48ODIwMD4gPDgyZmY+IDw4MjAwPlxuPDgzMDA+IDw4M2ZmPiA8ODMwMD5cbjw4NDAwPiA8ODRmZj4gPDg0MDA+XG48ODUwMD4gPDg1ZmY+IDw4NTAwPlxuPDg2MDA+IDw4NmZmPiA8ODYwMD5cbjw4NzAwPiA8ODdmZj4gPDg3MDA+XG48ODgwMD4gPDg4ZmY+IDw4ODAwPlxuPDg5MDA+IDw4OWZmPiA8ODkwMD5cbjw4YTAwPiA8OGFmZj4gPDhhMDA+XG48OGIwMD4gPDhiZmY+IDw4YjAwPlxuPDhjMDA+IDw4Y2ZmPiA8OGMwMD5cbjw4ZDAwPiA8OGRmZj4gPDhkMDA+XG48OGUwMD4gPDhlZmY+IDw4ZTAwPlxuPDhmMDA+IDw4ZmZmPiA8OGYwMD5cbjw5MDAwPiA8OTBmZj4gPDkwMDA+XG48OTEwMD4gPDkxZmY+IDw5MTAwPlxuPDkyMDA+IDw5MmZmPiA8OTIwMD5cbjw5MzAwPiA8OTNmZj4gPDkzMDA+XG48OTQwMD4gPDk0ZmY+IDw5NDAwPlxuPDk1MDA+IDw5NWZmPiA8OTUwMD5cbjw5NjAwPiA8OTZmZj4gPDk2MDA+XG48OTcwMD4gPDk3ZmY+IDw5NzAwPlxuPDk4MDA+IDw5OGZmPiA8OTgwMD5cbjw5OTAwPiA8OTlmZj4gPDk5MDA+XG48OWEwMD4gPDlhZmY+IDw5YTAwPlxuPDliMDA+IDw5YmZmPiA8OWIwMD5cbjw5YzAwPiA8OWNmZj4gPDljMDA+XG48OWQwMD4gPDlkZmY+IDw5ZDAwPlxuPDllMDA+IDw5ZWZmPiA8OWUwMD5cbjw5ZjAwPiA8OWZmZj4gPDlmMDA+XG48YTAwMD4gPGEwZmY+IDxhMDAwPlxuPGExMDA+IDxhMWZmPiA8YTEwMD5cbjxhMjAwPiA8YTJmZj4gPGEyMDA+XG48YTMwMD4gPGEzZmY+IDxhMzAwPlxuPGE0MDA+IDxhNGZmPiA8YTQwMD5cbjxhNTAwPiA8YTVmZj4gPGE1MDA+XG48YTYwMD4gPGE2ZmY+IDxhNjAwPlxuPGE3MDA+IDxhN2ZmPiA8YTcwMD5cbjxhODAwPiA8YThmZj4gPGE4MDA+XG48YTkwMD4gPGE5ZmY+IDxhOTAwPlxuPGFhMDA+IDxhYWZmPiA8YWEwMD5cbjxhYjAwPiA8YWJmZj4gPGFiMDA+XG48YWMwMD4gPGFjZmY+IDxhYzAwPlxuPGFkMDA+IDxhZGZmPiA8YWQwMD5cbjxhZTAwPiA8YWVmZj4gPGFlMDA+XG48YWYwMD4gPGFmZmY+IDxhZjAwPlxuPGIwMDA+IDxiMGZmPiA8YjAwMD5cbjxiMTAwPiA8YjFmZj4gPGIxMDA+XG48YjIwMD4gPGIyZmY+IDxiMjAwPlxuPGIzMDA+IDxiM2ZmPiA8YjMwMD5cbjxiNDAwPiA8YjRmZj4gPGI0MDA+XG48YjUwMD4gPGI1ZmY+IDxiNTAwPlxuPGI2MDA+IDxiNmZmPiA8YjYwMD5cbjxiNzAwPiA8YjdmZj4gPGI3MDA+XG48YjgwMD4gPGI4ZmY+IDxiODAwPlxuPGI5MDA+IDxiOWZmPiA8YjkwMD5cbjxiYTAwPiA8YmFmZj4gPGJhMDA+XG48YmIwMD4gPGJiZmY+IDxiYjAwPlxuPGJjMDA+IDxiY2ZmPiA8YmMwMD5cbjxiZDAwPiA8YmRmZj4gPGJkMDA+XG48YmUwMD4gPGJlZmY+IDxiZTAwPlxuPGJmMDA+IDxiZmZmPiA8YmYwMD5cbjxjMDAwPiA8YzBmZj4gPGMwMDA+XG48YzEwMD4gPGMxZmY+IDxjMTAwPlxuPGMyMDA+IDxjMmZmPiA8YzIwMD5cbjxjMzAwPiA8YzNmZj4gPGMzMDA+XG48YzQwMD4gPGM0ZmY+IDxjNDAwPlxuPGM1MDA+IDxjNWZmPiA8YzUwMD5cbjxjNjAwPiA8YzZmZj4gPGM2MDA+XG48YzcwMD4gPGM3ZmY+IDxjNzAwPlxuZW5kYmZyYW5nZVxuNTYgYmVnaW5iZnJhbmdlXG48YzgwMD4gPGM4ZmY+IDxjODAwPlxuPGM5MDA+IDxjOWZmPiA8YzkwMD5cbjxjYTAwPiA8Y2FmZj4gPGNhMDA+XG48Y2IwMD4gPGNiZmY+IDxjYjAwPlxuPGNjMDA+IDxjY2ZmPiA8Y2MwMD5cbjxjZDAwPiA8Y2RmZj4gPGNkMDA+XG48Y2UwMD4gPGNlZmY+IDxjZTAwPlxuPGNmMDA+IDxjZmZmPiA8Y2YwMD5cbjxkMDAwPiA8ZDBmZj4gPGQwMDA+XG48ZDEwMD4gPGQxZmY+IDxkMTAwPlxuPGQyMDA+IDxkMmZmPiA8ZDIwMD5cbjxkMzAwPiA8ZDNmZj4gPGQzMDA+XG48ZDQwMD4gPGQ0ZmY+IDxkNDAwPlxuPGQ1MDA+IDxkNWZmPiA8ZDUwMD5cbjxkNjAwPiA8ZDZmZj4gPGQ2MDA+XG48ZDcwMD4gPGQ3ZmY+IDxkNzAwPlxuPGQ4MDA+IDxkOGZmPiA8ZDgwMD5cbjxkOTAwPiA8ZDlmZj4gPGQ5MDA+XG48ZGEwMD4gPGRhZmY+IDxkYTAwPlxuPGRiMDA+IDxkYmZmPiA8ZGIwMD5cbjxkYzAwPiA8ZGNmZj4gPGRjMDA+XG48ZGQwMD4gPGRkZmY+IDxkZDAwPlxuPGRlMDA+IDxkZWZmPiA8ZGUwMD5cbjxkZjAwPiA8ZGZmZj4gPGRmMDA+XG48ZTAwMD4gPGUwZmY+IDxlMDAwPlxuPGUxMDA+IDxlMWZmPiA8ZTEwMD5cbjxlMjAwPiA8ZTJmZj4gPGUyMDA+XG48ZTMwMD4gPGUzZmY+IDxlMzAwPlxuPGU0MDA+IDxlNGZmPiA8ZTQwMD5cbjxlNTAwPiA8ZTVmZj4gPGU1MDA+XG48ZTYwMD4gPGU2ZmY+IDxlNjAwPlxuPGU3MDA+IDxlN2ZmPiA8ZTcwMD5cbjxlODAwPiA8ZThmZj4gPGU4MDA+XG48ZTkwMD4gPGU5ZmY+IDxlOTAwPlxuPGVhMDA+IDxlYWZmPiA8ZWEwMD5cbjxlYjAwPiA8ZWJmZj4gPGViMDA+XG48ZWMwMD4gPGVjZmY+IDxlYzAwPlxuPGVkMDA+IDxlZGZmPiA8ZWQwMD5cbjxlZTAwPiA8ZWVmZj4gPGVlMDA+XG48ZWYwMD4gPGVmZmY+IDxlZjAwPlxuPGYwMDA+IDxmMGZmPiA8ZjAwMD5cbjxmMTAwPiA8ZjFmZj4gPGYxMDA+XG48ZjIwMD4gPGYyZmY+IDxmMjAwPlxuPGYzMDA+IDxmM2ZmPiA8ZjMwMD5cbjxmNDAwPiA8ZjRmZj4gPGY0MDA+XG48ZjUwMD4gPGY1ZmY+IDxmNTAwPlxuPGY2MDA+IDxmNmZmPiA8ZjYwMD5cbjxmNzAwPiA8ZjdmZj4gPGY3MDA+XG48ZjgwMD4gPGY4ZmY+IDxmODAwPlxuPGY5MDA+IDxmOWZmPiA8ZjkwMD5cbjxmYTAwPiA8ZmFmZj4gPGZhMDA+XG48ZmIwMD4gPGZiZmY+IDxmYjAwPlxuPGZjMDA+IDxmY2ZmPiA8ZmMwMD5cbjxmZDAwPiA8ZmRmZj4gPGZkMDA+XG48ZmUwMD4gPGZlZmY+IDxmZTAwPlxuPGZmMDA+IDxmZmZmPiA8ZmYwMD5cbmVuZGJmcmFuZ2VcbmVuZGNtYXBcbkNNYXBOYW1lIGN1cnJlbnRkaWN0IC9DTWFwIGRlZmluZXJlc291cmNlIHBvcFxuZW5kXG5lbmQiOwoKfSAvLyBFTkQgT0YgVENQREZfRk9OVF9EQVRBIENMQVNTCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_images.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfaW1hZ2VzLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDMKLy8gQmVnaW4gICAgICAgOiAyMDAyLTA4LTAzCi8vIExhc3QgVXBkYXRlIDogMjAxNC0wNC0wMwovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAwMi0yMDE0IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gSWYgbm90LCBzZWUKLy8gPGh0dHA6Ly93d3cudGVjbmljay5jb20vcGFnZWZpbGVzL3RjcGRmL0xJQ0VOU0UuVFhUPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRGVzY3JpcHRpb24gOgovLyAgIFN0YXRpYyBpbWFnZSBtZXRob2RzIHVzZWQgYnkgdGhlIFRDUERGIGNsYXNzLgovLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBAZmlsZQogKiBUaGlzIGlzIGEgUEhQIGNsYXNzIHRoYXQgY29udGFpbnMgc3RhdGljIGltYWdlIG1ldGhvZHMgZm9yIHRoZSBUQ1BERiBjbGFzcy48YnI+CiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMDMKICovCgovKioKICogQGNsYXNzIFRDUERGX0lNQUdFUwogKiBTdGF0aWMgaW1hZ2UgbWV0aG9kcyB1c2VkIGJ5IHRoZSBUQ1BERiBjbGFzcy4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGJyaWVmIFBIUCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBQREYgZG9jdW1lbnRzIHdpdGhvdXQgcmVxdWlyaW5nIGV4dGVybmFsIGV4dGVuc2lvbnMuCiAqIEB2ZXJzaW9uIDEuMC4wMDMKICogQGF1dGhvciBOaWNvbGEgQXN1bmkgLSBpbmZvQHRlY25pY2suY29tCiAqLwpjbGFzcyBUQ1BERl9JTUFHRVMgewoKCS8qKgoJICogQXJyYXkgb2YgaGluaGVyaXRhYmxlIFNWRyBwcm9wZXJ0aWVzLgoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDUtMDIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljICRzdmdpbmhlcml0cHJvcCA9IGFycmF5KCdjbGlwLXJ1bGUnLCAnY29sb3InLCAnY29sb3ItaW50ZXJwb2xhdGlvbicsICdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnLCAnY29sb3ItcHJvZmlsZScsICdjb2xvci1yZW5kZXJpbmcnLCAnY3Vyc29yJywgJ2RpcmVjdGlvbicsICdmaWxsJywgJ2ZpbGwtb3BhY2l0eScsICdmaWxsLXJ1bGUnLCAnZm9udCcsICdmb250LWZhbWlseScsICdmb250LXNpemUnLCAnZm9udC1zaXplLWFkanVzdCcsICdmb250LXN0cmV0Y2gnLCAnZm9udC1zdHlsZScsICdmb250LXZhcmlhbnQnLCAnZm9udC13ZWlnaHQnLCAnZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCcsICdnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCcsICdpbWFnZS1yZW5kZXJpbmcnLCAna2VybmluZycsICdsZXR0ZXItc3BhY2luZycsICdtYXJrZXInLCAnbWFya2VyLWVuZCcsICdtYXJrZXItbWlkJywgJ21hcmtlci1zdGFydCcsICdwb2ludGVyLWV2ZW50cycsICdzaGFwZS1yZW5kZXJpbmcnLCAnc3Ryb2tlJywgJ3N0cm9rZS1kYXNoYXJyYXknLCAnc3Ryb2tlLWRhc2hvZmZzZXQnLCAnc3Ryb2tlLWxpbmVjYXAnLCAnc3Ryb2tlLWxpbmVqb2luJywgJ3N0cm9rZS1taXRlcmxpbWl0JywgJ3N0cm9rZS1vcGFjaXR5JywgJ3N0cm9rZS13aWR0aCcsICd0ZXh0LWFuY2hvcicsICd0ZXh0LXJlbmRlcmluZycsICd2aXNpYmlsaXR5JywgJ3dvcmQtc3BhY2luZycsICd3cml0aW5nLW1vZGUnKTsKCi8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoKCS8qKgoJICogUmV0dXJuIHRoZSBpbWFnZSB0eXBlIGdpdmVuIHRoZSBmaWxlIG5hbWUgb3IgYXJyYXkgcmV0dXJuZWQgYnkgZ2V0aW1hZ2VzaXplKCkgZnVuY3Rpb24uCgkgKiBAcGFyYW0gJGltZ2ZpbGUgKHN0cmluZykgaW1hZ2UgZmlsZSBuYW1lCgkgKiBAcGFyYW0gJGltaW5mbyAoYXJyYXkpIGFycmF5IG9mIGltYWdlIGluZm9ybWF0aW9uIHJldHVybmVkIGJ5IGdldGltYWdlc2l6ZSgpIGZ1bmN0aW9uLgoJICogQHJldHVybiBzdHJpbmcgaW1hZ2UgdHlwZQoJICogQHNpbmNlIDQuOC4wMTcgKDIwMDktMTEtMjcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEltYWdlRmlsZVR5cGUoJGltZ2ZpbGUsICRpbWluZm89YXJyYXkoKSkgewoJCSR0eXBlID0gJyc7CgkJaWYgKGlzc2V0KCRpbWluZm9bJ21pbWUnXSkgQU5EICFlbXB0eSgkaW1pbmZvWydtaW1lJ10pKSB7CgkJCSRtaW1lID0gZXhwbG9kZSgnLycsICRpbWluZm9bJ21pbWUnXSk7CgkJCWlmICgoY291bnQoJG1pbWUpID4gMSkgQU5EICgkbWltZVswXSA9PSAnaW1hZ2UnKSBBTkQgKCFlbXB0eSgkbWltZVsxXSkpKSB7CgkJCQkkdHlwZSA9IHN0cnRvbG93ZXIodHJpbSgkbWltZVsxXSkpOwoJCQl9CgkJfQoJCWlmIChlbXB0eSgkdHlwZSkpIHsKCQkJJGZpbGVpbmZvID0gcGF0aGluZm8oJGltZ2ZpbGUpOwoJCQlpZiAoaXNzZXQoJGZpbGVpbmZvWydleHRlbnNpb24nXSkgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZpbGVpbmZvWydleHRlbnNpb24nXSkpKSB7CgkJCQkkdHlwZSA9IHN0cnRvbG93ZXIodHJpbSgkZmlsZWluZm9bJ2V4dGVuc2lvbiddKSk7CgkJCX0KCQl9CgkJaWYgKCR0eXBlID09ICdqcGcnKSB7CgkJCSR0eXBlID0gJ2pwZWcnOwoJCX0KCQlyZXR1cm4gJHR5cGU7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHRyYW5zcGFyZW5jeSBmb3IgdGhlIGdpdmVuIEdEIGltYWdlLgoJICogQHBhcmFtICRuZXdfaW1hZ2UgKGltYWdlKSBHRCBpbWFnZSBvYmplY3QKCSAqIEBwYXJhbSAkaW1hZ2UgKGltYWdlKSBHRCBpbWFnZSBvYmplY3QuCgkgKiByZXR1cm4gR0QgaW1hZ2Ugb2JqZWN0LgoJICogQHNpbmNlIDQuOS4wMTYgKDIwMTAtMDQtMjApCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldEdESW1hZ2VUcmFuc3BhcmVuY3koJG5ld19pbWFnZSwgJGltYWdlKSB7CgkJLy8gdHJhbnNwYXJlbmN5IGluZGV4CgkJJHRpZCA9IGltYWdlY29sb3J0cmFuc3BhcmVudCgkaW1hZ2UpOwoJCS8vIGRlZmF1bHQgdHJhbnNwYXJlbmN5IGNvbG9yCgkJJHRjb2wgPSBhcnJheSgncmVkJyA9PiAyNTUsICdncmVlbicgPT4gMjU1LCAnYmx1ZScgPT4gMjU1KTsKCQlpZiAoJHRpZCA+PSAwKSB7CgkJCS8vIGdldCB0aGUgY29sb3JzIGZvciB0aGUgdHJhbnNwYXJlbmN5IGluZGV4CgkJCSR0Y29sID0gaW1hZ2Vjb2xvcnNmb3JpbmRleCgkaW1hZ2UsICR0aWQpOwoJCX0KCQkkdGlkID0gaW1hZ2Vjb2xvcmFsbG9jYXRlKCRuZXdfaW1hZ2UsICR0Y29sWydyZWQnXSwgJHRjb2xbJ2dyZWVuJ10sICR0Y29sWydibHVlJ10pOwoJCWltYWdlZmlsbCgkbmV3X2ltYWdlLCAwLCAwLCAkdGlkKTsKCQlpbWFnZWNvbG9ydHJhbnNwYXJlbnQoJG5ld19pbWFnZSwgJHRpZCk7CgkJcmV0dXJuICRuZXdfaW1hZ2U7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IHRoZSBsb2FkZWQgaW1hZ2UgdG8gYSBQTkcgYW5kIHRoZW4gcmV0dXJuIGEgc3RydWN0dXJlIGZvciB0aGUgUERGIGNyZWF0b3IuCgkgKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIEdEIGxpYnJhcnkgYW5kIHdyaXRlIGFjY2VzcyB0byB0aGUgZGlyZWN0b3J5IGRlZmluZWQgb24gS19QQVRIX0NBQ0hFIGNvbnN0YW50LgoJICogQHBhcmFtICRpbWFnZSAoaW1hZ2UpIEltYWdlIG9iamVjdC4KCSAqIHJldHVybiBpbWFnZSBQTkcgaW1hZ2Ugb2JqZWN0LgoJICogQHNpbmNlIDQuOS4wMTYgKDIwMTAtMDQtMjApCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF90b1BORygkaW1hZ2UpIHsKCQkvLyBzZXQgdGVtcG9yYXJ5IGltYWdlIGZpbGUgbmFtZQoJCSR0ZW1wbmFtZSA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2ltZycpOwoJCS8vIHR1cm4gb2ZmIGludGVybGFjZWQgbW9kZQoJCWltYWdlaW50ZXJsYWNlKCRpbWFnZSwgMCk7CgkJLy8gY3JlYXRlIHRlbXBvcmFyeSBQTkcgaW1hZ2UKCQlpbWFnZXBuZygkaW1hZ2UsICR0ZW1wbmFtZSk7CgkJLy8gcmVtb3ZlIGltYWdlIGZyb20gbWVtb3J5CgkJaW1hZ2VkZXN0cm95KCRpbWFnZSk7CgkJLy8gZ2V0IFBORyBpbWFnZSBkYXRhCgkJJHJldHZhcnMgPSBzZWxmOjpfcGFyc2VwbmcoJHRlbXBuYW1lKTsKCQkvLyB0aWR5IHVwIGJ5IHJlbW92aW5nIHRlbXBvcmFyeSBpbWFnZQoJCXVubGluaygkdGVtcG5hbWUpOwoJCXJldHVybiAkcmV0dmFyczsKCX0KCgkvKioKCSAqIENvbnZlcnQgdGhlIGxvYWRlZCBpbWFnZSB0byBhIEpQRUcgYW5kIHRoZW4gcmV0dXJuIGEgc3RydWN0dXJlIGZvciB0aGUgUERGIGNyZWF0b3IuCgkgKiBUaGlzIGZ1bmN0aW9uIHJlcXVpcmVzIEdEIGxpYnJhcnkgYW5kIHdyaXRlIGFjY2VzcyB0byB0aGUgZGlyZWN0b3J5IGRlZmluZWQgb24gS19QQVRIX0NBQ0hFIGNvbnN0YW50LgoJICogQHBhcmFtICRpbWFnZSAoaW1hZ2UpIEltYWdlIG9iamVjdC4KCSAqIEBwYXJhbSAkcXVhbGl0eSAoaW50KSBKUEVHIHF1YWxpdHkuCgkgKiByZXR1cm4gaW1hZ2UgSlBFRyBpbWFnZSBvYmplY3QuCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF90b0pQRUcoJGltYWdlLCAkcXVhbGl0eSkgewoJCSR0ZW1wbmFtZSA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2ltZycpOwoJCWltYWdlanBlZygkaW1hZ2UsICR0ZW1wbmFtZSwgJHF1YWxpdHkpOwoJCWltYWdlZGVzdHJveSgkaW1hZ2UpOwoJCSRyZXR2YXJzID0gc2VsZjo6X3BhcnNlanBlZygkdGVtcG5hbWUpOwoJCS8vIHRpZHkgdXAgYnkgcmVtb3ZpbmcgdGVtcG9yYXJ5IGltYWdlCgkJdW5saW5rKCR0ZW1wbmFtZSk7CgkJcmV0dXJuICRyZXR2YXJzOwoJfQoKCS8qKgoJICogRXh0cmFjdCBpbmZvIGZyb20gYSBKUEVHIGZpbGUgd2l0aG91dCB1c2luZyB0aGUgR0QgbGlicmFyeS4KCSAqIEBwYXJhbSAkZmlsZSAoc3RyaW5nKSBpbWFnZSBmaWxlIHRvIHBhcnNlCgkgKiBAcmV0dXJuIGFycmF5IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbWFnZSBkYXRhCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9wYXJzZWpwZWcoJGZpbGUpIHsKCQkkYSA9IGdldGltYWdlc2l6ZSgkZmlsZSk7CgkJaWYgKGVtcHR5KCRhKSkgewoJCQkvL01pc3Npbmcgb3IgaW5jb3JyZWN0IGltYWdlIGZpbGUKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAoJGFbMl0gIT0gMikgewoJCQkvLyBOb3QgYSBKUEVHIGZpbGUKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBiaXRzIHBlciBwaXhlbAoJCSRicGMgPSBpc3NldCgkYVsnYml0cyddKSA/IGludHZhbCgkYVsnYml0cyddKSA6IDg7CgkJLy8gbnVtYmVyIG9mIGltYWdlIGNoYW5uZWxzCgkJaWYgKCFpc3NldCgkYVsnY2hhbm5lbHMnXSkpIHsKCQkJJGNoYW5uZWxzID0gMzsKCQl9IGVsc2UgewoJCQkkY2hhbm5lbHMgPSBpbnR2YWwoJGFbJ2NoYW5uZWxzJ10pOwoJCX0KCQkvLyBkZWZhdWx0IGNvbG91ciBzcGFjZQoJCXN3aXRjaCAoJGNoYW5uZWxzKSB7CgkJCWNhc2UgMTogewoJCQkJJGNvbHNwYWNlID0gJ0RldmljZUdyYXknOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAzOiB7CgkJCQkkY29sc3BhY2UgPSAnRGV2aWNlUkdCJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgNDogewoJCQkJJGNvbHNwYWNlID0gJ0RldmljZUNNWUsnOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJGNoYW5uZWxzID0gMzsKCQkJCSRjb2xzcGFjZSA9ICdEZXZpY2VSR0InOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJLy8gZ2V0IGZpbGUgY29udGVudAoJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwoJCS8vIGNoZWNrIGZvciBlbWJlZGRlZCBJQ0MgcHJvZmlsZQoJCSRpY2MgPSBhcnJheSgpOwoJCSRvZmZzZXQgPSAwOwoJCXdoaWxlICgoJHBvcyA9IHN0cnBvcygkZGF0YSwgIklDQ19QUk9GSUxFXDAiLCAkb2Zmc2V0KSkgIT09IGZhbHNlKSB7CgkJCS8vIGdldCBJQ0Mgc2VxdWVuY2UgbGVuZ3RoCgkJCSRsZW5ndGggPSAoVENQREZfU1RBVElDOjpfZ2V0VVNIT1JUKCRkYXRhLCAoJHBvcyAtIDIpKSAtIDE2KTsKCQkJLy8gbWFya2VyIHNlcXVlbmNlIG51bWJlcgoJCQkkbXNuID0gbWF4KDEsIG9yZCgkZGF0YVsoJHBvcyArIDEyKV0pKTsKCQkJLy8gbnVtYmVyIG9mIG1hcmtlcnMgKHRvdGFsIG9mIEFQUDIgdXNlZCkKCQkJJG5vbSA9IG1heCgxLCBvcmQoJGRhdGFbKCRwb3MgKyAxMyldKSk7CgkJCS8vIGdldCBzZXF1ZW5jZSBzZWdtZW50CgkJCSRpY2NbKCRtc24gLSAxKV0gPSBzdWJzdHIoJGRhdGEsICgkcG9zICsgMTQpLCAkbGVuZ3RoKTsKCQkJLy8gbW92ZSBmb3J3YXJkIHRvIG5leHQgc2VxdWVuY2UKCQkJJG9mZnNldCA9ICgkcG9zICsgMTQgKyAkbGVuZ3RoKTsKCQl9CgkJLy8gb3JkZXIgYW5kIGNvbXBhY3QgSUNDIHNlZ21lbnRzCgkJaWYgKGNvdW50KCRpY2MpID4gMCkgewoJCQlrc29ydCgkaWNjKTsKCQkJJGljYyA9IGltcGxvZGUoJycsICRpY2MpOwoJCQlpZiAoKG9yZCgkaWNjezM2fSkgIT0gMHg2MSkgT1IgKG9yZCgkaWNjezM3fSkgIT0gMHg2MykgT1IgKG9yZCgkaWNjezM4fSkgIT0gMHg3MykgT1IgKG9yZCgkaWNjezM5fSkgIT0gMHg3MCkpIHsKCQkJCS8vIGludmFsaWQgSUNDIHByb2ZpbGUKCQkJCSRpY2MgPSBmYWxzZTsKCQkJfQoJCX0gZWxzZSB7CgkJCSRpY2MgPSBmYWxzZTsKCQl9CgkJcmV0dXJuIGFycmF5KCd3JyA9PiAkYVswXSwgJ2gnID0+ICRhWzFdLCAnY2gnID0+ICRjaGFubmVscywgJ2ljYycgPT4gJGljYywgJ2NzJyA9PiAkY29sc3BhY2UsICdicGMnID0+ICRicGMsICdmJyA9PiAnRENURGVjb2RlJywgJ2RhdGEnID0+ICRkYXRhKTsKCX0KCgkvKioKCSAqIEV4dHJhY3QgaW5mbyBmcm9tIGEgUE5HIGZpbGUgd2l0aG91dCB1c2luZyB0aGUgR0QgbGlicmFyeS4KCSAqIEBwYXJhbSAkZmlsZSAoc3RyaW5nKSBpbWFnZSBmaWxlIHRvIHBhcnNlCgkgKiBAcmV0dXJuIGFycmF5IHN0cnVjdHVyZSBjb250YWluaW5nIHRoZSBpbWFnZSBkYXRhCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9wYXJzZXBuZygkZmlsZSkgewoJCSRmID0gQGZvcGVuKCRmaWxlLCAncmInKTsKCQlpZiAoJGYgPT09IGZhbHNlKSB7CgkJCS8vIENhbid0IG9wZW4gaW1hZ2UgZmlsZQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCS8vQ2hlY2sgc2lnbmF0dXJlCgkJaWYgKGZyZWFkKCRmLCA4KSAhPSBjaHIoMTM3KS4nUE5HJy5jaHIoMTMpLmNocigxMCkuY2hyKDI2KS5jaHIoMTApKSB7CgkJCS8vIE5vdCBhIFBORyBmaWxlCgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy9SZWFkIGhlYWRlciBjaHVuawoJCWZyZWFkKCRmLCA0KTsKCQlpZiAoZnJlYWQoJGYsIDQpICE9ICdJSERSJykgewoJCQkvL0luY29ycmVjdCBQTkcgZmlsZQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSR3ID0gVENQREZfU1RBVElDOjpfZnJlYWRpbnQoJGYpOwoJCSRoID0gVENQREZfU1RBVElDOjpfZnJlYWRpbnQoJGYpOwoJCSRicGMgPSBvcmQoZnJlYWQoJGYsIDEpKTsKCQkkY3QgPSBvcmQoZnJlYWQoJGYsIDEpKTsKCQlpZiAoJGN0ID09IDApIHsKCQkJJGNvbHNwYWNlID0gJ0RldmljZUdyYXknOwoJCX0gZWxzZWlmICgkY3QgPT0gMikgewoJCQkkY29sc3BhY2UgPSAnRGV2aWNlUkdCJzsKCQl9IGVsc2VpZiAoJGN0ID09IDMpIHsKCQkJJGNvbHNwYWNlID0gJ0luZGV4ZWQnOwoJCX0gZWxzZSB7CgkJCS8vIGFscGhhIGNoYW5uZWwKCQkJZmNsb3NlKCRmKTsKCQkJcmV0dXJuICdwbmdhbHBoYSc7CgkJfQoJCWlmIChvcmQoZnJlYWQoJGYsIDEpKSAhPSAwKSB7CgkJCS8vIFVua25vd24gY29tcHJlc3Npb24gbWV0aG9kCgkJCWZjbG9zZSgkZik7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYgKG9yZChmcmVhZCgkZiwgMSkpICE9IDApIHsKCQkJLy8gVW5rbm93biBmaWx0ZXIgbWV0aG9kCgkJCWZjbG9zZSgkZik7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJaWYgKG9yZChmcmVhZCgkZiwgMSkpICE9IDApIHsKCQkJLy8gSW50ZXJsYWNpbmcgbm90IHN1cHBvcnRlZAoJCQlmY2xvc2UoJGYpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZyZWFkKCRmLCA0KTsKCQkkY2hhbm5lbHMgPSAoJGN0ID09IDIgPyAzIDogMSk7CgkJJHBhcm1zID0gJy9EZWNvZGVQYXJtcyA8PCAvUHJlZGljdG9yIDE1IC9Db2xvcnMgJy4kY2hhbm5lbHMuJyAvQml0c1BlckNvbXBvbmVudCAnLiRicGMuJyAvQ29sdW1ucyAnLiR3LicgPj4nOwoJCS8vU2NhbiBjaHVua3MgbG9va2luZyBmb3IgcGFsZXR0ZSwgdHJhbnNwYXJlbmN5IGFuZCBpbWFnZSBkYXRhCgkJJHBhbCA9ICcnOwoJCSR0cm5zID0gJyc7CgkJJGRhdGEgPSAnJzsKCQkkaWNjID0gZmFsc2U7CgkJZG8gewoJCQkkbiA9IFRDUERGX1NUQVRJQzo6X2ZyZWFkaW50KCRmKTsKCQkJJHR5cGUgPSBmcmVhZCgkZiwgNCk7CgkJCWlmICgkdHlwZSA9PSAnUExURScpIHsKCQkJCS8vIHJlYWQgcGFsZXR0ZQoJCQkJJHBhbCA9IFRDUERGX1NUQVRJQzo6cmZyZWFkKCRmLCAkbik7CgkJCQlmcmVhZCgkZiwgNCk7CgkJCX0gZWxzZWlmICgkdHlwZSA9PSAndFJOUycpIHsKCQkJCS8vIHJlYWQgdHJhbnNwYXJlbmN5IGluZm8KCQkJCSR0ID0gVENQREZfU1RBVElDOjpyZnJlYWQoJGYsICRuKTsKCQkJCWlmICgkY3QgPT0gMCkgeyAvLyBEZXZpY2VHcmF5CgkJCQkJJHRybnMgPSBhcnJheShvcmQoJHR7MX0pKTsKCQkJCX0gZWxzZWlmICgkY3QgPT0gMikgeyAvLyBEZXZpY2VSR0IKCQkJCQkkdHJucyA9IGFycmF5KG9yZCgkdHsxfSksIG9yZCgkdHszfSksIG9yZCgkdHs1fSkpOwoJCQkJfSBlbHNlIHsgLy8gSW5kZXhlZAoJCQkJCWlmICgkbiA+IDApIHsKCQkJCQkJJHRybnMgPSBhcnJheSgpOwoJCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAkbjsgKysgJGkpIHsKCQkJCQkJCSR0cm5zW10gPSBvcmQoJHR7JGl9KTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWZyZWFkKCRmLCA0KTsKCQkJfSBlbHNlaWYgKCR0eXBlID09ICdJREFUJykgewoJCQkJLy8gcmVhZCBpbWFnZSBkYXRhIGJsb2NrCgkJCQkkZGF0YSAuPSBUQ1BERl9TVEFUSUM6OnJmcmVhZCgkZiwgJG4pOwoJCQkJZnJlYWQoJGYsIDQpOwoJCQl9IGVsc2VpZiAoJHR5cGUgPT0gJ2lDQ1AnKSB7CgkJCQkvLyBza2lwIHByb2ZpbGUgbmFtZQoJCQkJJGxlbiA9IDA7CgkJCQl3aGlsZSAoKG9yZChmcmVhZCgkZiwgMSkpID4gMCkgQU5EICgkbGVuIDwgODApKSB7CgkJCQkJKyskbGVuOwoJCQkJfQoJCQkJLy8gc2tpcCBudWxsIHNlcGFyYXRvcgoJCQkJZnJlYWQoJGYsIDEpOwoJCQkJLy8gZ2V0IGNvbXByZXNzaW9uIG1ldGhvZAoJCQkJaWYgKG9yZChmcmVhZCgkZiwgMSkpICE9IDApIHsKCQkJCQkvLyBVbmtub3duIGZpbHRlciBtZXRob2QKCQkJCQlmY2xvc2UoJGYpOwoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJCS8vIHJlYWQgSUNDIENvbG9yIFByb2ZpbGUKCQkJCSRpY2MgPSBUQ1BERl9TVEFUSUM6OnJmcmVhZCgkZiwgKCRuIC0gJGxlbiAtIDIpKTsKCQkJCS8vIGRlY29tcHJlc3MgcHJvZmlsZQoJCQkJJGljYyA9IGd6dW5jb21wcmVzcygkaWNjKTsKCQkJCWZyZWFkKCRmLCA0KTsKCQkJfSBlbHNlaWYgKCR0eXBlID09ICdJRU5EJykgewoJCQkJYnJlYWs7CgkJCX0gZWxzZSB7CgkJCQlUQ1BERl9TVEFUSUM6OnJmcmVhZCgkZiwgJG4gKyA0KTsKCQkJfQoJCX0gd2hpbGUgKCRuKTsKCQlpZiAoKCRjb2xzcGFjZSA9PSAnSW5kZXhlZCcpIEFORCAoZW1wdHkoJHBhbCkpKSB7CgkJCS8vIE1pc3NpbmcgcGFsZXR0ZQoJCQlmY2xvc2UoJGYpOwoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWZjbG9zZSgkZik7CgkJcmV0dXJuIGFycmF5KCd3JyA9PiAkdywgJ2gnID0+ICRoLCAnY2gnID0+ICRjaGFubmVscywgJ2ljYycgPT4gJGljYywgJ2NzJyA9PiAkY29sc3BhY2UsICdicGMnID0+ICRicGMsICdmJyA9PiAnRmxhdGVEZWNvZGUnLCAncGFybXMnID0+ICRwYXJtcywgJ3BhbCcgPT4gJHBhbCwgJ3RybnMnID0+ICR0cm5zLCAnZGF0YScgPT4gJGRhdGEpOwoJfQoKfSAvLyBFTkQgT0YgVENQREZfSU1BR0VTIENMQVNTCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/include/tcpdf_static.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfc3RhdGljLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDIKLy8gQmVnaW4gICAgICAgOiAyMDAyLTA4LTAzCi8vIExhc3QgVXBkYXRlIDogMjAxNC0wNC0yNQovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAwMi0yMDEzIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gSWYgbm90LCBzZWUKLy8gPGh0dHA6Ly93d3cudGVjbmljay5jb20vcGFnZWZpbGVzL3RjcGRmL0xJQ0VOU0UuVFhUPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRGVzY3JpcHRpb24gOgovLyAgIFN0YXRpYyBtZXRob2RzIHVzZWQgYnkgdGhlIFRDUERGIGNsYXNzLgovLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBAZmlsZQogKiBUaGlzIGlzIGEgUEhQIGNsYXNzIHRoYXQgY29udGFpbnMgc3RhdGljIG1ldGhvZHMgZm9yIHRoZSBUQ1BERiBjbGFzcy48YnI+CiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMDIKICovCgovKioKICogQGNsYXNzIFRDUERGX1NUQVRJQwogKiBTdGF0aWMgbWV0aG9kcyB1c2VkIGJ5IHRoZSBUQ1BERiBjbGFzcy4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGJyaWVmIFBIUCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBQREYgZG9jdW1lbnRzIHdpdGhvdXQgcmVxdWlyaW5nIGV4dGVybmFsIGV4dGVuc2lvbnMuCiAqIEB2ZXJzaW9uIDEuMC4wMDIKICogQGF1dGhvciBOaWNvbGEgQXN1bmkgLSBpbmZvQHRlY25pY2suY29tCiAqLwpjbGFzcyBUQ1BERl9TVEFUSUMgewoKCS8qKgoJICogQ3VycmVudCBUQ1BERiB2ZXJzaW9uLgoJICogQHByaXZhdGUgc3RhdGljCgkgKi8KCXByaXZhdGUgc3RhdGljICR0Y3BkZl92ZXJzaW9uID0gJzYuMC4wNzEnOwoKCS8qKgoJICogU3RyaW5nIGFsaWFzIGZvciB0b3RhbCBudW1iZXIgb2YgcGFnZXMuCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljICRhbGlhc190b3RfcGFnZXMgPSAnezpwdHA6fSc7CgoJLyoqCgkgKiBTdHJpbmcgYWxpYXMgZm9yIHBhZ2UgbnVtYmVyLgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyAkYWxpYXNfbnVtX3BhZ2UgPSAnezpwbnA6fSc7CgoJLyoqCgkgKiBTdHJpbmcgYWxpYXMgZm9yIHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiBhIHNpbmdsZSBncm91cC4KCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgJGFsaWFzX2dyb3VwX3RvdF9wYWdlcyA9ICd7OnB0Zzp9JzsKCgkvKioKCSAqIFN0cmluZyBhbGlhcyBmb3IgZ3JvdXAgcGFnZSBudW1iZXIuCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljICRhbGlhc19ncm91cF9udW1fcGFnZSA9ICd7OnBuZzp9JzsKCgkvKioKCSAqIFN0cmluZyBhbGlhcyBmb3IgcmlnaHQgc2hpZnQgY29tcGVuc2F0aW9uIHVzZWQgdG8gY29ycmVjdGx5IGFsaWduIHBhZ2UgbnVtYmVycyBvbiB0aGUgcmlnaHQuCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljICRhbGlhc19yaWdodF9zaGlmdCA9ICd7cnNjOic7CgoJLyoqCgkgKiBFbmNyeXB0aW9uIHBhZGRpbmcgc3RyaW5nLgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyAkZW5jX3BhZGRpbmcgPSAiXHgyOFx4QkZceDRFXHg1RVx4NEVceDc1XHg4QVx4NDFceDY0XHgwMFx4NEVceDU2XHhGRlx4RkFceDAxXHgwOFx4MkVceDJFXHgwMFx4QjZceEQwXHg2OFx4M0VceDgwXHgyRlx4MENceEE5XHhGRVx4NjRceDUzXHg2OVx4N0EiOwoKCS8qKgoJICogQnl0ZVJhbmdlIHBsYWNlbWFyayB1c2VkIGR1cmluZyBkaWdpdGFsIHNpZ25hdHVyZSBwcm9jZXNzLgoJICogQHNpbmNlIDQuNi4wMjggKDIwMDktMDgtMjUpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljICRieXRlcmFuZ2Vfc3RyaW5nID0gJy9CeXRlUmFuZ2VbMCAqKioqKioqKioqICoqKioqKioqKiogKioqKioqKioqKl0nOwoKCS8qKgoJICogQXJyYXkgcGFnZSBib3hlcyBuYW1lcwoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyAkcGFnZWJveGVzID0gYXJyYXkoJ01lZGlhQm94JywgJ0Nyb3BCb3gnLCAnQmxlZWRCb3gnLCAnVHJpbUJveCcsICdBcnRCb3gnKTsKCgkvLyAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgoJLyoqCgkgKiBSZXR1cm4gdGhlIGN1cnJlbnQgVENQREYgdmVyc2lvbi4KCSAqIEByZXR1cm4gVENQREYgdmVyc2lvbiBzdHJpbmcKCSAqIEBzaW5jZSA1LjkuMDEyICgyMDEwLTExLTEwKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUQ1BERlZlcnNpb24oKSB7CgkJcmV0dXJuIHNlbGY6OiR0Y3BkZl92ZXJzaW9uOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBjdXJyZW50IFRDUERGIHByb2R1Y2VyLgoJICogQHJldHVybiBUQ1BERiBwcm9kdWNlciBzdHJpbmcKCSAqIEBzaW5jZSA2LjAuMDAwICgyMDEzLTAzLTE2KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUQ1BERlByb2R1Y2VyKCkgewoJCXJldHVybiAiXHg1NFx4NDNceDUwXHg0NFx4NDZceDIwIi5zZWxmOjpnZXRUQ1BERlZlcnNpb24oKS4iXHgyMFx4MjhceDY4XHg3NFx4NzRceDcwXHgzYVx4MmZceDJmXHg3N1x4NzdceDc3XHgyZVx4NzRceDYzXHg3MFx4NjRceDY2XHgyZVx4NmZceDcyXHg2N1x4MjkiOwoJfQoKCS8qKgoJICogU2V0cyB0aGUgY3VycmVudCBhY3RpdmUgY29uZmlndXJhdGlvbiBzZXR0aW5nIG9mIG1hZ2ljX3F1b3Rlc19ydW50aW1lIChpZiB0aGUgc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lIGZ1bmN0aW9uIGV4aXN0KQoJICogQHBhcmFtICRtcXIgKGJvb2xlYW4pIEZBTFNFIGZvciBvZmYsIFRSVUUgZm9yIG9uLgoJICogQHNpbmNlIDQuNi4wMjUgKDIwMDktMDgtMTcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNldF9tcXIoJG1xcikgewoJCWlmICghZGVmaW5lZCgnUEhQX1ZFUlNJT05fSUQnKSkgewoJCQkkdmVyc2lvbiA9IFBIUF9WRVJTSU9OOwoJCQlkZWZpbmUoJ1BIUF9WRVJTSU9OX0lEJywgKCgkdmVyc2lvblswXSAqIDEwMDAwKSArICgkdmVyc2lvbnsyfSAqIDEwMCkgKyAkdmVyc2lvbns0fSkpOwoJCX0KCQlpZiAoUEhQX1ZFUlNJT05fSUQgPCA1MDMwMCkgewoJCQlAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKCRtcXIpOwoJCX0KCX0KCgkvKioKCSAqIEdldHMgdGhlIGN1cnJlbnQgYWN0aXZlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBvZiBtYWdpY19xdW90ZXNfcnVudGltZSAoaWYgdGhlIGdldF9tYWdpY19xdW90ZXNfcnVudGltZSBmdW5jdGlvbiBleGlzdCkKCSAqIEByZXR1cm4gUmV0dXJucyAwIGlmIG1hZ2ljIHF1b3RlcyBydW50aW1lIGlzIG9mZiBvciBnZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUgZG9lc24ndCBleGlzdCwgMSBvdGhlcndpc2UuCgkgKiBAc2luY2UgNC42LjAyNSAoMjAwOS0wOC0xNykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0X21xcigpIHsKCQlpZiAoIWRlZmluZWQoJ1BIUF9WRVJTSU9OX0lEJykpIHsKCQkJJHZlcnNpb24gPSBQSFBfVkVSU0lPTjsKCQkJZGVmaW5lKCdQSFBfVkVSU0lPTl9JRCcsICgoJHZlcnNpb25bMF0gKiAxMDAwMCkgKyAoJHZlcnNpb257Mn0gKiAxMDApICsgJHZlcnNpb257NH0pKTsKCQl9CgkJaWYgKFBIUF9WRVJTSU9OX0lEIDwgNTAzMDApIHsKCQkJcmV0dXJuIEBnZXRfbWFnaWNfcXVvdGVzX3J1bnRpbWUoKTsKCQl9CgkJcmV0dXJuIDA7Cgl9CgoJLyoqCgkgKiBHZXQgcGFnZSBkaW1lbnNpb25zIGZyb20gZm9ybWF0IG5hbWUuCgkgKiBAcGFyYW0gJGZvcm1hdCAobWl4ZWQpIFRoZSBmb3JtYXQgbmFtZS4gSXQgY2FuIGJlOiA8dWw+CgkgKiA8bGk+PGI+SVNPIDIxNiBBIFNlcmllcyArIDIgU0lTIDAxNDcxMSBleHRlbnNpb25zPC9iPjwvbGk+CgkgKiA8bGk+QTAgKDg0MXgxMTg5IG1tIDsgMzMuMTF4NDYuODEgaW4pPC9saT4KCSAqIDxsaT5BMSAoNTk0eDg0MSBtbSA7IDIzLjM5eDMzLjExIGluKTwvbGk+CgkgKiA8bGk+QTIgKDQyMHg1OTQgbW0gOyAxNi41NHgyMy4zOSBpbik8L2xpPgoJICogPGxpPkEzICgyOTd4NDIwIG1tIDsgMTEuNjl4MTYuNTQgaW4pPC9saT4KCSAqIDxsaT5BNCAoMjEweDI5NyBtbSA7IDguMjd4MTEuNjkgaW4pPC9saT4KCSAqIDxsaT5BNSAoMTQ4eDIxMCBtbSA7IDUuODN4OC4yNyBpbik8L2xpPgoJICogPGxpPkE2ICgxMDV4MTQ4IG1tIDsgNC4xM3g1LjgzIGluKTwvbGk+CgkgKiA8bGk+QTcgKDc0eDEwNSBtbSA7IDIuOTF4NC4xMyBpbik8L2xpPgoJICogPGxpPkE4ICg1Mng3NCBtbSA7IDIuMDV4Mi45MSBpbik8L2xpPgoJICogPGxpPkE5ICgzN3g1MiBtbSA7IDEuNDZ4Mi4wNSBpbik8L2xpPgoJICogPGxpPkExMCAoMjZ4MzcgbW0gOyAxLjAyeDEuNDYgaW4pPC9saT4KCSAqIDxsaT5BMTEgKDE4eDI2IG1tIDsgMC43MXgxLjAyIGluKTwvbGk+CgkgKiA8bGk+QTEyICgxM3gxOCBtbSA7IDAuNTF4MC43MSBpbik8L2xpPgoJICogPGxpPjxiPklTTyAyMTYgQiBTZXJpZXMgKyAyIFNJUyAwMTQ3MTEgZXh0ZW5zaW9uczwvYj48L2xpPgoJICogPGxpPkIwICgxMDAweDE0MTQgbW0gOyAzOS4zN3g1NS42NyBpbik8L2xpPgoJICogPGxpPkIxICg3MDd4MTAwMCBtbSA7IDI3LjgzeDM5LjM3IGluKTwvbGk+CgkgKiA8bGk+QjIgKDUwMHg3MDcgbW0gOyAxOS42OXgyNy44MyBpbik8L2xpPgoJICogPGxpPkIzICgzNTN4NTAwIG1tIDsgMTMuOTB4MTkuNjkgaW4pPC9saT4KCSAqIDxsaT5CNCAoMjUweDM1MyBtbSA7IDkuODR4MTMuOTAgaW4pPC9saT4KCSAqIDxsaT5CNSAoMTc2eDI1MCBtbSA7IDYuOTN4OS44NCBpbik8L2xpPgoJICogPGxpPkI2ICgxMjV4MTc2IG1tIDsgNC45Mng2LjkzIGluKTwvbGk+CgkgKiA8bGk+QjcgKDg4eDEyNSBtbSA7IDMuNDZ4NC45MiBpbik8L2xpPgoJICogPGxpPkI4ICg2Mng4OCBtbSA7IDIuNDR4My40NiBpbik8L2xpPgoJICogPGxpPkI5ICg0NHg2MiBtbSA7IDEuNzN4Mi40NCBpbik8L2xpPgoJICogPGxpPkIxMCAoMzF4NDQgbW0gOyAxLjIyeDEuNzMgaW4pPC9saT4KCSAqIDxsaT5CMTEgKDIyeDMxIG1tIDsgMC44N3gxLjIyIGluKTwvbGk+CgkgKiA8bGk+QjEyICgxNXgyMiBtbSA7IDAuNTl4MC44NyBpbik8L2xpPgoJICogPGxpPjxiPklTTyAyMTYgQyBTZXJpZXMgKyAyIFNJUyAwMTQ3MTEgZXh0ZW5zaW9ucyArIDIgRVhURU5TSU9OPC9iPjwvbGk+CgkgKiA8bGk+QzAgKDkxN3gxMjk3IG1tIDsgMzYuMTB4NTEuMDYgaW4pPC9saT4KCSAqIDxsaT5DMSAoNjQ4eDkxNyBtbSA7IDI1LjUxeDM2LjEwIGluKTwvbGk+CgkgKiA8bGk+QzIgKDQ1OHg2NDggbW0gOyAxOC4wM3gyNS41MSBpbik8L2xpPgoJICogPGxpPkMzICgzMjR4NDU4IG1tIDsgMTIuNzZ4MTguMDMgaW4pPC9saT4KCSAqIDxsaT5DNCAoMjI5eDMyNCBtbSA7IDkuMDJ4MTIuNzYgaW4pPC9saT4KCSAqIDxsaT5DNSAoMTYyeDIyOSBtbSA7IDYuMzh4OS4wMiBpbik8L2xpPgoJICogPGxpPkM2ICgxMTR4MTYyIG1tIDsgNC40OXg2LjM4IGluKTwvbGk+CgkgKiA8bGk+QzcgKDgxeDExNCBtbSA7IDMuMTl4NC40OSBpbik8L2xpPgoJICogPGxpPkM4ICg1N3g4MSBtbSA7IDIuMjR4My4xOSBpbik8L2xpPgoJICogPGxpPkM5ICg0MHg1NyBtbSA7IDEuNTd4Mi4yNCBpbik8L2xpPgoJICogPGxpPkMxMCAoMjh4NDAgbW0gOyAxLjEweDEuNTcgaW4pPC9saT4KCSAqIDxsaT5DMTEgKDIweDI4IG1tIDsgMC43OXgxLjEwIGluKTwvbGk+CgkgKiA8bGk+QzEyICgxNHgyMCBtbSA7IDAuNTV4MC43OSBpbik8L2xpPgoJICogPGxpPkM3NiAoODF4MTYyIG1tIDsgMy4xOXg2LjM4IGluKTwvbGk+CgkgKiA8bGk+REwgKDExMHgyMjAgbW0gOyA0LjMzeDguNjYgaW4pPC9saT4KCSAqIDxsaT48Yj5TSVMgMDE0NzExIEUgU2VyaWVzPC9iPjwvbGk+CgkgKiA8bGk+RTAgKDg3OXgxMjQxIG1tIDsgMzQuNjF4NDguODYgaW4pPC9saT4KCSAqIDxsaT5FMSAoNjIweDg3OSBtbSA7IDI0LjQxeDM0LjYxIGluKTwvbGk+CgkgKiA8bGk+RTIgKDQ0MHg2MjAgbW0gOyAxNy4zMngyNC40MSBpbik8L2xpPgoJICogPGxpPkUzICgzMTB4NDQwIG1tIDsgMTIuMjB4MTcuMzIgaW4pPC9saT4KCSAqIDxsaT5FNCAoMjIweDMxMCBtbSA7IDguNjZ4MTIuMjAgaW4pPC9saT4KCSAqIDxsaT5FNSAoMTU1eDIyMCBtbSA7IDYuMTB4OC42NiBpbik8L2xpPgoJICogPGxpPkU2ICgxMTB4MTU1IG1tIDsgNC4zM3g2LjEwIGluKTwvbGk+CgkgKiA8bGk+RTcgKDc4eDExMCBtbSA7IDMuMDd4NC4zMyBpbik8L2xpPgoJICogPGxpPkU4ICg1NXg3OCBtbSA7IDIuMTd4My4wNyBpbik8L2xpPgoJICogPGxpPkU5ICgzOXg1NSBtbSA7IDEuNTR4Mi4xNyBpbik8L2xpPgoJICogPGxpPkUxMCAoMjd4MzkgbW0gOyAxLjA2eDEuNTQgaW4pPC9saT4KCSAqIDxsaT5FMTEgKDE5eDI3IG1tIDsgMC43NXgxLjA2IGluKTwvbGk+CgkgKiA8bGk+RTEyICgxM3gxOSBtbSA7IDAuNTF4MC43NSBpbik8L2xpPgoJICogPGxpPjxiPlNJUyAwMTQ3MTEgRyBTZXJpZXM8L2I+PC9saT4KCSAqIDxsaT5HMCAoOTU4eDEzNTQgbW0gOyAzNy43Mng1My4zMSBpbik8L2xpPgoJICogPGxpPkcxICg2Nzd4OTU4IG1tIDsgMjYuNjV4MzcuNzIgaW4pPC9saT4KCSAqIDxsaT5HMiAoNDc5eDY3NyBtbSA7IDE4Ljg2eDI2LjY1IGluKTwvbGk+CgkgKiA8bGk+RzMgKDMzOHg0NzkgbW0gOyAxMy4zMXgxOC44NiBpbik8L2xpPgoJICogPGxpPkc0ICgyMzl4MzM4IG1tIDsgOS40MXgxMy4zMSBpbik8L2xpPgoJICogPGxpPkc1ICgxNjl4MjM5IG1tIDsgNi42NXg5LjQxIGluKTwvbGk+CgkgKiA8bGk+RzYgKDExOXgxNjkgbW0gOyA0LjY5eDYuNjUgaW4pPC9saT4KCSAqIDxsaT5HNyAoODR4MTE5IG1tIDsgMy4zMXg0LjY5IGluKTwvbGk+CgkgKiA8bGk+RzggKDU5eDg0IG1tIDsgMi4zMngzLjMxIGluKTwvbGk+CgkgKiA8bGk+RzkgKDQyeDU5IG1tIDsgMS42NXgyLjMyIGluKTwvbGk+CgkgKiA8bGk+RzEwICgyOXg0MiBtbSA7IDEuMTR4MS42NSBpbik8L2xpPgoJICogPGxpPkcxMSAoMjF4MjkgbW0gOyAwLjgzeDEuMTQgaW4pPC9saT4KCSAqIDxsaT5HMTIgKDE0eDIxIG1tIDsgMC41NXgwLjgzIGluKTwvbGk+CgkgKiA8bGk+PGI+SVNPIFByZXNzPC9iPjwvbGk+CgkgKiA8bGk+UkEwICg4NjB4MTIyMCBtbSA7IDMzLjg2eDQ4LjAzIGluKTwvbGk+CgkgKiA8bGk+UkExICg2MTB4ODYwIG1tIDsgMjQuMDJ4MzMuODYgaW4pPC9saT4KCSAqIDxsaT5SQTIgKDQzMHg2MTAgbW0gOyAxNi45M3gyNC4wMiBpbik8L2xpPgoJICogPGxpPlJBMyAoMzA1eDQzMCBtbSA7IDEyLjAxeDE2LjkzIGluKTwvbGk+CgkgKiA8bGk+UkE0ICgyMTV4MzA1IG1tIDsgOC40NngxMi4wMSBpbik8L2xpPgoJICogPGxpPlNSQTAgKDkwMHgxMjgwIG1tIDsgMzUuNDN4NTAuMzkgaW4pPC9saT4KCSAqIDxsaT5TUkExICg2NDB4OTAwIG1tIDsgMjUuMjB4MzUuNDMgaW4pPC9saT4KCSAqIDxsaT5TUkEyICg0NTB4NjQwIG1tIDsgMTcuNzJ4MjUuMjAgaW4pPC9saT4KCSAqIDxsaT5TUkEzICgzMjB4NDUwIG1tIDsgMTIuNjB4MTcuNzIgaW4pPC9saT4KCSAqIDxsaT5TUkE0ICgyMjV4MzIwIG1tIDsgOC44NngxMi42MCBpbik8L2xpPgoJICogPGxpPjxiPkdlcm1hbiBESU4gNDc2PC9iPjwvbGk+CgkgKiA8bGk+NEEwICgxNjgyeDIzNzggbW0gOyA2Ni4yMng5My42MiBpbik8L2xpPgoJICogPGxpPjJBMCAoMTE4OXgxNjgyIG1tIDsgNDYuODF4NjYuMjIgaW4pPC9saT4KCSAqIDxsaT48Yj5WYXJpYXRpb25zIG9uIHRoZSBJU08gU3RhbmRhcmQ8L2I+PC9saT4KCSAqIDxsaT5BMl9FWFRSQSAoNDQ1eDYxOSBtbSA7IDE3LjUyeDI0LjM3IGluKTwvbGk+CgkgKiA8bGk+QTMrICgzMjl4NDgzIG1tIDsgMTIuOTV4MTkuMDIgaW4pPC9saT4KCSAqIDxsaT5BM19FWFRSQSAoMzIyeDQ0NSBtbSA7IDEyLjY4eDE3LjUyIGluKTwvbGk+CgkgKiA8bGk+QTNfU1VQRVIgKDMwNXg1MDggbW0gOyAxMi4wMXgyMC4wMCBpbik8L2xpPgoJICogPGxpPlNVUEVSX0EzICgzMDV4NDg3IG1tIDsgMTIuMDF4MTkuMTcgaW4pPC9saT4KCSAqIDxsaT5BNF9FWFRSQSAoMjM1eDMyMiBtbSA7IDkuMjV4MTIuNjggaW4pPC9saT4KCSAqIDxsaT5BNF9TVVBFUiAoMjI5eDMyMiBtbSA7IDkuMDJ4MTIuNjggaW4pPC9saT4KCSAqIDxsaT5TVVBFUl9BNCAoMjI3eDM1NiBtbSA7IDguOTR4MTQuMDIgaW4pPC9saT4KCSAqIDxsaT5BNF9MT05HICgyMTB4MzQ4IG1tIDsgOC4yN3gxMy43MCBpbik8L2xpPgoJICogPGxpPkY0ICgyMTB4MzMwIG1tIDsgOC4yN3gxMi45OSBpbik8L2xpPgoJICogPGxpPlNPX0I1X0VYVFJBICgyMDJ4Mjc2IG1tIDsgNy45NXgxMC44NyBpbik8L2xpPgoJICogPGxpPkE1X0VYVFJBICgxNzN4MjM1IG1tIDsgNi44MXg5LjI1IGluKTwvbGk+CgkgKiA8bGk+PGI+QU5TSSBTZXJpZXM8L2I+PC9saT4KCSAqIDxsaT5BTlNJX0UgKDg2NHgxMTE4IG1tIDsgMzQuMDB4NDQuMDAgaW4pPC9saT4KCSAqIDxsaT5BTlNJX0QgKDU1OXg4NjQgbW0gOyAyMi4wMHgzNC4wMCBpbik8L2xpPgoJICogPGxpPkFOU0lfQyAoNDMyeDU1OSBtbSA7IDE3LjAweDIyLjAwIGluKTwvbGk+CgkgKiA8bGk+QU5TSV9CICgyNzl4NDMyIG1tIDsgMTEuMDB4MTcuMDAgaW4pPC9saT4KCSAqIDxsaT5BTlNJX0EgKDIxNngyNzkgbW0gOyA4LjUweDExLjAwIGluKTwvbGk+CgkgKiA8bGk+PGI+VHJhZGl0aW9uYWwgJ0xvb3NlJyBOb3J0aCBBbWVyaWNhbiBQYXBlciBTaXplczwvYj48L2xpPgoJICogPGxpPkxFREdFUiwgVVNMRURHRVIgKDQzMngyNzkgbW0gOyAxNy4wMHgxMS4wMCBpbik8L2xpPgoJICogPGxpPlRBQkxPSUQsIFVTVEFCTE9JRCwgQklCTEUsIE9SR0FOSVpFUksgKDI3OXg0MzIgbW0gOyAxMS4wMHgxNy4wMCBpbik8L2xpPgoJICogPGxpPkxFVFRFUiwgVVNMRVRURVIsIE9SR0FOSVpFUk0gKDIxNngyNzkgbW0gOyA4LjUweDExLjAwIGluKTwvbGk+CgkgKiA8bGk+TEVHQUwsIFVTTEVHQUwgKDIxNngzNTYgbW0gOyA4LjUweDE0LjAwIGluKTwvbGk+CgkgKiA8bGk+R0xFVFRFUiwgR09WRVJOTUVOVExFVFRFUiAoMjAzeDI2NyBtbSA7IDguMDB4MTAuNTAgaW4pPC9saT4KCSAqIDxsaT5KTEVHQUwsIEpVTklPUkxFR0FMICgyMDN4MTI3IG1tIDsgOC4wMHg1LjAwIGluKTwvbGk+CgkgKiA8bGk+PGI+T3RoZXIgTm9ydGggQW1lcmljYW4gUGFwZXIgU2l6ZXM8L2I+PC9saT4KCSAqIDxsaT5RVUFEREVNWSAoODg5eDExNDMgbW0gOyAzNS4wMHg0NS4wMCBpbik8L2xpPgoJICogPGxpPlNVUEVSX0IgKDMzMHg0ODMgbW0gOyAxMy4wMHgxOS4wMCBpbik8L2xpPgoJICogPGxpPlFVQVJUTyAoMjI5eDI3OSBtbSA7IDkuMDB4MTEuMDAgaW4pPC9saT4KCSAqIDxsaT5GT0xJTywgR09WRVJOTUVOVExFR0FMICgyMTZ4MzMwIG1tIDsgOC41MHgxMy4wMCBpbik8L2xpPgoJICogPGxpPkVYRUNVVElWRSwgTU9OQVJDSCAoMTg0eDI2NyBtbSA7IDcuMjV4MTAuNTAgaW4pPC9saT4KCSAqIDxsaT5NRU1PLCBTVEFURU1FTlQsIE9SR0FOSVpFUkwgKDE0MHgyMTYgbW0gOyA1LjUweDguNTAgaW4pPC9saT4KCSAqIDxsaT5GT09MU0NBUCAoMjEweDMzMCBtbSA7IDguMjd4MTMuMDAgaW4pPC9saT4KCSAqIDxsaT5DT01QQUNUICgxMDh4MTcxIG1tIDsgNC4yNXg2Ljc1IGluKTwvbGk+CgkgKiA8bGk+T1JHQU5JWkVSSiAoNzB4MTI3IG1tIDsgMi43NXg1LjAwIGluKTwvbGk+CgkgKiA8bGk+PGI+Q2FuYWRpYW4gc3RhbmRhcmQgQ0FOIDItOS42ME08L2I+PC9saT4KCSAqIDxsaT5QMSAoNTYweDg2MCBtbSA7IDIyLjA1eDMzLjg2IGluKTwvbGk+CgkgKiA8bGk+UDIgKDQzMHg1NjAgbW0gOyAxNi45M3gyMi4wNSBpbik8L2xpPgoJICogPGxpPlAzICgyODB4NDMwIG1tIDsgMTEuMDJ4MTYuOTMgaW4pPC9saT4KCSAqIDxsaT5QNCAoMjE1eDI4MCBtbSA7IDguNDZ4MTEuMDIgaW4pPC9saT4KCSAqIDxsaT5QNSAoMTQweDIxNSBtbSA7IDUuNTF4OC40NiBpbik8L2xpPgoJICogPGxpPlA2ICgxMDd4MTQwIG1tIDsgNC4yMXg1LjUxIGluKTwvbGk+CgkgKiA8bGk+PGI+Tm9ydGggQW1lcmljYW4gQXJjaGl0ZWN0dXJhbCBTaXplczwvYj48L2xpPgoJICogPGxpPkFSQ0hfRSAoOTE0eDEyMTkgbW0gOyAzNi4wMHg0OC4wMCBpbik8L2xpPgoJICogPGxpPkFSQ0hfRTEgKDc2MngxMDY3IG1tIDsgMzAuMDB4NDIuMDAgaW4pPC9saT4KCSAqIDxsaT5BUkNIX0QgKDYxMHg5MTQgbW0gOyAyNC4wMHgzNi4wMCBpbik8L2xpPgoJICogPGxpPkFSQ0hfQywgQlJPQURTSEVFVCAoNDU3eDYxMCBtbSA7IDE4LjAweDI0LjAwIGluKTwvbGk+CgkgKiA8bGk+QVJDSF9CICgzMDV4NDU3IG1tIDsgMTIuMDB4MTguMDAgaW4pPC9saT4KCSAqIDxsaT5BUkNIX0EgKDIyOXgzMDUgbW0gOyA5LjAweDEyLjAwIGluKTwvbGk+CgkgKiA8bGk+PGI+QW5ub3VuY2VtZW50IEVudmVsb3BlczwvYj48L2xpPgoJICogPGxpPkFOTkVOVl9BMiAoMTExeDE0NiBtbSA7IDQuMzd4NS43NSBpbik8L2xpPgoJICogPGxpPkFOTkVOVl9BNiAoMTIxeDE2NSBtbSA7IDQuNzV4Ni41MCBpbik8L2xpPgoJICogPGxpPkFOTkVOVl9BNyAoMTMzeDE4NCBtbSA7IDUuMjV4Ny4yNSBpbik8L2xpPgoJICogPGxpPkFOTkVOVl9BOCAoMTQweDIwNiBtbSA7IDUuNTB4OC4xMiBpbik8L2xpPgoJICogPGxpPkFOTkVOVl9BMTAgKDE1OXgyNDQgbW0gOyA2LjI1eDkuNjIgaW4pPC9saT4KCSAqIDxsaT5BTk5FTlZfU0xJTSAoOTh4MjI1IG1tIDsgMy44N3g4Ljg3IGluKTwvbGk+CgkgKiA8bGk+PGI+Q29tbWVyY2lhbCBFbnZlbG9wZXM8L2I+PC9saT4KCSAqIDxsaT5DT01NRU5WX042XzEvNCAoODl4MTUyIG1tIDsgMy41MHg2LjAwIGluKTwvbGk+CgkgKiA8bGk+Q09NTUVOVl9ONl8zLzQgKDkyeDE2NSBtbSA7IDMuNjJ4Ni41MCBpbik8L2xpPgoJICogPGxpPkNPTU1FTlZfTjggKDk4eDE5MSBtbSA7IDMuODd4Ny41MCBpbik8L2xpPgoJICogPGxpPkNPTU1FTlZfTjkgKDk4eDIyNSBtbSA7IDMuODd4OC44NyBpbik8L2xpPgoJICogPGxpPkNPTU1FTlZfTjEwICgxMDV4MjQxIG1tIDsgNC4xMng5LjUwIGluKTwvbGk+CgkgKiA8bGk+Q09NTUVOVl9OMTEgKDExNHgyNjMgbW0gOyA0LjUweDEwLjM3IGluKTwvbGk+CgkgKiA8bGk+Q09NTUVOVl9OMTIgKDEyMXgyNzkgbW0gOyA0Ljc1eDExLjAwIGluKTwvbGk+CgkgKiA8bGk+Q09NTUVOVl9OMTQgKDEyN3gyOTIgbW0gOyA1LjAweDExLjUwIGluKTwvbGk+CgkgKiA8bGk+PGI+Q2F0YWxvZ3VlIEVudmVsb3BlczwvYj48L2xpPgoJICogPGxpPkNBVEVOVl9OMSAoMTUyeDIyOSBtbSA7IDYuMDB4OS4wMCBpbik8L2xpPgoJICogPGxpPkNBVEVOVl9OMV8zLzQgKDE2NXgyNDEgbW0gOyA2LjUweDkuNTAgaW4pPC9saT4KCSAqIDxsaT5DQVRFTlZfTjIgKDE2NXgyNTQgbW0gOyA2LjUweDEwLjAwIGluKTwvbGk+CgkgKiA8bGk+Q0FURU5WX04zICgxNzh4MjU0IG1tIDsgNy4wMHgxMC4wMCBpbik8L2xpPgoJICogPGxpPkNBVEVOVl9ONiAoMTkxeDI2NyBtbSA7IDcuNTB4MTAuNTAgaW4pPC9saT4KCSAqIDxsaT5DQVRFTlZfTjcgKDIwM3gyNzkgbW0gOyA4LjAweDExLjAwIGluKTwvbGk+CgkgKiA8bGk+Q0FURU5WX044ICgyMTB4Mjg2IG1tIDsgOC4yNXgxMS4yNSBpbik8L2xpPgoJICogPGxpPkNBVEVOVl9OOV8xLzIgKDIxNngyNjcgbW0gOyA4LjUweDEwLjUwIGluKTwvbGk+CgkgKiA8bGk+Q0FURU5WX045XzMvNCAoMjIyeDI4NiBtbSA7IDguNzV4MTEuMjUgaW4pPC9saT4KCSAqIDxsaT5DQVRFTlZfTjEwXzEvMiAoMjI5eDMwNSBtbSA7IDkuMDB4MTIuMDAgaW4pPC9saT4KCSAqIDxsaT5DQVRFTlZfTjEyXzEvMiAoMjQxeDMxOCBtbSA7IDkuNTB4MTIuNTAgaW4pPC9saT4KCSAqIDxsaT5DQVRFTlZfTjEzXzEvMiAoMjU0eDMzMCBtbSA7IDEwLjAweDEzLjAwIGluKTwvbGk+CgkgKiA8bGk+Q0FURU5WX04xNF8xLzQgKDI4NngzMTEgbW0gOyAxMS4yNXgxMi4yNSBpbik8L2xpPgoJICogPGxpPkNBVEVOVl9OMTRfMS8yICgyOTJ4MzY4IG1tIDsgMTEuNTB4MTQuNTAgaW4pPC9saT4KCSAqIDxsaT48Yj5KYXBhbmVzZSAoSklTIFAgMDEzOC02MSkgU3RhbmRhcmQgQi1TZXJpZXM8L2I+PC9saT4KCSAqIDxsaT5KSVNfQjAgKDEwMzB4MTQ1NiBtbSA7IDQwLjU1eDU3LjMyIGluKTwvbGk+CgkgKiA8bGk+SklTX0IxICg3Mjh4MTAzMCBtbSA7IDI4LjY2eDQwLjU1IGluKTwvbGk+CgkgKiA8bGk+SklTX0IyICg1MTV4NzI4IG1tIDsgMjAuMjh4MjguNjYgaW4pPC9saT4KCSAqIDxsaT5KSVNfQjMgKDM2NHg1MTUgbW0gOyAxNC4zM3gyMC4yOCBpbik8L2xpPgoJICogPGxpPkpJU19CNCAoMjU3eDM2NCBtbSA7IDEwLjEyeDE0LjMzIGluKTwvbGk+CgkgKiA8bGk+SklTX0I1ICgxODJ4MjU3IG1tIDsgNy4xN3gxMC4xMiBpbik8L2xpPgoJICogPGxpPkpJU19CNiAoMTI4eDE4MiBtbSA7IDUuMDR4Ny4xNyBpbik8L2xpPgoJICogPGxpPkpJU19CNyAoOTF4MTI4IG1tIDsgMy41OHg1LjA0IGluKTwvbGk+CgkgKiA8bGk+SklTX0I4ICg2NHg5MSBtbSA7IDIuNTJ4My41OCBpbik8L2xpPgoJICogPGxpPkpJU19COSAoNDV4NjQgbW0gOyAxLjc3eDIuNTIgaW4pPC9saT4KCSAqIDxsaT5KSVNfQjEwICgzMng0NSBtbSA7IDEuMjZ4MS43NyBpbik8L2xpPgoJICogPGxpPkpJU19CMTEgKDIyeDMyIG1tIDsgMC44N3gxLjI2IGluKTwvbGk+CgkgKiA8bGk+SklTX0IxMiAoMTZ4MjIgbW0gOyAwLjYzeDAuODcgaW4pPC9saT4KCSAqIDxsaT48Yj5QQSBTZXJpZXM8L2I+PC9saT4KCSAqIDxsaT5QQTAgKDg0MHgxMTIwIG1tIDsgMzMuMDd4NDQuMDkgaW4pPC9saT4KCSAqIDxsaT5QQTEgKDU2MHg4NDAgbW0gOyAyMi4wNXgzMy4wNyBpbik8L2xpPgoJICogPGxpPlBBMiAoNDIweDU2MCBtbSA7IDE2LjU0eDIyLjA1IGluKTwvbGk+CgkgKiA8bGk+UEEzICgyODB4NDIwIG1tIDsgMTEuMDJ4MTYuNTQgaW4pPC9saT4KCSAqIDxsaT5QQTQgKDIxMHgyODAgbW0gOyA4LjI3eDExLjAyIGluKTwvbGk+CgkgKiA8bGk+UEE1ICgxNDB4MjEwIG1tIDsgNS41MXg4LjI3IGluKTwvbGk+CgkgKiA8bGk+UEE2ICgxMDV4MTQwIG1tIDsgNC4xM3g1LjUxIGluKTwvbGk+CgkgKiA8bGk+UEE3ICg3MHgxMDUgbW0gOyAyLjc2eDQuMTMgaW4pPC9saT4KCSAqIDxsaT5QQTggKDUyeDcwIG1tIDsgMi4wNXgyLjc2IGluKTwvbGk+CgkgKiA8bGk+UEE5ICgzNXg1MiBtbSA7IDEuMzh4Mi4wNSBpbik8L2xpPgoJICogPGxpPlBBMTAgKDI2eDM1IG1tIDsgMS4wMngxLjM4IGluKTwvbGk+CgkgKiA8bGk+PGI+U3RhbmRhcmQgUGhvdG9ncmFwaGljIFByaW50IFNpemVzPC9iPjwvbGk+CgkgKiA8bGk+UEFTU1BPUlRfUEhPVE8gKDM1eDQ1IG1tIDsgMS4zOHgxLjc3IGluKTwvbGk+CgkgKiA8bGk+RSAoODJ4MTIwIG1tIDsgMy4yNXg0LjcyIGluKTwvbGk+CgkgKiA8bGk+M1IsIEwgKDg5eDEyNyBtbSA7IDMuNTB4NS4wMCBpbik8L2xpPgoJICogPGxpPjRSLCBLRyAoMTAyeDE1MiBtbSA7IDQuMDJ4NS45OCBpbik8L2xpPgoJICogPGxpPjREICgxMjB4MTUyIG1tIDsgNC43Mng1Ljk4IGluKTwvbGk+CgkgKiA8bGk+NVIsIDJMICgxMjd4MTc4IG1tIDsgNS4wMHg3LjAxIGluKTwvbGk+CgkgKiA8bGk+NlIsIDhQICgxNTJ4MjAzIG1tIDsgNS45OHg3Ljk5IGluKTwvbGk+CgkgKiA8bGk+OFIsIDZQICgyMDN4MjU0IG1tIDsgNy45OXgxMC4wMCBpbik8L2xpPgoJICogPGxpPlM4UiwgNlBXICgyMDN4MzA1IG1tIDsgNy45OXgxMi4wMSBpbik8L2xpPgoJICogPGxpPjEwUiwgNFAgKDI1NHgzMDUgbW0gOyAxMC4wMHgxMi4wMSBpbik8L2xpPgoJICogPGxpPlMxMFIsIDRQVyAoMjU0eDM4MSBtbSA7IDEwLjAweDE1LjAwIGluKTwvbGk+CgkgKiA8bGk+MTFSICgyNzl4MzU2IG1tIDsgMTAuOTh4MTQuMDIgaW4pPC9saT4KCSAqIDxsaT5TMTFSICgyNzl4NDMyIG1tIDsgMTAuOTh4MTcuMDEgaW4pPC9saT4KCSAqIDxsaT4xMlIgKDMwNXgzODEgbW0gOyAxMi4wMXgxNS4wMCBpbik8L2xpPgoJICogPGxpPlMxMlIgKDMwNXg0NTYgbW0gOyAxMi4wMXgxNy45NSBpbik8L2xpPgoJICogPGxpPjxiPkNvbW1vbiBOZXdzcGFwZXIgU2l6ZXM8L2I+PC9saT4KCSAqIDxsaT5ORVdTUEFQRVJfQlJPQURTSEVFVCAoNzUweDYwMCBtbSA7IDI5LjUzeDIzLjYyIGluKTwvbGk+CgkgKiA8bGk+TkVXU1BBUEVSX0JFUkxJTkVSICg0NzB4MzE1IG1tIDsgMTguNTB4MTIuNDAgaW4pPC9saT4KCSAqIDxsaT5ORVdTUEFQRVJfQ09NUEFDVCwgTkVXU1BBUEVSX1RBQkxPSUQgKDQzMHgyODAgbW0gOyAxNi45M3gxMS4wMiBpbik8L2xpPgoJICogPGxpPjxiPkJ1c2luZXNzIENhcmRzPC9iPjwvbGk+CgkgKiA8bGk+Q1JFRElUX0NBUkQsIEJVU0lORVNTX0NBUkQsIEJVU0lORVNTX0NBUkRfSVNPNzgxMCAoNTR4ODYgbW0gOyAyLjEzeDMuMzcgaW4pPC9saT4KCSAqIDxsaT5CVVNJTkVTU19DQVJEX0lTTzIxNiAoNTJ4NzQgbW0gOyAyLjA1eDIuOTEgaW4pPC9saT4KCSAqIDxsaT5CVVNJTkVTU19DQVJEX0lULCBCVVNJTkVTU19DQVJEX1VLLCBCVVNJTkVTU19DQVJEX0ZSLCBCVVNJTkVTU19DQVJEX0RFLCBCVVNJTkVTU19DQVJEX0VTICg1NXg4NSBtbSA7IDIuMTd4My4zNSBpbik8L2xpPgoJICogPGxpPkJVU0lORVNTX0NBUkRfVVMsIEJVU0lORVNTX0NBUkRfQ0EgKDUxeDg5IG1tIDsgMi4wMXgzLjUwIGluKTwvbGk+CgkgKiA8bGk+QlVTSU5FU1NfQ0FSRF9KUCAoNTV4OTEgbW0gOyAyLjE3eDMuNTggaW4pPC9saT4KCSAqIDxsaT5CVVNJTkVTU19DQVJEX0hLICg1NHg5MCBtbSA7IDIuMTN4My41NCBpbik8L2xpPgoJICogPGxpPkJVU0lORVNTX0NBUkRfQVUsIEJVU0lORVNTX0NBUkRfREssIEJVU0lORVNTX0NBUkRfU0UgKDU1eDkwIG1tIDsgMi4xN3gzLjU0IGluKTwvbGk+CgkgKiA8bGk+QlVTSU5FU1NfQ0FSRF9SVSwgQlVTSU5FU1NfQ0FSRF9DWiwgQlVTSU5FU1NfQ0FSRF9GSSwgQlVTSU5FU1NfQ0FSRF9IVSwgQlVTSU5FU1NfQ0FSRF9JTCAoNTB4OTAgbW0gOyAxLjk3eDMuNTQgaW4pPC9saT4KCSAqIDxsaT48Yj5CaWxsYm9hcmRzPC9iPjwvbGk+CgkgKiA8bGk+NFNIRUVUICgxMDE2eDE1MjQgbW0gOyA0MC4wMHg2MC4wMCBpbik8L2xpPgoJICogPGxpPjZTSEVFVCAoMTIwMHgxODAwIG1tIDsgNDcuMjR4NzAuODcgaW4pPC9saT4KCSAqIDxsaT4xMlNIRUVUICgzMDQ4eDE1MjQgbW0gOyAxMjAuMDB4NjAuMDAgaW4pPC9saT4KCSAqIDxsaT4xNlNIRUVUICgyMDMyeDMwNDggbW0gOyA4MC4wMHgxMjAuMDAgaW4pPC9saT4KCSAqIDxsaT4zMlNIRUVUICg0MDY0eDMwNDggbW0gOyAxNjAuMDB4MTIwLjAwIGluKTwvbGk+CgkgKiA8bGk+NDhTSEVFVCAoNjA5NngzMDQ4IG1tIDsgMjQwLjAweDEyMC4wMCBpbik8L2xpPgoJICogPGxpPjY0U0hFRVQgKDgxMjh4MzA0OCBtbSA7IDMyMC4wMHgxMjAuMDAgaW4pPC9saT4KCSAqIDxsaT45NlNIRUVUICgxMjE5MngzMDQ4IG1tIDsgNDgwLjAweDEyMC4wMCBpbik8L2xpPgoJICogPGxpPjxiPk9sZCBJbXBlcmlhbCBFbmdsaXNoIChzb21lIGFyZSBzdGlsbCB1c2VkIGluIFVTQSk8L2I+PC9saT4KCSAqIDxsaT5FTl9FTVBFUk9SICgxMjE5eDE4MjkgbW0gOyA0OC4wMHg3Mi4wMCBpbik8L2xpPgoJICogPGxpPkVOX0FOVElRVUFSSUFOICg3ODd4MTM0NiBtbSA7IDMxLjAweDUzLjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fR1JBTkRfRUFHTEUgKDczMHgxMDY3IG1tIDsgMjguNzV4NDIuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9ET1VCTEVfRUxFUEhBTlQgKDY3OXgxMDE2IG1tIDsgMjYuNzV4NDAuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9BVExBUyAoNjYweDg2NCBtbSA7IDI2LjAweDM0LjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fQ09MT01CSUVSICg1OTd4ODc2IG1tIDsgMjMuNTB4MzQuNTAgaW4pPC9saT4KCSAqIDxsaT5FTl9FTEVQSEFOVCAoNTg0eDcxMSBtbSA7IDIzLjAweDI4LjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fRE9VQkxFX0RFTVkgKDU3Mng5MDIgbW0gOyAyMi41MHgzNS41MCBpbik8L2xpPgoJICogPGxpPkVOX0lNUEVSSUFMICg1NTl4NzYyIG1tIDsgMjIuMDB4MzAuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9QUklOQ0VTUyAoNTQ2eDcxMSBtbSA7IDIxLjUweDI4LjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fQ0FSVFJJREdFICg1MzN4NjYwIG1tIDsgMjEuMDB4MjYuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9ET1VCTEVfTEFSR0VfUE9TVCAoNTMzeDgzOCBtbSA7IDIxLjAweDMzLjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fUk9ZQUwgKDUwOHg2MzUgbW0gOyAyMC4wMHgyNS4wMCBpbik8L2xpPgoJICogPGxpPkVOX1NIRUVULCBFTl9IQUxGX1BPU1QgKDQ5NXg1OTcgbW0gOyAxOS41MHgyMy41MCBpbik8L2xpPgoJICogPGxpPkVOX1NVUEVSX1JPWUFMICg0ODN4Njg2IG1tIDsgMTkuMDB4MjcuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9ET1VCTEVfUE9TVCAoNDgzeDc3NSBtbSA7IDE5LjAweDMwLjUwIGluKTwvbGk+CgkgKiA8bGk+RU5fTUVESVVNICg0NDV4NTg0IG1tIDsgMTcuNTB4MjMuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9ERU1ZICg0NDV4NTcyIG1tIDsgMTcuNTB4MjIuNTAgaW4pPC9saT4KCSAqIDxsaT5FTl9MQVJHRV9QT1NUICg0MTl4NTMzIG1tIDsgMTYuNTB4MjEuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9DT1BZX0RSQVVHSFQgKDQwNng1MDggbW0gOyAxNi4wMHgyMC4wMCBpbik8L2xpPgoJICogPGxpPkVOX1BPU1QgKDM5NHg0ODkgbW0gOyAxNS41MHgxOS4yNSBpbik8L2xpPgoJICogPGxpPkVOX0NST1dOICgzODF4NTA4IG1tIDsgMTUuMDB4MjAuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9QSU5DSEVEX1BPU1QgKDM3NXg0NzAgbW0gOyAxNC43NXgxOC41MCBpbik8L2xpPgoJICogPGxpPkVOX0JSSUVGICgzNDN4NDA2IG1tIDsgMTMuNTB4MTYuMDAgaW4pPC9saT4KCSAqIDxsaT5FTl9GT09MU0NBUCAoMzQzeDQzMiBtbSA7IDEzLjUweDE3LjAwIGluKTwvbGk+CgkgKiA8bGk+RU5fU01BTExfRk9PTFNDQVAgKDMzN3g0MTkgbW0gOyAxMy4yNXgxNi41MCBpbik8L2xpPgoJICogPGxpPkVOX1BPVFQgKDMxOHgzODEgbW0gOyAxMi41MHgxNS4wMCBpbik8L2xpPgoJICogPGxpPjxiPk9sZCBJbXBlcmlhbCBCZWxnaWFuPC9iPjwvbGk+CgkgKiA8bGk+QkVfR1JBTkRfQUlHTEUgKDcwMHgxMDQwIG1tIDsgMjcuNTZ4NDAuOTQgaW4pPC9saT4KCSAqIDxsaT5CRV9DT0xPTUJJRVIgKDYyMHg4NTAgbW0gOyAyNC40MXgzMy40NiBpbik8L2xpPgoJICogPGxpPkJFX0RPVUJMRV9DQVJSRSAoNjIweDkyMCBtbSA7IDI0LjQxeDM2LjIyIGluKTwvbGk+CgkgKiA8bGk+QkVfRUxFUEhBTlQgKDYxNng3NzAgbW0gOyAyNC4yNXgzMC4zMSBpbik8L2xpPgoJICogPGxpPkJFX1BFVElUX0FJR0xFICg2MDB4ODQwIG1tIDsgMjMuNjJ4MzMuMDcgaW4pPC9saT4KCSAqIDxsaT5CRV9HUkFORF9KRVNVUyAoNTUweDczMCBtbSA7IDIxLjY1eDI4Ljc0IGluKTwvbGk+CgkgKiA8bGk+QkVfSkVTVVMgKDU0MHg3MzAgbW0gOyAyMS4yNngyOC43NCBpbik8L2xpPgoJICogPGxpPkJFX1JBSVNJTiAoNTAweDY1MCBtbSA7IDE5LjY5eDI1LjU5IGluKTwvbGk+CgkgKiA8bGk+QkVfR1JBTkRfTUVESUFOICg0NjB4NjA1IG1tIDsgMTguMTF4MjMuODIgaW4pPC9saT4KCSAqIDxsaT5CRV9ET1VCTEVfUE9TVEUgKDQzNXg1NjUgbW0gOyAxNy4xM3gyMi4yNCBpbik8L2xpPgoJICogPGxpPkJFX0NPUVVJTExFICg0MzB4NTYwIG1tIDsgMTYuOTN4MjIuMDUgaW4pPC9saT4KCSAqIDxsaT5CRV9QRVRJVF9NRURJQU4gKDQxNXg1MzAgbW0gOyAxNi4zNHgyMC44NyBpbik8L2xpPgoJICogPGxpPkJFX1JVQ0hFICgzNjB4NDYwIG1tIDsgMTQuMTd4MTguMTEgaW4pPC9saT4KCSAqIDxsaT5CRV9QUk9QQVRSSUEgKDM0NXg0MzAgbW0gOyAxMy41OHgxNi45MyBpbik8L2xpPgoJICogPGxpPkJFX0xZUyAoMzE3eDM5NyBtbSA7IDEyLjQ4eDE1LjYzIGluKTwvbGk+CgkgKiA8bGk+QkVfUE9UICgzMDd4Mzg0IG1tIDsgMTIuMDl4MTUuMTIgaW4pPC9saT4KCSAqIDxsaT5CRV9ST1NFVFRFICgyNzB4MzQ3IG1tIDsgMTAuNjN4MTMuNjYgaW4pPC9saT4KCSAqIDxsaT48Yj5PbGQgSW1wZXJpYWwgRnJlbmNoPC9iPjwvbGk+CgkgKiA8bGk+RlJfVU5JVkVSUyAoMTAwMHgxMzAwIG1tIDsgMzkuMzd4NTEuMTggaW4pPC9saT4KCSAqIDxsaT5GUl9ET1VCTEVfQ09MT01CSUVSICg5MDB4MTI2MCBtbSA7IDM1LjQzeDQ5LjYxIGluKTwvbGk+CgkgKiA8bGk+RlJfR1JBTkRFX01PTkRFICg5MDB4MTI2MCBtbSA7IDM1LjQzeDQ5LjYxIGluKTwvbGk+CgkgKiA8bGk+RlJfRE9VQkxFX1NPTEVJTCAoODAweDEyMDAgbW0gOyAzMS41MHg0Ny4yNCBpbik8L2xpPgoJICogPGxpPkZSX0RPVUJMRV9KRVNVUyAoNzYweDExMjAgbW0gOyAyOS45Mng0NC4wOSBpbik8L2xpPgoJICogPGxpPkZSX0dSQU5EX0FJR0xFICg3NTB4MTA2MCBtbSA7IDI5LjUzeDQxLjczIGluKTwvbGk+CgkgKiA8bGk+RlJfUEVUSVRfQUlHTEUgKDcwMHg5NDAgbW0gOyAyNy41NngzNy4wMSBpbik8L2xpPgoJICogPGxpPkZSX0RPVUJMRV9SQUlTSU4gKDY1MHgxMDAwIG1tIDsgMjUuNTl4MzkuMzcgaW4pPC9saT4KCSAqIDxsaT5GUl9KT1VSTkFMICg2NTB4OTQwIG1tIDsgMjUuNTl4MzcuMDEgaW4pPC9saT4KCSAqIDxsaT5GUl9DT0xPTUJJRVJfQUZGSUNIRSAoNjMweDkwMCBtbSA7IDI0LjgweDM1LjQzIGluKTwvbGk+CgkgKiA8bGk+RlJfRE9VQkxFX0NBVkFMSUVSICg2MjB4OTIwIG1tIDsgMjQuNDF4MzYuMjIgaW4pPC9saT4KCSAqIDxsaT5GUl9DTE9DSEUgKDYwMHg4MDAgbW0gOyAyMy42MngzMS41MCBpbik8L2xpPgoJICogPGxpPkZSX1NPTEVJTCAoNjAweDgwMCBtbSA7IDIzLjYyeDMxLjUwIGluKTwvbGk+CgkgKiA8bGk+RlJfRE9VQkxFX0NBUlJFICg1NjB4OTAwIG1tIDsgMjIuMDV4MzUuNDMgaW4pPC9saT4KCSAqIDxsaT5GUl9ET1VCTEVfQ09RVUlMTEUgKDU2MHg4ODAgbW0gOyAyMi4wNXgzNC42NSBpbik8L2xpPgoJICogPGxpPkZSX0pFU1VTICg1NjB4NzYwIG1tIDsgMjIuMDV4MjkuOTIgaW4pPC9saT4KCSAqIDxsaT5GUl9SQUlTSU4gKDUwMHg2NTAgbW0gOyAxOS42OXgyNS41OSBpbik8L2xpPgoJICogPGxpPkZSX0NBVkFMSUVSICg0NjB4NjIwIG1tIDsgMTguMTF4MjQuNDEgaW4pPC9saT4KCSAqIDxsaT5GUl9ET1VCTEVfQ09VUk9OTkUgKDQ2MHg3MjAgbW0gOyAxOC4xMXgyOC4zNSBpbik8L2xpPgoJICogPGxpPkZSX0NBUlJFICg0NTB4NTYwIG1tIDsgMTcuNzJ4MjIuMDUgaW4pPC9saT4KCSAqIDxsaT5GUl9DT1FVSUxMRSAoNDQweDU2MCBtbSA7IDE3LjMyeDIyLjA1IGluKTwvbGk+CgkgKiA8bGk+RlJfRE9VQkxFX1RFTExJRVJFICg0NDB4NjgwIG1tIDsgMTcuMzJ4MjYuNzcgaW4pPC9saT4KCSAqIDxsaT5GUl9ET1VCTEVfQ0xPQ0hFICg0MDB4NjAwIG1tIDsgMTUuNzV4MjMuNjIgaW4pPC9saT4KCSAqIDxsaT5GUl9ET1VCTEVfUE9UICg0MDB4NjIwIG1tIDsgMTUuNzV4MjQuNDEgaW4pPC9saT4KCSAqIDxsaT5GUl9FQ1UgKDQwMHg1MjAgbW0gOyAxNS43NXgyMC40NyBpbik8L2xpPgoJICogPGxpPkZSX0NPVVJPTk5FICgzNjB4NDYwIG1tIDsgMTQuMTd4MTguMTEgaW4pPC9saT4KCSAqIDxsaT5GUl9URUxMSUVSRSAoMzQweDQ0MCBtbSA7IDEzLjM5eDE3LjMyIGluKTwvbGk+CgkgKiA8bGk+RlJfUE9UICgzMTB4NDAwIG1tIDsgMTIuMjB4MTUuNzUgaW4pPC9saT4KCSAqIDwvdWw+CgkgKiBAcmV0dXJuIGFycmF5IGNvbnRhaW5pbmcgcGFnZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHBvaW50cwoJICogQHNpbmNlIDUuMC4wMTAgKDIwMTAtMDUtMTcpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBhZ2VTaXplRnJvbUZvcm1hdCgkZm9ybWF0KSB7CgkJLy8gUGFwZXIgY29yZGluYXRlcyBhcmUgY2FsY3VsYXRlZCBpbiB0aGlzIHdheTogKGluY2hlcyAqIDcyKSB3aGVyZSAoMSBpbmNoID0gMjUuNCBtbSkKCQlzd2l0Y2ggKHN0cnRvdXBwZXIoJGZvcm1hdCkpIHsKCQkJLy8gSVNPIDIxNiBBIFNlcmllcyArIDIgU0lTIDAxNDcxMSBleHRlbnNpb25zCgkJCWNhc2UgJ0EwJyA6IHskcGYgPSBhcnJheSggMjM4My45MzcsIDMzNzAuMzk0KTsgYnJlYWs7fQoJCQljYXNlICdBMScgOiB7JHBmID0gYXJyYXkoIDE2ODMuNzgwLCAyMzgzLjkzNyk7IGJyZWFrO30KCQkJY2FzZSAnQTInIDogeyRwZiA9IGFycmF5KCAxMTkwLjU1MSwgMTY4My43ODApOyBicmVhazt9CgkJCWNhc2UgJ0EzJyA6IHskcGYgPSBhcnJheSggIDg0MS44OTAsIDExOTAuNTUxKTsgYnJlYWs7fQoJCQljYXNlICdBNCcgOiB7JHBmID0gYXJyYXkoICA1OTUuMjc2LCAgODQxLjg5MCk7IGJyZWFrO30KCQkJY2FzZSAnQTUnIDogeyRwZiA9IGFycmF5KCAgNDE5LjUyOCwgIDU5NS4yNzYpOyBicmVhazt9CgkJCWNhc2UgJ0E2JyA6IHskcGYgPSBhcnJheSggIDI5Ny42MzgsICA0MTkuNTI4KTsgYnJlYWs7fQoJCQljYXNlICdBNycgOiB7JHBmID0gYXJyYXkoICAyMDkuNzY0LCAgMjk3LjYzOCk7IGJyZWFrO30KCQkJY2FzZSAnQTgnIDogeyRwZiA9IGFycmF5KCAgMTQ3LjQwMiwgIDIwOS43NjQpOyBicmVhazt9CgkJCWNhc2UgJ0E5JyA6IHskcGYgPSBhcnJheSggIDEwNC44ODIsICAxNDcuNDAyKTsgYnJlYWs7fQoJCQljYXNlICdBMTAnOiB7JHBmID0gYXJyYXkoICAgNzMuNzAxLCAgMTA0Ljg4Mik7IGJyZWFrO30KCQkJY2FzZSAnQTExJzogeyRwZiA9IGFycmF5KCAgIDUxLjAyNCwgICA3My43MDEpOyBicmVhazt9CgkJCWNhc2UgJ0ExMic6IHskcGYgPSBhcnJheSggICAzNi44NTAsICAgNTEuMDI0KTsgYnJlYWs7fQoJCQkvLyBJU08gMjE2IEIgU2VyaWVzICsgMiBTSVMgMDE0NzExIGV4dGVuc2lvbnMKCQkJY2FzZSAnQjAnIDogeyRwZiA9IGFycmF5KCAyODM0LjY0NiwgNDAwOC4xODkpOyBicmVhazt9CgkJCWNhc2UgJ0IxJyA6IHskcGYgPSBhcnJheSggMjAwNC4wOTQsIDI4MzQuNjQ2KTsgYnJlYWs7fQoJCQljYXNlICdCMicgOiB7JHBmID0gYXJyYXkoIDE0MTcuMzIzLCAyMDA0LjA5NCk7IGJyZWFrO30KCQkJY2FzZSAnQjMnIDogeyRwZiA9IGFycmF5KCAxMDAwLjYzMCwgMTQxNy4zMjMpOyBicmVhazt9CgkJCWNhc2UgJ0I0JyA6IHskcGYgPSBhcnJheSggIDcwOC42NjEsIDEwMDAuNjMwKTsgYnJlYWs7fQoJCQljYXNlICdCNScgOiB7JHBmID0gYXJyYXkoICA0OTguODk4LCAgNzA4LjY2MSk7IGJyZWFrO30KCQkJY2FzZSAnQjYnIDogeyRwZiA9IGFycmF5KCAgMzU0LjMzMSwgIDQ5OC44OTgpOyBicmVhazt9CgkJCWNhc2UgJ0I3JyA6IHskcGYgPSBhcnJheSggIDI0OS40NDksICAzNTQuMzMxKTsgYnJlYWs7fQoJCQljYXNlICdCOCcgOiB7JHBmID0gYXJyYXkoICAxNzUuNzQ4LCAgMjQ5LjQ0OSk7IGJyZWFrO30KCQkJY2FzZSAnQjknIDogeyRwZiA9IGFycmF5KCAgMTI0LjcyNCwgIDE3NS43NDgpOyBicmVhazt9CgkJCWNhc2UgJ0IxMCc6IHskcGYgPSBhcnJheSggICA4Ny44NzQsICAxMjQuNzI0KTsgYnJlYWs7fQoJCQljYXNlICdCMTEnOiB7JHBmID0gYXJyYXkoICAgNjIuMzYyLCAgIDg3Ljg3NCk7IGJyZWFrO30KCQkJY2FzZSAnQjEyJzogeyRwZiA9IGFycmF5KCAgIDQyLjUyMCwgICA2Mi4zNjIpOyBicmVhazt9CgkJCS8vIElTTyAyMTYgQyBTZXJpZXMgKyAyIFNJUyAwMTQ3MTEgZXh0ZW5zaW9ucyArIDIgRVhURU5TSU9OCgkJCWNhc2UgJ0MwJyA6IHskcGYgPSBhcnJheSggMjU5OS4zNzAsIDM2NzYuNTM1KTsgYnJlYWs7fQoJCQljYXNlICdDMScgOiB7JHBmID0gYXJyYXkoIDE4MzYuODUwLCAyNTk5LjM3MCk7IGJyZWFrO30KCQkJY2FzZSAnQzInIDogeyRwZiA9IGFycmF5KCAxMjk4LjI2OCwgMTgzNi44NTApOyBicmVhazt9CgkJCWNhc2UgJ0MzJyA6IHskcGYgPSBhcnJheSggIDkxOC40MjUsIDEyOTguMjY4KTsgYnJlYWs7fQoJCQljYXNlICdDNCcgOiB7JHBmID0gYXJyYXkoICA2NDkuMTM0LCAgOTE4LjQyNSk7IGJyZWFrO30KCQkJY2FzZSAnQzUnIDogeyRwZiA9IGFycmF5KCAgNDU5LjIxMywgIDY0OS4xMzQpOyBicmVhazt9CgkJCWNhc2UgJ0M2JyA6IHskcGYgPSBhcnJheSggIDMyMy4xNTAsICA0NTkuMjEzKTsgYnJlYWs7fQoJCQljYXNlICdDNycgOiB7JHBmID0gYXJyYXkoICAyMjkuNjA2LCAgMzIzLjE1MCk7IGJyZWFrO30KCQkJY2FzZSAnQzgnIDogeyRwZiA9IGFycmF5KCAgMTYxLjU3NSwgIDIyOS42MDYpOyBicmVhazt9CgkJCWNhc2UgJ0M5JyA6IHskcGYgPSBhcnJheSggIDExMy4zODYsICAxNjEuNTc1KTsgYnJlYWs7fQoJCQljYXNlICdDMTAnOiB7JHBmID0gYXJyYXkoICAgNzkuMzcwLCAgMTEzLjM4Nik7IGJyZWFrO30KCQkJY2FzZSAnQzExJzogeyRwZiA9IGFycmF5KCAgIDU2LjY5MywgICA3OS4zNzApOyBicmVhazt9CgkJCWNhc2UgJ0MxMic6IHskcGYgPSBhcnJheSggICAzOS42ODUsICAgNTYuNjkzKTsgYnJlYWs7fQoJCQljYXNlICdDNzYnOiB7JHBmID0gYXJyYXkoICAyMjkuNjA2LCAgNDU5LjIxMyk7IGJyZWFrO30KCQkJY2FzZSAnREwnIDogeyRwZiA9IGFycmF5KCAgMzExLjgxMSwgIDYyMy42MjIpOyBicmVhazt9CgkJCS8vIFNJUyAwMTQ3MTEgRSBTZXJpZXMKCQkJY2FzZSAnRTAnIDogeyRwZiA9IGFycmF5KCAyNDkxLjY1NCwgMzUxNy43OTUpOyBicmVhazt9CgkJCWNhc2UgJ0UxJyA6IHskcGYgPSBhcnJheSggMTc1Ny40ODAsIDI0OTEuNjU0KTsgYnJlYWs7fQoJCQljYXNlICdFMicgOiB7JHBmID0gYXJyYXkoIDEyNDcuMjQ0LCAxNzU3LjQ4MCk7IGJyZWFrO30KCQkJY2FzZSAnRTMnIDogeyRwZiA9IGFycmF5KCAgODc4Ljc0MCwgMTI0Ny4yNDQpOyBicmVhazt9CgkJCWNhc2UgJ0U0JyA6IHskcGYgPSBhcnJheSggIDYyMy42MjIsICA4NzguNzQwKTsgYnJlYWs7fQoJCQljYXNlICdFNScgOiB7JHBmID0gYXJyYXkoICA0MzkuMzcwLCAgNjIzLjYyMik7IGJyZWFrO30KCQkJY2FzZSAnRTYnIDogeyRwZiA9IGFycmF5KCAgMzExLjgxMSwgIDQzOS4zNzApOyBicmVhazt9CgkJCWNhc2UgJ0U3JyA6IHskcGYgPSBhcnJheSggIDIyMS4xMDIsICAzMTEuODExKTsgYnJlYWs7fQoJCQljYXNlICdFOCcgOiB7JHBmID0gYXJyYXkoICAxNTUuOTA2LCAgMjIxLjEwMik7IGJyZWFrO30KCQkJY2FzZSAnRTknIDogeyRwZiA9IGFycmF5KCAgMTEwLjU1MSwgIDE1NS45MDYpOyBicmVhazt9CgkJCWNhc2UgJ0UxMCc6IHskcGYgPSBhcnJheSggICA3Ni41MzUsICAxMTAuNTUxKTsgYnJlYWs7fQoJCQljYXNlICdFMTEnOiB7JHBmID0gYXJyYXkoICAgNTMuODU4LCAgIDc2LjUzNSk7IGJyZWFrO30KCQkJY2FzZSAnRTEyJzogeyRwZiA9IGFycmF5KCAgIDM2Ljg1MCwgICA1My44NTgpOyBicmVhazt9CgkJCS8vIFNJUyAwMTQ3MTEgRyBTZXJpZXMKCQkJY2FzZSAnRzAnIDogeyRwZiA9IGFycmF5KCAyNzE1LjU5MSwgMzgzOC4xMTApOyBicmVhazt9CgkJCWNhc2UgJ0cxJyA6IHskcGYgPSBhcnJheSggMTkxOS4wNTUsIDI3MTUuNTkxKTsgYnJlYWs7fQoJCQljYXNlICdHMicgOiB7JHBmID0gYXJyYXkoIDEzNTcuNzk1LCAxOTE5LjA1NSk7IGJyZWFrO30KCQkJY2FzZSAnRzMnIDogeyRwZiA9IGFycmF5KCAgOTU4LjExMCwgMTM1Ny43OTUpOyBicmVhazt9CgkJCWNhc2UgJ0c0JyA6IHskcGYgPSBhcnJheSggIDY3Ny40ODAsICA5NTguMTEwKTsgYnJlYWs7fQoJCQljYXNlICdHNScgOiB7JHBmID0gYXJyYXkoICA0NzkuMDU1LCAgNjc3LjQ4MCk7IGJyZWFrO30KCQkJY2FzZSAnRzYnIDogeyRwZiA9IGFycmF5KCAgMzM3LjMyMywgIDQ3OS4wNTUpOyBicmVhazt9CgkJCWNhc2UgJ0c3JyA6IHskcGYgPSBhcnJheSggIDIzOC4xMTAsICAzMzcuMzIzKTsgYnJlYWs7fQoJCQljYXNlICdHOCcgOiB7JHBmID0gYXJyYXkoICAxNjcuMjQ0LCAgMjM4LjExMCk7IGJyZWFrO30KCQkJY2FzZSAnRzknIDogeyRwZiA9IGFycmF5KCAgMTE5LjA1NSwgIDE2Ny4yNDQpOyBicmVhazt9CgkJCWNhc2UgJ0cxMCc6IHskcGYgPSBhcnJheSggICA4Mi4yMDUsICAxMTkuMDU1KTsgYnJlYWs7fQoJCQljYXNlICdHMTEnOiB7JHBmID0gYXJyYXkoICAgNTkuNTI4LCAgIDgyLjIwNSk7IGJyZWFrO30KCQkJY2FzZSAnRzEyJzogeyRwZiA9IGFycmF5KCAgIDM5LjY4NSwgICA1OS41MjgpOyBicmVhazt9CgkJCS8vIElTTyBQcmVzcwoJCQljYXNlICdSQTAnOiB7JHBmID0gYXJyYXkoIDI0MzcuNzk1LCAzNDU4LjI2OCk7IGJyZWFrO30KCQkJY2FzZSAnUkExJzogeyRwZiA9IGFycmF5KCAxNzI5LjEzNCwgMjQzNy43OTUpOyBicmVhazt9CgkJCWNhc2UgJ1JBMic6IHskcGYgPSBhcnJheSggMTIxOC44OTgsIDE3MjkuMTM0KTsgYnJlYWs7fQoJCQljYXNlICdSQTMnOiB7JHBmID0gYXJyYXkoICA4NjQuNTY3LCAxMjE4Ljg5OCk7IGJyZWFrO30KCQkJY2FzZSAnUkE0JzogeyRwZiA9IGFycmF5KCAgNjA5LjQ0OSwgIDg2NC41NjcpOyBicmVhazt9CgkJCWNhc2UgJ1NSQTAnOiB7JHBmID0gYXJyYXkoIDI1NTEuMTgxLCAzNjI4LjM0Nik7IGJyZWFrO30KCQkJY2FzZSAnU1JBMSc6IHskcGYgPSBhcnJheSggMTgxNC4xNzMsIDI1NTEuMTgxKTsgYnJlYWs7fQoJCQljYXNlICdTUkEyJzogeyRwZiA9IGFycmF5KCAxMjc1LjU5MSwgMTgxNC4xNzMpOyBicmVhazt9CgkJCWNhc2UgJ1NSQTMnOiB7JHBmID0gYXJyYXkoICA5MDcuMDg3LCAxMjc1LjU5MSk7IGJyZWFrO30KCQkJY2FzZSAnU1JBNCc6IHskcGYgPSBhcnJheSggIDYzNy43OTUsICA5MDcuMDg3KTsgYnJlYWs7fQoJCQkvLyBHZXJtYW4gIERJTiA0NzYKCQkJY2FzZSAnNEEwJzogeyRwZiA9IGFycmF5KCA0NzY3Ljg3NCwgNjc0MC43ODcpOyBicmVhazt9CgkJCWNhc2UgJzJBMCc6IHskcGYgPSBhcnJheSggMzM3MC4zOTQsIDQ3NjcuODc0KTsgYnJlYWs7fQoJCQkvLyBWYXJpYXRpb25zIG9uIHRoZSBJU08gU3RhbmRhcmQKCQkJY2FzZSAnQTJfRVhUUkEnICAgOiB7JHBmID0gYXJyYXkoIDEyNjEuNDE3LCAxNzU0LjY0Nik7IGJyZWFrO30KCQkJY2FzZSAnQTMrJyAgICAgICAgOiB7JHBmID0gYXJyYXkoICA5MzIuNTk4LCAxMzY5LjEzNCk7IGJyZWFrO30KCQkJY2FzZSAnQTNfRVhUUkEnICAgOiB7JHBmID0gYXJyYXkoICA5MTIuNzU2LCAxMjYxLjQxNyk7IGJyZWFrO30KCQkJY2FzZSAnQTNfU1VQRVInICAgOiB7JHBmID0gYXJyYXkoICA4NjQuNTY3LCAxNDQwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnU1VQRVJfQTMnICAgOiB7JHBmID0gYXJyYXkoICA4NjQuNTY3LCAxMzgwLjQ3Mik7IGJyZWFrO30KCQkJY2FzZSAnQTRfRVhUUkEnICAgOiB7JHBmID0gYXJyYXkoICA2NjYuMTQyLCAgOTEyLjc1Nik7IGJyZWFrO30KCQkJY2FzZSAnQTRfU1VQRVInICAgOiB7JHBmID0gYXJyYXkoICA2NDkuMTM0LCAgOTEyLjc1Nik7IGJyZWFrO30KCQkJY2FzZSAnU1VQRVJfQTQnICAgOiB7JHBmID0gYXJyYXkoICA2NDMuNDY1LCAxMDA5LjEzNCk7IGJyZWFrO30KCQkJY2FzZSAnQTRfTE9ORycgICAgOiB7JHBmID0gYXJyYXkoICA1OTUuMjc2LCAgOTg2LjQ1Nyk7IGJyZWFrO30KCQkJY2FzZSAnRjQnICAgICAgICAgOiB7JHBmID0gYXJyYXkoICA1OTUuMjc2LCAgOTM1LjQzMyk7IGJyZWFrO30KCQkJY2FzZSAnU09fQjVfRVhUUkEnOiB7JHBmID0gYXJyYXkoICA1NzIuNTk4LCAgNzgyLjM2Mik7IGJyZWFrO30KCQkJY2FzZSAnQTVfRVhUUkEnICAgOiB7JHBmID0gYXJyYXkoICA0OTAuMzk0LCAgNjY2LjE0Mik7IGJyZWFrO30KCQkJLy8gQU5TSSBTZXJpZXMKCQkJY2FzZSAnQU5TSV9FJzogeyRwZiA9IGFycmF5KCAyNDQ4LjAwMCwgMzE2OC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0FOU0lfRCc6IHskcGYgPSBhcnJheSggMTU4NC4wMDAsIDI0NDguMDAwKTsgYnJlYWs7fQoJCQljYXNlICdBTlNJX0MnOiB7JHBmID0gYXJyYXkoIDEyMjQuMDAwLCAxNTg0LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQU5TSV9CJzogeyRwZiA9IGFycmF5KCAgNzkyLjAwMCwgMTIyNC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0FOU0lfQSc6IHskcGYgPSBhcnJheSggIDYxMi4wMDAsICA3OTIuMDAwKTsgYnJlYWs7fQoJCQkvLyBUcmFkaXRpb25hbCAnTG9vc2UnIE5vcnRoIEFtZXJpY2FuIFBhcGVyIFNpemVzCgkJCWNhc2UgJ1VTTEVER0VSJzoKCQkJY2FzZSAnTEVER0VSJyA6IHskcGYgPSBhcnJheSggMTIyNC4wMDAsICA3OTIuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdPUkdBTklaRVJLJzoKCQkJY2FzZSAnQklCTEUnOgoJCQljYXNlICdVU1RBQkxPSUQnOgoJCQljYXNlICdUQUJMT0lEJzogeyRwZiA9IGFycmF5KCAgNzkyLjAwMCwgMTIyNC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ09SR0FOSVpFUk0nOgoJCQljYXNlICdVU0xFVFRFUic6CgkJCWNhc2UgJ0xFVFRFUicgOiB7JHBmID0gYXJyYXkoICA2MTIuMDAwLCAgNzkyLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnVVNMRUdBTCc6CgkJCWNhc2UgJ0xFR0FMJyAgOiB7JHBmID0gYXJyYXkoICA2MTIuMDAwLCAxMDA4LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnR09WRVJOTUVOVExFVFRFUic6CgkJCWNhc2UgJ0dMRVRURVInOiB7JHBmID0gYXJyYXkoICA1NzYuMDAwLCAgNzU2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnSlVOSU9STEVHQUwnOgoJCQljYXNlICdKTEVHQUwnIDogeyRwZiA9IGFycmF5KCAgNTc2LjAwMCwgIDM2MC4wMDApOyBicmVhazt9CgkJCS8vIE90aGVyIE5vcnRoIEFtZXJpY2FuIFBhcGVyIFNpemVzCgkJCWNhc2UgJ1FVQURERU1ZJzogeyRwZiA9IGFycmF5KCAyNTIwLjAwMCwgMzI0MC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ1NVUEVSX0InOiB7JHBmID0gYXJyYXkoICA5MzYuMDAwLCAxMzY4LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnUVVBUlRPJzogeyRwZiA9IGFycmF5KCAgNjQ4LjAwMCwgIDc5Mi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0dPVkVSTk1FTlRMRUdBTCc6CgkJCWNhc2UgJ0ZPTElPJzogeyRwZiA9IGFycmF5KCAgNjEyLjAwMCwgIDkzNi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ01PTkFSQ0gnOgoJCQljYXNlICdFWEVDVVRJVkUnOiB7JHBmID0gYXJyYXkoICA1MjIuMDAwLCAgNzU2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnT1JHQU5JWkVSTCc6CgkJCWNhc2UgJ1NUQVRFTUVOVCc6CgkJCWNhc2UgJ01FTU8nOiB7JHBmID0gYXJyYXkoICAzOTYuMDAwLCAgNjEyLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRk9PTFNDQVAnOiB7JHBmID0gYXJyYXkoICA1OTUuNDQwLCAgOTM2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQ09NUEFDVCc6IHskcGYgPSBhcnJheSggIDMwNi4wMDAsICA0ODYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdPUkdBTklaRVJKJzogeyRwZiA9IGFycmF5KCAgMTk4LjAwMCwgIDM2MC4wMDApOyBicmVhazt9CgkJCS8vIENhbmFkaWFuIHN0YW5kYXJkIENBTiAyLTkuNjBNCgkJCWNhc2UgJ1AxJzogeyRwZiA9IGFycmF5KCAxNTg3LjQwMiwgMjQzNy43OTUpOyBicmVhazt9CgkJCWNhc2UgJ1AyJzogeyRwZiA9IGFycmF5KCAxMjE4Ljg5OCwgMTU4Ny40MDIpOyBicmVhazt9CgkJCWNhc2UgJ1AzJzogeyRwZiA9IGFycmF5KCAgNzkzLjcwMSwgMTIxOC44OTgpOyBicmVhazt9CgkJCWNhc2UgJ1A0JzogeyRwZiA9IGFycmF5KCAgNjA5LjQ0OSwgIDc5My43MDEpOyBicmVhazt9CgkJCWNhc2UgJ1A1JzogeyRwZiA9IGFycmF5KCAgMzk2Ljg1MCwgIDYwOS40NDkpOyBicmVhazt9CgkJCWNhc2UgJ1A2JzogeyRwZiA9IGFycmF5KCAgMzAzLjMwNywgIDM5Ni44NTApOyBicmVhazt9CgkJCS8vIE5vcnRoIEFtZXJpY2FuIEFyY2hpdGVjdHVyYWwgU2l6ZXMKCQkJY2FzZSAnQVJDSF9FJyA6IHskcGYgPSBhcnJheSggMjU5Mi4wMDAsIDM0NTYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdBUkNIX0UxJzogeyRwZiA9IGFycmF5KCAyMTYwLjAwMCwgMzAyNC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0FSQ0hfRCcgOiB7JHBmID0gYXJyYXkoIDE3MjguMDAwLCAyNTkyLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQlJPQURTSEVFVCc6CgkJCWNhc2UgJ0FSQ0hfQycgOiB7JHBmID0gYXJyYXkoIDEyOTYuMDAwLCAxNzI4LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQVJDSF9CJyA6IHskcGYgPSBhcnJheSggIDg2NC4wMDAsIDEyOTYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdBUkNIX0EnIDogeyRwZiA9IGFycmF5KCAgNjQ4LjAwMCwgIDg2NC4wMDApOyBicmVhazt9CgkJCS8vIC0tLSBOb3J0aCBBbWVyaWNhbiBFbnZlbG9wZSBTaXplcyAtLS0KCQkJLy8gICAtIEFubm91bmNlbWVudCBFbnZlbG9wZXMKCQkJY2FzZSAnQU5ORU5WX0EyJyAgOiB7JHBmID0gYXJyYXkoICAzMTQuNjQwLCAgNDE0LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQU5ORU5WX0E2JyAgOiB7JHBmID0gYXJyYXkoICAzNDIuMDAwLCAgNDY4LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQU5ORU5WX0E3JyAgOiB7JHBmID0gYXJyYXkoICAzNzguMDAwLCAgNTIyLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnQU5ORU5WX0E4JyAgOiB7JHBmID0gYXJyYXkoICAzOTYuMDAwLCAgNTg0LjY0MCk7IGJyZWFrO30KCQkJY2FzZSAnQU5ORU5WX0ExMCcgOiB7JHBmID0gYXJyYXkoICA0NTAuMDAwLCAgNjkyLjY0MCk7IGJyZWFrO30KCQkJY2FzZSAnQU5ORU5WX1NMSU0nOiB7JHBmID0gYXJyYXkoICAyNzguNjQwLCAgNjM4LjY0MCk7IGJyZWFrO30KCQkJLy8gICAtIENvbW1lcmNpYWwgRW52ZWxvcGVzCgkJCWNhc2UgJ0NPTU1FTlZfTjZfMS80JzogeyRwZiA9IGFycmF5KCAgMjUyLjAwMCwgIDQzMi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjZfMy80JzogeyRwZiA9IGFycmF5KCAgMjYwLjY0MCwgIDQ2OC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjgnICAgIDogeyRwZiA9IGFycmF5KCAgMjc4LjY0MCwgIDU0MC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjknICAgIDogeyRwZiA9IGFycmF5KCAgMjc4LjY0MCwgIDYzOC42NDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjEwJyAgIDogeyRwZiA9IGFycmF5KCAgMjk2LjY0MCwgIDY4NC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjExJyAgIDogeyRwZiA9IGFycmF5KCAgMzI0LjAwMCwgIDc0Ni42NDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjEyJyAgIDogeyRwZiA9IGFycmF5KCAgMzQyLjAwMCwgIDc5Mi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NPTU1FTlZfTjE0JyAgIDogeyRwZiA9IGFycmF5KCAgMzYwLjAwMCwgIDgyOC4wMDApOyBicmVhazt9CgkJCS8vICAgLSBDYXRhbG9ndWUgRW52ZWxvcGVzCgkJCWNhc2UgJ0NBVEVOVl9OMScgICAgIDogeyRwZiA9IGFycmF5KCAgNDMyLjAwMCwgIDY0OC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMV8zLzQnIDogeyRwZiA9IGFycmF5KCAgNDY4LjAwMCwgIDY4NC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMicgICAgIDogeyRwZiA9IGFycmF5KCAgNDY4LjAwMCwgIDcyMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMycgICAgIDogeyRwZiA9IGFycmF5KCAgNTA0LjAwMCwgIDcyMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9ONicgICAgIDogeyRwZiA9IGFycmF5KCAgNTQwLjAwMCwgIDc1Ni4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9ONycgICAgIDogeyRwZiA9IGFycmF5KCAgNTc2LjAwMCwgIDc5Mi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OOCcgICAgIDogeyRwZiA9IGFycmF5KCAgNTk0LjAwMCwgIDgxMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OOV8xLzInIDogeyRwZiA9IGFycmF5KCAgNjEyLjAwMCwgIDc1Ni4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OOV8zLzQnIDogeyRwZiA9IGFycmF5KCAgNjMwLjAwMCwgIDgxMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMTBfMS8yJzogeyRwZiA9IGFycmF5KCAgNjQ4LjAwMCwgIDg2NC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMTJfMS8yJzogeyRwZiA9IGFycmF5KCAgNjg0LjAwMCwgIDkwMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMTNfMS8yJzogeyRwZiA9IGFycmF5KCAgNzIwLjAwMCwgIDkzNi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMTRfMS80JzogeyRwZiA9IGFycmF5KCAgODEwLjAwMCwgIDg4Mi4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0NBVEVOVl9OMTRfMS8yJzogeyRwZiA9IGFycmF5KCAgODI4LjAwMCwgMTA0NC4wMDApOyBicmVhazt9CgkJCS8vIEphcGFuZXNlIChKSVMgUCAwMTM4LTYxKSBTdGFuZGFyZCBCLVNlcmllcwoJCQljYXNlICdKSVNfQjAnIDogeyRwZiA9IGFycmF5KCAyOTE5LjY4NSwgNDEyNy4yNDQpOyBicmVhazt9CgkJCWNhc2UgJ0pJU19CMScgOiB7JHBmID0gYXJyYXkoIDIwNjMuNjIyLCAyOTE5LjY4NSk7IGJyZWFrO30KCQkJY2FzZSAnSklTX0IyJyA6IHskcGYgPSBhcnJheSggMTQ1OS44NDMsIDIwNjMuNjIyKTsgYnJlYWs7fQoJCQljYXNlICdKSVNfQjMnIDogeyRwZiA9IGFycmF5KCAxMDMxLjgxMSwgMTQ1OS44NDMpOyBicmVhazt9CgkJCWNhc2UgJ0pJU19CNCcgOiB7JHBmID0gYXJyYXkoICA3MjguNTA0LCAxMDMxLjgxMSk7IGJyZWFrO30KCQkJY2FzZSAnSklTX0I1JyA6IHskcGYgPSBhcnJheSggIDUxNS45MDYsICA3MjguNTA0KTsgYnJlYWs7fQoJCQljYXNlICdKSVNfQjYnIDogeyRwZiA9IGFycmF5KCAgMzYyLjgzNSwgIDUxNS45MDYpOyBicmVhazt9CgkJCWNhc2UgJ0pJU19CNycgOiB7JHBmID0gYXJyYXkoICAyNTcuOTUzLCAgMzYyLjgzNSk7IGJyZWFrO30KCQkJY2FzZSAnSklTX0I4JyA6IHskcGYgPSBhcnJheSggIDE4MS40MTcsICAyNTcuOTUzKTsgYnJlYWs7fQoJCQljYXNlICdKSVNfQjknIDogeyRwZiA9IGFycmF5KCAgMTI3LjU1OSwgIDE4MS40MTcpOyBicmVhazt9CgkJCWNhc2UgJ0pJU19CMTAnOiB7JHBmID0gYXJyYXkoICAgOTAuNzA5LCAgMTI3LjU1OSk7IGJyZWFrO30KCQkJY2FzZSAnSklTX0IxMSc6IHskcGYgPSBhcnJheSggICA2Mi4zNjIsICAgOTAuNzA5KTsgYnJlYWs7fQoJCQljYXNlICdKSVNfQjEyJzogeyRwZiA9IGFycmF5KCAgIDQ1LjM1NCwgICA2Mi4zNjIpOyBicmVhazt9CgkJCS8vIFBBIFNlcmllcwoJCQljYXNlICdQQTAnIDogeyRwZiA9IGFycmF5KCAyMzgxLjEwMiwgMzE3NC44MDMsKTsgYnJlYWs7fQoJCQljYXNlICdQQTEnIDogeyRwZiA9IGFycmF5KCAxNTg3LjQwMiwgMjM4MS4xMDIpOyBicmVhazt9CgkJCWNhc2UgJ1BBMicgOiB7JHBmID0gYXJyYXkoIDExOTAuNTUxLCAxNTg3LjQwMik7IGJyZWFrO30KCQkJY2FzZSAnUEEzJyA6IHskcGYgPSBhcnJheSggIDc5My43MDEsIDExOTAuNTUxKTsgYnJlYWs7fQoJCQljYXNlICdQQTQnIDogeyRwZiA9IGFycmF5KCAgNTk1LjI3NiwgIDc5My43MDEpOyBicmVhazt9CgkJCWNhc2UgJ1BBNScgOiB7JHBmID0gYXJyYXkoICAzOTYuODUwLCAgNTk1LjI3Nik7IGJyZWFrO30KCQkJY2FzZSAnUEE2JyA6IHskcGYgPSBhcnJheSggIDI5Ny42MzgsICAzOTYuODUwKTsgYnJlYWs7fQoJCQljYXNlICdQQTcnIDogeyRwZiA9IGFycmF5KCAgMTk4LjQyNSwgIDI5Ny42MzgpOyBicmVhazt9CgkJCWNhc2UgJ1BBOCcgOiB7JHBmID0gYXJyYXkoICAxNDcuNDAyLCAgMTk4LjQyNSk7IGJyZWFrO30KCQkJY2FzZSAnUEE5JyA6IHskcGYgPSBhcnJheSggICA5OS4yMTMsICAxNDcuNDAyKTsgYnJlYWs7fQoJCQljYXNlICdQQTEwJzogeyRwZiA9IGFycmF5KCAgIDczLjcwMSwgICA5OS4yMTMpOyBicmVhazt9CgkJCS8vIFN0YW5kYXJkIFBob3RvZ3JhcGhpYyBQcmludCBTaXplcwoJCQljYXNlICdQQVNTUE9SVF9QSE9UTyc6IHskcGYgPSBhcnJheSggICA5OS4yMTMsICAxMjcuNTU5KTsgYnJlYWs7fQoJCQljYXNlICdFJyAgIDogeyRwZiA9IGFycmF5KCAgMjMzLjg1OCwgIDM0MC4xNTcpOyBicmVhazt9CgkJCWNhc2UgJ0wnOgoJCQljYXNlICczUicgIDogeyRwZiA9IGFycmF5KCAgMjUyLjI4MywgIDM2MC4wMDApOyBicmVhazt9CgkJCWNhc2UgJ0tHJzoKCQkJY2FzZSAnNFInICA6IHskcGYgPSBhcnJheSggIDI4OS4xMzQsICA0MzAuODY2KTsgYnJlYWs7fQoJCQljYXNlICc0RCcgIDogeyRwZiA9IGFycmF5KCAgMzQwLjE1NywgIDQzMC44NjYpOyBicmVhazt9CgkJCWNhc2UgJzJMJzoKCQkJY2FzZSAnNVInICA6IHskcGYgPSBhcnJheSggIDM2MC4wMDAsICA1MDQuNTY3KTsgYnJlYWs7fQoJCQljYXNlICc4UCc6CgkJCWNhc2UgJzZSJyAgOiB7JHBmID0gYXJyYXkoICA0MzAuODY2LCAgNTc1LjQzMyk7IGJyZWFrO30KCQkJY2FzZSAnNlAnOgoJCQljYXNlICc4UicgIDogeyRwZiA9IGFycmF5KCAgNTc1LjQzMywgIDcyMC4wMDApOyBicmVhazt9CgkJCWNhc2UgJzZQVyc6CgkJCWNhc2UgJ1M4UicgOiB7JHBmID0gYXJyYXkoICA1NzUuNDMzLCAgODY0LjU2Nyk7IGJyZWFrO30KCQkJY2FzZSAnNFAnOgoJCQljYXNlICcxMFInIDogeyRwZiA9IGFycmF5KCAgNzIwLjAwMCwgIDg2NC41NjcpOyBicmVhazt9CgkJCWNhc2UgJzRQVyc6CgkJCWNhc2UgJ1MxMFInOiB7JHBmID0gYXJyYXkoICA3MjAuMDAwLCAxMDgwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnMTFSJyA6IHskcGYgPSBhcnJheSggIDc5MC44NjYsIDEwMDkuMTM0KTsgYnJlYWs7fQoJCQljYXNlICdTMTFSJzogeyRwZiA9IGFycmF5KCAgNzkwLjg2NiwgMTIyNC41NjcpOyBicmVhazt9CgkJCWNhc2UgJzEyUicgOiB7JHBmID0gYXJyYXkoICA4NjQuNTY3LCAxMDgwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnUzEyUic6IHskcGYgPSBhcnJheSggIDg2NC41NjcsIDEyOTIuNTk4KTsgYnJlYWs7fQoJCQkvLyBDb21tb24gTmV3c3BhcGVyIFNpemVzCgkJCWNhc2UgJ05FV1NQQVBFUl9CUk9BRFNIRUVUJzogeyRwZiA9IGFycmF5KCAyMTI1Ljk4NCwgMTcwMC43ODcpOyBicmVhazt9CgkJCWNhc2UgJ05FV1NQQVBFUl9CRVJMSU5FUicgIDogeyRwZiA9IGFycmF5KCAxMzMyLjI4MywgIDg5Mi45MTMpOyBicmVhazt9CgkJCWNhc2UgJ05FV1NQQVBFUl9UQUJMT0lEJzoKCQkJY2FzZSAnTkVXU1BBUEVSX0NPTVBBQ1QnICAgOiB7JHBmID0gYXJyYXkoIDEyMTguODk4LCAgNzkzLjcwMSk7IGJyZWFrO30KCQkJLy8gQnVzaW5lc3MgQ2FyZHMKCQkJY2FzZSAnQ1JFRElUX0NBUkQnOgoJCQljYXNlICdCVVNJTkVTU19DQVJEJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9JU083ODEwJzogeyRwZiA9IGFycmF5KCAgMTUzLjAxNCwgIDI0Mi42NDYpOyBicmVhazt9CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfSVNPMjE2JyA6IHskcGYgPSBhcnJheSggIDE0Ny40MDIsICAyMDkuNzY0KTsgYnJlYWs7fQoJCQljYXNlICdCVVNJTkVTU19DQVJEX0lUJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9VSyc6CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfRlInOgoJCQljYXNlICdCVVNJTkVTU19DQVJEX0RFJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9FUycgICAgIDogeyRwZiA9IGFycmF5KCAgMTU1LjkwNiwgIDI0MC45NDUpOyBicmVhazt9CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfQ0EnOgoJCQljYXNlICdCVVNJTkVTU19DQVJEX1VTJyAgICAgOiB7JHBmID0gYXJyYXkoICAxNDQuNTY3LCAgMjUyLjI4Myk7IGJyZWFrO30KCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9KUCcgICAgIDogeyRwZiA9IGFycmF5KCAgMTU1LjkwNiwgIDI1Ny45NTMpOyBicmVhazt9CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfSEsnICAgICA6IHskcGYgPSBhcnJheSggIDE1My4wNzEsICAyNTUuMTE4KTsgYnJlYWs7fQoJCQljYXNlICdCVVNJTkVTU19DQVJEX0FVJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9ESyc6CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfU0UnICAgICA6IHskcGYgPSBhcnJheSggIDE1NS45MDYsICAyNTUuMTE4KTsgYnJlYWs7fQoJCQljYXNlICdCVVNJTkVTU19DQVJEX1JVJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9DWic6CgkJCWNhc2UgJ0JVU0lORVNTX0NBUkRfRkknOgoJCQljYXNlICdCVVNJTkVTU19DQVJEX0hVJzoKCQkJY2FzZSAnQlVTSU5FU1NfQ0FSRF9JTCcgICAgIDogeyRwZiA9IGFycmF5KCAgMTQxLjczMiwgIDI1NS4xMTgpOyBicmVhazt9CgkJCS8vIEJpbGxib2FyZHMKCQkJY2FzZSAnNFNIRUVUJyA6IHskcGYgPSBhcnJheSggMjg4MC4wMDAsIDQzMjAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICc2U0hFRVQnIDogeyRwZiA9IGFycmF5KCAzNDAxLjU3NSwgNTEwMi4zNjIpOyBicmVhazt9CgkJCWNhc2UgJzEyU0hFRVQnOiB7JHBmID0gYXJyYXkoIDg2NDAuMDAwLCA0MzIwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnMTZTSEVFVCc6IHskcGYgPSBhcnJheSggNTc2MC4wMDAsIDg2NDAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICczMlNIRUVUJzogeyRwZiA9IGFycmF5KDExNTIwLjAwMCwgODY0MC4wMDApOyBicmVhazt9CgkJCWNhc2UgJzQ4U0hFRVQnOiB7JHBmID0gYXJyYXkoMTcyODAuMDAwLCA4NjQwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnNjRTSEVFVCc6IHskcGYgPSBhcnJheSgyMzA0MC4wMDAsIDg2NDAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICc5NlNIRUVUJzogeyRwZiA9IGFycmF5KDM0NTYwLjAwMCwgODY0MC4wMDApOyBicmVhazt9CgkJCS8vIE9sZCBFdXJvcGVhbiBTaXplcwoJCQkvLyAgIC0gT2xkIEltcGVyaWFsIEVuZ2xpc2ggU2l6ZXMKCQkJY2FzZSAnRU5fRU1QRVJPUicgICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDM0NTYuMDAwLCA1MTg0LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fQU5USVFVQVJJQU4nICAgICAgOiB7JHBmID0gYXJyYXkoIDIyMzIuMDAwLCAzODE2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fR1JBTkRfRUFHTEUnICAgICAgOiB7JHBmID0gYXJyYXkoIDIwNzAuMDAwLCAzMDI0LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fRE9VQkxFX0VMRVBIQU5UJyAgOiB7JHBmID0gYXJyYXkoIDE5MjYuMDAwLCAyODgwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fQVRMQVMnICAgICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE4NzIuMDAwLCAyNDQ4LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fQ09MT01CSUVSJyAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE2OTIuMDAwLCAyNDg0LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fRUxFUEhBTlQnICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE2NTYuMDAwLCAyMDE2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fRE9VQkxFX0RFTVknICAgICAgOiB7JHBmID0gYXJyYXkoIDE2MjAuMDAwLCAyNTU2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fSU1QRVJJQUwnICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE1ODQuMDAwLCAyMTYwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fUFJJTkNFU1MnICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE1NDguMDAwLCAyMDE2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fQ0FSVFJJREdFJyAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE1MTIuMDAwLCAxODcyLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fRE9VQkxFX0xBUkdFX1BPU1QnOiB7JHBmID0gYXJyYXkoIDE1MTIuMDAwLCAyMzc2LjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fUk9ZQUwnICAgICAgICAgICAgOiB7JHBmID0gYXJyYXkoIDE0NDAuMDAwLCAxODAwLjAwMCk7IGJyZWFrO30KCQkJY2FzZSAnRU5fU0hFRVQnOgoJCQljYXNlICdFTl9IQUxGX1BPU1QnICAgICAgICA6IHskcGYgPSBhcnJheSggMTQwNC4wMDAsIDE2OTIuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9TVVBFUl9ST1lBTCcgICAgICA6IHskcGYgPSBhcnJheSggMTM2OC4wMDAsIDE5NDQuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9ET1VCTEVfUE9TVCcgICAgICA6IHskcGYgPSBhcnJheSggMTM2OC4wMDAsIDIxOTYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9NRURJVU0nICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTI2MC4wMDAsIDE2NTYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9ERU1ZJyAgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTI2MC4wMDAsIDE2MjAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9MQVJHRV9QT1NUJyAgICAgICA6IHskcGYgPSBhcnJheSggMTE4OC4wMDAsIDE1MTIuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9DT1BZX0RSQVVHSFQnICAgICA6IHskcGYgPSBhcnJheSggMTE1Mi4wMDAsIDE0NDAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9QT1NUJyAgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTExNi4wMDAsIDEzODYuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9DUk9XTicgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTA4MC4wMDAsIDE0NDAuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9QSU5DSEVEX1BPU1QnICAgICA6IHskcGYgPSBhcnJheSggMTA2Mi4wMDAsIDEzMzIuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9CUklFRicgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggIDk3Mi4wMDAsIDExNTIuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9GT09MU0NBUCcgICAgICAgICA6IHskcGYgPSBhcnJheSggIDk3Mi4wMDAsIDEyMjQuMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9TTUFMTF9GT09MU0NBUCcgICA6IHskcGYgPSBhcnJheSggIDk1NC4wMDAsIDExODguMDAwKTsgYnJlYWs7fQoJCQljYXNlICdFTl9QT1RUJyAgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggIDkwMC4wMDAsIDEwODAuMDAwKTsgYnJlYWs7fQoJCQkvLyAgIC0gT2xkIEltcGVyaWFsIEJlbGdpYW4gU2l6ZXMKCQkJY2FzZSAnQkVfR1JBTkRfQUlHTEUnIDogeyRwZiA9IGFycmF5KCAxOTg0LjI1MiwgMjk0OC4wMzEpOyBicmVhazt9CgkJCWNhc2UgJ0JFX0NPTE9NQklFUicgICA6IHskcGYgPSBhcnJheSggMTc1Ny40ODAsIDI0MDkuNDQ5KTsgYnJlYWs7fQoJCQljYXNlICdCRV9ET1VCTEVfQ0FSUkUnOiB7JHBmID0gYXJyYXkoIDE3NTcuNDgwLCAyNjA3Ljg3NCk7IGJyZWFrO30KCQkJY2FzZSAnQkVfRUxFUEhBTlQnICAgIDogeyRwZiA9IGFycmF5KCAxNzQ2LjE0MiwgMjE4Mi42NzcpOyBicmVhazt9CgkJCWNhc2UgJ0JFX1BFVElUX0FJR0xFJyA6IHskcGYgPSBhcnJheSggMTcwMC43ODcsIDIzODEuMTAyKTsgYnJlYWs7fQoJCQljYXNlICdCRV9HUkFORF9KRVNVUycgOiB7JHBmID0gYXJyYXkoIDE1NTkuMDU1LCAyMDY5LjI5MSk7IGJyZWFrO30KCQkJY2FzZSAnQkVfSkVTVVMnICAgICAgIDogeyRwZiA9IGFycmF5KCAxNTMwLjcwOSwgMjA2OS4yOTEpOyBicmVhazt9CgkJCWNhc2UgJ0JFX1JBSVNJTicgICAgICA6IHskcGYgPSBhcnJheSggMTQxNy4zMjMsIDE4NDIuNTIwKTsgYnJlYWs7fQoJCQljYXNlICdCRV9HUkFORF9NRURJQU4nOiB7JHBmID0gYXJyYXkoIDEzMDMuOTM3LCAxNzE0Ljk2MSk7IGJyZWFrO30KCQkJY2FzZSAnQkVfRE9VQkxFX1BPU1RFJzogeyRwZiA9IGFycmF5KCAxMjMzLjA3MSwgMTYwMS41NzUpOyBicmVhazt9CgkJCWNhc2UgJ0JFX0NPUVVJTExFJyAgICA6IHskcGYgPSBhcnJheSggMTIxOC44OTgsIDE1ODcuNDAyKTsgYnJlYWs7fQoJCQljYXNlICdCRV9QRVRJVF9NRURJQU4nOiB7JHBmID0gYXJyYXkoIDExNzYuMzc4LCAxNTAyLjM2Mik7IGJyZWFrO30KCQkJY2FzZSAnQkVfUlVDSEUnICAgICAgIDogeyRwZiA9IGFycmF5KCAxMDIwLjQ3MiwgMTMwMy45MzcpOyBicmVhazt9CgkJCWNhc2UgJ0JFX1BST1BBVFJJQScgICA6IHskcGYgPSBhcnJheSggIDk3Ny45NTMsIDEyMTguODk4KTsgYnJlYWs7fQoJCQljYXNlICdCRV9MWVMnICAgICAgICAgOiB7JHBmID0gYXJyYXkoICA4OTguNTgzLCAxMTI1LjM1NCk7IGJyZWFrO30KCQkJY2FzZSAnQkVfUE9UJyAgICAgICAgIDogeyRwZiA9IGFycmF5KCAgODcwLjIzNiwgMTA4OC41MDQpOyBicmVhazt9CgkJCWNhc2UgJ0JFX1JPU0VUVEUnICAgICA6IHskcGYgPSBhcnJheSggIDc2NS4zNTQsICA5ODMuNjIyKTsgYnJlYWs7fQoJCQkvLyAgIC0gT2xkIEltcGVyaWFsIEZyZW5jaCBTaXplcwoJCQljYXNlICdGUl9VTklWRVJTJyAgICAgICAgICA6IHskcGYgPSBhcnJheSggMjgzNC42NDYsIDM2ODUuMDM5KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ09MT01CSUVSJyA6IHskcGYgPSBhcnJheSggMjU1MS4xODEsIDM1NzEuNjU0KTsgYnJlYWs7fQoJCQljYXNlICdGUl9HUkFOREVfTU9OREUnICAgICA6IHskcGYgPSBhcnJheSggMjU1MS4xODEsIDM1NzEuNjU0KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfU09MRUlMJyAgICA6IHskcGYgPSBhcnJheSggMjI2Ny43MTcsIDM0MDEuNTc1KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfSkVTVVMnICAgICA6IHskcGYgPSBhcnJheSggMjE1NC4zMzEsIDMxNzQuODAzKTsgYnJlYWs7fQoJCQljYXNlICdGUl9HUkFORF9BSUdMRScgICAgICA6IHskcGYgPSBhcnJheSggMjEyNS45ODQsIDMwMDQuNzI0KTsgYnJlYWs7fQoJCQljYXNlICdGUl9QRVRJVF9BSUdMRScgICAgICA6IHskcGYgPSBhcnJheSggMTk4NC4yNTIsIDI2NjQuNTY3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfUkFJU0lOJyAgICA6IHskcGYgPSBhcnJheSggMTg0Mi41MjAsIDI4MzQuNjQ2KTsgYnJlYWs7fQoJCQljYXNlICdGUl9KT1VSTkFMJyAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTg0Mi41MjAsIDI2NjQuNTY3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9DT0xPTUJJRVJfQUZGSUNIRSc6IHskcGYgPSBhcnJheSggMTc4NS44MjcsIDI1NTEuMTgxKTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ0FWQUxJRVInICA6IHskcGYgPSBhcnJheSggMTc1Ny40ODAsIDI2MDcuODc0KTsgYnJlYWs7fQoJCQljYXNlICdGUl9DTE9DSEUnICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTcwMC43ODcsIDIyNjcuNzE3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9TT0xFSUwnICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTcwMC43ODcsIDIyNjcuNzE3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ0FSUkUnICAgICA6IHskcGYgPSBhcnJheSggMTU4Ny40MDIsIDI1NTEuMTgxKTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ09RVUlMTEUnICA6IHskcGYgPSBhcnJheSggMTU4Ny40MDIsIDI0OTQuNDg4KTsgYnJlYWs7fQoJCQljYXNlICdGUl9KRVNVUycgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTU4Ny40MDIsIDIxNTQuMzMxKTsgYnJlYWs7fQoJCQljYXNlICdGUl9SQUlTSU4nICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTQxNy4zMjMsIDE4NDIuNTIwKTsgYnJlYWs7fQoJCQljYXNlICdGUl9DQVZBTElFUicgICAgICAgICA6IHskcGYgPSBhcnJheSggMTMwMy45MzcsIDE3NTcuNDgwKTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ09VUk9OTkUnICA6IHskcGYgPSBhcnJheSggMTMwMy45MzcsIDIwNDAuOTQ1KTsgYnJlYWs7fQoJCQljYXNlICdGUl9DQVJSRScgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTI3NS41OTEsIDE1ODcuNDAyKTsgYnJlYWs7fQoJCQljYXNlICdGUl9DT1FVSUxMRScgICAgICAgICA6IHskcGYgPSBhcnJheSggMTI0Ny4yNDQsIDE1ODcuNDAyKTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfVEVMTElFUkUnICA6IHskcGYgPSBhcnJheSggMTI0Ny4yNDQsIDE5MjcuNTU5KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfQ0xPQ0hFJyAgICA6IHskcGYgPSBhcnJheSggMTEzMy44NTgsIDE3MDAuNzg3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9ET1VCTEVfUE9UJyAgICAgICA6IHskcGYgPSBhcnJheSggMTEzMy44NTgsIDE3NTcuNDgwKTsgYnJlYWs7fQoJCQljYXNlICdGUl9FQ1UnICAgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggMTEzMy44NTgsIDE0NzQuMDE2KTsgYnJlYWs7fQoJCQljYXNlICdGUl9DT1VST05ORScgICAgICAgICA6IHskcGYgPSBhcnJheSggMTAyMC40NzIsIDEzMDMuOTM3KTsgYnJlYWs7fQoJCQljYXNlICdGUl9URUxMSUVSRScgICAgICAgICA6IHskcGYgPSBhcnJheSggIDk2My43ODAsIDEyNDcuMjQ0KTsgYnJlYWs7fQoJCQljYXNlICdGUl9QT1QnICAgICAgICAgICAgICA6IHskcGYgPSBhcnJheSggIDg3OC43NDAsIDExMzMuODU4KTsgYnJlYWs7fQoJCQkvLyBERUZBVUxUIElTTyBBNAoJCQlkZWZhdWx0OiB7JHBmID0gYXJyYXkoICA1OTUuMjc2LCAgODQxLjg5MCk7IGJyZWFrO30KCQl9CgkJcmV0dXJuICRwZjsKCX0KCgkvKioKCSAqIFNldCBwYWdlIGJvdW5kYXJpZXMuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgcGFnZSBudW1iZXIKCSAqIEBwYXJhbSAkdHlwZSAoc3RyaW5nKSB2YWxpZCB2YWx1ZXMgYXJlOiA8dWw+PGxpPidNZWRpYUJveCcgOiB0aGUgYm91bmRhcmllcyBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtIG9uIHdoaWNoIHRoZSBwYWdlIHNoYWxsIGJlIGRpc3BsYXllZCBvciBwcmludGVkOzwvbGk+PGxpPidDcm9wQm94JyA6IHRoZSB2aXNpYmxlIHJlZ2lvbiBvZiBkZWZhdWx0IHVzZXIgc3BhY2U7PC9saT48bGk+J0JsZWVkQm94JyA6IHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIHNoYWxsIGJlIGNsaXBwZWQgd2hlbiBvdXRwdXQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50OzwvbGk+PGxpPidUcmltQm94JyA6IHRoZSBpbnRlbmRlZCBkaW1lbnNpb25zIG9mIHRoZSBmaW5pc2hlZCBwYWdlIGFmdGVyIHRyaW1taW5nOzwvbGk+PGxpPidBcnRCb3gnIDogdGhlIHBhZ2UncyBtZWFuaW5nZnVsIGNvbnRlbnQgKGluY2x1ZGluZyBwb3RlbnRpYWwgd2hpdGUgc3BhY2UpLjwvbGk+PC91bD4KCSAqIEBwYXJhbSAkbGx4IChmbG9hdCkgbG93ZXItbGVmdCB4IGNvb3JkaW5hdGUgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkbGx5IChmbG9hdCkgbG93ZXItbGVmdCB5IGNvb3JkaW5hdGUgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkdXJ4IChmbG9hdCkgdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJHVyeSAoZmxvYXQpIHVwcGVyLXJpZ2h0IHkgY29vcmRpbmF0ZSBpbiB1c2VyIHVuaXRzLgoJICogQHBhcmFtICRwb2ludHMgKGJvb2xlYW4pIElmIHRydWUgdXNlcyB1c2VyIHVuaXRzIGFzIHVuaXQgb2YgbWVhc3VyZSwgb3RoZXJ3aXNlIHVzZXMgUERGIHBvaW50cy4KCSAqIEBwYXJhbSAkayAoZmxvYXQpIFNjYWxlIGZhY3RvciAobnVtYmVyIG9mIHBvaW50cyBpbiB1c2VyIHVuaXQpLgoJICogQHBhcmFtICRwYWdlZGltIChhcnJheSkgQXJyYXkgb2YgcGFnZSBkaW1lbnNpb25zLgoJICogQHJldHVybiBwYWdlZGltIGFycmF5IG9mIHBhZ2UgZGltZW5zaW9ucy4KCSAqIEBzaW5jZSA1LjAuMDEwICgyMDEwLTA1LTE3KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBzZXRQYWdlQm94ZXMoJHBhZ2UsICR0eXBlLCAkbGx4LCAkbGx5LCAkdXJ4LCAkdXJ5LCAkcG9pbnRzPWZhbHNlLCAkaywgJHBhZ2VkaW09YXJyYXkoKSkgewoJCWlmICghaXNzZXQoJHBhZ2VkaW1bJHBhZ2VdKSkgewoJCQkvLyBpbml0aWFsaXplIGFycmF5CgkJCSRwYWdlZGltWyRwYWdlXSA9IGFycmF5KCk7CgkJfQoJCWlmICghaW5fYXJyYXkoJHR5cGUsIHNlbGY6OiRwYWdlYm94ZXMpKSB7CgkJCXJldHVybjsKCQl9CgkJaWYgKCRwb2ludHMpIHsKCQkJJGsgPSAxOwoJCX0KCQkkcGFnZWRpbVskcGFnZV1bJHR5cGVdWydsbHgnXSA9ICgkbGx4ICogJGspOwoJCSRwYWdlZGltWyRwYWdlXVskdHlwZV1bJ2xseSddID0gKCRsbHkgKiAkayk7CgkJJHBhZ2VkaW1bJHBhZ2VdWyR0eXBlXVsndXJ4J10gPSAoJHVyeCAqICRrKTsKCQkkcGFnZWRpbVskcGFnZV1bJHR5cGVdWyd1cnknXSA9ICgkdXJ5ICogJGspOwoJCXJldHVybiAkcGFnZWRpbTsKCX0KCgkvKioKCSAqIFN3YXAgWCBhbmQgWSBjb29yZGluYXRlcyBvZiBwYWdlIGJveGVzIChjaGFuZ2UgcGFnZSBib3hlcyBvcmllbnRhdGlvbikuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgcGFnZSBudW1iZXIKCSAqIEBwYXJhbSAkcGFnZWRpbSAoYXJyYXkpIEFycmF5IG9mIHBhZ2UgZGltZW5zaW9ucy4KCSAqIEByZXR1cm4gcGFnZWRpbSBhcnJheSBvZiBwYWdlIGRpbWVuc2lvbnMuCgkgKiBAc2luY2UgNS4wLjAxMCAoMjAxMC0wNS0xNykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc3dhcFBhZ2VCb3hDb29yZGluYXRlcygkcGFnZSwgJHBhZ2VkaW0pIHsKCQlmb3JlYWNoIChzZWxmOjokcGFnZWJveGVzIGFzICR0eXBlKSB7CgkJCS8vIHN3YXAgWCBhbmQgWSBjb29yZGluYXRlcwoJCQlpZiAoaXNzZXQoJHBhZ2VkaW1bJHBhZ2VdWyR0eXBlXSkpIHsKCQkJCSR0bXAgPSAkcGFnZWRpbVskcGFnZV1bJHR5cGVdWydsbHgnXTsKCQkJCSRwYWdlZGltWyRwYWdlXVskdHlwZV1bJ2xseCddID0gJHBhZ2VkaW1bJHBhZ2VdWyR0eXBlXVsnbGx5J107CgkJCQkkcGFnZWRpbVskcGFnZV1bJHR5cGVdWydsbHknXSA9ICR0bXA7CgkJCQkkdG1wID0gJHBhZ2VkaW1bJHBhZ2VdWyR0eXBlXVsndXJ4J107CgkJCQkkcGFnZWRpbVskcGFnZV1bJHR5cGVdWyd1cngnXSA9ICRwYWdlZGltWyRwYWdlXVskdHlwZV1bJ3VyeSddOwoJCQkJJHBhZ2VkaW1bJHBhZ2VdWyR0eXBlXVsndXJ5J10gPSAkdG1wOwoJCQl9CgkJfQoJCXJldHVybiAkcGFnZWRpbTsKCX0KCgkvKioKCSAqIEdldCB0aGUgY2Fub25pY2FsIHBhZ2UgbGF5b3V0IG1vZGUuCgkgKiBAcGFyYW0gJGxheW91dCAoc3RyaW5nKSBUaGUgcGFnZSBsYXlvdXQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5TaW5nbGVQYWdlIERpc3BsYXkgb25lIHBhZ2UgYXQgYSB0aW1lPC9saT48bGk+T25lQ29sdW1uIERpc3BsYXkgdGhlIHBhZ2VzIGluIG9uZSBjb2x1bW48L2xpPjxsaT5Ud29Db2x1bW5MZWZ0IERpc3BsYXkgdGhlIHBhZ2VzIGluIHR3byBjb2x1bW5zLCB3aXRoIG9kZC1udW1iZXJlZCBwYWdlcyBvbiB0aGUgbGVmdDwvbGk+PGxpPlR3b0NvbHVtblJpZ2h0IERpc3BsYXkgdGhlIHBhZ2VzIGluIHR3byBjb2x1bW5zLCB3aXRoIG9kZC1udW1iZXJlZCBwYWdlcyBvbiB0aGUgcmlnaHQ8L2xpPjxsaT5Ud29QYWdlTGVmdCAoUERGIDEuNSkgRGlzcGxheSB0aGUgcGFnZXMgdHdvIGF0IGEgdGltZSwgd2l0aCBvZGQtbnVtYmVyZWQgcGFnZXMgb24gdGhlIGxlZnQ8L2xpPjxsaT5Ud29QYWdlUmlnaHQgKFBERiAxLjUpIERpc3BsYXkgdGhlIHBhZ2VzIHR3byBhdCBhIHRpbWUsIHdpdGggb2RkLW51bWJlcmVkIHBhZ2VzIG9uIHRoZSByaWdodDwvbGk+PC91bD4KCSAqIEByZXR1cm4gKHN0cmluZykgQ2Fub25pY2FsIHBhZ2UgbGF5b3V0IG5hbWUuCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBhZ2VMYXlvdXRNb2RlKCRsYXlvdXQ9J1NpbmdsZVBhZ2UnKSB7CgkJc3dpdGNoICgkbGF5b3V0KSB7CgkJCWNhc2UgJ2RlZmF1bHQnOgoJCQljYXNlICdzaW5nbGUnOgoJCQljYXNlICdTaW5nbGVQYWdlJzogewoJCQkJJGxheW91dF9tb2RlID0gJ1NpbmdsZVBhZ2UnOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnY29udGludW91cyc6CgkJCWNhc2UgJ09uZUNvbHVtbic6IHsKCQkJCSRsYXlvdXRfbW9kZSA9ICdPbmVDb2x1bW4nOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAndHdvJzoKCQkJY2FzZSAnVHdvQ29sdW1uTGVmdCc6IHsKCQkJCSRsYXlvdXRfbW9kZSA9ICdUd29Db2x1bW5MZWZ0JzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1R3b0NvbHVtblJpZ2h0JzogewoJCQkJJGxheW91dF9tb2RlID0gJ1R3b0NvbHVtblJpZ2h0JzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1R3b1BhZ2VMZWZ0JzogewoJCQkJJGxheW91dF9tb2RlID0gJ1R3b1BhZ2VMZWZ0JzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1R3b1BhZ2VSaWdodCc6IHsKCQkJCSRsYXlvdXRfbW9kZSA9ICdUd29QYWdlUmlnaHQnOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJGxheW91dF9tb2RlID0gJ1NpbmdsZVBhZ2UnOwoJCQl9CgkJfQoJCXJldHVybiAkbGF5b3V0X21vZGU7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNhbm9uaWNhbCBwYWdlIGxheW91dCBtb2RlLgoJICogQHBhcmFtICRtb2RlIChzdHJpbmcpIEEgbmFtZSBvYmplY3Qgc3BlY2lmeWluZyBob3cgdGhlIGRvY3VtZW50IHNob3VsZCBiZSBkaXNwbGF5ZWQgd2hlbiBvcGVuZWQ6PHVsPjxsaT5Vc2VOb25lIE5laXRoZXIgZG9jdW1lbnQgb3V0bGluZSBub3IgdGh1bWJuYWlsIGltYWdlcyB2aXNpYmxlPC9saT48bGk+VXNlT3V0bGluZXMgRG9jdW1lbnQgb3V0bGluZSB2aXNpYmxlPC9saT48bGk+VXNlVGh1bWJzIFRodW1ibmFpbCBpbWFnZXMgdmlzaWJsZTwvbGk+PGxpPkZ1bGxTY3JlZW4gRnVsbC1zY3JlZW4gbW9kZSwgd2l0aCBubyBtZW51IGJhciwgd2luZG93IGNvbnRyb2xzLCBvciBhbnkgb3RoZXIgd2luZG93IHZpc2libGU8L2xpPjxsaT5Vc2VPQyAoUERGIDEuNSkgT3B0aW9uYWwgY29udGVudCBncm91cCBwYW5lbCB2aXNpYmxlPC9saT48bGk+VXNlQXR0YWNobWVudHMgKFBERiAxLjYpIEF0dGFjaG1lbnRzIHBhbmVsIHZpc2libGU8L2xpPjwvdWw+CgkgKiBAcmV0dXJuIChzdHJpbmcpIENhbm9uaWNhbCBwYWdlIG1vZGUgbmFtZS4KCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0UGFnZU1vZGUoJG1vZGU9J1VzZU5vbmUnKSB7CgkJc3dpdGNoICgkbW9kZSkgewoJCQljYXNlICdVc2VOb25lJzogewoJCQkJJHBhZ2VfbW9kZSA9ICdVc2VOb25lJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1VzZU91dGxpbmVzJzogewoJCQkJJHBhZ2VfbW9kZSA9ICdVc2VPdXRsaW5lcyc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdVc2VUaHVtYnMnOiB7CgkJCQkkcGFnZV9tb2RlID0gJ1VzZVRodW1icyc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdGdWxsU2NyZWVuJzogewoJCQkJJHBhZ2VfbW9kZSA9ICdGdWxsU2NyZWVuJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1VzZU9DJzogewoJCQkJJHBhZ2VfbW9kZSA9ICdVc2VPQyc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICcnOiB7CgkJCQkkcGFnZV9tb2RlID0gJ1VzZUF0dGFjaG1lbnRzJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCSRwYWdlX21vZGUgPSAnVXNlTm9uZSc7CgkJCX0KCQl9CgkJcmV0dXJuICRwYWdlX21vZGU7Cgl9CgoJLyoqCgkgKiBDaGVjayBpZiB0aGUgVVJMIGV4aXN0LgoJICogQHBhcmFtICR1cmwgKHN0cmluZykgVVJMIHRvIGNoZWNrLgoJICogQHJldHVybiBCb29sZWFuIHRydWUgaWYgdGhlIFVSbCBleGlzdCwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHNpbmNlIDUuOS4yMDQgKDIwMTMtMDEtMjgpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRVUkwoJHVybCkgewoJCSRoZWFkZXJzID0gQGdldF9oZWFkZXJzKCR1cmwpOwogICAgCXJldHVybiAoc3RycG9zKCRoZWFkZXJzWzBdLCAnMjAwJykgIT09IGZhbHNlKTsKCX0KCgkvKioKCSAqIFJlbW92ZXMgU0hZIGNoYXJhY3RlcnMgZnJvbSB0ZXh0LgoJICogVW5pY29kZSBEYXRhOjx1bD4KCSAqIDxsaT5OYW1lIDogU09GVCBIWVBIRU4sIGNvbW1vbmx5IGFiYnJldmlhdGVkIGFzIFNIWTwvbGk+CgkgKiA8bGk+SFRNTCBFbnRpdHkgKGRlY2ltYWwpOiAiJmFtcDsjMTczOyI8L2xpPgoJICogPGxpPkhUTUwgRW50aXR5IChoZXgpOiAiJmFtcDsjeGFkOyI8L2xpPgoJICogPGxpPkhUTUwgRW50aXR5IChuYW1lZCk6ICImYW1wO3NoeTsiPC9saT4KCSAqIDxsaT5Ib3cgdG8gdHlwZSBpbiBNaWNyb3NvZnQgV2luZG93czogW0FsdCArMDBBRF0gb3IgW0FsdCAwMTczXTwvbGk+CgkgKiA8bGk+VVRGLTggKGhleCk6IDB4QzIgMHhBRCAoYzJhZCk8L2xpPgoJICogPGxpPlVURi04IGNoYXJhY3RlcjogY2hyKDE5NCkuY2hyKDE3Myk8L2xpPgoJICogPC91bD4KCSAqIEBwYXJhbSAkdHh0IChzdHJpbmcpIGlucHV0IHN0cmluZwoJICogQHBhcmFtICR1bmljb2RlIChib29sZWFuKSBUcnVlIGlmIHdlIGFyZSBpbiB1bmljb2RlIG1vZGUsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEByZXR1cm4gc3RyaW5nIHdpdGhvdXQgU0hZIGNoYXJhY3RlcnMuCgkgKiBAc2luY2UgKDQuNS4wMTkpIDIwMDktMDItMjgKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmVtb3ZlU0hZKCR0eHQ9JycsICR1bmljb2RlPXRydWUpIHsKCQkkdHh0ID0gcHJlZ19yZXBsYWNlKCcvKFtcXHhjMl17MX1bXFx4YWRdezF9KS8nLCAnJywgJHR4dCk7CgkJaWYgKCEkdW5pY29kZSkgewoJCQkkdHh0ID0gcHJlZ19yZXBsYWNlKCcvKFtcXHhhZF17MX0pLycsICcnLCAkdHh0KTsKCQl9CgkJcmV0dXJuICR0eHQ7Cgl9CgoKCS8qKgoJICogR2V0IHRoZSBib3JkZXIgbW9kZSBhY2NvdW50aW5nIGZvciBtdWx0aWNlbGwgcG9zaXRpb24gKG9wZW5zIGJvdHRvbSBzaWRlIG9mIG11bHRpY2VsbCBjcm9zc2luZyBwYWdlcykKCSAqIEBwYXJhbSAkYnJkIChtaXhlZCkgSW5kaWNhdGVzIGlmIGJvcmRlcnMgbXVzdCBiZSBkcmF3biBhcm91bmQgdGhlIGNlbGwgYmxvY2suIFRoZSB2YWx1ZSBjYW4gYmUgYSBudW1iZXI6PHVsPjxsaT4wOiBubyBib3JkZXIgKGRlZmF1bHQpPC9saT48bGk+MTogZnJhbWU8L2xpPjwvdWw+b3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cDogYXJyYXkoJ0xUUkInID0+IGFycmF5KCd3aWR0aCcgPT4gMiwgJ2NhcCcgPT4gJ2J1dHQnLCAnam9pbicgPT4gJ21pdGVyJywgJ2Rhc2gnID0+IDAsICdjb2xvcicgPT4gYXJyYXkoMCwgMCwgMCkpKQoJICogQHBhcmFtICRwb3NpdGlvbiAoc3RyaW5nKSBtdWx0aWNlbGwgcG9zaXRpb246ICdzdGFydCcsICdtaWRkbGUnLCAnZW5kJwoJICogQHBhcmFtICRvcGVuY2VsbCAoYm9vbGVhbikgVHJ1ZSB3aGVuIHRoZSBjZWxsIGlzIGxlZnQgb3BlbiBhdCB0aGUgcGFnZSBib3R0b20sIGZhbHNlIG90aGVyd2lzZS4KCSAqIEByZXR1cm4gYm9yZGVyIG1vZGUgYXJyYXkKCSAqIEBzaW5jZSA0LjQuMDAyICgyMDA4LTEyLTA5KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRCb3JkZXJNb2RlKCRicmQsICRwb3NpdGlvbj0nc3RhcnQnLCAkb3BlbmNlbGw9dHJ1ZSkgewoJCWlmICgoISRvcGVuY2VsbCkgT1IgZW1wdHkoJGJyZCkpIHsKCQkJcmV0dXJuICRicmQ7CgkJfQoJCWlmICgkYnJkID09IDEpIHsKCQkJJGJyZCA9ICdMVFJCJzsKCQl9CgkJaWYgKGlzX3N0cmluZygkYnJkKSkgewoJCQkvLyBjb252ZXJ0IHN0cmluZyB0byBhcnJheQoJCQkkc2xlbiA9IHN0cmxlbigkYnJkKTsKCQkJJG5ld2JyZCA9IGFycmF5KCk7CgkJCWZvciAoJGkgPSAwOyAkaSA8ICRzbGVuOyArKyRpKSB7CgkJCQkkbmV3YnJkWyRicmRbJGldXSA9IGFycmF5KCdjYXAnID0+ICdzcXVhcmUnLCAnam9pbicgPT4gJ21pdGVyJyk7CgkJCX0KCQkJJGJyZCA9ICRuZXdicmQ7CgkJfQoJCWZvcmVhY2ggKCRicmQgYXMgJGJvcmRlciA9PiAkc3R5bGUpIHsKCQkJc3dpdGNoICgkcG9zaXRpb24pIHsKCQkJCWNhc2UgJ3N0YXJ0JzogewoJCQkJCWlmIChzdHJwb3MoJGJvcmRlciwgJ0InKSAhPT0gZmFsc2UpIHsKCQkJCQkJLy8gcmVtb3ZlIGJvdHRvbSBsaW5lCgkJCQkJCSRuZXdrZXkgPSBzdHJfcmVwbGFjZSgnQicsICcnLCAkYm9yZGVyKTsKCQkJCQkJaWYgKHN0cmxlbigkbmV3a2V5KSA+IDApIHsKCQkJCQkJCSRicmRbJG5ld2tleV0gPSAkc3R5bGU7CgkJCQkJCX0KCQkJCQkJdW5zZXQoJGJyZFskYm9yZGVyXSk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnbWlkZGxlJzogewoJCQkJCWlmIChzdHJwb3MoJGJvcmRlciwgJ0InKSAhPT0gZmFsc2UpIHsKCQkJCQkJLy8gcmVtb3ZlIGJvdHRvbSBsaW5lCgkJCQkJCSRuZXdrZXkgPSBzdHJfcmVwbGFjZSgnQicsICcnLCAkYm9yZGVyKTsKCQkJCQkJaWYgKHN0cmxlbigkbmV3a2V5KSA+IDApIHsKCQkJCQkJCSRicmRbJG5ld2tleV0gPSAkc3R5bGU7CgkJCQkJCX0KCQkJCQkJdW5zZXQoJGJyZFskYm9yZGVyXSk7CgkJCQkJCSRib3JkZXIgPSAkbmV3a2V5OwoJCQkJCX0KCQkJCQlpZiAoc3RycG9zKCRib3JkZXIsICdUJykgIT09IGZhbHNlKSB7CgkJCQkJCS8vIHJlbW92ZSBib3R0b20gbGluZQoJCQkJCQkkbmV3a2V5ID0gc3RyX3JlcGxhY2UoJ1QnLCAnJywgJGJvcmRlcik7CgkJCQkJCWlmIChzdHJsZW4oJG5ld2tleSkgPiAwKSB7CgkJCQkJCQkkYnJkWyRuZXdrZXldID0gJHN0eWxlOwoJCQkJCQl9CgkJCQkJCXVuc2V0KCRicmRbJGJvcmRlcl0pOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ2VuZCc6IHsKCQkJCQlpZiAoc3RycG9zKCRib3JkZXIsICdUJykgIT09IGZhbHNlKSB7CgkJCQkJCS8vIHJlbW92ZSBib3R0b20gbGluZQoJCQkJCQkkbmV3a2V5ID0gc3RyX3JlcGxhY2UoJ1QnLCAnJywgJGJvcmRlcik7CgkJCQkJCWlmIChzdHJsZW4oJG5ld2tleSkgPiAwKSB7CgkJCQkJCQkkYnJkWyRuZXdrZXldID0gJHN0eWxlOwoJCQkJCQl9CgkJCQkJCXVuc2V0KCRicmRbJGJvcmRlcl0pOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJGJyZDsKCX0KCgkvKioKCSAqIERldGVybWluZSB3aGV0aGVyIGEgc3RyaW5nIGlzIGVtcHR5LgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIHRvIGJlIGNoZWNrZWQKCSAqIEByZXR1cm4gYm9vbGVhbiB0cnVlIGlmIHN0cmluZyBpcyBlbXB0eQoJICogQHNpbmNlIDQuNS4wNDQgKDIwMDktMDQtMTYpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVtcHR5X3N0cmluZygkc3RyKSB7CgkJcmV0dXJuIChpc19udWxsKCRzdHIpIE9SIChpc19zdHJpbmcoJHN0cikgQU5EIChzdHJsZW4oJHN0cikgPT0gMCkpKTsKCX0KCgkvKioKCSAqIFJldHVybnMgYSB0ZW1wb3JhcnkgZmlsZW5hbWUgZm9yIGNhY2hpbmcgb2JqZWN0IG9uIGZpbGVzeXN0ZW0uCgkgKiBAcGFyYW0gJHR5cGUgKHN0cmluZykgVHlwZSBvZiBmaWxlIChuYW1lIG9mIHRoZSBzdWJkaXIgb24gdGhlIHRjcGRmIGNhY2hlIGZvbGRlcikuCgkgKiBAcmV0dXJuIHN0cmluZyBmaWxlbmFtZS4KCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRPYmpGaWxlbmFtZSgkdHlwZT0ndG1wJykgewoJCXJldHVybiB0ZW1wbmFtKEtfUEFUSF9DQUNIRSwgJ19fdGNwZGZfJy4kdHlwZS4nXycubWQ1KGdldG15cGlkKCkudW5pcWlkKCcnLCB0cnVlKS5yYW5kKCkubWljcm90aW1lKHRydWUpKS4nXycpOwoJfQoKCS8qKgoJICogQWRkICJcIiBiZWZvcmUgIlwiLCAiKCIgYW5kICIpIgoJICogQHBhcmFtICRzIChzdHJpbmcpIHN0cmluZyB0byBlc2NhcGUuCgkgKiBAcmV0dXJuIHN0cmluZyBlc2NhcGVkIHN0cmluZy4KCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2VzY2FwZSgkcykgewoJCS8vIHRoZSBjaHIoMTMpIHN1YnN0aXR1dGlvbiBmaXhlcyB0aGUgQnVncyBpdGVtICMxNDIxMjkwLgoJCXJldHVybiBzdHJ0cigkcywgYXJyYXkoJyknID0+ICdcXCknLCAnKCcgPT4gJ1xcKCcsICdcXCcgPT4gJ1xcXFwnLCBjaHIoMTMpID0+ICdccicpKTsKCX0KCgkvKioKCSogRXNjYXBlIHNvbWUgc3BlY2lhbCBjaGFyYWN0ZXJzICgmbHQ7ICZndDsgJmFtcDspIGZvciBYTUwgb3V0cHV0LgoJKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBJbnB1dCBzdHJpbmcgdG8gY29udmVydC4KCSogQHJldHVybiBjb252ZXJ0ZWQgc3RyaW5nCgkqIEBzaW5jZSA1LjkuMTIxICgyMDExLTA5LTI4KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZXNjYXBlWE1MKCRzdHIpIHsKCQkkcmVwbGFjZVRhYmxlID0gYXJyYXkoIlwwIiA9PiAnJywgJyYnID0+ICcmYW1wOycsICc8JyA9PiAnJmx0OycsICc+JyA9PiAnJmd0OycpOwoJCSRzdHIgPSBzdHJ0cigkc3RyLCAkcmVwbGFjZVRhYmxlKTsKCQlyZXR1cm4gJHN0cjsKCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBjb3B5IG9mIGEgY2xhc3Mgb2JqZWN0CgkgKiBAcGFyYW0gJG9iamVjdCAob2JqZWN0KSBjbGFzcyBvYmplY3QgdG8gYmUgY2xvbmVkCgkgKiBAcmV0dXJuIGNsb25lZCBvYmplY3QKCSAqIEBzaW5jZSA0LjUuMDI5ICgyMDA5LTAzLTE5KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBvYmpjbG9uZSgkb2JqZWN0KSB7CgkJaWYgKCgkb2JqZWN0IGluc3RhbmNlb2YgSW1hZ2ljaykgQU5EICh2ZXJzaW9uX2NvbXBhcmUocGhwdmVyc2lvbignaW1hZ2ljaycpLCAnMy4wLjEnKSAhPT0gMSkpIHsKCQkJLy8gb24gdGhlIHZlcnNpb25zIGFmdGVyIDMuMC4xIHRoZSBjbG9uZSgpIG1ldGhvZCB3YXMgZGVwcmVjYXRlZCBpbiBmYXZvdXIgb2YgY2xvbmUga2V5d29yZAoJCQlyZXR1cm4gQCRvYmplY3QtPmNsb25lKCk7CgkJfQoJCXJldHVybiBAY2xvbmUoJG9iamVjdCk7Cgl9CgoJLyoqCgkgKiBPdXB1dCBpbnB1dCBkYXRhIGFuZCBjb21wcmVzcyBpdCBpZiBwb3NzaWJsZS4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBEYXRhIHRvIG91dHB1dC4KCSAqIEBwYXJhbSAkbGVuZ3RoIChpbnQpIERhdGEgbGVuZ3RoIGluIGJ5dGVzLgoJICogQHNpbmNlIDUuOS4wODYKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gc2VuZE91dHB1dERhdGEoJGRhdGEsICRsZW5ndGgpIHsKCQlpZiAoIWlzc2V0KCRfU0VSVkVSWydIVFRQX0FDQ0VQVF9FTkNPRElORyddKSBPUiBlbXB0eSgkX1NFUlZFUlsnSFRUUF9BQ0NFUFRfRU5DT0RJTkcnXSkpIHsKCQkJLy8gdGhlIGNvbnRlbnQgbGVuZ3RoIG1heSB2YXJ5IGlmIHRoZSBzZXJ2ZXIgaXMgdXNpbmcgY29tcHJlc3Npb24KCQkJaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy4kbGVuZ3RoKTsKCQl9CgkJZWNobyAkZGF0YTsKCX0KCgkvKioKCSAqIFJlcGxhY2UgcGFnZSBudW1iZXIgYWxpYXNlcyB3aXRoIG51bWJlci4KCSAqIEBwYXJhbSAkcGFnZSAoc3RyaW5nKSBQYWdlIGNvbnRlbnQuCgkgKiBAcGFyYW0gJHJlcGxhY2UgKGFycmF5KSBBcnJheSBvZiByZXBsYWNlbWVudHMgKGFycmF5IGtleXMgYXJlIHJlcGxhY2VtZW50IHN0cmluZ3MsIHZhbHVlcyBhcmUgYWxpYXMgYXJyYXlzKS4KCSAqIEBwYXJhbSAkZGlmZiAoaW50KSBJZiBwYXNzZWQsIHRoaXMgd2lsbCBiZSBzZXQgdG8gdGhlIHRvdGFsIGNoYXIgbnVtYmVyIGRpZmZlcmVuY2UgYmV0d2VlbiBhbGlhcyBhbmQgcmVwbGFjZW1lbnRzLgoJICogQHJldHVybiByZXBsYWNlZCBwYWdlIGNvbnRlbnQgYW5kIHVwZGF0ZWQgJGRpZmYgcGFyYW1ldGVyIGFzIGFycmF5LgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZXBsYWNlUGFnZU51bUFsaWFzZXMoJHBhZ2UsICRyZXBsYWNlLCAkZGlmZj0wKSB7CgkJZm9yZWFjaCAoJHJlcGxhY2UgYXMgJHJlcCkgewoJCQlmb3JlYWNoICgkcmVwWzNdIGFzICRhKSB7CgkJCQlpZiAoc3RycG9zKCRwYWdlLCAkYSkgIT09IGZhbHNlKSB7CgkJCQkJJHBhZ2UgPSBzdHJfcmVwbGFjZSgkYSwgJHJlcFswXSwgJHBhZ2UpOwoJCQkJCSRkaWZmICs9ICgkcmVwWzJdIC0gJHJlcFsxXSk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGFycmF5KCRwYWdlLCAkZGlmZik7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRpbWVzdGFtcCBpbiBzZWNvbmRzIGZyb20gZm9ybWF0dGVkIGRhdGUtdGltZS4KCSAqIEBwYXJhbSAkZGF0ZSAoc3RyaW5nKSBGb3JtYXR0ZWQgZGF0ZS10aW1lLgoJICogQHJldHVybiBpbnQgc2Vjb25kcy4KCSAqIEBzaW5jZSA1LjkuMTUyICgyMDEyLTAzLTIzKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUaW1lc3RhbXAoJGRhdGUpIHsKCQlpZiAoKCRkYXRlWzBdID09ICdEJykgQU5EICgkZGF0ZVsxXSA9PSAnOicpKSB7CgkJCS8vIHJlbW92ZSBkYXRlIHByZWZpeCBpZiBwcmVzZW50CgkJCSRkYXRlID0gc3Vic3RyKCRkYXRlLCAyKTsKCQl9CgkJcmV0dXJuIHN0cnRvdGltZSgkZGF0ZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIGRhdGUtdGltZS4KCSAqIEBwYXJhbSAkdGltZSAoaW50KSBUaW1lIGluIHNlY29uZHMuCgkgKiBAcmV0dXJuIHN0cmluZyBlc2NhcGVkIGRhdGUgc3RyaW5nLgoJICogQHNpbmNlIDUuOS4xNTIgKDIwMTItMDMtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldEZvcm1hdHRlZERhdGUoJHRpbWUpIHsKCQlyZXR1cm4gc3Vic3RyX3JlcGxhY2UoZGF0ZSgnWW1kSGlzTycsIGludHZhbCgkdGltZSkpLCAnXCcnLCAoMCAtIDIpLCAwKS4nXCcnOwoJfQoKCS8qKgoJICogR2V0IFVMT05HIGZyb20gc3RyaW5nIChCaWcgRW5kaWFuIDMyLWJpdCB1bnNpZ25lZCBpbnRlZ2VyKS4KCSAqIEBwYXJhbSAkc3RyIChzdHJpbmcpIHN0cmluZyBmcm9tIHdoZXJlIHRvIGV4dHJhY3QgdmFsdWUKCSAqIEBwYXJhbSAkb2Zmc2V0IChpbnQpIHBvaW50IGZyb20gd2hlcmUgdG8gcmVhZCB0aGUgZGF0YQoJICogQHJldHVybiBpbnQgMzIgYml0IHZhbHVlCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMi4wMDAgKDIwMTAtMDYtMDIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRVTE9ORygkc3RyLCAkb2Zmc2V0KSB7CgkJJHYgPSB1bnBhY2soJ05pJywgc3Vic3RyKCRzdHIsICRvZmZzZXQsIDQpKTsKCQlyZXR1cm4gJHZbJ2knXTsKCX0KCgkvKioKCSAqIEdldCBVU0hPUlQgZnJvbSBzdHJpbmcgKEJpZyBFbmRpYW4gMTYtYml0IHVuc2lnbmVkIGludGVnZXIpLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB2YWx1ZQoJICogQHBhcmFtICRvZmZzZXQgKGludCkgcG9pbnQgZnJvbSB3aGVyZSB0byByZWFkIHRoZSBkYXRhCgkgKiBAcmV0dXJuIGludCAxNiBiaXQgdmFsdWUKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS4yLjAwMCAoMjAxMC0wNi0wMikKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2dldFVTSE9SVCgkc3RyLCAkb2Zmc2V0KSB7CgkJJHYgPSB1bnBhY2soJ25pJywgc3Vic3RyKCRzdHIsICRvZmZzZXQsIDIpKTsKCQlyZXR1cm4gJHZbJ2knXTsKCX0KCgkvKioKCSAqIEdldCBTSE9SVCBmcm9tIHN0cmluZyAoQmlnIEVuZGlhbiAxNi1iaXQgc2lnbmVkIGludGVnZXIpLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgU3RyaW5nIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB2YWx1ZS4KCSAqIEBwYXJhbSAkb2Zmc2V0IChpbnQpIFBvaW50IGZyb20gd2hlcmUgdG8gcmVhZCB0aGUgZGF0YS4KCSAqIEByZXR1cm4gaW50IDE2IGJpdCB2YWx1ZQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjIuMDAwICgyMDEwLTA2LTAyKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZ2V0U0hPUlQoJHN0ciwgJG9mZnNldCkgewoJCSR2ID0gdW5wYWNrKCdzaScsIHN1YnN0cigkc3RyLCAkb2Zmc2V0LCAyKSk7CgkJcmV0dXJuICR2WydpJ107Cgl9CgoJLyoqCgkgKiBHZXQgRldPUkQgZnJvbSBzdHJpbmcgKEJpZyBFbmRpYW4gMTYtYml0IHNpZ25lZCBpbnRlZ2VyKS4KCSAqIEBwYXJhbSAkc3RyIChzdHJpbmcpIFN0cmluZyBmcm9tIHdoZXJlIHRvIGV4dHJhY3QgdmFsdWUuCgkgKiBAcGFyYW0gJG9mZnNldCAoaW50KSBQb2ludCBmcm9tIHdoZXJlIHRvIHJlYWQgdGhlIGRhdGEuCgkgKiBAcmV0dXJuIGludCAxNiBiaXQgdmFsdWUKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS45LjEyMyAoMjAxMS0wOS0zMCkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2dldEZXT1JEKCRzdHIsICRvZmZzZXQpIHsKCQkkdiA9IHNlbGY6Ol9nZXRVU0hPUlQoJHN0ciwgJG9mZnNldCk7CgkJaWYgKCR2ID4gMHg3ZmZmKSB7CgkJCSR2IC09IDB4MTAwMDA7CgkJfQoJCXJldHVybiAkdjsKCX0KCgkvKioKCSAqIEdldCBVRldPUkQgZnJvbSBzdHJpbmcgKEJpZyBFbmRpYW4gMTYtYml0IHVuc2lnbmVkIGludGVnZXIpLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB2YWx1ZQoJICogQHBhcmFtICRvZmZzZXQgKGludCkgcG9pbnQgZnJvbSB3aGVyZSB0byByZWFkIHRoZSBkYXRhCgkgKiBAcmV0dXJuIGludCAxNiBiaXQgdmFsdWUKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS45LjEyMyAoMjAxMS0wOS0zMCkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gX2dldFVGV09SRCgkc3RyLCAkb2Zmc2V0KSB7CgkJJHYgPSBzZWxmOjpfZ2V0VVNIT1JUKCRzdHIsICRvZmZzZXQpOwoJCXJldHVybiAkdjsKCX0KCgkvKioKCSAqIEdldCBGSVhFRCBmcm9tIHN0cmluZyAoMzItYml0IHNpZ25lZCBmaXhlZC1wb2ludCBudW1iZXIgKDE2LjE2KS4KCSAqIEBwYXJhbSAkc3RyIChzdHJpbmcpIHN0cmluZyBmcm9tIHdoZXJlIHRvIGV4dHJhY3QgdmFsdWUKCSAqIEBwYXJhbSAkb2Zmc2V0IChpbnQpIHBvaW50IGZyb20gd2hlcmUgdG8gcmVhZCB0aGUgZGF0YQoJICogQHJldHVybiBpbnQgMTYgYml0IHZhbHVlCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4xMjMgKDIwMTEtMDktMzApCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRGSVhFRCgkc3RyLCAkb2Zmc2V0KSB7CgkJLy8gbWFudGlzc2EKCQkkbSA9IHNlbGY6Ol9nZXRGV09SRCgkc3RyLCAkb2Zmc2V0KTsKCQkvLyBmcmFjdGlvbgoJCSRmID0gc2VsZjo6X2dldFVTSE9SVCgkc3RyLCAoJG9mZnNldCArIDIpKTsKCQkkdiA9IGZsb2F0dmFsKCcnLiRtLicuJy4kZi4nJyk7CgkJcmV0dXJuICR2OwoJfQoKCS8qKgoJICogR2V0IEJZVEUgZnJvbSBzdHJpbmcgKDgtYml0IHVuc2lnbmVkIGludGVnZXIpLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgU3RyaW5nIGZyb20gd2hlcmUgdG8gZXh0cmFjdCB2YWx1ZS4KCSAqIEBwYXJhbSAkb2Zmc2V0IChpbnQpIFBvaW50IGZyb20gd2hlcmUgdG8gcmVhZCB0aGUgZGF0YS4KCSAqIEByZXR1cm4gaW50IDggYml0IHZhbHVlCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMi4wMDAgKDIwMTAtMDYtMDIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9nZXRCWVRFKCRzdHIsICRvZmZzZXQpIHsKCQkkdiA9IHVucGFjaygnQ2knLCBzdWJzdHIoJHN0ciwgJG9mZnNldCwgMSkpOwoJCXJldHVybiAkdlsnaSddOwoJfQoJLyoqCgkgKiBCaW5hcnktc2FmZSBhbmQgVVJMLXNhZmUgZmlsZSByZWFkLgoJICogUmVhZHMgdXAgdG8gbGVuZ3RoIGJ5dGVzIGZyb20gdGhlIGZpbGUgcG9pbnRlciByZWZlcmVuY2VkIGJ5IGhhbmRsZS4gUmVhZGluZyBzdG9wcyBhcyBzb29uIGFzIG9uZSBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgaXMgbWV0OiBsZW5ndGggYnl0ZXMgaGF2ZSBiZWVuIHJlYWQ7IEVPRiAoZW5kIG9mIGZpbGUpIGlzIHJlYWNoZWQuCgkgKiBAcGFyYW0gJGhhbmRsZSAocmVzb3VyY2UpCgkgKiBAcGFyYW0gJGxlbmd0aCAoaW50KQoJICogQHJldHVybiBSZXR1cm5zIHRoZSByZWFkIHN0cmluZyBvciBGQUxTRSBpbiBjYXNlIG9mIGVycm9yLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjUuMDI3ICgyMDA5LTAzLTE2KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiByZnJlYWQoJGhhbmRsZSwgJGxlbmd0aCkgewoJCSRkYXRhID0gZnJlYWQoJGhhbmRsZSwgJGxlbmd0aCk7CgkJaWYgKCRkYXRhID09PSBmYWxzZSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSRyZXN0ID0gKCRsZW5ndGggLSBzdHJsZW4oJGRhdGEpKTsKCQlpZiAoJHJlc3QgPiAwKSB7CgkJCSRkYXRhIC49IHNlbGY6OnJmcmVhZCgkaGFuZGxlLCAkcmVzdCk7CgkJfQoJCXJldHVybiAkZGF0YTsKCX0KCgkvKioKCSAqIFJlYWQgYSA0LWJ5dGUgKDMyIGJpdCkgaW50ZWdlciBmcm9tIGZpbGUuCgkgKiBAcGFyYW0gJGYgKHN0cmluZykgZmlsZSBuYW1lLgoJICogQHJldHVybiA0LWJ5dGUgaW50ZWdlcgoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfZnJlYWRpbnQoJGYpIHsKCQkkYSA9IHVucGFjaygnTmknLCBmcmVhZCgkZiwgNCkpOwoJCXJldHVybiAkYVsnaSddOwoJfQoKCS8qKgoJICogUmV0dXJucyBhIHN0cmluZyBjb250YWluaW5nIHJhbmRvbSBkYXRhIHRvIGJlIHVzZWQgYXMgYSBzZWVkIGZvciBlbmNyeXB0aW9uIG1ldGhvZHMuCgkgKiBAcGFyYW0gJHNlZWQgKHN0cmluZykgc3RhcnRpbmcgc2VlZCB2YWx1ZQoJICogQHJldHVybiBzdHJpbmcgY29udGFpbmluZyByYW5kb20gZGF0YQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjkuMDA2ICgyMDEwLTEwLTE5KQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRSYW5kb21TZWVkKCRzZWVkPScnKSB7CgkJJHNlZWQgLj0gbWljcm90aW1lKCk7CgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnb3BlbnNzbF9yYW5kb21fcHNldWRvX2J5dGVzJykgQU5EIChzdHJ0b3VwcGVyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSAhPT0gJ1dJTicpKSB7CgkJCS8vIHRoaXMgaXMgbm90IHVzZWQgb24gd2luZG93cyBzeXN0ZW1zIGJlY2F1c2UgaXQgaXMgdmVyeSBzbG93IGZvciBhIGtub3cgYnVnCgkJCSRzZWVkIC49IG9wZW5zc2xfcmFuZG9tX3BzZXVkb19ieXRlcyg1MTIpOwoJCX0gZWxzZSB7CgkJCWZvciAoJGkgPSAwOyAkaSA8IDIzOyArKyRpKSB7CgkJCQkkc2VlZCAuPSB1bmlxaWQoJycsIHRydWUpOwoJCQl9CgkJfQoJCSRzZWVkIC49IHVuaXFpZCgnJywgdHJ1ZSk7CgkJJHNlZWQgLj0gcmFuZCgpOwoJCSRzZWVkIC49IGdldG15cGlkKCk7CgkJJHNlZWQgLj0gX19GSUxFX187CgkJaWYgKGlzc2V0KCRfU0VSVkVSWydSRU1PVEVfQUREUiddKSkgewoJCQkkc2VlZCAuPSAkX1NFUlZFUlsnUkVNT1RFX0FERFInXTsKCQl9CgkJaWYgKGlzc2V0KCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsKCQkJJHNlZWQgLj0gJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddOwoJCX0KCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUJ10pKSB7CgkJCSRzZWVkIC49ICRfU0VSVkVSWydIVFRQX0FDQ0VQVCddOwoJCX0KCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0VOQ09ESU5HJ10pKSB7CgkJCSRzZWVkIC49ICRfU0VSVkVSWydIVFRQX0FDQ0VQVF9FTkNPRElORyddOwoJCX0KCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0xBTkdVQUdFJ10pKSB7CgkJCSRzZWVkIC49ICRfU0VSVkVSWydIVFRQX0FDQ0VQVF9MQU5HVUFHRSddOwoJCX0KCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0NIQVJTRVQnXSkpIHsKCQkJJHNlZWQgLj0gJF9TRVJWRVJbJ0hUVFBfQUNDRVBUX0NIQVJTRVQnXTsKCQl9CgkJJHNlZWQgLj0gcmFuZCgpOwoJCSRzZWVkIC49IHVuaXFpZCgnJywgdHJ1ZSk7CgkJJHNlZWQgLj0gbWljcm90aW1lKCk7CgkJcmV0dXJuICRzZWVkOwoJfQoKCS8qKgoJICogRW5jcnlwdHMgYSBzdHJpbmcgdXNpbmcgTUQ1IGFuZCByZXR1cm5zIGl0J3MgdmFsdWUgYXMgYSBiaW5hcnkgc3RyaW5nLgoJICogQHBhcmFtICRzdHIgKHN0cmluZykgaW5wdXQgc3RyaW5nCgkgKiBAcmV0dXJuIFN0cmluZyBNRDUgZW5jcnlwdGVkIGJpbmFyeSBzdHJpbmcKCSAqIEBzaW5jZSAyLjAuMDAwICgyMDA4LTAxLTAyKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBfbWQ1XzE2KCRzdHIpIHsKCQlyZXR1cm4gcGFjaygnSConLCBtZDUoJHN0cikpOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgaW5wdXQgdGV4dCBleHJ5cHRlZCB1c2luZyBBRVMgYWxnb3JpdGhtIGFuZCB0aGUgc3BlY2lmaWVkIGtleS4KCSAqIFRoaXMgbWV0aG9kIHJlcXVpcmVzIG1jcnlwdC4KCSAqIEBwYXJhbSAka2V5IChzdHJpbmcpIGVuY3J5cHRpb24ga2V5CgkgKiBAcGFyYW0gJHRleHQgKFN0cmluZykgaW5wdXQgdGV4dCB0byBiZSBlbmNyeXB0ZWQKCSAqIEByZXR1cm4gU3RyaW5nIGVuY3J5cHRlZCB0ZXh0CgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTEpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9BRVMoJGtleSwgJHRleHQpIHsKCQkvLyBwYWRkaW5nIChSRkMgMjg5OCwgUEtDUyAjNTogUGFzc3dvcmQtQmFzZWQgQ3J5cHRvZ3JhcGh5IFNwZWNpZmljYXRpb24gVmVyc2lvbiAyLjApCgkJJHBhZGRpbmcgPSAxNiAtIChzdHJsZW4oJHRleHQpICUgMTYpOwoJCSR0ZXh0IC49IHN0cl9yZXBlYXQoY2hyKCRwYWRkaW5nKSwgJHBhZGRpbmcpOwoJCSRpdiA9IG1jcnlwdF9jcmVhdGVfaXYobWNyeXB0X2dldF9pdl9zaXplKE1DUllQVF9SSUpOREFFTF8xMjgsIE1DUllQVF9NT0RFX0NCQyksIE1DUllQVF9SQU5EKTsKCQkkdGV4dCA9IG1jcnlwdF9lbmNyeXB0KE1DUllQVF9SSUpOREFFTF8xMjgsICRrZXksICR0ZXh0LCBNQ1JZUFRfTU9ERV9DQkMsICRpdik7CgkJJHRleHQgPSAkaXYuJHRleHQ7CgkJcmV0dXJuICR0ZXh0OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgaW5wdXQgdGV4dCBlbmNyeXB0ZWQgdXNpbmcgUkM0IGFsZ29yaXRobSBhbmQgdGhlIHNwZWNpZmllZCBrZXkuCgkgKiBSQzQgaXMgdGhlIHN0YW5kYXJkIGVuY3J5cHRpb24gYWxnb3JpdGhtIHVzZWQgaW4gUERGIGZvcm1hdAoJICogQHBhcmFtICRrZXkgKHN0cmluZykgRW5jcnlwdGlvbiBrZXkuCgkgKiBAcGFyYW0gJHRleHQgKFN0cmluZykgSW5wdXQgdGV4dCB0byBiZSBlbmNyeXB0ZWQuCgkgKiBAcGFyYW0gJGxhc3RfZW5jX2tleSAoU3RyaW5nKSBSZWZlcmVuY2UgdG8gbGFzdCBSQzQga2V5IGVuY3J5cHRlZC4KCSAqIEBwYXJhbSAkbGFzdF9lbmNfa2V5X2MgKFN0cmluZykgUmVmZXJlbmNlIHRvIGxhc3QgUkM0IGNvbXB1dGVkIGtleS4KCSAqIEByZXR1cm4gU3RyaW5nIGVuY3J5cHRlZCB0ZXh0CgkgKiBAc2luY2UgMi4wLjAwMCAoMjAwOC0wMS0wMikKCSAqIEBhdXRob3IgS2xlbWVuIFZvZG9waXZlYywgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIF9SQzQoJGtleSwgJHRleHQsICYkbGFzdF9lbmNfa2V5LCAmJGxhc3RfZW5jX2tleV9jKSB7CgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWNyeXB0X2VuY3J5cHQnKSBBTkQgKCRvdXQgPSBAbWNyeXB0X2VuY3J5cHQoTUNSWVBUX0FSQ0ZPVVIsICRrZXksICR0ZXh0LCBNQ1JZUFRfTU9ERV9TVFJFQU0sICcnKSkpIHsKCQkJLy8gdHJ5IHRvIHVzZSBtY3J5cHQgZnVuY3Rpb24gaWYgZXhpc3QKCQkJcmV0dXJuICRvdXQ7CgkJfQoJCWlmICgkbGFzdF9lbmNfa2V5ICE9ICRrZXkpIHsKCQkJJGsgPSBzdHJfcmVwZWF0KCRrZXksICgoMjU2IC8gc3RybGVuKCRrZXkpKSArIDEpKTsKCQkJJHJjNCA9IHJhbmdlKDAsIDI1NSk7CgkJCSRqID0gMDsKCQkJZm9yICgkaSA9IDA7ICRpIDwgMjU2OyArKyRpKSB7CgkJCQkkdCA9ICRyYzRbJGldOwoJCQkJJGogPSAoJGogKyAkdCArIG9yZCgka1skaV0pKSAlIDI1NjsKCQkJCSRyYzRbJGldID0gJHJjNFskal07CgkJCQkkcmM0WyRqXSA9ICR0OwoJCQl9CgkJCSRsYXN0X2VuY19rZXkgPSAka2V5OwoJCQkkbGFzdF9lbmNfa2V5X2MgPSAkcmM0OwoJCX0gZWxzZSB7CgkJCSRyYzQgPSAkbGFzdF9lbmNfa2V5X2M7CgkJfQoJCSRsZW4gPSBzdHJsZW4oJHRleHQpOwoJCSRhID0gMDsKCQkkYiA9IDA7CgkJJG91dCA9ICcnOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICsrJGkpIHsKCQkJJGEgPSAoJGEgKyAxKSAlIDI1NjsKCQkJJHQgPSAkcmM0WyRhXTsKCQkJJGIgPSAoJGIgKyAkdCkgJSAyNTY7CgkJCSRyYzRbJGFdID0gJHJjNFskYl07CgkJCSRyYzRbJGJdID0gJHQ7CgkJCSRrID0gJHJjNFsoJHJjNFskYV0gKyAkcmM0WyRiXSkgJSAyNTZdOwoJCQkkb3V0IC49IGNocihvcmQoJHRleHRbJGldKSBeICRrKTsKCQl9CgkJcmV0dXJuICRvdXQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIHByZW1pc3Npb24gY29kZSB1c2VkIG9uIGVuY3J5cHRpb24gKFAgdmFsdWUpLgoJICogQHBhcmFtICRwZXJtaXNzaW9ucyAoQXJyYXkpIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgKHNwZWNpZnkgdGhlIG9uZXMgeW91IHdhbnQgdG8gYmxvY2spLgoJICogQHBhcmFtICRtb2RlIChpbnQpIGVuY3J5cHRpb24gc3RyZW5ndGg6IDAgPSBSQzQgNDAgYml0OyAxID0gUkM0IDEyOCBiaXQ7IDIgPSBBRVMgMTI4IGJpdDsgMyA9IEFFUyAyNTYgYml0LgoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTIpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRVc2VyUGVybWlzc2lvbkNvZGUoJHBlcm1pc3Npb25zLCAkbW9kZT0wKSB7CgkJJG9wdGlvbnMgPSBhcnJheSgKCQkJJ293bmVyJyA9PiAyLCAvLyBiaXQgMiAtLSBpbnZlcnRlZCBsb2dpYzogY2xlYXJlZCBieSBkZWZhdWx0CgkJCSdwcmludCcgPT4gNCwgLy8gYml0IDMKCQkJJ21vZGlmeScgPT4gOCwgLy8gYml0IDQKCQkJJ2NvcHknID0+IDE2LCAvLyBiaXQgNQoJCQknYW5ub3QtZm9ybXMnID0+IDMyLCAvLyBiaXQgNgoJCQknZmlsbC1mb3JtcycgPT4gMjU2LCAvLyBiaXQgOQoJCQknZXh0cmFjdCcgPT4gNTEyLCAvLyBiaXQgMTAKCQkJJ2Fzc2VtYmxlJyA9PiAxMDI0LC8vIGJpdCAxMQoJCQkncHJpbnQtaGlnaCcgPT4gMjA0OCAvLyBiaXQgMTIKCQkJKTsKCQkkcHJvdGVjdGlvbiA9IDIxNDc0MjIwMTI7IC8vIDMyIGJpdDogKDAxMTExMTExIDExMTExMTExIDAwMDAxMTExIDAwMTExMTAwKQoJCWZvcmVhY2ggKCRwZXJtaXNzaW9ucyBhcyAkcGVybWlzc2lvbikgewoJCQlpZiAoaXNzZXQoJG9wdGlvbnNbJHBlcm1pc3Npb25dKSkgewoJCQkJaWYgKCgkbW9kZSA+IDApIE9SICgkb3B0aW9uc1skcGVybWlzc2lvbl0gPD0gMzIpKSB7CgkJCQkJLy8gc2V0IG9ubHkgdmFsaWQgcGVybWlzc2lvbnMKCQkJCQlpZiAoJG9wdGlvbnNbJHBlcm1pc3Npb25dID09IDIpIHsKCQkJCQkJLy8gdGhlIGxvZ2ljIGZvciBiaXQgMiBpcyBpbnZlcnRlZCAoY2xlYXJlZCBieSBkZWZhdWx0KQoJCQkJCQkkcHJvdGVjdGlvbiArPSAkb3B0aW9uc1skcGVybWlzc2lvbl07CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHByb3RlY3Rpb24gLT0gJG9wdGlvbnNbJHBlcm1pc3Npb25dOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJHByb3RlY3Rpb247Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IGhleGFkZWNpbWFsIHN0cmluZyB0byBzdHJpbmcKCSAqIEBwYXJhbSAkYnMgKHN0cmluZykgYnl0ZS1zdHJpbmcgdG8gY29udmVydAoJICogQHJldHVybiBTdHJpbmcKCSAqIEBzaW5jZSA1LjAuMDA1ICgyMDEwLTA1LTEyKQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gY29udmVydEhleFN0cmluZ1RvU3RyaW5nKCRicykgewoJCSRzdHJpbmcgPSAnJzsgLy8gc3RyaW5nIHRvIGJlIHJldHVybmVkCgkJJGJzbGVuZ3RoID0gc3RybGVuKCRicyk7CgkJaWYgKCgkYnNsZW5ndGggJSAyKSAhPSAwKSB7CgkJCS8vIHBhZGRpbmcKCQkJJGJzIC49ICcwJzsKCQkJKyskYnNsZW5ndGg7CgkJfQoJCWZvciAoJGkgPSAwOyAkaSA8ICRic2xlbmd0aDsgJGkgKz0gMikgewoJCQkkc3RyaW5nIC49IGNocihoZXhkZWMoJGJzWyRpXS4kYnNbKCRpICsgMSldKSk7CgkJfQoJCXJldHVybiAkc3RyaW5nOwoJfQoKCS8qKgoJICogQ29udmVydCBzdHJpbmcgdG8gaGV4YWRlY2ltYWwgc3RyaW5nIChieXRlIHN0cmluZykKCSAqIEBwYXJhbSAkcyAoc3RyaW5nKSBzdHJpbmcgdG8gY29udmVydAoJICogQHJldHVybiBieXRlIHN0cmluZwoJICogQHNpbmNlIDUuMC4wMTAgKDIwMTAtMDUtMTcpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBjb252ZXJ0U3RyaW5nVG9IZXhTdHJpbmcoJHMpIHsKCQkkYnMgPSAnJzsKCQkkY2hhcnMgPSBwcmVnX3NwbGl0KCcvLycsICRzLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSk7CgkJZm9yZWFjaCAoJGNoYXJzIGFzICRjKSB7CgkJCSRicyAuPSBzcHJpbnRmKCclMDJzJywgZGVjaGV4KG9yZCgkYykpKTsKCQl9CgkJcmV0dXJuICRiczsKCX0KCgkvKioKCSAqIENvbnZlcnQgZW5jcnlwdGlvbiBQIHZhbHVlIHRvIGEgc3RyaW5nIG9mIGJ5dGVzLCBsb3ctb3JkZXIgYnl0ZSBmaXJzdC4KCSAqIEBwYXJhbSAkcHJvdGVjdGlvbiAoc3RyaW5nKSAzMmJpdCBlbmNyeXB0aW9uIHBlcm1pc3Npb24gdmFsdWUgKFAgdmFsdWUpCgkgKiBAcmV0dXJuIFN0cmluZwoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTIpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRFbmNQZXJtaXNzaW9uc1N0cmluZygkcHJvdGVjdGlvbikgewoJCSRiaW5wcm90ID0gc3ByaW50ZignJTAzMmInLCAkcHJvdGVjdGlvbik7CgkJJHN0ciA9IGNocihiaW5kZWMoc3Vic3RyKCRiaW5wcm90LCAyNCwgOCkpKTsKCQkkc3RyIC49IGNocihiaW5kZWMoc3Vic3RyKCRiaW5wcm90LCAxNiwgOCkpKTsKCQkkc3RyIC49IGNocihiaW5kZWMoc3Vic3RyKCRiaW5wcm90LCA4LCA4KSkpOwoJCSRzdHIgLj0gY2hyKGJpbmRlYyhzdWJzdHIoJGJpbnByb3QsIDAsIDgpKSk7CgkJcmV0dXJuICRzdHI7Cgl9CgoJLyoqCgkgKiBFbmNvZGUgYSBuYW1lIG9iamVjdC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBOYW1lIG9iamVjdCB0byBlbmNvZGUuCgkgKiBAcmV0dXJuIChzdHJpbmcpIEVuY29kZWQgbmFtZSBvYmplY3QuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4wOTcgKDIwMTEtMDYtMjMpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGVuY29kZU5hbWVPYmplY3QoJG5hbWUpIHsKCQkkZXNjbmFtZSA9ICcnOwoJCSRsZW5ndGggPSBzdHJsZW4oJG5hbWUpOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICsrJGkpIHsKCQkJJGNociA9ICRuYW1lWyRpXTsKCQkJaWYgKHByZWdfbWF0Y2goJy9bMC05YS16QS1aXS8nLCAkY2hyKSA9PSAxKSB7CgkJCQkkZXNjbmFtZSAuPSAkY2hyOwoJCQl9IGVsc2UgewoJCQkJJGVzY25hbWUgLj0gc3ByaW50ZignIyUwMlgnLCBvcmQoJGNocikpOwoJCQl9CgkJfQoJCXJldHVybiAkZXNjbmFtZTsKCX0KCgkvKioKCSAqIENvbnZlcnQgSmF2YVNjcmlwdCBmb3JtIGZpZWxkcyBwcm9wZXJ0aWVzIGFycmF5IHRvIEFubm90YXRpb24gUHJvcGVydGllcyBhcnJheS4KCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHBhcmFtICRzcG90X2NvbG9ycyAoYXJyYXkpIFJlZmVyZW5jZSB0byBzcG90IGNvbG9ycyBhcnJheS4KCSAqIEBwYXJhbSAkcnRsIChib29sZWFuKSBUcnVlIGlmIGluIFJpZ2h0LVRvLUxlZnQgdGV4dCBkaXJlY3Rpb24gbW9kZSwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHJldHVybiBhcnJheSBvZiBhbm5vdGF0aW9uIHByb3BlcnRpZXMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC44LjAwMCAoMjAwOS0wOS0wNikKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0QW5ub3RPcHRGcm9tSlNQcm9wKCRwcm9wLCAmJHNwb3RfY29sb3JzLCAkcnRsPWZhbHNlKSB7CgkJaWYgKGlzc2V0KCRwcm9wWydhb3B0J10pIEFORCBpc19hcnJheSgkcHJvcFsnYW9wdCddKSkgewoJCQkvLyB0aGUgYW5ub3RhdGlvbiBvcHRpb25zIGFyZWEgbHJlYWR5IGRlZmluZWQKCQkJcmV0dXJuICRwcm9wWydhb3B0J107CgkJfQoJCSRvcHQgPSBhcnJheSgpOyAvLyB2YWx1ZSB0byBiZSByZXR1cm5lZAoJCS8vIGFsaWdubWVudDogQ29udHJvbHMgaG93IHRoZSB0ZXh0IGlzIGxhaWQgb3V0IHdpdGhpbiB0aGUgdGV4dCBmaWVsZC4KCQlpZiAoaXNzZXQoJHByb3BbJ2FsaWdubWVudCddKSkgewoJCQlzd2l0Y2ggKCRwcm9wWydhbGlnbm1lbnQnXSkgewoJCQkJY2FzZSAnbGVmdCc6IHsKCQkJCQkkb3B0WydxJ10gPSAwOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnY2VudGVyJzogewoJCQkJCSRvcHRbJ3EnXSA9IDE7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdyaWdodCc6IHsKCQkJCQkkb3B0WydxJ10gPSAyOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZGVmYXVsdDogewoJCQkJCSRvcHRbJ3EnXSA9ICgkcnRsKT8yOjA7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJLy8gbGluZVdpZHRoOiBTcGVjaWZpZXMgdGhlIHRoaWNrbmVzcyBvZiB0aGUgYm9yZGVyIHdoZW4gc3Ryb2tpbmcgdGhlIHBlcmltZXRlciBvZiBhIGZpZWxkJ3MgcmVjdGFuZ2xlLgoJCWlmIChpc3NldCgkcHJvcFsnbGluZVdpZHRoJ10pKSB7CgkJCSRsaW5ld2lkdGggPSBpbnR2YWwoJHByb3BbJ2xpbmVXaWR0aCddKTsKCQl9IGVsc2UgewoJCQkkbGluZXdpZHRoID0gMTsKCQl9CgkJLy8gYm9yZGVyU3R5bGU6IFRoZSBib3JkZXIgc3R5bGUgZm9yIGEgZmllbGQuCgkJaWYgKGlzc2V0KCRwcm9wWydib3JkZXJTdHlsZSddKSkgewoJCQlzd2l0Y2ggKCRwcm9wWydib3JkZXJTdHlsZSddKSB7CgkJCQljYXNlICdib3JkZXIuZCc6CgkJCQljYXNlICdkYXNoZWQnOiB7CgkJCQkJJG9wdFsnYm9yZGVyJ10gPSBhcnJheSgwLCAwLCAkbGluZXdpZHRoLCBhcnJheSgzLCAyKSk7CgkJCQkJJG9wdFsnYnMnXSA9IGFycmF5KCd3Jz0+JGxpbmV3aWR0aCwgJ3MnPT4nRCcsICdkJz0+YXJyYXkoMywgMikpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnYm9yZGVyLmInOgoJCQkJY2FzZSAnYmV2ZWxlZCc6IHsKCQkJCQkkb3B0Wydib3JkZXInXSA9IGFycmF5KDAsIDAsICRsaW5ld2lkdGgpOwoJCQkJCSRvcHRbJ2JzJ10gPSBhcnJheSgndyc9PiRsaW5ld2lkdGgsICdzJz0+J0InKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ2JvcmRlci5pJzoKCQkJCWNhc2UgJ2luc2V0JzogewoJCQkJCSRvcHRbJ2JvcmRlciddID0gYXJyYXkoMCwgMCwgJGxpbmV3aWR0aCk7CgkJCQkJJG9wdFsnYnMnXSA9IGFycmF5KCd3Jz0+JGxpbmV3aWR0aCwgJ3MnPT4nSScpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnYm9yZGVyLnUnOgoJCQkJY2FzZSAndW5kZXJsaW5lJzogewoJCQkJCSRvcHRbJ2JvcmRlciddID0gYXJyYXkoMCwgMCwgJGxpbmV3aWR0aCk7CgkJCQkJJG9wdFsnYnMnXSA9IGFycmF5KCd3Jz0+JGxpbmV3aWR0aCwgJ3MnPT4nVScpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnYm9yZGVyLnMnOgoJCQkJY2FzZSAnc29saWQnOiB7CgkJCQkJJG9wdFsnYm9yZGVyJ10gPSBhcnJheSgwLCAwLCAkbGluZXdpZHRoKTsKCQkJCQkkb3B0WydicyddID0gYXJyYXkoJ3cnPT4kbGluZXdpZHRoLCAncyc9PidTJyk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlkZWZhdWx0OiB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKGlzc2V0KCRwcm9wWydib3JkZXInXSkgQU5EIGlzX2FycmF5KCRwcm9wWydib3JkZXInXSkpIHsKCQkJJG9wdFsnYm9yZGVyJ10gPSAkcHJvcFsnYm9yZGVyJ107CgkJfQoJCWlmICghaXNzZXQoJG9wdFsnbWsnXSkpIHsKCQkJJG9wdFsnbWsnXSA9IGFycmF5KCk7CgkJfQoJCWlmICghaXNzZXQoJG9wdFsnbWsnXVsnaWYnXSkpIHsKCQkJJG9wdFsnbWsnXVsnaWYnXSA9IGFycmF5KCk7CgkJfQoJCSRvcHRbJ21rJ11bJ2lmJ11bJ2EnXSA9IGFycmF5KDAuNSwgMC41KTsKCQkvLyBidXR0b25BbGlnblg6IENvbnRyb2xzIGhvdyBzcGFjZSBpcyBkaXN0cmlidXRlZCBmcm9tIHRoZSBsZWZ0IG9mIHRoZSBidXR0b24gZmFjZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGljb24uCgkJaWYgKGlzc2V0KCRwcm9wWydidXR0b25BbGlnblgnXSkpIHsKCQkJJG9wdFsnbWsnXVsnaWYnXVsnYSddWzBdID0gJHByb3BbJ2J1dHRvbkFsaWduWCddOwoJCX0KCQkvLyBidXR0b25BbGlnblk6IENvbnRyb2xzIGhvdyB1bnVzZWQgc3BhY2UgaXMgZGlzdHJpYnV0ZWQgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBidXR0b24gZmFjZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGljb24uCgkJaWYgKGlzc2V0KCRwcm9wWydidXR0b25BbGlnblknXSkpIHsKCQkJJG9wdFsnbWsnXVsnaWYnXVsnYSddWzFdID0gJHByb3BbJ2J1dHRvbkFsaWduWSddOwoJCX0KCQkvLyBidXR0b25GaXRCb3VuZHM6IElmIHRydWUsIHRoZSBleHRlbnQgdG8gd2hpY2ggdGhlIGljb24gbWF5IGJlIHNjYWxlZCBpcyBzZXQgdG8gdGhlIGJvdW5kcyBvZiB0aGUgYnV0dG9uIGZpZWxkLgoJCWlmIChpc3NldCgkcHJvcFsnYnV0dG9uRml0Qm91bmRzJ10pIEFORCAoJHByb3BbJ2J1dHRvbkZpdEJvdW5kcyddID09ICd0cnVlJykpIHsKCQkJJG9wdFsnbWsnXVsnaWYnXVsnZmInXSA9IHRydWU7CgkJfQoJCS8vIGJ1dHRvblNjYWxlSG93OiBDb250cm9scyBob3cgdGhlIGljb24gaXMgc2NhbGVkIChpZiBuZWNlc3NhcnkpIHRvIGZpdCBpbnNpZGUgdGhlIGJ1dHRvbiBmYWNlLgoJCWlmIChpc3NldCgkcHJvcFsnYnV0dG9uU2NhbGVIb3cnXSkpIHsKCQkJc3dpdGNoICgkcHJvcFsnYnV0dG9uU2NhbGVIb3cnXSkgewoJCQkJY2FzZSAnc2NhbGVIb3cucHJvcG9ydGlvbmFsJzogewoJCQkJCSRvcHRbJ21rJ11bJ2lmJ11bJ3MnXSA9ICdQJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ3NjYWxlSG93LmFuYW1vcnBoaWMnOiB7CgkJCQkJJG9wdFsnbWsnXVsnaWYnXVsncyddID0gJ0EnOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCS8vIGJ1dHRvblNjYWxlV2hlbjogQ29udHJvbHMgd2hlbiBhbiBpY29uIGlzIHNjYWxlZCB0byBmaXQgaW5zaWRlIHRoZSBidXR0b24gZmFjZS4KCQlpZiAoaXNzZXQoJHByb3BbJ2J1dHRvblNjYWxlV2hlbiddKSkgewoJCQlzd2l0Y2ggKCRwcm9wWydidXR0b25TY2FsZVdoZW4nXSkgewoJCQkJY2FzZSAnc2NhbGVXaGVuLmFsd2F5cyc6IHsKCQkJCQkkb3B0WydtayddWydpZiddWydzdyddID0gJ0EnOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnc2NhbGVXaGVuLm5ldmVyJzogewoJCQkJCSRvcHRbJ21rJ11bJ2lmJ11bJ3N3J10gPSAnTic7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdzY2FsZVdoZW4udG9vQmlnJzogewoJCQkJCSRvcHRbJ21rJ11bJ2lmJ11bJ3N3J10gPSAnQic7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdzY2FsZVdoZW4udG9vU21hbGwnOiB7CgkJCQkJJG9wdFsnbWsnXVsnaWYnXVsnc3cnXSA9ICdTJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkvLyBidXR0b25Qb3NpdGlvbjogQ29udHJvbHMgaG93IHRoZSB0ZXh0IGFuZCB0aGUgaWNvbiBvZiB0aGUgYnV0dG9uIGFyZSBwb3NpdGlvbmVkIHdpdGggcmVzcGVjdCB0byBlYWNoIG90aGVyIHdpdGhpbiB0aGUgYnV0dG9uIGZhY2UuCgkJaWYgKGlzc2V0KCRwcm9wWydidXR0b25Qb3NpdGlvbiddKSkgewoJCQlzd2l0Y2ggKCRwcm9wWydidXR0b25Qb3NpdGlvbiddKSB7CgkJCQljYXNlIDA6CgkJCQljYXNlICdwb3NpdGlvbi50ZXh0T25seSc6IHsKCQkJCQkkb3B0WydtayddWyd0cCddID0gMDsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMToKCQkJCWNhc2UgJ3Bvc2l0aW9uLmljb25Pbmx5JzogewoJCQkJCSRvcHRbJ21rJ11bJ3RwJ10gPSAxOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAyOgoJCQkJY2FzZSAncG9zaXRpb24uaWNvblRleHRWJzogewoJCQkJCSRvcHRbJ21rJ11bJ3RwJ10gPSAyOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAzOgoJCQkJY2FzZSAncG9zaXRpb24udGV4dEljb25WJzogewoJCQkJCSRvcHRbJ21rJ11bJ3RwJ10gPSAzOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSA0OgoJCQkJY2FzZSAncG9zaXRpb24uaWNvblRleHRIJzogewoJCQkJCSRvcHRbJ21rJ11bJ3RwJ10gPSA0OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSA1OgoJCQkJY2FzZSAncG9zaXRpb24udGV4dEljb25IJzogewoJCQkJCSRvcHRbJ21rJ11bJ3RwJ10gPSA1OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSA2OgoJCQkJY2FzZSAncG9zaXRpb24ub3ZlcmxheSc6IHsKCQkJCQkkb3B0WydtayddWyd0cCddID0gNjsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkvLyBmaWxsQ29sb3I6IFNwZWNpZmllcyB0aGUgYmFja2dyb3VuZCBjb2xvciBmb3IgYSBmaWVsZC4KCQlpZiAoaXNzZXQoJHByb3BbJ2ZpbGxDb2xvciddKSkgewoJCQlpZiAoaXNfYXJyYXkoJHByb3BbJ2ZpbGxDb2xvciddKSkgewoJCQkJJG9wdFsnbWsnXVsnYmcnXSA9ICRwcm9wWydmaWxsQ29sb3InXTsKCQkJfSBlbHNlIHsKCQkJCSRvcHRbJ21rJ11bJ2JnJ10gPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkcHJvcFsnZmlsbENvbG9yJ10sICRzcG90X2NvbG9ycyk7CgkJCX0KCQl9CgkJLy8gc3Ryb2tlQ29sb3I6IFNwZWNpZmllcyB0aGUgc3Ryb2tlIGNvbG9yIGZvciBhIGZpZWxkIHRoYXQgaXMgdXNlZCB0byBzdHJva2UgdGhlIHJlY3RhbmdsZSBvZiB0aGUgZmllbGQgd2l0aCBhIGxpbmUgYXMgbGFyZ2UgYXMgdGhlIGxpbmUgd2lkdGguCgkJaWYgKGlzc2V0KCRwcm9wWydzdHJva2VDb2xvciddKSkgewoJCQlpZiAoaXNfYXJyYXkoJHByb3BbJ3N0cm9rZUNvbG9yJ10pKSB7CgkJCQkkb3B0WydtayddWydiYyddID0gJHByb3BbJ3N0cm9rZUNvbG9yJ107CgkJCX0gZWxzZSB7CgkJCQkkb3B0WydtayddWydiYyddID0gVENQREZfQ09MT1JTOjpjb252ZXJ0SFRNTENvbG9yVG9EZWMoJHByb3BbJ3N0cm9rZUNvbG9yJ10sICRzcG90X2NvbG9ycyk7CgkJCX0KCQl9CgkJLy8gcm90YXRpb246IFRoZSByb3RhdGlvbiBvZiBhIHdpZGdldCBpbiBjb3VudGVyY2xvY2t3aXNlIGluY3JlbWVudHMuCgkJaWYgKGlzc2V0KCRwcm9wWydyb3RhdGlvbiddKSkgewoJCQkkb3B0WydtayddWydyJ10gPSAkcHJvcFsncm90YXRpb24nXTsKCQl9CgkJLy8gY2hhckxpbWl0OiBMaW1pdHMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgYSB1c2VyIGNhbiB0eXBlIGludG8gYSB0ZXh0IGZpZWxkLgoJCWlmIChpc3NldCgkcHJvcFsnY2hhckxpbWl0J10pKSB7CgkJCSRvcHRbJ21heGxlbiddID0gaW50dmFsKCRwcm9wWydjaGFyTGltaXQnXSk7CgkJfQoJCWlmICghaXNzZXQoJGZmKSkgewoJCQkkZmYgPSAwOyAvLyBkZWZhdWx0IHZhbHVlCgkJfQoJCS8vIHJlYWRvbmx5OiBUaGUgcmVhZC1vbmx5IGNoYXJhY3RlcmlzdGljIG9mIGEgZmllbGQuIElmIGEgZmllbGQgaXMgcmVhZC1vbmx5LCB0aGUgdXNlciBjYW4gc2VlIHRoZSBmaWVsZCBidXQgY2Fubm90IGNoYW5nZSBpdC4KCQlpZiAoaXNzZXQoJHByb3BbJ3JlYWRvbmx5J10pIEFORCAoJHByb3BbJ3JlYWRvbmx5J10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAwOwoJCX0KCQkvLyByZXF1aXJlZDogU3BlY2lmaWVzIHdoZXRoZXIgYSBmaWVsZCByZXF1aXJlcyBhIHZhbHVlLgoJCWlmIChpc3NldCgkcHJvcFsncmVxdWlyZWQnXSkgQU5EICgkcHJvcFsncmVxdWlyZWQnXSA9PSAndHJ1ZScpKSB7CgkJCSRmZiArPSAxIDw8IDE7CgkJfQoJCS8vIG11bHRpbGluZTogQ29udHJvbHMgaG93IHRleHQgaXMgd3JhcHBlZCB3aXRoaW4gdGhlIGZpZWxkLgoJCWlmIChpc3NldCgkcHJvcFsnbXVsdGlsaW5lJ10pIEFORCAoJHByb3BbJ211bHRpbGluZSddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMTI7CgkJfQoJCS8vIHBhc3N3b3JkOiBTcGVjaWZpZXMgd2hldGhlciB0aGUgZmllbGQgc2hvdWxkIGRpc3BsYXkgYXN0ZXJpc2tzIHdoZW4gZGF0YSBpcyBlbnRlcmVkIGluIHRoZSBmaWVsZC4KCQlpZiAoaXNzZXQoJHByb3BbJ3Bhc3N3b3JkJ10pIEFORCAoJHByb3BbJ3Bhc3N3b3JkJ10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAxMzsKCQl9CgkJLy8gTm9Ub2dnbGVUb09mZjogSWYgc2V0LCBleGFjdGx5IG9uZSByYWRpbyBidXR0b24gc2hhbGwgYmUgc2VsZWN0ZWQgYXQgYWxsIHRpbWVzOyBzZWxlY3RpbmcgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBidXR0b24gaGFzIG5vIGVmZmVjdC4KCQlpZiAoaXNzZXQoJHByb3BbJ05vVG9nZ2xlVG9PZmYnXSkgQU5EICgkcHJvcFsnTm9Ub2dnbGVUb09mZiddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMTQ7CgkJfQoJCS8vIFJhZGlvOiBJZiBzZXQsIHRoZSBmaWVsZCBpcyBhIHNldCBvZiByYWRpbyBidXR0b25zLgoJCWlmIChpc3NldCgkcHJvcFsnUmFkaW8nXSkgQU5EICgkcHJvcFsnUmFkaW8nXSA9PSAndHJ1ZScpKSB7CgkJCSRmZiArPSAxIDw8IDE1OwoJCX0KCQkvLyBQdXNoYnV0dG9uOiBJZiBzZXQsIHRoZSBmaWVsZCBpcyBhIHB1c2hidXR0b24gdGhhdCBkb2VzIG5vdCByZXRhaW4gYSBwZXJtYW5lbnQgdmFsdWUuCgkJaWYgKGlzc2V0KCRwcm9wWydQdXNoYnV0dG9uJ10pIEFORCAoJHByb3BbJ1B1c2hidXR0b24nXSA9PSAndHJ1ZScpKSB7CgkJCSRmZiArPSAxIDw8IDE2OwoJCX0KCQkvLyBDb21ibzogSWYgc2V0LCB0aGUgZmllbGQgaXMgYSBjb21ibyBib3g7IGlmIGNsZWFyLCB0aGUgZmllbGQgaXMgYSBsaXN0IGJveC4KCQlpZiAoaXNzZXQoJHByb3BbJ0NvbWJvJ10pIEFORCAoJHByb3BbJ0NvbWJvJ10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAxNzsKCQl9CgkJLy8gZWRpdGFibGU6IENvbnRyb2xzIHdoZXRoZXIgYSBjb21ibyBib3ggaXMgZWRpdGFibGUuCgkJaWYgKGlzc2V0KCRwcm9wWydlZGl0YWJsZSddKSBBTkQgKCRwcm9wWydlZGl0YWJsZSddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMTg7CgkJfQoJCS8vIFNvcnQ6IElmIHNldCwgdGhlIGZpZWxkJ3Mgb3B0aW9uIGl0ZW1zIHNoYWxsIGJlIHNvcnRlZCBhbHBoYWJldGljYWxseS4KCQlpZiAoaXNzZXQoJHByb3BbJ1NvcnQnXSkgQU5EICgkcHJvcFsnU29ydCddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMTk7CgkJfQoJCS8vIGZpbGVTZWxlY3Q6IElmIHRydWUsIHNldHMgdGhlIGZpbGUtc2VsZWN0IGZsYWcgaW4gdGhlIE9wdGlvbnMgdGFiIG9mIHRoZSB0ZXh0IGZpZWxkIChGaWVsZCBpcyBVc2VkIGZvciBGaWxlIFNlbGVjdGlvbikuCgkJaWYgKGlzc2V0KCRwcm9wWydmaWxlU2VsZWN0J10pIEFORCAoJHByb3BbJ2ZpbGVTZWxlY3QnXSA9PSAndHJ1ZScpKSB7CgkJCSRmZiArPSAxIDw8IDIwOwoJCX0KCQkvLyBtdWx0aXBsZVNlbGVjdGlvbjogSWYgdHJ1ZSwgaW5kaWNhdGVzIHRoYXQgYSBsaXN0IGJveCBhbGxvd3MgYSBtdWx0aXBsZSBzZWxlY3Rpb24gb2YgaXRlbXMuCgkJaWYgKGlzc2V0KCRwcm9wWydtdWx0aXBsZVNlbGVjdGlvbiddKSBBTkQgKCRwcm9wWydtdWx0aXBsZVNlbGVjdGlvbiddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMjE7CgkJfQoJCS8vIGRvTm90U3BlbGxDaGVjazogSWYgdHJ1ZSwgc3BlbGwgY2hlY2tpbmcgaXMgbm90IHBlcmZvcm1lZCBvbiB0aGlzIGVkaXRhYmxlIHRleHQgZmllbGQuCgkJaWYgKGlzc2V0KCRwcm9wWydkb05vdFNwZWxsQ2hlY2snXSkgQU5EICgkcHJvcFsnZG9Ob3RTcGVsbENoZWNrJ10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAyMjsKCQl9CgkJLy8gZG9Ob3RTY3JvbGw6IElmIHRydWUsIHRoZSB0ZXh0IGZpZWxkIGRvZXMgbm90IHNjcm9sbCBhbmQgdGhlIHVzZXIsIHRoZXJlZm9yZSwgaXMgbGltaXRlZCBieSB0aGUgcmVjdGFuZ3VsYXIgcmVnaW9uIGRlc2lnbmVkIGZvciB0aGUgZmllbGQuCgkJaWYgKGlzc2V0KCRwcm9wWydkb05vdFNjcm9sbCddKSBBTkQgKCRwcm9wWydkb05vdFNjcm9sbCddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMjM7CgkJfQoJCS8vIGNvbWI6IElmIHNldCB0byB0cnVlLCB0aGUgZmllbGQgYmFja2dyb3VuZCBpcyBkcmF3biBhcyBzZXJpZXMgb2YgYm94ZXMgKG9uZSBmb3IgZWFjaCBjaGFyYWN0ZXIgaW4gdGhlIHZhbHVlIG9mIHRoZSBmaWVsZCkgYW5kIGVhY2ggY2hhcmFjdGVyIG9mIHRoZSBjb250ZW50IGlzIGRyYXduIHdpdGhpbiB0aG9zZSBib3hlcy4gVGhlIG51bWJlciBvZiBib3hlcyBkcmF3biBpcyBkZXRlcm1pbmVkIGZyb20gdGhlIGNoYXJMaW1pdCBwcm9wZXJ0eS4gSXQgYXBwbGllcyBvbmx5IHRvIHRleHQgZmllbGRzLiBUaGUgc2V0dGVyIHdpbGwgYWxzbyByYWlzZSBpZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBmaWVsZCBwcm9wZXJ0aWVzIGFyZSBhbHNvIHNldCBtdWx0aWxpbmUsIHBhc3N3b3JkLCBhbmQgZmlsZVNlbGVjdC4gQSBzaWRlLWVmZmVjdCBvZiBzZXR0aW5nIHRoaXMgcHJvcGVydHkgaXMgdGhhdCB0aGUgZG9Ob3RTY3JvbGwgcHJvcGVydHkgaXMgYWxzbyBzZXQuCgkJaWYgKGlzc2V0KCRwcm9wWydjb21iJ10pIEFORCAoJHByb3BbJ2NvbWInXSA9PSAndHJ1ZScpKSB7CgkJCSRmZiArPSAxIDw8IDI0OwoJCX0KCQkvLyByYWRpb3NJblVuaXNvbjogSWYgZmFsc2UsIGV2ZW4gaWYgYSBncm91cCBvZiByYWRpbyBidXR0b25zIGhhdmUgdGhlIHNhbWUgbmFtZSBhbmQgZXhwb3J0IHZhbHVlLCB0aGV5IGJlaGF2ZSBpbiBhIG11dHVhbGx5IGV4Y2x1c2l2ZSBmYXNoaW9uLCBsaWtlIEhUTUwgcmFkaW8gYnV0dG9ucy4KCQlpZiAoaXNzZXQoJHByb3BbJ3JhZGlvc0luVW5pc29uJ10pIEFORCAoJHByb3BbJ3JhZGlvc0luVW5pc29uJ10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAyNTsKCQl9CgkJLy8gcmljaFRleHQ6IElmIHRydWUsIHRoZSBmaWVsZCBhbGxvd3MgcmljaCB0ZXh0IGZvcm1hdHRpbmcuCgkJaWYgKGlzc2V0KCRwcm9wWydyaWNoVGV4dCddKSBBTkQgKCRwcm9wWydyaWNoVGV4dCddID09ICd0cnVlJykpIHsKCQkJJGZmICs9IDEgPDwgMjU7CgkJfQoJCS8vIGNvbW1pdE9uU2VsQ2hhbmdlOiBDb250cm9scyB3aGV0aGVyIGEgZmllbGQgdmFsdWUgaXMgY29tbWl0dGVkIGFmdGVyIGEgc2VsZWN0aW9uIGNoYW5nZS4KCQlpZiAoaXNzZXQoJHByb3BbJ2NvbW1pdE9uU2VsQ2hhbmdlJ10pIEFORCAoJHByb3BbJ2NvbW1pdE9uU2VsQ2hhbmdlJ10gPT0gJ3RydWUnKSkgewoJCQkkZmYgKz0gMSA8PCAyNjsKCQl9CgkJJG9wdFsnZmYnXSA9ICRmZjsKCQkvLyBkZWZhdWx0VmFsdWU6IFRoZSBkZWZhdWx0IHZhbHVlIG9mIGEgZmllbGQgLSB0aGF0IGlzLCB0aGUgdmFsdWUgdGhhdCB0aGUgZmllbGQgaXMgc2V0IHRvIHdoZW4gdGhlIGZvcm0gaXMgcmVzZXQuCgkJaWYgKGlzc2V0KCRwcm9wWydkZWZhdWx0VmFsdWUnXSkpIHsKCQkJJG9wdFsnZHYnXSA9ICRwcm9wWydkZWZhdWx0VmFsdWUnXTsKCQl9CgkJJGYgPSA0OyAvLyBkZWZhdWx0IHZhbHVlIGZvciBhbm5vdGF0aW9uIGZsYWdzCgkJLy8gcmVhZG9ubHk6IFRoZSByZWFkLW9ubHkgY2hhcmFjdGVyaXN0aWMgb2YgYSBmaWVsZC4gSWYgYSBmaWVsZCBpcyByZWFkLW9ubHksIHRoZSB1c2VyIGNhbiBzZWUgdGhlIGZpZWxkIGJ1dCBjYW5ub3QgY2hhbmdlIGl0LgoJCWlmIChpc3NldCgkcHJvcFsncmVhZG9ubHknXSkgQU5EICgkcHJvcFsncmVhZG9ubHknXSA9PSAndHJ1ZScpKSB7CgkJCSRmICs9IDEgPDwgNjsKCQl9CgkJLy8gZGlzcGxheTogQ29udHJvbHMgd2hldGhlciB0aGUgZmllbGQgaXMgaGlkZGVuIG9yIHZpc2libGUgb24gc2NyZWVuIGFuZCBpbiBwcmludC4KCQlpZiAoaXNzZXQoJHByb3BbJ2Rpc3BsYXknXSkpIHsKCQkJaWYgKCRwcm9wWydkaXNwbGF5J10gPT0gJ2Rpc3BsYXkudmlzaWJsZScpIHsKCQkJCS8vCgkJCX0gZWxzZWlmICgkcHJvcFsnZGlzcGxheSddID09ICdkaXNwbGF5LmhpZGRlbicpIHsKCQkJCSRmICs9IDEgPDwgMTsKCQkJfSBlbHNlaWYgKCRwcm9wWydkaXNwbGF5J10gPT0gJ2Rpc3BsYXkubm9QcmludCcpIHsKCQkJCSRmIC09IDEgPDwgMjsKCQkJfSBlbHNlaWYgKCRwcm9wWydkaXNwbGF5J10gPT0gJ2Rpc3BsYXkubm9WaWV3JykgewoJCQkJJGYgKz0gMSA8PCA1OwoJCQl9CgkJfQoJCSRvcHRbJ2YnXSA9ICRmOwoJCS8vIGN1cnJlbnRWYWx1ZUluZGljZXM6IFJlYWRzIGFuZCB3cml0ZXMgc2luZ2xlIG9yIG11bHRpcGxlIHZhbHVlcyBvZiBhIGxpc3QgYm94IG9yIGNvbWJvIGJveC4KCQlpZiAoaXNzZXQoJHByb3BbJ2N1cnJlbnRWYWx1ZUluZGljZXMnXSkgQU5EIGlzX2FycmF5KCRwcm9wWydjdXJyZW50VmFsdWVJbmRpY2VzJ10pKSB7CgkJCSRvcHRbJ2knXSA9ICRwcm9wWydjdXJyZW50VmFsdWVJbmRpY2VzJ107CgkJfQoJCS8vIHZhbHVlOiBUaGUgdmFsdWUgb2YgdGhlIGZpZWxkIGRhdGEgdGhhdCB0aGUgdXNlciBoYXMgZW50ZXJlZC4KCQlpZiAoaXNzZXQoJHByb3BbJ3ZhbHVlJ10pKSB7CgkJCWlmIChpc19hcnJheSgkcHJvcFsndmFsdWUnXSkpIHsKCQkJCSRvcHRbJ29wdCddID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRwcm9wWyd2YWx1ZSddIEFTICRrZXkgPT4gJG9wdHZhbCkgewoJCQkJCS8vIGV4cG9ydFZhbHVlczogQW4gYXJyYXkgb2Ygc3RyaW5ncyByZXByZXNlbnRpbmcgdGhlIGV4cG9ydCB2YWx1ZXMgZm9yIHRoZSBmaWVsZC4KCQkJCQlpZiAoaXNzZXQoJHByb3BbJ2V4cG9ydFZhbHVlcyddWyRrZXldKSkgewoJCQkJCQkkb3B0WydvcHQnXVska2V5XSA9IGFycmF5KCRwcm9wWydleHBvcnRWYWx1ZXMnXVska2V5XSwgJHByb3BbJ3ZhbHVlJ11bJGtleV0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRvcHRbJ29wdCddWyRrZXldID0gJHByb3BbJ3ZhbHVlJ11bJGtleV07CgkJCQkJfQoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJG9wdFsndiddID0gJHByb3BbJ3ZhbHVlJ107CgkJCX0KCQl9CgkJLy8gcmljaFZhbHVlOiBUaGlzIHByb3BlcnR5IHNwZWNpZmllcyB0aGUgdGV4dCBjb250ZW50cyBhbmQgZm9ybWF0dGluZyBvZiBhIHJpY2ggdGV4dCBmaWVsZC4KCQlpZiAoaXNzZXQoJHByb3BbJ3JpY2hWYWx1ZSddKSkgewoJCQkkb3B0WydydiddID0gJHByb3BbJ3JpY2hWYWx1ZSddOwoJCX0KCQkvLyBzdWJtaXROYW1lOiBJZiBub25lbXB0eSwgdXNlZCBkdXJpbmcgZm9ybSBzdWJtaXNzaW9uIGluc3RlYWQgb2YgbmFtZS4gT25seSBhcHBsaWNhYmxlIGlmIHN1Ym1pdHRpbmcgaW4gSFRNTCBmb3JtYXQgKHRoYXQgaXMsIFVSTC1lbmNvZGVkKS4KCQlpZiAoaXNzZXQoJHByb3BbJ3N1Ym1pdE5hbWUnXSkpIHsKCQkJJG9wdFsndG0nXSA9ICRwcm9wWydzdWJtaXROYW1lJ107CgkJfQoJCS8vIG5hbWU6IEZ1bGx5IHF1YWxpZmllZCBmaWVsZCBuYW1lLgoJCWlmIChpc3NldCgkcHJvcFsnbmFtZSddKSkgewoJCQkkb3B0Wyd0J10gPSAkcHJvcFsnbmFtZSddOwoJCX0KCQkvLyB1c2VyTmFtZTogVGhlIHVzZXIgbmFtZSAoc2hvcnQgZGVzY3JpcHRpb24gc3RyaW5nKSBvZiB0aGUgZmllbGQuCgkJaWYgKGlzc2V0KCRwcm9wWyd1c2VyTmFtZSddKSkgewoJCQkkb3B0Wyd0dSddID0gJHByb3BbJ3VzZXJOYW1lJ107CgkJfQoJCS8vIGhpZ2hsaWdodDogRGVmaW5lcyBob3cgYSBidXR0b24gcmVhY3RzIHdoZW4gYSB1c2VyIGNsaWNrcyBpdC4KCQlpZiAoaXNzZXQoJHByb3BbJ2hpZ2hsaWdodCddKSkgewoJCQlzd2l0Y2ggKCRwcm9wWydoaWdobGlnaHQnXSkgewoJCQkJY2FzZSAnbm9uZSc6CgkJCQljYXNlICdoaWdobGlnaHQubic6IHsKCQkJCQkkb3B0WydoJ10gPSAnTic7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdpbnZlcnQnOgoJCQkJY2FzZSAnaGlnaGxpZ2h0LmknOiB7CgkJCQkJJG9wdFsnaCddID0gJ2knOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAncHVzaCc6CgkJCQljYXNlICdoaWdobGlnaHQucCc6IHsKCQkJCQkkb3B0WydoJ10gPSAnUCc7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdvdXRsaW5lJzoKCQkJCWNhc2UgJ2hpZ2hsaWdodC5vJzogewoJCQkJCSRvcHRbJ2gnXSA9ICdPJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkvLyBVbnN1cHBvcnRlZCBvcHRpb25zOgoJCS8vIC0gY2FsY09yZGVySW5kZXg6IENoYW5nZXMgdGhlIGNhbGN1bGF0aW9uIG9yZGVyIG9mIGZpZWxkcyBpbiB0aGUgZG9jdW1lbnQuCgkJLy8gLSBkZWxheTogRGVsYXlzIHRoZSByZWRyYXdpbmcgb2YgYSBmaWVsZCdzIGFwcGVhcmFuY2UuCgkJLy8gLSBkZWZhdWx0U3R5bGU6IFRoaXMgcHJvcGVydHkgZGVmaW5lcyB0aGUgZGVmYXVsdCBzdHlsZSBhdHRyaWJ1dGVzIGZvciB0aGUgZm9ybSBmaWVsZC4KCQkvLyAtIHN0eWxlOiBBbGxvd3MgdGhlIHVzZXIgdG8gc2V0IHRoZSBnbHlwaCBzdHlsZSBvZiBhIGNoZWNrIGJveCBvciByYWRpbyBidXR0b24uCgkJLy8gLSB0ZXh0Q29sb3IsIHRleHRGb250LCB0ZXh0U2l6ZQoJCXJldHVybiAkb3B0OwoJfQoKCS8qKgoJICogRm9ybWF0IHRoZSBwYWdlIG51bWJlcnMuCgkgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGVuIGZvciBjdXN0b20gZm9ybWF0cy4KCSAqIEBwYXJhbSAkbnVtIChpbnQpIHBhZ2UgbnVtYmVyCgkgKiBAc2luY2UgNC4yLjAwNSAoMjAwOC0xMS0wNikKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZm9ybWF0UGFnZU51bWJlcigkbnVtKSB7CgkJcmV0dXJuIG51bWJlcl9mb3JtYXQoKGZsb2F0KSRudW0sIDAsICcnLCAnLicpOwoJfQoKCS8qKgoJICogRm9ybWF0IHRoZSBwYWdlIG51bWJlcnMgb24gdGhlIFRhYmxlIE9mIENvbnRlbnQuCgkgKiBUaGlzIG1ldGhvZCBjYW4gYmUgb3ZlcnJpZGVuIGZvciBjdXN0b20gZm9ybWF0cy4KCSAqIEBwYXJhbSAkbnVtIChpbnQpIHBhZ2UgbnVtYmVyCgkgKiBAc2luY2UgNC41LjAwMSAoMjAwOS0wMS0wNCkKCSAqIEBzZWUgYWRkVE9DKCksIGFkZEhUTUxUT0MoKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmb3JtYXRUT0NQYWdlTnVtYmVyKCRudW0pIHsKCQlyZXR1cm4gbnVtYmVyX2Zvcm1hdCgoZmxvYXQpJG51bSwgMCwgJycsICcuJyk7Cgl9CgoJLyoqCgkgKiBFeHRyYWN0cyB0aGUgQ1NTIHByb3BlcnRpZXMgZnJvbSBhIENTUyBzdHJpbmcuCgkgKiBAcGFyYW0gJGNzc2RhdGEgKHN0cmluZykgc3RyaW5nIGNvbnRhaW5pbmcgQ1NTIGRlZmluaXRpb25zLgoJICogQHJldHVybiBBbiBhcnJheSB3aGVyZSB0aGUga2V5cyBhcmUgdGhlIENTUyBzZWxlY3RvcnMgYW5kIHRoZSB2YWx1ZXMgYXJlIHRoZSBDU1MgcHJvcGVydGllcy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS4xLjAwMCAoMjAxMC0wNS0yNSkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZXh0cmFjdENTU3Byb3BlcnRpZXMoJGNzc2RhdGEpIHsKCQlpZiAoZW1wdHkoJGNzc2RhdGEpKSB7CgkJCXJldHVybiBhcnJheSgpOwoJCX0KCQkvLyByZW1vdmUgY29tbWVudHMKCQkkY3NzZGF0YSA9IHByZWdfcmVwbGFjZSgnL1wvXCpbXlwqXSpcKlwvLycsICcnLCAkY3NzZGF0YSk7CgkJLy8gcmVtb3ZlIG5ld2xpbmVzIGFuZCBtdWx0aXBsZSBzcGFjZXMKCQkkY3NzZGF0YSA9IHByZWdfcmVwbGFjZSgnL1tcc10rLycsICcgJywgJGNzc2RhdGEpOwoJCS8vIHJlbW92ZSBzb21lIHNwYWNlcwoJCSRjc3NkYXRhID0gcHJlZ19yZXBsYWNlKCcvW1xzXSooWzs6XHtcfV17MX0pW1xzXSovJywgJ1xcMScsICRjc3NkYXRhKTsKCQkvLyByZW1vdmUgZW1wdHkgYmxvY2tzCgkJJGNzc2RhdGEgPSBwcmVnX3JlcGxhY2UoJy8oW15cfVx7XSspXHtcfS8nLCAnJywgJGNzc2RhdGEpOwoJCS8vIHJlcGxhY2UgbWVkaWEgdHlwZSBwYXJlbnRoZXNpcwoJCSRjc3NkYXRhID0gcHJlZ19yZXBsYWNlKCcvQG1lZGlhW1xzXSsoW15ce10qKVx7L2knLCAnQG1lZGlhIFxcMcKnJywgJGNzc2RhdGEpOwoJCSRjc3NkYXRhID0gcHJlZ19yZXBsYWNlKCcvXH1cfS9zaScsICd9wqcnLCAkY3NzZGF0YSk7CgkJLy8gdHJpbSBzdHJpbmcKCQkkY3NzZGF0YSA9IHRyaW0oJGNzc2RhdGEpOwoJCS8vIGZpbmQgbWVkaWEgYmxvY2tzIChhbGwsIGJyYWlsbGUsIGVtYm9zc2VkLCBoYW5kaGVsZCwgcHJpbnQsIHByb2plY3Rpb24sIHNjcmVlbiwgc3BlZWNoLCB0dHksIHR2KQoJCSRjc3NibG9ja3MgPSBhcnJheSgpOwoJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQlpZiAocHJlZ19tYXRjaF9hbGwoJy9AbWVkaWFbXHNdKyhbXlzCp10qKcKnKFtewqddKinCpy9pJywgJGNzc2RhdGEsICRtYXRjaGVzKSA+IDApIHsKCQkJZm9yZWFjaCAoJG1hdGNoZXNbMV0gYXMgJGtleSA9PiAkdHlwZSkgewoJCQkJJGNzc2Jsb2Nrc1skdHlwZV0gPSAkbWF0Y2hlc1syXVska2V5XTsKCQkJfQoJCQkvLyByZW1vdmUgbWVkaWEgYmxvY2tzCgkJCSRjc3NkYXRhID0gcHJlZ19yZXBsYWNlKCcvQG1lZGlhW1xzXSsoW15cwqddKinCpyhbXsKnXSopwqcvaScsICcnLCAkY3NzZGF0YSk7CgkJfQoJCS8vIGtlZXAgJ2FsbCcgYW5kICdwcmludCcgbWVkaWEsIG90aGVyIG1lZGlhIHR5cGVzIGFyZSBkaXNjYXJkZWQKCQlpZiAoaXNzZXQoJGNzc2Jsb2Nrc1snYWxsJ10pIEFORCAhZW1wdHkoJGNzc2Jsb2Nrc1snYWxsJ10pKSB7CgkJCSRjc3NkYXRhIC49ICRjc3NibG9ja3NbJ2FsbCddOwoJCX0KCQlpZiAoaXNzZXQoJGNzc2Jsb2Nrc1sncHJpbnQnXSkgQU5EICFlbXB0eSgkY3NzYmxvY2tzWydwcmludCddKSkgewoJCQkkY3NzZGF0YSAuPSAkY3NzYmxvY2tzWydwcmludCddOwoJCX0KCQkvLyByZXNldCBjc3MgYmxvY2tzIGFycmF5CgkJJGNzc2Jsb2NrcyA9IGFycmF5KCk7CgkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCS8vIGV4cGxvZGUgY3NzIGRhdGEgc3RyaW5nIGludG8gYXJyYXkKCQlpZiAoc3Vic3RyKCRjc3NkYXRhLCAtMSkgPT0gJ30nKSB7CgkJCS8vIHJlbW92ZSBsYXN0IHBhcmV0aGVzaXMKCQkJJGNzc2RhdGEgPSBzdWJzdHIoJGNzc2RhdGEsIDAsIC0xKTsKCQl9CgkJJG1hdGNoZXMgPSBleHBsb2RlKCd9JywgJGNzc2RhdGEpOwoJCWZvcmVhY2ggKCRtYXRjaGVzIGFzICRrZXkgPT4gJGJsb2NrKSB7CgkJCS8vIGluZGV4IDAgY29udGFpbnMgdGhlIENTUyBzZWxlY3RvciwgaW5kZXggMSBjb250YWlucyBDU1MgcHJvcGVydGllcwoJCQkkY3NzYmxvY2tzWyRrZXldID0gZXhwbG9kZSgneycsICRibG9jayk7CgkJCWlmICghaXNzZXQoJGNzc2Jsb2Nrc1ska2V5XVsxXSkpIHsKCQkJCS8vIHJlbW92ZSBlbXB0eSBkZWZpbml0aW9ucwoJCQkJdW5zZXQoJGNzc2Jsb2Nrc1ska2V5XSk7CgkJCX0KCQl9CgkJLy8gc3BsaXQgZ3JvdXBzIG9mIHNlbGVjdG9ycyAoY29tbWEtc2VwYXJhdGVkIGxpc3Qgb2Ygc2VsZWN0b3JzKQoJCWZvcmVhY2ggKCRjc3NibG9ja3MgYXMgJGtleSA9PiAkYmxvY2spIHsKCQkJaWYgKHN0cnBvcygkYmxvY2tbMF0sICcsJykgPiAwKSB7CgkJCQkkc2VsZWN0b3JzID0gZXhwbG9kZSgnLCcsICRibG9ja1swXSk7CgkJCQlmb3JlYWNoICgkc2VsZWN0b3JzIGFzICRzZWwpIHsKCQkJCQkkY3NzYmxvY2tzW10gPSBhcnJheSgwID0+IHRyaW0oJHNlbCksIDEgPT4gJGJsb2NrWzFdKTsKCQkJCX0KCQkJCXVuc2V0KCRjc3NibG9ja3NbJGtleV0pOwoJCQl9CgkJfQoJCS8vIGNvdmVydCBhcnJheSB0byBzZWxlY3RvciA9PiBwcm9wZXJ0aWVzCgkJJGNzc2RhdGEgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRjc3NibG9ja3MgYXMgJGJsb2NrKSB7CgkJCSRzZWxlY3RvciA9ICRibG9ja1swXTsKCQkJLy8gY2FsY3VsYXRlIHNlbGVjdG9yJ3Mgc3BlY2lmaWNpdHkKCQkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCQkkYSA9IDA7IC8vIHRoZSBkZWNsYXJhdGlvbiBpcyBub3QgZnJvbSBpcyBhICdzdHlsZScgYXR0cmlidXRlCgkJCSRiID0gaW50dmFsKHByZWdfbWF0Y2hfYWxsKCcvW1wjXS8nLCAkc2VsZWN0b3IsICRtYXRjaGVzKSk7IC8vIG51bWJlciBvZiBJRCBhdHRyaWJ1dGVzCgkJCSRjID0gaW50dmFsKHByZWdfbWF0Y2hfYWxsKCcvW1xbXC5dLycsICRzZWxlY3RvciwgJG1hdGNoZXMpKTsgLy8gbnVtYmVyIG9mIG90aGVyIGF0dHJpYnV0ZXMKCQkJJGMgKz0gaW50dmFsKHByZWdfbWF0Y2hfYWxsKCcvW1w6XWxpbmt8dmlzaXRlZHxob3ZlcnxhY3RpdmV8Zm9jdXN8dGFyZ2V0fGxhbmd8ZW5hYmxlZHxkaXNhYmxlZHxjaGVja2VkfGluZGV0ZXJtaW5hdGV8cm9vdHxudGh8Zmlyc3R8bGFzdHxvbmx5fGVtcHR5fGNvbnRhaW5zfG5vdC9pJywgJHNlbGVjdG9yLCAkbWF0Y2hlcykpOyAvLyBudW1iZXIgb2YgcHNldWRvLWNsYXNzZXMKCQkJJGQgPSBpbnR2YWwocHJlZ19tYXRjaF9hbGwoJy9bXD5cK1x+XHNdezF9W2EtekEtWjAtOV0rLycsICcgJy4kc2VsZWN0b3IsICRtYXRjaGVzKSk7IC8vIG51bWJlciBvZiBlbGVtZW50IG5hbWVzCgkJCSRkICs9IGludHZhbChwcmVnX21hdGNoX2FsbCgnL1tcOl1bXDpdLycsICRzZWxlY3RvciwgJG1hdGNoZXMpKTsgLy8gbnVtYmVyIG9mIHBzZXVkby1lbGVtZW50cwoJCQkkc3BlY2lmaWNpdHkgPSAkYS4kYi4kYy4kZDsKCQkJLy8gYWRkIHNwZWNpZmljaXR5IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIHNlbGVjdG9yCgkJCSRjc3NkYXRhWyRzcGVjaWZpY2l0eS4nICcuJHNlbGVjdG9yXSA9ICRibG9ja1sxXTsKCQl9CgkJLy8gc29ydCBzZWxlY3RvcnMgYWxwaGFiZXRpY2FsbHkgdG8gYWNjb3VudCBmb3Igc3BlY2lmaWNpdHkKCQlrc29ydCgkY3NzZGF0YSwgU09SVF9TVFJJTkcpOwoJCS8vIHJldHVybiBhcnJheQoJCXJldHVybiAkY3NzZGF0YTsKCX0KCgkvKioKCSAqIENsZWFudXAgSFRNTCBjb2RlIChyZXF1aXJlcyBIVE1MIFRpZHkgbGlicmFyeSkuCgkgKiBAcGFyYW0gJGh0bWwgKHN0cmluZykgaHRtbGNvZGUgdG8gZml4CgkgKiBAcGFyYW0gJGRlZmF1bHRfY3NzIChzdHJpbmcpIENTUyBjb21tYW5kcyB0byBhZGQKCSAqIEBwYXJhbSAkdGFndnMgKGFycmF5KSBwYXJhbWV0ZXJzIGZvciBzZXRIdG1sVlNwYWNlIG1ldGhvZAoJICogQHBhcmFtICR0aWR5X29wdGlvbnMgKGFycmF5KSBvcHRpb25zIGZvciB0aWR5X3BhcnNlX3N0cmluZyBmdW5jdGlvbgoJICogQHBhcmFtICR0YWd2c3BhY2VzIChhcnJheSkgQXJyYXkgb2YgdmVydGljYWwgc3BhY2VzIGZvciB0YWdzLgoJICogQHJldHVybiBzdHJpbmcgWEhUTUwgY29kZSBjbGVhbmVkIHVwCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4wMTcgKDIwMTAtMTEtMTYpCgkgKiBAc2VlIHNldEh0bWxWU3BhY2UoKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaXhIVE1MQ29kZSgkaHRtbCwgJGRlZmF1bHRfY3NzPScnLCAkdGFndnM9JycsICR0aWR5X29wdGlvbnM9JycsICYkdGFndnNwYWNlcykgewoJCS8vIGNvbmZpZ3VyZSBwYXJhbWV0ZXJzIGZvciBIVE1MIFRpZHkKCQlpZiAoJHRpZHlfb3B0aW9ucyA9PT0gJycpIHsKCQkJJHRpZHlfb3B0aW9ucyA9IGFycmF5ICgKCQkJCSdjbGVhbicgPT4gMSwKCQkJCSdkcm9wLWVtcHR5LXBhcmFzJyA9PiAwLAoJCQkJJ2Ryb3AtcHJvcHJpZXRhcnktYXR0cmlidXRlcycgPT4gMSwKCQkJCSdmaXgtYmFja3NsYXNoJyA9PiAxLAoJCQkJJ2hpZGUtY29tbWVudHMnID0+IDEsCgkJCQknam9pbi1zdHlsZXMnID0+IDEsCgkJCQknbG93ZXItbGl0ZXJhbHMnID0+IDEsCgkJCQknbWVyZ2UtZGl2cycgPT4gMSwKCQkJCSdtZXJnZS1zcGFucycgPT4gMSwKCQkJCSdvdXRwdXQteGh0bWwnID0+IDEsCgkJCQknd29yZC0yMDAwJyA9PiAxLAoJCQkJJ3dyYXAnID0+IDAsCgkJCQknb3V0cHV0LWJvbScgPT4gMCwKCQkJCS8vJ2NoYXItZW5jb2RpbmcnID0+ICd1dGY4JywKCQkJCS8vJ2lucHV0LWVuY29kaW5nJyA9PiAndXRmOCcsCgkJCQkvLydvdXRwdXQtZW5jb2RpbmcnID0+ICd1dGY4JwoJCQkpOwoJCX0KCQkvLyBjbGVhbiB1cCB0aGUgSFRNTCBjb2RlCgkJJHRpZHkgPSB0aWR5X3BhcnNlX3N0cmluZygkaHRtbCwgJHRpZHlfb3B0aW9ucyk7CgkJLy8gZml4IHRoZSBIVE1MCgkJJHRpZHktPmNsZWFuUmVwYWlyKCk7CgkJLy8gZ2V0IHRoZSBDU1MgcGFydAoJCSR0aWR5X2hlYWQgPSB0aWR5X2dldF9oZWFkKCR0aWR5KTsKCQkkY3NzID0gJHRpZHlfaGVhZC0+dmFsdWU7CgkJJGNzcyA9IHByZWdfcmVwbGFjZSgnLzxzdHlsZShbXj5dKyk+L2ltcycsICc8c3R5bGU+JywgJGNzcyk7CgkJJGNzcyA9IHByZWdfcmVwbGFjZSgnLzxcL3N0eWxlPiguKik8c3R5bGU+L2ltcycsICJcbiIsICRjc3MpOwoJCSRjc3MgPSBzdHJfcmVwbGFjZSgnLyo8IVtDREFUQVsqLycsICcnLCAkY3NzKTsKCQkkY3NzID0gc3RyX3JlcGxhY2UoJy8qXV0+Ki8nLCAnJywgJGNzcyk7CgkJcHJlZ19tYXRjaCgnLzxzdHlsZT4oLiopPFwvc3R5bGU+L2ltcycsICRjc3MsICRtYXRjaGVzKTsKCQlpZiAoaXNzZXQoJG1hdGNoZXNbMV0pKSB7CgkJCSRjc3MgPSBzdHJ0b2xvd2VyKCRtYXRjaGVzWzFdKTsKCQl9IGVsc2UgewoJCQkkY3NzID0gJyc7CgkJfQoJCS8vIGluY2x1ZGUgZGVmYXVsdCBjc3MKCQkkY3NzID0gJzxzdHlsZT4nLiRkZWZhdWx0X2Nzcy4kY3NzLic8L3N0eWxlPic7CgkJLy8gZ2V0IHRoZSBib2R5IHBhcnQKCQkkdGlkeV9ib2R5ID0gdGlkeV9nZXRfYm9keSgkdGlkeSk7CgkJJGh0bWwgPSAkdGlkeV9ib2R5LT52YWx1ZTsKCQkvLyBmaXggc29tZSBzZWxmLWNsb3NpbmcgdGFncwoJCSRodG1sID0gc3RyX3JlcGxhY2UoJzxicj4nLCAnPGJyIC8+JywgJGh0bWwpOwoJCS8vIHJlbW92ZSBzb21lIGVtcHR5IHRhZyBibG9ja3MKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLzxkaXYoW15cPl0qKT48XC9kaXY+LycsICcnLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88cChbXlw+XSopPjxcL3A+LycsICcnLCAkaHRtbCk7CgkJaWYgKCR0YWd2cyAhPT0gJycpIHsKCQkJLy8gc2V0IHZlcnRpY2FsIHNwYWNlIGZvciBzb21lIFhIVE1MIHRhZ3MKCQkJJHRhZ3ZzcGFjZXMgPSAkdGFndnM7CgkJfQoJCS8vIHJldHVybiB0aGUgY2xlYW5lZCBYSFRNTCBjb2RlICsgQ1NTCgkJcmV0dXJuICRjc3MuJGh0bWw7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRydWUgaWYgdGhlIENTUyBzZWxlY3RvciBpcyB2YWxpZCBmb3IgdGhlIHNlbGVjdGVkIEhUTUwgdGFnCgkgKiBAcGFyYW0gJGRvbSAoYXJyYXkpIGFycmF5IG9mIEhUTUwgdGFncyBhbmQgcHJvcGVydGllcwoJICogQHBhcmFtICRrZXkgKGludCkga2V5IG9mIHRoZSBjdXJyZW50IEhUTUwgdGFnCgkgKiBAcGFyYW0gJHNlbGVjdG9yIChzdHJpbmcpIENTUyBzZWxlY3RvciBzdHJpbmcKCSAqIEByZXR1cm4gdHJ1ZSBpZiB0aGUgc2VsZWN0b3IgaXMgdmFsaWQsIGZhbHNlIG90aGVyd2lzZQoJICogQHNpbmNlIDUuMS4wMDAgKDIwMTAtMDUtMjUpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGlzVmFsaWRDU1NTZWxlY3RvckZvclRhZygkZG9tLCAka2V5LCAkc2VsZWN0b3IpIHsKCQkkdmFsaWQgPSBmYWxzZTsgLy8gdmFsdWUgdG8gYmUgcmV0dXJuZWQKCQkkdGFnID0gJGRvbVska2V5XVsndmFsdWUnXTsKCQkkY2xhc3MgPSBhcnJheSgpOwoJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY2xhc3MnXSkgQU5EICFlbXB0eSgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY2xhc3MnXSkpIHsKCQkJJGNsYXNzID0gZXhwbG9kZSgnICcsIHN0cnRvbG93ZXIoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2NsYXNzJ10pKTsKCQl9CgkJJGlkID0gJyc7CgkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydpZCddKSBBTkQgIWVtcHR5KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydpZCddKSkgewoJCQkkaWQgPSBzdHJ0b2xvd2VyKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydpZCddKTsKCQl9CgkJJHNlbGVjdG9yID0gcHJlZ19yZXBsYWNlKCcvKFtcPlwrXH5cc117MX0pKFtcLl17MX0pKFteXD5cK1x+XHNdKikvc2knLCAnXFwxKi5cXDMnLCAkc2VsZWN0b3IpOwoJCSRtYXRjaGVzID0gYXJyYXkoKTsKCQlpZiAocHJlZ19tYXRjaF9hbGwoJy8oW1w+XCtcflxzXXsxfSkoW2EtekEtWjAtOVwqXSspKFteXD5cK1x+XHNdKikvc2knLCAkc2VsZWN0b3IsICRtYXRjaGVzLCBQUkVHX1BBVFRFUk5fT1JERVIgfCBQUkVHX09GRlNFVF9DQVBUVVJFKSA+IDApIHsKCQkJJHBhcmVudG9wID0gYXJyYXlfcG9wKCRtYXRjaGVzWzFdKTsKCQkJJG9wZXJhdG9yID0gJHBhcmVudG9wWzBdOwoJCQkkb2Zmc2V0ID0gJHBhcmVudG9wWzFdOwoJCQkkbGFzdHRhZyA9IGFycmF5X3BvcCgkbWF0Y2hlc1syXSk7CgkJCSRsYXN0dGFnID0gc3RydG9sb3dlcih0cmltKCRsYXN0dGFnWzBdKSk7CgkJCWlmICgoJGxhc3R0YWcgPT0gJyonKSBPUiAoJGxhc3R0YWcgPT0gJHRhZykpIHsKCQkJCS8vIHRoZSBsYXN0IGVsZW1lbnQgb24gc2VsZWN0b3IgaXMgb3VyIHRhZyBvciAnYW55IHRhZycKCQkJCSRhdHRyaWIgPSBhcnJheV9wb3AoJG1hdGNoZXNbM10pOwoJCQkJJGF0dHJpYiA9IHN0cnRvbG93ZXIodHJpbSgkYXR0cmliWzBdKSk7CgkJCQlpZiAoIWVtcHR5KCRhdHRyaWIpKSB7CgkJCQkJLy8gY2hlY2sgaWYgbWF0Y2hlcyBjbGFzcywgaWQsIGF0dHJpYnV0ZSwgcHNldWRvLWNsYXNzIG9yIHBzZXVkby1lbGVtZW50CgkJCQkJc3dpdGNoICgkYXR0cmliWzBdKSB7CgkJCQkJCWNhc2UgJy4nOiB7IC8vIGNsYXNzCgkJCQkJCQlpZiAoaW5fYXJyYXkoc3Vic3RyKCRhdHRyaWIsIDEpLCAkY2xhc3MpKSB7CgkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJyMnOiB7IC8vIElECgkJCQkJCQlpZiAoc3Vic3RyKCRhdHRyaWIsIDEpID09ICRpZCkgewoJCQkJCQkJCSR2YWxpZCA9IHRydWU7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdbJzogeyAvLyBhdHRyaWJ1dGUKCQkJCQkJCSRhdHRybWF0Y2ggPSBhcnJheSgpOwoJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy9cWyhbYS16QS1aMC05XSopW1xzXSooW1x+XF5cJFwqXHxcPV0qKVtcc10qWyJdPyhbXiJcXV0qKVsiXT9cXS9pJywgJGF0dHJpYiwgJGF0dHJtYXRjaCkgPiAwKSB7CgkJCQkJCQkJJGF0dCA9IHN0cnRvbG93ZXIoJGF0dHJtYXRjaFsxXSk7CgkJCQkJCQkJJHZhbCA9ICRhdHRybWF0Y2hbM107CgkJCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWyRhdHRdKSkgewoJCQkJCQkJCQlzd2l0Y2ggKCRhdHRybWF0Y2hbMl0pIHsKCQkJCQkJCQkJCWNhc2UgJz0nOiB7CgkJCQkJCQkJCQkJaWYgKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWyRhdHRdID09ICR2YWwpIHsKCQkJCQkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQljYXNlICd+PSc6IHsKCQkJCQkJCQkJCQlpZiAoaW5fYXJyYXkoJHZhbCwgZXhwbG9kZSgnICcsICRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWyRhdHRdKSkpIHsKCQkJCQkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQljYXNlICdePSc6IHsKCQkJCQkJCQkJCQlpZiAoJHZhbCA9PSBzdWJzdHIoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJGF0dF0sIDAsIHN0cmxlbigkdmFsKSkpIHsKCQkJCQkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQljYXNlICckPSc6IHsKCQkJCQkJCQkJCQlpZiAoJHZhbCA9PSBzdWJzdHIoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJGF0dF0sIC1zdHJsZW4oJHZhbCkpKSB7CgkJCQkJCQkJCQkJCSR2YWxpZCA9IHRydWU7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJY2FzZSAnKj0nOiB7CgkJCQkJCQkJCQkJaWYgKHN0cnBvcygkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVskYXR0XSwgJHZhbCkgIT09IGZhbHNlKSB7CgkJCQkJCQkJCQkJCSR2YWxpZCA9IHRydWU7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJY2FzZSAnfD0nOiB7CgkJCQkJCQkJCQkJaWYgKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWyRhdHRdID09ICR2YWwpIHsKCQkJCQkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCQkJCQl9IGVsc2VpZiAocHJlZ19tYXRjaCgnLycuJHZhbC4nW1wtXXsxfS9pJywgJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJGF0dF0pID4gMCkgewoJCQkJCQkJCQkJCQkkdmFsaWQgPSB0cnVlOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCWRlZmF1bHQ6IHsKCQkJCQkJCQkJCQkkdmFsaWQgPSB0cnVlOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnOic6IHsgLy8gcHNldWRvLWNsYXNzIG9yIHBzZXVkby1lbGVtZW50CgkJCQkJCQlpZiAoJGF0dHJpYnsxfSA9PSAnOicpIHsgLy8gcHNldWRvLWVsZW1lbnQKCQkJCQkJCQkvLyBwc2V1ZG8tZWxlbWVudHMgYXJlIG5vdCBzdXBwb3J0ZWQhCgkJCQkJCQkJLy8gKDo6Zmlyc3QtbGluZSwgOjpmaXJzdC1sZXR0ZXIsIDo6YmVmb3JlLCA6OmFmdGVyKQoJCQkJCQkJfSBlbHNlIHsgLy8gcHNldWRvLWNsYXNzCgkJCQkJCQkJLy8gcHNldWRvLWNsYXNzZXMgYXJlIG5vdCBzdXBwb3J0ZWQhCgkJCQkJCQkJLy8gKDpyb290LCA6bnRoLWNoaWxkKG4pLCA6bnRoLWxhc3QtY2hpbGQobiksIDpudGgtb2YtdHlwZShuKSwgOm50aC1sYXN0LW9mLXR5cGUobiksIDpmaXJzdC1jaGlsZCwgOmxhc3QtY2hpbGQsIDpmaXJzdC1vZi10eXBlLCA6bGFzdC1vZi10eXBlLCA6b25seS1jaGlsZCwgOm9ubHktb2YtdHlwZSwgOmVtcHR5LCA6bGluaywgOnZpc2l0ZWQsIDphY3RpdmUsIDpob3ZlciwgOmZvY3VzLCA6dGFyZ2V0LCA6bGFuZyhmciksIDplbmFibGVkLCA6ZGlzYWJsZWQsIDpjaGVja2VkKQoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQl9IC8vIGVuZCBvZiBzd2l0Y2gKCQkJCX0gZWxzZSB7CgkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCX0KCQkJCWlmICgkdmFsaWQgQU5EICgkb2Zmc2V0ID4gMCkpIHsKCQkJCQkkdmFsaWQgPSBmYWxzZTsKCQkJCQkvLyBjaGVjayByZW1haW5pbmcgc2VsZWN0b3IgcGFydAoJCQkJCSRzZWxlY3RvciA9IHN1YnN0cigkc2VsZWN0b3IsIDAsICRvZmZzZXQpOwoJCQkJCXN3aXRjaCAoJG9wZXJhdG9yKSB7CgkJCQkJCWNhc2UgJyAnOiB7IC8vIGRlc2NlbmRhbnQgb2YgYW4gZWxlbWVudAoJCQkJCQkJd2hpbGUgKCRkb21bJGtleV1bJ3BhcmVudCddID4gMCkgewoJCQkJCQkJCWlmIChzZWxmOjppc1ZhbGlkQ1NTU2VsZWN0b3JGb3JUYWcoJGRvbSwgJGRvbVska2V5XVsncGFyZW50J10sICRzZWxlY3RvcikpIHsKCQkJCQkJCQkJJHZhbGlkID0gdHJ1ZTsKCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJGtleSA9ICRkb21bJGtleV1bJ3BhcmVudCddOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJz4nOiB7IC8vIGNoaWxkIG9mIGFuIGVsZW1lbnQKCQkJCQkJCSR2YWxpZCA9IHNlbGY6OmlzVmFsaWRDU1NTZWxlY3RvckZvclRhZygkZG9tLCAkZG9tWyRrZXldWydwYXJlbnQnXSwgJHNlbGVjdG9yKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJysnOiB7IC8vIGltbWVkaWF0ZWx5IHByZWNlZGVkIGJ5IGFuIGVsZW1lbnQKCQkJCQkJCWZvciAoJGkgPSAoJGtleSAtIDEpOyAkaSA+ICRkb21bJGtleV1bJ3BhcmVudCddOyAtLSRpKSB7CgkJCQkJCQkJaWYgKCRkb21bJGldWyd0YWcnXSBBTkQgJGRvbVskaV1bJ29wZW5pbmcnXSkgewoJCQkJCQkJCQkkdmFsaWQgPSBzZWxmOjppc1ZhbGlkQ1NTU2VsZWN0b3JGb3JUYWcoJGRvbSwgJGksICRzZWxlY3Rvcik7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ34nOiB7IC8vIHByZWNlZGVkIGJ5IGFuIGVsZW1lbnQKCQkJCQkJCWZvciAoJGkgPSAoJGtleSAtIDEpOyAkaSA+ICRkb21bJGtleV1bJ3BhcmVudCddOyAtLSRpKSB7CgkJCQkJCQkJaWYgKCRkb21bJGldWyd0YWcnXSBBTkQgJGRvbVskaV1bJ29wZW5pbmcnXSkgewoJCQkJCQkJCQlpZiAoc2VsZjo6aXNWYWxpZENTU1NlbGVjdG9yRm9yVGFnKCRkb20sICRpLCAkc2VsZWN0b3IpKSB7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkdmFsaWQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBzdHlsZXMgYXJyYXkgdGhhdCBhcHBseSBmb3IgdGhlIHNlbGVjdGVkIEhUTUwgdGFnLgoJICogQHBhcmFtICRkb20gKGFycmF5KSBhcnJheSBvZiBIVE1MIHRhZ3MgYW5kIHByb3BlcnRpZXMKCSAqIEBwYXJhbSAka2V5IChpbnQpIGtleSBvZiB0aGUgY3VycmVudCBIVE1MIHRhZwoJICogQHBhcmFtICRjc3MgKGFycmF5KSBhcnJheSBvZiBDU1MgcHJvcGVydGllcwoJICogQHJldHVybiBhcnJheSBjb250YWluaW5nIENTUyBwcm9wZXJ0aWVzCgkgKiBAc2luY2UgNS4xLjAwMCAoMjAxMC0wNS0yNSkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0Q1NTZGF0YUFycmF5KCRkb20sICRrZXksICRjc3MpIHsKCQkkY3NzYXJyYXkgPSBhcnJheSgpOyAvLyBzdHlsZSB0byBiZSByZXR1cm5lZAoJCS8vIGdldCBwYXJlbnQgQ1NTIHNlbGVjdG9ycwoJCSRzZWxlY3RvcnMgPSBhcnJheSgpOwoJCWlmIChpc3NldCgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjc3NzZWwnXSkpIHsKCQkJJHNlbGVjdG9ycyA9ICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2Nzc3NlbCddOwoJCX0KCQkvLyBnZXQgYWxsIHN0eWxlcyB0aGF0IGFwcGx5CgkJZm9yZWFjaCgkY3NzIGFzICRzZWxlY3RvciA9PiAkc3R5bGUpIHsKCQkJJHBvcyA9IHN0cnBvcygkc2VsZWN0b3IsICcgJyk7CgkJCS8vIGdldCBzcGVjaWZpY2l0eQoJCQkkc3BlY2lmaWNpdHkgPSBzdWJzdHIoJHNlbGVjdG9yLCAwLCAkcG9zKTsKCQkJLy8gcmVtb3ZlIHNwZWNpZmljaXR5CgkJCSRzZWxlY3RvciA9IHN1YnN0cigkc2VsZWN0b3IsICRwb3MpOwoJCQkvLyBjaGVjayBpZiB0aGlzIHNlbGVjdG9yIGFwcGx5IHRvIGN1cnJlbnQgdGFnCgkJCWlmIChzZWxmOjppc1ZhbGlkQ1NTU2VsZWN0b3JGb3JUYWcoJGRvbSwgJGtleSwgJHNlbGVjdG9yKSkgewoJCQkJaWYgKCFpbl9hcnJheSgkc2VsZWN0b3IsICRzZWxlY3RvcnMpKSB7CgkJCQkJLy8gYWRkIHN0eWxlIGlmIG5vdCBhbHJlYWR5IGFkZGVkIG9uIHBhcmVudCBzZWxlY3RvcgoJCQkJCSRjc3NhcnJheVtdID0gYXJyYXkoJ2snID0+ICRzZWxlY3RvciwgJ3MnID0+ICRzcGVjaWZpY2l0eSwgJ2MnID0+ICRzdHlsZSk7CgkJCQkJJHNlbGVjdG9yc1tdID0gJHNlbGVjdG9yOwoJCQkJfQoJCQl9CgkJfQoJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc3R5bGUnXSkpIHsKCQkJLy8gYXR0YWNoIGlubGluZSBzdHlsZSAobGF0ZXN0IHByb3BlcnRpZXMgaGF2ZSBoaWdoIHByaW9yaXR5KQoJCQkkY3NzYXJyYXlbXSA9IGFycmF5KCdrJyA9PiAnJywgJ3MnID0+ICcxMDAwJywgJ2MnID0+ICRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzdHlsZSddKTsKCQl9CgkJLy8gb3JkZXIgdGhlIGNzcyBhcnJheSB0byBhY2NvdW50IGZvciBzcGVjaWZpY2l0eQoJCSRjc3NvcmRlcmVkID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkY3NzYXJyYXkgYXMgJGtleSA9PiAkdmFsKSB7CgkJCSRza2V5ID0gc3ByaW50ZignJTA0ZCcsICRrZXkpOwoJCQkkY3Nzb3JkZXJlZFskdmFsWydzJ10uJ18nLiRza2V5XSA9ICR2YWw7CgkJfQoJCS8vIHNvcnQgc2VsZWN0b3JzIGFscGhhYmV0aWNhbGx5IHRvIGFjY291bnQgZm9yIHNwZWNpZmljaXR5CgkJa3NvcnQoJGNzc29yZGVyZWQsIFNPUlRfU1RSSU5HKTsKCQlyZXR1cm4gYXJyYXkoJHNlbGVjdG9ycywgJGNzc29yZGVyZWQpOwoJfQoKCS8qKgoJICogQ29tcGFjdCBDU1MgZGF0YSBhcnJheSBpbnRvIHNpbmdsZSBzdHJpbmcuCgkgKiBAcGFyYW0gJGNzcyAoYXJyYXkpIGFycmF5IG9mIENTUyBwcm9wZXJ0aWVzCgkgKiBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIG1lcmdlZCBDU1MgcHJvcGVydGllcwoJICogQHNpbmNlIDUuOS4wNzAgKDIwMTEtMDQtMTkpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFRhZ1N0eWxlRnJvbUNTU2FycmF5KCRjc3MpIHsKCQkkdGFnc3R5bGUgPSAnJzsgLy8gdmFsdWUgdG8gYmUgcmV0dXJuZWQKCQlmb3JlYWNoICgkY3NzIGFzICRzdHlsZSkgewoJCQkvLyBzcGxpdCBzaW5nbGUgY3NzIGNvbW1hbmRzCgkJCSRjc3NjbWRzID0gZXhwbG9kZSgnOycsICRzdHlsZVsnYyddKTsKCQkJZm9yZWFjaCAoJGNzc2NtZHMgYXMgJGNtZCkgewoJCQkJaWYgKCFlbXB0eSgkY21kKSkgewoJCQkJCSRwb3MgPSBzdHJwb3MoJGNtZCwgJzonKTsKCQkJCQlpZiAoJHBvcyAhPT0gZmFsc2UpIHsKCQkJCQkJJGNtZCA9IHN1YnN0cigkY21kLCAwLCAoJHBvcyArIDEpKTsKCQkJCQkJaWYgKHN0cnBvcygkdGFnc3R5bGUsICRjbWQpICE9PSBmYWxzZSkgewoJCQkJCQkJLy8gcmVtb3ZlIGR1cGxpY2F0ZSBjb21tYW5kcyAobGFzdCBjb21tYW5kcyBoYXZlIGhpZ2ggcHJpb3JpdHkpCgkJCQkJCQkkdGFnc3R5bGUgPSBwcmVnX3JlcGxhY2UoJy8nLiRjbWQuJ1teO10rL2knLCAnJywgJHRhZ3N0eWxlKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCQkkdGFnc3R5bGUgLj0gJzsnLiRzdHlsZVsnYyddOwoJCX0KCQkvLyByZW1vdmUgbXVsdGlwbGUgc2VtaWNvbG9ucwoJCSR0YWdzdHlsZSA9IHByZWdfcmVwbGFjZSgnL1s7XSsvJywgJzsnLCAkdGFnc3R5bGUpOwoJCXJldHVybiAkdGFnc3R5bGU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBSb21hbiByZXByZXNlbnRhdGlvbiBvZiBhbiBpbnRlZ2VyIG51bWJlcgoJICogQHBhcmFtICRudW1iZXIgKGludCkgbnVtYmVyIHRvIGNvbnZlcnQKCSAqIEByZXR1cm4gc3RyaW5nIHJvbWFuIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBzcGVjaWZpZWQgbnVtYmVyCgkgKiBAc2luY2UgNC40LjAwNCAoMjAwOC0xMi0xMCkKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gaW50VG9Sb21hbigkbnVtYmVyKSB7CgkJJHJvbWFuID0gJyc7CgkJd2hpbGUgKCRudW1iZXIgPj0gMTAwMCkgewoJCQkkcm9tYW4gLj0gJ00nOwoJCQkkbnVtYmVyIC09IDEwMDA7CgkJfQoJCXdoaWxlICgkbnVtYmVyID49IDkwMCkgewoJCQkkcm9tYW4gLj0gJ0NNJzsKCQkJJG51bWJlciAtPSA5MDA7CgkJfQoJCXdoaWxlICgkbnVtYmVyID49IDUwMCkgewoJCQkkcm9tYW4gLj0gJ0QnOwoJCQkkbnVtYmVyIC09IDUwMDsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gNDAwKSB7CgkJCSRyb21hbiAuPSAnQ0QnOwoJCQkkbnVtYmVyIC09IDQwMDsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gMTAwKSB7CgkJCSRyb21hbiAuPSAnQyc7CgkJCSRudW1iZXIgLT0gMTAwOwoJCX0KCQl3aGlsZSAoJG51bWJlciA+PSA5MCkgewoJCQkkcm9tYW4gLj0gJ1hDJzsKCQkJJG51bWJlciAtPSA5MDsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gNTApIHsKCQkJJHJvbWFuIC49ICdMJzsKCQkJJG51bWJlciAtPSA1MDsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gNDApIHsKCQkJJHJvbWFuIC49ICdYTCc7CgkJCSRudW1iZXIgLT0gNDA7CgkJfQoJCXdoaWxlICgkbnVtYmVyID49IDEwKSB7CgkJCSRyb21hbiAuPSAnWCc7CgkJCSRudW1iZXIgLT0gMTA7CgkJfQoJCXdoaWxlICgkbnVtYmVyID49IDkpIHsKCQkJJHJvbWFuIC49ICdJWCc7CgkJCSRudW1iZXIgLT0gOTsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gNSkgewoJCQkkcm9tYW4gLj0gJ1YnOwoJCQkkbnVtYmVyIC09IDU7CgkJfQoJCXdoaWxlICgkbnVtYmVyID49IDQpIHsKCQkJJHJvbWFuIC49ICdJVic7CgkJCSRudW1iZXIgLT0gNDsKCQl9CgkJd2hpbGUgKCRudW1iZXIgPj0gMSkgewoJCQkkcm9tYW4gLj0gJ0knOwoJCQktLSRudW1iZXI7CgkJfQoJCXJldHVybiAkcm9tYW47Cgl9CgoJLyoqCgkgKiBGaW5kIHBvc2l0aW9uIG9mIGxhc3Qgb2NjdXJyZW5jZSBvZiBhIHN1YnN0cmluZyBpbiBhIHN0cmluZwoJICogQHBhcmFtICRoYXlzdGFjayAoc3RyaW5nKSBUaGUgc3RyaW5nIHRvIHNlYXJjaCBpbi4KCSAqIEBwYXJhbSAkbmVlZGxlIChzdHJpbmcpIHN1YnN0cmluZyB0byBzZWFyY2guCgkgKiBAcGFyYW0gJG9mZnNldCAoaW50KSBNYXkgYmUgc3BlY2lmaWVkIHRvIGJlZ2luIHNlYXJjaGluZyBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIGNoYXJhY3RlcnMgaW50byB0aGUgc3RyaW5nLgoJICogQHJldHVybiBSZXR1cm5zIHRoZSBwb3NpdGlvbiB3aGVyZSB0aGUgbmVlZGxlIGV4aXN0cy4gUmV0dXJucyBGQUxTRSBpZiB0aGUgbmVlZGxlIHdhcyBub3QgZm91bmQuCgkgKiBAc2luY2UgNC44LjAzOCAoMjAxMC0wMy0xMykKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gcmV2c3RycG9zKCRoYXlzdGFjaywgJG5lZWRsZSwgJG9mZnNldCA9IDApIHsKCQkkbGVuZ3RoID0gc3RybGVuKCRoYXlzdGFjayk7CgkJJG9mZnNldCA9ICgkb2Zmc2V0ID4gMCk/KCRsZW5ndGggLSAkb2Zmc2V0KTphYnMoJG9mZnNldCk7CgkJJHBvcyA9IHN0cnBvcyhzdHJyZXYoJGhheXN0YWNrKSwgc3RycmV2KCRuZWVkbGUpLCAkb2Zmc2V0KTsKCQlyZXR1cm4gKCRwb3MgPT09IGZhbHNlKT9mYWxzZTooJGxlbmd0aCAtICRwb3MgLSBzdHJsZW4oJG5lZWRsZSkpOwoJfQoKCS8qKgoJICogU2VyaWFsaXplIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgdG8gYmUgdXNlZCB3aXRoIFRDUERGIHRhZyBpbiBIVE1MIGNvZGUuCgkgKiBAcGFyYW0gJHBhcmFycmF5IChhcnJheSkgcGFyYW1ldGVycyBhcnJheQoJICogQHJldHVybiBzdGluZyBjb250YWluaW5nIHNlcmlhbGl6ZWQgZGF0YQoJICogQHNpbmNlIDQuOS4wMDYgKDIwMTAtMDQtMDIpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHNlcmlhbGl6ZVRDUERGdGFnUGFyYW1ldGVycygkcGFyYXJyYXkpIHsKCQlyZXR1cm4gdXJsZW5jb2RlKHNlcmlhbGl6ZSgkcGFyYXJyYXkpKTsKCX0KCgkvKioKCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgaHlwaGVuYXRpb24gcGF0dGVybnMuCgkgKiBAcGFyYW0gJGZpbGUgKHN0cmluZykgVEVYIGZpbGUgY29udGFpbmluZyBoeXBlbmF0aW9uIHBhdHRlcm5zLiBURVggcGF0dHJucyBjYW4gYmUgZG93bmxvYWRlZCBmcm9tIGh0dHA6Ly93d3cuY3Rhbi5vcmcvdGV4LWFyY2hpdmUvbGFuZ3VhZ2UvaHlwaC11dGY4L3RleC9nZW5lcmljL2h5cGgtdXRmOC9wYXR0ZXJucy8KCSAqIEByZXR1cm4gYXJyYXkgb2YgaHlwaGVuYXRpb24gcGF0dGVybnMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC45LjAxMiAoMjAxMC0wNC0xMikKCSAqIEBwdWJsaWMgc3RhdGljCgkgKi8KCXB1YmxpYyBzdGF0aWMgZnVuY3Rpb24gZ2V0SHlwaGVuUGF0dGVybnNGcm9tVEVYKCRmaWxlKSB7CgkJLy8gVEVYIHBhdHRlcm5zIGFyZSBhdmFpbGFibGUgYXQ6CgkJLy8gaHR0cDovL3d3dy5jdGFuLm9yZy90ZXgtYXJjaGl2ZS9sYW5ndWFnZS9oeXBoLXV0ZjgvdGV4L2dlbmVyaWMvaHlwaC11dGY4L3BhdHRlcm5zLwoJCSRkYXRhID0gZmlsZV9nZXRfY29udGVudHMoJGZpbGUpOwoJCSRwYXR0ZXJucyA9IGFycmF5KCk7CgkJLy8gcmVtb3ZlIGNvbW1lbnRzCgkJJGRhdGEgPSBwcmVnX3JlcGxhY2UoJy9cJVteXG5dKi8nLCAnJywgJGRhdGEpOwoJCS8vIGV4dHJhY3QgdGhlIHBhdHRlcm5zIHBhcnQKCQlwcmVnX21hdGNoKCcvXFxcXHBhdHRlcm5zXHsoW15cfV0qKVx9L2knLCAkZGF0YSwgJG1hdGNoZXMpOwoJCSRkYXRhID0gdHJpbShzdWJzdHIoJG1hdGNoZXNbMF0sIDEwLCAtMSkpOwoJCS8vIGV4dHJhY3QgZWFjaCBwYXR0ZXJuCgkJJHBhdHRlcm5zX2FycmF5ID0gcHJlZ19zcGxpdCgnL1tcc10rLycsICRkYXRhKTsKCQkvLyBjcmVhdGUgbmV3IGxhbmd1YWdlIGFycmF5IG9mIHBhdHRlcm5zCgkJJHBhdHRlcm5zID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRwYXR0ZXJuc19hcnJheSBhcyAkdmFsKSB7CgkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHZhbCkpIHsKCQkJCSR2YWwgPSB0cmltKCR2YWwpOwoJCQkJJHZhbCA9IHN0cl9yZXBsYWNlKCdcJycsICdcXFwnJywgJHZhbCk7CgkJCQkka2V5ID0gcHJlZ19yZXBsYWNlKCcvWzAtOV0rLycsICcnLCAkdmFsKTsKCQkJCSRwYXR0ZXJuc1ska2V5XSA9ICR2YWw7CgkJCX0KCQl9CgkJcmV0dXJuICRwYXR0ZXJuczsKCX0KCgkvKioKCSAqIEdldCB0aGUgUGF0aC1QYWludGluZyBPcGVyYXRvcnMuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gUG9zc2libGUgdmFsdWVzIGFyZToKCSAqIDx1bD4KCSAqICAgPGxpPlMgb3IgRDogU3Ryb2tlIHRoZSBwYXRoLjwvbGk+CgkgKiAgIDxsaT5zIG9yIGQ6IENsb3NlIGFuZCBzdHJva2UgdGhlIHBhdGguPC9saT4KCSAqICAgPGxpPmYgb3IgRjogRmlsbCB0aGUgcGF0aCwgdXNpbmcgdGhlIG5vbnplcm8gd2luZGluZyBudW1iZXIgcnVsZSB0byBkZXRlcm1pbmUgdGhlIHJlZ2lvbiB0byBmaWxsLjwvbGk+CgkgKiAgIDxsaT5mKiBvciBGKjogRmlsbCB0aGUgcGF0aCwgdXNpbmcgdGhlIGV2ZW4tb2RkIHJ1bGUgdG8gZGV0ZXJtaW5lIHRoZSByZWdpb24gdG8gZmlsbC48L2xpPgoJICogICA8bGk+QiBvciBGRCBvciBERjogRmlsbCBhbmQgdGhlbiBzdHJva2UgdGhlIHBhdGgsIHVzaW5nIHRoZSBub256ZXJvIHdpbmRpbmcgbnVtYmVyIHJ1bGUgdG8gZGV0ZXJtaW5lIHRoZSByZWdpb24gdG8gZmlsbC48L2xpPgoJICogICA8bGk+Qiogb3IgRipEIG9yIERGKjogRmlsbCBhbmQgdGhlbiBzdHJva2UgdGhlIHBhdGgsIHVzaW5nIHRoZSBldmVuLW9kZCBydWxlIHRvIGRldGVybWluZSB0aGUgcmVnaW9uIHRvIGZpbGwuPC9saT4KCSAqICAgPGxpPmIgb3IgZmQgb3IgZGY6IENsb3NlLCBmaWxsLCBhbmQgdGhlbiBzdHJva2UgdGhlIHBhdGgsIHVzaW5nIHRoZSBub256ZXJvIHdpbmRpbmcgbnVtYmVyIHJ1bGUgdG8gZGV0ZXJtaW5lIHRoZSByZWdpb24gdG8gZmlsbC48L2xpPgoJICogICA8bGk+YiBvciBmKmQgb3IgZGYqOiBDbG9zZSwgZmlsbCwgYW5kIHRoZW4gc3Ryb2tlIHRoZSBwYXRoLCB1c2luZyB0aGUgZXZlbi1vZGQgcnVsZSB0byBkZXRlcm1pbmUgdGhlIHJlZ2lvbiB0byBmaWxsLjwvbGk+CgkgKiAgIDxsaT5DTlo6IENsaXBwaW5nIG1vZGUgdXNpbmcgdGhlIGV2ZW4tb2RkIHJ1bGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgbGllIGluc2lkZSB0aGUgY2xpcHBpbmcgcGF0aC48L2xpPgoJICogICA8bGk+Q0VPOiBDbGlwcGluZyBtb2RlIHVzaW5nIHRoZSBub256ZXJvIHdpbmRpbmcgbnVtYmVyIHJ1bGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgbGllIGluc2lkZSB0aGUgY2xpcHBpbmcgcGF0aDwvbGk+CgkgKiAgIDxsaT5uOiBFbmQgdGhlIHBhdGggb2JqZWN0IHdpdGhvdXQgZmlsbGluZyBvciBzdHJva2luZyBpdC48L2xpPgoJICogPC91bD4KCSAqIEBwYXJhbSAkZGVmYXVsdCAoc3RyaW5nKSBkZWZhdWx0IHN0eWxlCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDQtMzApCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFBhdGhQYWludE9wZXJhdG9yKCRzdHlsZSwgJGRlZmF1bHQ9J1MnKSB7CgkJJG9wID0gJyc7CgkJc3dpdGNoKCRzdHlsZSkgewoJCQljYXNlICdTJzoKCQkJY2FzZSAnRCc6IHsKCQkJCSRvcCA9ICdTJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3MnOgoJCQljYXNlICdkJzogewoJCQkJJG9wID0gJ3MnOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZic6CgkJCWNhc2UgJ0YnOiB7CgkJCQkkb3AgPSAnZic7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdmKic6CgkJCWNhc2UgJ0YqJzogewoJCQkJJG9wID0gJ2YqJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0InOgoJCQljYXNlICdGRCc6CgkJCWNhc2UgJ0RGJzogewoJCQkJJG9wID0gJ0InOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQionOgoJCQljYXNlICdGKkQnOgoJCQljYXNlICdERionOiB7CgkJCQkkb3AgPSAnQionOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYic6CgkJCWNhc2UgJ2ZkJzoKCQkJY2FzZSAnZGYnOiB7CgkJCQkkb3AgPSAnYic7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdiKic6CgkJCWNhc2UgJ2YqZCc6CgkJCWNhc2UgJ2RmKic6IHsKCQkJCSRvcCA9ICdiKic7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDTlonOiB7CgkJCQkkb3AgPSAnVyBuJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0NFTyc6IHsKCQkJCSRvcCA9ICdXKiBuJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ24nOiB7CgkJCQkkb3AgPSAnbic7CgkJCQlicmVhazsKCQkJfQoJCQlkZWZhdWx0OiB7CgkJCQlpZiAoIWVtcHR5KCRkZWZhdWx0KSkgewoJCQkJCSRvcCA9IHNlbGY6OmdldFBhdGhQYWludE9wZXJhdG9yKCRkZWZhdWx0LCAnJyk7CgkJCQl9IGVsc2UgewoJCQkJCSRvcCA9ICcnOwoJCQkJfQoJCQl9CgkJfQoJCXJldHVybiAkb3A7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHByb2R1Y3Qgb2YgdHdvIFNWRyB0cmFuZm9ybWF0aW9uIG1hdHJpY2VzCgkgKiBAcGFyYW0gJHRhIChhcnJheSkgZmlyc3QgU1ZHIHRyYW5mb3JtYXRpb24gbWF0cml4CgkgKiBAcGFyYW0gJHRiIChhcnJheSkgc2Vjb25kIFNWRyB0cmFuZm9ybWF0aW9uIG1hdHJpeAoJICogQHJldHVybiB0cmFuc2Zvcm1hdGlvbiBhcnJheQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRUcmFuc2Zvcm1hdGlvbk1hdHJpeFByb2R1Y3QoJHRhLCAkdGIpIHsKCQkkdG0gPSBhcnJheSgpOwoJCSR0bVswXSA9ICgkdGFbMF0gKiAkdGJbMF0pICsgKCR0YVsyXSAqICR0YlsxXSk7CgkJJHRtWzFdID0gKCR0YVsxXSAqICR0YlswXSkgKyAoJHRhWzNdICogJHRiWzFdKTsKCQkkdG1bMl0gPSAoJHRhWzBdICogJHRiWzJdKSArICgkdGFbMl0gKiAkdGJbM10pOwoJCSR0bVszXSA9ICgkdGFbMV0gKiAkdGJbMl0pICsgKCR0YVszXSAqICR0YlszXSk7CgkJJHRtWzRdID0gKCR0YVswXSAqICR0Yls0XSkgKyAoJHRhWzJdICogJHRiWzVdKSArICR0YVs0XTsKCQkkdG1bNV0gPSAoJHRhWzFdICogJHRiWzRdKSArICgkdGFbM10gKiAkdGJbNV0pICsgJHRhWzVdOwoJCXJldHVybiAkdG07Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIHRyYW5mb3JtYXRpb24gbWF0cml4IGZyb20gU1ZHIHRyYW5zZm9ybSBhdHRyaWJ1dGUKCSAqIEBwYXJhbSAkYXR0cmlidXRlIChzdHJpbmcpIHRyYW5zZm9ybWF0aW9uCgkgKiBAcmV0dXJuIGFycmF5IG9mIHRyYW5zZm9ybWF0aW9ucwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBnZXRTVkdUcmFuc2Zvcm1NYXRyaXgoJGF0dHJpYnV0ZSkgewoJCS8vIGlkZW50aXR5IG1hdHJpeAoJCSR0bSA9IGFycmF5KDEsIDAsIDAsIDEsIDAsIDApOwoJCSR0cmFuc2Zvcm0gPSBhcnJheSgpOwoJCWlmIChwcmVnX21hdGNoX2FsbCgnLyhtYXRyaXh8dHJhbnNsYXRlfHNjYWxlfHJvdGF0ZXxza2V3WHxza2V3WSlbXHNdKlwoKFteXCldKylcKS9zaScsICRhdHRyaWJ1dGUsICR0cmFuc2Zvcm0sIFBSRUdfU0VUX09SREVSKSA+IDApIHsKCQkJZm9yZWFjaCAoJHRyYW5zZm9ybSBhcyAka2V5ID0+ICRkYXRhKSB7CgkJCQlpZiAoIWVtcHR5KCRkYXRhWzJdKSkgewoJCQkJCSRhID0gMTsKCQkJCQkkYiA9IDA7CgkJCQkJJGMgPSAwOwoJCQkJCSRkID0gMTsKCQkJCQkkZSA9IDA7CgkJCQkJJGYgPSAwOwoJCQkJCSRyZWdzID0gYXJyYXkoKTsKCQkJCQlzd2l0Y2ggKCRkYXRhWzFdKSB7CgkJCQkJCWNhc2UgJ21hdHJpeCc6IHsKCQkJCQkJCWlmIChwcmVnX21hdGNoKCcvKFthLXowLTlcLVwuXSspW1wsXHNdKyhbYS16MC05XC1cLl0rKVtcLFxzXSsoW2EtejAtOVwtXC5dKylbXCxcc10rKFthLXowLTlcLVwuXSspW1wsXHNdKyhbYS16MC05XC1cLl0rKVtcLFxzXSsoW2EtejAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGEgPSAkcmVnc1sxXTsKCQkJCQkJCQkkYiA9ICRyZWdzWzJdOwoJCQkJCQkJCSRjID0gJHJlZ3NbM107CgkJCQkJCQkJJGQgPSAkcmVnc1s0XTsKCQkJCQkJCQkkZSA9ICRyZWdzWzVdOwoJCQkJCQkJCSRmID0gJHJlZ3NbNl07CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICd0cmFuc2xhdGUnOiB7CgkJCQkJCQlpZiAocHJlZ19tYXRjaCgnLyhbYS16MC05XC1cLl0rKVtcLFxzXSsoW2EtejAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGUgPSAkcmVnc1sxXTsKCQkJCQkJCQkkZiA9ICRyZWdzWzJdOwoJCQkJCQkJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy8oW2EtejAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGUgPSAkcmVnc1sxXTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3NjYWxlJzogewoJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy8oW2EtejAtOVwtXC5dKylbXCxcc10rKFthLXowLTlcLVwuXSspL3NpJywgJGRhdGFbMl0sICRyZWdzKSkgewoJCQkJCQkJCSRhID0gJHJlZ3NbMV07CgkJCQkJCQkJJGQgPSAkcmVnc1syXTsKCQkJCQkJCX0gZWxzZWlmIChwcmVnX21hdGNoKCcvKFthLXowLTlcLVwuXSspL3NpJywgJGRhdGFbMl0sICRyZWdzKSkgewoJCQkJCQkJCSRhID0gJHJlZ3NbMV07CgkJCQkJCQkJJGQgPSAkYTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3JvdGF0ZSc6IHsKCQkJCQkJCWlmIChwcmVnX21hdGNoKCcvKFswLTlcLVwuXSspW1wsXHNdKyhbYS16MC05XC1cLl0rKVtcLFxzXSsoW2EtejAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGFuZyA9IGRlZzJyYWQoJHJlZ3NbMV0pOwoJCQkJCQkJCSR4ID0gJHJlZ3NbMl07CgkJCQkJCQkJJHkgPSAkcmVnc1szXTsKCQkJCQkJCQkkYSA9IGNvcygkYW5nKTsKCQkJCQkJCQkkYiA9IHNpbigkYW5nKTsKCQkJCQkJCQkkYyA9IC0kYjsKCQkJCQkJCQkkZCA9ICRhOwoJCQkJCQkJCSRlID0gKCR4ICogKDEgLSAkYSkpIC0gKCR5ICogJGMpOwoJCQkJCQkJCSRmID0gKCR5ICogKDEgLSAkZCkpIC0gKCR4ICogJGIpOwoJCQkJCQkJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy8oWzAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGFuZyA9IGRlZzJyYWQoJHJlZ3NbMV0pOwoJCQkJCQkJCSRhID0gY29zKCRhbmcpOwoJCQkJCQkJCSRiID0gc2luKCRhbmcpOwoJCQkJCQkJCSRjID0gLSRiOwoJCQkJCQkJCSRkID0gJGE7CgkJCQkJCQkJJGUgPSAwOwoJCQkJCQkJCSRmID0gMDsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3NrZXdYJzogewoJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy8oWzAtOVwtXC5dKykvc2knLCAkZGF0YVsyXSwgJHJlZ3MpKSB7CgkJCQkJCQkJJGMgPSB0YW4oZGVnMnJhZCgkcmVnc1sxXSkpOwoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnc2tld1knOiB7CgkJCQkJCQlpZiAocHJlZ19tYXRjaCgnLyhbMC05XC1cLl0rKS9zaScsICRkYXRhWzJdLCAkcmVncykpIHsKCQkJCQkJCQkkYiA9IHRhbihkZWcycmFkKCRyZWdzWzFdKSk7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkdG0gPSBzZWxmOjpnZXRUcmFuc2Zvcm1hdGlvbk1hdHJpeFByb2R1Y3QoJHRtLCBhcnJheSgkYSwgJGIsICRjLCAkZCwgJGUsICRmKSk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICR0bTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGFuZ2xlIGluIHJhZGlhbnRzIGJldHdlZW4gdHdvIHZlY3RvcnMKCSAqIEBwYXJhbSAkeDEgKGludCkgWCBjb29yZGluYXRlIG9mIGZpcnN0IHZlY3RvciBwb2ludAoJICogQHBhcmFtICR5MSAoaW50KSBZIGNvb3JkaW5hdGUgb2YgZmlyc3QgdmVjdG9yIHBvaW50CgkgKiBAcGFyYW0gJHgyIChpbnQpIFggY29vcmRpbmF0ZSBvZiBzZWNvbmQgdmVjdG9yIHBvaW50CgkgKiBAcGFyYW0gJHkyIChpbnQpIFkgY29vcmRpbmF0ZSBvZiBzZWNvbmQgdmVjdG9yIHBvaW50CgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDUtMDQpCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIGdldFZlY3RvcnNBbmdsZSgkeDEsICR5MSwgJHgyLCAkeTIpIHsKCQkkZHByb2QgPSAoJHgxICogJHgyKSArICgkeTEgKiAkeTIpOwoJCSRkaXN0MSA9IHNxcnQoKCR4MSAqICR4MSkgKyAoJHkxICogJHkxKSk7CgkJJGRpc3QyID0gc3FydCgoJHgyICogJHgyKSArICgkeTIgKiAkeTIpKTsKCQkkYW5nbGUgPSBhY29zKCRkcHJvZCAvICgkZGlzdDEgKiAkZGlzdDIpKTsKCQlpZiAoaXNfbmFuKCRhbmdsZSkpIHsKCQkJJGFuZ2xlID0gTV9QSTsKCQl9CgkJaWYgKCgoJHgxICogJHkyKSAtICgkeDIgKiAkeTEpKSA8IDApIHsKCQkJJGFuZ2xlICo9IC0xOwoJCX0KCQlyZXR1cm4gJGFuZ2xlOwoJfQoKCS8qKgoJICogU3BsaXQgc3RyaW5nIGJ5IGEgcmVndWxhciBleHByZXNzaW9uLgoJICogVGhpcyBpcyBhIHdyYXBwZXIgZm9yIHRoZSBwcmVnX3NwbGl0IGZ1bmN0aW9uIHRvIGF2b2lkIHRoZSBidWc6IGh0dHBzOi8vYnVncy5waHAubmV0L2J1Zy5waHA/aWQ9NDU4NTAKCSAqIEBwYXJhbSAkcGF0dGVybiAoc3RyaW5nKSBUaGUgcmVndWxhciBleHByZXNzaW9uIHBhdHRlcm4gdG8gc2VhcmNoIGZvciB3aXRob3V0IHRoZSBtb2RpZmllcnMsIGFzIGEgc3RyaW5nLgoJICogQHBhcmFtICRtb2RpZmllcnMgKHN0cmluZykgVGhlIG1vZGlmaWVycyBwYXJ0IG9mIHRoZSBwYXR0ZXJuLAoJICogQHBhcmFtICRzdWJqZWN0IChzdHJpbmcpIFRoZSBpbnB1dCBzdHJpbmcuCgkgKiBAcGFyYW0gJGxpbWl0IChpbnQpIElmIHNwZWNpZmllZCwgdGhlbiBvbmx5IHN1YnN0cmluZ3MgdXAgdG8gbGltaXQgYXJlIHJldHVybmVkIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN0cmluZyBiZWluZyBwbGFjZWQgaW4gdGhlIGxhc3Qgc3Vic3RyaW5nLiBBIGxpbWl0IG9mIC0xLCAwIG9yIE5VTEwgbWVhbnMgIm5vIGxpbWl0IiBhbmQsIGFzIGlzIHN0YW5kYXJkIGFjcm9zcyBQSFAsIHlvdSBjYW4gdXNlIE5VTEwgdG8gc2tpcCB0byB0aGUgZmxhZ3MgcGFyYW1ldGVyLgoJICogQHBhcmFtICRmbGFncyAoaW50KSBUaGUgZmxhZ3MgYXMgc3BlY2lmaWVkIG9uIHRoZSBwcmVnX3NwbGl0IFBIUCBmdW5jdGlvbi4KCSAqIEByZXR1cm4gUmV0dXJucyBhbiBhcnJheSBjb250YWluaW5nIHN1YnN0cmluZ3Mgb2Ygc3ViamVjdCBzcGxpdCBhbG9uZyBib3VuZGFyaWVzIG1hdGNoZWQgYnkgcGF0dGVybi5tb2RpZmllcgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA2LjAuMDIzCgkgKiBAcHVibGljIHN0YXRpYwoJICovCglwdWJsaWMgc3RhdGljIGZ1bmN0aW9uIHByZWdTcGxpdCgkcGF0dGVybiwgJG1vZGlmaWVycywgJHN1YmplY3QsICRsaW1pdD1OVUxMLCAkZmxhZ3M9TlVMTCkgewoJCS8vIHRoZSBidWcgb25seSBoYXBwZW5zIG9uIFBIUCA1LjIgd2hlbiB1c2luZyB0aGUgdSBtb2RpZmllcgoJCWlmICgoc3RycG9zKCRtb2RpZmllcnMsICd1JykgPT09IEZBTFNFKSBPUiAoY291bnQocHJlZ19zcGxpdCgnLy91JywgIlxuXHQiLCAtMSwgUFJFR19TUExJVF9OT19FTVBUWSkpID09IDIpKSB7CgkJCXJldHVybiBwcmVnX3NwbGl0KCRwYXR0ZXJuLiRtb2RpZmllcnMsICRzdWJqZWN0LCAkbGltaXQsICRmbGFncyk7CgkJfQoJCS8vIHByZWdfc3BsaXQgaXMgYnVnZ2VkIC0gdHJ5IGFsdGVybmF0aXZlIHNvbHV0aW9uCgkJJHJldCA9IGFycmF5KCk7CgkJd2hpbGUgKCgkbmwgPSBzdHJwb3MoJHN1YmplY3QsICJcbiIpKSAhPT0gRkFMU0UpIHsKCQkJJHJldCA9IGFycmF5X21lcmdlKCRyZXQsIHByZWdfc3BsaXQoJHBhdHRlcm4uJG1vZGlmaWVycywgc3Vic3RyKCRzdWJqZWN0LCAwLCAkbmwpLCAkbGltaXQsICRmbGFncykpOwoJCQkkcmV0W10gPSAiXG4iOwoJCQkkc3ViamVjdCA9IHN1YnN0cigkc3ViamVjdCwgKCRubCArIDEpKTsKCQl9CgkJaWYgKHN0cmxlbigkc3ViamVjdCkgPiAwKSB7CgkJCSRyZXQgPSBhcnJheV9tZXJnZSgkcmV0LCBwcmVnX3NwbGl0KCRwYXR0ZXJuLiRtb2RpZmllcnMsICRzdWJqZWN0LCAkbGltaXQsICRmbGFncykpOwoJCX0KCQlyZXR1cm4gJHJldDsKCX0KCgkvKioKCSAqIFJlYWRzIGVudGlyZSBmaWxlIGludG8gYSBzdHJpbmcuCgkgKiBUaGUgZmlsZSBjYW4gYmUgYWxzbyBhbiBVUkwuCgkgKiBAcGFyYW0gJGZpbGUgKHN0cmluZykgTmFtZSBvZiB0aGUgZmlsZSBvciBVUkwgdG8gcmVhZC4KCSAqIEByZXR1cm4gVGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIHJlYWQgZGF0YSBvciBGQUxTRSBvbiBmYWlsdXJlLiAKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNi4wLjAyNQoJICogQHB1YmxpYyBzdGF0aWMKCSAqLwoJcHVibGljIHN0YXRpYyBmdW5jdGlvbiBmaWxlR2V0Q29udGVudHMoJGZpbGUpIHsKCQkvLyRmaWxlID0gaHRtbF9lbnRpdHlfZGVjb2RlKCRmaWxlKTsKCQkvLyBhcnJheSBvZiBwb3NzaWJsZSBhbHRlcm5hdGl2ZSBwYXRocy9VUkxzCgkJJGFsdCA9IGFycmF5KCRmaWxlKTsKCQkvLyByZXBsYWNlIFVSTCByZWxhdGl2ZSBwYXRoIHdpdGggZnVsbCByZWFsIHNlcnZlciBwYXRoCgkJaWYgKChzdHJsZW4oJGZpbGUpID4gMSkKCQkJQU5EICgkZmlsZVswXSA9PSAnLycpCgkJCUFORCAoJGZpbGVbMV0gIT0gJy8nKQoJCQlBTkQgIWVtcHR5KCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pCgkJCUFORCAoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSAhPSAnLycpKSB7CgkJCSRmaW5kcm9vdCA9IHN0cnBvcygkZmlsZSwgJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSk7CgkJCWlmICgoJGZpbmRyb290ID09PSBmYWxzZSkgT1IgKCRmaW5kcm9vdCA+IDEpKSB7CgkJCQlpZiAoc3Vic3RyKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10sIC0xKSA9PSAnLycpIHsKCQkJCQkkdG1wID0gc3Vic3RyKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10sIDAsIC0xKS4kZmlsZTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRtcCA9ICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10uJGZpbGU7CgkJCQl9CgkJCQkkYWx0W10gPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZSh1cmxkZWNvZGUoJHRtcCkpOwoJCQl9CgkJfQoJCS8vIFVSTCBtb2RlCgkJJHVybCA9ICRmaWxlOwoJCS8vIGNoZWNrIGZvciBtaXNzaW5nIHByb3RvY29sCgkJaWYgKHByZWdfbWF0Y2goJyVeL3syfSUnLCAkdXJsKSkgewoJCQlpZiAocHJlZ19tYXRjaCgnJV4oW146XSs6KS8vJWknLCBLX1BBVEhfVVJMLCAkbWF0Y2gpKSB7CgkJCQkkdXJsID0gJG1hdGNoWzFdLnN0cl9yZXBsYWNlKCcgJywgJyUyMCcsICR1cmwpOwoJCQkJJGFsdFtdID0gJHVybDsKCQkJfQoJCX0KCQkkdXJsZGF0YSA9IEBwYXJzZV91cmwoJHVybCk7CgkJaWYgKCFpc3NldCgkdXJsZGF0YVsncXVlcnknXSkgT1IgKHN0cmxlbigkdXJsZGF0YVsncXVlcnknXSkgPD0gMCkpIHsKCQkJaWYgKHN0cnBvcygkdXJsLCBLX1BBVEhfVVJMKSA9PT0gMCkgewoJCQkJLy8gY29udmVydCBVUkwgdG8gZnVsbCBzZXJ2ZXIgcGF0aAoJCQkJJHRtcCA9IHN0cl9yZXBsYWNlKEtfUEFUSF9VUkwsIEtfUEFUSF9NQUlOLCAkdXJsKTsKCQkJCSR0bXAgPSBodG1sc3BlY2lhbGNoYXJzX2RlY29kZSh1cmxkZWNvZGUoJHRtcCkpOwoJCQkJJGFsdFtdID0gJHRtcDsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJF9TRVJWRVJbJ1NDUklQVF9VUkknXSkpIHsKCQkJJHVybGRhdGEgPSBAcGFyc2VfdXJsKCRfU0VSVkVSWydTQ1JJUFRfVVJJJ10pOwoJCQkkYWx0W10gPSAkdXJsZGF0YVsnc2NoZW1lJ10uJzovLycuJHVybGRhdGFbJ2hvc3QnXS4oKCRmaWxlWzBdID09ICcvJykgPyAnJyA6ICcvJykuJGZpbGU7CgkJfQoJCWZvcmVhY2ggKCRhbHQgYXMgJGYpIHsKCQkJJHJldCA9IEBmaWxlX2dldF9jb250ZW50cygkZik7CgkJCWlmICgoJHJldCA9PT0gRkFMU0UpCgkJCQlBTkQgIWluaV9nZXQoJ2FsbG93X3VybF9mb3BlbicpCgkJCQlBTkQgZnVuY3Rpb25fZXhpc3RzKCdjdXJsX2luaXQnKQoJCQkJQU5EIHByZWdfbWF0Y2goJyVeKGh0dHBzP3xmdHApOi8vJScsICRmKSkgewoJCQkJLy8gdHJ5IHRvIGdldCByZW1vdGUgZmlsZSBkYXRhIHVzaW5nIGNVUkwKCQkJCSRjcyA9IGN1cmxfaW5pdCgpOyAvLyBjdXJsIHNlc3Npb24KCQkJCWN1cmxfc2V0b3B0KCRjcywgQ1VSTE9QVF9VUkwsICRmKTsKCQkJCWN1cmxfc2V0b3B0KCRjcywgQ1VSTE9QVF9CSU5BUllUUkFOU0ZFUiwgdHJ1ZSk7CgkJCQljdXJsX3NldG9wdCgkY3MsIENVUkxPUFRfRkFJTE9ORVJST1IsIHRydWUpOwoJCQkJY3VybF9zZXRvcHQoJGNzLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsKCQkJCWlmICgoaW5pX2dldCgnb3Blbl9iYXNlZGlyJykgPT0gJycpIEFORCAoIWluaV9nZXQoJ3NhZmVfbW9kZScpKSkgewoJCQkJCWN1cmxfc2V0b3B0KCRjcywgQ1VSTE9QVF9GT0xMT1dMT0NBVElPTiwgdHJ1ZSk7CgkJCQl9CgkJCQljdXJsX3NldG9wdCgkY3MsIENVUkxPUFRfQ09OTkVDVFRJTUVPVVQsIDUpOwoJCQkJY3VybF9zZXRvcHQoJGNzLCBDVVJMT1BUX1RJTUVPVVQsIDMwKTsKCQkJCWN1cmxfc2V0b3B0KCRjcywgQ1VSTE9QVF9TU0xfVkVSSUZZUEVFUiwgZmFsc2UpOwoJCQkJY3VybF9zZXRvcHQoJGNzLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCBmYWxzZSk7CgkJCQljdXJsX3NldG9wdCgkY3MsIENVUkxPUFRfVVNFUkFHRU5ULCAnVENQREYnKTsKCQkJCSRyZXQgPSBjdXJsX2V4ZWMoJGNzKTsKCQkJCWN1cmxfY2xvc2UoJGNzKTsKCQkJfQoJCQlpZiAoJHJldCAhPT0gRkFMU0UpIHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXJldHVybiAkcmV0OwoJfQoKfSAvLyBFTkQgT0YgVENQREZfU1RBVElDIENMQVNTCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/LICENSE.TXT</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqIFRDUERGIExJQ0VOU0UKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKICBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgogICAgICAgICAgICAgICAgICAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCiAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKCiBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CiBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgoKCiAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCnRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYwpMaWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIGJlbG93LgoKICAwLiBBZGRpdGlvbmFsIERlZmluaXRpb25zLgoKICBBcyB1c2VkIGhlcmVpbiwgInRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIExlc3NlcgpHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgdGhlICJHTlUgR1BMIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUKR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIlRoZSBMaWJyYXJ5IiByZWZlcnMgdG8gYSBjb3ZlcmVkIHdvcmsgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLApvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgoKICBBbiAiQXBwbGljYXRpb24iIGlzIGFueSB3b3JrIHRoYXQgbWFrZXMgdXNlIG9mIGFuIGludGVyZmFjZSBwcm92aWRlZApieSB0aGUgTGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJhcnkuCkRlZmluaW5nIGEgc3ViY2xhc3Mgb2YgYSBjbGFzcyBkZWZpbmVkIGJ5IHRoZSBMaWJyYXJ5IGlzIGRlZW1lZCBhIG1vZGUKb2YgdXNpbmcgYW4gaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBMaWJyYXJ5LgoKICBBICJDb21iaW5lZCBXb3JrIiBpcyBhIHdvcmsgcHJvZHVjZWQgYnkgY29tYmluaW5nIG9yIGxpbmtpbmcgYW4KQXBwbGljYXRpb24gd2l0aCB0aGUgTGlicmFyeS4gIFRoZSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpYnJhcnkKd2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgIkxpbmtlZApWZXJzaW9uIi4KCiAgVGhlICJNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgdGhlIENvbWJpbmVkIFdvcmssIGV4Y2x1ZGluZyBhbnkgc291cmNlIGNvZGUKZm9yIHBvcnRpb25zIG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQsIGNvbnNpZGVyZWQgaW4gaXNvbGF0aW9uLCBhcmUKYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KCiAgVGhlICJDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUiIGZvciBhIENvbWJpbmVkIFdvcmsgbWVhbnMgdGhlCm9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEKYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvciByZXByb2R1Y2luZyB0aGUgQ29tYmluZWQgV29yayBmcm9tIHRoZQpBcHBsaWNhdGlvbiwgYnV0IGV4Y2x1ZGluZyB0aGUgU3lzdGVtIExpYnJhcmllcyBvZiB0aGUgQ29tYmluZWQgV29yay4KCiAgMS4gRXhjZXB0aW9uIHRvIFNlY3Rpb24gMyBvZiB0aGUgR05VIEdQTC4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2UKd2l0aG91dCBiZWluZyBib3VuZCBieSBzZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCgogIDIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KCiAgSWYgeW91IG1vZGlmeSBhIGNvcHkgb2YgdGhlIExpYnJhcnksIGFuZCwgaW4geW91ciBtb2RpZmljYXRpb25zLCBhCmZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24KdGhhdCB1c2VzIHRoZSBmYWNpbGl0eSAob3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUKZmFjaWxpdHkgaXMgaW52b2tlZCksIHRoZW4geW91IG1heSBjb252ZXkgYSBjb3B5IG9mIHRoZSBtb2RpZmllZAp2ZXJzaW9uOgoKICAgYSkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8KICAgZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlCiAgIGZ1bmN0aW9uIG9yIGRhdGEsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zCiAgIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLCBvcgoKICAgYikgdW5kZXIgdGhlIEdOVSBHUEwsIHdpdGggbm9uZSBvZiB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvZgogICB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byB0aGF0IGNvcHkuCgogIDMuIE9iamVjdCBDb2RlIEluY29ycG9yYXRpbmcgTWF0ZXJpYWwgZnJvbSBMaWJyYXJ5IEhlYWRlciBGaWxlcy4KCiAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20KYSBoZWFkZXIgZmlsZSB0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnkuICBZb3UgbWF5IGNvbnZleSBzdWNoIG9iamVjdApjb2RlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0LCBpZiB0aGUgaW5jb3Jwb3JhdGVkCm1hdGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZQpsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIG9yIHNtYWxsIG1hY3JvcywgaW5saW5lIGZ1bmN0aW9ucyBhbmQgdGVtcGxhdGVzCih0ZW4gb3IgZmV3ZXIgbGluZXMgaW4gbGVuZ3RoKSwgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKCiAgIGEpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgb2JqZWN0IGNvZGUgdGhhdCB0aGUKICAgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQogICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgIGIpIEFjY29tcGFueSB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZQogICBkb2N1bWVudC4KCiAgNC4gQ29tYmluZWQgV29ya3MuCgogIFlvdSBtYXkgY29udmV5IGEgQ29tYmluZWQgV29yayB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSB0aGF0LAp0YWtlbiB0b2dldGhlciwgZWZmZWN0aXZlbHkgZG8gbm90IHJlc3RyaWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUKcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlCmVuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLCBpZiB5b3UgYWxzbyBkbyBlYWNoIG9mCnRoZSBmb2xsb3dpbmc6CgogICBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdAogICB0aGUgTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZQogICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KCiAgIGIpIEFjY29tcGFueSB0aGUgQ29tYmluZWQgV29yayB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCiAgIGRvY3VtZW50LgoKICAgYykgRm9yIGEgQ29tYmluZWQgV29yayB0aGF0IGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzIGR1cmluZwogICBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nCiAgIHRoZXNlIG5vdGljZXMsIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UgZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZQogICBjb3BpZXMgb2YgdGhlIEdOVSBHUEwgYW5kIHRoaXMgbGljZW5zZSBkb2N1bWVudC4KCiAgIGQpIERvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKICAgICAgIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcwogICAgICAgTGljZW5zZSwgYW5kIHRoZSBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uIENvZGUgaW4gYSBmb3JtCiAgICAgICBzdWl0YWJsZSBmb3IsIGFuZCB1bmRlciB0ZXJtcyB0aGF0IHBlcm1pdCwgdGhlIHVzZXIgdG8KICAgICAgIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mCiAgICAgICB0aGUgTGlua2VkIFZlcnNpb24gdG8gcHJvZHVjZSBhIG1vZGlmaWVkIENvbWJpbmVkIFdvcmssIGluIHRoZQogICAgICAgbWFubmVyIHNwZWNpZmllZCBieSBzZWN0aW9uIDYgb2YgdGhlIEdOVSBHUEwgZm9yIGNvbnZleWluZwogICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuCgogICAgICAgMSkgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCiAgICAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKGEpIHVzZXMgYXQgcnVuIHRpbWUKICAgICAgIGEgY29weSBvZiB0aGUgTGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlcgogICAgICAgc3lzdGVtLCBhbmQgKGIpIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbgogICAgICAgb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBMaW5rZWQKICAgICAgIFZlcnNpb24uCgogICBlKSBQcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZQogICBiZSByZXF1aXJlZCB0byBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24gdW5kZXIgc2VjdGlvbiA2IG9mIHRoZQogICBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcwogICBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlCiAgIENvbWJpbmVkIFdvcmsgcHJvZHVjZWQgYnkgcmVjb21iaW5pbmcgb3IgcmVsaW5raW5nIHRoZQogICBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZgogICB5b3UgdXNlIG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBhbnkKICAgdGhlIE1pbmltYWwgQ29ycmVzcG9uZGluZyBTb3VyY2UgYW5kIENvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24KICAgQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24KICAgSW5mb3JtYXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMCiAgIGZvciBjb252ZXlpbmcgQ29ycmVzcG9uZGluZyBTb3VyY2UuKQoKICA1LiBDb21iaW5lZCBMaWJyYXJpZXMuCgogIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKZmFjaWxpdGllcyB0aGF0IGFyZSBub3QgQXBwbGljYXRpb25zIGFuZCBhcmUgbm90IGNvdmVyZWQgYnkgdGhpcwpMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIKY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgoKICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQKICAgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLAogICBjb252ZXllZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgoKICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0CiAgIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUKICAgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgoKICA2LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCgogIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCm9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIFN1Y2ggbmV3CnZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQpkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgoKICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlCkxpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uCm9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIgphcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCmNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24KcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBMaWJyYXJ5IGFzIHlvdQpyZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIKR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgoKICBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlCndoZXRoZXIgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ugc2hhbGwKYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMKcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKTGlicmFyeS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQogICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CgogQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgogRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCiBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgYSBmcmVlLCBjb3B5bGVmdCBsaWNlbnNlIGZvcgpzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCgogIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhbmQgb3RoZXIgcHJhY3RpY2FsIHdvcmtzIGFyZSBkZXNpZ25lZAp0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCnRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCnNoYXJlIGFuZCBjaGFuZ2UgYWxsIHZlcnNpb25zIG9mIGEgcHJvZ3JhbS0tdG8gbWFrZSBzdXJlIGl0IHJlbWFpbnMgZnJlZQpzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCkdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCmFueSBvdGhlciB3b3JrIHJlbGVhc2VkIHRoaXMgd2F5IGJ5IGl0cyBhdXRob3JzLiAgWW91IGNhbiBhcHBseSBpdCB0bwp5b3VyIHByb2dyYW1zLCB0b28uCgogIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQpoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCnRoZW0gaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQgaWYgeW91CndhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CmZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgoKICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKdGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCmNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZgp5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgoKICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCmdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkKa25vdyB0aGVpciByaWdodHMuCgogIERldmVsb3BlcnMgdGhhdCB1c2UgdGhlIEdOVSBHUEwgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczoKKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KCiAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCnRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKYXV0aG9ycycgc2FrZSwgdGhlIEdQTCByZXF1aXJlcyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIGJlIG1hcmtlZCBhcwpjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KCiAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgptb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKY2FuIGRvIHNvLiAgVGhpcyBpcyBmdW5kYW1lbnRhbGx5IGluY29tcGF0aWJsZSB3aXRoIHRoZSBhaW0gb2YKcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KdXNlLCB3aGljaCBpcyBwcmVjaXNlbHkgd2hlcmUgaXQgaXMgbW9zdCB1bmFjY2VwdGFibGUuICBUaGVyZWZvcmUsIHdlCmhhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQpwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQpzdGFuZCByZWFkeSB0byBleHRlbmQgdGhpcyBwcm92aXNpb24gdG8gdGhvc2UgZG9tYWlucyBpbiBmdXR1cmUgdmVyc2lvbnMKb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCgogIEZpbmFsbHksIGV2ZXJ5IHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuClN0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgpzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bwphdm9pZCB0aGUgc3BlY2lhbCBkYW5nZXIgdGhhdCBwYXRlbnRzIGFwcGxpZWQgdG8gYSBmcmVlIHByb2dyYW0gY291bGQKbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCgogIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCm1vZGlmaWNhdGlvbiBmb2xsb3cuCgogICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCgogIDAuIERlZmluaXRpb25zLgoKICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KCiAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKd29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KCiAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCkxpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAoicmVjaXBpZW50cyIgbWF5IGJlIGluZGl2aWR1YWxzIG9yIG9yZ2FuaXphdGlvbnMuCgogIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKaW4gYSBmYXNoaW9uIHJlcXVpcmluZyBjb3B5cmlnaHQgcGVybWlzc2lvbiwgb3RoZXIgdGhhbiB0aGUgbWFraW5nIG9mIGFuCmV4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQplYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KCiAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKb24gdGhlIFByb2dyYW0uCgogIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgppbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKcHVibGljLCBhbmQgaW4gc29tZSBjb3VudHJpZXMgb3RoZXIgYWN0aXZpdGllcyBhcyB3ZWxsLgoKICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCnBhcnRpZXMgdG8gbWFrZSBvciByZWNlaXZlIGNvcGllcy4gIE1lcmUgaW50ZXJhY3Rpb24gd2l0aCBhIHVzZXIgdGhyb3VnaAphIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgoKICBBbiBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZSBkaXNwbGF5cyAiQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcyIKdG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQpmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKdGVsbHMgdGhlIHVzZXIgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIHdvcmsgKGV4Y2VwdCB0byB0aGUKZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQp3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgp0aGUgaW50ZXJmYWNlIHByZXNlbnRzIGEgbGlzdCBvZiB1c2VyIGNvbW1hbmRzIG9yIG9wdGlvbnMsIHN1Y2ggYXMgYQptZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgoKICAxLiBTb3VyY2UgQ29kZS4KCiAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgIk9iamVjdCBjb2RlIiBtZWFucyBhbnkgbm9uLXNvdXJjZQpmb3JtIG9mIGEgd29yay4KCiAgQSAiU3RhbmRhcmQgSW50ZXJmYWNlIiBtZWFucyBhbiBpbnRlcmZhY2UgdGhhdCBlaXRoZXIgaXMgYW4gb2ZmaWNpYWwKc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgppbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAppcyB3aWRlbHkgdXNlZCBhbW9uZyBkZXZlbG9wZXJzIHdvcmtpbmcgaW4gdGhhdCBsYW5ndWFnZS4KCiAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKdGhhbiB0aGUgd29yayBhcyBhIHdob2xlLCB0aGF0IChhKSBpcyBpbmNsdWRlZCBpbiB0aGUgbm9ybWFsIGZvcm0gb2YKcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgpDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKTWFqb3IgQ29tcG9uZW50LCBvciB0byBpbXBsZW1lbnQgYSBTdGFuZGFyZCBJbnRlcmZhY2UgZm9yIHdoaWNoIGFuCmltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCiJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAooa2VybmVsLCB3aW5kb3cgc3lzdGVtLCBhbmQgc28gb24pIG9mIHRoZSBzcGVjaWZpYyBvcGVyYXRpbmcgc3lzdGVtCihpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCnByb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgoKICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCnRoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKd29yaykgcnVuIHRoZSBvYmplY3QgY29kZSBhbmQgdG8gbW9kaWZ5IHRoZSB3b3JrLCBpbmNsdWRpbmcgc2NyaXB0cyB0bwpjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQpwcm9ncmFtcyB3aGljaCBhcmUgdXNlZCB1bm1vZGlmaWVkIGluIHBlcmZvcm1pbmcgdGhvc2UgYWN0aXZpdGllcyBidXQKd2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCmluY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCnRoZSB3b3JrLCBhbmQgdGhlIHNvdXJjZSBjb2RlIGZvciBzaGFyZWQgbGlicmFyaWVzIGFuZCBkeW5hbWljYWxseQpsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKc3VicHJvZ3JhbXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSB3b3JrLgoKICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCmNhbiByZWdlbmVyYXRlIGF1dG9tYXRpY2FsbHkgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgQ29ycmVzcG9uZGluZwpTb3VyY2UuCgogIFRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYSB3b3JrIGluIHNvdXJjZSBjb2RlIGZvcm0gaXMgdGhhdApzYW1lIHdvcmsuCgogIDIuIEJhc2ljIFBlcm1pc3Npb25zLgoKICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgpjb3B5cmlnaHQgb24gdGhlIFByb2dyYW0sIGFuZCBhcmUgaXJyZXZvY2FibGUgcHJvdmlkZWQgdGhlIHN0YXRlZApjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCnBlcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCmNvdmVyZWQgd29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBvbmx5IGlmIHRoZSBvdXRwdXQsIGdpdmVuIGl0cwpjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgpyaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KCiAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdApjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucwppbiBmb3JjZS4gIFlvdSBtYXkgY29udmV5IGNvdmVyZWQgd29ya3MgdG8gb3RoZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlCm9mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQp3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCnRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW4gY29udmV5aW5nIGFsbCBtYXRlcmlhbCBmb3Igd2hpY2ggeW91IGRvCm5vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgphbmQgY29udHJvbCwgb24gdGVybXMgdGhhdCBwcm9oaWJpdCB0aGVtIGZyb20gbWFraW5nIGFueSBjb3BpZXMgb2YKeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KCiAgQ29udmV5aW5nIHVuZGVyIGFueSBvdGhlciBjaXJjdW1zdGFuY2VzIGlzIHBlcm1pdHRlZCBzb2xlbHkgdW5kZXIKdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCm1ha2VzIGl0IHVubmVjZXNzYXJ5LgoKICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgoKICBObyBjb3ZlcmVkIHdvcmsgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgYW4gZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwKbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCjExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgpzaW1pbGFyIGxhd3MgcHJvaGliaXRpbmcgb3IgcmVzdHJpY3RpbmcgY2lyY3VtdmVudGlvbiBvZiBzdWNoCm1lYXN1cmVzLgoKICBXaGVuIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHlvdSB3YWl2ZSBhbnkgbGVnYWwgcG93ZXIgdG8gZm9yYmlkCmNpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgppcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCnRoZSBjb3ZlcmVkIHdvcmssIGFuZCB5b3UgZGlzY2xhaW0gYW55IGludGVudGlvbiB0byBsaW1pdCBvcGVyYXRpb24gb3IKbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKdXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCnRlY2hub2xvZ2ljYWwgbWVhc3VyZXMuCgogIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCgogIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQpyZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAphcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2U7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQpub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CmtlZXAgaW50YWN0IGFsbCBub3RpY2VzIG9mIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYWxsCnJlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgoKICBZb3UgbWF5IGNoYXJnZSBhbnkgcHJpY2Ugb3Igbm8gcHJpY2UgZm9yIGVhY2ggY29weSB0aGF0IHlvdSBjb252ZXksCmFuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCgogIDUuIENvbnZleWluZyBNb2RpZmllZCBTb3VyY2UgVmVyc2lvbnMuCgogIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KcHJvZHVjZSBpdCBmcm9tIHRoZSBQcm9ncmFtLCBpbiB0aGUgZm9ybSBvZiBzb3VyY2UgY29kZSB1bmRlciB0aGUKdGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CgogICAgYSkgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IG1vZGlmaWVkCiAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCgogICAgYikgVGhlIHdvcmsgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgaXQgaXMKICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgogICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bwogICAgImtlZXAgaW50YWN0IGFsbCBub3RpY2VzIi4KCiAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcwogICAgTGljZW5zZSB0byBhbnlvbmUgd2hvIGNvbWVzIGludG8gcG9zc2Vzc2lvbiBvZiBhIGNvcHkuICBUaGlzCiAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNwogICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKICAgIHJlZ2FyZGxlc3Mgb2YgaG93IHRoZXkgYXJlIHBhY2thZ2VkLiAgVGhpcyBMaWNlbnNlIGdpdmVzIG5vCiAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CiAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgoKICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CiAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKICAgIGludGVyZmFjZXMgdGhhdCBkbyBub3QgZGlzcGxheSBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzLCB5b3VyCiAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KCiAgQSBjb21waWxhdGlvbiBvZiBhIGNvdmVyZWQgd29yayB3aXRoIG90aGVyIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudAp3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAphbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAppbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuCiJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAp1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCmJleW9uZCB3aGF0IHRoZSBpbmRpdmlkdWFsIHdvcmtzIHBlcm1pdC4gIEluY2x1c2lvbiBvZiBhIGNvdmVyZWQgd29yawppbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgpwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgoKICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KCiAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMKb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCm1hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKaW4gb25lIG9mIHRoZXNlIHdheXM6CgogICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAogICAgKGluY2x1ZGluZyBhIHBoeXNpY2FsIGRpc3RyaWJ1dGlvbiBtZWRpdW0pLCBhY2NvbXBhbmllZCBieSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgoKICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQogICAgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzIGFuZCB2YWxpZCBmb3IgYXMKICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAogICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQogICAgY29weSBvZiB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGFsbCB0aGUgc29mdHdhcmUgaW4gdGhlCiAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAogICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubwogICAgbW9yZSB0aGFuIHlvdXIgcmVhc29uYWJsZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyB0aGlzCiAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCiAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgoKICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCiAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcwogICAgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IG9jY2FzaW9uYWxseSBhbmQgbm9uY29tbWVyY2lhbGx5LCBhbmQKICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAogICAgd2l0aCBzdWJzZWN0aW9uIDZiLgoKICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCiAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGluIHRoZSBzYW1lIHdheSB0aHJvdWdoIHRoZSBzYW1lIHBsYWNlIGF0IG5vCiAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCiAgICBjb3B5IHRoZSBvYmplY3QgY29kZSBpcyBhIG5ldHdvcmsgc2VydmVyLCB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UKICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQogICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCiAgICBjbGVhciBkaXJlY3Rpb25zIG5leHQgdG8gdGhlIG9iamVjdCBjb2RlIHNheWluZyB3aGVyZSB0byBmaW5kIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQogICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCiAgICBhdmFpbGFibGUgZm9yIGFzIGxvbmcgYXMgbmVlZGVkIHRvIHNhdGlzZnkgdGhlc2UgcmVxdWlyZW1lbnRzLgoKICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKICAgIHlvdSBpbmZvcm0gb3RoZXIgcGVlcnMgd2hlcmUgdGhlIG9iamVjdCBjb2RlIGFuZCBDb3JyZXNwb25kaW5nCiAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCiAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KCiAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCmZyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCmluY2x1ZGVkIGluIGNvbnZleWluZyB0aGUgb2JqZWN0IGNvZGUgd29yay4KCiAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2hpY2ggaXMgbm9ybWFsbHkgdXNlZCBmb3IgcGVyc29uYWwsIGZhbWlseSwKb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgppbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCmRvdWJ0ZnVsIGNhc2VzIHNoYWxsIGJlIHJlc29sdmVkIGluIGZhdm9yIG9mIGNvdmVyYWdlLiAgRm9yIGEgcGFydGljdWxhcgpwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKdHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCm9mIHRoZSBwYXJ0aWN1bGFyIHVzZXIgb3Igb2YgdGhlIHdheSBpbiB3aGljaCB0aGUgcGFydGljdWxhciB1c2VyCmFjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAppcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbApjb21tZXJjaWFsLCBpbmR1c3RyaWFsIG9yIG5vbi1jb25zdW1lciB1c2VzLCB1bmxlc3Mgc3VjaCB1c2VzIHJlcHJlc2VudAp0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KCiAgIkluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiIgZm9yIGEgVXNlciBQcm9kdWN0IG1lYW5zIGFueSBtZXRob2RzLApwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQphIG1vZGlmaWVkIHZlcnNpb24gb2YgaXRzIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhlIGluZm9ybWF0aW9uIG11c3QKc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKbW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUuCgogIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCnNwZWNpZmljYWxseSBmb3IgdXNlIGluLCBhIFVzZXIgUHJvZHVjdCwgYW5kIHRoZSBjb252ZXlpbmcgb2NjdXJzIGFzCnBhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQpVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCmZpeGVkIHRlcm0gKHJlZ2FyZGxlc3Mgb2YgaG93IHRoZSB0cmFuc2FjdGlvbiBpcyBjaGFyYWN0ZXJpemVkKSwgdGhlCkNvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCmJ5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQppZiBuZWl0aGVyIHlvdSBub3IgYW55IHRoaXJkIHBhcnR5IHJldGFpbnMgdGhlIGFiaWxpdHkgdG8gaW5zdGFsbAptb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCmJlZW4gaW5zdGFsbGVkIGluIFJPTSkuCgogIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCmZvciBhIHdvcmsgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQgYnkgdGhlIHJlY2lwaWVudCwgb3IgZm9yCnRoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKYWR2ZXJzZWx5IGFmZmVjdHMgdGhlIG9wZXJhdGlvbiBvZiB0aGUgbmV0d29yayBvciB2aW9sYXRlcyB0aGUgcnVsZXMgYW5kCnByb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCgogIENvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkLCBhbmQgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIHByb3ZpZGVkLAppbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5CmRvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCnNvdXJjZSBjb2RlIGZvcm0pLCBhbmQgbXVzdCByZXF1aXJlIG5vIHNwZWNpYWwgcGFzc3dvcmQgb3Iga2V5IGZvcgp1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KCiAgNy4gQWRkaXRpb25hbCBUZXJtcy4KCiAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKTGljZW5zZSBieSBtYWtpbmcgZXhjZXB0aW9ucyBmcm9tIG9uZSBvciBtb3JlIG9mIGl0cyBjb25kaXRpb25zLgpBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCmJlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKdGhhdCB0aGV5IGFyZSB2YWxpZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4gIElmIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMKYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQp1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5CnRoaXMgTGljZW5zZSB3aXRob3V0IHJlZ2FyZCB0byB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucy4KCiAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgpyZW1vdmUgYW55IGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgZnJvbSB0aGF0IGNvcHksIG9yIGZyb20gYW55IHBhcnQgb2YKaXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgpyZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBvbiBtYXRlcmlhbCwgYWRkZWQgYnkgeW91IHRvIGEgY292ZXJlZCB3b3JrLApmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCgogIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgZm9yIG1hdGVyaWFsIHlvdQphZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCnRoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgoKICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQogICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKCiAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKICAgIE5vdGljZXMgZGlzcGxheWVkIGJ5IHdvcmtzIGNvbnRhaW5pbmcgaXQ7IG9yCgogICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgogICAgcmVxdWlyaW5nIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgb2Ygc3VjaCBtYXRlcmlhbCBiZSBtYXJrZWQgaW4KICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKCiAgICBkKSBMaW1pdGluZyB0aGUgdXNlIGZvciBwdWJsaWNpdHkgcHVycG9zZXMgb2YgbmFtZXMgb2YgbGljZW5zb3JzIG9yCiAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKCiAgICBlKSBEZWNsaW5pbmcgdG8gZ3JhbnQgcmlnaHRzIHVuZGVyIHRyYWRlbWFyayBsYXcgZm9yIHVzZSBvZiBzb21lCiAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKCiAgICBmKSBSZXF1aXJpbmcgaW5kZW1uaWZpY2F0aW9uIG9mIGxpY2Vuc29ycyBhbmQgYXV0aG9ycyBvZiB0aGF0CiAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgogICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgogICAgYW55IGxpYWJpbGl0eSB0aGF0IHRoZXNlIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIGRpcmVjdGx5IGltcG9zZSBvbgogICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgoKICBBbGwgb3RoZXIgbm9uLXBlcm1pc3NpdmUgYWRkaXRpb25hbCB0ZXJtcyBhcmUgY29uc2lkZXJlZCAiZnVydGhlcgpyZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CnJlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCmdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIGEgdGVybSB0aGF0IGlzIGEgZnVydGhlcgpyZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCmEgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcwpMaWNlbnNlLCB5b3UgbWF5IGFkZCB0byBhIGNvdmVyZWQgd29yayBtYXRlcmlhbCBnb3Zlcm5lZCBieSB0aGUgdGVybXMKb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCgogIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCmFkZGl0aW9uYWwgdGVybXMgdGhhdCBhcHBseSB0byB0aG9zZSBmaWxlcywgb3IgYSBub3RpY2UgaW5kaWNhdGluZwp3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgoKICBBZGRpdGlvbmFsIHRlcm1zLCBwZXJtaXNzaXZlIG9yIG5vbi1wZXJtaXNzaXZlLCBtYXkgYmUgc3RhdGVkIGluIHRoZQpmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwp0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCgogIDguIFRlcm1pbmF0aW9uLgoKICBZb3UgbWF5IG5vdCBwcm9wYWdhdGUgb3IgbW9kaWZ5IGEgY292ZXJlZCB3b3JrIGV4Y2VwdCBhcyBleHByZXNzbHkKcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoZSB0aGlyZApwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCgogIEhvd2V2ZXIsIGlmIHlvdSBjZWFzZSBhbGwgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgdGhlbiB5b3VyCmxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQpwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCmZpbmFsbHkgdGVybWluYXRlcyB5b3VyIGxpY2Vuc2UsIGFuZCAoYikgcGVybWFuZW50bHksIGlmIHRoZSBjb3B5cmlnaHQKaG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgoKICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCnZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0CmNvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKeW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCgogIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCmxpY2Vuc2VzIG9mIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlcgp0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CnJlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKbWF0ZXJpYWwgdW5kZXIgc2VjdGlvbiAxMC4KCiAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCgogIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgpydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCm9jY3VycmluZyBzb2xlbHkgYXMgYSBjb25zZXF1ZW5jZSBvZiB1c2luZyBwZWVyLXRvLXBlZXIgdHJhbnNtaXNzaW9uCnRvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCm5vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgptb2RpZnkgYW55IGNvdmVyZWQgd29yay4gIFRoZXNlIGFjdGlvbnMgaW5mcmluZ2UgY29weXJpZ2h0IGlmIHlvdSBkbwpub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KCiAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgoKICBFYWNoIHRpbWUgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CnJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZApwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCmZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbnNlLgoKICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCm9yZ2FuaXphdGlvbiwgb3Igc3Vic3RhbnRpYWxseSBhbGwgYXNzZXRzIG9mIG9uZSwgb3Igc3ViZGl2aWRpbmcgYW4Kb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKd29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKdHJhbnNhY3Rpb24gd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgd29yayBhbHNvIHJlY2VpdmVzIHdoYXRldmVyCmxpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZApnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQpDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBmcm9tIHRoZSBwcmVkZWNlc3NvciBpbiBpbnRlcmVzdCwgaWYKdGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgoKICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSBleGVyY2lzZSBvZiB0aGUKcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCnJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHlvdSBtYXkgbm90IGluaXRpYXRlIGxpdGlnYXRpb24KKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCnNhbGUsIG9yIGltcG9ydGluZyB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdC4KCiAgMTEuIFBhdGVudHMuCgogIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKd29yayB0aHVzIGxpY2Vuc2VkIGlzIGNhbGxlZCB0aGUgY29udHJpYnV0b3IncyAiY29udHJpYnV0b3IgdmVyc2lvbiIuCgogIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcwpvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBjb250cmlidXRvciwgd2hldGhlciBhbHJlYWR5IGFjcXVpcmVkIG9yCmhlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZApieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCmJ1dCBkbyBub3QgaW5jbHVkZSBjbGFpbXMgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgb25seSBhcyBhCmNvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCnB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudApwYXRlbnQgc3VibGljZW5zZXMgaW4gYSBtYW5uZXIgY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YKdGhpcyBMaWNlbnNlLgoKICBFYWNoIGNvbnRyaWJ1dG9yIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZQpwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCnByb3BhZ2F0ZSB0aGUgY29udGVudHMgb2YgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24uCgogIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCmFncmVlbWVudCBvciBjb21taXRtZW50LCBob3dldmVyIGRlbm9taW5hdGVkLCBub3QgdG8gZW5mb3JjZSBhIHBhdGVudAooc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCnN1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCnBhcnR5IG1lYW5zIHRvIG1ha2Ugc3VjaCBhbiBhZ3JlZW1lbnQgb3IgY29tbWl0bWVudCBub3QgdG8gZW5mb3JjZSBhCnBhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KCiAgSWYgeW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywga25vd2luZ2x5IHJlbHlpbmcgb24gYSBwYXRlbnQgbGljZW5zZSwKYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKdG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQpwdWJsaWNseSBhdmFpbGFibGUgbmV0d29yayBzZXJ2ZXIgb3Igb3RoZXIgcmVhZGlseSBhY2Nlc3NpYmxlIG1lYW5zLAp0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCmF2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKcGF0ZW50IGxpY2Vuc2UgZm9yIHRoaXMgcGFydGljdWxhciB3b3JrLCBvciAoMykgYXJyYW5nZSwgaW4gYSBtYW5uZXIKY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudApsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKYWN0dWFsIGtub3dsZWRnZSB0aGF0LCBidXQgZm9yIHRoZSBwYXRlbnQgbGljZW5zZSwgeW91ciBjb252ZXlpbmcgdGhlCmNvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0CmNvdW50cnkgdGhhdCB5b3UgaGF2ZSByZWFzb24gdG8gYmVsaWV2ZSBhcmUgdmFsaWQuCgogIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKYXJyYW5nZW1lbnQsIHlvdSBjb252ZXksIG9yIHByb3BhZ2F0ZSBieSBwcm9jdXJpbmcgY29udmV5YW5jZSBvZiwgYQpjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5Cm9yIGNvbnZleSBhIHNwZWNpZmljIGNvcHkgb2YgdGhlIGNvdmVyZWQgd29yaywgdGhlbiB0aGUgcGF0ZW50IGxpY2Vuc2UKeW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKd29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCgogIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgp0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcwpjb25kaXRpb25lZCBvbiB0aGUgbm9uLWV4ZXJjaXNlIG9mIG9uZSBvciBtb3JlIG9mIHRoZSByaWdodHMgdGhhdCBhcmUKc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAp3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcwppbiB0aGUgYnVzaW5lc3Mgb2YgZGlzdHJpYnV0aW5nIHNvZnR3YXJlLCB1bmRlciB3aGljaCB5b3UgbWFrZSBwYXltZW50CnRvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCnRoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQpwYXJ0aWVzIHdobyB3b3VsZCByZWNlaXZlIHRoZSBjb3ZlcmVkIHdvcmsgZnJvbSB5b3UsIGEgZGlzY3JpbWluYXRvcnkKcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yawpjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQpmb3IgYW5kIGluIGNvbm5lY3Rpb24gd2l0aCBzcGVjaWZpYyBwcm9kdWN0cyBvciBjb21waWxhdGlvbnMgdGhhdApjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCm9yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCgogIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKb3RoZXJ3aXNlIGJlIGF2YWlsYWJsZSB0byB5b3UgdW5kZXIgYXBwbGljYWJsZSBwYXRlbnQgbGF3LgoKICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KCiAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgpvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CmV4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90IGNvbnZleSBhCmNvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcwpMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQpub3QgY29udmV5IGl0IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiB5b3UgYWdyZWUgdG8gdGVybXMgdGhhdCBvYmxpZ2F0ZSB5b3UKdG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5CnRoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcwpMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4gZW50aXJlbHkgZnJvbSBjb252ZXlpbmcgdGhlIFByb2dyYW0uCgogIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgoKICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCnBlcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKdW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW50byBhIHNpbmdsZQpjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCkxpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLApidXQgdGhlIHNwZWNpYWwgcmVxdWlyZW1lbnRzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCnNlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKY29tYmluYXRpb24gYXMgc3VjaC4KCiAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgoKICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgp0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCmJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bwphZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KCiAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGUgR05VIEdlbmVyYWwKUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCmJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCgogIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKdmVyc2lvbnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MKcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQp0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KCiAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQphdXRob3Igb3IgY29weXJpZ2h0IGhvbGRlciBhcyBhIHJlc3VsdCBvZiB5b3VyIGNob29zaW5nIHRvIGZvbGxvdyBhCmxhdGVyIHZlcnNpb24uCgogIDE1LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LgoKICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCkFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQKSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQpPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgpQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQpJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgoKICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCgogIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORwpXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTClRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWQpHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgpEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRApQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgpTVUNIIERBTUFHRVMuCgogIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCgogIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAphYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKcmV2aWV3aW5nIGNvdXJ0cyBzaGFsbCBhcHBseSBsb2NhbCBsYXcgdGhhdCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzCmFuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQpjb3B5IG9mIHRoZSBQcm9ncmFtIGluIHJldHVybiBmb3IgYSBmZWUuCgogICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKCiAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwoKICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0CnBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCgogIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0CnRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKc3RhdGUgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAp0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KCiAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgogICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KCiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgoKICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCgogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCgogIElmIHRoZSBwcm9ncmFtIGRvZXMgdGVybWluYWwgaW50ZXJhY3Rpb24sIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQKbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgoKICAgIDxwcm9ncmFtPiAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCiAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CiAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCgpUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHlvdXIgcHJvZ3JhbSdzIGNvbW1hbmRzCm1pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KCiAgWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHNjaG9vbCwKaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgoKICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCmludG8gcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdQptYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKdGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsClB1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLiAgQnV0IGZpcnN0LCBwbGVhc2UgcmVhZAo8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/README.TXT</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[VENQREYgLSBSRUFETUUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpJIFdJU0ggVE8gSU1QUk9WRSBBTkQgRVhQQU5EIFRDUERGIEJVVCBJIE5FRUQgWU9VUiBTVVBQT1JULgpQTEVBU0UgTUFLRSBBIERPTkFUSU9OOgpodHRwOi8vc291cmNlZm9yZ2UubmV0L2RvbmF0ZS9pbmRleC5waHA/Z3JvdXBfaWQ9MTI4MDc2CgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCk5hbWU6IFRDUERGClZlcnNpb246IDYuMC4wNzEKUmVsZWFzZSBkYXRlOiAyMDE0LTA0LTI1CkF1dGhvcjoJTmljb2xhIEFzdW5pCgpDb3B5cmlnaHQgKGMpIDIwMDItMjAxNDoKCU5pY29sYSBBc3VuaQoJVGVjbmljay5jb20gTFRECgl3d3cudGVjbmljay5jb20KClVSTHM6CglodHRwOi8vd3d3LnRjcGRmLm9yZwoJaHR0cDovL3d3dy5zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvdGNwZGYKCkRlc2NyaXB0aW9uOgoJVENQREYgaXMgYSBQSFAgY2xhc3MgZm9yIGdlbmVyYXRpbmcgUERGIGZpbGVzIG9uLXRoZS1mbHkgd2l0aG91dCByZXF1aXJpbmcgZXh0ZXJuYWwgZXh0ZW5zaW9ucy4KCVRoaXMgbGlicmFyeSBpbmNsdWRlcyBhbHNvIGEgY2xhc3MgdG8gZXh0cmFjdCBkYXRhIGZyb20gZXhpc3RpbmcgUERGIGRvY3VtZW50cyBhbmQKCWNsYXNzZXMgdG8gZ2VuZXJhdGUgMUQgYW5kIDJEIGJhcmNvZGVzIGluIHZhcmlvdXMgZm9ybWF0cy4KCk1haW4gRmVhdHVyZXM6CiAgICAqIG5vIGV4dGVybmFsIGxpYnJhcmllcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBiYXNpYyBmdW5jdGlvbnM7CiAgICAqIGFsbCBzdGFuZGFyZCBwYWdlIGZvcm1hdHMsIGN1c3RvbSBwYWdlIGZvcm1hdHMsIGN1c3RvbSBtYXJnaW5zIGFuZCB1bml0cyBvZiBtZWFzdXJlOwogICAgKiBVVEYtOCBVbmljb2RlIGFuZCBSaWdodC1Uby1MZWZ0IGxhbmd1YWdlczsKICAgICogVHJ1ZVR5cGVVbmljb2RlLCBPcGVuVHlwZVVuaWNvZGUgdjEsIFRydWVUeXBlLCBPcGVuVHlwZSB2MSwgVHlwZTEgYW5kIENJRC0wIGZvbnRzOwogICAgKiBmb250IHN1YnNldHRpbmc7CiAgICAqIG1ldGhvZHMgdG8gcHVibGlzaCBzb21lIFhIVE1MICsgQ1NTIGNvZGUsIEphdmFzY3JpcHQgYW5kIEZvcm1zOwogICAgKiBpbWFnZXMsIGdyYXBoaWMgKGdlb21ldHJpYyBmaWd1cmVzKSBhbmQgdHJhbnNmb3JtYXRpb24gbWV0aG9kczsKICAgICogc3VwcG9ydHMgSlBFRywgUE5HIGFuZCBTVkcgaW1hZ2VzIG5hdGl2ZWx5LCBhbGwgaW1hZ2VzIHN1cHBvcnRlZCBieSBHRCAoR0QsIEdEMiwgR0QyUEFSVCwgR0lGLCBKUEVHLCBQTkcsIEJNUCwgWEJNLCBYUE0pIGFuZCBhbGwgaW1hZ2VzIHN1cHBvcnRlZCB2aWEgSW1hZ01hZ2ljayAoaHR0cDogIHd3dy5pbWFnZW1hZ2ljay5vcmcvd3d3L2Zvcm1hdHMuaHRtbCkKICAgICogMUQgYW5kIDJEIGJhcmNvZGVzOiBDT0RFIDM5LCBBTlNJIE1IMTAuOE0tMTk4MywgVVNELTMsIDMgb2YgOSwgQ09ERSA5MywgVVNTLTkzLCBTdGFuZGFyZCAyIG9mIDUsIEludGVybGVhdmVkIDIgb2YgNSwgQ09ERSAxMjggQS9CL0MsIDIgYW5kIDUgRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb24sIEVBTiA4LCBFQU4gMTMsIFVQQy1BLCBVUEMtRSwgTVNJLCBQT1NUTkVULCBQTEFORVQsIFJNUzRDQyAoUm95YWwgTWFpbCA0LXN0YXRlIEN1c3RvbWVyIENvZGUpLCBDQkMgKEN1c3RvbWVyIEJhciBDb2RlKSwgS0lYIChLbGFudCBpbmRleCAtIEN1c3RvbWVyIGluZGV4KSwgSW50ZWxsaWdlbnQgTWFpbCBCYXJjb2RlLCBPbmVjb2RlLCBVU1BTLUItMzIwMCwgQ09EQUJBUiwgQ09ERSAxMSwgUEhBUk1BQ09ERSwgUEhBUk1BQ09ERSBUV08tVFJBQ0tTLCBEYXRhbWF0cml4LCBRUi1Db2RlLCBQREY0MTc7CiAgICAqIEpQRUcgYW5kIFBORyBJQ0MgcHJvZmlsZXMsIEdyYXlzY2FsZSwgUkdCLCBDTVlLLCBTcG90IENvbG9ycyBhbmQgVHJhbnNwYXJlbmNpZXM7CiAgICAqIGF1dG9tYXRpYyBwYWdlIGhlYWRlciBhbmQgZm9vdGVyIG1hbmFnZW1lbnQ7CiAgICAqIGRvY3VtZW50IGVuY3J5cHRpb24gdXAgdG8gMjU2IGJpdCBhbmQgZGlnaXRhbCBzaWduYXR1cmUgY2VydGlmaWNhdGlvbnM7CiAgICAqIHRyYW5zYWN0aW9ucyB0byBVTkRPIGNvbW1hbmRzOwogICAgKiBQREYgYW5ub3RhdGlvbnMsIGluY2x1ZGluZyBsaW5rcywgdGV4dCBhbmQgZmlsZSBhdHRhY2htZW50czsKICAgICogdGV4dCByZW5kZXJpbmcgbW9kZXMgKGZpbGwsIHN0cm9rZSBhbmQgY2xpcHBpbmcpOwogICAgKiBtdWx0aXBsZSBjb2x1bW5zIG1vZGU7CiAgICAqIG5vLXdyaXRlIHBhZ2UgcmVnaW9uczsKICAgICogYm9va21hcmtzLCBuYW1lZCBkZXN0aW5hdGlvbnMgYW5kIHRhYmxlIG9mIGNvbnRlbnQ7CiAgICAqIHRleHQgaHlwaGVuYXRpb247CiAgICAqIHRleHQgc3RyZXRjaGluZyBhbmQgc3BhY2luZyAodHJhY2tpbmcpOwogICAgKiBhdXRvbWF0aWMgcGFnZSBicmVhaywgbGluZSBicmVhayBhbmQgdGV4dCBhbGlnbm1lbnRzIGluY2x1ZGluZyBqdXN0aWZpY2F0aW9uOwogICAgKiBhdXRvbWF0aWMgcGFnZSBudW1iZXJpbmcgYW5kIHBhZ2UgZ3JvdXBzOwogICAgKiBtb3ZlIGFuZCBkZWxldGUgcGFnZXM7CiAgICAqIHBhZ2UgY29tcHJlc3Npb24gKHJlcXVpcmVzIHBocC16bGliIGV4dGVuc2lvbik7CiAgICAqIFhPQmplY3QgVGVtcGxhdGVzOwoJKiBMYXllcnMgYW5kIG9iamVjdCB2aXNpYmlsaXR5LgoJKiBQREYvQS0xYiBzdXBwb3J0LgoKSW5zdGFsbGF0aW9uIChmdWxsIGluc3RydWN0aW9ucyBvbiBodHRwOiAgd3d3LnRjcGRmLm9yZyk6CgkxLiBjb3B5IHRoZSBmb2xkZXIgb24geW91ciBXZWIgc2VydmVyCgkyLiBzZXQgeW91ciBpbnN0YWxsYXRpb24gcGF0aCBhbmQgb3RoZXIgcGFyYW1ldGVycyBvbiB0aGUgY29uZmlnL3RjcGRmX2NvbmZpZy5waHAKCTMuIGNhbGwgdGhlIGV4YW1wbGVzL2V4YW1wbGVfMDAxLnBocCBwYWdlIHdpdGggeW91ciBicm93c2VyIHRvIHNlZSBhbiBleGFtcGxlCgpTb3VyY2UgQ29kZSBEb2N1bWVudGF0aW9uOgoJaHR0cDovL3d3dy50Y3BkZi5vcmcKCkFkZGl0aW9uYWwgRG9jdW1lbnRhdGlvbjoKCWh0dHA6Ly93d3cudGNwZGYub3JnCgpMaWNlbnNlOgoJQ29weXJpZ2h0IChDKSAyMDAyLTIwMTQgIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAoKCVRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKCXVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCglwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKCUxpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCgoJVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CglXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCglNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCglTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKCVlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKCWFsb25nIHdpdGggVENQREYuIElmIG5vdCwgc2VlCgk8aHR0cDovL3d3dy50ZWNuaWNrLmNvbS9wYWdlZmlsZXMvdGNwZGYvTElDRU5TRS5UWFQ+LgoKCVNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKVGhpcmQgcGFydHkgZm9udHM6CgoJVGhpcyBsaWJyYXJ5IG1heSBpbmNsdWRlIHRoaXJkIHBhcnR5IGZvbnQgZmlsZXMgcmVsZWFzZWQgd2l0aCBkaWZmZXJlbnQgbGljZW5zZXMuCgkKCUFsbCB0aGUgUEhQIGZpbGVzIG9uIHRoZSBmb250cyBkaXJlY3RvcnkgYXJlIHN1YmplY3QgdG8gdGhlIGdlbmVyYWwgVENQREYgbGljZW5zZSAoR05VLUxHUEx2MyksCgl0aGV5IGRvIG5vdCBjb250YWluIGFueSBiaW5hcnkgZGF0YSBidXQganVzdCBhIGRlc2NyaXB0aW9uIG9mIHRoZSBnZW5lcmFsIHByb3BlcnRpZXMgb2YgYSBwYXJ0aWN1bGFyIGZvbnQuCglUaGVzZSBmaWxlcyBjYW4gYmUgYWxzbyBnZW5lcmF0ZWQgb24gdGhlIGZseSB1c2luZyB0aGUgZm9udCB1dGlsaXRpZXMgYW5kIFRDUERGIG1ldGhvZHMuCgkKCUFsbCB0aGUgb3JpZ2luYWwgYmluYXJ5IFRURiBmb250IGZpbGVzIGhhdmUgYmVlbiByZW5hbWVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggVENQREYgYW5kIGNvbXByZXNzZWQgdXNpbmcgdGhlIGd6Y29tcHJlc3MgUEhQIGZ1bmN0aW9uIHRoYXQgdXNlcyB0aGUgWkxJQiBkYXRhIGZvcm1hdCAoLnogZmlsZXMpLgoJCglUaGUgYmluYXJ5IGZpbGVzICgueikgdGhhdCBiZWdpbnMgd2l0aCB0aGUgcHJlZml4ICJmcmVlIiBoYXZlIGJlZW4gZXh0cmFjdGVkIGZyb20gdGhlIEdOVSBGcmVlRm9udCBjb2xsZWN0aW9uIChHTlUtR1BMdjMpLgoJVGhlIGJpbmFyeSBmaWxlcyAoLnopIHRoYXQgYmVnaW5zIHdpdGggdGhlIHByZWZpeCAicGRmYSIgaGF2ZSBiZWVuIGRlcml2ZWQgZnJvbSB0aGUgR05VIEZyZWVGb250LCBzbyB0aGV5IGFyZSBzdWJqZWN0IHRvIHRoZSBzYW1lIGxpY2Vuc2UuCglGb3IgdGhlIGRldGFpbHMgb2YgQ29weXJpZ2h0LCBMaWNlbnNlIGFuZCBvdGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGNoZWNrIHRoZSBmaWxlcyBpbnNpZGUgdGhlIGRpcmVjdG9yeSBmb250cy9mcmVlZm9udC0yMDEyMDUwMwoJTGluayA6IGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9mcmVlZm9udC8KCQoJVGhlIGJpbmFyeSBmaWxlcyAoLnopIHRoYXQgYmVnaW5zIHdpdGggdGhlIHByZWZpeCAiZGVqYXZ1IiBoYXZlIGJlZW4gZXh0cmFjdGVkIGZyb20gdGhlIERlamFWdSBmb250cyAyLjMzIChCaXRzdHJlYW0pIGNvbGxlY3Rpb24uCglGb3IgdGhlIGRldGFpbHMgb2YgQ29weXJpZ2h0LCBMaWNlbnNlIGFuZCBvdGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIGNoZWNrIHRoZSBmaWxlcyBpbnNpZGUgdGhlIGRpcmVjdG9yeSBmb250cy9kZWphdnUtZm9udHMtdHRmLTIuMzMKCUxpbmsgOiBodHRwOi8vZGVqYXZ1LWZvbnRzLm9yZwoJCglUaGUgYmluYXJ5IGZpbGVzICgueikgdGhhdCBiZWdpbnMgd2l0aCB0aGUgcHJlZml4ICJhZSIgaGF2ZSBiZWVuIGV4dHJhY3RlZCBmcm9tIHRoZSBBcmFiZXllcy5vcmcgY29sbGVjdGlvbiAoR05VLUdQTHYyKS4KCUxpbmsgOiBodHRwOi8vcHJvamVjdHMuYXJhYmV5ZXMub3JnLwoKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGYucGhwCi8vIFZlcnNpb24gICAgIDogNi4wLjA3MQovLyBCZWdpbiAgICAgICA6IDIwMDItMDgtMDMKLy8gTGFzdCBVcGRhdGUgOiAyMDE0LTA0LTI1Ci8vIEF1dGhvciAgICAgIDogTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFREIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQovLyBMaWNlbnNlICAgICA6IEdOVS1MR1BMIHYzIChodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwpCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29weXJpZ2h0IChDKSAyMDAyLTIwMTQgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gaW9yZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAovLyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwovLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKLy8gTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8KLy8gVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgovLyBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuIElmIG5vdCwgc2VlCi8vIDxodHRwOi8vd3d3LnRlY25pY2suY29tL3BhZ2VmaWxlcy90Y3BkZi9MSUNFTlNFLlRYVD4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDoKLy8gICBUaGlzIGlzIGEgUEhQIGNsYXNzIGZvciBnZW5lcmF0aW5nIFBERiBkb2N1bWVudHMgd2l0aG91dCByZXF1aXJpbmcgZXh0ZXJuYWwgZXh0ZW5zaW9ucy4KLy8KLy8gTk9URToKLy8gICBUaGlzIGNsYXNzIHdhcyBvcmlnaW5hbGx5IGRlcml2ZWQgaW4gMjAwMiBmcm9tIHRoZSBQdWJsaWMKLy8gICBEb21haW4gRlBERiBjbGFzcyBieSBPbGl2aWVyIFBsYXRoZXkgKGh0dHA6Ly93d3cuZnBkZi5vcmcpLAovLyAgIGJ1dCBub3cgaXMgYWxtb3N0IGVudGlyZWx5IHJld3JpdHRlbiBhbmQgY29udGFpbnMgdGhvdXNhbmRzIG9mCi8vICAgbmV3IGxpbmVzIG9mIGNvZGUgYW5kIGh1bmRyZWRzIG5ldyBmZWF0dXJlcy4KLy8KLy8gTWFpbiBmZWF0dXJlczoKLy8gICogbm8gZXh0ZXJuYWwgbGlicmFyaWVzIGFyZSByZXF1aXJlZCBmb3IgdGhlIGJhc2ljIGZ1bmN0aW9uczsKLy8gICogYWxsIHN0YW5kYXJkIHBhZ2UgZm9ybWF0cywgY3VzdG9tIHBhZ2UgZm9ybWF0cywgY3VzdG9tIG1hcmdpbnMgYW5kIHVuaXRzIG9mIG1lYXN1cmU7Ci8vICAqIFVURi04IFVuaWNvZGUgYW5kIFJpZ2h0LVRvLUxlZnQgbGFuZ3VhZ2VzOwovLyAgKiBUcnVlVHlwZVVuaWNvZGUsIFRydWVUeXBlLCBUeXBlMSBhbmQgQ0lELTAgZm9udHM7Ci8vICAqIGZvbnQgc3Vic2V0dGluZzsKLy8gICogbWV0aG9kcyB0byBwdWJsaXNoIHNvbWUgWEhUTUwgKyBDU1MgY29kZSwgSmF2YXNjcmlwdCBhbmQgRm9ybXM7Ci8vICAqIGltYWdlcywgZ3JhcGhpYyAoZ2VvbWV0cmljIGZpZ3VyZXMpIGFuZCB0cmFuc2Zvcm1hdGlvbiBtZXRob2RzOwovLyAgKiBzdXBwb3J0cyBKUEVHLCBQTkcgYW5kIFNWRyBpbWFnZXMgbmF0aXZlbHksIGFsbCBpbWFnZXMgc3VwcG9ydGVkIGJ5IEdEIChHRCwgR0QyLCBHRDJQQVJULCBHSUYsIEpQRUcsIFBORywgQk1QLCBYQk0sIFhQTSkgYW5kIGFsbCBpbWFnZXMgc3VwcG9ydGVkIHZpYSBJbWFnTWFnaWNrIChodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZy93d3cvZm9ybWF0cy5odG1sKQovLyAgKiAxRCBhbmQgMkQgYmFyY29kZXM6IENPREUgMzksIEFOU0kgTUgxMC44TS0xOTgzLCBVU0QtMywgMyBvZiA5LCBDT0RFIDkzLCBVU1MtOTMsIFN0YW5kYXJkIDIgb2YgNSwgSW50ZXJsZWF2ZWQgMiBvZiA1LCBDT0RFIDEyOCBBL0IvQywgMiBhbmQgNSBEaWdpdHMgVVBDLUJhc2VkIEV4dGVudGlvbiwgRUFOIDgsIEVBTiAxMywgVVBDLUEsIFVQQy1FLCBNU0ksIFBPU1RORVQsIFBMQU5FVCwgUk1TNENDIChSb3lhbCBNYWlsIDQtc3RhdGUgQ3VzdG9tZXIgQ29kZSksIENCQyAoQ3VzdG9tZXIgQmFyIENvZGUpLCBLSVggKEtsYW50IGluZGV4IC0gQ3VzdG9tZXIgaW5kZXgpLCBJbnRlbGxpZ2VudCBNYWlsIEJhcmNvZGUsIE9uZWNvZGUsIFVTUFMtQi0zMjAwLCBDT0RBQkFSLCBDT0RFIDExLCBQSEFSTUFDT0RFLCBQSEFSTUFDT0RFIFRXTy1UUkFDS1MsIERhdGFtYXRyaXgsIFFSLUNvZGUsIFBERjQxNzsKLy8gICogSlBFRyBhbmQgUE5HIElDQyBwcm9maWxlcywgR3JheXNjYWxlLCBSR0IsIENNWUssIFNwb3QgQ29sb3JzIGFuZCBUcmFuc3BhcmVuY2llczsKLy8gICogYXV0b21hdGljIHBhZ2UgaGVhZGVyIGFuZCBmb290ZXIgbWFuYWdlbWVudDsKLy8gICogZG9jdW1lbnQgZW5jcnlwdGlvbiB1cCB0byAyNTYgYml0IGFuZCBkaWdpdGFsIHNpZ25hdHVyZSBjZXJ0aWZpY2F0aW9uczsKLy8gICogdHJhbnNhY3Rpb25zIHRvIFVORE8gY29tbWFuZHM7Ci8vICAqIFBERiBhbm5vdGF0aW9ucywgaW5jbHVkaW5nIGxpbmtzLCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzOwovLyAgKiB0ZXh0IHJlbmRlcmluZyBtb2RlcyAoZmlsbCwgc3Ryb2tlIGFuZCBjbGlwcGluZyk7Ci8vICAqIG11bHRpcGxlIGNvbHVtbnMgbW9kZTsKLy8gICogbm8td3JpdGUgcGFnZSByZWdpb25zOwovLyAgKiBib29rbWFya3MsIG5hbWVkIGRlc3RpbmF0aW9ucyBhbmQgdGFibGUgb2YgY29udGVudDsKLy8gICogdGV4dCBoeXBoZW5hdGlvbjsKLy8gICogdGV4dCBzdHJldGNoaW5nIGFuZCBzcGFjaW5nICh0cmFja2luZyk7Ci8vICAqIGF1dG9tYXRpYyBwYWdlIGJyZWFrLCBsaW5lIGJyZWFrIGFuZCB0ZXh0IGFsaWdubWVudHMgaW5jbHVkaW5nIGp1c3RpZmljYXRpb247Ci8vICAqIGF1dG9tYXRpYyBwYWdlIG51bWJlcmluZyBhbmQgcGFnZSBncm91cHM7Ci8vICAqIG1vdmUgYW5kIGRlbGV0ZSBwYWdlczsKLy8gICogcGFnZSBjb21wcmVzc2lvbiAocmVxdWlyZXMgcGhwLXpsaWIgZXh0ZW5zaW9uKTsKLy8gICogWE9CamVjdCBUZW1wbGF0ZXM7Ci8vICAqIExheWVycyBhbmQgb2JqZWN0IHZpc2liaWxpdHkuCi8vCSogUERGL0EtMWIgc3VwcG9ydAovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBAZmlsZQogKiBUaGlzIGlzIGEgUEhQIGNsYXNzIGZvciBnZW5lcmF0aW5nIFBERiBkb2N1bWVudHMgd2l0aG91dCByZXF1aXJpbmcgZXh0ZXJuYWwgZXh0ZW5zaW9ucy48YnI+CiAqIFRDUERGIHByb2plY3QgKGh0dHA6Ly93d3cudGNwZGYub3JnKSB3YXMgb3JpZ2luYWxseSBkZXJpdmVkIGluIDIwMDIgZnJvbSB0aGUgUHVibGljIERvbWFpbiBGUERGIGNsYXNzIGJ5IE9saXZpZXIgUGxhdGhleSAoaHR0cDovL3d3dy5mcGRmLm9yZyksIGJ1dCBub3cgaXMgYWxtb3N0IGVudGlyZWx5IHJld3JpdHRlbi48YnI+CiAqIDxoMz5UQ1BERiBtYWluIGZlYXR1cmVzIGFyZTo8L2gzPgogKiA8dWw+CiAqIDxsaT5ubyBleHRlcm5hbCBsaWJyYXJpZXMgYXJlIHJlcXVpcmVkIGZvciB0aGUgYmFzaWMgZnVuY3Rpb25zOzwvbGk+CiAqIDxsaT5hbGwgc3RhbmRhcmQgcGFnZSBmb3JtYXRzLCBjdXN0b20gcGFnZSBmb3JtYXRzLCBjdXN0b20gbWFyZ2lucyBhbmQgdW5pdHMgb2YgbWVhc3VyZTs8L2xpPgogKiA8bGk+VVRGLTggVW5pY29kZSBhbmQgUmlnaHQtVG8tTGVmdCBsYW5ndWFnZXM7PC9saT4KICogPGxpPlRydWVUeXBlVW5pY29kZSwgVHJ1ZVR5cGUsIFR5cGUxIGFuZCBDSUQtMCBmb250czs8L2xpPgogKiA8bGk+Zm9udCBzdWJzZXR0aW5nOzwvbGk+CiAqIDxsaT5tZXRob2RzIHRvIHB1Ymxpc2ggc29tZSBYSFRNTCArIENTUyBjb2RlLCBKYXZhc2NyaXB0IGFuZCBGb3Jtczs8L2xpPgogKiA8bGk+aW1hZ2VzLCBncmFwaGljIChnZW9tZXRyaWMgZmlndXJlcykgYW5kIHRyYW5zZm9ybWF0aW9uIG1ldGhvZHM7CiAqIDxsaT5zdXBwb3J0cyBKUEVHLCBQTkcgYW5kIFNWRyBpbWFnZXMgbmF0aXZlbHksIGFsbCBpbWFnZXMgc3VwcG9ydGVkIGJ5IEdEIChHRCwgR0QyLCBHRDJQQVJULCBHSUYsIEpQRUcsIFBORywgQk1QLCBYQk0sIFhQTSkgYW5kIGFsbCBpbWFnZXMgc3VwcG9ydGVkIHZpYSBJbWFnTWFnaWNrIChodHRwOi8vd3d3LmltYWdlbWFnaWNrLm9yZy93d3cvZm9ybWF0cy5odG1sKTwvbGk+CiAqIDxsaT4xRCBhbmQgMkQgYmFyY29kZXM6IENPREUgMzksIEFOU0kgTUgxMC44TS0xOTgzLCBVU0QtMywgMyBvZiA5LCBDT0RFIDkzLCBVU1MtOTMsIFN0YW5kYXJkIDIgb2YgNSwgSW50ZXJsZWF2ZWQgMiBvZiA1LCBDT0RFIDEyOCBBL0IvQywgMiBhbmQgNSBEaWdpdHMgVVBDLUJhc2VkIEV4dGVudGlvbiwgRUFOIDgsIEVBTiAxMywgVVBDLUEsIFVQQy1FLCBNU0ksIFBPU1RORVQsIFBMQU5FVCwgUk1TNENDIChSb3lhbCBNYWlsIDQtc3RhdGUgQ3VzdG9tZXIgQ29kZSksIENCQyAoQ3VzdG9tZXIgQmFyIENvZGUpLCBLSVggKEtsYW50IGluZGV4IC0gQ3VzdG9tZXIgaW5kZXgpLCBJbnRlbGxpZ2VudCBNYWlsIEJhcmNvZGUsIE9uZWNvZGUsIFVTUFMtQi0zMjAwLCBDT0RBQkFSLCBDT0RFIDExLCBQSEFSTUFDT0RFLCBQSEFSTUFDT0RFIFRXTy1UUkFDS1MsIERhdGFtYXRyaXgsIFFSLUNvZGUsIFBERjQxNzs8L2xpPgogKiA8bGk+SlBFRyBhbmQgUE5HIElDQyBwcm9maWxlcywgR3JheXNjYWxlLCBSR0IsIENNWUssIFNwb3QgQ29sb3JzIGFuZCBUcmFuc3BhcmVuY2llczs8L2xpPgogKiA8bGk+YXV0b21hdGljIHBhZ2UgaGVhZGVyIGFuZCBmb290ZXIgbWFuYWdlbWVudDs8L2xpPgogKiA8bGk+ZG9jdW1lbnQgZW5jcnlwdGlvbiB1cCB0byAyNTYgYml0IGFuZCBkaWdpdGFsIHNpZ25hdHVyZSBjZXJ0aWZpY2F0aW9uczs8L2xpPgogKiA8bGk+dHJhbnNhY3Rpb25zIHRvIFVORE8gY29tbWFuZHM7PC9saT4KICogPGxpPlBERiBhbm5vdGF0aW9ucywgaW5jbHVkaW5nIGxpbmtzLCB0ZXh0IGFuZCBmaWxlIGF0dGFjaG1lbnRzOzwvbGk+CiAqIDxsaT50ZXh0IHJlbmRlcmluZyBtb2RlcyAoZmlsbCwgc3Ryb2tlIGFuZCBjbGlwcGluZyk7PC9saT4KICogPGxpPm11bHRpcGxlIGNvbHVtbnMgbW9kZTs8L2xpPgogKiA8bGk+bm8td3JpdGUgcGFnZSByZWdpb25zOzwvbGk+CiAqIDxsaT5ib29rbWFya3MsIG5hbWVkIGRlc3RpbmF0aW9ucyBhbmQgdGFibGUgb2YgY29udGVudDs8L2xpPgogKiA8bGk+dGV4dCBoeXBoZW5hdGlvbjs8L2xpPgogKiA8bGk+dGV4dCBzdHJldGNoaW5nIGFuZCBzcGFjaW5nICh0cmFja2luZyk7PC9saT4KICogPGxpPmF1dG9tYXRpYyBwYWdlIGJyZWFrLCBsaW5lIGJyZWFrIGFuZCB0ZXh0IGFsaWdubWVudHMgaW5jbHVkaW5nIGp1c3RpZmljYXRpb247PC9saT4KICogPGxpPmF1dG9tYXRpYyBwYWdlIG51bWJlcmluZyBhbmQgcGFnZSBncm91cHM7PC9saT4KICogPGxpPm1vdmUgYW5kIGRlbGV0ZSBwYWdlczs8L2xpPgogKiA8bGk+cGFnZSBjb21wcmVzc2lvbiAocmVxdWlyZXMgcGhwLXpsaWIgZXh0ZW5zaW9uKTs8L2xpPgogKiA8bGk+WE9CamVjdCBUZW1wbGF0ZXM7PC9saT4KICogPGxpPkxheWVycyBhbmQgb2JqZWN0IHZpc2liaWxpdHk7PC9saT4KICogPGxpPlBERi9BLTFiIHN1cHBvcnQuPC9saT4KICogPC91bD4KICogVG9vbHMgdG8gZW5jb2RlIHlvdXIgdW5pY29kZSBmb250cyBhcmUgb24gZm9udHMvdXRpbHMgZGlyZWN0b3J5LjwvcD4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGF1dGhvciBOaWNvbGEgQXN1bmkKICogQHZlcnNpb24gNi4wLjA3MQogKi8KCi8vIFRDUERGIGNvbmZpZ3VyYXRpb24KcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvdGNwZGZfYXV0b2NvbmZpZy5waHAnKTsKLy8gVENQREYgc3RhdGljIGZvbnQgbWV0aG9kcyBhbmQgZGF0YQpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3RjcGRmX2ZvbnRfZGF0YS5waHAnKTsKLy8gVENQREYgc3RhdGljIGZvbnQgbWV0aG9kcyBhbmQgZGF0YQpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3RjcGRmX2ZvbnRzLnBocCcpOwovLyBUQ1BERiBzdGF0aWMgY29sb3IgbWV0aG9kcyBhbmQgZGF0YQpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3RjcGRmX2NvbG9ycy5waHAnKTsKLy8gVENQREYgc3RhdGljIGltYWdlIG1ldGhvZHMgYW5kIGRhdGEKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS90Y3BkZl9pbWFnZXMucGhwJyk7Ci8vIFRDUERGIHN0YXRpYyBtZXRob2RzIGFuZCBkYXRhCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL2luY2x1ZGUvdGNwZGZfc3RhdGljLnBocCcpOwoKLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgovKioKICogQGNsYXNzIFRDUERGCiAqIFBIUCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBQREYgZG9jdW1lbnRzIHdpdGhvdXQgcmVxdWlyaW5nIGV4dGVybmFsIGV4dGVuc2lvbnMuCiAqIFRDUERGIHByb2plY3QgKGh0dHA6Ly93d3cudGNwZGYub3JnKSBoYXMgYmVlbiBvcmlnaW5hbGx5IGRlcml2ZWQgaW4gMjAwMiBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIEZQREYgY2xhc3MgYnkgT2xpdmllciBQbGF0aGV5IChodHRwOi8vd3d3LmZwZGYub3JnKSwgYnV0IG5vdyBpcyBhbG1vc3QgZW50aXJlbHkgcmV3cml0dGVuLjxicj4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGJyaWVmIFBIUCBjbGFzcyBmb3IgZ2VuZXJhdGluZyBQREYgZG9jdW1lbnRzIHdpdGhvdXQgcmVxdWlyaW5nIGV4dGVybmFsIGV4dGVuc2lvbnMuCiAqIEB2ZXJzaW9uIDYuMC4wNzEKICogQGF1dGhvciBOaWNvbGEgQXN1bmkgLSBpbmZvQHRlY25pY2suY29tCiAqLwpjbGFzcyBUQ1BERiB7CgoJLy8gUHJvdGVjdGVkIHByb3BlcnRpZXMKCgkvKioKCSAqIEN1cnJlbnQgcGFnZSBudW1iZXIuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkcGFnZTsKCgkvKioKCSAqIEN1cnJlbnQgb2JqZWN0IG51bWJlci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRuOwoKCS8qKgoJICogQXJyYXkgb2Ygb2JqZWN0IG9mZnNldHMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkb2Zmc2V0cyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBvYmplY3QgSURzIGZvciBlYWNoIHBhZ2UuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkcGFnZW9iamVjdHMgPSBhcnJheSgpOwoKCS8qKgoJICogQnVmZmVyIGhvbGRpbmcgaW4tbWVtb3J5IFBERi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRidWZmZXI7CgoJLyoqCgkgKiBBcnJheSBjb250YWluaW5nIHBhZ2VzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHBhZ2VzID0gYXJyYXkoKTsKCgkvKioKCSAqIEN1cnJlbnQgZG9jdW1lbnQgc3RhdGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkc3RhdGU7CgoJLyoqCgkgKiBDb21wcmVzc2lvbiBmbGFnLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNvbXByZXNzOwoKCS8qKgoJICogQ3VycmVudCBwYWdlIG9yaWVudGF0aW9uIChQID0gUG9ydHJhaXQsIEwgPSBMYW5kc2NhcGUpLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJEN1ck9yaWVudGF0aW9uOwoKCS8qKgoJICogUGFnZSBkaW1lbnNpb25zLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHBhZ2VkaW0gPSBhcnJheSgpOwoKCS8qKgoJICogU2NhbGUgZmFjdG9yIChudW1iZXIgb2YgcG9pbnRzIGluIHVzZXIgdW5pdCkuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkazsKCgkvKioKCSAqIFdpZHRoIG9mIHBhZ2UgZm9ybWF0IGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmd1B0OwoKCS8qKgoJICogSGVpZ2h0IG9mIHBhZ2UgZm9ybWF0IGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmaFB0OwoKCS8qKgoJICogQ3VycmVudCB3aWR0aCBvZiBwYWdlIGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR3UHQ7CgoJLyoqCgkgKiBDdXJyZW50IGhlaWdodCBvZiBwYWdlIGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRoUHQ7CgoJLyoqCgkgKiBDdXJyZW50IHdpZHRoIG9mIHBhZ2UgaW4gdXNlciB1bml0LgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHc7CgoJLyoqCgkgKiBDdXJyZW50IGhlaWdodCBvZiBwYWdlIGluIHVzZXIgdW5pdC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRoOwoKCS8qKgoJICogTGVmdCBtYXJnaW4uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkbE1hcmdpbjsKCgkvKioKCSAqIFJpZ2h0IG1hcmdpbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRyTWFyZ2luOwoKCS8qKgoJICogQ2VsbCBsZWZ0IG1hcmdpbiAodXNlZCBieSByZWdpb25zKS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRjbE1hcmdpbjsKCgkvKioKCSAqIENlbGwgcmlnaHQgbWFyZ2luICh1c2VkIGJ5IHJlZ2lvbnMpLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNyTWFyZ2luOwoKCS8qKgoJICogVG9wIG1hcmdpbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR0TWFyZ2luOwoKCS8qKgoJICogUGFnZSBicmVhayBtYXJnaW4uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkYk1hcmdpbjsKCgkvKioKCSAqIEFycmF5IG9mIGNlbGwgaW50ZXJuYWwgcGFkZGluZ3MgKCdUJyA9PiB0b3AsICdSJyA9PiByaWdodCwgJ0InID0+IGJvdHRvbSwgJ0wnID0+IGxlZnQpLgoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDMpCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkY2VsbF9wYWRkaW5nID0gYXJyYXkoJ1QnID0+IDAsICdSJyA9PiAwLCAnQicgPT4gMCwgJ0wnID0+IDApOwoKCS8qKgoJICogQXJyYXkgb2YgY2VsbCBtYXJnaW5zICgnVCcgPT4gdG9wLCAnUicgPT4gcmlnaHQsICdCJyA9PiBib3R0b20sICdMJyA9PiBsZWZ0KS4KCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTEwLTA0KQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNlbGxfbWFyZ2luID0gYXJyYXkoJ1QnID0+IDAsICdSJyA9PiAwLCAnQicgPT4gMCwgJ0wnID0+IDApOwoKCS8qKgoJICogQ3VycmVudCBob3Jpem9udGFsIHBvc2l0aW9uIGluIHVzZXIgdW5pdCBmb3IgY2VsbCBwb3NpdGlvbmluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR4OwoKCS8qKgoJICogQ3VycmVudCB2ZXJ0aWNhbCBwb3NpdGlvbiBpbiB1c2VyIHVuaXQgZm9yIGNlbGwgcG9zaXRpb25pbmcuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkeTsKCgkvKioKCSAqIEhlaWdodCBvZiBsYXN0IGNlbGwgcHJpbnRlZC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsYXN0aDsKCgkvKioKCSAqIExpbmUgd2lkdGggaW4gdXNlciB1bml0LgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJExpbmVXaWR0aDsKCgkvKioKCSAqIEFycmF5IG9mIHN0YW5kYXJkIGZvbnQgbmFtZXMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkQ29yZUZvbnRzOwoKCS8qKgoJICogQXJyYXkgb2YgdXNlZCBmb250cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmb250cyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBmb250IGZpbGVzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJEZvbnRGaWxlcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBlbmNvZGluZyBkaWZmZXJlbmNlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRkaWZmcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiB1c2VkIGltYWdlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRpbWFnZXMgPSBhcnJheSgpOwoKCS8qKgoJICogQXJyYXkgb2YgY2FjaGVkIGZpbGVzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNhY2hlZF9maWxlcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBBbm5vdGF0aW9ucyBpbiBwYWdlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRQYWdlQW5ub3RzID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IG9mIGludGVybmFsIGxpbmtzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGxpbmtzID0gYXJyYXkoKTsKCgkvKioKCSAqIEN1cnJlbnQgZm9udCBmYW1pbHkuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkRm9udEZhbWlseTsKCgkvKioKCSAqIEN1cnJlbnQgZm9udCBzdHlsZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRGb250U3R5bGU7CgoJLyoqCgkgKiBDdXJyZW50IGZvbnQgYXNjZW50IChkaXN0YW5jZSBiZXR3ZWVuIGZvbnQgdG9wIGFuZCBiYXNlbGluZSkuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi44LjAwMCAoMjAwNy0wMy0yOSkKCSAqLwoJcHJvdGVjdGVkICRGb250QXNjZW50OwoKCS8qKgoJICogQ3VycmVudCBmb250IGRlc2NlbnQgKGRpc3RhbmNlIGJldHdlZW4gZm9udCBib3R0b20gYW5kIGJhc2VsaW5lKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAyLjguMDAwICgyMDA3LTAzLTI5KQoJICovCglwcm90ZWN0ZWQgJEZvbnREZXNjZW50OwoKCS8qKgoJICogVW5kZXJsaW5pbmcgZmxhZy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR1bmRlcmxpbmU7CgoJLyoqCgkgKiBPdmVybGluaW5nIGZsYWcuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkb3ZlcmxpbmU7CgoJLyoqCgkgKiBDdXJyZW50IGZvbnQgaW5mby4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRDdXJyZW50Rm9udDsKCgkvKioKCSAqIEN1cnJlbnQgZm9udCBzaXplIGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRGb250U2l6ZVB0OwoKCS8qKgoJICogQ3VycmVudCBmb250IHNpemUgaW4gdXNlciB1bml0LgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJEZvbnRTaXplOwoKCS8qKgoJICogQ29tbWFuZHMgZm9yIGRyYXdpbmcgY29sb3IuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkRHJhd0NvbG9yOwoKCS8qKgoJICogQ29tbWFuZHMgZm9yIGZpbGxpbmcgY29sb3IuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkRmlsbENvbG9yOwoKCS8qKgoJICogQ29tbWFuZHMgZm9yIHRleHQgY29sb3IuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkVGV4dENvbG9yOwoKCS8qKgoJICogSW5kaWNhdGVzIHdoZXRoZXIgZmlsbCBhbmQgdGV4dCBjb2xvcnMgYXJlIGRpZmZlcmVudC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRDb2xvckZsYWc7CgoJLyoqCgkgKiBBdXRvbWF0aWMgcGFnZSBicmVha2luZy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRBdXRvUGFnZUJyZWFrOwoKCS8qKgoJICogVGhyZXNob2xkIHVzZWQgdG8gdHJpZ2dlciBwYWdlIGJyZWFrcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRQYWdlQnJlYWtUcmlnZ2VyOwoKCS8qKgoJICogRmxhZyBzZXQgd2hlbiBwcm9jZXNzaW5nIHBhZ2UgaGVhZGVyLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJEluSGVhZGVyID0gZmFsc2U7CgoJLyoqCgkgKiBGbGFnIHNldCB3aGVuIHByb2Nlc3NpbmcgcGFnZSBmb290ZXIuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkSW5Gb290ZXIgPSBmYWxzZTsKCgkvKioKCSAqIFpvb20gZGlzcGxheSBtb2RlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJFpvb21Nb2RlOwoKCS8qKgoJICogTGF5b3V0IGRpc3BsYXkgbW9kZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRMYXlvdXRNb2RlOwoKCS8qKgoJICogSWYgdHJ1ZSBzZXQgdGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgaW4gVW5pY29kZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRkb2NpbmZvdW5pY29kZSA9IHRydWU7CgoJLyoqCgkgKiBEb2N1bWVudCB0aXRsZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR0aXRsZSA9ICcnOwoKCS8qKgoJICogRG9jdW1lbnQgc3ViamVjdC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRzdWJqZWN0ID0gJyc7CgoJLyoqCgkgKiBEb2N1bWVudCBhdXRob3IuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkYXV0aG9yID0gJyc7CgoJLyoqCgkgKiBEb2N1bWVudCBrZXl3b3Jkcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRrZXl3b3JkcyA9ICcnOwoKCS8qKgoJICogRG9jdW1lbnQgY3JlYXRvci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRjcmVhdG9yID0gJyc7CgoJLyoqCgkgKiBTdGFydGluZyBwYWdlIG51bWJlci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRzdGFydGluZ19wYWdlX251bWJlciA9IDE7CgoJLyoqCgkgKiBUaGUgcmlnaHQtYm90dG9tIChvciBsZWZ0LWJvdHRvbSBmb3IgUlRMKSBjb3JuZXIgWCBjb29yZGluYXRlIG9mIGxhc3QgaW5zZXJ0ZWQgaW1hZ2UuCgkgKiBAc2luY2UgMjAwMi0wNy0zMQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRpbWdfcmJfeDsKCgkvKioKCSAqIFRoZSByaWdodC1ib3R0b20gY29ybmVyIFkgY29vcmRpbmF0ZSBvZiBsYXN0IGluc2VydGVkIGltYWdlLgoJICogQHNpbmNlIDIwMDItMDctMzEKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaW1nX3JiX3k7CgoJLyoqCgkgKiBBZGp1c3RpbmcgZmFjdG9yIHRvIGNvbnZlcnQgcGl4ZWxzIHRvIHVzZXIgdW5pdHMuCgkgKiBAc2luY2UgMjAwNC0wNi0xNAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRpbWdzY2FsZSA9IDE7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgc2V0IHRvIHRydWUgd2hlbiB0aGUgaW5wdXQgdGV4dCBpcyB1bmljb2RlIChyZXF1aXJlIHVuaWNvZGUgZm9udHMpLgoJICogQHNpbmNlIDIwMDUtMDEtMDIKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaXN1bmljb2RlID0gZmFsc2U7CgoJLyoqCgkgKiBQREYgdmVyc2lvbi4KCSAqIEBzaW5jZSAxLjUuMwoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJFBERlZlcnNpb24gPSAnMS43JzsKCgkvKioKCSAqIElEIG9mIHRoZSBzdG9yZWQgZGVmYXVsdCBoZWFkZXIgdGVtcGxhdGUgKC0xID0gbm90IHNldCkuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX3hvYmppZCA9IGZhbHNlOwoKCS8qKgoJICogSWYgdHJ1ZSByZXNldCB0aGUgSGVhZGVyIFhvYmplY3QgdGVtcGxhdGUgYXQgZWFjaCBwYWdlCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX3hvYmpfYXV0b3Jlc2V0ID0gZmFsc2U7CgoJLyoqCgkgKiBNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gaGVhZGVyIGFuZCB0b3AgcGFnZSBtYXJnaW4uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX21hcmdpbjsKCgkvKioKCSAqIE1pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiBmb290ZXIgYW5kIGJvdHRvbSBwYWdlIG1hcmdpbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmb290ZXJfbWFyZ2luOwoKCS8qKgoJICogT3JpZ2luYWwgbGVmdCBtYXJnaW4gdmFsdWUuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMS41My4wLlRDMDEzCgkgKi8KCXByb3RlY3RlZCAkb3JpZ2luYWxfbE1hcmdpbjsKCgkvKioKCSAqIE9yaWdpbmFsIHJpZ2h0IG1hcmdpbiB2YWx1ZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAxLjUzLjAuVEMwMTMKCSAqLwoJcHJvdGVjdGVkICRvcmlnaW5hbF9yTWFyZ2luOwoKCS8qKgoJICogRGVmYXVsdCBmb250IHVzZWQgb24gcGFnZSBoZWFkZXIuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX2ZvbnQ7CgoJLyoqCgkgKiBEZWZhdWx0IGZvbnQgdXNlZCBvbiBwYWdlIGZvb3Rlci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmb290ZXJfZm9udDsKCgkvKioKCSAqIExhbmd1YWdlIHRlbXBsYXRlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsOwoKCS8qKgoJICogQmFyY29kZSB0byBwcmludCBvbiBwYWdlIGZvb3RlciAob25seSBpZiBzZXQpLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGJhcmNvZGUgPSBmYWxzZTsKCgkvKioKCSAqIEJvb2xlYW4gZmxhZyB0byBwcmludC9oaWRlIHBhZ2UgaGVhZGVyLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJHByaW50X2hlYWRlciA9IHRydWU7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgdG8gcHJpbnQvaGlkZSBwYWdlIGZvb3Rlci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRwcmludF9mb290ZXIgPSB0cnVlOwoKCS8qKgoJICogSGVhZGVyIGltYWdlIGxvZ28uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX2xvZ28gPSAnJzsKCgkvKioKCSAqIFdpZHRoIG9mIGhlYWRlciBpbWFnZSBsb2dvIGluIHVzZXIgdW5pdHMuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkaGVhZGVyX2xvZ29fd2lkdGggPSAzMDsKCgkvKioKCSAqIFRpdGxlIHRvIGJlIHByaW50ZWQgb24gZGVmYXVsdCBwYWdlIGhlYWRlci4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRoZWFkZXJfdGl0bGUgPSAnJzsKCgkvKioKCSAqIFN0cmluZyB0byBwcmluZyBvbiBwYWdlIGhlYWRlciBhZnRlciB0aXRsZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRoZWFkZXJfc3RyaW5nID0gJyc7CgoJLyoqCgkgKiBDb2xvciBmb3IgaGVhZGVyIHRleHQgKFJHQiBhcnJheSkuCgkgKiBAc2luY2UgNS45LjE3NCAoMjAxMi0wNy0yNSkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRoZWFkZXJfdGV4dF9jb2xvciA9IGFycmF5KDAsMCwwKTsKCgkvKioKCSAqIENvbG9yIGZvciBoZWFkZXIgbGluZSAoUkdCIGFycmF5KS4KCSAqIEBzaW5jZSA1LjkuMTc0ICgyMDEyLTA3LTI1KQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGhlYWRlcl9saW5lX2NvbG9yID0gYXJyYXkoMCwwLDApOwoKCS8qKgoJICogQ29sb3IgZm9yIGZvb3RlciB0ZXh0IChSR0IgYXJyYXkpLgoJICogQHNpbmNlIDUuOS4xNzQgKDIwMTItMDctMjUpCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZm9vdGVyX3RleHRfY29sb3IgPSBhcnJheSgwLDAsMCk7CgoJLyoqCgkgKiBDb2xvciBmb3IgZm9vdGVyIGxpbmUgKFJHQiBhcnJheSkuCgkgKiBAc2luY2UgNS45LjE3NCAoMjAxMi0wNy0yNSkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRmb290ZXJfbGluZV9jb2xvciA9IGFycmF5KDAsMCwwKTsKCgkvKioKCSAqIFRleHQgc2hhZG93IGRhdGEgYXJyYXkuCgkgKiBAc2luY2UgNS45LjE3NCAoMjAxMi0wNy0yNSkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR0eHRzaGFkb3cgPSBhcnJheSgnZW5hYmxlZCc9PmZhbHNlLCAnZGVwdGhfdyc9PjAsICdkZXB0aF9oJz0+MCwgJ2NvbG9yJz0+ZmFsc2UsICdvcGFjaXR5Jz0+MSwgJ2JsZW5kX21vZGUnPT4nTm9ybWFsJyk7CgoJLyoqCgkgKiBEZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zIGZvciBodG1sIHRhYmxlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGRlZmF1bHRfdGFibGVfY29sdW1ucyA9IDQ7CgoJLy8gdmFyaWFibGVzIGZvciBodG1sIHBhcnNlcgoKCS8qKgoJICogSFRNTCBQQVJTRVI6IGFycmF5IHRvIHN0b3JlIGN1cnJlbnQgbGluayBhbmQgcmVuZGVyaW5nIHN0eWxlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRIUkVGID0gYXJyYXkoKTsKCgkvKioKCSAqIExpc3Qgb2YgYXZhaWxhYmxlIGZvbnRzIG9uIGZpbGVzeXN0ZW0uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkZm9udGxpc3QgPSBhcnJheSgpOwoKCS8qKgoJICogQ3VycmVudCBmb3JlZ3JvdW5kIGNvbG9yLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGZnY29sb3I7CgoJLyoqCgkgKiBIVE1MIFBBUlNFUjogYXJyYXkgb2YgYm9vbGVhbiB2YWx1ZXMsIHRydWUgaW4gY2FzZSBvZiBvcmRlcmVkIGxpc3QgKE9MKSwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGxpc3RvcmRlcmVkID0gYXJyYXkoKTsKCgkvKioKCSAqIEhUTUwgUEFSU0VSOiBhcnJheSBjb3VudCBsaXN0IGl0ZW1zIG9uIG5lc3RlZCBsaXN0cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsaXN0Y291bnQgPSBhcnJheSgpOwoKCS8qKgoJICogSFRNTCBQQVJTRVI6IGN1cnJlbnQgbGlzdCBuZXN0aW5nIGxldmVsLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGxpc3RudW0gPSAwOwoKCS8qKgoJICogSFRNTCBQQVJTRVI6IGluZGVudCBhbW91bnQgZm9yIGxpc3RzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGxpc3RpbmRlbnQgPSAwOwoKCS8qKgoJICogSFRNTCBQQVJTRVI6IGN1cnJlbnQgbGlzdCBpbmRlbnRlbnRhdGlvbiBsZXZlbC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICRsaXN0aW5kZW50bGV2ZWwgPSAwOwoKCS8qKgoJICogQ3VycmVudCBiYWNrZ3JvdW5kIGNvbG9yLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGJnY29sb3I7CgoJLyoqCgkgKiBUZW1wb3JhcnkgZm9udCBzaXplIGluIHBvaW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR0ZW1wZm9udHNpemUgPSAxMDsKCgkvKioKCSAqIFNwYWNlciBzdHJpbmcgZm9yIExJIHRhZ3MuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkbGlzcGFjZXIgPSAnJzsKCgkvKioKCSAqIERlZmF1bHQgZW5jb2RpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMS41My4wLlRDMDEwCgkgKi8KCXByb3RlY3RlZCAkZW5jb2RpbmcgPSAnVVRGLTgnOwoKCS8qKgoJICogUEhQIGludGVybmFsIGVuY29kaW5nLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDEuNTMuMC5UQzAxNgoJICovCglwcm90ZWN0ZWQgJGludGVybmFsX2VuY29kaW5nOwoKCS8qKgoJICogQm9vbGVhbiBmbGFnIHRvIGluZGljYXRlIGlmIHRoZSBkb2N1bWVudCBsYW5ndWFnZSBpcyBSaWdodC1Uby1MZWZ0LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAKCSAqLwoJcHJvdGVjdGVkICRydGwgPSBmYWxzZTsKCgkvKioKCSAqIEJvb2xlYW4gZmxhZyB1c2VkIHRvIGZvcmNlIFJUTCBvciBMVFIgc3RyaW5nIGRpcmVjdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAyLjAuMDAwCgkgKi8KCXByb3RlY3RlZCAkdG1wcnRsID0gZmFsc2U7CgoJLy8gLS0tIFZhcmlhYmxlcyB1c2VkIGZvciBkb2N1bWVudCBlbmNyeXB0aW9uOgoKCS8qKgoJICogSUJvb2xlYW4gZmxhZyBpbmRpY2F0aW5nIHdoZXRoZXIgZG9jdW1lbnQgaXMgcHJvdGVjdGVkLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKi8KCXByb3RlY3RlZCAkZW5jcnlwdGVkOwoKCS8qKgoJICogQXJyYXkgY29udGFpbmluZyBlbmNyeXB0aW9uIHNldHRpbmdzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTEpCgkgKi8KCXByb3RlY3RlZCAkZW5jcnlwdGRhdGEgPSBhcnJheSgpOwoKCS8qKgoJICogTGFzdCBSQzQga2V5IGVuY3J5cHRlZCAoY2FjaGVkIGZvciBvcHRpbWlzYXRpb24pLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKi8KCXByb3RlY3RlZCAkbGFzdF9lbmNfa2V5OwoKCS8qKgoJICogTGFzdCBSQzQgY29tcHV0ZWQga2V5LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKi8KCXByb3RlY3RlZCAkbGFzdF9lbmNfa2V5X2M7CgoJLyoqCgkgKiBGaWxlIElEICh1c2VkIG9uIGRvY3VtZW50IHRyYWlsZXIpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTIpCgkgKi8KCXByb3RlY3RlZCAkZmlsZV9pZDsKCgkvLyAtLS0gYm9va21hcmsgLS0tCgoJLyoqCgkgKiBPdXRsaW5lcyBmb3IgYm9va21hcmsuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMiAoMjAwOC0wMi0xMikKCSAqLwoJcHJvdGVjdGVkICRvdXRsaW5lcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBPdXRsaW5lIHJvb3QgZm9yIGJvb2ttYXJrLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMS4wMDIgKDIwMDgtMDItMTIpCgkgKi8KCXByb3RlY3RlZCAkT3V0bGluZVJvb3Q7CgoJLy8gLS0tIGphdmFzY3JpcHQgYW5kIGZvcm0gLS0tCgoJLyoqCgkgKiBKYXZhc2NyaXB0IGNvZGUuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMiAoMjAwOC0wMi0xMikKCSAqLwoJcHJvdGVjdGVkICRqYXZhc2NyaXB0ID0gJyc7CgoJLyoqCgkgKiBKYXZhc2NyaXB0IGNvdW50ZXIuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMiAoMjAwOC0wMi0xMikKCSAqLwoJcHJvdGVjdGVkICRuX2pzOwoKCS8qKgoJICogbGluZSB0aHJvdWdoIHN0YXRlCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi44LjAwMCAoMjAwOC0wMy0xOSkKCSAqLwoJcHJvdGVjdGVkICRsaW5ldGhyb3VnaDsKCgkvKioKCSAqIEFycmF5IHdpdGggYWRkaXRpb25hbCBkb2N1bWVudC13aWRlIHVzYWdlIHJpZ2h0cyBmb3IgdGhlIGRvY3VtZW50LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOC4wMTQgKDIwMTAtMDgtMjMpCgkgKi8KCXByb3RlY3RlZCAkdXIgPSBhcnJheSgpOwoKCS8qKgoJICogRFBJIChEb3QgUGVyIEluY2gpIERvY3VtZW50IFJlc29sdXRpb24gKGRvIG5vdCBjaGFuZ2UpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXByb3RlY3RlZCAkZHBpID0gNzI7CgoJLyoqCgkgKiBBcnJheSBvZiBwYWdlIG51bWJlcnMgd2VyZSBhIG5ldyBwYWdlIGdyb3VwIHdhcyBzdGFydGVkICh0aGUgcGFnZSBudW1iZXJzIGFyZSB0aGUga2V5cyBvZiB0aGUgYXJyYXkpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXByb3RlY3RlZCAkbmV3cGFnZWdyb3VwID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IHRoYXQgY29udGFpbnMgdGhlIG51bWJlciBvZiBwYWdlcyBpbiBlYWNoIHBhZ2UgZ3JvdXAuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMy4wLjAwMCAoMjAwOC0wMy0yNykKCSAqLwoJcHJvdGVjdGVkICRwYWdlZ3JvdXBzID0gYXJyYXkoKTsKCgkvKioKCSAqIEN1cnJlbnQgcGFnZSBncm91cCBudW1iZXIuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMy4wLjAwMCAoMjAwOC0wMy0yNykKCSAqLwoJcHJvdGVjdGVkICRjdXJycGFnZWdyb3VwID0gMDsKCgkvKioKCSAqIEFycmF5IG9mIHRyYW5zcGFyZW5jeSBvYmplY3RzIGFuZCBwYXJhbWV0ZXJzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXByb3RlY3RlZCAkZXh0Z3N0YXRlczsKCgkvKioKCSAqIFNldCB0aGUgZGVmYXVsdCBKUEVHIGNvbXByZXNzaW9uIHF1YWxpdHkgKDEtMTAwKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjAuMDAwICgyMDA4LTAzLTI3KQoJICovCglwcm90ZWN0ZWQgJGpwZWdfcXVhbGl0eTsKCgkvKioKCSAqIERlZmF1bHQgY2VsbCBoZWlnaHQgcmF0aW8uCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMy4wLjAxNCAoMjAwOC0wNS0yMykKCSAqLwoJcHJvdGVjdGVkICRjZWxsX2hlaWdodF9yYXRpbyA9IEtfQ0VMTF9IRUlHSFRfUkFUSU87CgoJLyoqCgkgKiBQREYgdmlld2VyIHByZWZlcmVuY2VzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKi8KCXByb3RlY3RlZCAkdmlld2VyX3ByZWZlcmVuY2VzOwoKCS8qKgoJICogQSBuYW1lIG9iamVjdCBzcGVjaWZ5aW5nIGhvdyB0aGUgZG9jdW1lbnQgc2hvdWxkIGJlIGRpc3BsYXllZCB3aGVuIG9wZW5lZC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjEuMDAwICgyMDA4LTA2LTA5KQoJICovCglwcm90ZWN0ZWQgJFBhZ2VNb2RlOwoKCS8qKgoJICogQXJyYXkgZm9yIHN0b3JpbmcgZ3JhZGllbnQgaW5mb3JtYXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0wOSkKCSAqLwoJcHJvdGVjdGVkICRncmFkaWVudHMgPSBhcnJheSgpOwoKCS8qKgoJICogQXJyYXkgdXNlZCB0byBzdG9yZSBwb3NpdGlvbnMgaW5zaWRlIHRoZSBwYWdlcyBidWZmZXIgKGtleXMgYXJlIHRoZSBwYWdlIG51bWJlcnMpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMi4wMDAgKDIwMDgtMDYtMjYpCgkgKi8KCXByb3RlY3RlZCAkaW50bXJrID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IHVzZWQgdG8gc3RvcmUgcG9zaXRpb25zIGluc2lkZSB0aGUgcGFnZXMgYnVmZmVyIChrZXlzIGFyZSB0aGUgcGFnZSBudW1iZXJzKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjcuMDAwICgyMDEwLTA4LTAzKQoJICovCglwcm90ZWN0ZWQgJGJvcmRlcm1yayA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSB1c2VkIHRvIHN0b3JlIHBhZ2UgcG9zaXRpb25zIHRvIHRyYWNrIGVtcHR5IHBhZ2VzIChrZXlzIGFyZSB0aGUgcGFnZSBudW1iZXJzKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjguMDA3ICgyMDEwLTA4LTE4KQoJICovCglwcm90ZWN0ZWQgJGVtcHR5cGFnZW1yayA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSB1c2VkIHRvIHN0b3JlIGNvbnRlbnQgcG9zaXRpb25zIGluc2lkZSB0aGUgcGFnZXMgYnVmZmVyIChrZXlzIGFyZSB0aGUgcGFnZSBudW1iZXJzKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjYuMDIxICgyMDA5LTA3LTIwKQoJICovCglwcm90ZWN0ZWQgJGNudG1yayA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSB1c2VkIHRvIHN0b3JlIGZvb3RlciBwb3NpdGlvbnMgb2YgZWFjaCBwYWdlLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMi4wMDAgKDIwMDgtMDctMDEpCgkgKi8KCXByb3RlY3RlZCAkZm9vdGVycG9zID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IHVzZWQgdG8gc3RvcmUgZm9vdGVyIGxlbmd0aCBvZiBlYWNoIHBhZ2UuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAxNCAoMjAwOC0wNy0yOSkKCSAqLwoJcHJvdGVjdGVkICRmb290ZXJsZW4gPSBhcnJheSgpOwoKCS8qKgoJICogQm9vbGVhbiBmbGFnIHRvIGluZGljYXRlIGlmIGEgbmV3IGxpbmUgaXMgY3JlYXRlZC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA3LTAxKQoJICovCglwcm90ZWN0ZWQgJG5ld2xpbmUgPSB0cnVlOwoKCS8qKgoJICogRW5kIHBvc2l0aW9uIG9mIHRoZSBsYXRlc3QgaW5zZXJ0ZWQgbGluZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA3LTAxKQoJICovCglwcm90ZWN0ZWQgJGVuZGxpbmV4ID0gMDsKCgkvKioKCSAqIFBERiBzdHJpbmcgZm9yIHdpZHRoIHZhbHVlIG9mIHRoZSBsYXN0IGxpbmUuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAwNiAoMjAwOC0wNy0xNikKCSAqLwoJcHJvdGVjdGVkICRsaW5lc3R5bGVXaWR0aCA9ICcnOwoKCS8qKgoJICogUERGIHN0cmluZyBmb3IgQ0FQIHZhbHVlIG9mIHRoZSBsYXN0IGxpbmUuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAwNiAoMjAwOC0wNy0xNikKCSAqLwoJcHJvdGVjdGVkICRsaW5lc3R5bGVDYXAgPSAnMCBKJzsKCgkvKioKCSAqIFBERiBzdHJpbmcgZm9yIGpvaW4gdmFsdWUgb2YgdGhlIGxhc3QgbGluZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjAuMDA2ICgyMDA4LTA3LTE2KQoJICovCglwcm90ZWN0ZWQgJGxpbmVzdHlsZUpvaW4gPSAnMCBqJzsKCgkvKioKCSAqIFBERiBzdHJpbmcgZm9yIGRhc2ggdmFsdWUgb2YgdGhlIGxhc3QgbGluZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjAuMDA2ICgyMDA4LTA3LTE2KQoJICovCglwcm90ZWN0ZWQgJGxpbmVzdHlsZURhc2ggPSAnW10gMCBkJzsKCgkvKioKCSAqIEJvb2xlYW4gZmxhZyB0byBpbmRpY2F0ZSBpZiBtYXJrZWQtY29udGVudCBzZXF1ZW5jZSBpcyBvcGVuLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuMC4wMTMgKDIwMDgtMDctMjgpCgkgKi8KCXByb3RlY3RlZCAkb3Blbk1hcmtlZENvbnRlbnQgPSBmYWxzZTsKCgkvKioKCSAqIENvdW50IHRoZSBsYXRlc3QgaW5zZXJ0ZWQgdmVydGljYWwgc3BhY2VzIG9uIEhUTUwuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAyMSAoMjAwOC0wOC0yNCkKCSAqLwoJcHJvdGVjdGVkICRodG1sdnNwYWNlID0gMDsKCgkvKioKCSAqIEFycmF5IG9mIFNwb3QgY29sb3JzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuMC4wMjQgKDIwMDgtMDktMTIpCgkgKi8KCXByb3RlY3RlZCAkc3BvdF9jb2xvcnMgPSBhcnJheSgpOwoKCS8qKgoJICogU3ltYm9sIHVzZWQgZm9yIEhUTUwgdW5vcmRlcmVkIGxpc3QgaXRlbXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAyOCAoMjAwOC0wOS0yNikKCSAqLwoJcHJvdGVjdGVkICRsaXN5bWJvbCA9ICcnOwoKCS8qKgoJICogU3RyaW5nIHVzZWQgdG8gbWFyayB0aGUgYmVnaW5uaW5nIGFuZCBlbmQgb2YgRVBTIGltYWdlIGJsb2Nrcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjEuMDAwICgyMDA4LTEwLTE4KQoJICovCglwcm90ZWN0ZWQgJGVwc21hcmtlciA9ICd4IyEjRVBTIyEjeCc7CgoJLyoqCgkgKiBBcnJheSBvZiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXguCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4yLjAwMCAoMjAwOC0xMC0yOSkKCSAqLwoJcHJvdGVjdGVkICR0cmFuc2ZtYXRyaXggPSBhcnJheSgpOwoKCS8qKgoJICogQ3VycmVudCBrZXkgZm9yIHRyYW5zZm9ybWF0aW9uIG1hdHJpeC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDA1ICgyMDA5LTA5LTE3KQoJICovCglwcm90ZWN0ZWQgJHRyYW5zZm1hdHJpeF9rZXkgPSAwOwoKCS8qKgoJICogQm9va2xldCBtb2RlIGZvciBkb3VibGUtc2lkZWQgcGFnZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4yLjAwMCAoMjAwOC0xMC0yOSkKCSAqLwoJcHJvdGVjdGVkICRib29rbGV0ID0gZmFsc2U7CgoJLyoqCgkgKiBFcHNpbG9uIHZhbHVlIHVzZWQgZm9yIGZsb2F0IGNhbGN1bGF0aW9ucy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjIuMDAwICgyMDA4LTEwLTI5KQoJICovCglwcm90ZWN0ZWQgJGZlcHMgPSAwLjAwNTsKCgkvKioKCSAqIEFycmF5IHVzZWQgZm9yIGN1c3RvbSB2ZXJ0aWNhbCBzcGFjZXMgZm9yIEhUTUwgdGFncy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjIuMDAxICgyMDA4LTEwLTMwKQoJICovCglwcm90ZWN0ZWQgJHRhZ3ZzcGFjZXMgPSBhcnJheSgpOwoKCS8qKgoJICogSFRNTCBQQVJTRVI6IGN1c3RvbSBpbmRlbnQgYW1vdW50IGZvciBsaXN0cy4gTmVnYXRpdmUgdmFsdWUgbWVhbnMgZGlzYWJsZWQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4yLjAwNyAoMjAwOC0xMS0xMikKCSAqLwoJcHJvdGVjdGVkICRjdXN0b21saXN0aW5kZW50ID0gLTE7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGJvcmRlciBvZiB0aGUgY2VsbCBzaWRlcyB0aGF0IGNyb3NzIHRoZSBwYWdlIHNob3VsZCBiZSByZW1vdmVkLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuMi4wMTAgKDIwMDgtMTEtMTQpCgkgKi8KCXByb3RlY3RlZCAkb3BlbmNlbGwgPSB0cnVlOwoKCS8qKgoJICogQXJyYXkgb2YgZmlsZXMgdG8gZW1iZWRkLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNC4wMDAgKDIwMDgtMTItMDcpCgkgKi8KCXByb3RlY3RlZCAkZW1iZWRkZWRmaWxlcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgdG8gaW5kaWNhdGUgaWYgd2UgYXJlIGluc2lkZSBhIFBSRSB0YWcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC40LjAwMSAoMjAwOC0xMi0wOCkKCSAqLwoJcHJvdGVjdGVkICRwcmVtb2RlID0gZmFsc2U7CgoJLyoqCgkgKiBBcnJheSB1c2VkIHRvIHN0b3JlIHBvc2l0aW9ucyBvZiBncmFwaGljcyB0cmFuc2Zvcm1hdGlvbiBibG9ja3MgaW5zaWRlIHRoZSBwYWdlIGJ1ZmZlci4KCSAqIGtleXMgYXJlIHRoZSBwYWdlIG51bWJlcnMKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjQuMDAyICgyMDA4LTEyLTA5KQoJICovCglwcm90ZWN0ZWQgJHRyYW5zZm1yayA9IGFycmF5KCk7CgoJLyoqCgkgKiBEZWZhdWx0IGNvbG9yIGZvciBodG1sIGxpbmtzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNC4wMDMgKDIwMDgtMTItMDkpCgkgKi8KCXByb3RlY3RlZCAkaHRtbExpbmtDb2xvckFycmF5ID0gYXJyYXkoMCwgMCwgMjU1KTsKCgkvKioKCSAqIERlZmF1bHQgZm9udCBzdHlsZSB0byBhZGQgdG8gaHRtbCBsaW5rcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjQuMDAzICgyMDA4LTEyLTA5KQoJICovCglwcm90ZWN0ZWQgJGh0bWxMaW5rRm9udFN0eWxlID0gJ1UnOwoKCS8qKgoJICogQ291bnRzIHRoZSBudW1iZXIgb2YgcGFnZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkICRudW1wYWdlcyA9IDA7CgoJLyoqCgkgKiBBcnJheSBjb250YWluaW5nIHBhZ2UgbGVuZ3RocyBpbiBieXRlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICovCglwcm90ZWN0ZWQgJHBhZ2VsZW4gPSBhcnJheSgpOwoKCS8qKgoJICogQ291bnRzIHRoZSBudW1iZXIgb2YgcGFnZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkICRudW1pbWFnZXMgPSAwOwoKCS8qKgoJICogU3RvcmUgdGhlIGltYWdlIGtleXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkICRpbWFnZWtleXMgPSBhcnJheSgpOwoKCS8qKgoJICogTGVuZ3RoIG9mIHRoZSBidWZmZXIgaW4gYnl0ZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkICRidWZmZXJsZW4gPSAwOwoKCS8qKgoJICogSWYgdHJ1ZSBlbmFibGVzIGRpc2sgY2FjaGluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICovCglwcm90ZWN0ZWQgJGRpc2tjYWNoZSA9IGZhbHNlOwoKCS8qKgoJICogQ291bnRzIHRoZSBudW1iZXIgb2YgZm9udHMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOS0wMS0wMikKCSAqLwoJcHJvdGVjdGVkICRudW1mb250cyA9IDA7CgoJLyoqCgkgKiBTdG9yZSB0aGUgZm9udCBrZXlzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNS4wMDAgKDIwMDktMDEtMDIpCgkgKi8KCXByb3RlY3RlZCAkZm9udGtleXMgPSBhcnJheSgpOwoKCS8qKgoJICogU3RvcmUgdGhlIGZvbnQgb2JqZWN0IElEcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDAxICgyMDA5LTA5LTA5KQoJICovCglwcm90ZWN0ZWQgJGZvbnRfb2JqX2lkcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBTdG9yZSB0aGUgZmFnZSBzdGF0dXMgKHRydWUgd2hlbiBvcGVuZWQsIGZhbHNlIHdoZW4gY2xvc2VkKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA5LTAxLTAyKQoJICovCglwcm90ZWN0ZWQgJHBhZ2VvcGVuID0gYXJyYXkoKTsKCgkvKioKCSAqIERlZmF1bHQgbW9ub3NwYWNlIGZvbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAyNSAoMjAwOS0wMy0xMCkKCSAqLwoJcHJvdGVjdGVkICRkZWZhdWx0X21vbm9zcGFjZWRfZm9udCA9ICdjb3VyaWVyJzsKCgkvKioKCSAqIENsb25lZCBjb3B5IG9mIHRoZSBjdXJyZW50IGNsYXNzIG9iamVjdC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDI5ICgyMDA5LTAzLTE5KQoJICovCglwcm90ZWN0ZWQgJG9iamNvcHk7CgoJLyoqCgkgKiBBcnJheSB1c2VkIHRvIHN0b3JlIHRoZSBsZW5ndGhzIG9mIGNhY2hlIGZpbGVzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNS4wMjkgKDIwMDktMDMtMTkpCgkgKi8KCXByb3RlY3RlZCAkY2FjaGVfZmlsZV9sZW5ndGggPSBhcnJheSgpOwoKCS8qKgoJICogVGFibGUgaGVhZGVyIGNvbnRlbnQgdG8gYmUgcmVwZWF0ZWQgb24gZWFjaCBuZXcgcGFnZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDMwICgyMDA5LTAzLTIwKQoJICovCglwcm90ZWN0ZWQgJHRoZWFkID0gJyc7CgoJLyoqCgkgKiBNYXJnaW5zIHVzZWQgZm9yIHRhYmxlIGhlYWRlci4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDMwICgyMDA5LTAzLTIwKQoJICovCglwcm90ZWN0ZWQgJHRoZWFkTWFyZ2lucyA9IGFycmF5KCk7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgdG8gZW5hYmxlIGRvY3VtZW50IGRpZ2l0YWwgc2lnbmF0dXJlLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNi4wMDUgKDIwMDktMDQtMjQpCgkgKi8KCXByb3RlY3RlZCAkc2lnbiA9IGZhbHNlOwoKCS8qKgoJICogRGlnaXRhbCBzaWduYXR1cmUgZGF0YS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjYuMDA1ICgyMDA5LTA0LTI0KQoJICovCglwcm90ZWN0ZWQgJHNpZ25hdHVyZV9kYXRhID0gYXJyYXkoKTsKCgkvKioKCSAqIERpZ2l0YWwgc2lnbmF0dXJlIG1heCBsZW5ndGguCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC42LjAwNSAoMjAwOS0wNC0yNCkKCSAqLwoJcHJvdGVjdGVkICRzaWduYXR1cmVfbWF4X2xlbmd0aCA9IDExNzQyOwoKCS8qKgoJICogRGF0YSBmb3IgZGlnaXRhbCBzaWduYXR1cmUgYXBwZWFyYW5jZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjMuMDExICgyMDEwLTA2LTE2KQoJICovCglwcm90ZWN0ZWQgJHNpZ25hdHVyZV9hcHBlYXJhbmNlID0gYXJyYXkoJ3BhZ2UnID0+IDEsICdyZWN0JyA9PiAnMCAwIDAgMCcpOwoKCS8qKgoJICogQXJyYXkgb2YgZW1wdHkgZGlnaXRhbCBzaWduYXR1cmUgYXBwZWFyYW5jZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjEwMSAoMjAxMS0wNy0wNikKCSAqLwoJcHJvdGVjdGVkICRlbXB0eV9zaWduYXR1cmVfYXBwZWFyYW5jZSA9IGFycmF5KCk7CgoJLyoqCgkgKiBSZWd1bGFyIGV4cHJlc3Npb24gdXNlZCB0byBmaW5kIGJsYW5rIGNoYXJhY3RlcnMgKHJlcXVpcmVkIGZvciB3b3JkLXdyYXBwaW5nKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjYuMDA2ICgyMDA5LTA0LTI4KQoJICovCglwcm90ZWN0ZWQgJHJlX3NwYWNlcyA9ICcvW15cU1x4YTBdLyc7CgoJLyoqCgkgKiBBcnJheSBvZiAkcmVfc3BhY2VzIHBhcnRzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuNS4wMTEgKDIwMTAtMDctMDkpCgkgKi8KCXByb3RlY3RlZCAkcmVfc3BhY2UgPSBhcnJheSgncCcgPT4gJ1teXFNceGEwXScsICdtJyA9PiAnJyk7CgoJLyoqCgkgKiBEaWdpdGFsIHNpZ25hdHVyZSBvYmplY3QgSUQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC42LjAyMiAoMjAwOS0wNi0yMykKCSAqLwoJcHJvdGVjdGVkICRzaWdfb2JqX2lkID0gMDsKCgkvKioKCSAqIElEIG9mIHBhZ2Ugb2JqZWN0cy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjcuMDAwICgyMDA5LTA4LTI5KQoJICovCglwcm90ZWN0ZWQgJHBhZ2Vfb2JqX2lkID0gYXJyYXkoKTsKCgkvKioKCSAqIExpc3Qgb2YgZm9ybSBhbm5vdGF0aW9ucyBJRHMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwMCAoMjAwOS0wOS0wNykKCSAqLwoJcHJvdGVjdGVkICRmb3JtX29ial9pZCA9IGFycmF5KCk7CgoJLyoqCgkgKiBEZWFmdWx0IEphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLiBBbm5vdGF0aW9uIG9wdGlvbnMgY2FuIGJlIGRpcmVjdGx5IHNwZWNpZmllZCB1c2luZyB0aGUgJ2FvcHQnIGVudHJ5LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuOC4wMDAgKDIwMDktMDktMDcpCgkgKi8KCXByb3RlY3RlZCAkZGVmYXVsdF9mb3JtX3Byb3AgPSBhcnJheSgnbGluZVdpZHRoJz0+MSwgJ2JvcmRlclN0eWxlJz0+J3NvbGlkJywgJ2ZpbGxDb2xvcic9PmFycmF5KDI1NSwgMjU1LCAyNTUpLCAnc3Ryb2tlQ29sb3InPT5hcnJheSgxMjgsIDEyOCwgMTI4KSk7CgoJLyoqCgkgKiBKYXZhc2NyaXB0IG9iamVjdHMgYXJyYXkuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwMCAoMjAwOS0wOS0wNykKCSAqLwoJcHJvdGVjdGVkICRqc19vYmplY3RzID0gYXJyYXkoKTsKCgkvKioKCSAqIEN1cnJlbnQgZm9ybSBhY3Rpb24gKHVzZWQgZHVyaW5nIFhIVE1MIHJlbmRlcmluZykuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwMCAoMjAwOS0wOS0wNykKCSAqLwoJcHJvdGVjdGVkICRmb3JtX2FjdGlvbiA9ICcnOwoKCS8qKgoJICogQ3VycmVudCBmb3JtIGVuY3J5cHRpb24gdHlwZSAodXNlZCBkdXJpbmcgWEhUTUwgcmVuZGVyaW5nKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwcm90ZWN0ZWQgJGZvcm1fZW5jdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwoKCS8qKgoJICogQ3VycmVudCBtZXRob2QgdG8gc3VibWl0IGZvcm1zLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuOC4wMDAgKDIwMDktMDktMDcpCgkgKi8KCXByb3RlY3RlZCAkZm9ybV9tb2RlID0gJ3Bvc3QnOwoKCS8qKgoJICogTGlzdCBvZiBmb250cyB1c2VkIG9uIGZvcm0gZmllbGRzIChmb250bmFtZSA9PiBmb250a2V5KS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDAxICgyMDA5LTA5LTA5KQoJICovCglwcm90ZWN0ZWQgJGFubm90YXRpb25fZm9udHMgPSBhcnJheSgpOwoKCS8qKgoJICogTGlzdCBvZiByYWRpbyBidXR0b25zIHBhcmVudCBvYmplY3RzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuOC4wMDEgKDIwMDktMDktMDkpCgkgKi8KCXByb3RlY3RlZCAkcmFkaW9idXR0b25fZ3JvdXBzID0gYXJyYXkoKTsKCgkvKioKCSAqIExpc3Qgb2YgcmFkaW8gZ3JvdXAgb2JqZWN0cyBJRHMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwMSAoMjAwOS0wOS0wOSkKCSAqLwoJcHJvdGVjdGVkICRyYWRpb19ncm91cHMgPSBhcnJheSgpOwoKCS8qKgoJICogVGV4dCBpbmRlbnRhdGlvbiB2YWx1ZSAodXNlZCBmb3IgdGV4dC1pbmRlbnQgQ1NTIGF0dHJpYnV0ZSkuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwNiAoMjAwOS0wOS0yMykKCSAqLwoJcHJvdGVjdGVkICR0ZXh0aW5kZW50ID0gMDsKCgkvKioKCSAqIFN0b3JlIHBhZ2UgbnVtYmVyIHdoZW4gc3RhcnRUcmFuc2FjdGlvbigpIGlzIGNhbGxlZC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDA2ICgyMDA5LTA5LTIzKQoJICovCglwcm90ZWN0ZWQgJHN0YXJ0X3RyYW5zYWN0aW9uX3BhZ2UgPSAwOwoKCS8qKgoJICogU3RvcmUgWSBwb3NpdGlvbiB3aGVuIHN0YXJ0VHJhbnNhY3Rpb24oKSBpcyBjYWxsZWQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC45LjAwMSAoMjAxMC0wMy0yOCkKCSAqLwoJcHJvdGVjdGVkICRzdGFydF90cmFuc2FjdGlvbl95ID0gMDsKCgkvKioKCSAqIFRydWUgd2hlbiB3ZSBhcmUgcHJpbnRpbmcgdGhlIHRoZWFkIHNlY3Rpb24gb24gYSBuZXcgcGFnZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDI3ICgyMDEwLTAxLTI1KQoJICovCglwcm90ZWN0ZWQgJGludGhlYWQgPSBmYWxzZTsKCgkvKioKCSAqIEFycmF5IG9mIGNvbHVtbiBtZWFzdXJlcyAod2lkdGgsIHNwYWNlLCBzdGFydGluZyBZIHBvc2l0aW9uKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDAxICgyMDEwLTAzLTI4KQoJICovCglwcm90ZWN0ZWQgJGNvbHVtbnMgPSBhcnJheSgpOwoKCS8qKgoJICogTnVtYmVyIG9mIGNvbHVtcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDAxICgyMDEwLTAzLTI4KQoJICovCglwcm90ZWN0ZWQgJG51bV9jb2x1bW5zID0gMTsKCgkvKioKCSAqIEN1cnJlbnQgY29sdW1uIG51bWJlci4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDAxICgyMDEwLTAzLTI4KQoJICovCglwcm90ZWN0ZWQgJGN1cnJlbnRfY29sdW1uID0gMDsKCgkvKioKCSAqIFN0YXJ0aW5nIHBhZ2UgZm9yIGNvbHVtbnMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC45LjAwMSAoMjAxMC0wMy0yOCkKCSAqLwoJcHJvdGVjdGVkICRjb2x1bW5fc3RhcnRfcGFnZSA9IDA7CgoJLyoqCgkgKiBNYXhpbXVtIHBhZ2UgYW5kIGNvbHVtbiBzZWxlY3RlZC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjguMDAwICgyMDEwLTA4LTExKQoJICovCglwcm90ZWN0ZWQgJG1heHNlbGNvbCA9IGFycmF5KCdwYWdlJyA9PiAwLCAnY29sdW1uJyA9PiAwKTsKCgkvKioKCSAqIEFycmF5IG9mOiBYIGRpZmZlcmVuY2UgYmV0d2VlbiB0YWJsZSBjZWxsIHggc3RhcnQgYW5kIHN0YXJ0aW5nIHBhZ2UgbWFyZ2luLCBjZWxsc3BhY2luZywgY2VsbHBhZGRpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS44LjAwMCAoMjAxMC0wOC0xMSkKCSAqLwoJcHJvdGVjdGVkICRjb2x4c2hpZnQgPSBhcnJheSgneCcgPT4gMCwgJ3MnID0+IGFycmF5KCdIJyA9PiAwLCAnVicgPT4gMCksICdwJyA9PiBhcnJheSgnTCcgPT4gMCwgJ1QnID0+IDAsICdSJyA9PiAwLCAnQicgPT4gMCkpOwoKCS8qKgoJICogVGV4dCByZW5kZXJpbmcgbW9kZTogMCA9IEZpbGwgdGV4dDsgMSA9IFN0cm9rZSB0ZXh0OyAyID0gRmlsbCwgdGhlbiBzdHJva2UgdGV4dDsgMyA9IE5laXRoZXIgZmlsbCBub3Igc3Ryb2tlIHRleHQgKGludmlzaWJsZSk7IDQgPSBGaWxsIHRleHQgYW5kIGFkZCB0byBwYXRoIGZvciBjbGlwcGluZzsgNSA9IFN0cm9rZSB0ZXh0IGFuZCBhZGQgdG8gcGF0aCBmb3IgY2xpcHBpbmc7IDYgPSBGaWxsLCB0aGVuIHN0cm9rZSB0ZXh0IGFuZCBhZGQgdG8gcGF0aCBmb3IgY2xpcHBpbmc7IDcgPSBBZGQgdGV4dCB0byBwYXRoIGZvciBjbGlwcGluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDA4ICgyMDEwLTA0LTAzKQoJICovCglwcm90ZWN0ZWQgJHRleHRyZW5kZXJtb2RlID0gMDsKCgkvKioKCSAqIFRleHQgc3Ryb2tlIHdpZHRoIGluIGRvYyB1bml0cy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDA4ICgyMDEwLTA0LTAzKQoJICovCglwcm90ZWN0ZWQgJHRleHRzdHJva2V3aWR0aCA9IDA7CgoJLyoqCgkgKiBDdXJyZW50IHN0cm9rZSBjb2xvci4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDA4ICgyMDEwLTA0LTAzKQoJICovCglwcm90ZWN0ZWQgJHN0cm9rZWNvbG9yOwoKCS8qKgoJICogRGVmYXVsdCB1bml0IG9mIG1lYXN1cmUgZm9yIGRvY3VtZW50LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDQtMjIpCgkgKi8KCXByb3RlY3RlZCAkcGRmdW5pdCA9ICdtbSc7CgoJLyoqCgkgKiBCb29sZWFuIGZsYWcgdHJ1ZSB3aGVuIHdlIGFyZSBvbiBUT0MgKFRhYmxlIE9mIENvbnRlbnQpIHBhZ2UuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkdG9jcGFnZSA9IGZhbHNlOwoKCS8qKgoJICogQm9vbGVhbiBmbGFnOiBpZiB0cnVlIGNvbnZlcnQgdmVjdG9yIGltYWdlcyAoU1ZHLCBFUFMpIHRvIHJhc3RlciBpbWFnZSB1c2luZyBHRCBvciBJbWFnZU1hZ2ljayBsaWJyYXJ5LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDQtMjYpCgkgKi8KCXByb3RlY3RlZCAkcmFzdGVyaXplX3ZlY3Rvcl9pbWFnZXMgPSBmYWxzZTsKCgkvKioKCSAqIEJvb2xlYW4gZmxhZzogaWYgdHJ1ZSBlbmFibGVzIGZvbnQgc3Vic2V0dGluZyBieSBkZWZhdWx0LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMy4wMDIgKDIwMTAtMDYtMDcpCgkgKi8KCXByb3RlY3RlZCAkZm9udF9zdWJzZXR0aW5nID0gdHJ1ZTsKCgkvKioKCSAqIEFycmF5IG9mIGRlZmF1bHQgZ3JhcGhpYyBzZXR0aW5ncy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjUuMDA4ICgyMDEwLTA3LTAyKQoJICovCglwcm90ZWN0ZWQgJGRlZmF1bHRfZ3JhcGhpY192YXJzID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IG9mIFhPYmplY3RzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOC4wMTQgKDIwMTAtMDgtMjMpCgkgKi8KCXByb3RlY3RlZCAkeG9iamVjdHMgPSBhcnJheSgpOwoKCS8qKgoJICogQm9vbGVhbiB2YWx1ZSB0cnVlIHdoZW4gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOC4wMTcgKDIwMTAtMDgtMjQpCgkgKi8KCXByb3RlY3RlZCAkaW54b2JqID0gZmFsc2U7CgoJLyoqCgkgKiBDdXJyZW50IFhPYmplY3QgSUQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS44LjAxNyAoMjAxMC0wOC0yNCkKCSAqLwoJcHJvdGVjdGVkICR4b2JqaWQgPSAnJzsKCgkvKioKCSAqIFBlcmNlbnRhZ2Ugb2YgY2hhcmFjdGVyIHN0cmV0Y2hpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwMCAoMjAxMC0wOS0yOSkKCSAqLwoJcHJvdGVjdGVkICRmb250X3N0cmV0Y2hpbmcgPSAxMDA7CgoJLyoqCgkgKiBJbmNyZWFzZXMgb3IgZGVjcmVhc2VzIHRoZSBzcGFjZSBiZXR3ZWVuIGNoYXJhY3RlcnMgaW4gYSB0ZXh0IGJ5IHRoZSBzcGVjaWZpZWQgYW1vdW50ICh0cmFja2luZykuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwMCAoMjAxMC0wOS0yOSkKCSAqLwoJcHJvdGVjdGVkICRmb250X3NwYWNpbmcgPSAwOwoKCS8qKgoJICogQXJyYXkgb2Ygbm8td3JpdGUgcmVnaW9ucy4KCSAqICgncGFnZScgPT4gcGFnZSBudW1iZXIgb3IgZW1weSBmb3IgY3VycmVudCBwYWdlLCAneHQnID0+IFggdG9wLCAneXQnID0+IFkgdG9wLCAneGInID0+IFggYm90dG9tLCAneWInID0+IFkgYm90dG9tLCAnc2lkZScgPT4gcGFnZSBzaWRlICdMJyA9IGxlZnQgb3IgJ1InID0gcmlnaHQpCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwMyAoMjAxMC0xMC0xNCkKCSAqLwoJcHJvdGVjdGVkICRwYWdlX3JlZ2lvbnMgPSBhcnJheSgpOwoKCS8qKgoJICogQm9vbGVhbiB2YWx1ZSB0cnVlIHdoZW4gcGFnZSByZWdpb24gY2hlY2sgaXMgYWN0aXZlLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJGNoZWNrX3BhZ2VfcmVnaW9ucyA9IHRydWU7CgoJLyoqCgkgKiBBcnJheSBvZiBQREYgbGF5ZXJzIGRhdGEuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjEwMiAoMjAxMS0wNy0xMykKCSAqLwoJcHJvdGVjdGVkICRwZGZsYXllcnMgPSBhcnJheSgpOwoKCS8qKgoJICogQSBkaWN0aW9uYXJ5IG9mIG5hbWVzIGFuZCBjb3JyZXNwb25kaW5nIGRlc3RpbmF0aW9ucyAoRGVzdHMga2V5IG9uIGRvY3VtZW50IENhdGFsb2cpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4wOTcgKDIwMTEtMDYtMjMpCgkgKi8KCXByb3RlY3RlZCAkZGVzdHMgPSBhcnJheSgpOwoKCS8qKgoJICogT2JqZWN0IElEIGZvciBOYW1lZCBEZXN0aW5hdGlvbnMKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjkuMDk3ICgyMDExLTA2LTIzKQoJICovCglwcm90ZWN0ZWQgJG5fZGVzdHM7CgoJLyoqCgkgKiBFbWJlZGRlZCBGaWxlcyBOYW1lcwoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4yMDQgKDIwMTMtMDEtMjMpCgkgKi8KCXByb3RlY3RlZCAkZWZuYW1lcyA9IGFycmF5KCk7CgoJLyoqCgkgKiBEaXJlY3RvcnkgdXNlZCBmb3IgdGhlIGxhc3QgU1ZHIGltYWdlLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDUtMDUpCgkgKi8KCXByb3RlY3RlZCAkc3ZnZGlyID0gJyc7CgoJLyoqCgkgKiAgRGVhZnVsdCB1bml0IG9mIG1lYXN1cmUgZm9yIFNWRy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z3VuaXQgPSAncHgnOwoKCS8qKgoJICogQXJyYXkgb2YgU1ZHIGdyYWRpZW50cy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z2dyYWRpZW50cyA9IGFycmF5KCk7CgoJLyoqCgkgKiBJRCBvZiBsYXN0IFNWRyBncmFkaWVudC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z2dyYWRpZW50aWQgPSAwOwoKCS8qKgoJICogQm9vbGVhbiB2YWx1ZSB0cnVlIHdoZW4gaW4gU1ZHIGRlZnMgZ3JvdXAuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqLwoJcHJvdGVjdGVkICRzdmdkZWZzbW9kZSA9IGZhbHNlOwoKCS8qKgoJICogQXJyYXkgb2YgU1ZHIGRlZnMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqLwoJcHJvdGVjdGVkICRzdmdkZWZzID0gYXJyYXkoKTsKCgkvKioKCSAqIEJvb2xlYW4gdmFsdWUgdHJ1ZSB3aGVuIGluIFNWRyBjbGlwUGF0aCB0YWcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNC0yNikKCSAqLwoJcHJvdGVjdGVkICRzdmdjbGlwbW9kZSA9IGZhbHNlOwoKCS8qKgoJICogQXJyYXkgb2YgU1ZHIGNsaXBQYXRoIGNvbW1hbmRzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDUtMDIpCgkgKi8KCXByb3RlY3RlZCAkc3ZnY2xpcHBhdGhzID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IG9mIFNWRyBjbGlwUGF0aCB0cmFuZm9ybWF0aW9uIG1hdHJpeC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjguMDIyICgyMDEwLTA4LTMxKQoJICovCglwcm90ZWN0ZWQgJHN2Z2NsaXB0bSA9IGFycmF5KCk7CgoJLyoqCgkgKiBJRCBvZiBsYXN0IFNWRyBjbGlwUGF0aC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z2NsaXBpZCA9IDA7CgoJLyoqCgkgKiBTVkcgdGV4dC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z3RleHQgPSAnJzsKCgkvKioKCSAqIFNWRyB0ZXh0IHByb3BlcnRpZXMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS44LjAxMyAoMjAxMC0wOC0yMykKCSAqLwoJcHJvdGVjdGVkICRzdmd0ZXh0bW9kZSA9IGFycmF5KCk7CgoJLyoqCgkgKiBBcnJheSBvZiBTVkcgcHJvcGVydGllcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgJHN2Z3N0eWxlcyA9IGFycmF5KGFycmF5KAoJCSdhbGlnbm1lbnQtYmFzZWxpbmUnID0+ICdhdXRvJywKCQknYmFzZWxpbmUtc2hpZnQnID0+ICdiYXNlbGluZScsCgkJJ2NsaXAnID0+ICdhdXRvJywKCQknY2xpcC1wYXRoJyA9PiAnbm9uZScsCgkJJ2NsaXAtcnVsZScgPT4gJ25vbnplcm8nLAoJCSdjb2xvcicgPT4gJ2JsYWNrJywKCQknY29sb3ItaW50ZXJwb2xhdGlvbicgPT4gJ3NSR0InLAoJCSdjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnMnID0+ICdsaW5lYXJSR0InLAoJCSdjb2xvci1wcm9maWxlJyA9PiAnYXV0bycsCgkJJ2NvbG9yLXJlbmRlcmluZycgPT4gJ2F1dG8nLAoJCSdjdXJzb3InID0+ICdhdXRvJywKCQknZGlyZWN0aW9uJyA9PiAnbHRyJywKCQknZGlzcGxheScgPT4gJ2lubGluZScsCgkJJ2RvbWluYW50LWJhc2VsaW5lJyA9PiAnYXV0bycsCgkJJ2VuYWJsZS1iYWNrZ3JvdW5kJyA9PiAnYWNjdW11bGF0ZScsCgkJJ2ZpbGwnID0+ICdibGFjaycsCgkJJ2ZpbGwtb3BhY2l0eScgPT4gMSwKCQknZmlsbC1ydWxlJyA9PiAnbm9uemVybycsCgkJJ2ZpbHRlcicgPT4gJ25vbmUnLAoJCSdmbG9vZC1jb2xvcicgPT4gJ2JsYWNrJywKCQknZmxvb2Qtb3BhY2l0eScgPT4gMSwKCQknZm9udCcgPT4gJycsCgkJJ2ZvbnQtZmFtaWx5JyA9PiAnaGVsdmV0aWNhJywKCQknZm9udC1zaXplJyA9PiAnbWVkaXVtJywKCQknZm9udC1zaXplLWFkanVzdCcgPT4gJ25vbmUnLAoJCSdmb250LXN0cmV0Y2gnID0+ICdub3JtYWwnLAoJCSdmb250LXN0eWxlJyA9PiAnbm9ybWFsJywKCQknZm9udC12YXJpYW50JyA9PiAnbm9ybWFsJywKCQknZm9udC13ZWlnaHQnID0+ICdub3JtYWwnLAoJCSdnbHlwaC1vcmllbnRhdGlvbi1ob3Jpem9udGFsJyA9PiAnMGRlZycsCgkJJ2dseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsJyA9PiAnYXV0bycsCgkJJ2ltYWdlLXJlbmRlcmluZycgPT4gJ2F1dG8nLAoJCSdrZXJuaW5nJyA9PiAnYXV0bycsCgkJJ2xldHRlci1zcGFjaW5nJyA9PiAnbm9ybWFsJywKCQknbGlnaHRpbmctY29sb3InID0+ICd3aGl0ZScsCgkJJ21hcmtlcicgPT4gJycsCgkJJ21hcmtlci1lbmQnID0+ICdub25lJywKCQknbWFya2VyLW1pZCcgPT4gJ25vbmUnLAoJCSdtYXJrZXItc3RhcnQnID0+ICdub25lJywKCQknbWFzaycgPT4gJ25vbmUnLAoJCSdvcGFjaXR5JyA9PiAxLAoJCSdvdmVyZmxvdycgPT4gJ2F1dG8nLAoJCSdwb2ludGVyLWV2ZW50cycgPT4gJ3Zpc2libGVQYWludGVkJywKCQknc2hhcGUtcmVuZGVyaW5nJyA9PiAnYXV0bycsCgkJJ3N0b3AtY29sb3InID0+ICdibGFjaycsCgkJJ3N0b3Atb3BhY2l0eScgPT4gMSwKCQknc3Ryb2tlJyA9PiAnbm9uZScsCgkJJ3N0cm9rZS1kYXNoYXJyYXknID0+ICdub25lJywKCQknc3Ryb2tlLWRhc2hvZmZzZXQnID0+IDAsCgkJJ3N0cm9rZS1saW5lY2FwJyA9PiAnYnV0dCcsCgkJJ3N0cm9rZS1saW5lam9pbicgPT4gJ21pdGVyJywKCQknc3Ryb2tlLW1pdGVybGltaXQnID0+IDQsCgkJJ3N0cm9rZS1vcGFjaXR5JyA9PiAxLAoJCSdzdHJva2Utd2lkdGgnID0+IDEsCgkJJ3RleHQtYW5jaG9yJyA9PiAnc3RhcnQnLAoJCSd0ZXh0LWRlY29yYXRpb24nID0+ICdub25lJywKCQkndGV4dC1yZW5kZXJpbmcnID0+ICdhdXRvJywKCQkndW5pY29kZS1iaWRpJyA9PiAnbm9ybWFsJywKCQkndmlzaWJpbGl0eScgPT4gJ3Zpc2libGUnLAoJCSd3b3JkLXNwYWNpbmcnID0+ICdub3JtYWwnLAoJCSd3cml0aW5nLW1vZGUnID0+ICdsci10YicsCgkJJ3RleHQtY29sb3InID0+ICdibGFjaycsCgkJJ3RyYW5zZm1hdHJpeCcgPT4gYXJyYXkoMSwgMCwgMCwgMSwgMCwgMCkKCQkpKTsKCgkvKioKCSAqIElmIHRydWUgZm9yY2Ugc1JHQiBjb2xvciBwcm9maWxlIGZvciBhbGwgZG9jdW1lbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjEyMSAoMjAxMS0wOS0yOCkKCSAqLwoJcHJvdGVjdGVkICRmb3JjZV9zcmdiID0gZmFsc2U7CgoJLyoqCgkgKiBJZiB0cnVlIHNldCB0aGUgZG9jdW1lbnQgdG8gUERGL0EgbW9kZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjkuMTIxICgyMDExLTA5LTI3KQoJICovCglwcm90ZWN0ZWQgJHBkZmFfbW9kZSA9IGZhbHNlOwoKCS8qKgoJICogRG9jdW1lbnQgY3JlYXRpb24gZGF0ZS10aW1lCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMikKCSAqLwoJcHJvdGVjdGVkICRkb2NfY3JlYXRpb25fdGltZXN0YW1wOwoKCS8qKgoJICogRG9jdW1lbnQgbW9kaWZpY2F0aW9uIGRhdGUtdGltZQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4xNTIgKDIwMTItMDMtMjIpCgkgKi8KCXByb3RlY3RlZCAkZG9jX21vZGlmaWNhdGlvbl90aW1lc3RhbXA7CgoJLyoqCgkgKiBDdXN0b20gWE1QIGRhdGEuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjEyOCAoMjAxMS0xMC0wNikKCSAqLwoJcHJvdGVjdGVkICRjdXN0b21feG1wID0gJyc7CgoJLyoqCgkgKiBPdmVycHJpbnQgbW9kZSBhcnJheS4KCSAqIChDaGVjayB0aGUgIkVudHJpZXMgaW4gYSBHcmFwaGljcyBTdGF0ZSBQYXJhbWV0ZXIgRGljdGlvbmFyeSIgb24gUERGIDMyMDAwLTE6MjAwOCkuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMykKCSAqLwoJcHJvdGVjdGVkICRvdmVycHJpbnQgPSBhcnJheSgnT1AnID0+IGZhbHNlLCAnb3AnID0+IGZhbHNlLCAnT1BNJyA9PiAwKTsKCgkvKioKCSAqIEFscGhhIG1vZGUgYXJyYXkuCgkgKiAoQ2hlY2sgdGhlICJFbnRyaWVzIGluIGEgR3JhcGhpY3MgU3RhdGUgUGFyYW1ldGVyIERpY3Rpb25hcnkiIG9uIFBERiAzMjAwMC0xOjIwMDgpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4xNTIgKDIwMTItMDMtMjMpCgkgKi8KCXByb3RlY3RlZCAkYWxwaGEgPSBhcnJheSgnQ0EnID0+IDEsICdjYScgPT4gMSwgJ0JNJyA9PiAnL05vcm1hbCcsICdBSVMnID0+IGZhbHNlKTsKCgkvKioKCSAqIERlZmluZSB0aGUgcGFnZSBib3VuZGFyaWVzIGJveGVzIHRvIGJlIHNldCBvbiBkb2N1bWVudC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjkuMTUyICgyMDEyLTAzLTIzKQoJICovCglwcm90ZWN0ZWQgJHBhZ2VfYm94ZXMgPSBhcnJheSgnTWVkaWFCb3gnLCAnQ3JvcEJveCcsICdCbGVlZEJveCcsICdUcmltQm94JywgJ0FydEJveCcpOwoKCS8qKgoJICogSWYgdHJ1ZSBwcmludCBUQ1BERiBtZXRhIGxpbmsuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMykKCSAqLwoJcHJvdGVjdGVkICR0Y3BkZmxpbmsgPSB0cnVlOwoKCS8qKgoJICogQ2FjaGUgYXJyYXkgZm9yIGNvbXB1dGVkIEdEIGdhbW1hIHZhbHVlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjkuMTYzMiAoMjAxMi0wNi0wNSkKCSAqLwoJcHJvdGVjdGVkICRnZGdhbW1hY2FjaGUgPSBhcnJheSgpOwoKCS8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgkvLyBNRVRIT0RTCgkvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogVGhpcyBpcyB0aGUgY2xhc3MgY29uc3RydWN0b3IuCgkgKiBJdCBhbGxvd3MgdG8gc2V0IHVwIHRoZSBwYWdlIGZvcm1hdCwgdGhlIG9yaWVudGF0aW9uIGFuZCB0aGUgbWVhc3VyZSB1bml0IHVzZWQgaW4gYWxsIHRoZSBtZXRob2RzIChleGNlcHQgZm9yIHRoZSBmb250IHNpemVzKS4KCSAqIAoJICogSU1QT1JUQU5UOiBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgbWV0aG9kIHNldHMgdGhlIG1iX2ludGVybmFsX2VuY29kaW5nIHRvIEFTQ0lJLCBzbyBpZiB5b3UgYXJlIHVzaW5nIHRoZSBtYnN0cmluZyBtb2R1bGUgZnVuY3Rpb25zIHdpdGggVENQREYgeW91IG5lZWQgdG8gY29ycmVjdGx5IHNldC91bnNldCB0aGUgbWJfaW50ZXJuYWxfZW5jb2Rpbmcgd2hlbiBuZWVkZWQuCgkgKiAKCSAqIEBwYXJhbSAkb3JpZW50YXRpb24gKHN0cmluZykgcGFnZSBvcmllbnRhdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZSAoY2FzZSBpbnNlbnNpdGl2ZSk6PHVsPjxsaT5QIG9yIFBvcnRyYWl0IChkZWZhdWx0KTwvbGk+PGxpPkwgb3IgTGFuZHNjYXBlPC9saT48bGk+JycgKGVtcHR5IHN0cmluZykgZm9yIGF1dG9tYXRpYyBvcmllbnRhdGlvbjwvbGk+PC91bD4KCSAqIEBwYXJhbSAkdW5pdCAoc3RyaW5nKSBVc2VyIG1lYXN1cmUgdW5pdC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPnB0OiBwb2ludDwvbGk+PGxpPm1tOiBtaWxsaW1ldGVyIChkZWZhdWx0KTwvbGk+PGxpPmNtOiBjZW50aW1ldGVyPC9saT48bGk+aW46IGluY2g8L2xpPjwvdWw+PGJyIC8+QSBwb2ludCBlcXVhbHMgMS83MiBvZiBpbmNoLCB0aGF0IGlzIHRvIHNheSBhYm91dCAwLjM1IG1tIChhbiBpbmNoIGJlaW5nIDIuNTQgY20pLiBUaGlzIGlzIGEgdmVyeSBjb21tb24gdW5pdCBpbiB0eXBvZ3JhcGh5OyBmb250IHNpemVzIGFyZSBleHByZXNzZWQgaW4gdGhhdCB1bml0LgoJICogQHBhcmFtICRmb3JtYXQgKG1peGVkKSBUaGUgZm9ybWF0IHVzZWQgZm9yIHBhZ2VzLiBJdCBjYW4gYmUgZWl0aGVyOiBvbmUgb2YgdGhlIHN0cmluZyB2YWx1ZXMgc3BlY2lmaWVkIGF0IGdldFBhZ2VTaXplRnJvbUZvcm1hdCgpIG9yIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGF0IHNldFBhZ2VGb3JtYXQoKS4KCSAqIEBwYXJhbSAkdW5pY29kZSAoYm9vbGVhbikgVFJVRSBtZWFucyB0aGF0IHRoZSBpbnB1dCB0ZXh0IGlzIHVuaWNvZGUgKGRlZmF1bHQgPSB0cnVlKQoJICogQHBhcmFtICRlbmNvZGluZyAoc3RyaW5nKSBDaGFyc2V0IGVuY29kaW5nICh1c2VkIG9ubHkgd2hlbiBjb252ZXJ0aW5nIGJhY2sgaHRtbCBlbnRpdGllcyk7IGRlZmF1bHQgaXMgVVRGLTguCgkgKiBAcGFyYW0gJGRpc2tjYWNoZSAoYm9vbGVhbikgSWYgVFJVRSByZWR1Y2UgdGhlIFJBTSBtZW1vcnkgdXNhZ2UgYnkgY2FjaGluZyB0ZW1wb3JhcnkgZGF0YSBvbiBmaWxlc3lzdGVtIChzbG93ZXIpLgoJICogQHBhcmFtICRwZGZhIChib29sZWFuKSBJZiBUUlVFIHNldCB0aGUgZG9jdW1lbnQgdG8gUERGL0EgbW9kZS4KCSAqIEBwdWJsaWMKCSAqIEBzZWUgZ2V0UGFnZVNpemVGcm9tRm9ybWF0KCksIHNldFBhZ2VGb3JtYXQoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJG9yaWVudGF0aW9uPSdQJywgJHVuaXQ9J21tJywgJGZvcm1hdD0nQTQnLCAkdW5pY29kZT10cnVlLCAkZW5jb2Rpbmc9J1VURi04JywgJGRpc2tjYWNoZT1mYWxzZSwgJHBkZmE9ZmFsc2UpIHsKCQkvKiBTZXQgaW50ZXJuYWwgY2hhcmFjdGVyIGVuY29kaW5nIHRvIEFTQ0lJICovCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWJfaW50ZXJuYWxfZW5jb2RpbmcnKSBBTkQgbWJfaW50ZXJuYWxfZW5jb2RpbmcoKSkgewoJCQkkdGhpcy0+aW50ZXJuYWxfZW5jb2RpbmcgPSBtYl9pbnRlcm5hbF9lbmNvZGluZygpOwoJCQltYl9pbnRlcm5hbF9lbmNvZGluZygnQVNDSUknKTsKCQl9CgkJJHRoaXMtPmZvbnRfb2JqX2lkcyA9IGFycmF5KCk7CgkJJHRoaXMtPnBhZ2Vfb2JqX2lkID0gYXJyYXkoKTsKCQkkdGhpcy0+Zm9ybV9vYmpfaWQgPSBhcnJheSgpOwoJCS8vIHNldCBwZGYvYSBtb2RlCgkJJHRoaXMtPnBkZmFfbW9kZSA9ICRwZGZhOwoJCSR0aGlzLT5mb3JjZV9zcmdiID0gZmFsc2U7CgkJLy8gc2V0IGRpc2sgY2FjaGluZwoJCSR0aGlzLT5kaXNrY2FjaGUgPSAkZGlza2NhY2hlID8gdHJ1ZSA6IGZhbHNlOwoJCS8vIHNldCBsYW5ndWFnZSBkaXJlY3Rpb24KCQkkdGhpcy0+cnRsID0gZmFsc2U7CgkJJHRoaXMtPnRtcHJ0bCA9IGZhbHNlOwoJCS8vIHNvbWUgY2hlY2tzCgkJJHRoaXMtPl9kb2NoZWNrcygpOwoJCS8vIGluaXRpYWxpemF0aW9uIG9mIHByb3BlcnRpZXMKCQkkdGhpcy0+aXN1bmljb2RlID0gJHVuaWNvZGU7CgkJJHRoaXMtPnBhZ2UgPSAwOwoJCSR0aGlzLT50cmFuc2ZtcmtbMF0gPSBhcnJheSgpOwoJCSR0aGlzLT5wYWdlZGltID0gYXJyYXkoKTsKCQkkdGhpcy0+biA9IDI7CgkJJHRoaXMtPmJ1ZmZlciA9ICcnOwoJCSR0aGlzLT5wYWdlcyA9IGFycmF5KCk7CgkJJHRoaXMtPnN0YXRlID0gMDsKCQkkdGhpcy0+Zm9udHMgPSBhcnJheSgpOwoJCSR0aGlzLT5Gb250RmlsZXMgPSBhcnJheSgpOwoJCSR0aGlzLT5kaWZmcyA9IGFycmF5KCk7CgkJJHRoaXMtPmltYWdlcyA9IGFycmF5KCk7CgkJJHRoaXMtPmxpbmtzID0gYXJyYXkoKTsKCQkkdGhpcy0+Z3JhZGllbnRzID0gYXJyYXkoKTsKCQkkdGhpcy0+SW5Gb290ZXIgPSBmYWxzZTsKCQkkdGhpcy0+bGFzdGggPSAwOwoJCSR0aGlzLT5Gb250RmFtaWx5ID0gZGVmaW5lZCgnUERGX0ZPTlRfTkFNRV9NQUlOJyk/UERGX0ZPTlRfTkFNRV9NQUlOOidoZWx2ZXRpY2EnOwoJCSR0aGlzLT5Gb250U3R5bGUgPSAnJzsKCQkkdGhpcy0+Rm9udFNpemVQdCA9IDEyOwoJCSR0aGlzLT51bmRlcmxpbmUgPSBmYWxzZTsKCQkkdGhpcy0+b3ZlcmxpbmUgPSBmYWxzZTsKCQkkdGhpcy0+bGluZXRocm91Z2ggPSBmYWxzZTsKCQkkdGhpcy0+RHJhd0NvbG9yID0gJzAgRyc7CgkJJHRoaXMtPkZpbGxDb2xvciA9ICcwIGcnOwoJCSR0aGlzLT5UZXh0Q29sb3IgPSAnMCBnJzsKCQkkdGhpcy0+Q29sb3JGbGFnID0gZmFsc2U7CgkJJHRoaXMtPnBkZmxheWVycyA9IGFycmF5KCk7CgkJLy8gZW5jcnlwdGlvbiB2YWx1ZXMKCQkkdGhpcy0+ZW5jcnlwdGVkID0gZmFsc2U7CgkJJHRoaXMtPmxhc3RfZW5jX2tleSA9ICcnOwoJCS8vIHN0YW5kYXJkIFVuaWNvZGUgZm9udHMKCQkkdGhpcy0+Q29yZUZvbnRzID0gYXJyYXkoCgkJCSdjb3VyaWVyJz0+J0NvdXJpZXInLAoJCQknY291cmllckInPT4nQ291cmllci1Cb2xkJywKCQkJJ2NvdXJpZXJJJz0+J0NvdXJpZXItT2JsaXF1ZScsCgkJCSdjb3VyaWVyQkknPT4nQ291cmllci1Cb2xkT2JsaXF1ZScsCgkJCSdoZWx2ZXRpY2EnPT4nSGVsdmV0aWNhJywKCQkJJ2hlbHZldGljYUInPT4nSGVsdmV0aWNhLUJvbGQnLAoJCQknaGVsdmV0aWNhSSc9PidIZWx2ZXRpY2EtT2JsaXF1ZScsCgkJCSdoZWx2ZXRpY2FCSSc9PidIZWx2ZXRpY2EtQm9sZE9ibGlxdWUnLAoJCQkndGltZXMnPT4nVGltZXMtUm9tYW4nLAoJCQkndGltZXNCJz0+J1RpbWVzLUJvbGQnLAoJCQkndGltZXNJJz0+J1RpbWVzLUl0YWxpYycsCgkJCSd0aW1lc0JJJz0+J1RpbWVzLUJvbGRJdGFsaWMnLAoJCQknc3ltYm9sJz0+J1N5bWJvbCcsCgkJCSd6YXBmZGluZ2JhdHMnPT4nWmFwZkRpbmdiYXRzJwoJCSk7CgkJLy8gc2V0IHNjYWxlIGZhY3RvcgoJCSR0aGlzLT5zZXRQYWdlVW5pdCgkdW5pdCk7CgkJLy8gc2V0IHBhZ2UgZm9ybWF0IGFuZCBvcmllbnRhdGlvbgoJCSR0aGlzLT5zZXRQYWdlRm9ybWF0KCRmb3JtYXQsICRvcmllbnRhdGlvbik7CgkJLy8gcGFnZSBtYXJnaW5zICgxIGNtKQoJCSRtYXJnaW4gPSAyOC4zNSAvICR0aGlzLT5rOwoJCSR0aGlzLT5TZXRNYXJnaW5zKCRtYXJnaW4sICRtYXJnaW4pOwoJCSR0aGlzLT5jbE1hcmdpbiA9ICR0aGlzLT5sTWFyZ2luOwoJCSR0aGlzLT5jck1hcmdpbiA9ICR0aGlzLT5yTWFyZ2luOwoJCS8vIGludGVybmFsIGNlbGwgcGFkZGluZwoJCSRjcGFkZGluZyA9ICRtYXJnaW4gLyAxMDsKCQkkdGhpcy0+c2V0Q2VsbFBhZGRpbmdzKCRjcGFkZGluZywgMCwgJGNwYWRkaW5nLCAwKTsKCQkvLyBjZWxsIG1hcmdpbnMKCQkkdGhpcy0+c2V0Q2VsbE1hcmdpbnMoMCwgMCwgMCwgMCk7CgkJLy8gbGluZSB3aWR0aCAoMC4yIG1tKQoJCSR0aGlzLT5MaW5lV2lkdGggPSAwLjU3IC8gJHRoaXMtPms7CgkJJHRoaXMtPmxpbmVzdHlsZVdpZHRoID0gc3ByaW50ZignJUYgdycsICgkdGhpcy0+TGluZVdpZHRoICogJHRoaXMtPmspKTsKCQkkdGhpcy0+bGluZXN0eWxlQ2FwID0gJzAgSic7CgkJJHRoaXMtPmxpbmVzdHlsZUpvaW4gPSAnMCBqJzsKCQkkdGhpcy0+bGluZXN0eWxlRGFzaCA9ICdbXSAwIGQnOwoJCS8vIGF1dG9tYXRpYyBwYWdlIGJyZWFrCgkJJHRoaXMtPlNldEF1dG9QYWdlQnJlYWsodHJ1ZSwgKDIgKiAkbWFyZ2luKSk7CgkJLy8gZnVsbCB3aWR0aCBkaXNwbGF5IG1vZGUKCQkkdGhpcy0+U2V0RGlzcGxheU1vZGUoJ2Z1bGx3aWR0aCcpOwoJCS8vIGNvbXByZXNzaW9uCgkJJHRoaXMtPlNldENvbXByZXNzaW9uKCk7CgkJLy8gc2V0IGRlZmF1bHQgUERGIHZlcnNpb24gbnVtYmVyCgkJJHRoaXMtPnNldFBERlZlcnNpb24oKTsKCQkkdGhpcy0+dGNwZGZsaW5rID0gdHJ1ZTsKCQkkdGhpcy0+ZW5jb2RpbmcgPSAkZW5jb2Rpbmc7CgkJJHRoaXMtPkhSRUYgPSBhcnJheSgpOwoJCSR0aGlzLT5nZXRGb250c0xpc3QoKTsKCQkkdGhpcy0+Zmdjb2xvciA9IGFycmF5KCdSJyA9PiAwLCAnRycgPT4gMCwgJ0InID0+IDApOwoJCSR0aGlzLT5zdHJva2Vjb2xvciA9IGFycmF5KCdSJyA9PiAwLCAnRycgPT4gMCwgJ0InID0+IDApOwoJCSR0aGlzLT5iZ2NvbG9yID0gYXJyYXkoJ1InID0+IDI1NSwgJ0cnID0+IDI1NSwgJ0InID0+IDI1NSk7CgkJJHRoaXMtPmV4dGdzdGF0ZXMgPSBhcnJheSgpOwoJCSR0aGlzLT5zZXRUZXh0U2hhZG93KCk7CgkJLy8gdXNlcidzIHJpZ2h0cwoJCSR0aGlzLT5zaWduID0gZmFsc2U7CgkJJHRoaXMtPnVyWydlbmFibGVkJ10gPSBmYWxzZTsKCQkkdGhpcy0+dXJbJ2RvY3VtZW50J10gPSAnL0Z1bGxTYXZlJzsKCQkkdGhpcy0+dXJbJ2Fubm90cyddID0gJy9DcmVhdGUvRGVsZXRlL01vZGlmeS9Db3B5L0ltcG9ydC9FeHBvcnQnOwoJCSR0aGlzLT51clsnZm9ybSddID0gJy9BZGQvRGVsZXRlL0ZpbGxJbi9JbXBvcnQvRXhwb3J0L1N1Ym1pdFN0YW5kYWxvbmUvU3Bhd25UZW1wbGF0ZSc7CgkJJHRoaXMtPnVyWydzaWduYXR1cmUnXSA9ICcvTW9kaWZ5JzsKCQkkdGhpcy0+dXJbJ2VmJ10gPSAnL0NyZWF0ZS9EZWxldGUvTW9kaWZ5L0ltcG9ydCc7CgkJJHRoaXMtPnVyWydmb3JtZXgnXSA9ICcnOwoJCSR0aGlzLT5zaWduYXR1cmVfYXBwZWFyYW5jZSA9IGFycmF5KCdwYWdlJyA9PiAxLCAncmVjdCcgPT4gJzAgMCAwIDAnLCAnbmFtZScgPT4gJ1NpZ25hdHVyZScpOwoJCSR0aGlzLT5lbXB0eV9zaWduYXR1cmVfYXBwZWFyYW5jZSA9IGFycmF5KCk7CgkJLy8gc2V0IGRlZmF1bHQgSlBFRyBxdWFsaXR5CgkJJHRoaXMtPmpwZWdfcXVhbGl0eSA9IDc1OwoJCS8vIGluaXRpYWxpemUgc29tZSBzZXR0aW5ncwoJCVRDUERGX0ZPTlRTOjp1dGY4QmlkaShhcnJheSgnJyksICcnLCBmYWxzZSwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQkvLyBzZXQgZGVmYXVsdCBmb250CgkJJHRoaXMtPlNldEZvbnQoJHRoaXMtPkZvbnRGYW1pbHksICR0aGlzLT5Gb250U3R5bGUsICR0aGlzLT5Gb250U2l6ZVB0KTsKCQkkdGhpcy0+c2V0SGVhZGVyRm9udChhcnJheSgkdGhpcy0+Rm9udEZhbWlseSwgJHRoaXMtPkZvbnRTdHlsZSwgJHRoaXMtPkZvbnRTaXplUHQpKTsKCQkkdGhpcy0+c2V0Rm9vdGVyRm9udChhcnJheSgkdGhpcy0+Rm9udEZhbWlseSwgJHRoaXMtPkZvbnRTdHlsZSwgJHRoaXMtPkZvbnRTaXplUHQpKTsKCQkvLyBjaGVjayBpZiBQQ1JFIFVuaWNvZGUgc3VwcG9ydCBpcyBlbmFibGVkCgkJaWYgKCR0aGlzLT5pc3VuaWNvZGUgQU5EIChAcHJlZ19tYXRjaCgnL1xwTC91JywgJ2EnKSA9PSAxKSkgewoJCQkvLyBQQ1JFIHVuaWNvZGUgc3VwcG9ydCBpcyB0dXJuZWQgT04KCQkJLy8gXHMgICAgIDogYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVyCgkJCS8vIFxwe1p9ICA6IGFueSBzZXBhcmF0b3IKCQkJLy8gXHB7TG99IDogVW5pY29kZSBsZXR0ZXIgb3IgaWRlb2dyYXBoIHRoYXQgZG9lcyBub3QgaGF2ZSBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSB2YXJpYW50cy4gSXMgdXNlZCB0byBjaHVuayBjaGluZXNlIHdvcmRzLgoJCQkvLyBceGEwICAgOiBVbmljb2RlIENoYXJhY3RlciAnTk8tQlJFQUsgU1BBQ0UnIChVKzAwQTApCgkJCS8vJHRoaXMtPnNldFNwYWNlc1JFKCcvKD8hXHhhMClbXHNccHtafVxwe0xvfV0vdScpOwoJCQkkdGhpcy0+c2V0U3BhY2VzUkUoJy8oPyFceGEwKVtcc1xwe1p9XS91Jyk7CgkJfSBlbHNlIHsKCQkJLy8gUENSRSB1bmljb2RlIHN1cHBvcnQgaXMgdHVybmVkIE9GRgoJCQkkdGhpcy0+c2V0U3BhY2VzUkUoJy9bXlxTXHhhMF0vJyk7CgkJfQoJCSR0aGlzLT5kZWZhdWx0X2Zvcm1fcHJvcCA9IGFycmF5KCdsaW5lV2lkdGgnPT4xLCAnYm9yZGVyU3R5bGUnPT4nc29saWQnLCAnZmlsbENvbG9yJz0+YXJyYXkoMjU1LCAyNTUsIDI1NSksICdzdHJva2VDb2xvcic9PmFycmF5KDEyOCwgMTI4LCAxMjgpKTsKCQkvLyBzZXQgZmlsZSBJRCBmb3IgdHJhaWxlcgoJCSRzZXJmb3JtYXQgPSAoaXNfYXJyYXkoJGZvcm1hdCkgPyBzZXJpYWxpemUoJGZvcm1hdCkgOiAkZm9ybWF0KTsKCQkkdGhpcy0+ZmlsZV9pZCA9IG1kNShUQ1BERl9TVEFUSUM6OmdldFJhbmRvbVNlZWQoJ1RDUERGJy4kb3JpZW50YXRpb24uJHVuaXQuJHNlcmZvcm1hdC4kZW5jb2RpbmcpKTsKCQkvLyBzZXQgZG9jdW1lbnQgY3JlYXRpb24gYW5kIG1vZGlmaWNhdGlvbiB0aW1lc3RhbXAKCQkkdGhpcy0+ZG9jX2NyZWF0aW9uX3RpbWVzdGFtcCA9IHRpbWUoKTsKCQkkdGhpcy0+ZG9jX21vZGlmaWNhdGlvbl90aW1lc3RhbXAgPSAkdGhpcy0+ZG9jX2NyZWF0aW9uX3RpbWVzdGFtcDsKCQkvLyBnZXQgZGVmYXVsdCBncmFwaGljIHZhcnMKCQkkdGhpcy0+ZGVmYXVsdF9ncmFwaGljX3ZhcnMgPSAkdGhpcy0+Z2V0R3JhcGhpY1ZhcnMoKTsKCQkkdGhpcy0+aGVhZGVyX3hvYmpfYXV0b3Jlc2V0ID0gZmFsc2U7CgkJJHRoaXMtPmN1c3RvbV94bXAgPSAnJzsKCX0KCgkvKioKCSAqIERlZmF1bHQgZGVzdHJ1Y3Rvci4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUzLjAuVEMwMTYKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fZGVzdHJ1Y3QoKSB7CgkJLy8gcmVzdG9yZSBpbnRlcm5hbCBlbmNvZGluZwoJCWlmIChpc3NldCgkdGhpcy0+aW50ZXJuYWxfZW5jb2RpbmcpIEFORCAhZW1wdHkoJHRoaXMtPmludGVybmFsX2VuY29kaW5nKSkgewoJCQltYl9pbnRlcm5hbF9lbmNvZGluZygkdGhpcy0+aW50ZXJuYWxfZW5jb2RpbmcpOwoJCX0KCQkvLyB1bnNldCBhbGwgY2xhc3MgdmFyaWFibGVzCgkJJHRoaXMtPl9kZXN0cm95KHRydWUpOwoJfQoKCS8qKgoJICogU2V0IHRoZSB1bml0cyBvZiBtZWFzdXJlIGZvciB0aGUgZG9jdW1lbnQuCgkgKiBAcGFyYW0gJHVuaXQgKHN0cmluZykgVXNlciBtZWFzdXJlIHVuaXQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5wdDogcG9pbnQ8L2xpPjxsaT5tbTogbWlsbGltZXRlciAoZGVmYXVsdCk8L2xpPjxsaT5jbTogY2VudGltZXRlcjwvbGk+PGxpPmluOiBpbmNoPC9saT48L3VsPjxiciAvPkEgcG9pbnQgZXF1YWxzIDEvNzIgb2YgaW5jaCwgdGhhdCBpcyB0byBzYXkgYWJvdXQgMC4zNSBtbSAoYW4gaW5jaCBiZWluZyAyLjU0IGNtKS4gVGhpcyBpcyBhIHZlcnkgY29tbW9uIHVuaXQgaW4gdHlwb2dyYXBoeTsgZm9udCBzaXplcyBhcmUgZXhwcmVzc2VkIGluIHRoYXQgdW5pdC4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAzLjAuMDE1ICgyMDA4LTA2LTA2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0UGFnZVVuaXQoJHVuaXQpIHsKCQkkdW5pdCA9IHN0cnRvbG93ZXIoJHVuaXQpOwoJCS8vU2V0IHNjYWxlIGZhY3RvcgoJCXN3aXRjaCAoJHVuaXQpIHsKCQkJLy8gcG9pbnRzCgkJCWNhc2UgJ3B4JzoKCQkJY2FzZSAncHQnOiB7CgkJCQkkdGhpcy0+ayA9IDE7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBtaWxsaW1ldGVycwoJCQljYXNlICdtbSc6IHsKCQkJCSR0aGlzLT5rID0gJHRoaXMtPmRwaSAvIDI1LjQ7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBjZW50aW1ldGVycwoJCQljYXNlICdjbSc6IHsKCQkJCSR0aGlzLT5rID0gJHRoaXMtPmRwaSAvIDIuNTQ7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBpbmNoZXMKCQkJY2FzZSAnaW4nOiB7CgkJCQkkdGhpcy0+ayA9ICR0aGlzLT5kcGk7CgkJCQlicmVhazsKCQkJfQoJCQkvLyB1bnN1cHBvcnRlZCB1bml0CgkJCWRlZmF1bHQgOiB7CgkJCQkkdGhpcy0+RXJyb3IoJ0luY29ycmVjdCB1bml0OiAnLiR1bml0KTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT5wZGZ1bml0ID0gJHVuaXQ7CgkJaWYgKGlzc2V0KCR0aGlzLT5DdXJPcmllbnRhdGlvbikpIHsKCQkJJHRoaXMtPnNldFBhZ2VPcmllbnRhdGlvbigkdGhpcy0+Q3VyT3JpZW50YXRpb24pOwoJCX0KCX0KCgkvKioKCSAqIENoYW5nZSB0aGUgZm9ybWF0IG9mIHRoZSBjdXJyZW50IHBhZ2UKCSAqIEBwYXJhbSAkZm9ybWF0IChtaXhlZCkgVGhlIGZvcm1hdCB1c2VkIGZvciBwYWdlcy4gSXQgY2FuIGJlIGVpdGhlcjogb25lIG9mIHRoZSBzdHJpbmcgdmFsdWVzIHNwZWNpZmllZCBhdCBnZXRQYWdlU2l6ZUZyb21Gb3JtYXQoKSBkb2N1bWVudGF0aW9uIG9yIGFuIGFycmF5IG9mIHR3byBudW1uZXJzICh3aWR0aCwgaGVpZ2h0KSBvciBhbiBhcnJheSBjb250YWluaW5nIHRoZSBmb2xsb3dpbmcgbWVhc3VyZXMgYW5kIG9wdGlvbnM6PHVsPgoJICogPGxpPlsnZm9ybWF0J10gPSBwYWdlIGZvcm1hdCBuYW1lIChvbmUgb2YgdGhlIGFib3ZlKTs8L2xpPgoJICogPGxpPlsnUm90YXRlJ10gOiBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgYnkgd2hpY2ggdGhlIHBhZ2Ugc2hhbGwgYmUgcm90YXRlZCBjbG9ja3dpc2Ugd2hlbiBkaXNwbGF5ZWQgb3IgcHJpbnRlZC4gVGhlIHZhbHVlIHNoYWxsIGJlIGEgbXVsdGlwbGUgb2YgOTAuPC9saT4KCSAqIDxsaT5bJ1BaJ10gOiBUaGUgcGFnZSdzIHByZWZlcnJlZCB6b29tIChtYWduaWZpY2F0aW9uKSBmYWN0b3IuPC9saT4KCSAqIDxsaT5bJ01lZGlhQm94J10gOiB0aGUgYm91bmRhcmllcyBvZiB0aGUgcGh5c2ljYWwgbWVkaXVtIG9uIHdoaWNoIHRoZSBwYWdlIHNoYWxsIGJlIGRpc3BsYXllZCBvciBwcmludGVkOjwvbGk+CgkgKiA8bGk+WydNZWRpYUJveCddWydsbHgnXSA6IGxvd2VyLWxlZnQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydNZWRpYUJveCddWydsbHknXSA6IGxvd2VyLWxlZnQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydNZWRpYUJveCddWyd1cngnXSA6IHVwcGVyLXJpZ2h0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPlsnTWVkaWFCb3gnXVsndXJ5J10gOiB1cHBlci1yaWdodCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT4KCSAqIDxsaT5bJ0Nyb3BCb3gnXSA6IHRoZSB2aXNpYmxlIHJlZ2lvbiBvZiBkZWZhdWx0IHVzZXIgc3BhY2U6PC9saT4KCSAqIDxsaT5bJ0Nyb3BCb3gnXVsnbGx4J10gOiBsb3dlci1sZWZ0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPlsnQ3JvcEJveCddWydsbHknXSA6IGxvd2VyLWxlZnQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydDcm9wQm94J11bJ3VyeCddIDogdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydDcm9wQm94J11bJ3VyeSddIDogdXBwZXItcmlnaHQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydCbGVlZEJveCddIDogdGhlIHJlZ2lvbiB0byB3aGljaCB0aGUgY29udGVudHMgb2YgdGhlIHBhZ2Ugc2hhbGwgYmUgY2xpcHBlZCB3aGVuIG91dHB1dCBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQ6PC9saT4KCSAqIDxsaT5bJ0JsZWVkQm94J11bJ2xseCddIDogbG93ZXItbGVmdCB4IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT4KCSAqIDxsaT5bJ0JsZWVkQm94J11bJ2xseSddIDogbG93ZXItbGVmdCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT4KCSAqIDxsaT5bJ0JsZWVkQm94J11bJ3VyeCddIDogdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydCbGVlZEJveCddWyd1cnknXSA6IHVwcGVyLXJpZ2h0IHkgY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPlsnVHJpbUJveCddIDogdGhlIGludGVuZGVkIGRpbWVuc2lvbnMgb2YgdGhlIGZpbmlzaGVkIHBhZ2UgYWZ0ZXIgdHJpbW1pbmc6PC9saT4KCSAqIDxsaT5bJ1RyaW1Cb3gnXVsnbGx4J10gOiBsb3dlci1sZWZ0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPlsnVHJpbUJveCddWydsbHknXSA6IGxvd2VyLWxlZnQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydUcmltQm94J11bJ3VyeCddIDogdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydUcmltQm94J11bJ3VyeSddIDogdXBwZXItcmlnaHQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydBcnRCb3gnXSA6IHRoZSBleHRlbnQgb2YgdGhlIHBhZ2UncyBtZWFuaW5nZnVsIGNvbnRlbnQ6PC9saT4KCSAqIDxsaT5bJ0FydEJveCddWydsbHgnXSA6IGxvd2VyLWxlZnQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydBcnRCb3gnXVsnbGx5J10gOiBsb3dlci1sZWZ0IHkgY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPlsnQXJ0Qm94J11bJ3VyeCddIDogdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+WydBcnRCb3gnXVsndXJ5J10gOiB1cHBlci1yaWdodCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT4KCSAqIDxsaT5bJ0JveENvbG9ySW5mbyddIDpzcGVjaWZ5IHRoZSBjb2xvdXJzIGFuZCBvdGhlciB2aXN1YWwgY2hhcmFjdGVyaXN0aWNzIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW4gZGlzcGxheWluZyBndWlkZWxpbmVzIG9uIHRoZSBzY3JlZW4gZm9yIGVhY2ggb2YgdGhlIHBvc3NpYmxlIHBhZ2UgYm91bmRhcmllcyBvdGhlciB0aGFuIHRoZSBNZWRpYUJveDo8L2xpPgoJICogPGxpPlsnQm94Q29sb3JJbmZvJ11bQk9YVFlQRV1bJ0MnXSA6IGFuIGFycmF5IG9mIHRocmVlIG51bWJlcnMgaW4gdGhlIHJhbmdlIDAtMjU1LCByZXByZXNlbnRpbmcgdGhlIGNvbXBvbmVudHMgaW4gdGhlIERldmljZVJHQiBjb2xvdXIgc3BhY2UuPC9saT4KCSAqIDxsaT5bJ0JveENvbG9ySW5mbyddW0JPWFRZUEVdWydXJ10gOiB0aGUgZ3VpZGVsaW5lIHdpZHRoIGluIGRlZmF1bHQgdXNlciB1bml0czwvbGk+CgkgKiA8bGk+WydCb3hDb2xvckluZm8nXVtCT1hUWVBFXVsnUyddIDogdGhlIGd1aWRlbGluZSBzdHlsZTogUyA9IFNvbGlkOyBEID0gRGFzaGVkPC9saT4KCSAqIDxsaT5bJ0JveENvbG9ySW5mbyddW0JPWFRZUEVdWydEJ10gOiBkYXNoIGFycmF5IGRlZmluaW5nIGEgcGF0dGVybiBvZiBkYXNoZXMgYW5kIGdhcHMgdG8gYmUgdXNlZCBpbiBkcmF3aW5nIGRhc2hlZCBndWlkZWxpbmVzPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ10gOiB0aGUgc3R5bGUgYW5kIGR1cmF0aW9uIG9mIHRoZSB2aXN1YWwgdHJhbnNpdGlvbiB0byB1c2Ugd2hlbiBtb3ZpbmcgZnJvbSBhbm90aGVyIHBhZ2UgdG8gdGhlIGdpdmVuIHBhZ2UgZHVyaW5nIGEgcHJlc2VudGF0aW9uPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ0R1ciddIDogVGhlIHBhZ2UncyBkaXNwbGF5IGR1cmF0aW9uIChhbHNvIGNhbGxlZCBpdHMgYWR2YW5jZSB0aW1pbmcpOiB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGltZSwgaW4gc2Vjb25kcywgdGhhdCB0aGUgcGFnZSBzaGFsbCBiZSBkaXNwbGF5ZWQgZHVyaW5nIHByZXNlbnRhdGlvbnMgYmVmb3JlIHRoZSB2aWV3ZXIgYXBwbGljYXRpb24gc2hhbGwgYXV0b21hdGljYWxseSBhZHZhbmNlIHRvIHRoZSBuZXh0IHBhZ2UuPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ1MnXSA6IHRyYW5zaXRpb24gc3R5bGUgOiBTcGxpdCwgQmxpbmRzLCBCb3gsIFdpcGUsIERpc3NvbHZlLCBHbGl0dGVyLCBSLCBGbHksIFB1c2gsIENvdmVyLCBVbmNvdmVyLCBGYWRlPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ0QnXSA6IFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBlZmZlY3QsIGluIHNlY29uZHMuPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ0RtJ10gOiAoU3BsaXQgYW5kIEJsaW5kcyB0cmFuc2l0aW9uIHN0eWxlcyBvbmx5KSBUaGUgZGltZW5zaW9uIGluIHdoaWNoIHRoZSBzcGVjaWZpZWQgdHJhbnNpdGlvbiBlZmZlY3Qgc2hhbGwgb2NjdXI6IEggPSBIb3Jpem9udGFsLCBWID0gVmVydGljYWwuIERlZmF1bHQgdmFsdWU6IEguPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ00nXSA6IChTcGxpdCwgQm94IGFuZCBGbHkgdHJhbnNpdGlvbiBzdHlsZXMgb25seSkgVGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgdHJhbnNpdGlvbiBlZmZlY3Q6IEkgPSBJbndhcmQgZnJvbSB0aGUgZWRnZXMgb2YgdGhlIHBhZ2UsIE8gPSBPdXR3YXJkIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgcGFnZURlZmF1bHQgdmFsdWU6IEkuPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ0RpJ10gOiAoV2lwZSwgR2xpdHRlciwgRmx5LCBDb3ZlciwgVW5jb3ZlciBhbmQgUHVzaCB0cmFuc2l0aW9uIHN0eWxlcyBvbmx5KSBUaGUgZGlyZWN0aW9uIGluIHdoaWNoIHRoZSBzcGVjaWZpZWQgdHJhbnNpdGlvbiBlZmZlY3Qgc2hhbGwgbW92ZXMsIGV4cHJlc3NlZCBpbiBkZWdyZWVzIGNvdW50ZXJjbG9ja3dpc2Ugc3RhcnRpbmcgZnJvbSBhIGxlZnQtdG8tcmlnaHQgZGlyZWN0aW9uLiBJZiB0aGUgdmFsdWUgaXMgYSBudW1iZXIsIGl0IHNoYWxsIGJlIG9uZSBvZjogMCA9IExlZnQgdG8gcmlnaHQsIDkwID0gQm90dG9tIHRvIHRvcCAoV2lwZSBvbmx5KSwgMTgwID0gUmlnaHQgdG8gbGVmdCAoV2lwZSBvbmx5KSwgMjcwID0gVG9wIHRvIGJvdHRvbSwgMzE1ID0gVG9wLWxlZnQgdG8gYm90dG9tLXJpZ2h0IChHbGl0dGVyIG9ubHkpLiBJZiB0aGUgdmFsdWUgaXMgYSBuYW1lLCBpdCBzaGFsbCBiZSBOb25lLCB3aGljaCBpcyByZWxldmFudCBvbmx5IGZvciB0aGUgRmx5IHRyYW5zaXRpb24gd2hlbiB0aGUgdmFsdWUgb2YgU1MgaXMgbm90IDEuMC4gRGVmYXVsdCB2YWx1ZTogMC48L2xpPgoJICogPGxpPlsndHJhbnMnXVsnU1MnXSA6IChGbHkgdHJhbnNpdGlvbiBzdHlsZSBvbmx5KSBUaGUgc3RhcnRpbmcgb3IgZW5kaW5nIHNjYWxlIGF0IHdoaWNoIHRoZSBjaGFuZ2VzIHNoYWxsIGJlIGRyYXduLiBJZiBNIHNwZWNpZmllcyBhbiBpbndhcmQgdHJhbnNpdGlvbiwgdGhlIHNjYWxlIG9mIHRoZSBjaGFuZ2VzIGRyYXduIHNoYWxsIHByb2dyZXNzIGZyb20gU1MgdG8gMS4wIG92ZXIgdGhlIGNvdXJzZSBvZiB0aGUgdHJhbnNpdGlvbi4gSWYgTSBzcGVjaWZpZXMgYW4gb3V0d2FyZCB0cmFuc2l0aW9uLCB0aGUgc2NhbGUgb2YgdGhlIGNoYW5nZXMgZHJhd24gc2hhbGwgcHJvZ3Jlc3MgZnJvbSAxLjAgdG8gU1Mgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB0cmFuc2l0aW9uLiBEZWZhdWx0OiAxLjAuPC9saT4KCSAqIDxsaT5bJ3RyYW5zJ11bJ0InXSA6IChGbHkgdHJhbnNpdGlvbiBzdHlsZSBvbmx5KSBJZiB0cnVlLCB0aGUgYXJlYSB0aGF0IHNoYWxsIGJlIGZsb3duIGluIGlzIHJlY3Rhbmd1bGFyIGFuZCBvcGFxdWUuIERlZmF1bHQ6IGZhbHNlLjwvbGk+CgkgKiA8L3VsPgoJICogQHBhcmFtICRvcmllbnRhdGlvbiAoc3RyaW5nKSBwYWdlIG9yaWVudGF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKTo8dWw+CgkgKiA8bGk+UCBvciBQb3J0cmFpdCAoZGVmYXVsdCk8L2xpPgoJICogPGxpPkwgb3IgTGFuZHNjYXBlPC9saT4KCSAqIDxsaT4nJyAoZW1wdHkgc3RyaW5nKSBmb3IgYXV0b21hdGljIG9yaWVudGF0aW9uPC9saT4KCSAqIDwvdWw+CgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMy4wLjAxNSAoMjAwOC0wNi0wNikKCSAqIEBzZWUgZ2V0UGFnZVNpemVGcm9tRm9ybWF0KCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldFBhZ2VGb3JtYXQoJGZvcm1hdCwgJG9yaWVudGF0aW9uPSdQJykgewoJCWlmICghZW1wdHkoJGZvcm1hdCkgQU5EIGlzc2V0KCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXSkpIHsKCQkJLy8gcmVtb3ZlIGluaGVyaXRlZCB2YWx1ZXMKCQkJdW5zZXQoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdKTsKCQl9CgkJaWYgKGlzX3N0cmluZygkZm9ybWF0KSkgewoJCQkvLyBnZXQgcGFnZSBtZWFzdXJlcyBmcm9tIGZvcm1hdCBuYW1lCgkJCSRwZiA9IFRDUERGX1NUQVRJQzo6Z2V0UGFnZVNpemVGcm9tRm9ybWF0KCRmb3JtYXQpOwoJCQkkdGhpcy0+ZndQdCA9ICRwZlswXTsKCQkJJHRoaXMtPmZoUHQgPSAkcGZbMV07CgkJfSBlbHNlIHsKCQkJLy8gdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHBoeXNpY2FsIG1lZGl1bSBvbiB3aGljaCB0aGUgcGFnZSBzaGFsbCBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZAoJCQlpZiAoaXNzZXQoJGZvcm1hdFsnTWVkaWFCb3gnXSkpIHsKCQkJCSR0aGlzLT5wYWdlZGltID0gVENQREZfU1RBVElDOjpzZXRQYWdlQm94ZXMoJHRoaXMtPnBhZ2UsICdNZWRpYUJveCcsICRmb3JtYXRbJ01lZGlhQm94J11bJ2xseCddLCAkZm9ybWF0WydNZWRpYUJveCddWydsbHknXSwgJGZvcm1hdFsnTWVkaWFCb3gnXVsndXJ4J10sICRmb3JtYXRbJ01lZGlhQm94J11bJ3VyeSddLCBmYWxzZSwgJHRoaXMtPmssICR0aGlzLT5wYWdlZGltKTsKCQkJCSR0aGlzLT5md1B0ID0gKCgkZm9ybWF0WydNZWRpYUJveCddWyd1cngnXSAtICRmb3JtYXRbJ01lZGlhQm94J11bJ2xseCddKSAqICR0aGlzLT5rKTsKCQkJCSR0aGlzLT5maFB0ID0gKCgkZm9ybWF0WydNZWRpYUJveCddWyd1cnknXSAtICRmb3JtYXRbJ01lZGlhQm94J11bJ2xseSddKSAqICR0aGlzLT5rKTsKCQkJfSBlbHNlIHsKCQkJCWlmIChpc3NldCgkZm9ybWF0WzBdKSBBTkQgaXNfbnVtZXJpYygkZm9ybWF0WzBdKSBBTkQgaXNzZXQoJGZvcm1hdFsxXSkgQU5EIGlzX251bWVyaWMoJGZvcm1hdFsxXSkpIHsKCQkJCQkkcGYgPSBhcnJheSgoJGZvcm1hdFswXSAqICR0aGlzLT5rKSwgKCRmb3JtYXRbMV0gKiAkdGhpcy0+aykpOwoJCQkJfSBlbHNlIHsKCQkJCQlpZiAoIWlzc2V0KCRmb3JtYXRbJ2Zvcm1hdCddKSkgewoJCQkJCQkvLyBkZWZhdWx0IHZhbHVlCgkJCQkJCSRmb3JtYXRbJ2Zvcm1hdCddID0gJ0E0JzsKCQkJCQl9CgkJCQkJJHBmID0gVENQREZfU1RBVElDOjpnZXRQYWdlU2l6ZUZyb21Gb3JtYXQoJGZvcm1hdFsnZm9ybWF0J10pOwoJCQkJfQoJCQkJJHRoaXMtPmZ3UHQgPSAkcGZbMF07CgkJCQkkdGhpcy0+ZmhQdCA9ICRwZlsxXTsKCQkJCSR0aGlzLT5wYWdlZGltID0gVENQREZfU1RBVElDOjpzZXRQYWdlQm94ZXMoJHRoaXMtPnBhZ2UsICdNZWRpYUJveCcsIDAsIDAsICR0aGlzLT5md1B0LCAkdGhpcy0+ZmhQdCwgdHJ1ZSwgJHRoaXMtPmssICR0aGlzLT5wYWdlZGltKTsKCQkJfQoJCQkvLyB0aGUgdmlzaWJsZSByZWdpb24gb2YgZGVmYXVsdCB1c2VyIHNwYWNlCgkJCWlmIChpc3NldCgkZm9ybWF0WydDcm9wQm94J10pKSB7CgkJCQkkdGhpcy0+cGFnZWRpbSA9IFRDUERGX1NUQVRJQzo6c2V0UGFnZUJveGVzKCR0aGlzLT5wYWdlLCAnQ3JvcEJveCcsICRmb3JtYXRbJ0Nyb3BCb3gnXVsnbGx4J10sICRmb3JtYXRbJ0Nyb3BCb3gnXVsnbGx5J10sICRmb3JtYXRbJ0Nyb3BCb3gnXVsndXJ4J10sICRmb3JtYXRbJ0Nyb3BCb3gnXVsndXJ5J10sIGZhbHNlLCAkdGhpcy0+aywgJHRoaXMtPnBhZ2VkaW0pOwoJCQl9CgkJCS8vIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIHNoYWxsIGJlIGNsaXBwZWQgd2hlbiBvdXRwdXQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50CgkJCWlmIChpc3NldCgkZm9ybWF0WydCbGVlZEJveCddKSkgewoJCQkJJHRoaXMtPnBhZ2VkaW0gPSBUQ1BERl9TVEFUSUM6OnNldFBhZ2VCb3hlcygkdGhpcy0+cGFnZSwgJ0JsZWVkQm94JywgJGZvcm1hdFsnQmxlZWRCb3gnXVsnbGx4J10sICRmb3JtYXRbJ0JsZWVkQm94J11bJ2xseSddLCAkZm9ybWF0WydCbGVlZEJveCddWyd1cngnXSwgJGZvcm1hdFsnQmxlZWRCb3gnXVsndXJ5J10sIGZhbHNlLCAkdGhpcy0+aywgJHRoaXMtPnBhZ2VkaW0pOwoJCQl9CgkJCS8vIHRoZSBpbnRlbmRlZCBkaW1lbnNpb25zIG9mIHRoZSBmaW5pc2hlZCBwYWdlIGFmdGVyIHRyaW1taW5nCgkJCWlmIChpc3NldCgkZm9ybWF0WydUcmltQm94J10pKSB7CgkJCQkkdGhpcy0+cGFnZWRpbSA9IFRDUERGX1NUQVRJQzo6c2V0UGFnZUJveGVzKCR0aGlzLT5wYWdlLCAnVHJpbUJveCcsICRmb3JtYXRbJ1RyaW1Cb3gnXVsnbGx4J10sICRmb3JtYXRbJ1RyaW1Cb3gnXVsnbGx5J10sICRmb3JtYXRbJ1RyaW1Cb3gnXVsndXJ4J10sICRmb3JtYXRbJ1RyaW1Cb3gnXVsndXJ5J10sIGZhbHNlLCAkdGhpcy0+aywgJHRoaXMtPnBhZ2VkaW0pOwoJCQl9CgkJCS8vIHRoZSBwYWdlJ3MgbWVhbmluZ2Z1bCBjb250ZW50IChpbmNsdWRpbmcgcG90ZW50aWFsIHdoaXRlIHNwYWNlKQoJCQlpZiAoaXNzZXQoJGZvcm1hdFsnQXJ0Qm94J10pKSB7CgkJCQkkdGhpcy0+cGFnZWRpbSA9IFRDUERGX1NUQVRJQzo6c2V0UGFnZUJveGVzKCR0aGlzLT5wYWdlLCAnQXJ0Qm94JywgJGZvcm1hdFsnQXJ0Qm94J11bJ2xseCddLCAkZm9ybWF0WydBcnRCb3gnXVsnbGx5J10sICRmb3JtYXRbJ0FydEJveCddWyd1cngnXSwgJGZvcm1hdFsnQXJ0Qm94J11bJ3VyeSddLCBmYWxzZSwgJHRoaXMtPmssICR0aGlzLT5wYWdlZGltKTsKCQkJfQoJCQkvLyBzcGVjaWZ5IHRoZSBjb2xvdXJzIGFuZCBvdGhlciB2aXN1YWwgY2hhcmFjdGVyaXN0aWNzIHRoYXQgc2hvdWxkIGJlIHVzZWQgaW4gZGlzcGxheWluZyBndWlkZWxpbmVzIG9uIHRoZSBzY3JlZW4gZm9yIHRoZSB2YXJpb3VzIHBhZ2UgYm91bmRhcmllcwoJCQlpZiAoaXNzZXQoJGZvcm1hdFsnQm94Q29sb3JJbmZvJ10pKSB7CgkJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0JveENvbG9ySW5mbyddID0gJGZvcm1hdFsnQm94Q29sb3JJbmZvJ107CgkJCX0KCQkJaWYgKGlzc2V0KCRmb3JtYXRbJ1JvdGF0ZSddKSBBTkQgKCgkZm9ybWF0WydSb3RhdGUnXSAlIDkwKSA9PSAwKSkgewoJCQkJLy8gVGhlIG51bWJlciBvZiBkZWdyZWVzIGJ5IHdoaWNoIHRoZSBwYWdlIHNoYWxsIGJlIHJvdGF0ZWQgY2xvY2t3aXNlIHdoZW4gZGlzcGxheWVkIG9yIHByaW50ZWQuIFRoZSB2YWx1ZSBzaGFsbCBiZSBhIG11bHRpcGxlIG9mIDkwLgoJCQkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydSb3RhdGUnXSA9IGludHZhbCgkZm9ybWF0WydSb3RhdGUnXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCRmb3JtYXRbJ1BaJ10pKSB7CgkJCQkvLyBUaGUgcGFnZSdzIHByZWZlcnJlZCB6b29tIChtYWduaWZpY2F0aW9uKSBmYWN0b3IKCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnUFonXSA9IGZsb2F0dmFsKCRmb3JtYXRbJ1BaJ10pOwoJCQl9CgkJCWlmIChpc3NldCgkZm9ybWF0Wyd0cmFucyddKSkgewoJCQkJLy8gVGhlIHN0eWxlIGFuZCBkdXJhdGlvbiBvZiB0aGUgdmlzdWFsIHRyYW5zaXRpb24gdG8gdXNlIHdoZW4gbW92aW5nIGZyb20gYW5vdGhlciBwYWdlIHRvIHRoZSBnaXZlbiBwYWdlIGR1cmluZyBhIHByZXNlbnRhdGlvbgoJCQkJaWYgKGlzc2V0KCRmb3JtYXRbJ3RyYW5zJ11bJ0R1ciddKSkgewoJCQkJCS8vIFRoZSBwYWdlJ3MgZGlzcGxheSBkdXJhdGlvbgoJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRHVyJ10gPSBmbG9hdHZhbCgkZm9ybWF0Wyd0cmFucyddWydEdXInXSk7CgkJCQl9CgkJCQkkc3RhbnNpdGlvbl9zdHlsZXMgPSBhcnJheSgnU3BsaXQnLCAnQmxpbmRzJywgJ0JveCcsICdXaXBlJywgJ0Rpc3NvbHZlJywgJ0dsaXR0ZXInLCAnUicsICdGbHknLCAnUHVzaCcsICdDb3ZlcicsICdVbmNvdmVyJywgJ0ZhZGUnKTsKCQkJCWlmIChpc3NldCgkZm9ybWF0Wyd0cmFucyddWydTJ10pIEFORCBpbl9hcnJheSgkZm9ybWF0Wyd0cmFucyddWydTJ10sICRzdGFuc2l0aW9uX3N0eWxlcykpIHsKCQkJCQkvLyBUaGUgdHJhbnNpdGlvbiBzdHlsZSB0aGF0IHNoYWxsIGJlIHVzZWQgd2hlbiBtb3ZpbmcgdG8gdGhpcyBwYWdlIGZyb20gYW5vdGhlciBkdXJpbmcgYSBwcmVzZW50YXRpb24KCQkJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RyYW5zJ11bJ1MnXSA9ICRmb3JtYXRbJ3RyYW5zJ11bJ1MnXTsKCQkJCQkkdmFsaWRfZWZmZWN0ID0gYXJyYXkoJ1NwbGl0JywgJ0JsaW5kcycpOwoJCQkJCSR2YWxpZF92YWxzID0gYXJyYXkoJ0gnLCAnVicpOwoJCQkJCWlmIChpc3NldCgkZm9ybWF0Wyd0cmFucyddWydEbSddKSBBTkQgaW5fYXJyYXkoJGZvcm1hdFsndHJhbnMnXVsnUyddLCAkdmFsaWRfZWZmZWN0KSBBTkQgaW5fYXJyYXkoJGZvcm1hdFsndHJhbnMnXVsnRG0nXSwgJHZhbGlkX3ZhbHMpKSB7CgkJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRG0nXSA9ICRmb3JtYXRbJ3RyYW5zJ11bJ0RtJ107CgkJCQkJfQoJCQkJCSR2YWxpZF9lZmZlY3QgPSBhcnJheSgnU3BsaXQnLCAnQm94JywgJ0ZseScpOwoJCQkJCSR2YWxpZF92YWxzID0gYXJyYXkoJ0knLCAnTycpOwoJCQkJCWlmIChpc3NldCgkZm9ybWF0Wyd0cmFucyddWydNJ10pIEFORCBpbl9hcnJheSgkZm9ybWF0Wyd0cmFucyddWydTJ10sICR2YWxpZF9lZmZlY3QpIEFORCBpbl9hcnJheSgkZm9ybWF0Wyd0cmFucyddWydNJ10sICR2YWxpZF92YWxzKSkgewoJCQkJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RyYW5zJ11bJ00nXSA9ICRmb3JtYXRbJ3RyYW5zJ11bJ00nXTsKCQkJCQl9CgkJCQkJJHZhbGlkX2VmZmVjdCA9IGFycmF5KCdXaXBlJywgJ0dsaXR0ZXInLCAnRmx5JywgJ0NvdmVyJywgJ1VuY292ZXInLCAnUHVzaCcpOwoJCQkJCWlmIChpc3NldCgkZm9ybWF0Wyd0cmFucyddWydEaSddKSBBTkQgaW5fYXJyYXkoJGZvcm1hdFsndHJhbnMnXVsnUyddLCAkdmFsaWRfZWZmZWN0KSkgewoJCQkJCQlpZiAoKCgoJGZvcm1hdFsndHJhbnMnXVsnRGknXSA9PSA5MCkgT1IgKCRmb3JtYXRbJ3RyYW5zJ11bJ0RpJ10gPT0gMTgwKSkgQU5EICgkZm9ybWF0Wyd0cmFucyddWydTJ10gPT0gJ1dpcGUnKSkKCQkJCQkJCU9SICgoJGZvcm1hdFsndHJhbnMnXVsnRGknXSA9PSAzMTUpIEFORCAoJGZvcm1hdFsndHJhbnMnXVsnUyddID09ICdHbGl0dGVyJykpCgkJCQkJCQlPUiAoKCRmb3JtYXRbJ3RyYW5zJ11bJ0RpJ10gPT0gMCkgT1IgKCRmb3JtYXRbJ3RyYW5zJ11bJ0RpJ10gPT0gMjcwKSkpIHsKCQkJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRGknXSA9IGludHZhbCgkZm9ybWF0Wyd0cmFucyddWydEaSddKTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGZvcm1hdFsndHJhbnMnXVsnU1MnXSkgQU5EICgkZm9ybWF0Wyd0cmFucyddWydTJ10gPT0gJ0ZseScpKSB7CgkJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnU1MnXSA9IGZsb2F0dmFsKCRmb3JtYXRbJ3RyYW5zJ11bJ1NTJ10pOwoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGZvcm1hdFsndHJhbnMnXVsnQiddKSBBTkQgKCRmb3JtYXRbJ3RyYW5zJ11bJ0InXSA9PT0gdHJ1ZSkgQU5EICgkZm9ybWF0Wyd0cmFucyddWydTJ10gPT0gJ0ZseScpKSB7CgkJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnQiddID0gJ3RydWUnOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0cmFucyddWydTJ10gPSAnUic7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGZvcm1hdFsndHJhbnMnXVsnRCddKSkgewoJCQkJCS8vIFRoZSBkdXJhdGlvbiBvZiB0aGUgdHJhbnNpdGlvbiBlZmZlY3QsIGluIHNlY29uZHMKCQkJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RyYW5zJ11bJ0QnXSA9IGZsb2F0dmFsKCRmb3JtYXRbJ3RyYW5zJ11bJ0QnXSk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRCddID0gMTsKCQkJCX0KCQkJfQoJCX0KCQkkdGhpcy0+c2V0UGFnZU9yaWVudGF0aW9uKCRvcmllbnRhdGlvbik7Cgl9CgoJLyoqCgkgKiBTZXQgcGFnZSBvcmllbnRhdGlvbi4KCSAqIEBwYXJhbSAkb3JpZW50YXRpb24gKHN0cmluZykgcGFnZSBvcmllbnRhdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZSAoY2FzZSBpbnNlbnNpdGl2ZSk6PHVsPjxsaT5QIG9yIFBvcnRyYWl0IChkZWZhdWx0KTwvbGk+PGxpPkwgb3IgTGFuZHNjYXBlPC9saT48bGk+JycgKGVtcHR5IHN0cmluZykgZm9yIGF1dG9tYXRpYyBvcmllbnRhdGlvbjwvbGk+PC91bD4KCSAqIEBwYXJhbSAkYXV0b3BhZ2VicmVhayAoYm9vbGVhbikgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIGF1dG8tcGFnZS1icmVhayBtb2RlIHNob3VsZCBiZSBvbiBvciBvZmYuCgkgKiBAcGFyYW0gJGJvdHRvbW1hcmdpbiAoZmxvYXQpIGJvdHRvbSBtYXJnaW4gb2YgdGhlIHBhZ2UuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMy4wLjAxNSAoMjAwOC0wNi0wNikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldFBhZ2VPcmllbnRhdGlvbigkb3JpZW50YXRpb24sICRhdXRvcGFnZWJyZWFrPScnLCAkYm90dG9tbWFyZ2luPScnKSB7CgkJaWYgKCFpc3NldCgkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ01lZGlhQm94J10pKSB7CgkJCS8vIHRoZSBib3VuZGFyaWVzIG9mIHRoZSBwaHlzaWNhbCBtZWRpdW0gb24gd2hpY2ggdGhlIHBhZ2Ugc2hhbGwgYmUgZGlzcGxheWVkIG9yIHByaW50ZWQKCQkJJHRoaXMtPnBhZ2VkaW0gPSBUQ1BERl9TVEFUSUM6OnNldFBhZ2VCb3hlcygkdGhpcy0+cGFnZSwgJ01lZGlhQm94JywgMCwgMCwgJHRoaXMtPmZ3UHQsICR0aGlzLT5maFB0LCB0cnVlLCAkdGhpcy0+aywgJHRoaXMtPnBhZ2VkaW0pOwoJCX0KCQlpZiAoIWlzc2V0KCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddKSkgewoJCQkvLyB0aGUgdmlzaWJsZSByZWdpb24gb2YgZGVmYXVsdCB1c2VyIHNwYWNlCgkJCSR0aGlzLT5wYWdlZGltID0gVENQREZfU1RBVElDOjpzZXRQYWdlQm94ZXMoJHRoaXMtPnBhZ2UsICdDcm9wQm94JywgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddWydsbHgnXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddWydsbHknXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddWyd1cngnXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddWyd1cnknXSwgdHJ1ZSwgJHRoaXMtPmssICR0aGlzLT5wYWdlZGltKTsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0JsZWVkQm94J10pKSB7CgkJCS8vIHRoZSByZWdpb24gdG8gd2hpY2ggdGhlIGNvbnRlbnRzIG9mIHRoZSBwYWdlIHNoYWxsIGJlIGNsaXBwZWQgd2hlbiBvdXRwdXQgaW4gYSBwcm9kdWN0aW9uIGVudmlyb25tZW50CgkJCSR0aGlzLT5wYWdlZGltID0gVENQREZfU1RBVElDOjpzZXRQYWdlQm94ZXMoJHRoaXMtPnBhZ2UsICdCbGVlZEJveCcsICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddWydsbHgnXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ2xseSddLCAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0Nyb3BCb3gnXVsndXJ4J10sICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddWyd1cnknXSwgdHJ1ZSwgJHRoaXMtPmssICR0aGlzLT5wYWdlZGltKTsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1RyaW1Cb3gnXSkpIHsKCQkJLy8gdGhlIGludGVuZGVkIGRpbWVuc2lvbnMgb2YgdGhlIGZpbmlzaGVkIHBhZ2UgYWZ0ZXIgdHJpbW1pbmcKCQkJJHRoaXMtPnBhZ2VkaW0gPSBUQ1BERl9TVEFUSUM6OnNldFBhZ2VCb3hlcygkdGhpcy0+cGFnZSwgJ1RyaW1Cb3gnLCAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0Nyb3BCb3gnXVsnbGx4J10sICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddWydsbHknXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ3VyeCddLCAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0Nyb3BCb3gnXVsndXJ5J10sIHRydWUsICR0aGlzLT5rLCAkdGhpcy0+cGFnZWRpbSk7CgkJfQoJCWlmICghaXNzZXQoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydBcnRCb3gnXSkpIHsKCQkJLy8gdGhlIHBhZ2UncyBtZWFuaW5nZnVsIGNvbnRlbnQgKGluY2x1ZGluZyBwb3RlbnRpYWwgd2hpdGUgc3BhY2UpCgkJCSR0aGlzLT5wYWdlZGltID0gVENQREZfU1RBVElDOjpzZXRQYWdlQm94ZXMoJHRoaXMtPnBhZ2UsICdBcnRCb3gnLCAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0Nyb3BCb3gnXVsnbGx4J10sICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddWydsbHknXSwgJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ3VyeCddLCAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0Nyb3BCb3gnXVsndXJ5J10sIHRydWUsICR0aGlzLT5rLCAkdGhpcy0+cGFnZWRpbSk7CgkJfQoJCWlmICghaXNzZXQoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydSb3RhdGUnXSkpIHsKCQkJLy8gVGhlIG51bWJlciBvZiBkZWdyZWVzIGJ5IHdoaWNoIHRoZSBwYWdlIHNoYWxsIGJlIHJvdGF0ZWQgY2xvY2t3aXNlIHdoZW4gZGlzcGxheWVkIG9yIHByaW50ZWQuIFRoZSB2YWx1ZSBzaGFsbCBiZSBhIG11bHRpcGxlIG9mIDkwLgoJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1JvdGF0ZSddID0gMDsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1BaJ10pKSB7CgkJCS8vIFRoZSBwYWdlJ3MgcHJlZmVycmVkIHpvb20gKG1hZ25pZmljYXRpb24pIGZhY3RvcgoJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1BaJ10gPSAxOwoJCX0KCQlpZiAoJHRoaXMtPmZ3UHQgPiAkdGhpcy0+ZmhQdCkgewoJCQkvLyBsYW5kc2NhcGUKCQkJJGRlZmF1bHRfb3JpZW50YXRpb24gPSAnTCc7CgkJfSBlbHNlIHsKCQkJLy8gcG9ydHJhaXQKCQkJJGRlZmF1bHRfb3JpZW50YXRpb24gPSAnUCc7CgkJfQoJCSR2YWxpZF9vcmllbnRhdGlvbnMgPSBhcnJheSgnUCcsICdMJyk7CgkJaWYgKGVtcHR5KCRvcmllbnRhdGlvbikpIHsKCQkJJG9yaWVudGF0aW9uID0gJGRlZmF1bHRfb3JpZW50YXRpb247CgkJfSBlbHNlIHsKCQkJJG9yaWVudGF0aW9uID0gc3RydG91cHBlcigkb3JpZW50YXRpb25bMF0pOwoJCX0KCQlpZiAoaW5fYXJyYXkoJG9yaWVudGF0aW9uLCAkdmFsaWRfb3JpZW50YXRpb25zKSBBTkQgKCRvcmllbnRhdGlvbiAhPSAkZGVmYXVsdF9vcmllbnRhdGlvbikpIHsKCQkJJHRoaXMtPkN1ck9yaWVudGF0aW9uID0gJG9yaWVudGF0aW9uOwoJCQkkdGhpcy0+d1B0ID0gJHRoaXMtPmZoUHQ7CgkJCSR0aGlzLT5oUHQgPSAkdGhpcy0+ZndQdDsKCQl9IGVsc2UgewoJCQkkdGhpcy0+Q3VyT3JpZW50YXRpb24gPSAkZGVmYXVsdF9vcmllbnRhdGlvbjsKCQkJJHRoaXMtPndQdCA9ICR0aGlzLT5md1B0OwoJCQkkdGhpcy0+aFB0ID0gJHRoaXMtPmZoUHQ7CgkJfQoJCWlmICgoYWJzKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnTWVkaWFCb3gnXVsndXJ4J10gLSAkdGhpcy0+aFB0KSA8ICR0aGlzLT5mZXBzKSBBTkQgKGFicygkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ01lZGlhQm94J11bJ3VyeSddIC0gJHRoaXMtPndQdCkgPCAkdGhpcy0+ZmVwcykpewoJCQkvLyBzd2FwIFggYW5kIFkgY29vcmRpbmF0ZXMgKGNoYW5nZSBwYWdlIG9yaWVudGF0aW9uKQoJCQkkdGhpcy0+cGFnZWRpbSA9IFRDUERGX1NUQVRJQzo6c3dhcFBhZ2VCb3hDb29yZGluYXRlcygkdGhpcy0+cGFnZSwgJHRoaXMtPnBhZ2VkaW0pOwoJCX0KCQkkdGhpcy0+dyA9ICgkdGhpcy0+d1B0IC8gJHRoaXMtPmspOwoJCSR0aGlzLT5oID0gKCR0aGlzLT5oUHQgLyAkdGhpcy0+ayk7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRhdXRvcGFnZWJyZWFrKSkgewoJCQlpZiAoaXNzZXQoJHRoaXMtPkF1dG9QYWdlQnJlYWspKSB7CgkJCQkkYXV0b3BhZ2VicmVhayA9ICR0aGlzLT5BdXRvUGFnZUJyZWFrOwoJCQl9IGVsc2UgewoJCQkJJGF1dG9wYWdlYnJlYWsgPSB0cnVlOwoJCQl9CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkYm90dG9tbWFyZ2luKSkgewoJCQlpZiAoaXNzZXQoJHRoaXMtPmJNYXJnaW4pKSB7CgkJCQkkYm90dG9tbWFyZ2luID0gJHRoaXMtPmJNYXJnaW47CgkJCX0gZWxzZSB7CgkJCQkvLyBkZWZhdWx0IHZhbHVlID0gMiBjbQoJCQkJJGJvdHRvbW1hcmdpbiA9IDIgKiAyOC4zNSAvICR0aGlzLT5rOwoJCQl9CgkJfQoJCSR0aGlzLT5TZXRBdXRvUGFnZUJyZWFrKCRhdXRvcGFnZWJyZWFrLCAkYm90dG9tbWFyZ2luKTsKCQkvLyBzdG9yZSBwYWdlIGRpbWVuc2lvbnMKCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3cnXSA9ICR0aGlzLT53UHQ7CgkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydoJ10gPSAkdGhpcy0+aFB0OwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnd2snXSA9ICR0aGlzLT53OwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnaGsnXSA9ICR0aGlzLT5oOwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndG0nXSA9ICR0aGlzLT50TWFyZ2luOwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnYm0nXSA9ICRib3R0b21tYXJnaW47CgkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydsbSddID0gJHRoaXMtPmxNYXJnaW47CgkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydybSddID0gJHRoaXMtPnJNYXJnaW47CgkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydwYiddID0gJGF1dG9wYWdlYnJlYWs7CgkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvciddID0gJHRoaXMtPkN1ck9yaWVudGF0aW9uOwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ10gPSAkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbjsKCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ29ybSddID0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW47Cgl9CgoJLyoqCgkgKiBTZXQgcmVndWxhciBleHByZXNzaW9uIHRvIGRldGVjdCB3aXRoZXNwYWNlcyBvciB3b3JkIHNlcGFyYXRvcnMuCgkgKiBUaGUgcGF0dGVybiBkZWxpbWl0ZXIgbXVzdCBiZSB0aGUgZm9yd2FyZC1zbGFzaCBjaGFyYWN0ZXIgIi8iLgoJICogU29tZSBleGFtcGxlIHBhdHRlcm5zIGFyZToKCSAqIDxwcmU+CgkgKiBOb24tVW5pY29kZSBvciBtaXNzaW5nIFBDUkUgdW5pY29kZSBzdXBwb3J0OiAiL1teXFNceGEwXS8iCgkgKiBVbmljb2RlIGFuZCBQQ1JFIHVuaWNvZGUgc3VwcG9ydDogIi8oPyFceGEwKVtcc1xwe1p9XS91IgoJICogVW5pY29kZSBhbmQgUENSRSB1bmljb2RlIHN1cHBvcnQgaW4gQ2hpbmVzZSBtb2RlOiAiLyg/IVx4YTApW1xzXHB7Wn1ccHtMb31dL3UiCgkgKiBpZiBQQ1JFIHVuaWNvZGUgc3VwcG9ydCBpcyB0dXJuZWQgT04gKCJcUCIgaXMgdGhlIG5lZ2F0ZSBjbGFzcyBvZiAiXHAiKToKCSAqICAgICAgXHMgICAgIDogYW55IHdoaXRlc3BhY2UgY2hhcmFjdGVyCgkgKiAgICAgIFxwe1p9ICA6IGFueSBzZXBhcmF0b3IKCSAqICAgICAgXHB7TG99IDogVW5pY29kZSBsZXR0ZXIgb3IgaWRlb2dyYXBoIHRoYXQgZG9lcyBub3QgaGF2ZSBsb3dlcmNhc2UgYW5kIHVwcGVyY2FzZSB2YXJpYW50cy4gSXMgdXNlZCB0byBjaHVuayBjaGluZXNlIHdvcmRzLgoJICogICAgICBceGEwICAgOiBVbmljb2RlIENoYXJhY3RlciAnTk8tQlJFQUsgU1BBQ0UnIChVKzAwQTApCgkgKiA8L3ByZT4KCSAqIEBwYXJhbSAkcmUgKHN0cmluZykgcmVndWxhciBleHByZXNzaW9uIChsZWF2ZSBlbXB0eSBmb3IgZGVmYXVsdCkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC42LjAxNiAoMjAwOS0wNi0xNSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldFNwYWNlc1JFKCRyZT0nL1teXFNceGEwXS8nKSB7CgkJJHRoaXMtPnJlX3NwYWNlcyA9ICRyZTsKCQkkcmVfcGFydHMgPSBleHBsb2RlKCcvJywgJHJlKTsKCQkvLyBnZXQgcGF0dGVybiBwYXJ0cwoJCSR0aGlzLT5yZV9zcGFjZSA9IGFycmF5KCk7CgkJaWYgKGlzc2V0KCRyZV9wYXJ0c1sxXSkgQU5EICFlbXB0eSgkcmVfcGFydHNbMV0pKSB7CgkJCSR0aGlzLT5yZV9zcGFjZVsncCddID0gJHJlX3BhcnRzWzFdOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5yZV9zcGFjZVsncCddID0gJ1tcc10nOwoJCX0KCQkvLyBzZXQgcGF0dGVybiBtb2RpZmllcnMKCQlpZiAoaXNzZXQoJHJlX3BhcnRzWzJdKSBBTkQgIWVtcHR5KCRyZV9wYXJ0c1syXSkpIHsKCQkJJHRoaXMtPnJlX3NwYWNlWydtJ10gPSAkcmVfcGFydHNbMl07CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnJlX3NwYWNlWydtJ10gPSAnJzsKCQl9Cgl9CgoJLyoqCgkgKiBFbmFibGUgb3IgZGlzYWJsZSBSaWdodC1Uby1MZWZ0IGxhbmd1YWdlIG1vZGUKCSAqIEBwYXJhbSAkZW5hYmxlIChCb29sZWFuKSBpZiB0cnVlIGVuYWJsZSBSaWdodC1Uby1MZWZ0IGxhbmd1YWdlIG1vZGUuCgkgKiBAcGFyYW0gJHJlc2V0eCAoQm9vbGVhbikgaWYgdHJ1ZSByZXNldCB0aGUgWCBwb3NpdGlvbiBvbiBkaXJlY3Rpb24gY2hhbmdlLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRSVEwoJGVuYWJsZSwgJHJlc2V0eD10cnVlKSB7CgkJJGVuYWJsZSA9ICRlbmFibGUgPyB0cnVlIDogZmFsc2U7CgkJJHJlc2V0eCA9ICgkcmVzZXR4IEFORCAoJGVuYWJsZSAhPSAkdGhpcy0+cnRsKSk7CgkJJHRoaXMtPnJ0bCA9ICRlbmFibGU7CgkJJHRoaXMtPnRtcHJ0bCA9IGZhbHNlOwoJCWlmICgkcmVzZXR4KSB7CgkJCSR0aGlzLT5MbigwKTsKCQl9Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIFJUTCBzdGF0dXMKCSAqIEByZXR1cm4gYm9vbGVhbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMTIgKDIwMDgtMDctMjQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRSVEwoKSB7CgkJcmV0dXJuICR0aGlzLT5ydGw7Cgl9CgoJLyoqCgkgKiBGb3JjZSB0ZW1wb3JhcnkgUlRMIGxhbmd1YWdlIGRpcmVjdGlvbgoJICogQHBhcmFtICRtb2RlIChtaXhlZCkgY2FuIGJlIGZhbHNlLCAnTCcgZm9yIExUUiBvciAnUicgZm9yIFJUTAoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDkpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRUZW1wUlRMKCRtb2RlKSB7CgkJJG5ld21vZGUgPSBmYWxzZTsKCQlzd2l0Y2ggKHN0cnRvdXBwZXIoJG1vZGUpKSB7CgkJCWNhc2UgJ0xUUic6CgkJCWNhc2UgJ0wnOiB7CgkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCSRuZXdtb2RlID0gJ0wnOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnUlRMJzoKCQkJY2FzZSAnUic6IHsKCQkJCWlmICghJHRoaXMtPnJ0bCkgewoJCQkJCSRuZXdtb2RlID0gJ1InOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSBmYWxzZToKCQkJZGVmYXVsdDogewoJCQkJJG5ld21vZGUgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT50bXBydGwgPSAkbmV3bW9kZTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgY3VycmVudCB0ZW1wb3JhcnkgUlRMIHN0YXR1cwoJICogQHJldHVybiBib29sZWFuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC44LjAxNCAoMjAwOS0xMS0wNCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGlzUlRMVGV4dERpcigpIHsKCQlyZXR1cm4gKCR0aGlzLT5ydGwgT1IgKCR0aGlzLT50bXBydGwgPT0gJ1InKSk7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGxhc3QgY2VsbCBoZWlnaHQuCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBjZWxsIGhlaWdodC4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41My4wLlRDMDM0CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRMYXN0SCgkaCkgewoJCSR0aGlzLT5sYXN0aCA9ICRoOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBjZWxsIGhlaWdodAoJICogQHBhcmFtICRmb250c2l6ZSAoaW50KSBGb250IHNpemUgaW4gaW50ZXJuYWwgdW5pdHMKCSAqIEBwYXJhbSAkcGFkZGluZyAoYm9vbGVhbikgSWYgdHJ1ZSBhZGQgY2VsbCBwYWRkaW5nCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDZWxsSGVpZ2h0KCRmb250c2l6ZSwgJHBhZGRpbmc9VFJVRSkgewoJCSRoZWlnaHQgPSAoJGZvbnRzaXplICogJHRoaXMtPmNlbGxfaGVpZ2h0X3JhdGlvKTsKCQlpZiAoJHBhZGRpbmcpIHsKCQkJJGhlaWdodCArPSAoJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddICsgJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddKTsKCQl9CgkJcmV0dXJuIHJvdW5kKCRoZWlnaHQsIDMpOwoJfQoKCS8qKgoJICogUmVzZXQgdGhlIGxhc3QgY2VsbCBoZWlnaHQuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAwMCAoMjAxMC0xMC0wMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlc2V0TGFzdEgoKSB7CgkJJHRoaXMtPmxhc3RoID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHRoaXMtPkZvbnRTaXplKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgbGFzdCBjZWxsIGhlaWdodC4KCSAqIEByZXR1cm4gbGFzdCBjZWxsIGhlaWdodAoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMTcgKDIwMDgtMDgtMDUpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRMYXN0SCgpIHsKCQlyZXR1cm4gJHRoaXMtPmxhc3RoOwoJfQoKCS8qKgoJICogU2V0IHRoZSBhZGp1c3RpbmcgZmFjdG9yIHRvIGNvbnZlcnQgcGl4ZWxzIHRvIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJHNjYWxlIChmbG9hdCkgYWRqdXN0aW5nIGZhY3RvciB0byBjb252ZXJ0IHBpeGVscyB0byB1c2VyIHVuaXRzLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUuMgoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0SW1hZ2VTY2FsZSgkc2NhbGUpIHsKCQkkdGhpcy0+aW1nc2NhbGUgPSAkc2NhbGU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBhZGp1c3RpbmcgZmFjdG9yIHRvIGNvbnZlcnQgcGl4ZWxzIHRvIHVzZXIgdW5pdHMuCgkgKiBAcmV0dXJuIGZsb2F0IGFkanVzdGluZyBmYWN0b3IgdG8gY29udmVydCBwaXhlbHMgdG8gdXNlciB1bml0cy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41LjIKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEltYWdlU2NhbGUoKSB7CgkJcmV0dXJuICR0aGlzLT5pbWdzY2FsZTsKCX0KCgkvKioKCSAqIFJldHVybnMgYW4gYXJyYXkgb2YgcGFnZSBkaW1lbnNpb25zOgoJICogPHVsPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3cnXSA9IHBhZ2Ugd2lkdGggaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydoJ10gPSBoZWlnaHQgaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd3ayddID0gcGFnZSB3aWR0aCBpbiB1c2VyIHVuaXRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydoayddID0gcGFnZSBoZWlnaHQgaW4gdXNlciB1bml0czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndG0nXSA9IHRvcCBtYXJnaW48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ2JtJ10gPSBib3R0b20gbWFyZ2luPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydsbSddID0gbGVmdCBtYXJnaW48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3JtJ10gPSByaWdodCBtYXJnaW48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3BiJ10gPSBhdXRvIHBhZ2UgYnJlYWs8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ29yJ10gPSBwYWdlIG9yaWVudGF0aW9uPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSA9IG9yaWdpbmFsIGxlZnQgbWFyZ2luPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXSA9IG9yaWdpbmFsIHJpZ2h0IG1hcmdpbjwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnUm90YXRlJ10gPSBUaGUgbnVtYmVyIG9mIGRlZ3JlZXMgYnkgd2hpY2ggdGhlIHBhZ2Ugc2hhbGwgYmUgcm90YXRlZCBjbG9ja3dpc2Ugd2hlbiBkaXNwbGF5ZWQgb3IgcHJpbnRlZC4gVGhlIHZhbHVlIHNoYWxsIGJlIGEgbXVsdGlwbGUgb2YgOTAuPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydQWiddID0gVGhlIHBhZ2UncyBwcmVmZXJyZWQgem9vbSAobWFnbmlmaWNhdGlvbikgZmFjdG9yLjwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXSA6IHRoZSBzdHlsZSBhbmQgZHVyYXRpb24gb2YgdGhlIHZpc3VhbCB0cmFuc2l0aW9uIHRvIHVzZSB3aGVuIG1vdmluZyBmcm9tIGFub3RoZXIgcGFnZSB0byB0aGUgZ2l2ZW4gcGFnZSBkdXJpbmcgYSBwcmVzZW50YXRpb248dWw+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRHVyJ10gPSBUaGUgcGFnZSdzIGRpc3BsYXkgZHVyYXRpb24gKGFsc28gY2FsbGVkIGl0cyBhZHZhbmNlIHRpbWluZyk6IHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aW1lLCBpbiBzZWNvbmRzLCB0aGF0IHRoZSBwYWdlIHNoYWxsIGJlIGRpc3BsYXllZCBkdXJpbmcgcHJlc2VudGF0aW9ucyBiZWZvcmUgdGhlIHZpZXdlciBhcHBsaWNhdGlvbiBzaGFsbCBhdXRvbWF0aWNhbGx5IGFkdmFuY2UgdG8gdGhlIG5leHQgcGFnZS48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RyYW5zJ11bJ1MnXSA9IHRyYW5zaXRpb24gc3R5bGUgOiBTcGxpdCwgQmxpbmRzLCBCb3gsIFdpcGUsIERpc3NvbHZlLCBHbGl0dGVyLCBSLCBGbHksIFB1c2gsIENvdmVyLCBVbmNvdmVyLCBGYWRlPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0cmFucyddWydEJ10gPSBUaGUgZHVyYXRpb24gb2YgdGhlIHRyYW5zaXRpb24gZWZmZWN0LCBpbiBzZWNvbmRzLjwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndHJhbnMnXVsnRG0nXSA9IChTcGxpdCBhbmQgQmxpbmRzIHRyYW5zaXRpb24gc3R5bGVzIG9ubHkpIFRoZSBkaW1lbnNpb24gaW4gd2hpY2ggdGhlIHNwZWNpZmllZCB0cmFuc2l0aW9uIGVmZmVjdCBzaGFsbCBvY2N1cjogSCA9IEhvcml6b250YWwsIFYgPSBWZXJ0aWNhbC4gRGVmYXVsdCB2YWx1ZTogSC48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RyYW5zJ11bJ00nXSA9IChTcGxpdCwgQm94IGFuZCBGbHkgdHJhbnNpdGlvbiBzdHlsZXMgb25seSkgVGhlIGRpcmVjdGlvbiBvZiBtb3Rpb24gZm9yIHRoZSBzcGVjaWZpZWQgdHJhbnNpdGlvbiBlZmZlY3Q6IEkgPSBJbndhcmQgZnJvbSB0aGUgZWRnZXMgb2YgdGhlIHBhZ2UsIE8gPSBPdXR3YXJkIGZyb20gdGhlIGNlbnRlciBvZiB0aGUgcGFnZURlZmF1bHQgdmFsdWU6IEkuPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0cmFucyddWydEaSddID0gKFdpcGUsIEdsaXR0ZXIsIEZseSwgQ292ZXIsIFVuY292ZXIgYW5kIFB1c2ggdHJhbnNpdGlvbiBzdHlsZXMgb25seSkgVGhlIGRpcmVjdGlvbiBpbiB3aGljaCB0aGUgc3BlY2lmaWVkIHRyYW5zaXRpb24gZWZmZWN0IHNoYWxsIG1vdmVzLCBleHByZXNzZWQgaW4gZGVncmVlcyBjb3VudGVyY2xvY2t3aXNlIHN0YXJ0aW5nIGZyb20gYSBsZWZ0LXRvLXJpZ2h0IGRpcmVjdGlvbi4gSWYgdGhlIHZhbHVlIGlzIGEgbnVtYmVyLCBpdCBzaGFsbCBiZSBvbmUgb2Y6IDAgPSBMZWZ0IHRvIHJpZ2h0LCA5MCA9IEJvdHRvbSB0byB0b3AgKFdpcGUgb25seSksIDE4MCA9IFJpZ2h0IHRvIGxlZnQgKFdpcGUgb25seSksIDI3MCA9IFRvcCB0byBib3R0b20sIDMxNSA9IFRvcC1sZWZ0IHRvIGJvdHRvbS1yaWdodCAoR2xpdHRlciBvbmx5KS4gSWYgdGhlIHZhbHVlIGlzIGEgbmFtZSwgaXQgc2hhbGwgYmUgTm9uZSwgd2hpY2ggaXMgcmVsZXZhbnQgb25seSBmb3IgdGhlIEZseSB0cmFuc2l0aW9uIHdoZW4gdGhlIHZhbHVlIG9mIFNTIGlzIG5vdCAxLjAuIERlZmF1bHQgdmFsdWU6IDAuPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0cmFucyddWydTUyddID0gKEZseSB0cmFuc2l0aW9uIHN0eWxlIG9ubHkpIFRoZSBzdGFydGluZyBvciBlbmRpbmcgc2NhbGUgYXQgd2hpY2ggdGhlIGNoYW5nZXMgc2hhbGwgYmUgZHJhd24uIElmIE0gc3BlY2lmaWVzIGFuIGlud2FyZCB0cmFuc2l0aW9uLCB0aGUgc2NhbGUgb2YgdGhlIGNoYW5nZXMgZHJhd24gc2hhbGwgcHJvZ3Jlc3MgZnJvbSBTUyB0byAxLjAgb3ZlciB0aGUgY291cnNlIG9mIHRoZSB0cmFuc2l0aW9uLiBJZiBNIHNwZWNpZmllcyBhbiBvdXR3YXJkIHRyYW5zaXRpb24sIHRoZSBzY2FsZSBvZiB0aGUgY2hhbmdlcyBkcmF3biBzaGFsbCBwcm9ncmVzcyBmcm9tIDEuMCB0byBTUyBvdmVyIHRoZSBjb3Vyc2Ugb2YgdGhlIHRyYW5zaXRpb24uIERlZmF1bHQ6IDEuMC4gPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0cmFucyddWydCJ10gPSAoRmx5IHRyYW5zaXRpb24gc3R5bGUgb25seSkgSWYgdHJ1ZSwgdGhlIGFyZWEgdGhhdCBzaGFsbCBiZSBmbG93biBpbiBpcyByZWN0YW5ndWxhciBhbmQgb3BhcXVlLiBEZWZhdWx0OiBmYWxzZS48L2xpPjwvdWw+PC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddIDogdGhlIGJvdW5kYXJpZXMgb2YgdGhlIHBoeXNpY2FsIG1lZGl1bSBvbiB3aGljaCB0aGUgcGFnZSBzaGFsbCBiZSBkaXNwbGF5ZWQgb3IgcHJpbnRlZDx1bD48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydNZWRpYUJveCddWydsbHgnXSA9IGxvd2VyLWxlZnQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnTWVkaWFCb3gnXVsnbGx5J10gPSBsb3dlci1sZWZ0IHkgY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ01lZGlhQm94J11bJ3VyeCddID0gdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnTWVkaWFCb3gnXVsndXJ5J10gPSB1cHBlci1yaWdodCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT48L3VsPjwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddIDogdGhlIHZpc2libGUgcmVnaW9uIG9mIGRlZmF1bHQgdXNlciBzcGFjZTx1bD48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ2xseCddID0gbG93ZXItbGVmdCB4IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ2xseSddID0gbG93ZXItbGVmdCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydDcm9wQm94J11bJ3VyeCddID0gdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQ3JvcEJveCddWyd1cnknXSA9IHVwcGVyLXJpZ2h0IHkgY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjwvdWw+PC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydCbGVlZEJveCddIDogdGhlIHJlZ2lvbiB0byB3aGljaCB0aGUgY29udGVudHMgb2YgdGhlIHBhZ2Ugc2hhbGwgYmUgY2xpcHBlZCB3aGVuIG91dHB1dCBpbiBhIHByb2R1Y3Rpb24gZW52aXJvbm1lbnQ8dWw+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQmxlZWRCb3gnXVsnbGx4J10gPSBsb3dlci1sZWZ0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0JsZWVkQm94J11bJ2xseSddID0gbG93ZXItbGVmdCB5IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydCbGVlZEJveCddWyd1cngnXSA9IHVwcGVyLXJpZ2h0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0JsZWVkQm94J11bJ3VyeSddID0gdXBwZXItcmlnaHQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PC91bD48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1RyaW1Cb3gnXSA6IHRoZSBpbnRlbmRlZCBkaW1lbnNpb25zIG9mIHRoZSBmaW5pc2hlZCBwYWdlIGFmdGVyIHRyaW1taW5nPHVsPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1RyaW1Cb3gnXVsnbGx4J10gPSBsb3dlci1sZWZ0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1RyaW1Cb3gnXVsnbGx5J10gPSBsb3dlci1sZWZ0IHkgY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ1RyaW1Cb3gnXVsndXJ4J10gPSB1cHBlci1yaWdodCB4IGNvb3JkaW5hdGUgaW4gcG9pbnRzPC9saT48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydUcmltQm94J11bJ3VyeSddID0gdXBwZXItcmlnaHQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PC91bD48L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0FydEJveCddIDogdGhlIGV4dGVudCBvZiB0aGUgcGFnZSdzIG1lYW5pbmdmdWwgY29udGVudDx1bD48bGk+JHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydBcnRCb3gnXVsnbGx4J10gPSBsb3dlci1sZWZ0IHggY29vcmRpbmF0ZSBpbiBwb2ludHM8L2xpPjxsaT4kdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ0FydEJveCddWydsbHknXSA9IGxvd2VyLWxlZnQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQXJ0Qm94J11bJ3VyeCddID0gdXBwZXItcmlnaHQgeCBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PGxpPiR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnQXJ0Qm94J11bJ3VyeSddID0gdXBwZXItcmlnaHQgeSBjb29yZGluYXRlIGluIHBvaW50czwvbGk+PC91bD48L2xpPjwvdWw+CgkgKiBAcGFyYW0gJHBhZ2VudW0gKGludCkgcGFnZSBudW1iZXIgKGVtcHR5ID0gY3VycmVudCBwYWdlKQoJICogQHJldHVybiBhcnJheSBvZiBwYWdlIGRpbWVuc2lvbnMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuNS4wMjcgKDIwMDktMDMtMTYpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlRGltZW5zaW9ucygkcGFnZW51bT0nJykgewoJCWlmIChlbXB0eSgkcGFnZW51bSkpIHsKCQkJJHBhZ2VudW0gPSAkdGhpcy0+cGFnZTsKCQl9CgkJcmV0dXJuICR0aGlzLT5wYWdlZGltWyRwYWdlbnVtXTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHBhZ2Ugd2lkdGggaW4gdW5pdHMuCgkgKiBAcGFyYW0gJHBhZ2VudW0gKGludCkgcGFnZSBudW1iZXIgKGVtcHR5ID0gY3VycmVudCBwYWdlKQoJICogQHJldHVybiBpbnQgcGFnZSB3aWR0aC4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41LjIKCSAqIEBzZWUgZ2V0UGFnZURpbWVuc2lvbnMoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGFnZVdpZHRoKCRwYWdlbnVtPScnKSB7CgkJaWYgKGVtcHR5KCRwYWdlbnVtKSkgewoJCQlyZXR1cm4gJHRoaXMtPnc7CgkJfQoJCXJldHVybiAkdGhpcy0+cGFnZWRpbVskcGFnZW51bV1bJ3cnXTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHBhZ2UgaGVpZ2h0IGluIHVuaXRzLgoJICogQHBhcmFtICRwYWdlbnVtIChpbnQpIHBhZ2UgbnVtYmVyIChlbXB0eSA9IGN1cnJlbnQgcGFnZSkKCSAqIEByZXR1cm4gaW50IHBhZ2UgaGVpZ2h0LgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUuMgoJICogQHNlZSBnZXRQYWdlRGltZW5zaW9ucygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlSGVpZ2h0KCRwYWdlbnVtPScnKSB7CgkJaWYgKGVtcHR5KCRwYWdlbnVtKSkgewoJCQlyZXR1cm4gJHRoaXMtPmg7CgkJfQoJCXJldHVybiAkdGhpcy0+cGFnZWRpbVskcGFnZW51bV1bJ2gnXTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHBhZ2UgYnJlYWsgbWFyZ2luLgoJICogQHBhcmFtICRwYWdlbnVtIChpbnQpIHBhZ2UgbnVtYmVyIChlbXB0eSA9IGN1cnJlbnQgcGFnZSkKCSAqIEByZXR1cm4gaW50IHBhZ2UgYnJlYWsgbWFyZ2luLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUuMgoJICogQHNlZSBnZXRQYWdlRGltZW5zaW9ucygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCcmVha01hcmdpbigkcGFnZW51bT0nJykgewoJCWlmIChlbXB0eSgkcGFnZW51bSkpIHsKCQkJcmV0dXJuICR0aGlzLT5iTWFyZ2luOwoJCX0KCQlyZXR1cm4gJHRoaXMtPnBhZ2VkaW1bJHBhZ2VudW1dWydibSddOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgc2NhbGUgZmFjdG9yIChudW1iZXIgb2YgcG9pbnRzIGluIHVzZXIgdW5pdCkuCgkgKiBAcmV0dXJuIGludCBzY2FsZSBmYWN0b3IuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuNS4yCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRTY2FsZUZhY3RvcigpIHsKCQlyZXR1cm4gJHRoaXMtPms7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBsZWZ0LCB0b3AgYW5kIHJpZ2h0IG1hcmdpbnMuCgkgKiBAcGFyYW0gJGxlZnQgKGZsb2F0KSBMZWZ0IG1hcmdpbi4KCSAqIEBwYXJhbSAkdG9wIChmbG9hdCkgVG9wIG1hcmdpbi4KCSAqIEBwYXJhbSAkcmlnaHQgKGZsb2F0KSBSaWdodCBtYXJnaW4uIERlZmF1bHQgdmFsdWUgaXMgdGhlIGxlZnQgb25lLgoJICogQHBhcmFtICRrZWVwbWFyZ2lucyAoYm9vbGVhbikgaWYgdHJ1ZSBvdmVyd3JpdGVzIHRoZSBkZWZhdWx0IHBhZ2UgbWFyZ2lucwoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBTZXRMZWZ0TWFyZ2luKCksIFNldFRvcE1hcmdpbigpLCBTZXRSaWdodE1hcmdpbigpLCBTZXRBdXRvUGFnZUJyZWFrKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldE1hcmdpbnMoJGxlZnQsICR0b3AsICRyaWdodD0tMSwgJGtlZXBtYXJnaW5zPWZhbHNlKSB7CgkJLy9TZXQgbGVmdCwgdG9wIGFuZCByaWdodCBtYXJnaW5zCgkJJHRoaXMtPmxNYXJnaW4gPSAkbGVmdDsKCQkkdGhpcy0+dE1hcmdpbiA9ICR0b3A7CgkJaWYgKCRyaWdodCA9PSAtMSkgewoJCQkkcmlnaHQgPSAkbGVmdDsKCQl9CgkJJHRoaXMtPnJNYXJnaW4gPSAkcmlnaHQ7CgkJaWYgKCRrZWVwbWFyZ2lucykgewoJCQkvLyBvdmVyd3JpdGUgb3JpZ2luYWwgdmFsdWVzCgkJCSR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luID0gJHRoaXMtPmxNYXJnaW47CgkJCSR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luID0gJHRoaXMtPnJNYXJnaW47CgkJfQoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgbGVmdCBtYXJnaW4uIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHBhZ2UuIElmIHRoZSBjdXJyZW50IGFic2Npc3NhIGdldHMgb3V0IG9mIHBhZ2UsIGl0IGlzIGJyb3VnaHQgYmFjayB0byB0aGUgbWFyZ2luLgoJICogQHBhcmFtICRtYXJnaW4gKGZsb2F0KSBUaGUgbWFyZ2luLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuNAoJICogQHNlZSBTZXRUb3BNYXJnaW4oKSwgU2V0UmlnaHRNYXJnaW4oKSwgU2V0QXV0b1BhZ2VCcmVhaygpLCBTZXRNYXJnaW5zKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldExlZnRNYXJnaW4oJG1hcmdpbikgewoJCS8vU2V0IGxlZnQgbWFyZ2luCgkJJHRoaXMtPmxNYXJnaW4gPSAkbWFyZ2luOwoJCWlmICgoJHRoaXMtPnBhZ2UgPiAwKSBBTkQgKCR0aGlzLT54IDwgJG1hcmdpbikpIHsKCQkJJHRoaXMtPnggPSAkbWFyZ2luOwoJCX0KCX0KCgkvKioKCSAqIERlZmluZXMgdGhlIHRvcCBtYXJnaW4uIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHBhZ2UuCgkgKiBAcGFyYW0gJG1hcmdpbiAoZmxvYXQpIFRoZSBtYXJnaW4uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41CgkgKiBAc2VlIFNldExlZnRNYXJnaW4oKSwgU2V0UmlnaHRNYXJnaW4oKSwgU2V0QXV0b1BhZ2VCcmVhaygpLCBTZXRNYXJnaW5zKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldFRvcE1hcmdpbigkbWFyZ2luKSB7CgkJLy9TZXQgdG9wIG1hcmdpbgoJCSR0aGlzLT50TWFyZ2luID0gJG1hcmdpbjsKCQlpZiAoKCR0aGlzLT5wYWdlID4gMCkgQU5EICgkdGhpcy0+eSA8ICRtYXJnaW4pKSB7CgkJCSR0aGlzLT55ID0gJG1hcmdpbjsKCQl9Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSByaWdodCBtYXJnaW4uIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGhlIGZpcnN0IHBhZ2UuCgkgKiBAcGFyYW0gJG1hcmdpbiAoZmxvYXQpIFRoZSBtYXJnaW4uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41CgkgKiBAc2VlIFNldExlZnRNYXJnaW4oKSwgU2V0VG9wTWFyZ2luKCksIFNldEF1dG9QYWdlQnJlYWsoKSwgU2V0TWFyZ2lucygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRSaWdodE1hcmdpbigkbWFyZ2luKSB7CgkJJHRoaXMtPnJNYXJnaW4gPSAkbWFyZ2luOwoJCWlmICgoJHRoaXMtPnBhZ2UgPiAwKSBBTkQgKCR0aGlzLT54ID4gKCR0aGlzLT53IC0gJG1hcmdpbikpKSB7CgkJCSR0aGlzLT54ID0gJHRoaXMtPncgLSAkbWFyZ2luOwoJCX0KCX0KCgkvKioKCSAqIFNldCB0aGUgc2FtZSBpbnRlcm5hbCBDZWxsIHBhZGRpbmcgZm9yIHRvcCwgcmlnaHQsIGJvdHRvbSwgbGVmdC0KCSAqIEBwYXJhbSAkcGFkIChmbG9hdCkgaW50ZXJuYWwgcGFkZGluZy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA5KQoJICogQHNlZSBnZXRDZWxsUGFkZGluZ3MoKSwgc2V0Q2VsbFBhZGRpbmdzKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldENlbGxQYWRkaW5nKCRwYWQpIHsKCQlpZiAoJHBhZCA+PSAwKSB7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSA9ICRwYWQ7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXSA9ICRwYWQ7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSA9ICRwYWQ7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ0InXSA9ICRwYWQ7CgkJfQoJfQoKCS8qKgoJICogU2V0IHRoZSBpbnRlcm5hbCBDZWxsIHBhZGRpbmdzLgoJICogQHBhcmFtICRsZWZ0IChmbG9hdCkgbGVmdCBwYWRkaW5nCgkgKiBAcGFyYW0gJHRvcCAoZmxvYXQpIHRvcCBwYWRkaW5nCgkgKiBAcGFyYW0gJHJpZ2h0IChmbG9hdCkgcmlnaHQgcGFkZGluZwoJICogQHBhcmFtICRib3R0b20gKGZsb2F0KSBib3R0b20gcGFkZGluZwoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDMpCgkgKiBAc2VlIGdldENlbGxQYWRkaW5ncygpLCBTZXRDZWxsUGFkZGluZygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRDZWxsUGFkZGluZ3MoJGxlZnQ9JycsICR0b3A9JycsICRyaWdodD0nJywgJGJvdHRvbT0nJykgewoJCWlmICgoJGxlZnQgIT09ICcnKSBBTkQgKCRsZWZ0ID49IDApKSB7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSA9ICRsZWZ0OwoJCX0KCQlpZiAoKCR0b3AgIT09ICcnKSBBTkQgKCR0b3AgPj0gMCkpIHsKCQkJJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddID0gJHRvcDsKCQl9CgkJaWYgKCgkcmlnaHQgIT09ICcnKSBBTkQgKCRyaWdodCA+PSAwKSkgewoJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ10gPSAkcmlnaHQ7CgkJfQoJCWlmICgoJGJvdHRvbSAhPT0gJycpIEFORCAoJGJvdHRvbSA+PSAwKSkgewoJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nWydCJ10gPSAkYm90dG9tOwoJCX0KCX0KCgkvKioKCSAqIEdldCB0aGUgaW50ZXJuYWwgQ2VsbCBwYWRkaW5nIGFycmF5LgoJICogQHJldHVybiBhcnJheSBvZiBwYWRkaW5nIHZhbHVlcwoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDMpCgkgKiBAc2VlIHNldENlbGxQYWRkaW5ncygpLCBTZXRDZWxsUGFkZGluZygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDZWxsUGFkZGluZ3MoKSB7CgkJcmV0dXJuICR0aGlzLT5jZWxsX3BhZGRpbmc7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGludGVybmFsIENlbGwgbWFyZ2lucy4KCSAqIEBwYXJhbSAkbGVmdCAoZmxvYXQpIGxlZnQgbWFyZ2luCgkgKiBAcGFyYW0gJHRvcCAoZmxvYXQpIHRvcCBtYXJnaW4KCSAqIEBwYXJhbSAkcmlnaHQgKGZsb2F0KSByaWdodCBtYXJnaW4KCSAqIEBwYXJhbSAkYm90dG9tIChmbG9hdCkgYm90dG9tIG1hcmdpbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDMpCgkgKiBAc2VlIGdldENlbGxNYXJnaW5zKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldENlbGxNYXJnaW5zKCRsZWZ0PScnLCAkdG9wPScnLCAkcmlnaHQ9JycsICRib3R0b209JycpIHsKCQlpZiAoKCRsZWZ0ICE9PSAnJykgQU5EICgkbGVmdCA+PSAwKSkgewoJCQkkdGhpcy0+Y2VsbF9tYXJnaW5bJ0wnXSA9ICRsZWZ0OwoJCX0KCQlpZiAoKCR0b3AgIT09ICcnKSBBTkQgKCR0b3AgPj0gMCkpIHsKCQkJJHRoaXMtPmNlbGxfbWFyZ2luWydUJ10gPSAkdG9wOwoJCX0KCQlpZiAoKCRyaWdodCAhPT0gJycpIEFORCAoJHJpZ2h0ID49IDApKSB7CgkJCSR0aGlzLT5jZWxsX21hcmdpblsnUiddID0gJHJpZ2h0OwoJCX0KCQlpZiAoKCRib3R0b20gIT09ICcnKSBBTkQgKCRib3R0b20gPj0gMCkpIHsKCQkJJHRoaXMtPmNlbGxfbWFyZ2luWydCJ10gPSAkYm90dG9tOwoJCX0KCX0KCgkvKioKCSAqIEdldCB0aGUgaW50ZXJuYWwgQ2VsbCBtYXJnaW4gYXJyYXkuCgkgKiBAcmV0dXJuIGFycmF5IG9mIG1hcmdpbiB2YWx1ZXMKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTEwLTAzKQoJICogQHNlZSBzZXRDZWxsTWFyZ2lucygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDZWxsTWFyZ2lucygpIHsKCQlyZXR1cm4gJHRoaXMtPmNlbGxfbWFyZ2luOwoJfQoKCS8qKgoJICogQWRqdXN0IHRoZSBpbnRlcm5hbCBDZWxsIHBhZGRpbmcgYXJyYXkgdG8gdGFrZSBhY2NvdW50IG9mIHRoZSBsaW5lIHdpZHRoLgoJICogQHBhcmFtICRicmQgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcmV0dXJuIGFycmF5IG9mIGFkanVzdG1lbnRzCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAwMCAoMjAxMC0xMC0wMykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGFkanVzdENlbGxQYWRkaW5nKCRicmQ9MCkgewoJCWlmIChlbXB0eSgkYnJkKSkgewoJCQlyZXR1cm47CgkJfQoJCWlmIChpc19zdHJpbmcoJGJyZCkpIHsKCQkJLy8gY29udmVydCBzdHJpbmcgdG8gYXJyYXkKCQkJJHNsZW4gPSBzdHJsZW4oJGJyZCk7CgkJCSRuZXdicmQgPSBhcnJheSgpOwoJCQlmb3IgKCRpID0gMDsgJGkgPCAkc2xlbjsgKyskaSkgewoJCQkJJG5ld2JyZFskYnJkWyRpXV0gPSB0cnVlOwoJCQl9CgkJCSRicmQgPSAkbmV3YnJkOwoJCX0gZWxzZWlmICgoJGJyZCA9PT0gMSkgT1IgKCRicmQgPT09IHRydWUpIE9SIChpc19udW1lcmljKCRicmQpIEFORCAoaW50dmFsKCRicmQpID4gMCkpKSB7CgkJCSRicmQgPSBhcnJheSgnTFJUQicgPT4gdHJ1ZSk7CgkJfQoJCWlmICghaXNfYXJyYXkoJGJyZCkpIHsKCQkJcmV0dXJuOwoJCX0KCQkvLyBzdG9yZSBjdXJyZW50IGNlbGwgcGFkZGluZwoJCSRjcCA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJLy8gc2VsZWN0IGJvcmRlciBtb2RlCgkJaWYgKGlzc2V0KCRicmRbJ21vZGUnXSkpIHsKCQkJJG1vZGUgPSAkYnJkWydtb2RlJ107CgkJCXVuc2V0KCRicmRbJ21vZGUnXSk7CgkJfSBlbHNlIHsKCQkJJG1vZGUgPSAnbm9ybWFsJzsKCQl9CgkJLy8gcHJvY2VzcyBib3JkZXJzCgkJZm9yZWFjaCAoJGJyZCBhcyAkYm9yZGVyID0+ICRzdHlsZSkgewoJCQkkbGluZV93aWR0aCA9ICR0aGlzLT5MaW5lV2lkdGg7CgkJCWlmIChpc19hcnJheSgkc3R5bGUpIEFORCBpc3NldCgkc3R5bGVbJ3dpZHRoJ10pKSB7CgkJCQkvLyBnZXQgYm9yZGVyIHdpZHRoCgkJCQkkbGluZV93aWR0aCA9ICRzdHlsZVsnd2lkdGgnXTsKCQkJfQoJCQkkYWRqID0gMDsgLy8gbGluZSB3aWR0aCBpbnNpZGUgdGhlIGNlbGwKCQkJc3dpdGNoICgkbW9kZSkgewoJCQkJY2FzZSAnZXh0JzogewoJCQkJCSRhZGogPSAwOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnaW50JzogewoJCQkJCSRhZGogPSAkbGluZV93aWR0aDsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ25vcm1hbCc6CgkJCQlkZWZhdWx0OiB7CgkJCQkJJGFkaiA9ICgkbGluZV93aWR0aCAvIDIpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCS8vIGNvcnJlY3QgaW50ZXJuYWwgY2VsbCBwYWRkaW5nIGlmIHJlcXVpcmVkIHRvIGF2b2lkIG92ZXJsYXAgYmV0d2VlbiB0ZXh0IGFuZCBsaW5lcwoJCQlpZiAoKHN0cnBvcygkYm9yZGVyLCdUJykgIT09IGZhbHNlKSBBTkQgKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXSA8ICRhZGopKSB7CgkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nWydUJ10gPSAkYWRqOwoJCQl9CgkJCWlmICgoc3RycG9zKCRib3JkZXIsJ1InKSAhPT0gZmFsc2UpIEFORCAoJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddIDwgJGFkaikpIHsKCQkJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSA9ICRhZGo7CgkJCX0KCQkJaWYgKChzdHJwb3MoJGJvcmRlciwnQicpICE9PSBmYWxzZSkgQU5EICgkdGhpcy0+Y2VsbF9wYWRkaW5nWydCJ10gPCAkYWRqKSkgewoJCQkJJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddID0gJGFkajsKCQkJfQoJCQlpZiAoKHN0cnBvcygkYm9yZGVyLCdMJykgIT09IGZhbHNlKSBBTkQgKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSA8ICRhZGopKSB7CgkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ10gPSAkYWRqOwoJCQl9CgkJfQoJCXJldHVybiBhcnJheSgnVCcgPT4gKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXSAtICRjcFsnVCddKSwgJ1InID0+ICgkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ10gLSAkY3BbJ1InXSksICdCJyA9PiAoJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddIC0gJGNwWydCJ10pLCAnTCcgPT4gKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICRjcFsnTCddKSk7Cgl9CgoJLyoqCgkgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBhdXRvbWF0aWMgcGFnZSBicmVha2luZyBtb2RlLiBXaGVuIGVuYWJsaW5nLCB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyB0aGUgZGlzdGFuY2UgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRoYXQgZGVmaW5lcyB0aGUgdHJpZ2dlcmluZyBsaW1pdC4gQnkgZGVmYXVsdCwgdGhlIG1vZGUgaXMgb24gYW5kIHRoZSBtYXJnaW4gaXMgMiBjbS4KCSAqIEBwYXJhbSAkYXV0byAoYm9vbGVhbikgQm9vbGVhbiBpbmRpY2F0aW5nIGlmIG1vZGUgc2hvdWxkIGJlIG9uIG9yIG9mZi4KCSAqIEBwYXJhbSAkbWFyZ2luIChmbG9hdCkgRGlzdGFuY2UgZnJvbSB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBDZWxsKCksIE11bHRpQ2VsbCgpLCBBY2NlcHRQYWdlQnJlYWsoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0QXV0b1BhZ2VCcmVhaygkYXV0bywgJG1hcmdpbj0wKSB7CgkJJHRoaXMtPkF1dG9QYWdlQnJlYWsgPSAkYXV0byA/IHRydWUgOiBmYWxzZTsKCQkkdGhpcy0+Yk1hcmdpbiA9ICRtYXJnaW47CgkJJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgPSAkdGhpcy0+aCAtICRtYXJnaW47Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGF1dG8tcGFnZS1icmVhayBtb2RlICh0cnVlIG9yIGZhbHNlKS4KCSAqIEByZXR1cm4gYm9vbGVhbiBhdXRvLXBhZ2UtYnJlYWsgbW9kZQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wODgKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEF1dG9QYWdlQnJlYWsoKSB7CgkJcmV0dXJuICR0aGlzLT5BdXRvUGFnZUJyZWFrOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgd2F5IHRoZSBkb2N1bWVudCBpcyB0byBiZSBkaXNwbGF5ZWQgYnkgdGhlIHZpZXdlci4KCSAqIEBwYXJhbSAkem9vbSAobWl4ZWQpIFRoZSB6b29tIHRvIHVzZS4gSXQgY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHN0cmluZyB2YWx1ZXMgb3IgYSBudW1iZXIgaW5kaWNhdGluZyB0aGUgem9vbWluZyBmYWN0b3IgdG8gdXNlLiA8dWw+PGxpPmZ1bGxwYWdlOiBkaXNwbGF5cyB0aGUgZW50aXJlIHBhZ2Ugb24gc2NyZWVuIDwvbGk+PGxpPmZ1bGx3aWR0aDogdXNlcyBtYXhpbXVtIHdpZHRoIG9mIHdpbmRvdzwvbGk+PGxpPnJlYWw6IHVzZXMgcmVhbCBzaXplIChlcXVpdmFsZW50IHRvIDEwMCUgem9vbSk8L2xpPjxsaT5kZWZhdWx0OiB1c2VzIHZpZXdlciBkZWZhdWx0IG1vZGU8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGxheW91dCAoc3RyaW5nKSBUaGUgcGFnZSBsYXlvdXQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5TaW5nbGVQYWdlIERpc3BsYXkgb25lIHBhZ2UgYXQgYSB0aW1lPC9saT48bGk+T25lQ29sdW1uIERpc3BsYXkgdGhlIHBhZ2VzIGluIG9uZSBjb2x1bW48L2xpPjxsaT5Ud29Db2x1bW5MZWZ0IERpc3BsYXkgdGhlIHBhZ2VzIGluIHR3byBjb2x1bW5zLCB3aXRoIG9kZC1udW1iZXJlZCBwYWdlcyBvbiB0aGUgbGVmdDwvbGk+PGxpPlR3b0NvbHVtblJpZ2h0IERpc3BsYXkgdGhlIHBhZ2VzIGluIHR3byBjb2x1bW5zLCB3aXRoIG9kZC1udW1iZXJlZCBwYWdlcyBvbiB0aGUgcmlnaHQ8L2xpPjxsaT5Ud29QYWdlTGVmdCAoUERGIDEuNSkgRGlzcGxheSB0aGUgcGFnZXMgdHdvIGF0IGEgdGltZSwgd2l0aCBvZGQtbnVtYmVyZWQgcGFnZXMgb24gdGhlIGxlZnQ8L2xpPjxsaT5Ud29QYWdlUmlnaHQgKFBERiAxLjUpIERpc3BsYXkgdGhlIHBhZ2VzIHR3byBhdCBhIHRpbWUsIHdpdGggb2RkLW51bWJlcmVkIHBhZ2VzIG9uIHRoZSByaWdodDwvbGk+PC91bD4KCSAqIEBwYXJhbSAkbW9kZSAoc3RyaW5nKSBBIG5hbWUgb2JqZWN0IHNwZWNpZnlpbmcgaG93IHRoZSBkb2N1bWVudCBzaG91bGQgYmUgZGlzcGxheWVkIHdoZW4gb3BlbmVkOjx1bD48bGk+VXNlTm9uZSBOZWl0aGVyIGRvY3VtZW50IG91dGxpbmUgbm9yIHRodW1ibmFpbCBpbWFnZXMgdmlzaWJsZTwvbGk+PGxpPlVzZU91dGxpbmVzIERvY3VtZW50IG91dGxpbmUgdmlzaWJsZTwvbGk+PGxpPlVzZVRodW1icyBUaHVtYm5haWwgaW1hZ2VzIHZpc2libGU8L2xpPjxsaT5GdWxsU2NyZWVuIEZ1bGwtc2NyZWVuIG1vZGUsIHdpdGggbm8gbWVudSBiYXIsIHdpbmRvdyBjb250cm9scywgb3IgYW55IG90aGVyIHdpbmRvdyB2aXNpYmxlPC9saT48bGk+VXNlT0MgKFBERiAxLjUpIE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgcGFuZWwgdmlzaWJsZTwvbGk+PGxpPlVzZUF0dGFjaG1lbnRzIChQREYgMS42KSBBdHRhY2htZW50cyBwYW5lbCB2aXNpYmxlPC9saT48L3VsPgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMgoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RGlzcGxheU1vZGUoJHpvb20sICRsYXlvdXQ9J1NpbmdsZVBhZ2UnLCAkbW9kZT0nVXNlTm9uZScpIHsKCQlpZiAoKCR6b29tID09ICdmdWxscGFnZScpIE9SICgkem9vbSA9PSAnZnVsbHdpZHRoJykgT1IgKCR6b29tID09ICdyZWFsJykgT1IgKCR6b29tID09ICdkZWZhdWx0JykgT1IgKCFpc19zdHJpbmcoJHpvb20pKSkgewoJCQkkdGhpcy0+Wm9vbU1vZGUgPSAkem9vbTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+RXJyb3IoJ0luY29ycmVjdCB6b29tIGRpc3BsYXkgbW9kZTogJy4kem9vbSk7CgkJfQoJCSR0aGlzLT5MYXlvdXRNb2RlID0gVENQREZfU1RBVElDOjpnZXRQYWdlTGF5b3V0TW9kZSgkbGF5b3V0KTsKCQkkdGhpcy0+UGFnZU1vZGUgPSBUQ1BERl9TVEFUSUM6OmdldFBhZ2VNb2RlKCRtb2RlKTsKCX0KCgkvKioKCSAqIEFjdGl2YXRlcyBvciBkZWFjdGl2YXRlcyBwYWdlIGNvbXByZXNzaW9uLiBXaGVuIGFjdGl2YXRlZCwgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIGVhY2ggcGFnZSBpcyBjb21wcmVzc2VkLCB3aGljaCBsZWFkcyB0byBhIGNvbXByZXNzaW9uIHJhdGlvIG9mIGFib3V0IDIgZm9yIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQuIENvbXByZXNzaW9uIGlzIG9uIGJ5IGRlZmF1bHQuCgkgKiBOb3RlOiB0aGUgWmxpYiBleHRlbnNpb24gaXMgcmVxdWlyZWQgZm9yIHRoaXMgZmVhdHVyZS4gSWYgbm90IHByZXNlbnQsIGNvbXByZXNzaW9uIHdpbGwgYmUgdHVybmVkIG9mZi4KCSAqIEBwYXJhbSAkY29tcHJlc3MgKGJvb2xlYW4pIEJvb2xlYW4gaW5kaWNhdGluZyBpZiBjb21wcmVzc2lvbiBtdXN0IGJlIGVuYWJsZWQuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS40CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRDb21wcmVzc2lvbigkY29tcHJlc3M9dHJ1ZSkgewoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkgewoJCQkkdGhpcy0+Y29tcHJlc3MgPSAkY29tcHJlc3MgPyB0cnVlIDogZmFsc2U7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmNvbXByZXNzID0gZmFsc2U7CgkJfQoJfQoKCS8qKgoJICogU2V0IGZsYWcgdG8gZm9yY2Ugc1JHQl9JRUM2MTk2Ni0yLjEgYmxhY2sgc2NhbGVkIElDQyBjb2xvciBwcm9maWxlIGZvciB0aGUgd2hvbGUgZG9jdW1lbnQuCgkgKiBAcGFyYW0gJG1vZGUgKGJvb2xlYW4pIElmIHRydWUgZm9yY2Ugc1JHQiBvdXRwdXQgaW50ZW50LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xMjEgKDIwMTEtMDktMjgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRTUkdCbW9kZSgkbW9kZT1mYWxzZSkgewoJCSR0aGlzLT5mb3JjZV9zcmdiID0gJG1vZGUgPyB0cnVlIDogZmFsc2U7Cgl9CgoJLyoqCgkgKiBUdXJuIG9uL29mZiBVbmljb2RlIG1vZGUgZm9yIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgKG1ldGEgdGFncykuCgkgKiBUaGlzIGhhcyBlZmZlY3Qgb25seSB3aGVuIHVuaWNvZGUgbW9kZSBpcyBzZXQgdG8gZmFsc2UuCgkgKiBAcGFyYW0gJHVuaWNvZGUgKGJvb2xlYW4pIGlmIHRydWUgc2V0IHRoZSBtZXRhIGluZm9ybWF0aW9uIGluIFVuaWNvZGUKCSAqIEBzaW5jZSA1LjkuMDI3ICgyMDEwLTEyLTAxKQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RG9jSW5mb1VuaWNvZGUoJHVuaWNvZGU9dHJ1ZSkgewoJCSR0aGlzLT5kb2NpbmZvdW5pY29kZSA9ICR1bmljb2RlID8gdHJ1ZSA6IGZhbHNlOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgdGl0bGUgb2YgdGhlIGRvY3VtZW50LgoJICogQHBhcmFtICR0aXRsZSAoc3RyaW5nKSBUaGUgdGl0bGUuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4yCgkgKiBAc2VlIFNldEF1dGhvcigpLCBTZXRDcmVhdG9yKCksIFNldEtleXdvcmRzKCksIFNldFN1YmplY3QoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0VGl0bGUoJHRpdGxlKSB7CgkJJHRoaXMtPnRpdGxlID0gJHRpdGxlOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgc3ViamVjdCBvZiB0aGUgZG9jdW1lbnQuCgkgKiBAcGFyYW0gJHN1YmplY3QgKHN0cmluZykgVGhlIHN1YmplY3QuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4yCgkgKiBAc2VlIFNldEF1dGhvcigpLCBTZXRDcmVhdG9yKCksIFNldEtleXdvcmRzKCksIFNldFRpdGxlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldFN1YmplY3QoJHN1YmplY3QpIHsKCQkkdGhpcy0+c3ViamVjdCA9ICRzdWJqZWN0OwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgYXV0aG9yIG9mIHRoZSBkb2N1bWVudC4KCSAqIEBwYXJhbSAkYXV0aG9yIChzdHJpbmcpIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4yCgkgKiBAc2VlIFNldENyZWF0b3IoKSwgU2V0S2V5d29yZHMoKSwgU2V0U3ViamVjdCgpLCBTZXRUaXRsZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRBdXRob3IoJGF1dGhvcikgewoJCSR0aGlzLT5hdXRob3IgPSAkYXV0aG9yOwoJfQoKCS8qKgoJICogQXNzb2NpYXRlcyBrZXl3b3JkcyB3aXRoIHRoZSBkb2N1bWVudCwgZ2VuZXJhbGx5IGluIHRoZSBmb3JtICdrZXl3b3JkMSBrZXl3b3JkMiAuLi4nLgoJICogQHBhcmFtICRrZXl3b3JkcyAoc3RyaW5nKSBUaGUgbGlzdCBvZiBrZXl3b3Jkcy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjIKCSAqIEBzZWUgU2V0QXV0aG9yKCksIFNldENyZWF0b3IoKSwgU2V0U3ViamVjdCgpLCBTZXRUaXRsZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRLZXl3b3Jkcygka2V5d29yZHMpIHsKCQkkdGhpcy0+a2V5d29yZHMgPSAka2V5d29yZHM7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjcmVhdG9yIG9mIHRoZSBkb2N1bWVudC4gVGhpcyBpcyB0eXBpY2FsbHkgdGhlIG5hbWUgb2YgdGhlIGFwcGxpY2F0aW9uIHRoYXQgZ2VuZXJhdGVzIHRoZSBQREYuCgkgKiBAcGFyYW0gJGNyZWF0b3IgKHN0cmluZykgVGhlIG5hbWUgb2YgdGhlIGNyZWF0b3IuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4yCgkgKiBAc2VlIFNldEF1dGhvcigpLCBTZXRLZXl3b3JkcygpLCBTZXRTdWJqZWN0KCksIFNldFRpdGxlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldENyZWF0b3IoJGNyZWF0b3IpIHsKCQkkdGhpcy0+Y3JlYXRvciA9ICRjcmVhdG9yOwoJfQoKCS8qKgoJICogVGhyb3cgYW4gZXhjZXB0aW9uIG9yIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIGRpZSBpZiB0aGUgS19UQ1BERl9QQVJTRVJfVEhST1dfRVhDRVBUSU9OX0VSUk9SIGNvbnN0YW50IGlzIHNldCB0byB0cnVlLgoJICogQHBhcmFtICRtc2cgKHN0cmluZykgVGhlIGVycm9yIG1lc3NhZ2UKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEVycm9yKCRtc2cpIHsKCQkvLyB1bnNldCBhbGwgY2xhc3MgdmFyaWFibGVzCgkJJHRoaXMtPl9kZXN0cm95KHRydWUpOwoJCWlmIChkZWZpbmVkKCdLX1RDUERGX1RIUk9XX0VYQ0VQVElPTl9FUlJPUicpIEFORCAhS19UQ1BERl9USFJPV19FWENFUFRJT05fRVJST1IpIHsKCQkJZGllKCc8c3Ryb25nPlRDUERGIEVSUk9SOiA8L3N0cm9uZz4nLiRtc2cpOwoJCX0gZWxzZSB7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJ1RDUERGIEVSUk9SOiAnLiRtc2cpOwoJCX0KCX0KCgkvKioKCSAqIFRoaXMgbWV0aG9kIGJlZ2lucyB0aGUgZ2VuZXJhdGlvbiBvZiB0aGUgUERGIGRvY3VtZW50LgoJICogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIGl0IGV4cGxpY2l0bHkgYmVjYXVzZSBBZGRQYWdlKCkgZG9lcyBpdCBhdXRvbWF0aWNhbGx5LgoJICogTm90ZTogbm8gcGFnZSBpcyBjcmVhdGVkIGJ5IHRoaXMgbWV0aG9kCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wCgkgKiBAc2VlIEFkZFBhZ2UoKSwgQ2xvc2UoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gT3BlbigpIHsKCQkkdGhpcy0+c3RhdGUgPSAxOwoJfQoKCS8qKgoJICogVGVybWluYXRlcyB0aGUgUERGIGRvY3VtZW50LgoJICogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjYWxsIHRoaXMgbWV0aG9kIGV4cGxpY2l0bHkgYmVjYXVzZSBPdXRwdXQoKSBkb2VzIGl0IGF1dG9tYXRpY2FsbHkuCgkgKiBJZiB0aGUgZG9jdW1lbnQgY29udGFpbnMgbm8gcGFnZSwgQWRkUGFnZSgpIGlzIGNhbGxlZCB0byBwcmV2ZW50IGZyb20gZ2V0dGluZyBhbiBpbnZhbGlkIGRvY3VtZW50LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBPcGVuKCksIE91dHB1dCgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBDbG9zZSgpIHsKCQlpZiAoJHRoaXMtPnN0YXRlID09IDMpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJHRoaXMtPnBhZ2UgPT0gMCkgewoJCQkkdGhpcy0+QWRkUGFnZSgpOwoJCX0KCQkkdGhpcy0+ZW5kTGF5ZXIoKTsKCQlpZiAoJHRoaXMtPnRjcGRmbGluaykgewoJCQkvLyBzYXZlIGN1cnJlbnQgZ3JhcGhpYyBzZXR0aW5ncwoJCQkkZ3ZhcnMgPSAkdGhpcy0+Z2V0R3JhcGhpY1ZhcnMoKTsKCQkJJHRoaXMtPnNldEVxdWFsQ29sdW1ucygpOwoJCQkkdGhpcy0+bGFzdHBhZ2UodHJ1ZSk7CgkJCSR0aGlzLT5TZXRBdXRvUGFnZUJyZWFrKGZhbHNlKTsKCQkJJHRoaXMtPnggPSAwOwoJCQkkdGhpcy0+eSA9ICR0aGlzLT5oIC0gKDEgLyAkdGhpcy0+ayk7CgkJCSR0aGlzLT5sTWFyZ2luID0gMDsKCQkJJHRoaXMtPl9vdXRTYXZlR3JhcGhpY3NTdGF0ZSgpOwoJCQkkZm9udCA9IGRlZmluZWQoJ1BERl9GT05UX05BTUVfTUFJTicpP1BERl9GT05UX05BTUVfTUFJTjonaGVsdmV0aWNhJzsKCQkJJHRoaXMtPlNldEZvbnQoJGZvbnQsICcnLCAxKTsKCQkJJHRoaXMtPnNldFRleHRSZW5kZXJpbmdNb2RlKDAsIGZhbHNlLCBmYWxzZSk7CgkJCSRtc2cgPSAiXHg1MFx4NmZceDc3XHg2NVx4NzJceDY1XHg2NFx4MjBceDYyXHg3OVx4MjBceDU0XHg0M1x4NTBceDQ0XHg0Nlx4MjBceDI4XHg3N1x4NzdceDc3XHgyZVx4NzRceDYzXHg3MFx4NjRceDY2XHgyZVx4NmZceDcyXHg2N1x4MjkiOwoJCQkkbG5rID0gIlx4NjhceDc0XHg3NFx4NzBceDNhXHgyZlx4MmZceDc3XHg3N1x4NzdceDJlXHg3NFx4NjNceDcwXHg2NFx4NjZceDJlXHg2Zlx4NzJceDY3IjsKCQkJJHRoaXMtPkNlbGwoMCwgMCwgJG1zZywgMCwgMCwgJ0wnLCAwLCAkbG5rLCAwLCBmYWxzZSwgJ0QnLCAnQicpOwoJCQkkdGhpcy0+X291dFJlc3RvcmVHcmFwaGljc1N0YXRlKCk7CgkJCS8vIHJlc3RvcmUgZ3JhcGhpYyBzZXR0aW5ncwoJCQkkdGhpcy0+c2V0R3JhcGhpY1ZhcnMoJGd2YXJzKTsKCQl9CgkJLy8gY2xvc2UgcGFnZQoJCSR0aGlzLT5lbmRQYWdlKCk7CgkJLy8gY2xvc2UgZG9jdW1lbnQKCQkkdGhpcy0+X2VuZGRvYygpOwoJCS8vIHVuc2V0IGFsbCBjbGFzcyB2YXJpYWJsZXMgKGV4Y2VwdCBjcml0aWNhbCBvbmVzKQoJCSR0aGlzLT5fZGVzdHJveShmYWxzZSk7Cgl9CgoJLyoqCgkgKiBNb3ZlIHBvaW50ZXIgYXQgdGhlIHNwZWNpZmllZCBkb2N1bWVudCBwYWdlIGFuZCB1cGRhdGUgcGFnZSBkaW1lbnNpb25zLgoJICogQHBhcmFtICRwbnVtIChpbnQpIHBhZ2UgbnVtYmVyICgxIC4uLiBudW1wYWdlcykKCSAqIEBwYXJhbSAkcmVzZXRtYXJnaW5zIChib29sZWFuKSBpZiB0cnVlIHJlc2V0IGxlZnQsIHJpZ2h0LCB0b3AgbWFyZ2lucyBhbmQgWSBwb3NpdGlvbi4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBnZXRQYWdlKCksIGxhc3RwYWdlKCksIGdldE51bVBhZ2VzKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldFBhZ2UoJHBudW0sICRyZXNldG1hcmdpbnM9ZmFsc2UpIHsKCQlpZiAoKCRwbnVtID09ICR0aGlzLT5wYWdlKSBBTkQgKCR0aGlzLT5zdGF0ZSA9PSAyKSkgewoJCQlyZXR1cm47CgkJfQoJCWlmICgoJHBudW0gPiAwKSBBTkQgKCRwbnVtIDw9ICR0aGlzLT5udW1wYWdlcykpIHsKCQkJJHRoaXMtPnN0YXRlID0gMjsKCQkJLy8gc2F2ZSBjdXJyZW50IGdyYXBoaWMgc2V0dGluZ3MKCQkJLy8kZ3ZhcnMgPSAkdGhpcy0+Z2V0R3JhcGhpY1ZhcnMoKTsKCQkJJG9sZHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJJHRoaXMtPnBhZ2UgPSAkcG51bTsKCQkJJHRoaXMtPndQdCA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsndyddOwoJCQkkdGhpcy0+aFB0ID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydoJ107CgkJCSR0aGlzLT53ID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd3ayddOwoJCQkkdGhpcy0+aCA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnaGsnXTsKCQkJJHRoaXMtPnRNYXJnaW4gPSAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RtJ107CgkJCSR0aGlzLT5iTWFyZ2luID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydibSddOwoJCQkkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ107CgkJCSR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXTsKCQkJJHRoaXMtPkF1dG9QYWdlQnJlYWsgPSAkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3BiJ107CgkJCSR0aGlzLT5DdXJPcmllbnRhdGlvbiA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3InXTsKCQkJJHRoaXMtPlNldEF1dG9QYWdlQnJlYWsoJHRoaXMtPkF1dG9QYWdlQnJlYWssICR0aGlzLT5iTWFyZ2luKTsKCQkJLy8gcmVzdG9yZSBncmFwaGljIHNldHRpbmdzCgkJCS8vJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJCWlmICgkcmVzZXRtYXJnaW5zKSB7CgkJCQkkdGhpcy0+bE1hcmdpbiA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ107CgkJCQkkdGhpcy0+ck1hcmdpbiA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ107CgkJCQkkdGhpcy0+U2V0WSgkdGhpcy0+dE1hcmdpbik7CgkJCX0gZWxzZSB7CgkJCQkvLyBhY2NvdW50IGZvciBib29rbGV0IG1vZGUKCQkJCWlmICgkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ29sbSddICE9ICR0aGlzLT5wYWdlZGltWyRvbGRwYWdlXVsnb2xtJ10pIHsKCQkJCQkkZGVsdGFtID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSAtICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ107CgkJCQkJJHRoaXMtPmxNYXJnaW4gKz0gJGRlbHRhbTsKCQkJCQkkdGhpcy0+ck1hcmdpbiAtPSAkZGVsdGFtOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJJHRoaXMtPkVycm9yKCdXcm9uZyBwYWdlIG51bWJlciBvbiBzZXRQYWdlKCkgZnVuY3Rpb246ICcuJHBudW0pOwoJCX0KCX0KCgkvKioKCSAqIFJlc2V0IHBvaW50ZXIgdG8gdGhlIGxhc3QgZG9jdW1lbnQgcGFnZS4KCSAqIEBwYXJhbSAkcmVzZXRtYXJnaW5zIChib29sZWFuKSBpZiB0cnVlIHJlc2V0IGxlZnQsIHJpZ2h0LCB0b3AgbWFyZ2lucyBhbmQgWSBwb3NpdGlvbi4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjAuMDAwICgyMDA4LTAxLTA0KQoJICogQHNlZSBzZXRQYWdlKCksIGdldFBhZ2UoKSwgZ2V0TnVtUGFnZXMoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gbGFzdFBhZ2UoJHJlc2V0bWFyZ2lucz1mYWxzZSkgewoJCSR0aGlzLT5zZXRQYWdlKCR0aGlzLT5nZXROdW1QYWdlcygpLCAkcmVzZXRtYXJnaW5zKTsKCX0KCgkvKioKCSAqIEdldCBjdXJyZW50IGRvY3VtZW50IHBhZ2UgbnVtYmVyLgoJICogQHJldHVybiBpbnQgcGFnZSBudW1iZXIKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBzZXRQYWdlKCksIGxhc3RwYWdlKCksIGdldE51bVBhZ2VzKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFBhZ2UoKSB7CgkJcmV0dXJuICR0aGlzLT5wYWdlOwoJfQoKCS8qKgoJICogR2V0IHRoZSB0b3RhbCBudW1iZXIgb2YgaW5zZXJlZCBwYWdlcy4KCSAqIEByZXR1cm4gaW50IG51bWJlciBvZiBwYWdlcwoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIHNldFBhZ2UoKSwgZ2V0UGFnZSgpLCBsYXN0cGFnZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXROdW1QYWdlcygpIHsKCQlyZXR1cm4gJHRoaXMtPm51bXBhZ2VzOwoJfQoKCS8qKgoJICogQWRkcyBhIG5ldyBUT0MgKFRhYmxlIE9mIENvbnRlbnQpIHBhZ2UgdG8gdGhlIGRvY3VtZW50LgoJICogQHBhcmFtICRvcmllbnRhdGlvbiAoc3RyaW5nKSBwYWdlIG9yaWVudGF0aW9uLgoJICogQHBhcmFtICRmb3JtYXQgKG1peGVkKSBUaGUgZm9ybWF0IHVzZWQgZm9yIHBhZ2VzLiBJdCBjYW4gYmUgZWl0aGVyOiBvbmUgb2YgdGhlIHN0cmluZyB2YWx1ZXMgc3BlY2lmaWVkIGF0IGdldFBhZ2VTaXplRnJvbUZvcm1hdCgpIG9yIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGF0IHNldFBhZ2VGb3JtYXQoKS4KCSAqIEBwYXJhbSAka2VlcG1hcmdpbnMgKGJvb2xlYW4pIGlmIHRydWUgb3ZlcndyaXRlcyB0aGUgZGVmYXVsdCBwYWdlIG1hcmdpbnMgd2l0aCB0aGUgY3VycmVudCBtYXJnaW5zCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS4wLjAwMSAoMjAxMC0wNS0wNikKCSAqIEBzZWUgQWRkUGFnZSgpLCBzdGFydFBhZ2UoKSwgZW5kUGFnZSgpLCBlbmRUT0NQYWdlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZFRPQ1BhZ2UoJG9yaWVudGF0aW9uPScnLCAkZm9ybWF0PScnLCAka2VlcG1hcmdpbnM9ZmFsc2UpIHsKCQkkdGhpcy0+QWRkUGFnZSgkb3JpZW50YXRpb24sICRmb3JtYXQsICRrZWVwbWFyZ2lucywgdHJ1ZSk7Cgl9CgoJLyoqCgkgKiBUZXJtaW5hdGUgdGhlIGN1cnJlbnQgVE9DIChUYWJsZSBPZiBDb250ZW50KSBwYWdlCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS4wLjAwMSAoMjAxMC0wNS0wNikKCSAqIEBzZWUgQWRkUGFnZSgpLCBzdGFydFBhZ2UoKSwgZW5kUGFnZSgpLCBhZGRUT0NQYWdlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGVuZFRPQ1BhZ2UoKSB7CgkJJHRoaXMtPmVuZFBhZ2UodHJ1ZSk7Cgl9CgoJLyoqCgkgKiBBZGRzIGEgbmV3IHBhZ2UgdG8gdGhlIGRvY3VtZW50LiBJZiBhIHBhZ2UgaXMgYWxyZWFkeSBwcmVzZW50LCB0aGUgRm9vdGVyKCkgbWV0aG9kIGlzIGNhbGxlZCBmaXJzdCB0byBvdXRwdXQgdGhlIGZvb3RlciAoaWYgZW5hYmxlZCkuIFRoZW4gdGhlIHBhZ2UgaXMgYWRkZWQsIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNldCB0byB0aGUgdG9wLWxlZnQgY29ybmVyIGFjY29yZGluZyB0byB0aGUgbGVmdCBhbmQgdG9wIG1hcmdpbnMgKG9yIHRvcC1yaWdodCBpZiBpbiBSVEwgbW9kZSksIGFuZCBIZWFkZXIoKSBpcyBjYWxsZWQgdG8gZGlzcGxheSB0aGUgaGVhZGVyIChpZiBlbmFibGVkKS4KCSAqIFRoZSBvcmlnaW4gb2YgdGhlIGNvb3JkaW5hdGUgc3lzdGVtIGlzIGF0IHRoZSB0b3AtbGVmdCBjb3JuZXIgKG9yIHRvcC1yaWdodCBmb3IgUlRMKSBhbmQgaW5jcmVhc2luZyBvcmRpbmF0ZXMgZ28gZG93bndhcmRzLgoJICogQHBhcmFtICRvcmllbnRhdGlvbiAoc3RyaW5nKSBwYWdlIG9yaWVudGF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKTo8dWw+PGxpPlAgb3IgUE9SVFJBSVQgKGRlZmF1bHQpPC9saT48bGk+TCBvciBMQU5EU0NBUEU8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGZvcm1hdCAobWl4ZWQpIFRoZSBmb3JtYXQgdXNlZCBmb3IgcGFnZXMuIEl0IGNhbiBiZSBlaXRoZXI6IG9uZSBvZiB0aGUgc3RyaW5nIHZhbHVlcyBzcGVjaWZpZWQgYXQgZ2V0UGFnZVNpemVGcm9tRm9ybWF0KCkgb3IgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyBzcGVjaWZpZWQgYXQgc2V0UGFnZUZvcm1hdCgpLgoJICogQHBhcmFtICRrZWVwbWFyZ2lucyAoYm9vbGVhbikgaWYgdHJ1ZSBvdmVyd3JpdGVzIHRoZSBkZWZhdWx0IHBhZ2UgbWFyZ2lucyB3aXRoIHRoZSBjdXJyZW50IG1hcmdpbnMKCSAqIEBwYXJhbSAkdG9jcGFnZSAoYm9vbGVhbikgaWYgdHJ1ZSBzZXQgdGhlIHRvY3BhZ2Ugc3RhdGUgdG8gdHJ1ZSAodGhlIGFkZGVkIHBhZ2Ugd2lsbCBiZSB1c2VkIHRvIGRpc3BsYXkgVGFibGUgT2YgQ29udGVudCkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wCgkgKiBAc2VlIHN0YXJ0UGFnZSgpLCBlbmRQYWdlKCksIGFkZFRPQ1BhZ2UoKSwgZW5kVE9DUGFnZSgpLCBnZXRQYWdlU2l6ZUZyb21Gb3JtYXQoKSwgc2V0UGFnZUZvcm1hdCgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBBZGRQYWdlKCRvcmllbnRhdGlvbj0nJywgJGZvcm1hdD0nJywgJGtlZXBtYXJnaW5zPWZhbHNlLCAkdG9jcGFnZT1mYWxzZSkgewoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQlyZXR1cm47CgkJfQoJCWlmICghaXNzZXQoJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4pIE9SICRrZWVwbWFyZ2lucykgewoJCQkkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiA9ICR0aGlzLT5sTWFyZ2luOwoJCX0KCQlpZiAoIWlzc2V0KCR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luKSBPUiAka2VlcG1hcmdpbnMpIHsKCQkJJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4gPSAkdGhpcy0+ck1hcmdpbjsKCQl9CgkJLy8gdGVybWluYXRlIHByZXZpb3VzIHBhZ2UKCQkkdGhpcy0+ZW5kUGFnZSgpOwoJCS8vIHN0YXJ0IG5ldyBwYWdlCgkJJHRoaXMtPnN0YXJ0UGFnZSgkb3JpZW50YXRpb24sICRmb3JtYXQsICR0b2NwYWdlKTsKCX0KCgkvKioKCSAqIFRlcm1pbmF0ZSB0aGUgY3VycmVudCBwYWdlCgkgKiBAcGFyYW0gJHRvY3BhZ2UgKGJvb2xlYW4pIGlmIHRydWUgc2V0IHRoZSB0b2NwYWdlIHN0YXRlIHRvIGZhbHNlIChlbmQgdGhlIHBhZ2UgdXNlZCB0byBkaXNwbGF5IFRhYmxlIE9mIENvbnRlbnQpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMi4wMTAgKDIwMDgtMTEtMTQpCgkgKiBAc2VlIEFkZFBhZ2UoKSwgc3RhcnRQYWdlKCksIGFkZFRPQ1BhZ2UoKSwgZW5kVE9DUGFnZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlbmRQYWdlKCR0b2NwYWdlPWZhbHNlKSB7CgkJLy8gY2hlY2sgaWYgcGFnZSBpcyBhbHJlYWR5IGNsb3NlZAoJCWlmICgoJHRoaXMtPnBhZ2UgPT0gMCkgT1IgKCR0aGlzLT5udW1wYWdlcyA+ICR0aGlzLT5wYWdlKSBPUiAoISR0aGlzLT5wYWdlb3BlblskdGhpcy0+cGFnZV0pKSB7CgkJCXJldHVybjsKCQl9CgkJLy8gcHJpbnQgcGFnZSBmb290ZXIKCQkkdGhpcy0+c2V0Rm9vdGVyKCk7CgkJLy8gY2xvc2UgcGFnZQoJCSR0aGlzLT5fZW5kcGFnZSgpOwoJCS8vIG1hcmsgcGFnZSBhcyBjbG9zZWQKCQkkdGhpcy0+cGFnZW9wZW5bJHRoaXMtPnBhZ2VdID0gZmFsc2U7CgkJaWYgKCR0b2NwYWdlKSB7CgkJCSR0aGlzLT50b2NwYWdlID0gZmFsc2U7CgkJfQoJfQoKCS8qKgoJICogU3RhcnRzIGEgbmV3IHBhZ2UgdG8gdGhlIGRvY3VtZW50LiBUaGUgcGFnZSBtdXN0IGJlIGNsb3NlZCB1c2luZyB0aGUgZW5kUGFnZSgpIGZ1bmN0aW9uLgoJICogVGhlIG9yaWdpbiBvZiB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gaXMgYXQgdGhlIHRvcC1sZWZ0IGNvcm5lciBhbmQgaW5jcmVhc2luZyBvcmRpbmF0ZXMgZ28gZG93bndhcmRzLgoJICogQHBhcmFtICRvcmllbnRhdGlvbiAoc3RyaW5nKSBwYWdlIG9yaWVudGF0aW9uLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKTo8dWw+PGxpPlAgb3IgUE9SVFJBSVQgKGRlZmF1bHQpPC9saT48bGk+TCBvciBMQU5EU0NBUEU8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGZvcm1hdCAobWl4ZWQpIFRoZSBmb3JtYXQgdXNlZCBmb3IgcGFnZXMuIEl0IGNhbiBiZSBlaXRoZXI6IG9uZSBvZiB0aGUgc3RyaW5nIHZhbHVlcyBzcGVjaWZpZWQgYXQgZ2V0UGFnZVNpemVGcm9tRm9ybWF0KCkgb3IgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyBzcGVjaWZpZWQgYXQgc2V0UGFnZUZvcm1hdCgpLgoJICogQHBhcmFtICR0b2NwYWdlIChib29sZWFuKSBpZiB0cnVlIHRoZSBwYWdlIGlzIGRlc2lnbmF0ZWQgdG8gY29udGFpbiB0aGUgVGFibGUtT2YtQ29udGVudC4KCSAqIEBzaW5jZSA0LjIuMDEwICgyMDA4LTExLTE0KQoJICogQHNlZSBBZGRQYWdlKCksIGVuZFBhZ2UoKSwgYWRkVE9DUGFnZSgpLCBlbmRUT0NQYWdlKCksIGdldFBhZ2VTaXplRnJvbUZvcm1hdCgpLCBzZXRQYWdlRm9ybWF0KCkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHN0YXJ0UGFnZSgkb3JpZW50YXRpb249JycsICRmb3JtYXQ9JycsICR0b2NwYWdlPWZhbHNlKSB7CgkJaWYgKCR0b2NwYWdlKSB7CgkJCSR0aGlzLT50b2NwYWdlID0gdHJ1ZTsKCQl9CgkJLy8gbW92ZSBwYWdlIG51bWJlcnMgb2YgZG9jdW1lbnRzIHRvIGJlIGF0dGFjaGVkCgkJaWYgKCR0aGlzLT50b2NwYWdlKSB7CgkJCS8vIG1vdmUgcmVmZXJlbmNlIHRvIHVuZXhpc3RlbnQgcGFnZXMgKHVzZWQgZm9yIHBhZ2UgYXR0YWNobWVudHMpCgkJCS8vIGFkanVzdCBvdXRsaW5lcwoJCQkkdG1wb3V0bGluZXMgPSAkdGhpcy0+b3V0bGluZXM7CgkJCWZvcmVhY2ggKCR0bXBvdXRsaW5lcyBhcyAka2V5ID0+ICRvdXRsaW5lKSB7CgkJCQlpZiAoJG91dGxpbmVbJ3AnXSA+ICR0aGlzLT5udW1wYWdlcykgewoJCQkJCSR0aGlzLT5vdXRsaW5lc1ska2V5XVsncCddID0gKCRvdXRsaW5lWydwJ10gKyAxKTsKCQkJCX0KCQkJfQoJCQkvLyBhZGp1c3QgZGVzdHMKCQkJJHRtcGRlc3RzID0gJHRoaXMtPmRlc3RzOwoJCQlmb3JlYWNoICgkdG1wZGVzdHMgYXMgJGtleSA9PiAkZGVzdCkgewoJCQkJaWYgKCRkZXN0WydwJ10gPiAkdGhpcy0+bnVtcGFnZXMpIHsKCQkJCQkkdGhpcy0+ZGVzdHNbJGtleV1bJ3AnXSA9ICgkZGVzdFsncCddICsgMSk7CgkJCQl9CgkJCX0KCQkJLy8gYWRqdXN0IGxpbmtzCgkJCSR0bXBsaW5rcyA9ICR0aGlzLT5saW5rczsKCQkJZm9yZWFjaCAoJHRtcGxpbmtzIGFzICRrZXkgPT4gJGxpbmspIHsKCQkJCWlmICgkbGlua1swXSA+ICR0aGlzLT5udW1wYWdlcykgewoJCQkJCSR0aGlzLT5saW5rc1ska2V5XVswXSA9ICgkbGlua1swXSArIDEpOwoJCQkJfQoJCQl9CgkJfQoJCWlmICgkdGhpcy0+bnVtcGFnZXMgPiAkdGhpcy0+cGFnZSkgewoJCQkvLyB0aGlzIHBhZ2UgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZAoJCQkkdGhpcy0+c2V0UGFnZSgkdGhpcy0+cGFnZSArIDEpOwoJCQkkdGhpcy0+U2V0WSgkdGhpcy0+dE1hcmdpbik7CgkJCXJldHVybjsKCQl9CgkJLy8gc3RhcnQgYSBuZXcgcGFnZQoJCWlmICgkdGhpcy0+c3RhdGUgPT0gMCkgewoJCQkkdGhpcy0+T3BlbigpOwoJCX0KCQkrKyR0aGlzLT5udW1wYWdlczsKCQkkdGhpcy0+c3dhcE1hcmdpbnMoJHRoaXMtPmJvb2tsZXQpOwoJCS8vIHNhdmUgY3VycmVudCBncmFwaGljIHNldHRpbmdzCgkJJGd2YXJzID0gJHRoaXMtPmdldEdyYXBoaWNWYXJzKCk7CgkJLy8gc3RhcnQgbmV3IHBhZ2UKCQkkdGhpcy0+X2JlZ2lucGFnZSgkb3JpZW50YXRpb24sICRmb3JtYXQpOwoJCS8vIG1hcmsgcGFnZSBhcyBvcGVuCgkJJHRoaXMtPnBhZ2VvcGVuWyR0aGlzLT5wYWdlXSA9IHRydWU7CgkJLy8gcmVzdG9yZSBncmFwaGljIHNldHRpbmdzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJLy8gbWFyayB0aGlzIHBvaW50CgkJJHRoaXMtPnNldFBhZ2VNYXJrKCk7CgkJLy8gcHJpbnQgcGFnZSBoZWFkZXIKCQkkdGhpcy0+c2V0SGVhZGVyKCk7CgkJLy8gcmVzdG9yZSBncmFwaGljIHNldHRpbmdzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJLy8gbWFyayB0aGlzIHBvaW50CgkJJHRoaXMtPnNldFBhZ2VNYXJrKCk7CgkJLy8gcHJpbnQgdGFibGUgaGVhZGVyIChpZiBhbnkpCgkJJHRoaXMtPnNldFRhYmxlSGVhZGVyKCk7CgkJLy8gc2V0IG1hcmsgZm9yIGVtcHR5IHBhZ2UgY2hlY2sKCQkkdGhpcy0+ZW1wdHlwYWdlbXJrWyR0aGlzLT5wYWdlXT0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJfQoKCS8qKgoJICogU2V0IHN0YXJ0LXdyaXRpbmcgbWFyayBvbiBjdXJyZW50IHBhZ2Ugc3RyZWFtIHVzZWQgdG8gcHV0IGJvcmRlcnMgYW5kIGZpbGxzLgoJICogQm9yZGVycyBhbmQgZmlsbHMgYXJlIGFsd2F5cyBjcmVhdGVkIGFmdGVyIGNvbnRlbnQgYW5kIGluc2VydGVkIG9uIHRoZSBwb3NpdGlvbiBtYXJrZWQgYnkgdGhpcyBtZXRob2QuCgkgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGFmdGVyIGNhbGxpbmcgSW1hZ2UoKSBmdW5jdGlvbiBmb3IgYSBiYWNrZ3JvdW5kIGltYWdlLgoJICogQmFja2dyb3VuZCBpbWFnZXMgbXVzdCBiZSBhbHdheXMgaW5zZXJ0ZWQgYmVmb3JlIGNhbGxpbmcgTXVsdGljZWxsKCkgb3IgV3JpdGVIVE1MQ2VsbCgpIG9yIFdyaXRlSFRNTCgpIGZ1bmN0aW9ucy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjAuMDE2ICgyMDA4LTA3LTMwKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0UGFnZU1hcmsoKSB7CgkJJHRoaXMtPmludG1ya1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV07CgkJJHRoaXMtPmJvcmRlcm1ya1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+aW50bXJrWyR0aGlzLT5wYWdlXTsKCQkkdGhpcy0+c2V0Q29udGVudE1hcmsoKTsKCX0KCgkvKioKCSAqIFNldCBzdGFydC13cml0aW5nIG1hcmsgb24gc2VsZWN0ZWQgcGFnZS4KCSAqIEJvcmRlcnMgYW5kIGZpbGxzIGFyZSBhbHdheXMgY3JlYXRlZCBhZnRlciBjb250ZW50IGFuZCBpbnNlcnRlZCBvbiB0aGUgcG9zaXRpb24gbWFya2VkIGJ5IHRoaXMgbWV0aG9kLgoJICogQHBhcmFtICRwYWdlIChpbnQpIHBhZ2UgbnVtYmVyIChkZWZhdWx0IGlzIHRoZSBjdXJyZW50IHBhZ2UpCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC42LjAyMSAoMjAwOS0wNy0yMCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldENvbnRlbnRNYXJrKCRwYWdlPTApIHsKCQlpZiAoJHBhZ2UgPD0gMCkgewoJCQkkcGFnZSA9ICR0aGlzLT5wYWdlOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcmxlblskcGFnZV0pKSB7CgkJCSR0aGlzLT5jbnRtcmtbJHBhZ2VdID0gJHRoaXMtPnBhZ2VsZW5bJHBhZ2VdIC0gJHRoaXMtPmZvb3RlcmxlblskcGFnZV07CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmNudG1ya1skcGFnZV0gPSAkdGhpcy0+cGFnZWxlblskcGFnZV07CgkJfQoJfQoKCS8qKgoJICogU2V0IGhlYWRlciBkYXRhLgoJICogQHBhcmFtICRsbiAoc3RyaW5nKSBoZWFkZXIgaW1hZ2UgbG9nbwoJICogQHBhcmFtICRsdyAoc3RyaW5nKSBoZWFkZXIgaW1hZ2UgbG9nbyB3aWR0aCBpbiBtbQoJICogQHBhcmFtICRodCAoc3RyaW5nKSBzdHJpbmcgdG8gcHJpbnQgYXMgdGl0bGUgb24gZG9jdW1lbnQgaGVhZGVyCgkgKiBAcGFyYW0gJGhzIChzdHJpbmcpIHN0cmluZyB0byBwcmludCBvbiBkb2N1bWVudCBoZWFkZXIKCSAqIEBwYXJhbSAkdGMgKGFycmF5KSBSR0IgYXJyYXkgY29sb3IgZm9yIHRleHQuCgkgKiBAcGFyYW0gJGxjIChhcnJheSkgUkdCIGFycmF5IGNvbG9yIGZvciBsaW5lLgoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0SGVhZGVyRGF0YSgkbG49JycsICRsdz0wLCAkaHQ9JycsICRocz0nJywgJHRjPWFycmF5KDAsMCwwKSwgJGxjPWFycmF5KDAsMCwwKSkgewoJCSR0aGlzLT5oZWFkZXJfbG9nbyA9ICRsbjsKCQkkdGhpcy0+aGVhZGVyX2xvZ29fd2lkdGggPSAkbHc7CgkJJHRoaXMtPmhlYWRlcl90aXRsZSA9ICRodDsKCQkkdGhpcy0+aGVhZGVyX3N0cmluZyA9ICRoczsKCQkkdGhpcy0+aGVhZGVyX3RleHRfY29sb3IgPSAkdGM7CgkJJHRoaXMtPmhlYWRlcl9saW5lX2NvbG9yID0gJGxjOwoJfQoKCS8qKgoJICogU2V0IGZvb3RlciBkYXRhLgoJICogQHBhcmFtICR0YyAoYXJyYXkpIFJHQiBhcnJheSBjb2xvciBmb3IgdGV4dC4KCSAqIEBwYXJhbSAkbGMgKGFycmF5KSBSR0IgYXJyYXkgY29sb3IgZm9yIGxpbmUuCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRGb290ZXJEYXRhKCR0Yz1hcnJheSgwLDAsMCksICRsYz1hcnJheSgwLDAsMCkpIHsKCQkkdGhpcy0+Zm9vdGVyX3RleHRfY29sb3IgPSAkdGM7CgkJJHRoaXMtPmZvb3Rlcl9saW5lX2NvbG9yID0gJGxjOwoJfQoKCS8qKgoJICogUmV0dXJucyBoZWFkZXIgZGF0YToKCSAqIDx1bD48bGk+JHJldFsnbG9nbyddID0gbG9nbyBpbWFnZTwvbGk+PGxpPiRyZXRbJ2xvZ29fd2lkdGgnXSA9IHdpZHRoIG9mIHRoZSBpbWFnZSBsb2dvIGluIHVzZXIgdW5pdHM8L2xpPjxsaT4kcmV0Wyd0aXRsZSddID0gaGVhZGVyIHRpdGxlPC9saT48bGk+JHJldFsnc3RyaW5nJ10gPSBoZWFkZXIgZGVzY3JpcHRpb24gc3RyaW5nPC9saT48L3VsPgoJICogQHJldHVybiBhcnJheSgpCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC4wLjAxMiAoMjAwOC0wNy0yNCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlckRhdGEoKSB7CgkJJHJldCA9IGFycmF5KCk7CgkJJHJldFsnbG9nbyddID0gJHRoaXMtPmhlYWRlcl9sb2dvOwoJCSRyZXRbJ2xvZ29fd2lkdGgnXSA9ICR0aGlzLT5oZWFkZXJfbG9nb193aWR0aDsKCQkkcmV0Wyd0aXRsZSddID0gJHRoaXMtPmhlYWRlcl90aXRsZTsKCQkkcmV0WydzdHJpbmcnXSA9ICR0aGlzLT5oZWFkZXJfc3RyaW5nOwoJCSRyZXRbJ3RleHRfY29sb3InXSA9ICR0aGlzLT5oZWFkZXJfdGV4dF9jb2xvcjsKCQkkcmV0WydsaW5lX2NvbG9yJ10gPSAkdGhpcy0+aGVhZGVyX2xpbmVfY29sb3I7CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCgkgKiBTZXQgaGVhZGVyIG1hcmdpbi4KCSAqIChtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gaGVhZGVyIGFuZCB0b3AgcGFnZSBtYXJnaW4pCgkgKiBAcGFyYW0gJGhtIChpbnQpIGRpc3RhbmNlIGluIHVzZXIgdW5pdHMKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlck1hcmdpbigkaG09MTApIHsKCQkkdGhpcy0+aGVhZGVyX21hcmdpbiA9ICRobTsKCX0KCgkvKioKCSAqIFJldHVybnMgaGVhZGVyIG1hcmdpbiBpbiB1c2VyIHVuaXRzLgoJICogQHJldHVybiBmbG9hdAoJICogQHNpbmNlIDQuMC4wMTIgKDIwMDgtMDctMjQpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRIZWFkZXJNYXJnaW4oKSB7CgkJcmV0dXJuICR0aGlzLT5oZWFkZXJfbWFyZ2luOwoJfQoKCS8qKgoJICogU2V0IGZvb3RlciBtYXJnaW4uCgkgKiAobWluaW11bSBkaXN0YW5jZSBiZXR3ZWVuIGZvb3RlciBhbmQgYm90dG9tIHBhZ2UgbWFyZ2luKQoJICogQHBhcmFtICRmbSAoaW50KSBkaXN0YW5jZSBpbiB1c2VyIHVuaXRzCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRGb290ZXJNYXJnaW4oJGZtPTEwKSB7CgkJJHRoaXMtPmZvb3Rlcl9tYXJnaW4gPSAkZm07Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGZvb3RlciBtYXJnaW4gaW4gdXNlciB1bml0cy4KCSAqIEByZXR1cm4gZmxvYXQKCSAqIEBzaW5jZSA0LjAuMDEyICgyMDA4LTA3LTI0KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9vdGVyTWFyZ2luKCkgewoJCXJldHVybiAkdGhpcy0+Zm9vdGVyX21hcmdpbjsKCX0KCS8qKgoJICogU2V0IGEgZmxhZyB0byBwcmludCBwYWdlIGhlYWRlci4KCSAqIEBwYXJhbSAkdmFsIChib29sZWFuKSBzZXQgdG8gdHJ1ZSB0byBwcmludCB0aGUgcGFnZSBoZWFkZXIgKGRlZmF1bHQpLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRQcmludEhlYWRlcigkdmFsPXRydWUpIHsKCQkkdGhpcy0+cHJpbnRfaGVhZGVyID0gJHZhbCA/IHRydWUgOiBmYWxzZTsKCX0KCgkvKioKCSAqIFNldCBhIGZsYWcgdG8gcHJpbnQgcGFnZSBmb290ZXIuCgkgKiBAcGFyYW0gJHZhbCAoYm9vbGVhbikgc2V0IHRvIHRydWUgdG8gcHJpbnQgdGhlIHBhZ2UgZm9vdGVyIChkZWZhdWx0KSwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0UHJpbnRGb290ZXIoJHZhbD10cnVlKSB7CgkJJHRoaXMtPnByaW50X2Zvb3RlciA9ICR2YWwgPyB0cnVlIDogZmFsc2U7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIHJpZ2h0LWJvdHRvbSAob3IgbGVmdC1ib3R0b20gZm9yIFJUTCkgY29ybmVyIFggY29vcmRpbmF0ZSBvZiBsYXN0IGluc2VydGVkIGltYWdlCgkgKiBAcmV0dXJuIGZsb2F0CgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRJbWFnZVJCWCgpIHsKCQlyZXR1cm4gJHRoaXMtPmltZ19yYl94OwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSByaWdodC1ib3R0b20gKG9yIGxlZnQtYm90dG9tIGZvciBSVEwpIGNvcm5lciBZIGNvb3JkaW5hdGUgb2YgbGFzdCBpbnNlcnRlZCBpbWFnZQoJICogQHJldHVybiBmbG9hdAoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0SW1hZ2VSQlkoKSB7CgkJcmV0dXJuICR0aGlzLT5pbWdfcmJfeTsKCX0KCgkvKioKCSAqIFJlc2V0IHRoZSB4b2JqZWN0IHRlbXBsYXRlIHVzZWQgYnkgSGVhZGVyKCkgbWV0aG9kLgoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVzZXRIZWFkZXJUZW1wbGF0ZSgpIHsKCQkkdGhpcy0+aGVhZGVyX3hvYmppZCA9IGZhbHNlOwoJfQoKCS8qKgoJICogU2V0IGEgZmxhZyB0byBhdXRvbWF0aWNhbGx5IHJlc2V0IHRoZSB4b2JqZWN0IHRlbXBsYXRlIHVzZWQgYnkgSGVhZGVyKCkgbWV0aG9kIGF0IGVhY2ggcGFnZS4KCSAqIEBwYXJhbSAkdmFsIChib29sZWFuKSBzZXQgdG8gdHJ1ZSB0byByZXNldCBIZWFkZXIgeG9iamVjdCB0ZW1wbGF0ZSBhdCBlYWNoIHBhZ2UsIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldEhlYWRlclRlbXBsYXRlQXV0b3Jlc2V0KCR2YWw9dHJ1ZSkgewoJCSR0aGlzLT5oZWFkZXJfeG9ial9hdXRvcmVzZXQgPSAkdmFsID8gdHJ1ZSA6IGZhbHNlOwoJfQoKCS8qKgoJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZW5kZXIgdGhlIHBhZ2UgaGVhZGVyLgoJICogSXQgaXMgYXV0b21hdGljYWxseSBjYWxsZWQgYnkgQWRkUGFnZSgpIGFuZCBjb3VsZCBiZSBvdmVyd3JpdHRlbiBpbiB5b3VyIG93biBpbmhlcml0ZWQgY2xhc3MuCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBIZWFkZXIoKSB7CgkJaWYgKCR0aGlzLT5oZWFkZXJfeG9iamlkID09PSBmYWxzZSkgewoJCQkvLyBzdGFydCBhIG5ldyBYT2JqZWN0IFRlbXBsYXRlCgkJCSR0aGlzLT5oZWFkZXJfeG9iamlkID0gJHRoaXMtPnN0YXJ0VGVtcGxhdGUoJHRoaXMtPncsICR0aGlzLT50TWFyZ2luKTsKCQkJJGhlYWRlcmZvbnQgPSAkdGhpcy0+Z2V0SGVhZGVyRm9udCgpOwoJCQkkaGVhZGVyZGF0YSA9ICR0aGlzLT5nZXRIZWFkZXJEYXRhKCk7CgkJCSR0aGlzLT55ID0gJHRoaXMtPmhlYWRlcl9tYXJnaW47CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT53IC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW47CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luOwoJCQl9CgkJCWlmICgoJGhlYWRlcmRhdGFbJ2xvZ28nXSkgQU5EICgkaGVhZGVyZGF0YVsnbG9nbyddICE9IEtfQkxBTktfSU1BR0UpKSB7CgkJCQkkaW1ndHlwZSA9IFRDUERGX0lNQUdFUzo6Z2V0SW1hZ2VGaWxlVHlwZShLX1BBVEhfSU1BR0VTLiRoZWFkZXJkYXRhWydsb2dvJ10pOwoJCQkJaWYgKCgkaW1ndHlwZSA9PSAnZXBzJykgT1IgKCRpbWd0eXBlID09ICdhaScpKSB7CgkJCQkJJHRoaXMtPkltYWdlRXBzKEtfUEFUSF9JTUFHRVMuJGhlYWRlcmRhdGFbJ2xvZ28nXSwgJycsICcnLCAkaGVhZGVyZGF0YVsnbG9nb193aWR0aCddKTsKCQkJCX0gZWxzZWlmICgkaW1ndHlwZSA9PSAnc3ZnJykgewoJCQkJCSR0aGlzLT5JbWFnZVNWRyhLX1BBVEhfSU1BR0VTLiRoZWFkZXJkYXRhWydsb2dvJ10sICcnLCAnJywgJGhlYWRlcmRhdGFbJ2xvZ29fd2lkdGgnXSk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5JbWFnZShLX1BBVEhfSU1BR0VTLiRoZWFkZXJkYXRhWydsb2dvJ10sICcnLCAnJywgJGhlYWRlcmRhdGFbJ2xvZ29fd2lkdGgnXSk7CgkJCQl9CgkJCQkkaW1neSA9ICR0aGlzLT5nZXRJbWFnZVJCWSgpOwoJCQl9IGVsc2UgewoJCQkJJGltZ3kgPSAkdGhpcy0+eTsKCQkJfQoJCQkkY2VsbF9oZWlnaHQgPSAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkaGVhZGVyZm9udFsyXSAvICR0aGlzLT5rKTsKCQkJLy8gc2V0IHN0YXJ0aW5nIG1hcmdpbiBmb3IgdGV4dCBkYXRhIGNlbGwKCQkJaWYgKCR0aGlzLT5nZXRSVEwoKSkgewoJCQkJJGhlYWRlcl94ID0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4gKyAoJGhlYWRlcmRhdGFbJ2xvZ29fd2lkdGgnXSAqIDEuMSk7CgkJCX0gZWxzZSB7CgkJCQkkaGVhZGVyX3ggPSAkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiArICgkaGVhZGVyZGF0YVsnbG9nb193aWR0aCddICogMS4xKTsKCQkJfQoJCQkkY3cgPSAkdGhpcy0+dyAtICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4gLSAoJGhlYWRlcmRhdGFbJ2xvZ29fd2lkdGgnXSAqIDEuMSk7CgkJCSR0aGlzLT5TZXRUZXh0Q29sb3JBcnJheSgkdGhpcy0+aGVhZGVyX3RleHRfY29sb3IpOwoJCQkvLyBoZWFkZXIgdGl0bGUKCQkJJHRoaXMtPlNldEZvbnQoJGhlYWRlcmZvbnRbMF0sICdCJywgJGhlYWRlcmZvbnRbMl0gKyAxKTsKCQkJJHRoaXMtPlNldFgoJGhlYWRlcl94KTsKCQkJJHRoaXMtPkNlbGwoJGN3LCAkY2VsbF9oZWlnaHQsICRoZWFkZXJkYXRhWyd0aXRsZSddLCAwLCAxLCAnJywgMCwgJycsIDApOwoJCQkvLyBoZWFkZXIgc3RyaW5nCgkJCSR0aGlzLT5TZXRGb250KCRoZWFkZXJmb250WzBdLCAkaGVhZGVyZm9udFsxXSwgJGhlYWRlcmZvbnRbMl0pOwoJCQkkdGhpcy0+U2V0WCgkaGVhZGVyX3gpOwoJCQkkdGhpcy0+TXVsdGlDZWxsKCRjdywgJGNlbGxfaGVpZ2h0LCAkaGVhZGVyZGF0YVsnc3RyaW5nJ10sIDAsICcnLCAwLCAxLCAnJywgJycsIHRydWUsIDAsIGZhbHNlLCB0cnVlLCAwLCAnVCcsIGZhbHNlKTsKCQkJLy8gcHJpbnQgYW4gZW5kaW5nIGhlYWRlciBsaW5lCgkJCSR0aGlzLT5TZXRMaW5lU3R5bGUoYXJyYXkoJ3dpZHRoJyA9PiAwLjg1IC8gJHRoaXMtPmssICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+ICRoZWFkZXJkYXRhWydsaW5lX2NvbG9yJ10pKTsKCQkJJHRoaXMtPlNldFkoKDIuODM1IC8gJHRoaXMtPmspICsgbWF4KCRpbWd5LCAkdGhpcy0+eSkpOwoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHRoaXMtPlNldFgoJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4pOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPlNldFgoJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4pOwoJCQl9CgkJCSR0aGlzLT5DZWxsKCgkdGhpcy0+dyAtICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4pLCAwLCAnJywgJ1QnLCAwLCAnQycpOwoJCQkkdGhpcy0+ZW5kVGVtcGxhdGUoKTsKCQl9CgkJLy8gcHJpbnQgaGVhZGVyIHRlbXBsYXRlCgkJJHggPSAwOwoJCSRkeCA9IDA7CgkJaWYgKCEkdGhpcy0+aGVhZGVyX3hvYmpfYXV0b3Jlc2V0IEFORCAkdGhpcy0+Ym9va2xldCBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpID09IDApKSB7CgkJCS8vIGFkanVzdCBtYXJnaW5zIGZvciBib29rbGV0IG1vZGUKCQkJJGR4ID0gKCR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4pOwoJCX0KCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkeCA9ICR0aGlzLT53ICsgJGR4OwoJCX0gZWxzZSB7CgkJCSR4ID0gMCArICRkeDsKCQl9CgkJJHRoaXMtPnByaW50VGVtcGxhdGUoJHRoaXMtPmhlYWRlcl94b2JqaWQsICR4LCAwLCAwLCAwLCAnJywgJycsIGZhbHNlKTsKCQlpZiAoJHRoaXMtPmhlYWRlcl94b2JqX2F1dG9yZXNldCkgewoJCQkvLyByZXNldCBoZWFkZXIgeG9iamVjdCB0ZW1wbGF0ZSBhdCBlYWNoIHBhZ2UKCQkJJHRoaXMtPmhlYWRlcl94b2JqaWQgPSBmYWxzZTsKCQl9Cgl9CgoJLyoqCgkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgcGFnZSBmb290ZXIuCgkgKiBJdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGxlZCBieSBBZGRQYWdlKCkgYW5kIGNvdWxkIGJlIG92ZXJ3cml0dGVuIGluIHlvdXIgb3duIGluaGVyaXRlZCBjbGFzcy4KCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEZvb3RlcigpIHsKCQkkY3VyX3kgPSAkdGhpcy0+eTsKCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJHRoaXMtPmZvb3Rlcl90ZXh0X2NvbG9yKTsKCQkvL3NldCBzdHlsZSBmb3IgY2VsbCBib3JkZXIKCQkkbGluZV93aWR0aCA9ICgwLjg1IC8gJHRoaXMtPmspOwoJCSR0aGlzLT5TZXRMaW5lU3R5bGUoYXJyYXkoJ3dpZHRoJyA9PiAkbGluZV93aWR0aCwgJ2NhcCcgPT4gJ2J1dHQnLCAnam9pbicgPT4gJ21pdGVyJywgJ2Rhc2gnID0+IDAsICdjb2xvcicgPT4gJHRoaXMtPmZvb3Rlcl9saW5lX2NvbG9yKSk7CgkJLy9wcmludCBkb2N1bWVudCBiYXJjb2RlCgkJJGJhcmNvZGUgPSAkdGhpcy0+Z2V0QmFyY29kZSgpOwoJCWlmICghZW1wdHkoJGJhcmNvZGUpKSB7CgkJCSR0aGlzLT5MbigkbGluZV93aWR0aCk7CgkJCSRiYXJjb2RlX3dpZHRoID0gcm91bmQoKCR0aGlzLT53IC0gJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4gLSAkdGhpcy0+b3JpZ2luYWxfck1hcmdpbikgLyAzKTsKCQkJJHN0eWxlID0gYXJyYXkoCgkJCQkncG9zaXRpb24nID0+ICR0aGlzLT5ydGw/J1InOidMJywKCQkJCSdhbGlnbicgPT4gJHRoaXMtPnJ0bD8nUic6J0wnLAoJCQkJJ3N0cmV0Y2gnID0+IGZhbHNlLAoJCQkJJ2ZpdHdpZHRoJyA9PiB0cnVlLAoJCQkJJ2NlbGxmaXRhbGlnbicgPT4gJycsCgkJCQknYm9yZGVyJyA9PiBmYWxzZSwKCQkJCSdwYWRkaW5nJyA9PiAwLAoJCQkJJ2ZnY29sb3InID0+IGFycmF5KDAsMCwwKSwKCQkJCSdiZ2NvbG9yJyA9PiBmYWxzZSwKCQkJCSd0ZXh0JyA9PiBmYWxzZQoJCQkpOwoJCQkkdGhpcy0+d3JpdGUxREJhcmNvZGUoJGJhcmNvZGUsICdDMTI4JywgJycsICRjdXJfeSArICRsaW5lX3dpZHRoLCAnJywgKCgkdGhpcy0+Zm9vdGVyX21hcmdpbiAvIDMpIC0gJGxpbmVfd2lkdGgpLCAwLjMsICRzdHlsZSwgJycpOwoJCX0KCQkkd19wYWdlID0gaXNzZXQoJHRoaXMtPmxbJ3dfcGFnZSddKSA/ICR0aGlzLT5sWyd3X3BhZ2UnXS4nICcgOiAnJzsKCQlpZiAoZW1wdHkoJHRoaXMtPnBhZ2Vncm91cHMpKSB7CgkJCSRwYWdlbnVtdHh0ID0gJHdfcGFnZS4kdGhpcy0+Z2V0QWxpYXNOdW1QYWdlKCkuJyAvICcuJHRoaXMtPmdldEFsaWFzTmJQYWdlcygpOwoJCX0gZWxzZSB7CgkJCSRwYWdlbnVtdHh0ID0gJHdfcGFnZS4kdGhpcy0+Z2V0UGFnZU51bUdyb3VwQWxpYXMoKS4nIC8gJy4kdGhpcy0+Z2V0UGFnZUdyb3VwQWxpYXMoKTsKCQl9CgkJJHRoaXMtPlNldFkoJGN1cl95KTsKCQkvL1ByaW50IHBhZ2UgbnVtYmVyCgkJaWYgKCR0aGlzLT5nZXRSVEwoKSkgewoJCQkkdGhpcy0+U2V0WCgkdGhpcy0+b3JpZ2luYWxfck1hcmdpbik7CgkJCSR0aGlzLT5DZWxsKDAsIDAsICRwYWdlbnVtdHh0LCAnVCcsIDAsICdMJyk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPlNldFgoJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4pOwoJCQkkdGhpcy0+Q2VsbCgwLCAwLCAkdGhpcy0+Z2V0QWxpYXNSaWdodFNoaWZ0KCkuJHBhZ2VudW10eHQsICdUJywgMCwgJ1InKTsKCQl9Cgl9CgoJLyoqCgkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgcGFnZSBoZWFkZXIuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAxMiAoMjAwOC0wNy0yNCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEhlYWRlcigpIHsKCQlpZiAoISR0aGlzLT5wcmludF9oZWFkZXIgT1IgKCR0aGlzLT5zdGF0ZSAhPSAyKSkgewoJCQlyZXR1cm47CgkJfQoJCSR0aGlzLT5JbkhlYWRlciA9IHRydWU7CgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCR0aGlzLT5kZWZhdWx0X2dyYXBoaWNfdmFycyk7CgkJJHRlbXBfdGhlYWQgPSAkdGhpcy0+dGhlYWQ7CgkJJHRlbXBfdGhlYWRNYXJnaW5zID0gJHRoaXMtPnRoZWFkTWFyZ2luczsKCQkkbGFzdGggPSAkdGhpcy0+bGFzdGg7CgkJJG5ld2xpbmUgPSAkdGhpcy0+bmV3bGluZTsKCQkkdGhpcy0+X291dFNhdmVHcmFwaGljc1N0YXRlKCk7CgkJJHRoaXMtPnJNYXJnaW4gPSAkdGhpcy0+b3JpZ2luYWxfck1hcmdpbjsKCQkkdGhpcy0+bE1hcmdpbiA9ICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luOwoJCSR0aGlzLT5TZXRDZWxsUGFkZGluZygwKTsKCQkvL3NldCBjdXJyZW50IHBvc2l0aW9uCgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJJHRoaXMtPlNldFhZKCR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luLCAkdGhpcy0+aGVhZGVyX21hcmdpbik7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPlNldFhZKCR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luLCAkdGhpcy0+aGVhZGVyX21hcmdpbik7CgkJfQoJCSR0aGlzLT5TZXRGb250KCR0aGlzLT5oZWFkZXJfZm9udFswXSwgJHRoaXMtPmhlYWRlcl9mb250WzFdLCAkdGhpcy0+aGVhZGVyX2ZvbnRbMl0pOwoJCSR0aGlzLT5IZWFkZXIoKTsKCQkvL3Jlc3RvcmUgcG9zaXRpb24KCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4sICR0aGlzLT50TWFyZ2luKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4sICR0aGlzLT50TWFyZ2luKTsKCQl9CgkJJHRoaXMtPl9vdXRSZXN0b3JlR3JhcGhpY3NTdGF0ZSgpOwoJCSR0aGlzLT5sYXN0aCA9ICRsYXN0aDsKCQkkdGhpcy0+dGhlYWQgPSAkdGVtcF90aGVhZDsKCQkkdGhpcy0+dGhlYWRNYXJnaW5zID0gJHRlbXBfdGhlYWRNYXJnaW5zOwoJCSR0aGlzLT5uZXdsaW5lID0gJG5ld2xpbmU7CgkJJHRoaXMtPkluSGVhZGVyID0gZmFsc2U7Cgl9CgoJLyoqCgkgKiBUaGlzIG1ldGhvZCBpcyB1c2VkIHRvIHJlbmRlciB0aGUgcGFnZSBmb290ZXIuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4wLjAxMiAoMjAwOC0wNy0yNCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEZvb3RlcigpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+SW5Gb290ZXIgPSB0cnVlOwoJCS8vIHNhdmUgY3VycmVudCBncmFwaGljIHNldHRpbmdzCgkJJGd2YXJzID0gJHRoaXMtPmdldEdyYXBoaWNWYXJzKCk7CgkJLy8gbWFyayB0aGlzIHBvaW50CgkJJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV07CgkJJHRoaXMtPl9vdXQoIlxuIik7CgkJaWYgKCR0aGlzLT5wcmludF9mb290ZXIpIHsKCQkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCR0aGlzLT5kZWZhdWx0X2dyYXBoaWNfdmFycyk7CgkJCSR0aGlzLT5jdXJyZW50X2NvbHVtbiA9IDA7CgkJCSR0aGlzLT5udW1fY29sdW1ucyA9IDE7CgkJCSR0ZW1wX3RoZWFkID0gJHRoaXMtPnRoZWFkOwoJCQkkdGVtcF90aGVhZE1hcmdpbnMgPSAkdGhpcy0+dGhlYWRNYXJnaW5zOwoJCQkkbGFzdGggPSAkdGhpcy0+bGFzdGg7CgkJCSR0aGlzLT5fb3V0U2F2ZUdyYXBoaWNzU3RhdGUoKTsKCQkJJHRoaXMtPnJNYXJnaW4gPSAkdGhpcy0+b3JpZ2luYWxfck1hcmdpbjsKCQkJJHRoaXMtPmxNYXJnaW4gPSAkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbjsKCQkJJHRoaXMtPlNldENlbGxQYWRkaW5nKDApOwoJCQkvL3NldCBjdXJyZW50IHBvc2l0aW9uCgkJCSRmb290ZXJfeSA9ICR0aGlzLT5oIC0gJHRoaXMtPmZvb3Rlcl9tYXJnaW47CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4sICRmb290ZXJfeSk7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4sICRmb290ZXJfeSk7CgkJCX0KCQkJJHRoaXMtPlNldEZvbnQoJHRoaXMtPmZvb3Rlcl9mb250WzBdLCAkdGhpcy0+Zm9vdGVyX2ZvbnRbMV0sICR0aGlzLT5mb290ZXJfZm9udFsyXSk7CgkJCSR0aGlzLT5Gb290ZXIoKTsKCQkJLy9yZXN0b3JlIHBvc2l0aW9uCgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4sICR0aGlzLT50TWFyZ2luKTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5TZXRYWSgkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiwgJHRoaXMtPnRNYXJnaW4pOwoJCQl9CgkJCSR0aGlzLT5fb3V0UmVzdG9yZUdyYXBoaWNzU3RhdGUoKTsKCQkJJHRoaXMtPmxhc3RoID0gJGxhc3RoOwoJCQkkdGhpcy0+dGhlYWQgPSAkdGVtcF90aGVhZDsKCQkJJHRoaXMtPnRoZWFkTWFyZ2lucyA9ICR0ZW1wX3RoZWFkTWFyZ2luczsKCQl9CgkJLy8gcmVzdG9yZSBncmFwaGljIHNldHRpbmdzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJJHRoaXMtPmN1cnJlbnRfY29sdW1uID0gJGd2YXJzWydjdXJyZW50X2NvbHVtbiddOwoJCSR0aGlzLT5udW1fY29sdW1ucyA9ICRndmFyc1snbnVtX2NvbHVtbnMnXTsKCQkvLyBjYWxjdWxhdGUgZm9vdGVyIGxlbmd0aAoJCSR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdIC0gJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV0gKyAxOwoJCSR0aGlzLT5JbkZvb3RlciA9IGZhbHNlOwoJfQoKCS8qKgoJICogQ2hlY2sgaWYgd2UgYXJlIG9uIHRoZSBwYWdlIGJvZHkgKGV4Y2x1ZGluZyBwYWdlIGhlYWRlciBhbmQgZm9vdGVyKS4KCSAqIEByZXR1cm4gdHJ1ZSBpZiB3ZSBhcmUgbm90IGluIHBhZ2UgaGVhZGVyIG5vciBpbiBwYWdlIGZvb3RlciwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4wOTEgKDIwMTEtMDYtMTUpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBpblBhZ2VCb2R5KCkgewoJCXJldHVybiAoKCR0aGlzLT5JbkhlYWRlciA9PT0gZmFsc2UpIEFORCAoJHRoaXMtPkluRm9vdGVyID09PSBmYWxzZSkpOwoJfQoKCS8qKgoJICogVGhpcyBtZXRob2QgaXMgdXNlZCB0byByZW5kZXIgdGhlIHRhYmxlIGhlYWRlciBvbiBuZXcgcGFnZSAoaWYgYW55KS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDMwICgyMDA5LTAzLTI1KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0VGFibGVIZWFkZXIoKSB7CgkJaWYgKCR0aGlzLT5udW1fY29sdW1ucyA+IDEpIHsKCQkJLy8gbXVsdGkgY29sdW1uIG1vZGUKCQkJcmV0dXJuOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPnRoZWFkTWFyZ2luc1sndG9wJ10pKSB7CgkJCS8vIHJlc3RvcmUgdGhlIG9yaWdpbmFsIHRvcC1tYXJnaW4KCQkJJHRoaXMtPnRNYXJnaW4gPSAkdGhpcy0+dGhlYWRNYXJnaW5zWyd0b3AnXTsKCQkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0bSddID0gJHRoaXMtPnRNYXJnaW47CgkJCSR0aGlzLT55ID0gJHRoaXMtPnRNYXJnaW47CgkJfQoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnRoZWFkKSBBTkQgKCEkdGhpcy0+aW50aGVhZCkpIHsKCQkJLy8gc2V0IG1hcmdpbnMKCQkJJHByZXZfbE1hcmdpbiA9ICR0aGlzLT5sTWFyZ2luOwoJCQkkcHJldl9yTWFyZ2luID0gJHRoaXMtPnJNYXJnaW47CgkJCSRwcmV2X2NlbGxfcGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJCSR0aGlzLT5sTWFyZ2luID0gJHRoaXMtPnRoZWFkTWFyZ2luc1snbG1hcmdpbiddICsgKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ10gLSAkdGhpcy0+cGFnZWRpbVskdGhpcy0+dGhlYWRNYXJnaW5zWydwYWdlJ11dWydvbG0nXSk7CgkJCSR0aGlzLT5yTWFyZ2luID0gJHRoaXMtPnRoZWFkTWFyZ2luc1sncm1hcmdpbiddICsgKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ10gLSAkdGhpcy0+cGFnZWRpbVskdGhpcy0+dGhlYWRNYXJnaW5zWydwYWdlJ11dWydvcm0nXSk7CgkJCSR0aGlzLT5jZWxsX3BhZGRpbmcgPSAkdGhpcy0+dGhlYWRNYXJnaW5zWydjZWxsX3BhZGRpbmcnXTsKCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbjsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmxNYXJnaW47CgkJCX0KCQkJLy8gYWNjb3VudCBmb3Igc3BlY2lhbCAiY2VsbCIgbW9kZQoJCQlpZiAoJHRoaXMtPnRoZWFkTWFyZ2luc1snY2VsbCddKSB7CgkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCSR0aGlzLT54IC09ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPnggKz0gJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddOwoJCQkJfQoJCQl9CgkJCSRndmFycyA9ICR0aGlzLT5nZXRHcmFwaGljVmFycygpOwoJCQlpZiAoIWVtcHR5KCR0aGlzLT50aGVhZE1hcmdpbnNbJ2d2YXJzJ10pKSB7CgkJCQkvLyBzZXQgdGhlIGNvcnJlY3QgZ3JhcGhpYyBzdHlsZQoJCQkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCR0aGlzLT50aGVhZE1hcmdpbnNbJ2d2YXJzJ10pOwoJCQkJJHRoaXMtPnJNYXJnaW4gPSAkZ3ZhcnNbJ3JNYXJnaW4nXTsKCQkJCSR0aGlzLT5sTWFyZ2luID0gJGd2YXJzWydsTWFyZ2luJ107CgkJCX0KCQkJLy8gcHJpbnQgdGFibGUgaGVhZGVyCgkJCSR0aGlzLT53cml0ZUhUTUwoJHRoaXMtPnRoZWFkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJycpOwoJCQkkdGhpcy0+c2V0R3JhcGhpY1ZhcnMoJGd2YXJzKTsKCQkJLy8gc2V0IG5ldyB0b3AgbWFyZ2luIHRvIHNraXAgdGhlIHRhYmxlIGhlYWRlcnMKCQkJaWYgKCFpc3NldCgkdGhpcy0+dGhlYWRNYXJnaW5zWyd0b3AnXSkpIHsKCQkJCSR0aGlzLT50aGVhZE1hcmdpbnNbJ3RvcCddID0gJHRoaXMtPnRNYXJnaW47CgkJCX0KCQkJLy8gc3RvcmUgZW5kIG9mIGhlYWRlciBwb3NpdGlvbgoJCQlpZiAoIWlzc2V0KCR0aGlzLT5jb2x1bW5zWzBdWyd0aCddKSkgewoJCQkJJHRoaXMtPmNvbHVtbnNbMF1bJ3RoJ10gPSBhcnJheSgpOwoJCQl9CgkJCSR0aGlzLT5jb2x1bW5zWzBdWyd0aCddWydcJycuJHRoaXMtPnBhZ2UuJ1wnJ10gPSAkdGhpcy0+eTsKCQkJJHRoaXMtPnRNYXJnaW4gPSAkdGhpcy0+eTsKCQkJJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWyd0bSddID0gJHRoaXMtPnRNYXJnaW47CgkJCSR0aGlzLT5sYXN0aCA9IDA7CgkJCSR0aGlzLT5sTWFyZ2luID0gJHByZXZfbE1hcmdpbjsKCQkJJHRoaXMtPnJNYXJnaW4gPSAkcHJldl9yTWFyZ2luOwoJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHByZXZfY2VsbF9wYWRkaW5nOwoJCX0KCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIuCgkgKiBAcmV0dXJuIGludCBwYWdlIG51bWJlcgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBnZXRBbGlhc05iUGFnZXMoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gUGFnZU5vKCkgewoJCXJldHVybiAkdGhpcy0+cGFnZTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGFycmF5IG9mIHNwb3QgY29sb3JzLgoJICogQHJldHVybiAoYXJyYXkpIFNwb3QgY29sb3JzIGFycmF5LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDYuMC4wMzggKDIwMTMtMDktMzApCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRBbGxTcG90Q29sb3JzKCkgewoJCXJldHVybiAkdGhpcy0+c3BvdF9jb2xvcnM7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIGEgbmV3IHNwb3QgY29sb3IuCgkgKiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiBjb21wb25lbnRzIG9yIGdyYXkgc2NhbGUuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBGdWxsIG5hbWUgb2YgdGhlIHNwb3QgY29sb3IuCgkgKiBAcGFyYW0gJGMgKGZsb2F0KSBDeWFuIGNvbG9yIGZvciBDTVlLLiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KCSAqIEBwYXJhbSAkbSAoZmxvYXQpIE1hZ2VudGEgY29sb3IgZm9yIENNWUsuIFZhbHVlIGJldHdlZW4gMCBhbmQgMTAwLgoJICogQHBhcmFtICR5IChmbG9hdCkgWWVsbG93IGNvbG9yIGZvciBDTVlLLiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KCSAqIEBwYXJhbSAkayAoZmxvYXQpIEtleSAoQmxhY2spIGNvbG9yIGZvciBDTVlLLiBWYWx1ZSBiZXR3ZWVuIDAgYW5kIDEwMC4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjAuMDI0ICgyMDA4LTA5LTEyKQoJICogQHNlZSBTZXREcmF3U3BvdENvbG9yKCksIFNldEZpbGxTcG90Q29sb3IoKSwgU2V0VGV4dFNwb3RDb2xvcigpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBBZGRTcG90Q29sb3IoJG5hbWUsICRjLCAkbSwgJHksICRrKSB7CgkJaWYgKCFpc3NldCgkdGhpcy0+c3BvdF9jb2xvcnNbJG5hbWVdKSkgewoJCQkkaSA9ICgxICsgY291bnQoJHRoaXMtPnNwb3RfY29sb3JzKSk7CgkJCSR0aGlzLT5zcG90X2NvbG9yc1skbmFtZV0gPSBhcnJheSgnQycgPT4gJGMsICdNJyA9PiAkbSwgJ1knID0+ICR5LCAnSycgPT4gJGssICduYW1lJyA9PiAkbmFtZSwgJ2knID0+ICRpKTsKCQl9Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHNwb3QgY29sb3IgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSAoJ2RyYXcnLCAnZmlsbCcsICd0ZXh0JykuCgkgKiBAcGFyYW0gJHR5cGUgKHN0cmluZykgVHlwZSBvZiBvYmplY3QgYWZmZWN0ZWQgYnkgdGhpcyBjb2xvcjogKCdkcmF3JywgJ2ZpbGwnLCAndGV4dCcpLgoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIE5hbWUgb2YgdGhlIHNwb3QgY29sb3IuCgkgKiBAcGFyYW0gJHRpbnQgKGZsb2F0KSBJbnRlbnNpdHkgb2YgdGhlIGNvbG9yIChmcm9tIDAgdG8gMTAwIDsgMTAwID0gZnVsbCBpbnRlbnNpdHkgYnkgZGVmYXVsdCkuCgkgKiBAcmV0dXJuIChzdHJpbmcpIFBERiBjb2xvciBjb21tYW5kLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xMjUgKDIwMTEtMTAtMDMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRTcG90Q29sb3IoJHR5cGUsICRuYW1lLCAkdGludD0xMDApIHsKCQkkc3BvdGNvbG9yID0gVENQREZfQ09MT1JTOjpnZXRTcG90Q29sb3IoJG5hbWUsICR0aGlzLT5zcG90X2NvbG9ycyk7CgkJaWYgKCRzcG90Y29sb3IgPT09IGZhbHNlKSB7CgkJCSR0aGlzLT5FcnJvcignVW5kZWZpbmVkIHNwb3QgY29sb3I6ICcuJG5hbWUuJywgeW91IG11c3QgYWRkIGl0IHVzaW5nIHRoZSBBZGRTcG90Q29sb3IoKSBtZXRob2QuJyk7CgkJfQoJCSR0aW50ID0gKG1heCgwLCBtaW4oMTAwLCAkdGludCkpIC8gMTAwKTsKCQkkcGRmY29sb3IgPSBzcHJpbnRmKCcvQ1MlZCAnLCAkdGhpcy0+c3BvdF9jb2xvcnNbJG5hbWVdWydpJ10pOwoJCXN3aXRjaCAoJHR5cGUpIHsKCQkJY2FzZSAnZHJhdyc6IHsKCQkJCSRwZGZjb2xvciAuPSBzcHJpbnRmKCdDUyAlRiBTQ04nLCAkdGludCk7CgkJCQkkdGhpcy0+RHJhd0NvbG9yID0gJHBkZmNvbG9yOwoJCQkJJHRoaXMtPnN0cm9rZWNvbG9yID0gJHNwb3Rjb2xvcjsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2ZpbGwnOiB7CgkJCQkkcGRmY29sb3IgLj0gc3ByaW50ZignY3MgJUYgc2NuJywgJHRpbnQpOwoJCQkJJHRoaXMtPkZpbGxDb2xvciA9ICRwZGZjb2xvcjsKCQkJCSR0aGlzLT5iZ2NvbG9yID0gJHNwb3Rjb2xvcjsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3RleHQnOiB7CgkJCQkkcGRmY29sb3IgLj0gc3ByaW50ZignY3MgJUYgc2NuJywgJHRpbnQpOwoJCQkJJHRoaXMtPlRleHRDb2xvciA9ICRwZGZjb2xvcjsKCQkJCSR0aGlzLT5mZ2NvbG9yID0gJHNwb3Rjb2xvcjsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT5Db2xvckZsYWcgPSAoJHRoaXMtPkZpbGxDb2xvciAhPSAkdGhpcy0+VGV4dENvbG9yKTsKCQlpZiAoJHRoaXMtPnN0YXRlID09IDIpIHsKCQkJJHRoaXMtPl9vdXQoJHBkZmNvbG9yKTsKCQl9CgkJaWYgKCR0aGlzLT5pbnhvYmopIHsKCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnc3BvdF9jb2xvcnMnXVskbmFtZV0gPSAkdGhpcy0+c3BvdF9jb2xvcnNbJG5hbWVdOwoJCX0KCQlyZXR1cm4gJHBkZmNvbG9yOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgc3BvdCBjb2xvciB1c2VkIGZvciBhbGwgZHJhd2luZyBvcGVyYXRpb25zIChsaW5lcywgcmVjdGFuZ2xlcyBhbmQgY2VsbCBib3JkZXJzKS4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBOYW1lIG9mIHRoZSBzcG90IGNvbG9yLgoJICogQHBhcmFtICR0aW50IChmbG9hdCkgSW50ZW5zaXR5IG9mIHRoZSBjb2xvciAoZnJvbSAwIHRvIDEwMCA7IDEwMCA9IGZ1bGwgaW50ZW5zaXR5IGJ5IGRlZmF1bHQpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMjQgKDIwMDgtMDktMTIpCgkgKiBAc2VlIEFkZFNwb3RDb2xvcigpLCBTZXRGaWxsU3BvdENvbG9yKCksIFNldFRleHRTcG90Q29sb3IoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RHJhd1Nwb3RDb2xvcigkbmFtZSwgJHRpbnQ9MTAwKSB7CgkJJHRoaXMtPnNldFNwb3RDb2xvcignZHJhdycsICRuYW1lLCAkdGludCk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBzcG90IGNvbG9yIHVzZWQgZm9yIGFsbCBmaWxsaW5nIG9wZXJhdGlvbnMgKGZpbGxlZCByZWN0YW5nbGVzIGFuZCBjZWxsIGJhY2tncm91bmRzKS4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBOYW1lIG9mIHRoZSBzcG90IGNvbG9yLgoJICogQHBhcmFtICR0aW50IChmbG9hdCkgSW50ZW5zaXR5IG9mIHRoZSBjb2xvciAoZnJvbSAwIHRvIDEwMCA7IDEwMCA9IGZ1bGwgaW50ZW5zaXR5IGJ5IGRlZmF1bHQpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMjQgKDIwMDgtMDktMTIpCgkgKiBAc2VlIEFkZFNwb3RDb2xvcigpLCBTZXREcmF3U3BvdENvbG9yKCksIFNldFRleHRTcG90Q29sb3IoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RmlsbFNwb3RDb2xvcigkbmFtZSwgJHRpbnQ9MTAwKSB7CgkJJHRoaXMtPnNldFNwb3RDb2xvcignZmlsbCcsICRuYW1lLCAkdGludCk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBzcG90IGNvbG9yIHVzZWQgZm9yIHRleHQuCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgTmFtZSBvZiB0aGUgc3BvdCBjb2xvci4KCSAqIEBwYXJhbSAkdGludCAoaW50KSBJbnRlbnNpdHkgb2YgdGhlIGNvbG9yIChmcm9tIDAgdG8gMTAwIDsgMTAwID0gZnVsbCBpbnRlbnNpdHkgYnkgZGVmYXVsdCkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC4wLjAyNCAoMjAwOC0wOS0xMikKCSAqIEBzZWUgQWRkU3BvdENvbG9yKCksIFNldERyYXdTcG90Q29sb3IoKSwgU2V0RmlsbFNwb3RDb2xvcigpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRUZXh0U3BvdENvbG9yKCRuYW1lLCAkdGludD0xMDApIHsKCQkkdGhpcy0+c2V0U3BvdENvbG9yKCd0ZXh0JywgJG5hbWUsICR0aW50KTsKCX0KCgkvKioKCSAqIFNldCB0aGUgY29sb3IgYXJyYXkgZm9yIHRoZSBzcGVjaWZpZWQgdHlwZSAoJ2RyYXcnLCAnZmlsbCcsICd0ZXh0JykuCgkgKiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiwgQ01ZSyBvciBHUkFZIFNDQUxFIGNvbXBvbmVudHMuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkdHlwZSAoc3RyaW5nKSBUeXBlIG9mIG9iamVjdCBhZmZlY3RlZCBieSB0aGlzIGNvbG9yOiAoJ2RyYXcnLCAnZmlsbCcsICd0ZXh0JykuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgQXJyYXkgb2YgY29sb3JzICgxPWdyYXksIDM9UkdCLCA0PUNNWUsgb3IgNT1zcG90Y29sb3I9Q01ZSytuYW1lIHZhbHVlcykuCgkgKiBAcGFyYW0gJHJldCAoYm9vbGVhbikgSWYgdHJ1ZSBkbyBub3Qgc2VuZCB0aGUgUERGIGNvbW1hbmQuCgkgKiBAcmV0dXJuIChzdHJpbmcpIFRoZSBQREYgY29tbWFuZCBvciBlbXB0eSBzdHJpbmcuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0xMSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldENvbG9yQXJyYXkoJHR5cGUsICRjb2xvciwgJHJldD1mYWxzZSkgewoJCWlmIChpc19hcnJheSgkY29sb3IpKSB7CgkJCSRjb2xvciA9IGFycmF5X3ZhbHVlcygkY29sb3IpOwoJCQkvLyBjb21wb25lbnQ6IGdyZXksIFJHQiByZWQgb3IgQ01ZSyBjeWFuCgkJCSRjID0gaXNzZXQoJGNvbG9yWzBdKSA/ICRjb2xvclswXSA6IC0xOwoJCQkvLyBjb21wb25lbnQ6IFJHQiBncmVlbiBvciBDTVlLIG1hZ2VudGEKCQkJJG0gPSBpc3NldCgkY29sb3JbMV0pID8gJGNvbG9yWzFdIDogLTE7CgkJCS8vIGNvbXBvbmVudDogUkdCIGJsdWUgb3IgQ01ZSyB5ZWxsb3cKCQkJJHkgPSBpc3NldCgkY29sb3JbMl0pID8gJGNvbG9yWzJdIDogLTE7CgkJCS8vIGNvbXBvbmVudDogQ01ZSyBibGFjawoJCQkkayA9IGlzc2V0KCRjb2xvclszXSkgPyAkY29sb3JbM10gOiAtMTsKCQkJLy8gY29sb3IgbmFtZQoJCQkkbmFtZSA9IGlzc2V0KCRjb2xvcls0XSkgPyAkY29sb3JbNF0gOiAnJzsKCQkJaWYgKCRjID49IDApIHsKCQkJCXJldHVybiAkdGhpcy0+c2V0Q29sb3IoJHR5cGUsICRjLCAkbSwgJHksICRrLCAkcmV0LCAkbmFtZSk7CgkJCX0KCQl9CgkJcmV0dXJuICcnOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgY29sb3IgdXNlZCBmb3IgYWxsIGRyYXdpbmcgb3BlcmF0aW9ucyAobGluZXMsIHJlY3RhbmdsZXMgYW5kIGNlbGwgYm9yZGVycykuCgkgKiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiwgQ01ZSyBvciBHUkFZIFNDQUxFIGNvbXBvbmVudHMuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkY29sb3IgKGFycmF5KSBBcnJheSBvZiBjb2xvcnMgKDEsIDMgb3IgNCB2YWx1ZXMpLgoJICogQHBhcmFtICRyZXQgKGJvb2xlYW4pIElmIHRydWUgZG8gbm90IHNlbmQgdGhlIFBERiBjb21tYW5kLgoJICogQHJldHVybiBzdHJpbmcgdGhlIFBERiBjb21tYW5kCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0xMSkKCSAqIEBzZWUgU2V0RHJhd0NvbG9yKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldERyYXdDb2xvckFycmF5KCRjb2xvciwgJHJldD1mYWxzZSkgewoJCXJldHVybiAkdGhpcy0+c2V0Q29sb3JBcnJheSgnZHJhdycsICRjb2xvciwgJHJldCk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGZvciBhbGwgZmlsbGluZyBvcGVyYXRpb25zIChmaWxsZWQgcmVjdGFuZ2xlcyBhbmQgY2VsbCBiYWNrZ3JvdW5kcykuCgkgKiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiwgQ01ZSyBvciBHUkFZIFNDQUxFIGNvbXBvbmVudHMuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkY29sb3IgKGFycmF5KSBBcnJheSBvZiBjb2xvcnMgKDEsIDMgb3IgNCB2YWx1ZXMpLgoJICogQHBhcmFtICRyZXQgKGJvb2xlYW4pIElmIHRydWUgZG8gbm90IHNlbmQgdGhlIFBERiBjb21tYW5kLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtNi0xMSkKCSAqIEBzZWUgU2V0RmlsbENvbG9yKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldEZpbGxDb2xvckFycmF5KCRjb2xvciwgJHJldD1mYWxzZSkgewoJCXJldHVybiAkdGhpcy0+c2V0Q29sb3JBcnJheSgnZmlsbCcsICRjb2xvciwgJHJldCk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGZvciB0ZXh0LiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiBjb21wb25lbnRzIG9yIGdyYXkgc2NhbGUuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkY29sb3IgKGFycmF5KSBBcnJheSBvZiBjb2xvcnMgKDEsIDMgb3IgNCB2YWx1ZXMpLgoJICogQHBhcmFtICRyZXQgKGJvb2xlYW4pIElmIHRydWUgZG8gbm90IHNlbmQgdGhlIFBERiBjb21tYW5kLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtNi0xMSkKCSAqIEBzZWUgU2V0RmlsbENvbG9yKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldFRleHRDb2xvckFycmF5KCRjb2xvciwgJHJldD1mYWxzZSkgewoJCXJldHVybiAkdGhpcy0+c2V0Q29sb3JBcnJheSgndGV4dCcsICRjb2xvciwgJHJldCk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgdHlwZSAoJ2RyYXcnLCAnZmlsbCcsICd0ZXh0JykuCgkgKiBAcGFyYW0gJHR5cGUgKHN0cmluZykgVHlwZSBvZiBvYmplY3QgYWZmZWN0ZWQgYnkgdGhpcyBjb2xvcjogKCdkcmF3JywgJ2ZpbGwnLCAndGV4dCcpLgoJICogQHBhcmFtICRjb2wxIChmbG9hdCkgR1JBWSBsZXZlbCBmb3Igc2luZ2xlIGNvbG9yLCBvciBSZWQgY29sb3IgZm9yIFJHQiAoMC0yNTUpLCBvciBDWUFOIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJGNvbDIgKGZsb2F0KSBHUkVFTiBjb2xvciBmb3IgUkdCICgwLTI1NSksIG9yIE1BR0VOVEEgY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkY29sMyAoZmxvYXQpIEJMVUUgY29sb3IgZm9yIFJHQiAoMC0yNTUpLCBvciBZRUxMT1cgY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkY29sNCAoZmxvYXQpIEtFWSAoQkxBQ0spIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJHJldCAoYm9vbGVhbikgSWYgdHJ1ZSBkbyBub3Qgc2VuZCB0aGUgY29tbWFuZC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBzcG90IGNvbG9yIG5hbWUgKGlmIGFueSkKCSAqIEByZXR1cm4gKHN0cmluZykgVGhlIFBERiBjb21tYW5kIG9yIGVtcHR5IHN0cmluZy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMTI1ICgyMDExLTEwLTAzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Q29sb3IoJHR5cGUsICRjb2wxPTAsICRjb2wyPS0xLCAkY29sMz0tMSwgJGNvbDQ9LTEsICRyZXQ9ZmFsc2UsICRuYW1lPScnKSB7CgkJLy8gc2V0IGRlZmF1bHQgdmFsdWVzCgkJaWYgKCFpc19udW1lcmljKCRjb2wxKSkgewoJCQkkY29sMSA9IDA7CgkJfQoJCWlmICghaXNfbnVtZXJpYygkY29sMikpIHsKCQkJJGNvbDIgPSAtMTsKCQl9CgkJaWYgKCFpc19udW1lcmljKCRjb2wzKSkgewoJCQkkY29sMyA9IC0xOwoJCX0KCQlpZiAoIWlzX251bWVyaWMoJGNvbDQpKSB7CgkJCSRjb2w0ID0gLTE7CgkJfQoJCS8vIHNldCBjb2xvciBieSBjYXNlCgkJJHN1ZmZpeCA9ICcnOwoJCWlmICgoJGNvbDIgPT0gLTEpIEFORCAoJGNvbDMgPT0gLTEpIEFORCAoJGNvbDQgPT0gLTEpKSB7CgkJCS8vIEdyZXkgc2NhbGUKCQkJJGNvbDEgPSBtYXgoMCwgbWluKDI1NSwgJGNvbDEpKTsKCQkJJGludGNvbG9yID0gYXJyYXkoJ0cnID0+ICRjb2wxKTsKCQkJJHBkZmNvbG9yID0gc3ByaW50ZignJUYgJywgKCRjb2wxIC8gMjU1KSk7CgkJCSRzdWZmaXggPSAnZyc7CgkJfSBlbHNlaWYgKCRjb2w0ID09IC0xKSB7CgkJCS8vIFJHQgoJCQkkY29sMSA9IG1heCgwLCBtaW4oMjU1LCAkY29sMSkpOwoJCQkkY29sMiA9IG1heCgwLCBtaW4oMjU1LCAkY29sMikpOwoJCQkkY29sMyA9IG1heCgwLCBtaW4oMjU1LCAkY29sMykpOwoJCQkkaW50Y29sb3IgPSBhcnJheSgnUicgPT4gJGNvbDEsICdHJyA9PiAkY29sMiwgJ0InID0+ICRjb2wzKTsKCQkJJHBkZmNvbG9yID0gc3ByaW50ZignJUYgJUYgJUYgJywgKCRjb2wxIC8gMjU1KSwgKCRjb2wyIC8gMjU1KSwgKCRjb2wzIC8gMjU1KSk7CgkJCSRzdWZmaXggPSAncmcnOwoJCX0gZWxzZSB7CgkJCSRjb2wxID0gbWF4KDAsIG1pbigxMDAsICRjb2wxKSk7CgkJCSRjb2wyID0gbWF4KDAsIG1pbigxMDAsICRjb2wyKSk7CgkJCSRjb2wzID0gbWF4KDAsIG1pbigxMDAsICRjb2wzKSk7CgkJCSRjb2w0ID0gbWF4KDAsIG1pbigxMDAsICRjb2w0KSk7CgkJCWlmIChlbXB0eSgkbmFtZSkpIHsKCQkJCS8vIENNWUsKCQkJCSRpbnRjb2xvciA9IGFycmF5KCdDJyA9PiAkY29sMSwgJ00nID0+ICRjb2wyLCAnWScgPT4gJGNvbDMsICdLJyA9PiAkY29sNCk7CgkJCQkkcGRmY29sb3IgPSBzcHJpbnRmKCclRiAlRiAlRiAlRiAnLCAoJGNvbDEgLyAxMDApLCAoJGNvbDIgLyAxMDApLCAoJGNvbDMgLyAxMDApLCAoJGNvbDQgLyAxMDApKTsKCQkJCSRzdWZmaXggPSAnayc7CgkJCX0gZWxzZSB7CgkJCQkvLyBTUE9UIENPTE9SCgkJCQkkaW50Y29sb3IgPSBhcnJheSgnQycgPT4gJGNvbDEsICdNJyA9PiAkY29sMiwgJ1knID0+ICRjb2wzLCAnSycgPT4gJGNvbDQsICduYW1lJyA9PiAkbmFtZSk7CgkJCQkkdGhpcy0+QWRkU3BvdENvbG9yKCRuYW1lLCAkY29sMSwgJGNvbDIsICRjb2wzLCAkY29sNCk7CgkJCQkkcGRmY29sb3IgPSAkdGhpcy0+c2V0U3BvdENvbG9yKCR0eXBlLCAkbmFtZSwgMTAwKTsKCQkJfQoJCX0KCQlzd2l0Y2ggKCR0eXBlKSB7CgkJCWNhc2UgJ2RyYXcnOiB7CgkJCQkkcGRmY29sb3IgLj0gc3RydG91cHBlcigkc3VmZml4KTsKCQkJCSR0aGlzLT5EcmF3Q29sb3IgPSAkcGRmY29sb3I7CgkJCQkkdGhpcy0+c3Ryb2tlY29sb3IgPSAkaW50Y29sb3I7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdmaWxsJzogewoJCQkJJHBkZmNvbG9yIC49ICRzdWZmaXg7CgkJCQkkdGhpcy0+RmlsbENvbG9yID0gJHBkZmNvbG9yOwoJCQkJJHRoaXMtPmJnY29sb3IgPSAkaW50Y29sb3I7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICd0ZXh0JzogewoJCQkJJHBkZmNvbG9yIC49ICRzdWZmaXg7CgkJCQkkdGhpcy0+VGV4dENvbG9yID0gJHBkZmNvbG9yOwoJCQkJJHRoaXMtPmZnY29sb3IgPSAkaW50Y29sb3I7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkdGhpcy0+Q29sb3JGbGFnID0gKCR0aGlzLT5GaWxsQ29sb3IgIT0gJHRoaXMtPlRleHRDb2xvcik7CgkJaWYgKCgkdHlwZSAhPSAndGV4dCcpIEFORCAoJHRoaXMtPnN0YXRlID09IDIpKSB7CgkJCWlmICghJHJldCkgewoJCQkJJHRoaXMtPl9vdXQoJHBkZmNvbG9yKTsKCQkJfQoJCQlyZXR1cm4gJHBkZmNvbG9yOwoJCX0KCQlyZXR1cm4gJyc7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGZvciBhbGwgZHJhd2luZyBvcGVyYXRpb25zIChsaW5lcywgcmVjdGFuZ2xlcyBhbmQgY2VsbCBib3JkZXJzKS4gSXQgY2FuIGJlIGV4cHJlc3NlZCBpbiBSR0IgY29tcG9uZW50cyBvciBncmF5IHNjYWxlLiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSB2YWx1ZSBpcyByZXRhaW5lZCBmcm9tIHBhZ2UgdG8gcGFnZS4KCSAqIEBwYXJhbSAkY29sMSAoZmxvYXQpIEdSQVkgbGV2ZWwgZm9yIHNpbmdsZSBjb2xvciwgb3IgUmVkIGNvbG9yIGZvciBSR0IgKDAtMjU1KSwgb3IgQ1lBTiBjb2xvciBmb3IgQ01ZSyAoMC0xMDApLgoJICogQHBhcmFtICRjb2wyIChmbG9hdCkgR1JFRU4gY29sb3IgZm9yIFJHQiAoMC0yNTUpLCBvciBNQUdFTlRBIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJGNvbDMgKGZsb2F0KSBCTFVFIGNvbG9yIGZvciBSR0IgKDAtMjU1KSwgb3IgWUVMTE9XIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJGNvbDQgKGZsb2F0KSBLRVkgKEJMQUNLKSBjb2xvciBmb3IgQ01ZSyAoMC0xMDApLgoJICogQHBhcmFtICRyZXQgKGJvb2xlYW4pIElmIHRydWUgZG8gbm90IHNlbmQgdGhlIGNvbW1hbmQuCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgc3BvdCBjb2xvciBuYW1lIChpZiBhbnkpCgkgKiBAcmV0dXJuIHN0cmluZyB0aGUgUERGIGNvbW1hbmQKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjMKCSAqIEBzZWUgU2V0RHJhd0NvbG9yQXJyYXkoKSwgU2V0RmlsbENvbG9yKCksIFNldFRleHRDb2xvcigpLCBMaW5lKCksIFJlY3QoKSwgQ2VsbCgpLCBNdWx0aUNlbGwoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RHJhd0NvbG9yKCRjb2wxPTAsICRjb2wyPS0xLCAkY29sMz0tMSwgJGNvbDQ9LTEsICRyZXQ9ZmFsc2UsICRuYW1lPScnKSB7CgkJcmV0dXJuICR0aGlzLT5zZXRDb2xvcignZHJhdycsICRjb2wxLCAkY29sMiwgJGNvbDMsICRjb2w0LCAkcmV0LCAkbmFtZSk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGZvciBhbGwgZmlsbGluZyBvcGVyYXRpb25zIChmaWxsZWQgcmVjdGFuZ2xlcyBhbmQgY2VsbCBiYWNrZ3JvdW5kcykuIEl0IGNhbiBiZSBleHByZXNzZWQgaW4gUkdCIGNvbXBvbmVudHMgb3IgZ3JheSBzY2FsZS4gVGhlIG1ldGhvZCBjYW4gYmUgY2FsbGVkIGJlZm9yZSB0aGUgZmlyc3QgcGFnZSBpcyBjcmVhdGVkIGFuZCB0aGUgdmFsdWUgaXMgcmV0YWluZWQgZnJvbSBwYWdlIHRvIHBhZ2UuCgkgKiBAcGFyYW0gJGNvbDEgKGZsb2F0KSBHUkFZIGxldmVsIGZvciBzaW5nbGUgY29sb3IsIG9yIFJlZCBjb2xvciBmb3IgUkdCICgwLTI1NSksIG9yIENZQU4gY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkY29sMiAoZmxvYXQpIEdSRUVOIGNvbG9yIGZvciBSR0IgKDAtMjU1KSwgb3IgTUFHRU5UQSBjb2xvciBmb3IgQ01ZSyAoMC0xMDApLgoJICogQHBhcmFtICRjb2wzIChmbG9hdCkgQkxVRSBjb2xvciBmb3IgUkdCICgwLTI1NSksIG9yIFlFTExPVyBjb2xvciBmb3IgQ01ZSyAoMC0xMDApLgoJICogQHBhcmFtICRjb2w0IChmbG9hdCkgS0VZIChCTEFDSykgY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkcmV0IChib29sZWFuKSBJZiB0cnVlIGRvIG5vdCBzZW5kIHRoZSBjb21tYW5kLgoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIFNwb3QgY29sb3IgbmFtZSAoaWYgYW55KS4KCSAqIEByZXR1cm4gKHN0cmluZykgVGhlIFBERiBjb21tYW5kLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMwoJICogQHNlZSBTZXRGaWxsQ29sb3JBcnJheSgpLCBTZXREcmF3Q29sb3IoKSwgU2V0VGV4dENvbG9yKCksIFJlY3QoKSwgQ2VsbCgpLCBNdWx0aUNlbGwoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RmlsbENvbG9yKCRjb2wxPTAsICRjb2wyPS0xLCAkY29sMz0tMSwgJGNvbDQ9LTEsICRyZXQ9ZmFsc2UsICRuYW1lPScnKSB7CgkJcmV0dXJuICR0aGlzLT5zZXRDb2xvcignZmlsbCcsICRjb2wxLCAkY29sMiwgJGNvbDMsICRjb2w0LCAkcmV0LCAkbmFtZSk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBjb2xvciB1c2VkIGZvciB0ZXh0LiBJdCBjYW4gYmUgZXhwcmVzc2VkIGluIFJHQiBjb21wb25lbnRzIG9yIGdyYXkgc2NhbGUuIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgY3JlYXRlZCBhbmQgdGhlIHZhbHVlIGlzIHJldGFpbmVkIGZyb20gcGFnZSB0byBwYWdlLgoJICogQHBhcmFtICRjb2wxIChmbG9hdCkgR1JBWSBsZXZlbCBmb3Igc2luZ2xlIGNvbG9yLCBvciBSZWQgY29sb3IgZm9yIFJHQiAoMC0yNTUpLCBvciBDWUFOIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJGNvbDIgKGZsb2F0KSBHUkVFTiBjb2xvciBmb3IgUkdCICgwLTI1NSksIG9yIE1BR0VOVEEgY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkY29sMyAoZmxvYXQpIEJMVUUgY29sb3IgZm9yIFJHQiAoMC0yNTUpLCBvciBZRUxMT1cgY29sb3IgZm9yIENNWUsgKDAtMTAwKS4KCSAqIEBwYXJhbSAkY29sNCAoZmxvYXQpIEtFWSAoQkxBQ0spIGNvbG9yIGZvciBDTVlLICgwLTEwMCkuCgkgKiBAcGFyYW0gJHJldCAoYm9vbGVhbikgSWYgdHJ1ZSBkbyBub3Qgc2VuZCB0aGUgY29tbWFuZC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBTcG90IGNvbG9yIG5hbWUgKGlmIGFueSkuCgkgKiBAcmV0dXJuIChzdHJpbmcpIEVtcHR5IHN0cmluZy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjMKCSAqIEBzZWUgU2V0VGV4dENvbG9yQXJyYXkoKSwgU2V0RHJhd0NvbG9yKCksIFNldEZpbGxDb2xvcigpLCBUZXh0KCksIENlbGwoKSwgTXVsdGlDZWxsKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldFRleHRDb2xvcigkY29sMT0wLCAkY29sMj0tMSwgJGNvbDM9LTEsICRjb2w0PS0xLCAkcmV0PWZhbHNlLCAkbmFtZT0nJykgewoJCXJldHVybiAkdGhpcy0+c2V0Q29sb3IoJ3RleHQnLCAkY29sMSwgJGNvbDIsICRjb2wzLCAkY29sNCwgJHJldCwgJG5hbWUpOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgbGVuZ3RoIG9mIGEgc3RyaW5nIGluIHVzZXIgdW5pdC4gQSBmb250IG11c3QgYmUgc2VsZWN0ZWQuPGJyPgoJICogQHBhcmFtICRzIChzdHJpbmcpIFRoZSBzdHJpbmcgd2hvc2UgbGVuZ3RoIGlzIHRvIGJlIGNvbXB1dGVkCgkgKiBAcGFyYW0gJGZvbnRuYW1lIChzdHJpbmcpIEZhbWlseSBmb250LiBJdCBjYW4gYmUgZWl0aGVyIGEgbmFtZSBkZWZpbmVkIGJ5IEFkZEZvbnQoKSBvciBvbmUgb2YgdGhlIHN0YW5kYXJkIGZhbWlsaWVzLiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIHBhc3MgYW4gZW1wdHkgc3RyaW5nLCBpbiB0aGF0IGNhc2UsIHRoZSBjdXJyZW50IGZhbWlseSBpcyByZXRhaW5lZC4KCSAqIEBwYXJhbSAkZm9udHN0eWxlIChzdHJpbmcpIEZvbnQgc3R5bGUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgKGNhc2UgaW5zZW5zaXRpdmUpOjx1bD48bGk+ZW1wdHkgc3RyaW5nOiByZWd1bGFyPC9saT48bGk+QjogYm9sZDwvbGk+PGxpPkk6IGl0YWxpYzwvbGk+PGxpPlU6IHVuZGVybGluZTwvbGk+PGxpPkQ6IGxpbmUtdGhyb3VnaDwvbGk+PGxpPk86IG92ZXJsaW5lPC9saT48L3VsPiBvciBhbnkgY29tYmluYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHJlZ3VsYXIuCgkgKiBAcGFyYW0gJGZvbnRzaXplIChmbG9hdCkgRm9udCBzaXplIGluIHBvaW50cy4gVGhlIGRlZmF1bHQgdmFsdWUgaXMgdGhlIGN1cnJlbnQgc2l6ZS4KCSAqIEBwYXJhbSAkZ2V0YXJyYXkgKGJvb2xlYW4pIGlmIHRydWUgcmV0dXJucyBhbiBhcnJheSBvZiBjaGFyYWN0ZXJzIHdpZHRocywgaWYgZmFsc2UgcmV0dXJucyB0aGUgdG90YWwgbGVuZ3RoLgoJICogQHJldHVybiBtaXhlZCBpbnQgdG90YWwgc3RyaW5nIGxlbmd0aCBvciBhcnJheSBvZiBjaGFyYWN0ZWQgd2lkdGhzCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMgoJICovCglwdWJsaWMgZnVuY3Rpb24gR2V0U3RyaW5nV2lkdGgoJHMsICRmb250bmFtZT0nJywgJGZvbnRzdHlsZT0nJywgJGZvbnRzaXplPTAsICRnZXRhcnJheT1mYWxzZSkgewoJCXJldHVybiAkdGhpcy0+R2V0QXJyU3RyaW5nV2lkdGgoVENQREZfRk9OVFM6OnV0ZjhCaWRpKFRDUERGX0ZPTlRTOjpVVEY4U3RyaW5nVG9BcnJheSgkcywgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KSwgJHMsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCksICRmb250bmFtZSwgJGZvbnRzdHlsZSwgJGZvbnRzaXplLCAkZ2V0YXJyYXkpOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgc3RyaW5nIGxlbmd0aCBvZiBhbiBhcnJheSBvZiBjaGFycyBpbiB1c2VyIHVuaXQgb3IgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB3aWR0aHMuIEEgZm9udCBtdXN0IGJlIHNlbGVjdGVkLjxicj4KCSAqIEBwYXJhbSAkc2EgKHN0cmluZykgVGhlIGFycmF5IG9mIGNoYXJzIHdob3NlIHRvdGFsIGxlbmd0aCBpcyB0byBiZSBjb21wdXRlZAoJICogQHBhcmFtICRmb250bmFtZSAoc3RyaW5nKSBGYW1pbHkgZm9udC4gSXQgY2FuIGJlIGVpdGhlciBhIG5hbWUgZGVmaW5lZCBieSBBZGRGb250KCkgb3Igb25lIG9mIHRoZSBzdGFuZGFyZCBmYW1pbGllcy4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwYXNzIGFuIGVtcHR5IHN0cmluZywgaW4gdGhhdCBjYXNlLCB0aGUgY3VycmVudCBmYW1pbHkgaXMgcmV0YWluZWQuCgkgKiBAcGFyYW0gJGZvbnRzdHlsZSAoc3RyaW5nKSBGb250IHN0eWxlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKTo8dWw+PGxpPmVtcHR5IHN0cmluZzogcmVndWxhcjwvbGk+PGxpPkI6IGJvbGQ8L2xpPjxsaT5JOiBpdGFsaWM8L2xpPjxsaT5VOiB1bmRlcmxpbmU8L2xpPjxsaT5EOiBsaW5lIHRocm91Z2g8L2xpPjxsaT5POiBvdmVybGluZTwvbGk+PC91bD4gb3IgYW55IGNvbWJpbmF0aW9uLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyByZWd1bGFyLgoJICogQHBhcmFtICRmb250c2l6ZSAoZmxvYXQpIEZvbnQgc2l6ZSBpbiBwb2ludHMuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHRoZSBjdXJyZW50IHNpemUuCgkgKiBAcGFyYW0gJGdldGFycmF5IChib29sZWFuKSBpZiB0cnVlIHJldHVybnMgYW4gYXJyYXkgb2YgY2hhcmFjdGVycyB3aWR0aHMsIGlmIGZhbHNlIHJldHVybnMgdGhlIHRvdGFsIGxlbmd0aC4KCSAqIEByZXR1cm4gbWl4ZWQgaW50IHRvdGFsIHN0cmluZyBsZW5ndGggb3IgYXJyYXkgb2YgY2hhcmFjdGVkIHdpZHRocwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjQuMDAwICgyMDA4LTAzLTA2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gR2V0QXJyU3RyaW5nV2lkdGgoJHNhLCAkZm9udG5hbWU9JycsICRmb250c3R5bGU9JycsICRmb250c2l6ZT0wLCAkZ2V0YXJyYXk9ZmFsc2UpIHsKCQkvLyBzdG9yZSBjdXJyZW50IHZhbHVlcwoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZvbnRuYW1lKSkgewoJCQkkcHJldl9Gb250RmFtaWx5ID0gJHRoaXMtPkZvbnRGYW1pbHk7CgkJCSRwcmV2X0ZvbnRTdHlsZSA9ICR0aGlzLT5Gb250U3R5bGU7CgkJCSRwcmV2X0ZvbnRTaXplUHQgPSAkdGhpcy0+Rm9udFNpemVQdDsKCQkJJHRoaXMtPlNldEZvbnQoJGZvbnRuYW1lLCAkZm9udHN0eWxlLCAkZm9udHNpemUsICcnLCAnZGVmYXVsdCcsIGZhbHNlKTsKCQl9CgkJLy8gY29udmVydCBVVEYtOCBhcnJheSB0byBMYXRpbjEgaWYgcmVxdWlyZWQKCQlpZiAoJHRoaXMtPmlzdW5pY29kZSBBTkQgKCEkdGhpcy0+aXNVbmljb2RlRm9udCgpKSkgewoJCQkkc2EgPSBUQ1BERl9GT05UUzo6VVRGOEFyclRvTGF0aW4xQXJyKCRzYSk7CgkJfQoJCSR3ID0gMDsgLy8gdG90YWwgd2lkdGgKCQkkd2EgPSBhcnJheSgpOyAvLyBhcnJheSBvZiBjaGFyYWN0ZXJzIHdpZHRocwoJCWZvcmVhY2ggKCRzYSBhcyAkY2sgPT4gJGNoYXIpIHsKCQkJLy8gY2hhcmFjdGVyIHdpZHRoCgkJCSRjdyA9ICR0aGlzLT5HZXRDaGFyV2lkdGgoJGNoYXIsIGlzc2V0KCRzYVsoJGNrICsgMSldKSk7CgkJCSR3YVtdID0gJGN3OwoJCQkkdyArPSAkY3c7CgkJfQoJCS8vIHJlc3RvcmUgcHJldmlvdXMgdmFsdWVzCgkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udG5hbWUpKSB7CgkJCSR0aGlzLT5TZXRGb250KCRwcmV2X0ZvbnRGYW1pbHksICRwcmV2X0ZvbnRTdHlsZSwgJHByZXZfRm9udFNpemVQdCwgJycsICdkZWZhdWx0JywgZmFsc2UpOwoJCX0KCQlpZiAoJGdldGFycmF5KSB7CgkJCXJldHVybiAkd2E7CgkJfQoJCXJldHVybiAkdzsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgY2hhciBpbiB1c2VyIHVuaXQgZm9yIHRoZSBjdXJyZW50IGZvbnQgY29uc2lkZXJpbmcgY3VycmVudCBzdHJldGNoaW5nIGFuZCBzcGFjaW5nICh0cmFja2luZykuCgkgKiBAcGFyYW0gJGNoYXIgKGludCkgVGhlIGNoYXIgY29kZSB3aG9zZSBsZW5ndGggaXMgdG8gYmUgcmV0dXJuZWQKCSAqIEBwYXJhbSAkbm90bGFzdCAoYm9vbGVhbikgSWYgZmFsc2UgaWdub3JlIHRoZSBmb250LXNwYWNpbmcuCgkgKiBAcmV0dXJuIGZsb2F0IGNoYXIgd2lkdGgKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi40LjAwMCAoMjAwOC0wMy0wNikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEdldENoYXJXaWR0aCgkY2hhciwgJG5vdGxhc3Q9dHJ1ZSkgewoJCS8vIGdldCByYXcgd2lkdGgKCQkkY2h3ID0gJHRoaXMtPmdldFJhd0NoYXJXaWR0aCgkY2hhcik7CgkJaWYgKCgkdGhpcy0+Zm9udF9zcGFjaW5nIDwgMCkgT1IgKCgkdGhpcy0+Zm9udF9zcGFjaW5nID4gMCkgQU5EICRub3RsYXN0KSkgewoJCQkvLyBpbmNyZWFzZS9kZWNyZWFzZSBmb250IHNwYWNpbmcKCQkJJGNodyArPSAkdGhpcy0+Zm9udF9zcGFjaW5nOwoJCX0KCQlpZiAoJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAhPSAxMDApIHsKCQkJLy8gZml4ZWQgc3RyZXRjaGluZyBtb2RlCgkJCSRjaHcgKj0gKCR0aGlzLT5mb250X3N0cmV0Y2hpbmcgLyAxMDApOwoJCX0KCQlyZXR1cm4gJGNodzsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgY2hhciBpbiB1c2VyIHVuaXQgZm9yIHRoZSBjdXJyZW50IGZvbnQuCgkgKiBAcGFyYW0gJGNoYXIgKGludCkgVGhlIGNoYXIgY29kZSB3aG9zZSBsZW5ndGggaXMgdG8gYmUgcmV0dXJuZWQKCSAqIEByZXR1cm4gZmxvYXQgY2hhciB3aWR0aAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTA5LTI4KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0UmF3Q2hhcldpZHRoKCRjaGFyKSB7CgkJaWYgKCRjaGFyID09IDE3MykgewoJCQkvLyBTSFkgY2hhcmFjdGVyIHdpbGwgbm90IGJlIHByaW50ZWQKCQkJcmV0dXJuICgwKTsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5DdXJyZW50Rm9udFsnY3cnXVskY2hhcl0pKSB7CgkJCSR3ID0gJHRoaXMtPkN1cnJlbnRGb250WydjdyddWyRjaGFyXTsKCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydkdyddKSkgewoJCQkvLyBkZWZhdWx0IHdpZHRoCgkJCSR3ID0gJHRoaXMtPkN1cnJlbnRGb250WydkdyddOwoJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2N3J11bMzJdKSkgewoJCQkvLyBkZWZhdWx0IHdpZHRoCgkJCSR3ID0gJHRoaXMtPkN1cnJlbnRGb250WydjdyddWzMyXTsKCQl9IGVsc2UgewoJCQkkdyA9IDYwMDsKCQl9CgkJcmV0dXJuICR0aGlzLT5nZXRBYnNGb250TWVhc3VyZSgkdyk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBudW1iZXJvIG9mIGNoYXJhY3RlcnMgaW4gYSBzdHJpbmcuCgkgKiBAcGFyYW0gJHMgKHN0cmluZykgVGhlIGlucHV0IHN0cmluZy4KCSAqIEByZXR1cm4gaW50IG51bWJlciBvZiBjaGFyYWN0ZXJzCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4wLjAwMDEgKDIwMDgtMDEtMDcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXROdW1DaGFycygkcykgewoJCWlmICgkdGhpcy0+aXNVbmljb2RlRm9udCgpKSB7CgkJCXJldHVybiBjb3VudChUQ1BERl9GT05UUzo6VVRGOFN0cmluZ1RvQXJyYXkoJHMsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCkpOwoJCX0KCQlyZXR1cm4gc3RybGVuKCRzKTsKCX0KCgkvKioKCSAqIEZpbGwgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIGZvbnRzICgkdGhpcy0+Zm9udGxpc3QpLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuMC4wMTMgKDIwMDgtMDctMjgpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRGb250c0xpc3QoKSB7CgkJaWYgKCgkZm9udHNkaXIgPSBvcGVuZGlyKFRDUERGX0ZPTlRTOjpfZ2V0Zm9udHBhdGgoKSkpICE9PSBmYWxzZSkgewoJCQl3aGlsZSAoKCRmaWxlID0gcmVhZGRpcigkZm9udHNkaXIpKSAhPT0gZmFsc2UpIHsKCQkJCWlmIChzdWJzdHIoJGZpbGUsIC00KSA9PSAnLnBocCcpIHsKCQkJCQlhcnJheV9wdXNoKCR0aGlzLT5mb250bGlzdCwgc3RydG9sb3dlcihiYXNlbmFtZSgkZmlsZSwgJy5waHAnKSkpOwoJCQkJfQoJCQl9CgkJCWNsb3NlZGlyKCRmb250c2Rpcik7CgkJfQoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgdW5pY29kZSBjYXJhY3RlciBzcGVjaWZpZWQgYnkgdGhlIHZhbHVlCgkgKiBAcGFyYW0gJGMgKGludCkgVVRGLTggdmFsdWUKCSAqIEByZXR1cm4gUmV0dXJucyB0aGUgc3BlY2lmaWVkIGNoYXJhY3Rlci4KCSAqIEBzaW5jZSAyLjMuMDAwICgyMDA4LTAzLTA1KQoJICogQHB1YmxpYwoJICogQGRlcHJlY2F0ZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVuaWNocigkYykgewoJCXJldHVybiBUQ1BERl9GT05UUzo6dW5pY2hyKCRjLCAkdGhpcy0+aXN1bmljb2RlKTsKCX0KCgkvKioKCSAqIENvbnZlcnQgYW5kIGFkZCB0aGUgc2VsZWN0ZWQgVHJ1ZVR5cGUgb3IgVHlwZTEgZm9udCB0byB0aGUgZm9udHMgZm9sZGVyICh0aGF0IG11c3QgYmUgd3JpdGVhYmxlKS4KCSAqIEBwYXJhbSAkZm9udGZpbGUgKHN0cmluZykgRm9udCBmaWxlIChmdWxsIHBhdGgpLgoJICogQHBhcmFtICRmb250dHlwZSAoc3RyaW5nKSBGb250IHR5cGUuIExlYXZlIGVtcHR5IGZvciBhdXRvZGV0ZWN0IG1vZGUuIFZhbGlkIHZhbHVlcyBhcmU6IFRydWVUeXBlVW5pY29kZSwgVHJ1ZVR5cGUsIFR5cGUxLCBDSUQwSlAgPSBDSUQtMCBKYXBhbmVzZSwgQ0lEMEtSID0gQ0lELTAgS29yZWFuLCBDSUQwQ1MgPSBDSUQtMCBDaGluZXNlIFNpbXBsaWZpZWQsIENJRDBDVCA9IENJRC0wIENoaW5lc2UgVHJhZGl0aW9uYWwuCgkgKiBAcGFyYW0gJGVuYyAoc3RyaW5nKSBOYW1lIG9mIHRoZSBlbmNvZGluZyB0YWJsZSB0byB1c2UuIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0IG1vZGUuIE9taXQgdGhpcyBwYXJhbWV0ZXIgZm9yIFRydWVUeXBlIFVuaWNvZGUgYW5kIHN5bWJvbGljIGZvbnRzIGxpa2UgU3ltYm9sIG9yIFphcGZEaW5nQmF0cy4KCSAqIEBwYXJhbSAkZmxhZ3MgKGludCkgVW5zaWduZWQgMzItYml0IGludGVnZXIgY29udGFpbmluZyBmbGFncyBzcGVjaWZ5aW5nIHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBmb250IChQREYzMjAwMDoyMDA4IC0gOS44LjIgRm9udCBEZXNjcmlwdG9yIEZsYWdzKTogKzEgZm9yIGZpeGVkIGZvbnQ7ICs0IGZvciBzeW1ib2wgb3IgKzMyIGZvciBub24tc3ltYm9sOyArNjQgZm9yIGl0YWxpYy4gRml4ZWQgYW5kIEl0YWxpYyBtb2RlIGFyZSBnZW5lcmFsbHkgYXV0b2RldGVjdGVkIHNvIHlvdSBoYXZlIHRvIHNldCBpdCB0byAzMiA9IG5vbi1zeW1ib2xpYyBmb250IChkZWZhdWx0KSBvciA0ID0gc3ltYm9saWMgZm9udC4KCSAqIEBwYXJhbSAkb3V0cGF0aCAoc3RyaW5nKSBPdXRwdXQgcGF0aCBmb3IgZ2VuZXJhdGVkIGZvbnQgZmlsZXMgKG11c3QgYmUgd3JpdGVhYmxlIGJ5IHRoZSB3ZWIgc2VydmVyKS4gTGVhdmUgZW1wdHkgZm9yIGRlZmF1bHQgZm9udCBmb2xkZXIuCgkgKiBAcGFyYW0gJHBsYXRpZCAoaW50KSBQbGF0Zm9ybSBJRCBmb3IgQ01BUCB0YWJsZSB0byBleHRyYWN0ICh3aGVuIGJ1aWxkaW5nIGEgVW5pY29kZSBmb250IGZvciBXaW5kb3dzIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDMsIGZvciBNYWNpbnRvc2ggc2hvdWxkIGJlIDEpLgoJICogQHBhcmFtICRlbmNpZCAoaW50KSBFbmNvZGluZyBJRCBmb3IgQ01BUCB0YWJsZSB0byBleHRyYWN0ICh3aGVuIGJ1aWxkaW5nIGEgVW5pY29kZSBmb250IGZvciBXaW5kb3dzIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDEsIGZvciBNYWNpbnRvc2ggc2hvdWxkIGJlIDApLiBXaGVuIFBsYXRmb3JtIElEIGlzIDMsIGxlZ2FsIHZhbHVlcyBmb3IgRW5jb2RpbmcgSUQgYXJlOiAwPVN5bWJvbCwgMT1Vbmljb2RlLCAyPVNoaWZ0SklTLCAzPVBSQywgND1CaWc1LCA1PVdhbnN1bmcsIDY9Sm9oYWIsIDc9UmVzZXJ2ZWQsIDg9UmVzZXJ2ZWQsIDk9UmVzZXJ2ZWQsIDEwPVVDUy00LgoJICogQHBhcmFtICRhZGRjYmJveCAoYm9vbGVhbikgSWYgdHJ1ZSBpbmNsdWRlcyB0aGUgY2hhcmFjdGVyIGJvdW5kaW5nIGJveCBpbmZvcm1hdGlvbiBvbiB0aGUgcGhwIGZvbnQgZmlsZS4KCSAqIEByZXR1cm4gKHN0cmluZykgVENQREYgZm9udCBuYW1lLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjkuMTIzICgyMDEwLTA5LTMwKQoJICogQHB1YmxpYwoJICogQGRlcHJlY2F0ZWQKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZFRURmZvbnQoJGZvbnRmaWxlLCAkZm9udHR5cGU9JycsICRlbmM9JycsICRmbGFncz0zMiwgJG91dHBhdGg9JycsICRwbGF0aWQ9MywgJGVuY2lkPTEsICRhZGRjYmJveD1mYWxzZSkgewoJCXJldHVybiBUQ1BERl9GT05UUzo6YWRkVFRGZm9udCgkZm9udGZpbGUsICRmb250dHlwZSwgJGVuYywgJGZsYWdzLCAkb3V0cGF0aCwgJHBsYXRpZCwgJGVuY2lkLCAkYWRkY2Jib3gpOwoJfQoKCS8qKgoJICogSW1wb3J0cyBhIFRydWVUeXBlLCBUeXBlMSwgY29yZSwgb3IgQ0lEMCBmb250IGFuZCBtYWtlcyBpdCBhdmFpbGFibGUuCgkgKiBJdCBpcyBuZWNlc3NhcnkgdG8gZ2VuZXJhdGUgYSBmb250IGRlZmluaXRpb24gZmlsZSBmaXJzdCAocmVhZCAvZm9udHMvdXRpbHMvUkVBRE1FLlRYVCkuCgkgKiBUaGUgZGVmaW5pdGlvbiBmaWxlIChhbmQgdGhlIGZvbnQgZmlsZSBpdHNlbGYgd2hlbiBlbWJlZGRpbmcpIG11c3QgYmUgcHJlc2VudCBlaXRoZXIgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGluIHRoZSBvbmUgaW5kaWNhdGVkIGJ5IEtfUEFUSF9GT05UUyBpZiB0aGUgY29uc3RhbnQgaXMgZGVmaW5lZC4gSWYgaXQgY291bGQgbm90IGJlIGZvdW5kLCB0aGUgZXJyb3IgIkNvdWxkIG5vdCBpbmNsdWRlIGZvbnQgZGVmaW5pdGlvbiBmaWxlIiBpcyBnZW5lcmF0ZWQuCgkgKiBAcGFyYW0gJGZhbWlseSAoc3RyaW5nKSBGb250IGZhbWlseS4gVGhlIG5hbWUgY2FuIGJlIGNob3NlbiBhcmJpdHJhcmlseS4gSWYgaXQgaXMgYSBzdGFuZGFyZCBmYW1pbHkgbmFtZSwgaXQgd2lsbCBvdmVycmlkZSB0aGUgY29ycmVzcG9uZGluZyBmb250LgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBGb250IHN0eWxlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIChjYXNlIGluc2Vuc2l0aXZlKTo8dWw+PGxpPmVtcHR5IHN0cmluZzogcmVndWxhciAoZGVmYXVsdCk8L2xpPjxsaT5COiBib2xkPC9saT48bGk+STogaXRhbGljPC9saT48bGk+Qkkgb3IgSUI6IGJvbGQgaXRhbGljPC9saT48L3VsPgoJICogQHBhcmFtICRmb250ZmlsZSAoc3RyaW5nKSBUaGUgZm9udCBkZWZpbml0aW9uIGZpbGUuIEJ5IGRlZmF1bHQsIHRoZSBuYW1lIGlzIGJ1aWx0IGZyb20gdGhlIGZhbWlseSBhbmQgc3R5bGUsIGluIGxvd2VyIGNhc2Ugd2l0aCBubyBzcGFjZXMuCgkgKiBAcmV0dXJuIGFycmF5IGNvbnRhaW5pbmcgdGhlIGZvbnQgZGF0YSwgb3IgZmFsc2UgaW4gY2FzZSBvZiBlcnJvci4KCSAqIEBwYXJhbSAkc3Vic2V0IChtaXhlZCkgaWYgdHJ1ZSBlbWJlZGQgb25seSBhIHN1YnNldCBvZiB0aGUgZm9udCAoc3RvcmVzIG9ubHkgdGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHVzZWQgY2hhcmFjdGVycyk7IGlmIGZhbHNlIGVtYmVkZCBmdWxsIGZvbnQ7IGlmICdkZWZhdWx0JyB1c2VzIHRoZSBkZWZhdWx0IHZhbHVlIHNldCB1c2luZyBzZXRGb250U3Vic2V0dGluZygpLiBUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBUcnVlVHlwZVVuaWNvZGUgZm9udHMuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB1c2VycyB0byBjaGFuZ2UgdGhlIGRvY3VtZW50LCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gZmFsc2UuIElmIHlvdSBzdWJzZXQgdGhlIGZvbnQsIHRoZSBwZXJzb24gd2hvIHJlY2VpdmVzIHlvdXIgUERGIHdvdWxkIG5lZWQgdG8gaGF2ZSB5b3VyIHNhbWUgZm9udCBpbiBvcmRlciB0byBtYWtlIGNoYW5nZXMgdG8geW91ciBQREYuIFRoZSBmaWxlIHNpemUgb2YgdGhlIFBERiB3b3VsZCBhbHNvIGJlIHNtYWxsZXIgYmVjYXVzZSB5b3UgYXJlIGVtYmVkZGluZyBvbmx5IHBhcnQgb2YgYSBmb250LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuNQoJICogQHNlZSBTZXRGb250KCksIHNldEZvbnRTdWJzZXR0aW5nKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEFkZEZvbnQoJGZhbWlseSwgJHN0eWxlPScnLCAkZm9udGZpbGU9JycsICRzdWJzZXQ9J2RlZmF1bHQnKSB7CgkJaWYgKCRzdWJzZXQgPT09ICdkZWZhdWx0JykgewoJCQkkc3Vic2V0ID0gJHRoaXMtPmZvbnRfc3Vic2V0dGluZzsKCQl9CgkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJJHN1YnNldCA9IGZhbHNlOwoJCX0KCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZhbWlseSkpIHsKCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+Rm9udEZhbWlseSkpIHsKCQkJCSRmYW1pbHkgPSAkdGhpcy0+Rm9udEZhbWlseTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5FcnJvcignRW1wdHkgZm9udCBmYW1pbHknKTsKCQkJfQoJCX0KCQkvLyBtb3ZlIGVtYmVkZGVkIHN0eWxlcyBvbiAkc3R5bGUKCQlpZiAoc3Vic3RyKCRmYW1pbHksIC0xKSA9PSAnSScpIHsKCQkJJHN0eWxlIC49ICdJJzsKCQkJJGZhbWlseSA9IHN1YnN0cigkZmFtaWx5LCAwLCAtMSk7CgkJfQoJCWlmIChzdWJzdHIoJGZhbWlseSwgLTEpID09ICdCJykgewoJCQkkc3R5bGUgLj0gJ0InOwoJCQkkZmFtaWx5ID0gc3Vic3RyKCRmYW1pbHksIDAsIC0xKTsKCQl9CgkJLy8gbm9ybWFsaXplIGZhbWlseSBuYW1lCgkJJGZhbWlseSA9IHN0cnRvbG93ZXIoJGZhbWlseSk7CgkJaWYgKCghJHRoaXMtPmlzdW5pY29kZSkgQU5EICgkZmFtaWx5ID09ICdhcmlhbCcpKSB7CgkJCSRmYW1pbHkgPSAnaGVsdmV0aWNhJzsKCQl9CgkJaWYgKCgkZmFtaWx5ID09ICdzeW1ib2wnKSBPUiAoJGZhbWlseSA9PSAnemFwZmRpbmdiYXRzJykpIHsKCQkJJHN0eWxlID0gJyc7CgkJfQoJCWlmICgkdGhpcy0+cGRmYV9tb2RlIEFORCAoaXNzZXQoJHRoaXMtPkNvcmVGb250c1skZmFtaWx5XSkpKSB7CgkJCS8vIGFsbCBmb250cyBtdXN0IGJlIGVtYmVkZGVkCgkJCSRmYW1pbHkgPSAncGRmYScuJGZhbWlseTsKCQl9CgkJJHRlbXBzdHlsZSA9IHN0cnRvdXBwZXIoJHN0eWxlKTsKCQkkc3R5bGUgPSAnJzsKCQkvLyB1bmRlcmxpbmUKCQlpZiAoc3RycG9zKCR0ZW1wc3R5bGUsICdVJykgIT09IGZhbHNlKSB7CgkJCSR0aGlzLT51bmRlcmxpbmUgPSB0cnVlOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT51bmRlcmxpbmUgPSBmYWxzZTsKCQl9CgkJLy8gbGluZS10aHJvdWdoIChkZWxldGVkKQoJCWlmIChzdHJwb3MoJHRlbXBzdHlsZSwgJ0QnKSAhPT0gZmFsc2UpIHsKCQkJJHRoaXMtPmxpbmV0aHJvdWdoID0gdHJ1ZTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+bGluZXRocm91Z2ggPSBmYWxzZTsKCQl9CgkJLy8gb3ZlcmxpbmUKCQlpZiAoc3RycG9zKCR0ZW1wc3R5bGUsICdPJykgIT09IGZhbHNlKSB7CgkJCSR0aGlzLT5vdmVybGluZSA9IHRydWU7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPm92ZXJsaW5lID0gZmFsc2U7CgkJfQoJCS8vIGJvbGQKCQlpZiAoc3RycG9zKCR0ZW1wc3R5bGUsICdCJykgIT09IGZhbHNlKSB7CgkJCSRzdHlsZSAuPSAnQic7CgkJfQoJCS8vIG9ibGlxdWUKCQlpZiAoc3RycG9zKCR0ZW1wc3R5bGUsICdJJykgIT09IGZhbHNlKSB7CgkJCSRzdHlsZSAuPSAnSSc7CgkJfQoJCSRiaXN0eWxlID0gJHN0eWxlOwoJCSRmb250a2V5ID0gJGZhbWlseS4kc3R5bGU7CgkJJGZvbnRfc3R5bGUgPSAkc3R5bGUuKCR0aGlzLT51bmRlcmxpbmUgPyAnVScgOiAnJykuKCR0aGlzLT5saW5ldGhyb3VnaCA/ICdEJyA6ICcnKS4oJHRoaXMtPm92ZXJsaW5lID8gJ08nIDogJycpOwoJCSRmb250ZGF0YSA9IGFycmF5KCdmb250a2V5JyA9PiAkZm9udGtleSwgJ2ZhbWlseScgPT4gJGZhbWlseSwgJ3N0eWxlJyA9PiAkZm9udF9zdHlsZSk7CgkJLy8gY2hlY2sgaWYgdGhlIGZvbnQgaGFzIGJlZW4gYWxyZWFkeSBhZGRlZAoJCSRmYiA9ICR0aGlzLT5nZXRGb250QnVmZmVyKCRmb250a2V5KTsKCQlpZiAoJGZiICE9PSBmYWxzZSkgewoJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2ZvbnRzJ11bJGZvbnRrZXldID0gJGZiWydpJ107CgkJCX0KCQkJcmV0dXJuICRmb250ZGF0YTsKCQl9CgkJLy8gZ2V0IHNwZWNpZmllZCBmb250IGRpcmVjdG9yeSAoaWYgYW55KQoJCSRmb250ZGlyID0gZmFsc2U7CgkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udGZpbGUpKSB7CgkJCSRmb250ZGlyID0gZGlybmFtZSgkZm9udGZpbGUpOwoJCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZvbnRkaXIpIE9SICgkZm9udGRpciA9PSAnLicpKSB7CgkJCQkkZm9udGRpciA9ICcnOwoJCQl9IGVsc2UgewoJCQkJJGZvbnRkaXIgLj0gJy8nOwoJCQl9CgkJfQoJCS8vIHRydWUgd2hlbiB0aGUgZm9udCBzdHlsZSB2YXJpYXRpb24gaXMgbWlzc2luZwoJCSRtaXNzaW5nX3N0eWxlID0gZmFsc2U7CgkJLy8gc2VhcmNoIGFuZCBpbmNsdWRlIGZvbnQgZmlsZQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udGZpbGUpIE9SICghQGZpbGVfZXhpc3RzKCRmb250ZmlsZSkpKSB7CgkJCS8vIGJ1aWxkIGEgc3RhbmRhcmQgZmlsZW5hbWVzIGZvciBzcGVjaWZpZWQgZm9udAoJCQkkdG1wX2ZvbnRmaWxlID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgJGZhbWlseSkuc3RydG9sb3dlcigkc3R5bGUpLicucGhwJzsKCQkJJGZvbnRmaWxlID0gVENQREZfRk9OVFM6OmdldEZvbnRGdWxsUGF0aCgkdG1wX2ZvbnRmaWxlLCAkZm9udGRpcik7CgkJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udGZpbGUpKSB7CgkJCQkkbWlzc2luZ19zdHlsZSA9IHRydWU7CgkJCQkvLyB0cnkgdG8gcmVtb3ZlIHRoZSBzdHlsZSBwYXJ0CgkJCQkkdG1wX2ZvbnRmaWxlID0gc3RyX3JlcGxhY2UoJyAnLCAnJywgJGZhbWlseSkuJy5waHAnOwoJCQkJJGZvbnRmaWxlID0gVENQREZfRk9OVFM6OmdldEZvbnRGdWxsUGF0aCgkdG1wX2ZvbnRmaWxlLCAkZm9udGRpcik7CgkJCX0KCQl9CgkJLy8gaW5jbHVkZSBmb250IGZpbGUKCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250ZmlsZSkgQU5EIChAZmlsZV9leGlzdHMoJGZvbnRmaWxlKSkpIHsKCQkJaW5jbHVkZSgkZm9udGZpbGUpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5FcnJvcignQ291bGQgbm90IGluY2x1ZGUgZm9udCBkZWZpbml0aW9uIGZpbGU6ICcuJGZhbWlseS4nJyk7CgkJfQoJCS8vIGNoZWNrIGZvbnQgcGFyYW1ldGVycwoJCWlmICgoIWlzc2V0KCR0eXBlKSkgT1IgKCFpc3NldCgkY3cpKSkgewoJCQkkdGhpcy0+RXJyb3IoJ1RoZSBmb250IGRlZmluaXRpb24gZmlsZSBoYXMgYSBiYWQgZm9ybWF0OiAnLiRmb250ZmlsZS4nJyk7CgkJfQoJCS8vIFNFVCBkZWZhdWx0IHBhcmFtZXRlcnMKCQlpZiAoIWlzc2V0KCRmaWxlKSBPUiBUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZmlsZSkpIHsKCQkJJGZpbGUgPSAnJzsKCQl9CgkJaWYgKCFpc3NldCgkZW5jKSBPUiBUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZW5jKSkgewoJCQkkZW5jID0gJyc7CgkJfQoJCWlmICghaXNzZXQoJGNpZGluZm8pIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRjaWRpbmZvKSkgewoJCQkkY2lkaW5mbyA9IGFycmF5KCdSZWdpc3RyeSc9PidBZG9iZScsICdPcmRlcmluZyc9PidJZGVudGl0eScsICdTdXBwbGVtZW50Jz0+MCk7CgkJCSRjaWRpbmZvWyd1bmkyY2lkJ10gPSBhcnJheSgpOwoJCX0KCQlpZiAoIWlzc2V0KCRjdGcpIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRjdGcpKSB7CgkJCSRjdGcgPSAnJzsKCQl9CgkJaWYgKCFpc3NldCgkZGVzYykgT1IgVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRlc2MpKSB7CgkJCSRkZXNjID0gYXJyYXkoKTsKCQl9CgkJaWYgKCFpc3NldCgkdXApIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR1cCkpIHsKCQkJJHVwID0gLTEwMDsKCQl9CgkJaWYgKCFpc3NldCgkdXQpIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR1dCkpIHsKCQkJJHV0ID0gNTA7CgkJfQoJCWlmICghaXNzZXQoJGN3KSBPUiBUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkY3cpKSB7CgkJCSRjdyA9IGFycmF5KCk7CgkJfQoJCWlmICghaXNzZXQoJGR3KSBPUiBUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZHcpKSB7CgkJCS8vIHNldCBkZWZhdWx0IHdpZHRoCgkJCWlmIChpc3NldCgkZGVzY1snTWlzc2luZ1dpZHRoJ10pIEFORCAoJGRlc2NbJ01pc3NpbmdXaWR0aCddID4gMCkpIHsKCQkJCSRkdyA9ICRkZXNjWydNaXNzaW5nV2lkdGgnXTsKCQkJfSBlbHNlaWYgKGlzc2V0KCRjd1szMl0pKSB7CgkJCQkkZHcgPSAkY3dbMzJdOwoJCQl9IGVsc2UgewoJCQkJJGR3ID0gNjAwOwoJCQl9CgkJfQoJCSsrJHRoaXMtPm51bWZvbnRzOwoJCWlmICgkdHlwZSA9PSAnY29yZScpIHsKCQkJJG5hbWUgPSAkdGhpcy0+Q29yZUZvbnRzWyRmb250a2V5XTsKCQkJJHN1YnNldCA9IGZhbHNlOwoJCX0gZWxzZWlmICgoJHR5cGUgPT0gJ1RydWVUeXBlJykgT1IgKCR0eXBlID09ICdUeXBlMScpKSB7CgkJCSRzdWJzZXQgPSBmYWxzZTsKCQl9IGVsc2VpZiAoJHR5cGUgPT0gJ1RydWVUeXBlVW5pY29kZScpIHsKCQkJJGVuYyA9ICdJZGVudGl0eS1IJzsKCQl9IGVsc2VpZiAoJHR5cGUgPT0gJ2NpZGZvbnQwJykgewoJCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkJJHRoaXMtPkVycm9yKCdBbGwgZm9udHMgbXVzdCBiZSBlbWJlZGRlZCBpbiBQREYvQSBtb2RlIScpOwoJCQl9CgkJfSBlbHNlIHsKCQkJJHRoaXMtPkVycm9yKCdVbmtub3cgZm9udCB0eXBlOiAnLiR0eXBlLicnKTsKCQl9CgkJLy8gc2V0IG5hbWUgaWYgdW5zZXQKCQlpZiAoIWlzc2V0KCRuYW1lKSBPUiBlbXB0eSgkbmFtZSkpIHsKCQkJJG5hbWUgPSAkZm9udGtleTsKCQl9CgkJLy8gY3JlYXRlIGFydGlmaWNpYWwgZm9udCBzdHlsZSB2YXJpYXRpb25zIGlmIG1pc3NpbmcgKG9ubHkgd29ya3Mgd2l0aCBub24tZW1iZWRkZWQgZm9udHMpCgkJaWYgKCgkdHlwZSAhPSAnY29yZScpIEFORCAkbWlzc2luZ19zdHlsZSkgewoJCQkvLyBzdHlsZSB2YXJpYXRpb25zCgkJCSRzdHlsZXMgPSBhcnJheSgnJyA9PiAnJywgJ0InID0+ICcsQm9sZCcsICdJJyA9PiAnLEl0YWxpYycsICdCSScgPT4gJyxCb2xkSXRhbGljJyk7CgkJCSRuYW1lIC49ICRzdHlsZXNbJGJpc3R5bGVdOwoJCQkvLyBhcnRpZmljaWFsIGJvbGQKCQkJaWYgKHN0cnBvcygkYmlzdHlsZSwgJ0InKSAhPT0gZmFsc2UpIHsKCQkJCWlmIChpc3NldCgkZGVzY1snU3RlbVYnXSkpIHsKCQkJCQkvLyBmcm9tIG5vcm1hbCB0byBib2xkCgkJCQkJJGRlc2NbJ1N0ZW1WJ10gPSByb3VuZCgkZGVzY1snU3RlbVYnXSAqIDEuNzUpOwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBib2xkCgkJCQkJJGRlc2NbJ1N0ZW1WJ10gPSAxMjM7CgkJCQl9CgkJCX0KCQkJLy8gYXJ0aWZpY2lhbCBpdGFsaWMKCQkJaWYgKHN0cnBvcygkYmlzdHlsZSwgJ0knKSAhPT0gZmFsc2UpIHsKCQkJCWlmIChpc3NldCgkZGVzY1snSXRhbGljQW5nbGUnXSkpIHsKCQkJCQkkZGVzY1snSXRhbGljQW5nbGUnXSAtPSAxMTsKCQkJCX0gZWxzZSB7CgkJCQkJJGRlc2NbJ0l0YWxpY0FuZ2xlJ10gPSAtMTE7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGRlc2NbJ0ZsYWdzJ10pKSB7CgkJCQkJJGRlc2NbJ0ZsYWdzJ10gfD0gNjQ7IC8vYml0IDcKCQkJCX0gZWxzZSB7CgkJCQkJJGRlc2NbJ0ZsYWdzJ10gPSA2NDsKCQkJCX0KCQkJfQoJCX0KCQkvLyBjaGVjayBpZiB0aGUgYXJyYXkgb2YgY2hhcmFjdGVycyBib3VuZGluZyBib3hlcyBpcyBkZWZpbmVkCgkJaWYgKCFpc3NldCgkY2Jib3gpKSB7CgkJCSRjYmJveCA9IGFycmF5KCk7CgkJfQoJCS8vIGluaXRpYWxpemUgc3Vic2V0Y2hhcnMKCQkkc3Vic2V0Y2hhcnMgPSBhcnJheV9maWxsKDAsIDI1NSwgdHJ1ZSk7CgkJJHRoaXMtPnNldEZvbnRCdWZmZXIoJGZvbnRrZXksIGFycmF5KCdmb250a2V5JyA9PiAkZm9udGtleSwgJ2knID0+ICR0aGlzLT5udW1mb250cywgJ3R5cGUnID0+ICR0eXBlLCAnbmFtZScgPT4gJG5hbWUsICdkZXNjJyA9PiAkZGVzYywgJ3VwJyA9PiAkdXAsICd1dCcgPT4gJHV0LCAnY3cnID0+ICRjdywgJ2NiYm94JyA9PiAkY2Jib3gsICdkdycgPT4gJGR3LCAnZW5jJyA9PiAkZW5jLCAnY2lkaW5mbycgPT4gJGNpZGluZm8sICdmaWxlJyA9PiAkZmlsZSwgJ2N0ZycgPT4gJGN0ZywgJ3N1YnNldCcgPT4gJHN1YnNldCwgJ3N1YnNldGNoYXJzJyA9PiAkc3Vic2V0Y2hhcnMpKTsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydmb250cyddWyRmb250a2V5XSA9ICR0aGlzLT5udW1mb250czsKCQl9CgkJaWYgKGlzc2V0KCRkaWZmKSBBTkQgKCFlbXB0eSgkZGlmZikpKSB7CgkJCS8vU2VhcmNoIGV4aXN0aW5nIGVuY29kaW5ncwoJCQkkZCA9IDA7CgkJCSRuYiA9IGNvdW50KCR0aGlzLT5kaWZmcyk7CgkJCWZvciAoJGk9MTsgJGkgPD0gJG5iOyArKyRpKSB7CgkJCQlpZiAoJHRoaXMtPmRpZmZzWyRpXSA9PSAkZGlmZikgewoJCQkJCSRkID0gJGk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYgKCRkID09IDApIHsKCQkJCSRkID0gJG5iICsgMTsKCQkJCSR0aGlzLT5kaWZmc1skZF0gPSAkZGlmZjsKCQkJfQoJCQkkdGhpcy0+c2V0Rm9udFN1YkJ1ZmZlcigkZm9udGtleSwgJ2RpZmYnLCAkZCk7CgkJfQoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZpbGUpKSB7CgkJCWlmICghaXNzZXQoJHRoaXMtPkZvbnRGaWxlc1skZmlsZV0pKSB7CgkJCQlpZiAoKHN0cmNhc2VjbXAoJHR5cGUsJ1RydWVUeXBlJykgPT0gMCkgT1IgKHN0cmNhc2VjbXAoJHR5cGUsICdUcnVlVHlwZVVuaWNvZGUnKSA9PSAwKSkgewoJCQkJCSR0aGlzLT5Gb250RmlsZXNbJGZpbGVdID0gYXJyYXkoJ2xlbmd0aDEnID0+ICRvcmlnaW5hbHNpemUsICdmb250ZGlyJyA9PiAkZm9udGRpciwgJ3N1YnNldCcgPT4gJHN1YnNldCwgJ2ZvbnRrZXlzJyA9PiBhcnJheSgkZm9udGtleSkpOwoJCQkJfSBlbHNlaWYgKCR0eXBlICE9ICdjb3JlJykgewoJCQkJCSR0aGlzLT5Gb250RmlsZXNbJGZpbGVdID0gYXJyYXkoJ2xlbmd0aDEnID0+ICRzaXplMSwgJ2xlbmd0aDInID0+ICRzaXplMiwgJ2ZvbnRkaXInID0+ICRmb250ZGlyLCAnc3Vic2V0JyA9PiAkc3Vic2V0LCAnZm9udGtleXMnID0+IGFycmF5KCRmb250a2V5KSk7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkvLyB1cGRhdGUgZm9udGtleXMgdGhhdCBhcmUgc2hhcmluZyB0aGlzIGZvbnQgZmlsZQoJCQkJJHRoaXMtPkZvbnRGaWxlc1skZmlsZV1bJ3N1YnNldCddID0gKCR0aGlzLT5Gb250RmlsZXNbJGZpbGVdWydzdWJzZXQnXSBBTkQgJHN1YnNldCk7CgkJCQlpZiAoIWluX2FycmF5KCRmb250a2V5LCAkdGhpcy0+Rm9udEZpbGVzWyRmaWxlXVsnZm9udGtleXMnXSkpIHsKCQkJCQkkdGhpcy0+Rm9udEZpbGVzWyRmaWxlXVsnZm9udGtleXMnXVtdID0gJGZvbnRrZXk7CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuICRmb250ZGF0YTsKCX0KCgkvKioKCSAqIFNldHMgdGhlIGZvbnQgdXNlZCB0byBwcmludCBjaGFyYWN0ZXIgc3RyaW5ncy4KCSAqIFRoZSBmb250IGNhbiBiZSBlaXRoZXIgYSBzdGFuZGFyZCBvbmUgb3IgYSBmb250IGFkZGVkIHZpYSB0aGUgQWRkRm9udCgpIG1ldGhvZC4gU3RhbmRhcmQgZm9udHMgdXNlIFdpbmRvd3MgZW5jb2RpbmcgY3AxMjUyIChXZXN0ZXJuIEV1cm9wZSkuCgkgKiBUaGUgbWV0aG9kIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCBwYWdlIGlzIGNyZWF0ZWQgYW5kIHRoZSBmb250IGlzIHJldGFpbmVkIGZyb20gcGFnZSB0byBwYWdlLgoJICogSWYgeW91IGp1c3Qgd2lzaCB0byBjaGFuZ2UgdGhlIGN1cnJlbnQgZm9udCBzaXplLCBpdCBpcyBzaW1wbGVyIHRvIGNhbGwgU2V0Rm9udFNpemUoKS4KCSAqIE5vdGU6IGZvciB0aGUgc3RhbmRhcmQgZm9udHMsIHRoZSBmb250IG1ldHJpYyBmaWxlcyBtdXN0IGJlIGFjY2Vzc2libGUuIFRoZXJlIGFyZSB0aHJlZSBwb3NzaWJpbGl0aWVzIGZvciB0aGlzOjx1bD48bGk+VGhleSBhcmUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5ICh0aGUgb25lIHdoZXJlIHRoZSBydW5uaW5nIHNjcmlwdCBsaWVzKTwvbGk+PGxpPlRoZXkgYXJlIGluIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgZGVmaW5lZCBieSB0aGUgaW5jbHVkZV9wYXRoIHBhcmFtZXRlcjwvbGk+PGxpPlRoZXkgYXJlIGluIHRoZSBkaXJlY3RvcnkgZGVmaW5lZCBieSB0aGUgS19QQVRIX0ZPTlRTIGNvbnN0YW50PC9saT48L3VsPjxiciAvPgoJICogQHBhcmFtICRmYW1pbHkgKHN0cmluZykgRmFtaWx5IGZvbnQuIEl0IGNhbiBiZSBlaXRoZXIgYSBuYW1lIGRlZmluZWQgYnkgQWRkRm9udCgpIG9yIG9uZSBvZiB0aGUgc3RhbmRhcmQgVHlwZTEgZmFtaWxpZXMgKGNhc2UgaW5zZW5zaXRpdmUpOjx1bD48bGk+dGltZXMgKFRpbWVzLVJvbWFuKTwvbGk+PGxpPnRpbWVzYiAoVGltZXMtQm9sZCk8L2xpPjxsaT50aW1lc2kgKFRpbWVzLUl0YWxpYyk8L2xpPjxsaT50aW1lc2JpIChUaW1lcy1Cb2xkSXRhbGljKTwvbGk+PGxpPmhlbHZldGljYSAoSGVsdmV0aWNhKTwvbGk+PGxpPmhlbHZldGljYWIgKEhlbHZldGljYS1Cb2xkKTwvbGk+PGxpPmhlbHZldGljYWkgKEhlbHZldGljYS1PYmxpcXVlKTwvbGk+PGxpPmhlbHZldGljYWJpIChIZWx2ZXRpY2EtQm9sZE9ibGlxdWUpPC9saT48bGk+Y291cmllciAoQ291cmllcik8L2xpPjxsaT5jb3VyaWVyYiAoQ291cmllci1Cb2xkKTwvbGk+PGxpPmNvdXJpZXJpIChDb3VyaWVyLU9ibGlxdWUpPC9saT48bGk+Y291cmllcmJpIChDb3VyaWVyLUJvbGRPYmxpcXVlKTwvbGk+PGxpPnN5bWJvbCAoU3ltYm9sKTwvbGk+PGxpPnphcGZkaW5nYmF0cyAoWmFwZkRpbmdiYXRzKTwvbGk+PC91bD4gSXQgaXMgYWxzbyBwb3NzaWJsZSB0byBwYXNzIGFuIGVtcHR5IHN0cmluZy4gSW4gdGhhdCBjYXNlLCB0aGUgY3VycmVudCBmYW1pbHkgaXMgcmV0YWluZWQuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIEZvbnQgc3R5bGUuIFBvc3NpYmxlIHZhbHVlcyBhcmUgKGNhc2UgaW5zZW5zaXRpdmUpOjx1bD48bGk+ZW1wdHkgc3RyaW5nOiByZWd1bGFyPC9saT48bGk+QjogYm9sZDwvbGk+PGxpPkk6IGl0YWxpYzwvbGk+PGxpPlU6IHVuZGVybGluZTwvbGk+PGxpPkQ6IGxpbmUgdGhyb3VnaDwvbGk+PGxpPk86IG92ZXJsaW5lPC9saT48L3VsPiBvciBhbnkgY29tYmluYXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIHJlZ3VsYXIuIEJvbGQgYW5kIGl0YWxpYyBzdHlsZXMgZG8gbm90IGFwcGx5IHRvIFN5bWJvbCBhbmQgWmFwZkRpbmdiYXRzIGJhc2ljIGZvbnRzIG9yIG90aGVyIGZvbnRzIHdoZW4gbm90IGRlZmluZWQuCgkgKiBAcGFyYW0gJHNpemUgKGZsb2F0KSBGb250IHNpemUgaW4gcG9pbnRzLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyB0aGUgY3VycmVudCBzaXplLiBJZiBubyBzaXplIGhhcyBiZWVuIHNwZWNpZmllZCBzaW5jZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkb2N1bWVudCwgdGhlIHZhbHVlIHRha2VuIGlzIDEyCgkgKiBAcGFyYW0gJGZvbnRmaWxlIChzdHJpbmcpIFRoZSBmb250IGRlZmluaXRpb24gZmlsZS4gQnkgZGVmYXVsdCwgdGhlIG5hbWUgaXMgYnVpbHQgZnJvbSB0aGUgZmFtaWx5IGFuZCBzdHlsZSwgaW4gbG93ZXIgY2FzZSB3aXRoIG5vIHNwYWNlcy4KCSAqIEBwYXJhbSAkc3Vic2V0IChtaXhlZCkgaWYgdHJ1ZSBlbWJlZGQgb25seSBhIHN1YnNldCBvZiB0aGUgZm9udCAoc3RvcmVzIG9ubHkgdGhlIGluZm9ybWF0aW9uIHJlbGF0ZWQgdG8gdGhlIHVzZWQgY2hhcmFjdGVycyk7IGlmIGZhbHNlIGVtYmVkZCBmdWxsIGZvbnQ7IGlmICdkZWZhdWx0JyB1c2VzIHRoZSBkZWZhdWx0IHZhbHVlIHNldCB1c2luZyBzZXRGb250U3Vic2V0dGluZygpLiBUaGlzIG9wdGlvbiBpcyB2YWxpZCBvbmx5IGZvciBUcnVlVHlwZVVuaWNvZGUgZm9udHMuIElmIHlvdSB3YW50IHRvIGVuYWJsZSB1c2VycyB0byBjaGFuZ2UgdGhlIGRvY3VtZW50LCBzZXQgdGhpcyBwYXJhbWV0ZXIgdG8gZmFsc2UuIElmIHlvdSBzdWJzZXQgdGhlIGZvbnQsIHRoZSBwZXJzb24gd2hvIHJlY2VpdmVzIHlvdXIgUERGIHdvdWxkIG5lZWQgdG8gaGF2ZSB5b3VyIHNhbWUgZm9udCBpbiBvcmRlciB0byBtYWtlIGNoYW5nZXMgdG8geW91ciBQREYuIFRoZSBmaWxlIHNpemUgb2YgdGhlIFBERiB3b3VsZCBhbHNvIGJlIHNtYWxsZXIgYmVjYXVzZSB5b3UgYXJlIGVtYmVkZGluZyBvbmx5IHBhcnQgb2YgYSBmb250LgoJICogQHBhcmFtICRvdXQgKGJvb2xlYW4pIGlmIHRydWUgb3V0cHV0IHRoZSBmb250IHNpemUgY29tbWFuZCwgb3RoZXJ3aXNlIG9ubHkgc2V0IHRoZSBmb250IHByb3BlcnRpZXMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBBZGRGb250KCksIFNldEZvbnRTaXplKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldEZvbnQoJGZhbWlseSwgJHN0eWxlPScnLCAkc2l6ZT1udWxsLCAkZm9udGZpbGU9JycsICRzdWJzZXQ9J2RlZmF1bHQnLCAkb3V0PXRydWUpIHsKCQkvL1NlbGVjdCBhIGZvbnQ7IHNpemUgZ2l2ZW4gaW4gcG9pbnRzCgkJaWYgKCRzaXplID09PSBudWxsKSB7CgkJCSRzaXplID0gJHRoaXMtPkZvbnRTaXplUHQ7CgkJfQoJCWlmICgkc2l6ZSA8IDApIHsKCQkJJHNpemUgPSAwOwoJCX0KCQkvLyB0cnkgdG8gYWRkIGZvbnQgKGlmIG5vdCBhbHJlYWR5IGFkZGVkKQoJCSRmb250ZGF0YSA9ICR0aGlzLT5BZGRGb250KCRmYW1pbHksICRzdHlsZSwgJGZvbnRmaWxlLCAkc3Vic2V0KTsKCQkkdGhpcy0+Rm9udEZhbWlseSA9ICRmb250ZGF0YVsnZmFtaWx5J107CgkJJHRoaXMtPkZvbnRTdHlsZSA9ICRmb250ZGF0YVsnc3R5bGUnXTsKCQlpZiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250Wydmb250a2V5J10pIEFORCBpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ3N1YnNldGNoYXJzJ10pKSB7CgkJCS8vIHNhdmUgc3Vic2V0IGNoYXJzIG9mIHRoZSBwcmV2aW91cyBmb250CgkJCSR0aGlzLT5zZXRGb250U3ViQnVmZmVyKCR0aGlzLT5DdXJyZW50Rm9udFsnZm9udGtleSddLCAnc3Vic2V0Y2hhcnMnLCAkdGhpcy0+Q3VycmVudEZvbnRbJ3N1YnNldGNoYXJzJ10pOwoJCX0KCQkkdGhpcy0+Q3VycmVudEZvbnQgPSAkdGhpcy0+Z2V0Rm9udEJ1ZmZlcigkZm9udGRhdGFbJ2ZvbnRrZXknXSk7CgkJJHRoaXMtPlNldEZvbnRTaXplKCRzaXplLCAkb3V0KTsKCX0KCgkvKioKCSAqIERlZmluZXMgdGhlIHNpemUgb2YgdGhlIGN1cnJlbnQgZm9udC4KCSAqIEBwYXJhbSAkc2l6ZSAoZmxvYXQpIFRoZSBmb250IHNpemUgaW4gcG9pbnRzLgoJICogQHBhcmFtICRvdXQgKGJvb2xlYW4pIGlmIHRydWUgb3V0cHV0IHRoZSBmb250IHNpemUgY29tbWFuZCwgb3RoZXJ3aXNlIG9ubHkgc2V0IHRoZSBmb250IHByb3BlcnRpZXMuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wCgkgKiBAc2VlIFNldEZvbnQoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0Rm9udFNpemUoJHNpemUsICRvdXQ9dHJ1ZSkgewoJCS8vIGZvbnQgc2l6ZSBpbiBwb2ludHMKCQkkdGhpcy0+Rm9udFNpemVQdCA9ICRzaXplOwoJCS8vIGZvbnQgc2l6ZSBpbiB1c2VyIHVuaXRzCgkJJHRoaXMtPkZvbnRTaXplID0gJHNpemUgLyAkdGhpcy0+azsKCQkvLyBjYWxjdWxhdGUgc29tZSBmb250IG1ldHJpY3MKCQlpZiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ0ZvbnRCQm94J10pKSB7CgkJCSRiYm94ID0gZXhwbG9kZSgnICcsIHN1YnN0cigkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnRm9udEJCb3gnXSwgMSwgLTEpKTsKCQkJJGZvbnRfaGVpZ2h0ID0gKChpbnR2YWwoJGJib3hbM10pIC0gaW50dmFsKCRiYm94WzFdKSkgKiAkc2l6ZSAvIDEwMDApOwoJCX0gZWxzZSB7CgkJCSRmb250X2hlaWdodCA9ICRzaXplICogMS4yMTk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnQXNjZW50J10pIEFORCAoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ0FzY2VudCddID4gMCkpIHsKCQkJJGZvbnRfYXNjZW50ID0gKCR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydBc2NlbnQnXSAqICRzaXplIC8gMTAwMCk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnRGVzY2VudCddKSBBTkQgKCR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydEZXNjZW50J10gPD0gMCkpIHsKCQkJJGZvbnRfZGVzY2VudCA9ICgtICR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydEZXNjZW50J10gKiAkc2l6ZSAvIDEwMDApOwoJCX0KCQlpZiAoIWlzc2V0KCRmb250X2FzY2VudCkgQU5EICFpc3NldCgkZm9udF9kZXNjZW50KSkgewoJCQkvLyBjb3JlIGZvbnQKCQkJJGZvbnRfYXNjZW50ID0gMC43NiAqICRmb250X2hlaWdodDsKCQkJJGZvbnRfZGVzY2VudCA9ICRmb250X2hlaWdodCAtICRmb250X2FzY2VudDsKCQl9IGVsc2VpZiAoIWlzc2V0KCRmb250X2Rlc2NlbnQpKSB7CgkJCSRmb250X2Rlc2NlbnQgPSAkZm9udF9oZWlnaHQgLSAkZm9udF9hc2NlbnQ7CgkJfSBlbHNlaWYgKCFpc3NldCgkZm9udF9hc2NlbnQpKSB7CgkJCSRmb250X2FzY2VudCA9ICRmb250X2hlaWdodCAtICRmb250X2Rlc2NlbnQ7CgkJfQoJCSR0aGlzLT5Gb250QXNjZW50ID0gKCRmb250X2FzY2VudCAvICR0aGlzLT5rKTsKCQkkdGhpcy0+Rm9udERlc2NlbnQgPSAoJGZvbnRfZGVzY2VudCAvICR0aGlzLT5rKTsKCQlpZiAoJG91dCBBTkQgKCR0aGlzLT5wYWdlID4gMCkgQU5EIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2knXSkpIEFORCAoJHRoaXMtPnN0YXRlID09IDIpKSB7CgkJCSR0aGlzLT5fb3V0KHNwcmludGYoJ0JUIC9GJWQgJUYgVGYgRVQnLCAkdGhpcy0+Q3VycmVudEZvbnRbJ2knXSwgJHRoaXMtPkZvbnRTaXplUHQpKTsKCQl9Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBib3VuZGluZyBib3ggb2YgdGhlIGN1cnJlbnQgZm9udCBpbiB1c2VyIHVuaXRzLgoJICogQHJldHVybiBhcnJheQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xNTIgKDIwMTItMDMtMjMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb250QkJveCgpIHsKCQkkZmJib3ggPSBhcnJheSgpOwoJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnRm9udEJCb3gnXSkpIHsKCQkJJHRtcGJib3ggPSBleHBsb2RlKCcgJywgc3Vic3RyKCR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydGb250QkJveCddLCAxLCAtMSkpOwoJCQkkZmJib3ggPSBhcnJheV9tYXAoYXJyYXkoJHRoaXMsJ2dldEFic0ZvbnRNZWFzdXJlJyksICR0bXBiYm94KTsKCQl9IGVsc2UgewoJCQkvLyBGaW5kIG1heCB3aWR0aAoJCQlpZiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ01heFdpZHRoJ10pKSB7CgkJCQkkbWF4dyA9ICR0aGlzLT5nZXRBYnNGb250TWVhc3VyZShpbnR2YWwoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ01heFdpZHRoJ10pKTsKCQkJfSBlbHNlIHsKCQkJCSRtYXh3ID0gMDsKCQkJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2Rlc2MnXVsnTWlzc2luZ1dpZHRoJ10pKSB7CgkJCQkJJG1heHcgPSBtYXgoJG1heHcsICR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydNaXNzaW5nV2lkdGgnXSk7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydkZXNjJ11bJ0F2Z1dpZHRoJ10pKSB7CgkJCQkJJG1heHcgPSBtYXgoJG1heHcsICR0aGlzLT5DdXJyZW50Rm9udFsnZGVzYyddWydBdmdXaWR0aCddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2R3J10pKSB7CgkJCQkJJG1heHcgPSBtYXgoJG1heHcsICR0aGlzLT5DdXJyZW50Rm9udFsnZHcnXSk7CgkJCQl9CgkJCQlmb3JlYWNoICgkdGhpcy0+Q3VycmVudEZvbnRbJ2N3J10gYXMgJGNoYXIgPT4gJHcpIHsKCQkJCQkkbWF4dyA9IG1heCgkbWF4dywgJHcpOwoJCQkJfQoJCQkJaWYgKCRtYXh3ID09IDApIHsKCQkJCQkkbWF4dyA9IDYwMDsKCQkJCX0KCQkJCSRtYXh3ID0gJHRoaXMtPmdldEFic0ZvbnRNZWFzdXJlKCRtYXh3KTsKCQkJfQoJCQkkZmJib3ggPSBhcnJheSgwLCAoMCAtICR0aGlzLT5Gb250RGVzY2VudCksICRtYXh3LCAkdGhpcy0+Rm9udEFzY2VudCk7CgkJfQoJCXJldHVybiAkZmJib3g7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IGEgcmVsYXRpdmUgZm9udCBtZWFzdXJlIGludG8gYWJzb2x1dGUgdmFsdWUuCgkgKiBAcGFyYW0gJHMgKGludCkgRm9udCBtZWFzdXJlLgoJICogQHJldHVybiBmbG9hdCBBYnNvbHV0ZSBtZWFzdXJlLgoJICogQHNpbmNlIDUuOS4xODYgKDIwMTItMDktMTMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRBYnNGb250TWVhc3VyZSgkcykgewoJCXJldHVybiAoJHMgKiAkdGhpcy0+Rm9udFNpemUgLyAxMDAwKTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGdseXBoIGJvdW5kaW5nIGJveCBvZiB0aGUgc3BlY2lmaWVkIGNoYXJhY3RlciBpbiB0aGUgY3VycmVudCBmb250IGluIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJGNoYXIgKGludCkgSW5wdXQgY2hhcmFjdGVyIGNvZGUuCgkgKiBAcmV0dXJuIG1peGVkIGFycmF5KHhNaW4sIHlNaW4sIHhNYXgsIHlNYXgpIG9yIEZBTFNFIGlmIG5vdCBkZWZpbmVkLgoJICogQHNpbmNlIDUuOS4xODYgKDIwMTItMDktMTMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDaGFyQkJveCgkY2hhcikgewoJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2NiYm94J11bJGNoYXJdKSkgewoJCQlyZXR1cm4gYXJyYXlfbWFwKGFycmF5KCR0aGlzLCdnZXRBYnNGb250TWVhc3VyZScpLCAkdGhpcy0+Q3VycmVudEZvbnRbJ2NiYm94J11baW50dmFsKCRjaGFyKV0pOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGZvbnQgZGVzY2VudCB2YWx1ZQoJICogQHBhcmFtICRmb250IChzdHJpbmcpIGZvbnQgbmFtZQoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBmb250IHN0eWxlCgkgKiBAcGFyYW0gJHNpemUgKGZsb2F0KSBUaGUgc2l6ZSAoaW4gcG9pbnRzKQoJICogQHJldHVybiBpbnQgZm9udCBkZXNjZW50CgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuOS4wMDMgKDIwMTAtMDMtMzApCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb250RGVzY2VudCgkZm9udCwgJHN0eWxlPScnLCAkc2l6ZT0wKSB7CgkJJGZvbnRkYXRhID0gJHRoaXMtPkFkZEZvbnQoJGZvbnQsICRzdHlsZSk7CgkJJGZvbnRpbmZvID0gJHRoaXMtPmdldEZvbnRCdWZmZXIoJGZvbnRkYXRhWydmb250a2V5J10pOwoJCWlmIChpc3NldCgkZm9udGluZm9bJ2Rlc2MnXVsnRGVzY2VudCddKSBBTkQgKCRmb250aW5mb1snZGVzYyddWydEZXNjZW50J10gPD0gMCkpIHsKCQkJJGRlc2NlbnQgPSAoLSAkZm9udGluZm9bJ2Rlc2MnXVsnRGVzY2VudCddICogJHNpemUgLyAxMDAwKTsKCQl9IGVsc2UgewoJCQkkZGVzY2VudCA9ICgxLjIxOSAqIDAuMjQgKiAkc2l6ZSk7CgkJfQoJCXJldHVybiAoJGRlc2NlbnQgLyAkdGhpcy0+ayk7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGZvbnQgYXNjZW50IHZhbHVlLgoJICogQHBhcmFtICRmb250IChzdHJpbmcpIGZvbnQgbmFtZQoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBmb250IHN0eWxlCgkgKiBAcGFyYW0gJHNpemUgKGZsb2F0KSBUaGUgc2l6ZSAoaW4gcG9pbnRzKQoJICogQHJldHVybiBpbnQgZm9udCBhc2NlbnQKCSAqIEBwdWJsaWMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC45LjAwMyAoMjAxMC0wMy0zMCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEZvbnRBc2NlbnQoJGZvbnQsICRzdHlsZT0nJywgJHNpemU9MCkgewoJCSRmb250ZGF0YSA9ICR0aGlzLT5BZGRGb250KCRmb250LCAkc3R5bGUpOwoJCSRmb250aW5mbyA9ICR0aGlzLT5nZXRGb250QnVmZmVyKCRmb250ZGF0YVsnZm9udGtleSddKTsKCQlpZiAoaXNzZXQoJGZvbnRpbmZvWydkZXNjJ11bJ0FzY2VudCddKSBBTkQgKCRmb250aW5mb1snZGVzYyddWydBc2NlbnQnXSA+IDApKSB7CgkJCSRhc2NlbnQgPSAoJGZvbnRpbmZvWydkZXNjJ11bJ0FzY2VudCddICogJHNpemUgLyAxMDAwKTsKCQl9IGVsc2UgewoJCQkkYXNjZW50ID0gMS4yMTkgKiAwLjc2ICogJHNpemU7CgkJfQoJCXJldHVybiAoJGFzY2VudCAvICR0aGlzLT5rKTsKCX0KCgkvKioKCSAqIFJldHVybiB0cnVlIGluIHRoZSBjaGFyYWN0ZXIgaXMgcHJlc2VudCBpbiB0aGUgc3BlY2lmaWVkIGZvbnQuCgkgKiBAcGFyYW0gJGNoYXIgKG1peGVkKSBDaGFyYWN0ZXIgdG8gY2hlY2sgKGludGVnZXIgdmFsdWUgb3Igc3RyaW5nKQoJICogQHBhcmFtICRmb250IChzdHJpbmcpIEZvbnQgbmFtZSAoZmFtaWx5IG5hbWUpLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBGb250IHN0eWxlLgoJICogQHJldHVybiAoYm9vbGVhbikgdHJ1ZSBpZiB0aGUgY2hhciBpcyBkZWZpbmVkLCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE1MyAoMjAxMi0wMy0yOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGlzQ2hhckRlZmluZWQoJGNoYXIsICRmb250PScnLCAkc3R5bGU9JycpIHsKCQlpZiAoaXNfc3RyaW5nKCRjaGFyKSkgewoJCQkvLyBnZXQgY2hhcmFjdGVyIGNvZGUKCQkJJGNoYXIgPSBUQ1BERl9GT05UUzo6VVRGOFN0cmluZ1RvQXJyYXkoJGNoYXIsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCSRjaGFyID0gJGNoYXJbMF07CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udCkpIHsKCQkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRzdHlsZSkpIHsKCQkJCXJldHVybiAoaXNzZXQoJHRoaXMtPkN1cnJlbnRGb250WydjdyddW2ludHZhbCgkY2hhcildKSk7CgkJCX0KCQkJJGZvbnQgPSAkdGhpcy0+Rm9udEZhbWlseTsKCQl9CgkJJGZvbnRkYXRhID0gJHRoaXMtPkFkZEZvbnQoJGZvbnQsICRzdHlsZSk7CgkJJGZvbnRpbmZvID0gJHRoaXMtPmdldEZvbnRCdWZmZXIoJGZvbnRkYXRhWydmb250a2V5J10pOwoJCXJldHVybiAoaXNzZXQoJGZvbnRpbmZvWydjdyddW2ludHZhbCgkY2hhcildKSk7Cgl9CgoJLyoqCgkgKiBSZXBsYWNlIG1pc3NpbmcgZm9udCBjaGFyYWN0ZXJzIG9uIHNlbGVjdGVkIGZvbnQgd2l0aCBzcGVjaWZpZWQgc3Vic3RpdHV0aW9ucy4KCSAqIEBwYXJhbSAkdGV4dCAoc3RyaW5nKSBUZXh0IHRvIHByb2Nlc3MuCgkgKiBAcGFyYW0gJGZvbnQgKHN0cmluZykgRm9udCBuYW1lIChmYW1pbHkgbmFtZSkuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIEZvbnQgc3R5bGUuCgkgKiBAcGFyYW0gJHN1YnMgKGFycmF5KSBBcnJheSBvZiBwb3NzaWJsZSBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9ucy4gVGhlIGtleSBpcyB0aGUgY2hhcmFjdGVyIHRvIGNoZWNrIChpbnRlZ2VyIHZhbHVlKSBhbmQgdGhlIHZhbHVlIGlzIGEgc2luZ2xlIGludGVnZSB2YWx1ZSBvciBhbiBhcnJheSBvZiBwb3NzaWJsZSBzdWJzdGl0dXRlcy4KCSAqIEByZXR1cm4gKHN0cmluZykgUHJvY2Vzc2VkIHRleHQuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE1MyAoMjAxMi0wMy0yOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlcGxhY2VNaXNzaW5nQ2hhcnMoJHRleHQsICRmb250PScnLCAkc3R5bGU9JycsICRzdWJzPWFycmF5KCkpIHsKCQlpZiAoZW1wdHkoJHN1YnMpKSB7CgkJCXJldHVybiAkdGV4dDsKCQl9CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250KSkgewoJCQkkZm9udCA9ICR0aGlzLT5Gb250RmFtaWx5OwoJCX0KCQkkZm9udGRhdGEgPSAkdGhpcy0+QWRkRm9udCgkZm9udCwgJHN0eWxlKTsKCQkkZm9udGluZm8gPSAkdGhpcy0+Z2V0Rm9udEJ1ZmZlcigkZm9udGRhdGFbJ2ZvbnRrZXknXSk7CgkJJHVuaWFyciA9IFRDUERGX0ZPTlRTOjpVVEY4U3RyaW5nVG9BcnJheSgkdGV4dCwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQlmb3JlYWNoICgkdW5pYXJyIGFzICRrID0+ICRjaHIpIHsKCQkJaWYgKCFpc3NldCgkZm9udGluZm9bJ2N3J11bJGNocl0pKSB7CgkJCQkvLyB0aGlzIGNoYXJhY3RlciBpcyBtaXNzaW5nIG9uIHRoZSBzZWxlY3RlZCBmb250CgkJCQlpZiAoaXNzZXQoJHN1YnNbJGNocl0pKSB7CgkJCQkJLy8gd2UgaGF2ZSBhdmFpbGFibGUgc3Vic3RpdHV0aW9ucwoJCQkJCWlmIChpc19hcnJheSgkc3Vic1skY2hyXSkpIHsKCQkJCQkJZm9yZWFjaCgkc3Vic1skY2hyXSBhcyAkcykgewoJCQkJCQkJaWYgKGlzc2V0KCRmb250aW5mb1snY3cnXVskc10pKSB7CgkJCQkJCQkJJHVuaWFyclska10gPSAkczsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0gZWxzZWlmIChpc3NldCgkZm9udGluZm9bJ2N3J11bJHN1YnNbJGNocl1dKSkgewoJCQkJCQkkdW5pYXJyWyRrXSA9ICRzdWJzWyRjaHJdOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZyhUQ1BERl9GT05UUzo6VVRGOEFycmF5VG9VbmlBcnJheSgkdW5pYXJyLCAkdGhpcy0+aXN1bmljb2RlKSk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBkZWZhdWx0IG1vbm9zcGFjZWQgZm9udC4KCSAqIEBwYXJhbSAkZm9udCAoc3RyaW5nKSBGb250IG5hbWUuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC41LjAyNQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0RGVmYXVsdE1vbm9zcGFjZWRGb250KCRmb250KSB7CgkJJHRoaXMtPmRlZmF1bHRfbW9ub3NwYWNlZF9mb250ID0gJGZvbnQ7Cgl9CgoJLyoqCgkgKiBDcmVhdGVzIGEgbmV3IGludGVybmFsIGxpbmsgYW5kIHJldHVybnMgaXRzIGlkZW50aWZpZXIuIEFuIGludGVybmFsIGxpbmsgaXMgYSBjbGlja2FibGUgYXJlYSB3aGljaCBkaXJlY3RzIHRvIGFub3RoZXIgcGxhY2Ugd2l0aGluIHRoZSBkb2N1bWVudC48YnIgLz4KCSAqIFRoZSBpZGVudGlmaWVyIGNhbiB0aGVuIGJlIHBhc3NlZCB0byBDZWxsKCksIFdyaXRlKCksIEltYWdlKCkgb3IgTGluaygpLiBUaGUgZGVzdGluYXRpb24gaXMgZGVmaW5lZCB3aXRoIFNldExpbmsoKS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUKCSAqIEBzZWUgQ2VsbCgpLCBXcml0ZSgpLCBJbWFnZSgpLCBMaW5rKCksIFNldExpbmsoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gQWRkTGluaygpIHsKCQkvL0NyZWF0ZSBhIG5ldyBpbnRlcm5hbCBsaW5rCgkJJG4gPSBjb3VudCgkdGhpcy0+bGlua3MpICsgMTsKCQkkdGhpcy0+bGlua3NbJG5dID0gYXJyYXkoMCwgMCk7CgkJcmV0dXJuICRuOwoJfQoKCS8qKgoJICogRGVmaW5lcyB0aGUgcGFnZSBhbmQgcG9zaXRpb24gYSBsaW5rIHBvaW50cyB0by4KCSAqIEBwYXJhbSAkbGluayAoaW50KSBUaGUgbGluayBpZGVudGlmaWVyIHJldHVybmVkIGJ5IEFkZExpbmsoKQoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdGFyZ2V0IHBvc2l0aW9uOyAtMSBpbmRpY2F0ZXMgdGhlIGN1cnJlbnQgcG9zaXRpb24uIFRoZSBkZWZhdWx0IHZhbHVlIGlzIDAgKHRvcCBvZiBwYWdlKQoJICogQHBhcmFtICRwYWdlIChpbnQpIE51bWJlciBvZiB0YXJnZXQgcGFnZTsgLTEgaW5kaWNhdGVzIHRoZSBjdXJyZW50IHBhZ2UuIFRoaXMgaXMgdGhlIGRlZmF1bHQgdmFsdWUKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUKCSAqIEBzZWUgQWRkTGluaygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRMaW5rKCRsaW5rLCAkeT0wLCAkcGFnZT0tMSkgewoJCWlmICgkeSA9PSAtMSkgewoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQlpZiAoJHBhZ2UgPT0gLTEpIHsKCQkJJHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQl9CgkJJHRoaXMtPmxpbmtzWyRsaW5rXSA9IGFycmF5KCRwYWdlLCAkeSk7Cgl9CgoJLyoqCgkgKiBQdXRzIGEgbGluayBvbiBhIHJlY3Rhbmd1bGFyIGFyZWEgb2YgdGhlIHBhZ2UuCgkgKiBUZXh0IG9yIGltYWdlIGxpbmtzIGFyZSBnZW5lcmFsbHkgcHV0IHZpYSBDZWxsKCksIFdyaXRlKCkgb3IgSW1hZ2UoKSwgYnV0IHRoaXMgbWV0aG9kIGNhbiBiZSB1c2VmdWwgZm9yIGluc3RhbmNlIHRvIGRlZmluZSBhIGNsaWNrYWJsZSBhcmVhIGluc2lkZSBhbiBpbWFnZS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZQoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIHJlY3RhbmdsZQoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkbGluayAobWl4ZWQpIFVSTCBvciBpZGVudGlmaWVyIHJldHVybmVkIGJ5IEFkZExpbmsoKQoJICogQHBhcmFtICRzcGFjZXMgKGludCkgbnVtYmVyIG9mIHNwYWNlcyBvbiB0aGUgdGV4dCB0byBsaW5rCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS41CgkgKiBAc2VlIEFkZExpbmsoKSwgQW5ub3RhdGlvbigpLCBDZWxsKCksIFdyaXRlKCksIEltYWdlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIExpbmsoJHgsICR5LCAkdywgJGgsICRsaW5rLCAkc3BhY2VzPTApIHsKCQkkdGhpcy0+QW5ub3RhdGlvbigkeCwgJHksICR3LCAkaCwgJGxpbmssIGFycmF5KCdTdWJ0eXBlJz0+J0xpbmsnKSwgJHNwYWNlcyk7Cgl9CgoJLyoqCgkgKiBQdXRzIGEgbWFya3VwIGFubm90YXRpb24gb24gYSByZWN0YW5ndWxhciBhcmVhIG9mIHRoZSBwYWdlLgoJICogISEhIVRIRSBBTk5PVEFUSU9OIFNVUFBPUlQgSVMgTk9UIFlFVCBGVUxMWSBJTVBMRU1FTlRFRCAhISEhCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBBYnNjaXNzYSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZQoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkdyAoZmxvYXQpIFdpZHRoIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJHRleHQgKHN0cmluZykgYW5ub3RhdGlvbiB0ZXh0IG9yIGFsdGVybmF0ZSBjb250ZW50CgkgKiBAcGFyYW0gJG9wdCAoYXJyYXkpIGFycmF5IG9mIG9wdGlvbnMgKHNlZSBzZWN0aW9uIDguNCBvZiBQREYgcmVmZXJlbmNlIDEuNykuCgkgKiBAcGFyYW0gJHNwYWNlcyAoaW50KSBudW1iZXIgb2Ygc3BhY2VzIG9uIHRoZSB0ZXh0IHRvIGxpbmsKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjAuMDE4ICgyMDA4LTA4LTA2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gQW5ub3RhdGlvbigkeCwgJHksICR3LCAkaCwgJHRleHQsICRvcHQ9YXJyYXkoJ1N1YnR5cGUnPT4nVGV4dCcpLCAkc3BhY2VzPTApIHsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyBzdG9yZSBwYXJhbWV0ZXJzIGZvciBsYXRlciB1c2Ugb24gdGVtcGxhdGUKCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydhbm5vdGF0aW9ucyddW10gPSBhcnJheSgneCcgPT4gJHgsICd5JyA9PiAkeSwgJ3cnID0+ICR3LCAnaCcgPT4gJGgsICd0ZXh0JyA9PiAkdGV4dCwgJ29wdCcgPT4gJG9wdCwgJ3NwYWNlcycgPT4gJHNwYWNlcyk7CgkJCXJldHVybjsKCQl9CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQkvLyByZWNhbGN1bGF0ZSBjb29yZGluYXRlcyB0byBhY2NvdW50IGZvciBncmFwaGljIHRyYW5zZm9ybWF0aW9ucwoJCWlmIChpc3NldCgkdGhpcy0+dHJhbnNmbWF0cml4KSBBTkQgIWVtcHR5KCR0aGlzLT50cmFuc2ZtYXRyaXgpKSB7CgkJCWZvciAoJGk9JHRoaXMtPnRyYW5zZm1hdHJpeF9rZXk7ICRpID4gMDsgLS0kaSkgewoJCQkJJG1heGlkID0gY291bnQoJHRoaXMtPnRyYW5zZm1hdHJpeFskaV0pIC0gMTsKCQkJCWZvciAoJGo9JG1heGlkOyAkaiA+PSAwOyAtLSRqKSB7CgkJCQkJJGN0bSA9ICR0aGlzLT50cmFuc2ZtYXRyaXhbJGldWyRqXTsKCQkJCQlpZiAoaXNzZXQoJGN0bVsnYSddKSkgewoJCQkJCQkkeCA9ICR4ICogJHRoaXMtPms7CgkJCQkJCSR5ID0gKCR0aGlzLT5oIC0gJHkpICogJHRoaXMtPms7CgkJCQkJCSR3ID0gJHcgKiAkdGhpcy0+azsKCQkJCQkJJGggPSAkaCAqICR0aGlzLT5rOwoJCQkJCQkvLyB0b3AgbGVmdAoJCQkJCQkkeHQgPSAkeDsKCQkJCQkJJHl0ID0gJHk7CgkJCQkJCSR4MSA9ICgkY3RtWydhJ10gKiAkeHQpICsgKCRjdG1bJ2MnXSAqICR5dCkgKyAkY3RtWydlJ107CgkJCQkJCSR5MSA9ICgkY3RtWydiJ10gKiAkeHQpICsgKCRjdG1bJ2QnXSAqICR5dCkgKyAkY3RtWydmJ107CgkJCQkJCS8vIHRvcCByaWdodAoJCQkJCQkkeHQgPSAkeCArICR3OwoJCQkJCQkkeXQgPSAkeTsKCQkJCQkJJHgyID0gKCRjdG1bJ2EnXSAqICR4dCkgKyAoJGN0bVsnYyddICogJHl0KSArICRjdG1bJ2UnXTsKCQkJCQkJJHkyID0gKCRjdG1bJ2InXSAqICR4dCkgKyAoJGN0bVsnZCddICogJHl0KSArICRjdG1bJ2YnXTsKCQkJCQkJLy8gYm90dG9tIGxlZnQKCQkJCQkJJHh0ID0gJHg7CgkJCQkJCSR5dCA9ICR5IC0gJGg7CgkJCQkJCSR4MyA9ICgkY3RtWydhJ10gKiAkeHQpICsgKCRjdG1bJ2MnXSAqICR5dCkgKyAkY3RtWydlJ107CgkJCQkJCSR5MyA9ICgkY3RtWydiJ10gKiAkeHQpICsgKCRjdG1bJ2QnXSAqICR5dCkgKyAkY3RtWydmJ107CgkJCQkJCS8vIGJvdHRvbSByaWdodAoJCQkJCQkkeHQgPSAkeCArICR3OwoJCQkJCQkkeXQgPSAkeSAtICRoOwoJCQkJCQkkeDQgPSAoJGN0bVsnYSddICogJHh0KSArICgkY3RtWydjJ10gKiAkeXQpICsgJGN0bVsnZSddOwoJCQkJCQkkeTQgPSAoJGN0bVsnYiddICogJHh0KSArICgkY3RtWydkJ10gKiAkeXQpICsgJGN0bVsnZiddOwoJCQkJCQkvLyBuZXcgY29vcmRpbmF0ZXMgKHJlY3RhbmdsZSBhcmVhKQoJCQkJCQkkeCA9IG1pbigkeDEsICR4MiwgJHgzLCAkeDQpOwoJCQkJCQkkeSA9IG1heCgkeTEsICR5MiwgJHkzLCAkeTQpOwoJCQkJCQkkdyA9IChtYXgoJHgxLCAkeDIsICR4MywgJHg0KSAtICR4KSAvICR0aGlzLT5rOwoJCQkJCQkkaCA9ICgkeSAtIG1pbigkeTEsICR5MiwgJHkzLCAkeTQpKSAvICR0aGlzLT5rOwoJCQkJCQkkeCA9ICR4IC8gJHRoaXMtPms7CgkJCQkJCSR5ID0gJHRoaXMtPmggLSAoJHkgLyAkdGhpcy0+ayk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWlmICgkdGhpcy0+cGFnZSA8PSAwKSB7CgkJCSRwYWdlID0gMTsKCQl9IGVsc2UgewoJCQkkcGFnZSA9ICR0aGlzLT5wYWdlOwoJCX0KCQlpZiAoIWlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyRwYWdlXSkpIHsKCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHBhZ2VdID0gYXJyYXkoKTsKCQl9CgkJJHRoaXMtPlBhZ2VBbm5vdHNbJHBhZ2VdW10gPSBhcnJheSgnbicgPT4gKyskdGhpcy0+biwgJ3gnID0+ICR4LCAneScgPT4gJHksICd3JyA9PiAkdywgJ2gnID0+ICRoLCAndHh0JyA9PiAkdGV4dCwgJ29wdCcgPT4gJG9wdCwgJ251bXNwYWNlcycgPT4gJHNwYWNlcyk7CgkJaWYgKCEkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCWlmICgoKCRvcHRbJ1N1YnR5cGUnXSA9PSAnRmlsZUF0dGFjaG1lbnQnKSBPUiAoJG9wdFsnU3VidHlwZSddID09ICdTb3VuZCcpKSBBTkQgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkb3B0WydGUyddKSkKCQkJCUFORCAoQGZpbGVfZXhpc3RzKCRvcHRbJ0ZTJ10pIE9SIFRDUERGX1NUQVRJQzo6aXNWYWxpZFVSTCgkb3B0WydGUyddKSkKCQkJCUFORCAoIWlzc2V0KCR0aGlzLT5lbWJlZGRlZGZpbGVzW2Jhc2VuYW1lKCRvcHRbJ0ZTJ10pXSkpKSB7CgkJCQkkdGhpcy0+ZW1iZWRkZWRmaWxlc1tiYXNlbmFtZSgkb3B0WydGUyddKV0gPSBhcnJheSgnZicgPT4gKyskdGhpcy0+biwgJ24nID0+ICsrJHRoaXMtPm4sICdmaWxlJyA9PiAkb3B0WydGUyddKTsKCQkJfQoJCX0KCQkvLyBBZGQgd2lkZ2V0cyBhbm5vdGF0aW9uJ3MgaWNvbnMKCQlpZiAoaXNzZXQoJG9wdFsnbWsnXVsnaSddKSBBTkQgQGZpbGVfZXhpc3RzKCRvcHRbJ21rJ11bJ2knXSkpIHsKCQkJJHRoaXMtPkltYWdlKCRvcHRbJ21rJ11bJ2knXSwgJycsICcnLCAxMCwgMTAsICcnLCAnJywgJycsIGZhbHNlLCAzMDAsICcnLCBmYWxzZSwgZmFsc2UsIDAsIGZhbHNlLCB0cnVlKTsKCQl9CgkJaWYgKGlzc2V0KCRvcHRbJ21rJ11bJ3JpJ10pIEFORCBAZmlsZV9leGlzdHMoJG9wdFsnbWsnXVsncmknXSkpIHsKCQkJJHRoaXMtPkltYWdlKCRvcHRbJ21rJ11bJ3JpJ10sICcnLCAnJywgMCwgMCwgJycsICcnLCAnJywgZmFsc2UsIDMwMCwgJycsIGZhbHNlLCBmYWxzZSwgMCwgZmFsc2UsIHRydWUpOwoJCX0KCQlpZiAoaXNzZXQoJG9wdFsnbWsnXVsnaXgnXSkgQU5EIEBmaWxlX2V4aXN0cygkb3B0WydtayddWydpeCddKSkgewoJCQkkdGhpcy0+SW1hZ2UoJG9wdFsnbWsnXVsnaXgnXSwgJycsICcnLCAwLCAwLCAnJywgJycsICcnLCBmYWxzZSwgMzAwLCAnJywgZmFsc2UsIGZhbHNlLCAwLCBmYWxzZSwgdHJ1ZSk7CgkJfQoJfQoKCS8qKgoJICogRW1iZWRkIHRoZSBhdHRhY2hlZCBmaWxlcy4KCSAqIEBzaW5jZSA0LjQuMDAwICgyMDA4LTEyLTA3KQoJICogQHByb3RlY3RlZAoJICogQHNlZSBBbm5vdGF0aW9uKCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRFbWJlZGRlZEZpbGVzKCkgewoJCWlmICgkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCS8vIGVtYmVkZGVkIGZpbGVzIGFyZSBub3QgYWxsb3dlZCBpbiBQREYvQSBtb2RlCgkJCXJldHVybjsKCQl9CgkJcmVzZXQoJHRoaXMtPmVtYmVkZGVkZmlsZXMpOwoJCWZvcmVhY2ggKCR0aGlzLT5lbWJlZGRlZGZpbGVzIGFzICRmaWxlbmFtZSA9PiAkZmlsZWRhdGEpIHsKCQkJJGRhdGEgPSBUQ1BERl9TVEFUSUM6OmZpbGVHZXRDb250ZW50cygkZmlsZWRhdGFbJ2ZpbGUnXSk7CgkJCWlmICgkZGF0YSAhPT0gRkFMU0UpIHsKCQkJCSRyYXdzaXplID0gc3RybGVuKCRkYXRhKTsKCQkJCWlmICgkcmF3c2l6ZSA+IDApIHsKCQkJCQkvLyB1cGRhdGUgbmFtZSB0cmVlCgkJCQkJJHRoaXMtPmVmbmFtZXNbJGZpbGVuYW1lXSA9ICRmaWxlZGF0YVsnZiddLicgMCBSJzsKCQkJCQkvLyBlbWJlZGRlZCBmaWxlIHNwZWNpZmljYXRpb24gb2JqZWN0CgkJCQkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKCRmaWxlZGF0YVsnZiddKS4iXG4iOwoJCQkJCSRvdXQgLj0gJzw8L1R5cGUgL0ZpbGVzcGVjIC9GICcuJHRoaXMtPl9kYXRhc3RyaW5nKCRmaWxlbmFtZSwgJGZpbGVkYXRhWydmJ10pLicgL0VGIDw8L0YgJy4kZmlsZWRhdGFbJ24nXS4nIDAgUj4+ID4+JzsKCQkJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCQkJLy8gZW1iZWRkZWQgZmlsZSBvYmplY3QKCQkJCQkkZmlsdGVyID0gJyc7CgkJCQkJaWYgKCR0aGlzLT5jb21wcmVzcykgewoJCQkJCQkkZGF0YSA9IGd6Y29tcHJlc3MoJGRhdGEpOwoJCQkJCQkkZmlsdGVyID0gJyAvRmlsdGVyIC9GbGF0ZURlY29kZSc7CgkJCQkJfQoJCQkJCSRzdHJlYW0gPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkZGF0YSwgJGZpbGVkYXRhWyduJ10pOwoJCQkJCSRvdXQgPSAkdGhpcy0+X2dldG9iaigkZmlsZWRhdGFbJ24nXSkuIlxuIjsKCQkJCQkkb3V0IC49ICc8PCAvVHlwZSAvRW1iZWRkZWRGaWxlJy4kZmlsdGVyLicgL0xlbmd0aCAnLnN0cmxlbigkc3RyZWFtKS4nIC9QYXJhbXMgPDwvU2l6ZSAnLiRyYXdzaXplLic+PiA+Pic7CgkJCQkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCS8qKgoJICogUHJpbnRzIGEgdGV4dCBjZWxsIGF0IHRoZSBzcGVjaWZpZWQgcG9zaXRpb24uCgkgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdG8gcGxhY2UgYSBzdHJpbmcgcHJlY2lzZWx5IG9uIHRoZSBwYWdlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIGNlbGwgb3JpZ2luCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgY2VsbCBvcmlnaW4KCSAqIEBwYXJhbSAkdHh0IChzdHJpbmcpIFN0cmluZyB0byBwcmludAoJICogQHBhcmFtICRmc3Ryb2tlIChpbnQpIG91dGxpbmUgc2l6ZSBpbiB1c2VyIHVuaXRzIChmYWxzZSA9IGRpc2FibGUpCgkgKiBAcGFyYW0gJGZjbGlwIChib29sZWFuKSBpZiB0cnVlIGFjdGl2YXRlIGNsaXBwaW5nIG1vZGUgKHlvdSBtdXN0IGNhbGwgU3RhcnRUcmFuc2Zvcm0oKSBiZWZvcmUgdGhpcyBmdW5jdGlvbiBhbmQgU3RvcFRyYW5zZm9ybSgpIHRvIHN0b3AgdGhlIGNsaXBwaW5nIHRyYW5mb3JtYXRpb24pLgoJICogQHBhcmFtICRmZmlsbCAoYm9vbGVhbikgaWYgdHJ1ZSBmaWxscyB0aGUgdGV4dAoJICogQHBhcmFtICRib3JkZXIgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcGFyYW0gJGxuIChpbnQpIEluZGljYXRlcyB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBzaG91bGQgZ28gYWZ0ZXIgdGhlIGNhbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT4wOiB0byB0aGUgcmlnaHQgKG9yIGxlZnQgZm9yIFJUTCBsYW5ndWFnZXMpPC9saT48bGk+MTogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lPC9saT48bGk+MjogYmVsb3c8L2xpPjwvdWw+UHV0dGluZyAxIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZyAwIGFuZCBjYWxsaW5nIExuKCkganVzdCBhZnRlci4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgdGV4dC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgb3IgZW1wdHkgc3RyaW5nOiBsZWZ0IGFsaWduIChkZWZhdWx0IHZhbHVlKTwvbGk+PGxpPkM6IGNlbnRlcjwvbGk+PGxpPlI6IHJpZ2h0IGFsaWduPC9saT48bGk+SjoganVzdGlmeTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkZmlsbCAoYm9vbGVhbikgSW5kaWNhdGVzIGlmIHRoZSBjZWxsIGJhY2tncm91bmQgbXVzdCBiZSBwYWludGVkICh0cnVlKSBvciB0cmFuc3BhcmVudCAoZmFsc2UpLgoJICogQHBhcmFtICRsaW5rIChtaXhlZCkgVVJMIG9yIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgQWRkTGluaygpLgoJICogQHBhcmFtICRzdHJldGNoIChpbnQpIGZvbnQgc3RyZXRjaCBtb2RlOiA8dWw+PGxpPjAgPSBkaXNhYmxlZDwvbGk+PGxpPjEgPSBob3Jpem9udGFsIHNjYWxpbmcgb25seSBpZiB0ZXh0IGlzIGxhcmdlciB0aGFuIGNlbGwgd2lkdGg8L2xpPjxsaT4yID0gZm9yY2VkIGhvcml6b250YWwgc2NhbGluZyB0byBmaXQgY2VsbCB3aWR0aDwvbGk+PGxpPjMgPSBjaGFyYWN0ZXIgc3BhY2luZyBvbmx5IGlmIHRleHQgaXMgbGFyZ2VyIHRoYW4gY2VsbCB3aWR0aDwvbGk+PGxpPjQgPSBmb3JjZWQgY2hhcmFjdGVyIHNwYWNpbmcgdG8gZml0IGNlbGwgd2lkdGg8L2xpPjwvdWw+IEdlbmVyYWwgZm9udCBzdHJldGNoaW5nIGFuZCBzY2FsaW5nIHZhbHVlcyB3aWxsIGJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgoJICogQHBhcmFtICRpZ25vcmVfbWluX2hlaWdodCAoYm9vbGVhbikgaWYgdHJ1ZSBpZ25vcmUgYXV0b21hdGljIG1pbmltdW0gaGVpZ2h0IHZhbHVlLgoJICogQHBhcmFtICRjYWxpZ24gKHN0cmluZykgY2VsbCB2ZXJ0aWNhbCBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCBZIHZhbHVlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+VCA6IGNlbGwgdG9wPC9saT48bGk+QSA6IGZvbnQgdG9wPC9saT48bGk+TCA6IGZvbnQgYmFzZWxpbmU8L2xpPjxsaT5EIDogZm9udCBib3R0b208L2xpPjxsaT5CIDogY2VsbCBib3R0b208L2xpPjwvdWw+CgkgKiBAcGFyYW0gJHZhbGlnbiAoc3RyaW5nKSB0ZXh0IHZlcnRpY2FsIGFsaWdubWVudCBpbnNpZGUgdGhlIGNlbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5UIDogdG9wPC9saT48bGk+QyA6IGNlbnRlcjwvbGk+PGxpPkIgOiBib3R0b208L2xpPjwvdWw+CgkgKiBAcGFyYW0gJHJ0bG9mZiAoYm9vbGVhbikgaWYgdHJ1ZSB1c2VzIHRoZSBwYWdlIHRvcC1sZWZ0IGNvcm5lciBhcyBvcmlnaW4gb2YgYXhpcyBmb3IgJHggYW5kICR5IGluaXRpYWwgcG9zaXRpb24uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wCgkgKiBAc2VlIENlbGwoKSwgV3JpdGUoKSwgTXVsdGlDZWxsKCksIFdyaXRlSFRNTCgpLCBXcml0ZUhUTUxDZWxsKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFRleHQoJHgsICR5LCAkdHh0LCAkZnN0cm9rZT1mYWxzZSwgJGZjbGlwPWZhbHNlLCAkZmZpbGw9dHJ1ZSwgJGJvcmRlcj0wLCAkbG49MCwgJGFsaWduPScnLCAkZmlsbD1mYWxzZSwgJGxpbms9JycsICRzdHJldGNoPTAsICRpZ25vcmVfbWluX2hlaWdodD1mYWxzZSwgJGNhbGlnbj0nVCcsICR2YWxpZ249J00nLCAkcnRsb2ZmPWZhbHNlKSB7CgkJJHRleHRyZW5kZXJtb2RlID0gJHRoaXMtPnRleHRyZW5kZXJtb2RlOwoJCSR0ZXh0c3Ryb2tld2lkdGggPSAkdGhpcy0+dGV4dHN0cm9rZXdpZHRoOwoJCSR0aGlzLT5zZXRUZXh0UmVuZGVyaW5nTW9kZSgkZnN0cm9rZSwgJGZmaWxsLCAkZmNsaXApOwoJCSR0aGlzLT5TZXRYWSgkeCwgJHksICRydGxvZmYpOwoJCSR0aGlzLT5DZWxsKDAsIDAsICR0eHQsICRib3JkZXIsICRsbiwgJGFsaWduLCAkZmlsbCwgJGxpbmssICRzdHJldGNoLCAkaWdub3JlX21pbl9oZWlnaHQsICRjYWxpZ24sICR2YWxpZ24pOwoJCS8vIHJlc3RvcmUgcHJldmlvdXMgcmVuZGVyaW5nIG1vZGUKCQkkdGhpcy0+dGV4dHJlbmRlcm1vZGUgPSAkdGV4dHJlbmRlcm1vZGU7CgkJJHRoaXMtPnRleHRzdHJva2V3aWR0aCA9ICR0ZXh0c3Ryb2tld2lkdGg7Cgl9CgoJLyoqCgkgKiBXaGVuZXZlciBhIHBhZ2UgYnJlYWsgY29uZGl0aW9uIGlzIG1ldCwgdGhlIG1ldGhvZCBpcyBjYWxsZWQsIGFuZCB0aGUgYnJlYWsgaXMgaXNzdWVkIG9yIG5vdCBkZXBlbmRpbmcgb24gdGhlIHJldHVybmVkIHZhbHVlLgoJICogVGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gcmV0dXJucyBhIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbW9kZSBzZWxlY3RlZCBieSBTZXRBdXRvUGFnZUJyZWFrKCkuPGJyIC8+CgkgKiBUaGlzIG1ldGhvZCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSBhbmQgc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIGFwcGxpY2F0aW9uLgoJICogQHJldHVybiBib29sZWFuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS40CgkgKiBAc2VlIFNldEF1dG9QYWdlQnJlYWsoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gQWNjZXB0UGFnZUJyZWFrKCkgewoJCWlmICgkdGhpcy0+bnVtX2NvbHVtbnMgPiAxKSB7CgkJCS8vIG11bHRpIGNvbHVtbiBtb2RlCgkJCWlmICgkdGhpcy0+Y3VycmVudF9jb2x1bW4gPCAoJHRoaXMtPm51bV9jb2x1bW5zIC0gMSkpIHsKCQkJCS8vIGdvIHRvIG5leHQgY29sdW1uCgkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCR0aGlzLT5jdXJyZW50X2NvbHVtbiArIDEpOwoJCQl9IGVsc2VpZiAoJHRoaXMtPkF1dG9QYWdlQnJlYWspIHsKCQkJCS8vIGFkZCBhIG5ldyBwYWdlCgkJCQkkdGhpcy0+QWRkUGFnZSgpOwoJCQkJLy8gc2V0IGZpcnN0IGNvbHVtbgoJCQkJJHRoaXMtPnNlbGVjdENvbHVtbigwKTsKCQkJfQoJCQkvLyBhdm9pZCBwYWdlIGJyZWFraW5nIGZyb20gY2hlY2tQYWdlQnJlYWsoKQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCXJldHVybiAkdGhpcy0+QXV0b1BhZ2VCcmVhazsKCX0KCgkvKioKCSAqIEFkZCBwYWdlIGlmIG5lZWRlZC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIENlbGwgaGVpZ2h0LiBEZWZhdWx0IHZhbHVlOiAwLgoJICogQHBhcmFtICR5IChtaXhlZCkgc3RhcnRpbmcgeSBwb3NpdGlvbiwgbGVhdmUgZW1wdHkgZm9yIGN1cnJlbnQgcG9zaXRpb24uCgkgKiBAcGFyYW0gJGFkZHBhZ2UgKGJvb2xlYW4pIGlmIHRydWUgYWRkIGEgcGFnZSwgb3RoZXJ3aXNlIG9ubHkgcmV0dXJuIHRoZSB0cnVlL2ZhbHNlIHN0YXRlCgkgKiBAcmV0dXJuIGJvb2xlYW4gdHJ1ZSBpbiBjYXNlIG9mIHBhZ2UgYnJlYWssIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA3LTAxKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2hlY2tQYWdlQnJlYWsoJGg9MCwgJHk9JycsICRhZGRwYWdlPXRydWUpIHsKCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHkpKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCSRjdXJyZW50X3BhZ2UgPSAkdGhpcy0+cGFnZTsKCQlpZiAoKCgkeSArICRoKSA+ICR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyKSBBTkQgKCR0aGlzLT5pblBhZ2VCb2R5KCkpIEFORCAoJHRoaXMtPkFjY2VwdFBhZ2VCcmVhaygpKSkgewoJCQlpZiAoJGFkZHBhZ2UpIHsKCQkJCS8vQXV0b21hdGljIHBhZ2UgYnJlYWsKCQkJCSR4ID0gJHRoaXMtPng7CgkJCQkkdGhpcy0+QWRkUGFnZSgkdGhpcy0+Q3VyT3JpZW50YXRpb24pOwoJCQkJJHRoaXMtPnkgPSAkdGhpcy0+dE1hcmdpbjsKCQkJCSRvbGRwYWdlID0gJHRoaXMtPnBhZ2UgLSAxOwoJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQlpZiAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXSAhPSAkdGhpcy0+cGFnZWRpbVskb2xkcGFnZV1bJ29ybSddKSB7CgkJCQkJCSR0aGlzLT54ID0gJHggLSAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXSAtICR0aGlzLT5wYWdlZGltWyRvbGRwYWdlXVsnb3JtJ10pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT54ID0gJHg7CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQlpZiAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSAhPSAkdGhpcy0+cGFnZWRpbVskb2xkcGFnZV1bJ29sbSddKSB7CgkJCQkJCSR0aGlzLT54ID0gJHggKyAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSAtICR0aGlzLT5wYWdlZGltWyRvbGRwYWdlXVsnb2xtJ10pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT54ID0gJHg7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCXJldHVybiB0cnVlOwoJCX0KCQlpZiAoJGN1cnJlbnRfcGFnZSAhPSAkdGhpcy0+cGFnZSkgewoJCQkvLyBhY2NvdW50IGZvciBjb2x1bW5zIG1vZGUKCQkJcmV0dXJuIHRydWU7CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFByaW50cyBhIGNlbGwgKHJlY3Rhbmd1bGFyIGFyZWEpIHdpdGggb3B0aW9uYWwgYm9yZGVycywgYmFja2dyb3VuZCBjb2xvciBhbmQgY2hhcmFjdGVyIHN0cmluZy4gVGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSBjZWxsIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uLiBUaGUgdGV4dCBjYW4gYmUgYWxpZ25lZCBvciBjZW50ZXJlZC4gQWZ0ZXIgdGhlIGNhbGwsIHRoZSBjdXJyZW50IHBvc2l0aW9uIG1vdmVzIHRvIHRoZSByaWdodCBvciB0byB0aGUgbmV4dCBsaW5lLiBJdCBpcyBwb3NzaWJsZSB0byBwdXQgYSBsaW5rIG9uIHRoZSB0ZXh0LjxiciAvPgoJICogSWYgYXV0b21hdGljIHBhZ2UgYnJlYWtpbmcgaXMgZW5hYmxlZCBhbmQgdGhlIGNlbGwgZ29lcyBiZXlvbmQgdGhlIGxpbWl0LCBhIHBhZ2UgYnJlYWsgaXMgZG9uZSBiZWZvcmUgb3V0cHV0dGluZy4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIENlbGwgd2lkdGguIElmIDAsIHRoZSBjZWxsIGV4dGVuZHMgdXAgdG8gdGhlIHJpZ2h0IG1hcmdpbi4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIENlbGwgaGVpZ2h0LiBEZWZhdWx0IHZhbHVlOiAwLgoJICogQHBhcmFtICR0eHQgKHN0cmluZykgU3RyaW5nIHRvIHByaW50LiBEZWZhdWx0IHZhbHVlOiBlbXB0eSBzdHJpbmcuCgkgKiBAcGFyYW0gJGJvcmRlciAobWl4ZWQpIEluZGljYXRlcyBpZiBib3JkZXJzIG11c3QgYmUgZHJhd24gYXJvdW5kIHRoZSBjZWxsLiBUaGUgdmFsdWUgY2FuIGJlIGEgbnVtYmVyOjx1bD48bGk+MDogbm8gYm9yZGVyIChkZWZhdWx0KTwvbGk+PGxpPjE6IGZyYW1lPC9saT48L3VsPiBvciBhIHN0cmluZyBjb250YWluaW5nIHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoaW4gYW55IG9yZGVyKTo8dWw+PGxpPkw6IGxlZnQ8L2xpPjxsaT5UOiB0b3A8L2xpPjxsaT5SOiByaWdodDwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4gb3IgYW4gYXJyYXkgb2YgbGluZSBzdHlsZXMgZm9yIGVhY2ggYm9yZGVyIGdyb3VwIC0gZm9yIGV4YW1wbGU6IGFycmF5KCdMVFJCJyA9PiBhcnJheSgnd2lkdGgnID0+IDIsICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDAsIDAsIDApKSkKCSAqIEBwYXJhbSAkbG4gKGludCkgSW5kaWNhdGVzIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNob3VsZCBnbyBhZnRlciB0aGUgY2FsbC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPjA6IHRvIHRoZSByaWdodCAob3IgbGVmdCBmb3IgUlRMIGxhbmd1YWdlcyk8L2xpPjxsaT4xOiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmU8L2xpPjxsaT4yOiBiZWxvdzwvbGk+PC91bD4gUHV0dGluZyAxIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZyAwIGFuZCBjYWxsaW5nIExuKCkganVzdCBhZnRlci4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgdGV4dC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgb3IgZW1wdHkgc3RyaW5nOiBsZWZ0IGFsaWduIChkZWZhdWx0IHZhbHVlKTwvbGk+PGxpPkM6IGNlbnRlcjwvbGk+PGxpPlI6IHJpZ2h0IGFsaWduPC9saT48bGk+SjoganVzdGlmeTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkZmlsbCAoYm9vbGVhbikgSW5kaWNhdGVzIGlmIHRoZSBjZWxsIGJhY2tncm91bmQgbXVzdCBiZSBwYWludGVkICh0cnVlKSBvciB0cmFuc3BhcmVudCAoZmFsc2UpLgoJICogQHBhcmFtICRsaW5rIChtaXhlZCkgVVJMIG9yIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgQWRkTGluaygpLgoJICogQHBhcmFtICRzdHJldGNoIChpbnQpIGZvbnQgc3RyZXRjaCBtb2RlOiA8dWw+PGxpPjAgPSBkaXNhYmxlZDwvbGk+PGxpPjEgPSBob3Jpem9udGFsIHNjYWxpbmcgb25seSBpZiB0ZXh0IGlzIGxhcmdlciB0aGFuIGNlbGwgd2lkdGg8L2xpPjxsaT4yID0gZm9yY2VkIGhvcml6b250YWwgc2NhbGluZyB0byBmaXQgY2VsbCB3aWR0aDwvbGk+PGxpPjMgPSBjaGFyYWN0ZXIgc3BhY2luZyBvbmx5IGlmIHRleHQgaXMgbGFyZ2VyIHRoYW4gY2VsbCB3aWR0aDwvbGk+PGxpPjQgPSBmb3JjZWQgY2hhcmFjdGVyIHNwYWNpbmcgdG8gZml0IGNlbGwgd2lkdGg8L2xpPjwvdWw+IEdlbmVyYWwgZm9udCBzdHJldGNoaW5nIGFuZCBzY2FsaW5nIHZhbHVlcyB3aWxsIGJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgoJICogQHBhcmFtICRpZ25vcmVfbWluX2hlaWdodCAoYm9vbGVhbikgaWYgdHJ1ZSBpZ25vcmUgYXV0b21hdGljIG1pbmltdW0gaGVpZ2h0IHZhbHVlLgoJICogQHBhcmFtICRjYWxpZ24gKHN0cmluZykgY2VsbCB2ZXJ0aWNhbCBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCBZIHZhbHVlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+VCA6IGNlbGwgdG9wPC9saT48bGk+QyA6IGNlbnRlcjwvbGk+PGxpPkIgOiBjZWxsIGJvdHRvbTwvbGk+PGxpPkEgOiBmb250IHRvcDwvbGk+PGxpPkwgOiBmb250IGJhc2VsaW5lPC9saT48bGk+RCA6IGZvbnQgYm90dG9tPC9saT48L3VsPgoJICogQHBhcmFtICR2YWxpZ24gKHN0cmluZykgdGV4dCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW5zaWRlIHRoZSBjZWxsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+VCA6IHRvcDwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5CIDogYm90dG9tPC9saT48L3VsPgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBTZXRGb250KCksIFNldERyYXdDb2xvcigpLCBTZXRGaWxsQ29sb3IoKSwgU2V0VGV4dENvbG9yKCksIFNldExpbmVXaWR0aCgpLCBBZGRMaW5rKCksIExuKCksIE11bHRpQ2VsbCgpLCBXcml0ZSgpLCBTZXRBdXRvUGFnZUJyZWFrKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIENlbGwoJHcsICRoPTAsICR0eHQ9JycsICRib3JkZXI9MCwgJGxuPTAsICRhbGlnbj0nJywgJGZpbGw9ZmFsc2UsICRsaW5rPScnLCAkc3RyZXRjaD0wLCAkaWdub3JlX21pbl9oZWlnaHQ9ZmFsc2UsICRjYWxpZ249J1QnLCAkdmFsaWduPSdNJykgewoJCSRwcmV2X2NlbGxfbWFyZ2luID0gJHRoaXMtPmNlbGxfbWFyZ2luOwoJCSRwcmV2X2NlbGxfcGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJJHRoaXMtPmFkanVzdENlbGxQYWRkaW5nKCRib3JkZXIpOwoJCWlmICghJGlnbm9yZV9taW5faGVpZ2h0KSB7CgkJCSRtaW5fY2VsbF9oZWlnaHQgPSAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkdGhpcy0+Rm9udFNpemUpOwoJCQlpZiAoJGggPCAkbWluX2NlbGxfaGVpZ2h0KSB7CgkJCQkkaCA9ICRtaW5fY2VsbF9oZWlnaHQ7CgkJCX0KCQl9CgkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCRoICsgJHRoaXMtPmNlbGxfbWFyZ2luWydUJ10gKyAkdGhpcy0+Y2VsbF9tYXJnaW5bJ0InXSk7CgkJLy8gYXBwbHkgdGV4dCBzaGFkb3cgaWYgZW5hYmxlZAoJCWlmICgkdGhpcy0+dHh0c2hhZG93WydlbmFibGVkJ10pIHsKCQkJLy8gc2F2ZSBkYXRhCgkJCSR4ID0gJHRoaXMtPng7CgkJCSR5ID0gJHRoaXMtPnk7CgkJCSRiYyA9ICR0aGlzLT5iZ2NvbG9yOwoJCQkkZmMgPSAkdGhpcy0+Zmdjb2xvcjsKCQkJJHNjID0gJHRoaXMtPnN0cm9rZWNvbG9yOwoJCQkkYWxwaGEgPSAkdGhpcy0+YWxwaGE7CgkJCS8vIHByaW50IHNoYWRvdwoJCQkkdGhpcy0+eCArPSAkdGhpcy0+dHh0c2hhZG93WydkZXB0aF93J107CgkJCSR0aGlzLT55ICs9ICR0aGlzLT50eHRzaGFkb3dbJ2RlcHRoX2gnXTsKCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCR0aGlzLT50eHRzaGFkb3dbJ2NvbG9yJ10pOwoJCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJHRoaXMtPnR4dHNoYWRvd1snY29sb3InXSk7CgkJCSR0aGlzLT5TZXREcmF3Q29sb3JBcnJheSgkdGhpcy0+dHh0c2hhZG93Wydjb2xvciddKTsKCQkJaWYgKCR0aGlzLT50eHRzaGFkb3dbJ29wYWNpdHknXSAhPSAkYWxwaGFbJ0NBJ10pIHsKCQkJCSR0aGlzLT5zZXRBbHBoYSgkdGhpcy0+dHh0c2hhZG93WydvcGFjaXR5J10sICR0aGlzLT50eHRzaGFkb3dbJ2JsZW5kX21vZGUnXSk7CgkJCX0KCQkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCQkkdGhpcy0+X291dCgkdGhpcy0+Z2V0Q2VsbENvZGUoJHcsICRoLCAkdHh0LCAkYm9yZGVyLCAkbG4sICRhbGlnbiwgJGZpbGwsICRsaW5rLCAkc3RyZXRjaCwgdHJ1ZSwgJGNhbGlnbiwgJHZhbGlnbikpOwoJCQl9CgkJCS8vcmVzdG9yZSBkYXRhCgkJCSR0aGlzLT54ID0gJHg7CgkJCSR0aGlzLT55ID0gJHk7CgkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkYmMpOwoJCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJGZjKTsKCQkJJHRoaXMtPlNldERyYXdDb2xvckFycmF5KCRzYyk7CgkJCWlmICgkdGhpcy0+dHh0c2hhZG93WydvcGFjaXR5J10gIT0gJGFscGhhWydDQSddKSB7CgkJCQkkdGhpcy0+c2V0QWxwaGEoJGFscGhhWydDQSddLCAkYWxwaGFbJ0JNJ10sICRhbHBoYVsnY2EnXSwgJGFscGhhWydBSVMnXSk7CgkJCX0KCQl9CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCSR0aGlzLT5fb3V0KCR0aGlzLT5nZXRDZWxsQ29kZSgkdywgJGgsICR0eHQsICRib3JkZXIsICRsbiwgJGFsaWduLCAkZmlsbCwgJGxpbmssICRzdHJldGNoLCB0cnVlLCAkY2FsaWduLCAkdmFsaWduKSk7CgkJfQoJCSR0aGlzLT5jZWxsX3BhZGRpbmcgPSAkcHJldl9jZWxsX3BhZGRpbmc7CgkJJHRoaXMtPmNlbGxfbWFyZ2luID0gJHByZXZfY2VsbF9tYXJnaW47Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBQREYgc3RyaW5nIGNvZGUgdG8gcHJpbnQgYSBjZWxsIChyZWN0YW5ndWxhciBhcmVhKSB3aXRoIG9wdGlvbmFsIGJvcmRlcnMsIGJhY2tncm91bmQgY29sb3IgYW5kIGNoYXJhY3RlciBzdHJpbmcuIFRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgY2VsbCBjb3JyZXNwb25kcyB0byB0aGUgY3VycmVudCBwb3NpdGlvbi4gVGhlIHRleHQgY2FuIGJlIGFsaWduZWQgb3IgY2VudGVyZWQuIEFmdGVyIHRoZSBjYWxsLCB0aGUgY3VycmVudCBwb3NpdGlvbiBtb3ZlcyB0byB0aGUgcmlnaHQgb3IgdG8gdGhlIG5leHQgbGluZS4gSXQgaXMgcG9zc2libGUgdG8gcHV0IGEgbGluayBvbiB0aGUgdGV4dC48YnIgLz4KCSAqIElmIGF1dG9tYXRpYyBwYWdlIGJyZWFraW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjZWxsIGdvZXMgYmV5b25kIHRoZSBsaW1pdCwgYSBwYWdlIGJyZWFrIGlzIGRvbmUgYmVmb3JlIG91dHB1dHRpbmcuCgkgKiBAcGFyYW0gJHcgKGZsb2F0KSBDZWxsIHdpZHRoLiBJZiAwLCB0aGUgY2VsbCBleHRlbmRzIHVwIHRvIHRoZSByaWdodCBtYXJnaW4uCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBDZWxsIGhlaWdodC4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkdHh0IChzdHJpbmcpIFN0cmluZyB0byBwcmludC4gRGVmYXVsdCB2YWx1ZTogZW1wdHkgc3RyaW5nLgoJICogQHBhcmFtICRib3JkZXIgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcGFyYW0gJGxuIChpbnQpIEluZGljYXRlcyB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBzaG91bGQgZ28gYWZ0ZXIgdGhlIGNhbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT4wOiB0byB0aGUgcmlnaHQgKG9yIGxlZnQgZm9yIFJUTCBsYW5ndWFnZXMpPC9saT48bGk+MTogdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lPC9saT48bGk+MjogYmVsb3c8L2xpPjwvdWw+UHV0dGluZyAxIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZyAwIGFuZCBjYWxsaW5nIExuKCkganVzdCBhZnRlci4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgdGV4dC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgb3IgZW1wdHkgc3RyaW5nOiBsZWZ0IGFsaWduIChkZWZhdWx0IHZhbHVlKTwvbGk+PGxpPkM6IGNlbnRlcjwvbGk+PGxpPlI6IHJpZ2h0IGFsaWduPC9saT48bGk+SjoganVzdGlmeTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkZmlsbCAoYm9vbGVhbikgSW5kaWNhdGVzIGlmIHRoZSBjZWxsIGJhY2tncm91bmQgbXVzdCBiZSBwYWludGVkICh0cnVlKSBvciB0cmFuc3BhcmVudCAoZmFsc2UpLgoJICogQHBhcmFtICRsaW5rIChtaXhlZCkgVVJMIG9yIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgQWRkTGluaygpLgoJICogQHBhcmFtICRzdHJldGNoIChpbnQpIGZvbnQgc3RyZXRjaCBtb2RlOiA8dWw+PGxpPjAgPSBkaXNhYmxlZDwvbGk+PGxpPjEgPSBob3Jpem9udGFsIHNjYWxpbmcgb25seSBpZiB0ZXh0IGlzIGxhcmdlciB0aGFuIGNlbGwgd2lkdGg8L2xpPjxsaT4yID0gZm9yY2VkIGhvcml6b250YWwgc2NhbGluZyB0byBmaXQgY2VsbCB3aWR0aDwvbGk+PGxpPjMgPSBjaGFyYWN0ZXIgc3BhY2luZyBvbmx5IGlmIHRleHQgaXMgbGFyZ2VyIHRoYW4gY2VsbCB3aWR0aDwvbGk+PGxpPjQgPSBmb3JjZWQgY2hhcmFjdGVyIHNwYWNpbmcgdG8gZml0IGNlbGwgd2lkdGg8L2xpPjwvdWw+IEdlbmVyYWwgZm9udCBzdHJldGNoaW5nIGFuZCBzY2FsaW5nIHZhbHVlcyB3aWxsIGJlIHByZXNlcnZlZCB3aGVuIHBvc3NpYmxlLgoJICogQHBhcmFtICRpZ25vcmVfbWluX2hlaWdodCAoYm9vbGVhbikgaWYgdHJ1ZSBpZ25vcmUgYXV0b21hdGljIG1pbmltdW0gaGVpZ2h0IHZhbHVlLgoJICogQHBhcmFtICRjYWxpZ24gKHN0cmluZykgY2VsbCB2ZXJ0aWNhbCBhbGlnbm1lbnQgcmVsYXRpdmUgdG8gdGhlIHNwZWNpZmllZCBZIHZhbHVlLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+VCA6IGNlbGwgdG9wPC9saT48bGk+QyA6IGNlbnRlcjwvbGk+PGxpPkIgOiBjZWxsIGJvdHRvbTwvbGk+PGxpPkEgOiBmb250IHRvcDwvbGk+PGxpPkwgOiBmb250IGJhc2VsaW5lPC9saT48bGk+RCA6IGZvbnQgYm90dG9tPC9saT48L3VsPgoJICogQHBhcmFtICR2YWxpZ24gKHN0cmluZykgdGV4dCB2ZXJ0aWNhbCBhbGlnbm1lbnQgaW5zaWRlIHRoZSBjZWxsLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOjx1bD48bGk+VCA6IHRvcDwvbGk+PGxpPk0gOiBtaWRkbGU8L2xpPjxsaT5CIDogYm90dG9tPC9saT48L3VsPgoJICogQHJldHVybiBzdHJpbmcgY29udGFpbmluZyBjZWxsIGNvZGUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAxLjAKCSAqIEBzZWUgQ2VsbCgpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRDZWxsQ29kZSgkdywgJGg9MCwgJHR4dD0nJywgJGJvcmRlcj0wLCAkbG49MCwgJGFsaWduPScnLCAkZmlsbD1mYWxzZSwgJGxpbms9JycsICRzdHJldGNoPTAsICRpZ25vcmVfbWluX2hlaWdodD1mYWxzZSwgJGNhbGlnbj0nVCcsICR2YWxpZ249J00nKSB7CgkJLy8gcmVwbGFjZSAnTk8tQlJFQUsgU1BBQ0UnIChVKzAwQTApIGNoYXJhY3RlciB3aXRoIGEgc2ltcGxlIHNwYWNlCgkJJHR4dCA9IHN0cl9yZXBsYWNlKFRDUERGX0ZPTlRTOjp1bmljaHIoMTYwLCAkdGhpcy0+aXN1bmljb2RlKSwgJyAnLCAkdHh0KTsKCQkkcHJldl9jZWxsX21hcmdpbiA9ICR0aGlzLT5jZWxsX21hcmdpbjsKCQkkcHJldl9jZWxsX3BhZGRpbmcgPSAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCSR0eHQgPSBUQ1BERl9TVEFUSUM6OnJlbW92ZVNIWSgkdHh0LCAkdGhpcy0+aXN1bmljb2RlKTsKCQkkcnMgPSAnJzsgLy9zdHJpbmcgdG8gYmUgcmV0dXJuZWQKCQkkdGhpcy0+YWRqdXN0Q2VsbFBhZGRpbmcoJGJvcmRlcik7CgkJaWYgKCEkaWdub3JlX21pbl9oZWlnaHQpIHsKCQkJJG1pbl9jZWxsX2hlaWdodCA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCWlmICgkaCA8ICRtaW5fY2VsbF9oZWlnaHQpIHsKCQkJCSRoID0gJG1pbl9jZWxsX2hlaWdodDsKCQkJfQoJCX0KCQkkayA9ICR0aGlzLT5rOwoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR0aGlzLT54LCAkdGhpcy0+eSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHRoaXMtPngsICR0aGlzLT55KTsKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkeCA9ICR0aGlzLT54IC0gJHRoaXMtPmNlbGxfbWFyZ2luWydSJ107CgkJfSBlbHNlIHsKCQkJJHggPSAkdGhpcy0+eCArICR0aGlzLT5jZWxsX21hcmdpblsnTCddOwoJCX0KCQkkeSA9ICR0aGlzLT55ICsgJHRoaXMtPmNlbGxfbWFyZ2luWydUJ107CgkJJHByZXZfZm9udF9zdHJldGNoaW5nID0gJHRoaXMtPmZvbnRfc3RyZXRjaGluZzsKCQkkcHJldl9mb250X3NwYWNpbmcgPSAkdGhpcy0+Zm9udF9zcGFjaW5nOwoJCS8vIGNlbGwgdmVydGljYWwgYWxpZ25tZW50CgkJc3dpdGNoICgkY2FsaWduKSB7CgkJCWNhc2UgJ0EnOiB7CgkJCQkvLyBmb250IHRvcAoJCQkJc3dpdGNoICgkdmFsaWduKSB7CgkJCQkJY2FzZSAnVCc6IHsKCQkJCQkJLy8gdG9wCgkJCQkJCSR5IC09ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ0InOiB7CgkJCQkJCS8vIGJvdHRvbQoJCQkJCQkkeSAtPSAoJGggLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydCJ10gLSAkdGhpcy0+Rm9udEFzY2VudCAtICR0aGlzLT5Gb250RGVzY2VudCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlkZWZhdWx0OgoJCQkJCWNhc2UgJ0MnOgoJCQkJCWNhc2UgJ00nOiB7CgkJCQkJCS8vIGNlbnRlcgoJCQkJCQkkeSAtPSAoKCRoIC0gJHRoaXMtPkZvbnRBc2NlbnQgLSAkdGhpcy0+Rm9udERlc2NlbnQpIC8gMik7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0wnOiB7CgkJCQkvLyBmb250IGJhc2VsaW5lCgkJCQlzd2l0Y2ggKCR2YWxpZ24pIHsKCQkJCQljYXNlICdUJzogewoJCQkJCQkvLyB0b3AKCQkJCQkJJHkgLT0gKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXSArICR0aGlzLT5Gb250QXNjZW50KTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ0InOiB7CgkJCQkJCS8vIGJvdHRvbQoJCQkJCQkkeSAtPSAoJGggLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydCJ10gLSAkdGhpcy0+Rm9udERlc2NlbnQpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJZGVmYXVsdDoKCQkJCQljYXNlICdDJzoKCQkJCQljYXNlICdNJzogewoJCQkJCQkvLyBjZW50ZXIKCQkJCQkJJHkgLT0gKCgkaCArICR0aGlzLT5Gb250QXNjZW50IC0gJHRoaXMtPkZvbnREZXNjZW50KSAvIDIpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdEJzogewoJCQkJLy8gZm9udCBib3R0b20KCQkJCXN3aXRjaCAoJHZhbGlnbikgewoJCQkJCWNhc2UgJ1QnOiB7CgkJCQkJCS8vIHRvcAoJCQkJCQkkeSAtPSAoJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddICsgJHRoaXMtPkZvbnRBc2NlbnQgKyAkdGhpcy0+Rm9udERlc2NlbnQpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnQic6IHsKCQkJCQkJLy8gYm90dG9tCgkJCQkJCSR5IC09ICgkaCAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0InXSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlkZWZhdWx0OgoJCQkJCWNhc2UgJ0MnOgoJCQkJCWNhc2UgJ00nOiB7CgkJCQkJCS8vIGNlbnRlcgoJCQkJCQkkeSAtPSAoKCRoICsgJHRoaXMtPkZvbnRBc2NlbnQgKyAkdGhpcy0+Rm9udERlc2NlbnQpIC8gMik7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0InOiB7CgkJCQkvLyBjZWxsIGJvdHRvbQoJCQkJJHkgLT0gJGg7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDJzoKCQkJY2FzZSAnTSc6IHsKCQkJCS8vIGNlbGwgY2VudGVyCgkJCQkkeSAtPSAoJGggLyAyKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6CgkJCWNhc2UgJ1QnOiB7CgkJCQkvLyBjZWxsIHRvcAoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJLy8gdGV4dCB2ZXJ0aWNhbCBhbGlnbm1lbnQKCQlzd2l0Y2ggKCR2YWxpZ24pIHsKCQkJY2FzZSAnVCc6IHsKCQkJCS8vIHRvcAoJCQkJJHl0ID0gJHkgKyAkdGhpcy0+Y2VsbF9wYWRkaW5nWydUJ107CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdCJzogewoJCQkJLy8gYm90dG9tCgkJCQkkeXQgPSAkeSArICRoIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddIC0gJHRoaXMtPkZvbnRBc2NlbnQgLSAkdGhpcy0+Rm9udERlc2NlbnQ7CgkJCQlicmVhazsKCQkJfQoJCQlkZWZhdWx0OgoJCQljYXNlICdDJzoKCQkJY2FzZSAnTSc6IHsKCQkJCS8vIGNlbnRlcgoJCQkJJHl0ID0gJHkgKyAoKCRoIC0gJHRoaXMtPkZvbnRBc2NlbnQgLSAkdGhpcy0+Rm9udERlc2NlbnQpIC8gMik7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkYmFzZWZvbnR5ID0gJHl0ICsgJHRoaXMtPkZvbnRBc2NlbnQ7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR3KSBPUiAoJHcgPD0gMCkpIHsKCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR3ID0gJHggLSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlIHsKCQkJCSR3ID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR4OwoJCQl9CgkJfQoJCSRzID0gJyc7CgkJLy8gZmlsbCBhbmQgYm9yZGVycwoJCWlmIChpc19zdHJpbmcoJGJvcmRlcikgQU5EIChzdHJsZW4oJGJvcmRlcikgPT0gNCkpIHsKCQkJLy8gZnVsbCBib3JkZXIKCQkJJGJvcmRlciA9IDE7CgkJfQoJCWlmICgkZmlsbCBPUiAoJGJvcmRlciA9PSAxKSkgewoJCQlpZiAoJGZpbGwpIHsKCQkJCSRvcCA9ICgkYm9yZGVyID09IDEpID8gJ0InIDogJ2YnOwoJCQl9IGVsc2UgewoJCQkJJG9wID0gJ1MnOwoJCQl9CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkeGsgPSAoKCR4IC0gJHcpICogJGspOwoJCQl9IGVsc2UgewoJCQkJJHhrID0gKCR4ICogJGspOwoJCQl9CgkJCSRzIC49IHNwcmludGYoJyVGICVGICVGICVGIHJlICVzICcsICR4aywgKCgkdGhpcy0+aCAtICR5KSAqICRrKSwgKCR3ICogJGspLCAoLSRoICogJGspLCAkb3ApOwoJCX0KCQkvLyBkcmF3IGJvcmRlcnMKCQkkcyAuPSAkdGhpcy0+Z2V0Q2VsbEJvcmRlcigkeCwgJHksICR3LCAkaCwgJGJvcmRlcik7CgkJaWYgKCR0eHQgIT0gJycpIHsKCQkJJHR4dDIgPSAkdHh0OwoJCQlpZiAoJHRoaXMtPmlzdW5pY29kZSkgewoJCQkJaWYgKCgkdGhpcy0+Q3VycmVudEZvbnRbJ3R5cGUnXSA9PSAnY29yZScpIE9SICgkdGhpcy0+Q3VycmVudEZvbnRbJ3R5cGUnXSA9PSAnVHJ1ZVR5cGUnKSBPUiAoJHRoaXMtPkN1cnJlbnRGb250Wyd0eXBlJ10gPT0gJ1R5cGUxJykpIHsKCQkJCQkkdHh0MiA9IFRDUERGX0ZPTlRTOjpVVEY4VG9MYXRpbjEoJHR4dDIsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQl9IGVsc2UgewoJCQkJCSR1bmljb2RlID0gVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCR0eHQsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7IC8vIGFycmF5IG9mIFVURi04IHVuaWNvZGUgdmFsdWVzCgkJCQkJJHVuaWNvZGUgPSBUQ1BERl9GT05UUzo6dXRmOEJpZGkoJHVuaWNvZGUsICcnLCAkdGhpcy0+dG1wcnRsLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCQkJCS8vIHJlcGxhY2UgdGhhaSBjaGFycyAoaWYgYW55KQoJCQkJCWlmIChkZWZpbmVkKCdLX1RIQUlfVE9QQ0hBUlMnKSBBTkQgKEtfVEhBSV9UT1BDSEFSUyA9PSB0cnVlKSkgewoJCQkJCQkvLyBudW1iZXIgb2YgY2hhcnMKCQkJCQkJJG51bWNoYXJzID0gY291bnQoJHVuaWNvZGUpOwoJCQkJCQkvLyBwbyBwbGEsIGZvciBmYXIsIGZvciBmYW4KCQkJCQkJJGxvbmd0YWlsID0gYXJyYXkoMHgwZTFiLCAweDBlMWQsIDB4MGUxZik7CgkJCQkJCS8vIGRvIGNoYWRhLCB0byBwYXRhawoJCQkJCQkkbG93dGFpbCA9IGFycmF5KDB4MGUwZSwgMHgwZTBmKTsKCQkJCQkJLy8gbWFpIGh1biBhcmthZCwgc2FyYSBpLCBzYXJhIGlpLCBzYXJhIHVlLCBzYXJhIHVlZQoJCQkJCQkkdXB2b3dlbCA9IGFycmF5KDB4MGUzMSwgMHgwZTM0LCAweDBlMzUsIDB4MGUzNiwgMHgwZTM3KTsKCQkJCQkJLy8gbWFpIGVrLCBtYWkgdGhvLCBtYWkgdHJpLCBtYWkgY2hhdHRhd2EsIGthcmFuCgkJCQkJCSR0b25lbWFyayA9IGFycmF5KDB4MGU0OCwgMHgwZTQ5LCAweDBlNGEsIDB4MGU0YiwgMHgwZTRjKTsKCQkJCQkJLy8gc2FyYSB1LCBzYXJhIHV1LCBwaW50aHUKCQkJCQkJJGxvd3Zvd2VsID0gYXJyYXkoMHgwZTM4LCAweDBlMzksIDB4MGUzYSk7CgkJCQkJCSRvdXRwdXQgPSBhcnJheSgpOwoJCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAkbnVtY2hhcnM7ICRpKyspIHsKCQkJCQkJCWlmICgoJHVuaWNvZGVbJGldID49IDB4MGUwMCkgJiYgKCR1bmljb2RlWyRpXSA8PSAweDBlNWIpKSB7CgkJCQkJCQkJJGNoMCA9ICR1bmljb2RlWyRpXTsKCQkJCQkJCQkkY2gxID0gKCRpID4gMCkgPyAkdW5pY29kZVsoJGkgLSAxKV0gOiAwOwoJCQkJCQkJCSRjaDIgPSAoJGkgPiAxKSA/ICR1bmljb2RlWygkaSAtIDIpXSA6IDA7CgkJCQkJCQkJJGNobiA9ICgkaSA8ICgkbnVtY2hhcnMgLSAxKSkgPyAkdW5pY29kZVsoJGkgKyAxKV0gOiAwOwoJCQkJCQkJCWlmIChpbl9hcnJheSgkY2gwLCAkdG9uZW1hcmspKSB7CgkJCQkJCQkJCWlmICgkY2huID09IDB4MGUzMykgewoJCQkJCQkJCQkJLy8gc2FyYSB1bQoJCQkJCQkJCQkJaWYgKGluX2FycmF5KCRjaDEsICRsb25ndGFpbCkpIHsKCQkJCQkJCQkJCQkvLyB0b25lbWFyayBhdCB1cHBlciBsZWZ0CgkJCQkJCQkJCQkJJG91dHB1dFtdID0gJHRoaXMtPnJlcGxhY2VDaGFyKCRjaDAsICgweGY3MTMgKyAkY2gwIC0gMHgwZTQ4KSk7CgkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCS8vIHRvbmVtYXJrIGF0IHVwcGVyIHJpZ2h0IChub3JtYWwgcG9zaXRpb24pCgkJCQkJCQkJCQkJJG91dHB1dFtdID0gJGNoMDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfSBlbHNlaWYgKGluX2FycmF5KCRjaDEsICRsb25ndGFpbCkgT1IgKGluX2FycmF5KCRjaDIsICRsb25ndGFpbCkgQU5EIGluX2FycmF5KCRjaDEsICRsb3d2b3dlbCkpKSB7CgkJCQkJCQkJCQkvLyB0b25lbWFyayBhdCBsb3dlciBsZWZ0CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAkdGhpcy0+cmVwbGFjZUNoYXIoJGNoMCwgKDB4ZjcwNSArICRjaDAgLSAweDBlNDgpKTsKCQkJCQkJCQkJfSBlbHNlaWYgKGluX2FycmF5KCRjaDEsICR1cHZvd2VsKSkgewoJCQkJCQkJCQkJaWYgKGluX2FycmF5KCRjaDIsICRsb25ndGFpbCkpIHsKCQkJCQkJCQkJCQkvLyB0b25lbWFyayBhdCB1cHBlciBsZWZ0CgkJCQkJCQkJCQkJJG91dHB1dFtdID0gJHRoaXMtPnJlcGxhY2VDaGFyKCRjaDAsICgweGY3MTMgKyAkY2gwIC0gMHgwZTQ4KSk7CgkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCS8vIHRvbmVtYXJrIGF0IHVwcGVyIHJpZ2h0IChub3JtYWwgcG9zaXRpb24pCgkJCQkJCQkJCQkJJG91dHB1dFtdID0gJGNoMDsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCS8vIHRvbmVtYXJrIGF0IGxvd2VyIHJpZ2h0CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAkdGhpcy0+cmVwbGFjZUNoYXIoJGNoMCwgKDB4ZjcwYSArICRjaDAgLSAweDBlNDgpKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0gZWxzZWlmICgoJGNoMCA9PSAweDBlMzMpIEFORCAoaW5fYXJyYXkoJGNoMSwgJGxvbmd0YWlsKSBPUiAoaW5fYXJyYXkoJGNoMiwgJGxvbmd0YWlsKSBBTkQgaW5fYXJyYXkoJGNoMSwgJHRvbmVtYXJrKSkpKSB7CgkJCQkJCQkJCS8vIGFkZCBsb3dlciBsZWZ0IG5pa2hhaGl0IGFuZCBzYXJhIGFhCgkJCQkJCQkJCWlmICgkdGhpcy0+aXNDaGFyRGVmaW5lZCgweGY3MTEpIEFORCAkdGhpcy0+aXNDaGFyRGVmaW5lZCgweDBlMzIpKSB7CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAweGY3MTE7CgkJCQkJCQkJCQkkdGhpcy0+Q3VycmVudEZvbnRbJ3N1YnNldGNoYXJzJ11bMHhmNzExXSA9IHRydWU7CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAweDBlMzI7CgkJCQkJCQkJCQkkdGhpcy0+Q3VycmVudEZvbnRbJ3N1YnNldGNoYXJzJ11bMHgwZTMyXSA9IHRydWU7CgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAkY2gwOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSBlbHNlaWYgKGluX2FycmF5KCRjaDEsICRsb25ndGFpbCkpIHsKCQkJCQkJCQkJaWYgKCRjaDAgPT0gMHgwZTMxKSB7CgkJCQkJCQkJCQkvLyBsb3dlciBsZWZ0IG1haSBodW4gYXJrYWQKCQkJCQkJCQkJCSRvdXRwdXRbXSA9ICR0aGlzLT5yZXBsYWNlQ2hhcigkY2gwLCAweGY3MTApOwoJCQkJCQkJCQl9IGVsc2VpZiAoaW5fYXJyYXkoJGNoMCwgJHVwdm93ZWwpKSB7CgkJCQkJCQkJCQkvLyBsb3dlciBsZWZ0CgkJCQkJCQkJCQkkb3V0cHV0W10gPSAkdGhpcy0+cmVwbGFjZUNoYXIoJGNoMCwgKDB4ZjcwMSArICRjaDAgLSAweDBlMzQpKTsKCQkJCQkJCQkJfSBlbHNlaWYgKCRjaDAgPT0gMHgwZTQ3KSB7CgkJCQkJCQkJCQkvLyBsb3dlciBsZWZ0IG1haSB0YWkga29vCgkJCQkJCQkJCQkkb3V0cHV0W10gPSAkdGhpcy0+cmVwbGFjZUNoYXIoJGNoMCwgMHhmNzEyKTsKCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCS8vIG5vcm1hbCBjaGFyYWN0ZXIKCQkJCQkJCQkJCSRvdXRwdXRbXSA9ICRjaDA7CgkJCQkJCQkJCX0KCQkJCQkJCQl9IGVsc2VpZiAoaW5fYXJyYXkoJGNoMSwgJGxvd3RhaWwpIEFORCBpbl9hcnJheSgkY2gwLCAkbG93dm93ZWwpKSB7CgkJCQkJCQkJCS8vIGxvd2VyIHZvd2VsCgkJCQkJCQkJCSRvdXRwdXRbXSA9ICR0aGlzLT5yZXBsYWNlQ2hhcigkY2gwLCAoMHhmNzE4ICsgJGNoMCAtIDB4MGUzOCkpOwoJCQkJCQkJCX0gZWxzZWlmICgoJGNoMCA9PSAweDBlMGQpIEFORCBpbl9hcnJheSgkY2huLCAkbG93dm93ZWwpKSB7CgkJCQkJCQkJCS8vIHlvIHlpbmcgd2l0aG91dCBsb3dlciBwYXJ0CgkJCQkJCQkJCSRvdXRwdXRbXSA9ICR0aGlzLT5yZXBsYWNlQ2hhcigkY2gwLCAweGY3MGYpOwoJCQkJCQkJCX0gZWxzZWlmICgoJGNoMCA9PSAweDBlMTApIEFORCBpbl9hcnJheSgkY2huLCAkbG93dm93ZWwpKSB7CgkJCQkJCQkJCS8vIHRobyBzYW50YW4gd2l0aG91dCBsb3dlciBwYXJ0CgkJCQkJCQkJCSRvdXRwdXRbXSA9ICR0aGlzLT5yZXBsYWNlQ2hhcigkY2gwLCAweGY3MDApOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRvdXRwdXRbXSA9ICRjaDA7CgkJCQkJCQkJfQoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkvLyBub24tdGhhaSBjaGFyYWN0ZXIKCQkJCQkJCQkkb3V0cHV0W10gPSAkdW5pY29kZVskaV07CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJHVuaWNvZGUgPSAkb3V0cHV0OwoJCQkJCQkvLyB1cGRhdGUgZm9udCBzdWJzZXRjaGFycwoJCQkJCQkkdGhpcy0+c2V0Rm9udFN1YkJ1ZmZlcigkdGhpcy0+Q3VycmVudEZvbnRbJ2ZvbnRrZXknXSwgJ3N1YnNldGNoYXJzJywgJHRoaXMtPkN1cnJlbnRGb250WydzdWJzZXRjaGFycyddKTsKCQkJCQl9IC8vIGVuZCBvZiBLX1RIQUlfVE9QQ0hBUlMKCQkJCQkkdHh0MiA9IFRDUERGX0ZPTlRTOjphcnJVVEY4VG9VVEYxNkJFKCR1bmljb2RlLCBmYWxzZSk7CgkJCQl9CgkJCX0KCQkJJHR4dDIgPSBUQ1BERl9TVEFUSUM6Ol9lc2NhcGUoJHR4dDIpOwoJCQkvLyBnZXQgY3VycmVudCB0ZXh0IHdpZHRoIChjb25zaWRlcmluZyBnZW5lcmFsIGZvbnQgc3RyZXRjaGluZyBhbmQgc3BhY2luZykKCQkJJHR4d2lkdGggPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHR4dCk7CgkJCSR3aWR0aCA9ICR0eHdpZHRoOwoJCQkvLyBjaGVjayBmb3Igc3RyZXRjaCBtb2RlCgkJCWlmICgkc3RyZXRjaCA+IDApIHsKCQkJCS8vIGNhbGN1bGF0ZSByYXRpbyBiZXR3ZWVuIGNlbGwgd2lkdGggYW5kIHRleHQgd2lkdGgKCQkJCWlmICgkd2lkdGggPD0gMCkgewoJCQkJCSRyYXRpbyA9IDE7CgkJCQl9IGVsc2UgewoJCQkJCSRyYXRpbyA9ICgoJHcgLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ10gLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ10pIC8gJHdpZHRoKTsKCQkJCX0KCQkJCS8vIGNoZWNrIGlmIHN0cmV0Y2hpbmcgaXMgcmVxdWlyZWQKCQkJCWlmICgoJHJhdGlvIDwgMSkgT1IgKCgkcmF0aW8gPiAxKSBBTkQgKCgkc3RyZXRjaCAlIDIpID09IDApKSkgewoJCQkJCS8vIHRoZSB0ZXh0IHdpbGwgYmUgc3RyZXRjaGVkIHRvIGZpdCBjZWxsIHdpZHRoCgkJCQkJaWYgKCRzdHJldGNoID4gMikgewoJCQkJCQkvLyBzZXQgbmV3IGNoYXJhY3RlciBzcGFjaW5nCgkJCQkJCSR0aGlzLT5mb250X3NwYWNpbmcgKz0gKCR3IC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddIC0gJHdpZHRoKSAvIChtYXgoKCR0aGlzLT5HZXROdW1DaGFycygkdHh0KSAtIDEpLCAxKSAqICgkdGhpcy0+Zm9udF9zdHJldGNoaW5nIC8gMTAwKSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gc2V0IG5ldyBob3Jpem9udGFsIHN0cmV0Y2hpbmcKCQkJCQkJJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAqPSAkcmF0aW87CgkJCQkJfQoJCQkJCS8vIHJlY2FsY3VsYXRlIHRleHQgd2lkdGggKHRoZSB0ZXh0IGZpbGxzIHRoZSBlbnRpcmUgY2VsbCkKCQkJCQkkd2lkdGggPSAkdyAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJCQkvLyByZXNldCBhbGlnbm1lbnQKCQkJCQkkYWxpZ24gPSAnJzsKCQkJCX0KCQkJfQoJCQlpZiAoJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAhPSAxMDApIHsKCQkJCS8vIGFwcGx5IGZvbnQgc3RyZXRjaGluZwoJCQkJJHJzIC49IHNwcmludGYoJ0JUICVGIFR6IEVUICcsICR0aGlzLT5mb250X3N0cmV0Y2hpbmcpOwoJCQl9CgkJCWlmICgkdGhpcy0+Zm9udF9zcGFjaW5nICE9IDApIHsKCQkJCS8vIGluY3JlYXNlL2RlY3JlYXNlIGZvbnQgc3BhY2luZwoJCQkJJHJzIC49IHNwcmludGYoJ0JUICVGIFRjIEVUICcsICgkdGhpcy0+Zm9udF9zcGFjaW5nICogJHRoaXMtPmspKTsKCQkJfQoJCQlpZiAoJHRoaXMtPkNvbG9yRmxhZyBBTkQgKCR0aGlzLT50ZXh0cmVuZGVybW9kZSA8IDQpKSB7CgkJCQkkcyAuPSAncSAnLiR0aGlzLT5UZXh0Q29sb3IuJyAnOwoJCQl9CgkJCS8vIHJlbmRlcmluZyBtb2RlCgkJCSRzIC49IHNwcmludGYoJ0JUICVkIFRyICVGIHcgRVQgJywgJHRoaXMtPnRleHRyZW5kZXJtb2RlLCAoJHRoaXMtPnRleHRzdHJva2V3aWR0aCAqICR0aGlzLT5rKSk7CgkJCS8vIGNvdW50IG51bWJlciBvZiBzcGFjZXMKCQkJJG5zID0gc3Vic3RyX2NvdW50KCR0eHQsIGNocigzMikpOwoJCQkvLyBKdXN0aWZpY2F0aW9uCgkJCSRzcGFjZXdpZHRoID0gMDsKCQkJaWYgKCgkYWxpZ24gPT0gJ0onKSBBTkQgKCRucyA+IDApKSB7CgkJCQlpZiAoJHRoaXMtPmlzVW5pY29kZUZvbnQoKSkgewoJCQkJCS8vIGdldCBzdHJpbmcgd2lkdGggd2l0aG91dCBzcGFjZXMKCQkJCQkkd2lkdGggPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoc3RyX3JlcGxhY2UoJyAnLCAnJywgJHR4dCkpOwoJCQkJCS8vIGNhbGN1bGF0ZSBhdmVyYWdlIHNwYWNlIHdpZHRoCgkJCQkJJHNwYWNld2lkdGggPSAtMTAwMCAqICgkdyAtICR3aWR0aCAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSkgLyAoJG5zPyRuczoxKSAvICgkdGhpcy0+Rm9udFNpemU/JHRoaXMtPkZvbnRTaXplOjEpOwoJCQkJCWlmICgkdGhpcy0+Zm9udF9zdHJldGNoaW5nICE9IDEwMCkgewoJCQkJCQkvLyB3b3JkIHNwYWNpbmcgaXMgYWZmZWN0ZWQgYnkgc3RyZXRjaGluZwoJCQkJCQkkc3BhY2V3aWR0aCAvPSAoJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAvIDEwMCk7CgkJCQkJfQoJCQkJCS8vIHNldCB3b3JkIHBvc2l0aW9uIHRvIGJlIHVzZWQgd2l0aCBUSiBvcGVyYXRvcgoJCQkJCSR0eHQyID0gc3RyX3JlcGxhY2UoY2hyKDApLmNocigzMiksICcpICcuc3ByaW50ZignJUYnLCAkc3BhY2V3aWR0aCkuJyAoJywgJHR4dDIpOwoJCQkJCSR1bmljb2RlX2p1c3RpZmljYXRpb24gPSB0cnVlOwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBnZXQgc3RyaW5nIHdpZHRoCgkJCQkJJHdpZHRoID0gJHR4d2lkdGg7CgkJCQkJLy8gbmV3IHNwYWNlIHdpZHRoCgkJCQkJJHNwYWNld2lkdGggPSAoKCR3IC0gJHdpZHRoIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddKSAvICgkbnM/JG5zOjEpKSAqICR0aGlzLT5rOwoJCQkJCWlmICgkdGhpcy0+Zm9udF9zdHJldGNoaW5nICE9IDEwMCkgewoJCQkJCQkvLyB3b3JkIHNwYWNpbmcgKFR3KSBpcyBhZmZlY3RlZCBieSBzdHJldGNoaW5nCgkJCQkJCSRzcGFjZXdpZHRoIC89ICgkdGhpcy0+Zm9udF9zdHJldGNoaW5nIC8gMTAwKTsKCQkJCQl9CgkJCQkJLy8gc2V0IHdvcmQgc3BhY2luZwoJCQkJCSRycyAuPSBzcHJpbnRmKCdCVCAlRiBUdyBFVCAnLCAkc3BhY2V3aWR0aCk7CgkJCQl9CgkJCQkkd2lkdGggPSAkdyAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJfQoJCQkvLyByZXBsYWNlIGNhcnJpYWdlIHJldHVybiBjaGFyYWN0ZXJzCgkJCSR0eHQyID0gc3RyX3JlcGxhY2UoIlxyIiwgJyAnLCAkdHh0Mik7CgkJCXN3aXRjaCAoJGFsaWduKSB7CgkJCQljYXNlICdDJzogewoJCQkJCSRkeCA9ICgkdyAtICR3aWR0aCkgLyAyOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnUic6IHsKCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkkZHggPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ107CgkJCQkJfSBlbHNlIHsKCQkJCQkJJGR4ID0gJHcgLSAkd2lkdGggLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ107CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnTCc6IHsKCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkkZHggPSAkdyAtICR3aWR0aCAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkZHggPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ107CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnSic6CgkJCQlkZWZhdWx0OiB7CgkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJJGR4ID0gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRkeCA9ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR4ZHggPSAkeCAtICRkeCAtICR3aWR0aDsKCQkJfSBlbHNlIHsKCQkJCSR4ZHggPSAkeCArICRkeDsKCQkJfQoJCQkkeGRrID0gJHhkeCAqICRrOwoJCQkvLyBwcmludCB0ZXh0CgkJCSRzIC49IHNwcmludGYoJ0JUICVGICVGIFRkIFsoJXMpXSBUSiBFVCcsICR4ZGssICgoJHRoaXMtPmggLSAkYmFzZWZvbnR5KSAqICRrKSwgJHR4dDIpOwoJCQlpZiAoaXNzZXQoJHVuaWJsb2NrKSkgewoJCQkJLy8gcHJpbnQgb3ZlcmxhcHBpbmcgY2hhcmFjdGVycyBhcyBzZXBhcmF0ZSBzdHJpbmcKCQkJCSR4c2hpZnQgPSAwOyAvLyBob3Jpem9udGFsIHNoaWZ0CgkJCQkkdHkgPSAoKCR0aGlzLT5oIC0gJGJhc2Vmb250eSArICgwLjIgKiAkdGhpcy0+Rm9udFNpemUpKSAqICRrKTsKCQkJCSRzcHcgPSAoKCR3IC0gJHR4d2lkdGggLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ10gLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ10pIC8gKCRucz8kbnM6MSkpOwoJCQkJZm9yZWFjaCAoJHVuaWJsb2NrIGFzICR1ayA9PiAkdW5pYXJyKSB7CgkJCQkJaWYgKCgkdWsgJSAyKSA9PSAwKSB7CgkJCQkJCS8vIHggc3BhY2UgdG8gc2tpcAoJCQkJCQlpZiAoJHNwYWNld2lkdGggIT0gMCkgewoJCQkJCQkJLy8ganVzdGlmaWNhdGlvbiBzaGlmdAoJCQkJCQkJJHhzaGlmdCArPSAoY291bnQoYXJyYXlfa2V5cygkdW5pYXJyLCAzMikpICogJHNwdyk7CgkJCQkJCX0KCQkJCQkJJHhzaGlmdCArPSAkdGhpcy0+R2V0QXJyU3RyaW5nV2lkdGgoJHVuaWFycik7IC8vICsgc2hpZnQganVzdGlmaWNhdGlvbgoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIGNoYXJhY3RlciB0byBwcmludAoJCQkJCQkkdG9wY2hyID0gVENQREZfRk9OVFM6OmFyclVURjhUb1VURjE2QkUoJHVuaWFyciwgZmFsc2UpOwoJCQkJCQkkdG9wY2hyID0gVENQREZfU1RBVElDOjpfZXNjYXBlKCR0b3BjaHIpOwoJCQkJCQkkcyAuPSBzcHJpbnRmKCcgQlQgJUYgJUYgVGQgWyglcyldIFRKIEVUJywgKCR4ZGsgKyAoJHhzaGlmdCAqICRrKSksICR0eSwgJHRvcGNocik7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICgkdGhpcy0+dW5kZXJsaW5lKSB7CgkJCQkkcyAuPSAnICcuJHRoaXMtPl9kb3VuZGVybGluZXcoJHhkeCwgJGJhc2Vmb250eSwgJHdpZHRoKTsKCQkJfQoJCQlpZiAoJHRoaXMtPmxpbmV0aHJvdWdoKSB7CgkJCQkkcyAuPSAnICcuJHRoaXMtPl9kb2xpbmV0aHJvdWdodygkeGR4LCAkYmFzZWZvbnR5LCAkd2lkdGgpOwoJCQl9CgkJCWlmICgkdGhpcy0+b3ZlcmxpbmUpIHsKCQkJCSRzIC49ICcgJy4kdGhpcy0+X2Rvb3ZlcmxpbmV3KCR4ZHgsICRiYXNlZm9udHksICR3aWR0aCk7CgkJCX0KCQkJaWYgKCR0aGlzLT5Db2xvckZsYWcgQU5EICgkdGhpcy0+dGV4dHJlbmRlcm1vZGUgPCA0KSkgewoJCQkJJHMgLj0gJyBRJzsKCQkJfQoJCQlpZiAoJGxpbmspIHsKCQkJCSR0aGlzLT5MaW5rKCR4ZHgsICR5dCwgJHdpZHRoLCAoJHRoaXMtPkZvbnRBc2NlbnQgKyAkdGhpcy0+Rm9udERlc2NlbnQpLCAkbGluaywgJG5zKTsKCQkJfQoJCX0KCQkvLyBvdXRwdXQgY2VsbAoJCWlmICgkcykgewoJCQkvLyBvdXRwdXQgY2VsbAoJCQkkcnMgLj0gJHM7CgkJCWlmICgkdGhpcy0+Zm9udF9zcGFjaW5nICE9IDApIHsKCQkJCS8vIHJlc2V0IGZvbnQgc3BhY2luZyBtb2RlCgkJCQkkcnMgLj0gJyBCVCAwIFRjIEVUJzsKCQkJfQoJCQlpZiAoJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAhPSAxMDApIHsKCQkJCS8vIHJlc2V0IGZvbnQgc3RyZXRjaGluZyBtb2RlCgkJCQkkcnMgLj0gJyBCVCAxMDAgVHogRVQnOwoJCQl9CgkJfQoJCS8vIHJlc2V0IHdvcmQgc3BhY2luZwoJCWlmICghJHRoaXMtPmlzVW5pY29kZUZvbnQoKSBBTkQgKCRhbGlnbiA9PSAnSicpKSB7CgkJCSRycyAuPSAnIEJUIDAgVHcgRVQnOwoJCX0KCQkvLyByZXNldCBzdHJldGNoaW5nIGFuZCBzcGFjaW5nCgkJJHRoaXMtPmZvbnRfc3RyZXRjaGluZyA9ICRwcmV2X2ZvbnRfc3RyZXRjaGluZzsKCQkkdGhpcy0+Zm9udF9zcGFjaW5nID0gJHByZXZfZm9udF9zcGFjaW5nOwoJCSR0aGlzLT5sYXN0aCA9ICRoOwoJCWlmICgkbG4gPiAwKSB7CgkJCS8vR28gdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBsaW5lCgkJCSR0aGlzLT55ID0gJHkgKyAkaCArICR0aGlzLT5jZWxsX21hcmdpblsnQiddOwoJCQlpZiAoJGxuID09IDEpIHsKCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJJHRoaXMtPnggPSAkdGhpcy0+dyAtICR0aGlzLT5yTWFyZ2luOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luOwoJCQkJfQoJCQl9CgkJfSBlbHNlIHsKCQkJLy8gZ28gbGVmdCBvciByaWdodCBieSBjYXNlCgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+eCA9ICR4IC0gJHcgLSAkdGhpcy0+Y2VsbF9tYXJnaW5bJ0wnXTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT54ID0gJHggKyAkdyArICR0aGlzLT5jZWxsX21hcmdpblsnUiddOwoJCQl9CgkJfQoJCSRnc3R5bGVzID0gJycuJHRoaXMtPmxpbmVzdHlsZVdpZHRoLicgJy4kdGhpcy0+bGluZXN0eWxlQ2FwLicgJy4kdGhpcy0+bGluZXN0eWxlSm9pbi4nICcuJHRoaXMtPmxpbmVzdHlsZURhc2guJyAnLiR0aGlzLT5EcmF3Q29sb3IuJyAnLiR0aGlzLT5GaWxsQ29sb3IuIlxuIjsKCQkkcnMgPSAkZ3N0eWxlcy4kcnM7CgkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICRwcmV2X2NlbGxfcGFkZGluZzsKCQkkdGhpcy0+Y2VsbF9tYXJnaW4gPSAkcHJldl9jZWxsX21hcmdpbjsKCQlyZXR1cm4gJHJzOwoJfQoKCS8qKgoJICogUmVwbGFjZSBhIGNoYXIgaWYgaXMgZGVmaW5lZCBvbiB0aGUgY3VycmVudCBmb250LgoJICogQHBhcmFtICRvbGRjaGFyIChpbnQpIEludGVnZXIgY29kZSAodW5pY29kZSkgb2YgdGhlIGNoYXJhY3RlciB0byByZXBsYWNlLgoJICogQHBhcmFtICRuZXdjaGFyIChpbnQpIEludGVnZXIgY29kZSAodW5pY29kZSkgb2YgdGhlIG5ldyBjaGFyYWN0ZXIuCgkgKiBAcmV0dXJuIGludCB0aGUgcmVwbGFjZWQgY2hhciBvciB0aGUgb2xkIGNoYXIgaW4gY2FzZSB0aGUgbmV3IGNoYXIgaSBub3QgZGVmaW5lZAoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4xNjcgKDIwMTItMDYtMjIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiByZXBsYWNlQ2hhcigkb2xkY2hhciwgJG5ld2NoYXIpIHsKCQlpZiAoJHRoaXMtPmlzQ2hhckRlZmluZWQoJG5ld2NoYXIpKSB7CgkJCS8vIGFkZCB0aGUgbmV3IGNoYXIgb24gdGhlIHN1YnNldCBsaXN0CgkJCSR0aGlzLT5DdXJyZW50Rm9udFsnc3Vic2V0Y2hhcnMnXVskbmV3Y2hhcl0gPSB0cnVlOwoJCQkvLyByZXR1cm4gdGhlIG5ldyBjaGFyYWN0ZXIKCQkJcmV0dXJuICRuZXdjaGFyOwoJCX0KCQkvLyByZXR1cm4gdGhlIG9sZCBjaGFyCgkJcmV0dXJuICRvbGRjaGFyOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgY29kZSB0byBkcmF3IHRoZSBjZWxsIGJvcmRlcgoJICogQHBhcmFtICR4IChmbG9hdCkgWCBjb29yZGluYXRlLgoJICogQHBhcmFtICR5IChmbG9hdCkgWSBjb29yZGluYXRlLgoJICogQHBhcmFtICR3IChmbG9hdCkgQ2VsbCB3aWR0aC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIENlbGwgaGVpZ2h0LgoJICogQHBhcmFtICRicmQgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcmV0dXJuIHN0cmluZyBjb250YWluaW5nIGNlbGwgYm9yZGVyIGNvZGUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzZWUgU2V0TGluZVN0eWxlKCkKCSAqIEBzaW5jZSA1LjcuMDAwICgyMDEwLTA4LTAyKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q2VsbEJvcmRlcigkeCwgJHksICR3LCAkaCwgJGJyZCkgewoJCSRzID0gJyc7IC8vIHN0cmluZyB0byBiZSByZXR1cm5lZAoJCWlmIChlbXB0eSgkYnJkKSkgewoJCQlyZXR1cm4gJHM7CgkJfQoJCWlmICgkYnJkID09IDEpIHsKCQkJJGJyZCA9IGFycmF5KCdMUlRCJyA9PiB0cnVlKTsKCQl9CgkJLy8gY2FsY3VsYXRlIGNvb3JkaW5hdGVzIGZvciBib3JkZXIKCQkkayA9ICR0aGlzLT5rOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR4ZUwgPSAoJHggLSAkdykgKiAkazsKCQkJJHhlUiA9ICR4ICogJGs7CgkJfSBlbHNlIHsKCQkJJHhlTCA9ICR4ICogJGs7CgkJCSR4ZVIgPSAoJHggKyAkdykgKiAkazsKCQl9CgkJJHllTCA9ICgoJHRoaXMtPmggLSAoJHkgKyAkaCkpICogJGspOwoJCSR5ZVQgPSAoKCR0aGlzLT5oIC0gJHkpICogJGspOwoJCSR4ZVQgPSAkeGVMOwoJCSR4ZUIgPSAkeGVSOwoJCSR5ZVIgPSAkeWVUOwoJCSR5ZUIgPSAkeWVMOwoJCWlmIChpc19zdHJpbmcoJGJyZCkpIHsKCQkJLy8gY29udmVydCBzdHJpbmcgdG8gYXJyYXkKCQkJJHNsZW4gPSBzdHJsZW4oJGJyZCk7CgkJCSRuZXdicmQgPSBhcnJheSgpOwoJCQlmb3IgKCRpID0gMDsgJGkgPCAkc2xlbjsgKyskaSkgewoJCQkJJG5ld2JyZFskYnJkWyRpXV0gPSBhcnJheSgnY2FwJyA9PiAnc3F1YXJlJywgJ2pvaW4nID0+ICdtaXRlcicpOwoJCQl9CgkJCSRicmQgPSAkbmV3YnJkOwoJCX0KCQlpZiAoaXNzZXQoJGJyZFsnbW9kZSddKSkgewoJCQkkbW9kZSA9ICRicmRbJ21vZGUnXTsKCQkJdW5zZXQoJGJyZFsnbW9kZSddKTsKCQl9IGVsc2UgewoJCQkkbW9kZSA9ICdub3JtYWwnOwoJCX0KCQlmb3JlYWNoICgkYnJkIGFzICRib3JkZXIgPT4gJHN0eWxlKSB7CgkJCWlmIChpc19hcnJheSgkc3R5bGUpIEFORCAhZW1wdHkoJHN0eWxlKSkgewoJCQkJLy8gYXBwbHkgYm9yZGVyIHN0eWxlCgkJCQkkcHJldl9zdHlsZSA9ICR0aGlzLT5saW5lc3R5bGVXaWR0aC4nICcuJHRoaXMtPmxpbmVzdHlsZUNhcC4nICcuJHRoaXMtPmxpbmVzdHlsZUpvaW4uJyAnLiR0aGlzLT5saW5lc3R5bGVEYXNoLicgJy4kdGhpcy0+RHJhd0NvbG9yLicgJzsKCQkJCSRzIC49ICR0aGlzLT5TZXRMaW5lU3R5bGUoJHN0eWxlLCB0cnVlKS4iXG4iOwoJCQl9CgkJCXN3aXRjaCAoJG1vZGUpIHsKCQkJCWNhc2UgJ2V4dCc6IHsKCQkJCQkkb2ZmID0gKCgkdGhpcy0+TGluZVdpZHRoIC8gMikgKiAkayk7CgkJCQkJJHhMID0gJHhlTCAtICRvZmY7CgkJCQkJJHhSID0gJHhlUiArICRvZmY7CgkJCQkJJHlUID0gJHllVCArICRvZmY7CgkJCQkJJHlMID0gJHllTCAtICRvZmY7CgkJCQkJJHhUID0gJHhMOwoJCQkJCSR4QiA9ICR4UjsKCQkJCQkkeVIgPSAkeVQ7CgkJCQkJJHlCID0gJHlMOwoJCQkJCSR3ICs9ICR0aGlzLT5MaW5lV2lkdGg7CgkJCQkJJGggKz0gJHRoaXMtPkxpbmVXaWR0aDsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ2ludCc6IHsKCQkJCQkkb2ZmID0gKCR0aGlzLT5MaW5lV2lkdGggLyAyKSAqICRrOwoJCQkJCSR4TCA9ICR4ZUwgKyAkb2ZmOwoJCQkJCSR4UiA9ICR4ZVIgLSAkb2ZmOwoJCQkJCSR5VCA9ICR5ZVQgLSAkb2ZmOwoJCQkJCSR5TCA9ICR5ZUwgKyAkb2ZmOwoJCQkJCSR4VCA9ICR4TDsKCQkJCQkkeEIgPSAkeFI7CgkJCQkJJHlSID0gJHlUOwoJCQkJCSR5QiA9ICR5TDsKCQkJCQkkdyAtPSAkdGhpcy0+TGluZVdpZHRoOwoJCQkJCSRoIC09ICR0aGlzLT5MaW5lV2lkdGg7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdub3JtYWwnOgoJCQkJZGVmYXVsdDogewoJCQkJCSR4TCA9ICR4ZUw7CgkJCQkJJHhUID0gJHhlVDsKCQkJCQkkeEIgPSAkeGVCOwoJCQkJCSR4UiA9ICR4ZVI7CgkJCQkJJHlMID0gJHllTDsKCQkJCQkkeVQgPSAkeWVUOwoJCQkJCSR5QiA9ICR5ZUI7CgkJCQkJJHlSID0gJHllUjsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkvLyBkcmF3IGJvcmRlcnMgYnkgY2FzZQoJCQlpZiAoc3RybGVuKCRib3JkZXIpID09IDQpIHsKCQkJCSRzIC49IHNwcmludGYoJyVGICVGICVGICVGIHJlIFMgJywgJHhULCAkeVQsICgkdyAqICRrKSwgKC0kaCAqICRrKSk7CgkJCX0gZWxzZWlmIChzdHJsZW4oJGJvcmRlcikgPT0gMykgewoJCQkJaWYgKHN0cnBvcygkYm9yZGVyLCdCJykgPT09IGZhbHNlKSB7IC8vIExUUgoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIG0gJywgJHhMLCAkeUwpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhULCAkeVQpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhSLCAkeVIpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhCLCAkeUIpOwoJCQkJCSRzIC49ICdTICc7CgkJCQl9IGVsc2VpZiAoc3RycG9zKCRib3JkZXIsJ0wnKSA9PT0gZmFsc2UpIHsgLy8gVFJCCgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeFQsICR5VCk7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeFIsICR5Uik7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeEIsICR5Qik7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeEwsICR5TCk7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0gZWxzZWlmIChzdHJwb3MoJGJvcmRlciwnVCcpID09PSBmYWxzZSkgeyAvLyBSQkwKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4UiwgJHlSKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4QiwgJHlCKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4TCwgJHlMKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4VCwgJHlUKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJfSBlbHNlaWYgKHN0cnBvcygkYm9yZGVyLCdSJykgPT09IGZhbHNlKSB7IC8vIEJMVAoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIG0gJywgJHhCLCAkeUIpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhMLCAkeUwpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhULCAkeVQpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhSLCAkeVIpOwoJCQkJCSRzIC49ICdTICc7CgkJCQl9CgkJCX0gZWxzZWlmIChzdHJsZW4oJGJvcmRlcikgPT0gMikgewoJCQkJaWYgKChzdHJwb3MoJGJvcmRlciwnTCcpICE9PSBmYWxzZSkgQU5EIChzdHJwb3MoJGJvcmRlciwnVCcpICE9PSBmYWxzZSkpIHsgLy8gTFQKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4TCwgJHlMKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4VCwgJHlUKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4UiwgJHlSKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJfSBlbHNlaWYgKChzdHJwb3MoJGJvcmRlciwnVCcpICE9PSBmYWxzZSkgQU5EIChzdHJwb3MoJGJvcmRlciwnUicpICE9PSBmYWxzZSkpIHsgLy8gVFIKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4VCwgJHlUKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4UiwgJHlSKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4QiwgJHlCKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJfSBlbHNlaWYgKChzdHJwb3MoJGJvcmRlciwnUicpICE9PSBmYWxzZSkgQU5EIChzdHJwb3MoJGJvcmRlciwnQicpICE9PSBmYWxzZSkpIHsgLy8gUkIKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4UiwgJHlSKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4QiwgJHlCKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4TCwgJHlMKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJfSBlbHNlaWYgKChzdHJwb3MoJGJvcmRlciwnQicpICE9PSBmYWxzZSkgQU5EIChzdHJwb3MoJGJvcmRlciwnTCcpICE9PSBmYWxzZSkpIHsgLy8gQkwKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4QiwgJHlCKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4TCwgJHlMKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4VCwgJHlUKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJfSBlbHNlaWYgKChzdHJwb3MoJGJvcmRlciwnTCcpICE9PSBmYWxzZSkgQU5EIChzdHJwb3MoJGJvcmRlciwnUicpICE9PSBmYWxzZSkpIHsgLy8gTFIKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBtICcsICR4TCwgJHlMKTsKCQkJCQkkcyAuPSBzcHJpbnRmKCclRiAlRiBsICcsICR4VCwgJHlUKTsKCQkJCQkkcyAuPSAnUyAnOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIG0gJywgJHhSLCAkeVIpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhCLCAkeUIpOwoJCQkJCSRzIC49ICdTICc7CgkJCQl9IGVsc2VpZiAoKHN0cnBvcygkYm9yZGVyLCdUJykgIT09IGZhbHNlKSBBTkQgKHN0cnBvcygkYm9yZGVyLCdCJykgIT09IGZhbHNlKSkgeyAvLyBUQgoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIG0gJywgJHhULCAkeVQpOwoJCQkJCSRzIC49IHNwcmludGYoJyVGICVGIGwgJywgJHhSLCAkeVIpOwoJCQkJCSRzIC49ICdTICc7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeEIsICR5Qik7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeEwsICR5TCk7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0KCQkJfSBlbHNlIHsgLy8gc3RybGVuKCRib3JkZXIpID09IDEKCQkJCWlmIChzdHJwb3MoJGJvcmRlciwnTCcpICE9PSBmYWxzZSkgeyAvLyBMCgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeEwsICR5TCk7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeFQsICR5VCk7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0gZWxzZWlmIChzdHJwb3MoJGJvcmRlciwnVCcpICE9PSBmYWxzZSkgeyAvLyBUCgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeFQsICR5VCk7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeFIsICR5Uik7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0gZWxzZWlmIChzdHJwb3MoJGJvcmRlciwnUicpICE9PSBmYWxzZSkgeyAvLyBSCgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeFIsICR5Uik7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeEIsICR5Qik7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0gZWxzZWlmIChzdHJwb3MoJGJvcmRlciwnQicpICE9PSBmYWxzZSkgeyAvLyBCCgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbSAnLCAkeEIsICR5Qik7CgkJCQkJJHMgLj0gc3ByaW50ZignJUYgJUYgbCAnLCAkeEwsICR5TCk7CgkJCQkJJHMgLj0gJ1MgJzsKCQkJCX0KCQkJfQoJCQlpZiAoaXNfYXJyYXkoJHN0eWxlKSBBTkQgIWVtcHR5KCRzdHlsZSkpIHsKCQkJCS8vIHJlc2V0IGJvcmRlciBzdHlsZSB0byBwcmV2aW91cyB2YWx1ZQoJCQkJJHMgLj0gIlxuIi4kdGhpcy0+bGluZXN0eWxlV2lkdGguJyAnLiR0aGlzLT5saW5lc3R5bGVDYXAuJyAnLiR0aGlzLT5saW5lc3R5bGVKb2luLicgJy4kdGhpcy0+bGluZXN0eWxlRGFzaC4nICcuJHRoaXMtPkRyYXdDb2xvci4iXG4iOwoJCQl9CgkJfQoJCXJldHVybiAkczsKCX0KCgkvKioKCSAqIFRoaXMgbWV0aG9kIGFsbG93cyBwcmludGluZyB0ZXh0IHdpdGggbGluZSBicmVha3MuCgkgKiBUaGV5IGNhbiBiZSBhdXRvbWF0aWMgKGFzIHNvb24gYXMgdGhlIHRleHQgcmVhY2hlcyB0aGUgcmlnaHQgYm9yZGVyIG9mIHRoZSBjZWxsKSBvciBleHBsaWNpdCAodmlhIHRoZSBcbiBjaGFyYWN0ZXIpLiBBcyBtYW55IGNlbGxzIGFzIG5lY2Vzc2FyeSBhcmUgb3V0cHV0LCBvbmUgYmVsb3cgdGhlIG90aGVyLjxiciAvPgoJICogVGV4dCBjYW4gYmUgYWxpZ25lZCwgY2VudGVyZWQgb3IganVzdGlmaWVkLiBUaGUgY2VsbCBibG9jayBjYW4gYmUgZnJhbWVkIGFuZCB0aGUgYmFja2dyb3VuZCBwYWludGVkLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgY2VsbHMuIElmIDAsIHRoZXkgZXh0ZW5kIHVwIHRvIHRoZSByaWdodCBtYXJnaW4gb2YgdGhlIHBhZ2UuCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBDZWxsIG1pbmltdW0gaGVpZ2h0LiBUaGUgY2VsbCBleHRlbmRzIGF1dG9tYXRpY2FsbHkgaWYgbmVlZGVkLgoJICogQHBhcmFtICR0eHQgKHN0cmluZykgU3RyaW5nIHRvIHByaW50CgkgKiBAcGFyYW0gJGJvcmRlciAobWl4ZWQpIEluZGljYXRlcyBpZiBib3JkZXJzIG11c3QgYmUgZHJhd24gYXJvdW5kIHRoZSBjZWxsLiBUaGUgdmFsdWUgY2FuIGJlIGEgbnVtYmVyOjx1bD48bGk+MDogbm8gYm9yZGVyIChkZWZhdWx0KTwvbGk+PGxpPjE6IGZyYW1lPC9saT48L3VsPiBvciBhIHN0cmluZyBjb250YWluaW5nIHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoaW4gYW55IG9yZGVyKTo8dWw+PGxpPkw6IGxlZnQ8L2xpPjxsaT5UOiB0b3A8L2xpPjxsaT5SOiByaWdodDwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4gb3IgYW4gYXJyYXkgb2YgbGluZSBzdHlsZXMgZm9yIGVhY2ggYm9yZGVyIGdyb3VwIC0gZm9yIGV4YW1wbGU6IGFycmF5KCdMVFJCJyA9PiBhcnJheSgnd2lkdGgnID0+IDIsICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDAsIDAsIDApKSkKCSAqIEBwYXJhbSAkYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgdGV4dC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgb3IgZW1wdHkgc3RyaW5nOiBsZWZ0IGFsaWduPC9saT48bGk+QzogY2VudGVyPC9saT48bGk+UjogcmlnaHQgYWxpZ248L2xpPjxsaT5KOiBqdXN0aWZpY2F0aW9uIChkZWZhdWx0IHZhbHVlIHdoZW4gJGlzaHRtbD1mYWxzZSk8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGZpbGwgKGJvb2xlYW4pIEluZGljYXRlcyBpZiB0aGUgY2VsbCBiYWNrZ3JvdW5kIG11c3QgYmUgcGFpbnRlZCAodHJ1ZSkgb3IgdHJhbnNwYXJlbnQgKGZhbHNlKS4KCSAqIEBwYXJhbSAkbG4gKGludCkgSW5kaWNhdGVzIHdoZXJlIHRoZSBjdXJyZW50IHBvc2l0aW9uIHNob3VsZCBnbyBhZnRlciB0aGUgY2FsbC4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPjA6IHRvIHRoZSByaWdodDwvbGk+PGxpPjE6IHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZSBbREVGQVVMVF08L2xpPjxsaT4yOiBiZWxvdzwvbGk+PC91bD4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIHggcG9zaXRpb24gaW4gdXNlciB1bml0cwoJICogQHBhcmFtICR5IChmbG9hdCkgeSBwb3NpdGlvbiBpbiB1c2VyIHVuaXRzCgkgKiBAcGFyYW0gJHJlc2V0aCAoYm9vbGVhbikgaWYgdHJ1ZSByZXNldCB0aGUgbGFzdCBjZWxsIGhlaWdodCAoZGVmYXVsdCB0cnVlKS4KCSAqIEBwYXJhbSAkc3RyZXRjaCAoaW50KSBmb250IHN0cmV0Y2ggbW9kZTogPHVsPjxsaT4wID0gZGlzYWJsZWQ8L2xpPjxsaT4xID0gaG9yaXpvbnRhbCBzY2FsaW5nIG9ubHkgaWYgdGV4dCBpcyBsYXJnZXIgdGhhbiBjZWxsIHdpZHRoPC9saT48bGk+MiA9IGZvcmNlZCBob3Jpem9udGFsIHNjYWxpbmcgdG8gZml0IGNlbGwgd2lkdGg8L2xpPjxsaT4zID0gY2hhcmFjdGVyIHNwYWNpbmcgb25seSBpZiB0ZXh0IGlzIGxhcmdlciB0aGFuIGNlbGwgd2lkdGg8L2xpPjxsaT40ID0gZm9yY2VkIGNoYXJhY3RlciBzcGFjaW5nIHRvIGZpdCBjZWxsIHdpZHRoPC9saT48L3VsPiBHZW5lcmFsIGZvbnQgc3RyZXRjaGluZyBhbmQgc2NhbGluZyB2YWx1ZXMgd2lsbCBiZSBwcmVzZXJ2ZWQgd2hlbiBwb3NzaWJsZS4KCSAqIEBwYXJhbSAkaXNodG1sIChib29sZWFuKSBJTlRFUk5BTCBVU0UgT05MWSAtLSBzZXQgdG8gdHJ1ZSBpZiAkdHh0IGlzIEhUTUwgY29udGVudCAoZGVmYXVsdCA9IGZhbHNlKS4gTmV2ZXIgc2V0IHRoaXMgcGFyYW1ldGVyIHRvIHRydWUsIHVzZSBpbnN0ZWFkIHdyaXRlSFRNTENlbGwoKSBvciB3cml0ZUhUTUwoKSBtZXRob2RzLgoJICogQHBhcmFtICRhdXRvcGFkZGluZyAoYm9vbGVhbikgaWYgdHJ1ZSwgdXNlcyBpbnRlcm5hbCBwYWRkaW5nIGFuZCBhdXRvbWF0aWNhbGx5IGFkanVzdCBpdCB0byBhY2NvdW50IGZvciBsaW5lIHdpZHRoLgoJICogQHBhcmFtICRtYXhoIChmbG9hdCkgbWF4aW11bSBoZWlnaHQuIEl0IHNob3VsZCBiZSA+PSAkaCBhbmQgbGVzcyB0aGVuIHJlbWFpbmluZyBzcGFjZSB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLCBvciAwIGZvciBkaXNhYmxlIHRoaXMgZmVhdHVyZS4gVGhpcyBmZWF0dXJlIHdvcmtzIG9ubHkgd2hlbiAkaXNodG1sPWZhbHNlLgoJICogQHBhcmFtICR2YWxpZ24gKHN0cmluZykgVmVydGljYWwgYWxpZ25tZW50IG9mIHRleHQgKHJlcXVpcmVzICRtYXhoID0gJGggPiAwKS4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPlQ6IFRPUDwvbGk+PGxpPk06IG1pZGRsZTwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4uIFRoaXMgZmVhdHVyZSB3b3JrcyBvbmx5IHdoZW4gJGlzaHRtbD1mYWxzZSBhbmQgdGhlIGNlbGwgbXVzdCBmaXQgaW4gYSBzaW5nbGUgcGFnZS4KCSAqIEBwYXJhbSAkZml0Y2VsbCAoYm9vbGVhbikgaWYgdHJ1ZSBhdHRlbXB0IHRvIGZpdCBhbGwgdGhlIHRleHQgd2l0aGluIHRoZSBjZWxsIGJ5IHJlZHVjaW5nIHRoZSBmb250IHNpemUgKGRvIG5vdCB3b3JrIGluIEhUTUwgbW9kZSkuCgkgKiBAcmV0dXJuIGludCBSZXR1cm4gdGhlIG51bWJlciBvZiBjZWxscyBvciAxIGZvciBodG1sIG1vZGUuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4zCgkgKiBAc2VlIFNldEZvbnQoKSwgU2V0RHJhd0NvbG9yKCksIFNldEZpbGxDb2xvcigpLCBTZXRUZXh0Q29sb3IoKSwgU2V0TGluZVdpZHRoKCksIENlbGwoKSwgV3JpdGUoKSwgU2V0QXV0b1BhZ2VCcmVhaygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBNdWx0aUNlbGwoJHcsICRoLCAkdHh0LCAkYm9yZGVyPTAsICRhbGlnbj0nSicsICRmaWxsPWZhbHNlLCAkbG49MSwgJHg9JycsICR5PScnLCAkcmVzZXRoPXRydWUsICRzdHJldGNoPTAsICRpc2h0bWw9ZmFsc2UsICRhdXRvcGFkZGluZz10cnVlLCAkbWF4aD0wLCAkdmFsaWduPSdUJywgJGZpdGNlbGw9ZmFsc2UpIHsKCQkkcHJldl9jZWxsX21hcmdpbiA9ICR0aGlzLT5jZWxsX21hcmdpbjsKCQkkcHJldl9jZWxsX3BhZGRpbmcgPSAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCS8vIGFkanVzdCBpbnRlcm5hbCBwYWRkaW5nCgkJJHRoaXMtPmFkanVzdENlbGxQYWRkaW5nKCRib3JkZXIpOwoJCSRtY19wYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkkbWNfbWFyZ2luID0gJHRoaXMtPmNlbGxfbWFyZ2luOwoJCSR0aGlzLT5jZWxsX3BhZGRpbmdbJ1QnXSA9IDA7CgkJJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddID0gMDsKCQkkdGhpcy0+c2V0Q2VsbE1hcmdpbnMoMCwgMCwgMCwgMCk7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5sYXN0aCkgT1IgJHJlc2V0aCkgewoJCQkvLyByZXNldCByb3cgaGVpZ2h0CgkJCSR0aGlzLT5yZXNldExhc3RIKCk7CgkJfQoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHkpKSB7CgkJCSR0aGlzLT5TZXRZKCR5KTsKCQl9IGVsc2UgewoJCQkkeSA9ICR0aGlzLT5HZXRZKCk7CgkJfQoJCSRyZXN0aCA9IDA7CgkJaWYgKCgkaCA+IDApIEFORCAkdGhpcy0+aW5QYWdlQm9keSgpIEFORCAoKCR5ICsgJGggKyAkbWNfbWFyZ2luWydUJ10gKyAkbWNfbWFyZ2luWydCJ10pID4gJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIpKSB7CgkJCS8vIHNwaXQgY2VsbCBpbiBtb3JlIHBhZ2VzL2NvbHVtbnMKCQkJJG5ld2ggPSAoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgLSAkeSk7CgkJCSRyZXN0aCA9ICgkaCAtICRuZXdoKTsgLy8gY2VsbCB0byBiZSBwcmludGVkIG9uIHRoZSBuZXh0IHBhZ2UvY29sdW1uCgkJCSRoID0gJG5ld2g7CgkJfQoJCS8vIGdldCBjdXJyZW50IHBhZ2UgbnVtYmVyCgkJJHN0YXJ0cGFnZSA9ICR0aGlzLT5wYWdlOwoJCS8vIGdldCBjdXJyZW50IGNvbHVtbgoJCSRzdGFydGNvbHVtbiA9ICR0aGlzLT5jdXJyZW50X2NvbHVtbjsKCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR4KSkgewoJCQkkdGhpcy0+U2V0WCgkeCk7CgkJfSBlbHNlIHsKCQkJJHggPSAkdGhpcy0+R2V0WCgpOwoJCX0KCQkvLyBjaGVjayBwYWdlIGZvciBuby13cml0ZSByZWdpb25zIGFuZCBhZGFwdCBwYWdlIG1hcmdpbnMgaWYgbmVjZXNzYXJ5CgkJbGlzdCgkeCwgJHkpID0gJHRoaXMtPmNoZWNrUGFnZVJlZ2lvbnMoMCwgJHgsICR5KTsKCQkvLyBhcHBseSBtYXJnaW5zCgkJJG95ID0gJHkgKyAkbWNfbWFyZ2luWydUJ107CgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJJG94ID0gKCR0aGlzLT53IC0gJHggLSAkbWNfbWFyZ2luWydSJ10pOwoJCX0gZWxzZSB7CgkJCSRveCA9ICgkeCArICRtY19tYXJnaW5bJ0wnXSk7CgkJfQoJCSR0aGlzLT54ID0gJG94OwoJCSR0aGlzLT55ID0gJG95OwoJCS8vIHNldCB3aWR0aAoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdykgT1IgKCR3IDw9IDApKSB7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdyA9ICgkdGhpcy0+eCAtICR0aGlzLT5sTWFyZ2luIC0gJG1jX21hcmdpblsnTCddKTsKCQkJfSBlbHNlIHsKCQkJCSR3ID0gKCR0aGlzLT53IC0gJHRoaXMtPnggLSAkdGhpcy0+ck1hcmdpbiAtICRtY19tYXJnaW5bJ1InXSk7CgkJCX0KCQl9CgkJLy8gc3RvcmUgb3JpZ2luYWwgbWFyZ2luIHZhbHVlcwoJCSRsTWFyZ2luID0gJHRoaXMtPmxNYXJnaW47CgkJJHJNYXJnaW4gPSAkdGhpcy0+ck1hcmdpbjsKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkdGhpcy0+ck1hcmdpbiA9ICgkdGhpcy0+dyAtICR0aGlzLT54KTsKCQkJJHRoaXMtPmxNYXJnaW4gPSAoJHRoaXMtPnggLSAkdyk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmxNYXJnaW4gPSAoJHRoaXMtPngpOwoJCQkkdGhpcy0+ck1hcmdpbiA9ICgkdGhpcy0+dyAtICR0aGlzLT54IC0gJHcpOwoJCX0KCQkkdGhpcy0+Y2xNYXJnaW4gPSAkdGhpcy0+bE1hcmdpbjsKCQkkdGhpcy0+Y3JNYXJnaW4gPSAkdGhpcy0+ck1hcmdpbjsKCQlpZiAoJGF1dG9wYWRkaW5nKSB7CgkJCS8vIGFkZCB0b3AgcGFkZGluZwoJCQkkdGhpcy0+eSArPSAkbWNfcGFkZGluZ1snVCddOwoJCX0KCQlpZiAoJGlzaHRtbCkgeyAvLyAqKioqKioqIFdyaXRlIEhUTUwgdGV4dAoJCQkkdGhpcy0+d3JpdGVIVE1MKCR0eHQsIHRydWUsIGZhbHNlLCAkcmVzZXRoLCB0cnVlLCAkYWxpZ24pOwoJCQkkbmwgPSAxOwoJCX0gZWxzZSB7IC8vICoqKioqKiogV3JpdGUgc2ltcGxlIHRleHQKCQkJJHByZXZfRm9udFNpemVQdCA9ICR0aGlzLT5Gb250U2l6ZVB0OwoJCQkvLyB2ZXJ0aWNhbCBhbGlnbm1lbnQKCQkJaWYgKCRtYXhoID4gMCkgewoJCQkJLy8gZ2V0IHRleHQgaGVpZ2h0CgkJCQkkdGV4dF9oZWlnaHQgPSAkdGhpcy0+Z2V0U3RyaW5nSGVpZ2h0KCR3LCAkdHh0LCAkcmVzZXRoLCAkYXV0b3BhZGRpbmcsICRtY19wYWRkaW5nLCAkYm9yZGVyKTsKCQkJCWlmICgkZml0Y2VsbCkgewoJCQkJCS8vIHRyeSB0byByZWR1Y2UgZm9udCBzaXplIHRvIGZpdCB0ZXh0IG9uIGNlbGwgKHVzZSBhIHF1aWNrIHNlYXJjaCBhbGdvcml0aG0pCgkJCQkJJGZtaW4gPSAxOwoJCQkJCSRmbWF4ID0gJHRoaXMtPkZvbnRTaXplUHQ7CgkJCQkJJHByZXZfdGV4dF9oZWlnaHQgPSAkdGV4dF9oZWlnaHQ7CgkJCQkJJG1heGl0ID0gMTAwOyAvLyBtYXggbnVtYmVyIG9mIGl0ZXJhdGlvbnMKCQkJCQl3aGlsZSAoJG1heGl0ID4gMCkgewoJCQkJCQkkZm1pZCA9ICgoJGZtYXggKyAkZm1pbikgLyAyKTsKCQkJCQkJJHRoaXMtPlNldEZvbnRTaXplKCRmbWlkLCBmYWxzZSk7CgkJCQkJCSR0aGlzLT5yZXNldExhc3RIKCk7CgkJCQkJCSR0ZXh0X2hlaWdodCA9ICR0aGlzLT5nZXRTdHJpbmdIZWlnaHQoJHcsICR0eHQsICRyZXNldGgsICRhdXRvcGFkZGluZywgJG1jX3BhZGRpbmcsICRib3JkZXIpOwoJCQkJCQlpZiAoKCR0ZXh0X2hlaWdodCA9PSAkbWF4aCkgT1IgKCgkdGV4dF9oZWlnaHQgPCAkbWF4aCkgQU5EICgkZm1pbiA+PSAoJGZtYXggLSAwLjAxKSkpKSB7CgkJCQkJCQlicmVhazsKCQkJCQkJfSBlbHNlaWYgKCR0ZXh0X2hlaWdodCA8ICRtYXhoKSB7CgkJCQkJCQkkZm1pbiA9ICRmbWlkOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGZtYXggPSAkZm1pZDsKCQkJCQkJfQoJCQkJCQktLSRtYXhpdDsKCQkJCQl9CgkJCQkJJHRoaXMtPlNldEZvbnRTaXplKCR0aGlzLT5Gb250U2l6ZVB0KTsKCQkJCX0KCQkJCWlmICgkdGV4dF9oZWlnaHQgPCAkbWF4aCkgewoJCQkJCWlmICgkdmFsaWduID09ICdNJykgewoJCQkJCQkvLyB0ZXh0IHZlcnRpY2FsbHkgY2VudGVyZWQKCQkJCQkJJHRoaXMtPnkgKz0gKCgkbWF4aCAtICR0ZXh0X2hlaWdodCkgLyAyKTsKCQkJCQl9IGVsc2VpZiAoJHZhbGlnbiA9PSAnQicpIHsKCQkJCQkJLy8gdGV4dCB2ZXJ0aWNhbGx5IGFsaWduZWQgb24gYm90dG9tCgkJCQkJCSR0aGlzLT55ICs9ICgkbWF4aCAtICR0ZXh0X2hlaWdodCk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCSRubCA9ICR0aGlzLT5Xcml0ZSgkdGhpcy0+bGFzdGgsICR0eHQsICcnLCAwLCAkYWxpZ24sIHRydWUsICRzdHJldGNoLCBmYWxzZSwgdHJ1ZSwgJG1heGgsIDAsICRtY19tYXJnaW4pOwoJCQlpZiAoJGZpdGNlbGwpIHsKCQkJCS8vIHJlc3RvcmUgZm9udCBzaXplCgkJCQkkdGhpcy0+U2V0Rm9udFNpemUoJHByZXZfRm9udFNpemVQdCk7CgkJCX0KCQl9CgkJaWYgKCRhdXRvcGFkZGluZykgewoJCQkvLyBhZGQgYm90dG9tIHBhZGRpbmcKCQkJJHRoaXMtPnkgKz0gJG1jX3BhZGRpbmdbJ0InXTsKCQl9CgkJLy8gR2V0IGVuZC1vZi10ZXh0IFkgcG9zaXRpb24KCQkkY3VycmVudFkgPSAkdGhpcy0+eTsKCQkvLyBnZXQgbGF0ZXN0IHBhZ2UgbnVtYmVyCgkJJGVuZHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQlpZiAoJHJlc3RoID4gMCkgewoJCQkkc2tpcCA9ICgkZW5kcGFnZSAtICRzdGFydHBhZ2UpOwoJCQkkdG1wcmVzdGggPSAkcmVzdGg7CgkJCXdoaWxlICgkdG1wcmVzdGggPiAwKSB7CgkJCQlpZiAoJHNraXAgPD0gMCkgewoJCQkJCS8vIGFkZCBhIHBhZ2UgKG9yIHRyaWcgQWNjZXB0UGFnZUJyZWFrKCkgZm9yIG11bHRpY29sdW1uIG1vZGUpCgkJCQkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyICsgMSk7CgkJCQl9CgkJCQlpZiAoJHRoaXMtPm51bV9jb2x1bW5zID4gMSkgewoJCQkJCSR0bXByZXN0aCAtPSAoJHRoaXMtPmggLSAkdGhpcy0+eSAtICR0aGlzLT5iTWFyZ2luKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRtcHJlc3RoIC09ICgkdGhpcy0+aCAtICR0aGlzLT50TWFyZ2luIC0gJHRoaXMtPmJNYXJnaW4pOwoJCQkJfQoJCQkJLS0kc2tpcDsKCQkJfQoJCQkkY3VycmVudFkgPSAkdGhpcy0+eTsKCQkJJGVuZHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQl9CgkJLy8gZ2V0IGxhdGVzdCBjb2x1bW4KCQkkZW5kY29sdW1uID0gJHRoaXMtPmN1cnJlbnRfY29sdW1uOwoJCWlmICgkdGhpcy0+bnVtX2NvbHVtbnMgPT0gMCkgewoJCQkkdGhpcy0+bnVtX2NvbHVtbnMgPSAxOwoJCX0KCQkvLyBkaXNhYmxlIHBhZ2UgcmVnaW9ucyBjaGVjawoJCSRjaGVja19wYWdlX3JlZ2lvbnMgPSAkdGhpcy0+Y2hlY2tfcGFnZV9yZWdpb25zOwoJCSR0aGlzLT5jaGVja19wYWdlX3JlZ2lvbnMgPSBmYWxzZTsKCQkvLyBnZXQgYm9yZGVyIG1vZGVzCgkJJGJvcmRlcl9zdGFydCA9IFRDUERGX1NUQVRJQzo6Z2V0Qm9yZGVyTW9kZSgkYm9yZGVyLCAkcG9zaXRpb249J3N0YXJ0JywgJHRoaXMtPm9wZW5jZWxsKTsKCQkkYm9yZGVyX2VuZCA9IFRDUERGX1NUQVRJQzo6Z2V0Qm9yZGVyTW9kZSgkYm9yZGVyLCAkcG9zaXRpb249J2VuZCcsICR0aGlzLT5vcGVuY2VsbCk7CgkJJGJvcmRlcl9taWRkbGUgPSBUQ1BERl9TVEFUSUM6OmdldEJvcmRlck1vZGUoJGJvcmRlciwgJHBvc2l0aW9uPSdtaWRkbGUnLCAkdGhpcy0+b3BlbmNlbGwpOwoJCS8vIGRlc2lnbiBib3JkZXJzIGFyb3VuZCBIVE1MIGNlbGxzLgoJCWZvciAoJHBhZ2UgPSAkc3RhcnRwYWdlOyAkcGFnZSA8PSAkZW5kcGFnZTsgKyskcGFnZSkgeyAvLyBmb3IgZWFjaCBwYWdlCgkJCSRjY29kZSA9ICcnOwoJCQkkdGhpcy0+c2V0UGFnZSgkcGFnZSk7CgkJCWlmICgkdGhpcy0+bnVtX2NvbHVtbnMgPCAyKSB7CgkJCQkvLyBzaW5nbGUtY29sdW1uIG1vZGUKCQkJCSR0aGlzLT5TZXRYKCR4KTsKCQkJCSR0aGlzLT55ID0gJHRoaXMtPnRNYXJnaW47CgkJCX0KCQkJLy8gYWNjb3VudCBmb3IgbWFyZ2luIGNoYW5nZXMKCQkJaWYgKCRwYWdlID4gJHN0YXJ0cGFnZSkgewoJCQkJaWYgKCgkdGhpcy0+cnRsKSBBTkQgKCR0aGlzLT5wYWdlZGltWyRwYWdlXVsnb3JtJ10gIT0gJHRoaXMtPnBhZ2VkaW1bJHN0YXJ0cGFnZV1bJ29ybSddKSkgewoJCQkJCSR0aGlzLT54IC09ICgkdGhpcy0+cGFnZWRpbVskcGFnZV1bJ29ybSddIC0gJHRoaXMtPnBhZ2VkaW1bJHN0YXJ0cGFnZV1bJ29ybSddKTsKCQkJCX0gZWxzZWlmICgoISR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJHBhZ2VdWydvbG0nXSAhPSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb2xtJ10pKSB7CgkJCQkJJHRoaXMtPnggKz0gKCR0aGlzLT5wYWdlZGltWyRwYWdlXVsnb2xtJ10gLSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb2xtJ10pOwoJCQkJfQoJCQl9CgkJCWlmICgkc3RhcnRwYWdlID09ICRlbmRwYWdlKSB7CgkJCQkvLyBzaW5nbGUgcGFnZQoJCQkJZm9yICgkY29sdW1uID0gJHN0YXJ0Y29sdW1uOyAkY29sdW1uIDw9ICRlbmRjb2x1bW47ICsrJGNvbHVtbikgeyAvLyBmb3IgZWFjaCBjb2x1bW4KCQkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCRjb2x1bW4pOwoJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCSR0aGlzLT54IC09ICRtY19tYXJnaW5bJ1InXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGhpcy0+eCArPSAkbWNfbWFyZ2luWydMJ107CgkJCQkJfQoJCQkJCWlmICgkc3RhcnRjb2x1bW4gPT0gJGVuZGNvbHVtbikgeyAvLyBzaW5nbGUgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcjsKCQkJCQkJJGggPSBtYXgoJGgsICgkY3VycmVudFkgLSAkb3kpKTsKCQkJCQkJJHRoaXMtPnkgPSAkb3k7CgkJCQkJfSBlbHNlaWYgKCRjb2x1bW4gPT0gJHN0YXJ0Y29sdW1uKSB7IC8vIGZpcnN0IGNvbHVtbgoJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfc3RhcnQ7CgkJCQkJCSR0aGlzLT55ID0gJG95OwoJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQl9IGVsc2VpZiAoJGNvbHVtbiA9PSAkZW5kY29sdW1uKSB7IC8vIGVuZCBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX2VuZDsKCQkJCQkJJGggPSAkY3VycmVudFkgLSAkdGhpcy0+eTsKCQkJCQkJaWYgKCRyZXN0aCA+ICRoKSB7CgkJCQkJCQkkaCA9ICRyZXN0aDsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7IC8vIG1pZGRsZSBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX21pZGRsZTsKCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJCSRyZXN0aCAtPSAkaDsKCQkJCQl9CgkJCQkJJGNjb2RlIC49ICR0aGlzLT5nZXRDZWxsQ29kZSgkdywgJGgsICcnLCAkY2JvcmRlciwgMSwgJycsICRmaWxsLCAnJywgMCwgdHJ1ZSkuIlxuIjsKCQkJCX0gLy8gZW5kIGZvciBlYWNoIGNvbHVtbgoJCQl9IGVsc2VpZiAoJHBhZ2UgPT0gJHN0YXJ0cGFnZSkgeyAvLyBmaXJzdCBwYWdlCgkJCQlmb3IgKCRjb2x1bW4gPSAkc3RhcnRjb2x1bW47ICRjb2x1bW4gPCAkdGhpcy0+bnVtX2NvbHVtbnM7ICsrJGNvbHVtbikgeyAvLyBmb3IgZWFjaCBjb2x1bW4KCQkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCRjb2x1bW4pOwoJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCSR0aGlzLT54IC09ICRtY19tYXJnaW5bJ1InXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGhpcy0+eCArPSAkbWNfbWFyZ2luWydMJ107CgkJCQkJfQoJCQkJCWlmICgkY29sdW1uID09ICRzdGFydGNvbHVtbikgeyAvLyBmaXJzdCBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX3N0YXJ0OwoJCQkJCQkkdGhpcy0+eSA9ICRveTsKCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJfSBlbHNlIHsgLy8gbWlkZGxlIGNvbHVtbgoJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfbWlkZGxlOwoJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQkJJHJlc3RoIC09ICRoOwoJCQkJCX0KCQkJCQkkY2NvZGUgLj0gJHRoaXMtPmdldENlbGxDb2RlKCR3LCAkaCwgJycsICRjYm9yZGVyLCAxLCAnJywgJGZpbGwsICcnLCAwLCB0cnVlKS4iXG4iOwoJCQkJfSAvLyBlbmQgZm9yIGVhY2ggY29sdW1uCgkJCX0gZWxzZWlmICgkcGFnZSA9PSAkZW5kcGFnZSkgeyAvLyBsYXN0IHBhZ2UKCQkJCWZvciAoJGNvbHVtbiA9IDA7ICRjb2x1bW4gPD0gJGVuZGNvbHVtbjsgKyskY29sdW1uKSB7IC8vIGZvciBlYWNoIGNvbHVtbgoJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGNvbHVtbik7CgkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJJHRoaXMtPnggLT0gJG1jX21hcmdpblsnUiddOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT54ICs9ICRtY19tYXJnaW5bJ0wnXTsKCQkJCQl9CgkJCQkJaWYgKCRjb2x1bW4gPT0gJGVuZGNvbHVtbikgewoJCQkJCQkvLyBlbmQgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9lbmQ7CgkJCQkJCSRoID0gJGN1cnJlbnRZIC0gJHRoaXMtPnk7CgkJCQkJCWlmICgkcmVzdGggPiAkaCkgewoJCQkJCQkJJGggPSAkcmVzdGg7CgkJCQkJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBtaWRkbGUgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJCSRoID0gJHRoaXMtPmggLSAkdGhpcy0+eSAtICR0aGlzLT5iTWFyZ2luOwoJCQkJCQkkcmVzdGggLT0gJGg7CgkJCQkJfQoJCQkJCSRjY29kZSAuPSAkdGhpcy0+Z2V0Q2VsbENvZGUoJHcsICRoLCAnJywgJGNib3JkZXIsIDEsICcnLCAkZmlsbCwgJycsIDAsIHRydWUpLiJcbiI7CgkJCQl9IC8vIGVuZCBmb3IgZWFjaCBjb2x1bW4KCQkJfSBlbHNlIHsgLy8gbWlkZGxlIHBhZ2UKCQkJCWZvciAoJGNvbHVtbiA9IDA7ICRjb2x1bW4gPCAkdGhpcy0+bnVtX2NvbHVtbnM7ICsrJGNvbHVtbikgeyAvLyBmb3IgZWFjaCBjb2x1bW4KCQkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCRjb2x1bW4pOwoJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCSR0aGlzLT54IC09ICRtY19tYXJnaW5bJ1InXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGhpcy0+eCArPSAkbWNfbWFyZ2luWydMJ107CgkJCQkJfQoJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJJHJlc3RoIC09ICRoOwoJCQkJCSRjY29kZSAuPSAkdGhpcy0+Z2V0Q2VsbENvZGUoJHcsICRoLCAnJywgJGNib3JkZXIsIDEsICcnLCAkZmlsbCwgJycsIDAsIHRydWUpLiJcbiI7CgkJCQl9IC8vIGVuZCBmb3IgZWFjaCBjb2x1bW4KCQkJfQoJCQlpZiAoJGNib3JkZXIgT1IgJGZpbGwpIHsKCQkJCSRvZmZzZXRsZW4gPSBzdHJsZW4oJGNjb2RlKTsKCQkJCS8vIGRyYXcgYm9yZGVyIGFuZCBmaWxsCgkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkJCWlmIChlbmQoJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXSkgIT09IGZhbHNlKSB7CgkJCQkJCSRwYWdlbWFya2tleSA9IGtleSgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddKTsKCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXVskcGFnZW1hcmtrZXldOwoJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddWyRwYWdlbWFya2tleV0gKz0gJG9mZnNldGxlbjsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcGFnZW1hcmsgPSAkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2ludG1yayddOwoJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2ludG1yayddICs9ICRvZmZzZXRsZW47CgkJCQkJfQoJCQkJCSRwYWdlYnVmZiA9ICR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddOwoJCQkJCSRwc3RhcnQgPSBzdWJzdHIoJHBhZ2VidWZmLCAwLCAkcGFnZW1hcmspOwoJCQkJCSRwZW5kID0gc3Vic3RyKCRwYWdlYnVmZiwgJHBhZ2VtYXJrKTsKCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSA9ICRwc3RhcnQuJGNjb2RlLiRwZW5kOwoJCQkJfSBlbHNlIHsKCQkJCQlpZiAoZW5kKCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdKSAhPT0gZmFsc2UpIHsKCQkJCQkJJHBhZ2VtYXJra2V5ID0ga2V5KCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdKTsKCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPnRyYW5zZm1ya1skdGhpcy0+cGFnZV1bJHBhZ2VtYXJra2V5XTsKCQkJCQkJJHRoaXMtPnRyYW5zZm1ya1skdGhpcy0+cGFnZV1bJHBhZ2VtYXJra2V5XSArPSAkb2Zmc2V0bGVuOwoJCQkJCX0gZWxzZWlmICgkdGhpcy0+SW5Gb290ZXIpIHsKCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV07CgkJCQkJCSR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPnBhZ2VdICs9ICRvZmZzZXRsZW47CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPmludG1ya1skdGhpcy0+cGFnZV07CgkJCQkJCSR0aGlzLT5pbnRtcmtbJHRoaXMtPnBhZ2VdICs9ICRvZmZzZXRsZW47CgkJCQkJfQoJCQkJCSRwYWdlYnVmZiA9ICR0aGlzLT5nZXRQYWdlQnVmZmVyKCR0aGlzLT5wYWdlKTsKCQkJCQkkcHN0YXJ0ID0gc3Vic3RyKCRwYWdlYnVmZiwgMCwgJHBhZ2VtYXJrKTsKCQkJCQkkcGVuZCA9IHN1YnN0cigkcGFnZWJ1ZmYsICRwYWdlbWFyayk7CgkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UsICRwc3RhcnQuJGNjb2RlLiRwZW5kKTsKCQkJCX0KCQkJfQoJCX0gLy8gZW5kIGZvciBlYWNoIHBhZ2UKCQkvLyByZXN0b3JlIHBhZ2UgcmVnaW9ucyBjaGVjawoJCSR0aGlzLT5jaGVja19wYWdlX3JlZ2lvbnMgPSAkY2hlY2tfcGFnZV9yZWdpb25zOwoJCS8vIEdldCBlbmQtb2YtY2VsbCBZIHBvc2l0aW9uCgkJJGN1cnJlbnRZID0gJHRoaXMtPkdldFkoKTsKCQkvLyByZXN0b3JlIHByZXZpb3VzIHZhbHVlcwoJCWlmICgkdGhpcy0+bnVtX2NvbHVtbnMgPiAxKSB7CgkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oKTsKCQl9IGVsc2UgewoJCQkvLyByZXN0b3JlIG9yaWdpbmFsIG1hcmdpbnMKCQkJJHRoaXMtPmxNYXJnaW4gPSAkbE1hcmdpbjsKCQkJJHRoaXMtPnJNYXJnaW4gPSAkck1hcmdpbjsKCQkJaWYgKCR0aGlzLT5wYWdlID4gJHN0YXJ0cGFnZSkgewoJCQkJLy8gY2hlY2sgZm9yIG1hcmdpbiB2YXJpYXRpb25zIGJldHdlZW4gcGFnZXMgKGkuZS4gYm9va2xldCBtb2RlKQoJCQkJJGRsID0gKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ10gLSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb2xtJ10pOwoJCQkJJGRyID0gKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ10gLSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb3JtJ10pOwoJCQkJaWYgKCgkZGwgIT0gMCkgT1IgKCRkciAhPSAwKSkgewoJCQkJCSR0aGlzLT5sTWFyZ2luICs9ICRkbDsKCQkJCQkkdGhpcy0+ck1hcmdpbiArPSAkZHI7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCRsbiA+IDApIHsKCQkJLy9HbyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmUKCQkJJHRoaXMtPlNldFkoJGN1cnJlbnRZICsgJG1jX21hcmdpblsnQiddKTsKCQkJaWYgKCRsbiA9PSAyKSB7CgkJCQkkdGhpcy0+U2V0WCgkeCArICR3ICsgJG1jX21hcmdpblsnTCddICsgJG1jX21hcmdpblsnUiddKTsKCQkJfQoJCX0gZWxzZSB7CgkJCS8vIGdvIGxlZnQgb3IgcmlnaHQgYnkgY2FzZQoJCQkkdGhpcy0+c2V0UGFnZSgkc3RhcnRwYWdlKTsKCQkJJHRoaXMtPnkgPSAkeTsKCQkJJHRoaXMtPlNldFgoJHggKyAkdyArICRtY19tYXJnaW5bJ0wnXSArICRtY19tYXJnaW5bJ1InXSk7CgkJfQoJCSR0aGlzLT5zZXRDb250ZW50TWFyaygpOwoJCSR0aGlzLT5jZWxsX3BhZGRpbmcgPSAkcHJldl9jZWxsX3BhZGRpbmc7CgkJJHRoaXMtPmNlbGxfbWFyZ2luID0gJHByZXZfY2VsbF9tYXJnaW47CgkJJHRoaXMtPmNsTWFyZ2luID0gJHRoaXMtPmxNYXJnaW47CgkJJHRoaXMtPmNyTWFyZ2luID0gJHRoaXMtPnJNYXJnaW47CgkJcmV0dXJuICRubDsKCX0KCgkvKioKCSAqIFRoaXMgbWV0aG9kIHJldHVybiB0aGUgZXN0aW1hdGVkIG51bWJlciBvZiBsaW5lcyBmb3IgcHJpbnQgYSBzaW1wbGUgdGV4dCBzdHJpbmcgdXNpbmcgTXVsdGljZWxsKCkgbWV0aG9kLgoJICogQHBhcmFtICR0eHQgKHN0cmluZykgU3RyaW5nIGZvciBjYWxjdWxhdGluZyBoaXMgaGVpZ2h0CgkgKiBAcGFyYW0gJHcgKGZsb2F0KSBXaWR0aCBvZiBjZWxscy4gSWYgMCwgdGhleSBleHRlbmQgdXAgdG8gdGhlIHJpZ2h0IG1hcmdpbiBvZiB0aGUgcGFnZS4KCSAqIEBwYXJhbSAkcmVzZXRoIChib29sZWFuKSBpZiB0cnVlIHJlc2V0IHRoZSBsYXN0IGNlbGwgaGVpZ2h0IChkZWZhdWx0IGZhbHNlKS4KCSAqIEBwYXJhbSAkYXV0b3BhZGRpbmcgKGJvb2xlYW4pIGlmIHRydWUsIHVzZXMgaW50ZXJuYWwgcGFkZGluZyBhbmQgYXV0b21hdGljYWxseSBhZGp1c3QgaXQgdG8gYWNjb3VudCBmb3IgbGluZSB3aWR0aCAoZGVmYXVsdCB0cnVlKS4KCSAqIEBwYXJhbSAkY2VsbHBhZGRpbmcgKGZsb2F0KSBJbnRlcm5hbCBjZWxsIHBhZGRpbmcsIGlmIGVtcHR5IHVzZXMgZGVmYXVsdCBjZWxsIHBhZGRpbmcuCgkgKiBAcGFyYW0gJGJvcmRlciAobWl4ZWQpIEluZGljYXRlcyBpZiBib3JkZXJzIG11c3QgYmUgZHJhd24gYXJvdW5kIHRoZSBjZWxsLiBUaGUgdmFsdWUgY2FuIGJlIGEgbnVtYmVyOjx1bD48bGk+MDogbm8gYm9yZGVyIChkZWZhdWx0KTwvbGk+PGxpPjE6IGZyYW1lPC9saT48L3VsPiBvciBhIHN0cmluZyBjb250YWluaW5nIHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoaW4gYW55IG9yZGVyKTo8dWw+PGxpPkw6IGxlZnQ8L2xpPjxsaT5UOiB0b3A8L2xpPjxsaT5SOiByaWdodDwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4gb3IgYW4gYXJyYXkgb2YgbGluZSBzdHlsZXMgZm9yIGVhY2ggYm9yZGVyIGdyb3VwIC0gZm9yIGV4YW1wbGU6IGFycmF5KCdMVFJCJyA9PiBhcnJheSgnd2lkdGgnID0+IDIsICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDAsIDAsIDApKSkKCSAqIEByZXR1cm4gZmxvYXQgUmV0dXJuIHRoZSBtaW5pbWFsIGhlaWdodCBuZWVkZWQgZm9yIG11bHRpY2VsbCBtZXRob2QgZm9yIHByaW50aW5nIHRoZSAkdHh0IHBhcmFtLgoJICogQGF1dGhvciBBbGV4YW5kZXIgRXNjYWxvbmEgRmVyblxFMW5kZXosIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuNS4wMTEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldE51bUxpbmVzKCR0eHQsICR3PTAsICRyZXNldGg9ZmFsc2UsICRhdXRvcGFkZGluZz10cnVlLCAkY2VsbHBhZGRpbmc9JycsICRib3JkZXI9MCkgewoJCWlmICgkdHh0ID09PSBOVUxMKSB7CgkJCXJldHVybiAwOwoJCX0KCQlpZiAoJHR4dCA9PT0gJycpIHsKCQkJLy8gZW1wdHkgc3RyaW5nCgkJCXJldHVybiAxOwoJCX0KCQkvLyBhZGp1c3QgaW50ZXJuYWwgcGFkZGluZwoJCSRwcmV2X2NlbGxfcGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJJHByZXZfbGFzdGggPSAkdGhpcy0+bGFzdGg7CgkJaWYgKGlzX2FycmF5KCRjZWxscGFkZGluZykpIHsKCQkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICRjZWxscGFkZGluZzsKCQl9CgkJJHRoaXMtPmFkanVzdENlbGxQYWRkaW5nKCRib3JkZXIpOwoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdykgT1IgKCR3IDw9IDApKSB7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdyA9ICR0aGlzLT54IC0gJHRoaXMtPmxNYXJnaW47CgkJCX0gZWxzZSB7CgkJCQkkdyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+eDsKCQkJfQoJCX0KCQkkd21heCA9ICR3IC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddOwoJCWlmICgkcmVzZXRoKSB7CgkJCS8vIHJlc2V0IHJvdyBoZWlnaHQKCQkJJHRoaXMtPnJlc2V0TGFzdEgoKTsKCQl9CgkJJGxpbmVzID0gMTsKCQkkc3VtID0gMDsKCQkkY2hhcnMgPSBUQ1BERl9GT05UUzo6dXRmOEJpZGkoVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCR0eHQsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCksICR0eHQsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJJGNoYXJzV2lkdGggPSAkdGhpcy0+R2V0QXJyU3RyaW5nV2lkdGgoJGNoYXJzLCAnJywgJycsIDAsIHRydWUpOwoJCSRsZW5ndGggPSBjb3VudCgkY2hhcnMpOwoJCSRsYXN0U2VwYXJhdG9yID0gLTE7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbmd0aDsgKyskaSkgewoJCQkkYyA9ICRjaGFyc1skaV07CgkJCSRjaGFyV2lkdGggPSAkY2hhcnNXaWR0aFskaV07CgkJCWlmICgoJGMgIT0gMTYwKQoJCQkJCUFORCAoKCRjID09IDE3MykKCQkJCQkJT1IgcHJlZ19tYXRjaCgkdGhpcy0+cmVfc3BhY2VzLCBUQ1BERl9GT05UUzo6dW5pY2hyKCRjLCAkdGhpcy0+aXN1bmljb2RlKSkKCQkJCQkJT1IgKCgkYyA9PSA0NSkKCQkJCQkJCUFORCAoJGkgPiAwKSBBTkQgKCRpIDwgKCRsZW5ndGggLSAxKSkKCQkJCQkJCUFORCBAcHJlZ19tYXRjaCgnL1tccHtMfV0vJy4kdGhpcy0+cmVfc3BhY2VbJ20nXSwgVENQREZfRk9OVFM6OnVuaWNocigkY2hhcnNbKCRpIC0gMSldLCAkdGhpcy0+aXN1bmljb2RlKSkKCQkJCQkJCUFORCBAcHJlZ19tYXRjaCgnL1tccHtMfV0vJy4kdGhpcy0+cmVfc3BhY2VbJ20nXSwgVENQREZfRk9OVFM6OnVuaWNocigkY2hhcnNbKCRpICsgMSldLCAkdGhpcy0+aXN1bmljb2RlKSkKCQkJCQkJKQoJCQkJCSkKCQkJCSkgewoJCQkJJGxhc3RTZXBhcmF0b3IgPSAkaTsKCQkJfQoJCQlpZiAoKCgkc3VtICsgJGNoYXJXaWR0aCkgPiAkd21heCkgT1IgKCRjID09IDEwKSkgewoJCQkJKyskbGluZXM7CgkJCQlpZiAoJGMgPT0gMTApIHsKCQkJCQkkbGFzdFNlcGFyYXRvciA9IC0xOwoJCQkJCSRzdW0gPSAwOwoJCQkJfSBlbHNlaWYgKCRsYXN0U2VwYXJhdG9yICE9IC0xKSB7CgkJCQkJJGkgPSAkbGFzdFNlcGFyYXRvcjsKCQkJCQkkbGFzdFNlcGFyYXRvciA9IC0xOwoJCQkJCSRzdW0gPSAwOwoJCQkJfSBlbHNlIHsKCQkJCQkkc3VtID0gJGNoYXJXaWR0aDsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRzdW0gKz0gJGNoYXJXaWR0aDsKCQkJfQoJCX0KCQlpZiAoJGNoYXJzWygkbGVuZ3RoIC0gMSldID09IDEwKSB7CgkJCS0tJGxpbmVzOwoJCX0KCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHByZXZfY2VsbF9wYWRkaW5nOwoJCSR0aGlzLT5sYXN0aCA9ICRwcmV2X2xhc3RoOwoJCXJldHVybiAkbGluZXM7Cgl9CgoJLyoqCgkgKiBUaGlzIG1ldGhvZCByZXR1cm4gdGhlIGVzdGltYXRlZCBoZWlnaHQgbmVlZGVkIGZvciBwcmludGluZyBhIHNpbXBsZSB0ZXh0IHN0cmluZyB1c2luZyB0aGUgTXVsdGljZWxsKCkgbWV0aG9kLgoJICogR2VuZXJhbGx5LCBpZiB5b3Ugd2FudCB0byBrbm93IHRoZSBleGFjdCBoZWlnaHQgZm9yIGEgYmxvY2sgb2YgY29udGVudCB5b3UgY2FuIHVzZSB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIHRlY2huaXF1ZToKCSAqIEBwcmUKCSAqICAvLyBzdG9yZSBjdXJyZW50IG9iamVjdAoJICogICRwZGYtPnN0YXJ0VHJhbnNhY3Rpb24oKTsKCSAqICAvLyBzdG9yZSBzdGFydGluZyB2YWx1ZXMKCSAqICAkc3RhcnRfeSA9ICRwZGYtPkdldFkoKTsKCSAqICAkc3RhcnRfcGFnZSA9ICRwZGYtPmdldFBhZ2UoKTsKCSAqICAvLyBjYWxsIHlvdXIgcHJpbnRpbmcgZnVuY3Rpb25zIHdpdGggeW91ciBwYXJhbWV0ZXJzCgkgKiAgLy8gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCgkgKiAgJHBkZi0+TXVsdGlDZWxsKCR3PTAsICRoPTAsICR0eHQsICRib3JkZXI9MSwgJGFsaWduPSdMJywgJGZpbGw9ZmFsc2UsICRsbj0xLCAkeD0nJywgJHk9JycsICRyZXNldGg9dHJ1ZSwgJHN0cmV0Y2g9MCwgJGlzaHRtbD1mYWxzZSwgJGF1dG9wYWRkaW5nPXRydWUsICRtYXhoPTApOwoJICogIC8vIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQoJICogIC8vIGdldCB0aGUgbmV3IFkKCSAqICAkZW5kX3kgPSAkcGRmLT5HZXRZKCk7CgkgKiAgJGVuZF9wYWdlID0gJHBkZi0+Z2V0UGFnZSgpOwoJICogIC8vIGNhbGN1bGF0ZSBoZWlnaHQKCSAqICAkaGVpZ2h0ID0gMDsKCSAqICBpZiAoJGVuZF9wYWdlID09ICRzdGFydF9wYWdlKSB7CgkgKiAgCSRoZWlnaHQgPSAkZW5kX3kgLSAkc3RhcnRfeTsKCSAqICB9IGVsc2UgewoJICogIAlmb3IgKCRwYWdlPSRzdGFydF9wYWdlOyAkcGFnZSA8PSAkZW5kX3BhZ2U7ICsrJHBhZ2UpIHsKCSAqICAJCSR0aGlzLT5zZXRQYWdlKCRwYWdlKTsKCSAqICAJCWlmICgkcGFnZSA9PSAkc3RhcnRfcGFnZSkgewoJICogIAkJCS8vIGZpcnN0IHBhZ2UKCSAqICAJCQkkaGVpZ2h0ID0gJHRoaXMtPmggLSAkc3RhcnRfeSAtICR0aGlzLT5iTWFyZ2luOwoJICogIAkJfSBlbHNlaWYgKCRwYWdlID09ICRlbmRfcGFnZSkgewoJICogIAkJCS8vIGxhc3QgcGFnZQoJICogIAkJCSRoZWlnaHQgPSAkZW5kX3kgLSAkdGhpcy0+dE1hcmdpbjsKCSAqICAJCX0gZWxzZSB7CgkgKiAgCQkJJGhlaWdodCA9ICR0aGlzLT5oIC0gJHRoaXMtPnRNYXJnaW4gLSAkdGhpcy0+Yk1hcmdpbjsKCSAqICAJCX0KCSAqICAJfQoJICogIH0KCSAqICAvLyByZXN0b3JlIHByZXZpb3VzIG9iamVjdAoJICogICRwZGYgPSAkcGRmLT5yb2xsYmFja1RyYW5zYWN0aW9uKCk7CgkgKgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgY2VsbHMuIElmIDAsIHRoZXkgZXh0ZW5kIHVwIHRvIHRoZSByaWdodCBtYXJnaW4gb2YgdGhlIHBhZ2UuCgkgKiBAcGFyYW0gJHR4dCAoc3RyaW5nKSBTdHJpbmcgZm9yIGNhbGN1bGF0aW5nIGhpcyBoZWlnaHQKCSAqIEBwYXJhbSAkcmVzZXRoIChib29sZWFuKSBpZiB0cnVlIHJlc2V0IHRoZSBsYXN0IGNlbGwgaGVpZ2h0IChkZWZhdWx0IGZhbHNlKS4KCSAqIEBwYXJhbSAkYXV0b3BhZGRpbmcgKGJvb2xlYW4pIGlmIHRydWUsIHVzZXMgaW50ZXJuYWwgcGFkZGluZyBhbmQgYXV0b21hdGljYWxseSBhZGp1c3QgaXQgdG8gYWNjb3VudCBmb3IgbGluZSB3aWR0aCAoZGVmYXVsdCB0cnVlKS4KCSAqIEBwYXJhbSAkY2VsbHBhZGRpbmcgKGZsb2F0KSBJbnRlcm5hbCBjZWxsIHBhZGRpbmcsIGlmIGVtcHR5IHVzZXMgZGVmYXVsdCBjZWxsIHBhZGRpbmcuCgkgKiBAcGFyYW0gJGJvcmRlciAobWl4ZWQpIEluZGljYXRlcyBpZiBib3JkZXJzIG11c3QgYmUgZHJhd24gYXJvdW5kIHRoZSBjZWxsLiBUaGUgdmFsdWUgY2FuIGJlIGEgbnVtYmVyOjx1bD48bGk+MDogbm8gYm9yZGVyIChkZWZhdWx0KTwvbGk+PGxpPjE6IGZyYW1lPC9saT48L3VsPiBvciBhIHN0cmluZyBjb250YWluaW5nIHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoaW4gYW55IG9yZGVyKTo8dWw+PGxpPkw6IGxlZnQ8L2xpPjxsaT5UOiB0b3A8L2xpPjxsaT5SOiByaWdodDwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4gb3IgYW4gYXJyYXkgb2YgbGluZSBzdHlsZXMgZm9yIGVhY2ggYm9yZGVyIGdyb3VwIC0gZm9yIGV4YW1wbGU6IGFycmF5KCdMVFJCJyA9PiBhcnJheSgnd2lkdGgnID0+IDIsICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDAsIDAsIDApKSkKCSAqIEByZXR1cm4gZmxvYXQgUmV0dXJuIHRoZSBtaW5pbWFsIGhlaWdodCBuZWVkZWQgZm9yIG11bHRpY2VsbCBtZXRob2QgZm9yIHByaW50aW5nIHRoZSAkdHh0IHBhcmFtLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmksIEFsZXhhbmRlciBFc2NhbG9uYSBGZXJuXEUxbmRlegoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0U3RyaW5nSGVpZ2h0KCR3LCAkdHh0LCAkcmVzZXRoPWZhbHNlLCAkYXV0b3BhZGRpbmc9dHJ1ZSwgJGNlbGxwYWRkaW5nPScnLCAkYm9yZGVyPTApIHsKCQkvLyBhZGp1c3QgaW50ZXJuYWwgcGFkZGluZwoJCSRwcmV2X2NlbGxfcGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJJHByZXZfbGFzdGggPSAkdGhpcy0+bGFzdGg7CgkJaWYgKGlzX2FycmF5KCRjZWxscGFkZGluZykpIHsKCQkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICRjZWxscGFkZGluZzsKCQl9CgkJJHRoaXMtPmFkanVzdENlbGxQYWRkaW5nKCRib3JkZXIpOwoJCSRsaW5lcyA9ICR0aGlzLT5nZXROdW1MaW5lcygkdHh0LCAkdywgJHJlc2V0aCwgJGF1dG9wYWRkaW5nLCAkY2VsbHBhZGRpbmcsICRib3JkZXIpOwoJCSRoZWlnaHQgPSAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgoJGxpbmVzICogJHRoaXMtPkZvbnRTaXplKSwgJGF1dG9wYWRkaW5nKTsKCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHByZXZfY2VsbF9wYWRkaW5nOwoJCSR0aGlzLT5sYXN0aCA9ICRwcmV2X2xhc3RoOwoJCXJldHVybiAkaGVpZ2h0OwoJfQoKCS8qKgoJICogVGhpcyBtZXRob2QgcHJpbnRzIHRleHQgZnJvbSB0aGUgY3VycmVudCBwb3NpdGlvbi48YnIgLz4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIExpbmUgaGVpZ2h0CgkgKiBAcGFyYW0gJHR4dCAoc3RyaW5nKSBTdHJpbmcgdG8gcHJpbnQKCSAqIEBwYXJhbSAkbGluayAobWl4ZWQpIFVSTCBvciBpZGVudGlmaWVyIHJldHVybmVkIGJ5IEFkZExpbmsoKQoJICogQHBhcmFtICRmaWxsIChib29sZWFuKSBJbmRpY2F0ZXMgaWYgdGhlIGNlbGwgYmFja2dyb3VuZCBtdXN0IGJlIHBhaW50ZWQgKHRydWUpIG9yIHRyYW5zcGFyZW50IChmYWxzZSkuCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIG9yIGVtcHR5IHN0cmluZzogbGVmdCBhbGlnbiAoZGVmYXVsdCB2YWx1ZSk8L2xpPjxsaT5DOiBjZW50ZXI8L2xpPjxsaT5SOiByaWdodCBhbGlnbjwvbGk+PGxpPko6IGp1c3RpZnk8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGxuIChib29sZWFuKSBpZiB0cnVlIHNldCBjdXJzb3IgYXQgdGhlIGJvdHRvbSBvZiB0aGUgbGluZSwgb3RoZXJ3aXNlIHNldCBjdXJzb3IgYXQgdGhlIHRvcCBvZiB0aGUgbGluZS4KCSAqIEBwYXJhbSAkc3RyZXRjaCAoaW50KSBmb250IHN0cmV0Y2ggbW9kZTogPHVsPjxsaT4wID0gZGlzYWJsZWQ8L2xpPjxsaT4xID0gaG9yaXpvbnRhbCBzY2FsaW5nIG9ubHkgaWYgdGV4dCBpcyBsYXJnZXIgdGhhbiBjZWxsIHdpZHRoPC9saT48bGk+MiA9IGZvcmNlZCBob3Jpem9udGFsIHNjYWxpbmcgdG8gZml0IGNlbGwgd2lkdGg8L2xpPjxsaT4zID0gY2hhcmFjdGVyIHNwYWNpbmcgb25seSBpZiB0ZXh0IGlzIGxhcmdlciB0aGFuIGNlbGwgd2lkdGg8L2xpPjxsaT40ID0gZm9yY2VkIGNoYXJhY3RlciBzcGFjaW5nIHRvIGZpdCBjZWxsIHdpZHRoPC9saT48L3VsPiBHZW5lcmFsIGZvbnQgc3RyZXRjaGluZyBhbmQgc2NhbGluZyB2YWx1ZXMgd2lsbCBiZSBwcmVzZXJ2ZWQgd2hlbiBwb3NzaWJsZS4KCSAqIEBwYXJhbSAkZmlyc3RsaW5lIChib29sZWFuKSBpZiB0cnVlIHByaW50cyBvbmx5IHRoZSBmaXJzdCBsaW5lIGFuZCByZXR1cm4gdGhlIHJlbWFpbmluZyBzdHJpbmcuCgkgKiBAcGFyYW0gJGZpcnN0YmxvY2sgKGJvb2xlYW4pIGlmIHRydWUgdGhlIHN0cmluZyBpcyB0aGUgc3RhcnRpbmcgb2YgYSBsaW5lLgoJICogQHBhcmFtICRtYXhoIChmbG9hdCkgbWF4aW11bSBoZWlnaHQuIEl0IHNob3VsZCBiZSA+PSAkaCBhbmQgbGVzcyB0aGVuIHJlbWFpbmluZyBzcGFjZSB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLCBvciAwIGZvciBkaXNhYmxlIHRoaXMgZmVhdHVyZS4KCSAqIEBwYXJhbSAkd2FkaiAoZmxvYXQpIGZpcnN0IGxpbmUgd2lkdGggd2lsbCBiZSByZWR1Y2VkIGJ5IHRoaXMgYW1vdW50ICh1c2VkIGluIEhUTUwgbW9kZSkuCgkgKiBAcGFyYW0gJG1hcmdpbiAoYXJyYXkpIG1hcmdpbiBhcnJheSBvZiB0aGUgcGFyZW50IGNvbnRhaW5lcgoJICogQHJldHVybiBtaXhlZCBSZXR1cm4gdGhlIG51bWJlciBvZiBjZWxscyBvciB0aGUgcmVtYWluaW5nIHN0cmluZyBpZiAkZmlyc3RsaW5lID0gdHJ1ZS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjUKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFdyaXRlKCRoLCAkdHh0LCAkbGluaz0nJywgJGZpbGw9ZmFsc2UsICRhbGlnbj0nJywgJGxuPWZhbHNlLCAkc3RyZXRjaD0wLCAkZmlyc3RsaW5lPWZhbHNlLCAkZmlyc3RibG9jaz1mYWxzZSwgJG1heGg9MCwgJHdhZGo9MCwgJG1hcmdpbj0nJykgewoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR0aGlzLT54LCAkdGhpcy0+eSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHRoaXMtPngsICR0aGlzLT55KTsKCQlpZiAoc3RybGVuKCR0eHQpID09IDApIHsKCQkJLy8gZml4IGVtcHR5IHRleHQKCQkJJHR4dCA9ICcgJzsKCQl9CgkJaWYgKCRtYXJnaW4gPT09ICcnKSB7CgkJCS8vIHNldCBkZWZhdWx0IG1hcmdpbnMKCQkJJG1hcmdpbiA9ICR0aGlzLT5jZWxsX21hcmdpbjsKCQl9CgkJLy8gcmVtb3ZlIGNhcnJpYWdlIHJldHVybnMKCQkkcyA9IHN0cl9yZXBsYWNlKCJcciIsICcnLCAkdHh0KTsKCQkvLyBjaGVjayBpZiBzdHJpbmcgY29udGFpbnMgYXJhYmljIHRleHQKCQlpZiAocHJlZ19tYXRjaChUQ1BERl9GT05UX0RBVEE6OiR1bmlfUkVfUEFUVEVSTl9BUkFCSUMsICRzKSkgewoJCQkkYXJhYmljID0gdHJ1ZTsKCQl9IGVsc2UgewoJCQkkYXJhYmljID0gZmFsc2U7CgkJfQoJCS8vIGNoZWNrIGlmIHN0cmluZyBjb250YWlucyBSVEwgdGV4dAoJCWlmICgkYXJhYmljIE9SICgkdGhpcy0+dG1wcnRsID09ICdSJykgT1IgcHJlZ19tYXRjaChUQ1BERl9GT05UX0RBVEE6OiR1bmlfUkVfUEFUVEVSTl9SVEwsICRzKSkgewoJCQkkcnRsbW9kZSA9IHRydWU7CgkJfSBlbHNlIHsKCQkJJHJ0bG1vZGUgPSBmYWxzZTsKCQl9CgkJLy8gZ2V0IGEgY2hhciB3aWR0aAoJCSRjaHJ3aWR0aCA9ICR0aGlzLT5HZXRDaGFyV2lkdGgoNDYpOyAvLyBkb3QgY2hhcmFjdGVyCgkJLy8gZ2V0IGFycmF5IG9mIHVuaWNvZGUgdmFsdWVzCgkJJGNoYXJzID0gVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCRzLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCS8vIGNhbGN1bGF0ZSBtYXhpbXVtIHdpZHRoIGZvciBhIHNpbmdsZSBjaGFyYWN0ZXIgb24gc3RyaW5nCgkJJGNocncgPSAkdGhpcy0+R2V0QXJyU3RyaW5nV2lkdGgoJGNoYXJzLCAnJywgJycsIDAsIHRydWUpOwoJCWFycmF5X3dhbGsoJGNocncsIGFycmF5KCR0aGlzLCAnZ2V0UmF3Q2hhcldpZHRoJykpOwoJCSRtYXhjaHdpZHRoID0gbWF4KCRjaHJ3KTsKCQkvLyBnZXQgYXJyYXkgb2YgY2hhcnMKCQkkdWNoYXJzID0gVENQREZfRk9OVFM6OlVURjhBcnJheVRvVW5pQXJyYXkoJGNoYXJzLCAkdGhpcy0+aXN1bmljb2RlKTsKCQkvLyBnZXQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzCgkJJG5iID0gY291bnQoJGNoYXJzKTsKCQkvLyByZXBsYWNlbWVudCBmb3IgU0hZIGNoYXJhY3RlciAobWludXMgc3ltYm9sKQoJCSRzaHlfcmVwbGFjZW1lbnQgPSA0NTsKCQkkc2h5X3JlcGxhY2VtZW50X2NoYXIgPSBUQ1BERl9GT05UUzo6dW5pY2hyKCRzaHlfcmVwbGFjZW1lbnQsICR0aGlzLT5pc3VuaWNvZGUpOwoJCS8vIHdpZGh0IGZvciBTSFkgcmVwbGFjZW1lbnQKCQkkc2h5X3JlcGxhY2VtZW50X3dpZHRoID0gJHRoaXMtPkdldENoYXJXaWR0aCgkc2h5X3JlcGxhY2VtZW50KTsKCQkvLyBtYXggWQoJCSRtYXh5ID0gJHRoaXMtPnkgKyAkbWF4aCAtICRoIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddOwoJCS8vIHBhZ2Ugd2lkdGgKCQkkcHcgPSAkdyA9ICR0aGlzLT53IC0gJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbjsKCQkvLyBjYWxjdWxhdGUgcmVtYWluaW5nIGxpbmUgd2lkdGggKCR3KQoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR3ID0gJHRoaXMtPnggLSAkdGhpcy0+bE1hcmdpbjsKCQl9IGVsc2UgewoJCQkkdyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+eDsKCQl9CgkJLy8gbWF4IGNvbHVtbiB3aWR0aAoJCSR3bWF4ID0gKCR3IC0gJHdhZGopOwoJCWlmICghJGZpcnN0bGluZSkgewoJCQkkd21heCAtPSAoJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddICsgJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddKTsKCQl9CgkJaWYgKCghJGZpcnN0bGluZSkgQU5EICgoJGNocndpZHRoID4gJHdtYXgpIE9SICgkbWF4Y2h3aWR0aCA+ICR3bWF4KSkpIHsKCQkJLy8gdGhlIG1heGltdW0gd2lkdGggY2hhcmFjdGVyIGRvIG5vdCBmaXQgb24gY29sdW1uCgkJCXJldHVybiAnJzsKCQl9CgkJLy8gbWluaW11bSByb3cgaGVpZ2h0CgkJJHJvd19oZWlnaHQgPSBtYXgoJGgsICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSkpOwoJCSRzdGFydF9wYWdlID0gJHRoaXMtPnBhZ2U7CgkJJGkgPSAwOyAvLyBjaGFyYWN0ZXIgcG9zaXRpb24KCQkkaiA9IDA7IC8vIGN1cnJlbnQgc3RhcnRpbmcgcG9zaXRpb24KCQkkc2VwID0gLTE7IC8vIHBvc2l0aW9uIG9mIHRoZSBsYXN0IGJsYW5rIHNwYWNlCgkJJHNoeSA9IGZhbHNlOyAvLyB0cnVlIGlmIHRoZSBsYXN0IGJsYW5rIGlzIGEgc29mdCBoeXBlbiAoU0hZKQoJCSRsID0gMDsgLy8gY3VycmVudCBzdHJpbmcgbGVuZ3RoCgkJJG5sID0gMDsgLy9udW1iZXIgb2YgbGluZXMKCQkkbGluZWJyZWFrID0gZmFsc2U7CgkJJHBjID0gMDsgLy8gcHJldmlvdXMgY2hhcmFjdGVyCgkJLy8gZm9yIGVhY2ggY2hhcmFjdGVyCgkJd2hpbGUgKCRpIDwgJG5iKSB7CgkJCWlmICgoJG1heGggPiAwKSBBTkQgKCR0aGlzLT55ID49ICRtYXh5KSApIHsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vR2V0IHRoZSBjdXJyZW50IGNoYXJhY3RlcgoJCQkkYyA9ICRjaGFyc1skaV07CgkJCWlmICgkYyA9PSAxMCkgeyAvLyAxMCA9ICJcbiIgPSBuZXcgbGluZQoJCQkJLy9FeHBsaWNpdCBsaW5lIGJyZWFrCgkJCQlpZiAoJGFsaWduID09ICdKJykgewoJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCSR0YWxpZ24gPSAnUic7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRhbGlnbiA9ICdMJzsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCSR0YWxpZ24gPSAkYWxpZ247CgkJCQl9CgkJCQkkdG1wc3RyID0gVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZygkdWNoYXJzLCAkaiwgJGkpOwoJCQkJaWYgKCRmaXJzdGxpbmUpIHsKCQkJCQkkc3RhcnR4ID0gJHRoaXMtPng7CgkJCQkJJHRtcGFyciA9IGFycmF5X3NsaWNlKCRjaGFycywgJGosICgkaSAtICRqKSk7CgkJCQkJaWYgKCRydGxtb2RlKSB7CgkJCQkJCSR0bXBhcnIgPSBUQ1BERl9GT05UUzo6dXRmOEJpZGkoJHRtcGFyciwgJHRtcHN0ciwgJHRoaXMtPnRtcHJ0bCwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQkJCQl9CgkJCQkJJGxpbmV3ID0gJHRoaXMtPkdldEFyclN0cmluZ1dpZHRoKCR0bXBhcnIpOwoJCQkJCXVuc2V0KCR0bXBhcnIpOwoJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCSR0aGlzLT5lbmRsaW5leCA9ICRzdGFydHggLSAkbGluZXc7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPmVuZGxpbmV4ID0gJHN0YXJ0eCArICRsaW5ldzsKCQkJCQl9CgkJCQkJJHcgPSAkbGluZXc7CgkJCQkJJHRtcGNlbGxwYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCQlpZiAoJG1heGggPT0gMCkgewoJCQkJCQkkdGhpcy0+U2V0Q2VsbFBhZGRpbmcoMCk7CgkJCQkJfQoJCQkJfQoJCQkJaWYgKCRmaXJzdGJsb2NrIEFORCAkdGhpcy0+aXNSVExUZXh0RGlyKCkpIHsKCQkJCQkkdG1wc3RyID0gJHRoaXMtPnN0cmluZ1JpZ2h0VHJpbSgkdG1wc3RyKTsKCQkJCX0KCQkJCS8vIFNraXAgbmV3bGluZXMgYXQgdGhlIGJlZ2luaW5nIG9mIGEgcGFnZSBvciBjb2x1bW4KCQkJCWlmICghZW1wdHkoJHRtcHN0cikgT1IgKCR0aGlzLT55IDwgKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyIC0gJHJvd19oZWlnaHQpKSkgewoJCQkJCSR0aGlzLT5DZWxsKCR3LCAkaCwgJHRtcHN0ciwgMCwgMSwgJHRhbGlnbiwgJGZpbGwsICRsaW5rLCAkc3RyZXRjaCk7CgkJCQl9CgkJCQl1bnNldCgkdG1wc3RyKTsKCQkJCWlmICgkZmlyc3RsaW5lKSB7CgkJCQkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICR0bXBjZWxscGFkZGluZzsKCQkJCQlyZXR1cm4gKFRDUERGX0ZPTlRTOjpVbmlBcnJTdWJTdHJpbmcoJHVjaGFycywgJGkpKTsKCQkJCX0KCQkJCSsrJG5sOwoJCQkJJGogPSAkaSArIDE7CgkJCQkkbCA9IDA7CgkJCQkkc2VwID0gLTE7CgkJCQkkc2h5ID0gZmFsc2U7CgkJCQkvLyBhY2NvdW50IGZvciBtYXJnaW4gY2hhbmdlcwoJCQkJaWYgKCgoJHRoaXMtPnkgKyAkdGhpcy0+bGFzdGgpID4gJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIpIEFORCAoJHRoaXMtPmluUGFnZUJvZHkoKSkpIHsKCQkJCQkkdGhpcy0+QWNjZXB0UGFnZUJyZWFrKCk7CgkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJJHRoaXMtPnggLT0gJG1hcmdpblsnUiddOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT54ICs9ICRtYXJnaW5bJ0wnXTsKCQkJCQl9CgkJCQkJJHRoaXMtPmxNYXJnaW4gKz0gJG1hcmdpblsnTCddOwoJCQkJCSR0aGlzLT5yTWFyZ2luICs9ICRtYXJnaW5bJ1InXTsKCQkJCX0KCQkJCSR3ID0gJHRoaXMtPmdldFJlbWFpbmluZ1dpZHRoKCk7CgkJCQkkd21heCA9ICgkdyAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSk7CgkJCX0gZWxzZSB7CgkJCQkvLyAxNjAgaXMgdGhlIG5vbi1icmVha2luZyBzcGFjZS4KCQkJCS8vIDE3MyBpcyBTSFkgKFNvZnQgSHlwZW4pLgoJCQkJLy8gXHB7Wn0gb3IgXHB7U2VwYXJhdG9yfTogYW55IGtpbmQgb2YgVW5pY29kZSB3aGl0ZXNwYWNlIG9yIGludmlzaWJsZSBzZXBhcmF0b3IuCgkJCQkvLyBccHtMb30gb3IgXHB7T3RoZXJfTGV0dGVyfTogYSBVbmljb2RlIGxldHRlciBvciBpZGVvZ3JhcGggdGhhdCBkb2VzIG5vdCBoYXZlIGxvd2VyY2FzZSBhbmQgdXBwZXJjYXNlIHZhcmlhbnRzLgoJCQkJLy8gXHB7TG99IGlzIG5lZWRlZCBiZWNhdXNlIENoaW5lc2UgY2hhcmFjdGVycyBhcmUgcGFja2VkIG5leHQgdG8gZWFjaCBvdGhlciB3aXRob3V0IHNwYWNlcyBpbiBiZXR3ZWVuLgoJCQkJaWYgKCgkYyAhPSAxNjApCgkJCQkJQU5EICgoJGMgPT0gMTczKQoJCQkJCQlPUiBwcmVnX21hdGNoKCR0aGlzLT5yZV9zcGFjZXMsIFRDUERGX0ZPTlRTOjp1bmljaHIoJGMsICR0aGlzLT5pc3VuaWNvZGUpKQoJCQkJCQlPUiAoKCRjID09IDQ1KQoJCQkJCQkJQU5EICgkaSA8ICgkbmIgLSAxKSkKCQkJCQkJCUFORCBAcHJlZ19tYXRjaCgnL1tccHtMfV0vJy4kdGhpcy0+cmVfc3BhY2VbJ20nXSwgVENQREZfRk9OVFM6OnVuaWNocigkcGMsICR0aGlzLT5pc3VuaWNvZGUpKQoJCQkJCQkJQU5EIEBwcmVnX21hdGNoKCcvW1xwe0x9XS8nLiR0aGlzLT5yZV9zcGFjZVsnbSddLCBUQ1BERl9GT05UUzo6dW5pY2hyKCRjaGFyc1soJGkgKyAxKV0sICR0aGlzLT5pc3VuaWNvZGUpKQoJCQkJCQkpCgkJCQkJKQoJCQkJKSB7CgkJCQkJLy8gdXBkYXRlIGxhc3QgYmxhbmsgc3BhY2UgcG9zaXRpb24KCQkJCQkkc2VwID0gJGk7CgkJCQkJLy8gY2hlY2sgaWYgaXMgYSBTSFkKCQkJCQlpZiAoKCRjID09IDE3MykgT1IgKCRjID09IDQ1KSkgewoJCQkJCQkkc2h5ID0gdHJ1ZTsKCQkJCQkJaWYgKCRwYyA9PSA0NSkgewoJCQkJCQkJJHRtcF9zaHlfcmVwbGFjZW1lbnRfd2lkdGggPSAwOwoJCQkJCQkJJHRtcF9zaHlfcmVwbGFjZW1lbnRfY2hhciA9ICcnOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRtcF9zaHlfcmVwbGFjZW1lbnRfd2lkdGggPSAkc2h5X3JlcGxhY2VtZW50X3dpZHRoOwoJCQkJCQkJJHRtcF9zaHlfcmVwbGFjZW1lbnRfY2hhciA9ICRzaHlfcmVwbGFjZW1lbnRfY2hhcjsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCSRzaHkgPSBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCQkvLyB1cGRhdGUgc3RyaW5nIGxlbmd0aAoJCQkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkgQU5EICgkYXJhYmljKSkgewoJCQkJCS8vIHdpdGggYmlkaXJlY3Rpb25hbCBhbGdvcml0aG0gc29tZSBjaGFycyBtYXkgYmUgY2hhbmdlZCBhZmZlY3RpbmcgdGhlIGxpbmUgbGVuZ3RoCgkJCQkJLy8gKioqIHZlcnkgc2xvdyAqKioKCQkJCQkkbCA9ICR0aGlzLT5HZXRBcnJTdHJpbmdXaWR0aChUQ1BERl9GT05UUzo6dXRmOEJpZGkoYXJyYXlfc2xpY2UoJGNoYXJzLCAkaiwgKCRpIC0gJGopKSwgJycsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCkpOwoJCQkJfSBlbHNlIHsKCQkJCQkkbCArPSAkdGhpcy0+R2V0Q2hhcldpZHRoKCRjKTsKCQkJCX0KCQkJCWlmICgoJGwgPiAkd21heCkgT1IgKCgkYyA9PSAxNzMpIEFORCAoKCRsICsgJHRtcF9zaHlfcmVwbGFjZW1lbnRfd2lkdGgpID4gJHdtYXgpKSApIHsKCQkJCQkvLyB3ZSBoYXZlIHJlYWNoZWQgdGhlIGVuZCBvZiBjb2x1bW4KCQkJCQlpZiAoJHNlcCA9PSAtMSkgewoJCQkJCQkvLyBjaGVjayBpZiB0aGUgbGluZSB3YXMgYWxyZWFkeSBzdGFydGVkCgkJCQkJCWlmICgoJHRoaXMtPnJ0bCBBTkQgKCR0aGlzLT54IDw9ICgkdGhpcy0+dyAtICR0aGlzLT5yTWFyZ2luIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddIC0gJG1hcmdpblsnUiddIC0gJGNocndpZHRoKSkpCgkJCQkJCQlPUiAoKCEkdGhpcy0+cnRsKSBBTkQgKCR0aGlzLT54ID49ICgkdGhpcy0+bE1hcmdpbiArICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSArICRtYXJnaW5bJ0wnXSArICRjaHJ3aWR0aCkpKSkgewoJCQkJCQkJLy8gcHJpbnQgYSB2b2lkIGNlbGwgYW5kIGdvIHRvIG5leHQgbGluZQoJCQkJCQkJJHRoaXMtPkNlbGwoJHcsICRoLCAnJywgMCwgMSk7CgkJCQkJCQkkbGluZWJyZWFrID0gdHJ1ZTsKCQkJCQkJCWlmICgkZmlyc3RsaW5lKSB7CgkJCQkJCQkJcmV0dXJuIChUQ1BERl9GT05UUzo6VW5pQXJyU3ViU3RyaW5nKCR1Y2hhcnMsICRqKSk7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkvLyB0cnVuY2F0ZSB0aGUgd29yZCBiZWNhdXNlIGRvIG5vdCBmaXQgb24gY29sdW1uCgkJCQkJCQkkdG1wc3RyID0gVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZygkdWNoYXJzLCAkaiwgJGkpOwoJCQkJCQkJaWYgKCRmaXJzdGxpbmUpIHsKCQkJCQkJCQkkc3RhcnR4ID0gJHRoaXMtPng7CgkJCQkJCQkJJHRtcGFyciA9IGFycmF5X3NsaWNlKCRjaGFycywgJGosICgkaSAtICRqKSk7CgkJCQkJCQkJaWYgKCRydGxtb2RlKSB7CgkJCQkJCQkJCSR0bXBhcnIgPSBUQ1BERl9GT05UUzo6dXRmOEJpZGkoJHRtcGFyciwgJHRtcHN0ciwgJHRoaXMtPnRtcHJ0bCwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQkJCQkJCQl9CgkJCQkJCQkJJGxpbmV3ID0gJHRoaXMtPkdldEFyclN0cmluZ1dpZHRoKCR0bXBhcnIpOwoJCQkJCQkJCXVuc2V0KCR0bXBhcnIpOwoJCQkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkJCSR0aGlzLT5lbmRsaW5leCA9ICRzdGFydHggLSAkbGluZXc7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJHRoaXMtPmVuZGxpbmV4ID0gJHN0YXJ0eCArICRsaW5ldzsKCQkJCQkJCQl9CgkJCQkJCQkJJHcgPSAkbGluZXc7CgkJCQkJCQkJJHRtcGNlbGxwYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCQkJCQlpZiAoJG1heGggPT0gMCkgewoJCQkJCQkJCQkkdGhpcy0+U2V0Q2VsbFBhZGRpbmcoMCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJaWYgKCRmaXJzdGJsb2NrIEFORCAkdGhpcy0+aXNSVExUZXh0RGlyKCkpIHsKCQkJCQkJCQkkdG1wc3RyID0gJHRoaXMtPnN0cmluZ1JpZ2h0VHJpbSgkdG1wc3RyKTsKCQkJCQkJCX0KCQkJCQkJCSR0aGlzLT5DZWxsKCR3LCAkaCwgJHRtcHN0ciwgMCwgMSwgJGFsaWduLCAkZmlsbCwgJGxpbmssICRzdHJldGNoKTsKCQkJCQkJCXVuc2V0KCR0bXBzdHIpOwoJCQkJCQkJaWYgKCRmaXJzdGxpbmUpIHsKCQkJCQkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHRtcGNlbGxwYWRkaW5nOwoJCQkJCQkJCXJldHVybiAoVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZygkdWNoYXJzLCAkaSkpOwoJCQkJCQkJfQoJCQkJCQkJJGogPSAkaTsKCQkJCQkJCS0tJGk7CgkJCQkJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQkvLyB3b3JkIHdyYXBwaW5nCgkJCQkJCWlmICgkdGhpcy0+cnRsIEFORCAoISRmaXJzdGJsb2NrKSBBTkQgKCRzZXAgPCAkaSkpIHsKCQkJCQkJCSRlbmRzcGFjZSA9IDE7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkZW5kc3BhY2UgPSAwOwoJCQkJCQl9CgkJCQkJCS8vIGNoZWNrIHRoZSBsZW5ndGggb2YgdGhlIG5leHQgc3RyaW5nCgkJCQkJCSRzdHJyZXN0ID0gVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZygkdWNoYXJzLCAoJHNlcCArICRlbmRzcGFjZSkpOwoJCQkJCQkkbmV4dHN0ciA9IFRDUERGX1NUQVRJQzo6cHJlZ1NwbGl0KCcvJy4kdGhpcy0+cmVfc3BhY2VbJ3AnXS4nLycsICR0aGlzLT5yZV9zcGFjZVsnbSddLCAkdGhpcy0+c3RyaW5nVHJpbSgkc3RycmVzdCkpOwoJCQkJCQlpZiAoaXNzZXQoJG5leHRzdHJbMF0pIEFORCAoJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRuZXh0c3RyWzBdKSA+ICRwdykpIHsKCQkJCQkJCS8vIHRydW5jYXRlIHRoZSB3b3JkIGJlY2F1c2UgZG8gbm90IGZpdCBvbiBhIGZ1bGwgcGFnZSB3aWR0aAoJCQkJCQkJJHRtcHN0ciA9IFRDUERGX0ZPTlRTOjpVbmlBcnJTdWJTdHJpbmcoJHVjaGFycywgJGosICRpKTsKCQkJCQkJCWlmICgkZmlyc3RsaW5lKSB7CgkJCQkJCQkJJHN0YXJ0eCA9ICR0aGlzLT54OwoJCQkJCQkJCSR0bXBhcnIgPSBhcnJheV9zbGljZSgkY2hhcnMsICRqLCAoJGkgLSAkaikpOwoJCQkJCQkJCWlmICgkcnRsbW9kZSkgewoJCQkJCQkJCQkkdG1wYXJyID0gVENQREZfRk9OVFM6OnV0ZjhCaWRpKCR0bXBhcnIsICR0bXBzdHIsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJCQkJfQoJCQkJCQkJCSRsaW5ldyA9ICR0aGlzLT5HZXRBcnJTdHJpbmdXaWR0aCgkdG1wYXJyKTsKCQkJCQkJCQl1bnNldCgkdG1wYXJyKTsKCQkJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJCQkkdGhpcy0+ZW5kbGluZXggPSAoJHN0YXJ0eCAtICRsaW5ldyk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJHRoaXMtPmVuZGxpbmV4ID0gKCRzdGFydHggKyAkbGluZXcpOwoJCQkJCQkJCX0KCQkJCQkJCQkkdyA9ICRsaW5ldzsKCQkJCQkJCQkkdG1wY2VsbHBhZGRpbmcgPSAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCQkJCQkJCWlmICgkbWF4aCA9PSAwKSB7CgkJCQkJCQkJCSR0aGlzLT5TZXRDZWxsUGFkZGluZygwKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoJGZpcnN0YmxvY2sgQU5EICR0aGlzLT5pc1JUTFRleHREaXIoKSkgewoJCQkJCQkJCSR0bXBzdHIgPSAkdGhpcy0+c3RyaW5nUmlnaHRUcmltKCR0bXBzdHIpOwoJCQkJCQkJfQoJCQkJCQkJJHRoaXMtPkNlbGwoJHcsICRoLCAkdG1wc3RyLCAwLCAxLCAkYWxpZ24sICRmaWxsLCAkbGluaywgJHN0cmV0Y2gpOwoJCQkJCQkJdW5zZXQoJHRtcHN0cik7CgkJCQkJCQlpZiAoJGZpcnN0bGluZSkgewoJCQkJCQkJCSR0aGlzLT5jZWxsX3BhZGRpbmcgPSAkdG1wY2VsbHBhZGRpbmc7CgkJCQkJCQkJcmV0dXJuIChUQ1BERl9GT05UUzo6VW5pQXJyU3ViU3RyaW5nKCR1Y2hhcnMsICRpKSk7CgkJCQkJCQl9CgkJCQkJCQkkaiA9ICRpOwoJCQkJCQkJLS0kaTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCS8vIHdvcmQgd3JhcHBpbmcKCQkJCQkJCWlmICgkc2h5KSB7CgkJCQkJCQkJLy8gYWRkIGh5cGVuIChtaW51cyBzeW1ib2wpIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUKCQkJCQkJCQkkc2h5X3dpZHRoID0gJHRtcF9zaHlfcmVwbGFjZW1lbnRfd2lkdGg7CgkJCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCQkJJHNoeV9jaGFyX2xlZnQgPSAkdG1wX3NoeV9yZXBsYWNlbWVudF9jaGFyOwoJCQkJCQkJCQkkc2h5X2NoYXJfcmlnaHQgPSAnJzsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkc2h5X2NoYXJfbGVmdCA9ICcnOwoJCQkJCQkJCQkkc2h5X2NoYXJfcmlnaHQgPSAkdG1wX3NoeV9yZXBsYWNlbWVudF9jaGFyOwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHNoeV93aWR0aCA9IDA7CgkJCQkJCQkJJHNoeV9jaGFyX2xlZnQgPSAnJzsKCQkJCQkJCQkkc2h5X2NoYXJfcmlnaHQgPSAnJzsKCQkJCQkJCX0KCQkJCQkJCSR0bXBzdHIgPSBUQ1BERl9GT05UUzo6VW5pQXJyU3ViU3RyaW5nKCR1Y2hhcnMsICRqLCAoJHNlcCArICRlbmRzcGFjZSkpOwoJCQkJCQkJaWYgKCRmaXJzdGxpbmUpIHsKCQkJCQkJCQkkc3RhcnR4ID0gJHRoaXMtPng7CgkJCQkJCQkJJHRtcGFyciA9IGFycmF5X3NsaWNlKCRjaGFycywgJGosICgoJHNlcCArICRlbmRzcGFjZSkgLSAkaikpOwoJCQkJCQkJCWlmICgkcnRsbW9kZSkgewoJCQkJCQkJCQkkdG1wYXJyID0gVENQREZfRk9OVFM6OnV0ZjhCaWRpKCR0bXBhcnIsICR0bXBzdHIsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJCQkJfQoJCQkJCQkJCSRsaW5ldyA9ICR0aGlzLT5HZXRBcnJTdHJpbmdXaWR0aCgkdG1wYXJyKTsKCQkJCQkJCQl1bnNldCgkdG1wYXJyKTsKCQkJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJCQkkdGhpcy0+ZW5kbGluZXggPSAkc3RhcnR4IC0gJGxpbmV3IC0gJHNoeV93aWR0aDsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkdGhpcy0+ZW5kbGluZXggPSAkc3RhcnR4ICsgJGxpbmV3ICsgJHNoeV93aWR0aDsKCQkJCQkJCQl9CgkJCQkJCQkJJHcgPSAkbGluZXc7CgkJCQkJCQkJJHRtcGNlbGxwYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCQkJCQlpZiAoJG1heGggPT0gMCkgewoJCQkJCQkJCQkkdGhpcy0+U2V0Q2VsbFBhZGRpbmcoMCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJLy8gcHJpbnQgdGhlIGxpbmUKCQkJCQkJCWlmICgkZmlyc3RibG9jayBBTkQgJHRoaXMtPmlzUlRMVGV4dERpcigpKSB7CgkJCQkJCQkJJHRtcHN0ciA9ICR0aGlzLT5zdHJpbmdSaWdodFRyaW0oJHRtcHN0cik7CgkJCQkJCQl9CgkJCQkJCQkkdGhpcy0+Q2VsbCgkdywgJGgsICRzaHlfY2hhcl9sZWZ0LiR0bXBzdHIuJHNoeV9jaGFyX3JpZ2h0LCAwLCAxLCAkYWxpZ24sICRmaWxsLCAkbGluaywgJHN0cmV0Y2gpOwoJCQkJCQkJdW5zZXQoJHRtcHN0cik7CgkJCQkJCQlpZiAoJGZpcnN0bGluZSkgewoJCQkJCQkJCWlmICgkY2hhcnNbJHNlcF0gPT0gNDUpIHsKCQkJCQkJCQkJJGVuZHNwYWNlICs9IDE7CgkJCQkJCQkJfQoJCQkJCQkJCS8vIHJldHVybiB0aGUgcmVtYWluaW5nIHRleHQKCQkJCQkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHRtcGNlbGxwYWRkaW5nOwoJCQkJCQkJCXJldHVybiAoVENQREZfRk9OVFM6OlVuaUFyclN1YlN0cmluZygkdWNoYXJzLCAoJHNlcCArICRlbmRzcGFjZSkpKTsKCQkJCQkJCX0KCQkJCQkJCSRpID0gJHNlcDsKCQkJCQkJCSRzZXAgPSAtMTsKCQkJCQkJCSRzaHkgPSBmYWxzZTsKCQkJCQkJCSRqID0gKCRpICsgMSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gYWNjb3VudCBmb3IgbWFyZ2luIGNoYW5nZXMKCQkJCQlpZiAoKCgkdGhpcy0+eSArICR0aGlzLT5sYXN0aCkgPiAkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlcikgQU5EICgkdGhpcy0+aW5QYWdlQm9keSgpKSkgewoJCQkJCQkkdGhpcy0+QWNjZXB0UGFnZUJyZWFrKCk7CgkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkkdGhpcy0+eCAtPSAkbWFyZ2luWydSJ107CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdGhpcy0+eCArPSAkbWFyZ2luWydMJ107CgkJCQkJCX0KCQkJCQkJJHRoaXMtPmxNYXJnaW4gKz0gJG1hcmdpblsnTCddOwoJCQkJCQkkdGhpcy0+ck1hcmdpbiArPSAkbWFyZ2luWydSJ107CgkJCQkJfQoJCQkJCSR3ID0gJHRoaXMtPmdldFJlbWFpbmluZ1dpZHRoKCk7CgkJCQkJJHdtYXggPSAkdyAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJCQlpZiAoJGxpbmVicmVhaykgewoJCQkJCQkkbGluZWJyZWFrID0gZmFsc2U7CgkJCQkJfSBlbHNlIHsKCQkJCQkJKyskbmw7CgkJCQkJCSRsID0gMDsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gc2F2ZSBsYXN0IGNoYXJhY3RlcgoJCQkkcGMgPSAkYzsKCQkJKyskaTsKCQl9IC8vIGVuZCB3aGlsZSBpIDwgbmIKCQkvLyBwcmludCBsYXN0IHN1YnN0cmluZyAoaWYgYW55KQoJCWlmICgkbCA+IDApIHsKCQkJc3dpdGNoICgkYWxpZ24pIHsKCQkJCWNhc2UgJ0onOgoJCQkJY2FzZSAnQyc6IHsKCQkJCQkkdyA9ICR3OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnTCc6IHsKCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkkdyA9ICR3OwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR3ID0gJGw7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnUic6IHsKCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkkdyA9ICRsOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR3ID0gJHc7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZGVmYXVsdDogewoJCQkJCSR3ID0gJGw7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJJHRtcHN0ciA9IFRDUERGX0ZPTlRTOjpVbmlBcnJTdWJTdHJpbmcoJHVjaGFycywgJGosICRuYik7CgkJCWlmICgkZmlyc3RsaW5lKSB7CgkJCQkkc3RhcnR4ID0gJHRoaXMtPng7CgkJCQkkdG1wYXJyID0gYXJyYXlfc2xpY2UoJGNoYXJzLCAkaiwgKCRuYiAtICRqKSk7CgkJCQlpZiAoJHJ0bG1vZGUpIHsKCQkJCQkkdG1wYXJyID0gVENQREZfRk9OVFM6OnV0ZjhCaWRpKCR0bXBhcnIsICR0bXBzdHIsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQl9CgkJCQkkbGluZXcgPSAkdGhpcy0+R2V0QXJyU3RyaW5nV2lkdGgoJHRtcGFycik7CgkJCQl1bnNldCgkdG1wYXJyKTsKCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJJHRoaXMtPmVuZGxpbmV4ID0gJHN0YXJ0eCAtICRsaW5ldzsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmVuZGxpbmV4ID0gJHN0YXJ0eCArICRsaW5ldzsKCQkJCX0KCQkJCSR3ID0gJGxpbmV3OwoJCQkJJHRtcGNlbGxwYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCWlmICgkbWF4aCA9PSAwKSB7CgkJCQkJJHRoaXMtPlNldENlbGxQYWRkaW5nKDApOwoJCQkJfQoJCQl9CgkJCWlmICgkZmlyc3RibG9jayBBTkQgJHRoaXMtPmlzUlRMVGV4dERpcigpKSB7CgkJCQkkdG1wc3RyID0gJHRoaXMtPnN0cmluZ1JpZ2h0VHJpbSgkdG1wc3RyKTsKCQkJfQoJCQkkdGhpcy0+Q2VsbCgkdywgJGgsICR0bXBzdHIsIDAsICRsbiwgJGFsaWduLCAkZmlsbCwgJGxpbmssICRzdHJldGNoKTsKCQkJdW5zZXQoJHRtcHN0cik7CgkJCWlmICgkZmlyc3RsaW5lKSB7CgkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJHRtcGNlbGxwYWRkaW5nOwoJCQkJcmV0dXJuIChUQ1BERl9GT05UUzo6VW5pQXJyU3ViU3RyaW5nKCR1Y2hhcnMsICRuYikpOwoJCQl9CgkJCSsrJG5sOwoJCX0KCQlpZiAoJGZpcnN0bGluZSkgewoJCQlyZXR1cm4gJyc7CgkJfQoJCXJldHVybiAkbmw7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSByZW1haW5pbmcgd2lkdGggYmV0d2VlbiB0aGUgY3VycmVudCBwb3NpdGlvbiBhbmQgbWFyZ2lucy4KCSAqIEByZXR1cm4gaW50IFJldHVybiB0aGUgcmVtYWluaW5nIHdpZHRoCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRSZW1haW5pbmdXaWR0aCgpIHsKCQlsaXN0KCR0aGlzLT54LCAkdGhpcy0+eSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygwLCAkdGhpcy0+eCwgJHRoaXMtPnkpOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCXJldHVybiAoJHRoaXMtPnggLSAkdGhpcy0+bE1hcmdpbik7CgkJfSBlbHNlIHsKCQkJcmV0dXJuICgkdGhpcy0+dyAtICR0aGlzLT5yTWFyZ2luIC0gJHRoaXMtPngpOwoJCX0KCX0KCgkvKioKCSAqIFNldCB0aGUgYmxvY2sgZGltZW5zaW9ucyBhY2NvdW50aW5nIGZvciBwYWdlIGJyZWFrcyBhbmQgcGFnZS9jb2x1bW4gZml0dGluZwoJICogQHBhcmFtICR3IChmbG9hdCkgd2lkdGgKCSAqIEBwYXJhbSAkaCAoZmxvYXQpIGhlaWdodAoJICogQHBhcmFtICR4IChmbG9hdCkgWCBjb29yZGluYXRlCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBZIGNvb2RpYW50ZQoJICogQHBhcmFtICRmaXRvbnBhZ2UgKGJvb2xlYW4pIGlmIHRydWUgdGhlIGJsb2NrIGlzIHJlc2l6ZWQgdG8gbm90IGV4Y2VlZCBwYWdlIGRpbWVuc2lvbnMuCgkgKiBAcmV0dXJuIGFycmF5KCR3LCAkaCwgJHgsICR5KQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuNS4wMDkgKDIwMTAtMDctMDUpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBmaXRCbG9jaygkdywgJGgsICR4LCAkeSwgJGZpdG9ucGFnZT1mYWxzZSkgewoJCWlmICgkdyA8PSAwKSB7CgkJCS8vIHNldCBtYXhpbXVtIHdpZHRoCgkJCSR3ID0gKCR0aGlzLT53IC0gJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbik7CgkJCWlmICgkdyA8PSAwKSB7CgkJCQkkdyA9IDE7CgkJCX0KCQl9CgkJaWYgKCRoIDw9IDApIHsKCQkJLy8gc2V0IG1heGltdW0gaGVpZ2h0CgkJCSRoID0gKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyIC0gJHRoaXMtPnRNYXJnaW4pOwoJCQlpZiAoJGggPD0gMCkgewoJCQkJJGggPSAxOwoJCQl9CgkJfQoJCS8vIHJlc2l6ZSB0aGUgYmxvY2sgdG8gYmUgdmVydGljYWxseSBjb250YWluZWQgb24gYSBzaW5nbGUgcGFnZSBvciBzaW5nbGUgY29sdW1uCgkJaWYgKCRmaXRvbnBhZ2UgT1IgJHRoaXMtPkF1dG9QYWdlQnJlYWspIHsKCQkJJHJhdGlvX3doID0gKCR3IC8gJGgpOwoJCQlpZiAoJGggPiAoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgLSAkdGhpcy0+dE1hcmdpbikpIHsKCQkJCSRoID0gJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgLSAkdGhpcy0+dE1hcmdpbjsKCQkJCSR3ID0gKCRoICogJHJhdGlvX3doKTsKCQkJfQoJCQkvLyByZXNpemUgdGhlIGJsb2NrIHRvIGJlIGhvcml6b250YWxseSBjb250YWluZWQgb24gYSBzaW5nbGUgcGFnZSBvciBzaW5nbGUgY29sdW1uCgkJCWlmICgkZml0b25wYWdlKSB7CgkJCQkkbWF4dyA9ICgkdGhpcy0+dyAtICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW4pOwoJCQkJaWYgKCR3ID4gJG1heHcpIHsKCQkJCQkkdyA9ICRtYXh3OwoJCQkJCSRoID0gKCR3IC8gJHJhdGlvX3doKTsKCQkJCX0KCQkJfQoJCX0KCQkvLyBDaGVjayB3aGV0aGVyIHdlIG5lZWQgYSBuZXcgcGFnZSBvciBuZXcgY29sdW1uIGZpcnN0IGFzIHRoaXMgZG9lcyBub3QgZml0CgkJJHByZXZfeCA9ICR0aGlzLT54OwoJCSRwcmV2X3kgPSAkdGhpcy0+eTsKCQlpZiAoJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCRoLCAkeSkgT1IgKCR0aGlzLT55IDwgJHByZXZfeSkpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR4ICs9ICgkcHJldl94IC0gJHRoaXMtPngpOwoJCQl9IGVsc2UgewoJCQkJJHggKz0gKCR0aGlzLT54IC0gJHByZXZfeCk7CgkJCX0KCQkJJHRoaXMtPm5ld2xpbmUgPSB0cnVlOwoJCX0KCQkvLyByZXNpemUgdGhlIGJsb2NrIHRvIGJlIGNvbnRhaW5lZCBvbiB0aGUgcmVtYWluaW5nIGF2YWlsYWJsZSBwYWdlIG9yIGNvbHVtbiBzcGFjZQoJCWlmICgkZml0b25wYWdlKSB7CgkJCSRyYXRpb193aCA9ICgkdyAvICRoKTsKCQkJaWYgKCgkeSArICRoKSA+ICR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyKSB7CgkJCQkkaCA9ICR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyIC0gJHk7CgkJCQkkdyA9ICgkaCAqICRyYXRpb193aCk7CgkJCX0KCQkJaWYgKCghJHRoaXMtPnJ0bCkgQU5EICgoJHggKyAkdykgPiAoJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbikpKSB7CgkJCQkkdyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkeDsKCQkJCSRoID0gKCR3IC8gJHJhdGlvX3doKTsKCQkJfSBlbHNlaWYgKCgkdGhpcy0+cnRsKSBBTkQgKCgkeCAtICR3KSA8ICgkdGhpcy0+bE1hcmdpbikpKSB7CgkJCQkkdyA9ICR4IC0gJHRoaXMtPmxNYXJnaW47CgkJCQkkaCA9ICgkdyAvICRyYXRpb193aCk7CgkJCX0KCQl9CgkJcmV0dXJuIGFycmF5KCR3LCAkaCwgJHgsICR5KTsKCX0KCgkvKioKCSAqIFB1dHMgYW4gaW1hZ2UgaW4gdGhlIHBhZ2UuCgkgKiBUaGUgdXBwZXItbGVmdCBjb3JuZXIgbXVzdCBiZSBnaXZlbi4KCSAqIFRoZSBkaW1lbnNpb25zIGNhbiBiZSBzcGVjaWZpZWQgaW4gZGlmZmVyZW50IHdheXM6PHVsPgoJICogPGxpPmV4cGxpY2l0IHdpZHRoIGFuZCBoZWlnaHQgKGV4cHJlc3NlZCBpbiB1c2VyIHVuaXQpPC9saT4KCSAqIDxsaT5vbmUgZXhwbGljaXQgZGltZW5zaW9uLCB0aGUgb3RoZXIgYmVpbmcgY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IGluIG9yZGVyIHRvIGtlZXAgdGhlIG9yaWdpbmFsIHByb3BvcnRpb25zPC9saT4KCSAqIDxsaT5ubyBleHBsaWNpdCBkaW1lbnNpb24sIGluIHdoaWNoIGNhc2UgdGhlIGltYWdlIGlzIHB1dCBhdCA3MiBkcGk8L2xpPjwvdWw+CgkgKiBTdXBwb3J0ZWQgZm9ybWF0cyBhcmUgSlBFRyBhbmQgUE5HIGltYWdlcyB3aGl0b3V0IEdEIGxpYnJhcnkgYW5kIGFsbCBpbWFnZXMgc3VwcG9ydGVkIGJ5IEdEOiBHRCwgR0QyLCBHRDJQQVJULCBHSUYsIEpQRUcsIFBORywgQk1QLCBYQk0sIFhQTTsKCSAqIFRoZSBmb3JtYXQgY2FuIGJlIHNwZWNpZmllZCBleHBsaWNpdGx5IG9yIGluZmVycmVkIGZyb20gdGhlIGZpbGUgZXh0ZW5zaW9uLjxiciAvPgoJICogSXQgaXMgcG9zc2libGUgdG8gcHV0IGEgbGluayBvbiB0aGUgaW1hZ2UuPGJyIC8+CgkgKiBSZW1hcms6IGlmIGFuIGltYWdlIGlzIHVzZWQgc2V2ZXJhbCB0aW1lcywgb25seSBvbmUgY29weSB3aWxsIGJlIGVtYmVkZGVkIGluIHRoZSBmaWxlLjxiciAvPgoJICogQHBhcmFtICRmaWxlIChzdHJpbmcpIE5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2Ugb3IgYSAnQCcgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRoZSBpbWFnZSBkYXRhIHN0cmluZy4gVG8gbGluayBhbiBpbWFnZSB3aXRob3V0IGVtYmVkZGluZyBpdCBvbiB0aGUgZG9jdW1lbnQsIHNldCBhbiBhc3RlcmlzayBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBVUkwgKGkuZS46ICcqaHR0cDovL3d3dy5leGFtcGxlLmNvbS9pbWFnZS5qcGcnKS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciAoTFRSKSBvciB1cHBlci1yaWdodCBjb3JuZXIgKFJUTCkuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgKExUUikgb3IgdXBwZXItcmlnaHQgY29ybmVyIChSVEwpLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIGltYWdlIGluIHRoZSBwYWdlLiBJZiBub3Qgc3BlY2lmaWVkIG9yIGVxdWFsIHRvIHplcm8sIGl0IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gdGhlIHBhZ2UuIElmIG5vdCBzcGVjaWZpZWQgb3IgZXF1YWwgdG8gemVybywgaXQgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIEltYWdlIGZvcm1hdC4gUG9zc2libGUgdmFsdWVzIGFyZSAoY2FzZSBpbnNlbnNpdGl2ZSk6IEpQRUcgYW5kIFBORyAod2hpdG91dCBHRCBsaWJyYXJ5KSBhbmQgYWxsIGltYWdlcyBzdXBwb3J0ZWQgYnkgR0Q6IEdELCBHRDIsIEdEMlBBUlQsIEdJRiwgSlBFRywgUE5HLCBCTVAsIFhCTSwgWFBNOy4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHR5cGUgaXMgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBleHRlbnNpb24uCgkgKiBAcGFyYW0gJGxpbmsgKG1peGVkKSBVUkwgb3IgaWRlbnRpZmllciByZXR1cm5lZCBieSBBZGRMaW5rKCkuCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEluZGljYXRlcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVyIG5leHQgdG8gaW1hZ2UgaW5zZXJ0aW9uIHJlbGF0aXZlIHRvIGltYWdlIGhlaWdodC4gVGhlIHZhbHVlIGNhbiBiZTo8dWw+PGxpPlQ6IHRvcC1yaWdodCBmb3IgTFRSIG9yIHRvcC1sZWZ0IGZvciBSVEw8L2xpPjxsaT5NOiBtaWRkbGUtcmlnaHQgZm9yIExUUiBvciBtaWRkbGUtbGVmdCBmb3IgUlRMPC9saT48bGk+QjogYm90dG9tLXJpZ2h0IGZvciBMVFIgb3IgYm90dG9tLWxlZnQgZm9yIFJUTDwvbGk+PGxpPk46IG5leHQgbGluZTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkcmVzaXplIChtaXhlZCkgSWYgdHJ1ZSByZXNpemUgKHJlZHVjZSkgdGhlIGltYWdlIHRvIGZpdCAkdyBhbmQgJGggKHJlcXVpcmVzIEdEIG9yIEltYWdlTWFnaWNrIGxpYnJhcnkpOyBpZiBmYWxzZSBkbyBub3QgcmVzaXplOyBpZiAyIGZvcmNlIHJlc2l6ZSBpbiBhbGwgY2FzZXMgKHVwc2NhbGluZyBhbmQgZG93bnNjYWxpbmcpLgoJICogQHBhcmFtICRkcGkgKGludCkgZG90LXBlci1pbmNoIHJlc29sdXRpb24gdXNlZCBvbiByZXNpemUKCSAqIEBwYXJhbSAkcGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIGltYWdlIG9uIHRoZSBjdXJyZW50IGxpbmUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIDogbGVmdCBhbGlnbjwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5SIDogcmlnaHQgYWxpZ248L2xpPjxsaT4nJyA6IGVtcHR5IHN0cmluZyA6IGxlZnQgZm9yIExUUiBvciByaWdodCBmb3IgUlRMPC9saT48L3VsPgoJICogQHBhcmFtICRpc21hc2sgKGJvb2xlYW4pIHRydWUgaWYgdGhpcyBpbWFnZSBpcyBhIG1hc2ssIGZhbHNlIG90aGVyd2lzZQoJICogQHBhcmFtICRpbWdtYXNrIChtaXhlZCkgaW1hZ2Ugb2JqZWN0IHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gb3IgZmFsc2UKCSAqIEBwYXJhbSAkYm9yZGVyIChtaXhlZCkgSW5kaWNhdGVzIGlmIGJvcmRlcnMgbXVzdCBiZSBkcmF3biBhcm91bmQgdGhlIGNlbGwuIFRoZSB2YWx1ZSBjYW4gYmUgYSBudW1iZXI6PHVsPjxsaT4wOiBubyBib3JkZXIgKGRlZmF1bHQpPC9saT48bGk+MTogZnJhbWU8L2xpPjwvdWw+IG9yIGEgc3RyaW5nIGNvbnRhaW5pbmcgc29tZSBvciBhbGwgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzIChpbiBhbnkgb3JkZXIpOjx1bD48bGk+TDogbGVmdDwvbGk+PGxpPlQ6IHRvcDwvbGk+PGxpPlI6IHJpZ2h0PC9saT48bGk+QjogYm90dG9tPC9saT48L3VsPiBvciBhbiBhcnJheSBvZiBsaW5lIHN0eWxlcyBmb3IgZWFjaCBib3JkZXIgZ3JvdXAgLSBmb3IgZXhhbXBsZTogYXJyYXkoJ0xUUkInID0+IGFycmF5KCd3aWR0aCcgPT4gMiwgJ2NhcCcgPT4gJ2J1dHQnLCAnam9pbicgPT4gJ21pdGVyJywgJ2Rhc2gnID0+IDAsICdjb2xvcicgPT4gYXJyYXkoMCwgMCwgMCkpKQoJICogQHBhcmFtICRmaXRib3ggKG1peGVkKSBJZiBub3QgZmFsc2Ugc2NhbGUgaW1hZ2UgZGltZW5zaW9ucyBwcm9wb3J0aW9uYWxseSB0byBmaXQgd2l0aGluIHRoZSAoJHcsICRoKSBib3guICRmaXRib3ggY2FuIGJlIHRydWUgb3IgYSAyIGNoYXJhY3RlcnMgc3RyaW5nIGluZGljYXRpbmcgdGhlIGltYWdlIGFsaWdubWVudCBpbnNpZGUgdGhlIGJveC4gVGhlIGZpcnN0IGNoYXJhY3RlciBpbmRpY2F0ZSB0aGUgaG9yaXpvbnRhbCBhbGlnbm1lbnQgKEwgPSBsZWZ0LCBDID0gY2VudGVyLCBSID0gcmlnaHQpIHRoZSBzZWNvbmQgY2hhcmFjdGVyIGluZGljYXRlIHRoZSB2ZXJ0aWNhbCBhbGdubWVudCAoVCA9IHRvcCwgTSA9IG1pZGRsZSwgQiA9IGJvdHRvbSkuCgkgKiBAcGFyYW0gJGhpZGRlbiAoYm9vbGVhbikgSWYgdHJ1ZSBkbyBub3QgZGlzcGxheSB0aGUgaW1hZ2UuCgkgKiBAcGFyYW0gJGZpdG9ucGFnZSAoYm9vbGVhbikgSWYgdHJ1ZSB0aGUgaW1hZ2UgaXMgcmVzaXplZCB0byBub3QgZXhjZWVkIHBhZ2UgZGltZW5zaW9ucy4KCSAqIEBwYXJhbSAkYWx0IChib29sZWFuKSBJZiB0cnVlIHRoZSBpbWFnZSB3aWxsIGJlIGFkZGVkIGFzIGFsdGVybmF0aXZlIGFuZCBub3QgZGlyZWN0bHkgcHJpbnRlZCAodGhlIElEIG9mIHRoZSBpbWFnZSB3aWxsIGJlIHJldHVybmVkKS4KCSAqIEBwYXJhbSAkYWx0aW1ncyAoYXJyYXkpIEFycmF5IG9mIGFsdGVybmF0ZSBpbWFnZXMgSURzLiBFYWNoIGFsdGVybmF0aXZlIGltYWdlIG11c3QgYmUgYW4gYXJyYXkgd2l0aCB0d28gdmFsdWVzOiBhbiBpbnRlZ2VyIHJlcHJlc2VudGluZyB0aGUgaW1hZ2UgSUQgKHRoZSB2YWx1ZSByZXR1cm5lZCBieSB0aGUgSW1hZ2UgbWV0aG9kKSBhbmQgYSBib29sZWFuIHZhbHVlIHRvIGluZGljYXRlIGlmIHRoZSBpbWFnZSBpcyB0aGUgZGVmYXVsdCBmb3IgcHJpbnRpbmcuCgkgKiBAcmV0dXJuIGltYWdlIGluZm9ybWF0aW9uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4xCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBJbWFnZSgkZmlsZSwgJHg9JycsICR5PScnLCAkdz0wLCAkaD0wLCAkdHlwZT0nJywgJGxpbms9JycsICRhbGlnbj0nJywgJHJlc2l6ZT1mYWxzZSwgJGRwaT0zMDAsICRwYWxpZ249JycsICRpc21hc2s9ZmFsc2UsICRpbWdtYXNrPWZhbHNlLCAkYm9yZGVyPTAsICRmaXRib3g9ZmFsc2UsICRoaWRkZW49ZmFsc2UsICRmaXRvbnBhZ2U9ZmFsc2UsICRhbHQ9ZmFsc2UsICRhbHRpbWdzPWFycmF5KCkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJLy8gY2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeQoJCWxpc3QoJHgsICR5KSA9ICR0aGlzLT5jaGVja1BhZ2VSZWdpb25zKCRoLCAkeCwgJHkpOwoJCSRleHVybCA9ICcnOyAvLyBleHRlcm5hbCBzdHJlYW1zCgkJJGltc2l6ZSA9IEZBTFNFOwoJCS8vIGNoZWNrIGlmIHdlIGFyZSBwYXNzaW5nIGFuIGltYWdlIGFzIGZpbGUgb3Igc3RyaW5nCgkJaWYgKCRmaWxlWzBdID09PSAnQCcpIHsKCQkJLy8gaW1hZ2UgZnJvbSBzdHJpbmcKCQkJJGltZ2RhdGEgPSBzdWJzdHIoJGZpbGUsIDEpOwoJCX0gZWxzZSB7IC8vIGltYWdlIGZpbGUKCQkJaWYgKCRmaWxlWzBdID09PSAnKicpIHsKCQkJCS8vIGltYWdlIGFzIGV4dGVybmFsIHN0cmVhbQoJCQkJJGZpbGUgPSBzdWJzdHIoJGZpbGUsIDEpOwoJCQkJJGV4dXJsID0gJGZpbGU7CgkJCX0KCQkJLy8gY2hlY2sgaWYgaXMgYSBsb2NhbCBmaWxlCgkJCWlmICghQGZpbGVfZXhpc3RzKCRmaWxlKSkgewoJCQkJLy8gdHJ5IHRvIGVuY29kZSBzcGFjZXMgb24gZmlsZW5hbWUKCQkJCSR0ZmlsZSA9IHN0cl9yZXBsYWNlKCcgJywgJyUyMCcsICRmaWxlKTsKCQkJCWlmIChAZmlsZV9leGlzdHMoJHRmaWxlKSkgewoJCQkJCSRmaWxlID0gJHRmaWxlOwoJCQkJfQoJCQl9CgkJCWlmICgoJGltc2l6ZSA9IEBnZXRpbWFnZXNpemUoJGZpbGUpKSA9PT0gRkFMU0UpIHsKCQkJCWlmIChpbl9hcnJheSgkZmlsZSwgJHRoaXMtPmltYWdla2V5cykpIHsKCQkJCQkvLyBnZXQgZXhpc3RpbmcgaW1hZ2UgZGF0YQoJCQkJCSRpbmZvID0gJHRoaXMtPmdldEltYWdlQnVmZmVyKCRmaWxlKTsKCQkJCQkkaW1zaXplID0gYXJyYXkoJGluZm9bJ3cnXSwgJGluZm9bJ2gnXSk7CQkJCQoJCQkJfSBlbHNlaWYgKHN0cnBvcygkZmlsZSwgJ19fdGNwZGZfaW1nJykgPT09IEZBTFNFKSB7CgkJCQkJJGltZ2RhdGEgPSBUQ1BERl9TVEFUSUM6OmZpbGVHZXRDb250ZW50cygkZmlsZSk7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCFlbXB0eSgkaW1nZGF0YSkpIHsKCQkJLy8gY29weSBpbWFnZSB0byBjYWNoZQoJCQkkb3JpZ2luYWxfZmlsZSA9ICRmaWxlOwoJCQkkZmlsZSA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2ltZycpOwoJCQkkZnAgPSBmb3BlbigkZmlsZSwgJ3cnKTsKCQkJZndyaXRlKCRmcCwgJGltZ2RhdGEpOwoJCQlmY2xvc2UoJGZwKTsKCQkJdW5zZXQoJGltZ2RhdGEpOwoJCQkkaW1zaXplID0gQGdldGltYWdlc2l6ZSgkZmlsZSk7CgkJCWlmICgkaW1zaXplID09PSBGQUxTRSkgewoJCQkJdW5saW5rKCRmaWxlKTsKCQkJCSRmaWxlID0gJG9yaWdpbmFsX2ZpbGU7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+Y2FjaGVkX2ZpbGVzW10gPSAkZmlsZTsKCQkJfQoJCX0KCQlpZiAoJGltc2l6ZSA9PT0gRkFMU0UpIHsKCQkJaWYgKCgkdyA+IDApIEFORCAoJGggPiAwKSkgewoJCQkJLy8gZ2V0IG1lYXN1cmVzIGZyb20gc3BlY2lmaWVkIGRhdGEKCQkJCSRwdyA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHcsIDAsICR0aGlzLT5wZGZ1bml0LCB0cnVlKSAqICR0aGlzLT5pbWdzY2FsZSAqICR0aGlzLT5rOwoJCQkJJHBoID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkaCwgMCwgJHRoaXMtPnBkZnVuaXQsIHRydWUpICogJHRoaXMtPmltZ3NjYWxlICogJHRoaXMtPms7CgkJCQkkaW1zaXplID0gYXJyYXkoJHB3LCAkcGgpOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPkVycm9yKCdbSW1hZ2VdIFVuYWJsZSB0byBnZXQgdGhlIHNpemUgb2YgdGhlIGltYWdlOiAnLiRmaWxlKTsKCQkJfQoJCX0KCQkvLyBmaWxlIGhhc2gKCQkkZmlsZWhhc2ggPSBtZDUoJHRoaXMtPmZpbGVfaWQuJGZpbGUpOwoJCS8vIGdldCBvcmlnaW5hbCBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IGluIHBpeGVscwoJCWxpc3QoJHBpeHcsICRwaXhoKSA9ICRpbXNpemU7CgkJLy8gY2FsY3VsYXRlIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQgb24gZG9jdW1lbnQKCQlpZiAoKCR3IDw9IDApIEFORCAoJGggPD0gMCkpIHsKCQkJLy8gY29udmVydCBpbWFnZSBzaXplIHRvIGRvY3VtZW50IHVuaXQKCQkJJHcgPSAkdGhpcy0+cGl4ZWxzVG9Vbml0cygkcGl4dyk7CgkJCSRoID0gJHRoaXMtPnBpeGVsc1RvVW5pdHMoJHBpeGgpOwoJCX0gZWxzZWlmICgkdyA8PSAwKSB7CgkJCSR3ID0gJGggKiAkcGl4dyAvICRwaXhoOwoJCX0gZWxzZWlmICgkaCA8PSAwKSB7CgkJCSRoID0gJHcgKiAkcGl4aCAvICRwaXh3OwoJCX0gZWxzZWlmICgoJGZpdGJveCAhPT0gZmFsc2UpIEFORCAoJHcgPiAwKSBBTkQgKCRoID4gMCkpIHsKCQkJaWYgKHN0cmxlbigkZml0Ym94KSAhPT0gMikgewoJCQkJLy8gc2V0IGRlZmF1bHQgYWxpZ25tZW50CgkJCQkkZml0Ym94ID0gJy0tJzsKCQkJfQoJCQkvLyBzY2FsZSBpbWFnZSBkaW1lbnNpb25zIHByb3BvcnRpb25hbGx5IHRvIGZpdCB3aXRoaW4gdGhlICgkdywgJGgpIGJveAoJCQlpZiAoKCgkdyAqICRwaXhoKSAvICgkaCAqICRwaXh3KSkgPCAxKSB7CgkJCQkvLyBzdG9yZSBjdXJyZW50IGhlaWdodAoJCQkJJG9sZGggPSAkaDsKCQkJCS8vIGNhbGN1bGF0ZSBuZXcgaGVpZ2h0CgkJCQkkaCA9ICR3ICogJHBpeGggLyAkcGl4dzsKCQkJCS8vIGhlaWdodCBkaWZmZXJlbmNlCgkJCQkkaGRpZmYgPSAoJG9sZGggLSAkaCk7CgkJCQkvLyB2ZXJ0aWNhbCBhbGlnbm1lbnQKCQkJCXN3aXRjaCAoc3RydG91cHBlcigkZml0Ym94ezF9KSkgewoJCQkJCWNhc2UgJ1QnOiB7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdNJzogewoJCQkJCQkkeSArPSAoJGhkaWZmIC8gMik7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdCJzogewoJCQkJCQkkeSArPSAkaGRpZmY7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCS8vIHN0b3JlIGN1cnJlbnQgd2lkdGgKCQkJCSRvbGR3ID0gJHc7CgkJCQkvLyBjYWxjdWxhdGUgbmV3IHdpZHRoCgkJCQkkdyA9ICRoICogJHBpeHcgLyAkcGl4aDsKCQkJCS8vIHdpZHRoIGRpZmZlcmVuY2UKCQkJCSR3ZGlmZiA9ICgkb2xkdyAtICR3KTsKCQkJCS8vIGhvcml6b250YWwgYWxpZ25tZW50CgkJCQlzd2l0Y2ggKHN0cnRvdXBwZXIoJGZpdGJveFswXSkpIHsKCQkJCQljYXNlICdMJzogewoJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJJHggLT0gJHdkaWZmOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdDJzogewoJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJJHggLT0gKCR3ZGlmZiAvIDIpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHggKz0gKCR3ZGlmZiAvIDIpOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdSJzogewoJCQkJCQlpZiAoISR0aGlzLT5ydGwpIHsKCQkJCQkJCSR4ICs9ICR3ZGlmZjsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLy8gZml0IHRoZSBpbWFnZSBvbiBhdmFpbGFibGUgc3BhY2UKCQlsaXN0KCR3LCAkaCwgJHgsICR5KSA9ICR0aGlzLT5maXRCbG9jaygkdywgJGgsICR4LCAkeSwgJGZpdG9ucGFnZSk7CgkJLy8gY2FsY3VsYXRlIG5ldyBtaW5pbXVtIGRpbWVuc2lvbnMgaW4gcGl4ZWxzCgkJJG5ld3cgPSByb3VuZCgkdyAqICR0aGlzLT5rICogJGRwaSAvICR0aGlzLT5kcGkpOwoJCSRuZXdoID0gcm91bmQoJGggKiAkdGhpcy0+ayAqICRkcGkgLyAkdGhpcy0+ZHBpKTsKCQkvLyBjaGVjayBpZiByZXNpemUgaXMgbmVjZXNzYXJ5IChyZXNpemUgaXMgdXNlZCBvbmx5IHRvIHJlZHVjZSB0aGUgaW1hZ2UpCgkJJG5ld3NpemUgPSAoJG5ld3cgKiAkbmV3aCk7CgkJJHBpeHNpemUgPSAoJHBpeHcgKiAkcGl4aCk7CgkJaWYgKGludHZhbCgkcmVzaXplKSA9PSAyKSB7CgkJCSRyZXNpemUgPSB0cnVlOwoJCX0gZWxzZWlmICgkbmV3c2l6ZSA+PSAkcGl4c2l6ZSkgewoJCQkkcmVzaXplID0gZmFsc2U7CgkJfQoJCS8vIGNoZWNrIGlmIGltYWdlIGhhcyBiZWVuIGFscmVhZHkgYWRkZWQgb24gZG9jdW1lbnQKCQkkbmV3aW1hZ2UgPSB0cnVlOwoJCWlmIChpbl9hcnJheSgkZmlsZSwgJHRoaXMtPmltYWdla2V5cykpIHsKCQkJJG5ld2ltYWdlID0gZmFsc2U7CgkJCS8vIGdldCBleGlzdGluZyBpbWFnZSBkYXRhCgkJCSRpbmZvID0gJHRoaXMtPmdldEltYWdlQnVmZmVyKCRmaWxlKTsKCQkJaWYgKHN0cnBvcygkZmlsZSwgJ19fdGNwZGZfaW1nbWFza18nKSA9PT0gRkFMU0UpIHsKCQkJCS8vIGNoZWNrIGlmIHRoZSBuZXdlciBpbWFnZSBpcyBsYXJnZXIKCQkJCSRvbGRzaXplID0gKCRpbmZvWyd3J10gKiAkaW5mb1snaCddKTsKCQkJCWlmICgoKCRvbGRzaXplIDwgJG5ld3NpemUpIEFORCAoJHJlc2l6ZSkpIE9SICgoJG9sZHNpemUgPCAkcGl4c2l6ZSkgQU5EICghJHJlc2l6ZSkpKSB7CgkJCQkJJG5ld2ltYWdlID0gdHJ1ZTsKCQkJCX0KCQkJfQoJCX0gZWxzZWlmICgoJGlzbWFzayA9PT0gZmFsc2UpIEFORCAoJGltZ21hc2sgPT09IGZhbHNlKSBBTkQgKHN0cnBvcygkZmlsZSwgJ19fdGNwZGZfaW1nbWFza18nKSA9PT0gRkFMU0UpKSB7CgkJCS8vIGNyZWF0ZSB0ZW1wIGltYWdlIGZpbGUgKHdpdGhvdXQgYWxwaGEgY2hhbm5lbCkKCQkJJHRlbXBmaWxlX3BsYWluID0gS19QQVRIX0NBQ0hFLidfX3RjcGRmX2ltZ21hc2tfcGxhaW5fJy4kZmlsZWhhc2g7CgkJCS8vIGNyZWF0ZSB0ZW1wIGFscGhhIGZpbGUKCQkJJHRlbXBmaWxlX2FscGhhID0gS19QQVRIX0NBQ0hFLidfX3RjcGRmX2ltZ21hc2tfYWxwaGFfJy4kZmlsZWhhc2g7CgkJCS8vIGNoZWNrIGZvciBjYWNoZWQgaW1hZ2VzCgkJCWlmIChpbl9hcnJheSgkdGVtcGZpbGVfcGxhaW4sICR0aGlzLT5pbWFnZWtleXMpKSB7CgkJCQkvLyBnZXQgZXhpc3RpbmcgaW1hZ2UgZGF0YQoJCQkJJGluZm8gPSAkdGhpcy0+Z2V0SW1hZ2VCdWZmZXIoJHRlbXBmaWxlX3BsYWluKTsKCQkJCS8vIGNoZWNrIGlmIHRoZSBuZXdlciBpbWFnZSBpcyBsYXJnZXIKCQkJCSRvbGRzaXplID0gKCRpbmZvWyd3J10gKiAkaW5mb1snaCddKTsKCQkJCWlmICgoKCRvbGRzaXplIDwgJG5ld3NpemUpIEFORCAoJHJlc2l6ZSkpIE9SICgoJG9sZHNpemUgPCAkcGl4c2l6ZSkgQU5EICghJHJlc2l6ZSkpKSB7CgkJCQkJJG5ld2ltYWdlID0gdHJ1ZTsKCQkJCX0gZWxzZSB7CgkJCQkJJG5ld2ltYWdlID0gZmFsc2U7CgkJCQkJLy8gZW1iZWQgbWFzayBpbWFnZQoJCQkJCSRpbWdtYXNrID0gJHRoaXMtPkltYWdlKCR0ZW1wZmlsZV9hbHBoYSwgJHgsICR5LCAkdywgJGgsICdQTkcnLCAnJywgJycsICRyZXNpemUsICRkcGksICcnLCB0cnVlLCBmYWxzZSk7CgkJCQkJLy8gZW1iZWQgaW1hZ2UsIG1hc2tlZCB3aXRoIHByZXZpb3VzbHkgZW1iZWRkZWQgbWFzawoJCQkJCXJldHVybiAkdGhpcy0+SW1hZ2UoJHRlbXBmaWxlX3BsYWluLCAkeCwgJHksICR3LCAkaCwgJHR5cGUsICRsaW5rLCAkYWxpZ24sICRyZXNpemUsICRkcGksICRwYWxpZ24sIGZhbHNlLCAkaW1nbWFzayk7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCRuZXdpbWFnZSkgewoJCQkvL0ZpcnN0IHVzZSBvZiBpbWFnZSwgZ2V0IGluZm8KCQkJJHR5cGUgPSBzdHJ0b2xvd2VyKCR0eXBlKTsKCQkJaWYgKCR0eXBlID09ICcnKSB7CgkJCQkkdHlwZSA9IFRDUERGX0lNQUdFUzo6Z2V0SW1hZ2VGaWxlVHlwZSgkZmlsZSwgJGltc2l6ZSk7CgkJCX0gZWxzZWlmICgkdHlwZSA9PSAnanBnJykgewoJCQkJJHR5cGUgPSAnanBlZyc7CgkJCX0KCQkJJG1xciA9IFRDUERGX1NUQVRJQzo6Z2V0X21xcigpOwoJCQlUQ1BERl9TVEFUSUM6OnNldF9tcXIoZmFsc2UpOwoJCQkvLyBTcGVjaWZpYyBpbWFnZSBoYW5kbGVycyAoZGVmaW5lZCBvbiBUQ1BERl9JTUFHRVMgQ0xBU1MpCgkJCSRtdGQgPSAnX3BhcnNlJy4kdHlwZTsKCQkJLy8gR0QgaW1hZ2UgaGFuZGxlciBmdW5jdGlvbgoJCQkkZ2RmdW5jdGlvbiA9ICdpbWFnZWNyZWF0ZWZyb20nLiR0eXBlOwoJCQkkaW5mbyA9IGZhbHNlOwoJCQlpZiAoKG1ldGhvZF9leGlzdHMoJ1RDUERGX0lNQUdFUycsICRtdGQpKSBBTkQgKCEoJHJlc2l6ZSBBTkQgKGZ1bmN0aW9uX2V4aXN0cygkZ2RmdW5jdGlvbikgT1IgZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKSkpKSB7CgkJCQkvLyBUQ1BERiBpbWFnZSBmdW5jdGlvbnMKCQkJCSRpbmZvID0gVENQREZfSU1BR0VTOjokbXRkKCRmaWxlKTsKCQkJCWlmICgoJGlzbWFzayA9PT0gZmFsc2UpIEFORCAoJGltZ21hc2sgPT09IGZhbHNlKSBBTkQgKHN0cnBvcygkZmlsZSwgJ19fdGNwZGZfaW1nbWFza18nKSA9PT0gRkFMU0UpCgkJCQkJQU5EICgoJGluZm8gPT09ICdwbmdhbHBoYScpIE9SIChpc3NldCgkaW5mb1sndHJucyddKSBBTkQgIWVtcHR5KCRpbmZvWyd0cm5zJ10pKSkpIHsKCQkJCQlyZXR1cm4gJHRoaXMtPkltYWdlUG5nQWxwaGEoJGZpbGUsICR4LCAkeSwgJHBpeHcsICRwaXhoLCAkdywgJGgsICdQTkcnLCAkbGluaywgJGFsaWduLCAkcmVzaXplLCAkZHBpLCAkcGFsaWduLCAkZmlsZWhhc2gpOwoJCQkJfQoJCQl9CgkJCWlmICgoJGluZm8gPT09IGZhbHNlKSBBTkQgZnVuY3Rpb25fZXhpc3RzKCRnZGZ1bmN0aW9uKSkgewoJCQkJdHJ5IHsKCQkJCQkvLyBHRCBsaWJyYXJ5CgkJCQkJJGltZyA9ICRnZGZ1bmN0aW9uKCRmaWxlKTsKCQkJCQlpZiAoJGltZyAhPT0gZmFsc2UpIHsKCQkJCQkJaWYgKCRyZXNpemUpIHsKCQkJCQkJCSRpbWdyID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJG5ld3csICRuZXdoKTsKCQkJCQkJCWlmICgoJHR5cGUgPT0gJ2dpZicpIE9SICgkdHlwZSA9PSAncG5nJykpIHsKCQkJCQkJCQkkaW1nciA9IFRDUERGX0lNQUdFUzo6c2V0R0RJbWFnZVRyYW5zcGFyZW5jeSgkaW1nciwgJGltZyk7CgkJCQkJCQl9CgkJCQkJCQlpbWFnZWNvcHlyZXNhbXBsZWQoJGltZ3IsICRpbWcsIDAsIDAsIDAsIDAsICRuZXd3LCAkbmV3aCwgJHBpeHcsICRwaXhoKTsKCQkJCQkJCSRpbWcgPSAkaW1ncjsKCQkJCQkJfQoJCQkJCQlpZiAoKCR0eXBlID09ICdnaWYnKSBPUiAoJHR5cGUgPT0gJ3BuZycpKSB7CgkJCQkJCQkkaW5mbyA9IFRDUERGX0lNQUdFUzo6X3RvUE5HKCRpbWcpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGluZm8gPSBUQ1BERl9JTUFHRVM6Ol90b0pQRUcoJGltZywgJHRoaXMtPmpwZWdfcXVhbGl0eSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9IGNhdGNoKEV4Y2VwdGlvbiAkZSkgewoJCQkJCSRpbmZvID0gZmFsc2U7CgkJCQl9CgkJCX0KCQkJaWYgKCgkaW5mbyA9PT0gZmFsc2UpIEFORCBleHRlbnNpb25fbG9hZGVkKCdpbWFnaWNrJykpIHsKCQkJCXRyeSB7CgkJCQkJLy8gSW1hZ2VNYWdpY2sgbGlicmFyeQoJCQkJCSRpbWcgPSBuZXcgSW1hZ2ljaygpOwoJCQkJCWlmICgkdHlwZSA9PSAnU1ZHJykgewoJCQkJCQkvLyBnZXQgU1ZHIGZpbGUgY29udGVudAoJCQkJCQkkc3ZnaW1nID0gVENQREZfU1RBVElDOjpmaWxlR2V0Q29udGVudHMoJGZpbGUpOwoJCQkJCQlpZiAoJHN2Z2ltZyAhPT0gRkFMU0UpIHsKCQkJCQkJCS8vIGdldCB3aWR0aCBhbmQgaGVpZ2h0CgkJCQkJCQkkcmVncyA9IGFycmF5KCk7CgkJCQkJCQlpZiAocHJlZ19tYXRjaCgnLzxzdmcoW15cPl0qKT4vc2knLCAkc3ZnaW1nLCAkcmVncykpIHsKCQkJCQkJCQkkc3ZndGFnID0gJHJlZ3NbMV07CgkJCQkJCQkJJHRtcCA9IGFycmF5KCk7CgkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy9bXHNdK3dpZHRoW1xzXSo9W1xzXSoiKFteIl0qKSIvc2knLCAkc3ZndGFnLCAkdG1wKSkgewoJCQkJCQkJCQkkb3cgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0bXBbMV0sIDEsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCQkJCQkJCSRvd3UgPSBzcHJpbnRmKCclRicsICgkb3cgKiAkZHBpIC8gNzIpKS4kdGhpcy0+cGRmdW5pdDsKCQkJCQkJCQkJJHN2Z3RhZyA9IHByZWdfcmVwbGFjZSgnL1tcc10rd2lkdGhbXHNdKj1bXHNdKiJbXiJdKiIvc2knLCAnIHdpZHRoPSInLiRvd3UuJyInLCAkc3ZndGFnLCAxKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkb3cgPSAkdzsKCQkJCQkJCQl9CgkJCQkJCQkJJHRtcCA9IGFycmF5KCk7CgkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy9bXHNdK2hlaWdodFtcc10qPVtcc10qIihbXiJdKikiL3NpJywgJHN2Z3RhZywgJHRtcCkpIHsKCQkJCQkJCQkJJG9oID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkdG1wWzFdLCAxLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQkJCQkJCQkkb2h1ID0gc3ByaW50ZignJUYnLCAoJG9oICogJGRwaSAvIDcyKSkuJHRoaXMtPnBkZnVuaXQ7CgkJCQkJCQkJCSRzdmd0YWcgPSBwcmVnX3JlcGxhY2UoJy9bXHNdK2hlaWdodFtcc10qPVtcc10qIlteIl0qIi9zaScsICcgaGVpZ2h0PSInLiRvaHUuJyInLCAkc3ZndGFnLCAxKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkb2ggPSAkaDsKCQkJCQkJCQl9CgkJCQkJCQkJJHRtcCA9IGFycmF5KCk7CgkJCQkJCQkJaWYgKCFwcmVnX21hdGNoKCcvW1xzXSt2aWV3Qm94W1xzXSo9W1xzXSoiW1xzXSooWzAtOVwuXSspW1xzXSsoWzAtOVwuXSspW1xzXSsoWzAtOVwuXSspW1xzXSsoWzAtOVwuXSspW1xzXSoiL3NpJywgJHN2Z3RhZywgJHRtcCkpIHsKCQkJCQkJCQkJJHZidyA9ICgkb3cgKiAkdGhpcy0+aW1nc2NhbGUgKiAkdGhpcy0+ayk7CgkJCQkJCQkJCSR2YmggPSAoJG9oICogJHRoaXMtPmltZ3NjYWxlICogJHRoaXMtPmspOwoJCQkJCQkJCQkkdmJveCA9IHNwcmludGYoJyB2aWV3Qm94PSIwIDAgJUYgJUYiICcsICR2YncsICR2YmgpOwoJCQkJCQkJCQkkc3ZndGFnID0gJHZib3guJHN2Z3RhZzsKCQkJCQkJCQl9CgkJCQkJCQkJJHN2Z2ltZyA9IHByZWdfcmVwbGFjZSgnLzxzdmcoW15cPl0qKT4vc2knLCAnPHN2ZycuJHN2Z3RhZy4nPicsICRzdmdpbWcsIDEpOwoJCQkJCQkJfQoJCQkJCQkJJGltZy0+cmVhZEltYWdlQmxvYigkc3ZnaW1nKTsKCQkJCQkJfQoJCQkJCX0gZWxzZSB7CgkJCQkJCSRpbWctPnJlYWRJbWFnZSgkZmlsZSk7CgkJCQkJfQoJCQkJCWlmICgkcmVzaXplKSB7CgkJCQkJCSRpbWctPnJlc2l6ZUltYWdlKCRuZXd3LCAkbmV3aCwgMTAsIDEsIGZhbHNlKTsKCQkJCQl9CgkJCQkJJGltZy0+c2V0Q29tcHJlc3Npb25RdWFsaXR5KCR0aGlzLT5qcGVnX3F1YWxpdHkpOwoJCQkJCSRpbWctPnNldEltYWdlRm9ybWF0KCdqcGVnJyk7CgkJCQkJJHRlbXBuYW1lID0gVENQREZfU1RBVElDOjpnZXRPYmpGaWxlbmFtZSgnaW1nJyk7CgkJCQkJJGltZy0+d3JpdGVJbWFnZSgkdGVtcG5hbWUpOwoJCQkJCSRpbmZvID0gVENQREZfSU1BR0VTOjpfcGFyc2VqcGVnKCR0ZW1wbmFtZSk7CgkJCQkJdW5saW5rKCR0ZW1wbmFtZSk7CgkJCQkJJGltZy0+ZGVzdHJveSgpOwoJCQkJfSBjYXRjaChFeGNlcHRpb24gJGUpIHsKCQkJCQkkaW5mbyA9IGZhbHNlOwoJCQkJfQoJCQl9CgkJCWlmICgkaW5mbyA9PT0gZmFsc2UpIHsKCQkJCS8vIHVuYWJsZSB0byBwcm9jZXNzIGltYWdlCgkJCQlyZXR1cm47CgkJCX0KCQkJVENQREZfU1RBVElDOjpzZXRfbXFyKCRtcXIpOwoJCQlpZiAoJGlzbWFzaykgewoJCQkJLy8gZm9yY2UgZ3JheXNjYWxlCgkJCQkkaW5mb1snY3MnXSA9ICdEZXZpY2VHcmF5JzsKCQkJfQoJCQlpZiAoJGltZ21hc2sgIT09IGZhbHNlKSB7CgkJCQkkaW5mb1snbWFza2VkJ10gPSAkaW1nbWFzazsKCQkJfQoJCQlpZiAoIWVtcHR5KCRleHVybCkpIHsKCQkJCSRpbmZvWydleHVybCddID0gJGV4dXJsOwoJCQl9CgkJCS8vIGFycmF5IG9mIGFsdGVybmF0aXZlIGltYWdlcwoJCQkkaW5mb1snYWx0aW1ncyddID0gJGFsdGltZ3M7CgkJCS8vIGFkZCBpbWFnZSB0byBkb2N1bWVudAoJCQkkaW5mb1snaSddID0gJHRoaXMtPnNldEltYWdlQnVmZmVyKCRmaWxlLCAkaW5mbyk7CgkJfQoJCS8vIHNldCBhbGlnbm1lbnQKCQkkdGhpcy0+aW1nX3JiX3kgPSAkeSArICRoOwoJCS8vIHNldCBhbGlnbm1lbnQKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQlpZiAoJHBhbGlnbiA9PSAnTCcpIHsKCQkJCSR4aW1nID0gJHRoaXMtPmxNYXJnaW47CgkJCX0gZWxzZWlmICgkcGFsaWduID09ICdDJykgewoJCQkJJHhpbWcgPSAoJHRoaXMtPncgKyAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luIC0gJHcpIC8gMjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ1InKSB7CgkJCQkkeGltZyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdzsKCQkJfSBlbHNlIHsKCQkJCSR4aW1nID0gJHggLSAkdzsKCQkJfQoJCQkkdGhpcy0+aW1nX3JiX3ggPSAkeGltZzsKCQl9IGVsc2UgewoJCQlpZiAoJHBhbGlnbiA9PSAnTCcpIHsKCQkJCSR4aW1nID0gJHRoaXMtPmxNYXJnaW47CgkJCX0gZWxzZWlmICgkcGFsaWduID09ICdDJykgewoJCQkJJHhpbWcgPSAoJHRoaXMtPncgKyAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luIC0gJHcpIC8gMjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ1InKSB7CgkJCQkkeGltZyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdzsKCQkJfSBlbHNlIHsKCQkJCSR4aW1nID0gJHg7CgkJCX0KCQkJJHRoaXMtPmltZ19yYl94ID0gJHhpbWcgKyAkdzsKCQl9CgkJaWYgKCRpc21hc2sgT1IgJGhpZGRlbikgewoJCQkvLyBpbWFnZSBpcyBub3QgZGlzcGxheWVkCgkJCXJldHVybiAkaW5mb1snaSddOwoJCX0KCQkkeGtpbWcgPSAkeGltZyAqICR0aGlzLT5rOwoJCWlmICghJGFsdCkgewoJCQkvLyBvbmx5IG5vbi1hbHRlcm5hdGl2ZSBpbW1hZ2VzIHdpbGwgYmUgc2V0CgkJCSR0aGlzLT5fb3V0KHNwcmludGYoJ3EgJUYgMCAwICVGICVGICVGIGNtIC9JJXUgRG8gUScsICgkdyAqICR0aGlzLT5rKSwgKCRoICogJHRoaXMtPmspLCAkeGtpbWcsICgoJHRoaXMtPmggLSAoJHkgKyAkaCkpICogJHRoaXMtPmspLCAkaW5mb1snaSddKSk7CgkJfQoJCWlmICghZW1wdHkoJGJvcmRlcikpIHsKCQkJJGJ4ID0gJHRoaXMtPng7CgkJCSRieSA9ICR0aGlzLT55OwoJCQkkdGhpcy0+eCA9ICR4aW1nOwoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHRoaXMtPnggKz0gJHc7CgkJCX0KCQkJJHRoaXMtPnkgPSAkeTsKCQkJJHRoaXMtPkNlbGwoJHcsICRoLCAnJywgJGJvcmRlciwgMCwgJycsIDAsICcnLCAwLCB0cnVlKTsKCQkJJHRoaXMtPnggPSAkYng7CgkJCSR0aGlzLT55ID0gJGJ5OwoJCX0KCQlpZiAoJGxpbmspIHsKCQkJJHRoaXMtPkxpbmsoJHhpbWcsICR5LCAkdywgJGgsICRsaW5rLCAwKTsKCQl9CgkJLy8gc2V0IHBvaW50ZXIgdG8gYWxpZ24gdGhlIG5leHQgdGV4dC9vYmplY3RzCgkJc3dpdGNoKCRhbGlnbikgewoJCQljYXNlICdUJzogewoJCQkJJHRoaXMtPnkgPSAkeTsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmltZ19yYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTSc6IHsKCQkJCSR0aGlzLT55ID0gJHkgKyByb3VuZCgkaC8yKTsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmltZ19yYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQic6IHsKCQkJCSR0aGlzLT55ID0gJHRoaXMtPmltZ19yYl95OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdOJzogewoJCQkJJHRoaXMtPlNldFkoJHRoaXMtPmltZ19yYl95KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6ewoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJHRoaXMtPmVuZGxpbmV4ID0gJHRoaXMtPmltZ19yYl94OwoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2ltYWdlcyddW10gPSAkaW5mb1snaSddOwoJCX0KCQlyZXR1cm4gJGluZm9bJ2knXTsKCX0KCgkvKioKCSAqIEV4dHJhY3QgaW5mbyBmcm9tIGEgUE5HIGltYWdlIHdpdGggYWxwaGEgY2hhbm5lbCB1c2luZyB0aGUgSW1hZ2ljayBvciBHRCBsaWJyYXJ5LgoJICogQHBhcmFtICRmaWxlIChzdHJpbmcpIE5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2UuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBBYnNjaXNzYSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHdweCAoZmxvYXQpIE9yaWdpbmFsIHdpZHRoIG9mIHRoZSBpbWFnZSBpbiBwaXhlbHMuCgkgKiBAcGFyYW0gJGhweCAoZmxvYXQpIG9yaWdpbmFsIGhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gcGl4ZWxzLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIGltYWdlIGluIHRoZSBwYWdlLiBJZiBub3Qgc3BlY2lmaWVkIG9yIGVxdWFsIHRvIHplcm8sIGl0IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gdGhlIHBhZ2UuIElmIG5vdCBzcGVjaWZpZWQgb3IgZXF1YWwgdG8gemVybywgaXQgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIEltYWdlIGZvcm1hdC4gUG9zc2libGUgdmFsdWVzIGFyZSAoY2FzZSBpbnNlbnNpdGl2ZSk6IEpQRUcgYW5kIFBORyAod2hpdG91dCBHRCBsaWJyYXJ5KSBhbmQgYWxsIGltYWdlcyBzdXBwb3J0ZWQgYnkgR0Q6IEdELCBHRDIsIEdEMlBBUlQsIEdJRiwgSlBFRywgUE5HLCBCTVAsIFhCTSwgWFBNOy4gSWYgbm90IHNwZWNpZmllZCwgdGhlIHR5cGUgaXMgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBleHRlbnNpb24uCgkgKiBAcGFyYW0gJGxpbmsgKG1peGVkKSBVUkwgb3IgaWRlbnRpZmllciByZXR1cm5lZCBieSBBZGRMaW5rKCkuCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEluZGljYXRlcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVyIG5leHQgdG8gaW1hZ2UgaW5zZXJ0aW9uIHJlbGF0aXZlIHRvIGltYWdlIGhlaWdodC4gVGhlIHZhbHVlIGNhbiBiZTo8dWw+PGxpPlQ6IHRvcC1yaWdodCBmb3IgTFRSIG9yIHRvcC1sZWZ0IGZvciBSVEw8L2xpPjxsaT5NOiBtaWRkbGUtcmlnaHQgZm9yIExUUiBvciBtaWRkbGUtbGVmdCBmb3IgUlRMPC9saT48bGk+QjogYm90dG9tLXJpZ2h0IGZvciBMVFIgb3IgYm90dG9tLWxlZnQgZm9yIFJUTDwvbGk+PGxpPk46IG5leHQgbGluZTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkcmVzaXplIChib29sZWFuKSBJZiB0cnVlIHJlc2l6ZSAocmVkdWNlKSB0aGUgaW1hZ2UgdG8gZml0ICR3IGFuZCAkaCAocmVxdWlyZXMgR0QgbGlicmFyeSkuCgkgKiBAcGFyYW0gJGRwaSAoaW50KSBkb3QtcGVyLWluY2ggcmVzb2x1dGlvbiB1c2VkIG9uIHJlc2l6ZQoJICogQHBhcmFtICRwYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgaW1hZ2Ugb24gdGhlIGN1cnJlbnQgbGluZS4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgOiBsZWZ0IGFsaWduPC9saT48bGk+QyA6IGNlbnRlcjwvbGk+PGxpPlIgOiByaWdodCBhbGlnbjwvbGk+PGxpPicnIDogZW1wdHkgc3RyaW5nIDogbGVmdCBmb3IgTFRSIG9yIHJpZ2h0IGZvciBSVEw8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGZpbGVoYXNoIChzdHJpbmcpIEZpbGUgaGFzaCB1c2VkIHRvIGJ1aWxkIHVuaXF1ZSBmaWxlIG5hbWVzLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjMuMDA3ICgyMDA4LTEyLTA0KQoJICogQHNlZSBJbWFnZSgpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBJbWFnZVBuZ0FscGhhKCRmaWxlLCAkeCwgJHksICR3cHgsICRocHgsICR3LCAkaCwgJHR5cGUsICRsaW5rLCAkYWxpZ24sICRyZXNpemUsICRkcGksICRwYWxpZ24sICRmaWxlaGFzaD0nJykgewoJCS8vIGNyZWF0ZSB0ZW1wIGltYWdlcwoJCWlmIChlbXB0eSgkZmlsZWhhc2gpKSB7CgkJCSRmaWxlaGFzaCA9IG1kNSgkdGhpcy0+ZmlsZV9pZC4kZmlsZSk7CgkJfQoJCS8vIGNyZWF0ZSB0ZW1wIGltYWdlIGZpbGUgKHdpdGhvdXQgYWxwaGEgY2hhbm5lbCkKCQkkdGVtcGZpbGVfcGxhaW4gPSBLX1BBVEhfQ0FDSEUuJ19fdGNwZGZfaW1nbWFza19wbGFpbl8nLiRmaWxlaGFzaDsKCQkvLyBjcmVhdGUgdGVtcCBhbHBoYSBmaWxlCgkJJHRlbXBmaWxlX2FscGhhID0gS19QQVRIX0NBQ0hFLidfX3RjcGRmX2ltZ21hc2tfYWxwaGFfJy4kZmlsZWhhc2g7CgkJJHBhcnNlZCA9IGZhbHNlOwoJCSRwYXJzZV9lcnJvciA9ICcnOwoJCS8vIEltYWdlTWFnaWNrIGV4dGVuc2lvbgoJCWlmICgoJHBhcnNlZCA9PT0gZmFsc2UpIEFORCBleHRlbnNpb25fbG9hZGVkKCdpbWFnaWNrJykpIHsKCQkJdHJ5IHsKCQkJCS8vIEltYWdlTWFnaWNrIGxpYnJhcnkKCQkJCSRpbWcgPSBuZXcgSW1hZ2ljaygpOwoJCQkJJGltZy0+cmVhZEltYWdlKCRmaWxlKTsKCQkJCS8vIGNsb25lIGltYWdlIG9iamVjdAoJCQkJJGltZ2EgPSBUQ1BERl9TVEFUSUM6Om9iamNsb25lKCRpbWcpOwoJCQkJLy8gZXh0cmFjdCBhbHBoYSBjaGFubmVsCgkJCQlpZiAobWV0aG9kX2V4aXN0cygkaW1nLCAnc2V0SW1hZ2VBbHBoYUNoYW5uZWwnKSBBTkQgZGVmaW5lZCgnSW1hZ2ljazo6QUxQSEFDSEFOTkVMX0VYVFJBQ1QnKSkgewoJCQkJCSRpbWctPnNldEltYWdlQWxwaGFDaGFubmVsKEltYWdpY2s6OkFMUEhBQ0hBTk5FTF9FWFRSQUNUKTsKCQkJCX0gZWxzZSB7CgkJCQkJJGltZy0+c2VwYXJhdGVJbWFnZUNoYW5uZWwoOCk7IC8vIDggPSAoaW1hZ2ljazo6Q0hBTk5FTF9BTFBIQSB8IGltYWdpY2s6OkNIQU5ORUxfT1BBQ0lUWSB8IGltYWdpY2s6OkNIQU5ORUxfTUFUVEUpOwoJCQkJCSRpbWctPm5lZ2F0ZUltYWdlKHRydWUpOwoJCQkJfQoJCQkJJGltZy0+c2V0SW1hZ2VGb3JtYXQoJ3BuZycpOwoJCQkJJGltZy0+d3JpdGVJbWFnZSgkdGVtcGZpbGVfYWxwaGEpOwoJCQkJLy8gcmVtb3ZlIGFscGhhIGNoYW5uZWwKCQkJCWlmIChtZXRob2RfZXhpc3RzKCRpbWdhLCAnc2V0SW1hZ2VNYXR0ZScpKSB7CgkJCQkJJGltZ2EtPnNldEltYWdlTWF0dGUoZmFsc2UpOwoJCQkJfSBlbHNlIHsKCQkJCQkkaW1nYS0+c2VwYXJhdGVJbWFnZUNoYW5uZWwoMzkpOyAvLyAzOSA9IChpbWFnaWNrOjpDSEFOTkVMX0FMTCAmIH4oaW1hZ2ljazo6Q0hBTk5FTF9BTFBIQSB8IGltYWdpY2s6OkNIQU5ORUxfT1BBQ0lUWSB8IGltYWdpY2s6OkNIQU5ORUxfTUFUVEUpKTsKCQkJCX0KCQkJCSRpbWdhLT5zZXRJbWFnZUZvcm1hdCgncG5nJyk7CgkJCQkkaW1nYS0+d3JpdGVJbWFnZSgkdGVtcGZpbGVfcGxhaW4pOwoJCQkJJHBhcnNlZCA9IHRydWU7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkJLy8gSW1hZ2VtYWdpY2sgZmFpbHMsIHRyeSB3aXRoIEdECgkJCQkkcGFyc2VfZXJyb3IgPSAnSW1hZ2ljayBsaWJyYXJ5IGVycm9yOiAnLiRlLT5nZXRNZXNzYWdlKCk7CgkJCX0KCQl9CgkJLy8gR0QgZXh0ZW5zaW9uCgkJaWYgKCgkcGFyc2VkID09PSBmYWxzZSkgQU5EIGZ1bmN0aW9uX2V4aXN0cygnaW1hZ2VjcmVhdGVmcm9tcG5nJykpIHsKCQkJdHJ5IHsKCQkJCS8vIGdlbmVyYXRlIGltYWdlcwoJCQkJJGltZyA9IGltYWdlY3JlYXRlZnJvbXBuZygkZmlsZSk7CgkJCQkkaW1nYWxwaGEgPSBpbWFnZWNyZWF0ZSgkd3B4LCAkaHB4KTsKCQkJCS8vIGdlbmVyYXRlIGdyYXkgc2NhbGUgcGFsZXR0ZSAoMCAtPiAyNTUpCgkJCQlmb3IgKCRjID0gMDsgJGMgPCAyNTY7ICsrJGMpIHsKCQkJCQlJbWFnZUNvbG9yQWxsb2NhdGUoJGltZ2FscGhhLCAkYywgJGMsICRjKTsKCQkJCX0KCQkJCS8vIGV4dHJhY3QgYWxwaGEgY2hhbm5lbAoJCQkJZm9yICgkeHB4ID0gMDsgJHhweCA8ICR3cHg7ICsrJHhweCkgewoJCQkJCWZvciAoJHlweCA9IDA7ICR5cHggPCAkaHB4OyArKyR5cHgpIHsKCQkJCQkJJGNvbG9yID0gaW1hZ2Vjb2xvcmF0KCRpbWcsICR4cHgsICR5cHgpOwoJCQkJCQkvLyBnZXQgYW5kIGNvcnJlY3QgZ2FtbWEgY29sb3IKCQkJCQkJJGFscGhhID0gJHRoaXMtPmdldEdEZ2FtbWEoJGltZywgJGNvbG9yKTsKCQkJCQkJaW1hZ2VzZXRwaXhlbCgkaW1nYWxwaGEsICR4cHgsICR5cHgsICRhbHBoYSk7CgkJCQkJfQoJCQkJfQoJCQkJaW1hZ2VwbmcoJGltZ2FscGhhLCAkdGVtcGZpbGVfYWxwaGEpOwoJCQkJaW1hZ2VkZXN0cm95KCRpbWdhbHBoYSk7CgkJCQkvLyBleHRyYWN0IGltYWdlIHdpdGhvdXQgYWxwaGEgY2hhbm5lbAoJCQkJJGltZ3BsYWluID0gaW1hZ2VjcmVhdGV0cnVlY29sb3IoJHdweCwgJGhweCk7CgkJCQlpbWFnZWNvcHkoJGltZ3BsYWluLCAkaW1nLCAwLCAwLCAwLCAwLCAkd3B4LCAkaHB4KTsKCQkJCWltYWdlcG5nKCRpbWdwbGFpbiwgJHRlbXBmaWxlX3BsYWluKTsKCQkJCWltYWdlZGVzdHJveSgkaW1ncGxhaW4pOwoJCQkJJHBhcnNlZCA9IHRydWU7CgkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkJLy8gR0QgZmFpbHMKCQkJCSRwYXJzZV9lcnJvciA9ICdHRCBsaWJyYXJ5IGVycm9yOiAnLiRlLT5nZXRNZXNzYWdlKCk7CgkJCX0KCQl9CgkJaWYgKCRwYXJzZWQgPT09IGZhbHNlKSB7CgkJCWlmIChlbXB0eSgkcGFyc2VfZXJyb3IpKSB7CgkJCQkkdGhpcy0+RXJyb3IoJ1RDUERGIHJlcXVpcmVzIHRoZSBJbWFnaWNrIG9yIEdEIGV4dGVuc2lvbiB0byBoYW5kbGUgUE5HIGltYWdlcyB3aXRoIGFscGhhIGNoYW5uZWwuJyk7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+RXJyb3IoJHBhcnNlX2Vycm9yKTsKCQkJfQoJCX0KCQkvLyBlbWJlZCBtYXNrIGltYWdlCgkJJGltZ21hc2sgPSAkdGhpcy0+SW1hZ2UoJHRlbXBmaWxlX2FscGhhLCAkeCwgJHksICR3LCAkaCwgJ1BORycsICcnLCAnJywgJHJlc2l6ZSwgJGRwaSwgJycsIHRydWUsIGZhbHNlKTsKCQkvLyBlbWJlZCBpbWFnZSwgbWFza2VkIHdpdGggcHJldmlvdXNseSBlbWJlZGRlZCBtYXNrCgkJJHRoaXMtPkltYWdlKCR0ZW1wZmlsZV9wbGFpbiwgJHgsICR5LCAkdywgJGgsICR0eXBlLCAkbGluaywgJGFsaWduLCAkcmVzaXplLCAkZHBpLCAkcGFsaWduLCBmYWxzZSwgJGltZ21hc2spOwoJCS8vIHJlbW92ZSB0ZW1wIGZpbGVzCgkJdW5saW5rKCR0ZW1wZmlsZV9hbHBoYSk7CgkJdW5saW5rKCR0ZW1wZmlsZV9wbGFpbik7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIEdELWNvcnJlY3RlZCBQTkcgZ2FtbWEgdmFsdWUgZnJvbSBhbHBoYSBjb2xvcgoJICogQHBhcmFtICRpbWcgKGludCkgR0QgaW1hZ2UgUmVzb3VyY2UgSUQuCgkgKiBAcGFyYW0gJGMgKGludCkgYWxwaGEgY29sb3IKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjMuMDA3ICgyMDA4LTEyLTA0KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0R0RnYW1tYSgkaW1nLCAkYykgewoJCWlmICghaXNzZXQoJHRoaXMtPmdkZ2FtbWFjYWNoZVsnIycuJGNdKSkgewoJCQkkY29sb3JzID0gaW1hZ2Vjb2xvcnNmb3JpbmRleCgkaW1nLCAkYyk7CgkJCS8vIEdEIGFscGhhIGlzIG9ubHkgNyBiaXQgKDAgLT4gMTI3KQoJCQkkdGhpcy0+Z2RnYW1tYWNhY2hlWycjJy4kY10gPSAoKCgxMjcgLSAkY29sb3JzWydhbHBoYSddKSAvIDEyNykgKiAyNTUpOwoJCQkvLyBjb3JyZWN0IGdhbW1hCgkJCSR0aGlzLT5nZGdhbW1hY2FjaGVbJyMnLiRjXSA9IChwb3coKCR0aGlzLT5nZGdhbW1hY2FjaGVbJyMnLiRjXSAvIDI1NSksIDIuMikgKiAyNTUpOwoJCQkvLyBzdG9yZSB0aGUgbGF0ZXN0IHZhbHVlcyBvbiBjYWNoZSB0byBpbXByb3ZlIHBlcmZvcm1hbmNlcwoJCQlpZiAoY291bnQoJHRoaXMtPmdkZ2FtbWFjYWNoZSkgPiA4KSB7CgkJCQkvLyByZW1vdmUgb25lIGVsZW1lbnQgZnJvbSB0aGUgY2FjaGUgYXJyYXkKCQkJCWFycmF5X3NoaWZ0KCR0aGlzLT5nZGdhbW1hY2FjaGUpOwoJCQl9CgkJfQoJCXJldHVybiAkdGhpcy0+Z2RnYW1tYWNhY2hlWycjJy4kY107Cgl9CgoJLyoqCgkgKiBQZXJmb3JtcyBhIGxpbmUgYnJlYWsuCgkgKiBUaGUgY3VycmVudCBhYnNjaXNzYSBnb2VzIGJhY2sgdG8gdGhlIGxlZnQgbWFyZ2luIGFuZCB0aGUgb3JkaW5hdGUgaW5jcmVhc2VzIGJ5IHRoZSBhbW91bnQgcGFzc2VkIGluIHBhcmFtZXRlci4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIFRoZSBoZWlnaHQgb2YgdGhlIGJyZWFrLiBCeSBkZWZhdWx0LCB0aGUgdmFsdWUgZXF1YWxzIHRoZSBoZWlnaHQgb2YgdGhlIGxhc3QgcHJpbnRlZCBjZWxsLgoJICogQHBhcmFtICRjZWxsIChib29sZWFuKSBpZiB0cnVlIGFkZCB0aGUgY3VycmVudCBsZWZ0IChvciByaWdodCBvIGZvciBSVEwpIHBhZGRpbmcgdG8gdGhlIFggY29vcmRpbmF0ZQoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBDZWxsKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIExuKCRoPScnLCAkY2VsbD1mYWxzZSkgewoJCWlmICgoJHRoaXMtPm51bV9jb2x1bW5zID4gMSkgQU5EICgkdGhpcy0+eSA9PSAkdGhpcy0+Y29sdW1uc1skdGhpcy0+Y3VycmVudF9jb2x1bW5dWyd5J10pIEFORCBpc3NldCgkdGhpcy0+Y29sdW1uc1skdGhpcy0+Y3VycmVudF9jb2x1bW5dWyd4J10pIEFORCAoJHRoaXMtPnggPT0gJHRoaXMtPmNvbHVtbnNbJHRoaXMtPmN1cnJlbnRfY29sdW1uXVsneCddKSkgewoJCQkvLyByZXZvdmUgdmVydGljYWwgc3BhY2UgZnJvbSB0aGUgdG9wIG9mIHRoZSBjb2x1bW4KCQkJcmV0dXJuOwoJCX0KCQlpZiAoJGNlbGwpIHsKCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSRjZWxscGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJfSBlbHNlIHsKCQkJCSRjZWxscGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXTsKCQkJfQoJCX0gZWxzZSB7CgkJCSRjZWxscGFkZGluZyA9IDA7CgkJfQoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT54ID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICRjZWxscGFkZGluZzsKCQl9IGVsc2UgewoJCQkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luICsgJGNlbGxwYWRkaW5nOwoJCX0KCQlpZiAoaXNfc3RyaW5nKCRoKSkgewoJCQkkdGhpcy0+eSArPSAkdGhpcy0+bGFzdGg7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnkgKz0gJGg7CgkJfQoJCSR0aGlzLT5uZXdsaW5lID0gdHJ1ZTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIHJlbGF0aXZlIFggdmFsdWUgb2YgY3VycmVudCBwb3NpdGlvbi4KCSAqIFRoZSB2YWx1ZSBpcyByZWxhdGl2ZSB0byB0aGUgbGVmdCBib3JkZXIgZm9yIExUUiBsYW5ndWFnZXMgYW5kIHRvIHRoZSByaWdodCBib3JkZXIgZm9yIFJUTCBsYW5ndWFnZXMuCgkgKiBAcmV0dXJuIGZsb2F0CgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4yCgkgKiBAc2VlIFNldFgoKSwgR2V0WSgpLCBTZXRZKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEdldFgoKSB7CgkJLy9HZXQgeCBwb3NpdGlvbgoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCXJldHVybiAoJHRoaXMtPncgLSAkdGhpcy0+eCk7CgkJfSBlbHNlIHsKCQkJcmV0dXJuICR0aGlzLT54OwoJCX0KCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGFic29sdXRlIFggdmFsdWUgb2YgY3VycmVudCBwb3NpdGlvbi4KCSAqIEByZXR1cm4gZmxvYXQKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjIKCSAqIEBzZWUgU2V0WCgpLCBHZXRZKCksIFNldFkoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gR2V0QWJzWCgpIHsKCQlyZXR1cm4gJHRoaXMtPng7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBvcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb3NpdGlvbi4KCSAqIEByZXR1cm4gZmxvYXQKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAKCSAqIEBzZWUgU2V0WSgpLCBHZXRYKCksIFNldFgoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gR2V0WSgpIHsKCQlyZXR1cm4gJHRoaXMtPnk7Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBhYnNjaXNzYSBvZiB0aGUgY3VycmVudCBwb3NpdGlvbi4KCSAqIElmIHRoZSBwYXNzZWQgdmFsdWUgaXMgbmVnYXRpdmUsIGl0IGlzIHJlbGF0aXZlIHRvIHRoZSByaWdodCBvZiB0aGUgcGFnZSAob3IgbGVmdCBpZiBsYW5ndWFnZSBpcyBSVEwpLgoJICogQHBhcmFtICR4IChmbG9hdCkgVGhlIHZhbHVlIG9mIHRoZSBhYnNjaXNzYSBpbiB1c2VyIHVuaXRzLgoJICogQHBhcmFtICRydGxvZmYgKGJvb2xlYW4pIGlmIHRydWUgYWx3YXlzIHVzZXMgdGhlIHBhZ2UgdG9wLWxlZnQgY29ybmVyIGFzIG9yaWdpbiBvZiBheGlzLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMgoJICogQHNlZSBHZXRYKCksIEdldFkoKSwgU2V0WSgpLCBTZXRYWSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRYKCR4LCAkcnRsb2ZmPWZhbHNlKSB7CgkJJHggPSBmbG9hdHZhbCgkeCk7CgkJaWYgKCEkcnRsb2ZmIEFORCAkdGhpcy0+cnRsKSB7CgkJCWlmICgkeCA+PSAwKSB7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT53IC0gJHg7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+eCA9IGFicygkeCk7CgkJCX0KCQl9IGVsc2UgewoJCQlpZiAoJHggPj0gMCkgewoJCQkJJHRoaXMtPnggPSAkeDsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPncgKyAkeDsKCQkJfQoJCX0KCQlpZiAoJHRoaXMtPnggPCAwKSB7CgkJCSR0aGlzLT54ID0gMDsKCQl9CgkJaWYgKCR0aGlzLT54ID4gJHRoaXMtPncpIHsKCQkJJHRoaXMtPnggPSAkdGhpcy0+dzsKCQl9Cgl9CgoJLyoqCgkgKiBNb3ZlcyB0aGUgY3VycmVudCBhYnNjaXNzYSBiYWNrIHRvIHRoZSBsZWZ0IG1hcmdpbiBhbmQgc2V0cyB0aGUgb3JkaW5hdGUuCgkgKiBJZiB0aGUgcGFzc2VkIHZhbHVlIGlzIG5lZ2F0aXZlLCBpdCBpcyByZWxhdGl2ZSB0byB0aGUgYm90dG9tIG9mIHRoZSBwYWdlLgoJICogQHBhcmFtICR5IChmbG9hdCkgVGhlIHZhbHVlIG9mIHRoZSBvcmRpbmF0ZSBpbiB1c2VyIHVuaXRzLgoJICogQHBhcmFtICRyZXNldHggKGJvb2wpIGlmIHRydWUgKGRlZmF1bHQpIHJlc2V0IHRoZSBYIHBvc2l0aW9uLgoJICogQHBhcmFtICRydGxvZmYgKGJvb2xlYW4pIGlmIHRydWUgYWx3YXlzIHVzZXMgdGhlIHBhZ2UgdG9wLWxlZnQgY29ybmVyIGFzIG9yaWdpbiBvZiBheGlzLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBHZXRYKCksIEdldFkoKSwgU2V0WSgpLCBTZXRYWSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRZKCR5LCAkcmVzZXR4PXRydWUsICRydGxvZmY9ZmFsc2UpIHsKCQkkeSA9IGZsb2F0dmFsKCR5KTsKCQlpZiAoJHJlc2V0eCkgewoJCQkvL3Jlc2V0IHgKCQkJaWYgKCEkcnRsb2ZmIEFORCAkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW47CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT5sTWFyZ2luOwoJCQl9CgkJfQoJCWlmICgkeSA+PSAwKSB7CgkJCSR0aGlzLT55ID0gJHk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnkgPSAkdGhpcy0+aCArICR5OwoJCX0KCQlpZiAoJHRoaXMtPnkgPCAwKSB7CgkJCSR0aGlzLT55ID0gMDsKCQl9CgkJaWYgKCR0aGlzLT55ID4gJHRoaXMtPmgpIHsKCQkJJHRoaXMtPnkgPSAkdGhpcy0+aDsKCQl9Cgl9CgoJLyoqCgkgKiBEZWZpbmVzIHRoZSBhYnNjaXNzYSBhbmQgb3JkaW5hdGUgb2YgdGhlIGN1cnJlbnQgcG9zaXRpb24uCgkgKiBJZiB0aGUgcGFzc2VkIHZhbHVlcyBhcmUgbmVnYXRpdmUsIHRoZXkgYXJlIHJlbGF0aXZlIHJlc3BlY3RpdmVseSB0byB0aGUgcmlnaHQgYW5kIGJvdHRvbSBvZiB0aGUgcGFnZS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIFRoZSB2YWx1ZSBvZiB0aGUgYWJzY2lzc2EuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBUaGUgdmFsdWUgb2YgdGhlIG9yZGluYXRlLgoJICogQHBhcmFtICRydGxvZmYgKGJvb2xlYW4pIGlmIHRydWUgYWx3YXlzIHVzZXMgdGhlIHBhZ2UgdG9wLWxlZnQgY29ybmVyIGFzIG9yaWdpbiBvZiBheGlzLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMgoJICogQHNlZSBTZXRYKCksIFNldFkoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0WFkoJHgsICR5LCAkcnRsb2ZmPWZhbHNlKSB7CgkJJHRoaXMtPlNldFkoJHksIGZhbHNlLCAkcnRsb2ZmKTsKCQkkdGhpcy0+U2V0WCgkeCwgJHJ0bG9mZik7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGFic29sdXRlIFggY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludGVyLgoJICogQHBhcmFtICR4IChmbG9hdCkgVGhlIHZhbHVlIG9mIHRoZSBhYnNjaXNzYSBpbiB1c2VyIHVuaXRzLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xODYgKDIwMTItMDktMTMpCgkgKiBAc2VlIHNldEFic1goKSwgc2V0QWJzWSgpLCBTZXRBYnNYWSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTZXRBYnNYKCR4KSB7CgkJJHRoaXMtPnggPSBmbG9hdHZhbCgkeCk7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGFic29sdXRlIFkgY29vcmRpbmF0ZSBvZiB0aGUgY3VycmVudCBwb2ludGVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgKGZsb2F0KSBUaGUgdmFsdWUgb2YgdGhlIG9yZGluYXRlIGluIHVzZXIgdW5pdHMuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE4NiAoMjAxMi0wOS0xMykKCSAqIEBzZWUgc2V0QWJzWCgpLCBzZXRBYnNZKCksIFNldEFic1hZKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldEFic1koJHkpIHsKCQkkdGhpcy0+eSA9IGZsb2F0dmFsKCR5KTsKCX0KCgkvKioKCSAqIFNldCB0aGUgYWJzb2x1dGUgWCBhbmQgWSBjb29yZGluYXRlcyBvZiB0aGUgY3VycmVudCBwb2ludGVyLgoJICogQHBhcmFtICR4IChmbG9hdCkgVGhlIHZhbHVlIG9mIHRoZSBhYnNjaXNzYSBpbiB1c2VyIHVuaXRzLgoJICogQHBhcmFtICR5IChmbG9hdCkgKGZsb2F0KSBUaGUgdmFsdWUgb2YgdGhlIG9yZGluYXRlIGluIHVzZXIgdW5pdHMuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE4NiAoMjAxMi0wOS0xMykKCSAqIEBzZWUgc2V0QWJzWCgpLCBzZXRBYnNZKCksIFNldEFic1hZKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldEFic1hZKCR4LCAkeSkgewoJCSR0aGlzLT5TZXRBYnNYKCR4KTsKCQkkdGhpcy0+U2V0QWJzWSgkeSk7Cgl9CgoJLyoqCgkgKiBTZW5kIHRoZSBkb2N1bWVudCB0byBhIGdpdmVuIGRlc3RpbmF0aW9uOiBzdHJpbmcsIGxvY2FsIGZpbGUgb3IgYnJvd3Nlci4KCSAqIEluIHRoZSBsYXN0IGNhc2UsIHRoZSBwbHVnLWluIG1heSBiZSB1c2VkIChpZiBwcmVzZW50KSBvciBhIGRvd25sb2FkICgiU2F2ZSBhcyIgZGlhbG9nIGJveCkgbWF5IGJlIGZvcmNlZC48YnIgLz4KCSAqIFRoZSBtZXRob2QgZmlyc3QgY2FsbHMgQ2xvc2UoKSBpZiBuZWNlc3NhcnkgdG8gdGVybWluYXRlIHRoZSBkb2N1bWVudC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBUaGUgbmFtZSBvZiB0aGUgZmlsZSB3aGVuIHNhdmVkLiBOb3RlIHRoYXQgc3BlY2lhbCBjaGFyYWN0ZXJzIGFyZSByZW1vdmVkIGFuZCBibGFua3MgY2hhcmFjdGVycyBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgdW5kZXJzY29yZSBjaGFyYWN0ZXIuCgkgKiBAcGFyYW0gJGRlc3QgKHN0cmluZykgRGVzdGluYXRpb24gd2hlcmUgdG8gc2VuZCB0aGUgZG9jdW1lbnQuIEl0IGNhbiB0YWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczo8dWw+PGxpPkk6IHNlbmQgdGhlIGZpbGUgaW5saW5lIHRvIHRoZSBicm93c2VyIChkZWZhdWx0KS4gVGhlIHBsdWctaW4gaXMgdXNlZCBpZiBhdmFpbGFibGUuIFRoZSBuYW1lIGdpdmVuIGJ5IG5hbWUgaXMgdXNlZCB3aGVuIG9uZSBzZWxlY3RzIHRoZSAiU2F2ZSBhcyIgb3B0aW9uIG9uIHRoZSBsaW5rIGdlbmVyYXRpbmcgdGhlIFBERi48L2xpPjxsaT5EOiBzZW5kIHRvIHRoZSBicm93c2VyIGFuZCBmb3JjZSBhIGZpbGUgZG93bmxvYWQgd2l0aCB0aGUgbmFtZSBnaXZlbiBieSBuYW1lLjwvbGk+PGxpPkY6IHNhdmUgdG8gYSBsb2NhbCBzZXJ2ZXIgZmlsZSB3aXRoIHRoZSBuYW1lIGdpdmVuIGJ5IG5hbWUuPC9saT48bGk+UzogcmV0dXJuIHRoZSBkb2N1bWVudCBhcyBhIHN0cmluZyAobmFtZSBpcyBpZ25vcmVkKS48L2xpPjxsaT5GSTogZXF1aXZhbGVudCB0byBGICsgSSBvcHRpb248L2xpPjxsaT5GRDogZXF1aXZhbGVudCB0byBGICsgRCBvcHRpb248L2xpPjxsaT5FOiByZXR1cm4gdGhlIGRvY3VtZW50IGFzIGJhc2U2NCBtaW1lIG11bHRpLXBhcnQgZW1haWwgYXR0YWNobWVudCAoUkZDIDIwNDUpPC9saT48L3VsPgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBDbG9zZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBPdXRwdXQoJG5hbWU9J2RvYy5wZGYnLCAkZGVzdD0nSScpIHsKCQkvL091dHB1dCBQREYgdG8gc29tZSBkZXN0aW5hdGlvbgoJCS8vRmluaXNoIGRvY3VtZW50IGlmIG5lY2Vzc2FyeQoJCWlmICgkdGhpcy0+c3RhdGUgPCAzKSB7CgkJCSR0aGlzLT5DbG9zZSgpOwoJCX0KCQkvL05vcm1hbGl6ZSBwYXJhbWV0ZXJzCgkJaWYgKGlzX2Jvb2woJGRlc3QpKSB7CgkJCSRkZXN0ID0gJGRlc3QgPyAnRCcgOiAnRic7CgkJfQoJCSRkZXN0ID0gc3RydG91cHBlcigkZGVzdCk7CgkJaWYgKCRkZXN0WzBdICE9ICdGJykgewoJCQkkbmFtZSA9IHByZWdfcmVwbGFjZSgnL1tcc10rLycsICdfJywgJG5hbWUpOwoJCQkkbmFtZSA9IHByZWdfcmVwbGFjZSgnL1teYS16QS1aMC05X1wuLV0vJywgJycsICRuYW1lKTsKCQl9CgkJaWYgKCR0aGlzLT5zaWduKSB7CgkJCS8vICoqKiBhcHBseSBkaWdpdGFsIHNpZ25hdHVyZSB0byB0aGUgZG9jdW1lbnQgKioqCgkJCS8vIGdldCB0aGUgZG9jdW1lbnQgY29udGVudAoJCQkkcGRmZG9jID0gJHRoaXMtPmdldEJ1ZmZlcigpOwoJCQkvLyByZW1vdmUgbGFzdCBuZXdsaW5lCgkJCSRwZGZkb2MgPSBzdWJzdHIoJHBkZmRvYywgMCwgLTEpOwoJCQkvLyBSZW1vdmUgdGhlIG9yaWdpbmFsIGJ1ZmZlcgoJCQlpZiAoaXNzZXQoJHRoaXMtPmRpc2tjYWNoZSkgQU5EICR0aGlzLT5kaXNrY2FjaGUpIHsKCQkJCS8vIHJlbW92ZSBidWZmZXIgZmlsZSBmcm9tIGNhY2hlCgkJCQl1bmxpbmsoJHRoaXMtPmJ1ZmZlcik7CgkJCX0KCQkJdW5zZXQoJHRoaXMtPmJ1ZmZlcik7CgkJCS8vIHJlbW92ZSBmaWxsZXIgc3BhY2UKCQkJJGJ5dGVyYW5nZV9zdHJpbmdfbGVuID0gc3RybGVuKFRDUERGX1NUQVRJQzo6JGJ5dGVyYW5nZV9zdHJpbmcpOwoJCQkvLyBkZWZpbmUgdGhlIEJ5dGVSYW5nZQoJCQkkYnl0ZV9yYW5nZSA9IGFycmF5KCk7CgkJCSRieXRlX3JhbmdlWzBdID0gMDsKCQkJJGJ5dGVfcmFuZ2VbMV0gPSBzdHJwb3MoJHBkZmRvYywgVENQREZfU1RBVElDOjokYnl0ZXJhbmdlX3N0cmluZykgKyAkYnl0ZXJhbmdlX3N0cmluZ19sZW4gKyAxMDsKCQkJJGJ5dGVfcmFuZ2VbMl0gPSAkYnl0ZV9yYW5nZVsxXSArICR0aGlzLT5zaWduYXR1cmVfbWF4X2xlbmd0aCArIDI7CgkJCSRieXRlX3JhbmdlWzNdID0gc3RybGVuKCRwZGZkb2MpIC0gJGJ5dGVfcmFuZ2VbMl07CgkJCSRwZGZkb2MgPSBzdWJzdHIoJHBkZmRvYywgMCwgJGJ5dGVfcmFuZ2VbMV0pLnN1YnN0cigkcGRmZG9jLCAkYnl0ZV9yYW5nZVsyXSk7CgkJCS8vIHJlcGxhY2UgdGhlIEJ5dGVSYW5nZQoJCQkkYnl0ZXJhbmdlID0gc3ByaW50ZignL0J5dGVSYW5nZVswICV1ICV1ICV1XScsICRieXRlX3JhbmdlWzFdLCAkYnl0ZV9yYW5nZVsyXSwgJGJ5dGVfcmFuZ2VbM10pOwoJCQkkYnl0ZXJhbmdlIC49IHN0cl9yZXBlYXQoJyAnLCAoJGJ5dGVyYW5nZV9zdHJpbmdfbGVuIC0gc3RybGVuKCRieXRlcmFuZ2UpKSk7CgkJCSRwZGZkb2MgPSBzdHJfcmVwbGFjZShUQ1BERl9TVEFUSUM6OiRieXRlcmFuZ2Vfc3RyaW5nLCAkYnl0ZXJhbmdlLCAkcGRmZG9jKTsKCQkJLy8gd3JpdGUgdGhlIGRvY3VtZW50IHRvIGEgdGVtcG9yYXJ5IGZvbGRlcgoJCQkkdGVtcGRvYyA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2RvYycpOwoJCQkkZiA9IGZvcGVuKCR0ZW1wZG9jLCAnd2InKTsKCQkJaWYgKCEkZikgewoJCQkJJHRoaXMtPkVycm9yKCdVbmFibGUgdG8gY3JlYXRlIHRlbXBvcmFyeSBmaWxlOiAnLiR0ZW1wZG9jKTsKCQkJfQoJCQkkcGRmZG9jX2xlbmd0aCA9IHN0cmxlbigkcGRmZG9jKTsKCQkJZndyaXRlKCRmLCAkcGRmZG9jLCAkcGRmZG9jX2xlbmd0aCk7CgkJCWZjbG9zZSgkZik7CgkJCS8vIGdldCBkaWdpdGFsIHNpZ25hdHVyZSB2aWEgb3BlbnNzbCBsaWJyYXJ5CgkJCSR0ZW1wc2lnbiA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ3NpZycpOwoJCQlpZiAoZW1wdHkoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydleHRyYWNlcnRzJ10pKSB7CgkJCQlvcGVuc3NsX3BrY3M3X3NpZ24oJHRlbXBkb2MsICR0ZW1wc2lnbiwgJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydzaWduY2VydCddLCBhcnJheSgkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ3ByaXZrZXknXSwgJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydwYXNzd29yZCddKSwgYXJyYXkoKSwgUEtDUzdfQklOQVJZIHwgUEtDUzdfREVUQUNIRUQpOwoJCQl9IGVsc2UgewoJCQkJb3BlbnNzbF9wa2NzN19zaWduKCR0ZW1wZG9jLCAkdGVtcHNpZ24sICR0aGlzLT5zaWduYXR1cmVfZGF0YVsnc2lnbmNlcnQnXSwgYXJyYXkoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydwcml2a2V5J10sICR0aGlzLT5zaWduYXR1cmVfZGF0YVsncGFzc3dvcmQnXSksIGFycmF5KCksIFBLQ1M3X0JJTkFSWSB8IFBLQ1M3X0RFVEFDSEVELCAkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2V4dHJhY2VydHMnXSk7CgkJCX0KCQkJdW5saW5rKCR0ZW1wZG9jKTsKCQkJLy8gcmVhZCBzaWduYXR1cmUKCQkJJHNpZ25hdHVyZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wc2lnbik7CgkJCXVubGluaygkdGVtcHNpZ24pOwoJCQkvLyBleHRyYWN0IHNpZ25hdHVyZQoJCQkkc2lnbmF0dXJlID0gc3Vic3RyKCRzaWduYXR1cmUsICRwZGZkb2NfbGVuZ3RoKTsKCQkJJHNpZ25hdHVyZSA9IHN1YnN0cigkc2lnbmF0dXJlLCAoc3RycG9zKCRzaWduYXR1cmUsICIlJUVPRlxuXG4tLS0tLS0iKSArIDEzKSk7CgkJCSR0bXBhcnIgPSBleHBsb2RlKCJcblxuIiwgJHNpZ25hdHVyZSk7CgkJCSRzaWduYXR1cmUgPSAkdG1wYXJyWzFdOwoJCQl1bnNldCgkdG1wYXJyKTsKCQkJLy8gZGVjb2RlIHNpZ25hdHVyZQoJCQkkc2lnbmF0dXJlID0gYmFzZTY0X2RlY29kZSh0cmltKCRzaWduYXR1cmUpKTsKCQkJLy8gY29udmVydCBzaWduYXR1cmUgdG8gaGV4CgkJCSRzaWduYXR1cmUgPSBjdXJyZW50KHVucGFjaygnSConLCAkc2lnbmF0dXJlKSk7CgkJCSRzaWduYXR1cmUgPSBzdHJfcGFkKCRzaWduYXR1cmUsICR0aGlzLT5zaWduYXR1cmVfbWF4X2xlbmd0aCwgJzAnKTsKCQkJLy8gZGlzYWJsZSBkaXNrIGNhY2hpbmcKCQkJJHRoaXMtPmRpc2tjYWNoZSA9IGZhbHNlOwoJCQkvLyBBZGQgc2lnbmF0dXJlIHRvIHRoZSBkb2N1bWVudAoJCQkkdGhpcy0+YnVmZmVyID0gc3Vic3RyKCRwZGZkb2MsIDAsICRieXRlX3JhbmdlWzFdKS4nPCcuJHNpZ25hdHVyZS4nPicuc3Vic3RyKCRwZGZkb2MsICRieXRlX3JhbmdlWzFdKTsKCQkJJHRoaXMtPmJ1ZmZlcmxlbiA9IHN0cmxlbigkdGhpcy0+YnVmZmVyKTsKCQl9CgkJc3dpdGNoKCRkZXN0KSB7CgkJCWNhc2UgJ0knOiB7CgkJCQkvLyBTZW5kIFBERiB0byB0aGUgc3RhbmRhcmQgb3V0cHV0CgkJCQlpZiAob2JfZ2V0X2NvbnRlbnRzKCkpIHsKCQkJCQkkdGhpcy0+RXJyb3IoJ1NvbWUgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIG91dHB1dCwgY2FuXCd0IHNlbmQgUERGIGZpbGUnKTsKCQkJCX0KCQkJCWlmIChwaHBfc2FwaV9uYW1lKCkgIT0gJ2NsaScpIHsKCQkJCQkvLyBzZW5kIG91dHB1dCB0byBhIGJyb3dzZXIKCQkJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vcGRmJyk7CgkJCQkJaWYgKGhlYWRlcnNfc2VudCgpKSB7CgkJCQkJCSR0aGlzLT5FcnJvcignU29tZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0IHRvIGJyb3dzZXIsIGNhblwndCBzZW5kIFBERiBmaWxlJyk7CgkJCQkJfQoJCQkJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZSwgbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wLCBtYXgtYWdlPTEnKTsKCQkJCQkvL2hlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpOyAvLyBIVFRQLzEuMQoJCQkJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQkJCQloZWFkZXIoJ0V4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UJyk7IC8vIERhdGUgaW4gdGhlIHBhc3QKCQkJCQloZWFkZXIoJ0xhc3QtTW9kaWZpZWQ6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycpLicgR01UJyk7CgkJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSInLmJhc2VuYW1lKCRuYW1lKS4nIicpOwoJCQkJCVRDUERGX1NUQVRJQzo6c2VuZE91dHB1dERhdGEoJHRoaXMtPmdldEJ1ZmZlcigpLCAkdGhpcy0+YnVmZmVybGVuKTsKCQkJCX0gZWxzZSB7CgkJCQkJZWNobyAkdGhpcy0+Z2V0QnVmZmVyKCk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdEJzogewoJCQkJLy8gZG93bmxvYWQgUERGIGFzIGZpbGUKCQkJCWlmIChvYl9nZXRfY29udGVudHMoKSkgewoJCQkJCSR0aGlzLT5FcnJvcignU29tZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0LCBjYW5cJ3Qgc2VuZCBQREYgZmlsZScpOwoJCQkJfQoJCQkJaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CgkJCQlpZiAoaGVhZGVyc19zZW50KCkpIHsKCQkJCQkkdGhpcy0+RXJyb3IoJ1NvbWUgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIG91dHB1dCB0byBicm93c2VyLCBjYW5cJ3Qgc2VuZCBQREYgZmlsZScpOwoJCQkJfQoJCQkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwcml2YXRlLCBtdXN0LXJldmFsaWRhdGUsIHBvc3QtY2hlY2s9MCwgcHJlLWNoZWNrPTAsIG1heC1hZ2U9MScpOwoJCQkJLy9oZWFkZXIoJ0NhY2hlLUNvbnRyb2w6IHB1YmxpYywgbXVzdC1yZXZhbGlkYXRlLCBtYXgtYWdlPTAnKTsgLy8gSFRUUC8xLjEKCQkJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQkJCWhlYWRlcignRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQnKTsgLy8gRGF0ZSBpbiB0aGUgcGFzdAoJCQkJaGVhZGVyKCdMYXN0LU1vZGlmaWVkOiAnLmdtZGF0ZSgnRCwgZCBNIFkgSDppOnMnKS4nIEdNVCcpOwoJCQkJLy8gZm9yY2UgZG93bmxvYWQgZGlhbG9nCgkJCQlpZiAoc3RycG9zKHBocF9zYXBpX25hbWUoKSwgJ2NnaScpID09PSBmYWxzZSkgewoJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwoJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0nLCBmYWxzZSk7CgkJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL2Rvd25sb2FkJywgZmFsc2UpOwoJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wZGYnLCBmYWxzZSk7CgkJCQl9IGVsc2UgewoJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wZGYnKTsKCQkJCX0KCQkJCS8vIHVzZSB0aGUgQ29udGVudC1EaXNwb3NpdGlvbiBoZWFkZXIgdG8gc3VwcGx5IGEgcmVjb21tZW5kZWQgZmlsZW5hbWUKCQkJCWhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuYmFzZW5hbWUoJG5hbWUpLiciJyk7CgkJCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCQkJVENQREZfU1RBVElDOjpzZW5kT3V0cHV0RGF0YSgkdGhpcy0+Z2V0QnVmZmVyKCksICR0aGlzLT5idWZmZXJsZW4pOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnRic6CgkJCWNhc2UgJ0ZJJzoKCQkJY2FzZSAnRkQnOiB7CgkJCQkvLyBzYXZlIFBERiB0byBhIGxvY2FsIGZpbGUKCQkJCWlmICgkdGhpcy0+ZGlza2NhY2hlKSB7CgkJCQkJY29weSgkdGhpcy0+YnVmZmVyLCAkbmFtZSk7CgkJCQl9IGVsc2UgewoJCQkJCSRmID0gZm9wZW4oJG5hbWUsICd3YicpOwoJCQkJCWlmICghJGYpIHsKCQkJCQkJJHRoaXMtPkVycm9yKCdVbmFibGUgdG8gY3JlYXRlIG91dHB1dCBmaWxlOiAnLiRuYW1lKTsKCQkJCQl9CgkJCQkJZndyaXRlKCRmLCAkdGhpcy0+Z2V0QnVmZmVyKCksICR0aGlzLT5idWZmZXJsZW4pOwoJCQkJCWZjbG9zZSgkZik7CgkJCQl9CgkJCQlpZiAoJGRlc3QgPT0gJ0ZJJykgewoJCQkJCS8vIHNlbmQgaGVhZGVycyB0byBicm93c2VyCgkJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3BkZicpOwoJCQkJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZSwgbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wLCBtYXgtYWdlPTEnKTsKCQkJCQkvL2hlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpOyAvLyBIVFRQLzEuMQoJCQkJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQkJCQloZWFkZXIoJ0V4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UJyk7IC8vIERhdGUgaW4gdGhlIHBhc3QKCQkJCQloZWFkZXIoJ0xhc3QtTW9kaWZpZWQ6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycpLicgR01UJyk7CgkJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSInLmJhc2VuYW1lKCRuYW1lKS4nIicpOwoJCQkJCVRDUERGX1NUQVRJQzo6c2VuZE91dHB1dERhdGEoZmlsZV9nZXRfY29udGVudHMoJG5hbWUpLCBmaWxlc2l6ZSgkbmFtZSkpOwoJCQkJfSBlbHNlaWYgKCRkZXN0ID09ICdGRCcpIHsKCQkJCQkvLyBzZW5kIGhlYWRlcnMgdG8gYnJvd3NlcgoJCQkJCWlmIChvYl9nZXRfY29udGVudHMoKSkgewoJCQkJCQkkdGhpcy0+RXJyb3IoJ1NvbWUgZGF0YSBoYXMgYWxyZWFkeSBiZWVuIG91dHB1dCwgY2FuXCd0IHNlbmQgUERGIGZpbGUnKTsKCQkJCQl9CgkJCQkJaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7CgkJCQkJaWYgKGhlYWRlcnNfc2VudCgpKSB7CgkJCQkJCSR0aGlzLT5FcnJvcignU29tZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gb3V0cHV0IHRvIGJyb3dzZXIsIGNhblwndCBzZW5kIFBERiBmaWxlJyk7CgkJCQkJfQoJCQkJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHJpdmF0ZSwgbXVzdC1yZXZhbGlkYXRlLCBwb3N0LWNoZWNrPTAsIHByZS1jaGVjaz0wLCBtYXgtYWdlPTEnKTsKCQkJCQloZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7CgkJCQkJaGVhZGVyKCdFeHBpcmVzOiBTYXQsIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCcpOyAvLyBEYXRlIGluIHRoZSBwYXN0CgkJCQkJaGVhZGVyKCdMYXN0LU1vZGlmaWVkOiAnLmdtZGF0ZSgnRCwgZCBNIFkgSDppOnMnKS4nIEdNVCcpOwoJCQkJCS8vIGZvcmNlIGRvd25sb2FkIGRpYWxvZwoJCQkJCWlmIChzdHJwb3MocGhwX3NhcGlfbmFtZSgpLCAnY2dpJykgPT09IGZhbHNlKSB7CgkJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9mb3JjZS1kb3dubG9hZCcpOwoJCQkJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtJywgZmFsc2UpOwoJCQkJCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vZG93bmxvYWQnLCBmYWxzZSk7CgkJCQkJCWhlYWRlcignQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wZGYnLCBmYWxzZSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3BkZicpOwoJCQkJCX0KCQkJCQkvLyB1c2UgdGhlIENvbnRlbnQtRGlzcG9zaXRpb24gaGVhZGVyIHRvIHN1cHBseSBhIHJlY29tbWVuZGVkIGZpbGVuYW1lCgkJCQkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iJy5iYXNlbmFtZSgkbmFtZSkuJyInKTsKCQkJCQloZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOwoJCQkJCVRDUERGX1NUQVRJQzo6c2VuZE91dHB1dERhdGEoZmlsZV9nZXRfY29udGVudHMoJG5hbWUpLCBmaWxlc2l6ZSgkbmFtZSkpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnRSc6IHsKCQkJCS8vIHJldHVybiBQREYgYXMgYmFzZTY0IG1pbWUgbXVsdGktcGFydCBlbWFpbCBhdHRhY2htZW50IChSRkMgMjA0NSkKCQkJCSRyZXR2YWwgPSAnQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9wZGY7Jy4iXHJcbiI7CgkJCQkkcmV0dmFsIC49ICcgbmFtZT0iJy4kbmFtZS4nIicuIlxyXG4iOwoJCQkJJHJldHZhbCAuPSAnQ29udGVudC1UcmFuc2Zlci1FbmNvZGluZzogYmFzZTY0Jy4iXHJcbiI7CgkJCQkkcmV0dmFsIC49ICdDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OycuIlxyXG4iOwoJCQkJJHJldHZhbCAuPSAnIGZpbGVuYW1lPSInLiRuYW1lLiciJy4iXHJcblxyXG4iOwoJCQkJJHJldHZhbCAuPSBjaHVua19zcGxpdChiYXNlNjRfZW5jb2RlKCR0aGlzLT5nZXRCdWZmZXIoKSksIDc2LCAiXHJcbiIpOwoJCQkJcmV0dXJuICRyZXR2YWw7CgkJCX0KCQkJY2FzZSAnUyc6IHsKCQkJCS8vIHJldHVybnMgUERGIGFzIGEgc3RyaW5nCgkJCQlyZXR1cm4gJHRoaXMtPmdldEJ1ZmZlcigpOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCSR0aGlzLT5FcnJvcignSW5jb3JyZWN0IG91dHB1dCBkZXN0aW5hdGlvbjogJy4kZGVzdCk7CgkJCX0KCQl9CgkJcmV0dXJuICcnOwoJfQoKCS8qKgoJICogVW5zZXQgYWxsIGNsYXNzIHZhcmlhYmxlcyBleGNlcHQgdGhlIGZvbGxvd2luZyBjcml0aWNhbCB2YXJpYWJsZXMuCgkgKiBAcGFyYW0gJGRlc3Ryb3lhbGwgKGJvb2xlYW4pIGlmIHRydWUgZGVzdHJveXMgYWxsIGNsYXNzIHZhcmlhYmxlcywgb3RoZXJ3aXNlIHByZXNlcnZlcyBjcml0aWNhbCB2YXJpYWJsZXMuCgkgKiBAcGFyYW0gJHByZXNlcnZlX29iamNvcHkgKGJvb2xlYW4pIGlmIHRydWUgcHJlc2VydmVzIHRoZSBvYmpjb3B5IHZhcmlhYmxlCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC41LjAxNiAoMjAwOS0wMi0yNCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9kZXN0cm95KCRkZXN0cm95YWxsPWZhbHNlLCAkcHJlc2VydmVfb2JqY29weT1mYWxzZSkgewoJCWlmICgkZGVzdHJveWFsbCBBTkQgaXNzZXQoJHRoaXMtPmRpc2tjYWNoZSkgQU5EICR0aGlzLT5kaXNrY2FjaGUgQU5EICghJHByZXNlcnZlX29iamNvcHkpIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5idWZmZXIpKSkgewoJCQkvLyByZW1vdmUgYnVmZmVyIGZpbGUgZnJvbSBjYWNoZQoJCQl1bmxpbmsoJHRoaXMtPmJ1ZmZlcik7CgkJfQoJCWlmICgkZGVzdHJveWFsbCBBTkQgIWVtcHR5KCR0aGlzLT5jYWNoZWRfZmlsZXMpKSB7CgkJCS8vIHJlbW92ZSBjYWNoZWQgZmlsZXMKCQkJZm9yZWFjaCAoJHRoaXMtPmNhY2hlZF9maWxlcyBhcyAkY2FjaGVmaWxlKSB7CgkJCQlpZiAoaXNfZmlsZSgkY2FjaGVmaWxlKSkgewoJCQkJCXVubGluaygkY2FjaGVmaWxlKTsKCQkJCX0KCQkJfQoJCQl1bnNldCgkdGhpcy0+Y2FjaGVkX2ZpbGVzKTsKCQl9CgkJZm9yZWFjaCAoYXJyYXlfa2V5cyhnZXRfb2JqZWN0X3ZhcnMoJHRoaXMpKSBhcyAkdmFsKSB7CgkJCWlmICgkZGVzdHJveWFsbCBPUiAoCgkJCQkoJHZhbCAhPSAnaW50ZXJuYWxfZW5jb2RpbmcnKQoJCQkJQU5EICgkdmFsICE9ICdzdGF0ZScpCgkJCQlBTkQgKCR2YWwgIT0gJ2J1ZmZlcmxlbicpCgkJCQlBTkQgKCR2YWwgIT0gJ2J1ZmZlcicpCgkJCQlBTkQgKCR2YWwgIT0gJ2Rpc2tjYWNoZScpCgkJCQlBTkQgKCR2YWwgIT0gJ2NhY2hlZF9maWxlcycpCgkJCQlBTkQgKCR2YWwgIT0gJ3NpZ24nKQoJCQkJQU5EICgkdmFsICE9ICdzaWduYXR1cmVfZGF0YScpCgkJCQlBTkQgKCR2YWwgIT0gJ3NpZ25hdHVyZV9tYXhfbGVuZ3RoJykKCQkJCUFORCAoJHZhbCAhPSAnYnl0ZXJhbmdlX3N0cmluZycpCgkJCQkpKSB7CgkJCQlpZiAoKCEkcHJlc2VydmVfb2JqY29weSBPUiAoJHZhbCAhPSAnb2JqY29weScpKSBBTkQgaXNzZXQoJHRoaXMtPiR2YWwpKSB7CgkJCQkJdW5zZXQoJHRoaXMtPiR2YWwpOwoJCQkJfQoJCQl9CgkJfQoJfQoKCS8qKgoJICogQ2hlY2sgZm9yIGxvY2FsZS1yZWxhdGVkIGJ1ZwoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvY2hlY2tzKCkgewoJCS8vQ2hlY2sgZm9yIGxvY2FsZS1yZWxhdGVkIGJ1ZwoJCWlmICgxLjEgPT0gMSkgewoJCQkkdGhpcy0+RXJyb3IoJ0RvblwndCBhbHRlciB0aGUgbG9jYWxlIGJlZm9yZSBpbmNsdWRpbmcgY2xhc3MgZmlsZScpOwoJCX0KCQkvL0NoZWNrIGZvciBkZWNpbWFsIHNlcGFyYXRvcgoJCWlmIChzcHJpbnRmKCclLjFGJywgMS4wKSAhPSAnMS4wJykgewoJCQlzZXRsb2NhbGUoTENfTlVNRVJJQywgJ0MnKTsKCQl9Cgl9CgoJLyoqCgkgKiBSZXR1cm4gYW4gYXJyYXkgY29udGFpbmluZyB2YXJpYXRpb25zIGZvciB0aGUgYmFzaWMgcGFnZSBudW1iZXIgYWxpYXMuCgkgKiBAcGFyYW0gJGEgKHN0cmluZykgQmFzZSBhbGlhcy4KCSAqIEByZXR1cm4gYXJyYXkgb2YgcGFnZSBudW1iZXIgYWxpYXNlcwoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SW50ZXJuYWxQYWdlTnVtYmVyQWxpYXNlcygkYT0gJycpIHsKCQkkYWxpYXMgPSBhcnJheSgpOwoJCS8vIGJ1aWxkIGFycmF5IG9mIFVuaWNvZGUgKyBBU0NJSSB2YXJpYW50cyAodGhlIG9yZGVyIGlzIGltcG9ydGFudCkKCQkkYWxpYXMgPSBhcnJheSgndScgPT4gYXJyYXkoKSwgJ2EnID0+IGFycmF5KCkpOwoJCSR1ID0gJ3snLiRhLid9JzsKCQkkYWxpYXNbJ3UnXVtdID0gVENQREZfU1RBVElDOjpfZXNjYXBlKCR1KTsKCQlpZiAoJHRoaXMtPmlzdW5pY29kZSkgewoJCQkkYWxpYXNbJ3UnXVtdID0gVENQREZfU1RBVElDOjpfZXNjYXBlKFRDUERGX0ZPTlRTOjpVVEY4VG9MYXRpbjEoJHUsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCkpOwoJCQkkYWxpYXNbJ3UnXVtdID0gVENQREZfU1RBVElDOjpfZXNjYXBlKFRDUERGX0ZPTlRTOjp1dGY4U3RyUmV2KCR1LCBmYWxzZSwgJHRoaXMtPnRtcHJ0bCwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KSk7CgkJCSRhbGlhc1snYSddW10gPSBUQ1BERl9TVEFUSUM6Ol9lc2NhcGUoVENQREZfRk9OVFM6OlVURjhUb0xhdGluMSgkYSwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KSk7CgkJCSRhbGlhc1snYSddW10gPSBUQ1BERl9TVEFUSUM6Ol9lc2NhcGUoVENQREZfRk9OVFM6OnV0ZjhTdHJSZXYoJGEsIGZhbHNlLCAkdGhpcy0+dG1wcnRsLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpKTsKCQl9CgkJJGFsaWFzWydhJ11bXSA9IFRDUERGX1NUQVRJQzo6X2VzY2FwZSgkYSk7CgkJcmV0dXJuICRhbGlhczsKCX0KCgkvKioKCSAqIFJldHVybiBhbiBhcnJheSBjb250YWluaW5nIGFsbCBpbnRlcm5hbCBwYWdlIGFsaWFzZXMuCgkgKiBAcmV0dXJuIGFycmF5IG9mIHBhZ2UgbnVtYmVyIGFsaWFzZXMKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEFsbEludGVybmFsUGFnZU51bWJlckFsaWFzZXMoKSB7CgkJJGJhc2ljX2FsaWFzID0gYXJyYXkoVENQREZfU1RBVElDOjokYWxpYXNfdG90X3BhZ2VzLCBUQ1BERl9TVEFUSUM6OiRhbGlhc19udW1fcGFnZSwgVENQREZfU1RBVElDOjokYWxpYXNfZ3JvdXBfdG90X3BhZ2VzLCBUQ1BERl9TVEFUSUM6OiRhbGlhc19ncm91cF9udW1fcGFnZSwgVENQREZfU1RBVElDOjokYWxpYXNfcmlnaHRfc2hpZnQpOwoJCSRwbmFsaWFzID0gYXJyYXkoKTsKCQlmb3JlYWNoKCRiYXNpY19hbGlhcyBhcyAkayA9PiAkYSkgewoJCQkkcG5hbGlhc1ska10gPSAkdGhpcy0+Z2V0SW50ZXJuYWxQYWdlTnVtYmVyQWxpYXNlcygkYSk7CgkJfQoJCXJldHVybiAkcG5hbGlhczsKCX0KCgkvKioKCSAqIFJlcGxhY2UgcmlnaHQgc2hpZnQgcGFnZSBudW1iZXIgYWxpYXNlcyB3aXRoIHNwYWNlcyB0byBjb3JyZWN0IHJpZ2h0IGFsaWdubWVudC4KCSAqIFRoaXMgd29ya3MgcGVyZmVjdGx5IG9ubHkgd2hlbiB1c2luZyBtb25vc3BhY2VkIGZvbnRzLgoJICogQHBhcmFtICRwYWdlIChzdHJpbmcpIFBhZ2UgY29udGVudC4KCSAqIEBwYXJhbSAkYWxpYXNlcyAoYXJyYXkpIEFycmF5IG9mIHBhZ2UgYWxpYXNlcy4KCSAqIEBwYXJhbSAkZGlmZiAoaW50KSBpbml0aWFsIGRpZmZlcmVuY2UgdG8gYWRkLgoJICogQHJldHVybiByZXBsYWNlZCBwYWdlIGNvbnRlbnQuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiByZXBsYWNlUmlnaHRTaGlmdFBhZ2VOdW1BbGlhc2VzKCRwYWdlLCAkYWxpYXNlcywgJGRpZmYpIHsKCQlmb3JlYWNoICgkYWxpYXNlcyBhcyAkdHlwZSA9PiAkYWxpYXMpIHsKCQkJZm9yZWFjaCAoJGFsaWFzIGFzICRhKSB7CgkJCQkvLyBmaW5kIHBvc2l0aW9uIG9mIGNvbXBlbnNhdGlvbiBmYWN0b3IKCQkJCSRzdGFydG51bSA9IChzdHJwb3MoJGEsICc6JykgKyAxKTsKCQkJCSRhID0gc3Vic3RyKCRhLCAwLCAkc3RhcnRudW0pOwoJCQkJaWYgKCgkcG9zID0gc3RycG9zKCRwYWdlLCAkYSkpICE9PSBmYWxzZSkgewoJCQkJCS8vIGVuZCBvZiBhbGlhcwoJCQkJCSRlbmRudW0gPSBzdHJwb3MoJHBhZ2UsICd9JywgJHBvcyk7CgkJCQkJLy8gc3RyaW5nIHRvIGJlIHJlcGxhY2VkCgkJCQkJJGFhID0gc3Vic3RyKCRwYWdlLCAkcG9zLCAoJGVuZG51bSAtICRwb3MgKyAxKSk7CgkJCQkJLy8gZ2V0IGNvbXBlbnNhdGlvbiBmYWN0b3IKCQkJCQkkcmF0aW8gPSBzdWJzdHIoJHBhZ2UsICgkcG9zICsgJHN0YXJ0bnVtKSwgKCRlbmRudW0gLSAkcG9zIC0gJHN0YXJ0bnVtKSk7CgkJCQkJJHJhdGlvID0gcHJlZ19yZXBsYWNlKCcvW14wLTlcLl0vJywgJycsICRyYXRpbyk7CgkJCQkJJHJhdGlvID0gZmxvYXR2YWwoJHJhdGlvKTsKCQkJCQlpZiAoJHR5cGUgPT0gJ3UnKSB7CgkJCQkJCSRjaHJkaWZmID0gZmxvb3IoKCRkaWZmICsgMTIpICogJHJhdGlvKTsKCQkJCQkJJHNoaWZ0ID0gc3RyX3JlcGVhdCgnICcsICRjaHJkaWZmKTsKCQkJCQkJJHNoaWZ0ID0gVENQREZfRk9OVFM6OlVURjhUb1VURjE2QkUoJHNoaWZ0LCBmYWxzZSwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkY2hyZGlmZiA9IGZsb29yKCgkZGlmZiArIDExKSAqICRyYXRpbyk7CgkJCQkJCSRzaGlmdCA9IHN0cl9yZXBlYXQoJyAnLCAkY2hyZGlmZik7CgkJCQkJfQoJCQkJCSRwYWdlID0gc3RyX3JlcGxhY2UoJGFhLCAkc2hpZnQsICRwYWdlKTsKCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJHBhZ2U7Cgl9CgoJLyoqCgkgKiBTZXQgcGFnZSBib3hlcyB0byBiZSBpbmNsdWRlZCBvbiBwYWdlIGRlc2NyaXB0aW9ucy4KCSAqIEBwYXJhbSAkYm94ZXMgKGFycmF5KSBBcnJheSBvZiBwYWdlIGJveGVzIHRvIHNldCBvbiBkb2N1bWVudDogKCdNZWRpYUJveCcsICdDcm9wQm94JywgJ0JsZWVkQm94JywgJ1RyaW1Cb3gnLCAnQXJ0Qm94JykuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRQYWdlQm94VHlwZXMoJGJveGVzKSB7CgkJJHRoaXMtPnBhZ2VfYm94ZXMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRib3hlcyBhcyAkYm94KSB7CgkJCWlmIChpbl9hcnJheSgkYm94LCBUQ1BERl9TVEFUSUM6OiRwYWdlYm94ZXMpKSB7CgkJCQkkdGhpcy0+cGFnZV9ib3hlc1tdID0gJGJveDsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIE91dHB1dCBwYWdlcyAoYW5kIHJlcGxhY2UgcGFnZSBudW1iZXIgYWxpYXNlcykuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0cGFnZXMoKSB7CgkJJGZpbHRlciA9ICgkdGhpcy0+Y29tcHJlc3MpID8gJy9GaWx0ZXIgL0ZsYXRlRGVjb2RlICcgOiAnJzsKCQkvLyBnZXQgaW50ZXJuYWwgYWxpYXNlcyBmb3IgcGFnZSBudW1iZXJzCgkJJHBuYWxpYXMgPSAkdGhpcy0+Z2V0QWxsSW50ZXJuYWxQYWdlTnVtYmVyQWxpYXNlcygpOwoJCSRudW1fcGFnZXMgPSAkdGhpcy0+bnVtcGFnZXM7CgkJJHB0cGEgPSBUQ1BERl9TVEFUSUM6OmZvcm1hdFBhZ2VOdW1iZXIoKCR0aGlzLT5zdGFydGluZ19wYWdlX251bWJlciArICRudW1fcGFnZXMgLSAxKSk7CgkJJHB0cHUgPSBUQ1BERl9GT05UUzo6VVRGOFRvVVRGMTZCRSgkcHRwYSwgZmFsc2UsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJJHB0cF9udW1fY2hhcnMgPSAkdGhpcy0+R2V0TnVtQ2hhcnMoJHB0cGEpOwoJCSRwYWdlZ3JvdXBudW0gPSAwOwoJCSRncm91cG51bSA9IDA7CgkJJHB0Z3UgPSAxOwoJCSRwdGdhID0gMTsKCQkkcHRnX251bV9jaGFycyA9IDE7CgkJZm9yICgkbiA9IDE7ICRuIDw9ICRudW1fcGFnZXM7ICsrJG4pIHsKCQkJLy8gZ2V0IGN1cnJlbnQgcGFnZQoJCQkkdGVtcHBhZ2UgPSAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkbik7CgkJCSRwYWdlbGVuID0gc3RybGVuKCR0ZW1wcGFnZSk7CgkJCS8vIHNldCByZXBsYWNlbWVudHMgZm9yIHRvdGFsIHBhZ2VzIG51bWJlcgoJCQkkcG5wYSA9IFRDUERGX1NUQVRJQzo6Zm9ybWF0UGFnZU51bWJlcigoJHRoaXMtPnN0YXJ0aW5nX3BhZ2VfbnVtYmVyICsgJG4gLSAxKSk7CgkJCSRwbnB1ID0gVENQREZfRk9OVFM6OlVURjhUb1VURjE2QkUoJHBucGEsIGZhbHNlLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCQkkcG5wX251bV9jaGFycyA9ICR0aGlzLT5HZXROdW1DaGFycygkcG5wYSk7CgkJCSRwZGlmZiA9IDA7IC8vIGRpZmZlcmVuY2UgdXNlZCBmb3IgcmlnaHQgc2hpZnQgYWxpZ25tZW50IG9mIHBhZ2UgbnVtYmVycwoJCQkkZ2RpZmYgPSAwOyAvLyBkaWZmZXJlbmNlIHVzZWQgZm9yIHJpZ2h0IHNoaWZ0IGFsaWdubWVudCBvZiBwYWdlIGdyb3VwIG51bWJlcnMKCQkJaWYgKCFlbXB0eSgkdGhpcy0+cGFnZWdyb3VwcykpIHsKCQkJCWlmIChpc3NldCgkdGhpcy0+bmV3cGFnZWdyb3VwWyRuXSkpIHsKCQkJCQkkcGFnZWdyb3VwbnVtID0gMDsKCQkJCQkrKyRncm91cG51bTsKCQkJCQkkcHRnYSA9IFRDUERGX1NUQVRJQzo6Zm9ybWF0UGFnZU51bWJlcigkdGhpcy0+cGFnZWdyb3Vwc1skZ3JvdXBudW1dKTsKCQkJCQkkcHRndSA9IFRDUERGX0ZPTlRTOjpVVEY4VG9VVEYxNkJFKCRwdGdhLCBmYWxzZSwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KTsKCQkJCQkkcHRnX251bV9jaGFycyA9ICR0aGlzLT5HZXROdW1DaGFycygkcHRnYSk7CgkJCQl9CgkJCQkrKyRwYWdlZ3JvdXBudW07CgkJCQkkcG5nYSA9IFRDUERGX1NUQVRJQzo6Zm9ybWF0UGFnZU51bWJlcigkcGFnZWdyb3VwbnVtKTsKCQkJCSRwbmd1ID0gVENQREZfRk9OVFM6OlVURjhUb1VURjE2QkUoJHBuZ2EsIGZhbHNlLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCQkJJHBuZ19udW1fY2hhcnMgPSAkdGhpcy0+R2V0TnVtQ2hhcnMoJHBuZ2EpOwoJCQkJLy8gcmVwbGFjZSBwYWdlIG51bWJlcnMKCQkJCSRyZXBsYWNlID0gYXJyYXkoKTsKCQkJCSRyZXBsYWNlW10gPSBhcnJheSgkcHRndSwgJHB0Z19udW1fY2hhcnMsIDksICRwbmFsaWFzWzJdWyd1J10pOwoJCQkJJHJlcGxhY2VbXSA9IGFycmF5KCRwdGdhLCAkcHRnX251bV9jaGFycywgNywgJHBuYWxpYXNbMl1bJ2EnXSk7CgkJCQkkcmVwbGFjZVtdID0gYXJyYXkoJHBuZ3UsICRwbmdfbnVtX2NoYXJzLCA5LCAkcG5hbGlhc1szXVsndSddKTsKCQkJCSRyZXBsYWNlW10gPSBhcnJheSgkcG5nYSwgJHBuZ19udW1fY2hhcnMsIDcsICRwbmFsaWFzWzNdWydhJ10pOwoJCQkJbGlzdCgkdGVtcHBhZ2UsICRnZGlmZikgPSBUQ1BERl9TVEFUSUM6OnJlcGxhY2VQYWdlTnVtQWxpYXNlcygkdGVtcHBhZ2UsICRyZXBsYWNlLCAkZ2RpZmYpOwoJCQl9CgkJCS8vIHJlcGxhY2UgcGFnZSBudW1iZXJzCgkJCSRyZXBsYWNlID0gYXJyYXkoKTsKCQkJJHJlcGxhY2VbXSA9IGFycmF5KCRwdHB1LCAkcHRwX251bV9jaGFycywgOSwgJHBuYWxpYXNbMF1bJ3UnXSk7CgkJCSRyZXBsYWNlW10gPSBhcnJheSgkcHRwYSwgJHB0cF9udW1fY2hhcnMsIDcsICRwbmFsaWFzWzBdWydhJ10pOwoJCQkkcmVwbGFjZVtdID0gYXJyYXkoJHBucHUsICRwbnBfbnVtX2NoYXJzLCA5LCAkcG5hbGlhc1sxXVsndSddKTsKCQkJJHJlcGxhY2VbXSA9IGFycmF5KCRwbnBhLCAkcG5wX251bV9jaGFycywgNywgJHBuYWxpYXNbMV1bJ2EnXSk7CgkJCWxpc3QoJHRlbXBwYWdlLCAkcGRpZmYpID0gVENQREZfU1RBVElDOjpyZXBsYWNlUGFnZU51bUFsaWFzZXMoJHRlbXBwYWdlLCAkcmVwbGFjZSwgJHBkaWZmKTsKCQkJLy8gcmVwbGFjZSByaWdodCBzaGlmdCBhbGlhcwoJCQkkdGVtcHBhZ2UgPSAkdGhpcy0+cmVwbGFjZVJpZ2h0U2hpZnRQYWdlTnVtQWxpYXNlcygkdGVtcHBhZ2UsICRwbmFsaWFzWzRdLCBtYXgoJHBkaWZmLCAkZ2RpZmYpKTsKCQkJLy8gcmVwbGFjZSBFUFMgbWFya2VyCgkJCSR0ZW1wcGFnZSA9IHN0cl9yZXBsYWNlKCR0aGlzLT5lcHNtYXJrZXIsICcnLCAkdGVtcHBhZ2UpOwoJCQkvL1BhZ2UKCQkJJHRoaXMtPnBhZ2Vfb2JqX2lkWyRuXSA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCSRvdXQgPSAnPDwnOwoJCQkkb3V0IC49ICcgL1R5cGUgL1BhZ2UnOwoJCQkkb3V0IC49ICcgL1BhcmVudCAxIDAgUic7CgkJCSRvdXQgLj0gJyAvTGFzdE1vZGlmaWVkICcuJHRoaXMtPl9kYXRlc3RyaW5nKDAsICR0aGlzLT5kb2NfbW9kaWZpY2F0aW9uX3RpbWVzdGFtcCk7CgkJCSRvdXQgLj0gJyAvUmVzb3VyY2VzIDIgMCBSJzsKCQkJZm9yZWFjaCAoJHRoaXMtPnBhZ2VfYm94ZXMgYXMgJGJveCkgewoJCQkJJG91dCAuPSAnIC8nLiRib3g7CgkJCQkkb3V0IC49IHNwcmludGYoJyBbJUYgJUYgJUYgJUZdJywgJHRoaXMtPnBhZ2VkaW1bJG5dWyRib3hdWydsbHgnXSwgJHRoaXMtPnBhZ2VkaW1bJG5dWyRib3hdWydsbHknXSwgJHRoaXMtPnBhZ2VkaW1bJG5dWyRib3hdWyd1cngnXSwgJHRoaXMtPnBhZ2VkaW1bJG5dWyRib3hdWyd1cnknXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5wYWdlZGltWyRuXVsnQm94Q29sb3JJbmZvJ10pIEFORCAhZW1wdHkoJHRoaXMtPnBhZ2VkaW1bJG5dWydCb3hDb2xvckluZm8nXSkpIHsKCQkJCSRvdXQgLj0gJyAvQm94Q29sb3JJbmZvIDw8JzsKCQkJCWZvcmVhY2ggKCR0aGlzLT5wYWdlX2JveGVzIGFzICRib3gpIHsKCQkJCQlpZiAoaXNzZXQoJHRoaXMtPnBhZ2VkaW1bJG5dWydCb3hDb2xvckluZm8nXVskYm94XSkpIHsKCQkJCQkJJG91dCAuPSAnIC8nLiRib3guJyA8PCc7CgkJCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ0JveENvbG9ySW5mbyddWyRib3hdWydDJ10pKSB7CgkJCQkJCQkkY29sb3IgPSAkdGhpcy0+cGFnZWRpbVskbl1bJ0JveENvbG9ySW5mbyddWyRib3hdWydDJ107CgkJCQkJCQkkb3V0IC49ICcgL0MgWyc7CgkJCQkJCQkkb3V0IC49IHNwcmludGYoJyAlRiAlRiAlRicsICgkY29sb3JbMF0gLyAyNTUpLCAoJGNvbG9yWzFdIC8gMjU1KSwgKCRjb2xvclsyXSAvIDI1NSkpOwoJCQkJCQkJJG91dCAuPSAnIF0nOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ0JveENvbG9ySW5mbyddWyRib3hdWydXJ10pKSB7CgkJCQkJCQkkb3V0IC49ICcgL1cgJy4oJHRoaXMtPnBhZ2VkaW1bJG5dWydCb3hDb2xvckluZm8nXVskYm94XVsnVyddICogJHRoaXMtPmspOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ0JveENvbG9ySW5mbyddWyRib3hdWydTJ10pKSB7CgkJCQkJCQkkb3V0IC49ICcgL1MgLycuJHRoaXMtPnBhZ2VkaW1bJG5dWydCb3hDb2xvckluZm8nXVskYm94XVsnUyddOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ0JveENvbG9ySW5mbyddWyRib3hdWydEJ10pKSB7CgkJCQkJCQkkZGFzaGVzID0gJHRoaXMtPnBhZ2VkaW1bJG5dWydCb3hDb2xvckluZm8nXVskYm94XVsnRCddOwoJCQkJCQkJJG91dCAuPSAnIC9EIFsnOwoJCQkJCQkJZm9yZWFjaCAoJGRhc2hlcyBhcyAkZGFzaCkgewoJCQkJCQkJCSRvdXQgLj0gc3ByaW50ZignICVGJywgKCRkYXNoICogJHRoaXMtPmspKTsKCQkJCQkJCX0KCQkJCQkJCSRvdXQgLj0gJyBdJzsKCQkJCQkJfQoJCQkJCQkkb3V0IC49ICcgPj4nOwoJCQkJCX0KCQkJCX0KCQkJCSRvdXQgLj0gJyA+Pic7CgkJCX0KCQkJJG91dCAuPSAnIC9Db250ZW50cyAnLigkdGhpcy0+biArIDEpLicgMCBSJzsKCQkJJG91dCAuPSAnIC9Sb3RhdGUgJy4kdGhpcy0+cGFnZWRpbVskbl1bJ1JvdGF0ZSddOwoJCQlpZiAoISR0aGlzLT5wZGZhX21vZGUpIHsKCQkJCSRvdXQgLj0gJyAvR3JvdXAgPDwgL1R5cGUgL0dyb3VwIC9TIC9UcmFuc3BhcmVuY3kgL0NTIC9EZXZpY2VSR0IgPj4nOwoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ10pIEFORCAhZW1wdHkoJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddKSkgewoJCQkJLy8gcGFnZSB0cmFuc2l0aW9ucwoJCQkJaWYgKGlzc2V0KCR0aGlzLT5wYWdlZGltWyRuXVsndHJhbnMnXVsnRHVyJ10pKSB7CgkJCQkJJG91dCAuPSAnIC9EdXIgJy4kdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ0R1ciddOwoJCQkJfQoJCQkJJG91dCAuPSAnIC9UcmFucyA8PCc7CgkJCQkkb3V0IC49ICcgL1R5cGUgL1RyYW5zJzsKCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ1MnXSkpIHsKCQkJCQkkb3V0IC49ICcgL1MgLycuJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddWydTJ107CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddWydEJ10pKSB7CgkJCQkJJG91dCAuPSAnIC9EICcuJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddWydEJ107CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddWydEbSddKSkgewoJCQkJCSRvdXQgLj0gJyAvRG0gLycuJHRoaXMtPnBhZ2VkaW1bJG5dWyd0cmFucyddWydEbSddOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0aGlzLT5wYWdlZGltWyRuXVsndHJhbnMnXVsnTSddKSkgewoJCQkJCSRvdXQgLj0gJyAvTSAvJy4kdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ00nXTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ0RpJ10pKSB7CgkJCQkJJG91dCAuPSAnIC9EaSAnLiR0aGlzLT5wYWdlZGltWyRuXVsndHJhbnMnXVsnRGknXTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ1NTJ10pKSB7CgkJCQkJJG91dCAuPSAnIC9TUyAnLiR0aGlzLT5wYWdlZGltWyRuXVsndHJhbnMnXVsnU1MnXTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ0InXSkpIHsKCQkJCQkkb3V0IC49ICcgL0IgJy4kdGhpcy0+cGFnZWRpbVskbl1bJ3RyYW5zJ11bJ0InXTsKCQkJCX0KCQkJCSRvdXQgLj0gJyA+Pic7CgkJCX0KCQkJJG91dCAuPSAkdGhpcy0+X2dldGFubm90c3JlZnMoJG4pOwoJCQkkb3V0IC49ICcgL1BaICcuJHRoaXMtPnBhZ2VkaW1bJG5dWydQWiddOwoJCQkkb3V0IC49ICcgPj4nOwoJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkvL1BhZ2UgY29udGVudAoJCQkkcCA9ICgkdGhpcy0+Y29tcHJlc3MpID8gZ3pjb21wcmVzcygkdGVtcHBhZ2UpIDogJHRlbXBwYWdlOwoJCQkkdGhpcy0+X25ld29iaigpOwoJCQkkcCA9ICR0aGlzLT5fZ2V0cmF3c3RyZWFtKCRwKTsKCQkJJHRoaXMtPl9vdXQoJzw8Jy4kZmlsdGVyLicvTGVuZ3RoICcuc3RybGVuKCRwKS4nPj4gc3RyZWFtJy4iXG4iLiRwLiJcbiIuJ2VuZHN0cmVhbScuIlxuIi4nZW5kb2JqJyk7CgkJCWlmICgkdGhpcy0+ZGlza2NhY2hlKSB7CgkJCQkvLyByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCgkJCQl1bmxpbmsoJHRoaXMtPnBhZ2VzWyRuXSk7CgkJCX0KCQl9CgkJLy9QYWdlcyByb290CgkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKDEpLiJcbiI7CgkJJG91dCAuPSAnPDwgL1R5cGUgL1BhZ2VzIC9LaWRzIFsnOwoJCWZvcmVhY2goJHRoaXMtPnBhZ2Vfb2JqX2lkIGFzICRwYWdlX29iaikgewoJCQkkb3V0IC49ICcgJy4kcGFnZV9vYmouJyAwIFInOwoJCX0KCQkkb3V0IC49ICcgXSAvQ291bnQgJy4kbnVtX3BhZ2VzLicgPj4nOwoJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkkdGhpcy0+X291dCgkb3V0KTsKCX0KCgkvKioKCSAqIE91dHB1dCByZWZlcmVuY2VzIHRvIHBhZ2UgYW5ub3RhdGlvbnMKCSAqIEBwYXJhbSAkbiAoaW50KSBwYWdlIG51bWJlcgoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjcuMDAwICgyMDA4LTA4LTI5KQoJICogQGRlcHJlY2F0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRhbm5vdHNyZWZzKCRuKSB7CgkJJHRoaXMtPl9vdXQoJHRoaXMtPl9nZXRhbm5vdHNyZWZzKCRuKSk7Cgl9CgoJLyoqCgkgKiBHZXQgcmVmZXJlbmNlcyB0byBwYWdlIGFubm90YXRpb25zLgoJICogQHBhcmFtICRuIChpbnQpIHBhZ2UgbnVtYmVyCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDEwICgyMDEwLTA1LTE3KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2dldGFubm90c3JlZnMoJG4pIHsKCQlpZiAoIShpc3NldCgkdGhpcy0+UGFnZUFubm90c1skbl0pIE9SICgkdGhpcy0+c2lnbiBBTkQgaXNzZXQoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSkpKSkgewoJCQlyZXR1cm4gJyc7CgkJfQoJCSRvdXQgPSAnIC9Bbm5vdHMgWyc7CgkJaWYgKGlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyRuXSkpIHsKCQkJZm9yZWFjaCAoJHRoaXMtPlBhZ2VBbm5vdHNbJG5dIGFzICRrZXkgPT4gJHZhbCkgewoJCQkJaWYgKCFpbl9hcnJheSgkdmFsWyduJ10sICR0aGlzLT5yYWRpb19ncm91cHMpKSB7CgkJCQkJJG91dCAuPSAnICcuJHZhbFsnbiddLicgMCBSJzsKCQkJCX0KCQkJfQoJCQkvLyBhZGQgcmFkaW9idXR0b24gZ3JvdXBzCgkJCWlmIChpc3NldCgkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyRuXSkpIHsKCQkJCWZvcmVhY2ggKCR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJG5dIGFzICRrZXkgPT4gJGRhdGEpIHsKCQkJCQlpZiAoaXNzZXQoJGRhdGFbJ24nXSkpIHsKCQkJCQkJJG91dCAuPSAnICcuJGRhdGFbJ24nXS4nIDAgUic7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCWlmICgkdGhpcy0+c2lnbiBBTkQgKCRuID09ICR0aGlzLT5zaWduYXR1cmVfYXBwZWFyYW5jZVsncGFnZSddKSBBTkQgaXNzZXQoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSkpIHsKCQkJLy8gc2V0IHJlZmVyZW5jZSBmb3Igc2lnbmF0dXJlIG9iamVjdAoJCQkkb3V0IC49ICcgJy4kdGhpcy0+c2lnX29ial9pZC4nIDAgUic7CgkJfQoJCWlmICghZW1wdHkoJHRoaXMtPmVtcHR5X3NpZ25hdHVyZV9hcHBlYXJhbmNlKSkgewoJCQlmb3JlYWNoICgkdGhpcy0+ZW1wdHlfc2lnbmF0dXJlX2FwcGVhcmFuY2UgYXMgJGVzYSkgewoJCQkJaWYgKCRlc2FbJ3BhZ2UnXSA9PSAkbikgewoJCQkJCS8vIHNldCByZWZlcmVuY2UgZm9yIGVtcHR5IHNpZ25hdHVyZSBvYmplY3RzCgkJCQkJJG91dCAuPSAnICcuJGVzYVsnb2JqaWQnXS4nIDAgUic7CgkJCQl9CgkJCX0KCQl9CgkJJG91dCAuPSAnIF0nOwoJCXJldHVybiAkb3V0OwoJfQoKCS8qKgoJICogT3V0cHV0IGFubm90YXRpb25zIG9iamVjdHMgZm9yIGFsbCBwYWdlcy4KCSAqICEhISBUSElTIE1FVEhPRCBJUyBOT1QgWUVUIENPTVBMRVRFRCAhISEKCSAqIFNlZSBzZWN0aW9uIDEyLjUgb2YgUERGIDMyMDAwXzIwMDggcmVmZXJlbmNlLgoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjAuMDE4ICgyMDA4LTA4LTA2KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dGFubm90c29ianMoKSB7CgkJLy8gcmVzZXQgb2JqZWN0IGNvdW50ZXIKCQlmb3IgKCRuPTE7ICRuIDw9ICR0aGlzLT5udW1wYWdlczsgKyskbikgewoJCQlpZiAoaXNzZXQoJHRoaXMtPlBhZ2VBbm5vdHNbJG5dKSkgewoJCQkJLy8gc2V0IHBhZ2UgYW5ub3RhdGlvbnMKCQkJCWZvcmVhY2ggKCR0aGlzLT5QYWdlQW5ub3RzWyRuXSBhcyAka2V5ID0+ICRwbCkgewoJCQkJCSRhbm5vdF9vYmpfaWQgPSAkdGhpcy0+UGFnZUFubm90c1skbl1bJGtleV1bJ24nXTsKCQkJCQkvLyBjcmVhdGUgYW5ub3RhdGlvbiBvYmplY3QgZm9yIGdyb3VwaW5nIHJhZGlvYnV0dG9ucwoJCQkJCWlmIChpc3NldCgkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyRuXVskcGxbJ3R4dCddXSkgQU5EIGlzX2FycmF5KCR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJG5dWyRwbFsndHh0J11dKSkgewoJCQkJCQkkcmFkaW9fYnV0dG9uX29ial9pZCA9ICR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJG5dWyRwbFsndHh0J11dWyduJ107CgkJCQkJCSRhbm5vdHMgPSAnPDwnOwoJCQkJCQkkYW5ub3RzIC49ICcgL1R5cGUgL0Fubm90JzsKCQkJCQkJJGFubm90cyAuPSAnIC9TdWJ0eXBlIC9XaWRnZXQnOwoJCQkJCQkkYW5ub3RzIC49ICcgL1JlY3QgWzAgMCAwIDBdJzsKCQkJCQkJaWYgKCR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJG5dWyRwbFsndHh0J11dWycjcmVhZG9ubHkjJ10pIHsKCQkJCQkJCS8vIHJlYWQgb25seQoJCQkJCQkJJGFubm90cyAuPSAnIC9GIDY4JzsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvRmYgNDkxNTMnOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGFubm90cyAuPSAnIC9GIDQnOyAvLyBkZWZhdWx0IHByaW50IGZvciBQREYvQQoJCQkJCQkJJGFubm90cyAuPSAnIC9GZiA0OTE1Mic7CgkJCQkJCX0KCQkJCQkJJGFubm90cyAuPSAnIC9UICcuJHRoaXMtPl9kYXRhc3RyaW5nKCRwbFsndHh0J10sICRyYWRpb19idXR0b25fb2JqX2lkKTsKCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3R1J10pIEFORCBpc19zdHJpbmcoJHBsWydvcHQnXVsndHUnXSkpIHsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvVFUgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJHBsWydvcHQnXVsndHUnXSwgJHJhZGlvX2J1dHRvbl9vYmpfaWQpOwoJCQkJCQl9CgkJCQkJCSRhbm5vdHMgLj0gJyAvRlQgL0J0bic7CgkJCQkJCSRhbm5vdHMgLj0gJyAvS2lkcyBbJzsKCQkJCQkJJGRlZnZhbCA9ICcnOwoJCQkJCQlmb3JlYWNoICgkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyRuXVskcGxbJ3R4dCddXSBhcyAka2V5ID0+ICRkYXRhKSB7CgkJCQkJCQlpZiAoaXNzZXQoJGRhdGFbJ2tpZCddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAnLiRkYXRhWydraWQnXS4nIDAgUic7CgkJCQkJCQkJaWYgKCRkYXRhWydkZWYnXSAhPT0gJ09mZicpIHsKCQkJCQkJCQkJJGRlZnZhbCA9ICRkYXRhWydkZWYnXTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJGFubm90cyAuPSAnIF0nOwoJCQkJCQlpZiAoIWVtcHR5KCRkZWZ2YWwpKSB7CgkJCQkJCQkkYW5ub3RzIC49ICcgL1YgLycuJGRlZnZhbDsKCQkJCQkJfQoJCQkJCQkkYW5ub3RzIC49ICcgPj4nOwoJCQkJCQkkdGhpcy0+X291dCgkdGhpcy0+X2dldG9iaigkcmFkaW9fYnV0dG9uX29ial9pZCkuIlxuIi4kYW5ub3RzLiJcbiIuJ2VuZG9iaicpOwoJCQkJCQkkdGhpcy0+Zm9ybV9vYmpfaWRbXSA9ICRyYWRpb19idXR0b25fb2JqX2lkOwoJCQkJCQkvLyBzdG9yZSBvYmplY3QgaWQgdG8gYmUgdXNlZCBvbiBQYXJlbnQgZW50cnkgb2YgS2lkcwoJCQkJCQkkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyRuXVskcGxbJ3R4dCddXSA9ICRyYWRpb19idXR0b25fb2JqX2lkOwoJCQkJCX0KCQkJCQkkZm9ybWZpZWxkID0gZmFsc2U7CgkJCQkJJHBsWydvcHQnXSA9IGFycmF5X2NoYW5nZV9rZXlfY2FzZSgkcGxbJ29wdCddLCBDQVNFX0xPV0VSKTsKCQkJCQkkYSA9ICRwbFsneCddICogJHRoaXMtPms7CgkJCQkJJGIgPSAkdGhpcy0+cGFnZWRpbVskbl1bJ2gnXSAtICgoJHBsWyd5J10gKyAkcGxbJ2gnXSkgKiAkdGhpcy0+ayk7CgkJCQkJJGMgPSAkcGxbJ3cnXSAqICR0aGlzLT5rOwoJCQkJCSRkID0gJHBsWydoJ10gKiAkdGhpcy0+azsKCQkJCQkkcmVjdCA9IHNwcmludGYoJyVGICVGICVGICVGJywgJGEsICRiLCAkYSskYywgJGIrJGQpOwoJCQkJCS8vIGNyZWF0ZSBuZXcgYW5ub3RhdGlvbiBvYmplY3QKCQkJCQkkYW5ub3RzID0gJzw8L1R5cGUgL0Fubm90JzsKCQkJCQkkYW5ub3RzIC49ICcgL1N1YnR5cGUgLycuJHBsWydvcHQnXVsnc3VidHlwZSddOwoJCQkJCSRhbm5vdHMgLj0gJyAvUmVjdCBbJy4kcmVjdC4nXSc7CgkJCQkJJGZ0ID0gYXJyYXkoJ0J0bicsICdUeCcsICdDaCcsICdTaWcnKTsKCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnZnQnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2Z0J10sICRmdCkpIHsKCQkJCQkJJGFubm90cyAuPSAnIC9GVCAvJy4kcGxbJ29wdCddWydmdCddOwoJCQkJCQkkZm9ybWZpZWxkID0gdHJ1ZTsKCQkJCQl9CgkJCQkJJGFubm90cyAuPSAnIC9Db250ZW50cyAnLiR0aGlzLT5fdGV4dHN0cmluZygkcGxbJ3R4dCddLCAkYW5ub3Rfb2JqX2lkKTsKCQkJCQkkYW5ub3RzIC49ICcgL1AgJy4kdGhpcy0+cGFnZV9vYmpfaWRbJG5dLicgMCBSJzsKCQkJCQkkYW5ub3RzIC49ICcgL05NICcuJHRoaXMtPl9kYXRhc3RyaW5nKHNwcmludGYoJyUwNHUtJTA0dScsICRuLCAka2V5KSwgJGFubm90X29ial9pZCk7CgkJCQkJJGFubm90cyAuPSAnIC9NICcuJHRoaXMtPl9kYXRlc3RyaW5nKCRhbm5vdF9vYmpfaWQsICR0aGlzLT5kb2NfbW9kaWZpY2F0aW9uX3RpbWVzdGFtcCk7CgkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2YnXSkpIHsKCQkJCQkJJGZ2YWwgPSAwOwoJCQkJCQlpZiAoaXNfYXJyYXkoJHBsWydvcHQnXVsnZiddKSkgewoJCQkJCQkJZm9yZWFjaCAoJHBsWydvcHQnXVsnZiddIGFzICRmKSB7CgkJCQkJCQkJc3dpdGNoIChzdHJ0b2xvd2VyKCRmKSkgewoJCQkJCQkJCQljYXNlICdpbnZpc2libGUnOiB7CgkJCQkJCQkJCQkkZnZhbCArPSAxIDw8IDA7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdoaWRkZW4nOiB7CgkJCQkJCQkJCQkkZnZhbCArPSAxIDw8IDE7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdwcmludCc6IHsKCQkJCQkJCQkJCSRmdmFsICs9IDEgPDwgMjsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ25vem9vbSc6IHsKCQkJCQkJCQkJCSRmdmFsICs9IDEgPDwgMzsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ25vcm90YXRlJzogewoJCQkJCQkJCQkJJGZ2YWwgKz0gMSA8PCA0OwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAnbm92aWV3JzogewoJCQkJCQkJCQkJJGZ2YWwgKz0gMSA8PCA1OwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAncmVhZG9ubHknOiB7CgkJCQkJCQkJCQkkZnZhbCArPSAxIDw8IDY7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdsb2NrZWQnOiB7CgkJCQkJCQkJCQkkZnZhbCArPSAxIDw8IDg7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICd0b2dnbGVub3ZpZXcnOiB7CgkJCQkJCQkJCQkkZnZhbCArPSAxIDw8IDk7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdsb2NrZWRjb250ZW50cyc6IHsKCQkJCQkJCQkJCSRmdmFsICs9IDEgPDwgMTA7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQlkZWZhdWx0OiB7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRmdmFsID0gaW50dmFsKCRwbFsnb3B0J11bJ2YnXSk7CgkJCQkJCX0KCQkJCQl9IGVsc2UgewoJCQkJCQkkZnZhbCA9IDQ7CgkJCQkJfQoJCQkJCWlmICgkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCQkJCS8vIGZvcmNlIHByaW50IGZsYWcgZm9yIFBERi9BIG1vZGUKCQkJCQkJJGZ2YWwgfD0gNDsKCQkJCQl9CgkJCQkJJGFubm90cyAuPSAnIC9GICcuaW50dmFsKCRmdmFsKTsKCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnYXMnXSkgQU5EIGlzX3N0cmluZygkcGxbJ29wdCddWydhcyddKSkgewoJCQkJCQkkYW5ub3RzIC49ICcgL0FTIC8nLiRwbFsnb3B0J11bJ2FzJ107CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydhcCddKSkgewoJCQkJCQkvLyBhcHBlYXJhbmNlIHN0cmVhbQoJCQkJCQkkYW5ub3RzIC49ICcgL0FQIDw8JzsKCQkJCQkJaWYgKGlzX2FycmF5KCRwbFsnb3B0J11bJ2FwJ10pKSB7CgkJCQkJCQlmb3JlYWNoICgkcGxbJ29wdCddWydhcCddIGFzICRhcG1vZGUgPT4gJGFwZGVmKSB7CgkJCQkJCQkJLy8gJGFwbW9kZSBjYW4gYmU6IG4gPSBub3JtYWw7IHIgPSByb2xsb3ZlcjsgZCA9IGRvd247CgkJCQkJCQkJJGFubm90cyAuPSAnIC8nLnN0cnRvdXBwZXIoJGFwbW9kZSk7CgkJCQkJCQkJaWYgKGlzX2FycmF5KCRhcGRlZikpIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIDw8JzsKCQkJCQkJCQkJZm9yZWFjaCAoJGFwZGVmIGFzICRhcHN0YXRlID0+ICRzdHJlYW0pIHsKCQkJCQkJCQkJCS8vIHJlZmVyZW5jZSB0byBYT2JqZWN0IHRoYXQgZGVmaW5lIHRoZSBhcHBlYXJhbmNlIGZvciB0aGlzIG1vZGUtc3RhdGUKCQkJCQkJCQkJCSRhcHNvYmppZCA9ICR0aGlzLT5fcHV0QVBYT2JqZWN0KCRjLCAkZCwgJHN0cmVhbSk7CgkJCQkJCQkJCQkkYW5ub3RzIC49ICcgLycuJGFwc3RhdGUuJyAnLiRhcHNvYmppZC4nIDAgUic7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGFubm90cyAuPSAnID4+JzsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkvLyByZWZlcmVuY2UgdG8gWE9iamVjdCB0aGF0IGRlZmluZSB0aGUgYXBwZWFyYW5jZSBmb3IgdGhpcyBtb2RlCgkJCQkJCQkJCSRhcHNvYmppZCA9ICR0aGlzLT5fcHV0QVBYT2JqZWN0KCRjLCAkZCwgJGFwZGVmKTsKCQkJCQkJCQkJJGFubm90cyAuPSAnICcuJGFwc29iamlkLicgMCBSJzsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkYW5ub3RzIC49ICRwbFsnb3B0J11bJ2FwJ107CgkJCQkJCX0KCQkJCQkJJGFubm90cyAuPSAnID4+JzsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2JzJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnYnMnXSkpKSB7CgkJCQkJCSRhbm5vdHMgLj0gJyAvQlMgPDwnOwoJCQkJCQkkYW5ub3RzIC49ICcgL1R5cGUgL0JvcmRlcic7CgkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydicyddWyd3J10pKSB7CgkJCQkJCQkkYW5ub3RzIC49ICcgL1cgJy5pbnR2YWwoJHBsWydvcHQnXVsnYnMnXVsndyddKTsKCQkJCQkJfQoJCQkJCQkkYnN0eWxlcyA9IGFycmF5KCdTJywgJ0QnLCAnQicsICdJJywgJ1UnKTsKCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2JzJ11bJ3MnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2JzJ11bJ3MnXSwgJGJzdHlsZXMpKSB7CgkJCQkJCQkkYW5ub3RzIC49ICcgL1MgLycuJHBsWydvcHQnXVsnYnMnXVsncyddOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydicyddWydkJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnYnMnXVsnZCddKSkpIHsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvRCBbJzsKCQkJCQkJCWZvcmVhY2ggKCRwbFsnb3B0J11bJ2JzJ11bJ2QnXSBhcyAkY29yZCkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAnLmludHZhbCgkY29yZCk7CgkJCQkJCQl9CgkJCQkJCQkkYW5ub3RzIC49ICddJzsKCQkJCQkJfQoJCQkJCQkkYW5ub3RzIC49ICcgPj4nOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRhbm5vdHMgLj0gJyAvQm9yZGVyIFsnOwoJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnYm9yZGVyJ10pIEFORCAoY291bnQoJHBsWydvcHQnXVsnYm9yZGVyJ10pID49IDMpKSB7CgkJCQkJCQkkYW5ub3RzIC49IGludHZhbCgkcGxbJ29wdCddWydib3JkZXInXVswXSkuJyAnOwoJCQkJCQkJJGFubm90cyAuPSBpbnR2YWwoJHBsWydvcHQnXVsnYm9yZGVyJ11bMV0pLicgJzsKCQkJCQkJCSRhbm5vdHMgLj0gaW50dmFsKCRwbFsnb3B0J11bJ2JvcmRlciddWzJdKTsKCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydib3JkZXInXVszXSkgQU5EIGlzX2FycmF5KCRwbFsnb3B0J11bJ2JvcmRlciddWzNdKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyBbJzsKCQkJCQkJCQlmb3JlYWNoICgkcGxbJ29wdCddWydib3JkZXInXVszXSBhcyAkZGFzaCkgewoJCQkJCQkJCQkkYW5ub3RzIC49IGludHZhbCgkZGFzaCkuJyAnOwoJCQkJCQkJCX0KCQkJCQkJCQkkYW5ub3RzIC49ICddJzsKCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRhbm5vdHMgLj0gJzAgMCAwJzsKCQkJCQkJfQoJCQkJCQkkYW5ub3RzIC49ICddJzsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2JlJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnYmUnXSkpKSB7CgkJCQkJCSRhbm5vdHMgLj0gJyAvQkUgPDwnOwoJCQkJCQkkYnN0eWxlcyA9IGFycmF5KCdTJywgJ0MnKTsKCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2JlJ11bJ3MnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2JlJ11bJ3MnXSwgJGJzdHlsZXMpKSB7CgkJCQkJCQkkYW5ub3RzIC49ICcgL1MgLycuJHBsWydvcHQnXVsnYnMnXVsncyddOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGFubm90cyAuPSAnIC9TIC9TJzsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnYmUnXVsnaSddKSBBTkQgKCRwbFsnb3B0J11bJ2JlJ11bJ2knXSA+PSAwKSBBTkQgKCRwbFsnb3B0J11bJ2JlJ11bJ2knXSA8PSAyKSkgewoJCQkJCQkJJGFubm90cyAuPSAnIC9JICcuc3ByaW50ZignICVGJywgJHBsWydvcHQnXVsnYmUnXVsnaSddKTsKCQkJCQkJfQoJCQkJCQkkYW5ub3RzIC49ICc+Pic7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydjJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnYyddKSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydjJ10pKSB7CgkJCQkJCSRhbm5vdHMgLj0gJyAvQyAnLlRDUERGX0NPTE9SUzo6Z2V0Q29sb3JTdHJpbmdGcm9tQXJyYXkoJHBsWydvcHQnXVsnYyddKTsKCQkJCQl9CgkJCQkJLy8kYW5ub3RzIC49ICcgL1N0cnVjdFBhcmVudCAnOwoJCQkJCS8vJGFubm90cyAuPSAnIC9PQyAnOwoJCQkJCSRtYXJrdXBzID0gYXJyYXkoJ3RleHQnLCAnZnJlZXRleHQnLCAnbGluZScsICdzcXVhcmUnLCAnY2lyY2xlJywgJ3BvbHlnb24nLCAncG9seWxpbmUnLCAnaGlnaGxpZ2h0JywgJ3VuZGVybGluZScsICdzcXVpZ2dseScsICdzdHJpa2VvdXQnLCAnc3RhbXAnLCAnY2FyZXQnLCAnaW5rJywgJ2ZpbGVhdHRhY2htZW50JywgJ3NvdW5kJyk7CgkJCQkJaWYgKGluX2FycmF5KHN0cnRvbG93ZXIoJHBsWydvcHQnXVsnc3VidHlwZSddKSwgJG1hcmt1cHMpKSB7CgkJCQkJCS8vIHRoaXMgaXMgYSBtYXJrdXAgdHlwZQoJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsndCddKSBBTkQgaXNfc3RyaW5nKCRwbFsnb3B0J11bJ3QnXSkpIHsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvVCAnLiR0aGlzLT5fdGV4dHN0cmluZygkcGxbJ29wdCddWyd0J10sICRhbm5vdF9vYmpfaWQpOwoJCQkJCQl9CgkJCQkJCS8vJGFubm90cyAuPSAnIC9Qb3B1cCAnOwoJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnY2EnXSkpIHsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvQ0EgJy5zcHJpbnRmKCclRicsIGZsb2F0dmFsKCRwbFsnb3B0J11bJ2NhJ10pKTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsncmMnXSkpIHsKCQkJCQkJCSRhbm5vdHMgLj0gJyAvUkMgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWydvcHQnXVsncmMnXSwgJGFubm90X29ial9pZCk7CgkJCQkJCX0KCQkJCQkJJGFubm90cyAuPSAnIC9DcmVhdGlvbkRhdGUgJy4kdGhpcy0+X2RhdGVzdHJpbmcoJGFubm90X29ial9pZCwgJHRoaXMtPmRvY19jcmVhdGlvbl90aW1lc3RhbXApOwoJCQkJCQkvLyRhbm5vdHMgLj0gJyAvSVJUICc7CgkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydzdWJqJ10pKSB7CgkJCQkJCQkkYW5ub3RzIC49ICcgL1N1YmogJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWydvcHQnXVsnc3ViaiddLCAkYW5ub3Rfb2JqX2lkKTsKCQkJCQkJfQoJCQkJCQkvLyRhbm5vdHMgLj0gJyAvUlQgJzsKCQkJCQkJLy8kYW5ub3RzIC49ICcgL0lUICc7CgkJCQkJCS8vJGFubm90cyAuPSAnIC9FeERhdGEgJzsKCQkJCQl9CgkJCQkJJGxpbmVlbmRpbmdzID0gYXJyYXkoJ1NxdWFyZScsICdDaXJjbGUnLCAnRGlhbW9uZCcsICdPcGVuQXJyb3cnLCAnQ2xvc2VkQXJyb3cnLCAnTm9uZScsICdCdXR0JywgJ1JPcGVuQXJyb3cnLCAnUkNsb3NlZEFycm93JywgJ1NsYXNoJyk7CgkJCQkJLy8gQW5ub3RhdGlvbiB0eXBlcwoJCQkJCXN3aXRjaCAoc3RydG9sb3dlcigkcGxbJ29wdCddWydzdWJ0eXBlJ10pKSB7CgkJCQkJCWNhc2UgJ3RleHQnOiB7CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnb3BlbiddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvT3BlbiAnLiAoc3RydG9sb3dlcigkcGxbJ29wdCddWydvcGVuJ10pID09ICd0cnVlJyA/ICd0cnVlJyA6ICdmYWxzZScpOwoJCQkJCQkJfQoJCQkJCQkJJGljb25zYXBwID0gYXJyYXkoJ0NvbW1lbnQnLCAnSGVscCcsICdJbnNlcnQnLCAnS2V5JywgJ05ld1BhcmFncmFwaCcsICdOb3RlJywgJ1BhcmFncmFwaCcpOwoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ25hbWUnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ25hbWUnXSwgJGljb25zYXBwKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvTmFtZSAvJy4kcGxbJ29wdCddWyduYW1lJ107CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvTmFtZSAvTm90ZSc7CgkJCQkJCQl9CgkJCQkJCQkkc3RhdGVtb2RlbHMgPSBhcnJheSgnTWFya2VkJywgJ1JldmlldycpOwoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3N0YXRlbW9kZWwnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ3N0YXRlbW9kZWwnXSwgJHN0YXRlbW9kZWxzKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvU3RhdGVNb2RlbCAvJy4kcGxbJ29wdCddWydzdGF0ZW1vZGVsJ107CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRwbFsnb3B0J11bJ3N0YXRlbW9kZWwnXSA9ICdNYXJrZWQnOwoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvU3RhdGVNb2RlbCAvJy4kcGxbJ29wdCddWydzdGF0ZW1vZGVsJ107CgkJCQkJCQl9CgkJCQkJCQlpZiAoJHBsWydvcHQnXVsnc3RhdGVtb2RlbCddID09ICdNYXJrZWQnKSB7CgkJCQkJCQkJJHN0YXRlcyA9IGFycmF5KCdBY2NlcHRlZCcsICdVbm1hcmtlZCcpOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkc3RhdGVzID0gYXJyYXkoJ0FjY2VwdGVkJywgJ1JlamVjdGVkJywgJ0NhbmNlbGxlZCcsICdDb21wbGV0ZWQnLCAnTm9uZScpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3N0YXRlJ10pIEFORCBpbl9hcnJheSgkcGxbJ29wdCddWydzdGF0ZSddLCAkc3RhdGVzKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvU3RhdGUgLycuJHBsWydvcHQnXVsnc3RhdGUnXTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJaWYgKCRwbFsnb3B0J11bJ3N0YXRlbW9kZWwnXSA9PSAnTWFya2VkJykgewoJCQkJCQkJCQkkYW5ub3RzIC49ICcgL1N0YXRlIC9Vbm1hcmtlZCc7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9TdGF0ZSAvTm9uZSc7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnbGluayc6IHsKCQkJCQkJCWlmIChpc19zdHJpbmcoJHBsWyd0eHQnXSkpIHsKCQkJCQkJCQlpZiAoJHBsWyd0eHQnXVswXSA9PSAnIycpIHsKCQkJCQkJCQkJLy8gaW50ZXJuYWwgZGVzdGluYXRpb24KCQkJCQkJCQkJJGFubm90cyAuPSAnIC9EZXN0IC8nLlRDUERGX1NUQVRJQzo6ZW5jb2RlTmFtZU9iamVjdChzdWJzdHIoJHBsWyd0eHQnXSwgMSkpOwoJCQkJCQkJCX0gZWxzZWlmICgkcGxbJ3R4dCddWzBdID09ICclJykgewoJCQkJCQkJCQkvLyBlbWJlZGRlZCBQREYgZmlsZQoJCQkJCQkJCQkkZmlsZW5hbWUgPSBiYXNlbmFtZShzdWJzdHIoJHBsWyd0eHQnXSwgMSkpOwoJCQkJCQkJCQkkYW5ub3RzIC49ICcgL0EgPDwgL1MgL0dvVG9FIC9EIFswIC9GaXRdIC9OZXdXaW5kb3cgdHJ1ZSAvVCA8PCAvUiAvQyAvUCAnLigkbiAtIDEpLicgL0EgJy4kdGhpcy0+ZW1iZWRkZWRmaWxlc1skZmlsZW5hbWVdWydhJ10uJyA+PiA+Pic7CgkJCQkJCQkJfSBlbHNlaWYgKCRwbFsndHh0J11bMF0gPT0gJyonKSB7CgkJCQkJCQkJCS8vIGVtYmVkZGVkIGdlbmVyaWMgZmlsZQoJCQkJCQkJCQkkZmlsZW5hbWUgPSBiYXNlbmFtZShzdWJzdHIoJHBsWyd0eHQnXSwgMSkpOwoJCQkJCQkJCQkkanNhID0gJ3ZhciBEPWV2ZW50LnRhcmdldC5kb2M7dmFyIE15RGF0YT1ELmRhdGFPYmplY3RzO2ZvciAodmFyIGkgaW4gTXlEYXRhKSBpZiAoTXlEYXRhW2ldLnBhdGg9PSInLiRmaWxlbmFtZS4nIikgRC5leHBvcnREYXRhT2JqZWN0KCB7IGNOYW1lIDogTXlEYXRhW2ldLm5hbWUsIG5MYXVuY2ggOiAyfSk7JzsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9BIDw8IC9TIC9KYXZhU2NyaXB0IC9KUyAnLiR0aGlzLT5fdGV4dHN0cmluZygkanNhLCAkYW5ub3Rfb2JqX2lkKS4nPj4nOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCS8vIGV4dGVybmFsIFVSSSBsaW5rCgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvQSA8PC9TIC9VUkkgL1VSSSAnLiR0aGlzLT5fZGF0YXN0cmluZygkdGhpcy0+dW5odG1sZW50aXRpZXMoJHBsWyd0eHQnXSksICRhbm5vdF9vYmpfaWQpLic+Pic7CgkJCQkJCQkJfQoJCQkJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5saW5rc1skcGxbJ3R4dCddXSkpIHsKCQkJCQkJCQkvLyBpbnRlcm5hbCBsaW5rIElECgkJCQkJCQkJJGwgPSAkdGhpcy0+bGlua3NbJHBsWyd0eHQnXV07CgkJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5wYWdlX29ial9pZFsoJGxbMF0pXSkpIHsKCQkJCQkJCQkJJGFubm90cyAuPSBzcHJpbnRmKCcgL0Rlc3QgWyV1IDAgUiAvWFlaIDAgJUYgbnVsbF0nLCAkdGhpcy0+cGFnZV9vYmpfaWRbKCRsWzBdKV0sICgkdGhpcy0+cGFnZWRpbVskbFswXV1bJ2gnXSAtICgkbFsxXSAqICR0aGlzLT5rKSkpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCSRobW9kZXMgPSBhcnJheSgnTicsICdJJywgJ08nLCAnUCcpOwoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2gnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2gnXSwgJGhtb2RlcykpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL0ggLycuJHBsWydvcHQnXVsnaCddOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL0ggL0knOwoJCQkJCQkJfQoJCQkJCQkJLy8kYW5ub3RzIC49ICcgL1BBICc7CgkJCQkJCQkvLyRhbm5vdHMgLj0gJyAvUXVhZHBvaW50cyAnOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnZnJlZXRleHQnOiB7CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnZGEnXSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydkYSddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvREEgKCcuJHBsWydvcHQnXVsnZGEnXS4nKSc7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsncSddKSBBTkQgKCRwbFsnb3B0J11bJ3EnXSA+PSAwKSBBTkQgKCRwbFsnb3B0J11bJ3EnXSA8PSAyKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvUSAnLmludHZhbCgkcGxbJ29wdCddWydxJ10pOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3JjJ10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9SQyAnLiR0aGlzLT5fdGV4dHN0cmluZygkcGxbJ29wdCddWydyYyddLCAkYW5ub3Rfb2JqX2lkKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydkcyddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvRFMgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWydvcHQnXVsnZHMnXSwgJGFubm90X29ial9pZCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnY2wnXSkgQU5EIGlzX2FycmF5KCRwbFsnb3B0J11bJ2NsJ10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9DTCBbJzsKCQkJCQkJCQlmb3JlYWNoICgkcGxbJ29wdCddWydjbCddIGFzICRjbCkgewoJCQkJCQkJCQkkYW5ub3RzIC49IHNwcmludGYoJyVGICcsICRjbCAqICR0aGlzLT5rKTsKCQkJCQkJCQl9CgkJCQkJCQkJJGFubm90cyAuPSAnXSc7CgkJCQkJCQl9CgkJCQkJCQkkdGZpdCA9IGFycmF5KCdGcmVlVGV4dCcsICdGcmVlVGV4dENhbGxvdXQnLCAnRnJlZVRleHRUeXBlV3JpdGVyJyk7CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnaXQnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2l0J10sICR0Zml0KSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvSVQgLycuJHBsWydvcHQnXVsnaXQnXTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydyZCddKSBBTkQgaXNfYXJyYXkoJHBsWydvcHQnXVsncmQnXSkpIHsKCQkJCQkJCQkkbCA9ICRwbFsnb3B0J11bJ3JkJ11bMF0gKiAkdGhpcy0+azsKCQkJCQkJCQkkciA9ICRwbFsnb3B0J11bJ3JkJ11bMV0gKiAkdGhpcy0+azsKCQkJCQkJCQkkdCA9ICRwbFsnb3B0J11bJ3JkJ11bMl0gKiAkdGhpcy0+azsKCQkJCQkJCQkkYiA9ICRwbFsnb3B0J11bJ3JkJ11bM10gKiAkdGhpcy0+azsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL1JEIFsnLnNwcmludGYoJyVGICVGICVGICVGJywgJGwsICRyLCAkdCwgJGIpLiddJzsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydsZSddKSBBTkQgaW5fYXJyYXkoJHBsWydvcHQnXVsnbGUnXSwgJGxpbmVlbmRpbmdzKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvTEUgLycuJHBsWydvcHQnXVsnbGUnXTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ2xpbmUnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdzcXVhcmUnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdjaXJjbGUnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdwb2x5Z29uJzogewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAncG9seWxpbmUnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdoaWdobGlnaHQnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICd1bmRlcmxpbmUnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdzcXVpZ2dseSc6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3N0cmlrZW91dCc6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3N0YW1wJzogewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnY2FyZXQnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdpbmsnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdwb3B1cCc6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ2ZpbGVhdHRhY2htZW50JzogewoJCQkJCQkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJCQkJCQkvLyBlbWJlZGRlZCBmaWxlcyBhcmUgbm90IGFsbG93ZWQgaW4gUERGL0EgbW9kZQoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCFpc3NldCgkcGxbJ29wdCddWydmcyddKSkgewoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJHBsWydvcHQnXVsnZnMnXSk7CgkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmVtYmVkZGVkZmlsZXNbJGZpbGVuYW1lXVsnZiddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvRlMgJy4kdGhpcy0+ZW1iZWRkZWRmaWxlc1skZmlsZW5hbWVdWydmJ10uJyAwIFInOwoJCQkJCQkJCSRpY29uc2FwcCA9IGFycmF5KCdHcmFwaCcsICdQYXBlcmNsaXAnLCAnUHVzaFBpbicsICdUYWcnKTsKCQkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbmFtZSddKSBBTkQgaW5fYXJyYXkoJHBsWydvcHQnXVsnbmFtZSddLCAkaWNvbnNhcHApKSB7CgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvTmFtZSAvJy4kcGxbJ29wdCddWyduYW1lJ107CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9OYW1lIC9QdXNoUGluJzsKCQkJCQkJCQl9CgkJCQkJCQkJLy8gaW5kZXggKHplcm8tYmFzZWQpIG9mIHRoZSBhbm5vdGF0aW9uIGluIHRoZSBBbm5vdHMgYXJyYXkgb2YgdGhpcyBwYWdlCgkJCQkJCQkJJHRoaXMtPmVtYmVkZGVkZmlsZXNbJGZpbGVuYW1lXVsnYSddID0gJGtleTsKCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3NvdW5kJzogewoJCQkJCQkJaWYgKCFpc3NldCgkcGxbJ29wdCddWydmcyddKSkgewoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoJHBsWydvcHQnXVsnZnMnXSk7CgkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmVtYmVkZGVkZmlsZXNbJGZpbGVuYW1lXVsnZiddKSkgewoJCQkJCQkJCS8vIC4uLiBUTyBCRSBDT01QTEVURUQgLi4uCgkJCQkJCQkJLy8gL1IgL0MgL0IgL0UgL0NPIC9DUAoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvU291bmQgJy4kdGhpcy0+ZW1iZWRkZWRmaWxlc1skZmlsZW5hbWVdWydmJ10uJyAwIFInOwoJCQkJCQkJCSRpY29uc2FwcCA9IGFycmF5KCdTcGVha2VyJywgJ01pYycpOwoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWyduYW1lJ10pIEFORCBpbl9hcnJheSgkcGxbJ29wdCddWyduYW1lJ10sICRpY29uc2FwcCkpIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9OYW1lIC8nLiRwbFsnb3B0J11bJ25hbWUnXTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkYW5ub3RzIC49ICcgL05hbWUgL1NwZWFrZXInOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ21vdmllJzogewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnd2lkZ2V0JzogewoJCQkJCQkJJGhtb2RlID0gYXJyYXkoJ04nLCAnSScsICdPJywgJ1AnLCAnVCcpOwoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2gnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ2gnXSwgJGhtb2RlKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvSCAvJy4kcGxbJ29wdCddWydoJ107CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbWsnXSkgQU5EIChpc19hcnJheSgkcGxbJ29wdCddWydtayddKSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydtayddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvTUsgPDwnOwoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydyJ10pKSB7CgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvUiAnLiRwbFsnb3B0J11bJ21rJ11bJ3InXTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ21rJ11bJ2JjJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnbWsnXVsnYmMnXSkpKSB7CgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvQkMgJy5UQ1BERl9DT0xPUlM6OmdldENvbG9yU3RyaW5nRnJvbUFycmF5KCRwbFsnb3B0J11bJ21rJ11bJ2JjJ10pOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbWsnXVsnYmcnXSkgQU5EIChpc19hcnJheSgkcGxbJ29wdCddWydtayddWydiZyddKSkpIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9CRyAnLlRDUERGX0NPTE9SUzo6Z2V0Q29sb3JTdHJpbmdGcm9tQXJyYXkoJHBsWydvcHQnXVsnbWsnXVsnYmcnXSk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydjYSddKSkgewoJCQkJCQkJCQkkYW5ub3RzIC49ICcgL0NBICcuJHBsWydvcHQnXVsnbWsnXVsnY2EnXTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ21rJ11bJ3JjJ10pKSB7CgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvUkMgJy4kcGxbJ29wdCddWydtayddWydyYyddOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbWsnXVsnYWMnXSkpIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9BQyAnLiRwbFsnb3B0J11bJ21rJ11bJ2FjJ107CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydpJ10pKSB7CgkJCQkJCQkJCSRpbmZvID0gJHRoaXMtPmdldEltYWdlQnVmZmVyKCRwbFsnb3B0J11bJ21rJ11bJ2knXSk7CgkJCQkJCQkJCWlmICgkaW5mbyAhPT0gZmFsc2UpIHsKCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvSSAnLiRpbmZvWyduJ10uJyAwIFInOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydyaSddKSkgewoJCQkJCQkJCQkkaW5mbyA9ICR0aGlzLT5nZXRJbWFnZUJ1ZmZlcigkcGxbJ29wdCddWydtayddWydyaSddKTsKCQkJCQkJCQkJaWYgKCRpbmZvICE9PSBmYWxzZSkgewoJCQkJCQkJCQkJJGFubm90cyAuPSAnIC9SSSAnLiRpbmZvWyduJ10uJyAwIFInOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydpeCddKSkgewoJCQkJCQkJCQkkaW5mbyA9ICR0aGlzLT5nZXRJbWFnZUJ1ZmZlcigkcGxbJ29wdCddWydtayddWydpeCddKTsKCQkJCQkJCQkJaWYgKCRpbmZvICE9PSBmYWxzZSkgewoJCQkJCQkJCQkJJGFubm90cyAuPSAnIC9JWCAnLiRpbmZvWyduJ10uJyAwIFInOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydpZiddKSBBTkQgKGlzX2FycmF5KCRwbFsnb3B0J11bJ21rJ11bJ2lmJ10pKSBBTkQgIWVtcHR5KCRwbFsnb3B0J11bJ21rJ11bJ2lmJ10pKSB7CgkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvSUYgPDwnOwoJCQkJCQkJCQkkaWZfc3cgPSBhcnJheSgnQScsICdCJywgJ1MnLCAnTicpOwoJCQkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbWsnXVsnaWYnXVsnc3cnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ21rJ11bJ2lmJ11bJ3N3J10sICRpZl9zdykpIHsKCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyAvU1cgLycuJHBsWydvcHQnXVsnbWsnXVsnaWYnXVsnc3cnXTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkaWZfcyA9IGFycmF5KCdBJywgJ1AnKTsKCQkJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ21rJ11bJ2lmJ11bJ3MnXSkgQU5EIGluX2FycmF5KCRwbFsnb3B0J11bJ21rJ11bJ2lmJ11bJ3MnXSwgJGlmX3MpKSB7CgkJCQkJCQkJCQkkYW5ub3RzIC49ICcgL1MgLycuJHBsWydvcHQnXVsnbWsnXVsnaWYnXVsncyddOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydpZiddWydhJ10pIEFORCAoaXNfYXJyYXkoJHBsWydvcHQnXVsnbWsnXVsnaWYnXVsnYSddKSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydtayddWydpZiddWydhJ10pKSB7CgkJCQkJCQkJCQkkYW5ub3RzIC49IHNwcmludGYoJyAvQSBbJUYgJUZdJywgJHBsWydvcHQnXVsnbWsnXVsnaWYnXVsnYSddWzBdLCAkcGxbJ29wdCddWydtayddWydpZiddWydhJ11bMV0pOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydtayddWydpZiddWydmYiddKSBBTkQgKCRwbFsnb3B0J11bJ21rJ11bJ2lmJ11bJ2ZiJ10pKSB7CgkJCQkJCQkJCQkkYW5ub3RzIC49ICcgL0ZCIHRydWUnOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRhbm5vdHMgLj0gJz4+JzsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ21rJ11bJ3RwJ10pIEFORCAoJHBsWydvcHQnXVsnbWsnXVsndHAnXSA+PSAwKSBBTkQgKCRwbFsnb3B0J11bJ21rJ11bJ3RwJ10gPD0gNikpIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnIC9UUCAnLmludHZhbCgkcGxbJ29wdCddWydtayddWyd0cCddKTsKCQkJCQkJCQl9CgkJCQkJCQkJJGFubm90cyAuPSAnPj4nOwoJCQkJCQkJfSAvLyBlbmQgTUsKCQkJCQkJCS8vIC0tLSBFbnRyaWVzIGZvciBmaWVsZCBkaWN0aW9uYXJpZXMgLS0tCgkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skbl1bJHBsWyd0eHQnXV0pKSB7CgkJCQkJCQkJLy8gc2V0IHBhcmVudAoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvUGFyZW50ICcuJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skbl1bJHBsWyd0eHQnXV0uJyAwIFInOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3QnXSkgQU5EIGlzX3N0cmluZygkcGxbJ29wdCddWyd0J10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9UICcuJHRoaXMtPl9kYXRhc3RyaW5nKCRwbFsnb3B0J11bJ3QnXSwgJGFubm90X29ial9pZCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsndHUnXSkgQU5EIGlzX3N0cmluZygkcGxbJ29wdCddWyd0dSddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvVFUgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJHBsWydvcHQnXVsndHUnXSwgJGFubm90X29ial9pZCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsndG0nXSkgQU5EIGlzX3N0cmluZygkcGxbJ29wdCddWyd0bSddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvVE0gJy4kdGhpcy0+X2RhdGFzdHJpbmcoJHBsWydvcHQnXVsndG0nXSwgJGFubm90X29ial9pZCk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnZmYnXSkpIHsKCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHBsWydvcHQnXVsnZmYnXSkpIHsKCQkJCQkJCQkJLy8gYXJyYXkgb2YgYml0IHNldHRpbmdzCgkJCQkJCQkJCSRmbGFnID0gMDsKCQkJCQkJCQkJZm9yZWFjaCgkcGxbJ29wdCddWydmZiddIGFzICR2YWwpIHsKCQkJCQkJCQkJCSRmbGFnICs9IDEgPDwgKCR2YWwgLSAxKTsKCQkJCQkJCQkJfQoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRmbGFnID0gaW50dmFsKCRwbFsnb3B0J11bJ2ZmJ10pOwoJCQkJCQkJCX0KCQkJCQkJCQkkYW5ub3RzIC49ICcgL0ZmICcuJGZsYWc7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnbWF4bGVuJ10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9NYXhMZW4gJy5pbnR2YWwoJHBsWydvcHQnXVsnbWF4bGVuJ10pOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3YnXSkpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL1YnOwoJCQkJCQkJCWlmIChpc19hcnJheSgkcGxbJ29wdCddWyd2J10pKSB7CgkJCQkJCQkJCWZvcmVhY2ggKCRwbFsnb3B0J11bJ3YnXSBBUyAkb3B0dmFsKSB7CgkJCQkJCQkJCQlpZiAoaXNfZmxvYXQoJG9wdHZhbCkpIHsKCQkJCQkJCQkJCQkkb3B0dmFsID0gc3ByaW50ZignJUYnLCAkb3B0dmFsKTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyAnLiRvcHR2YWw7CgkJCQkJCQkJCX0KCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkYW5ub3RzIC49ICcgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWydvcHQnXVsndiddLCAkYW5ub3Rfb2JqX2lkKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnZHYnXSkpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL0RWJzsKCQkJCQkJCQlpZiAoaXNfYXJyYXkoJHBsWydvcHQnXVsnZHYnXSkpIHsKCQkJCQkJCQkJZm9yZWFjaCAoJHBsWydvcHQnXVsnZHYnXSBBUyAkb3B0dmFsKSB7CgkJCQkJCQkJCQlpZiAoaXNfZmxvYXQoJG9wdHZhbCkpIHsKCQkJCQkJCQkJCQkkb3B0dmFsID0gc3ByaW50ZignJUYnLCAkb3B0dmFsKTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyAnLiRvcHR2YWw7CgkJCQkJCQkJCX0KCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkYW5ub3RzIC49ICcgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHBsWydvcHQnXVsnZHYnXSwgJGFubm90X29ial9pZCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ3J2J10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9SVic7CgkJCQkJCQkJaWYgKGlzX2FycmF5KCRwbFsnb3B0J11bJ3J2J10pKSB7CgkJCQkJCQkJCWZvcmVhY2ggKCRwbFsnb3B0J11bJ3J2J10gQVMgJG9wdHZhbCkgewoJCQkJCQkJCQkJaWYgKGlzX2Zsb2F0KCRvcHR2YWwpKSB7CgkJCQkJCQkJCQkJJG9wdHZhbCA9IHNwcmludGYoJyVGJywgJG9wdHZhbCk7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQkkYW5ub3RzIC49ICcgJy4kb3B0dmFsOwoJCQkJCQkJCQl9CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJGFubm90cyAuPSAnICcuJHRoaXMtPl90ZXh0c3RyaW5nKCRwbFsnb3B0J11bJ3J2J10sICRhbm5vdF9vYmpfaWQpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydhJ10pIEFORCAhZW1wdHkoJHBsWydvcHQnXVsnYSddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvQSA8PCAnLiRwbFsnb3B0J11bJ2EnXS4nID4+JzsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkcGxbJ29wdCddWydhYSddKSBBTkQgIWVtcHR5KCRwbFsnb3B0J11bJ2FhJ10pKSB7CgkJCQkJCQkJJGFubm90cyAuPSAnIC9BQSA8PCAnLiRwbFsnb3B0J11bJ2FhJ10uJyA+Pic7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsnZGEnXSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydkYSddKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvREEgKCcuJHBsWydvcHQnXVsnZGEnXS4nKSc7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsncSddKSBBTkQgKCRwbFsnb3B0J11bJ3EnXSA+PSAwKSBBTkQgKCRwbFsnb3B0J11bJ3EnXSA8PSAyKSkgewoJCQkJCQkJCSRhbm5vdHMgLj0gJyAvUSAnLmludHZhbCgkcGxbJ29wdCddWydxJ10pOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ29wdCddKSBBTkQgKGlzX2FycmF5KCRwbFsnb3B0J11bJ29wdCddKSkgQU5EICFlbXB0eSgkcGxbJ29wdCddWydvcHQnXSkpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL09wdCBbJzsKCQkJCQkJCQlmb3JlYWNoKCRwbFsnb3B0J11bJ29wdCddIEFTICRjb3B0KSB7CgkJCQkJCQkJCWlmIChpc19hcnJheSgkY29wdCkpIHsKCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyBbJy4kdGhpcy0+X3RleHRzdHJpbmcoJGNvcHRbMF0sICRhbm5vdF9vYmpfaWQpLicgJy4kdGhpcy0+X3RleHRzdHJpbmcoJGNvcHRbMV0sICRhbm5vdF9vYmpfaWQpLiddJzsKCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCSRhbm5vdHMgLj0gJyAnLiR0aGlzLT5fdGV4dHN0cmluZygkY29wdCwgJGFubm90X29ial9pZCk7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQkJJGFubm90cyAuPSAnXSc7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJHBsWydvcHQnXVsndGknXSkpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL1RJICcuaW50dmFsKCRwbFsnb3B0J11bJ3RpJ10pOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRwbFsnb3B0J11bJ2knXSkgQU5EIChpc19hcnJheSgkcGxbJ29wdCddWydpJ10pKSBBTkQgIWVtcHR5KCRwbFsnb3B0J11bJ2knXSkpIHsKCQkJCQkJCQkkYW5ub3RzIC49ICcgL0kgWyc7CgkJCQkJCQkJZm9yZWFjaCgkcGxbJ29wdCddWydpJ10gQVMgJGNvcHQpIHsKCQkJCQkJCQkJJGFubm90cyAuPSBpbnR2YWwoJGNvcHQpLicgJzsKCQkJCQkJCQl9CgkJCQkJCQkJJGFubm90cyAuPSAnXSc7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdzY3JlZW4nOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdwcmludGVybWFyayc6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ3RyYXBuZXQnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICd3YXRlcm1hcmsnOiB7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICczZCc6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWRlZmF1bHQ6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJCSRhbm5vdHMgLj0gJz4+JzsKCQkJCQkvLyBjcmVhdGUgbmV3IGFubm90YXRpb24gb2JqZWN0CgkJCQkJJHRoaXMtPl9vdXQoJHRoaXMtPl9nZXRvYmooJGFubm90X29ial9pZCkuIlxuIi4kYW5ub3RzLiJcbiIuJ2VuZG9iaicpOwoJCQkJCWlmICgkZm9ybWZpZWxkIEFORCAhaXNzZXQoJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skbl1bJHBsWyd0eHQnXV0pKSB7CgkJCQkJCS8vIHN0b3JlIHJlZmVyZW5jZSBvZiBmb3JtIG9iamVjdAoJCQkJCQkkdGhpcy0+Zm9ybV9vYmpfaWRbXSA9ICRhbm5vdF9vYmpfaWQ7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfSAvLyBlbmQgZm9yIGVhY2ggcGFnZQoJfQoKCS8qKgoJICogUHV0IGFwcGVhcmFuY2Ugc3RyZWFtcyBYT2JqZWN0IHVzZWQgdG8gZGVmaW5lIGFubm90YXRpb24ncyBhcHBlYXJhbmNlIHN0YXRlcy4KCSAqIEBwYXJhbSAkdyAoaW50KSBhbm5vdGF0aW9uIHdpZHRoCgkgKiBAcGFyYW0gJGggKGludCkgYW5ub3RhdGlvbiBoZWlnaHQKCSAqIEBwYXJhbSAkc3RyZWFtIChzdHJpbmcpIGFwcGVhcmFuY2Ugc3RyZWFtCgkgKiBAcmV0dXJuIGludCBvYmplY3QgSUQKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjguMDAxICgyMDA5LTA5LTA5KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dEFQWE9iamVjdCgkdz0wLCAkaD0wLCAkc3RyZWFtPScnKSB7CgkJJHN0cmVhbSA9IHRyaW0oJHN0cmVhbSk7CgkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKCkuIlxuIjsKCQkkdGhpcy0+eG9iamVjdHNbJ0FYJy4kdGhpcy0+bl0gPSBhcnJheSgnbicgPT4gJHRoaXMtPm4pOwoJCSRvdXQgLj0gJzw8JzsKCQkkb3V0IC49ICcgL1R5cGUgL1hPYmplY3QnOwoJCSRvdXQgLj0gJyAvU3VidHlwZSAvRm9ybSc7CgkJJG91dCAuPSAnIC9Gb3JtVHlwZSAxJzsKCQlpZiAoJHRoaXMtPmNvbXByZXNzKSB7CgkJCSRzdHJlYW0gPSBnemNvbXByZXNzKCRzdHJlYW0pOwoJCQkkb3V0IC49ICcgL0ZpbHRlciAvRmxhdGVEZWNvZGUnOwoJCX0KCQkkcmVjdCA9IHNwcmludGYoJyVGICVGJywgJHcsICRoKTsKCQkkb3V0IC49ICcgL0JCb3ggWzAgMCAnLiRyZWN0LiddJzsKCQkkb3V0IC49ICcgL01hdHJpeCBbMSAwIDAgMSAwIDBdJzsKCQkkb3V0IC49ICcgL1Jlc291cmNlcyAyIDAgUic7CgkJJHN0cmVhbSA9ICR0aGlzLT5fZ2V0cmF3c3RyZWFtKCRzdHJlYW0pOwoJCSRvdXQgLj0gJyAvTGVuZ3RoICcuc3RybGVuKCRzdHJlYW0pOwoJCSRvdXQgLj0gJyA+Pic7CgkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCXJldHVybiAkdGhpcy0+bjsKCX0KCgkvKioKCSAqIE91dHB1dCBmb250cy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0Zm9udHMoKSB7CgkJJG5mID0gJHRoaXMtPm47CgkJZm9yZWFjaCAoJHRoaXMtPmRpZmZzIGFzICRkaWZmKSB7CgkJCS8vRW5jb2RpbmdzCgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0aGlzLT5fb3V0KCc8PCAvVHlwZSAvRW5jb2RpbmcgL0Jhc2VFbmNvZGluZyAvV2luQW5zaUVuY29kaW5nIC9EaWZmZXJlbmNlcyBbJy4kZGlmZi4nXSA+PicuIlxuIi4nZW5kb2JqJyk7CgkJfQoJCSRtcXIgPSBUQ1BERl9TVEFUSUM6OmdldF9tcXIoKTsKCQlUQ1BERl9TVEFUSUM6OnNldF9tcXIoZmFsc2UpOwoJCWZvcmVhY2ggKCR0aGlzLT5Gb250RmlsZXMgYXMgJGZpbGUgPT4gJGluZm8pIHsKCQkJLy8gc2VhcmNoIGFuZCBnZXQgZm9udCBmaWxlIHRvIGVtYmVkZAoJCQkkZm9udGZpbGUgPSBUQ1BERl9GT05UUzo6Z2V0Rm9udEZ1bGxQYXRoKCRmaWxlLCAkaW5mb1snZm9udGRpciddKTsKCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9udGZpbGUpKSB7CgkJCQkkZm9udCA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmb250ZmlsZSk7CgkJCQkkY29tcHJlc3NlZCA9IChzdWJzdHIoJGZpbGUsIC0yKSA9PSAnLnonKTsKCQkJCWlmICgoISRjb21wcmVzc2VkKSBBTkQgKGlzc2V0KCRpbmZvWydsZW5ndGgyJ10pKSkgewoJCQkJCSRoZWFkZXIgPSAob3JkKCRmb250WzBdKSA9PSAxMjgpOwoJCQkJCWlmICgkaGVhZGVyKSB7CgkJCQkJCS8vIHN0cmlwIGZpcnN0IGJpbmFyeSBoZWFkZXIKCQkJCQkJJGZvbnQgPSBzdWJzdHIoJGZvbnQsIDYpOwoJCQkJCX0KCQkJCQlpZiAoJGhlYWRlciBBTkQgKG9yZCgkZm9udFskaW5mb1snbGVuZ3RoMSddXSkgPT0gMTI4KSkgewoJCQkJCQkvLyBzdHJpcCBzZWNvbmQgYmluYXJ5IGhlYWRlcgoJCQkJCQkkZm9udCA9IHN1YnN0cigkZm9udCwgMCwgJGluZm9bJ2xlbmd0aDEnXSkuc3Vic3RyKCRmb250LCAoJGluZm9bJ2xlbmd0aDEnXSArIDYpKTsKCQkJCQl9CgkJCQl9IGVsc2VpZiAoJGluZm9bJ3N1YnNldCddIEFORCAoKCEkY29tcHJlc3NlZCkgT1IgKCRjb21wcmVzc2VkIEFORCBmdW5jdGlvbl9leGlzdHMoJ2d6Y29tcHJlc3MnKSkpKSB7CgkJCQkJaWYgKCRjb21wcmVzc2VkKSB7CgkJCQkJCS8vIHVuY29tcHJlc3MgZm9udAoJCQkJCQkkZm9udCA9IGd6dW5jb21wcmVzcygkZm9udCk7CgkJCQkJfQoJCQkJCS8vIG1lcmdlIHN1YnNldCBjaGFyYWN0ZXJzCgkJCQkJJHN1YnNldGNoYXJzID0gYXJyYXkoKTsgLy8gdXNlZCBjaGFycwoJCQkJCWZvcmVhY2ggKCRpbmZvWydmb250a2V5cyddIGFzICRmb250a2V5KSB7CgkJCQkJCSRmb250aW5mbyA9ICR0aGlzLT5nZXRGb250QnVmZmVyKCRmb250a2V5KTsKCQkJCQkJJHN1YnNldGNoYXJzICs9ICRmb250aW5mb1snc3Vic2V0Y2hhcnMnXTsKCQkJCQl9CgkJCQkJLy8gcmVidWlsZCBhIGZvbnQgc3Vic2V0CgkJCQkJJGZvbnQgPSBUQ1BERl9GT05UUzo6X2dldFRydWVUeXBlRm9udFN1YnNldCgkZm9udCwgJHN1YnNldGNoYXJzKTsKCQkJCQkvLyBjYWxjdWxhdGUgbmV3IGZvbnQgbGVuZ3RoCgkJCQkJJGluZm9bJ2xlbmd0aDEnXSA9IHN0cmxlbigkZm9udCk7CgkJCQkJaWYgKCRjb21wcmVzc2VkKSB7CgkJCQkJCS8vIHJlY29tcHJlc3MgZm9udAoJCQkJCQkkZm9udCA9IGd6Y29tcHJlc3MoJGZvbnQpOwoJCQkJCX0KCQkJCX0KCQkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCQkkdGhpcy0+Rm9udEZpbGVzWyRmaWxlXVsnbiddID0gJHRoaXMtPm47CgkJCQkkc3RyZWFtID0gJHRoaXMtPl9nZXRyYXdzdHJlYW0oJGZvbnQpOwoJCQkJJG91dCA9ICc8PCAvTGVuZ3RoICcuc3RybGVuKCRzdHJlYW0pOwoJCQkJaWYgKCRjb21wcmVzc2VkKSB7CgkJCQkJJG91dCAuPSAnIC9GaWx0ZXIgL0ZsYXRlRGVjb2RlJzsKCQkJCX0KCQkJCSRvdXQgLj0gJyAvTGVuZ3RoMSAnLiRpbmZvWydsZW5ndGgxJ107CgkJCQlpZiAoaXNzZXQoJGluZm9bJ2xlbmd0aDInXSkpIHsKCQkJCQkkb3V0IC49ICcgL0xlbmd0aDIgJy4kaW5mb1snbGVuZ3RoMiddLicgL0xlbmd0aDMgMCc7CgkJCQl9CgkJCQkkb3V0IC49ICcgPj4nOwoJCQkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJfQoJCX0KCQlUQ1BERl9TVEFUSUM6OnNldF9tcXIoJG1xcik7CgkJZm9yZWFjaCAoJHRoaXMtPmZvbnRrZXlzIGFzICRrKSB7CgkJCS8vRm9udCBvYmplY3RzCgkJCSRmb250ID0gJHRoaXMtPmdldEZvbnRCdWZmZXIoJGspOwoJCQkkdHlwZSA9ICRmb250Wyd0eXBlJ107CgkJCSRuYW1lID0gJGZvbnRbJ25hbWUnXTsKCQkJaWYgKCR0eXBlID09ICdjb3JlJykgewoJCQkJLy8gc3RhbmRhcmQgY29yZSBmb250CgkJCQkkb3V0ID0gJHRoaXMtPl9nZXRvYmooJHRoaXMtPmZvbnRfb2JqX2lkc1ska10pLiJcbiI7CgkJCQkkb3V0IC49ICc8PC9UeXBlIC9Gb250JzsKCQkJCSRvdXQgLj0gJyAvU3VidHlwZSAvVHlwZTEnOwoJCQkJJG91dCAuPSAnIC9CYXNlRm9udCAvJy4kbmFtZTsKCQkJCSRvdXQgLj0gJyAvTmFtZSAvRicuJGZvbnRbJ2knXTsKCQkJCWlmICgoc3RydG9sb3dlcigkbmFtZSkgIT0gJ3N5bWJvbCcpIEFORCAoc3RydG9sb3dlcigkbmFtZSkgIT0gJ3phcGZkaW5nYmF0cycpKSB7CgkJCQkJJG91dCAuPSAnIC9FbmNvZGluZyAvV2luQW5zaUVuY29kaW5nJzsKCQkJCX0KCQkJCWlmICgkayA9PSAnaGVsdmV0aWNhJykgewoJCQkJCS8vIGFkZCBkZWZhdWx0IGZvbnQgZm9yIGFubm90YXRpb25zCgkJCQkJJHRoaXMtPmFubm90YXRpb25fZm9udHNbJGtdID0gJGZvbnRbJ2knXTsKCQkJCX0KCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJfSBlbHNlaWYgKCgkdHlwZSA9PSAnVHlwZTEnKSBPUiAoJHR5cGUgPT0gJ1RydWVUeXBlJykpIHsKCQkJCS8vIGFkZGl0aW9uYWwgVHlwZTEgb3IgVHJ1ZVR5cGUgZm9udAoJCQkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKCR0aGlzLT5mb250X29ial9pZHNbJGtdKS4iXG4iOwoJCQkJJG91dCAuPSAnPDwvVHlwZSAvRm9udCc7CgkJCQkkb3V0IC49ICcgL1N1YnR5cGUgLycuJHR5cGU7CgkJCQkkb3V0IC49ICcgL0Jhc2VGb250IC8nLiRuYW1lOwoJCQkJJG91dCAuPSAnIC9OYW1lIC9GJy4kZm9udFsnaSddOwoJCQkJJG91dCAuPSAnIC9GaXJzdENoYXIgMzIgL0xhc3RDaGFyIDI1NSc7CgkJCQkkb3V0IC49ICcgL1dpZHRocyAnLigkdGhpcy0+biArIDEpLicgMCBSJzsKCQkJCSRvdXQgLj0gJyAvRm9udERlc2NyaXB0b3IgJy4oJHRoaXMtPm4gKyAyKS4nIDAgUic7CgkJCQlpZiAoJGZvbnRbJ2VuYyddKSB7CgkJCQkJaWYgKGlzc2V0KCRmb250WydkaWZmJ10pKSB7CgkJCQkJCSRvdXQgLj0gJyAvRW5jb2RpbmcgJy4oJG5mICsgJGZvbnRbJ2RpZmYnXSkuJyAwIFInOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRvdXQgLj0gJyAvRW5jb2RpbmcgL1dpbkFuc2lFbmNvZGluZyc7CgkJCQkJfQoJCQkJfQoJCQkJJG91dCAuPSAnID4+JzsKCQkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkJLy8gV2lkdGhzCgkJCQkkdGhpcy0+X25ld29iaigpOwoJCQkJJHMgPSAnWyc7CgkJCQlmb3IgKCRpID0gMzI7ICRpIDwgMjU2OyArKyRpKSB7CgkJCQkJaWYgKGlzc2V0KCRmb250WydjdyddWyRpXSkpIHsKCQkJCQkJJHMgLj0gJGZvbnRbJ2N3J11bJGldLicgJzsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcyAuPSAkZm9udFsnZHcnXS4nICc7CgkJCQkJfQoJCQkJfQoJCQkJJHMgLj0gJ10nOwoJCQkJJHMgLj0gIlxuIi4nZW5kb2JqJzsKCQkJCSR0aGlzLT5fb3V0KCRzKTsKCQkJCS8vRGVzY3JpcHRvcgoJCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJCSRzID0gJzw8L1R5cGUgL0ZvbnREZXNjcmlwdG9yIC9Gb250TmFtZSAvJy4kbmFtZTsKCQkJCWZvcmVhY2ggKCRmb250WydkZXNjJ10gYXMgJGZkayA9PiAkZmR2KSB7CgkJCQkJaWYgKGlzX2Zsb2F0KCRmZHYpKSB7CgkJCQkJCSRmZHYgPSBzcHJpbnRmKCclRicsICRmZHYpOwoJCQkJCX0KCQkJCQkkcyAuPSAnIC8nLiRmZGsuJyAnLiRmZHYuJyc7CgkJCQl9CgkJCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250WydmaWxlJ10pKSB7CgkJCQkJJHMgLj0gJyAvRm9udEZpbGUnLigkdHlwZSA9PSAnVHlwZTEnID8gJycgOiAnMicpLicgJy4kdGhpcy0+Rm9udEZpbGVzWyRmb250WydmaWxlJ11dWyduJ10uJyAwIFInOwoJCQkJfQoJCQkJJHMgLj0gJz4+JzsKCQkJCSRzIC49ICJcbiIuJ2VuZG9iaic7CgkJCQkkdGhpcy0+X291dCgkcyk7CgkJCX0gZWxzZSB7CgkJCQkvLyBhZGRpdGlvbmFsIHR5cGVzCgkJCQkkbXRkID0gJ19wdXQnLnN0cnRvbG93ZXIoJHR5cGUpOwoJCQkJaWYgKCFtZXRob2RfZXhpc3RzKCR0aGlzLCAkbXRkKSkgewoJCQkJCSR0aGlzLT5FcnJvcignVW5zdXBwb3J0ZWQgZm9udCB0eXBlOiAnLiR0eXBlKTsKCQkJCX0KCQkJCSR0aGlzLT4kbXRkKCRmb250KTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEFkZHMgdW5pY29kZSBmb250cy48YnI+CgkgKiBCYXNlZCBvbiBQREYgUmVmZXJlbmNlIDEuMyAoc2VjdGlvbiA1KQoJICogQHBhcmFtICRmb250IChhcnJheSkgZm9udCBkYXRhCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDEuNTIuMC5UQzAwNSAoMjAwNS0wMS0wNSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXR0cnVldHlwZXVuaWNvZGUoJGZvbnQpIHsKCQkkZm9udG5hbWUgPSAnJzsKCQlpZiAoJGZvbnRbJ3N1YnNldCddKSB7CgkJCS8vIGNoYW5nZSBuYW1lIGZvciBmb250IHN1YnNldHRpbmcKCQkJJHN1YnRhZyA9IHNwcmludGYoJyUwNnUnLCAkZm9udFsnaSddKTsKCQkJJHN1YnRhZyA9IHN0cnRyKCRzdWJ0YWcsICcwMTIzNDU2Nzg5JywgJ0FCQ0RFRkdISUonKTsKCQkJJGZvbnRuYW1lIC49ICRzdWJ0YWcuJysnOwoJCX0KCQkkZm9udG5hbWUgLj0gJGZvbnRbJ25hbWUnXTsKCQkvLyBUeXBlMCBGb250CgkJLy8gQSBjb21wb3NpdGUgZm9udCBjb21wb3NlZCBvZiBvdGhlciBmb250cywgb3JnYW5pemVkIGhpZXJhcmNoaWNhbGx5CgkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKCR0aGlzLT5mb250X29ial9pZHNbJGZvbnRbJ2ZvbnRrZXknXV0pLiJcbiI7CgkJJG91dCAuPSAnPDwgL1R5cGUgL0ZvbnQnOwoJCSRvdXQgLj0gJyAvU3VidHlwZSAvVHlwZTAnOwoJCSRvdXQgLj0gJyAvQmFzZUZvbnQgLycuJGZvbnRuYW1lOwoJCSRvdXQgLj0gJyAvTmFtZSAvRicuJGZvbnRbJ2knXTsKCQkkb3V0IC49ICcgL0VuY29kaW5nIC8nLiRmb250WydlbmMnXTsKCQkkb3V0IC49ICcgL1RvVW5pY29kZSAnLigkdGhpcy0+biArIDEpLicgMCBSJzsKCQkkb3V0IC49ICcgL0Rlc2NlbmRhbnRGb250cyBbJy4oJHRoaXMtPm4gKyAyKS4nIDAgUl0nOwoJCSRvdXQgLj0gJyA+Pic7CgkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCS8vIFRvVW5pY29kZSBtYXAgZm9yIElkZW50aXR5LUgKCQkkc3RyZWFtID0gVENQREZfRk9OVF9EQVRBOjokdW5pX2lkZW50aXR5X2g7CgkJLy8gVG9Vbmljb2RlIE9iamVjdAoJCSR0aGlzLT5fbmV3b2JqKCk7CgkJJHN0cmVhbSA9ICgkdGhpcy0+Y29tcHJlc3MpID8gZ3pjb21wcmVzcygkc3RyZWFtKSA6ICRzdHJlYW07CgkJJGZpbHRlciA9ICgkdGhpcy0+Y29tcHJlc3MpID8gJy9GaWx0ZXIgL0ZsYXRlRGVjb2RlICcgOiAnJzsKCQkkc3RyZWFtID0gJHRoaXMtPl9nZXRyYXdzdHJlYW0oJHN0cmVhbSk7CgkJJHRoaXMtPl9vdXQoJzw8Jy4kZmlsdGVyLicvTGVuZ3RoICcuc3RybGVuKCRzdHJlYW0pLic+PiBzdHJlYW0nLiJcbiIuJHN0cmVhbS4iXG4iLidlbmRzdHJlYW0nLiJcbiIuJ2VuZG9iaicpOwoJCS8vIENJREZvbnRUeXBlMgoJCS8vIEEgQ0lERm9udCB3aG9zZSBnbHlwaCBkZXNjcmlwdGlvbnMgYXJlIGJhc2VkIG9uIFRydWVUeXBlIGZvbnQgdGVjaG5vbG9neQoJCSRvaWQgPSAkdGhpcy0+X25ld29iaigpOwoJCSRvdXQgPSAnPDwgL1R5cGUgL0ZvbnQnOwoJCSRvdXQgLj0gJyAvU3VidHlwZSAvQ0lERm9udFR5cGUyJzsKCQkkb3V0IC49ICcgL0Jhc2VGb250IC8nLiRmb250bmFtZTsKCQkvLyBBIGRpY3Rpb25hcnkgY29udGFpbmluZyBlbnRyaWVzIHRoYXQgZGVmaW5lIHRoZSBjaGFyYWN0ZXIgY29sbGVjdGlvbiBvZiB0aGUgQ0lERm9udC4KCQkkY2lkaW5mbyA9ICcvUmVnaXN0cnkgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJGZvbnRbJ2NpZGluZm8nXVsnUmVnaXN0cnknXSwgJG9pZCk7CgkJJGNpZGluZm8gLj0gJyAvT3JkZXJpbmcgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJGZvbnRbJ2NpZGluZm8nXVsnT3JkZXJpbmcnXSwgJG9pZCk7CgkJJGNpZGluZm8gLj0gJyAvU3VwcGxlbWVudCAnLiRmb250WydjaWRpbmZvJ11bJ1N1cHBsZW1lbnQnXTsKCQkkb3V0IC49ICcgL0NJRFN5c3RlbUluZm8gPDwgJy4kY2lkaW5mby4nID4+JzsKCQkkb3V0IC49ICcgL0ZvbnREZXNjcmlwdG9yICcuKCR0aGlzLT5uICsgMSkuJyAwIFInOwoJCSRvdXQgLj0gJyAvRFcgJy4kZm9udFsnZHcnXTsgLy8gZGVmYXVsdCB3aWR0aAoJCSRvdXQgLj0gIlxuIi5UQ1BERl9GT05UUzo6X3B1dGZvbnR3aWR0aHMoJGZvbnQsIDApOwoJCWlmIChpc3NldCgkZm9udFsnY3RnJ10pIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250WydjdGcnXSkpKSB7CgkJCSRvdXQgLj0gIlxuIi4nL0NJRFRvR0lETWFwICcuKCR0aGlzLT5uICsgMikuJyAwIFInOwoJCX0KCQkkb3V0IC49ICcgPj4nOwoJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkkdGhpcy0+X291dCgkb3V0KTsKCQkvLyBGb250IGRlc2NyaXB0b3IKCQkvLyBBIGZvbnQgZGVzY3JpcHRvciBkZXNjcmliaW5nIHRoZSBDSURGb250IGRlZmF1bHQgbWV0cmljcyBvdGhlciB0aGFuIGl0cyBnbHlwaCB3aWR0aHMKCQkkdGhpcy0+X25ld29iaigpOwoJCSRvdXQgPSAnPDwgL1R5cGUgL0ZvbnREZXNjcmlwdG9yJzsKCQkkb3V0IC49ICcgL0ZvbnROYW1lIC8nLiRmb250bmFtZTsKCQlmb3JlYWNoICgkZm9udFsnZGVzYyddIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCWlmIChpc19mbG9hdCgkdmFsdWUpKSB7CgkJCQkkdmFsdWUgPSBzcHJpbnRmKCclRicsICR2YWx1ZSk7CgkJCX0KCQkJJG91dCAuPSAnIC8nLiRrZXkuJyAnLiR2YWx1ZTsKCQl9CgkJJGZvbnRkaXIgPSBmYWxzZTsKCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250WydmaWxlJ10pKSB7CgkJCS8vIEEgc3RyZWFtIGNvbnRhaW5pbmcgYSBUcnVlVHlwZSBmb250CgkJCSRvdXQgLj0gJyAvRm9udEZpbGUyICcuJHRoaXMtPkZvbnRGaWxlc1skZm9udFsnZmlsZSddXVsnbiddLicgMCBSJzsKCQkJJGZvbnRkaXIgPSAkdGhpcy0+Rm9udEZpbGVzWyRmb250WydmaWxlJ11dWydmb250ZGlyJ107CgkJfQoJCSRvdXQgLj0gJyA+Pic7CgkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCWlmIChpc3NldCgkZm9udFsnY3RnJ10pIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmb250WydjdGcnXSkpKSB7CgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCS8vIEVtYmVkIENJRFRvR0lETWFwCgkJCS8vIEEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgbWFwcGluZyBmcm9tIENJRHMgdG8gZ2x5cGggaW5kaWNlcwoJCQkvLyBzZWFyY2ggYW5kIGdldCBDVEcgZm9udCBmaWxlIHRvIGVtYmVkZAoJCQkkY3RnZmlsZSA9IHN0cnRvbG93ZXIoJGZvbnRbJ2N0ZyddKTsKCQkJLy8gc2VhcmNoIGFuZCBnZXQgY3RnIGZvbnQgZmlsZSB0byBlbWJlZGQKCQkJJGZvbnRmaWxlID0gVENQREZfRk9OVFM6OmdldEZvbnRGdWxsUGF0aCgkY3RnZmlsZSwgJGZvbnRkaXIpOwoJCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGZvbnRmaWxlKSkgewoJCQkJJHRoaXMtPkVycm9yKCdGb250IGZpbGUgbm90IGZvdW5kOiAnLiRjdGdmaWxlKTsKCQkJfQoJCQkkc3RyZWFtID0gJHRoaXMtPl9nZXRyYXdzdHJlYW0oZmlsZV9nZXRfY29udGVudHMoJGZvbnRmaWxlKSk7CgkJCSRvdXQgPSAnPDwgL0xlbmd0aCAnLnN0cmxlbigkc3RyZWFtKS4nJzsKCQkJaWYgKHN1YnN0cigkZm9udGZpbGUsIC0yKSA9PSAnLnonKSB7IC8vIGNoZWNrIGZpbGUgZXh0ZW5zaW9uCgkJCQkvLyBEZWNvbXByZXNzZXMgZGF0YSBlbmNvZGVkIHVzaW5nIHRoZSBwdWJsaWMtZG9tYWluCgkJCQkvLyB6bGliL2RlZmxhdGUgY29tcHJlc3Npb24gbWV0aG9kLCByZXByb2R1Y2luZyB0aGUKCQkJCS8vIG9yaWdpbmFsIHRleHQgb3IgYmluYXJ5IGRhdGEKCQkJCSRvdXQgLj0gJyAvRmlsdGVyIC9GbGF0ZURlY29kZSc7CgkJCX0KCQkJJG91dCAuPSAnID4+JzsKCQkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJfQoJfQoKCS8qKgoJICogT3V0cHV0IENJRC0wIGZvbnRzLgoJICogQSBUeXBlIDAgQ0lERm9udCBjb250YWlucyBnbHlwaCBkZXNjcmlwdGlvbnMgYmFzZWQgb24gdGhlIEFkb2JlIFR5cGUgMSBmb250IGZvcm1hdAoJICogQHBhcmFtICRmb250IChhcnJheSkgZm9udCBkYXRhCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIEFuZHJldyBXaGl0ZWhlYWQsIE5pY29sYSBBc3VuaSwgWXVraWhpcm8gTmFrYWRhaXJhCgkgKiBAc2luY2UgMy4yLjAwMCAoMjAwOC0wNi0yMykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRjaWRmb250MCgkZm9udCkgewoJCSRjaWRvZmZzZXQgPSAwOwoJCWlmICghaXNzZXQoJGZvbnRbJ2N3J11bMV0pKSB7CgkJCSRjaWRvZmZzZXQgPSAzMTsKCQl9CgkJaWYgKGlzc2V0KCRmb250WydjaWRpbmZvJ11bJ3VuaTJjaWQnXSkpIHsKCQkJLy8gY29udmVydCB1bmljb2RlIHRvIGNpZC4KCQkJJHVuaTJjaWQgPSAkZm9udFsnY2lkaW5mbyddWyd1bmkyY2lkJ107CgkJCSRjdyA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRmb250WydjdyddIGFzICR1bmkgPT4gJHdpZHRoKSB7CgkJCQlpZiAoaXNzZXQoJHVuaTJjaWRbJHVuaV0pKSB7CgkJCQkJJGN3WygkdW5pMmNpZFskdW5pXSArICRjaWRvZmZzZXQpXSA9ICR3aWR0aDsKCQkJCX0gZWxzZWlmICgkdW5pIDwgMjU2KSB7CgkJCQkJJGN3WyR1bmldID0gJHdpZHRoOwoJCQkJfSAvLyBlbHNlIHVua25vd24gY2hhcmFjdGVyCgkJCX0KCQkJJGZvbnQgPSBhcnJheV9tZXJnZSgkZm9udCwgYXJyYXkoJ2N3JyA9PiAkY3cpKTsKCQl9CgkJJG5hbWUgPSAkZm9udFsnbmFtZSddOwoJCSRlbmMgPSAkZm9udFsnZW5jJ107CgkJaWYgKCRlbmMpIHsKCQkJJGxvbmduYW1lID0gJG5hbWUuJy0nLiRlbmM7CgkJfSBlbHNlIHsKCQkJJGxvbmduYW1lID0gJG5hbWU7CgkJfQoJCSRvdXQgPSAkdGhpcy0+X2dldG9iaigkdGhpcy0+Zm9udF9vYmpfaWRzWyRmb250Wydmb250a2V5J11dKS4iXG4iOwoJCSRvdXQgLj0gJzw8L1R5cGUgL0ZvbnQnOwoJCSRvdXQgLj0gJyAvU3VidHlwZSAvVHlwZTAnOwoJCSRvdXQgLj0gJyAvQmFzZUZvbnQgLycuJGxvbmduYW1lOwoJCSRvdXQgLj0gJyAvTmFtZSAvRicuJGZvbnRbJ2knXTsKCQlpZiAoJGVuYykgewoJCQkkb3V0IC49ICcgL0VuY29kaW5nIC8nLiRlbmM7CgkJfQoJCSRvdXQgLj0gJyAvRGVzY2VuZGFudEZvbnRzIFsnLigkdGhpcy0+biArIDEpLicgMCBSXSc7CgkJJG91dCAuPSAnID4+JzsKCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJJHRoaXMtPl9vdXQoJG91dCk7CgkJJG9pZCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJJG91dCA9ICc8PC9UeXBlIC9Gb250JzsKCQkkb3V0IC49ICcgL1N1YnR5cGUgL0NJREZvbnRUeXBlMCc7CgkJJG91dCAuPSAnIC9CYXNlRm9udCAvJy4kbmFtZTsKCQkkY2lkaW5mbyA9ICcvUmVnaXN0cnkgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJGZvbnRbJ2NpZGluZm8nXVsnUmVnaXN0cnknXSwgJG9pZCk7CgkJJGNpZGluZm8gLj0gJyAvT3JkZXJpbmcgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJGZvbnRbJ2NpZGluZm8nXVsnT3JkZXJpbmcnXSwgJG9pZCk7CgkJJGNpZGluZm8gLj0gJyAvU3VwcGxlbWVudCAnLiRmb250WydjaWRpbmZvJ11bJ1N1cHBsZW1lbnQnXTsKCQkkb3V0IC49ICcgL0NJRFN5c3RlbUluZm8gPDwnLiRjaWRpbmZvLic+Pic7CgkJJG91dCAuPSAnIC9Gb250RGVzY3JpcHRvciAnLigkdGhpcy0+biArIDEpLicgMCBSJzsKCQkkb3V0IC49ICcgL0RXICcuJGZvbnRbJ2R3J107CgkJJG91dCAuPSAiXG4iLlRDUERGX0ZPTlRTOjpfcHV0Zm9udHdpZHRocygkZm9udCwgJGNpZG9mZnNldCk7CgkJJG91dCAuPSAnID4+JzsKCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJJHRoaXMtPl9vdXQoJG91dCk7CgkJJHRoaXMtPl9uZXdvYmooKTsKCQkkcyA9ICc8PC9UeXBlIC9Gb250RGVzY3JpcHRvciAvRm9udE5hbWUgLycuJG5hbWU7CgkJZm9yZWFjaCAoJGZvbnRbJ2Rlc2MnXSBhcyAkayA9PiAkdikgewoJCQlpZiAoJGsgIT0gJ1N0eWxlJykgewoJCQkJaWYgKGlzX2Zsb2F0KCR2KSkgewoJCQkJCSR2ID0gc3ByaW50ZignJUYnLCAkdik7CgkJCQl9CgkJCQkkcyAuPSAnIC8nLiRrLicgJy4kdi4nJzsKCQkJfQoJCX0KCQkkcyAuPSAnPj4nOwoJCSRzIC49ICJcbiIuJ2VuZG9iaic7CgkJJHRoaXMtPl9vdXQoJHMpOwoJfQoKCS8qKgoJICogT3V0cHV0IGltYWdlcy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRpbWFnZXMoKSB7CgkJJGZpbHRlciA9ICgkdGhpcy0+Y29tcHJlc3MpID8gJy9GaWx0ZXIgL0ZsYXRlRGVjb2RlICcgOiAnJzsKCQlmb3JlYWNoICgkdGhpcy0+aW1hZ2VrZXlzIGFzICRmaWxlKSB7CgkJCSRpbmZvID0gJHRoaXMtPmdldEltYWdlQnVmZmVyKCRmaWxlKTsKCQkJLy8gc2V0IG9iamVjdCBmb3IgYWx0ZXJuYXRlIGltYWdlcyBhcnJheQoJCQlpZiAoKCEkdGhpcy0+cGRmYV9tb2RlKSBBTkQgaXNzZXQoJGluZm9bJ2FsdGltZ3MnXSkgQU5EICFlbXB0eSgkaW5mb1snYWx0aW1ncyddKSkgewoJCQkJJGFsdG9pZCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCQkkb3V0ID0gJ1snOwoJCQkJZm9yZWFjaCAoJGluZm9bJ2FsdGltZ3MnXSBhcyAkYWx0aW1hZ2UpIHsKCQkJCQlpZiAoaXNzZXQoJHRoaXMtPnhvYmplY3RzWydJJy4kYWx0aW1hZ2VbMF1dWyduJ10pKSB7CgkJCQkJCSRvdXQgLj0gJyA8PCAvSW1hZ2UgJy4kdGhpcy0+eG9iamVjdHNbJ0knLiRhbHRpbWFnZVswXV1bJ24nXS4nIDAgUic7CgkJCQkJCSRvdXQgLj0gJyAvRGVmYXVsdEZvclByaW50aW5nJzsKCQkJCQkJaWYgKCRhbHRpbWFnZVsxXSA9PT0gdHJ1ZSkgewoJCQkJCQkJJG91dCAuPSAnIHRydWUnOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJG91dCAuPSAnIGZhbHNlJzsKCQkJCQkJfQoJCQkJCQkkb3V0IC49ICcgPj4nOwoJCQkJCX0KCQkJCX0KCQkJCSRvdXQgLj0gJyBdJzsKCQkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQl9CgkJCS8vIHNldCBpbWFnZSBvYmplY3QKCQkJJG9pZCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0aGlzLT54b2JqZWN0c1snSScuJGluZm9bJ2knXV0gPSBhcnJheSgnbicgPT4gJG9pZCk7CgkJCSR0aGlzLT5zZXRJbWFnZVN1YkJ1ZmZlcigkZmlsZSwgJ24nLCAkdGhpcy0+bik7CgkJCSRvdXQgPSAnPDwvVHlwZSAvWE9iamVjdCc7CgkJCSRvdXQgLj0gJyAvU3VidHlwZSAvSW1hZ2UnOwoJCQkkb3V0IC49ICcgL1dpZHRoICcuJGluZm9bJ3cnXTsKCQkJJG91dCAuPSAnIC9IZWlnaHQgJy4kaW5mb1snaCddOwoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnbWFza2VkJywgJGluZm8pKSB7CgkJCQkkb3V0IC49ICcgL1NNYXNrICcuKCR0aGlzLT5uIC0gMSkuJyAwIFInOwoJCQl9CgkJCS8vIHNldCBjb2xvciBzcGFjZQoJCQkkaWNjID0gZmFsc2U7CgkJCWlmIChpc3NldCgkaW5mb1snaWNjJ10pIEFORCAoJGluZm9bJ2ljYyddICE9PSBmYWxzZSkpIHsKCQkJCS8vIElDQyBDb2xvdXIgU3BhY2UKCQkJCSRpY2MgPSB0cnVlOwoJCQkJJG91dCAuPSAnIC9Db2xvclNwYWNlIFsvSUNDQmFzZWQgJy4oJHRoaXMtPm4gKyAxKS4nIDAgUl0nOwoJCQl9IGVsc2VpZiAoJGluZm9bJ2NzJ10gPT0gJ0luZGV4ZWQnKSB7CgkJCQkvLyBJbmRleGVkIENvbG91ciBTcGFjZQoJCQkJJG91dCAuPSAnIC9Db2xvclNwYWNlIFsvSW5kZXhlZCAvRGV2aWNlUkdCICcuKChzdHJsZW4oJGluZm9bJ3BhbCddKSAvIDMpIC0gMSkuJyAnLigkdGhpcy0+biArIDEpLicgMCBSXSc7CgkJCX0gZWxzZSB7CgkJCQkvLyBEZXZpY2UgQ29sb3VyIFNwYWNlCgkJCQkkb3V0IC49ICcgL0NvbG9yU3BhY2UgLycuJGluZm9bJ2NzJ107CgkJCX0KCQkJaWYgKCRpbmZvWydjcyddID09ICdEZXZpY2VDTVlLJykgewoJCQkJJG91dCAuPSAnIC9EZWNvZGUgWzEgMCAxIDAgMSAwIDEgMF0nOwoJCQl9CgkJCSRvdXQgLj0gJyAvQml0c1BlckNvbXBvbmVudCAnLiRpbmZvWydicGMnXTsKCQkJaWYgKGlzc2V0KCRhbHRvaWQpIEFORCAoJGFsdG9pZCA+IDApKSB7CgkJCQkvLyByZWZlcmVuY2UgdG8gYWx0ZXJuYXRlIGltYWdlcyBkaWN0aW9uYXJ5CgkJCQkkb3V0IC49ICcgL0FsdGVybmF0ZXMgJy4kYWx0b2lkLicgMCBSJzsKCQkJfQoJCQlpZiAoaXNzZXQoJGluZm9bJ2V4dXJsJ10pIEFORCAhZW1wdHkoJGluZm9bJ2V4dXJsJ10pKSB7CgkJCQkvLyBleHRlcm5hbCBzdHJlYW0KCQkJCSRvdXQgLj0gJyAvTGVuZ3RoIDAnOwoJCQkJJG91dCAuPSAnIC9GIDw8IC9GUyAvVVJMIC9GICcuJHRoaXMtPl9kYXRhc3RyaW5nKCRpbmZvWydleHVybCddLCAkb2lkKS4nID4+JzsKCQkJCWlmIChpc3NldCgkaW5mb1snZiddKSkgewoJCQkJCSRvdXQgLj0gJyAvRkZpbHRlciAvJy4kaW5mb1snZiddOwoJCQkJfQoJCQkJJG91dCAuPSAnID4+JzsKCQkJCSRvdXQgLj0gJyBzdHJlYW0nLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCX0gZWxzZSB7CgkJCQlpZiAoaXNzZXQoJGluZm9bJ2YnXSkpIHsKCQkJCQkkb3V0IC49ICcgL0ZpbHRlciAvJy4kaW5mb1snZiddOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRpbmZvWydwYXJtcyddKSkgewoJCQkJCSRvdXQgLj0gJyAnLiRpbmZvWydwYXJtcyddOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRpbmZvWyd0cm5zJ10pIEFORCBpc19hcnJheSgkaW5mb1sndHJucyddKSkgewoJCQkJCSR0cm5zID0gJyc7CgkJCQkJJGNvdW50X2luZm8gPSBjb3VudCgkaW5mb1sndHJucyddKTsKCQkJCQlmb3IgKCRpPTA7ICRpIDwgJGNvdW50X2luZm87ICsrJGkpIHsKCQkJCQkJJHRybnMgLj0gJGluZm9bJ3RybnMnXVskaV0uJyAnLiRpbmZvWyd0cm5zJ11bJGldLicgJzsKCQkJCQl9CgkJCQkJJG91dCAuPSAnIC9NYXNrIFsnLiR0cm5zLiddJzsKCQkJCX0KCQkJCSRzdHJlYW0gPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkaW5mb1snZGF0YSddKTsKCQkJCSRvdXQgLj0gJyAvTGVuZ3RoICcuc3RybGVuKCRzdHJlYW0pLicgPj4nOwoJCQkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCX0KCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJaWYgKCRpY2MpIHsKCQkJCS8vIElDQyBjb2xvdXIgcHJvZmlsZQoJCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJCSRpY2MgPSAoJHRoaXMtPmNvbXByZXNzKSA/IGd6Y29tcHJlc3MoJGluZm9bJ2ljYyddKSA6ICRpbmZvWydpY2MnXTsKCQkJCSRpY2MgPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkaWNjKTsKCQkJCSR0aGlzLT5fb3V0KCc8PC9OICcuJGluZm9bJ2NoJ10uJyAvQWx0ZXJuYXRlIC8nLiRpbmZvWydjcyddLicgJy4kZmlsdGVyLicvTGVuZ3RoICcuc3RybGVuKCRpY2MpLic+PiBzdHJlYW0nLiJcbiIuJGljYy4iXG4iLidlbmRzdHJlYW0nLiJcbiIuJ2VuZG9iaicpOwoJCQl9IGVsc2VpZiAoJGluZm9bJ2NzJ10gPT0gJ0luZGV4ZWQnKSB7CgkJCQkvLyBjb2xvdXIgcGFsZXR0ZQoJCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJCSRwYWwgPSAoJHRoaXMtPmNvbXByZXNzKSA/IGd6Y29tcHJlc3MoJGluZm9bJ3BhbCddKSA6ICRpbmZvWydwYWwnXTsKCQkJCSRwYWwgPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkcGFsKTsKCQkJCSR0aGlzLT5fb3V0KCc8PCcuJGZpbHRlci4nL0xlbmd0aCAnLnN0cmxlbigkcGFsKS4nPj4gc3RyZWFtJy4iXG4iLiRwYWwuIlxuIi4nZW5kc3RyZWFtJy4iXG4iLidlbmRvYmonKTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIE91dHB1dCBGb3JtIFhPYmplY3RzIFRlbXBsYXRlcy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS44LjAxNyAoMjAxMC0wOC0yNCkKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzZWUgc3RhcnRUZW1wbGF0ZSgpLCBlbmRUZW1wbGF0ZSgpLCBwcmludFRlbXBsYXRlKCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXR4b2JqZWN0cygpIHsKCQlmb3JlYWNoICgkdGhpcy0+eG9iamVjdHMgYXMgJGtleSA9PiAkZGF0YSkgewoJCQlpZiAoaXNzZXQoJGRhdGFbJ291dGRhdGEnXSkpIHsKCQkJCSRzdHJlYW0gPSBzdHJfcmVwbGFjZSgkdGhpcy0+ZXBzbWFya2VyLCAnJywgdHJpbSgkZGF0YVsnb3V0ZGF0YSddKSk7CgkJCQkkb3V0ID0gJHRoaXMtPl9nZXRvYmooJGRhdGFbJ24nXSkuIlxuIjsKCQkJCSRvdXQgLj0gJzw8JzsKCQkJCSRvdXQgLj0gJyAvVHlwZSAvWE9iamVjdCc7CgkJCQkkb3V0IC49ICcgL1N1YnR5cGUgL0Zvcm0nOwoJCQkJJG91dCAuPSAnIC9Gb3JtVHlwZSAxJzsKCQkJCWlmICgkdGhpcy0+Y29tcHJlc3MpIHsKCQkJCQkkc3RyZWFtID0gZ3pjb21wcmVzcygkc3RyZWFtKTsKCQkJCQkkb3V0IC49ICcgL0ZpbHRlciAvRmxhdGVEZWNvZGUnOwoJCQkJfQoJCQkJJG91dCAuPSBzcHJpbnRmKCcgL0JCb3ggWyVGICVGICVGICVGXScsICgkZGF0YVsneCddICogJHRoaXMtPmspLCAoLSRkYXRhWyd5J10gKiAkdGhpcy0+ayksICgoJGRhdGFbJ3cnXSArICRkYXRhWyd4J10pICogJHRoaXMtPmspLCAoKCRkYXRhWydoJ10gLSAkZGF0YVsneSddKSAqICR0aGlzLT5rKSk7CgkJCQkkb3V0IC49ICcgL01hdHJpeCBbMSAwIDAgMSAwIDBdJzsKCQkJCSRvdXQgLj0gJyAvUmVzb3VyY2VzIDw8JzsKCQkJCSRvdXQgLj0gJyAvUHJvY1NldCBbL1BERiAvVGV4dCAvSW1hZ2VCIC9JbWFnZUMgL0ltYWdlSV0nOwoJCQkJaWYgKCEkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCQkJLy8gdHJhbnNwYXJlbmN5CgkJCQkJaWYgKGlzc2V0KCRkYXRhWydleHRnc3RhdGVzJ10pIEFORCAhZW1wdHkoJGRhdGFbJ2V4dGdzdGF0ZXMnXSkpIHsKCQkJCQkJJG91dCAuPSAnIC9FeHRHU3RhdGUgPDwnOwoJCQkJCQlmb3JlYWNoICgkZGF0YVsnZXh0Z3N0YXRlcyddIGFzICRrID0+ICRleHRnc3RhdGUpIHsKCQkJCQkJCWlmIChpc3NldCgkdGhpcy0+ZXh0Z3N0YXRlc1ska11bJ25hbWUnXSkpIHsKCQkJCQkJCQkkb3V0IC49ICcgLycuJHRoaXMtPmV4dGdzdGF0ZXNbJGtdWyduYW1lJ107CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRvdXQgLj0gJyAvR1MnLiRrOwoJCQkJCQkJfQoJCQkJCQkJJG91dCAuPSAnICcuJHRoaXMtPmV4dGdzdGF0ZXNbJGtdWyduJ10uJyAwIFInOwoJCQkJCQl9CgkJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkZGF0YVsnZ3JhZGllbnRzJ10pIEFORCAhZW1wdHkoJGRhdGFbJ2dyYWRpZW50cyddKSkgewoJCQkJCQkkZ3AgPSAnJzsKCQkJCQkJJGdzID0gJyc7CgkJCQkJCWZvcmVhY2ggKCRkYXRhWydncmFkaWVudHMnXSBhcyAkaWQgPT4gJGdyYWQpIHsKCQkJCQkJCS8vIGdyYWRpZW50IHBhdHRlcm5zCgkJCQkJCQkkZ3AgLj0gJyAvcCcuJGlkLicgJy4kdGhpcy0+Z3JhZGllbnRzWyRpZF1bJ3BhdHRlcm4nXS4nIDAgUic7CgkJCQkJCQkvLyBncmFkaWVudCBzaGFkaW5ncwoJCQkJCQkJJGdzIC49ICcgL1NoJy4kaWQuJyAnLiR0aGlzLT5ncmFkaWVudHNbJGlkXVsnaWQnXS4nIDAgUic7CgkJCQkJCX0KCQkJCQkJJG91dCAuPSAnIC9QYXR0ZXJuIDw8Jy4kZ3AuJyA+Pic7CgkJCQkJCSRvdXQgLj0gJyAvU2hhZGluZyA8PCcuJGdzLicgPj4nOwoJCQkJCX0KCQkJCX0KCQkJCS8vIHNwb3QgY29sb3JzCgkJCQlpZiAoaXNzZXQoJGRhdGFbJ3Nwb3RfY29sb3JzJ10pIEFORCAhZW1wdHkoJGRhdGFbJ3Nwb3RfY29sb3JzJ10pKSB7CgkJCQkJJG91dCAuPSAnIC9Db2xvclNwYWNlIDw8JzsKCQkJCQlmb3JlYWNoICgkZGF0YVsnc3BvdF9jb2xvcnMnXSBhcyAkbmFtZSA9PiAkY29sb3IpIHsKCQkJCQkJJG91dCAuPSAnIC9DUycuJGNvbG9yWydpJ10uJyAnLiR0aGlzLT5zcG90X2NvbG9yc1skbmFtZV1bJ24nXS4nIDAgUic7CgkJCQkJfQoJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQl9CgkJCQkvLyBmb250cwoJCQkJaWYgKCFlbXB0eSgkZGF0YVsnZm9udHMnXSkpIHsKCQkJCQkkb3V0IC49ICcgL0ZvbnQgPDwnOwoJCQkJCWZvcmVhY2ggKCRkYXRhWydmb250cyddIGFzICRmb250a2V5ID0+ICRmb250aWQpIHsKCQkJCQkJJG91dCAuPSAnIC9GJy4kZm9udGlkLicgJy4kdGhpcy0+Zm9udF9vYmpfaWRzWyRmb250a2V5XS4nIDAgUic7CgkJCQkJfQoJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQl9CgkJCQkvLyBpbWFnZXMgb3IgbmVzdGVkIHhvYmplY3RzCgkJCQlpZiAoIWVtcHR5KCRkYXRhWydpbWFnZXMnXSkgT1IgIWVtcHR5KCRkYXRhWyd4b2JqZWN0cyddKSkgewoJCQkJCSRvdXQgLj0gJyAvWE9iamVjdCA8PCc7CgkJCQkJZm9yZWFjaCAoJGRhdGFbJ2ltYWdlcyddIGFzICRpbWdpZCkgewoJCQkJCQkkb3V0IC49ICcgL0knLiRpbWdpZC4nICcuJHRoaXMtPnhvYmplY3RzWydJJy4kaW1naWRdWyduJ10uJyAwIFInOwoJCQkJCX0KCQkJCQlmb3JlYWNoICgkZGF0YVsneG9iamVjdHMnXSBhcyAkc3ViX2lkID0+ICRzdWJfb2JqaWQpIHsKCQkJCQkJJG91dCAuPSAnIC8nLiRzdWJfaWQuJyAnLiRzdWJfb2JqaWRbJ24nXS4nIDAgUic7CgkJCQkJfQoJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQl9CgkJCQkkb3V0IC49ICcgPj4nOyAvL2VuZCByZXNvdXJjZXMKCQkJCWlmIChpc3NldCgkZGF0YVsnZ3JvdXAnXSkgQU5EICgkZGF0YVsnZ3JvdXAnXSAhPT0gZmFsc2UpKSB7CgkJCQkJLy8gc2V0IHRyYW5zcGFyZW5jeSBncm91cAoJCQkJCSRvdXQgLj0gJyAvR3JvdXAgPDwgL1R5cGUgL0dyb3VwIC9TIC9UcmFuc3BhcmVuY3knOwoJCQkJCWlmIChpc19hcnJheSgkZGF0YVsnZ3JvdXAnXSkpIHsKCQkJCQkJaWYgKGlzc2V0KCRkYXRhWydncm91cCddWydDUyddKSBBTkQgIWVtcHR5KCRkYXRhWydncm91cCddWydDUyddKSkgewoJCQkJCQkJJG91dCAuPSAnIC9DUyAvJy4kZGF0YVsnZ3JvdXAnXVsnQ1MnXTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGRhdGFbJ2dyb3VwJ11bJ0knXSkpIHsKCQkJCQkJCSRvdXQgLj0gJyAvSSAvJy4oJGRhdGFbJ2dyb3VwJ11bJ0knXT09PXRydWU/J3RydWUnOidmYWxzZScpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkZGF0YVsnZ3JvdXAnXVsnSyddKSkgewoJCQkJCQkJJG91dCAuPSAnIC9LIC8nLigkZGF0YVsnZ3JvdXAnXVsnSyddPT09dHJ1ZT8ndHJ1ZSc6J2ZhbHNlJyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJJG91dCAuPSAnID4+JzsKCQkJCX0KCQkJCSRzdHJlYW0gPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkc3RyZWFtLCAkZGF0YVsnbiddKTsKCQkJCSRvdXQgLj0gJyAvTGVuZ3RoICcuc3RybGVuKCRzdHJlYW0pOwoJCQkJJG91dCAuPSAnID4+JzsKCQkJCSRvdXQgLj0gJyBzdHJlYW0nLiJcbiIuJHN0cmVhbS4iXG4iLidlbmRzdHJlYW0nOwoJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBPdXRwdXQgU3BvdCBDb2xvcnMgUmVzb3VyY2VzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuMC4wMjQgKDIwMDgtMDktMTIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0c3BvdGNvbG9ycygpIHsKCQlmb3JlYWNoICgkdGhpcy0+c3BvdF9jb2xvcnMgYXMgJG5hbWUgPT4gJGNvbG9yKSB7CgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSR0aGlzLT5zcG90X2NvbG9yc1skbmFtZV1bJ24nXSA9ICR0aGlzLT5uOwoJCQkkb3V0ID0gJ1svU2VwYXJhdGlvbiAvJy5zdHJfcmVwbGFjZSgnICcsICcjMjAnLCAkbmFtZSk7CgkJCSRvdXQgLj0gJyAvRGV2aWNlQ01ZSyA8PCc7CgkJCSRvdXQgLj0gJyAvUmFuZ2UgWzAgMSAwIDEgMCAxIDAgMV0gL0MwIFswIDAgMCAwXSc7CgkJCSRvdXQgLj0gJyAnLnNwcmludGYoJy9DMSBbJUYgJUYgJUYgJUZdICcsICgkY29sb3JbJ0MnXSAvIDEwMCksICgkY29sb3JbJ00nXSAvIDEwMCksICgkY29sb3JbJ1knXSAvIDEwMCksICgkY29sb3JbJ0snXSAvIDEwMCkpOwoJCQkkb3V0IC49ICcgL0Z1bmN0aW9uVHlwZSAyIC9Eb21haW4gWzAgMV0gL04gMT4+XSc7CgkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJfQoJfQoKCS8qKgoJICogUmV0dXJuIFhPYmplY3RzIERpY3Rpb25hcnkuCgkgKiBAcmV0dXJuIHN0cmluZyBYT2JqZWN0cyBkaWN0aW9uYXJ5CgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS44LjAxNCAoMjAxMC0wOC0yMykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9nZXR4b2JqZWN0ZGljdCgpIHsKCQkkb3V0ID0gJyc7CgkJZm9yZWFjaCAoJHRoaXMtPnhvYmplY3RzIGFzICRpZCA9PiAkb2JqaWQpIHsKCQkJJG91dCAuPSAnIC8nLiRpZC4nICcuJG9iamlkWyduJ10uJyAwIFInOwoJCX0KCQlyZXR1cm4gJG91dDsKCX0KCgkvKioKCSAqIE91dHB1dCBSZXNvdXJjZXMgRGljdGlvbmFyeS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRyZXNvdXJjZWRpY3QoKSB7CgkJJG91dCA9ICR0aGlzLT5fZ2V0b2JqKDIpLiJcbiI7CgkJJG91dCAuPSAnPDwgL1Byb2NTZXQgWy9QREYgL1RleHQgL0ltYWdlQiAvSW1hZ2VDIC9JbWFnZUldJzsKCQkkb3V0IC49ICcgL0ZvbnQgPDwnOwoJCWZvcmVhY2ggKCR0aGlzLT5mb250a2V5cyBhcyAkZm9udGtleSkgewoJCQkkZm9udCA9ICR0aGlzLT5nZXRGb250QnVmZmVyKCRmb250a2V5KTsKCQkJJG91dCAuPSAnIC9GJy4kZm9udFsnaSddLicgJy4kZm9udFsnbiddLicgMCBSJzsKCQl9CgkJJG91dCAuPSAnID4+JzsKCQkkb3V0IC49ICcgL1hPYmplY3QgPDwnOwoJCSRvdXQgLj0gJHRoaXMtPl9nZXR4b2JqZWN0ZGljdCgpOwoJCSRvdXQgLj0gJyA+Pic7CgkJLy8gbGF5ZXJzCgkJaWYgKCFlbXB0eSgkdGhpcy0+cGRmbGF5ZXJzKSkgewoJCQkkb3V0IC49ICcgL1Byb3BlcnRpZXMgPDwnOwoJCQlmb3JlYWNoICgkdGhpcy0+cGRmbGF5ZXJzIGFzICRsYXllcikgewoJCQkJJG91dCAuPSAnIC8nLiRsYXllclsnbGF5ZXInXS4nICcuJGxheWVyWydvYmppZCddLicgMCBSJzsKCQkJfQoJCQkkb3V0IC49ICcgPj4nOwoJCX0KCQlpZiAoISR0aGlzLT5wZGZhX21vZGUpIHsKCQkJLy8gdHJhbnNwYXJlbmN5CgkJCWlmIChpc3NldCgkdGhpcy0+ZXh0Z3N0YXRlcykgQU5EICFlbXB0eSgkdGhpcy0+ZXh0Z3N0YXRlcykpIHsKCQkJCSRvdXQgLj0gJyAvRXh0R1N0YXRlIDw8JzsKCQkJCWZvcmVhY2ggKCR0aGlzLT5leHRnc3RhdGVzIGFzICRrID0+ICRleHRnc3RhdGUpIHsKCQkJCQlpZiAoaXNzZXQoJGV4dGdzdGF0ZVsnbmFtZSddKSkgewoJCQkJCQkkb3V0IC49ICcgLycuJGV4dGdzdGF0ZVsnbmFtZSddOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRvdXQgLj0gJyAvR1MnLiRrOwoJCQkJCX0KCQkJCQkkb3V0IC49ICcgJy4kZXh0Z3N0YXRlWyduJ10uJyAwIFInOwoJCQkJfQoJCQkJJG91dCAuPSAnID4+JzsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPmdyYWRpZW50cykgQU5EICFlbXB0eSgkdGhpcy0+Z3JhZGllbnRzKSkgewoJCQkJJGdwID0gJyc7CgkJCQkkZ3MgPSAnJzsKCQkJCWZvcmVhY2ggKCR0aGlzLT5ncmFkaWVudHMgYXMgJGlkID0+ICRncmFkKSB7CgkJCQkJLy8gZ3JhZGllbnQgcGF0dGVybnMKCQkJCQkkZ3AgLj0gJyAvcCcuJGlkLicgJy4kZ3JhZFsncGF0dGVybiddLicgMCBSJzsKCQkJCQkvLyBncmFkaWVudCBzaGFkaW5ncwoJCQkJCSRncyAuPSAnIC9TaCcuJGlkLicgJy4kZ3JhZFsnaWQnXS4nIDAgUic7CgkJCQl9CgkJCQkkb3V0IC49ICcgL1BhdHRlcm4gPDwnLiRncC4nID4+JzsKCQkJCSRvdXQgLj0gJyAvU2hhZGluZyA8PCcuJGdzLicgPj4nOwoJCQl9CgkJfQoJCS8vIHNwb3QgY29sb3JzCgkJaWYgKGlzc2V0KCR0aGlzLT5zcG90X2NvbG9ycykgQU5EICFlbXB0eSgkdGhpcy0+c3BvdF9jb2xvcnMpKSB7CgkJCSRvdXQgLj0gJyAvQ29sb3JTcGFjZSA8PCc7CgkJCWZvcmVhY2ggKCR0aGlzLT5zcG90X2NvbG9ycyBhcyAkY29sb3IpIHsKCQkJCSRvdXQgLj0gJyAvQ1MnLiRjb2xvclsnaSddLicgJy4kY29sb3JbJ24nXS4nIDAgUic7CgkJCX0KCQkJJG91dCAuPSAnID4+JzsKCQl9CgkJJG91dCAuPSAnID4+JzsKCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJJHRoaXMtPl9vdXQoJG91dCk7Cgl9CgoJLyoqCgkgKiBPdXRwdXQgUmVzb3VyY2VzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dHJlc291cmNlcygpIHsKCQkkdGhpcy0+X3B1dGV4dGdzdGF0ZXMoKTsKCQkkdGhpcy0+X3B1dG9jZygpOwoJCSR0aGlzLT5fcHV0Zm9udHMoKTsKCQkkdGhpcy0+X3B1dGltYWdlcygpOwoJCSR0aGlzLT5fcHV0c3BvdGNvbG9ycygpOwoJCSR0aGlzLT5fcHV0c2hhZGVycygpOwoJCSR0aGlzLT5fcHV0eG9iamVjdHMoKTsKCQkkdGhpcy0+X3B1dHJlc291cmNlZGljdCgpOwoJCSR0aGlzLT5fcHV0ZGVzdHMoKTsKCQkkdGhpcy0+X3B1dEVtYmVkZGVkRmlsZXMoKTsKCQkkdGhpcy0+X3B1dGFubm90c29ianMoKTsKCQkkdGhpcy0+X3B1dGphdmFzY3JpcHQoKTsKCQkkdGhpcy0+X3B1dGJvb2ttYXJrcygpOwoJCSR0aGlzLT5fcHV0ZW5jcnlwdGlvbigpOwoJfQoKCS8qKgoJICogQWRkcyBzb21lIE1ldGFkYXRhIGluZm9ybWF0aW9uIChEb2N1bWVudCBJbmZvcm1hdGlvbiBEaWN0aW9uYXJ5KQoJICogKHNlZSBDaGFwdGVyIDE0LjMuMyBEb2N1bWVudCBJbmZvcm1hdGlvbiBEaWN0aW9uYXJ5IG9mIFBERjMyMDAwXzIwMDgucGRmIFJlZmVyZW5jZSkKCSAqIEByZXR1cm4gaW50IG9iamVjdCBpZAoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dGluZm8oKSB7CgkJJG9pZCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJJG91dCA9ICc8PCc7CgkJLy8gc3RvcmUgY3VycmVudCBpc3VuaWNvZGUgdmFsdWUKCQkkcHJldl9pc3VuaWNvZGUgPSAkdGhpcy0+aXN1bmljb2RlOwoJCWlmICgkdGhpcy0+ZG9jaW5mb3VuaWNvZGUpIHsKCQkJJHRoaXMtPmlzdW5pY29kZSA9IHRydWU7CgkJfQoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnRpdGxlKSkgewoJCQkvLyBUaGUgZG9jdW1lbnQncyB0aXRsZS4KCQkJJG91dCAuPSAnIC9UaXRsZSAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+dGl0bGUsICRvaWQpOwoJCX0KCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5hdXRob3IpKSB7CgkJCS8vIFRoZSBuYW1lIG9mIHRoZSBwZXJzb24gd2hvIGNyZWF0ZWQgdGhlIGRvY3VtZW50LgoJCQkkb3V0IC49ICcgL0F1dGhvciAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+YXV0aG9yLCAkb2lkKTsKCQl9CgkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+c3ViamVjdCkpIHsKCQkJLy8gVGhlIHN1YmplY3Qgb2YgdGhlIGRvY3VtZW50LgoJCQkkb3V0IC49ICcgL1N1YmplY3QgJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPnN1YmplY3QsICRvaWQpOwoJCX0KCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5rZXl3b3JkcykpIHsKCQkJLy8gS2V5d29yZHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBkb2N1bWVudC4KCQkJJG91dCAuPSAnIC9LZXl3b3JkcyAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+a2V5d29yZHMsICRvaWQpOwoJCX0KCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5jcmVhdG9yKSkgewoJCQkvLyBJZiB0aGUgZG9jdW1lbnQgd2FzIGNvbnZlcnRlZCB0byBQREYgZnJvbSBhbm90aGVyIGZvcm1hdCwgdGhlIG5hbWUgb2YgdGhlIGNvbmZvcm1pbmcgcHJvZHVjdCB0aGF0IGNyZWF0ZWQgdGhlIG9yaWdpbmFsIGRvY3VtZW50IGZyb20gd2hpY2ggaXQgd2FzIGNvbnZlcnRlZC4KCQkJJG91dCAuPSAnIC9DcmVhdG9yICcuJHRoaXMtPl90ZXh0c3RyaW5nKCR0aGlzLT5jcmVhdG9yLCAkb2lkKTsKCQl9CgkJLy8gcmVzdG9yZSBwcmV2aW91cyBpc3VuaWNvZGUgdmFsdWUKCQkkdGhpcy0+aXN1bmljb2RlID0gJHByZXZfaXN1bmljb2RlOwoJCS8vIGRlZmF1bHQgcHJvZHVjZXIKCQkkb3V0IC49ICcgL1Byb2R1Y2VyICcuJHRoaXMtPl90ZXh0c3RyaW5nKFRDUERGX1NUQVRJQzo6Z2V0VENQREZQcm9kdWNlcigpLCAkb2lkKTsKCQkvLyBUaGUgZGF0ZSBhbmQgdGltZSB0aGUgZG9jdW1lbnQgd2FzIGNyZWF0ZWQsIGluIGh1bWFuLXJlYWRhYmxlIGZvcm0KCQkkb3V0IC49ICcgL0NyZWF0aW9uRGF0ZSAnLiR0aGlzLT5fZGF0ZXN0cmluZygwLCAkdGhpcy0+ZG9jX2NyZWF0aW9uX3RpbWVzdGFtcCk7CgkJLy8gVGhlIGRhdGUgYW5kIHRpbWUgdGhlIGRvY3VtZW50IHdhcyBtb3N0IHJlY2VudGx5IG1vZGlmaWVkLCBpbiBodW1hbi1yZWFkYWJsZSBmb3JtCgkJJG91dCAuPSAnIC9Nb2REYXRlICcuJHRoaXMtPl9kYXRlc3RyaW5nKDAsICR0aGlzLT5kb2NfbW9kaWZpY2F0aW9uX3RpbWVzdGFtcCk7CgkJLy8gQSBuYW1lIG9iamVjdCBpbmRpY2F0aW5nIHdoZXRoZXIgdGhlIGRvY3VtZW50IGhhcyBiZWVuIG1vZGlmaWVkIHRvIGluY2x1ZGUgdHJhcHBpbmcgaW5mb3JtYXRpb24KCQkkb3V0IC49ICcgL1RyYXBwZWQgL0ZhbHNlJzsKCQkkb3V0IC49ICcgPj4nOwoJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkkdGhpcy0+X291dCgkb3V0KTsKCQlyZXR1cm4gJG9pZDsKCX0KCgkvKioKCSAqIFNldCBhZGRpdGlvbmFsIFhNUCBkYXRhIHRvIGJlIGFkZGVkIG9uIHRoZSBkZWZhdWx0IFhNUCBkYXRhIGp1c3QgYmVmb3JlIHRoZSBlbmQgb2YgIng6eG1wbWV0YSIgdGFnLgoJICogSU1QT1JUQU5UOiBUaGlzIGRhdGEgaXMgYWRkZWQgYXMtaXMgd2l0aG91dCBjb250cm9scywgc28geW91IGhhdmUgdG8gdmFsaWRhdGUgeW91ciBkYXRhIGJlZm9yZSB1c2luZyB0aGlzIG1ldGhvZCEKCSAqIEBwYXJhbSAkeG1wIChzdHJpbmcpIEN1c3RvbSBYTVAgZGF0YS4KCSAqIEBzaW5jZSA1LjkuMTI4ICgyMDExLTEwLTA2KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0RXh0cmFYTVAoJHhtcCkgewoJCSR0aGlzLT5jdXN0b21feG1wID0gJHhtcDsKCX0KCgkvKioKCSAqIFB1dCBYTVAgZGF0YSBvYmplY3QgYW5kIHJldHVybiBJRC4KCSAqIEByZXR1cm4gKGludCkgVGhlIG9iamVjdCBJRC4KCSAqIEBzaW5jZSA1LjkuMTIxICgyMDExLTA5LTI4KQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dFhNUCgpIHsKCQkkb2lkID0gJHRoaXMtPl9uZXdvYmooKTsKCQkvLyBzdG9yZSBjdXJyZW50IGlzdW5pY29kZSB2YWx1ZQoJCSRwcmV2X2lzdW5pY29kZSA9ICR0aGlzLT5pc3VuaWNvZGU7CgkJJHRoaXMtPmlzdW5pY29kZSA9IHRydWU7CgkJJHByZXZfZW5jcnlwdGVkID0gJHRoaXMtPmVuY3J5cHRlZDsKCQkkdGhpcy0+ZW5jcnlwdGVkID0gZmFsc2U7CgkJLy8gc2V0IFhNUCBkYXRhCgkJJHhtcCA9ICc8P3hwYWNrZXQgYmVnaW49IicuVENQREZfRk9OVFM6OnVuaWNocigweGZlZmYsICR0aGlzLT5pc3VuaWNvZGUpLiciIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4nLiJcbiI7CgkJJHhtcCAuPSAnPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNC4yLjEtYzA0MyA1Mi4zNzI3MjgsIDIwMDkvMDEvMTgtMTU6MDg6MDQiPicuIlxuIjsKCQkkeG1wIC49ICJcdCIuJzxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHQiLic8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8ZGM6Zm9ybWF0PmFwcGxpY2F0aW9uL3BkZjwvZGM6Zm9ybWF0PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8ZGM6dGl0bGU+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0Ii4nPHJkZjpBbHQ+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpIHhtbDpsYW5nPSJ4LWRlZmF1bHQiPicuVENQREZfU1RBVElDOjpfZXNjYXBlWE1MKCR0aGlzLT50aXRsZSkuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdCIuJzwvcmRmOkFsdD4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPC9kYzp0aXRsZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPGRjOmNyZWF0b3I+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0Ii4nPHJkZjpTZXE+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpPicuVENQREZfU1RBVElDOjpfZXNjYXBlWE1MKCR0aGlzLT5hdXRob3IpLic8L3JkZjpsaT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHQiLic8L3JkZjpTZXE+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdCIuJzwvZGM6Y3JlYXRvcj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPGRjOmRlc2NyaXB0aW9uPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdCIuJzxyZGY6QWx0PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0Ii4nPHJkZjpsaSB4bWw6bGFuZz0ieC1kZWZhdWx0Ij4nLlRDUERGX1NUQVRJQzo6X2VzY2FwZVhNTCgkdGhpcy0+c3ViamVjdCkuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdCIuJzwvcmRmOkFsdD4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPC9kYzpkZXNjcmlwdGlvbj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPGRjOnN1YmplY3Q+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0Ii4nPHJkZjpCYWc+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpPicuVENQREZfU1RBVElDOjpfZXNjYXBlWE1MKCR0aGlzLT5rZXl3b3JkcykuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdCIuJzwvcmRmOkJhZz4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPC9kYzpzdWJqZWN0PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0Ii4nPC9yZGY6RGVzY3JpcHRpb24+Jy4iXG4iOwoJCS8vIGNvbnZlcnQgZG9jIGNyZWF0aW9uIGRhdGUgZm9ybWF0CgkJJGRjZGF0ZSA9IFRDUERGX1NUQVRJQzo6Z2V0Rm9ybWF0dGVkRGF0ZSgkdGhpcy0+ZG9jX2NyZWF0aW9uX3RpbWVzdGFtcCk7CgkJJGRvY2NyZWF0aW9uZGF0ZSA9IHN1YnN0cigkZGNkYXRlLCAwLCA0KS4nLScuc3Vic3RyKCRkY2RhdGUsIDQsIDIpLictJy5zdWJzdHIoJGRjZGF0ZSwgNiwgMik7CgkJJGRvY2NyZWF0aW9uZGF0ZSAuPSAnVCcuc3Vic3RyKCRkY2RhdGUsIDgsIDIpLic6Jy5zdWJzdHIoJGRjZGF0ZSwgMTAsIDIpLic6Jy5zdWJzdHIoJGRjZGF0ZSwgMTIsIDIpOwoJCSRkb2NjcmVhdGlvbmRhdGUgLj0gJysnLnN1YnN0cigkZGNkYXRlLCAxNSwgMikuJzonLnN1YnN0cigkZGNkYXRlLCAxOCwgMik7CgkJJGRvY2NyZWF0aW9uZGF0ZSA9IFRDUERGX1NUQVRJQzo6X2VzY2FwZVhNTCgkZG9jY3JlYXRpb25kYXRlKTsKCQkvLyBjb252ZXJ0IGRvYyBtb2RpZmljYXRpb24gZGF0ZSBmb3JtYXQKCQkkZG1kYXRlID0gVENQREZfU1RBVElDOjpnZXRGb3JtYXR0ZWREYXRlKCR0aGlzLT5kb2NfbW9kaWZpY2F0aW9uX3RpbWVzdGFtcCk7CgkJJGRvY21vZGRhdGUgPSBzdWJzdHIoJGRtZGF0ZSwgMCwgNCkuJy0nLnN1YnN0cigkZG1kYXRlLCA0LCAyKS4nLScuc3Vic3RyKCRkbWRhdGUsIDYsIDIpOwoJCSRkb2Ntb2RkYXRlIC49ICdUJy5zdWJzdHIoJGRtZGF0ZSwgOCwgMikuJzonLnN1YnN0cigkZG1kYXRlLCAxMCwgMikuJzonLnN1YnN0cigkZG1kYXRlLCAxMiwgMik7CgkJJGRvY21vZGRhdGUgLj0gJysnLnN1YnN0cigkZG1kYXRlLCAxNSwgMikuJzonLnN1YnN0cigkZG1kYXRlLCAxOCwgMik7CgkJJGRvY21vZGRhdGUgPSBUQ1BERl9TVEFUSUM6Ol9lc2NhcGVYTUwoJGRvY21vZGRhdGUpOwoJCSR4bXAgLj0gIlx0XHQiLic8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczp4bXA9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC8iPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8eG1wOkNyZWF0ZURhdGU+Jy4kZG9jY3JlYXRpb25kYXRlLic8L3htcDpDcmVhdGVEYXRlPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8eG1wOkNyZWF0b3JUb29sPicuJHRoaXMtPmNyZWF0b3IuJzwveG1wOkNyZWF0b3JUb29sPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8eG1wOk1vZGlmeURhdGU+Jy4kZG9jbW9kZGF0ZS4nPC94bXA6TW9kaWZ5RGF0ZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPHhtcDpNZXRhZGF0YURhdGU+Jy4kZG9jY3JlYXRpb25kYXRlLic8L3htcDpNZXRhZGF0YURhdGU+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHQiLic8L3JkZjpEZXNjcmlwdGlvbj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdCIuJzxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnBkZj0iaHR0cDovL25zLmFkb2JlLmNvbS9wZGYvMS4zLyI+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdCIuJzxwZGY6S2V5d29yZHM+Jy5UQ1BERl9TVEFUSUM6Ol9lc2NhcGVYTUwoJHRoaXMtPmtleXdvcmRzKS4nPC9wZGY6S2V5d29yZHM+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdCIuJzxwZGY6UHJvZHVjZXI+Jy5UQ1BERl9TVEFUSUM6Ol9lc2NhcGVYTUwoVENQREZfU1RBVElDOjpnZXRUQ1BERlByb2R1Y2VyKCkpLic8L3BkZjpQcm9kdWNlcj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdCIuJzwvcmRmOkRlc2NyaXB0aW9uPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0Ii4nPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iPicuIlxuIjsKCQkkdXVpZCA9ICd1dWlkOicuc3Vic3RyKCR0aGlzLT5maWxlX2lkLCAwLCA4KS4nLScuc3Vic3RyKCR0aGlzLT5maWxlX2lkLCA4LCA0KS4nLScuc3Vic3RyKCR0aGlzLT5maWxlX2lkLCAxMiwgNCkuJy0nLnN1YnN0cigkdGhpcy0+ZmlsZV9pZCwgMTYsIDQpLictJy5zdWJzdHIoJHRoaXMtPmZpbGVfaWQsIDIwLCAxMik7CgkJJHhtcCAuPSAiXHRcdFx0Ii4nPHhtcE1NOkRvY3VtZW50SUQ+Jy4kdXVpZC4nPC94bXBNTTpEb2N1bWVudElEPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8eG1wTU06SW5zdGFuY2VJRD4nLiR1dWlkLic8L3htcE1NOkluc3RhbmNlSUQ+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHQiLic8L3JkZjpEZXNjcmlwdGlvbj4nLiJcbiI7CgkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJJHhtcCAuPSAiXHRcdCIuJzxyZGY6RGVzY3JpcHRpb24gcmRmOmFib3V0PSIiIHhtbG5zOnBkZmFpZD0iaHR0cDovL3d3dy5haWltLm9yZy9wZGZhL25zL2lkLyI+Jy4iXG4iOwoJCQkkeG1wIC49ICJcdFx0XHQiLic8cGRmYWlkOnBhcnQ+MTwvcGRmYWlkOnBhcnQ+Jy4iXG4iOwoJCQkkeG1wIC49ICJcdFx0XHQiLic8cGRmYWlkOmNvbmZvcm1hbmNlPkI8L3BkZmFpZDpjb25mb3JtYW5jZT4nLiJcbiI7CgkJCSR4bXAgLj0gIlx0XHQiLic8L3JkZjpEZXNjcmlwdGlvbj4nLiJcbiI7CgkJfQoJCS8vIFhNUCBleHRlbnNpb24gc2NoZW1hcwoJCSR4bXAgLj0gIlx0XHQiLic8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIiB4bWxuczpwZGZhRXh0ZW5zaW9uPSJodHRwOi8vd3d3LmFpaW0ub3JnL3BkZmEvbnMvZXh0ZW5zaW9uLyIgeG1sbnM6cGRmYVNjaGVtYT0iaHR0cDovL3d3dy5haWltLm9yZy9wZGZhL25zL3NjaGVtYSMiIHhtbG5zOnBkZmFQcm9wZXJ0eT0iaHR0cDovL3d3dy5haWltLm9yZy9wZGZhL25zL3Byb3BlcnR5IyI+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdCIuJzxwZGZhRXh0ZW5zaW9uOnNjaGVtYXM+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0Ii4nPHJkZjpCYWc+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPmh0dHA6Ly9ucy5hZG9iZS5jb20vcGRmLzEuMy88L3BkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHQiLic8cGRmYVNjaGVtYTpwcmVmaXg+cGRmPC9wZGZhU2NoZW1hOnByZWZpeD4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6c2NoZW1hPkFkb2JlIFBERiBTY2hlbWE8L3BkZmFTY2hlbWE6c2NoZW1hPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0Ii4nPC9yZGY6bGk+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPmh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS88L3BkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHQiLic8cGRmYVNjaGVtYTpwcmVmaXg+eG1wTU08L3BkZmFTY2hlbWE6cHJlZml4PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHQiLic8cGRmYVNjaGVtYTpzY2hlbWE+WE1QIE1lZGlhIE1hbmFnZW1lbnQgU2NoZW1hPC9wZGZhU2NoZW1hOnNjaGVtYT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6cHJvcGVydHk+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0Ii4nPHJkZjpTZXE+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHQiLic8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTpjYXRlZ29yeT5pbnRlcm5hbDwvcGRmYVByb3BlcnR5OmNhdGVnb3J5PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdFx0XHQiLic8cGRmYVByb3BlcnR5OmRlc2NyaXB0aW9uPlVVSUQgYmFzZWQgaWRlbnRpZmllciBmb3Igc3BlY2lmaWMgaW5jYXJuYXRpb24gb2YgYSBkb2N1bWVudDwvcGRmYVByb3BlcnR5OmRlc2NyaXB0aW9uPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdFx0XHQiLic8cGRmYVByb3BlcnR5Om5hbWU+SW5zdGFuY2VJRDwvcGRmYVByb3BlcnR5Om5hbWU+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6dmFsdWVUeXBlPlVSSTwvcGRmYVByb3BlcnR5OnZhbHVlVHlwZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdCIuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdCIuJzwvcmRmOlNlcT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPC9wZGZhU2NoZW1hOnByb3BlcnR5PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0Ii4nPC9yZGY6bGk+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHQiLic8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPmh0dHA6Ly93d3cuYWlpbS5vcmcvcGRmYS9ucy9pZC88L3BkZmFTY2hlbWE6bmFtZXNwYWNlVVJJPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHQiLic8cGRmYVNjaGVtYTpwcmVmaXg+cGRmYWlkPC9wZGZhU2NoZW1hOnByZWZpeD4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPHBkZmFTY2hlbWE6c2NoZW1hPlBERi9BIElEIFNjaGVtYTwvcGRmYVNjaGVtYTpzY2hlbWE+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdCIuJzxwZGZhU2NoZW1hOnByb3BlcnR5PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdCIuJzxyZGY6U2VxPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdFx0Ii4nPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6Y2F0ZWdvcnk+aW50ZXJuYWw8L3BkZmFQcm9wZXJ0eTpjYXRlZ29yeT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj5QYXJ0IG9mIFBERi9BIHN0YW5kYXJkPC9wZGZhUHJvcGVydHk6ZGVzY3JpcHRpb24+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6bmFtZT5wYXJ0PC9wZGZhUHJvcGVydHk6bmFtZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTp2YWx1ZVR5cGU+SW50ZWdlcjwvcGRmYVByb3BlcnR5OnZhbHVlVHlwZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdCIuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdFx0Ii4nPHJkZjpsaSByZGY6cGFyc2VUeXBlPSJSZXNvdXJjZSI+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6Y2F0ZWdvcnk+aW50ZXJuYWw8L3BkZmFQcm9wZXJ0eTpjYXRlZ29yeT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj5BbWVuZG1lbnQgb2YgUERGL0Egc3RhbmRhcmQ8L3BkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTpuYW1lPmFtZDwvcGRmYVByb3BlcnR5Om5hbWU+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6dmFsdWVUeXBlPlRleHQ8L3BkZmFQcm9wZXJ0eTp2YWx1ZVR5cGU+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHQiLic8L3JkZjpsaT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdCIuJzxyZGY6bGkgcmRmOnBhcnNlVHlwZT0iUmVzb3VyY2UiPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdFx0XHQiLic8cGRmYVByb3BlcnR5OmNhdGVnb3J5PmludGVybmFsPC9wZGZhUHJvcGVydHk6Y2F0ZWdvcnk+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0XHRcdFx0XHRcdCIuJzxwZGZhUHJvcGVydHk6ZGVzY3JpcHRpb24+Q29uZm9ybWFuY2UgbGV2ZWwgb2YgUERGL0Egc3RhbmRhcmQ8L3BkZmFQcm9wZXJ0eTpkZXNjcmlwdGlvbj4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTpuYW1lPmNvbmZvcm1hbmNlPC9wZGZhUHJvcGVydHk6bmFtZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdFx0Ii4nPHBkZmFQcm9wZXJ0eTp2YWx1ZVR5cGU+VGV4dDwvcGRmYVByb3BlcnR5OnZhbHVlVHlwZT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0XHRcdCIuJzwvcmRmOmxpPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0XHRcdCIuJzwvcmRmOlNlcT4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdFx0XHRcdFx0Ii4nPC9wZGZhU2NoZW1hOnByb3BlcnR5PicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHRcdFx0Ii4nPC9yZGY6bGk+Jy4iXG4iOwoJCSR4bXAgLj0gIlx0XHRcdFx0Ii4nPC9yZGY6QmFnPicuIlxuIjsKCQkkeG1wIC49ICJcdFx0XHQiLic8L3BkZmFFeHRlbnNpb246c2NoZW1hcz4nLiJcbiI7CgkJJHhtcCAuPSAiXHRcdCIuJzwvcmRmOkRlc2NyaXB0aW9uPicuIlxuIjsKCQkkeG1wIC49ICJcdCIuJzwvcmRmOlJERj4nLiJcbiI7CgkJJHhtcCAuPSAkdGhpcy0+Y3VzdG9tX3htcDsKCQkkeG1wIC49ICc8L3g6eG1wbWV0YT4nLiJcbiI7CgkJJHhtcCAuPSAnPD94cGFja2V0IGVuZD0idyI/Pic7CgkJJG91dCA9ICc8PCAvVHlwZSAvTWV0YWRhdGEgL1N1YnR5cGUgL1hNTCAvTGVuZ3RoICcuc3RybGVuKCR4bXApLicgPj4gc3RyZWFtJy4iXG4iLiR4bXAuIlxuIi4nZW5kc3RyZWFtJy4iXG4iLidlbmRvYmonOwoJCS8vIHJlc3RvcmUgcHJldmlvdXMgaXN1bmljb2RlIHZhbHVlCgkJJHRoaXMtPmlzdW5pY29kZSA9ICRwcmV2X2lzdW5pY29kZTsKCQkkdGhpcy0+ZW5jcnlwdGVkID0gJHByZXZfZW5jcnlwdGVkOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCXJldHVybiAkb2lkOwoJfQoKCS8qKgoJICogT3V0cHV0IENhdGFsb2cuCgkgKiBAcmV0dXJuIGludCBvYmplY3QgaWQKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRjYXRhbG9nKCkgewoJCS8vIHB1dCBYTVAKCQkkeG1wb2JqID0gJHRoaXMtPl9wdXRYTVAoKTsKCQkvLyBpZiByZXF1aXJlZCwgYWRkIHN0YW5kYXJkIHNSR0JfSUVDNjE5NjYtMi4xIGJsYWNrc2NhbGVkIElDQyBjb2xvdXIgcHJvZmlsZQoJCWlmICgkdGhpcy0+cGRmYV9tb2RlIE9SICR0aGlzLT5mb3JjZV9zcmdiKSB7CgkJCSRpY2NvYmogPSAkdGhpcy0+X25ld29iaigpOwoJCQkkaWNjID0gZmlsZV9nZXRfY29udGVudHMoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL3NSR0IuaWNjJyk7CgkJCSRmaWx0ZXIgPSAnJzsKCQkJaWYgKCR0aGlzLT5jb21wcmVzcykgewoJCQkJJGZpbHRlciA9ICcgL0ZpbHRlciAvRmxhdGVEZWNvZGUnOwoJCQkJJGljYyA9IGd6Y29tcHJlc3MoJGljYyk7CgkJCX0KCQkJJGljYyA9ICR0aGlzLT5fZ2V0cmF3c3RyZWFtKCRpY2MpOwoJCQkkdGhpcy0+X291dCgnPDwvTiAzICcuJGZpbHRlci4nL0xlbmd0aCAnLnN0cmxlbigkaWNjKS4nPj4gc3RyZWFtJy4iXG4iLiRpY2MuIlxuIi4nZW5kc3RyZWFtJy4iXG4iLidlbmRvYmonKTsKCQl9CgkJLy8gc3RhcnQgY2F0YWxvZwoJCSRvaWQgPSAkdGhpcy0+X25ld29iaigpOwoJCSRvdXQgPSAnPDwgL1R5cGUgL0NhdGFsb2cnOwoJCSRvdXQgLj0gJyAvVmVyc2lvbiAvJy4kdGhpcy0+UERGVmVyc2lvbjsKCQkvLyRvdXQgLj0gJyAvRXh0ZW5zaW9ucyA8PD4+JzsKCQkkb3V0IC49ICcgL1BhZ2VzIDEgMCBSJzsKCQkvLyRvdXQgLj0gJyAvUGFnZUxhYmVscyAnIC8vLi4uOwoJCSRvdXQgLj0gJyAvTmFtZXMgPDwnOwoJCWlmICgoISR0aGlzLT5wZGZhX21vZGUpIEFORCAhZW1wdHkoJHRoaXMtPm5fanMpKSB7CgkJCSRvdXQgLj0gJyAvSmF2YVNjcmlwdCAnLiR0aGlzLT5uX2pzOwoJCX0KCQlpZiAoIWVtcHR5KCR0aGlzLT5lZm5hbWVzKSkgewoJCQkkb3V0IC49ICcgL0VtYmVkZGVkRmlsZXMgPDwvTmFtZXMgWyc7CgkJCWZvcmVhY2ggKCR0aGlzLT5lZm5hbWVzIEFTICRmbiA9PiAkZnJlZikgewoJCQkJJG91dCAuPSAnICcuJHRoaXMtPl9kYXRhc3RyaW5nKCRmbikuJyAnLiRmcmVmOwoJCQl9CgkJCSRvdXQgLj0gJyBdPj4nOwoJCX0KCQkkb3V0IC49ICcgPj4nOwoJCWlmICghZW1wdHkoJHRoaXMtPmRlc3RzKSkgewoJCQkkb3V0IC49ICcgL0Rlc3RzICcuKCR0aGlzLT5uX2Rlc3RzKS4nIDAgUic7CgkJfQoJCSRvdXQgLj0gJHRoaXMtPl9wdXR2aWV3ZXJwcmVmZXJlbmNlcygpOwoJCWlmIChpc3NldCgkdGhpcy0+TGF5b3V0TW9kZSkgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPkxheW91dE1vZGUpKSkgewoJCQkkb3V0IC49ICcgL1BhZ2VMYXlvdXQgLycuJHRoaXMtPkxheW91dE1vZGU7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+UGFnZU1vZGUpIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5QYWdlTW9kZSkpKSB7CgkJCSRvdXQgLj0gJyAvUGFnZU1vZGUgLycuJHRoaXMtPlBhZ2VNb2RlOwoJCX0KCQlpZiAoY291bnQoJHRoaXMtPm91dGxpbmVzKSA+IDApIHsKCQkJJG91dCAuPSAnIC9PdXRsaW5lcyAnLiR0aGlzLT5PdXRsaW5lUm9vdC4nIDAgUic7CgkJCSRvdXQgLj0gJyAvUGFnZU1vZGUgL1VzZU91dGxpbmVzJzsKCQl9CgkJLy8kb3V0IC49ICcgL1RocmVhZHMgW10nOwoJCWlmICgkdGhpcy0+Wm9vbU1vZGUgPT0gJ2Z1bGxwYWdlJykgewoJCQkkb3V0IC49ICcgL09wZW5BY3Rpb24gWycuJHRoaXMtPnBhZ2Vfb2JqX2lkWzFdLicgMCBSIC9GaXRdJzsKCQl9IGVsc2VpZiAoJHRoaXMtPlpvb21Nb2RlID09ICdmdWxsd2lkdGgnKSB7CgkJCSRvdXQgLj0gJyAvT3BlbkFjdGlvbiBbJy4kdGhpcy0+cGFnZV9vYmpfaWRbMV0uJyAwIFIgL0ZpdEggbnVsbF0nOwoJCX0gZWxzZWlmICgkdGhpcy0+Wm9vbU1vZGUgPT0gJ3JlYWwnKSB7CgkJCSRvdXQgLj0gJyAvT3BlbkFjdGlvbiBbJy4kdGhpcy0+cGFnZV9vYmpfaWRbMV0uJyAwIFIgL1hZWiBudWxsIG51bGwgMV0nOwoJCX0gZWxzZWlmICghaXNfc3RyaW5nKCR0aGlzLT5ab29tTW9kZSkpIHsKCQkJJG91dCAuPSBzcHJpbnRmKCcgL09wZW5BY3Rpb24gWycuJHRoaXMtPnBhZ2Vfb2JqX2lkWzFdLicgMCBSIC9YWVogbnVsbCBudWxsICVGXScsICgkdGhpcy0+Wm9vbU1vZGUgLyAxMDApKTsKCQl9CgkJLy8kb3V0IC49ICcgL0FBIDw8Pj4nOwoJCS8vJG91dCAuPSAnIC9VUkkgPDw+Pic7CgkJJG91dCAuPSAnIC9NZXRhZGF0YSAnLiR4bXBvYmouJyAwIFInOwoJCS8vJG91dCAuPSAnIC9TdHJ1Y3RUcmVlUm9vdCA8PD4+JzsKCQkvLyRvdXQgLj0gJyAvTWFya0luZm8gPDw+Pic7CgkJaWYgKGlzc2V0KCR0aGlzLT5sWydhX21ldGFfbGFuZ3VhZ2UnXSkpIHsKCQkJJG91dCAuPSAnIC9MYW5nICcuJHRoaXMtPl90ZXh0c3RyaW5nKCR0aGlzLT5sWydhX21ldGFfbGFuZ3VhZ2UnXSwgJG9pZCk7CgkJfQoJCS8vJG91dCAuPSAnIC9TcGlkZXJJbmZvIDw8Pj4nOwoJCS8vIHNldCBPdXRwdXRJbnRlbnQgdG8gc1JHQiBJRUM2MTk2Ni0yLjEgaWYgcmVxdWlyZWQKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSBPUiAkdGhpcy0+Zm9yY2Vfc3JnYikgewoJCQkkb3V0IC49ICcgL091dHB1dEludGVudHMgWzw8JzsKCQkJJG91dCAuPSAnIC9UeXBlIC9PdXRwdXRJbnRlbnQnOwoJCQkkb3V0IC49ICcgL1MgL0dUU19QREZBMSc7CgkJCSRvdXQgLj0gJyAvT3V0cHV0Q29uZGl0aW9uICcuJHRoaXMtPl90ZXh0c3RyaW5nKCdzUkdCIElFQzYxOTY2LTIuMScsICRvaWQpOwoJCQkkb3V0IC49ICcgL091dHB1dENvbmRpdGlvbklkZW50aWZpZXIgJy4kdGhpcy0+X3RleHRzdHJpbmcoJ3NSR0IgSUVDNjE5NjYtMi4xJywgJG9pZCk7CgkJCSRvdXQgLj0gJyAvUmVnaXN0cnlOYW1lICcuJHRoaXMtPl90ZXh0c3RyaW5nKCdodHRwOi8vd3d3LmNvbG9yLm9yZycsICRvaWQpOwoJCQkkb3V0IC49ICcgL0luZm8gJy4kdGhpcy0+X3RleHRzdHJpbmcoJ3NSR0IgSUVDNjE5NjYtMi4xJywgJG9pZCk7CgkJCSRvdXQgLj0gJyAvRGVzdE91dHB1dFByb2ZpbGUgJy4kaWNjb2JqLicgMCBSJzsKCQkJJG91dCAuPSAnID4+XSc7CgkJfQoJCS8vJG91dCAuPSAnIC9QaWVjZUluZm8gPDw+Pic7CgkJaWYgKCFlbXB0eSgkdGhpcy0+cGRmbGF5ZXJzKSkgewoJCQkkbHlyb2JqcyA9ICcnOwoJCQkkbHlyb2Jqc19wcmludCA9ICcnOwoJCQkkbHlyb2Jqc192aWV3ID0gJyc7CgkJCSRseXJvYmpzX2xvY2sgPSAnJzsKCQkJZm9yZWFjaCAoJHRoaXMtPnBkZmxheWVycyBhcyAkbGF5ZXIpIHsKCQkJCSRsYXllcl9vYmpfcmVmID0gJyAnLiRsYXllclsnb2JqaWQnXS4nIDAgUic7CgkJCQkkbHlyb2JqcyAuPSAkbGF5ZXJfb2JqX3JlZjsKCQkJCWlmICgkbGF5ZXJbJ3ByaW50J10pIHsKCQkJCQkkbHlyb2Jqc19wcmludCAuPSAkbGF5ZXJfb2JqX3JlZjsKCQkJCX0KCQkJCWlmICgkbGF5ZXJbJ3ZpZXcnXSkgewoJCQkJCSRseXJvYmpzX3ZpZXcgLj0gJGxheWVyX29ial9yZWY7CgkJCQl9CgkJCQlpZiAoJGxheWVyWydsb2NrJ10pIHsKCQkJCQkkbHlyb2Jqc19sb2NrIC49ICRsYXllcl9vYmpfcmVmOwoJCQkJfQoJCQl9CgkJCSRvdXQgLj0gJyAvT0NQcm9wZXJ0aWVzIDw8IC9PQ0dzIFsnLiRseXJvYmpzLiddJzsKCQkJJG91dCAuPSAnIC9EIDw8JzsKCQkJJG91dCAuPSAnIC9OYW1lICcuJHRoaXMtPl90ZXh0c3RyaW5nKCdMYXllcnMnLCAkb2lkKTsKCQkJJG91dCAuPSAnIC9DcmVhdG9yICcuJHRoaXMtPl90ZXh0c3RyaW5nKCdUQ1BERicsICRvaWQpOwoJCQkkb3V0IC49ICcgL0Jhc2VTdGF0ZSAvT04nOwoJCQkkb3V0IC49ICcgL09OIFsnLiRseXJvYmpzX3ByaW50LiddJzsKCQkJJG91dCAuPSAnIC9PRkYgWycuJGx5cm9ianNfdmlldy4nXSc7CgkJCSRvdXQgLj0gJyAvTG9ja2VkIFsnLiRseXJvYmpzX2xvY2suJ10nOwoJCQkkb3V0IC49ICcgL0ludGVudCAvVmlldyc7CgkJCSRvdXQgLj0gJyAvQVMgWyc7CgkJCSRvdXQgLj0gJyA8PCAvRXZlbnQgL1ByaW50IC9PQ0dzIFsnLiRseXJvYmpzLiddIC9DYXRlZ29yeSBbL1ByaW50XSA+Pic7CgkJCSRvdXQgLj0gJyA8PCAvRXZlbnQgL1ZpZXcgL09DR3MgWycuJGx5cm9ianMuJ10gL0NhdGVnb3J5IFsvVmlld10gPj4nOwoJCQkkb3V0IC49ICcgXSc7CgkJCSRvdXQgLj0gJyAvT3JkZXIgWycuJGx5cm9ianMuJ10nOwoJCQkkb3V0IC49ICcgL0xpc3RNb2RlIC9BbGxQYWdlcyc7CgkJCS8vJG91dCAuPSAnIC9SQkdyb3VwcyBbJy4uJ10nOwoJCQkvLyRvdXQgLj0gJyAvTG9ja2VkIFsnLi4nXSc7CgkJCSRvdXQgLj0gJyA+Pic7CgkJCSRvdXQgLj0gJyA+Pic7CgkJfQoJCS8vIEFjcm9Gb3JtCgkJaWYgKCFlbXB0eSgkdGhpcy0+Zm9ybV9vYmpfaWQpCgkJCU9SICgkdGhpcy0+c2lnbiBBTkQgaXNzZXQoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSkpCgkJCU9SICFlbXB0eSgkdGhpcy0+ZW1wdHlfc2lnbmF0dXJlX2FwcGVhcmFuY2UpKSB7CgkJCSRvdXQgLj0gJyAvQWNyb0Zvcm0gPDwnOwoJCQkkb2JqcmVmcyA9ICcnOwoJCQlpZiAoJHRoaXMtPnNpZ24gQU5EIGlzc2V0KCR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ10pKSB7CgkJCQkvLyBzZXQgcmVmZXJlbmNlIGZvciBzaWduYXR1cmUgb2JqZWN0CgkJCQkkb2JqcmVmcyAuPSAkdGhpcy0+c2lnX29ial9pZC4nIDAgUic7CgkJCX0KCQkJaWYgKCFlbXB0eSgkdGhpcy0+ZW1wdHlfc2lnbmF0dXJlX2FwcGVhcmFuY2UpKSB7CgkJCQlmb3JlYWNoICgkdGhpcy0+ZW1wdHlfc2lnbmF0dXJlX2FwcGVhcmFuY2UgYXMgJGVzYSkgewoJCQkJCS8vIHNldCByZWZlcmVuY2UgZm9yIGVtcHR5IHNpZ25hdHVyZSBvYmplY3RzCgkJCQkJJG9ianJlZnMgLj0gJyAnLiRlc2FbJ29iamlkJ10uJyAwIFInOwoJCQkJfQoJCQl9CgkJCWlmICghZW1wdHkoJHRoaXMtPmZvcm1fb2JqX2lkKSkgewoJCQkJZm9yZWFjaCgkdGhpcy0+Zm9ybV9vYmpfaWQgYXMgJG9iamlkKSB7CgkJCQkJJG9ianJlZnMgLj0gJyAnLiRvYmppZC4nIDAgUic7CgkJCQl9CgkJCX0KCQkJJG91dCAuPSAnIC9GaWVsZHMgWycuJG9ianJlZnMuJ10nOwoJCQkvLyBJdCdzIGJldHRlciB0byB0dXJuIG9mZiB0aGlzIHZhbHVlIGFuZCBzZXQgdGhlIGFwcGVhcmFuY2Ugc3RyZWFtIGZvciBlYWNoIGFubm90YXRpb24gKC9BUCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggc2lnbmF0dXJlIGZpZWxkcy4KCQkJJG91dCAuPSAnIC9OZWVkQXBwZWFyYW5jZXMgZmFsc2UnOwoJCQlpZiAoJHRoaXMtPnNpZ24gQU5EIGlzc2V0KCR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ10pKSB7CgkJCQlpZiAoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSA+IDApIHsKCQkJCQkkb3V0IC49ICcgL1NpZ0ZsYWdzIDMnOwoJCQkJfSBlbHNlIHsKCQkJCQkkb3V0IC49ICcgL1NpZ0ZsYWdzIDEnOwoJCQkJfQoJCQl9CgkJCS8vJG91dCAuPSAnIC9DTyAnOwoJCQlpZiAoaXNzZXQoJHRoaXMtPmFubm90YXRpb25fZm9udHMpIEFORCAhZW1wdHkoJHRoaXMtPmFubm90YXRpb25fZm9udHMpKSB7CgkJCQkkb3V0IC49ICcgL0RSIDw8JzsKCQkJCSRvdXQgLj0gJyAvRm9udCA8PCc7CgkJCQlmb3JlYWNoICgkdGhpcy0+YW5ub3RhdGlvbl9mb250cyBhcyAkZm9udGtleSA9PiAkZm9udGlkKSB7CgkJCQkJJG91dCAuPSAnIC9GJy4kZm9udGlkLicgJy4kdGhpcy0+Zm9udF9vYmpfaWRzWyRmb250a2V5XS4nIDAgUic7CgkJCQl9CgkJCQkkb3V0IC49ICcgPj4gPj4nOwoJCQl9CgkJCSRmb250ID0gJHRoaXMtPmdldEZvbnRCdWZmZXIoJ2hlbHZldGljYScpOwoJCQkkb3V0IC49ICcgL0RBICgvRicuJGZvbnRbJ2knXS4nIDAgVGYgMCBnKSc7CgkJCSRvdXQgLj0gJyAvUSAnLigoJHRoaXMtPnJ0bCk/JzInOicwJyk7CgkJCS8vJG91dCAuPSAnIC9YRkEgJzsKCQkJJG91dCAuPSAnID4+JzsKCQkJLy8gc2lnbmF0dXJlcwoJCQlpZiAoJHRoaXMtPnNpZ24gQU5EIGlzc2V0KCR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ10pKSB7CgkJCQlpZiAoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSA+IDApIHsKCQkJCQkkb3V0IC49ICcgL1Blcm1zIDw8IC9Eb2NNRFAgJy4oJHRoaXMtPnNpZ19vYmpfaWQgKyAxKS4nIDAgUiA+Pic7CgkJCQl9IGVsc2UgewoJCQkJCSRvdXQgLj0gJyAvUGVybXMgPDwgL1VSMyAnLigkdGhpcy0+c2lnX29ial9pZCArIDEpLicgMCBSID4+JzsKCQkJCX0KCQkJfQoJCX0KCQkvLyRvdXQgLj0gJyAvTGVnYWwgPDw+Pic7CgkJLy8kb3V0IC49ICcgL1JlcXVpcmVtZW50cyBbXSc7CgkJLy8kb3V0IC49ICcgL0NvbGxlY3Rpb24gPDw+Pic7CgkJLy8kb3V0IC49ICcgL05lZWRzUmVuZGVyaW5nIHRydWUnOwoJCSRvdXQgLj0gJyA+Pic7CgkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCXJldHVybiAkb2lkOwoJfQoKCS8qKgoJICogT3V0cHV0IHZpZXdlciBwcmVmZXJlbmNlcy4KCSAqIEByZXR1cm4gc3RyaW5nIGZvciB2aWV3ZXIgcHJlZmVyZW5jZXMKCSAqIEBhdXRob3IgTmljb2xhIGFzdW5pCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0wOSkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXR2aWV3ZXJwcmVmZXJlbmNlcygpIHsKCQkkdnAgPSAkdGhpcy0+dmlld2VyX3ByZWZlcmVuY2VzOwoJCSRvdXQgPSAnIC9WaWV3ZXJQcmVmZXJlbmNlcyA8PCc7CgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJJG91dCAuPSAnIC9EaXJlY3Rpb24gL1IyTCc7CgkJfSBlbHNlIHsKCQkJJG91dCAuPSAnIC9EaXJlY3Rpb24gL0wyUic7CgkJfQoJCWlmIChpc3NldCgkdnBbJ0hpZGVUb29sYmFyJ10pIEFORCAoJHZwWydIaWRlVG9vbGJhciddKSkgewoJCQkkb3V0IC49ICcgL0hpZGVUb29sYmFyIHRydWUnOwoJCX0KCQlpZiAoaXNzZXQoJHZwWydIaWRlTWVudWJhciddKSBBTkQgKCR2cFsnSGlkZU1lbnViYXInXSkpIHsKCQkJJG91dCAuPSAnIC9IaWRlTWVudWJhciB0cnVlJzsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnSGlkZVdpbmRvd1VJJ10pIEFORCAoJHZwWydIaWRlV2luZG93VUknXSkpIHsKCQkJJG91dCAuPSAnIC9IaWRlV2luZG93VUkgdHJ1ZSc7CgkJfQoJCWlmIChpc3NldCgkdnBbJ0ZpdFdpbmRvdyddKSBBTkQgKCR2cFsnRml0V2luZG93J10pKSB7CgkJCSRvdXQgLj0gJyAvRml0V2luZG93IHRydWUnOwoJCX0KCQlpZiAoaXNzZXQoJHZwWydDZW50ZXJXaW5kb3cnXSkgQU5EICgkdnBbJ0NlbnRlcldpbmRvdyddKSkgewoJCQkkb3V0IC49ICcgL0NlbnRlcldpbmRvdyB0cnVlJzsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnRGlzcGxheURvY1RpdGxlJ10pIEFORCAoJHZwWydEaXNwbGF5RG9jVGl0bGUnXSkpIHsKCQkJJG91dCAuPSAnIC9EaXNwbGF5RG9jVGl0bGUgdHJ1ZSc7CgkJfQoJCWlmIChpc3NldCgkdnBbJ05vbkZ1bGxTY3JlZW5QYWdlTW9kZSddKSkgewoJCQkkb3V0IC49ICcgL05vbkZ1bGxTY3JlZW5QYWdlTW9kZSAvJy4kdnBbJ05vbkZ1bGxTY3JlZW5QYWdlTW9kZSddOwoJCX0KCQlpZiAoaXNzZXQoJHZwWydWaWV3QXJlYSddKSkgewoJCQkkb3V0IC49ICcgL1ZpZXdBcmVhIC8nLiR2cFsnVmlld0FyZWEnXTsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnVmlld0NsaXAnXSkpIHsKCQkJJG91dCAuPSAnIC9WaWV3Q2xpcCAvJy4kdnBbJ1ZpZXdDbGlwJ107CgkJfQoJCWlmIChpc3NldCgkdnBbJ1ByaW50QXJlYSddKSkgewoJCQkkb3V0IC49ICcgL1ByaW50QXJlYSAvJy4kdnBbJ1ByaW50QXJlYSddOwoJCX0KCQlpZiAoaXNzZXQoJHZwWydQcmludENsaXAnXSkpIHsKCQkJJG91dCAuPSAnIC9QcmludENsaXAgLycuJHZwWydQcmludENsaXAnXTsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnUHJpbnRTY2FsaW5nJ10pKSB7CgkJCSRvdXQgLj0gJyAvUHJpbnRTY2FsaW5nIC8nLiR2cFsnUHJpbnRTY2FsaW5nJ107CgkJfQoJCWlmIChpc3NldCgkdnBbJ0R1cGxleCddKSBBTkQgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdnBbJ0R1cGxleCddKSkpIHsKCQkJJG91dCAuPSAnIC9EdXBsZXggLycuJHZwWydEdXBsZXgnXTsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnUGlja1RyYXlCeVBERlNpemUnXSkpIHsKCQkJaWYgKCR2cFsnUGlja1RyYXlCeVBERlNpemUnXSkgewoJCQkJJG91dCAuPSAnIC9QaWNrVHJheUJ5UERGU2l6ZSB0cnVlJzsKCQkJfSBlbHNlIHsKCQkJCSRvdXQgLj0gJyAvUGlja1RyYXlCeVBERlNpemUgZmFsc2UnOwoJCQl9CgkJfQoJCWlmIChpc3NldCgkdnBbJ1ByaW50UGFnZVJhbmdlJ10pKSB7CgkJCSRQcmludFBhZ2VSYW5nZU51bSA9ICcnOwoJCQlmb3JlYWNoICgkdnBbJ1ByaW50UGFnZVJhbmdlJ10gYXMgJGsgPT4gJHYpIHsKCQkJCSRQcmludFBhZ2VSYW5nZU51bSAuPSAnICcuKCR2IC0gMSkuJyc7CgkJCX0KCQkJJG91dCAuPSAnIC9QcmludFBhZ2VSYW5nZSBbJy5zdWJzdHIoJFByaW50UGFnZVJhbmdlTnVtLDEpLiddJzsKCQl9CgkJaWYgKGlzc2V0KCR2cFsnTnVtQ29waWVzJ10pKSB7CgkJCSRvdXQgLj0gJyAvTnVtQ29waWVzICcuaW50dmFsKCR2cFsnTnVtQ29waWVzJ10pOwoJCX0KCQkkb3V0IC49ICcgPj4nOwoJCXJldHVybiAkb3V0OwoJfQoKCS8qKgoJICogT3V0cHV0IFBERiBGaWxlIEhlYWRlciAoNy41LjIpLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dGhlYWRlcigpIHsKCQkkdGhpcy0+X291dCgnJVBERi0nLiR0aGlzLT5QREZWZXJzaW9uKTsKCQkkdGhpcy0+X291dCgnJScuY2hyKDB4ZTIpLmNocigweGUzKS5jaHIoMHhjZikuY2hyKDB4ZDMpKTsKCX0KCgkvKioKCSAqIE91dHB1dCBlbmQgb2YgZG9jdW1lbnQgKEVPRikuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZW5kZG9jKCkgewoJCWlmIChpc3NldCgkdGhpcy0+Q3VycmVudEZvbnRbJ2ZvbnRrZXknXSkgQU5EIGlzc2V0KCR0aGlzLT5DdXJyZW50Rm9udFsnc3Vic2V0Y2hhcnMnXSkpIHsKCQkJLy8gc2F2ZSBzdWJzZXQgY2hhcnMgb2YgdGhlIHByZXZpb3VzIGZvbnQKCQkJJHRoaXMtPnNldEZvbnRTdWJCdWZmZXIoJHRoaXMtPkN1cnJlbnRGb250Wydmb250a2V5J10sICdzdWJzZXRjaGFycycsICR0aGlzLT5DdXJyZW50Rm9udFsnc3Vic2V0Y2hhcnMnXSk7CgkJfQoJCSR0aGlzLT5zdGF0ZSA9IDE7CgkJJHRoaXMtPl9wdXRoZWFkZXIoKTsKCQkkdGhpcy0+X3B1dHBhZ2VzKCk7CgkJJHRoaXMtPl9wdXRyZXNvdXJjZXMoKTsKCQkvLyBlbXB0eSBzaWduYXR1cmUgZmllbGRzCgkJaWYgKCFlbXB0eSgkdGhpcy0+ZW1wdHlfc2lnbmF0dXJlX2FwcGVhcmFuY2UpKSB7CgkJCWZvcmVhY2ggKCR0aGlzLT5lbXB0eV9zaWduYXR1cmVfYXBwZWFyYW5jZSBhcyAka2V5ID0+ICRlc2EpIHsKCQkJCS8vIHdpZGdldCBhbm5vdGF0aW9uIGZvciBlbXB0eSBzaWduYXR1cmUKCQkJCSRvdXQgPSAkdGhpcy0+X2dldG9iaigkZXNhWydvYmppZCddKS4iXG4iOwoJCQkJJG91dCAuPSAnPDwgL1R5cGUgL0Fubm90JzsKCQkJCSRvdXQgLj0gJyAvU3VidHlwZSAvV2lkZ2V0JzsKCQkJCSRvdXQgLj0gJyAvUmVjdCBbJy4kZXNhWydyZWN0J10uJ10nOwoJCQkJJG91dCAuPSAnIC9QICcuJHRoaXMtPnBhZ2Vfb2JqX2lkWygkZXNhWydwYWdlJ10pXS4nIDAgUic7IC8vIGxpbmsgdG8gc2lnbmF0dXJlIGFwcGVhcmFuY2UgcGFnZQoJCQkJJG91dCAuPSAnIC9GIDQnOwoJCQkJJG91dCAuPSAnIC9GVCAvU2lnJzsKCQkJCSRzaWduYW1lID0gJGVzYVsnbmFtZSddLnNwcmludGYoJyBbJTAzZF0nLCAoJGtleSArIDEpKTsKCQkJCSRvdXQgLj0gJyAvVCAnLiR0aGlzLT5fdGV4dHN0cmluZygkc2lnbmFtZSwgJGVzYVsnb2JqaWQnXSk7CgkJCQkkb3V0IC49ICcgL0ZmIDAnOwoJCQkJJG91dCAuPSAnID4+JzsKCQkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQl9CgkJfQoJCS8vIFNpZ25hdHVyZQoJCWlmICgkdGhpcy0+c2lnbiBBTkQgaXNzZXQoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydjZXJ0X3R5cGUnXSkpIHsKCQkJLy8gd2lkZ2V0IGFubm90YXRpb24gZm9yIHNpZ25hdHVyZQoJCQkkb3V0ID0gJHRoaXMtPl9nZXRvYmooJHRoaXMtPnNpZ19vYmpfaWQpLiJcbiI7CgkJCSRvdXQgLj0gJzw8IC9UeXBlIC9Bbm5vdCc7CgkJCSRvdXQgLj0gJyAvU3VidHlwZSAvV2lkZ2V0JzsKCQkJJG91dCAuPSAnIC9SZWN0IFsnLiR0aGlzLT5zaWduYXR1cmVfYXBwZWFyYW5jZVsncmVjdCddLiddJzsKCQkJJG91dCAuPSAnIC9QICcuJHRoaXMtPnBhZ2Vfb2JqX2lkWygkdGhpcy0+c2lnbmF0dXJlX2FwcGVhcmFuY2VbJ3BhZ2UnXSldLicgMCBSJzsgLy8gbGluayB0byBzaWduYXR1cmUgYXBwZWFyYW5jZSBwYWdlCgkJCSRvdXQgLj0gJyAvRiA0JzsKCQkJJG91dCAuPSAnIC9GVCAvU2lnJzsKCQkJJG91dCAuPSAnIC9UICcuJHRoaXMtPl90ZXh0c3RyaW5nKCR0aGlzLT5zaWduYXR1cmVfYXBwZWFyYW5jZVsnbmFtZSddLCAkdGhpcy0+c2lnX29ial9pZCk7CgkJCSRvdXQgLj0gJyAvRmYgMCc7CgkJCSRvdXQgLj0gJyAvViAnLigkdGhpcy0+c2lnX29ial9pZCArIDEpLicgMCBSJzsKCQkJJG91dCAuPSAnID4+JzsKCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJLy8gc2lnbmF0dXJlCgkJCSR0aGlzLT5fcHV0c2lnbmF0dXJlKCk7CgkJfQoJCS8vIEluZm8KCQkkb2JqaWRfaW5mbyA9ICR0aGlzLT5fcHV0aW5mbygpOwoJCS8vIENhdGFsb2cKCQkkb2JqaWRfY2F0YWxvZyA9ICR0aGlzLT5fcHV0Y2F0YWxvZygpOwoJCS8vIENyb3NzLXJlZgoJCSRvID0gJHRoaXMtPmJ1ZmZlcmxlbjsKCQkvLyBYUkVGIHNlY3Rpb24KCQkkdGhpcy0+X291dCgneHJlZicpOwoJCSR0aGlzLT5fb3V0KCcwICcuKCR0aGlzLT5uICsgMSkpOwoJCSR0aGlzLT5fb3V0KCcwMDAwMDAwMDAwIDY1NTM1IGYgJyk7CgkJJGZyZWVnZW4gPSAoJHRoaXMtPm4gKyAyKTsKCQlmb3IgKCRpPTE7ICRpIDw9ICR0aGlzLT5uOyArKyRpKSB7CgkJCWlmICghaXNzZXQoJHRoaXMtPm9mZnNldHNbJGldKSBBTkQgKCRpID4gMSkpIHsKCQkJCSR0aGlzLT5fb3V0KHNwcmludGYoJzAwMDAwMDAwMDAgJTA1ZCBmICcsICRmcmVlZ2VuKSk7CgkJCQkrKyRmcmVlZ2VuOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJTAxMGQgMDAwMDAgbiAnLCAkdGhpcy0+b2Zmc2V0c1skaV0pKTsKCQkJfQoJCX0KCQkvLyBUUkFJTEVSCgkJJG91dCA9ICd0cmFpbGVyJy4iXG4iOwoJCSRvdXQgLj0gJzw8JzsKCQkkb3V0IC49ICcgL1NpemUgJy4oJHRoaXMtPm4gKyAxKTsKCQkkb3V0IC49ICcgL1Jvb3QgJy4kb2JqaWRfY2F0YWxvZy4nIDAgUic7CgkJJG91dCAuPSAnIC9JbmZvICcuJG9iamlkX2luZm8uJyAwIFInOwoJCWlmICgkdGhpcy0+ZW5jcnlwdGVkKSB7CgkJCSRvdXQgLj0gJyAvRW5jcnlwdCAnLiR0aGlzLT5lbmNyeXB0ZGF0YVsnb2JqaWQnXS4nIDAgUic7CgkJfQoJCSRvdXQgLj0gJyAvSUQgWyA8Jy4kdGhpcy0+ZmlsZV9pZC4nPiA8Jy4kdGhpcy0+ZmlsZV9pZC4nPiBdJzsKCQkkb3V0IC49ICcgPj4nOwoJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCSR0aGlzLT5fb3V0KCdzdGFydHhyZWYnKTsKCQkkdGhpcy0+X291dCgkbyk7CgkJJHRoaXMtPl9vdXQoJyUlRU9GJyk7CgkJJHRoaXMtPnN0YXRlID0gMzsgLy8gZW5kLW9mLWRvYwoJCWlmICgkdGhpcy0+ZGlza2NhY2hlKSB7CgkJCS8vIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdXNlZCBmb3IgaW1hZ2VzCgkJCWZvcmVhY2ggKCR0aGlzLT5pbWFnZWtleXMgYXMgJGtleSkgewoJCQkJLy8gcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwoJCQkJdW5saW5rKCR0aGlzLT5pbWFnZXNbJGtleV0pOwoJCQl9CgkJCWZvcmVhY2ggKCR0aGlzLT5mb250a2V5cyBhcyAka2V5KSB7CgkJCQkvLyByZW1vdmUgdGVtcG9yYXJ5IGZpbGVzCgkJCQl1bmxpbmsoJHRoaXMtPmZvbnRzWyRrZXldKTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEluaXRpYWxpemUgYSBuZXcgcGFnZS4KCSAqIEBwYXJhbSAkb3JpZW50YXRpb24gKHN0cmluZykgcGFnZSBvcmllbnRhdGlvbi4gUG9zc2libGUgdmFsdWVzIGFyZSAoY2FzZSBpbnNlbnNpdGl2ZSk6PHVsPjxsaT5QIG9yIFBPUlRSQUlUIChkZWZhdWx0KTwvbGk+PGxpPkwgb3IgTEFORFNDQVBFPC9saT48L3VsPgoJICogQHBhcmFtICRmb3JtYXQgKG1peGVkKSBUaGUgZm9ybWF0IHVzZWQgZm9yIHBhZ2VzLiBJdCBjYW4gYmUgZWl0aGVyOiBvbmUgb2YgdGhlIHN0cmluZyB2YWx1ZXMgc3BlY2lmaWVkIGF0IGdldFBhZ2VTaXplRnJvbUZvcm1hdCgpIG9yIGFuIGFycmF5IG9mIHBhcmFtZXRlcnMgc3BlY2lmaWVkIGF0IHNldFBhZ2VGb3JtYXQoKS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzZWUgZ2V0UGFnZVNpemVGcm9tRm9ybWF0KCksIHNldFBhZ2VGb3JtYXQoKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2JlZ2lucGFnZSgkb3JpZW50YXRpb249JycsICRmb3JtYXQ9JycpIHsKCQkrKyR0aGlzLT5wYWdlOwoJCSR0aGlzLT5wYWdlb2JqZWN0c1skdGhpcy0+cGFnZV0gPSBhcnJheSgpOwoJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCR0aGlzLT5wYWdlLCAnJyk7CgkJLy8gaW5pdGlhbGl6ZSBhcnJheSBmb3IgZ3JhcGhpY3MgdHJhbmZvcm1hdGlvbiBwb3NpdGlvbnMgaW5zaWRlIGEgcGFnZSBidWZmZXIKCQkkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXSA9IGFycmF5KCk7CgkJJHRoaXMtPnN0YXRlID0gMjsKCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJG9yaWVudGF0aW9uKSkgewoJCQlpZiAoaXNzZXQoJHRoaXMtPkN1ck9yaWVudGF0aW9uKSkgewoJCQkJJG9yaWVudGF0aW9uID0gJHRoaXMtPkN1ck9yaWVudGF0aW9uOwoJCQl9IGVsc2VpZiAoJHRoaXMtPmZ3UHQgPiAkdGhpcy0+ZmhQdCkgewoJCQkJLy8gbGFuZHNjYXBlCgkJCQkkb3JpZW50YXRpb24gPSAnTCc7CgkJCX0gZWxzZSB7CgkJCQkvLyBwb3J0cmFpdAoJCQkJJG9yaWVudGF0aW9uID0gJ1AnOwoJCQl9CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZm9ybWF0KSkgewoJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWRpbVsoJHRoaXMtPnBhZ2UgLSAxKV07CgkJCSR0aGlzLT5zZXRQYWdlT3JpZW50YXRpb24oJG9yaWVudGF0aW9uKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+c2V0UGFnZUZvcm1hdCgkZm9ybWF0LCAkb3JpZW50YXRpb24pOwoJCX0KCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkdGhpcy0+eCA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW47CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnggPSAkdGhpcy0+bE1hcmdpbjsKCQl9CgkJJHRoaXMtPnkgPSAkdGhpcy0+dE1hcmdpbjsKCQlpZiAoaXNzZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskdGhpcy0+cGFnZV0pKSB7CgkJCS8vIHN0YXJ0IGEgbmV3IGdyb3VwCgkJCSR0aGlzLT5jdXJycGFnZWdyb3VwID0gJHRoaXMtPm5ld3BhZ2Vncm91cFskdGhpcy0+cGFnZV07CgkJCSR0aGlzLT5wYWdlZ3JvdXBzWyR0aGlzLT5jdXJycGFnZWdyb3VwXSA9IDE7CgkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5jdXJycGFnZWdyb3VwKSBBTkQgKCR0aGlzLT5jdXJycGFnZWdyb3VwID4gMCkpIHsKCQkJKyskdGhpcy0+cGFnZWdyb3Vwc1skdGhpcy0+Y3VycnBhZ2Vncm91cF07CgkJfQoJfQoKCS8qKgoJICogTWFyayBlbmQgb2YgcGFnZS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9lbmRwYWdlKCkgewoJCSR0aGlzLT5zZXRWaXNpYmlsaXR5KCdhbGwnKTsKCQkkdGhpcy0+c3RhdGUgPSAxOwoJfQoKCS8qKgoJICogQmVnaW4gYSBuZXcgb2JqZWN0IGFuZCByZXR1cm4gdGhlIG9iamVjdCBudW1iZXIuCgkgKiBAcmV0dXJuIGludCBvYmplY3QgbnVtYmVyCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfbmV3b2JqKCkgewoJCSR0aGlzLT5fb3V0KCR0aGlzLT5fZ2V0b2JqKCkpOwoJCXJldHVybiAkdGhpcy0+bjsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgc3RhcnRpbmcgb2JqZWN0IHN0cmluZyBmb3IgdGhlIHNlbGVjdGVkIG9iamVjdCBJRC4KCSAqIEBwYXJhbSAkb2JqaWQgKGludCkgT2JqZWN0IElEIChsZWF2ZSBlbXB0eSB0byBnZXQgYSBuZXcgSUQpLgoJICogQHJldHVybiBzdHJpbmcgdGhlIHN0YXJ0aW5nIG9iamVjdCBzdHJpbmcKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjguMDA5ICgyMDEwLTA4LTIwKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2dldG9iaigkb2JqaWQ9JycpIHsKCQlpZiAoJG9iamlkID09PSAnJykgewoJCQkrKyR0aGlzLT5uOwoJCQkkb2JqaWQgPSAkdGhpcy0+bjsKCQl9CgkJJHRoaXMtPm9mZnNldHNbJG9iamlkXSA9ICR0aGlzLT5idWZmZXJsZW47CgkJJHRoaXMtPnBhZ2VvYmplY3RzWyR0aGlzLT5wYWdlXVtdID0gJG9iamlkOwoJCXJldHVybiAkb2JqaWQuJyAwIG9iaic7Cgl9CgoJLyoqCgkgKiBVbmRlcmxpbmUgdGV4dC4KCSAqIEBwYXJhbSAkeCAoaW50KSBYIGNvb3JkaW5hdGUKCSAqIEBwYXJhbSAkeSAoaW50KSBZIGNvb3JkaW5hdGUKCSAqIEBwYXJhbSAkdHh0IChzdHJpbmcpIHRleHQgdG8gdW5kZXJsaW5lCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG91bmRlcmxpbmUoJHgsICR5LCAkdHh0KSB7CgkJJHcgPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHR4dCk7CgkJcmV0dXJuICR0aGlzLT5fZG91bmRlcmxpbmV3KCR4LCAkeSwgJHcpOwoJfQoKCS8qKgoJICogVW5kZXJsaW5lIGZvciByZWN0YW5ndWxhciB0ZXh0IGFyZWEuCgkgKiBAcGFyYW0gJHggKGludCkgWCBjb29yZGluYXRlCgkgKiBAcGFyYW0gJHkgKGludCkgWSBjb29yZGluYXRlCgkgKiBAcGFyYW0gJHcgKGludCkgd2lkdGggdG8gdW5kZXJsaW5lCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC44LjAwOCAoMjAwOS0wOS0yOSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb3VuZGVybGluZXcoJHgsICR5LCAkdykgewoJCSRsaW5ldyA9IC0gJHRoaXMtPkN1cnJlbnRGb250Wyd1dCddIC8gMTAwMCAqICR0aGlzLT5Gb250U2l6ZVB0OwoJCXJldHVybiBzcHJpbnRmKCclRiAlRiAlRiAlRiByZSBmJywgJHggKiAkdGhpcy0+aywgKCgoJHRoaXMtPmggLSAkeSkgKiAkdGhpcy0+aykgKyAkbGluZXcpLCAkdyAqICR0aGlzLT5rLCAkbGluZXcpOwoJfQoKCS8qKgoJICogTGluZSB0aHJvdWdoIHRleHQuCgkgKiBAcGFyYW0gJHggKGludCkgWCBjb29yZGluYXRlCgkgKiBAcGFyYW0gJHkgKGludCkgWSBjb29yZGluYXRlCgkgKiBAcGFyYW0gJHR4dCAoc3RyaW5nKSB0ZXh0IHRvIGxpbmV0aHJvdWdoCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZG9saW5ldGhyb3VnaCgkeCwgJHksICR0eHQpIHsKCQkkdyA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdHh0KTsKCQlyZXR1cm4gJHRoaXMtPl9kb2xpbmV0aHJvdWdodygkeCwgJHksICR3KTsKCX0KCgkvKioKCSAqIExpbmUgdGhyb3VnaCBmb3IgcmVjdGFuZ3VsYXIgdGV4dCBhcmVhLgoJICogQHBhcmFtICR4IChpbnQpIFggY29vcmRpbmF0ZQoJICogQHBhcmFtICR5IChpbnQpIFkgY29vcmRpbmF0ZQoJICogQHBhcmFtICR3IChpbnQpIGxpbmUgbGVuZ3RoICh3aWR0aCkKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDA4ICgyMDA5LTA5LTI5KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2RvbGluZXRocm91Z2h3KCR4LCAkeSwgJHcpIHsKCQkkbGluZXcgPSAtICR0aGlzLT5DdXJyZW50Rm9udFsndXQnXSAvIDEwMDAgKiAkdGhpcy0+Rm9udFNpemVQdDsKCQlyZXR1cm4gc3ByaW50ZignJUYgJUYgJUYgJUYgcmUgZicsICR4ICogJHRoaXMtPmssICgoKCR0aGlzLT5oIC0gJHkpICogJHRoaXMtPmspICsgJGxpbmV3ICsgKCR0aGlzLT5Gb250U2l6ZVB0IC8gMykpLCAkdyAqICR0aGlzLT5rLCAkbGluZXcpOwoJfQoKCS8qKgoJICogT3ZlcmxpbmUgdGV4dC4KCSAqIEBwYXJhbSAkeCAoaW50KSBYIGNvb3JkaW5hdGUKCSAqIEBwYXJhbSAkeSAoaW50KSBZIGNvb3JkaW5hdGUKCSAqIEBwYXJhbSAkdHh0IChzdHJpbmcpIHRleHQgdG8gb3ZlcmxpbmUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDE1ICgyMDEwLTA0LTE5KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2Rvb3ZlcmxpbmUoJHgsICR5LCAkdHh0KSB7CgkJJHcgPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHR4dCk7CgkJcmV0dXJuICR0aGlzLT5fZG9vdmVybGluZXcoJHgsICR5LCAkdyk7Cgl9CgoJLyoqCgkgKiBPdmVybGluZSBmb3IgcmVjdGFuZ3VsYXIgdGV4dCBhcmVhLgoJICogQHBhcmFtICR4IChpbnQpIFggY29vcmRpbmF0ZQoJICogQHBhcmFtICR5IChpbnQpIFkgY29vcmRpbmF0ZQoJICogQHBhcmFtICR3IChpbnQpIHdpZHRoIHRvIG92ZXJsaW5lCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC45LjAxNSAoMjAxMC0wNC0xOSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kb292ZXJsaW5ldygkeCwgJHksICR3KSB7CgkJJGxpbmV3ID0gLSAkdGhpcy0+Q3VycmVudEZvbnRbJ3V0J10gLyAxMDAwICogJHRoaXMtPkZvbnRTaXplUHQ7CgkJcmV0dXJuIHNwcmludGYoJyVGICVGICVGICVGIHJlIGYnLCAkeCAqICR0aGlzLT5rLCAoKCR0aGlzLT5oIC0gJHkgKyAkdGhpcy0+Rm9udEFzY2VudCkgKiAkdGhpcy0+aykgLSAkbGluZXcsICR3ICogJHRoaXMtPmssICRsaW5ldyk7CgoJfQoKCS8qKgoJICogRm9ybWF0IGEgZGF0YSBzdHJpbmcgZm9yIG1ldGEgaW5mb3JtYXRpb24KCSAqIEBwYXJhbSAkcyAoc3RyaW5nKSBkYXRhIHN0cmluZyB0byBlc2NhcGUuCgkgKiBAcGFyYW0gJG4gKGludCkgb2JqZWN0IElECgkgKiBAcmV0dXJuIHN0cmluZyBlc2NhcGVkIHN0cmluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kYXRhc3RyaW5nKCRzLCAkbj0wKSB7CgkJaWYgKCRuID09IDApIHsKCQkJJG4gPSAkdGhpcy0+bjsKCQl9CgkJJHMgPSAkdGhpcy0+X2VuY3J5cHRfZGF0YSgkbiwgJHMpOwoJCXJldHVybiAnKCcuIFRDUERGX1NUQVRJQzo6X2VzY2FwZSgkcykuJyknOwoJfQoKCS8qKgoJICogU2V0IHRoZSBkb2N1bWVudCBjcmVhdGlvbiB0aW1lc3RhbXAKCSAqIEBwYXJhbSAkdGltZSAobWl4ZWQpIERvY3VtZW50IGNyZWF0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzIG9yIGRhdGUtdGltZSBzdHJpbmcuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldERvY0NyZWF0aW9uVGltZXN0YW1wKCR0aW1lKSB7CgkJaWYgKGlzX3N0cmluZygkdGltZSkpIHsKCQkJJHRpbWUgPSBUQ1BERl9TVEFUSUM6OmdldFRpbWVzdGFtcCgkdGltZSk7CgkJfQoJCSR0aGlzLT5kb2NfY3JlYXRpb25fdGltZXN0YW1wID0gaW50dmFsKCR0aW1lKTsKCX0KCgkvKioKCSAqIFNldCB0aGUgZG9jdW1lbnQgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcAoJICogQHBhcmFtICR0aW1lIChtaXhlZCkgRG9jdW1lbnQgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzIG9yIGRhdGUtdGltZSBzdHJpbmcuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldERvY01vZGlmaWNhdGlvblRpbWVzdGFtcCgkdGltZSkgewoJCWlmIChpc19zdHJpbmcoJHRpbWUpKSB7CgkJCSR0aW1lID0gVENQREZfU1RBVElDOjpnZXRUaW1lc3RhbXAoJHRpbWUpOwoJCX0KCQkkdGhpcy0+ZG9jX21vZGlmaWNhdGlvbl90aW1lc3RhbXAgPSBpbnR2YWwoJHRpbWUpOwoJfQoKCS8qKgoJICogUmV0dXJucyBkb2N1bWVudCBjcmVhdGlvbiB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KCSAqIEByZXR1cm4gKGludCkgQ3JlYXRpb24gdGltZXN0YW1wIGluIHNlY29uZHMuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjE1MiAoMjAxMi0wMy0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldERvY0NyZWF0aW9uVGltZXN0YW1wKCkgewoJCXJldHVybiAkdGhpcy0+ZG9jX2NyZWF0aW9uX3RpbWVzdGFtcDsKCX0KCgkvKioKCSAqIFJldHVybnMgZG9jdW1lbnQgbW9kaWZpY2F0aW9uIHRpbWVzdGFtcCBpbiBzZWNvbmRzLgoJICogQHJldHVybiAoaW50KSBNb2RmaWNhdGlvbiB0aW1lc3RhbXAgaW4gc2Vjb25kcy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMTUyICgyMDEyLTAzLTIzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0RG9jTW9kaWZpY2F0aW9uVGltZXN0YW1wKCkgewoJCXJldHVybiAkdGhpcy0+ZG9jX21vZGlmaWNhdGlvbl90aW1lc3RhbXA7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGEgZm9ybWF0dGVkIGRhdGUgZm9yIG1ldGEgaW5mb3JtYXRpb24KCSAqIEBwYXJhbSAkbiAoaW50KSBPYmplY3QgSUQuCgkgKiBAcGFyYW0gJHRpbWVzdGFtcCAoaW50KSBUaW1lc3RhbXAgdG8gY29udmVydC4KCSAqIEByZXR1cm4gc3RyaW5nIGVzY2FwZWQgZGF0ZSBzdHJpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC42LjAyOCAoMjAwOS0wOC0yNSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9kYXRlc3RyaW5nKCRuPTAsICR0aW1lc3RhbXA9MCkgewoJCWlmICgoZW1wdHkoJHRpbWVzdGFtcCkpIE9SICgkdGltZXN0YW1wIDwgMCkpIHsKCQkJJHRpbWVzdGFtcCA9ICR0aGlzLT5kb2NfY3JlYXRpb25fdGltZXN0YW1wOwoJCX0KCQlyZXR1cm4gJHRoaXMtPl9kYXRhc3RyaW5nKCdEOicuVENQREZfU1RBVElDOjpnZXRGb3JtYXR0ZWREYXRlKCR0aW1lc3RhbXApLCAkbik7Cgl9CgoJLyoqCgkgKiBGb3JtYXQgYSB0ZXh0IHN0cmluZyBmb3IgbWV0YSBpbmZvcm1hdGlvbgoJICogQHBhcmFtICRzIChzdHJpbmcpIHN0cmluZyB0byBlc2NhcGUuCgkgKiBAcGFyYW0gJG4gKGludCkgb2JqZWN0IElECgkgKiBAcmV0dXJuIHN0cmluZyBlc2NhcGVkIHN0cmluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF90ZXh0c3RyaW5nKCRzLCAkbj0wKSB7CgkJaWYgKCR0aGlzLT5pc3VuaWNvZGUpIHsKCQkJLy9Db252ZXJ0IHN0cmluZyB0byBVVEYtMTZCRQoJCQkkcyA9IFRDUERGX0ZPTlRTOjpVVEY4VG9VVEYxNkJFKCRzLCB0cnVlLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCX0KCQlyZXR1cm4gJHRoaXMtPl9kYXRhc3RyaW5nKCRzLCAkbik7Cgl9CgoJLyoqCgkgKiBUSElTIE1FVEhPRCBJUyBERVBSRUNBVEVECgkgKiBGb3JtYXQgYSB0ZXh0IHN0cmluZwoJICogQHBhcmFtICRzIChzdHJpbmcpIHN0cmluZyB0byBlc2NhcGUuCgkgKiBAcmV0dXJuIHN0cmluZyBlc2NhcGVkIHN0cmluZy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBkZXByZWNhdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZXNjYXBldGV4dCgkcykgewoJCWlmICgkdGhpcy0+aXN1bmljb2RlKSB7CgkJCWlmICgoJHRoaXMtPkN1cnJlbnRGb250Wyd0eXBlJ10gPT0gJ2NvcmUnKSBPUiAoJHRoaXMtPkN1cnJlbnRGb250Wyd0eXBlJ10gPT0gJ1RydWVUeXBlJykgT1IgKCR0aGlzLT5DdXJyZW50Rm9udFsndHlwZSddID09ICdUeXBlMScpKSB7CgkJCQkkcyA9IFRDUERGX0ZPTlRTOjpVVEY4VG9MYXRpbjEoJHMsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCX0gZWxzZSB7CgkJCQkvL0NvbnZlcnQgc3RyaW5nIHRvIFVURi0xNkJFIGFuZCByZXZlcnNlIFJUTCBsYW5ndWFnZQoJCQkJJHMgPSBUQ1BERl9GT05UUzo6dXRmOFN0clJldigkcywgZmFsc2UsICR0aGlzLT50bXBydGwsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCX0KCQl9CgkJcmV0dXJuIFRDUERGX1NUQVRJQzo6X2VzY2FwZSgkcyk7Cgl9CgoJLyoqCgkgKiBnZXQgcmF3IG91dHB1dCBzdHJlYW0uCgkgKiBAcGFyYW0gJHMgKHN0cmluZykgc3RyaW5nIHRvIG91dHB1dC4KCSAqIEBwYXJhbSAkbiAoaW50KSBvYmplY3QgcmVmZXJlbmNlIGZvciBlbmNyeXB0aW9uIG1vZGUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS41LjAwMCAoMjAxMC0wNi0yMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9nZXRyYXdzdHJlYW0oJHMsICRuPTApIHsKCQlpZiAoJG4gPD0gMCkgewoJCQkvLyBkZWZhdWx0IHRvIGN1cnJlbnQgb2JqZWN0CgkJCSRuID0gJHRoaXMtPm47CgkJfQoJCXJldHVybiAkdGhpcy0+X2VuY3J5cHRfZGF0YSgkbiwgJHMpOwoJfQoKCS8qKgoJICogRm9ybWF0IG91dHB1dCBzdHJlYW0gKERFUFJFQ0FURUQpLgoJICogQHBhcmFtICRzIChzdHJpbmcpIHN0cmluZyB0byBvdXRwdXQuCgkgKiBAcGFyYW0gJG4gKGludCkgb2JqZWN0IHJlZmVyZW5jZSBmb3IgZW5jcnlwdGlvbiBtb2RlCgkgKiBAcHJvdGVjdGVkCgkgKiBAZGVwcmVjYXRlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2dldHN0cmVhbSgkcywgJG49MCkgewoJCXJldHVybiAnc3RyZWFtJy4iXG4iLiR0aGlzLT5fZ2V0cmF3c3RyZWFtKCRzLCAkbikuIlxuIi4nZW5kc3RyZWFtJzsKCX0KCgkvKioKCSAqIE91dHB1dCBhIHN0cmVhbSAoREVQUkVDQVRFRCkuCgkgKiBAcGFyYW0gJHMgKHN0cmluZykgc3RyaW5nIHRvIG91dHB1dC4KCSAqIEBwYXJhbSAkbiAoaW50KSBvYmplY3QgcmVmZXJlbmNlIGZvciBlbmNyeXB0aW9uIG1vZGUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBkZXByZWNhdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0c3RyZWFtKCRzLCAkbj0wKSB7CgkJJHRoaXMtPl9vdXQoJHRoaXMtPl9nZXRzdHJlYW0oJHMsICRuKSk7Cgl9CgoJLyoqCgkgKiBPdXRwdXQgYSBzdHJpbmcgdG8gdGhlIGRvY3VtZW50LgoJICogQHBhcmFtICRzIChzdHJpbmcpIHN0cmluZyB0byBvdXRwdXQuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfb3V0KCRzKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddIC49ICRzLiJcbiI7CgkJCX0gZWxzZWlmICgoISR0aGlzLT5JbkZvb3RlcikgQU5EIGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdKSBBTkQgKCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdID4gMCkpIHsKCQkJCS8vIHB1dHMgZGF0YSBiZWZvcmUgcGFnZSBmb290ZXIKCQkJCSRwYWdlYnVmZiA9ICR0aGlzLT5nZXRQYWdlQnVmZmVyKCR0aGlzLT5wYWdlKTsKCQkJCSRwYWdlID0gc3Vic3RyKCRwYWdlYnVmZiwgMCwgLSR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdKTsKCQkJCSRmb290ZXIgPSBzdWJzdHIoJHBhZ2VidWZmLCAtJHRoaXMtPmZvb3RlcmxlblskdGhpcy0+cGFnZV0pOwoJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UsICRwYWdlLiRzLiJcbiIuJGZvb3Rlcik7CgkJCQkvLyB1cGRhdGUgZm9vdGVyIHBvc2l0aW9uCgkJCQkkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXSArPSBzdHJsZW4oJHMuIlxuIik7CgkJCX0gZWxzZSB7CgkJCQkvLyBzZXQgcGFnZSBkYXRhCgkJCQkkdGhpcy0+c2V0UGFnZUJ1ZmZlcigkdGhpcy0+cGFnZSwgJHMuIlxuIiwgdHJ1ZSk7CgkJCX0KCQl9IGVsc2VpZiAoJHRoaXMtPnN0YXRlID4gMCkgewoJCQkvLyBzZXQgZ2VuZXJhbCBkYXRhCgkJCSR0aGlzLT5zZXRCdWZmZXIoJHMuIlxuIik7CgkJfQoJfQoKCS8qKgoJICogU2V0IGhlYWRlciBmb250LgoJICogQHBhcmFtICRmb250IChhcnJheSkgQXJyYXkgZGVzY3JpYmluZyB0aGUgYmFzaWMgZm9udCBwYXJhbWV0ZXJzOiAoZmFtaWx5LCBzdHlsZSwgc2l6ZSkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4xCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRIZWFkZXJGb250KCRmb250KSB7CgkJJHRoaXMtPmhlYWRlcl9mb250ID0gJGZvbnQ7Cgl9CgoJLyoqCgkgKiBHZXQgaGVhZGVyIGZvbnQuCgkgKiBAcmV0dXJuIGFycmF5KCkgQXJyYXkgZGVzY3JpYmluZyB0aGUgYmFzaWMgZm9udCBwYXJhbWV0ZXJzOiAoZmFtaWx5LCBzdHlsZSwgc2l6ZSkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC4wLjAxMiAoMjAwOC0wNy0yNCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEhlYWRlckZvbnQoKSB7CgkJcmV0dXJuICR0aGlzLT5oZWFkZXJfZm9udDsKCX0KCgkvKioKCSAqIFNldCBmb290ZXIgZm9udC4KCSAqIEBwYXJhbSAkZm9udCAoYXJyYXkpIEFycmF5IGRlc2NyaWJpbmcgdGhlIGJhc2ljIGZvbnQgcGFyYW1ldGVyczogKGZhbWlseSwgc3R5bGUsIHNpemUpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Rm9vdGVyRm9udCgkZm9udCkgewoJCSR0aGlzLT5mb290ZXJfZm9udCA9ICRmb250OwoJfQoKCS8qKgoJICogR2V0IEZvb3RlciBmb250LgoJICogQHJldHVybiBhcnJheSgpIEFycmF5IGRlc2NyaWJpbmcgdGhlIGJhc2ljIGZvbnQgcGFyYW1ldGVyczogKGZhbWlseSwgc3R5bGUsIHNpemUpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMTIgKDIwMDgtMDctMjQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb290ZXJGb250KCkgewoJCXJldHVybiAkdGhpcy0+Zm9vdGVyX2ZvbnQ7Cgl9CgoJLyoqCgkgKiBTZXQgbGFuZ3VhZ2UgYXJyYXkuCgkgKiBAcGFyYW0gJGxhbmd1YWdlIChhcnJheSkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjEKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldExhbmd1YWdlQXJyYXkoJGxhbmd1YWdlKSB7CgkJJHRoaXMtPmwgPSAkbGFuZ3VhZ2U7CgkJaWYgKGlzc2V0KCR0aGlzLT5sWydhX21ldGFfZGlyJ10pKSB7CgkJCSR0aGlzLT5ydGwgPSAkdGhpcy0+bFsnYV9tZXRhX2RpciddPT0ncnRsJyA/IHRydWUgOiBmYWxzZTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+cnRsID0gZmFsc2U7CgkJfQoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgUERGIGRhdGEuCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQREZEYXRhKCkgewoJCWlmICgkdGhpcy0+c3RhdGUgPCAzKSB7CgkJCSR0aGlzLT5DbG9zZSgpOwoJCX0KCQlyZXR1cm4gJHRoaXMtPmJ1ZmZlcjsKCX0KCgkvKioKCSAqIE91dHB1dCBhbmNob3IgbGluay4KCSAqIEBwYXJhbSAkdXJsIChzdHJpbmcpIGxpbmsgVVJMIG9yIGludGVybmFsIGxpbmsgKGkuZS46ICZsdDthIGhyZWY9IiMyMyw0LjUiJmd0O2xpbmsgdG8gcGFnZSAyMyBhdCA0LjUgWSBwb3NpdGlvbiZsdDsvYSZndDspCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgbGluayBuYW1lCgkgKiBAcGFyYW0gJGZpbGwgKGJvb2xlYW4pIEluZGljYXRlcyBpZiB0aGUgY2VsbCBiYWNrZ3JvdW5kIG11c3QgYmUgcGFpbnRlZCAodHJ1ZSkgb3IgdHJhbnNwYXJlbnQgKGZhbHNlKS4KCSAqIEBwYXJhbSAkZmlyc3RsaW5lIChib29sZWFuKSBpZiB0cnVlIHByaW50cyBvbmx5IHRoZSBmaXJzdCBsaW5lIGFuZCByZXR1cm4gdGhlIHJlbWFpbmluZyBzdHJpbmcuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgYXJyYXkgb2YgUkdCIHRleHQgY29sb3IKCSAqIEBwYXJhbSAkc3R5bGUgKHN0cmluZykgZm9udCBzdHlsZSAoVSwgRCwgQiwgSSkKCSAqIEBwYXJhbSAkZmlyc3RibG9jayAoYm9vbGVhbikgaWYgdHJ1ZSB0aGUgc3RyaW5nIGlzIHRoZSBzdGFydGluZyBvZiBhIGxpbmUuCgkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgY2VsbHMgdXNlZCBvciB0aGUgcmVtYWluaW5nIHRleHQgaWYgJGZpcnN0bGluZSA9IHRydWU7CgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRIdG1sTGluaygkdXJsLCAkbmFtZSwgJGZpbGw9ZmFsc2UsICRmaXJzdGxpbmU9ZmFsc2UsICRjb2xvcj0nJywgJHN0eWxlPS0xLCAkZmlyc3RibG9jaz1mYWxzZSkgewoJCWlmIChpc3NldCgkdXJsWzFdKSBBTkQgKCR1cmxbMF0gPT0gJyMnKSBBTkQgaXNfbnVtZXJpYygkdXJsWzFdKSkgewoJCQkvLyBjb252ZXJ0IHVybCB0byBpbnRlcm5hbCBsaW5rCgkJCSRsbmtkYXRhID0gZXhwbG9kZSgnLCcsICR1cmwpOwoJCQlpZiAoaXNzZXQoJGxua2RhdGFbMF0pKSB7CgkJCQkkcGFnZSA9IGludHZhbChzdWJzdHIoJGxua2RhdGFbMF0sIDEpKTsKCQkJCWlmIChlbXB0eSgkcGFnZSkgT1IgKCRwYWdlIDw9IDApKSB7CgkJCQkJJHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCX0KCQkJCWlmIChpc3NldCgkbG5rZGF0YVsxXSkgQU5EIChzdHJsZW4oJGxua2RhdGFbMV0pID4gMCkpIHsKCQkJCQkkbG5reSA9IGZsb2F0dmFsKCRsbmtkYXRhWzFdKTsKCQkJCX0gZWxzZSB7CgkJCQkJJGxua3kgPSAwOwoJCQkJfQoJCQkJJHVybCA9ICR0aGlzLT5BZGRMaW5rKCk7CgkJCQkkdGhpcy0+U2V0TGluaygkdXJsLCAkbG5reSwgJHBhZ2UpOwoJCQl9CgkJfQoJCS8vIHN0b3JlIGN1cnJlbnQgc2V0dGluZ3MKCQkkcHJldmNvbG9yID0gJHRoaXMtPmZnY29sb3I7CgkJJHByZXZzdHlsZSA9ICR0aGlzLT5Gb250U3R5bGU7CgkJaWYgKGVtcHR5KCRjb2xvcikpIHsKCQkJJHRoaXMtPlNldFRleHRDb2xvckFycmF5KCR0aGlzLT5odG1sTGlua0NvbG9yQXJyYXkpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5TZXRUZXh0Q29sb3JBcnJheSgkY29sb3IpOwoJCX0KCQlpZiAoJHN0eWxlID09IC0xKSB7CgkJCSR0aGlzLT5TZXRGb250KCcnLCAkdGhpcy0+Rm9udFN0eWxlLiR0aGlzLT5odG1sTGlua0ZvbnRTdHlsZSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPlNldEZvbnQoJycsICR0aGlzLT5Gb250U3R5bGUuJHN0eWxlKTsKCQl9CgkJJHJldCA9ICR0aGlzLT5Xcml0ZSgkdGhpcy0+bGFzdGgsICRuYW1lLCAkdXJsLCAkZmlsbCwgJycsIGZhbHNlLCAwLCAkZmlyc3RsaW5lLCAkZmlyc3RibG9jaywgMCk7CgkJLy8gcmVzdG9yZSBzZXR0aW5ncwoJCSR0aGlzLT5TZXRGb250KCcnLCAkcHJldnN0eWxlKTsKCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJHByZXZjb2xvcik7CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0cyBwaXhlbHMgdG8gVXNlcidzIFVuaXRzLgoJICogQHBhcmFtICRweCAoaW50KSBwaXhlbHMKCSAqIEByZXR1cm4gZmxvYXQgdmFsdWUgaW4gdXNlcidzIHVuaXQKCSAqIEBwdWJsaWMKCSAqIEBzZWUgc2V0SW1hZ2VTY2FsZSgpLCBnZXRJbWFnZVNjYWxlKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHBpeGVsc1RvVW5pdHMoJHB4KSB7CgkJcmV0dXJuICgkcHggLyAoJHRoaXMtPmltZ3NjYWxlICogJHRoaXMtPmspKTsKCX0KCgkvKioKCSAqIFJldmVyc2UgZnVuY3Rpb24gZm9yIGh0bWxlbnRpdGllcy4KCSAqIENvbnZlcnQgZW50aXRpZXMgaW4gVVRGLTguCgkgKiBAcGFyYW0gJHRleHRfdG9fY29udmVydCAoc3RyaW5nKSBUZXh0IHRvIGNvbnZlcnQuCgkgKiBAcmV0dXJuIHN0cmluZyBjb252ZXJ0ZWQgdGV4dCBzdHJpbmcKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHVuaHRtbGVudGl0aWVzKCR0ZXh0X3RvX2NvbnZlcnQpIHsKCQlyZXR1cm4gQGh0bWxfZW50aXR5X2RlY29kZSgkdGV4dF90b19jb252ZXJ0LCBFTlRfUVVPVEVTLCAkdGhpcy0+ZW5jb2RpbmcpOwoJfQoKCS8vIEVOQ1JZUFRJT04gTUVUSE9EUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBDb21wdXRlIGVuY3J5cHRpb24ga2V5IGRlcGVuZGluZyBvbiBvYmplY3QgbnVtYmVyIHdoZXJlIHRoZSBlbmNyeXB0ZWQgZGF0YSBpcyBzdG9yZWQuCgkgKiBUaGlzIGlzIHVzZWQgZm9yIGFsbCBzdHJpbmdzIGFuZCBzdHJlYW1zIHdpdGhvdXQgY3J5cHQgZmlsdGVyIHNwZWNpZmllci4KCSAqIEBwYXJhbSAkbiAoaW50KSBvYmplY3QgbnVtYmVyCgkgKiBAcmV0dXJuIGludCBvYmplY3Qga2V5CgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfb2JqZWN0a2V5KCRuKSB7CgkJJG9iamtleSA9ICR0aGlzLT5lbmNyeXB0ZGF0YVsna2V5J10ucGFjaygnVlh4eCcsICRuKTsKCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydtb2RlJ10gPT0gMikgeyAvLyBBRVMtMTI4CgkJCS8vIEFFUyBwYWRkaW5nCgkJCSRvYmprZXkgLj0gIlx4NzNceDQxXHg2Q1x4NTQiOyAvLyBzQWxUCgkJfQoJCSRvYmprZXkgPSBzdWJzdHIoVENQREZfU1RBVElDOjpfbWQ1XzE2KCRvYmprZXkpLCAwLCAoKCR0aGlzLT5lbmNyeXB0ZGF0YVsnTGVuZ3RoJ10gLyA4KSArIDUpKTsKCQkkb2Jqa2V5ID0gc3Vic3RyKCRvYmprZXksIDAsIDE2KTsKCQlyZXR1cm4gJG9iamtleTsKCX0KCgkvKioKCSAqIEVuY3J5cHQgdGhlIGlucHV0IHN0cmluZy4KCSAqIEBwYXJhbSAkbiAoaW50KSBvYmplY3QgbnVtYmVyCgkgKiBAcGFyYW0gJHMgKHN0cmluZykgZGF0YSBzdHJpbmcgdG8gZW5jcnlwdAoJICogQHJldHVybiBlbmNyeXB0ZWQgc3RyaW5nCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMC4wMDUgKDIwMTAtMDUtMTEpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZW5jcnlwdF9kYXRhKCRuLCAkcykgewoJCWlmICghJHRoaXMtPmVuY3J5cHRlZCkgewoJCQlyZXR1cm4gJHM7CgkJfQoJCXN3aXRjaCAoJHRoaXMtPmVuY3J5cHRkYXRhWydtb2RlJ10pIHsKCQkJY2FzZSAwOiAgIC8vIFJDNC00MAoJCQljYXNlIDE6IHsgLy8gUkM0LTEyOAoJCQkJJHMgPSBUQ1BERl9TVEFUSUM6Ol9SQzQoJHRoaXMtPl9vYmplY3RrZXkoJG4pLCAkcywgJHRoaXMtPmxhc3RfZW5jX2tleSwgJHRoaXMtPmxhc3RfZW5jX2tleV9jKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMjogeyAvLyBBRVMtMTI4CgkJCQkkcyA9IFRDUERGX1NUQVRJQzo6X0FFUygkdGhpcy0+X29iamVjdGtleSgkbiksICRzKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMzogeyAvLyBBRVMtMjU2CgkJCQkkcyA9IFRDUERGX1NUQVRJQzo6X0FFUygkdGhpcy0+ZW5jcnlwdGRhdGFbJ2tleSddLCAkcyk7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJHM7Cgl9CgoJLyoqCgkgKiBQdXQgZW5jcnlwdGlvbiBvbiBQREYgZG9jdW1lbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0ZW5jcnlwdGlvbigpIHsKCQlpZiAoISR0aGlzLT5lbmNyeXB0ZWQpIHsKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ29iamlkJ10gPSAkdGhpcy0+X25ld29iaigpOwoJCSRvdXQgPSAnPDwnOwoJCWlmICghaXNzZXQoJHRoaXMtPmVuY3J5cHRkYXRhWydGaWx0ZXInXSkgT1IgZW1wdHkoJHRoaXMtPmVuY3J5cHRkYXRhWydGaWx0ZXInXSkpIHsKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydGaWx0ZXInXSA9ICdTdGFuZGFyZCc7CgkJfQoJCSRvdXQgLj0gJyAvRmlsdGVyIC8nLiR0aGlzLT5lbmNyeXB0ZGF0YVsnRmlsdGVyJ107CgkJaWYgKGlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnU3ViRmlsdGVyJ10pIEFORCAhZW1wdHkoJHRoaXMtPmVuY3J5cHRkYXRhWydTdWJGaWx0ZXInXSkpIHsKCQkJJG91dCAuPSAnIC9TdWJGaWx0ZXIgLycuJHRoaXMtPmVuY3J5cHRkYXRhWydTdWJGaWx0ZXInXTsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1YnXSkgT1IgZW1wdHkoJHRoaXMtPmVuY3J5cHRkYXRhWydWJ10pKSB7CgkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnViddID0gMTsKCQl9CgkJLy8gViBpcyBhIGNvZGUgc3BlY2lmeWluZyB0aGUgYWxnb3JpdGhtIHRvIGJlIHVzZWQgaW4gZW5jcnlwdGluZyBhbmQgZGVjcnlwdGluZyB0aGUgZG9jdW1lbnQKCQkkb3V0IC49ICcgL1YgJy4kdGhpcy0+ZW5jcnlwdGRhdGFbJ1YnXTsKCQlpZiAoaXNzZXQoJHRoaXMtPmVuY3J5cHRkYXRhWydMZW5ndGgnXSkgQU5EICFlbXB0eSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0xlbmd0aCddKSkgewoJCQkvLyBUaGUgbGVuZ3RoIG9mIHRoZSBlbmNyeXB0aW9uIGtleSwgaW4gYml0cy4gVGhlIHZhbHVlIHNoYWxsIGJlIGEgbXVsdGlwbGUgb2YgOCwgaW4gdGhlIHJhbmdlIDQwIHRvIDI1NgoJCQkkb3V0IC49ICcgL0xlbmd0aCAnLiR0aGlzLT5lbmNyeXB0ZGF0YVsnTGVuZ3RoJ107CgkJfSBlbHNlIHsKCQkJJG91dCAuPSAnIC9MZW5ndGggNDAnOwoJCX0KCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydWJ10gPj0gNCkgewoJCQlpZiAoIWlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnU3RtRiddKSBPUiBlbXB0eSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0bUYnXSkpIHsKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnU3RtRiddID0gJ0lkZW50aXR5JzsKCQkJfQoJCQlpZiAoIWlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnU3RyRiddKSBPUiBlbXB0eSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0ckYnXSkpIHsKCQkJCS8vIFRoZSBuYW1lIG9mIHRoZSBjcnlwdCBmaWx0ZXIgdGhhdCBzaGFsbCBiZSB1c2VkIHdoZW4gZGVjcnlwdGluZyBhbGwgc3RyaW5ncyBpbiB0aGUgZG9jdW1lbnQuCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0ckYnXSA9ICdJZGVudGl0eSc7CgkJCX0KCQkJLy8gQSBkaWN0aW9uYXJ5IHdob3NlIGtleXMgc2hhbGwgYmUgY3J5cHQgZmlsdGVyIG5hbWVzIGFuZCB3aG9zZSB2YWx1ZXMgc2hhbGwgYmUgdGhlIGNvcnJlc3BvbmRpbmcgY3J5cHQgZmlsdGVyIGRpY3Rpb25hcmllcy4KCQkJaWYgKGlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXSkgQU5EICFlbXB0eSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ10pKSB7CgkJCQkkb3V0IC49ICcgL0NGIDw8JzsKCQkJCSRvdXQgLj0gJyAvJy4kdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0bUYnXS4nIDw8JzsKCQkJCSRvdXQgLj0gJyAvVHlwZSAvQ3J5cHRGaWx0ZXInOwoJCQkJaWYgKGlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnQ0ZNJ10pIEFORCAhZW1wdHkoJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydDRk0nXSkpIHsKCQkJCQkvLyBUaGUgbWV0aG9kIHVzZWQKCQkJCQkkb3V0IC49ICcgL0NGTSAvJy4kdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ11bJ0NGTSddOwoJCQkJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ3B1YmtleSddKSB7CgkJCQkJCSRvdXQgLj0gJyAvUmVjaXBpZW50cyBbJzsKCQkJCQkJZm9yZWFjaCAoJHRoaXMtPmVuY3J5cHRkYXRhWydSZWNpcGllbnRzJ10gYXMgJHJlYykgewoJCQkJCQkJJG91dCAuPSAnIDwnLiRyZWMuJz4nOwoJCQkJCQl9CgkJCQkJCSRvdXQgLj0gJyBdJzsKCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnRW5jcnlwdE1ldGFkYXRhJ10pIEFORCAoISR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnRW5jcnlwdE1ldGFkYXRhJ10pKSB7CgkJCQkJCQkkb3V0IC49ICcgL0VuY3J5cHRNZXRhZGF0YSBmYWxzZSc7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkb3V0IC49ICcgL0VuY3J5cHRNZXRhZGF0YSB0cnVlJzsKCQkJCQkJfQoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJG91dCAuPSAnIC9DRk0gL05vbmUnOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnQXV0aEV2ZW50J10pIEFORCAhZW1wdHkoJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydBdXRoRXZlbnQnXSkpIHsKCQkJCQkvLyBUaGUgZXZlbnQgdG8gYmUgdXNlZCB0byB0cmlnZ2VyIHRoZSBhdXRob3JpemF0aW9uIHRoYXQgaXMgcmVxdWlyZWQgdG8gYWNjZXNzIGVuY3J5cHRpb24ga2V5cyB1c2VkIGJ5IHRoaXMgZmlsdGVyLgoJCQkJCSRvdXQgLj0gJyAvQXV0aEV2ZW50IC8nLiR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnQXV0aEV2ZW50J107CgkJCQl9IGVsc2UgewoJCQkJCSRvdXQgLj0gJyAvQXV0aEV2ZW50IC9Eb2NPcGVuJzsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ11bJ0xlbmd0aCddKSBBTkQgIWVtcHR5KCR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnTGVuZ3RoJ10pKSB7CgkJCQkJLy8gVGhlIGJpdCBsZW5ndGggb2YgdGhlIGVuY3J5cHRpb24ga2V5LgoJCQkJCSRvdXQgLj0gJyAvTGVuZ3RoICcuJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydMZW5ndGgnXTsKCQkJCX0KCQkJCSRvdXQgLj0gJyA+PiA+Pic7CgkJCX0KCQkJLy8gVGhlIG5hbWUgb2YgdGhlIGNyeXB0IGZpbHRlciB0aGF0IHNoYWxsIGJlIHVzZWQgYnkgZGVmYXVsdCB3aGVuIGRlY3J5cHRpbmcgc3RyZWFtcy4KCQkJJG91dCAuPSAnIC9TdG1GIC8nLiR0aGlzLT5lbmNyeXB0ZGF0YVsnU3RtRiddOwoJCQkvLyBUaGUgbmFtZSBvZiB0aGUgY3J5cHQgZmlsdGVyIHRoYXQgc2hhbGwgYmUgdXNlZCB3aGVuIGRlY3J5cHRpbmcgYWxsIHN0cmluZ3MgaW4gdGhlIGRvY3VtZW50LgoJCQkkb3V0IC49ICcgL1N0ckYgLycuJHRoaXMtPmVuY3J5cHRkYXRhWydTdHJGJ107CgkJCWlmIChpc3NldCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0VGRiddKSBBTkQgIWVtcHR5KCR0aGlzLT5lbmNyeXB0ZGF0YVsnRUZGJ10pKSB7CgkJCQkvLyBUaGUgbmFtZSBvZiB0aGUgY3J5cHQgZmlsdGVyIHRoYXQgc2hhbGwgYmUgdXNlZCB3aGVuIGVuY3J5cHRpbmcgZW1iZWRkZWQgZmlsZSBzdHJlYW1zIHRoYXQgZG8gbm90IGhhdmUgdGhlaXIgb3duIGNyeXB0IGZpbHRlciBzcGVjaWZpZXIuCgkJCQkkb3V0IC49ICcgL0VGRiAvJy4kdGhpcy0+ZW5jcnlwdGRhdGFbJyddOwoJCQl9CgkJfQoJCS8vIEFkZGl0aW9uYWwgZW5jcnlwdGlvbiBkaWN0aW9uYXJ5IGVudHJpZXMgZm9yIHRoZSBzdGFuZGFyZCBzZWN1cml0eSBoYW5kbGVyCgkJaWYgKCR0aGlzLT5lbmNyeXB0ZGF0YVsncHVia2V5J10pIHsKCQkJaWYgKCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1YnXSA8IDQpIEFORCBpc3NldCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1JlY2lwaWVudHMnXSkgQU5EICFlbXB0eSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1JlY2lwaWVudHMnXSkpIHsKCQkJCSRvdXQgLj0gJyAvUmVjaXBpZW50cyBbJzsKCQkJCWZvcmVhY2ggKCR0aGlzLT5lbmNyeXB0ZGF0YVsnUmVjaXBpZW50cyddIGFzICRyZWMpIHsKCQkJCQkkb3V0IC49ICcgPCcuJHJlYy4nPic7CgkJCQl9CgkJCQkkb3V0IC49ICcgXSc7CgkJCX0KCQl9IGVsc2UgewoJCQkkb3V0IC49ICcgL1InOwoJCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydWJ10gPT0gNSkgeyAvLyBBRVMtMjU2CgkJCQkkb3V0IC49ICcgNSc7CgkJCQkkb3V0IC49ICcgL09FICgnLlRDUERGX1NUQVRJQzo6X2VzY2FwZSgkdGhpcy0+ZW5jcnlwdGRhdGFbJ09FJ10pLicpJzsKCQkJCSRvdXQgLj0gJyAvVUUgKCcuVENQREZfU1RBVElDOjpfZXNjYXBlKCR0aGlzLT5lbmNyeXB0ZGF0YVsnVUUnXSkuJyknOwoJCQkJJG91dCAuPSAnIC9QZXJtcyAoJy5UQ1BERl9TVEFUSUM6Ol9lc2NhcGUoJHRoaXMtPmVuY3J5cHRkYXRhWydwZXJtcyddKS4nKSc7CgkJCX0gZWxzZWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ1YnXSA9PSA0KSB7IC8vIEFFUy0xMjgKCQkJCSRvdXQgLj0gJyA0JzsKCQkJfSBlbHNlaWYgKCR0aGlzLT5lbmNyeXB0ZGF0YVsnViddIDwgMikgeyAvLyBSQy00MAoJCQkJJG91dCAuPSAnIDInOwoJCQl9IGVsc2UgeyAvLyBSQy0xMjgKCQkJCSRvdXQgLj0gJyAzJzsKCQkJfQoJCQkkb3V0IC49ICcgL08gKCcuVENQREZfU1RBVElDOjpfZXNjYXBlKCR0aGlzLT5lbmNyeXB0ZGF0YVsnTyddKS4nKSc7CgkJCSRvdXQgLj0gJyAvVSAoJy5UQ1BERl9TVEFUSUM6Ol9lc2NhcGUoJHRoaXMtPmVuY3J5cHRkYXRhWydVJ10pLicpJzsKCQkJJG91dCAuPSAnIC9QICcuJHRoaXMtPmVuY3J5cHRkYXRhWydQJ107CgkJCWlmIChpc3NldCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0VuY3J5cHRNZXRhZGF0YSddKSBBTkQgKCEkdGhpcy0+ZW5jcnlwdGRhdGFbJ0VuY3J5cHRNZXRhZGF0YSddKSkgewoJCQkJJG91dCAuPSAnIC9FbmNyeXB0TWV0YWRhdGEgZmFsc2UnOwoJCQl9IGVsc2UgewoJCQkJJG91dCAuPSAnIC9FbmNyeXB0TWV0YWRhdGEgdHJ1ZSc7CgkJCX0KCQl9CgkJJG91dCAuPSAnID4+JzsKCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJJHRoaXMtPl9vdXQoJG91dCk7Cgl9CgoJLyoqCgkgKiBDb21wdXRlIFUgdmFsdWUgKHVzZWQgZm9yIGVuY3J5cHRpb24pCgkgKiBAcmV0dXJuIHN0cmluZyBVIHZhbHVlCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4wLjAwMCAoMjAwOC0wMS0wMikKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfVXZhbHVlKCkgewoJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA9PSAwKSB7IC8vIFJDNC00MAoJCQlyZXR1cm4gVENQREZfU1RBVElDOjpfUkM0KCR0aGlzLT5lbmNyeXB0ZGF0YVsna2V5J10sIFRDUERGX1NUQVRJQzo6JGVuY19wYWRkaW5nLCAkdGhpcy0+bGFzdF9lbmNfa2V5LCAkdGhpcy0+bGFzdF9lbmNfa2V5X2MpOwoJCX0gZWxzZWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA8IDMpIHsgLy8gUkM0LTEyOCwgQUVTLTEyOAoJCQkkdG1wID0gVENQREZfU1RBVElDOjpfbWQ1XzE2KFRDUERGX1NUQVRJQzo6JGVuY19wYWRkaW5nLiR0aGlzLT5lbmNyeXB0ZGF0YVsnZmlsZWlkJ10pOwoJCQkkZW5jID0gVENQREZfU1RBVElDOjpfUkM0KCR0aGlzLT5lbmNyeXB0ZGF0YVsna2V5J10sICR0bXAsICR0aGlzLT5sYXN0X2VuY19rZXksICR0aGlzLT5sYXN0X2VuY19rZXlfYyk7CgkJCSRsZW4gPSBzdHJsZW4oJHRtcCk7CgkJCWZvciAoJGkgPSAxOyAkaSA8PSAxOTsgKyskaSkgewoJCQkJJGVrID0gJyc7CgkJCQlmb3IgKCRqID0gMDsgJGogPCAkbGVuOyArKyRqKSB7CgkJCQkJJGVrIC49IGNocihvcmQoJHRoaXMtPmVuY3J5cHRkYXRhWydrZXknXVskal0pIF4gJGkpOwoJCQkJfQoJCQkJJGVuYyA9IFRDUERGX1NUQVRJQzo6X1JDNCgkZWssICRlbmMsICR0aGlzLT5sYXN0X2VuY19rZXksICR0aGlzLT5sYXN0X2VuY19rZXlfYyk7CgkJCX0KCQkJJGVuYyAuPSBzdHJfcmVwZWF0KCJceDAwIiwgMTYpOwoJCQlyZXR1cm4gc3Vic3RyKCRlbmMsIDAsIDMyKTsKCQl9IGVsc2VpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydtb2RlJ10gPT0gMykgeyAvLyBBRVMtMjU2CgkJCSRzZWVkID0gVENQREZfU1RBVElDOjpfbWQ1XzE2KFRDUERGX1NUQVRJQzo6Z2V0UmFuZG9tU2VlZCgpKTsKCQkJLy8gVXNlciBWYWxpZGF0aW9uIFNhbHQKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydVVlMnXSA9IHN1YnN0cigkc2VlZCwgMCwgOCk7CgkJCS8vIFVzZXIgS2V5IFNhbHQKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydVS1MnXSA9IHN1YnN0cigkc2VlZCwgOCwgMTYpOwoJCQlyZXR1cm4gaGFzaCgnc2hhMjU2JywgJHRoaXMtPmVuY3J5cHRkYXRhWyd1c2VyX3Bhc3N3b3JkJ10uJHRoaXMtPmVuY3J5cHRkYXRhWydVVlMnXSwgdHJ1ZSkuJHRoaXMtPmVuY3J5cHRkYXRhWydVVlMnXS4kdGhpcy0+ZW5jcnlwdGRhdGFbJ1VLUyddOwoJCX0KCX0KCgkvKioKCSAqIENvbXB1dGUgVUUgdmFsdWUgKHVzZWQgZm9yIGVuY3J5cHRpb24pCgkgKiBAcmV0dXJuIHN0cmluZyBVRSB2YWx1ZQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4wMDYgKDIwMTAtMTAtMTkpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX1VFdmFsdWUoKSB7CgkJJGhhc2hrZXkgPSBoYXNoKCdzaGEyNTYnLCAkdGhpcy0+ZW5jcnlwdGRhdGFbJ3VzZXJfcGFzc3dvcmQnXS4kdGhpcy0+ZW5jcnlwdGRhdGFbJ1VLUyddLCB0cnVlKTsKCQkkaXYgPSBzdHJfcmVwZWF0KCJceDAwIiwgbWNyeXB0X2dldF9pdl9zaXplKE1DUllQVF9SSUpOREFFTF8xMjgsIE1DUllQVF9NT0RFX0NCQykpOwoJCXJldHVybiBtY3J5cHRfZW5jcnlwdChNQ1JZUFRfUklKTkRBRUxfMTI4LCAkaGFzaGtleSwgJHRoaXMtPmVuY3J5cHRkYXRhWydrZXknXSwgTUNSWVBUX01PREVfQ0JDLCAkaXYpOwoJfQoKCS8qKgoJICogQ29tcHV0ZSBPIHZhbHVlICh1c2VkIGZvciBlbmNyeXB0aW9uKQoJICogQHJldHVybiBzdHJpbmcgTyB2YWx1ZQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX092YWx1ZSgpIHsKCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydtb2RlJ10gPCAzKSB7IC8vIFJDNC00MCwgUkM0LTEyOCwgQUVTLTEyOAoJCQkkdG1wID0gVENQREZfU1RBVElDOjpfbWQ1XzE2KCR0aGlzLT5lbmNyeXB0ZGF0YVsnb3duZXJfcGFzc3dvcmQnXSk7CgkJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA+IDApIHsKCQkJCWZvciAoJGkgPSAwOyAkaSA8IDUwOyArKyRpKSB7CgkJCQkJJHRtcCA9IFRDUERGX1NUQVRJQzo6X21kNV8xNigkdG1wKTsKCQkJCX0KCQkJfQoJCQkkb3duZXJfa2V5ID0gc3Vic3RyKCR0bXAsIDAsICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0xlbmd0aCddIC8gOCkpOwoJCQkkZW5jID0gVENQREZfU1RBVElDOjpfUkM0KCRvd25lcl9rZXksICR0aGlzLT5lbmNyeXB0ZGF0YVsndXNlcl9wYXNzd29yZCddLCAkdGhpcy0+bGFzdF9lbmNfa2V5LCAkdGhpcy0+bGFzdF9lbmNfa2V5X2MpOwoJCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydtb2RlJ10gPiAwKSB7CgkJCQkkbGVuID0gc3RybGVuKCRvd25lcl9rZXkpOwoJCQkJZm9yICgkaSA9IDE7ICRpIDw9IDE5OyArKyRpKSB7CgkJCQkJJGVrID0gJyc7CgkJCQkJZm9yICgkaiA9IDA7ICRqIDwgJGxlbjsgKyskaikgewoJCQkJCQkkZWsgLj0gY2hyKG9yZCgkb3duZXJfa2V5WyRqXSkgXiAkaSk7CgkJCQkJfQoJCQkJCSRlbmMgPSBUQ1BERl9TVEFUSUM6Ol9SQzQoJGVrLCAkZW5jLCAkdGhpcy0+bGFzdF9lbmNfa2V5LCAkdGhpcy0+bGFzdF9lbmNfa2V5X2MpOwoJCQkJfQoJCQl9CgkJCXJldHVybiAkZW5jOwoJCX0gZWxzZWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA9PSAzKSB7IC8vIEFFUy0yNTYKCQkJJHNlZWQgPSBUQ1BERl9TVEFUSUM6Ol9tZDVfMTYoVENQREZfU1RBVElDOjpnZXRSYW5kb21TZWVkKCkpOwoJCQkvLyBPd25lciBWYWxpZGF0aW9uIFNhbHQKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydPVlMnXSA9IHN1YnN0cigkc2VlZCwgMCwgOCk7CgkJCS8vIE93bmVyIEtleSBTYWx0CgkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnT0tTJ10gPSBzdWJzdHIoJHNlZWQsIDgsIDE2KTsKCQkJcmV0dXJuIGhhc2goJ3NoYTI1NicsICR0aGlzLT5lbmNyeXB0ZGF0YVsnb3duZXJfcGFzc3dvcmQnXS4kdGhpcy0+ZW5jcnlwdGRhdGFbJ09WUyddLiR0aGlzLT5lbmNyeXB0ZGF0YVsnVSddLCB0cnVlKS4kdGhpcy0+ZW5jcnlwdGRhdGFbJ09WUyddLiR0aGlzLT5lbmNyeXB0ZGF0YVsnT0tTJ107CgkJfQoJfQoKCS8qKgoJICogQ29tcHV0ZSBPRSB2YWx1ZSAodXNlZCBmb3IgZW5jcnlwdGlvbikKCSAqIEByZXR1cm4gc3RyaW5nIE9FIHZhbHVlCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwNiAoMjAxMC0xMC0xOSkKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfT0V2YWx1ZSgpIHsKCQkkaGFzaGtleSA9IGhhc2goJ3NoYTI1NicsICR0aGlzLT5lbmNyeXB0ZGF0YVsnb3duZXJfcGFzc3dvcmQnXS4kdGhpcy0+ZW5jcnlwdGRhdGFbJ09LUyddLiR0aGlzLT5lbmNyeXB0ZGF0YVsnVSddLCB0cnVlKTsKCQkkaXYgPSBzdHJfcmVwZWF0KCJceDAwIiwgbWNyeXB0X2dldF9pdl9zaXplKE1DUllQVF9SSUpOREFFTF8xMjgsIE1DUllQVF9NT0RFX0NCQykpOwoJCXJldHVybiBtY3J5cHRfZW5jcnlwdChNQ1JZUFRfUklKTkRBRUxfMTI4LCAkaGFzaGtleSwgJHRoaXMtPmVuY3J5cHRkYXRhWydrZXknXSwgTUNSWVBUX01PREVfQ0JDLCAkaXYpOwoJfQoKCS8qKgoJICogQ29udmVydCBwYXNzd29yZCBmb3IgQUVTLTI1NiBlbmNyeXB0aW9uIG1vZGUKCSAqIEBwYXJhbSAkcGFzc3dvcmQgKHN0cmluZykgcGFzc3dvcmQKCSAqIEByZXR1cm4gc3RyaW5nIHBhc3N3b3JkCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwNiAoMjAxMC0xMC0xOSkKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfZml4QUVTMjU2UGFzc3dvcmQoJHBhc3N3b3JkKSB7CgkJJHBzdyA9ICcnOyAvLyBwYXNzd29yZCB0byBiZSByZXR1cm5lZAoJCSRwc3dfYXJyYXkgPSBUQ1BERl9GT05UUzo6dXRmOEJpZGkoVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCRwYXNzd29yZCwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KSwgJHBhc3N3b3JkLCAkdGhpcy0+cnRsLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCWZvcmVhY2ggKCRwc3dfYXJyYXkgYXMgJGMpIHsKCQkJJHBzdyAuPSBUQ1BERl9GT05UUzo6dW5pY2hyKCRjLCAkdGhpcy0+aXN1bmljb2RlKTsKCQl9CgkJcmV0dXJuIHN1YnN0cigkcHN3LCAwLCAxMjcpOwoJfQoKCS8qKgoJICogQ29tcHV0ZSBlbmNyeXB0aW9uIGtleQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX2dlbmVyYXRlZW5jcnlwdGlvbmtleSgpIHsKCQkka2V5Ynl0ZWxlbiA9ICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ0xlbmd0aCddIC8gOCk7CgkJaWYgKCEkdGhpcy0+ZW5jcnlwdGRhdGFbJ3B1YmtleSddKSB7IC8vIHN0YW5kYXJkIG1vZGUKCQkJaWYgKCR0aGlzLT5lbmNyeXB0ZGF0YVsnbW9kZSddID09IDMpIHsgLy8gQUVTLTI1NgoJCQkJLy8gZ2VuZXJhdGUgMjU2IGJpdCByYW5kb20ga2V5CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ2tleSddID0gc3Vic3RyKGhhc2goJ3NoYTI1NicsIFRDUERGX1NUQVRJQzo6Z2V0UmFuZG9tU2VlZCgpLCB0cnVlKSwgMCwgJGtleWJ5dGVsZW4pOwoJCQkJLy8gdHJ1bmNhdGUgcGFzc3dvcmRzCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ3VzZXJfcGFzc3dvcmQnXSA9ICR0aGlzLT5fZml4QUVTMjU2UGFzc3dvcmQoJHRoaXMtPmVuY3J5cHRkYXRhWyd1c2VyX3Bhc3N3b3JkJ10pOwoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydvd25lcl9wYXNzd29yZCddID0gJHRoaXMtPl9maXhBRVMyNTZQYXNzd29yZCgkdGhpcy0+ZW5jcnlwdGRhdGFbJ293bmVyX3Bhc3N3b3JkJ10pOwoJCQkJLy8gQ29tcHV0ZSBVIHZhbHVlCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1UnXSA9ICR0aGlzLT5fVXZhbHVlKCk7CgkJCQkvLyBDb21wdXRlIFVFIHZhbHVlCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1VFJ10gPSAkdGhpcy0+X1VFdmFsdWUoKTsKCQkJCS8vIENvbXB1dGUgTyB2YWx1ZQoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydPJ10gPSAkdGhpcy0+X092YWx1ZSgpOwoJCQkJLy8gQ29tcHV0ZSBPRSB2YWx1ZQoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydPRSddID0gJHRoaXMtPl9PRXZhbHVlKCk7CgkJCQkvLyBDb21wdXRlIFAgdmFsdWUKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnUCddID0gJHRoaXMtPmVuY3J5cHRkYXRhWydwcm90ZWN0aW9uJ107CgkJCQkvLyBDb21wdXRpbmcgdGhlIGVuY3J5cHRpb24gZGljdGlvbmFyeSdzIFBlcm1zIChwZXJtaXNzaW9ucykgdmFsdWUKCQkJCSRwZXJtcyA9IFRDUERGX1NUQVRJQzo6Z2V0RW5jUGVybWlzc2lvbnNTdHJpbmcoJHRoaXMtPmVuY3J5cHRkYXRhWydwcm90ZWN0aW9uJ10pOyAvLyBieXRlcyAwLTMKCQkJCSRwZXJtcyAuPSBjaHIoMjU1KS5jaHIoMjU1KS5jaHIoMjU1KS5jaHIoMjU1KTsgLy8gYnl0ZXMgNC03CgkJCQlpZiAoaXNzZXQoJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydFbmNyeXB0TWV0YWRhdGEnXSkgQU5EICghJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydFbmNyeXB0TWV0YWRhdGEnXSkpIHsgLy8gYnl0ZSA4CgkJCQkJJHBlcm1zIC49ICdGJzsKCQkJCX0gZWxzZSB7CgkJCQkJJHBlcm1zIC49ICdUJzsKCQkJCX0KCQkJCSRwZXJtcyAuPSAnYWRiJzsgLy8gYnl0ZXMgOS0xMQoJCQkJJHBlcm1zIC49ICduaWNrJzsgLy8gYnl0ZXMgMTItMTUKCQkJCSRpdiA9IHN0cl9yZXBlYXQoIlx4MDAiLCBtY3J5cHRfZ2V0X2l2X3NpemUoTUNSWVBUX1JJSk5EQUVMXzEyOCwgTUNSWVBUX01PREVfRUNCKSk7CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ3Blcm1zJ10gPSBtY3J5cHRfZW5jcnlwdChNQ1JZUFRfUklKTkRBRUxfMTI4LCAkdGhpcy0+ZW5jcnlwdGRhdGFbJ2tleSddLCAkcGVybXMsIE1DUllQVF9NT0RFX0VDQiwgJGl2KTsKCQkJfSBlbHNlIHsgLy8gUkM0LTQwLCBSQzQtMTI4LCBBRVMtMTI4CgkJCQkvLyBQYWQgcGFzc3dvcmRzCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ3VzZXJfcGFzc3dvcmQnXSA9IHN1YnN0cigkdGhpcy0+ZW5jcnlwdGRhdGFbJ3VzZXJfcGFzc3dvcmQnXS5UQ1BERl9TVEFUSUM6OiRlbmNfcGFkZGluZywgMCwgMzIpOwoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydvd25lcl9wYXNzd29yZCddID0gc3Vic3RyKCR0aGlzLT5lbmNyeXB0ZGF0YVsnb3duZXJfcGFzc3dvcmQnXS5UQ1BERl9TVEFUSUM6OiRlbmNfcGFkZGluZywgMCwgMzIpOwoJCQkJLy8gQ29tcHV0ZSBPIHZhbHVlCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ08nXSA9ICR0aGlzLT5fT3ZhbHVlKCk7CgkJCQkvLyBnZXQgZGVmYXVsdCBwZXJtaXNzaW9ucyAocmV2ZXJzZSBieXRlIG9yZGVyKQoJCQkJJHBlcm1pc3Npb25zID0gVENQREZfU1RBVElDOjpnZXRFbmNQZXJtaXNzaW9uc1N0cmluZygkdGhpcy0+ZW5jcnlwdGRhdGFbJ3Byb3RlY3Rpb24nXSk7CgkJCQkvLyBDb21wdXRlIGVuY3J5cHRpb24ga2V5CgkJCQkkdG1wID0gVENQREZfU1RBVElDOjpfbWQ1XzE2KCR0aGlzLT5lbmNyeXB0ZGF0YVsndXNlcl9wYXNzd29yZCddLiR0aGlzLT5lbmNyeXB0ZGF0YVsnTyddLiRwZXJtaXNzaW9ucy4kdGhpcy0+ZW5jcnlwdGRhdGFbJ2ZpbGVpZCddKTsKCQkJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA+IDApIHsKCQkJCQlmb3IgKCRpID0gMDsgJGkgPCA1MDsgKyskaSkgewoJCQkJCQkkdG1wID0gVENQREZfU1RBVElDOjpfbWQ1XzE2KHN1YnN0cigkdG1wLCAwLCAka2V5Ynl0ZWxlbikpOwoJCQkJCX0KCQkJCX0KCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsna2V5J10gPSBzdWJzdHIoJHRtcCwgMCwgJGtleWJ5dGVsZW4pOwoJCQkJLy8gQ29tcHV0ZSBVIHZhbHVlCgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1UnXSA9ICR0aGlzLT5fVXZhbHVlKCk7CgkJCQkvLyBDb21wdXRlIFAgdmFsdWUKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnUCddID0gJHRoaXMtPmVuY3J5cHRkYXRhWydwcm90ZWN0aW9uJ107CgkJCX0KCQl9IGVsc2UgeyAvLyBQdWJsaWMtS2V5IG1vZGUKCQkJLy8gcmFuZG9tIDIwLWJ5dGUgc2VlZAoJCQkkc2VlZCA9IHNoYTEoVENQREZfU1RBVElDOjpnZXRSYW5kb21TZWVkKCksIHRydWUpOwoJCQkkcmVjaXBpZW50X2J5dGVzID0gJyc7CgkJCWZvcmVhY2ggKCR0aGlzLT5lbmNyeXB0ZGF0YVsncHVia2V5cyddIGFzICRwdWJrZXkpIHsKCQkJCS8vIGZvciBlYWNoIHB1YmxpYyBjZXJ0aWZpY2F0ZQoJCQkJaWYgKGlzc2V0KCRwdWJrZXlbJ3AnXSkpIHsKCQkJCQkkcGtwcm90ZWN0aW9uID0gVENQREZfU1RBVElDOjpnZXRVc2VyUGVybWlzc2lvbkNvZGUoJHB1YmtleVsncCddLCAkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSk7CgkJCQl9IGVsc2UgewoJCQkJCSRwa3Byb3RlY3Rpb24gPSAkdGhpcy0+ZW5jcnlwdGRhdGFbJ3Byb3RlY3Rpb24nXTsKCQkJCX0KCQkJCS8vIGdldCBkZWZhdWx0IHBlcm1pc3Npb25zIChyZXZlcnNlIGJ5dGUgb3JkZXIpCgkJCQkkcGtwZXJtaXNzaW9ucyA9IFRDUERGX1NUQVRJQzo6Z2V0RW5jUGVybWlzc2lvbnNTdHJpbmcoJHBrcHJvdGVjdGlvbik7CgkJCQkvLyBlbnZlbG9wZSBkYXRhCgkJCQkkZW52ZWxvcGUgPSAkc2VlZC4kcGtwZXJtaXNzaW9uczsKCQkJCS8vIHdyaXRlIHRoZSBlbnZlbG9wZSBkYXRhIHRvIGEgdGVtcG9yYXJ5IGZpbGUKCQkJCSR0ZW1wa2V5ZmlsZSA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2tleScpOwoJCQkJJGYgPSBmb3BlbigkdGVtcGtleWZpbGUsICd3YicpOwoJCQkJaWYgKCEkZikgewoJCQkJCSR0aGlzLT5FcnJvcignVW5hYmxlIHRvIGNyZWF0ZSB0ZW1wb3Jhcnkga2V5IGZpbGU6ICcuJHRlbXBrZXlmaWxlKTsKCQkJCX0KCQkJCSRlbnZlbG9wZV9sZW5ndGggPSBzdHJsZW4oJGVudmVsb3BlKTsKCQkJCWZ3cml0ZSgkZiwgJGVudmVsb3BlLCAkZW52ZWxvcGVfbGVuZ3RoKTsKCQkJCWZjbG9zZSgkZik7CgkJCQkkdGVtcGVuY2ZpbGUgPSBUQ1BERl9TVEFUSUM6OmdldE9iakZpbGVuYW1lKCdlbmMnKTsKCQkJCWlmICghb3BlbnNzbF9wa2NzN19lbmNyeXB0KCR0ZW1wa2V5ZmlsZSwgJHRlbXBlbmNmaWxlLCAkcHVia2V5WydjJ10sIGFycmF5KCksIFBLQ1M3X0JJTkFSWSB8IFBLQ1M3X0RFVEFDSEVEKSkgewoJCQkJCSR0aGlzLT5FcnJvcignVW5hYmxlIHRvIGVuY3J5cHQgdGhlIGZpbGU6ICcuJHRlbXBrZXlmaWxlKTsKCQkJCX0KCQkJCXVubGluaygkdGVtcGtleWZpbGUpOwoJCQkJLy8gcmVhZCBlbmNyeXB0aW9uIHNpZ25hdHVyZQoJCQkJJHNpZ25hdHVyZSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wZW5jZmlsZSwgZmFsc2UsIG51bGwsICRlbnZlbG9wZV9sZW5ndGgpOwoJCQkJdW5saW5rKCR0ZW1wZW5jZmlsZSk7CgkJCQkvLyBleHRyYWN0IHNpZ25hdHVyZQoJCQkJJHNpZ25hdHVyZSA9IHN1YnN0cigkc2lnbmF0dXJlLCBzdHJwb3MoJHNpZ25hdHVyZSwgJ0NvbnRlbnQtRGlzcG9zaXRpb24nKSk7CgkJCQkkdG1wYXJyID0gZXhwbG9kZSgiXG5cbiIsICRzaWduYXR1cmUpOwoJCQkJJHNpZ25hdHVyZSA9IHRyaW0oJHRtcGFyclsxXSk7CgkJCQl1bnNldCgkdG1wYXJyKTsKCQkJCS8vIGRlY29kZSBzaWduYXR1cmUKCQkJCSRzaWduYXR1cmUgPSBiYXNlNjRfZGVjb2RlKCRzaWduYXR1cmUpOwoJCQkJLy8gY29udmVydCBzaWduYXR1cmUgdG8gaGV4CgkJCQkkaGV4c2lnbmF0dXJlID0gY3VycmVudCh1bnBhY2soJ0gqJywgJHNpZ25hdHVyZSkpOwoJCQkJLy8gc3RvcmUgc2lnbmF0dXJlIG9uIHJlY2lwaWVudHMgYXJyYXkKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnUmVjaXBpZW50cyddW10gPSAkaGV4c2lnbmF0dXJlOwoJCQkJLy8gVGhlIGJ5dGVzIG9mIGVhY2ggaXRlbSBpbiB0aGUgUmVjaXBpZW50cyBhcnJheSBvZiBQS0NTIzcgb2JqZWN0cyBpbiB0aGUgb3JkZXIgaW4gd2hpY2ggdGhleSBhcHBlYXIgaW4gdGhlIGFycmF5CgkJCQkkcmVjaXBpZW50X2J5dGVzIC49ICRzaWduYXR1cmU7CgkJCX0KCQkJLy8gY2FsY3VsYXRlIGVuY3J5cHRpb24ga2V5CgkJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ21vZGUnXSA9PSAzKSB7IC8vIEFFUy0yNTYKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsna2V5J10gPSBzdWJzdHIoaGFzaCgnc2hhMjU2JywgJHNlZWQuJHJlY2lwaWVudF9ieXRlcywgdHJ1ZSksIDAsICRrZXlieXRlbGVuKTsKCQkJfSBlbHNlIHsgLy8gUkM0LTQwLCBSQzQtMTI4LCBBRVMtMTI4CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ2tleSddID0gc3Vic3RyKHNoYTEoJHNlZWQuJHJlY2lwaWVudF9ieXRlcywgdHJ1ZSksIDAsICRrZXlieXRlbGVuKTsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIFNldCBkb2N1bWVudCBwcm90ZWN0aW9uCgkgKiBSZW1hcms6IHRoZSBwcm90ZWN0aW9uIGFnYWluc3QgbW9kaWZpY2F0aW9uIGlzIGZvciBwZW9wbGUgd2hvIGhhdmUgdGhlIGZ1bGwgQWNyb2JhdCBwcm9kdWN0LgoJICogSWYgeW91IGRvbid0IHNldCBhbnkgcGFzc3dvcmQsIHRoZSBkb2N1bWVudCB3aWxsIG9wZW4gYXMgdXN1YWwuIElmIHlvdSBzZXQgYSB1c2VyIHBhc3N3b3JkLCB0aGUgUERGIHZpZXdlciB3aWxsIGFzayBmb3IgaXQgYmVmb3JlIGRpc3BsYXlpbmcgdGhlIGRvY3VtZW50LiBUaGUgbWFzdGVyIHBhc3N3b3JkLCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgdXNlciBvbmUsIGNhbiBiZSB1c2VkIHRvIGdldCBmdWxsIGFjY2Vzcy4KCSAqIE5vdGU6IHByb3RlY3RpbmcgYSBkb2N1bWVudCByZXF1aXJlcyB0byBlbmNyeXB0IGl0LCB3aGljaCBpbmNyZWFzZXMgdGhlIHByb2Nlc3NpbmcgdGltZSBhIGxvdC4gVGhpcyBjYW4gY2F1c2UgYSBQSFAgdGltZS1vdXQgaW4gc29tZSBjYXNlcywgZXNwZWNpYWxseSBpZiB0aGUgZG9jdW1lbnQgY29udGFpbnMgaW1hZ2VzIG9yIGZvbnRzLgoJICogQHBhcmFtICRwZXJtaXNzaW9ucyAoQXJyYXkpIHRoZSBzZXQgb2YgcGVybWlzc2lvbnMgKHNwZWNpZnkgdGhlIG9uZXMgeW91IHdhbnQgdG8gYmxvY2spOjx1bD48bGk+cHJpbnQgOiBQcmludCB0aGUgZG9jdW1lbnQ7PC9saT48bGk+bW9kaWZ5IDogTW9kaWZ5IHRoZSBjb250ZW50cyBvZiB0aGUgZG9jdW1lbnQgYnkgb3BlcmF0aW9ucyBvdGhlciB0aGFuIHRob3NlIGNvbnRyb2xsZWQgYnkgJ2ZpbGwtZm9ybXMnLCAnZXh0cmFjdCcgYW5kICdhc3NlbWJsZSc7PC9saT48bGk+Y29weSA6IENvcHkgb3Igb3RoZXJ3aXNlIGV4dHJhY3QgdGV4dCBhbmQgZ3JhcGhpY3MgZnJvbSB0aGUgZG9jdW1lbnQ7PC9saT48bGk+YW5ub3QtZm9ybXMgOiBBZGQgb3IgbW9kaWZ5IHRleHQgYW5ub3RhdGlvbnMsIGZpbGwgaW4gaW50ZXJhY3RpdmUgZm9ybSBmaWVsZHMsIGFuZCwgaWYgJ21vZGlmeScgaXMgYWxzbyBzZXQsIGNyZWF0ZSBvciBtb2RpZnkgaW50ZXJhY3RpdmUgZm9ybSBmaWVsZHMgKGluY2x1ZGluZyBzaWduYXR1cmUgZmllbGRzKTs8L2xpPjxsaT5maWxsLWZvcm1zIDogRmlsbCBpbiBleGlzdGluZyBpbnRlcmFjdGl2ZSBmb3JtIGZpZWxkcyAoaW5jbHVkaW5nIHNpZ25hdHVyZSBmaWVsZHMpLCBldmVuIGlmICdhbm5vdC1mb3JtcycgaXMgbm90IHNwZWNpZmllZDs8L2xpPjxsaT5leHRyYWN0IDogRXh0cmFjdCB0ZXh0IGFuZCBncmFwaGljcyAoaW4gc3VwcG9ydCBvZiBhY2Nlc3NpYmlsaXR5IHRvIHVzZXJzIHdpdGggZGlzYWJpbGl0aWVzIG9yIGZvciBvdGhlciBwdXJwb3Nlcyk7PC9saT48bGk+YXNzZW1ibGUgOiBBc3NlbWJsZSB0aGUgZG9jdW1lbnQgKGluc2VydCwgcm90YXRlLCBvciBkZWxldGUgcGFnZXMgYW5kIGNyZWF0ZSBib29rbWFya3Mgb3IgdGh1bWJuYWlsIGltYWdlcyksIGV2ZW4gaWYgJ21vZGlmeScgaXMgbm90IHNldDs8L2xpPjxsaT5wcmludC1oaWdoIDogUHJpbnQgdGhlIGRvY3VtZW50IHRvIGEgcmVwcmVzZW50YXRpb24gZnJvbSB3aGljaCBhIGZhaXRoZnVsIGRpZ2l0YWwgY29weSBvZiB0aGUgUERGIGNvbnRlbnQgY291bGQgYmUgZ2VuZXJhdGVkLiBXaGVuIHRoaXMgaXMgbm90IHNldCwgcHJpbnRpbmcgaXMgbGltaXRlZCB0byBhIGxvdy1sZXZlbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgYXBwZWFyYW5jZSwgcG9zc2libHkgb2YgZGVncmFkZWQgcXVhbGl0eS48L2xpPjxsaT5vd25lciA6IChpbnZlcnRlZCBsb2dpYyAtIG9ubHkgZm9yIHB1YmxpYy1rZXkpIHdoZW4gc2V0IHBlcm1pdHMgY2hhbmdlIG9mIGVuY3J5cHRpb24gYW5kIGVuYWJsZXMgYWxsIG90aGVyIHBlcm1pc3Npb25zLjwvbGk+PC91bD4KCSAqIEBwYXJhbSAkdXNlcl9wYXNzIChTdHJpbmcpIHVzZXIgcGFzc3dvcmQuIEVtcHR5IGJ5IGRlZmF1bHQuCgkgKiBAcGFyYW0gJG93bmVyX3Bhc3MgKFN0cmluZykgb3duZXIgcGFzc3dvcmQuIElmIG5vdCBzcGVjaWZpZWQsIGEgcmFuZG9tIHZhbHVlIGlzIHVzZWQuCgkgKiBAcGFyYW0gJG1vZGUgKGludCkgZW5jcnlwdGlvbiBzdHJlbmd0aDogMCA9IFJDNCA0MCBiaXQ7IDEgPSBSQzQgMTI4IGJpdDsgMiA9IEFFUyAxMjggYml0OyAzID0gQUVTIDI1NiBiaXQuCgkgKiBAcGFyYW0gJHB1YmtleXMgKFN0cmluZykgYXJyYXkgb2YgcmVjaXBpZW50cyBjb250YWluaW5nIHB1YmxpYy1rZXkgY2VydGlmaWNhdGVzICgnYycpIGFuZCBwZXJtaXNzaW9ucyAoJ3AnKS4gRm9yIGV4YW1wbGU6IGFycmF5KGFycmF5KCdjJyA9PiAnZmlsZTovLy4uL2V4YW1wbGVzL2RhdGEvY2VydC90Y3BkZi5jcnQnLCAncCcgPT4gYXJyYXkoJ3ByaW50JykpKQoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMC4wMDAgKDIwMDgtMDEtMDIpCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0UHJvdGVjdGlvbigkcGVybWlzc2lvbnM9YXJyYXkoJ3ByaW50JywgJ21vZGlmeScsICdjb3B5JywgJ2Fubm90LWZvcm1zJywgJ2ZpbGwtZm9ybXMnLCAnZXh0cmFjdCcsICdhc3NlbWJsZScsICdwcmludC1oaWdoJyksICR1c2VyX3Bhc3M9JycsICRvd25lcl9wYXNzPW51bGwsICRtb2RlPTAsICRwdWJrZXlzPW51bGwpIHsKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkvLyBlbmNyeXB0aW9uIGlzIG5vdCBhbGxvd2VkIGluIFBERi9BIG1vZGUKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ3Byb3RlY3Rpb24nXSA9IFRDUERGX1NUQVRJQzo6Z2V0VXNlclBlcm1pc3Npb25Db2RlKCRwZXJtaXNzaW9ucywgJG1vZGUpOwoJCWlmICgoJHB1YmtleXMgIT09IG51bGwpIEFORCAoaXNfYXJyYXkoJHB1YmtleXMpKSkgewoJCQkvLyBwdWJsaWMta2V5IG1vZGUKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydwdWJrZXlzJ10gPSAkcHVia2V5czsKCQkJaWYgKCRtb2RlID09IDApIHsKCQkJCS8vIHB1YmxpYy1LZXkgU2VjdXJpdHkgcmVxdWlyZXMgYXQgbGVhc3QgMTI4IGJpdAoJCQkJJG1vZGUgPSAxOwoJCQl9CgkJCWlmICghZnVuY3Rpb25fZXhpc3RzKCdvcGVuc3NsX3BrY3M3X2VuY3J5cHQnKSkgewoJCQkJJHRoaXMtPkVycm9yKCdQdWJsaWMtS2V5IFNlY3VyaXR5IHJlcXVpcmVzIG9wZW5zc2wgbGlicmFyeS4nKTsKCQkJfQoJCQkvLyBTZXQgUHVibGljLUtleSBmaWx0ZXIgKGF2YWlsYWJlIGFyZTogRW50cnVzdC5QUEtFRiwgQWRvYmUuUFBLTGl0ZSwgQWRvYmUuUHViU2VjKQoJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ3B1YmtleSddID0gdHJ1ZTsKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydGaWx0ZXInXSA9ICdBZG9iZS5QdWJTZWMnOwoJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0bUYnXSA9ICdEZWZhdWx0Q3J5cHRGaWx0ZXInOwoJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N0ckYnXSA9ICdEZWZhdWx0Q3J5cHRGaWx0ZXInOwoJCX0gZWxzZSB7CgkJCS8vIHN0YW5kYXJkIG1vZGUgKHBhc3N3b3JkIG1vZGUpCgkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsncHVia2V5J10gPSBmYWxzZTsKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydGaWx0ZXInXSA9ICdTdGFuZGFyZCc7CgkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnU3RtRiddID0gJ1N0ZENGJzsKCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydTdHJGJ10gPSAnU3RkQ0YnOwoJCX0KCQlpZiAoJG1vZGUgPiAxKSB7IC8vIEFFUwoJCQlpZiAoIWV4dGVuc2lvbl9sb2FkZWQoJ21jcnlwdCcpKSB7CgkJCQkkdGhpcy0+RXJyb3IoJ0FFUyBlbmNyeXB0aW9uIHJlcXVpcmVzIG1jcnlwdCBsaWJyYXJ5IChodHRwOi8vd3d3LnBocC5uZXQvbWFudWFsL2VuL21jcnlwdC5yZXF1aXJlbWVudHMucGhwKS4nKTsKCQkJfQoJCQlpZiAobWNyeXB0X2dldF9jaXBoZXJfbmFtZShNQ1JZUFRfUklKTkRBRUxfMTI4KSA9PT0gZmFsc2UpIHsKCQkJCSR0aGlzLT5FcnJvcignQUVTIGVuY3J5cHRpb24gcmVxdWlyZXMgTUNSWVBUX1JJSk5EQUVMXzEyOCBjeXBoZXIuJyk7CgkJCX0KCQkJaWYgKCgkbW9kZSA9PSAzKSBBTkQgIWZ1bmN0aW9uX2V4aXN0cygnaGFzaCcpKSB7CgkJCQkvLyB0aGUgSGFzaCBleHRlbnNpb24gcmVxdWlyZXMgbm8gZXh0ZXJuYWwgbGlicmFyaWVzIGFuZCBpcyBlbmFibGVkIGJ5IGRlZmF1bHQgYXMgb2YgUEhQIDUuMS4yLgoJCQkJJHRoaXMtPkVycm9yKCdBRVMgMjU2IGVuY3J5cHRpb24gcmVxdWlyZXMgSEFTSCBNZXNzYWdlIERpZ2VzdCBGcmFtZXdvcmsgKGh0dHA6Ly93d3cucGhwLm5ldC9tYW51YWwvZW4vYm9vay5oYXNoLnBocCkuJyk7CgkJCX0KCQl9CgkJaWYgKCRvd25lcl9wYXNzID09PSBudWxsKSB7CgkJCSRvd25lcl9wYXNzID0gbWQ1KFRDUERGX1NUQVRJQzo6Z2V0UmFuZG9tU2VlZCgpKTsKCQl9CgkJJHRoaXMtPmVuY3J5cHRkYXRhWyd1c2VyX3Bhc3N3b3JkJ10gPSAkdXNlcl9wYXNzOwoJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnb3duZXJfcGFzc3dvcmQnXSA9ICRvd25lcl9wYXNzOwoJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnbW9kZSddID0gJG1vZGU7CgkJc3dpdGNoICgkbW9kZSkgewoJCQljYXNlIDA6IHsgLy8gUkM0IDQwIGJpdAoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydWJ10gPSAxOwoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydMZW5ndGgnXSA9IDQwOwoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydDRk0nXSA9ICdWMic7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDE6IHsgLy8gUkM0IDEyOCBiaXQKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnViddID0gMjsKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnTGVuZ3RoJ10gPSAxMjg7CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ11bJ0NGTSddID0gJ1YyJzsKCQkJCWlmICgkdGhpcy0+ZW5jcnlwdGRhdGFbJ3B1YmtleSddKSB7CgkJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydTdWJGaWx0ZXInXSA9ICdhZGJlLnBrY3M3LnM0JzsKCQkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1JlY2lwaWVudHMnXSA9IGFycmF5KCk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDI6IHsgLy8gQUVTIDEyOCBiaXQKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnViddID0gNDsKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnTGVuZ3RoJ10gPSAxMjg7CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ11bJ0NGTSddID0gJ0FFU1YyJzsKCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnQ0YnXVsnTGVuZ3RoJ10gPSAxMjg7CgkJCQlpZiAoJHRoaXMtPmVuY3J5cHRkYXRhWydwdWJrZXknXSkgewoJCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnU3ViRmlsdGVyJ10gPSAnYWRiZS5wa2NzNy5zNSc7CgkJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydSZWNpcGllbnRzJ10gPSBhcnJheSgpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAzOiB7IC8vIEFFUyAyNTYgYml0CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1YnXSA9IDU7CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ0xlbmd0aCddID0gMjU2OwoJCQkJJHRoaXMtPmVuY3J5cHRkYXRhWydDRiddWydDRk0nXSA9ICdBRVNWMyc7CgkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ0NGJ11bJ0xlbmd0aCddID0gMjU2OwoJCQkJaWYgKCR0aGlzLT5lbmNyeXB0ZGF0YVsncHVia2V5J10pIHsKCQkJCQkkdGhpcy0+ZW5jcnlwdGRhdGFbJ1N1YkZpbHRlciddID0gJ2FkYmUucGtjczcuczUnOwoJCQkJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnUmVjaXBpZW50cyddID0gYXJyYXkoKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT5lbmNyeXB0ZWQgPSB0cnVlOwoJCSR0aGlzLT5lbmNyeXB0ZGF0YVsnZmlsZWlkJ10gPSBUQ1BERl9TVEFUSUM6OmNvbnZlcnRIZXhTdHJpbmdUb1N0cmluZygkdGhpcy0+ZmlsZV9pZCk7CgkJJHRoaXMtPl9nZW5lcmF0ZWVuY3J5cHRpb25rZXkoKTsKCX0KCgkvLyBFTkQgT0YgRU5DUllQVElPTiBGVU5DVElPTlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8vIFNUQVJUIFRSQU5TRk9STUFUSU9OUyBTRUNUSU9OIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBTdGFydHMgYSAyRCB0cmFuZm9ybWF0aW9uIHNhdmluZyBjdXJyZW50IGdyYXBoaWMgc3RhdGUuCgkgKiBUaGlzIGZ1bmN0aW9uIG11c3QgYmUgY2FsbGVkIGJlZm9yZSBzY2FsaW5nLCBtaXJyb3JpbmcsIHRyYW5zbGF0aW9uLCByb3RhdGlvbiBhbmQgc2tld2luZy4KCSAqIFVzZSBTdGFydFRyYW5zZm9ybSgpIGJlZm9yZSwgYW5kIFN0b3BUcmFuc2Zvcm0oKSBhZnRlciB0aGUgdHJhbnNmb3JtYXRpb25zIHRvIHJlc3RvcmUgdGhlIG5vcm1hbCBiZWhhdmlvci4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFN0YXJ0VHJhbnNmb3JtKCkgewoJCWlmICgkdGhpcy0+c3RhdGUgIT0gMikgewoJCQlyZXR1cm47CgkJfQoJCSR0aGlzLT5fb3V0U2F2ZUdyYXBoaWNzU3RhdGUoKTsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXVtdID0gc3RybGVuKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXVtdID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJCX0KCQkrKyR0aGlzLT50cmFuc2ZtYXRyaXhfa2V5OwoJCSR0aGlzLT50cmFuc2ZtYXRyaXhbJHRoaXMtPnRyYW5zZm1hdHJpeF9rZXldID0gYXJyYXkoKTsKCX0KCgkvKioKCSAqIFN0b3BzIGEgMkQgdHJhbmZvcm1hdGlvbiByZXN0b3JpbmcgcHJldmlvdXMgZ3JhcGhpYyBzdGF0ZS4KCSAqIFRoaXMgZnVuY3Rpb24gbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgc2NhbGluZywgbWlycm9yaW5nLCB0cmFuc2xhdGlvbiwgcm90YXRpb24gYW5kIHNrZXdpbmcuCgkgKiBVc2UgU3RhcnRUcmFuc2Zvcm0oKSBiZWZvcmUsIGFuZCBTdG9wVHJhbnNmb3JtKCkgYWZ0ZXIgdGhlIHRyYW5zZm9ybWF0aW9ucyB0byByZXN0b3JlIHRoZSBub3JtYWwgYmVoYXZpb3IuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wNykKCSAqIEBzZWUgU3RhcnRUcmFuc2Zvcm0oKSwgU3RvcFRyYW5zZm9ybSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTdG9wVHJhbnNmb3JtKCkgewoJCWlmICgkdGhpcy0+c3RhdGUgIT0gMikgewoJCQlyZXR1cm47CgkJfQoJCSR0aGlzLT5fb3V0UmVzdG9yZUdyYXBoaWNzU3RhdGUoKTsKCQlpZiAoaXNzZXQoJHRoaXMtPnRyYW5zZm1hdHJpeFskdGhpcy0+dHJhbnNmbWF0cml4X2tleV0pKSB7CgkJCWFycmF5X3BvcCgkdGhpcy0+dHJhbnNmbWF0cml4WyR0aGlzLT50cmFuc2ZtYXRyaXhfa2V5XSk7CgkJCS0tJHRoaXMtPnRyYW5zZm1hdHJpeF9rZXk7CgkJfQoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQlhcnJheV9wb3AoJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXSk7CgkJfSBlbHNlIHsKCQkJYXJyYXlfcG9wKCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdKTsKCQl9Cgl9CgkvKioKCSAqIEhvcml6b250YWwgU2NhbGluZy4KCSAqIEBwYXJhbSAkc194IChmbG9hdCkgc2NhbGluZyBmYWN0b3IgZm9yIHdpZHRoIGFzIHBlcmNlbnQuIDAgaXMgbm90IGFsbG93ZWQuCgkgKiBAcGFyYW0gJHggKGludCkgYWJzY2lzc2Egb2YgdGhlIHNjYWxpbmcgY2VudGVyLiBEZWZhdWx0IGlzIGN1cnJlbnQgeCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIG9yZGluYXRlIG9mIHRoZSBzY2FsaW5nIGNlbnRlci4gRGVmYXVsdCBpcyBjdXJyZW50IHkgcG9zaXRpb24KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNjYWxlWCgkc194LCAkeD0nJywgJHk9JycpIHsKCQkkdGhpcy0+U2NhbGUoJHNfeCwgMTAwLCAkeCwgJHkpOwoJfQoKCS8qKgoJICogVmVydGljYWwgU2NhbGluZy4KCSAqIEBwYXJhbSAkc195IChmbG9hdCkgc2NhbGluZyBmYWN0b3IgZm9yIGhlaWdodCBhcyBwZXJjZW50LiAwIGlzIG5vdCBhbGxvd2VkLgoJICogQHBhcmFtICR4IChpbnQpIGFic2Npc3NhIG9mIHRoZSBzY2FsaW5nIGNlbnRlci4gRGVmYXVsdCBpcyBjdXJyZW50IHggcG9zaXRpb24KCSAqIEBwYXJhbSAkeSAoaW50KSBvcmRpbmF0ZSBvZiB0aGUgc2NhbGluZyBjZW50ZXIuIERlZmF1bHQgaXMgY3VycmVudCB5IHBvc2l0aW9uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wNykKCSAqIEBzZWUgU3RhcnRUcmFuc2Zvcm0oKSwgU3RvcFRyYW5zZm9ybSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTY2FsZVkoJHNfeSwgJHg9JycsICR5PScnKSB7CgkJJHRoaXMtPlNjYWxlKDEwMCwgJHNfeSwgJHgsICR5KTsKCX0KCgkvKioKCSAqIFZlcnRpY2FsIGFuZCBob3Jpem9udGFsIHByb3BvcnRpb25hbCBTY2FsaW5nLgoJICogQHBhcmFtICRzIChmbG9hdCkgc2NhbGluZyBmYWN0b3IgZm9yIHdpZHRoIGFuZCBoZWlnaHQgYXMgcGVyY2VudC4gMCBpcyBub3QgYWxsb3dlZC4KCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgc2NhbGluZyBjZW50ZXIuIERlZmF1bHQgaXMgY3VycmVudCB4IHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgb3JkaW5hdGUgb2YgdGhlIHNjYWxpbmcgY2VudGVyLiBEZWZhdWx0IGlzIGN1cnJlbnQgeSBwb3NpdGlvbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2NhbGVYWSgkcywgJHg9JycsICR5PScnKSB7CgkJJHRoaXMtPlNjYWxlKCRzLCAkcywgJHgsICR5KTsKCX0KCgkvKioKCSAqIFZlcnRpY2FsIGFuZCBob3Jpem9udGFsIG5vbi1wcm9wb3J0aW9uYWwgU2NhbGluZy4KCSAqIEBwYXJhbSAkc194IChmbG9hdCkgc2NhbGluZyBmYWN0b3IgZm9yIHdpZHRoIGFzIHBlcmNlbnQuIDAgaXMgbm90IGFsbG93ZWQuCgkgKiBAcGFyYW0gJHNfeSAoZmxvYXQpIHNjYWxpbmcgZmFjdG9yIGZvciBoZWlnaHQgYXMgcGVyY2VudC4gMCBpcyBub3QgYWxsb3dlZC4KCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgc2NhbGluZyBjZW50ZXIuIERlZmF1bHQgaXMgY3VycmVudCB4IHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgb3JkaW5hdGUgb2YgdGhlIHNjYWxpbmcgY2VudGVyLiBEZWZhdWx0IGlzIGN1cnJlbnQgeSBwb3NpdGlvbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2NhbGUoJHNfeCwgJHNfeSwgJHg9JycsICR5PScnKSB7CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCWlmICgoJHNfeCA9PSAwKSBPUiAoJHNfeSA9PSAwKSkgewoJCQkkdGhpcy0+RXJyb3IoJ1BsZWFzZSBkbyBub3QgdXNlIHZhbHVlcyBlcXVhbCB0byB6ZXJvIGZvciBzY2FsaW5nJyk7CgkJfQoJCSR5ID0gKCR0aGlzLT5oIC0gJHkpICogJHRoaXMtPms7CgkJJHggKj0gJHRoaXMtPms7CgkJLy9jYWxjdWxhdGUgZWxlbWVudHMgb2YgdHJhbnNmb3JtYXRpb24gbWF0cml4CgkJJHNfeCAvPSAxMDA7CgkJJHNfeSAvPSAxMDA7CgkJJHRtID0gYXJyYXkoKTsKCQkkdG1bMF0gPSAkc194OwoJCSR0bVsxXSA9IDA7CgkJJHRtWzJdID0gMDsKCQkkdG1bM10gPSAkc195OwoJCSR0bVs0XSA9ICR4ICogKDEgLSAkc194KTsKCQkkdG1bNV0gPSAkeSAqICgxIC0gJHNfeSk7CgkJLy9zY2FsZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0KCQkkdGhpcy0+VHJhbnNmb3JtKCR0bSk7Cgl9CgoJLyoqCgkgKiBIb3Jpem9udGFsIE1pcnJvcmluZy4KCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgcG9pbnQuIERlZmF1bHQgaXMgY3VycmVudCB4IHBvc2l0aW9uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wNykKCSAqIEBzZWUgU3RhcnRUcmFuc2Zvcm0oKSwgU3RvcFRyYW5zZm9ybSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBNaXJyb3JIKCR4PScnKSB7CgkJJHRoaXMtPlNjYWxlKC0xMDAsIDEwMCwgJHgpOwoJfQoKCS8qKgoJICogVmVyaWNhbCBNaXJyb3JpbmcuCgkgKiBAcGFyYW0gJHkgKGludCkgb3JkaW5hdGUgb2YgdGhlIHBvaW50LiBEZWZhdWx0IGlzIGN1cnJlbnQgeSBwb3NpdGlvbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gTWlycm9yVigkeT0nJykgewoJCSR0aGlzLT5TY2FsZSgxMDAsIC0xMDAsICcnLCAkeSk7Cgl9CgoJLyoqCgkgKiBQb2ludCByZWZsZWN0aW9uIG1pcnJvcmluZy4KCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgcG9pbnQuIERlZmF1bHQgaXMgY3VycmVudCB4IHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgb3JkaW5hdGUgb2YgdGhlIHBvaW50LiBEZWZhdWx0IGlzIGN1cnJlbnQgeSBwb3NpdGlvbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gTWlycm9yUCgkeD0nJywkeT0nJykgewoJCSR0aGlzLT5TY2FsZSgtMTAwLCAtMTAwLCAkeCwgJHkpOwoJfQoKCS8qKgoJICogUmVmbGVjdGlvbiBhZ2FpbnN0IGEgc3RyYWlnaHQgbGluZSB0aHJvdWdoIHBvaW50ICh4LCB5KSB3aXRoIHRoZSBncmFkaWVudCBhbmdsZSAoYW5nbGUpLgoJICogQHBhcmFtICRhbmdsZSAoZmxvYXQpIGdyYWRpZW50IGFuZ2xlIG9mIHRoZSBzdHJhaWdodCBsaW5lLiBEZWZhdWx0IGlzIDAgKGhvcml6b250YWwgbGluZSkuCgkgKiBAcGFyYW0gJHggKGludCkgYWJzY2lzc2Egb2YgdGhlIHBvaW50LiBEZWZhdWx0IGlzIGN1cnJlbnQgeCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIG9yZGluYXRlIG9mIHRoZSBwb2ludC4gRGVmYXVsdCBpcyBjdXJyZW50IHkgcG9zaXRpb24KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIE1pcnJvckwoJGFuZ2xlPTAsICR4PScnLCR5PScnKSB7CgkJJHRoaXMtPlNjYWxlKC0xMDAsIDEwMCwgJHgsICR5KTsKCQkkdGhpcy0+Um90YXRlKC0yKigkYW5nbGUtOTApLCAkeCwgJHkpOwoJfQoKCS8qKgoJICogVHJhbnNsYXRlIGdyYXBoaWMgb2JqZWN0IGhvcml6b250YWxseS4KCSAqIEBwYXJhbSAkdF94IChpbnQpIG1vdmVtZW50IHRvIHRoZSByaWdodCAob3IgbGVmdCBmb3IgUlRMKQoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gVHJhbnNsYXRlWCgkdF94KSB7CgkJJHRoaXMtPlRyYW5zbGF0ZSgkdF94LCAwKTsKCX0KCgkvKioKCSAqIFRyYW5zbGF0ZSBncmFwaGljIG9iamVjdCB2ZXJ0aWNhbGx5LgoJICogQHBhcmFtICR0X3kgKGludCkgbW92ZW1lbnQgdG8gdGhlIGJvdHRvbQoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gVHJhbnNsYXRlWSgkdF95KSB7CgkJJHRoaXMtPlRyYW5zbGF0ZSgwLCAkdF95KTsKCX0KCgkvKioKCSAqIFRyYW5zbGF0ZSBncmFwaGljIG9iamVjdCBob3Jpem9udGFsbHkgYW5kIHZlcnRpY2FsbHkuCgkgKiBAcGFyYW0gJHRfeCAoaW50KSBtb3ZlbWVudCB0byB0aGUgcmlnaHQKCSAqIEBwYXJhbSAkdF95IChpbnQpIG1vdmVtZW50IHRvIHRoZSBib3R0b20KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFRyYW5zbGF0ZSgkdF94LCAkdF95KSB7CgkJLy9jYWxjdWxhdGUgZWxlbWVudHMgb2YgdHJhbnNmb3JtYXRpb24gbWF0cml4CgkJJHRtID0gYXJyYXkoKTsKCQkkdG1bMF0gPSAxOwoJCSR0bVsxXSA9IDA7CgkJJHRtWzJdID0gMDsKCQkkdG1bM10gPSAxOwoJCSR0bVs0XSA9ICR0X3ggKiAkdGhpcy0+azsKCQkkdG1bNV0gPSAtJHRfeSAqICR0aGlzLT5rOwoJCS8vdHJhbnNsYXRlIHRoZSBjb29yZGluYXRlIHN5c3RlbQoJCSR0aGlzLT5UcmFuc2Zvcm0oJHRtKTsKCX0KCgkvKioKCSAqIFJvdGF0ZSBvYmplY3QuCgkgKiBAcGFyYW0gJGFuZ2xlIChmbG9hdCkgYW5nbGUgaW4gZGVncmVlcyBmb3IgY291bnRlci1jbG9ja3dpc2Ugcm90YXRpb24KCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgcm90YXRpb24gY2VudGVyLiBEZWZhdWx0IGlzIGN1cnJlbnQgeCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIG9yZGluYXRlIG9mIHRoZSByb3RhdGlvbiBjZW50ZXIuIERlZmF1bHQgaXMgY3VycmVudCB5IHBvc2l0aW9uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wNykKCSAqIEBzZWUgU3RhcnRUcmFuc2Zvcm0oKSwgU3RvcFRyYW5zZm9ybSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBSb3RhdGUoJGFuZ2xlLCAkeD0nJywgJHk9JycpIHsKCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJJHkgPSAoJHRoaXMtPmggLSAkeSkgKiAkdGhpcy0+azsKCQkkeCAqPSAkdGhpcy0+azsKCQkvL2NhbGN1bGF0ZSBlbGVtZW50cyBvZiB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCQkkdG0gPSBhcnJheSgpOwoJCSR0bVswXSA9IGNvcyhkZWcycmFkKCRhbmdsZSkpOwoJCSR0bVsxXSA9IHNpbihkZWcycmFkKCRhbmdsZSkpOwoJCSR0bVsyXSA9IC0kdG1bMV07CgkJJHRtWzNdID0gJHRtWzBdOwoJCSR0bVs0XSA9ICR4ICsgKCR0bVsxXSAqICR5KSAtICgkdG1bMF0gKiAkeCk7CgkJJHRtWzVdID0gJHkgLSAoJHRtWzBdICogJHkpIC0gKCR0bVsxXSAqICR4KTsKCQkvL3JvdGF0ZSB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0gYXJvdW5kICgkeCwkeSkKCQkkdGhpcy0+VHJhbnNmb3JtKCR0bSk7Cgl9CgoJLyoqCgkgKiBTa2V3IGhvcml6b250YWxseS4KCSAqIEBwYXJhbSAkYW5nbGVfeCAoZmxvYXQpIGFuZ2xlIGluIGRlZ3JlZXMgYmV0d2VlbiAtOTAgKHNrZXcgdG8gdGhlIGxlZnQpIGFuZCA5MCAoc2tldyB0byB0aGUgcmlnaHQpCgkgKiBAcGFyYW0gJHggKGludCkgYWJzY2lzc2Egb2YgdGhlIHNrZXdpbmcgY2VudGVyLiBkZWZhdWx0IGlzIGN1cnJlbnQgeCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIG9yZGluYXRlIG9mIHRoZSBza2V3aW5nIGNlbnRlci4gZGVmYXVsdCBpcyBjdXJyZW50IHkgcG9zaXRpb24KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNrZXdYKCRhbmdsZV94LCAkeD0nJywgJHk9JycpIHsKCQkkdGhpcy0+U2tldygkYW5nbGVfeCwgMCwgJHgsICR5KTsKCX0KCgkvKioKCSAqIFNrZXcgdmVydGljYWxseS4KCSAqIEBwYXJhbSAkYW5nbGVfeSAoZmxvYXQpIGFuZ2xlIGluIGRlZ3JlZXMgYmV0d2VlbiAtOTAgKHNrZXcgdG8gdGhlIGJvdHRvbSkgYW5kIDkwIChza2V3IHRvIHRoZSB0b3ApCgkgKiBAcGFyYW0gJHggKGludCkgYWJzY2lzc2Egb2YgdGhlIHNrZXdpbmcgY2VudGVyLiBkZWZhdWx0IGlzIGN1cnJlbnQgeCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIG9yZGluYXRlIG9mIHRoZSBza2V3aW5nIGNlbnRlci4gZGVmYXVsdCBpcyBjdXJyZW50IHkgcG9zaXRpb24KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNrZXdZKCRhbmdsZV95LCAkeD0nJywgJHk9JycpIHsKCQkkdGhpcy0+U2tldygwLCAkYW5nbGVfeSwgJHgsICR5KTsKCX0KCgkvKioKCSAqIFNrZXcuCgkgKiBAcGFyYW0gJGFuZ2xlX3ggKGZsb2F0KSBhbmdsZSBpbiBkZWdyZWVzIGJldHdlZW4gLTkwIChza2V3IHRvIHRoZSBsZWZ0KSBhbmQgOTAgKHNrZXcgdG8gdGhlIHJpZ2h0KQoJICogQHBhcmFtICRhbmdsZV95IChmbG9hdCkgYW5nbGUgaW4gZGVncmVlcyBiZXR3ZWVuIC05MCAoc2tldyB0byB0aGUgYm90dG9tKSBhbmQgOTAgKHNrZXcgdG8gdGhlIHRvcCkKCSAqIEBwYXJhbSAkeCAoaW50KSBhYnNjaXNzYSBvZiB0aGUgc2tld2luZyBjZW50ZXIuIGRlZmF1bHQgaXMgY3VycmVudCB4IHBvc2l0aW9uCgkgKiBAcGFyYW0gJHkgKGludCkgb3JkaW5hdGUgb2YgdGhlIHNrZXdpbmcgY2VudGVyLiBkZWZhdWx0IGlzIGN1cnJlbnQgeSBwb3NpdGlvbgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDcpCgkgKiBAc2VlIFN0YXJ0VHJhbnNmb3JtKCksIFN0b3BUcmFuc2Zvcm0oKQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2tldygkYW5nbGVfeCwgJGFuZ2xlX3ksICR4PScnLCAkeT0nJykgewoJCWlmICgkeCA9PT0gJycpIHsKCQkJJHggPSAkdGhpcy0+eDsKCQl9CgkJaWYgKCR5ID09PSAnJykgewoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQlpZiAoKCRhbmdsZV94IDw9IC05MCkgT1IgKCRhbmdsZV94ID49IDkwKSBPUiAoJGFuZ2xlX3kgPD0gLTkwKSBPUiAoJGFuZ2xlX3kgPj0gOTApKSB7CgkJCSR0aGlzLT5FcnJvcignUGxlYXNlIHVzZSB2YWx1ZXMgYmV0d2VlbiAtOTAgYW5kICs5MCBkZWdyZWVzIGZvciBTa2V3aW5nLicpOwoJCX0KCQkkeCAqPSAkdGhpcy0+azsKCQkkeSA9ICgkdGhpcy0+aCAtICR5KSAqICR0aGlzLT5rOwoJCS8vY2FsY3VsYXRlIGVsZW1lbnRzIG9mIHRyYW5zZm9ybWF0aW9uIG1hdHJpeAoJCSR0bSA9IGFycmF5KCk7CgkJJHRtWzBdID0gMTsKCQkkdG1bMV0gPSB0YW4oZGVnMnJhZCgkYW5nbGVfeSkpOwoJCSR0bVsyXSA9IHRhbihkZWcycmFkKCRhbmdsZV94KSk7CgkJJHRtWzNdID0gMTsKCQkkdG1bNF0gPSAtJHRtWzJdICogJHk7CgkJJHRtWzVdID0gLSR0bVsxXSAqICR4OwoJCS8vc2tldyB0aGUgY29vcmRpbmF0ZSBzeXN0ZW0KCQkkdGhpcy0+VHJhbnNmb3JtKCR0bSk7Cgl9CgoJLyoqCgkgKiBBcHBseSBncmFwaGljIHRyYW5zZm9ybWF0aW9ucy4KCSAqIEBwYXJhbSAkdG0gKGFycmF5KSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBTdGFydFRyYW5zZm9ybSgpLCBTdG9wVHJhbnNmb3JtKCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIFRyYW5zZm9ybSgkdG0pIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+X291dChzcHJpbnRmKCclRiAlRiAlRiAlRiAlRiAlRiBjbScsICR0bVswXSwgJHRtWzFdLCAkdG1bMl0sICR0bVszXSwgJHRtWzRdLCAkdG1bNV0pKTsKCQkvLyBhZGQgdHJhbmZvcm1hdGlvbiBtYXRyaXgKCQkkdGhpcy0+dHJhbnNmbWF0cml4WyR0aGlzLT50cmFuc2ZtYXRyaXhfa2V5XVtdID0gYXJyYXkoJ2EnID0+ICR0bVswXSwgJ2InID0+ICR0bVsxXSwgJ2MnID0+ICR0bVsyXSwgJ2QnID0+ICR0bVszXSwgJ2UnID0+ICR0bVs0XSwgJ2YnID0+ICR0bVs1XSk7CgkJLy8gdXBkYXRlIHRyYW5zZm9ybWF0aW9uIG1hcmsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJaWYgKGVuZCgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddKSAhPT0gZmFsc2UpIHsKCQkJCSRrZXkgPSBrZXkoJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXSk7CgkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddWyRrZXldID0gc3RybGVuKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddKTsKCQkJfQoJCX0gZWxzZWlmIChlbmQoJHRoaXMtPnRyYW5zZm1ya1skdGhpcy0+cGFnZV0pICE9PSBmYWxzZSkgewoJCQkka2V5ID0ga2V5KCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdKTsKCQkJJHRoaXMtPnRyYW5zZm1ya1skdGhpcy0+cGFnZV1bJGtleV0gPSAkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV07CgkJfQoJfQoKCS8vIEVORCBUUkFOU0ZPUk1BVElPTlMgU0VDVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLy8gU1RBUlQgR1JBUEhJQyBGVU5DVElPTlMgU0VDVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KCS8vIFRoZSBmb2xsb3dpbmcgc2VjdGlvbiBpcyBiYXNlZCBvbiB0aGUgY29kZSBwcm92aWRlZCBieSBEYXZpZCBIZXJuYW5kZXogU2FuegoKCS8qKgoJICogRGVmaW5lcyB0aGUgbGluZSB3aWR0aC4gQnkgZGVmYXVsdCwgdGhlIHZhbHVlIGVxdWFscyAwLjIgbW0uIFRoZSBtZXRob2QgY2FuIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGZpcnN0IHBhZ2UgaXMgY3JlYXRlZCBhbmQgdGhlIHZhbHVlIGlzIHJldGFpbmVkIGZyb20gcGFnZSB0byBwYWdlLgoJICogQHBhcmFtICR3aWR0aCAoZmxvYXQpIFRoZSB3aWR0aC4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAKCSAqIEBzZWUgTGluZSgpLCBSZWN0KCksIENlbGwoKSwgTXVsdGlDZWxsKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldExpbmVXaWR0aCgkd2lkdGgpIHsKCQkvL1NldCBsaW5lIHdpZHRoCgkJJHRoaXMtPkxpbmVXaWR0aCA9ICR3aWR0aDsKCQkkdGhpcy0+bGluZXN0eWxlV2lkdGggPSBzcHJpbnRmKCclRiB3JywgKCR3aWR0aCAqICR0aGlzLT5rKSk7CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCSR0aGlzLT5fb3V0KCR0aGlzLT5saW5lc3R5bGVXaWR0aCk7CgkJfQoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgY3VycmVudCB0aGUgbGluZSB3aWR0aC4KCSAqIEByZXR1cm4gaW50IExpbmUgd2lkdGgKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA3KQoJICogQHNlZSBMaW5lKCksIFNldExpbmVXaWR0aCgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBHZXRMaW5lV2lkdGgoKSB7CgkJcmV0dXJuICR0aGlzLT5MaW5lV2lkdGg7Cgl9CgoJLyoqCgkgKiBTZXQgbGluZSBzdHlsZS4KCSAqIEBwYXJhbSAkc3R5bGUgKGFycmF5KSBMaW5lIHN0eWxlLiBBcnJheSB3aXRoIGtleXMgYW1vbmcgdGhlIGZvbGxvd2luZzoKCSAqIDx1bD4KCSAqCSA8bGk+d2lkdGggKGZsb2F0KTogV2lkdGggb2YgdGhlIGxpbmUgaW4gdXNlciB1bml0cy48L2xpPgoJICoJIDxsaT5jYXAgKHN0cmluZyk6IFR5cGUgb2YgY2FwIHRvIHB1dCBvbiB0aGUgbGluZS4gUG9zc2libGUgdmFsdWVzIGFyZToKCSAqIGJ1dHQsIHJvdW5kLCBzcXVhcmUuIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gInNxdWFyZSIgYW5kICJidXR0IiBpcyB0aGF0CgkgKiAic3F1YXJlIiBwcm9qZWN0cyBhIGZsYXQgZW5kIHBhc3QgdGhlIGVuZCBvZiB0aGUgbGluZS48L2xpPgoJICoJIDxsaT5qb2luIChzdHJpbmcpOiBUeXBlIG9mIGpvaW4uIFBvc3NpYmxlIHZhbHVlcyBhcmU6IG1pdGVyLCByb3VuZCwKCSAqIGJldmVsLjwvbGk+CgkgKgkgPGxpPmRhc2ggKG1peGVkKTogRGFzaCBwYXR0ZXJuLiBJcyAwICh3aXRob3V0IGRhc2gpIG9yIHN0cmluZyB3aXRoCgkgKiBzZXJpZXMgb2YgbGVuZ3RoIHZhbHVlcywgd2hpY2ggYXJlIHRoZSBsZW5ndGhzIG9mIHRoZSBvbiBhbmQgb2ZmIGRhc2hlcy4KCSAqIEZvciBleGFtcGxlOiAiMiIgcmVwcmVzZW50cyAyIG9uLCAyIG9mZiwgMiBvbiwgMiBvZmYsIC4uLjsgIjIsMSIgaXMgMiBvbiwKCSAqIDEgb2ZmLCAyIG9uLCAxIG9mZiwgLi4uPC9saT4KCSAqCSA8bGk+cGhhc2UgKGludGVnZXIpOiBNb2RpZmllciBvbiB0aGUgZGFzaCBwYXR0ZXJuIHdoaWNoIGlzIHVzZWQgdG8gc2hpZnQKCSAqIHRoZSBwb2ludCBhdCB3aGljaCB0aGUgcGF0dGVybiBzdGFydHMuPC9saT4KCSAqCSA8bGk+Y29sb3IgKGFycmF5KTogRHJhdyBjb2xvci4gRm9ybWF0OiBhcnJheShHUkVZKSBvciBhcnJheShSLEcsQikgb3IgYXJyYXkoQyxNLFksSykgb3IgYXJyYXkoQyxNLFksSyxTcG90Q29sb3JOYW1lKS48L2xpPgoJICogPC91bD4KCSAqIEBwYXJhbSAkcmV0IChib29sZWFuKSBpZiB0cnVlIGRvIG5vdCBzZW5kIHRoZSBjb21tYW5kLgoJICogQHJldHVybiBzdHJpbmcgdGhlIFBERiBjb21tYW5kCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFNldExpbmVTdHlsZSgkc3R5bGUsICRyZXQ9ZmFsc2UpIHsKCQkkcyA9ICcnOyAvLyBzdHJpbmcgdG8gYmUgcmV0dXJuZWQKCQlpZiAoIWlzX2FycmF5KCRzdHlsZSkpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoaXNzZXQoJHN0eWxlWyd3aWR0aCddKSkgewoJCQkkdGhpcy0+TGluZVdpZHRoID0gJHN0eWxlWyd3aWR0aCddOwoJCQkkdGhpcy0+bGluZXN0eWxlV2lkdGggPSBzcHJpbnRmKCclRiB3JywgKCRzdHlsZVsnd2lkdGgnXSAqICR0aGlzLT5rKSk7CgkJCSRzIC49ICR0aGlzLT5saW5lc3R5bGVXaWR0aC4nICc7CgkJfQoJCWlmIChpc3NldCgkc3R5bGVbJ2NhcCddKSkgewoJCQkkY2EgPSBhcnJheSgnYnV0dCcgPT4gMCwgJ3JvdW5kJz0+IDEsICdzcXVhcmUnID0+IDIpOwoJCQlpZiAoaXNzZXQoJGNhWyRzdHlsZVsnY2FwJ11dKSkgewoJCQkJJHRoaXMtPmxpbmVzdHlsZUNhcCA9ICRjYVskc3R5bGVbJ2NhcCddXS4nIEonOwoJCQkJJHMgLj0gJHRoaXMtPmxpbmVzdHlsZUNhcC4nICc7CgkJCX0KCQl9CgkJaWYgKGlzc2V0KCRzdHlsZVsnam9pbiddKSkgewoJCQkkamEgPSBhcnJheSgnbWl0ZXInID0+IDAsICdyb3VuZCcgPT4gMSwgJ2JldmVsJyA9PiAyKTsKCQkJaWYgKGlzc2V0KCRqYVskc3R5bGVbJ2pvaW4nXV0pKSB7CgkJCQkkdGhpcy0+bGluZXN0eWxlSm9pbiA9ICRqYVskc3R5bGVbJ2pvaW4nXV0uJyBqJzsKCQkJCSRzIC49ICR0aGlzLT5saW5lc3R5bGVKb2luLicgJzsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJHN0eWxlWydkYXNoJ10pKSB7CgkJCSRkYXNoX3N0cmluZyA9ICcnOwoJCQlpZiAoJHN0eWxlWydkYXNoJ10pIHsKCQkJCWlmIChwcmVnX21hdGNoKCcvXi4rLC8nLCAkc3R5bGVbJ2Rhc2gnXSkgPiAwKSB7CgkJCQkJJHRhYiA9IGV4cGxvZGUoJywnLCAkc3R5bGVbJ2Rhc2gnXSk7CgkJCQl9IGVsc2UgewoJCQkJCSR0YWIgPSBhcnJheSgkc3R5bGVbJ2Rhc2gnXSk7CgkJCQl9CgkJCQkkZGFzaF9zdHJpbmcgPSAnJzsKCQkJCWZvcmVhY2ggKCR0YWIgYXMgJGkgPT4gJHYpIHsKCQkJCQlpZiAoJGkpIHsKCQkJCQkJJGRhc2hfc3RyaW5nIC49ICcgJzsKCQkJCQl9CgkJCQkJJGRhc2hfc3RyaW5nIC49IHNwcmludGYoJyVGJywgJHYpOwoJCQkJfQoJCQl9CgkJCWlmICghaXNzZXQoJHN0eWxlWydwaGFzZSddKSBPUiAhJHN0eWxlWydkYXNoJ10pIHsKCQkJCSRzdHlsZVsncGhhc2UnXSA9IDA7CgkJCX0KCQkJJHRoaXMtPmxpbmVzdHlsZURhc2ggPSBzcHJpbnRmKCdbJXNdICVGIGQnLCAkZGFzaF9zdHJpbmcsICRzdHlsZVsncGhhc2UnXSk7CgkJCSRzIC49ICR0aGlzLT5saW5lc3R5bGVEYXNoLicgJzsKCQl9CgkJaWYgKGlzc2V0KCRzdHlsZVsnY29sb3InXSkpIHsKCQkJJHMgLj0gJHRoaXMtPlNldERyYXdDb2xvckFycmF5KCRzdHlsZVsnY29sb3InXSwgdHJ1ZSkuJyAnOwoJCX0KCQlpZiAoISRyZXQgQU5EICgkdGhpcy0+c3RhdGUgPT0gMikpIHsKCQkJJHRoaXMtPl9vdXQoJHMpOwoJCX0KCQlyZXR1cm4gJHM7Cgl9CgoJLyoqCgkgKiBCZWdpbiBhIG5ldyBzdWJwYXRoIGJ5IG1vdmluZyB0aGUgY3VycmVudCBwb2ludCB0byBjb29yZGluYXRlcyAoeCwgeSksIG9taXR0aW5nIGFueSBjb25uZWN0aW5nIGxpbmUgc2VnbWVudC4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHBvaW50LgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgcG9pbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9vdXRQb2ludCgkeCwgJHkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlID09IDIpIHsKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJUYgJUYgbScsICgkeCAqICR0aGlzLT5rKSwgKCgkdGhpcy0+aCAtICR5KSAqICR0aGlzLT5rKSkpOwoJCX0KCX0KCgkvKioKCSAqIEFwcGVuZCBhIHN0cmFpZ2h0IGxpbmUgc2VnbWVudCBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIHRoZSBwb2ludCAoeCwgeSkuCgkgKiBUaGUgbmV3IGN1cnJlbnQgcG9pbnQgc2hhbGwgYmUgKHgsIHkpLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgZW5kIHBvaW50LgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgZW5kIHBvaW50LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDgpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfb3V0TGluZSgkeCwgJHkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlID09IDIpIHsKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJUYgJUYgbCcsICgkeCAqICR0aGlzLT5rKSwgKCgkdGhpcy0+aCAtICR5KSAqICR0aGlzLT5rKSkpOwoJCX0KCX0KCgkvKioKCSAqIEFwcGVuZCBhIHJlY3RhbmdsZSB0byB0aGUgY3VycmVudCBwYXRoIGFzIGEgY29tcGxldGUgc3VicGF0aCwgd2l0aCBsb3dlci1sZWZ0IGNvcm5lciAoeCwgeSkgYW5kIGRpbWVuc2lvbnMgd2lkdGhhbmQgaGVpZ2h0IGluIHVzZXIgc3BhY2UuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBBYnNjaXNzYSBvZiB1cHBlci1sZWZ0IGNvcm5lci4KCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGguCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBIZWlnaHQuCgkgKiBAcGFyYW0gJG9wIChzdHJpbmcpIG9wdGlvbnMKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA4KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX291dFJlY3QoJHgsICR5LCAkdywgJGgsICRvcCkgewoJCWlmICgkdGhpcy0+c3RhdGUgPT0gMikgewoJCQkkdGhpcy0+X291dChzcHJpbnRmKCclRiAlRiAlRiAlRiByZSAlcycsICgkeCAqICR0aGlzLT5rKSwgKCgkdGhpcy0+aCAtICR5KSAqICR0aGlzLT5rKSwgKCR3ICogJHRoaXMtPmspLCAoLSRoICogJHRoaXMtPmspLCAkb3ApKTsKCQl9Cgl9CgoJLyoqCgkgKiBBcHBlbmQgYSBjdWJpYyBCZXppZXIgY3VydmUgdG8gdGhlIGN1cnJlbnQgcGF0aC4gVGhlIGN1cnZlIHNoYWxsIGV4dGVuZCBmcm9tIHRoZSBjdXJyZW50IHBvaW50IHRvIHRoZSBwb2ludCAoeDMsIHkzKSwgdXNpbmcgKHgxLCB5MSkgYW5kICh4MiwgeTIpIGFzIHRoZSBCZXppZXIgY29udHJvbCBwb2ludHMuCgkgKiBUaGUgbmV3IGN1cnJlbnQgcG9pbnQgc2hhbGwgYmUgKHgzLCB5MykuCgkgKiBAcGFyYW0gJHgxIChmbG9hdCkgQWJzY2lzc2Egb2YgY29udHJvbCBwb2ludCAxLgoJICogQHBhcmFtICR5MSAoZmxvYXQpIE9yZGluYXRlIG9mIGNvbnRyb2wgcG9pbnQgMS4KCSAqIEBwYXJhbSAkeDIgKGZsb2F0KSBBYnNjaXNzYSBvZiBjb250cm9sIHBvaW50IDIuCgkgKiBAcGFyYW0gJHkyIChmbG9hdCkgT3JkaW5hdGUgb2YgY29udHJvbCBwb2ludCAyLgoJICogQHBhcmFtICR4MyAoZmxvYXQpIEFic2Npc3NhIG9mIGVuZCBwb2ludC4KCSAqIEBwYXJhbSAkeTMgKGZsb2F0KSBPcmRpbmF0ZSBvZiBlbmQgcG9pbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9vdXRDdXJ2ZSgkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCSR0aGlzLT5fb3V0KHNwcmludGYoJyVGICVGICVGICVGICVGICVGIGMnLCAoJHgxICogJHRoaXMtPmspLCAoKCR0aGlzLT5oIC0gJHkxKSAqICR0aGlzLT5rKSwgKCR4MiAqICR0aGlzLT5rKSwgKCgkdGhpcy0+aCAtICR5MikgKiAkdGhpcy0+ayksICgkeDMgKiAkdGhpcy0+ayksICgoJHRoaXMtPmggLSAkeTMpICogJHRoaXMtPmspKSk7CgkJfQoJfQoKCS8qKgoJICogQXBwZW5kIGEgY3ViaWMgQmV6aWVyIGN1cnZlIHRvIHRoZSBjdXJyZW50IHBhdGguIFRoZSBjdXJ2ZSBzaGFsbCBleHRlbmQgZnJvbSB0aGUgY3VycmVudCBwb2ludCB0byB0aGUgcG9pbnQgKHgzLCB5MyksIHVzaW5nIHRoZSBjdXJyZW50IHBvaW50IGFuZCAoeDIsIHkyKSBhcyB0aGUgQmV6aWVyIGNvbnRyb2wgcG9pbnRzLgoJICogVGhlIG5ldyBjdXJyZW50IHBvaW50IHNoYWxsIGJlICh4MywgeTMpLgoJICogQHBhcmFtICR4MiAoZmxvYXQpIEFic2Npc3NhIG9mIGNvbnRyb2wgcG9pbnQgMi4KCSAqIEBwYXJhbSAkeTIgKGZsb2F0KSBPcmRpbmF0ZSBvZiBjb250cm9sIHBvaW50IDIuCgkgKiBAcGFyYW0gJHgzIChmbG9hdCkgQWJzY2lzc2Egb2YgZW5kIHBvaW50LgoJICogQHBhcmFtICR5MyAoZmxvYXQpIE9yZGluYXRlIG9mIGVuZCBwb2ludC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDE5ICgyMDEwLTA0LTI2KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX291dEN1cnZlVigkeDIsICR5MiwgJHgzLCAkeTMpIHsKCQlpZiAoJHRoaXMtPnN0YXRlID09IDIpIHsKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJUYgJUYgJUYgJUYgdicsICgkeDIgKiAkdGhpcy0+ayksICgoJHRoaXMtPmggLSAkeTIpICogJHRoaXMtPmspLCAoJHgzICogJHRoaXMtPmspLCAoKCR0aGlzLT5oIC0gJHkzKSAqICR0aGlzLT5rKSkpOwoJCX0KCX0KCgkvKioKCSAqIEFwcGVuZCBhIGN1YmljIEJlemllciBjdXJ2ZSB0byB0aGUgY3VycmVudCBwYXRoLiBUaGUgY3VydmUgc2hhbGwgZXh0ZW5kIGZyb20gdGhlIGN1cnJlbnQgcG9pbnQgdG8gdGhlIHBvaW50ICh4MywgeTMpLCB1c2luZyAoeDEsIHkxKSBhbmQgKHgzLCB5MykgYXMgdGhlIEJlemllciBjb250cm9sIHBvaW50cy4KCSAqIFRoZSBuZXcgY3VycmVudCBwb2ludCBzaGFsbCBiZSAoeDMsIHkzKS4KCSAqIEBwYXJhbSAkeDEgKGZsb2F0KSBBYnNjaXNzYSBvZiBjb250cm9sIHBvaW50IDEuCgkgKiBAcGFyYW0gJHkxIChmbG9hdCkgT3JkaW5hdGUgb2YgY29udHJvbCBwb2ludCAxLgoJICogQHBhcmFtICR4MyAoZmxvYXQpIEFic2Npc3NhIG9mIGVuZCBwb2ludC4KCSAqIEBwYXJhbSAkeTMgKGZsb2F0KSBPcmRpbmF0ZSBvZiBlbmQgcG9pbnQuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9vdXRDdXJ2ZVkoJHgxLCAkeTEsICR4MywgJHkzKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSA9PSAyKSB7CgkJCSR0aGlzLT5fb3V0KHNwcmludGYoJyVGICVGICVGICVGIHknLCAoJHgxICogJHRoaXMtPmspLCAoKCR0aGlzLT5oIC0gJHkxKSAqICR0aGlzLT5rKSwgKCR4MyAqICR0aGlzLT5rKSwgKCgkdGhpcy0+aCAtICR5MykgKiAkdGhpcy0+aykpKTsKCQl9Cgl9CgoJLyoqCgkgKiBEcmF3cyBhIGxpbmUgYmV0d2VlbiB0d28gcG9pbnRzLgoJICogQHBhcmFtICR4MSAoZmxvYXQpIEFic2Npc3NhIG9mIGZpcnN0IHBvaW50LgoJICogQHBhcmFtICR5MSAoZmxvYXQpIE9yZGluYXRlIG9mIGZpcnN0IHBvaW50LgoJICogQHBhcmFtICR4MiAoZmxvYXQpIEFic2Npc3NhIG9mIHNlY29uZCBwb2ludC4KCSAqIEBwYXJhbSAkeTIgKGZsb2F0KSBPcmRpbmF0ZSBvZiBzZWNvbmQgcG9pbnQuCgkgKiBAcGFyYW0gJHN0eWxlIChhcnJheSkgTGluZSBzdHlsZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBTZXRMaW5lV2lkdGgoKSwgU2V0RHJhd0NvbG9yKCksIFNldExpbmVTdHlsZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBMaW5lKCR4MSwgJHkxLCAkeDIsICR5MiwgJHN0eWxlPWFycmF5KCkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoaXNfYXJyYXkoJHN0eWxlKSkgewoJCQkkdGhpcy0+U2V0TGluZVN0eWxlKCRzdHlsZSk7CgkJfQoJCSR0aGlzLT5fb3V0UG9pbnQoJHgxLCAkeTEpOwoJCSR0aGlzLT5fb3V0TGluZSgkeDIsICR5Mik7CgkJJHRoaXMtPl9vdXQoJ1MnKTsKCX0KCgkvKioKCSAqIERyYXdzIGEgcmVjdGFuZ2xlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB1cHBlci1sZWZ0IGNvcm5lci4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIFdpZHRoLgoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0LgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkYm9yZGVyX3N0eWxlIChhcnJheSkgQm9yZGVyIHN0eWxlIG9mIHJlY3RhbmdsZS4gQXJyYXkgd2l0aCBrZXlzIGFtb25nIHRoZSBmb2xsb3dpbmc6CgkgKiA8dWw+CgkgKgkgPGxpPmFsbDogTGluZSBzdHlsZSBvZiBhbGwgYm9yZGVycy4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuPC9saT4KCSAqCSA8bGk+TCwgVCwgUiwgQiBvciBjb21iaW5hdGlvbnM6IExpbmUgc3R5bGUgb2YgbGVmdCwgdG9wLCByaWdodCBvciBib3R0b20gYm9yZGVyLiBBcnJheSBsaWtlIGZvciBTZXRMaW5lU3R5bGUoKS48L2xpPgoJICogPC91bD4KCSAqIElmIGEga2V5IGlzIG5vdCBwcmVzZW50IG9yIGlzIG51bGwsIHRoZSBjb3JyZXNwb25kZW50IGJvcmRlciBpcyBub3QgZHJhd24uIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRmaWxsX2NvbG9yIChhcnJheSkgRmlsbCBjb2xvci4gRm9ybWF0OiBhcnJheShHUkVZKSBvciBhcnJheShSLEcsQikgb3IgYXJyYXkoQyxNLFksSykgb3IgYXJyYXkoQyxNLFksSyxTcG90Q29sb3JOYW1lKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBjb2xvciAoZW1wdHkgYXJyYXkpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDEuMAoJICogQHNlZSBTZXRMaW5lU3R5bGUoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gUmVjdCgkeCwgJHksICR3LCAkaCwgJHN0eWxlPScnLCAkYm9yZGVyX3N0eWxlPWFycmF5KCksICRmaWxsX2NvbG9yPWFycmF5KCkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoZW1wdHkoJHN0eWxlKSkgewoJCQkkc3R5bGUgPSAnUyc7CgkJfQoJCWlmICghKHN0cnBvcygkc3R5bGUsICdGJykgPT09IGZhbHNlKSBBTkQgIWVtcHR5KCRmaWxsX2NvbG9yKSkgewoJCQkvLyBzZXQgYmFja2dyb3VuZCBjb2xvcgoJCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoJGZpbGxfY29sb3IpOwoJCX0KCQlpZiAoIWVtcHR5KCRib3JkZXJfc3R5bGUpKSB7CgkJCWlmIChpc3NldCgkYm9yZGVyX3N0eWxlWydhbGwnXSkgQU5EICFlbXB0eSgkYm9yZGVyX3N0eWxlWydhbGwnXSkpIHsKCQkJCS8vc2V0IGdsb2JhbCBzdHlsZSBmb3IgYm9yZGVyCgkJCQkkdGhpcy0+U2V0TGluZVN0eWxlKCRib3JkZXJfc3R5bGVbJ2FsbCddKTsKCQkJCSRib3JkZXJfc3R5bGUgPSBhcnJheSgpOwoJCQl9IGVsc2UgewoJCQkJLy8gcmVtb3ZlIHN0cm9rZSBvcGVyYXRvciBmcm9tIHN0eWxlCgkJCQkkb3Bub3N0cm9rZSA9IGFycmF5KCdTJyA9PiAnJywgJ0QnID0+ICcnLCAncycgPT4gJycsICdkJyA9PiAnJywgJ0InID0+ICdGJywgJ0ZEJyA9PiAnRicsICdERicgPT4gJ0YnLCAnQionID0+ICdGKicsICdGKkQnID0+ICdGKicsICdERionID0+ICdGKicsICdiJyA9PiAnZicsICdmZCcgPT4gJ2YnLCAnZGYnID0+ICdmJywgJ2IqJyA9PiAnZionLCAnZipkJyA9PiAnZionLCAnZGYqJyA9PiAnZionICk7CgkJCQlpZiAoaXNzZXQoJG9wbm9zdHJva2VbJHN0eWxlXSkpIHsKCQkJCQkkc3R5bGUgPSAkb3Bub3N0cm9rZVskc3R5bGVdOwoJCQkJfQoJCQl9CgkJfQoJCWlmICghZW1wdHkoJHN0eWxlKSkgewoJCQkkb3AgPSBUQ1BERl9TVEFUSUM6OmdldFBhdGhQYWludE9wZXJhdG9yKCRzdHlsZSk7CgkJCSR0aGlzLT5fb3V0UmVjdCgkeCwgJHksICR3LCAkaCwgJG9wKTsKCQl9CgkJaWYgKCFlbXB0eSgkYm9yZGVyX3N0eWxlKSkgewoJCQkkYm9yZGVyX3N0eWxlMiA9IGFycmF5KCk7CgkJCWZvcmVhY2ggKCRib3JkZXJfc3R5bGUgYXMgJGxpbmUgPT4gJHZhbHVlKSB7CgkJCQkkbGVuZ3RoID0gc3RybGVuKCRsaW5lKTsKCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW5ndGg7ICsrJGkpIHsKCQkJCQkkYm9yZGVyX3N0eWxlMlskbGluZVskaV1dID0gJHZhbHVlOwoJCQkJfQoJCQl9CgkJCSRib3JkZXJfc3R5bGUgPSAkYm9yZGVyX3N0eWxlMjsKCQkJaWYgKGlzc2V0KCRib3JkZXJfc3R5bGVbJ0wnXSkgQU5EICRib3JkZXJfc3R5bGVbJ0wnXSkgewoJCQkJJHRoaXMtPkxpbmUoJHgsICR5LCAkeCwgJHkgKyAkaCwgJGJvcmRlcl9zdHlsZVsnTCddKTsKCQkJfQoJCQlpZiAoaXNzZXQoJGJvcmRlcl9zdHlsZVsnVCddKSBBTkQgJGJvcmRlcl9zdHlsZVsnVCddKSB7CgkJCQkkdGhpcy0+TGluZSgkeCwgJHksICR4ICsgJHcsICR5LCAkYm9yZGVyX3N0eWxlWydUJ10pOwoJCQl9CgkJCWlmIChpc3NldCgkYm9yZGVyX3N0eWxlWydSJ10pIEFORCAkYm9yZGVyX3N0eWxlWydSJ10pIHsKCQkJCSR0aGlzLT5MaW5lKCR4ICsgJHcsICR5LCAkeCArICR3LCAkeSArICRoLCAkYm9yZGVyX3N0eWxlWydSJ10pOwoJCQl9CgkJCWlmIChpc3NldCgkYm9yZGVyX3N0eWxlWydCJ10pIEFORCAkYm9yZGVyX3N0eWxlWydCJ10pIHsKCQkJCSR0aGlzLT5MaW5lKCR4LCAkeSArICRoLCAkeCArICR3LCAkeSArICRoLCAkYm9yZGVyX3N0eWxlWydCJ10pOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogRHJhd3MgYSBCZXppZXIgY3VydmUuCgkgKiBUaGUgQmV6aWVyIGN1cnZlIGlzIGEgdGFuZ2VudCB0byB0aGUgbGluZSBiZXR3ZWVuIHRoZSBjb250cm9sIHBvaW50cyBhdAoJICogZWl0aGVyIGVuZCBvZiB0aGUgY3VydmUuCgkgKiBAcGFyYW0gJHgwIChmbG9hdCkgQWJzY2lzc2Egb2Ygc3RhcnQgcG9pbnQuCgkgKiBAcGFyYW0gJHkwIChmbG9hdCkgT3JkaW5hdGUgb2Ygc3RhcnQgcG9pbnQuCgkgKiBAcGFyYW0gJHgxIChmbG9hdCkgQWJzY2lzc2Egb2YgY29udHJvbCBwb2ludCAxLgoJICogQHBhcmFtICR5MSAoZmxvYXQpIE9yZGluYXRlIG9mIGNvbnRyb2wgcG9pbnQgMS4KCSAqIEBwYXJhbSAkeDIgKGZsb2F0KSBBYnNjaXNzYSBvZiBjb250cm9sIHBvaW50IDIuCgkgKiBAcGFyYW0gJHkyIChmbG9hdCkgT3JkaW5hdGUgb2YgY29udHJvbCBwb2ludCAyLgoJICogQHBhcmFtICR4MyAoZmxvYXQpIEFic2Npc3NhIG9mIGVuZCBwb2ludC4KCSAqIEBwYXJhbSAkeTMgKGZsb2F0KSBPcmRpbmF0ZSBvZiBlbmQgcG9pbnQuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gU2VlIHRoZSBnZXRQYXRoUGFpbnRPcGVyYXRvcigpIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogQHBhcmFtICRsaW5lX3N0eWxlIChhcnJheSkgTGluZSBzdHlsZSBvZiBjdXJ2ZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRmaWxsX2NvbG9yIChhcnJheSkgRmlsbCBjb2xvci4gRm9ybWF0OiBhcnJheShHUkVZKSBvciBhcnJheShSLEcsQikgb3IgYXJyYXkoQyxNLFksSykgb3IgYXJyYXkoQyxNLFksSyxTcG90Q29sb3JOYW1lKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBjb2xvciAoZW1wdHkgYXJyYXkpLgoJICogQHB1YmxpYwoJICogQHNlZSBTZXRMaW5lU3R5bGUoKQoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBDdXJ2ZSgkeDAsICR5MCwgJHgxLCAkeTEsICR4MiwgJHkyLCAkeDMsICR5MywgJHN0eWxlPScnLCAkbGluZV9zdHlsZT1hcnJheSgpLCAkZmlsbF9jb2xvcj1hcnJheSgpKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCXJldHVybjsKCQl9CgkJaWYgKCEoZmFsc2UgPT09IHN0cnBvcygkc3R5bGUsICdGJykpIEFORCBpc3NldCgkZmlsbF9jb2xvcikpIHsKCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRmaWxsX2NvbG9yKTsKCQl9CgkJJG9wID0gVENQREZfU1RBVElDOjpnZXRQYXRoUGFpbnRPcGVyYXRvcigkc3R5bGUpOwoJCWlmICgkbGluZV9zdHlsZSkgewoJCQkkdGhpcy0+U2V0TGluZVN0eWxlKCRsaW5lX3N0eWxlKTsKCQl9CgkJJHRoaXMtPl9vdXRQb2ludCgkeDAsICR5MCk7CgkJJHRoaXMtPl9vdXRDdXJ2ZSgkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKTsKCQkkdGhpcy0+X291dCgkb3ApOwoJfQoKCS8qKgoJICogRHJhd3MgYSBwb2x5LUJlemllciBjdXJ2ZS4KCSAqIEVhY2ggQmV6aWVyIGN1cnZlIHNlZ21lbnQgaXMgYSB0YW5nZW50IHRvIHRoZSBsaW5lIGJldHdlZW4gdGhlIGNvbnRyb2wgcG9pbnRzIGF0CgkgKiBlaXRoZXIgZW5kIG9mIHRoZSBjdXJ2ZS4KCSAqIEBwYXJhbSAkeDAgKGZsb2F0KSBBYnNjaXNzYSBvZiBzdGFydCBwb2ludC4KCSAqIEBwYXJhbSAkeTAgKGZsb2F0KSBPcmRpbmF0ZSBvZiBzdGFydCBwb2ludC4KCSAqIEBwYXJhbSAkc2VnbWVudHMgKGZsb2F0KSBBbiBhcnJheSBvZiBiZXppZXIgZGVzY3JpcHRpb25zLiBGb3JtYXQ6IGFycmF5KHgxLCB5MSwgeDIsIHkyLCB4MywgeTMpLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkbGluZV9zdHlsZSAoYXJyYXkpIExpbmUgc3R5bGUgb2YgY3VydmUuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGxpbmUgc3R5bGUgKGVtcHR5IGFycmF5KS4KCSAqIEBwYXJhbSAkZmlsbF9jb2xvciAoYXJyYXkpIEZpbGwgY29sb3IuIEZvcm1hdDogYXJyYXkoR1JFWSkgb3IgYXJyYXkoUixHLEIpIG9yIGFycmF5KEMsTSxZLEspIG9yIGFycmF5KEMsTSxZLEssU3BvdENvbG9yTmFtZSkuIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgY29sb3IgKGVtcHR5IGFycmF5KS4KCSAqIEBwdWJsaWMKCSAqIEBzZWUgU2V0TGluZVN0eWxlKCkKCSAqIEBzaW5jZSAzLjAwMDggKDIwMDgtMDUtMTIpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBQb2x5Y3VydmUoJHgwLCAkeTAsICRzZWdtZW50cywgJHN0eWxlPScnLCAkbGluZV9zdHlsZT1hcnJheSgpLCAkZmlsbF9jb2xvcj1hcnJheSgpKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCXJldHVybjsKCQl9CgkJaWYgKCEoZmFsc2UgPT09IHN0cnBvcygkc3R5bGUsICdGJykpIEFORCBpc3NldCgkZmlsbF9jb2xvcikpIHsKCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRmaWxsX2NvbG9yKTsKCQl9CgkJJG9wID0gVENQREZfU1RBVElDOjpnZXRQYXRoUGFpbnRPcGVyYXRvcigkc3R5bGUpOwoJCWlmICgkb3AgPT0gJ2YnKSB7CgkJCSRsaW5lX3N0eWxlID0gYXJyYXkoKTsKCQl9CgkJaWYgKCRsaW5lX3N0eWxlKSB7CgkJCSR0aGlzLT5TZXRMaW5lU3R5bGUoJGxpbmVfc3R5bGUpOwoJCX0KCQkkdGhpcy0+X291dFBvaW50KCR4MCwgJHkwKTsKCQlmb3JlYWNoICgkc2VnbWVudHMgYXMgJHNlZ21lbnQpIHsKCQkJbGlzdCgkeDEsICR5MSwgJHgyLCAkeTIsICR4MywgJHkzKSA9ICRzZWdtZW50OwoJCQkkdGhpcy0+X291dEN1cnZlKCR4MSwgJHkxLCAkeDIsICR5MiwgJHgzLCAkeTMpOwoJCX0KCQkkdGhpcy0+X291dCgkb3ApOwoJfQoKCS8qKgoJICogRHJhd3MgYW4gZWxsaXBzZS4KCSAqIEFuIGVsbGlwc2UgaXMgZm9ybWVkIGZyb20gbiBCZXppZXIgY3VydmVzLgoJICogQHBhcmFtICR4MCAoZmxvYXQpIEFic2Npc3NhIG9mIGNlbnRlciBwb2ludC4KCSAqIEBwYXJhbSAkeTAgKGZsb2F0KSBPcmRpbmF0ZSBvZiBjZW50ZXIgcG9pbnQuCgkgKiBAcGFyYW0gJHJ4IChmbG9hdCkgSG9yaXpvbnRhbCByYWRpdXMuCgkgKiBAcGFyYW0gJHJ5IChmbG9hdCkgVmVydGljYWwgcmFkaXVzIChpZiByeSA9IDAgdGhlbiBpcyBhIGNpcmNsZSwgc2VlIENpcmNsZSgpKS4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYW5nbGU6IChmbG9hdCkgQW5nbGUgb3JpZW50ZWQgKGFudGktY2xvY2t3aXNlKS4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYXN0YXJ0OiAoZmxvYXQpIEFuZ2xlIHN0YXJ0IG9mIGRyYXcgbGluZS4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYWZpbmlzaDogKGZsb2F0KSBBbmdsZSBmaW5pc2ggb2YgZHJhdyBsaW5lLiBEZWZhdWx0IHZhbHVlOiAzNjAuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gU2VlIHRoZSBnZXRQYXRoUGFpbnRPcGVyYXRvcigpIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogQHBhcmFtICRsaW5lX3N0eWxlIChhcnJheSkgTGluZSBzdHlsZSBvZiBlbGxpcHNlLiBBcnJheSBsaWtlIGZvciBTZXRMaW5lU3R5bGUoKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KEdSRVkpIG9yIGFycmF5KFIsRyxCKSBvciBhcnJheShDLE0sWSxLKSBvciBhcnJheShDLE0sWSxLLFNwb3RDb2xvck5hbWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJG5jIChpbnRlZ2VyKSBOdW1iZXIgb2YgY3VydmVzIHVzZWQgdG8gZHJhdyBhIDkwIGRlZ3JlZXMgcG9ydGlvbiBvZiBlbGxpcHNlLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAwICgyMDA4LTAxLTA4KQoJICovCglwdWJsaWMgZnVuY3Rpb24gRWxsaXBzZSgkeDAsICR5MCwgJHJ4LCAkcnk9JycsICRhbmdsZT0wLCAkYXN0YXJ0PTAsICRhZmluaXNoPTM2MCwgJHN0eWxlPScnLCAkbGluZV9zdHlsZT1hcnJheSgpLCAkZmlsbF9jb2xvcj1hcnJheSgpLCAkbmM9MikgewoJCWlmICgkdGhpcy0+c3RhdGUgIT0gMikgewoJCQlyZXR1cm47CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcnkpIE9SICgkcnkgPT0gMCkpIHsKCQkJJHJ5ID0gJHJ4OwoJCX0KCQlpZiAoIShmYWxzZSA9PT0gc3RycG9zKCRzdHlsZSwgJ0YnKSkgQU5EIGlzc2V0KCRmaWxsX2NvbG9yKSkgewoJCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoJGZpbGxfY29sb3IpOwoJCX0KCQkkb3AgPSBUQ1BERl9TVEFUSUM6OmdldFBhdGhQYWludE9wZXJhdG9yKCRzdHlsZSk7CgkJaWYgKCRvcCA9PSAnZicpIHsKCQkJJGxpbmVfc3R5bGUgPSBhcnJheSgpOwoJCX0KCQlpZiAoJGxpbmVfc3R5bGUpIHsKCQkJJHRoaXMtPlNldExpbmVTdHlsZSgkbGluZV9zdHlsZSk7CgkJfQoJCSR0aGlzLT5fb3V0ZWxsaXB0aWNhbGFyYygkeDAsICR5MCwgJHJ4LCAkcnksICRhbmdsZSwgJGFzdGFydCwgJGFmaW5pc2gsIGZhbHNlLCAkbmMsIHRydWUsIHRydWUsIGZhbHNlKTsKCQkkdGhpcy0+X291dCgkb3ApOwoJfQoKCS8qKgoJICogQXBwZW5kIGFuIGVsbGlwdGljYWwgYXJjIHRvIHRoZSBjdXJyZW50IHBhdGguCgkgKiBBbiBlbGxpcHNlIGlzIGZvcm1lZCBmcm9tIG4gQmV6aWVyIGN1cnZlcy4KCSAqIEBwYXJhbSAkeGMgKGZsb2F0KSBBYnNjaXNzYSBvZiBjZW50ZXIgcG9pbnQuCgkgKiBAcGFyYW0gJHljIChmbG9hdCkgT3JkaW5hdGUgb2YgY2VudGVyIHBvaW50LgoJICogQHBhcmFtICRyeCAoZmxvYXQpIEhvcml6b250YWwgcmFkaXVzLgoJICogQHBhcmFtICRyeSAoZmxvYXQpIFZlcnRpY2FsIHJhZGl1cyAoaWYgcnkgPSAwIHRoZW4gaXMgYSBjaXJjbGUsIHNlZSBDaXJjbGUoKSkuIERlZmF1bHQgdmFsdWU6IDAuCgkgKiBAcGFyYW0gJHhhbmc6IChmbG9hdCkgQW5nbGUgYmV0d2VlbiB0aGUgWC1heGlzIGFuZCB0aGUgbWFqb3IgYXhpcyBvZiB0aGUgZWxsaXBzZS4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkYW5nczogKGZsb2F0KSBBbmdsZSBzdGFydCBvZiBkcmF3IGxpbmUuIERlZmF1bHQgdmFsdWU6IDAuCgkgKiBAcGFyYW0gJGFuZ2Y6IChmbG9hdCkgQW5nbGUgZmluaXNoIG9mIGRyYXcgbGluZS4gRGVmYXVsdCB2YWx1ZTogMzYwLgoJICogQHBhcmFtICRwaWUgKGJvb2xlYW4pIGlmIHRydWUgZG8gbm90IG1hcmsgdGhlIGJvcmRlciBwb2ludCAodXNlZCB0byBkcmF3IHBpZSBzZWN0b3JzKS4KCSAqIEBwYXJhbSAkbmMgKGludGVnZXIpIE51bWJlciBvZiBjdXJ2ZXMgdXNlZCB0byBkcmF3IGEgOTAgZGVncmVlcyBwb3J0aW9uIG9mIGVsbGlwc2UuCgkgKiBAcGFyYW0gJHN0YXJ0cG9pbnQgKGJvb2xlYW4pIGlmIHRydWUgb3V0cHV0IGEgc3RhcnRpbmcgcG9pbnQuCgkgKiBAcGFyYW0gJGNjdyAoYm9vbGVhbikgaWYgdHJ1ZSBkcmF3cyBpbiBjb3VudGVyLWNsb2Nrd2lzZS4KCSAqIEBwYXJhbSAkc3ZnIChib29sZWFuKSBpZiB0cnVlIHRoZSBhbmdsZXMgYXJlIGluIHN2ZyBtb2RlIChhbHJlYWR5IGNhbGN1bGF0ZWQpLgoJICogQHJldHVybiBhcnJheSBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMgKHggbWluLCB5IG1pbiwgeCBtYXgsIHkgbWF4KQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjkuMDE5ICgyMDEwLTA0LTI2KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX291dGVsbGlwdGljYWxhcmMoJHhjLCAkeWMsICRyeCwgJHJ5LCAkeGFuZz0wLCAkYW5ncz0wLCAkYW5nZj0zNjAsICRwaWU9ZmFsc2UsICRuYz0yLCAkc3RhcnRwb2ludD10cnVlLCAkY2N3PXRydWUsICRzdmc9ZmFsc2UpIHsKCQlpZiAoKCRyeCA8PSAwKSBPUiAoJHJ5IDwgMCkpIHsKCQkJcmV0dXJuOwoJCX0KCQkkayA9ICR0aGlzLT5rOwoJCWlmICgkbmMgPCAyKSB7CgkJCSRuYyA9IDI7CgkJfQoJCSR4bWluID0gMjE0NzQ4MzY0NzsKCQkkeW1pbiA9IDIxNDc0ODM2NDc7CgkJJHhtYXggPSAwOwoJCSR5bWF4ID0gMDsKCQlpZiAoJHBpZSkgewoJCQkvLyBjZW50ZXIgb2YgdGhlIGFyYwoJCQkkdGhpcy0+X291dFBvaW50KCR4YywgJHljKTsKCQl9CgkJJHhhbmcgPSBkZWcycmFkKChmbG9hdCkgJHhhbmcpOwoJCSRhbmdzID0gZGVnMnJhZCgoZmxvYXQpICRhbmdzKTsKCQkkYW5nZiA9IGRlZzJyYWQoKGZsb2F0KSAkYW5nZik7CgkJaWYgKCRzdmcpIHsKCQkJJGFzID0gJGFuZ3M7CgkJCSRhZiA9ICRhbmdmOwoJCX0gZWxzZSB7CgkJCSRhcyA9IGF0YW4yKChzaW4oJGFuZ3MpIC8gJHJ5KSwgKGNvcygkYW5ncykgLyAkcngpKTsKCQkJJGFmID0gYXRhbjIoKHNpbigkYW5nZikgLyAkcnkpLCAoY29zKCRhbmdmKSAvICRyeCkpOwoJCX0KCQlpZiAoJGFzIDwgMCkgewoJCQkkYXMgKz0gKDIgKiBNX1BJKTsKCQl9CgkJaWYgKCRhZiA8IDApIHsKCQkJJGFmICs9ICgyICogTV9QSSk7CgkJfQoJCWlmICgkY2N3IEFORCAoJGFzID4gJGFmKSkgewoJCQkvLyByZXZlcnNlIHJvdGF0aW9uCgkJCSRhcyAtPSAoMiAqIE1fUEkpOwoJCX0gZWxzZWlmICghJGNjdyBBTkQgKCRhcyA8ICRhZikpIHsKCQkJLy8gcmV2ZXJzZSByb3RhdGlvbgoJCQkkYWYgLT0gKDIgKiBNX1BJKTsKCQl9CgkJJHRvdGFsX2FuZ2xlID0gKCRhZiAtICRhcyk7CgkJaWYgKCRuYyA8IDIpIHsKCQkJJG5jID0gMjsKCQl9CgkJLy8gdG90YWwgYXJjcyB0byBkcmF3CgkJJG5jICo9ICgyICogYWJzKCR0b3RhbF9hbmdsZSkgLyBNX1BJKTsKCQkkbmMgPSByb3VuZCgkbmMpICsgMTsKCQkvLyBhbmdsZSBvZiBlYWNoIGFyYwoJCSRhcmNhbmcgPSAoJHRvdGFsX2FuZ2xlIC8gJG5jKTsKCQkvLyBjZW50ZXIgcG9pbnQgaW4gUERGIGNvb3JkaW5hdGVzCgkJJHgwID0gJHhjOwoJCSR5MCA9ICgkdGhpcy0+aCAtICR5Yyk7CgkJLy8gc3RhcnRpbmcgYW5nbGUKCQkkYW5nID0gJGFzOwoJCSRhbHBoYSA9IHNpbigkYXJjYW5nKSAqICgoc3FydCg0ICsgKDMgKiBwb3codGFuKCgkYXJjYW5nKSAvIDIpLCAyKSkpIC0gMSkgLyAzKTsKCQkkY29zX3hhbmcgPSBjb3MoJHhhbmcpOwoJCSRzaW5feGFuZyA9IHNpbigkeGFuZyk7CgkJJGNvc19hbmcgPSBjb3MoJGFuZyk7CgkJJHNpbl9hbmcgPSBzaW4oJGFuZyk7CgkJLy8gZmlyc3QgYXJjIHBvaW50CgkJJHB4MSA9ICR4MCArICgkcnggKiAkY29zX3hhbmcgKiAkY29zX2FuZykgLSAoJHJ5ICogJHNpbl94YW5nICogJHNpbl9hbmcpOwoJCSRweTEgPSAkeTAgKyAoJHJ4ICogJHNpbl94YW5nICogJGNvc19hbmcpICsgKCRyeSAqICRjb3NfeGFuZyAqICRzaW5fYW5nKTsKCQkvLyBmaXJzdCBCZXppZXIgY29udHJvbCBwb2ludAoJCSRxeDEgPSAoJGFscGhhICogKCgtJHJ4ICogJGNvc194YW5nICogJHNpbl9hbmcpIC0gKCRyeSAqICRzaW5feGFuZyAqICRjb3NfYW5nKSkpOwoJCSRxeTEgPSAoJGFscGhhICogKCgtJHJ4ICogJHNpbl94YW5nICogJHNpbl9hbmcpICsgKCRyeSAqICRjb3NfeGFuZyAqICRjb3NfYW5nKSkpOwoJCWlmICgkcGllKSB7CgkJCS8vIGxpbmUgZnJvbSBjZW50ZXIgdG8gYXJjIHN0YXJ0aW5nIHBvaW50CgkJCSR0aGlzLT5fb3V0TGluZSgkcHgxLCAkdGhpcy0+aCAtICRweTEpOwoJCX0gZWxzZWlmICgkc3RhcnRwb2ludCkgewoJCQkvLyBhcmMgc3RhcnRpbmcgcG9pbnQKCQkJJHRoaXMtPl9vdXRQb2ludCgkcHgxLCAkdGhpcy0+aCAtICRweTEpOwoJCX0KCQkvLyBkcmF3IGFyY3MKCQlmb3IgKCRpID0gMTsgJGkgPD0gJG5jOyArKyRpKSB7CgkJCS8vIHN0YXJ0aW5nIGFuZ2xlCgkJCSRhbmcgPSAkYXMgKyAoJGkgKiAkYXJjYW5nKTsKCQkJaWYgKCRpID09ICRuYykgewoJCQkJJGFuZyA9ICRhZjsKCQkJfQoJCQkkY29zX2FuZyA9IGNvcygkYW5nKTsKCQkJJHNpbl9hbmcgPSBzaW4oJGFuZyk7CgkJCS8vIHNlY29uZCBhcmMgcG9pbnQKCQkJJHB4MiA9ICR4MCArICgkcnggKiAkY29zX3hhbmcgKiAkY29zX2FuZykgLSAoJHJ5ICogJHNpbl94YW5nICogJHNpbl9hbmcpOwoJCQkkcHkyID0gJHkwICsgKCRyeCAqICRzaW5feGFuZyAqICRjb3NfYW5nKSArICgkcnkgKiAkY29zX3hhbmcgKiAkc2luX2FuZyk7CgkJCS8vIHNlY29uZCBCZXppZXIgY29udHJvbCBwb2ludAoJCQkkcXgyID0gKCRhbHBoYSAqICgoLSRyeCAqICRjb3NfeGFuZyAqICRzaW5fYW5nKSAtICgkcnkgKiAkc2luX3hhbmcgKiAkY29zX2FuZykpKTsKCQkJJHF5MiA9ICgkYWxwaGEgKiAoKC0kcnggKiAkc2luX3hhbmcgKiAkc2luX2FuZykgKyAoJHJ5ICogJGNvc194YW5nICogJGNvc19hbmcpKSk7CgkJCS8vIGRyYXcgYXJjCgkJCSRjeDEgPSAoJHB4MSArICRxeDEpOwoJCQkkY3kxID0gKCR0aGlzLT5oIC0gKCRweTEgKyAkcXkxKSk7CgkJCSRjeDIgPSAoJHB4MiAtICRxeDIpOwoJCQkkY3kyID0gKCR0aGlzLT5oIC0gKCRweTIgLSAkcXkyKSk7CgkJCSRjeDMgPSAkcHgyOwoJCQkkY3kzID0gKCR0aGlzLT5oIC0gJHB5Mik7CgkJCSR0aGlzLT5fb3V0Q3VydmUoJGN4MSwgJGN5MSwgJGN4MiwgJGN5MiwgJGN4MywgJGN5Myk7CgkJCS8vIGdldCBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMKCQkJJHhtaW4gPSBtaW4oJHhtaW4sICRjeDEsICRjeDIsICRjeDMpOwoJCQkkeW1pbiA9IG1pbigkeW1pbiwgJGN5MSwgJGN5MiwgJGN5Myk7CgkJCSR4bWF4ID0gbWF4KCR4bWF4LCAkY3gxLCAkY3gyLCAkY3gzKTsKCQkJJHltYXggPSBtYXgoJHltYXgsICRjeTEsICRjeTIsICRjeTMpOwoJCQkvLyBtb3ZlIHRvIG5leHQgcG9pbnQKCQkJJHB4MSA9ICRweDI7CgkJCSRweTEgPSAkcHkyOwoJCQkkcXgxID0gJHF4MjsKCQkJJHF5MSA9ICRxeTI7CgkJfQoJCWlmICgkcGllKSB7CgkJCSR0aGlzLT5fb3V0TGluZSgkeGMsICR5Yyk7CgkJCS8vIGdldCBib3VuZGluZyBib3ggY29vcmRpbmF0ZXMKCQkJJHhtaW4gPSBtaW4oJHhtaW4sICR4Yyk7CgkJCSR5bWluID0gbWluKCR5bWluLCAkeWMpOwoJCQkkeG1heCA9IG1heCgkeG1heCwgJHhjKTsKCQkJJHltYXggPSBtYXgoJHltYXgsICR5Yyk7CgkJfQoJCXJldHVybiBhcnJheSgkeG1pbiwgJHltaW4sICR4bWF4LCAkeW1heCk7Cgl9CgoJLyoqCgkgKiBEcmF3cyBhIGNpcmNsZS4KCSAqIEEgY2lyY2xlIGlzIGZvcm1lZCBmcm9tIG4gQmV6aWVyIGN1cnZlcy4KCSAqIEBwYXJhbSAkeDAgKGZsb2F0KSBBYnNjaXNzYSBvZiBjZW50ZXIgcG9pbnQuCgkgKiBAcGFyYW0gJHkwIChmbG9hdCkgT3JkaW5hdGUgb2YgY2VudGVyIHBvaW50LgoJICogQHBhcmFtICRyIChmbG9hdCkgUmFkaXVzLgoJICogQHBhcmFtICRhbmdzdHI6IChmbG9hdCkgQW5nbGUgc3RhcnQgb2YgZHJhdyBsaW5lLiBEZWZhdWx0IHZhbHVlOiAwLgoJICogQHBhcmFtICRhbmdlbmQ6IChmbG9hdCkgQW5nbGUgZmluaXNoIG9mIGRyYXcgbGluZS4gRGVmYXVsdCB2YWx1ZTogMzYwLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkbGluZV9zdHlsZSAoYXJyYXkpIExpbmUgc3R5bGUgb2YgY2lyY2xlLiBBcnJheSBsaWtlIGZvciBTZXRMaW5lU3R5bGUoKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KHJlZCwgZ3JlZW4sIGJsdWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJG5jIChpbnRlZ2VyKSBOdW1iZXIgb2YgY3VydmVzIHVzZWQgdG8gZHJhdyBhIDkwIGRlZ3JlZXMgcG9ydGlvbiBvZiBjaXJjbGUuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIENpcmNsZSgkeDAsICR5MCwgJHIsICRhbmdzdHI9MCwgJGFuZ2VuZD0zNjAsICRzdHlsZT0nJywgJGxpbmVfc3R5bGU9YXJyYXkoKSwgJGZpbGxfY29sb3I9YXJyYXkoKSwgJG5jPTIpIHsKCQkkdGhpcy0+RWxsaXBzZSgkeDAsICR5MCwgJHIsICRyLCAwLCAkYW5nc3RyLCAkYW5nZW5kLCAkc3R5bGUsICRsaW5lX3N0eWxlLCAkZmlsbF9jb2xvciwgJG5jKTsKCX0KCgkvKioKCSAqIERyYXdzIGEgcG9seWdvbmFsIGxpbmUKCSAqIEBwYXJhbSAkcCAoYXJyYXkpIFBvaW50cyAwIHRvICgkbnAgLSAxKS4gQXJyYXkgd2l0aCB2YWx1ZXMgKHgwLCB5MCwgeDEsIHkxLC4uLiwgeChucC0xKSwgeShucCAtIDEpKQoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkbGluZV9zdHlsZSAoYXJyYXkpIExpbmUgc3R5bGUgb2YgcG9seWdvbi4gQXJyYXkgd2l0aCBrZXlzIGFtb25nIHRoZSBmb2xsb3dpbmc6CgkgKiA8dWw+CgkgKgkgPGxpPmFsbDogTGluZSBzdHlsZSBvZiBhbGwgbGluZXMuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLjwvbGk+CgkgKgkgPGxpPjAgdG8gKCRucCAtIDEpOiBMaW5lIHN0eWxlIG9mIGVhY2ggbGluZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuPC9saT4KCSAqIDwvdWw+CgkgKiBJZiBhIGtleSBpcyBub3QgcHJlc2VudCBvciBpcyBudWxsLCBub3QgZHJhd3MgdGhlIGxpbmUuIERlZmF1bHQgdmFsdWUgaXMgZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KEdSRVkpIG9yIGFycmF5KFIsRyxCKSBvciBhcnJheShDLE0sWSxLKSBvciBhcnJheShDLE0sWSxLLFNwb3RDb2xvck5hbWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAc2luY2UgNC44LjAwMyAoMjAwOS0wOS0xNSkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFBvbHlMaW5lKCRwLCAkc3R5bGU9JycsICRsaW5lX3N0eWxlPWFycmF5KCksICRmaWxsX2NvbG9yPWFycmF5KCkpIHsKCQkkdGhpcy0+UG9seWdvbigkcCwgJHN0eWxlLCAkbGluZV9zdHlsZSwgJGZpbGxfY29sb3IsIGZhbHNlKTsKCX0KCgkvKioKCSAqIERyYXdzIGEgcG9seWdvbi4KCSAqIEBwYXJhbSAkcCAoYXJyYXkpIFBvaW50cyAwIHRvICgkbnAgLSAxKS4gQXJyYXkgd2l0aCB2YWx1ZXMgKHgwLCB5MCwgeDEsIHkxLC4uLiwgeChucC0xKSwgeShucCAtIDEpKQoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkbGluZV9zdHlsZSAoYXJyYXkpIExpbmUgc3R5bGUgb2YgcG9seWdvbi4gQXJyYXkgd2l0aCBrZXlzIGFtb25nIHRoZSBmb2xsb3dpbmc6CgkgKiA8dWw+CgkgKgkgPGxpPmFsbDogTGluZSBzdHlsZSBvZiBhbGwgbGluZXMuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLjwvbGk+CgkgKgkgPGxpPjAgdG8gKCRucCAtIDEpOiBMaW5lIHN0eWxlIG9mIGVhY2ggbGluZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuPC9saT4KCSAqIDwvdWw+CgkgKiBJZiBhIGtleSBpcyBub3QgcHJlc2VudCBvciBpcyBudWxsLCBub3QgZHJhd3MgdGhlIGxpbmUuIERlZmF1bHQgdmFsdWUgaXMgZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KEdSRVkpIG9yIGFycmF5KFIsRyxCKSBvciBhcnJheShDLE0sWSxLKSBvciBhcnJheShDLE0sWSxLLFNwb3RDb2xvck5hbWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGNsb3NlZCAoYm9vbGVhbikgaWYgdHJ1ZSB0aGUgcG9seWdvbiBpcyBjbG9zZXMsIG90aGVyd2lzZSB3aWxsIHJlbWFpbiBvcGVuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFBvbHlnb24oJHAsICRzdHlsZT0nJywgJGxpbmVfc3R5bGU9YXJyYXkoKSwgJGZpbGxfY29sb3I9YXJyYXkoKSwgJGNsb3NlZD10cnVlKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCXJldHVybjsKCQl9CgkJJG5jID0gY291bnQoJHApOyAvLyBudW1iZXIgb2YgY29vcmRpbmF0ZXMKCQkkbnAgPSAkbmMgLyAyOyAvLyBudW1iZXIgb2YgcG9pbnRzCgkJaWYgKCRjbG9zZWQpIHsKCQkJLy8gY2xvc2UgcG9seWdvbiBieSBhZGRpbmcgdGhlIGZpcnN0IDIgcG9pbnRzIGF0IHRoZSBlbmQgKG9uZSBsaW5lKQoJCQlmb3IgKCRpID0gMDsgJGkgPCA0OyArKyRpKSB7CgkJCQkkcFskbmMgKyAkaV0gPSAkcFskaV07CgkJCX0KCQkJLy8gY29weSBzdHlsZSBmb3IgdGhlIGxhc3QgYWRkZWQgbGluZQoJCQlpZiAoaXNzZXQoJGxpbmVfc3R5bGVbMF0pKSB7CgkJCQkkbGluZV9zdHlsZVskbnBdID0gJGxpbmVfc3R5bGVbMF07CgkJCX0KCQkJJG5jICs9IDQ7CgkJfQoJCWlmICghKGZhbHNlID09PSBzdHJwb3MoJHN0eWxlLCAnRicpKSBBTkQgaXNzZXQoJGZpbGxfY29sb3IpKSB7CgkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkZmlsbF9jb2xvcik7CgkJfQoJCSRvcCA9IFRDUERGX1NUQVRJQzo6Z2V0UGF0aFBhaW50T3BlcmF0b3IoJHN0eWxlKTsKCQlpZiAoJG9wID09ICdmJykgewoJCQkkbGluZV9zdHlsZSA9IGFycmF5KCk7CgkJfQoJCSRkcmF3ID0gdHJ1ZTsKCQlpZiAoJGxpbmVfc3R5bGUpIHsKCQkJaWYgKGlzc2V0KCRsaW5lX3N0eWxlWydhbGwnXSkpIHsKCQkJCSR0aGlzLT5TZXRMaW5lU3R5bGUoJGxpbmVfc3R5bGVbJ2FsbCddKTsKCQkJfSBlbHNlIHsKCQkJCSRkcmF3ID0gZmFsc2U7CgkJCQlpZiAoJG9wID09ICdCJykgewoJCQkJCS8vIGRyYXcgZmlsbAoJCQkJCSRvcCA9ICdmJzsKCQkJCQkkdGhpcy0+X291dFBvaW50KCRwWzBdLCAkcFsxXSk7CgkJCQkJZm9yICgkaSA9IDI7ICRpIDwgJG5jOyAkaSA9ICRpICsgMikgewoJCQkJCQkkdGhpcy0+X291dExpbmUoJHBbJGldLCAkcFskaSArIDFdKTsKCQkJCQl9CgkJCQkJJHRoaXMtPl9vdXQoJG9wKTsKCQkJCX0KCQkJCS8vIGRyYXcgb3V0bGluZQoJCQkJJHRoaXMtPl9vdXRQb2ludCgkcFswXSwgJHBbMV0pOwoJCQkJZm9yICgkaSA9IDI7ICRpIDwgJG5jOyAkaSA9ICRpICsgMikgewoJCQkJCSRsaW5lX251bSA9ICgkaSAvIDIpIC0gMTsKCQkJCQlpZiAoaXNzZXQoJGxpbmVfc3R5bGVbJGxpbmVfbnVtXSkpIHsKCQkJCQkJaWYgKCRsaW5lX3N0eWxlWyRsaW5lX251bV0gIT0gMCkgewoJCQkJCQkJaWYgKGlzX2FycmF5KCRsaW5lX3N0eWxlWyRsaW5lX251bV0pKSB7CgkJCQkJCQkJJHRoaXMtPl9vdXQoJ1MnKTsKCQkJCQkJCQkkdGhpcy0+U2V0TGluZVN0eWxlKCRsaW5lX3N0eWxlWyRsaW5lX251bV0pOwoJCQkJCQkJCSR0aGlzLT5fb3V0UG9pbnQoJHBbJGkgLSAyXSwgJHBbJGkgLSAxXSk7CgkJCQkJCQkJJHRoaXMtPl9vdXRMaW5lKCRwWyRpXSwgJHBbJGkgKyAxXSk7CgkJCQkJCQkJJHRoaXMtPl9vdXQoJ1MnKTsKCQkJCQkJCQkkdGhpcy0+X291dFBvaW50KCRwWyRpXSwgJHBbJGkgKyAxXSk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSR0aGlzLT5fb3V0TGluZSgkcFskaV0sICRwWyRpICsgMV0pOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPl9vdXRMaW5lKCRwWyRpXSwgJHBbJGkgKyAxXSk7CgkJCQkJfQoJCQkJfQoJCQkJJHRoaXMtPl9vdXQoJG9wKTsKCQkJfQoJCX0KCQlpZiAoJGRyYXcpIHsKCQkJJHRoaXMtPl9vdXRQb2ludCgkcFswXSwgJHBbMV0pOwoJCQlmb3IgKCRpID0gMjsgJGkgPCAkbmM7ICRpID0gJGkgKyAyKSB7CgkJCQkkdGhpcy0+X291dExpbmUoJHBbJGldLCAkcFskaSArIDFdKTsKCQkJfQoJCQkkdGhpcy0+X291dCgkb3ApOwoJCX0KCX0KCgkvKioKCSAqIERyYXdzIGEgcmVndWxhciBwb2x5Z29uLgoJICogQHBhcmFtICR4MCAoZmxvYXQpIEFic2Npc3NhIG9mIGNlbnRlciBwb2ludC4KCSAqIEBwYXJhbSAkeTAgKGZsb2F0KSBPcmRpbmF0ZSBvZiBjZW50ZXIgcG9pbnQuCgkgKiBAcGFyYW0gJHI6IChmbG9hdCkgUmFkaXVzIG9mIGluc2NyaWJlZCBjaXJjbGUuCgkgKiBAcGFyYW0gJG5zIChpbnRlZ2VyKSBOdW1iZXIgb2Ygc2lkZXMuCgkgKiBAcGFyYW0gJGFuZ2xlIChmbG9hdCkgQW5nbGUgb3JpZW50ZWQgKGFudGktY2xvY2t3aXNlKS4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkZHJhd19jaXJjbGUgKGJvb2xlYW4pIERyYXcgaW5zY3JpYmVkIGNpcmNsZSBvciBub3QuIERlZmF1bHQgdmFsdWU6IGZhbHNlLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkbGluZV9zdHlsZSAoYXJyYXkpIExpbmUgc3R5bGUgb2YgcG9seWdvbiBzaWRlcy4gQXJyYXkgd2l0aCBrZXlzIGFtb25nIHRoZSBmb2xsb3dpbmc6CgkgKiA8dWw+CgkgKgkgPGxpPmFsbDogTGluZSBzdHlsZSBvZiBhbGwgc2lkZXMuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLjwvbGk+CgkgKgkgPGxpPjAgdG8gKCRucyAtIDEpOiBMaW5lIHN0eWxlIG9mIGVhY2ggc2lkZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuPC9saT4KCSAqIDwvdWw+CgkgKiBJZiBhIGtleSBpcyBub3QgcHJlc2VudCBvciBpcyBudWxsLCBub3QgZHJhd3MgdGhlIHNpZGUuIERlZmF1bHQgdmFsdWUgaXMgZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KHJlZCwgZ3JlZW4sIGJsdWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGNpcmNsZV9zdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcgb2YgaW5zY3JpYmVkIGNpcmNsZSAoaWYgZHJhd3MpLiBQb3NzaWJsZSB2YWx1ZXMgYXJlOgoJICogPHVsPgoJICoJIDxsaT5EIG9yIGVtcHR5IHN0cmluZzogRHJhdyAoZGVmYXVsdCkuPC9saT4KCSAqCSA8bGk+RjogRmlsbC48L2xpPgoJICoJIDxsaT5ERiBvciBGRDogRHJhdyBhbmQgZmlsbC48L2xpPgoJICoJIDxsaT5DTlo6IENsaXBwaW5nIG1vZGUgKHVzaW5nIHRoZSBldmVuLW9kZCBydWxlIHRvIGRldGVybWluZSB3aGljaCByZWdpb25zIGxpZSBpbnNpZGUgdGhlIGNsaXBwaW5nIHBhdGgpLjwvbGk+CgkgKgkgPGxpPkNFTzogQ2xpcHBpbmcgbW9kZSAodXNpbmcgdGhlIG5vbnplcm8gd2luZGluZyBudW1iZXIgcnVsZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaW9ucyBsaWUgaW5zaWRlIHRoZSBjbGlwcGluZyBwYXRoKS48L2xpPgoJICogPC91bD4KCSAqIEBwYXJhbSAkY2lyY2xlX291dExpbmVfc3R5bGUgKGFycmF5KSBMaW5lIHN0eWxlIG9mIGluc2NyaWJlZCBjaXJjbGUgKGlmIGRyYXdzKS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRjaXJjbGVfZmlsbF9jb2xvciAoYXJyYXkpIEZpbGwgY29sb3Igb2YgaW5zY3JpYmVkIGNpcmNsZSAoaWYgZHJhd3MpLiBGb3JtYXQ6IGFycmF5KHJlZCwgZ3JlZW4sIGJsdWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMi4xLjAwMCAoMjAwOC0wMS0wOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFJlZ3VsYXJQb2x5Z29uKCR4MCwgJHkwLCAkciwgJG5zLCAkYW5nbGU9MCwgJGRyYXdfY2lyY2xlPWZhbHNlLCAkc3R5bGU9JycsICRsaW5lX3N0eWxlPWFycmF5KCksICRmaWxsX2NvbG9yPWFycmF5KCksICRjaXJjbGVfc3R5bGU9JycsICRjaXJjbGVfb3V0TGluZV9zdHlsZT1hcnJheSgpLCAkY2lyY2xlX2ZpbGxfY29sb3I9YXJyYXkoKSkgewoJCWlmICgzID4gJG5zKSB7CgkJCSRucyA9IDM7CgkJfQoJCWlmICgkZHJhd19jaXJjbGUpIHsKCQkJJHRoaXMtPkNpcmNsZSgkeDAsICR5MCwgJHIsIDAsIDM2MCwgJGNpcmNsZV9zdHlsZSwgJGNpcmNsZV9vdXRMaW5lX3N0eWxlLCAkY2lyY2xlX2ZpbGxfY29sb3IpOwoJCX0KCQkkcCA9IGFycmF5KCk7CgkJZm9yICgkaSA9IDA7ICRpIDwgJG5zOyArKyRpKSB7CgkJCSRhID0gJGFuZ2xlICsgKCRpICogMzYwIC8gJG5zKTsKCQkJJGFfcmFkID0gZGVnMnJhZCgoZmxvYXQpICRhKTsKCQkJJHBbXSA9ICR4MCArICgkciAqIHNpbigkYV9yYWQpKTsKCQkJJHBbXSA9ICR5MCArICgkciAqIGNvcygkYV9yYWQpKTsKCQl9CgkJJHRoaXMtPlBvbHlnb24oJHAsICRzdHlsZSwgJGxpbmVfc3R5bGUsICRmaWxsX2NvbG9yKTsKCX0KCgkvKioKCSAqIERyYXdzIGEgc3RhciBwb2x5Z29uCgkgKiBAcGFyYW0gJHgwIChmbG9hdCkgQWJzY2lzc2Egb2YgY2VudGVyIHBvaW50LgoJICogQHBhcmFtICR5MCAoZmxvYXQpIE9yZGluYXRlIG9mIGNlbnRlciBwb2ludC4KCSAqIEBwYXJhbSAkciAoZmxvYXQpIFJhZGl1cyBvZiBpbnNjcmliZWQgY2lyY2xlLgoJICogQHBhcmFtICRudiAoaW50ZWdlcikgTnVtYmVyIG9mIHZlcnRpY2VzLgoJICogQHBhcmFtICRuZyAoaW50ZWdlcikgTnVtYmVyIG9mIGdhcCAoaWYgKCRuZyAlICRudiA9IDEpIHRoZW4gaXMgYSByZWd1bGFyIHBvbHlnb24pLgoJICogQHBhcmFtICRhbmdsZTogKGZsb2F0KSBBbmdsZSBvcmllbnRlZCAoYW50aS1jbG9ja3dpc2UpLiBEZWZhdWx0IHZhbHVlOiAwLgoJICogQHBhcmFtICRkcmF3X2NpcmNsZTogKGJvb2xlYW4pIERyYXcgaW5zY3JpYmVkIGNpcmNsZSBvciBub3QuIERlZmF1bHQgdmFsdWUgaXMgZmFsc2UuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gU2VlIHRoZSBnZXRQYXRoUGFpbnRPcGVyYXRvcigpIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogQHBhcmFtICRsaW5lX3N0eWxlIChhcnJheSkgTGluZSBzdHlsZSBvZiBwb2x5Z29uIHNpZGVzLiBBcnJheSB3aXRoIGtleXMgYW1vbmcgdGhlIGZvbGxvd2luZzoKCSAqIDx1bD4KCSAqCSA8bGk+YWxsOiBMaW5lIHN0eWxlIG9mIGFsbCBzaWRlcy4gQXJyYXkgbGlrZSBmb3IKCSAqIFNldExpbmVTdHlsZSgpLjwvbGk+CgkgKgkgPGxpPjAgdG8gKG4gLSAxKTogTGluZSBzdHlsZSBvZiBlYWNoIHNpZGUuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLjwvbGk+CgkgKiA8L3VsPgoJICogSWYgYSBrZXkgaXMgbm90IHByZXNlbnQgb3IgaXMgbnVsbCwgbm90IGRyYXdzIHRoZSBzaWRlLiBEZWZhdWx0IHZhbHVlIGlzIGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRmaWxsX2NvbG9yIChhcnJheSkgRmlsbCBjb2xvci4gRm9ybWF0OiBhcnJheShyZWQsIGdyZWVuLCBibHVlKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBjb2xvciAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRjaXJjbGVfc3R5bGUgKHN0cmluZykgU3R5bGUgb2YgcmVuZGVyaW5nIG9mIGluc2NyaWJlZCBjaXJjbGUgKGlmIGRyYXdzKS4gUG9zc2libGUgdmFsdWVzIGFyZToKCSAqIDx1bD4KCSAqCSA8bGk+RCBvciBlbXB0eSBzdHJpbmc6IERyYXcgKGRlZmF1bHQpLjwvbGk+CgkgKgkgPGxpPkY6IEZpbGwuPC9saT4KCSAqCSA8bGk+REYgb3IgRkQ6IERyYXcgYW5kIGZpbGwuPC9saT4KCSAqCSA8bGk+Q05aOiBDbGlwcGluZyBtb2RlICh1c2luZyB0aGUgZXZlbi1vZGQgcnVsZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaW9ucyBsaWUgaW5zaWRlIHRoZSBjbGlwcGluZyBwYXRoKS48L2xpPgoJICoJIDxsaT5DRU86IENsaXBwaW5nIG1vZGUgKHVzaW5nIHRoZSBub256ZXJvIHdpbmRpbmcgbnVtYmVyIHJ1bGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgbGllIGluc2lkZSB0aGUgY2xpcHBpbmcgcGF0aCkuPC9saT4KCSAqIDwvdWw+CgkgKiBAcGFyYW0gJGNpcmNsZV9vdXRMaW5lX3N0eWxlIChhcnJheSkgTGluZSBzdHlsZSBvZiBpbnNjcmliZWQgY2lyY2xlIChpZiBkcmF3cykuIEFycmF5IGxpa2UgZm9yIFNldExpbmVTdHlsZSgpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGxpbmUgc3R5bGUgKGVtcHR5IGFycmF5KS4KCSAqIEBwYXJhbSAkY2lyY2xlX2ZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yIG9mIGluc2NyaWJlZCBjaXJjbGUgKGlmIGRyYXdzKS4gRm9ybWF0OiBhcnJheShyZWQsIGdyZWVuLCBibHVlKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBjb2xvciAoZW1wdHkgYXJyYXkpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBTdGFyUG9seWdvbigkeDAsICR5MCwgJHIsICRudiwgJG5nLCAkYW5nbGU9MCwgJGRyYXdfY2lyY2xlPWZhbHNlLCAkc3R5bGU9JycsICRsaW5lX3N0eWxlPWFycmF5KCksICRmaWxsX2NvbG9yPWFycmF5KCksICRjaXJjbGVfc3R5bGU9JycsICRjaXJjbGVfb3V0TGluZV9zdHlsZT1hcnJheSgpLCAkY2lyY2xlX2ZpbGxfY29sb3I9YXJyYXkoKSkgewoJCWlmICgkbnYgPCAyKSB7CgkJCSRudiA9IDI7CgkJfQoJCWlmICgkZHJhd19jaXJjbGUpIHsKCQkJJHRoaXMtPkNpcmNsZSgkeDAsICR5MCwgJHIsIDAsIDM2MCwgJGNpcmNsZV9zdHlsZSwgJGNpcmNsZV9vdXRMaW5lX3N0eWxlLCAkY2lyY2xlX2ZpbGxfY29sb3IpOwoJCX0KCQkkcDIgPSBhcnJheSgpOwoJCSR2aXNpdGVkID0gYXJyYXkoKTsKCQlmb3IgKCRpID0gMDsgJGkgPCAkbnY7ICsrJGkpIHsKCQkJJGEgPSAkYW5nbGUgKyAoJGkgKiAzNjAgLyAkbnYpOwoJCQkkYV9yYWQgPSBkZWcycmFkKChmbG9hdCkgJGEpOwoJCQkkcDJbXSA9ICR4MCArICgkciAqIHNpbigkYV9yYWQpKTsKCQkJJHAyW10gPSAkeTAgKyAoJHIgKiBjb3MoJGFfcmFkKSk7CgkJCSR2aXNpdGVkW10gPSBmYWxzZTsKCQl9CgkJJHAgPSBhcnJheSgpOwoJCSRpID0gMDsKCQlkbyB7CgkJCSRwW10gPSAkcDJbJGkgKiAyXTsKCQkJJHBbXSA9ICRwMlsoJGkgKiAyKSArIDFdOwoJCQkkdmlzaXRlZFskaV0gPSB0cnVlOwoJCQkkaSArPSAkbmc7CgkJCSRpICU9ICRudjsKCQl9IHdoaWxlICghJHZpc2l0ZWRbJGldKTsKCQkkdGhpcy0+UG9seWdvbigkcCwgJHN0eWxlLCAkbGluZV9zdHlsZSwgJGZpbGxfY29sb3IpOwoJfQoKCS8qKgoJICogRHJhd3MgYSByb3VuZGVkIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHcgKGZsb2F0KSBXaWR0aC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodC4KCSAqIEBwYXJhbSAkciAoZmxvYXQpIHRoZSByYWRpdXMgb2YgdGhlIGNpcmNsZSB1c2VkIHRvIHJvdW5kIG9mZiB0aGUgY29ybmVycyBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICRyb3VuZF9jb3JuZXIgKHN0cmluZykgRHJhd3Mgcm91bmRlZCBjb3JuZXIgb3Igbm90LiBTdHJpbmcgd2l0aCBhIDAgKG5vdCByb3VuZGVkIGktY29ybmVyKSBvciAxIChyb3VuZGVkIGktY29ybmVyKSBpbiBpLXBvc2l0aW9uLiBQb3NpdGlvbnMgYXJlLCBpbiBvcmRlciBhbmQgYmVnaW4gdG8gMDogdG9wIHJpZ2h0LCBib3R0b20gcmlnaHQsIGJvdHRvbSBsZWZ0IGFuZCB0b3AgbGVmdC4gRGVmYXVsdCB2YWx1ZTogYWxsIHJvdW5kZWQgY29ybmVyICgiMTExMSIpLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkYm9yZGVyX3N0eWxlIChhcnJheSkgQm9yZGVyIHN0eWxlIG9mIHJlY3RhbmdsZS4gQXJyYXkgbGlrZSBmb3IgU2V0TGluZVN0eWxlKCkuIERlZmF1bHQgdmFsdWU6IGRlZmF1bHQgbGluZSBzdHlsZSAoZW1wdHkgYXJyYXkpLgoJICogQHBhcmFtICRmaWxsX2NvbG9yIChhcnJheSkgRmlsbCBjb2xvci4gRm9ybWF0OiBhcnJheShHUkVZKSBvciBhcnJheShSLEcsQikgb3IgYXJyYXkoQyxNLFksSykgb3IgYXJyYXkoQyxNLFksSyxTcG90Q29sb3JOYW1lKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBjb2xvciAoZW1wdHkgYXJyYXkpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDIuMS4wMDAgKDIwMDgtMDEtMDgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBSb3VuZGVkUmVjdCgkeCwgJHksICR3LCAkaCwgJHIsICRyb3VuZF9jb3JuZXI9JzExMTEnLCAkc3R5bGU9JycsICRib3JkZXJfc3R5bGU9YXJyYXkoKSwgJGZpbGxfY29sb3I9YXJyYXkoKSkgewoJCSR0aGlzLT5Sb3VuZGVkUmVjdFhZKCR4LCAkeSwgJHcsICRoLCAkciwgJHIsICRyb3VuZF9jb3JuZXIsICRzdHlsZSwgJGJvcmRlcl9zdHlsZSwgJGZpbGxfY29sb3IpOwoJfQoKCS8qKgoJICogRHJhd3MgYSByb3VuZGVkIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHcgKGZsb2F0KSBXaWR0aC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodC4KCSAqIEBwYXJhbSAkcnggKGZsb2F0KSB0aGUgeC1heGlzIHJhZGl1cyBvZiB0aGUgZWxsaXBzZSB1c2VkIHRvIHJvdW5kIG9mZiB0aGUgY29ybmVycyBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICRyeSAoZmxvYXQpIHRoZSB5LWF4aXMgcmFkaXVzIG9mIHRoZSBlbGxpcHNlIHVzZWQgdG8gcm91bmQgb2ZmIHRoZSBjb3JuZXJzIG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJHJvdW5kX2Nvcm5lciAoc3RyaW5nKSBEcmF3cyByb3VuZGVkIGNvcm5lciBvciBub3QuIFN0cmluZyB3aXRoIGEgMCAobm90IHJvdW5kZWQgaS1jb3JuZXIpIG9yIDEgKHJvdW5kZWQgaS1jb3JuZXIpIGluIGktcG9zaXRpb24uIFBvc2l0aW9ucyBhcmUsIGluIG9yZGVyIGFuZCBiZWdpbiB0byAwOiB0b3AgcmlnaHQsIGJvdHRvbSByaWdodCwgYm90dG9tIGxlZnQgYW5kIHRvcCBsZWZ0LiBEZWZhdWx0IHZhbHVlOiBhbGwgcm91bmRlZCBjb3JuZXIgKCIxMTExIikuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gU2VlIHRoZSBnZXRQYXRoUGFpbnRPcGVyYXRvcigpIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogQHBhcmFtICRib3JkZXJfc3R5bGUgKGFycmF5KSBCb3JkZXIgc3R5bGUgb2YgcmVjdGFuZ2xlLiBBcnJheSBsaWtlIGZvciBTZXRMaW5lU3R5bGUoKS4gRGVmYXVsdCB2YWx1ZTogZGVmYXVsdCBsaW5lIHN0eWxlIChlbXB0eSBhcnJheSkuCgkgKiBAcGFyYW0gJGZpbGxfY29sb3IgKGFycmF5KSBGaWxsIGNvbG9yLiBGb3JtYXQ6IGFycmF5KEdSRVkpIG9yIGFycmF5KFIsRyxCKSBvciBhcnJheShDLE0sWSxLKSBvciBhcnJheShDLE0sWSxLLFNwb3RDb2xvck5hbWUpLiBEZWZhdWx0IHZhbHVlOiBkZWZhdWx0IGNvbG9yIChlbXB0eSBhcnJheSkuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC45LjAxOSAoMjAxMC0wNC0yMikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFJvdW5kZWRSZWN0WFkoJHgsICR5LCAkdywgJGgsICRyeCwgJHJ5LCAkcm91bmRfY29ybmVyPScxMTExJywgJHN0eWxlPScnLCAkYm9yZGVyX3N0eWxlPWFycmF5KCksICRmaWxsX2NvbG9yPWFycmF5KCkpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoKCRyb3VuZF9jb3JuZXIgPT0gJzAwMDAnKSBPUiAoKCRyeCA9PSAkcnkpIEFORCAoJHJ4ID09IDApKSkgewoJCQkvLyBOb3Qgcm91bmRlZAoJCQkkdGhpcy0+UmVjdCgkeCwgJHksICR3LCAkaCwgJHN0eWxlLCAkYm9yZGVyX3N0eWxlLCAkZmlsbF9jb2xvcik7CgkJCXJldHVybjsKCQl9CgkJLy8gUm91bmRlZAoJCWlmICghKGZhbHNlID09PSBzdHJwb3MoJHN0eWxlLCAnRicpKSBBTkQgaXNzZXQoJGZpbGxfY29sb3IpKSB7CgkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkZmlsbF9jb2xvcik7CgkJfQoJCSRvcCA9IFRDUERGX1NUQVRJQzo6Z2V0UGF0aFBhaW50T3BlcmF0b3IoJHN0eWxlKTsKCQlpZiAoJG9wID09ICdmJykgewoJCQkkYm9yZGVyX3N0eWxlID0gYXJyYXkoKTsKCQl9CgkJaWYgKCRib3JkZXJfc3R5bGUpIHsKCQkJJHRoaXMtPlNldExpbmVTdHlsZSgkYm9yZGVyX3N0eWxlKTsKCQl9CgkJJE15QXJjID0gNCAvIDMgKiAoc3FydCgyKSAtIDEpOwoJCSR0aGlzLT5fb3V0UG9pbnQoJHggKyAkcngsICR5KTsKCQkkeGMgPSAkeCArICR3IC0gJHJ4OwoJCSR5YyA9ICR5ICsgJHJ5OwoJCSR0aGlzLT5fb3V0TGluZSgkeGMsICR5KTsKCQlpZiAoJHJvdW5kX2Nvcm5lclswXSkgewoJCQkkdGhpcy0+X291dEN1cnZlKCR4YyArICgkcnggKiAkTXlBcmMpLCAkeWMgLSAkcnksICR4YyArICRyeCwgJHljIC0gKCRyeSAqICRNeUFyYyksICR4YyArICRyeCwgJHljKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+X291dExpbmUoJHggKyAkdywgJHkpOwoJCX0KCQkkeGMgPSAkeCArICR3IC0gJHJ4OwoJCSR5YyA9ICR5ICsgJGggLSAkcnk7CgkJJHRoaXMtPl9vdXRMaW5lKCR4ICsgJHcsICR5Yyk7CgkJaWYgKCRyb3VuZF9jb3JuZXJbMV0pIHsKCQkJJHRoaXMtPl9vdXRDdXJ2ZSgkeGMgKyAkcngsICR5YyArICgkcnkgKiAkTXlBcmMpLCAkeGMgKyAoJHJ4ICogJE15QXJjKSwgJHljICsgJHJ5LCAkeGMsICR5YyArICRyeSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPl9vdXRMaW5lKCR4ICsgJHcsICR5ICsgJGgpOwoJCX0KCQkkeGMgPSAkeCArICRyeDsKCQkkeWMgPSAkeSArICRoIC0gJHJ5OwoJCSR0aGlzLT5fb3V0TGluZSgkeGMsICR5ICsgJGgpOwoJCWlmICgkcm91bmRfY29ybmVyWzJdKSB7CgkJCSR0aGlzLT5fb3V0Q3VydmUoJHhjIC0gKCRyeCAqICRNeUFyYyksICR5YyArICRyeSwgJHhjIC0gJHJ4LCAkeWMgKyAoJHJ5ICogJE15QXJjKSwgJHhjIC0gJHJ4LCAkeWMpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5fb3V0TGluZSgkeCwgJHkgKyAkaCk7CgkJfQoJCSR4YyA9ICR4ICsgJHJ4OwoJCSR5YyA9ICR5ICsgJHJ5OwoJCSR0aGlzLT5fb3V0TGluZSgkeCwgJHljKTsKCQlpZiAoJHJvdW5kX2Nvcm5lclszXSkgewoJCQkkdGhpcy0+X291dEN1cnZlKCR4YyAtICRyeCwgJHljIC0gKCRyeSAqICRNeUFyYyksICR4YyAtICgkcnggKiAkTXlBcmMpLCAkeWMgLSAkcnksICR4YywgJHljIC0gJHJ5KTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+X291dExpbmUoJHgsICR5KTsKCQkJJHRoaXMtPl9vdXRMaW5lKCR4ICsgJHJ4LCAkeSk7CgkJfQoJCSR0aGlzLT5fb3V0KCRvcCk7Cgl9CgoJLyoqCgkgKiBEcmF3cyBhIGdyYWhpYyBhcnJvdy4KCSAqIEBwYXJhbSAkeDAgKGZsb2F0KSBBYnNjaXNzYSBvZiBmaXJzdCBwb2ludC4KCSAqIEBwYXJhbSAkeTAgKGZsb2F0KSBPcmRpbmF0ZSBvZiBmaXJzdCBwb2ludC4KCSAqIEBwYXJhbSAkeDEgKGZsb2F0KSBBYnNjaXNzYSBvZiBzZWNvbmQgcG9pbnQuCgkgKiBAcGFyYW0gJHkxIChmbG9hdCkgT3JkaW5hdGUgb2Ygc2Vjb25kIHBvaW50LgoJICogQHBhcmFtICRoZWFkX3N0eWxlIChpbnQpICgwID0gZHJhdyBvbmx5IGFycm93aGVhZCBhcm1zLCAxID0gZHJhdyBjbG9zZWQgYXJyb3doZWFkLCBidXQgbm8gZmlsbCwgMiA9IGNsb3NlZCBhbmQgZmlsbGVkIGFycm93aGVhZCwgMyA9IGZpbGxlZCBhcnJvd2hlYWQpCgkgKiBAcGFyYW0gJGFybV9zaXplIChmbG9hdCkgbGVuZ3RoIG9mIGFycm93aGVhZCBhcm1zCgkgKiBAcGFyYW0gJGFybV9hbmdsZSAoaW50KSBhbmdsZSBiZXR3ZWVuIGFuIGFybSBhbmQgdGhlIHNoYWZ0CgkgKiBAYXV0aG9yIFBpb3RyIEdhbGVja2ksIE5pY29sYSBBc3VuaSwgQW5keSBNZWllcgoJICogQHNpbmNlIDQuNi4wMTggKDIwMDktMDctMTApCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBBcnJvdygkeDAsICR5MCwgJHgxLCAkeTEsICRoZWFkX3N0eWxlPTAsICRhcm1fc2l6ZT01LCAkYXJtX2FuZ2xlPTE1KSB7CgkJLy8gZ2V0dGluZyBhcnJvdyBkaXJlY3Rpb24gYW5nbGUKCQkvLyAwIGRlZyBhbmdsZSBpcyB3aGVuIGJvdGggYXJtcyBnbyBhbG9uZyBYIGF4aXMuIGFuZ2xlIGdyb3dzIGNsb2Nrd2lzZS4KCQkkZGlyX2FuZ2xlID0gYXRhbjIoKCR5MCAtICR5MSksICgkeDAgLSAkeDEpKTsKCQlpZiAoJGRpcl9hbmdsZSA8IDApIHsKCQkJJGRpcl9hbmdsZSArPSAoMiAqIE1fUEkpOwoJCX0KCQkkYXJtX2FuZ2xlID0gZGVnMnJhZCgkYXJtX2FuZ2xlKTsKCQkkc3gxID0gJHgxOwoJCSRzeTEgPSAkeTE7CgkJaWYgKCRoZWFkX3N0eWxlID4gMCkgewoJCQkvLyBjYWxjdWxhdGUgdGhlIHN0b3BwaW5nIHBvaW50IGZvciB0aGUgYXJyb3cgc2hhZnQKCQkJJHN4MSA9ICR4MSArICgoJGFybV9zaXplIC0gJHRoaXMtPkxpbmVXaWR0aCkgKiBjb3MoJGRpcl9hbmdsZSkpOwoJCQkkc3kxID0gJHkxICsgKCgkYXJtX3NpemUgLSAkdGhpcy0+TGluZVdpZHRoKSAqIHNpbigkZGlyX2FuZ2xlKSk7CgkJfQoJCS8vIG1haW4gYXJyb3cgbGluZSAvIHNoYWZ0CgkJJHRoaXMtPkxpbmUoJHgwLCAkeTAsICRzeDEsICRzeTEpOwoJCS8vIGxlZnQgYXJyb3doZWFkIGFybSB0aXAKCQkkeDJMID0gJHgxICsgKCRhcm1fc2l6ZSAqIGNvcygkZGlyX2FuZ2xlICsgJGFybV9hbmdsZSkpOwoJCSR5MkwgPSAkeTEgKyAoJGFybV9zaXplICogc2luKCRkaXJfYW5nbGUgKyAkYXJtX2FuZ2xlKSk7CgkJLy8gcmlnaHQgYXJyb3doZWFkIGFybSB0aXAKCQkkeDJSID0gJHgxICsgKCRhcm1fc2l6ZSAqIGNvcygkZGlyX2FuZ2xlIC0gJGFybV9hbmdsZSkpOwoJCSR5MlIgPSAkeTEgKyAoJGFybV9zaXplICogc2luKCRkaXJfYW5nbGUgLSAkYXJtX2FuZ2xlKSk7CgkJJG1vZGUgPSAnRCc7CgkJJHN0eWxlID0gYXJyYXkoKTsKCQlzd2l0Y2ggKCRoZWFkX3N0eWxlKSB7CgkJCWNhc2UgMDogewoJCQkJLy8gZHJhdyBvbmx5IGFycm93aGVhZCBhcm1zCgkJCQkkbW9kZSA9ICdEJzsKCQkJCSRzdHlsZSA9IGFycmF5KDEsIDEsIDApOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAxOiB7CgkJCQkvLyBkcmF3IGNsb3NlZCBhcnJvd2hlYWQsIGJ1dCBubyBmaWxsCgkJCQkkbW9kZSA9ICdEJzsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMjogewoJCQkJLy8gY2xvc2VkIGFuZCBmaWxsZWQgYXJyb3doZWFkCgkJCQkkbW9kZSA9ICdERic7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDM6IHsKCQkJCS8vIGZpbGxlZCBhcnJvd2hlYWQKCQkJCSRtb2RlID0gJ0YnOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJHRoaXMtPlBvbHlnb24oYXJyYXkoJHgyTCwgJHkyTCwgJHgxLCAkeTEsICR4MlIsICR5MlIpLCAkbW9kZSwgJHN0eWxlLCBhcnJheSgpKTsKCX0KCgkvLyBFTkQgR1JBUEhJQyBGVU5DVElPTlMgU0VDVElPTiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogQWRkIGEgTmFtZWQgRGVzdGluYXRpb24uCgkgKiBOT1RFOiBkZXN0aW5hdGlvbiBuYW1lcyBhcmUgdW5pcXVlLCBzbyBvbmx5IGxhc3QgZW50cnkgd2lsbCBiZSBzYXZlZC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBEZXN0aW5hdGlvbiBuYW1lLgoJICogQHBhcmFtICR5IChmbG9hdCkgWSBwb3NpdGlvbiBpbiB1c2VyIHVuaXRzIG9mIHRoZSBkZXN0aWFudGlvbiBvbiB0aGUgc2VsZWN0ZWQgcGFnZSAoZGVmYXVsdCA9IC0xID0gY3VycmVudCBwb3NpdGlvbjsgMCA9IHBhZ2Ugc3RhcnQ7KS4KCSAqIEBwYXJhbSAkcGFnZSAoaW50KSBUYXJnZXQgcGFnZSBudW1iZXIgKGxlYXZlIGVtcHR5IGZvciBjdXJyZW50IHBhZ2UpLgoJICogQHBhcmFtICR4IChmbG9hdCkgWCBwb3NpdGlvbiBpbiB1c2VyIHVuaXRzIG9mIHRoZSBkZXN0aWFudGlvbiBvbiB0aGUgc2VsZWN0ZWQgcGFnZSAoZGVmYXVsdCA9IC0xID0gY3VycmVudCBwb3NpdGlvbjspLgoJICogQHJldHVybiAoc3RyaW5nKSBTdHJpcHBlZCBuYW1lZCBkZXN0aW5hdGlvbiBpZGVudGlmaWVyIG9yIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIENocmlzdGlhbiBEZWxpZ2FudCwgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS45LjA5NyAoMjAxMS0wNi0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldERlc3RpbmF0aW9uKCRuYW1lLCAkeT0tMSwgJHBhZ2U9JycsICR4PS0xKSB7CgkJLy8gcmVtb3ZlIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnMKCQkkbmFtZSA9IFRDUERGX1NUQVRJQzo6ZW5jb2RlTmFtZU9iamVjdCgkbmFtZSk7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRuYW1lKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWlmICgkeSA9PSAtMSkgewoJCQkkeSA9ICR0aGlzLT5HZXRZKCk7CgkJfSBlbHNlaWYgKCR5IDwgMCkgewoJCQkkeSA9IDA7CgkJfSBlbHNlaWYgKCR5ID4gJHRoaXMtPmgpIHsKCQkJJHkgPSAkdGhpcy0+aDsKCQl9CgkJaWYgKCR4ID09IC0xKSB7CgkJCSR4ID0gJHRoaXMtPkdldFgoKTsKCQl9IGVsc2VpZiAoJHggPCAwKSB7CgkJCSR4ID0gMDsKCQl9IGVsc2VpZiAoJHggPiAkdGhpcy0+dykgewoJCQkkeCA9ICR0aGlzLT53OwoJCX0KCQlpZiAoZW1wdHkoJHBhZ2UpKSB7CgkJCSRwYWdlID0gJHRoaXMtPlBhZ2VObygpOwoJCQlpZiAoZW1wdHkoJHBhZ2UpKSB7CgkJCQlyZXR1cm47CgkJCX0KCQl9CgkJJHRoaXMtPmRlc3RzWyRuYW1lXSA9IGFycmF5KCd4JyA9PiAkeCwgJ3knID0+ICR5LCAncCcgPT4gJHBhZ2UpOwoJCXJldHVybiAkbmFtZTsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgTmFtZWQgRGVzdGluYXRpb24gYXJyYXkuCgkgKiBAcmV0dXJuIChhcnJheSkgTmFtZWQgRGVzdGluYXRpb24gYXJyYXkuCgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4wOTcgKDIwMTEtMDYtMjMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXREZXN0aW5hdGlvbigpIHsKCQlyZXR1cm4gJHRoaXMtPmRlc3RzOwoJfQoKCS8qKgoJICogSW5zZXJ0IE5hbWVkIERlc3RpbmF0aW9ucy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBhdXRob3IgSm9oYW5uZXMgR1xGQ250ZXJ0LCBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjkuMDk4ICgyMDExLTA2LTIzKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dGRlc3RzKCkgewoJCWlmIChlbXB0eSgkdGhpcy0+ZGVzdHMpKSB7CgkJCXJldHVybjsKCQl9CgkJJHRoaXMtPm5fZGVzdHMgPSAkdGhpcy0+X25ld29iaigpOwoJCSRvdXQgPSAnIDw8JzsKCQlmb3JlYWNoKCR0aGlzLT5kZXN0cyBhcyAkbmFtZSA9PiAkbykgewoJCQkkb3V0IC49ICcgLycuJG5hbWUuJyAnLnNwcmludGYoJ1sldSAwIFIgL1hZWiAlRiAlRiBudWxsXScsICR0aGlzLT5wYWdlX29ial9pZFsoJG9bJ3AnXSldLCAoJG9bJ3gnXSAqICR0aGlzLT5rKSwgKCR0aGlzLT5wYWdlZGltWyRvWydwJ11dWydoJ10gLSAoJG9bJ3knXSAqICR0aGlzLT5rKSkpOwoJCX0KCQkkb3V0IC49ICcgPj4nOwoJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkkdGhpcy0+X291dCgkb3V0KTsKCX0KCgkvKioKCSAqIEFkZHMgYSBib29rbWFyayAtIGFsaWFzIGZvciBCb29rbWFyaygpLgoJICogQHBhcmFtICR0eHQgKHN0cmluZykgQm9va21hcmsgZGVzY3JpcHRpb24uCgkgKiBAcGFyYW0gJGxldmVsIChpbnQpIEJvb2ttYXJrIGxldmVsIChtaW5pbXVtIHZhbHVlIGlzIDApLgoJICogQHBhcmFtICR5IChmbG9hdCkgWSBwb3NpdGlvbiBpbiB1c2VyIHVuaXRzIG9mIHRoZSBib29rbWFyayBvbiB0aGUgc2VsZWN0ZWQgcGFnZSAoZGVmYXVsdCA9IC0xID0gY3VycmVudCBwb3NpdGlvbjsgMCA9IHBhZ2Ugc3RhcnQ7KS4KCSAqIEBwYXJhbSAkcGFnZSAoaW50KSBUYXJnZXQgcGFnZSBudW1iZXIgKGxlYXZlIGVtcHR5IGZvciBjdXJyZW50IHBhZ2UpLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBGb250IHN0eWxlOiBCID0gQm9sZCwgSSA9IEl0YWxpYywgQkkgPSBCb2xkICsgSXRhbGljLgoJICogQHBhcmFtICRjb2xvciAoYXJyYXkpIFJHQiBjb2xvciBhcnJheSAodmFsdWVzIGZyb20gMCB0byAyNTUpLgoJICogQHBhcmFtICR4IChmbG9hdCkgWCBwb3NpdGlvbiBpbiB1c2VyIHVuaXRzIG9mIHRoZSBib29rbWFyayBvbiB0aGUgc2VsZWN0ZWQgcGFnZSAoZGVmYXVsdCA9IC0xID0gY3VycmVudCBwb3NpdGlvbjspLgoJICogQHBhcmFtICRsaW5rIChtaXhlZCkgVVJMLCBvciBudW1lcmljYWwgbGluayBJRCwgb3IgbmFtZWQgZGVzdGluYXRpb24gKCMgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRoZSBkZXN0aW5hdGlvbiBuYW1lKSwgb3IgZW1iZWRkZWQgZmlsZSAoKiBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGZpbGUgbmFtZSkuCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRCb29rbWFyaygkdHh0LCAkbGV2ZWw9MCwgJHk9LTEsICRwYWdlPScnLCAkc3R5bGU9JycsICRjb2xvcj1hcnJheSgwLDAsMCksICR4PS0xLCAkbGluaz0nJykgewoJCSR0aGlzLT5Cb29rbWFyaygkdHh0LCAkbGV2ZWwsICR5LCAkcGFnZSwgJHN0eWxlLCAkY29sb3IsICR4LCAkbGluayk7Cgl9CgoJLyoqCgkgKiBBZGRzIGEgYm9va21hcmsuCgkgKiBAcGFyYW0gJHR4dCAoc3RyaW5nKSBCb29rbWFyayBkZXNjcmlwdGlvbi4KCSAqIEBwYXJhbSAkbGV2ZWwgKGludCkgQm9va21hcmsgbGV2ZWwgKG1pbmltdW0gdmFsdWUgaXMgMCkuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBZIHBvc2l0aW9uIGluIHVzZXIgdW5pdHMgb2YgdGhlIGJvb2ttYXJrIG9uIHRoZSBzZWxlY3RlZCBwYWdlIChkZWZhdWx0ID0gLTEgPSBjdXJyZW50IHBvc2l0aW9uOyAwID0gcGFnZSBzdGFydDspLgoJICogQHBhcmFtICRwYWdlIChpbnQpIFRhcmdldCBwYWdlIG51bWJlciAobGVhdmUgZW1wdHkgZm9yIGN1cnJlbnQgcGFnZSkuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIEZvbnQgc3R5bGU6IEIgPSBCb2xkLCBJID0gSXRhbGljLCBCSSA9IEJvbGQgKyBJdGFsaWMuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgUkdCIGNvbG9yIGFycmF5ICh2YWx1ZXMgZnJvbSAwIHRvIDI1NSkuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBYIHBvc2l0aW9uIGluIHVzZXIgdW5pdHMgb2YgdGhlIGJvb2ttYXJrIG9uIHRoZSBzZWxlY3RlZCBwYWdlIChkZWZhdWx0ID0gLTEgPSBjdXJyZW50IHBvc2l0aW9uOykuCgkgKiBAcGFyYW0gJGxpbmsgKG1peGVkKSBVUkwsIG9yIG51bWVyaWNhbCBsaW5rIElELCBvciBuYW1lZCBkZXN0aW5hdGlvbiAoIyBjaGFyYWN0ZXIgZm9sbG93ZWQgYnkgdGhlIGRlc3RpbmF0aW9uIG5hbWUpLCBvciBlbWJlZGRlZCBmaWxlICgqIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgZmlsZSBuYW1lKS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAyLjEuMDAyICgyMDA4LTAyLTEyKQoJICovCglwdWJsaWMgZnVuY3Rpb24gQm9va21hcmsoJHR4dCwgJGxldmVsPTAsICR5PS0xLCAkcGFnZT0nJywgJHN0eWxlPScnLCAkY29sb3I9YXJyYXkoMCwwLDApLCAkeD0tMSwgJGxpbms9JycpIHsKCQlpZiAoJGxldmVsIDwgMCkgewoJCQkkbGV2ZWwgPSAwOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPm91dGxpbmVzWzBdKSkgewoJCQkkbGFzdG91dGxpbmUgPSBlbmQoJHRoaXMtPm91dGxpbmVzKTsKCQkJJG1heGxldmVsID0gJGxhc3RvdXRsaW5lWydsJ10gKyAxOwoJCX0gZWxzZSB7CgkJCSRtYXhsZXZlbCA9IDA7CgkJfQoJCWlmICgkbGV2ZWwgPiAkbWF4bGV2ZWwpIHsKCQkJJGxldmVsID0gJG1heGxldmVsOwoJCX0KCQlpZiAoJHkgPT0gLTEpIHsKCQkJJHkgPSAkdGhpcy0+R2V0WSgpOwoJCX0gZWxzZWlmICgkeSA8IDApIHsKCQkJJHkgPSAwOwoJCX0gZWxzZWlmICgkeSA+ICR0aGlzLT5oKSB7CgkJCSR5ID0gJHRoaXMtPmg7CgkJfQoJCWlmICgkeCA9PSAtMSkgewoJCQkkeCA9ICR0aGlzLT5HZXRYKCk7CgkJfSBlbHNlaWYgKCR4IDwgMCkgewoJCQkkeCA9IDA7CgkJfSBlbHNlaWYgKCR4ID4gJHRoaXMtPncpIHsKCQkJJHggPSAkdGhpcy0+dzsKCQl9CgkJaWYgKGVtcHR5KCRwYWdlKSkgewoJCQkkcGFnZSA9ICR0aGlzLT5QYWdlTm8oKTsKCQkJaWYgKGVtcHR5KCRwYWdlKSkgewoJCQkJcmV0dXJuOwoJCQl9CgkJfQoJCSR0aGlzLT5vdXRsaW5lc1tdID0gYXJyYXkoJ3QnID0+ICR0eHQsICdsJyA9PiAkbGV2ZWwsICd4JyA9PiAkeCwgJ3knID0+ICR5LCAncCcgPT4gJHBhZ2UsICdzJyA9PiBzdHJ0b3VwcGVyKCRzdHlsZSksICdjJyA9PiAkY29sb3IsICd1JyA9PiAkbGluayk7Cgl9CgoJLyoqCgkgKiBTb3J0IGJvb2ttYXJrcyBmb3IgcGFnZSBhbmQga2V5LgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4xMTkgKDIwMTEtMDktMTkpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzb3J0Qm9va21hcmtzKCkgewoJCS8vIGdldCBzb3J0aW5nIGNvbHVtbnMKCQkkb3V0bGluZV9wID0gYXJyYXkoKTsKCQkkb3V0bGluZV95ID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkdGhpcy0+b3V0bGluZXMgYXMgJGtleSA9PiAkcm93KSB7CgkJCSRvdXRsaW5lX3BbJGtleV0gPSAkcm93WydwJ107CgkJCSRvdXRsaW5lX2tbJGtleV0gPSAka2V5OwoJCX0KCQkvLyBzb3J0IG91dGxpbmVzIGJ5IHBhZ2UgYW5kIG9yaWdpbmFsIHBvc2l0aW9uCgkJYXJyYXlfbXVsdGlzb3J0KCRvdXRsaW5lX3AsIFNPUlRfTlVNRVJJQywgU09SVF9BU0MsICRvdXRsaW5lX2ssIFNPUlRfTlVNRVJJQywgU09SVF9BU0MsICR0aGlzLT5vdXRsaW5lcyk7Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSBib29rbWFyayBQREYgc3RyaW5nLgoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBPbGl2aWVyIFBsYXRoZXksIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDIuMS4wMDIgKDIwMDgtMDItMTIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0Ym9va21hcmtzKCkgewoJCSRuYiA9IGNvdW50KCR0aGlzLT5vdXRsaW5lcyk7CgkJaWYgKCRuYiA9PSAwKSB7CgkJCXJldHVybjsKCQl9CgkJLy8gc29ydCBib29rbWFya3MKCQkkdGhpcy0+c29ydEJvb2ttYXJrcygpOwoJCSRscnUgPSBhcnJheSgpOwoJCSRsZXZlbCA9IDA7CgkJZm9yZWFjaCAoJHRoaXMtPm91dGxpbmVzIGFzICRpID0+ICRvKSB7CgkJCWlmICgkb1snbCddID4gMCkgewoJCQkJJHBhcmVudCA9ICRscnVbKCRvWydsJ10gLSAxKV07CgkJCQkvL1NldCBwYXJlbnQgYW5kIGxhc3QgcG9pbnRlcnMKCQkJCSR0aGlzLT5vdXRsaW5lc1skaV1bJ3BhcmVudCddID0gJHBhcmVudDsKCQkJCSR0aGlzLT5vdXRsaW5lc1skcGFyZW50XVsnbGFzdCddID0gJGk7CgkJCQlpZiAoJG9bJ2wnXSA+ICRsZXZlbCkgewoJCQkJCS8vTGV2ZWwgaW5jcmVhc2luZzogc2V0IGZpcnN0IHBvaW50ZXIKCQkJCQkkdGhpcy0+b3V0bGluZXNbJHBhcmVudF1bJ2ZpcnN0J10gPSAkaTsKCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5vdXRsaW5lc1skaV1bJ3BhcmVudCddID0gJG5iOwoJCQl9CgkJCWlmICgoJG9bJ2wnXSA8PSAkbGV2ZWwpIEFORCAoJGkgPiAwKSkgewoJCQkJLy9TZXQgcHJldiBhbmQgbmV4dCBwb2ludGVycwoJCQkJJHByZXYgPSAkbHJ1WyRvWydsJ11dOwoJCQkJJHRoaXMtPm91dGxpbmVzWyRwcmV2XVsnbmV4dCddID0gJGk7CgkJCQkkdGhpcy0+b3V0bGluZXNbJGldWydwcmV2J10gPSAkcHJldjsKCQkJfQoJCQkkbHJ1WyRvWydsJ11dID0gJGk7CgkJCSRsZXZlbCA9ICRvWydsJ107CgkJfQoJCS8vT3V0bGluZSBpdGVtcwoJCSRuID0gJHRoaXMtPm4gKyAxOwoJCSRubHRhZ3MgPSAnLzxicltcc10/XC8+fDxcLyhibG9ja3F1b3RlfGRkfGRsfGRpdnxkdHxoMXxoMnxoM3xoNHxoNXxoNnxocnxsaXxvbHxwfHByZXx1bHx0Y3BkZnx0YWJsZXx0cnx0ZCk+L3NpJzsKCQlmb3JlYWNoICgkdGhpcy0+b3V0bGluZXMgYXMgJGkgPT4gJG8pIHsKCQkJJG9pZCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCS8vIGNvdmVydCBIVE1MIHRpdGxlIHRvIHN0cmluZwoJCQkkdGl0bGUgPSBwcmVnX3JlcGxhY2UoJG5sdGFncywgIlxuIiwgJG9bJ3QnXSk7CgkJCSR0aXRsZSA9IHByZWdfcmVwbGFjZSgiL1tccl0rL3NpIiwgJycsICR0aXRsZSk7CgkJCSR0aXRsZSA9IHByZWdfcmVwbGFjZSgiL1tcbl0rL3NpIiwgIlxuIiwgJHRpdGxlKTsKCQkJJHRpdGxlID0gc3RyaXBfdGFncygkdGl0bGUpOwoJCQkkdGl0bGUgPSAkdGhpcy0+c3RyaW5nVHJpbSgkdGl0bGUpOwoJCQkkb3V0ID0gJzw8L1RpdGxlICcuJHRoaXMtPl90ZXh0c3RyaW5nKCR0aXRsZSwgJG9pZCk7CgkJCSRvdXQgLj0gJyAvUGFyZW50ICcuKCRuICsgJG9bJ3BhcmVudCddKS4nIDAgUic7CgkJCWlmIChpc3NldCgkb1sncHJldiddKSkgewoJCQkJJG91dCAuPSAnIC9QcmV2ICcuKCRuICsgJG9bJ3ByZXYnXSkuJyAwIFInOwoJCQl9CgkJCWlmIChpc3NldCgkb1snbmV4dCddKSkgewoJCQkJJG91dCAuPSAnIC9OZXh0ICcuKCRuICsgJG9bJ25leHQnXSkuJyAwIFInOwoJCQl9CgkJCWlmIChpc3NldCgkb1snZmlyc3QnXSkpIHsKCQkJCSRvdXQgLj0gJyAvRmlyc3QgJy4oJG4gKyAkb1snZmlyc3QnXSkuJyAwIFInOwoJCQl9CgkJCWlmIChpc3NldCgkb1snbGFzdCddKSkgewoJCQkJJG91dCAuPSAnIC9MYXN0ICcuKCRuICsgJG9bJ2xhc3QnXSkuJyAwIFInOwoJCQl9CgkJCWlmIChpc3NldCgkb1sndSddKSBBTkQgIWVtcHR5KCRvWyd1J10pKSB7CgkJCQkvLyBsaW5rCgkJCQlpZiAoaXNfc3RyaW5nKCRvWyd1J10pKSB7CgkJCQkJaWYgKCRvWyd1J11bMF0gPT0gJyMnKSB7CgkJCQkJCS8vIGludGVybmFsIGRlc3RpbmF0aW9uCgkJCQkJCSRvdXQgLj0gJyAvRGVzdCAvJy5UQ1BERl9TVEFUSUM6OmVuY29kZU5hbWVPYmplY3Qoc3Vic3RyKCRvWyd1J10sIDEpKTsKCQkJCQl9IGVsc2VpZiAoJG9bJ3UnXVswXSA9PSAnJScpIHsKCQkJCQkJLy8gZW1iZWRkZWQgUERGIGZpbGUKCQkJCQkJJGZpbGVuYW1lID0gYmFzZW5hbWUoc3Vic3RyKCRvWyd1J10sIDEpKTsKCQkJCQkJJG91dCAuPSAnIC9BIDw8L1MgL0dvVG9FIC9EIFswIC9GaXRdIC9OZXdXaW5kb3cgdHJ1ZSAvVCA8PCAvUiAvQyAvUCAnLigkb1sncCddIC0gMSkuJyAvQSAnLiR0aGlzLT5lbWJlZGRlZGZpbGVzWyRmaWxlbmFtZV1bJ2EnXS4nID4+ID4+JzsKCQkJCQl9IGVsc2VpZiAoJG9bJ3UnXVswXSA9PSAnKicpIHsKCQkJCQkJLy8gZW1iZWRkZWQgZ2VuZXJpYyBmaWxlCgkJCQkJCSRmaWxlbmFtZSA9IGJhc2VuYW1lKHN1YnN0cigkb1sndSddLCAxKSk7CgkJCQkJCSRqc2EgPSAndmFyIEQ9ZXZlbnQudGFyZ2V0LmRvYzt2YXIgTXlEYXRhPUQuZGF0YU9iamVjdHM7Zm9yICh2YXIgaSBpbiBNeURhdGEpIGlmIChNeURhdGFbaV0ucGF0aD09IicuJGZpbGVuYW1lLiciKSBELmV4cG9ydERhdGFPYmplY3QoIHsgY05hbWUgOiBNeURhdGFbaV0ubmFtZSwgbkxhdW5jaCA6IDJ9KTsnOwoJCQkJCQkkb3V0IC49ICcgL0EgPDwvUyAvSmF2YVNjcmlwdCAvSlMgJy4kdGhpcy0+X3RleHRzdHJpbmcoJGpzYSwgJG9pZCkuJz4+JzsKCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBleHRlcm5hbCBVUkkgbGluawoJCQkJCQkkb3V0IC49ICcgL0EgPDwvUyAvVVJJIC9VUkkgJy4kdGhpcy0+X2RhdGFzdHJpbmcoJHRoaXMtPnVuaHRtbGVudGl0aWVzKCRvWyd1J10pLCAkb2lkKS4nPj4nOwoJCQkJCX0KCQkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+bGlua3NbJG9bJ3UnXV0pKSB7CgkJCQkJLy8gaW50ZXJuYWwgbGluayBJRAoJCQkJCSRsID0gJHRoaXMtPmxpbmtzWyRvWyd1J11dOwoJCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZV9vYmpfaWRbKCRsWzBdKV0pKSB7CgkJCQkJCSRvdXQgLj0gc3ByaW50ZignIC9EZXN0IFsldSAwIFIgL1hZWiAwICVGIG51bGxdJywgJHRoaXMtPnBhZ2Vfb2JqX2lkWygkbFswXSldLCAoJHRoaXMtPnBhZ2VkaW1bJGxbMF1dWydoJ10gLSAoJGxbMV0gKiAkdGhpcy0+aykpKTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+cGFnZV9vYmpfaWRbKCRvWydwJ10pXSkpIHsKCQkJCS8vIGxpbmsgdG8gYSBwYWdlCgkJCQkkb3V0IC49ICcgJy5zcHJpbnRmKCcvRGVzdCBbJXUgMCBSIC9YWVogJUYgJUYgbnVsbF0nLCAkdGhpcy0+cGFnZV9vYmpfaWRbKCRvWydwJ10pXSwgKCRvWyd4J10gKiAkdGhpcy0+ayksICgkdGhpcy0+cGFnZWRpbVskb1sncCddXVsnaCddIC0gKCRvWyd5J10gKiAkdGhpcy0+aykpKTsKCQkJfQoJCQkvLyBzZXQgZm9udCBzdHlsZQoJCQkkc3R5bGUgPSAwOwoJCQlpZiAoIWVtcHR5KCRvWydzJ10pKSB7CgkJCQkvLyBib2xkCgkJCQlpZiAoc3RycG9zKCRvWydzJ10sICdCJykgIT09IGZhbHNlKSB7CgkJCQkJJHN0eWxlIHw9IDI7CgkJCQl9CgkJCQkvLyBvYmxpcXVlCgkJCQlpZiAoc3RycG9zKCRvWydzJ10sICdJJykgIT09IGZhbHNlKSB7CgkJCQkJJHN0eWxlIHw9IDE7CgkJCQl9CgkJCX0KCQkJJG91dCAuPSBzcHJpbnRmKCcgL0YgJWQnLCAkc3R5bGUpOwoJCQkvLyBzZXQgYm9va21hcmsgY29sb3IKCQkJaWYgKGlzc2V0KCRvWydjJ10pIEFORCBpc19hcnJheSgkb1snYyddKSBBTkQgKGNvdW50KCRvWydjJ10pID09IDMpKSB7CgkJCQkkY29sb3IgPSBhcnJheV92YWx1ZXMoJG9bJ2MnXSk7CgkJCQkkb3V0IC49IHNwcmludGYoJyAvQyBbJUYgJUYgJUZdJywgKCRjb2xvclswXSAvIDI1NSksICgkY29sb3JbMV0gLyAyNTUpLCAoJGNvbG9yWzJdIC8gMjU1KSk7CgkJCX0gZWxzZSB7CgkJCQkvLyBibGFjawoJCQkJJG91dCAuPSAnIC9DIFswLjAgMC4wIDAuMF0nOwoJCQl9CgkJCSRvdXQgLj0gJyAvQ291bnQgMCc7IC8vIG5vcm1hbGx5IGNsb3NlZCBpdGVtCgkJCSRvdXQgLj0gJyA+Pic7CgkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJfQoJCS8vT3V0bGluZSByb290CgkJJHRoaXMtPk91dGxpbmVSb290ID0gJHRoaXMtPl9uZXdvYmooKTsKCQkkdGhpcy0+X291dCgnPDwgL1R5cGUgL091dGxpbmVzIC9GaXJzdCAnLiRuLicgMCBSIC9MYXN0ICcuKCRuICsgJGxydVswXSkuJyAwIFIgPj4nLiJcbiIuJ2VuZG9iaicpOwoJfQoKCS8vIC0tLSBKQVZBU0NSSVBUIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogQWRkcyBhIGphdmFzY3JpcHQKCSAqIEBwYXJhbSAkc2NyaXB0IChzdHJpbmcpIEphdmFzY3JpcHQgY29kZQoJICogQHB1YmxpYwoJICogQGF1dGhvciBKb2hhbm5lcyBHXEZDbnRlcnQsIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDIuMS4wMDIgKDIwMDgtMDItMTIpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBJbmNsdWRlSlMoJHNjcmlwdCkgewoJCSR0aGlzLT5qYXZhc2NyaXB0IC49ICRzY3JpcHQ7Cgl9CgoJLyoqCgkgKiBBZGRzIGEgamF2YXNjcmlwdCBvYmplY3QgYW5kIHJldHVybiBvYmplY3QgSUQKCSAqIEBwYXJhbSAkc2NyaXB0IChzdHJpbmcpIEphdmFzY3JpcHQgY29kZQoJICogQHBhcmFtICRvbmxvYWQgKGJvb2xlYW4pIGlmIHRydWUgZXhlY3V0ZXMgdGhpcyBvYmplY3Qgd2hlbiBvcGVuaW5nIHRoZSBkb2N1bWVudAoJICogQHJldHVybiBpbnQgaW50ZXJuYWwgb2JqZWN0IElECgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuOC4wMDAgKDIwMDktMDktMDcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBhZGRKYXZhc2NyaXB0T2JqZWN0KCRzY3JpcHQsICRvbmxvYWQ9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkvLyBqYXZhc2NyaXB0IGlzIG5vdCBhbGxvd2VkIGluIFBERi9BIG1vZGUKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkrKyR0aGlzLT5uOwoJCSR0aGlzLT5qc19vYmplY3RzWyR0aGlzLT5uXSA9IGFycmF5KCduJyA9PiAkdGhpcy0+biwgJ2pzJyA9PiAkc2NyaXB0LCAnb25sb2FkJyA9PiAkb25sb2FkKTsKCQlyZXR1cm4gJHRoaXMtPm47Cgl9CgoJLyoqCgkgKiBDcmVhdGUgYSBqYXZhc2NyaXB0IFBERiBzdHJpbmcuCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIEpvaGFubmVzIEdcRkNudGVydCwgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgMi4xLjAwMiAoMjAwOC0wMi0xMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9wdXRqYXZhc2NyaXB0KCkgewoJCWlmICgkdGhpcy0+cGRmYV9tb2RlIE9SIChlbXB0eSgkdGhpcy0+amF2YXNjcmlwdCkgQU5EIGVtcHR5KCR0aGlzLT5qc19vYmplY3RzKSkpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoc3RycG9zKCR0aGlzLT5qYXZhc2NyaXB0LCAndGhpcy5hZGRGaWVsZCcpID4gMCkgewoJCQlpZiAoISR0aGlzLT51clsnZW5hYmxlZCddKSB7CgkJCQkvLyR0aGlzLT5zZXRVc2VyUmlnaHRzKCk7CgkJCX0KCQkJLy8gdGhlIGZvbGxvd2luZyB0d28gbGluZXMgYXJlIHVzZWQgdG8gYXZvaWQgZm9ybSBmaWVsZHMgZHVwbGljYXRpb24gYWZ0ZXIgc2F2aW5nCgkJCS8vIFRoZSBhZGRGaWVsZCBtZXRob2Qgb25seSB3b3JrcyB3aGVuIHJlbGVhc2luZyB1c2VyIHJpZ2h0cyAoVVIzKQoJCQkkanNhID0gc3ByaW50ZigiZnRjcGRmZG9jc2F2ZWQ9dGhpcy5hZGRGaWVsZCgnJXMnLCclcycsJWQsWyVGLCVGLCVGLCVGXSk7IiwgJ3RjcGRmZG9jc2F2ZWQnLCAndGV4dCcsIDAsIDAsIDEsIDAsIDEpOwoJCQkkanNiID0gImdldEZpZWxkKCd0Y3BkZmRvY3NhdmVkJykudmFsdWU9J3NhdmVkJzsiOwoJCQkkdGhpcy0+amF2YXNjcmlwdCA9ICRqc2EuIlxuIi4kdGhpcy0+amF2YXNjcmlwdC4iXG4iLiRqc2I7CgkJfQoJCS8vIG5hbWUgdHJlZSBmb3IgamF2YXNjcmlwdAoJCSR0aGlzLT5uX2pzID0gJzw8IC9OYW1lcyBbJzsKCQlpZiAoIWVtcHR5KCR0aGlzLT5qYXZhc2NyaXB0KSkgewoJCQkkdGhpcy0+bl9qcyAuPSAnIChFbWJlZGRlZEpTKSAnLigkdGhpcy0+biArIDEpLicgMCBSJzsKCQl9CgkJaWYgKCFlbXB0eSgkdGhpcy0+anNfb2JqZWN0cykpIHsKCQkJZm9yZWFjaCAoJHRoaXMtPmpzX29iamVjdHMgYXMgJGtleSA9PiAkdmFsKSB7CgkJCQlpZiAoJHZhbFsnb25sb2FkJ10pIHsKCQkJCQkkdGhpcy0+bl9qcyAuPSAnIChKUycuJGtleS4nKSAnLiRrZXkuJyAwIFInOwoJCQkJfQoJCQl9CgkJfQoJCSR0aGlzLT5uX2pzIC49ICcgXSA+Pic7CgkJLy8gZGVmYXVsdCBKYXZhc2NyaXB0IG9iamVjdAoJCWlmICghZW1wdHkoJHRoaXMtPmphdmFzY3JpcHQpKSB7CgkJCSRvYmpfaWQgPSAkdGhpcy0+X25ld29iaigpOwoJCQkkb3V0ID0gJzw8IC9TIC9KYXZhU2NyaXB0JzsKCQkJJG91dCAuPSAnIC9KUyAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+amF2YXNjcmlwdCwgJG9ial9pZCk7CgkJCSRvdXQgLj0gJyA+Pic7CgkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJfQoJCS8vIGFkZGl0aW9uYWwgSmF2YXNjcmlwdCBvYmplY3RzCgkJaWYgKCFlbXB0eSgkdGhpcy0+anNfb2JqZWN0cykpIHsKCQkJZm9yZWFjaCAoJHRoaXMtPmpzX29iamVjdHMgYXMgJGtleSA9PiAkdmFsKSB7CgkJCQkkb3V0ID0gJHRoaXMtPl9nZXRvYmooJGtleSkuIlxuIi4nIDw8IC9TIC9KYXZhU2NyaXB0IC9KUyAnLiR0aGlzLT5fdGV4dHN0cmluZygkdmFsWydqcyddLCAka2V5KS4nID4+Jy4iXG4iLidlbmRvYmonOwoJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBBZGRzIGEgamF2YXNjcmlwdCBmb3JtIGZpZWxkLgoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIGZpZWxkIHR5cGUKCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBmaWVsZCBuYW1lCgkgKiBAcGFyYW0gJHggKGludCkgaG9yaXpvbnRhbCBwb3NpdGlvbgoJICogQHBhcmFtICR5IChpbnQpIHZlcnRpY2FsIHBvc2l0aW9uCgkgKiBAcGFyYW0gJHcgKGludCkgd2lkdGgKCSAqIEBwYXJhbSAkaCAoaW50KSBoZWlnaHQKCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHByb3RlY3RlZAoJICogQGF1dGhvciBEZW5pcyBWYW4gTnVmZmVsZW4sIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDIuMS4wMDIgKDIwMDgtMDItMTIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfYWRkZmllbGQoJHR5cGUsICRuYW1lLCAkeCwgJHksICR3LCAkaCwgJHByb3ApIHsKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkeCA9ICR4IC0gJHc7CgkJfQoJCS8vIHRoZSBmb2xsb3dpbmQgYXZvaWQgZmllbGRzIGR1cGxpY2F0aW9uIGFmdGVyIHNhdmluZyB0aGUgZG9jdW1lbnQKCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAiaWYgKGdldEZpZWxkKCd0Y3BkZmRvY3NhdmVkJykudmFsdWUgIT0gJ3NhdmVkJykgeyI7CgkJJGsgPSAkdGhpcy0+azsKCQkkdGhpcy0+amF2YXNjcmlwdCAuPSBzcHJpbnRmKCJmIi4kbmFtZS4iPXRoaXMuYWRkRmllbGQoJyVzJywnJXMnLCV1LFslRiwlRiwlRiwlRl0pOyIsICRuYW1lLCAkdHlwZSwgJHRoaXMtPlBhZ2VObygpLTEsICR4KiRrLCAoJHRoaXMtPmgtJHkpKiRrKzEsICgkeCskdykqJGssICgkdGhpcy0+aC0keS0kaCkqJGsrMSkuIlxuIjsKCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAnZicuJG5hbWUuJy50ZXh0U2l6ZT0nLiR0aGlzLT5Gb250U2l6ZVB0LiI7XG4iOwoJCXdoaWxlIChsaXN0KCRrZXksICR2YWwpID0gZWFjaCgkcHJvcCkpIHsKCQkJaWYgKHN0cmNtcChzdWJzdHIoJGtleSwgLTUpLCAnQ29sb3InKSA9PSAwKSB7CgkJCQkkdmFsID0gVENQREZfQ09MT1JTOjpfSlNjb2xvcigkdmFsKTsKCQkJfSBlbHNlIHsKCQkJCSR2YWwgPSAiJyIuJHZhbC4iJyI7CgkJCX0KCQkJJHRoaXMtPmphdmFzY3JpcHQgLj0gJ2YnLiRuYW1lLicuJy4ka2V5Lic9Jy4kdmFsLiI7XG4iOwoJCX0KCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkdGhpcy0+eCAtPSAkdzsKCQl9IGVsc2UgewoJCQkkdGhpcy0+eCArPSAkdzsKCQl9CgkJJHRoaXMtPmphdmFzY3JpcHQgLj0gJ30nOwoJfQoKCS8vIC0tLSBGT1JNIEZJRUxEUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCgoJLyoqCgkgKiBTZXQgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciBmb3JtIGZpZWxkcy4KCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Rm9ybURlZmF1bHRQcm9wKCRwcm9wPWFycmF5KCkpIHsKCQkkdGhpcy0+ZGVmYXVsdF9mb3JtX3Byb3AgPSAkcHJvcDsKCX0KCgkvKioKCSAqIFJldHVybiB0aGUgZGVmYXVsdCBwcm9wZXJ0aWVzIGZvciBmb3JtIGZpZWxkcy4KCSAqIEByZXR1cm4gYXJyYXkgJHByb3AgamF2YXNjcmlwdCBmaWVsZCBwcm9wZXJ0aWVzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBvbiBvZmZpY2lhbCBKYXZhc2NyaXB0IGZvciBBY3JvYmF0IEFQSSByZWZlcmVuY2UuCgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuOC4wMDAgKDIwMDktMDktMDYpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb3JtRGVmYXVsdFByb3AoKSB7CgkJcmV0dXJuICR0aGlzLT5kZWZhdWx0X2Zvcm1fcHJvcDsKCX0KCgkvKioKCSAqIENyZWF0ZXMgYSB0ZXh0IGZpZWxkCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgZmllbGQgbmFtZQoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIHJlY3RhbmdsZQoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHBhcmFtICRvcHQgKGFycmF5KSBhbm5vdGF0aW9uIHBhcmFtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIFBERjMyMDAwXzIwMDggcmVmZXJlbmNlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJGpzIChib29sZWFuKSBpZiB0cnVlIHB1dCB0aGUgZmllbGQgdXNpbmcgSmF2YVNjcmlwdCAocmVxdWlyZXMgQWNyb2JhdCBXcml0ZXIgdG8gYmUgcmVuZGVyZWQpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gVGV4dEZpZWxkKCRuYW1lLCAkdywgJGgsICRwcm9wPWFycmF5KCksICRvcHQ9YXJyYXkoKSwgJHg9JycsICR5PScnLCAkanM9ZmFsc2UpIHsKCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJLy8gY2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeQoJCWxpc3QoJHgsICR5KSA9ICR0aGlzLT5jaGVja1BhZ2VSZWdpb25zKCRoLCAkeCwgJHkpOwoJCWlmICgkanMpIHsKCQkJJHRoaXMtPl9hZGRmaWVsZCgndGV4dCcsICRuYW1lLCAkeCwgJHksICR3LCAkaCwgJHByb3ApOwoJCQlyZXR1cm47CgkJfQoJCS8vIGdldCBkZWZhdWx0IHN0eWxlCgkJJHByb3AgPSBhcnJheV9tZXJnZSgkdGhpcy0+Z2V0Rm9ybURlZmF1bHRQcm9wKCksICRwcm9wKTsKCQkvLyBnZXQgYW5ub3RhdGlvbiBkYXRhCgkJJHBvcHQgPSBUQ1BERl9TVEFUSUM6OmdldEFubm90T3B0RnJvbUpTUHJvcCgkcHJvcCwgJHRoaXMtPnNwb3RfY29sb3JzLCAkdGhpcy0+cnRsKTsKCQkvLyBzZXQgZGVmYXVsdCBhcHBlYXJhbmNlIHN0cmVhbQoJCSR0aGlzLT5hbm5vdGF0aW9uX2ZvbnRzWyR0aGlzLT5DdXJyZW50Rm9udFsnZm9udGtleSddXSA9ICR0aGlzLT5DdXJyZW50Rm9udFsnaSddOwoJCSRmb250c3R5bGUgPSBzcHJpbnRmKCcvRiVkICVGIFRmICVzJywgJHRoaXMtPkN1cnJlbnRGb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkdGhpcy0+VGV4dENvbG9yKTsKCQkkcG9wdFsnZGEnXSA9ICRmb250c3R5bGU7CgkJLy8gYnVpbGQgYXBwZWFyYW5jZSBzdHJlYW0KCQkkcG9wdFsnYXAnXSA9IGFycmF5KCk7CgkJJHBvcHRbJ2FwJ11bJ24nXSA9ICcvVHggQk1DIHEgJy4kZm9udHN0eWxlLicgJzsKCQkkdGV4dCA9ICcnOwoJCWlmIChpc3NldCgkcHJvcFsndmFsdWUnXSkgQU5EICFlbXB0eSgkcHJvcFsndmFsdWUnXSkpIHsKCQkJJHRleHQgPSAkcHJvcFsndmFsdWUnXTsKCQl9IGVsc2VpZiAoaXNzZXQoJG9wdFsndiddKSBBTkQgIWVtcHR5KCRvcHRbJ3YnXSkpIHsKCQkJJHRleHQgPSAkb3B0Wyd2J107CgkJfQoJCSR0bXBpZCA9ICR0aGlzLT5zdGFydFRlbXBsYXRlKCR3LCAkaCwgZmFsc2UpOwoJCSRhbGlnbiA9ICcnOwoJCWlmIChpc3NldCgkcG9wdFsncSddKSkgewoJCQlzd2l0Y2ggKCRwb3B0WydxJ10pIHsKCQkJCWNhc2UgMDogewoJCQkJCSRhbGlnbiA9ICdMJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMTogewoJCQkJCSRhbGlnbiA9ICdDJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMjogewoJCQkJCSRhbGlnbiA9ICdSJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWRlZmF1bHQ6IHsKCQkJCQkkYWxpZ24gPSAnJzsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQkkdGhpcy0+TXVsdGlDZWxsKCR3LCAkaCwgJHRleHQsIDAsICRhbGlnbiwgZmFsc2UsIDAsIDAsIDAsIHRydWUsIDAsIGZhbHNlLCB0cnVlLCAwLCAnVCcsIGZhbHNlKTsKCQkkdGhpcy0+ZW5kVGVtcGxhdGUoKTsKCQktLSR0aGlzLT5uOwoJCSRwb3B0WydhcCddWyduJ10gLj0gJHRoaXMtPnhvYmplY3RzWyR0bXBpZF1bJ291dGRhdGEnXTsKCQl1bnNldCgkdGhpcy0+eG9iamVjdHNbJHRtcGlkXSk7CgkJJHBvcHRbJ2FwJ11bJ24nXSAuPSAnUSBFTUMnOwoJCS8vIG1lcmdlIG9wdGlvbnMKCQkkb3B0ID0gYXJyYXlfbWVyZ2UoJHBvcHQsICRvcHQpOwoJCS8vIHJlbW92ZSBzb21lIGNvbmZsaWN0aW5nIG9wdGlvbnMKCQl1bnNldCgkb3B0WydicyddKTsKCQkvLyBzZXQgcmVtYWluaW5nIGFubm90YXRpb24gZGF0YQoJCSRvcHRbJ1N1YnR5cGUnXSA9ICdXaWRnZXQnOwoJCSRvcHRbJ2Z0J10gPSAnVHgnOwoJCSRvcHRbJ3QnXSA9ICRuYW1lOwoJCS8vIEFkZGl0aW9uYWwgYW5ub3RhdGlvbidzIHBhcmFtZXRlcnMgKGNoZWNrIF9wdXRhbm5vdHNvYmooKSBtZXRob2QpOgoJCS8vJG9wdFsnZiddCgkJLy8kb3B0WydhcyddCgkJLy8kb3B0WydicyddCgkJLy8kb3B0WydiZSddCgkJLy8kb3B0WydjJ10KCQkvLyRvcHRbJ2JvcmRlciddCgkJLy8kb3B0WydoJ10KCQkvLyRvcHRbJ21rJ107CgkJLy8kb3B0WydtayddWydyJ10KCQkvLyRvcHRbJ21rJ11bJ2JjJ107CgkJLy8kb3B0WydtayddWydiZyddOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ2NhJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ3JjJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ2FjJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ2knXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsncmknXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsnaXgnXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsnaWYnXSk7CgkJLy8kb3B0WydtayddWydpZiddWydzdyddOwoJCS8vJG9wdFsnbWsnXVsnaWYnXVsncyddOwoJCS8vJG9wdFsnbWsnXVsnaWYnXVsnYSddOwoJCS8vJG9wdFsnbWsnXVsnaWYnXVsnZmInXTsKCQl1bnNldCgkb3B0WydtayddWyd0cCddKTsKCQkvLyRvcHRbJ3R1J10KCQkvLyRvcHRbJ3RtJ10KCQkvLyRvcHRbJ2ZmJ10KCQkvLyRvcHRbJ3YnXQoJCS8vJG9wdFsnZHYnXQoJCS8vJG9wdFsnYSddCgkJLy8kb3B0WydhYSddCgkJLy8kb3B0WydxJ10KCQkkdGhpcy0+QW5ub3RhdGlvbigkeCwgJHksICR3LCAkaCwgJG5hbWUsICRvcHQsIDApOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT54IC09ICR3OwoJCX0gZWxzZSB7CgkJCSR0aGlzLT54ICs9ICR3OwoJCX0KCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBSYWRpb0J1dHRvbiBmaWVsZC4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBGaWVsZCBuYW1lLgoJICogQHBhcmFtICR3IChpbnQpIFdpZHRoIG9mIHRoZSByYWRpbyBidXR0b24uCgkgKiBAcGFyYW0gJHByb3AgKGFycmF5KSBKYXZhc2NyaXB0IGZpZWxkIHByb3BlcnRpZXMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIEphdmFzY3JpcHQgZm9yIEFjcm9iYXQgQVBJIHJlZmVyZW5jZS4KCSAqIEBwYXJhbSAkb3B0IChhcnJheSkgQW5ub3RhdGlvbiBwYXJhbWV0ZXJzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBvbiBvZmZpY2lhbCBQREYzMjAwMF8yMDA4IHJlZmVyZW5jZS4KCSAqIEBwYXJhbSAkb252YWx1ZSAoc3RyaW5nKSBWYWx1ZSB0byBiZSByZXR1cm5lZCBpZiBzZWxlY3RlZC4KCSAqIEBwYXJhbSAkY2hlY2tlZCAoYm9vbGVhbikgRGVmaW5lIHRoZSBpbml0aWFsIHN0YXRlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJGpzIChib29sZWFuKSBJZiB0cnVlIHB1dCB0aGUgZmllbGQgdXNpbmcgSmF2YVNjcmlwdCAocmVxdWlyZXMgQWNyb2JhdCBXcml0ZXIgdG8gYmUgcmVuZGVyZWQpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gUmFkaW9CdXR0b24oJG5hbWUsICR3LCAkcHJvcD1hcnJheSgpLCAkb3B0PWFycmF5KCksICRvbnZhbHVlPSdPbicsICRjaGVja2VkPWZhbHNlLCAkeD0nJywgJHk9JycsICRqcz1mYWxzZSkgewoJCWlmICgkeCA9PT0gJycpIHsKCQkJJHggPSAkdGhpcy0+eDsKCQl9CgkJaWYgKCR5ID09PSAnJykgewoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQkvLyBjaGVjayBwYWdlIGZvciBuby13cml0ZSByZWdpb25zIGFuZCBhZGFwdCBwYWdlIG1hcmdpbnMgaWYgbmVjZXNzYXJ5CgkJbGlzdCgkeCwgJHkpID0gJHRoaXMtPmNoZWNrUGFnZVJlZ2lvbnMoJHcsICR4LCAkeSk7CgkJaWYgKCRqcykgewoJCQkkdGhpcy0+X2FkZGZpZWxkKCdyYWRpb2J1dHRvbicsICRuYW1lLCAkeCwgJHksICR3LCAkdywgJHByb3ApOwoJCQlyZXR1cm47CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkb252YWx1ZSkpIHsKCQkJJG9udmFsdWUgPSAnT24nOwoJCX0KCQlpZiAoJGNoZWNrZWQpIHsKCQkJJGRlZnZhbCA9ICRvbnZhbHVlOwoJCX0gZWxzZSB7CgkJCSRkZWZ2YWwgPSAnT2ZmJzsKCQl9CgkJLy8gc2V0IGZvbnQKCQkkZm9udCA9ICd6YXBmZGluZ2JhdHMnOwoJCWlmICgkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCS8vIGFsbCBmb250cyBtdXN0IGJlIGVtYmVkZGVkCgkJCSRmb250ID0gJ3BkZmEnLiRmb250OwoJCX0KCQkkdGhpcy0+QWRkRm9udCgkZm9udCk7CgkJJHRtcGZvbnQgPSAkdGhpcy0+Z2V0Rm9udEJ1ZmZlcigkZm9udCk7CgkJLy8gc2V0IGRhdGEgZm9yIHBhcmVudCBncm91cAoJCWlmICghaXNzZXQoJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skdGhpcy0+cGFnZV0pKSB7CgkJCSR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJHRoaXMtPnBhZ2VdID0gYXJyYXkoKTsKCQl9CgkJaWYgKCFpc3NldCgkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyR0aGlzLT5wYWdlXVskbmFtZV0pKSB7CgkJCSR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJHRoaXMtPnBhZ2VdWyRuYW1lXSA9IGFycmF5KCk7CgkJCSsrJHRoaXMtPm47CgkJCSR0aGlzLT5yYWRpb2J1dHRvbl9ncm91cHNbJHRoaXMtPnBhZ2VdWyRuYW1lXVsnbiddID0gJHRoaXMtPm47CgkJCSR0aGlzLT5yYWRpb19ncm91cHNbXSA9ICR0aGlzLT5uOwoJCX0KCQkka2lkID0gKCR0aGlzLT5uICsgMSk7CgkJLy8gc2F2ZSBvYmplY3QgSUQgdG8gYmUgYWRkZWQgb24gS2lkcyBlbnRyeSBvbiBwYXJlbnQgb2JqZWN0CgkJJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skdGhpcy0+cGFnZV1bJG5hbWVdW10gPSBhcnJheSgna2lkJyA9PiAka2lkLCAnZGVmJyA9PiAkZGVmdmFsKTsKCQkvLyBnZXQgZGVmYXVsdCBzdHlsZQoJCSRwcm9wID0gYXJyYXlfbWVyZ2UoJHRoaXMtPmdldEZvcm1EZWZhdWx0UHJvcCgpLCAkcHJvcCk7CgkJJHByb3BbJ05vVG9nZ2xlVG9PZmYnXSA9ICd0cnVlJzsKCQkkcHJvcFsnUmFkaW8nXSA9ICd0cnVlJzsKCQkkcHJvcFsnYm9yZGVyU3R5bGUnXSA9ICdpbnNldCc7CgkJLy8gZ2V0IGFubm90YXRpb24gZGF0YQoJCSRwb3B0ID0gVENQREZfU1RBVElDOjpnZXRBbm5vdE9wdEZyb21KU1Byb3AoJHByb3AsICR0aGlzLT5zcG90X2NvbG9ycywgJHRoaXMtPnJ0bCk7CgkJLy8gc2V0IGFkZGl0aW9uYWwgZGVmYXVsdCBvcHRpb25zCgkJJHRoaXMtPmFubm90YXRpb25fZm9udHNbJHRtcGZvbnRbJ2ZvbnRrZXknXV0gPSAkdG1wZm9udFsnaSddOwoJCSRmb250c3R5bGUgPSBzcHJpbnRmKCcvRiVkICVGIFRmICVzJywgJHRtcGZvbnRbJ2knXSwgJHRoaXMtPkZvbnRTaXplUHQsICR0aGlzLT5UZXh0Q29sb3IpOwoJCSRwb3B0WydkYSddID0gJGZvbnRzdHlsZTsKCQkvLyBidWlsZCBhcHBlYXJhbmNlIHN0cmVhbQoJCSRwb3B0WydhcCddID0gYXJyYXkoKTsKCQkkcG9wdFsnYXAnXVsnbiddID0gYXJyYXkoKTsKCQkkZnggPSAoKCgkdyAtICR0aGlzLT5nZXRBYnNGb250TWVhc3VyZSgkdG1wZm9udFsnY3cnXVsxMDhdKSkgLyAyKSAqICR0aGlzLT5rKTsKCQkkZnkgPSAoKCR3IC0gKCgoJHRtcGZvbnRbJ2Rlc2MnXVsnQXNjZW50J10gLSAkdG1wZm9udFsnZGVzYyddWydEZXNjZW50J10pICogJHRoaXMtPkZvbnRTaXplUHQgLyAxMDAwKSAvICR0aGlzLT5rKSkgKiAkdGhpcy0+ayk7CgkJJHBvcHRbJ2FwJ11bJ24nXVskb252YWx1ZV0gPSBzcHJpbnRmKCdxICVzIEJUIC9GJWQgJUYgVGYgJUYgJUYgVGQgKCcuY2hyKDEwOCkuJykgVGogRVQgUScsICR0aGlzLT5UZXh0Q29sb3IsICR0bXBmb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkZngsICRmeSk7CgkJJHBvcHRbJ2FwJ11bJ24nXVsnT2ZmJ10gPSBzcHJpbnRmKCdxICVzIEJUIC9GJWQgJUYgVGYgJUYgJUYgVGQgKCcuY2hyKDEwOSkuJykgVGogRVQgUScsICR0aGlzLT5UZXh0Q29sb3IsICR0bXBmb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkZngsICRmeSk7CgkJaWYgKCFpc3NldCgkcG9wdFsnbWsnXSkpIHsKCQkJJHBvcHRbJ21rJ10gPSBhcnJheSgpOwoJCX0KCQkkcG9wdFsnbWsnXVsnY2EnXSA9ICcobCknOwoJCS8vIG1lcmdlIG9wdGlvbnMKCQkkb3B0ID0gYXJyYXlfbWVyZ2UoJHBvcHQsICRvcHQpOwoJCS8vIHNldCByZW1haW5pbmcgYW5ub3RhdGlvbiBkYXRhCgkJJG9wdFsnU3VidHlwZSddID0gJ1dpZGdldCc7CgkJJG9wdFsnZnQnXSA9ICdCdG4nOwoJCWlmICgkY2hlY2tlZCkgewoJCQkkb3B0Wyd2J10gPSBhcnJheSgnLycuJG9udmFsdWUpOwoJCQkkb3B0WydhcyddID0gJG9udmFsdWU7CgkJfSBlbHNlIHsKCQkJJG9wdFsnYXMnXSA9ICdPZmYnOwoJCX0KCQkvLyBzdG9yZSByZWFkb25seSBmbGFnCgkJaWYgKCFpc3NldCgkdGhpcy0+cmFkaW9idXR0b25fZ3JvdXBzWyR0aGlzLT5wYWdlXVskbmFtZV1bJyNyZWFkb25seSMnXSkpIHsKCQkJJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skdGhpcy0+cGFnZV1bJG5hbWVdWycjcmVhZG9ubHkjJ10gPSBmYWxzZTsKCQl9CgkJJHRoaXMtPnJhZGlvYnV0dG9uX2dyb3Vwc1skdGhpcy0+cGFnZV1bJG5hbWVdWycjcmVhZG9ubHkjJ10gfD0gKCRvcHRbJ2YnXSAmIDY0KTsKCQkkdGhpcy0+QW5ub3RhdGlvbigkeCwgJHksICR3LCAkdywgJG5hbWUsICRvcHQsIDApOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT54IC09ICR3OwoJCX0gZWxzZSB7CgkJCSR0aGlzLT54ICs9ICR3OwoJCX0KCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBMaXN0LWJveCBmaWVsZAoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIGZpZWxkIG5hbWUKCSAqIEBwYXJhbSAkdyAoaW50KSB3aWR0aAoJICogQHBhcmFtICRoIChpbnQpIGhlaWdodAoJICogQHBhcmFtICR2YWx1ZXMgKGFycmF5KSBhcnJheSBjb250YWluaW5nIHRoZSBsaXN0IG9mIHZhbHVlcy4KCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHBhcmFtICRvcHQgKGFycmF5KSBhbm5vdGF0aW9uIHBhcmFtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIFBERjMyMDAwXzIwMDggcmVmZXJlbmNlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJGpzIChib29sZWFuKSBpZiB0cnVlIHB1dCB0aGUgZmllbGQgdXNpbmcgSmF2YVNjcmlwdCAocmVxdWlyZXMgQWNyb2JhdCBXcml0ZXIgdG8gYmUgcmVuZGVyZWQpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gTGlzdEJveCgkbmFtZSwgJHcsICRoLCAkdmFsdWVzLCAkcHJvcD1hcnJheSgpLCAkb3B0PWFycmF5KCksICR4PScnLCAkeT0nJywgJGpzPWZhbHNlKSB7CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQlpZiAoJGpzKSB7CgkJCSR0aGlzLT5fYWRkZmllbGQoJ2xpc3Rib3gnLCAkbmFtZSwgJHgsICR5LCAkdywgJGgsICRwcm9wKTsKCQkJJHMgPSAnJzsKCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKCQkJCWlmIChpc19hcnJheSgkdmFsdWUpKSB7CgkJCQkJJHMgLj0gJyxbXCcnLmFkZHNsYXNoZXMoJHZhbHVlWzFdKS4nXCcsXCcnLmFkZHNsYXNoZXMoJHZhbHVlWzBdKS4nXCddJzsKCQkJCX0gZWxzZSB7CgkJCQkJJHMgLj0gJyxbXCcnLmFkZHNsYXNoZXMoJHZhbHVlKS4nXCcsXCcnLmFkZHNsYXNoZXMoJHZhbHVlKS4nXCddJzsKCQkJCX0KCQkJfQoJCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAnZicuJG5hbWUuJy5zZXRJdGVtcygnLnN1YnN0cigkcywgMSkuJyk7Jy4iXG4iOwoJCQlyZXR1cm47CgkJfQoJCS8vIGdldCBkZWZhdWx0IHN0eWxlCgkJJHByb3AgPSBhcnJheV9tZXJnZSgkdGhpcy0+Z2V0Rm9ybURlZmF1bHRQcm9wKCksICRwcm9wKTsKCQkvLyBnZXQgYW5ub3RhdGlvbiBkYXRhCgkJJHBvcHQgPSBUQ1BERl9TVEFUSUM6OmdldEFubm90T3B0RnJvbUpTUHJvcCgkcHJvcCwgJHRoaXMtPnNwb3RfY29sb3JzLCAkdGhpcy0+cnRsKTsKCQkvLyBzZXQgYWRkaXRpb25hbCBkZWZhdWx0IHZhbHVlcwoJCSR0aGlzLT5hbm5vdGF0aW9uX2ZvbnRzWyR0aGlzLT5DdXJyZW50Rm9udFsnZm9udGtleSddXSA9ICR0aGlzLT5DdXJyZW50Rm9udFsnaSddOwoJCSRmb250c3R5bGUgPSBzcHJpbnRmKCcvRiVkICVGIFRmICVzJywgJHRoaXMtPkN1cnJlbnRGb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkdGhpcy0+VGV4dENvbG9yKTsKCQkkcG9wdFsnZGEnXSA9ICRmb250c3R5bGU7CgkJLy8gYnVpbGQgYXBwZWFyYW5jZSBzdHJlYW0KCQkkcG9wdFsnYXAnXSA9IGFycmF5KCk7CgkJJHBvcHRbJ2FwJ11bJ24nXSA9ICcvVHggQk1DIHEgJy4kZm9udHN0eWxlLicgJzsKCQkkdGV4dCA9ICcnOwoJCWZvcmVhY2goJHZhbHVlcyBhcyAkaXRlbSkgewoJCQlpZiAoaXNfYXJyYXkoJGl0ZW0pKSB7CgkJCQkkdGV4dCAuPSAkaXRlbVsxXS4iXG4iOwoJCQl9IGVsc2UgewoJCQkJJHRleHQgLj0gJGl0ZW0uIlxuIjsKCQkJfQoJCX0KCQkkdG1waWQgPSAkdGhpcy0+c3RhcnRUZW1wbGF0ZSgkdywgJGgsIGZhbHNlKTsKCQkkdGhpcy0+TXVsdGlDZWxsKCR3LCAkaCwgJHRleHQsIDAsICcnLCBmYWxzZSwgMCwgMCwgMCwgdHJ1ZSwgMCwgZmFsc2UsIHRydWUsIDAsICdUJywgZmFsc2UpOwoJCSR0aGlzLT5lbmRUZW1wbGF0ZSgpOwoJCS0tJHRoaXMtPm47CgkJJHBvcHRbJ2FwJ11bJ24nXSAuPSAkdGhpcy0+eG9iamVjdHNbJHRtcGlkXVsnb3V0ZGF0YSddOwoJCXVuc2V0KCR0aGlzLT54b2JqZWN0c1skdG1waWRdKTsKCQkkcG9wdFsnYXAnXVsnbiddIC49ICdRIEVNQyc7CgkJLy8gbWVyZ2Ugb3B0aW9ucwoJCSRvcHQgPSBhcnJheV9tZXJnZSgkcG9wdCwgJG9wdCk7CgkJLy8gc2V0IHJlbWFpbmluZyBhbm5vdGF0aW9uIGRhdGEKCQkkb3B0WydTdWJ0eXBlJ10gPSAnV2lkZ2V0JzsKCQkkb3B0WydmdCddID0gJ0NoJzsKCQkkb3B0Wyd0J10gPSAkbmFtZTsKCQkkb3B0WydvcHQnXSA9ICR2YWx1ZXM7CgkJdW5zZXQoJG9wdFsnbWsnXVsnY2EnXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsncmMnXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsnYWMnXSk7CgkJdW5zZXQoJG9wdFsnbWsnXVsnaSddKTsKCQl1bnNldCgkb3B0WydtayddWydyaSddKTsKCQl1bnNldCgkb3B0WydtayddWydpeCddKTsKCQl1bnNldCgkb3B0WydtayddWydpZiddKTsKCQl1bnNldCgkb3B0WydtayddWyd0cCddKTsKCQkkdGhpcy0+QW5ub3RhdGlvbigkeCwgJHksICR3LCAkaCwgJG5hbWUsICRvcHQsIDApOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT54IC09ICR3OwoJCX0gZWxzZSB7CgkJCSR0aGlzLT54ICs9ICR3OwoJCX0KCX0KCgkvKioKCSAqIENyZWF0ZXMgYSBDb21iby1ib3ggZmllbGQKCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBmaWVsZCBuYW1lCgkgKiBAcGFyYW0gJHcgKGludCkgd2lkdGgKCSAqIEBwYXJhbSAkaCAoaW50KSBoZWlnaHQKCSAqIEBwYXJhbSAkdmFsdWVzIChhcnJheSkgYXJyYXkgY29udGFpbmluZyB0aGUgbGlzdCBvZiB2YWx1ZXMuCgkgKiBAcGFyYW0gJHByb3AgKGFycmF5KSBqYXZhc2NyaXB0IGZpZWxkIHByb3BlcnRpZXMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIEphdmFzY3JpcHQgZm9yIEFjcm9iYXQgQVBJIHJlZmVyZW5jZS4KCSAqIEBwYXJhbSAkb3B0IChhcnJheSkgYW5ub3RhdGlvbiBwYXJhbWV0ZXJzLiBQb3NzaWJsZSB2YWx1ZXMgYXJlIGRlc2NyaWJlZCBvbiBvZmZpY2lhbCBQREYzMjAwMF8yMDA4IHJlZmVyZW5jZS4KCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZQoJICogQHBhcmFtICRqcyAoYm9vbGVhbikgaWYgdHJ1ZSBwdXQgdGhlIGZpZWxkIHVzaW5nIEphdmFTY3JpcHQgKHJlcXVpcmVzIEFjcm9iYXQgV3JpdGVyIHRvIGJlIHJlbmRlcmVkKS4KCSAqIEBwdWJsaWMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC44LjAwMCAoMjAwOS0wOS0wNykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIENvbWJvQm94KCRuYW1lLCAkdywgJGgsICR2YWx1ZXMsICRwcm9wPWFycmF5KCksICRvcHQ9YXJyYXkoKSwgJHg9JycsICR5PScnLCAkanM9ZmFsc2UpIHsKCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJLy8gY2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeQoJCWxpc3QoJHgsICR5KSA9ICR0aGlzLT5jaGVja1BhZ2VSZWdpb25zKCRoLCAkeCwgJHkpOwoJCWlmICgkanMpIHsKCQkJJHRoaXMtPl9hZGRmaWVsZCgnY29tYm9ib3gnLCAkbmFtZSwgJHgsICR5LCAkdywgJGgsICRwcm9wKTsKCQkJJHMgPSAnJzsKCQkJZm9yZWFjaCAoJHZhbHVlcyBhcyAkdmFsdWUpIHsKCQkJCWlmIChpc19hcnJheSgkdmFsdWUpKSB7CgkJCQkJJHMgLj0gJyxbXCcnLmFkZHNsYXNoZXMoJHZhbHVlWzFdKS4nXCcsXCcnLmFkZHNsYXNoZXMoJHZhbHVlWzBdKS4nXCddJzsKCQkJCX0gZWxzZSB7CgkJCQkJJHMgLj0gJyxbXCcnLmFkZHNsYXNoZXMoJHZhbHVlKS4nXCcsXCcnLmFkZHNsYXNoZXMoJHZhbHVlKS4nXCddJzsKCQkJCX0KCQkJfQoJCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAnZicuJG5hbWUuJy5zZXRJdGVtcygnLnN1YnN0cigkcywgMSkuJyk7Jy4iXG4iOwoJCQlyZXR1cm47CgkJfQoJCS8vIGdldCBkZWZhdWx0IHN0eWxlCgkJJHByb3AgPSBhcnJheV9tZXJnZSgkdGhpcy0+Z2V0Rm9ybURlZmF1bHRQcm9wKCksICRwcm9wKTsKCQkkcHJvcFsnQ29tYm8nXSA9IHRydWU7CgkJLy8gZ2V0IGFubm90YXRpb24gZGF0YQoJCSRwb3B0ID0gVENQREZfU1RBVElDOjpnZXRBbm5vdE9wdEZyb21KU1Byb3AoJHByb3AsICR0aGlzLT5zcG90X2NvbG9ycywgJHRoaXMtPnJ0bCk7CgkJLy8gc2V0IGFkZGl0aW9uYWwgZGVmYXVsdCBvcHRpb25zCgkJJHRoaXMtPmFubm90YXRpb25fZm9udHNbJHRoaXMtPkN1cnJlbnRGb250Wydmb250a2V5J11dID0gJHRoaXMtPkN1cnJlbnRGb250WydpJ107CgkJJGZvbnRzdHlsZSA9IHNwcmludGYoJy9GJWQgJUYgVGYgJXMnLCAkdGhpcy0+Q3VycmVudEZvbnRbJ2knXSwgJHRoaXMtPkZvbnRTaXplUHQsICR0aGlzLT5UZXh0Q29sb3IpOwoJCSRwb3B0WydkYSddID0gJGZvbnRzdHlsZTsKCQkvLyBidWlsZCBhcHBlYXJhbmNlIHN0cmVhbQoJCSRwb3B0WydhcCddID0gYXJyYXkoKTsKCQkkcG9wdFsnYXAnXVsnbiddID0gJy9UeCBCTUMgcSAnLiRmb250c3R5bGUuJyAnOwoJCSR0ZXh0ID0gJyc7CgkJZm9yZWFjaCgkdmFsdWVzIGFzICRpdGVtKSB7CgkJCWlmIChpc19hcnJheSgkaXRlbSkpIHsKCQkJCSR0ZXh0IC49ICRpdGVtWzFdLiJcbiI7CgkJCX0gZWxzZSB7CgkJCQkkdGV4dCAuPSAkaXRlbS4iXG4iOwoJCQl9CgkJfQoJCSR0bXBpZCA9ICR0aGlzLT5zdGFydFRlbXBsYXRlKCR3LCAkaCwgZmFsc2UpOwoJCSR0aGlzLT5NdWx0aUNlbGwoJHcsICRoLCAkdGV4dCwgMCwgJycsIGZhbHNlLCAwLCAwLCAwLCB0cnVlLCAwLCBmYWxzZSwgdHJ1ZSwgMCwgJ1QnLCBmYWxzZSk7CgkJJHRoaXMtPmVuZFRlbXBsYXRlKCk7CgkJLS0kdGhpcy0+bjsKCQkkcG9wdFsnYXAnXVsnbiddIC49ICR0aGlzLT54b2JqZWN0c1skdG1waWRdWydvdXRkYXRhJ107CgkJdW5zZXQoJHRoaXMtPnhvYmplY3RzWyR0bXBpZF0pOwoJCSRwb3B0WydhcCddWyduJ10gLj0gJ1EgRU1DJzsKCQkvLyBtZXJnZSBvcHRpb25zCgkJJG9wdCA9IGFycmF5X21lcmdlKCRwb3B0LCAkb3B0KTsKCQkvLyBzZXQgcmVtYWluaW5nIGFubm90YXRpb24gZGF0YQoJCSRvcHRbJ1N1YnR5cGUnXSA9ICdXaWRnZXQnOwoJCSRvcHRbJ2Z0J10gPSAnQ2gnOwoJCSRvcHRbJ3QnXSA9ICRuYW1lOwoJCSRvcHRbJ29wdCddID0gJHZhbHVlczsKCQl1bnNldCgkb3B0WydtayddWydjYSddKTsKCQl1bnNldCgkb3B0WydtayddWydyYyddKTsKCQl1bnNldCgkb3B0WydtayddWydhYyddKTsKCQl1bnNldCgkb3B0WydtayddWydpJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ3JpJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ2l4J10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ2lmJ10pOwoJCXVuc2V0KCRvcHRbJ21rJ11bJ3RwJ10pOwoJCSR0aGlzLT5Bbm5vdGF0aW9uKCR4LCAkeSwgJHcsICRoLCAkbmFtZSwgJG9wdCwgMCk7CgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJJHRoaXMtPnggLT0gJHc7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnggKz0gJHc7CgkJfQoJfQoKCS8qKgoJICogQ3JlYXRlcyBhIENoZWNrQm94IGZpZWxkCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgZmllbGQgbmFtZQoJICogQHBhcmFtICR3IChpbnQpIHdpZHRoCgkgKiBAcGFyYW0gJGNoZWNrZWQgKGJvb2xlYW4pIGRlZmluZSB0aGUgaW5pdGlhbCBzdGF0ZS4KCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHBhcmFtICRvcHQgKGFycmF5KSBhbm5vdGF0aW9uIHBhcmFtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIFBERjMyMDAwXzIwMDggcmVmZXJlbmNlLgoJICogQHBhcmFtICRvbnZhbHVlIChzdHJpbmcpIHZhbHVlIHRvIGJlIHJldHVybmVkIGlmIHNlbGVjdGVkLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJGpzIChib29sZWFuKSBpZiB0cnVlIHB1dCB0aGUgZmllbGQgdXNpbmcgSmF2YVNjcmlwdCAocmVxdWlyZXMgQWNyb2JhdCBXcml0ZXIgdG8gYmUgcmVuZGVyZWQpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gQ2hlY2tCb3goJG5hbWUsICR3LCAkY2hlY2tlZD1mYWxzZSwgJHByb3A9YXJyYXkoKSwgJG9wdD1hcnJheSgpLCAkb252YWx1ZT0nWWVzJywgJHg9JycsICR5PScnLCAkanM9ZmFsc2UpIHsKCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJLy8gY2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeQoJCWxpc3QoJHgsICR5KSA9ICR0aGlzLT5jaGVja1BhZ2VSZWdpb25zKCR3LCAkeCwgJHkpOwoJCWlmICgkanMpIHsKCQkJJHRoaXMtPl9hZGRmaWVsZCgnY2hlY2tib3gnLCAkbmFtZSwgJHgsICR5LCAkdywgJHcsICRwcm9wKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoIWlzc2V0KCRwcm9wWyd2YWx1ZSddKSkgewoJCQkkcHJvcFsndmFsdWUnXSA9IGFycmF5KCdZZXMnKTsKCQl9CgkJLy8gZ2V0IGRlZmF1bHQgc3R5bGUKCQkkcHJvcCA9IGFycmF5X21lcmdlKCR0aGlzLT5nZXRGb3JtRGVmYXVsdFByb3AoKSwgJHByb3ApOwoJCSRwcm9wWydib3JkZXJTdHlsZSddID0gJ2luc2V0JzsKCQkvLyBnZXQgYW5ub3RhdGlvbiBkYXRhCgkJJHBvcHQgPSBUQ1BERl9TVEFUSUM6OmdldEFubm90T3B0RnJvbUpTUHJvcCgkcHJvcCwgJHRoaXMtPnNwb3RfY29sb3JzLCAkdGhpcy0+cnRsKTsKCQkvLyBzZXQgYWRkaXRpb25hbCBkZWZhdWx0IG9wdGlvbnMKCQkkZm9udCA9ICd6YXBmZGluZ2JhdHMnOwoJCWlmICgkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCS8vIGFsbCBmb250cyBtdXN0IGJlIGVtYmVkZGVkCgkJCSRmb250ID0gJ3BkZmEnLiRmb250OwoJCX0KCQkkdGhpcy0+QWRkRm9udCgkZm9udCk7CgkJJHRtcGZvbnQgPSAkdGhpcy0+Z2V0Rm9udEJ1ZmZlcigkZm9udCk7CgkJJHRoaXMtPmFubm90YXRpb25fZm9udHNbJHRtcGZvbnRbJ2ZvbnRrZXknXV0gPSAkdG1wZm9udFsnaSddOwoJCSRmb250c3R5bGUgPSBzcHJpbnRmKCcvRiVkICVGIFRmICVzJywgJHRtcGZvbnRbJ2knXSwgJHRoaXMtPkZvbnRTaXplUHQsICR0aGlzLT5UZXh0Q29sb3IpOwoJCSRwb3B0WydkYSddID0gJGZvbnRzdHlsZTsKCQkvLyBidWlsZCBhcHBlYXJhbmNlIHN0cmVhbQoJCSRwb3B0WydhcCddID0gYXJyYXkoKTsKCQkkcG9wdFsnYXAnXVsnbiddID0gYXJyYXkoKTsKCQkkZnggPSAoKCgkdyAtICR0aGlzLT5nZXRBYnNGb250TWVhc3VyZSgkdG1wZm9udFsnY3cnXVsxMTBdKSkgLyAyKSAqICR0aGlzLT5rKTsKCQkkZnkgPSAoKCR3IC0gKCgoJHRtcGZvbnRbJ2Rlc2MnXVsnQXNjZW50J10gLSAkdG1wZm9udFsnZGVzYyddWydEZXNjZW50J10pICogJHRoaXMtPkZvbnRTaXplUHQgLyAxMDAwKSAvICR0aGlzLT5rKSkgKiAkdGhpcy0+ayk7CgkJJHBvcHRbJ2FwJ11bJ24nXVsnWWVzJ10gPSBzcHJpbnRmKCdxICVzIEJUIC9GJWQgJUYgVGYgJUYgJUYgVGQgKCcuY2hyKDExMCkuJykgVGogRVQgUScsICR0aGlzLT5UZXh0Q29sb3IsICR0bXBmb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkZngsICRmeSk7CgkJJHBvcHRbJ2FwJ11bJ24nXVsnT2ZmJ10gPSBzcHJpbnRmKCdxICVzIEJUIC9GJWQgJUYgVGYgJUYgJUYgVGQgKCcuY2hyKDExMSkuJykgVGogRVQgUScsICR0aGlzLT5UZXh0Q29sb3IsICR0bXBmb250WydpJ10sICR0aGlzLT5Gb250U2l6ZVB0LCAkZngsICRmeSk7CgkJLy8gbWVyZ2Ugb3B0aW9ucwoJCSRvcHQgPSBhcnJheV9tZXJnZSgkcG9wdCwgJG9wdCk7CgkJLy8gc2V0IHJlbWFpbmluZyBhbm5vdGF0aW9uIGRhdGEKCQkkb3B0WydTdWJ0eXBlJ10gPSAnV2lkZ2V0JzsKCQkkb3B0WydmdCddID0gJ0J0bic7CgkJJG9wdFsndCddID0gJG5hbWU7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRvbnZhbHVlKSkgewoJCQkkb252YWx1ZSA9ICdZZXMnOwoJCX0KCQkkb3B0WydvcHQnXSA9IGFycmF5KCRvbnZhbHVlKTsKCQlpZiAoJGNoZWNrZWQpIHsKCQkJJG9wdFsndiddID0gYXJyYXkoJy9ZZXMnKTsKCQkJJG9wdFsnYXMnXSA9ICdZZXMnOwoJCX0gZWxzZSB7CgkJCSRvcHRbJ3YnXSA9IGFycmF5KCcvT2ZmJyk7CgkJCSRvcHRbJ2FzJ10gPSAnT2ZmJzsKCQl9CgkJJHRoaXMtPkFubm90YXRpb24oJHgsICR5LCAkdywgJHcsICRuYW1lLCAkb3B0LCAwKTsKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkdGhpcy0+eCAtPSAkdzsKCQl9IGVsc2UgewoJCQkkdGhpcy0+eCArPSAkdzsKCQl9Cgl9CgoJLyoqCgkgKiBDcmVhdGVzIGEgYnV0dG9uIGZpZWxkCgkgKiBAcGFyYW0gJG5hbWUgKHN0cmluZykgZmllbGQgbmFtZQoJICogQHBhcmFtICR3IChpbnQpIHdpZHRoCgkgKiBAcGFyYW0gJGggKGludCkgaGVpZ2h0CgkgKiBAcGFyYW0gJGNhcHRpb24gKHN0cmluZykgY2FwdGlvbi4KCSAqIEBwYXJhbSAkYWN0aW9uIChtaXhlZCkgYWN0aW9uIHRyaWdnZXJlZCBieSBwcmVzc2luZyB0aGUgYnV0dG9uLiBVc2UgYSBzdHJpbmcgdG8gc3BlY2lmeSBhIGphdmFzY3JpcHQgYWN0aW9uLiBVc2UgYW4gYXJyYXkgdG8gc3BlY2lmeSBhIGZvcm0gYWN0aW9uIG9wdGlvbnMgYXMgb24gc2VjdGlvbiAxMi43LjUgb2YgUERGMzIwMDBfMjAwOC4KCSAqIEBwYXJhbSAkcHJvcCAoYXJyYXkpIGphdmFzY3JpcHQgZmllbGQgcHJvcGVydGllcy4gUG9zc2libGUgdmFsdWVzIGFyZSBkZXNjcmliZWQgb24gb2ZmaWNpYWwgSmF2YXNjcmlwdCBmb3IgQWNyb2JhdCBBUEkgcmVmZXJlbmNlLgoJICogQHBhcmFtICRvcHQgKGFycmF5KSBhbm5vdGF0aW9uIHBhcmFtZXRlcnMuIFBvc3NpYmxlIHZhbHVlcyBhcmUgZGVzY3JpYmVkIG9uIG9mZmljaWFsIFBERjMyMDAwXzIwMDggcmVmZXJlbmNlLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlCgkgKiBAcGFyYW0gJGpzIChib29sZWFuKSBpZiB0cnVlIHB1dCB0aGUgZmllbGQgdXNpbmcgSmF2YVNjcmlwdCAocmVxdWlyZXMgQWNyb2JhdCBXcml0ZXIgdG8gYmUgcmVuZGVyZWQpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjguMDAwICgyMDA5LTA5LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gQnV0dG9uKCRuYW1lLCAkdywgJGgsICRjYXB0aW9uLCAkYWN0aW9uLCAkcHJvcD1hcnJheSgpLCAkb3B0PWFycmF5KCksICR4PScnLCAkeT0nJywgJGpzPWZhbHNlKSB7CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQlpZiAoJGpzKSB7CgkJCSR0aGlzLT5fYWRkZmllbGQoJ2J1dHRvbicsICRuYW1lLCAkdGhpcy0+eCwgJHRoaXMtPnksICR3LCAkaCwgJHByb3ApOwoJCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAnZicuJG5hbWUuIi5idXR0b25TZXRDYXB0aW9uKCciLmFkZHNsYXNoZXMoJGNhcHRpb24pLiInKTtcbiI7CgkJCSR0aGlzLT5qYXZhc2NyaXB0IC49ICdmJy4kbmFtZS4iLnNldEFjdGlvbignTW91c2VVcCcsJyIuYWRkc2xhc2hlcygkYWN0aW9uKS4iJyk7XG4iOwoJCQkkdGhpcy0+amF2YXNjcmlwdCAuPSAnZicuJG5hbWUuIi5oaWdobGlnaHQ9J3B1c2gnO1xuIjsKCQkJJHRoaXMtPmphdmFzY3JpcHQgLj0gJ2YnLiRuYW1lLiIucHJpbnQ9ZmFsc2U7XG4iOwoJCQlyZXR1cm47CgkJfQoJCS8vIGdldCBkZWZhdWx0IHN0eWxlCgkJJHByb3AgPSBhcnJheV9tZXJnZSgkdGhpcy0+Z2V0Rm9ybURlZmF1bHRQcm9wKCksICRwcm9wKTsKCQkkcHJvcFsnUHVzaGJ1dHRvbiddID0gJ3RydWUnOwoJCSRwcm9wWydoaWdobGlnaHQnXSA9ICdwdXNoJzsKCQkkcHJvcFsnZGlzcGxheSddID0gJ2Rpc3BsYXkubm9QcmludCc7CgkJLy8gZ2V0IGFubm90YXRpb24gZGF0YQoJCSRwb3B0ID0gVENQREZfU1RBVElDOjpnZXRBbm5vdE9wdEZyb21KU1Byb3AoJHByb3AsICR0aGlzLT5zcG90X2NvbG9ycywgJHRoaXMtPnJ0bCk7CgkJJHRoaXMtPmFubm90YXRpb25fZm9udHNbJHRoaXMtPkN1cnJlbnRGb250Wydmb250a2V5J11dID0gJHRoaXMtPkN1cnJlbnRGb250WydpJ107CgkJJGZvbnRzdHlsZSA9IHNwcmludGYoJy9GJWQgJUYgVGYgJXMnLCAkdGhpcy0+Q3VycmVudEZvbnRbJ2knXSwgJHRoaXMtPkZvbnRTaXplUHQsICR0aGlzLT5UZXh0Q29sb3IpOwoJCSRwb3B0WydkYSddID0gJGZvbnRzdHlsZTsKCQkvLyBidWlsZCBhcHBlYXJhbmNlIHN0cmVhbQoJCSRwb3B0WydhcCddID0gYXJyYXkoKTsKCQkkcG9wdFsnYXAnXVsnbiddID0gJy9UeCBCTUMgcSAnLiRmb250c3R5bGUuJyAnOwoJCSR0bXBpZCA9ICR0aGlzLT5zdGFydFRlbXBsYXRlKCR3LCAkaCwgZmFsc2UpOwoJCSRidyA9ICgyIC8gJHRoaXMtPmspOyAvLyBib3JkZXIgd2lkdGgKCQkkYm9yZGVyID0gYXJyYXkoCgkJCSdMJyA9PiBhcnJheSgnd2lkdGgnID0+ICRidywgJ2NhcCcgPT4gJ3NxdWFyZScsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgyMzEpKSwKCQkJJ1InID0+IGFycmF5KCd3aWR0aCcgPT4gJGJ3LCAnY2FwJyA9PiAnc3F1YXJlJywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDUxKSksCgkJCSdUJyA9PiBhcnJheSgnd2lkdGgnID0+ICRidywgJ2NhcCcgPT4gJ3NxdWFyZScsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgyMzEpKSwKCQkJJ0InID0+IGFycmF5KCd3aWR0aCcgPT4gJGJ3LCAnY2FwJyA9PiAnc3F1YXJlJywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDUxKSkpOwoJCSR0aGlzLT5TZXRGaWxsQ29sb3IoMjA0KTsKCQkkdGhpcy0+Q2VsbCgkdywgJGgsICRjYXB0aW9uLCAkYm9yZGVyLCAwLCAnQycsIHRydWUsICcnLCAxLCBmYWxzZSwgJ1QnLCAnTScpOwoJCSR0aGlzLT5lbmRUZW1wbGF0ZSgpOwoJCS0tJHRoaXMtPm47CgkJJHBvcHRbJ2FwJ11bJ24nXSAuPSAkdGhpcy0+eG9iamVjdHNbJHRtcGlkXVsnb3V0ZGF0YSddOwoJCXVuc2V0KCR0aGlzLT54b2JqZWN0c1skdG1waWRdKTsKCQkkcG9wdFsnYXAnXVsnbiddIC49ICdRIEVNQyc7CgkJLy8gc2V0IGFkZGl0aW9uYWwgZGVmYXVsdCBvcHRpb25zCgkJaWYgKCFpc3NldCgkcG9wdFsnbWsnXSkpIHsKCQkJJHBvcHRbJ21rJ10gPSBhcnJheSgpOwoJCX0KCQkkYW5uX29ial9pZCA9ICgkdGhpcy0+biArIDEpOwoJCWlmICghZW1wdHkoJGFjdGlvbikgQU5EICFpc19hcnJheSgkYWN0aW9uKSkgewoJCQkkYW5uX29ial9pZCA9ICgkdGhpcy0+biArIDIpOwoJCX0KCQkkcG9wdFsnbWsnXVsnY2EnXSA9ICR0aGlzLT5fdGV4dHN0cmluZygkY2FwdGlvbiwgJGFubl9vYmpfaWQpOwoJCSRwb3B0WydtayddWydyYyddID0gJHRoaXMtPl90ZXh0c3RyaW5nKCRjYXB0aW9uLCAkYW5uX29ial9pZCk7CgkJJHBvcHRbJ21rJ11bJ2FjJ10gPSAkdGhpcy0+X3RleHRzdHJpbmcoJGNhcHRpb24sICRhbm5fb2JqX2lkKTsKCQkvLyBtZXJnZSBvcHRpb25zCgkJJG9wdCA9IGFycmF5X21lcmdlKCRwb3B0LCAkb3B0KTsKCQkvLyBzZXQgcmVtYWluaW5nIGFubm90YXRpb24gZGF0YQoJCSRvcHRbJ1N1YnR5cGUnXSA9ICdXaWRnZXQnOwoJCSRvcHRbJ2Z0J10gPSAnQnRuJzsKCQkkb3B0Wyd0J10gPSAkY2FwdGlvbjsKCQkkb3B0Wyd2J10gPSAkbmFtZTsKCQlpZiAoIWVtcHR5KCRhY3Rpb24pKSB7CgkJCWlmIChpc19hcnJheSgkYWN0aW9uKSkgewoJCQkJLy8gZm9ybSBhY3Rpb24gb3B0aW9ucyBhcyBvbiBzZWN0aW9uIDEyLjcuNSBvZiBQREYzMjAwMF8yMDA4LgoJCQkJJG9wdFsnYWEnXSA9ICcvRCA8PCc7CgkJCQkkYm1vZGUgPSBhcnJheSgnU3VibWl0Rm9ybScsICdSZXNldEZvcm0nLCAnSW1wb3J0RGF0YScpOwoJCQkJZm9yZWFjaCAoJGFjdGlvbiBBUyAka2V5ID0+ICR2YWwpIHsKCQkJCQlpZiAoKCRrZXkgPT0gJ1MnKSBBTkQgaW5fYXJyYXkoJHZhbCwgJGJtb2RlKSkgewoJCQkJCQkkb3B0WydhYSddIC49ICcgL1MgLycuJHZhbDsKCQkJCQl9IGVsc2VpZiAoKCRrZXkgPT0gJ0YnKSBBTkQgKCFlbXB0eSgkdmFsKSkpIHsKCQkJCQkJJG9wdFsnYWEnXSAuPSAnIC9GICcuJHRoaXMtPl9kYXRhc3RyaW5nKCR2YWwsICRhbm5fb2JqX2lkKTsKCQkJCQl9IGVsc2VpZiAoKCRrZXkgPT0gJ0ZpZWxkcycpIEFORCBpc19hcnJheSgkdmFsKSBBTkQgIWVtcHR5KCR2YWwpKSB7CgkJCQkJCSRvcHRbJ2FhJ10gLj0gJyAvRmllbGRzIFsnOwoJCQkJCQlmb3JlYWNoICgkdmFsIEFTICRmaWVsZCkgewoJCQkJCQkJJG9wdFsnYWEnXSAuPSAnICcuJHRoaXMtPl90ZXh0c3RyaW5nKCRmaWVsZCwgJGFubl9vYmpfaWQpOwoJCQkJCQl9CgkJCQkJCSRvcHRbJ2FhJ10gLj0gJ10nOwoJCQkJCX0gZWxzZWlmICgoJGtleSA9PSAnRmxhZ3MnKSkgewoJCQkJCQkkZmYgPSAwOwoJCQkJCQlpZiAoaXNfYXJyYXkoJHZhbCkpIHsKCQkJCQkJCWZvcmVhY2ggKCR2YWwgQVMgJGZsYWcpIHsKCQkJCQkJCQlzd2l0Y2ggKCRmbGFnKSB7CgkJCQkJCQkJCWNhc2UgJ0luY2x1ZGUvRXhjbHVkZSc6IHsKCQkJCQkJCQkJCSRmZiArPSAxIDw8IDA7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdJbmNsdWRlTm9WYWx1ZUZpZWxkcyc6IHsKCQkJCQkJCQkJCSRmZiArPSAxIDw8IDE7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdFeHBvcnRGb3JtYXQnOiB7CgkJCQkJCQkJCQkkZmYgKz0gMSA8PCAyOwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAnR2V0TWV0aG9kJzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgMzsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ1N1Ym1pdENvb3JkaW5hdGVzJzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgNDsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ1hGREYnOiB7CgkJCQkJCQkJCQkkZmYgKz0gMSA8PCA1OwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAnSW5jbHVkZUFwcGVuZFNhdmVzJzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgNjsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ0luY2x1ZGVBbm5vdGF0aW9ucyc6IHsKCQkJCQkJCQkJCSRmZiArPSAxIDw8IDc7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdTdWJtaXRQREYnOiB7CgkJCQkJCQkJCQkkZmYgKz0gMSA8PCA4OwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAnQ2Fub25pY2FsRm9ybWF0JzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgOTsKCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQl9CgkJCQkJCQkJCWNhc2UgJ0V4Y2xOb25Vc2VyQW5ub3RzJzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgMTA7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCQljYXNlICdFeGNsRktleSc6IHsKCQkJCQkJCQkJCSRmZiArPSAxIDw8IDExOwoJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCX0KCQkJCQkJCQkJY2FzZSAnRW1iZWRGb3JtJzogewoJCQkJCQkJCQkJJGZmICs9IDEgPDwgMTM7CgkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRmZiA9IGludHZhbCgkdmFsKTsKCQkJCQkJfQoJCQkJCQkkb3B0WydhYSddIC49ICcgL0ZsYWdzICcuJGZmOwoJCQkJCX0KCQkJCX0KCQkJCSRvcHRbJ2FhJ10gLj0gJyA+Pic7CgkJCX0gZWxzZSB7CgkJCQkvLyBKYXZhc2NyaXB0IGFjdGlvbiBvciByYXcgYWN0aW9uIGNvbW1hbmQKCQkJCSRqc19vYmpfaWQgPSAkdGhpcy0+YWRkSmF2YXNjcmlwdE9iamVjdCgkYWN0aW9uKTsKCQkJCSRvcHRbJ2FhJ10gPSAnL0QgJy4kanNfb2JqX2lkLicgMCBSJzsKCQkJfQoJCX0KCQkkdGhpcy0+QW5ub3RhdGlvbigkeCwgJHksICR3LCAkaCwgJG5hbWUsICRvcHQsIDApOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT54IC09ICR3OwoJCX0gZWxzZSB7CgkJCSR0aGlzLT54ICs9ICR3OwoJCX0KCX0KCgkvLyAtLS0gRU5EIEZPUk1TIEZJRUxEUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCgkvKioKCSAqIEFkZCBjZXJ0aWZpY2F0aW9uIHNpZ25hdHVyZSAoRG9jTURQIG9yIFVSMykKCSAqIFlvdSBjYW4gc2V0IG9ubHkgb25lIHNpZ25hdHVyZSB0eXBlCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuNi4wMDggKDIwMDktMDUtMDcpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBfcHV0c2lnbmF0dXJlKCkgewoJCWlmICgoISR0aGlzLT5zaWduKSBPUiAoIWlzc2V0KCR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ10pKSkgewoJCQlyZXR1cm47CgkJfQoJCSRzaWdvYmppZCA9ICgkdGhpcy0+c2lnX29ial9pZCArIDEpOwoJCSRvdXQgPSAkdGhpcy0+X2dldG9iaigkc2lnb2JqaWQpLiJcbiI7CgkJJG91dCAuPSAnPDwgL1R5cGUgL1NpZyc7CgkJJG91dCAuPSAnIC9GaWx0ZXIgL0Fkb2JlLlBQS0xpdGUnOwoJCSRvdXQgLj0gJyAvU3ViRmlsdGVyIC9hZGJlLnBrY3M3LmRldGFjaGVkJzsKCQkkb3V0IC49ICcgJy5UQ1BERl9TVEFUSUM6OiRieXRlcmFuZ2Vfc3RyaW5nOwoJCSRvdXQgLj0gJyAvQ29udGVudHM8Jy5zdHJfcmVwZWF0KCcwJywgJHRoaXMtPnNpZ25hdHVyZV9tYXhfbGVuZ3RoKS4nPic7CgkJJG91dCAuPSAnIC9SZWZlcmVuY2UgWyc7IC8vIGFycmF5IG9mIHNpZ25hdHVyZSByZWZlcmVuY2UgZGljdGlvbmFyaWVzCgkJJG91dCAuPSAnIDw8IC9UeXBlIC9TaWdSZWYnOwoJCWlmICgkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2NlcnRfdHlwZSddID4gMCkgewoJCQkkb3V0IC49ICcgL1RyYW5zZm9ybU1ldGhvZCAvRG9jTURQJzsKCQkJJG91dCAuPSAnIC9UcmFuc2Zvcm1QYXJhbXMgPDwnOwoJCQkkb3V0IC49ICcgL1R5cGUgL1RyYW5zZm9ybVBhcmFtcyc7CgkJCSRvdXQgLj0gJyAvUCAnLiR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ107CgkJCSRvdXQgLj0gJyAvViAvMS4yJzsKCQl9IGVsc2UgewoJCQkkb3V0IC49ICcgL1RyYW5zZm9ybU1ldGhvZCAvVVIzJzsKCQkJJG91dCAuPSAnIC9UcmFuc2Zvcm1QYXJhbXMgPDwnOwoJCQkkb3V0IC49ICcgL1R5cGUgL1RyYW5zZm9ybVBhcmFtcyc7CgkJCSRvdXQgLj0gJyAvViAvMi4yJzsKCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+dXJbJ2RvY3VtZW50J10pKSB7CgkJCQkkb3V0IC49ICcgL0RvY3VtZW50WycuJHRoaXMtPnVyWydkb2N1bWVudCddLiddJzsKCQkJfQoJCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT51clsnZm9ybSddKSkgewoJCQkJJG91dCAuPSAnIC9Gb3JtWycuJHRoaXMtPnVyWydmb3JtJ10uJ10nOwoJCQl9CgkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnVyWydzaWduYXR1cmUnXSkpIHsKCQkJCSRvdXQgLj0gJyAvU2lnbmF0dXJlWycuJHRoaXMtPnVyWydzaWduYXR1cmUnXS4nXSc7CgkJCX0KCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+dXJbJ2Fubm90cyddKSkgewoJCQkJJG91dCAuPSAnIC9Bbm5vdHNbJy4kdGhpcy0+dXJbJ2Fubm90cyddLiddJzsKCQkJfQoJCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT51clsnZWYnXSkpIHsKCQkJCSRvdXQgLj0gJyAvRUZbJy4kdGhpcy0+dXJbJ2VmJ10uJ10nOwoJCQl9CgkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnVyWydmb3JtZXgnXSkpIHsKCQkJCSRvdXQgLj0gJyAvRm9ybUVYWycuJHRoaXMtPnVyWydmb3JtZXgnXS4nXSc7CgkJCX0KCQl9CgkJJG91dCAuPSAnID4+JzsgLy8gY2xvc2UgVHJhbnNmb3JtUGFyYW1zCgkJLy8gb3B0aW9uYWwgZGlnZXN0IGRhdGEgKHZhbHVlcyBtdXN0IGJlIGNhbGN1bGF0ZWQgYW5kIHJlcGxhY2VkIGxhdGVyKQoJCS8vJG91dCAuPSAnIC9EYXRhICoqKioqKioqKiogMCBSJzsKCQkvLyRvdXQgLj0gJyAvRGlnZXN0TWV0aG9kL01ENSc7CgkJLy8kb3V0IC49ICcgL0RpZ2VzdExvY2F0aW9uWyoqKioqKioqKiogMzRdJzsKCQkvLyRvdXQgLj0gJyAvRGlnZXN0VmFsdWU8KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKio+JzsKCQkkb3V0IC49ICcgPj4nOwoJCSRvdXQgLj0gJyBdJzsgLy8gZW5kIG9mIHJlZmVyZW5jZQoJCWlmIChpc3NldCgkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnTmFtZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5zaWduYXR1cmVfZGF0YVsnaW5mbyddWydOYW1lJ10pKSB7CgkJCSRvdXQgLj0gJyAvTmFtZSAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnTmFtZSddLCAkc2lnb2JqaWQpOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydpbmZvJ11bJ0xvY2F0aW9uJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydpbmZvJ11bJ0xvY2F0aW9uJ10pKSB7CgkJCSRvdXQgLj0gJyAvTG9jYXRpb24gJy4kdGhpcy0+X3RleHRzdHJpbmcoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydpbmZvJ11bJ0xvY2F0aW9uJ10sICRzaWdvYmppZCk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnUmVhc29uJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnNpZ25hdHVyZV9kYXRhWydpbmZvJ11bJ1JlYXNvbiddKSkgewoJCQkkb3V0IC49ICcgL1JlYXNvbiAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnUmVhc29uJ10sICRzaWdvYmppZCk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnQ29udGFjdEluZm8nXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnQ29udGFjdEluZm8nXSkpIHsKCQkJJG91dCAuPSAnIC9Db250YWN0SW5mbyAnLiR0aGlzLT5fdGV4dHN0cmluZygkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2luZm8nXVsnQ29udGFjdEluZm8nXSwgJHNpZ29iamlkKTsKCQl9CgkJJG91dCAuPSAnIC9NICcuJHRoaXMtPl9kYXRlc3RyaW5nKCRzaWdvYmppZCwgJHRoaXMtPmRvY19tb2RpZmljYXRpb25fdGltZXN0YW1wKTsKCQkkb3V0IC49ICcgPj4nOwoJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkkdGhpcy0+X291dCgkb3V0KTsKCX0KCgkvKioKCSAqIFNldCBVc2VyJ3MgUmlnaHRzIGZvciBQREYgUmVhZGVyCgkgKiBXQVJOSU5HOiBUaGlzIGlzIGV4cGVyaW1lbnRhbCBhbmQgY3VycmVudGx5IGRvIG5vdCB3b3JrLgoJICogQ2hlY2sgdGhlIFBERiBSZWZlcmVuY2UgOC43LjEgVHJhbnNmb3JtIE1ldGhvZHMsCgkgKiBUYWJsZSA4LjEwNSBFbnRyaWVzIGluIHRoZSBVUiB0cmFuc2Zvcm0gcGFyYW1ldGVycyBkaWN0aW9uYXJ5CgkgKiBAcGFyYW0gJGVuYWJsZSAoYm9vbGVhbikgaWYgdHJ1ZSBlbmFibGUgdXNlcidzIHJpZ2h0cyBvbiBQREYgcmVhZGVyCgkgKiBAcGFyYW0gJGRvY3VtZW50IChzdHJpbmcpIE5hbWVzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBkb2N1bWVudC13aWRlIHVzYWdlIHJpZ2h0cyBmb3IgdGhlIGRvY3VtZW50LiBUaGUgb25seSBkZWZpbmVkIHZhbHVlIGlzICIvRnVsbFNhdmUiLCB3aGljaCBwZXJtaXRzIGEgdXNlciB0byBzYXZlIHRoZSBkb2N1bWVudCBhbG9uZyB3aXRoIG1vZGlmaWVkIGZvcm0gYW5kL29yIGFubm90YXRpb24gZGF0YS4KCSAqIEBwYXJhbSAkYW5ub3RzIChzdHJpbmcpIE5hbWVzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBhbm5vdGF0aW9uLXJlbGF0ZWQgdXNhZ2UgcmlnaHRzIGZvciB0aGUgZG9jdW1lbnQuIFZhbGlkIG5hbWVzIGluIFBERiAxLjUgYW5kIGxhdGVyIGFyZSAvQ3JlYXRlL0RlbGV0ZS9Nb2RpZnkvQ29weS9JbXBvcnQvRXhwb3J0LCB3aGljaCBwZXJtaXQgdGhlIHVzZXIgdG8gcGVyZm9ybSB0aGUgbmFtZWQgb3BlcmF0aW9uIG9uIGFubm90YXRpb25zLgoJICogQHBhcmFtICRmb3JtIChzdHJpbmcpIE5hbWVzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBmb3JtLWZpZWxkLXJlbGF0ZWQgdXNhZ2UgcmlnaHRzIGZvciB0aGUgZG9jdW1lbnQuIFZhbGlkIG5hbWVzIGFyZTogL0FkZC9EZWxldGUvRmlsbEluL0ltcG9ydC9FeHBvcnQvU3VibWl0U3RhbmRhbG9uZS9TcGF3blRlbXBsYXRlCgkgKiBAcGFyYW0gJHNpZ25hdHVyZSAoc3RyaW5nKSBOYW1lcyBzcGVjaWZ5aW5nIGFkZGl0aW9uYWwgc2lnbmF0dXJlLXJlbGF0ZWQgdXNhZ2UgcmlnaHRzIGZvciB0aGUgZG9jdW1lbnQuIFRoZSBvbmx5IGRlZmluZWQgdmFsdWUgaXMgL01vZGlmeSwgd2hpY2ggcGVybWl0cyBhIHVzZXIgdG8gYXBwbHkgYSBkaWdpdGFsIHNpZ25hdHVyZSB0byBhbiBleGlzdGluZyBzaWduYXR1cmUgZm9ybSBmaWVsZCBvciBjbGVhciBhIHNpZ25lZCBzaWduYXR1cmUgZm9ybSBmaWVsZC4KCSAqIEBwYXJhbSAkZWYgKHN0cmluZykgTmFtZXMgc3BlY2lmeWluZyBhZGRpdGlvbmFsIHVzYWdlIHJpZ2h0cyBmb3IgbmFtZWQgZW1iZWRkZWQgZmlsZXMgaW4gdGhlIGRvY3VtZW50LiBWYWxpZCBuYW1lcyBhcmUgL0NyZWF0ZS9EZWxldGUvTW9kaWZ5L0ltcG9ydCwgd2hpY2ggcGVybWl0IHRoZSB1c2VyIHRvIHBlcmZvcm0gdGhlIG5hbWVkIG9wZXJhdGlvbiBvbiBuYW1lZCBlbWJlZGRlZCBmaWxlcwoJIE5hbWVzIHNwZWNpZnlpbmcgYWRkaXRpb25hbCBlbWJlZGRlZC1maWxlcy1yZWxhdGVkIHVzYWdlIHJpZ2h0cyBmb3IgdGhlIGRvY3VtZW50LgoJICogQHBhcmFtICRmb3JtZXggKHN0cmluZykgTmFtZXMgc3BlY2lmeWluZyBhZGRpdGlvbmFsIGZvcm0tZmllbGQtcmVsYXRlZCB1c2FnZSByaWdodHMuIFRoZSBvbmx5IHZhbGlkIG5hbWUgaXMgQmFyY29kZVBsYWludGV4dCwgd2hpY2ggcGVybWl0cyB0ZXh0IGZvcm0gZmllbGQgZGF0YSB0byBiZSBlbmNvZGVkIGFzIGEgcGxhaW50ZXh0IHR3by1kaW1lbnNpb25hbCBiYXJjb2RlLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAyLjkuMDAwICgyMDA4LTAzLTI2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0VXNlclJpZ2h0cygKCQkJJGVuYWJsZT10cnVlLAoJCQkkZG9jdW1lbnQ9Jy9GdWxsU2F2ZScsCgkJCSRhbm5vdHM9Jy9DcmVhdGUvRGVsZXRlL01vZGlmeS9Db3B5L0ltcG9ydC9FeHBvcnQnLAoJCQkkZm9ybT0nL0FkZC9EZWxldGUvRmlsbEluL0ltcG9ydC9FeHBvcnQvU3VibWl0U3RhbmRhbG9uZS9TcGF3blRlbXBsYXRlJywKCQkJJHNpZ25hdHVyZT0nL01vZGlmeScsCgkJCSRlZj0nL0NyZWF0ZS9EZWxldGUvTW9kaWZ5L0ltcG9ydCcsCgkJCSRmb3JtZXg9JycpIHsKCQkkdGhpcy0+dXJbJ2VuYWJsZWQnXSA9ICRlbmFibGU7CgkJJHRoaXMtPnVyWydkb2N1bWVudCddID0gJGRvY3VtZW50OwoJCSR0aGlzLT51clsnYW5ub3RzJ10gPSAkYW5ub3RzOwoJCSR0aGlzLT51clsnZm9ybSddID0gJGZvcm07CgkJJHRoaXMtPnVyWydzaWduYXR1cmUnXSA9ICRzaWduYXR1cmU7CgkJJHRoaXMtPnVyWydlZiddID0gJGVmOwoJCSR0aGlzLT51clsnZm9ybWV4J10gPSAkZm9ybWV4OwoJCWlmICghJHRoaXMtPnNpZ24pIHsKCQkJJHRoaXMtPnNldFNpZ25hdHVyZSgnJywgJycsICcnLCAnJywgMCwgYXJyYXkoKSk7CgkJfQoJfQoKCS8qKgoJICogRW5hYmxlIGRvY3VtZW50IHNpZ25hdHVyZSAocmVxdWlyZXMgdGhlIE9wZW5TU0wgTGlicmFyeSkuCgkgKiBUaGUgZGlnaXRhbCBzaWduYXR1cmUgaW1wcm92ZSBkb2N1bWVudCBhdXRoZW50aWNpdHkgYW5kIGludGVncml0eSBhbmQgYWxsb3dzIG8gZW5hYmxlIGV4dHJhIGZlYXR1cmVzIG9uIEFjcm9iYXQgUmVhZGVyLgoJICogVG8gY3JlYXRlIHNlbGYtc2lnbmVkIHNpZ25hdHVyZTogb3BlbnNzbCByZXEgLXg1MDkgLW5vZGVzIC1kYXlzIDM2NTAwMCAtbmV3a2V5IHJzYToxMDI0IC1rZXlvdXQgdGNwZGYuY3J0IC1vdXQgdGNwZGYuY3J0CgkgKiBUbyBleHBvcnQgY3J0IHRvIHAxMjogb3BlbnNzbCBwa2NzMTIgLWV4cG9ydCAtaW4gdGNwZGYuY3J0IC1vdXQgdGNwZGYucDEyCgkgKiBUbyBjb252ZXJ0IHBmeCBjZXJ0aWZpY2F0ZSB0byBwZW06IG9wZW5zc2wgcGtjczEyIC1pbiB0Y3BkZi5wZnggLW91dCB0Y3BkZi5jcnQgLW5vZGVzCgkgKiBAcGFyYW0gJHNpZ25pbmdfY2VydCAobWl4ZWQpIHNpZ25pbmcgY2VydGlmaWNhdGUgKHN0cmluZyBvciBmaWxlbmFtZSBwcmVmaXhlZCB3aXRoICdmaWxlOi8vJykKCSAqIEBwYXJhbSAkcHJpdmF0ZV9rZXkgKG1peGVkKSBwcml2YXRlIGtleSAoc3RyaW5nIG9yIGZpbGVuYW1lIHByZWZpeGVkIHdpdGggJ2ZpbGU6Ly8nKQoJICogQHBhcmFtICRwcml2YXRlX2tleV9wYXNzd29yZCAoc3RyaW5nKSBwYXNzd29yZAoJICogQHBhcmFtICRleHRyYWNlcnRzIChzdHJpbmcpIHNwZWNpZmllcyB0aGUgbmFtZSBvZiBhIGZpbGUgY29udGFpbmluZyBhIGJ1bmNoIG9mIGV4dHJhIGNlcnRpZmljYXRlcyB0byBpbmNsdWRlIGluIHRoZSBzaWduYXR1cmUgd2hpY2ggY2FuIGZvciBleGFtcGxlIGJlIHVzZWQgdG8gaGVscCB0aGUgcmVjaXBpZW50IHRvIHZlcmlmeSB0aGUgY2VydGlmaWNhdGUgdGhhdCB5b3UgdXNlZC4KCSAqIEBwYXJhbSAkY2VydF90eXBlIChpbnQpIFRoZSBhY2Nlc3MgcGVybWlzc2lvbnMgZ3JhbnRlZCBmb3IgdGhpcyBkb2N1bWVudC4gVmFsaWQgdmFsdWVzIHNoYWxsIGJlOiAxID0gTm8gY2hhbmdlcyB0byB0aGUgZG9jdW1lbnQgc2hhbGwgYmUgcGVybWl0dGVkOyBhbnkgY2hhbmdlIHRvIHRoZSBkb2N1bWVudCBzaGFsbCBpbnZhbGlkYXRlIHRoZSBzaWduYXR1cmU7IDIgPSBQZXJtaXR0ZWQgY2hhbmdlcyBzaGFsbCBiZSBmaWxsaW5nIGluIGZvcm1zLCBpbnN0YW50aWF0aW5nIHBhZ2UgdGVtcGxhdGVzLCBhbmQgc2lnbmluZzsgb3RoZXIgY2hhbmdlcyBzaGFsbCBpbnZhbGlkYXRlIHRoZSBzaWduYXR1cmU7IDMgPSBQZXJtaXR0ZWQgY2hhbmdlcyBzaGFsbCBiZSB0aGUgc2FtZSBhcyBmb3IgMiwgYXMgd2VsbCBhcyBhbm5vdGF0aW9uIGNyZWF0aW9uLCBkZWxldGlvbiwgYW5kIG1vZGlmaWNhdGlvbjsgb3RoZXIgY2hhbmdlcyBzaGFsbCBpbnZhbGlkYXRlIHRoZSBzaWduYXR1cmUuCgkgKiBAcGFyYW0gJGluZm8gKGFycmF5KSBhcnJheSBvZiBvcHRpb24gaW5mb3JtYXRpb246IE5hbWUsIExvY2F0aW9uLCBSZWFzb24sIENvbnRhY3RJbmZvLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjYuMDA1ICgyMDA5LTA0LTI0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0U2lnbmF0dXJlKCRzaWduaW5nX2NlcnQ9JycsICRwcml2YXRlX2tleT0nJywgJHByaXZhdGVfa2V5X3Bhc3N3b3JkPScnLCAkZXh0cmFjZXJ0cz0nJywgJGNlcnRfdHlwZT0yLCAkaW5mbz1hcnJheSgpKSB7CgkJLy8gdG8gY3JlYXRlIHNlbGYtc2lnbmVkIHNpZ25hdHVyZTogb3BlbnNzbCByZXEgLXg1MDkgLW5vZGVzIC1kYXlzIDM2NTAwMCAtbmV3a2V5IHJzYToxMDI0IC1rZXlvdXQgdGNwZGYuY3J0IC1vdXQgdGNwZGYuY3J0CgkJLy8gdG8gZXhwb3J0IGNydCB0byBwMTI6IG9wZW5zc2wgcGtjczEyIC1leHBvcnQgLWluIHRjcGRmLmNydCAtb3V0IHRjcGRmLnAxMgoJCS8vIHRvIGNvbnZlcnQgcGZ4IGNlcnRpZmljYXRlIHRvIHBlbTogb3BlbnNzbAoJCS8vICAgICBPcGVuU1NMPiBwa2NzMTIgLWluIDxjZXJ0LnBmeD4gLW91dCA8Y2VydC5jcnQ+IC1ub2RlcwoJCSR0aGlzLT5zaWduID0gdHJ1ZTsKCQkrKyR0aGlzLT5uOwoJCSR0aGlzLT5zaWdfb2JqX2lkID0gJHRoaXMtPm47IC8vIHNpZ25hdHVyZSB3aWRnZXQKCQkrKyR0aGlzLT5uOyAvLyBzaWduYXR1cmUgb2JqZWN0ICgkdGhpcy0+c2lnX29ial9pZCArIDEpCgkJJHRoaXMtPnNpZ25hdHVyZV9kYXRhID0gYXJyYXkoKTsKCQlpZiAoc3RybGVuKCRzaWduaW5nX2NlcnQpID09IDApIHsKCQkJJHRoaXMtPkVycm9yKCdQbGVhc2UgcHJvdmlkZSBhIGNlcnRpZmljYXRlIGZpbGUgYW5kIHBhc3N3b3JkIScpOwoJCX0KCQlpZiAoc3RybGVuKCRwcml2YXRlX2tleSkgPT0gMCkgewoJCQkkcHJpdmF0ZV9rZXkgPSAkc2lnbmluZ19jZXJ0OwoJCX0KCQkkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ3NpZ25jZXJ0J10gPSAkc2lnbmluZ19jZXJ0OwoJCSR0aGlzLT5zaWduYXR1cmVfZGF0YVsncHJpdmtleSddID0gJHByaXZhdGVfa2V5OwoJCSR0aGlzLT5zaWduYXR1cmVfZGF0YVsncGFzc3dvcmQnXSA9ICRwcml2YXRlX2tleV9wYXNzd29yZDsKCQkkdGhpcy0+c2lnbmF0dXJlX2RhdGFbJ2V4dHJhY2VydHMnXSA9ICRleHRyYWNlcnRzOwoJCSR0aGlzLT5zaWduYXR1cmVfZGF0YVsnY2VydF90eXBlJ10gPSAkY2VydF90eXBlOwoJCSR0aGlzLT5zaWduYXR1cmVfZGF0YVsnaW5mbyddID0gJGluZm87Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGRpZ2l0YWwgc2lnbmF0dXJlIGFwcGVhcmFuY2UgKGEgY2xpY2NhYmxlIHJlY3RhbmdsZSBhcmVhIHRvIGdldCBzaWduYXR1cmUgcHJvcGVydGllcykKCSAqIEBwYXJhbSAkeCAoZmxvYXQpIEFic2Npc3NhIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lci4KCSAqIEBwYXJhbSAkeSAoZmxvYXQpIE9yZGluYXRlIG9mIHRoZSB1cHBlci1sZWZ0IGNvcm5lci4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIFdpZHRoIG9mIHRoZSBzaWduYXR1cmUgYXJlYS4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodCBvZiB0aGUgc2lnbmF0dXJlIGFyZWEuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgb3B0aW9uIHBhZ2UgbnVtYmVyIChpZiA8IDAgdGhlIGN1cnJlbnQgcGFnZSBpcyB1c2VkKS4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBOYW1lIG9mIHRoZSBzaWduYXR1cmUuCgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMy4wMTEgKDIwMTAtMDYtMTcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRTaWduYXR1cmVBcHBlYXJhbmNlKCR4PTAsICR5PTAsICR3PTAsICRoPTAsICRwYWdlPS0xLCAkbmFtZT0nJykgewoJCSR0aGlzLT5zaWduYXR1cmVfYXBwZWFyYW5jZSA9ICR0aGlzLT5nZXRTaWduYXR1cmVBcHBlYXJhbmNlQXJyYXkoJHgsICR5LCAkdywgJGgsICRwYWdlLCAkbmFtZSk7Cgl9CgoJLyoqCgkgKiBBZGQgYW4gZW1wdHkgZGlnaXRhbCBzaWduYXR1cmUgYXBwZWFyYW5jZSAoYSBjbGljY2FibGUgcmVjdGFuZ2xlIGFyZWEgdG8gZ2V0IHNpZ25hdHVyZSBwcm9wZXJ0aWVzKQoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIHNpZ25hdHVyZSBhcmVhLgoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0IG9mIHRoZSBzaWduYXR1cmUgYXJlYS4KCSAqIEBwYXJhbSAkcGFnZSAoaW50KSBvcHRpb24gcGFnZSBudW1iZXIgKGlmIDwgMCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQpLgoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIE5hbWUgb2YgdGhlIHNpZ25hdHVyZS4KCSAqIEBwdWJsaWMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS45LjEwMSAoMjAxMS0wNy0wNikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZEVtcHR5U2lnbmF0dXJlQXBwZWFyYW5jZSgkeD0wLCAkeT0wLCAkdz0wLCAkaD0wLCAkcGFnZT0tMSwgJG5hbWU9JycpIHsKCQkrKyR0aGlzLT5uOwoJCSR0aGlzLT5lbXB0eV9zaWduYXR1cmVfYXBwZWFyYW5jZVtdID0gYXJyYXkoJ29iamlkJyA9PiAkdGhpcy0+bikgKyAkdGhpcy0+Z2V0U2lnbmF0dXJlQXBwZWFyYW5jZUFycmF5KCR4LCAkeSwgJHcsICRoLCAkcGFnZSwgJG5hbWUpOwoJfQoKCS8qKgoJICogR2V0IHRoZSBhcnJheSB0aGF0IGRlZmluZXMgdGhlIHNpZ25hdHVyZSBhcHBlYXJhbmNlIChwYWdlIGFuZCByZWN0YW5nbGUgY29vcmRpbmF0ZXMpLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIHNpZ25hdHVyZSBhcmVhLgoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0IG9mIHRoZSBzaWduYXR1cmUgYXJlYS4KCSAqIEBwYXJhbSAkcGFnZSAoaW50KSBvcHRpb24gcGFnZSBudW1iZXIgKGlmIDwgMCB0aGUgY3VycmVudCBwYWdlIGlzIHVzZWQpLgoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIE5hbWUgb2YgdGhlIHNpZ25hdHVyZS4KCSAqIEByZXR1cm4gKGFycmF5KSBBcnJheSBkZWZpbmluZyBwYWdlIGFuZCByZWN0YW5nbGUgY29vcmRpbmF0ZXMgb2Ygc2lnbmF0dXJlIGFwcGVhcmFuY2UuCgkgKiBAcHJvdGVjdGVkCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuOS4xMDEgKDIwMTEtMDctMDYpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRTaWduYXR1cmVBcHBlYXJhbmNlQXJyYXkoJHg9MCwgJHk9MCwgJHc9MCwgJGg9MCwgJHBhZ2U9LTEsICRuYW1lPScnKSB7CgkJJHNpZ2FwcCA9IGFycmF5KCk7CgkJaWYgKCgkcGFnZSA8IDEpIE9SICgkcGFnZSA+ICR0aGlzLT5udW1wYWdlcykpIHsKCQkJJHNpZ2FwcFsncGFnZSddID0gJHRoaXMtPnBhZ2U7CgkJfSBlbHNlIHsKCQkJJHNpZ2FwcFsncGFnZSddID0gaW50dmFsKCRwYWdlKTsKCQl9CgkJaWYgKGVtcHR5KCRuYW1lKSkgewoJCQkkc2lnYXBwWyduYW1lJ10gPSAnU2lnbmF0dXJlJzsKCQl9IGVsc2UgewoJCQkkc2lnYXBwWyduYW1lJ10gPSAkbmFtZTsKCQl9CgkJJGEgPSAkeCAqICR0aGlzLT5rOwoJCSRiID0gJHRoaXMtPnBhZ2VkaW1bKCRzaWdhcHBbJ3BhZ2UnXSldWydoJ10gLSAoKCR5ICsgJGgpICogJHRoaXMtPmspOwoJCSRjID0gJHcgKiAkdGhpcy0+azsKCQkkZCA9ICRoICogJHRoaXMtPms7CgkJJHNpZ2FwcFsncmVjdCddID0gc3ByaW50ZignJUYgJUYgJUYgJUYnLCAkYSwgJGIsICgkYSArICRjKSwgKCRiICsgJGQpKTsKCQlyZXR1cm4gJHNpZ2FwcDsKCX0KCgkvKioKCSAqIENyZWF0ZSBhIG5ldyBwYWdlIGdyb3VwLgoJICogTk9URTogY2FsbCB0aGlzIGZ1bmN0aW9uIGJlZm9yZSBjYWxsaW5nIEFkZFBhZ2UoKQoJICogQHBhcmFtICRwYWdlIChpbnQpIHN0YXJ0aW5nIGdyb3VwIHBhZ2UgKGxlYXZlIGVtcHR5IGZvciBuZXh0IHBhZ2UpLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzdGFydFBhZ2VHcm91cCgkcGFnZT0nJykgewoJCWlmIChlbXB0eSgkcGFnZSkpIHsKCQkJJHBhZ2UgPSAkdGhpcy0+cGFnZSArIDE7CgkJfQoJCSR0aGlzLT5uZXdwYWdlZ3JvdXBbJHBhZ2VdID0gc2l6ZW9mKCR0aGlzLT5uZXdwYWdlZ3JvdXApICsgMTsKCX0KCgkvKioKCSAqIFNldCB0aGUgc3RhcnRpbmcgcGFnZSBudW1iZXIuCgkgKiBAcGFyYW0gJG51bSAoaW50KSBTdGFydGluZyBwYWdlIG51bWJlci4KCSAqIEBzaW5jZSA1LjkuMDkzICgyMDExLTA2LTE2KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0U3RhcnRpbmdQYWdlTnVtYmVyKCRudW09MSkgewoJCSR0aGlzLT5zdGFydGluZ19wYWdlX251bWJlciA9IG1heCgwLCBpbnR2YWwoJG51bSkpOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgc3RyaW5nIGFsaWFzIHVzZWQgcmlnaHQgYWxpZ24gcGFnZSBudW1iZXJzLgoJICogSWYgdGhlIGN1cnJlbnQgZm9udCBpcyB1bmljb2RlIHR5cGUsIHRoZSByZXR1cm5lZCBzdHJpbmcgd2lsIGNvbnRhaW4gYW4gYWRkaXRpb25hbCBvcGVuIGN1cmx5IGJyYWNlLgoJICogQHJldHVybiBzdHJpbmcKCSAqIEBzaW5jZSA1LjkuMDk5ICgyMDExLTA2LTI3KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxpYXNSaWdodFNoaWZ0KCkgewoJCS8vIGNhbGN1bGF0ZSBhcHJveGltYXRpdmVseSB0aGUgcmF0aW8gYmV0d2VlbiB3aWR0aHMgb2YgYWxpYXNlcyBhbmQgcmVwbGFjZW1lbnRzLgoJCSRyZWYgPSAneycuVENQREZfU1RBVElDOjokYWxpYXNfcmlnaHRfc2hpZnQuJ317Jy5UQ1BERl9TVEFUSUM6OiRhbGlhc190b3RfcGFnZXMuJ317Jy5UQ1BERl9TVEFUSUM6OiRhbGlhc19udW1fcGFnZS4nfSc7CgkJJHJlcCA9IHN0cl9yZXBlYXQoJyAnLCAkdGhpcy0+R2V0TnVtQ2hhcnMoJHJlZikpOwoJCSR3cmVwID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRyZXApOwoJCWlmICgkd3JlcCA+IDApIHsKCQkJJHdkaWZmID0gbWF4KDEsICgkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHJlZikgLyAkd3JlcCkpOwoJCX0gZWxzZSB7CgkJCSR3ZGlmZiA9IDE7CgkJfQoJCSRzZGlmZiA9IHNwcmludGYoJyVGJywgJHdkaWZmKTsKCQkkYWxpYXMgPSBUQ1BERl9TVEFUSUM6OiRhbGlhc19yaWdodF9zaGlmdC4kc2RpZmYuJ30nOwoJCWlmICgkdGhpcy0+aXNVbmljb2RlRm9udCgpKSB7CgkJCSRhbGlhcyA9ICd7Jy4kYWxpYXM7CgkJfQoJCXJldHVybiAkYWxpYXM7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgYWxpYXMgdXNlZCBmb3IgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcy4KCSAqIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgdW5pY29kZSB0eXBlLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIHN1cnJvdW5kZWQgYnkgYWRkaXRpb25hbCBjdXJseSBicmFjZXMuCgkgKiBUaGlzIGFsaWFzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHRvdGFsIG51bWJlciBvZiBwYWdlcyBpbiB0aGUgZG9jdW1lbnQuCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHNpbmNlIDQuMC4wMTggKDIwMDgtMDgtMDgpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRBbGlhc05iUGFnZXMoKSB7CgkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkpIHsKCQkJcmV0dXJuICd7Jy5UQ1BERl9TVEFUSUM6OiRhbGlhc190b3RfcGFnZXMuJ30nOwoJCX0KCQlyZXR1cm4gVENQREZfU1RBVElDOjokYWxpYXNfdG90X3BhZ2VzOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgc3RyaW5nIGFsaWFzIHVzZWQgZm9yIHRoZSBwYWdlIG51bWJlci4KCSAqIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgdW5pY29kZSB0eXBlLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIHN1cnJvdW5kZWQgYnkgYWRkaXRpb25hbCBjdXJseSBicmFjZXMuCgkgKiBUaGlzIGFsaWFzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHBhZ2UgbnVtYmVyLgoJICogQHJldHVybiBzdHJpbmcKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA5LTAxLTAyKQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxpYXNOdW1QYWdlKCkgewoJCWlmICgkdGhpcy0+aXNVbmljb2RlRm9udCgpKSB7CgkJCXJldHVybiAneycuVENQREZfU1RBVElDOjokYWxpYXNfbnVtX3BhZ2UuJ30nOwoJCX0KCQlyZXR1cm4gVENQREZfU1RBVElDOjokYWxpYXNfbnVtX3BhZ2U7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGFsaWFzIGZvciB0aGUgdG90YWwgbnVtYmVyIG9mIHBhZ2VzIGluIHRoZSBjdXJyZW50IHBhZ2UgZ3JvdXAuCgkgKiBJZiB0aGUgY3VycmVudCBmb250IGlzIHVuaWNvZGUgdHlwZSwgdGhlIHJldHVybmVkIHN0cmluZyBpcyBzdXJyb3VuZGVkIGJ5IGFkZGl0aW9uYWwgY3VybHkgYnJhY2VzLgoJICogVGhpcyBhbGlhcyB3aWxsIGJlIHJlcGxhY2VkIGJ5IHRoZSB0b3RhbCBudW1iZXIgb2YgcGFnZXMgaW4gdGhpcyBncm91cC4KCSAqIEByZXR1cm4gYWxpYXMgb2YgdGhlIGN1cnJlbnQgcGFnZSBncm91cAoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlR3JvdXBBbGlhcygpIHsKCQlpZiAoJHRoaXMtPmlzVW5pY29kZUZvbnQoKSkgewoJCQlyZXR1cm4gJ3snLlRDUERGX1NUQVRJQzo6JGFsaWFzX2dyb3VwX3RvdF9wYWdlcy4nfSc7CgkJfQoJCXJldHVybiBUQ1BERl9TVEFUSUM6OiRhbGlhc19ncm91cF90b3RfcGFnZXM7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGFsaWFzIGZvciB0aGUgcGFnZSBudW1iZXIgb24gdGhlIGN1cnJlbnQgcGFnZSBncm91cC4KCSAqIElmIHRoZSBjdXJyZW50IGZvbnQgaXMgdW5pY29kZSB0eXBlLCB0aGUgcmV0dXJuZWQgc3RyaW5nIGlzIHN1cnJvdW5kZWQgYnkgYWRkaXRpb25hbCBjdXJseSBicmFjZXMuCgkgKiBUaGlzIGFsaWFzIHdpbGwgYmUgcmVwbGFjZWQgYnkgdGhlIHBhZ2UgbnVtYmVyIChyZWxhdGl2ZSB0byB0aGUgYmVsb25naW5nIGdyb3VwKS4KCSAqIEByZXR1cm4gYWxpYXMgb2YgdGhlIGN1cnJlbnQgcGFnZSBncm91cAoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuNS4wMDAgKDIwMDktMDEtMDIpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlTnVtR3JvdXBBbGlhcygpIHsKCQlpZiAoJHRoaXMtPmlzVW5pY29kZUZvbnQoKSkgewoJCQlyZXR1cm4gJ3snLlRDUERGX1NUQVRJQzo6JGFsaWFzX2dyb3VwX251bV9wYWdlLid9JzsKCQl9CgkJcmV0dXJuIFRDUERGX1NUQVRJQzo6JGFsaWFzX2dyb3VwX251bV9wYWdlOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBjdXJyZW50IHBhZ2UgaW4gdGhlIGdyb3VwLgoJICogQHJldHVybiBjdXJyZW50IHBhZ2UgaW4gdGhlIGdyb3VwCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMy4wLjAwMCAoMjAwOC0wMy0yNykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEdyb3VwUGFnZU5vKCkgewoJCXJldHVybiAkdGhpcy0+cGFnZWdyb3Vwc1skdGhpcy0+Y3VycnBhZ2Vncm91cF07Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGdyb3VwIHBhZ2UgbnVtYmVyIGZvcm1hdHRlZCBhcyBhIHN0cmluZy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjMuMDAzICgyMDA4LTExLTE4KQoJICogQHNlZSBQYW5lTm8oKSwgZm9ybWF0UGFnZU51bWJlcigpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRHcm91cFBhZ2VOb0Zvcm1hdHRlZCgpIHsKCQlyZXR1cm4gVENQREZfU1RBVElDOjpmb3JtYXRQYWdlTnVtYmVyKCR0aGlzLT5nZXRHcm91cFBhZ2VObygpKTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGN1cnJlbnQgcGFnZSBudW1iZXIgZm9ybWF0dGVkIGFzIGEgc3RyaW5nLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMi4wMDUgKDIwMDgtMTEtMDYpCgkgKiBAc2VlIFBhbmVObygpLCBmb3JtYXRQYWdlTnVtYmVyKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFBhZ2VOb0Zvcm1hdHRlZCgpIHsKCQlyZXR1cm4gVENQREZfU1RBVElDOjpmb3JtYXRQYWdlTnVtYmVyKCR0aGlzLT5QYWdlTm8oKSk7Cgl9CgoJLyoqCgkgKiBQdXQgcGRmIGxheWVycy4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjAuMDAwICgyMDA4LTAzLTI3KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dG9jZygpIHsKCQlpZiAoZW1wdHkoJHRoaXMtPnBkZmxheWVycykpIHsKCQkJcmV0dXJuOwoJCX0KCQlmb3JlYWNoICgkdGhpcy0+cGRmbGF5ZXJzIGFzICRrZXkgPT4gJGxheWVyKSB7CgkJCSAkdGhpcy0+cGRmbGF5ZXJzWyRrZXldWydvYmppZCddID0gJHRoaXMtPl9uZXdvYmooKTsKCQkJICRvdXQgPSAnPDwgL1R5cGUgL09DRyc7CgkJCSAkb3V0IC49ICcgL05hbWUgJy4kdGhpcy0+X3RleHRzdHJpbmcoJGxheWVyWyduYW1lJ10sICR0aGlzLT5wZGZsYXllcnNbJGtleV1bJ29iamlkJ10pOwoJCQkgJG91dCAuPSAnIC9Vc2FnZSA8PCc7CgkJCSBpZiAoaXNzZXQoJGxheWVyWydwcmludCddKSBBTkQgKCRsYXllclsncHJpbnQnXSAhPT0gTlVMTCkpIHsKCQkJCSRvdXQgLj0gJyAvUHJpbnQgPDwvUHJpbnRTdGF0ZSAvJy4oJGxheWVyWydwcmludCddPydPTic6J09GRicpLic+Pic7CgkJCSB9CgkJCSAkb3V0IC49ICcgL1ZpZXcgPDwvVmlld1N0YXRlIC8nLigkbGF5ZXJbJ3ZpZXcnXT8nT04nOidPRkYnKS4nPj4nOwoJCQkgJG91dCAuPSAnID4+ID4+JzsKCQkJICRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJICR0aGlzLT5fb3V0KCRvdXQpOwoJCX0KCX0KCgkvKioKCSAqIFN0YXJ0IGEgbmV3IHBkZiBsYXllci4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBMYXllciBuYW1lIChvbmx5IGEteiBsZXR0ZXJzIGFuZCBudW1iZXJzKS4gTGVhdmUgZW1wdHkgZm9yIGF1dG9tYXRpYyBuYW1lLgoJICogQHBhcmFtICRwcmludCAoYm9vbGVhbnxudWxsKSBTZXQgdG8gVFJVRSB0byBwcmludCB0aGlzIGxheWVyLCBGQUxTRSB0byBub3QgcHJpbnQgYW5kIE5VTEwgdG8gbm90IHNldCB0aGlzIG9wdGlvbgoJICogQHBhcmFtICR2aWV3IChib29sZWFuKSBTZXQgdG8gdHJ1ZSB0byB2aWV3IHRoaXMgbGF5ZXIuCgkgKiBAcGFyYW0gJGxvY2sgKGJvb2xlYW4pIElmIHRydWUgbG9jayB0aGUgbGF5ZXIKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMTAyICgyMDExLTA3LTEzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc3RhcnRMYXllcigkbmFtZT0nJywgJHByaW50PXRydWUsICR2aWV3PXRydWUsICRsb2NrPXRydWUpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQkkbGF5ZXIgPSBzcHJpbnRmKCdMWVIlMDNkJywgKGNvdW50KCR0aGlzLT5wZGZsYXllcnMpICsgMSkpOwoJCWlmIChlbXB0eSgkbmFtZSkpIHsKCQkJJG5hbWUgPSAkbGF5ZXI7CgkJfSBlbHNlIHsKCQkJJG5hbWUgPSBwcmVnX3JlcGxhY2UoJy9bXmEtekEtWjAtOV9cLV0vJywgJycsICRuYW1lKTsKCQl9CgkJJHRoaXMtPnBkZmxheWVyc1tdID0gYXJyYXkoJ2xheWVyJyA9PiAkbGF5ZXIsICduYW1lJyA9PiAkbmFtZSwgJ3ByaW50JyA9PiAkcHJpbnQsICd2aWV3JyA9PiAkdmlldywgJ2xvY2snID0+ICRsb2NrKTsKCQkkdGhpcy0+b3Blbk1hcmtlZENvbnRlbnQgPSB0cnVlOwoJCSR0aGlzLT5fb3V0KCcvT0MgLycuJGxheWVyLicgQkRDJyk7Cgl9CgoJLyoqCgkgKiBFbmQgdGhlIGN1cnJlbnQgUERGIGxheWVyLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xMDIgKDIwMTEtMDctMTMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBlbmRMYXllcigpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJHRoaXMtPm9wZW5NYXJrZWRDb250ZW50KSB7CgkJCS8vIGNsb3NlIGV4aXN0aW5nIG9wZW4gbWFya2VkLWNvbnRlbnQgbGF5ZXIKCQkJJHRoaXMtPl9vdXQoJ0VNQycpOwoJCQkkdGhpcy0+b3Blbk1hcmtlZENvbnRlbnQgPSBmYWxzZTsKCQl9Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHN1Y2Nlc3NpdmUgZWxlbWVudHMuCgkgKiBUaGlzIGNhbiBiZSB1c2VmdWwsIGZvciBpbnN0YW5jZSwgdG8gcHV0IGEgYmFja2dyb3VuZAoJICogaW1hZ2Ugb3IgY29sb3IgdGhhdCB3aWxsIHNob3cgb24gc2NyZWVuIGJ1dCB3b24ndCBwcmludC4KCSAqIEBwYXJhbSAkdiAoc3RyaW5nKSB2aXNpYmlsaXR5IG1vZGUuIExlZ2FsIHZhbHVlcyBhcmU6IGFsbCwgcHJpbnQsIHNjcmVlbiBvciB2aWV3LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRWaXNpYmlsaXR5KCR2KSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCXJldHVybjsKCQl9CgkJJHRoaXMtPmVuZExheWVyKCk7CgkJc3dpdGNoKCR2KSB7CgkJCWNhc2UgJ3ByaW50JzogewoJCQkJJHRoaXMtPnN0YXJ0TGF5ZXIoJ1ByaW50JywgdHJ1ZSwgZmFsc2UpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAndmlldyc6CgkJCWNhc2UgJ3NjcmVlbic6IHsKCQkJCSR0aGlzLT5zdGFydExheWVyKCdWaWV3JywgZmFsc2UsIHRydWUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYWxsJzogewoJCQkJJHRoaXMtPl9vdXQoJycpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJHRoaXMtPkVycm9yKCdJbmNvcnJlY3QgdmlzaWJpbGl0eTogJy4kdik7CgkJCQlicmVhazsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIEFkZCB0cmFuc3BhcmVuY3kgcGFyYW1ldGVycyB0byB0aGUgY3VycmVudCBleHRnc3RhdGUKCSAqIEBwYXJhbSAkcGFybXMgKGFycmF5KSBwYXJhbWV0ZXJzCgkgKiBAcmV0dXJuIHRoZSBudW1iZXIgb2YgZXh0Z3N0YXRlcwoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBhZGRFeHRHU3RhdGUoJHBhcm1zKSB7CgkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJLy8gdHJhbnNwYXJlbmNpZXMgYXJlIG5vdCBhbGxvd2VkIGluIFBERi9BIG1vZGUKCQkJcmV0dXJuOwoJCX0KCQkvLyBjaGVjayBpZiB0aGlzIEV4dEdTdGF0ZSBhbHJlYWR5IGV4aXN0CgkJZm9yZWFjaCAoJHRoaXMtPmV4dGdzdGF0ZXMgYXMgJGkgPT4gJGV4dCkgewoJCQlpZiAoJGV4dFsncGFybXMnXSA9PSAkcGFybXMpIHsKCQkJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydleHRnc3RhdGVzJ11bJGldID0gJGV4dDsKCQkJCX0KCQkJCS8vIHJldHVybiByZWZlcmVuY2UgdG8gZXhpc3RpbmcgRXh0R1N0YXRlCgkJCQlyZXR1cm4gJGk7CgkJCX0KCQl9CgkJJG4gPSAoY291bnQoJHRoaXMtPmV4dGdzdGF0ZXMpICsgMSk7CgkJJHRoaXMtPmV4dGdzdGF0ZXNbJG5dID0gYXJyYXkoJ3Bhcm1zJyA9PiAkcGFybXMpOwoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2V4dGdzdGF0ZXMnXVskbl0gPSAkdGhpcy0+ZXh0Z3N0YXRlc1skbl07CgkJfQoJCXJldHVybiAkbjsKCX0KCgkvKioKCSAqIEFkZCBhbiBleHRnc3RhdGUKCSAqIEBwYXJhbSAkZ3MgKGFycmF5KSBleHRnc3RhdGUKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjAuMDAwICgyMDA4LTAzLTI3KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0RXh0R1N0YXRlKCRncykgewoJCWlmICgkdGhpcy0+cGRmYV9tb2RlIE9SICgkdGhpcy0+c3RhdGUgIT0gMikpIHsKCQkJLy8gdHJhbnNwYXJlbmN5IGlzIG5vdCBhbGxvd2VkIGluIFBERi9BIG1vZGUKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+X291dChzcHJpbnRmKCcvR1MlZCBncycsICRncykpOwoJfQoKCS8qKgoJICogUHV0IGV4dGdzdGF0ZXMgZm9yIG9iamVjdCB0cmFuc3BhcmVuY3kKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjAuMDAwICgyMDA4LTAzLTI3KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX3B1dGV4dGdzdGF0ZXMoKSB7CgkJZm9yZWFjaCAoJHRoaXMtPmV4dGdzdGF0ZXMgYXMgJGkgPT4gJGV4dCkgewoJCQkkdGhpcy0+ZXh0Z3N0YXRlc1skaV1bJ24nXSA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCSRvdXQgPSAnPDwgL1R5cGUgL0V4dEdTdGF0ZSc7CgkJCWZvcmVhY2ggKCRleHRbJ3Bhcm1zJ10gYXMgJGsgPT4gJHYpIHsKCQkJCWlmIChpc19mbG9hdCgkdikpIHsKCQkJCQkkdiA9IHNwcmludGYoJyVGJywgJHYpOwoJCQkJfSBlbHNlaWYgKCR2ID09PSB0cnVlKSB7CgkJCQkJJHYgPSAndHJ1ZSc7CgkJCQl9IGVsc2VpZiAoJHYgPT09IGZhbHNlKSB7CgkJCQkJJHYgPSAnZmFsc2UnOwoJCQkJfQoJCQkJJG91dCAuPSAnIC8nLiRrLicgJy4kdjsKCQkJfQoJCQkkb3V0IC49ICcgPj4nOwoJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCX0KCX0KCgkvKioKCSAqIFNldCBvdmVycHJpbnQgbW9kZSBmb3Igc3Ryb2tpbmcgKE9QKSBhbmQgbm9uLXN0cm9raW5nIChvcCkgcGFpbnRpbmcgb3BlcmF0aW9ucy4KCSAqIChDaGVjayB0aGUgIkVudHJpZXMgaW4gYSBHcmFwaGljcyBTdGF0ZSBQYXJhbWV0ZXIgRGljdGlvbmFyeSIgb24gUERGIDMyMDAwLTE6MjAwOCkuCgkgKiBAcGFyYW0gJHN0cm9raW5nIChib29sZWFuKSBJZiB0cnVlIGFwcGx5IG92ZXJwcmludCBmb3Igc3Ryb2tpbmcgb3BlcmF0aW9ucy4KCSAqIEBwYXJhbSAkbm9uc3Ryb2tpbmcgKGJvb2xlYW4pIElmIHRydWUgYXBwbHkgb3ZlcnByaW50IGZvciBwYWludGluZyBvcGVyYXRpb25zIG90aGVyIHRoYW4gc3Ryb2tpbmcuCgkgKiBAcGFyYW0gJG1vZGUgKGludGVnZXIpIE92ZXJwcmludCBtb2RlOiAoMCA9IGVhY2ggc291cmNlIGNvbG91ciBjb21wb25lbnQgdmFsdWUgcmVwbGFjZXMgdGhlIHZhbHVlIHByZXZpb3VzbHkgcGFpbnRlZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgZGV2aWNlIGNvbG9yYW50OyAxID0gYSB0aW50IHZhbHVlIG9mIDAuMCBmb3IgYSBzb3VyY2UgY29sb3VyIGNvbXBvbmVudCBzaGFsbCBsZWF2ZSB0aGUgY29ycmVzcG9uZGluZyBjb21wb25lbnQgb2YgdGhlIHByZXZpb3VzbHkgcGFpbnRlZCBjb2xvdXIgdW5jaGFuZ2VkKS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMTUyICgyMDEyLTAzLTIzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0T3ZlcnByaW50KCRzdHJva2luZz10cnVlLCAkbm9uc3Ryb2tpbmc9JycsICRtb2RlPTApIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQkkc3Ryb2tpbmcgPSAkc3Ryb2tpbmcgPyB0cnVlIDogZmFsc2U7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRub25zdHJva2luZykpIHsKCQkJLy8gZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0CgkJCSRub25zdHJva2luZyA9ICRzdHJva2luZzsKCQl9IGVsc2UgewoJCQkkbm9uc3Ryb2tpbmcgPSAkbm9uc3Ryb2tpbmcgPyB0cnVlIDogZmFsc2U7CgkJfQoJCWlmICgoJG1vZGUgIT0gMCkgQU5EICgkbW9kZSAhPSAxKSkgewoJCQkkbW9kZSA9IDA7CgkJfQoJCSR0aGlzLT5vdmVycHJpbnQgPSBhcnJheSgnT1AnID0+ICRzdHJva2luZywgJ29wJyA9PiAkbm9uc3Ryb2tpbmcsICdPUE0nID0+ICRtb2RlKTsKCQkkZ3MgPSAkdGhpcy0+YWRkRXh0R1N0YXRlKCR0aGlzLT5vdmVycHJpbnQpOwoJCSR0aGlzLT5zZXRFeHRHU3RhdGUoJGdzKTsKCX0KCgkvKioKCSAqIEdldCB0aGUgb3ZlcnByaW50IG1vZGUgYXJyYXkgKE9QLCBvcCwgT1BNKS4KCSAqIChDaGVjayB0aGUgIkVudHJpZXMgaW4gYSBHcmFwaGljcyBTdGF0ZSBQYXJhbWV0ZXIgRGljdGlvbmFyeSIgb24gUERGIDMyMDAwLTE6MjAwOCkuCgkgKiBAcmV0dXJuIGFycmF5LgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4xNTIgKDIwMTItMDMtMjMpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRPdmVycHJpbnQoKSB7CgkJcmV0dXJuICR0aGlzLT5vdmVycHJpbnQ7Cgl9CgoJLyoqCgkgKiBTZXQgYWxwaGEgZm9yIHN0cm9raW5nIChDQSkgYW5kIG5vbi1zdHJva2luZyAoY2EpIG9wZXJhdGlvbnMuCgkgKiBAcGFyYW0gJHN0cm9raW5nIChmbG9hdCkgQWxwaGEgdmFsdWUgZm9yIHN0cm9raW5nIG9wZXJhdGlvbnM6IHJlYWwgdmFsdWUgZnJvbSAwICh0cmFuc3BhcmVudCkgdG8gMSAob3BhcXVlKS4KCSAqIEBwYXJhbSAkYm0gKHN0cmluZykgYmxlbmQgbW9kZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6IE5vcm1hbCwgTXVsdGlwbHksIFNjcmVlbiwgT3ZlcmxheSwgRGFya2VuLCBMaWdodGVuLCBDb2xvckRvZGdlLCBDb2xvckJ1cm4sIEhhcmRMaWdodCwgU29mdExpZ2h0LCBEaWZmZXJlbmNlLCBFeGNsdXNpb24sIEh1ZSwgU2F0dXJhdGlvbiwgQ29sb3IsIEx1bWlub3NpdHkKCSAqIEBwYXJhbSAkbm9uc3Ryb2tpbmcgKGZsb2F0KSBBbHBoYSB2YWx1ZSBmb3Igbm9uLXN0cm9raW5nIG9wZXJhdGlvbnM6IHJlYWwgdmFsdWUgZnJvbSAwICh0cmFuc3BhcmVudCkgdG8gMSAob3BhcXVlKS4KCSAqIEBwYXJhbSAkYWlzIChib29sZWFuKQoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRBbHBoYSgkc3Ryb2tpbmc9MSwgJGJtPSdOb3JtYWwnLCAkbm9uc3Ryb2tpbmc9JycsICRhaXM9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkvLyB0cmFuc3BhcmVuY3kgaXMgbm90IGFsbG93ZWQgaW4gUERGL0EgbW9kZQoJCQlyZXR1cm47CgkJfQoJCSRzdHJva2luZyA9IGZsb2F0dmFsKCRzdHJva2luZyk7CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRub25zdHJva2luZykpIHsKCQkJLy8gZGVmYXVsdCB2YWx1ZSBpZiBub3Qgc2V0CgkJCSRub25zdHJva2luZyA9ICRzdHJva2luZzsKCQl9IGVsc2UgewoJCQkkbm9uc3Ryb2tpbmcgPSBmbG9hdHZhbCgkbm9uc3Ryb2tpbmcpOwoJCX0KCQlpZiAoJGJtWzBdID09ICcvJykgewoJCQkvLyByZW1vdmUgdHJhaWxpbmcgc2xhc2gKCQkJJGJtID0gc3Vic3RyKCRibSwgMSk7CgkJfQoJCWlmICghaW5fYXJyYXkoJGJtLCBhcnJheSgnTm9ybWFsJywgJ011bHRpcGx5JywgJ1NjcmVlbicsICdPdmVybGF5JywgJ0RhcmtlbicsICdMaWdodGVuJywgJ0NvbG9yRG9kZ2UnLCAnQ29sb3JCdXJuJywgJ0hhcmRMaWdodCcsICdTb2Z0TGlnaHQnLCAnRGlmZmVyZW5jZScsICdFeGNsdXNpb24nLCAnSHVlJywgJ1NhdHVyYXRpb24nLCAnQ29sb3InLCAnTHVtaW5vc2l0eScpKSkgewoJCQkkYm0gPSAnTm9ybWFsJzsKCQl9CgkJJGFpcyA9ICRhaXMgPyB0cnVlIDogZmFsc2U7CgkJJHRoaXMtPmFscGhhID0gYXJyYXkoJ0NBJyA9PiAkc3Ryb2tpbmcsICdjYScgPT4gJG5vbnN0cm9raW5nLCAnQk0nID0+ICcvJy4kYm0sICdBSVMnID0+ICRhaXMpOwoJCSRncyA9ICR0aGlzLT5hZGRFeHRHU3RhdGUoJHRoaXMtPmFscGhhKTsKCQkkdGhpcy0+c2V0RXh0R1N0YXRlKCRncyk7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGFscGhhIG1vZGUgYXJyYXkgKENBLCBjYSwgQk0sIEFJUykuCgkgKiAoQ2hlY2sgdGhlICJFbnRyaWVzIGluIGEgR3JhcGhpY3MgU3RhdGUgUGFyYW1ldGVyIERpY3Rpb25hcnkiIG9uIFBERiAzMjAwMC0xOjIwMDgpLgoJICogQHJldHVybiBhcnJheS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMTUyICgyMDEyLTAzLTIzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QWxwaGEoKSB7CgkJcmV0dXJuICR0aGlzLT5hbHBoYTsKCX0KCgkvKioKCSAqIFNldCB0aGUgZGVmYXVsdCBKUEVHIGNvbXByZXNzaW9uIHF1YWxpdHkgKDEtMTAwKQoJICogQHBhcmFtICRxdWFsaXR5IChpbnQpIEpQRUcgcXVhbGl0eSwgaW50ZWdlciBiZXR3ZWVuIDEgYW5kIDEwMAoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMDAgKDIwMDgtMDMtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRKUEVHUXVhbGl0eSgkcXVhbGl0eSkgewoJCWlmICgoJHF1YWxpdHkgPCAxKSBPUiAoJHF1YWxpdHkgPiAxMDApKSB7CgkJCSRxdWFsaXR5ID0gNzU7CgkJfQoJCSR0aGlzLT5qcGVnX3F1YWxpdHkgPSBpbnR2YWwoJHF1YWxpdHkpOwoJfQoKCS8qKgoJICogU2V0IHRoZSBkZWZhdWx0IG51bWJlciBvZiBjb2x1bW5zIGluIGEgcm93IGZvciBIVE1MIHRhYmxlcy4KCSAqIEBwYXJhbSAkY29scyAoaW50KSBudW1iZXIgb2YgY29sdW1ucwoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMC4wMTQgKDIwMDgtMDYtMDQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXREZWZhdWx0VGFibGVDb2x1bW5zKCRjb2xzPTQpIHsKCQkkdGhpcy0+ZGVmYXVsdF90YWJsZV9jb2x1bW5zID0gaW50dmFsKCRjb2xzKTsKCX0KCgkvKioKCSAqIFNldCB0aGUgaGVpZ2h0IG9mIHRoZSBjZWxsIChsaW5lIGhlaWdodCkgcmVzcGVjdCB0aGUgZm9udCBoZWlnaHQuCgkgKiBAcGFyYW0gJGggKGludCkgY2VsbCBwcm9wb3J0aW9uIHJlc3BlY3QgZm9udCBoZWlnaHQgKHR5cGljYWwgdmFsdWUgPSAxLjI1KS4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAzLjAuMDE0ICgyMDA4LTA2LTA0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Q2VsbEhlaWdodFJhdGlvKCRoKSB7CgkJJHRoaXMtPmNlbGxfaGVpZ2h0X3JhdGlvID0gJGg7Cgl9CgoJLyoqCgkgKiByZXR1cm4gdGhlIGhlaWdodCBvZiBjZWxsIHJlcGVjdCBmb250IGhlaWdodC4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjAuMDEyICgyMDA4LTA3LTI0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q2VsbEhlaWdodFJhdGlvKCkgewoJCXJldHVybiAkdGhpcy0+Y2VsbF9oZWlnaHRfcmF0aW87Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIFBERiB2ZXJzaW9uIChjaGVjayBQREYgcmVmZXJlbmNlIGZvciB2YWxpZCB2YWx1ZXMpLgoJICogQHBhcmFtICR2ZXJzaW9uIChzdHJpbmcpIFBERiBkb2N1bWVudCB2ZXJzaW9uLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRQREZWZXJzaW9uKCR2ZXJzaW9uPScxLjcnKSB7CgkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJLy8gUERGL0EgbW9kZQoJCQkkdGhpcy0+UERGVmVyc2lvbiA9ICcxLjQnOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5QREZWZXJzaW9uID0gJHZlcnNpb247CgkJfQoJfQoKCS8qKgoJICogU2V0IHRoZSB2aWV3ZXIgcHJlZmVyZW5jZXMgZGljdGlvbmFyeSBjb250cm9sbGluZyB0aGUgd2F5IHRoZSBkb2N1bWVudCBpcyB0byBiZSBwcmVzZW50ZWQgb24gdGhlIHNjcmVlbiBvciBpbiBwcmludC4KCSAqIChzZWUgU2VjdGlvbiA4LjEgb2YgUERGIHJlZmVyZW5jZSwgIlZpZXdlciBQcmVmZXJlbmNlcyIpLgoJICogPHVsPjxsaT5IaWRlVG9vbGJhciBib29sZWFuIChPcHRpb25hbCkgQSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byBoaWRlIHRoZSB2aWV3ZXIgYXBwbGljYXRpb24ncyB0b29sIGJhcnMgd2hlbiB0aGUgZG9jdW1lbnQgaXMgYWN0aXZlLiBEZWZhdWx0IHZhbHVlOiBmYWxzZS48L2xpPjxsaT5IaWRlTWVudWJhciBib29sZWFuIChPcHRpb25hbCkgQSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byBoaWRlIHRoZSB2aWV3ZXIgYXBwbGljYXRpb24ncyBtZW51IGJhciB3aGVuIHRoZSBkb2N1bWVudCBpcyBhY3RpdmUuIERlZmF1bHQgdmFsdWU6IGZhbHNlLjwvbGk+PGxpPkhpZGVXaW5kb3dVSSBib29sZWFuIChPcHRpb25hbCkgQSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byBoaWRlIHVzZXIgaW50ZXJmYWNlIGVsZW1lbnRzIGluIHRoZSBkb2N1bWVudCdzIHdpbmRvdyAoc3VjaCBhcyBzY3JvbGwgYmFycyBhbmQgbmF2aWdhdGlvbiBjb250cm9scyksIGxlYXZpbmcgb25seSB0aGUgZG9jdW1lbnQncyBjb250ZW50cyBkaXNwbGF5ZWQuIERlZmF1bHQgdmFsdWU6IGZhbHNlLjwvbGk+PGxpPkZpdFdpbmRvdyBib29sZWFuIChPcHRpb25hbCkgQSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byByZXNpemUgdGhlIGRvY3VtZW50J3Mgd2luZG93IHRvIGZpdCB0aGUgc2l6ZSBvZiB0aGUgZmlyc3QgZGlzcGxheWVkIHBhZ2UuIERlZmF1bHQgdmFsdWU6IGZhbHNlLjwvbGk+PGxpPkNlbnRlcldpbmRvdyBib29sZWFuIChPcHRpb25hbCkgQSBmbGFnIHNwZWNpZnlpbmcgd2hldGhlciB0byBwb3NpdGlvbiB0aGUgZG9jdW1lbnQncyB3aW5kb3cgaW4gdGhlIGNlbnRlciBvZiB0aGUgc2NyZWVuLiBEZWZhdWx0IHZhbHVlOiBmYWxzZS48L2xpPjxsaT5EaXNwbGF5RG9jVGl0bGUgYm9vbGVhbiAoT3B0aW9uYWw7IFBERiAxLjQpIEEgZmxhZyBzcGVjaWZ5aW5nIHdoZXRoZXIgdGhlIHdpbmRvdydzIHRpdGxlIGJhciBzaG91bGQgZGlzcGxheSB0aGUgZG9jdW1lbnQgdGl0bGUgdGFrZW4gZnJvbSB0aGUgVGl0bGUgZW50cnkgb2YgdGhlIGRvY3VtZW50IGluZm9ybWF0aW9uIGRpY3Rpb25hcnkgKHNlZSBTZWN0aW9uIDEwLjIuMSwgIkRvY3VtZW50IEluZm9ybWF0aW9uIERpY3Rpb25hcnkiKS4gSWYgZmFsc2UsIHRoZSB0aXRsZSBiYXIgc2hvdWxkIGluc3RlYWQgZGlzcGxheSB0aGUgbmFtZSBvZiB0aGUgUERGIGZpbGUgY29udGFpbmluZyB0aGUgZG9jdW1lbnQuIERlZmF1bHQgdmFsdWU6IGZhbHNlLjwvbGk+PGxpPk5vbkZ1bGxTY3JlZW5QYWdlTW9kZSBuYW1lIChPcHRpb25hbCkgVGhlIGRvY3VtZW50J3MgcGFnZSBtb2RlLCBzcGVjaWZ5aW5nIGhvdyB0byBkaXNwbGF5IHRoZSBkb2N1bWVudCBvbiBleGl0aW5nIGZ1bGwtc2NyZWVuIG1vZGU6PHVsPjxsaT5Vc2VOb25lIE5laXRoZXIgZG9jdW1lbnQgb3V0bGluZSBub3IgdGh1bWJuYWlsIGltYWdlcyB2aXNpYmxlPC9saT48bGk+VXNlT3V0bGluZXMgRG9jdW1lbnQgb3V0bGluZSB2aXNpYmxlPC9saT48bGk+VXNlVGh1bWJzIFRodW1ibmFpbCBpbWFnZXMgdmlzaWJsZTwvbGk+PGxpPlVzZU9DIE9wdGlvbmFsIGNvbnRlbnQgZ3JvdXAgcGFuZWwgdmlzaWJsZTwvbGk+PC91bD5UaGlzIGVudHJ5IGlzIG1lYW5pbmdmdWwgb25seSBpZiB0aGUgdmFsdWUgb2YgdGhlIFBhZ2VNb2RlIGVudHJ5IGluIHRoZSBjYXRhbG9nIGRpY3Rpb25hcnkgKHNlZSBTZWN0aW9uIDMuNi4xLCAiRG9jdW1lbnQgQ2F0YWxvZyIpIGlzIEZ1bGxTY3JlZW47IGl0IGlzIGlnbm9yZWQgb3RoZXJ3aXNlLiBEZWZhdWx0IHZhbHVlOiBVc2VOb25lLjwvbGk+PGxpPlZpZXdBcmVhIG5hbWUgKE9wdGlvbmFsOyBQREYgMS40KSBUaGUgbmFtZSBvZiB0aGUgcGFnZSBib3VuZGFyeSByZXByZXNlbnRpbmcgdGhlIGFyZWEgb2YgYSBwYWdlIHRvIGJlIGRpc3BsYXllZCB3aGVuIHZpZXdpbmcgdGhlIGRvY3VtZW50IG9uIHRoZSBzY3JlZW4uIFZhbGlkIHZhbHVlcyBhcmUgKHNlZSBTZWN0aW9uIDEwLjEwLjEsICJQYWdlIEJvdW5kYXJpZXMiKS46PHVsPjxsaT5NZWRpYUJveDwvbGk+PGxpPkNyb3BCb3ggKGRlZmF1bHQpPC9saT48bGk+QmxlZWRCb3g8L2xpPjxsaT5UcmltQm94PC9saT48bGk+QXJ0Qm94PC9saT48L3VsPjwvbGk+PGxpPlZpZXdDbGlwIG5hbWUgKE9wdGlvbmFsOyBQREYgMS40KSBUaGUgbmFtZSBvZiB0aGUgcGFnZSBib3VuZGFyeSB0byB3aGljaCB0aGUgY29udGVudHMgb2YgYSBwYWdlIGFyZSB0byBiZSBjbGlwcGVkIHdoZW4gdmlld2luZyB0aGUgZG9jdW1lbnQgb24gdGhlIHNjcmVlbi4gVmFsaWQgdmFsdWVzIGFyZSAoc2VlIFNlY3Rpb24gMTAuMTAuMSwgIlBhZ2UgQm91bmRhcmllcyIpLjo8dWw+PGxpPk1lZGlhQm94PC9saT48bGk+Q3JvcEJveCAoZGVmYXVsdCk8L2xpPjxsaT5CbGVlZEJveDwvbGk+PGxpPlRyaW1Cb3g8L2xpPjxsaT5BcnRCb3g8L2xpPjwvdWw+PC9saT48bGk+UHJpbnRBcmVhIG5hbWUgKE9wdGlvbmFsOyBQREYgMS40KSBUaGUgbmFtZSBvZiB0aGUgcGFnZSBib3VuZGFyeSByZXByZXNlbnRpbmcgdGhlIGFyZWEgb2YgYSBwYWdlIHRvIGJlIHJlbmRlcmVkIHdoZW4gcHJpbnRpbmcgdGhlIGRvY3VtZW50LiBWYWxpZCB2YWx1ZXMgYXJlIChzZWUgU2VjdGlvbiAxMC4xMC4xLCAiUGFnZSBCb3VuZGFyaWVzIikuOjx1bD48bGk+TWVkaWFCb3g8L2xpPjxsaT5Dcm9wQm94IChkZWZhdWx0KTwvbGk+PGxpPkJsZWVkQm94PC9saT48bGk+VHJpbUJveDwvbGk+PGxpPkFydEJveDwvbGk+PC91bD48L2xpPjxsaT5QcmludENsaXAgbmFtZSAoT3B0aW9uYWw7IFBERiAxLjQpIFRoZSBuYW1lIG9mIHRoZSBwYWdlIGJvdW5kYXJ5IHRvIHdoaWNoIHRoZSBjb250ZW50cyBvZiBhIHBhZ2UgYXJlIHRvIGJlIGNsaXBwZWQgd2hlbiBwcmludGluZyB0aGUgZG9jdW1lbnQuIFZhbGlkIHZhbHVlcyBhcmUgKHNlZSBTZWN0aW9uIDEwLjEwLjEsICJQYWdlIEJvdW5kYXJpZXMiKS46PHVsPjxsaT5NZWRpYUJveDwvbGk+PGxpPkNyb3BCb3ggKGRlZmF1bHQpPC9saT48bGk+QmxlZWRCb3g8L2xpPjxsaT5UcmltQm94PC9saT48bGk+QXJ0Qm94PC9saT48L3VsPjwvbGk+PGxpPlByaW50U2NhbGluZyBuYW1lIChPcHRpb25hbDsgUERGIDEuNikgVGhlIHBhZ2Ugc2NhbGluZyBvcHRpb24gdG8gYmUgc2VsZWN0ZWQgd2hlbiBhIHByaW50IGRpYWxvZyBpcyBkaXNwbGF5ZWQgZm9yIHRoaXMgZG9jdW1lbnQuIFZhbGlkIHZhbHVlcyBhcmU6IDx1bD48bGk+Tm9uZSwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgdGhlIHByaW50IGRpYWxvZyBzaG91bGQgcmVmbGVjdCBubyBwYWdlIHNjYWxpbmc8L2xpPjxsaT5BcHBEZWZhdWx0IChkZWZhdWx0KSwgd2hpY2ggaW5kaWNhdGVzIHRoYXQgYXBwbGljYXRpb25zIHNob3VsZCB1c2UgdGhlIGN1cnJlbnQgcHJpbnQgc2NhbGluZzwvbGk+PC91bD48L2xpPjxsaT5EdXBsZXggbmFtZSAoT3B0aW9uYWw7IFBERiAxLjcpIFRoZSBwYXBlciBoYW5kbGluZyBvcHRpb24gdG8gdXNlIHdoZW4gcHJpbnRpbmcgdGhlIGZpbGUgZnJvbSB0aGUgcHJpbnQgZGlhbG9nLiBUaGUgZm9sbG93aW5nIHZhbHVlcyBhcmUgdmFsaWQ6PHVsPjxsaT5TaW1wbGV4IC0gUHJpbnQgc2luZ2xlLXNpZGVkPC9saT48bGk+RHVwbGV4RmxpcFNob3J0RWRnZSAtIER1cGxleCBhbmQgZmxpcCBvbiB0aGUgc2hvcnQgZWRnZSBvZiB0aGUgc2hlZXQ8L2xpPjxsaT5EdXBsZXhGbGlwTG9uZ0VkZ2UgLSBEdXBsZXggYW5kIGZsaXAgb24gdGhlIGxvbmcgZWRnZSBvZiB0aGUgc2hlZXQ8L2xpPjwvdWw+RGVmYXVsdCB2YWx1ZTogbm9uZTwvbGk+PGxpPlBpY2tUcmF5QnlQREZTaXplIGJvb2xlYW4gKE9wdGlvbmFsOyBQREYgMS43KSBBIGZsYWcgc3BlY2lmeWluZyB3aGV0aGVyIHRoZSBQREYgcGFnZSBzaXplIGlzIHVzZWQgdG8gc2VsZWN0IHRoZSBpbnB1dCBwYXBlciB0cmF5LiBUaGlzIHNldHRpbmcgaW5mbHVlbmNlcyBvbmx5IHRoZSBwcmVzZXQgdmFsdWVzIHVzZWQgdG8gcG9wdWxhdGUgdGhlIHByaW50IGRpYWxvZyBwcmVzZW50ZWQgYnkgYSBQREYgdmlld2VyIGFwcGxpY2F0aW9uLiBJZiBQaWNrVHJheUJ5UERGU2l6ZSBpcyB0cnVlLCB0aGUgY2hlY2sgYm94IGluIHRoZSBwcmludCBkaWFsb2cgYXNzb2NpYXRlZCB3aXRoIGlucHV0IHBhcGVyIHRyYXkgaXMgY2hlY2tlZC4gTm90ZTogVGhpcyBzZXR0aW5nIGhhcyBubyBlZmZlY3Qgb24gTWFjIE9TIHN5c3RlbXMsIHdoaWNoIGRvIG5vdCBwcm92aWRlIHRoZSBhYmlsaXR5IHRvIHBpY2sgdGhlIGlucHV0IHRyYXkgYnkgc2l6ZS48L2xpPjxsaT5QcmludFBhZ2VSYW5nZSBhcnJheSAoT3B0aW9uYWw7IFBERiAxLjcpIFRoZSBwYWdlIG51bWJlcnMgdXNlZCB0byBpbml0aWFsaXplIHRoZSBwcmludCBkaWFsb2cgYm94IHdoZW4gdGhlIGZpbGUgaXMgcHJpbnRlZC4gVGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIFBERiBmaWxlIGlzIGRlbm90ZWQgYnkgMS4gRWFjaCBwYWlyIGNvbnNpc3RzIG9mIHRoZSBmaXJzdCBhbmQgbGFzdCBwYWdlcyBpbiB0aGUgc3ViLXJhbmdlLiBBbiBvZGQgbnVtYmVyIG9mIGludGVnZXJzIGNhdXNlcyB0aGlzIGVudHJ5IHRvIGJlIGlnbm9yZWQuIE5lZ2F0aXZlIG51bWJlcnMgY2F1c2UgdGhlIGVudGlyZSBhcnJheSB0byBiZSBpZ25vcmVkLiBEZWZhdWx0IHZhbHVlOiBhcyBkZWZpbmVkIGJ5IFBERiB2aWV3ZXIgYXBwbGljYXRpb248L2xpPjxsaT5OdW1Db3BpZXMgaW50ZWdlciAoT3B0aW9uYWw7IFBERiAxLjcpIFRoZSBudW1iZXIgb2YgY29waWVzIHRvIGJlIHByaW50ZWQgd2hlbiB0aGUgcHJpbnQgZGlhbG9nIGlzIG9wZW5lZCBmb3IgdGhpcyBmaWxlLiBTdXBwb3J0ZWQgdmFsdWVzIGFyZSB0aGUgaW50ZWdlcnMgMiB0aHJvdWdoIDUuIFZhbHVlcyBvdXRzaWRlIHRoaXMgcmFuZ2UgYXJlIGlnbm9yZWQuIERlZmF1bHQgdmFsdWU6IGFzIGRlZmluZWQgYnkgUERGIHZpZXdlciBhcHBsaWNhdGlvbiwgYnV0IHR5cGljYWxseSAxPC9saT48L3VsPgoJICogQHBhcmFtICRwcmVmZXJlbmNlcyAoYXJyYXkpIGFycmF5IG9mIG9wdGlvbnMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRWaWV3ZXJQcmVmZXJlbmNlcygkcHJlZmVyZW5jZXMpIHsKCQkkdGhpcy0+dmlld2VyX3ByZWZlcmVuY2VzID0gJHByZWZlcmVuY2VzOwoJfQoKCS8qKgoJICogUGFpbnRzIGNvbG9yIHRyYW5zaXRpb24gcmVnaXN0cmF0aW9uIGJhcnMKCSAqIEBwYXJhbSAkeCAoZmxvYXQpIGFic2Npc3NhIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkeSAoZmxvYXQpIG9yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkdHJhbnNpdGlvbiAoYm9vbGVhbikgaWYgdHJ1ZSBwcmludHMgdGNvbG9yIHRyYW5zaXRpb25zIHRvIHdoaXRlLgoJICogQHBhcmFtICR2ZXJ0aWNhbCAoYm9vbGVhbikgaWYgdHJ1ZSBwcmludHMgYmFyIHZlcnRpY2FsbHkuCgkgKiBAcGFyYW0gJGNvbG9ycyAoc3RyaW5nKSBjb2xvcnMgdG8gcHJpbnQgc2VwYXJhdGVkIGJ5IGNvbW1hLiBWYWxpZCB2YWx1ZXMgYXJlOiBBLFcsUixHLEIsQyxNLFksSyxSR0IsQ01ZSyxBTEwsQUxMU1BPVCw8U1BPVF9DT0xPUl9OQU1FPi4gV2hlcmU6IEEgPSBncmF5c2NhbGUgYmxhY2ssIFcgPSBncmF5c2NhbGUgd2hpdGUsIFIgPSBSR0IgcmVkLCBHIFJHQiBncmVlbiwgQiBSR0IgYmx1ZSwgQyA9IENNWUsgY3lhbiwgTSA9IENNWUsgbWFnZW50YSwgWSA9IENNWUsgeWVsbG93LCBLID0gQ01ZSyBrZXkvYmxhY2ssIFJHQiA9IFJHQiByZWdpc3RyYXRpb24gY29sb3IsIENNWUsgPSBDTVlLIHJlZ2lzdHJhdGlvbiBjb2xvciwgQUxMID0gU3BvdCByZWdpc3RyYXRpb24gY29sb3IsIEFMTFNQT1QgPSBwcmludCBhbGwgZGVmaW5lZCBzcG90IGNvbG9ycywgPFNQT1RfQ09MT1JfTkFNRT4gPSBuYW1lIG9mIHRoZSBzcG90IGNvbG9yIHRvIHByaW50LgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjkuMDAwICgyMDEwLTAzLTI2KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gY29sb3JSZWdpc3RyYXRpb25CYXIoJHgsICR5LCAkdywgJGgsICR0cmFuc2l0aW9uPXRydWUsICR2ZXJ0aWNhbD1mYWxzZSwgJGNvbG9ycz0nQSxSLEcsQixDLE0sWSxLJykgewoJCWlmIChzdHJwb3MoJGNvbG9ycywgJ0FMTFNQT1QnKSAhPT0gZmFsc2UpIHsKCQkJLy8gZXhwYW5kIHNwb3QgY29sb3JzCgkJCSRzcG90X2NvbG9ycyA9ICcnOwoJCQlmb3JlYWNoICgkdGhpcy0+c3BvdF9jb2xvcnMgYXMgJHNwb3RfY29sb3JfbmFtZSA9PiAkdikgewoJCQkJJHNwb3RfY29sb3JzIC49ICcsJy4kc3BvdF9jb2xvcl9uYW1lOwoJCQl9CgkJCWlmICghZW1wdHkoJHNwb3RfY29sb3JzKSkgewoJCQkJJHNwb3RfY29sb3JzID0gc3Vic3RyKCRzcG90X2NvbG9ycywgMSk7CgkJCQkkY29sb3JzID0gc3RyX3JlcGxhY2UoJ0FMTFNQT1QnLCAkc3BvdF9jb2xvcnMsICRjb2xvcnMpOwoJCQl9IGVsc2UgewoJCQkJJGNvbG9ycyA9IHN0cl9yZXBsYWNlKCdBTExTUE9UJywgJ05PTkUnLCAkY29sb3JzKTsKCQkJfQoJCX0KCQkkYmFycyA9IGV4cGxvZGUoJywnLCAkY29sb3JzKTsKCQkkbnVtYmFycyA9IGNvdW50KCRiYXJzKTsgLy8gbnVtYmVyIG9mIGJhcnMgdG8gcHJpbnQKCQlpZiAoJG51bWJhcnMgPD0gMCkgewoJCQlyZXR1cm47CgkJfQoJCS8vIHNldCBiYXIgbWVhc3VyZXMKCQlpZiAoJHZlcnRpY2FsKSB7CgkJCSRjb29yZHMgPSBhcnJheSgwLCAwLCAwLCAxKTsKCQkJJHdiID0gJHcgLyAkbnVtYmFyczsgLy8gYmFyIHdpZHRoCgkJCSRoYiA9ICRoOyAvLyBiYXIgaGVpZ2h0CgkJCSR4ZCA9ICR3YjsgLy8gZGVsdGEgeAoJCQkkeWQgPSAwOyAvLyBkZWx0YSB5CgkJfSBlbHNlIHsKCQkJJGNvb3JkcyA9IGFycmF5KDEsIDAsIDAsIDApOwoJCQkkd2IgPSAkdzsgLy8gYmFyIHdpZHRoCgkJCSRoYiA9ICRoIC8gJG51bWJhcnM7IC8vIGJhciBoZWlnaHQKCQkJJHhkID0gMDsgLy8gZGVsdGEgeAoJCQkkeWQgPSAkaGI7IC8vIGRlbHRhIHkKCQl9CgkJJHhiID0gJHg7CgkJJHliID0gJHk7CgkJZm9yZWFjaCAoJGJhcnMgYXMgJGNvbCkgewoJCQlzd2l0Y2ggKCRjb2wpIHsKCQkJCS8vIHNldCB0cmFuc2l0aW9uIGNvbG9ycwoJCQkJY2FzZSAnQSc6IHsgLy8gQkxBQ0sgKEdSQVlTQ0FMRSkKCQkJCQkkY29sX2EgPSBhcnJheSgyNTUpOwoJCQkJCSRjb2xfYiA9IGFycmF5KDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnVyc6IHsgLy8gV0hJVEUgKEdSQVlTQ0FMRSkKCQkJCQkkY29sX2EgPSBhcnJheSgwKTsKCQkJCQkkY29sX2IgPSBhcnJheSgyNTUpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnUic6IHsgLy8gUkVEIChSR0IpCgkJCQkJJGNvbF9hID0gYXJyYXkoMjU1LDI1NSwyNTUpOwoJCQkJCSRjb2xfYiA9IGFycmF5KDI1NSwwLDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnRyc6IHsgLy8gR1JFRU4gKFJHQikKCQkJCQkkY29sX2EgPSBhcnJheSgyNTUsMjU1LDI1NSk7CgkJCQkJJGNvbF9iID0gYXJyYXkoMCwyNTUsMCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdCJzogeyAvLyBCTFVFIChSR0IpCgkJCQkJJGNvbF9hID0gYXJyYXkoMjU1LDI1NSwyNTUpOwoJCQkJCSRjb2xfYiA9IGFycmF5KDAsMCwyNTUpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnQyc6IHsgLy8gQ1lBTiAoQ01ZSykKCQkJCQkkY29sX2EgPSBhcnJheSgwLDAsMCwwKTsKCQkJCQkkY29sX2IgPSBhcnJheSgxMDAsMCwwLDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnTSc6IHsgLy8gTUFHRU5UQSAoQ01ZSykKCQkJCQkkY29sX2EgPSBhcnJheSgwLDAsMCwwKTsKCQkJCQkkY29sX2IgPSBhcnJheSgwLDEwMCwwLDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnWSc6IHsgLy8gWUVMTE9XIChDTVlLKQoJCQkJCSRjb2xfYSA9IGFycmF5KDAsMCwwLDApOwoJCQkJCSRjb2xfYiA9IGFycmF5KDAsMCwxMDAsMCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdLJzogeyAvLyBLRVkgLSBCTEFDSyAoQ01ZSykKCQkJCQkkY29sX2EgPSBhcnJheSgwLDAsMCwwKTsKCQkJCQkkY29sX2IgPSBhcnJheSgwLDAsMCwxMDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnUkdCJzogeyAvLyBCTEFDSyBSRUdJU1RSQVRJT04gKFJHQikKCQkJCQkkY29sX2EgPSBhcnJheSgyNTUsMjU1LDI1NSk7CgkJCQkJJGNvbF9iID0gYXJyYXkoMCwwLDApOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnQ01ZSyc6IHsgLy8gQkxBQ0sgUkVHSVNUUkFUSU9OIChDTVlLKQoJCQkJCSRjb2xfYSA9IGFycmF5KDAsMCwwLDApOwoJCQkJCSRjb2xfYiA9IGFycmF5KDEwMCwxMDAsMTAwLDEwMCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdBTEwnOiB7IC8vIFNQT1QgQ09MT1IgUkVHSVNUUkFUSU9OCgkJCQkJJGNvbF9hID0gYXJyYXkoMCwwLDAsMCwnTm9uZScpOwoJCQkJCSRjb2xfYiA9IGFycmF5KDEwMCwxMDAsMTAwLDEwMCwnQWxsJyk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdOT05FJzogeyAvLyBTS0lQIFRISVMgQ09MT1IKCQkJCQkkY29sX2EgPSBhcnJheSgwLDAsMCwwLCdOb25lJyk7CgkJCQkJJGNvbF9iID0gYXJyYXkoMCwwLDAsMCwnTm9uZScpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJZGVmYXVsdDogeyAvLyBTUEVDSUZJQyBTUE9UIENPTE9SIE5BTUUKCQkJCQkkY29sX2EgPSBhcnJheSgwLDAsMCwwLCdOb25lJyk7CgkJCQkJJGNvbF9iID0gVENQREZfQ09MT1JTOjpnZXRTcG90Q29sb3IoJGNvbCwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQlpZiAoJGNvbF9iID09PSBmYWxzZSkgewoJCQkJCQkvLyBpbiBjYXNlIG9mIGVycm9yIGRlZmF1bHRzIHRvIHRoZSByZWdpc3RyYXRpb24gY29sb3IKCQkJCQkJJGNvbF9iID0gYXJyYXkoMTAwLDEwMCwxMDAsMTAwLCdBbGwnKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJaWYgKCRjb2wgIT0gJ05PTkUnKSB7CgkJCQlpZiAoJHRyYW5zaXRpb24pIHsKCQkJCQkvLyBjb2xvciBncmFkaWVudAoJCQkJCSR0aGlzLT5MaW5lYXJHcmFkaWVudCgkeGIsICR5YiwgJHdiLCAkaGIsICRjb2xfYSwgJGNvbF9iLCAkY29vcmRzKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRjb2xfYik7CgkJCQkJLy8gY29sb3JlZCByZWN0YW5nbGUKCQkJCQkkdGhpcy0+UmVjdCgkeGIsICR5YiwgJHdiLCAkaGIsICdGJywgYXJyYXkoKSk7CgkJCQl9CgkJCQkkeGIgKz0gJHhkOwoJCQkJJHliICs9ICR5ZDsKCQkJfQoJCX0KCX0KCgkvKioKCSAqIFBhaW50cyBjcm9wIG1hcmtzLgoJICogQHBhcmFtICR4IChmbG9hdCkgYWJzY2lzc2Egb2YgdGhlIGNyb3AgbWFyayBjZW50ZXIuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBvcmRpbmF0ZSBvZiB0aGUgY3JvcCBtYXJrIGNlbnRlci4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIHdpZHRoIG9mIHRoZSBjcm9wIG1hcmsuCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBoZWlnaHQgb2YgdGhlIGNyb3AgbWFyay4KCSAqIEBwYXJhbSAkdHlwZSAoc3RyaW5nKSB0eXBlIG9mIGNyb3AgbWFyaywgb25lIHN5bWJvbCBwZXIgdHlwZSBzZXBhcmF0ZWQgYnkgY29tbWE6IFQgPSBUT1AsIEYgPSBCT1RUT00sIEwgPSBMRUZULCBSID0gUklHSFQsIFRMID0gQSA9IFRPUC1MRUZULCBUUiA9IEIgPSBUT1AtUklHSFQsIEJMID0gQyA9IEJPVFRPTS1MRUZULCBCUiA9IEQgPSBCT1RUT00tUklHSFQuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgY3JvcCBtYXJrIGNvbG9yIChkZWZhdWx0IHNwb3QgcmVnaXN0cmF0aW9uIGNvbG9yKS4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC45LjAwMCAoMjAxMC0wMy0yNikKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNyb3BNYXJrKCR4LCAkeSwgJHcsICRoLCAkdHlwZT0nVCxSLEIsTCcsICRjb2xvcj1hcnJheSgxMDAsMTAwLDEwMCwxMDAsJ0FsbCcpKSB7CgkJJHRoaXMtPlNldExpbmVTdHlsZShhcnJheSgnd2lkdGgnID0+ICgwLjUgLyAkdGhpcy0+ayksICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+ICRjb2xvcikpOwoJCSR0eXBlID0gc3RydG91cHBlcigkdHlwZSk7CgkJJHR5cGUgPSBwcmVnX3JlcGxhY2UoJy9bXkEtWlwtXCxdKi8nLCAnJywgJHR5cGUpOwoJCS8vIHNwbGl0IHR5cGUgaW4gc2luZ2xlIGNvbXBvbmVudHMKCQkkdHlwZSA9IHN0cl9yZXBsYWNlKCctJywgJywnLCAkdHlwZSk7CgkJJHR5cGUgPSBzdHJfcmVwbGFjZSgnVEwnLCAnVCxMJywgJHR5cGUpOwoJCSR0eXBlID0gc3RyX3JlcGxhY2UoJ1RSJywgJ1QsUicsICR0eXBlKTsKCQkkdHlwZSA9IHN0cl9yZXBsYWNlKCdCTCcsICdGLEwnLCAkdHlwZSk7CgkJJHR5cGUgPSBzdHJfcmVwbGFjZSgnQlInLCAnRixSJywgJHR5cGUpOwoJCSR0eXBlID0gc3RyX3JlcGxhY2UoJ0EnLCAnVCxMJywgJHR5cGUpOwoJCSR0eXBlID0gc3RyX3JlcGxhY2UoJ0InLCAnVCxSJywgJHR5cGUpOwoJCSR0eXBlID0gc3RyX3JlcGxhY2UoJ1QsUk8nLCAnQk8nLCAkdHlwZSk7CgkJJHR5cGUgPSBzdHJfcmVwbGFjZSgnQycsICdGLEwnLCAkdHlwZSk7CgkJJHR5cGUgPSBzdHJfcmVwbGFjZSgnRCcsICdGLFInLCAkdHlwZSk7CgkJJGNyb3BzID0gZXhwbG9kZSgnLCcsIHN0cnRvdXBwZXIoJHR5cGUpKTsKCQkvLyByZW1vdmUgZHVwbGljYXRlcwoJCSRjcm9wcyA9IGFycmF5X3VuaXF1ZSgkY3JvcHMpOwoJCSRkdyA9ICgkdyAvIDQpOyAvLyBob3Jpem9udGFsIHNwYWNlIHRvIGxlYXZlIGJlZm9yZSB0aGUgaW50ZXJzZWN0aW9uIHBvaW50CgkJJGRoID0gKCRoIC8gNCk7IC8vIHZlcnRpY2FsIHNwYWNlIHRvIGxlYXZlIGJlZm9yZSB0aGUgaW50ZXJzZWN0aW9uIHBvaW50CgkJZm9yZWFjaCAoJGNyb3BzIGFzICRjcm9wKSB7CgkJCXN3aXRjaCAoJGNyb3ApIHsKCQkJCWNhc2UgJ1QnOgoJCQkJY2FzZSAnVE9QJzogewoJCQkJCSR4MSA9ICR4OwoJCQkJCSR5MSA9ICgkeSAtICRoKTsKCQkJCQkkeDIgPSAkeDsKCQkJCQkkeTIgPSAoJHkgLSAkZGgpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnRic6CgkJCQljYXNlICdCT1RUT00nOiB7CgkJCQkJJHgxID0gJHg7CgkJCQkJJHkxID0gKCR5ICsgJGRoKTsKCQkJCQkkeDIgPSAkeDsKCQkJCQkkeTIgPSAoJHkgKyAkaCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdMJzoKCQkJCWNhc2UgJ0xFRlQnOiB7CgkJCQkJJHgxID0gKCR4IC0gJHcpOwoJCQkJCSR5MSA9ICR5OwoJCQkJCSR4MiA9ICgkeCAtICRkdyk7CgkJCQkJJHkyID0gJHk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdSJzoKCQkJCWNhc2UgJ1JJR0hUJzogewoJCQkJCSR4MSA9ICgkeCArICRkdyk7CgkJCQkJJHkxID0gJHk7CgkJCQkJJHgyID0gKCR4ICsgJHcpOwoJCQkJCSR5MiA9ICR5OwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJCSR0aGlzLT5MaW5lKCR4MSwgJHkxLCAkeDIsICR5Mik7CgkJfQoJfQoKCS8qKgoJICogUGFpbnRzIGEgcmVnaXN0cmF0aW9uIG1hcmsKCSAqIEBwYXJhbSAkeCAoZmxvYXQpIGFic2Npc3NhIG9mIHRoZSByZWdpc3RyYXRpb24gbWFyayBjZW50ZXIuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBvcmRpbmF0ZSBvZiB0aGUgcmVnaXN0cmF0aW9uIG1hcmsgY2VudGVyLgoJICogQHBhcmFtICRyIChmbG9hdCkgcmFkaXVzIG9mIHRoZSBjcm9wIG1hcmsuCgkgKiBAcGFyYW0gJGRvdWJsZSAoYm9vbGVhbikgaWYgdHJ1ZSBwcmludCB0d28gY29uY2VudHJpYyBjcm9wIG1hcmtzLgoJICogQHBhcmFtICRjb2xhIChhcnJheSkgY3JvcCBtYXJrIGNvbG9yIChkZWZhdWx0IHNwb3QgcmVnaXN0cmF0aW9uIGNvbG9yICdBbGwnKS4KCSAqIEBwYXJhbSAkY29sYiAoYXJyYXkpIHNlY29uZCBjcm9wIG1hcmsgY29sb3IgKGRlZmF1bHQgc3BvdCByZWdpc3RyYXRpb24gY29sb3IgJ05vbmUnKS4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC45LjAwMCAoMjAxMC0wMy0yNikKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlZ2lzdHJhdGlvbk1hcmsoJHgsICR5LCAkciwgJGRvdWJsZT1mYWxzZSwgJGNvbGE9YXJyYXkoMTAwLDEwMCwxMDAsMTAwLCdBbGwnKSwgJGNvbGI9YXJyYXkoMCwwLDAsMCwnTm9uZScpKSB7CgkJJGxpbmVfc3R5bGUgPSBhcnJheSgnd2lkdGgnID0+IG1heCgoMC41IC8gJHRoaXMtPmspLCgkciAvIDMwKSksICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+ICRjb2xhKTsKCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoJGNvbGEpOwoJCSR0aGlzLT5QaWVTZWN0b3IoJHgsICR5LCAkciwgOTAsIDE4MCwgJ0YnKTsKCQkkdGhpcy0+UGllU2VjdG9yKCR4LCAkeSwgJHIsIDI3MCwgMzYwLCAnRicpOwoJCSR0aGlzLT5DaXJjbGUoJHgsICR5LCAkciwgMCwgMzYwLCAnQycsICRsaW5lX3N0eWxlLCBhcnJheSgpLCA4KTsKCQlpZiAoJGRvdWJsZSkgewoJCQkkcmkgPSAkciAqIDAuNTsKCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRjb2xiKTsKCQkJJHRoaXMtPlBpZVNlY3RvcigkeCwgJHksICRyaSwgOTAsIDE4MCwgJ0YnKTsKCQkJJHRoaXMtPlBpZVNlY3RvcigkeCwgJHksICRyaSwgMjcwLCAzNjAsICdGJyk7CgkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkY29sYSk7CgkJCSR0aGlzLT5QaWVTZWN0b3IoJHgsICR5LCAkcmksIDAsIDkwLCAnRicpOwoJCQkkdGhpcy0+UGllU2VjdG9yKCR4LCAkeSwgJHJpLCAxODAsIDI3MCwgJ0YnKTsKCQkJJHRoaXMtPkNpcmNsZSgkeCwgJHksICRyaSwgMCwgMzYwLCAnQycsICRsaW5lX3N0eWxlLCBhcnJheSgpLCA4KTsKCQl9Cgl9CgoJLyoqCgkgKiBQYWludHMgYSBDTVlLIHJlZ2lzdHJhdGlvbiBtYXJrCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBhYnNjaXNzYSBvZiB0aGUgcmVnaXN0cmF0aW9uIG1hcmsgY2VudGVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgb3JkaW5hdGUgb2YgdGhlIHJlZ2lzdHJhdGlvbiBtYXJrIGNlbnRlci4KCSAqIEBwYXJhbSAkciAoZmxvYXQpIHJhZGl1cyBvZiB0aGUgY3JvcCBtYXJrLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA2LjAuMDM4ICgyMDEzLTA5LTMwKQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gcmVnaXN0cmF0aW9uTWFya0NNWUsoJHgsICR5LCAkcikgewoJCS8vIGxpbmUgd2lkdGgKCQkkbHcgPSBtYXgoKDAuNSAvICR0aGlzLT5rKSwoJHIgLyA4KSk7CgkJLy8gaW50ZXJuYWwgcmFkaXVzCgkJJHJpID0gKCRyICogMC42KTsKCQkvLyBleHRlcm5hbCByYWRpdXMKCQkkcmUgPSAoJHIgKiAxLjMpOwoJCS8vIEN5YW4KCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoYXJyYXkoMTAwLDAsMCwwKSk7CgkJJHRoaXMtPlBpZVNlY3RvcigkeCwgJHksICRyaSwgMjcwLCAzNjAsICdGJyk7CgkJLy8gTWFnZW50YQoJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheShhcnJheSgwLDEwMCwwLDApKTsKCQkkdGhpcy0+UGllU2VjdG9yKCR4LCAkeSwgJHJpLCAwLCA5MCwgJ0YnKTsKCQkvLyBZZWxsb3cKCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoYXJyYXkoMCwwLDEwMCwwKSk7CgkJJHRoaXMtPlBpZVNlY3RvcigkeCwgJHksICRyaSwgOTAsIDE4MCwgJ0YnKTsKCQkvLyBLZXkgLSBibGFjawoJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheShhcnJheSgwLDAsMCwxMDApKTsKCQkkdGhpcy0+UGllU2VjdG9yKCR4LCAkeSwgJHJpLCAxODAsIDI3MCwgJ0YnKTsKCQkvLyByZWdpc3RyYXRpb24gY29sb3IKCQkkbGluZV9zdHlsZSA9IGFycmF5KCd3aWR0aCcgPT4gJGx3LCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgxMDAsMTAwLDEwMCwxMDAsJ0FsbCcpKTsKCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoYXJyYXkoMTAwLDEwMCwxMDAsMTAwLCdBbGwnKSk7CgkJLy8gZXh0ZXJuYWwgY2lyY2xlCgkJJHRoaXMtPkNpcmNsZSgkeCwgJHksICRyLCAwLCAzNjAsICdDJywgJGxpbmVfc3R5bGUsIGFycmF5KCksIDgpOwoJCS8vIGNyb3NzIGxpbmVzCgkJJHRoaXMtPkxpbmUoJHgsICgkeSAtICRyZSksICR4LCAoJHkgLSAkcmkpKTsKCQkkdGhpcy0+TGluZSgkeCwgKCR5ICsgJHJpKSwgJHgsICgkeSArICRyZSkpOwoJCSR0aGlzLT5MaW5lKCgkeCAtICRyZSksICR5LCAoJHggLSAkcmkpLCAkeSk7CgkJJHRoaXMtPkxpbmUoKCR4ICsgJHJpKSwgJHksICgkeCArICRyZSksICR5KTsKCX0KCgkvKioKCSAqIFBhaW50cyBhIGxpbmVhciBjb2xvdXIgZ3JhZGllbnQuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBhYnNjaXNzYSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBvcmRpbmF0ZSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJHcgKGZsb2F0KSB3aWR0aCBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICRoIChmbG9hdCkgaGVpZ2h0IG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJGNvbDEgKGFycmF5KSBmaXJzdCBjb2xvciAoR3JheXNjYWxlLCBSR0Igb3IgQ01ZSyBjb21wb25lbnRzKS4KCSAqIEBwYXJhbSAkY29sMiAoYXJyYXkpIHNlY29uZCBjb2xvciAoR3JheXNjYWxlLCBSR0Igb3IgQ01ZSyBjb21wb25lbnRzKS4KCSAqIEBwYXJhbSAkY29vcmRzIChhcnJheSkgYXJyYXkgb2YgdGhlIGZvcm0gKHgxLCB5MSwgeDIsIHkyKSB3aGljaCBkZWZpbmVzIHRoZSBncmFkaWVudCB2ZWN0b3IgKHNlZSBsaW5lYXJfZ3JhZGllbnRfY29vcmRzLmpwZykuIFRoZSBkZWZhdWx0IHZhbHVlIGlzIGZyb20gbGVmdCB0byByaWdodCAoeDE9MCwgeTE9MCwgeDI9MSwgeTI9MCkuCgkgKiBAYXV0aG9yIEFuZHJlYXMgV1xGQ3Jtc2VyLCBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAzLjEuMDAwICgyMDA4LTA2LTA5KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gTGluZWFyR3JhZGllbnQoJHgsICR5LCAkdywgJGgsICRjb2wxPWFycmF5KCksICRjb2wyPWFycmF5KCksICRjb29yZHM9YXJyYXkoMCwwLDEsMCkpIHsKCQkkdGhpcy0+Q2xpcCgkeCwgJHksICR3LCAkaCk7CgkJJHRoaXMtPkdyYWRpZW50KDIsICRjb29yZHMsIGFycmF5KGFycmF5KCdjb2xvcicgPT4gJGNvbDEsICdvZmZzZXQnID0+IDAsICdleHBvbmVudCcgPT4gMSksIGFycmF5KCdjb2xvcicgPT4gJGNvbDIsICdvZmZzZXQnID0+IDEsICdleHBvbmVudCcgPT4gMSkpLCBhcnJheSgpLCBmYWxzZSk7Cgl9CgoJLyoqCgkgKiBQYWludHMgYSByYWRpYWwgY29sb3VyIGdyYWRpZW50LgoJICogQHBhcmFtICR4IChmbG9hdCkgYWJzY2lzc2Egb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICR5IChmbG9hdCkgb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICR3IChmbG9hdCkgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICRjb2wxIChhcnJheSkgZmlyc3QgY29sb3IgKEdyYXlzY2FsZSwgUkdCIG9yIENNWUsgY29tcG9uZW50cykuCgkgKiBAcGFyYW0gJGNvbDIgKGFycmF5KSBzZWNvbmQgY29sb3IgKEdyYXlzY2FsZSwgUkdCIG9yIENNWUsgY29tcG9uZW50cykuCgkgKiBAcGFyYW0gJGNvb3JkcyAoYXJyYXkpIGFycmF5IG9mIHRoZSBmb3JtIChmeCwgZnksIGN4LCBjeSwgcikgd2hlcmUgKGZ4LCBmeSkgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IG9mIHRoZSBncmFkaWVudCB3aXRoIGNvbG9yMSwgKGN4LCBjeSkgaXMgdGhlIGNlbnRlciBvZiB0aGUgY2lyY2xlIHdpdGggY29sb3IyLCBhbmQgciBpcyB0aGUgcmFkaXVzIG9mIHRoZSBjaXJjbGUgKHNlZSByYWRpYWxfZ3JhZGllbnRfY29vcmRzLmpwZykuIChmeCwgZnkpIHNob3VsZCBiZSBpbnNpZGUgdGhlIGNpcmNsZSwgb3RoZXJ3aXNlIHNvbWUgYXJlYXMgd2lsbCBub3QgYmUgZGVmaW5lZC4KCSAqIEBhdXRob3IgQW5kcmVhcyBXXEZDcm1zZXIsIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBSYWRpYWxHcmFkaWVudCgkeCwgJHksICR3LCAkaCwgJGNvbDE9YXJyYXkoKSwgJGNvbDI9YXJyYXkoKSwgJGNvb3Jkcz1hcnJheSgwLjUsMC41LDAuNSwwLjUsMSkpIHsKCQkkdGhpcy0+Q2xpcCgkeCwgJHksICR3LCAkaCk7CgkJJHRoaXMtPkdyYWRpZW50KDMsICRjb29yZHMsIGFycmF5KGFycmF5KCdjb2xvcicgPT4gJGNvbDEsICdvZmZzZXQnID0+IDAsICdleHBvbmVudCcgPT4gMSksIGFycmF5KCdjb2xvcicgPT4gJGNvbDIsICdvZmZzZXQnID0+IDEsICdleHBvbmVudCcgPT4gMSkpLCBhcnJheSgpLCBmYWxzZSk7Cgl9CgoJLyoqCgkgKiBQYWludHMgYSBjb29ucyBwYXRjaCBtZXNoLgoJICogQHBhcmFtICR4IChmbG9hdCkgYWJzY2lzc2Egb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICR5IChmbG9hdCkgb3JkaW5hdGUgb2YgdGhlIHRvcCBsZWZ0IGNvcm5lciBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICR3IChmbG9hdCkgd2lkdGggb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIGhlaWdodCBvZiB0aGUgcmVjdGFuZ2xlLgoJICogQHBhcmFtICRjb2wxIChhcnJheSkgZmlyc3QgY29sb3IgKGxvd2VyIGxlZnQgY29ybmVyKSAoUkdCIGNvbXBvbmVudHMpLgoJICogQHBhcmFtICRjb2wyIChhcnJheSkgc2Vjb25kIGNvbG9yIChsb3dlciByaWdodCBjb3JuZXIpIChSR0IgY29tcG9uZW50cykuCgkgKiBAcGFyYW0gJGNvbDMgKGFycmF5KSB0aGlyZCBjb2xvciAodXBwZXIgcmlnaHQgY29ybmVyKSAoUkdCIGNvbXBvbmVudHMpLgoJICogQHBhcmFtICRjb2w0IChhcnJheSkgZm91cnRoIGNvbG9yICh1cHBlciBsZWZ0IGNvcm5lcikgKFJHQiBjb21wb25lbnRzKS4KCSAqIEBwYXJhbSAkY29vcmRzIChhcnJheSkgPHVsPjxsaT5mb3Igb25lIHBhdGNoIG1lc2g6IGFycmF5KGZsb2F0IHgxLCBmbG9hdCB5MSwgLi4uLiBmbG9hdCB4MTIsIGZsb2F0IHkxMik6IDEyIHBhaXJzIG9mIGNvb3JkaW5hdGVzIChub3JtYWxseSBmcm9tIDAgdG8gMSkgd2hpY2ggc3BlY2lmeSB0aGUgQmV6aWVyIGNvbnRyb2wgcG9pbnRzIHRoYXQgZGVmaW5lIHRoZSBwYXRjaC4gRmlyc3QgcGFpciBpcyB0aGUgbG93ZXIgbGVmdCBlZGdlIHBvaW50LCBuZXh0IGlzIGl0cyByaWdodCBjb250cm9sIHBvaW50IChjb250cm9sIHBvaW50IDIpLiBUaGVuIHRoZSBvdGhlciBwb2ludHMgYXJlIGRlZmluZWQgaW4gdGhlIG9yZGVyOiBjb250cm9sIHBvaW50IDEsIGVkZ2UgcG9pbnQsIGNvbnRyb2wgcG9pbnQgMiBnb2luZyBjb3VudGVyLWNsb2Nrd2lzZSBhcm91bmQgdGhlIHBhdGNoLiBMYXN0ICh4MTIsIHkxMikgaXMgdGhlIGZpcnN0IGVkZ2UgcG9pbnQncyBsZWZ0IGNvbnRyb2wgcG9pbnQgKGNvbnRyb2wgcG9pbnQgMSkuPC9saT48bGk+Zm9yIHR3byBvciBtb3JlIHBhdGNoIG1lc2hlczogYXJyYXlbbnVtYmVyIG9mIHBhdGNoZXNdOiBhcnJheXMgd2l0aCB0aGUgZm9sbG93aW5nIGtleXMgZm9yIGVhY2ggcGF0Y2g6IGY6IHdoZXJlIHRvIHB1dCB0aGF0IHBhdGNoICgwID0gZmlyc3QgcGF0Y2gsIDEsIDIsIDMgPSByaWdodCwgdG9wIGFuZCBsZWZ0IG9mIHByZWNlZGVudCBwYXRjaCAtIEkgZGlkbid0IGZpZ3VyZSB0aGlzIG91dCBjb21wbGV0ZWx5IC0ganVzdCB0cnkgYW5kIGVycm9yIDstKSBwb2ludHM6IDEyIHBhaXJzIG9mIGNvb3JkaW5hdGVzIG9mIHRoZSBCZXppZXIgY29udHJvbCBwb2ludHMgYXMgYWJvdmUgZm9yIHRoZSBmaXJzdCBwYXRjaCwgOCBwYWlycyBvZiBjb29yZGluYXRlcyBmb3IgdGhlIGZvbGxvd2luZyBwYXRjaGVzLCBpZ25vcmluZyB0aGUgY29vcmRpbmF0ZXMgYWxyZWFkeSBkZWZpbmVkIGJ5IHRoZSBwcmVjZWRlbnQgcGF0Y2ggKEkgYWxzbyBkaWRuJ3QgZmlndXJlIG91dCB0aGUgb3JkZXIgb2YgdGhlc2UgLSBhbHNvOiB0cnkgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nKSBjb2xvcnM6IG11c3QgYmUgNCBjb2xvcnMgZm9yIHRoZSBmaXJzdCBwYXRjaCwgMiBjb2xvcnMgZm9yIHRoZSBmb2xsb3dpbmcgcGF0Y2hlczwvbGk+PC91bD4KCSAqIEBwYXJhbSAkY29vcmRzX21pbiAoYXJyYXkpIG1pbmltdW0gdmFsdWUgdXNlZCBieSB0aGUgY29vcmRpbmF0ZXMuIElmIGEgY29vcmRpbmF0ZSdzIHZhbHVlIGlzIHNtYWxsZXIgdGhhbiB0aGlzIGl0IHdpbGwgYmUgY3V0IHRvIGNvb3Jkc19taW4uIGRlZmF1bHQ6IDAKCSAqIEBwYXJhbSAkY29vcmRzX21heCAoYXJyYXkpIG1heGltdW0gdmFsdWUgdXNlZCBieSB0aGUgY29vcmRpbmF0ZXMuIElmIGEgY29vcmRpbmF0ZSdzIHZhbHVlIGlzIGdyZWF0ZXIgdGhhbiB0aGlzIGl0IHdpbGwgYmUgY3V0IHRvIGNvb3Jkc19tYXguIGRlZmF1bHQ6IDEKCSAqIEBwYXJhbSAkYW50aWFsaWFzIChib29sZWFuKSBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGZpbHRlciB0aGUgc2hhZGluZyBmdW5jdGlvbiB0byBwcmV2ZW50IGFsaWFzaW5nIGFydGlmYWN0cy4KCSAqIEBhdXRob3IgQW5kcmVhcyBXXEZDcm1zZXIsIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBDb29uc1BhdGNoTWVzaCgkeCwgJHksICR3LCAkaCwgJGNvbDE9YXJyYXkoKSwgJGNvbDI9YXJyYXkoKSwgJGNvbDM9YXJyYXkoKSwgJGNvbDQ9YXJyYXkoKSwgJGNvb3Jkcz1hcnJheSgwLjAwLDAuMCwwLjMzLDAuMDAsMC42NywwLjAwLDEuMDAsMC4wMCwxLjAwLDAuMzMsMS4wMCwwLjY3LDEuMDAsMS4wMCwwLjY3LDEuMDAsMC4zMywxLjAwLDAuMDAsMS4wMCwwLjAwLDAuNjcsMC4wMCwwLjMzKSwgJGNvb3Jkc19taW49MCwgJGNvb3Jkc19tYXg9MSwgJGFudGlhbGlhcz1mYWxzZSkgewoJCWlmICgkdGhpcy0+cGRmYV9tb2RlIE9SICgkdGhpcy0+c3RhdGUgIT0gMikpIHsKCQkJcmV0dXJuOwoJCX0KCQkkdGhpcy0+Q2xpcCgkeCwgJHksICR3LCAkaCk7CgkJJG4gPSBjb3VudCgkdGhpcy0+Z3JhZGllbnRzKSArIDE7CgkJJHRoaXMtPmdyYWRpZW50c1skbl0gPSBhcnJheSgpOwoJCSR0aGlzLT5ncmFkaWVudHNbJG5dWyd0eXBlJ10gPSA2OyAvL2Nvb25zIHBhdGNoIG1lc2gKCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29vcmRzJ10gPSBhcnJheSgpOwoJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydhbnRpYWxpYXMnXSA9ICRhbnRpYWxpYXM7CgkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddID0gYXJyYXkoKTsKCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsndHJhbnNwYXJlbmN5J10gPSBmYWxzZTsKCQkvL2NoZWNrIHRoZSBjb29yZHMgYXJyYXkgaWYgaXQgaXMgdGhlIHNpbXBsZSBhcnJheSBvciB0aGUgbXVsdGkgcGF0Y2ggYXJyYXkKCQlpZiAoIWlzc2V0KCRjb29yZHNbMF1bJ2YnXSkpIHsKCQkJLy9zaW1wbGUgYXJyYXkgLT4gY29udmVydCB0byBtdWx0aSBwYXRjaCBhcnJheQoJCQlpZiAoIWlzc2V0KCRjb2wxWzFdKSkgewoJCQkJJGNvbDFbMV0gPSAkY29sMVsyXSA9ICRjb2wxWzBdOwoJCQl9CgkJCWlmICghaXNzZXQoJGNvbDJbMV0pKSB7CgkJCQkkY29sMlsxXSA9ICRjb2wyWzJdID0gJGNvbDJbMF07CgkJCX0KCQkJaWYgKCFpc3NldCgkY29sM1sxXSkpIHsKCQkJCSRjb2wzWzFdID0gJGNvbDNbMl0gPSAkY29sM1swXTsKCQkJfQoJCQlpZiAoIWlzc2V0KCRjb2w0WzFdKSkgewoJCQkJJGNvbDRbMV0gPSAkY29sNFsyXSA9ICRjb2w0WzBdOwoJCQl9CgkJCSRwYXRjaF9hcnJheVswXVsnZiddID0gMDsKCQkJJHBhdGNoX2FycmF5WzBdWydwb2ludHMnXSA9ICRjb29yZHM7CgkJCSRwYXRjaF9hcnJheVswXVsnY29sb3JzJ11bMF1bJ3InXSA9ICRjb2wxWzBdOwoJCQkkcGF0Y2hfYXJyYXlbMF1bJ2NvbG9ycyddWzBdWydnJ10gPSAkY29sMVsxXTsKCQkJJHBhdGNoX2FycmF5WzBdWydjb2xvcnMnXVswXVsnYiddID0gJGNvbDFbMl07CgkJCSRwYXRjaF9hcnJheVswXVsnY29sb3JzJ11bMV1bJ3InXSA9ICRjb2wyWzBdOwoJCQkkcGF0Y2hfYXJyYXlbMF1bJ2NvbG9ycyddWzFdWydnJ10gPSAkY29sMlsxXTsKCQkJJHBhdGNoX2FycmF5WzBdWydjb2xvcnMnXVsxXVsnYiddID0gJGNvbDJbMl07CgkJCSRwYXRjaF9hcnJheVswXVsnY29sb3JzJ11bMl1bJ3InXSA9ICRjb2wzWzBdOwoJCQkkcGF0Y2hfYXJyYXlbMF1bJ2NvbG9ycyddWzJdWydnJ10gPSAkY29sM1sxXTsKCQkJJHBhdGNoX2FycmF5WzBdWydjb2xvcnMnXVsyXVsnYiddID0gJGNvbDNbMl07CgkJCSRwYXRjaF9hcnJheVswXVsnY29sb3JzJ11bM11bJ3InXSA9ICRjb2w0WzBdOwoJCQkkcGF0Y2hfYXJyYXlbMF1bJ2NvbG9ycyddWzNdWydnJ10gPSAkY29sNFsxXTsKCQkJJHBhdGNoX2FycmF5WzBdWydjb2xvcnMnXVszXVsnYiddID0gJGNvbDRbMl07CgkJfSBlbHNlIHsKCQkJLy9tdWx0aSBwYXRjaCBhcnJheQoJCQkkcGF0Y2hfYXJyYXkgPSAkY29vcmRzOwoJCX0KCQkkYnBjZCA9IDY1NTM1OyAvLzE2IGJpdHMgcGVyIGNvb3JkaW5hdGUKCQkvL2J1aWxkIHRoZSBkYXRhIHN0cmVhbQoJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydzdHJlYW0nXSA9ICcnOwoJCSRjb3VudF9wYXRjaCA9IGNvdW50KCRwYXRjaF9hcnJheSk7CgkJZm9yICgkaT0wOyAkaSA8ICRjb3VudF9wYXRjaDsgKyskaSkgewoJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnc3RyZWFtJ10gLj0gY2hyKCRwYXRjaF9hcnJheVskaV1bJ2YnXSk7IC8vc3RhcnQgd2l0aCB0aGUgZWRnZSBmbGFnIGFzIDggYml0CgkJCSRjb3VudF9wb2ludHMgPSBjb3VudCgkcGF0Y2hfYXJyYXlbJGldWydwb2ludHMnXSk7CgkJCWZvciAoJGo9MDsgJGogPCAkY291bnRfcG9pbnRzOyArKyRqKSB7CgkJCQkvL2VhY2ggcG9pbnQgYXMgMTYgYml0CgkJCQkkcGF0Y2hfYXJyYXlbJGldWydwb2ludHMnXVskal0gPSAoKCRwYXRjaF9hcnJheVskaV1bJ3BvaW50cyddWyRqXSAtICRjb29yZHNfbWluKSAvICgkY29vcmRzX21heCAtICRjb29yZHNfbWluKSkgKiAkYnBjZDsKCQkJCWlmICgkcGF0Y2hfYXJyYXlbJGldWydwb2ludHMnXVskal0gPCAwKSB7CgkJCQkJJHBhdGNoX2FycmF5WyRpXVsncG9pbnRzJ11bJGpdID0gMDsKCQkJCX0KCQkJCWlmICgkcGF0Y2hfYXJyYXlbJGldWydwb2ludHMnXVskal0gPiAkYnBjZCkgewoJCQkJCSRwYXRjaF9hcnJheVskaV1bJ3BvaW50cyddWyRqXSA9ICRicGNkOwoJCQkJfQoJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ3N0cmVhbSddIC49IGNocihmbG9vcigkcGF0Y2hfYXJyYXlbJGldWydwb2ludHMnXVskal0gLyAyNTYpKTsKCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydzdHJlYW0nXSAuPSBjaHIoZmxvb3IoJHBhdGNoX2FycmF5WyRpXVsncG9pbnRzJ11bJGpdICUgMjU2KSk7CgkJCX0KCQkJJGNvdW50X2NvbHMgPSBjb3VudCgkcGF0Y2hfYXJyYXlbJGldWydjb2xvcnMnXSk7CgkJCWZvciAoJGo9MDsgJGogPCAkY291bnRfY29sczsgKyskaikgewoJCQkJLy9lYWNoIGNvbG9yIGNvbXBvbmVudCBhcyA4IGJpdAoJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ3N0cmVhbSddIC49IGNocigkcGF0Y2hfYXJyYXlbJGldWydjb2xvcnMnXVskal1bJ3InXSk7CgkJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnc3RyZWFtJ10gLj0gY2hyKCRwYXRjaF9hcnJheVskaV1bJ2NvbG9ycyddWyRqXVsnZyddKTsKCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydzdHJlYW0nXSAuPSBjaHIoJHBhdGNoX2FycmF5WyRpXVsnY29sb3JzJ11bJGpdWydiJ10pOwoJCQl9CgkJfQoJCS8vcGFpbnQgdGhlIGdyYWRpZW50CgkJJHRoaXMtPl9vdXQoJy9TaCcuJG4uJyBzaCcpOwoJCS8vcmVzdG9yZSBwcmV2aW91cyBHcmFwaGljIFN0YXRlCgkJJHRoaXMtPl9vdXRSZXN0b3JlR3JhcGhpY3NTdGF0ZSgpOwoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2dyYWRpZW50cyddWyRuXSA9ICR0aGlzLT5ncmFkaWVudHNbJG5dOwoJCX0KCX0KCgkvKioKCSAqIFNldCBhIHJlY3Rhbmd1bGFyIGNsaXBwaW5nIGFyZWEuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBhYnNjaXNzYSBvZiB0aGUgdG9wIGxlZnQgY29ybmVyIG9mIHRoZSByZWN0YW5nbGUgKG9yIHRvcCByaWdodCBjb3JuZXIgZm9yIFJUTCBtb2RlKS4KCSAqIEBwYXJhbSAkeSAoZmxvYXQpIG9yZGluYXRlIG9mIHRoZSB0b3AgbGVmdCBjb3JuZXIgb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIHdpZHRoIG9mIHRoZSByZWN0YW5nbGUuCgkgKiBAcGFyYW0gJGggKGZsb2F0KSBoZWlnaHQgb2YgdGhlIHJlY3RhbmdsZS4KCSAqIEBhdXRob3IgQW5kcmVhcyBXXEZDcm1zZXIsIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBDbGlwKCR4LCAkeSwgJHcsICRoKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR4ID0gJHRoaXMtPncgLSAkeCAtICR3OwoJCX0KCQkvL3NhdmUgY3VycmVudCBHcmFwaGljIFN0YXRlCgkJJHMgPSAncSc7CgkJLy9zZXQgY2xpcHBpbmcgYXJlYQoJCSRzIC49IHNwcmludGYoJyAlRiAlRiAlRiAlRiByZSBXIG4nLCAkeCokdGhpcy0+aywgKCR0aGlzLT5oLSR5KSokdGhpcy0+aywgJHcqJHRoaXMtPmssIC0kaCokdGhpcy0+ayk7CgkJLy9zZXQgdXAgdHJhbnNmb3JtYXRpb24gbWF0cml4IGZvciBncmFkaWVudAoJCSRzIC49IHNwcmludGYoJyAlRiAwIDAgJUYgJUYgJUYgY20nLCAkdyokdGhpcy0+aywgJGgqJHRoaXMtPmssICR4KiR0aGlzLT5rLCAoJHRoaXMtPmgtKCR5KyRoKSkqJHRoaXMtPmspOwoJCSR0aGlzLT5fb3V0KCRzKTsKCX0KCgkvKioKCSAqIE91dHB1dCBncmFkaWVudC4KCSAqIEBwYXJhbSAkdHlwZSAoaW50KSB0eXBlIG9mIGdyYWRpZW50ICgxIEZ1bmN0aW9uLWJhc2VkIHNoYWRpbmc7IDIgQXhpYWwgc2hhZGluZzsgMyBSYWRpYWwgc2hhZGluZzsgNCBGcmVlLWZvcm0gR291cmF1ZC1zaGFkZWQgdHJpYW5nbGUgbWVzaDsgNSBMYXR0aWNlLWZvcm0gR291cmF1ZC1zaGFkZWQgdHJpYW5nbGUgbWVzaDsgNiBDb29ucyBwYXRjaCBtZXNoOyA3IFRlbnNvci1wcm9kdWN0IHBhdGNoIG1lc2gpLiAoTm90IGFsbCB0eXBlcyBhcmUgY3VycmVudGx5IHN1cHBvcnRlZCkKCSAqIEBwYXJhbSAkY29vcmRzIChhcnJheSkgYXJyYXkgb2YgY29vcmRpbmF0ZXMuCgkgKiBAcGFyYW0gJHN0b3BzIChhcnJheSkgYXJyYXkgZ3JhZGllbnQgY29sb3IgY29tcG9uZW50czogY29sb3IgPSBhcnJheSBvZiBHUkFZLCBSR0Igb3IgQ01ZSyBjb2xvciBjb21wb25lbnRzOyBvZmZzZXQgPSAoMCB0byAxKSByZXByZXNlbnRzIGEgbG9jYXRpb24gYWxvbmcgdGhlIGdyYWRpZW50IHZlY3RvcjsgZXhwb25lbnQgPSBleHBvbmVudCBvZiB0aGUgZXhwb25lbnRpYWwgaW50ZXJwb2xhdGlvbiBmdW5jdGlvbiAoZGVmYXVsdCA9IDEpLgoJICogQHBhcmFtICRiYWNrZ3JvdW5kIChhcnJheSkgQW4gYXJyYXkgb2YgY29sb3VyIGNvbXBvbmVudHMgYXBwcm9wcmlhdGUgdG8gdGhlIGNvbG91ciBzcGFjZSwgc3BlY2lmeWluZyBhIHNpbmdsZSBiYWNrZ3JvdW5kIGNvbG91ciB2YWx1ZS4KCSAqIEBwYXJhbSAkYW50aWFsaWFzIChib29sZWFuKSBBIGZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIHRvIGZpbHRlciB0aGUgc2hhZGluZyBmdW5jdGlvbiB0byBwcmV2ZW50IGFsaWFzaW5nIGFydGlmYWN0cy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0wOSkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEdyYWRpZW50KCR0eXBlLCAkY29vcmRzLCAkc3RvcHMsICRiYWNrZ3JvdW5kPWFycmF5KCksICRhbnRpYWxpYXM9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSBPUiAoJHRoaXMtPnN0YXRlICE9IDIpKSB7CgkJCXJldHVybjsKCQl9CgkJJG4gPSBjb3VudCgkdGhpcy0+Z3JhZGllbnRzKSArIDE7CgkJJHRoaXMtPmdyYWRpZW50c1skbl0gPSBhcnJheSgpOwoJCSR0aGlzLT5ncmFkaWVudHNbJG5dWyd0eXBlJ10gPSAkdHlwZTsKCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29vcmRzJ10gPSAkY29vcmRzOwoJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydhbnRpYWxpYXMnXSA9ICRhbnRpYWxpYXM7CgkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddID0gYXJyYXkoKTsKCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsndHJhbnNwYXJlbmN5J10gPSBmYWxzZTsKCQkvLyBjb2xvciBzcGFjZQoJCSRudW1jb2xzcGFjZSA9IGNvdW50KCRzdG9wc1swXVsnY29sb3InXSk7CgkJJGJjb2xvciA9IGFycmF5X3ZhbHVlcygkYmFja2dyb3VuZCk7CgkJc3dpdGNoKCRudW1jb2xzcGFjZSkgewoJCQljYXNlIDU6ICAgLy8gU1BPVAoJCQljYXNlIDQ6IHsgLy8gQ01ZSwoJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbHNwYWNlJ10gPSAnRGV2aWNlQ01ZSyc7CgkJCQlpZiAoIWVtcHR5KCRiYWNrZ3JvdW5kKSkgewoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydiYWNrZ3JvdW5kJ10gPSBzcHJpbnRmKCclRiAlRiAlRiAlRicsICRiY29sb3JbMF0vMTAwLCAkYmNvbG9yWzFdLzEwMCwgJGJjb2xvclsyXS8xMDAsICRiY29sb3JbM10vMTAwKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMzogeyAvLyBSR0IKCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xzcGFjZSddID0gJ0RldmljZVJHQic7CgkJCQlpZiAoIWVtcHR5KCRiYWNrZ3JvdW5kKSkgewoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydiYWNrZ3JvdW5kJ10gPSBzcHJpbnRmKCclRiAlRiAlRicsICRiY29sb3JbMF0vMjU1LCAkYmNvbG9yWzFdLzI1NSwgJGJjb2xvclsyXS8yNTUpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAxOiB7IC8vIEdSQVkgU0NBTEUKCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xzcGFjZSddID0gJ0RldmljZUdyYXknOwoJCQkJaWYgKCFlbXB0eSgkYmFja2dyb3VuZCkpIHsKCQkJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnYmFja2dyb3VuZCddID0gc3ByaW50ZignJUYnLCAkYmNvbG9yWzBdLzI1NSk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkbnVtX3N0b3BzID0gY291bnQoJHN0b3BzKTsKCQkkbGFzdF9zdG9wX2lkID0gJG51bV9zdG9wcyAtIDE7CgkJZm9yZWFjaCAoJHN0b3BzIGFzICRrZXkgPT4gJHN0b3ApIHsKCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddWyRrZXldID0gYXJyYXkoKTsKCQkJLy8gb2Zmc2V0IHJlcHJlc2VudHMgYSBsb2NhdGlvbiBhbG9uZyB0aGUgZ3JhZGllbnQgdmVjdG9yCgkJCWlmIChpc3NldCgkc3RvcFsnb2Zmc2V0J10pKSB7CgkJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29sb3JzJ11bJGtleV1bJ29mZnNldCddID0gJHN0b3BbJ29mZnNldCddOwoJCQl9IGVsc2UgewoJCQkJaWYgKCRrZXkgPT0gMCkgewoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xvcnMnXVska2V5XVsnb2Zmc2V0J10gPSAwOwoJCQkJfSBlbHNlaWYgKCRrZXkgPT0gJGxhc3Rfc3RvcF9pZCkgewoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xvcnMnXVska2V5XVsnb2Zmc2V0J10gPSAxOwoJCQkJfSBlbHNlIHsKCQkJCQkkb2Zmc2V0c3RlcCA9ICgxIC0gJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddWygka2V5IC0gMSldWydvZmZzZXQnXSkgLyAoJG51bV9zdG9wcyAtICRrZXkpOwoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xvcnMnXVska2V5XVsnb2Zmc2V0J10gPSAkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29sb3JzJ11bKCRrZXkgLSAxKV1bJ29mZnNldCddICsgJG9mZnNldHN0ZXA7CgkJCQl9CgkJCX0KCQkJaWYgKGlzc2V0KCRzdG9wWydvcGFjaXR5J10pKSB7CgkJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29sb3JzJ11bJGtleV1bJ29wYWNpdHknXSA9ICRzdG9wWydvcGFjaXR5J107CgkJCQlpZiAoKCEkdGhpcy0+cGRmYV9tb2RlKSBBTkQgKCRzdG9wWydvcGFjaXR5J10gPCAxKSkgewoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWyd0cmFuc3BhcmVuY3knXSA9IHRydWU7CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+Z3JhZGllbnRzWyRuXVsnY29sb3JzJ11bJGtleV1bJ29wYWNpdHknXSA9IDE7CgkJCX0KCQkJLy8gZXhwb25lbnQgZm9yIHRoZSBleHBvbmVudGlhbCBpbnRlcnBvbGF0aW9uIGZ1bmN0aW9uCgkJCWlmIChpc3NldCgkc3RvcFsnZXhwb25lbnQnXSkpIHsKCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xvcnMnXVska2V5XVsnZXhwb25lbnQnXSA9ICRzdG9wWydleHBvbmVudCddOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddWyRrZXldWydleHBvbmVudCddID0gMTsKCQkJfQoJCQkvLyBzZXQgY29sb3JzCgkJCSRjb2xvciA9IGFycmF5X3ZhbHVlcygkc3RvcFsnY29sb3InXSk7CgkJCXN3aXRjaCgkbnVtY29sc3BhY2UpIHsKCQkJCWNhc2UgNTogICAvLyBTUE9UCgkJCQljYXNlIDQ6IHsgLy8gQ01ZSwoJCQkJCSR0aGlzLT5ncmFkaWVudHNbJG5dWydjb2xvcnMnXVska2V5XVsnY29sb3InXSA9IHNwcmludGYoJyVGICVGICVGICVGJywgJGNvbG9yWzBdLzEwMCwgJGNvbG9yWzFdLzEwMCwgJGNvbG9yWzJdLzEwMCwgJGNvbG9yWzNdLzEwMCk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlIDM6IHsgLy8gUkdCCgkJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddWyRrZXldWydjb2xvciddID0gc3ByaW50ZignJUYgJUYgJUYnLCAkY29sb3JbMF0vMjU1LCAkY29sb3JbMV0vMjU1LCAkY29sb3JbMl0vMjU1KTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMTogeyAvLyBHUkFZIFNDQUxFCgkJCQkJJHRoaXMtPmdyYWRpZW50c1skbl1bJ2NvbG9ycyddWyRrZXldWydjb2xvciddID0gc3ByaW50ZignJUYnLCAkY29sb3JbMF0vMjU1KTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCX0KCQlpZiAoJHRoaXMtPmdyYWRpZW50c1skbl1bJ3RyYW5zcGFyZW5jeSddKSB7CgkJCS8vIHBhaW50IGx1bWlub3NpdHkgZ3JhZGllbnQKCQkJJHRoaXMtPl9vdXQoJy9UR1MnLiRuLicgZ3MnKTsKCQl9CgkJLy9wYWludCB0aGUgZ3JhZGllbnQKCQkkdGhpcy0+X291dCgnL1NoJy4kbi4nIHNoJyk7CgkJLy9yZXN0b3JlIHByZXZpb3VzIEdyYXBoaWMgU3RhdGUKCQkkdGhpcy0+X291dFJlc3RvcmVHcmFwaGljc1N0YXRlKCk7CgkJaWYgKCR0aGlzLT5pbnhvYmopIHsKCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnZ3JhZGllbnRzJ11bJG5dID0gJHRoaXMtPmdyYWRpZW50c1skbl07CgkJfQoJfQoKCS8qKgoJICogT3V0cHV0IGdyYWRpZW50IHNoYWRlcnMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKiBAcHJvdGVjdGVkCgkgKi8KCWZ1bmN0aW9uIF9wdXRzaGFkZXJzKCkgewoJCWlmICgkdGhpcy0+cGRmYV9tb2RlKSB7CgkJCXJldHVybjsKCQl9CgkJJGlkdCA9IGNvdW50KCR0aGlzLT5ncmFkaWVudHMpOyAvL2luZGV4IGZvciB0cmFuc3BhcmVuY3kgZ3JhZGllbnRzCgkJZm9yZWFjaCAoJHRoaXMtPmdyYWRpZW50cyBhcyAkaWQgPT4gJGdyYWQpIHsKCQkJaWYgKCgkZ3JhZFsndHlwZSddID09IDIpIE9SICgkZ3JhZFsndHlwZSddID09IDMpKSB7CgkJCQkkZmMgPSAkdGhpcy0+X25ld29iaigpOwoJCQkJJG91dCA9ICc8PCc7CgkJCQkkb3V0IC49ICcgL0Z1bmN0aW9uVHlwZSAzJzsKCQkJCSRvdXQgLj0gJyAvRG9tYWluIFswIDFdJzsKCQkJCSRmdW5jdGlvbnMgPSAnJzsKCQkJCSRib3VuZHMgPSAnJzsKCQkJCSRlbmNvZGUgPSAnJzsKCQkJCSRpID0gMTsKCQkJCSRudW1fY29scyA9IGNvdW50KCRncmFkWydjb2xvcnMnXSk7CgkJCQkkbGFzdGNvbHMgPSAkbnVtX2NvbHMgLSAxOwoJCQkJZm9yICgkaSA9IDE7ICRpIDwgJG51bV9jb2xzOyArKyRpKSB7CgkJCQkJJGZ1bmN0aW9ucyAuPSAoJGZjICsgJGkpLicgMCBSICc7CgkJCQkJaWYgKCRpIDwgJGxhc3Rjb2xzKSB7CgkJCQkJCSRib3VuZHMgLj0gc3ByaW50ZignJUYgJywgJGdyYWRbJ2NvbG9ycyddWyRpXVsnb2Zmc2V0J10pOwoJCQkJCX0KCQkJCQkkZW5jb2RlIC49ICcwIDEgJzsKCQkJCX0KCQkJCSRvdXQgLj0gJyAvRnVuY3Rpb25zIFsnLnRyaW0oJGZ1bmN0aW9ucykuJ10nOwoJCQkJJG91dCAuPSAnIC9Cb3VuZHMgWycudHJpbSgkYm91bmRzKS4nXSc7CgkJCQkkb3V0IC49ICcgL0VuY29kZSBbJy50cmltKCRlbmNvZGUpLiddJzsKCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJCWZvciAoJGkgPSAxOyAkaSA8ICRudW1fY29sczsgKyskaSkgewoJCQkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCQkJJG91dCA9ICc8PCc7CgkJCQkJJG91dCAuPSAnIC9GdW5jdGlvblR5cGUgMic7CgkJCQkJJG91dCAuPSAnIC9Eb21haW4gWzAgMV0nOwoJCQkJCSRvdXQgLj0gJyAvQzAgWycuJGdyYWRbJ2NvbG9ycyddWygkaSAtIDEpXVsnY29sb3InXS4nXSc7CgkJCQkJJG91dCAuPSAnIC9DMSBbJy4kZ3JhZFsnY29sb3JzJ11bJGldWydjb2xvciddLiddJzsKCQkJCQkkb3V0IC49ICcgL04gJy4kZ3JhZFsnY29sb3JzJ11bJGldWydleHBvbmVudCddOwoJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkJfQoJCQkJLy8gc2V0IHRyYW5zcGFyZW5jeSBmdWN0aW9ucwoJCQkJaWYgKCRncmFkWyd0cmFuc3BhcmVuY3knXSkgewoJCQkJCSRmdCA9ICR0aGlzLT5fbmV3b2JqKCk7CgkJCQkJJG91dCA9ICc8PCc7CgkJCQkJJG91dCAuPSAnIC9GdW5jdGlvblR5cGUgMyc7CgkJCQkJJG91dCAuPSAnIC9Eb21haW4gWzAgMV0nOwoJCQkJCSRmdW5jdGlvbnMgPSAnJzsKCQkJCQkkaSA9IDE7CgkJCQkJJG51bV9jb2xzID0gY291bnQoJGdyYWRbJ2NvbG9ycyddKTsKCQkJCQlmb3IgKCRpID0gMTsgJGkgPCAkbnVtX2NvbHM7ICsrJGkpIHsKCQkJCQkJJGZ1bmN0aW9ucyAuPSAoJGZ0ICsgJGkpLicgMCBSICc7CgkJCQkJfQoJCQkJCSRvdXQgLj0gJyAvRnVuY3Rpb25zIFsnLnRyaW0oJGZ1bmN0aW9ucykuJ10nOwoJCQkJCSRvdXQgLj0gJyAvQm91bmRzIFsnLnRyaW0oJGJvdW5kcykuJ10nOwoJCQkJCSRvdXQgLj0gJyAvRW5jb2RlIFsnLnRyaW0oJGVuY29kZSkuJ10nOwoJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkJCWZvciAoJGkgPSAxOyAkaSA8ICRudW1fY29sczsgKyskaSkgewoJCQkJCQkkdGhpcy0+X25ld29iaigpOwoJCQkJCQkkb3V0ID0gJzw8JzsKCQkJCQkJJG91dCAuPSAnIC9GdW5jdGlvblR5cGUgMic7CgkJCQkJCSRvdXQgLj0gJyAvRG9tYWluIFswIDFdJzsKCQkJCQkJJG91dCAuPSAnIC9DMCBbJy4kZ3JhZFsnY29sb3JzJ11bKCRpIC0gMSldWydvcGFjaXR5J10uJ10nOwoJCQkJCQkkb3V0IC49ICcgL0MxIFsnLiRncmFkWydjb2xvcnMnXVskaV1bJ29wYWNpdHknXS4nXSc7CgkJCQkJCSRvdXQgLj0gJyAvTiAnLiRncmFkWydjb2xvcnMnXVskaV1bJ2V4cG9uZW50J107CgkJCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkJCSRvdXQgLj0gIlxuIi4nZW5kb2JqJzsKCQkJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCS8vIHNldCBzaGFkaW5nIG9iamVjdAoJCQkkdGhpcy0+X25ld29iaigpOwoJCQkkb3V0ID0gJzw8IC9TaGFkaW5nVHlwZSAnLiRncmFkWyd0eXBlJ107CgkJCWlmIChpc3NldCgkZ3JhZFsnY29sc3BhY2UnXSkpIHsKCQkJCSRvdXQgLj0gJyAvQ29sb3JTcGFjZSAvJy4kZ3JhZFsnY29sc3BhY2UnXTsKCQkJfSBlbHNlIHsKCQkJCSRvdXQgLj0gJyAvQ29sb3JTcGFjZSAvRGV2aWNlUkdCJzsKCQkJfQoJCQlpZiAoaXNzZXQoJGdyYWRbJ2JhY2tncm91bmQnXSkgQU5EICFlbXB0eSgkZ3JhZFsnYmFja2dyb3VuZCddKSkgewoJCQkJJG91dCAuPSAnIC9CYWNrZ3JvdW5kIFsnLiRncmFkWydiYWNrZ3JvdW5kJ10uJ10nOwoJCQl9CgkJCWlmIChpc3NldCgkZ3JhZFsnYW50aWFsaWFzJ10pIEFORCAoJGdyYWRbJ2FudGlhbGlhcyddID09PSB0cnVlKSkgewoJCQkJJG91dCAuPSAnIC9BbnRpQWxpYXMgdHJ1ZSc7CgkJCX0KCQkJaWYgKCRncmFkWyd0eXBlJ10gPT0gMikgewoJCQkJJG91dCAuPSAnICcuc3ByaW50ZignL0Nvb3JkcyBbJUYgJUYgJUYgJUZdJywgJGdyYWRbJ2Nvb3JkcyddWzBdLCAkZ3JhZFsnY29vcmRzJ11bMV0sICRncmFkWydjb29yZHMnXVsyXSwgJGdyYWRbJ2Nvb3JkcyddWzNdKTsKCQkJCSRvdXQgLj0gJyAvRG9tYWluIFswIDFdJzsKCQkJCSRvdXQgLj0gJyAvRnVuY3Rpb24gJy4kZmMuJyAwIFInOwoJCQkJJG91dCAuPSAnIC9FeHRlbmQgW3RydWUgdHJ1ZV0nOwoJCQkJJG91dCAuPSAnID4+JzsKCQkJfSBlbHNlaWYgKCRncmFkWyd0eXBlJ10gPT0gMykgewoJCQkJLy94MCwgeTAsIHIwLCB4MSwgeTEsIHIxCgkJCQkvL2F0IHRoaXMgdGhpcyB0aW1lIHJhZGl1cyBvZiBpbm5lciBjaXJjbGUgaXMgMAoJCQkJJG91dCAuPSAnICcuc3ByaW50ZignL0Nvb3JkcyBbJUYgJUYgMCAlRiAlRiAlRl0nLCAkZ3JhZFsnY29vcmRzJ11bMF0sICRncmFkWydjb29yZHMnXVsxXSwgJGdyYWRbJ2Nvb3JkcyddWzJdLCAkZ3JhZFsnY29vcmRzJ11bM10sICRncmFkWydjb29yZHMnXVs0XSk7CgkJCQkkb3V0IC49ICcgL0RvbWFpbiBbMCAxXSc7CgkJCQkkb3V0IC49ICcgL0Z1bmN0aW9uICcuJGZjLicgMCBSJzsKCQkJCSRvdXQgLj0gJyAvRXh0ZW5kIFt0cnVlIHRydWVdJzsKCQkJCSRvdXQgLj0gJyA+Pic7CgkJCX0gZWxzZWlmICgkZ3JhZFsndHlwZSddID09IDYpIHsKCQkJCSRvdXQgLj0gJyAvQml0c1BlckNvb3JkaW5hdGUgMTYnOwoJCQkJJG91dCAuPSAnIC9CaXRzUGVyQ29tcG9uZW50IDgnOwoJCQkJJG91dCAuPSAnIC9EZWNvZGVbMCAxIDAgMSAwIDEgMCAxIDAgMV0nOwoJCQkJJG91dCAuPSAnIC9CaXRzUGVyRmxhZyA4JzsKCQkJCSRzdHJlYW0gPSAkdGhpcy0+X2dldHJhd3N0cmVhbSgkZ3JhZFsnc3RyZWFtJ10pOwoJCQkJJG91dCAuPSAnIC9MZW5ndGggJy5zdHJsZW4oJHN0cmVhbSk7CgkJCQkkb3V0IC49ICcgPj4nOwoJCQkJJG91dCAuPSAnIHN0cmVhbScuIlxuIi4kc3RyZWFtLiJcbiIuJ2VuZHN0cmVhbSc7CgkJCX0KCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJaWYgKCRncmFkWyd0cmFuc3BhcmVuY3knXSkgewoJCQkJJHNoYWRpbmdfdHJhbnNwYXJlbmN5ID0gcHJlZ19yZXBsYWNlKCcvXC9Db2xvclNwYWNlIFwvW15cc10rL3NpJywgJy9Db2xvclNwYWNlIC9EZXZpY2VHcmF5JywgJG91dCk7CgkJCQkkc2hhZGluZ190cmFuc3BhcmVuY3kgPSBwcmVnX3JlcGxhY2UoJy9cL0Z1bmN0aW9uIFswLTldKyAvc2knLCAnL0Z1bmN0aW9uICcuJGZ0LicgJywgJHNoYWRpbmdfdHJhbnNwYXJlbmN5KTsKCQkJfQoJCQkkdGhpcy0+Z3JhZGllbnRzWyRpZF1bJ2lkJ10gPSAkdGhpcy0+bjsKCQkJLy8gc2V0IHBhdHRlcm4gb2JqZWN0CgkJCSR0aGlzLT5fbmV3b2JqKCk7CgkJCSRvdXQgPSAnPDwgL1R5cGUgL1BhdHRlcm4gL1BhdHRlcm5UeXBlIDInOwoJCQkkb3V0IC49ICcgL1NoYWRpbmcgJy4kdGhpcy0+Z3JhZGllbnRzWyRpZF1bJ2lkJ10uJyAwIFInOwoJCQkkb3V0IC49ICcgPj4nOwoJCQkkb3V0IC49ICJcbiIuJ2VuZG9iaic7CgkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkkdGhpcy0+Z3JhZGllbnRzWyRpZF1bJ3BhdHRlcm4nXSA9ICR0aGlzLT5uOwoJCQkvLyBzZXQgc2hhZGluZyBhbmQgcGF0dGVybiBmb3IgdHJhbnNwYXJlbmN5IG1hc2sKCQkJaWYgKCRncmFkWyd0cmFuc3BhcmVuY3knXSkgewoJCQkJLy8gbHVtaW5vc2l0eSBwYXR0ZXJuCgkJCQkkaWRncyA9ICRpZCArICRpZHQ7CgkJCQkkdGhpcy0+X25ld29iaigpOwoJCQkJJHRoaXMtPl9vdXQoJHNoYWRpbmdfdHJhbnNwYXJlbmN5KTsKCQkJCSR0aGlzLT5ncmFkaWVudHNbJGlkZ3NdWydpZCddID0gJHRoaXMtPm47CgkJCQkkdGhpcy0+X25ld29iaigpOwoJCQkJJG91dCA9ICc8PCAvVHlwZSAvUGF0dGVybiAvUGF0dGVyblR5cGUgMic7CgkJCQkkb3V0IC49ICcgL1NoYWRpbmcgJy4kdGhpcy0+Z3JhZGllbnRzWyRpZGdzXVsnaWQnXS4nIDAgUic7CgkJCQkkb3V0IC49ICcgPj4nOwoJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCQkkdGhpcy0+Z3JhZGllbnRzWyRpZGdzXVsncGF0dGVybiddID0gJHRoaXMtPm47CgkJCQkvLyBsdW1pbm9zaXR5IFhPYmplY3QKCQkJCSRvaWQgPSAkdGhpcy0+X25ld29iaigpOwoJCQkJJHRoaXMtPnhvYmplY3RzWydMWCcuJG9pZF0gPSBhcnJheSgnbicgPT4gJG9pZCk7CgkJCQkkZmlsdGVyID0gJyc7CgkJCQkkc3RyZWFtID0gJ3EgL2EwIGdzIC9QYXR0ZXJuIGNzIC9wJy4kaWRncy4nIHNjbiAwIDAgJy4kdGhpcy0+d1B0LicgJy4kdGhpcy0+aFB0LicgcmUgZiBRJzsKCQkJCWlmICgkdGhpcy0+Y29tcHJlc3MpIHsKCQkJCQkkZmlsdGVyID0gJyAvRmlsdGVyIC9GbGF0ZURlY29kZSc7CgkJCQkJJHN0cmVhbSA9IGd6Y29tcHJlc3MoJHN0cmVhbSk7CgkJCQl9CgkJCQkkc3RyZWFtID0gJHRoaXMtPl9nZXRyYXdzdHJlYW0oJHN0cmVhbSk7CgkJCQkkb3V0ID0gJzw8IC9UeXBlIC9YT2JqZWN0IC9TdWJ0eXBlIC9Gb3JtIC9Gb3JtVHlwZSAxJy4kZmlsdGVyOwoJCQkJJG91dCAuPSAnIC9MZW5ndGggJy5zdHJsZW4oJHN0cmVhbSk7CgkJCQkkcmVjdCA9IHNwcmludGYoJyVGICVGJywgJHRoaXMtPndQdCwgJHRoaXMtPmhQdCk7CgkJCQkkb3V0IC49ICcgL0JCb3ggWzAgMCAnLiRyZWN0LiddJzsKCQkJCSRvdXQgLj0gJyAvR3JvdXAgPDwgL1R5cGUgL0dyb3VwIC9TIC9UcmFuc3BhcmVuY3kgL0NTIC9EZXZpY2VHcmF5ID4+JzsKCQkJCSRvdXQgLj0gJyAvUmVzb3VyY2VzIDw8JzsKCQkJCSRvdXQgLj0gJyAvRXh0R1N0YXRlIDw8IC9hMCA8PCAvY2EgMSAvQ0EgMSA+PiA+Pic7CgkJCQkkb3V0IC49ICcgL1BhdHRlcm4gPDwgL3AnLiRpZGdzLicgJy4kdGhpcy0+Z3JhZGllbnRzWyRpZGdzXVsncGF0dGVybiddLicgMCBSID4+JzsKCQkJCSRvdXQgLj0gJyA+Pic7CgkJCQkkb3V0IC49ICcgPj4gJzsKCQkJCSRvdXQgLj0gJyBzdHJlYW0nLiJcbiIuJHN0cmVhbS4iXG4iLidlbmRzdHJlYW0nOwoJCQkJJG91dCAuPSAiXG4iLidlbmRvYmonOwoJCQkJJHRoaXMtPl9vdXQoJG91dCk7CgkJCQkvLyBTTWFzawoJCQkJJHRoaXMtPl9uZXdvYmooKTsKCQkJCSRvdXQgPSAnPDwgL1R5cGUgL01hc2sgL1MgL0x1bWlub3NpdHkgL0cgJy4oJHRoaXMtPm4gLSAxKS4nIDAgUiA+PicuIlxuIi4nZW5kb2JqJzsKCQkJCSR0aGlzLT5fb3V0KCRvdXQpOwoJCQkJLy8gRXh0R1N0YXRlCgkJCQkkdGhpcy0+X25ld29iaigpOwoJCQkJJG91dCA9ICc8PCAvVHlwZSAvRXh0R1N0YXRlIC9TTWFzayAnLigkdGhpcy0+biAtIDEpLicgMCBSIC9BSVMgZmFsc2UgPj4nLiJcbiIuJ2VuZG9iaic7CgkJCQkkdGhpcy0+X291dCgkb3V0KTsKCQkJCSR0aGlzLT5leHRnc3RhdGVzW10gPSBhcnJheSgnbicgPT4gJHRoaXMtPm4sICduYW1lJyA9PiAnVEdTJy4kaWQpOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogRHJhdyB0aGUgc2VjdG9yIG9mIGEgY2lyY2xlLgoJICogSXQgY2FuIGJlIHVzZWQgZm9yIGluc3RhbmNlIHRvIHJlbmRlciBwaWUgY2hhcnRzLgoJICogQHBhcmFtICR4YyAoZmxvYXQpIGFic2Npc3NhIG9mIHRoZSBjZW50ZXIuCgkgKiBAcGFyYW0gJHljIChmbG9hdCkgb3JkaW5hdGUgb2YgdGhlIGNlbnRlci4KCSAqIEBwYXJhbSAkciAoZmxvYXQpIHJhZGl1cy4KCSAqIEBwYXJhbSAkYSAoZmxvYXQpIHN0YXJ0IGFuZ2xlIChpbiBkZWdyZWVzKS4KCSAqIEBwYXJhbSAkYiAoZmxvYXQpIGVuZCBhbmdsZSAoaW4gZGVncmVlcykuCgkgKiBAcGFyYW0gJHN0eWxlIChzdHJpbmcpIFN0eWxlIG9mIHJlbmRlcmluZy4gU2VlIHRoZSBnZXRQYXRoUGFpbnRPcGVyYXRvcigpIGZ1bmN0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLgoJICogQHBhcmFtICRjdzogKGZsb2F0KSBpbmRpY2F0ZXMgd2hldGhlciB0byBnbyBjbG9ja3dpc2UgKGRlZmF1bHQ6IHRydWUpLgoJICogQHBhcmFtICRvOiAoZmxvYXQpIG9yaWdpbiBvZiBhbmdsZXMgKDAgZm9yIDMgbydjbG9jaywgOTAgZm9yIG5vb24sIDE4MCBmb3IgOSBvJ2Nsb2NrLCAyNzAgZm9yIDYgbydjbG9jaykuIERlZmF1bHQ6IDkwLgoJICogQGF1dGhvciBNYXhpbWUgRGVsb3JtZSwgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgMy4xLjAwMCAoMjAwOC0wNi0wOSkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIFBpZVNlY3RvcigkeGMsICR5YywgJHIsICRhLCAkYiwgJHN0eWxlPSdGRCcsICRjdz10cnVlLCAkbz05MCkgewoJCSR0aGlzLT5QaWVTZWN0b3JYWSgkeGMsICR5YywgJHIsICRyLCAkYSwgJGIsICRzdHlsZSwgJGN3LCAkbyk7Cgl9CgoJLyoqCgkgKiBEcmF3IHRoZSBzZWN0b3Igb2YgYW4gZWxsaXBzZS4KCSAqIEl0IGNhbiBiZSB1c2VkIGZvciBpbnN0YW5jZSB0byByZW5kZXIgcGllIGNoYXJ0cy4KCSAqIEBwYXJhbSAkeGMgKGZsb2F0KSBhYnNjaXNzYSBvZiB0aGUgY2VudGVyLgoJICogQHBhcmFtICR5YyAoZmxvYXQpIG9yZGluYXRlIG9mIHRoZSBjZW50ZXIuCgkgKiBAcGFyYW0gJHJ4IChmbG9hdCkgdGhlIHgtYXhpcyByYWRpdXMuCgkgKiBAcGFyYW0gJHJ5IChmbG9hdCkgdGhlIHktYXhpcyByYWRpdXMuCgkgKiBAcGFyYW0gJGEgKGZsb2F0KSBzdGFydCBhbmdsZSAoaW4gZGVncmVlcykuCgkgKiBAcGFyYW0gJGIgKGZsb2F0KSBlbmQgYW5nbGUgKGluIGRlZ3JlZXMpLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFNlZSB0aGUgZ2V0UGF0aFBhaW50T3BlcmF0b3IoKSBmdW5jdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KCSAqIEBwYXJhbSAkY3c6IChmbG9hdCkgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZ28gY2xvY2t3aXNlLgoJICogQHBhcmFtICRvOiAoZmxvYXQpIG9yaWdpbiBvZiBhbmdsZXMgKDAgZm9yIDMgbydjbG9jaywgOTAgZm9yIG5vb24sIDE4MCBmb3IgOSBvJ2Nsb2NrLCAyNzAgZm9yIDYgbydjbG9jaykuCgkgKiBAcGFyYW0gJG5jIChpbnRlZ2VyKSBOdW1iZXIgb2YgY3VydmVzIHVzZWQgdG8gZHJhdyBhIDkwIGRlZ3JlZXMgcG9ydGlvbiBvZiBhcmMuCgkgKiBAYXV0aG9yIE1heGltZSBEZWxvcm1lLCBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAzLjEuMDAwICgyMDA4LTA2LTA5KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gUGllU2VjdG9yWFkoJHhjLCAkeWMsICRyeCwgJHJ5LCAkYSwgJGIsICRzdHlsZT0nRkQnLCAkY3c9ZmFsc2UsICRvPTAsICRuYz0yKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR4YyA9ICgkdGhpcy0+dyAtICR4Yyk7CgkJfQoJCSRvcCA9IFRDUERGX1NUQVRJQzo6Z2V0UGF0aFBhaW50T3BlcmF0b3IoJHN0eWxlKTsKCQlpZiAoJG9wID09ICdmJykgewoJCQkkbGluZV9zdHlsZSA9IGFycmF5KCk7CgkJfQoJCWlmICgkY3cpIHsKCQkJJGQgPSAkYjsKCQkJJGIgPSAoMzYwIC0gJGEgKyAkbyk7CgkJCSRhID0gKDM2MCAtICRkICsgJG8pOwoJCX0gZWxzZSB7CgkJCSRiICs9ICRvOwoJCQkkYSArPSAkbzsKCQl9CgkJJHRoaXMtPl9vdXRlbGxpcHRpY2FsYXJjKCR4YywgJHljLCAkcngsICRyeSwgMCwgJGEsICRiLCB0cnVlLCAkbmMpOwoJCSR0aGlzLT5fb3V0KCRvcCk7Cgl9CgoJLyoqCgkgKiBFbWJlZCB2ZWN0b3ItYmFzZWQgQWRvYmUgSWxsdXN0cmF0b3IgKEFJKSBvciBBSS1jb21wYXRpYmxlIEVQUyBmaWxlcy4KCSAqIE5PVEU6IEVQUyBpcyBub3QgeWV0IGZ1bGx5IGltcGxlbWVudGVkLCB1c2UgdGhlIHNldFJhc3Rlcml6ZVZlY3RvckltYWdlcygpIG1ldGhvZCB0byBlbmFibGUvZGlzYWJsZSByYXN0ZXJpemF0aW9uIG9mIHZlY3RvciBpbWFnZXMgdXNpbmcgSW1hZ2VNYWdpY2sgbGlicmFyeS4KCSAqIE9ubHkgdmVjdG9yIGRyYXdpbmcgaXMgc3VwcG9ydGVkLCBub3QgdGV4dCBvciBiaXRtYXAuCgkgKiBBbHRob3VnaCB0aGUgc2NyaXB0IHdhcyBzdWNjZXNzZnVsbHkgdGVzdGVkIHdpdGggdmFyaW91cyBBSSBmb3JtYXQgdmVyc2lvbnMsIGJlc3QgcmVzdWx0cyBhcmUgcHJvYmFibHkgYWNoaWV2ZWQgd2l0aCBmaWxlcyB0aGF0IHdlcmUgZXhwb3J0ZWQgaW4gdGhlIEFJMyBmb3JtYXQgKHRlc3RlZCB3aXRoIElsbHVzdHJhdG9yIENTMiwgRnJlZWhhbmQgTVggYW5kIFBob3Rvc2hvcCBDUzIpLgoJICogQHBhcmFtICRmaWxlIChzdHJpbmcpIE5hbWUgb2YgdGhlIGZpbGUgY29udGFpbmluZyB0aGUgaW1hZ2Ugb3IgYSAnQCcgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5IHRoZSBFUFMvQUkgZGF0YSBzdHJpbmcuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBBYnNjaXNzYSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBPcmRpbmF0ZSBvZiB0aGUgdXBwZXItbGVmdCBjb3JuZXIuCgkgKiBAcGFyYW0gJHcgKGZsb2F0KSBXaWR0aCBvZiB0aGUgaW1hZ2UgaW4gdGhlIHBhZ2UuIElmIG5vdCBzcGVjaWZpZWQgb3IgZXF1YWwgdG8gemVybywgaXQgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgoJICogQHBhcmFtICRoIChmbG9hdCkgSGVpZ2h0IG9mIHRoZSBpbWFnZSBpbiB0aGUgcGFnZS4gSWYgbm90IHNwZWNpZmllZCBvciBlcXVhbCB0byB6ZXJvLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGNhbGN1bGF0ZWQuCgkgKiBAcGFyYW0gJGxpbmsgKG1peGVkKSBVUkwgb3IgaWRlbnRpZmllciByZXR1cm5lZCBieSBBZGRMaW5rKCkuCgkgKiBAcGFyYW0gJHVzZUJvdW5kaW5nQm94IChib29sZWFuKSBzcGVjaWZpZXMgd2hldGhlciB0byBwb3NpdGlvbiB0aGUgYm91bmRpbmcgYm94ICh0cnVlKSBvciB0aGUgY29tcGxldGUgY2FudmFzIChmYWxzZSkgYXQgbG9jYXRpb24gKHgseSkuIERlZmF1bHQgdmFsdWUgaXMgdHJ1ZS4KCSAqIEBwYXJhbSAkYWxpZ24gKHN0cmluZykgSW5kaWNhdGVzIHRoZSBhbGlnbm1lbnQgb2YgdGhlIHBvaW50ZXIgbmV4dCB0byBpbWFnZSBpbnNlcnRpb24gcmVsYXRpdmUgdG8gaW1hZ2UgaGVpZ2h0LiBUaGUgdmFsdWUgY2FuIGJlOjx1bD48bGk+VDogdG9wLXJpZ2h0IGZvciBMVFIgb3IgdG9wLWxlZnQgZm9yIFJUTDwvbGk+PGxpPk06IG1pZGRsZS1yaWdodCBmb3IgTFRSIG9yIG1pZGRsZS1sZWZ0IGZvciBSVEw8L2xpPjxsaT5COiBib3R0b20tcmlnaHQgZm9yIExUUiBvciBib3R0b20tbGVmdCBmb3IgUlRMPC9saT48bGk+TjogbmV4dCBsaW5lPC9saT48L3VsPgoJICogQHBhcmFtICRwYWxpZ24gKHN0cmluZykgQWxsb3dzIHRvIGNlbnRlciBvciBhbGlnbiB0aGUgaW1hZ2Ugb24gdGhlIGN1cnJlbnQgbGluZS4gUG9zc2libGUgdmFsdWVzIGFyZTo8dWw+PGxpPkwgOiBsZWZ0IGFsaWduPC9saT48bGk+QyA6IGNlbnRlcjwvbGk+PGxpPlIgOiByaWdodCBhbGlnbjwvbGk+PGxpPicnIDogZW1wdHkgc3RyaW5nIDogbGVmdCBmb3IgTFRSIG9yIHJpZ2h0IGZvciBSVEw8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGJvcmRlciAobWl4ZWQpIEluZGljYXRlcyBpZiBib3JkZXJzIG11c3QgYmUgZHJhd24gYXJvdW5kIHRoZSBjZWxsLiBUaGUgdmFsdWUgY2FuIGJlIGEgbnVtYmVyOjx1bD48bGk+MDogbm8gYm9yZGVyIChkZWZhdWx0KTwvbGk+PGxpPjE6IGZyYW1lPC9saT48L3VsPiBvciBhIHN0cmluZyBjb250YWluaW5nIHNvbWUgb3IgYWxsIG9mIHRoZSBmb2xsb3dpbmcgY2hhcmFjdGVycyAoaW4gYW55IG9yZGVyKTo8dWw+PGxpPkw6IGxlZnQ8L2xpPjxsaT5UOiB0b3A8L2xpPjxsaT5SOiByaWdodDwvbGk+PGxpPkI6IGJvdHRvbTwvbGk+PC91bD4gb3IgYW4gYXJyYXkgb2YgbGluZSBzdHlsZXMgZm9yIGVhY2ggYm9yZGVyIGdyb3VwIC0gZm9yIGV4YW1wbGU6IGFycmF5KCdMVFJCJyA9PiBhcnJheSgnd2lkdGgnID0+IDIsICdjYXAnID0+ICdidXR0JywgJ2pvaW4nID0+ICdtaXRlcicsICdkYXNoJyA9PiAwLCAnY29sb3InID0+IGFycmF5KDAsIDAsIDApKSkKCSAqIEBwYXJhbSAkZml0b25wYWdlIChib29sZWFuKSBpZiB0cnVlIHRoZSBpbWFnZSBpcyByZXNpemVkIHRvIG5vdCBleGNlZWQgcGFnZSBkaW1lbnNpb25zLgoJICogQHBhcmFtICRmaXhvdXR2YWxzIChib29sZWFuKSBpZiB0cnVlIHJlbW92ZSB2YWx1ZXMgb3V0c2lkZSB0aGUgYm91bmRpbmcgYm94LgoJICogQGF1dGhvciBWYWxlbnRpbiBTY2htaWR0LCBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSAzLjEuMDAwICgyMDA4LTA2LTA5KQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gSW1hZ2VFcHMoJGZpbGUsICR4PScnLCAkeT0nJywgJHc9MCwgJGg9MCwgJGxpbms9JycsICR1c2VCb3VuZGluZ0JveD10cnVlLCAkYWxpZ249JycsICRwYWxpZ249JycsICRib3JkZXI9MCwgJGZpdG9ucGFnZT1mYWxzZSwgJGZpeG91dHZhbHM9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJIHJldHVybjsKCQl9CgkJaWYgKCR0aGlzLT5yYXN0ZXJpemVfdmVjdG9yX2ltYWdlcyBBTkQgKCR3ID4gMCkgQU5EICgkaCA+IDApKSB7CgkJCS8vIGNvbnZlcnQgRVBTIHRvIHJhc3RlciBpbWFnZSB1c2luZyBHRCBvciBJbWFnZU1hZ2ljayBsaWJyYXJpZXMKCQkJcmV0dXJuICR0aGlzLT5JbWFnZSgkZmlsZSwgJHgsICR5LCAkdywgJGgsICdFUFMnLCAkbGluaywgJGFsaWduLCB0cnVlLCAzMDAsICRwYWxpZ24sIGZhbHNlLCBmYWxzZSwgJGJvcmRlciwgZmFsc2UsIGZhbHNlLCAkZml0b25wYWdlKTsKCQl9CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQkkayA9ICR0aGlzLT5rOwoJCWlmICgkZmlsZVswXSA9PT0gJ0AnKSB7IC8vIGltYWdlIGZyb20gc3RyaW5nCgkJCSRkYXRhID0gc3Vic3RyKCRmaWxlLCAxKTsKCQl9IGVsc2UgeyAvLyBFUFMvQUkgZmlsZQoJCQkkZGF0YSA9IFRDUERGX1NUQVRJQzo6ZmlsZUdldENvbnRlbnRzKCRmaWxlKTsKCQl9CgkJaWYgKCRkYXRhID09PSBGQUxTRSkgewoJCQkkdGhpcy0+RXJyb3IoJ0VQUyBmaWxlIG5vdCBmb3VuZDogJy4kZmlsZSk7CgkJfQoJCSRyZWdzID0gYXJyYXkoKTsKCQkvLyBFUFMvQUkgY29tcGF0aWJpbGl0eSBjaGVjayAob25seSBjaGVja3MgZmlsZXMgY3JlYXRlZCBieSBBZG9iZSBJbGx1c3RyYXRvciEpCgkJcHJlZ19tYXRjaCgiLyUlQ3JlYXRvcjooW15cclxuXSspLyIsICRkYXRhLCAkcmVncyk7ICMgZmluZCBDcmVhdG9yCgkJaWYgKGNvdW50KCRyZWdzKSA+IDEpIHsKCQkJJHZlcnNpb25fc3RyID0gdHJpbSgkcmVnc1sxXSk7ICMgZS5nLiAiQWRvYmUgSWxsdXN0cmF0b3IoUikgOC4wIgoJCQlpZiAoc3RycG9zKCR2ZXJzaW9uX3N0ciwgJ0Fkb2JlIElsbHVzdHJhdG9yJykgIT09IGZhbHNlKSB7CgkJCQkkdmVyc2V4cCA9IGV4cGxvZGUoJyAnLCAkdmVyc2lvbl9zdHIpOwoJCQkJJHZlcnNpb24gPSAoZmxvYXQpYXJyYXlfcG9wKCR2ZXJzZXhwKTsKCQkJCWlmICgkdmVyc2lvbiA+PSA5KSB7CgkJCQkJJHRoaXMtPkVycm9yKCdUaGlzIHZlcnNpb24gb2YgQWRvYmUgSWxsdXN0cmF0b3IgZmlsZSBpcyBub3Qgc3VwcG9ydGVkOiAnLiRmaWxlKTsKCQkJCX0KCQkJfQoJCX0KCQkvLyBzdHJpcCBiaW5hcnkgYnl0ZXMgaW4gZnJvbnQgb2YgUFMtaGVhZGVyCgkJJHN0YXJ0ID0gc3RycG9zKCRkYXRhLCAnJSFQUy1BZG9iZScpOwoJCWlmICgkc3RhcnQgPiAwKSB7CgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAkc3RhcnQpOwoJCX0KCQkvLyBmaW5kIEJvdW5kaW5nQm94IHBhcmFtcwoJCXByZWdfbWF0Y2goIi8lJUJvdW5kaW5nQm94OihbXlxyXG5dKykvIiwgJGRhdGEsICRyZWdzKTsKCQlpZiAoY291bnQoJHJlZ3MpID4gMSkgewoJCQlsaXN0KCR4MSwgJHkxLCAkeDIsICR5MikgPSBleHBsb2RlKCcgJywgdHJpbSgkcmVnc1sxXSkpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5FcnJvcignTm8gQm91bmRpbmdCb3ggZm91bmQgaW4gRVBTL0FJIGZpbGU6ICcuJGZpbGUpOwoJCX0KCQkkc3RhcnQgPSBzdHJwb3MoJGRhdGEsICclJUVuZFNldHVwJyk7CgkJaWYgKCRzdGFydCA9PT0gZmFsc2UpIHsKCQkJJHN0YXJ0ID0gc3RycG9zKCRkYXRhLCAnJSVFbmRQcm9sb2cnKTsKCQl9CgkJaWYgKCRzdGFydCA9PT0gZmFsc2UpIHsKCQkJJHN0YXJ0ID0gc3RycG9zKCRkYXRhLCAnJSVCb3VuZGluZ0JveCcpOwoJCX0KCQkkZGF0YSA9IHN1YnN0cigkZGF0YSwgJHN0YXJ0KTsKCQkkZW5kID0gc3RycG9zKCRkYXRhLCAnJSVQYWdlVHJhaWxlcicpOwoJCWlmICgkZW5kPT09ZmFsc2UpIHsKCQkJJGVuZCA9IHN0cnBvcygkZGF0YSwgJ3Nob3dwYWdlJyk7CgkJfQoJCWlmICgkZW5kKSB7CgkJCSRkYXRhID0gc3Vic3RyKCRkYXRhLCAwLCAkZW5kKTsKCQl9CgkJLy8gY2FsY3VsYXRlIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQgb24gZG9jdW1lbnQKCQlpZiAoKCR3IDw9IDApIEFORCAoJGggPD0gMCkpIHsKCQkJJHcgPSAoJHgyIC0gJHgxKSAvICRrOwoJCQkkaCA9ICgkeTIgLSAkeTEpIC8gJGs7CgkJfSBlbHNlaWYgKCR3IDw9IDApIHsKCQkJJHcgPSAoJHgyLSR4MSkgLyAkayAqICgkaCAvICgoJHkyIC0gJHkxKSAvICRrKSk7CgkJfSBlbHNlaWYgKCRoIDw9IDApIHsKCQkJJGggPSAoJHkyIC0gJHkxKSAvICRrICogKCR3IC8gKCgkeDIgLSAkeDEpIC8gJGspKTsKCQl9CgkJLy8gZml0IHRoZSBpbWFnZSBvbiBhdmFpbGFibGUgc3BhY2UKCQlsaXN0KCR3LCAkaCwgJHgsICR5KSA9ICR0aGlzLT5maXRCbG9jaygkdywgJGgsICR4LCAkeSwgJGZpdG9ucGFnZSk7CgkJaWYgKCR0aGlzLT5yYXN0ZXJpemVfdmVjdG9yX2ltYWdlcykgewoJCQkvLyBjb252ZXJ0IEVQUyB0byByYXN0ZXIgaW1hZ2UgdXNpbmcgR0Qgb3IgSW1hZ2VNYWdpY2sgbGlicmFyaWVzCgkJCXJldHVybiAkdGhpcy0+SW1hZ2UoJGZpbGUsICR4LCAkeSwgJHcsICRoLCAnRVBTJywgJGxpbmssICRhbGlnbiwgdHJ1ZSwgMzAwLCAkcGFsaWduLCBmYWxzZSwgZmFsc2UsICRib3JkZXIsIGZhbHNlLCBmYWxzZSwgJGZpdG9ucGFnZSk7CgkJfQoJCS8vIHNldCBzY2FsaW5nIGZhY3RvcnMKCQkkc2NhbGVfeCA9ICR3IC8gKCgkeDIgLSAkeDEpIC8gJGspOwoJCSRzY2FsZV95ID0gJGggLyAoKCR5MiAtICR5MSkgLyAkayk7CgkJLy8gc2V0IGFsaWdubWVudAoJCSR0aGlzLT5pbWdfcmJfeSA9ICR5ICsgJGg7CgkJLy8gc2V0IGFsaWdubWVudAoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCWlmICgkcGFsaWduID09ICdMJykgewoJCQkJJHhpbWcgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ0MnKSB7CgkJCQkkeGltZyA9ICgkdGhpcy0+dyArICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW4gLSAkdykgLyAyOwoJCQl9IGVsc2VpZiAoJHBhbGlnbiA9PSAnUicpIHsKCQkJCSR4aW1nID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhpbWcgPSAkeCAtICR3OwoJCQl9CgkJCSR0aGlzLT5pbWdfcmJfeCA9ICR4aW1nOwoJCX0gZWxzZSB7CgkJCWlmICgkcGFsaWduID09ICdMJykgewoJCQkJJHhpbWcgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ0MnKSB7CgkJCQkkeGltZyA9ICgkdGhpcy0+dyArICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW4gLSAkdykgLyAyOwoJCQl9IGVsc2VpZiAoJHBhbGlnbiA9PSAnUicpIHsKCQkJCSR4aW1nID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhpbWcgPSAkeDsKCQkJfQoJCQkkdGhpcy0+aW1nX3JiX3ggPSAkeGltZyArICR3OwoJCX0KCQlpZiAoJHVzZUJvdW5kaW5nQm94KSB7CgkJCSRkeCA9ICR4aW1nICogJGsgLSAkeDE7CgkJCSRkeSA9ICR5ICogJGsgLSAkeTE7CgkJfSBlbHNlIHsKCQkJJGR4ID0gJHhpbWcgKiAkazsKCQkJJGR5ID0gJHkgKiAkazsKCQl9CgkJLy8gc2F2ZSB0aGUgY3VycmVudCBncmFwaGljIHN0YXRlCgkJJHRoaXMtPl9vdXQoJ3EnLiR0aGlzLT5lcHNtYXJrZXIpOwoJCS8vIHRyYW5zbGF0ZQoJCSR0aGlzLT5fb3V0KHNwcmludGYoJyVGICVGICVGICVGICVGICVGIGNtJywgMSwgMCwgMCwgMSwgJGR4LCAkZHkgKyAoJHRoaXMtPmhQdCAtICgyICogJHkgKiAkaykgLSAoJHkyIC0gJHkxKSkpKTsKCQkvLyBzY2FsZQoJCWlmIChpc3NldCgkc2NhbGVfeCkpIHsKCQkJJHRoaXMtPl9vdXQoc3ByaW50ZignJUYgJUYgJUYgJUYgJUYgJUYgY20nLCAkc2NhbGVfeCwgMCwgMCwgJHNjYWxlX3ksICR4MSAqICgxIC0gJHNjYWxlX3gpLCAkeTIgKiAoMSAtICRzY2FsZV95KSkpOwoJCX0KCQkvLyBoYW5kbGUgcGMvdW5peC9tYWMgbGluZSBlbmRpbmdzCgkJJGxpbmVzID0gcHJlZ19zcGxpdCgnL1tcclxuXSsvc2knLCAkZGF0YSwgLTEsIFBSRUdfU1BMSVRfTk9fRU1QVFkpOwoJCSR1PTA7CgkJJGNudCA9IGNvdW50KCRsaW5lcyk7CgkJZm9yICgkaT0wOyAkaSA8ICRjbnQ7ICsrJGkpIHsKCQkJJGxpbmUgPSAkbGluZXNbJGldOwoJCQlpZiAoKCRsaW5lID09ICcnKSBPUiAoJGxpbmVbMF0gPT0gJyUnKSkgewoJCQkJY29udGludWU7CgkJCX0KCQkJJGxlbiA9IHN0cmxlbigkbGluZSk7CgkJCS8vIGNoZWNrIGZvciBzcG90IGNvbG9yIG5hbWVzCgkJCSRjb2xvcl9uYW1lID0gJyc7CgkJCWlmIChzdHJjYXNlY21wKCd4Jywgc3Vic3RyKHRyaW0oJGxpbmUpLCAtMSkpID09IDApIHsKCQkJCWlmIChwcmVnX21hdGNoKCcvXChbXlwpXSpcKS8nLCAkbGluZSwgJG1hdGNoZXMpID4gMCkgewoJCQkJCS8vIGV4dHJhY3Qgc3BvdCBjb2xvciBuYW1lCgkJCQkJJGNvbG9yX25hbWUgPSAkbWF0Y2hlc1swXTsKCQkJCQkvLyByZW1vdmUgY29sb3IgbmFtZSBmcm9tIHN0cmluZwoJCQkJCSRsaW5lID0gc3RyX3JlcGxhY2UoJyAnLiRjb2xvcl9uYW1lLCAnJywgJGxpbmUpOwoJCQkJCS8vIHJlbW92ZSBwaGFyZW50ZXNpcyBmcm9tIGNvbG9yIG5hbWUKCQkJCQkkY29sb3JfbmFtZSA9IHN1YnN0cigkY29sb3JfbmFtZSwgMSwgLTEpOwoJCQkJfQoJCQl9CgkJCSRjaHVua3MgPSBleHBsb2RlKCcgJywgJGxpbmUpOwoJCQkkY21kID0gdHJpbShhcnJheV9wb3AoJGNodW5rcykpOwoJCQkvLyBSR0IKCQkJaWYgKCgkY21kID09ICdYYScpIE9SICgkY21kID09ICdYQScpKSB7CgkJCQkkYiA9IGFycmF5X3BvcCgkY2h1bmtzKTsKCQkJCSRnID0gYXJyYXlfcG9wKCRjaHVua3MpOwoJCQkJJHIgPSBhcnJheV9wb3AoJGNodW5rcyk7CgkJCQkkdGhpcy0+X291dCgnJy4kci4nICcuJGcuJyAnLiRiLicgJy4oJGNtZD09J1hhJz8ncmcnOidSRycpKTsgLy9zdWJzdHIoJGxpbmUsIDAsIC0yKS4ncmcnIC0+IGluIEVQUyAoQUk4KTogYyBtIHkgayByIGcgYiByZyEKCQkJCWNvbnRpbnVlOwoJCQl9CgkJCSRza2lwID0gZmFsc2U7CgkJCWlmICgkZml4b3V0dmFscykgewoJCQkJLy8gY2hlY2sgZm9yIHZhbHVlcyBvdXRzaWRlIHRoZSBib3VuZGluZyBib3gKCQkJCXN3aXRjaCAoJGNtZCkgewoJCQkJCWNhc2UgJ20nOgoJCQkJCWNhc2UgJ2wnOgoJCQkJCWNhc2UgJ0wnOiB7CgkJCQkJCS8vIHNraXAgdmFsdWVzIG91dHNpZGUgYm91bmRpbmcgYm94CgkJCQkJCWZvcmVhY2ggKCRjaHVua3MgYXMgJGtleSA9PiAkdmFsKSB7CgkJCQkJCQlpZiAoKCgka2V5ICUgMikgPT0gMCkgQU5EICgoJHZhbCA8ICR4MSkgT1IgKCR2YWwgPiAkeDIpKSkgewoJCQkJCQkJCSRza2lwID0gdHJ1ZTsKCQkJCQkJCX0gZWxzZWlmICgoKCRrZXkgJSAyKSAhPSAwKSBBTkQgKCgkdmFsIDwgJHkxKSBPUiAoJHZhbCA+ICR5MikpKSB7CgkJCQkJCQkJJHNraXAgPSB0cnVlOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJCXN3aXRjaCAoJGNtZCkgewoJCQkJY2FzZSAnbSc6CgkJCQljYXNlICdsJzoKCQkJCWNhc2UgJ3YnOgoJCQkJY2FzZSAneSc6CgkJCQljYXNlICdjJzoKCQkJCWNhc2UgJ2snOgoJCQkJY2FzZSAnSyc6CgkJCQljYXNlICdnJzoKCQkJCWNhc2UgJ0cnOgoJCQkJY2FzZSAncyc6CgkJCQljYXNlICdTJzoKCQkJCWNhc2UgJ0onOgoJCQkJY2FzZSAnaic6CgkJCQljYXNlICd3JzoKCQkJCWNhc2UgJ00nOgoJCQkJY2FzZSAnZCc6CgkJCQljYXNlICduJzogewoJCQkJCWlmICgkc2tpcCkgewoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJJHRoaXMtPl9vdXQoJGxpbmUpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAneCc6IHsvLyBjdXN0b20gZmlsbCBjb2xvcgoJCQkJCWlmIChlbXB0eSgkY29sb3JfbmFtZSkpIHsKCQkJCQkJLy8gQ01ZSyBjb2xvcgoJCQkJCQlsaXN0KCRjb2xfYywgJGNvbF9tLCAkY29sX3ksICRjb2xfaykgPSAkY2h1bmtzOwoJCQkJCQkkdGhpcy0+X291dCgnJy4kY29sX2MuJyAnLiRjb2xfbS4nICcuJGNvbF95LicgJy4kY29sX2suJyBrJyk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gU3BvdCBDb2xvciAoQ01ZSyArIHRpbnQpCgkJCQkJCWxpc3QoJGNvbF9jLCAkY29sX20sICRjb2xfeSwgJGNvbF9rLCAkY29sX3QpID0gJGNodW5rczsKCQkJCQkJJHRoaXMtPkFkZFNwb3RDb2xvcigkY29sb3JfbmFtZSwgKCRjb2xfYyAqIDEwMCksICgkY29sX20gKiAxMDApLCAoJGNvbF95ICogMTAwKSwgKCRjb2xfayAqIDEwMCkpOwoJCQkJCQkkY29sb3JfY21kID0gc3ByaW50ZignL0NTJWQgY3MgJUYgc2NuJywgJHRoaXMtPnNwb3RfY29sb3JzWyRjb2xvcl9uYW1lXVsnaSddLCAoMSAtICRjb2xfdCkpOwoJCQkJCQkkdGhpcy0+X291dCgkY29sb3JfY21kKTsKCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdYJzogeyAvLyBjdXN0b20gc3Ryb2tlIGNvbG9yCgkJCQkJaWYgKGVtcHR5KCRjb2xvcl9uYW1lKSkgewoJCQkJCQkvLyBDTVlLIGNvbG9yCgkJCQkJCWxpc3QoJGNvbF9jLCAkY29sX20sICRjb2xfeSwgJGNvbF9rKSA9ICRjaHVua3M7CgkJCQkJCSR0aGlzLT5fb3V0KCcnLiRjb2xfYy4nICcuJGNvbF9tLicgJy4kY29sX3kuJyAnLiRjb2xfay4nIEsnKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkvLyBTcG90IENvbG9yIChDTVlLICsgdGludCkKCQkJCQkJbGlzdCgkY29sX2MsICRjb2xfbSwgJGNvbF95LCAkY29sX2ssICRjb2xfdCkgPSAkY2h1bmtzOwoJCQkJCQkkdGhpcy0+QWRkU3BvdENvbG9yKCRjb2xvcl9uYW1lLCAoJGNvbF9jICogMTAwKSwgKCRjb2xfbSAqIDEwMCksICgkY29sX3kgKiAxMDApLCAoJGNvbF9rICogMTAwKSk7CgkJCQkJCSRjb2xvcl9jbWQgPSBzcHJpbnRmKCcvQ1MlZCBDUyAlRiBTQ04nLCAkdGhpcy0+c3BvdF9jb2xvcnNbJGNvbG9yX25hbWVdWydpJ10sICgxIC0gJGNvbF90KSk7CgkJCQkJCSR0aGlzLT5fb3V0KCRjb2xvcl9jbWQpOwoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ1knOgoJCQkJY2FzZSAnTic6CgkJCQljYXNlICdWJzoKCQkJCWNhc2UgJ0wnOgoJCQkJY2FzZSAnQyc6IHsKCQkJCQlpZiAoJHNraXApIHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCSRsaW5lWygkbGVuIC0gMSldID0gc3RydG9sb3dlcigkY21kKTsKCQkJCQkkdGhpcy0+X291dCgkbGluZSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdiJzoKCQkJCWNhc2UgJ0InOiB7CgkJCQkJJHRoaXMtPl9vdXQoJGNtZCAuICcqJyk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdmJzoKCQkJCWNhc2UgJ0YnOiB7CgkJCQkJaWYgKCR1ID4gMCkgewoJCQkJCQkkaXNVID0gZmFsc2U7CgkJCQkJCSRtYXggPSBtaW4oKCRpICsgNSksICRjbnQpOwoJCQkJCQlmb3IgKCRqID0gKCRpICsgMSk7ICRqIDwgJG1heDsgKyskaikgewoJCQkJCQkJJGlzVSA9ICgkaXNVIE9SICgoJGxpbmVzWyRqXSA9PSAnVScpIE9SICgkbGluZXNbJGpdID09ICcqVScpKSk7CgkJCQkJCX0KCQkJCQkJaWYgKCRpc1UpIHsKCQkJCQkJCSR0aGlzLT5fb3V0KCdmKicpOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPl9vdXQoJ2YqJyk7CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnKnUnOiB7CgkJCQkJKyskdTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJypVJzogewoJCQkJCS0tJHU7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJLy8gcmVzdG9yZSBwcmV2aW91cyBncmFwaGljIHN0YXRlCgkJJHRoaXMtPl9vdXQoJHRoaXMtPmVwc21hcmtlci4nUScpOwoJCWlmICghZW1wdHkoJGJvcmRlcikpIHsKCQkJJGJ4ID0gJHRoaXMtPng7CgkJCSRieSA9ICR0aGlzLT55OwoJCQkkdGhpcy0+eCA9ICR4aW1nOwoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHRoaXMtPnggKz0gJHc7CgkJCX0KCQkJJHRoaXMtPnkgPSAkeTsKCQkJJHRoaXMtPkNlbGwoJHcsICRoLCAnJywgJGJvcmRlciwgMCwgJycsIDAsICcnLCAwLCB0cnVlKTsKCQkJJHRoaXMtPnggPSAkYng7CgkJCSR0aGlzLT55ID0gJGJ5OwoJCX0KCQlpZiAoJGxpbmspIHsKCQkJJHRoaXMtPkxpbmsoJHhpbWcsICR5LCAkdywgJGgsICRsaW5rLCAwKTsKCQl9CgkJLy8gc2V0IHBvaW50ZXIgdG8gYWxpZ24gdGhlIG5leHQgdGV4dC9vYmplY3RzCgkJc3dpdGNoKCRhbGlnbikgewoJCQljYXNlICdUJzp7CgkJCQkkdGhpcy0+eSA9ICR5OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdNJzp7CgkJCQkkdGhpcy0+eSA9ICR5ICsgcm91bmQoJGgvMik7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT5pbWdfcmJfeDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0InOnsKCQkJCSR0aGlzLT55ID0gJHRoaXMtPmltZ19yYl95OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdOJzp7CgkJCQkkdGhpcy0+U2V0WSgkdGhpcy0+aW1nX3JiX3kpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDp7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkdGhpcy0+ZW5kbGluZXggPSAkdGhpcy0+aW1nX3JiX3g7Cgl9CgoJLyoqCgkgKiBTZXQgZG9jdW1lbnQgYmFyY29kZS4KCSAqIEBwYXJhbSAkYmMgKHN0cmluZykgYmFyY29kZQoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0QmFyY29kZSgkYmM9JycpIHsKCQkkdGhpcy0+YmFyY29kZSA9ICRiYzsKCX0KCgkvKioKCSAqIEdldCBjdXJyZW50IGJhcmNvZGUuCgkgKiBAcmV0dXJuIHN0cmluZwoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMTIgKDIwMDgtMDctMjQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCYXJjb2RlKCkgewoJCXJldHVybiAkdGhpcy0+YmFyY29kZTsKCX0KCgkvKioKCSAqIFByaW50IGEgTGluZWFyIEJhcmNvZGUuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBwcmludAoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIHR5cGUgb2YgYmFyY29kZSAoc2VlIHRjcGRmX2JhcmNvZGVzXzFkLnBocCBmb3Igc3VwcG9ydGVkIGZvcm1hdHMpLgoJICogQHBhcmFtICR4IChpbnQpIHggcG9zaXRpb24gaW4gdXNlciB1bml0cyAoZW1wdHkgc3RyaW5nID0gY3VycmVudCB4IHBvc2l0aW9uKQoJICogQHBhcmFtICR5IChpbnQpIHkgcG9zaXRpb24gaW4gdXNlciB1bml0cyAoZW1wdHkgc3RyaW5nID0gY3VycmVudCB5IHBvc2l0aW9uKQoJICogQHBhcmFtICR3IChpbnQpIHdpZHRoIGluIHVzZXIgdW5pdHMgKGVtcHR5IHN0cmluZyA9IHJlbWFpbmluZyBwYWdlIHdpZHRoKQoJICogQHBhcmFtICRoIChpbnQpIGhlaWdodCBpbiB1c2VyIHVuaXRzIChlbXB0eSBzdHJpbmcgPSByZW1haW5pbmcgcGFnZSBoZWlnaHQpCgkgKiBAcGFyYW0gJHhyZXMgKGZsb2F0KSB3aWR0aCBvZiB0aGUgc21hbGxlc3QgYmFyIGluIHVzZXIgdW5pdHMgKGVtcHR5IHN0cmluZyA9IGRlZmF1bHQgdmFsdWUgPSAwLjRtbSkKCSAqIEBwYXJhbSAkc3R5bGUgKGFycmF5KSBhcnJheSBvZiBvcHRpb25zOjx1bD4KCSAqIDxsaT5ib29sZWFuICRzdHlsZVsnYm9yZGVyJ10gaWYgdHJ1ZSBwcmludHMgYSBib3JkZXI8L2xpPgoJICogPGxpPmludCAkc3R5bGVbJ3BhZGRpbmcnXSBwYWRkaW5nIHRvIGxlYXZlIGFyb3VuZCB0aGUgYmFyY29kZSBpbiB1c2VyIHVuaXRzIChzZXQgdG8gJ2F1dG8nIGZvciBhdXRvbWF0aWMgcGFkZGluZyk8L2xpPgoJICogPGxpPmludCAkc3R5bGVbJ2hwYWRkaW5nJ10gaG9yaXpvbnRhbCBwYWRkaW5nIGluIHVzZXIgdW5pdHMgKHNldCB0byAnYXV0bycgZm9yIGF1dG9tYXRpYyBwYWRkaW5nKTwvbGk+CgkgKiA8bGk+aW50ICRzdHlsZVsndnBhZGRpbmcnXSB2ZXJ0aWNhbCBwYWRkaW5nIGluIHVzZXIgdW5pdHMgKHNldCB0byAnYXV0bycgZm9yIGF1dG9tYXRpYyBwYWRkaW5nKTwvbGk+CgkgKiA8bGk+YXJyYXkgJHN0eWxlWydmZ2NvbG9yJ10gY29sb3IgYXJyYXkgZm9yIGJhcnMgYW5kIHRleHQ8L2xpPgoJICogPGxpPm1peGVkICRzdHlsZVsnYmdjb2xvciddIGNvbG9yIGFycmF5IGZvciBiYWNrZ3JvdW5kIChzZXQgdG8gZmFsc2UgZm9yIHRyYW5zcGFyZW50KTwvbGk+CgkgKiA8bGk+Ym9vbGVhbiAkc3R5bGVbJ3RleHQnXSBpZiB0cnVlIHByaW50cyB0ZXh0IGJlbG93IHRoZSBiYXJjb2RlPC9saT4KCSAqIDxsaT5zdHJpbmcgJHN0eWxlWydsYWJlbCddIG92ZXJyaWRlIGRlZmF1bHQgbGFiZWw8L2xpPgoJICogPGxpPnN0cmluZyAkc3R5bGVbJ2ZvbnQnXSBmb250IG5hbWUgZm9yIHRleHQ8L2xpPjxsaT5pbnQgJHN0eWxlWydmb250c2l6ZSddIGZvbnQgc2l6ZSBmb3IgdGV4dDwvbGk+CgkgKiA8bGk+aW50ICRzdHlsZVsnc3RyZXRjaHRleHQnXTogMCA9IGRpc2FibGVkOyAxID0gaG9yaXpvbnRhbCBzY2FsaW5nIG9ubHkgaWYgbmVjZXNzYXJ5OyAyID0gZm9yY2VkIGhvcml6b250YWwgc2NhbGluZzsgMyA9IGNoYXJhY3RlciBzcGFjaW5nIG9ubHkgaWYgbmVjZXNzYXJ5OyA0ID0gZm9yY2VkIGNoYXJhY3RlciBzcGFjaW5nLjwvbGk+CgkgKiA8bGk+c3RyaW5nICRzdHlsZVsncG9zaXRpb24nXSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBjb250YWluaW5nIGJhcmNvZGUgY2VsbCBvbiB0aGUgcGFnZTogTCA9IGxlZnQgbWFyZ2luOyBDID0gY2VudGVyOyBSID0gcmlnaHQgbWFyZ2luLjwvbGk+CgkgKiA8bGk+c3RyaW5nICRzdHlsZVsnYWxpZ24nXSBob3Jpem9udGFsIHBvc2l0aW9uIG9mIHRoZSBiYXJjb2RlIG9uIHRoZSBjb250YWluaW5nIHJlY3RhbmdsZTogTCA9IGxlZnQ7IEMgPSBjZW50ZXI7IFIgPSByaWdodC48L2xpPgoJICogPGxpPnN0cmluZyAkc3R5bGVbJ3N0cmV0Y2gnXSBpZiB0cnVlIHN0cmV0Y2ggdGhlIGJhcmNvZGUgdG8gYmVzdCBmaXQgdGhlIGF2YWlsYWJsZSB3aWR0aCwgb3RoZXJ3aXNlIHVzZXMgJHhyZXMgcmVzb2x1dGlvbiBmb3IgYSBzaW5nbGUgYmFyLjwvbGk+CgkgKiA8bGk+c3RyaW5nICRzdHlsZVsnZml0d2lkdGgnXSBpZiB0cnVlIHJlZHVjZSB0aGUgd2lkdGggdG8gZml0IHRoZSBiYXJjb2RlIHdpZHRoICsgcGFkZGluZy4gV2hlbiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIHRoZSAnc3RyZXRjaCcgb3B0aW9uIGlzIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQuPC9saT4KCSAqIDxsaT5zdHJpbmcgJHN0eWxlWydjZWxsZml0YWxpZ24nXSB0aGlzIG9wdGlvbiB3b3JrcyBvbmx5IHdoZW4gJ2ZpdHdpZHRoJyBpcyB0cnVlIGFuZCAncG9zaXRpb24nIGlzIHVuc2V0IG9yIGVtcHR5LiBTZXQgdGhlIGhvcml6b250YWwgcG9zaXRpb24gb2YgdGhlIGNvbnRhaW5pbmcgYmFyY29kZSBjZWxsIGluc2lkZSB0aGUgc3BlY2lmaWVkIHJlY3RhbmdsZTogTCA9IGxlZnQ7IEMgPSBjZW50ZXI7IFIgPSByaWdodC48L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEluZGljYXRlcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVyIG5leHQgdG8gYmFyY29kZSBpbnNlcnRpb24gcmVsYXRpdmUgdG8gYmFyY29kZSBoZWlnaHQuIFRoZSB2YWx1ZSBjYW4gYmU6PHVsPjxsaT5UOiB0b3AtcmlnaHQgZm9yIExUUiBvciB0b3AtbGVmdCBmb3IgUlRMPC9saT48bGk+TTogbWlkZGxlLXJpZ2h0IGZvciBMVFIgb3IgbWlkZGxlLWxlZnQgZm9yIFJUTDwvbGk+PGxpPkI6IGJvdHRvbS1yaWdodCBmb3IgTFRSIG9yIGJvdHRvbS1sZWZ0IGZvciBSVEw8L2xpPjxsaT5OOiBuZXh0IGxpbmU8L2xpPjwvdWw+CgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDMuMS4wMDAgKDIwMDgtMDYtMDkpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiB3cml0ZTFEQmFyY29kZSgkY29kZSwgJHR5cGUsICR4PScnLCAkeT0nJywgJHc9JycsICRoPScnLCAkeHJlcz0nJywgJHN0eWxlPScnLCAkYWxpZ249JycpIHsKCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcodHJpbSgkY29kZSkpKSB7CgkJCXJldHVybjsKCQl9CgkJcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvdGNwZGZfYmFyY29kZXNfMWQucGhwJyk7CgkJLy8gc2F2ZSBjdXJyZW50IGdyYXBoaWMgc2V0dGluZ3MKCQkkZ3ZhcnMgPSAkdGhpcy0+Z2V0R3JhcGhpY1ZhcnMoKTsKCQkvLyBjcmVhdGUgbmV3IGJhcmNvZGUgb2JqZWN0CgkJJGJhcmNvZGVvYmogPSBuZXcgVENQREZCYXJjb2RlKCRjb2RlLCAkdHlwZSk7CgkJJGFycmNvZGUgPSAkYmFyY29kZW9iai0+Z2V0QmFyY29kZUFycmF5KCk7CgkJaWYgKCgkYXJyY29kZSA9PT0gZmFsc2UpIE9SIGVtcHR5KCRhcnJjb2RlKSBPUiAoJGFycmNvZGVbJ21heHcnXSA8PSAwKSkgewoJCQkkdGhpcy0+RXJyb3IoJ0Vycm9yIGluIDFEIGJhcmNvZGUgc3RyaW5nJyk7CgkJfQoJCWlmICgkYXJyY29kZVsnbWF4aCddIDw9IDApIHsKCQkJJGFycmNvZGVbJ21heGgnXSA9IDE7CgkJfQoJCS8vIHNldCBkZWZhdWx0IHZhbHVlcwoJCWlmICghaXNzZXQoJHN0eWxlWydwb3NpdGlvbiddKSkgewoJCQkkc3R5bGVbJ3Bvc2l0aW9uJ10gPSAnJzsKCQl9IGVsc2VpZiAoJHN0eWxlWydwb3NpdGlvbiddID09ICdTJykgewoJCQkvLyBrZWVwIHRoaXMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkKCQkJJHN0eWxlWydwb3NpdGlvbiddID0gJyc7CgkJCSRzdHlsZVsnc3RyZXRjaCddID0gdHJ1ZTsKCQl9CgkJaWYgKCFpc3NldCgkc3R5bGVbJ2ZpdHdpZHRoJ10pKSB7CgkJCWlmICghaXNzZXQoJHN0eWxlWydzdHJldGNoJ10pKSB7CgkJCQkkc3R5bGVbJ2ZpdHdpZHRoJ10gPSB0cnVlOwoJCQl9IGVsc2UgewoJCQkJJHN0eWxlWydmaXR3aWR0aCddID0gZmFsc2U7CgkJCX0KCQl9CgkJaWYgKCRzdHlsZVsnZml0d2lkdGgnXSkgewoJCQkvLyBkaXNhYmxlIHN0cmV0Y2gKCQkJJHN0eWxlWydzdHJldGNoJ10gPSBmYWxzZTsKCQl9CgkJaWYgKCFpc3NldCgkc3R5bGVbJ3N0cmV0Y2gnXSkpIHsKCQkJaWYgKCgkdyA9PT0gJycpIE9SICgkdyA8PSAwKSkgewoJCQkJJHN0eWxlWydzdHJldGNoJ10gPSBmYWxzZTsKCQkJfSBlbHNlIHsKCQkJCSRzdHlsZVsnc3RyZXRjaCddID0gdHJ1ZTsKCQkJfQoJCX0KCQlpZiAoIWlzc2V0KCRzdHlsZVsnZmdjb2xvciddKSkgewoJCQkkc3R5bGVbJ2ZnY29sb3InXSA9IGFycmF5KDAsMCwwKTsgLy8gZGVmYXVsdCBibGFjawoJCX0KCQlpZiAoIWlzc2V0KCRzdHlsZVsnYmdjb2xvciddKSkgewoJCQkkc3R5bGVbJ2JnY29sb3InXSA9IGZhbHNlOyAvLyBkZWZhdWx0IHRyYW5zcGFyZW50CgkJfQoJCWlmICghaXNzZXQoJHN0eWxlWydib3JkZXInXSkpIHsKCQkJJHN0eWxlWydib3JkZXInXSA9IGZhbHNlOwoJCX0KCQkkZm9udHNpemUgPSAwOwoJCWlmICghaXNzZXQoJHN0eWxlWyd0ZXh0J10pKSB7CgkJCSRzdHlsZVsndGV4dCddID0gZmFsc2U7CgkJfQoJCWlmICgkc3R5bGVbJ3RleHQnXSBBTkQgaXNzZXQoJHN0eWxlWydmb250J10pKSB7CgkJCWlmIChpc3NldCgkc3R5bGVbJ2ZvbnRzaXplJ10pKSB7CgkJCQkkZm9udHNpemUgPSAkc3R5bGVbJ2ZvbnRzaXplJ107CgkJCX0KCQkJJHRoaXMtPlNldEZvbnQoJHN0eWxlWydmb250J10sICcnLCAkZm9udHNpemUpOwoJCX0KCQlpZiAoIWlzc2V0KCRzdHlsZVsnc3RyZXRjaHRleHQnXSkpIHsKCQkJJHN0eWxlWydzdHJldGNodGV4dCddID0gNDsKCQl9CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQlpZiAoKCR3ID09PSAnJykgT1IgKCR3IDw9IDApKSB7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdyA9ICR4IC0gJHRoaXMtPmxNYXJnaW47CgkJCX0gZWxzZSB7CgkJCQkkdyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkeDsKCQkJfQoJCX0KCQkvLyBwYWRkaW5nCgkJaWYgKCFpc3NldCgkc3R5bGVbJ3BhZGRpbmcnXSkpIHsKCQkJJHBhZGRpbmcgPSAwOwoJCX0gZWxzZWlmICgkc3R5bGVbJ3BhZGRpbmcnXSA9PT0gJ2F1dG8nKSB7CgkJCSRwYWRkaW5nID0gMTAgKiAoJHcgLyAoJGFycmNvZGVbJ21heHcnXSArIDIwKSk7CgkJfSBlbHNlIHsKCQkJJHBhZGRpbmcgPSBmbG9hdHZhbCgkc3R5bGVbJ3BhZGRpbmcnXSk7CgkJfQoJCS8vIGhvcml6b250YWwgcGFkZGluZwoJCWlmICghaXNzZXQoJHN0eWxlWydocGFkZGluZyddKSkgewoJCQkkaHBhZGRpbmcgPSAkcGFkZGluZzsKCQl9IGVsc2VpZiAoJHN0eWxlWydocGFkZGluZyddID09PSAnYXV0bycpIHsKCQkJJGhwYWRkaW5nID0gMTAgKiAoJHcgLyAoJGFycmNvZGVbJ21heHcnXSArIDIwKSk7CgkJfSBlbHNlIHsKCQkJJGhwYWRkaW5nID0gZmxvYXR2YWwoJHN0eWxlWydocGFkZGluZyddKTsKCQl9CgkJLy8gdmVydGljYWwgcGFkZGluZwoJCWlmICghaXNzZXQoJHN0eWxlWyd2cGFkZGluZyddKSkgewoJCQkkdnBhZGRpbmcgPSAkcGFkZGluZzsKCQl9IGVsc2VpZiAoJHN0eWxlWyd2cGFkZGluZyddID09PSAnYXV0bycpIHsKCQkJJHZwYWRkaW5nID0gKCRocGFkZGluZyAvIDIpOwoJCX0gZWxzZSB7CgkJCSR2cGFkZGluZyA9IGZsb2F0dmFsKCRzdHlsZVsndnBhZGRpbmcnXSk7CgkJfQoJCS8vIGNhbGN1bGF0ZSB4cmVzIChzaW5nbGUgYmFyIHdpZHRoKQoJCSRtYXhfeHJlcyA9ICgkdyAtICgyICogJGhwYWRkaW5nKSkgLyAkYXJyY29kZVsnbWF4dyddOwoJCWlmICgkc3R5bGVbJ3N0cmV0Y2gnXSkgewoJCQkkeHJlcyA9ICRtYXhfeHJlczsKCQl9IGVsc2UgewoJCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHhyZXMpKSB7CgkJCQkkeHJlcyA9ICgwLjE0MSAqICR0aGlzLT5rKTsgLy8gZGVmYXVsdCBiYXIgd2lkdGggPSAwLjQgbW0KCQkJfQoJCQlpZiAoJHhyZXMgPiAkbWF4X3hyZXMpIHsKCQkJCS8vIGNvcnJlY3QgeHJlcyB0byBmaXQgb24gJHcKCQkJCSR4cmVzID0gJG1heF94cmVzOwoJCQl9CgkJCWlmICgoaXNzZXQoJHN0eWxlWydwYWRkaW5nJ10pIEFORCAoJHN0eWxlWydwYWRkaW5nJ10gPT09ICdhdXRvJykpCgkJCQlPUiAoaXNzZXQoJHN0eWxlWydocGFkZGluZyddKSBBTkQgKCRzdHlsZVsnaHBhZGRpbmcnXSA9PT0gJ2F1dG8nKSkpIHsKCQkJCSRocGFkZGluZyA9IDEwICogJHhyZXM7CgkJCQlpZiAoaXNzZXQoJHN0eWxlWyd2cGFkZGluZyddKSBBTkQgKCRzdHlsZVsndnBhZGRpbmcnXSA9PT0gJ2F1dG8nKSkgewoJCQkJCSR2cGFkZGluZyA9ICgkaHBhZGRpbmcgLyAyKTsKCQkJCX0KCQkJfQoJCX0KCQlpZiAoJHN0eWxlWydmaXR3aWR0aCddKSB7CgkJCSR3b2xkID0gJHc7CgkJCSR3ID0gKCgkYXJyY29kZVsnbWF4dyddICogJHhyZXMpICsgKDIgKiAkaHBhZGRpbmcpKTsKCQkJaWYgKGlzc2V0KCRzdHlsZVsnY2VsbGZpdGFsaWduJ10pKSB7CgkJCQlzd2l0Y2ggKCRzdHlsZVsnY2VsbGZpdGFsaWduJ10pIHsKCQkJCQljYXNlICdMJzogewoJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJJHggLT0gKCR3b2xkIC0gJHcpOwoJCQkJCQl9CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdSJzogewoJCQkJCQlpZiAoISR0aGlzLT5ydGwpIHsKCQkJCQkJCSR4ICs9ICgkd29sZCAtICR3KTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnQyc6IHsKCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCSR4IC09ICgoJHdvbGQgLSAkdykgLyAyKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR4ICs9ICgoJHdvbGQgLSAkdykgLyAyKTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJZGVmYXVsdCA6IHsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCSR0ZXh0X2hlaWdodCA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCRmb250c2l6ZSAvICR0aGlzLT5rKTsKCQkvLyBoZWlnaHQKCQlpZiAoKCRoID09PSAnJykgT1IgKCRoIDw9IDApKSB7CgkJCS8vIHNldCBkZWZhdWx0IGhlaWdodAoJCQkkaCA9ICgoJGFycmNvZGVbJ21heHcnXSAqICR4cmVzKSAvIDMpICsgKDIgKiAkdnBhZGRpbmcpICsgJHRleHRfaGVpZ2h0OwoJCX0KCQkkYmFyaCA9ICRoIC0gJHRleHRfaGVpZ2h0IC0gKDIgKiAkdnBhZGRpbmcpOwoJCWlmICgkYmFyaCA8PTApIHsKCQkJLy8gdHJ5IHRvIHJlZHVjZSBmb250IG9yIHBhZGRpbmcgdG8gZml0IGJhcmNvZGUgb24gYXZhaWxhYmxlIGhlaWdodAoJCQlpZiAoJHRleHRfaGVpZ2h0ID4gJGgpIHsKCQkJCSRmb250c2l6ZSA9ICgoJGggKiAkdGhpcy0+aykgLyAoNCAqICR0aGlzLT5jZWxsX2hlaWdodF9yYXRpbykpOwoJCQkJJHRleHRfaGVpZ2h0ID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJGZvbnRzaXplIC8gJHRoaXMtPmspOwoJCQkJJHRoaXMtPlNldEZvbnQoJHN0eWxlWydmb250J10sICcnLCAkZm9udHNpemUpOwoJCQl9CgkJCWlmICgkdnBhZGRpbmcgPiAwKSB7CgkJCQkkdnBhZGRpbmcgPSAoKCRoIC0gJHRleHRfaGVpZ2h0KSAvIDQpOwoJCQl9CgkJCSRiYXJoID0gJGggLSAkdGV4dF9oZWlnaHQgLSAoMiAqICR2cGFkZGluZyk7CgkJfQoJCS8vIGZpdCB0aGUgYmFyY29kZSBvbiBhdmFpbGFibGUgc3BhY2UKCQlsaXN0KCR3LCAkaCwgJHgsICR5KSA9ICR0aGlzLT5maXRCbG9jaygkdywgJGgsICR4LCAkeSwgZmFsc2UpOwoJCS8vIHNldCBhbGlnbm1lbnQKCQkkdGhpcy0+aW1nX3JiX3kgPSAkeSArICRoOwoJCS8vIHNldCBhbGlnbm1lbnQKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQlpZiAoJHN0eWxlWydwb3NpdGlvbiddID09ICdMJykgewoJCQkJJHhwb3MgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRzdHlsZVsncG9zaXRpb24nXSA9PSAnQycpIHsKCQkJCSR4cG9zID0gKCR0aGlzLT53ICsgJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbiAtICR3KSAvIDI7CgkJCX0gZWxzZWlmICgkc3R5bGVbJ3Bvc2l0aW9uJ10gPT0gJ1InKSB7CgkJCQkkeHBvcyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdzsKCQkJfSBlbHNlIHsKCQkJCSR4cG9zID0gJHggLSAkdzsKCQkJfQoJCQkkdGhpcy0+aW1nX3JiX3ggPSAkeHBvczsKCQl9IGVsc2UgewoJCQlpZiAoJHN0eWxlWydwb3NpdGlvbiddID09ICdMJykgewoJCQkJJHhwb3MgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRzdHlsZVsncG9zaXRpb24nXSA9PSAnQycpIHsKCQkJCSR4cG9zID0gKCR0aGlzLT53ICsgJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbiAtICR3KSAvIDI7CgkJCX0gZWxzZWlmICgkc3R5bGVbJ3Bvc2l0aW9uJ10gPT0gJ1InKSB7CgkJCQkkeHBvcyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdzsKCQkJfSBlbHNlIHsKCQkJCSR4cG9zID0gJHg7CgkJCX0KCQkJJHRoaXMtPmltZ19yYl94ID0gJHhwb3MgKyAkdzsKCQl9CgkJJHhwb3NfcmVjdCA9ICR4cG9zOwoJCWlmICghaXNzZXQoJHN0eWxlWydhbGlnbiddKSkgewoJCQkkc3R5bGVbJ2FsaWduJ10gPSAnQyc7CgkJfQoJCXN3aXRjaCAoJHN0eWxlWydhbGlnbiddKSB7CgkJCWNhc2UgJ0wnOiB7CgkJCQkkeHBvcyA9ICR4cG9zX3JlY3QgKyAkaHBhZGRpbmc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdSJzogewoJCQkJJHhwb3MgPSAkeHBvc19yZWN0ICsgKCR3IC0gKCRhcnJjb2RlWydtYXh3J10gKiAkeHJlcykpIC0gJGhwYWRkaW5nOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQyc6CgkJCWRlZmF1bHQgOiB7CgkJCQkkeHBvcyA9ICR4cG9zX3JlY3QgKyAoKCR3IC0gKCRhcnJjb2RlWydtYXh3J10gKiAkeHJlcykpIC8gMik7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkeHBvc190ZXh0ID0gJHhwb3M7CgkJLy8gYmFyY29kZSBpcyBhbHdheXMgcHJpbnRlZCBpbiBMVFIgZGlyZWN0aW9uCgkJJHRlbXBSVEwgPSAkdGhpcy0+cnRsOwoJCSR0aGlzLT5ydGwgPSBmYWxzZTsKCQkvLyBwcmludCBiYWNrZ3JvdW5kIGNvbG9yCgkJaWYgKCRzdHlsZVsnYmdjb2xvciddKSB7CgkJCSR0aGlzLT5SZWN0KCR4cG9zX3JlY3QsICR5LCAkdywgJGgsICRzdHlsZVsnYm9yZGVyJ10gPyAnREYnIDogJ0YnLCAnJywgJHN0eWxlWydiZ2NvbG9yJ10pOwoJCX0gZWxzZWlmICgkc3R5bGVbJ2JvcmRlciddKSB7CgkJCSR0aGlzLT5SZWN0KCR4cG9zX3JlY3QsICR5LCAkdywgJGgsICdEJyk7CgkJfQoJCS8vIHNldCBmb3JlZ3JvdW5kIGNvbG9yCgkJJHRoaXMtPlNldERyYXdDb2xvckFycmF5KCRzdHlsZVsnZmdjb2xvciddKTsKCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJHN0eWxlWydmZ2NvbG9yJ10pOwoJCS8vIHByaW50IGJhcnMKCQlmb3JlYWNoICgkYXJyY29kZVsnYmNvZGUnXSBhcyAkayA9PiAkdikgewoJCQkkYncgPSAoJHZbJ3cnXSAqICR4cmVzKTsKCQkJaWYgKCR2Wyd0J10pIHsKCQkJCS8vIGRyYXcgYSB2ZXJ0aWNhbCBiYXIKCQkJCSR5cG9zID0gJHkgKyAkdnBhZGRpbmcgKyAoJHZbJ3AnXSAqICRiYXJoIC8gJGFycmNvZGVbJ21heGgnXSk7CgkJCQkkdGhpcy0+UmVjdCgkeHBvcywgJHlwb3MsICRidywgKCR2WydoJ10gKiAkYmFyaCAvICRhcnJjb2RlWydtYXhoJ10pLCAnRicsIGFycmF5KCksICRzdHlsZVsnZmdjb2xvciddKTsKCQkJfQoJCQkkeHBvcyArPSAkYnc7CgkJfQoJCS8vIHByaW50IHRleHQKCQlpZiAoJHN0eWxlWyd0ZXh0J10pIHsKCQkJaWYgKGlzc2V0KCRzdHlsZVsnbGFiZWwnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkc3R5bGVbJ2xhYmVsJ10pKSB7CgkJCQkkbGFiZWwgPSAkc3R5bGVbJ2xhYmVsJ107CgkJCX0gZWxzZSB7CgkJCQkkbGFiZWwgPSAkY29kZTsKCQkJfQoJCQkkdHh0d2lkdGggPSAoJGFycmNvZGVbJ21heHcnXSAqICR4cmVzKTsKCQkJaWYgKCR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkbGFiZWwpID4gJHR4dHdpZHRoKSB7CgkJCQkkc3R5bGVbJ3N0cmV0Y2h0ZXh0J10gPSAyOwoJCQl9CgkJCS8vIHByaW50IHRleHQKCQkJJHRoaXMtPnggPSAkeHBvc190ZXh0OwoJCQkkdGhpcy0+eSA9ICR5ICsgJHZwYWRkaW5nICsgJGJhcmg7CgkJCSRjZWxscGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJCSR0aGlzLT5TZXRDZWxsUGFkZGluZygwKTsKCQkJJHRoaXMtPkNlbGwoJHR4dHdpZHRoLCAnJywgJGxhYmVsLCAwLCAwLCAnQycsIGZhbHNlLCAnJywgJHN0eWxlWydzdHJldGNodGV4dCddLCBmYWxzZSwgJ1QnLCAnVCcpOwoJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJGNlbGxwYWRkaW5nOwoJCX0KCQkvLyByZXN0b3JlIG9yaWdpbmFsIGRpcmVjdGlvbgoJCSR0aGlzLT5ydGwgPSAkdGVtcFJUTDsKCQkvLyByZXN0b3JlIHByZXZpb3VzIHNldHRpbmdzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJLy8gc2V0IHBvaW50ZXIgdG8gYWxpZ24gdGhlIG5leHQgdGV4dC9vYmplY3RzCgkJc3dpdGNoKCRhbGlnbikgewoJCQljYXNlICdUJzp7CgkJCQkkdGhpcy0+eSA9ICR5OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdNJzp7CgkJCQkkdGhpcy0+eSA9ICR5ICsgcm91bmQoJGggLyAyKTsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmltZ19yYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQic6ewoJCQkJJHRoaXMtPnkgPSAkdGhpcy0+aW1nX3JiX3k7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT5pbWdfcmJfeDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ04nOnsKCQkJCSR0aGlzLT5TZXRZKCR0aGlzLT5pbWdfcmJfeSk7CgkJCQlicmVhazsKCQkJfQoJCQlkZWZhdWx0OnsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT5lbmRsaW5leCA9ICR0aGlzLT5pbWdfcmJfeDsKCX0KCgkvKioKCSAqIFByaW50IDJEIEJhcmNvZGUuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBwcmludAoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIHR5cGUgb2YgYmFyY29kZSAoc2VlIHRjcGRmX2JhcmNvZGVzXzJkLnBocCBmb3Igc3VwcG9ydGVkIGZvcm1hdHMpLgoJICogQHBhcmFtICR4IChpbnQpIHggcG9zaXRpb24gaW4gdXNlciB1bml0cwoJICogQHBhcmFtICR5IChpbnQpIHkgcG9zaXRpb24gaW4gdXNlciB1bml0cwoJICogQHBhcmFtICR3IChpbnQpIHdpZHRoIGluIHVzZXIgdW5pdHMKCSAqIEBwYXJhbSAkaCAoaW50KSBoZWlnaHQgaW4gdXNlciB1bml0cwoJICogQHBhcmFtICRzdHlsZSAoYXJyYXkpIGFycmF5IG9mIG9wdGlvbnM6PHVsPgoJICogPGxpPmJvb2xlYW4gJHN0eWxlWydib3JkZXInXSBpZiB0cnVlIHByaW50cyBhIGJvcmRlciBhcm91bmQgdGhlIGJhcmNvZGU8L2xpPgoJICogPGxpPmludCAkc3R5bGVbJ3BhZGRpbmcnXSBwYWRkaW5nIHRvIGxlYXZlIGFyb3VuZCB0aGUgYmFyY29kZSBpbiBiYXJjb2RlIHVuaXRzIChzZXQgdG8gJ2F1dG8nIGZvciBhdXRvbWF0aWMgcGFkZGluZyk8L2xpPgoJICogPGxpPmludCAkc3R5bGVbJ2hwYWRkaW5nJ10gaG9yaXpvbnRhbCBwYWRkaW5nIGluIGJhcmNvZGUgdW5pdHMgKHNldCB0byAnYXV0bycgZm9yIGF1dG9tYXRpYyBwYWRkaW5nKTwvbGk+CgkgKiA8bGk+aW50ICRzdHlsZVsndnBhZGRpbmcnXSB2ZXJ0aWNhbCBwYWRkaW5nIGluIGJhcmNvZGUgdW5pdHMgKHNldCB0byAnYXV0bycgZm9yIGF1dG9tYXRpYyBwYWRkaW5nKTwvbGk+CgkgKiA8bGk+aW50ICRzdHlsZVsnbW9kdWxlX3dpZHRoJ10gd2lkdGggb2YgYSBzaW5nbGUgbW9kdWxlIGluIHBvaW50czwvbGk+CgkgKiA8bGk+aW50ICRzdHlsZVsnbW9kdWxlX2hlaWdodCddIGhlaWdodCBvZiBhIHNpbmdsZSBtb2R1bGUgaW4gcG9pbnRzPC9saT4KCSAqIDxsaT5hcnJheSAkc3R5bGVbJ2ZnY29sb3InXSBjb2xvciBhcnJheSBmb3IgYmFycyBhbmQgdGV4dDwvbGk+CgkgKiA8bGk+bWl4ZWQgJHN0eWxlWydiZ2NvbG9yJ10gY29sb3IgYXJyYXkgZm9yIGJhY2tncm91bmQgb3IgZmFsc2UgZm9yIHRyYW5zcGFyZW50PC9saT4KCSAqIDxsaT5zdHJpbmcgJHN0eWxlWydwb3NpdGlvbiddIGJhcmNvZGUgcG9zaXRpb24gb24gdGhlIHBhZ2U6IEwgPSBsZWZ0IG1hcmdpbjsgQyA9IGNlbnRlcjsgUiA9IHJpZ2h0IG1hcmdpbjsgUyA9IHN0cmV0Y2g8L2xpPjxsaT4kc3R5bGVbJ21vZHVsZV93aWR0aCddIHdpZHRoIG9mIGEgc2luZ2xlIG1vZHVsZSBpbiBwb2ludHM8L2xpPgoJICogPGxpPiRzdHlsZVsnbW9kdWxlX2hlaWdodCddIGhlaWdodCBvZiBhIHNpbmdsZSBtb2R1bGUgaW4gcG9pbnRzPC9saT48L3VsPgoJICogQHBhcmFtICRhbGlnbiAoc3RyaW5nKSBJbmRpY2F0ZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcG9pbnRlciBuZXh0IHRvIGJhcmNvZGUgaW5zZXJ0aW9uIHJlbGF0aXZlIHRvIGJhcmNvZGUgaGVpZ2h0LiBUaGUgdmFsdWUgY2FuIGJlOjx1bD48bGk+VDogdG9wLXJpZ2h0IGZvciBMVFIgb3IgdG9wLWxlZnQgZm9yIFJUTDwvbGk+PGxpPk06IG1pZGRsZS1yaWdodCBmb3IgTFRSIG9yIG1pZGRsZS1sZWZ0IGZvciBSVEw8L2xpPjxsaT5COiBib3R0b20tcmlnaHQgZm9yIExUUiBvciBib3R0b20tbGVmdCBmb3IgUlRMPC9saT48bGk+TjogbmV4dCBsaW5lPC9saT48L3VsPgoJICogQHBhcmFtICRkaXN0b3J0IChib29sZWFuKSBpZiB0cnVlIGRpc3RvcnQgdGhlIGJhcmNvZGUgdG8gZml0IHdpZHRoIGFuZCBoZWlnaHQsIG90aGVyd2lzZSBwcmVzZXJ2ZSBhc3BlY3QgcmF0aW8KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC41LjAzNyAoMjAwOS0wNC0wNykKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHdyaXRlMkRCYXJjb2RlKCRjb2RlLCAkdHlwZSwgJHg9JycsICR5PScnLCAkdz0nJywgJGg9JycsICRzdHlsZT0nJywgJGFsaWduPScnLCAkZGlzdG9ydD1mYWxzZSkgewoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZyh0cmltKCRjb2RlKSkpIHsKCQkJcmV0dXJuOwoJCX0KCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy90Y3BkZl9iYXJjb2Rlc18yZC5waHAnKTsKCQkvLyBzYXZlIGN1cnJlbnQgZ3JhcGhpYyBzZXR0aW5ncwoJCSRndmFycyA9ICR0aGlzLT5nZXRHcmFwaGljVmFycygpOwoJCS8vIGNyZWF0ZSBuZXcgYmFyY29kZSBvYmplY3QKCQkkYmFyY29kZW9iaiA9IG5ldyBUQ1BERjJEQmFyY29kZSgkY29kZSwgJHR5cGUpOwoJCSRhcnJjb2RlID0gJGJhcmNvZGVvYmotPmdldEJhcmNvZGVBcnJheSgpOwoJCWlmICgoJGFycmNvZGUgPT09IGZhbHNlKSBPUiBlbXB0eSgkYXJyY29kZSkgT1IgIWlzc2V0KCRhcnJjb2RlWydudW1fcm93cyddKSBPUiAoJGFycmNvZGVbJ251bV9yb3dzJ10gPT0gMCkgT1IgIWlzc2V0KCRhcnJjb2RlWydudW1fY29scyddKSBPUiAoJGFycmNvZGVbJ251bV9jb2xzJ10gPT0gMCkpIHsKCQkJJHRoaXMtPkVycm9yKCdFcnJvciBpbiAyRCBiYXJjb2RlIHN0cmluZycpOwoJCX0KCQkvLyBzZXQgZGVmYXVsdCB2YWx1ZXMKCQlpZiAoIWlzc2V0KCRzdHlsZVsncG9zaXRpb24nXSkpIHsKCQkJJHN0eWxlWydwb3NpdGlvbiddID0gJyc7CgkJfQoJCWlmICghaXNzZXQoJHN0eWxlWydmZ2NvbG9yJ10pKSB7CgkJCSRzdHlsZVsnZmdjb2xvciddID0gYXJyYXkoMCwwLDApOyAvLyBkZWZhdWx0IGJsYWNrCgkJfQoJCWlmICghaXNzZXQoJHN0eWxlWydiZ2NvbG9yJ10pKSB7CgkJCSRzdHlsZVsnYmdjb2xvciddID0gZmFsc2U7IC8vIGRlZmF1bHQgdHJhbnNwYXJlbnQKCQl9CgkJaWYgKCFpc3NldCgkc3R5bGVbJ2JvcmRlciddKSkgewoJCQkkc3R5bGVbJ2JvcmRlciddID0gZmFsc2U7CgkJfQoJCS8vIHBhZGRpbmcKCQlpZiAoIWlzc2V0KCRzdHlsZVsncGFkZGluZyddKSkgewoJCQkkc3R5bGVbJ3BhZGRpbmcnXSA9IDA7CgkJfSBlbHNlaWYgKCRzdHlsZVsncGFkZGluZyddID09PSAnYXV0bycpIHsKCQkJJHN0eWxlWydwYWRkaW5nJ10gPSA0OwoJCX0KCQlpZiAoIWlzc2V0KCRzdHlsZVsnaHBhZGRpbmcnXSkpIHsKCQkJJHN0eWxlWydocGFkZGluZyddID0gJHN0eWxlWydwYWRkaW5nJ107CgkJfSBlbHNlaWYgKCRzdHlsZVsnaHBhZGRpbmcnXSA9PT0gJ2F1dG8nKSB7CgkJCSRzdHlsZVsnaHBhZGRpbmcnXSA9IDQ7CgkJfQoJCWlmICghaXNzZXQoJHN0eWxlWyd2cGFkZGluZyddKSkgewoJCQkkc3R5bGVbJ3ZwYWRkaW5nJ10gPSAkc3R5bGVbJ3BhZGRpbmcnXTsKCQl9IGVsc2VpZiAoJHN0eWxlWyd2cGFkZGluZyddID09PSAnYXV0bycpIHsKCQkJJHN0eWxlWyd2cGFkZGluZyddID0gNDsKCQl9CgkJJGhwYWQgPSAoMiAqICRzdHlsZVsnaHBhZGRpbmcnXSk7CgkJJHZwYWQgPSAoMiAqICRzdHlsZVsndnBhZGRpbmcnXSk7CgkJLy8gY2VsbCAobW9kdWxlKSBkaW1lbnNpb24KCQlpZiAoIWlzc2V0KCRzdHlsZVsnbW9kdWxlX3dpZHRoJ10pKSB7CgkJCSRzdHlsZVsnbW9kdWxlX3dpZHRoJ10gPSAxOyAvLyB3aWR0aCBvZiBhIHNpbmdsZSBtb2R1bGUgaW4gcG9pbnRzCgkJfQoJCWlmICghaXNzZXQoJHN0eWxlWydtb2R1bGVfaGVpZ2h0J10pKSB7CgkJCSRzdHlsZVsnbW9kdWxlX2hlaWdodCddID0gMTsgLy8gaGVpZ2h0IG9mIGEgc2luZ2xlIG1vZHVsZSBpbiBwb2ludHMKCQl9CgkJaWYgKCR4ID09PSAnJykgewoJCQkkeCA9ICR0aGlzLT54OwoJCX0KCQlpZiAoJHkgPT09ICcnKSB7CgkJCSR5ID0gJHRoaXMtPnk7CgkJfQoJCS8vIGNoZWNrIHBhZ2UgZm9yIG5vLXdyaXRlIHJlZ2lvbnMgYW5kIGFkYXB0IHBhZ2UgbWFyZ2lucyBpZiBuZWNlc3NhcnkKCQlsaXN0KCR4LCAkeSkgPSAkdGhpcy0+Y2hlY2tQYWdlUmVnaW9ucygkaCwgJHgsICR5KTsKCQkvLyBudW1iZXIgb2YgYmFyY29kZSBjb2x1bW5zIGFuZCByb3dzCgkJJHJvd3MgPSAkYXJyY29kZVsnbnVtX3Jvd3MnXTsKCQkkY29scyA9ICRhcnJjb2RlWydudW1fY29scyddOwoJCWlmICgoJHJvd3MgPD0gMCkgfHwgKCRjb2xzIDw9IDApKXsKCQkJJHRoaXMtPkVycm9yKCdFcnJvciBpbiAyRCBiYXJjb2RlIHN0cmluZycpOwoJCX0KCQkvLyBtb2R1bGUgd2lkdGggYW5kIGhlaWdodAoJCSRtdyA9ICRzdHlsZVsnbW9kdWxlX3dpZHRoJ107CgkJJG1oID0gJHN0eWxlWydtb2R1bGVfaGVpZ2h0J107CgkJaWYgKCgkbXcgPD0gMCkgT1IgKCRtaCA8PSAwKSkgewoJCQkkdGhpcy0+RXJyb3IoJ0Vycm9yIGluIDJEIGJhcmNvZGUgc3RyaW5nJyk7CgkJfQoJCS8vIGdldCBtYXggZGltZW5zaW9ucwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSRtYXh3ID0gJHggLSAkdGhpcy0+bE1hcmdpbjsKCQl9IGVsc2UgewoJCQkkbWF4dyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkeDsKCQl9CgkJJG1heGggPSAoJHRoaXMtPmggLSAkdGhpcy0+dE1hcmdpbiAtICR0aGlzLT5iTWFyZ2luKTsKCQkkcmF0aW9IVyA9ICgoKCRyb3dzICogJG1oKSArICRocGFkKSAvICgoJGNvbHMgKiAkbXcpICsgJHZwYWQpKTsKCQkkcmF0aW9XSCA9ICgoKCRjb2xzICogJG13KSArICR2cGFkKSAvICgoJHJvd3MgKiAkbWgpICsgJGhwYWQpKTsKCQlpZiAoISRkaXN0b3J0KSB7CgkJCWlmICgoJG1heHcgKiAkcmF0aW9IVykgPiAkbWF4aCkgewoJCQkJJG1heHcgPSAkbWF4aCAqICRyYXRpb1dIOwoJCQl9CgkJCWlmICgoJG1heGggKiAkcmF0aW9XSCkgPiAkbWF4dykgewoJCQkJJG1heGggPSAkbWF4dyAqICRyYXRpb0hXOwoJCQl9CgkJfQoJCS8vIHNldCBtYXhpbXVtIGRpbWVzaW9ucwoJCWlmICgkdyA+ICRtYXh3KSB7CgkJCSR3ID0gJG1heHc7CgkJfQoJCWlmICgkaCA+ICRtYXhoKSB7CgkJCSRoID0gJG1heGg7CgkJfQoJCS8vIHNldCBkaW1lbnNpb25zCgkJaWYgKCgoJHcgPT09ICcnKSBPUiAoJHcgPD0gMCkpIEFORCAoKCRoID09PSAnJykgT1IgKCRoIDw9IDApKSkgewoJCQkkdyA9ICgkY29scyArICRocGFkKSAqICgkbXcgLyAkdGhpcy0+ayk7CgkJCSRoID0gKCRyb3dzICsgJHZwYWQpICogKCRtaCAvICR0aGlzLT5rKTsKCQl9IGVsc2VpZiAoKCR3ID09PSAnJykgT1IgKCR3IDw9IDApKSB7CgkJCSR3ID0gJGggKiAkcmF0aW9XSDsKCQl9IGVsc2VpZiAoKCRoID09PSAnJykgT1IgKCRoIDw9IDApKSB7CgkJCSRoID0gJHcgKiAkcmF0aW9IVzsKCQl9CgkJLy8gYmFyY29kZSBzaXplIChleGNsdWRpbmcgcGFkZGluZykKCQkkYncgPSAoJHcgKiAkY29scykgLyAoJGNvbHMgKyAkaHBhZCk7CgkJJGJoID0gKCRoICogJHJvd3MpIC8gKCRyb3dzICsgJHZwYWQpOwoJCS8vIGRpbWVuc2lvbiBvZiBzaW5nbGUgYmFyY29kZSBjZWxsIHVuaXQKCQkkY3cgPSAkYncgLyAkY29sczsKCQkkY2ggPSAkYmggLyAkcm93czsKCQlpZiAoISRkaXN0b3J0KSB7CgkJCWlmICgoJGN3IC8gJGNoKSA+ICgkbXcgLyAkbWgpKSB7CgkJCQkvLyBjb3JyZWN0IGhvcml6b250YWwgZGlzdG9ydGlvbgoJCQkJJGN3ID0gJGNoICogJG13IC8gJG1oOwoJCQkJJGJ3ID0gJGN3ICogJGNvbHM7CgkJCQkkc3R5bGVbJ2hwYWRkaW5nJ10gPSAoJHcgLSAkYncpIC8gKDIgKiAkY3cpOwoJCQl9IGVsc2UgewoJCQkJLy8gY29ycmVjdCB2ZXJ0aWNhbCBkaXN0b3J0aW9uCgkJCQkkY2ggPSAkY3cgKiAkbWggLyAkbXc7CgkJCQkkYmggPSAkY2ggKiAkcm93czsKCQkJCSRzdHlsZVsndnBhZGRpbmcnXSA9ICgkaCAtICRiaCkgLyAoMiAqICRjaCk7CgkJCX0KCQl9CgkJLy8gZml0IHRoZSBiYXJjb2RlIG9uIGF2YWlsYWJsZSBzcGFjZQoJCWxpc3QoJHcsICRoLCAkeCwgJHkpID0gJHRoaXMtPmZpdEJsb2NrKCR3LCAkaCwgJHgsICR5LCBmYWxzZSk7CgkJLy8gc2V0IGFsaWdubWVudAoJCSR0aGlzLT5pbWdfcmJfeSA9ICR5ICsgJGg7CgkJLy8gc2V0IGFsaWdubWVudAoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCWlmICgkc3R5bGVbJ3Bvc2l0aW9uJ10gPT0gJ0wnKSB7CgkJCQkkeHBvcyA9ICR0aGlzLT5sTWFyZ2luOwoJCQl9IGVsc2VpZiAoJHN0eWxlWydwb3NpdGlvbiddID09ICdDJykgewoJCQkJJHhwb3MgPSAoJHRoaXMtPncgKyAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luIC0gJHcpIC8gMjsKCQkJfSBlbHNlaWYgKCRzdHlsZVsncG9zaXRpb24nXSA9PSAnUicpIHsKCQkJCSR4cG9zID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhwb3MgPSAkeCAtICR3OwoJCQl9CgkJCSR0aGlzLT5pbWdfcmJfeCA9ICR4cG9zOwoJCX0gZWxzZSB7CgkJCWlmICgkc3R5bGVbJ3Bvc2l0aW9uJ10gPT0gJ0wnKSB7CgkJCQkkeHBvcyA9ICR0aGlzLT5sTWFyZ2luOwoJCQl9IGVsc2VpZiAoJHN0eWxlWydwb3NpdGlvbiddID09ICdDJykgewoJCQkJJHhwb3MgPSAoJHRoaXMtPncgKyAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luIC0gJHcpIC8gMjsKCQkJfSBlbHNlaWYgKCRzdHlsZVsncG9zaXRpb24nXSA9PSAnUicpIHsKCQkJCSR4cG9zID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhwb3MgPSAkeDsKCQkJfQoJCQkkdGhpcy0+aW1nX3JiX3ggPSAkeHBvcyArICR3OwoJCX0KCQkkeHN0YXJ0ID0gJHhwb3MgKyAoJHN0eWxlWydocGFkZGluZyddICogJGN3KTsKCQkkeXN0YXJ0ID0gJHkgKyAoJHN0eWxlWyd2cGFkZGluZyddICogJGNoKTsKCQkvLyBiYXJjb2RlIGlzIGFsd2F5cyBwcmludGVkIGluIExUUiBkaXJlY3Rpb24KCQkkdGVtcFJUTCA9ICR0aGlzLT5ydGw7CgkJJHRoaXMtPnJ0bCA9IGZhbHNlOwoJCS8vIHByaW50IGJhY2tncm91bmQgY29sb3IKCQlpZiAoJHN0eWxlWydiZ2NvbG9yJ10pIHsKCQkJJHRoaXMtPlJlY3QoJHhwb3MsICR5LCAkdywgJGgsICRzdHlsZVsnYm9yZGVyJ10gPyAnREYnIDogJ0YnLCAnJywgJHN0eWxlWydiZ2NvbG9yJ10pOwoJCX0gZWxzZWlmICgkc3R5bGVbJ2JvcmRlciddKSB7CgkJCSR0aGlzLT5SZWN0KCR4cG9zLCAkeSwgJHcsICRoLCAnRCcpOwoJCX0KCQkvLyBzZXQgZm9yZWdyb3VuZCBjb2xvcgoJCSR0aGlzLT5TZXREcmF3Q29sb3JBcnJheSgkc3R5bGVbJ2ZnY29sb3InXSk7CgkJLy8gcHJpbnQgYmFyY29kZSBjZWxscwoJCS8vIGZvciBlYWNoIHJvdwoJCWZvciAoJHIgPSAwOyAkciA8ICRyb3dzOyArKyRyKSB7CgkJCSR4ciA9ICR4c3RhcnQ7CgkJCS8vIGZvciBlYWNoIGNvbHVtbgoJCQlmb3IgKCRjID0gMDsgJGMgPCAkY29sczsgKyskYykgewoJCQkJaWYgKCRhcnJjb2RlWydiY29kZSddWyRyXVskY10gPT0gMSkgewoJCQkJCS8vIGRyYXcgYSBzaW5nbGUgYmFyY29kZSBjZWxsCgkJCQkJJHRoaXMtPlJlY3QoJHhyLCAkeXN0YXJ0LCAkY3csICRjaCwgJ0YnLCBhcnJheSgpLCAkc3R5bGVbJ2ZnY29sb3InXSk7CgkJCQl9CgkJCQkkeHIgKz0gJGN3OwoJCQl9CgkJCSR5c3RhcnQgKz0gJGNoOwoJCX0KCQkvLyByZXN0b3JlIG9yaWdpbmFsIGRpcmVjdGlvbgoJCSR0aGlzLT5ydGwgPSAkdGVtcFJUTDsKCQkvLyByZXN0b3JlIHByZXZpb3VzIHNldHRpbmdzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJLy8gc2V0IHBvaW50ZXIgdG8gYWxpZ24gdGhlIG5leHQgdGV4dC9vYmplY3RzCgkJc3dpdGNoKCRhbGlnbikgewoJCQljYXNlICdUJzp7CgkJCQkkdGhpcy0+eSA9ICR5OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdNJzp7CgkJCQkkdGhpcy0+eSA9ICR5ICsgcm91bmQoJGgvMik7CgkJCQkkdGhpcy0+eCA9ICR0aGlzLT5pbWdfcmJfeDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0InOnsKCQkJCSR0aGlzLT55ID0gJHRoaXMtPmltZ19yYl95OwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdOJzp7CgkJCQkkdGhpcy0+U2V0WSgkdGhpcy0+aW1nX3JiX3kpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDp7CgkJCQlicmVhazsKCQkJfQoJCX0KCQkkdGhpcy0+ZW5kbGluZXggPSAkdGhpcy0+aW1nX3JiX3g7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgY3VycmVudCBtYXJnaW5zOgoJICogPHVsPgoJCQk8bGk+JHJldFsnbGVmdCddID0gbGVmdCBtYXJnaW48L2xpPgoJCQk8bGk+JHJldFsncmlnaHQnXSA9IHJpZ2h0IG1hcmdpbjwvbGk+CgkJCTxsaT4kcmV0Wyd0b3AnXSA9IHRvcCBtYXJnaW48L2xpPgoJCQk8bGk+JHJldFsnYm90dG9tJ10gPSBib3R0b20gbWFyZ2luPC9saT4KCQkJPGxpPiRyZXRbJ2hlYWRlciddID0gaGVhZGVyIG1hcmdpbjwvbGk+CgkJCTxsaT4kcmV0Wydmb290ZXInXSA9IGZvb3RlciBtYXJnaW48L2xpPgoJCQk8bGk+JHJldFsnY2VsbCddID0gY2VsbCBwYWRkaW5nIGFycmF5PC9saT4KCQkJPGxpPiRyZXRbJ3BhZGRpbmdfbGVmdCddID0gY2VsbCBsZWZ0IHBhZGRpbmc8L2xpPgoJCQk8bGk+JHJldFsncGFkZGluZ190b3AnXSA9IGNlbGwgdG9wIHBhZGRpbmc8L2xpPgoJCQk8bGk+JHJldFsncGFkZGluZ19yaWdodCddID0gY2VsbCByaWdodCBwYWRkaW5nPC9saT4KCQkJPGxpPiRyZXRbJ3BhZGRpbmdfYm90dG9tJ10gPSBjZWxsIGJvdHRvbSBwYWRkaW5nPC9saT4KCSAqIDwvdWw+CgkgKiBAcmV0dXJuIGFycmF5IGNvbnRhaW5pbmcgYWxsIG1hcmdpbnMgbWVhc3VyZXMKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA2LTIzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0TWFyZ2lucygpIHsKCQkkcmV0ID0gYXJyYXkoCgkJCSdsZWZ0JyA9PiAkdGhpcy0+bE1hcmdpbiwKCQkJJ3JpZ2h0JyA9PiAkdGhpcy0+ck1hcmdpbiwKCQkJJ3RvcCcgPT4gJHRoaXMtPnRNYXJnaW4sCgkJCSdib3R0b20nID0+ICR0aGlzLT5iTWFyZ2luLAoJCQknaGVhZGVyJyA9PiAkdGhpcy0+aGVhZGVyX21hcmdpbiwKCQkJJ2Zvb3RlcicgPT4gJHRoaXMtPmZvb3Rlcl9tYXJnaW4sCgkJCSdjZWxsJyA9PiAkdGhpcy0+Y2VsbF9wYWRkaW5nLAoJCQkncGFkZGluZ19sZWZ0JyA9PiAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ10sCgkJCSdwYWRkaW5nX3RvcCcgPT4gJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddLAoJCQkncGFkZGluZ19yaWdodCcgPT4gJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddLAoJCQkncGFkZGluZ19ib3R0b20nID0+ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0InXQoJCSk7CgkJcmV0dXJuICRyZXQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGFuIGFycmF5IGNvbnRhaW5pbmcgb3JpZ2luYWwgbWFyZ2luczoKCSAqIDx1bD4KCQkJPGxpPiRyZXRbJ2xlZnQnXSA9IGxlZnQgbWFyZ2luPC9saT4KCQkJPGxpPiRyZXRbJ3JpZ2h0J10gPSByaWdodCBtYXJnaW48L2xpPgoJICogPC91bD4KCSAqIEByZXR1cm4gYXJyYXkgY29udGFpbmluZyBhbGwgbWFyZ2lucyBtZWFzdXJlcwoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMTIgKDIwMDgtMDctMjQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRPcmlnaW5hbE1hcmdpbnMoKSB7CgkJJHJldCA9IGFycmF5KAoJCQknbGVmdCcgPT4gJHRoaXMtPm9yaWdpbmFsX2xNYXJnaW4sCgkJCSdyaWdodCcgPT4gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4KCQkpOwoJCXJldHVybiAkcmV0OwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgY3VycmVudCBmb250IHNpemUuCgkgKiBAcmV0dXJuIGN1cnJlbnQgZm9udCBzaXplCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMy4yLjAwMCAoMjAwOC0wNi0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEZvbnRTaXplKCkgewoJCXJldHVybiAkdGhpcy0+Rm9udFNpemU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGZvbnQgc2l6ZSBpbiBwb2ludHMgdW5pdC4KCSAqIEByZXR1cm4gY3VycmVudCBmb250IHNpemUgaW4gcG9pbnRzIHVuaXQKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA2LTIzKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udFNpemVQdCgpIHsKCQlyZXR1cm4gJHRoaXMtPkZvbnRTaXplUHQ7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGZvbnQgZmFtaWx5IG5hbWUuCgkgKiBAcmV0dXJuIHN0cmluZyBjdXJyZW50IGZvbnQgZmFtaWx5IG5hbWUKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjMuMDA4ICgyMDA4LTEyLTA1KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udEZhbWlseSgpIHsKCQlyZXR1cm4gJHRoaXMtPkZvbnRGYW1pbHk7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBjdXJyZW50IGZvbnQgc3R5bGUuCgkgKiBAcmV0dXJuIHN0cmluZyBjdXJyZW50IGZvbnQgc3R5bGUKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjMuMDA4ICgyMDA4LTEyLTA1KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udFN0eWxlKCkgewoJCXJldHVybiAkdGhpcy0+Rm9udFN0eWxlOwoJfQoKCS8qKgoJICogQ2xlYW51cCBIVE1MIGNvZGUgKHJlcXVpcmVzIEhUTUwgVGlkeSBsaWJyYXJ5KS4KCSAqIEBwYXJhbSAkaHRtbCAoc3RyaW5nKSBodG1sY29kZSB0byBmaXgKCSAqIEBwYXJhbSAkZGVmYXVsdF9jc3MgKHN0cmluZykgQ1NTIGNvbW1hbmRzIHRvIGFkZAoJICogQHBhcmFtICR0YWd2cyAoYXJyYXkpIHBhcmFtZXRlcnMgZm9yIHNldEh0bWxWU3BhY2UgbWV0aG9kCgkgKiBAcGFyYW0gJHRpZHlfb3B0aW9ucyAoYXJyYXkpIG9wdGlvbnMgZm9yIHRpZHlfcGFyc2Vfc3RyaW5nIGZ1bmN0aW9uCgkgKiBAcmV0dXJuIHN0cmluZyBYSFRNTCBjb2RlIGNsZWFuZWQgdXAKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAxNyAoMjAxMC0xMS0xNikKCSAqIEBzZWUgc2V0SHRtbFZTcGFjZSgpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBmaXhIVE1MQ29kZSgkaHRtbCwgJGRlZmF1bHRfY3NzPScnLCAkdGFndnM9JycsICR0aWR5X29wdGlvbnM9JycpIHsKCQlyZXR1cm4gVENQREZfU1RBVElDOjpmaXhIVE1MQ29kZSgkaHRtbCwgJGRlZmF1bHRfY3NzLCAkdGFndnMsICR0aWR5X29wdGlvbnMsICR0aGlzLT50YWd2c3BhY2VzKTsKCX0KCgkvKioKCSAqIFJldHVybnMgdGhlIGJvcmRlciB3aWR0aCBmcm9tIENTUyBwcm9wZXJ0eQoJICogQHBhcmFtICR3aWR0aCAoc3RyaW5nKSBib3JkZXIgd2lkdGgKCSAqIEByZXR1cm4gaW50IHdpdGggaW4gdXNlciB1bml0cwoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuNy4wMDAgKDIwMTAtMDgtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRDU1NCb3JkZXJXaWR0aCgkd2lkdGgpIHsKCQlpZiAoJHdpZHRoID09ICd0aGluJykgewoJCQkkd2lkdGggPSAoMiAvICR0aGlzLT5rKTsKCQl9IGVsc2VpZiAoJHdpZHRoID09ICdtZWRpdW0nKSB7CgkJCSR3aWR0aCA9ICg0IC8gJHRoaXMtPmspOwoJCX0gZWxzZWlmICgkd2lkdGggPT0gJ3RoaWNrJykgewoJCQkkd2lkdGggPSAoNiAvICR0aGlzLT5rKTsKCQl9IGVsc2UgewoJCQkkd2lkdGggPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR3aWR0aCwgMSwgJ3B4JywgZmFsc2UpOwoJCX0KCQlyZXR1cm4gJHdpZHRoOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgYm9yZGVyIGRhc2ggc3R5bGUgZnJvbSBDU1MgcHJvcGVydHkKCSAqIEBwYXJhbSAkc3R5bGUgKHN0cmluZykgYm9yZGVyIHN0eWxlIHRvIGNvbnZlcnQKCSAqIEByZXR1cm4gaW50IHNhc2ggc3R5bGUgKHJldHVybiAtMSBpbiBjYXNlIG9mIG5vbmUgb3IgaGlkZGVuIGJvcmRlcikKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjcuMDAwICgyMDEwLTA4LTAyKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q1NTQm9yZGVyRGFzaFN0eWxlKCRzdHlsZSkgewoJCXN3aXRjaCAoc3RydG9sb3dlcigkc3R5bGUpKSB7CgkJCWNhc2UgJ25vbmUnOgoJCQljYXNlICdoaWRkZW4nOiB7CgkJCQkkZGFzaCA9IC0xOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZG90dGVkJzogewoJCQkJJGRhc2ggPSAxOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZGFzaGVkJzogewoJCQkJJGRhc2ggPSAzOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZG91YmxlJzoKCQkJY2FzZSAnZ3Jvb3ZlJzoKCQkJY2FzZSAncmlkZ2UnOgoJCQljYXNlICdpbnNldCc6CgkJCWNhc2UgJ291dHNldCc6CgkJCWNhc2UgJ3NvbGlkJzoKCQkJZGVmYXVsdDogewoJCQkJJGRhc2ggPSAwOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJcmV0dXJuICRkYXNoOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgYm9yZGVyIHN0eWxlIGFycmF5IGZyb20gQ1NTIGJvcmRlciBwcm9wZXJ0aWVzCgkgKiBAcGFyYW0gJGNzc2JvcmRlciAoc3RyaW5nKSBib3JkZXIgcHJvcGVydGllcwoJICogQHJldHVybiBhcnJheSBjb250YWluaW5nIGJvcmRlciBwcm9wZXJ0aWVzCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS43LjAwMCAoMjAxMC0wOC0wMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldENTU0JvcmRlclN0eWxlKCRjc3Nib3JkZXIpIHsKCQkkYnByb3AgPSBwcmVnX3NwbGl0KCcvW1xzXSsvJywgdHJpbSgkY3NzYm9yZGVyKSk7CgkJJGJvcmRlciA9IGFycmF5KCk7IC8vIHZhbHVlIHRvIGJlIHJldHVybmVkCgkJc3dpdGNoIChjb3VudCgkYnByb3ApKSB7CgkJCWNhc2UgMzogewoJCQkJJHdpZHRoID0gJGJwcm9wWzBdOwoJCQkJJHN0eWxlID0gJGJwcm9wWzFdOwoJCQkJJGNvbG9yID0gJGJwcm9wWzJdOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAyOiB7CgkJCQkkd2lkdGggPSAnbWVkaXVtJzsKCQkJCSRzdHlsZSA9ICRicHJvcFswXTsKCQkJCSRjb2xvciA9ICRicHJvcFsxXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMTogewoJCQkJJHdpZHRoID0gJ21lZGl1bSc7CgkJCQkkc3R5bGUgPSAkYnByb3BbMF07CgkJCQkkY29sb3IgPSAnYmxhY2snOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJHdpZHRoID0gJ21lZGl1bSc7CgkJCQkkc3R5bGUgPSAnc29saWQnOwoJCQkJJGNvbG9yID0gJ2JsYWNrJzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCWlmICgkc3R5bGUgPT0gJ25vbmUnKSB7CgkJCXJldHVybiBhcnJheSgpOwoJCX0KCQkkYm9yZGVyWydjYXAnXSA9ICdzcXVhcmUnOwoJCSRib3JkZXJbJ2pvaW4nXSA9ICdtaXRlcic7CgkJJGJvcmRlclsnZGFzaCddID0gJHRoaXMtPmdldENTU0JvcmRlckRhc2hTdHlsZSgkc3R5bGUpOwoJCWlmICgkYm9yZGVyWydkYXNoJ10gPCAwKSB7CgkJCXJldHVybiBhcnJheSgpOwoJCX0KCQkkYm9yZGVyWyd3aWR0aCddID0gJHRoaXMtPmdldENTU0JvcmRlcldpZHRoKCR3aWR0aCk7CgkJJGJvcmRlclsnY29sb3InXSA9IFRDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRjb2xvciwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQlyZXR1cm4gJGJvcmRlcjsKCX0KCgkvKioKCSAqIEdldCB0aGUgaW50ZXJuYWwgQ2VsbCBwYWRkaW5nIGZyb20gQ1NTIGF0dHJpYnV0ZS4KCSAqIEBwYXJhbSAkY3NzcGFkZGluZyAoc3RyaW5nKSBwYWRkaW5nIHByb3BlcnRpZXMKCSAqIEBwYXJhbSAkd2lkdGggKGZsb2F0KSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBlbGVtZW50CgkgKiBAcmV0dXJuIGFycmF5IG9mIGNlbGwgcGFkZGluZ3MKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTEwLTA0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q1NTUGFkZGluZygkY3NzcGFkZGluZywgJHdpZHRoPTApIHsKCQkkcGFkZGluZyA9IHByZWdfc3BsaXQoJy9bXHNdKy8nLCB0cmltKCRjc3NwYWRkaW5nKSk7CgkJJGNlbGxfcGFkZGluZyA9IGFycmF5KCk7IC8vIHZhbHVlIHRvIGJlIHJldHVybmVkCgkJc3dpdGNoIChjb3VudCgkcGFkZGluZykpIHsKCQkJY2FzZSA0OiB7CgkJCQkkY2VsbF9wYWRkaW5nWydUJ10gPSAkcGFkZGluZ1swXTsKCQkJCSRjZWxsX3BhZGRpbmdbJ1InXSA9ICRwYWRkaW5nWzFdOwoJCQkJJGNlbGxfcGFkZGluZ1snQiddID0gJHBhZGRpbmdbMl07CgkJCQkkY2VsbF9wYWRkaW5nWydMJ10gPSAkcGFkZGluZ1szXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMzogewoJCQkJJGNlbGxfcGFkZGluZ1snVCddID0gJHBhZGRpbmdbMF07CgkJCQkkY2VsbF9wYWRkaW5nWydSJ10gPSAkcGFkZGluZ1sxXTsKCQkJCSRjZWxsX3BhZGRpbmdbJ0InXSA9ICRwYWRkaW5nWzJdOwoJCQkJJGNlbGxfcGFkZGluZ1snTCddID0gJHBhZGRpbmdbMV07CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDI6IHsKCQkJCSRjZWxsX3BhZGRpbmdbJ1QnXSA9ICRwYWRkaW5nWzBdOwoJCQkJJGNlbGxfcGFkZGluZ1snUiddID0gJHBhZGRpbmdbMV07CgkJCQkkY2VsbF9wYWRkaW5nWydCJ10gPSAkcGFkZGluZ1swXTsKCQkJCSRjZWxsX3BhZGRpbmdbJ0wnXSA9ICRwYWRkaW5nWzFdOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAxOiB7CgkJCQkkY2VsbF9wYWRkaW5nWydUJ10gPSAkcGFkZGluZ1swXTsKCQkJCSRjZWxsX3BhZGRpbmdbJ1InXSA9ICRwYWRkaW5nWzBdOwoJCQkJJGNlbGxfcGFkZGluZ1snQiddID0gJHBhZGRpbmdbMF07CgkJCQkkY2VsbF9wYWRkaW5nWydMJ10gPSAkcGFkZGluZ1swXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCXJldHVybiAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCQl9CgkJfQoJCWlmICgkd2lkdGggPT0gMCkgewoJCQkkd2lkdGggPSAkdGhpcy0+dyAtICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW47CgkJfQoJCSRjZWxsX3BhZGRpbmdbJ1QnXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGNlbGxfcGFkZGluZ1snVCddLCAkd2lkdGgsICdweCcsIGZhbHNlKTsKCQkkY2VsbF9wYWRkaW5nWydSJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRjZWxsX3BhZGRpbmdbJ1InXSwgJHdpZHRoLCAncHgnLCBmYWxzZSk7CgkJJGNlbGxfcGFkZGluZ1snQiddID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkY2VsbF9wYWRkaW5nWydCJ10sICR3aWR0aCwgJ3B4JywgZmFsc2UpOwoJCSRjZWxsX3BhZGRpbmdbJ0wnXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGNlbGxfcGFkZGluZ1snTCddLCAkd2lkdGgsICdweCcsIGZhbHNlKTsKCQlyZXR1cm4gJGNlbGxfcGFkZGluZzsKCX0KCgkvKioKCSAqIEdldCB0aGUgaW50ZXJuYWwgQ2VsbCBtYXJnaW4gZnJvbSBDU1MgYXR0cmlidXRlLgoJICogQHBhcmFtICRjc3NtYXJnaW4gKHN0cmluZykgbWFyZ2luIHByb3BlcnRpZXMKCSAqIEBwYXJhbSAkd2lkdGggKGZsb2F0KSB3aWR0aCBvZiB0aGUgY29udGFpbmluZyBlbGVtZW50CgkgKiBAcmV0dXJuIGFycmF5IG9mIGNlbGwgbWFyZ2lucwoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRDU1NNYXJnaW4oJGNzc21hcmdpbiwgJHdpZHRoPTApIHsKCQkkbWFyZ2luID0gcHJlZ19zcGxpdCgnL1tcc10rLycsIHRyaW0oJGNzc21hcmdpbikpOwoJCSRjZWxsX21hcmdpbiA9IGFycmF5KCk7IC8vIHZhbHVlIHRvIGJlIHJldHVybmVkCgkJc3dpdGNoIChjb3VudCgkbWFyZ2luKSkgewoJCQljYXNlIDQ6IHsKCQkJCSRjZWxsX21hcmdpblsnVCddID0gJG1hcmdpblswXTsKCQkJCSRjZWxsX21hcmdpblsnUiddID0gJG1hcmdpblsxXTsKCQkJCSRjZWxsX21hcmdpblsnQiddID0gJG1hcmdpblsyXTsKCQkJCSRjZWxsX21hcmdpblsnTCddID0gJG1hcmdpblszXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMzogewoJCQkJJGNlbGxfbWFyZ2luWydUJ10gPSAkbWFyZ2luWzBdOwoJCQkJJGNlbGxfbWFyZ2luWydSJ10gPSAkbWFyZ2luWzFdOwoJCQkJJGNlbGxfbWFyZ2luWydCJ10gPSAkbWFyZ2luWzJdOwoJCQkJJGNlbGxfbWFyZ2luWydMJ10gPSAkbWFyZ2luWzFdOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAyOiB7CgkJCQkkY2VsbF9tYXJnaW5bJ1QnXSA9ICRtYXJnaW5bMF07CgkJCQkkY2VsbF9tYXJnaW5bJ1InXSA9ICRtYXJnaW5bMV07CgkJCQkkY2VsbF9tYXJnaW5bJ0InXSA9ICRtYXJnaW5bMF07CgkJCQkkY2VsbF9tYXJnaW5bJ0wnXSA9ICRtYXJnaW5bMV07CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDE6IHsKCQkJCSRjZWxsX21hcmdpblsnVCddID0gJG1hcmdpblswXTsKCQkJCSRjZWxsX21hcmdpblsnUiddID0gJG1hcmdpblswXTsKCQkJCSRjZWxsX21hcmdpblsnQiddID0gJG1hcmdpblswXTsKCQkJCSRjZWxsX21hcmdpblsnTCddID0gJG1hcmdpblswXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCXJldHVybiAkdGhpcy0+Y2VsbF9tYXJnaW47CgkJCX0KCQl9CgkJaWYgKCR3aWR0aCA9PSAwKSB7CgkJCSR3aWR0aCA9ICR0aGlzLT53IC0gJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbjsKCQl9CgkJJGNlbGxfbWFyZ2luWydUJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKHN0cl9yZXBsYWNlKCdhdXRvJywgJzAnLCAkY2VsbF9tYXJnaW5bJ1QnXSksICR3aWR0aCwgJ3B4JywgZmFsc2UpOwoJCSRjZWxsX21hcmdpblsnUiddID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cyhzdHJfcmVwbGFjZSgnYXV0bycsICcwJywgJGNlbGxfbWFyZ2luWydSJ10pLCAkd2lkdGgsICdweCcsIGZhbHNlKTsKCQkkY2VsbF9tYXJnaW5bJ0InXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoc3RyX3JlcGxhY2UoJ2F1dG8nLCAnMCcsICRjZWxsX21hcmdpblsnQiddKSwgJHdpZHRoLCAncHgnLCBmYWxzZSk7CgkJJGNlbGxfbWFyZ2luWydMJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKHN0cl9yZXBsYWNlKCdhdXRvJywgJzAnLCAkY2VsbF9tYXJnaW5bJ0wnXSksICR3aWR0aCwgJ3B4JywgZmFsc2UpOwoJCXJldHVybiAkY2VsbF9tYXJnaW47Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGJvcmRlci1zcGFjaW5nIGZyb20gQ1NTIGF0dHJpYnV0ZS4KCSAqIEBwYXJhbSAkY3NzYnNwYWNlIChzdHJpbmcpIGJvcmRlci1zcGFjaW5nIENTUyBwcm9wZXJ0aWVzCgkgKiBAcGFyYW0gJHdpZHRoIChmbG9hdCkgd2lkdGggb2YgdGhlIGNvbnRhaW5pbmcgZWxlbWVudAoJICogQHJldHVybiBhcnJheSBvZiBib3JkZXIgc3BhY2luZ3MKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDEwICgyMDEwLTEwLTI3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q1NTQm9yZGVyTWFyZ2luKCRjc3Nic3BhY2UsICR3aWR0aD0wKSB7CgkJJHNwYWNlID0gcHJlZ19zcGxpdCgnL1tcc10rLycsIHRyaW0oJGNzc2JzcGFjZSkpOwoJCSRib3JkZXJfc3BhY2luZyA9IGFycmF5KCk7IC8vIHZhbHVlIHRvIGJlIHJldHVybmVkCgkJc3dpdGNoIChjb3VudCgkc3BhY2UpKSB7CgkJCWNhc2UgMjogewoJCQkJJGJvcmRlcl9zcGFjaW5nWydIJ10gPSAkc3BhY2VbMF07CgkJCQkkYm9yZGVyX3NwYWNpbmdbJ1YnXSA9ICRzcGFjZVsxXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgMTogewoJCQkJJGJvcmRlcl9zcGFjaW5nWydIJ10gPSAkc3BhY2VbMF07CgkJCQkkYm9yZGVyX3NwYWNpbmdbJ1YnXSA9ICRzcGFjZVswXTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCXJldHVybiBhcnJheSgnSCcgPT4gMCwgJ1YnID0+IDApOwoJCQl9CgkJfQoJCWlmICgkd2lkdGggPT0gMCkgewoJCQkkd2lkdGggPSAkdGhpcy0+dyAtICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW47CgkJfQoJCSRib3JkZXJfc3BhY2luZ1snSCddID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYm9yZGVyX3NwYWNpbmdbJ0gnXSwgJHdpZHRoLCAncHgnLCBmYWxzZSk7CgkJJGJvcmRlcl9zcGFjaW5nWydWJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRib3JkZXJfc3BhY2luZ1snViddLCAkd2lkdGgsICdweCcsIGZhbHNlKTsKCQlyZXR1cm4gJGJvcmRlcl9zcGFjaW5nOwoJfQoKCS8qKgoJICogUmV0dXJucyB0aGUgbGV0dGVyLXNwYWNpbmcgdmFsdWUgZnJvbSBDU1MgdmFsdWUKCSAqIEBwYXJhbSAkc3BhY2luZyAoc3RyaW5nKSBsZXR0ZXItc3BhY2luZyB2YWx1ZQoJICogQHBhcmFtICRwYXJlbnQgKGZsb2F0KSBmb250IHNwYWNpbmcgKHRyYWNraW5nKSB2YWx1ZSBvZiB0aGUgcGFyZW50IGVsZW1lbnQKCSAqIEByZXR1cm4gZmxvYXQgcXVhbnRpdHkgdG8gaW5jcmVhc2VzIG9yIGRlY3JlYXNlcyB0aGUgc3BhY2UgYmV0d2VlbiBjaGFyYWN0ZXJzIGluIGEgdGV4dC4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTEwLTAyKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0Q1NTRm9udFNwYWNpbmcoJHNwYWNpbmcsICRwYXJlbnQ9MCkgewoJCSR2YWwgPSAwOyAvLyB2YWx1ZSB0byBiZSByZXR1cm5lZAoJCSRzcGFjaW5nID0gdHJpbSgkc3BhY2luZyk7CgkJc3dpdGNoICgkc3BhY2luZykgewoJCQljYXNlICdub3JtYWwnOiB7CgkJCQkkdmFsID0gMDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2luaGVyaXQnOiB7CgkJCQlpZiAoJHBhcmVudCA9PSAnbm9ybWFsJykgewoJCQkJCSR2YWwgPSAwOwoJCQkJfSBlbHNlIHsKCQkJCQkkdmFsID0gJHBhcmVudDsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCSR2YWwgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRzcGFjaW5nLCAwLCAncHgnLCBmYWxzZSk7CgkJCX0KCQl9CgkJcmV0dXJuICR2YWw7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlIG9mIGZvbnQgc3RyZXRjaGluZyBmcm9tIENTUyB2YWx1ZQoJICogQHBhcmFtICRzdHJldGNoIChzdHJpbmcpIHN0cmV0Y2ggbW9kZQoJICogQHBhcmFtICRwYXJlbnQgKGZsb2F0KSBzdHJldGNoIHZhbHVlIG9mIHRoZSBwYXJlbnQgZWxlbWVudAoJICogQHJldHVybiBmbG9hdCBmb250IHN0cmV0Y2hpbmcgcGVyY2VudGFnZQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMTAtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRDU1NGb250U3RyZXRjaGluZygkc3RyZXRjaCwgJHBhcmVudD0xMDApIHsKCQkkdmFsID0gMTAwOyAvLyB2YWx1ZSB0byBiZSByZXR1cm5lZAoJCSRzdHJldGNoID0gdHJpbSgkc3RyZXRjaCk7CgkJc3dpdGNoICgkc3RyZXRjaCkgewoJCQljYXNlICd1bHRyYS1jb25kZW5zZWQnOiB7CgkJCQkkdmFsID0gNDA7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdleHRyYS1jb25kZW5zZWQnOiB7CgkJCQkkdmFsID0gNTU7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdjb25kZW5zZWQnOiB7CgkJCQkkdmFsID0gNzA7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdzZW1pLWNvbmRlbnNlZCc6IHsKCQkJCSR2YWwgPSA4NTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ25vcm1hbCc6IHsKCQkJCSR2YWwgPSAxMDA7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdzZW1pLWV4cGFuZGVkJzogewoJCQkJJHZhbCA9IDExNTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2V4cGFuZGVkJzogewoJCQkJJHZhbCA9IDEzMDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2V4dHJhLWV4cGFuZGVkJzogewoJCQkJJHZhbCA9IDE0NTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3VsdHJhLWV4cGFuZGVkJzogewoJCQkJJHZhbCA9IDE2MDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3dpZGVyJzogewoJCQkJJHZhbCA9ICgkcGFyZW50ICsgMTApOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnbmFycm93ZXInOiB7CgkJCQkkdmFsID0gKCRwYXJlbnQgLSAxMCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdpbmhlcml0JzogewoJCQkJaWYgKCRwYXJlbnQgPT0gJ25vcm1hbCcpIHsKCQkJCQkkdmFsID0gMTAwOwoJCQkJfSBlbHNlIHsKCQkJCQkkdmFsID0gJHBhcmVudDsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCSR2YWwgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRzdHJldGNoLCAxMDAsICclJywgZmFsc2UpOwoJCQl9CgkJfQoJCXJldHVybiAkdmFsOwoJfQoKCS8qKgoJICogQ29udmVydCBIVE1MIHN0cmluZyBjb250YWluaW5nIGZvbnQgc2l6ZSB2YWx1ZSB0byBwb2ludHMKCSAqIEBwYXJhbSAkdmFsIChzdHJpbmcpIFN0cmluZyBjb250YWluaW5nIGZvbnQgc2l6ZSB2YWx1ZSBhbmQgdW5pdC4KCSAqIEBwYXJhbSAkcmVmc2l6ZSAoZmxvYXQpIFJlZmVyZW5jZSBmb250IHNpemUgaW4gcG9pbnRzLgoJICogQHBhcmFtICRwYXJlbnRfc2l6ZSAoZmxvYXQpIFBhcmVudCBmb250IHNpemUgaW4gcG9pbnRzLgoJICogQHBhcmFtICRkZWZhdWx0dW5pdCAoc3RyaW5nKSBEZWZhdWx0IHVuaXQgKGNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZzogJSwgZW0sIGV4LCBweCwgaW4sIG1tLCBwYywgcHQpLgoJICogQHJldHVybiBmbG9hdCB2YWx1ZSBpbiBwb2ludHMKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEhUTUxGb250VW5pdHMoJHZhbCwgJHJlZnNpemU9MTIsICRwYXJlbnRfc2l6ZT0xMiwgJGRlZmF1bHR1bml0PSdwdCcpIHsKCQkkcmVmc2l6ZSA9IFRDUERGX0ZPTlRTOjpnZXRGb250UmVmU2l6ZSgkcmVmc2l6ZSk7CgkJJHBhcmVudF9zaXplID0gVENQREZfRk9OVFM6OmdldEZvbnRSZWZTaXplKCRwYXJlbnRfc2l6ZSwgJHJlZnNpemUpOwoJCXN3aXRjaCAoJHZhbCkgewoJCQljYXNlICd4eC1zbWFsbCc6IHsKCQkJCSRzaXplID0gKCRyZWZzaXplIC0gNCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICd4LXNtYWxsJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgLSAzKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3NtYWxsJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgLSAyKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ21lZGl1bSc6IHsKCQkJCSRzaXplID0gJHJlZnNpemU7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdsYXJnZSc6IHsKCQkJCSRzaXplID0gKCRyZWZzaXplICsgMik7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICd4LWxhcmdlJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgKyA0KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3h4LWxhcmdlJzogewoJCQkJJHNpemUgPSAoJHJlZnNpemUgKyA2KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3NtYWxsZXInOiB7CgkJCQkkc2l6ZSA9ICgkcGFyZW50X3NpemUgLSAzKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2xhcmdlcic6IHsKCQkJCSRzaXplID0gKCRwYXJlbnRfc2l6ZSArIDMpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJHNpemUgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR2YWwsICRwYXJlbnRfc2l6ZSwgJGRlZmF1bHR1bml0LCB0cnVlKTsKCQkJfQoJCX0KCQlyZXR1cm4gJHNpemU7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBIVE1MIERPTSBhcnJheS4KCSAqIEBwYXJhbSAkaHRtbCAoc3RyaW5nKSBodG1sIGNvZGUKCSAqIEByZXR1cm4gYXJyYXkKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAzLjIuMDAwICgyMDA4LTA2LTIwKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SHRtbERvbUFycmF5KCRodG1sKSB7CgkJLy8gYXJyYXkgb2YgQ1NTIHN0eWxlcyAoIHNlbGVjdG9yID0+IHByb3BlcnRpZXMpLgoJCSRjc3MgPSBhcnJheSgpOwoJCS8vIGdldCBDU1MgYXJyYXkgZGVmaW5lZCBhdCBwcmV2aW91cyBjYWxsCgkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCWlmIChwcmVnX21hdGNoX2FsbCgnLzxjc3NhcnJheT4oW15cPF0qKTxcL2Nzc2FycmF5Pi9pc1UnLCAkaHRtbCwgJG1hdGNoZXMpID4gMCkgewoJCQlpZiAoaXNzZXQoJG1hdGNoZXNbMV1bMF0pKSB7CgkJCQkkY3NzID0gYXJyYXlfbWVyZ2UoJGNzcywgdW5zZXJpYWxpemUoJHRoaXMtPnVuaHRtbGVudGl0aWVzKCRtYXRjaGVzWzFdWzBdKSkpOwoJCQl9CgkJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPGNzc2FycmF5PiguKj8pPFwvY3NzYXJyYXk+L2lzVScsICcnLCAkaHRtbCk7CgkJfQoJCS8vIGV4dHJhY3QgZXh0ZXJuYWwgQ1NTIGZpbGVzCgkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCWlmIChwcmVnX21hdGNoX2FsbCgnLzxsaW5rKFteXD5dKik+L2lzVScsICRodG1sLCAkbWF0Y2hlcykgPiAwKSB7CgkJCWZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICRrZXkgPT4gJGxpbmspIHsKCQkJCSR0eXBlID0gYXJyYXkoKTsKCQkJCWlmIChwcmVnX21hdGNoKCcvdHlwZVtcc10qPVtcc10qInRleHRcL2NzcyIvJywgJGxpbmssICR0eXBlKSkgewoJCQkJCSR0eXBlID0gYXJyYXkoKTsKCQkJCQlwcmVnX21hdGNoKCcvbWVkaWFbXHNdKj1bXHNdKiIoW14iXSopIi8nLCAkbGluaywgJHR5cGUpOwoJCQkJCS8vIGdldCAnYWxsJyBhbmQgJ3ByaW50JyBtZWRpYSwgb3RoZXIgbWVkaWEgdHlwZXMgYXJlIGRpc2NhcmRlZAoJCQkJCS8vIChhbGwsIGJyYWlsbGUsIGVtYm9zc2VkLCBoYW5kaGVsZCwgcHJpbnQsIHByb2plY3Rpb24sIHNjcmVlbiwgc3BlZWNoLCB0dHksIHR2KQoJCQkJCWlmIChlbXB0eSgkdHlwZSkgT1IgKGlzc2V0KCR0eXBlWzFdKSBBTkQgKCgkdHlwZVsxXSA9PSAnYWxsJykgT1IgKCR0eXBlWzFdID09ICdwcmludCcpKSkpIHsKCQkJCQkJJHR5cGUgPSBhcnJheSgpOwoJCQkJCQlpZiAocHJlZ19tYXRjaCgnL2hyZWZbXHNdKj1bXHNdKiIoW14iXSopIi8nLCAkbGluaywgJHR5cGUpID4gMCkgewoJCQkJCQkJLy8gcmVhZCBDU1MgZGF0YSBmaWxlCgkJCQkJCQkkY3NzZGF0YSA9IFRDUERGX1NUQVRJQzo6ZmlsZUdldENvbnRlbnRzKHRyaW0oJHR5cGVbMV0pKTsKCQkJCQkJCWlmICgoJGNzc2RhdGEgIT09IEZBTFNFKSBBTkQgKHN0cmxlbigkY3NzZGF0YSkgPiAwKSkgewoJCQkJCQkJCSRjc3MgPSBhcnJheV9tZXJnZSgkY3NzLCBUQ1BERl9TVEFUSUM6OmV4dHJhY3RDU1Nwcm9wZXJ0aWVzKCRjc3NkYXRhKSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLy8gZXh0cmFjdCBzdHlsZSB0YWdzCgkJJG1hdGNoZXMgPSBhcnJheSgpOwoJCWlmIChwcmVnX21hdGNoX2FsbCgnLzxzdHlsZShbXlw+XSopPihbXlw8XSopPFwvc3R5bGU+L2lzVScsICRodG1sLCAkbWF0Y2hlcykgPiAwKSB7CgkJCWZvcmVhY2ggKCRtYXRjaGVzWzFdIGFzICRrZXkgPT4gJG1lZGlhKSB7CgkJCQkkdHlwZSA9IGFycmF5KCk7CgkJCQlwcmVnX21hdGNoKCcvbWVkaWFbXHNdKj1bXHNdKiIoW14iXSopIi8nLCAkbWVkaWEsICR0eXBlKTsKCQkJCS8vIGdldCAnYWxsJyBhbmQgJ3ByaW50JyBtZWRpYSwgb3RoZXIgbWVkaWEgdHlwZXMgYXJlIGRpc2NhcmRlZAoJCQkJLy8gKGFsbCwgYnJhaWxsZSwgZW1ib3NzZWQsIGhhbmRoZWxkLCBwcmludCwgcHJvamVjdGlvbiwgc2NyZWVuLCBzcGVlY2gsIHR0eSwgdHYpCgkJCQlpZiAoZW1wdHkoJHR5cGUpIE9SIChpc3NldCgkdHlwZVsxXSkgQU5EICgoJHR5cGVbMV0gPT0gJ2FsbCcpIE9SICgkdHlwZVsxXSA9PSAncHJpbnQnKSkpKSB7CgkJCQkJJGNzc2RhdGEgPSAkbWF0Y2hlc1syXVska2V5XTsKCQkJCQkkY3NzID0gYXJyYXlfbWVyZ2UoJGNzcywgVENQREZfU1RBVElDOjpleHRyYWN0Q1NTcHJvcGVydGllcygkY3NzZGF0YSkpOwoJCQkJfQoJCQl9CgkJfQoJCS8vIGNyZWF0ZSBhIHNwZWNpYWwgdGFnIHRvIGNvbnRhaW4gdGhlIENTUyBhcnJheSAodXNlZCBmb3IgdGFibGUgY29udGVudCkKCQkkY3NzdGFnYXJyYXkgPSAnPGNzc2FycmF5PicuaHRtbGVudGl0aWVzKHNlcmlhbGl6ZSgkY3NzKSkuJzwvY3NzYXJyYXk+JzsKCQkvLyByZW1vdmUgaGVhZCBhbmQgc3R5bGUgYmxvY2tzCgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88aGVhZChbXlw+XSopPiguKj8pPFwvaGVhZD4vc2lVJywgJycsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLzxzdHlsZShbXlw+XSopPihbXlw8XSopPFwvc3R5bGU+L2lzVScsICcnLCAkaHRtbCk7CgkJLy8gZGVmaW5lIGJsb2NrIHRhZ3MKCQkkYmxvY2t0YWdzID0gYXJyYXkoJ2Jsb2NrcXVvdGUnLCdicicsJ2RkJywnZGwnLCdkaXYnLCdkdCcsJ2gxJywnaDInLCdoMycsJ2g0JywnaDUnLCdoNicsJ2hyJywnbGknLCdvbCcsJ3AnLCdwcmUnLCd1bCcsJ3RjcGRmJywndGFibGUnLCd0cicsJ3RkJyk7CgkJLy8gZGVmaW5lIHNlbGYtY2xvc2luZyB0YWdzCgkJJHNlbGZjbG9zaW5ndGFncyA9IGFycmF5KCdhcmVhJywnYmFzZScsJ2Jhc2Vmb250JywnYnInLCdocicsJ2lucHV0JywnaW1nJywnbGluaycsJ21ldGEnKTsKCQkvLyByZW1vdmUgYWxsIHVuc3VwcG9ydGVkIHRhZ3MgKHRoZSBsaW5lIGJlbG93IGxpc3RzIGFsbCBzdXBwb3J0ZWQgdGFncykKCQkkaHRtbCA9IHN0cmlwX3RhZ3MoJGh0bWwsICc8bWFya2VyLz48YT48Yj48YmxvY2txdW90ZT48Ym9keT48YnI+PGJyLz48ZGQ+PGRlbD48ZGl2PjxkbD48ZHQ+PGVtPjxmb250Pjxmb3JtPjxoMT48aDI+PGgzPjxoND48aDU+PGg2Pjxocj48aHIvPjxpPjxpbWc+PGlucHV0PjxsYWJlbD48bGk+PG9sPjxvcHRpb24+PHA+PHByZT48cz48c2VsZWN0PjxzbWFsbD48c3Bhbj48c3RyaWtlPjxzdHJvbmc+PHN1Yj48c3VwPjx0YWJsZT48dGFibGVoZWFkPjx0Y3BkZj48dGQ+PHRleHRhcmVhPjx0aD48dGhlYWQ+PHRyPjx0dD48dT48dWw+Jyk7CgkJLy9yZXBsYWNlIHNvbWUgYmxhbmsgY2hhcmFjdGVycwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPHByZS8nLCAnPHhyZScsICRodG1sKTsgLy8gcHJlc2VydmUgcHJlIHRhZwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPCh0YWJsZXx0cnx0ZHx0aHx0Y3BkZnxibG9ja3F1b3RlfGRkfGRpdnxkbHxkdHxmb3JtfGgxfGgyfGgzfGg0fGg1fGg2fGJyfGhyfGxpfG9sfHVsfHApKFteXD5dKik+W1xuXHJcdF0rLycsICc8XFwxXFwyPicsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnQChcclxufFxyKUAnLCAiXG4iLCAkaHRtbCk7CgkJJHJlcFRhYmxlID0gYXJyYXkoIlx0IiA9PiAnICcsICJcMCIgPT4gJyAnLCAiXHgwQiIgPT4gJyAnLCAiXFwiID0+ICJcXFxcIik7CgkJJGh0bWwgPSBzdHJ0cigkaHRtbCwgJHJlcFRhYmxlKTsKCQkkb2Zmc2V0ID0gMDsKCQl3aGlsZSAoKCRvZmZzZXQgPCBzdHJsZW4oJGh0bWwpKSBBTkQgKCRwb3MgPSBzdHJwb3MoJGh0bWwsICc8L3ByZT4nLCAkb2Zmc2V0KSkgIT09IGZhbHNlKSB7CgkJCSRodG1sX2EgPSBzdWJzdHIoJGh0bWwsIDAsICRvZmZzZXQpOwoJCQkkaHRtbF9iID0gc3Vic3RyKCRodG1sLCAkb2Zmc2V0LCAoJHBvcyAtICRvZmZzZXQgKyA2KSk7CgkJCXdoaWxlIChwcmVnX21hdGNoKCInPHhyZShbXlw+XSopPiguKj8pXG4oLio/KTwvcHJlPidzaSIsICRodG1sX2IpKSB7CgkJCQkvLyBwcmVzZXJ2ZSBuZXdsaW5lcyBvbiA8cHJlPiB0YWcKCQkJCSRodG1sX2IgPSBwcmVnX3JlcGxhY2UoIic8eHJlKFteXD5dKik+KC4qPylcbiguKj8pPC9wcmU+J3NpIiwgIjx4cmVcXDE+XFwyPGJyIC8+XFwzPC9wcmU+IiwgJGh0bWxfYik7CgkJCX0KCQkJd2hpbGUgKHByZWdfbWF0Y2goIic8eHJlKFteXD5dKik+KC4qPykiLiR0aGlzLT5yZV9zcGFjZVsncCddLiIoLio/KTwvcHJlPiciLiR0aGlzLT5yZV9zcGFjZVsnbSddLCAkaHRtbF9iKSkgewoJCQkJLy8gcHJlc2VydmUgc3BhY2VzIG9uIDxwcmU+IHRhZwoJCQkJJGh0bWxfYiA9IHByZWdfcmVwbGFjZSgiJzx4cmUoW15cPl0qKT4oLio/KSIuJHRoaXMtPnJlX3NwYWNlWydwJ10uIiguKj8pPC9wcmU+JyIuJHRoaXMtPnJlX3NwYWNlWydtJ10sICI8eHJlXFwxPlxcMiZuYnNwO1xcMzwvcHJlPiIsICRodG1sX2IpOwoJCQl9CgkJCSRodG1sID0gJGh0bWxfYS4kaHRtbF9iLnN1YnN0cigkaHRtbCwgJHBvcyArIDYpOwoJCQkkb2Zmc2V0ID0gc3RybGVuKCRodG1sX2EuJGh0bWxfYik7CgkJfQoJCSRvZmZzZXQgPSAwOwoJCXdoaWxlICgoJG9mZnNldCA8IHN0cmxlbigkaHRtbCkpIEFORCAoJHBvcyA9IHN0cnBvcygkaHRtbCwgJzwvdGV4dGFyZWE+JywgJG9mZnNldCkpICE9PSBmYWxzZSkgewoJCQkkaHRtbF9hID0gc3Vic3RyKCRodG1sLCAwLCAkb2Zmc2V0KTsKCQkJJGh0bWxfYiA9IHN1YnN0cigkaHRtbCwgJG9mZnNldCwgKCRwb3MgLSAkb2Zmc2V0ICsgMTEpKTsKCQkJd2hpbGUgKHByZWdfbWF0Y2goIic8dGV4dGFyZWEoW15cPl0qKT4oLio/KVxuKC4qPyk8L3RleHRhcmVhPidzaSIsICRodG1sX2IpKSB7CgkJCQkvLyBwcmVzZXJ2ZSBuZXdsaW5lcyBvbiA8dGV4dGFyZWE+IHRhZwoJCQkJJGh0bWxfYiA9IHByZWdfcmVwbGFjZSgiJzx0ZXh0YXJlYShbXlw+XSopPiguKj8pXG4oLio/KTwvdGV4dGFyZWE+J3NpIiwgIjx0ZXh0YXJlYVxcMT5cXDI8VEJSPlxcMzwvdGV4dGFyZWE+IiwgJGh0bWxfYik7CgkJCQkkaHRtbF9iID0gcHJlZ19yZXBsYWNlKCInPHRleHRhcmVhKFteXD5dKik+KC4qPylbXCJdKC4qPyk8L3RleHRhcmVhPidzaSIsICI8dGV4dGFyZWFcXDE+XFwyJydcXDM8L3RleHRhcmVhPiIsICRodG1sX2IpOwoJCQl9CgkJCSRodG1sID0gJGh0bWxfYS4kaHRtbF9iLnN1YnN0cigkaHRtbCwgJHBvcyArIDExKTsKCQkJJG9mZnNldCA9IHN0cmxlbigkaHRtbF9hLiRodG1sX2IpOwoJCX0KCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLyhbXHNdKik8b3B0aW9uL3NpJywgJzxvcHRpb24nLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88XC9vcHRpb24+KFtcc10qKS9zaScsICc8L29wdGlvbj4nLCAkaHRtbCk7CgkJJG9mZnNldCA9IDA7CgkJd2hpbGUgKCgkb2Zmc2V0IDwgc3RybGVuKCRodG1sKSkgQU5EICgkcG9zID0gc3RycG9zKCRodG1sLCAnPC9vcHRpb24+JywgJG9mZnNldCkpICE9PSBmYWxzZSkgewoJCQkkaHRtbF9hID0gc3Vic3RyKCRodG1sLCAwLCAkb2Zmc2V0KTsKCQkJJGh0bWxfYiA9IHN1YnN0cigkaHRtbCwgJG9mZnNldCwgKCRwb3MgLSAkb2Zmc2V0ICsgOSkpOwoJCQl3aGlsZSAocHJlZ19tYXRjaCgiJzxvcHRpb24oW15cPl0qKT4oLio/KTwvb3B0aW9uPidzaSIsICRodG1sX2IpKSB7CgkJCQkkaHRtbF9iID0gcHJlZ19yZXBsYWNlKCInPG9wdGlvbihbXHNdKyl2YWx1ZT1cIihbXlwiXSopXCIoW15cPl0qKT4oLio/KTwvb3B0aW9uPidzaSIsICJcXDIjIVRhQiEjXFw0IyFOd0whIyIsICRodG1sX2IpOwoJCQkJJGh0bWxfYiA9IHByZWdfcmVwbGFjZSgiJzxvcHRpb24oW15cPl0qKT4oLio/KTwvb3B0aW9uPidzaSIsICJcXDIjIU53TCEjIiwgJGh0bWxfYik7CgkJCX0KCQkJJGh0bWwgPSAkaHRtbF9hLiRodG1sX2Iuc3Vic3RyKCRodG1sLCAkcG9zICsgOSk7CgkJCSRvZmZzZXQgPSBzdHJsZW4oJGh0bWxfYS4kaHRtbF9iKTsKCQl9CgkJaWYgKHByZWdfbWF0Y2goIic8L3NlbGVjdCdzaSIsICRodG1sKSkgewoJCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgiJzxzZWxlY3QoW15cPl0qKT4nc2kiLCAiPHNlbGVjdFxcMSBvcHQ9XCIiLCAkaHRtbCk7CgkJCSRodG1sID0gcHJlZ19yZXBsYWNlKCInIyFOd0whIzwvc2VsZWN0PidzaSIsICJcIiAvPiIsICRodG1sKTsKCQl9CgkJJGh0bWwgPSBzdHJfcmVwbGFjZSgiXG4iLCAnICcsICRodG1sKTsKCQkvLyByZXN0b3JlIHRleHRhcmVhIG5ld2xpbmVzCgkJJGh0bWwgPSBzdHJfcmVwbGFjZSgnPFRCUj4nLCAiXG4iLCAkaHRtbCk7CgkJLy8gcmVtb3ZlIGV4dHJhIHNwYWNlcyBmcm9tIGNvZGUKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnL1tcc10rPFwvKHRhYmxlfHRyfHVsfG9sfGRsKT4vJywgJzwvXFwxPicsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJys8XC8odGR8dGh8bGl8ZHR8ZGQpPi8nLiR0aGlzLT5yZV9zcGFjZVsnbSddLCAnPC9cXDE+JywgJGh0bWwpOwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvW1xzXSs8KHRyfHRkfHRofGxpfGR0fGRkKS8nLCAnPFxcMScsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJys8KHVsfG9sfGRsfGJyKS8nLiR0aGlzLT5yZV9zcGFjZVsnbSddLCAnPFxcMScsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLzxcLyh0YWJsZXx0cnx0ZHx0aHxibG9ja3F1b3RlfGRkfGR0fGRsfGRpdnxkdHxoMXxoMnxoM3xoNHxoNXxoNnxocnxsaXxvbHx1bHxwKT5bXHNdKzwvJywgJzwvXFwxPjwnLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88XC8odGR8dGgpPi8nLCAnPG1hcmtlciBzdHlsZT0iZm9udC1zaXplOjAiLz48L1xcMT4nLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88XC90YWJsZT4oW1xzXSopPG1hcmtlciBzdHlsZT0iZm9udC1zaXplOjAiXC8+LycsICc8L3RhYmxlPicsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJys8aW1nLycuJHRoaXMtPnJlX3NwYWNlWydtJ10sIGNocigzMikuJzxpbWcnLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88aW1nKFteXD5dKik+W1xzXSsoW15cPF0pL3hpJywgJzxpbWdcXDE+Jm5ic3A7XFwyJywgJGh0bWwpOwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPGltZyhbXlw+XSopPi94aScsICc8aW1nXFwxPjxzcGFuPjxtYXJrZXIgc3R5bGU9ImZvbnQtc2l6ZTowIi8+PC9zcGFuPicsICRodG1sKTsKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLzx4cmUvJywgJzxwcmUnLCAkaHRtbCk7IC8vIHJlc3RvcmUgcHJlIHRhZwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPHRleHRhcmVhKFteXD5dKik+KFteXDxdKik8XC90ZXh0YXJlYT4veGknLCAnPHRleHRhcmVhXFwxIHZhbHVlPSJcXDIiIC8+JywgJGh0bWwpOwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPGxpKFteXD5dKik+PFwvbGk+LycsICc8bGlcXDE+Jm5ic3A7PC9saT4nLCAkaHRtbCk7CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88bGkoW15cPl0qKT4nLiR0aGlzLT5yZV9zcGFjZVsncCddLicqPGltZy8nLiR0aGlzLT5yZV9zcGFjZVsnbSddLCAnPGxpXFwxPjxmb250IHNpemU9IjEiPiZuYnNwOzwvZm9udD48aW1nJywgJGh0bWwpOwoJCSRodG1sID0gcHJlZ19yZXBsYWNlKCcvPChbXlw+XC9dKik+W1xzXS8nLCAnPFxcMT4mbmJzcDsnLCAkaHRtbCk7IC8vIHByZXNlcnZlIHNvbWUgc3BhY2VzCgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy9bXHNdPFwvKFteXD5dKik+LycsICcmbmJzcDs8L1xcMT4nLCAkaHRtbCk7IC8vIHByZXNlcnZlIHNvbWUgc3BhY2VzCgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88c3UoW2JwXSkvJywgJzx6d3MvPjxzdVxcMScsICRodG1sKTsgLy8gZml4IHN1Yi9zdXAgYWxpZ25tZW50CgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88XC9zdShbYnBdKT4vJywgJzwvc3VcXDE+PHp3cy8+JywgJGh0bWwpOyAvLyBmaXggc3ViL3N1cCBhbGlnbm1lbnQKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJysvJy4kdGhpcy0+cmVfc3BhY2VbJ20nXSwgY2hyKDMyKSwgJGh0bWwpOyAvLyByZXBsYWNlIG11bHRpcGxlIHNwYWNlcyB3aXRoIGEgc2luZ2xlIHNwYWNlCgkJLy8gdHJpbSBzdHJpbmcKCQkkaHRtbCA9ICR0aGlzLT5zdHJpbmdUcmltKCRodG1sKTsKCQkvLyBmaXggYnIgdGFnIGFmdGVyIGxpCgkJJGh0bWwgPSBwcmVnX3JlcGxhY2UoJy88bGk+PGJyKFteXD5dKik+LycsICc8bGk+IDxiclxcMT4nLCAkaHRtbCk7CgkJLy8gZml4IGZpcnN0IGltYWdlIHRhZyBhbGlnbm1lbnQKCQkkaHRtbCA9IHByZWdfcmVwbGFjZSgnL148aW1nLycsICc8c3BhbiBzdHlsZT0iZm9udC1zaXplOjAiPjxiciAvPjwvc3Bhbj4gPGltZycsICRodG1sLCAxKTsKCQkvLyBwYXR0ZXJuIGZvciBnZW5lcmljIHRhZwoJCSR0YWdwYXR0ZXJuID0gJy8oPFtePl0rPikvJzsKCQkvLyBleHBsb2RlcyB0aGUgc3RyaW5nCgkJJGEgPSBwcmVnX3NwbGl0KCR0YWdwYXR0ZXJuLCAkaHRtbCwgLTEsIFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSB8IFBSRUdfU1BMSVRfTk9fRU1QVFkpOwoJCS8vIGNvdW50IGVsZW1lbnRzCgkJJG1heGVsID0gY291bnQoJGEpOwoJCSRlbGtleSA9IDA7CgkJJGtleSA9IDA7CgkJLy8gY3JlYXRlIGFuIGFycmF5IG9mIGVsZW1lbnRzCgkJJGRvbSA9IGFycmF5KCk7CgkJJGRvbVska2V5XSA9IGFycmF5KCk7CgkJLy8gc2V0IGluaGVyaXRhYmxlIHByb3BlcnRpZXMgZm90IHRoZSBmaXJzdCB2b2lkIGVsZW1lbnQKCQkvLyBwb3NzaWJsZSBpbmhlcml0YWJsZSBwcm9wZXJ0aWVzIGFyZTogYXppbXV0aCwgYm9yZGVyLWNvbGxhcHNlLCBib3JkZXItc3BhY2luZywgY2FwdGlvbi1zaWRlLCBjb2xvciwgY3Vyc29yLCBkaXJlY3Rpb24sIGVtcHR5LWNlbGxzLCBmb250LCBmb250LWZhbWlseSwgZm9udC1zdHJldGNoLCBmb250LXNpemUsIGZvbnQtc2l6ZS1hZGp1c3QsIGZvbnQtc3R5bGUsIGZvbnQtdmFyaWFudCwgZm9udC13ZWlnaHQsIGxldHRlci1zcGFjaW5nLCBsaW5lLWhlaWdodCwgbGlzdC1zdHlsZSwgbGlzdC1zdHlsZS1pbWFnZSwgbGlzdC1zdHlsZS1wb3NpdGlvbiwgbGlzdC1zdHlsZS10eXBlLCBvcnBoYW5zLCBwYWdlLCBwYWdlLWJyZWFrLWluc2lkZSwgcXVvdGVzLCBzcGVhaywgc3BlYWstaGVhZGVyLCB0ZXh0LWFsaWduLCB0ZXh0LWluZGVudCwgdGV4dC10cmFuc2Zvcm0sIHZvbHVtZSwgd2hpdGUtc3BhY2UsIHdpZG93cywgd29yZC1zcGFjaW5nCgkJJGRvbVska2V5XVsndGFnJ10gPSBmYWxzZTsKCQkkZG9tWyRrZXldWydibG9jayddID0gZmFsc2U7CgkJJGRvbVska2V5XVsndmFsdWUnXSA9ICcnOwoJCSRkb21bJGtleV1bJ3BhcmVudCddID0gMDsKCQkkZG9tWyRrZXldWydoaWRlJ10gPSBmYWxzZTsKCQkkZG9tWyRrZXldWydmb250bmFtZSddID0gJHRoaXMtPkZvbnRGYW1pbHk7CgkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gPSAkdGhpcy0+Rm9udFN0eWxlOwoJCSRkb21bJGtleV1bJ2ZvbnRzaXplJ10gPSAkdGhpcy0+Rm9udFNpemVQdDsKCQkkZG9tWyRrZXldWydmb250LXN0cmV0Y2gnXSA9ICR0aGlzLT5mb250X3N0cmV0Y2hpbmc7CgkJJGRvbVska2V5XVsnbGV0dGVyLXNwYWNpbmcnXSA9ICR0aGlzLT5mb250X3NwYWNpbmc7CgkJJGRvbVska2V5XVsnc3Ryb2tlJ10gPSAkdGhpcy0+dGV4dHN0cm9rZXdpZHRoOwoJCSRkb21bJGtleV1bJ2ZpbGwnXSA9ICgoJHRoaXMtPnRleHRyZW5kZXJtb2RlICUgMikgPT0gMCk7CgkJJGRvbVska2V5XVsnY2xpcCddID0gKCR0aGlzLT50ZXh0cmVuZGVybW9kZSA+IDMpOwoJCSRkb21bJGtleV1bJ2xpbmUtaGVpZ2h0J10gPSAkdGhpcy0+Y2VsbF9oZWlnaHRfcmF0aW87CgkJJGRvbVska2V5XVsnYmdjb2xvciddID0gZmFsc2U7CgkJJGRvbVska2V5XVsnZmdjb2xvciddID0gJHRoaXMtPmZnY29sb3I7IC8vIGNvbG9yCgkJJGRvbVska2V5XVsnc3Ryb2tlY29sb3InXSA9ICR0aGlzLT5zdHJva2Vjb2xvcjsKCQkkZG9tWyRrZXldWydhbGlnbiddID0gJyc7CgkJJGRvbVska2V5XVsnbGlzdHR5cGUnXSA9ICcnOwoJCSRkb21bJGtleV1bJ3RleHQtaW5kZW50J10gPSAwOwoJCSRkb21bJGtleV1bJ3RleHQtdHJhbnNmb3JtJ10gPSAnJzsKCQkkZG9tWyRrZXldWydib3JkZXInXSA9IGFycmF5KCk7CgkJJGRvbVska2V5XVsnZGlyJ10gPSAkdGhpcy0+cnRsPydydGwnOidsdHInOwoJCSR0aGVhZCA9IGZhbHNlOyAvLyB0cnVlIHdoZW4gd2UgYXJlIGluc2lkZSB0aGUgVEhFQUQgdGFnCgkJKyska2V5OwoJCSRsZXZlbCA9IGFycmF5KCk7CgkJYXJyYXlfcHVzaCgkbGV2ZWwsIDApOyAvLyByb290CgkJd2hpbGUgKCRlbGtleSA8ICRtYXhlbCkgewoJCQkkZG9tWyRrZXldID0gYXJyYXkoKTsKCQkJJGVsZW1lbnQgPSAkYVskZWxrZXldOwoJCQkkZG9tWyRrZXldWydlbGtleSddID0gJGVsa2V5OwoJCQlpZiAocHJlZ19tYXRjaCgkdGFncGF0dGVybiwgJGVsZW1lbnQpKSB7CgkJCQkvLyBodG1sIHRhZwoJCQkJJGVsZW1lbnQgPSBzdWJzdHIoJGVsZW1lbnQsIDEsIC0xKTsKCQkJCS8vIGdldCB0YWcgbmFtZQoJCQkJcHJlZ19tYXRjaCgnL1tcL10/KFthLXpBLVowLTldKikvJywgJGVsZW1lbnQsICR0YWcpOwoJCQkJJHRhZ25hbWUgPSBzdHJ0b2xvd2VyKCR0YWdbMV0pOwoJCQkJLy8gY2hlY2sgaWYgd2UgYXJlIGluc2lkZSBhIHRhYmxlIGhlYWRlcgoJCQkJaWYgKCR0YWduYW1lID09ICd0aGVhZCcpIHsKCQkJCQlpZiAoJGVsZW1lbnRbMF0gPT0gJy8nKSB7CgkJCQkJCSR0aGVhZCA9IGZhbHNlOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGVhZCA9IHRydWU7CgkJCQkJfQoJCQkJCSsrJGVsa2V5OwoJCQkJCWNvbnRpbnVlOwoJCQkJfQoJCQkJJGRvbVska2V5XVsndGFnJ10gPSB0cnVlOwoJCQkJJGRvbVska2V5XVsndmFsdWUnXSA9ICR0YWduYW1lOwoJCQkJaWYgKGluX2FycmF5KCRkb21bJGtleV1bJ3ZhbHVlJ10sICRibG9ja3RhZ3MpKSB7CgkJCQkJJGRvbVska2V5XVsnYmxvY2snXSA9IHRydWU7CgkJCQl9IGVsc2UgewoJCQkJCSRkb21bJGtleV1bJ2Jsb2NrJ10gPSBmYWxzZTsKCQkJCX0KCQkJCWlmICgkZWxlbWVudFswXSA9PSAnLycpIHsKCQkJCQkvLyAqKiogY2xvc2luZyBodG1sIHRhZwoJCQkJCSRkb21bJGtleV1bJ29wZW5pbmcnXSA9IGZhbHNlOwoJCQkJCSRkb21bJGtleV1bJ3BhcmVudCddID0gZW5kKCRsZXZlbCk7CgkJCQkJYXJyYXlfcG9wKCRsZXZlbCk7CgkJCQkJJGRvbVska2V5XVsnaGlkZSddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnaGlkZSddOwoJCQkJCSRkb21bJGtleV1bJ2ZvbnRuYW1lJ10gPSAkZG9tWygkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydwYXJlbnQnXSldWydmb250bmFtZSddOwoJCQkJCSRkb21bJGtleV1bJ2ZvbnRzdHlsZSddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnZm9udHN0eWxlJ107CgkJCQkJJGRvbVska2V5XVsnZm9udHNpemUnXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ2ZvbnRzaXplJ107CgkJCQkJJGRvbVska2V5XVsnZm9udC1zdHJldGNoJ10gPSAkZG9tWygkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydwYXJlbnQnXSldWydmb250LXN0cmV0Y2gnXTsKCQkJCQkkZG9tWyRrZXldWydsZXR0ZXItc3BhY2luZyddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnbGV0dGVyLXNwYWNpbmcnXTsKCQkJCQkkZG9tWyRrZXldWydzdHJva2UnXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ3N0cm9rZSddOwoJCQkJCSRkb21bJGtleV1bJ2ZpbGwnXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ2ZpbGwnXTsKCQkJCQkkZG9tWyRrZXldWydjbGlwJ10gPSAkZG9tWygkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydwYXJlbnQnXSldWydjbGlwJ107CgkJCQkJJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ2xpbmUtaGVpZ2h0J107CgkJCQkJJGRvbVska2V5XVsnYmdjb2xvciddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnYmdjb2xvciddOwoJCQkJCSRkb21bJGtleV1bJ2ZnY29sb3InXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ2ZnY29sb3InXTsKCQkJCQkkZG9tWyRrZXldWydzdHJva2Vjb2xvciddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnc3Ryb2tlY29sb3InXTsKCQkJCQkkZG9tWyRrZXldWydhbGlnbiddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnYWxpZ24nXTsKCQkJCQkkZG9tWyRrZXldWyd0ZXh0LXRyYW5zZm9ybSddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsndGV4dC10cmFuc2Zvcm0nXTsKCQkJCQkkZG9tWyRrZXldWydkaXInXSA9ICRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ2RpciddOwoJCQkJCWlmIChpc3NldCgkZG9tWygkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydwYXJlbnQnXSldWydsaXN0dHlwZSddKSkgewoJCQkJCQkkZG9tWyRrZXldWydsaXN0dHlwZSddID0gJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnbGlzdHR5cGUnXTsKCQkJCQl9CgkJCQkJLy8gc2V0IHRoZSBudW1iZXIgb2YgY29sdW1ucyBpbiB0YWJsZSB0YWcKCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RyJykgQU5EICghaXNzZXQoJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnY29scyddKSkpIHsKCQkJCQkJJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnY29scyddID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnY29scyddOwoJCQkJCX0KCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RkJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RoJykpIHsKCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnY29udGVudCddID0gJGNzc3RhZ2FycmF5OwoJCQkJCQlmb3IgKCRpID0gKCRkb21bJGtleV1bJ3BhcmVudCddICsgMSk7ICRpIDwgJGtleTsgKyskaSkgewoJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnY29udGVudCddIC49ICRhWyRkb21bJGldWydlbGtleSddXTsKCQkJCQkJfQoJCQkJCQkka2V5ID0gJGk7CgkJCQkJCS8vIG1hcmsgbmVzdGVkIHRhYmxlcwoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjb250ZW50J10gPSBzdHJfcmVwbGFjZSgnPHRhYmxlJywgJzx0YWJsZSBuZXN0ZWQ9InRydWUiJywgJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnY29udGVudCddKTsKCQkJCQkJLy8gcmVtb3ZlIHRoZWFkIHNlY3Rpb25zIGZyb20gbmVzdGVkIHRhYmxlcwoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjb250ZW50J10gPSBzdHJfcmVwbGFjZSgnPHRoZWFkPicsICcnLCAkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjb250ZW50J10pOwoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjb250ZW50J10gPSBzdHJfcmVwbGFjZSgnPC90aGVhZD4nLCAnJywgJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnY29udGVudCddKTsKCQkJCQl9CgkJCQkJLy8gc3RvcmUgaGVhZGVyIHJvd3Mgb24gYSBuZXcgdGFibGUKCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RyJykgQU5EICgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWyd0aGVhZCddID09PSB0cnVlKSkgewoJCQkJCQlpZiAoVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsndGhlYWQnXSkpIHsKCQkJCQkJCSRkb21bKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddKV1bJ3RoZWFkJ10gPSAkY3NzdGFnYXJyYXkuJGFbJGRvbVsoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncGFyZW50J10pXVsnZWxrZXknXV07CgkJCQkJCX0KCQkJCQkJZm9yICgkaSA9ICRkb21bJGtleV1bJ3BhcmVudCddOyAkaSA8PSAka2V5OyArKyRpKSB7CgkJCQkJCQkkZG9tWygkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydwYXJlbnQnXSldWyd0aGVhZCddIC49ICRhWyRkb21bJGldWydlbGtleSddXTsKCQkJCQkJfQoJCQkJCQlpZiAoIWlzc2V0KCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2F0dHJpYnV0ZSddKSkgewoJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnYXR0cmlidXRlJ10gPSBhcnJheSgpOwoJCQkJCQl9CgkJCQkJCS8vIGhlYWRlciBlbGVtZW50cyBtdXN0IGJlIGFsd2F5cyBjb250YWluZWQgaW4gYSBzaW5nbGUgcGFnZQoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsnbm9iciddID0gJ3RydWUnOwoJCQkJCX0KCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RhYmxlJykgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsndGhlYWQnXSkpKSB7CgkJCQkJCS8vIHJlbW92ZSB0aGUgbm9iciBhdHRyaWJ1dGVzIGZyb20gdGhlIHRhYmxlIGhlYWRlcgoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWyd0aGVhZCddID0gc3RyX3JlcGxhY2UoJyBub2JyPSJ0cnVlIicsICcnLCAkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWyd0aGVhZCddKTsKCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsndGhlYWQnXSAuPSAnPC90YWJsZWhlYWQ+JzsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCS8vICoqKiBvcGVuaW5nIG9yIHNlbGYtY2xvc2luZyBodG1sIHRhZwoJCQkJCSRkb21bJGtleV1bJ29wZW5pbmcnXSA9IHRydWU7CgkJCQkJJGRvbVska2V5XVsncGFyZW50J10gPSBlbmQoJGxldmVsKTsKCQkJCQlpZiAoKHN1YnN0cigkZWxlbWVudCwgLTEsIDEpID09ICcvJykgT1IgKGluX2FycmF5KCRkb21bJGtleV1bJ3ZhbHVlJ10sICRzZWxmY2xvc2luZ3RhZ3MpKSkgewoJCQkJCQkvLyBzZWxmLWNsb3NpbmcgdGFnCgkJCQkJCSRkb21bJGtleV1bJ3NlbGYnXSA9IHRydWU7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gb3BlbmluZyB0YWcKCQkJCQkJYXJyYXlfcHVzaCgkbGV2ZWwsICRrZXkpOwoJCQkJCQkkZG9tWyRrZXldWydzZWxmJ10gPSBmYWxzZTsKCQkJCQl9CgkJCQkJLy8gY29weSBzb21lIHZhbHVlcyBmcm9tIHBhcmVudAoJCQkJCSRwYXJlbnRrZXkgPSAwOwoJCQkJCWlmICgka2V5ID4gMCkgewoJCQkJCQkkcGFyZW50a2V5ID0gJGRvbVska2V5XVsncGFyZW50J107CgkJCQkJCSRkb21bJGtleV1bJ2hpZGUnXSA9ICRkb21bJHBhcmVudGtleV1bJ2hpZGUnXTsKCQkJCQkJJGRvbVska2V5XVsnZm9udG5hbWUnXSA9ICRkb21bJHBhcmVudGtleV1bJ2ZvbnRuYW1lJ107CgkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzdHlsZSddID0gJGRvbVskcGFyZW50a2V5XVsnZm9udHN0eWxlJ107CgkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzaXplJ10gPSAkZG9tWyRwYXJlbnRrZXldWydmb250c2l6ZSddOwoJCQkJCQkkZG9tWyRrZXldWydmb250LXN0cmV0Y2gnXSA9ICRkb21bJHBhcmVudGtleV1bJ2ZvbnQtc3RyZXRjaCddOwoJCQkJCQkkZG9tWyRrZXldWydsZXR0ZXItc3BhY2luZyddID0gJGRvbVskcGFyZW50a2V5XVsnbGV0dGVyLXNwYWNpbmcnXTsKCQkJCQkJJGRvbVska2V5XVsnc3Ryb2tlJ10gPSAkZG9tWyRwYXJlbnRrZXldWydzdHJva2UnXTsKCQkJCQkJJGRvbVska2V5XVsnZmlsbCddID0gJGRvbVskcGFyZW50a2V5XVsnZmlsbCddOwoJCQkJCQkkZG9tWyRrZXldWydjbGlwJ10gPSAkZG9tWyRwYXJlbnRrZXldWydjbGlwJ107CgkJCQkJCSRkb21bJGtleV1bJ2xpbmUtaGVpZ2h0J10gPSAkZG9tWyRwYXJlbnRrZXldWydsaW5lLWhlaWdodCddOwoJCQkJCQkkZG9tWyRrZXldWydiZ2NvbG9yJ10gPSAkZG9tWyRwYXJlbnRrZXldWydiZ2NvbG9yJ107CgkJCQkJCSRkb21bJGtleV1bJ2ZnY29sb3InXSA9ICRkb21bJHBhcmVudGtleV1bJ2ZnY29sb3InXTsKCQkJCQkJJGRvbVska2V5XVsnc3Ryb2tlY29sb3InXSA9ICRkb21bJHBhcmVudGtleV1bJ3N0cm9rZWNvbG9yJ107CgkJCQkJCSRkb21bJGtleV1bJ2FsaWduJ10gPSAkZG9tWyRwYXJlbnRrZXldWydhbGlnbiddOwoJCQkJCQkkZG9tWyRrZXldWydsaXN0dHlwZSddID0gJGRvbVskcGFyZW50a2V5XVsnbGlzdHR5cGUnXTsKCQkJCQkJJGRvbVska2V5XVsndGV4dC1pbmRlbnQnXSA9ICRkb21bJHBhcmVudGtleV1bJ3RleHQtaW5kZW50J107CgkJCQkJCSRkb21bJGtleV1bJ3RleHQtdHJhbnNmb3JtJ10gPSAkZG9tWyRwYXJlbnRrZXldWyd0ZXh0LXRyYW5zZm9ybSddOwoJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXSA9IGFycmF5KCk7CgkJCQkJCSRkb21bJGtleV1bJ2RpciddID0gJGRvbVskcGFyZW50a2V5XVsnZGlyJ107CgkJCQkJfQoJCQkJCS8vIGdldCBhdHRyaWJ1dGVzCgkJCQkJcHJlZ19tYXRjaF9hbGwoJy8oW149XHNdKilbXHNdKj1bXHNdKiIoW14iXSopIi8nLCAkZWxlbWVudCwgJGF0dHJfYXJyYXksIFBSRUdfUEFUVEVSTl9PUkRFUik7CgkJCQkJJGRvbVska2V5XVsnYXR0cmlidXRlJ10gPSBhcnJheSgpOyAvLyByZXNldCBhdHRyaWJ1dGUgYXJyYXkKCQkJCQl3aGlsZSAobGlzdCgkaWQsICRuYW1lKSA9IGVhY2goJGF0dHJfYXJyYXlbMV0pKSB7CgkJCQkJCSRkb21bJGtleV1bJ2F0dHJpYnV0ZSddW3N0cnRvbG93ZXIoJG5hbWUpXSA9ICRhdHRyX2FycmF5WzJdWyRpZF07CgkJCQkJfQoJCQkJCWlmICghZW1wdHkoJGNzcykpIHsKCQkJCQkJLy8gbWVyZ2UgQ1NTIHN0eWxlIHRvIGN1cnJlbnQgc3R5bGUKCQkJCQkJbGlzdCgkZG9tWyRrZXldWydjc3NzZWwnXSwgJGRvbVska2V5XVsnY3NzZGF0YSddKSA9IFRDUERGX1NUQVRJQzo6Z2V0Q1NTZGF0YUFycmF5KCRkb20sICRrZXksICRjc3MpOwoJCQkJCQkkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc3R5bGUnXSA9IFRDUERGX1NUQVRJQzo6Z2V0VGFnU3R5bGVGcm9tQ1NTYXJyYXkoJGRvbVska2V5XVsnY3NzZGF0YSddKTsKCQkJCQl9CgkJCQkJLy8gc3BsaXQgc3R5bGUgYXR0cmlidXRlcwoJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc3R5bGUnXSkgQU5EICFlbXB0eSgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc3R5bGUnXSkpIHsKCQkJCQkJLy8gZ2V0IHN0eWxlIGF0dHJpYnV0ZXMKCQkJCQkJcHJlZ19tYXRjaF9hbGwoJy8oW147OlxzXSopOihbXjtdKikvJywgJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3N0eWxlJ10sICRzdHlsZV9hcnJheSwgUFJFR19QQVRURVJOX09SREVSKTsKCQkJCQkJJGRvbVska2V5XVsnc3R5bGUnXSA9IGFycmF5KCk7IC8vIHJlc2V0IHN0eWxlIGF0dHJpYnV0ZSBhcnJheQoJCQkJCQl3aGlsZSAobGlzdCgkaWQsICRuYW1lKSA9IGVhY2goJHN0eWxlX2FycmF5WzFdKSkgewoJCQkJCQkJLy8gaW4gY2FzZSBvZiBkdXBsaWNhdGUgYXR0cmlidXRlIHRoZSBsYXN0IHJlcGxhY2UgdGhlIHByZXZpb3VzCgkJCQkJCQkkZG9tWyRrZXldWydzdHlsZSddW3N0cnRvbG93ZXIoJG5hbWUpXSA9IHRyaW0oJHN0eWxlX2FycmF5WzJdWyRpZF0pOwoJCQkJCQl9CgkJCQkJCS8vIC0tLSBnZXQgc29tZSBzdHlsZSBhdHRyaWJ1dGVzIC0tLQoJCQkJCQkvLyB0ZXh0IGRpcmVjdGlvbgoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZGlyZWN0aW9uJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydkaXInXSA9ICRkb21bJGtleV1bJ3N0eWxlJ11bJ2RpcmVjdGlvbiddOwoJCQkJCQl9CgkJCQkJCS8vIGRpc3BsYXkKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2Rpc3BsYXknXSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ2hpZGUnXSA9ICh0cmltKHN0cnRvbG93ZXIoJGRvbVska2V5XVsnc3R5bGUnXVsnZGlzcGxheSddKSkgPT0gJ25vbmUnKTsKCQkJCQkJfQoJCQkJCQkvLyBmb250IGZhbWlseQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1mYW1pbHknXSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ2ZvbnRuYW1lJ10gPSAkdGhpcy0+Z2V0Rm9udEZhbWlseU5hbWUoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1mYW1pbHknXSk7CgkJCQkJCX0KCQkJCQkJLy8gbGlzdC1zdHlsZS10eXBlCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydsaXN0LXN0eWxlLXR5cGUnXSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ2xpc3R0eXBlJ10gPSB0cmltKHN0cnRvbG93ZXIoJGRvbVska2V5XVsnc3R5bGUnXVsnbGlzdC1zdHlsZS10eXBlJ10pKTsKCQkJCQkJCWlmICgkZG9tWyRrZXldWydsaXN0dHlwZSddID09ICdpbmhlcml0JykgewoJCQkJCQkJCSRkb21bJGtleV1bJ2xpc3R0eXBlJ10gPSAkZG9tWyRwYXJlbnRrZXldWydsaXN0dHlwZSddOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCS8vIHRleHQtaW5kZW50CgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWyd0ZXh0LWluZGVudCddKSkgewoJCQkJCQkJJGRvbVska2V5XVsndGV4dC1pbmRlbnQnXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGRvbVska2V5XVsnc3R5bGUnXVsndGV4dC1pbmRlbnQnXSk7CgkJCQkJCQlpZiAoJGRvbVska2V5XVsndGV4dC1pbmRlbnQnXSA9PSAnaW5oZXJpdCcpIHsKCQkJCQkJCQkkZG9tWyRrZXldWyd0ZXh0LWluZGVudCddID0gJGRvbVskcGFyZW50a2V5XVsndGV4dC1pbmRlbnQnXTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkvLyB0ZXh0LXRyYW5zZm9ybQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsndGV4dC10cmFuc2Zvcm0nXSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ3RleHQtdHJhbnNmb3JtJ10gPSAkZG9tWyRrZXldWydzdHlsZSddWyd0ZXh0LXRyYW5zZm9ybSddOwoJCQkJCQl9CgkJCQkJCS8vIGZvbnQgc2l6ZQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1zaXplJ10pKSB7CgkJCQkJCQkkZnNpemUgPSB0cmltKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2ZvbnQtc2l6ZSddKTsKCQkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzaXplJ10gPSAkdGhpcy0+Z2V0SFRNTEZvbnRVbml0cygkZnNpemUsICRkb21bMF1bJ2ZvbnRzaXplJ10sICRkb21bJHBhcmVudGtleV1bJ2ZvbnRzaXplJ10sICdwdCcpOwoJCQkJCQl9CgkJCQkJCS8vIGZvbnQtc3RyZXRjaAoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1zdHJldGNoJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmb250LXN0cmV0Y2gnXSA9ICR0aGlzLT5nZXRDU1NGb250U3RyZXRjaGluZygkZG9tWyRrZXldWydzdHlsZSddWydmb250LXN0cmV0Y2gnXSwgJGRvbVskcGFyZW50a2V5XVsnZm9udC1zdHJldGNoJ10pOwoJCQkJCQl9CgkJCQkJCS8vIGxldHRlci1zcGFjaW5nCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydsZXR0ZXItc3BhY2luZyddKSkgewoJCQkJCQkJJGRvbVska2V5XVsnbGV0dGVyLXNwYWNpbmcnXSA9ICR0aGlzLT5nZXRDU1NGb250U3BhY2luZygkZG9tWyRrZXldWydzdHlsZSddWydsZXR0ZXItc3BhY2luZyddLCAkZG9tWyRwYXJlbnRrZXldWydsZXR0ZXItc3BhY2luZyddKTsKCQkJCQkJfQoJCQkJCQkvLyBsaW5lLWhlaWdodCAoaW50ZXJuYWxseSBpcyB0aGUgY2VsbCBoZWlnaHQgcmF0aW8pCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydsaW5lLWhlaWdodCddKSkgewoJCQkJCQkJJGxpbmVoZWlnaHQgPSB0cmltKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2xpbmUtaGVpZ2h0J10pOwoJCQkJCQkJc3dpdGNoICgkbGluZWhlaWdodCkgewoJCQkJCQkJCS8vIEEgbm9ybWFsIGxpbmUgaGVpZ2h0LiBUaGlzIGlzIGRlZmF1bHQKCQkJCQkJCQljYXNlICdub3JtYWwnOiB7CgkJCQkJCQkJCSRkb21bJGtleV1bJ2xpbmUtaGVpZ2h0J10gPSAkZG9tWzBdWydsaW5lLWhlaWdodCddOwoJCQkJCQkJCQlicmVhazsKCQkJCQkJCQl9CgkJCQkJCQkJY2FzZSAnaW5oZXJpdCc6IHsKCQkJCQkJCQkJJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSA9ICRkb21bJHBhcmVudGtleV1bJ2xpbmUtaGVpZ2h0J107CgkJCQkJCQkJfQoJCQkJCQkJCWRlZmF1bHQ6IHsKCQkJCQkJCQkJaWYgKGlzX251bWVyaWMoJGxpbmVoZWlnaHQpKSB7CgkJCQkJCQkJCQkvLyBjb252ZXJ0IHRvIHBlcmNlbnRhZ2Ugb2YgZm9udCBoZWlnaHQKCQkJCQkJCQkJCSRsaW5laGVpZ2h0ID0gKCRsaW5laGVpZ2h0ICogMTAwKS4nJSc7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGxpbmVoZWlnaHQsIDEsICclJywgdHJ1ZSk7CgkJCQkJCQkJCWlmIChzdWJzdHIoJGxpbmVoZWlnaHQsIC0xKSAhPT0gJyUnKSB7CgkJCQkJCQkJCQkkZG9tWyRrZXldWydsaW5lLWhlaWdodCddID0gKCgkZG9tWyRrZXldWydsaW5lLWhlaWdodCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snVCddIC0gJHRoaXMtPmNlbGxfcGFkZGluZ1snQiddKSAvICRkb21bJGtleV1bJ2ZvbnRzaXplJ10pOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCS8vIGZvbnQgc3R5bGUKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2ZvbnQtd2VpZ2h0J10pKSB7CgkJCQkJCQlpZiAoc3RydG9sb3dlcigkZG9tWyRrZXldWydzdHlsZSddWydmb250LXdlaWdodCddWzBdKSA9PSAnbicpIHsKCQkJCQkJCQlpZiAoc3RycG9zKCRkb21bJGtleV1bJ2ZvbnRzdHlsZSddLCAnQicpICE9PSBmYWxzZSkgewoJCQkJCQkJCQkkZG9tWyRrZXldWydmb250c3R5bGUnXSA9IHN0cl9yZXBsYWNlKCdCJywgJycsICRkb21bJGtleV1bJ2ZvbnRzdHlsZSddKTsKCQkJCQkJCQl9CgkJCQkJCQl9IGVsc2VpZiAoc3RydG9sb3dlcigkZG9tWyRrZXldWydzdHlsZSddWydmb250LXdlaWdodCddWzBdKSA9PSAnYicpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydmb250c3R5bGUnXSAuPSAnQic7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2ZvbnQtc3R5bGUnXSkgQU5EIChzdHJ0b2xvd2VyKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2ZvbnQtc3R5bGUnXVswXSkgPT0gJ2knKSkgewoJCQkJCQkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gLj0gJ0knOwoJCQkJCQl9CgkJCQkJCS8vIGZvbnQgY29sb3IKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2NvbG9yJ10pIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2NvbG9yJ10pKSkgewoJCQkJCQkJJGRvbVska2V5XVsnZmdjb2xvciddID0gVENQREZfQ09MT1JTOjpjb252ZXJ0SFRNTENvbG9yVG9EZWMoJGRvbVska2V5XVsnc3R5bGUnXVsnY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQkJfSBlbHNlaWYgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ2EnKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmZ2NvbG9yJ10gPSAkdGhpcy0+aHRtbExpbmtDb2xvckFycmF5OwoJCQkJCQl9CgkJCQkJCS8vIGJhY2tncm91bmQgY29sb3IKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2JhY2tncm91bmQtY29sb3InXSkgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVska2V5XVsnc3R5bGUnXVsnYmFja2dyb3VuZC1jb2xvciddKSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ2JnY29sb3InXSA9IFRDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2JhY2tncm91bmQtY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQkJfQoJCQkJCQkvLyB0ZXh0LWRlY29yYXRpb24KCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ3RleHQtZGVjb3JhdGlvbiddKSkgewoJCQkJCQkJJGRlY29ycyA9IGV4cGxvZGUoJyAnLCBzdHJ0b2xvd2VyKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3RleHQtZGVjb3JhdGlvbiddKSk7CgkJCQkJCQlmb3JlYWNoICgkZGVjb3JzIGFzICRkZWMpIHsKCQkJCQkJCQkkZGVjID0gdHJpbSgkZGVjKTsKCQkJCQkJCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRkZWMpKSB7CgkJCQkJCQkJCWlmICgkZGVjWzBdID09ICd1JykgewoJCQkJCQkJCQkJLy8gdW5kZXJsaW5lCgkJCQkJCQkJCQkkZG9tWyRrZXldWydmb250c3R5bGUnXSAuPSAnVSc7CgkJCQkJCQkJCX0gZWxzZWlmICgkZGVjWzBdID09ICdsJykgewoJCQkJCQkJCQkJLy8gbGluZS10aHJvdWdoCgkJCQkJCQkJCQkkZG9tWyRrZXldWydmb250c3R5bGUnXSAuPSAnRCc7CgkJCQkJCQkJCX0gZWxzZWlmICgkZGVjWzBdID09ICdvJykgewoJCQkJCQkJCQkJLy8gb3ZlcmxpbmUKCQkJCQkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzdHlsZSddIC49ICdPJzsKCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSBlbHNlaWYgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ2EnKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmb250c3R5bGUnXSA9ICR0aGlzLT5odG1sTGlua0ZvbnRTdHlsZTsKCQkJCQkJfQoJCQkJCQkvLyBjaGVjayBmb3Igd2lkdGggYXR0cmlidXRlCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWyd3aWR0aCddKSkgewoJCQkJCQkJJGRvbVska2V5XVsnd2lkdGgnXSA9ICRkb21bJGtleV1bJ3N0eWxlJ11bJ3dpZHRoJ107CgkJCQkJCX0KCQkJCQkJLy8gY2hlY2sgZm9yIGhlaWdodCBhdHRyaWJ1dGUKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2hlaWdodCddKSkgewoJCQkJCQkJJGRvbVska2V5XVsnaGVpZ2h0J10gPSAkZG9tWyRrZXldWydzdHlsZSddWydoZWlnaHQnXTsKCQkJCQkJfQoJCQkJCQkvLyBjaGVjayBmb3IgdGV4dCBhbGlnbm1lbnQKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ3RleHQtYWxpZ24nXSkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ2FsaWduJ10gPSBzdHJ0b3VwcGVyKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3RleHQtYWxpZ24nXVswXSk7CgkJCQkJCX0KCQkJCQkJLy8gY2hlY2sgZm9yIENTUyBib3JkZXIgcHJvcGVydGllcwoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyJ10pKSB7CgkJCQkJCQkkYm9yZGVyc3R5bGUgPSAkdGhpcy0+Z2V0Q1NTQm9yZGVyU3R5bGUoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyJ10pOwoJCQkJCQkJaWYgKCFlbXB0eSgkYm9yZGVyc3R5bGUpKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0xUUkInXSA9ICRib3JkZXJzdHlsZTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLWNvbG9yJ10pKSB7CgkJCQkJCQkkYnJkX2NvbG9ycyA9IHByZWdfc3BsaXQoJy9bXHNdKy8nLCB0cmltKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2JvcmRlci1jb2xvciddKSk7CgkJCQkJCQlpZiAoaXNzZXQoJGJyZF9jb2xvcnNbM10pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0wnXVsnY29sb3InXSA9IFRDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRicmRfY29sb3JzWzNdLCAkdGhpcy0+c3BvdF9jb2xvcnMpOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRicmRfY29sb3JzWzFdKSkgewoJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydSJ11bJ2NvbG9yJ10gPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkYnJkX2NvbG9yc1sxXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkYnJkX2NvbG9yc1swXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnVCddWydjb2xvciddID0gVENQREZfQ09MT1JTOjpjb252ZXJ0SFRNTENvbG9yVG9EZWMoJGJyZF9jb2xvcnNbMF0sICR0aGlzLT5zcG90X2NvbG9ycyk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGJyZF9jb2xvcnNbMl0pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0InXVsnY29sb3InXSA9IFRDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRicmRfY29sb3JzWzJdLCAkdGhpcy0+c3BvdF9jb2xvcnMpOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItd2lkdGgnXSkpIHsKCQkJCQkJCSRicmRfd2lkdGhzID0gcHJlZ19zcGxpdCgnL1tcc10rLycsIHRyaW0oJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLXdpZHRoJ10pKTsKCQkJCQkJCWlmIChpc3NldCgkYnJkX3dpZHRoc1szXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnTCddWyd3aWR0aCddID0gJHRoaXMtPmdldENTU0JvcmRlcldpZHRoKCRicmRfd2lkdGhzWzNdKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkYnJkX3dpZHRoc1sxXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnUiddWyd3aWR0aCddID0gJHRoaXMtPmdldENTU0JvcmRlcldpZHRoKCRicmRfd2lkdGhzWzFdKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkYnJkX3dpZHRoc1swXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnVCddWyd3aWR0aCddID0gJHRoaXMtPmdldENTU0JvcmRlcldpZHRoKCRicmRfd2lkdGhzWzBdKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkYnJkX3dpZHRoc1syXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnQiddWyd3aWR0aCddID0gJHRoaXMtPmdldENTU0JvcmRlcldpZHRoKCRicmRfd2lkdGhzWzJdKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLXN0eWxlJ10pKSB7CgkJCQkJCQkkYnJkX3N0eWxlcyA9IHByZWdfc3BsaXQoJy9bXHNdKy8nLCB0cmltKCRkb21bJGtleV1bJ3N0eWxlJ11bJ2JvcmRlci1zdHlsZSddKSk7CgkJCQkJCQlpZiAoaXNzZXQoJGJyZF9zdHlsZXNbM10pIEFORCAoJGJyZF9zdHlsZXNbM10hPSdub25lJykpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnTCddWydjYXAnXSA9ICdzcXVhcmUnOwoJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydMJ11bJ2pvaW4nXSA9ICdtaXRlcic7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0wnXVsnZGFzaCddID0gJHRoaXMtPmdldENTU0JvcmRlckRhc2hTdHlsZSgkYnJkX3N0eWxlc1szXSk7CgkJCQkJCQkJaWYgKCRkb21bJGtleV1bJ2JvcmRlciddWydMJ11bJ2Rhc2gnXSA8IDApIHsKCQkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0wnXSA9IGFycmF5KCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRicmRfc3R5bGVzWzFdKSkgewoJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydSJ11bJ2NhcCddID0gJ3NxdWFyZSc7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ1InXVsnam9pbiddID0gJ21pdGVyJzsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnUiddWydkYXNoJ10gPSAkdGhpcy0+Z2V0Q1NTQm9yZGVyRGFzaFN0eWxlKCRicmRfc3R5bGVzWzFdKTsKCQkJCQkJCQlpZiAoJGRvbVska2V5XVsnYm9yZGVyJ11bJ1InXVsnZGFzaCddIDwgMCkgewoJCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnUiddID0gYXJyYXkoKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGJyZF9zdHlsZXNbMF0pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ1QnXVsnY2FwJ10gPSAnc3F1YXJlJzsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnVCddWydqb2luJ10gPSAnbWl0ZXInOwoJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydUJ11bJ2Rhc2gnXSA9ICR0aGlzLT5nZXRDU1NCb3JkZXJEYXNoU3R5bGUoJGJyZF9zdHlsZXNbMF0pOwoJCQkJCQkJCWlmICgkZG9tWyRrZXldWydib3JkZXInXVsnVCddWydkYXNoJ10gPCAwKSB7CgkJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydUJ10gPSBhcnJheSgpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkYnJkX3N0eWxlc1syXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVsnQiddWydjYXAnXSA9ICdzcXVhcmUnOwoJCQkJCQkJCSRkb21bJGtleV1bJ2JvcmRlciddWydCJ11bJ2pvaW4nXSA9ICdtaXRlcic7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0InXVsnZGFzaCddID0gJHRoaXMtPmdldENTU0JvcmRlckRhc2hTdHlsZSgkYnJkX3N0eWxlc1syXSk7CgkJCQkJCQkJaWYgKCRkb21bJGtleV1bJ2JvcmRlciddWydCJ11bJ2Rhc2gnXSA8IDApIHsKCQkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0InXSA9IGFycmF5KCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSRjZWxsc2lkZSA9IGFycmF5KCdMJyA9PiAnbGVmdCcsICdSJyA9PiAncmlnaHQnLCAnVCcgPT4gJ3RvcCcsICdCJyA9PiAnYm90dG9tJyk7CgkJCQkJCWZvcmVhY2ggKCRjZWxsc2lkZSBhcyAkYnNrID0+ICRic3YpIHsKCQkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItJy4kYnN2XSkpIHsKCQkJCQkJCQkkYm9yZGVyc3R5bGUgPSAkdGhpcy0+Z2V0Q1NTQm9yZGVyU3R5bGUoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLScuJGJzdl0pOwoJCQkJCQkJCWlmICghZW1wdHkoJGJvcmRlcnN0eWxlKSkgewoJCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVskYnNrXSA9ICRib3JkZXJzdHlsZTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLScuJGJzdi4nLWNvbG9yJ10pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJGJza11bJ2NvbG9yJ10gPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItJy4kYnN2LictY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItJy4kYnN2Lictd2lkdGgnXSkpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVskYnNrXVsnd2lkdGgnXSA9ICR0aGlzLT5nZXRDU1NCb3JkZXJXaWR0aCgkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItJy4kYnN2Lictd2lkdGgnXSk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLScuJGJzdi4nLXN0eWxlJ10pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJGJza11bJ2Rhc2gnXSA9ICR0aGlzLT5nZXRDU1NCb3JkZXJEYXNoU3R5bGUoJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLScuJGJzdi4nLXN0eWxlJ10pOwoJCQkJCQkJCWlmICgkZG9tWyRrZXldWydib3JkZXInXVskYnNrXVsnZGFzaCddIDwgMCkgewoJCQkJCQkJCQkkZG9tWyRrZXldWydib3JkZXInXVskYnNrXSA9IGFycmF5KCk7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCS8vIGNoZWNrIGZvciBDU1MgcGFkZGluZyBwcm9wZXJ0aWVzCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydwYWRkaW5nJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydwYWRkaW5nJ10gPSAkdGhpcy0+Z2V0Q1NTUGFkZGluZygkZG9tWyRrZXldWydzdHlsZSddWydwYWRkaW5nJ10pOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGRvbVska2V5XVsncGFkZGluZyddID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCQkJfQoJCQkJCQlmb3JlYWNoICgkY2VsbHNpZGUgYXMgJHBzayA9PiAkcHN2KSB7CgkJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsncGFkZGluZy0nLiRwc3ZdKSkgewoJCQkJCQkJCSRkb21bJGtleV1bJ3BhZGRpbmcnXVskcHNrXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGRvbVska2V5XVsnc3R5bGUnXVsncGFkZGluZy0nLiRwc3ZdLCAwLCAncHgnLCBmYWxzZSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJLy8gY2hlY2sgZm9yIENTUyBtYXJnaW4gcHJvcGVydGllcwoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnbWFyZ2luJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydtYXJnaW4nXSA9ICR0aGlzLT5nZXRDU1NNYXJnaW4oJGRvbVska2V5XVsnc3R5bGUnXVsnbWFyZ2luJ10pOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGRvbVska2V5XVsnbWFyZ2luJ10gPSAkdGhpcy0+Y2VsbF9tYXJnaW47CgkJCQkJCX0KCQkJCQkJZm9yZWFjaCAoJGNlbGxzaWRlIGFzICRwc2sgPT4gJHBzdikgewoJCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ21hcmdpbi0nLiRwc3ZdKSkgewoJCQkJCQkJCSRkb21bJGtleV1bJ21hcmdpbiddWyRwc2tdID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cyhzdHJfcmVwbGFjZSgnYXV0bycsICcwJywgJGRvbVska2V5XVsnc3R5bGUnXVsnbWFyZ2luLScuJHBzdl0pLCAwLCAncHgnLCBmYWxzZSk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJLy8gY2hlY2sgZm9yIENTUyBib3JkZXItc3BhY2luZyBwcm9wZXJ0aWVzCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydib3JkZXItc3BhY2luZyddKSkgewoJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyLXNwYWNpbmcnXSA9ICR0aGlzLT5nZXRDU1NCb3JkZXJNYXJnaW4oJGRvbVska2V5XVsnc3R5bGUnXVsnYm9yZGVyLXNwYWNpbmcnXSk7CgkJCQkJCX0KCQkJCQkJLy8gcGFnZS1icmVhay1pbnNpZGUKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ3BhZ2UtYnJlYWstaW5zaWRlJ10pIEFORCAoJGRvbVska2V5XVsnc3R5bGUnXVsncGFnZS1icmVhay1pbnNpZGUnXSA9PSAnYXZvaWQnKSkgewoJCQkJCQkJJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ25vYnInXSA9ICd0cnVlJzsKCQkJCQkJfQoJCQkJCQkvLyBwYWdlLWJyZWFrLWJlZm9yZQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsncGFnZS1icmVhay1iZWZvcmUnXSkpIHsKCQkJCQkJCWlmICgkZG9tWyRrZXldWydzdHlsZSddWydwYWdlLWJyZWFrLWJlZm9yZSddID09ICdhbHdheXMnKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVhayddID0gJ3RydWUnOwoJCQkJCQkJfSBlbHNlaWYgKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3BhZ2UtYnJlYWstYmVmb3JlJ10gPT0gJ2xlZnQnKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVhayddID0gJ2xlZnQnOwoJCQkJCQkJfSBlbHNlaWYgKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3BhZ2UtYnJlYWstYmVmb3JlJ10gPT0gJ3JpZ2h0JykgewoJCQkJCQkJCSRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWsnXSA9ICdyaWdodCc7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJLy8gcGFnZS1icmVhay1hZnRlcgoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsncGFnZS1icmVhay1hZnRlciddKSkgewoJCQkJCQkJaWYgKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3BhZ2UtYnJlYWstYWZ0ZXInXSA9PSAnYWx3YXlzJykgewoJCQkJCQkJCSRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWthZnRlciddID0gJ3RydWUnOwoJCQkJCQkJfSBlbHNlaWYgKCRkb21bJGtleV1bJ3N0eWxlJ11bJ3BhZ2UtYnJlYWstYWZ0ZXInXSA9PSAnbGVmdCcpIHsKCQkJCQkJCQkkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsncGFnZWJyZWFrYWZ0ZXInXSA9ICdsZWZ0JzsKCQkJCQkJCX0gZWxzZWlmICgkZG9tWyRrZXldWydzdHlsZSddWydwYWdlLWJyZWFrLWFmdGVyJ10gPT0gJ3JpZ2h0JykgewoJCQkJCQkJCSRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWthZnRlciddID0gJ3JpZ2h0JzsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2Rpc3BsYXknXSkpIHsKCQkJCQkJJGRvbVska2V5XVsnaGlkZSddID0gKHRyaW0oc3RydG9sb3dlcigkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnZGlzcGxheSddKSkgPT0gJ25vbmUnKTsKCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydib3JkZXInXSkgQU5EICgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnYm9yZGVyJ10gIT0gMCkpIHsKCQkJCQkJJGJvcmRlcnN0eWxlID0gJHRoaXMtPmdldENTU0JvcmRlclN0eWxlKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydib3JkZXInXS4nIHNvbGlkIGJsYWNrJyk7CgkJCQkJCWlmICghZW1wdHkoJGJvcmRlcnN0eWxlKSkgewoJCQkJCQkJJGRvbVska2V5XVsnYm9yZGVyJ11bJ0xUUkInXSA9ICRib3JkZXJzdHlsZTsKCQkJCQkJfQoJCQkJCX0KCQkJCQkvLyBjaGVjayBmb3IgZm9udCB0YWcKCQkJCQlpZiAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAnZm9udCcpIHsKCQkJCQkJLy8gZm9udCBmYW1pbHkKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydmYWNlJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmb250bmFtZSddID0gJHRoaXMtPmdldEZvbnRGYW1pbHlOYW1lKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydmYWNlJ10pOwoJCQkJCQl9CgkJCQkJCS8vIGZvbnQgc2l6ZQoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3NpemUnXSkpIHsKCQkJCQkJCWlmICgka2V5ID4gMCkgewoJCQkJCQkJCWlmICgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc2l6ZSddWzBdID09ICcrJykgewoJCQkJCQkJCQkkZG9tWyRrZXldWydmb250c2l6ZSddID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZm9udHNpemUnXSArIGludHZhbChzdWJzdHIoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3NpemUnXSwgMSkpOwoJCQkJCQkJCX0gZWxzZWlmICgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnc2l6ZSddWzBdID09ICctJykgewoJCQkJCQkJCQkkZG9tWyRrZXldWydmb250c2l6ZSddID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZm9udHNpemUnXSAtIGludHZhbChzdWJzdHIoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3NpemUnXSwgMSkpOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzaXplJ10gPSBpbnR2YWwoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3NpemUnXSk7CgkJCQkJCQkJfQoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkZG9tWyRrZXldWydmb250c2l6ZSddID0gaW50dmFsKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzaXplJ10pOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCS8vIGZvcmNlIG5hdHVyYWwgYWxpZ25tZW50IGZvciBsaXN0cwoJCQkJCWlmICgoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3VsJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ29sJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ2RsJykpCgkJCQkJCUFORCAoIWlzc2V0KCRkb21bJGtleV1bJ2FsaWduJ10pIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRkb21bJGtleV1bJ2FsaWduJ10pIE9SICgkZG9tWyRrZXldWydhbGlnbiddICE9ICdKJykpKSB7CgkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkkZG9tWyRrZXldWydhbGlnbiddID0gJ1InOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGRvbVska2V5XVsnYWxpZ24nXSA9ICdMJzsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3NtYWxsJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3N1cCcpIE9SICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdzdWInKSkgewoJCQkJCQlpZiAoIWlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzaXplJ10pIEFORCAhaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1zaXplJ10pKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmb250c2l6ZSddID0gJGRvbVska2V5XVsnZm9udHNpemUnXSAqIEtfU01BTExfUkFUSU87CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdzdHJvbmcnKSBPUiAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAnYicpKSB7CgkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzdHlsZSddIC49ICdCJzsKCQkJCQl9CgkJCQkJaWYgKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdlbScpIE9SICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdpJykpIHsKCQkJCQkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gLj0gJ0knOwoJCQkJCX0KCQkJCQlpZiAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndScpIHsKCQkJCQkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gLj0gJ1UnOwoJCQkJCX0KCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ2RlbCcpIE9SICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdzJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3N0cmlrZScpKSB7CgkJCQkJCSRkb21bJGtleV1bJ2ZvbnRzdHlsZSddIC49ICdEJzsKCQkJCQl9CgkJCQkJaWYgKCFpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWyd0ZXh0LWRlY29yYXRpb24nXSkgQU5EICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdhJykpIHsKCQkJCQkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gPSAkdGhpcy0+aHRtbExpbmtGb250U3R5bGU7CgkJCQkJfQoJCQkJCWlmICgoJGRvbVska2V5XVsndmFsdWUnXSA9PSAncHJlJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3R0JykpIHsKCQkJCQkJJGRvbVska2V5XVsnZm9udG5hbWUnXSA9ICR0aGlzLT5kZWZhdWx0X21vbm9zcGFjZWRfZm9udDsKCQkJCQl9CgkJCQkJaWYgKCFlbXB0eSgkZG9tWyRrZXldWyd2YWx1ZSddKSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ11bMF0gPT0gJ2gnKSBBTkQgKGludHZhbCgkZG9tWyRrZXldWyd2YWx1ZSddezF9KSA+IDApIEFORCAoaW50dmFsKCRkb21bJGtleV1bJ3ZhbHVlJ117MX0pIDwgNykpIHsKCQkJCQkJLy8gaGVhZGluZ3MgaDEsIGgyLCBoMywgaDQsIGg1LCBoNgoJCQkJCQlpZiAoIWlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzaXplJ10pIEFORCAhaXNzZXQoJGRvbVska2V5XVsnc3R5bGUnXVsnZm9udC1zaXplJ10pKSB7CgkJCQkJCQkkaGVhZHNpemUgPSAoNCAtIGludHZhbCgkZG9tWyRrZXldWyd2YWx1ZSddezF9KSkgKiAyOwoJCQkJCQkJJGRvbVska2V5XVsnZm9udHNpemUnXSA9ICRkb21bMF1bJ2ZvbnRzaXplJ10gKyAkaGVhZHNpemU7CgkJCQkJCX0KCQkJCQkJaWYgKCFpc3NldCgkZG9tWyRrZXldWydzdHlsZSddWydmb250LXdlaWdodCddKSkgewoJCQkJCQkJJGRvbVska2V5XVsnZm9udHN0eWxlJ10gLj0gJ0InOwoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmICgoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndGFibGUnKSkgewoJCQkJCQkkZG9tWyRrZXldWydyb3dzJ10gPSAwOyAvLyBudW1iZXIgb2Ygcm93cwoJCQkJCQkkZG9tWyRrZXldWyd0cmlkcyddID0gYXJyYXkoKTsgLy8gSURzIG9mIFRSIGVsZW1lbnRzCgkJCQkJCSRkb21bJGtleV1bJ3RoZWFkJ10gPSAnJzsgLy8gdGFibGUgaGVhZGVyIHJvd3MKCQkJCQl9CgkJCQkJaWYgKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0cicpKSB7CgkJCQkJCSRkb21bJGtleV1bJ2NvbHMnXSA9IDA7CgkJCQkJCWlmICgkdGhlYWQpIHsKCQkJCQkJCSRkb21bJGtleV1bJ3RoZWFkJ10gPSB0cnVlOwoJCQkJCQkJLy8gcm93cyBvbiB0aGVhZCBibG9jayBhcmUgcHJpbnRlZCBhcyBhIHNlcGFyYXRlIHRhYmxlCgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkZG9tWyRrZXldWyd0aGVhZCddID0gZmFsc2U7CgkJCQkJCQkvLyBzdG9yZSB0aGUgbnVtYmVyIG9mIHJvd3Mgb24gdGFibGUgZWxlbWVudAoJCQkJCQkJKyskZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydyb3dzJ107CgkJCQkJCQkvLyBzdG9yZSB0aGUgVFIgZWxlbWVudHMgSURzIG9uIHRhYmxlIGVsZW1lbnQKCQkJCQkJCWFycmF5X3B1c2goJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsndHJpZHMnXSwgJGtleSk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0aCcpIE9SICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0ZCcpKSB7CgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY29sc3BhbiddKSkgewoJCQkJCQkJJGNvbHNwYW4gPSBpbnR2YWwoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2NvbHNwYW4nXSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkY29sc3BhbiA9IDE7CgkJCQkJCX0KCQkJCQkJJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2NvbHNwYW4nXSA9ICRjb2xzcGFuOwoJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydjb2xzJ10gKz0gJGNvbHNwYW47CgkJCQkJfQoJCQkJCS8vIHRleHQgZGlyZWN0aW9uCgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydkaXInXSkpIHsKCQkJCQkJJGRvbVska2V5XVsnZGlyJ10gPSAkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnZGlyJ107CgkJCQkJfQoJCQkJCS8vIHNldCBmb3JlZ3JvdW5kIGNvbG9yIGF0dHJpYnV0ZQoJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY29sb3InXSkgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2NvbG9yJ10pKSkgewoJCQkJCQkkZG9tWyRrZXldWydmZ2NvbG9yJ10gPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQl9IGVsc2VpZiAoIWlzc2V0KCRkb21bJGtleV1bJ3N0eWxlJ11bJ2NvbG9yJ10pIEFORCAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAnYScpKSB7CgkJCQkJCSRkb21bJGtleV1bJ2ZnY29sb3InXSA9ICR0aGlzLT5odG1sTGlua0NvbG9yQXJyYXk7CgkJCQkJfQoJCQkJCS8vIHNldCBiYWNrZ3JvdW5kIGNvbG9yIGF0dHJpYnV0ZQoJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnYmdjb2xvciddKSBBTkQgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnYmdjb2xvciddKSkpIHsKCQkJCQkJJGRvbVska2V5XVsnYmdjb2xvciddID0gVENQREZfQ09MT1JTOjpjb252ZXJ0SFRNTENvbG9yVG9EZWMoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2JnY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJCQl9CgkJCQkJLy8gc2V0IHN0cm9rZSBjb2xvciBhdHRyaWJ1dGUKCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3N0cm9rZWNvbG9yJ10pIEFORCAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzdHJva2Vjb2xvciddKSkpIHsKCQkJCQkJJGRvbVska2V5XVsnc3Ryb2tlY29sb3InXSA9IFRDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzdHJva2Vjb2xvciddLCAkdGhpcy0+c3BvdF9jb2xvcnMpOwoJCQkJCX0KCQkJCQkvLyBjaGVjayBmb3Igd2lkdGggYXR0cmlidXRlCgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWyd3aWR0aCddKSkgewoJCQkJCQkkZG9tWyRrZXldWyd3aWR0aCddID0gJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3dpZHRoJ107CgkJCQkJfQoJCQkJCS8vIGNoZWNrIGZvciBoZWlnaHQgYXR0cmlidXRlCgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydoZWlnaHQnXSkpIHsKCQkJCQkJJGRvbVska2V5XVsnaGVpZ2h0J10gPSAkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnaGVpZ2h0J107CgkJCQkJfQoJCQkJCS8vIGNoZWNrIGZvciB0ZXh0IGFsaWdubWVudAoJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnYWxpZ24nXSkgQU5EICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ2FsaWduJ10pKSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gIT09ICdpbWcnKSkgewoJCQkJCQkkZG9tWyRrZXldWydhbGlnbiddID0gc3RydG91cHBlcigkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnYWxpZ24nXVswXSk7CgkJCQkJfQoJCQkJCS8vIGNoZWNrIGZvciB0ZXh0IHJlbmRlcmluZyBtb2RlICh0aGUgZm9sbG93aW5nIGF0dHJpYnV0ZXMgZG8gbm90IGV4aXN0IGluIEhUTUwpCgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzdHJva2UnXSkpIHsKCQkJCQkJLy8gZm9udCBzdHJva2Ugd2lkdGgKCQkJCQkJJGRvbVska2V5XVsnc3Ryb2tlJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydzdHJva2UnXSwgJGRvbVska2V5XVsnZm9udHNpemUnXSwgJ3B0JywgdHJ1ZSk7CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnZmlsbCddKSkgewoJCQkJCQkvLyBmb250IGZpbGwKCQkJCQkJaWYgKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydmaWxsJ10gPT0gJ3RydWUnKSB7CgkJCQkJCQkkZG9tWyRrZXldWydmaWxsJ10gPSB0cnVlOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGRvbVska2V5XVsnZmlsbCddID0gZmFsc2U7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydjbGlwJ10pKSB7CgkJCQkJCS8vIGNsaXBwaW5nIG1vZGUKCQkJCQkJaWYgKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydjbGlwJ10gPT0gJ3RydWUnKSB7CgkJCQkJCQkkZG9tWyRrZXldWydjbGlwJ10gPSB0cnVlOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGRvbVska2V5XVsnY2xpcCddID0gZmFsc2U7CgkJCQkJCX0KCQkJCQl9CgkJCQl9IC8vIGVuZCBvcGVuaW5nIHRhZwoJCQl9IGVsc2UgewoJCQkJLy8gdGV4dAoJCQkJJGRvbVska2V5XVsndGFnJ10gPSBmYWxzZTsKCQkJCSRkb21bJGtleV1bJ2Jsb2NrJ10gPSBmYWxzZTsKCQkJCSRkb21bJGtleV1bJ3BhcmVudCddID0gZW5kKCRsZXZlbCk7CgkJCQkkZG9tWyRrZXldWydkaXInXSA9ICRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydkaXInXTsKCQkJCWlmICghZW1wdHkoJGRvbVskZG9tWyRrZXldWydwYXJlbnQnXV1bJ3RleHQtdHJhbnNmb3JtJ10pKSB7CgkJCQkJLy8gdGV4dC10cmFuc2Zvcm0gZm9yIHVuaWNvZGUgcmVxdWlyZXMgbWJfY29udmVydF9jYXNlIChNdWx0aWJ5dGUgU3RyaW5nIEZ1bmN0aW9ucykKCQkJCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9jb252ZXJ0X2Nhc2UnKSkgewoJCQkJCQkkdHRtID0gYXJyYXkoJ2NhcGl0YWxpemUnID0+IE1CX0NBU0VfVElUTEUsICd1cHBlcmNhc2UnID0+IE1CX0NBU0VfVVBQRVIsICdsb3dlcmNhc2UnID0+IE1CX0NBU0VfTE9XRVIpOwoJCQkJCQlpZiAoaXNzZXQoJHR0bVskZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsndGV4dC10cmFuc2Zvcm0nXV0pKSB7CgkJCQkJCQkkZWxlbWVudCA9IG1iX2NvbnZlcnRfY2FzZSgkZWxlbWVudCwgJHR0bVskZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsndGV4dC10cmFuc2Zvcm0nXV0sICR0aGlzLT5lbmNvZGluZyk7CgkJCQkJCX0KCQkJCQl9IGVsc2VpZiAoISR0aGlzLT5pc3VuaWNvZGUpIHsKCQkJCQkJc3dpdGNoICgkZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsndGV4dC10cmFuc2Zvcm0nXSkgewoJCQkJCQkJY2FzZSAnY2FwaXRhbGl6ZSc6IHsKCQkJCQkJCQkkZWxlbWVudCA9IHVjd29yZHMoc3RydG9sb3dlcigkZWxlbWVudCkpOwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQkJY2FzZSAndXBwZXJjYXNlJzogewoJCQkJCQkJCSRlbGVtZW50ID0gc3RydG91cHBlcigkZWxlbWVudCk7CgkJCQkJCQkJYnJlYWs7CgkJCQkJCQl9CgkJCQkJCQljYXNlICdsb3dlcmNhc2UnOiB7CgkJCQkJCQkJJGVsZW1lbnQgPSBzdHJ0b2xvd2VyKCRlbGVtZW50KTsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSRkb21bJGtleV1bJ3ZhbHVlJ10gPSBzdHJpcHNsYXNoZXMoJHRoaXMtPnVuaHRtbGVudGl0aWVzKCRlbGVtZW50KSk7CgkJCX0KCQkJKyskZWxrZXk7CgkJCSsrJGtleTsKCQl9CgkJcmV0dXJuICRkb207Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIHRoZSBzdHJpbmcgdXNlZCB0byBmaW5kIHNwYWNlcwoJICogQHJldHVybiBzdHJpbmcKCSAqIEBwcm90ZWN0ZWQKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNC44LjAyNCAoMjAxMC0wMS0xNSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFNwYWNlU3RyaW5nKCkgewoJCSRzcGFjZXN0ciA9IGNocigzMik7CgkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkpIHsKCQkJJHNwYWNlc3RyID0gY2hyKDApLmNocigzMik7CgkJfQoJCXJldHVybiAkc3BhY2VzdHI7Cgl9CgoJLyoqCgkgKiBTZXJpYWxpemUgYW4gYXJyYXkgb2YgcGFyYW1ldGVycyB0byBiZSB1c2VkIHdpdGggVENQREYgdGFnIGluIEhUTUwgY29kZS4KCSAqIEBwYXJhbSAkcGFyYXJyYXkgKGFycmF5KSBwYXJhbWV0ZXJzIGFycmF5CgkgKiBAcmV0dXJuIHN0aW5nIGNvbnRhaW5pbmcgc2VyaWFsaXplZCBkYXRhCgkgKiBAc2luY2UgNC45LjAwNiAoMjAxMC0wNC0wMikKCSAqIEBwdWJsaWMKCSAqIEBkZXByZWNhdGVkCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXJpYWxpemVUQ1BERnRhZ1BhcmFtZXRlcnMoJHBhcmFycmF5KSB7CgkJcmV0dXJuIFRDUERGX1NUQVRJQzo6c2VyaWFsaXplVENQREZ0YWdQYXJhbWV0ZXJzKCRwYXJhcnJheSk7Cgl9CgoJLyoqCgkgKiBQcmludHMgYSBjZWxsIChyZWN0YW5ndWxhciBhcmVhKSB3aXRoIG9wdGlvbmFsIGJvcmRlcnMsIGJhY2tncm91bmQgY29sb3IgYW5kIGh0bWwgdGV4dCBzdHJpbmcuCgkgKiBUaGUgdXBwZXItbGVmdCBjb3JuZXIgb2YgdGhlIGNlbGwgY29ycmVzcG9uZHMgdG8gdGhlIGN1cnJlbnQgcG9zaXRpb24uIEFmdGVyIHRoZSBjYWxsLCB0aGUgY3VycmVudCBwb3NpdGlvbiBtb3ZlcyB0byB0aGUgcmlnaHQgb3IgdG8gdGhlIG5leHQgbGluZS48YnIgLz4KCSAqIElmIGF1dG9tYXRpYyBwYWdlIGJyZWFraW5nIGlzIGVuYWJsZWQgYW5kIHRoZSBjZWxsIGdvZXMgYmV5b25kIHRoZSBsaW1pdCwgYSBwYWdlIGJyZWFrIGlzIGRvbmUgYmVmb3JlIG91dHB1dHRpbmcuCgkgKiBJTVBPUlRBTlQ6IFRoZSBIVE1MIG11c3QgYmUgd2VsbCBmb3JtYXR0ZWQgLSB0cnkgdG8gY2xlYW4tdXAgaXQgdXNpbmcgYW4gYXBwbGljYXRpb24gbGlrZSBIVE1MLVRpZHkgYmVmb3JlIHN1Ym1pdHRpbmcuCgkgKiBTdXBwb3J0ZWQgdGFncyBhcmU6IGEsIGIsIGJsb2NrcXVvdGUsIGJyLCBkZCwgZGVsLCBkaXYsIGRsLCBkdCwgZW0sIGZvbnQsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGhyLCBpLCBpbWcsIGxpLCBvbCwgcCwgcHJlLCBzbWFsbCwgc3Bhbiwgc3Ryb25nLCBzdWIsIHN1cCwgdGFibGUsIHRjcGRmLCB0ZCwgdGgsIHRoZWFkLCB0ciwgdHQsIHUsIHVsCgkgKiBOT1RFOiBhbGwgdGhlIEhUTUwgYXR0cmlidXRlcyBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZS1xdW90ZS4KCSAqIEBwYXJhbSAkdyAoZmxvYXQpIENlbGwgd2lkdGguIElmIDAsIHRoZSBjZWxsIGV4dGVuZHMgdXAgdG8gdGhlIHJpZ2h0IG1hcmdpbi4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIENlbGwgbWluaW11bSBoZWlnaHQuIFRoZSBjZWxsIGV4dGVuZHMgYXV0b21hdGljYWxseSBpZiBuZWVkZWQuCgkgKiBAcGFyYW0gJHggKGZsb2F0KSB1cHBlci1sZWZ0IGNvcm5lciBYIGNvb3JkaW5hdGUKCSAqIEBwYXJhbSAkeSAoZmxvYXQpIHVwcGVyLWxlZnQgY29ybmVyIFkgY29vcmRpbmF0ZQoJICogQHBhcmFtICRodG1sIChzdHJpbmcpIGh0bWwgdGV4dCB0byBwcmludC4gRGVmYXVsdCB2YWx1ZTogZW1wdHkgc3RyaW5nLgoJICogQHBhcmFtICRib3JkZXIgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcGFyYW0gJGxuIChpbnQpIEluZGljYXRlcyB3aGVyZSB0aGUgY3VycmVudCBwb3NpdGlvbiBzaG91bGQgZ28gYWZ0ZXIgdGhlIGNhbGwuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT4wOiB0byB0aGUgcmlnaHQgKG9yIGxlZnQgZm9yIFJUTCBsYW5ndWFnZSk8L2xpPjxsaT4xOiB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBuZXh0IGxpbmU8L2xpPjxsaT4yOiBiZWxvdzwvbGk+PC91bD4KUHV0dGluZyAxIGlzIGVxdWl2YWxlbnQgdG8gcHV0dGluZyAwIGFuZCBjYWxsaW5nIExuKCkganVzdCBhZnRlci4gRGVmYXVsdCB2YWx1ZTogMC4KCSAqIEBwYXJhbSAkZmlsbCAoYm9vbGVhbikgSW5kaWNhdGVzIGlmIHRoZSBjZWxsIGJhY2tncm91bmQgbXVzdCBiZSBwYWludGVkICh0cnVlKSBvciB0cmFuc3BhcmVudCAoZmFsc2UpLgoJICogQHBhcmFtICRyZXNldGggKGJvb2xlYW4pIGlmIHRydWUgcmVzZXQgdGhlIGxhc3QgY2VsbCBoZWlnaHQgKGRlZmF1bHQgdHJ1ZSkuCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIDogbGVmdCBhbGlnbjwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5SIDogcmlnaHQgYWxpZ248L2xpPjxsaT4nJyA6IGVtcHR5IHN0cmluZyA6IGxlZnQgZm9yIExUUiBvciByaWdodCBmb3IgUlRMPC9saT48L3VsPgoJICogQHBhcmFtICRhdXRvcGFkZGluZyAoYm9vbGVhbikgaWYgdHJ1ZSwgdXNlcyBpbnRlcm5hbCBwYWRkaW5nIGFuZCBhdXRvbWF0aWNhbGx5IGFkanVzdCBpdCB0byBhY2NvdW50IGZvciBsaW5lIHdpZHRoLgoJICogQHNlZSBNdWx0aWNlbGwoKSwgd3JpdGVIVE1MKCkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHdyaXRlSFRNTENlbGwoJHcsICRoLCAkeCwgJHksICRodG1sPScnLCAkYm9yZGVyPTAsICRsbj0wLCAkZmlsbD1mYWxzZSwgJHJlc2V0aD10cnVlLCAkYWxpZ249JycsICRhdXRvcGFkZGluZz10cnVlKSB7CgkJcmV0dXJuICR0aGlzLT5NdWx0aUNlbGwoJHcsICRoLCAkaHRtbCwgJGJvcmRlciwgJGFsaWduLCAkZmlsbCwgJGxuLCAkeCwgJHksICRyZXNldGgsIDAsIHRydWUsICRhdXRvcGFkZGluZywgMCwgJ1QnLCBmYWxzZSk7Cgl9CgoJLyoqCgkgKiBBbGxvd3MgdG8gcHJlc2VydmUgc29tZSBIVE1MIGZvcm1hdHRpbmcgKGxpbWl0ZWQgc3VwcG9ydCkuPGJyIC8+CgkgKiBJTVBPUlRBTlQ6IFRoZSBIVE1MIG11c3QgYmUgd2VsbCBmb3JtYXR0ZWQgLSB0cnkgdG8gY2xlYW4tdXAgaXQgdXNpbmcgYW4gYXBwbGljYXRpb24gbGlrZSBIVE1MLVRpZHkgYmVmb3JlIHN1Ym1pdHRpbmcuCgkgKiBTdXBwb3J0ZWQgdGFncyBhcmU6IGEsIGIsIGJsb2NrcXVvdGUsIGJyLCBkZCwgZGVsLCBkaXYsIGRsLCBkdCwgZW0sIGZvbnQsIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYsIGhyLCBpLCBpbWcsIGxpLCBvbCwgcCwgcHJlLCBzbWFsbCwgc3Bhbiwgc3Ryb25nLCBzdWIsIHN1cCwgdGFibGUsIHRjcGRmLCB0ZCwgdGgsIHRoZWFkLCB0ciwgdHQsIHUsIHVsCgkgKiBOT1RFOiBhbGwgdGhlIEhUTUwgYXR0cmlidXRlcyBtdXN0IGJlIGVuY2xvc2VkIGluIGRvdWJsZS1xdW90ZS4KCSAqIEBwYXJhbSAkaHRtbCAoc3RyaW5nKSB0ZXh0IHRvIGRpc3BsYXkKCSAqIEBwYXJhbSAkbG4gKGJvb2xlYW4pIGlmIHRydWUgYWRkIGEgbmV3IGxpbmUgYWZ0ZXIgdGV4dCAoZGVmYXVsdCA9IHRydWUpCgkgKiBAcGFyYW0gJGZpbGwgKGJvb2xlYW4pIEluZGljYXRlcyBpZiB0aGUgYmFja2dyb3VuZCBtdXN0IGJlIHBhaW50ZWQgKHRydWUpIG9yIHRyYW5zcGFyZW50IChmYWxzZSkuCgkgKiBAcGFyYW0gJHJlc2V0aCAoYm9vbGVhbikgaWYgdHJ1ZSByZXNldCB0aGUgbGFzdCBjZWxsIGhlaWdodCAoZGVmYXVsdCBmYWxzZSkuCgkgKiBAcGFyYW0gJGNlbGwgKGJvb2xlYW4pIGlmIHRydWUgYWRkIHRoZSBjdXJyZW50IGxlZnQgKG9yIHJpZ2h0IGZvciBSVEwpIHBhZGRpbmcgdG8gZWFjaCBXcml0ZSAoZGVmYXVsdCBmYWxzZSkuCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIHRleHQuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIDogbGVmdCBhbGlnbjwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5SIDogcmlnaHQgYWxpZ248L2xpPjxsaT4nJyA6IGVtcHR5IHN0cmluZyA6IGxlZnQgZm9yIExUUiBvciByaWdodCBmb3IgUlRMPC9saT48L3VsPgoJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gd3JpdGVIVE1MKCRodG1sLCAkbG49dHJ1ZSwgJGZpbGw9ZmFsc2UsICRyZXNldGg9ZmFsc2UsICRjZWxsPWZhbHNlLCAkYWxpZ249JycpIHsKCQkkZ3ZhcnMgPSAkdGhpcy0+Z2V0R3JhcGhpY1ZhcnMoKTsKCQkvLyBzdG9yZSBjdXJyZW50IHZhbHVlcwoJCSRwcmV2X2NlbGxfbWFyZ2luID0gJHRoaXMtPmNlbGxfbWFyZ2luOwoJCSRwcmV2X2NlbGxfcGFkZGluZyA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJJHByZXZQYWdlID0gJHRoaXMtPnBhZ2U7CgkJJHByZXZsTWFyZ2luID0gJHRoaXMtPmxNYXJnaW47CgkJJHByZXZyTWFyZ2luID0gJHRoaXMtPnJNYXJnaW47CgkJJGN1cmZvbnRuYW1lID0gJHRoaXMtPkZvbnRGYW1pbHk7CgkJJGN1cmZvbnRzdHlsZSA9ICR0aGlzLT5Gb250U3R5bGU7CgkJJGN1cmZvbnRzaXplID0gJHRoaXMtPkZvbnRTaXplUHQ7CgkJJGN1cmZvbnRhc2NlbnQgPSAkdGhpcy0+Z2V0Rm9udEFzY2VudCgkY3VyZm9udG5hbWUsICRjdXJmb250c3R5bGUsICRjdXJmb250c2l6ZSk7CgkJJGN1cmZvbnRkZXNjZW50ID0gJHRoaXMtPmdldEZvbnREZXNjZW50KCRjdXJmb250bmFtZSwgJGN1cmZvbnRzdHlsZSwgJGN1cmZvbnRzaXplKTsKCQkkY3VyZm9udHN0cmV0Y2luZyA9ICR0aGlzLT5mb250X3N0cmV0Y2hpbmc7CgkJJGN1cmZvbnR0cmFja2luZyA9ICR0aGlzLT5mb250X3NwYWNpbmc7CgkJJHRoaXMtPm5ld2xpbmUgPSB0cnVlOwoJCSRuZXdsaW5lID0gdHJ1ZTsKCQkkc3RhcnRsaW5lcGFnZSA9ICR0aGlzLT5wYWdlOwoJCSRtaW5zdGFydGxpbmV5ID0gJHRoaXMtPnk7CgkJJG1heGJvdHRvbWxpbmV5ID0gMDsKCQkkc3RhcnRsaW5leCA9ICR0aGlzLT54OwoJCSRzdGFydGxpbmV5ID0gJHRoaXMtPnk7CgkJJHlzaGlmdCA9IDA7CgkJJGxvb3AgPSAwOwoJCSRjdXJwb3MgPSAwOwoJCSR0aGlzX21ldGhvZF92YXJzID0gYXJyYXkoKTsKCQkkdW5kbyA9IGZhbHNlOwoJCSRmb250YWxpZ25lZCA9IGZhbHNlOwoJCSRyZXZlcnNlX2RpciA9IGZhbHNlOyAvLyB0cnVlIHdoZW4gdGhlIHRleHQgZGlyZWN0aW9uIGlzIHJldmVyc2VkCgkJJHRoaXMtPnByZW1vZGUgPSBmYWxzZTsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJJHBhc2sgPSBjb3VudCgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ10pOwoJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCSRwYXNrID0gY291bnQoJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdKTsKCQl9IGVsc2UgewoJCQkkcGFzayA9IDA7CgkJfQoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkkc3RhcnRsaW5lcG9zID0gc3RybGVuKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddKTsKCQl9IGVsc2VpZiAoISR0aGlzLT5JbkZvb3RlcikgewoJCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcmxlblskdGhpcy0+cGFnZV0pKSB7CgkJCQkkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5wYWdlbGVuWyR0aGlzLT5wYWdlXSAtICR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV07CgkJCX0KCQkJJHN0YXJ0bGluZXBvcyA9ICR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPnBhZ2VdOwoJCX0gZWxzZSB7CgkJCS8vIHdlIGFyZSBpbnNpZGUgdGhlIGZvb3RlcgoJCQkkc3RhcnRsaW5lcG9zID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJCX0KCQkkbGFsaWduID0gJGFsaWduOwoJCSRwbGFsaWduID0gJGFsaWduOwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR3ID0gJHRoaXMtPnggLSAkdGhpcy0+bE1hcmdpbjsKCQl9IGVsc2UgewoJCQkkdyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+eDsKCQl9CgkJJHcgLT0gKCR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSArICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSk7CgkJaWYgKCRjZWxsKSB7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+eCAtPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ107CgkJCQkkdGhpcy0+bE1hcmdpbiArPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ107CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+eCArPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ107CgkJCQkkdGhpcy0+ck1hcmdpbiArPSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ107CgkJCX0KCQl9CgkJaWYgKCR0aGlzLT5jdXN0b21saXN0aW5kZW50ID49IDApIHsKCQkJJHRoaXMtPmxpc3RpbmRlbnQgPSAkdGhpcy0+Y3VzdG9tbGlzdGluZGVudDsKCQl9IGVsc2UgewoJCQkkdGhpcy0+bGlzdGluZGVudCA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgnMDAwMDAwJyk7CgkJfQoJCSR0aGlzLT5saXN0aW5kZW50bGV2ZWwgPSAwOwoJCS8vIHNhdmUgcHJldmlvdXMgc3RhdGVzCgkJJHByZXZfY2VsbF9oZWlnaHRfcmF0aW8gPSAkdGhpcy0+Y2VsbF9oZWlnaHRfcmF0aW87CgkJJHByZXZfbGlzdG51bSA9ICR0aGlzLT5saXN0bnVtOwoJCSRwcmV2X2xpc3RvcmRlcmVkID0gJHRoaXMtPmxpc3RvcmRlcmVkOwoJCSRwcmV2X2xpc3Rjb3VudCA9ICR0aGlzLT5saXN0Y291bnQ7CgkJJHByZXZfbGlzcGFjZXIgPSAkdGhpcy0+bGlzcGFjZXI7CgkJJHRoaXMtPmxpc3RudW0gPSAwOwoJCSR0aGlzLT5saXN0b3JkZXJlZCA9IGFycmF5KCk7CgkJJHRoaXMtPmxpc3Rjb3VudCA9IGFycmF5KCk7CgkJJHRoaXMtPmxpc3BhY2VyID0gJyc7CgkJaWYgKChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+bGFzdGgpKSBPUiAoJHJlc2V0aCkpIHsKCQkJLy8gcmVzZXQgcm93IGhlaWdodAoJCQkkdGhpcy0+cmVzZXRMYXN0SCgpOwoJCX0KCQkkZG9tID0gJHRoaXMtPmdldEh0bWxEb21BcnJheSgkaHRtbCk7CgkJJG1heGVsID0gY291bnQoJGRvbSk7CgkJJGtleSA9IDA7CgkJd2hpbGUgKCRrZXkgPCAkbWF4ZWwpIHsKCQkJaWYgKCRkb21bJGtleV1bJ3RhZyddIEFORCAkZG9tWyRrZXldWydvcGVuaW5nJ10gQU5EICRkb21bJGtleV1bJ2hpZGUnXSkgewoJCQkJLy8gc3RvcmUgdGhlIG5vZGUga2V5CgkJCQkkaGlkZGVuX25vZGVfa2V5ID0gJGtleTsKCQkJCWlmICgkZG9tWyRrZXldWydzZWxmJ10pIHsKCQkJCQkvLyBza2lwIGp1c3QgdGhpcyBzZWxmLWNsb3NpbmcgdGFnCgkJCQkJKyska2V5OwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBza2lwIHRoaXMgYW5kIGFsbCBjaGlsZHJlbiB0YWdzCgkJCQkJd2hpbGUgKCgka2V5IDwgJG1heGVsKSBBTkQgKCEkZG9tWyRrZXldWyd0YWcnXSBPUiAkZG9tWyRrZXldWydvcGVuaW5nJ10gT1IgKCRkb21bJGtleV1bJ3BhcmVudCddICE9ICRoaWRkZW5fbm9kZV9rZXkpKSkgewoJCQkJCQkvLyBza2lwIGhpZGRlbiBvYmplY3RzCgkJCQkJCSsrJGtleTsKCQkJCQl9CgkJCQkJKyska2V5OwoJCQkJfQoJCQl9CgkJCWlmICgkZG9tWyRrZXldWyd0YWcnXSBBTkQgaXNzZXQoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVhayddKSkgewoJCQkJLy8gY2hlY2sgZm9yIHBhZ2VicmVhawoJCQkJaWYgKCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsncGFnZWJyZWFrJ10gPT0gJ3RydWUnKSBPUiAoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVhayddID09ICdsZWZ0JykgT1IgKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWsnXSA9PSAncmlnaHQnKSkgewoJCQkJCS8vIGFkZCBhIHBhZ2UgKG9yIHRyaWcgQWNjZXB0UGFnZUJyZWFrKCkgZm9yIG11bHRpY29sdW1uIG1vZGUpCgkJCQkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyICsgMSk7CgkJCQkJJHRoaXMtPmh0bWx2c3BhY2UgPSAoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgKyAxKTsKCQkJCX0KCQkJCWlmICgoKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWsnXSA9PSAnbGVmdCcpIEFORCAoKCghJHRoaXMtPnJ0bCkgQU5EICgoJHRoaXMtPnBhZ2UgJSAyKSA9PSAwKSkgT1IgKCgkdGhpcy0+cnRsKSBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpICE9IDApKSkpCgkJCQkJT1IgKCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsncGFnZWJyZWFrJ10gPT0gJ3JpZ2h0JykgQU5EICgoKCEkdGhpcy0+cnRsKSBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpICE9IDApKSBPUiAoKCR0aGlzLT5ydGwpIEFORCAoKCR0aGlzLT5wYWdlICUgMikgPT0gMCkpKSkpIHsKCQkJCQkvLyBhZGQgYSBwYWdlIChvciB0cmlnIEFjY2VwdFBhZ2VCcmVhaygpIGZvciBtdWx0aWNvbHVtbiBtb2RlKQoJCQkJCSR0aGlzLT5jaGVja1BhZ2VCcmVhaygkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlciArIDEpOwoJCQkJCSR0aGlzLT5odG1sdnNwYWNlID0gKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyICsgMSk7CgkJCQl9CgkJCX0KCQkJaWYgKCRkb21bJGtleV1bJ3RhZyddIEFORCAkZG9tWyRrZXldWydvcGVuaW5nJ10gQU5EIGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydub2JyJ10pIEFORCAoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ25vYnInXSA9PSAndHJ1ZScpKSB7CgkJCQlpZiAoaXNzZXQoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnYXR0cmlidXRlJ11bJ25vYnInXSkgQU5EICgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsnbm9iciddID09ICd0cnVlJykpIHsKCQkJCQkkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnbm9iciddID0gZmFsc2U7CgkJCQl9IGVsc2UgewoJCQkJCS8vIHN0b3JlIGN1cnJlbnQgb2JqZWN0CgkJCQkJJHRoaXMtPnN0YXJ0VHJhbnNhY3Rpb24oKTsKCQkJCQkvLyBzYXZlIHRoaXMgbWV0aG9kIHZhcnMKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snaHRtbCddID0gJGh0bWw7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2xuJ10gPSAkbG47CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2ZpbGwnXSA9ICRmaWxsOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydyZXNldGgnXSA9ICRyZXNldGg7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2NlbGwnXSA9ICRjZWxsOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydhbGlnbiddID0gJGFsaWduOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydndmFycyddID0gJGd2YXJzOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydwcmV2UGFnZSddID0gJHByZXZQYWdlOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydwcmV2X2NlbGxfbWFyZ2luJ10gPSAkcHJldl9jZWxsX21hcmdpbjsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldl9jZWxsX3BhZGRpbmcnXSA9ICRwcmV2X2NlbGxfcGFkZGluZzsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldmxNYXJnaW4nXSA9ICRwcmV2bE1hcmdpbjsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldnJNYXJnaW4nXSA9ICRwcmV2ck1hcmdpbjsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snY3VyZm9udG5hbWUnXSA9ICRjdXJmb250bmFtZTsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snY3VyZm9udHN0eWxlJ10gPSAkY3VyZm9udHN0eWxlOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydjdXJmb250c2l6ZSddID0gJGN1cmZvbnRzaXplOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydjdXJmb250YXNjZW50J10gPSAkY3VyZm9udGFzY2VudDsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snY3VyZm9udGRlc2NlbnQnXSA9ICRjdXJmb250ZGVzY2VudDsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snY3VyZm9udHN0cmV0Y2luZyddID0gJGN1cmZvbnRzdHJldGNpbmc7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2N1cmZvbnR0cmFja2luZyddID0gJGN1cmZvbnR0cmFja2luZzsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snbWluc3RhcnRsaW5leSddID0gJG1pbnN0YXJ0bGluZXk7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ21heGJvdHRvbWxpbmV5J10gPSAkbWF4Ym90dG9tbGluZXk7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ3lzaGlmdCddID0gJHlzaGlmdDsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snc3RhcnRsaW5lcGFnZSddID0gJHN0YXJ0bGluZXBhZ2U7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ3N0YXJ0bGluZXBvcyddID0gJHN0YXJ0bGluZXBvczsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snc3RhcnRsaW5leCddID0gJHN0YXJ0bGluZXg7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ3N0YXJ0bGluZXknXSA9ICRzdGFydGxpbmV5OwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWyduZXdsaW5lJ10gPSAkbmV3bGluZTsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snbG9vcCddID0gJGxvb3A7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2N1cnBvcyddID0gJGN1cnBvczsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncGFzayddID0gJHBhc2s7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2xhbGlnbiddID0gJGxhbGlnbjsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncGxhbGlnbiddID0gJHBsYWxpZ247CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ3cnXSA9ICR3OwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydwcmV2X2NlbGxfaGVpZ2h0X3JhdGlvJ10gPSAkcHJldl9jZWxsX2hlaWdodF9yYXRpbzsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldl9saXN0bnVtJ10gPSAkcHJldl9saXN0bnVtOwoJCQkJCSR0aGlzX21ldGhvZF92YXJzWydwcmV2X2xpc3RvcmRlcmVkJ10gPSAkcHJldl9saXN0b3JkZXJlZDsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldl9saXN0Y291bnQnXSA9ICRwcmV2X2xpc3Rjb3VudDsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1sncHJldl9saXNwYWNlciddID0gJHByZXZfbGlzcGFjZXI7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2ZvbnRhbGlnbmVkJ10gPSAkZm9udGFsaWduZWQ7CgkJCQkJJHRoaXNfbWV0aG9kX3ZhcnNbJ2tleSddID0gJGtleTsKCQkJCQkkdGhpc19tZXRob2RfdmFyc1snZG9tJ10gPSAkZG9tOwoJCQkJfQoJCQl9CgkJCS8vIHByaW50IFRIRUFEIGJsb2NrCgkJCWlmICgoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndHInKSBBTkQgaXNzZXQoJGRvbVska2V5XVsndGhlYWQnXSkgQU5EICRkb21bJGtleV1bJ3RoZWFkJ10pIHsKCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydwYXJlbnQnXSkgQU5EIGlzc2V0KCRkb21bJGRvbVska2V5XVsncGFyZW50J11dWyd0aGVhZCddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRkb21bJGRvbVska2V5XVsncGFyZW50J11dWyd0aGVhZCddKSkgewoJCQkJCSR0aGlzLT5pbnRoZWFkID0gdHJ1ZTsKCQkJCQkvLyBwcmludCB0YWJsZSBoZWFkZXIgKHRoZWFkKQoJCQkJCSR0aGlzLT53cml0ZUhUTUwoJHRoaXMtPnRoZWFkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJycpOwoJCQkJCS8vIGNoZWNrIGlmIHdlIGFyZSBvbiBhIG5ldyBwYWdlIG9yIG9uIGEgbmV3IGNvbHVtbgoJCQkJCWlmICgoJHRoaXMtPnkgPCAkdGhpcy0+c3RhcnRfdHJhbnNhY3Rpb25feSkgT1IgKCR0aGlzLT5jaGVja1BhZ2VCcmVhaygkdGhpcy0+bGFzdGgsICcnLCBmYWxzZSkpKSB7CgkJCQkJCS8vIHdlIGFyZSBvbiBhIG5ldyBwYWdlIG9yIG9uIGEgbmV3IGNvbHVtbiBhbmQgdGhlIHRvdGFsIG9iamVjdCBoZWlnaHQgaXMgbGVzcyB0aGFuIHRoZSBhdmFpbGFibGUgdmVydGljYWwgc3BhY2UuCgkJCQkJCS8vIHJlc3RvcmUgcHJldmlvdXMgb2JqZWN0CgkJCQkJCSR0aGlzLT5yb2xsYmFja1RyYW5zYWN0aW9uKHRydWUpOwoJCQkJCQkvLyByZXN0b3JlIHByZXZpb3VzIHZhbHVlcwoJCQkJCQlmb3JlYWNoICgkdGhpc19tZXRob2RfdmFycyBhcyAkdmtleSA9PiAkdnZhbCkgewoJCQkJCQkJJCR2a2V5ID0gJHZ2YWw7CgkJCQkJCX0KCQkJCQkJLy8gZGlzYWJsZSB0YWJsZSBoZWFkZXIKCQkJCQkJJHRtcF90aGVhZCA9ICR0aGlzLT50aGVhZDsKCQkJCQkJJHRoaXMtPnRoZWFkID0gJyc7CgkJCQkJCS8vIGFkZCBhIHBhZ2UgKG9yIHRyaWcgQWNjZXB0UGFnZUJyZWFrKCkgZm9yIG11bHRpY29sdW1uIG1vZGUpCgkJCQkJCSRwcmVfeSA9ICR0aGlzLT55OwoJCQkJCQlpZiAoKCEkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgKyAxKSkgQU5EICgkdGhpcy0+eSA8ICRwcmVfeSkpIHsKCQkJCQkJCS8vIGZpeCBmb3IgbXVsdGljb2x1bW4gbW9kZQoJCQkJCQkJJHN0YXJ0bGluZXkgPSAkdGhpcy0+eTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+c3RhcnRfdHJhbnNhY3Rpb25fcGFnZSA9ICR0aGlzLT5wYWdlOwoJCQkJCQkkdGhpcy0+c3RhcnRfdHJhbnNhY3Rpb25feSA9ICR0aGlzLT55OwoJCQkJCQkvLyByZXN0b3JlIHRhYmxlIGhlYWRlcgoJCQkJCQkkdGhpcy0+dGhlYWQgPSAkdG1wX3RoZWFkOwoJCQkJCQkvLyBmaXggdGFibGUgYm9yZGVyIHByb3BlcnRpZXMKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSkpIHsKCQkJCQkJCSR0bXBfY2VsbHNwYWNpbmcgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSwgMSwgJ3B4Jyk7CgkJCQkJCX0gZWxzZWlmIChpc3NldCgkZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsnYm9yZGVyLXNwYWNpbmcnXSkpIHsKCQkJCQkJCSR0bXBfY2VsbHNwYWNpbmcgPSAkZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsnYm9yZGVyLXNwYWNpbmcnXVsnViddOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRtcF9jZWxsc3BhY2luZyA9IDA7CgkJCQkJCX0KCQkJCQkJJGRvbVskZG9tWyRrZXldWydwYXJlbnQnXV1bJ2JvcmRlcnBvc2l0aW9uJ11bJ3BhZ2UnXSA9ICR0aGlzLT5wYWdlOwoJCQkJCQkkZG9tWyRkb21bJGtleV1bJ3BhcmVudCddXVsnYm9yZGVycG9zaXRpb24nXVsnY29sdW1uJ10gPSAkdGhpcy0+Y3VycmVudF9jb2x1bW47CgkJCQkJCSRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydib3JkZXJwb3NpdGlvbiddWyd5J10gPSAkdGhpcy0+eSArICR0bXBfY2VsbHNwYWNpbmc7CgkJCQkJCSR4b2Zmc2V0ID0gKCR0aGlzLT54IC0gJGRvbVskZG9tWyRrZXldWydwYXJlbnQnXV1bJ2JvcmRlcnBvc2l0aW9uJ11bJ3gnXSk7CgkJCQkJCSRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydib3JkZXJwb3NpdGlvbiddWyd4J10gKz0gJHhvZmZzZXQ7CgkJCQkJCSRkb21bJGRvbVska2V5XVsncGFyZW50J11dWydib3JkZXJwb3NpdGlvbiddWyd4bWF4J10gKz0gJHhvZmZzZXQ7CgkJCQkJCS8vIHByaW50IHRhYmxlIGhlYWRlciAodGhlYWQpCgkJCQkJCSR0aGlzLT53cml0ZUhUTUwoJHRoaXMtPnRoZWFkLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgJycpOwoJCQkJCX0KCQkJCX0KCQkJCS8vIG1vdmUgJGtleSBpbmRleCBmb3J3YXJkIHRvIHNraXAgVEhFQUQgYmxvY2sKCQkJCXdoaWxlICggKCRrZXkgPCAkbWF4ZWwpIEFORCAoISgKCQkJCQkoJGRvbVska2V5XVsndGFnJ10gQU5EICRkb21bJGtleV1bJ29wZW5pbmcnXSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RyJykgQU5EICghaXNzZXQoJGRvbVska2V5XVsndGhlYWQnXSkgT1IgISRkb21bJGtleV1bJ3RoZWFkJ10pKQoJCQkJCU9SICgkZG9tWyRrZXldWyd0YWcnXSBBTkQgKCEkZG9tWyRrZXldWydvcGVuaW5nJ10pIEFORCAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndGFibGUnKSkpICkpIHsKCQkJCQkrKyRrZXk7CgkJCQl9CgkJCX0KCQkJaWYgKCRkb21bJGtleV1bJ3RhZyddIE9SICgka2V5ID09IDApKSB7CgkJCQlpZiAoKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0YWJsZScpIE9SICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0cicpKSBBTkQgKGlzc2V0KCRkb21bJGtleV1bJ2FsaWduJ10pKSkgewoJCQkJCSRkb21bJGtleV1bJ2FsaWduJ10gPSAoJHRoaXMtPnJ0bCkgPyAnUicgOiAnTCc7CgkJCQl9CgkJCQkvLyB2ZXJ0aWNhbGx5IGFsaWduIGltYWdlIGluIGxpbmUKCQkJCWlmICgoISR0aGlzLT5uZXdsaW5lKSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ2ltZycpIEFORCAoaXNzZXQoJGRvbVska2V5XVsnaGVpZ2h0J10pKSBBTkQgKCRkb21bJGtleV1bJ2hlaWdodCddID4gMCkpIHsKCQkJCQkvLyBnZXQgaW1hZ2UgaGVpZ2h0CgkJCQkJJGltZ2ggPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bJGtleV1bJ2hlaWdodCddLCAkdGhpcy0+bGFzdGgsICdweCcpOwoJCQkJCSRhdXRvbGluZWJyZWFrID0gZmFsc2U7CgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3dpZHRoJ10pIEFORCAoJGRvbVska2V5XVsnd2lkdGgnXSA+IDApKSB7CgkJCQkJCSRpbWd3ID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZG9tWyRrZXldWyd3aWR0aCddLCAxLCAncHgnLCBmYWxzZSk7CgkJCQkJCWlmICgoJGltZ3cgPD0gKCR0aGlzLT53IC0gJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbiAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXSAtICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXSkpCgkJCQkJCQlBTkQgKCgoJHRoaXMtPnJ0bCkgQU5EICgoJHRoaXMtPnggLSAkaW1ndykgPCAoJHRoaXMtPmxNYXJnaW4gKyAkdGhpcy0+Y2VsbF9wYWRkaW5nWydMJ10pKSkKCQkJCQkJCU9SICgoISR0aGlzLT5ydGwpIEFORCAoKCR0aGlzLT54ICsgJGltZ3cpID4gKCR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+Y2VsbF9wYWRkaW5nWydSJ10pKSkpKSB7CgkJCQkJCQkvLyBhZGQgYXV0b21hdGljIGxpbmUgYnJlYWsKCQkJCQkJCSRhdXRvbGluZWJyZWFrID0gdHJ1ZTsKCQkJCQkJCSR0aGlzLT5MbignJywgJGNlbGwpOwoJCQkJCQkJaWYgKCghJGRvbVsoJGtleS0xKV1bJ3RhZyddKSBBTkQgKCRkb21bKCRrZXktMSldWyd2YWx1ZSddID09ICcgJykpIHsKCQkJCQkJCQkvLyBnbyBiYWNrIHRvIGV2YWx1YXRlIHRoaXMgbGluZSBicmVhawoJCQkJCQkJCS0tJGtleTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoISRhdXRvbGluZWJyZWFrKSB7CgkJCQkJCWlmICgkdGhpcy0+aW5QYWdlQm9keSgpKSB7CgkJCQkJCQkkcHJlX3kgPSAkdGhpcy0+eTsKCQkJCQkJCS8vIGNoZWNrIGZvciBwYWdlIGJyZWFrCgkJCQkJCQlpZiAoKCEkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJGltZ2gpKSBBTkQgKCR0aGlzLT55IDwgJHByZV95KSkgewoJCQkJCQkJCS8vIGZpeCBmb3IgbXVsdGljb2x1bW4gbW9kZQoJCQkJCQkJCSRzdGFydGxpbmV5ID0gJHRoaXMtPnk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJaWYgKCR0aGlzLT5wYWdlID4gJHN0YXJ0bGluZXBhZ2UpIHsKCQkJCQkJCS8vIGZpeCBsaW5lIHNwbGl0dGVkIG92ZXIgdHdvIHBhZ2VzCgkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV0pKSB7CgkJCQkJCQkJJGN1cnBvcyA9ICR0aGlzLT5wYWdlbGVuWyRzdGFydGxpbmVwYWdlXSAtICR0aGlzLT5mb290ZXJsZW5bJHN0YXJ0bGluZXBhZ2VdOwoJCQkJCQkJfQoJCQkJCQkJLy8gbGluZSB0byBiZSBtb3ZlZCBvbmUgcGFnZSBmb3J3YXJkCgkJCQkJCQkkcGFnZWJ1ZmYgPSAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSk7CgkJCQkJCQkkbGluZWJlZyA9IHN1YnN0cigkcGFnZWJ1ZmYsICRzdGFydGxpbmVwb3MsICgkY3VycG9zIC0gJHN0YXJ0bGluZXBvcykpOwoJCQkJCQkJJHRzdGFydCA9IHN1YnN0cigkcGFnZWJ1ZmYsIDAsICRzdGFydGxpbmVwb3MpOwoJCQkJCQkJJHRlbmQgPSBzdWJzdHIoJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHN0YXJ0bGluZXBhZ2UpLCAkY3VycG9zKTsKCQkJCQkJCS8vIHJlbW92ZSBsaW5lIGZyb20gcHJldmlvdXMgcGFnZQoJCQkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHN0YXJ0bGluZXBhZ2UsICR0c3RhcnQuJycuJHRlbmQpOwoJCQkJCQkJJHBhZ2VidWZmID0gJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UpOwoJCQkJCQkJJHRzdGFydCA9IHN1YnN0cigkcGFnZWJ1ZmYsIDAsICR0aGlzLT5jbnRtcmtbJHRoaXMtPnBhZ2VdKTsKCQkJCQkJCSR0ZW5kID0gc3Vic3RyKCRwYWdlYnVmZiwgJHRoaXMtPmNudG1ya1skdGhpcy0+cGFnZV0pOwoJCQkJCQkJLy8gYWRkIGxpbmUgc3RhcnQgdG8gY3VycmVudCBwYWdlCgkJCQkJCQkkeXNoaWZ0ID0gKCRtaW5zdGFydGxpbmV5IC0gJHRoaXMtPnkpOwoJCQkJCQkJaWYgKCRmb250YWxpZ25lZCkgewoJCQkJCQkJCSR5c2hpZnQgKz0gKCRjdXJmb250c2l6ZSAvICR0aGlzLT5rKTsKCQkJCQkJCX0KCQkJCQkJCSR0cnkgPSBzcHJpbnRmKCcxIDAgMCAxIDAgJUYgY20nLCAoJHlzaGlmdCAqICR0aGlzLT5rKSk7CgkJCQkJCQkkdGhpcy0+c2V0UGFnZUJ1ZmZlcigkdGhpcy0+cGFnZSwgJHRzdGFydC4iXG5xXG4iLiR0cnkuIlxuIi4kbGluZWJlZy4iXG5RXG4iLiR0ZW5kKTsKCQkJCQkJCS8vIHNoaWZ0IHRoZSBhbm5vdGF0aW9ucyBhbmQgbGlua3MKCQkJCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJCQkJJG5leHRfcGFzayA9IGNvdW50KCR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXSk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRuZXh0X3Bhc2sgPSAwOwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyRzdGFydGxpbmVwYWdlXSkpIHsKCQkJCQkJCQlmb3JlYWNoICgkdGhpcy0+UGFnZUFubm90c1skc3RhcnRsaW5lcGFnZV0gYXMgJHBhayA9PiAkcGFjKSB7CgkJCQkJCQkJCWlmICgkcGFrID49ICRwYXNrKSB7CgkJCQkJCQkJCQkkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV1bXSA9ICRwYWM7CgkJCQkJCQkJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skc3RhcnRsaW5lcGFnZV1bJHBha10pOwoJCQkJCQkJCQkJJG5wYWsgPSBjb3VudCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pIC0gMTsKCQkJCQkJCQkJCSR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXVskbnBha11bJ3knXSAtPSAkeXNoaWZ0OwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJJHBhc2sgPSAkbmV4dF9wYXNrOwoJCQkJCQkJJHN0YXJ0bGluZXBvcyA9ICR0aGlzLT5jbnRtcmtbJHRoaXMtPnBhZ2VdOwoJCQkJCQkJJHN0YXJ0bGluZXBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCQkJCSRzdGFydGxpbmV5ID0gJHRoaXMtPnk7CgkJCQkJCQkkdGhpcy0+bmV3bGluZSA9IGZhbHNlOwoJCQkJCQl9CgkJCQkJCSR0aGlzLT55ICs9ICgoJHRoaXMtPmdldENlbGxIZWlnaHQoJGN1cmZvbnRzaXplIC8gJHRoaXMtPmspICsgJGN1cmZvbnRhc2NlbnQgLSAkY3VyZm9udGRlc2NlbnQpIC8gMikgLSAkaW1naDsKCQkJCQkJJG1pbnN0YXJ0bGluZXkgPSBtaW4oJHRoaXMtPnksICRtaW5zdGFydGxpbmV5KTsKCQkJCQkJJG1heGJvdHRvbWxpbmV5ID0gKCRzdGFydGxpbmV5ICsgJHRoaXMtPmdldENlbGxIZWlnaHQoJHRoaXMtPkZvbnRTaXplKSk7CgkJCQkJfQoJCQkJfSBlbHNlaWYgKGlzc2V0KCRkb21bJGtleV1bJ2ZvbnRuYW1lJ10pIE9SIGlzc2V0KCRkb21bJGtleV1bJ2ZvbnRzdHlsZSddKSBPUiBpc3NldCgkZG9tWyRrZXldWydmb250c2l6ZSddKSBPUiBpc3NldCgkZG9tWyRrZXldWydsaW5lLWhlaWdodCddKSkgewoJCQkJCS8vIGFjY291bnQgZm9yIGRpZmZlcmVudCBmb250IHNpemUKCQkJCQkkcGZvbnRuYW1lID0gJGN1cmZvbnRuYW1lOwoJCQkJCSRwZm9udHN0eWxlID0gJGN1cmZvbnRzdHlsZTsKCQkJCQkkcGZvbnRzaXplID0gJGN1cmZvbnRzaXplOwoJCQkJCSRmb250bmFtZSA9IChpc3NldCgkZG9tWyRrZXldWydmb250bmFtZSddKSA/ICRkb21bJGtleV1bJ2ZvbnRuYW1lJ10gOiAkY3VyZm9udG5hbWUpOwoJCQkJCSRmb250c3R5bGUgPSAoaXNzZXQoJGRvbVska2V5XVsnZm9udHN0eWxlJ10pID8gJGRvbVska2V5XVsnZm9udHN0eWxlJ10gOiAkY3VyZm9udHN0eWxlKTsKCQkJCQkkZm9udHNpemUgPSAoaXNzZXQoJGRvbVska2V5XVsnZm9udHNpemUnXSkgPyAkZG9tWyRrZXldWydmb250c2l6ZSddIDogJGN1cmZvbnRzaXplKTsKCQkJCQkkZm9udGFzY2VudCA9ICR0aGlzLT5nZXRGb250QXNjZW50KCRmb250bmFtZSwgJGZvbnRzdHlsZSwgJGZvbnRzaXplKTsKCQkJCQkkZm9udGRlc2NlbnQgPSAkdGhpcy0+Z2V0Rm9udERlc2NlbnQoJGZvbnRuYW1lLCAkZm9udHN0eWxlLCAkZm9udHNpemUpOwoJCQkJCWlmICgoJGZvbnRuYW1lICE9ICRjdXJmb250bmFtZSkgT1IgKCRmb250c3R5bGUgIT0gJGN1cmZvbnRzdHlsZSkgT1IgKCRmb250c2l6ZSAhPSAkY3VyZm9udHNpemUpCgkJCQkJCU9SICgkdGhpcy0+Y2VsbF9oZWlnaHRfcmF0aW8gIT0gJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSkKCQkJCQkJT1IgKCRkb21bJGtleV1bJ3RhZyddIEFORCAkZG9tWyRrZXldWydvcGVuaW5nJ10gQU5EICgkZG9tWyRrZXldWyd2YWx1ZSddID09ICdsaScpKSApIHsKCQkJCQkJaWYgKCgka2V5IDwgKCRtYXhlbCAtIDEpKSBBTkQgKAoJCQkJCQkJCSgkZG9tWyRrZXldWyd0YWcnXSBBTkQgJGRvbVska2V5XVsnb3BlbmluZyddIEFORCAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAnbGknKSkKCQkJCQkJCQlPUiAoJHRoaXMtPmNlbGxfaGVpZ2h0X3JhdGlvICE9ICRkb21bJGtleV1bJ2xpbmUtaGVpZ2h0J10pCgkJCQkJCQkJT1IgKCEkdGhpcy0+bmV3bGluZSBBTkQgaXNfbnVtZXJpYygkZm9udHNpemUpIEFORCBpc19udW1lcmljKCRjdXJmb250c2l6ZSkgQU5EICgkZm9udHNpemUgPj0gMCkgQU5EICgkY3VyZm9udHNpemUgPj0gMCkgQU5EICgkZm9udHNpemUgIT0gJGN1cmZvbnRzaXplKSkKCQkJCQkJCSkpIHsKCQkJCQkJCWlmICgkdGhpcy0+cGFnZSA+ICRzdGFydGxpbmVwYWdlKSB7CgkJCQkJCQkJLy8gZml4IGxpbmVzIHNwbGl0dGVkIG92ZXIgdHdvIHBhZ2VzCgkJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHN0YXJ0bGluZXBhZ2VdKSkgewoJCQkJCQkJCQkkY3VycG9zID0gJHRoaXMtPnBhZ2VsZW5bJHN0YXJ0bGluZXBhZ2VdIC0gJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV07CgkJCQkJCQkJfQoJCQkJCQkJCS8vIGxpbmUgdG8gYmUgbW92ZWQgb25lIHBhZ2UgZm9yd2FyZAoJCQkJCQkJCSRwYWdlYnVmZiA9ICR0aGlzLT5nZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlKTsKCQkJCQkJCQkkbGluZWJlZyA9IHN1YnN0cigkcGFnZWJ1ZmYsICRzdGFydGxpbmVwb3MsICgkY3VycG9zIC0gJHN0YXJ0bGluZXBvcykpOwoJCQkJCQkJCSR0c3RhcnQgPSBzdWJzdHIoJHBhZ2VidWZmLCAwLCAkc3RhcnRsaW5lcG9zKTsKCQkJCQkJCQkkdGVuZCA9IHN1YnN0cigkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSksICRjdXJwb3MpOwoJCQkJCQkJCS8vIHJlbW92ZSBsaW5lIHN0YXJ0IGZyb20gcHJldmlvdXMgcGFnZQoJCQkJCQkJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlLCAkdHN0YXJ0LicnLiR0ZW5kKTsKCQkJCQkJCQkkcGFnZWJ1ZmYgPSAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkdGhpcy0+cGFnZSk7CgkJCQkJCQkJJHRzdGFydCA9IHN1YnN0cigkcGFnZWJ1ZmYsIDAsICR0aGlzLT5jbnRtcmtbJHRoaXMtPnBhZ2VdKTsKCQkJCQkJCQkkdGVuZCA9IHN1YnN0cigkcGFnZWJ1ZmYsICR0aGlzLT5jbnRtcmtbJHRoaXMtPnBhZ2VdKTsKCQkJCQkJCQkvLyBhZGQgbGluZSBzdGFydCB0byBjdXJyZW50IHBhZ2UKCQkJCQkJCQkkeXNoaWZ0ID0gKCRtaW5zdGFydGxpbmV5IC0gJHRoaXMtPnkpOwoJCQkJCQkJCSR0cnkgPSBzcHJpbnRmKCcxIDAgMCAxIDAgJUYgY20nLCAoJHlzaGlmdCAqICR0aGlzLT5rKSk7CgkJCQkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UsICR0c3RhcnQuIlxucVxuIi4kdHJ5LiJcbiIuJGxpbmViZWcuIlxuUVxuIi4kdGVuZCk7CgkJCQkJCQkJLy8gc2hpZnQgdGhlIGFubm90YXRpb25zIGFuZCBsaW5rcwoJCQkJCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJCQkJCSRuZXh0X3Bhc2sgPSBjb3VudCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRuZXh0X3Bhc2sgPSAwOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPlBhZ2VBbm5vdHNbJHN0YXJ0bGluZXBhZ2VdKSkgewoJCQkJCQkJCQlmb3JlYWNoICgkdGhpcy0+UGFnZUFubm90c1skc3RhcnRsaW5lcGFnZV0gYXMgJHBhayA9PiAkcGFjKSB7CgkJCQkJCQkJCQlpZiAoJHBhayA+PSAkcGFzaykgewoJCQkJCQkJCQkJCSR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXVtdID0gJHBhYzsKCQkJCQkJCQkJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skc3RhcnRsaW5lcGFnZV1bJHBha10pOwoJCQkJCQkJCQkJCSRucGFrID0gY291bnQoJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdKSAtIDE7CgkJCQkJCQkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdWyRucGFrXVsneSddIC09ICR5c2hpZnQ7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQkJJHBhc2sgPSAkbmV4dF9wYXNrOwoJCQkJCQkJCSRzdGFydGxpbmVwb3MgPSAkdGhpcy0+Y250bXJrWyR0aGlzLT5wYWdlXTsKCQkJCQkJCQkkc3RhcnRsaW5lcGFnZSA9ICR0aGlzLT5wYWdlOwoJCQkJCQkJCSRzdGFydGxpbmV5ID0gJHRoaXMtPnk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoIWlzc2V0KCRkb21bJGtleV1bJ2xpbmUtaGVpZ2h0J10pKSB7CgkJCQkJCQkJJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSA9ICR0aGlzLT5jZWxsX2hlaWdodF9yYXRpbzsKCQkJCQkJCX0KCQkJCQkJCWlmICghJGRvbVska2V5XVsnYmxvY2snXSkgewoJCQkJCQkJCWlmICghKGlzc2V0KCRkb21bKCRrZXkgKyAxKV0pIEFORCAkZG9tWygka2V5ICsgMSldWyd0YWcnXSBBTkQgKCEkZG9tWygka2V5ICsgMSldWydvcGVuaW5nJ10pIEFORCAoJGRvbVsoJGtleSArIDEpXVsndmFsdWUnXSAhPSAnbGknKSBBTkQgJGRvbVska2V5XVsndGFnJ10gQU5EICghJGRvbVska2V5XVsnb3BlbmluZyddKSkpIHsKCQkJCQkJCQkJJHRoaXMtPnkgKz0gKCgoKCRjdXJmb250c2l6ZSAqICR0aGlzLT5jZWxsX2hlaWdodF9yYXRpbykgLSAoJGZvbnRzaXplICogJGRvbVska2V5XVsnbGluZS1oZWlnaHQnXSkpIC8gJHRoaXMtPmspICsgJGN1cmZvbnRhc2NlbnQgLSAkZm9udGFzY2VudCAtICRjdXJmb250ZGVzY2VudCArICRmb250ZGVzY2VudCkgLyAyOwoJCQkJCQkJCX0KCQkJCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gIT0gJ3N1cCcpIEFORCAoJGRvbVska2V5XVsndmFsdWUnXSAhPSAnc3ViJykpIHsKCQkJCQkJCQkJJGN1cnJlbnRfbGluZV9hbGlnbl9kYXRhID0gYXJyYXkoJGtleSwgJG1pbnN0YXJ0bGluZXksICRtYXhib3R0b21saW5leSk7CgkJCQkJCQkJCWlmIChpc3NldCgkbGluZV9hbGlnbl9kYXRhKSBBTkQgKCgkbGluZV9hbGlnbl9kYXRhWzBdID09ICgka2V5IC0gMSkpIE9SICgoJGxpbmVfYWxpZ25fZGF0YVswXSA9PSAoJGtleSAtIDIpKSBBTkQgKGlzc2V0KCRkb21bKCRrZXkgLSAxKV0pKSBBTkQgKHByZWdfbWF0Y2goJy9eKFtcc10rKSQvJywgJGRvbVsoJGtleSAtIDEpXVsndmFsdWUnXSkgPiAwKSkpKSB7CgkJCQkJCQkJCQkkbWluc3RhcnRsaW5leSA9IG1pbigkdGhpcy0+eSwgJGxpbmVfYWxpZ25fZGF0YVsxXSk7CgkJCQkJCQkJCQkkbWF4Ym90dG9tbGluZXkgPSBtYXgoKCR0aGlzLT55ICsgJHRoaXMtPmdldENlbGxIZWlnaHQoJGZvbnRzaXplIC8gJHRoaXMtPmspKSwgJGxpbmVfYWxpZ25fZGF0YVsyXSk7CgkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkkbWluc3RhcnRsaW5leSA9IG1pbigkdGhpcy0+eSwgJG1pbnN0YXJ0bGluZXkpOwoJCQkJCQkJCQkJJG1heGJvdHRvbWxpbmV5ID0gbWF4KCgkdGhpcy0+eSArICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCRmb250c2l6ZSAvICR0aGlzLT5rKSksICRtYXhib3R0b21saW5leSk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGxpbmVfYWxpZ25fZGF0YSA9ICRjdXJyZW50X2xpbmVfYWxpZ25fZGF0YTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCQkkdGhpcy0+Y2VsbF9oZWlnaHRfcmF0aW8gPSAkZG9tWyRrZXldWydsaW5lLWhlaWdodCddOwoJCQkJCQkJJGZvbnRhbGlnbmVkID0gdHJ1ZTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+U2V0Rm9udCgkZm9udG5hbWUsICRmb250c3R5bGUsICRmb250c2l6ZSk7CgkJCQkJCS8vIHJlc2V0IHJvdyBoZWlnaHQKCQkJCQkJJHRoaXMtPnJlc2V0TGFzdEgoKTsKCQkJCQkJJGN1cmZvbnRuYW1lID0gJGZvbnRuYW1lOwoJCQkJCQkkY3VyZm9udHN0eWxlID0gJGZvbnRzdHlsZTsKCQkJCQkJJGN1cmZvbnRzaXplID0gJGZvbnRzaXplOwoJCQkJCQkkY3VyZm9udGFzY2VudCA9ICRmb250YXNjZW50OwoJCQkJCQkkY3VyZm9udGRlc2NlbnQgPSAkZm9udGRlc2NlbnQ7CgkJCQkJfQoJCQkJfQoJCQkJLy8gc2V0IHRleHQgcmVuZGVyaW5nIG1vZGUKCQkJCSR0ZXh0c3Ryb2tlID0gaXNzZXQoJGRvbVska2V5XVsnc3Ryb2tlJ10pID8gJGRvbVska2V5XVsnc3Ryb2tlJ10gOiAkdGhpcy0+dGV4dHN0cm9rZXdpZHRoOwoJCQkJJHRleHRmaWxsID0gaXNzZXQoJGRvbVska2V5XVsnZmlsbCddKSA/ICRkb21bJGtleV1bJ2ZpbGwnXSA6ICgoJHRoaXMtPnRleHRyZW5kZXJtb2RlICUgMikgPT0gMCk7CgkJCQkkdGV4dGNsaXAgPSBpc3NldCgkZG9tWyRrZXldWydjbGlwJ10pID8gJGRvbVska2V5XVsnY2xpcCddIDogKCR0aGlzLT50ZXh0cmVuZGVybW9kZSA+IDMpOwoJCQkJJHRoaXMtPnNldFRleHRSZW5kZXJpbmdNb2RlKCR0ZXh0c3Ryb2tlLCAkdGV4dGZpbGwsICR0ZXh0Y2xpcCk7CgkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnZm9udC1zdHJldGNoJ10pIEFORCAoJGRvbVska2V5XVsnZm9udC1zdHJldGNoJ10gIT09IGZhbHNlKSkgewoJCQkJCSR0aGlzLT5zZXRGb250U3RyZXRjaGluZygkZG9tWyRrZXldWydmb250LXN0cmV0Y2gnXSk7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnbGV0dGVyLXNwYWNpbmcnXSkgQU5EICgkZG9tWyRrZXldWydsZXR0ZXItc3BhY2luZyddICE9PSBmYWxzZSkpIHsKCQkJCQkkdGhpcy0+c2V0Rm9udFNwYWNpbmcoJGRvbVska2V5XVsnbGV0dGVyLXNwYWNpbmcnXSk7CgkJCQl9CgkJCQlpZiAoKCRwbGFsaWduID09ICdKJykgQU5EICRkb21bJGtleV1bJ2Jsb2NrJ10pIHsKCQkJCQkkcGxhbGlnbiA9ICcnOwoJCQkJfQoJCQkJLy8gZ2V0IGN1cnJlbnQgcG9zaXRpb24gb24gcGFnZSBidWZmZXIKCQkJCSRjdXJwb3MgPSAkdGhpcy0+cGFnZWxlblskc3RhcnRsaW5lcGFnZV07CgkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnYmdjb2xvciddKSBBTkQgKCRkb21bJGtleV1bJ2JnY29sb3InXSAhPT0gZmFsc2UpKSB7CgkJCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRkb21bJGtleV1bJ2JnY29sb3InXSk7CgkJCQkJJHdmaWxsID0gdHJ1ZTsKCQkJCX0gZWxzZSB7CgkJCQkJJHdmaWxsID0gJGZpbGwgfCBmYWxzZTsKCQkJCX0KCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydmZ2NvbG9yJ10pIEFORCAoJGRvbVska2V5XVsnZmdjb2xvciddICE9PSBmYWxzZSkpIHsKCQkJCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJGRvbVska2V5XVsnZmdjb2xvciddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydzdHJva2Vjb2xvciddKSBBTkQgKCRkb21bJGtleV1bJ3N0cm9rZWNvbG9yJ10gIT09IGZhbHNlKSkgewoJCQkJCSR0aGlzLT5TZXREcmF3Q29sb3JBcnJheSgkZG9tWyRrZXldWydzdHJva2Vjb2xvciddKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhbGlnbiddKSkgewoJCQkJCSRsYWxpZ24gPSAkZG9tWyRrZXldWydhbGlnbiddOwoJCQkJfQoJCQkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRsYWxpZ24pKSB7CgkJCQkJJGxhbGlnbiA9ICRhbGlnbjsKCQkJCX0KCQkJfQoJCQkvLyBhbGlnbiBsaW5lcwoJCQlpZiAoJHRoaXMtPm5ld2xpbmUgQU5EIChzdHJsZW4oJGRvbVska2V5XVsndmFsdWUnXSkgPiAwKSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gIT0gJ3RkJykgQU5EICgkZG9tWyRrZXldWyd2YWx1ZSddICE9ICd0aCcpKSB7CgkJCQkkbmV3bGluZSA9IHRydWU7CgkJCQkkZm9udGFsaWduZWQgPSBmYWxzZTsKCQkJCS8vIHdlIGFyZSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgbmV3IGxpbmUKCQkJCWlmIChpc3NldCgkc3RhcnRsaW5leCkpIHsKCQkJCQkkeXNoaWZ0ID0gKCRtaW5zdGFydGxpbmV5IC0gJHN0YXJ0bGluZXkpOwoJCQkJCWlmICgoJHlzaGlmdCA+IDApIE9SICgkdGhpcy0+cGFnZSA+ICRzdGFydGxpbmVwYWdlKSkgewoJCQkJCQkkeXNoaWZ0ID0gMDsKCQkJCQl9CgkJCQkJJHRfeCA9IDA7CgkJCQkJLy8gdGhlIGxhc3QgbGluZSBtdXN0IGJlIHNoaWZ0ZWQgdG8gYmUgYWxpZ25lZCBhcyByZXF1ZXN0ZWQKCQkJCQkkbGluZXcgPSBhYnMoJHRoaXMtPmVuZGxpbmV4IC0gJHN0YXJ0bGluZXgpOwoJCQkJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCQkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkJCQkkcHN0YXJ0ID0gc3Vic3RyKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddLCAwLCAkc3RhcnRsaW5lcG9zKTsKCQkJCQkJaWYgKGlzc2V0KCRvcGVudGFncG9zKSkgewoJCQkJCQkJJG1pZHBvcyA9ICRvcGVudGFncG9zOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJG1pZHBvcyA9IDA7CgkJCQkJCX0KCQkJCQkJaWYgKCRtaWRwb3MgPiAwKSB7CgkJCQkJCQkkcG1pZCA9IHN1YnN0cigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSwgJHN0YXJ0bGluZXBvcywgKCRtaWRwb3MgLSAkc3RhcnRsaW5lcG9zKSk7CgkJCQkJCQkkcGVuZCA9IHN1YnN0cigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSwgJG1pZHBvcyk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcG1pZCA9IHN1YnN0cigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSwgJHN0YXJ0bGluZXBvcyk7CgkJCQkJCQkkcGVuZCA9ICcnOwoJCQkJCQl9CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHBzdGFydCA9IHN1YnN0cigkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSksIDAsICRzdGFydGxpbmVwb3MpOwoJCQkJCQlpZiAoaXNzZXQoJG9wZW50YWdwb3MpIEFORCBpc3NldCgkdGhpcy0+Zm9vdGVybGVuWyRzdGFydGxpbmVwYWdlXSkgQU5EICghJHRoaXMtPkluRm9vdGVyKSkgewoJCQkJCQkJJHRoaXMtPmZvb3RlcnBvc1skc3RhcnRsaW5lcGFnZV0gPSAkdGhpcy0+cGFnZWxlblskc3RhcnRsaW5lcGFnZV0gLSAkdGhpcy0+Zm9vdGVybGVuWyRzdGFydGxpbmVwYWdlXTsKCQkJCQkJCSRtaWRwb3MgPSBtaW4oJG9wZW50YWdwb3MsICR0aGlzLT5mb290ZXJwb3NbJHN0YXJ0bGluZXBhZ2VdKTsKCQkJCQkJfSBlbHNlaWYgKGlzc2V0KCRvcGVudGFncG9zKSkgewoJCQkJCQkJJG1pZHBvcyA9ICRvcGVudGFncG9zOwoJCQkJCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV0pIEFORCAoISR0aGlzLT5JbkZvb3RlcikpIHsKCQkJCQkJCSR0aGlzLT5mb290ZXJwb3NbJHN0YXJ0bGluZXBhZ2VdID0gJHRoaXMtPnBhZ2VsZW5bJHN0YXJ0bGluZXBhZ2VdIC0gJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV07CgkJCQkJCQkkbWlkcG9zID0gJHRoaXMtPmZvb3RlcnBvc1skc3RhcnRsaW5lcGFnZV07CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbWlkcG9zID0gMDsKCQkJCQkJfQoJCQkJCQlpZiAoJG1pZHBvcyA+IDApIHsKCQkJCQkJCSRwbWlkID0gc3Vic3RyKCR0aGlzLT5nZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlKSwgJHN0YXJ0bGluZXBvcywgKCRtaWRwb3MgLSAkc3RhcnRsaW5lcG9zKSk7CgkJCQkJCQkkcGVuZCA9IHN1YnN0cigkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSksICRtaWRwb3MpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHBtaWQgPSBzdWJzdHIoJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHN0YXJ0bGluZXBhZ2UpLCAkc3RhcnRsaW5lcG9zKTsKCQkJCQkJCSRwZW5kID0gJyc7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKChpc3NldCgkcGxhbGlnbikgQU5EICgoKCRwbGFsaWduID09ICdDJykgT1IgKCRwbGFsaWduID09ICdKJykgT1IgKCgkcGxhbGlnbiA9PSAnUicpIEFORCAoISR0aGlzLT5ydGwpKSBPUiAoKCRwbGFsaWduID09ICdMJykgQU5EICgkdGhpcy0+cnRsKSkpKSkpIHsKCQkJCQkJLy8gY2FsY3VsYXRlIHNoaWZ0aW5nIGFtb3VudAoJCQkJCQkkdHcgPSAkdzsKCQkJCQkJaWYgKCgkcGxhbGlnbiA9PSAnSicpIEFORCAkdGhpcy0+aXNSVExUZXh0RGlyKCkgQU5EICgkdGhpcy0+bnVtX2NvbHVtbnMgPiAxKSkgewoJCQkJCQkJJHR3ICs9ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJCQkJfQoJCQkJCQlpZiAoJHRoaXMtPmxNYXJnaW4gIT0gJHByZXZsTWFyZ2luKSB7CgkJCQkJCQkkdHcgKz0gKCRwcmV2bE1hcmdpbiAtICR0aGlzLT5sTWFyZ2luKTsKCQkJCQkJfQoJCQkJCQlpZiAoJHRoaXMtPnJNYXJnaW4gIT0gJHByZXZyTWFyZ2luKSB7CgkJCQkJCQkkdHcgKz0gKCRwcmV2ck1hcmdpbiAtICR0aGlzLT5yTWFyZ2luKTsKCQkJCQkJfQoJCQkJCQkkb25lX3NwYWNlX3dpZHRoID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKGNocigzMikpOwoJCQkJCQkkbm8gPSAwOyAvLyBudW1iZXIgb2Ygc3BhY2VzIG9uIGEgbGluZSBjb250YWluZWQgb24gYSBzaW5nbGUgYmxvY2sKCQkJCQkJaWYgKCR0aGlzLT5pc1JUTFRleHREaXIoKSkgeyAvLyBSVEwKCQkJCQkJCS8vIHJlbW92ZSBsZWZ0IHNwYWNlIGlmIGV4aXN0CgkJCQkJCQkkcG9zMSA9IFRDUERGX1NUQVRJQzo6cmV2c3RycG9zKCRwbWlkLCAnWygnKTsKCQkJCQkJCWlmICgkcG9zMSA+IDApIHsKCQkJCQkJCQkkcG9zMSA9IGludHZhbCgkcG9zMSk7CgkJCQkJCQkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkpIHsKCQkJCQkJCQkJJHBvczIgPSBpbnR2YWwoVENQREZfU1RBVElDOjpyZXZzdHJwb3MoJHBtaWQsICdbKCcuY2hyKDApLmNocigzMikpKTsKCQkJCQkJCQkJJHNwYWNlbGVuID0gMjsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkcG9zMiA9IGludHZhbChUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgJ1soJy5jaHIoMzIpKSk7CgkJCQkJCQkJCSRzcGFjZWxlbiA9IDE7CgkJCQkJCQkJfQoJCQkJCQkJCWlmICgkcG9zMSA9PSAkcG9zMikgewoJCQkJCQkJCQkkcG1pZCA9IHN1YnN0cigkcG1pZCwgMCwgKCRwb3MxICsgMikpLnN1YnN0cigkcG1pZCwgKCRwb3MxICsgMiArICRzcGFjZWxlbikpOwoJCQkJCQkJCQlpZiAoc3Vic3RyKCRwbWlkLCAkcG9zMSwgNCkgPT0gJ1soKV0nKSB7CgkJCQkJCQkJCQkkbGluZXcgLT0gJG9uZV9zcGFjZV93aWR0aDsKCQkJCQkJCQkJfSBlbHNlaWYgKCRwb3MxID09IHN0cnBvcygkcG1pZCwgJ1soJykpIHsKCQkJCQkJCQkJCSRubyA9IDE7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7IC8vIExUUgoJCQkJCQkJLy8gcmVtb3ZlIHJpZ2h0IHNwYWNlIGlmIGV4aXN0CgkJCQkJCQkkcG9zMSA9IFRDUERGX1NUQVRJQzo6cmV2c3RycG9zKCRwbWlkLCAnKV0nKTsKCQkJCQkJCWlmICgkcG9zMSA+IDApIHsKCQkJCQkJCQkkcG9zMSA9IGludHZhbCgkcG9zMSk7CgkJCQkJCQkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkpIHsKCQkJCQkJCQkJJHBvczIgPSBpbnR2YWwoVENQREZfU1RBVElDOjpyZXZzdHJwb3MoJHBtaWQsIGNocigwKS5jaHIoMzIpLicpXScpKSArIDI7CgkJCQkJCQkJCSRzcGFjZWxlbiA9IDI7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJJHBvczIgPSBpbnR2YWwoVENQREZfU1RBVElDOjpyZXZzdHJwb3MoJHBtaWQsIGNocigzMikuJyldJykpICsgMTsKCQkJCQkJCQkJJHNwYWNlbGVuID0gMTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKCRwb3MxID09ICRwb3MyKSB7CgkJCQkJCQkJCSRwbWlkID0gc3Vic3RyKCRwbWlkLCAwLCAoJHBvczEgLSAkc3BhY2VsZW4pKS5zdWJzdHIoJHBtaWQsICRwb3MxKTsKCQkJCQkJCQkJJGxpbmV3IC09ICRvbmVfc3BhY2Vfd2lkdGg7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSRtZGlmZiA9ICgkdHcgLSAkbGluZXcpOwoJCQkJCQlpZiAoJHBsYWxpZ24gPT0gJ0MnKSB7CgkJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJCSR0X3ggPSAtKCRtZGlmZiAvIDIpOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkdF94ID0gKCRtZGlmZiAvIDIpOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2VpZiAoJHBsYWxpZ24gPT0gJ1InKSB7CgkJCQkJCQkvLyByaWdodCBhbGlnbm1lbnQgb24gTFRSIGRvY3VtZW50CgkJCQkJCQkkdF94ID0gJG1kaWZmOwoJCQkJCQl9IGVsc2VpZiAoJHBsYWxpZ24gPT0gJ0wnKSB7CgkJCQkJCQkvLyBsZWZ0IGFsaWdubWVudCBvbiBSVEwgZG9jdW1lbnQKCQkJCQkJCSR0X3ggPSAtJG1kaWZmOwoJCQkJCQl9IGVsc2VpZiAoKCRwbGFsaWduID09ICdKJykgQU5EICgkcGxhbGlnbiA9PSAkbGFsaWduKSkgewoJCQkJCQkJLy8gSnVzdGlmaWNhdGlvbgoJCQkJCQkJaWYgKCR0aGlzLT5pc1JUTFRleHREaXIoKSkgewoJCQkJCQkJCS8vIGFsaWduIHRleHQgb24gdGhlIGxlZnQKCQkJCQkJCQkkdF94ID0gLSRtZGlmZjsKCQkJCQkJCX0KCQkJCQkJCSRucyA9IDA7IC8vIG51bWJlciBvZiBzcGFjZXMKCQkJCQkJCSRwbWlkdGVtcCA9ICRwbWlkOwoJCQkJCQkJLy8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycwoJCQkJCQkJJHBtaWR0ZW1wID0gcHJlZ19yZXBsYWNlKCcvW1xcXF1bXChdL3gnLCAnXFwjISNPUCMhIycsICRwbWlkdGVtcCk7CgkJCQkJCQkkcG1pZHRlbXAgPSBwcmVnX3JlcGxhY2UoJy9bXFxcXVtcKV0veCcsICdcXCMhI0NQIyEjJywgJHBtaWR0ZW1wKTsKCQkJCQkJCS8vIHNlYXJjaCBzcGFjZXMKCQkJCQkJCWlmIChwcmVnX21hdGNoX2FsbCgnL1xbXCgoW15cKV0qKVwpXF0veCcsICRwbWlkdGVtcCwgJGxuc3RyaW5nLCBQUkVHX1BBVFRFUk5fT1JERVIpKSB7CgkJCQkJCQkJJHNwYWNlc3RyID0gJHRoaXMtPmdldFNwYWNlU3RyaW5nKCk7CgkJCQkJCQkJJG1heGtrID0gY291bnQoJGxuc3RyaW5nWzFdKSAtIDE7CgkJCQkJCQkJZm9yICgka2s9MDsgJGtrIDw9ICRtYXhrazsgKyska2spIHsKCQkJCQkJCQkJLy8gcmVzdG9yZSBzcGVjaWFsIGNoYXJhY3RlcnMKCQkJCQkJCQkJJGxuc3RyaW5nWzFdWyRra10gPSBzdHJfcmVwbGFjZSgnIyEjT1AjISMnLCAnKCcsICRsbnN0cmluZ1sxXVska2tdKTsKCQkJCQkJCQkJJGxuc3RyaW5nWzFdWyRra10gPSBzdHJfcmVwbGFjZSgnIyEjQ1AjISMnLCAnKScsICRsbnN0cmluZ1sxXVska2tdKTsKCQkJCQkJCQkJLy8gc3RvcmUgbnVtYmVyIG9mIHNwYWNlcyBvbiB0aGUgc3RyaW5ncwoJCQkJCQkJCQkkbG5zdHJpbmdbMl1bJGtrXSA9IHN1YnN0cl9jb3VudCgkbG5zdHJpbmdbMV1bJGtrXSwgJHNwYWNlc3RyKTsKCQkJCQkJCQkJLy8gY291bnQgdG90YWwgc3BhY2VzIG9uIGxpbmUKCQkJCQkJCQkJJG5zICs9ICRsbnN0cmluZ1syXVska2tdOwoJCQkJCQkJCQkkbG5zdHJpbmdbM11bJGtrXSA9ICRuczsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKCRucyA9PSAwKSB7CgkJCQkJCQkJCSRucyA9IDE7CgkJCQkJCQkJfQoJCQkJCQkJCS8vIGNhbGN1bGF0ZSBhZGRpdGlvbmFsIHNwYWNlIHRvIGFkZCB0byBlYWNoIGV4aXN0aW5nIHNwYWNlCgkJCQkJCQkJJHNwYWNld2lkdGggPSAoJG1kaWZmIC8gKCRucyAtICRubykpICogJHRoaXMtPms7CgkJCQkJCQkJaWYgKCR0aGlzLT5Gb250U2l6ZSA8PSAwKSB7CgkJCQkJCQkJCSR0aGlzLT5Gb250U2l6ZSA9IDE7CgkJCQkJCQkJfQoJCQkJCQkJCSRzcGFjZXdpZHRodSA9IC0xMDAwICogKCRtZGlmZiArICgoJG5zICsgJG5vKSAqICRvbmVfc3BhY2Vfd2lkdGgpKSAvICRucyAvICR0aGlzLT5Gb250U2l6ZTsKCQkJCQkJCQlpZiAoJHRoaXMtPmZvbnRfc3BhY2luZyAhPSAwKSB7CgkJCQkJCQkJCS8vIGZpeGVkIHNwYWNpbmcgbW9kZQoJCQkJCQkJCQkkb3N3ID0gLTEwMDAgKiAkdGhpcy0+Zm9udF9zcGFjaW5nIC8gJHRoaXMtPkZvbnRTaXplOwoJCQkJCQkJCQkkc3BhY2V3aWR0aHUgKz0gJG9zdzsKCQkJCQkJCQl9CgkJCQkJCQkJJG5zbWF4ID0gJG5zOwoJCQkJCQkJCSRucyA9IDA7CgkJCQkJCQkJcmVzZXQoJGxuc3RyaW5nKTsKCQkJCQkJCQkkb2Zmc2V0ID0gMDsKCQkJCQkJCQkkc3RyY291bnQgPSAwOwoJCQkJCQkJCSRwcmV2X2Vwc3Bvc2JlZyA9IDA7CgkJCQkJCQkJJHRleHRwb3MgPSAwOwoJCQkJCQkJCWlmICgkdGhpcy0+aXNSVExUZXh0RGlyKCkpIHsKCQkJCQkJCQkJJHRleHRwb3MgPSAkdGhpcy0+d1B0OwoJCQkJCQkJCX0KCQkJCQkJCQl3aGlsZSAocHJlZ19tYXRjaCgnLyhbMC05XC5cK1wtXSopW1xzXShUZHxjbXxtfGx8Y3xyZSlbXHNdL3gnLCAkcG1pZCwgJHN0cnBpZWNlLCBQUkVHX09GRlNFVF9DQVBUVVJFLCAkb2Zmc2V0KSA9PSAxKSB7CgkJCQkJCQkJCS8vIGNoZWNrIGlmIHdlIGFyZSBpbnNpZGUgYSBzdHJpbmcgc2VjdGlvbiAnWyggLi4uICldJwoJCQkJCQkJCQkkc3Ryb2Zmc2V0ID0gc3RycG9zKCRwbWlkLCAnWygnLCAkb2Zmc2V0KTsKCQkJCQkJCQkJaWYgKCgkc3Ryb2Zmc2V0ICE9PSBmYWxzZSkgQU5EICgkc3Ryb2Zmc2V0IDw9ICRzdHJwaWVjZVsyXVsxXSkpIHsKCQkJCQkJCQkJCS8vIHNldCBvZmZzZXQgdG8gdGhlIGVuZCBvZiBzdHJpbmcgc2VjdGlvbgoJCQkJCQkJCQkJJG9mZnNldCA9IHN0cnBvcygkcG1pZCwgJyldJywgJHN0cm9mZnNldCk7CgkJCQkJCQkJCQl3aGlsZSAoKCRvZmZzZXQgIT09IGZhbHNlKSBBTkQgKCRwbWlkWygkb2Zmc2V0IC0gMSldID09ICdcXCcpKSB7CgkJCQkJCQkJCQkJJG9mZnNldCA9IHN0cnBvcygkcG1pZCwgJyldJywgKCRvZmZzZXQgKyAxKSk7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQlpZiAoJG9mZnNldCA9PT0gZmFsc2UpIHsKCQkJCQkJCQkJCQkkdGhpcy0+RXJyb3IoJ0hUTUwgSnVzdGlmaWNhdGlvbjogbWFsZm9ybWVkIFBERiBjb2RlLicpOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJY29udGludWU7CgkJCQkJCQkJCX0KCQkJCQkJCQkJaWYgKCR0aGlzLT5pc1JUTFRleHREaXIoKSkgewoJCQkJCQkJCQkJJHNwYWNldyA9ICgkc3BhY2V3aWR0aCAqICgkbnNtYXggLSAkbnMpKTsKCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCSRzcGFjZXcgPSAoJHNwYWNld2lkdGggKiAkbnMpOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRvZmZzZXQgPSAkc3RycGllY2VbMl1bMV0gKyBzdHJsZW4oJHN0cnBpZWNlWzJdWzBdKTsKCQkJCQkJCQkJJGVwc3Bvc2JlZyA9IHN0cnBvcygkcG1pZCwgJ3EnLiR0aGlzLT5lcHNtYXJrZXIsICRvZmZzZXQpOwoJCQkJCQkJCQkkZXBzcG9zZW5kID0gc3RycG9zKCRwbWlkLCAkdGhpcy0+ZXBzbWFya2VyLidRJywgJG9mZnNldCkgKyBzdHJsZW4oJHRoaXMtPmVwc21hcmtlci4nUScpOwoJCQkJCQkJCQlpZiAoKCgkZXBzcG9zYmVnID4gMCkgQU5EICgkZXBzcG9zZW5kID4gMCkgQU5EICgkb2Zmc2V0ID4gJGVwc3Bvc2JlZykgQU5EICgkb2Zmc2V0IDwgJGVwc3Bvc2VuZCkpCgkJCQkJCQkJCQlPUiAoKCRlcHNwb3NiZWcgPT09IGZhbHNlKSBBTkQgKCRlcHNwb3NlbmQgPiAwKSBBTkQgKCRvZmZzZXQgPCAkZXBzcG9zZW5kKSkpIHsKCQkJCQkJCQkJCS8vIHNoaWZ0IEVQUyBpbWFnZXMKCQkJCQkJCQkJCSR0cnggPSBzcHJpbnRmKCcxIDAgMCAxICVGIDAgY20nLCAkc3BhY2V3KTsKCQkJCQkJCQkJCSRlcHNwb3NiZWcgPSBzdHJwb3MoJHBtaWQsICdxJy4kdGhpcy0+ZXBzbWFya2VyLCAoJHByZXZfZXBzcG9zYmVnIC0gNikpOwoJCQkJCQkJCQkJJHBtaWRfYiA9IHN1YnN0cigkcG1pZCwgMCwgJGVwc3Bvc2JlZyk7CgkJCQkJCQkJCQkkcG1pZF9tID0gc3Vic3RyKCRwbWlkLCAkZXBzcG9zYmVnLCAoJGVwc3Bvc2VuZCAtICRlcHNwb3NiZWcpKTsKCQkJCQkJCQkJCSRwbWlkX2UgPSBzdWJzdHIoJHBtaWQsICRlcHNwb3NlbmQpOwoJCQkJCQkJCQkJJHBtaWQgPSAkcG1pZF9iLiJcbnFcbiIuJHRyeC4iXG4iLiRwbWlkX20uIlxuUVxuIi4kcG1pZF9lOwoJCQkJCQkJCQkJJG9mZnNldCA9ICRlcHNwb3NlbmQ7CgkJCQkJCQkJCQljb250aW51ZTsKCgkJCQkJCQkJCX0KCQkJCQkJCQkJJHByZXZfZXBzcG9zYmVnID0gJGVwc3Bvc2JlZzsKCQkJCQkJCQkJJGN1cnJlbnR4cG9zID0gMDsKCQkJCQkJCQkJLy8gc2hpZnQgYmxvY2tzIG9mIGNvZGUKCQkJCQkJCQkJc3dpdGNoICgkc3RycGllY2VbMl1bMF0pIHsKCQkJCQkJCQkJCWNhc2UgJ1RkJzoKCQkJCQkJCQkJCWNhc2UgJ2NtJzoKCQkJCQkJCQkJCWNhc2UgJ20nOgoJCQkJCQkJCQkJY2FzZSAnbCc6IHsKCQkJCQkJCQkJCQkvLyBnZXQgY3VycmVudCBYIHBvc2l0aW9uCgkJCQkJCQkJCQkJcHJlZ19tYXRjaCgnLyhbMC05XC5cK1wtXSopW1xzXSgnLiRzdHJwaWVjZVsxXVswXS4nKVtcc10oJy4kc3RycGllY2VbMl1bMF0uJykoW1xzXSopL3gnLCAkcG1pZCwgJHhtYXRjaGVzKTsKCQkJCQkJCQkJCQlpZiAoIWlzc2V0KCR4bWF0Y2hlc1sxXSkpIHsKCQkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCSRjdXJyZW50eHBvcyA9ICR4bWF0Y2hlc1sxXTsKCQkJCQkJCQkJCQkkdGV4dHBvcyA9ICRjdXJyZW50eHBvczsKCQkJCQkJCQkJCQlpZiAoKCRzdHJjb3VudCA8PSAkbWF4a2spIEFORCAoJHN0cnBpZWNlWzJdWzBdID09ICdUZCcpKSB7CgkJCQkJCQkJCQkJCSRucyA9ICRsbnN0cmluZ1szXVskc3RyY291bnRdOwoJCQkJCQkJCQkJCQlpZiAoJHRoaXMtPmlzUlRMVGV4dERpcigpKSB7CgkJCQkJCQkJCQkJCQkkc3BhY2V3ID0gKCRzcGFjZXdpZHRoICogKCRuc21heCAtICRucykpOwoJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCSsrJHN0cmNvdW50OwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkvLyBqdXN0aWZ5IGJsb2NrCgkJCQkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy8oWzAtOVwuXCtcLV0qKVtcc10oJy4kc3RycGllY2VbMV1bMF0uJylbXHNdKCcuJHN0cnBpZWNlWzJdWzBdLicpKFtcc10qKS94JywgJHBtaWQsICRwbWF0Y2gpID09IDEpIHsKCQkJCQkJCQkJCQkJJG5ld3BtaWQgPSBzcHJpbnRmKCclRicsKGZsb2F0dmFsKCRwbWF0Y2hbMV0pICsgJHNwYWNldykpLicgJy4kcG1hdGNoWzJdLicgeCojISMqeCcuJHBtYXRjaFszXS4kcG1hdGNoWzRdOwoJCQkJCQkJCQkJCQkkcG1pZCA9IHN0cl9yZXBsYWNlKCRwbWF0Y2hbMF0sICRuZXdwbWlkLCAkcG1pZCk7CgkJCQkJCQkJCQkJCXVuc2V0KCRwbWF0Y2gsICRuZXdwbWlkKTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQljYXNlICdyZSc6IHsKCQkJCQkJCQkJCQkvLyBqdXN0aWZ5IGJsb2NrCgkJCQkJCQkJCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+bGlzcGFjZXIpKSB7CgkJCQkJCQkJCQkJCSR0aGlzLT5saXNwYWNlciA9ICcnOwoJCQkJCQkJCQkJCQljb250aW51ZTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJcHJlZ19tYXRjaCgnLyhbMC05XC5cK1wtXSopW1xzXShbMC05XC5cK1wtXSopW1xzXShbMC05XC5cK1wtXSopW1xzXSgnLiRzdHJwaWVjZVsxXVswXS4nKVtcc10ocmUpKFtcc10qKS94JywgJHBtaWQsICR4bWF0Y2hlcyk7CgkJCQkJCQkJCQkJaWYgKCFpc3NldCgkeG1hdGNoZXNbMV0pKSB7CgkJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkkY3VycmVudHhwb3MgPSAkeG1hdGNoZXNbMV07CgkJCQkJCQkJCQkJJHhfZGlmZiA9IDA7CgkJCQkJCQkJCQkJJHdfZGlmZiA9IDA7CgkJCQkJCQkJCQkJaWYgKCR0aGlzLT5pc1JUTFRleHREaXIoKSkgeyAvLyBSVEwKCQkJCQkJCQkJCQkJaWYgKCRjdXJyZW50eHBvcyA8ICR0ZXh0cG9zKSB7CgkJCQkJCQkJCQkJCQkkeF9kaWZmID0gKCRzcGFjZXdpZHRoICogKCRuc21heCAtICRsbnN0cmluZ1szXVskc3RyY291bnRdKSk7CgkJCQkJCQkJCQkJCQkkd19kaWZmID0gKCRzcGFjZXdpZHRoICogJGxuc3RyaW5nWzJdWyRzdHJjb3VudF0pOwoJCQkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJaWYgKCRzdHJjb3VudCA+IDApIHsKCQkJCQkJCQkJCQkJCQkkeF9kaWZmID0gKCRzcGFjZXdpZHRoICogKCRuc21heCAtICRsbnN0cmluZ1szXVsoJHN0cmNvdW50IC0gMSldKSk7CgkJCQkJCQkJCQkJCQkJJHdfZGlmZiA9ICgkc3BhY2V3aWR0aCAqICRsbnN0cmluZ1syXVsoJHN0cmNvdW50IC0gMSldKTsKCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCX0gZWxzZSB7IC8vIExUUgoJCQkJCQkJCQkJCQlpZiAoJGN1cnJlbnR4cG9zID4gJHRleHRwb3MpIHsKCQkJCQkJCQkJCQkJCWlmICgkc3RyY291bnQgPiAwKSB7CgkJCQkJCQkJCQkJCQkJJHhfZGlmZiA9ICgkc3BhY2V3aWR0aCAqICRsbnN0cmluZ1szXVsoJHN0cmNvdW50IC0gMSldKTsKCQkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQkJCSR3X2RpZmYgPSAoJHNwYWNld2lkdGggKiAkbG5zdHJpbmdbMl1bJHN0cmNvdW50XSk7CgkJCQkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkJCQlpZiAoJHN0cmNvdW50ID4gMSkgewoJCQkJCQkJCQkJCQkJCSR4X2RpZmYgPSAoJHNwYWNld2lkdGggKiAkbG5zdHJpbmdbM11bKCRzdHJjb3VudCAtIDIpXSk7CgkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCQlpZiAoJHN0cmNvdW50ID4gMCkgewoJCQkJCQkJCQkJCQkJCSR3X2RpZmYgPSAoJHNwYWNld2lkdGggKiAkbG5zdHJpbmdbMl1bKCRzdHJjb3VudCAtIDEpXSk7CgkJCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJCX0KCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJaWYgKHByZWdfbWF0Y2goJy8oJy4keG1hdGNoZXNbMV0uJylbXHNdKCcuJHhtYXRjaGVzWzJdLicpW1xzXSgnLiR4bWF0Y2hlc1szXS4nKVtcc10oJy4kc3RycGllY2VbMV1bMF0uJylbXHNdKHJlKShbXHNdKikveCcsICRwbWlkLCAkcG1hdGNoKSA9PSAxKSB7CgkJCQkJCQkJCQkJCSRuZXd4ID0gc3ByaW50ZignJUYnLChmbG9hdHZhbCgkcG1hdGNoWzFdKSArICR4X2RpZmYpKTsKCQkJCQkJCQkJCQkJJG5ld3cgPSBzcHJpbnRmKCclRicsKGZsb2F0dmFsKCRwbWF0Y2hbM10pICsgJHdfZGlmZikpOwoJCQkJCQkJCQkJCQkkbmV3cG1pZCA9ICRuZXd4LicgJy4kcG1hdGNoWzJdLicgJy4kbmV3dy4nICcuJHBtYXRjaFs0XS4nIHgqIyEjKngnLiRwbWF0Y2hbNV0uJHBtYXRjaFs2XTsKCQkJCQkJCQkJCQkJJHBtaWQgPSBzdHJfcmVwbGFjZSgkcG1hdGNoWzBdLCAkbmV3cG1pZCwgJHBtaWQpOwoJCQkJCQkJCQkJCQl1bnNldCgkcG1hdGNoLCAkbmV3cG1pZCwgJG5ld3gsICRuZXd3KTsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJYnJlYWs7CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQljYXNlICdjJzogewoJCQkJCQkJCQkJCS8vIGdldCBjdXJyZW50IFggcG9zaXRpb24KCQkJCQkJCQkJCQlwcmVnX21hdGNoKCcvKFswLTlcLlwrXC1dKilbXHNdKFswLTlcLlwrXC1dKilbXHNdKFswLTlcLlwrXC1dKilbXHNdKFswLTlcLlwrXC1dKilbXHNdKFswLTlcLlwrXC1dKilbXHNdKCcuJHN0cnBpZWNlWzFdWzBdLicpW1xzXShjKShbXHNdKikveCcsICRwbWlkLCAkeG1hdGNoZXMpOwoJCQkJCQkJCQkJCWlmICghaXNzZXQoJHhtYXRjaGVzWzFdKSkgewoJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQkJJGN1cnJlbnR4cG9zID0gJHhtYXRjaGVzWzFdOwoJCQkJCQkJCQkJCS8vIGp1c3RpZnkgYmxvY2sKCQkJCQkJCQkJCQlpZiAocHJlZ19tYXRjaCgnLygnLiR4bWF0Y2hlc1sxXS4nKVtcc10oJy4keG1hdGNoZXNbMl0uJylbXHNdKCcuJHhtYXRjaGVzWzNdLicpW1xzXSgnLiR4bWF0Y2hlc1s0XS4nKVtcc10oJy4keG1hdGNoZXNbNV0uJylbXHNdKCcuJHN0cnBpZWNlWzFdWzBdLicpW1xzXShjKShbXHNdKikveCcsICRwbWlkLCAkcG1hdGNoKSA9PSAxKSB7CgkJCQkJCQkJCQkJCSRuZXd4MSA9IHNwcmludGYoJyVGJywoZmxvYXR2YWwoJHBtYXRjaFsxXSkgKyAkc3BhY2V3KSk7CgkJCQkJCQkJCQkJCSRuZXd4MiA9IHNwcmludGYoJyVGJywoZmxvYXR2YWwoJHBtYXRjaFszXSkgKyAkc3BhY2V3KSk7CgkJCQkJCQkJCQkJCSRuZXd4MyA9IHNwcmludGYoJyVGJywoZmxvYXR2YWwoJHBtYXRjaFs1XSkgKyAkc3BhY2V3KSk7CgkJCQkJCQkJCQkJCSRuZXdwbWlkID0gJG5ld3gxLicgJy4kcG1hdGNoWzJdLicgJy4kbmV3eDIuJyAnLiRwbWF0Y2hbNF0uJyAnLiRuZXd4My4nICcuJHBtYXRjaFs2XS4nIHgqIyEjKngnLiRwbWF0Y2hbN10uJHBtYXRjaFs4XTsKCQkJCQkJCQkJCQkJJHBtaWQgPSBzdHJfcmVwbGFjZSgkcG1hdGNoWzBdLCAkbmV3cG1pZCwgJHBtaWQpOwoJCQkJCQkJCQkJCQl1bnNldCgkcG1hdGNoLCAkbmV3cG1pZCwgJG5ld3gxLCAkbmV3eDIsICRuZXd4Myk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJCS8vIHNoaWZ0IHRoZSBhbm5vdGF0aW9ucyBhbmQgbGlua3MKCQkJCQkJCQkJJGN4cG9zID0gKCRjdXJyZW50eHBvcyAvICR0aGlzLT5rKTsKCQkJCQkJCQkJJGxtcG9zID0gKCR0aGlzLT5sTWFyZ2luICsgJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddICsgJHRoaXMtPmZlcHMpOwoJCQkJCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkJCQkJCQlmb3JlYWNoICgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ10gYXMgJHBhayA9PiAkcGFjKSB7CgkJCQkJCQkJCQkJaWYgKCgkcGFjWyd5J10gPj0gJG1pbnN0YXJ0bGluZXkpIEFORCAoKCRwYWNbJ3gnXSAqICR0aGlzLT5rKSA+PSAoJGN1cnJlbnR4cG9zIC0gJHRoaXMtPmZlcHMpKSBBTkQgKCgkcGFjWyd4J10gKiAkdGhpcy0+aykgPD0gKCRjdXJyZW50eHBvcyArICR0aGlzLT5mZXBzKSkpIHsKCQkJCQkJCQkJCQkJaWYgKCRjeHBvcyA+ICRsbXBvcykgewoJCQkJCQkJCQkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydhbm5vdGF0aW9ucyddWyRwYWtdWyd4J10gKz0gKCRzcGFjZXcgLyAkdGhpcy0+ayk7CgkJCQkJCQkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ11bJHBha11bJ3cnXSArPSAoKCRzcGFjZXdpZHRoICogJHBhY1snbnVtc3BhY2VzJ10pIC8gJHRoaXMtPmspOwoJCQkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydhbm5vdGF0aW9ucyddWyRwYWtdWyd3J10gKz0gKCgkc3BhY2V3aWR0aCAqICRwYWNbJ251bXNwYWNlcyddKSAvICR0aGlzLT5rKTsKCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJCQkJCQlmb3JlYWNoICgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0gYXMgJHBhayA9PiAkcGFjKSB7CgkJCQkJCQkJCQkJaWYgKCgkcGFjWyd5J10gPj0gJG1pbnN0YXJ0bGluZXkpIEFORCAoKCRwYWNbJ3gnXSAqICR0aGlzLT5rKSA+PSAoJGN1cnJlbnR4cG9zIC0gJHRoaXMtPmZlcHMpKSBBTkQgKCgkcGFjWyd4J10gKiAkdGhpcy0+aykgPD0gKCRjdXJyZW50eHBvcyArICR0aGlzLT5mZXBzKSkpIHsKCQkJCQkJCQkJCQkJaWYgKCRjeHBvcyA+ICRsbXBvcykgewoJCQkJCQkJCQkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdWyRwYWtdWyd4J10gKz0gKCRzcGFjZXcgLyAkdGhpcy0+ayk7CgkJCQkJCQkJCQkJCQkkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV1bJHBha11bJ3cnXSArPSAoKCRzcGFjZXdpZHRoICogJHBhY1snbnVtc3BhY2VzJ10pIC8gJHRoaXMtPmspOwoJCQkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdWyRwYWtdWyd3J10gKz0gKCgkc3BhY2V3aWR0aCAqICRwYWNbJ251bXNwYWNlcyddKSAvICR0aGlzLT5rKTsKCQkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCQlicmVhazsKCQkJCQkJCQkJCQl9CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0KCQkJCQkJCQl9IC8vIGVuZCBvZiB3aGlsZQoJCQkJCQkJCS8vIHJlbW92ZSBtYXJrZXJzCgkJCQkJCQkJJHBtaWQgPSBzdHJfcmVwbGFjZSgneCojISMqeCcsICcnLCAkcG1pZCk7CgkJCQkJCQkJaWYgKCR0aGlzLT5pc1VuaWNvZGVGb250KCkpIHsKCQkJCQkJCQkJLy8gbXVsdGlieXRlIGNoYXJhY3RlcnMKCQkJCQkJCQkJJHNwYWNldyA9ICRzcGFjZXdpZHRodTsKCQkJCQkJCQkJaWYgKCR0aGlzLT5mb250X3N0cmV0Y2hpbmcgIT0gMTAwKSB7CgkJCQkJCQkJCQkvLyB3b3JkIHNwYWNpbmcgaXMgYWZmZWN0ZWQgYnkgc3RyZXRjaGluZwoJCQkJCQkJCQkJJHNwYWNldyAvPSAoJHRoaXMtPmZvbnRfc3RyZXRjaGluZyAvIDEwMCk7CgkJCQkJCQkJCX0KCQkJCQkJCQkJLy8gZXNjYXBlIHNwZWNpYWwgY2hhcmFjdGVycwoJCQkJCQkJCQkkcG9zID0gMDsKCQkJCQkJCQkJJHBtaWQgPSBwcmVnX3JlcGxhY2UoJy9bXFxcXVtcKF0veCcsICdcXCMhI09QIyEjJywgJHBtaWQpOwoJCQkJCQkJCQkkcG1pZCA9IHByZWdfcmVwbGFjZSgnL1tcXFxdW1wpXS94JywgJ1xcIyEjQ1AjISMnLCAkcG1pZCk7CgkJCQkJCQkJCWlmIChwcmVnX21hdGNoX2FsbCgnL1xbXCgoW15cKV0qKVwpXF0veCcsICRwbWlkLCAkcGFtYXRjaCkgPiAwKSB7CgkJCQkJCQkJCQlmb3JlYWNoKCRwYW1hdGNoWzBdIGFzICRwayA9PiAkcG1hdGNoKSB7CgkJCQkJCQkJCQkJJHJlcGxhY2UgPSAkcGFtYXRjaFsxXVskcGtdOwoJCQkJCQkJCQkJCSRyZXBsYWNlID0gc3RyX3JlcGxhY2UoJyMhI09QIyEjJywgJygnLCAkcmVwbGFjZSk7CgkJCQkJCQkJCQkJJHJlcGxhY2UgPSBzdHJfcmVwbGFjZSgnIyEjQ1AjISMnLCAnKScsICRyZXBsYWNlKTsKCQkJCQkJCQkJCQkkbmV3cG1pZCA9ICdbKCcuc3RyX3JlcGxhY2UoY2hyKDApLmNocigzMiksICcpICcuc3ByaW50ZignJUYnLCAkc3BhY2V3KS4nICgnLCAkcmVwbGFjZSkuJyldJzsKCQkJCQkJCQkJCQkkcG9zID0gc3RycG9zKCRwbWlkLCAkcG1hdGNoLCAkcG9zKTsKCQkJCQkJCQkJCQlpZiAoJHBvcyAhPT0gRkFMU0UpIHsKCQkJCQkJCQkJCQkJJHBtaWQgPSBzdWJzdHJfcmVwbGFjZSgkcG1pZCwgJG5ld3BtaWQsICRwb3MsIHN0cmxlbigkcG1hdGNoKSk7CgkJCQkJCQkJCQkJfQoJCQkJCQkJCQkJCSsrJHBvczsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJCXVuc2V0KCRwYW1hdGNoKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSA9ICRwc3RhcnQuIlxuIi4kcG1pZC4iXG4iLiRwZW5kOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHN0YXJ0bGluZXBhZ2UsICRwc3RhcnQuIlxuIi4kcG1pZC4iXG4iLiRwZW5kKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkZW5kbGluZXBvcyA9IHN0cmxlbigkcHN0YXJ0LiJcbiIuJHBtaWQuIlxuIik7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJLy8gbm9uLXVuaWNvZGUgKHNpbmdsZS1ieXRlIGNoYXJhY3RlcnMpCgkJCQkJCQkJCWlmICgkdGhpcy0+Zm9udF9zdHJldGNoaW5nICE9IDEwMCkgewoJCQkJCQkJCQkJLy8gd29yZCBzcGFjaW5nIChUdykgaXMgYWZmZWN0ZWQgYnkgc3RyZXRjaGluZwoJCQkJCQkJCQkJJHNwYWNld2lkdGggLz0gKCR0aGlzLT5mb250X3N0cmV0Y2hpbmcgLyAxMDApOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRycyA9IHNwcmludGYoJyVGIFR3JywgJHNwYWNld2lkdGgpOwoJCQkJCQkJCQkkcG1pZCA9IHByZWdfcmVwbGFjZSgiL1xbXCgveCIsICRycy4nIFsoJywgJHBtaWQpOwoJCQkJCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSA9ICRwc3RhcnQuIlxuIi4kcG1pZC4iXG5CVCAwIFR3IEVUXG4iLiRwZW5kOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHN0YXJ0bGluZXBhZ2UsICRwc3RhcnQuIlxuIi4kcG1pZC4iXG5CVCAwIFR3IEVUXG4iLiRwZW5kKTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkZW5kbGluZXBvcyA9IHN0cmxlbigkcHN0YXJ0LiJcbiIuJHBtaWQuIlxuQlQgMCBUdyBFVFxuIik7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9IC8vIGVuZCBvZiBKCgkJCQkJfSAvLyBlbmQgaWYgJHN0YXJ0bGluZXgKCQkJCQlpZiAoKCR0X3ggIT0gMCkgT1IgKCR5c2hpZnQgPCAwKSkgewoJCQkJCQkvLyBzaGlmdCB0aGUgbGluZQoJCQkJCQkkdHJ4ID0gc3ByaW50ZignMSAwIDAgMSAlRiAlRiBjbScsICgkdF94ICogJHRoaXMtPmspLCAoJHlzaGlmdCAqICR0aGlzLT5rKSk7CgkJCQkJCSRwc3RhcnQgLj0gIlxucVxuIi4kdHJ4LiJcbiIuJHBtaWQuIlxuUVxuIjsKCQkJCQkJJGVuZGxpbmVwb3MgPSBzdHJsZW4oJHBzdGFydCk7CgkJCQkJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCQkJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJCQkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddID0gJHBzdGFydC4kcGVuZDsKCQkJCQkJCWZvcmVhY2ggKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnYW5ub3RhdGlvbnMnXSBhcyAkcGFrID0+ICRwYWMpIHsKCQkJCQkJCQlpZiAoJHBhayA+PSAkcGFzaykgewoJCQkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ11bJHBha11bJ3gnXSArPSAkdF94OwoJCQkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ11bJHBha11bJ3knXSAtPSAkeXNoaWZ0OwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlLCAkcHN0YXJ0LiRwZW5kKTsKCQkJCQkJCS8vIHNoaWZ0IHRoZSBhbm5vdGF0aW9ucyBhbmQgbGlua3MKCQkJCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJCQkJZm9yZWFjaCAoJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdIGFzICRwYWsgPT4gJHBhYykgewoJCQkJCQkJCQlpZiAoJHBhayA+PSAkcGFzaykgewoJCQkJCQkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdWyRwYWtdWyd4J10gKz0gJHRfeDsKCQkJCQkJCQkJCSR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXVskcGFrXVsneSddIC09ICR5c2hpZnQ7CgkJCQkJCQkJCX0KCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJHRoaXMtPnkgLT0gJHlzaGlmdDsKCQkJCQl9CgkJCQl9CgkJCQkkcGJyayA9ICR0aGlzLT5jaGVja1BhZ2VCcmVhaygkdGhpcy0+bGFzdGgpOwoJCQkJJHRoaXMtPm5ld2xpbmUgPSBmYWxzZTsKCQkJCSRzdGFydGxpbmV4ID0gJHRoaXMtPng7CgkJCQkkc3RhcnRsaW5leSA9ICR0aGlzLT55OwoJCQkJaWYgKCRkb21bJGRvbVska2V5XVsncGFyZW50J11dWyd2YWx1ZSddID09ICdzdXAnKSB7CgkJCQkJJHN0YXJ0bGluZXkgLT0gKCgwLjMgKiAkdGhpcy0+Rm9udFNpemVQdCkgLyAkdGhpcy0+ayk7CgkJCQl9IGVsc2VpZiAoJGRvbVskZG9tWyRrZXldWydwYXJlbnQnXV1bJ3ZhbHVlJ10gPT0gJ3N1YicpIHsKCQkJCQkkc3RhcnRsaW5leSAtPSAoKCR0aGlzLT5Gb250U2l6ZVB0IC8gMC43KSAvICR0aGlzLT5rKTsKCQkJCX0gZWxzZSB7CgkJCQkJJG1pbnN0YXJ0bGluZXkgPSAkc3RhcnRsaW5leTsKCQkJCQkkbWF4Ym90dG9tbGluZXkgPSAoJHRoaXMtPnkgKyAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkZm9udHNpemUgLyAkdGhpcy0+aykpOwoJCQkJfQoJCQkJJHN0YXJ0bGluZXBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCWlmIChpc3NldCgkZW5kbGluZXBvcykgQU5EICghJHBicmspKSB7CgkJCQkJJHN0YXJ0bGluZXBvcyA9ICRlbmRsaW5lcG9zOwoJCQkJfSBlbHNlIHsKCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJCQkJJHN0YXJ0bGluZXBvcyA9IHN0cmxlbigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSk7CgkJCQkJfSBlbHNlaWYgKCEkdGhpcy0+SW5Gb290ZXIpIHsKCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdKSkgewoJCQkJCQkJJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV0gLSAkdGhpcy0+Zm9vdGVybGVuWyR0aGlzLT5wYWdlXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPnBhZ2VdID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJCQkJCQl9CgkJCQkJCSRzdGFydGxpbmVwb3MgPSAkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkc3RhcnRsaW5lcG9zID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJCQkJCX0KCQkJCX0KCQkJCXVuc2V0KCRlbmRsaW5lcG9zKTsKCQkJCSRwbGFsaWduID0gJGxhbGlnbjsKCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJJHBhc2sgPSBjb3VudCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pOwoJCQkJfSBlbHNlIHsKCQkJCQkkcGFzayA9IDA7CgkJCQl9CgkJCQlpZiAoISgkZG9tWyRrZXldWyd0YWcnXSBBTkQgISRkb21bJGtleV1bJ29wZW5pbmcnXSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RhYmxlJykKCQkJCQlBTkQgKGlzc2V0KCR0aGlzLT5lbXB0eXBhZ2VtcmtbJHRoaXMtPnBhZ2VdKSkKCQkJCQlBTkQgKCR0aGlzLT5lbXB0eXBhZ2VtcmtbJHRoaXMtPnBhZ2VdID09ICR0aGlzLT5wYWdlbGVuWyR0aGlzLT5wYWdlXSkpKSB7CgkJCQkJJHRoaXMtPlNldEZvbnQoJGZvbnRuYW1lLCAkZm9udHN0eWxlLCAkZm9udHNpemUpOwoJCQkJCWlmICgkd2ZpbGwpIHsKCQkJCQkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCR0aGlzLT5iZ2NvbG9yKTsKCQkJCQl9CgkJCQl9CgkJCX0gLy8gZW5kIG5ld2xpbmUKCQkJaWYgKGlzc2V0KCRvcGVudGFncG9zKSkgewoJCQkJdW5zZXQoJG9wZW50YWdwb3MpOwoJCQl9CgkJCWlmICgkZG9tWyRrZXldWyd0YWcnXSkgewoJCQkJaWYgKCRkb21bJGtleV1bJ29wZW5pbmcnXSkgewoJCQkJCS8vIGdldCB0ZXh0IGluZGVudGF0aW9uIChpZiBhbnkpCgkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3RleHQtaW5kZW50J10pIEFORCAkZG9tWyRrZXldWydibG9jayddKSB7CgkJCQkJCSR0aGlzLT50ZXh0aW5kZW50ID0gJGRvbVska2V5XVsndGV4dC1pbmRlbnQnXTsKCQkJCQkJJHRoaXMtPm5ld2xpbmUgPSB0cnVlOwoJCQkJCX0KCQkJCQkvLyB0YWJsZQoJCQkJCWlmICgoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndGFibGUnKSBBTkQgaXNzZXQoJGRvbVska2V5XVsnY29scyddKSBBTkQgKCRkb21bJGtleV1bJ2NvbHMnXSA+IDApKSB7CgkJCQkJCS8vIGF2YWlsYWJsZSBwYWdlIHdpZHRoCgkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkkd3RtcCA9ICR0aGlzLT54IC0gJHRoaXMtPmxNYXJnaW47CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkd3RtcCA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+eDsKCQkJCQkJfQoJCQkJCQkvLyBnZXQgY2VsbCBzcGFjaW5nCgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSkpIHsKCQkJCQkJCSRjbHNwID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZG9tWyRrZXldWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSwgMSwgJ3B4Jyk7CgkJCQkJCQkkY2VsbHNwYWNpbmcgPSBhcnJheSgnSCcgPT4gJGNsc3AsICdWJyA9PiAkY2xzcCk7CgkJCQkJCX0gZWxzZWlmIChpc3NldCgkZG9tWyRrZXldWydib3JkZXItc3BhY2luZyddKSkgewoJCQkJCQkJJGNlbGxzcGFjaW5nID0gJGRvbVska2V5XVsnYm9yZGVyLXNwYWNpbmcnXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjZWxsc3BhY2luZyA9IGFycmF5KCdIJyA9PiAwLCAnVicgPT4gMCk7CgkJCQkJCX0KCQkJCQkJLy8gdGFibGUgd2lkdGgKCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ3dpZHRoJ10pKSB7CgkJCQkJCQkkdGFibGVfd2lkdGggPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bJGtleV1bJ3dpZHRoJ10sICR3dG1wLCAncHgnKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0YWJsZV93aWR0aCA9ICR3dG1wOwoJCQkJCQl9CgkJCQkJCSR0YWJsZV93aWR0aCAtPSAoMiAqICRjZWxsc3BhY2luZ1snSCddKTsKCQkJCQkJaWYgKCEkdGhpcy0+aW50aGVhZCkgewoJCQkJCQkJJHRoaXMtPnkgKz0gJGNlbGxzcGFjaW5nWydWJ107CgkJCQkJCX0KCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCSRjZWxsc3BhY2luZ3ggPSAtJGNlbGxzcGFjaW5nWydIJ107CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkY2VsbHNwYWNpbmd4ID0gJGNlbGxzcGFjaW5nWydIJ107CgkJCQkJCX0KCQkJCQkJLy8gdG90YWwgdGFibGUgd2lkdGggd2l0aG91dCBjZWxsc3BhY2VzCgkJCQkJCSR0YWJsZV9jb2x1bW5zX3dpZHRoID0gKCR0YWJsZV93aWR0aCAtICgkY2VsbHNwYWNpbmdbJ0gnXSAqICgkZG9tWyRrZXldWydjb2xzJ10gLSAxKSkpOwoJCQkJCQkvLyBtaW5pbXVtIGNvbHVtbiB3aWR0aAoJCQkJCQkkdGFibGVfbWluX2NvbHVtbl93aWR0aCA9ICgkdGFibGVfY29sdW1uc193aWR0aCAvICRkb21bJGtleV1bJ2NvbHMnXSk7CgkJCQkJCS8vIGFycmF5IG9mIGN1c3RvbSBjb2x1bW4gd2lkdGhzCgkJCQkJCSR0YWJsZV9jb2x3aWR0aHMgPSBhcnJheV9maWxsKDAsICRkb21bJGtleV1bJ2NvbHMnXSwgJHRhYmxlX21pbl9jb2x1bW5fd2lkdGgpOwoJCQkJCX0KCQkJCQkvLyB0YWJsZSByb3cKCQkJCQlpZiAoJGRvbVska2V5XVsndmFsdWUnXSA9PSAndHInKSB7CgkJCQkJCS8vIHJlc2V0IGNvbHVtbiBjb3VudGVyCgkJCQkJCSRjb2xpZCA9IDA7CgkJCQkJfQoJCQkJCS8vIHRhYmxlIGNlbGwKCQkJCQlpZiAoKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RkJykgT1IgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJ3RoJykpIHsKCQkJCQkJJHRyaWQgPSAkZG9tWyRrZXldWydwYXJlbnQnXTsKCQkJCQkJJHRhYmxlX2VsID0gJGRvbVskdHJpZF1bJ3BhcmVudCddOwoJCQkJCQlpZiAoIWlzc2V0KCRkb21bJHRhYmxlX2VsXVsnY29scyddKSkgewoJCQkJCQkJJGRvbVskdGFibGVfZWxdWydjb2xzJ10gPSAkZG9tWyR0cmlkXVsnY29scyddOwoJCQkJCQl9CgkJCQkJCS8vIHN0b3JlIGJvcmRlciBpbmZvCgkJCQkJCSR0ZGJvcmRlciA9IDA7CgkJCQkJCWlmIChpc3NldCgkZG9tWyRrZXldWydib3JkZXInXSkgQU5EICFlbXB0eSgkZG9tWyRrZXldWydib3JkZXInXSkpIHsKCQkJCQkJCSR0ZGJvcmRlciA9ICRkb21bJGtleV1bJ2JvcmRlciddOwoJCQkJCQl9CgkJCQkJCSRjb2xzcGFuID0gaW50dmFsKCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydjb2xzcGFuJ10pOwoJCQkJCQlpZiAoJGNvbHNwYW4gPD0gMCkgewoJCQkJCQkJJGNvbHNwYW4gPSAxOwoJCQkJCQl9CgkJCQkJCSRvbGRfY2VsbF9wYWRkaW5nID0gJHRoaXMtPmNlbGxfcGFkZGluZzsKCQkJCQkJaWYgKGlzc2V0KCRkb21bKCRkb21bJHRyaWRdWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsnY2VsbHBhZGRpbmcnXSkpIHsKCQkJCQkJCSRjcmNscGQgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bKCRkb21bJHRyaWRdWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsnY2VsbHBhZGRpbmcnXSwgMSwgJ3B4Jyk7CgkJCQkJCQkkY3VycmVudF9jZWxsX3BhZGRpbmcgPSBhcnJheSgnTCcgPT4gJGNyY2xwZCwgJ1QnID0+ICRjcmNscGQsICdSJyA9PiAkY3JjbHBkLCAnQicgPT4gJGNyY2xwZCk7CgkJCQkJCX0gZWxzZWlmIChpc3NldCgkZG9tWygkZG9tWyR0cmlkXVsncGFyZW50J10pXVsncGFkZGluZyddKSkgewoJCQkJCQkJJGN1cnJlbnRfY2VsbF9wYWRkaW5nID0gJGRvbVsoJGRvbVskdHJpZF1bJ3BhcmVudCddKV1bJ3BhZGRpbmcnXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjdXJyZW50X2NlbGxfcGFkZGluZyA9IGFycmF5KCdMJyA9PiAwLCAnVCcgPT4gMCwgJ1InID0+IDAsICdCJyA9PiAwKTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJGN1cnJlbnRfY2VsbF9wYWRkaW5nOwoJCQkJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsnaGVpZ2h0J10pKSB7CgkJCQkJCQkvLyBtaW5pbXVtIGNlbGwgaGVpZ2h0CgkJCQkJCQkkY2VsbGggPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRkb21bJGtleV1bJ2hlaWdodCddLCAwLCAncHgnKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjZWxsaCA9IDA7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRkb21bJGtleV1bJ2NvbnRlbnQnXSkpIHsKCQkJCQkJCSRjZWxsX2NvbnRlbnQgPSBzdHJpcHNsYXNoZXMoJGRvbVska2V5XVsnY29udGVudCddKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjZWxsX2NvbnRlbnQgPSAnJm5ic3A7JzsKCQkJCQkJfQoJCQkJCQkkdGFndHlwZSA9ICRkb21bJGtleV1bJ3ZhbHVlJ107CgkJCQkJCSRwYXJlbnRpZCA9ICRrZXk7CgkJCQkJCXdoaWxlICgoJGtleSA8ICRtYXhlbCkgQU5EICghKCgkZG9tWyRrZXldWyd0YWcnXSkgQU5EICghJGRvbVska2V5XVsnb3BlbmluZyddKSBBTkQgKCRkb21bJGtleV1bJ3ZhbHVlJ10gPT0gJHRhZ3R5cGUpIEFORCAoJGRvbVska2V5XVsncGFyZW50J10gPT0gJHBhcmVudGlkKSkpKSB7CgkJCQkJCQkvLyBtb3ZlICRrZXkgaW5kZXggZm9yd2FyZAoJCQkJCQkJKyska2V5OwoJCQkJCQl9CgkJCQkJCWlmICghaXNzZXQoJGRvbVskdHJpZF1bJ3N0YXJ0cGFnZSddKSkgewoJCQkJCQkJJGRvbVskdHJpZF1bJ3N0YXJ0cGFnZSddID0gJHRoaXMtPnBhZ2U7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdGhpcy0+c2V0UGFnZSgkZG9tWyR0cmlkXVsnc3RhcnRwYWdlJ10pOwoJCQkJCQl9CgkJCQkJCWlmICghaXNzZXQoJGRvbVskdHJpZF1bJ3N0YXJ0Y29sdW1uJ10pKSB7CgkJCQkJCQkkZG9tWyR0cmlkXVsnc3RhcnRjb2x1bW4nXSA9ICR0aGlzLT5jdXJyZW50X2NvbHVtbjsKCQkJCQkJfSBlbHNlaWYgKCR0aGlzLT5jdXJyZW50X2NvbHVtbiAhPSAkZG9tWyR0cmlkXVsnc3RhcnRjb2x1bW4nXSkgewoJCQkJCQkJJHRtcHggPSAkdGhpcy0+eDsKCQkJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGRvbVskdHJpZF1bJ3N0YXJ0Y29sdW1uJ10pOwoJCQkJCQkJJHRoaXMtPnggPSAkdG1weDsKCQkJCQkJfQoJCQkJCQlpZiAoIWlzc2V0KCRkb21bJHRyaWRdWydzdGFydHknXSkpIHsKCQkJCQkJCSRkb21bJHRyaWRdWydzdGFydHknXSA9ICR0aGlzLT55OwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRoaXMtPnkgPSAkZG9tWyR0cmlkXVsnc3RhcnR5J107CgkJCQkJCX0KCQkJCQkJaWYgKCFpc3NldCgkZG9tWyR0cmlkXVsnc3RhcnR4J10pKSB7CgkJCQkJCQkkZG9tWyR0cmlkXVsnc3RhcnR4J10gPSAkdGhpcy0+eDsKCQkJCQkJCSR0aGlzLT54ICs9ICRjZWxsc3BhY2luZ3g7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdGhpcy0+eCArPSAoJGNlbGxzcGFjaW5neCAvIDIpOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkZG9tWyRwYXJlbnRpZF1bJ2F0dHJpYnV0ZSddWydyb3dzcGFuJ10pKSB7CgkJCQkJCQkkcm93c3BhbiA9IGludHZhbCgkZG9tWyRwYXJlbnRpZF1bJ2F0dHJpYnV0ZSddWydyb3dzcGFuJ10pOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHJvd3NwYW4gPSAxOwoJCQkJCQl9CgkJCQkJCS8vIHNraXAgcm93LXNwYW5uZWQgY2VsbHMgc3RhcnRlZCBvbiB0aGUgcHJldmlvdXMgcm93cwoJCQkJCQlpZiAoaXNzZXQoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddKSkgewoJCQkJCQkJJHJzayA9IDA7CgkJCQkJCQkkcnNrbWF4ID0gY291bnQoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddKTsKCQkJCQkJCXdoaWxlICgkcnNrIDwgJHJza21heCkgewoJCQkJCQkJCSR0cndzcCA9ICRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVskcnNrXTsKCQkJCQkJCQkkcnNzdGFydHggPSAkdHJ3c3BbJ3N0YXJ0eCddOwoJCQkJCQkJCSRyc2VuZHggPSAkdHJ3c3BbJ2VuZHgnXTsKCQkJCQkJCQkvLyBhY2NvdW50IGZvciBtYXJnaW4gY2hhbmdlcwoJCQkJCQkJCWlmICgkdHJ3c3BbJ3N0YXJ0cGFnZSddIDwgJHRoaXMtPnBhZ2UpIHsKCQkJCQkJCQkJaWYgKCgkdGhpcy0+cnRsKSBBTkQgKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ10gIT0gJHRoaXMtPnBhZ2VkaW1bJHRyd3NwWydzdGFydHBhZ2UnXV1bJ29ybSddKSkgewoJCQkJCQkJCQkJJGRsID0gKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb3JtJ10gLSAkdGhpcy0+cGFnZWRpbVskdHJ3c3BbJ3N0YXJ0cGFnZSddXVsnb3JtJ10pOwoJCQkJCQkJCQkJJHJzc3RhcnR4IC09ICRkbDsKCQkJCQkJCQkJCSRyc2VuZHggLT0gJGRsOwoJCQkJCQkJCQl9IGVsc2VpZiAoKCEkdGhpcy0+cnRsKSBBTkQgKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ10gIT0gJHRoaXMtPnBhZ2VkaW1bJHRyd3NwWydzdGFydHBhZ2UnXV1bJ29sbSddKSkgewoJCQkJCQkJCQkJJGRsID0gKCR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ10gLSAkdGhpcy0+cGFnZWRpbVskdHJ3c3BbJ3N0YXJ0cGFnZSddXVsnb2xtJ10pOwoJCQkJCQkJCQkJJHJzc3RhcnR4ICs9ICRkbDsKCQkJCQkJCQkJCSRyc2VuZHggKz0gJGRsOwoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJCWlmICgoJHRyd3NwWydyb3dzcGFuJ10gPiAwKQoJCQkJCQkJCQlBTkQgKCRyc3N0YXJ0eCA+ICgkdGhpcy0+eCAtICRjZWxsc3BhY2luZ1snSCddIC0gJGN1cnJlbnRfY2VsbF9wYWRkaW5nWydMJ10gLSAkdGhpcy0+ZmVwcykpCgkJCQkJCQkJCUFORCAoJHJzc3RhcnR4IDwgKCR0aGlzLT54ICsgJGNlbGxzcGFjaW5nWydIJ10gKyAkY3VycmVudF9jZWxsX3BhZGRpbmdbJ1InXSArICR0aGlzLT5mZXBzKSkKCQkJCQkJCQkJQU5EICgoJHRyd3NwWydzdGFydHknXSA8ICgkdGhpcy0+eSAtICR0aGlzLT5mZXBzKSkgT1IgKCR0cndzcFsnc3RhcnRwYWdlJ10gPCAkdGhpcy0+cGFnZSkgT1IgKCR0cndzcFsnc3RhcnRjb2x1bW4nXSA8ICR0aGlzLT5jdXJyZW50X2NvbHVtbikpKSB7CgkJCQkJCQkJCS8vIHNldCB0aGUgc3RhcnRpbmcgWCBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCBjZWxsCgkJCQkJCQkJCSR0aGlzLT54ID0gJHJzZW5keCArICRjZWxsc3BhY2luZ3g7CgkJCQkJCQkJCS8vIGluY3JlbWVudCBjb2x1bW4gaW5kaWNhdG9yCgkJCQkJCQkJCSRjb2xpZCArPSAkdHJ3c3BbJ2NvbHNwYW4nXTsKCQkJCQkJCQkJaWYgKCgkdHJ3c3BbJ3Jvd3NwYW4nXSA9PSAxKQoJCQkJCQkJCQkJQU5EIChpc3NldCgkZG9tWyR0cmlkXVsnZW5keSddKSkKCQkJCQkJCQkJCUFORCAoaXNzZXQoJGRvbVskdHJpZF1bJ2VuZHBhZ2UnXSkpCgkJCQkJCQkJCQlBTkQgKGlzc2V0KCRkb21bJHRyaWRdWydlbmRjb2x1bW4nXSkpCgkJCQkJCQkJCQlBTkQgKCR0cndzcFsnZW5kcGFnZSddID09ICRkb21bJHRyaWRdWydlbmRwYWdlJ10pCgkJCQkJCQkJCQlBTkQgKCR0cndzcFsnZW5kY29sdW1uJ10gPT0gJGRvbVskdHJpZF1bJ2VuZGNvbHVtbiddKSkgewoJCQkJCQkJCQkJLy8gc2V0IGVuZGluZyBZIHBvc2l0aW9uIGZvciByb3cKCQkJCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVskcnNrXVsnZW5keSddID0gbWF4KCRkb21bJHRyaWRdWydlbmR5J10sICR0cndzcFsnZW5keSddKTsKCQkJCQkJCQkJCSRkb21bJHRyaWRdWydlbmR5J10gPSAkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJHJza11bJ2VuZHknXTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkcnNrID0gMDsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkrKyRyc2s7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkZG9tWyRwYXJlbnRpZF1bJ3dpZHRoJ10pKSB7CgkJCQkJCQkvLyB1c2VyIHNwZWNpZmllZCB3aWR0aAoJCQkJCQkJJGNlbGx3ID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZG9tWyRwYXJlbnRpZF1bJ3dpZHRoJ10sICR0YWJsZV9jb2x1bW5zX3dpZHRoLCAncHgnKTsKCQkJCQkJCSR0bXBjdyA9ICgkY2VsbHcgLyAkY29sc3Bhbik7CgkJCQkJCQlmb3IgKCRpID0gMDsgJGkgPCAkY29sc3BhbjsgKyskaSkgewoJCQkJCQkJCSR0YWJsZV9jb2x3aWR0aHNbKCRjb2xpZCArICRpKV0gPSAkdG1wY3c7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkvLyBpbmhlcml0IGNvbHVtbiB3aWR0aAoJCQkJCQkJJGNlbGx3ID0gMDsKCQkJCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRjb2xzcGFuOyArKyRpKSB7CgkJCQkJCQkJJGNlbGx3ICs9ICR0YWJsZV9jb2x3aWR0aHNbKCRjb2xpZCArICRpKV07CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQkJJGNlbGx3ICs9ICgoJGNvbHNwYW4gLSAxKSAqICRjZWxsc3BhY2luZ1snSCddKTsKCQkJCQkJLy8gaW5jcmVtZW50IGNvbHVtbiBpbmRpY2F0b3IKCQkJCQkJJGNvbGlkICs9ICRjb2xzcGFuOwoJCQkJCQkvLyBhZGQgcm93c3BhbiBpbmZvcm1hdGlvbiB0byB0YWJsZSBlbGVtZW50CgkJCQkJCWlmICgkcm93c3BhbiA+IDEpIHsKCQkJCQkJCSR0cnNpZCA9IGFycmF5X3B1c2goJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddLCBhcnJheSgndHJpZCcgPT4gJHRyaWQsICdyb3dzcGFuJyA9PiAkcm93c3BhbiwgJ21yb3dzcGFuJyA9PiAkcm93c3BhbiwgJ2NvbHNwYW4nID0+ICRjb2xzcGFuLCAnc3RhcnRwYWdlJyA9PiAkdGhpcy0+cGFnZSwgJ3N0YXJ0Y29sdW1uJyA9PiAkdGhpcy0+Y3VycmVudF9jb2x1bW4sICdzdGFydHgnID0+ICR0aGlzLT54LCAnc3RhcnR5JyA9PiAkdGhpcy0+eSkpOwoJCQkJCQl9CgkJCQkJCSRjZWxsaWQgPSBhcnJheV9wdXNoKCRkb21bJHRyaWRdWydjZWxscG9zJ10sIGFycmF5KCdzdGFydHgnID0+ICR0aGlzLT54KSk7CgkJCQkJCWlmICgkcm93c3BhbiA+IDEpIHsKCQkJCQkJCSRkb21bJHRyaWRdWydjZWxscG9zJ11bKCRjZWxsaWQgLSAxKV1bJ3Jvd3NwYW5pZCddID0gKCR0cnNpZCAtIDEpOwoJCQkJCQl9CgkJCQkJCS8vIHB1c2ggYmFja2dyb3VuZCBjb2xvcnMKCQkJCQkJaWYgKGlzc2V0KCRkb21bJHBhcmVudGlkXVsnYmdjb2xvciddKSBBTkQgKCRkb21bJHBhcmVudGlkXVsnYmdjb2xvciddICE9PSBmYWxzZSkpIHsKCQkJCQkJCSRkb21bJHRyaWRdWydjZWxscG9zJ11bKCRjZWxsaWQgLSAxKV1bJ2JnY29sb3InXSA9ICRkb21bJHBhcmVudGlkXVsnYmdjb2xvciddOwoJCQkJCQl9CgkJCQkJCS8vIHN0b3JlIGJvcmRlciBpbmZvCgkJCQkJCWlmIChpc3NldCgkdGRib3JkZXIpIEFORCAhZW1wdHkoJHRkYm9yZGVyKSkgewoJCQkJCQkJJGRvbVskdHJpZF1bJ2NlbGxwb3MnXVsoJGNlbGxpZCAtIDEpXVsnYm9yZGVyJ10gPSAkdGRib3JkZXI7CgkJCQkJCX0KCQkJCQkJJHByZXZMYXN0SCA9ICR0aGlzLT5sYXN0aDsKCQkJCQkJLy8gc3RvcmUgc29tZSBpbmZvIGZvciBtdWx0aWNvbHVtbiBtb2RlCgkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkkdGhpcy0+Y29seHNoaWZ0Wyd4J10gPSAkdGhpcy0+dyAtICR0aGlzLT54IC0gJHRoaXMtPnJNYXJnaW47CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdGhpcy0+Y29seHNoaWZ0Wyd4J10gPSAkdGhpcy0+eCAtICR0aGlzLT5sTWFyZ2luOwoJCQkJCQl9CgkJCQkJCSR0aGlzLT5jb2x4c2hpZnRbJ3MnXSA9ICRjZWxsc3BhY2luZzsKCQkJCQkJJHRoaXMtPmNvbHhzaGlmdFsncCddID0gJGN1cnJlbnRfY2VsbF9wYWRkaW5nOwoJCQkJCQkvLyAqKioqKiogd3JpdGUgdGhlIGNlbGwgY29udGVudCAqKioqKioKCQkJCQkJJHRoaXMtPk11bHRpQ2VsbCgkY2VsbHcsICRjZWxsaCwgJGNlbGxfY29udGVudCwgZmFsc2UsICRsYWxpZ24sIGZhbHNlLCAyLCAnJywgJycsIHRydWUsIDAsIHRydWUsIHRydWUsIDAsICdUJywgZmFsc2UpOwoJCQkJCQkvLyByZXN0b3JlIHNvbWUgdmFsdWVzCgkJCQkJCSR0aGlzLT5jb2x4c2hpZnQgPSBhcnJheSgneCcgPT4gMCwgJ3MnID0+IGFycmF5KCdIJyA9PiAwLCAnVicgPT4gMCksICdwJyA9PiBhcnJheSgnTCcgPT4gMCwgJ1QnID0+IDAsICdSJyA9PiAwLCAnQicgPT4gMCkpOwoJCQkJCQkkdGhpcy0+bGFzdGggPSAkcHJldkxhc3RIOwoJCQkJCQkkdGhpcy0+Y2VsbF9wYWRkaW5nID0gJG9sZF9jZWxsX3BhZGRpbmc7CgkJCQkJCSRkb21bJHRyaWRdWydjZWxscG9zJ11bKCRjZWxsaWQgLSAxKV1bJ2VuZHgnXSA9ICR0aGlzLT54OwoJCQkJCQkvLyB1cGRhdGUgdGhlIGVuZCBvZiByb3cgcG9zaXRpb24KCQkJCQkJaWYgKCRyb3dzcGFuIDw9IDEpIHsKCQkJCQkJCWlmIChpc3NldCgkZG9tWyR0cmlkXVsnZW5keSddKSkgewoJCQkJCQkJCWlmICgoJHRoaXMtPnBhZ2UgPT0gJGRvbVskdHJpZF1bJ2VuZHBhZ2UnXSkgQU5EICgkdGhpcy0+Y3VycmVudF9jb2x1bW4gPT0gJGRvbVskdHJpZF1bJ2VuZGNvbHVtbiddKSkgewoJCQkJCQkJCQkkZG9tWyR0cmlkXVsnZW5keSddID0gbWF4KCR0aGlzLT55LCAkZG9tWyR0cmlkXVsnZW5keSddKTsKCQkJCQkJCQl9IGVsc2VpZiAoKCR0aGlzLT5wYWdlID4gJGRvbVskdHJpZF1bJ2VuZHBhZ2UnXSkgT1IgKCR0aGlzLT5jdXJyZW50X2NvbHVtbiA+ICRkb21bJHRyaWRdWydlbmRjb2x1bW4nXSkpIHsKCQkJCQkJCQkJJGRvbVskdHJpZF1bJ2VuZHknXSA9ICR0aGlzLT55OwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJGRvbVskdHJpZF1bJ2VuZHknXSA9ICR0aGlzLT55OwoJCQkJCQkJfQoJCQkJCQkJaWYgKGlzc2V0KCRkb21bJHRyaWRdWydlbmRwYWdlJ10pKSB7CgkJCQkJCQkJJGRvbVskdHJpZF1bJ2VuZHBhZ2UnXSA9IG1heCgkdGhpcy0+cGFnZSwgJGRvbVskdHJpZF1bJ2VuZHBhZ2UnXSk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRkb21bJHRyaWRdWydlbmRwYWdlJ10gPSAkdGhpcy0+cGFnZTsKCQkJCQkJCX0KCQkJCQkJCWlmIChpc3NldCgkZG9tWyR0cmlkXVsnZW5kY29sdW1uJ10pKSB7CgkJCQkJCQkJJGRvbVskdHJpZF1bJ2VuZGNvbHVtbiddID0gbWF4KCR0aGlzLT5jdXJyZW50X2NvbHVtbiwgJGRvbVskdHJpZF1bJ2VuZGNvbHVtbiddKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJGRvbVskdHJpZF1bJ2VuZGNvbHVtbiddID0gJHRoaXMtPmN1cnJlbnRfY29sdW1uOwoJCQkJCQkJfQoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8gYWNjb3VudCBmb3Igcm93LXNwYW5uZWQgY2VsbHMKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVsoJHRyc2lkIC0gMSldWydlbmR4J10gPSAkdGhpcy0+eDsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVsoJHRyc2lkIC0gMSldWydlbmR5J10gPSAkdGhpcy0+eTsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVsoJHRyc2lkIC0gMSldWydlbmRwYWdlJ10gPSAkdGhpcy0+cGFnZTsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVsoJHRyc2lkIC0gMSldWydlbmRjb2x1bW4nXSA9ICR0aGlzLT5jdXJyZW50X2NvbHVtbjsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddKSkgewoJCQkJCQkJLy8gdXBkYXRlIGVuZHkgYW5kIGVuZHBhZ2Ugb24gcm93c3Bhbm5lZCBjZWxscwoJCQkJCQkJZm9yZWFjaCAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddIGFzICRrID0+ICR0cndzcCkgewoJCQkJCQkJCWlmICgkdHJ3c3BbJ3Jvd3NwYW4nXSA+IDApIHsKCQkJCQkJCQkJaWYgKGlzc2V0KCRkb21bJHRyaWRdWydlbmRwYWdlJ10pKSB7CgkJCQkJCQkJCQlpZiAoKCR0cndzcFsnZW5kcGFnZSddID09ICRkb21bJHRyaWRdWydlbmRwYWdlJ10pIEFORCAoJHRyd3NwWydlbmRjb2x1bW4nXSA9PSAkZG9tWyR0cmlkXVsnZW5kY29sdW1uJ10pKSB7CgkJCQkJCQkJCQkJJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5keSddID0gbWF4KCRkb21bJHRyaWRdWydlbmR5J10sICR0cndzcFsnZW5keSddKTsKCQkJCQkJCQkJCX0gZWxzZWlmICgoJHRyd3NwWydlbmRwYWdlJ10gPCAkZG9tWyR0cmlkXVsnZW5kcGFnZSddKSBPUiAoJHRyd3NwWydlbmRjb2x1bW4nXSA8ICRkb21bJHRyaWRdWydlbmRjb2x1bW4nXSkpIHsKCQkJCQkJCQkJCQkkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmR5J10gPSAkZG9tWyR0cmlkXVsnZW5keSddOwoJCQkJCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHBhZ2UnXSA9ICRkb21bJHRyaWRdWydlbmRwYWdlJ107CgkJCQkJCQkJCQkJJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kY29sdW1uJ10gPSAkZG9tWyR0cmlkXVsnZW5kY29sdW1uJ107CgkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCSRkb21bJHRyaWRdWydlbmR5J10gPSAkdGhpcy0+cGFnZWRpbVskZG9tWyR0cmlkXVsnZW5kcGFnZSddXVsnaGsnXSAtICR0aGlzLT5wYWdlZGltWyRkb21bJHRyaWRdWydlbmRwYWdlJ11dWydibSddOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSR0aGlzLT54ICs9ICgkY2VsbHNwYWNpbmd4IC8gMik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gb3BlbmluZyB0YWcgKG9yIHNlbGYtY2xvc2luZyB0YWcpCgkJCQkJCWlmICghaXNzZXQoJG9wZW50YWdwb3MpKSB7CgkJCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkJCQkJCSRvcGVudGFncG9zID0gc3RybGVuKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddKTsKCQkJCQkJCX0gZWxzZWlmICghJHRoaXMtPkluRm9vdGVyKSB7CgkJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdKSkgewoJCQkJCQkJCQkkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5wYWdlbGVuWyR0aGlzLT5wYWdlXSAtICR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPnBhZ2VdOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPnBhZ2VdID0gJHRoaXMtPnBhZ2VsZW5bJHRoaXMtPnBhZ2VdOwoJCQkJCQkJCX0KCQkJCQkJCQkkb3BlbnRhZ3BvcyA9ICR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPnBhZ2VdOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSRkb20gPSAkdGhpcy0+b3BlbkhUTUxUYWdIYW5kbGVyKCRkb20sICRrZXksICRjZWxsKTsKCQkJCQl9CgkJCQl9IGVsc2UgeyAvLyBjbG9zaW5nIHRhZwoJCQkJCSRwcmV2X251bXBhZ2VzID0gJHRoaXMtPm51bXBhZ2VzOwoJCQkJCSRvbGRfYm9yZGVybXJrID0gJHRoaXMtPmJvcmRlcm1ya1skdGhpcy0+cGFnZV07CgkJCQkJJGRvbSA9ICR0aGlzLT5jbG9zZUhUTUxUYWdIYW5kbGVyKCRkb20sICRrZXksICRjZWxsLCAkbWF4Ym90dG9tbGluZXkpOwoJCQkJCWlmICgkdGhpcy0+Ym9yZGVybXJrWyR0aGlzLT5wYWdlXSA+ICRvbGRfYm9yZGVybXJrKSB7CgkJCQkJCSRzdGFydGxpbmVwb3MgKz0gKCR0aGlzLT5ib3JkZXJtcmtbJHRoaXMtPnBhZ2VdIC0gJG9sZF9ib3JkZXJtcmspOwoJCQkJCX0KCQkJCQlpZiAoJHByZXZfbnVtcGFnZXMgPiAkdGhpcy0+bnVtcGFnZXMpIHsKCQkJCQkJJHN0YXJ0bGluZXBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZWlmIChzdHJsZW4oJGRvbVska2V5XVsndmFsdWUnXSkgPiAwKSB7CgkJCQkvLyBwcmludCBsaXN0LWl0ZW0KCQkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPmxpc3BhY2VyKSBBTkQgKCR0aGlzLT5saXNwYWNlciAhPSAnXicpKSB7CgkJCQkJJHRoaXMtPlNldEZvbnQoJHBmb250bmFtZSwgJHBmb250c3R5bGUsICRwZm9udHNpemUpOwoJCQkJCSR0aGlzLT5yZXNldExhc3RIKCk7CgkJCQkJJG1pbnN0YXJ0bGluZXkgPSAkdGhpcy0+eTsKCQkJCQkkbWF4Ym90dG9tbGluZXkgPSAoJHN0YXJ0bGluZXkgKyAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkdGhpcy0+Rm9udFNpemUpKTsKCQkJCQlpZiAoaXNfbnVtZXJpYygkcGZvbnRzaXplKSBBTkQgKCRwZm9udHNpemUgPiAwKSkgewoJCQkJCQkkdGhpcy0+cHV0SHRtbExpc3RCdWxsZXQoJHRoaXMtPmxpc3RudW0sICR0aGlzLT5saXNwYWNlciwgJHBmb250c2l6ZSk7CgkJCQkJfQoJCQkJCSR0aGlzLT5TZXRGb250KCRjdXJmb250bmFtZSwgJGN1cmZvbnRzdHlsZSwgJGN1cmZvbnRzaXplKTsKCQkJCQkkdGhpcy0+cmVzZXRMYXN0SCgpOwoJCQkJCWlmIChpc19udW1lcmljKCRwZm9udHNpemUpIEFORCAoJHBmb250c2l6ZSA+IDApIEFORCBpc19udW1lcmljKCRjdXJmb250c2l6ZSkgQU5EICgkY3VyZm9udHNpemUgPiAwKSBBTkQgKCRwZm9udHNpemUgIT0gJGN1cmZvbnRzaXplKSkgewoJCQkJCQkkcGZvbnRhc2NlbnQgPSAkdGhpcy0+Z2V0Rm9udEFzY2VudCgkcGZvbnRuYW1lLCAkcGZvbnRzdHlsZSwgJHBmb250c2l6ZSk7CgkJCQkJCSRwZm9udGRlc2NlbnQgPSAkdGhpcy0+Z2V0Rm9udERlc2NlbnQoJHBmb250bmFtZSwgJHBmb250c3R5bGUsICRwZm9udHNpemUpOwoJCQkJCQkkdGhpcy0+eSArPSAoJHRoaXMtPmdldENlbGxIZWlnaHQoKCRwZm9udHNpemUgLSAkY3VyZm9udHNpemUpIC8gJHRoaXMtPmspICsgJHBmb250YXNjZW50IC0gJGN1cmZvbnRhc2NlbnQgLSAkcGZvbnRkZXNjZW50ICsgJGN1cmZvbnRkZXNjZW50KSAvIDI7CgkJCQkJCSRtaW5zdGFydGxpbmV5ID0gbWluKCR0aGlzLT55LCAkbWluc3RhcnRsaW5leSk7CgkJCQkJCSRtYXhib3R0b21saW5leSA9IG1heCgoJHRoaXMtPnkgKyAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkcGZvbnRzaXplIC8gJHRoaXMtPmspKSwgJG1heGJvdHRvbWxpbmV5KTsKCQkJCQl9CgkJCQl9CgkJCQkvLyB0ZXh0CgkJCQkkdGhpcy0+aHRtbHZzcGFjZSA9IDA7CgkJCQlpZiAoKCEkdGhpcy0+cHJlbW9kZSkgQU5EICR0aGlzLT5pc1JUTFRleHREaXIoKSkgewoJCQkJCS8vIHJldmVyc2Ugc3BhY2VzIG9yZGVyCgkJCQkJJGxzcCA9ICcnOyAvLyBsZWZ0IHNwYWNlcwoJCQkJCSRyc3AgPSAnJzsgLy8gcmlnaHQgc3BhY2VzCgkJCQkJaWYgKHByZWdfbWF0Y2goJy9eKCcuJHRoaXMtPnJlX3NwYWNlWydwJ10uJyspLycuJHRoaXMtPnJlX3NwYWNlWydtJ10sICRkb21bJGtleV1bJ3ZhbHVlJ10sICRtYXRjaGVzKSkgewoJCQkJCQkkbHNwID0gJG1hdGNoZXNbMV07CgkJCQkJfQoJCQkJCWlmIChwcmVnX21hdGNoKCcvKCcuJHRoaXMtPnJlX3NwYWNlWydwJ10uJyspJC8nLiR0aGlzLT5yZV9zcGFjZVsnbSddLCAkZG9tWyRrZXldWyd2YWx1ZSddLCAkbWF0Y2hlcykpIHsKCQkJCQkJJHJzcCA9ICRtYXRjaGVzWzFdOwoJCQkJCX0KCQkJCQkkZG9tWyRrZXldWyd2YWx1ZSddID0gJHJzcC4kdGhpcy0+c3RyaW5nVHJpbSgkZG9tWyRrZXldWyd2YWx1ZSddKS4kbHNwOwoJCQkJfQoJCQkJaWYgKCRuZXdsaW5lKSB7CgkJCQkJaWYgKCEkdGhpcy0+cHJlbW9kZSkgewoJCQkJCQkkcHJlbGVuID0gc3RybGVuKCRkb21bJGtleV1bJ3ZhbHVlJ10pOwoJCQkJCQlpZiAoJHRoaXMtPmlzUlRMVGV4dERpcigpKSB7CgkJCQkJCQkvLyByaWdodCB0cmltIGV4Y2VwdCBub24tYnJlYWtpbmcgc3BhY2UKCQkJCQkJCSRkb21bJGtleV1bJ3ZhbHVlJ10gPSAkdGhpcy0+c3RyaW5nUmlnaHRUcmltKCRkb21bJGtleV1bJ3ZhbHVlJ10pOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8gbGVmdCB0cmltIGV4Y2VwdCBub24tYnJlYWtpbmcgc3BhY2UKCQkJCQkJCSRkb21bJGtleV1bJ3ZhbHVlJ10gPSAkdGhpcy0+c3RyaW5nTGVmdFRyaW0oJGRvbVska2V5XVsndmFsdWUnXSk7CgkJCQkJCX0KCQkJCQkJJHBvc3RsZW4gPSBzdHJsZW4oJGRvbVska2V5XVsndmFsdWUnXSk7CgkJCQkJCWlmICgoJHBvc3RsZW4gPT0gMCkgQU5EICgkcHJlbGVuID4gMCkpIHsKCQkJCQkJCSRkb21bJGtleV1bJ3RyaW1tZWRfc3BhY2UnXSA9IHRydWU7CgkJCQkJCX0KCQkJCQl9CgkJCQkJJG5ld2xpbmUgPSBmYWxzZTsKCQkJCQkkZmlyc3RibG9jayA9IHRydWU7CgkJCQl9IGVsc2UgewoJCQkJCSRmaXJzdGJsb2NrID0gZmFsc2U7CgkJCQkJLy8gcmVwbGFjZSBlbXB0eSBtdWx0aXBsZSBzcGFjZXMgc3RyaW5nIHdpdGggYSBzaW5nbGUgc3BhY2UKCQkJCQkkZG9tWyRrZXldWyd2YWx1ZSddID0gcHJlZ19yZXBsYWNlKCcvXicuJHRoaXMtPnJlX3NwYWNlWydwJ10uJyskLycuJHRoaXMtPnJlX3NwYWNlWydtJ10sIGNocigzMiksICRkb21bJGtleV1bJ3ZhbHVlJ10pOwoJCQkJfQoJCQkJJHN0cnJlc3QgPSAnJzsKCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJJHRoaXMtPnggLT0gJHRoaXMtPnRleHRpbmRlbnQ7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT54ICs9ICR0aGlzLT50ZXh0aW5kZW50OwoJCQkJfQoJCQkJaWYgKCFpc3NldCgkZG9tWyRrZXldWyd0cmltbWVkX3NwYWNlJ10pIE9SICEkZG9tWyRrZXldWyd0cmltbWVkX3NwYWNlJ10pIHsKCQkJCQkkc3RybGluZWxlbiA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkZG9tWyRrZXldWyd2YWx1ZSddKTsKCQkJCQlpZiAoIWVtcHR5KCR0aGlzLT5IUkVGKSBBTkQgKGlzc2V0KCR0aGlzLT5IUkVGWyd1cmwnXSkpKSB7CgkJCQkJCS8vIEhUTUwgPGE+IExpbmsKCQkJCQkJJGhyZWZjb2xvciA9ICcnOwoJCQkJCQlpZiAoaXNzZXQoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZmdjb2xvciddKSBBTkQgKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2ZnY29sb3InXSAhPT0gZmFsc2UpKSB7CgkJCQkJCQkkaHJlZmNvbG9yID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZmdjb2xvciddOwoJCQkJCQl9CgkJCQkJCSRocmVmc3R5bGUgPSAtMTsKCQkJCQkJaWYgKGlzc2V0KCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2ZvbnRzdHlsZSddKSBBTkQgKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2ZvbnRzdHlsZSddICE9PSBmYWxzZSkpIHsKCQkJCQkJCSRocmVmc3R5bGUgPSAkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydmb250c3R5bGUnXTsKCQkJCQkJfQoJCQkJCQkkc3RycmVzdCA9ICR0aGlzLT5hZGRIdG1sTGluaygkdGhpcy0+SFJFRlsndXJsJ10sICRkb21bJGtleV1bJ3ZhbHVlJ10sICR3ZmlsbCwgdHJ1ZSwgJGhyZWZjb2xvciwgJGhyZWZzdHlsZSwgdHJ1ZSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHdhZGogPSAwOyAvLyBzcGFjZSB0byBsZWF2ZSBmb3IgYmxvY2sgY29udGludWl0eQoJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJJGN3YSA9ICgkdGhpcy0+eCAtICR0aGlzLT5sTWFyZ2luKTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRjd2EgPSAoJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR0aGlzLT54KTsKCQkJCQkJfQoJCQkJCQlpZiAoKCRzdHJsaW5lbGVuIDwgJGN3YSkgQU5EIChpc3NldCgkZG9tWygka2V5ICsgMSldKSkgQU5EICgkZG9tWygka2V5ICsgMSldWyd0YWcnXSkgQU5EICghJGRvbVsoJGtleSArIDEpXVsnYmxvY2snXSkpIHsKCQkJCQkJCS8vIGNoZWNrIHRoZSBuZXh0IHRleHQgYmxvY2tzIGZvciBjb250aW51aXR5CgkJCQkJCQkkbmtleSA9ICgka2V5ICsgMSk7CgkJCQkJCQkkd3JpdGVfYmxvY2sgPSB0cnVlOwoJCQkJCQkJJHNhbWVfdGV4dGRpciA9IHRydWU7CgkJCQkJCQkkdG1wX2ZvbnRuYW1lID0gJHRoaXMtPkZvbnRGYW1pbHk7CgkJCQkJCQkkdG1wX2ZvbnRzdHlsZSA9ICR0aGlzLT5Gb250U3R5bGU7CgkJCQkJCQkkdG1wX2ZvbnRzaXplID0gJHRoaXMtPkZvbnRTaXplUHQ7CgkJCQkJCQl3aGlsZSAoJHdyaXRlX2Jsb2NrIEFORCBpc3NldCgkZG9tWyRua2V5XSkpIHsKCQkJCQkJCQlpZiAoJGRvbVskbmtleV1bJ3RhZyddKSB7CgkJCQkJCQkJCWlmICgkZG9tWyRua2V5XVsnYmxvY2snXSkgewoJCQkJCQkJCQkJLy8gZW5kIG9mIGJsb2NrCgkJCQkJCQkJCQkkd3JpdGVfYmxvY2sgPSBmYWxzZTsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkdG1wX2ZvbnRuYW1lID0gaXNzZXQoJGRvbVskbmtleV1bJ2ZvbnRuYW1lJ10pID8gJGRvbVskbmtleV1bJ2ZvbnRuYW1lJ10gOiAkdGhpcy0+Rm9udEZhbWlseTsKCQkJCQkJCQkJJHRtcF9mb250c3R5bGUgPSBpc3NldCgkZG9tWyRua2V5XVsnZm9udHN0eWxlJ10pID8gJGRvbVskbmtleV1bJ2ZvbnRzdHlsZSddIDogJHRoaXMtPkZvbnRTdHlsZTsKCQkJCQkJCQkJJHRtcF9mb250c2l6ZSA9IGlzc2V0KCRkb21bJG5rZXldWydmb250c2l6ZSddKSA/ICRkb21bJG5rZXldWydmb250c2l6ZSddIDogJHRoaXMtPkZvbnRTaXplUHQ7CgkJCQkJCQkJCSRzYW1lX3RleHRkaXIgPSAoJGRvbVskbmtleV1bJ2RpciddID09ICRkb21bJGtleV1bJ2RpciddKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkbmV4dHN0ciA9IFRDUERGX1NUQVRJQzo6cHJlZ1NwbGl0KCcvJy4kdGhpcy0+cmVfc3BhY2VbJ3AnXS4nKy8nLCAkdGhpcy0+cmVfc3BhY2VbJ20nXSwgJGRvbVskbmtleV1bJ3ZhbHVlJ10pOwoJCQkJCQkJCQlpZiAoaXNzZXQoJG5leHRzdHJbMF0pIEFORCAkc2FtZV90ZXh0ZGlyKSB7CgkJCQkJCQkJCQkkd2FkaiArPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJG5leHRzdHJbMF0sICR0bXBfZm9udG5hbWUsICR0bXBfZm9udHN0eWxlLCAkdG1wX2ZvbnRzaXplKTsKCQkJCQkJCQkJCWlmIChpc3NldCgkbmV4dHN0clsxXSkpIHsKCQkJCQkJCQkJCQkkd3JpdGVfYmxvY2sgPSBmYWxzZTsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfQoJCQkJCQkJCX0KCQkJCQkJCQkrKyRua2V5OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCWlmICgoJHdhZGogPiAwKSBBTkQgKCgkc3RybGluZWxlbiArICR3YWRqKSA+PSAkY3dhKSkgewoJCQkJCQkJJHdhZGogPSAwOwoJCQkJCQkJJG5leHRzdHIgPSBUQ1BERl9TVEFUSUM6OnByZWdTcGxpdCgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJy8nLCAkdGhpcy0+cmVfc3BhY2VbJ20nXSwgJGRvbVska2V5XVsndmFsdWUnXSk7CgkJCQkJCQkkbnVtYmxrcyA9IGNvdW50KCRuZXh0c3RyKTsKCQkJCQkJCWlmICgkbnVtYmxrcyA+IDEpIHsKCQkJCQkJCQkvLyB0cnkgdG8gc3BsaXQgb24gYmxhbmsgc3BhY2VzCgkJCQkJCQkJJHdhZGogPSAoJGN3YSAtICRzdHJsaW5lbGVuICsgJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRuZXh0c3RyWygkbnVtYmxrcyAtIDEpXSkpOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkvLyBzZXQgdGhlIGVudGlyZSBibG9jayBvbiBuZXcgbGluZQoJCQkJCQkJCSR3YWRqID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRuZXh0c3RyWzBdKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkvLyBjaGVjayBmb3IgcmV2ZXJzZWQgdGV4dCBkaXJlY3Rpb24KCQkJCQkJaWYgKCgkd2FkaiA+IDApIEFORCAoKCR0aGlzLT5ydGwgQU5EICgkdGhpcy0+dG1wcnRsID09PSAnTCcpKSBPUiAoISR0aGlzLT5ydGwgQU5EICgkdGhpcy0+dG1wcnRsID09PSAnUicpKSkpIHsKCQkJCQkJCS8vIExUUiB0ZXh0IG9uIFJUTCBkaXJlY3Rpb24gb3IgUlRMIHRleHQgb24gTFRSIGRpcmVjdGlvbgoJCQkJCQkJJHJldmVyc2VfZGlyID0gdHJ1ZTsKCQkJCQkJCSR0aGlzLT5ydGwgPSAhJHRoaXMtPnJ0bDsKCQkJCQkJCSRyZXZzaGlmdCA9ICgkc3RybGluZWxlbiArICR3YWRqICsgMC4wMDAwMDEpOyAvLyBhZGQgbGl0dGxlIHF1YW50aXR5IGZvciByb3VuZGluZyBwcm9ibGVtcwoJCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCQkkdGhpcy0+eCArPSAkcmV2c2hpZnQ7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSR0aGlzLT54IC09ICRyZXZzaGlmdDsKCQkJCQkJCX0KCQkJCQkJCSR4d3MgPSAkdGhpcy0+eDsKCQkJCQkJfQoJCQkJCQkvLyAqKioqKiogd3JpdGUgb25seSB1bnRpbCB0aGUgZW5kIG9mIHRoZSBsaW5lIGFuZCBnZXQgdGhlIHJlc3QgKioqKioqCgkJCQkJCSRzdHJyZXN0ID0gJHRoaXMtPldyaXRlKCR0aGlzLT5sYXN0aCwgJGRvbVska2V5XVsndmFsdWUnXSwgJycsICR3ZmlsbCwgJycsIGZhbHNlLCAwLCB0cnVlLCAkZmlyc3RibG9jaywgMCwgJHdhZGopOwoJCQkJCQkvLyByZXN0b3JlIGRlZmF1bHQgZGlyZWN0aW9uCgkJCQkJCWlmICgkcmV2ZXJzZV9kaXIgQU5EICgkd2FkaiA9PSAwKSkgewoJCQkJCQkJJHRoaXMtPnggPSAkeHdzOwoJCQkJCQkJJHRoaXMtPnJ0bCA9ICEkdGhpcy0+cnRsOwoJCQkJCQkJJHJldmVyc2VfZGlyID0gZmFsc2U7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkkdGhpcy0+dGV4dGluZGVudCA9IDA7CgkJCQlpZiAoc3RybGVuKCRzdHJyZXN0KSA+IDApIHsKCQkJCQkvLyBzdG9yZSB0aGUgcmVtYWluaW5nIHN0cmluZyBvbiB0aGUgcHJldmlvdXMgJGtleSBwb3NpdGlvbgoJCQkJCSR0aGlzLT5uZXdsaW5lID0gdHJ1ZTsKCQkJCQlpZiAoJHN0cnJlc3QgPT0gJGRvbVska2V5XVsndmFsdWUnXSkgewoJCQkJCQkvLyB1c2VkIHRvIGF2b2lkIGluZmluaXRlIGxvb3AKCQkJCQkJKyskbG9vcDsKCQkJCQl9IGVsc2UgewoJCQkJCQkkbG9vcCA9IDA7CgkJCQkJfQoJCQkJCSRkb21bJGtleV1bJ3ZhbHVlJ10gPSAkc3RycmVzdDsKCQkJCQlpZiAoJGNlbGwpIHsKCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCSR0aGlzLT54IC09ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ1InXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT54ICs9ICR0aGlzLT5jZWxsX3BhZGRpbmdbJ0wnXTsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJGxvb3AgPCAzKSB7CgkJCQkJCS0tJGtleTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCSRsb29wID0gMDsKCQkJCQkvLyBhZGQgdGhlIHBvc2l0aXZlIGZvbnQgc3BhY2luZyBvZiB0aGUgbGFzdCBjaGFyYWN0ZXIgKGlmIGFueSkKCQkJCQkgaWYgKCR0aGlzLT5mb250X3NwYWNpbmcgPiAwKSB7CgkJCQkJIAlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJJHRoaXMtPnggLT0gJHRoaXMtPmZvbnRfc3BhY2luZzsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR0aGlzLT54ICs9ICR0aGlzLT5mb250X3NwYWNpbmc7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQkJKyska2V5OwoJCQlpZiAoaXNzZXQoJGRvbVska2V5XVsndGFnJ10pIEFORCAkZG9tWyRrZXldWyd0YWcnXSBBTkQgKCFpc3NldCgkZG9tWyRrZXldWydvcGVuaW5nJ10pIE9SICEkZG9tWyRrZXldWydvcGVuaW5nJ10pIEFORCBpc3NldCgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsnbm9iciddKSBBTkQgKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2F0dHJpYnV0ZSddWydub2JyJ10gPT0gJ3RydWUnKSkgewoJCQkJLy8gY2hlY2sgaWYgd2UgYXJlIG9uIGEgbmV3IHBhZ2Ugb3Igb24gYSBuZXcgY29sdW1uCgkJCQlpZiAoKCEkdW5kbykgQU5EICgoJHRoaXMtPnkgPCAkdGhpcy0+c3RhcnRfdHJhbnNhY3Rpb25feSkgT1IgKCgkZG9tWyRrZXldWyd2YWx1ZSddID09ICd0cicpIEFORCAoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5keSddIDwgJHRoaXMtPnN0YXJ0X3RyYW5zYWN0aW9uX3kpKSkpIHsKCQkJCQkvLyB3ZSBhcmUgb24gYSBuZXcgcGFnZSBvciBvbiBhIG5ldyBjb2x1bW4gYW5kIHRoZSB0b3RhbCBvYmplY3QgaGVpZ2h0IGlzIGxlc3MgdGhhbiB0aGUgYXZhaWxhYmxlIHZlcnRpY2FsIHNwYWNlLgoJCQkJCS8vIHJlc3RvcmUgcHJldmlvdXMgb2JqZWN0CgkJCQkJJHRoaXMtPnJvbGxiYWNrVHJhbnNhY3Rpb24odHJ1ZSk7CgkJCQkJLy8gcmVzdG9yZSBwcmV2aW91cyB2YWx1ZXMKCQkJCQlmb3JlYWNoICgkdGhpc19tZXRob2RfdmFycyBhcyAkdmtleSA9PiAkdnZhbCkgewoJCQkJCQkkJHZrZXkgPSAkdnZhbDsKCQkJCQl9CgkJCQkJLy8gYWRkIGEgcGFnZSAob3IgdHJpZyBBY2NlcHRQYWdlQnJlYWsoKSBmb3IgbXVsdGljb2x1bW4gbW9kZSkKCQkJCQkkcHJlX3kgPSAkdGhpcy0+eTsKCQkJCQlpZiAoKCEkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgKyAxKSkgQU5EICgkdGhpcy0+eSA8ICRwcmVfeSkpIHsKCQkJCQkJJHN0YXJ0bGluZXkgPSAkdGhpcy0+eTsKCQkJCQl9CgkJCQkJJHVuZG8gPSB0cnVlOyAvLyBhdm9pZCBpbmZpbml0ZSBsb29wCgkJCQl9IGVsc2UgewoJCQkJCSR1bmRvID0gZmFsc2U7CgkJCQl9CgkJCX0KCQl9IC8vIGVuZCBmb3IgZWFjaCAka2V5CgkJLy8gYWxpZ24gdGhlIGxhc3QgbGluZQoJCWlmIChpc3NldCgkc3RhcnRsaW5leCkpIHsKCQkJJHlzaGlmdCA9ICgkbWluc3RhcnRsaW5leSAtICRzdGFydGxpbmV5KTsKCQkJaWYgKCgkeXNoaWZ0ID4gMCkgT1IgKCR0aGlzLT5wYWdlID4gJHN0YXJ0bGluZXBhZ2UpKSB7CgkJCQkkeXNoaWZ0ID0gMDsKCQkJfQoJCQkkdF94ID0gMDsKCQkJLy8gdGhlIGxhc3QgbGluZSBtdXN0IGJlIHNoaWZ0ZWQgdG8gYmUgYWxpZ25lZCBhcyByZXF1ZXN0ZWQKCQkJJGxpbmV3ID0gYWJzKCR0aGlzLT5lbmRsaW5leCAtICRzdGFydGxpbmV4KTsKCQkJaWYgKCR0aGlzLT5pbnhvYmopIHsKCQkJCS8vIHdlIGFyZSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQkJJHBzdGFydCA9IHN1YnN0cigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSwgMCwgJHN0YXJ0bGluZXBvcyk7CgkJCQlpZiAoaXNzZXQoJG9wZW50YWdwb3MpKSB7CgkJCQkJJG1pZHBvcyA9ICRvcGVudGFncG9zOwoJCQkJfSBlbHNlIHsKCQkJCQkkbWlkcG9zID0gMDsKCQkJCX0KCQkJCWlmICgkbWlkcG9zID4gMCkgewoJCQkJCSRwbWlkID0gc3Vic3RyKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddLCAkc3RhcnRsaW5lcG9zLCAoJG1pZHBvcyAtICRzdGFydGxpbmVwb3MpKTsKCQkJCQkkcGVuZCA9IHN1YnN0cigkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXSwgJG1pZHBvcyk7CgkJCQl9IGVsc2UgewoJCQkJCSRwbWlkID0gc3Vic3RyKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnb3V0ZGF0YSddLCAkc3RhcnRsaW5lcG9zKTsKCQkJCQkkcGVuZCA9ICcnOwoJCQkJfQoJCQl9IGVsc2UgewoJCQkJJHBzdGFydCA9IHN1YnN0cigkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSksIDAsICRzdGFydGxpbmVwb3MpOwoJCQkJaWYgKGlzc2V0KCRvcGVudGFncG9zKSBBTkQgaXNzZXQoJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV0pIEFORCAoISR0aGlzLT5JbkZvb3RlcikpIHsKCQkJCQkkdGhpcy0+Zm9vdGVycG9zWyRzdGFydGxpbmVwYWdlXSA9ICR0aGlzLT5wYWdlbGVuWyRzdGFydGxpbmVwYWdlXSAtICR0aGlzLT5mb290ZXJsZW5bJHN0YXJ0bGluZXBhZ2VdOwoJCQkJCSRtaWRwb3MgPSBtaW4oJG9wZW50YWdwb3MsICR0aGlzLT5mb290ZXJwb3NbJHN0YXJ0bGluZXBhZ2VdKTsKCQkJCX0gZWxzZWlmIChpc3NldCgkb3BlbnRhZ3BvcykpIHsKCQkJCQkkbWlkcG9zID0gJG9wZW50YWdwb3M7CgkJCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvb3Rlcmxlblskc3RhcnRsaW5lcGFnZV0pIEFORCAoISR0aGlzLT5JbkZvb3RlcikpIHsKCQkJCQkkdGhpcy0+Zm9vdGVycG9zWyRzdGFydGxpbmVwYWdlXSA9ICR0aGlzLT5wYWdlbGVuWyRzdGFydGxpbmVwYWdlXSAtICR0aGlzLT5mb290ZXJsZW5bJHN0YXJ0bGluZXBhZ2VdOwoJCQkJCSRtaWRwb3MgPSAkdGhpcy0+Zm9vdGVycG9zWyRzdGFydGxpbmVwYWdlXTsKCQkJCX0gZWxzZSB7CgkJCQkJJG1pZHBvcyA9IDA7CgkJCQl9CgkJCQlpZiAoJG1pZHBvcyA+IDApIHsKCQkJCQkkcG1pZCA9IHN1YnN0cigkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSksICRzdGFydGxpbmVwb3MsICgkbWlkcG9zIC0gJHN0YXJ0bGluZXBvcykpOwoJCQkJCSRwZW5kID0gc3Vic3RyKCR0aGlzLT5nZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlKSwgJG1pZHBvcyk7CgkJCQl9IGVsc2UgewoJCQkJCSRwbWlkID0gc3Vic3RyKCR0aGlzLT5nZXRQYWdlQnVmZmVyKCRzdGFydGxpbmVwYWdlKSwgJHN0YXJ0bGluZXBvcyk7CgkJCQkJJHBlbmQgPSAnJzsKCQkJCX0KCQkJfQoJCQlpZiAoKGlzc2V0KCRwbGFsaWduKSBBTkQgKCgoJHBsYWxpZ24gPT0gJ0MnKSBPUiAoKCRwbGFsaWduID09ICdSJykgQU5EICghJHRoaXMtPnJ0bCkpIE9SICgoJHBsYWxpZ24gPT0gJ0wnKSBBTkQgKCR0aGlzLT5ydGwpKSkpKSkgewoJCQkJLy8gY2FsY3VsYXRlIHNoaWZ0aW5nIGFtb3VudAoJCQkJJHR3ID0gJHc7CgkJCQlpZiAoJHRoaXMtPmxNYXJnaW4gIT0gJHByZXZsTWFyZ2luKSB7CgkJCQkJJHR3ICs9ICgkcHJldmxNYXJnaW4gLSAkdGhpcy0+bE1hcmdpbik7CgkJCQl9CgkJCQlpZiAoJHRoaXMtPnJNYXJnaW4gIT0gJHByZXZyTWFyZ2luKSB7CgkJCQkJJHR3ICs9ICgkcHJldnJNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbik7CgkJCQl9CgkJCQkkb25lX3NwYWNlX3dpZHRoID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKGNocigzMikpOwoJCQkJJG5vID0gMDsgLy8gbnVtYmVyIG9mIHNwYWNlcyBvbiBhIGxpbmUgY29udGFpbmVkIG9uIGEgc2luZ2xlIGJsb2NrCgkJCQlpZiAoJHRoaXMtPmlzUlRMVGV4dERpcigpKSB7IC8vIFJUTAoJCQkJCS8vIHJlbW92ZSBsZWZ0IHNwYWNlIGlmIGV4aXN0CgkJCQkJJHBvczEgPSBUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgJ1soJyk7CgkJCQkJaWYgKCRwb3MxID4gMCkgewoJCQkJCQkkcG9zMSA9IGludHZhbCgkcG9zMSk7CgkJCQkJCWlmICgkdGhpcy0+aXNVbmljb2RlRm9udCgpKSB7CgkJCQkJCQkkcG9zMiA9IGludHZhbChUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgJ1soJy5jaHIoMCkuY2hyKDMyKSkpOwoJCQkJCQkJJHNwYWNlbGVuID0gMjsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRwb3MyID0gaW50dmFsKFRDUERGX1NUQVRJQzo6cmV2c3RycG9zKCRwbWlkLCAnWygnLmNocigzMikpKTsKCQkJCQkJCSRzcGFjZWxlbiA9IDE7CgkJCQkJCX0KCQkJCQkJaWYgKCRwb3MxID09ICRwb3MyKSB7CgkJCQkJCQkkcG1pZCA9IHN1YnN0cigkcG1pZCwgMCwgKCRwb3MxICsgMikpLnN1YnN0cigkcG1pZCwgKCRwb3MxICsgMiArICRzcGFjZWxlbikpOwoJCQkJCQkJaWYgKHN1YnN0cigkcG1pZCwgJHBvczEsIDQpID09ICdbKCldJykgewoJCQkJCQkJCSRsaW5ldyAtPSAkb25lX3NwYWNlX3dpZHRoOwoJCQkJCQkJfSBlbHNlaWYgKCRwb3MxID09IHN0cnBvcygkcG1pZCwgJ1soJykpIHsKCQkJCQkJCQkkbm8gPSAxOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfSBlbHNlIHsgLy8gTFRSCgkJCQkJLy8gcmVtb3ZlIHJpZ2h0IHNwYWNlIGlmIGV4aXN0CgkJCQkJJHBvczEgPSBUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgJyldJyk7CgkJCQkJaWYgKCRwb3MxID4gMCkgewoJCQkJCQkkcG9zMSA9IGludHZhbCgkcG9zMSk7CgkJCQkJCWlmICgkdGhpcy0+aXNVbmljb2RlRm9udCgpKSB7CgkJCQkJCQkkcG9zMiA9IGludHZhbChUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgY2hyKDApLmNocigzMikuJyldJykpICsgMjsKCQkJCQkJCSRzcGFjZWxlbiA9IDI7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcG9zMiA9IGludHZhbChUQ1BERl9TVEFUSUM6OnJldnN0cnBvcygkcG1pZCwgY2hyKDMyKS4nKV0nKSkgKyAxOwoJCQkJCQkJJHNwYWNlbGVuID0gMTsKCQkJCQkJfQoJCQkJCQlpZiAoJHBvczEgPT0gJHBvczIpIHsKCQkJCQkJCSRwbWlkID0gc3Vic3RyKCRwbWlkLCAwLCAoJHBvczEgLSAkc3BhY2VsZW4pKS5zdWJzdHIoJHBtaWQsICRwb3MxKTsKCQkJCQkJCSRsaW5ldyAtPSAkb25lX3NwYWNlX3dpZHRoOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJJG1kaWZmID0gKCR0dyAtICRsaW5ldyk7CgkJCQlpZiAoJHBsYWxpZ24gPT0gJ0MnKSB7CgkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJJHRfeCA9IC0oJG1kaWZmIC8gMik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRfeCA9ICgkbWRpZmYgLyAyKTsKCQkJCQl9CgkJCQl9IGVsc2VpZiAoJHBsYWxpZ24gPT0gJ1InKSB7CgkJCQkJLy8gcmlnaHQgYWxpZ25tZW50IG9uIExUUiBkb2N1bWVudAoJCQkJCSR0X3ggPSAkbWRpZmY7CgkJCQl9IGVsc2VpZiAoJHBsYWxpZ24gPT0gJ0wnKSB7CgkJCQkJLy8gbGVmdCBhbGlnbm1lbnQgb24gUlRMIGRvY3VtZW50CgkJCQkJJHRfeCA9IC0kbWRpZmY7CgkJCQl9CgkJCX0gLy8gZW5kIGlmIHN0YXJ0bGluZXgKCQkJaWYgKCgkdF94ICE9IDApIE9SICgkeXNoaWZ0IDwgMCkpIHsKCQkJCS8vIHNoaWZ0IHRoZSBsaW5lCgkJCQkkdHJ4ID0gc3ByaW50ZignMSAwIDAgMSAlRiAlRiBjbScsICgkdF94ICogJHRoaXMtPmspLCAoJHlzaGlmdCAqICR0aGlzLT5rKSk7CgkJCQkkcHN0YXJ0IC49ICJcbnFcbiIuJHRyeC4iXG4iLiRwbWlkLiJcblFcbiI7CgkJCQkkZW5kbGluZXBvcyA9IHN0cmxlbigkcHN0YXJ0KTsKCQkJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBYT2JqZWN0IHRlbXBsYXRlCgkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydvdXRkYXRhJ10gPSAkcHN0YXJ0LiRwZW5kOwoJCQkJCWZvcmVhY2ggKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnYW5ub3RhdGlvbnMnXSBhcyAkcGFrID0+ICRwYWMpIHsKCQkJCQkJaWYgKCRwYWsgPj0gJHBhc2spIHsKCQkJCQkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnYW5ub3RhdGlvbnMnXVskcGFrXVsneCddICs9ICR0X3g7CgkJCQkJCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2Fubm90YXRpb25zJ11bJHBha11bJ3knXSAtPSAkeXNoaWZ0OwoJCQkJCQl9CgkJCQkJfQoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+c2V0UGFnZUJ1ZmZlcigkc3RhcnRsaW5lcGFnZSwgJHBzdGFydC4kcGVuZCk7CgkJCQkJLy8gc2hpZnQgdGhlIGFubm90YXRpb25zIGFuZCBsaW5rcwoJCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV0pKSB7CgkJCQkJCWZvcmVhY2ggKCR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXSBhcyAkcGFrID0+ICRwYWMpIHsKCQkJCQkJCWlmICgkcGFrID49ICRwYXNrKSB7CgkJCQkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJHRoaXMtPnBhZ2VdWyRwYWtdWyd4J10gKz0gJHRfeDsKCQkJCQkJCQkkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+cGFnZV1bJHBha11bJ3knXSAtPSAkeXNoaWZ0OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJJHRoaXMtPnkgLT0gJHlzaGlmdDsKCQkJCSR5c2hpZnQgPSAwOwoJCQl9CgkJfQoJCS8vIHJlc3RvcmUgcHJldmlvdXMgdmFsdWVzCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCRndmFycyk7CgkJaWYgKCR0aGlzLT5udW1fY29sdW1ucyA+IDEpIHsKCQkJJHRoaXMtPnNlbGVjdENvbHVtbigpOwoJCX0gZWxzZWlmICgkdGhpcy0+cGFnZSA+ICRwcmV2UGFnZSkgewoJCQkkdGhpcy0+bE1hcmdpbiA9ICR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXVsnb2xtJ107CgkJCSR0aGlzLT5yTWFyZ2luID0gJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXTsKCQl9CgkJLy8gcmVzdG9yZSBwcmV2aW91cyBsaXN0IHN0YXRlCgkJJHRoaXMtPmNlbGxfaGVpZ2h0X3JhdGlvID0gJHByZXZfY2VsbF9oZWlnaHRfcmF0aW87CgkJJHRoaXMtPmxpc3RudW0gPSAkcHJldl9saXN0bnVtOwoJCSR0aGlzLT5saXN0b3JkZXJlZCA9ICRwcmV2X2xpc3RvcmRlcmVkOwoJCSR0aGlzLT5saXN0Y291bnQgPSAkcHJldl9saXN0Y291bnQ7CgkJJHRoaXMtPmxpc3BhY2VyID0gJHByZXZfbGlzcGFjZXI7CgkJaWYgKCRsbiBBTkQgKCEoJGNlbGwgQU5EICgkZG9tWyRrZXktMV1bJ3ZhbHVlJ10gPT0gJ3RhYmxlJykpKSkgewoJCQkkdGhpcy0+TG4oJHRoaXMtPmxhc3RoKTsKCQkJaWYgKCR0aGlzLT55IDwgJG1heGJvdHRvbWxpbmV5KSB7CgkJCQkkdGhpcy0+eSA9ICRtYXhib3R0b21saW5leTsKCQkJfQoJCX0KCQl1bnNldCgkZG9tKTsKCX0KCgkvKioKCSAqIFByb2Nlc3Mgb3BlbmluZyB0YWdzLgoJICogQHBhcmFtICRkb20gKGFycmF5KSBodG1sIGRvbSBhcnJheQoJICogQHBhcmFtICRrZXkgKGludCkgY3VycmVudCBlbGVtZW50IGlkCgkgKiBAcGFyYW0gJGNlbGwgKGJvb2xlYW4pIGlmIHRydWUgYWRkIHRoZSBkZWZhdWx0IGxlZnQgKG9yIHJpZ2h0IGlmIFJUTCkgcGFkZGluZyB0byBlYWNoIG5ldyBsaW5lIChkZWZhdWx0IGZhbHNlKS4KCSAqIEByZXR1cm4gJGRvbSBhcnJheQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gb3BlbkhUTUxUYWdIYW5kbGVyKCRkb20sICRrZXksICRjZWxsKSB7CgkJJHRhZyA9ICRkb21bJGtleV07CgkJJHBhcmVudCA9ICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV07CgkJJGZpcnN0dGFnID0gKCRrZXkgPT0gMSk7CgkJLy8gY2hlY2sgZm9yIHRleHQgZGlyZWN0aW9uIGF0dHJpYnV0ZQoJCWlmIChpc3NldCgkdGFnWydkaXInXSkpIHsKCQkJJHRoaXMtPnNldFRlbXBSVEwoJHRhZ1snZGlyJ10pOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT50bXBydGwgPSBmYWxzZTsKCQl9CgkJaWYgKCR0YWdbJ2Jsb2NrJ10pIHsKCQkJJGhieiA9IDA7IC8vIGRpc3RhbmNlIGZyb20geSB0byBsaW5lIGJvdHRvbQoJCQkkaGIgPSAwOyAvLyB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIGJsb2NrIHRhZ3MKCQkJLy8gY2FsY3VsYXRlIHZlcnRpY2FsIHNwYWNlIGZvciBibG9jayB0YWdzCgkJCWlmIChpc3NldCgkdGhpcy0+dGFndnNwYWNlc1skdGFnWyd2YWx1ZSddXVswXVsnaCddKSBBTkQgKCR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzBdWydoJ10gPj0gMCkpIHsKCQkJCSRjdXJfaCA9ICR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzBdWydoJ107CgkJCX0gZWxzZWlmIChpc3NldCgkdGFnWydmb250c2l6ZSddKSkgewoJCQkJJGN1cl9oID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHRhZ1snZm9udHNpemUnXSAvICR0aGlzLT5rKTsKCQkJfSBlbHNlIHsKCQkJCSRjdXJfaCA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzBdWyduJ10pKSB7CgkJCQkkbiA9ICR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzBdWyduJ107CgkJCX0gZWxzZWlmIChwcmVnX21hdGNoKCcvW2hdWzAtOV0vJywgJHRhZ1sndmFsdWUnXSkgPiAwKSB7CgkJCQkkbiA9IDAuNjsKCQkJfSBlbHNlIHsKCQkJCSRuID0gMTsKCQkJfQoJCQlpZiAoKCFpc3NldCgkdGhpcy0+dGFndnNwYWNlc1skdGFnWyd2YWx1ZSddXSkpIEFORCAoaW5fYXJyYXkoJHRhZ1sndmFsdWUnXSwgYXJyYXkoJ2RpdicsICdkdCcsICdkZCcsICdsaScsICdicicpKSkpIHsKCQkJCSRoYiA9IDA7CgkJCX0gZWxzZSB7CgkJCQkkaGIgPSAoJG4gKiAkY3VyX2gpOwoJCQl9CgkJCWlmICgoJHRoaXMtPmh0bWx2c3BhY2UgPD0gMCkgQU5EICgkbiA+IDApKSB7CgkJCQlpZiAoaXNzZXQoJHBhcmVudFsnZm9udHNpemUnXSkpIHsKCQkJCQkkaGJ6ID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHRhZ1snZm9udHNpemUnXSAvICR0aGlzLT5rKTsKCQkJCX0gZWxzZSB7CgkJCQkJJGhieiA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCQl9CgkJCX0KCQkJaWYgKGlzc2V0KCRkb21bKCRrZXkgLSAxKV0pIEFORCAoJGRvbVsoJGtleSAtIDEpXVsndmFsdWUnXSA9PSAndGFibGUnKSkgewoJCQkJLy8gZml4IHZlcnRpY2FsIHNwYWNlIGFmdGVyIHRhYmxlCgkJCQkkaGJ6ID0gMDsKCQkJfQoJCX0KCQkvLyBPcGVuaW5nIHRhZwoJCXN3aXRjaCgkdGFnWyd2YWx1ZSddKSB7CgkJCWNhc2UgJ3RhYmxlJzogewoJCQkJJGNwID0gMDsKCQkJCSRjcyA9IDA7CgkJCQkkZG9tWyRrZXldWydyb3dzcGFucyddID0gYXJyYXkoKTsKCQkJCWlmICghaXNzZXQoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ25lc3RlZCddKSBPUiAoJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ25lc3RlZCddICE9ICd0cnVlJykpIHsKCQkJCQkkdGhpcy0+aHRtbHZzcGFjZSA9IDA7CgkJCQkJLy8gc2V0IHRhYmxlIGhlYWRlcgoJCQkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGRvbVska2V5XVsndGhlYWQnXSkpIHsKCQkJCQkJLy8gc2V0IHRhYmxlIGhlYWRlcgoJCQkJCQkkdGhpcy0+dGhlYWQgPSAkZG9tWyRrZXldWyd0aGVhZCddOwoJCQkJCQlpZiAoIWlzc2V0KCR0aGlzLT50aGVhZE1hcmdpbnMpIE9SIChlbXB0eSgkdGhpcy0+dGhlYWRNYXJnaW5zKSkpIHsKCQkJCQkJCSR0aGlzLT50aGVhZE1hcmdpbnMgPSBhcnJheSgpOwoJCQkJCQkJJHRoaXMtPnRoZWFkTWFyZ2luc1snY2VsbF9wYWRkaW5nJ10gPSAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCQkJCQkJJHRoaXMtPnRoZWFkTWFyZ2luc1snbG1hcmdpbiddID0gJHRoaXMtPmxNYXJnaW47CgkJCQkJCQkkdGhpcy0+dGhlYWRNYXJnaW5zWydybWFyZ2luJ10gPSAkdGhpcy0+ck1hcmdpbjsKCQkJCQkJCSR0aGlzLT50aGVhZE1hcmdpbnNbJ3BhZ2UnXSA9ICR0aGlzLT5wYWdlOwoJCQkJCQkJJHRoaXMtPnRoZWFkTWFyZ2luc1snY2VsbCddID0gJGNlbGw7CgkJCQkJCQkkdGhpcy0+dGhlYWRNYXJnaW5zWydndmFycyddID0gJHRoaXMtPmdldEdyYXBoaWNWYXJzKCk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkvLyBzdG9yZSBjdXJyZW50IG1hcmdpbnMgYW5kIHBhZ2UKCQkJCSRkb21bJGtleV1bJ29sZF9jZWxsX3BhZGRpbmcnXSA9ICR0aGlzLT5jZWxsX3BhZGRpbmc7CgkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ2NlbGxwYWRkaW5nJ10pKSB7CgkJCQkJJHBhZCA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRhZ1snYXR0cmlidXRlJ11bJ2NlbGxwYWRkaW5nJ10sIDEsICdweCcpOwoJCQkJCSR0aGlzLT5TZXRDZWxsUGFkZGluZygkcGFkKTsKCQkJCX0gZWxzZWlmIChpc3NldCgkdGFnWydwYWRkaW5nJ10pKSB7CgkJCQkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICR0YWdbJ3BhZGRpbmcnXTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSkpIHsKCQkJCQkkY3MgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0YWdbJ2F0dHJpYnV0ZSddWydjZWxsc3BhY2luZyddLCAxLCAncHgnKTsKCQkJCX0gZWxzZWlmIChpc3NldCgkdGFnWydib3JkZXItc3BhY2luZyddKSkgewoJCQkJCSRjcyA9ICR0YWdbJ2JvcmRlci1zcGFjaW5nJ11bJ1YnXTsKCQkJCX0KCQkJCSRwcmV2X3kgPSAkdGhpcy0+eTsKCQkJCWlmICgkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoKCgyICogJGNwKSArICgyICogJGNzKSArICR0aGlzLT5sYXN0aCksICcnLCBmYWxzZSkgT1IgKCR0aGlzLT55IDwgJHByZXZfeSkpIHsKCQkJCQkkdGhpcy0+aW50aGVhZCA9IHRydWU7CgkJCQkJLy8gYWRkIGEgcGFnZSAob3IgdHJpZyBBY2NlcHRQYWdlQnJlYWsoKSBmb3IgbXVsdGljb2x1bW4gbW9kZSkKCQkJCQkkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgKyAxKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3RyJzogewoJCQkJLy8gYXJyYXkgb2YgY29sdW1ucyBwb3NpdGlvbnMKCQkJCSRkb21bJGtleV1bJ2NlbGxwb3MnXSA9IGFycmF5KCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdocic6IHsKCQkJCWlmICgoaXNzZXQoJHRhZ1snaGVpZ2h0J10pKSBBTkQgKCR0YWdbJ2hlaWdodCddICE9ICcnKSkgewoJCQkJCSRockhlaWdodCA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRhZ1snaGVpZ2h0J10sIDEsICdweCcpOwoJCQkJfSBlbHNlIHsKCQkJCQkkaHJIZWlnaHQgPSAkdGhpcy0+R2V0TGluZVdpZHRoKCk7CgkJCQl9CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAoJGhySGVpZ2h0IC8gMiksICRjZWxsLCAkZmlyc3R0YWcpOwoJCQkJJHggPSAkdGhpcy0+R2V0WCgpOwoJCQkJJHkgPSAkdGhpcy0+R2V0WSgpOwoJCQkJJHd0bXAgPSAkdGhpcy0+dyAtICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW47CgkJCQlpZiAoJGNlbGwpIHsKCQkJCQkkd3RtcCAtPSAoJHRoaXMtPmNlbGxfcGFkZGluZ1snTCddICsgJHRoaXMtPmNlbGxfcGFkZGluZ1snUiddKTsKCQkJCX0KCQkJCWlmICgoaXNzZXQoJHRhZ1snd2lkdGgnXSkpIEFORCAoJHRhZ1snd2lkdGgnXSAhPSAnJykpIHsKCQkJCQkkaHJXaWR0aCA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRhZ1snd2lkdGgnXSwgJHd0bXAsICdweCcpOwoJCQkJfSBlbHNlIHsKCQkJCQkkaHJXaWR0aCA9ICR3dG1wOwoJCQkJfQoJCQkJJHByZXZsaW5ld2lkdGggPSAkdGhpcy0+R2V0TGluZVdpZHRoKCk7CgkJCQkkdGhpcy0+U2V0TGluZVdpZHRoKCRockhlaWdodCk7CgkJCQkkdGhpcy0+TGluZSgkeCwgJHksICR4ICsgJGhyV2lkdGgsICR5KTsKCQkJCSR0aGlzLT5TZXRMaW5lV2lkdGgoJHByZXZsaW5ld2lkdGgpOwoJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoKCRockhlaWdodCAvIDIpLCAwLCAkY2VsbCwgIWlzc2V0KCRkb21bKCRrZXkgKyAxKV0pKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2EnOiB7CgkJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygnaHJlZicsICR0YWdbJ2F0dHJpYnV0ZSddKSkgewoJCQkJCSR0aGlzLT5IUkVGWyd1cmwnXSA9ICR0YWdbJ2F0dHJpYnV0ZSddWydocmVmJ107CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdpbWcnOiB7CgkJCQlpZiAoIWVtcHR5KCR0YWdbJ2F0dHJpYnV0ZSddWydzcmMnXSkpIHsKCQkJCQlpZiAoJHRhZ1snYXR0cmlidXRlJ11bJ3NyYyddWzBdID09PSAnQCcpIHsKCQkJCQkJLy8gZGF0YSBzdHJlYW0KCQkJCQkJJHRhZ1snYXR0cmlidXRlJ11bJ3NyYyddID0gJ0AnLmJhc2U2NF9kZWNvZGUoc3Vic3RyKCR0YWdbJ2F0dHJpYnV0ZSddWydzcmMnXSwgMSkpOwoJCQkJCQkkdHlwZSA9ICcnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIGdldCBpbWFnZSB0eXBlCgkJCQkJCSR0eXBlID0gVENQREZfSU1BR0VTOjpnZXRJbWFnZUZpbGVUeXBlKCR0YWdbJ2F0dHJpYnV0ZSddWydzcmMnXSk7CgkJCQkJfQoJCQkJCWlmICghaXNzZXQoJHRhZ1snd2lkdGgnXSkpIHsKCQkJCQkJJHRhZ1snd2lkdGgnXSA9IDA7CgkJCQkJfQoJCQkJCWlmICghaXNzZXQoJHRhZ1snaGVpZ2h0J10pKSB7CgkJCQkJCSR0YWdbJ2hlaWdodCddID0gMDsKCQkJCQl9CgkJCQkJLy9pZiAoIWlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydhbGlnbiddKSkgewoJCQkJCQkvLyB0aGUgb25seSBhbGlnbm1lbnQgc3VwcG9ydGVkIGlzICJib3R0b20iCgkJCQkJCS8vIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgaXMgcmVxdWlyZWQgZm9yIG90aGVyIG1vZGVzLgoJCQkJCQkkdGFnWydhdHRyaWJ1dGUnXVsnYWxpZ24nXSA9ICdib3R0b20nOwoJCQkJCS8vfQoJCQkJCXN3aXRjaCgkdGFnWydhdHRyaWJ1dGUnXVsnYWxpZ24nXSkgewoJCQkJCQljYXNlICd0b3AnOiB7CgkJCQkJCQkkYWxpZ24gPSAnVCc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdtaWRkbGUnOiB7CgkJCQkJCQkkYWxpZ24gPSAnTSc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlICdib3R0b20nOiB7CgkJCQkJCQkkYWxpZ24gPSAnQic7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQlkZWZhdWx0OiB7CgkJCQkJCQkkYWxpZ24gPSAnQic7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCQkkcHJldnkgPSAkdGhpcy0+eTsKCQkJCQkkeHBvcyA9ICR0aGlzLT54OwoJCQkJCSRpbWdsaW5rID0gJyc7CgkJCQkJaWYgKGlzc2V0KCR0aGlzLT5IUkVGWyd1cmwnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+SFJFRlsndXJsJ10pKSB7CgkJCQkJCSRpbWdsaW5rID0gJHRoaXMtPkhSRUZbJ3VybCddOwoJCQkJCQlpZiAoJGltZ2xpbmtbMF0gPT0gJyMnKSB7CgkJCQkJCQkvLyBjb252ZXJ0IHVybCB0byBpbnRlcm5hbCBsaW5rCgkJCQkJCQkkbG5rZGF0YSA9IGV4cGxvZGUoJywnLCAkaW1nbGluayk7CgkJCQkJCQlpZiAoaXNzZXQoJGxua2RhdGFbMF0pKSB7CgkJCQkJCQkJJHBhZ2UgPSBpbnR2YWwoc3Vic3RyKCRsbmtkYXRhWzBdLCAxKSk7CgkJCQkJCQkJaWYgKGVtcHR5KCRwYWdlKSBPUiAoJHBhZ2UgPD0gMCkpIHsKCQkJCQkJCQkJJHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCQkJCQl9CgkJCQkJCQkJaWYgKGlzc2V0KCRsbmtkYXRhWzFdKSBBTkQgKHN0cmxlbigkbG5rZGF0YVsxXSkgPiAwKSkgewoJCQkJCQkJCQkkbG5reSA9IGZsb2F0dmFsKCRsbmtkYXRhWzFdKTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkbG5reSA9IDA7CgkJCQkJCQkJfQoJCQkJCQkJCSRpbWdsaW5rID0gJHRoaXMtPkFkZExpbmsoKTsKCQkJCQkJCQkkdGhpcy0+U2V0TGluaygkaW1nbGluaywgJGxua3ksICRwYWdlKTsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCX0KCQkJCQkkYm9yZGVyID0gMDsKCQkJCQlpZiAoaXNzZXQoJHRhZ1snYm9yZGVyJ10pIEFORCAhZW1wdHkoJHRhZ1snYm9yZGVyJ10pKSB7CgkJCQkJCS8vIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgMSAoZnJhbWUpIG9yIGEgY29tYmluYXRpb24gb2YgJ0xUUkInCgkJCQkJCSRib3JkZXIgPSAkdGFnWydib3JkZXInXTsKCQkJCQl9CgkJCQkJJGl3ID0gJyc7CgkJCQkJaWYgKGlzc2V0KCR0YWdbJ3dpZHRoJ10pKSB7CgkJCQkJCSRpdyA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRhZ1snd2lkdGgnXSwgMSwgJ3B4JywgZmFsc2UpOwoJCQkJCX0KCQkJCQkkaWggPSAnJzsKCQkJCQlpZiAoaXNzZXQoJHRhZ1snaGVpZ2h0J10pKSB7CgkJCQkJCSRpaCA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRhZ1snaGVpZ2h0J10sIDEsICdweCcsIGZhbHNlKTsKCQkJCQl9CgkJCQkJaWYgKCgkdHlwZSA9PSAnZXBzJykgT1IgKCR0eXBlID09ICdhaScpKSB7CgkJCQkJCSR0aGlzLT5JbWFnZUVwcygkdGFnWydhdHRyaWJ1dGUnXVsnc3JjJ10sICR4cG9zLCAkdGhpcy0+eSwgJGl3LCAkaWgsICRpbWdsaW5rLCB0cnVlLCAkYWxpZ24sICcnLCAkYm9yZGVyLCB0cnVlKTsKCQkJCQl9IGVsc2VpZiAoJHR5cGUgPT0gJ3N2ZycpIHsKCQkJCQkJJHRoaXMtPkltYWdlU1ZHKCR0YWdbJ2F0dHJpYnV0ZSddWydzcmMnXSwgJHhwb3MsICR0aGlzLT55LCAkaXcsICRpaCwgJGltZ2xpbmssICRhbGlnbiwgJycsICRib3JkZXIsIHRydWUpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT5JbWFnZSgkdGFnWydhdHRyaWJ1dGUnXVsnc3JjJ10sICR4cG9zLCAkdGhpcy0+eSwgJGl3LCAkaWgsICcnLCAkaW1nbGluaywgJGFsaWduLCBmYWxzZSwgMzAwLCAnJywgZmFsc2UsIGZhbHNlLCAkYm9yZGVyLCBmYWxzZSwgZmFsc2UsIHRydWUpOwoJCQkJCX0KCQkJCQlzd2l0Y2goJGFsaWduKSB7CgkJCQkJCWNhc2UgJ1QnOiB7CgkJCQkJCQkkdGhpcy0+eSA9ICRwcmV2eTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ00nOiB7CgkJCQkJCQkkdGhpcy0+eSA9ICgoJHRoaXMtPmltZ19yYl95ICsgJHByZXZ5IC0gKCR0YWdbJ2ZvbnRzaXplJ10gLyAkdGhpcy0+aykpIC8gMikgOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnQic6IHsKCQkJCQkJCSR0aGlzLT55ID0gJHRoaXMtPmltZ19yYl95IC0gKCR0YWdbJ2ZvbnRzaXplJ10gLyAkdGhpcy0+ayk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2RsJzogewoJCQkJKyskdGhpcy0+bGlzdG51bTsKCQkJCWlmICgkdGhpcy0+bGlzdG51bSA9PSAxKSB7CgkJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoJGhieiwgJGhiLCAkY2VsbCwgJGZpcnN0dGFnKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoMCwgMCwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdkdCc6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdkZCc6IHsKCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJJHRoaXMtPnJNYXJnaW4gKz0gJHRoaXMtPmxpc3RpbmRlbnQ7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5sTWFyZ2luICs9ICR0aGlzLT5saXN0aW5kZW50OwoJCQkJfQoJCQkJKyskdGhpcy0+bGlzdGluZGVudGxldmVsOwoJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoJGhieiwgJGhiLCAkY2VsbCwgJGZpcnN0dGFnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3VsJzoKCQkJY2FzZSAnb2wnOiB7CgkJCQkrKyR0aGlzLT5saXN0bnVtOwoJCQkJaWYgKCR0YWdbJ3ZhbHVlJ10gPT0gJ29sJykgewoJCQkJCSR0aGlzLT5saXN0b3JkZXJlZFskdGhpcy0+bGlzdG51bV0gPSB0cnVlOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+bGlzdG9yZGVyZWRbJHRoaXMtPmxpc3RudW1dID0gZmFsc2U7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ3N0YXJ0J10pKSB7CgkJCQkJJHRoaXMtPmxpc3Rjb3VudFskdGhpcy0+bGlzdG51bV0gPSBpbnR2YWwoJHRhZ1snYXR0cmlidXRlJ11bJ3N0YXJ0J10pIC0gMTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmxpc3Rjb3VudFskdGhpcy0+bGlzdG51bV0gPSAwOwoJCQkJfQoJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkkdGhpcy0+ck1hcmdpbiArPSAkdGhpcy0+bGlzdGluZGVudDsKCQkJCQkkdGhpcy0+eCAtPSAkdGhpcy0+bGlzdGluZGVudDsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmxNYXJnaW4gKz0gJHRoaXMtPmxpc3RpbmRlbnQ7CgkJCQkJJHRoaXMtPnggKz0gJHRoaXMtPmxpc3RpbmRlbnQ7CgkJCQl9CgkJCQkrKyR0aGlzLT5saXN0aW5kZW50bGV2ZWw7CgkJCQlpZiAoJHRoaXMtPmxpc3RudW0gPT0gMSkgewoJCQkJCWlmICgka2V5ID4gMSkgewoJCQkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAkaGIsICRjZWxsLCAkZmlyc3R0YWcpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoMCwgMCwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdsaSc6IHsKCQkJCWlmICgka2V5ID4gMikgewoJCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQl9CgkJCQlpZiAoJHRoaXMtPmxpc3RvcmRlcmVkWyR0aGlzLT5saXN0bnVtXSkgewoJCQkJCS8vIG9yZGVyZWQgaXRlbQoJCQkJCWlmIChpc3NldCgkcGFyZW50WydhdHRyaWJ1dGUnXVsndHlwZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRwYXJlbnRbJ2F0dHJpYnV0ZSddWyd0eXBlJ10pKSB7CgkJCQkJCSR0aGlzLT5saXNwYWNlciA9ICRwYXJlbnRbJ2F0dHJpYnV0ZSddWyd0eXBlJ107CgkJCQkJfSBlbHNlaWYgKGlzc2V0KCRwYXJlbnRbJ2xpc3R0eXBlJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHBhcmVudFsnbGlzdHR5cGUnXSkpIHsKCQkJCQkJJHRoaXMtPmxpc3BhY2VyID0gJHBhcmVudFsnbGlzdHR5cGUnXTsKCQkJCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmxpc3ltYm9sKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5saXN5bWJvbCkpIHsKCQkJCQkJJHRoaXMtPmxpc3BhY2VyID0gJHRoaXMtPmxpc3ltYm9sOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0aGlzLT5saXNwYWNlciA9ICcjJzsKCQkJCQl9CgkJCQkJKyskdGhpcy0+bGlzdGNvdW50WyR0aGlzLT5saXN0bnVtXTsKCQkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ3ZhbHVlJ10pKSB7CgkJCQkJCSR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dID0gaW50dmFsKCR0YWdbJ2F0dHJpYnV0ZSddWyd2YWx1ZSddKTsKCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCS8vIHVub3JkZXJlZCBpdGVtCgkJCQkJaWYgKGlzc2V0KCRwYXJlbnRbJ2F0dHJpYnV0ZSddWyd0eXBlJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHBhcmVudFsnYXR0cmlidXRlJ11bJ3R5cGUnXSkpIHsKCQkJCQkJJHRoaXMtPmxpc3BhY2VyID0gJHBhcmVudFsnYXR0cmlidXRlJ11bJ3R5cGUnXTsKCQkJCQl9IGVsc2VpZiAoaXNzZXQoJHBhcmVudFsnbGlzdHR5cGUnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcGFyZW50WydsaXN0dHlwZSddKSkgewoJCQkJCQkkdGhpcy0+bGlzcGFjZXIgPSAkcGFyZW50WydsaXN0dHlwZSddOwoJCQkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+bGlzeW1ib2wpIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPmxpc3ltYm9sKSkgewoJCQkJCQkkdGhpcy0+bGlzcGFjZXIgPSAkdGhpcy0+bGlzeW1ib2w7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPmxpc3BhY2VyID0gJyEnOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2Jsb2NrcXVvdGUnOiB7CgkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCSR0aGlzLT5yTWFyZ2luICs9ICR0aGlzLT5saXN0aW5kZW50OwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+bE1hcmdpbiArPSAkdGhpcy0+bGlzdGluZGVudDsKCQkJCX0KCQkJCSsrJHRoaXMtPmxpc3RpbmRlbnRsZXZlbDsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdicic6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdkaXYnOiB7CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAkaGIsICRjZWxsLCAkZmlyc3R0YWcpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAncCc6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdwcmUnOiB7CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAkaGIsICRjZWxsLCAkZmlyc3R0YWcpOwoJCQkJJHRoaXMtPnByZW1vZGUgPSB0cnVlOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnc3VwJzogewoJCQkJJHRoaXMtPlNldFhZKCR0aGlzLT5HZXRYKCksICR0aGlzLT5HZXRZKCkgLSAoKDAuNyAqICR0aGlzLT5Gb250U2l6ZVB0KSAvICR0aGlzLT5rKSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdzdWInOiB7CgkJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPkdldFgoKSwgJHRoaXMtPkdldFkoKSArICgoMC4zICogJHRoaXMtPkZvbnRTaXplUHQpIC8gJHRoaXMtPmspKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2gxJzoKCQkJY2FzZSAnaDInOgoJCQljYXNlICdoMyc6CgkJCWNhc2UgJ2g0JzoKCQkJY2FzZSAnaDUnOgoJCQljYXNlICdoNic6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsICRmaXJzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBGb3JtIGZpZWxkcyAoc2luY2UgNC44LjAwMCAtIDIwMDktMDktMDcpCgkJCWNhc2UgJ2Zvcm0nOiB7CgkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ2FjdGlvbiddKSkgewoJCQkJCSR0aGlzLT5mb3JtX2FjdGlvbiA9ICR0YWdbJ2F0dHJpYnV0ZSddWydhY3Rpb24nXTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPkVycm9yKCdQbGVhc2UgZXhwbGljaXRseSBzZXQgYWN0aW9uIGF0dHJpYnV0ZSBwYXRoIScpOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydlbmN0eXBlJ10pKSB7CgkJCQkJJHRoaXMtPmZvcm1fZW5jdHlwZSA9ICR0YWdbJ2F0dHJpYnV0ZSddWydlbmN0eXBlJ107CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5mb3JtX2VuY3R5cGUgPSAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkJzsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnbWV0aG9kJ10pKSB7CgkJCQkJJHRoaXMtPmZvcm1fbW9kZSA9ICR0YWdbJ2F0dHJpYnV0ZSddWydtZXRob2QnXTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmZvcm1fbW9kZSA9ICdwb3N0JzsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2lucHV0JzogewoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWyduYW1lJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRhZ1snYXR0cmlidXRlJ11bJ25hbWUnXSkpIHsKCQkJCQkkbmFtZSA9ICR0YWdbJ2F0dHJpYnV0ZSddWyduYW1lJ107CgkJCQl9IGVsc2UgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJHByb3AgPSBhcnJheSgpOwoJCQkJJG9wdCA9IGFycmF5KCk7CgkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ3JlYWRvbmx5J10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRhZ1snYXR0cmlidXRlJ11bJ3JlYWRvbmx5J10pKSB7CgkJCQkJJHByb3BbJ3JlYWRvbmx5J10gPSB0cnVlOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWyd2YWx1ZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWyd2YWx1ZSddKSkgewoJCQkJCSR2YWx1ZSA9ICR0YWdbJ2F0dHJpYnV0ZSddWyd2YWx1ZSddOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydtYXhsZW5ndGgnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGFnWydhdHRyaWJ1dGUnXVsnbWF4bGVuZ3RoJ10pKSB7CgkJCQkJJG9wdFsnbWF4bGVuJ10gPSBpbnR2YWwoJHRhZ1snYXR0cmlidXRlJ11bJ21heGxlbmd0aCddKTsKCQkJCX0KCQkJCSRoID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHRoaXMtPkZvbnRTaXplKTsKCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnc2l6ZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWydzaXplJ10pKSB7CgkJCQkJJHcgPSBpbnR2YWwoJHRhZ1snYXR0cmlidXRlJ11bJ3NpemUnXSkgKiAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoY2hyKDMyKSkgKiAyOwoJCQkJfSBlbHNlIHsKCQkJCQkkdyA9ICRoOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydjaGVja2VkJ10pIEFORCAoKCR0YWdbJ2F0dHJpYnV0ZSddWydjaGVja2VkJ10gPT0gJ2NoZWNrZWQnKSBPUiAoJHRhZ1snYXR0cmlidXRlJ11bJ2NoZWNrZWQnXSA9PSAndHJ1ZScpKSkgewoJCQkJCSRjaGVja2VkID0gdHJ1ZTsKCQkJCX0gZWxzZSB7CgkJCQkJJGNoZWNrZWQgPSBmYWxzZTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhbGlnbiddKSkgewoJCQkJCXN3aXRjaCAoJHRhZ1snYWxpZ24nXSkgewoJCQkJCQljYXNlICdDJzogewoJCQkJCQkJJG9wdFsncSddID0gMTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ1InOiB7CgkJCQkJCQkkb3B0WydxJ10gPSAyOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAnTCc6CgkJCQkJCWRlZmF1bHQ6IHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJc3dpdGNoICgkdGFnWydhdHRyaWJ1dGUnXVsndHlwZSddKSB7CgkJCQkJY2FzZSAndGV4dCc6IHsKCQkJCQkJaWYgKGlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCSRvcHRbJ3YnXSA9ICR2YWx1ZTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+VGV4dEZpZWxkKCRuYW1lLCAkdywgJGgsICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ3Bhc3N3b3JkJzogewoJCQkJCQlpZiAoaXNzZXQoJHZhbHVlKSkgewoJCQkJCQkJJG9wdFsndiddID0gJHZhbHVlOwoJCQkJCQl9CgkJCQkJCSRwcm9wWydwYXNzd29yZCddID0gJ3RydWUnOwoJCQkJCQkkdGhpcy0+VGV4dEZpZWxkKCRuYW1lLCAkdywgJGgsICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ2NoZWNrYm94JzogewoJCQkJCQlpZiAoIWlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCSR0aGlzLT5DaGVja0JveCgkbmFtZSwgJHcsICRjaGVja2VkLCAkcHJvcCwgJG9wdCwgJHZhbHVlLCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ3JhZGlvJzogewoJCQkJCQlpZiAoIWlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCSR0aGlzLT5SYWRpb0J1dHRvbigkbmFtZSwgJHcsICRwcm9wLCAkb3B0LCAkdmFsdWUsICRjaGVja2VkLCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ3N1Ym1pdCc6IHsKCQkJCQkJaWYgKCFpc3NldCgkdmFsdWUpKSB7CgkJCQkJCQkkdmFsdWUgPSAnc3VibWl0JzsKCQkJCQkJfQoJCQkJCQkkdyA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdmFsdWUpICogMS41OwoJCQkJCQkkaCAqPSAxLjY7CgkJCQkJCSRwcm9wID0gYXJyYXkoJ2xpbmVXaWR0aCc9PjEsICdib3JkZXJTdHlsZSc9PidiZXZlbGVkJywgJ2ZpbGxDb2xvcic9PmFycmF5KDE5NiwgMTk2LCAxOTYpLCAnc3Ryb2tlQ29sb3InPT5hcnJheSgyNTUsIDI1NSwgMjU1KSk7CgkJCQkJCSRhY3Rpb24gPSBhcnJheSgpOwoJCQkJCQkkYWN0aW9uWydTJ10gPSAnU3VibWl0Rm9ybSc7CgkJCQkJCSRhY3Rpb25bJ0YnXSA9ICR0aGlzLT5mb3JtX2FjdGlvbjsKCQkJCQkJaWYgKCR0aGlzLT5mb3JtX2VuY3R5cGUgIT0gJ0ZERicpIHsKCQkJCQkJCSRhY3Rpb25bJ0ZsYWdzJ10gPSBhcnJheSgnRXhwb3J0Rm9ybWF0Jyk7CgkJCQkJCX0KCQkJCQkJaWYgKCR0aGlzLT5mb3JtX21vZGUgPT0gJ2dldCcpIHsKCQkJCQkJCSRhY3Rpb25bJ0ZsYWdzJ10gPSBhcnJheSgnR2V0TWV0aG9kJyk7CgkJCQkJCX0KCQkJCQkJJHRoaXMtPkJ1dHRvbigkbmFtZSwgJHcsICRoLCAkdmFsdWUsICRhY3Rpb24sICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ3Jlc2V0JzogewoJCQkJCQlpZiAoIWlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCSR2YWx1ZSA9ICdyZXNldCc7CgkJCQkJCX0KCQkJCQkJJHcgPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHZhbHVlKSAqIDEuNTsKCQkJCQkJJGggKj0gMS42OwoJCQkJCQkkcHJvcCA9IGFycmF5KCdsaW5lV2lkdGgnPT4xLCAnYm9yZGVyU3R5bGUnPT4nYmV2ZWxlZCcsICdmaWxsQ29sb3InPT5hcnJheSgxOTYsIDE5NiwgMTk2KSwgJ3N0cm9rZUNvbG9yJz0+YXJyYXkoMjU1LCAyNTUsIDI1NSkpOwoJCQkJCQkkdGhpcy0+QnV0dG9uKCRuYW1lLCAkdywgJGgsICR2YWx1ZSwgYXJyYXkoJ1MnPT4nUmVzZXRGb3JtJyksICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgJ2ZpbGUnOiB7CgkJCQkJCSRwcm9wWydmaWxlU2VsZWN0J10gPSAndHJ1ZSc7CgkJCQkJCSR0aGlzLT5UZXh0RmllbGQoJG5hbWUsICR3LCAkaCwgJHByb3AsICRvcHQsICcnLCAnJywgZmFsc2UpOwoJCQkJCQlpZiAoIWlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCSR2YWx1ZSA9ICcqJzsKCQkJCQkJfQoJCQkJCQkkdyA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdmFsdWUpICogMjsKCQkJCQkJJGggKj0gMS4yOwoJCQkJCQkkcHJvcCA9IGFycmF5KCdsaW5lV2lkdGgnPT4xLCAnYm9yZGVyU3R5bGUnPT4nYmV2ZWxlZCcsICdmaWxsQ29sb3InPT5hcnJheSgxOTYsIDE5NiwgMTk2KSwgJ3N0cm9rZUNvbG9yJz0+YXJyYXkoMjU1LCAyNTUsIDI1NSkpOwoJCQkJCQkkanNhY3Rpb24gPSAndmFyIGY9dGhpcy5nZXRGaWVsZChcJycuJG5hbWUuJ1wnKTsgZi5icm93c2VGb3JGaWxlVG9TdWJtaXQoKTsnOwoJCQkJCQkkdGhpcy0+QnV0dG9uKCdGQl8nLiRuYW1lLCAkdywgJGgsICR2YWx1ZSwgJGpzYWN0aW9uLCAkcHJvcCwgJG9wdCwgJycsICcnLCBmYWxzZSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdoaWRkZW4nOiB7CgkJCQkJCWlmIChpc3NldCgkdmFsdWUpKSB7CgkJCQkJCQkkb3B0Wyd2J10gPSAkdmFsdWU7CgkJCQkJCX0KCQkJCQkJJG9wdFsnZiddID0gYXJyYXkoJ2ludmlzaWJsZScsICdoaWRkZW4nKTsKCQkJCQkJJHRoaXMtPlRleHRGaWVsZCgkbmFtZSwgMCwgMCwgJHByb3AsICRvcHQsICcnLCAnJywgZmFsc2UpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnaW1hZ2UnOiB7CgkJCQkJCS8vIFRISVMgVFlQRSBNVVNUIEJFIEZJWEVECgkJCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnc3JjJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRhZ1snYXR0cmlidXRlJ11bJ3NyYyddKSkgewoJCQkJCQkJJGltZyA9ICR0YWdbJ2F0dHJpYnV0ZSddWydzcmMnXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCSR2YWx1ZSA9ICdpbWcnOwoJCQkJCQkvLyRvcHRbJ21rJ10gPSBhcnJheSgnaSc9PiRpbWcsICd0cCc9PjEsICdpZic9PmFycmF5KCdzdyc9PidBJywgJ3MnPT4nQScsICdmYic9PmZhbHNlKSk7CgkJCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnb25jbGljayddKSBBTkQgIWVtcHR5KCR0YWdbJ2F0dHJpYnV0ZSddWydvbmNsaWNrJ10pKSB7CgkJCQkJCQkkanNhY3Rpb24gPSAkdGFnWydhdHRyaWJ1dGUnXVsnb25jbGljayddOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGpzYWN0aW9uID0gJyc7CgkJCQkJCX0KCQkJCQkJJHRoaXMtPkJ1dHRvbigkbmFtZSwgJHcsICRoLCAkdmFsdWUsICRqc2FjdGlvbiwgJHByb3AsICRvcHQsICcnLCAnJywgZmFsc2UpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAnYnV0dG9uJzogewoJCQkJCQlpZiAoIWlzc2V0KCR2YWx1ZSkpIHsKCQkJCQkJCSR2YWx1ZSA9ICcgJzsKCQkJCQkJfQoJCQkJCQkkdyA9ICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdmFsdWUpICogMS41OwoJCQkJCQkkaCAqPSAxLjY7CgkJCQkJCSRwcm9wID0gYXJyYXkoJ2xpbmVXaWR0aCc9PjEsICdib3JkZXJTdHlsZSc9PidiZXZlbGVkJywgJ2ZpbGxDb2xvcic9PmFycmF5KDE5NiwgMTk2LCAxOTYpLCAnc3Ryb2tlQ29sb3InPT5hcnJheSgyNTUsIDI1NSwgMjU1KSk7CgkJCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnb25jbGljayddKSBBTkQgIWVtcHR5KCR0YWdbJ2F0dHJpYnV0ZSddWydvbmNsaWNrJ10pKSB7CgkJCQkJCQkkanNhY3Rpb24gPSAkdGFnWydhdHRyaWJ1dGUnXVsnb25jbGljayddOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJGpzYWN0aW9uID0gJyc7CgkJCQkJCX0KCQkJCQkJJHRoaXMtPkJ1dHRvbigkbmFtZSwgJHcsICRoLCAkdmFsdWUsICRqc2FjdGlvbiwgJHByb3AsICRvcHQsICcnLCAnJywgZmFsc2UpOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICd0ZXh0YXJlYSc6IHsKCQkJCSRwcm9wID0gYXJyYXkoKTsKCQkJCSRvcHQgPSBhcnJheSgpOwoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydyZWFkb25seSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWydyZWFkb25seSddKSkgewoJCQkJCSRwcm9wWydyZWFkb25seSddID0gdHJ1ZTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnbmFtZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWyduYW1lJ10pKSB7CgkJCQkJJG5hbWUgPSAkdGFnWydhdHRyaWJ1dGUnXVsnbmFtZSddOwoJCQkJfSBlbHNlIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsndmFsdWUnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGFnWydhdHRyaWJ1dGUnXVsndmFsdWUnXSkpIHsKCQkJCQkkb3B0Wyd2J10gPSAkdGFnWydhdHRyaWJ1dGUnXVsndmFsdWUnXTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnY29scyddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWydjb2xzJ10pKSB7CgkJCQkJJHcgPSBpbnR2YWwoJHRhZ1snYXR0cmlidXRlJ11bJ2NvbHMnXSkgKiAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoY2hyKDMyKSkgKiAyOwoJCQkJfSBlbHNlIHsKCQkJCQkkdyA9IDQwOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydyb3dzJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRhZ1snYXR0cmlidXRlJ11bJ3Jvd3MnXSkpIHsKCQkJCQkkaCA9IGludHZhbCgkdGFnWydhdHRyaWJ1dGUnXVsncm93cyddKSAqICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCQl9IGVsc2UgewoJCQkJCSRoID0gMTA7CgkJCQl9CgkJCQkkcHJvcFsnbXVsdGlsaW5lJ10gPSAndHJ1ZSc7CgkJCQkkdGhpcy0+VGV4dEZpZWxkKCRuYW1lLCAkdywgJGgsICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3NlbGVjdCc6IHsKCQkJCSRoID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHRoaXMtPkZvbnRTaXplKTsKCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnc2l6ZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0YWdbJ2F0dHJpYnV0ZSddWydzaXplJ10pKSB7CgkJCQkJJGggKj0gKCR0YWdbJ2F0dHJpYnV0ZSddWydzaXplJ10gKyAxKTsKCQkJCX0KCQkJCSRwcm9wID0gYXJyYXkoKTsKCQkJCSRvcHQgPSBhcnJheSgpOwoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWyduYW1lJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRhZ1snYXR0cmlidXRlJ11bJ25hbWUnXSkpIHsKCQkJCQkkbmFtZSA9ICR0YWdbJ2F0dHJpYnV0ZSddWyduYW1lJ107CgkJCQl9IGVsc2UgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJHcgPSAwOwoJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydvcHQnXSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGFnWydhdHRyaWJ1dGUnXVsnb3B0J10pKSB7CgkJCQkJJG9wdGlvbnMgPSBleHBsb2RlKCcjIU53TCEjJywgJHRhZ1snYXR0cmlidXRlJ11bJ29wdCddKTsKCQkJCQkkdmFsdWVzID0gYXJyYXkoKTsKCQkJCQlmb3JlYWNoICgkb3B0aW9ucyBhcyAkdmFsKSB7CgkJCQkJCWlmIChzdHJwb3MoJHZhbCwgJyMhVGFCISMnKSAhPT0gZmFsc2UpIHsKCQkJCQkJCSRvcHRzID0gZXhwbG9kZSgnIyFUYUIhIycsICR2YWwpOwoJCQkJCQkJJHZhbHVlc1tdID0gJG9wdHM7CgkJCQkJCQkkdyA9IG1heCgkdywgJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRvcHRzWzFdKSk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdmFsdWVzW10gPSAkdmFsOwoJCQkJCQkJJHcgPSBtYXgoJHcsICR0aGlzLT5HZXRTdHJpbmdXaWR0aCgkdmFsKSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9IGVsc2UgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJHcgKj0gMjsKCQkJCWlmIChpc3NldCgkdGFnWydhdHRyaWJ1dGUnXVsnbXVsdGlwbGUnXSkgQU5EICgkdGFnWydhdHRyaWJ1dGUnXVsnbXVsdGlwbGUnXT0nbXVsdGlwbGUnKSkgewoJCQkJCSRwcm9wWydtdWx0aXBsZVNlbGVjdGlvbiddID0gJ3RydWUnOwoJCQkJCSR0aGlzLT5MaXN0Qm94KCRuYW1lLCAkdywgJGgsICR2YWx1ZXMsICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPkNvbWJvQm94KCRuYW1lLCAkdywgJGgsICR2YWx1ZXMsICRwcm9wLCAkb3B0LCAnJywgJycsIGZhbHNlKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3RjcGRmJzogewoJCQkJaWYgKGRlZmluZWQoJ0tfVENQREZfQ0FMTFNfSU5fSFRNTCcpIEFORCAoS19UQ1BERl9DQUxMU19JTl9IVE1MID09PSB0cnVlKSkgewoJCQkJCS8vIFNwZWNpYWwgdGFnIHVzZWQgdG8gY2FsbCBUQ1BERiBtZXRob2RzCgkJCQkJaWYgKGlzc2V0KCR0YWdbJ2F0dHJpYnV0ZSddWydtZXRob2QnXSkpIHsKCQkJCQkJJHRjcGRmX21ldGhvZCA9ICR0YWdbJ2F0dHJpYnV0ZSddWydtZXRob2QnXTsKCQkJCQkJaWYgKG1ldGhvZF9leGlzdHMoJHRoaXMsICR0Y3BkZl9tZXRob2QpKSB7CgkJCQkJCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ3BhcmFtcyddKSBBTkQgKCFlbXB0eSgkdGFnWydhdHRyaWJ1dGUnXVsncGFyYW1zJ10pKSkgewoJCQkJCQkJCSRwYXJhbXMgPSB1bnNlcmlhbGl6ZSh1cmxkZWNvZGUoJHRhZ1snYXR0cmlidXRlJ11bJ3BhcmFtcyddKSk7CgkJCQkJCQkJY2FsbF91c2VyX2Z1bmNfYXJyYXkoYXJyYXkoJHRoaXMsICR0Y3BkZl9tZXRob2QpLCAkcGFyYW1zKTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHRoaXMtPiR0Y3BkZl9tZXRob2QoKTsKCQkJCQkJCX0KCQkJCQkJCSR0aGlzLT5uZXdsaW5lID0gdHJ1ZTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCS8vIGRlZmluZSB0YWdzIHRoYXQgc3VwcG9ydCBib3JkZXJzIGFuZCBiYWNrZ3JvdW5kIGNvbG9ycwoJCSRib3JkZXJ0YWdzID0gYXJyYXkoJ2Jsb2NrcXVvdGUnLCdicicsJ2RkJywnZGwnLCdkaXYnLCdkdCcsJ2gxJywnaDInLCdoMycsJ2g0JywnaDUnLCdoNicsJ2hyJywnbGknLCdvbCcsJ3AnLCdwcmUnLCd1bCcsJ3RjcGRmJywndGFibGUnKTsKCQlpZiAoaW5fYXJyYXkoJHRhZ1sndmFsdWUnXSwgJGJvcmRlcnRhZ3MpKSB7CgkJCS8vIHNldCBib3JkZXIKCQkJJGRvbVska2V5XVsnYm9yZGVycG9zaXRpb24nXSA9ICR0aGlzLT5nZXRCb3JkZXJTdGFydFBvc2l0aW9uKCk7CgkJfQoJCWlmICgkZG9tWyRrZXldWydzZWxmJ10gQU5EIGlzc2V0KCRkb21bJGtleV1bJ2F0dHJpYnV0ZSddWydwYWdlYnJlYWthZnRlciddKSkgewoJCQkkcGJhID0gJGRvbVska2V5XVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVha2FmdGVyJ107CgkJCS8vIGNoZWNrIGZvciBwYWdlYnJlYWsKCQkJaWYgKCgkcGJhID09ICd0cnVlJykgT1IgKCRwYmEgPT0gJ2xlZnQnKSBPUiAoJHBiYSA9PSAncmlnaHQnKSkgewoJCQkJLy8gYWRkIGEgcGFnZSAob3IgdHJpZyBBY2NlcHRQYWdlQnJlYWsoKSBmb3IgbXVsdGljb2x1bW4gbW9kZSkKCQkJCSR0aGlzLT5jaGVja1BhZ2VCcmVhaygkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlciArIDEpOwoJCQl9CgkJCWlmICgoKCRwYmEgPT0gJ2xlZnQnKSBBTkQgKCgoISR0aGlzLT5ydGwpIEFORCAoKCR0aGlzLT5wYWdlICUgMikgPT0gMCkpIE9SICgoJHRoaXMtPnJ0bCkgQU5EICgoJHRoaXMtPnBhZ2UgJSAyKSAhPSAwKSkpKQoJCQkJT1IgKCgkcGJhID09ICdyaWdodCcpIEFORCAoKCghJHRoaXMtPnJ0bCkgQU5EICgoJHRoaXMtPnBhZ2UgJSAyKSAhPSAwKSkgT1IgKCgkdGhpcy0+cnRsKSBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpID09IDApKSkpKSB7CgkJCQkvLyBhZGQgYSBwYWdlIChvciB0cmlnIEFjY2VwdFBhZ2VCcmVhaygpIGZvciBtdWx0aWNvbHVtbiBtb2RlKQoJCQkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyICsgMSk7CgkJCX0KCQl9CgkJcmV0dXJuICRkb207Cgl9CgoJLyoqCgkgKiBQcm9jZXNzIGNsb3NpbmcgdGFncy4KCSAqIEBwYXJhbSAkZG9tIChhcnJheSkgaHRtbCBkb20gYXJyYXkKCSAqIEBwYXJhbSAka2V5IChpbnQpIGN1cnJlbnQgZWxlbWVudCBpZAoJICogQHBhcmFtICRjZWxsIChib29sZWFuKSBpZiB0cnVlIGFkZCB0aGUgZGVmYXVsdCBsZWZ0IChvciByaWdodCBpZiBSVEwpIHBhZGRpbmcgdG8gZWFjaCBuZXcgbGluZSAoZGVmYXVsdCBmYWxzZSkuCgkgKiBAcGFyYW0gJG1heGJvdHRvbWxpbmV5IChpbnQpIG1heGltdW0geSB2YWx1ZSBvZiBjdXJyZW50IGxpbmUKCSAqIEByZXR1cm4gJGRvbSBhcnJheQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gY2xvc2VIVE1MVGFnSGFuZGxlcigkZG9tLCAka2V5LCAkY2VsbCwgJG1heGJvdHRvbWxpbmV5PTApIHsKCQkkdGFnID0gJGRvbVska2V5XTsKCQkkcGFyZW50ID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXTsKCQkkbGFzdHRhZyA9ICgoIWlzc2V0KCRkb21bKCRrZXkgKyAxKV0pKSBPUiAoKCFpc3NldCgkZG9tWygka2V5ICsgMildKSkgQU5EICgkZG9tWygka2V5ICsgMSldWyd2YWx1ZSddID09ICdtYXJrZXInKSkpOwoJCSRpbl90YWJsZV9oZWFkID0gZmFsc2U7CgkJLy8gbWF4aW11bSB4IHBvc2l0aW9uICh1c2VkIHRvIGRyYXcgYm9yZGVycykKCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkkeG1heCA9ICR0aGlzLT53OwoJCX0gZWxzZSB7CgkJCSR4bWF4ID0gMDsKCQl9CgkJaWYgKCR0YWdbJ2Jsb2NrJ10pIHsKCQkJJGhieiA9IDA7IC8vIGRpc3RhbmNlIGZyb20geSB0byBsaW5lIGJvdHRvbQoJCQkkaGIgPSAwOyAvLyB2ZXJ0aWNhbCBzcGFjZSBiZXR3ZWVuIGJsb2NrIHRhZ3MKCQkJLy8gY2FsY3VsYXRlIHZlcnRpY2FsIHNwYWNlIGZvciBibG9jayB0YWdzCgkJCWlmIChpc3NldCgkdGhpcy0+dGFndnNwYWNlc1skdGFnWyd2YWx1ZSddXVsxXVsnaCddKSBBTkQgKCR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzFdWydoJ10gPj0gMCkpIHsKCQkJCSRwcmVfaCA9ICR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzFdWydoJ107CgkJCX0gZWxzZWlmIChpc3NldCgkcGFyZW50Wydmb250c2l6ZSddKSkgewoJCQkJJHByZV9oID0gJHRoaXMtPmdldENlbGxIZWlnaHQoJHBhcmVudFsnZm9udHNpemUnXSAvICR0aGlzLT5rKTsKCQkJfSBlbHNlIHsKCQkJCSRwcmVfaCA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzFdWyduJ10pKSB7CgkJCQkkbiA9ICR0aGlzLT50YWd2c3BhY2VzWyR0YWdbJ3ZhbHVlJ11dWzFdWyduJ107CgkJCX0gZWxzZWlmIChwcmVnX21hdGNoKCcvW2hdWzAtOV0vJywgJHRhZ1sndmFsdWUnXSkgPiAwKSB7CgkJCQkkbiA9IDAuNjsKCQkJfSBlbHNlIHsKCQkJCSRuID0gMTsKCQkJfQoJCQlpZiAoKCFpc3NldCgkdGhpcy0+dGFndnNwYWNlc1skdGFnWyd2YWx1ZSddXSkpIEFORCAoJHRhZ1sndmFsdWUnXSA9PSAnZGl2JykpIHsKCQkJCSRoYiA9IDA7CgkJCX0gZWxzZSB7CgkJCQkkaGIgPSAoJG4gKiAkcHJlX2gpOwoJCQl9CgkJCWlmICgkbWF4Ym90dG9tbGluZXkgPiAkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlcikgewoJCQkJJGhieiA9ICR0aGlzLT5nZXRDZWxsSGVpZ2h0KCR0aGlzLT5Gb250U2l6ZSk7CgkJCX0gZWxzZWlmICgkdGhpcy0+eSA8ICRtYXhib3R0b21saW5leSkgewoJCQkJJGhieiA9ICgkbWF4Ym90dG9tbGluZXkgLSAkdGhpcy0+eSk7CgkJCX0KCQl9CgkJLy8gQ2xvc2luZyB0YWcKCQlzd2l0Y2goJHRhZ1sndmFsdWUnXSkgewoJCQljYXNlICd0cic6IHsKCQkJCSR0YWJsZV9lbCA9ICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3BhcmVudCddOwoJCQkJaWYgKCFpc3NldCgkcGFyZW50WydlbmR5J10pKSB7CgkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5keSddID0gJHRoaXMtPnk7CgkJCQkJJHBhcmVudFsnZW5keSddID0gJHRoaXMtPnk7CgkJCQl9CgkJCQlpZiAoIWlzc2V0KCRwYXJlbnRbJ2VuZHBhZ2UnXSkpIHsKCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmRwYWdlJ10gPSAkdGhpcy0+cGFnZTsKCQkJCQkkcGFyZW50WydlbmRwYWdlJ10gPSAkdGhpcy0+cGFnZTsKCQkJCX0KCQkJCWlmICghaXNzZXQoJHBhcmVudFsnZW5kY29sdW1uJ10pKSB7CgkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5kY29sdW1uJ10gPSAkdGhpcy0+Y3VycmVudF9jb2x1bW47CgkJCQkJJHBhcmVudFsnZW5kY29sdW1uJ10gPSAkdGhpcy0+Y3VycmVudF9jb2x1bW47CgkJCQl9CgkJCQkvLyB1cGRhdGUgcm93LXNwYW5uZWQgY2VsbHMKCQkJCWlmIChpc3NldCgkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ10pKSB7CgkJCQkJZm9yZWFjaCAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddIGFzICRrID0+ICR0cndzcCkgewoJCQkJCQkkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydyb3dzcGFuJ10gLT0gMTsKCQkJCQkJaWYgKCRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ3Jvd3NwYW4nXSA9PSAwKSB7CgkJCQkJCQlpZiAoKCRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHBhZ2UnXSA9PSAkcGFyZW50WydlbmRwYWdlJ10pIEFORCAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kY29sdW1uJ10gPT0gJHBhcmVudFsnZW5kY29sdW1uJ10pKSB7CgkJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5keSddID0gbWF4KCRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHknXSwgJHBhcmVudFsnZW5keSddKTsKCQkJCQkJCX0gZWxzZWlmICgoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kcGFnZSddID4gJHBhcmVudFsnZW5kcGFnZSddKSBPUiAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kY29sdW1uJ10gPiAkcGFyZW50WydlbmRjb2x1bW4nXSkpIHsKCQkJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmR5J10gPSAkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmR5J107CgkJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5kcGFnZSddID0gJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kcGFnZSddOwoJCQkJCQkJCSRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2VuZGNvbHVtbiddID0gJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsnZW5kY29sdW1uJ107CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gcmVwb3J0IG5ldyBlbmR5IGFuZCBlbmRwYWdlIHRvIHRoZSByb3dzcGFubmVkIGNlbGxzCgkJCQkJZm9yZWFjaCAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddIGFzICRrID0+ICR0cndzcCkgewoJCQkJCQlpZiAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsncm93c3BhbiddID09IDApIHsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHBhZ2UnXSA9IG1heCgkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmRwYWdlJ10sICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2VuZHBhZ2UnXSk7CgkJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmRwYWdlJ10gPSAkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmRwYWdlJ107CgkJCQkJCQkkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmRjb2x1bW4nXSA9IG1heCgkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmRjb2x1bW4nXSwgJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5kY29sdW1uJ10pOwoJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5kY29sdW1uJ10gPSAkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmRjb2x1bW4nXTsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHknXSA9IG1heCgkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmR5J10sICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2VuZHknXSk7CgkJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmR5J10gPSAkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmR5J107CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gdXBkYXRlIHJlbWFpbmluZyByb3dzcGFubmVkIGNlbGxzCgkJCQkJZm9yZWFjaCAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddIGFzICRrID0+ICR0cndzcCkgewoJCQkJCQlpZiAoJGRvbVskdGFibGVfZWxdWydyb3dzcGFucyddWyRrXVsncm93c3BhbiddID09IDApIHsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZHBhZ2UnXSA9ICRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2VuZHBhZ2UnXTsKCQkJCQkJCSRkb21bJHRhYmxlX2VsXVsncm93c3BhbnMnXVska11bJ2VuZGNvbHVtbiddID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5kY29sdW1uJ107CgkJCQkJCQkkZG9tWyR0YWJsZV9lbF1bJ3Jvd3NwYW5zJ11bJGtdWydlbmR5J10gPSAkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmR5J107CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkkdGhpcy0+c2V0UGFnZSgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydlbmRwYWdlJ10pOwoJCQkJaWYgKCR0aGlzLT5udW1fY29sdW1ucyA+IDEpIHsKCQkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ2VuZGNvbHVtbiddKTsKCQkJCX0KCQkJCSR0aGlzLT55ID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnZW5keSddOwoJCQkJaWYgKGlzc2V0KCRkb21bJHRhYmxlX2VsXVsnYXR0cmlidXRlJ11bJ2NlbGxzcGFjaW5nJ10pKSB7CgkJCQkJJHRoaXMtPnkgKz0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZG9tWyR0YWJsZV9lbF1bJ2F0dHJpYnV0ZSddWydjZWxsc3BhY2luZyddLCAxLCAncHgnKTsKCQkJCX0gZWxzZWlmIChpc3NldCgkZG9tWyR0YWJsZV9lbF1bJ2JvcmRlci1zcGFjaW5nJ10pKSB7CgkJCQkJJHRoaXMtPnkgKz0gJGRvbVskdGFibGVfZWxdWydib3JkZXItc3BhY2luZyddWydWJ107CgkJCQl9CgkJCQkkdGhpcy0+TG4oMCwgJGNlbGwpOwoJCQkJaWYgKCR0aGlzLT5jdXJyZW50X2NvbHVtbiA9PSAkcGFyZW50WydzdGFydGNvbHVtbiddKSB7CgkJCQkJJHRoaXMtPnggPSAkcGFyZW50WydzdGFydHgnXTsKCQkJCX0KCQkJCS8vIGFjY291bnQgZm9yIGJvb2tsZXQgbW9kZQoJCQkJaWYgKCR0aGlzLT5wYWdlID4gJHBhcmVudFsnc3RhcnRwYWdlJ10pIHsKCQkJCQlpZiAoKCR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXSAhPSAkdGhpcy0+cGFnZWRpbVskcGFyZW50WydzdGFydHBhZ2UnXV1bJ29ybSddKSkgewoJCQkJCQkkdGhpcy0+eCAtPSAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvcm0nXSAtICR0aGlzLT5wYWdlZGltWyRwYXJlbnRbJ3N0YXJ0cGFnZSddXVsnb3JtJ10pOwoJCQkJCX0gZWxzZWlmICgoISR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSAhPSAkdGhpcy0+cGFnZWRpbVskcGFyZW50WydzdGFydHBhZ2UnXV1bJ29sbSddKSkgewoJCQkJCQkkdGhpcy0+eCArPSAoJHRoaXMtPnBhZ2VkaW1bJHRoaXMtPnBhZ2VdWydvbG0nXSAtICR0aGlzLT5wYWdlZGltWyRwYXJlbnRbJ3N0YXJ0cGFnZSddXVsnb2xtJ10pOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3RhYmxlaGVhZCc6CgkJCQkvLyBjbG9zaW5nIHRhZyB1c2VkIGZvciB0aGUgdGhlYWQgcGFydAoJCQkJJGluX3RhYmxlX2hlYWQgPSB0cnVlOwoJCQkJJHRoaXMtPmludGhlYWQgPSBmYWxzZTsKCQkJY2FzZSAndGFibGUnOiB7CgkJCQkkdGFibGVfZWwgPSAkcGFyZW50OwoJCQkJLy8gc2V0IGRlZmF1bHQgYm9yZGVyCgkJCQlpZiAoaXNzZXQoJHRhYmxlX2VsWydhdHRyaWJ1dGUnXVsnYm9yZGVyJ10pIEFORCAoJHRhYmxlX2VsWydhdHRyaWJ1dGUnXVsnYm9yZGVyJ10gPiAwKSkgewoJCQkJCS8vIHNldCBkZWZhdWx0IGJvcmRlcgoJCQkJCSRib3JkZXIgPSBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAkdGhpcy0+Z2V0Q1NTQm9yZGVyV2lkdGgoJHRhYmxlX2VsWydhdHRyaWJ1dGUnXVsnYm9yZGVyJ10pLCAnY2FwJz0+J3NxdWFyZScsICdqb2luJz0+J21pdGVyJywgJ2Rhc2gnPT4gMCwgJ2NvbG9yJz0+YXJyYXkoMCwwLDApKSk7CgkJCQl9IGVsc2UgewoJCQkJCSRib3JkZXIgPSAwOwoJCQkJfQoJCQkJJGRlZmF1bHRfYm9yZGVyID0gJGJvcmRlcjsKCQkJCS8vIGZpeCBib3R0b20gbGluZSBhbGlnbm1lbnQgb2YgbGFzdCBsaW5lIGJlZm9yZSBwYWdlIGJyZWFrCgkJCQlmb3JlYWNoICgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWyd0cmlkcyddIGFzICRqID0+ICR0cmtleSkgewoJCQkJCS8vIHVwZGF0ZSByb3ctc3Bhbm5lZCBjZWxscwoJCQkJCWlmIChpc3NldCgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydyb3dzcGFucyddKSkgewoJCQkJCQlmb3JlYWNoICgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydyb3dzcGFucyddIGFzICRrID0+ICR0cndzcCkgewoJCQkJCQkJaWYgKGlzc2V0KCRwcmV2dHJrZXkpIEFORCAoJHRyd3NwWyd0cmlkJ10gPT0gJHByZXZ0cmtleSkgQU5EICgkdHJ3c3BbJ21yb3dzcGFuJ10gPiAwKSkgewoJCQkJCQkJCSRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3Jvd3NwYW5zJ11bJGtdWyd0cmlkJ10gPSAkdHJrZXk7CgkJCQkJCQl9CgkJCQkJCQlpZiAoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncm93c3BhbnMnXVska11bJ3RyaWQnXSA9PSAkdHJrZXkpIHsKCQkJCQkJCQkkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydyb3dzcGFucyddWyRrXVsnbXJvd3NwYW4nXSAtPSAxOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWlmIChpc3NldCgkcHJldnRya2V5KSBBTkQgKCRkb21bJHRya2V5XVsnc3RhcnRwYWdlJ10gPiAkZG9tWyRwcmV2dHJrZXldWydlbmRwYWdlJ10pKSB7CgkJCQkJCSRwZ2VuZHkgPSAkdGhpcy0+cGFnZWRpbVskZG9tWyRwcmV2dHJrZXldWydlbmRwYWdlJ11dWydoayddIC0gJHRoaXMtPnBhZ2VkaW1bJGRvbVskcHJldnRya2V5XVsnZW5kcGFnZSddXVsnYm0nXTsKCQkJCQkJJGRvbVskcHJldnRya2V5XVsnZW5keSddID0gJHBnZW5keTsKCQkJCQkJLy8gdXBkYXRlIHJvdy1zcGFubmVkIGNlbGxzCgkJCQkJCWlmIChpc3NldCgkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydyb3dzcGFucyddKSkgewoJCQkJCQkJZm9yZWFjaCAoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncm93c3BhbnMnXSBhcyAkayA9PiAkdHJ3c3ApIHsKCQkJCQkJCQlpZiAoKCR0cndzcFsndHJpZCddID09ICR0cmtleSkgQU5EICgkdHJ3c3BbJ21yb3dzcGFuJ10gPiAxKSBBTkQgKCR0cndzcFsnZW5kcGFnZSddID09ICRkb21bJHByZXZ0cmtleV1bJ2VuZHBhZ2UnXSkpIHsKCQkJCQkJCQkJJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsncm93c3BhbnMnXVska11bJ2VuZHknXSA9ICRwZ2VuZHk7CgkJCQkJCQkJCSRkb21bKCRkb21bJGtleV1bJ3BhcmVudCddKV1bJ3Jvd3NwYW5zJ11bJGtdWydtcm93c3BhbiddID0gLTE7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCSRwcmV2dHJrZXkgPSAkdHJrZXk7CgkJCQkJJHRhYmxlX2VsID0gJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXTsKCQkJCX0KCQkJCS8vIGZvciBlYWNoIHJvdwoJCQkJaWYgKGNvdW50KCR0YWJsZV9lbFsndHJpZHMnXSkgPiAwKSB7CgkJCQkJdW5zZXQoJHhtYXgpOwoJCQkJfQoJCQkJZm9yZWFjaCAoJHRhYmxlX2VsWyd0cmlkcyddIGFzICRqID0+ICR0cmtleSkgewoJCQkJCSRwYXJlbnQgPSAkZG9tWyR0cmtleV07CgkJCQkJaWYgKCFpc3NldCgkeG1heCkpIHsKCQkJCQkJJHhtYXggPSAkcGFyZW50WydjZWxscG9zJ11bKGNvdW50KCRwYXJlbnRbJ2NlbGxwb3MnXSkgLSAxKV1bJ2VuZHgnXTsKCQkJCQl9CgkJCQkJLy8gZm9yIGVhY2ggY2VsbCBvbiB0aGUgcm93CgkJCQkJZm9yZWFjaCAoJHBhcmVudFsnY2VsbHBvcyddIGFzICRrID0+ICRjZWxscG9zKSB7CgkJCQkJCWlmIChpc3NldCgkY2VsbHBvc1sncm93c3BhbmlkJ10pIEFORCAoJGNlbGxwb3NbJ3Jvd3NwYW5pZCddID49IDApKSB7CgkJCQkJCQkkY2VsbHBvc1snc3RhcnR4J10gPSAkdGFibGVfZWxbJ3Jvd3NwYW5zJ11bKCRjZWxscG9zWydyb3dzcGFuaWQnXSldWydzdGFydHgnXTsKCQkJCQkJCSRjZWxscG9zWydlbmR4J10gPSAkdGFibGVfZWxbJ3Jvd3NwYW5zJ11bKCRjZWxscG9zWydyb3dzcGFuaWQnXSldWydlbmR4J107CgkJCQkJCQkkZW5keSA9ICR0YWJsZV9lbFsncm93c3BhbnMnXVsoJGNlbGxwb3NbJ3Jvd3NwYW5pZCddKV1bJ2VuZHknXTsKCQkJCQkJCSRzdGFydHBhZ2UgPSAkdGFibGVfZWxbJ3Jvd3NwYW5zJ11bKCRjZWxscG9zWydyb3dzcGFuaWQnXSldWydzdGFydHBhZ2UnXTsKCQkJCQkJCSRlbmRwYWdlID0gJHRhYmxlX2VsWydyb3dzcGFucyddWygkY2VsbHBvc1sncm93c3BhbmlkJ10pXVsnZW5kcGFnZSddOwoJCQkJCQkJJHN0YXJ0Y29sdW1uID0gJHRhYmxlX2VsWydyb3dzcGFucyddWygkY2VsbHBvc1sncm93c3BhbmlkJ10pXVsnc3RhcnRjb2x1bW4nXTsKCQkJCQkJCSRlbmRjb2x1bW4gPSAkdGFibGVfZWxbJ3Jvd3NwYW5zJ11bKCRjZWxscG9zWydyb3dzcGFuaWQnXSldWydlbmRjb2x1bW4nXTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRlbmR5ID0gJHBhcmVudFsnZW5keSddOwoJCQkJCQkJJHN0YXJ0cGFnZSA9ICRwYXJlbnRbJ3N0YXJ0cGFnZSddOwoJCQkJCQkJJGVuZHBhZ2UgPSAkcGFyZW50WydlbmRwYWdlJ107CgkJCQkJCQkkc3RhcnRjb2x1bW4gPSAkcGFyZW50WydzdGFydGNvbHVtbiddOwoJCQkJCQkJJGVuZGNvbHVtbiA9ICRwYXJlbnRbJ2VuZGNvbHVtbiddOwoJCQkJCQl9CgkJCQkJCWlmICgkdGhpcy0+bnVtX2NvbHVtbnMgPT0gMCkgewoJCQkJCQkJJHRoaXMtPm51bV9jb2x1bW5zID0gMTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGNlbGxwb3NbJ2JvcmRlciddKSkgewoJCQkJCQkJJGJvcmRlciA9ICRjZWxscG9zWydib3JkZXInXTsKCQkJCQkJfQoJCQkJCQlpZiAoaXNzZXQoJGNlbGxwb3NbJ2JnY29sb3InXSkgQU5EICgkY2VsbHBvc1snYmdjb2xvciddKSAhPT0gZmFsc2UpIHsKCQkJCQkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkY2VsbHBvc1snYmdjb2xvciddKTsKCQkJCQkJCSRmaWxsID0gdHJ1ZTsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRmaWxsID0gZmFsc2U7CgkJCQkJCX0KCQkJCQkJJHggPSAkY2VsbHBvc1snc3RhcnR4J107CgkJCQkJCSR5ID0gJHBhcmVudFsnc3RhcnR5J107CgkJCQkJCSRzdGFydHkgPSAkeTsKCQkJCQkJJHcgPSBhYnMoJGNlbGxwb3NbJ2VuZHgnXSAtICRjZWxscG9zWydzdGFydHgnXSk7CgkJCQkJCS8vIGdldCBib3JkZXIgbW9kZXMKCQkJCQkJJGJvcmRlcl9zdGFydCA9IFRDUERGX1NUQVRJQzo6Z2V0Qm9yZGVyTW9kZSgkYm9yZGVyLCAkcG9zaXRpb249J3N0YXJ0JywgJHRoaXMtPm9wZW5jZWxsKTsKCQkJCQkJJGJvcmRlcl9lbmQgPSBUQ1BERl9TVEFUSUM6OmdldEJvcmRlck1vZGUoJGJvcmRlciwgJHBvc2l0aW9uPSdlbmQnLCAkdGhpcy0+b3BlbmNlbGwpOwoJCQkJCQkkYm9yZGVyX21pZGRsZSA9IFRDUERGX1NUQVRJQzo6Z2V0Qm9yZGVyTW9kZSgkYm9yZGVyLCAkcG9zaXRpb249J21pZGRsZScsICR0aGlzLT5vcGVuY2VsbCk7CgkJCQkJCS8vIGRlc2lnbiBib3JkZXJzIGFyb3VuZCBIVE1MIGNlbGxzLgoJCQkJCQlmb3IgKCRwYWdlID0gJHN0YXJ0cGFnZTsgJHBhZ2UgPD0gJGVuZHBhZ2U7ICsrJHBhZ2UpIHsgLy8gZm9yIGVhY2ggcGFnZQoJCQkJCQkJJGNjb2RlID0gJyc7CgkJCQkJCQkkdGhpcy0+c2V0UGFnZSgkcGFnZSk7CgkJCQkJCQlpZiAoJHRoaXMtPm51bV9jb2x1bW5zIDwgMikgewoJCQkJCQkJCS8vIHNpbmdsZS1jb2x1bW4gbW9kZQoJCQkJCQkJCSR0aGlzLT54ID0gJHg7CgkJCQkJCQkJJHRoaXMtPnkgPSAkdGhpcy0+dE1hcmdpbjsKCQkJCQkJCX0KCQkJCQkJCS8vIGFjY291bnQgZm9yIG1hcmdpbiBjaGFuZ2VzCgkJCQkJCQlpZiAoJHBhZ2UgPiAkc3RhcnRwYWdlKSB7CgkJCQkJCQkJaWYgKCgkdGhpcy0+cnRsKSBBTkQgKCR0aGlzLT5wYWdlZGltWyRwYWdlXVsnb3JtJ10gIT0gJHRoaXMtPnBhZ2VkaW1bJHN0YXJ0cGFnZV1bJ29ybSddKSkgewoJCQkJCQkJCQkkdGhpcy0+eCAtPSAoJHRoaXMtPnBhZ2VkaW1bJHBhZ2VdWydvcm0nXSAtICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvcm0nXSk7CgkJCQkJCQkJfSBlbHNlaWYgKCghJHRoaXMtPnJ0bCkgQU5EICgkdGhpcy0+cGFnZWRpbVskcGFnZV1bJ29sbSddICE9ICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvbG0nXSkpIHsKCQkJCQkJCQkJJHRoaXMtPnggKz0gKCR0aGlzLT5wYWdlZGltWyRwYWdlXVsnb2xtJ10gLSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb2xtJ10pOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWlmICgkc3RhcnRwYWdlID09ICRlbmRwYWdlKSB7IC8vIHNpbmdsZSBwYWdlCgkJCQkJCQkJJGRlbHRhY29sID0gMDsKCQkJCQkJCQkkZGVsdGF0aCA9IDA7CgkJCQkJCQkJZm9yICgkY29sdW1uID0gJHN0YXJ0Y29sdW1uOyAkY29sdW1uIDw9ICRlbmRjb2x1bW47ICsrJGNvbHVtbikgeyAvLyBmb3IgZWFjaCBjb2x1bW4KCQkJCQkJCQkJJHRoaXMtPnNlbGVjdENvbHVtbigkY29sdW1uKTsKCQkJCQkJCQkJaWYgKCRzdGFydGNvbHVtbiA9PSAkZW5kY29sdW1uKSB7IC8vIHNpbmdsZSBjb2x1bW4KCQkJCQkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcjsKCQkJCQkJCQkJCSRoID0gJGVuZHkgLSAkcGFyZW50WydzdGFydHknXTsKCQkJCQkJCQkJCSR0aGlzLT55ID0gJHk7CgkJCQkJCQkJCQkkdGhpcy0+eCA9ICR4OwoJCQkJCQkJCQl9IGVsc2VpZiAoJGNvbHVtbiA9PSAkc3RhcnRjb2x1bW4pIHsgLy8gZmlyc3QgY29sdW1uCgkJCQkJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfc3RhcnQ7CgkJCQkJCQkJCQkkdGhpcy0+eSA9ICRzdGFydHk7CgkJCQkJCQkJCQkkdGhpcy0+eCA9ICR4OwoJCQkJCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJCQkJCSRkZWx0YWNvbCA9ICR0aGlzLT54ICsgJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+dzsKCQkJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCQkJJGRlbHRhY29sID0gJHRoaXMtPnggLSAkdGhpcy0+bE1hcmdpbjsKCQkJCQkJCQkJCX0KCQkJCQkJCQkJfSBlbHNlaWYgKCRjb2x1bW4gPT0gJGVuZGNvbHVtbikgeyAvLyBlbmQgY29sdW1uCgkJCQkJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfZW5kOwoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5jb2x1bW5zWyRjb2x1bW5dWyd0aCddWydcJycuJHBhZ2UuJ1wnJ10pKSB7CgkJCQkJCQkJCQkJJHRoaXMtPnkgPSAkdGhpcy0+Y29sdW1uc1skY29sdW1uXVsndGgnXVsnXCcnLiRwYWdlLidcJyddOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJJHRoaXMtPnggKz0gJGRlbHRhY29sOwoJCQkJCQkJCQkJJGggPSAkZW5keSAtICR0aGlzLT55OwoJCQkJCQkJCQl9IGVsc2UgeyAvLyBtaWRkbGUgY29sdW1uCgkJCQkJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfbWlkZGxlOwoJCQkJCQkJCQkJaWYgKGlzc2V0KCR0aGlzLT5jb2x1bW5zWyRjb2x1bW5dWyd0aCddWydcJycuJHBhZ2UuJ1wnJ10pKSB7CgkJCQkJCQkJCQkJJHRoaXMtPnkgPSAkdGhpcy0+Y29sdW1uc1skY29sdW1uXVsndGgnXVsnXCcnLiRwYWdlLidcJyddOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJJHRoaXMtPnggKz0gJGRlbHRhY29sOwoJCQkJCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJCQkJCX0KCQkJCQkJCQkJJGNjb2RlIC49ICR0aGlzLT5nZXRDZWxsQ29kZSgkdywgJGgsICcnLCAkY2JvcmRlciwgMSwgJycsICRmaWxsLCAnJywgMCwgdHJ1ZSkuIlxuIjsKCQkJCQkJCQl9IC8vIGVuZCBmb3IgZWFjaCBjb2x1bW4KCQkJCQkJCX0gZWxzZWlmICgkcGFnZSA9PSAkc3RhcnRwYWdlKSB7IC8vIGZpcnN0IHBhZ2UKCQkJCQkJCQkkZGVsdGFjb2wgPSAwOwoJCQkJCQkJCSRkZWx0YXRoID0gMDsKCQkJCQkJCQlmb3IgKCRjb2x1bW4gPSAkc3RhcnRjb2x1bW47ICRjb2x1bW4gPCAkdGhpcy0+bnVtX2NvbHVtbnM7ICsrJGNvbHVtbikgeyAvLyBmb3IgZWFjaCBjb2x1bW4KCQkJCQkJCQkJJHRoaXMtPnNlbGVjdENvbHVtbigkY29sdW1uKTsKCQkJCQkJCQkJaWYgKCRjb2x1bW4gPT0gJHN0YXJ0Y29sdW1uKSB7IC8vIGZpcnN0IGNvbHVtbgoJCQkJCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX3N0YXJ0OwoJCQkJCQkJCQkJJHRoaXMtPnkgPSAkc3RhcnR5OwoJCQkJCQkJCQkJJHRoaXMtPnggPSAkeDsKCQkJCQkJCQkJCSRoID0gJHRoaXMtPmggLSAkdGhpcy0+eSAtICR0aGlzLT5iTWFyZ2luOwoJCQkJCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCQkJCQkkZGVsdGFjb2wgPSAkdGhpcy0+eCArICR0aGlzLT5yTWFyZ2luIC0gJHRoaXMtPnc7CgkJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJCSRkZWx0YWNvbCA9ICR0aGlzLT54IC0gJHRoaXMtPmxNYXJnaW47CgkJCQkJCQkJCQl9CgkJCQkJCQkJCX0gZWxzZSB7IC8vIG1pZGRsZSBjb2x1bW4KCQkJCQkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmNvbHVtbnNbJGNvbHVtbl1bJ3RoJ11bJ1wnJy4kcGFnZS4nXCcnXSkpIHsKCQkJCQkJCQkJCQkkdGhpcy0+eSA9ICR0aGlzLT5jb2x1bW5zWyRjb2x1bW5dWyd0aCddWydcJycuJHBhZ2UuJ1wnJ107CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQkkdGhpcy0+eCArPSAkZGVsdGFjb2w7CgkJCQkJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkY2NvZGUgLj0gJHRoaXMtPmdldENlbGxDb2RlKCR3LCAkaCwgJycsICRjYm9yZGVyLCAxLCAnJywgJGZpbGwsICcnLCAwLCB0cnVlKS4iXG4iOwoJCQkJCQkJCX0gLy8gZW5kIGZvciBlYWNoIGNvbHVtbgoJCQkJCQkJfSBlbHNlaWYgKCRwYWdlID09ICRlbmRwYWdlKSB7IC8vIGxhc3QgcGFnZQoJCQkJCQkJCSRkZWx0YWNvbCA9IDA7CgkJCQkJCQkJJGRlbHRhdGggPSAwOwoJCQkJCQkJCWZvciAoJGNvbHVtbiA9IDA7ICRjb2x1bW4gPD0gJGVuZGNvbHVtbjsgKyskY29sdW1uKSB7IC8vIGZvciBlYWNoIGNvbHVtbgoJCQkJCQkJCQkkdGhpcy0+c2VsZWN0Q29sdW1uKCRjb2x1bW4pOwoJCQkJCQkJCQlpZiAoJGNvbHVtbiA9PSAkZW5kY29sdW1uKSB7IC8vIGVuZCBjb2x1bW4KCQkJCQkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9lbmQ7CgkJCQkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmNvbHVtbnNbJGNvbHVtbl1bJ3RoJ11bJ1wnJy4kcGFnZS4nXCcnXSkpIHsKCQkJCQkJCQkJCQkkdGhpcy0+eSA9ICR0aGlzLT5jb2x1bW5zWyRjb2x1bW5dWyd0aCddWydcJycuJHBhZ2UuJ1wnJ107CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQkkdGhpcy0+eCArPSAkZGVsdGFjb2w7CgkJCQkJCQkJCQkkaCA9ICRlbmR5IC0gJHRoaXMtPnk7CgkJCQkJCQkJCX0gZWxzZSB7IC8vIG1pZGRsZSBjb2x1bW4KCQkJCQkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJCQkJCQlpZiAoaXNzZXQoJHRoaXMtPmNvbHVtbnNbJGNvbHVtbl1bJ3RoJ11bJ1wnJy4kcGFnZS4nXCcnXSkpIHsKCQkJCQkJCQkJCQkkdGhpcy0+eSA9ICR0aGlzLT5jb2x1bW5zWyRjb2x1bW5dWyd0aCddWydcJycuJHBhZ2UuJ1wnJ107CgkJCQkJCQkJCQl9CgkJCQkJCQkJCQkkdGhpcy0+eCArPSAkZGVsdGFjb2w7CgkJCQkJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkY2NvZGUgLj0gJHRoaXMtPmdldENlbGxDb2RlKCR3LCAkaCwgJycsICRjYm9yZGVyLCAxLCAnJywgJGZpbGwsICcnLCAwLCB0cnVlKS4iXG4iOwoJCQkJCQkJCX0gLy8gZW5kIGZvciBlYWNoIGNvbHVtbgoJCQkJCQkJfSBlbHNlIHsgLy8gbWlkZGxlIHBhZ2UKCQkJCQkJCQkkZGVsdGFjb2wgPSAwOwoJCQkJCQkJCSRkZWx0YXRoID0gMDsKCQkJCQkJCQlmb3IgKCRjb2x1bW4gPSAwOyAkY29sdW1uIDwgJHRoaXMtPm51bV9jb2x1bW5zOyArKyRjb2x1bW4pIHsgLy8gZm9yIGVhY2ggY29sdW1uCgkJCQkJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGNvbHVtbik7CgkJCQkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJCQkJCWlmIChpc3NldCgkdGhpcy0+Y29sdW1uc1skY29sdW1uXVsndGgnXVsnXCcnLiRwYWdlLidcJyddKSkgewoJCQkJCQkJCQkJJHRoaXMtPnkgPSAkdGhpcy0+Y29sdW1uc1skY29sdW1uXVsndGgnXVsnXCcnLiRwYWdlLidcJyddOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSR0aGlzLT54ICs9ICRkZWx0YWNvbDsKCQkJCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJCQkJCSRjY29kZSAuPSAkdGhpcy0+Z2V0Q2VsbENvZGUoJHcsICRoLCAnJywgJGNib3JkZXIsIDEsICcnLCAkZmlsbCwgJycsIDAsIHRydWUpLiJcbiI7CgkJCQkJCQkJfSAvLyBlbmQgZm9yIGVhY2ggY29sdW1uCgkJCQkJCQl9CgkJCQkJCQlpZiAoJGNib3JkZXIgT1IgJGZpbGwpIHsKCQkJCQkJCQkkb2Zmc2V0bGVuID0gc3RybGVuKCRjY29kZSk7CgkJCQkJCQkJLy8gZHJhdyBib3JkZXIgYW5kIGZpbGwKCQkJCQkJCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkJCQkJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJCQkJCQkJaWYgKGVuZCgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddKSAhPT0gZmFsc2UpIHsKCQkJCQkJCQkJCSRwYWdlbWFya2tleSA9IGtleSgkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3RyYW5zZm1yayddKTsKCQkJCQkJCQkJCSRwYWdlbWFyayA9ICR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsndHJhbnNmbXJrJ11bJHBhZ2VtYXJra2V5XTsKCQkJCQkJCQkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsndHJhbnNmbXJrJ11bJHBhZ2VtYXJra2V5XSArPSAkb2Zmc2V0bGVuOwoJCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydpbnRtcmsnXTsKCQkJCQkJCQkJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnaW50bXJrJ10gKz0gJG9mZnNldGxlbjsKCQkJCQkJCQkJfQoJCQkJCQkJCQkkcGFnZWJ1ZmYgPSAkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXTsKCQkJCQkJCQkJJHBzdGFydCA9IHN1YnN0cigkcGFnZWJ1ZmYsIDAsICRwYWdlbWFyayk7CgkJCQkJCQkJCSRwZW5kID0gc3Vic3RyKCRwYWdlYnVmZiwgJHBhZ2VtYXJrKTsKCQkJCQkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydvdXRkYXRhJ10gPSAkcHN0YXJ0LiRjY29kZS4kcGVuZDsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkvLyBkcmF3IGJvcmRlciBhbmQgZmlsbAoJCQkJCQkJCQlpZiAoZW5kKCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdKSAhPT0gZmFsc2UpIHsKCQkJCQkJCQkJCSRwYWdlbWFya2tleSA9IGtleSgkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXSk7CgkJCQkJCQkJCQkkcGFnZW1hcmsgPSAkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXVskcGFnZW1hcmtrZXldOwoJCQkJCQkJCQl9IGVsc2VpZiAoJHRoaXMtPkluRm9vdGVyKSB7CgkJCQkJCQkJCQkkcGFnZW1hcmsgPSAkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXTsKCQkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJCSRwYWdlbWFyayA9ICR0aGlzLT5pbnRtcmtbJHRoaXMtPnBhZ2VdOwoJCQkJCQkJCQl9CgkJCQkJCQkJCSRwYWdlYnVmZiA9ICR0aGlzLT5nZXRQYWdlQnVmZmVyKCR0aGlzLT5wYWdlKTsKCQkJCQkJCQkJJHBzdGFydCA9IHN1YnN0cigkcGFnZWJ1ZmYsIDAsICRwYWdlbWFyayk7CgkJCQkJCQkJCSRwZW5kID0gc3Vic3RyKCRwYWdlYnVmZiwgJHBhZ2VtYXJrKTsKCQkJCQkJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UsICRwc3RhcnQuJGNjb2RlLiRwZW5kKTsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0gLy8gZW5kIGZvciBlYWNoIHBhZ2UKCQkJCQkJLy8gcmVzdG9yZSBkZWZhdWx0IGJvcmRlcgoJCQkJCQkkYm9yZGVyID0gJGRlZmF1bHRfYm9yZGVyOwoJCQkJCX0gLy8gZW5kIGZvciBlYWNoIGNlbGwgb24gdGhlIHJvdwoJCQkJCWlmIChpc3NldCgkdGFibGVfZWxbJ2F0dHJpYnV0ZSddWydjZWxsc3BhY2luZyddKSkgewoJCQkJCQkkdGhpcy0+eSArPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0YWJsZV9lbFsnYXR0cmlidXRlJ11bJ2NlbGxzcGFjaW5nJ10sIDEsICdweCcpOwoJCQkJCX0gZWxzZWlmIChpc3NldCgkdGFibGVfZWxbJ2JvcmRlci1zcGFjaW5nJ10pKSB7CgkJCQkJCSR0aGlzLT55ICs9ICR0YWJsZV9lbFsnYm9yZGVyLXNwYWNpbmcnXVsnViddOwoJCQkJCX0KCQkJCQkkdGhpcy0+TG4oMCwgJGNlbGwpOwoJCQkJCSR0aGlzLT54ID0gJHBhcmVudFsnc3RhcnR4J107CgkJCQkJaWYgKCRlbmRwYWdlID4gJHN0YXJ0cGFnZSkgewoJCQkJCQlpZiAoKCR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJGVuZHBhZ2VdWydvcm0nXSAhPSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb3JtJ10pKSB7CgkJCQkJCQkkdGhpcy0+eCArPSAoJHRoaXMtPnBhZ2VkaW1bJGVuZHBhZ2VdWydvcm0nXSAtICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvcm0nXSk7CgkJCQkJCX0gZWxzZWlmICgoISR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJGVuZHBhZ2VdWydvbG0nXSAhPSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb2xtJ10pKSB7CgkJCQkJCQkkdGhpcy0+eCArPSAoJHRoaXMtPnBhZ2VkaW1bJGVuZHBhZ2VdWydvbG0nXSAtICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvbG0nXSk7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQlpZiAoISRpbl90YWJsZV9oZWFkKSB7IC8vIHdlIGFyZSBub3QgaW5zaWRlIGEgdGhlYWQgc2VjdGlvbgoJCQkJCSR0aGlzLT5jZWxsX3BhZGRpbmcgPSAkdGFibGVfZWxbJ29sZF9jZWxsX3BhZGRpbmcnXTsKCQkJCQkvLyByZXNldCByb3cgaGVpZ2h0CgkJCQkJJHRoaXMtPnJlc2V0TGFzdEgoKTsKCQkJCQlpZiAoKCR0aGlzLT5wYWdlID09ICgkdGhpcy0+bnVtcGFnZXMgLSAxKSkgQU5EICgkdGhpcy0+cGFnZW9wZW5bJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCQkJJHBsZW5kaWZmID0gKCR0aGlzLT5wYWdlbGVuWyR0aGlzLT5udW1wYWdlc10gLSAkdGhpcy0+ZW1wdHlwYWdlbXJrWyR0aGlzLT5udW1wYWdlc10pOwoJCQkJCQlpZiAoKCRwbGVuZGlmZiA+IDApIEFORCAoJHBsZW5kaWZmIDwgNjApKSB7CgkJCQkJCQkkcGFnZWRpZmYgPSBzdWJzdHIoJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHRoaXMtPm51bXBhZ2VzKSwgJHRoaXMtPmVtcHR5cGFnZW1ya1skdGhpcy0+bnVtcGFnZXNdLCAkcGxlbmRpZmYpOwoJCQkJCQkJaWYgKHN1YnN0cigkcGFnZWRpZmYsIDAsIDUpID09ICdCVCAvRicpIHsKCQkJCQkJCQkvLyB0aGUgZGlmZmVyZW5jZSBpcyBvbmx5IGEgZm9udCBzZXR0aW5nCgkJCQkJCQkJJHBsZW5kaWZmID0gMDsKCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQlpZiAoJHBsZW5kaWZmID09IDApIHsKCQkJCQkJCS8vIHJlbW92ZSBsYXN0IGJsYW5rIHBhZ2UKCQkJCQkJCSR0aGlzLT5kZWxldGVQYWdlKCR0aGlzLT5udW1wYWdlcyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJaWYgKGlzc2V0KCR0aGlzLT50aGVhZE1hcmdpbnNbJ3RvcCddKSkgewoJCQkJCQkvLyByZXN0b3JlIHRvcCBtYXJnaW4KCQkJCQkJJHRoaXMtPnRNYXJnaW4gPSAkdGhpcy0+dGhlYWRNYXJnaW5zWyd0b3AnXTsKCQkJCQl9CgkJCQkJaWYgKCFpc3NldCgkdGFibGVfZWxbJ2F0dHJpYnV0ZSddWyduZXN0ZWQnXSkgT1IgKCR0YWJsZV9lbFsnYXR0cmlidXRlJ11bJ25lc3RlZCddICE9ICd0cnVlJykpIHsKCQkJCQkJLy8gcmVzZXQgbWFpbiB0YWJsZSBoZWFkZXIKCQkJCQkJJHRoaXMtPnRoZWFkID0gJyc7CgkJCQkJCSR0aGlzLT50aGVhZE1hcmdpbnMgPSBhcnJheSgpOwoJCQkJCQkkdGhpcy0+cGFnZWRpbVskdGhpcy0+cGFnZV1bJ3RtJ10gPSAkdGhpcy0+dE1hcmdpbjsKCQkJCQl9CgkJCQl9CgkJCQkkcGFyZW50ID0gJHRhYmxlX2VsOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnYSc6IHsKCQkJCSR0aGlzLT5IUkVGID0gJyc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdzdXAnOiB7CgkJCQkkdGhpcy0+U2V0WFkoJHRoaXMtPkdldFgoKSwgJHRoaXMtPkdldFkoKSArICgoMC43ICogJHBhcmVudFsnZm9udHNpemUnXSkgLyAkdGhpcy0+aykpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnc3ViJzogewoJCQkJJHRoaXMtPlNldFhZKCR0aGlzLT5HZXRYKCksICR0aGlzLT5HZXRZKCkgLSAoKDAuMyAqICRwYXJlbnRbJ2ZvbnRzaXplJ10pIC8gJHRoaXMtPmspKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2Rpdic6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsIGZhbHNlLCAkbGFzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdibG9ja3F1b3RlJzogewoJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkkdGhpcy0+ck1hcmdpbiAtPSAkdGhpcy0+bGlzdGluZGVudDsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmxNYXJnaW4gLT0gJHRoaXMtPmxpc3RpbmRlbnQ7CgkJCQl9CgkJCQktLSR0aGlzLT5saXN0aW5kZW50bGV2ZWw7CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAkaGIsICRjZWxsLCBmYWxzZSwgJGxhc3R0YWcpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAncCc6IHsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsIGZhbHNlLCAkbGFzdHRhZyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdwcmUnOiB7CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgkaGJ6LCAkaGIsICRjZWxsLCBmYWxzZSwgJGxhc3R0YWcpOwoJCQkJJHRoaXMtPnByZW1vZGUgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2RsJzogewoJCQkJLS0kdGhpcy0+bGlzdG51bTsKCQkJCWlmICgkdGhpcy0+bGlzdG51bSA8PSAwKSB7CgkJCQkJJHRoaXMtPmxpc3RudW0gPSAwOwoJCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKCRoYnosICRoYiwgJGNlbGwsIGZhbHNlLCAkbGFzdHRhZyk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKDAsIDAsICRjZWxsLCBmYWxzZSwgJGxhc3R0YWcpOwoJCQkJfQoJCQkJJHRoaXMtPnJlc2V0TGFzdEgoKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2R0JzogewoJCQkJJHRoaXMtPmxpc3BhY2VyID0gJyc7CgkJCQkkdGhpcy0+YWRkSFRNTFZlcnRTcGFjZSgwLCAwLCAkY2VsbCwgZmFsc2UsICRsYXN0dGFnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2RkJzogewoJCQkJJHRoaXMtPmxpc3BhY2VyID0gJyc7CgkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCSR0aGlzLT5yTWFyZ2luIC09ICR0aGlzLT5saXN0aW5kZW50OwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+bE1hcmdpbiAtPSAkdGhpcy0+bGlzdGluZGVudDsKCQkJCX0KCQkJCS0tJHRoaXMtPmxpc3RpbmRlbnRsZXZlbDsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKDAsIDAsICRjZWxsLCBmYWxzZSwgJGxhc3R0YWcpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAndWwnOgoJCQljYXNlICdvbCc6IHsKCQkJCS0tJHRoaXMtPmxpc3RudW07CgkJCQkkdGhpcy0+bGlzcGFjZXIgPSAnJzsKCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJJHRoaXMtPnJNYXJnaW4gLT0gJHRoaXMtPmxpc3RpbmRlbnQ7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5sTWFyZ2luIC09ICR0aGlzLT5saXN0aW5kZW50OwoJCQkJfQoJCQkJLS0kdGhpcy0+bGlzdGluZGVudGxldmVsOwoJCQkJaWYgKCR0aGlzLT5saXN0bnVtIDw9IDApIHsKCQkJCQkkdGhpcy0+bGlzdG51bSA9IDA7CgkJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoJGhieiwgJGhiLCAkY2VsbCwgZmFsc2UsICRsYXN0dGFnKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoMCwgMCwgJGNlbGwsIGZhbHNlLCAkbGFzdHRhZyk7CgkJCQl9CgkJCQkkdGhpcy0+cmVzZXRMYXN0SCgpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnbGknOiB7CgkJCQkkdGhpcy0+bGlzcGFjZXIgPSAnJzsKCQkJCSR0aGlzLT5hZGRIVE1MVmVydFNwYWNlKDAsIDAsICRjZWxsLCBmYWxzZSwgJGxhc3R0YWcpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnaDEnOgoJCQljYXNlICdoMic6CgkJCWNhc2UgJ2gzJzoKCQkJY2FzZSAnaDQnOgoJCQljYXNlICdoNSc6CgkJCWNhc2UgJ2g2JzogewoJCQkJJHRoaXMtPmFkZEhUTUxWZXJ0U3BhY2UoJGhieiwgJGhiLCAkY2VsbCwgZmFsc2UsICRsYXN0dGFnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIEZvcm0gZmllbGRzIChzaW5jZSA0LjguMDAwIC0gMjAwOS0wOS0wNykKCQkJY2FzZSAnZm9ybSc6IHsKCQkJCSR0aGlzLT5mb3JtX2FjdGlvbiA9ICcnOwoJCQkJJHRoaXMtPmZvcm1fZW5jdHlwZSA9ICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdCA6IHsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCS8vIGRyYXcgYm9yZGVyIGFuZCBiYWNrZ3JvdW5kIChpZiBhbnkpCgkJJHRoaXMtPmRyYXdIVE1MVGFnQm9yZGVyKCRwYXJlbnQsICR4bWF4KTsKCQlpZiAoaXNzZXQoJGRvbVsoJGRvbVska2V5XVsncGFyZW50J10pXVsnYXR0cmlidXRlJ11bJ3BhZ2VicmVha2FmdGVyJ10pKSB7CgkJCSRwYmEgPSAkZG9tWygkZG9tWyRrZXldWydwYXJlbnQnXSldWydhdHRyaWJ1dGUnXVsncGFnZWJyZWFrYWZ0ZXInXTsKCQkJLy8gY2hlY2sgZm9yIHBhZ2VicmVhawoJCQlpZiAoKCRwYmEgPT0gJ3RydWUnKSBPUiAoJHBiYSA9PSAnbGVmdCcpIE9SICgkcGJhID09ICdyaWdodCcpKSB7CgkJCQkvLyBhZGQgYSBwYWdlIChvciB0cmlnIEFjY2VwdFBhZ2VCcmVhaygpIGZvciBtdWx0aWNvbHVtbiBtb2RlKQoJCQkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyICsgMSk7CgkJCX0KCQkJaWYgKCgoJHBiYSA9PSAnbGVmdCcpIEFORCAoKCghJHRoaXMtPnJ0bCkgQU5EICgoJHRoaXMtPnBhZ2UgJSAyKSA9PSAwKSkgT1IgKCgkdGhpcy0+cnRsKSBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpICE9IDApKSkpCgkJCQlPUiAoKCRwYmEgPT0gJ3JpZ2h0JykgQU5EICgoKCEkdGhpcy0+cnRsKSBBTkQgKCgkdGhpcy0+cGFnZSAlIDIpICE9IDApKSBPUiAoKCR0aGlzLT5ydGwpIEFORCAoKCR0aGlzLT5wYWdlICUgMikgPT0gMCkpKSkpIHsKCQkJCS8vIGFkZCBhIHBhZ2UgKG9yIHRyaWcgQWNjZXB0UGFnZUJyZWFrKCkgZm9yIG11bHRpY29sdW1uIG1vZGUpCgkJCQkkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJHRoaXMtPlBhZ2VCcmVha1RyaWdnZXIgKyAxKTsKCQkJfQoJCX0KCQkkdGhpcy0+dG1wcnRsID0gZmFsc2U7CgkJcmV0dXJuICRkb207Cgl9CgoJLyoqCgkgKiBBZGQgdmVydGljYWwgc3BhY2VzIGlmIG5lZWRlZC4KCSAqIEBwYXJhbSAkaGJ6IChzdHJpbmcpIERpc3RhbmNlIGJldHdlZW4gY3VycmVudCB5IGFuZCBsaW5lIGJvdHRvbS4KCSAqIEBwYXJhbSAkaGIgKHN0cmluZykgVGhlIGhlaWdodCBvZiB0aGUgYnJlYWsuCgkgKiBAcGFyYW0gJGNlbGwgKGJvb2xlYW4pIGlmIHRydWUgYWRkIHRoZSBkZWZhdWx0IGxlZnQgKG9yIHJpZ2h0IGlmIFJUTCkgcGFkZGluZyB0byBlYWNoIG5ldyBsaW5lIChkZWZhdWx0IGZhbHNlKS4KCSAqIEBwYXJhbSAkZmlyc3R0YWcgKGJvb2xlYW4pIHNldCB0byB0cnVlIHdoZW4gdGhlIHRhZyBpcyB0aGUgZmlyc3QuCgkgKiBAcGFyYW0gJGxhc3R0YWcgKGJvb2xlYW4pIHNldCB0byB0cnVlIHdoZW4gdGhlIHRhZyBpcyB0aGUgbGFzdC4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGFkZEhUTUxWZXJ0U3BhY2UoJGhiej0wLCAkaGI9MCwgJGNlbGw9ZmFsc2UsICRmaXJzdHRhZz1mYWxzZSwgJGxhc3R0YWc9ZmFsc2UpIHsKCQlpZiAoJGZpcnN0dGFnKSB7CgkJCSR0aGlzLT5MbigwLCAkY2VsbCk7CgkJCSR0aGlzLT5odG1sdnNwYWNlID0gMDsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJGxhc3R0YWcpIHsKCQkJJHRoaXMtPkxuKCRoYnosICRjZWxsKTsKCQkJJHRoaXMtPmh0bWx2c3BhY2UgPSAwOwoJCQlyZXR1cm47CgkJfQoJCWlmICgkaGIgPCAkdGhpcy0+aHRtbHZzcGFjZSkgewoJCQkkaGQgPSAwOwoJCX0gZWxzZSB7CgkJCSRoZCA9ICRoYiAtICR0aGlzLT5odG1sdnNwYWNlOwoJCQkkdGhpcy0+aHRtbHZzcGFjZSA9ICRoYjsKCQl9CgkJJHRoaXMtPkxuKCgkaGJ6ICsgJGhkKSwgJGNlbGwpOwoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBzdGFydGluZyBjb29yZGluYXRlcyB0byBkcmF3IGFuIGh0bWwgYm9yZGVyCgkgKiBAcmV0dXJuIGFycmF5IGNvbnRhaW5pbmcgdG9wLWxlZnQgYm9yZGVyIGNvb3JkaW5hdGVzCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS43LjAwMCAoMjAxMC0wOC0wMykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEJvcmRlclN0YXJ0UG9zaXRpb24oKSB7CgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJJHhtYXggPSAkdGhpcy0+bE1hcmdpbjsKCQl9IGVsc2UgewoJCQkkeG1heCA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW47CgkJfQoJCXJldHVybiBhcnJheSgncGFnZScgPT4gJHRoaXMtPnBhZ2UsICdjb2x1bW4nID0+ICR0aGlzLT5jdXJyZW50X2NvbHVtbiwgJ3gnID0+ICR0aGlzLT54LCAneScgPT4gJHRoaXMtPnksICd4bWF4JyA9PiAkeG1heCk7Cgl9CgoJLyoqCgkgKiBEcmF3IGFuIEhUTUwgYmxvY2sgYm9yZGVyIGFuZCBmaWxsCgkgKiBAcGFyYW0gJHRhZyAoYXJyYXkpIGFycmF5IG9mIHRhZyBwcm9wZXJ0aWVzLgoJICogQHBhcmFtICR4bWF4IChpbnQpIGVuZCBYIGNvb3JkaW5hdGUgZm9yIGJvcmRlci4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjcuMDAwICgyMDEwLTA4LTAzKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZHJhd0hUTUxUYWdCb3JkZXIoJHRhZywgJHhtYXgpIHsKCQlpZiAoIWlzc2V0KCR0YWdbJ2JvcmRlcnBvc2l0aW9uJ10pKSB7CgkJCS8vIG5vdGhpbmcgdG8gZHJhdwoJCQlyZXR1cm47CgkJfQoJCSRwcmV2X3ggPSAkdGhpcy0+eDsKCQkkcHJldl95ID0gJHRoaXMtPnk7CgkJJHByZXZfbGFzdGggPSAkdGhpcy0+bGFzdGg7CgkJJGJvcmRlciA9IDA7CgkJJGZpbGwgPSBmYWxzZTsKCQkkdGhpcy0+bGFzdGggPSAwOwoJCWlmIChpc3NldCgkdGFnWydib3JkZXInXSkgQU5EICFlbXB0eSgkdGFnWydib3JkZXInXSkpIHsKCQkJLy8gZ2V0IGJvcmRlciBzdHlsZQoJCQkkYm9yZGVyID0gJHRhZ1snYm9yZGVyJ107CgkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRoaXMtPnRoZWFkKSBBTkQgKCEkdGhpcy0+aW50aGVhZCkpIHsKCQkJCS8vIGJvcmRlciBmb3IgdGFibGUgaGVhZGVyCgkJCQkkYm9yZGVyID0gVENQREZfU1RBVElDOjpnZXRCb3JkZXJNb2RlKCRib3JkZXIsICRwb3NpdGlvbj0nbWlkZGxlJywgJHRoaXMtPm9wZW5jZWxsKTsKCQkJfQoJCX0KCQlpZiAoaXNzZXQoJHRhZ1snYmdjb2xvciddKSBBTkQgKCR0YWdbJ2JnY29sb3InXSAhPT0gZmFsc2UpKSB7CgkJCS8vIGdldCBiYWNrZ3JvdW5kIGNvbG9yCgkJCSRvbGRfYmdjb2xvciA9ICR0aGlzLT5iZ2NvbG9yOwoJCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoJHRhZ1snYmdjb2xvciddKTsKCQkJJGZpbGwgPSB0cnVlOwoJCX0KCQlpZiAoISRib3JkZXIgQU5EICEkZmlsbCkgewoJCQkvLyBub3RoaW5nIHRvIGRyYXcKCQkJcmV0dXJuOwoJCX0KCQlpZiAoaXNzZXQoJHRhZ1snYXR0cmlidXRlJ11bJ2NlbGxzcGFjaW5nJ10pKSB7CgkJCSRjbHNwID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkdGFnWydhdHRyaWJ1dGUnXVsnY2VsbHNwYWNpbmcnXSwgMSwgJ3B4Jyk7CgkJCSRjZWxsc3BhY2luZyA9IGFycmF5KCdIJyA9PiAkY2xzcCwgJ1YnID0+ICRjbHNwKTsKCQl9IGVsc2VpZiAoaXNzZXQoJHRhZ1snYm9yZGVyLXNwYWNpbmcnXSkpIHsKCQkJJGNlbGxzcGFjaW5nID0gJHRhZ1snYm9yZGVyLXNwYWNpbmcnXTsKCQl9IGVsc2UgewoJCQkkY2VsbHNwYWNpbmcgPSBhcnJheSgnSCcgPT4gMCwgJ1YnID0+IDApOwoJCX0KCQlpZiAoKCR0YWdbJ3ZhbHVlJ10gIT0gJ3RhYmxlJykgQU5EIChpc19hcnJheSgkYm9yZGVyKSkgQU5EICghZW1wdHkoJGJvcmRlcikpKSB7CgkJCS8vIGRyYXcgdGhlIGJvcmRlciBleHRlcm5hbGx5IHJlc3BlY3QgdGhlIHNxYXJlIGVkZ2UuCgkJCSRib3JkZXJbJ21vZGUnXSA9ICdleHQnOwoJCX0KCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQlpZiAoJHhtYXggPj0gJHRhZ1snYm9yZGVycG9zaXRpb24nXVsneCddKSB7CgkJCQkkeG1heCA9ICR0YWdbJ2JvcmRlcnBvc2l0aW9uJ11bJ3htYXgnXTsKCQkJfQoJCQkkdyA9ICgkdGFnWydib3JkZXJwb3NpdGlvbiddWyd4J10gLSAkeG1heCk7CgkJfSBlbHNlIHsKCQkJaWYgKCR4bWF4IDw9ICR0YWdbJ2JvcmRlcnBvc2l0aW9uJ11bJ3gnXSkgewoJCQkJJHhtYXggPSAkdGFnWydib3JkZXJwb3NpdGlvbiddWyd4bWF4J107CgkJCX0KCQkJJHcgPSAoJHhtYXggLSAkdGFnWydib3JkZXJwb3NpdGlvbiddWyd4J10pOwoJCX0KCQlpZiAoJHcgPD0gMCkgewoJCQlyZXR1cm47CgkJfQoJCSR3ICs9ICRjZWxsc3BhY2luZ1snSCddOwoJCSRzdGFydHBhZ2UgPSAkdGFnWydib3JkZXJwb3NpdGlvbiddWydwYWdlJ107CgkJJHN0YXJ0Y29sdW1uID0gJHRhZ1snYm9yZGVycG9zaXRpb24nXVsnY29sdW1uJ107CgkJJHggPSAkdGFnWydib3JkZXJwb3NpdGlvbiddWyd4J107CgkJJHkgPSAkdGFnWydib3JkZXJwb3NpdGlvbiddWyd5J107CgkJJGVuZHBhZ2UgPSAkdGhpcy0+cGFnZTsKCQkkc3RhcnR5ID0gJHRhZ1snYm9yZGVycG9zaXRpb24nXVsneSddIC0gJGNlbGxzcGFjaW5nWydWJ107CgkJJGN1cnJlbnRZID0gJHRoaXMtPnk7CgkJJHRoaXMtPnggPSAkeDsKCQkvLyBnZXQgbGF0ZXN0IGNvbHVtbgoJCSRlbmRjb2x1bW4gPSAkdGhpcy0+Y3VycmVudF9jb2x1bW47CgkJaWYgKCR0aGlzLT5udW1fY29sdW1ucyA9PSAwKSB7CgkJCSR0aGlzLT5udW1fY29sdW1ucyA9IDE7CgkJfQoJCS8vIGdldCBib3JkZXIgbW9kZXMKCQkkYm9yZGVyX3N0YXJ0ID0gVENQREZfU1RBVElDOjpnZXRCb3JkZXJNb2RlKCRib3JkZXIsICRwb3NpdGlvbj0nc3RhcnQnLCAkdGhpcy0+b3BlbmNlbGwpOwoJCSRib3JkZXJfZW5kID0gVENQREZfU1RBVElDOjpnZXRCb3JkZXJNb2RlKCRib3JkZXIsICRwb3NpdGlvbj0nZW5kJywgJHRoaXMtPm9wZW5jZWxsKTsKCQkkYm9yZGVyX21pZGRsZSA9IFRDUERGX1NUQVRJQzo6Z2V0Qm9yZGVyTW9kZSgkYm9yZGVyLCAkcG9zaXRpb249J21pZGRsZScsICR0aGlzLT5vcGVuY2VsbCk7CgkJLy8gdGVtcG9yYXJ5IGRpc2FibGUgcGFnZSByZWdpb25zCgkJJHRlbXBfcGFnZV9yZWdpb25zID0gJHRoaXMtPnBhZ2VfcmVnaW9uczsKCQkkdGhpcy0+cGFnZV9yZWdpb25zID0gYXJyYXkoKTsKCQkvLyBkZXNpZ24gYm9yZGVycyBhcm91bmQgSFRNTCBjZWxscy4KCQlmb3IgKCRwYWdlID0gJHN0YXJ0cGFnZTsgJHBhZ2UgPD0gJGVuZHBhZ2U7ICsrJHBhZ2UpIHsgLy8gZm9yIGVhY2ggcGFnZQoJCQkkY2NvZGUgPSAnJzsKCQkJJHRoaXMtPnNldFBhZ2UoJHBhZ2UpOwoJCQlpZiAoJHRoaXMtPm51bV9jb2x1bW5zIDwgMikgewoJCQkJLy8gc2luZ2xlLWNvbHVtbiBtb2RlCgkJCQkkdGhpcy0+eCA9ICR4OwoJCQkJJHRoaXMtPnkgPSAkdGhpcy0+dE1hcmdpbjsKCQkJfQoJCQkvLyBhY2NvdW50IGZvciBtYXJnaW4gY2hhbmdlcwoJCQlpZiAoJHBhZ2UgPiAkc3RhcnRwYWdlKSB7CgkJCQlpZiAoKCR0aGlzLT5ydGwpIEFORCAoJHRoaXMtPnBhZ2VkaW1bJHBhZ2VdWydvcm0nXSAhPSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb3JtJ10pKSB7CgkJCQkJJHRoaXMtPnggLT0gKCR0aGlzLT5wYWdlZGltWyRwYWdlXVsnb3JtJ10gLSAkdGhpcy0+cGFnZWRpbVskc3RhcnRwYWdlXVsnb3JtJ10pOwoJCQkJfSBlbHNlaWYgKCghJHRoaXMtPnJ0bCkgQU5EICgkdGhpcy0+cGFnZWRpbVskcGFnZV1bJ29sbSddICE9ICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvbG0nXSkpIHsKCQkJCQkkdGhpcy0+eCArPSAoJHRoaXMtPnBhZ2VkaW1bJHBhZ2VdWydvbG0nXSAtICR0aGlzLT5wYWdlZGltWyRzdGFydHBhZ2VdWydvbG0nXSk7CgkJCQl9CgkJCX0KCQkJaWYgKCRzdGFydHBhZ2UgPT0gJGVuZHBhZ2UpIHsKCQkJCS8vIHNpbmdsZSBwYWdlCgkJCQlmb3IgKCRjb2x1bW4gPSAkc3RhcnRjb2x1bW47ICRjb2x1bW4gPD0gJGVuZGNvbHVtbjsgKyskY29sdW1uKSB7IC8vIGZvciBlYWNoIGNvbHVtbgoJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGNvbHVtbik7CgkJCQkJaWYgKCRzdGFydGNvbHVtbiA9PSAkZW5kY29sdW1uKSB7IC8vIHNpbmdsZSBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyOwoJCQkJCQkkaCA9ICgkY3VycmVudFkgLSAkeSkgKyAkY2VsbHNwYWNpbmdbJ1YnXTsKCQkJCQkJJHRoaXMtPnkgPSAkc3RhcnR5OwoJCQkJCX0gZWxzZWlmICgkY29sdW1uID09ICRzdGFydGNvbHVtbikgeyAvLyBmaXJzdCBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX3N0YXJ0OwoJCQkJCQkkdGhpcy0+eSA9ICRzdGFydHk7CgkJCQkJCSRoID0gJHRoaXMtPmggLSAkdGhpcy0+eSAtICR0aGlzLT5iTWFyZ2luOwoJCQkJCX0gZWxzZWlmICgkY29sdW1uID09ICRlbmRjb2x1bW4pIHsgLy8gZW5kIGNvbHVtbgoJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfZW5kOwoJCQkJCQkkaCA9ICRjdXJyZW50WSAtICR0aGlzLT55OwoJCQkJCX0gZWxzZSB7IC8vIG1pZGRsZSBjb2x1bW4KCQkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX21pZGRsZTsKCQkJCQkJJGggPSAkdGhpcy0+aCAtICR0aGlzLT55IC0gJHRoaXMtPmJNYXJnaW47CgkJCQkJfQoJCQkJCSRjY29kZSAuPSAkdGhpcy0+Z2V0Q2VsbENvZGUoJHcsICRoLCAnJywgJGNib3JkZXIsIDEsICcnLCAkZmlsbCwgJycsIDAsIHRydWUpLiJcbiI7CgkJCQl9IC8vIGVuZCBmb3IgZWFjaCBjb2x1bW4KCQkJfSBlbHNlaWYgKCRwYWdlID09ICRzdGFydHBhZ2UpIHsgLy8gZmlyc3QgcGFnZQoJCQkJZm9yICgkY29sdW1uID0gJHN0YXJ0Y29sdW1uOyAkY29sdW1uIDwgJHRoaXMtPm51bV9jb2x1bW5zOyArKyRjb2x1bW4pIHsgLy8gZm9yIGVhY2ggY29sdW1uCgkJCQkJJHRoaXMtPnNlbGVjdENvbHVtbigkY29sdW1uKTsKCQkJCQlpZiAoJGNvbHVtbiA9PSAkc3RhcnRjb2x1bW4pIHsgLy8gZmlyc3QgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9zdGFydDsKCQkJCQkJJHRoaXMtPnkgPSAkc3RhcnR5OwoJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQl9IGVsc2UgeyAvLyBtaWRkbGUgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9taWRkbGU7CgkJCQkJCSRoID0gJHRoaXMtPmggLSAkdGhpcy0+eSAtICR0aGlzLT5iTWFyZ2luOwoJCQkJCX0KCQkJCQkkY2NvZGUgLj0gJHRoaXMtPmdldENlbGxDb2RlKCR3LCAkaCwgJycsICRjYm9yZGVyLCAxLCAnJywgJGZpbGwsICcnLCAwLCB0cnVlKS4iXG4iOwoJCQkJfSAvLyBlbmQgZm9yIGVhY2ggY29sdW1uCgkJCX0gZWxzZWlmICgkcGFnZSA9PSAkZW5kcGFnZSkgeyAvLyBsYXN0IHBhZ2UKCQkJCWZvciAoJGNvbHVtbiA9IDA7ICRjb2x1bW4gPD0gJGVuZGNvbHVtbjsgKyskY29sdW1uKSB7IC8vIGZvciBlYWNoIGNvbHVtbgoJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGNvbHVtbik7CgkJCQkJaWYgKCRjb2x1bW4gPT0gJGVuZGNvbHVtbikgewoJCQkJCQkvLyBlbmQgY29sdW1uCgkJCQkJCSRjYm9yZGVyID0gJGJvcmRlcl9lbmQ7CgkJCQkJCSRoID0gJGN1cnJlbnRZIC0gJHRoaXMtPnk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gbWlkZGxlIGNvbHVtbgoJCQkJCQkkY2JvcmRlciA9ICRib3JkZXJfbWlkZGxlOwoJCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQl9CgkJCQkJJGNjb2RlIC49ICR0aGlzLT5nZXRDZWxsQ29kZSgkdywgJGgsICcnLCAkY2JvcmRlciwgMSwgJycsICRmaWxsLCAnJywgMCwgdHJ1ZSkuIlxuIjsKCQkJCX0gLy8gZW5kIGZvciBlYWNoIGNvbHVtbgoJCQl9IGVsc2UgeyAvLyBtaWRkbGUgcGFnZQoJCQkJZm9yICgkY29sdW1uID0gMDsgJGNvbHVtbiA8ICR0aGlzLT5udW1fY29sdW1uczsgKyskY29sdW1uKSB7IC8vIGZvciBlYWNoIGNvbHVtbgoJCQkJCSR0aGlzLT5zZWxlY3RDb2x1bW4oJGNvbHVtbik7CgkJCQkJJGNib3JkZXIgPSAkYm9yZGVyX21pZGRsZTsKCQkJCQkkaCA9ICR0aGlzLT5oIC0gJHRoaXMtPnkgLSAkdGhpcy0+Yk1hcmdpbjsKCQkJCQkkY2NvZGUgLj0gJHRoaXMtPmdldENlbGxDb2RlKCR3LCAkaCwgJycsICRjYm9yZGVyLCAxLCAnJywgJGZpbGwsICcnLCAwLCB0cnVlKS4iXG4iOwoJCQkJfSAvLyBlbmQgZm9yIGVhY2ggY29sdW1uCgkJCX0KCQkJaWYgKCRjYm9yZGVyIE9SICRmaWxsKSB7CgkJCQkkb2Zmc2V0bGVuID0gc3RybGVuKCRjY29kZSk7CgkJCQkvLyBkcmF3IGJvcmRlciBhbmQgZmlsbAoJCQkJaWYgKCR0aGlzLT5pbnhvYmopIHsKCQkJCQkvLyB3ZSBhcmUgaW5zaWRlIGFuIFhPYmplY3QgdGVtcGxhdGUKCQkJCQlpZiAoZW5kKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsndHJhbnNmbXJrJ10pICE9PSBmYWxzZSkgewoJCQkJCQkkcGFnZW1hcmtrZXkgPSBrZXkoJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXSk7CgkJCQkJCSRwYWdlbWFyayA9ICR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsndHJhbnNmbXJrJ11bJHBhZ2VtYXJra2V5XTsKCQkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXVskcGFnZW1hcmtrZXldICs9ICRvZmZzZXRsZW47CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHBhZ2VtYXJrID0gJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydpbnRtcmsnXTsKCQkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydpbnRtcmsnXSArPSAkb2Zmc2V0bGVuOwoJCQkJCX0KCQkJCQkkcGFnZWJ1ZmYgPSAkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ291dGRhdGEnXTsKCQkJCQkkcHN0YXJ0ID0gc3Vic3RyKCRwYWdlYnVmZiwgMCwgJHBhZ2VtYXJrKTsKCQkJCQkkcGVuZCA9IHN1YnN0cigkcGFnZWJ1ZmYsICRwYWdlbWFyayk7CgkJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydvdXRkYXRhJ10gPSAkcHN0YXJ0LiRjY29kZS4kcGVuZDsKCQkJCX0gZWxzZSB7CgkJCQkJaWYgKGVuZCgkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXSkgIT09IGZhbHNlKSB7CgkJCQkJCSRwYWdlbWFya2tleSA9IGtleSgkdGhpcy0+dHJhbnNmbXJrWyR0aGlzLT5wYWdlXSk7CgkJCQkJCSRwYWdlbWFyayA9ICR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdWyRwYWdlbWFya2tleV07CgkJCQkJfSBlbHNlaWYgKCR0aGlzLT5JbkZvb3RlcikgewoJCQkJCQkkcGFnZW1hcmsgPSAkdGhpcy0+Zm9vdGVycG9zWyR0aGlzLT5wYWdlXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkcGFnZW1hcmsgPSAkdGhpcy0+aW50bXJrWyR0aGlzLT5wYWdlXTsKCQkJCQl9CgkJCQkJJHBhZ2VidWZmID0gJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHRoaXMtPnBhZ2UpOwoJCQkJCSRwc3RhcnQgPSBzdWJzdHIoJHBhZ2VidWZmLCAwLCAkcGFnZW1hcmspOwoJCQkJCSRwZW5kID0gc3Vic3RyKCRwYWdlYnVmZiwgJHBhZ2VtYXJrKTsKCQkJCQkkdGhpcy0+c2V0UGFnZUJ1ZmZlcigkdGhpcy0+cGFnZSwgJHBzdGFydC4kY2NvZGUuJHBlbmQpOwoJCQkJCSR0aGlzLT5ib3JkZXJtcmtbJHRoaXMtPnBhZ2VdICs9ICRvZmZzZXRsZW47CgkJCQkJJHRoaXMtPmNudG1ya1skdGhpcy0+cGFnZV0gKz0gJG9mZnNldGxlbjsKCQkJCX0KCQkJfQoJCX0gLy8gZW5kIGZvciBlYWNoIHBhZ2UKCQkvLyByZXN0b3JlIHBhZ2UgcmVnaW9ucwoJCSR0aGlzLT5wYWdlX3JlZ2lvbnMgPSAkdGVtcF9wYWdlX3JlZ2lvbnM7CgkJaWYgKGlzc2V0KCRvbGRfYmdjb2xvcikpIHsKCQkJLy8gcmVzdG9yZSBiYWNrZ3JvdW5kIGNvbG9yCgkJCSR0aGlzLT5TZXRGaWxsQ29sb3JBcnJheSgkb2xkX2JnY29sb3IpOwoJCX0KCQkvLyByZXN0b3JlIHBvaW50ZXIgcG9zaXRpb24KCQkkdGhpcy0+eCA9ICRwcmV2X3g7CgkJJHRoaXMtPnkgPSAkcHJldl95OwoJCSR0aGlzLT5sYXN0aCA9ICRwcmV2X2xhc3RoOwoJfQoKCS8qKgoJICogU2V0IHRoZSBkZWZhdWx0IGJ1bGxldCB0byBiZSB1c2VkIGFzIExJIGJ1bGxldCBzeW1ib2wKCSAqIEBwYXJhbSAkc3ltYm9sIChzdHJpbmcpIGNoYXJhY3RlciBvciBzdHJpbmcgdG8gYmUgdXNlZCAobGVnYWwgdmFsdWVzIGFyZTogJycgPSBhdXRvbWF0aWMsICchJyA9IGF1dG8gYnVsbGV0LCAnIycgPSBhdXRvIG51bWJlcmluZywgJ2Rpc2MnLCAnZGlzYycsICdjaXJjbGUnLCAnc3F1YXJlJywgJzEnLCAnZGVjaW1hbCcsICdkZWNpbWFsLWxlYWRpbmctemVybycsICdpJywgJ2xvd2VyLXJvbWFuJywgJ0knLCAndXBwZXItcm9tYW4nLCAnYScsICdsb3dlci1hbHBoYScsICdsb3dlci1sYXRpbicsICdBJywgJ3VwcGVyLWFscGhhJywgJ3VwcGVyLWxhdGluJywgJ2xvd2VyLWdyZWVrJywgJ2ltZ3x0eXBlfHdpZHRofGhlaWdodHxpbWFnZS5leHQnKQoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuMC4wMjggKDIwMDgtMDktMjYpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRMSXN5bWJvbCgkc3ltYm9sPSchJykgewoJCS8vIGNoZWNrIGZvciBjdXN0b20gaW1hZ2Ugc3ltYm9sCgkJaWYgKHN1YnN0cigkc3ltYm9sLCAwLCA0KSA9PSAnaW1nfCcpIHsKCQkJJHRoaXMtPmxpc3ltYm9sID0gJHN5bWJvbDsKCQkJcmV0dXJuOwoJCX0KCQkkc3ltYm9sID0gc3RydG9sb3dlcigkc3ltYm9sKTsKCQkkdmFsaWRfc3ltYm9scyA9IGFycmF5KCchJywgJyMnLCAnZGlzYycsICdjaXJjbGUnLCAnc3F1YXJlJywgJzEnLCAnZGVjaW1hbCcsICdkZWNpbWFsLWxlYWRpbmctemVybycsICdpJywgJ2xvd2VyLXJvbWFuJywgJ0knLCAndXBwZXItcm9tYW4nLCAnYScsICdsb3dlci1hbHBoYScsICdsb3dlci1sYXRpbicsICdBJywgJ3VwcGVyLWFscGhhJywgJ3VwcGVyLWxhdGluJywgJ2xvd2VyLWdyZWVrJyk7CgkJaWYgKGluX2FycmF5KCRzeW1ib2wsICR2YWxpZF9zeW1ib2xzKSkgewoJCQkkdGhpcy0+bGlzeW1ib2wgPSAkc3ltYm9sOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5saXN5bWJvbCA9ICcnOwoJCX0KCX0KCgkvKioKCSAqIFNldCB0aGUgYm9va2xldCBtb2RlIGZvciBkb3VibGUtc2lkZWQgcGFnZXMuCgkgKiBAcGFyYW0gJGJvb2tsZXQgKGJvb2xlYW4pIHRydWUgc2V0IHRoZSBib29rbGV0IG1vZGUgb24sIGZhbHNlIG90aGVyd2lzZS4KCSAqIEBwYXJhbSAkaW5uZXIgKGZsb2F0KSBJbm5lciBwYWdlIG1hcmdpbi4KCSAqIEBwYXJhbSAkb3V0ZXIgKGZsb2F0KSBPdXRlciBwYWdlIG1hcmdpbi4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjIuMDAwICgyMDA4LTEwLTI5KQoJICovCglwdWJsaWMgZnVuY3Rpb24gU2V0Qm9va2xldCgkYm9va2xldD10cnVlLCAkaW5uZXI9LTEsICRvdXRlcj0tMSkgewoJCSR0aGlzLT5ib29rbGV0ID0gJGJvb2tsZXQ7CgkJaWYgKCRpbm5lciA+PSAwKSB7CgkJCSR0aGlzLT5sTWFyZ2luID0gJGlubmVyOwoJCX0KCQlpZiAoJG91dGVyID49IDApIHsKCQkJJHRoaXMtPnJNYXJnaW4gPSAkb3V0ZXI7CgkJfQoJfQoKCS8qKgoJICogU3dhcCB0aGUgbGVmdCBhbmQgcmlnaHQgbWFyZ2lucy4KCSAqIEBwYXJhbSAkcmV2ZXJzZSAoYm9vbGVhbikgaWYgdHJ1ZSBzd2FwIGxlZnQgYW5kIHJpZ2h0IG1hcmdpbnMuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4yLjAwMCAoMjAwOC0xMC0yOSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHN3YXBNYXJnaW5zKCRyZXZlcnNlPXRydWUpIHsKCQlpZiAoJHJldmVyc2UpIHsKCQkJLy8gc3dhcCBsZWZ0IGFuZCByaWdodCBtYXJnaW5zCgkJCSRtdGVtcCA9ICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luOwoJCQkkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiA9ICR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luOwoJCQkkdGhpcy0+b3JpZ2luYWxfck1hcmdpbiA9ICRtdGVtcDsKCQkJJGRlbHRhbSA9ICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW47CgkJCSR0aGlzLT5sTWFyZ2luICs9ICRkZWx0YW07CgkJCSR0aGlzLT5yTWFyZ2luIC09ICRkZWx0YW07CgkJfQoJfQoKCS8qKgoJICogU2V0IHRoZSB2ZXJ0aWNhbCBzcGFjZXMgZm9yIEhUTUwgdGFncy4KCSAqIFRoZSBhcnJheSBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyBzdHJ1Y3R1cmUgKGV4YW1wbGUpOgoJICogJHRhZ3ZzID0gYXJyYXkoJ2gxJyA9PiBhcnJheSgwID0+IGFycmF5KCdoJyA9PiAnJywgJ24nID0+IDIpLCAxID0+IGFycmF5KCdoJyA9PiAxLjMsICduJyA9PiAxKSkpOwoJICogVGhlIGZpcnN0IGFycmF5IGxldmVsIGNvbnRhaW5zIHRoZSB0YWcgbmFtZXMsCgkgKiB0aGUgc2Vjb25kIGxldmVsIGNvbnRhaW5zIDAgZm9yIG9wZW5pbmcgdGFncyBvciAxIGZvciBjbG9zaW5nIHRhZ3MsCgkgKiB0aGUgdGhpcmQgbGV2ZWwgY29udGFpbnMgdGhlIHZlcnRpY2FsIHNwYWNlIHVuaXQgKGgpIGFuZCB0aGUgbnVtYmVyIHNwYWNlcyB0byBhZGQgKG4pLgoJICogSWYgdGhlIGggcGFyYW1ldGVyIGlzIG5vdCBzcGVjaWZpZWQsIGRlZmF1bHQgdmFsdWVzIGFyZSB1c2VkLgoJICogQHBhcmFtICR0YWd2cyAoYXJyYXkpIGFycmF5IG9mIHRhZ3MgYW5kIHJlbGF0aXZlIHZlcnRpY2FsIHNwYWNlcy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjIuMDAxICgyMDA4LTEwLTMwKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0SHRtbFZTcGFjZSgkdGFndnMpIHsKCQkkdGhpcy0+dGFndnNwYWNlcyA9ICR0YWd2czsKCX0KCgkvKioKCSAqIFNldCBjdXN0b20gd2lkdGggZm9yIGxpc3QgaW5kZW50YXRpb24uCgkgKiBAcGFyYW0gJHdpZHRoIChmbG9hdCkgd2lkdGggb2YgdGhlIGluZGVudGF0aW9uLiBVc2UgbmVnYXRpdmUgdmFsdWUgdG8gZGlzYWJsZSBpdC4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjIuMDA3ICgyMDA4LTExLTEyKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0TGlzdEluZGVudFdpZHRoKCR3aWR0aCkgewoJCXJldHVybiAkdGhpcy0+Y3VzdG9tbGlzdGluZGVudCA9IGZsb2F0dmFsKCR3aWR0aCk7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHRvcC9ib3R0b20gY2VsbCBzaWRlcyB0byBiZSBvcGVuIG9yIGNsb3NlZCB3aGVuIHRoZSBjZWxsIGNyb3NzIHRoZSBwYWdlLgoJICogQHBhcmFtICRpc29wZW4gKGJvb2xlYW4pIGlmIHRydWUga2VlcHMgdGhlIHRvcC9ib3R0b20gYm9yZGVyIG9wZW4gZm9yIHRoZSBjZWxsIHNpZGVzIHRoYXQgY3Jvc3MgdGhlIHBhZ2UuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC4yLjAxMCAoMjAwOC0xMS0xNCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldE9wZW5DZWxsKCRpc29wZW4pIHsKCQkkdGhpcy0+b3BlbmNlbGwgPSAkaXNvcGVuOwoJfQoKCS8qKgoJICogU2V0IHRoZSBjb2xvciBhbmQgZm9udCBzdHlsZSBmb3IgSFRNTCBsaW5rcy4KCSAqIEBwYXJhbSAkY29sb3IgKGFycmF5KSBSR0IgYXJyYXkgb2YgY29sb3JzCgkgKiBAcGFyYW0gJGZvbnRzdHlsZSAoc3RyaW5nKSBhZGRpdGlvbmFsIGZvbnQgc3R5bGVzIHRvIGFkZAoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuNC4wMDMgKDIwMDgtMTItMDkpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRIdG1sTGlua3NTdHlsZSgkY29sb3I9YXJyYXkoMCwwLDI1NSksICRmb250c3R5bGU9J1UnKSB7CgkJJHRoaXMtPmh0bWxMaW5rQ29sb3JBcnJheSA9ICRjb2xvcjsKCQkkdGhpcy0+aHRtbExpbmtGb250U3R5bGUgPSAkZm9udHN0eWxlOwoJfQoKCS8qKgoJICogQ29udmVydCBIVE1MIHN0cmluZyBjb250YWluaW5nIHZhbHVlIGFuZCB1bml0IG9mIG1lYXN1cmUgdG8gdXNlcidzIHVuaXRzIG9yIHBvaW50cy4KCSAqIEBwYXJhbSAkaHRtbHZhbCAoc3RyaW5nKSBTdHJpbmcgY29udGFpbmluZyB2YWx1ZXMgYW5kIHVuaXQuCgkgKiBAcGFyYW0gJHJlZnNpemUgKHN0cmluZykgUmVmZXJlbmNlIHZhbHVlIGluIHBvaW50cy4KCSAqIEBwYXJhbSAkZGVmYXVsdHVuaXQgKHN0cmluZykgRGVmYXVsdCB1bml0IChjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6ICUsIGVtLCBleCwgcHgsIGluLCBtbSwgcGMsIHB0KS4KCSAqIEBwYXJhbSAkcG9pbnRzIChib29sZWFuKSBJZiB0cnVlIHJldHVybnMgcG9pbnRzLCBvdGhlcndpc2UgcmV0dXJucyB2YWx1ZSBpbiB1c2VyJ3MgdW5pdHMuCgkgKiBAcmV0dXJuIGZsb2F0IHZhbHVlIGluIHVzZXIncyB1bml0IG9yIHBvaW50IGlmICRwb2ludHM9dHJ1ZQoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuNC4wMDQgKDIwMDgtMTItMTApCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRIVE1MVW5pdFRvVW5pdHMoJGh0bWx2YWwsICRyZWZzaXplPTEsICRkZWZhdWx0dW5pdD0ncHgnLCAkcG9pbnRzPWZhbHNlKSB7CgkJJHN1cHBvcnRlZHVuaXRzID0gYXJyYXkoJyUnLCAnZW0nLCAnZXgnLCAncHgnLCAnaW4nLCAnY20nLCAnbW0nLCAncGMnLCAncHQnKTsKCQkkcmV0dmFsID0gMDsKCQkkdmFsdWUgPSAwOwoJCSR1bml0ID0gJ3B4JzsKCQlpZiAoJHBvaW50cykgewoJCQkkayA9IDE7CgkJfSBlbHNlIHsKCQkJJGsgPSAkdGhpcy0+azsKCQl9CgkJaWYgKGluX2FycmF5KCRkZWZhdWx0dW5pdCwgJHN1cHBvcnRlZHVuaXRzKSkgewoJCQkkdW5pdCA9ICRkZWZhdWx0dW5pdDsKCQl9CgkJaWYgKGlzX251bWVyaWMoJGh0bWx2YWwpKSB7CgkJCSR2YWx1ZSA9IGZsb2F0dmFsKCRodG1sdmFsKTsKCQl9IGVsc2VpZiAocHJlZ19tYXRjaCgnLyhbMC05XC5cLVwrXSspLycsICRodG1sdmFsLCAkbW51bSkpIHsKCQkJJHZhbHVlID0gZmxvYXR2YWwoJG1udW1bMV0pOwoJCQlpZiAocHJlZ19tYXRjaCgnLyhbYS16JV0rKS8nLCAkaHRtbHZhbCwgJG11bml0KSkgewoJCQkJaWYgKGluX2FycmF5KCRtdW5pdFsxXSwgJHN1cHBvcnRlZHVuaXRzKSkgewoJCQkJCSR1bml0ID0gJG11bml0WzFdOwoJCQkJfQoJCQl9CgkJfQoJCXN3aXRjaCAoJHVuaXQpIHsKCQkJLy8gcGVyY2VudGFnZQoJCQljYXNlICclJzogewoJCQkJJHJldHZhbCA9ICgoJHZhbHVlICogJHJlZnNpemUpIC8gMTAwKTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIHJlbGF0aXZlLXNpemUKCQkJY2FzZSAnZW0nOiB7CgkJCQkkcmV0dmFsID0gKCR2YWx1ZSAqICRyZWZzaXplKTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIGhlaWdodCBvZiBsb3dlciBjYXNlICd4JyAoYWJvdXQgaGFsZiB0aGUgZm9udC1zaXplKQoJCQljYXNlICdleCc6IHsKCQkJCSRyZXR2YWwgPSAoJHZhbHVlICogKCRyZWZzaXplIC8gMikpOwoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gYWJzb2x1dGUtc2l6ZQoJCQljYXNlICdpbic6IHsKCQkJCSRyZXR2YWwgPSAoKCR2YWx1ZSAqICR0aGlzLT5kcGkpIC8gJGspOwoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gY2VudGltZXRlcnMKCQkJY2FzZSAnY20nOiB7CgkJCQkkcmV0dmFsID0gKCgkdmFsdWUgLyAyLjU0ICogJHRoaXMtPmRwaSkgLyAkayk7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBtaWxsaW1ldGVycwoJCQljYXNlICdtbSc6IHsKCQkJCSRyZXR2YWwgPSAoKCR2YWx1ZSAvIDI1LjQgKiAkdGhpcy0+ZHBpKSAvICRrKTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIG9uZSBwaWNhIGlzIDEyIHBvaW50cwoJCQljYXNlICdwYyc6IHsKCQkJCSRyZXR2YWwgPSAoKCR2YWx1ZSAqIDEyKSAvICRrKTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIHBvaW50cwoJCQljYXNlICdwdCc6IHsKCQkJCSRyZXR2YWwgPSAoJHZhbHVlIC8gJGspOwoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gcGl4ZWxzCgkJCWNhc2UgJ3B4JzogewoJCQkJJHJldHZhbCA9ICR0aGlzLT5waXhlbHNUb1VuaXRzKCR2YWx1ZSk7CgkJCQlpZiAoJHBvaW50cykgewoJCQkJCSRyZXR2YWwgKj0gJHRoaXMtPms7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCX0KCQlyZXR1cm4gJHJldHZhbDsKCX0KCgkvKioKCSAqIE91dHB1dCBhbiBIVE1MIGxpc3QgYnVsbGV0IG9yIG9yZGVyZWQgaXRlbSBzeW1ib2wKCSAqIEBwYXJhbSAkbGlzdGRlcHRoIChpbnQpIGxpc3QgbmVzdGluZyBsZXZlbAoJICogQHBhcmFtICRsaXN0dHlwZSAoc3RyaW5nKSB0eXBlIG9mIGxpc3QKCSAqIEBwYXJhbSAkc2l6ZSAoZmxvYXQpIGN1cnJlbnQgZm9udCBzaXplCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC40LjAwNCAoMjAwOC0xMi0xMCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHB1dEh0bWxMaXN0QnVsbGV0KCRsaXN0ZGVwdGgsICRsaXN0dHlwZT0nJywgJHNpemU9MTApIHsKCQlpZiAoJHRoaXMtPnN0YXRlICE9IDIpIHsKCQkJcmV0dXJuOwoJCX0KCQkkc2l6ZSAvPSAkdGhpcy0+azsKCQkkZmlsbCA9ICcnOwoJCSRiZ2NvbG9yID0gJHRoaXMtPmJnY29sb3I7CgkJJGNvbG9yID0gJHRoaXMtPmZnY29sb3I7CgkJJHN0cm9rZWNvbG9yID0gJHRoaXMtPnN0cm9rZWNvbG9yOwoJCSR3aWR0aCA9IDA7CgkJJHRleHRpdGVtID0gJyc7CgkJJHRtcHggPSAkdGhpcy0+eDsKCQkkbHNwYWNlID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCcgICcpOwoJCWlmICgkbGlzdHR5cGUgPT0gJ14nKSB7CgkJCS8vIHNwZWNpYWwgc3ltYm9sIHVzZWQgZm9yIGF2b2lkIGp1c3RpZmljYXRpb24gb2YgcmVjdCBidWxsZXQKCQkJJHRoaXMtPmxpc3BhY2VyID0gJyc7CgkJCXJldHVybjsKCQl9IGVsc2VpZiAoJGxpc3R0eXBlID09ICchJykgewoJCQkvLyBzZXQgZGVmYXVsdCBsaXN0IHR5cGUgZm9yIHVub3JkZXJlZCBsaXN0CgkJCSRkZWZ0eXBlcyA9IGFycmF5KCdkaXNjJywgJ2NpcmNsZScsICdzcXVhcmUnKTsKCQkJJGxpc3R0eXBlID0gJGRlZnR5cGVzWygkbGlzdGRlcHRoIC0gMSkgJSAzXTsKCQl9IGVsc2VpZiAoJGxpc3R0eXBlID09ICcjJykgewoJCQkvLyBzZXQgZGVmYXVsdCBsaXN0IHR5cGUgZm9yIG9yZGVyZWQgbGlzdAoJCQkkbGlzdHR5cGUgPSAnZGVjaW1hbCc7CgkJfSBlbHNlaWYgKHN1YnN0cigkbGlzdHR5cGUsIDAsIDQpID09ICdpbWd8JykgewoJCQkvLyBjdXN0b20gaW1hZ2UgdHlwZSAoJ2ltZ3x0eXBlfHdpZHRofGhlaWdodHxpbWFnZS5leHQnKQoJCQkkaW1nID0gZXhwbG9kZSgnfCcsICRsaXN0dHlwZSk7CgkJCSRsaXN0dHlwZSA9ICdpbWcnOwoJCX0KCQlzd2l0Y2ggKCRsaXN0dHlwZSkgewoJCQkvLyB1bm9yZGVyZWQgdHlwZXMKCQkJY2FzZSAnbm9uZSc6IHsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2Rpc2MnOiB7CgkJCQkkciA9ICRzaXplIC8gNjsKCQkJCSRsc3BhY2UgKz0gKDIgKiAkcik7CgkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCSR0aGlzLT54ICs9ICRsc3BhY2U7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT54IC09ICRsc3BhY2U7CgkJCQl9CgkJCQkkdGhpcy0+Q2lyY2xlKCgkdGhpcy0+eCArICRyKSwgKCR0aGlzLT55ICsgKCR0aGlzLT5sYXN0aCAvIDIpKSwgJHIsIDAsIDM2MCwgJ0YnLCBhcnJheSgpLCAkY29sb3IsIDgpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnY2lyY2xlJzogewoJCQkJJHIgPSAkc2l6ZSAvIDY7CgkJCQkkbHNwYWNlICs9ICgyICogJHIpOwoJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkkdGhpcy0+eCArPSAkbHNwYWNlOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+eCAtPSAkbHNwYWNlOwoJCQkJfQoJCQkJJHByZXZfbGluZV9zdHlsZSA9ICR0aGlzLT5saW5lc3R5bGVXaWR0aC4nICcuJHRoaXMtPmxpbmVzdHlsZUNhcC4nICcuJHRoaXMtPmxpbmVzdHlsZUpvaW4uJyAnLiR0aGlzLT5saW5lc3R5bGVEYXNoLicgJy4kdGhpcy0+RHJhd0NvbG9yOwoJCQkJJG5ld19saW5lX3N0eWxlID0gYXJyYXkoJ3dpZHRoJyA9PiAoJHIgLyAzKSwgJ2NhcCcgPT4gJ2J1dHQnLCAnam9pbicgPT4gJ21pdGVyJywgJ2Rhc2gnID0+IDAsICdwaGFzZScgPT4gMCwgJ2NvbG9yJz0+JGNvbG9yKTsKCQkJCSR0aGlzLT5DaXJjbGUoKCR0aGlzLT54ICsgJHIpLCAoJHRoaXMtPnkgKyAoJHRoaXMtPmxhc3RoIC8gMikpLCAoJHIgKiAoMSAtICgxLzYpKSksIDAsIDM2MCwgJ0QnLCAkbmV3X2xpbmVfc3R5bGUsIGFycmF5KCksIDgpOwoJCQkJJHRoaXMtPl9vdXQoJHByZXZfbGluZV9zdHlsZSk7IC8vIHJlc3RvcmUgbGluZSBzZXR0aW5ncwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnc3F1YXJlJzogewoJCQkJJGwgPSAkc2l6ZSAvIDM7CgkJCQkkbHNwYWNlICs9ICRsOwoJCQkJaWYgKCR0aGlzLT5ydGwpIHs7CgkJCQkJJHRoaXMtPnggKz0gJGxzcGFjZTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPnggLT0gJGxzcGFjZTsKCQkJCX0KCQkJCSR0aGlzLT5SZWN0KCR0aGlzLT54LCAoJHRoaXMtPnkgKyAoKCR0aGlzLT5sYXN0aCAtICRsKSAvIDIpKSwgJGwsICRsLCAnRicsIGFycmF5KCksICRjb2xvcik7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdpbWcnOiB7CgkJCQkvLyAxPT50eXBlLCAyPT53aWR0aCwgMz0+aGVpZ2h0LCA0PT5pbWFnZS5leHQKCQkJCSRsc3BhY2UgKz0gJGltZ1syXTsKCQkJCWlmICgkdGhpcy0+cnRsKSB7OwoJCQkJCSR0aGlzLT54ICs9ICRsc3BhY2U7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT54IC09ICRsc3BhY2U7CgkJCQl9CgkJCQkkaW1ndHlwZSA9IHN0cnRvbG93ZXIoJGltZ1sxXSk7CgkJCQkkcHJldl95ID0gJHRoaXMtPnk7CgkJCQlzd2l0Y2ggKCRpbWd0eXBlKSB7CgkJCQkJY2FzZSAnc3ZnJzogewoJCQkJCQkkdGhpcy0+SW1hZ2VTVkcoJGltZ1s0XSwgJHRoaXMtPngsICgkdGhpcy0+eSArICgoJHRoaXMtPmxhc3RoIC0gJGltZ1szXSkgLyAyKSksICRpbWdbMl0sICRpbWdbM10sICcnLCAnVCcsICcnLCAwLCBmYWxzZSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQljYXNlICdhaSc6CgkJCQkJY2FzZSAnZXBzJzogewoJCQkJCQkkdGhpcy0+SW1hZ2VFcHMoJGltZ1s0XSwgJHRoaXMtPngsICgkdGhpcy0+eSArICgoJHRoaXMtPmxhc3RoIC0gJGltZ1szXSkgLyAyKSksICRpbWdbMl0sICRpbWdbM10sICcnLCB0cnVlLCAnVCcsICcnLCAwLCBmYWxzZSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlkZWZhdWx0OiB7CgkJCQkJCSR0aGlzLT5JbWFnZSgkaW1nWzRdLCAkdGhpcy0+eCwgKCR0aGlzLT55ICsgKCgkdGhpcy0+bGFzdGggLSAkaW1nWzNdKSAvIDIpKSwgJGltZ1syXSwgJGltZ1szXSwgJGltZ1sxXSwgJycsICdUJywgZmFsc2UsIDMwMCwgJycsIGZhbHNlLCBmYWxzZSwgMCwgZmFsc2UsIGZhbHNlLCBmYWxzZSk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCX0KCQkJCSR0aGlzLT55ID0gJHByZXZfeTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIG9yZGVyZWQgdHlwZXMKCQkJLy8gJHRoaXMtPmxpc3Rjb3VudFskdGhpcy0+bGlzdG51bV07CgkJCS8vICR0ZXh0aXRlbQoJCQljYXNlICcxJzoKCQkJY2FzZSAnZGVjaW1hbCc6IHsKCQkJCSR0ZXh0aXRlbSA9ICR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZGVjaW1hbC1sZWFkaW5nLXplcm8nOiB7CgkJCQkkdGV4dGl0ZW0gPSBzcHJpbnRmKCclMDJkJywgJHRoaXMtPmxpc3Rjb3VudFskdGhpcy0+bGlzdG51bV0pOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnaSc6CgkJCWNhc2UgJ2xvd2VyLXJvbWFuJzogewoJCQkJJHRleHRpdGVtID0gc3RydG9sb3dlcihUQ1BERl9TVEFUSUM6OmludFRvUm9tYW4oJHRoaXMtPmxpc3Rjb3VudFskdGhpcy0+bGlzdG51bV0pKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0knOgoJCQljYXNlICd1cHBlci1yb21hbic6IHsKCQkJCSR0ZXh0aXRlbSA9IFRDUERGX1NUQVRJQzo6aW50VG9Sb21hbigkdGhpcy0+bGlzdGNvdW50WyR0aGlzLT5saXN0bnVtXSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdhJzoKCQkJY2FzZSAnbG93ZXItYWxwaGEnOgoJCQljYXNlICdsb3dlci1sYXRpbic6IHsKCQkJCSR0ZXh0aXRlbSA9IGNocig5NyArICR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dIC0gMSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdBJzoKCQkJY2FzZSAndXBwZXItYWxwaGEnOgoJCQljYXNlICd1cHBlci1sYXRpbic6IHsKCQkJCSR0ZXh0aXRlbSA9IGNocig2NSArICR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dIC0gMSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdsb3dlci1ncmVlayc6IHsKCQkJCSR0ZXh0aXRlbSA9IFRDUERGX0ZPTlRTOjp1bmljaHIoKDk0NSArICR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dIC0gMSksICR0aGlzLT5pc3VuaWNvZGUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJLyoKCQkJLy8gVHlwZXMgdG8gYmUgaW1wbGVtZW50ZWQgKHNwZWNpYWwgaGFuZGxpbmcpCgkJCWNhc2UgJ2hlYnJldyc6IHsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2FybWVuaWFuJzogewoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZ2VvcmdpYW4nOiB7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdjamstaWRlb2dyYXBoaWMnOiB7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdoaXJhZ2FuYSc6IHsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2thdGFrYW5hJzogewoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnaGlyYWdhbmEtaXJvaGEnOiB7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdrYXRha2FuYS1pcm9oYSc6IHsKCQkJCWJyZWFrOwoJCQl9CgkJCSovCgkJCWRlZmF1bHQ6IHsKCQkJCSR0ZXh0aXRlbSA9ICR0aGlzLT5saXN0Y291bnRbJHRoaXMtPmxpc3RudW1dOwoJCQl9CgkJfQoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHRleHRpdGVtKSkgewoJCQkvLyBDaGVjayB3aGV0aGVyIHdlIG5lZWQgYSBuZXcgcGFnZSBvciBuZXcgY29sdW1uCgkJCSRwcmV2X3kgPSAkdGhpcy0+eTsKCQkJJGggPSAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkdGhpcy0+Rm9udFNpemUpOwoJCQlpZiAoJHRoaXMtPmNoZWNrUGFnZUJyZWFrKCRoKSBPUiAoJHRoaXMtPnkgPCAkcHJldl95KSkgewoJCQkJJHRtcHggPSAkdGhpcy0+eDsKCQkJfQoJCQkvLyBwcmludCBvcmRlcmVkIGl0ZW0KCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR0ZXh0aXRlbSA9ICcuJy4kdGV4dGl0ZW07CgkJCX0gZWxzZSB7CgkJCQkkdGV4dGl0ZW0gPSAkdGV4dGl0ZW0uJy4nOwoJCQl9CgkJCSRsc3BhY2UgKz0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCR0ZXh0aXRlbSk7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+eCArPSAkbHNwYWNlOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPnggLT0gJGxzcGFjZTsKCQkJfQoJCQkkdGhpcy0+V3JpdGUoJHRoaXMtPmxhc3RoLCAkdGV4dGl0ZW0sICcnLCBmYWxzZSwgJycsIGZhbHNlLCAwLCBmYWxzZSk7CgkJfQoJCSR0aGlzLT54ID0gJHRtcHg7CgkJJHRoaXMtPmxpc3BhY2VyID0gJ14nOwoJCS8vIHJlc3RvcmUgY29sb3JzCgkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRiZ2NvbG9yKTsKCQkkdGhpcy0+U2V0RHJhd0NvbG9yQXJyYXkoJHN0cm9rZWNvbG9yKTsKCQkkdGhpcy0+U2V0dGV4dENvbG9yQXJyYXkoJGNvbG9yKTsKCX0KCgkvKioKCSAqIFJldHVybnMgY3VycmVudCBncmFwaGljIHZhcmlhYmxlcyBhcyBhcnJheS4KCSAqIEByZXR1cm4gYXJyYXkgb2YgZ3JhcGhpYyB2YXJpYWJsZXMKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjIuMDEwICgyMDA4LTExLTE0KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0R3JhcGhpY1ZhcnMoKSB7CgkJJGdyYXB2YXJzID0gYXJyYXkoCgkJCSdGb250RmFtaWx5JyA9PiAkdGhpcy0+Rm9udEZhbWlseSwKCQkJJ0ZvbnRTdHlsZScgPT4gJHRoaXMtPkZvbnRTdHlsZSwKCQkJJ0ZvbnRTaXplUHQnID0+ICR0aGlzLT5Gb250U2l6ZVB0LAoJCQknck1hcmdpbicgPT4gJHRoaXMtPnJNYXJnaW4sCgkJCSdsTWFyZ2luJyA9PiAkdGhpcy0+bE1hcmdpbiwKCQkJJ2NlbGxfcGFkZGluZycgPT4gJHRoaXMtPmNlbGxfcGFkZGluZywKCQkJJ2NlbGxfbWFyZ2luJyA9PiAkdGhpcy0+Y2VsbF9tYXJnaW4sCgkJCSdMaW5lV2lkdGgnID0+ICR0aGlzLT5MaW5lV2lkdGgsCgkJCSdsaW5lc3R5bGVXaWR0aCcgPT4gJHRoaXMtPmxpbmVzdHlsZVdpZHRoLAoJCQknbGluZXN0eWxlQ2FwJyA9PiAkdGhpcy0+bGluZXN0eWxlQ2FwLAoJCQknbGluZXN0eWxlSm9pbicgPT4gJHRoaXMtPmxpbmVzdHlsZUpvaW4sCgkJCSdsaW5lc3R5bGVEYXNoJyA9PiAkdGhpcy0+bGluZXN0eWxlRGFzaCwKCQkJJ3RleHRyZW5kZXJtb2RlJyA9PiAkdGhpcy0+dGV4dHJlbmRlcm1vZGUsCgkJCSd0ZXh0c3Ryb2tld2lkdGgnID0+ICR0aGlzLT50ZXh0c3Ryb2tld2lkdGgsCgkJCSdEcmF3Q29sb3InID0+ICR0aGlzLT5EcmF3Q29sb3IsCgkJCSdGaWxsQ29sb3InID0+ICR0aGlzLT5GaWxsQ29sb3IsCgkJCSdUZXh0Q29sb3InID0+ICR0aGlzLT5UZXh0Q29sb3IsCgkJCSdDb2xvckZsYWcnID0+ICR0aGlzLT5Db2xvckZsYWcsCgkJCSdiZ2NvbG9yJyA9PiAkdGhpcy0+Ymdjb2xvciwKCQkJJ2ZnY29sb3InID0+ICR0aGlzLT5mZ2NvbG9yLAoJCQknaHRtbHZzcGFjZScgPT4gJHRoaXMtPmh0bWx2c3BhY2UsCgkJCSdsaXN0aW5kZW50JyA9PiAkdGhpcy0+bGlzdGluZGVudCwKCQkJJ2xpc3RpbmRlbnRsZXZlbCcgPT4gJHRoaXMtPmxpc3RpbmRlbnRsZXZlbCwKCQkJJ2xpc3RudW0nID0+ICR0aGlzLT5saXN0bnVtLAoJCQknbGlzdG9yZGVyZWQnID0+ICR0aGlzLT5saXN0b3JkZXJlZCwKCQkJJ2xpc3Rjb3VudCcgPT4gJHRoaXMtPmxpc3Rjb3VudCwKCQkJJ2xpc3BhY2VyJyA9PiAkdGhpcy0+bGlzcGFjZXIsCgkJCSdjZWxsX2hlaWdodF9yYXRpbycgPT4gJHRoaXMtPmNlbGxfaGVpZ2h0X3JhdGlvLAoJCQknZm9udF9zdHJldGNoaW5nJyA9PiAkdGhpcy0+Zm9udF9zdHJldGNoaW5nLAoJCQknZm9udF9zcGFjaW5nJyA9PiAkdGhpcy0+Zm9udF9zcGFjaW5nLAoJCQknYWxwaGEnID0+ICR0aGlzLT5hbHBoYSwKCQkJLy8gZXh0ZW5kZWQKCQkJJ2xhc3RoJyA9PiAkdGhpcy0+bGFzdGgsCgkJCSd0TWFyZ2luJyA9PiAkdGhpcy0+dE1hcmdpbiwKCQkJJ2JNYXJnaW4nID0+ICR0aGlzLT5iTWFyZ2luLAoJCQknQXV0b1BhZ2VCcmVhaycgPT4gJHRoaXMtPkF1dG9QYWdlQnJlYWssCgkJCSdQYWdlQnJlYWtUcmlnZ2VyJyA9PiAkdGhpcy0+UGFnZUJyZWFrVHJpZ2dlciwKCQkJJ3gnID0+ICR0aGlzLT54LAoJCQkneScgPT4gJHRoaXMtPnksCgkJCSd3JyA9PiAkdGhpcy0+dywKCQkJJ2gnID0+ICR0aGlzLT5oLAoJCQknd1B0JyA9PiAkdGhpcy0+d1B0LAoJCQknaFB0JyA9PiAkdGhpcy0+aFB0LAoJCQknZndQdCcgPT4gJHRoaXMtPmZ3UHQsCgkJCSdmaFB0JyA9PiAkdGhpcy0+ZmhQdCwKCQkJJ3BhZ2UnID0+ICR0aGlzLT5wYWdlLAoJCQknY3VycmVudF9jb2x1bW4nID0+ICR0aGlzLT5jdXJyZW50X2NvbHVtbiwKCQkJJ251bV9jb2x1bW5zJyA9PiAkdGhpcy0+bnVtX2NvbHVtbnMKCQkJKTsKCQlyZXR1cm4gJGdyYXB2YXJzOwoJfQoKCS8qKgoJICogU2V0IGdyYXBoaWMgdmFyaWFibGVzLgoJICogQHBhcmFtICRndmFycyAoYXJyYXkpIGFycmF5IG9mIGdyYXBoaWMgdmFyaWFibGVzdG8gcmVzdG9yZQoJICogQHBhcmFtICRleHRlbmRlZCAoYm9vbGVhbikgaWYgdHJ1ZSByZXN0b3JlIGV4dGVuZGVkIGdyYXBoaWMgdmFyaWFibGVzCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC4yLjAxMCAoMjAwOC0xMS0xNCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEdyYXBoaWNWYXJzKCRndmFycywgJGV4dGVuZGVkPWZhbHNlKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCSR0aGlzLT5Gb250RmFtaWx5ID0gJGd2YXJzWydGb250RmFtaWx5J107CgkJJHRoaXMtPkZvbnRTdHlsZSA9ICRndmFyc1snRm9udFN0eWxlJ107CgkJJHRoaXMtPkZvbnRTaXplUHQgPSAkZ3ZhcnNbJ0ZvbnRTaXplUHQnXTsKCQkkdGhpcy0+ck1hcmdpbiA9ICRndmFyc1snck1hcmdpbiddOwoJCSR0aGlzLT5sTWFyZ2luID0gJGd2YXJzWydsTWFyZ2luJ107CgkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICRndmFyc1snY2VsbF9wYWRkaW5nJ107CgkJJHRoaXMtPmNlbGxfbWFyZ2luID0gJGd2YXJzWydjZWxsX21hcmdpbiddOwoJCSR0aGlzLT5MaW5lV2lkdGggPSAkZ3ZhcnNbJ0xpbmVXaWR0aCddOwoJCSR0aGlzLT5saW5lc3R5bGVXaWR0aCA9ICRndmFyc1snbGluZXN0eWxlV2lkdGgnXTsKCQkkdGhpcy0+bGluZXN0eWxlQ2FwID0gJGd2YXJzWydsaW5lc3R5bGVDYXAnXTsKCQkkdGhpcy0+bGluZXN0eWxlSm9pbiA9ICRndmFyc1snbGluZXN0eWxlSm9pbiddOwoJCSR0aGlzLT5saW5lc3R5bGVEYXNoID0gJGd2YXJzWydsaW5lc3R5bGVEYXNoJ107CgkJJHRoaXMtPnRleHRyZW5kZXJtb2RlID0gJGd2YXJzWyd0ZXh0cmVuZGVybW9kZSddOwoJCSR0aGlzLT50ZXh0c3Ryb2tld2lkdGggPSAkZ3ZhcnNbJ3RleHRzdHJva2V3aWR0aCddOwoJCSR0aGlzLT5EcmF3Q29sb3IgPSAkZ3ZhcnNbJ0RyYXdDb2xvciddOwoJCSR0aGlzLT5GaWxsQ29sb3IgPSAkZ3ZhcnNbJ0ZpbGxDb2xvciddOwoJCSR0aGlzLT5UZXh0Q29sb3IgPSAkZ3ZhcnNbJ1RleHRDb2xvciddOwoJCSR0aGlzLT5Db2xvckZsYWcgPSAkZ3ZhcnNbJ0NvbG9yRmxhZyddOwoJCSR0aGlzLT5iZ2NvbG9yID0gJGd2YXJzWydiZ2NvbG9yJ107CgkJJHRoaXMtPmZnY29sb3IgPSAkZ3ZhcnNbJ2ZnY29sb3InXTsKCQkkdGhpcy0+aHRtbHZzcGFjZSA9ICRndmFyc1snaHRtbHZzcGFjZSddOwoJCSR0aGlzLT5saXN0aW5kZW50ID0gJGd2YXJzWydsaXN0aW5kZW50J107CgkJJHRoaXMtPmxpc3RpbmRlbnRsZXZlbCA9ICRndmFyc1snbGlzdGluZGVudGxldmVsJ107CgkJJHRoaXMtPmxpc3RudW0gPSAkZ3ZhcnNbJ2xpc3RudW0nXTsKCQkkdGhpcy0+bGlzdG9yZGVyZWQgPSAkZ3ZhcnNbJ2xpc3RvcmRlcmVkJ107CgkJJHRoaXMtPmxpc3Rjb3VudCA9ICRndmFyc1snbGlzdGNvdW50J107CgkJJHRoaXMtPmxpc3BhY2VyID0gJGd2YXJzWydsaXNwYWNlciddOwoJCSR0aGlzLT5jZWxsX2hlaWdodF9yYXRpbyA9ICRndmFyc1snY2VsbF9oZWlnaHRfcmF0aW8nXTsKCQkkdGhpcy0+Zm9udF9zdHJldGNoaW5nID0gJGd2YXJzWydmb250X3N0cmV0Y2hpbmcnXTsKCQkkdGhpcy0+Zm9udF9zcGFjaW5nID0gJGd2YXJzWydmb250X3NwYWNpbmcnXTsKCQkkdGhpcy0+YWxwaGEgPSAkZ3ZhcnNbJ2FscGhhJ107CgkJaWYgKCRleHRlbmRlZCkgewoJCQkvLyByZXN0b3JlIGV4dGVuZGVkIHZhbHVlcwoJCQkkdGhpcy0+bGFzdGggPSAkZ3ZhcnNbJ2xhc3RoJ107CgkJCSR0aGlzLT50TWFyZ2luID0gJGd2YXJzWyd0TWFyZ2luJ107CgkJCSR0aGlzLT5iTWFyZ2luID0gJGd2YXJzWydiTWFyZ2luJ107CgkJCSR0aGlzLT5BdXRvUGFnZUJyZWFrID0gJGd2YXJzWydBdXRvUGFnZUJyZWFrJ107CgkJCSR0aGlzLT5QYWdlQnJlYWtUcmlnZ2VyID0gJGd2YXJzWydQYWdlQnJlYWtUcmlnZ2VyJ107CgkJCSR0aGlzLT54ID0gJGd2YXJzWyd4J107CgkJCSR0aGlzLT55ID0gJGd2YXJzWyd5J107CgkJCSR0aGlzLT53ID0gJGd2YXJzWyd3J107CgkJCSR0aGlzLT5oID0gJGd2YXJzWydoJ107CgkJCSR0aGlzLT53UHQgPSAkZ3ZhcnNbJ3dQdCddOwoJCQkkdGhpcy0+aFB0ID0gJGd2YXJzWydoUHQnXTsKCQkJJHRoaXMtPmZ3UHQgPSAkZ3ZhcnNbJ2Z3UHQnXTsKCQkJJHRoaXMtPmZoUHQgPSAkZ3ZhcnNbJ2ZoUHQnXTsKCQkJJHRoaXMtPnBhZ2UgPSAkZ3ZhcnNbJ3BhZ2UnXTsKCQkJJHRoaXMtPmN1cnJlbnRfY29sdW1uID0gJGd2YXJzWydjdXJyZW50X2NvbHVtbiddOwoJCQkkdGhpcy0+bnVtX2NvbHVtbnMgPSAkZ3ZhcnNbJ251bV9jb2x1bW5zJ107CgkJfQoJCSR0aGlzLT5fb3V0KCcnLiR0aGlzLT5saW5lc3R5bGVXaWR0aC4nICcuJHRoaXMtPmxpbmVzdHlsZUNhcC4nICcuJHRoaXMtPmxpbmVzdHlsZUpvaW4uJyAnLiR0aGlzLT5saW5lc3R5bGVEYXNoLicgJy4kdGhpcy0+RHJhd0NvbG9yLicgJy4kdGhpcy0+RmlsbENvbG9yLicnKTsKCQlpZiAoIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5Gb250RmFtaWx5KSkgewoJCQkkdGhpcy0+U2V0Rm9udCgkdGhpcy0+Rm9udEZhbWlseSwgJHRoaXMtPkZvbnRTdHlsZSwgJHRoaXMtPkZvbnRTaXplUHQpOwoJCX0KCX0KCgkvKioKCSAqIE91dHB1dHMgdGhlICJzYXZlIGdyYXBoaWNzIHN0YXRlIiBvcGVyYXRvciAncScKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIF9vdXRTYXZlR3JhcGhpY3NTdGF0ZSgpIHsKCQkkdGhpcy0+X291dCgncScpOwoJfQoKCS8qKgoJICogT3V0cHV0cyB0aGUgInJlc3RvcmUgZ3JhcGhpY3Mgc3RhdGUiIG9wZXJhdG9yICdRJwoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gX291dFJlc3RvcmVHcmFwaGljc1N0YXRlKCkgewoJCSR0aGlzLT5fb3V0KCdRJyk7Cgl9CgoJLyoqCgkgKiBXcml0ZXMgZGF0YSB0byBhIHRlbXBvcmFyeSBmaWxlIG9uIGZpbGVzeXN0ZW0uCgkgKiBAcGFyYW0gJGZpbGVuYW1lIChzdHJpbmcpIGZpbGUgbmFtZQoJICogQHBhcmFtICRkYXRhIChtaXhlZCkgZGF0YSB0byB3cml0ZSBvbiBmaWxlCgkgKiBAcGFyYW0gJGFwcGVuZCAoYm9vbGVhbikgaWYgdHJ1ZSBhcHBlbmQgZGF0YSwgZmFsc2UgcmVwbGFjZS4KCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gd3JpdGVEaXNrQ2FjaGUoJGZpbGVuYW1lLCAkZGF0YSwgJGFwcGVuZD1mYWxzZSkgewoJCWlmICgkYXBwZW5kKSB7CgkJCSRmbW9kZSA9ICdhYisnOwoJCX0gZWxzZSB7CgkJCSRmbW9kZSA9ICd3YisnOwoJCX0KCQkkZiA9IEBmb3BlbigkZmlsZW5hbWUsICRmbW9kZSk7CgkJaWYgKCEkZikgewoJCQkkdGhpcy0+RXJyb3IoJ1VuYWJsZSB0byB3cml0ZSBjYWNoZSBmaWxlOiAnLiRmaWxlbmFtZSk7CgkJfSBlbHNlIHsKCQkJZndyaXRlKCRmLCAkZGF0YSk7CgkJCWZjbG9zZSgkZik7CgkJfQoJCS8vIHVwZGF0ZSBmaWxlIGxlbmd0aCAobmVlZGVkIGZvciB0cmFuc2FjdGlvbnMpCgkJaWYgKCFpc3NldCgkdGhpcy0+Y2FjaGVfZmlsZV9sZW5ndGhbJ18nLiRmaWxlbmFtZV0pKSB7CgkJCSR0aGlzLT5jYWNoZV9maWxlX2xlbmd0aFsnXycuJGZpbGVuYW1lXSA9IHN0cmxlbigkZGF0YSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmNhY2hlX2ZpbGVfbGVuZ3RoWydfJy4kZmlsZW5hbWVdICs9IHN0cmxlbigkZGF0YSk7CgkJfQoJfQoKCS8qKgoJICogUmVhZCBkYXRhIGZyb20gYSB0ZW1wb3JhcnkgZmlsZSBvbiBmaWxlc3lzdGVtLgoJICogQHBhcmFtICRmaWxlbmFtZSAoc3RyaW5nKSBmaWxlIG5hbWUKCSAqIEByZXR1cm4gbWl4ZWQgcmV0cmlldmVkIGRhdGEKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gcmVhZERpc2tDYWNoZSgkZmlsZW5hbWUpIHsKCQlyZXR1cm4gZmlsZV9nZXRfY29udGVudHMoJGZpbGVuYW1lKTsKCX0KCgkvKioKCSAqIFNldCBidWZmZXIgY29udGVudCAoYWx3YXlzIGFwcGVuZCBkYXRhKS4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBkYXRhCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOS0wMS0wMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEJ1ZmZlcigkZGF0YSkgewoJCSR0aGlzLT5idWZmZXJsZW4gKz0gc3RybGVuKCRkYXRhKTsKCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSkgewoJCQlpZiAoIWlzc2V0KCR0aGlzLT5idWZmZXIpIE9SIFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR0aGlzLT5idWZmZXIpKSB7CgkJCQkkdGhpcy0+YnVmZmVyID0gVENQREZfU1RBVElDOjpnZXRPYmpGaWxlbmFtZSgnYnVmJyk7CgkJCX0KCQkJJHRoaXMtPndyaXRlRGlza0NhY2hlKCR0aGlzLT5idWZmZXIsICRkYXRhLCB0cnVlKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+YnVmZmVyIC49ICRkYXRhOwoJCX0KCX0KCgkvKioKCSAqIFJlcGxhY2UgdGhlIGJ1ZmZlciBjb250ZW50CgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgZGF0YQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDUuNS4wMDAgKDIwMTAtMDYtMjIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiByZXBsYWNlQnVmZmVyKCRkYXRhKSB7CgkJJHRoaXMtPmJ1ZmZlcmxlbiA9IHN0cmxlbigkZGF0YSk7CgkJaWYgKCR0aGlzLT5kaXNrY2FjaGUpIHsKCQkJaWYgKCFpc3NldCgkdGhpcy0+YnVmZmVyKSBPUiBUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+YnVmZmVyKSkgewoJCQkJJHRoaXMtPmJ1ZmZlciA9IFRDUERGX1NUQVRJQzo6Z2V0T2JqRmlsZW5hbWUoJ2J1ZicpOwoJCQl9CgkJCSR0aGlzLT53cml0ZURpc2tDYWNoZSgkdGhpcy0+YnVmZmVyLCAkZGF0YSwgZmFsc2UpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5idWZmZXIgPSAkZGF0YTsKCQl9Cgl9CgoJLyoqCgkgKiBHZXQgYnVmZmVyIGNvbnRlbnQuCgkgKiBAcmV0dXJuIHN0cmluZyBidWZmZXIgY29udGVudAoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNS4wMDAgKDIwMDktMDEtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRCdWZmZXIoKSB7CgkJaWYgKCR0aGlzLT5kaXNrY2FjaGUpIHsKCQkJcmV0dXJuICR0aGlzLT5yZWFkRGlza0NhY2hlKCR0aGlzLT5idWZmZXIpOwoJCX0gZWxzZSB7CgkJCXJldHVybiAkdGhpcy0+YnVmZmVyOwoJCX0KCX0KCgkvKioKCSAqIFNldCBwYWdlIGJ1ZmZlciBjb250ZW50LgoJICogQHBhcmFtICRwYWdlIChpbnQpIHBhZ2UgbnVtYmVyCgkgKiBAcGFyYW0gJGRhdGEgKHN0cmluZykgcGFnZSBkYXRhCgkgKiBAcGFyYW0gJGFwcGVuZCAoYm9vbGVhbikgaWYgdHJ1ZSBhcHBlbmQgZGF0YSwgZmFsc2UgcmVwbGFjZS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0UGFnZUJ1ZmZlcigkcGFnZSwgJGRhdGEsICRhcHBlbmQ9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSkgewoJCQlpZiAoIWlzc2V0KCR0aGlzLT5wYWdlc1skcGFnZV0pKSB7CgkJCQkkdGhpcy0+cGFnZXNbJHBhZ2VdID0gVENQREZfU1RBVElDOjpnZXRPYmpGaWxlbmFtZSgncGFnZScpOwoJCQl9CgkJCSR0aGlzLT53cml0ZURpc2tDYWNoZSgkdGhpcy0+cGFnZXNbJHBhZ2VdLCAkZGF0YSwgJGFwcGVuZCk7CgkJfSBlbHNlIHsKCQkJaWYgKCRhcHBlbmQpIHsKCQkJCSR0aGlzLT5wYWdlc1skcGFnZV0gLj0gJGRhdGE7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+cGFnZXNbJHBhZ2VdID0gJGRhdGE7CgkJCX0KCQl9CgkJaWYgKCRhcHBlbmQgQU5EIGlzc2V0KCR0aGlzLT5wYWdlbGVuWyRwYWdlXSkpIHsKCQkJJHRoaXMtPnBhZ2VsZW5bJHBhZ2VdICs9IHN0cmxlbigkZGF0YSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnBhZ2VsZW5bJHBhZ2VdID0gc3RybGVuKCRkYXRhKTsKCQl9Cgl9CgoJLyoqCgkgKiBHZXQgcGFnZSBidWZmZXIgY29udGVudC4KCSAqIEBwYXJhbSAkcGFnZSAoaW50KSBwYWdlIG51bWJlcgoJICogQHJldHVybiBzdHJpbmcgcGFnZSBidWZmZXIgY29udGVudCBvciBmYWxzZSBpbiBjYXNlIG9mIGVycm9yCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldFBhZ2VCdWZmZXIoJHBhZ2UpIHsKCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSkgewoJCQlyZXR1cm4gJHRoaXMtPnJlYWREaXNrQ2FjaGUoJHRoaXMtPnBhZ2VzWyRwYWdlXSk7CgkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5wYWdlc1skcGFnZV0pKSB7CgkJCXJldHVybiAkdGhpcy0+cGFnZXNbJHBhZ2VdOwoJCX0KCQlyZXR1cm4gZmFsc2U7Cgl9CgoJLyoqCgkgKiBTZXQgaW1hZ2UgYnVmZmVyIGNvbnRlbnQuCgkgKiBAcGFyYW0gJGltYWdlIChzdHJpbmcpIGltYWdlIGtleQoJICogQHBhcmFtICRkYXRhIChhcnJheSkgaW1hZ2UgZGF0YQoJICogQHJldHVybiBpbnQgaW1hZ2UgaW5kZXggbnVtYmVyCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOC0xMi0zMSkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldEltYWdlQnVmZmVyKCRpbWFnZSwgJGRhdGEpIHsKCQlpZiAoKCRkYXRhWydpJ10gPSBhcnJheV9zZWFyY2goJGltYWdlLCAkdGhpcy0+aW1hZ2VrZXlzKSkgPT09IEZBTFNFKSB7CgkJCSR0aGlzLT5pbWFnZWtleXNbJHRoaXMtPm51bWltYWdlc10gPSAkaW1hZ2U7CgkJCSRkYXRhWydpJ10gPSAkdGhpcy0+bnVtaW1hZ2VzOwoJCQkrKyR0aGlzLT5udW1pbWFnZXM7CgkJfQoJCWlmICgkdGhpcy0+ZGlza2NhY2hlKSB7CgkJCWlmICghaXNzZXQoJHRoaXMtPmltYWdlc1skaW1hZ2VdKSkgewoJCQkJJHRoaXMtPmltYWdlc1skaW1hZ2VdID0gVENQREZfU1RBVElDOjpnZXRPYmpGaWxlbmFtZSgnaW1nJyk7CgkJCX0KCQkJJHRoaXMtPndyaXRlRGlza0NhY2hlKCR0aGlzLT5pbWFnZXNbJGltYWdlXSwgc2VyaWFsaXplKCRkYXRhKSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmltYWdlc1skaW1hZ2VdID0gJGRhdGE7CgkJfQoJCXJldHVybiAkZGF0YVsnaSddOwoJfQoKCS8qKgoJICogU2V0IGltYWdlIGJ1ZmZlciBjb250ZW50IGZvciBhIHNwZWNpZmllZCBzdWIta2V5LgoJICogQHBhcmFtICRpbWFnZSAoc3RyaW5nKSBpbWFnZSBrZXkKCSAqIEBwYXJhbSAka2V5IChzdHJpbmcpIGltYWdlIHN1Yi1rZXkKCSAqIEBwYXJhbSAkZGF0YSAoYXJyYXkpIGltYWdlIGRhdGEKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0SW1hZ2VTdWJCdWZmZXIoJGltYWdlLCAka2V5LCAkZGF0YSkgewoJCWlmICghaXNzZXQoJHRoaXMtPmltYWdlc1skaW1hZ2VdKSkgewoJCQkkdGhpcy0+c2V0SW1hZ2VCdWZmZXIoJGltYWdlLCBhcnJheSgpKTsKCQl9CgkJaWYgKCR0aGlzLT5kaXNrY2FjaGUpIHsKCQkJJHRtcGltZyA9ICR0aGlzLT5nZXRJbWFnZUJ1ZmZlcigkaW1hZ2UpOwoJCQkkdG1waW1nWyRrZXldID0gJGRhdGE7CgkJCSR0aGlzLT53cml0ZURpc2tDYWNoZSgkdGhpcy0+aW1hZ2VzWyRpbWFnZV0sIHNlcmlhbGl6ZSgkdG1waW1nKSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmltYWdlc1skaW1hZ2VdWyRrZXldID0gJGRhdGE7CgkJfQoJfQoKCS8qKgoJICogR2V0IGltYWdlIGJ1ZmZlciBjb250ZW50LgoJICogQHBhcmFtICRpbWFnZSAoc3RyaW5nKSBpbWFnZSBrZXkKCSAqIEByZXR1cm4gc3RyaW5nIGltYWdlIGJ1ZmZlciBjb250ZW50IG9yIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA4LTEyLTMxKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SW1hZ2VCdWZmZXIoJGltYWdlKSB7CgkJaWYgKCR0aGlzLT5kaXNrY2FjaGUgQU5EIGlzc2V0KCR0aGlzLT5pbWFnZXNbJGltYWdlXSkpIHsKCQkJcmV0dXJuIHVuc2VyaWFsaXplKCR0aGlzLT5yZWFkRGlza0NhY2hlKCR0aGlzLT5pbWFnZXNbJGltYWdlXSkpOwoJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+aW1hZ2VzWyRpbWFnZV0pKSB7CgkJCXJldHVybiAkdGhpcy0+aW1hZ2VzWyRpbWFnZV07CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIFNldCBmb250IGJ1ZmZlciBjb250ZW50LgoJICogQHBhcmFtICRmb250IChzdHJpbmcpIGZvbnQga2V5CgkgKiBAcGFyYW0gJGRhdGEgKGFycmF5KSBmb250IGRhdGEKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA5LTAxLTAyKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0Rm9udEJ1ZmZlcigkZm9udCwgJGRhdGEpIHsKCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSkgewoJCQlpZiAoIWlzc2V0KCR0aGlzLT5mb250c1skZm9udF0pKSB7CgkJCQkkdGhpcy0+Zm9udHNbJGZvbnRdID0gVENQREZfU1RBVElDOjpnZXRPYmpGaWxlbmFtZSgnZm9udCcpOwoJCQl9CgkJCSR0aGlzLT53cml0ZURpc2tDYWNoZSgkdGhpcy0+Zm9udHNbJGZvbnRdLCBzZXJpYWxpemUoJGRhdGEpKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+Zm9udHNbJGZvbnRdID0gJGRhdGE7CgkJfQoJCWlmICghaW5fYXJyYXkoJGZvbnQsICR0aGlzLT5mb250a2V5cykpIHsKCQkJJHRoaXMtPmZvbnRrZXlzW10gPSAkZm9udDsKCQkJLy8gc3RvcmUgb2JqZWN0IElEIGZvciBjdXJyZW50IGZvbnQKCQkJKyskdGhpcy0+bjsKCQkJJHRoaXMtPmZvbnRfb2JqX2lkc1skZm9udF0gPSAkdGhpcy0+bjsKCQkJJHRoaXMtPnNldEZvbnRTdWJCdWZmZXIoJGZvbnQsICduJywgJHRoaXMtPm4pOwoJCX0KCX0KCgkvKioKCSAqIFNldCBmb250IGJ1ZmZlciBjb250ZW50LgoJICogQHBhcmFtICRmb250IChzdHJpbmcpIGZvbnQga2V5CgkgKiBAcGFyYW0gJGtleSAoc3RyaW5nKSBmb250IHN1Yi1rZXkKCSAqIEBwYXJhbSAkZGF0YSAoYXJyYXkpIGZvbnQgZGF0YQoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDQuNS4wMDAgKDIwMDktMDEtMDIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZXRGb250U3ViQnVmZmVyKCRmb250LCAka2V5LCAkZGF0YSkgewoJCWlmICghaXNzZXQoJHRoaXMtPmZvbnRzWyRmb250XSkpIHsKCQkJJHRoaXMtPnNldEZvbnRCdWZmZXIoJGZvbnQsIGFycmF5KCkpOwoJCX0KCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSkgewoJCQkkdG1wZm9udCA9ICR0aGlzLT5nZXRGb250QnVmZmVyKCRmb250KTsKCQkJJHRtcGZvbnRbJGtleV0gPSAkZGF0YTsKCQkJJHRoaXMtPndyaXRlRGlza0NhY2hlKCR0aGlzLT5mb250c1skZm9udF0sIHNlcmlhbGl6ZSgkdG1wZm9udCkpOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT5mb250c1skZm9udF1bJGtleV0gPSAkZGF0YTsKCQl9Cgl9CgoJLyoqCgkgKiBHZXQgZm9udCBidWZmZXIgY29udGVudC4KCSAqIEBwYXJhbSAkZm9udCAoc3RyaW5nKSBmb250IGtleQoJICogQHJldHVybiBzdHJpbmcgZm9udCBidWZmZXIgY29udGVudCBvciBmYWxzZSBpbiBjYXNlIG9mIGVycm9yCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNC41LjAwMCAoMjAwOS0wMS0wMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldEZvbnRCdWZmZXIoJGZvbnQpIHsKCQlpZiAoJHRoaXMtPmRpc2tjYWNoZSBBTkQgaXNzZXQoJHRoaXMtPmZvbnRzWyRmb250XSkpIHsKCQkJcmV0dXJuIHVuc2VyaWFsaXplKCR0aGlzLT5yZWFkRGlza0NhY2hlKCR0aGlzLT5mb250c1skZm9udF0pKTsKCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvbnRzWyRmb250XSkpIHsKCQkJcmV0dXJuICR0aGlzLT5mb250c1skZm9udF07CgkJfQoJCXJldHVybiBmYWxzZTsKCX0KCgkvKioKCSAqIE1vdmUgYSBwYWdlIHRvIGEgcHJldmlvdXMgcG9zaXRpb24uCgkgKiBAcGFyYW0gJGZyb21wYWdlIChpbnQpIG51bWJlciBvZiB0aGUgc291cmNlIHBhZ2UKCSAqIEBwYXJhbSAkdG9wYWdlIChpbnQpIG51bWJlciBvZiB0aGUgZGVzdGluYXRpb24gcGFnZSAobXVzdCBiZSBsZXNzIHRoYW4gJGZyb21wYWdlKQoJICogQHJldHVybiB0cnVlIGluIGNhc2Ugb2Ygc3VjY2VzcywgZmFsc2UgaW4gY2FzZSBvZiBlcnJvci4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjUuMDAwICgyMDA5LTAxLTAyKQoJICovCglwdWJsaWMgZnVuY3Rpb24gbW92ZVBhZ2UoJGZyb21wYWdlLCAkdG9wYWdlKSB7CgkJaWYgKCgkZnJvbXBhZ2UgPiAkdGhpcy0+bnVtcGFnZXMpIE9SICgkZnJvbXBhZ2UgPD0gJHRvcGFnZSkpIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAoJGZyb21wYWdlID09ICR0aGlzLT5wYWdlKSB7CgkJCS8vIGNsb3NlIHRoZSBwYWdlIGJlZm9yZSBtb3ZpbmcgaXQKCQkJJHRoaXMtPmVuZFBhZ2UoKTsKCQl9CgkJLy8gbW92ZSBhbGwgcGFnZS1yZWxhdGVkIHN0YXRlcwoJCSR0bXBwYWdlID0gJHRoaXMtPmdldFBhZ2VCdWZmZXIoJGZyb21wYWdlKTsKCQkkdG1wcGFnZWRpbSA9ICR0aGlzLT5wYWdlZGltWyRmcm9tcGFnZV07CgkJJHRtcHBhZ2VsZW4gPSAkdGhpcy0+cGFnZWxlblskZnJvbXBhZ2VdOwoJCSR0bXBpbnRtcmsgPSAkdGhpcy0+aW50bXJrWyRmcm9tcGFnZV07CgkJJHRtcGJvcmRlcm1yayA9ICR0aGlzLT5ib3JkZXJtcmtbJGZyb21wYWdlXTsKCQkkdG1wY250bXJrID0gJHRoaXMtPmNudG1ya1skZnJvbXBhZ2VdOwoJCSR0bXBwYWdlb2JqZWN0cyA9ICR0aGlzLT5wYWdlb2JqZWN0c1skZnJvbXBhZ2VdOwoJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRmcm9tcGFnZV0pKSB7CgkJCSR0bXBmb290ZXJwb3MgPSAkdGhpcy0+Zm9vdGVycG9zWyRmcm9tcGFnZV07CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVybGVuWyRmcm9tcGFnZV0pKSB7CgkJCSR0bXBmb290ZXJsZW4gPSAkdGhpcy0+Zm9vdGVybGVuWyRmcm9tcGFnZV07CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+dHJhbnNmbXJrWyRmcm9tcGFnZV0pKSB7CgkJCSR0bXB0cmFuc2ZtcmsgPSAkdGhpcy0+dHJhbnNmbXJrWyRmcm9tcGFnZV07CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skZnJvbXBhZ2VdKSkgewoJCQkkdG1wYW5ub3RzID0gJHRoaXMtPlBhZ2VBbm5vdHNbJGZyb21wYWdlXTsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5uZXdwYWdlZ3JvdXApIEFORCAhZW1wdHkoJHRoaXMtPm5ld3BhZ2Vncm91cCkpIHsKCQkJZm9yICgkaSA9ICRmcm9tcGFnZTsgJGkgPiAkdG9wYWdlOyAtLSRpKSB7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskaV0pIEFORCAoKCRpICsgJHRoaXMtPnBhZ2Vncm91cHNbJHRoaXMtPm5ld3BhZ2Vncm91cFskaV1dKSA+ICRmcm9tcGFnZSkpIHsKCQkJCQktLSR0aGlzLT5wYWdlZ3JvdXBzWyR0aGlzLT5uZXdwYWdlZ3JvdXBbJGldXTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQlmb3IgKCRpID0gJHRvcGFnZTsgJGkgPiAwOyAtLSRpKSB7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskaV0pIEFORCAoKCRpICsgJHRoaXMtPnBhZ2Vncm91cHNbJHRoaXMtPm5ld3BhZ2Vncm91cFskaV1dKSA+ICR0b3BhZ2UpKSB7CgkJCQkJKyskdGhpcy0+cGFnZWdyb3Vwc1skdGhpcy0+bmV3cGFnZWdyb3VwWyRpXV07CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9CgkJZm9yICgkaSA9ICRmcm9tcGFnZTsgJGkgPiAkdG9wYWdlOyAtLSRpKSB7CgkJCSRqID0gJGkgLSAxOwoJCQkvLyBzaGlmdCBwYWdlcyBkb3duCgkJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCRpLCAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkaikpOwoJCQkkdGhpcy0+cGFnZWRpbVskaV0gPSAkdGhpcy0+cGFnZWRpbVskal07CgkJCSR0aGlzLT5wYWdlbGVuWyRpXSA9ICR0aGlzLT5wYWdlbGVuWyRqXTsKCQkJJHRoaXMtPmludG1ya1skaV0gPSAkdGhpcy0+aW50bXJrWyRqXTsKCQkJJHRoaXMtPmJvcmRlcm1ya1skaV0gPSAkdGhpcy0+Ym9yZGVybXJrWyRqXTsKCQkJJHRoaXMtPmNudG1ya1skaV0gPSAkdGhpcy0+Y250bXJrWyRqXTsKCQkJJHRoaXMtPnBhZ2VvYmplY3RzWyRpXSA9ICR0aGlzLT5wYWdlb2JqZWN0c1skal07CgkJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRqXSkpIHsKCQkJCSR0aGlzLT5mb290ZXJwb3NbJGldID0gJHRoaXMtPmZvb3RlcnBvc1skal07CgkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRpXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT5mb290ZXJwb3NbJGldKTsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3Rlcmxlblskal0pKSB7CgkJCQkkdGhpcy0+Zm9vdGVybGVuWyRpXSA9ICR0aGlzLT5mb290ZXJsZW5bJGpdOwoJCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcmxlblskaV0pKSB7CgkJCQl1bnNldCgkdGhpcy0+Zm9vdGVybGVuWyRpXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT50cmFuc2ZtcmtbJGpdKSkgewoJCQkJJHRoaXMtPnRyYW5zZm1ya1skaV0gPSAkdGhpcy0+dHJhbnNmbXJrWyRqXTsKCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT50cmFuc2ZtcmtbJGldKSkgewoJCQkJdW5zZXQoJHRoaXMtPnRyYW5zZm1ya1skaV0pOwoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skal0pKSB7CgkJCQkkdGhpcy0+UGFnZUFubm90c1skaV0gPSAkdGhpcy0+UGFnZUFubm90c1skal07CgkJCX0gZWxzZWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skaV0pKSB7CgkJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skaV0pOwoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+bmV3cGFnZWdyb3VwWyRqXSkpIHsKCQkJCSR0aGlzLT5uZXdwYWdlZ3JvdXBbJGldID0gJHRoaXMtPm5ld3BhZ2Vncm91cFskal07CgkJCQl1bnNldCgkdGhpcy0+bmV3cGFnZWdyb3VwWyRqXSk7CgkJCX0KCQkJaWYgKCR0aGlzLT5jdXJycGFnZWdyb3VwID09ICRqKSB7CgkJCQkkdGhpcy0+Y3VycnBhZ2Vncm91cCA9ICRpOwoJCQl9CgkJfQoJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCR0b3BhZ2UsICR0bXBwYWdlKTsKCQkkdGhpcy0+cGFnZWRpbVskdG9wYWdlXSA9ICR0bXBwYWdlZGltOwoJCSR0aGlzLT5wYWdlbGVuWyR0b3BhZ2VdID0gJHRtcHBhZ2VsZW47CgkJJHRoaXMtPmludG1ya1skdG9wYWdlXSA9ICR0bXBpbnRtcms7CgkJJHRoaXMtPmJvcmRlcm1ya1skdG9wYWdlXSA9ICR0bXBib3JkZXJtcms7CgkJJHRoaXMtPmNudG1ya1skdG9wYWdlXSA9ICR0bXBjbnRtcms7CgkJJHRoaXMtPnBhZ2VvYmplY3RzWyR0b3BhZ2VdID0gJHRtcHBhZ2VvYmplY3RzOwoJCWlmIChpc3NldCgkdG1wZm9vdGVycG9zKSkgewoJCQkkdGhpcy0+Zm9vdGVycG9zWyR0b3BhZ2VdID0gJHRtcGZvb3RlcnBvczsKCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcnBvc1skdG9wYWdlXSkpIHsKCQkJdW5zZXQoJHRoaXMtPmZvb3RlcnBvc1skdG9wYWdlXSk7CgkJfQoJCWlmIChpc3NldCgkdG1wZm9vdGVybGVuKSkgewoJCQkkdGhpcy0+Zm9vdGVybGVuWyR0b3BhZ2VdID0gJHRtcGZvb3RlcmxlbjsKCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcmxlblskdG9wYWdlXSkpIHsKCQkJdW5zZXQoJHRoaXMtPmZvb3RlcmxlblskdG9wYWdlXSk7CgkJfQoJCWlmIChpc3NldCgkdG1wdHJhbnNmbXJrKSkgewoJCQkkdGhpcy0+dHJhbnNmbXJrWyR0b3BhZ2VdID0gJHRtcHRyYW5zZm1yazsKCQl9IGVsc2VpZiAoaXNzZXQoJHRoaXMtPnRyYW5zZm1ya1skdG9wYWdlXSkpIHsKCQkJdW5zZXQoJHRoaXMtPnRyYW5zZm1ya1skdG9wYWdlXSk7CgkJfQoJCWlmIChpc3NldCgkdG1wYW5ub3RzKSkgewoJCQkkdGhpcy0+UGFnZUFubm90c1skdG9wYWdlXSA9ICR0bXBhbm5vdHM7CgkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyR0b3BhZ2VdKSkgewoJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skdG9wYWdlXSk7CgkJfQoJCS8vIGFkanVzdCBvdXRsaW5lcwoJCSR0bXBvdXRsaW5lcyA9ICR0aGlzLT5vdXRsaW5lczsKCQlmb3JlYWNoICgkdG1wb3V0bGluZXMgYXMgJGtleSA9PiAkb3V0bGluZSkgewoJCQlpZiAoKCRvdXRsaW5lWydwJ10gPj0gJHRvcGFnZSkgQU5EICgkb3V0bGluZVsncCddIDwgJGZyb21wYWdlKSkgewoJCQkJJHRoaXMtPm91dGxpbmVzWyRrZXldWydwJ10gPSAoJG91dGxpbmVbJ3AnXSArIDEpOwoJCQl9IGVsc2VpZiAoJG91dGxpbmVbJ3AnXSA9PSAkZnJvbXBhZ2UpIHsKCQkJCSR0aGlzLT5vdXRsaW5lc1ska2V5XVsncCddID0gJHRvcGFnZTsKCQkJfQoJCX0KCQkvLyBhZGp1c3QgZGVzdHMKCQkkdG1wZGVzdHMgPSAkdGhpcy0+ZGVzdHM7CgkJZm9yZWFjaCAoJHRtcGRlc3RzIGFzICRrZXkgPT4gJGRlc3QpIHsKCQkJaWYgKCgkZGVzdFsncCddID49ICR0b3BhZ2UpIEFORCAoJGRlc3RbJ3AnXSA8ICRmcm9tcGFnZSkpIHsKCQkJCSR0aGlzLT5kZXN0c1ska2V5XVsncCddID0gKCRkZXN0WydwJ10gKyAxKTsKCQkJfSBlbHNlaWYgKCRkZXN0WydwJ10gPT0gJGZyb21wYWdlKSB7CgkJCQkkdGhpcy0+ZGVzdHNbJGtleV1bJ3AnXSA9ICR0b3BhZ2U7CgkJCX0KCQl9CgkJLy8gYWRqdXN0IGxpbmtzCgkJJHRtcGxpbmtzID0gJHRoaXMtPmxpbmtzOwoJCWZvcmVhY2ggKCR0bXBsaW5rcyBhcyAka2V5ID0+ICRsaW5rKSB7CgkJCWlmICgoJGxpbmtbMF0gPj0gJHRvcGFnZSkgQU5EICgkbGlua1swXSA8ICRmcm9tcGFnZSkpIHsKCQkJCSR0aGlzLT5saW5rc1ska2V5XVswXSA9ICgkbGlua1swXSArIDEpOwoJCQl9IGVsc2VpZiAoJGxpbmtbMF0gPT0gJGZyb21wYWdlKSB7CgkJCQkkdGhpcy0+bGlua3NbJGtleV1bMF0gPSAkdG9wYWdlOwoJCQl9CgkJfQoJCS8vIGFkanVzdCBqYXZhc2NyaXB0CgkJJGpmcm9tcGFnZSA9ICRmcm9tcGFnZTsKCQkkanRvcGFnZSA9ICR0b3BhZ2U7CgkJaWYgKHByZWdfbWF0Y2hfYWxsKCcvdGhpc1wuYWRkRmllbGRcKFwnKFteXCddKilcJyxcJyhbXlwnXSopXCcsKFswLTldKykvJywgJHRoaXMtPmphdmFzY3JpcHQsICRwYW1hdGNoKSA+IDApIHsKCQkJZm9yZWFjaCgkcGFtYXRjaFswXSBhcyAkcGsgPT4gJHBtYXRjaCkgewoJCQkJJHBhZ2VudW0gPSBpbnR2YWwoJHBhbWF0Y2hbM11bJHBrXSkgKyAxOwoJCQkJaWYgKCgkcGFnZW51bSA+PSAkanRvcGFnZSkgQU5EICgkcGFnZW51bSA8ICRqZnJvbXBhZ2UpKSB7CgkJCQkJJG5ld3BhZ2UgPSAoJHBhZ2VudW0gKyAxKTsKCQkJCX0gZWxzZWlmICgkcGFnZW51bSA9PSAkamZyb21wYWdlKSB7CgkJCQkJJG5ld3BhZ2UgPSAkanRvcGFnZTsKCQkJCX0gZWxzZSB7CgkJCQkJJG5ld3BhZ2UgPSAkcGFnZW51bTsKCQkJCX0KCQkJCS0tJG5ld3BhZ2U7CgkJCQkkbmV3anMgPSAidGhpcy5hZGRGaWVsZChcJyIuJHBhbWF0Y2hbMV1bJHBrXS4iXCcsXCciLiRwYW1hdGNoWzJdWyRwa10uIlwnLCIuJG5ld3BhZ2U7CgkJCQkkdGhpcy0+amF2YXNjcmlwdCA9IHN0cl9yZXBsYWNlKCRwbWF0Y2gsICRuZXdqcywgJHRoaXMtPmphdmFzY3JpcHQpOwoJCQl9CgkJCXVuc2V0KCRwYW1hdGNoKTsKCQl9CgkJLy8gcmV0dXJuIHRvIGxhc3QgcGFnZQoJCSR0aGlzLT5sYXN0UGFnZSh0cnVlKTsKCQlyZXR1cm4gdHJ1ZTsKCX0KCgkvKioKCSAqIFJlbW92ZSB0aGUgc3BlY2lmaWVkIHBhZ2UuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgcGFnZSB0byByZW1vdmUKCSAqIEByZXR1cm4gdHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC42LjAwNCAoMjAwOS0wNC0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGRlbGV0ZVBhZ2UoJHBhZ2UpIHsKCQlpZiAoKCRwYWdlIDwgMSkgT1IgKCRwYWdlID4gJHRoaXMtPm51bXBhZ2VzKSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCS8vIGRlbGV0ZSBjdXJyZW50IHBhZ2UKCQl1bnNldCgkdGhpcy0+cGFnZXNbJHBhZ2VdKTsKCQl1bnNldCgkdGhpcy0+cGFnZWRpbVskcGFnZV0pOwoJCXVuc2V0KCR0aGlzLT5wYWdlbGVuWyRwYWdlXSk7CgkJdW5zZXQoJHRoaXMtPmludG1ya1skcGFnZV0pOwoJCXVuc2V0KCR0aGlzLT5ib3JkZXJtcmtbJHBhZ2VdKTsKCQl1bnNldCgkdGhpcy0+Y250bXJrWyRwYWdlXSk7CgkJZm9yZWFjaCAoJHRoaXMtPnBhZ2VvYmplY3RzWyRwYWdlXSBhcyAkb2lkKSB7CgkJCWlmIChpc3NldCgkdGhpcy0+b2Zmc2V0c1skb2lkXSkpewoJCQkJdW5zZXQoJHRoaXMtPm9mZnNldHNbJG9pZF0pOwoJCQl9CgkJfQoJCXVuc2V0KCR0aGlzLT5wYWdlb2JqZWN0c1skcGFnZV0pOwoJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRwYWdlXSkpIHsKCQkJdW5zZXQoJHRoaXMtPmZvb3RlcnBvc1skcGFnZV0pOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPmZvb3RlcmxlblskcGFnZV0pKSB7CgkJCXVuc2V0KCR0aGlzLT5mb290ZXJsZW5bJHBhZ2VdKTsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT50cmFuc2ZtcmtbJHBhZ2VdKSkgewoJCQl1bnNldCgkdGhpcy0+dHJhbnNmbXJrWyRwYWdlXSk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skcGFnZV0pKSB7CgkJCXVuc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyRwYWdlXSk7CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+bmV3cGFnZWdyb3VwKSBBTkQgIWVtcHR5KCR0aGlzLT5uZXdwYWdlZ3JvdXApKSB7CgkJCWZvciAoJGkgPSAkcGFnZTsgJGkgPiAwOyAtLSRpKSB7CgkJCQlpZiAoaXNzZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskaV0pIEFORCAoKCRpICsgJHRoaXMtPnBhZ2Vncm91cHNbJHRoaXMtPm5ld3BhZ2Vncm91cFskaV1dKSA+ICRwYWdlKSkgewoJCQkJCS0tJHRoaXMtPnBhZ2Vncm91cHNbJHRoaXMtPm5ld3BhZ2Vncm91cFskaV1dOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+cGFnZW9wZW5bJHBhZ2VdKSkgewoJCQl1bnNldCgkdGhpcy0+cGFnZW9wZW5bJHBhZ2VdKTsKCQl9CgkJaWYgKCRwYWdlIDwgJHRoaXMtPm51bXBhZ2VzKSB7CgkJCS8vIHVwZGF0ZSByZW1haW5pbmcgcGFnZXMKCQkJZm9yICgkaSA9ICRwYWdlOyAkaSA8ICR0aGlzLT5udW1wYWdlczsgKyskaSkgewoJCQkJJGogPSAkaSArIDE7CgkJCQkvLyBzaGlmdCBwYWdlcwoJCQkJJHRoaXMtPnNldFBhZ2VCdWZmZXIoJGksICR0aGlzLT5nZXRQYWdlQnVmZmVyKCRqKSk7CgkJCQkkdGhpcy0+cGFnZWRpbVskaV0gPSAkdGhpcy0+cGFnZWRpbVskal07CgkJCQkkdGhpcy0+cGFnZWxlblskaV0gPSAkdGhpcy0+cGFnZWxlblskal07CgkJCQkkdGhpcy0+aW50bXJrWyRpXSA9ICR0aGlzLT5pbnRtcmtbJGpdOwoJCQkJJHRoaXMtPmJvcmRlcm1ya1skaV0gPSAkdGhpcy0+Ym9yZGVybXJrWyRqXTsKCQkJCSR0aGlzLT5jbnRtcmtbJGldID0gJHRoaXMtPmNudG1ya1skal07CgkJCQkkdGhpcy0+cGFnZW9iamVjdHNbJGldID0gJHRoaXMtPnBhZ2VvYmplY3RzWyRqXTsKCQkJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRqXSkpIHsKCQkJCQkkdGhpcy0+Zm9vdGVycG9zWyRpXSA9ICR0aGlzLT5mb290ZXJwb3NbJGpdOwoJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJwb3NbJGldKSkgewoJCQkJCXVuc2V0KCR0aGlzLT5mb290ZXJwb3NbJGldKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVybGVuWyRqXSkpIHsKCQkJCQkkdGhpcy0+Zm9vdGVybGVuWyRpXSA9ICR0aGlzLT5mb290ZXJsZW5bJGpdOwoJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJGldKSkgewoJCQkJCXVuc2V0KCR0aGlzLT5mb290ZXJsZW5bJGldKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+dHJhbnNmbXJrWyRqXSkpIHsKCQkJCQkkdGhpcy0+dHJhbnNmbXJrWyRpXSA9ICR0aGlzLT50cmFuc2ZtcmtbJGpdOwoJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT50cmFuc2ZtcmtbJGldKSkgewoJCQkJCXVuc2V0KCR0aGlzLT50cmFuc2ZtcmtbJGldKTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skal0pKSB7CgkJCQkJJHRoaXMtPlBhZ2VBbm5vdHNbJGldID0gJHRoaXMtPlBhZ2VBbm5vdHNbJGpdOwoJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyRpXSkpIHsKCQkJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skaV0pOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCR0aGlzLT5uZXdwYWdlZ3JvdXBbJGpdKSkgewoJCQkJCSR0aGlzLT5uZXdwYWdlZ3JvdXBbJGldID0gJHRoaXMtPm5ld3BhZ2Vncm91cFskal07CgkJCQkJdW5zZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskal0pOwoJCQkJfQoJCQkJaWYgKCR0aGlzLT5jdXJycGFnZWdyb3VwID09ICRqKSB7CgkJCQkJJHRoaXMtPmN1cnJwYWdlZ3JvdXAgPSAkaTsKCQkJCX0KCQkJCWlmIChpc3NldCgkdGhpcy0+cGFnZW9wZW5bJGpdKSkgewoJCQkJCSR0aGlzLT5wYWdlb3BlblskaV0gPSAkdGhpcy0+cGFnZW9wZW5bJGpdOwoJCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5wYWdlb3BlblskaV0pKSB7CgkJCQkJdW5zZXQoJHRoaXMtPnBhZ2VvcGVuWyRpXSk7CgkJCQl9CgkJCX0KCQkJLy8gcmVtb3ZlIGxhc3QgcGFnZQoJCQl1bnNldCgkdGhpcy0+cGFnZXNbJHRoaXMtPm51bXBhZ2VzXSk7CgkJCXVuc2V0KCR0aGlzLT5wYWdlZGltWyR0aGlzLT5udW1wYWdlc10pOwoJCQl1bnNldCgkdGhpcy0+cGFnZWxlblskdGhpcy0+bnVtcGFnZXNdKTsKCQkJdW5zZXQoJHRoaXMtPmludG1ya1skdGhpcy0+bnVtcGFnZXNdKTsKCQkJdW5zZXQoJHRoaXMtPmJvcmRlcm1ya1skdGhpcy0+bnVtcGFnZXNdKTsKCQkJdW5zZXQoJHRoaXMtPmNudG1ya1skdGhpcy0+bnVtcGFnZXNdKTsKCQkJZm9yZWFjaCAoJHRoaXMtPnBhZ2VvYmplY3RzWyR0aGlzLT5udW1wYWdlc10gYXMgJG9pZCkgewoJCQkJaWYgKGlzc2V0KCR0aGlzLT5vZmZzZXRzWyRvaWRdKSl7CgkJCQkJdW5zZXQoJHRoaXMtPm9mZnNldHNbJG9pZF0pOwoJCQkJfQoJCQl9CgkJCXVuc2V0KCR0aGlzLT5wYWdlb2JqZWN0c1skdGhpcy0+bnVtcGFnZXNdKTsKCQkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT5mb290ZXJwb3NbJHRoaXMtPm51bXBhZ2VzXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT5mb290ZXJsZW5bJHRoaXMtPm51bXBhZ2VzXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPm51bXBhZ2VzXSk7CgkJCX0KCQkJaWYgKGlzc2V0KCR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5udW1wYWdlc10pKSB7CgkJCQl1bnNldCgkdGhpcy0+UGFnZUFubm90c1skdGhpcy0+bnVtcGFnZXNdKTsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskdGhpcy0+bnVtcGFnZXNdKSkgewoJCQkJdW5zZXQoJHRoaXMtPm5ld3BhZ2Vncm91cFskdGhpcy0+bnVtcGFnZXNdKTsKCQkJfQoJCQlpZiAoJHRoaXMtPmN1cnJwYWdlZ3JvdXAgPT0gJHRoaXMtPm51bXBhZ2VzKSB7CgkJCQkkdGhpcy0+Y3VycnBhZ2Vncm91cCA9ICgkdGhpcy0+bnVtcGFnZXMgLSAxKTsKCQkJfQoJCQlpZiAoaXNzZXQoJHRoaXMtPnBhZ2Vncm91cHNbJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT5wYWdlZ3JvdXBzWyR0aGlzLT5udW1wYWdlc10pOwoJCQl9CgkJCWlmIChpc3NldCgkdGhpcy0+cGFnZW9wZW5bJHRoaXMtPm51bXBhZ2VzXSkpIHsKCQkJCXVuc2V0KCR0aGlzLT5wYWdlb3BlblskdGhpcy0+bnVtcGFnZXNdKTsKCQkJfQoJCX0KCQktLSR0aGlzLT5udW1wYWdlczsKCQkkdGhpcy0+cGFnZSA9ICR0aGlzLT5udW1wYWdlczsKCQkvLyBhZGp1c3Qgb3V0bGluZXMKCQkkdG1wb3V0bGluZXMgPSAkdGhpcy0+b3V0bGluZXM7CgkJZm9yZWFjaCAoJHRtcG91dGxpbmVzIGFzICRrZXkgPT4gJG91dGxpbmUpIHsKCQkJaWYgKCRvdXRsaW5lWydwJ10gPiAkcGFnZSkgewoJCQkJJHRoaXMtPm91dGxpbmVzWyRrZXldWydwJ10gPSAkb3V0bGluZVsncCddIC0gMTsKCQkJfSBlbHNlaWYgKCRvdXRsaW5lWydwJ10gPT0gJHBhZ2UpIHsKCQkJCXVuc2V0KCR0aGlzLT5vdXRsaW5lc1ska2V5XSk7CgkJCX0KCQl9CgkJLy8gYWRqdXN0IGRlc3RzCgkJJHRtcGRlc3RzID0gJHRoaXMtPmRlc3RzOwoJCWZvcmVhY2ggKCR0bXBkZXN0cyBhcyAka2V5ID0+ICRkZXN0KSB7CgkJCWlmICgkZGVzdFsncCddID4gJHBhZ2UpIHsKCQkJCSR0aGlzLT5kZXN0c1ska2V5XVsncCddID0gJGRlc3RbJ3AnXSAtIDE7CgkJCX0gZWxzZWlmICgkZGVzdFsncCddID09ICRwYWdlKSB7CgkJCQl1bnNldCgkdGhpcy0+ZGVzdHNbJGtleV0pOwoJCQl9CgkJfQoJCS8vIGFkanVzdCBsaW5rcwoJCSR0bXBsaW5rcyA9ICR0aGlzLT5saW5rczsKCQlmb3JlYWNoICgkdG1wbGlua3MgYXMgJGtleSA9PiAkbGluaykgewoJCQlpZiAoJGxpbmtbMF0gPiAkcGFnZSkgewoJCQkJJHRoaXMtPmxpbmtzWyRrZXldWzBdID0gJGxpbmtbMF0gLSAxOwoJCQl9IGVsc2VpZiAoJGxpbmtbMF0gPT0gJHBhZ2UpIHsKCQkJCXVuc2V0KCR0aGlzLT5saW5rc1ska2V5XSk7CgkJCX0KCQl9CgkJLy8gYWRqdXN0IGphdmFzY3JpcHQKCQkkanBhZ2UgPSAkcGFnZTsKCQlpZiAocHJlZ19tYXRjaF9hbGwoJy90aGlzXC5hZGRGaWVsZFwoXCcoW15cJ10qKVwnLFwnKFteXCddKilcJywoWzAtOV0rKS8nLCAkdGhpcy0+amF2YXNjcmlwdCwgJHBhbWF0Y2gpID4gMCkgewoJCQlmb3JlYWNoKCRwYW1hdGNoWzBdIGFzICRwayA9PiAkcG1hdGNoKSB7CgkJCQkkcGFnZW51bSA9IGludHZhbCgkcGFtYXRjaFszXVskcGtdKSArIDE7CgkJCQlpZiAoJHBhZ2VudW0gPj0gJGpwYWdlKSB7CgkJCQkJJG5ld3BhZ2UgPSAoJHBhZ2VudW0gLSAxKTsKCQkJCX0gZWxzZWlmICgkcGFnZW51bSA9PSAkanBhZ2UpIHsKCQkJCQkkbmV3cGFnZSA9IDE7CgkJCQl9IGVsc2UgewoJCQkJCSRuZXdwYWdlID0gJHBhZ2VudW07CgkJCQl9CgkJCQktLSRuZXdwYWdlOwoJCQkJJG5ld2pzID0gInRoaXMuYWRkRmllbGQoXCciLiRwYW1hdGNoWzFdWyRwa10uIlwnLFwnIi4kcGFtYXRjaFsyXVskcGtdLiJcJywiLiRuZXdwYWdlOwoJCQkJJHRoaXMtPmphdmFzY3JpcHQgPSBzdHJfcmVwbGFjZSgkcG1hdGNoLCAkbmV3anMsICR0aGlzLT5qYXZhc2NyaXB0KTsKCQkJfQoJCQl1bnNldCgkcGFtYXRjaCk7CgkJfQoJCS8vIHJldHVybiB0byBsYXN0IHBhZ2UKCQlpZiAoJHRoaXMtPm51bXBhZ2VzID4gMCkgewoJCQkkdGhpcy0+bGFzdFBhZ2UodHJ1ZSk7CgkJfQoJCXJldHVybiB0cnVlOwoJfQoKCS8qKgoJICogQ2xvbmUgdGhlIHNwZWNpZmllZCBwYWdlIHRvIGEgbmV3IHBhZ2UuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgbnVtYmVyIG9mIHBhZ2UgdG8gY29weSAoMCA9IGN1cnJlbnQgcGFnZSkKCSAqIEByZXR1cm4gdHJ1ZSBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC45LjAxNSAoMjAxMC0wNC0yMCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGNvcHlQYWdlKCRwYWdlPTApIHsKCQlpZiAoJHBhZ2UgPT0gMCkgewoJCQkvLyBkZWZhdWx0IHZhbHVlCgkJCSRwYWdlID0gJHRoaXMtPnBhZ2U7CgkJfQoJCWlmICgoJHBhZ2UgPCAxKSBPUiAoJHBhZ2UgPiAkdGhpcy0+bnVtcGFnZXMpKSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy8gY2xvc2UgdGhlIGxhc3QgcGFnZQoJCSR0aGlzLT5lbmRQYWdlKCk7CgkJLy8gY29weSBhbGwgcGFnZS1yZWxhdGVkIHN0YXRlcwoJCSsrJHRoaXMtPm51bXBhZ2VzOwoJCSR0aGlzLT5wYWdlID0gJHRoaXMtPm51bXBhZ2VzOwoJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCR0aGlzLT5wYWdlLCAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkcGFnZSkpOwoJCSR0aGlzLT5wYWdlZGltWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5wYWdlZGltWyRwYWdlXTsKCQkkdGhpcy0+cGFnZWxlblskdGhpcy0+cGFnZV0gPSAkdGhpcy0+cGFnZWxlblskcGFnZV07CgkJJHRoaXMtPmludG1ya1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+aW50bXJrWyRwYWdlXTsKCQkkdGhpcy0+Ym9yZGVybXJrWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5ib3JkZXJtcmtbJHBhZ2VdOwoJCSR0aGlzLT5jbnRtcmtbJHRoaXMtPnBhZ2VdID0gJHRoaXMtPmNudG1ya1skcGFnZV07CgkJJHRoaXMtPnBhZ2VvYmplY3RzWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5wYWdlb2JqZWN0c1skcGFnZV07CgkJJHRoaXMtPnBhZ2VvcGVuWyR0aGlzLT5wYWdlXSA9IGZhbHNlOwoJCWlmIChpc3NldCgkdGhpcy0+Zm9vdGVycG9zWyRwYWdlXSkpIHsKCQkJJHRoaXMtPmZvb3RlcnBvc1skdGhpcy0+cGFnZV0gPSAkdGhpcy0+Zm9vdGVycG9zWyRwYWdlXTsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5mb290ZXJsZW5bJHBhZ2VdKSkgewoJCQkkdGhpcy0+Zm9vdGVybGVuWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5mb290ZXJsZW5bJHBhZ2VdOwoJCX0KCQlpZiAoaXNzZXQoJHRoaXMtPnRyYW5zZm1ya1skcGFnZV0pKSB7CgkJCSR0aGlzLT50cmFuc2ZtcmtbJHRoaXMtPnBhZ2VdID0gJHRoaXMtPnRyYW5zZm1ya1skcGFnZV07CgkJfQoJCWlmIChpc3NldCgkdGhpcy0+UGFnZUFubm90c1skcGFnZV0pKSB7CgkJCSR0aGlzLT5QYWdlQW5ub3RzWyR0aGlzLT5wYWdlXSA9ICR0aGlzLT5QYWdlQW5ub3RzWyRwYWdlXTsKCQl9CgkJaWYgKGlzc2V0KCR0aGlzLT5uZXdwYWdlZ3JvdXBbJHBhZ2VdKSkgewoJCQkvLyBzdGFydCBhIG5ldyBncm91cAoJCQkkdGhpcy0+bmV3cGFnZWdyb3VwWyR0aGlzLT5wYWdlXSA9IHNpemVvZigkdGhpcy0+bmV3cGFnZWdyb3VwKSArIDE7CgkJCSR0aGlzLT5jdXJycGFnZWdyb3VwID0gJHRoaXMtPm5ld3BhZ2Vncm91cFskdGhpcy0+cGFnZV07CgkJCSR0aGlzLT5wYWdlZ3JvdXBzWyR0aGlzLT5jdXJycGFnZWdyb3VwXSA9IDE7CgkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5jdXJycGFnZWdyb3VwKSBBTkQgKCR0aGlzLT5jdXJycGFnZWdyb3VwID4gMCkpIHsKCQkJKyskdGhpcy0+cGFnZWdyb3Vwc1skdGhpcy0+Y3VycnBhZ2Vncm91cF07CgkJfQoJCS8vIGNvcHkgb3V0bGluZXMKCQkkdG1wb3V0bGluZXMgPSAkdGhpcy0+b3V0bGluZXM7CgkJZm9yZWFjaCAoJHRtcG91dGxpbmVzIGFzICRrZXkgPT4gJG91dGxpbmUpIHsKCQkJaWYgKCRvdXRsaW5lWydwJ10gPT0gJHBhZ2UpIHsKCQkJCSR0aGlzLT5vdXRsaW5lc1tdID0gYXJyYXkoJ3QnID0+ICRvdXRsaW5lWyd0J10sICdsJyA9PiAkb3V0bGluZVsnbCddLCAneCcgPT4gJG91dGxpbmVbJ3gnXSwgJ3knID0+ICRvdXRsaW5lWyd5J10sICdwJyA9PiAkdGhpcy0+cGFnZSwgJ3MnID0+ICRvdXRsaW5lWydzJ10sICdjJyA9PiAkb3V0bGluZVsnYyddKTsKCQkJfQoJCX0KCQkvLyBjb3B5IGxpbmtzCgkJJHRtcGxpbmtzID0gJHRoaXMtPmxpbmtzOwoJCWZvcmVhY2ggKCR0bXBsaW5rcyBhcyAka2V5ID0+ICRsaW5rKSB7CgkJCWlmICgkbGlua1swXSA9PSAkcGFnZSkgewoJCQkJJHRoaXMtPmxpbmtzW10gPSBhcnJheSgkdGhpcy0+cGFnZSwgJGxpbmtbMV0pOwoJCQl9CgkJfQoJCS8vIHJldHVybiB0byBsYXN0IHBhZ2UKCQkkdGhpcy0+bGFzdFBhZ2UodHJ1ZSk7CgkJcmV0dXJuIHRydWU7Cgl9CgoJLyoqCgkgKiBPdXRwdXQgYSBUYWJsZSBvZiBDb250ZW50IEluZGV4IChUT0MpLgoJICogVGhpcyBtZXRob2QgbXVzdCBiZSBjYWxsZWQgYWZ0ZXIgYWxsIEJvb2ttYXJrcyB3ZXJlIHNldC4KCSAqIEJlZm9yZSBjYWxsaW5nIHRoaXMgbWV0aG9kIHlvdSBoYXZlIHRvIG9wZW4gdGhlIHBhZ2UgdXNpbmcgdGhlIGFkZFRPQ1BhZ2UoKSBtZXRob2QuCgkgKiBBZnRlciBjYWxsaW5nIHRoaXMgbWV0aG9kIHlvdSBoYXZlIHRvIGNhbGwgZW5kVE9DUGFnZSgpIHRvIGNsb3NlIHRoZSBUT0MgcGFnZS4KCSAqIFlvdSBjYW4gb3ZlcnJpZGUgdGhpcyBtZXRob2QgdG8gYWNoaWV2ZSBkaWZmZXJlbnQgc3R5bGVzLgoJICogQHBhcmFtICRwYWdlIChpbnQpIHBhZ2UgbnVtYmVyIHdoZXJlIHRoaXMgVE9DIHNob3VsZCBiZSBpbnNlcnRlZCAobGVhdmUgZW1wdHkgZm9yIGN1cnJlbnQgcGFnZSkuCgkgKiBAcGFyYW0gJG51bWJlcnNmb250IChzdHJpbmcpIHNldCB0aGUgZm9udCBmb3IgcGFnZSBudW1iZXJzIChwbGVhc2UgdXNlIG1vbm9zcGFjZWQgZm9udCBmb3IgYmV0dGVyIGFsaWdubWVudCkuCgkgKiBAcGFyYW0gJGZpbGxlciAoc3RyaW5nKSBzdHJpbmcgdXNlZCB0byBmaWxsIHRoZSBzcGFjZSBiZXR3ZWVuIHRleHQgYW5kIHBhZ2UgbnVtYmVyLgoJICogQHBhcmFtICR0b2NfbmFtZSAoc3RyaW5nKSBuYW1lIHRvIHVzZSBmb3IgVE9DIGJvb2ttYXJrLgoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBGb250IHN0eWxlIGZvciB0aXRsZTogQiA9IEJvbGQsIEkgPSBJdGFsaWMsIEJJID0gQm9sZCArIEl0YWxpYy4KCSAqIEBwYXJhbSAkY29sb3IgKGFycmF5KSBSR0IgY29sb3IgYXJyYXkgZm9yIGJvb2ttYXJrIHRpdGxlICh2YWx1ZXMgZnJvbSAwIHRvIDI1NSkuCgkgKiBAcHVibGljCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuNS4wMDAgKDIwMDktMDEtMDIpCgkgKiBAc2VlIGFkZFRPQ1BhZ2UoKSwgZW5kVE9DUGFnZSgpLCBhZGRIVE1MVE9DKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZFRPQygkcGFnZT0nJywgJG51bWJlcnNmb250PScnLCAkZmlsbGVyPScuJywgJHRvY19uYW1lPSdUT0MnLCAkc3R5bGU9JycsICRjb2xvcj1hcnJheSgwLDAsMCkpIHsKCQkkZm9udHNpemUgPSAkdGhpcy0+Rm9udFNpemVQdDsKCQkkZm9udGZhbWlseSA9ICR0aGlzLT5Gb250RmFtaWx5OwoJCSRmb250c3R5bGUgPSAkdGhpcy0+Rm9udFN0eWxlOwoJCSR3ID0gJHRoaXMtPncgLSAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luOwoJCSRzcGFjZXIgPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoY2hyKDMyKSkgKiA0OwoJCSRsbWFyZ2luID0gJHRoaXMtPmxNYXJnaW47CgkJJHJtYXJnaW4gPSAkdGhpcy0+ck1hcmdpbjsKCQkkeF9zdGFydCA9ICR0aGlzLT5HZXRYKCk7CgkJJHBhZ2VfZmlyc3QgPSAkdGhpcy0+cGFnZTsKCQkkY3VycmVudF9wYWdlID0gJHRoaXMtPnBhZ2U7CgkJJHBhZ2VfZmlsbF9zdGFydCA9IGZhbHNlOwoJCSRwYWdlX2ZpbGxfZW5kID0gZmFsc2U7CgkJJGN1cnJlbnRfY29sdW1uID0gJHRoaXMtPmN1cnJlbnRfY29sdW1uOwoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkbnVtYmVyc2ZvbnQpKSB7CgkJCSRudW1iZXJzZm9udCA9ICR0aGlzLT5kZWZhdWx0X21vbm9zcGFjZWRfZm9udDsKCQl9CgkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRmaWxsZXIpKSB7CgkJCSRmaWxsZXIgPSAnICc7CgkJfQoJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcGFnZSkpIHsKCQkJJGdhcCA9ICcgJzsKCQl9IGVsc2UgewoJCQkkZ2FwID0gJyc7CgkJCWlmICgkcGFnZSA8IDEpIHsKCQkJCSRwYWdlID0gMTsKCQkJfQoJCX0KCQkkdGhpcy0+U2V0Rm9udCgkbnVtYmVyc2ZvbnQsICRmb250c3R5bGUsICRmb250c2l6ZSk7CgkJJG51bXdpZHRoID0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCcwMDAwMCcpOwoJCSRtYXhwYWdlID0gMDsgLy91c2VkIGZvciBwYWdlcyBvbiBhdHRhY2hlZCBkb2N1bWVudHMKCQlmb3JlYWNoICgkdGhpcy0+b3V0bGluZXMgYXMgJGtleSA9PiAkb3V0bGluZSkgewoJCQkvLyBjaGVjayBmb3IgZXh0cmEgcGFnZXMgKHVzZWQgZm9yIGF0dGFjaG1lbnRzKQoJCQlpZiAoKCR0aGlzLT5wYWdlID4gJHBhZ2VfZmlyc3QpIEFORCAoJG91dGxpbmVbJ3AnXSA+PSAkdGhpcy0+bnVtcGFnZXMpKSB7CgkJCQkkb3V0bGluZVsncCddICs9ICgkdGhpcy0+cGFnZSAtICRwYWdlX2ZpcnN0KTsKCQkJfQoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJGFsaWdudGV4dCA9ICdSJzsKCQkJCSRhbGlnbm51bSA9ICdMJzsKCQkJfSBlbHNlIHsKCQkJCSRhbGlnbnRleHQgPSAnTCc7CgkJCQkkYWxpZ25udW0gPSAnUic7CgkJCX0KCQkJaWYgKCRvdXRsaW5lWydsJ10gPT0gMCkgewoJCQkJJHRoaXMtPlNldEZvbnQoJGZvbnRmYW1pbHksICRvdXRsaW5lWydzJ10uJ0InLCAkZm9udHNpemUpOwoJCQl9IGVsc2UgewoJCQkJJHRoaXMtPlNldEZvbnQoJGZvbnRmYW1pbHksICRvdXRsaW5lWydzJ10sICRmb250c2l6ZSAtICRvdXRsaW5lWydsJ10pOwoJCQl9CgkJCSR0aGlzLT5TZXRUZXh0Q29sb3JBcnJheSgkb3V0bGluZVsnYyddKTsKCQkJLy8gY2hlY2sgZm9yIHBhZ2UgYnJlYWsKCQkJJHRoaXMtPmNoZWNrUGFnZUJyZWFrKDIgKiAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkdGhpcy0+Rm9udFNpemUpKTsKCQkJLy8gc2V0IG1hcmdpbnMgYW5kIFggcG9zaXRpb24KCQkJaWYgKCgkdGhpcy0+cGFnZSA9PSAkY3VycmVudF9wYWdlKSBBTkQgKCR0aGlzLT5jdXJyZW50X2NvbHVtbiA9PSAkY3VycmVudF9jb2x1bW4pKSB7CgkJCQkkdGhpcy0+bE1hcmdpbiA9ICRsbWFyZ2luOwoJCQkJJHRoaXMtPnJNYXJnaW4gPSAkcm1hcmdpbjsKCQkJfSBlbHNlIHsKCQkJCWlmICgkdGhpcy0+Y3VycmVudF9jb2x1bW4gIT0gJGN1cnJlbnRfY29sdW1uKSB7CgkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJJHhfc3RhcnQgPSAkdGhpcy0+dyAtICR0aGlzLT5jb2x1bW5zWyR0aGlzLT5jdXJyZW50X2NvbHVtbl1bJ3gnXTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkeF9zdGFydCA9ICR0aGlzLT5jb2x1bW5zWyR0aGlzLT5jdXJyZW50X2NvbHVtbl1bJ3gnXTsKCQkJCQl9CgkJCQl9CgkJCQkkbG1hcmdpbiA9ICR0aGlzLT5sTWFyZ2luOwoJCQkJJHJtYXJnaW4gPSAkdGhpcy0+ck1hcmdpbjsKCQkJCSRjdXJyZW50X3BhZ2UgPSAkdGhpcy0+cGFnZTsKCQkJCSRjdXJyZW50X2NvbHVtbiA9ICR0aGlzLT5jdXJyZW50X2NvbHVtbjsKCQkJfQoJCQkkdGhpcy0+U2V0WCgkeF9zdGFydCk7CgkJCSRpbmRlbnQgPSAoJHNwYWNlciAqICRvdXRsaW5lWydsJ10pOwoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHRoaXMtPnggLT0gJGluZGVudDsKCQkJCSR0aGlzLT5yTWFyZ2luID0gJHRoaXMtPncgLSAkdGhpcy0+eDsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT54ICs9ICRpbmRlbnQ7CgkJCQkkdGhpcy0+bE1hcmdpbiA9ICR0aGlzLT54OwoJCQl9CgkJCSRsaW5rID0gJHRoaXMtPkFkZExpbmsoKTsKCQkJJHRoaXMtPlNldExpbmsoJGxpbmssICRvdXRsaW5lWyd5J10sICRvdXRsaW5lWydwJ10pOwoJCQkvLyB3cml0ZSB0aGUgdGV4dAoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHR4dCA9ICcgJy4kb3V0bGluZVsndCddOwoJCQl9IGVsc2UgewoJCQkJJHR4dCA9ICRvdXRsaW5lWyd0J10uJyAnOwoJCQl9CgkJCSR0aGlzLT5Xcml0ZSgwLCAkdHh0LCAkbGluaywgZmFsc2UsICRhbGlnbnRleHQsIGZhbHNlLCAwLCBmYWxzZSwgZmFsc2UsIDAsICRudW13aWR0aCwgJycpOwoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHR3ID0gJHRoaXMtPnggLSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlIHsKCQkJCSR0dyA9ICR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4gLSAkdGhpcy0+eDsKCQkJfQoJCQkkdGhpcy0+U2V0Rm9udCgkbnVtYmVyc2ZvbnQsICRmb250c3R5bGUsICRmb250c2l6ZSk7CgkJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcGFnZSkpIHsKCQkJCSRwYWdlbnVtID0gJG91dGxpbmVbJ3AnXTsKCQkJfSBlbHNlIHsKCQkJCS8vIHBsYWNlbWFyayB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBjb3JyZWN0IG51bWJlcgoJCQkJJHBhZ2VudW0gPSAneyMnLigkb3V0bGluZVsncCddKS4nfSc7CgkJCQlpZiAoJHRoaXMtPmlzVW5pY29kZUZvbnQoKSkgewoJCQkJCSRwYWdlbnVtID0gJ3snLiRwYWdlbnVtLid9JzsKCQkJCX0KCQkJCSRtYXhwYWdlID0gbWF4KCRtYXhwYWdlLCAkb3V0bGluZVsncCddKTsKCQkJfQoJCQkkZncgPSAoJHR3IC0gJHRoaXMtPkdldFN0cmluZ1dpZHRoKCRwYWdlbnVtLiRmaWxsZXIpKTsKCQkJJHdmaWxsZXIgPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJGZpbGxlcik7CgkJCWlmICgkd2ZpbGxlciA+IDApIHsKCQkJCSRudW1maWxscyA9IGZsb29yKCRmdyAvICR3ZmlsbGVyKTsKCQkJfSBlbHNlIHsKCQkJCSRudW1maWxscyA9IDA7CgkJCX0KCQkJaWYgKCRudW1maWxscyA+IDApIHsKCQkJCSRyb3dmaWxsID0gc3RyX3JlcGVhdCgkZmlsbGVyLCAkbnVtZmlsbHMpOwoJCQl9IGVsc2UgewoJCQkJJHJvd2ZpbGwgPSAnJzsKCQkJfQoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHBhZ2VudW0gPSAkcGFnZW51bS4kZ2FwLiRyb3dmaWxsOwoJCQl9IGVsc2UgewoJCQkJJHBhZ2VudW0gPSAkcm93ZmlsbC4kZ2FwLiRwYWdlbnVtOwoJCQl9CgkJCS8vIHdyaXRlIHRoZSBudW1iZXIKCQkJJHRoaXMtPkNlbGwoJHR3LCAwLCAkcGFnZW51bSwgMCwgMSwgJGFsaWdubnVtLCAwLCAkbGluaywgMCk7CgkJfQoJCSRwYWdlX2xhc3QgPSAkdGhpcy0+Z2V0UGFnZSgpOwoJCSRudW1wYWdlcyA9ICgkcGFnZV9sYXN0IC0gJHBhZ2VfZmlyc3QgKyAxKTsKCQkvLyBhY2NvdW50IGZvciBib29rbGV0IG1vZGUKCQlpZiAoJHRoaXMtPmJvb2tsZXQpIHsKCQkJLy8gY2hlY2sgaWYgYSBibGFuayBwYWdlIGlzIHJlcXVpcmVkIGJlZm9yZSBUT0MKCQkJJHBhZ2VfZmlsbF9zdGFydCA9ICgoKCRwYWdlX2ZpcnN0ICUgMikgPT0gMCkgWE9SICgoJHBhZ2UgJSAyKSA9PSAwKSk7CgkJCSRwYWdlX2ZpbGxfZW5kID0gKCEoKCgkbnVtcGFnZXMgJSAyKSA9PSAwKSBYT1IgKCRwYWdlX2ZpbGxfc3RhcnQpKSk7CgkJCWlmICgkcGFnZV9maWxsX3N0YXJ0KSB7CgkJCQkvLyBhZGQgYSBwYWdlIGF0IHRoZSBlbmQgKHRvIGJlIG1vdmVkIGJlZm9yZSBUT0MpCgkJCQkkdGhpcy0+YWRkUGFnZSgpOwoJCQkJKyskcGFnZV9sYXN0OwoJCQkJKyskbnVtcGFnZXM7CgkJCX0KCQkJaWYgKCRwYWdlX2ZpbGxfZW5kKSB7CgkJCQkvLyBhZGQgYSBwYWdlIGF0IHRoZSBlbmQKCQkJCSR0aGlzLT5hZGRQYWdlKCk7CgkJCQkrKyRwYWdlX2xhc3Q7CgkJCQkrKyRudW1wYWdlczsKCQkJfQoJCX0KCQkkbWF4cGFnZSA9IG1heCgkbWF4cGFnZSwgJHBhZ2VfbGFzdCk7CgkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcGFnZSkpIHsKCQkJZm9yICgkcCA9ICRwYWdlX2ZpcnN0OyAkcCA8PSAkcGFnZV9sYXN0OyArKyRwKSB7CgkJCQkvLyBnZXQgcGFnZSBkYXRhCgkJCQkkdGVtcHBhZ2UgPSAkdGhpcy0+Z2V0UGFnZUJ1ZmZlcigkcCk7CgkJCQlmb3IgKCRuID0gMTsgJG4gPD0gJG1heHBhZ2U7ICsrJG4pIHsKCQkJCQkvLyB1cGRhdGUgcGFnZSBudW1iZXJzCgkJCQkJJGEgPSAneyMnLiRuLid9JzsKCQkJCQkvLyBnZXQgcGFnZSBudW1iZXIgYWxpYXNlcwoJCQkJCSRwbmFsaWFzID0gJHRoaXMtPmdldEludGVybmFsUGFnZU51bWJlckFsaWFzZXMoJGEpOwoJCQkJCS8vIGNhbGN1bGF0ZSByZXBsYWNlbWVudCBudW1iZXIKCQkJCQlpZiAoKCRuID49ICRwYWdlKSBBTkQgKCRuIDw9ICR0aGlzLT5udW1wYWdlcykpIHsKCQkJCQkJJG5wID0gJG4gKyAkbnVtcGFnZXM7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJG5wID0gJG47CgkJCQkJfQoJCQkJCSRuYSA9IFRDUERGX1NUQVRJQzo6Zm9ybWF0VE9DUGFnZU51bWJlcigoJHRoaXMtPnN0YXJ0aW5nX3BhZ2VfbnVtYmVyICsgJG5wIC0gMSkpOwoJCQkJCSRudSA9IFRDUERGX0ZPTlRTOjpVVEY4VG9VVEYxNkJFKCRuYSwgZmFsc2UsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJLy8gcmVwbGFjZSBhbGlhc2VzIHdpdGggbnVtYmVycwoJCQkJCWZvcmVhY2ggKCRwbmFsaWFzWyd1J10gYXMgJHUpIHsKCQkJCQkJJHNmaWxsID0gc3RyX3JlcGVhdCgkZmlsbGVyLCBtYXgoMCwgKHN0cmxlbigkdSkgLSBzdHJsZW4oJG51LicgJykpKSk7CgkJCQkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkJCQkkbnIgPSAkbnUuVENQREZfRk9OVFM6OlVURjhUb1VURjE2QkUoJyAnLiRzZmlsbCwgZmFsc2UsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbnIgPSBUQ1BERl9GT05UUzo6VVRGOFRvVVRGMTZCRSgkc2ZpbGwuJyAnLCBmYWxzZSwgJHRoaXMtPmlzdW5pY29kZSwgJHRoaXMtPkN1cnJlbnRGb250KS4kbnU7CgkJCQkJCX0KCQkJCQkJJHRlbXBwYWdlID0gc3RyX3JlcGxhY2UoJHUsICRuciwgJHRlbXBwYWdlKTsKCQkJCQl9CgkJCQkJZm9yZWFjaCAoJHBuYWxpYXNbJ2EnXSBhcyAkYSkgewoJCQkJCQkkc2ZpbGwgPSBzdHJfcmVwZWF0KCRmaWxsZXIsIG1heCgwLCAoc3RybGVuKCRhKSAtIHN0cmxlbigkbmEuJyAnKSkpKTsKCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCSRuciA9ICRuYS4nICcuJHNmaWxsOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJG5yID0gJHNmaWxsLicgJy4kbmE7CgkJCQkJCX0KCQkJCQkJJHRlbXBwYWdlID0gc3RyX3JlcGxhY2UoJGEsICRuciwgJHRlbXBwYWdlKTsKCQkJCQl9CgkJCQl9CgkJCQkvLyBzYXZlIGNoYW5nZXMKCQkJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCRwLCAkdGVtcHBhZ2UpOwoJCQl9CgkJCS8vIG1vdmUgcGFnZXMKCQkJJHRoaXMtPkJvb2ttYXJrKCR0b2NfbmFtZSwgMCwgMCwgJHBhZ2VfZmlyc3QsICRzdHlsZSwgJGNvbG9yKTsKCQkJaWYgKCRwYWdlX2ZpbGxfc3RhcnQpIHsKCQkJCSR0aGlzLT5tb3ZlUGFnZSgkcGFnZV9sYXN0LCAkcGFnZV9maXJzdCk7CgkJCX0KCQkJZm9yICgkaSA9IDA7ICRpIDwgJG51bXBhZ2VzOyArKyRpKSB7CgkJCQkkdGhpcy0+bW92ZVBhZ2UoJHBhZ2VfbGFzdCwgJHBhZ2UpOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogT3V0cHV0IGEgVGFibGUgT2YgQ29udGVudCBJbmRleCAoVE9DKSB1c2luZyBIVE1MIHRlbXBsYXRlcy4KCSAqIFRoaXMgbWV0aG9kIG11c3QgYmUgY2FsbGVkIGFmdGVyIGFsbCBCb29rbWFya3Mgd2VyZSBzZXQuCgkgKiBCZWZvcmUgY2FsbGluZyB0aGlzIG1ldGhvZCB5b3UgaGF2ZSB0byBvcGVuIHRoZSBwYWdlIHVzaW5nIHRoZSBhZGRUT0NQYWdlKCkgbWV0aG9kLgoJICogQWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZCB5b3UgaGF2ZSB0byBjYWxsIGVuZFRPQ1BhZ2UoKSB0byBjbG9zZSB0aGUgVE9DIHBhZ2UuCgkgKiBAcGFyYW0gJHBhZ2UgKGludCkgcGFnZSBudW1iZXIgd2hlcmUgdGhpcyBUT0Mgc2hvdWxkIGJlIGluc2VydGVkIChsZWF2ZSBlbXB0eSBmb3IgY3VycmVudCBwYWdlKS4KCSAqIEBwYXJhbSAkdG9jX25hbWUgKHN0cmluZykgbmFtZSB0byB1c2UgZm9yIFRPQyBib29rbWFyay4KCSAqIEBwYXJhbSAkdGVtcGxhdGVzIChhcnJheSkgYXJyYXkgb2YgaHRtbCB0ZW1wbGF0ZXMuIFVzZTogIiNUT0NfREVTQ1JJUFRJT04jIiBmb3IgYm9va21hcmsgdGl0bGUsICIjVE9DX1BBR0VfTlVNQkVSIyIgZm9yIHBhZ2UgbnVtYmVyLgoJICogQHBhcmFtICRjb3JyZWN0X2FsaWduIChib29sZWFuKSBpZiB0cnVlIGNvcnJlY3QgdGhlIG51bWJlciBhbGlnbm1lbnQgKG51bWJlcnMgbXVzdCBiZSBpbiBtb25vc3BhY2VkIGZvbnQgbGlrZSBjb3VyaWVyIGFuZCByaWdodCBhbGlnbmVkIG9uIExUUiwgb3IgbGVmdCBhbGlnbmVkIG9uIFJUTCkKCSAqIEBwYXJhbSAkc3R5bGUgKHN0cmluZykgRm9udCBzdHlsZSBmb3IgdGl0bGU6IEIgPSBCb2xkLCBJID0gSXRhbGljLCBCSSA9IEJvbGQgKyBJdGFsaWMuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgUkdCIGNvbG9yIGFycmF5IGZvciB0aXRsZSAodmFsdWVzIGZyb20gMCB0byAyNTUpLgoJICogQHB1YmxpYwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDAxICgyMDEwLTA1LTA2KQoJICogQHNlZSBhZGRUT0NQYWdlKCksIGVuZFRPQ1BhZ2UoKSwgYWRkVE9DKCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGFkZEhUTUxUT0MoJHBhZ2U9JycsICR0b2NfbmFtZT0nVE9DJywgJHRlbXBsYXRlcz1hcnJheSgpLCAkY29ycmVjdF9hbGlnbj10cnVlLCAkc3R5bGU9JycsICRjb2xvcj1hcnJheSgwLDAsMCkpIHsKCQkkZmlsbGVyID0gJyAnOwoJCSRwcmV2X2h0bWxMaW5rQ29sb3JBcnJheSA9ICR0aGlzLT5odG1sTGlua0NvbG9yQXJyYXk7CgkJJHByZXZfaHRtbExpbmtGb250U3R5bGUgPSAkdGhpcy0+aHRtbExpbmtGb250U3R5bGU7CgkJLy8gc2V0IG5ldyBzdHlsZSBmb3IgbGluawoJCSR0aGlzLT5odG1sTGlua0NvbG9yQXJyYXkgPSBhcnJheSgpOwoJCSR0aGlzLT5odG1sTGlua0ZvbnRTdHlsZSA9ICcnOwoJCSRwYWdlX2ZpcnN0ID0gJHRoaXMtPmdldFBhZ2UoKTsKCQkkcGFnZV9maWxsX3N0YXJ0ID0gZmFsc2U7CgkJJHBhZ2VfZmlsbF9lbmQgPSBmYWxzZTsKCQkvLyBnZXQgdGhlIGZvbnQgdHlwZSB1c2VkIGZvciBudW1iZXJzIGluIGVhY2ggdGVtcGxhdGUKCQkkY3VycmVudF9mb250ID0gJHRoaXMtPkZvbnRGYW1pbHk7CgkJZm9yZWFjaCAoJHRlbXBsYXRlcyBhcyAkbGV2ZWwgPT4gJGh0bWwpIHsKCQkJJGRvbSA9ICR0aGlzLT5nZXRIdG1sRG9tQXJyYXkoJGh0bWwpOwoJCQlmb3JlYWNoICgkZG9tIGFzICRrZXkgPT4gJHZhbHVlKSB7CgkJCQlpZiAoJHZhbHVlWyd2YWx1ZSddID09ICcjVE9DX1BBR0VfTlVNQkVSIycpIHsKCQkJCQkkdGhpcy0+U2V0Rm9udCgkZG9tWygka2V5IC0gMSldWydmb250bmFtZSddKTsKCQkJCQkkdGVtcGxhdGVzWydGJy4kbGV2ZWxdID0gJHRoaXMtPmlzVW5pY29kZUZvbnQoKTsKCQkJCX0KCQkJfQoJCX0KCQkkdGhpcy0+U2V0Rm9udCgkY3VycmVudF9mb250KTsKCQkkbWF4cGFnZSA9IDA7IC8vdXNlZCBmb3IgcGFnZXMgb24gYXR0YWNoZWQgZG9jdW1lbnRzCgkJZm9yZWFjaCAoJHRoaXMtPm91dGxpbmVzIGFzICRrZXkgPT4gJG91dGxpbmUpIHsKCQkJLy8gZ2V0IEhUTUwgdGVtcGxhdGUKCQkJJHJvdyA9ICR0ZW1wbGF0ZXNbJG91dGxpbmVbJ2wnXV07CgkJCWlmIChUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkcGFnZSkpIHsKCQkJCSRwYWdlbnVtID0gJG91dGxpbmVbJ3AnXTsKCQkJfSBlbHNlIHsKCQkJCS8vIHBsYWNlbWFyayB0byBiZSByZXBsYWNlZCB3aXRoIHRoZSBjb3JyZWN0IG51bWJlcgoJCQkJJHBhZ2VudW0gPSAneyMnLigkb3V0bGluZVsncCddKS4nfSc7CgkJCQlpZiAoJHRlbXBsYXRlc1snRicuJG91dGxpbmVbJ2wnXV0pIHsKCQkJCQkkcGFnZW51bSA9ICd7Jy4kcGFnZW51bS4nfSc7CgkJCQl9CgkJCQkkbWF4cGFnZSA9IG1heCgkbWF4cGFnZSwgJG91dGxpbmVbJ3AnXSk7CgkJCX0KCQkJLy8gcmVwbGFjZSB0ZW1wbGF0ZXMgd2l0aCBjdXJyZW50IHZhbHVlcwoJCQkkcm93ID0gc3RyX3JlcGxhY2UoJyNUT0NfREVTQ1JJUFRJT04jJywgJG91dGxpbmVbJ3QnXSwgJHJvdyk7CgkJCSRyb3cgPSBzdHJfcmVwbGFjZSgnI1RPQ19QQUdFX05VTUJFUiMnLCAkcGFnZW51bSwgJHJvdyk7CgkJCS8vIGFkZCBsaW5rIHRvIHBhZ2UKCQkJJHJvdyA9ICc8YSBocmVmPSIjJy4kb3V0bGluZVsncCddLicsJy4kb3V0bGluZVsneSddLiciPicuJHJvdy4nPC9hPic7CgkJCS8vIHdyaXRlIGJvb2ttYXJrIGVudHJ5CgkJCSR0aGlzLT53cml0ZUhUTUwoJHJvdywgZmFsc2UsIGZhbHNlLCB0cnVlLCBmYWxzZSwgJycpOwoJCX0KCQkvLyByZXN0b3JlIGxpbmsgc3R5bGVzCgkJJHRoaXMtPmh0bWxMaW5rQ29sb3JBcnJheSA9ICRwcmV2X2h0bWxMaW5rQ29sb3JBcnJheTsKCQkkdGhpcy0+aHRtbExpbmtGb250U3R5bGUgPSAkcHJldl9odG1sTGlua0ZvbnRTdHlsZTsKCQkvLyBtb3ZlIFRPQyBwYWdlIGFuZCByZXBsYWNlIG51bWJlcnMKCQkkcGFnZV9sYXN0ID0gJHRoaXMtPmdldFBhZ2UoKTsKCQkkbnVtcGFnZXMgPSAoJHBhZ2VfbGFzdCAtICRwYWdlX2ZpcnN0ICsgMSk7CgkJLy8gYWNjb3VudCBmb3IgYm9va2xldCBtb2RlCgkJaWYgKCR0aGlzLT5ib29rbGV0KSB7CgkJCS8vIGNoZWNrIGlmIGEgYmxhbmsgcGFnZSBpcyByZXF1aXJlZCBiZWZvcmUgVE9DCgkJCSRwYWdlX2ZpbGxfc3RhcnQgPSAoKCgkcGFnZV9maXJzdCAlIDIpID09IDApIFhPUiAoKCRwYWdlICUgMikgPT0gMCkpOwoJCQkkcGFnZV9maWxsX2VuZCA9ICghKCgoJG51bXBhZ2VzICUgMikgPT0gMCkgWE9SICgkcGFnZV9maWxsX3N0YXJ0KSkpOwoJCQlpZiAoJHBhZ2VfZmlsbF9zdGFydCkgewoJCQkJLy8gYWRkIGEgcGFnZSBhdCB0aGUgZW5kICh0byBiZSBtb3ZlZCBiZWZvcmUgVE9DKQoJCQkJJHRoaXMtPmFkZFBhZ2UoKTsKCQkJCSsrJHBhZ2VfbGFzdDsKCQkJCSsrJG51bXBhZ2VzOwoJCQl9CgkJCWlmICgkcGFnZV9maWxsX2VuZCkgewoJCQkJLy8gYWRkIGEgcGFnZSBhdCB0aGUgZW5kCgkJCQkkdGhpcy0+YWRkUGFnZSgpOwoJCQkJKyskcGFnZV9sYXN0OwoJCQkJKyskbnVtcGFnZXM7CgkJCX0KCQl9CgkJJG1heHBhZ2UgPSBtYXgoJG1heHBhZ2UsICRwYWdlX2xhc3QpOwoJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHBhZ2UpKSB7CgkJCWZvciAoJHAgPSAkcGFnZV9maXJzdDsgJHAgPD0gJHBhZ2VfbGFzdDsgKyskcCkgewoJCQkJLy8gZ2V0IHBhZ2UgZGF0YQoJCQkJJHRlbXBwYWdlID0gJHRoaXMtPmdldFBhZ2VCdWZmZXIoJHApOwoJCQkJZm9yICgkbiA9IDE7ICRuIDw9ICRtYXhwYWdlOyArKyRuKSB7CgkJCQkJLy8gdXBkYXRlIHBhZ2UgbnVtYmVycwoJCQkJCSRhID0gJ3sjJy4kbi4nfSc7CgkJCQkJLy8gZ2V0IHBhZ2UgbnVtYmVyIGFsaWFzZXMKCQkJCQkkcG5hbGlhcyA9ICR0aGlzLT5nZXRJbnRlcm5hbFBhZ2VOdW1iZXJBbGlhc2VzKCRhKTsKCQkJCQkvLyBjYWxjdWxhdGUgcmVwbGFjZW1lbnQgbnVtYmVyCgkJCQkJaWYgKCRuID49ICRwYWdlKSB7CgkJCQkJCSRucCA9ICRuICsgJG51bXBhZ2VzOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRucCA9ICRuOwoJCQkJCX0KCQkJCQkkbmEgPSBUQ1BERl9TVEFUSUM6OmZvcm1hdFRPQ1BhZ2VOdW1iZXIoKCR0aGlzLT5zdGFydGluZ19wYWdlX251bWJlciArICRucCAtIDEpKTsKCQkJCQkkbnUgPSBUQ1BERl9GT05UUzo6VVRGOFRvVVRGMTZCRSgkbmEsIGZhbHNlLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCQkJCS8vIHJlcGxhY2UgYWxpYXNlcyB3aXRoIG51bWJlcnMKCQkJCQlmb3JlYWNoICgkcG5hbGlhc1sndSddIGFzICR1KSB7CgkJCQkJCWlmICgkY29ycmVjdF9hbGlnbikgewoJCQkJCQkJJHNmaWxsID0gc3RyX3JlcGVhdCgkZmlsbGVyLCAoc3RybGVuKCR1KSAtIHN0cmxlbigkbnUuJyAnKSkpOwoJCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCQkkbnIgPSAkbnUuVENQREZfRk9OVFM6OlVURjhUb1VURjE2QkUoJyAnLiRzZmlsbCwgZmFsc2UsICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCSRuciA9IFRDUERGX0ZPTlRTOjpVVEY4VG9VVEYxNkJFKCRzZmlsbC4nICcsIGZhbHNlLCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpLiRudTsKCQkJCQkJCX0KCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSRuciA9ICRudTsKCQkJCQkJfQoJCQkJCQkkdGVtcHBhZ2UgPSBzdHJfcmVwbGFjZSgkdSwgJG5yLCAkdGVtcHBhZ2UpOwoJCQkJCX0KCQkJCQlmb3JlYWNoICgkcG5hbGlhc1snYSddIGFzICRhKSB7CgkJCQkJCWlmICgkY29ycmVjdF9hbGlnbikgewoJCQkJCQkJJHNmaWxsID0gc3RyX3JlcGVhdCgkZmlsbGVyLCAoc3RybGVuKCRhKSAtIHN0cmxlbigkbmEuJyAnKSkpOwoJCQkJCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCQkJCQkkbnIgPSAkbmEuJyAnLiRzZmlsbDsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJG5yID0gJHNmaWxsLicgJy4kbmE7CgkJCQkJCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbnIgPSAkbmE7CgkJCQkJCX0KCQkJCQkJJHRlbXBwYWdlID0gc3RyX3JlcGxhY2UoJGEsICRuciwgJHRlbXBwYWdlKTsKCQkJCQl9CgkJCQl9CgkJCQkvLyBzYXZlIGNoYW5nZXMKCQkJCSR0aGlzLT5zZXRQYWdlQnVmZmVyKCRwLCAkdGVtcHBhZ2UpOwoJCQl9CgkJCS8vIG1vdmUgcGFnZXMKCQkJJHRoaXMtPkJvb2ttYXJrKCR0b2NfbmFtZSwgMCwgMCwgJHBhZ2VfZmlyc3QsICRzdHlsZSwgJGNvbG9yKTsKCQkJaWYgKCRwYWdlX2ZpbGxfc3RhcnQpIHsKCQkJCSR0aGlzLT5tb3ZlUGFnZSgkcGFnZV9sYXN0LCAkcGFnZV9maXJzdCk7CgkJCX0KCQkJZm9yICgkaSA9IDA7ICRpIDwgJG51bXBhZ2VzOyArKyRpKSB7CgkJCQkkdGhpcy0+bW92ZVBhZ2UoJHBhZ2VfbGFzdCwgJHBhZ2UpOwoJCQl9CgkJfQoJfQoKCS8qKgoJICogU3RvcmVzIGEgY29weSBvZiB0aGUgY3VycmVudCBUQ1BERiBvYmplY3QgdXNlZCBmb3IgdW5kbyBvcGVyYXRpb24uCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC41LjAyOSAoMjAwOS0wMy0xOSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHN0YXJ0VHJhbnNhY3Rpb24oKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT5vYmpjb3B5KSkgewoJCQkvLyByZW1vdmUgcHJldmlvdXMgY29weQoJCQkkdGhpcy0+Y29tbWl0VHJhbnNhY3Rpb24oKTsKCQl9CgkJLy8gcmVjb3JkIGN1cnJlbnQgcGFnZSBudW1iZXIgYW5kIFkgcG9zaXRpb24KCQkkdGhpcy0+c3RhcnRfdHJhbnNhY3Rpb25fcGFnZSA9ICR0aGlzLT5wYWdlOwoJCSR0aGlzLT5zdGFydF90cmFuc2FjdGlvbl95ID0gJHRoaXMtPnk7CgkJLy8gY2xvbmUgY3VycmVudCBvYmplY3QKCQkkdGhpcy0+b2JqY29weSA9IFRDUERGX1NUQVRJQzo6b2JqY2xvbmUoJHRoaXMpOwoJfQoKCS8qKgoJICogRGVsZXRlIHRoZSBjb3B5IG9mIHRoZSBjdXJyZW50IFRDUERGIG9iamVjdCB1c2VkIGZvciB1bmRvIG9wZXJhdGlvbi4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjUuMDI5ICgyMDA5LTAzLTE5KQoJICovCglwdWJsaWMgZnVuY3Rpb24gY29tbWl0VHJhbnNhY3Rpb24oKSB7CgkJaWYgKGlzc2V0KCR0aGlzLT5vYmpjb3B5KSkgewoJCQkkdGhpcy0+b2JqY29weS0+X2Rlc3Ryb3kodHJ1ZSwgdHJ1ZSk7CgkJCXVuc2V0KCR0aGlzLT5vYmpjb3B5KTsKCQl9Cgl9CgoJLyoqCgkgKiBUaGlzIG1ldGhvZCBhbGxvd3MgdG8gdW5kbyB0aGUgbGF0ZXN0IHRyYW5zYWN0aW9uIGJ5IHJldHVybmluZyB0aGUgbGF0ZXN0IHNhdmVkIFRDUERGIG9iamVjdCB3aXRoIHN0YXJ0VHJhbnNhY3Rpb24oKS4KCSAqIEBwYXJhbSAkc2VsZiAoYm9vbGVhbikgaWYgdHJ1ZSByZXN0b3JlcyBjdXJyZW50IGNsYXNzIG9iamVjdCB0byBwcmV2aW91cyBzdGF0ZSB3aXRob3V0IHRoZSBuZWVkIG9mIHJlYXNzaWdubWVudCB2aWEgdGhlIHJldHVybmVkIHZhbHVlLgoJICogQHJldHVybiBUQ1BERiBvYmplY3QuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC41LjAyOSAoMjAwOS0wMy0xOSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJvbGxiYWNrVHJhbnNhY3Rpb24oJHNlbGY9ZmFsc2UpIHsKCQlpZiAoaXNzZXQoJHRoaXMtPm9iamNvcHkpKSB7CgkJCWlmIChpc3NldCgkdGhpcy0+b2JqY29weS0+ZGlza2NhY2hlKSBBTkQgJHRoaXMtPm9iamNvcHktPmRpc2tjYWNoZSkgewoJCQkJLy8gdHJ1bmNhdGUgZmlsZXMgdG8gcHJldmlvdXMgdmFsdWVzCgkJCQlmb3JlYWNoICgkdGhpcy0+b2JqY29weS0+Y2FjaGVfZmlsZV9sZW5ndGggYXMgJGZpbGUgPT4gJGxlbmd0aCkgewoJCQkJCSRmaWxlID0gc3Vic3RyKCRmaWxlLCAxKTsKCQkJCQkkaGFuZGxlID0gZm9wZW4oJGZpbGUsICdyKycpOwoJCQkJCWZ0cnVuY2F0ZSgkaGFuZGxlLCAkbGVuZ3RoKTsKCQkJCX0KCQkJfQoJCQkkdGhpcy0+X2Rlc3Ryb3kodHJ1ZSwgdHJ1ZSk7CgkJCWlmICgkc2VsZikgewoJCQkJJG9ianZhcnMgPSBnZXRfb2JqZWN0X3ZhcnMoJHRoaXMtPm9iamNvcHkpOwoJCQkJZm9yZWFjaCAoJG9ianZhcnMgYXMgJGtleSA9PiAkdmFsdWUpIHsKCQkJCQkkdGhpcy0+JGtleSA9ICR2YWx1ZTsKCQkJCX0KCQkJfQoJCQlyZXR1cm4gJHRoaXMtPm9iamNvcHk7CgkJfQoJCXJldHVybiAkdGhpczsKCX0KCgkvLyAtLS0gTVVMVEkgQ09MVU1OUyBNRVRIT0RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBTZXQgbXVsdGlwbGUgY29sdW1ucyBvZiB0aGUgc2FtZSBzaXplCgkgKiBAcGFyYW0gJG51bWNvbHMgKGludCkgbnVtYmVyIG9mIGNvbHVtbnMgKHNldCB0byB6ZXJvIHRvIGRpc2FibGUgY29sdW1ucyBtb2RlKQoJICogQHBhcmFtICR3aWR0aCAoaW50KSBjb2x1bW4gd2lkdGgKCSAqIEBwYXJhbSAkeSAoaW50KSBjb2x1bW4gc3RhcnRpbmcgWSBwb3NpdGlvbiAobGVhdmUgZW1wdHkgZm9yIGN1cnJlbnQgWSBwb3NpdGlvbikKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjkuMDAxICgyMDEwLTAzLTI4KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0RXF1YWxDb2x1bW5zKCRudW1jb2xzPTAsICR3aWR0aD0wLCAkeT0nJykgewoJCSR0aGlzLT5jb2x1bW5zID0gYXJyYXkoKTsKCQlpZiAoJG51bWNvbHMgPCAyKSB7CgkJCSRudW1jb2xzID0gMDsKCQkJJHRoaXMtPmNvbHVtbnMgPSBhcnJheSgpOwoJCX0gZWxzZSB7CgkJCS8vIG1heGltdW0gY29sdW1uIHdpZHRoCgkJCSRtYXh3aWR0aCA9ICgkdGhpcy0+dyAtICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4pIC8gJG51bWNvbHM7CgkJCWlmICgoJHdpZHRoID09IDApIE9SICgkd2lkdGggPiAkbWF4d2lkdGgpKSB7CgkJCQkkd2lkdGggPSAkbWF4d2lkdGg7CgkJCX0KCQkJaWYgKFRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCR5KSkgewoJCQkJJHkgPSAkdGhpcy0+eTsKCQkJfQoJCQkvLyBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMKCQkJJHNwYWNlID0gKCgkdGhpcy0+dyAtICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luIC0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4gLSAoJG51bWNvbHMgKiAkd2lkdGgpKSAvICgkbnVtY29scyAtIDEpKTsKCQkJLy8gZmlsbCB0aGUgY29sdW1ucyBhcnJheSAod2l0aCwgc3BhY2UsIHN0YXJ0aW5nIFkgcG9zaXRpb24pCgkJCWZvciAoJGkgPSAwOyAkaSA8ICRudW1jb2xzOyArKyRpKSB7CgkJCQkkdGhpcy0+Y29sdW1uc1skaV0gPSBhcnJheSgndycgPT4gJHdpZHRoLCAncycgPT4gJHNwYWNlLCAneScgPT4gJHkpOwoJCQl9CgkJfQoJCSR0aGlzLT5udW1fY29sdW1ucyA9ICRudW1jb2xzOwoJCSR0aGlzLT5jdXJyZW50X2NvbHVtbiA9IDA7CgkJJHRoaXMtPmNvbHVtbl9zdGFydF9wYWdlID0gJHRoaXMtPnBhZ2U7CgkJJHRoaXMtPnNlbGVjdENvbHVtbigwKTsKCX0KCgkvKioKCSAqIFJlbW92ZSBjb2x1bW5zIGFuZCByZXNldCBwYWdlIG1hcmdpbnMuCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjA3MiAoMjAxMS0wNC0yNikKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHJlc2V0Q29sdW1ucygpIHsKCQkkdGhpcy0+bE1hcmdpbiA9ICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luOwoJCSR0aGlzLT5yTWFyZ2luID0gJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW47CgkJJHRoaXMtPnNldEVxdWFsQ29sdW1ucygpOwoJfQoKCS8qKgoJICogU2V0IGNvbHVtbnMgYXJyYXkuCgkgKiBFYWNoIGNvbHVtbiBpcyByZXByZXNlbnRlZCBieSBhbiBhcnJheSBvZiBhcnJheXMgd2l0aCB0aGUgZm9sbG93aW5nIGtleXM6ICh3ID0gd2lkdGgsIHMgPSBzcGFjZSBiZXR3ZWVuIGNvbHVtbnMsIHkgPSBjb2x1bW4gdG9wIHBvc2l0aW9uKS4KCSAqIEBwYXJhbSAkY29sdW1ucyAoYXJyYXkpCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNC45LjAwMSAoMjAxMC0wMy0yOCkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHNldENvbHVtbnNBcnJheSgkY29sdW1ucykgewoJCSR0aGlzLT5jb2x1bW5zID0gJGNvbHVtbnM7CgkJJHRoaXMtPm51bV9jb2x1bW5zID0gY291bnQoJGNvbHVtbnMpOwoJCSR0aGlzLT5jdXJyZW50X2NvbHVtbiA9IDA7CgkJJHRoaXMtPmNvbHVtbl9zdGFydF9wYWdlID0gJHRoaXMtPnBhZ2U7CgkJJHRoaXMtPnNlbGVjdENvbHVtbigwKTsKCX0KCgkvKioKCSAqIFNldCBwb3NpdGlvbiBhdCBhIGdpdmVuIGNvbHVtbgoJICogQHBhcmFtICRjb2wgKGludCkgY29sdW1uIG51bWJlciAoZnJvbSAwIHRvIGdldE51bWJlck9mQ29sdW1ucygpLTEpOyBlbXB0eSBzdHJpbmcgPSBjdXJyZW50IGNvbHVtbi4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA0LjkuMDAxICgyMDEwLTAzLTI4KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2VsZWN0Q29sdW1uKCRjb2w9JycpIHsKCQlpZiAoaXNfc3RyaW5nKCRjb2wpKSB7CgkJCSRjb2wgPSAkdGhpcy0+Y3VycmVudF9jb2x1bW47CgkJfSBlbHNlaWYgKCRjb2wgPj0gJHRoaXMtPm51bV9jb2x1bW5zKSB7CgkJCSRjb2wgPSAwOwoJCX0KCQkkeHNoaWZ0ID0gYXJyYXkoJ3gnID0+IDAsICdzJyA9PiBhcnJheSgnSCcgPT4gMCwgJ1YnID0+IDApLCAncCcgPT4gYXJyYXkoJ0wnID0+IDAsICdUJyA9PiAwLCAnUicgPT4gMCwgJ0InID0+IDApKTsKCQkkZW5hYmxlX3RoZWFkID0gZmFsc2U7CgkJaWYgKCR0aGlzLT5udW1fY29sdW1ucyA+IDEpIHsKCQkJaWYgKCRjb2wgIT0gJHRoaXMtPmN1cnJlbnRfY29sdW1uKSB7CgkJCQkvLyBtb3ZlIFkgcG9pbnRlciBhdCB0aGUgdG9wIG9mIHRoZSBjb2x1bW4KCQkJCWlmICgkdGhpcy0+Y29sdW1uX3N0YXJ0X3BhZ2UgPT0gJHRoaXMtPnBhZ2UpIHsKCQkJCQkkdGhpcy0+eSA9ICR0aGlzLT5jb2x1bW5zWyRjb2xdWyd5J107CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT55ID0gJHRoaXMtPnRNYXJnaW47CgkJCQl9CgkJCQkvLyBBdm9pZCB0byB3cml0ZSB0YWJsZSBoZWFkZXJzIG1vcmUgdGhhbiBvbmNlCgkJCQlpZiAoKCR0aGlzLT5wYWdlID4gJHRoaXMtPm1heHNlbGNvbFsncGFnZSddKSBPUiAoKCR0aGlzLT5wYWdlID09ICR0aGlzLT5tYXhzZWxjb2xbJ3BhZ2UnXSkgQU5EICgkY29sID4gJHRoaXMtPm1heHNlbGNvbFsnY29sdW1uJ10pKSkgewoJCQkJCSRlbmFibGVfdGhlYWQgPSB0cnVlOwoJCQkJCSR0aGlzLT5tYXhzZWxjb2xbJ3BhZ2UnXSA9ICR0aGlzLT5wYWdlOwoJCQkJCSR0aGlzLT5tYXhzZWxjb2xbJ2NvbHVtbiddID0gJGNvbDsKCQkJCX0KCQkJfQoJCQkkeHNoaWZ0ID0gJHRoaXMtPmNvbHhzaGlmdDsKCQkJLy8gc2V0IFggcG9zaXRpb24gb2YgdGhlIGN1cnJlbnQgY29sdW1uIGJ5IGNhc2UKCQkJJGxpc3RpbmRlbnQgPSAoJHRoaXMtPmxpc3RpbmRlbnRsZXZlbCAqICR0aGlzLT5saXN0aW5kZW50KTsKCQkJLy8gY2FsY3VsYXRlIGNvbHVtbiBYIHBvc2l0aW9uCgkJCSRjb2xwb3MgPSAwOwoJCQlmb3IgKCRpID0gMDsgJGkgPCAkY29sOyArKyRpKSB7CgkJCQkkY29scG9zICs9ICgkdGhpcy0+Y29sdW1uc1skaV1bJ3cnXSArICR0aGlzLT5jb2x1bW5zWyRpXVsncyddKTsKCQkJfQoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHggPSAkdGhpcy0+dyAtICR0aGlzLT5vcmlnaW5hbF9yTWFyZ2luIC0gJGNvbHBvczsKCQkJCSR0aGlzLT5yTWFyZ2luID0gKCR0aGlzLT53IC0gJHggKyAkbGlzdGluZGVudCk7CgkJCQkkdGhpcy0+bE1hcmdpbiA9ICgkeCAtICR0aGlzLT5jb2x1bW5zWyRjb2xdWyd3J10pOwoJCQkJJHRoaXMtPnggPSAkeCAtICRsaXN0aW5kZW50OwoJCQl9IGVsc2UgewoJCQkJJHggPSAkdGhpcy0+b3JpZ2luYWxfbE1hcmdpbiArICRjb2xwb3M7CgkJCQkkdGhpcy0+bE1hcmdpbiA9ICgkeCArICRsaXN0aW5kZW50KTsKCQkJCSR0aGlzLT5yTWFyZ2luID0gKCR0aGlzLT53IC0gJHggLSAkdGhpcy0+Y29sdW1uc1skY29sXVsndyddKTsKCQkJCSR0aGlzLT54ID0gJHggKyAkbGlzdGluZGVudDsKCQkJfQoJCQkkdGhpcy0+Y29sdW1uc1skY29sXVsneCddID0gJHg7CgkJfQoJCSR0aGlzLT5jdXJyZW50X2NvbHVtbiA9ICRjb2w7CgkJLy8gZml4IGZvciBIVE1MIG1vZGUKCQkkdGhpcy0+bmV3bGluZSA9IHRydWU7CgkJLy8gcHJpbnQgSFRNTCB0YWJsZSBoZWFkZXIgKGlmIGFueSkKCQlpZiAoKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+dGhlYWQpKSBBTkQgKCEkdGhpcy0+aW50aGVhZCkpIHsKCQkJaWYgKCRlbmFibGVfdGhlYWQpIHsKCQkJCS8vIHByaW50IHRhYmxlIGhlYWRlcgoJCQkJJHRoaXMtPndyaXRlSFRNTCgkdGhpcy0+dGhlYWQsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCAnJyk7CgkJCQkkdGhpcy0+eSArPSAkeHNoaWZ0WydzJ11bJ1YnXTsKCQkJCS8vIHN0b3JlIGVuZCBvZiBoZWFkZXIgcG9zaXRpb24KCQkJCWlmICghaXNzZXQoJHRoaXMtPmNvbHVtbnNbJGNvbF1bJ3RoJ10pKSB7CgkJCQkJJHRoaXMtPmNvbHVtbnNbJGNvbF1bJ3RoJ10gPSBhcnJheSgpOwoJCQkJfQoJCQkJJHRoaXMtPmNvbHVtbnNbJGNvbF1bJ3RoJ11bJ1wnJy4kdGhpcy0+cGFnZS4nXCcnXSA9ICR0aGlzLT55OwoJCQkJJHRoaXMtPmxhc3RoID0gMDsKCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT5jb2x1bW5zWyRjb2xdWyd0aCddWydcJycuJHRoaXMtPnBhZ2UuJ1wnJ10pKSB7CgkJCQkkdGhpcy0+eSA9ICR0aGlzLT5jb2x1bW5zWyRjb2xdWyd0aCddWydcJycuJHRoaXMtPnBhZ2UuJ1wnJ107CgkJCX0KCQl9CgkJLy8gYWNjb3VudCBmb3IgYW4gaHRtbCB0YWJsZSBjZWxsIG92ZXIgbXVsdGlwbGUgY29sdW1ucwoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCSR0aGlzLT5yTWFyZ2luICs9ICR4c2hpZnRbJ3gnXTsKCQkJJHRoaXMtPnggLT0gKCR4c2hpZnRbJ3gnXSArICR4c2hpZnRbJ3AnXVsnUiddKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+bE1hcmdpbiArPSAkeHNoaWZ0Wyd4J107CgkJCSR0aGlzLT54ICs9ICR4c2hpZnRbJ3gnXSArICR4c2hpZnRbJ3AnXVsnTCddOwoJCX0KCX0KCgkvKioKCSAqIFJldHVybiB0aGUgY3VycmVudCBjb2x1bW4gbnVtYmVyCgkgKiBAcmV0dXJuIGludCBjdXJyZW50IGNvbHVtbiBudW1iZXIKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjUuMDExICgyMDEwLTA3LTA4KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Q29sdW1uKCkgewoJCXJldHVybiAkdGhpcy0+Y3VycmVudF9jb2x1bW47Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIGN1cnJlbnQgbnVtYmVyIG9mIGNvbHVtbnMuCgkgKiBAcmV0dXJuIGludCBudW1iZXIgb2YgY29sdW1ucwoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOC4wMTggKDIwMTAtMDgtMjUpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXROdW1iZXJPZkNvbHVtbnMoKSB7CgkJcmV0dXJuICR0aGlzLT5udW1fY29sdW1uczsKCX0KCgkvKioKCSAqIFNldCBUZXh0IHJlbmRlcmluZyBtb2RlLgoJICogQHBhcmFtICRzdHJva2UgKGludCkgb3V0bGluZSBzaXplIGluIHVzZXIgdW5pdHMgKDAgPSBkaXNhYmxlKS4KCSAqIEBwYXJhbSAkZmlsbCAoYm9vbGVhbikgaWYgdHJ1ZSBmaWxscyB0aGUgdGV4dCAoZGVmYXVsdCkuCgkgKiBAcGFyYW0gJGNsaXAgKGJvb2xlYW4pIGlmIHRydWUgYWN0aXZhdGUgY2xpcHBpbmcgbW9kZQoJICogQHB1YmxpYwoJICogQHNpbmNlIDQuOS4wMDggKDIwMDktMDQtMDIpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRUZXh0UmVuZGVyaW5nTW9kZSgkc3Ryb2tlPTAsICRmaWxsPXRydWUsICRjbGlwPWZhbHNlKSB7CgkJLy8gUmVmLjogUERGIDMyMDAwLTE6MjAwOCAtIDkuMy42IFRleHQgUmVuZGVyaW5nIE1vZGUKCQkvLyBjb252ZXJ0IHRleHQgcmVuZGVyaW5nIHBhcmFtZXRlcnMKCQlpZiAoJHN0cm9rZSA8IDApIHsKCQkJJHN0cm9rZSA9IDA7CgkJfQoJCWlmICgkZmlsbCA9PT0gdHJ1ZSkgewoJCQlpZiAoJHN0cm9rZSA+IDApIHsKCQkJCWlmICgkY2xpcCA9PT0gdHJ1ZSkgewoJCQkJCS8vIEZpbGwsIHRoZW4gc3Ryb2tlIHRleHQgYW5kIGFkZCB0byBwYXRoIGZvciBjbGlwcGluZwoJCQkJCSR0ZXh0cmVuZGVybW9kZSA9IDY7CgkJCQl9IGVsc2UgewoJCQkJCS8vIEZpbGwsIHRoZW4gc3Ryb2tlIHRleHQKCQkJCQkkdGV4dHJlbmRlcm1vZGUgPSAyOwoJCQkJfQoJCQkJJHRleHRzdHJva2V3aWR0aCA9ICRzdHJva2U7CgkJCX0gZWxzZSB7CgkJCQlpZiAoJGNsaXAgPT09IHRydWUpIHsKCQkJCQkvLyBGaWxsIHRleHQgYW5kIGFkZCB0byBwYXRoIGZvciBjbGlwcGluZwoJCQkJCSR0ZXh0cmVuZGVybW9kZSA9IDQ7CgkJCQl9IGVsc2UgewoJCQkJCS8vIEZpbGwgdGV4dAoJCQkJCSR0ZXh0cmVuZGVybW9kZSA9IDA7CgkJCQl9CgkJCX0KCQl9IGVsc2UgewoJCQlpZiAoJHN0cm9rZSA+IDApIHsKCQkJCWlmICgkY2xpcCA9PT0gdHJ1ZSkgewoJCQkJCS8vIFN0cm9rZSB0ZXh0IGFuZCBhZGQgdG8gcGF0aCBmb3IgY2xpcHBpbmcKCQkJCQkkdGV4dHJlbmRlcm1vZGUgPSA1OwoJCQkJfSBlbHNlIHsKCQkJCQkvLyBTdHJva2UgdGV4dAoJCQkJCSR0ZXh0cmVuZGVybW9kZSA9IDE7CgkJCQl9CgkJCQkkdGV4dHN0cm9rZXdpZHRoID0gJHN0cm9rZTsKCQkJfSBlbHNlIHsKCQkJCWlmICgkY2xpcCA9PT0gdHJ1ZSkgewoJCQkJCS8vIEFkZCB0ZXh0IHRvIHBhdGggZm9yIGNsaXBwaW5nCgkJCQkJJHRleHRyZW5kZXJtb2RlID0gNzsKCQkJCX0gZWxzZSB7CgkJCQkJLy8gTmVpdGhlciBmaWxsIG5vciBzdHJva2UgdGV4dCAoaW52aXNpYmxlKQoJCQkJCSR0ZXh0cmVuZGVybW9kZSA9IDM7CgkJCQl9CgkJCX0KCQl9CgkJJHRoaXMtPnRleHRyZW5kZXJtb2RlID0gJHRleHRyZW5kZXJtb2RlOwoJCSR0aGlzLT50ZXh0c3Ryb2tld2lkdGggPSAkc3Ryb2tlOwoJfQoKCS8qKgoJICogU2V0IHBhcmFtZXRlcnMgZm9yIGRyb3Agc2hhZG93IGVmZmVjdCBmb3IgdGV4dC4KCSAqIEBwYXJhbSAkcGFyYW1zIChhcnJheSkgQXJyYXkgb2YgcGFyYW1ldGVyczogZW5hYmxlZCAoYm9vbGVhbikgc2V0IHRvIHRydWUgdG8gZW5hYmxlIHNoYWRvdzsgZGVwdGhfdyAoZmxvYXQpIHNoYWRvdyB3aWR0aCBpbiB1c2VyIHVuaXRzOyBkZXB0aF9oIChmbG9hdCkgc2hhZG93IGhlaWdodCBpbiB1c2VyIHVuaXRzOyBjb2xvciAoYXJyYXkpIHNoYWRvdyBjb2xvciBvciBmYWxzZSB0byB1c2UgdGhlIHN0cm9rZSBjb2xvcjsgb3BhY2l0eSAoZmxvYXQpIEFscGhhIHZhbHVlOiByZWFsIHZhbHVlIGZyb20gMCAodHJhbnNwYXJlbnQpIHRvIDEgKG9wYXF1ZSk7IGJsZW5kX21vZGUgKHN0cmluZykgYmxlbmQgbW9kZSwgb25lIG9mIHRoZSBmb2xsb3dpbmc6IE5vcm1hbCwgTXVsdGlwbHksIFNjcmVlbiwgT3ZlcmxheSwgRGFya2VuLCBMaWdodGVuLCBDb2xvckRvZGdlLCBDb2xvckJ1cm4sIEhhcmRMaWdodCwgU29mdExpZ2h0LCBEaWZmZXJlbmNlLCBFeGNsdXNpb24sIEh1ZSwgU2F0dXJhdGlvbiwgQ29sb3IsIEx1bWlub3NpdHkuCgkgKiBAc2luY2UgNS45LjE3NCAoMjAxMi0wNy0yNSkKCSAqIEBwdWJsaWMKCSovCglwdWJsaWMgZnVuY3Rpb24gc2V0VGV4dFNoYWRvdygkcGFyYW1zPWFycmF5KCdlbmFibGVkJz0+ZmFsc2UsICdkZXB0aF93Jz0+MCwgJ2RlcHRoX2gnPT4wLCAnY29sb3InPT5mYWxzZSwgJ29wYWNpdHknPT4xLCAnYmxlbmRfbW9kZSc9PidOb3JtYWwnKSkgewoJCWlmIChpc3NldCgkcGFyYW1zWydlbmFibGVkJ10pKSB7CgkJCSR0aGlzLT50eHRzaGFkb3dbJ2VuYWJsZWQnXSA9ICRwYXJhbXNbJ2VuYWJsZWQnXT90cnVlOmZhbHNlOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT50eHRzaGFkb3dbJ2VuYWJsZWQnXSA9IGZhbHNlOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snZGVwdGhfdyddKSkgewoJCQkkdGhpcy0+dHh0c2hhZG93WydkZXB0aF93J10gPSBmbG9hdHZhbCgkcGFyYW1zWydkZXB0aF93J10pOwoJCX0gZWxzZSB7CgkJCSR0aGlzLT50eHRzaGFkb3dbJ2RlcHRoX3cnXSA9IDA7CgkJfQoJCWlmIChpc3NldCgkcGFyYW1zWydkZXB0aF9oJ10pKSB7CgkJCSR0aGlzLT50eHRzaGFkb3dbJ2RlcHRoX2gnXSA9IGZsb2F0dmFsKCRwYXJhbXNbJ2RlcHRoX2gnXSk7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnR4dHNoYWRvd1snZGVwdGhfaCddID0gMDsKCQl9CgkJaWYgKGlzc2V0KCRwYXJhbXNbJ2NvbG9yJ10pIEFORCAoJHBhcmFtc1snY29sb3InXSAhPT0gZmFsc2UpIEFORCBpc19hcnJheSgkcGFyYW1zWydjb2xvciddKSkgewoJCQkkdGhpcy0+dHh0c2hhZG93Wydjb2xvciddID0gJHBhcmFtc1snY29sb3InXTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+dHh0c2hhZG93Wydjb2xvciddID0gJHRoaXMtPnN0cm9rZWNvbG9yOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snb3BhY2l0eSddKSkgewoJCQkkdGhpcy0+dHh0c2hhZG93WydvcGFjaXR5J10gPSBtaW4oMSwgbWF4KDAsIGZsb2F0dmFsKCRwYXJhbXNbJ29wYWNpdHknXSkpKTsKCQl9IGVsc2UgewoJCQkkdGhpcy0+dHh0c2hhZG93WydvcGFjaXR5J10gPSAxOwoJCX0KCQlpZiAoaXNzZXQoJHBhcmFtc1snYmxlbmRfbW9kZSddKSBBTkQgaW5fYXJyYXkoJHBhcmFtc1snYmxlbmRfbW9kZSddLCBhcnJheSgnTm9ybWFsJywgJ011bHRpcGx5JywgJ1NjcmVlbicsICdPdmVybGF5JywgJ0RhcmtlbicsICdMaWdodGVuJywgJ0NvbG9yRG9kZ2UnLCAnQ29sb3JCdXJuJywgJ0hhcmRMaWdodCcsICdTb2Z0TGlnaHQnLCAnRGlmZmVyZW5jZScsICdFeGNsdXNpb24nLCAnSHVlJywgJ1NhdHVyYXRpb24nLCAnQ29sb3InLCAnTHVtaW5vc2l0eScpKSkgewoJCQkkdGhpcy0+dHh0c2hhZG93WydibGVuZF9tb2RlJ10gPSAkcGFyYW1zWydibGVuZF9tb2RlJ107CgkJfSBlbHNlIHsKCQkJJHRoaXMtPnR4dHNoYWRvd1snYmxlbmRfbW9kZSddID0gJ05vcm1hbCc7CgkJfQoJCWlmICgoKCR0aGlzLT50eHRzaGFkb3dbJ2RlcHRoX3cnXSA9PSAwKSBBTkQgKCR0aGlzLT50eHRzaGFkb3dbJ2RlcHRoX2gnXSA9PSAwKSkgT1IgKCR0aGlzLT50eHRzaGFkb3dbJ29wYWNpdHknXSA9PSAwKSkgewoJCQkkdGhpcy0+dHh0c2hhZG93WydlbmFibGVkJ10gPSBmYWxzZTsKCQl9Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdGhlIHRleHQgc2hhZG93IHBhcmFtZXRlcnMgYXJyYXkuCgkgKiBAcmV0dXJuIEFycmF5IG9mIHBhcmFtZXRlcnMuCgkgKiBAc2luY2UgNS45LjE3NCAoMjAxMi0wNy0yNSkKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldFRleHRTaGFkb3coKSB7CgkJcmV0dXJuICR0aGlzLT50eHRzaGFkb3c7Cgl9CgoJLyoqCgkgKiBSZXR1cm5zIGFuIGFycmF5IG9mIGNoYXJzIGNvbnRhaW5pbmcgc29mdCBoeXBoZW5zLgoJICogQHBhcmFtICR3b3JkIChhcnJheSkgYXJyYXkgb2YgY2hhcnMKCSAqIEBwYXJhbSAkcGF0dGVybnMgKGFycmF5KSBBcnJheSBvZiBoeXBlbmF0aW9uIHBhdHRlcm5zLgoJICogQHBhcmFtICRkaWN0aW9uYXJ5IChhcnJheSkgQXJyYXkgb2Ygd29yZHMgdG8gYmUgcmV0dXJuZWQgd2l0aG91dCBhcHBseWluZyB0aGUgaHlwaGVuYXRpb24gYWxnb3JpdG0uCgkgKiBAcGFyYW0gJGxlZnRtaW4gKGludCkgTWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVyIHRvIGxlYXZlIG9uIHRoZSBsZWZ0IG9mIHRoZSB3b3JkIHdpdGhvdXQgYXBwbHlpbmcgdGhlIGh5cGhlbnMuCgkgKiBAcGFyYW0gJHJpZ2h0bWluIChpbnQpIE1pbmltdW0gbnVtYmVyIG9mIGNoYXJhY3RlciB0byBsZWF2ZSBvbiB0aGUgcmlnaHQgb2YgdGhlIHdvcmQgd2l0aG91dCBhcHBseWluZyB0aGUgaHlwaGVucy4KCSAqIEBwYXJhbSAkY2hhcm1pbiAoaW50KSBNaW5pbXVtIHdvcmQgbGVuZ3RoIHRvIGFwcGx5IHRoZSBoeXBoZW5hdGlvbiBhbGdvcml0bS4KCSAqIEBwYXJhbSAkY2hhcm1heCAoaW50KSBNYXhpbXVtIGxlbmd0aCBvZiBicm9rZW4gcGllY2Ugb2Ygd29yZC4KCSAqIEByZXR1cm4gYXJyYXkgdGV4dCB3aXRoIHNvZnQgaHlwaGVucwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA0LjkuMDEyICgyMDEwLTA0LTEyKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gaHlwaGVuYXRlV29yZCgkd29yZCwgJHBhdHRlcm5zLCAkZGljdGlvbmFyeT1hcnJheSgpLCAkbGVmdG1pbj0xLCAkcmlnaHRtaW49MiwgJGNoYXJtaW49MSwgJGNoYXJtYXg9OCkgewoJCSRoeXBoZW53b3JkID0gYXJyYXkoKTsgLy8gaHlwaGVucyBwb3NpdGlvbnMKCQkkbnVtY2hhcnMgPSBjb3VudCgkd29yZCk7CgkJaWYgKCRudW1jaGFycyA8PSAkY2hhcm1pbikgewoJCQlyZXR1cm4gJHdvcmQ7CgkJfQoJCSR3b3JkX3N0cmluZyA9IFRDUERGX0ZPTlRTOjpVVEY4QXJyU3ViU3RyaW5nKCR3b3JkLCAnJywgJycsICR0aGlzLT5pc3VuaWNvZGUpOwoJCS8vIHNvbWUgd29yZHMgd2lsbCBiZSByZXR1cm5lZCBhcy1pcwoJCSRwYXR0ZXJuID0gJy9eKFthLXpBLVowLTlfXC5cLV0rKUAoKFxbWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuWzAtOV17MSwzfVwuKXwoKFthLXpBLVowLTlcLV0rXC4pKykpKFthLXpBLVpdezIsNH18WzAtOV17MSwzfSkoXF0/KSQvJzsKCQlpZiAocHJlZ19tYXRjaCgkcGF0dGVybiwgJHdvcmRfc3RyaW5nKSA+IDApIHsKCQkJLy8gZW1haWwKCQkJcmV0dXJuICR3b3JkOwoJCX0KCQkkcGF0dGVybiA9ICcvKChbYS16QS1aMC05XC1dK1wuKT8pKChcW1swLTldezEsM31cLlswLTldezEsM31cLlswLTldezEsM31cLil8KChbYS16QS1aMC05XC1dK1wuKSspKShbYS16QS1aXXsyLDR9fFswLTldezEsM30pKFxdPykkLyc7CgkJaWYgKHByZWdfbWF0Y2goJHBhdHRlcm4sICR3b3JkX3N0cmluZykgPiAwKSB7CgkJCS8vIFVSTAoJCQlyZXR1cm4gJHdvcmQ7CgkJfQoJCWlmIChpc3NldCgkZGljdGlvbmFyeVskd29yZF9zdHJpbmddKSkgewoJCQlyZXR1cm4gVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCRkaWN0aW9uYXJ5WyR3b3JkX3N0cmluZ10sICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJfQoJCS8vIHN1cm91bmQgd29yZCB3aXRoICdfJyBjaGFyYWN0ZXJzCgkJJHRtcHdvcmQgPSBhcnJheV9tZXJnZShhcnJheSg5NSksICR3b3JkLCBhcnJheSg5NSkpOwoJCSR0bXBudW1jaGFycyA9ICRudW1jaGFycyArIDI7CgkJJG1heHBvcyA9ICR0bXBudW1jaGFycyAtICRjaGFybWluOwoJCWZvciAoJHBvcyA9IDA7ICRwb3MgPCAkbWF4cG9zOyArKyRwb3MpIHsKCQkJJGltYXggPSBtaW4oKCR0bXBudW1jaGFycyAtICRwb3MpLCAkY2hhcm1heCk7CgkJCWZvciAoJGkgPSAkY2hhcm1pbjsgJGkgPD0gJGltYXg7ICsrJGkpIHsKCQkJCSRzdWJ3b3JkID0gc3RydG9sb3dlcihUQ1BERl9GT05UUzo6VVRGOEFyclN1YlN0cmluZygkdG1wd29yZCwgJHBvcywgKCRwb3MgKyAkaSksICR0aGlzLT5pc3VuaWNvZGUpKTsKCQkJCWlmIChpc3NldCgkcGF0dGVybnNbJHN1YndvcmRdKSkgewoJCQkJCSRwYXR0ZXJuID0gVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCRwYXR0ZXJuc1skc3Vid29yZF0sICR0aGlzLT5pc3VuaWNvZGUsICR0aGlzLT5DdXJyZW50Rm9udCk7CgkJCQkJJHBhdHRlcm5fbGVuZ3RoID0gY291bnQoJHBhdHRlcm4pOwoJCQkJCSRkaWdpdHMgPSAxOwoJCQkJCWZvciAoJGogPSAwOyAkaiA8ICRwYXR0ZXJuX2xlbmd0aDsgKyskaikgewoJCQkJCQkvLyBjaGVjayBpZiAkcGF0dGVyblskal0gaXMgYSBudW1iZXIKCQkJCQkJaWYgKCgkcGF0dGVyblskal0gPj0gNDgpIEFORCAoJHBhdHRlcm5bJGpdIDw9IDU3KSkgewoJCQkJCQkJaWYgKCRqID09IDApIHsKCQkJCQkJCQkkemVybyA9ICRwb3MgLSAxOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkemVybyA9ICRwb3MgKyAkaiAtICRkaWdpdHM7CgkJCQkJCQl9CgkJCQkJCQlpZiAoIWlzc2V0KCRoeXBoZW53b3JkWyR6ZXJvXSkgT1IgKCRoeXBoZW53b3JkWyR6ZXJvXSAhPSAkcGF0dGVyblskal0pKSB7CgkJCQkJCQkJJGh5cGhlbndvcmRbJHplcm9dID0gVENQREZfRk9OVFM6OnVuaWNocigkcGF0dGVyblskal0sICR0aGlzLT5pc3VuaWNvZGUpOwoJCQkJCQkJfQoJCQkJCQkJKyskZGlnaXRzOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQl9CgkJfQoJCSRpbnNlcnRlZCA9IDA7CgkJJG1heHBvcyA9ICRudW1jaGFycyAtICRyaWdodG1pbjsKCQlmb3IgKCRpID0gJGxlZnRtaW47ICRpIDw9ICRtYXhwb3M7ICsrJGkpIHsKCQkJaWYgKGlzc2V0KCRoeXBoZW53b3JkWyRpXSkgQU5EICgoJGh5cGhlbndvcmRbJGldICUgMikgIT0gMCkpIHsKCQkJCS8vIDE3MyA9IHNvZnQgaHlwaGVuIGNoYXJhY3RlcgoJCQkJYXJyYXlfc3BsaWNlKCR3b3JkLCAkaSArICRpbnNlcnRlZCwgMCwgMTczKTsKCQkJCSsrJGluc2VydGVkOwoJCQl9CgkJfQoJCXJldHVybiAkd29yZDsKCX0KCgkvKioKCSAqIFJldHVybnMgdGV4dCB3aXRoIHNvZnQgaHlwaGVucy4KCSAqIEBwYXJhbSAkdGV4dCAoc3RyaW5nKSB0ZXh0IHRvIHByb2Nlc3MKCSAqIEBwYXJhbSAkcGF0dGVybnMgKG1peGVkKSBBcnJheSBvZiBoeXBlbmF0aW9uIHBhdHRlcm5zIG9yIGEgVEVYIGZpbGUgY29udGFpbmluZyBoeXBlbmF0aW9uIHBhdHRlcm5zLiBURVggcGF0dGVybnMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmN0YW4ub3JnL3RleC1hcmNoaXZlL2xhbmd1YWdlL2h5cGgtdXRmOC90ZXgvZ2VuZXJpYy9oeXBoLXV0ZjgvcGF0dGVybnMvCgkgKiBAcGFyYW0gJGRpY3Rpb25hcnkgKGFycmF5KSBBcnJheSBvZiB3b3JkcyB0byBiZSByZXR1cm5lZCB3aXRob3V0IGFwcGx5aW5nIHRoZSBoeXBoZW5hdGlvbiBhbGdvcml0bS4KCSAqIEBwYXJhbSAkbGVmdG1pbiAoaW50KSBNaW5pbXVtIG51bWJlciBvZiBjaGFyYWN0ZXIgdG8gbGVhdmUgb24gdGhlIGxlZnQgb2YgdGhlIHdvcmQgd2l0aG91dCBhcHBseWluZyB0aGUgaHlwaGVucy4KCSAqIEBwYXJhbSAkcmlnaHRtaW4gKGludCkgTWluaW11bSBudW1iZXIgb2YgY2hhcmFjdGVyIHRvIGxlYXZlIG9uIHRoZSByaWdodCBvZiB0aGUgd29yZCB3aXRob3V0IGFwcGx5aW5nIHRoZSBoeXBoZW5zLgoJICogQHBhcmFtICRjaGFybWluIChpbnQpIE1pbmltdW0gd29yZCBsZW5ndGggdG8gYXBwbHkgdGhlIGh5cGhlbmF0aW9uIGFsZ29yaXRtLgoJICogQHBhcmFtICRjaGFybWF4IChpbnQpIE1heGltdW0gbGVuZ3RoIG9mIGJyb2tlbiBwaWVjZSBvZiB3b3JkLgoJICogQHJldHVybiBhcnJheSB0ZXh0IHdpdGggc29mdCBoeXBoZW5zCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDQuOS4wMTIgKDIwMTAtMDQtMTIpCgkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBoeXBoZW5hdGVUZXh0KCR0ZXh0LCAkcGF0dGVybnMsICRkaWN0aW9uYXJ5PWFycmF5KCksICRsZWZ0bWluPTEsICRyaWdodG1pbj0yLCAkY2hhcm1pbj0xLCAkY2hhcm1heD04KSB7CgkJJHRleHQgPSAkdGhpcy0+dW5odG1sZW50aXRpZXMoJHRleHQpOwoJCSR3b3JkID0gYXJyYXkoKTsgLy8gbGFzdCB3b3JkCgkJJHR4dGFyciA9IGFycmF5KCk7IC8vIHRleHQgdG8gYmUgcmV0dXJuZWQKCQkkaW50YWcgPSBmYWxzZTsgLy8gdHJ1ZSBpZiB3ZSBhcmUgaW5zaWRlIGFuIEhUTUwgdGFnCgkJaWYgKCFpc19hcnJheSgkcGF0dGVybnMpKSB7CgkJCSRwYXR0ZXJucyA9IFRDUERGX1NUQVRJQzo6Z2V0SHlwaGVuUGF0dGVybnNGcm9tVEVYKCRwYXR0ZXJucyk7CgkJfQoJCS8vIGdldCBhcnJheSBvZiBjaGFyYWN0ZXJzCgkJJHVuaWNoYXJzID0gVENQREZfRk9OVFM6OlVURjhTdHJpbmdUb0FycmF5KCR0ZXh0LCAkdGhpcy0+aXN1bmljb2RlLCAkdGhpcy0+Q3VycmVudEZvbnQpOwoJCS8vIGZvciBlYWNoIGNoYXIKCQlmb3JlYWNoICgkdW5pY2hhcnMgYXMgJGNoYXIpIHsKCQkJaWYgKCghJGludGFnKSBBTkQgVENQREZfRk9OVF9EQVRBOjokdW5pX3R5cGVbJGNoYXJdID09ICdMJykgewoJCQkJLy8gbGV0dGVyIGNoYXJhY3RlcgoJCQkJJHdvcmRbXSA9ICRjaGFyOwoJCQl9IGVsc2UgewoJCQkJLy8gb3RoZXIgdHlwZSBvZiBjaGFyYWN0ZXIKCQkJCWlmICghVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJHdvcmQpKSB7CgkJCQkJLy8gaHlwZW5hdGUgdGhlIHdvcmQKCQkJCQkkdHh0YXJyID0gYXJyYXlfbWVyZ2UoJHR4dGFyciwgJHRoaXMtPmh5cGhlbmF0ZVdvcmQoJHdvcmQsICRwYXR0ZXJucywgJGRpY3Rpb25hcnksICRsZWZ0bWluLCAkcmlnaHRtaW4sICRjaGFybWluLCAkY2hhcm1heCkpOwoJCQkJCSR3b3JkID0gYXJyYXkoKTsKCQkJCX0KCQkJCSR0eHRhcnJbXSA9ICRjaGFyOwoJCQkJaWYgKGNocigkY2hhcikgPT0gJzwnKSB7CgkJCQkJLy8gd2UgYXJlIGluc2lkZSBhbiBIVE1MIHRhZwoJCQkJCSRpbnRhZyA9IHRydWU7CgkJCQl9IGVsc2VpZiAoJGludGFnIEFORCAoY2hyKCRjaGFyKSA9PSAnPicpKSB7CgkJCQkJLy8gZW5kIG9mIEhUTUwgdGFnCgkJCQkJJGludGFnID0gZmFsc2U7CgkJCQl9CgkJCX0KCQl9CgkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkd29yZCkpIHsKCQkJLy8gaHlwZW5hdGUgdGhlIHdvcmQKCQkJJHR4dGFyciA9IGFycmF5X21lcmdlKCR0eHRhcnIsICR0aGlzLT5oeXBoZW5hdGVXb3JkKCR3b3JkLCAkcGF0dGVybnMsICRkaWN0aW9uYXJ5LCAkbGVmdG1pbiwgJHJpZ2h0bWluLCAkY2hhcm1pbiwgJGNoYXJtYXgpKTsKCQl9CgkJLy8gY29udmVydCBjaGFyIGFycmF5IHRvIHN0cmluZyBhbmQgcmV0dXJuCgkJcmV0dXJuIFRDUERGX0ZPTlRTOjpVVEY4QXJyU3ViU3RyaW5nKCR0eHRhcnIsICcnLCAnJywgJHRoaXMtPmlzdW5pY29kZSk7Cgl9CgoJLyoqCgkgKiBFbmFibGUvZGlzYWJsZSByYXN0ZXJpemF0aW9uIG9mIHZlY3RvciBpbWFnZXMgdXNpbmcgSW1hZ2VNYWdpY2sgbGlicmFyeS4KCSAqIEBwYXJhbSAkbW9kZSAoYm9vbGVhbikgaWYgdHJ1ZSBlbmFibGUgcmFzdGVyaXphdGlvbiwgZmFsc2Ugb3RoZXJ3aXNlLgoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDQtMjcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRSYXN0ZXJpemVWZWN0b3JJbWFnZXMoJG1vZGUpIHsKCQkkdGhpcy0+cmFzdGVyaXplX3ZlY3Rvcl9pbWFnZXMgPSAkbW9kZTsKCX0KCgkvKioKCSAqIEVuYWJsZSBvciBkaXNhYmxlIGRlZmF1bHQgb3B0aW9uIGZvciBmb250IHN1YnNldHRpbmcuCgkgKiBAcGFyYW0gJGVuYWJsZSAoYm9vbGVhbikgaWYgdHJ1ZSBlbmFibGUgZm9udCBzdWJzZXR0aW5nIGJ5IGRlZmF1bHQuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuMy4wMDIgKDIwMTAtMDYtMDcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRGb250U3Vic2V0dGluZygkZW5hYmxlPXRydWUpIHsKCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkkdGhpcy0+Zm9udF9zdWJzZXR0aW5nID0gZmFsc2U7CgkJfSBlbHNlIHsKCQkJJHRoaXMtPmZvbnRfc3Vic2V0dGluZyA9ICRlbmFibGUgPyB0cnVlIDogZmFsc2U7CgkJfQoJfQoKCS8qKgoJICogUmV0dXJuIHRoZSBkZWZhdWx0IG9wdGlvbiBmb3IgZm9udCBzdWJzZXR0aW5nLgoJICogQHJldHVybiBib29sZWFuIGRlZmF1bHQgZm9udCBzdWJzZXR0aW5nIHN0YXRlLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjMuMDAyICgyMDEwLTA2LTA3KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0Rm9udFN1YnNldHRpbmcoKSB7CgkJcmV0dXJuICR0aGlzLT5mb250X3N1YnNldHRpbmc7Cgl9CgoJLyoqCgkgKiBMZWZ0IHRyaW0gdGhlIGlucHV0IHN0cmluZwoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIHRvIHRyaW0KCSAqIEBwYXJhbSAkcmVwbGFjZSAoc3RyaW5nKSBzdHJpbmcgdGhhdCByZXBsYWNlIHNwYWNlcy4KCSAqIEByZXR1cm4gbGVmdCB0cmltbWVkIHN0cmluZwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjguMDAwICgyMDEwLTA4LTExKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc3RyaW5nTGVmdFRyaW0oJHN0ciwgJHJlcGxhY2U9JycpIHsKCQlyZXR1cm4gcHJlZ19yZXBsYWNlKCcvXicuJHRoaXMtPnJlX3NwYWNlWydwJ10uJysvJy4kdGhpcy0+cmVfc3BhY2VbJ20nXSwgJHJlcGxhY2UsICRzdHIpOwoJfQoKCS8qKgoJICogUmlnaHQgdHJpbSB0aGUgaW5wdXQgc3RyaW5nCgkgKiBAcGFyYW0gJHN0ciAoc3RyaW5nKSBzdHJpbmcgdG8gdHJpbQoJICogQHBhcmFtICRyZXBsYWNlIChzdHJpbmcpIHN0cmluZyB0aGF0IHJlcGxhY2Ugc3BhY2VzLgoJICogQHJldHVybiByaWdodCB0cmltbWVkIHN0cmluZwoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjguMDAwICgyMDEwLTA4LTExKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc3RyaW5nUmlnaHRUcmltKCRzdHIsICRyZXBsYWNlPScnKSB7CgkJcmV0dXJuIHByZWdfcmVwbGFjZSgnLycuJHRoaXMtPnJlX3NwYWNlWydwJ10uJyskLycuJHRoaXMtPnJlX3NwYWNlWydtJ10sICRyZXBsYWNlLCAkc3RyKTsKCX0KCgkvKioKCSAqIFRyaW0gdGhlIGlucHV0IHN0cmluZwoJICogQHBhcmFtICRzdHIgKHN0cmluZykgc3RyaW5nIHRvIHRyaW0KCSAqIEBwYXJhbSAkcmVwbGFjZSAoc3RyaW5nKSBzdHJpbmcgdGhhdCByZXBsYWNlIHNwYWNlcy4KCSAqIEByZXR1cm4gdHJpbW1lZCBzdHJpbmcKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS44LjAwMCAoMjAxMC0wOC0xMSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIHN0cmluZ1RyaW0oJHN0ciwgJHJlcGxhY2U9JycpIHsKCQkkc3RyID0gJHRoaXMtPnN0cmluZ0xlZnRUcmltKCRzdHIsICRyZXBsYWNlKTsKCQkkc3RyID0gJHRoaXMtPnN0cmluZ1JpZ2h0VHJpbSgkc3RyLCAkcmVwbGFjZSk7CgkJcmV0dXJuICRzdHI7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgY3VycmVudCBmb250IGlzIHVuaWNvZGUgdHlwZS4KCSAqIEByZXR1cm4gdHJ1ZSBmb3IgdW5pY29kZSBmb250LCBmYWxzZSBvdGhlcndpc2UuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOC4wMDIgKDIwMTAtMDgtMTQpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBpc1VuaWNvZGVGb250KCkgewoJCXJldHVybiAoKCR0aGlzLT5DdXJyZW50Rm9udFsndHlwZSddID09ICdUcnVlVHlwZVVuaWNvZGUnKSBPUiAoJHRoaXMtPkN1cnJlbnRGb250Wyd0eXBlJ10gPT0gJ2NpZGZvbnQwJykpOwoJfQoKCS8qKgoJICogUmV0dXJuIG5vcm1hbGl6ZWQgZm9udCBuYW1lCgkgKiBAcGFyYW0gJGZvbnRmYW1pbHkgKHN0cmluZykgcHJvcGVydHkgc3RyaW5nIGNvbnRhaW5pbmcgZm9udCBmYW1pbHkgbmFtZXMKCSAqIEByZXR1cm4gc3RyaW5nIG5vcm1hbGl6ZWQgZm9udCBuYW1lCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOC4wMDQgKDIwMTAtMDgtMTcpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb250RmFtaWx5TmFtZSgkZm9udGZhbWlseSkgewoJCS8vIHJlbW92ZSBzcGFjZXMgYW5kIHN5bWJvbHMKCQkkZm9udGZhbWlseSA9IHByZWdfcmVwbGFjZSgnL1teYS16MC05X1wsXS8nLCAnJywgc3RydG9sb3dlcigkZm9udGZhbWlseSkpOwoJCS8vIGV4dHJhY3QgYWxsIGZvbnQgbmFtZXMKCQkkZm9udHNsaXN0ID0gcHJlZ19zcGxpdCgnL1ssXS8nLCAkZm9udGZhbWlseSk7CgkJLy8gZmluZCBmaXJzdCB2YWxpZCBmb250IG5hbWUKCQlmb3JlYWNoICgkZm9udHNsaXN0IGFzICRmb250KSB7CgkJCS8vIHJlcGxhY2UgZm9udCB2YXJpYXRpb25zCgkJCSRmb250ID0gcHJlZ19yZXBsYWNlKCcvaXRhbGljJC8nLCAnSScsICRmb250KTsKCQkJJGZvbnQgPSBwcmVnX3JlcGxhY2UoJy9vYmxpcXVlJC8nLCAnSScsICRmb250KTsKCQkJJGZvbnQgPSBwcmVnX3JlcGxhY2UoJy9ib2xkKFtJXT8pJC8nLCAnQlxcMScsICRmb250KTsKCQkJLy8gcmVwbGFjZSBjb21tb24gZmFtaWx5IG5hbWVzIGFuZCBjb3JlIGZvbnRzCgkJCSRwYXR0ZXJuID0gYXJyYXkoKTsKCQkJJHJlcGxhY2VtZW50ID0gYXJyYXkoKTsKCQkJJHBhdHRlcm5bXSA9ICcvXnNlcmlmfF5jdXJzaXZlfF5mYW50YXN5fF50aW1lc25ld3JvbWFuLyc7CgkJCSRyZXBsYWNlbWVudFtdID0gJ3RpbWVzJzsKCQkJJHBhdHRlcm5bXSA9ICcvXnNhbnNzZXJpZi8nOwoJCQkkcmVwbGFjZW1lbnRbXSA9ICdoZWx2ZXRpY2EnOwoJCQkkcGF0dGVybltdID0gJy9ebW9ub3NwYWNlLyc7CgkJCSRyZXBsYWNlbWVudFtdID0gJ2NvdXJpZXInOwoJCQkkZm9udCA9IHByZWdfcmVwbGFjZSgkcGF0dGVybiwgJHJlcGxhY2VtZW50LCAkZm9udCk7CgkJCWlmIChpbl9hcnJheShzdHJ0b2xvd2VyKCRmb250KSwgJHRoaXMtPmZvbnRsaXN0KSBPUiBpbl9hcnJheSgkZm9udCwgJHRoaXMtPmZvbnRrZXlzKSkgewoJCQkJcmV0dXJuICRmb250OwoJCQl9CgkJfQoJCS8vIHJldHVybiBjdXJyZW50IGZvbnQgYXMgZGVmYXVsdAoJCXJldHVybiAkdGhpcy0+Q3VycmVudEZvbnRbJ2ZvbnRrZXknXTsKCX0KCgkvKioKCSAqIFN0YXJ0IGEgbmV3IFhPYmplY3QgVGVtcGxhdGUuCgkgKiBBbiBYT2JqZWN0IFRlbXBsYXRlIGlzIGEgUERGIGJsb2NrIHRoYXQgaXMgYSBzZWxmLWNvbnRhaW5lZCBkZXNjcmlwdGlvbiBvZiBhbnkgc2VxdWVuY2Ugb2YgZ3JhcGhpY3Mgb2JqZWN0cyAoaW5jbHVkaW5nIHBhdGggb2JqZWN0cywgdGV4dCBvYmplY3RzLCBhbmQgc2FtcGxlZCBpbWFnZXMpLgoJICogQW4gWE9iamVjdCBUZW1wbGF0ZSBtYXkgYmUgcGFpbnRlZCBtdWx0aXBsZSB0aW1lcywgZWl0aGVyIG9uIHNldmVyYWwgcGFnZXMgb3IgYXQgc2V2ZXJhbCBsb2NhdGlvbnMgb24gdGhlIHNhbWUgcGFnZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0cyBlYWNoIHRpbWUsIHN1YmplY3Qgb25seSB0byB0aGUgZ3JhcGhpY3Mgc3RhdGUgYXQgdGhlIHRpbWUgaXQgaXMgaW52b2tlZC4KCSAqIE5vdGU6IFgsWSBjb29yZGluYXRlcyB3aWxsIGJlIHJlc2V0IHRvIDAsMC4KCSAqIEBwYXJhbSAkdyAoaW50KSBUZW1wbGF0ZSB3aWR0aCBpbiB1c2VyIHVuaXRzIChlbXB0eSBzdHJpbmcgb3IgemVybyA9IHBhZ2Ugd2lkdGggbGVzcyBtYXJnaW5zKS4KCSAqIEBwYXJhbSAkaCAoaW50KSBUZW1wbGF0ZSBoZWlnaHQgaW4gdXNlciB1bml0cyAoZW1wdHkgc3RyaW5nIG9yIHplcm8gPSBwYWdlIGhlaWdodCBsZXNzIG1hcmdpbnMpLgoJICogQHBhcmFtICRncm91cCAobWl4ZWQpIFNldCB0cmFuc3BhcmVuY3kgZ3JvdXAuIENhbiBiZSBhIGJvb2xlYW4gdmFsdWUgb3IgYW4gYXJyYXkgc3BlY2lmeWluZyBvcHRpb25hbCBwYXJhbWV0ZXJzOiAnQ1MnIChzb2xvdXIgc3BhY2UgbmFtZSksICdJJyAoYm9vbGVhbiBmbGFnIHRvIGluZGljYXRlIGlzb2xhdGVkIGdyb3VwKSBhbmQgJ0snIChib29sZWFuIGZsYWcgdG8gaW5kaWNhdGUga25vY2tvdXQgZ3JvdXApLgoJICogQHJldHVybiBpbnQgdGhlIFhPYmplY3QgVGVtcGxhdGUgSUQgaW4gY2FzZSBvZiBzdWNjZXNzIG9yIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOC4wMTcgKDIwMTAtMDgtMjQpCgkgKiBAc2VlIGVuZFRlbXBsYXRlKCksIHByaW50VGVtcGxhdGUoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc3RhcnRUZW1wbGF0ZSgkdz0wLCAkaD0wLCAkZ3JvdXA9ZmFsc2UpIHsKCQlpZiAoJHRoaXMtPmlueG9iaikgewoJCQkvLyB3ZSBhcmUgYWxyZWFkeSBpbnNpZGUgYW4gWE9iamVjdCB0ZW1wbGF0ZQoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCSR0aGlzLT5pbnhvYmogPSB0cnVlOwoJCSsrJHRoaXMtPm47CgkJLy8gWE9iamVjdCBJRAoJCSR0aGlzLT54b2JqaWQgPSAnWFQnLiR0aGlzLT5uOwoJCS8vIG9iamVjdCBJRAoJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXSA9IGFycmF5KCduJyA9PiAkdGhpcy0+bik7CgkJLy8gc3RvcmUgY3VycmVudCBncmFwaGljIHN0YXRlCgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydndmFycyddID0gJHRoaXMtPmdldEdyYXBoaWNWYXJzKCk7CgkJLy8gaW5pdGlhbGl6ZSBkYXRhCgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydpbnRtcmsnXSA9IDA7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd0cmFuc2ZtcmsnXSA9IGFycmF5KCk7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydvdXRkYXRhJ10gPSAnJzsKCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3hvYmplY3RzJ10gPSBhcnJheSgpOwoJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnaW1hZ2VzJ10gPSBhcnJheSgpOwoJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnZm9udHMnXSA9IGFycmF5KCk7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydhbm5vdGF0aW9ucyddID0gYXJyYXkoKTsKCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ2V4dGdzdGF0ZXMnXSA9IGFycmF5KCk7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydncmFkaWVudHMnXSA9IGFycmF5KCk7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydzcG90X2NvbG9ycyddID0gYXJyYXkoKTsKCQkvLyBzZXQgbmV3IGVudmlyb25tZW50CgkJJHRoaXMtPm51bV9jb2x1bW5zID0gMTsKCQkkdGhpcy0+Y3VycmVudF9jb2x1bW4gPSAwOwoJCSR0aGlzLT5TZXRBdXRvUGFnZUJyZWFrKGZhbHNlKTsKCQlpZiAoKCR3ID09PSAnJykgT1IgKCR3IDw9IDApKSB7CgkJCSR3ID0gJHRoaXMtPncgLSAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luOwoJCX0KCQlpZiAoKCRoID09PSAnJykgT1IgKCRoIDw9IDApKSB7CgkJCSRoID0gJHRoaXMtPmggLSAkdGhpcy0+dE1hcmdpbiAtICR0aGlzLT5iTWFyZ2luOwoJCX0KCQkkdGhpcy0+eG9iamVjdHNbJHRoaXMtPnhvYmppZF1bJ3gnXSA9IDA7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd5J10gPSAwOwoJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsndyddID0gJHc7CgkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWydoJ10gPSAkaDsKCQkkdGhpcy0+dyA9ICR3OwoJCSR0aGlzLT5oID0gJGg7CgkJJHRoaXMtPndQdCA9ICR0aGlzLT53ICogJHRoaXMtPms7CgkJJHRoaXMtPmhQdCA9ICR0aGlzLT5oICogJHRoaXMtPms7CgkJJHRoaXMtPmZ3UHQgPSAkdGhpcy0+d1B0OwoJCSR0aGlzLT5maFB0ID0gJHRoaXMtPmhQdDsKCQkkdGhpcy0+eCA9IDA7CgkJJHRoaXMtPnkgPSAwOwoJCSR0aGlzLT5sTWFyZ2luID0gMDsKCQkkdGhpcy0+ck1hcmdpbiA9IDA7CgkJJHRoaXMtPnRNYXJnaW4gPSAwOwoJCSR0aGlzLT5iTWFyZ2luID0gMDsKCQkvLyBzZXQgZ3JvdXAgbW9kZQoJCSR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnZ3JvdXAnXSA9ICRncm91cDsKCQlyZXR1cm4gJHRoaXMtPnhvYmppZDsKCX0KCgkvKioKCSAqIEVuZCB0aGUgY3VycmVudCBYT2JqZWN0IFRlbXBsYXRlIHN0YXJ0ZWQgd2l0aCBzdGFydFRlbXBsYXRlKCkgYW5kIHJlc3RvcmUgdGhlIHByZXZpb3VzIGdyYXBoaWMgc3RhdGUuCgkgKiBBbiBYT2JqZWN0IFRlbXBsYXRlIGlzIGEgUERGIGJsb2NrIHRoYXQgaXMgYSBzZWxmLWNvbnRhaW5lZCBkZXNjcmlwdGlvbiBvZiBhbnkgc2VxdWVuY2Ugb2YgZ3JhcGhpY3Mgb2JqZWN0cyAoaW5jbHVkaW5nIHBhdGggb2JqZWN0cywgdGV4dCBvYmplY3RzLCBhbmQgc2FtcGxlZCBpbWFnZXMpLgoJICogQW4gWE9iamVjdCBUZW1wbGF0ZSBtYXkgYmUgcGFpbnRlZCBtdWx0aXBsZSB0aW1lcywgZWl0aGVyIG9uIHNldmVyYWwgcGFnZXMgb3IgYXQgc2V2ZXJhbCBsb2NhdGlvbnMgb24gdGhlIHNhbWUgcGFnZSBhbmQgcHJvZHVjZXMgdGhlIHNhbWUgcmVzdWx0cyBlYWNoIHRpbWUsIHN1YmplY3Qgb25seSB0byB0aGUgZ3JhcGhpY3Mgc3RhdGUgYXQgdGhlIHRpbWUgaXQgaXMgaW52b2tlZC4KCSAqIEByZXR1cm4gaW50IHRoZSBYT2JqZWN0IFRlbXBsYXRlIElEIGluIGNhc2Ugb2Ygc3VjY2VzcyBvciBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjguMDE3ICgyMDEwLTA4LTI0KQoJICogQHNlZSBzdGFydFRlbXBsYXRlKCksIHByaW50VGVtcGxhdGUoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gZW5kVGVtcGxhdGUoKSB7CgkJaWYgKCEkdGhpcy0+aW54b2JqKSB7CgkJCS8vIHdlIGFyZSBub3QgaW5zaWRlIGEgdGVtcGxhdGUKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkkdGhpcy0+aW54b2JqID0gZmFsc2U7CgkJLy8gcmVzdG9yZSBwcmV2aW91cyBncmFwaGljIHN0YXRlCgkJJHRoaXMtPnNldEdyYXBoaWNWYXJzKCR0aGlzLT54b2JqZWN0c1skdGhpcy0+eG9iamlkXVsnZ3ZhcnMnXSwgdHJ1ZSk7CgkJcmV0dXJuICR0aGlzLT54b2JqaWQ7Cgl9CgoJLyoqCgkgKiBQcmludCBhbiBYT2JqZWN0IFRlbXBsYXRlLgoJICogWW91IGNhbiBwcmludCBhbiBYT2JqZWN0IFRlbXBsYXRlIGluc2lkZSB0aGUgY3VycmVudGx5IG9wZW5lZCBUZW1wbGF0ZS4KCSAqIEFuIFhPYmplY3QgVGVtcGxhdGUgaXMgYSBQREYgYmxvY2sgdGhhdCBpcyBhIHNlbGYtY29udGFpbmVkIGRlc2NyaXB0aW9uIG9mIGFueSBzZXF1ZW5jZSBvZiBncmFwaGljcyBvYmplY3RzIChpbmNsdWRpbmcgcGF0aCBvYmplY3RzLCB0ZXh0IG9iamVjdHMsIGFuZCBzYW1wbGVkIGltYWdlcykuCgkgKiBBbiBYT2JqZWN0IFRlbXBsYXRlIG1heSBiZSBwYWludGVkIG11bHRpcGxlIHRpbWVzLCBlaXRoZXIgb24gc2V2ZXJhbCBwYWdlcyBvciBhdCBzZXZlcmFsIGxvY2F0aW9ucyBvbiB0aGUgc2FtZSBwYWdlIGFuZCBwcm9kdWNlcyB0aGUgc2FtZSByZXN1bHRzIGVhY2ggdGltZSwgc3ViamVjdCBvbmx5IHRvIHRoZSBncmFwaGljcyBzdGF0ZSBhdCB0aGUgdGltZSBpdCBpcyBpbnZva2VkLgoJICogQHBhcmFtICRpZCAoc3RyaW5nKSBUaGUgSUQgb2YgWE9iamVjdCBUZW1wbGF0ZSB0byBwcmludC4KCSAqIEBwYXJhbSAkeCAoaW50KSBYIHBvc2l0aW9uIGluIHVzZXIgdW5pdHMgKGVtcHR5IHN0cmluZyA9IGN1cnJlbnQgeCBwb3NpdGlvbikKCSAqIEBwYXJhbSAkeSAoaW50KSBZIHBvc2l0aW9uIGluIHVzZXIgdW5pdHMgKGVtcHR5IHN0cmluZyA9IGN1cnJlbnQgeSBwb3NpdGlvbikKCSAqIEBwYXJhbSAkdyAoaW50KSBXaWR0aCBpbiB1c2VyIHVuaXRzICh6ZXJvID0gcmVtYWluaW5nIHBhZ2Ugd2lkdGgpCgkgKiBAcGFyYW0gJGggKGludCkgSGVpZ2h0IGluIHVzZXIgdW5pdHMgKHplcm8gPSByZW1haW5pbmcgcGFnZSBoZWlnaHQpCgkgKiBAcGFyYW0gJGFsaWduIChzdHJpbmcpIEluZGljYXRlcyB0aGUgYWxpZ25tZW50IG9mIHRoZSBwb2ludGVyIG5leHQgdG8gdGVtcGxhdGUgaW5zZXJ0aW9uIHJlbGF0aXZlIHRvIHRlbXBsYXRlIGhlaWdodC4gVGhlIHZhbHVlIGNhbiBiZTo8dWw+PGxpPlQ6IHRvcC1yaWdodCBmb3IgTFRSIG9yIHRvcC1sZWZ0IGZvciBSVEw8L2xpPjxsaT5NOiBtaWRkbGUtcmlnaHQgZm9yIExUUiBvciBtaWRkbGUtbGVmdCBmb3IgUlRMPC9saT48bGk+QjogYm90dG9tLXJpZ2h0IGZvciBMVFIgb3IgYm90dG9tLWxlZnQgZm9yIFJUTDwvbGk+PGxpPk46IG5leHQgbGluZTwvbGk+PC91bD4KCSAqIEBwYXJhbSAkcGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIHRlbXBsYXRlIG9uIHRoZSBjdXJyZW50IGxpbmUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIDogbGVmdCBhbGlnbjwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5SIDogcmlnaHQgYWxpZ248L2xpPjxsaT4nJyA6IGVtcHR5IHN0cmluZyA6IGxlZnQgZm9yIExUUiBvciByaWdodCBmb3IgUlRMPC9saT48L3VsPgoJICogQHBhcmFtICRmaXRvbnBhZ2UgKGJvb2xlYW4pIElmIHRydWUgdGhlIHRlbXBsYXRlIGlzIHJlc2l6ZWQgdG8gbm90IGV4Y2VlZCBwYWdlIGRpbWVuc2lvbnMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOC4wMTcgKDIwMTAtMDgtMjQpCgkgKiBAc2VlIHN0YXJ0VGVtcGxhdGUoKSwgZW5kVGVtcGxhdGUoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gcHJpbnRUZW1wbGF0ZSgkaWQsICR4PScnLCAkeT0nJywgJHc9MCwgJGg9MCwgJGFsaWduPScnLCAkcGFsaWduPScnLCAkZml0b25wYWdlPWZhbHNlKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCWlmICghaXNzZXQoJHRoaXMtPnhvYmplY3RzWyRpZF0pKSB7CgkJCSR0aGlzLT5FcnJvcignVGhlIFhPYmplY3QgVGVtcGxhdGUgXCcnLiRpZC4nXCcgZG9lc25cJ3QgZXhpc3QhJyk7CgkJfQoJCWlmICgkdGhpcy0+aW54b2JqKSB7CgkJCWlmICgkaWQgPT0gJHRoaXMtPnhvYmppZCkgewoJCQkJLy8gY2xvc2UgY3VycmVudCB0ZW1wbGF0ZQoJCQkJJHRoaXMtPmVuZFRlbXBsYXRlKCk7CgkJCX0gZWxzZSB7CgkJCQkvLyB1c2UgdGhlIHRlbXBsYXRlIGFzIHJlc291cmNlIGZvciB0aGUgdGVtcGxhdGUgY3VycmVudGx5IG9wZW5lZAoJCQkJJHRoaXMtPnhvYmplY3RzWyR0aGlzLT54b2JqaWRdWyd4b2JqZWN0cyddWyRpZF0gPSAkdGhpcy0+eG9iamVjdHNbJGlkXTsKCQkJfQoJCX0KCQkvLyBzZXQgZGVmYXVsdCB2YWx1ZXMKCQlpZiAoJHggPT09ICcnKSB7CgkJCSR4ID0gJHRoaXMtPng7CgkJfQoJCWlmICgkeSA9PT0gJycpIHsKCQkJJHkgPSAkdGhpcy0+eTsKCQl9CgkJLy8gY2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeQoJCWxpc3QoJHgsICR5KSA9ICR0aGlzLT5jaGVja1BhZ2VSZWdpb25zKCRoLCAkeCwgJHkpOwoJCSRvdyA9ICR0aGlzLT54b2JqZWN0c1skaWRdWyd3J107CgkJaWYgKCRvdyA8PSAwKSB7CgkJCSRvdyA9IDE7CgkJfQoJCSRvaCA9ICR0aGlzLT54b2JqZWN0c1skaWRdWydoJ107CgkJaWYgKCRvaCA8PSAwKSB7CgkJCSRvaCA9IDE7CgkJfQoJCS8vIGNhbGN1bGF0ZSB0ZW1wbGF0ZSB3aWR0aCBhbmQgaGVpZ2h0IG9uIGRvY3VtZW50CgkJaWYgKCgkdyA8PSAwKSBBTkQgKCRoIDw9IDApKSB7CgkJCSR3ID0gJG93OwoJCQkkaCA9ICRvaDsKCQl9IGVsc2VpZiAoJHcgPD0gMCkgewoJCQkkdyA9ICRoICogJG93IC8gJG9oOwoJCX0gZWxzZWlmICgkaCA8PSAwKSB7CgkJCSRoID0gJHcgKiAkb2ggLyAkb3c7CgkJfQoJCS8vIGZpdCB0aGUgdGVtcGxhdGUgb24gYXZhaWxhYmxlIHNwYWNlCgkJbGlzdCgkdywgJGgsICR4LCAkeSkgPSAkdGhpcy0+Zml0QmxvY2soJHcsICRoLCAkeCwgJHksICRmaXRvbnBhZ2UpOwoJCS8vIHNldCBwYWdlIGFsaWdubWVudAoJCSRyYl95ID0gJHkgKyAkaDsKCQkvLyBzZXQgYWxpZ25tZW50CgkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJaWYgKCRwYWxpZ24gPT0gJ0wnKSB7CgkJCQkkeHQgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ0MnKSB7CgkJCQkkeHQgPSAoJHRoaXMtPncgKyAkdGhpcy0+bE1hcmdpbiAtICR0aGlzLT5yTWFyZ2luIC0gJHcpIC8gMjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ1InKSB7CgkJCQkkeHQgPSAkdGhpcy0+dyAtICR0aGlzLT5yTWFyZ2luIC0gJHc7CgkJCX0gZWxzZSB7CgkJCQkkeHQgPSAkeCAtICR3OwoJCQl9CgkJCSRyYl94ID0gJHh0OwoJCX0gZWxzZSB7CgkJCWlmICgkcGFsaWduID09ICdMJykgewoJCQkJJHh0ID0gJHRoaXMtPmxNYXJnaW47CgkJCX0gZWxzZWlmICgkcGFsaWduID09ICdDJykgewoJCQkJJHh0ID0gKCR0aGlzLT53ICsgJHRoaXMtPmxNYXJnaW4gLSAkdGhpcy0+ck1hcmdpbiAtICR3KSAvIDI7CgkJCX0gZWxzZWlmICgkcGFsaWduID09ICdSJykgewoJCQkJJHh0ID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHh0ID0gJHg7CgkJCX0KCQkJJHJiX3ggPSAkeHQgKyAkdzsKCQl9CgkJLy8gcHJpbnQgWE9iamVjdCBUZW1wbGF0ZSArIFRyYW5zZm9ybWF0aW9uIG1hdHJpeAoJCSR0aGlzLT5TdGFydFRyYW5zZm9ybSgpOwoJCS8vIHRyYW5zbGF0ZSBhbmQgc2NhbGUKCQkkc3ggPSAoJHcgLyAkb3cpOwoJCSRzeSA9ICgkaCAvICRvaCk7CgkJJHRtID0gYXJyYXkoKTsKCQkkdG1bMF0gPSAkc3g7CgkJJHRtWzFdID0gMDsKCQkkdG1bMl0gPSAwOwoJCSR0bVszXSA9ICRzeTsKCQkkdG1bNF0gPSAkeHQgKiAkdGhpcy0+azsKCQkkdG1bNV0gPSAoJHRoaXMtPmggLSAkaCAtICR5KSAqICR0aGlzLT5rOwoJCSR0aGlzLT5UcmFuc2Zvcm0oJHRtKTsKCQkvLyBzZXQgb2JqZWN0CgkJJHRoaXMtPl9vdXQoJy8nLiRpZC4nIERvJyk7CgkJJHRoaXMtPlN0b3BUcmFuc2Zvcm0oKTsKCQkvLyBhZGQgYW5ub3RhdGlvbnMKCQlpZiAoIWVtcHR5KCR0aGlzLT54b2JqZWN0c1skaWRdWydhbm5vdGF0aW9ucyddKSkgewoJCQlmb3JlYWNoICgkdGhpcy0+eG9iamVjdHNbJGlkXVsnYW5ub3RhdGlvbnMnXSBhcyAkYW5ub3QpIHsKCQkJCS8vIHRyYW5zZm9ybSBvcmlnaW5hbCBjb29yZGluYXRlcwoJCQkJJGNvb3JkbHQgPSBUQ1BERl9TVEFUSUM6OmdldFRyYW5zZm9ybWF0aW9uTWF0cml4UHJvZHVjdCgkdG0sIGFycmF5KDEsIDAsIDAsIDEsICgkYW5ub3RbJ3gnXSAqICR0aGlzLT5rKSwgKC0kYW5ub3RbJ3knXSAqICR0aGlzLT5rKSkpOwoJCQkJJGF4ID0gKCRjb29yZGx0WzRdIC8gJHRoaXMtPmspOwoJCQkJJGF5ID0gKCR0aGlzLT5oIC0gJGggLSAoJGNvb3JkbHRbNV0gLyAkdGhpcy0+aykpOwoJCQkJJGNvb3JkcmIgPSBUQ1BERl9TVEFUSUM6OmdldFRyYW5zZm9ybWF0aW9uTWF0cml4UHJvZHVjdCgkdG0sIGFycmF5KDEsIDAsIDAsIDEsICgoJGFubm90Wyd4J10gKyAkYW5ub3RbJ3cnXSkgKiAkdGhpcy0+ayksICgoLSRhbm5vdFsneSddIC0gJGFubm90WydoJ10pICogJHRoaXMtPmspKSk7CgkJCQkkYXcgPSAoJGNvb3JkcmJbNF0gLyAkdGhpcy0+aykgLSAkYXg7CgkJCQkkYWggPSAoJHRoaXMtPmggLSAkaCAtICgkY29vcmRyYls1XSAvICR0aGlzLT5rKSkgLSAkYXk7CgkJCQkkdGhpcy0+QW5ub3RhdGlvbigkYXgsICRheSwgJGF3LCAkYWgsICRhbm5vdFsndGV4dCddLCAkYW5ub3RbJ29wdCddLCAkYW5ub3RbJ3NwYWNlcyddKTsKCQkJfQoJCX0KCQkvLyBzZXQgcG9pbnRlciB0byBhbGlnbiB0aGUgbmV4dCB0ZXh0L29iamVjdHMKCQlzd2l0Y2goJGFsaWduKSB7CgkJCWNhc2UgJ1QnOiB7CgkJCQkkdGhpcy0+eSA9ICR5OwoJCQkJJHRoaXMtPnggPSAkcmJfeDsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ00nOiB7CgkJCQkkdGhpcy0+eSA9ICR5ICsgcm91bmQoJGgvMik7CgkJCQkkdGhpcy0+eCA9ICRyYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQic6IHsKCQkJCSR0aGlzLT55ID0gJHJiX3k7CgkJCQkkdGhpcy0+eCA9ICRyYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTic6IHsKCQkJCSR0aGlzLT5TZXRZKCRyYl95KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6ewoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIHBlcmNlbnRhZ2Ugb2YgY2hhcmFjdGVyIHN0cmV0Y2hpbmcuCgkgKiBAcGFyYW0gJHBlcmMgKGludCkgcGVyY2VudGFnZSBvZiBzdHJldGNoaW5nICgxMDAgPSBubyBzdHJldGNoaW5nKQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTA5LTI5KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Rm9udFN0cmV0Y2hpbmcoJHBlcmM9MTAwKSB7CgkJJHRoaXMtPmZvbnRfc3RyZXRjaGluZyA9ICRwZXJjOwoJfQoKCS8qKgoJICogR2V0IHRoZSBwZXJjZW50YWdlIG9mIGNoYXJhY3RlciBzdHJldGNoaW5nLgoJICogQHJldHVybiBmbG9hdCBzdHJldGNoaW5nIHZhbHVlCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDAgKDIwMTAtMDktMjkpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRGb250U3RyZXRjaGluZygpIHsKCQlyZXR1cm4gJHRoaXMtPmZvbnRfc3RyZXRjaGluZzsKCX0KCgkvKioKCSAqIFNldCB0aGUgYW1vdW50IHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBzcGFjZSBiZXR3ZWVuIGNoYXJhY3RlcnMgaW4gYSB0ZXh0LgoJICogQHBhcmFtICRzcGFjaW5nIChmbG9hdCkgYW1vdW50IHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBzcGFjZSBiZXR3ZWVuIGNoYXJhY3RlcnMgaW4gYSB0ZXh0ICgwID0gZGVmYXVsdCBzcGFjaW5nKQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAwICgyMDEwLTA5LTI5KQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0Rm9udFNwYWNpbmcoJHNwYWNpbmc9MCkgewoJCSR0aGlzLT5mb250X3NwYWNpbmcgPSAkc3BhY2luZzsKCX0KCgkvKioKCSAqIEdldCB0aGUgYW1vdW50IHRvIGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSBzcGFjZSBiZXR3ZWVuIGNoYXJhY3RlcnMgaW4gYSB0ZXh0LgoJICogQHJldHVybiBpbnQgZm9udCBzcGFjaW5nICh0cmFja2luZykgdmFsdWUKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAwMCAoMjAxMC0wOS0yOSkKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEZvbnRTcGFjaW5nKCkgewoJCXJldHVybiAkdGhpcy0+Zm9udF9zcGFjaW5nOwoJfQoKCS8qKgoJICogUmV0dXJuIGFuIGFycmF5IG9mIG5vLXdyaXRlIHBhZ2UgcmVnaW9ucwoJICogQHJldHVybiBhcnJheSBvZiBuby13cml0ZSBwYWdlIHJlZ2lvbnMKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAwMyAoMjAxMC0xMC0xMykKCSAqIEBzZWUgc2V0UGFnZVJlZ2lvbnMoKSwgYWRkUGFnZVJlZ2lvbigpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRQYWdlUmVnaW9ucygpIHsKCQlyZXR1cm4gJHRoaXMtPnBhZ2VfcmVnaW9uczsKCX0KCgkvKioKCSAqIFNldCBuby13cml0ZSByZWdpb25zIG9uIHBhZ2UuCgkgKiBBIG5vLXdyaXRlIHJlZ2lvbiBpcyBhIHBvcnRpb24gb2YgdGhlIHBhZ2Ugd2l0aCBhIHJlY3Rhbmd1bGFyIG9yIHRyYXBleml1bSBzaGFwZSB0aGF0IHdpbGwgbm90IGJlIGNvdmVyZWQgd2hlbiB3cml0aW5nIHRleHQgb3IgaHRtbCBjb2RlLgoJICogQSByZWdpb24gaXMgYWx3YXlzIGFsaWduZWQgb24gdGhlIGxlZnQgb3IgcmlnaHQgc2lkZSBvZiB0aGUgcGFnZSBhZCBpcyBkZWZpbmVkIHVzaW5nIGEgdmVydGljYWwgc2VnbWVudC4KCSAqIFlvdSBjYW4gc2V0IG11bHRpcGxlIHJlZ2lvbnMgZm9yIHRoZSBzYW1lIHBhZ2UuCgkgKiBAcGFyYW0gJHJlZ2lvbnMgKGFycmF5KSBhcnJheSBvZiBuby13cml0ZSByZWdpb25zLiBGb3IgZWFjaCByZWdpb24geW91IGNhbiBkZWZpbmUgYW4gYXJyYXkgYXMgZm9sbG93OiAoJ3BhZ2UnID0+IHBhZ2UgbnVtYmVyIG9yIGVtcHkgZm9yIGN1cnJlbnQgcGFnZSwgJ3h0JyA9PiBYIHRvcCwgJ3l0JyA9PiBZIHRvcCwgJ3hiJyA9PiBYIGJvdHRvbSwgJ3liJyA9PiBZIGJvdHRvbSwgJ3NpZGUnID0+IHBhZ2Ugc2lkZSAnTCcgPSBsZWZ0IG9yICdSJyA9IHJpZ2h0KS4gT21pdCB0aGlzIHBhcmFtZXRlciB0byByZW1vdmUgYWxsIHJlZ2lvbnMuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHB1YmxpYwoJICogQHNpbmNlIDUuOS4wMDMgKDIwMTAtMTAtMTMpCgkgKiBAc2VlIGFkZFBhZ2VSZWdpb24oKSwgZ2V0UGFnZVJlZ2lvbnMoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0UGFnZVJlZ2lvbnMoJHJlZ2lvbnM9YXJyYXkoKSkgewoJCS8vIGVtcHR5IGN1cnJlbnQgcmVnaW9ucyBhcnJheQoJCSR0aGlzLT5wYWdlX3JlZ2lvbnMgPSBhcnJheSgpOwoJCS8vIGFkZCByZWdpb25zCgkJZm9yZWFjaCAoJHJlZ2lvbnMgYXMgJGRhdGEpIHsKCQkJJHRoaXMtPmFkZFBhZ2VSZWdpb24oJGRhdGEpOwoJCX0KCX0KCgkvKioKCSAqIEFkZCBhIHNpbmdsZSBuby13cml0ZSByZWdpb24gb24gc2VsZWN0ZWQgcGFnZS4KCSAqIEEgbm8td3JpdGUgcmVnaW9uIGlzIGEgcG9ydGlvbiBvZiB0aGUgcGFnZSB3aXRoIGEgcmVjdGFuZ3VsYXIgb3IgdHJhcGV6aXVtIHNoYXBlIHRoYXQgd2lsbCBub3QgYmUgY292ZXJlZCB3aGVuIHdyaXRpbmcgdGV4dCBvciBodG1sIGNvZGUuCgkgKiBBIHJlZ2lvbiBpcyBhbHdheXMgYWxpZ25lZCBvbiB0aGUgbGVmdCBvciByaWdodCBzaWRlIG9mIHRoZSBwYWdlIGFkIGlzIGRlZmluZWQgdXNpbmcgYSB2ZXJ0aWNhbCBzZWdtZW50LgoJICogWW91IGNhbiBzZXQgbXVsdGlwbGUgcmVnaW9ucyBmb3IgdGhlIHNhbWUgcGFnZS4KCSAqIEBwYXJhbSAkcmVnaW9uIChhcnJheSkgYXJyYXkgb2YgYSBzaW5nbGUgbm8td3JpdGUgcmVnaW9uIGFycmF5OiAoJ3BhZ2UnID0+IHBhZ2UgbnVtYmVyIG9yIGVtcHkgZm9yIGN1cnJlbnQgcGFnZSwgJ3h0JyA9PiBYIHRvcCwgJ3l0JyA9PiBZIHRvcCwgJ3hiJyA9PiBYIGJvdHRvbSwgJ3liJyA9PiBZIGJvdHRvbSwgJ3NpZGUnID0+IHBhZ2Ugc2lkZSAnTCcgPSBsZWZ0IG9yICdSJyA9IHJpZ2h0KS4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHVibGljCgkgKiBAc2luY2UgNS45LjAwMyAoMjAxMC0xMC0xMykKCSAqIEBzZWUgc2V0UGFnZVJlZ2lvbnMoKSwgZ2V0UGFnZVJlZ2lvbnMoKQoJICovCglwdWJsaWMgZnVuY3Rpb24gYWRkUGFnZVJlZ2lvbigkcmVnaW9uKSB7CgkJaWYgKCFpc3NldCgkcmVnaW9uWydwYWdlJ10pIE9SIGVtcHR5KCRyZWdpb25bJ3BhZ2UnXSkpIHsKCQkJJHJlZ2lvblsncGFnZSddID0gJHRoaXMtPnBhZ2U7CgkJfQoJCWlmIChpc3NldCgkcmVnaW9uWyd4dCddKSBBTkQgaXNzZXQoJHJlZ2lvblsneGInXSkgQU5EICgkcmVnaW9uWyd4dCddID4gMCkgQU5EICgkcmVnaW9uWyd4YiddID4gMCkKCQkJQU5EIGlzc2V0KCRyZWdpb25bJ3l0J10pICBBTkQgaXNzZXQoJHJlZ2lvblsneWInXSkgQU5EICgkcmVnaW9uWyd5dCddID49IDApIEFORCAoJHJlZ2lvblsneXQnXSA8ICRyZWdpb25bJ3liJ10pCgkJCUFORCBpc3NldCgkcmVnaW9uWydzaWRlJ10pIEFORCAoKCRyZWdpb25bJ3NpZGUnXSA9PSAnTCcpIE9SICgkcmVnaW9uWydzaWRlJ10gPT0gJ1InKSkpIHsKCQkJJHRoaXMtPnBhZ2VfcmVnaW9uc1tdID0gJHJlZ2lvbjsKCQl9Cgl9CgoJLyoqCgkgKiBSZW1vdmUgYSBzaW5nbGUgbm8td3JpdGUgcmVnaW9uLgoJICogQHBhcmFtICRrZXkgKGludCkgcmVnaW9uIGtleQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSA1LjkuMDAzICgyMDEwLTEwLTEzKQoJICogQHNlZSBzZXRQYWdlUmVnaW9ucygpLCBnZXRQYWdlUmVnaW9ucygpCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiByZW1vdmVQYWdlUmVnaW9uKCRrZXkpIHsKCQlpZiAoaXNzZXQoJHRoaXMtPnBhZ2VfcmVnaW9uc1ska2V5XSkpIHsKCQkJdW5zZXQoJHRoaXMtPnBhZ2VfcmVnaW9uc1ska2V5XSk7CgkJfQoJfQoKCS8qKgoJICogQ2hlY2sgcGFnZSBmb3Igbm8td3JpdGUgcmVnaW9ucyBhbmQgYWRhcHQgY3VycmVudCBjb29yZGluYXRlcyBhbmQgcGFnZSBtYXJnaW5zIGlmIG5lY2Vzc2FyeS4KCSAqIEEgbm8td3JpdGUgcmVnaW9uIGlzIGEgcG9ydGlvbiBvZiB0aGUgcGFnZSB3aXRoIGEgcmVjdGFuZ3VsYXIgb3IgdHJhcGV6aXVtIHNoYXBlIHRoYXQgd2lsbCBub3QgYmUgY292ZXJlZCB3aGVuIHdyaXRpbmcgdGV4dCBvciBodG1sIGNvZGUuCgkgKiBBIHJlZ2lvbiBpcyBhbHdheXMgYWxpZ25lZCBvbiB0aGUgbGVmdCBvciByaWdodCBzaWRlIG9mIHRoZSBwYWdlIGFkIGlzIGRlZmluZWQgdXNpbmcgYSB2ZXJ0aWNhbCBzZWdtZW50LgoJICogQHBhcmFtICRoIChmbG9hdCkgaGVpZ2h0IG9mIHRoZSB0ZXh0L2ltYWdlL29iamVjdCB0byBwcmludCBpbiB1c2VyIHVuaXRzCgkgKiBAcGFyYW0gJHggKGZsb2F0KSBjdXJyZW50IFggY29vcmRpbmF0ZSBpbiB1c2VyIHVuaXRzCgkgKiBAcGFyYW0gJHkgKGZsb2F0KSBjdXJyZW50IFkgY29vcmRpbmF0ZSBpbiB1c2VyIHVuaXRzCgkgKiBAcmV0dXJuIGFycmF5KCR4LCAkeSkKCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS45LjAwMyAoMjAxMC0xMC0xMykKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrUGFnZVJlZ2lvbnMoJGgsICR4LCAkeSkgewoJCS8vIHNldCBkZWZhdWx0IHZhbHVlcwoJCWlmICgkeCA9PT0gJycpIHsKCQkJJHggPSAkdGhpcy0+eDsKCQl9CgkJaWYgKCR5ID09PSAnJykgewoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQlpZiAoISR0aGlzLT5jaGVja19wYWdlX3JlZ2lvbnMgT1IgZW1wdHkoJHRoaXMtPnBhZ2VfcmVnaW9ucykpIHsKCQkJLy8gbm8gcGFnZSByZWdpb25zIGRlZmluZWQKCQkJcmV0dXJuIGFycmF5KCR4LCAkeSk7CgkJfQoJCWlmIChlbXB0eSgkaCkpIHsKCQkJJGggPSAkdGhpcy0+Z2V0Q2VsbEhlaWdodCgkdGhpcy0+Rm9udFNpemUpOwoJCX0KCQkvLyBjaGVjayBmb3IgcGFnZSBicmVhawoJCWlmICgkdGhpcy0+Y2hlY2tQYWdlQnJlYWsoJGgsICR5KSkgewoJCQkvLyB0aGUgY29udGVudCB3aWxsIGJlIHByaW50ZWQgb24gYSBuZXcgcGFnZQoJCQkkeCA9ICR0aGlzLT54OwoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQlpZiAoJHRoaXMtPm51bV9jb2x1bW5zID4gMSkgewoJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJJHRoaXMtPmxNYXJnaW4gPSAoJHRoaXMtPmNvbHVtbnNbJHRoaXMtPmN1cnJlbnRfY29sdW1uXVsneCddIC0gJHRoaXMtPmNvbHVtbnNbJHRoaXMtPmN1cnJlbnRfY29sdW1uXVsndyddKTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5yTWFyZ2luID0gKCR0aGlzLT53IC0gJHRoaXMtPmNvbHVtbnNbJHRoaXMtPmN1cnJlbnRfY29sdW1uXVsneCddIC0gJHRoaXMtPmNvbHVtbnNbJHRoaXMtPmN1cnJlbnRfY29sdW1uXVsndyddKTsKCQkJfQoJCX0gZWxzZSB7CgkJCWlmICgkdGhpcy0+cnRsKSB7CgkJCQkkdGhpcy0+bE1hcmdpbiA9IG1heCgkdGhpcy0+Y2xNYXJnaW4sICR0aGlzLT5vcmlnaW5hbF9sTWFyZ2luKTsKCQkJfSBlbHNlIHsKCQkJCSR0aGlzLT5yTWFyZ2luID0gbWF4KCR0aGlzLT5jck1hcmdpbiwgJHRoaXMtPm9yaWdpbmFsX3JNYXJnaW4pOwoJCQl9CgkJfQoJCS8vIGFkanVzdCBjb29yZGluYXRlcyBhbmQgcGFnZSBtYXJnaW5zCgkJZm9yZWFjaCAoJHRoaXMtPnBhZ2VfcmVnaW9ucyBhcyAkcmVnaWQgPT4gJHJlZ2RhdGEpIHsKCQkJaWYgKCRyZWdkYXRhWydwYWdlJ10gPT0gJHRoaXMtPnBhZ2UpIHsKCQkJCS8vIGNoZWNrIHJlZ2lvbiBib3VuZGFyaWVzCgkJCQlpZiAoKCR5ID4gKCRyZWdkYXRhWyd5dCddIC0gJGgpKSBBTkQgKCR5IDw9ICRyZWdkYXRhWyd5YiddKSkgewoJCQkJCS8vIFkgaXMgaW5zaWRlIHRoZSByZWdpb24KCQkJCQkkbWludiA9ICgkcmVnZGF0YVsneGInXSAtICRyZWdkYXRhWyd4dCddKSAvICgkcmVnZGF0YVsneWInXSAtICRyZWdkYXRhWyd5dCddKTsgLy8gaW52ZXJzZSBvZiBhbmd1bGFyIGNvZWZmaWNpZW50CgkJCQkJJHl0ID0gbWF4KCR5LCAkcmVnZGF0YVsneXQnXSk7CgkJCQkJJHliID0gbWluKCgkeXQgKyAkaCksICRyZWdkYXRhWyd5YiddKTsKCQkJCQkkeHQgPSAoKCR5dCAtICRyZWdkYXRhWyd5dCddKSAqICRtaW52KSArICRyZWdkYXRhWyd4dCddOwoJCQkJCSR4YiA9ICgoJHliIC0gJHJlZ2RhdGFbJ3l0J10pICogJG1pbnYpICsgJHJlZ2RhdGFbJ3h0J107CgkJCQkJaWYgKCRyZWdkYXRhWydzaWRlJ10gPT0gJ0wnKSB7IC8vIGxlZnQgc2lkZQoJCQkJCQkkbmV3X21hcmdpbiA9IG1heCgkeHQsICR4Yik7CgkJCQkJCWlmICgkdGhpcy0+bE1hcmdpbiA8ICRuZXdfbWFyZ2luKSB7CgkJCQkJCQlpZiAoJHRoaXMtPnJ0bCkgewoJCQkJCQkJCS8vIGFkanVzdCBsZWZ0IHBhZ2UgbWFyZ2luCgkJCQkJCQkJJHRoaXMtPmxNYXJnaW4gPSBtYXgoMCwgJG5ld19tYXJnaW4pOwoJCQkJCQkJfQoJCQkJCQkJaWYgKCR4IDwgJG5ld19tYXJnaW4pIHsKCQkJCQkJCQkvLyBhZGp1c3QgeCBwb3NpdGlvbgoJCQkJCQkJCSR4ID0gJG5ld19tYXJnaW47CgkJCQkJCQkJaWYgKCRuZXdfbWFyZ2luID4gKCR0aGlzLT53IC0gJHRoaXMtPnJNYXJnaW4pKSB7CgkJCQkJCQkJCS8vIGFkanVzdCB5IHBvc2l0aW9uCgkJCQkJCQkJCSR5ID0gJHJlZ2RhdGFbJ3liJ10gLSAkaDsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9IGVsc2VpZiAoJHJlZ2RhdGFbJ3NpZGUnXSA9PSAnUicpIHsgLy8gcmlnaHQgc2lkZQoJCQkJCQkkbmV3X21hcmdpbiA9IG1pbigkeHQsICR4Yik7CgkJCQkJCWlmICgoJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbikgPiAkbmV3X21hcmdpbikgewoJCQkJCQkJaWYgKCEkdGhpcy0+cnRsKSB7CgkJCQkJCQkJLy8gYWRqdXN0IHJpZ2h0IHBhZ2UgbWFyZ2luCgkJCQkJCQkJJHRoaXMtPnJNYXJnaW4gPSBtYXgoMCwgKCR0aGlzLT53IC0gJG5ld19tYXJnaW4pKTsKCQkJCQkJCX0KCQkJCQkJCWlmICgkeCA+ICRuZXdfbWFyZ2luKSB7CgkJCQkJCQkJLy8gYWRqdXN0IHggcG9zaXRpb24KCQkJCQkJCQkkeCA9ICRuZXdfbWFyZ2luOwoJCQkJCQkJCWlmICgkbmV3X21hcmdpbiA+ICR0aGlzLT5sTWFyZ2luKSB7CgkJCQkJCQkJCS8vIGFkanVzdCB5IHBvc2l0aW9uCgkJCQkJCQkJCSR5ID0gJHJlZ2RhdGFbJ3liJ10gLSAkaDsKCQkJCQkJCQl9CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJcmV0dXJuIGFycmF5KCR4LCAkeSk7Cgl9CgoJLy8gLS0tIFNWRyBNRVRIT0RTIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKCS8qKgoJICogRW1iZWRkIGEgU2NhbGFibGUgVmVjdG9yIEdyYXBoaWNzIChTVkcpIGltYWdlLgoJICogTk9URTogU1ZHIHN0YW5kYXJkIGlzIG5vdCB5ZXQgZnVsbHkgaW1wbGVtZW50ZWQsIHVzZSB0aGUgc2V0UmFzdGVyaXplVmVjdG9ySW1hZ2VzKCkgbWV0aG9kIHRvIGVuYWJsZS9kaXNhYmxlIHJhc3Rlcml6YXRpb24gb2YgdmVjdG9yIGltYWdlcyB1c2luZyBJbWFnZU1hZ2ljayBsaWJyYXJ5LgoJICogQHBhcmFtICRmaWxlIChzdHJpbmcpIE5hbWUgb2YgdGhlIFNWRyBmaWxlIG9yIGEgJ0AnIGNoYXJhY3RlciBmb2xsb3dlZCBieSB0aGUgU1ZHIGRhdGEgc3RyaW5nLgoJICogQHBhcmFtICR4IChmbG9hdCkgQWJzY2lzc2Egb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR5IChmbG9hdCkgT3JkaW5hdGUgb2YgdGhlIHVwcGVyLWxlZnQgY29ybmVyLgoJICogQHBhcmFtICR3IChmbG9hdCkgV2lkdGggb2YgdGhlIGltYWdlIGluIHRoZSBwYWdlLiBJZiBub3Qgc3BlY2lmaWVkIG9yIGVxdWFsIHRvIHplcm8sIGl0IGlzIGF1dG9tYXRpY2FsbHkgY2FsY3VsYXRlZC4KCSAqIEBwYXJhbSAkaCAoZmxvYXQpIEhlaWdodCBvZiB0aGUgaW1hZ2UgaW4gdGhlIHBhZ2UuIElmIG5vdCBzcGVjaWZpZWQgb3IgZXF1YWwgdG8gemVybywgaXQgaXMgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkLgoJICogQHBhcmFtICRsaW5rIChtaXhlZCkgVVJMIG9yIGlkZW50aWZpZXIgcmV0dXJuZWQgYnkgQWRkTGluaygpLgoJICogQHBhcmFtICRhbGlnbiAoc3RyaW5nKSBJbmRpY2F0ZXMgdGhlIGFsaWdubWVudCBvZiB0aGUgcG9pbnRlciBuZXh0IHRvIGltYWdlIGluc2VydGlvbiByZWxhdGl2ZSB0byBpbWFnZSBoZWlnaHQuIFRoZSB2YWx1ZSBjYW4gYmU6PHVsPjxsaT5UOiB0b3AtcmlnaHQgZm9yIExUUiBvciB0b3AtbGVmdCBmb3IgUlRMPC9saT48bGk+TTogbWlkZGxlLXJpZ2h0IGZvciBMVFIgb3IgbWlkZGxlLWxlZnQgZm9yIFJUTDwvbGk+PGxpPkI6IGJvdHRvbS1yaWdodCBmb3IgTFRSIG9yIGJvdHRvbS1sZWZ0IGZvciBSVEw8L2xpPjxsaT5OOiBuZXh0IGxpbmU8L2xpPjwvdWw+IElmIHRoZSBhbGlnbm1lbnQgaXMgYW4gZW1wdHkgc3RyaW5nLCB0aGVuIHRoZSBwb2ludGVyIHdpbGwgYmUgcmVzdG9yZWQgb24gdGhlIHN0YXJ0aW5nIFNWRyBwb3NpdGlvbi4KCSAqIEBwYXJhbSAkcGFsaWduIChzdHJpbmcpIEFsbG93cyB0byBjZW50ZXIgb3IgYWxpZ24gdGhlIGltYWdlIG9uIHRoZSBjdXJyZW50IGxpbmUuIFBvc3NpYmxlIHZhbHVlcyBhcmU6PHVsPjxsaT5MIDogbGVmdCBhbGlnbjwvbGk+PGxpPkMgOiBjZW50ZXI8L2xpPjxsaT5SIDogcmlnaHQgYWxpZ248L2xpPjxsaT4nJyA6IGVtcHR5IHN0cmluZyA6IGxlZnQgZm9yIExUUiBvciByaWdodCBmb3IgUlRMPC9saT48L3VsPgoJICogQHBhcmFtICRib3JkZXIgKG1peGVkKSBJbmRpY2F0ZXMgaWYgYm9yZGVycyBtdXN0IGJlIGRyYXduIGFyb3VuZCB0aGUgY2VsbC4gVGhlIHZhbHVlIGNhbiBiZSBhIG51bWJlcjo8dWw+PGxpPjA6IG5vIGJvcmRlciAoZGVmYXVsdCk8L2xpPjxsaT4xOiBmcmFtZTwvbGk+PC91bD4gb3IgYSBzdHJpbmcgY29udGFpbmluZyBzb21lIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNoYXJhY3RlcnMgKGluIGFueSBvcmRlcik6PHVsPjxsaT5MOiBsZWZ0PC9saT48bGk+VDogdG9wPC9saT48bGk+UjogcmlnaHQ8L2xpPjxsaT5COiBib3R0b208L2xpPjwvdWw+IG9yIGFuIGFycmF5IG9mIGxpbmUgc3R5bGVzIGZvciBlYWNoIGJvcmRlciBncm91cCAtIGZvciBleGFtcGxlOiBhcnJheSgnTFRSQicgPT4gYXJyYXkoJ3dpZHRoJyA9PiAyLCAnY2FwJyA9PiAnYnV0dCcsICdqb2luJyA9PiAnbWl0ZXInLCAnZGFzaCcgPT4gMCwgJ2NvbG9yJyA9PiBhcnJheSgwLCAwLCAwKSkpCgkgKiBAcGFyYW0gJGZpdG9ucGFnZSAoYm9vbGVhbikgaWYgdHJ1ZSB0aGUgaW1hZ2UgaXMgcmVzaXplZCB0byBub3QgZXhjZWVkIHBhZ2UgZGltZW5zaW9ucy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEltYWdlU1ZHKCRmaWxlLCAkeD0nJywgJHk9JycsICR3PTAsICRoPTAsICRsaW5rPScnLCAkYWxpZ249JycsICRwYWxpZ249JycsICRib3JkZXI9MCwgJGZpdG9ucGFnZT1mYWxzZSkgewoJCWlmICgkdGhpcy0+c3RhdGUgIT0gMikgewoJCQkgcmV0dXJuOwoJCX0KCQkvLyByZXNlZXQgU1ZHIHZhcnMKCQkkdGhpcy0+c3ZnZ3JhZGllbnRzID0gYXJyYXkoKTsKCQkkdGhpcy0+c3ZnZ3JhZGllbnRpZCA9IDA7CgkJJHRoaXMtPnN2Z2RlZnNtb2RlID0gZmFsc2U7CgkJJHRoaXMtPnN2Z2RlZnMgPSBhcnJheSgpOwoJCSR0aGlzLT5zdmdjbGlwbW9kZSA9IGZhbHNlOwoJCSR0aGlzLT5zdmdjbGlwcGF0aHMgPSBhcnJheSgpOwoJCSR0aGlzLT5zdmdjbGlwdG0gPSBhcnJheSgpOwoJCSR0aGlzLT5zdmdjbGlwaWQgPSAwOwoJCSR0aGlzLT5zdmd0ZXh0ID0gJyc7CgkJJHRoaXMtPnN2Z3RleHRtb2RlID0gYXJyYXkoKTsKCQlpZiAoJHRoaXMtPnJhc3Rlcml6ZV92ZWN0b3JfaW1hZ2VzIEFORCAoJHcgPiAwKSBBTkQgKCRoID4gMCkpIHsKCQkJLy8gY29udmVydCBTVkcgdG8gcmFzdGVyIGltYWdlIHVzaW5nIEdEIG9yIEltYWdlTWFnaWNrIGxpYnJhcmllcwoJCQlyZXR1cm4gJHRoaXMtPkltYWdlKCRmaWxlLCAkeCwgJHksICR3LCAkaCwgJ1NWRycsICRsaW5rLCAkYWxpZ24sIHRydWUsIDMwMCwgJHBhbGlnbiwgZmFsc2UsIGZhbHNlLCAkYm9yZGVyLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCQl9CgkJaWYgKCRmaWxlWzBdID09PSAnQCcpIHsgLy8gaW1hZ2UgZnJvbSBzdHJpbmcKCQkJJHRoaXMtPnN2Z2RpciA9ICcnOwoJCQkkc3ZnZGF0YSA9IHN1YnN0cigkZmlsZSwgMSk7CgkJfSBlbHNlIHsgLy8gU1ZHIGZpbGUKCQkJJHRoaXMtPnN2Z2RpciA9IGRpcm5hbWUoJGZpbGUpOwoJCQkkc3ZnZGF0YSA9IFRDUERGX1NUQVRJQzo6ZmlsZUdldENvbnRlbnRzKCRmaWxlKTsKCQl9CgkJaWYgKCRzdmdkYXRhID09PSBGQUxTRSkgewoJCQkkdGhpcy0+RXJyb3IoJ1NWRyBmaWxlIG5vdCBmb3VuZDogJy4kZmlsZSk7CgkJfQoJCWlmICgkeCA9PT0gJycpIHsKCQkJJHggPSAkdGhpcy0+eDsKCQl9CgkJaWYgKCR5ID09PSAnJykgewoJCQkkeSA9ICR0aGlzLT55OwoJCX0KCQkvLyBjaGVjayBwYWdlIGZvciBuby13cml0ZSByZWdpb25zIGFuZCBhZGFwdCBwYWdlIG1hcmdpbnMgaWYgbmVjZXNzYXJ5CgkJbGlzdCgkeCwgJHkpID0gJHRoaXMtPmNoZWNrUGFnZVJlZ2lvbnMoJGgsICR4LCAkeSk7CgkJJGsgPSAkdGhpcy0+azsKCQkkb3ggPSAwOwoJCSRveSA9IDA7CgkJJG93ID0gJHc7CgkJJG9oID0gJGg7CgkJJGFzcGVjdF9yYXRpb19hbGlnbiA9ICd4TWlkWU1pZCc7CgkJJGFzcGVjdF9yYXRpb19tcyA9ICdtZWV0JzsKCQkkcmVncyA9IGFycmF5KCk7CgkJLy8gZ2V0IG9yaWdpbmFsIGltYWdlIHdpZHRoIGFuZCBoZWlnaHQKCQlwcmVnX21hdGNoKCcvPHN2ZyhbXlw+XSopPi9zaScsICRzdmdkYXRhLCAkcmVncyk7CgkJaWYgKGlzc2V0KCRyZWdzWzFdKSBBTkQgIWVtcHR5KCRyZWdzWzFdKSkgewoJCQkkdG1wID0gYXJyYXkoKTsKCQkJaWYgKHByZWdfbWF0Y2goJy9bXHNdK3hbXHNdKj1bXHNdKiIoW14iXSopIi9zaScsICRyZWdzWzFdLCAkdG1wKSkgewoJCQkJJG94ID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkdG1wWzFdLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQl9CgkJCSR0bXAgPSBhcnJheSgpOwoJCQlpZiAocHJlZ19tYXRjaCgnL1tcc10reVtcc10qPVtcc10qIihbXiJdKikiL3NpJywgJHJlZ3NbMV0sICR0bXApKSB7CgkJCQkkb3kgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0bXBbMV0sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCX0KCQkJJHRtcCA9IGFycmF5KCk7CgkJCWlmIChwcmVnX21hdGNoKCcvW1xzXSt3aWR0aFtcc10qPVtcc10qIihbXiJdKikiL3NpJywgJHJlZ3NbMV0sICR0bXApKSB7CgkJCQkkb3cgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0bXBbMV0sIDEsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCX0KCQkJJHRtcCA9IGFycmF5KCk7CgkJCWlmIChwcmVnX21hdGNoKCcvW1xzXStoZWlnaHRbXHNdKj1bXHNdKiIoW14iXSopIi9zaScsICRyZWdzWzFdLCAkdG1wKSkgewoJCQkJJG9oID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkdG1wWzFdLCAxLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQl9CgkJCSR0bXAgPSBhcnJheSgpOwoJCQkkdmlld19ib3ggPSBhcnJheSgpOwoJCQlpZiAocHJlZ19tYXRjaCgnL1tcc10rdmlld0JveFtcc10qPVtcc10qIltcc10qKFswLTlcLlwtXSspW1xzXSsoWzAtOVwuXC1dKylbXHNdKyhbMC05XC5dKylbXHNdKyhbMC05XC5dKylbXHNdKiIvc2knLCAkcmVnc1sxXSwgJHRtcCkpIHsKCQkJCWlmIChjb3VudCgkdG1wKSA9PSA1KSB7CgkJCQkJYXJyYXlfc2hpZnQoJHRtcCk7CgkJCQkJZm9yZWFjaCAoJHRtcCBhcyAka2V5ID0+ICR2YWwpIHsKCQkJCQkJJHZpZXdfYm94WyRrZXldID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkdmFsLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQkJCX0KCQkJCQkkb3ggPSAkdmlld19ib3hbMF07CgkJCQkJJG95ID0gJHZpZXdfYm94WzFdOwoJCQkJfQoJCQkJLy8gZ2V0IGFzcGVjdCByYXRpbwoJCQkJJHRtcCA9IGFycmF5KCk7CgkJCQlpZiAocHJlZ19tYXRjaCgnL1tcc10rcHJlc2VydmVBc3BlY3RSYXRpb1tcc10qPVtcc10qIihbXiJdKikiL3NpJywgJHJlZ3NbMV0sICR0bXApKSB7CgkJCQkJJGFzcGVjdF9yYXRpbyA9IHByZWdfc3BsaXQoJy9bXHNdKy9zaScsICR0bXBbMV0pOwoJCQkJCXN3aXRjaCAoY291bnQoJGFzcGVjdF9yYXRpbykpIHsKCQkJCQkJY2FzZSAzOiB7CgkJCQkJCQkkYXNwZWN0X3JhdGlvX2FsaWduID0gJGFzcGVjdF9yYXRpb1sxXTsKCQkJCQkJCSRhc3BlY3RfcmF0aW9fbXMgPSAkYXNwZWN0X3JhdGlvWzJdOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAyOiB7CgkJCQkJCQkkYXNwZWN0X3JhdGlvX2FsaWduID0gJGFzcGVjdF9yYXRpb1swXTsKCQkJCQkJCSRhc3BlY3RfcmF0aW9fbXMgPSAkYXNwZWN0X3JhdGlvWzFdOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAxOiB7CgkJCQkJCQkkYXNwZWN0X3JhdGlvX2FsaWduID0gJGFzcGVjdF9yYXRpb1swXTsKCQkJCQkJCSRhc3BlY3RfcmF0aW9fbXMgPSAnbWVldCc7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlpZiAoJG93IDw9IDApIHsKCQkJJG93ID0gMTsKCQl9CgkJaWYgKCRvaCA8PSAwKSB7CgkJCSRvaCA9IDE7CgkJfQoJCS8vIGNhbGN1bGF0ZSBpbWFnZSB3aWR0aCBhbmQgaGVpZ2h0IG9uIGRvY3VtZW50CgkJaWYgKCgkdyA8PSAwKSBBTkQgKCRoIDw9IDApKSB7CgkJCS8vIGNvbnZlcnQgaW1hZ2Ugc2l6ZSB0byBkb2N1bWVudCB1bml0CgkJCSR3ID0gJG93OwoJCQkkaCA9ICRvaDsKCQl9IGVsc2VpZiAoJHcgPD0gMCkgewoJCQkkdyA9ICRoICogJG93IC8gJG9oOwoJCX0gZWxzZWlmICgkaCA8PSAwKSB7CgkJCSRoID0gJHcgKiAkb2ggLyAkb3c7CgkJfQoJCS8vIGZpdCB0aGUgaW1hZ2Ugb24gYXZhaWxhYmxlIHNwYWNlCgkJbGlzdCgkdywgJGgsICR4LCAkeSkgPSAkdGhpcy0+Zml0QmxvY2soJHcsICRoLCAkeCwgJHksICRmaXRvbnBhZ2UpOwoJCWlmICgkdGhpcy0+cmFzdGVyaXplX3ZlY3Rvcl9pbWFnZXMpIHsKCQkJLy8gY29udmVydCBTVkcgdG8gcmFzdGVyIGltYWdlIHVzaW5nIEdEIG9yIEltYWdlTWFnaWNrIGxpYnJhcmllcwoJCQlyZXR1cm4gJHRoaXMtPkltYWdlKCRmaWxlLCAkeCwgJHksICR3LCAkaCwgJ1NWRycsICRsaW5rLCAkYWxpZ24sIHRydWUsIDMwMCwgJHBhbGlnbiwgZmFsc2UsIGZhbHNlLCAkYm9yZGVyLCBmYWxzZSwgZmFsc2UsIGZhbHNlKTsKCQl9CgkJLy8gc2V0IGFsaWdubWVudAoJCSR0aGlzLT5pbWdfcmJfeSA9ICR5ICsgJGg7CgkJLy8gc2V0IGFsaWdubWVudAoJCWlmICgkdGhpcy0+cnRsKSB7CgkJCWlmICgkcGFsaWduID09ICdMJykgewoJCQkJJHhpbWcgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ0MnKSB7CgkJCQkkeGltZyA9ICgkdGhpcy0+dyArICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW4gLSAkdykgLyAyOwoJCQl9IGVsc2VpZiAoJHBhbGlnbiA9PSAnUicpIHsKCQkJCSR4aW1nID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhpbWcgPSAkeCAtICR3OwoJCQl9CgkJCSR0aGlzLT5pbWdfcmJfeCA9ICR4aW1nOwoJCX0gZWxzZSB7CgkJCWlmICgkcGFsaWduID09ICdMJykgewoJCQkJJHhpbWcgPSAkdGhpcy0+bE1hcmdpbjsKCQkJfSBlbHNlaWYgKCRwYWxpZ24gPT0gJ0MnKSB7CgkJCQkkeGltZyA9ICgkdGhpcy0+dyArICR0aGlzLT5sTWFyZ2luIC0gJHRoaXMtPnJNYXJnaW4gLSAkdykgLyAyOwoJCQl9IGVsc2VpZiAoJHBhbGlnbiA9PSAnUicpIHsKCQkJCSR4aW1nID0gJHRoaXMtPncgLSAkdGhpcy0+ck1hcmdpbiAtICR3OwoJCQl9IGVsc2UgewoJCQkJJHhpbWcgPSAkeDsKCQkJfQoJCQkkdGhpcy0+aW1nX3JiX3ggPSAkeGltZyArICR3OwoJCX0KCQkvLyBzdG9yZSBjdXJyZW50IGdyYXBoaWMgdmFycwoJCSRndmFycyA9ICR0aGlzLT5nZXRHcmFwaGljVmFycygpOwoJCS8vIHN0b3JlIFNWRyBwb3NpdGlvbiBhbmQgc2NhbGUgZmFjdG9ycwoJCSRzdmdvZmZzZXRfeCA9ICgkeGltZyAtICRveCkgKiAkdGhpcy0+azsKCQkkc3Znb2Zmc2V0X3kgPSAtKCR5IC0gJG95KSAqICR0aGlzLT5rOwoJCWlmIChpc3NldCgkdmlld19ib3hbMl0pIEFORCAoJHZpZXdfYm94WzJdID4gMCkgQU5EICgkdmlld19ib3hbM10gPiAwKSkgewoJCQkkb3cgPSAkdmlld19ib3hbMl07CgkJCSRvaCA9ICR2aWV3X2JveFszXTsKCQl9IGVsc2UgewoJCQlpZiAoJG93IDw9IDApIHsKCQkJCSRvdyA9ICR3OwoJCQl9CgkJCWlmICgkb2ggPD0gMCkgewoJCQkJJG9oID0gJGg7CgkJCX0KCQl9CgkJJHN2Z3NjYWxlX3ggPSAkdyAvICRvdzsKCQkkc3Znc2NhbGVfeSA9ICRoIC8gJG9oOwoJCS8vIHNjYWxpbmcgYW5kIGFsaWdubWVudAoJCWlmICgkYXNwZWN0X3JhdGlvX2FsaWduICE9ICdub25lJykgewoJCQkvLyBzdG9yZSBjdXJyZW50IHNjYWxpbmcgdmFsdWVzCgkJCSRzdmdzY2FsZV9vbGRfeCA9ICRzdmdzY2FsZV94OwoJCQkkc3Znc2NhbGVfb2xkX3kgPSAkc3Znc2NhbGVfeTsKCQkJLy8gZm9yY2UgdW5pZm9ybSBzY2FsaW5nCgkJCWlmICgkYXNwZWN0X3JhdGlvX21zID09ICdzbGljZScpIHsKCQkJCS8vIHRoZSBlbnRpcmUgdmlld3BvcnQgaXMgY292ZXJlZCBieSB0aGUgdmlld0JveAoJCQkJaWYgKCRzdmdzY2FsZV94ID4gJHN2Z3NjYWxlX3kpIHsKCQkJCQkkc3Znc2NhbGVfeSA9ICRzdmdzY2FsZV94OwoJCQkJfSBlbHNlaWYgKCRzdmdzY2FsZV94IDwgJHN2Z3NjYWxlX3kpIHsKCQkJCQkkc3Znc2NhbGVfeCA9ICRzdmdzY2FsZV95OwoJCQkJfQoJCQl9IGVsc2UgeyAvLyBtZWV0CgkJCQkvLyB0aGUgZW50aXJlIHZpZXdCb3ggaXMgdmlzaWJsZSB3aXRoaW4gdGhlIHZpZXdwb3J0CgkJCQlpZiAoJHN2Z3NjYWxlX3ggPCAkc3Znc2NhbGVfeSkgewoJCQkJCSRzdmdzY2FsZV95ID0gJHN2Z3NjYWxlX3g7CgkJCQl9IGVsc2VpZiAoJHN2Z3NjYWxlX3ggPiAkc3Znc2NhbGVfeSkgewoJCQkJCSRzdmdzY2FsZV94ID0gJHN2Z3NjYWxlX3k7CgkJCQl9CgkJCX0KCQkJLy8gY29ycmVjdCBYIGFsaWdubWVudAoJCQlzd2l0Y2ggKHN1YnN0cigkYXNwZWN0X3JhdGlvX2FsaWduLCAxLCAzKSkgewoJCQkJY2FzZSAnTWluJzogewoJCQkJCS8vIGRvIG5vdGhpbmcKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ01heCc6IHsKCQkJCQkkc3Znb2Zmc2V0X3ggKz0gKCgkdyAqICR0aGlzLT5rKSAtICgkb3cgKiAkdGhpcy0+ayAqICRzdmdzY2FsZV94KSk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlkZWZhdWx0OgoJCQkJY2FzZSAnTWlkJzogewoJCQkJCSRzdmdvZmZzZXRfeCArPSAoKCgkdyAqICR0aGlzLT5rKSAtICgkb3cgKiAkdGhpcy0+ayAqICRzdmdzY2FsZV94KSkgLyAyKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJfQoJCQkvLyBjb3JyZWN0IFkgYWxpZ25tZW50CgkJCXN3aXRjaCAoc3Vic3RyKCRhc3BlY3RfcmF0aW9fYWxpZ24sIDUpKSB7CgkJCQljYXNlICdNaW4nOiB7CgkJCQkJLy8gZG8gbm90aGluZwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnTWF4JzogewoJCQkJCSRzdmdvZmZzZXRfeSAtPSAoKCRoICogJHRoaXMtPmspIC0gKCRvaCAqICR0aGlzLT5rICogJHN2Z3NjYWxlX3kpKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWRlZmF1bHQ6CgkJCQljYXNlICdNaWQnOiB7CgkJCQkJJHN2Z29mZnNldF95IC09ICgoKCRoICogJHRoaXMtPmspIC0gKCRvaCAqICR0aGlzLT5rICogJHN2Z3NjYWxlX3kpKSAvIDIpOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQl9CgkJfQoJCS8vIHN0b3JlIGN1cnJlbnQgcGFnZSBicmVhayBtb2RlCgkJJHBhZ2VfYnJlYWtfbW9kZSA9ICR0aGlzLT5BdXRvUGFnZUJyZWFrOwoJCSRwYWdlX2JyZWFrX21hcmdpbiA9ICR0aGlzLT5nZXRCcmVha01hcmdpbigpOwoJCSRjZWxsX3BhZGRpbmcgPSAkdGhpcy0+Y2VsbF9wYWRkaW5nOwoJCSR0aGlzLT5TZXRDZWxsUGFkZGluZygwKTsKCQkkdGhpcy0+U2V0QXV0b1BhZ2VCcmVhayhmYWxzZSk7CgkJLy8gc2F2ZSB0aGUgY3VycmVudCBncmFwaGljIHN0YXRlCgkJJHRoaXMtPl9vdXQoJ3EnLiR0aGlzLT5lcHNtYXJrZXIpOwoJCS8vIHNldCBpbml0aWFsIGNsaXBwaW5nIG1hc2sKCQkkdGhpcy0+UmVjdCgkeGltZywgJHksICR3LCAkaCwgJ0NOWicsIGFycmF5KCksIGFycmF5KCkpOwoJCS8vIHNjYWxlIGFuZCB0cmFuc2xhdGUKCQkkZSA9ICRveCAqICR0aGlzLT5rICogKDEgLSAkc3Znc2NhbGVfeCk7CgkJJGYgPSAoJHRoaXMtPmggLSAkb3kpICogJHRoaXMtPmsgKiAoMSAtICRzdmdzY2FsZV95KTsKCQkkdGhpcy0+X291dChzcHJpbnRmKCclRiAlRiAlRiAlRiAlRiAlRiBjbScsICRzdmdzY2FsZV94LCAwLCAwLCAkc3Znc2NhbGVfeSwgKCRlICsgJHN2Z29mZnNldF94KSwgKCRmICsgJHN2Z29mZnNldF95KSkpOwoJCS8vIGNyZWF0ZXMgYSBuZXcgWE1MIHBhcnNlciB0byBiZSB1c2VkIGJ5IHRoZSBvdGhlciBYTUwgZnVuY3Rpb25zCgkJJHRoaXMtPnBhcnNlciA9IHhtbF9wYXJzZXJfY3JlYXRlKCdVVEYtOCcpOwoJCS8vIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gYWxsb3dzIHRvIHVzZSBwYXJzZXIgaW5zaWRlIG9iamVjdAoJCXhtbF9zZXRfb2JqZWN0KCR0aGlzLT5wYXJzZXIsICR0aGlzKTsKCQkvLyBkaXNhYmxlIGNhc2UtZm9sZGluZyBmb3IgdGhpcyBYTUwgcGFyc2VyCgkJeG1sX3BhcnNlcl9zZXRfb3B0aW9uKCR0aGlzLT5wYXJzZXIsIFhNTF9PUFRJT05fQ0FTRV9GT0xESU5HLCAwKTsKCQkvLyBzZXRzIHRoZSBlbGVtZW50IGhhbmRsZXIgZnVuY3Rpb25zIGZvciB0aGUgWE1MIHBhcnNlcgoJCXhtbF9zZXRfZWxlbWVudF9oYW5kbGVyKCR0aGlzLT5wYXJzZXIsICdzdGFydFNWR0VsZW1lbnRIYW5kbGVyJywgJ2VuZFNWR0VsZW1lbnRIYW5kbGVyJyk7CgkJLy8gc2V0cyB0aGUgY2hhcmFjdGVyIGRhdGEgaGFuZGxlciBmdW5jdGlvbiBmb3IgdGhlIFhNTCBwYXJzZXIKCQl4bWxfc2V0X2NoYXJhY3Rlcl9kYXRhX2hhbmRsZXIoJHRoaXMtPnBhcnNlciwgJ3NlZ1NWR0NvbnRlbnRIYW5kbGVyJyk7CgkJLy8gc3RhcnQgcGFyc2luZyBhbiBYTUwgZG9jdW1lbnQKCQlpZiAoIXhtbF9wYXJzZSgkdGhpcy0+cGFyc2VyLCAkc3ZnZGF0YSkpIHsKCQkJJGVycm9yX21lc3NhZ2UgPSBzcHJpbnRmKCdTVkcgRXJyb3I6ICVzIGF0IGxpbmUgJWQnLCB4bWxfZXJyb3Jfc3RyaW5nKHhtbF9nZXRfZXJyb3JfY29kZSgkdGhpcy0+cGFyc2VyKSksIHhtbF9nZXRfY3VycmVudF9saW5lX251bWJlcigkdGhpcy0+cGFyc2VyKSk7CgkJCSR0aGlzLT5FcnJvcigkZXJyb3JfbWVzc2FnZSk7CgkJfQoJCS8vIGZyZWUgdGhpcyBYTUwgcGFyc2VyCgkJeG1sX3BhcnNlcl9mcmVlKCR0aGlzLT5wYXJzZXIpOwoJCS8vIHJlc3RvcmUgcHJldmlvdXMgZ3JhcGhpYyBzdGF0ZQoJCSR0aGlzLT5fb3V0KCR0aGlzLT5lcHNtYXJrZXIuJ1EnKTsKCQkvLyByZXN0b3JlIGdyYXBoaWMgdmFycwoJCSR0aGlzLT5zZXRHcmFwaGljVmFycygkZ3ZhcnMpOwoJCSR0aGlzLT5sYXN0aCA9ICRndmFyc1snbGFzdGgnXTsKCQlpZiAoIWVtcHR5KCRib3JkZXIpKSB7CgkJCSRieCA9ICR0aGlzLT54OwoJCQkkYnkgPSAkdGhpcy0+eTsKCQkJJHRoaXMtPnggPSAkeGltZzsKCQkJaWYgKCR0aGlzLT5ydGwpIHsKCQkJCSR0aGlzLT54ICs9ICR3OwoJCQl9CgkJCSR0aGlzLT55ID0gJHk7CgkJCSR0aGlzLT5DZWxsKCR3LCAkaCwgJycsICRib3JkZXIsIDAsICcnLCAwLCAnJywgMCwgdHJ1ZSk7CgkJCSR0aGlzLT54ID0gJGJ4OwoJCQkkdGhpcy0+eSA9ICRieTsKCQl9CgkJaWYgKCRsaW5rKSB7CgkJCSR0aGlzLT5MaW5rKCR4aW1nLCAkeSwgJHcsICRoLCAkbGluaywgMCk7CgkJfQoJCS8vIHNldCBwb2ludGVyIHRvIGFsaWduIHRoZSBuZXh0IHRleHQvb2JqZWN0cwoJCXN3aXRjaCgkYWxpZ24pIHsKCQkJY2FzZSAnVCc6ewoJCQkJJHRoaXMtPnkgPSAkeTsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmltZ19yYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTSc6ewoJCQkJJHRoaXMtPnkgPSAkeSArIHJvdW5kKCRoLzIpOwoJCQkJJHRoaXMtPnggPSAkdGhpcy0+aW1nX3JiX3g7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdCJzp7CgkJCQkkdGhpcy0+eSA9ICR0aGlzLT5pbWdfcmJfeTsKCQkJCSR0aGlzLT54ID0gJHRoaXMtPmltZ19yYl94OwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTic6ewoJCQkJJHRoaXMtPlNldFkoJHRoaXMtPmltZ19yYl95KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6ewoJCQkJLy8gcmVzdG9yZSBwb2ludGVyIHRvIHN0YXJ0aW5nIHBvc2l0aW9uCgkJCQkkdGhpcy0+eCA9ICRndmFyc1sneCddOwoJCQkJJHRoaXMtPnkgPSAkZ3ZhcnNbJ3knXTsKCQkJCSR0aGlzLT5wYWdlID0gJGd2YXJzWydwYWdlJ107CgkJCQkkdGhpcy0+Y3VycmVudF9jb2x1bW4gPSAkZ3ZhcnNbJ2N1cnJlbnRfY29sdW1uJ107CgkJCQkkdGhpcy0+dE1hcmdpbiA9ICRndmFyc1sndE1hcmdpbiddOwoJCQkJJHRoaXMtPmJNYXJnaW4gPSAkZ3ZhcnNbJ2JNYXJnaW4nXTsKCQkJCSR0aGlzLT53ID0gJGd2YXJzWyd3J107CgkJCQkkdGhpcy0+aCA9ICRndmFyc1snaCddOwoJCQkJJHRoaXMtPndQdCA9ICRndmFyc1snd1B0J107CgkJCQkkdGhpcy0+aFB0ID0gJGd2YXJzWydoUHQnXTsKCQkJCSR0aGlzLT5md1B0ID0gJGd2YXJzWydmd1B0J107CgkJCQkkdGhpcy0+ZmhQdCA9ICRndmFyc1snZmhQdCddOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJHRoaXMtPmVuZGxpbmV4ID0gJHRoaXMtPmltZ19yYl94OwoJCS8vIHJlc3RvcmUgcGFnZSBicmVhawoJCSR0aGlzLT5TZXRBdXRvUGFnZUJyZWFrKCRwYWdlX2JyZWFrX21vZGUsICRwYWdlX2JyZWFrX21hcmdpbik7CgkJJHRoaXMtPmNlbGxfcGFkZGluZyA9ICRjZWxsX3BhZGRpbmc7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IFNWRyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXggdG8gUERGLgoJICogQHBhcmFtICR0bSAoYXJyYXkpIG9yaWdpbmFsIFNWRyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCSAqIEByZXR1cm4gYXJyYXkgdHJhbnNmb3JtYXRpb24gbWF0cml4CgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNvbnZlcnRTVkd0TWF0cml4KCR0bSkgewoJCSRhID0gJHRtWzBdOwoJCSRiID0gLSR0bVsxXTsKCQkkYyA9IC0kdG1bMl07CgkJJGQgPSAkdG1bM107CgkJJGUgPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCR0bVs0XSwgMSwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSAqICR0aGlzLT5rOwoJCSRmID0gLSR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHRtWzVdLCAxLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpICogJHRoaXMtPms7CgkJJHggPSAwOwoJCSR5ID0gJHRoaXMtPmggKiAkdGhpcy0+azsKCQkkZSA9ICgkeCAqICgxIC0gJGEpKSAtICgkeSAqICRjKSArICRlOwoJCSRmID0gKCR5ICogKDEgLSAkZCkpIC0gKCR4ICogJGIpICsgJGY7CgkJcmV0dXJuIGFycmF5KCRhLCAkYiwgJGMsICRkLCAkZSwgJGYpOwoJfQoKCS8qKgoJICogQXBwbHkgU1ZHIGdyYXBoaWMgdHJhbnNmb3JtYXRpb24gbWF0cml4LgoJICogQHBhcmFtICR0bSAoYXJyYXkpIG9yaWdpbmFsIFNWRyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gU1ZHVHJhbnNmb3JtKCR0bSkgewoJCSR0aGlzLT5UcmFuc2Zvcm0oJHRoaXMtPmNvbnZlcnRTVkd0TWF0cml4KCR0bSkpOwoJfQoKCS8qKgoJICogQXBwbHkgdGhlIHJlcXVlc3RlZCBTVkcgc3R5bGVzICgqKiogVE8gQkUgQ09NUExFVEVEICoqKikKCSAqIEBwYXJhbSAkc3Znc3R5bGUgKGFycmF5KSBhcnJheSBvZiBTVkcgc3R5bGVzIHRvIGFwcGx5CgkgKiBAcGFyYW0gJHByZXZzdmdzdHlsZSAoYXJyYXkpIGFycmF5IG9mIHByZXZpb3VzIFNWRyBzdHlsZQoJICogQHBhcmFtICR4IChpbnQpIFggb3JpZ2luIG9mIHRoZSBib3VuZGluZyBib3gKCSAqIEBwYXJhbSAkeSAoaW50KSBZIG9yaWdpbiBvZiB0aGUgYm91bmRpbmcgYm94CgkgKiBAcGFyYW0gJHcgKGludCkgd2lkdGggb2YgdGhlIGJvdW5kaW5nIGJveAoJICogQHBhcmFtICRoIChpbnQpIGhlaWdodCBvZiB0aGUgYm91bmRpbmcgYm94CgkgKiBAcGFyYW0gJGNsaXBfZnVuY3Rpb24gKHN0cmluZykgY2xpcCBmdW5jdGlvbgoJICogQHBhcmFtICRjbGlwX3BhcmFtcyAoYXJyYXkpIGFycmF5IG9mIHBhcmFtZXRlcnMgZm9yIGNsaXBwaW5nIGZ1bmN0aW9uCgkgKiBAcmV0dXJuIG9iamVjdCBzdHlsZQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gc2V0U1ZHU3R5bGVzKCRzdmdzdHlsZSwgJHByZXZzdmdzdHlsZSwgJHg9MCwgJHk9MCwgJHc9MSwgJGg9MSwgJGNsaXBfZnVuY3Rpb249JycsICRjbGlwX3BhcmFtcz1hcnJheSgpKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCSRvYmpzdHlsZSA9ICcnOwoJCSRtaW5sZW4gPSAoMC4wMSAvICR0aGlzLT5rKTsgLy8gbWluaW11bSBhY2NlcHRhYmxlIGxlbmd0aCAoMyBwb2ludCkKCQlpZiAoIWlzc2V0KCRzdmdzdHlsZVsnb3BhY2l0eSddKSkgewoJCQlyZXR1cm4gJG9ianN0eWxlOwoJCX0KCQkvLyBjbGlwLXBhdGgKCQkkcmVncyA9IGFycmF5KCk7CgkJaWYgKHByZWdfbWF0Y2goJy91cmxcKFtcc10qXCMoW15cKV0qKVwpL3NpJywgJHN2Z3N0eWxlWydjbGlwLXBhdGgnXSwgJHJlZ3MpKSB7CgkJCSRjbGlwX3BhdGggPSAkdGhpcy0+c3ZnY2xpcHBhdGhzWyRyZWdzWzFdXTsKCQkJZm9yZWFjaCAoJGNsaXBfcGF0aCBhcyAkY3ApIHsKCQkJCSR0aGlzLT5zdGFydFNWR0VsZW1lbnRIYW5kbGVyKCdjbGlwLXBhdGgnLCAkY3BbJ25hbWUnXSwgJGNwWydhdHRyaWJzJ10sICRjcFsndG0nXSk7CgkJCX0KCQl9CgkJLy8gb3BhY2l0eQoJCWlmICgkc3Znc3R5bGVbJ29wYWNpdHknXSAhPSAxKSB7CgkJCSR0aGlzLT5zZXRBbHBoYSgkc3Znc3R5bGVbJ29wYWNpdHknXSwgJ05vcm1hbCcsICRzdmdzdHlsZVsnb3BhY2l0eSddLCBmYWxzZSk7CgkJfQoJCS8vIGNvbG9yCgkJJGZpbGxfY29sb3IgPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkc3Znc3R5bGVbJ2NvbG9yJ10sICR0aGlzLT5zcG90X2NvbG9ycyk7CgkJJHRoaXMtPlNldEZpbGxDb2xvckFycmF5KCRmaWxsX2NvbG9yKTsKCQkvLyB0ZXh0IGNvbG9yCgkJJHRleHRfY29sb3IgPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkc3Znc3R5bGVbJ3RleHQtY29sb3InXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkkdGhpcy0+U2V0VGV4dENvbG9yQXJyYXkoJHRleHRfY29sb3IpOwoJCS8vIGNsaXAKCQlpZiAocHJlZ19tYXRjaCgnL3JlY3RcKChbYS16MC05XC1cLl0qKVtcc10qKFthLXowLTlcLVwuXSopW1xzXSooW2EtejAtOVwtXC5dKilbXHNdKihbYS16MC05XC1cLl0qKVwpL3NpJywgJHN2Z3N0eWxlWydjbGlwJ10sICRyZWdzKSkgewoJCQkkdG9wID0gKGlzc2V0KCRyZWdzWzFdKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRyZWdzWzFdLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkkcmlnaHQgPSAoaXNzZXQoJHJlZ3NbMl0pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHJlZ3NbMl0sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCSRib3R0b20gPSAoaXNzZXQoJHJlZ3NbM10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHJlZ3NbM10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCSRsZWZ0ID0gKGlzc2V0KCRyZWdzWzRdKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRyZWdzWzRdLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkkY3ggPSAkeCArICRsZWZ0OwoJCQkkY3kgPSAkeSArICR0b3A7CgkJCSRjdyA9ICR3IC0gJGxlZnQgLSAkcmlnaHQ7CgkJCSRjaCA9ICRoIC0gJHRvcCAtICRib3R0b207CgkJCWlmICgkc3Znc3R5bGVbJ2NsaXAtcnVsZSddID09ICdldmVub2RkJykgewoJCQkJJGNsaXBfcnVsZSA9ICdDTlonOwoJCQl9IGVsc2UgewoJCQkJJGNsaXBfcnVsZSA9ICdDRU8nOwoJCQl9CgkJCSR0aGlzLT5SZWN0KCRjeCwgJGN5LCAkY3csICRjaCwgJGNsaXBfcnVsZSwgYXJyYXkoKSwgYXJyYXkoKSk7CgkJfQoJCS8vIGZpbGwKCQkkcmVncyA9IGFycmF5KCk7CgkJaWYgKHByZWdfbWF0Y2goJy91cmxcKFtcc10qXCMoW15cKV0qKVwpL3NpJywgJHN2Z3N0eWxlWydmaWxsJ10sICRyZWdzKSkgewoJCQkvLyBncmFkaWVudAoJCQkkZ3JhZGllbnQgPSAkdGhpcy0+c3ZnZ3JhZGllbnRzWyRyZWdzWzFdXTsKCQkJaWYgKGlzc2V0KCRncmFkaWVudFsneHJlZiddKSkgewoJCQkJLy8gcmVmZXJlbmNlIHRvIGFub3RoZXIgZ3JhZGllbnQgZGVmaW5pdGlvbgoJCQkJJG5ld2dyYWRpZW50ID0gJHRoaXMtPnN2Z2dyYWRpZW50c1skZ3JhZGllbnRbJ3hyZWYnXV07CgkJCQkkbmV3Z3JhZGllbnRbJ2Nvb3JkcyddID0gJGdyYWRpZW50Wydjb29yZHMnXTsKCQkJCSRuZXdncmFkaWVudFsnbW9kZSddID0gJGdyYWRpZW50Wydtb2RlJ107CgkJCQkkbmV3Z3JhZGllbnRbJ2dyYWRpZW50VW5pdHMnXSA9ICRncmFkaWVudFsnZ3JhZGllbnRVbml0cyddOwoJCQkJaWYgKGlzc2V0KCRncmFkaWVudFsnZ3JhZGllbnRUcmFuc2Zvcm0nXSkpIHsKCQkJCQkkbmV3Z3JhZGllbnRbJ2dyYWRpZW50VHJhbnNmb3JtJ10gPSAkZ3JhZGllbnRbJ2dyYWRpZW50VHJhbnNmb3JtJ107CgkJCQl9CgkJCQkkZ3JhZGllbnQgPSAkbmV3Z3JhZGllbnQ7CgkJCX0KCQkJLy9zYXZlIGN1cnJlbnQgR3JhcGhpYyBTdGF0ZQoJCQkkdGhpcy0+X291dFNhdmVHcmFwaGljc1N0YXRlKCk7CgkJCS8vc2V0IGNsaXBwaW5nIGFyZWEKCQkJaWYgKCFlbXB0eSgkY2xpcF9mdW5jdGlvbikgQU5EIG1ldGhvZF9leGlzdHMoJHRoaXMsICRjbGlwX2Z1bmN0aW9uKSkgewoJCQkJJGJib3ggPSBjYWxsX3VzZXJfZnVuY19hcnJheShhcnJheSgkdGhpcywgJGNsaXBfZnVuY3Rpb24pLCAkY2xpcF9wYXJhbXMpOwoJCQkJaWYgKGlzX2FycmF5KCRiYm94KSBBTkQgKGNvdW50KCRiYm94KSA9PSA0KSkgewoJCQkJCWxpc3QoJHgsICR5LCAkdywgJGgpID0gJGJib3g7CgkJCQl9CgkJCX0KCQkJaWYgKCRncmFkaWVudFsnbW9kZSddID09ICdtZWFzdXJlJykgewoJCQkJaWYgKGlzc2V0KCRncmFkaWVudFsnZ3JhZGllbnRUcmFuc2Zvcm0nXSkgQU5EICFlbXB0eSgkZ3JhZGllbnRbJ2dyYWRpZW50VHJhbnNmb3JtJ10pKSB7CgkJCQkJJGd0bSA9ICRncmFkaWVudFsnZ3JhZGllbnRUcmFuc2Zvcm0nXTsKCQkJCQkvLyBhcHBseSB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCQkJCQkkeGEgPSAoJGd0bVswXSAqICRncmFkaWVudFsnY29vcmRzJ11bMF0pICsgKCRndG1bMl0gKiAkZ3JhZGllbnRbJ2Nvb3JkcyddWzFdKSArICRndG1bNF07CgkJCQkJJHlhID0gKCRndG1bMV0gKiAkZ3JhZGllbnRbJ2Nvb3JkcyddWzBdKSArICgkZ3RtWzNdICogJGdyYWRpZW50Wydjb29yZHMnXVsxXSkgKyAkZ3RtWzVdOwoJCQkJCSR4YiA9ICgkZ3RtWzBdICogJGdyYWRpZW50Wydjb29yZHMnXVsyXSkgKyAoJGd0bVsyXSAqICRncmFkaWVudFsnY29vcmRzJ11bM10pICsgJGd0bVs0XTsKCQkJCQkkeWIgPSAoJGd0bVsxXSAqICRncmFkaWVudFsnY29vcmRzJ11bMl0pICsgKCRndG1bM10gKiAkZ3JhZGllbnRbJ2Nvb3JkcyddWzNdKSArICRndG1bNV07CgkJCQkJaWYgKGlzc2V0KCRncmFkaWVudFsnY29vcmRzJ11bNF0pKSB7CgkJCQkJCSRncmFkaWVudFsnY29vcmRzJ11bNF0gPSBzcXJ0KHBvdygoJGd0bVswXSAqICRncmFkaWVudFsnY29vcmRzJ11bNF0pLCAyKSArIHBvdygoJGd0bVsxXSAqICRncmFkaWVudFsnY29vcmRzJ11bNF0pLCAyKSk7CgkJCQkJfQoJCQkJCSRncmFkaWVudFsnY29vcmRzJ11bMF0gPSAkeGE7CgkJCQkJJGdyYWRpZW50Wydjb29yZHMnXVsxXSA9ICR5YTsKCQkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzJdID0gJHhiOwoJCQkJCSRncmFkaWVudFsnY29vcmRzJ11bM10gPSAkeWI7CgkJCQl9CgkJCQkvLyBjb252ZXJ0IFNWRyBjb29yZGluYXRlcyB0byB1c2VyIHVuaXRzCgkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzBdID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZ3JhZGllbnRbJ2Nvb3JkcyddWzBdLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQkJJGdyYWRpZW50Wydjb29yZHMnXVsxXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGdyYWRpZW50Wydjb29yZHMnXVsxXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTsKCQkJCSRncmFkaWVudFsnY29vcmRzJ11bMl0gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRncmFkaWVudFsnY29vcmRzJ11bMl0sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzNdID0gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkZ3JhZGllbnRbJ2Nvb3JkcyddWzNdLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQkJaWYgKGlzc2V0KCRncmFkaWVudFsnY29vcmRzJ11bNF0pKSB7CgkJCQkJJGdyYWRpZW50Wydjb29yZHMnXVs0XSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGdyYWRpZW50Wydjb29yZHMnXVs0XSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTsKCQkJCX0KCQkJCWlmICgkdyA8PSAkbWlubGVuKSB7CgkJCQkJJHcgPSAkbWlubGVuOwoJCQkJfQoJCQkJaWYgKCRoIDw9ICRtaW5sZW4pIHsKCQkJCQkkaCA9ICRtaW5sZW47CgkJCQl9CgkJCQkvLyBzaGlmdCB1bml0cwoJCQkJaWYgKCRncmFkaWVudFsnZ3JhZGllbnRVbml0cyddID09ICdvYmplY3RCb3VuZGluZ0JveCcpIHsKCQkJCQkvLyBjb252ZXJ0IHRvIFNWRyBjb29yZGluYXRlIHN5c3RlbQoJCQkJCSRncmFkaWVudFsnY29vcmRzJ11bMF0gKz0gJHg7CgkJCQkJJGdyYWRpZW50Wydjb29yZHMnXVsxXSArPSAkeTsKCQkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzJdICs9ICR4OwoJCQkJCSRncmFkaWVudFsnY29vcmRzJ11bM10gKz0gJHk7CgkJCQl9CgkJCQkvLyBjYWxjdWxhdGUgcGVyY2VudGFnZXMKCQkJCSRncmFkaWVudFsnY29vcmRzJ11bMF0gPSAoKCRncmFkaWVudFsnY29vcmRzJ11bMF0gLSAkeCkgLyAkdyk7CgkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzFdID0gKCgkZ3JhZGllbnRbJ2Nvb3JkcyddWzFdIC0gJHkpIC8gJGgpOwoJCQkJJGdyYWRpZW50Wydjb29yZHMnXVsyXSA9ICgoJGdyYWRpZW50Wydjb29yZHMnXVsyXSAtICR4KSAvICR3KTsKCQkJCSRncmFkaWVudFsnY29vcmRzJ11bM10gPSAoKCRncmFkaWVudFsnY29vcmRzJ11bM10gLSAkeSkgLyAkaCk7CgkJCQlpZiAoaXNzZXQoJGdyYWRpZW50Wydjb29yZHMnXVs0XSkpIHsKCQkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzRdIC89ICR3OwoJCQkJfQoJCQl9IGVsc2VpZiAoJGdyYWRpZW50Wydtb2RlJ10gPT0gJ3BlcmNlbnRhZ2UnKSB7CgkJCQlmb3JlYWNoKCRncmFkaWVudFsnY29vcmRzJ10gYXMgJGtleSA9PiAkdmFsKSB7CgkJCQkJJGdyYWRpZW50Wydjb29yZHMnXVska2V5XSA9IChpbnR2YWwoJHZhbCkgLyAxMDApOwoJCQkJCWlmICgkdmFsIDwgMCkgewoJCQkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWyRrZXldID0gMDsKCQkJCQl9IGVsc2VpZiAoJHZhbCA+IDEpIHsKCQkJCQkJJGdyYWRpZW50Wydjb29yZHMnXVska2V5XSA9IDE7CgkJCQkJfQoJCQkJfQoJCQl9CgkJCWlmICgoJGdyYWRpZW50Wyd0eXBlJ10gPT0gMikgQU5EICgkZ3JhZGllbnRbJ2Nvb3JkcyddWzBdID09ICRncmFkaWVudFsnY29vcmRzJ11bMl0pIEFORCAoJGdyYWRpZW50Wydjb29yZHMnXVsxXSA9PSAkZ3JhZGllbnRbJ2Nvb3JkcyddWzNdKSkgewoJCQkJLy8gc2luZ2xlIGNvbG9yIChubyBzaGFkaW5nKQoJCQkJJGdyYWRpZW50Wydjb29yZHMnXVswXSA9IDE7CgkJCQkkZ3JhZGllbnRbJ2Nvb3JkcyddWzFdID0gMDsKCQkJCSRncmFkaWVudFsnY29vcmRzJ11bMl0gPSAwLjk5OTsKCQkJCSRncmFkaWVudFsnY29vcmRzJ11bM10gPSAwOwoJCQl9CgkJCS8vIHN3YXAgWSBjb29yZGluYXRlcwoJCQkkdG1wID0gJGdyYWRpZW50Wydjb29yZHMnXVsxXTsKCQkJJGdyYWRpZW50Wydjb29yZHMnXVsxXSA9ICRncmFkaWVudFsnY29vcmRzJ11bM107CgkJCSRncmFkaWVudFsnY29vcmRzJ11bM10gPSAkdG1wOwoJCQkvLyBzZXQgdHJhbnNmb3JtYXRpb24gbWFwIGZvciBncmFkaWVudAoJCQlpZiAoJGdyYWRpZW50Wyd0eXBlJ10gPT0gMykgewoJCQkJLy8gY2lyY3VsYXIgZ3JhZGllbnQKCQkJCSRjeSA9ICR0aGlzLT5oIC0gJHkgLSAoJGdyYWRpZW50Wydjb29yZHMnXVsxXSAqICgkdyArICRoKSk7CgkJCQkkdGhpcy0+X291dChzcHJpbnRmKCclRiAwIDAgJUYgJUYgJUYgY20nLCAoJHcgKiAkdGhpcy0+ayksICgkdyAqICR0aGlzLT5rKSwgKCR4ICogJHRoaXMtPmspLCAoJGN5ICogJHRoaXMtPmspKSk7CgkJCX0gZWxzZSB7CgkJCQkkdGhpcy0+X291dChzcHJpbnRmKCclRiAwIDAgJUYgJUYgJUYgY20nLCAoJHcgKiAkdGhpcy0+ayksICgkaCAqICR0aGlzLT5rKSwgKCR4ICogJHRoaXMtPmspLCAoKCR0aGlzLT5oIC0gKCR5ICsgJGgpKSAqICR0aGlzLT5rKSkpOwoJCQl9CgkJCWlmIChjb3VudCgkZ3JhZGllbnRbJ3N0b3BzJ10pID4gMSkgewoJCQkJJHRoaXMtPkdyYWRpZW50KCRncmFkaWVudFsndHlwZSddLCAkZ3JhZGllbnRbJ2Nvb3JkcyddLCAkZ3JhZGllbnRbJ3N0b3BzJ10sIGFycmF5KCksIGZhbHNlKTsKCQkJfQoJCX0gZWxzZWlmICgkc3Znc3R5bGVbJ2ZpbGwnXSAhPSAnbm9uZScpIHsKCQkJJGZpbGxfY29sb3IgPSBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkc3Znc3R5bGVbJ2ZpbGwnXSwgJHRoaXMtPnNwb3RfY29sb3JzKTsKCQkJaWYgKCRzdmdzdHlsZVsnZmlsbC1vcGFjaXR5J10gIT0gMSkgewoJCQkJJHRoaXMtPnNldEFscGhhKCR0aGlzLT5hbHBoYVsnQ0EnXSwgJ05vcm1hbCcsICRzdmdzdHlsZVsnZmlsbC1vcGFjaXR5J10sIGZhbHNlKTsKCQkJfQoJCQkkdGhpcy0+U2V0RmlsbENvbG9yQXJyYXkoJGZpbGxfY29sb3IpOwoJCQlpZiAoJHN2Z3N0eWxlWydmaWxsLXJ1bGUnXSA9PSAnZXZlbm9kZCcpIHsKCQkJCSRvYmpzdHlsZSAuPSAnRionOwoJCQl9IGVsc2UgewoJCQkJJG9ianN0eWxlIC49ICdGJzsKCQkJfQoJCX0KCQkvLyBzdHJva2UKCQlpZiAoJHN2Z3N0eWxlWydzdHJva2UnXSAhPSAnbm9uZScpIHsKCQkJaWYgKCRzdmdzdHlsZVsnc3Ryb2tlLW9wYWNpdHknXSAhPSAxKSB7CgkJCQkkdGhpcy0+c2V0QWxwaGEoJHN2Z3N0eWxlWydzdHJva2Utb3BhY2l0eSddLCAnTm9ybWFsJywgJHRoaXMtPmFscGhhWydjYSddLCBmYWxzZSk7CgkJCX0KCQkJJHN0cm9rZV9zdHlsZSA9IGFycmF5KAoJCQkJJ2NvbG9yJyA9PiBUQ1BERl9DT0xPUlM6OmNvbnZlcnRIVE1MQ29sb3JUb0RlYygkc3Znc3R5bGVbJ3N0cm9rZSddLCAkdGhpcy0+c3BvdF9jb2xvcnMpLAoJCQkJJ3dpZHRoJyA9PiAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRzdmdzdHlsZVsnc3Ryb2tlLXdpZHRoJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSksCgkJCQknY2FwJyA9PiAkc3Znc3R5bGVbJ3N0cm9rZS1saW5lY2FwJ10sCgkJCQknam9pbicgPT4gJHN2Z3N0eWxlWydzdHJva2UtbGluZWpvaW4nXQoJCQkJKTsKCQkJaWYgKGlzc2V0KCRzdmdzdHlsZVsnc3Ryb2tlLWRhc2hhcnJheSddKSBBTkQgIWVtcHR5KCRzdmdzdHlsZVsnc3Ryb2tlLWRhc2hhcnJheSddKSBBTkQgKCRzdmdzdHlsZVsnc3Ryb2tlLWRhc2hhcnJheSddICE9ICdub25lJykpIHsKCQkJCSRzdHJva2Vfc3R5bGVbJ2Rhc2gnXSA9ICRzdmdzdHlsZVsnc3Ryb2tlLWRhc2hhcnJheSddOwoJCQl9CgkJCSR0aGlzLT5TZXRMaW5lU3R5bGUoJHN0cm9rZV9zdHlsZSk7CgkJCSRvYmpzdHlsZSAuPSAnRCc7CgkJfQoJCS8vIGZvbnQKCQkkcmVncyA9IGFycmF5KCk7CgkJaWYgKCFlbXB0eSgkc3Znc3R5bGVbJ2ZvbnQnXSkpIHsKCQkJaWYgKHByZWdfbWF0Y2goJy9mb250LWZhbWlseVtcc10qOltcc10qKFteXDtcIl0qKS9zaScsICRzdmdzdHlsZVsnZm9udCddLCAkcmVncykpIHsKCQkJCSRmb250X2ZhbWlseSA9ICR0aGlzLT5nZXRGb250RmFtaWx5TmFtZSgkcmVnc1sxXSk7CgkJCX0gZWxzZSB7CgkJCQkkZm9udF9mYW1pbHkgPSAkc3Znc3R5bGVbJ2ZvbnQtZmFtaWx5J107CgkJCX0KCQkJaWYgKHByZWdfbWF0Y2goJy9mb250LXNpemVbXHNdKjpbXHNdKihbXlxzXDtcIl0qKS9zaScsICRzdmdzdHlsZVsnZm9udCddLCAkcmVncykpIHsKCQkJCSRmb250X3NpemUgPSB0cmltKCRyZWdzWzFdKTsKCQkJfSBlbHNlIHsKCQkJCSRmb250X3NpemUgPSAkc3Znc3R5bGVbJ2ZvbnQtc2l6ZSddOwoJCQl9CgkJCWlmIChwcmVnX21hdGNoKCcvZm9udC1zdHlsZVtcc10qOltcc10qKFteXHNcO1wiXSopL3NpJywgJHN2Z3N0eWxlWydmb250J10sICRyZWdzKSkgewoJCQkJJGZvbnRfc3R5bGUgPSB0cmltKCRyZWdzWzFdKTsKCQkJfSBlbHNlIHsKCQkJCSRmb250X3N0eWxlID0gJHN2Z3N0eWxlWydmb250LXN0eWxlJ107CgkJCX0KCQkJaWYgKHByZWdfbWF0Y2goJy9mb250LXdlaWdodFtcc10qOltcc10qKFteXHNcO1wiXSopL3NpJywgJHN2Z3N0eWxlWydmb250J10sICRyZWdzKSkgewoJCQkJJGZvbnRfd2VpZ2h0ID0gdHJpbSgkcmVnc1sxXSk7CgkJCX0gZWxzZSB7CgkJCQkkZm9udF93ZWlnaHQgPSAkc3Znc3R5bGVbJ2ZvbnQtd2VpZ2h0J107CgkJCX0KCQkJaWYgKHByZWdfbWF0Y2goJy9mb250LXN0cmV0Y2hbXHNdKjpbXHNdKihbXlxzXDtcIl0qKS9zaScsICRzdmdzdHlsZVsnZm9udCddLCAkcmVncykpIHsKCQkJCSRmb250X3N0cmV0Y2ggPSB0cmltKCRyZWdzWzFdKTsKCQkJfSBlbHNlIHsKCQkJCSRmb250X3N0cmV0Y2ggPSAkc3Znc3R5bGVbJ2ZvbnQtc3RyZXRjaCddOwoJCQl9CgkJCWlmIChwcmVnX21hdGNoKCcvbGV0dGVyLXNwYWNpbmdbXHNdKjpbXHNdKihbXlxzXDtcIl0qKS9zaScsICRzdmdzdHlsZVsnZm9udCddLCAkcmVncykpIHsKCQkJCSRmb250X3NwYWNpbmcgPSB0cmltKCRyZWdzWzFdKTsKCQkJfSBlbHNlIHsKCQkJCSRmb250X3NwYWNpbmcgPSAkc3Znc3R5bGVbJ2xldHRlci1zcGFjaW5nJ107CgkJCX0KCQl9IGVsc2UgewoJCQkkZm9udF9mYW1pbHkgPSAkdGhpcy0+Z2V0Rm9udEZhbWlseU5hbWUoJHN2Z3N0eWxlWydmb250LWZhbWlseSddKTsKCQkJJGZvbnRfc2l6ZSA9ICRzdmdzdHlsZVsnZm9udC1zaXplJ107CgkJCSRmb250X3N0eWxlID0gJHN2Z3N0eWxlWydmb250LXN0eWxlJ107CgkJCSRmb250X3dlaWdodCA9ICRzdmdzdHlsZVsnZm9udC13ZWlnaHQnXTsKCQkJJGZvbnRfc3RyZXRjaCA9ICRzdmdzdHlsZVsnZm9udC1zdHJldGNoJ107CgkJCSRmb250X3NwYWNpbmcgPSAkc3Znc3R5bGVbJ2xldHRlci1zcGFjaW5nJ107CgkJfQoJCSRmb250X3NpemUgPSAkdGhpcy0+Z2V0SFRNTEZvbnRVbml0cygkZm9udF9zaXplLCAkdGhpcy0+c3Znc3R5bGVzWzBdWydmb250LXNpemUnXSwgJHByZXZzdmdzdHlsZVsnZm9udC1zaXplJ10sICR0aGlzLT5zdmd1bml0KTsKCQkkZm9udF9zdHJldGNoID0gJHRoaXMtPmdldENTU0ZvbnRTdHJldGNoaW5nKCRmb250X3N0cmV0Y2gsICRzdmdzdHlsZVsnZm9udC1zdHJldGNoJ10pOwoJCSRmb250X3NwYWNpbmcgPSAkdGhpcy0+Z2V0Q1NTRm9udFNwYWNpbmcoJGZvbnRfc3BhY2luZywgJHN2Z3N0eWxlWydsZXR0ZXItc3BhY2luZyddKTsKCQlzd2l0Y2ggKCRmb250X3N0eWxlKSB7CgkJCWNhc2UgJ2l0YWxpYyc6IHsKCQkJCSRmb250X3N0eWxlID0gJ0knOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnb2JsaXF1ZSc6IHsKCQkJCSRmb250X3N0eWxlID0gJ0knOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDoKCQkJY2FzZSAnbm9ybWFsJzogewoJCQkJJGZvbnRfc3R5bGUgPSAnJzsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCXN3aXRjaCAoJGZvbnRfd2VpZ2h0KSB7CgkJCWNhc2UgJ2JvbGQnOgoJCQljYXNlICdib2xkZXInOiB7CgkJCQkkZm9udF9zdHlsZSAuPSAnQic7CgkJCQlicmVhazsKCQkJfQoJCX0KCQlzd2l0Y2ggKCRzdmdzdHlsZVsndGV4dC1kZWNvcmF0aW9uJ10pIHsKCQkJY2FzZSAndW5kZXJsaW5lJzogewoJCQkJJGZvbnRfc3R5bGUgLj0gJ1UnOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnb3ZlcmxpbmUnOiB7CgkJCQkkZm9udF9zdHlsZSAuPSAnTyc7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdsaW5lLXRocm91Z2gnOiB7CgkJCQkkZm9udF9zdHlsZSAuPSAnRCc7CgkJCQlicmVhazsKCQkJfQoJCQlkZWZhdWx0OgoJCQljYXNlICdub25lJzogewoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJHRoaXMtPlNldEZvbnQoJGZvbnRfZmFtaWx5LCAkZm9udF9zdHlsZSwgJGZvbnRfc2l6ZSk7CgkJJHRoaXMtPnNldEZvbnRTdHJldGNoaW5nKCRmb250X3N0cmV0Y2gpOwoJCSR0aGlzLT5zZXRGb250U3BhY2luZygkZm9udF9zcGFjaW5nKTsKCQlyZXR1cm4gJG9ianN0eWxlOwoJfQoKCS8qKgoJICogRHJhd3MgYW4gU1ZHIHBhdGgKCSAqIEBwYXJhbSAkZCAoc3RyaW5nKSBhdHRyaWJ1dGUgZCBvZiB0aGUgcGF0aCBTVkcgZWxlbWVudAoJICogQHBhcmFtICRzdHlsZSAoc3RyaW5nKSBTdHlsZSBvZiByZW5kZXJpbmcuIFBvc3NpYmxlIHZhbHVlcyBhcmU6CgkgKiA8dWw+CgkgKgkgPGxpPkQgb3IgZW1wdHkgc3RyaW5nOiBEcmF3IChkZWZhdWx0KS48L2xpPgoJICoJIDxsaT5GOiBGaWxsLjwvbGk+CgkgKgkgPGxpPkYqOiBGaWxsIHVzaW5nIHRoZSBldmVuLW9kZCBydWxlIHRvIGRldGVybWluZSB3aGljaCByZWdpb25zIGxpZSBpbnNpZGUgdGhlIGNsaXBwaW5nIHBhdGguPC9saT4KCSAqCSA8bGk+REYgb3IgRkQ6IERyYXcgYW5kIGZpbGwuPC9saT4KCSAqCSA8bGk+REYqIG9yIEZEKjogRHJhdyBhbmQgZmlsbCB1c2luZyB0aGUgZXZlbi1vZGQgcnVsZSB0byBkZXRlcm1pbmUgd2hpY2ggcmVnaW9ucyBsaWUgaW5zaWRlIHRoZSBjbGlwcGluZyBwYXRoLjwvbGk+CgkgKgkgPGxpPkNOWjogQ2xpcHBpbmcgbW9kZSAodXNpbmcgdGhlIGV2ZW4tb2RkIHJ1bGUgdG8gZGV0ZXJtaW5lIHdoaWNoIHJlZ2lvbnMgbGllIGluc2lkZSB0aGUgY2xpcHBpbmcgcGF0aCkuPC9saT4KCSAqCSA8bGk+Q0VPOiBDbGlwcGluZyBtb2RlICh1c2luZyB0aGUgbm9uemVybyB3aW5kaW5nIG51bWJlciBydWxlIHRvIGRldGVybWluZSB3aGljaCByZWdpb25zIGxpZSBpbnNpZGUgdGhlIGNsaXBwaW5nIHBhdGgpLjwvbGk+CgkgKiA8L3VsPgoJICogQHJldHVybiBhcnJheSBvZiBjb250YWluZXIgYm94IG1lYXN1cmVzICh4LCB5LCB3LCBoKQoJICogQGF1dGhvciBOaWNvbGEgQXN1bmkKCSAqIEBzaW5jZSA1LjAuMDAwICgyMDEwLTA1LTAyKQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gU1ZHUGF0aCgkZCwgJHN0eWxlPScnKSB7CgkJaWYgKCR0aGlzLT5zdGF0ZSAhPSAyKSB7CgkJCSByZXR1cm47CgkJfQoJCS8vIHNldCBmaWxsL3N0cm9rZSBzdHlsZQoJCSRvcCA9IFRDUERGX1NUQVRJQzo6Z2V0UGF0aFBhaW50T3BlcmF0b3IoJHN0eWxlLCAnJyk7CgkJaWYgKGVtcHR5KCRvcCkpIHsKCQkJcmV0dXJuOwoJCX0KCQkkcGF0aHMgPSBhcnJheSgpOwoJCSRkID0gcHJlZ19yZXBsYWNlKCcvKFswLTlBQ0hMTVFTVFZaXSkoW1wtXCtdKS9zaScsICdcXDEgXFwyJywgJGQpOwoJCXByZWdfbWF0Y2hfYWxsKCcvKFtBQ0hMTVFTVFZaXSlbXHNdKihbXkFDSExNUVNUVlpcIl0qKS9zaScsICRkLCAkcGF0aHMsIFBSRUdfU0VUX09SREVSKTsKCQkkeCA9IDA7CgkJJHkgPSAwOwoJCSR4MSA9IDA7CgkJJHkxID0gMDsKCQkkeDIgPSAwOwoJCSR5MiA9IDA7CgkJJHhtaW4gPSAyMTQ3NDgzNjQ3OwoJCSR4bWF4ID0gMDsKCQkkeW1pbiA9IDIxNDc0ODM2NDc7CgkJJHltYXggPSAwOwoJCSRyZWxjb29yZCA9IGZhbHNlOwoJCSRtaW5sZW4gPSAoMC4wMSAvICR0aGlzLT5rKTsgLy8gbWluaW11bSBhY2NlcHRhYmxlIGxlbmd0aCAoMyBwb2ludCkKCQkkZmlyc3RjbWQgPSB0cnVlOyAvLyB1c2VkIHRvIHByaW50IGZpcnN0IHBvaW50CgkJLy8gZHJhdyBjdXJ2ZSBwaWVjZXMKCQlmb3JlYWNoICgkcGF0aHMgYXMgJGtleSA9PiAkdmFsKSB7CgkJCS8vIGdldCBjdXJ2ZSB0eXBlCgkJCSRjbWQgPSB0cmltKCR2YWxbMV0pOwoJCQlpZiAoc3RydG9sb3dlcigkY21kKSA9PSAkY21kKSB7CgkJCQkvLyB1c2UgcmVsYXRpdmUgY29vcmRpbmF0ZWQgaW5zdGVhZCBvZiBhYnNvbHV0ZQoJCQkJJHJlbGNvb3JkID0gdHJ1ZTsKCQkJCSR4b2Zmc2V0ID0gJHg7CgkJCQkkeW9mZnNldCA9ICR5OwoJCQl9IGVsc2UgewoJCQkJJHJlbGNvb3JkID0gZmFsc2U7CgkJCQkkeG9mZnNldCA9IDA7CgkJCQkkeW9mZnNldCA9IDA7CgkJCX0KCQkJJHBhcmFtcyA9IGFycmF5KCk7CgkJCWlmIChpc3NldCgkdmFsWzJdKSkgewoJCQkJLy8gZ2V0IGN1cnZlIHBhcmFtZXRlcnMKCQkJCSRyYXdwYXJhbXMgPSBwcmVnX3NwbGl0KCcvKFtcLFxzXSspL3NpJywgdHJpbSgkdmFsWzJdKSk7CgkJCQkkcGFyYW1zID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRyYXdwYXJhbXMgYXMgJGNrID0+ICRjcCkgewoJCQkJCSRwYXJhbXNbJGNrXSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGNwLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOwoJCQkJCWlmIChhYnMoJHBhcmFtc1skY2tdKSA8ICRtaW5sZW4pIHsKCQkJCQkJLy8gYXByb3hpbWF0ZSBsaXR0bGUgdmFsdWVzIHRvIHplcm8KCQkJCQkJJHBhcmFtc1skY2tdID0gMDsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJLy8gc3RvcmUgY3VycmVudCBvcmlnaW4gcG9pbnQKCQkJJHgwID0gJHg7CgkJCSR5MCA9ICR5OwoJCQlzd2l0Y2ggKHN0cnRvdXBwZXIoJGNtZCkpIHsKCQkJCWNhc2UgJ00nOiB7IC8vIG1vdmV0bwoJCQkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGNrID0+ICRjcCkgewoJCQkJCQlpZiAoKCRjayAlIDIpID09IDApIHsKCQkJCQkJCSR4ID0gJGNwICsgJHhvZmZzZXQ7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkeSA9ICRjcCArICR5b2Zmc2V0OwoJCQkJCQkJaWYgKCRmaXJzdGNtZCBPUiAoYWJzKCR4MCAtICR4KSA+PSAkbWlubGVuKSBPUiAoYWJzKCR5MCAtICR5KSA+PSAkbWlubGVuKSkgewoJCQkJCQkJCWlmICgkY2sgPT0gMSkgewoJCQkJCQkJCQkkdGhpcy0+X291dFBvaW50KCR4LCAkeSk7CgkJCQkJCQkJCSRmaXJzdGNtZCA9IGZhbHNlOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSR0aGlzLT5fb3V0TGluZSgkeCwgJHkpOwoJCQkJCQkJCX0KCQkJCQkJCQkkeDAgPSAkeDsKCQkJCQkJCQkkeTAgPSAkeTsKCQkJCQkJCX0KCQkJCQkJCSR4bWluID0gbWluKCR4bWluLCAkeCk7CgkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHkpOwoJCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4KTsKCQkJCQkJCSR5bWF4ID0gbWF4KCR5bWF4LCAkeSk7CgkJCQkJCQlpZiAoJHJlbGNvb3JkKSB7CgkJCQkJCQkJJHhvZmZzZXQgPSAkeDsKCQkJCQkJCQkkeW9mZnNldCA9ICR5OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnTCc6IHsgLy8gbGluZXRvCgkJCQkJZm9yZWFjaCAoJHBhcmFtcyBhcyAkY2sgPT4gJGNwKSB7CgkJCQkJCWlmICgoJGNrICUgMikgPT0gMCkgewoJCQkJCQkJJHggPSAkY3AgKyAkeG9mZnNldDsKCQkJCQkJfSBlbHNlIHsKCQkJCQkJCSR5ID0gJGNwICsgJHlvZmZzZXQ7CgkJCQkJCQlpZiAoKGFicygkeDAgLSAkeCkgPj0gJG1pbmxlbikgT1IgKGFicygkeTAgLSAkeSkgPj0gJG1pbmxlbikpIHsKCQkJCQkJCQkkdGhpcy0+X291dExpbmUoJHgsICR5KTsKCQkJCQkJCQkkeDAgPSAkeDsKCQkJCQkJCQkkeTAgPSAkeTsKCQkJCQkJCX0KCQkJCQkJCSR4bWluID0gbWluKCR4bWluLCAkeCk7CgkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHkpOwoJCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4KTsKCQkJCQkJCSR5bWF4ID0gbWF4KCR5bWF4LCAkeSk7CgkJCQkJCQlpZiAoJHJlbGNvb3JkKSB7CgkJCQkJCQkJJHhvZmZzZXQgPSAkeDsKCQkJCQkJCQkkeW9mZnNldCA9ICR5OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnSCc6IHsgLy8gaG9yaXpvbnRhbCBsaW5ldG8KCQkJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRjayA9PiAkY3ApIHsKCQkJCQkJJHggPSAkY3AgKyAkeG9mZnNldDsKCQkJCQkJaWYgKChhYnMoJHgwIC0gJHgpID49ICRtaW5sZW4pIE9SIChhYnMoJHkwIC0gJHkpID49ICRtaW5sZW4pKSB7CgkJCQkJCQkkdGhpcy0+X291dExpbmUoJHgsICR5KTsKCQkJCQkJCSR4MCA9ICR4OwoJCQkJCQkJJHkwID0gJHk7CgkJCQkJCX0KCQkJCQkJJHhtaW4gPSBtaW4oJHhtaW4sICR4KTsKCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4KTsKCQkJCQkJaWYgKCRyZWxjb29yZCkgewoJCQkJCQkJJHhvZmZzZXQgPSAkeDsKCQkJCQkJfQoJCQkJCX0KCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgJ1YnOiB7IC8vIHZlcnRpY2FsIGxpbmV0bwoJCQkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGNrID0+ICRjcCkgewoJCQkJCQkkeSA9ICRjcCArICR5b2Zmc2V0OwoJCQkJCQlpZiAoKGFicygkeDAgLSAkeCkgPj0gJG1pbmxlbikgT1IgKGFicygkeTAgLSAkeSkgPj0gJG1pbmxlbikpIHsKCQkJCQkJCSR0aGlzLT5fb3V0TGluZSgkeCwgJHkpOwoJCQkJCQkJJHgwID0gJHg7CgkJCQkJCQkkeTAgPSAkeTsKCQkJCQkJfQoJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHkpOwoJCQkJCQkkeW1heCA9IG1heCgkeW1heCwgJHkpOwoJCQkJCQlpZiAoJHJlbGNvb3JkKSB7CgkJCQkJCQkkeW9mZnNldCA9ICR5OwoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnQyc6IHsgLy8gY3VydmV0bwoJCQkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGNrID0+ICRjcCkgewoJCQkJCQkkcGFyYW1zWyRja10gPSAkY3A7CgkJCQkJCWlmICgoKCRjayArIDEpICUgNikgPT0gMCkgewoJCQkJCQkJJHgxID0gJHBhcmFtc1soJGNrIC0gNSldICsgJHhvZmZzZXQ7CgkJCQkJCQkkeTEgPSAkcGFyYW1zWygkY2sgLSA0KV0gKyAkeW9mZnNldDsKCQkJCQkJCSR4MiA9ICRwYXJhbXNbKCRjayAtIDMpXSArICR4b2Zmc2V0OwoJCQkJCQkJJHkyID0gJHBhcmFtc1soJGNrIC0gMildICsgJHlvZmZzZXQ7CgkJCQkJCQkkeCA9ICRwYXJhbXNbKCRjayAtIDEpXSArICR4b2Zmc2V0OwoJCQkJCQkJJHkgPSAkcGFyYW1zWygkY2spXSArICR5b2Zmc2V0OwoJCQkJCQkJJHRoaXMtPl9vdXRDdXJ2ZSgkeDEsICR5MSwgJHgyLCAkeTIsICR4LCAkeSk7CgkJCQkJCQkkeG1pbiA9IG1pbigkeG1pbiwgJHgsICR4MSwgJHgyKTsKCQkJCQkJCSR5bWluID0gbWluKCR5bWluLCAkeSwgJHkxLCAkeTIpOwoJCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4LCAkeDEsICR4Mik7CgkJCQkJCQkkeW1heCA9IG1heCgkeW1heCwgJHksICR5MSwgJHkyKTsKCQkJCQkJCWlmICgkcmVsY29vcmQpIHsKCQkJCQkJCQkkeG9mZnNldCA9ICR4OwoJCQkJCQkJCSR5b2Zmc2V0ID0gJHk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdTJzogeyAvLyBzaG9ydGhhbmQvc21vb3RoIGN1cnZldG8KCQkJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRjayA9PiAkY3ApIHsKCQkJCQkJJHBhcmFtc1skY2tdID0gJGNwOwoJCQkJCQlpZiAoKCgkY2sgKyAxKSAlIDQpID09IDApIHsKCQkJCQkJCWlmICgoJGtleSA+IDApIEFORCAoKHN0cnRvdXBwZXIoJHBhdGhzWygka2V5IC0gMSldWzFdKSA9PSAnQycpIE9SIChzdHJ0b3VwcGVyKCRwYXRoc1soJGtleSAtIDEpXVsxXSkgPT0gJ1MnKSkpIHsKCQkJCQkJCQkkeDEgPSAoMiAqICR4KSAtICR4MjsKCQkJCQkJCQkkeTEgPSAoMiAqICR5KSAtICR5MjsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHgxID0gJHg7CgkJCQkJCQkJJHkxID0gJHk7CgkJCQkJCQl9CgkJCQkJCQkkeDIgPSAkcGFyYW1zWygkY2sgLSAzKV0gKyAkeG9mZnNldDsKCQkJCQkJCSR5MiA9ICRwYXJhbXNbKCRjayAtIDIpXSArICR5b2Zmc2V0OwoJCQkJCQkJJHggPSAkcGFyYW1zWygkY2sgLSAxKV0gKyAkeG9mZnNldDsKCQkJCQkJCSR5ID0gJHBhcmFtc1soJGNrKV0gKyAkeW9mZnNldDsKCQkJCQkJCSR0aGlzLT5fb3V0Q3VydmUoJHgxLCAkeTEsICR4MiwgJHkyLCAkeCwgJHkpOwoJCQkJCQkJJHhtaW4gPSBtaW4oJHhtaW4sICR4LCAkeDEsICR4Mik7CgkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHksICR5MSwgJHkyKTsKCQkJCQkJCSR4bWF4ID0gbWF4KCR4bWF4LCAkeCwgJHgxLCAkeDIpOwoJCQkJCQkJJHltYXggPSBtYXgoJHltYXgsICR5LCAkeTEsICR5Mik7CgkJCQkJCQlpZiAoJHJlbGNvb3JkKSB7CgkJCQkJCQkJJHhvZmZzZXQgPSAkeDsKCQkJCQkJCQkkeW9mZnNldCA9ICR5OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnUSc6IHsgLy8gcXVhZHJhdGljIEJlemllciBjdXJ2ZXRvCgkJCQkJZm9yZWFjaCAoJHBhcmFtcyBhcyAkY2sgPT4gJGNwKSB7CgkJCQkJCSRwYXJhbXNbJGNrXSA9ICRjcDsKCQkJCQkJaWYgKCgoJGNrICsgMSkgJSA0KSA9PSAwKSB7CgkJCQkJCQkvLyBjb252ZXJ0IHF1YWRyYXRpYyBwb2ludHMgdG8gY3ViaWMgcG9pbnRzCgkJCQkJCQkkeDEgPSAkcGFyYW1zWygkY2sgLSAzKV0gKyAkeG9mZnNldDsKCQkJCQkJCSR5MSA9ICRwYXJhbXNbKCRjayAtIDIpXSArICR5b2Zmc2V0OwoJCQkJCQkJJHhhID0gKCR4ICsgKDIgKiAkeDEpKSAvIDM7CgkJCQkJCQkkeWEgPSAoJHkgKyAoMiAqICR5MSkpIC8gMzsKCQkJCQkJCSR4ID0gJHBhcmFtc1soJGNrIC0gMSldICsgJHhvZmZzZXQ7CgkJCQkJCQkkeSA9ICRwYXJhbXNbKCRjayldICsgJHlvZmZzZXQ7CgkJCQkJCQkkeGIgPSAoJHggKyAoMiAqICR4MSkpIC8gMzsKCQkJCQkJCSR5YiA9ICgkeSArICgyICogJHkxKSkgLyAzOwoJCQkJCQkJJHRoaXMtPl9vdXRDdXJ2ZSgkeGEsICR5YSwgJHhiLCAkeWIsICR4LCAkeSk7CgkJCQkJCQkkeG1pbiA9IG1pbigkeG1pbiwgJHgsICR4YSwgJHhiKTsKCQkJCQkJCSR5bWluID0gbWluKCR5bWluLCAkeSwgJHlhLCAkeWIpOwoJCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4LCAkeGEsICR4Yik7CgkJCQkJCQkkeW1heCA9IG1heCgkeW1heCwgJHksICR5YSwgJHliKTsKCQkJCQkJCWlmICgkcmVsY29vcmQpIHsKCQkJCQkJCQkkeG9mZnNldCA9ICR4OwoJCQkJCQkJCSR5b2Zmc2V0ID0gJHk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdUJzogeyAvLyBzaG9ydGhhbmQvc21vb3RoIHF1YWRyYXRpYyBCZXppZXIgY3VydmV0bwoJCQkJCWZvcmVhY2ggKCRwYXJhbXMgYXMgJGNrID0+ICRjcCkgewoJCQkJCQkkcGFyYW1zWyRja10gPSAkY3A7CgkJCQkJCWlmICgoJGNrICUgMikgIT0gMCkgewoJCQkJCQkJaWYgKCgka2V5ID4gMCkgQU5EICgoc3RydG91cHBlcigkcGF0aHNbKCRrZXkgLSAxKV1bMV0pID09ICdRJykgT1IgKHN0cnRvdXBwZXIoJHBhdGhzWygka2V5IC0gMSldWzFdKSA9PSAnVCcpKSkgewoJCQkJCQkJCSR4MSA9ICgyICogJHgpIC0gJHgxOwoJCQkJCQkJCSR5MSA9ICgyICogJHkpIC0gJHkxOwoJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkkeDEgPSAkeDsKCQkJCQkJCQkkeTEgPSAkeTsKCQkJCQkJCX0KCQkJCQkJCS8vIGNvbnZlcnQgcXVhZHJhdGljIHBvaW50cyB0byBjdWJpYyBwb2ludHMKCQkJCQkJCSR4YSA9ICgkeCArICgyICogJHgxKSkgLyAzOwoJCQkJCQkJJHlhID0gKCR5ICsgKDIgKiAkeTEpKSAvIDM7CgkJCQkJCQkkeCA9ICRwYXJhbXNbKCRjayAtIDEpXSArICR4b2Zmc2V0OwoJCQkJCQkJJHkgPSAkcGFyYW1zWygkY2spXSArICR5b2Zmc2V0OwoJCQkJCQkJJHhiID0gKCR4ICsgKDIgKiAkeDEpKSAvIDM7CgkJCQkJCQkkeWIgPSAoJHkgKyAoMiAqICR5MSkpIC8gMzsKCQkJCQkJCSR0aGlzLT5fb3V0Q3VydmUoJHhhLCAkeWEsICR4YiwgJHliLCAkeCwgJHkpOwoJCQkJCQkJJHhtaW4gPSBtaW4oJHhtaW4sICR4LCAkeGEsICR4Yik7CgkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHksICR5YSwgJHliKTsKCQkJCQkJCSR4bWF4ID0gbWF4KCR4bWF4LCAkeCwgJHhhLCAkeGIpOwoJCQkJCQkJJHltYXggPSBtYXgoJHltYXgsICR5LCAkeWEsICR5Yik7CgkJCQkJCQlpZiAoJHJlbGNvb3JkKSB7CgkJCQkJCQkJJHhvZmZzZXQgPSAkeDsKCQkJCQkJCQkkeW9mZnNldCA9ICR5OwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJfQoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAnQSc6IHsgLy8gZWxsaXB0aWNhbCBhcmMKCQkJCQlmb3JlYWNoICgkcGFyYW1zIGFzICRjayA9PiAkY3ApIHsKCQkJCQkJJHBhcmFtc1skY2tdID0gJGNwOwoJCQkJCQlpZiAoKCgkY2sgKyAxKSAlIDcpID09IDApIHsKCQkJCQkJCSR4MCA9ICR4OwoJCQkJCQkJJHkwID0gJHk7CgkJCQkJCQkkcnggPSBhYnMoJHBhcmFtc1soJGNrIC0gNildKTsKCQkJCQkJCSRyeSA9IGFicygkcGFyYW1zWygkY2sgLSA1KV0pOwoJCQkJCQkJJGFuZyA9IC0kcmF3cGFyYW1zWygkY2sgLSA0KV07CgkJCQkJCQkkYW5nbGUgPSBkZWcycmFkKCRhbmcpOwoJCQkJCQkJJGZhID0gJHJhd3BhcmFtc1soJGNrIC0gMyldOyAvLyBsYXJnZS1hcmMtZmxhZwoJCQkJCQkJJGZzID0gJHJhd3BhcmFtc1soJGNrIC0gMildOyAvLyBzd2VlcC1mbGFnCgkJCQkJCQkkeCA9ICRwYXJhbXNbKCRjayAtIDEpXSArICR4b2Zmc2V0OwoJCQkJCQkJJHkgPSAkcGFyYW1zWyRja10gKyAkeW9mZnNldDsKCQkJCQkJCWlmICgoYWJzKCR4MCAtICR4KSA8ICRtaW5sZW4pIEFORCAoYWJzKCR5MCAtICR5KSA8ICRtaW5sZW4pKSB7CgkJCQkJCQkJLy8gZW5kcG9pbnRzIGFyZSBhbG1vc3QgaWRlbnRpY2FsCgkJCQkJCQkJJHhtaW4gPSBtaW4oJHhtaW4sICR4KTsKCQkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHkpOwoJCQkJCQkJCSR4bWF4ID0gbWF4KCR4bWF4LCAkeCk7CgkJCQkJCQkJJHltYXggPSBtYXgoJHltYXgsICR5KTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJGNvc19hbmcgPSBjb3MoJGFuZ2xlKTsKCQkJCQkJCQkkc2luX2FuZyA9IHNpbigkYW5nbGUpOwoJCQkJCQkJCSRhID0gKCgkeDAgLSAkeCkgLyAyKTsKCQkJCQkJCQkkYiA9ICgoJHkwIC0gJHkpIC8gMik7CgkJCQkJCQkJJHhhID0gKCRhICogJGNvc19hbmcpIC0gKCRiICogJHNpbl9hbmcpOwoJCQkJCQkJCSR5YSA9ICgkYSAqICRzaW5fYW5nKSArICgkYiAqICRjb3NfYW5nKTsKCQkJCQkJCQkkcngyID0gJHJ4ICogJHJ4OwoJCQkJCQkJCSRyeTIgPSAkcnkgKiAkcnk7CgkJCQkJCQkJJHhhMiA9ICR4YSAqICR4YTsKCQkJCQkJCQkkeWEyID0gJHlhICogJHlhOwoJCQkJCQkJCSRkZWx0YSA9ICgkeGEyIC8gJHJ4MikgKyAoJHlhMiAvICRyeTIpOwoJCQkJCQkJCWlmICgkZGVsdGEgPiAxKSB7CgkJCQkJCQkJCSRyeCAqPSBzcXJ0KCRkZWx0YSk7CgkJCQkJCQkJCSRyeSAqPSBzcXJ0KCRkZWx0YSk7CgkJCQkJCQkJCSRyeDIgPSAkcnggKiAkcng7CgkJCQkJCQkJCSRyeTIgPSAkcnkgKiAkcnk7CgkJCQkJCQkJfQoJCQkJCQkJCSRudW1lcmF0b3IgPSAoKCRyeDIgKiAkcnkyKSAtICgkcngyICogJHlhMikgLSAoJHJ5MiAqICR4YTIpKTsKCQkJCQkJCQlpZiAoJG51bWVyYXRvciA8IDApIHsKCQkJCQkJCQkJJHJvb3QgPSAwOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRyb290ID0gc3FydCgkbnVtZXJhdG9yIC8gKCgkcngyICogJHlhMikgKyAoJHJ5MiAqICR4YTIpKSk7CgkJCQkJCQkJfQoJCQkJCQkJCWlmICgkZmEgPT0gJGZzKXsKCQkJCQkJCQkJJHJvb3QgKj0gLTE7CgkJCQkJCQkJfQoJCQkJCQkJCSRjYXggPSAkcm9vdCAqICgoJHJ4ICogJHlhKSAvICRyeSk7CgkJCQkJCQkJJGNheSA9IC0kcm9vdCAqICgoJHJ5ICogJHhhKSAvICRyeCk7CgkJCQkJCQkJLy8gY29vcmRpbmF0ZXMgb2YgZWxsaXBzZSBjZW50ZXIKCQkJCQkJCQkkY3ggPSAoJGNheCAqICRjb3NfYW5nKSAtICgkY2F5ICogJHNpbl9hbmcpICsgKCgkeDAgKyAkeCkgLyAyKTsKCQkJCQkJCQkkY3kgPSAoJGNheCAqICRzaW5fYW5nKSArICgkY2F5ICogJGNvc19hbmcpICsgKCgkeTAgKyAkeSkgLyAyKTsKCQkJCQkJCQkvLyBnZXQgYW5nbGVzCgkJCQkJCQkJJGFuZ3MgPSBUQ1BERl9TVEFUSUM6OmdldFZlY3RvcnNBbmdsZSgxLCAwLCAoKCR4YSAtICRjYXgpIC8gJHJ4KSwgKCgkY2F5IC0gJHlhKSAvICRyeSkpOwoJCQkJCQkJCSRkYW5nID0gVENQREZfU1RBVElDOjpnZXRWZWN0b3JzQW5nbGUoKCgkeGEgLSAkY2F4KSAvICRyeCksICgoJHlhIC0gJGNheSkgLyAkcnkpLCAoKC0keGEgLSAkY2F4KSAvICRyeCksICgoLSR5YSAtICRjYXkpIC8gJHJ5KSk7CgkJCQkJCQkJaWYgKCgkZnMgPT0gMCkgQU5EICgkZGFuZyA+IDApKSB7CgkJCQkJCQkJCSRkYW5nIC09ICgyICogTV9QSSk7CgkJCQkJCQkJfSBlbHNlaWYgKCgkZnMgPT0gMSkgQU5EICgkZGFuZyA8IDApKSB7CgkJCQkJCQkJCSRkYW5nICs9ICgyICogTV9QSSk7CgkJCQkJCQkJfQoJCQkJCQkJCSRhbmdmID0gJGFuZ3MgLSAkZGFuZzsKCQkJCQkJCQlpZiAoKCgkZnMgPT0gMCkgQU5EICgkYW5ncyA+ICRhbmdmKSkgT1IgKCgkZnMgPT0gMSkgQU5EICgkYW5ncyA8ICRhbmdmKSkpIHsKCQkJCQkJCQkJLy8gcmV2ZXJzZSBhbmdsZXMKCQkJCQkJCQkJJHRtcCA9ICRhbmdzOwoJCQkJCQkJCQkkYW5ncyA9ICRhbmdmOwoJCQkJCQkJCQkkYW5nZiA9ICR0bXA7CgkJCQkJCQkJfQoJCQkJCQkJCSRhbmdzID0gcm91bmQocmFkMmRlZygkYW5ncyksIDYpOwoJCQkJCQkJCSRhbmdmID0gcm91bmQocmFkMmRlZygkYW5nZiksIDYpOwoJCQkJCQkJCS8vIGNvdmVudCBhbmdsZXMgdG8gcG9zaXRpdmUgdmFsdWVzCgkJCQkJCQkJaWYgKCgkYW5ncyA8IDApIEFORCAoJGFuZ2YgPCAwKSkgewoJCQkJCQkJCQkkYW5ncyArPSAzNjA7CgkJCQkJCQkJCSRhbmdmICs9IDM2MDsKCQkJCQkJCQl9CgkJCQkJCQkJJHBpZSA9IGZhbHNlOwoJCQkJCQkJCWlmICgoJGtleSA9PSAwKSBBTkQgKGlzc2V0KCRwYXRoc1soJGtleSArIDEpXVsxXSkpIEFORCAodHJpbSgkcGF0aHNbKCRrZXkgKyAxKV1bMV0pID09ICd6JykpIHsKCQkJCQkJCQkJJHBpZSA9IHRydWU7CgkJCQkJCQkJfQoJCQkJCQkJCWxpc3QoJGF4bWluLCAkYXltaW4sICRheG1heCwgJGF5bWF4KSA9ICR0aGlzLT5fb3V0ZWxsaXB0aWNhbGFyYygkY3gsICRjeSwgJHJ4LCAkcnksICRhbmcsICRhbmdzLCAkYW5nZiwgJHBpZSwgMiwgZmFsc2UsICgkZnMgPT0gMCksIHRydWUpOwoJCQkJCQkJCSR4bWluID0gbWluKCR4bWluLCAkeCwgJGF4bWluKTsKCQkJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHksICRheW1pbik7CgkJCQkJCQkJJHhtYXggPSBtYXgoJHhtYXgsICR4LCAkYXhtYXgpOwoJCQkJCQkJCSR5bWF4ID0gbWF4KCR5bWF4LCAkeSwgJGF5bWF4KTsKCQkJCQkJCX0KCQkJCQkJCWlmICgkcmVsY29vcmQpIHsKCQkJCQkJCQkkeG9mZnNldCA9ICR4OwoJCQkJCQkJCSR5b2Zmc2V0ID0gJHk7CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICdaJzogewoJCQkJCSR0aGlzLT5fb3V0KCdoJyk7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJJGZpcnN0Y21kID0gZmFsc2U7CgkJfSAvLyBlbmQgZm9yZWFjaAoJCWlmICghZW1wdHkoJG9wKSkgewoJCQkkdGhpcy0+X291dCgkb3ApOwoJCX0KCQlyZXR1cm4gYXJyYXkoJHhtaW4sICR5bWluLCAoJHhtYXggLSAkeG1pbiksICgkeW1heCAtICR5bWluKSk7Cgl9CgoJLyoqCgkgKiBTZXRzIHRoZSBvcGVuaW5nIFNWRyBlbGVtZW50IGhhbmRsZXIgZnVuY3Rpb24gZm9yIHRoZSBYTUwgcGFyc2VyLiAoKioqIFRPIEJFIENPTVBMRVRFRCAqKiopCgkgKiBAcGFyYW0gJHBhcnNlciAocmVzb3VyY2UpIFRoZSBmaXJzdCBwYXJhbWV0ZXIsIHBhcnNlciwgaXMgYSByZWZlcmVuY2UgdG8gdGhlIFhNTCBwYXJzZXIgY2FsbGluZyB0aGUgaGFuZGxlci4KCSAqIEBwYXJhbSAkbmFtZSAoc3RyaW5nKSBUaGUgc2Vjb25kIHBhcmFtZXRlciwgbmFtZSwgY29udGFpbnMgdGhlIG5hbWUgb2YgdGhlIGVsZW1lbnQgZm9yIHdoaWNoIHRoaXMgaGFuZGxlciBpcyBjYWxsZWQuIElmIGNhc2UtZm9sZGluZyBpcyBpbiBlZmZlY3QgZm9yIHRoaXMgcGFyc2VyLCB0aGUgZWxlbWVudCBuYW1lIHdpbGwgYmUgaW4gdXBwZXJjYXNlIGxldHRlcnMuCgkgKiBAcGFyYW0gJGF0dHJpYnMgKGFycmF5KSBUaGUgdGhpcmQgcGFyYW1ldGVyLCBhdHRyaWJzLCBjb250YWlucyBhbiBhc3NvY2lhdGl2ZSBhcnJheSB3aXRoIHRoZSBlbGVtZW50J3MgYXR0cmlidXRlcyAoaWYgYW55KS4gVGhlIGtleXMgb2YgdGhpcyBhcnJheSBhcmUgdGhlIGF0dHJpYnV0ZSBuYW1lcywgdGhlIHZhbHVlcyBhcmUgdGhlIGF0dHJpYnV0ZSB2YWx1ZXMuIEF0dHJpYnV0ZSBuYW1lcyBhcmUgY2FzZS1mb2xkZWQgb24gdGhlIHNhbWUgY3JpdGVyaWEgYXMgZWxlbWVudCBuYW1lcy4gQXR0cmlidXRlIHZhbHVlcyBhcmUgbm90IGNhc2UtZm9sZGVkLiBUaGUgb3JpZ2luYWwgb3JkZXIgb2YgdGhlIGF0dHJpYnV0ZXMgY2FuIGJlIHJldHJpZXZlZCBieSB3YWxraW5nIHRocm91Z2ggYXR0cmlicyB0aGUgbm9ybWFsIHdheSwgdXNpbmcgZWFjaCgpLiBUaGUgZmlyc3Qga2V5IGluIHRoZSBhcnJheSB3YXMgdGhlIGZpcnN0IGF0dHJpYnV0ZSwgYW5kIHNvIG9uLgoJICogQHBhcmFtICRjdG0gKGFycmF5KSB0cmFuZm9ybWF0aW9uIG1hdHJpeCBmb3IgY2xpcHBpbmcgbW9kZSAoc3RhcnRpbmcgdHJhbnNmb3JtYXRpb24gbWF0cml4KS4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHN0YXJ0U1ZHRWxlbWVudEhhbmRsZXIoJHBhcnNlciwgJG5hbWUsICRhdHRyaWJzLCAkY3RtPWFycmF5KCkpIHsKCQkvLyBjaGVjayBpZiB3ZSBhcmUgaW4gY2xpcCBtb2RlCgkJaWYgKCR0aGlzLT5zdmdjbGlwbW9kZSkgewoJCQkkdGhpcy0+c3ZnY2xpcHBhdGhzWyR0aGlzLT5zdmdjbGlwaWRdW10gPSBhcnJheSgnbmFtZScgPT4gJG5hbWUsICdhdHRyaWJzJyA9PiAkYXR0cmlicywgJ3RtJyA9PiAkdGhpcy0+c3ZnY2xpcHRtWyR0aGlzLT5zdmdjbGlwaWRdKTsKCQkJcmV0dXJuOwoJCX0KCQlpZiAoJHRoaXMtPnN2Z2RlZnNtb2RlIEFORCAhaW5fYXJyYXkoJG5hbWUsIGFycmF5KCdjbGlwUGF0aCcsICdsaW5lYXJHcmFkaWVudCcsICdyYWRpYWxHcmFkaWVudCcsICdzdG9wJykpKSB7CgkJCWlmIChpc3NldCgkYXR0cmlic1snaWQnXSkpIHsKCQkJCSRhdHRyaWJzWydjaGlsZF9lbGVtZW50cyddID0gYXJyYXkoKTsKCQkJCSR0aGlzLT5zdmdkZWZzWyRhdHRyaWJzWydpZCddXSA9IGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ2F0dHJpYnMnID0+ICRhdHRyaWJzKTsKCQkJCXJldHVybjsKCQkJfQoJCQlpZiAoZW5kKCR0aGlzLT5zdmdkZWZzKSAhPT0gRkFMU0UpIHsKCQkJCSRsYXN0X3N2Z2RlZnNfaWQgPSBrZXkoJHRoaXMtPnN2Z2RlZnMpOwoJCQkJaWYgKGlzc2V0KCR0aGlzLT5zdmdkZWZzWyRsYXN0X3N2Z2RlZnNfaWRdWydhdHRyaWJzJ11bJ2NoaWxkX2VsZW1lbnRzJ10pKSB7CgkJCQkJJGF0dHJpYnNbJ2lkJ10gPSAnREZfJy4oY291bnQoJHRoaXMtPnN2Z2RlZnNbJGxhc3Rfc3ZnZGVmc19pZF1bJ2F0dHJpYnMnXVsnY2hpbGRfZWxlbWVudHMnXSkgKyAxKTsKCQkJCQkkdGhpcy0+c3ZnZGVmc1skbGFzdF9zdmdkZWZzX2lkXVsnYXR0cmlicyddWydjaGlsZF9lbGVtZW50cyddWyRhdHRyaWJzWydpZCddXSA9IGFycmF5KCduYW1lJyA9PiAkbmFtZSwgJ2F0dHJpYnMnID0+ICRhdHRyaWJzKTsKCQkJCQlyZXR1cm47CgkJCQl9CgkJCX0KCQkJcmV0dXJuOwoJCX0KCQkkY2xpcHBpbmcgPSBmYWxzZTsKCQlpZiAoJHBhcnNlciA9PSAnY2xpcC1wYXRoJykgewoJCQkvLyBzZXQgY2xpcHBpbmcgbW9kZQoJCQkkY2xpcHBpbmcgPSB0cnVlOwoJCX0KCQkvLyBnZXQgc3R5bGluZyBwcm9wZXJ0aWVzCgkJJHByZXZfc3Znc3R5bGUgPSAkdGhpcy0+c3Znc3R5bGVzW21heCgwLChjb3VudCgkdGhpcy0+c3Znc3R5bGVzKSAtIDEpKV07IC8vIHByZXZpb3VzIHN0eWxlCgkJJHN2Z3N0eWxlID0gJHRoaXMtPnN2Z3N0eWxlc1swXTsgLy8gc2V0IGRlZmF1bHQgc3R5bGUKCQlpZiAoJGNsaXBwaW5nIEFORCAhaXNzZXQoJGF0dHJpYnNbJ2ZpbGwnXSkgQU5EICghaXNzZXQoJGF0dHJpYnNbJ3N0eWxlJ10pIE9SICghcHJlZ19tYXRjaCgnL1s7XCJcc117MX1maWxsW1xzXSo6W1xzXSooW147XCJdKikvc2knLCAkYXR0cmlic1snc3R5bGUnXSwgJGF0dHJ2YWwpKSkpIHsKCQkJLy8gZGVmYXVsdCBmaWxsIGF0dHJpYnV0ZSBmb3IgY2xpcHBpbmcKCQkJJGF0dHJpYnNbJ2ZpbGwnXSA9ICdub25lJzsKCQl9CgkJaWYgKGlzc2V0KCRhdHRyaWJzWydzdHlsZSddKSBBTkQgIVRDUERGX1NUQVRJQzo6ZW1wdHlfc3RyaW5nKCRhdHRyaWJzWydzdHlsZSddKSBBTkQgKCRhdHRyaWJzWydzdHlsZSddWzBdICE9ICc7JykpIHsKCQkJLy8gZml4IHN0eWxlIGZvciByZWd1bGFyIGV4cHJlc3Npb24KCQkJJGF0dHJpYnNbJ3N0eWxlJ10gPSAnOycuJGF0dHJpYnNbJ3N0eWxlJ107CgkJfQoJCWZvcmVhY2ggKCRwcmV2X3N2Z3N0eWxlIGFzICRrZXkgPT4gJHZhbCkgewoJCQlpZiAoaW5fYXJyYXkoJGtleSwgVENQREZfSU1BR0VTOjokc3ZnaW5oZXJpdHByb3ApKSB7CgkJCQkvLyBpbmhlcml0IHByZXZpb3VzIHZhbHVlCgkJCQkkc3Znc3R5bGVbJGtleV0gPSAkdmFsOwoJCQl9CgkJCWlmIChpc3NldCgkYXR0cmlic1ska2V5XSkgQU5EICFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkYXR0cmlic1ska2V5XSkpIHsKCQkJCS8vIHNwZWNpZmljIGF0dHJpYnV0ZSBzZXR0aW5ncwoJCQkJaWYgKCRhdHRyaWJzWyRrZXldID09ICdpbmhlcml0JykgewoJCQkJCSRzdmdzdHlsZVska2V5XSA9ICR2YWw7CgkJCQl9IGVsc2UgewoJCQkJCSRzdmdzdHlsZVska2V5XSA9ICRhdHRyaWJzWyRrZXldOwoJCQkJfQoJCQl9IGVsc2VpZiAoaXNzZXQoJGF0dHJpYnNbJ3N0eWxlJ10pIEFORCAhVENQREZfU1RBVElDOjplbXB0eV9zdHJpbmcoJGF0dHJpYnNbJ3N0eWxlJ10pKSB7CgkJCQkvLyBDU1Mgc3R5bGUgc3ludGF4CgkJCQkkYXR0cnZhbCA9IGFycmF5KCk7CgkJCQlpZiAocHJlZ19tYXRjaCgnL1s7XCJcc117MX0nLiRrZXkuJ1tcc10qOltcc10qKFteO1wiXSopL3NpJywgJGF0dHJpYnNbJ3N0eWxlJ10sICRhdHRydmFsKSBBTkQgaXNzZXQoJGF0dHJ2YWxbMV0pKSB7CgkJCQkJaWYgKCRhdHRydmFsWzFdID09ICdpbmhlcml0JykgewoJCQkJCQkkc3Znc3R5bGVbJGtleV0gPSAkdmFsOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSRzdmdzdHlsZVska2V5XSA9ICRhdHRydmFsWzFdOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkvLyB0cmFuc2Zvcm1hdGlvbiBtYXRyaXgKCQlpZiAoIWVtcHR5KCRjdG0pKSB7CgkJCSR0bSA9ICRjdG07CgkJfSBlbHNlIHsKCQkJJHRtID0gYXJyYXkoMSwwLDAsMSwwLDApOwoJCX0KCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ3RyYW5zZm9ybSddKSBBTkQgIWVtcHR5KCRhdHRyaWJzWyd0cmFuc2Zvcm0nXSkpIHsKCQkJJHRtID0gVENQREZfU1RBVElDOjpnZXRUcmFuc2Zvcm1hdGlvbk1hdHJpeFByb2R1Y3QoJHRtLCBUQ1BERl9TVEFUSUM6OmdldFNWR1RyYW5zZm9ybU1hdHJpeCgkYXR0cmlic1sndHJhbnNmb3JtJ10pKTsKCQl9CgkJJHN2Z3N0eWxlWyd0cmFuc2ZtYXRyaXgnXSA9ICR0bTsKCQkkaW52aXNpYmxlID0gZmFsc2U7CgkJaWYgKCgkc3Znc3R5bGVbJ3Zpc2liaWxpdHknXSA9PSAnaGlkZGVuJykgT1IgKCRzdmdzdHlsZVsndmlzaWJpbGl0eSddID09ICdjb2xsYXBzZScpIE9SICgkc3Znc3R5bGVbJ2Rpc3BsYXknXSA9PSAnbm9uZScpKSB7CgkJCS8vIHRoZSBjdXJyZW50IGdyYXBoaWNzIGVsZW1lbnQgaXMgaW52aXNpYmxlIChub3RoaW5nIGlzIHBhaW50ZWQpCgkJCSRpbnZpc2libGUgPSB0cnVlOwoJCX0KCQkvLyBwcm9jZXNzIHRhZwoJCXN3aXRjaCgkbmFtZSkgewoJCQljYXNlICdkZWZzJzogewoJCQkJJHRoaXMtPnN2Z2RlZnNtb2RlID0gdHJ1ZTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIGNsaXBQYXRoCgkJCWNhc2UgJ2NsaXBQYXRoJzogewoJCQkJaWYgKCRpbnZpc2libGUpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSR0aGlzLT5zdmdjbGlwbW9kZSA9IHRydWU7CgkJCQlpZiAoIWlzc2V0KCRhdHRyaWJzWydpZCddKSkgewoJCQkJCSRhdHRyaWJzWydpZCddID0gJ0NQXycuKGNvdW50KCR0aGlzLT5zdmdjbGlwdG0pICsgMSk7CgkJCQl9CgkJCQkkdGhpcy0+c3ZnY2xpcGlkID0gJGF0dHJpYnNbJ2lkJ107CgkJCQkkdGhpcy0+c3ZnY2xpcHBhdGhzWyR0aGlzLT5zdmdjbGlwaWRdID0gYXJyYXkoKTsKCQkJCSR0aGlzLT5zdmdjbGlwdG1bJHRoaXMtPnN2Z2NsaXBpZF0gPSAkdG07CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdzdmcnOiB7CgkJCQkvLyBzdGFydCBvZiBTVkcgb2JqZWN0CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdnJzogewoJCQkJLy8gZ3JvdXAgdG9nZXRoZXIgcmVsYXRlZCBncmFwaGljcyBlbGVtZW50cwoJCQkJYXJyYXlfcHVzaCgkdGhpcy0+c3Znc3R5bGVzLCAkc3Znc3R5bGUpOwoJCQkJJHRoaXMtPlN0YXJ0VHJhbnNmb3JtKCk7CgkJCQkkeCA9IChpc3NldCgkYXR0cmlic1sneCddKT8kYXR0cmlic1sneCddOjApOwoJCQkJJHkgPSAoaXNzZXQoJGF0dHJpYnNbJ3knXSk/JGF0dHJpYnNbJ3knXTowKTsKCQkJCSR3ID0gMTsvLyhpc3NldCgkYXR0cmlic1snd2lkdGgnXSk/JGF0dHJpYnNbJ3dpZHRoJ106MSk7CgkJCQkkaCA9IDE7Ly8oaXNzZXQoJGF0dHJpYnNbJ2hlaWdodCddKT8kYXR0cmlic1snaGVpZ2h0J106MSk7CgkJCQkkdG0gPSBUQ1BERl9TVEFUSUM6OmdldFRyYW5zZm9ybWF0aW9uTWF0cml4UHJvZHVjdCgkdG0sIGFycmF5KCR3LCAwLCAwLCAkaCwgJHgsICR5KSk7CgkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkkdGhpcy0+c2V0U1ZHU3R5bGVzKCRzdmdzdHlsZSwgJHByZXZfc3Znc3R5bGUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnbGluZWFyR3JhZGllbnQnOiB7CgkJCQlpZiAoJHRoaXMtPnBkZmFfbW9kZSkgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJaWYgKCFpc3NldCgkYXR0cmlic1snaWQnXSkpIHsKCQkJCQkkYXR0cmlic1snaWQnXSA9ICdHUl8nLihjb3VudCgkdGhpcy0+c3ZnZ3JhZGllbnRzKSArIDEpOwoJCQkJfQoJCQkJJHRoaXMtPnN2Z2dyYWRpZW50aWQgPSAkYXR0cmlic1snaWQnXTsKCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdID0gYXJyYXkoKTsKCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWyd0eXBlJ10gPSAyOwoJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ3N0b3BzJ10gPSBhcnJheSgpOwoJCQkJaWYgKGlzc2V0KCRhdHRyaWJzWydncmFkaWVudFVuaXRzJ10pKSB7CgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ2dyYWRpZW50VW5pdHMnXSA9ICRhdHRyaWJzWydncmFkaWVudFVuaXRzJ107CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWydncmFkaWVudFVuaXRzJ10gPSAnb2JqZWN0Qm91bmRpbmdCb3gnOwoJCQkJfQoJCQkJLy8kYXR0cmlic1snc3ByZWFkTWV0aG9kJ10KCQkJCWlmICgoKCFpc3NldCgkYXR0cmlic1sneDEnXSkpIEFORCAoIWlzc2V0KCRhdHRyaWJzWyd5MSddKSkgQU5EICghaXNzZXQoJGF0dHJpYnNbJ3gyJ10pKSBBTkQgKCFpc3NldCgkYXR0cmlic1sneTInXSkpKQoJCQkJCU9SICgoaXNzZXQoJGF0dHJpYnNbJ3gxJ10pIEFORCAoc3Vic3RyKCRhdHRyaWJzWyd4MSddLCAtMSkgPT0gJyUnKSkKCQkJCQkJT1IgKGlzc2V0KCRhdHRyaWJzWyd5MSddKSBBTkQgKHN1YnN0cigkYXR0cmlic1sneTEnXSwgLTEpID09ICclJykpCgkJCQkJCU9SIChpc3NldCgkYXR0cmlic1sneDInXSkgQU5EIChzdWJzdHIoJGF0dHJpYnNbJ3gyJ10sIC0xKSA9PSAnJScpKQoJCQkJCQlPUiAoaXNzZXQoJGF0dHJpYnNbJ3kyJ10pIEFORCAoc3Vic3RyKCRhdHRyaWJzWyd5MiddLCAtMSkgPT0gJyUnKSkpKSB7CgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ21vZGUnXSA9ICdwZXJjZW50YWdlJzsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ21vZGUnXSA9ICdtZWFzdXJlJzsKCQkJCX0KCQkJCSR4MSA9IChpc3NldCgkYXR0cmlic1sneDEnXSk/JGF0dHJpYnNbJ3gxJ106JzAnKTsKCQkJCSR5MSA9IChpc3NldCgkYXR0cmlic1sneTEnXSk/JGF0dHJpYnNbJ3kxJ106JzAnKTsKCQkJCSR4MiA9IChpc3NldCgkYXR0cmlic1sneDInXSk/JGF0dHJpYnNbJ3gyJ106JzEwMCcpOwoJCQkJJHkyID0gKGlzc2V0KCRhdHRyaWJzWyd5MiddKT8kYXR0cmlic1sneTInXTonMCcpOwoJCQkJaWYgKGlzc2V0KCRhdHRyaWJzWydncmFkaWVudFRyYW5zZm9ybSddKSkgewoJCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWydncmFkaWVudFRyYW5zZm9ybSddID0gVENQREZfU1RBVElDOjpnZXRTVkdUcmFuc2Zvcm1NYXRyaXgoJGF0dHJpYnNbJ2dyYWRpZW50VHJhbnNmb3JtJ10pOwoJCQkJfQoJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ2Nvb3JkcyddID0gYXJyYXkoJHgxLCAkeTEsICR4MiwgJHkyKTsKCQkJCWlmIChpc3NldCgkYXR0cmlic1sneGxpbms6aHJlZiddKSBBTkQgIWVtcHR5KCRhdHRyaWJzWyd4bGluazpocmVmJ10pKSB7CgkJCQkJLy8gZ3JhZGllbnQgaXMgZGVmaW5lZCBvbiBhbm90aGVyIHBsYWNlCgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ3hyZWYnXSA9IHN1YnN0cigkYXR0cmlic1sneGxpbms6aHJlZiddLCAxKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3JhZGlhbEdyYWRpZW50JzogewoJCQkJaWYgKCR0aGlzLT5wZGZhX21vZGUpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmICghaXNzZXQoJGF0dHJpYnNbJ2lkJ10pKSB7CgkJCQkJJGF0dHJpYnNbJ2lkJ10gPSAnR1JfJy4oY291bnQoJHRoaXMtPnN2Z2dyYWRpZW50cykgKyAxKTsKCQkJCX0KCQkJCSR0aGlzLT5zdmdncmFkaWVudGlkID0gJGF0dHJpYnNbJ2lkJ107CgkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXSA9IGFycmF5KCk7CgkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXVsndHlwZSddID0gMzsKCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWydzdG9wcyddID0gYXJyYXkoKTsKCQkJCWlmIChpc3NldCgkYXR0cmlic1snZ3JhZGllbnRVbml0cyddKSkgewoJCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWydncmFkaWVudFVuaXRzJ10gPSAkYXR0cmlic1snZ3JhZGllbnRVbml0cyddOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXVsnZ3JhZGllbnRVbml0cyddID0gJ29iamVjdEJvdW5kaW5nQm94JzsKCQkJCX0KCQkJCS8vJGF0dHJpYnNbJ3NwcmVhZE1ldGhvZCddCgkJCQlpZiAoKCghaXNzZXQoJGF0dHJpYnNbJ2N4J10pKSBBTkQgKCFpc3NldCgkYXR0cmlic1snY3knXSkpKQoJCQkJCU9SICgoaXNzZXQoJGF0dHJpYnNbJ2N4J10pIEFORCAoc3Vic3RyKCRhdHRyaWJzWydjeCddLCAtMSkgPT0gJyUnKSkKCQkJCQkJT1IgKGlzc2V0KCRhdHRyaWJzWydjeSddKSBBTkQgKHN1YnN0cigkYXR0cmlic1snY3knXSwgLTEpID09ICclJykpICkpIHsKCQkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXVsnbW9kZSddID0gJ3BlcmNlbnRhZ2UnOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXVsnbW9kZSddID0gJ21lYXN1cmUnOwoJCQkJfQoJCQkJJGN4ID0gKGlzc2V0KCRhdHRyaWJzWydjeCddKSA/ICRhdHRyaWJzWydjeCddIDogMC41KTsKCQkJCSRjeSA9IChpc3NldCgkYXR0cmlic1snY3knXSkgPyAkYXR0cmlic1snY3knXSA6IDAuNSk7CgkJCQkkZnggPSAoaXNzZXQoJGF0dHJpYnNbJ2Z4J10pID8gJGF0dHJpYnNbJ2Z4J10gOiAkY3gpOwoJCQkJJGZ5ID0gKGlzc2V0KCRhdHRyaWJzWydmeSddKSA/ICRhdHRyaWJzWydmeSddIDogJGN5KTsKCQkJCSRyID0gKGlzc2V0KCRhdHRyaWJzWydyJ10pID8gJGF0dHJpYnNbJ3InXSA6IDAuNSk7CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ2dyYWRpZW50VHJhbnNmb3JtJ10pKSB7CgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ2dyYWRpZW50VHJhbnNmb3JtJ10gPSBUQ1BERl9TVEFUSUM6OmdldFNWR1RyYW5zZm9ybU1hdHJpeCgkYXR0cmlic1snZ3JhZGllbnRUcmFuc2Zvcm0nXSk7CgkJCQl9CgkJCQkkdGhpcy0+c3ZnZ3JhZGllbnRzWyR0aGlzLT5zdmdncmFkaWVudGlkXVsnY29vcmRzJ10gPSBhcnJheSgkY3gsICRjeSwgJGZ4LCAkZnksICRyKTsKCQkJCWlmIChpc3NldCgkYXR0cmlic1sneGxpbms6aHJlZiddKSBBTkQgIWVtcHR5KCRhdHRyaWJzWyd4bGluazpocmVmJ10pKSB7CgkJCQkJLy8gZ3JhZGllbnQgaXMgZGVmaW5lZCBvbiBhbm90aGVyIHBsYWNlCgkJCQkJJHRoaXMtPnN2Z2dyYWRpZW50c1skdGhpcy0+c3ZnZ3JhZGllbnRpZF1bJ3hyZWYnXSA9IHN1YnN0cigkYXR0cmlic1sneGxpbms6aHJlZiddLCAxKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ3N0b3AnOiB7CgkJCQkvLyBncmFkaWVudCBzdG9wcwoJCQkJaWYgKHN1YnN0cigkYXR0cmlic1snb2Zmc2V0J10sIC0xKSA9PSAnJScpIHsKCQkJCQkkb2Zmc2V0ID0gZmxvYXR2YWwoc3Vic3RyKCRhdHRyaWJzWydvZmZzZXQnXSwgLTEpKSAvIDEwMDsKCQkJCX0gZWxzZSB7CgkJCQkJJG9mZnNldCA9IGZsb2F0dmFsKCRhdHRyaWJzWydvZmZzZXQnXSk7CgkJCQkJaWYgKCRvZmZzZXQgPiAxKSB7CgkJCQkJCSRvZmZzZXQgLz0gMTAwOwoJCQkJCX0KCQkJCX0KCQkJCSRzdG9wX2NvbG9yID0gaXNzZXQoJHN2Z3N0eWxlWydzdG9wLWNvbG9yJ10pP1RDUERGX0NPTE9SUzo6Y29udmVydEhUTUxDb2xvclRvRGVjKCRzdmdzdHlsZVsnc3RvcC1jb2xvciddLCAkdGhpcy0+c3BvdF9jb2xvcnMpOidibGFjayc7CgkJCQkkb3BhY2l0eSA9IGlzc2V0KCRzdmdzdHlsZVsnc3RvcC1vcGFjaXR5J10pPyRzdmdzdHlsZVsnc3RvcC1vcGFjaXR5J106MTsKCQkJCSR0aGlzLT5zdmdncmFkaWVudHNbJHRoaXMtPnN2Z2dyYWRpZW50aWRdWydzdG9wcyddW10gPSBhcnJheSgnb2Zmc2V0JyA9PiAkb2Zmc2V0LCAnY29sb3InID0+ICRzdG9wX2NvbG9yLCAnb3BhY2l0eScgPT4gJG9wYWNpdHkpOwoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gcGF0aHMKCQkJY2FzZSAncGF0aCc6IHsKCQkJCWlmICgkaW52aXNpYmxlKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ2QnXSkpIHsKCQkJCQkkZCA9IHRyaW0oJGF0dHJpYnNbJ2QnXSk7CgkJCQkJaWYgKCFlbXB0eSgkZCkpIHsKCQkJCQkJJHggPSAoaXNzZXQoJGF0dHJpYnNbJ3gnXSk/JGF0dHJpYnNbJ3gnXTowKTsKCQkJCQkJJHkgPSAoaXNzZXQoJGF0dHJpYnNbJ3knXSk/JGF0dHJpYnNbJ3knXTowKTsKCQkJCQkJJHcgPSAoaXNzZXQoJGF0dHJpYnNbJ3dpZHRoJ10pPyRhdHRyaWJzWyd3aWR0aCddOjEpOwoJCQkJCQkkaCA9IChpc3NldCgkYXR0cmlic1snaGVpZ2h0J10pPyRhdHRyaWJzWydoZWlnaHQnXToxKTsKCQkJCQkJJHRtID0gVENQREZfU1RBVElDOjpnZXRUcmFuc2Zvcm1hdGlvbk1hdHJpeFByb2R1Y3QoJHRtLCBhcnJheSgkdywgMCwgMCwgJGgsICR4LCAkeSkpOwoJCQkJCQlpZiAoJGNsaXBwaW5nKSB7CgkJCQkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkJCQkkdGhpcy0+U1ZHUGF0aCgkZCwgJ0NOWicpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRoaXMtPlN0YXJ0VHJhbnNmb3JtKCk7CgkJCQkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkJCQkkb2JzdHlsZSA9ICR0aGlzLT5zZXRTVkdTdHlsZXMoJHN2Z3N0eWxlLCAkcHJldl9zdmdzdHlsZSwgJHgsICR5LCAkdywgJGgsICdTVkdQYXRoJywgYXJyYXkoJGQsICdDTlonKSk7CgkJCQkJCQlpZiAoIWVtcHR5KCRvYnN0eWxlKSkgewoJCQkJCQkJCSR0aGlzLT5TVkdQYXRoKCRkLCAkb2JzdHlsZSk7CgkJCQkJCQl9CgkJCQkJCQkkdGhpcy0+U3RvcFRyYW5zZm9ybSgpOwoJCQkJCQl9CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gc2hhcGVzCgkJCWNhc2UgJ3JlY3QnOiB7CgkJCQlpZiAoJGludmlzaWJsZSkgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJHggPSAoaXNzZXQoJGF0dHJpYnNbJ3gnXSk/JHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYXR0cmlic1sneCddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkJJHkgPSAoaXNzZXQoJGF0dHJpYnNbJ3knXSk/JHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYXR0cmlic1sneSddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkJJHcgPSAoaXNzZXQoJGF0dHJpYnNbJ3dpZHRoJ10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3dpZHRoJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCQkkaCA9IChpc3NldCgkYXR0cmlic1snaGVpZ2h0J10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ2hlaWdodCddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkJJHJ4ID0gKGlzc2V0KCRhdHRyaWJzWydyeCddKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWydyeCddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkJJHJ5ID0gKGlzc2V0KCRhdHRyaWJzWydyeSddKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWydyeSddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOiRyeCk7CgkJCQlpZiAoJGNsaXBwaW5nKSB7CgkJCQkJJHRoaXMtPlNWR1RyYW5zZm9ybSgkdG0pOwoJCQkJCSR0aGlzLT5Sb3VuZGVkUmVjdFhZKCR4LCAkeSwgJHcsICRoLCAkcngsICRyeSwgJzExMTEnLCAnQ05aJywgYXJyYXkoKSwgYXJyYXkoKSk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5TdGFydFRyYW5zZm9ybSgpOwoJCQkJCSR0aGlzLT5TVkdUcmFuc2Zvcm0oJHRtKTsKCQkJCQkkb2JzdHlsZSA9ICR0aGlzLT5zZXRTVkdTdHlsZXMoJHN2Z3N0eWxlLCAkcHJldl9zdmdzdHlsZSwgJHgsICR5LCAkdywgJGgsICdSb3VuZGVkUmVjdFhZJywgYXJyYXkoJHgsICR5LCAkdywgJGgsICRyeCwgJHJ5LCAnMTExMScsICdDTlonKSk7CgkJCQkJaWYgKCFlbXB0eSgkb2JzdHlsZSkpIHsKCQkJCQkJJHRoaXMtPlJvdW5kZWRSZWN0WFkoJHgsICR5LCAkdywgJGgsICRyeCwgJHJ5LCAnMTExMScsICRvYnN0eWxlLCBhcnJheSgpLCBhcnJheSgpKTsKCQkJCQl9CgkJCQkJJHRoaXMtPlN0b3BUcmFuc2Zvcm0oKTsKCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ2NpcmNsZSc6IHsKCQkJCWlmICgkaW52aXNpYmxlKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkkciA9IChpc3NldCgkYXR0cmlic1snciddKSA/ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3InXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IDApOwoJCQkJJGN4ID0gKGlzc2V0KCRhdHRyaWJzWydjeCddKSA/ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ2N4J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSkgOiAoaXNzZXQoJGF0dHJpYnNbJ3gnXSkgPyAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWyd4J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSkgOiAwKSk7CgkJCQkkY3kgPSAoaXNzZXQoJGF0dHJpYnNbJ2N5J10pID8gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYXR0cmlic1snY3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IChpc3NldCgkYXR0cmlic1sneSddKSA/ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IDApKTsKCQkJCSR4ID0gKCRjeCAtICRyKTsKCQkJCSR5ID0gKCRjeSAtICRyKTsKCQkJCSR3ID0gKDIgKiAkcik7CgkJCQkkaCA9ICR3OwoJCQkJaWYgKCRjbGlwcGluZykgewoJCQkJCSR0aGlzLT5TVkdUcmFuc2Zvcm0oJHRtKTsKCQkJCQkkdGhpcy0+Q2lyY2xlKCRjeCwgJGN5LCAkciwgMCwgMzYwLCAnQ05aJywgYXJyYXkoKSwgYXJyYXkoKSwgOCk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5TdGFydFRyYW5zZm9ybSgpOwoJCQkJCSR0aGlzLT5TVkdUcmFuc2Zvcm0oJHRtKTsKCQkJCQkkb2JzdHlsZSA9ICR0aGlzLT5zZXRTVkdTdHlsZXMoJHN2Z3N0eWxlLCAkcHJldl9zdmdzdHlsZSwgJHgsICR5LCAkdywgJGgsICdDaXJjbGUnLCBhcnJheSgkY3gsICRjeSwgJHIsIDAsIDM2MCwgJ0NOWicpKTsKCQkJCQlpZiAoIWVtcHR5KCRvYnN0eWxlKSkgewoJCQkJCQkkdGhpcy0+Q2lyY2xlKCRjeCwgJGN5LCAkciwgMCwgMzYwLCAkb2JzdHlsZSwgYXJyYXkoKSwgYXJyYXkoKSwgOCk7CgkJCQkJfQoJCQkJCSR0aGlzLT5TdG9wVHJhbnNmb3JtKCk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdlbGxpcHNlJzogewoJCQkJaWYgKCRpbnZpc2libGUpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSRyeCA9IChpc3NldCgkYXR0cmlic1sncngnXSkgPyAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWydyeCddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpIDogMCk7CgkJCQkkcnkgPSAoaXNzZXQoJGF0dHJpYnNbJ3J5J10pID8gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYXR0cmlic1sncnknXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IDApOwoJCQkJJGN4ID0gKGlzc2V0KCRhdHRyaWJzWydjeCddKSA/ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ2N4J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSkgOiAoaXNzZXQoJGF0dHJpYnNbJ3gnXSkgPyAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWyd4J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSkgOiAwKSk7CgkJCQkkY3kgPSAoaXNzZXQoJGF0dHJpYnNbJ2N5J10pID8gJHRoaXMtPmdldEhUTUxVbml0VG9Vbml0cygkYXR0cmlic1snY3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IChpc3NldCgkYXR0cmlic1sneSddKSA/ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKSA6IDApKTsKCQkJCSR4ID0gKCRjeCAtICRyeCk7CgkJCQkkeSA9ICgkY3kgLSAkcnkpOwoJCQkJJHcgPSAoMiAqICRyeCk7CgkJCQkkaCA9ICgyICogJHJ5KTsKCQkJCWlmICgkY2xpcHBpbmcpIHsKCQkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkJJHRoaXMtPkVsbGlwc2UoJGN4LCAkY3ksICRyeCwgJHJ5LCAwLCAwLCAzNjAsICdDTlonLCBhcnJheSgpLCBhcnJheSgpLCA4KTsKCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPlN0YXJ0VHJhbnNmb3JtKCk7CgkJCQkJJHRoaXMtPlNWR1RyYW5zZm9ybSgkdG0pOwoJCQkJCSRvYnN0eWxlID0gJHRoaXMtPnNldFNWR1N0eWxlcygkc3Znc3R5bGUsICRwcmV2X3N2Z3N0eWxlLCAkeCwgJHksICR3LCAkaCwgJ0VsbGlwc2UnLCBhcnJheSgkY3gsICRjeSwgJHJ4LCAkcnksIDAsIDAsIDM2MCwgJ0NOWicpKTsKCQkJCQlpZiAoIWVtcHR5KCRvYnN0eWxlKSkgewoJCQkJCQkkdGhpcy0+RWxsaXBzZSgkY3gsICRjeSwgJHJ4LCAkcnksIDAsIDAsIDM2MCwgJG9ic3R5bGUsIGFycmF5KCksIGFycmF5KCksIDgpOwoJCQkJCX0KCQkJCQkkdGhpcy0+U3RvcFRyYW5zZm9ybSgpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnbGluZSc6IHsKCQkJCWlmICgkaW52aXNpYmxlKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQkkeDEgPSAoaXNzZXQoJGF0dHJpYnNbJ3gxJ10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3gxJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCQkkeTEgPSAoaXNzZXQoJGF0dHJpYnNbJ3kxJ10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3kxJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCQkkeDIgPSAoaXNzZXQoJGF0dHJpYnNbJ3gyJ10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3gyJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCQkkeTIgPSAoaXNzZXQoJGF0dHJpYnNbJ3kyJ10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3kyJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk6MCk7CgkJCQkkeCA9ICR4MTsKCQkJCSR5ID0gJHkxOwoJCQkJJHcgPSBhYnMoJHgyIC0gJHgxKTsKCQkJCSRoID0gYWJzKCR5MiAtICR5MSk7CgkJCQlpZiAoISRjbGlwcGluZykgewoJCQkJCSR0aGlzLT5TdGFydFRyYW5zZm9ybSgpOwoJCQkJCSR0aGlzLT5TVkdUcmFuc2Zvcm0oJHRtKTsKCQkJCQkkb2JzdHlsZSA9ICR0aGlzLT5zZXRTVkdTdHlsZXMoJHN2Z3N0eWxlLCAkcHJldl9zdmdzdHlsZSwgJHgsICR5LCAkdywgJGgsICdMaW5lJywgYXJyYXkoJHgxLCAkeTEsICR4MiwgJHkyKSk7CgkJCQkJJHRoaXMtPkxpbmUoJHgxLCAkeTEsICR4MiwgJHkyKTsKCQkJCQkkdGhpcy0+U3RvcFRyYW5zZm9ybSgpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAncG9seWxpbmUnOgoJCQljYXNlICdwb2x5Z29uJzogewoJCQkJaWYgKCRpbnZpc2libGUpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSRwb2ludHMgPSAoaXNzZXQoJGF0dHJpYnNbJ3BvaW50cyddKT8kYXR0cmlic1sncG9pbnRzJ106JzAgMCcpOwoJCQkJJHBvaW50cyA9IHRyaW0oJHBvaW50cyk7CgkJCQkvLyBub3RlIHRoYXQgcG9pbnQgbWF5IHVzZSBhIGNvbXBsZXggc3ludGF4IG5vdCBjb3ZlcmVkIGhlcmUKCQkJCSRwb2ludHMgPSBwcmVnX3NwbGl0KCcvW1wsXHNdKy9zaScsICRwb2ludHMpOwoJCQkJaWYgKGNvdW50KCRwb2ludHMpIDwgNCkgewoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJJHAgPSBhcnJheSgpOwoJCQkJJHhtaW4gPSAyMTQ3NDgzNjQ3OwoJCQkJJHhtYXggPSAwOwoJCQkJJHltaW4gPSAyMTQ3NDgzNjQ3OwoJCQkJJHltYXggPSAwOwoJCQkJZm9yZWFjaCAoJHBvaW50cyBhcyAka2V5ID0+ICR2YWwpIHsKCQkJCQkkcFska2V5XSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJHZhbCwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTsKCQkJCQlpZiAoKCRrZXkgJSAyKSA9PSAwKSB7CgkJCQkJCS8vIFggY29vcmRpbmF0ZQoJCQkJCQkkeG1pbiA9IG1pbigkeG1pbiwgJHBbJGtleV0pOwoJCQkJCQkkeG1heCA9IG1heCgkeG1heCwgJHBbJGtleV0pOwoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIFkgY29vcmRpbmF0ZQoJCQkJCQkkeW1pbiA9IG1pbigkeW1pbiwgJHBbJGtleV0pOwoJCQkJCQkkeW1heCA9IG1heCgkeW1heCwgJHBbJGtleV0pOwoJCQkJCX0KCQkJCX0KCQkJCSR4ID0gJHhtaW47CgkJCQkkeSA9ICR5bWluOwoJCQkJJHcgPSAoJHhtYXggLSAkeG1pbik7CgkJCQkkaCA9ICgkeW1heCAtICR5bWluKTsKCQkJCWlmICgkbmFtZSA9PSAncG9seWxpbmUnKSB7CgkJCQkJJHRoaXMtPlN0YXJ0VHJhbnNmb3JtKCk7CgkJCQkJJHRoaXMtPlNWR1RyYW5zZm9ybSgkdG0pOwoJCQkJCSRvYnN0eWxlID0gJHRoaXMtPnNldFNWR1N0eWxlcygkc3Znc3R5bGUsICRwcmV2X3N2Z3N0eWxlLCAkeCwgJHksICR3LCAkaCwgJ1BvbHlMaW5lJywgYXJyYXkoJHAsICdDTlonKSk7CgkJCQkJaWYgKCFlbXB0eSgkb2JzdHlsZSkpIHsKCQkJCQkJJHRoaXMtPlBvbHlMaW5lKCRwLCAkb2JzdHlsZSwgYXJyYXkoKSwgYXJyYXkoKSk7CgkJCQkJfQoJCQkJCSR0aGlzLT5TdG9wVHJhbnNmb3JtKCk7CgkJCQl9IGVsc2UgeyAvLyBwb2x5Z29uCgkJCQkJaWYgKCRjbGlwcGluZykgewoJCQkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkJCSR0aGlzLT5Qb2x5Z29uKCRwLCAnQ05aJywgYXJyYXkoKSwgYXJyYXkoKSwgdHJ1ZSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPlN0YXJ0VHJhbnNmb3JtKCk7CgkJCQkJCSR0aGlzLT5TVkdUcmFuc2Zvcm0oJHRtKTsKCQkJCQkJJG9ic3R5bGUgPSAkdGhpcy0+c2V0U1ZHU3R5bGVzKCRzdmdzdHlsZSwgJHByZXZfc3Znc3R5bGUsICR4LCAkeSwgJHcsICRoLCAnUG9seWdvbicsIGFycmF5KCRwLCAnQ05aJykpOwoJCQkJCQlpZiAoIWVtcHR5KCRvYnN0eWxlKSkgewoJCQkJCQkJJHRoaXMtPlBvbHlnb24oJHAsICRvYnN0eWxlLCBhcnJheSgpLCBhcnJheSgpLCB0cnVlKTsKCQkJCQkJfQoJCQkJCQkkdGhpcy0+U3RvcFRyYW5zZm9ybSgpOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCS8vIGltYWdlCgkJCWNhc2UgJ2ltYWdlJzogewoJCQkJaWYgKCRpbnZpc2libGUpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmICghaXNzZXQoJGF0dHJpYnNbJ3hsaW5rOmhyZWYnXSkgT1IgZW1wdHkoJGF0dHJpYnNbJ3hsaW5rOmhyZWYnXSkpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCSR4ID0gKGlzc2V0KCRhdHRyaWJzWyd4J10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3gnXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTowKTsKCQkJCSR5ID0gKGlzc2V0KCRhdHRyaWJzWyd5J10pPyR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTowKTsKCQkJCSR3ID0gKGlzc2V0KCRhdHRyaWJzWyd3aWR0aCddKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWyd3aWR0aCddLCAwLCAkdGhpcy0+c3ZndW5pdCwgZmFsc2UpOjApOwoJCQkJJGggPSAoaXNzZXQoJGF0dHJpYnNbJ2hlaWdodCddKT8kdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRhdHRyaWJzWydoZWlnaHQnXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTowKTsKCQkJCSRpbWcgPSAkYXR0cmlic1sneGxpbms6aHJlZiddOwoJCQkJaWYgKCEkY2xpcHBpbmcpIHsKCQkJCQkkdGhpcy0+U3RhcnRUcmFuc2Zvcm0oKTsKCQkJCQkkdGhpcy0+U1ZHVHJhbnNmb3JtKCR0bSk7CgkJCQkJJG9ic3R5bGUgPSAkdGhpcy0+c2V0U1ZHU3R5bGVzKCRzdmdzdHlsZSwgJHByZXZfc3Znc3R5bGUsICR4LCAkeSwgJHcsICRoKTsKCQkJCQlpZiAocHJlZ19tYXRjaCgnL15kYXRhOmltYWdlXC9bXjtdKztiYXNlNjQsLycsICRpbWcsICRtKSA+IDApIHsKCQkJCQkJLy8gZW1iZWRkZWQgaW1hZ2UgZW5jb2RlZCBhcyBiYXNlNjQKCQkJCQkJJGltZyA9ICdAJy5iYXNlNjRfZGVjb2RlKHN1YnN0cigkaW1nLCBzdHJsZW4oJG1bMF0pKSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJLy8gZml4IGltYWdlIHBhdGgKCQkJCQkJaWYgKCFUQ1BERl9TVEFUSUM6OmVtcHR5X3N0cmluZygkdGhpcy0+c3ZnZGlyKSBBTkQgKCgkaW1nWzBdID09ICcuJykgT1IgKGJhc2VuYW1lKCRpbWcpID09ICRpbWcpKSkgewoJCQkJCQkJLy8gcmVwbGFjZSByZWxhdGl2ZSBwYXRoIHdpdGggZnVsbCBzZXJ2ZXIgcGF0aAoJCQkJCQkJJGltZyA9ICR0aGlzLT5zdmdkaXIuJy8nLiRpbWc7CgkJCQkJCX0KCQkJCQkJaWYgKCgkaW1nWzBdID09ICcvJykgQU5EICFlbXB0eSgkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSBBTkQgKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gIT0gJy8nKSkgewoJCQkJCQkJJGZpbmRyb290ID0gc3RycG9zKCRpbWcsICRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pOwoJCQkJCQkJaWYgKCgkZmluZHJvb3QgPT09IGZhbHNlKSBPUiAoJGZpbmRyb290ID4gMSkpIHsKCQkJCQkJCQlpZiAoc3Vic3RyKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10sIC0xKSA9PSAnLycpIHsKCQkJCQkJCQkJJGltZyA9IHN1YnN0cigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLCAwLCAtMSkuJGltZzsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkaW1nID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4kaW1nOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJfQoJCQkJCQkkaW1nID0gdXJsZGVjb2RlKCRpbWcpOwoJCQkJCQkkdGVzdHNjcnR5cGUgPSBAcGFyc2VfdXJsKCRpbWcpOwoJCQkJCQlpZiAoIWlzc2V0KCR0ZXN0c2NydHlwZVsncXVlcnknXSkgT1IgZW1wdHkoJHRlc3RzY3J0eXBlWydxdWVyeSddKSkgewoJCQkJCQkJLy8gY29udmVydCBVUkwgdG8gc2VydmVyIHBhdGgKCQkJCQkJCSRpbWcgPSBzdHJfcmVwbGFjZShLX1BBVEhfVVJMLCBLX1BBVEhfTUFJTiwgJGltZyk7CgkJCQkJCX0KCQkJCQl9CgkJCQkJLy8gZ2V0IGltYWdlIHR5cGUKCQkJCQkkaW1ndHlwZSA9IFRDUERGX0lNQUdFUzo6Z2V0SW1hZ2VGaWxlVHlwZSgkaW1nKTsKCQkJCQlpZiAoKCRpbWd0eXBlID09ICdlcHMnKSBPUiAoJGltZ3R5cGUgPT0gJ2FpJykpIHsKCQkJCQkJJHRoaXMtPkltYWdlRXBzKCRpbWcsICR4LCAkeSwgJHcsICRoKTsKCQkJCQl9IGVsc2VpZiAoJGltZ3R5cGUgPT0gJ3N2ZycpIHsKCQkJCQkJJHRoaXMtPkltYWdlU1ZHKCRpbWcsICR4LCAkeSwgJHcsICRoKTsKCQkJCQl9IGVsc2UgewoJCQkJCQkkdGhpcy0+SW1hZ2UoJGltZywgJHgsICR5LCAkdywgJGgpOwoJCQkJCX0KCQkJCQkkdGhpcy0+U3RvcFRyYW5zZm9ybSgpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJLy8gdGV4dAoJCQljYXNlICd0ZXh0JzoKCQkJY2FzZSAndHNwYW4nOiB7CgkJCQkvLyBvbmx5IGJhc2ljIHN1cHBvcnQgLSBhZHZhbmNlZCBmZWF0dXJlcyBtdXN0IGJlIGltcGxlbWVudGVkCgkJCQkkdGhpcy0+c3ZndGV4dG1vZGVbJ2ludmlzaWJsZSddID0gJGludmlzaWJsZTsKCQkJCWlmICgkaW52aXNpYmxlKSB7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQlhcnJheV9wdXNoKCR0aGlzLT5zdmdzdHlsZXMsICRzdmdzdHlsZSk7CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ3gnXSkpIHsKCQkJCQkkeCA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3gnXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTsKCQkJCX0gZWxzZWlmICgkbmFtZSA9PSAndHNwYW4nKSB7CgkJCQkJJHggPSAkdGhpcy0+eDsKCQkJCX0gZWxzZSB7CgkJCQkJJHggPSAwOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRhdHRyaWJzWydkeCddKSkgewoJCQkJCSR4ICs9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ2R4J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCQl9CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ3knXSkpIHsKCQkJCQkkeSA9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ3knXSwgMCwgJHRoaXMtPnN2Z3VuaXQsIGZhbHNlKTsKCQkJCX0gZWxzZWlmICgkbmFtZSA9PSAndHNwYW4nKSB7CgkJCQkJJHkgPSAkdGhpcy0+eTsKCQkJCX0gZWxzZSB7CgkJCQkJJHkgPSAwOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRhdHRyaWJzWydkeSddKSkgewoJCQkJCSR5ICs9ICR0aGlzLT5nZXRIVE1MVW5pdFRvVW5pdHMoJGF0dHJpYnNbJ2R5J10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCQl9CgkJCQkkc3Znc3R5bGVbJ3RleHQtY29sb3InXSA9ICRzdmdzdHlsZVsnZmlsbCddOwoJCQkJJHRoaXMtPnN2Z3RleHQgPSAnJzsKCQkJCWlmIChpc3NldCgkc3Znc3R5bGVbJ3RleHQtYW5jaG9yJ10pKSB7CgkJCQkJJHRoaXMtPnN2Z3RleHRtb2RlWyd0ZXh0LWFuY2hvciddID0gJHN2Z3N0eWxlWyd0ZXh0LWFuY2hvciddOwoJCQkJfSBlbHNlIHsKCQkJCQkkdGhpcy0+c3ZndGV4dG1vZGVbJ3RleHQtYW5jaG9yJ10gPSAnc3RhcnQnOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRzdmdzdHlsZVsnZGlyZWN0aW9uJ10pKSB7CgkJCQkJaWYgKCRzdmdzdHlsZVsnZGlyZWN0aW9uJ10gPT0gJ3J0bCcpIHsKCQkJCQkJJHRoaXMtPnN2Z3RleHRtb2RlWydydGwnXSA9IHRydWU7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHRoaXMtPnN2Z3RleHRtb2RlWydydGwnXSA9IGZhbHNlOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJJHRoaXMtPnN2Z3RleHRtb2RlWydydGwnXSA9IGZhbHNlOwoJCQkJfQoJCQkJaWYgKGlzc2V0KCRzdmdzdHlsZVsnc3Ryb2tlJ10pIEFORCAoJHN2Z3N0eWxlWydzdHJva2UnXSAhPSAnbm9uZScpIEFORCBpc3NldCgkc3Znc3R5bGVbJ3N0cm9rZS13aWR0aCddKSBBTkQgKCRzdmdzdHlsZVsnc3Ryb2tlLXdpZHRoJ10gPiAwKSkgewoJCQkJCSR0aGlzLT5zdmd0ZXh0bW9kZVsnc3Ryb2tlJ10gPSAkdGhpcy0+Z2V0SFRNTFVuaXRUb1VuaXRzKCRzdmdzdHlsZVsnc3Ryb2tlLXdpZHRoJ10sIDAsICR0aGlzLT5zdmd1bml0LCBmYWxzZSk7CgkJCQl9IGVsc2UgewoJCQkJCSR0aGlzLT5zdmd0ZXh0bW9kZVsnc3Ryb2tlJ10gPSBmYWxzZTsKCQkJCX0KCQkJCSR0aGlzLT5TdGFydFRyYW5zZm9ybSgpOwoJCQkJJHRoaXMtPlNWR1RyYW5zZm9ybSgkdG0pOwoJCQkJJG9ic3R5bGUgPSAkdGhpcy0+c2V0U1ZHU3R5bGVzKCRzdmdzdHlsZSwgJHByZXZfc3Znc3R5bGUsICR4LCAkeSwgMSwgMSk7CgkJCQkkdGhpcy0+eCA9ICR4OwoJCQkJJHRoaXMtPnkgPSAkeTsKCQkJCWJyZWFrOwoJCQl9CgkJCS8vIHVzZQoJCQljYXNlICd1c2UnOiB7CgkJCQlpZiAoaXNzZXQoJGF0dHJpYnNbJ3hsaW5rOmhyZWYnXSkgQU5EICFlbXB0eSgkYXR0cmlic1sneGxpbms6aHJlZiddKSkgewoJCQkJCSRzdmdkZWZpZCA9IHN1YnN0cigkYXR0cmlic1sneGxpbms6aHJlZiddLCAxKTsKCQkJCQlpZiAoaXNzZXQoJHRoaXMtPnN2Z2RlZnNbJHN2Z2RlZmlkXSkpIHsKCQkJCQkJJHVzZSA9ICR0aGlzLT5zdmdkZWZzWyRzdmdkZWZpZF07CgkJCQkJCWlmIChpc3NldCgkYXR0cmlic1sneGxpbms6aHJlZiddKSkgewoJCQkJCQkJdW5zZXQoJGF0dHJpYnNbJ3hsaW5rOmhyZWYnXSk7CgkJCQkJCX0KCQkJCQkJaWYgKGlzc2V0KCRhdHRyaWJzWydpZCddKSkgewoJCQkJCQkJdW5zZXQoJGF0dHJpYnNbJ2lkJ10pOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdXNlWydhdHRyaWJzJ11bJ3gnXSkgQU5EIGlzc2V0KCRhdHRyaWJzWyd4J10pKSB7CgkJCQkJCQkkYXR0cmlic1sneCddICs9ICR1c2VbJ2F0dHJpYnMnXVsneCddOwoJCQkJCQl9CgkJCQkJCWlmIChpc3NldCgkdXNlWydhdHRyaWJzJ11bJ3knXSkgQU5EIGlzc2V0KCRhdHRyaWJzWyd5J10pKSB7CgkJCQkJCQkkYXR0cmlic1sneSddICs9ICR1c2VbJ2F0dHJpYnMnXVsneSddOwoJCQkJCQl9CgkJCQkJCWlmIChlbXB0eSgkYXR0cmlic1snc3R5bGUnXSkpIHsKCQkJCQkJCSRhdHRyaWJzWydzdHlsZSddID0gJyc7CgkJCQkJCX0KCQkJCQkJaWYgKCFlbXB0eSgkdXNlWydhdHRyaWJzJ11bJ3N0eWxlJ10pKSB7CgkJCQkJCQkvLyBtZXJnZSBzdHlsZXMKCQkJCQkJCSRhdHRyaWJzWydzdHlsZSddID0gc3RyX3JlcGxhY2UoJzs7JywnOycsJzsnLiR1c2VbJ2F0dHJpYnMnXVsnc3R5bGUnXS4kYXR0cmlic1snc3R5bGUnXSk7CgkJCQkJCX0KCQkJCQkJJGF0dHJpYnMgPSBhcnJheV9tZXJnZSgkdXNlWydhdHRyaWJzJ10sICRhdHRyaWJzKTsKCQkJCQkJJHRoaXMtPnN0YXJ0U1ZHRWxlbWVudEhhbmRsZXIoJ3VzZS10YWcnLCAkdXNlWyduYW1lJ10sICRhdHRyaWJzKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWRlZmF1bHQ6IHsKCQkJCWJyZWFrOwoJCQl9CgkJfSAvLyBlbmQgb2Ygc3dpdGNoCgkJLy8gcHJvY2VzcyBjaGlsZCBlbGVtZW50cwoJCWlmICghZW1wdHkoJGF0dHJpYnNbJ2NoaWxkX2VsZW1lbnRzJ10pKSB7CgkJCSRjaGlsZF9lbGVtZW50cyA9ICRhdHRyaWJzWydjaGlsZF9lbGVtZW50cyddOwoJCQl1bnNldCgkYXR0cmlic1snY2hpbGRfZWxlbWVudHMnXSk7CgkJCWZvcmVhY2goJGNoaWxkX2VsZW1lbnRzIGFzICRjaGlsZF9lbGVtZW50KSB7CgkJCQlpZiAoZW1wdHkoJGNoaWxkX2VsZW1lbnRbJ2F0dHJpYnMnXVsnY2xvc2luZ190YWcnXSkpIHsKCQkJCQkkdGhpcy0+c3RhcnRTVkdFbGVtZW50SGFuZGxlcignY2hpbGQtdGFnJywgJGNoaWxkX2VsZW1lbnRbJ25hbWUnXSwgJGNoaWxkX2VsZW1lbnRbJ2F0dHJpYnMnXSk7CgkJCQl9IGVsc2UgewoJCQkJCWlmIChpc3NldCgkY2hpbGRfZWxlbWVudFsnYXR0cmlicyddWydjb250ZW50J10pKSB7CgkJCQkJCSR0aGlzLT5zdmd0ZXh0ID0gJGNoaWxkX2VsZW1lbnRbJ2F0dHJpYnMnXVsnY29udGVudCddOwoJCQkJCX0KCQkJCQkkdGhpcy0+ZW5kU1ZHRWxlbWVudEhhbmRsZXIoJ2NoaWxkLXRhZycsICRjaGlsZF9lbGVtZW50WyduYW1lJ10pOwoJCQkJfQoJCQl9CgkJfQoJfQoKCS8qKgoJICogU2V0cyB0aGUgY2xvc2luZyBTVkcgZWxlbWVudCBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGUgWE1MIHBhcnNlci4KCSAqIEBwYXJhbSAkcGFyc2VyIChyZXNvdXJjZSkgVGhlIGZpcnN0IHBhcmFtZXRlciwgcGFyc2VyLCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgWE1MIHBhcnNlciBjYWxsaW5nIHRoZSBoYW5kbGVyLgoJICogQHBhcmFtICRuYW1lIChzdHJpbmcpIFRoZSBzZWNvbmQgcGFyYW1ldGVyLCBuYW1lLCBjb250YWlucyB0aGUgbmFtZSBvZiB0aGUgZWxlbWVudCBmb3Igd2hpY2ggdGhpcyBoYW5kbGVyIGlzIGNhbGxlZC4gSWYgY2FzZS1mb2xkaW5nIGlzIGluIGVmZmVjdCBmb3IgdGhpcyBwYXJzZXIsIHRoZSBlbGVtZW50IG5hbWUgd2lsbCBiZSBpbiB1cHBlcmNhc2UgbGV0dGVycy4KCSAqIEBhdXRob3IgTmljb2xhIEFzdW5pCgkgKiBAc2luY2UgNS4wLjAwMCAoMjAxMC0wNS0wMikKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGVuZFNWR0VsZW1lbnRIYW5kbGVyKCRwYXJzZXIsICRuYW1lKSB7CgkJaWYgKCR0aGlzLT5zdmdkZWZzbW9kZSBBTkQgIWluX2FycmF5KCRuYW1lLCBhcnJheSgnZGVmcycsICdjbGlwUGF0aCcsICdsaW5lYXJHcmFkaWVudCcsICdyYWRpYWxHcmFkaWVudCcsICdzdG9wJykpKSB7OwoJCQlpZiAoZW5kKCR0aGlzLT5zdmdkZWZzKSAhPT0gRkFMU0UpIHsKCQkJCSRsYXN0X3N2Z2RlZnNfaWQgPSBrZXkoJHRoaXMtPnN2Z2RlZnMpOwoJCQkJaWYgKGlzc2V0KCR0aGlzLT5zdmdkZWZzWyRsYXN0X3N2Z2RlZnNfaWRdWydhdHRyaWJzJ11bJ2NoaWxkX2VsZW1lbnRzJ10pKSB7CgkJCQkJZm9yZWFjaCgkdGhpcy0+c3ZnZGVmc1skbGFzdF9zdmdkZWZzX2lkXVsnYXR0cmlicyddWydjaGlsZF9lbGVtZW50cyddIGFzICRjaGlsZF9lbGVtZW50KSB7CgkJCQkJCWlmIChpc3NldCgkY2hpbGRfZWxlbWVudFsnYXR0cmlicyddWydpZCddKSBBTkQgKCRjaGlsZF9lbGVtZW50WyduYW1lJ10gPT0gJG5hbWUpKSB7CgkJCQkJCQkkdGhpcy0+c3ZnZGVmc1skbGFzdF9zdmdkZWZzX2lkXVsnYXR0cmlicyddWydjaGlsZF9lbGVtZW50cyddWyRjaGlsZF9lbGVtZW50WydhdHRyaWJzJ11bJ2lkJ10uJ19DTE9TRSddID0gYXJyYXkoJ25hbWUnID0+ICRuYW1lLCAnYXR0cmlicycgPT4gYXJyYXkoJ2Nsb3NpbmdfdGFnJyA9PiBUUlVFLCAnY29udGVudCcgPT4gJHRoaXMtPnN2Z3RleHQpKTsKCQkJCQkJCXJldHVybjsKCQkJCQkJfQoJCQkJCX0KCQkJCQlpZiAoJHRoaXMtPnN2Z2RlZnNbJGxhc3Rfc3ZnZGVmc19pZF1bJ25hbWUnXSA9PSAkbmFtZSkgewoJCQkJCQkkdGhpcy0+c3ZnZGVmc1skbGFzdF9zdmdkZWZzX2lkXVsnYXR0cmlicyddWydjaGlsZF9lbGVtZW50cyddWyRsYXN0X3N2Z2RlZnNfaWQuJ19DTE9TRSddID0gYXJyYXkoJ25hbWUnID0+ICRuYW1lLCAnYXR0cmlicycgPT4gYXJyYXkoJ2Nsb3NpbmdfdGFnJyA9PiBUUlVFLCAnY29udGVudCcgPT4gJHRoaXMtPnN2Z3RleHQpKTsKCQkJCQkJcmV0dXJuOwoJCQkJCX0KCQkJCX0KCQkJfQoJCQlyZXR1cm47CgkJfQoJCXN3aXRjaCgkbmFtZSkgewoJCQljYXNlICdkZWZzJzogewoJCQkJJHRoaXMtPnN2Z2RlZnNtb2RlID0gZmFsc2U7CgkJCQlicmVhazsKCQkJfQoJCQkvLyBjbGlwUGF0aAoJCQljYXNlICdjbGlwUGF0aCc6IHsKCQkJCSR0aGlzLT5zdmdjbGlwbW9kZSA9IGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnZyc6IHsKCQkJCS8vIHVuZ3JvdXA6IHJlbW92ZSBsYXN0IHN0eWxlIGZyb20gYXJyYXkKCQkJCWFycmF5X3BvcCgkdGhpcy0+c3Znc3R5bGVzKTsKCQkJCSR0aGlzLT5TdG9wVHJhbnNmb3JtKCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICd0ZXh0JzoKCQkJY2FzZSAndHNwYW4nOiB7CgkJCQlpZiAoJHRoaXMtPnN2Z3RleHRtb2RlWydpbnZpc2libGUnXSkgewoJCQkJCS8vIFRoaXMgaW1wbGVtZW50YXRpb24gbXVzdCBiZSBmaXhlZCB0byBmb2xsb3dpbmcgdGhlIHJ1bGU6CgkJCQkJLy8gSWYgdGhlICd2aXNpYmlsaXR5JyBwcm9wZXJ0eSBpcyBzZXQgdG8gaGlkZGVuIG9uIGEgJ3RzcGFuJywgJ3RyZWYnIG9yICdhbHRHbHlwaCcgZWxlbWVudCwgdGhlbiB0aGUgdGV4dCBpcyBpbnZpc2libGUgYnV0IHN0aWxsIHRha2VzIHVwIHNwYWNlIGluIHRleHQgbGF5b3V0IGNhbGN1bGF0aW9ucy4KCQkJCQlicmVhazsKCQkJCX0KCQkJCS8vIHByaW50IHRleHQKCQkJCSR0ZXh0ID0gJHRoaXMtPnN2Z3RleHQ7CgkJCQkvLyR0ZXh0ID0gJHRoaXMtPnN0cmluZ1RyaW0oJHRleHQpOwoJCQkJJHRleHRsZW4gPSAkdGhpcy0+R2V0U3RyaW5nV2lkdGgoJHRleHQpOwoJCQkJaWYgKCR0aGlzLT5zdmd0ZXh0bW9kZVsndGV4dC1hbmNob3InXSAhPSAnc3RhcnQnKSB7CgkJCQkJLy8gY2hlY2sgaWYgc3RyaW5nIGlzIFJUTCB0ZXh0CgkJCQkJaWYgKCR0aGlzLT5zdmd0ZXh0bW9kZVsndGV4dC1hbmNob3InXSA9PSAnZW5kJykgewoJCQkJCQlpZiAoJHRoaXMtPnN2Z3RleHRtb2RlWydydGwnXSkgewoJCQkJCQkJJHRoaXMtPnggKz0gJHRleHRsZW47CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkdGhpcy0+eCAtPSAkdGV4dGxlbjsKCQkJCQkJfQoJCQkJCX0gZWxzZWlmICgkdGhpcy0+c3ZndGV4dG1vZGVbJ3RleHQtYW5jaG9yJ10gPT0gJ21pZGRsZScpIHsKCQkJCQkJaWYgKCR0aGlzLT5zdmd0ZXh0bW9kZVsncnRsJ10pIHsKCQkJCQkJCSR0aGlzLT54ICs9ICgkdGV4dGxlbiAvIDIpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHRoaXMtPnggLT0gKCR0ZXh0bGVuIC8gMik7CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCQkkdGV4dHJlbmRlcm1vZGUgPSAkdGhpcy0+dGV4dHJlbmRlcm1vZGU7CgkJCQkkdGV4dHN0cm9rZXdpZHRoID0gJHRoaXMtPnRleHRzdHJva2V3aWR0aDsKCQkJCSR0aGlzLT5zZXRUZXh0UmVuZGVyaW5nTW9kZSgkdGhpcy0+c3ZndGV4dG1vZGVbJ3N0cm9rZSddLCB0cnVlLCBmYWxzZSk7CgkJCQlpZiAoJG5hbWUgPT0gJ3RleHQnKSB7CgkJCQkJLy8gc3RvcmUgY3VycmVudCBjb29yZGluYXRlcwoJCQkJCSR0bXB4ID0gJHRoaXMtPng7CgkJCQkJJHRtcHkgPSAkdGhpcy0+eTsKCQkJCX0KCQkJCSR0aGlzLT5DZWxsKCR0ZXh0bGVuLCAwLCAkdGV4dCwgMCwgMCwgJycsIGZhbHNlLCAnJywgMCwgZmFsc2UsICdMJywgJ1QnKTsKCQkJCWlmICgkbmFtZSA9PSAndGV4dCcpIHsKCQkJCQkvLyByZXN0b3JlIGNvb3JkaW5hdGVzCgkJCQkJJHRoaXMtPnggPSAkdG1weDsKCQkJCQkkdGhpcy0+eSA9ICR0bXB5OwoJCQkJfQoJCQkJLy8gcmVzdG9yZSBwcmV2aW91cyByZW5kZXJpbmcgbW9kZQoJCQkJJHRoaXMtPnRleHRyZW5kZXJtb2RlID0gJHRleHRyZW5kZXJtb2RlOwoJCQkJJHRoaXMtPnRleHRzdHJva2V3aWR0aCA9ICR0ZXh0c3Ryb2tld2lkdGg7CgkJCQkkdGhpcy0+c3ZndGV4dCA9ICcnOwoJCQkJJHRoaXMtPlN0b3BUcmFuc2Zvcm0oKTsKCQkJCWlmICghJHRoaXMtPnN2Z2RlZnNtb2RlKSB7CgkJCQkJYXJyYXlfcG9wKCR0aGlzLT5zdmdzdHlsZXMpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJYnJlYWs7CgkJCX0KCQl9Cgl9CgoJLyoqCgkgKiBTZXRzIHRoZSBjaGFyYWN0ZXIgZGF0YSBoYW5kbGVyIGZ1bmN0aW9uIGZvciB0aGUgWE1MIHBhcnNlci4KCSAqIEBwYXJhbSAkcGFyc2VyIChyZXNvdXJjZSkgVGhlIGZpcnN0IHBhcmFtZXRlciwgcGFyc2VyLCBpcyBhIHJlZmVyZW5jZSB0byB0aGUgWE1MIHBhcnNlciBjYWxsaW5nIHRoZSBoYW5kbGVyLgoJICogQHBhcmFtICRkYXRhIChzdHJpbmcpIFRoZSBzZWNvbmQgcGFyYW1ldGVyLCBkYXRhLCBjb250YWlucyB0aGUgY2hhcmFjdGVyIGRhdGEgYXMgYSBzdHJpbmcuCgkgKiBAYXV0aG9yIE5pY29sYSBBc3VuaQoJICogQHNpbmNlIDUuMC4wMDAgKDIwMTAtMDUtMDIpCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBzZWdTVkdDb250ZW50SGFuZGxlcigkcGFyc2VyLCAkZGF0YSkgewoJCSR0aGlzLT5zdmd0ZXh0IC49ICRkYXRhOwoJfQoKCS8vIC0tLSBFTkQgU1ZHIE1FVEhPRFMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCn0gLy8gRU5EIE9GIFRDUERGIENMQVNTCgovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKLy8gRU5EIE9GIEZJTEUKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCg==]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf_autoconfig.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfYXV0b2NvbmZpZy5waHAKLy8gVmVyc2lvbiAgICAgOiAxLjAuMDAwCi8vIEJlZ2luICAgICAgIDogMjAxMy0wNS0xNgovLyBMYXN0IFVwZGF0ZSA6IDIwMTQtMDEtMjUKLy8gQXV0aG9ycyAgICAgOiBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQgLSB3d3cudGVjbmljay5jb20gLSBpbmZvQHRlY25pY2suY29tCi8vIExpY2Vuc2UgICAgIDogR05VLUxHUEwgdjMgKGh0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC9sZXNzZXIuaHRtbCkKLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDb3B5cmlnaHQgKEMpIDIwMTEtMjAxNCBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQKLy8KLy8gVGhpcyBmaWxlIGlzIHBhcnQgb2YgVENQREYgc29mdHdhcmUgbGlicmFyeS4KLy8KLy8gVENQREYgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAovLyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcwovLyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUKLy8gTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLy8KLy8gVENQREYgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0Ci8vIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLy8gTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgovLyBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgovLwovLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuIElmIG5vdCwgc2VlCi8vIDxodHRwOi8vd3d3LnRlY25pY2suY29tL3BhZ2VmaWxlcy90Y3BkZi9MSUNFTlNFLlRYVD4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDogVHJ5IHRvIGF1dG9tYXRpY2FsbHkgY29uZmlndXJlIHNvbWUgVENQREYKLy8gICAgICAgICAgICAgICBjb25zdGFudHMgaWYgbm90IGRlZmluZWQuCi8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwoKLyoqCiAqIEBmaWxlCiAqIFRyeSB0byBhdXRvbWF0aWNhbGx5IGNvbmZpZ3VyZSBzb21lIFRDUERGIGNvbnN0YW50cyBpZiBub3QgZGVmaW5lZC4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQHZlcnNpb24gMS4wLjAwMAogKi8KCi8vIERPQ1VNRU5UX1JPT1QgZml4IGZvciBJSVMgV2Vic2VydmVyCmlmICgoIWlzc2V0KCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pKSBPUiAoZW1wdHkoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpKSB7CglpZihpc3NldCgkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10pKSB7CgkJJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9IHN0cl9yZXBsYWNlKCAnXFwnLCAnLycsIHN1YnN0cigkX1NFUlZFUlsnU0NSSVBUX0ZJTEVOQU1FJ10sIDAsIDAtc3RybGVuKCRfU0VSVkVSWydQSFBfU0VMRiddKSkpOwoJfSBlbHNlaWYoaXNzZXQoJF9TRVJWRVJbJ1BBVEhfVFJBTlNMQVRFRCddKSkgewoJCSRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10gPSBzdHJfcmVwbGFjZSggJ1xcJywgJy8nLCBzdWJzdHIoc3RyX3JlcGxhY2UoJ1xcXFwnLCAnXFwnLCAkX1NFUlZFUlsnUEFUSF9UUkFOU0xBVEVEJ10pLCAwLCAwLXN0cmxlbigkX1NFUlZFUlsnUEhQX1NFTEYnXSkpKTsKCX0gZWxzZSB7CgkJLy8gZGVmaW5lIGhlcmUgeW91ciBET0NVTUVOVF9ST09UIHBhdGggaWYgdGhlIHByZXZpb3VzIGZhaWxzIChlLmcuICcvdmFyL3d3dycpCgkJJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSA9ICcvJzsKCX0KfQokX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddID0gc3RyX3JlcGxhY2UoJy8vJywgJy8nLCAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKTsKaWYgKHN1YnN0cigkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddLCAtMSkgIT0gJy8nKSB7CgkkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddIC49ICcvJzsKfQoKLy8gTG9hZCBtYWluIGNvbmZpZ3VyYXRpb24gZmlsZSBvbmx5IGlmIHRoZSBLX1RDUERGX0VYVEVSTkFMX0NPTkZJRyBjb25zdGFudCBpcyBzZXQgdG8gZmFsc2UuCmlmICghZGVmaW5lZCgnS19UQ1BERl9FWFRFUk5BTF9DT05GSUcnKSBPUiAhS19UQ1BERl9FWFRFUk5BTF9DT05GSUcpIHsKCS8vIGRlZmluZSBhIGxpc3Qgb2YgZGVmYXVsdCBjb25maWcgZmlsZXMgaW4gb3JkZXIgb2YgcHJpb3JpdHkKCSR0Y3BkZl9jb25maWdfZmlsZXMgPSBhcnJheShkaXJuYW1lKF9fRklMRV9fKS4nL2NvbmZpZy90Y3BkZl9jb25maWcucGhwJywgJy9ldGMvcGhwLXRjcGRmL3RjcGRmX2NvbmZpZy5waHAnLCAnL2V0Yy90Y3BkZi90Y3BkZl9jb25maWcucGhwJywgJy9ldGMvdGNwZGZfY29uZmlnLnBocCcpOwoJZm9yZWFjaCAoJHRjcGRmX2NvbmZpZ19maWxlcyBhcyAkdGNwZGZfY29uZmlnKSB7CgkJaWYgKEBmaWxlX2V4aXN0cygkdGNwZGZfY29uZmlnKSBBTkQgaXNfcmVhZGFibGUoJHRjcGRmX2NvbmZpZykpIHsKCQkJcmVxdWlyZV9vbmNlKCR0Y3BkZl9jb25maWcpOwoJCQlicmVhazsKCQl9Cgl9Cn0KCmlmICghZGVmaW5lZCgnS19QQVRIX01BSU4nKSkgewoJZGVmaW5lICgnS19QQVRIX01BSU4nLCBkaXJuYW1lKF9fRklMRV9fKS4nLycpOwp9CgppZiAoIWRlZmluZWQoJ0tfUEFUSF9GT05UUycpKSB7CglkZWZpbmUgKCdLX1BBVEhfRk9OVFMnLCBLX1BBVEhfTUFJTi4nZm9udHMvJyk7Cn0KCmlmICghZGVmaW5lZCgnS19QQVRIX1VSTCcpKSB7Cgkka19wYXRoX3VybCA9IEtfUEFUSF9NQUlOOyAvLyBkZWZhdWx0IHZhbHVlIGZvciBjb25zb2xlIG1vZGUKCWlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIEFORCAoIWVtcHR5KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkpKSB7CgkJaWYoaXNzZXQoJF9TRVJWRVJbJ0hUVFBTJ10pIEFORCAoIWVtcHR5KCRfU0VSVkVSWydIVFRQUyddKSkgQU5EIChzdHJ0b2xvd2VyKCRfU0VSVkVSWydIVFRQUyddKSAhPSAnb2ZmJykpIHsKCQkJJGtfcGF0aF91cmwgPSAnaHR0cHM6Ly8nOwoJCX0gZWxzZSB7CgkJCSRrX3BhdGhfdXJsID0gJ2h0dHA6Ly8nOwoJCX0KCQkka19wYXRoX3VybCAuPSAkX1NFUlZFUlsnSFRUUF9IT1NUJ107CgkJJGtfcGF0aF91cmwgLj0gc3RyX3JlcGxhY2UoICdcXCcsICcvJywgc3Vic3RyKEtfUEFUSF9NQUlOLCAoc3RybGVuKCRfU0VSVkVSWydET0NVTUVOVF9ST09UJ10pIC0gMSkpKTsKCX0KCWRlZmluZSAoJ0tfUEFUSF9VUkwnLCAka19wYXRoX3VybCk7Cn0KCmlmICghZGVmaW5lZCgnS19QQVRIX0lNQUdFUycpKSB7CgkkdGNwZGZfaW1hZ2VzX2RpcnMgPSBhcnJheShLX1BBVEhfTUFJTi4nZXhhbXBsZXMvaW1hZ2VzLycsIEtfUEFUSF9NQUlOLidpbWFnZXMvJywgJy91c3Ivc2hhcmUvZG9jL3BocC10Y3BkZi9leGFtcGxlcy9pbWFnZXMvJywgJy91c3Ivc2hhcmUvZG9jL3RjcGRmL2V4YW1wbGVzL2ltYWdlcy8nLCAnL3Vzci9zaGFyZS9kb2MvcGhwL3RjcGRmL2V4YW1wbGVzL2ltYWdlcy8nLCAnL3Zhci93d3cvdGNwZGYvaW1hZ2VzLycsICcvdmFyL3d3dy9odG1sL3RjcGRmL2ltYWdlcy8nLCAnL3Vzci9sb2NhbC9hcGFjaGUyL2h0ZG9jcy90Y3BkZi9pbWFnZXMvJywgS19QQVRIX01BSU4pOwoJZm9yZWFjaCAoJHRjcGRmX2ltYWdlc19kaXJzIGFzICR0Y3BkZl9pbWFnZXNfcGF0aCkgewoJCWlmIChAZmlsZV9leGlzdHMoJHRjcGRmX2ltYWdlc19wYXRoKSkgewoJCQlicmVhazsKCQl9Cgl9CglkZWZpbmUgKCdLX1BBVEhfSU1BR0VTJywgJHRjcGRmX2ltYWdlc19wYXRoKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfSEVBREVSX0xPR08nKSkgewoJJHRjcGRmX2hlYWRlcl9sb2dvID0gJyc7CglpZiAoQGZpbGVfZXhpc3RzKEtfUEFUSF9JTUFHRVMuJ3RjcGRmX2xvZ28uanBnJykpIHsKCQkkdGNwZGZfaGVhZGVyX2xvZ28gPSAndGNwZGZfbG9nby5qcGcnOwoJfQoJZGVmaW5lICgnUERGX0hFQURFUl9MT0dPJywgJHRjcGRmX2hlYWRlcl9sb2dvKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfSEVBREVSX0xPR09fV0lEVEgnKSkgewoJaWYgKCFlbXB0eSgkdGNwZGZfaGVhZGVyX2xvZ28pKSB7CgkJZGVmaW5lICgnUERGX0hFQURFUl9MT0dPX1dJRFRIJywgMzApOwoJfSBlbHNlIHsKCQlkZWZpbmUgKCdQREZfSEVBREVSX0xPR09fV0lEVEgnLCAwKTsKCX0KfQoKaWYgKCFkZWZpbmVkKCdLX1BBVEhfQ0FDSEUnKSkgewoJJEtfUEFUSF9DQUNIRSA9IGluaV9nZXQoJ3VwbG9hZF90bXBfZGlyJykgPyBpbmlfZ2V0KCd1cGxvYWRfdG1wX2RpcicpIDogc3lzX2dldF90ZW1wX2RpcigpOwoJaWYgKHN1YnN0cigkS19QQVRIX0NBQ0hFLCAtMSkgIT0gJy8nKSB7CgkJJEtfUEFUSF9DQUNIRSAuPSAnLyc7Cgl9CglkZWZpbmUgKCdLX1BBVEhfQ0FDSEUnLCAkS19QQVRIX0NBQ0hFKTsKfQoKaWYgKCFkZWZpbmVkKCdLX0JMQU5LX0lNQUdFJykpIHsKCWRlZmluZSAoJ0tfQkxBTktfSU1BR0UnLCAnX2JsYW5rLnBuZycpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9QQUdFX0ZPUk1BVCcpKSB7CglkZWZpbmUgKCdQREZfUEFHRV9GT1JNQVQnLCAnQTQnKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfUEFHRV9PUklFTlRBVElPTicpKSB7CglkZWZpbmUgKCdQREZfUEFHRV9PUklFTlRBVElPTicsICdQJyk7Cn0KCmlmICghZGVmaW5lZCgnUERGX0NSRUFUT1InKSkgewoJZGVmaW5lICgnUERGX0NSRUFUT1InLCAnVENQREYnKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfQVVUSE9SJykpIHsKCWRlZmluZSAoJ1BERl9BVVRIT1InLCAnVENQREYnKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfSEVBREVSX1RJVExFJykpIHsKCWRlZmluZSAoJ1BERl9IRUFERVJfVElUTEUnLCAnVENQREYgRXhhbXBsZScpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9IRUFERVJfU1RSSU5HJykpIHsKCWRlZmluZSAoJ1BERl9IRUFERVJfU1RSSU5HJywgImJ5IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tXG53d3cudGNwZGYub3JnIik7Cn0KCmlmICghZGVmaW5lZCgnUERGX1VOSVQnKSkgewoJZGVmaW5lICgnUERGX1VOSVQnLCAnbW0nKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfTUFSR0lOX0hFQURFUicpKSB7CglkZWZpbmUgKCdQREZfTUFSR0lOX0hFQURFUicsIDUpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9NQVJHSU5fRk9PVEVSJykpIHsKCWRlZmluZSAoJ1BERl9NQVJHSU5fRk9PVEVSJywgMTApOwp9CgppZiAoIWRlZmluZWQoJ1BERl9NQVJHSU5fVE9QJykpIHsKCWRlZmluZSAoJ1BERl9NQVJHSU5fVE9QJywgMjcpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9NQVJHSU5fQk9UVE9NJykpIHsKCWRlZmluZSAoJ1BERl9NQVJHSU5fQk9UVE9NJywgMjUpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9NQVJHSU5fTEVGVCcpKSB7CglkZWZpbmUgKCdQREZfTUFSR0lOX0xFRlQnLCAxNSk7Cn0KCmlmICghZGVmaW5lZCgnUERGX01BUkdJTl9SSUdIVCcpKSB7CglkZWZpbmUgKCdQREZfTUFSR0lOX1JJR0hUJywgMTUpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9GT05UX05BTUVfTUFJTicpKSB7CglkZWZpbmUgKCdQREZfRk9OVF9OQU1FX01BSU4nLCAnaGVsdmV0aWNhJyk7Cn0KCmlmICghZGVmaW5lZCgnUERGX0ZPTlRfU0laRV9NQUlOJykpIHsKCWRlZmluZSAoJ1BERl9GT05UX1NJWkVfTUFJTicsIDEwKTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfRk9OVF9OQU1FX0RBVEEnKSkgewoJZGVmaW5lICgnUERGX0ZPTlRfTkFNRV9EQVRBJywgJ2hlbHZldGljYScpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9GT05UX1NJWkVfREFUQScpKSB7CglkZWZpbmUgKCdQREZfRk9OVF9TSVpFX0RBVEEnLCA4KTsKfQoKaWYgKCFkZWZpbmVkKCdQREZfRk9OVF9NT05PU1BBQ0VEJykpIHsKCWRlZmluZSAoJ1BERl9GT05UX01PTk9TUEFDRUQnLCAnY291cmllcicpOwp9CgppZiAoIWRlZmluZWQoJ1BERl9JTUFHRV9TQ0FMRV9SQVRJTycpKSB7CglkZWZpbmUgKCdQREZfSU1BR0VfU0NBTEVfUkFUSU8nLCAxLjI1KTsKfQoKaWYgKCFkZWZpbmVkKCdIRUFEX01BR05JRklDQVRJT04nKSkgewoJZGVmaW5lKCdIRUFEX01BR05JRklDQVRJT04nLCAxLjEpOwp9CgppZiAoIWRlZmluZWQoJ0tfQ0VMTF9IRUlHSFRfUkFUSU8nKSkgewoJZGVmaW5lKCdLX0NFTExfSEVJR0hUX1JBVElPJywgMS4yNSk7Cn0KCmlmICghZGVmaW5lZCgnS19USVRMRV9NQUdOSUZJQ0FUSU9OJykpIHsKCWRlZmluZSgnS19USVRMRV9NQUdOSUZJQ0FUSU9OJywgMS4zKTsKfQoKaWYgKCFkZWZpbmVkKCdLX1NNQUxMX1JBVElPJykpIHsKCWRlZmluZSgnS19TTUFMTF9SQVRJTycsIDIvMyk7Cn0KCmlmICghZGVmaW5lZCgnS19USEFJX1RPUENIQVJTJykpIHsKCWRlZmluZSgnS19USEFJX1RPUENIQVJTJywgdHJ1ZSk7Cn0KCmlmICghZGVmaW5lZCgnS19UQ1BERl9DQUxMU19JTl9IVE1MJykpIHsKCWRlZmluZSgnS19UQ1BERl9DQUxMU19JTl9IVE1MJywgdHJ1ZSk7Cn0KCmlmICghZGVmaW5lZCgnS19UQ1BERl9USFJPV19FWENFUFRJT05fRVJST1InKSkgewoJZGVmaW5lKCdLX1RDUERGX1RIUk9XX0VYQ0VQVElPTl9FUlJPUicsIGZhbHNlKTsKfQoKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEVORCBPRiBGSUxFCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf_barcodes_1d.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfYmFyY29kZXNfMWQucGhwCi8vIFZlcnNpb24gICAgIDogMS4wLjAyNQovLyBCZWdpbiAgICAgICA6IDIwMDgtMDYtMDkKLy8gTGFzdCBVcGRhdGUgOiAyMDE0LTA0LTI1Ci8vIEF1dGhvciAgICAgIDogTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFREIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQovLyBMaWNlbnNlICAgICA6IEdOVS1MR1BMIHYzIChodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwpCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29weXJpZ2h0IChDKSAyMDA4LTIwMTMgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDogUEhQIGNsYXNzIHRvIGNyZWF0ZXMgYXJyYXkgcmVwcmVzZW50YXRpb25zIGZvcgovLyAgICAgICAgICAgICAgIGNvbW1vbiAxRCBiYXJjb2RlcyB0byBiZSB1c2VkIHdpdGggVENQREYuCi8vCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwoKLyoqCiAqIEBmaWxlCiAqIFBIUCBjbGFzcyB0byBjcmVhdGVzIGFycmF5IHJlcHJlc2VudGF0aW9ucyBmb3IgY29tbW9uIDFEIGJhcmNvZGVzIHRvIGJlIHVzZWQgd2l0aCBUQ1BERi4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGF1dGhvciBOaWNvbGEgQXN1bmkKICogQHZlcnNpb24gMS4wLjAyNQogKi8KCi8qKgogKiBAY2xhc3MgVENQREZCYXJjb2RlCiAqIFBIUCBjbGFzcyB0byBjcmVhdGVzIGFycmF5IHJlcHJlc2VudGF0aW9ucyBmb3IgY29tbW9uIDFEIGJhcmNvZGVzIHRvIGJlIHVzZWQgd2l0aCBUQ1BERiAoaHR0cDovL3d3dy50Y3BkZi5vcmcpLjxicj4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQHZlcnNpb24gMS4wLjAyNQogKiBAYXV0aG9yIE5pY29sYSBBc3VuaQogKi8KY2xhc3MgVENQREZCYXJjb2RlIHsKCgkvKioKCSAqIEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGJhcmNvZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkYmFyY29kZV9hcnJheTsKCgkvKioKCSAqIFRoaXMgaXMgdGhlIGNsYXNzIGNvbnN0cnVjdG9yLgoJICogUmV0dXJuIGFuIGFycmF5IHJlcHJlc2VudGF0aW9ucyBmb3IgY29tbW9uIDFEIGJhcmNvZGVzOjx1bD4KCSAqIDxsaT4kYXJyY29kZVsnY29kZSddIGNvZGUgdG8gYmUgcHJpbnRlZCBvbiB0ZXh0IGxhYmVsPC9saT4KCSAqIDxsaT4kYXJyY29kZVsnbWF4aCddIG1heCBiYXJjb2RlIGhlaWdodDwvbGk+CgkgKiA8bGk+JGFycmNvZGVbJ21heHcnXSBtYXggYmFyY29kZSB3aWR0aDwvbGk+CgkgKiA8bGk+JGFycmNvZGVbJ2Jjb2RlJ11bJGtdIHNpbmdsZSBiYXIgb3Igc3BhY2UgaW4gJGsgcG9zaXRpb248L2xpPgoJICogPGxpPiRhcnJjb2RlWydiY29kZSddWyRrXVsndCddIGJhciB0eXBlOiB0cnVlID0gYmFyLCBmYWxzZSA9IHNwYWNlLjwvbGk+CgkgKiA8bGk+JGFycmNvZGVbJ2Jjb2RlJ11bJGtdWyd3J10gYmFyIHdpZHRoIGluIHVuaXRzLjwvbGk+CgkgKiA8bGk+JGFycmNvZGVbJ2Jjb2RlJ11bJGtdWydoJ10gYmFyIGhlaWdodCBpbiB1bml0cy48L2xpPgoJICogPGxpPiRhcnJjb2RlWydiY29kZSddWyRrXVsncCddIGJhciB0b3AgcG9zaXRpb24gKDAgPSB0b3AsIDEgPSBtaWRkbGUpPC9saT48L3VsPgoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcHJpbnQKIAkgKiBAcGFyYW0gJHR5cGUgKHN0cmluZykgdHlwZSBvZiBiYXJjb2RlOiA8dWw+PGxpPkMzOSA6IENPREUgMzkgLSBBTlNJIE1IMTAuOE0tMTk4MyAtIFVTRC0zIC0gMyBvZiA5LjwvbGk+PGxpPkMzOSsgOiBDT0RFIDM5IHdpdGggY2hlY2tzdW08L2xpPjxsaT5DMzlFIDogQ09ERSAzOSBFWFRFTkRFRDwvbGk+PGxpPkMzOUUrIDogQ09ERSAzOSBFWFRFTkRFRCArIENIRUNLU1VNPC9saT48bGk+QzkzIDogQ09ERSA5MyAtIFVTUy05MzwvbGk+PGxpPlMyNSA6IFN0YW5kYXJkIDIgb2YgNTwvbGk+PGxpPlMyNSsgOiBTdGFuZGFyZCAyIG9mIDUgKyBDSEVDS1NVTTwvbGk+PGxpPkkyNSA6IEludGVybGVhdmVkIDIgb2YgNTwvbGk+PGxpPkkyNSsgOiBJbnRlcmxlYXZlZCAyIG9mIDUgKyBDSEVDS1NVTTwvbGk+PGxpPkMxMjggOiBDT0RFIDEyODwvbGk+PGxpPkMxMjhBIDogQ09ERSAxMjggQTwvbGk+PGxpPkMxMjhCIDogQ09ERSAxMjggQjwvbGk+PGxpPkMxMjhDIDogQ09ERSAxMjggQzwvbGk+PGxpPkVBTjIgOiAyLURpZ2l0cyBVUEMtQmFzZWQgRXh0ZW50aW9uPC9saT48bGk+RUFONSA6IDUtRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb248L2xpPjxsaT5FQU44IDogRUFOIDg8L2xpPjxsaT5FQU4xMyA6IEVBTiAxMzwvbGk+PGxpPlVQQ0EgOiBVUEMtQTwvbGk+PGxpPlVQQ0UgOiBVUEMtRTwvbGk+PGxpPk1TSSA6IE1TSSAoVmFyaWF0aW9uIG9mIFBsZXNzZXkgY29kZSk8L2xpPjxsaT5NU0krIDogTVNJICsgQ0hFQ0tTVU0gKG1vZHVsbyAxMSk8L2xpPjxsaT5QT1NUTkVUIDogUE9TVE5FVDwvbGk+PGxpPlBMQU5FVCA6IFBMQU5FVDwvbGk+PGxpPlJNUzRDQyA6IFJNUzRDQyAoUm95YWwgTWFpbCA0LXN0YXRlIEN1c3RvbWVyIENvZGUpIC0gQ0JDIChDdXN0b21lciBCYXIgQ29kZSk8L2xpPjxsaT5LSVggOiBLSVggKEtsYW50IGluZGV4IC0gQ3VzdG9tZXIgaW5kZXgpPC9saT48bGk+SU1COiBJbnRlbGxpZ2VudCBNYWlsIEJhcmNvZGUgLSBPbmVjb2RlIC0gVVNQUy1CLTMyMDA8L2xpPjxsaT5DT0RBQkFSIDogQ09EQUJBUjwvbGk+PGxpPkNPREUxMSA6IENPREUgMTE8L2xpPjxsaT5QSEFSTUEgOiBQSEFSTUFDT0RFPC9saT48bGk+UEhBUk1BMlQgOiBQSEFSTUFDT0RFIFRXTy1UUkFDS1M8L2xpPjwvdWw+CiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGNvZGUsICR0eXBlKSB7CgkJJHRoaXMtPnNldEJhcmNvZGUoJGNvZGUsICR0eXBlKTsKCX0KCgkvKioKCSAqIFJldHVybiBhbiBhcnJheSByZXByZXNlbnRhdGlvbnMgb2YgYmFyY29kZS4KIAkgKiBAcmV0dXJuIGFycmF5CiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZUFycmF5KCkgewoJCXJldHVybiAkdGhpcy0+YmFyY29kZV9hcnJheTsKCX0KCgkvKioKCSAqIFNlbmQgYmFyY29kZSBhcyBTVkcgaW1hZ2Ugb2JqZWN0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCgkgKiBAcGFyYW0gJHcgKGludCkgTWluaW11bSB3aWR0aCBvZiBhIHNpbmdsZSBiYXIgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkaCAoaW50KSBIZWlnaHQgb2YgYmFyY29kZSBpbiB1c2VyIHVuaXRzLgoJICogQHBhcmFtICRjb2xvciAoc3RyaW5nKSBGb3JlZ3JvdW5kIGNvbG9yIChpbiBTVkcgZm9ybWF0KSBmb3IgYmFyIGVsZW1lbnRzIChiYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50KS4KIAkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCYXJjb2RlU1ZHKCR3PTIsICRoPTMwLCAkY29sb3I9J2JsYWNrJykgewoJCS8vIHNlbmQgaGVhZGVycwoJCSRjb2RlID0gJHRoaXMtPmdldEJhcmNvZGVTVkdjb2RlKCR3LCAkaCwgJGNvbG9yKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc3ZnK3htbCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpOyAvLyBIVFRQLzEuMQoJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQloZWFkZXIoJ0V4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UJyk7IC8vIERhdGUgaW4gdGhlIHBhc3QKCQloZWFkZXIoJ0xhc3QtTW9kaWZpZWQ6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycpLicgR01UJyk7CgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSInLm1kNSgkY29kZSkuJy5zdmciOycpOwoJCS8vaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGNvZGUpKTsKCQllY2hvICRjb2RlOwoJfQoKCS8qKgoJICogUmV0dXJuIGEgU1ZHIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiYXJjb2RlLgoJICogQHBhcmFtICR3IChpbnQpIE1pbmltdW0gd2lkdGggb2YgYSBzaW5nbGUgYmFyIGluIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJGggKGludCkgSGVpZ2h0IG9mIGJhcmNvZGUgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkY29sb3IgKHN0cmluZykgRm9yZWdyb3VuZCBjb2xvciAoaW4gU1ZHIGZvcm1hdCkgZm9yIGJhciBlbGVtZW50cyAoYmFja2dyb3VuZCBpcyB0cmFuc3BhcmVudCkuCiAJICogQHJldHVybiBzdHJpbmcgU1ZHIGNvZGUuCiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZVNWR2NvZGUoJHc9MiwgJGg9MzAsICRjb2xvcj0nYmxhY2snKSB7CgkJLy8gcmVwbGFjZSB0YWJsZSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCgkJJHJlcHN0ciA9IGFycmF5KCJcMCIgPT4gJycsICcmJyA9PiAnJmFtcDsnLCAnPCcgPT4gJyZsdDsnLCAnPicgPT4gJyZndDsnKTsKCQkkc3ZnID0gJzwnLic/Jy4neG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iJy4nPycuJz4nLiJcbiI7CgkJJHN2ZyAuPSAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4nLiJcbiI7CgkJJHN2ZyAuPSAnPHN2ZyB3aWR0aD0iJy5yb3VuZCgoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ21heHcnXSAqICR3KSwgMykuJyIgaGVpZ2h0PSInLiRoLiciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nLiJcbiI7CgkJJHN2ZyAuPSAiXHQiLic8ZGVzYz4nLnN0cnRyKCR0aGlzLT5iYXJjb2RlX2FycmF5Wydjb2RlJ10sICRyZXBzdHIpLic8L2Rlc2M+Jy4iXG4iOwoJCSRzdmcgLj0gIlx0Ii4nPGcgaWQ9ImJhcnMiIGZpbGw9IicuJGNvbG9yLiciIHN0cm9rZT0ibm9uZSI+Jy4iXG4iOwoJCS8vIHByaW50IGJhcnMKCQkkeCA9IDA7CgkJZm9yZWFjaCAoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ10gYXMgJGsgPT4gJHYpIHsKCQkJJGJ3ID0gcm91bmQoKCR2Wyd3J10gKiAkdyksIDMpOwoJCQkkYmggPSByb3VuZCgoJHZbJ2gnXSAqICRoIC8gJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ21heGgnXSksIDMpOwoJCQlpZiAoJHZbJ3QnXSkgewoJCQkJJHkgPSByb3VuZCgoJHZbJ3AnXSAqICRoIC8gJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ21heGgnXSksIDMpOwoJCQkJLy8gZHJhdyBhIHZlcnRpY2FsIGJhcgoJCQkJJHN2ZyAuPSAiXHRcdCIuJzxyZWN0IHg9IicuJHguJyIgeT0iJy4keS4nIiB3aWR0aD0iJy4kYncuJyIgaGVpZ2h0PSInLiRiaC4nIiAvPicuIlxuIjsKCQkJfQoJCQkkeCArPSAkYnc7CgkJfQoJCSRzdmcgLj0gIlx0Ii4nPC9nPicuIlxuIjsKCQkkc3ZnIC49ICc8L3N2Zz4nLiJcbiI7CgkJcmV0dXJuICRzdmc7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gYW4gSFRNTCByZXByZXNlbnRhdGlvbiBvZiBiYXJjb2RlLgoJICogQHBhcmFtICR3IChpbnQpIFdpZHRoIG9mIGEgc2luZ2xlIGJhciBlbGVtZW50IGluIHBpeGVscy4KCSAqIEBwYXJhbSAkaCAoaW50KSBIZWlnaHQgb2YgYSBzaW5nbGUgYmFyIGVsZW1lbnQgaW4gcGl4ZWxzLgoJICogQHBhcmFtICRjb2xvciAoc3RyaW5nKSBGb3JlZ3JvdW5kIGNvbG9yIGZvciBiYXIgZWxlbWVudHMgKGJhY2tncm91bmQgaXMgdHJhbnNwYXJlbnQpLgogCSAqIEByZXR1cm4gc3RyaW5nIEhUTUwgY29kZS4KIAkgKiBAcHVibGljCgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBnZXRCYXJjb2RlSFRNTCgkdz0yLCAkaD0zMCwgJGNvbG9yPSdibGFjaycpIHsKCQkkaHRtbCA9ICc8ZGl2IHN0eWxlPSJmb250LXNpemU6MDtwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDonLigkdGhpcy0+YmFyY29kZV9hcnJheVsnbWF4dyddICogJHcpLidweDtoZWlnaHQ6Jy4oJGgpLidweDsiPicuIlxuIjsKCQkvLyBwcmludCBiYXJzCgkJJHggPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5iYXJjb2RlX2FycmF5WydiY29kZSddIGFzICRrID0+ICR2KSB7CgkJCSRidyA9IHJvdW5kKCgkdlsndyddICogJHcpLCAzKTsKCQkJJGJoID0gcm91bmQoKCR2WydoJ10gKiAkaCAvICR0aGlzLT5iYXJjb2RlX2FycmF5WydtYXhoJ10pLCAzKTsKCQkJaWYgKCR2Wyd0J10pIHsKCQkJCSR5ID0gcm91bmQoKCR2WydwJ10gKiAkaCAvICR0aGlzLT5iYXJjb2RlX2FycmF5WydtYXhoJ10pLCAzKTsKCQkJCS8vIGRyYXcgYSB2ZXJ0aWNhbCBiYXIKCQkJCSRodG1sIC49ICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOicuJGNvbG9yLic7d2lkdGg6Jy4kYncuJ3B4O2hlaWdodDonLiRiaC4ncHg7cG9zaXRpb246YWJzb2x1dGU7bGVmdDonLiR4LidweDt0b3A6Jy4keS4ncHg7Ij4mbmJzcDs8L2Rpdj4nLiJcbiI7CgkJCX0KCQkJJHggKz0gJGJ3OwoJCX0KCQkkaHRtbCAuPSAnPC9kaXY+Jy4iXG4iOwoJCXJldHVybiAkaHRtbDsKCX0KCgkvKioKCSAqIFJldHVybiBhIFBORyBpbWFnZSByZXByZXNlbnRhdGlvbiBvZiBiYXJjb2RlIChyZXF1aXJlcyBHRCBvciBJbWFnaWNrIGxpYnJhcnkpLgoJICogQHBhcmFtICR3IChpbnQpIFdpZHRoIG9mIGEgc2luZ2xlIGJhciBlbGVtZW50IGluIHBpeGVscy4KCSAqIEBwYXJhbSAkaCAoaW50KSBIZWlnaHQgb2YgYSBzaW5nbGUgYmFyIGVsZW1lbnQgaW4gcGl4ZWxzLgoJICogQHBhcmFtICRjb2xvciAoYXJyYXkpIFJHQiAoMC0yNTUpIGZvcmVncm91bmQgY29sb3IgZm9yIGJhciBlbGVtZW50cyAoYmFja2dyb3VuZCBpcyB0cmFuc3BhcmVudCkuCiAJICogQHJldHVybiBpbWFnZSBvciBmYWxzZSBpbiBjYXNlIG9mIGVycm9yLgogCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEJhcmNvZGVQTkcoJHc9MiwgJGg9MzAsICRjb2xvcj1hcnJheSgwLDAsMCkpIHsKCQkvLyBjYWxjdWxhdGUgaW1hZ2Ugc2l6ZQoJCSR3aWR0aCA9ICgkdGhpcy0+YmFyY29kZV9hcnJheVsnbWF4dyddICogJHcpOwoJCSRoZWlnaHQgPSAkaDsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWNyZWF0ZScpKSB7CgkJCS8vIEdEIGxpYnJhcnkKCQkJJGltYWdpY2sgPSBmYWxzZTsKCQkJJHBuZyA9IGltYWdlY3JlYXRlKCR3aWR0aCwgJGhlaWdodCk7CgkJCSRiZ2NvbCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkcG5nLCAyNTUsIDI1NSwgMjU1KTsKCQkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRwbmcsICRiZ2NvbCk7CgkJCSRmZ2NvbCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkcG5nLCAkY29sb3JbMF0sICRjb2xvclsxXSwgJGNvbG9yWzJdKTsKCQl9IGVsc2VpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKSB7CgkJCSRpbWFnaWNrID0gdHJ1ZTsKCQkJJGJnY29sID0gbmV3IGltYWdpY2twaXhlbCgncmdiKDI1NSwyNTUsMjU1Jyk7CgkJCSRmZ2NvbCA9IG5ldyBpbWFnaWNrcGl4ZWwoJ3JnYignLiRjb2xvclswXS4nLCcuJGNvbG9yWzFdLicsJy4kY29sb3JbMl0uJyknKTsKCQkJJHBuZyA9IG5ldyBJbWFnaWNrKCk7CgkJCSRwbmctPm5ld0ltYWdlKCR3aWR0aCwgJGhlaWdodCwgJ25vbmUnLCAncG5nJyk7CgkJCSRiYXIgPSBuZXcgaW1hZ2lja2RyYXcoKTsKCQkJJGJhci0+c2V0ZmlsbGNvbG9yKCRmZ2NvbCk7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBwcmludCBiYXJzCgkJJHggPSAwOwoJCWZvcmVhY2ggKCR0aGlzLT5iYXJjb2RlX2FycmF5WydiY29kZSddIGFzICRrID0+ICR2KSB7CgkJCSRidyA9IHJvdW5kKCgkdlsndyddICogJHcpLCAzKTsKCQkJJGJoID0gcm91bmQoKCR2WydoJ10gKiAkaCAvICR0aGlzLT5iYXJjb2RlX2FycmF5WydtYXhoJ10pLCAzKTsKCQkJaWYgKCR2Wyd0J10pIHsKCQkJCSR5ID0gcm91bmQoKCR2WydwJ10gKiAkaCAvICR0aGlzLT5iYXJjb2RlX2FycmF5WydtYXhoJ10pLCAzKTsKCQkJCS8vIGRyYXcgYSB2ZXJ0aWNhbCBiYXIKCQkJCWlmICgkaW1hZ2ljaykgewoJCQkJCSRiYXItPnJlY3RhbmdsZSgkeCwgJHksICgkeCArICRidyAtIDEpLCAoJHkgKyAkYmggLSAxKSk7CgkJCQl9IGVsc2UgewoJCQkJCWltYWdlZmlsbGVkcmVjdGFuZ2xlKCRwbmcsICR4LCAkeSwgKCR4ICsgJGJ3IC0gMSksICgkeSArICRiaCAtIDEpLCAkZmdjb2wpOwoJCQkJfQoJCQl9CgkJCSR4ICs9ICRidzsKCQl9CgkJLy8gc2VuZCBoZWFkZXJzCgkJaGVhZGVyKCdDb250ZW50LVR5cGU6IGltYWdlL3BuZycpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpOyAvLyBIVFRQLzEuMQoJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQloZWFkZXIoJ0V4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UJyk7IC8vIERhdGUgaW4gdGhlIHBhc3QKCQloZWFkZXIoJ0xhc3QtTW9kaWZpZWQ6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycpLicgR01UJyk7CgkJaWYgKCRpbWFnaWNrKSB7CgkJCSRwbmctPmRyYXdpbWFnZSgkYmFyKTsKCQkJZWNobyAkcG5nOwoJCX0gZWxzZSB7CgkJCWltYWdlcG5nKCRwbmcpOwoJCQlpbWFnZWRlc3Ryb3koJHBuZyk7CgkJfQoJfQoKCS8qKgoJICogU2V0IHRoZSBiYXJjb2RlLgoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcHJpbnQKIAkgKiBAcGFyYW0gJHR5cGUgKHN0cmluZykgdHlwZSBvZiBiYXJjb2RlOiA8dWw+PGxpPkMzOSA6IENPREUgMzkgLSBBTlNJIE1IMTAuOE0tMTk4MyAtIFVTRC0zIC0gMyBvZiA5LjwvbGk+PGxpPkMzOSsgOiBDT0RFIDM5IHdpdGggY2hlY2tzdW08L2xpPjxsaT5DMzlFIDogQ09ERSAzOSBFWFRFTkRFRDwvbGk+PGxpPkMzOUUrIDogQ09ERSAzOSBFWFRFTkRFRCArIENIRUNLU1VNPC9saT48bGk+QzkzIDogQ09ERSA5MyAtIFVTUy05MzwvbGk+PGxpPlMyNSA6IFN0YW5kYXJkIDIgb2YgNTwvbGk+PGxpPlMyNSsgOiBTdGFuZGFyZCAyIG9mIDUgKyBDSEVDS1NVTTwvbGk+PGxpPkkyNSA6IEludGVybGVhdmVkIDIgb2YgNTwvbGk+PGxpPkkyNSsgOiBJbnRlcmxlYXZlZCAyIG9mIDUgKyBDSEVDS1NVTTwvbGk+PGxpPkMxMjggOiBDT0RFIDEyODwvbGk+PGxpPkMxMjhBIDogQ09ERSAxMjggQTwvbGk+PGxpPkMxMjhCIDogQ09ERSAxMjggQjwvbGk+PGxpPkMxMjhDIDogQ09ERSAxMjggQzwvbGk+PGxpPkVBTjIgOiAyLURpZ2l0cyBVUEMtQmFzZWQgRXh0ZW50aW9uPC9saT48bGk+RUFONSA6IDUtRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb248L2xpPjxsaT5FQU44IDogRUFOIDg8L2xpPjxsaT5FQU4xMyA6IEVBTiAxMzwvbGk+PGxpPlVQQ0EgOiBVUEMtQTwvbGk+PGxpPlVQQ0UgOiBVUEMtRTwvbGk+PGxpPk1TSSA6IE1TSSAoVmFyaWF0aW9uIG9mIFBsZXNzZXkgY29kZSk8L2xpPjxsaT5NU0krIDogTVNJICsgQ0hFQ0tTVU0gKG1vZHVsbyAxMSk8L2xpPjxsaT5QT1NUTkVUIDogUE9TVE5FVDwvbGk+PGxpPlBMQU5FVCA6IFBMQU5FVDwvbGk+PGxpPlJNUzRDQyA6IFJNUzRDQyAoUm95YWwgTWFpbCA0LXN0YXRlIEN1c3RvbWVyIENvZGUpIC0gQ0JDIChDdXN0b21lciBCYXIgQ29kZSk8L2xpPjxsaT5LSVggOiBLSVggKEtsYW50IGluZGV4IC0gQ3VzdG9tZXIgaW5kZXgpPC9saT48bGk+SU1COiBJbnRlbGxpZ2VudCBNYWlsIEJhcmNvZGUgLSBPbmVjb2RlIC0gVVNQUy1CLTMyMDA8L2xpPjxsaT5DT0RBQkFSIDogQ09EQUJBUjwvbGk+PGxpPkNPREUxMSA6IENPREUgMTE8L2xpPjxsaT5QSEFSTUEgOiBQSEFSTUFDT0RFPC9saT48bGk+UEhBUk1BMlQgOiBQSEFSTUFDT0RFIFRXTy1UUkFDS1M8L2xpPjwvdWw+CiAJICogQHJldHVybiBhcnJheSBiYXJjb2RlIGFycmF5CiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gc2V0QmFyY29kZSgkY29kZSwgJHR5cGUpIHsKCQlzd2l0Y2ggKHN0cnRvdXBwZXIoJHR5cGUpKSB7CgkJCWNhc2UgJ0MzOSc6IHsgLy8gQ09ERSAzOSAtIEFOU0kgTUgxMC44TS0xOTgzIC0gVVNELTMgLSAzIG9mIDkuCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2NvZGUzOSgkY29kZSwgZmFsc2UsIGZhbHNlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0MzOSsnOiB7IC8vIENPREUgMzkgd2l0aCBjaGVja3N1bQoJCQkJJGFycmNvZGUgPSAkdGhpcy0+YmFyY29kZV9jb2RlMzkoJGNvZGUsIGZhbHNlLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0MzOUUnOiB7IC8vIENPREUgMzkgRVhURU5ERUQKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfY29kZTM5KCRjb2RlLCB0cnVlLCBmYWxzZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDMzlFKyc6IHsgLy8gQ09ERSAzOSBFWFRFTkRFRCArIENIRUNLU1VNCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2NvZGUzOSgkY29kZSwgdHJ1ZSwgdHJ1ZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDOTMnOiB7IC8vIENPREUgOTMgLSBVU1MtOTMKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfY29kZTkzKCRjb2RlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1MyNSc6IHsgLy8gU3RhbmRhcmQgMiBvZiA1CgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX3MyNSgkY29kZSwgZmFsc2UpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnUzI1Kyc6IHsgLy8gU3RhbmRhcmQgMiBvZiA1ICsgQ0hFQ0tTVU0KCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfczI1KCRjb2RlLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0kyNSc6IHsgLy8gSW50ZXJsZWF2ZWQgMiBvZiA1CgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2kyNSgkY29kZSwgZmFsc2UpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnSTI1Kyc6IHsgLy8gSW50ZXJsZWF2ZWQgMiBvZiA1ICsgQ0hFQ0tTVU0KCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfaTI1KCRjb2RlLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0MxMjgnOiB7IC8vIENPREUgMTI4CgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2MxMjgoJGNvZGUsICcnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0MxMjhBJzogeyAvLyBDT0RFIDEyOCBBCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2MxMjgoJGNvZGUsICdBJyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDMTI4Qic6IHsgLy8gQ09ERSAxMjggQgoJCQkJJGFycmNvZGUgPSAkdGhpcy0+YmFyY29kZV9jMTI4KCRjb2RlLCAnQicpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQzEyOEMnOiB7IC8vIENPREUgMTI4IEMKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfYzEyOCgkY29kZSwgJ0MnKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0VBTjInOiB7IC8vIDItRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb24KCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfZWFuZXh0KCRjb2RlLCAyKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0VBTjUnOiB7IC8vIDUtRGlnaXRzIFVQQy1CYXNlZCBFeHRlbnRpb24KCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfZWFuZXh0KCRjb2RlLCA1KTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0VBTjgnOiB7IC8vIEVBTiA4CgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2VhbnVwYygkY29kZSwgOCk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdFQU4xMyc6IHsgLy8gRUFOIDEzCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2VhbnVwYygkY29kZSwgMTMpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnVVBDQSc6IHsgLy8gVVBDLUEKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfZWFudXBjKCRjb2RlLCAxMik7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdVUENFJzogeyAvLyBVUEMtRQoJCQkJJGFycmNvZGUgPSAkdGhpcy0+YmFyY29kZV9lYW51cGMoJGNvZGUsIDYpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTVNJJzogeyAvLyBNU0kgKFZhcmlhdGlvbiBvZiBQbGVzc2V5IGNvZGUpCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX21zaSgkY29kZSwgZmFsc2UpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnTVNJKyc6IHsgLy8gTVNJICsgQ0hFQ0tTVU0gKG1vZHVsbyAxMSkKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfbXNpKCRjb2RlLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1BPU1RORVQnOiB7IC8vIFBPU1RORVQKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfcG9zdG5ldCgkY29kZSwgZmFsc2UpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnUExBTkVUJzogeyAvLyBQTEFORVQKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfcG9zdG5ldCgkY29kZSwgdHJ1ZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdSTVM0Q0MnOiB7IC8vIFJNUzRDQyAoUm95YWwgTWFpbCA0LXN0YXRlIEN1c3RvbWVyIENvZGUpIC0gQ0JDIChDdXN0b21lciBCYXIgQ29kZSkKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfcm1zNGNjKCRjb2RlLCBmYWxzZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdLSVgnOiB7IC8vIEtJWCAoS2xhbnQgaW5kZXggLSBDdXN0b21lciBpbmRleCkKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfcm1zNGNjKCRjb2RlLCB0cnVlKTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0lNQic6IHsgLy8gSU1CIC0gSW50ZWxsaWdlbnQgTWFpbCBCYXJjb2RlIC0gT25lY29kZSAtIFVTUFMtQi0zMjAwCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2ltYigkY29kZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdDT0RBQkFSJzogeyAvLyBDT0RBQkFSCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2NvZGFiYXIoJGNvZGUpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnQ09ERTExJzogeyAvLyBDT0RFIDExCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX2NvZGUxMSgkY29kZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdQSEFSTUEnOiB7IC8vIFBIQVJNQUNPREUKCQkJCSRhcnJjb2RlID0gJHRoaXMtPmJhcmNvZGVfcGhhcm1hY29kZSgkY29kZSk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdQSEFSTUEyVCc6IHsgLy8gUEhBUk1BQ09ERSBUV08tVFJBQ0tTCgkJCQkkYXJyY29kZSA9ICR0aGlzLT5iYXJjb2RlX3BoYXJtYWNvZGUydCgkY29kZSk7CgkJCQlicmVhazsKCQkJfQoJCQlkZWZhdWx0OiB7CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheSA9IGZhbHNlOwoJCQkJJGFycmNvZGUgPSBmYWxzZTsKCQkJCWJyZWFrOwoJCQl9CgkJfQoJCSR0aGlzLT5iYXJjb2RlX2FycmF5ID0gJGFycmNvZGU7Cgl9CgoJLyoqCgkgKiBDT0RFIDM5IC0gQU5TSSBNSDEwLjhNLTE5ODMgLSBVU0QtMyAtIDMgb2YgOS4KCSAqIEdlbmVyYWwtcHVycG9zZSBjb2RlIGluIHZlcnkgd2lkZSB1c2Ugd29ybGQtd2lkZQoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcmVwcmVzZW50LgoJICogQHBhcmFtICRleHRlbmRlZCAoYm9vbGVhbikgaWYgdHJ1ZSB1c2VzIHRoZSBleHRlbmRlZCBtb2RlLgoJICogQHBhcmFtICRjaGVja3N1bSAoYm9vbGVhbikgaWYgdHJ1ZSBhZGQgYSBjaGVja3N1bSB0byB0aGUgY29kZS4KCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfY29kZTM5KCRjb2RlLCAkZXh0ZW5kZWQ9ZmFsc2UsICRjaGVja3N1bT1mYWxzZSkgewoJCSRjaHJbJzAnXSA9ICcxMTEzMzEzMTEnOwoJCSRjaHJbJzEnXSA9ICczMTEzMTExMTMnOwoJCSRjaHJbJzInXSA9ICcxMTMzMTExMTMnOwoJCSRjaHJbJzMnXSA9ICczMTMzMTExMTEnOwoJCSRjaHJbJzQnXSA9ICcxMTEzMzExMTMnOwoJCSRjaHJbJzUnXSA9ICczMTEzMzExMTEnOwoJCSRjaHJbJzYnXSA9ICcxMTMzMzExMTEnOwoJCSRjaHJbJzcnXSA9ICcxMTEzMTEzMTMnOwoJCSRjaHJbJzgnXSA9ICczMTEzMTEzMTEnOwoJCSRjaHJbJzknXSA9ICcxMTMzMTEzMTEnOwoJCSRjaHJbJ0EnXSA9ICczMTExMTMxMTMnOwoJCSRjaHJbJ0InXSA9ICcxMTMxMTMxMTMnOwoJCSRjaHJbJ0MnXSA9ICczMTMxMTMxMTEnOwoJCSRjaHJbJ0QnXSA9ICcxMTExMzMxMTMnOwoJCSRjaHJbJ0UnXSA9ICczMTExMzMxMTEnOwoJCSRjaHJbJ0YnXSA9ICcxMTMxMzMxMTEnOwoJCSRjaHJbJ0cnXSA9ICcxMTExMTMzMTMnOwoJCSRjaHJbJ0gnXSA9ICczMTExMTMzMTEnOwoJCSRjaHJbJ0knXSA9ICcxMTMxMTMzMTEnOwoJCSRjaHJbJ0onXSA9ICcxMTExMzMzMTEnOwoJCSRjaHJbJ0snXSA9ICczMTExMTExMzMnOwoJCSRjaHJbJ0wnXSA9ICcxMTMxMTExMzMnOwoJCSRjaHJbJ00nXSA9ICczMTMxMTExMzEnOwoJCSRjaHJbJ04nXSA9ICcxMTExMzExMzMnOwoJCSRjaHJbJ08nXSA9ICczMTExMzExMzEnOwoJCSRjaHJbJ1AnXSA9ICcxMTMxMzExMzEnOwoJCSRjaHJbJ1EnXSA9ICcxMTExMTEzMzMnOwoJCSRjaHJbJ1InXSA9ICczMTExMTEzMzEnOwoJCSRjaHJbJ1MnXSA9ICcxMTMxMTEzMzEnOwoJCSRjaHJbJ1QnXSA9ICcxMTExMzEzMzEnOwoJCSRjaHJbJ1UnXSA9ICczMzExMTExMTMnOwoJCSRjaHJbJ1YnXSA9ICcxMzMxMTExMTMnOwoJCSRjaHJbJ1cnXSA9ICczMzMxMTExMTEnOwoJCSRjaHJbJ1gnXSA9ICcxMzExMzExMTMnOwoJCSRjaHJbJ1knXSA9ICczMzExMzExMTEnOwoJCSRjaHJbJ1onXSA9ICcxMzMxMzExMTEnOwoJCSRjaHJbJy0nXSA9ICcxMzExMTEzMTMnOwoJCSRjaHJbJy4nXSA9ICczMzExMTEzMTEnOwoJCSRjaHJbJyAnXSA9ICcxMzMxMTEzMTEnOwoJCSRjaHJbJyQnXSA9ICcxMzEzMTMxMTEnOwoJCSRjaHJbJy8nXSA9ICcxMzEzMTExMzEnOwoJCSRjaHJbJysnXSA9ICcxMzExMTMxMzEnOwoJCSRjaHJbJyUnXSA9ICcxMTEzMTMxMzEnOwoJCSRjaHJbJyonXSA9ICcxMzExMzEzMTEnOwoJCSRjb2RlID0gc3RydG91cHBlcigkY29kZSk7CgkJaWYgKCRleHRlbmRlZCkgewoJCQkvLyBleHRlbmRlZCBtb2RlCgkJCSRjb2RlID0gJHRoaXMtPmVuY29kZV9jb2RlMzlfZXh0KCRjb2RlKTsKCQl9CgkJaWYgKCRjb2RlID09PSBmYWxzZSkgewoJCQlyZXR1cm4gZmFsc2U7CgkJfQoJCWlmICgkY2hlY2tzdW0pIHsKCQkJLy8gY2hlY2tzdW0KCQkJJGNvZGUgLj0gJHRoaXMtPmNoZWNrc3VtX2NvZGUzOSgkY29kZSk7CgkJfQoJCS8vIGFkZCBzdGFydCBhbmQgc3RvcCBjb2RlcwoJCSRjb2RlID0gJyonLiRjb2RlLicqJzsKCQkkYmFyYXJyYXkgPSBhcnJheSgnY29kZScgPT4gJGNvZGUsICdtYXh3JyA9PiAwLCAnbWF4aCcgPT4gMSwgJ2Jjb2RlJyA9PiBhcnJheSgpKTsKCQkkayA9IDA7CgkJJGNsZW4gPSBzdHJsZW4oJGNvZGUpOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRjbGVuOyArKyRpKSB7CgkJCSRjaGFyID0gJGNvZGV7JGl9OwoJCQlpZighaXNzZXQoJGNoclskY2hhcl0pKSB7CgkJCQkvLyBpbnZhbGlkIGNoYXJhY3RlcgoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWZvciAoJGogPSAwOyAkaiA8IDk7ICsrJGopIHsKCQkJCWlmICgoJGogJSAyKSA9PSAwKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSR3ID0gJGNoclskY2hhcl17JGp9OwoJCQkJJGJhcmFycmF5WydiY29kZSddWyRrXSA9IGFycmF5KCd0JyA9PiAkdCwgJ3cnID0+ICR3LCAnaCcgPT4gMSwgJ3AnID0+IDApOwoJCQkJJGJhcmFycmF5WydtYXh3J10gKz0gJHc7CgkJCQkrKyRrOwoJCQl9CgkJCS8vIGludGVyY2hhcmFjdGVyIGdhcAoJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGtdID0gYXJyYXkoJ3QnID0+IGZhbHNlLCAndycgPT4gMSwgJ2gnID0+IDEsICdwJyA9PiAwKTsKCQkJJGJhcmFycmF5WydtYXh3J10gKz0gMTsKCQkJKyskazsKCQl9CgkJcmV0dXJuICRiYXJhcnJheTsKCX0KCgkvKioKCSAqIEVuY29kZSBhIHN0cmluZyB0byBiZSB1c2VkIGZvciBDT0RFIDM5IEV4dGVuZGVkIG1vZGUuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcmV0dXJuIGVuY29kZWQgc3RyaW5nLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZW5jb2RlX2NvZGUzOV9leHQoJGNvZGUpIHsKCQkkZW5jb2RlID0gYXJyYXkoCgkJCWNocigwKSA9PiAnJVUnLCBjaHIoMSkgPT4gJyRBJywgY2hyKDIpID0+ICckQicsIGNocigzKSA9PiAnJEMnLAoJCQljaHIoNCkgPT4gJyREJywgY2hyKDUpID0+ICckRScsIGNocig2KSA9PiAnJEYnLCBjaHIoNykgPT4gJyRHJywKCQkJY2hyKDgpID0+ICckSCcsIGNocig5KSA9PiAnJEknLCBjaHIoMTApID0+ICckSicsIGNocigxMSkgPT4gJ8KjSycsCgkJCWNocigxMikgPT4gJyRMJywgY2hyKDEzKSA9PiAnJE0nLCBjaHIoMTQpID0+ICckTicsIGNocigxNSkgPT4gJyRPJywKCQkJY2hyKDE2KSA9PiAnJFAnLCBjaHIoMTcpID0+ICckUScsIGNocigxOCkgPT4gJyRSJywgY2hyKDE5KSA9PiAnJFMnLAoJCQljaHIoMjApID0+ICckVCcsIGNocigyMSkgPT4gJyRVJywgY2hyKDIyKSA9PiAnJFYnLCBjaHIoMjMpID0+ICckVycsCgkJCWNocigyNCkgPT4gJyRYJywgY2hyKDI1KSA9PiAnJFknLCBjaHIoMjYpID0+ICckWicsIGNocigyNykgPT4gJyVBJywKCQkJY2hyKDI4KSA9PiAnJUInLCBjaHIoMjkpID0+ICclQycsIGNocigzMCkgPT4gJyVEJywgY2hyKDMxKSA9PiAnJUUnLAoJCQljaHIoMzIpID0+ICcgJywgY2hyKDMzKSA9PiAnL0EnLCBjaHIoMzQpID0+ICcvQicsIGNocigzNSkgPT4gJy9DJywKCQkJY2hyKDM2KSA9PiAnL0QnLCBjaHIoMzcpID0+ICcvRScsIGNocigzOCkgPT4gJy9GJywgY2hyKDM5KSA9PiAnL0cnLAoJCQljaHIoNDApID0+ICcvSCcsIGNocig0MSkgPT4gJy9JJywgY2hyKDQyKSA9PiAnL0onLCBjaHIoNDMpID0+ICcvSycsCgkJCWNocig0NCkgPT4gJy9MJywgY2hyKDQ1KSA9PiAnLScsIGNocig0NikgPT4gJy4nLCBjaHIoNDcpID0+ICcvTycsCgkJCWNocig0OCkgPT4gJzAnLCBjaHIoNDkpID0+ICcxJywgY2hyKDUwKSA9PiAnMicsIGNocig1MSkgPT4gJzMnLAoJCQljaHIoNTIpID0+ICc0JywgY2hyKDUzKSA9PiAnNScsIGNocig1NCkgPT4gJzYnLCBjaHIoNTUpID0+ICc3JywKCQkJY2hyKDU2KSA9PiAnOCcsIGNocig1NykgPT4gJzknLCBjaHIoNTgpID0+ICcvWicsIGNocig1OSkgPT4gJyVGJywKCQkJY2hyKDYwKSA9PiAnJUcnLCBjaHIoNjEpID0+ICclSCcsIGNocig2MikgPT4gJyVJJywgY2hyKDYzKSA9PiAnJUonLAoJCQljaHIoNjQpID0+ICclVicsIGNocig2NSkgPT4gJ0EnLCBjaHIoNjYpID0+ICdCJywgY2hyKDY3KSA9PiAnQycsCgkJCWNocig2OCkgPT4gJ0QnLCBjaHIoNjkpID0+ICdFJywgY2hyKDcwKSA9PiAnRicsIGNocig3MSkgPT4gJ0cnLAoJCQljaHIoNzIpID0+ICdIJywgY2hyKDczKSA9PiAnSScsIGNocig3NCkgPT4gJ0onLCBjaHIoNzUpID0+ICdLJywKCQkJY2hyKDc2KSA9PiAnTCcsIGNocig3NykgPT4gJ00nLCBjaHIoNzgpID0+ICdOJywgY2hyKDc5KSA9PiAnTycsCgkJCWNocig4MCkgPT4gJ1AnLCBjaHIoODEpID0+ICdRJywgY2hyKDgyKSA9PiAnUicsIGNocig4MykgPT4gJ1MnLAoJCQljaHIoODQpID0+ICdUJywgY2hyKDg1KSA9PiAnVScsIGNocig4NikgPT4gJ1YnLCBjaHIoODcpID0+ICdXJywKCQkJY2hyKDg4KSA9PiAnWCcsIGNocig4OSkgPT4gJ1knLCBjaHIoOTApID0+ICdaJywgY2hyKDkxKSA9PiAnJUsnLAoJCQljaHIoOTIpID0+ICclTCcsIGNocig5MykgPT4gJyVNJywgY2hyKDk0KSA9PiAnJU4nLCBjaHIoOTUpID0+ICclTycsCgkJCWNocig5NikgPT4gJyVXJywgY2hyKDk3KSA9PiAnK0EnLCBjaHIoOTgpID0+ICcrQicsIGNocig5OSkgPT4gJytDJywKCQkJY2hyKDEwMCkgPT4gJytEJywgY2hyKDEwMSkgPT4gJytFJywgY2hyKDEwMikgPT4gJytGJywgY2hyKDEwMykgPT4gJytHJywKCQkJY2hyKDEwNCkgPT4gJytIJywgY2hyKDEwNSkgPT4gJytJJywgY2hyKDEwNikgPT4gJytKJywgY2hyKDEwNykgPT4gJytLJywKCQkJY2hyKDEwOCkgPT4gJytMJywgY2hyKDEwOSkgPT4gJytNJywgY2hyKDExMCkgPT4gJytOJywgY2hyKDExMSkgPT4gJytPJywKCQkJY2hyKDExMikgPT4gJytQJywgY2hyKDExMykgPT4gJytRJywgY2hyKDExNCkgPT4gJytSJywgY2hyKDExNSkgPT4gJytTJywKCQkJY2hyKDExNikgPT4gJytUJywgY2hyKDExNykgPT4gJytVJywgY2hyKDExOCkgPT4gJytWJywgY2hyKDExOSkgPT4gJytXJywKCQkJY2hyKDEyMCkgPT4gJytYJywgY2hyKDEyMSkgPT4gJytZJywgY2hyKDEyMikgPT4gJytaJywgY2hyKDEyMykgPT4gJyVQJywKCQkJY2hyKDEyNCkgPT4gJyVRJywgY2hyKDEyNSkgPT4gJyVSJywgY2hyKDEyNikgPT4gJyVTJywgY2hyKDEyNykgPT4gJyVUJyk7CgkJJGNvZGVfZXh0ID0gJyc7CgkJJGNsZW4gPSBzdHJsZW4oJGNvZGUpOwoJCWZvciAoJGkgPSAwIDsgJGkgPCAkY2xlbjsgKyskaSkgewoJCQlpZiAob3JkKCRjb2RleyRpfSkgPiAxMjcpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkY29kZV9leHQgLj0gJGVuY29kZVskY29kZXskaX1dOwoJCX0KCQlyZXR1cm4gJGNvZGVfZXh0OwoJfQoKCS8qKgoJICogQ2FsY3VsYXRlIENPREUgMzkgY2hlY2tzdW0gKG1vZHVsbyA0MykuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcmV0dXJuIGNoYXIgY2hlY2tzdW0uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGVja3N1bV9jb2RlMzkoJGNvZGUpIHsKCQkkY2hhcnMgPSBhcnJheSgKCQkJJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAoJCQknQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywKCQkJJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsCgkJCSdXJywgJ1gnLCAnWScsICdaJywgJy0nLCAnLicsICcgJywgJyQnLCAnLycsICcrJywgJyUnKTsKCQkkc3VtID0gMDsKCQkkY2xlbiA9IHN0cmxlbigkY29kZSk7CgkJZm9yICgkaSA9IDAgOyAkaSA8ICRjbGVuOyArKyRpKSB7CgkJCSRrID0gYXJyYXlfa2V5cygkY2hhcnMsICRjb2RleyRpfSk7CgkJCSRzdW0gKz0gJGtbMF07CgkJfQoJCSRqID0gKCRzdW0gJSA0Myk7CgkJcmV0dXJuICRjaGFyc1skal07Cgl9CgoJLyoqCgkgKiBDT0RFIDkzIC0gVVNTLTkzCgkgKiBDb21wYWN0IGNvZGUgc2ltaWxhciB0byBDb2RlIDM5CgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgcmVwcmVzZW50YXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiYXJjb2RlX2NvZGU5MygkY29kZSkgewoJCSRjaHJbNDhdID0gJzEzMTExMic7IC8vIDAKCQkkY2hyWzQ5XSA9ICcxMTEyMTMnOyAvLyAxCgkJJGNocls1MF0gPSAnMTExMzEyJzsgLy8gMgoJCSRjaHJbNTFdID0gJzExMTQxMSc7IC8vIDMKCQkkY2hyWzUyXSA9ICcxMjExMTMnOyAvLyA0CgkJJGNocls1M10gPSAnMTIxMjEyJzsgLy8gNQoJCSRjaHJbNTRdID0gJzEyMTMxMSc7IC8vIDYKCQkkY2hyWzU1XSA9ICcxMTExMTQnOyAvLyA3CgkJJGNocls1Nl0gPSAnMTMxMjExJzsgLy8gOAoJCSRjaHJbNTddID0gJzE0MTExMSc7IC8vIDkKCQkkY2hyWzY1XSA9ICcyMTExMTMnOyAvLyBBCgkJJGNocls2Nl0gPSAnMjExMjEyJzsgLy8gQgoJCSRjaHJbNjddID0gJzIxMTMxMSc7IC8vIEMKCQkkY2hyWzY4XSA9ICcyMjExMTInOyAvLyBECgkJJGNocls2OV0gPSAnMjIxMjExJzsgLy8gRQoJCSRjaHJbNzBdID0gJzIzMTExMSc7IC8vIEYKCQkkY2hyWzcxXSA9ICcxMTIxMTMnOyAvLyBHCgkJJGNocls3Ml0gPSAnMTEyMjEyJzsgLy8gSAoJCSRjaHJbNzNdID0gJzExMjMxMSc7IC8vIEkKCQkkY2hyWzc0XSA9ICcxMjIxMTInOyAvLyBKCgkJJGNocls3NV0gPSAnMTMyMTExJzsgLy8gSwoJCSRjaHJbNzZdID0gJzExMTEyMyc7IC8vIEwKCQkkY2hyWzc3XSA9ICcxMTEyMjInOyAvLyBNCgkJJGNocls3OF0gPSAnMTExMzIxJzsgLy8gTgoJCSRjaHJbNzldID0gJzEyMTEyMic7IC8vIE8KCQkkY2hyWzgwXSA9ICcxMzExMjEnOyAvLyBQCgkJJGNocls4MV0gPSAnMjEyMTEyJzsgLy8gUQoJCSRjaHJbODJdID0gJzIxMjIxMSc7IC8vIFIKCQkkY2hyWzgzXSA9ICcyMTExMjInOyAvLyBTCgkJJGNocls4NF0gPSAnMjExMjIxJzsgLy8gVAoJCSRjaHJbODVdID0gJzIyMTEyMSc7IC8vIFUKCQkkY2hyWzg2XSA9ICcyMjIxMTEnOyAvLyBWCgkJJGNocls4N10gPSAnMTEyMTIyJzsgLy8gVwoJCSRjaHJbODhdID0gJzExMjIyMSc7IC8vIFgKCQkkY2hyWzg5XSA9ICcxMjIxMjEnOyAvLyBZCgkJJGNocls5MF0gPSAnMTIzMTExJzsgLy8gWgoJCSRjaHJbNDVdID0gJzEyMTEzMSc7IC8vIC0KCQkkY2hyWzQ2XSA9ICczMTExMTInOyAvLyAuCgkJJGNoclszMl0gPSAnMzExMjExJzsgLy8KCQkkY2hyWzM2XSA9ICczMjExMTEnOyAvLyAkCgkJJGNocls0N10gPSAnMTEyMTMxJzsgLy8gLwoJCSRjaHJbNDNdID0gJzExMzEyMSc7IC8vICsKCQkkY2hyWzM3XSA9ICcyMTExMzEnOyAvLyAlCgkJJGNoclsxMjhdID0gJzEyMTIyMSc7IC8vICgkKQoJCSRjaHJbMTI5XSA9ICczMTExMjEnOyAvLyAoLykKCQkkY2hyWzEzMF0gPSAnMTIyMjExJzsgLy8gKCspCgkJJGNoclsxMzFdID0gJzMxMjExMSc7IC8vICglKQoJCSRjaHJbNDJdID0gJzExMTE0MSc7IC8vIHN0YXJ0LXN0b3AKCQkkY29kZSA9IHN0cnRvdXBwZXIoJGNvZGUpOwoJCSRlbmNvZGUgPSBhcnJheSgKCQkJY2hyKDApID0+IGNocigxMzEpLidVJywgY2hyKDEpID0+IGNocigxMjgpLidBJywgY2hyKDIpID0+IGNocigxMjgpLidCJywgY2hyKDMpID0+IGNocigxMjgpLidDJywKCQkJY2hyKDQpID0+IGNocigxMjgpLidEJywgY2hyKDUpID0+IGNocigxMjgpLidFJywgY2hyKDYpID0+IGNocigxMjgpLidGJywgY2hyKDcpID0+IGNocigxMjgpLidHJywKCQkJY2hyKDgpID0+IGNocigxMjgpLidIJywgY2hyKDkpID0+IGNocigxMjgpLidJJywgY2hyKDEwKSA9PiBjaHIoMTI4KS4nSicsIGNocigxMSkgPT4gJ8KjSycsCgkJCWNocigxMikgPT4gY2hyKDEyOCkuJ0wnLCBjaHIoMTMpID0+IGNocigxMjgpLidNJywgY2hyKDE0KSA9PiBjaHIoMTI4KS4nTicsIGNocigxNSkgPT4gY2hyKDEyOCkuJ08nLAoJCQljaHIoMTYpID0+IGNocigxMjgpLidQJywgY2hyKDE3KSA9PiBjaHIoMTI4KS4nUScsIGNocigxOCkgPT4gY2hyKDEyOCkuJ1InLCBjaHIoMTkpID0+IGNocigxMjgpLidTJywKCQkJY2hyKDIwKSA9PiBjaHIoMTI4KS4nVCcsIGNocigyMSkgPT4gY2hyKDEyOCkuJ1UnLCBjaHIoMjIpID0+IGNocigxMjgpLidWJywgY2hyKDIzKSA9PiBjaHIoMTI4KS4nVycsCgkJCWNocigyNCkgPT4gY2hyKDEyOCkuJ1gnLCBjaHIoMjUpID0+IGNocigxMjgpLidZJywgY2hyKDI2KSA9PiBjaHIoMTI4KS4nWicsIGNocigyNykgPT4gY2hyKDEzMSkuJ0EnLAoJCQljaHIoMjgpID0+IGNocigxMzEpLidCJywgY2hyKDI5KSA9PiBjaHIoMTMxKS4nQycsIGNocigzMCkgPT4gY2hyKDEzMSkuJ0QnLCBjaHIoMzEpID0+IGNocigxMzEpLidFJywKCQkJY2hyKDMyKSA9PiAnICcsIGNocigzMykgPT4gY2hyKDEyOSkuJ0EnLCBjaHIoMzQpID0+IGNocigxMjkpLidCJywgY2hyKDM1KSA9PiBjaHIoMTI5KS4nQycsCgkJCWNocigzNikgPT4gY2hyKDEyOSkuJ0QnLCBjaHIoMzcpID0+IGNocigxMjkpLidFJywgY2hyKDM4KSA9PiBjaHIoMTI5KS4nRicsIGNocigzOSkgPT4gY2hyKDEyOSkuJ0cnLAoJCQljaHIoNDApID0+IGNocigxMjkpLidIJywgY2hyKDQxKSA9PiBjaHIoMTI5KS4nSScsIGNocig0MikgPT4gY2hyKDEyOSkuJ0onLCBjaHIoNDMpID0+IGNocigxMjkpLidLJywKCQkJY2hyKDQ0KSA9PiBjaHIoMTI5KS4nTCcsIGNocig0NSkgPT4gJy0nLCBjaHIoNDYpID0+ICcuJywgY2hyKDQ3KSA9PiBjaHIoMTI5KS4nTycsCgkJCWNocig0OCkgPT4gJzAnLCBjaHIoNDkpID0+ICcxJywgY2hyKDUwKSA9PiAnMicsIGNocig1MSkgPT4gJzMnLAoJCQljaHIoNTIpID0+ICc0JywgY2hyKDUzKSA9PiAnNScsIGNocig1NCkgPT4gJzYnLCBjaHIoNTUpID0+ICc3JywKCQkJY2hyKDU2KSA9PiAnOCcsIGNocig1NykgPT4gJzknLCBjaHIoNTgpID0+IGNocigxMjkpLidaJywgY2hyKDU5KSA9PiBjaHIoMTMxKS4nRicsCgkJCWNocig2MCkgPT4gY2hyKDEzMSkuJ0cnLCBjaHIoNjEpID0+IGNocigxMzEpLidIJywgY2hyKDYyKSA9PiBjaHIoMTMxKS4nSScsIGNocig2MykgPT4gY2hyKDEzMSkuJ0onLAoJCQljaHIoNjQpID0+IGNocigxMzEpLidWJywgY2hyKDY1KSA9PiAnQScsIGNocig2NikgPT4gJ0InLCBjaHIoNjcpID0+ICdDJywKCQkJY2hyKDY4KSA9PiAnRCcsIGNocig2OSkgPT4gJ0UnLCBjaHIoNzApID0+ICdGJywgY2hyKDcxKSA9PiAnRycsCgkJCWNocig3MikgPT4gJ0gnLCBjaHIoNzMpID0+ICdJJywgY2hyKDc0KSA9PiAnSicsIGNocig3NSkgPT4gJ0snLAoJCQljaHIoNzYpID0+ICdMJywgY2hyKDc3KSA9PiAnTScsIGNocig3OCkgPT4gJ04nLCBjaHIoNzkpID0+ICdPJywKCQkJY2hyKDgwKSA9PiAnUCcsIGNocig4MSkgPT4gJ1EnLCBjaHIoODIpID0+ICdSJywgY2hyKDgzKSA9PiAnUycsCgkJCWNocig4NCkgPT4gJ1QnLCBjaHIoODUpID0+ICdVJywgY2hyKDg2KSA9PiAnVicsIGNocig4NykgPT4gJ1cnLAoJCQljaHIoODgpID0+ICdYJywgY2hyKDg5KSA9PiAnWScsIGNocig5MCkgPT4gJ1onLCBjaHIoOTEpID0+IGNocigxMzEpLidLJywKCQkJY2hyKDkyKSA9PiBjaHIoMTMxKS4nTCcsIGNocig5MykgPT4gY2hyKDEzMSkuJ00nLCBjaHIoOTQpID0+IGNocigxMzEpLidOJywgY2hyKDk1KSA9PiBjaHIoMTMxKS4nTycsCgkJCWNocig5NikgPT4gY2hyKDEzMSkuJ1cnLCBjaHIoOTcpID0+IGNocigxMzApLidBJywgY2hyKDk4KSA9PiBjaHIoMTMwKS4nQicsIGNocig5OSkgPT4gY2hyKDEzMCkuJ0MnLAoJCQljaHIoMTAwKSA9PiBjaHIoMTMwKS4nRCcsIGNocigxMDEpID0+IGNocigxMzApLidFJywgY2hyKDEwMikgPT4gY2hyKDEzMCkuJ0YnLCBjaHIoMTAzKSA9PiBjaHIoMTMwKS4nRycsCgkJCWNocigxMDQpID0+IGNocigxMzApLidIJywgY2hyKDEwNSkgPT4gY2hyKDEzMCkuJ0knLCBjaHIoMTA2KSA9PiBjaHIoMTMwKS4nSicsIGNocigxMDcpID0+IGNocigxMzApLidLJywKCQkJY2hyKDEwOCkgPT4gY2hyKDEzMCkuJ0wnLCBjaHIoMTA5KSA9PiBjaHIoMTMwKS4nTScsIGNocigxMTApID0+IGNocigxMzApLidOJywgY2hyKDExMSkgPT4gY2hyKDEzMCkuJ08nLAoJCQljaHIoMTEyKSA9PiBjaHIoMTMwKS4nUCcsIGNocigxMTMpID0+IGNocigxMzApLidRJywgY2hyKDExNCkgPT4gY2hyKDEzMCkuJ1InLCBjaHIoMTE1KSA9PiBjaHIoMTMwKS4nUycsCgkJCWNocigxMTYpID0+IGNocigxMzApLidUJywgY2hyKDExNykgPT4gY2hyKDEzMCkuJ1UnLCBjaHIoMTE4KSA9PiBjaHIoMTMwKS4nVicsIGNocigxMTkpID0+IGNocigxMzApLidXJywKCQkJY2hyKDEyMCkgPT4gY2hyKDEzMCkuJ1gnLCBjaHIoMTIxKSA9PiBjaHIoMTMwKS4nWScsIGNocigxMjIpID0+IGNocigxMzApLidaJywgY2hyKDEyMykgPT4gY2hyKDEzMSkuJ1AnLAoJCQljaHIoMTI0KSA9PiBjaHIoMTMxKS4nUScsIGNocigxMjUpID0+IGNocigxMzEpLidSJywgY2hyKDEyNikgPT4gY2hyKDEzMSkuJ1MnLCBjaHIoMTI3KSA9PiBjaHIoMTMxKS4nVCcpOwoJCSRjb2RlX2V4dCA9ICcnOwoJCSRjbGVuID0gc3RybGVuKCRjb2RlKTsKCQlmb3IgKCRpID0gMCA7ICRpIDwgJGNsZW47ICsrJGkpIHsKCQkJaWYgKG9yZCgkY29kZXskaX0pID4gMTI3KSB7CgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJJGNvZGVfZXh0IC49ICRlbmNvZGVbJGNvZGV7JGl9XTsKCQl9CgkJLy8gY2hlY2tzdW0KCQkkY29kZV9leHQgLj0gJHRoaXMtPmNoZWNrc3VtX2NvZGU5MygkY29kZV9leHQpOwoJCS8vIGFkZCBzdGFydCBhbmQgc3RvcCBjb2RlcwoJCSRjb2RlID0gJyonLiRjb2RlX2V4dC4nKic7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDEsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJJGsgPSAwOwoJCSRjbGVuID0gc3RybGVuKCRjb2RlKTsKCQlmb3IgKCRpID0gMDsgJGkgPCAkY2xlbjsgKyskaSkgewoJCQkkY2hhciA9IG9yZCgkY29kZXskaX0pOwoJCQlpZighaXNzZXQoJGNoclskY2hhcl0pKSB7CgkJCQkvLyBpbnZhbGlkIGNoYXJhY3RlcgoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCWZvciAoJGogPSAwOyAkaiA8IDY7ICsrJGopIHsKCQkJCWlmICgoJGogJSAyKSA9PSAwKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSR3ID0gJGNoclskY2hhcl17JGp9OwoJCQkJJGJhcmFycmF5WydiY29kZSddWyRrXSA9IGFycmF5KCd0JyA9PiAkdCwgJ3cnID0+ICR3LCAnaCcgPT4gMSwgJ3AnID0+IDApOwoJCQkJJGJhcmFycmF5WydtYXh3J10gKz0gJHc7CgkJCQkrKyRrOwoJCQl9CgkJfQoJCSRiYXJhcnJheVsnYmNvZGUnXVska10gPSBhcnJheSgndCcgPT4gdHJ1ZSwgJ3cnID0+IDEsICdoJyA9PiAxLCAncCcgPT4gMCk7CgkJJGJhcmFycmF5WydtYXh3J10gKz0gMTsKCQkrKyRrOwoJCXJldHVybiAkYmFyYXJyYXk7Cgl9CgoJLyoqCgkgKiBDYWxjdWxhdGUgQ09ERSA5MyBjaGVja3N1bSAobW9kdWxvIDQ3KS4KCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEByZXR1cm4gc3RyaW5nIGNoZWNrc3VtIGNvZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBjaGVja3N1bV9jb2RlOTMoJGNvZGUpIHsKCQkkY2hhcnMgPSBhcnJheSgKCQkJJzAnLCAnMScsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLAoJCQknQScsICdCJywgJ0MnLCAnRCcsICdFJywgJ0YnLCAnRycsICdIJywgJ0knLCAnSicsICdLJywKCQkJJ0wnLCAnTScsICdOJywgJ08nLCAnUCcsICdRJywgJ1InLCAnUycsICdUJywgJ1UnLCAnVicsCgkJCSdXJywgJ1gnLCAnWScsICdaJywgJy0nLCAnLicsICcgJywgJyQnLCAnLycsICcrJywgJyUnLAoJCQknPCcsICc9JywgJz4nLCAnPycpOwoJCS8vIHRyYW5zbGF0ZSBzcGVjaWFsIGNoYXJhY3RlcnMKCQkkY29kZSA9IHN0cnRyKCRjb2RlLCBjaHIoMTI4KS5jaHIoMTMxKS5jaHIoMTI5KS5jaHIoMTMwKSwgJzw9Pj8nKTsKCQkkbGVuID0gc3RybGVuKCRjb2RlKTsKCQkvLyBjYWxjdWxhdGUgY2hlY2sgZGlnaXQgQwoJCSRwID0gMTsKCQkkY2hlY2sgPSAwOwoJCWZvciAoJGkgPSAoJGxlbiAtIDEpOyAkaSA+PSAwOyAtLSRpKSB7CgkJCSRrID0gYXJyYXlfa2V5cygkY2hhcnMsICRjb2RleyRpfSk7CgkJCSRjaGVjayArPSAoJGtbMF0gKiAkcCk7CgkJCSsrJHA7CgkJCWlmICgkcCA+IDIwKSB7CgkJCQkkcCA9IDE7CgkJCX0KCQl9CgkJJGNoZWNrICU9IDQ3OwoJCSRjID0gJGNoYXJzWyRjaGVja107CgkJJGNvZGUgLj0gJGM7CgkJLy8gY2FsY3VsYXRlIGNoZWNrIGRpZ2l0IEsKCQkkcCA9IDE7CgkJJGNoZWNrID0gMDsKCQlmb3IgKCRpID0gJGxlbjsgJGkgPj0gMDsgLS0kaSkgewoJCQkkayA9IGFycmF5X2tleXMoJGNoYXJzLCAkY29kZXskaX0pOwoJCQkkY2hlY2sgKz0gKCRrWzBdICogJHApOwoJCQkrKyRwOwoJCQlpZiAoJHAgPiAxNSkgewoJCQkJJHAgPSAxOwoJCQl9CgkJfQoJCSRjaGVjayAlPSA0NzsKCQkkayA9ICRjaGFyc1skY2hlY2tdOwoJCSRjaGVja3N1bSA9ICRjLiRrOwoJCS8vIHJlc3RvIHJlc3BlY2lhbCBjaGFyYWN0ZXJzCgkJJGNoZWNrc3VtID0gc3RydHIoJGNoZWNrc3VtLCAnPD0+PycsIGNocigxMjgpLmNocigxMzEpLmNocigxMjkpLmNocigxMzApKTsKCQlyZXR1cm4gJGNoZWNrc3VtOwoJfQoKCS8qKgoJICogQ2hlY2tzdW0gZm9yIHN0YW5kYXJkIDIgb2YgNSBiYXJjb2Rlcy4KCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHByb2Nlc3MuCgkgKiBAcmV0dXJuIGludCBjaGVja3N1bS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGNoZWNrc3VtX3MyNSgkY29kZSkgewoJCSRsZW4gPSBzdHJsZW4oJGNvZGUpOwoJCSRzdW0gPSAwOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICRpKz0yKSB7CgkJCSRzdW0gKz0gJGNvZGV7JGl9OwoJCX0KCQkkc3VtICo9IDM7CgkJZm9yICgkaSA9IDE7ICRpIDwgJGxlbjsgJGkrPTIpIHsKCQkJJHN1bSArPSAoJGNvZGV7JGl9KTsKCQl9CgkJJHIgPSAkc3VtICUgMTA7CgkJaWYoJHIgPiAwKSB7CgkJCSRyID0gKDEwIC0gJHIpOwoJCX0KCQlyZXR1cm4gJHI7Cgl9CgoJLyoqCgkgKiBNU0kuCgkgKiBWYXJpYXRpb24gb2YgUGxlc3NleSBjb2RlLCB3aXRoIHNpbWlsYXIgYXBwbGljYXRpb25zCgkgKiBDb250YWlucyBkaWdpdHMgKDAgdG8gOSkgYW5kIGVuY29kZXMgdGhlIGRhdGEgb25seSBpbiB0aGUgd2lkdGggb2YgYmFycy4KCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEBwYXJhbSAkY2hlY2tzdW0gKGJvb2xlYW4pIGlmIHRydWUgYWRkIGEgY2hlY2tzdW0gdG8gdGhlIGNvZGUgKG1vZHVsbyAxMSkKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfbXNpKCRjb2RlLCAkY2hlY2tzdW09ZmFsc2UpIHsKCQkkY2hyWycwJ10gPSAnMTAwMTAwMTAwMTAwJzsKCQkkY2hyWycxJ10gPSAnMTAwMTAwMTAwMTEwJzsKCQkkY2hyWycyJ10gPSAnMTAwMTAwMTEwMTAwJzsKCQkkY2hyWyczJ10gPSAnMTAwMTAwMTEwMTEwJzsKCQkkY2hyWyc0J10gPSAnMTAwMTEwMTAwMTAwJzsKCQkkY2hyWyc1J10gPSAnMTAwMTEwMTAwMTEwJzsKCQkkY2hyWyc2J10gPSAnMTAwMTEwMTEwMTAwJzsKCQkkY2hyWyc3J10gPSAnMTAwMTEwMTEwMTEwJzsKCQkkY2hyWyc4J10gPSAnMTEwMTAwMTAwMTAwJzsKCQkkY2hyWyc5J10gPSAnMTEwMTAwMTAwMTEwJzsKCQkkY2hyWydBJ10gPSAnMTEwMTAwMTEwMTAwJzsKCQkkY2hyWydCJ10gPSAnMTEwMTAwMTEwMTEwJzsKCQkkY2hyWydDJ10gPSAnMTEwMTEwMTAwMTAwJzsKCQkkY2hyWydEJ10gPSAnMTEwMTEwMTAwMTEwJzsKCQkkY2hyWydFJ10gPSAnMTEwMTEwMTEwMTAwJzsKCQkkY2hyWydGJ10gPSAnMTEwMTEwMTEwMTEwJzsKCQlpZiAoJGNoZWNrc3VtKSB7CgkJCS8vIGFkZCBjaGVja3N1bQoJCQkkY2xlbiA9IHN0cmxlbigkY29kZSk7CgkJCSRwID0gMjsKCQkJJGNoZWNrID0gMDsKCQkJZm9yICgkaSA9ICgkY2xlbiAtIDEpOyAkaSA+PSAwOyAtLSRpKSB7CgkJCQkkY2hlY2sgKz0gKGhleGRlYygkY29kZXskaX0pICogJHApOwoJCQkJKyskcDsKCQkJCWlmICgkcCA+IDcpIHsKCQkJCQkkcCA9IDI7CgkJCQl9CgkJCX0KCQkJJGNoZWNrICU9IDExOwoJCQlpZiAoJGNoZWNrID4gMCkgewoJCQkJJGNoZWNrID0gMTEgLSAkY2hlY2s7CgkJCX0KCQkJJGNvZGUgLj0gJGNoZWNrOwoJCX0KCQkkc2VxID0gJzExMCc7IC8vIGxlZnQgZ3VhcmQKCQkkY2xlbiA9IHN0cmxlbigkY29kZSk7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGNsZW47ICsrJGkpIHsKCQkJJGRpZ2l0ID0gJGNvZGV7JGl9OwoJCQlpZiAoIWlzc2V0KCRjaHJbJGRpZ2l0XSkpIHsKCQkJCS8vIGludmFsaWQgY2hhcmFjdGVyCgkJCQlyZXR1cm4gZmFsc2U7CgkJCX0KCQkJJHNlcSAuPSAkY2hyWyRkaWdpdF07CgkJfQoJCSRzZXEgLj0gJzEwMDEnOyAvLyByaWdodCBndWFyZAoJCSRiYXJhcnJheSA9IGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAxLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCXJldHVybiAkdGhpcy0+Ymluc2VxX3RvX2FycmF5KCRzZXEsICRiYXJhcnJheSk7Cgl9CgoJLyoqCgkgKiBTdGFuZGFyZCAyIG9mIDUgYmFyY29kZXMuCgkgKiBVc2VkIGluIGFpcmxpbmUgdGlja2V0IG1hcmtpbmcsIHBob3RvZmluaXNoaW5nCgkgKiBDb250YWlucyBkaWdpdHMgKDAgdG8gOSkgYW5kIGVuY29kZXMgdGhlIGRhdGEgb25seSBpbiB0aGUgd2lkdGggb2YgYmFycy4KCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEBwYXJhbSAkY2hlY2tzdW0gKGJvb2xlYW4pIGlmIHRydWUgYWRkIGEgY2hlY2tzdW0gdG8gdGhlIGNvZGUKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfczI1KCRjb2RlLCAkY2hlY2tzdW09ZmFsc2UpIHsKCQkkY2hyWycwJ10gPSAnMTAxMDExMTAxMTEwMTAnOwoJCSRjaHJbJzEnXSA9ICcxMTEwMTAxMDEwMTExMCc7CgkJJGNoclsnMiddID0gJzEwMTExMDEwMTAxMTEwJzsKCQkkY2hyWyczJ10gPSAnMTExMDExMTAxMDEwMTAnOwoJCSRjaHJbJzQnXSA9ICcxMDEwMTExMDEwMTExMCc7CgkJJGNoclsnNSddID0gJzExMTAxMDExMTAxMDEwJzsKCQkkY2hyWyc2J10gPSAnMTAxMTEwMTExMDEwMTAnOwoJCSRjaHJbJzcnXSA9ICcxMDEwMTAxMTEwMTExMCc7CgkJJGNoclsnOCddID0gJzEwMTAxMTEwMTExMDEwJzsKCQkkY2hyWyc5J10gPSAnMTAxMTEwMTAxMTEwMTAnOwoJCWlmICgkY2hlY2tzdW0pIHsKCQkJLy8gYWRkIGNoZWNrc3VtCgkJCSRjb2RlIC49ICR0aGlzLT5jaGVja3N1bV9zMjUoJGNvZGUpOwoJCX0KCQlpZigoc3RybGVuKCRjb2RlKSAlIDIpICE9IDApIHsKCQkJLy8gYWRkIGxlYWRpbmcgemVybyBpZiBjb2RlLWxlbmd0aCBpcyBvZGQKCQkJJGNvZGUgPSAnMCcuJGNvZGU7CgkJfQoJCSRzZXEgPSAnMTEwMTEwMTAnOwoJCSRjbGVuID0gc3RybGVuKCRjb2RlKTsKCQlmb3IgKCRpID0gMDsgJGkgPCAkY2xlbjsgKyskaSkgewoJCQkkZGlnaXQgPSAkY29kZXskaX07CgkJCWlmICghaXNzZXQoJGNoclskZGlnaXRdKSkgewoJCQkJLy8gaW52YWxpZCBjaGFyYWN0ZXIKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkc2VxIC49ICRjaHJbJGRpZ2l0XTsKCQl9CgkJJHNlcSAuPSAnMTEwMTAxMSc7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDEsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJcmV0dXJuICR0aGlzLT5iaW5zZXFfdG9fYXJyYXkoJHNlcSwgJGJhcmFycmF5KTsKCX0KCgkvKioKCSAqIENvbnZlcnQgYmluYXJ5IGJhcmNvZGUgc2VxdWVuY2UgdG8gVENQREYgYmFyY29kZSBhcnJheS4KCSAqIEBwYXJhbSAkc2VxIChzdHJpbmcpIGJhcmNvZGUgYXMgYmluYXJ5IHNlcXVlbmNlLgoJICogQHBhcmFtICRiYXJhcnJheSAoYXJyYXkpIGJhcmNvZGUgYXJyYXkuCgkgKiDDsnBhcmFtIGFycmF5ICRiYXJhcnJheSBUQ1BERiBiYXJjb2RlIGFycmF5IHRvIGZpbGwgdXAKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJpbnNlcV90b19hcnJheSgkc2VxLCAkYmFyYXJyYXkpIHsKCQkkbGVuID0gc3RybGVuKCRzZXEpOwoJCSR3ID0gMDsKCQkkayA9IDA7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQkkdyArPSAxOwoJCQlpZiAoKCRpID09ICgkbGVuIC0gMSkpIE9SICgoJGkgPCAoJGxlbiAtIDEpKSBBTkQgKCRzZXF7JGl9ICE9ICRzZXF7KCRpKzEpfSkpKSB7CgkJCQlpZiAoJHNlcXskaX0gPT0gJzEnKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSRiYXJhcnJheVsnYmNvZGUnXVska10gPSBhcnJheSgndCcgPT4gJHQsICd3JyA9PiAkdywgJ2gnID0+IDEsICdwJyA9PiAwKTsKCQkJCSRiYXJhcnJheVsnbWF4dyddICs9ICR3OwoJCQkJKyskazsKCQkJCSR3ID0gMDsKCQkJfQoJCX0KCQlyZXR1cm4gJGJhcmFycmF5OwoJfQoKCS8qKgoJICogSW50ZXJsZWF2ZWQgMiBvZiA1IGJhcmNvZGVzLgoJICogQ29tcGFjdCBudW1lcmljIGNvZGUsIHdpZGVseSB1c2VkIGluIGluZHVzdHJ5LCBhaXIgY2FyZ28KCSAqIENvbnRhaW5zIGRpZ2l0cyAoMCB0byA5KSBhbmQgZW5jb2RlcyB0aGUgZGF0YSBpbiB0aGUgd2lkdGggb2YgYm90aCBiYXJzIGFuZCBzcGFjZXMuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcGFyYW0gJGNoZWNrc3VtIChib29sZWFuKSBpZiB0cnVlIGFkZCBhIGNoZWNrc3VtIHRvIHRoZSBjb2RlCgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgcmVwcmVzZW50YXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiYXJjb2RlX2kyNSgkY29kZSwgJGNoZWNrc3VtPWZhbHNlKSB7CgkJJGNoclsnMCddID0gJzExMjIxJzsKCQkkY2hyWycxJ10gPSAnMjExMTInOwoJCSRjaHJbJzInXSA9ICcxMjExMic7CgkJJGNoclsnMyddID0gJzIyMTExJzsKCQkkY2hyWyc0J10gPSAnMTEyMTInOwoJCSRjaHJbJzUnXSA9ICcyMTIxMSc7CgkJJGNoclsnNiddID0gJzEyMjExJzsKCQkkY2hyWyc3J10gPSAnMTExMjInOwoJCSRjaHJbJzgnXSA9ICcyMTEyMSc7CgkJJGNoclsnOSddID0gJzEyMTIxJzsKCQkkY2hyWydBJ10gPSAnMTEnOwoJCSRjaHJbJ1onXSA9ICcyMSc7CgkJaWYgKCRjaGVja3N1bSkgewoJCQkvLyBhZGQgY2hlY2tzdW0KCQkJJGNvZGUgLj0gJHRoaXMtPmNoZWNrc3VtX3MyNSgkY29kZSk7CgkJfQoJCWlmKChzdHJsZW4oJGNvZGUpICUgMikgIT0gMCkgewoJCQkvLyBhZGQgbGVhZGluZyB6ZXJvIGlmIGNvZGUtbGVuZ3RoIGlzIG9kZAoJCQkkY29kZSA9ICcwJy4kY29kZTsKCQl9CgkJLy8gYWRkIHN0YXJ0IGFuZCBzdG9wIGNvZGVzCgkJJGNvZGUgPSAnQUEnLnN0cnRvbG93ZXIoJGNvZGUpLidaQSc7CgoJCSRiYXJhcnJheSA9IGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAxLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCSRrID0gMDsKCQkkY2xlbiA9IHN0cmxlbigkY29kZSk7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGNsZW47ICRpID0gKCRpICsgMikpIHsKCQkJJGNoYXJfYmFyID0gJGNvZGV7JGl9OwoJCQkkY2hhcl9zcGFjZSA9ICRjb2RleyRpKzF9OwoJCQlpZigoIWlzc2V0KCRjaHJbJGNoYXJfYmFyXSkpIE9SICghaXNzZXQoJGNoclskY2hhcl9zcGFjZV0pKSkgewoJCQkJLy8gaW52YWxpZCBjaGFyYWN0ZXIKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkvLyBjcmVhdGUgYSBiYXItc3BhY2Ugc2VxdWVuY2UKCQkJJHNlcSA9ICcnOwoJCQkkY2hybGVuID0gc3RybGVuKCRjaHJbJGNoYXJfYmFyXSk7CgkJCWZvciAoJHMgPSAwOyAkcyA8ICRjaHJsZW47ICRzKyspewoJCQkJJHNlcSAuPSAkY2hyWyRjaGFyX2Jhcl17JHN9IC4gJGNoclskY2hhcl9zcGFjZV17JHN9OwoJCQl9CgkJCSRzZXFsZW4gPSBzdHJsZW4oJHNlcSk7CgkJCWZvciAoJGogPSAwOyAkaiA8ICRzZXFsZW47ICsrJGopIHsKCQkJCWlmICgoJGogJSAyKSA9PSAwKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSR3ID0gJHNlcXskan07CgkJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGtdID0gYXJyYXkoJ3QnID0+ICR0LCAndycgPT4gJHcsICdoJyA9PiAxLCAncCcgPT4gMCk7CgkJCQkkYmFyYXJyYXlbJ21heHcnXSArPSAkdzsKCQkJCSsrJGs7CgkJCX0KCQl9CgkJcmV0dXJuICRiYXJhcnJheTsKCX0KCgkvKioKCSAqIEMxMjggYmFyY29kZXMuCgkgKiBWZXJ5IGNhcGFibGUgY29kZSwgZXhjZWxsZW50IGRlbnNpdHksIGhpZ2ggcmVsaWFiaWxpdHk7IGluIHZlcnkgd2lkZSB1c2Ugd29ybGQtd2lkZQoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcmVwcmVzZW50LgoJICogQHBhcmFtICR0eXBlIChzdHJpbmcpIGJhcmNvZGUgdHlwZTogQSwgQiwgQyBvciBlbXB0eSBmb3IgYXV0b21hdGljIHN3aXRjaCAoQVVUTyBtb2RlKQoJICogQHJldHVybiBhcnJheSBiYXJjb2RlIHJlcHJlc2VudGF0aW9uLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYmFyY29kZV9jMTI4KCRjb2RlLCAkdHlwZT0nJykgewoJCSRjaHIgPSBhcnJheSgKCQkJJzIxMjIyMicsIC8qIDAwICovCgkJCScyMjIxMjInLCAvKiAwMSAqLwoJCQknMjIyMjIxJywgLyogMDIgKi8KCQkJJzEyMTIyMycsIC8qIDAzICovCgkJCScxMjEzMjInLCAvKiAwNCAqLwoJCQknMTMxMjIyJywgLyogMDUgKi8KCQkJJzEyMjIxMycsIC8qIDA2ICovCgkJCScxMjIzMTInLCAvKiAwNyAqLwoJCQknMTMyMjEyJywgLyogMDggKi8KCQkJJzIyMTIxMycsIC8qIDA5ICovCgkJCScyMjEzMTInLCAvKiAxMCAqLwoJCQknMjMxMjEyJywgLyogMTEgKi8KCQkJJzExMjIzMicsIC8qIDEyICovCgkJCScxMjIxMzInLCAvKiAxMyAqLwoJCQknMTIyMjMxJywgLyogMTQgKi8KCQkJJzExMzIyMicsIC8qIDE1ICovCgkJCScxMjMxMjInLCAvKiAxNiAqLwoJCQknMTIzMjIxJywgLyogMTcgKi8KCQkJJzIyMzIxMScsIC8qIDE4ICovCgkJCScyMjExMzInLCAvKiAxOSAqLwoJCQknMjIxMjMxJywgLyogMjAgKi8KCQkJJzIxMzIxMicsIC8qIDIxICovCgkJCScyMjMxMTInLCAvKiAyMiAqLwoJCQknMzEyMTMxJywgLyogMjMgKi8KCQkJJzMxMTIyMicsIC8qIDI0ICovCgkJCSczMjExMjInLCAvKiAyNSAqLwoJCQknMzIxMjIxJywgLyogMjYgKi8KCQkJJzMxMjIxMicsIC8qIDI3ICovCgkJCSczMjIxMTInLCAvKiAyOCAqLwoJCQknMzIyMjExJywgLyogMjkgKi8KCQkJJzIxMjEyMycsIC8qIDMwICovCgkJCScyMTIzMjEnLCAvKiAzMSAqLwoJCQknMjMyMTIxJywgLyogMzIgKi8KCQkJJzExMTMyMycsIC8qIDMzICovCgkJCScxMzExMjMnLCAvKiAzNCAqLwoJCQknMTMxMzIxJywgLyogMzUgKi8KCQkJJzExMjMxMycsIC8qIDM2ICovCgkJCScxMzIxMTMnLCAvKiAzNyAqLwoJCQknMTMyMzExJywgLyogMzggKi8KCQkJJzIxMTMxMycsIC8qIDM5ICovCgkJCScyMzExMTMnLCAvKiA0MCAqLwoJCQknMjMxMzExJywgLyogNDEgKi8KCQkJJzExMjEzMycsIC8qIDQyICovCgkJCScxMTIzMzEnLCAvKiA0MyAqLwoJCQknMTMyMTMxJywgLyogNDQgKi8KCQkJJzExMzEyMycsIC8qIDQ1ICovCgkJCScxMTMzMjEnLCAvKiA0NiAqLwoJCQknMTMzMTIxJywgLyogNDcgKi8KCQkJJzMxMzEyMScsIC8qIDQ4ICovCgkJCScyMTEzMzEnLCAvKiA0OSAqLwoJCQknMjMxMTMxJywgLyogNTAgKi8KCQkJJzIxMzExMycsIC8qIDUxICovCgkJCScyMTMzMTEnLCAvKiA1MiAqLwoJCQknMjEzMTMxJywgLyogNTMgKi8KCQkJJzMxMTEyMycsIC8qIDU0ICovCgkJCSczMTEzMjEnLCAvKiA1NSAqLwoJCQknMzMxMTIxJywgLyogNTYgKi8KCQkJJzMxMjExMycsIC8qIDU3ICovCgkJCSczMTIzMTEnLCAvKiA1OCAqLwoJCQknMzMyMTExJywgLyogNTkgKi8KCQkJJzMxNDExMScsIC8qIDYwICovCgkJCScyMjE0MTEnLCAvKiA2MSAqLwoJCQknNDMxMTExJywgLyogNjIgKi8KCQkJJzExMTIyNCcsIC8qIDYzICovCgkJCScxMTE0MjInLCAvKiA2NCAqLwoJCQknMTIxMTI0JywgLyogNjUgKi8KCQkJJzEyMTQyMScsIC8qIDY2ICovCgkJCScxNDExMjInLCAvKiA2NyAqLwoJCQknMTQxMjIxJywgLyogNjggKi8KCQkJJzExMjIxNCcsIC8qIDY5ICovCgkJCScxMTI0MTInLCAvKiA3MCAqLwoJCQknMTIyMTE0JywgLyogNzEgKi8KCQkJJzEyMjQxMScsIC8qIDcyICovCgkJCScxNDIxMTInLCAvKiA3MyAqLwoJCQknMTQyMjExJywgLyogNzQgKi8KCQkJJzI0MTIxMScsIC8qIDc1ICovCgkJCScyMjExMTQnLCAvKiA3NiAqLwoJCQknNDEzMTExJywgLyogNzcgKi8KCQkJJzI0MTExMicsIC8qIDc4ICovCgkJCScxMzQxMTEnLCAvKiA3OSAqLwoJCQknMTExMjQyJywgLyogODAgKi8KCQkJJzEyMTE0MicsIC8qIDgxICovCgkJCScxMjEyNDEnLCAvKiA4MiAqLwoJCQknMTE0MjEyJywgLyogODMgKi8KCQkJJzEyNDExMicsIC8qIDg0ICovCgkJCScxMjQyMTEnLCAvKiA4NSAqLwoJCQknNDExMjEyJywgLyogODYgKi8KCQkJJzQyMTExMicsIC8qIDg3ICovCgkJCSc0MjEyMTEnLCAvKiA4OCAqLwoJCQknMjEyMTQxJywgLyogODkgKi8KCQkJJzIxNDEyMScsIC8qIDkwICovCgkJCSc0MTIxMjEnLCAvKiA5MSAqLwoJCQknMTExMTQzJywgLyogOTIgKi8KCQkJJzExMTM0MScsIC8qIDkzICovCgkJCScxMzExNDEnLCAvKiA5NCAqLwoJCQknMTE0MTEzJywgLyogOTUgKi8KCQkJJzExNDMxMScsIC8qIDk2ICovCgkJCSc0MTExMTMnLCAvKiA5NyAqLwoJCQknNDExMzExJywgLyogOTggKi8KCQkJJzExMzE0MScsIC8qIDk5ICovCgkJCScxMTQxMzEnLCAvKiAxMDAgKi8KCQkJJzMxMTE0MScsIC8qIDEwMSAqLwoJCQknNDExMTMxJywgLyogMTAyICovCgkJCScyMTE0MTInLCAvKiAxMDMgU1RBUlQgQSAqLwoJCQknMjExMjE0JywgLyogMTA0IFNUQVJUIEIgKi8KCQkJJzIxMTIzMicsIC8qIDEwNSBTVEFSVCBDICovCgkJCScyMzMxMTEnLCAvKiBTVE9QICovCgkJCScyMDAwMDAnICAvKiBFTkQgKi8KCQkpOwoJCS8vIEFTQ0lJIGNoYXJhY3RlcnMgZm9yIGNvZGUgQSAoQVNDSUkgMDAgLSA5NSkKCQkka2V5c19hID0gJyAhIiMkJSZcJygpKissLS4vMDEyMzQ1Njc4OTo7PD0+P0BBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWltcXF1eXyc7CgkJJGtleXNfYSAuPSBjaHIoMCkuY2hyKDEpLmNocigyKS5jaHIoMykuY2hyKDQpLmNocig1KS5jaHIoNikuY2hyKDcpLmNocig4KS5jaHIoOSk7CgkJJGtleXNfYSAuPSBjaHIoMTApLmNocigxMSkuY2hyKDEyKS5jaHIoMTMpLmNocigxNCkuY2hyKDE1KS5jaHIoMTYpLmNocigxNykuY2hyKDE4KS5jaHIoMTkpOwoJCSRrZXlzX2EgLj0gY2hyKDIwKS5jaHIoMjEpLmNocigyMikuY2hyKDIzKS5jaHIoMjQpLmNocigyNSkuY2hyKDI2KS5jaHIoMjcpLmNocigyOCkuY2hyKDI5KTsKCQkka2V5c19hIC49IGNocigzMCkuY2hyKDMxKTsKCQkvLyBBU0NJSSBjaGFyYWN0ZXJzIGZvciBjb2RlIEIgKEFTQ0lJIDMyIC0gMTI3KQoJCSRrZXlzX2IgPSAnICEiIyQlJlwnKCkqKywtLi8wMTIzNDU2Nzg5Ojs8PT4/QEFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaW1xcXV5fYGFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6e3x9ficuY2hyKDEyNyk7CgkJLy8gc3BlY2lhbCBjb2RlcwoJCSRmbmNfYSA9IGFycmF5KDI0MSA9PiAxMDIsIDI0MiA9PiA5NywgMjQzID0+IDk2LCAyNDQgPT4gMTAxKTsKCQkkZm5jX2IgPSBhcnJheSgyNDEgPT4gMTAyLCAyNDIgPT4gOTcsIDI0MyA9PiA5NiwgMjQ0ID0+IDEwMCk7CgkJLy8gYXJyYXkgb2Ygc3ltYm9scwoJCSRjb2RlX2RhdGEgPSBhcnJheSgpOwoJCS8vIGxlbmdodCBvZiB0aGUgY29kZQoJCSRsZW4gPSBzdHJsZW4oJGNvZGUpOwoJCXN3aXRjaChzdHJ0b3VwcGVyKCR0eXBlKSkgewoJCQljYXNlICdBJzogeyAvLyBNT0RFIEEKCQkJCSRzdGFydGlkID0gMTAzOwoJCQkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQkJCSRjaGFyID0gJGNvZGV7JGl9OwoJCQkJCSRjaGFyX2lkID0gb3JkKCRjaGFyKTsKCQkJCQlpZiAoKCRjaGFyX2lkID49IDI0MSkgQU5EICgkY2hhcl9pZCA8PSAyNDQpKSB7CgkJCQkJCSRjb2RlX2RhdGFbXSA9ICRmbmNfYVskY2hhcl9pZF07CgkJCQkJfSBlbHNlaWYgKCgkY2hhcl9pZCA+PSAwKSBBTkQgKCRjaGFyX2lkIDw9IDk1KSkgewoJCQkJCQkkY29kZV9kYXRhW10gPSBzdHJwb3MoJGtleXNfYSwgJGNoYXIpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCXJldHVybiBmYWxzZTsKCQkJCQl9CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdCJzogeyAvLyBNT0RFIEIKCQkJCSRzdGFydGlkID0gMTA0OwoJCQkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQkJCSRjaGFyID0gJGNvZGV7JGl9OwoJCQkJCSRjaGFyX2lkID0gb3JkKCRjaGFyKTsKCQkJCQlpZiAoKCRjaGFyX2lkID49IDI0MSkgQU5EICgkY2hhcl9pZCA8PSAyNDQpKSB7CgkJCQkJCSRjb2RlX2RhdGFbXSA9ICRmbmNfYlskY2hhcl9pZF07CgkJCQkJfSBlbHNlaWYgKCgkY2hhcl9pZCA+PSAzMikgQU5EICgkY2hhcl9pZCA8PSAxMjcpKSB7CgkJCQkJCSRjb2RlX2RhdGFbXSA9IHN0cnBvcygka2V5c19iLCAkY2hhcik7CgkJCQkJfSBlbHNlIHsKCQkJCQkJcmV0dXJuIGZhbHNlOwoJCQkJCX0KCQkJCX0KCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ0MnOiB7IC8vIE1PREUgQwoJCQkJJHN0YXJ0aWQgPSAxMDU7CgkJCQlpZiAob3JkKCRjb2RlWzBdKSA9PSAyNDEpIHsKCQkJCQkkY29kZV9kYXRhW10gPSAxMDI7CgkJCQkJJGNvZGUgPSBzdWJzdHIoJGNvZGUsIDEpOwoJCQkJCS0tJGxlbjsKCQkJCX0KCQkJCWlmICgoJGxlbiAlIDIpICE9IDApIHsKCQkJCQkvLyB0aGUgbGVuZ3RoIG11c3QgYmUgZXZlbgoJCQkJCXJldHVybiBmYWxzZTsKCQkJCX0KCQkJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICRpKz0yKSB7CgkJCQkJJGNocm51bSA9ICRjb2RleyRpfS4kY29kZXskaSsxfTsKCQkJCQlpZiAocHJlZ19tYXRjaCgnLyhbMC05XXsyfSkvJywgJGNocm51bSkgPiAwKSB7CgkJCQkJCSRjb2RlX2RhdGFbXSA9IGludHZhbCgkY2hybnVtKTsKCQkJCQl9IGVsc2UgewoJCQkJCQlyZXR1cm4gZmFsc2U7CgkJCQkJfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogeyAvLyBNT0RFIEFVVE8KCQkJCS8vIHNwbGl0IGNvZGUgaW50byBzZXF1ZW5jZXMKCQkJCSRzZXF1ZW5jZSA9IGFycmF5KCk7CgkJCQkvLyBnZXQgbnVtZXJpYyBzZXF1ZW5jZXMgKGlmIGFueSkKCQkJCSRudW1zZXEgPSBhcnJheSgpOwoJCQkJcHJlZ19tYXRjaF9hbGwoJy8oWzAtOV17NCx9KS8nLCAkY29kZSwgJG51bXNlcSwgUFJFR19PRkZTRVRfQ0FQVFVSRSk7CgkJCQlpZiAoaXNzZXQoJG51bXNlcVsxXSkgQU5EICFlbXB0eSgkbnVtc2VxWzFdKSkgewoJCQkJCSRlbmRfb2Zmc2V0ID0gMDsKCQkJCQlmb3JlYWNoICgkbnVtc2VxWzFdIGFzICR2YWwpIHsKCQkJCQkJJG9mZnNldCA9ICR2YWxbMV07CgkJCQkJCWlmICgkb2Zmc2V0ID4gJGVuZF9vZmZzZXQpIHsKCQkJCQkJCS8vIG5vbiBudW1lcmljIHNlcXVlbmNlCgkJCQkJCQkkc2VxdWVuY2UgPSBhcnJheV9tZXJnZSgkc2VxdWVuY2UsICR0aGlzLT5nZXQxMjhBQnNlcXVlbmNlKHN1YnN0cigkY29kZSwgJGVuZF9vZmZzZXQsICgkb2Zmc2V0IC0gJGVuZF9vZmZzZXQpKSkpOwoJCQkJCQl9CgkJCQkJCS8vIG51bWVyaWMgc2VxdWVuY2UKCQkJCQkJJHNsZW4gPSBzdHJsZW4oJHZhbFswXSk7CgkJCQkJCWlmICgoJHNsZW4gJSAyKSAhPSAwKSB7CgkJCQkJCQkvLyB0aGUgbGVuZ3RoIG11c3QgYmUgZXZlbgoJCQkJCQkJLS0kc2xlbjsKCQkJCQkJfQoJCQkJCQkkc2VxdWVuY2VbXSA9IGFycmF5KCdDJywgc3Vic3RyKCRjb2RlLCAkb2Zmc2V0LCAkc2xlbiksICRzbGVuKTsKCQkJCQkJJGVuZF9vZmZzZXQgPSAkb2Zmc2V0ICsgJHNsZW47CgkJCQkJfQoJCQkJCWlmICgkZW5kX29mZnNldCA8ICRsZW4pIHsKCQkJCQkJJHNlcXVlbmNlID0gYXJyYXlfbWVyZ2UoJHNlcXVlbmNlLCAkdGhpcy0+Z2V0MTI4QUJzZXF1ZW5jZShzdWJzdHIoJGNvZGUsICRlbmRfb2Zmc2V0KSkpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJLy8gdGV4dCBjb2RlIChub24gQyBtb2RlKQoJCQkJCSRzZXF1ZW5jZSA9IGFycmF5X21lcmdlKCRzZXF1ZW5jZSwgJHRoaXMtPmdldDEyOEFCc2VxdWVuY2UoJGNvZGUpKTsKCQkJCX0KCQkJCS8vIHByb2Nlc3MgdGhlIHNlcXVlbmNlCgkJCQlmb3JlYWNoICgkc2VxdWVuY2UgYXMgJGtleSA9PiAkc2VxKSB7CgkJCQkJc3dpdGNoKCRzZXFbMF0pIHsKCQkJCQkJY2FzZSAnQSc6IHsKCQkJCQkJCWlmICgka2V5ID09IDApIHsKCQkJCQkJCQkkc3RhcnRpZCA9IDEwMzsKCQkJCQkJCX0gZWxzZWlmICgkc2VxdWVuY2VbKCRrZXkgLSAxKV1bMF0gIT0gJ0EnKSB7CgkJCQkJCQkJaWYgKCgkc2VxWzJdID09IDEpIEFORCAoJGtleSA+IDApIEFORCAoJHNlcXVlbmNlWygka2V5IC0gMSldWzBdID09ICdCJykgQU5EICghaXNzZXQoJHNlcXVlbmNlWygka2V5IC0gMSldWzNdKSkpIHsKCQkJCQkJCQkJLy8gc2luZ2xlIGNoYXJhY3RlciBzaGlmdAoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSA5ODsKCQkJCQkJCQkJLy8gbWFyayBzaGlmdAoJCQkJCQkJCQkkc2VxdWVuY2VbJGtleV1bM10gPSB0cnVlOwoJCQkJCQkJCX0gZWxzZWlmICghaXNzZXQoJHNlcXVlbmNlWygka2V5IC0gMSldWzNdKSkgewoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSAxMDE7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZm9yICgkaSA9IDA7ICRpIDwgJHNlcVsyXTsgKyskaSkgewoJCQkJCQkJCSRjaGFyID0gJHNlcVsxXXskaX07CgkJCQkJCQkJJGNoYXJfaWQgPSBvcmQoJGNoYXIpOwoJCQkJCQkJCWlmICgoJGNoYXJfaWQgPj0gMjQxKSBBTkQgKCRjaGFyX2lkIDw9IDI0NCkpIHsKCQkJCQkJCQkJJGNvZGVfZGF0YVtdID0gJGZuY19hWyRjaGFyX2lkXTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSBzdHJwb3MoJGtleXNfYSwgJGNoYXIpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ0InOiB7CgkJCQkJCQlpZiAoJGtleSA9PSAwKSB7CgkJCQkJCQkJJHRtcGNociA9IG9yZCgkc2VxWzFdWzBdKTsKCQkJCQkJCQlpZiAoKCRzZXFbMl0gPT0gMSkgQU5EICgkdG1wY2hyID49IDI0MSkgQU5EICgkdG1wY2hyIDw9IDI0NCkgQU5EIGlzc2V0KCRzZXF1ZW5jZVsoJGtleSArIDEpXSkgQU5EICgkc2VxdWVuY2VbKCRrZXkgKyAxKV1bMF0gIT0gJ0InKSkgewoJCQkJCQkJCQlzd2l0Y2ggKCRzZXF1ZW5jZVsoJGtleSArIDEpXVswXSkgewoJCQkJCQkJCQkJY2FzZSAnQSc6IHsKCQkJCQkJCQkJCQkkc3RhcnRpZCA9IDEwMzsKCQkJCQkJCQkJCQkkc2VxdWVuY2VbJGtleV1bMF0gPSAnQSc7CgkJCQkJCQkJCQkJJGNvZGVfZGF0YVtdID0gJGZuY19hWyR0bXBjaHJdOwoJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQkJY2FzZSAnQyc6IHsKCQkJCQkJCQkJCQkkc3RhcnRpZCA9IDEwNTsKCQkJCQkJCQkJCQkkc2VxdWVuY2VbJGtleV1bMF0gPSAnQyc7CgkJCQkJCQkJCQkJJGNvZGVfZGF0YVtdID0gJGZuY19hWyR0bXBjaHJdOwoJCQkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCQkJfQoJCQkJCQkJCQl9CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJCSRzdGFydGlkID0gMTA0OwoJCQkJCQkJCX0KCQkJCQkJCX0gZWxzZWlmICgkc2VxdWVuY2VbKCRrZXkgLSAxKV1bMF0gIT0gJ0InKSB7CgkJCQkJCQkJaWYgKCgkc2VxWzJdID09IDEpIEFORCAoJGtleSA+IDApIEFORCAoJHNlcXVlbmNlWygka2V5IC0gMSldWzBdID09ICdBJykgQU5EICghaXNzZXQoJHNlcXVlbmNlWygka2V5IC0gMSldWzNdKSkpIHsKCQkJCQkJCQkJLy8gc2luZ2xlIGNoYXJhY3RlciBzaGlmdAoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSA5ODsKCQkJCQkJCQkJLy8gbWFyayBzaGlmdAoJCQkJCQkJCQkkc2VxdWVuY2VbJGtleV1bM10gPSB0cnVlOwoJCQkJCQkJCX0gZWxzZWlmICghaXNzZXQoJHNlcXVlbmNlWygka2V5IC0gMSldWzNdKSkgewoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSAxMDA7CgkJCQkJCQkJfQoJCQkJCQkJfQoJCQkJCQkJZm9yICgkaSA9IDA7ICRpIDwgJHNlcVsyXTsgKyskaSkgewoJCQkJCQkJCSRjaGFyID0gJHNlcVsxXXskaX07CgkJCQkJCQkJJGNoYXJfaWQgPSBvcmQoJGNoYXIpOwoJCQkJCQkJCWlmICgoJGNoYXJfaWQgPj0gMjQxKSBBTkQgKCRjaGFyX2lkIDw9IDI0NCkpIHsKCQkJCQkJCQkJJGNvZGVfZGF0YVtdID0gJGZuY19iWyRjaGFyX2lkXTsKCQkJCQkJCQl9IGVsc2UgewoJCQkJCQkJCQkkY29kZV9kYXRhW10gPSBzdHJwb3MoJGtleXNfYiwgJGNoYXIpOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgJ0MnOiB7CgkJCQkJCQlpZiAoJGtleSA9PSAwKSB7CgkJCQkJCQkJJHN0YXJ0aWQgPSAxMDU7CgkJCQkJCQl9IGVsc2VpZiAoJHNlcXVlbmNlWygka2V5IC0gMSldWzBdICE9ICdDJykgewoJCQkJCQkJCSRjb2RlX2RhdGFbXSA9IDk5OwoJCQkJCQkJfQoJCQkJCQkJZm9yICgkaSA9IDA7ICRpIDwgJHNlcVsyXTsgJGkrPTIpIHsKCQkJCQkJCQkkY2hybnVtID0gJHNlcVsxXXskaX0uJHNlcVsxXXskaSsxfTsKCQkJCQkJCQkkY29kZV9kYXRhW10gPSBpbnR2YWwoJGNocm51bSk7CgkJCQkJCQl9CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkvLyBjYWxjdWxhdGUgY2hlY2sgY2hhcmFjdGVyCgkJJHN1bSA9ICRzdGFydGlkOwoJCWZvcmVhY2ggKCRjb2RlX2RhdGEgYXMgJGtleSA9PiAkdmFsKSB7CgkJCSRzdW0gKz0gKCR2YWwgKiAoJGtleSArIDEpKTsKCQl9CgkJLy8gYWRkIGNoZWNrIGNoYXJhY3RlcgoJCSRjb2RlX2RhdGFbXSA9ICgkc3VtICUgMTAzKTsKCQkvLyBhZGQgc3RvcCBzZXF1ZW5jZQoJCSRjb2RlX2RhdGFbXSA9IDEwNjsKCQkkY29kZV9kYXRhW10gPSAxMDc7CgkJLy8gYWRkIHN0YXJ0IGNvZGUgYXQgdGhlIGJlZ2lubmluZwoJCWFycmF5X3Vuc2hpZnQoJGNvZGVfZGF0YSwgJHN0YXJ0aWQpOwoJCS8vIGJ1aWxkIGJhcmNvZGUgYXJyYXkKCQkkYmFyYXJyYXkgPSBhcnJheSgnY29kZScgPT4gJGNvZGUsICdtYXh3JyA9PiAwLCAnbWF4aCcgPT4gMSwgJ2Jjb2RlJyA9PiBhcnJheSgpKTsKCQlmb3JlYWNoICgkY29kZV9kYXRhIGFzICR2YWwpIHsKCQkJJHNlcSA9ICRjaHJbJHZhbF07CgkJCWZvciAoJGogPSAwOyAkaiA8IDY7ICsrJGopIHsKCQkJCWlmICgoJGogJSAyKSA9PSAwKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSR3ID0gJHNlcXskan07CgkJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bXSA9IGFycmF5KCd0JyA9PiAkdCwgJ3cnID0+ICR3LCAnaCcgPT4gMSwgJ3AnID0+IDApOwoJCQkJJGJhcmFycmF5WydtYXh3J10gKz0gJHc7CgkJCX0KCQl9CgkJcmV0dXJuICRiYXJhcnJheTsKCX0KCgkvKioKCSAqIFNwbGl0IHRleHQgY29kZSBpbiBBL0Igc2VxdWVuY2UgZm9yIDEyOCBjb2RlCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBzcGxpdC4KCSAqIEByZXR1cm4gYXJyYXkgc2VxdWVuY2UKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGdldDEyOEFCc2VxdWVuY2UoJGNvZGUpIHsKCQkkbGVuID0gc3RybGVuKCRjb2RlKTsKCQkkc2VxdWVuY2UgPSBhcnJheSgpOwoJCS8vIGdldCBBIHNlcXVlbmNlcyAoaWYgYW55KQoJCSRudW1zZXEgPSBhcnJheSgpOwoJCXByZWdfbWF0Y2hfYWxsKCcvKFtcMC1cMzFdKS8nLCAkY29kZSwgJG51bXNlcSwgUFJFR19PRkZTRVRfQ0FQVFVSRSk7CgkJaWYgKGlzc2V0KCRudW1zZXFbMV0pIEFORCAhZW1wdHkoJG51bXNlcVsxXSkpIHsKCQkJJGVuZF9vZmZzZXQgPSAwOwoJCQlmb3JlYWNoICgkbnVtc2VxWzFdIGFzICR2YWwpIHsKCQkJCSRvZmZzZXQgPSAkdmFsWzFdOwoJCQkJaWYgKCRvZmZzZXQgPiAkZW5kX29mZnNldCkgewoJCQkJCS8vIEIgc2VxdWVuY2UKCQkJCQkkc2VxdWVuY2VbXSA9IGFycmF5KCdCJywgc3Vic3RyKCRjb2RlLCAkZW5kX29mZnNldCwgKCRvZmZzZXQgLSAkZW5kX29mZnNldCkpLCAoJG9mZnNldCAtICRlbmRfb2Zmc2V0KSk7CgkJCQl9CgkJCQkvLyBBIHNlcXVlbmNlCgkJCQkkc2xlbiA9IHN0cmxlbigkdmFsWzBdKTsKCQkJCSRzZXF1ZW5jZVtdID0gYXJyYXkoJ0EnLCBzdWJzdHIoJGNvZGUsICRvZmZzZXQsICRzbGVuKSwgJHNsZW4pOwoJCQkJJGVuZF9vZmZzZXQgPSAkb2Zmc2V0ICsgJHNsZW47CgkJCX0KCQkJaWYgKCRlbmRfb2Zmc2V0IDwgJGxlbikgewoJCQkJJHNlcXVlbmNlW10gPSBhcnJheSgnQicsIHN1YnN0cigkY29kZSwgJGVuZF9vZmZzZXQpLCAoJGxlbiAtICRlbmRfb2Zmc2V0KSk7CgkJCX0KCQl9IGVsc2UgewoJCQkvLyBvbmx5IEIgc2VxdWVuY2UKCQkJJHNlcXVlbmNlW10gPSBhcnJheSgnQicsICRjb2RlLCAkbGVuKTsKCQl9CgkJcmV0dXJuICRzZXF1ZW5jZTsKCX0KCgkvKioKCSAqIEVBTjEzIGFuZCBVUEMtQSBiYXJjb2Rlcy4KCSAqIEVBTjEzOiBFdXJvcGVhbiBBcnRpY2xlIE51bWJlcmluZyBpbnRlcm5hdGlvbmFsIHJldGFpbCBwcm9kdWN0IGNvZGUKCSAqIFVQQy1BOiBVbml2ZXJzYWwgcHJvZHVjdCBjb2RlIHNlZW4gb24gYWxtb3N0IGFsbCByZXRhaWwgcHJvZHVjdHMgaW4gdGhlIFVTQSBhbmQgQ2FuYWRhCgkgKiBVUEMtRTogU2hvcnQgdmVyc2lvbiBvZiBVUEMgc3ltYm9sCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcGFyYW0gJGxlbiAoc3RyaW5nKSBiYXJjb2RlIHR5cGU6IDYgPSBVUEMtRSwgOCA9IEVBTjgsIDEzID0gRUFOMTMsIDEyID0gVVBDLUEKCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfZWFudXBjKCRjb2RlLCAkbGVuPTEzKSB7CgkJJHVwY2UgPSBmYWxzZTsKCQlpZiAoJGxlbiA9PSA2KSB7CgkJCSRsZW4gPSAxMjsgLy8gVVBDLUEKCQkJJHVwY2UgPSB0cnVlOyAvLyBVUEMtRSBtb2RlCgkJfQoJCSRkYXRhX2xlbiA9ICRsZW4gLSAxOwoJCS8vUGFkZGluZwoJCSRjb2RlID0gc3RyX3BhZCgkY29kZSwgJGRhdGFfbGVuLCAnMCcsIFNUUl9QQURfTEVGVCk7CgkJJGNvZGVfbGVuID0gc3RybGVuKCRjb2RlKTsKCQkvLyBjYWxjdWxhdGUgY2hlY2sgZGlnaXQKCQkkc3VtX2EgPSAwOwoJCWZvciAoJGkgPSAxOyAkaSA8ICRkYXRhX2xlbjsgJGkrPTIpIHsKCQkJJHN1bV9hICs9ICRjb2RleyRpfTsKCQl9CgkJaWYgKCRsZW4gPiAxMikgewoJCQkkc3VtX2EgKj0gMzsKCQl9CgkJJHN1bV9iID0gMDsKCQlmb3IgKCRpID0gMDsgJGkgPCAkZGF0YV9sZW47ICRpKz0yKSB7CgkJCSRzdW1fYiArPSAoJGNvZGV7JGl9KTsKCQl9CgkJaWYgKCRsZW4gPCAxMykgewoJCQkkc3VtX2IgKj0gMzsKCQl9CgkJJHIgPSAoJHN1bV9hICsgJHN1bV9iKSAlIDEwOwoJCWlmKCRyID4gMCkgewoJCQkkciA9ICgxMCAtICRyKTsKCQl9CgkJaWYgKCRjb2RlX2xlbiA9PSAkZGF0YV9sZW4pIHsKCQkJLy8gYWRkIGNoZWNrIGRpZ2l0CgkJCSRjb2RlIC49ICRyOwoJCX0gZWxzZWlmICgkciAhPT0gaW50dmFsKCRjb2RleyRkYXRhX2xlbn0pKSB7CgkJCS8vIHdyb25nIGNoZWNrZGlnaXQKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQlpZiAoJGxlbiA9PSAxMikgewoJCQkvLyBVUEMtQQoJCQkkY29kZSA9ICcwJy4kY29kZTsKCQkJKyskbGVuOwoJCX0KCQlpZiAoJHVwY2UpIHsKCQkJLy8gY29udmVydCBVUEMtQSB0byBVUEMtRQoJCQkkdG1wID0gc3Vic3RyKCRjb2RlLCA0LCAzKTsKCQkJaWYgKCgkdG1wID09ICcwMDAnKSBPUiAoJHRtcCA9PSAnMTAwJykgT1IgKCR0bXAgPT0gJzIwMCcpKSB7CgkJCQkvLyBtYW51ZmFjdHVyZXIgY29kZSBlbmRzIGluIDAwMCwgMTAwLCBvciAyMDAKCQkJCSR1cGNlX2NvZGUgPSBzdWJzdHIoJGNvZGUsIDIsIDIpLnN1YnN0cigkY29kZSwgOSwgMykuc3Vic3RyKCRjb2RlLCA0LCAxKTsKCQkJfSBlbHNlIHsKCQkJCSR0bXAgPSBzdWJzdHIoJGNvZGUsIDUsIDIpOwoJCQkJaWYgKCR0bXAgPT0gJzAwJykgewoJCQkJCS8vIG1hbnVmYWN0dXJlciBjb2RlIGVuZHMgaW4gMDAKCQkJCQkkdXBjZV9jb2RlID0gc3Vic3RyKCRjb2RlLCAyLCAzKS5zdWJzdHIoJGNvZGUsIDEwLCAyKS4nMyc7CgkJCQl9IGVsc2UgewoJCQkJCSR0bXAgPSBzdWJzdHIoJGNvZGUsIDYsIDEpOwoJCQkJCWlmICgkdG1wID09ICcwJykgewoJCQkJCQkvLyBtYW51ZmFjdHVyZXIgY29kZSBlbmRzIGluIDAKCQkJCQkJJHVwY2VfY29kZSA9IHN1YnN0cigkY29kZSwgMiwgNCkuc3Vic3RyKCRjb2RlLCAxMSwgMSkuJzQnOwoJCQkJCX0gZWxzZSB7CgkJCQkJCS8vIG1hbnVmYWN0dXJlciBjb2RlIGRvZXMgbm90IGVuZCBpbiB6ZXJvCgkJCQkJCSR1cGNlX2NvZGUgPSBzdWJzdHIoJGNvZGUsIDIsIDUpLnN1YnN0cigkY29kZSwgMTEsIDEpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQkvL0NvbnZlcnQgZGlnaXRzIHRvIGJhcnMKCQkkY29kZXMgPSBhcnJheSgKCQkJJ0EnPT5hcnJheSggLy8gbGVmdCBvZGQgcGFyaXR5CgkJCQknMCc9PicwMDAxMTAxJywKCQkJCScxJz0+JzAwMTEwMDEnLAoJCQkJJzInPT4nMDAxMDAxMScsCgkJCQknMyc9PicwMTExMTAxJywKCQkJCSc0Jz0+JzAxMDAwMTEnLAoJCQkJJzUnPT4nMDExMDAwMScsCgkJCQknNic9PicwMTAxMTExJywKCQkJCSc3Jz0+JzAxMTEwMTEnLAoJCQkJJzgnPT4nMDExMDExMScsCgkJCQknOSc9PicwMDAxMDExJyksCgkJCSdCJz0+YXJyYXkoIC8vIGxlZnQgZXZlbiBwYXJpdHkKCQkJCScwJz0+JzAxMDAxMTEnLAoJCQkJJzEnPT4nMDExMDAxMScsCgkJCQknMic9PicwMDExMDExJywKCQkJCSczJz0+JzAxMDAwMDEnLAoJCQkJJzQnPT4nMDAxMTEwMScsCgkJCQknNSc9PicwMTExMDAxJywKCQkJCSc2Jz0+JzAwMDAxMDEnLAoJCQkJJzcnPT4nMDAxMDAwMScsCgkJCQknOCc9PicwMDAxMDAxJywKCQkJCSc5Jz0+JzAwMTAxMTEnKSwKCQkJJ0MnPT5hcnJheSggLy8gcmlnaHQKCQkJCScwJz0+JzExMTAwMTAnLAoJCQkJJzEnPT4nMTEwMDExMCcsCgkJCQknMic9PicxMTAxMTAwJywKCQkJCSczJz0+JzEwMDAwMTAnLAoJCQkJJzQnPT4nMTAxMTEwMCcsCgkJCQknNSc9PicxMDAxMTEwJywKCQkJCSc2Jz0+JzEwMTAwMDAnLAoJCQkJJzcnPT4nMTAwMDEwMCcsCgkJCQknOCc9PicxMDAxMDAwJywKCQkJCSc5Jz0+JzExMTAxMDAnKQoJCSk7CgkJJHBhcml0aWVzID0gYXJyYXkoCgkJCScwJz0+YXJyYXkoJ0EnLCdBJywnQScsJ0EnLCdBJywnQScpLAoJCQknMSc9PmFycmF5KCdBJywnQScsJ0InLCdBJywnQicsJ0InKSwKCQkJJzInPT5hcnJheSgnQScsJ0EnLCdCJywnQicsJ0EnLCdCJyksCgkJCSczJz0+YXJyYXkoJ0EnLCdBJywnQicsJ0InLCdCJywnQScpLAoJCQknNCc9PmFycmF5KCdBJywnQicsJ0EnLCdBJywnQicsJ0InKSwKCQkJJzUnPT5hcnJheSgnQScsJ0InLCdCJywnQScsJ0EnLCdCJyksCgkJCSc2Jz0+YXJyYXkoJ0EnLCdCJywnQicsJ0InLCdBJywnQScpLAoJCQknNyc9PmFycmF5KCdBJywnQicsJ0EnLCdCJywnQScsJ0InKSwKCQkJJzgnPT5hcnJheSgnQScsJ0InLCdBJywnQicsJ0InLCdBJyksCgkJCSc5Jz0+YXJyYXkoJ0EnLCdCJywnQicsJ0EnLCdCJywnQScpCgkJKTsKCQkkdXBjZV9wYXJpdGllcyA9IGFycmF5KCk7CgkJJHVwY2VfcGFyaXRpZXNbMF0gPSBhcnJheSgKCQkJJzAnPT5hcnJheSgnQicsJ0InLCdCJywnQScsJ0EnLCdBJyksCgkJCScxJz0+YXJyYXkoJ0InLCdCJywnQScsJ0InLCdBJywnQScpLAoJCQknMic9PmFycmF5KCdCJywnQicsJ0EnLCdBJywnQicsJ0EnKSwKCQkJJzMnPT5hcnJheSgnQicsJ0InLCdBJywnQScsJ0EnLCdCJyksCgkJCSc0Jz0+YXJyYXkoJ0InLCdBJywnQicsJ0InLCdBJywnQScpLAoJCQknNSc9PmFycmF5KCdCJywnQScsJ0EnLCdCJywnQicsJ0EnKSwKCQkJJzYnPT5hcnJheSgnQicsJ0EnLCdBJywnQScsJ0InLCdCJyksCgkJCSc3Jz0+YXJyYXkoJ0InLCdBJywnQicsJ0EnLCdCJywnQScpLAoJCQknOCc9PmFycmF5KCdCJywnQScsJ0InLCdBJywnQScsJ0InKSwKCQkJJzknPT5hcnJheSgnQicsJ0EnLCdBJywnQicsJ0EnLCdCJykKCQkpOwoJCSR1cGNlX3Bhcml0aWVzWzFdID0gYXJyYXkoCgkJCScwJz0+YXJyYXkoJ0EnLCdBJywnQScsJ0InLCdCJywnQicpLAoJCQknMSc9PmFycmF5KCdBJywnQScsJ0InLCdBJywnQicsJ0InKSwKCQkJJzInPT5hcnJheSgnQScsJ0EnLCdCJywnQicsJ0EnLCdCJyksCgkJCSczJz0+YXJyYXkoJ0EnLCdBJywnQicsJ0InLCdCJywnQScpLAoJCQknNCc9PmFycmF5KCdBJywnQicsJ0EnLCdBJywnQicsJ0InKSwKCQkJJzUnPT5hcnJheSgnQScsJ0InLCdCJywnQScsJ0EnLCdCJyksCgkJCSc2Jz0+YXJyYXkoJ0EnLCdCJywnQicsJ0InLCdBJywnQScpLAoJCQknNyc9PmFycmF5KCdBJywnQicsJ0EnLCdCJywnQScsJ0InKSwKCQkJJzgnPT5hcnJheSgnQScsJ0InLCdBJywnQicsJ0InLCdBJyksCgkJCSc5Jz0+YXJyYXkoJ0EnLCdCJywnQicsJ0EnLCdCJywnQScpCgkJKTsKCQkkayA9IDA7CgkJJHNlcSA9ICcxMDEnOyAvLyBsZWZ0IGd1YXJkIGJhcgoJCWlmICgkdXBjZSkgewoJCQkkYmFyYXJyYXkgPSBhcnJheSgnY29kZScgPT4gJHVwY2VfY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAxLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCQkkcCA9ICR1cGNlX3Bhcml0aWVzWyRjb2RlezF9XVskcl07CgkJCWZvciAoJGkgPSAwOyAkaSA8IDY7ICsrJGkpIHsKCQkJCSRzZXEgLj0gJGNvZGVzWyRwWyRpXV1bJHVwY2VfY29kZXskaX1dOwoJCQl9CgkJCSRzZXEgLj0gJzAxMDEwMSc7IC8vIHJpZ2h0IGd1YXJkIGJhcgoJCX0gZWxzZSB7CgkJCSRiYXJhcnJheSA9IGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAxLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCQkkaGFsZl9sZW4gPSBpbnR2YWwoY2VpbCgkbGVuIC8gMikpOwoJCQlpZiAoJGxlbiA9PSA4KSB7CgkJCQlmb3IgKCRpID0gMDsgJGkgPCAkaGFsZl9sZW47ICsrJGkpIHsKCQkJCQkkc2VxIC49ICRjb2Rlc1snQSddWyRjb2RleyRpfV07CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkcCA9ICRwYXJpdGllc1skY29kZVswXV07CgkJCQlmb3IgKCRpID0gMTsgJGkgPCAkaGFsZl9sZW47ICsrJGkpIHsKCQkJCQkkc2VxIC49ICRjb2Rlc1skcFskaS0xXV1bJGNvZGV7JGl9XTsKCQkJCX0KCQkJfQoJCQkkc2VxIC49ICcwMTAxMCc7IC8vIGNlbnRlciBndWFyZCBiYXIKCQkJZm9yICgkaSA9ICRoYWxmX2xlbjsgJGkgPCAkbGVuOyArKyRpKSB7CgkJCQkkc2VxIC49ICRjb2Rlc1snQyddWyRjb2RleyRpfV07CgkJCX0KCQkJJHNlcSAuPSAnMTAxJzsgLy8gcmlnaHQgZ3VhcmQgYmFyCgkJfQoJCSRjbGVuID0gc3RybGVuKCRzZXEpOwoJCSR3ID0gMDsKCQlmb3IgKCRpID0gMDsgJGkgPCAkY2xlbjsgKyskaSkgewoJCQkkdyArPSAxOwoJCQlpZiAoKCRpID09ICgkY2xlbiAtIDEpKSBPUiAoKCRpIDwgKCRjbGVuIC0gMSkpIEFORCAoJHNlcXskaX0gIT0gJHNlcXsoJGkrMSl9KSkpIHsKCQkJCWlmICgkc2VxeyRpfSA9PSAnMScpIHsKCQkJCQkkdCA9IHRydWU7IC8vIGJhcgoJCQkJfSBlbHNlIHsKCQkJCQkkdCA9IGZhbHNlOyAvLyBzcGFjZQoJCQkJfQoJCQkJJGJhcmFycmF5WydiY29kZSddWyRrXSA9IGFycmF5KCd0JyA9PiAkdCwgJ3cnID0+ICR3LCAnaCcgPT4gMSwgJ3AnID0+IDApOwoJCQkJJGJhcmFycmF5WydtYXh3J10gKz0gJHc7CgkJCQkrKyRrOwoJCQkJJHcgPSAwOwoJCQl9CgkJfQoJCXJldHVybiAkYmFyYXJyYXk7Cgl9CgoJLyoqCgkgKiBVUEMtQmFzZWQgRXh0ZW50aW9ucwoJICogMi1EaWdpdCBFeHQuOiBVc2VkIHRvIGluZGljYXRlIG1hZ2F6aW5lcyBhbmQgbmV3c3BhcGVyIGlzc3VlIG51bWJlcnMKCSAqIDUtRGlnaXQgRXh0LjogVXNlZCB0byBtYXJrIHN1Z2dlc3RlZCByZXRhaWwgcHJpY2Ugb2YgYm9va3MKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEBwYXJhbSAkbGVuIChzdHJpbmcpIGJhcmNvZGUgdHlwZTogMiA9IDItRGlnaXQsIDUgPSA1LURpZ2l0CgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgcmVwcmVzZW50YXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiYXJjb2RlX2VhbmV4dCgkY29kZSwgJGxlbj01KSB7CgkJLy9QYWRkaW5nCgkJJGNvZGUgPSBzdHJfcGFkKCRjb2RlLCAkbGVuLCAnMCcsIFNUUl9QQURfTEVGVCk7CgkJLy8gY2FsY3VsYXRlIGNoZWNrIGRpZ2l0CgkJaWYgKCRsZW4gPT0gMikgewoJCQkkciA9ICRjb2RlICUgNDsKCQl9IGVsc2VpZiAoJGxlbiA9PSA1KSB7CgkJCSRyID0gKDMgKiAoJGNvZGVbMF0gKyAkY29kZXsyfSArICRjb2RlezR9KSkgKyAoOSAqICgkY29kZXsxfSArICRjb2RlezN9KSk7CgkJCSRyICU9IDEwOwoJCX0gZWxzZSB7CgkJCXJldHVybiBmYWxzZTsKCQl9CgkJLy9Db252ZXJ0IGRpZ2l0cyB0byBiYXJzCgkJJGNvZGVzID0gYXJyYXkoCgkJCSdBJz0+YXJyYXkoIC8vIGxlZnQgb2RkIHBhcml0eQoJCQkJJzAnPT4nMDAwMTEwMScsCgkJCQknMSc9PicwMDExMDAxJywKCQkJCScyJz0+JzAwMTAwMTEnLAoJCQkJJzMnPT4nMDExMTEwMScsCgkJCQknNCc9PicwMTAwMDExJywKCQkJCSc1Jz0+JzAxMTAwMDEnLAoJCQkJJzYnPT4nMDEwMTExMScsCgkJCQknNyc9PicwMTExMDExJywKCQkJCSc4Jz0+JzAxMTAxMTEnLAoJCQkJJzknPT4nMDAwMTAxMScpLAoJCQknQic9PmFycmF5KCAvLyBsZWZ0IGV2ZW4gcGFyaXR5CgkJCQknMCc9PicwMTAwMTExJywKCQkJCScxJz0+JzAxMTAwMTEnLAoJCQkJJzInPT4nMDAxMTAxMScsCgkJCQknMyc9PicwMTAwMDAxJywKCQkJCSc0Jz0+JzAwMTExMDEnLAoJCQkJJzUnPT4nMDExMTAwMScsCgkJCQknNic9PicwMDAwMTAxJywKCQkJCSc3Jz0+JzAwMTAwMDEnLAoJCQkJJzgnPT4nMDAwMTAwMScsCgkJCQknOSc9PicwMDEwMTExJykKCQkpOwoJCSRwYXJpdGllcyA9IGFycmF5KCk7CgkJJHBhcml0aWVzWzJdID0gYXJyYXkoCgkJCScwJz0+YXJyYXkoJ0EnLCdBJyksCgkJCScxJz0+YXJyYXkoJ0EnLCdCJyksCgkJCScyJz0+YXJyYXkoJ0InLCdBJyksCgkJCSczJz0+YXJyYXkoJ0InLCdCJykKCQkpOwoJCSRwYXJpdGllc1s1XSA9IGFycmF5KAoJCQknMCc9PmFycmF5KCdCJywnQicsJ0EnLCdBJywnQScpLAoJCQknMSc9PmFycmF5KCdCJywnQScsJ0InLCdBJywnQScpLAoJCQknMic9PmFycmF5KCdCJywnQScsJ0EnLCdCJywnQScpLAoJCQknMyc9PmFycmF5KCdCJywnQScsJ0EnLCdBJywnQicpLAoJCQknNCc9PmFycmF5KCdBJywnQicsJ0InLCdBJywnQScpLAoJCQknNSc9PmFycmF5KCdBJywnQScsJ0InLCdCJywnQScpLAoJCQknNic9PmFycmF5KCdBJywnQScsJ0EnLCdCJywnQicpLAoJCQknNyc9PmFycmF5KCdBJywnQicsJ0EnLCdCJywnQScpLAoJCQknOCc9PmFycmF5KCdBJywnQicsJ0EnLCdBJywnQicpLAoJCQknOSc9PmFycmF5KCdBJywnQScsJ0InLCdBJywnQicpCgkJKTsKCQkkcCA9ICRwYXJpdGllc1skbGVuXVskcl07CgkJJHNlcSA9ICcxMDExJzsgLy8gbGVmdCBndWFyZCBiYXIKCQkkc2VxIC49ICRjb2Rlc1skcFswXV1bJGNvZGVbMF1dOwoJCWZvciAoJGkgPSAxOyAkaSA8ICRsZW47ICsrJGkpIHsKCQkJJHNlcSAuPSAnMDEnOyAvLyBzZXBhcmF0b3IKCQkJJHNlcSAuPSAkY29kZXNbJHBbJGldXVskY29kZXskaX1dOwoJCX0KCQkkYmFyYXJyYXkgPSBhcnJheSgnY29kZScgPT4gJGNvZGUsICdtYXh3JyA9PiAwLCAnbWF4aCcgPT4gMSwgJ2Jjb2RlJyA9PiBhcnJheSgpKTsKCQlyZXR1cm4gJHRoaXMtPmJpbnNlcV90b19hcnJheSgkc2VxLCAkYmFyYXJyYXkpOwoJfQoKCS8qKgoJICogUE9TVE5FVCBhbmQgUExBTkVUIGJhcmNvZGVzLgoJICogVXNlZCBieSBVLlMuIFBvc3RhbCBTZXJ2aWNlIGZvciBhdXRvbWF0ZWQgbWFpbCBzb3J0aW5nCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgemlwIGNvZGUgdG8gcmVwcmVzZW50LiBNdXN0IGJlIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB6aXAgY29kZSBvZiB0aGUgZm9ybSBERERERCBvciBERERERC1ERERELgoJICogQHBhcmFtICRwbGFuZXQgKGJvb2xlYW4pIGlmIHRydWUgcHJpbnQgdGhlIFBMQU5FVCBiYXJjb2RlLCBvdGhlcndpc2UgcHJpbnQgUE9TVE5FVAoJICogQHJldHVybiBhcnJheSBiYXJjb2RlIHJlcHJlc2VudGF0aW9uLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYmFyY29kZV9wb3N0bmV0KCRjb2RlLCAkcGxhbmV0PWZhbHNlKSB7CgkJLy8gYmFyIGxlbmdodAoJCWlmICgkcGxhbmV0KSB7CgkJCSRiYXJsZW4gPSBBcnJheSgKCQkJCTAgPT4gQXJyYXkoMSwxLDIsMiwyKSwKCQkJCTEgPT4gQXJyYXkoMiwyLDIsMSwxKSwKCQkJCTIgPT4gQXJyYXkoMiwyLDEsMiwxKSwKCQkJCTMgPT4gQXJyYXkoMiwyLDEsMSwyKSwKCQkJCTQgPT4gQXJyYXkoMiwxLDIsMiwxKSwKCQkJCTUgPT4gQXJyYXkoMiwxLDIsMSwyKSwKCQkJCTYgPT4gQXJyYXkoMiwxLDEsMiwyKSwKCQkJCTcgPT4gQXJyYXkoMSwyLDIsMiwxKSwKCQkJCTggPT4gQXJyYXkoMSwyLDIsMSwyKSwKCQkJCTkgPT4gQXJyYXkoMSwyLDEsMiwyKQoJCQkpOwoJCX0gZWxzZSB7CgkJCSRiYXJsZW4gPSBBcnJheSgKCQkJCTAgPT4gQXJyYXkoMiwyLDEsMSwxKSwKCQkJCTEgPT4gQXJyYXkoMSwxLDEsMiwyKSwKCQkJCTIgPT4gQXJyYXkoMSwxLDIsMSwyKSwKCQkJCTMgPT4gQXJyYXkoMSwxLDIsMiwxKSwKCQkJCTQgPT4gQXJyYXkoMSwyLDEsMSwyKSwKCQkJCTUgPT4gQXJyYXkoMSwyLDEsMiwxKSwKCQkJCTYgPT4gQXJyYXkoMSwyLDIsMSwxKSwKCQkJCTcgPT4gQXJyYXkoMiwxLDEsMSwyKSwKCQkJCTggPT4gQXJyYXkoMiwxLDEsMiwxKSwKCQkJCTkgPT4gQXJyYXkoMiwxLDIsMSwxKQoJCQkpOwoJCX0KCQkkYmFyYXJyYXkgPSBhcnJheSgnY29kZScgPT4gJGNvZGUsICdtYXh3JyA9PiAwLCAnbWF4aCcgPT4gMiwgJ2Jjb2RlJyA9PiBhcnJheSgpKTsKCQkkayA9IDA7CgkJJGNvZGUgPSBzdHJfcmVwbGFjZSgnLScsICcnLCAkY29kZSk7CgkJJGNvZGUgPSBzdHJfcmVwbGFjZSgnICcsICcnLCAkY29kZSk7CgkJJGxlbiA9IHN0cmxlbigkY29kZSk7CgkJLy8gY2FsY3VsYXRlIGNoZWNrc3VtCgkJJHN1bSA9IDA7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQkkc3VtICs9IGludHZhbCgkY29kZXskaX0pOwoJCX0KCQkkY2hrZCA9ICgkc3VtICUgMTApOwoJCWlmKCRjaGtkID4gMCkgewoJCQkkY2hrZCA9ICgxMCAtICRjaGtkKTsKCQl9CgkJJGNvZGUgLj0gJGNoa2Q7CgkJJGxlbiA9IHN0cmxlbigkY29kZSk7CgkJLy8gc3RhcnQgYmFyCgkJJGJhcmFycmF5WydiY29kZSddWyRrKytdID0gYXJyYXkoJ3QnID0+IDEsICd3JyA9PiAxLCAnaCcgPT4gMiwgJ3AnID0+IDApOwoJCSRiYXJhcnJheVsnYmNvZGUnXVskaysrXSA9IGFycmF5KCd0JyA9PiAwLCAndycgPT4gMSwgJ2gnID0+IDIsICdwJyA9PiAwKTsKCQkkYmFyYXJyYXlbJ21heHcnXSArPSAyOwoJCWZvciAoJGkgPSAwOyAkaSA8ICRsZW47ICsrJGkpIHsKCQkJZm9yICgkaiA9IDA7ICRqIDwgNTsgKyskaikgewoJCQkJJGggPSAkYmFybGVuWyRjb2RleyRpfV1bJGpdOwoJCQkJJHAgPSBmbG9vcigxIC8gJGgpOwoJCQkJJGJhcmFycmF5WydiY29kZSddWyRrKytdID0gYXJyYXkoJ3QnID0+IDEsICd3JyA9PiAxLCAnaCcgPT4gJGgsICdwJyA9PiAkcCk7CgkJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGsrK10gPSBhcnJheSgndCcgPT4gMCwgJ3cnID0+IDEsICdoJyA9PiAyLCAncCcgPT4gMCk7CgkJCQkkYmFyYXJyYXlbJ21heHcnXSArPSAyOwoJCQl9CgkJfQoJCS8vIGVuZCBiYXIKCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGsrK10gPSBhcnJheSgndCcgPT4gMSwgJ3cnID0+IDEsICdoJyA9PiAyLCAncCcgPT4gMCk7CgkJJGJhcmFycmF5WydtYXh3J10gKz0gMTsKCQlyZXR1cm4gJGJhcmFycmF5OwoJfQoKCS8qKgoJICogUk1TNENDIC0gQ0JDIC0gS0lYCgkgKiBSTVM0Q0MgKFJveWFsIE1haWwgNC1zdGF0ZSBDdXN0b21lciBDb2RlKSAtIENCQyAoQ3VzdG9tZXIgQmFyIENvZGUpIC0gS0lYIChLbGFudCBpbmRleCAtIEN1c3RvbWVyIGluZGV4KQoJICogUk00U0NDIGlzIHRoZSBuYW1lIG9mIHRoZSBiYXJjb2RlIHN5bWJvbG9neSB1c2VkIGJ5IHRoZSBSb3lhbCBNYWlsIGZvciBpdHMgQ2xlYW5tYWlsIHNlcnZpY2UuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBwcmludAoJICogQHBhcmFtICRraXggKGJvb2xlYW4pIGlmIHRydWUgcHJpbnRzIHRoZSBLSVggdmFyaWF0aW9uIChkb2Vzbid0IHVzZSB0aGUgc3RhcnQgYW5kIGVuZCBzeW1ib2xzLCBhbmQgdGhlIGNoZWNrc3VtKSAtIGluIHRoaXMgY2FzZSB0aGUgaG91c2UgbnVtYmVyIG11c3QgYmUgc3VmZmljZWQgd2l0aCBhbiBYIGFuZCBwbGFjZWQgYXQgdGhlIGVuZCBvZiB0aGUgY29kZS4KCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfcm1zNGNjKCRjb2RlLCAka2l4PWZhbHNlKSB7CgkJJG5vdGtpeCA9ICEka2l4OwoJCS8vIGJhciBtb2RlCgkJLy8gMSA9IHBvcyAxLCBsZW5ndGggMgoJCS8vIDIgPSBwb3MgMSwgbGVuZ3RoIDMKCQkvLyAzID0gcG9zIDIsIGxlbmd0aCAxCgkJLy8gNCA9IHBvcyAyLCBsZW5ndGggMgoJCSRiYXJtb2RlID0gYXJyYXkoCgkJCScwJyA9PiBhcnJheSgzLDMsMiwyKSwKCQkJJzEnID0+IGFycmF5KDMsNCwxLDIpLAoJCQknMicgPT4gYXJyYXkoMyw0LDIsMSksCgkJCSczJyA9PiBhcnJheSg0LDMsMSwyKSwKCQkJJzQnID0+IGFycmF5KDQsMywyLDEpLAoJCQknNScgPT4gYXJyYXkoNCw0LDEsMSksCgkJCSc2JyA9PiBhcnJheSgzLDEsNCwyKSwKCQkJJzcnID0+IGFycmF5KDMsMiwzLDIpLAoJCQknOCcgPT4gYXJyYXkoMywyLDQsMSksCgkJCSc5JyA9PiBhcnJheSg0LDEsMywyKSwKCQkJJ0EnID0+IGFycmF5KDQsMSw0LDEpLAoJCQknQicgPT4gYXJyYXkoNCwyLDMsMSksCgkJCSdDJyA9PiBhcnJheSgzLDEsMiw0KSwKCQkJJ0QnID0+IGFycmF5KDMsMiwxLDQpLAoJCQknRScgPT4gYXJyYXkoMywyLDIsMyksCgkJCSdGJyA9PiBhcnJheSg0LDEsMSw0KSwKCQkJJ0cnID0+IGFycmF5KDQsMSwyLDMpLAoJCQknSCcgPT4gYXJyYXkoNCwyLDEsMyksCgkJCSdJJyA9PiBhcnJheSgxLDMsNCwyKSwKCQkJJ0onID0+IGFycmF5KDEsNCwzLDIpLAoJCQknSycgPT4gYXJyYXkoMSw0LDQsMSksCgkJCSdMJyA9PiBhcnJheSgyLDMsMywyKSwKCQkJJ00nID0+IGFycmF5KDIsMyw0LDEpLAoJCQknTicgPT4gYXJyYXkoMiw0LDMsMSksCgkJCSdPJyA9PiBhcnJheSgxLDMsMiw0KSwKCQkJJ1AnID0+IGFycmF5KDEsNCwxLDQpLAoJCQknUScgPT4gYXJyYXkoMSw0LDIsMyksCgkJCSdSJyA9PiBhcnJheSgyLDMsMSw0KSwKCQkJJ1MnID0+IGFycmF5KDIsMywyLDMpLAoJCQknVCcgPT4gYXJyYXkoMiw0LDEsMyksCgkJCSdVJyA9PiBhcnJheSgxLDEsNCw0KSwKCQkJJ1YnID0+IGFycmF5KDEsMiwzLDQpLAoJCQknVycgPT4gYXJyYXkoMSwyLDQsMyksCgkJCSdYJyA9PiBhcnJheSgyLDEsMyw0KSwKCQkJJ1knID0+IGFycmF5KDIsMSw0LDMpLAoJCQknWicgPT4gYXJyYXkoMiwyLDMsMykKCQkpOwoJCSRjb2RlID0gc3RydG91cHBlcigkY29kZSk7CgkJJGxlbiA9IHN0cmxlbigkY29kZSk7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDMsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJaWYgKCRub3RraXgpIHsKCQkJLy8gdGFibGUgZm9yIGNoZWNrc3VtIGNhbGN1bGF0aW9uIChyb3csY29sKQoJCQkkY2hlY2t0YWJsZSA9IGFycmF5KAoJCQkJJzAnID0+IGFycmF5KDEsMSksCgkJCQknMScgPT4gYXJyYXkoMSwyKSwKCQkJCScyJyA9PiBhcnJheSgxLDMpLAoJCQkJJzMnID0+IGFycmF5KDEsNCksCgkJCQknNCcgPT4gYXJyYXkoMSw1KSwKCQkJCSc1JyA9PiBhcnJheSgxLDApLAoJCQkJJzYnID0+IGFycmF5KDIsMSksCgkJCQknNycgPT4gYXJyYXkoMiwyKSwKCQkJCSc4JyA9PiBhcnJheSgyLDMpLAoJCQkJJzknID0+IGFycmF5KDIsNCksCgkJCQknQScgPT4gYXJyYXkoMiw1KSwKCQkJCSdCJyA9PiBhcnJheSgyLDApLAoJCQkJJ0MnID0+IGFycmF5KDMsMSksCgkJCQknRCcgPT4gYXJyYXkoMywyKSwKCQkJCSdFJyA9PiBhcnJheSgzLDMpLAoJCQkJJ0YnID0+IGFycmF5KDMsNCksCgkJCQknRycgPT4gYXJyYXkoMyw1KSwKCQkJCSdIJyA9PiBhcnJheSgzLDApLAoJCQkJJ0knID0+IGFycmF5KDQsMSksCgkJCQknSicgPT4gYXJyYXkoNCwyKSwKCQkJCSdLJyA9PiBhcnJheSg0LDMpLAoJCQkJJ0wnID0+IGFycmF5KDQsNCksCgkJCQknTScgPT4gYXJyYXkoNCw1KSwKCQkJCSdOJyA9PiBhcnJheSg0LDApLAoJCQkJJ08nID0+IGFycmF5KDUsMSksCgkJCQknUCcgPT4gYXJyYXkoNSwyKSwKCQkJCSdRJyA9PiBhcnJheSg1LDMpLAoJCQkJJ1InID0+IGFycmF5KDUsNCksCgkJCQknUycgPT4gYXJyYXkoNSw1KSwKCQkJCSdUJyA9PiBhcnJheSg1LDApLAoJCQkJJ1UnID0+IGFycmF5KDAsMSksCgkJCQknVicgPT4gYXJyYXkoMCwyKSwKCQkJCSdXJyA9PiBhcnJheSgwLDMpLAoJCQkJJ1gnID0+IGFycmF5KDAsNCksCgkJCQknWScgPT4gYXJyYXkoMCw1KSwKCQkJCSdaJyA9PiBhcnJheSgwLDApCgkJCSk7CgkJCSRyb3cgPSAwOwoJCQkkY29sID0gMDsKCQkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQkJJHJvdyArPSAkY2hlY2t0YWJsZVskY29kZXskaX1dWzBdOwoJCQkJJGNvbCArPSAkY2hlY2t0YWJsZVskY29kZXskaX1dWzFdOwoJCQl9CgkJCSRyb3cgJT0gNjsKCQkJJGNvbCAlPSA2OwoJCQkkY2hrID0gYXJyYXlfa2V5cygkY2hlY2t0YWJsZSwgYXJyYXkoJHJvdywkY29sKSk7CgkJCSRjb2RlIC49ICRjaGtbMF07CgkJCSsrJGxlbjsKCQl9CgkJJGsgPSAwOwoJCWlmICgkbm90a2l4KSB7CgkJCS8vIHN0YXJ0IGJhcgoJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGsrK10gPSBhcnJheSgndCcgPT4gMSwgJ3cnID0+IDEsICdoJyA9PiAyLCAncCcgPT4gMCk7CgkJCSRiYXJhcnJheVsnYmNvZGUnXVskaysrXSA9IGFycmF5KCd0JyA9PiAwLCAndycgPT4gMSwgJ2gnID0+IDIsICdwJyA9PiAwKTsKCQkJJGJhcmFycmF5WydtYXh3J10gKz0gMjsKCQl9CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQlmb3IgKCRqID0gMDsgJGogPCA0OyArKyRqKSB7CgkJCQlzd2l0Y2ggKCRiYXJtb2RlWyRjb2RleyRpfV1bJGpdKSB7CgkJCQkJY2FzZSAxOiB7CgkJCQkJCSRwID0gMDsKCQkJCQkJJGggPSAyOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAyOiB7CgkJCQkJCSRwID0gMDsKCQkJCQkJJGggPSAzOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAzOiB7CgkJCQkJCSRwID0gMTsKCQkJCQkJJGggPSAxOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSA0OiB7CgkJCQkJCSRwID0gMTsKCQkJCQkJJGggPSAyOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQl9CgkJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGsrK10gPSBhcnJheSgndCcgPT4gMSwgJ3cnID0+IDEsICdoJyA9PiAkaCwgJ3AnID0+ICRwKTsKCQkJCSRiYXJhcnJheVsnYmNvZGUnXVskaysrXSA9IGFycmF5KCd0JyA9PiAwLCAndycgPT4gMSwgJ2gnID0+IDIsICdwJyA9PiAwKTsKCQkJCSRiYXJhcnJheVsnbWF4dyddICs9IDI7CgkJCX0KCQl9CgkJaWYgKCRub3RraXgpIHsKCQkJLy8gc3RvcCBiYXIKCQkJJGJhcmFycmF5WydiY29kZSddWyRrKytdID0gYXJyYXkoJ3QnID0+IDEsICd3JyA9PiAxLCAnaCcgPT4gMywgJ3AnID0+IDApOwoJCQkkYmFyYXJyYXlbJ21heHcnXSArPSAxOwoJCX0KCQlyZXR1cm4gJGJhcmFycmF5OwoJfQoKCS8qKgoJICogQ09EQUJBUiBiYXJjb2Rlcy4KCSAqIE9sZGVyIGNvZGUgb2Z0ZW4gdXNlZCBpbiBsaWJyYXJ5IHN5c3RlbXMsIHNvbWV0aW1lcyBpbiBibG9vZCBiYW5rcwoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcmVwcmVzZW50LgoJICogQHJldHVybiBhcnJheSBiYXJjb2RlIHJlcHJlc2VudGF0aW9uLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gYmFyY29kZV9jb2RhYmFyKCRjb2RlKSB7CgkJJGNociA9IGFycmF5KAoJCQknMCcgPT4gJzExMTExMjIxJywKCQkJJzEnID0+ICcxMTExMjIxMScsCgkJCScyJyA9PiAnMTExMjExMjEnLAoJCQknMycgPT4gJzIyMTExMTExJywKCQkJJzQnID0+ICcxMTIxMTIxMScsCgkJCSc1JyA9PiAnMjExMTEyMTEnLAoJCQknNicgPT4gJzEyMTExMTIxJywKCQkJJzcnID0+ICcxMjExMjExMScsCgkJCSc4JyA9PiAnMTIyMTExMTEnLAoJCQknOScgPT4gJzIxMTIxMTExJywKCQkJJy0nID0+ICcxMTEyMjExMScsCgkJCSckJyA9PiAnMTEyMjExMTEnLAoJCQknOicgPT4gJzIxMTEyMTIxJywKCQkJJy8nID0+ICcyMTIxMTEyMScsCgkJCScuJyA9PiAnMjEyMTIxMTEnLAoJCQknKycgPT4gJzExMjIyMjIxJywKCQkJJ0EnID0+ICcxMTIyMTIxMScsCgkJCSdCJyA9PiAnMTIxMjExMjEnLAoJCQknQycgPT4gJzExMTIxMjIxJywKCQkJJ0QnID0+ICcxMTEyMjIxMScKCQkpOwoJCSRiYXJhcnJheSA9IGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAxLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCSRrID0gMDsKCQkkdyA9IDA7CgkJJHNlcSA9ICcnOwoJCSRjb2RlID0gJ0EnLnN0cnRvdXBwZXIoJGNvZGUpLidBJzsKCQkkbGVuID0gc3RybGVuKCRjb2RlKTsKCQlmb3IgKCRpID0gMDsgJGkgPCAkbGVuOyArKyRpKSB7CgkJCWlmICghaXNzZXQoJGNoclskY29kZXskaX1dKSkgewoJCQkJcmV0dXJuIGZhbHNlOwoJCQl9CgkJCSRzZXEgPSAkY2hyWyRjb2RleyRpfV07CgkJCWZvciAoJGogPSAwOyAkaiA8IDg7ICsrJGopIHsKCQkJCWlmICgoJGogJSAyKSA9PSAwKSB7CgkJCQkJJHQgPSB0cnVlOyAvLyBiYXIKCQkJCX0gZWxzZSB7CgkJCQkJJHQgPSBmYWxzZTsgLy8gc3BhY2UKCQkJCX0KCQkJCSR3ID0gJHNlcXskan07CgkJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGtdID0gYXJyYXkoJ3QnID0+ICR0LCAndycgPT4gJHcsICdoJyA9PiAxLCAncCcgPT4gMCk7CgkJCQkkYmFyYXJyYXlbJ21heHcnXSArPSAkdzsKCQkJCSsrJGs7CgkJCX0KCQl9CgkJcmV0dXJuICRiYXJhcnJheTsKCX0KCgkvKioKCSAqIENPREUxMSBiYXJjb2Rlcy4KCSAqIFVzZWQgcHJpbWFyaWx5IGZvciBsYWJlbGluZyB0ZWxlY29tbXVuaWNhdGlvbnMgZXF1aXBtZW50CgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byByZXByZXNlbnQuCgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgcmVwcmVzZW50YXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiYXJjb2RlX2NvZGUxMSgkY29kZSkgewoJCSRjaHIgPSBhcnJheSgKCQkJJzAnID0+ICcxMTExMjEnLAoJCQknMScgPT4gJzIxMTEyMScsCgkJCScyJyA9PiAnMTIxMTIxJywKCQkJJzMnID0+ICcyMjExMTEnLAoJCQknNCcgPT4gJzExMjEyMScsCgkJCSc1JyA9PiAnMjEyMTExJywKCQkJJzYnID0+ICcxMjIxMTEnLAoJCQknNycgPT4gJzExMTIyMScsCgkJCSc4JyA9PiAnMjExMjExJywKCQkJJzknID0+ICcyMTExMTEnLAoJCQknLScgPT4gJzExMjExMScsCgkJCSdTJyA9PiAnMTEyMjExJwoJCSk7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDEsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJJGsgPSAwOwoJCSR3ID0gMDsKCQkkc2VxID0gJyc7CgkJJGxlbiA9IHN0cmxlbigkY29kZSk7CgkJLy8gY2FsY3VsYXRlIGNoZWNrIGRpZ2l0IEMKCQkkcCA9IDE7CgkJJGNoZWNrID0gMDsKCQlmb3IgKCRpID0gKCRsZW4gLSAxKTsgJGkgPj0gMDsgLS0kaSkgewoJCQkkZGlnaXQgPSAkY29kZXskaX07CgkJCWlmICgkZGlnaXQgPT0gJy0nKSB7CgkJCQkkZHZhbCA9IDEwOwoJCQl9IGVsc2UgewoJCQkJJGR2YWwgPSBpbnR2YWwoJGRpZ2l0KTsKCQkJfQoJCQkkY2hlY2sgKz0gKCRkdmFsICogJHApOwoJCQkrKyRwOwoJCQlpZiAoJHAgPiAxMCkgewoJCQkJJHAgPSAxOwoJCQl9CgkJfQoJCSRjaGVjayAlPSAxMTsKCQlpZiAoJGNoZWNrID09IDEwKSB7CgkJCSRjaGVjayA9ICctJzsKCQl9CgkJJGNvZGUgLj0gJGNoZWNrOwoJCWlmICgkbGVuID4gMTApIHsKCQkJLy8gY2FsY3VsYXRlIGNoZWNrIGRpZ2l0IEsKCQkJJHAgPSAxOwoJCQkkY2hlY2sgPSAwOwoJCQlmb3IgKCRpID0gJGxlbjsgJGkgPj0gMDsgLS0kaSkgewoJCQkJJGRpZ2l0ID0gJGNvZGV7JGl9OwoJCQkJaWYgKCRkaWdpdCA9PSAnLScpIHsKCQkJCQkkZHZhbCA9IDEwOwoJCQkJfSBlbHNlIHsKCQkJCQkkZHZhbCA9IGludHZhbCgkZGlnaXQpOwoJCQkJfQoJCQkJJGNoZWNrICs9ICgkZHZhbCAqICRwKTsKCQkJCSsrJHA7CgkJCQlpZiAoJHAgPiA5KSB7CgkJCQkJJHAgPSAxOwoJCQkJfQoJCQl9CgkJCSRjaGVjayAlPSAxMTsKCQkJJGNvZGUgLj0gJGNoZWNrOwoJCQkrKyRsZW47CgkJfQoJCSRjb2RlID0gJ1MnLiRjb2RlLidTJzsKCQkkbGVuICs9IDM7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQlpZiAoIWlzc2V0KCRjaHJbJGNvZGV7JGl9XSkpIHsKCQkJCXJldHVybiBmYWxzZTsKCQkJfQoJCQkkc2VxID0gJGNoclskY29kZXskaX1dOwoJCQlmb3IgKCRqID0gMDsgJGogPCA2OyArKyRqKSB7CgkJCQlpZiAoKCRqICUgMikgPT0gMCkgewoJCQkJCSR0ID0gdHJ1ZTsgLy8gYmFyCgkJCQl9IGVsc2UgewoJCQkJCSR0ID0gZmFsc2U7IC8vIHNwYWNlCgkJCQl9CgkJCQkkdyA9ICRzZXF7JGp9OwoJCQkJJGJhcmFycmF5WydiY29kZSddWyRrXSA9IGFycmF5KCd0JyA9PiAkdCwgJ3cnID0+ICR3LCAnaCcgPT4gMSwgJ3AnID0+IDApOwoJCQkJJGJhcmFycmF5WydtYXh3J10gKz0gJHc7CgkJCQkrKyRrOwoJCQl9CgkJfQoJCXJldHVybiAkYmFyYXJyYXk7Cgl9CgoJLyoqCgkgKiBQaGFybWFjb2RlCgkgKiBDb250YWlucyBkaWdpdHMgKDAgdG8gOSkKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfcGhhcm1hY29kZSgkY29kZSkgewoJCSRzZXEgPSAnJzsKCQkkY29kZSA9IGludHZhbCgkY29kZSk7CgkJd2hpbGUgKCRjb2RlID4gMCkgewoJCQlpZiAoKCRjb2RlICUgMikgPT0gMCkgewoJCQkJJHNlcSAuPSAnMTExMDAnOwoJCQkJJGNvZGUgLT0gMjsKCQkJfSBlbHNlIHsKCQkJCSRzZXEgLj0gJzEwMCc7CgkJCQkkY29kZSAtPSAxOwoJCQl9CgkJCSRjb2RlIC89IDI7CgkJfQoJCSRzZXEgPSBzdWJzdHIoJHNlcSwgMCwgLTIpOwoJCSRzZXEgPSBzdHJyZXYoJHNlcSk7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDEsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJcmV0dXJuICR0aGlzLT5iaW5zZXFfdG9fYXJyYXkoJHNlcSwgJGJhcmFycmF5KTsKCX0KCgkvKioKCSAqIFBoYXJtYWNvZGUgdHdvLXRyYWNrCgkgKiBDb250YWlucyBkaWdpdHMgKDAgdG8gOSkKCSAqIEBwYXJhbSAkY29kZSAoc3RyaW5nKSBjb2RlIHRvIHJlcHJlc2VudC4KCSAqIEByZXR1cm4gYXJyYXkgYmFyY29kZSByZXByZXNlbnRhdGlvbi4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGJhcmNvZGVfcGhhcm1hY29kZTJ0KCRjb2RlKSB7CgkJJHNlcSA9ICcnOwoJCSRjb2RlID0gaW50dmFsKCRjb2RlKTsKCQlkbyB7CgkJCXN3aXRjaCAoJGNvZGUgJSAzKSB7CgkJCQljYXNlIDA6IHsKCQkJCQkkc2VxIC49ICczJzsKCQkJCQkkY29kZSA9ICgkY29kZSAtIDMpIC8gMzsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWNhc2UgMTogewoJCQkJCSRzZXEgLj0gJzEnOwoJCQkJCSRjb2RlID0gKCRjb2RlIC0gMSkgLyAzOwoJCQkJCWJyZWFrOwoJCQkJfQoJCQkJY2FzZSAyOiB7CgkJCQkJJHNlcSAuPSAnMic7CgkJCQkJJGNvZGUgPSAoJGNvZGUgLSAyKSAvIDM7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQl9IHdoaWxlKCRjb2RlICE9IDApOwoJCSRzZXEgPSBzdHJyZXYoJHNlcSk7CgkJJGsgPSAwOwoJCSRiYXJhcnJheSA9IGFycmF5KCdjb2RlJyA9PiAkY29kZSwgJ21heHcnID0+IDAsICdtYXhoJyA9PiAyLCAnYmNvZGUnID0+IGFycmF5KCkpOwoJCSRsZW4gPSBzdHJsZW4oJHNlcSk7CgkJZm9yICgkaSA9IDA7ICRpIDwgJGxlbjsgKyskaSkgewoJCQlzd2l0Y2ggKCRzZXF7JGl9KSB7CgkJCQljYXNlICcxJzogewoJCQkJCSRwID0gMTsKCQkJCQkkaCA9IDE7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICcyJzogewoJCQkJCSRwID0gMDsKCQkJCQkkaCA9IDE7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCQljYXNlICczJzogewoJCQkJCSRwID0gMDsKCQkJCQkkaCA9IDI7CgkJCQkJYnJlYWs7CgkJCQl9CgkJCX0KCQkJJGJhcmFycmF5WydiY29kZSddWyRrKytdID0gYXJyYXkoJ3QnID0+IDEsICd3JyA9PiAxLCAnaCcgPT4gJGgsICdwJyA9PiAkcCk7CgkJCSRiYXJhcnJheVsnYmNvZGUnXVskaysrXSA9IGFycmF5KCd0JyA9PiAwLCAndycgPT4gMSwgJ2gnID0+IDIsICdwJyA9PiAwKTsKCQkJJGJhcmFycmF5WydtYXh3J10gKz0gMjsKCQl9CgkJdW5zZXQoJGJhcmFycmF5WydiY29kZSddWygkayAtIDEpXSk7CgkJLS0kYmFyYXJyYXlbJ21heHcnXTsKCQlyZXR1cm4gJGJhcmFycmF5OwoJfQoKCgkvKioKCSAqIElNQiAtIEludGVsbGlnZW50IE1haWwgQmFyY29kZSAtIE9uZWNvZGUgLSBVU1BTLUItMzIwMAoJICogKHJlcXVpcmVzIFBIUCBiY21hdGggZXh0ZW5zaW9uKQoJICogSW50ZWxsaWdlbnQgTWFpbCBiYXJjb2RlIGlzIGEgNjUtYmFyIGNvZGUgZm9yIHVzZSBvbiBtYWlsIGluIHRoZSBVbml0ZWQgU3RhdGVzLgoJICogVGhlIGZpZWxkcyBhcmUgZGVzY3JpYmVkIGFzIGZvbGxvd3M6PHVsPjxsaT5UaGUgQmFyY29kZSBJZGVudGlmaWVyIHNoYWxsIGJlIGFzc2lnbmVkIGJ5IFVTUFMgdG8gZW5jb2RlIHRoZSBwcmVzb3J0IGlkZW50aWZpY2F0aW9uIHRoYXQgaXMgY3VycmVudGx5IHByaW50ZWQgaW4gaHVtYW4gcmVhZGFibGUgZm9ybSBvbiB0aGUgb3B0aW9uYWwgZW5kb3JzZW1lbnQgbGluZSAoT0VMKSBhcyB3ZWxsIGFzIGZvciBmdXR1cmUgVVNQUyB1c2UuIFRoaXMgc2hhbGwgYmUgdHdvIGRpZ2l0cywgd2l0aCB0aGUgc2Vjb25kIGRpZ2l0IGluIHRoZSByYW5nZSBvZiAw4oCTNC4gVGhlIGFsbG93YWJsZSBlbmNvZGluZyByYW5nZXMgc2hhbGwgYmUgMDDigJMwNCwgMTDigJMxNCwgMjDigJMyNCwgMzDigJMzNCwgNDDigJM0NCwgNTDigJM1NCwgNjDigJM2NCwgNzDigJM3NCwgODDigJM4NCwgYW5kIDkw4oCTOTQuPC9saT48bGk+VGhlIFNlcnZpY2UgVHlwZSBJZGVudGlmaWVyIHNoYWxsIGJlIGFzc2lnbmVkIGJ5IFVTUFMgZm9yIGFueSBjb21iaW5hdGlvbiBvZiBzZXJ2aWNlcyByZXF1ZXN0ZWQgb24gdGhlIG1haWxwaWVjZS4gVGhlIGFsbG93YWJsZSBlbmNvZGluZyByYW5nZSBzaGFsbCBiZSAwMDBodHRwOi8vaXQyLnBocC5uZXQvbWFudWFsL2VuL2Z1bmN0aW9uLmRlY2hleC5waHDigJM5OTkuIEVhY2ggMy1kaWdpdCB2YWx1ZSBzaGFsbCBjb3JyZXNwb25kIHRvIGEgcGFydGljdWxhciBtYWlsIGNsYXNzIHdpdGggYSBwYXJ0aWN1bGFyIGNvbWJpbmF0aW9uIG9mIHNlcnZpY2UocykuIEVhY2ggc2VydmljZSBwcm9ncmFtLCBzdWNoIGFzIE9uZUNvZGUgQ29uZmlybSBhbmQgT25lQ29kZSBBQ1MsIHNoYWxsIHByb3ZpZGUgdGhlIGxpc3Qgb2YgU2VydmljZSBUeXBlIElkZW50aWZpZXIgdmFsdWVzLjwvbGk+PGxpPlRoZSBNYWlsZXIgb3IgQ3VzdG9tZXIgSWRlbnRpZmllciBzaGFsbCBiZSBhc3NpZ25lZCBieSBVU1BTIGFzIGEgdW5pcXVlLCA2IG9yIDkgZGlnaXQgbnVtYmVyIHRoYXQgaWRlbnRpZmllcyBhIGJ1c2luZXNzIGVudGl0eS4gVGhlIGFsbG93YWJsZSBlbmNvZGluZyByYW5nZSBmb3IgdGhlIDYgZGlnaXQgTWFpbGVyIElEIHNoYWxsIGJlIDAwMDAwMC0gODk5OTk5LCB3aGlsZSB0aGUgYWxsb3dhYmxlIGVuY29kaW5nIHJhbmdlIGZvciB0aGUgOSBkaWdpdCBNYWlsZXIgSUQgc2hhbGwgYmUgOTAwMDAwMDAwLTk5OTk5OTk5OS48L2xpPjxsaT5UaGUgU2VyaWFsIG9yIFNlcXVlbmNlIE51bWJlciBzaGFsbCBiZSBhc3NpZ25lZCBieSB0aGUgbWFpbGVyIGZvciB1bmlxdWVseSBpZGVudGlmeWluZyBhbmQgdHJhY2tpbmcgbWFpbHBpZWNlcy4gVGhlIGFsbG93YWJsZSBlbmNvZGluZyByYW5nZSBzaGFsbCBiZSAwMDAwMDAwMDDigJM5OTk5OTk5OTkgd2hlbiB1c2VkIHdpdGggYSA2IGRpZ2l0IE1haWxlciBJRCBhbmQgMDAwMDAwLTk5OTk5OSB3aGVuIHVzZWQgd2l0aCBhIDkgZGlnaXQgTWFpbGVyIElELiBlLiBUaGUgRGVsaXZlcnkgUG9pbnQgWklQIENvZGUgc2hhbGwgYmUgYXNzaWduZWQgYnkgdGhlIG1haWxlciBmb3Igcm91dGluZyB0aGUgbWFpbHBpZWNlLiBUaGlzIHNoYWxsIHJlcGxhY2UgUE9TVE5FVCBmb3Igcm91dGluZyB0aGUgbWFpbHBpZWNlIHRvIGl0cyBmaW5hbCBkZWxpdmVyeSBwb2ludC4gVGhlIGxlbmd0aCBtYXkgYmUgMCwgNSwgOSwgb3IgMTEgZGlnaXRzLiBUaGUgYWxsb3dhYmxlIGVuY29kaW5nIHJhbmdlcyBzaGFsbCBiZSBubyBaSVAgQ29kZSwgMDAwMDDigJM5OTk5OSwgIDAwMDAwMDAwMOKAkzk5OTk5OTk5OSwgYW5kIDAwMDAwMDAwMDAw4oCTOTk5OTk5OTk5OTkuPC9saT48L3VsPgoJICogQHBhcmFtICRjb2RlIChzdHJpbmcpIGNvZGUgdG8gcHJpbnQsIHNlcGFyYXRlIHRoZSBaSVAgKHJvdXRpbmcgY29kZSkgZnJvbSB0aGUgcmVzdCB1c2luZyBhIG1pbnVzIGNoYXIgJy0nIChCYXJjb2RlSURfU2VydmljZVR5cGVJRF9NYWlsZXJJRF9TZXJpYWxOdW1iZXItUm91dGluZ0NvZGUpCgkgKiBAcmV0dXJuIGFycmF5IGJhcmNvZGUgcmVwcmVzZW50YXRpb24uCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBiYXJjb2RlX2ltYigkY29kZSkgewoJCSRhc2NfY2hyID0gYXJyYXkoNCwwLDIsNiwzLDUsMSw5LDgsNywxLDIsMCw2LDQsOCwyLDksNSwzLDAsMSwzLDcsNCw2LDgsOSwyLDAsNSwxLDksNCwzLDgsNiw3LDEsMiw0LDMsOSw1LDcsOCwzLDAsMiwxLDQsMCw5LDEsNywwLDIsNCw2LDMsNywxLDksNSw4KTsKCQkkZHNjX2NociA9IGFycmF5KDcsMSw5LDUsOCwwLDIsNCw2LDMsNSw4LDksNywzLDAsNiwxLDcsNCw2LDgsOSwyLDUsMSw3LDUsNCwzLDgsNyw2LDAsMiw1LDQsOSwzLDAsMSw2LDgsMiwwLDQsNSw5LDYsNyw1LDIsNiwzLDgsNSwxLDksOCw3LDQsMCwyLDYsMyk7CgkJJGFzY19wb3MgPSBhcnJheSgzLDAsOCwxMSwxLDEyLDgsMTEsMTAsNiw0LDEyLDIsNyw5LDYsNyw5LDIsOCw0LDAsMTIsNywxMCw5LDAsNywxMCw1LDcsOSw2LDgsMiwxMiwxLDQsMiwwLDEsNSw0LDYsMTIsMSwwLDksNCw3LDUsMTAsMiw2LDksMTEsMiwxMiw2LDcsNSwxMSwwLDMsMik7CgkJJGRzY19wb3MgPSBhcnJheSgyLDEwLDEyLDUsOSwxLDUsNCwzLDksMTEsNSwxMCwxLDYsMyw0LDEsMTAsMCwyLDExLDgsNiwxLDEyLDMsOCw2LDQsNCwxMSwwLDYsMSw5LDExLDUsMyw3LDMsMTAsNywxMSw4LDIsMTAsMyw1LDgsMCwzLDEyLDExLDgsNCw1LDEsMywwLDcsMTIsOSw4LDEwKTsKCQkkY29kZV9hcnIgPSBleHBsb2RlKCctJywgJGNvZGUpOwoJCSR0cmFja2luZ19udW1iZXIgPSAkY29kZV9hcnJbMF07CgkJaWYgKGlzc2V0KCRjb2RlX2FyclsxXSkpIHsKCQkJJHJvdXRpbmdfY29kZSA9ICRjb2RlX2FyclsxXTsKCQl9IGVsc2UgewoJCQkkcm91dGluZ19jb2RlID0gJyc7CgkJfQoJCS8vIENvbnZlcnNpb24gb2YgUm91dGluZyBDb2RlCgkJc3dpdGNoIChzdHJsZW4oJHJvdXRpbmdfY29kZSkpIHsKCQkJY2FzZSAwOiB7CgkJCQkkYmluYXJ5X2NvZGUgPSAwOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSA1OiB7CgkJCQkkYmluYXJ5X2NvZGUgPSBiY2FkZCgkcm91dGluZ19jb2RlLCAnMScpOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSA5OiB7CgkJCQkkYmluYXJ5X2NvZGUgPSBiY2FkZCgkcm91dGluZ19jb2RlLCAnMTAwMDAxJyk7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlIDExOiB7CgkJCQkkYmluYXJ5X2NvZGUgPSBiY2FkZCgkcm91dGluZ19jb2RlLCAnMTAwMDEwMDAwMScpOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJcmV0dXJuIGZhbHNlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJJGJpbmFyeV9jb2RlID0gYmNtdWwoJGJpbmFyeV9jb2RlLCAxMCk7CgkJJGJpbmFyeV9jb2RlID0gYmNhZGQoJGJpbmFyeV9jb2RlLCAkdHJhY2tpbmdfbnVtYmVyWzBdKTsKCQkkYmluYXJ5X2NvZGUgPSBiY211bCgkYmluYXJ5X2NvZGUsIDUpOwoJCSRiaW5hcnlfY29kZSA9IGJjYWRkKCRiaW5hcnlfY29kZSwgJHRyYWNraW5nX251bWJlcnsxfSk7CgkJJGJpbmFyeV9jb2RlIC49IHN1YnN0cigkdHJhY2tpbmdfbnVtYmVyLCAyLCAxOCk7CgkJLy8gY29udmVydCB0byBoZXhhZGVjaW1hbAoJCSRiaW5hcnlfY29kZSA9ICR0aGlzLT5kZWNfdG9faGV4KCRiaW5hcnlfY29kZSk7CgkJLy8gcGFkIHRvIGdldCAxMyBieXRlcwoJCSRiaW5hcnlfY29kZSA9IHN0cl9wYWQoJGJpbmFyeV9jb2RlLCAyNiwgJzAnLCBTVFJfUEFEX0xFRlQpOwoJCS8vIGNvbnZlcnQgc3RyaW5nIHRvIGFycmF5IG9mIGJ5dGVzCgkJJGJpbmFyeV9jb2RlX2FyciA9IGNodW5rX3NwbGl0KCRiaW5hcnlfY29kZSwgMiwgIlxyIik7CgkJJGJpbmFyeV9jb2RlX2FyciA9IHN1YnN0cigkYmluYXJ5X2NvZGVfYXJyLCAwLCAtMSk7CgkJJGJpbmFyeV9jb2RlX2FyciA9IGV4cGxvZGUoIlxyIiwgJGJpbmFyeV9jb2RlX2Fycik7CgkJLy8gY2FsY3VsYXRlIGZyYW1lIGNoZWNrIHNlcXVlbmNlCgkJJGZjcyA9ICR0aGlzLT5pbWJfY3JjMTFmY3MoJGJpbmFyeV9jb2RlX2Fycik7CgkJLy8gZXhjbHVkZSBmaXJzdCAyIGJpdHMgZnJvbSBmaXJzdCBieXRlCgkJJGZpcnN0X2J5dGUgPSBzcHJpbnRmKCclMnMnLCBkZWNoZXgoKGhleGRlYygkYmluYXJ5X2NvZGVfYXJyWzBdKSA8PCAyKSA+PiAyKSk7CgkJJGJpbmFyeV9jb2RlXzEwMmJpdCA9ICRmaXJzdF9ieXRlLnN1YnN0cigkYmluYXJ5X2NvZGUsIDIpOwoJCS8vIGNvbnZlcnQgYmluYXJ5IGRhdGEgdG8gY29kZXdvcmRzCgkJJGNvZGV3b3JkcyA9IGFycmF5KCk7CgkJJGRhdGEgPSAkdGhpcy0+aGV4X3RvX2RlYygkYmluYXJ5X2NvZGVfMTAyYml0KTsKCQkkY29kZXdvcmRzWzBdID0gYmNtb2QoJGRhdGEsIDYzNikgKiAyOwoJCSRkYXRhID0gYmNkaXYoJGRhdGEsIDYzNik7CgkJZm9yICgkaSA9IDE7ICRpIDwgOTsgKyskaSkgewoJCQkkY29kZXdvcmRzWyRpXSA9IGJjbW9kKCRkYXRhLCAxMzY1KTsKCQkJJGRhdGEgPSBiY2RpdigkZGF0YSwgMTM2NSk7CgkJfQoJCSRjb2Rld29yZHNbOV0gPSAkZGF0YTsKCQlpZiAoKCRmY3MgPj4gMTApID09IDEpIHsKCQkJJGNvZGV3b3Jkc1s5XSArPSA2NTk7CgkJfQoJCS8vIGdlbmVyYXRlIGxvb2t1cCB0YWJsZXMKCQkkdGFibGUyb2YxMyA9ICR0aGlzLT5pbWJfdGFibGVzKDIsIDc4KTsKCQkkdGFibGU1b2YxMyA9ICR0aGlzLT5pbWJfdGFibGVzKDUsIDEyODcpOwoJCS8vIGNvbnZlcnQgY29kZXdvcmRzIHRvIGNoYXJhY3RlcnMKCQkkY2hhcmFjdGVycyA9IGFycmF5KCk7CgkJJGJpdG1hc2sgPSA1MTI7CgkJZm9yZWFjaCgkY29kZXdvcmRzIGFzICRrID0+ICR2YWwpIHsKCQkJaWYgKCR2YWwgPD0gMTI4NikgewoJCQkJJGNocmNvZGUgPSAkdGFibGU1b2YxM1skdmFsXTsKCQkJfSBlbHNlIHsKCQkJCSRjaHJjb2RlID0gJHRhYmxlMm9mMTNbKCR2YWwgLSAxMjg3KV07CgkJCX0KCQkJaWYgKCgkZmNzICYgJGJpdG1hc2spID4gMCkgewoJCQkJLy8gYml0d2lzZSBpbnZlcnQKCQkJCSRjaHJjb2RlID0gKCh+JGNocmNvZGUpICYgODE5MSk7CgkJCX0KCQkJJGNoYXJhY3RlcnNbXSA9ICRjaHJjb2RlOwoJCQkkYml0bWFzayAvPSAyOwoJCX0KCQkkY2hhcmFjdGVycyA9IGFycmF5X3JldmVyc2UoJGNoYXJhY3RlcnMpOwoJCS8vIGJ1aWxkIGJhcnMKCQkkayA9IDA7CgkJJGJhcmFycmF5ID0gYXJyYXkoJ2NvZGUnID0+ICRjb2RlLCAnbWF4dycgPT4gMCwgJ21heGgnID0+IDMsICdiY29kZScgPT4gYXJyYXkoKSk7CgkJZm9yICgkaSA9IDA7ICRpIDwgNjU7ICsrJGkpIHsKCQkJJGFzYyA9ICgoJGNoYXJhY3RlcnNbJGFzY19jaHJbJGldXSAmIHBvdygyLCAkYXNjX3Bvc1skaV0pKSA+IDApOwoJCQkkZHNjID0gKCgkY2hhcmFjdGVyc1skZHNjX2NoclskaV1dICYgcG93KDIsICRkc2NfcG9zWyRpXSkpID4gMCk7CgkJCWlmICgkYXNjIEFORCAkZHNjKSB7CgkJCQkvLyBmdWxsIGJhciAoRikKCQkJCSRwID0gMDsKCQkJCSRoID0gMzsKCQkJfSBlbHNlaWYgKCRhc2MpIHsKCQkJCS8vIGFzY2VuZGVyIChBKQoJCQkJJHAgPSAwOwoJCQkJJGggPSAyOwoJCQl9IGVsc2VpZiAoJGRzYykgewoJCQkJLy8gZGVzY2VuZGVyIChEKQoJCQkJJHAgPSAxOwoJCQkJJGggPSAyOwoJCQl9IGVsc2UgewoJCQkJLy8gdHJhY2tlciAoVCkKCQkJCSRwID0gMTsKCQkJCSRoID0gMTsKCQkJfQoJCQkkYmFyYXJyYXlbJ2Jjb2RlJ11bJGsrK10gPSBhcnJheSgndCcgPT4gMSwgJ3cnID0+IDEsICdoJyA9PiAkaCwgJ3AnID0+ICRwKTsKCQkJJGJhcmFycmF5WydiY29kZSddWyRrKytdID0gYXJyYXkoJ3QnID0+IDAsICd3JyA9PiAxLCAnaCcgPT4gMiwgJ3AnID0+IDApOwoJCQkkYmFyYXJyYXlbJ21heHcnXSArPSAyOwoJCX0KCQl1bnNldCgkYmFyYXJyYXlbJ2Jjb2RlJ11bKCRrIC0gMSldKTsKCQktLSRiYXJhcnJheVsnbWF4dyddOwoJCXJldHVybiAkYmFyYXJyYXk7Cgl9CgoJLyoqCgkgKiBDb252ZXJ0IGxhcmdlIGludGVnZXIgbnVtYmVyIHRvIGhleGFkZWNpbWFsIHJlcHJlc2VudGF0aW9uLgoJICogKHJlcXVpcmVzIFBIUCBiY21hdGggZXh0ZW5zaW9uKQoJICogQHBhcmFtICRudW1iZXIgKHN0cmluZykgbnVtYmVyIHRvIGNvbnZlcnQgc3BlY2lmaWVkIGFzIGEgc3RyaW5nCgkgKiBAcmV0dXJuIHN0cmluZyBoZXhhZGVjaW1hbCByZXByZXNlbnRhdGlvbgoJICovCglwdWJsaWMgZnVuY3Rpb24gZGVjX3RvX2hleCgkbnVtYmVyKSB7CgkJJGkgPSAwOwoJCSRoZXggPSBhcnJheSgpOwoJCWlmKCRudW1iZXIgPT0gMCkgewoJCQlyZXR1cm4gJzAwJzsKCQl9CgkJd2hpbGUoJG51bWJlciA+IDApIHsKCQkJaWYoJG51bWJlciA9PSAwKSB7CgkJCQlhcnJheV9wdXNoKCRoZXgsICcwJyk7CgkJCX0gZWxzZSB7CgkJCQlhcnJheV9wdXNoKCRoZXgsIHN0cnRvdXBwZXIoZGVjaGV4KGJjbW9kKCRudW1iZXIsICcxNicpKSkpOwoJCQkJJG51bWJlciA9IGJjZGl2KCRudW1iZXIsICcxNicsIDApOwoJCQl9CgkJfQoJCSRoZXggPSBhcnJheV9yZXZlcnNlKCRoZXgpOwoJCXJldHVybiBpbXBsb2RlKCRoZXgpOwoJfQoKCS8qKgoJICogQ29udmVydCBsYXJnZSBoZXhhZGVjaW1hbCBudW1iZXIgdG8gZGVjaW1hbCByZXByZXNlbnRhdGlvbiAoc3RyaW5nKS4KCSAqIChyZXF1aXJlcyBQSFAgYmNtYXRoIGV4dGVuc2lvbikKCSAqIEBwYXJhbSAkaGV4IChzdHJpbmcpIGhleGFkZWNpbWFsIG51bWJlciB0byBjb252ZXJ0IHNwZWNpZmllZCBhcyBhIHN0cmluZwoJICogQHJldHVybiBzdHJpbmcgaGV4YWRlY2ltYWwgcmVwcmVzZW50YXRpb24KCSAqLwoJcHVibGljIGZ1bmN0aW9uIGhleF90b19kZWMoJGhleCkgewoJCSRkZWMgPSAwOwoJCSRiaXR2YWwgPSAxOwoJCSRsZW4gPSBzdHJsZW4oJGhleCk7CgkJZm9yKCRwb3MgPSAoJGxlbiAtIDEpOyAkcG9zID49IDA7IC0tJHBvcykgewoJCQkkZGVjID0gYmNhZGQoJGRlYywgYmNtdWwoaGV4ZGVjKCRoZXh7JHBvc30pLCAkYml0dmFsKSk7CgkJCSRiaXR2YWwgPSBiY211bCgkYml0dmFsLCAxNik7CgkJfQoJCXJldHVybiAkZGVjOwoJfQoKCS8qKgoJICogSW50ZWxsaWdlbnQgTWFpbCBCYXJjb2RlIGNhbGN1bGF0aW9uIG9mIEZyYW1lIENoZWNrIFNlcXVlbmNlCgkgKiBAcGFyYW0gJGNvZGVfYXJyIChzdHJpbmcpIGFycmF5IG9mIGhleGFkZWNpbWFsIHZhbHVlcyAoMTMgYnl0ZXMgaG9sZGluZyAxMDIgYml0cyByaWdodCBqdXN0aWZpZWQpLgoJICogQHJldHVybiBpbnQgMTEgYml0IEZyYW1lIENoZWNrIFNlcXVlbmNlIGFzIGludGVnZXIgKGRlY2ltYWwgYmFzZSkKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGltYl9jcmMxMWZjcygkY29kZV9hcnIpIHsKCQkkZ2VucG9seSA9IDB4MEYzNTsgLy8gZ2VuZXJhdG9yIHBvbHlub21pYWwKCQkkZmNzID0gMHgwN0ZGOyAvLyBGcmFtZSBDaGVjayBTZXF1ZW5jZQoJCS8vIGRvIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZSBza2lwcGluZyB0aGUgMiBtb3N0IHNpZ25pZmljYW50IGJpdHMKCQkkZGF0YSA9IGhleGRlYygkY29kZV9hcnJbMF0pIDw8IDU7CgkJZm9yICgkYml0ID0gMjsgJGJpdCA8IDg7ICsrJGJpdCkgewoJCQlpZiAoKCRmY3MgXiAkZGF0YSkgJiAweDQwMCkgewoJCQkJJGZjcyA9ICgkZmNzIDw8IDEpIF4gJGdlbnBvbHk7CgkJCX0gZWxzZSB7CgkJCQkkZmNzID0gKCRmY3MgPDwgMSk7CgkJCX0KCQkJJGZjcyAmPSAweDdGRjsKCQkJJGRhdGEgPDw9IDE7CgkJfQoJCS8vIGRvIHJlc3Qgb2YgYnl0ZXMKCQlmb3IgKCRieXRlID0gMTsgJGJ5dGUgPCAxMzsgKyskYnl0ZSkgewoJCQkkZGF0YSA9IGhleGRlYygkY29kZV9hcnJbJGJ5dGVdKSA8PCAzOwoJCQlmb3IgKCRiaXQgPSAwOyAkYml0IDwgODsgKyskYml0KSB7CgkJCQlpZiAoKCRmY3MgXiAkZGF0YSkgJiAweDQwMCkgewoJCQkJCSRmY3MgPSAoJGZjcyA8PCAxKSBeICRnZW5wb2x5OwoJCQkJfSBlbHNlIHsKCQkJCQkkZmNzID0gKCRmY3MgPDwgMSk7CgkJCQl9CgkJCQkkZmNzICY9IDB4N0ZGOwoJCQkJJGRhdGEgPDw9IDE7CgkJCX0KCQl9CgkJcmV0dXJuICRmY3M7Cgl9CgoJLyoqCgkgKiBSZXZlcnNlIHVuc2lnbmVkIHNob3J0IHZhbHVlCgkgKiBAcGFyYW0gJG51bSAoaW50KSB2YWx1ZSB0byByZXZlcnNyCgkgKiBAcmV0dXJuIGludCByZXZlcnNlZCB2YWx1ZQoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gaW1iX3JldmVyc2VfdXMoJG51bSkgewoJCSRyZXYgPSAwOwoJCWZvciAoJGkgPSAwOyAkaSA8IDE2OyArKyRpKSB7CgkJCSRyZXYgPDw9IDE7CgkJCSRyZXYgfD0gKCRudW0gJiAxKTsKCQkJJG51bSA+Pj0gMTsKCQl9CgkJcmV0dXJuICRyZXY7Cgl9CgoJLyoqCgkgKiBnZW5lcmF0ZSBOb2YxMyB0YWJsZXMgdXNlZCBmb3IgSW50ZWxsaWdlbnQgTWFpbCBCYXJjb2RlCgkgKiBAcGFyYW0gJG4gKGludCkgaXMgdGhlIHR5cGUgb2YgdGFibGU6IDIgZm9yIDJvZjEzIHRhYmxlLCA1IGZvciA1b2YxM3RhYmxlCgkgKiBAcGFyYW0gJHNpemUgKGludCkgc2l6ZSBvZiB0YWJsZSAoNzggZm9yIG49MiBhbmQgMTI4NyBmb3Igbj01KQoJICogQHJldHVybiBhcnJheSByZXF1ZXN0ZWQgdGFibGUKCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGltYl90YWJsZXMoJG4sICRzaXplKSB7CgkJJHRhYmxlID0gYXJyYXkoKTsKCQkkbGxpID0gMDsgLy8gTFVUIGxvd2VyIGluZGV4CgkJJGx1aSA9ICRzaXplIC0gMTsgLy8gTFVUIHVwcGVyIGluZGV4CgkJZm9yICgkY291bnQgPSAwOyAkY291bnQgPCA4MTkyOyArKyRjb3VudCkgewoJCQkkYml0X2NvdW50ID0gMDsKCQkJZm9yICgkYml0X2luZGV4ID0gMDsgJGJpdF9pbmRleCA8IDEzOyArKyRiaXRfaW5kZXgpIHsKCQkJCSRiaXRfY291bnQgKz0gaW50dmFsKCgkY291bnQgJiAoMSA8PCAkYml0X2luZGV4KSkgIT0gMCk7CgkJCX0KCQkJLy8gaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGJpdHMgb24sIGdvIG9uIHRvIHRoZSBuZXh0IHZhbHVlCgkJCWlmICgkYml0X2NvdW50ID09ICRuKSB7CgkJCQkkcmV2ZXJzZSA9ICgkdGhpcy0+aW1iX3JldmVyc2VfdXMoJGNvdW50KSA+PiAzKTsKCQkJCS8vIGlmIHRoZSByZXZlcnNlIGlzIGxlc3MgdGhhbiBjb3VudCwgd2UgaGF2ZSBhbHJlYWR5IHZpc2l0ZWQgdGhpcyBwYWlyIGJlZm9yZQoJCQkJaWYgKCRyZXZlcnNlID49ICRjb3VudCkgewoJCQkJCS8vIElmIGNvdW50IGlzIHN5bW1ldHJpYywgcGxhY2UgaXQgYXQgdGhlIGZpcnN0IGZyZWUgc2xvdCBmcm9tIHRoZSBlbmQgb2YgdGhlIGxpc3QuCgkJCQkJLy8gT3RoZXJ3aXNlLCBwbGFjZSBpdCBhdCB0aGUgZmlyc3QgZnJlZSBzbG90IGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlzdCBBTkQgcGxhY2UgJHJldmVyc2UgYXRoIHRoZSBuZXh0IGZyZWUgc2xvdCBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpc3QKCQkJCQlpZiAoJHJldmVyc2UgPT0gJGNvdW50KSB7CgkJCQkJCSR0YWJsZVskbHVpXSA9ICRjb3VudDsKCQkJCQkJLS0kbHVpOwoJCQkJCX0gZWxzZSB7CgkJCQkJCSR0YWJsZVskbGxpXSA9ICRjb3VudDsKCQkJCQkJKyskbGxpOwoJCQkJCQkkdGFibGVbJGxsaV0gPSAkcmV2ZXJzZTsKCQkJCQkJKyskbGxpOwoJCQkJCX0KCQkJCX0KCQkJfQoJCX0KCQlyZXR1cm4gJHRhYmxlOwoJfQoKfSAvLyBlbmQgb2YgY2xhc3MKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEVORCBPRiBGSUxFCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Kwo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf_barcodes_2d.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfYmFyY29kZXNfMmQucGhwCi8vIFZlcnNpb24gICAgIDogMS4wLjAxNAovLyBCZWdpbiAgICAgICA6IDIwMDktMDQtMDcKLy8gTGFzdCBVcGRhdGUgOiAyMDEzLTAzLTE3Ci8vIEF1dGhvciAgICAgIDogTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFREIC0gd3d3LnRlY25pY2suY29tIC0gaW5mb0B0ZWNuaWNrLmNvbQovLyBMaWNlbnNlICAgICA6IEdOVS1MR1BMIHYzIChodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwpCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29weXJpZ2h0IChDKSAyMDA5LTIwMTMgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi8vIGFsb25nIHdpdGggVENQREYuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCi8vCi8vIFNlZSBMSUNFTlNFLlRYVCBmaWxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vCi8vIERlc2NyaXB0aW9uIDogUEhQIGNsYXNzIHRvIGNyZWF0ZXMgYXJyYXkgcmVwcmVzZW50YXRpb25zIGZvcgovLyAgICAgICAgICAgICAgIDJEIGJhcmNvZGVzIHRvIGJlIHVzZWQgd2l0aCBUQ1BERi4KLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogUEhQIGNsYXNzIHRvIGNyZWF0ZXMgYXJyYXkgcmVwcmVzZW50YXRpb25zIGZvciAyRCBiYXJjb2RlcyB0byBiZSB1c2VkIHdpdGggVENQREYuCiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMTQKICovCgovKioKICogQGNsYXNzIFRDUERGMkRCYXJjb2RlCiAqIFBIUCBjbGFzcyB0byBjcmVhdGVzIGFycmF5IHJlcHJlc2VudGF0aW9ucyBmb3IgMkQgYmFyY29kZXMgdG8gYmUgdXNlZCB3aXRoIFRDUERGIChodHRwOi8vd3d3LnRjcGRmLm9yZykuCiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEB2ZXJzaW9uIDEuMC4wMTQKICogQGF1dGhvciBOaWNvbGEgQXN1bmkKICovCmNsYXNzIFRDUERGMkRCYXJjb2RlIHsKCgkvKioKCSAqIEFycmF5IHJlcHJlc2VudGF0aW9uIG9mIGJhcmNvZGUuCgkgKiBAcHJvdGVjdGVkCgkgKi8KCXByb3RlY3RlZCAkYmFyY29kZV9hcnJheSA9IGZhbHNlOwoKCS8qKgoJICogVGhpcyBpcyB0aGUgY2xhc3MgY29uc3RydWN0b3IuCgkgKiBSZXR1cm4gYW4gYXJyYXkgcmVwcmVzZW50YXRpb25zIGZvciAyRCBiYXJjb2Rlczo8dWw+CgkgKiA8bGk+JGFycmNvZGVbJ2NvZGUnXSBjb2RlIHRvIGJlIHByaW50ZWQgb24gdGV4dCBsYWJlbDwvbGk+CgkgKiA8bGk+JGFycmNvZGVbJ251bV9yb3dzJ10gcmVxdWlyZWQgbnVtYmVyIG9mIHJvd3M8L2xpPgoJICogPGxpPiRhcnJjb2RlWydudW1fY29scyddIHJlcXVpcmVkIG51bWJlciBvZiBjb2x1bW5zPC9saT4KCSAqIDxsaT4kYXJyY29kZVsnYmNvZGUnXVskcl1bJGNdIHZhbHVlIG9mIHRoZSBjZWxsIGlzICRyIHJvdyBhbmQgJGMgY29sdW1uICgwID0gdHJhbnNwYXJlbnQsIDEgPSBibGFjayk8L2xpPjwvdWw+CgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBwcmludAogCSAqIEBwYXJhbSAkdHlwZSAoc3RyaW5nKSB0eXBlIG9mIGJhcmNvZGU6IDx1bD48bGk+REFUQU1BVFJJWCA6IERhdGFtYXRyaXggKElTTy9JRUMgMTYwMjIpPC9saT48bGk+UERGNDE3IDogUERGNDE3IChJU08vSUVDIDE1NDM4OjIwMDYpPC9saT48bGk+UERGNDE3LGEsZSx0LHMsZixvMCxvMSxvMixvMyxvNCxvNSxvNiA6IFBERjQxNyB3aXRoIHBhcmFtZXRlcnM6IGEgPSBhc3BlY3QgcmF0aW8gKHdpZHRoL2hlaWdodCk7IGUgPSBlcnJvciBjb3JyZWN0aW9uIGxldmVsICgwLTgpOyB0ID0gdG90YWwgbnVtYmVyIG9mIG1hY3JvIHNlZ21lbnRzOyBzID0gbWFjcm8gc2VnbWVudCBpbmRleCAoMC05OTk5OCk7IGYgPSBmaWxlIElEOyBvMCA9IEZpbGUgTmFtZSAodGV4dCk7IG8xID0gU2VnbWVudCBDb3VudCAobnVtZXJpYyk7IG8yID0gVGltZSBTdGFtcCAobnVtZXJpYyk7IG8zID0gU2VuZGVyICh0ZXh0KTsgbzQgPSBBZGRyZXNzZWUgKHRleHQpOyBvNSA9IEZpbGUgU2l6ZSAobnVtZXJpYyk7IG82ID0gQ2hlY2tzdW0gKG51bWVyaWMpLiBOT1RFUzogUGFyYW1ldGVycyB0LCBzIGFuZCBmIGFyZSByZXF1aXJlZCBmb3IgYSBNYWNybyBDb250cm9sIEJsb2NrLCBhbGwgb3RoZXIgcGFyYW1ldHJzIGFyZSBvcHRpb25hbC4gVG8gdXNlIGEgY29tbWEgY2hhcmFjdGVyICcsJyBvbiB0ZXh0IG9wdGlvbnMsIHJlcGxhY2UgaXQgd2l0aCB0aGUgY2hhcmFjdGVyIDI1NTogIlx4ZmYiLjwvbGk+PGxpPlFSQ09ERSA6IFFSY29kZSBMb3cgZXJyb3IgY29ycmVjdGlvbjwvbGk+PGxpPlFSQ09ERSxMIDogUVJjb2RlIExvdyBlcnJvciBjb3JyZWN0aW9uPC9saT48bGk+UVJDT0RFLE0gOiBRUmNvZGUgTWVkaXVtIGVycm9yIGNvcnJlY3Rpb248L2xpPjxsaT5RUkNPREUsUSA6IFFSY29kZSBCZXR0ZXIgZXJyb3IgY29ycmVjdGlvbjwvbGk+PGxpPlFSQ09ERSxIIDogUVItQ09ERSBCZXN0IGVycm9yIGNvcnJlY3Rpb248L2xpPjxsaT5SQVc6IHJhdyBtb2RlIC0gY29tbWEtc2VwYXJhZCBsaXN0IG9mIGFycmF5IHJvd3M8L2xpPjxsaT5SQVcyOiByYXcgbW9kZSAtIGFycmF5IHJvd3MgYXJlIHN1cnJvdW5kZWQgYnkgc3F1YXJlIHBhcmVudGhlc2lzLjwvbGk+PGxpPlRFU1QgOiBUZXN0IG1hdHJpeDwvbGk+PC91bD4KCSAqLwoJcHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRjb2RlLCAkdHlwZSkgewoJCSR0aGlzLT5zZXRCYXJjb2RlKCRjb2RlLCAkdHlwZSk7Cgl9CgoJLyoqCgkgKiBSZXR1cm4gYW4gYXJyYXkgcmVwcmVzZW50YXRpb25zIG9mIGJhcmNvZGUuCiAJICogQHJldHVybiBhcnJheQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZUFycmF5KCkgewoJCXJldHVybiAkdGhpcy0+YmFyY29kZV9hcnJheTsKCX0KCgkvKioKCSAqIFNlbmQgYmFyY29kZSBhcyBTVkcgaW1hZ2Ugb2JqZWN0IHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCgkgKiBAcGFyYW0gJHcgKGludCkgV2lkdGggb2YgYSBzaW5nbGUgcmVjdGFuZ2xlIGVsZW1lbnQgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkaCAoaW50KSBIZWlnaHQgb2YgYSBzaW5nbGUgcmVjdGFuZ2xlIGVsZW1lbnQgaW4gdXNlciB1bml0cy4KCSAqIEBwYXJhbSAkY29sb3IgKHN0cmluZykgRm9yZWdyb3VuZCBjb2xvciAoaW4gU1ZHIGZvcm1hdCkgZm9yIGJhciBlbGVtZW50cyAoYmFja2dyb3VuZCBpcyB0cmFuc3BhcmVudCkuCiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZVNWRygkdz0zLCAkaD0zLCAkY29sb3I9J2JsYWNrJykgewoJCS8vIHNlbmQgaGVhZGVycwoJCSRjb2RlID0gJHRoaXMtPmdldEJhcmNvZGVTVkdjb2RlKCR3LCAkaCwgJGNvbG9yKTsKCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vc3ZnK3htbCcpOwoJCWhlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljLCBtdXN0LXJldmFsaWRhdGUsIG1heC1hZ2U9MCcpOyAvLyBIVFRQLzEuMQoJCWhlYWRlcignUHJhZ21hOiBwdWJsaWMnKTsKCQloZWFkZXIoJ0V4cGlyZXM6IFNhdCwgMjYgSnVsIDE5OTcgMDU6MDA6MDAgR01UJyk7IC8vIERhdGUgaW4gdGhlIHBhc3QKCQloZWFkZXIoJ0xhc3QtTW9kaWZpZWQ6ICcuZ21kYXRlKCdELCBkIE0gWSBIOmk6cycpLicgR01UJyk7CgkJaGVhZGVyKCdDb250ZW50LURpc3Bvc2l0aW9uOiBpbmxpbmU7IGZpbGVuYW1lPSInLm1kNSgkY29kZSkuJy5zdmciOycpOwoJCS8vaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJy5zdHJsZW4oJGNvZGUpKTsKCQllY2hvICRjb2RlOwoJfQoKCS8qKgoJICogUmV0dXJuIGEgU1ZHIHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBiYXJjb2RlLgoJICogQHBhcmFtICR3IChpbnQpIFdpZHRoIG9mIGEgc2luZ2xlIHJlY3RhbmdsZSBlbGVtZW50IGluIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJGggKGludCkgSGVpZ2h0IG9mIGEgc2luZ2xlIHJlY3RhbmdsZSBlbGVtZW50IGluIHVzZXIgdW5pdHMuCgkgKiBAcGFyYW0gJGNvbG9yIChzdHJpbmcpIEZvcmVncm91bmQgY29sb3IgKGluIFNWRyBmb3JtYXQpIGZvciBiYXIgZWxlbWVudHMgKGJhY2tncm91bmQgaXMgdHJhbnNwYXJlbnQpLgogCSAqIEByZXR1cm4gc3RyaW5nIFNWRyBjb2RlLgogCSAqIEBwdWJsaWMKCSAqLwoJcHVibGljIGZ1bmN0aW9uIGdldEJhcmNvZGVTVkdjb2RlKCR3PTMsICRoPTMsICRjb2xvcj0nYmxhY2snKSB7CgkJLy8gcmVwbGFjZSB0YWJsZSBmb3Igc3BlY2lhbCBjaGFyYWN0ZXJzCgkJJHJlcHN0ciA9IGFycmF5KCJcMCIgPT4gJycsICcmJyA9PiAnJmFtcDsnLCAnPCcgPT4gJyZsdDsnLCAnPicgPT4gJyZndDsnKTsKCQkkc3ZnID0gJzwnLic/Jy4neG1sIHZlcnNpb249IjEuMCIgc3RhbmRhbG9uZT0ibm8iJy4nPycuJz4nLiJcbiI7CgkJJHN2ZyAuPSAnPCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4nLiJcbiI7CgkJJHN2ZyAuPSAnPHN2ZyB3aWR0aD0iJy5yb3VuZCgoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ10gKiAkdyksIDMpLiciIGhlaWdodD0iJy5yb3VuZCgoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9yb3dzJ10gKiAkaCksIDMpLiciIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4nLiJcbiI7CgkJJHN2ZyAuPSAiXHQiLic8ZGVzYz4nLnN0cnRyKCR0aGlzLT5iYXJjb2RlX2FycmF5Wydjb2RlJ10sICRyZXBzdHIpLic8L2Rlc2M+Jy4iXG4iOwoJCSRzdmcgLj0gIlx0Ii4nPGcgaWQ9ImVsZW1lbnRzIiBmaWxsPSInLiRjb2xvci4nIiBzdHJva2U9Im5vbmUiPicuIlxuIjsKCQkvLyBwcmludCBiYXJjb2RlIGVsZW1lbnRzCgkJJHkgPSAwOwoJCS8vIGZvciBlYWNoIHJvdwoJCWZvciAoJHIgPSAwOyAkciA8ICR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fcm93cyddOyArKyRyKSB7CgkJCSR4ID0gMDsKCQkJLy8gZm9yIGVhY2ggY29sdW1uCgkJCWZvciAoJGMgPSAwOyAkYyA8ICR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fY29scyddOyArKyRjKSB7CgkJCQlpZiAoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ11bJHJdWyRjXSA9PSAxKSB7CgkJCQkJLy8gZHJhdyBhIHNpbmdsZSBiYXJjb2RlIGNlbGwKCQkJCQkkc3ZnIC49ICJcdFx0Ii4nPHJlY3QgeD0iJy4keC4nIiB5PSInLiR5LiciIHdpZHRoPSInLiR3LiciIGhlaWdodD0iJy4kaC4nIiAvPicuIlxuIjsKCQkJCX0KCQkJCSR4ICs9ICR3OwoJCQl9CgkJCSR5ICs9ICRoOwoJCX0KCQkkc3ZnIC49ICJcdCIuJzwvZz4nLiJcbiI7CgkJJHN2ZyAuPSAnPC9zdmc+Jy4iXG4iOwoJCXJldHVybiAkc3ZnOwoJfQoKCS8qKgoJICogUmV0dXJuIGFuIEhUTUwgcmVwcmVzZW50YXRpb24gb2YgYmFyY29kZS4KCSAqIEBwYXJhbSAkdyAoaW50KSBXaWR0aCBvZiBhIHNpbmdsZSByZWN0YW5nbGUgZWxlbWVudCBpbiBwaXhlbHMuCgkgKiBAcGFyYW0gJGggKGludCkgSGVpZ2h0IG9mIGEgc2luZ2xlIHJlY3RhbmdsZSBlbGVtZW50IGluIHBpeGVscy4KCSAqIEBwYXJhbSAkY29sb3IgKHN0cmluZykgRm9yZWdyb3VuZCBjb2xvciBmb3IgYmFyIGVsZW1lbnRzIChiYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50KS4KIAkgKiBAcmV0dXJuIHN0cmluZyBIVE1MIGNvZGUuCiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZUhUTUwoJHc9MTAsICRoPTEwLCAkY29sb3I9J2JsYWNrJykgewoJCSRodG1sID0gJzxkaXYgc3R5bGU9ImZvbnQtc2l6ZTowO3Bvc2l0aW9uOnJlbGF0aXZlO3dpZHRoOicuKCR3ICogJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ10pLidweDtoZWlnaHQ6Jy4oJGggKiAkdGhpcy0+YmFyY29kZV9hcnJheVsnbnVtX3Jvd3MnXSkuJ3B4OyI+Jy4iXG4iOwoJCS8vIHByaW50IGJhcmNvZGUgZWxlbWVudHMKCQkkeSA9IDA7CgkJLy8gZm9yIGVhY2ggcm93CgkJZm9yICgkciA9IDA7ICRyIDwgJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9yb3dzJ107ICsrJHIpIHsKCQkJJHggPSAwOwoJCQkvLyBmb3IgZWFjaCBjb2x1bW4KCQkJZm9yICgkYyA9IDA7ICRjIDwgJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ107ICsrJGMpIHsKCQkJCWlmICgkdGhpcy0+YmFyY29kZV9hcnJheVsnYmNvZGUnXVskcl1bJGNdID09IDEpIHsKCQkJCQkvLyBkcmF3IGEgc2luZ2xlIGJhcmNvZGUgY2VsbAoJCQkJCSRodG1sIC49ICc8ZGl2IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOicuJGNvbG9yLic7d2lkdGg6Jy4kdy4ncHg7aGVpZ2h0OicuJGguJ3B4O3Bvc2l0aW9uOmFic29sdXRlO2xlZnQ6Jy4keC4ncHg7dG9wOicuJHkuJ3B4OyI+Jm5ic3A7PC9kaXY+Jy4iXG4iOwoJCQkJfQoJCQkJJHggKz0gJHc7CgkJCX0KCQkJJHkgKz0gJGg7CgkJfQoJCSRodG1sIC49ICc8L2Rpdj4nLiJcbiI7CgkJcmV0dXJuICRodG1sOwoJfQoKCS8qKgoJICogUmV0dXJuIGEgUE5HIGltYWdlIHJlcHJlc2VudGF0aW9uIG9mIGJhcmNvZGUgKHJlcXVpcmVzIEdEIG9yIEltYWdpY2sgbGlicmFyeSkuCgkgKiBAcGFyYW0gJHcgKGludCkgV2lkdGggb2YgYSBzaW5nbGUgcmVjdGFuZ2xlIGVsZW1lbnQgaW4gcGl4ZWxzLgoJICogQHBhcmFtICRoIChpbnQpIEhlaWdodCBvZiBhIHNpbmdsZSByZWN0YW5nbGUgZWxlbWVudCBpbiBwaXhlbHMuCgkgKiBAcGFyYW0gJGNvbG9yIChhcnJheSkgUkdCICgwLTI1NSkgZm9yZWdyb3VuZCBjb2xvciBmb3IgYmFyIGVsZW1lbnRzIChiYWNrZ3JvdW5kIGlzIHRyYW5zcGFyZW50KS4KIAkgKiBAcmV0dXJuIGltYWdlIG9yIGZhbHNlIGluIGNhc2Ugb2YgZXJyb3IuCiAJICogQHB1YmxpYwoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0QmFyY29kZVBORygkdz0zLCAkaD0zLCAkY29sb3I9YXJyYXkoMCwwLDApKSB7CgkJLy8gY2FsY3VsYXRlIGltYWdlIHNpemUKCQkkd2lkdGggPSAoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ251bV9jb2xzJ10gKiAkdyk7CgkJJGhlaWdodCA9ICgkdGhpcy0+YmFyY29kZV9hcnJheVsnbnVtX3Jvd3MnXSAqICRoKTsKCQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdpbWFnZWNyZWF0ZScpKSB7CgkJCS8vIEdEIGxpYnJhcnkKCQkJJGltYWdpY2sgPSBmYWxzZTsKCQkJJHBuZyA9IGltYWdlY3JlYXRlKCR3aWR0aCwgJGhlaWdodCk7CgkJCSRiZ2NvbCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkcG5nLCAyNTUsIDI1NSwgMjU1KTsKCQkJaW1hZ2Vjb2xvcnRyYW5zcGFyZW50KCRwbmcsICRiZ2NvbCk7CgkJCSRmZ2NvbCA9IGltYWdlY29sb3JhbGxvY2F0ZSgkcG5nLCAkY29sb3JbMF0sICRjb2xvclsxXSwgJGNvbG9yWzJdKTsKCQl9IGVsc2VpZiAoZXh0ZW5zaW9uX2xvYWRlZCgnaW1hZ2ljaycpKSB7CgkJCSRpbWFnaWNrID0gdHJ1ZTsKCQkJJGJnY29sID0gbmV3IGltYWdpY2twaXhlbCgncmdiKDI1NSwyNTUsMjU1Jyk7CgkJCSRmZ2NvbCA9IG5ldyBpbWFnaWNrcGl4ZWwoJ3JnYignLiRjb2xvclswXS4nLCcuJGNvbG9yWzFdLicsJy4kY29sb3JbMl0uJyknKTsKCQkJJHBuZyA9IG5ldyBJbWFnaWNrKCk7CgkJCSRwbmctPm5ld0ltYWdlKCR3aWR0aCwgJGhlaWdodCwgJ25vbmUnLCAncG5nJyk7CgkJCSRiYXIgPSBuZXcgaW1hZ2lja2RyYXcoKTsKCQkJJGJhci0+c2V0ZmlsbGNvbG9yKCRmZ2NvbCk7CgkJfSBlbHNlIHsKCQkJcmV0dXJuIGZhbHNlOwoJCX0KCQkvLyBwcmludCBiYXJjb2RlIGVsZW1lbnRzCgkJJHkgPSAwOwoJCS8vIGZvciBlYWNoIHJvdwoJCWZvciAoJHIgPSAwOyAkciA8ICR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fcm93cyddOyArKyRyKSB7CgkJCSR4ID0gMDsKCQkJLy8gZm9yIGVhY2ggY29sdW1uCgkJCWZvciAoJGMgPSAwOyAkYyA8ICR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fY29scyddOyArKyRjKSB7CgkJCQlpZiAoJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ11bJHJdWyRjXSA9PSAxKSB7CgkJCQkJLy8gZHJhdyBhIHNpbmdsZSBiYXJjb2RlIGNlbGwKCQkJCQlpZiAoJGltYWdpY2spIHsKCQkJCQkJJGJhci0+cmVjdGFuZ2xlKCR4LCAkeSwgKCR4ICsgJHcgLSAxKSwgKCR5ICsgJGggLSAxKSk7CgkJCQkJfSBlbHNlIHsKCQkJCQkJaW1hZ2VmaWxsZWRyZWN0YW5nbGUoJHBuZywgJHgsICR5LCAoJHggKyAkdyAtIDEpLCAoJHkgKyAkaCAtIDEpLCAkZmdjb2wpOwoJCQkJCX0KCQkJCX0KCQkJCSR4ICs9ICR3OwoJCQl9CgkJCSR5ICs9ICRoOwoJCX0KCQkvLyBzZW5kIGhlYWRlcnMKCQloZWFkZXIoJ0NvbnRlbnQtVHlwZTogaW1hZ2UvcG5nJyk7CgkJaGVhZGVyKCdDYWNoZS1Db250cm9sOiBwdWJsaWMsIG11c3QtcmV2YWxpZGF0ZSwgbWF4LWFnZT0wJyk7IC8vIEhUVFAvMS4xCgkJaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOwoJCWhlYWRlcignRXhwaXJlczogU2F0LCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQnKTsgLy8gRGF0ZSBpbiB0aGUgcGFzdAoJCWhlYWRlcignTGFzdC1Nb2RpZmllZDogJy5nbWRhdGUoJ0QsIGQgTSBZIEg6aTpzJykuJyBHTVQnKTsKCQlpZiAoJGltYWdpY2spIHsKCQkJJHBuZy0+ZHJhd2ltYWdlKCRiYXIpOwoJCQllY2hvICRwbmc7CgkJfSBlbHNlIHsKCQkJaW1hZ2VwbmcoJHBuZyk7CgkJCWltYWdlZGVzdHJveSgkcG5nKTsKCQl9Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGJhcmNvZGUuCgkgKiBAcGFyYW0gJGNvZGUgKHN0cmluZykgY29kZSB0byBwcmludAogCSAqIEBwYXJhbSAkdHlwZSAoc3RyaW5nKSB0eXBlIG9mIGJhcmNvZGU6IDx1bD48bGk+REFUQU1BVFJJWCA6IERhdGFtYXRyaXggKElTTy9JRUMgMTYwMjIpPC9saT48bGk+UERGNDE3IDogUERGNDE3IChJU08vSUVDIDE1NDM4OjIwMDYpPC9saT48bGk+UERGNDE3LGEsZSx0LHMsZixvMCxvMSxvMixvMyxvNCxvNSxvNiA6IFBERjQxNyB3aXRoIHBhcmFtZXRlcnM6IGEgPSBhc3BlY3QgcmF0aW8gKHdpZHRoL2hlaWdodCk7IGUgPSBlcnJvciBjb3JyZWN0aW9uIGxldmVsICgwLTgpOyB0ID0gdG90YWwgbnVtYmVyIG9mIG1hY3JvIHNlZ21lbnRzOyBzID0gbWFjcm8gc2VnbWVudCBpbmRleCAoMC05OTk5OCk7IGYgPSBmaWxlIElEOyBvMCA9IEZpbGUgTmFtZSAodGV4dCk7IG8xID0gU2VnbWVudCBDb3VudCAobnVtZXJpYyk7IG8yID0gVGltZSBTdGFtcCAobnVtZXJpYyk7IG8zID0gU2VuZGVyICh0ZXh0KTsgbzQgPSBBZGRyZXNzZWUgKHRleHQpOyBvNSA9IEZpbGUgU2l6ZSAobnVtZXJpYyk7IG82ID0gQ2hlY2tzdW0gKG51bWVyaWMpLiBOT1RFUzogUGFyYW1ldGVycyB0LCBzIGFuZCBmIGFyZSByZXF1aXJlZCBmb3IgYSBNYWNybyBDb250cm9sIEJsb2NrLCBhbGwgb3RoZXIgcGFyYW1ldHJzIGFyZSBvcHRpb25hbC4gVG8gdXNlIGEgY29tbWEgY2hhcmFjdGVyICcsJyBvbiB0ZXh0IG9wdGlvbnMsIHJlcGxhY2UgaXQgd2l0aCB0aGUgY2hhcmFjdGVyIDI1NTogIlx4ZmYiLjwvbGk+PGxpPlFSQ09ERSA6IFFSY29kZSBMb3cgZXJyb3IgY29ycmVjdGlvbjwvbGk+PGxpPlFSQ09ERSxMIDogUVJjb2RlIExvdyBlcnJvciBjb3JyZWN0aW9uPC9saT48bGk+UVJDT0RFLE0gOiBRUmNvZGUgTWVkaXVtIGVycm9yIGNvcnJlY3Rpb248L2xpPjxsaT5RUkNPREUsUSA6IFFSY29kZSBCZXR0ZXIgZXJyb3IgY29ycmVjdGlvbjwvbGk+PGxpPlFSQ09ERSxIIDogUVItQ09ERSBCZXN0IGVycm9yIGNvcnJlY3Rpb248L2xpPjxsaT5SQVc6IHJhdyBtb2RlIC0gY29tbWEtc2VwYXJhZCBsaXN0IG9mIGFycmF5IHJvd3M8L2xpPjxsaT5SQVcyOiByYXcgbW9kZSAtIGFycmF5IHJvd3MgYXJlIHN1cnJvdW5kZWQgYnkgc3F1YXJlIHBhcmVudGhlc2lzLjwvbGk+PGxpPlRFU1QgOiBUZXN0IG1hdHJpeDwvbGk+PC91bD4KIAkgKiBAcmV0dXJuIGFycmF5CgkgKi8KCXB1YmxpYyBmdW5jdGlvbiBzZXRCYXJjb2RlKCRjb2RlLCAkdHlwZSkgewoJCSRtb2RlID0gZXhwbG9kZSgnLCcsICR0eXBlKTsKCQkkcXJ0eXBlID0gc3RydG91cHBlcigkbW9kZVswXSk7CgkJc3dpdGNoICgkcXJ0eXBlKSB7CgkJCWNhc2UgJ0RBVEFNQVRSSVgnOiB7IC8vIERBVEFNQVRSSVggKElTTy9JRUMgMTYwMjIpCgkJCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL2JhcmNvZGVzL2RhdGFtYXRyaXgucGhwJyk7CgkJCQkkcXJjb2RlID0gbmV3IERhdGFtYXRyaXgoJGNvZGUpOwoJCQkJJHRoaXMtPmJhcmNvZGVfYXJyYXkgPSAkcXJjb2RlLT5nZXRCYXJjb2RlQXJyYXkoKTsKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5Wydjb2RlJ10gPSAkY29kZTsKCQkJCWJyZWFrOwoJCQl9CgkJCWNhc2UgJ1BERjQxNyc6IHsgLy8gUERGNDE3IChJU08vSUVDIDE1NDM4OjIwMDYpCgkJCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL2JhcmNvZGVzL3BkZjQxNy5waHAnKTsKCQkJCWlmICghaXNzZXQoJG1vZGVbMV0pIE9SICgkbW9kZVsxXSA9PT0gJycpKSB7CgkJCQkJJGFzcGVjdHJhdGlvID0gMjsgLy8gZGVmYXVsdCBhc3BlY3QgcmF0aW8gKHdpZHRoIC8gaGVpZ2h0KQoJCQkJfSBlbHNlIHsKCQkJCQkkYXNwZWN0cmF0aW8gPSBmbG9hdHZhbCgkbW9kZVsxXSk7CgkJCQl9CgkJCQlpZiAoIWlzc2V0KCRtb2RlWzJdKSBPUiAoJG1vZGVbMl0gPT09ICcnKSkgewoJCQkJCSRlY2wgPSAtMTsgLy8gZGVmYXVsdCBlcnJvciBjb3JyZWN0aW9uIGxldmVsIChhdXRvKQoJCQkJfSBlbHNlIHsKCQkJCQkkZWNsID0gaW50dmFsKCRtb2RlWzJdKTsKCQkJCX0KCQkJCS8vIHNldCBtYWNybyBibG9jawoJCQkJJG1hY3JvID0gYXJyYXkoKTsKCQkJCWlmIChpc3NldCgkbW9kZVszXSkgQU5EICgkbW9kZVszXSAhPT0gJycpIEFORCBpc3NldCgkbW9kZVs0XSkgQU5EICgkbW9kZVs0XSAhPT0gJycpIEFORCBpc3NldCgkbW9kZVs1XSkgQU5EICgkbW9kZVs1XSAhPT0gJycpKSB7CgkJCQkJJG1hY3JvWydzZWdtZW50X3RvdGFsJ10gPSBpbnR2YWwoJG1vZGVbM10pOwoJCQkJCSRtYWNyb1snc2VnbWVudF9pbmRleCddID0gaW50dmFsKCRtb2RlWzRdKTsKCQkJCQkkbWFjcm9bJ2ZpbGVfaWQnXSA9IHN0cnRyKCRtb2RlWzVdLCAiXHhmZiIsICcsJyk7CgkJCQkJZm9yICgkaSA9IDA7ICRpIDwgNzsgKyskaSkgewoJCQkJCQkkbyA9ICRpICsgNjsKCQkJCQkJaWYgKGlzc2V0KCRtb2RlWyRvXSkgQU5EICgkbW9kZVskb10gIT09ICcnKSkgewoJCQkJCQkJLy8gYWRkIG9wdGlvbgoJCQkJCQkJJG1hY3JvWydvcHRpb25fJy4kaV0gPSBzdHJ0cigkbW9kZVskb10sICJceGZmIiwgJywnKTsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSRxcmNvZGUgPSBuZXcgUERGNDE3KCRjb2RlLCAkZWNsLCAkYXNwZWN0cmF0aW8sICRtYWNybyk7CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheSA9ICRxcmNvZGUtPmdldEJhcmNvZGVBcnJheSgpOwoJCQkJJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2NvZGUnXSA9ICRjb2RlOwoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnUVJDT0RFJzogeyAvLyBRUi1DT0RFCgkJCQlyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy9pbmNsdWRlL2JhcmNvZGVzL3FyY29kZS5waHAnKTsKCQkJCWlmICghaXNzZXQoJG1vZGVbMV0pIE9SICghaW5fYXJyYXkoJG1vZGVbMV0sYXJyYXkoJ0wnLCdNJywnUScsJ0gnKSkpKSB7CgkJCQkJJG1vZGVbMV0gPSAnTCc7IC8vIERkZWZhdWx0OiBMb3cgZXJyb3IgY29ycmVjdGlvbgoJCQkJfQoJCQkJJHFyY29kZSA9IG5ldyBRUmNvZGUoJGNvZGUsIHN0cnRvdXBwZXIoJG1vZGVbMV0pKTsKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5ID0gJHFyY29kZS0+Z2V0QmFyY29kZUFycmF5KCk7CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheVsnY29kZSddID0gJGNvZGU7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdSQVcnOgoJCQljYXNlICdSQVcyJzogeyAvLyBSQVcgTU9ERQoJCQkJLy8gcmVtb3ZlIHNwYWNlcwoJCQkJJGNvZGUgPSBwcmVnX3JlcGxhY2UoJy9bXHNdKi9zaScsICcnLCAkY29kZSk7CgkJCQlpZiAoc3RybGVuKCRjb2RlKSA8IDMpIHsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmICgkcXJ0eXBlID09ICdSQVcnKSB7CgkJCQkJLy8gY29tbWEtc2VwYXJhdGVkIHJvd3MKCQkJCQkkcm93cyA9IGV4cGxvZGUoJywnLCAkY29kZSk7CgkJCQl9IGVsc2UgeyAvLyBSQVcyCgkJCQkJLy8gcm93cyBlbmNsb3NlZCBpbiBzcXVhcmUgcGFyZW50aGVzZXMKCQkJCQkkY29kZSA9IHN1YnN0cigkY29kZSwgMSwgLTEpOwoJCQkJCSRyb3dzID0gZXhwbG9kZSgnXVsnLCAkY29kZSk7CgkJCQl9CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheVsnbnVtX3Jvd3MnXSA9IGNvdW50KCRyb3dzKTsKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fY29scyddID0gc3RybGVuKCRyb3dzWzBdKTsKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5WydiY29kZSddID0gYXJyYXkoKTsKCQkJCWZvcmVhY2ggKCRyb3dzIGFzICRyKSB7CgkJCQkJJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2Jjb2RlJ11bXSA9IHN0cl9zcGxpdCgkciwgMSk7CgkJCQl9CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheVsnY29kZSddID0gJGNvZGU7CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICdURVNUJzogeyAvLyBURVNUIE1PREUKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fcm93cyddID0gNTsKCQkJCSR0aGlzLT5iYXJjb2RlX2FycmF5WydudW1fY29scyddID0gMTU7CgkJCQkkdGhpcy0+YmFyY29kZV9hcnJheVsnYmNvZGUnXSA9IGFycmF5KAoJCQkJCWFycmF5KDEsMSwxLDAsMSwxLDEsMCwxLDEsMSwwLDEsMSwxKSwKCQkJCQlhcnJheSgwLDEsMCwwLDEsMCwwLDAsMSwwLDAsMCwwLDEsMCksCgkJCQkJYXJyYXkoMCwxLDAsMCwxLDEsMCwwLDEsMSwxLDAsMCwxLDApLAoJCQkJCWFycmF5KDAsMSwwLDAsMSwwLDAsMCwwLDAsMSwwLDAsMSwwKSwKCQkJCQlhcnJheSgwLDEsMCwwLDEsMSwxLDAsMSwxLDEsMCwwLDEsMCkpOwoJCQkJJHRoaXMtPmJhcmNvZGVfYXJyYXlbJ2NvZGUnXSA9ICRjb2RlOwoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJJHRoaXMtPmJhcmNvZGVfYXJyYXkgPSBmYWxzZTsKCQkJfQoJCX0KCX0KfSAvLyBlbmQgb2YgY2xhc3MKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf_import.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfaW1wb3J0LnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMDEKLy8gQmVnaW4gICAgICAgOiAyMDExLTA1LTIzCi8vIExhc3QgVXBkYXRlIDogMjAxMy0wOS0xNwovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gSWYgbm90LCBzZWUKLy8gPGh0dHA6Ly93d3cudGVjbmljay5jb20vcGFnZWZpbGVzL3RjcGRmL0xJQ0VOU0UuVFhUPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRGVzY3JpcHRpb24gOiBUaGlzIGlzIGEgUEhQIGNsYXNzIGV4dGVuc2lvbiBvZiB0aGUgVENQREYgbGlicmFyeSB0bwovLyAgICAgICAgICAgICAgIGltcG9ydCBleGlzdGluZyBQREYgZG9jdW1lbnRzLgovLwovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsKCi8qKgogKiBAZmlsZQogKiAhISEgVEhJUyBDTEFTUyBJUyBVTkRFUiBERVZFTE9QTUVOVCAhISEKICogVGhpcyBpcyBhIFBIUCBjbGFzcyBleHRlbnNpb24gb2YgdGhlIFRDUERGIChodHRwOi8vd3d3LnRjcGRmLm9yZykgbGlicmFyeSB0byBpbXBvcnQgZXhpc3RpbmcgUERGIGRvY3VtZW50cy48YnI+CiAqIEBwYWNrYWdlIGNvbS50ZWNuaWNrLnRjcGRmCiAqIEBhdXRob3IgTmljb2xhIEFzdW5pCiAqIEB2ZXJzaW9uIDEuMC4wMDEKICovCgovLyBpbmNsdWRlIHRoZSBUQ1BERiBjbGFzcwpyZXF1aXJlX29uY2UoZGlybmFtZShfX0ZJTEVfXykuJy90Y3BkZi5waHAnKTsKLy8gaW5jbHVkZSBQREYgcGFyc2VyIGNsYXNzCnJlcXVpcmVfb25jZShkaXJuYW1lKF9fRklMRV9fKS4nL3RjcGRmX3BhcnNlci5waHAnKTsKCi8qKgogKiBAY2xhc3MgVENQREZfSU1QT1JUCiAqICEhISBUSElTIENMQVNTIElTIFVOREVSIERFVkVMT1BNRU5UICEhIQogKiBQSFAgY2xhc3MgZXh0ZW5zaW9uIG9mIHRoZSBUQ1BERiAoaHR0cDovL3d3dy50Y3BkZi5vcmcpIGxpYnJhcnkgdG8gaW1wb3J0IGV4aXN0aW5nIFBERiBkb2N1bWVudHMuPGJyPgogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAYnJpZWYgUEhQIGNsYXNzIGV4dGVuc2lvbiBvZiB0aGUgVENQREYgbGlicmFyeSB0byBpbXBvcnQgZXhpc3RpbmcgUERGIGRvY3VtZW50cy4KICogQHZlcnNpb24gMS4wLjAwMQogKiBAYXV0aG9yIE5pY29sYSBBc3VuaSAtIGluZm9AdGVjbmljay5jb20KICovCmNsYXNzIFRDUERGX0lNUE9SVCBleHRlbmRzIFRDUERGIHsKCgkvKioKCSAqIEltcG9ydCBhbiBleGlzdGluZyBQREYgZG9jdW1lbnQKCSAqIEBwYXJhbSAkZmlsZW5hbWUgKHN0cmluZykgRmlsZW5hbWUgb2YgdGhlIFBERiBkb2N1bWVudCB0byBpbXBvcnQuCgkgKiBAcmV0dXJuIHRydWUgaW4gY2FzZSBvZiBzdWNjZXNzLCBmYWxzZSBvdGhlcndpc2UKCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTI0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gaW1wb3J0UERGKCRmaWxlbmFtZSkgewoJCS8vIGxvYWQgZG9jdW1lbnQKCQkkcmF3ZGF0YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7CgkJaWYgKCRyYXdkYXRhID09PSBmYWxzZSkgewoJCQkkdGhpcy0+RXJyb3IoJ1VuYWJsZSB0byBnZXQgdGhlIGNvbnRlbnQgb2YgdGhlIGZpbGU6ICcuJGZpbGVuYW1lKTsKCQl9CgkJLy8gY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzIGZvciBwYXJzZXIKCQkkY2ZnID0gYXJyYXkoCgkJCSdkaWVfZm9yX2Vycm9ycycgPT4gZmFsc2UsCgkJCSdpZ25vcmVfZmlsdGVyX2RlY29kaW5nX2Vycm9ycycgPT4gdHJ1ZSwKCQkJJ2lnbm9yZV9taXNzaW5nX2ZpbHRlcl9kZWNvZGVycycgPT4gdHJ1ZSwKCQkpOwoJCXRyeSB7CgkJCS8vIHBhcnNlIFBERiBkYXRhCgkJCSRwZGYgPSBuZXcgVENQREZfUEFSU0VSKCRyYXdkYXRhLCAkY2ZnKTsKCQl9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsKCQkJZGllKCRlLT5nZXRNZXNzYWdlKCkpOwoJCX0KCQkvLyBnZXQgdGhlIHBhcnNlZCBkYXRhCgkJJGRhdGEgPSAkcGRmLT5nZXRQYXJzZWREYXRhKCk7CgkJLy8gcmVsZWFzZSBzb21lIG1lbW9yeQoJCXVuc2V0KCRyYXdkYXRhKTsKCgkJLy8gLi4uCgoKCQlwcmludF9yKCRkYXRhKTsgLy8gREVCVUcKCgoJCXVuc2V0KCRwZGYpOwoJfQoKfSAvLyBFTkQgT0YgQ0xBU1MKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tcpdf_parser.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[PD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfcGFyc2VyLnBocAovLyBWZXJzaW9uICAgICA6IDEuMC4wMTQKLy8gQmVnaW4gICAgICAgOiAyMDExLTA1LTIzCi8vIExhc3QgVXBkYXRlIDogMjAxNC0wMi0xOAovLyBBdXRob3IgICAgICA6IE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURCAtIHd3dy50ZWNuaWNrLmNvbSAtIGluZm9AdGVjbmljay5jb20KLy8gTGljZW5zZSAgICAgOiBodHRwOi8vd3d3LnRlY25pY2suY29tL3BhZ2VmaWxlcy90Y3BkZi9MSUNFTlNFLlRYVCBHTlUtTEdQTHYzCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gQ29weXJpZ2h0IChDKSAyMDExLTIwMTQgTmljb2xhIEFzdW5pIC0gVGVjbmljay5jb20gTFRECi8vCi8vIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIFRDUERGIHNvZnR3YXJlIGxpYnJhcnkuCi8vCi8vIFRDUERGIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKLy8gdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKLy8gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlCi8vIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi8vCi8vIFRDUERGIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAovLyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi8vIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLy8gU2VlIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLy8KLy8gWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgTGljZW5zZQovLyBhbG9uZyB3aXRoIFRDUERGLiBJZiBub3QsIHNlZQovLyA8aHR0cDovL3d3dy50ZWNuaWNrLmNvbS9wYWdlZmlsZXMvdGNwZGYvTElDRU5TRS5UWFQ+LgovLwovLyBTZWUgTElDRU5TRS5UWFQgZmlsZSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLwovLyBEZXNjcmlwdGlvbiA6IFRoaXMgaXMgYSBQSFAgY2xhc3MgZm9yIHBhcnNpbmcgUERGIGRvY3VtZW50cy4KLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogVGhpcyBpcyBhIFBIUCBjbGFzcyBmb3IgcGFyc2luZyBQREYgZG9jdW1lbnRzLjxicj4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGF1dGhvciBOaWNvbGEgQXN1bmkKICogQHZlcnNpb24gMS4wLjAxNAogKi8KCi8vIGluY2x1ZGUgY2xhc3MgZm9yIGRlY29kaW5nIGZpbHRlcnMKcmVxdWlyZV9vbmNlKGRpcm5hbWUoX19GSUxFX18pLicvaW5jbHVkZS90Y3BkZl9maWx0ZXJzLnBocCcpOwoKLyoqCiAqIEBjbGFzcyBUQ1BERl9QQVJTRVIKICogVGhpcyBpcyBhIFBIUCBjbGFzcyBmb3IgcGFyc2luZyBQREYgZG9jdW1lbnRzLjxicj4KICogQHBhY2thZ2UgY29tLnRlY25pY2sudGNwZGYKICogQGJyaWVmIFRoaXMgaXMgYSBQSFAgY2xhc3MgZm9yIHBhcnNpbmcgUERGIGRvY3VtZW50cy4uCiAqIEB2ZXJzaW9uIDEuMC4wMTAKICogQGF1dGhvciBOaWNvbGEgQXN1bmkgLSBpbmZvQHRlY25pY2suY29tCiAqLwpjbGFzcyBUQ1BERl9QQVJTRVIgewoKCS8qKgoJICogUmF3IGNvbnRlbnQgb2YgdGhlIFBERiBkb2N1bWVudC4KCSAqIEBwcml2YXRlCgkgKi8KCXByaXZhdGUgJHBkZmRhdGEgPSAnJzsKCgkvKioKCSAqIFhSRUYgZGF0YS4KCSAqIEBwcm90ZWN0ZWQKCSAqLwoJcHJvdGVjdGVkICR4cmVmID0gYXJyYXkoKTsKCgkvKioKCSAqIEFycmF5IG9mIFBERiBvYmplY3RzLgoJICogQHByb3RlY3RlZAoJICovCglwcm90ZWN0ZWQgJG9iamVjdHMgPSBhcnJheSgpOwoKCS8qKgoJICogQ2xhc3Mgb2JqZWN0IGZvciBkZWNvZGluZyBmaWx0ZXJzLgoJICogQHByaXZhdGUKCSAqLwoJcHJpdmF0ZSAkRmlsdGVyRGVjb2RlcnM7CgoJLyoqCgkgKiBBcnJheSBvZiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMuCgkgKiBAcHJpdmF0ZQoJICovCglwcml2YXRlICRjZmcgPSBhcnJheSgKCQknZGllX2Zvcl9lcnJvcnMnID0+IGZhbHNlLAoJCSdpZ25vcmVfZmlsdGVyX2RlY29kaW5nX2Vycm9ycycgPT4gdHJ1ZSwKCQknaWdub3JlX21pc3NpbmdfZmlsdGVyX2RlY29kZXJzJyA9PiB0cnVlLAoJKTsKCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgoJLyoqCgkgKiBQYXJzZSBhIFBERiBkb2N1bWVudCBhbiByZXR1cm4gYW4gYXJyYXkgb2Ygb2JqZWN0cy4KCSAqIEBwYXJhbSAkZGF0YSAoc3RyaW5nKSBQREYgZGF0YSB0byBwYXJzZS4KCSAqIEBwYXJhbSAkY2ZnIChhcnJheSkgQXJyYXkgb2YgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgoJICogCQkJJ2RpZV9mb3JfZXJyb3JzJyA6IGlmIHRydWUgdGVybWl0YXRlIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbiBpbiBjYXNlIG9mIGVycm9yLCBvdGhlcndpc2UgdGhvd3MgYW4gZXhjZXB0aW9uOwoJICogCQkJJ2lnbm9yZV9maWx0ZXJfZGVjb2RpbmdfZXJyb3JzJyA6IGlmIHRydWUgaWdub3JlIGZpbHRlciBkZWNvZGluZyBlcnJvcnM7CgkgKiAJCQknaWdub3JlX21pc3NpbmdfZmlsdGVyX2RlY29kZXJzJyA6IGlmIHRydWUgaWdub3JlIG1pc3NpbmcgZmlsdGVyIGRlY29kaW5nIGVycm9ycy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTI0KQoJICovCglwdWJsaWMgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJGRhdGEsICRjZmc9YXJyYXkoKSkgewoJCWlmIChlbXB0eSgkZGF0YSkpIHsKCQkJJHRoaXMtPkVycm9yKCdFbXB0eSBQREYgZGF0YS4nKTsKCQl9CgkJLy8gZmluZCB0aGUgcGRmIGhlYWRlciBzdGFydGluZyBwb3NpdGlvbgoJCWlmICgoJHRyaW1wb3MgPSBzdHJwb3MoJGRhdGEsICclUERGLScpKSA9PT0gRkFMU0UpIHsKCQkJJHRoaXMtPkVycm9yKCdJbnZhbGlkIFBERiBkYXRhOiBtaXNzaW5nICVQREYgaGVhZGVyLicpOwoJCX0KCQkvLyBnZXQgUERGIGNvbnRlbnQgc3RyaW5nCgkJJHRoaXMtPnBkZmRhdGEgPSBzdWJzdHIoJGRhdGEsICR0cmltcG9zKTsKCQkvLyBnZXQgbGVuZ3RoCgkJJHBkZmxlbiA9IHN0cmxlbigkdGhpcy0+cGRmZGF0YSk7CgkJLy8gc2V0IGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycwoJCSR0aGlzLT5zZXRDb25maWcoJGNmZyk7CgkJLy8gZ2V0IHhyZWYgYW5kIHRyYWlsZXIgZGF0YQoJCSR0aGlzLT54cmVmID0gJHRoaXMtPmdldFhyZWZEYXRhKCk7CgkJLy8gcGFyc2UgYWxsIGRvY3VtZW50IG9iamVjdHMKCQkkdGhpcy0+b2JqZWN0cyA9IGFycmF5KCk7CgkJZm9yZWFjaCAoJHRoaXMtPnhyZWZbJ3hyZWYnXSBhcyAkb2JqID0+ICRvZmZzZXQpIHsKCQkJaWYgKCFpc3NldCgkdGhpcy0+b2JqZWN0c1skb2JqXSkgQU5EICgkb2Zmc2V0ID4gMCkpIHsKCQkJCS8vIGRlY29kZSBvYmplY3RzIHdpdGggcG9zaXRpdmUgb2Zmc2V0CgkJCQkkdGhpcy0+b2JqZWN0c1skb2JqXSA9ICR0aGlzLT5nZXRJbmRpcmVjdE9iamVjdCgkb2JqLCAkb2Zmc2V0LCB0cnVlKTsKCQkJfQoJCX0KCQkvLyByZWxlYXNlIHNvbWUgbWVtb3J5CgkJdW5zZXQoJHRoaXMtPnBkZmRhdGEpOwoJCSR0aGlzLT5wZGZkYXRhID0gJyc7Cgl9CgoJLyoqCgkgKiBTZXQgdGhlIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVycy4KCSAqIEBwYXJhbSAkY2ZnIChhcnJheSkgQXJyYXkgb2YgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzOgoJICogCQkJJ2RpZV9mb3JfZXJyb3JzJyA6IGlmIHRydWUgdGVybWl0YXRlIHRoZSBwcm9ncmFtIGV4ZWN1dGlvbiBpbiBjYXNlIG9mIGVycm9yLCBvdGhlcndpc2UgdGhvd3MgYW4gZXhjZXB0aW9uOwoJICogCQkJJ2lnbm9yZV9maWx0ZXJfZGVjb2RpbmdfZXJyb3JzJyA6IGlmIHRydWUgaWdub3JlIGZpbHRlciBkZWNvZGluZyBlcnJvcnM7CgkgKiAJCQknaWdub3JlX21pc3NpbmdfZmlsdGVyX2RlY29kZXJzJyA6IGlmIHRydWUgaWdub3JlIG1pc3NpbmcgZmlsdGVyIGRlY29kaW5nIGVycm9ycy4KCSAqIEBwdWJsaWMKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIHNldENvbmZpZygkY2ZnKSB7CgkJaWYgKGlzc2V0KCRjZmdbJ2RpZV9mb3JfZXJyb3JzJ10pKSB7CgkJCSR0aGlzLT5jZmdbJ2RpZV9mb3JfZXJyb3JzJ10gPSAhISRjZmdbJ2RpZV9mb3JfZXJyb3JzJ107CgkJfQoJCWlmIChpc3NldCgkY2ZnWydpZ25vcmVfZmlsdGVyX2RlY29kaW5nX2Vycm9ycyddKSkgewoJCQkkdGhpcy0+Y2ZnWydpZ25vcmVfZmlsdGVyX2RlY29kaW5nX2Vycm9ycyddID0gISEkY2ZnWydpZ25vcmVfZmlsdGVyX2RlY29kaW5nX2Vycm9ycyddOwoJCX0KCQlpZiAoaXNzZXQoJGNmZ1snaWdub3JlX21pc3NpbmdfZmlsdGVyX2RlY29kZXJzJ10pKSB7CgkJCSR0aGlzLT5jZmdbJ2lnbm9yZV9taXNzaW5nX2ZpbHRlcl9kZWNvZGVycyddID0gISEkY2ZnWydpZ25vcmVfbWlzc2luZ19maWx0ZXJfZGVjb2RlcnMnXTsKCQl9Cgl9CgoJLyoqCgkgKiBSZXR1cm4gYW4gYXJyYXkgb2YgcGFyc2VkIFBERiBkb2N1bWVudCBvYmplY3RzLgoJICogQHJldHVybiAoYXJyYXkpIEFycmF5IG9mIHBhcnNlZCBQREYgZG9jdW1lbnQgb2JqZWN0cy4KCSAqIEBwdWJsaWMKCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA2LTI2KQoJICovCglwdWJsaWMgZnVuY3Rpb24gZ2V0UGFyc2VkRGF0YSgpIHsKCQlyZXR1cm4gYXJyYXkoJHRoaXMtPnhyZWYsICR0aGlzLT5vYmplY3RzKTsKCX0KCgkvKioKCSAqIEdldCBDcm9zcy1SZWZlcmVuY2UgKHhyZWYpIHRhYmxlIGFuZCB0cmFpbGVyIGRhdGEgZnJvbSBQREYgZG9jdW1lbnQgZGF0YS4KCSAqIEBwYXJhbSAkb2Zmc2V0IChpbnQpIHhyZWYgb2Zmc2V0IChpZiBrbm93KS4KCSAqIEBwYXJhbSAkeHJlZiAoYXJyYXkpIHByZXZpb3VzIHhyZWYgYXJyYXkgKGlmIGFueSkuCgkgKiBAcmV0dXJuIEFycmF5IGNvbnRhaW5pbmcgeHJlZiBhbmQgdHJhaWxlciBkYXRhLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDUtMjQpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRYcmVmRGF0YSgkb2Zmc2V0PTAsICR4cmVmPWFycmF5KCkpIHsKCQlpZiAoJG9mZnNldCA9PSAwKSB7CgkJCS8vIGZpbmQgbGFzdCBzdGFydHhyZWYKCQkJaWYgKHByZWdfbWF0Y2hfYWxsKCcvW1xyXG5dc3RhcnR4cmVmW1xzXSpbXHJcbl0rKFswLTldKylbXHNdKltcclxuXSslJUVPRi9pJywgJHRoaXMtPnBkZmRhdGEsICRtYXRjaGVzLCBQUkVHX1NFVF9PUkRFUiwgJG9mZnNldCkgPT0gMCkgewoJCQkJJHRoaXMtPkVycm9yKCdVbmFibGUgdG8gZmluZCBzdGFydHhyZWYnKTsKCQkJfQoJCQkkbWF0Y2hlcyA9IGFycmF5X3BvcCgkbWF0Y2hlcyk7CgkJCSRzdGFydHhyZWYgPSAkbWF0Y2hlc1sxXTsKCQl9IGVsc2VpZiAoc3RycG9zKCR0aGlzLT5wZGZkYXRhLCAneHJlZicsICRvZmZzZXQpID09ICRvZmZzZXQpIHsKCQkJLy8gQWxyZWFkeSBwb2ludGluZyBhdCB0aGUgeHJlZiB0YWJsZQoJCQkkc3RhcnR4cmVmID0gJG9mZnNldDsKCQl9IGVsc2VpZiAocHJlZ19tYXRjaCgnLyhbMC05XStbXHNdWzAtOV0rW1xzXW9iaikvaScsICR0aGlzLT5wZGZkYXRhLCAkbWF0Y2hlcywgUFJFR19PRkZTRVRfQ0FQVFVSRSwgJG9mZnNldCkpIHsKCQkJLy8gQ3Jvc3MtUmVmZXJlbmNlIFN0cmVhbSBvYmplY3QKCQkJJHN0YXJ0eHJlZiA9ICRvZmZzZXQ7CgkJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9bXHJcbl1zdGFydHhyZWZbXHNdKltcclxuXSsoWzAtOV0rKVtcc10qW1xyXG5dKyUlRU9GL2knLCAkdGhpcy0+cGRmZGF0YSwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUsICRvZmZzZXQpKSB7CgkJCS8vIHN0YXJ0eHJlZiBmb3VuZAoJCQkkc3RhcnR4cmVmID0gJG1hdGNoZXNbMV1bMF07CgkJfSBlbHNlIHsKCQkJJHRoaXMtPkVycm9yKCdVbmFibGUgdG8gZmluZCBzdGFydHhyZWYnKTsKCQl9CgkJLy8gY2hlY2sgeHJlZiBwb3NpdGlvbgoJCWlmIChzdHJwb3MoJHRoaXMtPnBkZmRhdGEsICd4cmVmJywgJHN0YXJ0eHJlZikgPT0gJHN0YXJ0eHJlZikgewoJCQkvLyBDcm9zcy1SZWZlcmVuY2UKCQkJJHhyZWYgPSAkdGhpcy0+ZGVjb2RlWHJlZigkc3RhcnR4cmVmLCAkeHJlZik7CgkJfSBlbHNlIHsKCQkJLy8gQ3Jvc3MtUmVmZXJlbmNlIFN0cmVhbQoJCQkkeHJlZiA9ICR0aGlzLT5kZWNvZGVYcmVmU3RyZWFtKCRzdGFydHhyZWYsICR4cmVmKTsKCQl9CgkJaWYgKGVtcHR5KCR4cmVmKSkgewoJCQkkdGhpcy0+RXJyb3IoJ1VuYWJsZSB0byBmaW5kIHhyZWYnKTsKCQl9CgkJcmV0dXJuICR4cmVmOwoJfQoKCS8qKgoJICogRGVjb2RlIHRoZSBDcm9zcy1SZWZlcmVuY2Ugc2VjdGlvbgoJICogQHBhcmFtICRzdGFydHhyZWYgKGludCkgT2Zmc2V0IGF0IHdoaWNoIHRoZSB4cmVmIHNlY3Rpb24gc3RhcnRzIChwb3NpdGlvbiBvZiB0aGUgJ3hyZWYnIGtleXdvcmQpLgoJICogQHBhcmFtICR4cmVmIChhcnJheSkgUHJldmlvdXMgeHJlZiBhcnJheSAoaWYgYW55KS4KCSAqIEByZXR1cm4gQXJyYXkgY29udGFpbmluZyB4cmVmIGFuZCB0cmFpbGVyIGRhdGEuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNi0yMCkKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRlY29kZVhyZWYoJHN0YXJ0eHJlZiwgJHhyZWY9YXJyYXkoKSkgewoJCSRzdGFydHhyZWYgKz0gNDsgLy8gNCBpcyB0aGUgbGVuZ2h0IG9mIHRoZSB3b3JkICd4cmVmJwoJCS8vIHNraXAgaW5pdGlhbCB3aGl0ZSBzcGFjZSBjaGFyczogXHgwMCBudWxsIChOVUwpLCBceDA5IGhvcml6b250YWwgdGFiIChIVCksIFx4MEEgbGluZSBmZWVkIChMRiksIFx4MEMgZm9ybSBmZWVkIChGRiksIFx4MEQgY2FycmlhZ2UgcmV0dXJuIChDUiksIFx4MjAgc3BhY2UgKFNQKQoJCSRvZmZzZXQgPSAkc3RhcnR4cmVmICsgc3Ryc3BuKCR0aGlzLT5wZGZkYXRhLCAiXHgwMFx4MDlceDBhXHgwY1x4MGRceDIwIiwgJHN0YXJ0eHJlZik7CgkJLy8gaW5pdGlhbGl6ZSBvYmplY3QgbnVtYmVyCgkJJG9ial9udW0gPSAwOwoJCS8vIHNlYXJjaCBmb3IgY3Jvc3MtcmVmZXJlbmNlIGVudHJpZXMgb3Igc3Vic2VjdGlvbgoJCXdoaWxlIChwcmVnX21hdGNoKCcvKFswLTldKylbXHgyMF0oWzAtOV0rKVtceDIwXT8oW25mXT8pKFxyXG58W1x4MjBdP1tcclxuXSkvJywgJHRoaXMtPnBkZmRhdGEsICRtYXRjaGVzLCBQUkVHX09GRlNFVF9DQVBUVVJFLCAkb2Zmc2V0KSA+IDApIHsKCQkJaWYgKCRtYXRjaGVzWzBdWzFdICE9ICRvZmZzZXQpIHsKCQkJCS8vIHdlIGFyZSBvbiBhbm90aGVyIHNlY3Rpb24KCQkJCWJyZWFrOwoJCQl9CgkJCSRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdWzBdKTsKCQkJaWYgKCRtYXRjaGVzWzNdWzBdID09ICduJykgewoJCQkJLy8gY3JlYXRlIHVuaXF1ZSBvYmplY3QgaW5kZXg6IFtvYmplY3QgbnVtYmVyXV9bZ2VuZXJhdGlvbiBudW1iZXJdCgkJCQkkaW5kZXggPSAkb2JqX251bS4nXycuaW50dmFsKCRtYXRjaGVzWzJdWzBdKTsKCQkJCS8vIGNoZWNrIGlmIG9iamVjdCBhbHJlYWR5IGV4aXN0CgkJCQlpZiAoIWlzc2V0KCR4cmVmWyd4cmVmJ11bJGluZGV4XSkpIHsKCQkJCQkvLyBzdG9yZSBvYmplY3Qgb2Zmc2V0IHBvc2l0aW9uCgkJCQkJJHhyZWZbJ3hyZWYnXVskaW5kZXhdID0gaW50dmFsKCRtYXRjaGVzWzFdWzBdKTsKCQkJCX0KCQkJCSsrJG9ial9udW07CgkJCX0gZWxzZWlmICgkbWF0Y2hlc1szXVswXSA9PSAnZicpIHsKCQkJCSsrJG9ial9udW07CgkJCX0gZWxzZSB7CgkJCQkvLyBvYmplY3QgbnVtYmVyIChpbmRleCkKCQkJCSRvYmpfbnVtID0gaW50dmFsKCRtYXRjaGVzWzFdWzBdKTsKCQkJfQoJCX0KCQkvLyBnZXQgdHJhaWxlciBkYXRhCgkJaWYgKHByZWdfbWF0Y2goJy90cmFpbGVyW1xzXSo8PCguKik+Pi9pc1UnLCAkdGhpcy0+cGRmZGF0YSwgJG1hdGNoZXMsIFBSRUdfT0ZGU0VUX0NBUFRVUkUsICRvZmZzZXQpID4gMCkgewoJCQkkdHJhaWxlcl9kYXRhID0gJG1hdGNoZXNbMV1bMF07CgkJCWlmICghaXNzZXQoJHhyZWZbJ3RyYWlsZXInXSkgT1IgZW1wdHkoJHhyZWZbJ3RyYWlsZXInXSkpIHsKCQkJCS8vIGdldCBvbmx5IHRoZSBsYXN0IHVwZGF0ZWQgdmVyc2lvbgoJCQkJJHhyZWZbJ3RyYWlsZXInXSA9IGFycmF5KCk7CgkJCQkvLyBwYXJzZSB0cmFpbGVyX2RhdGEKCQkJCWlmIChwcmVnX21hdGNoKCcvU2l6ZVtcc10rKFswLTldKykvaScsICR0cmFpbGVyX2RhdGEsICRtYXRjaGVzKSA+IDApIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydzaXplJ10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pOwoJCQkJfQoJCQkJaWYgKHByZWdfbWF0Y2goJy9Sb290W1xzXSsoWzAtOV0rKVtcc10rKFswLTldKylbXHNdK1IvaScsICR0cmFpbGVyX2RhdGEsICRtYXRjaGVzKSA+IDApIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydyb290J10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pLidfJy5pbnR2YWwoJG1hdGNoZXNbMl0pOwoJCQkJfQoJCQkJaWYgKHByZWdfbWF0Y2goJy9FbmNyeXB0W1xzXSsoWzAtOV0rKVtcc10rKFswLTldKylbXHNdK1IvaScsICR0cmFpbGVyX2RhdGEsICRtYXRjaGVzKSA+IDApIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydlbmNyeXB0J10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pLidfJy5pbnR2YWwoJG1hdGNoZXNbMl0pOwoJCQkJfQoJCQkJaWYgKHByZWdfbWF0Y2goJy9JbmZvW1xzXSsoWzAtOV0rKVtcc10rKFswLTldKylbXHNdK1IvaScsICR0cmFpbGVyX2RhdGEsICRtYXRjaGVzKSA+IDApIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydpbmZvJ10gPSBpbnR2YWwoJG1hdGNoZXNbMV0pLidfJy5pbnR2YWwoJG1hdGNoZXNbMl0pOwoJCQkJfQoJCQkJaWYgKHByZWdfbWF0Y2goJy9JRFtcc10qW1xbXVtcc10qWzxdKFtePl0qKVs+XVtcc10qWzxdKFtePl0qKVs+XS9pJywgJHRyYWlsZXJfZGF0YSwgJG1hdGNoZXMpID4gMCkgewoJCQkJCSR4cmVmWyd0cmFpbGVyJ11bJ2lkJ10gPSBhcnJheSgpOwoJCQkJCSR4cmVmWyd0cmFpbGVyJ11bJ2lkJ11bMF0gPSAkbWF0Y2hlc1sxXTsKCQkJCQkkeHJlZlsndHJhaWxlciddWydpZCddWzFdID0gJG1hdGNoZXNbMl07CgkJCQl9CgkJCX0KCQkJaWYgKHByZWdfbWF0Y2goJy9QcmV2W1xzXSsoWzAtOV0rKS9pJywgJHRyYWlsZXJfZGF0YSwgJG1hdGNoZXMpID4gMCkgewoJCQkJLy8gZ2V0IHByZXZpb3VzIHhyZWYKCQkJCSR4cmVmID0gJHRoaXMtPmdldFhyZWZEYXRhKGludHZhbCgkbWF0Y2hlc1sxXSksICR4cmVmKTsKCQkJfQoJCX0gZWxzZSB7CgkJCSR0aGlzLT5FcnJvcignVW5hYmxlIHRvIGZpbmQgdHJhaWxlcicpOwoJCX0KCQlyZXR1cm4gJHhyZWY7Cgl9CgoJLyoqCgkgKiBEZWNvZGUgdGhlIENyb3NzLVJlZmVyZW5jZSBTdHJlYW0gc2VjdGlvbgoJICogQHBhcmFtICRzdGFydHhyZWYgKGludCkgT2Zmc2V0IGF0IHdoaWNoIHRoZSB4cmVmIHNlY3Rpb24gc3RhcnRzLgoJICogQHBhcmFtICR4cmVmIChhcnJheSkgUHJldmlvdXMgeHJlZiBhcnJheSAoaWYgYW55KS4KCSAqIEByZXR1cm4gQXJyYXkgY29udGFpbmluZyB4cmVmIGFuZCB0cmFpbGVyIGRhdGEuCgkgKiBAcHJvdGVjdGVkCgkgKiBAc2luY2UgMS4wLjAwMyAoMjAxMy0wMy0xNikKCSAqLwoJcHJvdGVjdGVkIGZ1bmN0aW9uIGRlY29kZVhyZWZTdHJlYW0oJHN0YXJ0eHJlZiwgJHhyZWY9YXJyYXkoKSkgewoJCS8vIHRyeSB0byByZWFkIENyb3NzLVJlZmVyZW5jZSBTdHJlYW0KCQkkeHJlZm9iaiA9ICR0aGlzLT5nZXRSYXdPYmplY3QoJHN0YXJ0eHJlZik7CgkJJHhyZWZjcnMgPSAkdGhpcy0+Z2V0SW5kaXJlY3RPYmplY3QoJHhyZWZvYmpbMV0sICRzdGFydHhyZWYsIHRydWUpOwoJCWlmICghaXNzZXQoJHhyZWZbJ3RyYWlsZXInXSkgT1IgZW1wdHkoJHhyZWZbJ3RyYWlsZXInXSkpIHsKCQkJLy8gZ2V0IG9ubHkgdGhlIGxhc3QgdXBkYXRlZCB2ZXJzaW9uCgkJCSR4cmVmWyd0cmFpbGVyJ10gPSBhcnJheSgpOwoJCQkkZmlsbHRyYWlsZXIgPSB0cnVlOwoJCX0gZWxzZSB7CgkJCSRmaWxsdHJhaWxlciA9IGZhbHNlOwoJCX0KCQlpZiAoIWlzc2V0KCR4cmVmWyd4cmVmJ10pKSB7CgkJCSR4cmVmWyd4cmVmJ10gPSBhcnJheSgpOwoJCX0KCQkkdmFsaWRfY3JzID0gZmFsc2U7CgkJJGNvbHVtbnMgPSAwOwoJCSRzYXJyID0gJHhyZWZjcnNbMF1bMV07CgkJZm9yZWFjaCAoJHNhcnIgYXMgJGsgPT4gJHYpIHsKCQkJaWYgKCgkdlswXSA9PSAnLycpIEFORCAoJHZbMV0gPT0gJ1R5cGUnKSBBTkQgKGlzc2V0KCRzYXJyWygkayArMSldKSBBTkQgKCRzYXJyWygkayArMSldWzBdID09ICcvJykgQU5EICgkc2FyclsoJGsgKzEpXVsxXSA9PSAnWFJlZicpKSkgewoJCQkJJHZhbGlkX2NycyA9IHRydWU7CgkJCX0gZWxzZWlmICgoJHZbMF0gPT0gJy8nKSBBTkQgKCR2WzFdID09ICdJbmRleCcpIEFORCAoaXNzZXQoJHNhcnJbKCRrICsxKV0pKSkgewoJCQkJLy8gZmlyc3Qgb2JqZWN0IG51bWJlciBpbiB0aGUgc3Vic2VjdGlvbgoJCQkJJGluZGV4X2ZpcnN0ID0gaW50dmFsKCRzYXJyWygkayArMSldWzFdWzBdWzFdKTsKCQkJCS8vIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzdWJzZWN0aW9uCgkJCQkkaW5kZXhfZW50cmllcyA9IGludHZhbCgkc2FyclsoJGsgKzEpXVsxXVsxXVsxXSk7CgkJCX0gZWxzZWlmICgoJHZbMF0gPT0gJy8nKSBBTkQgKCR2WzFdID09ICdQcmV2JykgQU5EIChpc3NldCgkc2FyclsoJGsgKzEpXSkgQU5EICgkc2FyclsoJGsgKzEpXVswXSA9PSAnbnVtZXJpYycpKSkgewoJCQkJLy8gZ2V0IHByZXZpb3VzIHhyZWYgb2Zmc2V0CgkJCQkkcHJldnhyZWYgPSBpbnR2YWwoJHNhcnJbKCRrICsxKV1bMV0pOwoJCQl9IGVsc2VpZiAoKCR2WzBdID09ICcvJykgQU5EICgkdlsxXSA9PSAnVycpIEFORCAoaXNzZXQoJHNhcnJbKCRrICsxKV0pKSkgewoJCQkJLy8gbnVtYmVyIG9mIGJ5dGVzIChpbiB0aGUgZGVjb2RlZCBzdHJlYW0pIG9mIHRoZSBjb3JyZXNwb25kaW5nIGZpZWxkCgkJCQkkd2IgPSBhcnJheSgpOwoJCQkJJHdiWzBdID0gaW50dmFsKCRzYXJyWygkayArMSldWzFdWzBdWzFdKTsKCQkJCSR3YlsxXSA9IGludHZhbCgkc2FyclsoJGsgKzEpXVsxXVsxXVsxXSk7CgkJCQkkd2JbMl0gPSBpbnR2YWwoJHNhcnJbKCRrICsxKV1bMV1bMl1bMV0pOwoJCQl9IGVsc2VpZiAoKCR2WzBdID09ICcvJykgQU5EICgkdlsxXSA9PSAnRGVjb2RlUGFybXMnKSBBTkQgKGlzc2V0KCRzYXJyWygkayArMSldWzFdKSkpIHsKCQkJCSRkZWNwYXIgPSAkc2FyclsoJGsgKzEpXVsxXTsKCQkJCWZvcmVhY2ggKCRkZWNwYXIgYXMgJGtkYyA9PiAkdmRjKSB7CgkJCQkJaWYgKCgkdmRjWzBdID09ICcvJykgQU5EICgkdmRjWzFdID09ICdDb2x1bW5zJykgQU5EIChpc3NldCgkZGVjcGFyWygka2RjICsxKV0pIEFORCAoJGRlY3BhclsoJGtkYyArMSldWzBdID09ICdudW1lcmljJykpKSB7CgkJCQkJCSRjb2x1bW5zID0gaW50dmFsKCRkZWNwYXJbKCRrZGMgKzEpXVsxXSk7CgkJCQkJfSBlbHNlaWYgKCgkdmRjWzBdID09ICcvJykgQU5EICgkdmRjWzFdID09ICdQcmVkaWN0b3InKSBBTkQgKGlzc2V0KCRkZWNwYXJbKCRrZGMgKzEpXSkgQU5EICgkZGVjcGFyWygka2RjICsxKV1bMF0gPT0gJ251bWVyaWMnKSkpIHsKCQkJCQkJJHByZWRpY3RvciA9IGludHZhbCgkZGVjcGFyWygka2RjICsxKV1bMV0pOwoJCQkJCX0KCQkJCX0KCQkJfSBlbHNlaWYgKCRmaWxsdHJhaWxlcikgewoJCQkJaWYgKCgkdlswXSA9PSAnLycpIEFORCAoJHZbMV0gPT0gJ1NpemUnKSBBTkQgKGlzc2V0KCRzYXJyWygkayArMSldKSBBTkQgKCRzYXJyWygkayArMSldWzBdID09ICdudW1lcmljJykpKSB7CgkJCQkJJHhyZWZbJ3RyYWlsZXInXVsnc2l6ZSddID0gJHNhcnJbKCRrICsxKV1bMV07CgkJCQl9IGVsc2VpZiAoKCR2WzBdID09ICcvJykgQU5EICgkdlsxXSA9PSAnUm9vdCcpIEFORCAoaXNzZXQoJHNhcnJbKCRrICsxKV0pIEFORCAoJHNhcnJbKCRrICsxKV1bMF0gPT0gJ29ianJlZicpKSkgewoJCQkJCSR4cmVmWyd0cmFpbGVyJ11bJ3Jvb3QnXSA9ICRzYXJyWygkayArMSldWzFdOwoJCQkJfSBlbHNlaWYgKCgkdlswXSA9PSAnLycpIEFORCAoJHZbMV0gPT0gJ0luZm8nKSBBTkQgKGlzc2V0KCRzYXJyWygkayArMSldKSBBTkQgKCRzYXJyWygkayArMSldWzBdID09ICdvYmpyZWYnKSkpIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydpbmZvJ10gPSAkc2FyclsoJGsgKzEpXVsxXTsKCQkJCX0gZWxzZWlmICgoJHZbMF0gPT0gJy8nKSBBTkQgKCR2WzFdID09ICdFbmNyeXB0JykgQU5EIChpc3NldCgkc2FyclsoJGsgKzEpXSkgQU5EICgkc2FyclsoJGsgKzEpXVswXSA9PSAnb2JqcmVmJykpKSB7CgkJCQkJJHhyZWZbJ3RyYWlsZXInXVsnZW5jcnlwdCddID0gJHNhcnJbKCRrICsxKV1bMV07CgkJCQl9IGVsc2VpZiAoKCR2WzBdID09ICcvJykgQU5EICgkdlsxXSA9PSAnSUQnKSBBTkQgKGlzc2V0KCRzYXJyWygkayArMSldKSkpIHsKCQkJCQkkeHJlZlsndHJhaWxlciddWydpZCddID0gYXJyYXkoKTsKCQkJCQkkeHJlZlsndHJhaWxlciddWydpZCddWzBdID0gJHNhcnJbKCRrICsxKV1bMV1bMF1bMV07CgkJCQkJJHhyZWZbJ3RyYWlsZXInXVsnaWQnXVsxXSA9ICRzYXJyWygkayArMSldWzFdWzFdWzFdOwoJCQkJfQoJCQl9CgkJfQoJCS8vIGRlY29kZSBkYXRhCgkJaWYgKCR2YWxpZF9jcnMgQU5EIGlzc2V0KCR4cmVmY3JzWzFdWzNdWzBdKSkgewoJCQkvLyBudW1iZXIgb2YgYnl0ZXMgaW4gYSByb3cKCQkJJHJvd2xlbiA9ICgkY29sdW1ucyArIDEpOwoJCQkvLyBjb252ZXJ0IHRoZSBzdHJlYW0gaW50byBhbiBhcnJheSBvZiBpbnRlZ2VycwoJCQkkc2RhdGEgPSB1bnBhY2soJ0MqJywgJHhyZWZjcnNbMV1bM11bMF0pOwoJCQkvLyBzcGxpdCB0aGUgcm93cwoJCQkkc2RhdGEgPSBhcnJheV9jaHVuaygkc2RhdGEsICRyb3dsZW4pOwoJCQkvLyBpbml0aWFsaXplIGRlY29kZWQgYXJyYXkKCQkJJGRkYXRhID0gYXJyYXkoKTsKCQkJLy8gaW5pdGlhbGl6ZSBmaXJzdCByb3cgd2l0aCB6ZXJvcwoJCQkkcHJldl9yb3cgPSBhcnJheV9maWxsICgwLCAkcm93bGVuLCAwKTsKCQkJLy8gZm9yIGVhY2ggcm93IGFwcGx5IFBORyB1bnByZWRpY3RvcgoJCQlmb3JlYWNoICgkc2RhdGEgYXMgJGsgPT4gJHJvdykgewoJCQkJLy8gaW5pdGlhbGl6ZSBuZXcgcm93CgkJCQkkZGRhdGFbJGtdID0gYXJyYXkoKTsKCQkJCS8vIGdldCBQTkcgcHJlZGljdG9yIHZhbHVlCgkJCQkkcHJlZGljdG9yID0gKDEwICsgJHJvd1swXSk7CgkJCQkvLyBmb3IgZWFjaCBieXRlIG9uIHRoZSByb3cKCQkJCWZvciAoJGk9MTsgJGk8PSRjb2x1bW5zOyArKyRpKSB7CgkJCQkJLy8gbmV3IGluZGV4CgkJCQkJJGogPSAoJGkgLSAxKTsKCQkJCQkkcm93X3VwID0gJHByZXZfcm93WyRqXTsKCQkJCQlpZiAoJGkgPT0gMSkgewoJCQkJCQkkcm93X2xlZnQgPSAwOwoJCQkJCQkkcm93X3VwbGVmdCA9IDA7CgkJCQkJfSBlbHNlIHsKCQkJCQkJJHJvd19sZWZ0ID0gJHJvd1soJGkgLSAxKV07CgkJCQkJCSRyb3dfdXBsZWZ0ID0gJHByZXZfcm93WygkaiAtIDEpXTsKCQkJCQl9CgkJCQkJc3dpdGNoICgkcHJlZGljdG9yKSB7CgkJCQkJCWNhc2UgMTA6IHsgLy8gUE5HIHByZWRpY3Rpb24gKG9uIGVuY29kaW5nLCBQTkcgTm9uZSBvbiBhbGwgcm93cykKCQkJCQkJCSRkZGF0YVska11bJGpdID0gJHJvd1skaV07CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCQljYXNlIDExOiB7IC8vIFBORyBwcmVkaWN0aW9uIChvbiBlbmNvZGluZywgUE5HIFN1YiBvbiBhbGwgcm93cykKCQkJCQkJCSRkZGF0YVska11bJGpdID0gKCgkcm93WyRpXSArICRyb3dfbGVmdCkgJiAweGZmKTsKCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWNhc2UgMTI6IHsgLy8gUE5HIHByZWRpY3Rpb24gKG9uIGVuY29kaW5nLCBQTkcgVXAgb24gYWxsIHJvd3MpCgkJCQkJCQkkZGRhdGFbJGtdWyRqXSA9ICgoJHJvd1skaV0gKyAkcm93X3VwKSAmIDB4ZmYpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAxMzogeyAvLyBQTkcgcHJlZGljdGlvbiAob24gZW5jb2RpbmcsIFBORyBBdmVyYWdlIG9uIGFsbCByb3dzKQoJCQkJCQkJJGRkYXRhWyRrXVskal0gPSAoKCRyb3dbJGldICsgKCgkcm93X2xlZnQgKyAkcm93X3VwKSAvIDIpKSAmIDB4ZmYpOwoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJY2FzZSAxNDogeyAvLyBQTkcgcHJlZGljdGlvbiAob24gZW5jb2RpbmcsIFBORyBQYWV0aCBvbiBhbGwgcm93cykKCQkJCQkJCS8vIGluaXRpYWwgZXN0aW1hdGUKCQkJCQkJCSRwID0gKCRyb3dfbGVmdCArICRyb3dfdXAgLSAkcm93X3VwbGVmdCk7CgkJCQkJCQkvLyBkaXN0YW5jZXMKCQkJCQkJCSRwYSA9IGFicygkcCAtICRyb3dfbGVmdCk7CgkJCQkJCQkkcGIgPSBhYnMoJHAgLSAkcm93X3VwKTsKCQkJCQkJCSRwYyA9IGFicygkcCAtICRyb3dfdXBsZWZ0KTsKCQkJCQkJCSRwbWluID0gbWluKCRwYSwgJHBiLCAkcGMpOwoJCQkJCQkJLy8gcmV0dXJuIG1pbnVtdW0gZGlzdGFuY2UKCQkJCQkJCXN3aXRjaCAoJHBtaW4pIHsKCQkJCQkJCQljYXNlICRwYTogewoJCQkJCQkJCQkkZGRhdGFbJGtdWyRqXSA9ICgoJHJvd1skaV0gKyAkcm93X2xlZnQpICYgMHhmZik7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCQkJCQkJCQljYXNlICRwYjogewoJCQkJCQkJCQkkZGRhdGFbJGtdWyRqXSA9ICgoJHJvd1skaV0gKyAkcm93X3VwKSAmIDB4ZmYpOwoJCQkJCQkJCQlicmVhazsKCQkJCQkJCQl9CgkJCQkJCQkJY2FzZSAkcGM6IHsKCQkJCQkJCQkJJGRkYXRhWyRrXVskal0gPSAoKCRyb3dbJGldICsgJHJvd191cGxlZnQpICYgMHhmZik7CgkJCQkJCQkJCWJyZWFrOwoJCQkJCQkJCX0KCQkJCQkJCX0KCQkJCQkJCWJyZWFrOwoJCQkJCQl9CgkJCQkJCWRlZmF1bHQ6IHsgLy8gUE5HIHByZWRpY3Rpb24gKG9uIGVuY29kaW5nLCBQTkcgb3B0aW11bSkKCQkJCQkJCSR0aGlzLT5FcnJvcignVW5rbm93biBQTkcgcHJlZGljdG9yJyk7CgkJCQkJCQlicmVhazsKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJCSRwcmV2X3JvdyA9ICRkZGF0YVska107CgkJCX0gLy8gZW5kIGZvciBlYWNoIHJvdwoJCQkvLyBjb21wbGV0ZSBkZWNvZGluZwoJCQkkc2RhdGEgPSBhcnJheSgpOwoJCQkvLyBmb3IgZXZlcnkgcm93CgkJCWZvcmVhY2ggKCRkZGF0YSBhcyAkayA9PiAkcm93KSB7CgkJCQkvLyBpbml0aWFsaXplIG5ldyByb3cKCQkJCSRzZGF0YVska10gPSBhcnJheSgwLCAwLCAwKTsKCQkJCWlmICgkd2JbMF0gPT0gMCkgewoJCQkJCS8vIGRlZmF1bHQgdHlwZSBmaWVsZAoJCQkJCSRzZGF0YVska11bMF0gPSAxOwoJCQkJfQoJCQkJJGkgPSAwOyAvLyBjb3VudCBieXRlcyBpbiB0aGUgcm93CgkJCQkvLyBmb3IgZXZlcnkgY29sdW1uCgkJCQlmb3IgKCRjID0gMDsgJGMgPCAzOyArKyRjKSB7CgkJCQkJLy8gZm9yIGV2ZXJ5IGJ5dGUgb24gdGhlIGNvbHVtbgoJCQkJCWZvciAoJGIgPSAwOyAkYiA8ICR3YlskY107ICsrJGIpIHsKCQkJCQkJaWYgKGlzc2V0KCRyb3dbJGldKSkgewoJCQkJCQkJJHNkYXRhWyRrXVskY10gKz0gKCRyb3dbJGldIDw8ICgoJHdiWyRjXSAtIDEgLSAkYikgKiA4KSk7CgkJCQkJCX0KCQkJCQkJKyskaTsKCQkJCQl9CgkJCQl9CgkJCX0KCQkJJGRkYXRhID0gYXJyYXkoKTsKCQkJLy8gZmlsbCB4cmVmCgkJCWlmIChpc3NldCgkaW5kZXhfZmlyc3QpKSB7CgkJCQkkb2JqX251bSA9ICRpbmRleF9maXJzdDsKCQkJfSBlbHNlIHsKCQkJCSRvYmpfbnVtID0gMDsKCQkJfQoJCQlmb3JlYWNoICgkc2RhdGEgYXMgJGsgPT4gJHJvdykgewoJCQkJc3dpdGNoICgkcm93WzBdKSB7CgkJCQkJY2FzZSAwOiB7IC8vIChmKSBsaW5rZWQgbGlzdCBvZiBmcmVlIG9iamVjdHMKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJCWNhc2UgMTogeyAvLyAobikgb2JqZWN0cyB0aGF0IGFyZSBpbiB1c2UgYnV0IGFyZSBub3QgY29tcHJlc3NlZAoJCQkJCQkvLyBjcmVhdGUgdW5pcXVlIG9iamVjdCBpbmRleDogW29iamVjdCBudW1iZXJdX1tnZW5lcmF0aW9uIG51bWJlcl0KCQkJCQkJJGluZGV4ID0gJG9ial9udW0uJ18nLiRyb3dbMl07CgkJCQkJCS8vIGNoZWNrIGlmIG9iamVjdCBhbHJlYWR5IGV4aXN0CgkJCQkJCWlmICghaXNzZXQoJHhyZWZbJ3hyZWYnXVskaW5kZXhdKSkgewoJCQkJCQkJLy8gc3RvcmUgb2JqZWN0IG9mZnNldCBwb3NpdGlvbgoJCQkJCQkJJHhyZWZbJ3hyZWYnXVskaW5kZXhdID0gJHJvd1sxXTsKCQkJCQkJfQoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJY2FzZSAyOiB7IC8vIGNvbXByZXNzZWQgb2JqZWN0cwoJCQkJCQkvLyAkcm93WzFdID0gb2JqZWN0IG51bWJlciBvZiB0aGUgb2JqZWN0IHN0cmVhbSBpbiB3aGljaCB0aGlzIG9iamVjdCBpcyBzdG9yZWQKCQkJCQkJLy8gJHJvd1syXSA9IGluZGV4IG9mIHRoaXMgb2JqZWN0IHdpdGhpbiB0aGUgb2JqZWN0IHN0cmVhbQoJCQkJCQkkaW5kZXggPSAkcm93WzFdLidfMF8nLiRyb3dbMl07CgkJCQkJCSR4cmVmWyd4cmVmJ11bJGluZGV4XSA9IC0xOwoJCQkJCQlicmVhazsKCQkJCQl9CgkJCQkJZGVmYXVsdDogeyAvLyBudWxsIG9iamVjdHMKCQkJCQkJYnJlYWs7CgkJCQkJfQoJCQkJfQoJCQkJKyskb2JqX251bTsKCQkJfQoJCX0gLy8gZW5kIGRlY29kaW5nIGRhdGEKCQlpZiAoaXNzZXQoJHByZXZ4cmVmKSkgewoJCQkvLyBnZXQgcHJldmlvdXMgeHJlZgoJCQkkeHJlZiA9ICR0aGlzLT5nZXRYcmVmRGF0YSgkcHJldnhyZWYsICR4cmVmKTsKCQl9CgkJcmV0dXJuICR4cmVmOwoJfQoKCS8qKgoJICogR2V0IG9iamVjdCB0eXBlLCByYXcgdmFsdWUgYW5kIG9mZnNldCB0byBuZXh0IG9iamVjdAoJICogQHBhcmFtICRvZmZzZXQgKGludCkgT2JqZWN0IG9mZnNldC4KCSAqIEByZXR1cm4gYXJyYXkgY29udGFpbmluZyBvYmplY3QgdHlwZSwgcmF3IHZhbHVlIGFuZCBvZmZzZXQgdG8gbmV4dCBvYmplY3QKCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA2LTIwKQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0UmF3T2JqZWN0KCRvZmZzZXQ9MCkgewoJCSRvYmp0eXBlID0gJyc7IC8vIG9iamVjdCB0eXBlIHRvIGJlIHJldHVybmVkCgkJJG9ianZhbCA9ICcnOyAvLyBvYmplY3QgdmFsdWUgdG8gYmUgcmV0dXJuZWQKCQkvLyBza2lwIGluaXRpYWwgd2hpdGUgc3BhY2UgY2hhcnM6IFx4MDAgbnVsbCAoTlVMKSwgXHgwOSBob3Jpem9udGFsIHRhYiAoSFQpLCBceDBBIGxpbmUgZmVlZCAoTEYpLCBceDBDIGZvcm0gZmVlZCAoRkYpLCBceDBEIGNhcnJpYWdlIHJldHVybiAoQ1IpLCBceDIwIHNwYWNlIChTUCkKCQkkb2Zmc2V0ICs9IHN0cnNwbigkdGhpcy0+cGRmZGF0YSwgIlx4MDBceDA5XHgwYVx4MGNceDBkXHgyMCIsICRvZmZzZXQpOwoJCS8vIGdldCBmaXJzdCBjaGFyCgkJJGNoYXIgPSAkdGhpcy0+cGRmZGF0YVskb2Zmc2V0XTsKCQkvLyBnZXQgb2JqZWN0IHR5cGUKCQlzd2l0Y2ggKCRjaGFyKSB7CgkJCWNhc2UgJyUnOiB7IC8vIFx4MjUgUEVSQ0VOVCBTSUdOCgkJCQkvLyBza2lwIGNvbW1lbnQgYW5kIHNlYXJjaCBmb3IgbmV4dCB0b2tlbgoJCQkJJG5leHQgPSBzdHJjc3BuKCR0aGlzLT5wZGZkYXRhLCAiXHJcbiIsICRvZmZzZXQpOwoJCQkJaWYgKCRuZXh0ID4gMCkgewoJCQkJCSRvZmZzZXQgKz0gJG5leHQ7CgkJCQkJcmV0dXJuICR0aGlzLT5nZXRSYXdPYmplY3QoJG9mZnNldCk7CgkJCQl9CgkJCQlicmVhazsKCQkJfQoJCQljYXNlICcvJzogeyAvLyBceDJGIFNPTElEVVMKCQkJCS8vIG5hbWUgb2JqZWN0CgkJCQkkb2JqdHlwZSA9ICRjaGFyOwoJCQkJKyskb2Zmc2V0OwoJCQkJaWYgKHByZWdfbWF0Y2goJy9eKFteXHgwMFx4MDlceDBhXHgwY1x4MGRceDIwXHNceDI4XHgyOVx4M2NceDNlXHg1Ylx4NWRceDdiXHg3ZFx4MmZceDI1XSspLycsIHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCwgMjU2KSwgJG1hdGNoZXMpID09IDEpIHsKCQkJCQkkb2JqdmFsID0gJG1hdGNoZXNbMV07IC8vIHVuZXNjYXBlZCB2YWx1ZQoJCQkJCSRvZmZzZXQgKz0gc3RybGVuKCRvYmp2YWwpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnKCc6ICAgLy8gXHgyOCBMRUZUIFBBUkVOVEhFU0lTCgkJCWNhc2UgJyknOiB7IC8vIFx4MjkgUklHSFQgUEFSRU5USEVTSVMKCQkJCS8vIGxpdGVyYWwgc3RyaW5nIG9iamVjdAoJCQkJJG9ianR5cGUgPSAkY2hhcjsKCQkJCSsrJG9mZnNldDsKCQkJCSRzdHJwb3MgPSAkb2Zmc2V0OwoJCQkJaWYgKCRjaGFyID09ICcoJykgewoJCQkJCSRvcGVuX2JyYWNrZXQgPSAxOwoJCQkJCXdoaWxlICgkb3Blbl9icmFja2V0ID4gMCkgewoJCQkJCQlpZiAoIWlzc2V0KCR0aGlzLT5wZGZkYXRheyRzdHJwb3N9KSkgewoJCQkJCQkJYnJlYWs7CgkJCQkJCX0KCQkJCQkJJGNoID0gJHRoaXMtPnBkZmRhdGF7JHN0cnBvc307CgkJCQkJCXN3aXRjaCAoJGNoKSB7CgkJCQkJCQljYXNlICdcXCc6IHsgLy8gUkVWRVJTRSBTT0xJRFVTICg1Q2gpIChCYWNrc2xhc2gpCgkJCQkJCQkJLy8gc2tpcCBuZXh0IGNoYXJhY3RlcgoJCQkJCQkJCSsrJHN0cnBvczsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJCWNhc2UgJygnOiB7IC8vIExFRlQgUEFSRU5IRVNJUyAoMjhoKQoJCQkJCQkJCSsrJG9wZW5fYnJhY2tldDsKCQkJCQkJCQlicmVhazsKCQkJCQkJCX0KCQkJCQkJCWNhc2UgJyknOiB7IC8vIFJJR0hUIFBBUkVOVEhFU0lTICgyOWgpCgkJCQkJCQkJLS0kb3Blbl9icmFja2V0OwoJCQkJCQkJCWJyZWFrOwoJCQkJCQkJfQoJCQkJCQl9CgkJCQkJCSsrJHN0cnBvczsKCQkJCQl9CgkJCQkJJG9ianZhbCA9IHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCwgKCRzdHJwb3MgLSAkb2Zmc2V0IC0gMSkpOwoJCQkJCSRvZmZzZXQgPSAkc3RycG9zOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnWyc6ICAgLy8gXHg1QiBMRUZUIFNRVUFSRSBCUkFDS0VUCgkJCWNhc2UgJ10nOiB7IC8vIFx4NUQgUklHSFQgU1FVQVJFIEJSQUNLRVQKCQkJCS8vIGFycmF5IG9iamVjdAoJCQkJJG9ianR5cGUgPSAkY2hhcjsKCQkJCSsrJG9mZnNldDsKCQkJCWlmICgkY2hhciA9PSAnWycpIHsKCQkJCQkvLyBnZXQgYXJyYXkgY29udGVudAoJCQkJCSRvYmp2YWwgPSBhcnJheSgpOwoJCQkJCWRvIHsKCQkJCQkJLy8gZ2V0IGVsZW1lbnQKCQkJCQkJJGVsZW1lbnQgPSAkdGhpcy0+Z2V0UmF3T2JqZWN0KCRvZmZzZXQpOwoJCQkJCQkkb2Zmc2V0ID0gJGVsZW1lbnRbMl07CgkJCQkJCSRvYmp2YWxbXSA9ICRlbGVtZW50OwoJCQkJCX0gd2hpbGUgKCRlbGVtZW50WzBdICE9ICddJyk7CgkJCQkJLy8gcmVtb3ZlIGNsb3NpbmcgZGVsaW1pdGVyCgkJCQkJYXJyYXlfcG9wKCRvYmp2YWwpOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJY2FzZSAnPCc6ICAgLy8gXHgzQyBMRVNTLVRIQU4gU0lHTgoJCQljYXNlICc+JzogeyAvLyBceDNFIEdSRUFURVItVEhBTiBTSUdOCgkJCQlpZiAoaXNzZXQoJHRoaXMtPnBkZmRhdGF7KCRvZmZzZXQgKyAxKX0pIEFORCAoJHRoaXMtPnBkZmRhdGF7KCRvZmZzZXQgKyAxKX0gPT0gJGNoYXIpKSB7CgkJCQkJLy8gZGljdGlvbmFyeSBvYmplY3QKCQkJCQkkb2JqdHlwZSA9ICRjaGFyLiRjaGFyOwoJCQkJCSRvZmZzZXQgKz0gMjsKCQkJCQlpZiAoJGNoYXIgPT0gJzwnKSB7CgkJCQkJCS8vIGdldCBhcnJheSBjb250ZW50CgkJCQkJCSRvYmp2YWwgPSBhcnJheSgpOwoJCQkJCQlkbyB7CgkJCQkJCQkvLyBnZXQgZWxlbWVudAoJCQkJCQkJJGVsZW1lbnQgPSAkdGhpcy0+Z2V0UmF3T2JqZWN0KCRvZmZzZXQpOwoJCQkJCQkJJG9mZnNldCA9ICRlbGVtZW50WzJdOwoJCQkJCQkJJG9ianZhbFtdID0gJGVsZW1lbnQ7CgkJCQkJCX0gd2hpbGUgKCRlbGVtZW50WzBdICE9ICc+PicpOwoJCQkJCQkvLyByZW1vdmUgY2xvc2luZyBkZWxpbWl0ZXIKCQkJCQkJYXJyYXlfcG9wKCRvYmp2YWwpOwoJCQkJCX0KCQkJCX0gZWxzZSB7CgkJCQkJLy8gaGV4YWRlY2ltYWwgc3RyaW5nIG9iamVjdAoJCQkJCSRvYmp0eXBlID0gJGNoYXI7CgkJCQkJKyskb2Zmc2V0OwoJCQkJCWlmICgoJGNoYXIgPT0gJzwnKSBBTkQgKHByZWdfbWF0Y2goJy9eKFswLTlBLUZhLWZceDA5XHgwYVx4MGNceDBkXHgyMF0rKT4vaVUnLCBzdWJzdHIoJHRoaXMtPnBkZmRhdGEsICRvZmZzZXQpLCAkbWF0Y2hlcykgPT0gMSkpIHsKCQkJCQkJLy8gcmVtb3ZlIHdoaXRlIHNwYWNlIGNoYXJhY3RlcnMKCQkJCQkJJG9ianZhbCA9IHN0cnRyKCRtYXRjaGVzWzFdLCAiXHgwOVx4MGFceDBjXHgwZFx4MjAiLCAnJyk7CgkJCQkJCSRvZmZzZXQgKz0gc3RybGVuKCRtYXRjaGVzWzBdKTsKCQkJCQl9IGVsc2VpZiAoKCRlbmRwb3MgPSBzdHJwb3MoJHRoaXMtPnBkZmRhdGEsICc+JywgJG9mZnNldCkpICE9PSBGQUxTRSkgewoJCQkJCQkkb2Zmc2V0ID0gJGVuZHBvcyArIDE7CiAgICAgICAgICAgICAgICAgICAgfQoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQkJZGVmYXVsdDogewoJCQkJaWYgKHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCwgNikgPT0gJ2VuZG9iaicpIHsKCQkJCQkvLyBpbmRpcmVjdCBvYmplY3QKCQkJCQkkb2JqdHlwZSA9ICdlbmRvYmonOwoJCQkJCSRvZmZzZXQgKz0gNjsKCQkJCX0gZWxzZWlmIChzdWJzdHIoJHRoaXMtPnBkZmRhdGEsICRvZmZzZXQsIDQpID09ICdudWxsJykgewoJCQkJCS8vIG51bGwgb2JqZWN0CgkJCQkJJG9ianR5cGUgPSAnbnVsbCc7CgkJCQkJJG9mZnNldCArPSA0OwoJCQkJCSRvYmp2YWwgPSAnbnVsbCc7CgkJCQl9IGVsc2VpZiAoc3Vic3RyKCR0aGlzLT5wZGZkYXRhLCAkb2Zmc2V0LCA0KSA9PSAndHJ1ZScpIHsKCQkJCQkvLyBib29sZWFuIHRydWUgb2JqZWN0CgkJCQkJJG9ianR5cGUgPSAnYm9vbGVhbic7CgkJCQkJJG9mZnNldCArPSA0OwoJCQkJCSRvYmp2YWwgPSAndHJ1ZSc7CgkJCQl9IGVsc2VpZiAoc3Vic3RyKCR0aGlzLT5wZGZkYXRhLCAkb2Zmc2V0LCA1KSA9PSAnZmFsc2UnKSB7CgkJCQkJLy8gYm9vbGVhbiBmYWxzZSBvYmplY3QKCQkJCQkkb2JqdHlwZSA9ICdib29sZWFuJzsKCQkJCQkkb2Zmc2V0ICs9IDU7CgkJCQkJJG9ianZhbCA9ICdmYWxzZSc7CgkJCQl9IGVsc2VpZiAoc3Vic3RyKCR0aGlzLT5wZGZkYXRhLCAkb2Zmc2V0LCA2KSA9PSAnc3RyZWFtJykgewoJCQkJCS8vIHN0YXJ0IHN0cmVhbSBvYmplY3QKCQkJCQkkb2JqdHlwZSA9ICdzdHJlYW0nOwoJCQkJCSRvZmZzZXQgKz0gNjsKCQkJCQlpZiAocHJlZ19tYXRjaCgnL14oW1xyXT9bXG5dKS9pc1UnLCBzdWJzdHIoJHRoaXMtPnBkZmRhdGEsICRvZmZzZXQpLCAkbWF0Y2hlcykgPT0gMSkgewoJCQkJCQkkb2Zmc2V0ICs9IHN0cmxlbigkbWF0Y2hlc1swXSk7CgkJCQkJCWlmIChwcmVnX21hdGNoKCcvKGVuZHN0cmVhbSlbXHgwOVx4MGFceDBjXHgwZFx4MjBdL2lzVScsIHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCksICRtYXRjaGVzLCBQUkVHX09GRlNFVF9DQVBUVVJFKSA9PSAxKSB7CgkJCQkJCQkkb2JqdmFsID0gc3Vic3RyKCR0aGlzLT5wZGZkYXRhLCAkb2Zmc2V0LCAkbWF0Y2hlc1swXVsxXSk7CgkJCQkJCQkkb2Zmc2V0ICs9ICRtYXRjaGVzWzFdWzFdOwoJCQkJCQl9CgkJCQkJfQoJCQkJfSBlbHNlaWYgKHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCwgOSkgPT0gJ2VuZHN0cmVhbScpIHsKCQkJCQkvLyBlbmQgc3RyZWFtIG9iamVjdAoJCQkJCSRvYmp0eXBlID0gJ2VuZHN0cmVhbSc7CgkJCQkJJG9mZnNldCArPSA5OwoJCQkJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eKFswLTldKylbXHNdKyhbMC05XSspW1xzXStSL2lVJywgc3Vic3RyKCR0aGlzLT5wZGZkYXRhLCAkb2Zmc2V0LCAzMyksICRtYXRjaGVzKSA9PSAxKSB7CgkJCQkJLy8gaW5kaXJlY3Qgb2JqZWN0IHJlZmVyZW5jZQoJCQkJCSRvYmp0eXBlID0gJ29ianJlZic7CgkJCQkJJG9mZnNldCArPSBzdHJsZW4oJG1hdGNoZXNbMF0pOwoJCQkJCSRvYmp2YWwgPSBpbnR2YWwoJG1hdGNoZXNbMV0pLidfJy5pbnR2YWwoJG1hdGNoZXNbMl0pOwoJCQkJfSBlbHNlaWYgKHByZWdfbWF0Y2goJy9eKFswLTldKylbXHNdKyhbMC05XSspW1xzXStvYmovaVUnLCBzdWJzdHIoJHRoaXMtPnBkZmRhdGEsICRvZmZzZXQsIDMzKSwgJG1hdGNoZXMpID09IDEpIHsKCQkJCQkvLyBvYmplY3Qgc3RhcnQKCQkJCQkkb2JqdHlwZSA9ICdvYmonOwoJCQkJCSRvYmp2YWwgPSBpbnR2YWwoJG1hdGNoZXNbMV0pLidfJy5pbnR2YWwoJG1hdGNoZXNbMl0pOwoJCQkJCSRvZmZzZXQgKz0gc3RybGVuICgkbWF0Y2hlc1swXSk7CgkJCQl9IGVsc2VpZiAoKCRudW1sZW4gPSBzdHJzcG4oJHRoaXMtPnBkZmRhdGEsICcrLS4wMTIzNDU2Nzg5JywgJG9mZnNldCkpID4gMCkgewoJCQkJCS8vIG51bWVyaWMgb2JqZWN0CgkJCQkJJG9ianR5cGUgPSAnbnVtZXJpYyc7CgkJCQkJJG9ianZhbCA9IHN1YnN0cigkdGhpcy0+cGRmZGF0YSwgJG9mZnNldCwgJG51bWxlbik7CgkJCQkJJG9mZnNldCArPSAkbnVtbGVuOwoJCQkJfQoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJcmV0dXJuIGFycmF5KCRvYmp0eXBlLCAkb2JqdmFsLCAkb2Zmc2V0KTsKCX0KCgkvKioKCSAqIEdldCBjb250ZW50IG9mIGluZGlyZWN0IG9iamVjdC4KCSAqIEBwYXJhbSAkb2JqX3JlZiAoc3RyaW5nKSBPYmplY3QgbnVtYmVyIGFuZCBnZW5lcmF0aW9uIG51bWJlciBzZXBhcmF0ZWQgYnkgdW5kZXJzY29yZSBjaGFyYWN0ZXIuCgkgKiBAcGFyYW0gJG9mZnNldCAoaW50KSBPYmplY3Qgb2Zmc2V0LgoJICogQHBhcmFtICRkZWNvZGluZyAoYm9vbGVhbikgSWYgdHJ1ZSBkZWNvZGUgc3RyZWFtcy4KCSAqIEByZXR1cm4gYXJyYXkgY29udGFpbmluZyBvYmplY3QgZGF0YS4KCSAqIEBwcm90ZWN0ZWQKCSAqIEBzaW5jZSAxLjAuMDAwICgyMDExLTA1LTI0KQoJICovCglwcm90ZWN0ZWQgZnVuY3Rpb24gZ2V0SW5kaXJlY3RPYmplY3QoJG9ial9yZWYsICRvZmZzZXQ9MCwgJGRlY29kaW5nPXRydWUpIHsKCQkkb2JqID0gZXhwbG9kZSgnXycsICRvYmpfcmVmKTsKCQlpZiAoKCRvYmogPT09IGZhbHNlKSBPUiAoY291bnQoJG9iaikgIT0gMikpIHsKCQkJJHRoaXMtPkVycm9yKCdJbnZhbGlkIG9iamVjdCByZWZlcmVuY2U6ICcuJG9iaik7CgkJCXJldHVybjsKCQl9CgkJJG9ianJlZiA9ICRvYmpbMF0uJyAnLiRvYmpbMV0uJyBvYmonOwoJCS8vIGlnbm9yZSBsZWFkaW5nIHplcm9zCgkJJG9mZnNldCArPSBzdHJzcG4oJHRoaXMtPnBkZmRhdGEsICcwJywgJG9mZnNldCk7CgkJaWYgKHN0cnBvcygkdGhpcy0+cGRmZGF0YSwgJG9ianJlZiwgJG9mZnNldCkgIT0gJG9mZnNldCkgewoJCQkvLyBhbiBpbmRpcmVjdCByZWZlcmVuY2UgdG8gYW4gdW5kZWZpbmVkIG9iamVjdCBzaGFsbCBiZSBjb25zaWRlcmVkIGEgcmVmZXJlbmNlIHRvIHRoZSBudWxsIG9iamVjdAoJCQlyZXR1cm4gYXJyYXkoJ251bGwnLCAnbnVsbCcsICRvZmZzZXQpOwoJCX0KCQkvLyBzdGFydGluZyBwb3NpdGlvbiBvZiBvYmplY3QgY29udGVudAoJCSRvZmZzZXQgKz0gc3RybGVuKCRvYmpyZWYpOwoJCS8vIGdldCBhcnJheSBvZiBvYmplY3QgY29udGVudAoJCSRvYmpkYXRhID0gYXJyYXkoKTsKCQkkaSA9IDA7IC8vIG9iamVjdCBtYWluIGluZGV4CgkJZG8gewoJCQkvLyBnZXQgZWxlbWVudAoJCQkkZWxlbWVudCA9ICR0aGlzLT5nZXRSYXdPYmplY3QoJG9mZnNldCk7CgkJCSRvZmZzZXQgPSAkZWxlbWVudFsyXTsKCQkJLy8gZGVjb2RlIHN0cmVhbSB1c2luZyBzdHJlYW0ncyBkaWN0aW9uYXJ5IGluZm9ybWF0aW9uCgkJCWlmICgkZGVjb2RpbmcgQU5EICgkZWxlbWVudFswXSA9PSAnc3RyZWFtJykgQU5EIChpc3NldCgkb2JqZGF0YVsoJGkgLSAxKV1bMF0pKSBBTkQgKCRvYmpkYXRhWygkaSAtIDEpXVswXSA9PSAnPDwnKSkgewoJCQkJJGVsZW1lbnRbM10gPSAkdGhpcy0+ZGVjb2RlU3RyZWFtKCRvYmpkYXRhWygkaSAtIDEpXVsxXSwgJGVsZW1lbnRbMV0pOwoJCQl9CgkJCSRvYmpkYXRhWyRpXSA9ICRlbGVtZW50OwoJCQkrKyRpOwoJCX0gd2hpbGUgKCRlbGVtZW50WzBdICE9ICdlbmRvYmonKTsKCQkvLyByZW1vdmUgY2xvc2luZyBkZWxpbWl0ZXIKCQlhcnJheV9wb3AoJG9iamRhdGEpOwoJCS8vIHJldHVybiByYXcgb2JqZWN0IGNvbnRlbnQKCQlyZXR1cm4gJG9iamRhdGE7Cgl9CgoJLyoqCgkgKiBHZXQgdGhlIGNvbnRlbnQgb2Ygb2JqZWN0LCByZXNvbHZpbmcgaW5kZWN0IG9iamVjdCByZWZlcmVuY2UgaWYgbmVjZXNzYXJ5LgoJICogQHBhcmFtICRvYmogKHN0cmluZykgT2JqZWN0IHZhbHVlLgoJICogQHJldHVybiBhcnJheSBjb250YWluaW5nIG9iamVjdCBkYXRhLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDYtMjYpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBnZXRPYmplY3RWYWwoJG9iaikgewoJCWlmICgkb2JqWzBdID09ICdvYmpyZWYnKSB7CgkJCS8vIHJlZmVyZW5jZSB0byBpbmRpcmVjdCBvYmplY3QKCQkJaWYgKGlzc2V0KCR0aGlzLT5vYmplY3RzWyRvYmpbMV1dKSkgewoJCQkJLy8gdGhpcyBvYmplY3QgaGFzIGJlZW4gYWxyZWFkeSBwYXJzZWQKCQkJCXJldHVybiAkdGhpcy0+b2JqZWN0c1skb2JqWzFdXTsKCQkJfSBlbHNlaWYgKGlzc2V0KCR0aGlzLT54cmVmWyRvYmpbMV1dKSkgewoJCQkJLy8gcGFyc2UgbmV3IG9iamVjdAoJCQkJJHRoaXMtPm9iamVjdHNbJG9ialsxXV0gPSAkdGhpcy0+Z2V0SW5kaXJlY3RPYmplY3QoJG9ialsxXSwgJHRoaXMtPnhyZWZbJG9ialsxXV0sIGZhbHNlKTsKCQkJCXJldHVybiAkdGhpcy0+b2JqZWN0c1skb2JqWzFdXTsKCQkJfQoJCX0KCQlyZXR1cm4gJG9iajsKCX0KCgkvKioKCSAqIERlY29kZSB0aGUgc3BlY2lmaWVkIHN0cmVhbS4KCSAqIEBwYXJhbSAkc2RpYyAoYXJyYXkpIFN0cmVhbSdzIGRpY3Rpb25hcnkgYXJyYXkuCgkgKiBAcGFyYW0gJHN0cmVhbSAoc3RyaW5nKSBTdHJlYW0gdG8gZGVjb2RlLgoJICogQHJldHVybiBhcnJheSBjb250YWluaW5nIGRlY29kZWQgc3RyZWFtIGRhdGEgYW5kIHJlbWFpbmluZyBmaWx0ZXJzLgoJICogQHByb3RlY3RlZAoJICogQHNpbmNlIDEuMC4wMDAgKDIwMTEtMDYtMjIpCgkgKi8KCXByb3RlY3RlZCBmdW5jdGlvbiBkZWNvZGVTdHJlYW0oJHNkaWMsICRzdHJlYW0pIHsKCQkvLyBnZXQgc3RyZWFtIGxlbmdodCBhbmQgZmlsdGVycwoJCSRzbGVuZ3RoID0gc3RybGVuKCRzdHJlYW0pOwoJCWlmICgkc2xlbmd0aCA8PSAwKSB7CgkJCXJldHVybiBhcnJheSgnJywgYXJyYXkoKSk7CgkJfQoJCSRmaWx0ZXJzID0gYXJyYXkoKTsKCQlmb3JlYWNoICgkc2RpYyBhcyAkayA9PiAkdikgewoJCQlpZiAoJHZbMF0gPT0gJy8nKSB7CgkJCQlpZiAoKCR2WzFdID09ICdMZW5ndGgnKSBBTkQgKGlzc2V0KCRzZGljWygkayArIDEpXSkpIEFORCAoJHNkaWNbKCRrICsgMSldWzBdID09ICdudW1lcmljJykpIHsKCQkJCQkvLyBnZXQgZGVjbGFyZWQgc3RyZWFtIGxlbmdodAoJCQkJCSRkZWNsZW5ndGggPSBpbnR2YWwoJHNkaWNbKCRrICsgMSldWzFdKTsKCQkJCQlpZiAoJGRlY2xlbmd0aCA8ICRzbGVuZ3RoKSB7CgkJCQkJCSRzdHJlYW0gPSBzdWJzdHIoJHN0cmVhbSwgMCwgJGRlY2xlbmd0aCk7CgkJCQkJCSRzbGVuZ3RoID0gJGRlY2xlbmd0aDsKCQkJCQl9CgkJCQl9IGVsc2VpZiAoKCR2WzFdID09ICdGaWx0ZXInKSBBTkQgKGlzc2V0KCRzZGljWygkayArIDEpXSkpKSB7CgkJCQkJLy8gcmVzb2x2ZSBpbmRpcmVjdCBvYmplY3QKCQkJCQkkb2JqdmFsID0gJHRoaXMtPmdldE9iamVjdFZhbCgkc2RpY1soJGsgKyAxKV0pOwoJCQkJCWlmICgkb2JqdmFsWzBdID09ICcvJykgewoJCQkJCQkvLyBzaW5nbGUgZmlsdGVyCgkJCQkJCSRmaWx0ZXJzW10gPSAkb2JqdmFsWzFdOwoJCQkJCX0gZWxzZWlmICgkb2JqdmFsWzBdID09ICdbJykgewoJCQkJCQkvLyBhcnJheSBvZiBmaWx0ZXJzCgkJCQkJCWZvcmVhY2ggKCRvYmp2YWxbMV0gYXMgJGZsdCkgewoJCQkJCQkJaWYgKCRmbHRbMF0gPT0gJy8nKSB7CgkJCQkJCQkJJGZpbHRlcnNbXSA9ICRmbHRbMV07CgkJCQkJCQl9CgkJCQkJCX0KCQkJCQl9CgkJCQl9CgkJCX0KCQl9CgkJLy8gZGVjb2RlIHRoZSBzdHJlYW0KCQkkcmVtYWluaW5nX2ZpbHRlcnMgPSBhcnJheSgpOwoJCWZvcmVhY2ggKCRmaWx0ZXJzIGFzICRmaWx0ZXIpIHsKCQkJaWYgKGluX2FycmF5KCRmaWx0ZXIsIFRDUERGX0ZJTFRFUlM6OmdldEF2YWlsYWJsZUZpbHRlcnMoKSkpIHsKCQkJCXRyeSB7CgkJCQkJJHN0cmVhbSA9IFRDUERGX0ZJTFRFUlM6OmRlY29kZUZpbHRlcigkZmlsdGVyLCAkc3RyZWFtKTsKCQkJCX0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgewoJCQkJCSRlbXNnID0gJGUtPmdldE1lc3NhZ2UoKTsKCQkJCQlpZiAoKCgkZW1zZ1swXSA9PSAnficpIEFORCAhJHRoaXMtPmNmZ1snaWdub3JlX21pc3NpbmdfZmlsdGVyX2RlY29kZXJzJ10pCgkJCQkJCU9SICgoJGVtc2dbMF0gIT0gJ34nKSBBTkQgISR0aGlzLT5jZmdbJ2lnbm9yZV9maWx0ZXJfZGVjb2RpbmdfZXJyb3JzJ10pKSB7CgkJCQkJCSR0aGlzLT5FcnJvcigkZS0+Z2V0TWVzc2FnZSgpKTsKCQkJCQl9CgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkvLyBhZGQgbWlzc2luZyBmaWx0ZXIgdG8gYXJyYXkKCQkJCSRyZW1haW5pbmdfZmlsdGVyc1tdID0gJGZpbHRlcjsKCQkJfQoJCX0KCQlyZXR1cm4gYXJyYXkoJHN0cmVhbSwgJHJlbWFpbmluZ19maWx0ZXJzKTsKCX0KCgkvKioKCSAqIFRocm93IGFuIGV4Y2VwdGlvbiBvciBwcmludCBhbiBlcnJvciBtZXNzYWdlIGFuZCBkaWUgaWYgdGhlIEtfVENQREZfUEFSU0VSX1RIUk9XX0VYQ0VQVElPTl9FUlJPUiBjb25zdGFudCBpcyBzZXQgdG8gdHJ1ZS4KCSAqIEBwYXJhbSAkbXNnIChzdHJpbmcpIFRoZSBlcnJvciBtZXNzYWdlCgkgKiBAcHVibGljCgkgKiBAc2luY2UgMS4wLjAwMCAoMjAxMS0wNS0yMykKCSAqLwoJcHVibGljIGZ1bmN0aW9uIEVycm9yKCRtc2cpIHsKCQlpZiAoJHRoaXMtPmNmZ1snZGllX2Zvcl9lcnJvcnMnXSkgewoJCQlkaWUoJzxzdHJvbmc+VENQREZfUEFSU0VSIEVSUk9SOiA8L3N0cm9uZz4nLiRtc2cpOwoJCX0gZWxzZSB7CgkJCXRocm93IG5ldyBFeGNlcHRpb24oJ1RDUERGX1BBUlNFUiBFUlJPUjogJy4kbXNnKTsKCQl9Cgl9Cgp9IC8vIEVORCBPRiBUQ1BERl9QQVJTRVIgQ0xBU1MKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tools/</filename>
	  <isdir>1</isdir>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tools/.htaccess</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[ZGVueSBmcm9tIGFsbAo=]]></data>
	</file>
	<file>
	  <filename>/vendor/tecnick.com/tcpdf/tools/tcpdf_addfont.php</filename>
	  <isdir>0</isdir>
	  <data><![CDATA[IyEvdXNyL2Jpbi9waHAgLXEKPD9waHAKLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCi8vIEZpbGUgbmFtZSAgIDogdGNwZGZfYWRkZm9udC5waHAKLy8gVmVyc2lvbiAgICAgOiAxLjAuMDAyCi8vIEJlZ2luICAgICAgIDogMjAxMy0wNS0xMwovLyBMYXN0IFVwZGF0ZSA6IDIwMTMtMDgtMDUKLy8gQXV0aG9ycyAgICAgOiBOaWNvbGEgQXN1bmkgLSBUZWNuaWNrLmNvbSBMVEQgLSB3d3cudGVjbmljay5jb20gLSBpbmZvQHRlY25pY2suY29tCi8vICAgICAgICAgICAgICAgUmVtaSBDb2xsZXQKLy8gTGljZW5zZSAgICAgOiBHTlUtTEdQTCB2MyAoaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sKQovLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENvcHlyaWdodCAoQykgMjAxMS0yMDEzIE5pY29sYSBBc3VuaSAtIFRlY25pY2suY29tIExURAovLwovLyBUaGlzIGZpbGUgaXMgcGFydCBvZiBUQ1BERiBzb2Z0d2FyZSBsaWJyYXJ5LgovLwovLyBUQ1BERiBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0Ci8vIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCi8vIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZQovLyBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgovLwovLyBUQ1BERiBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLy8gV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgovLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi8vIFNlZSB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi8vCi8vIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIExpY2Vuc2UKLy8gYWxvbmcgd2l0aCBUQ1BERi4gSWYgbm90LCBzZWUKLy8gPGh0dHA6Ly93d3cudGVjbmljay5jb20vcGFnZWZpbGVzL3RjcGRmL0xJQ0VOU0UuVFhUPi4KLy8KLy8gU2VlIExJQ0VOU0UuVFhUIGZpbGUgZm9yIG1vcmUgaW5mb3JtYXRpb24uCi8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8KLy8gRGVzY3JpcHRpb24gOiBUaGlzIGlzIGEgY29tbWFuZCBsaW5lIHNjcmlwdCB0byBnZW5lcmF0ZSBUQ1BERiBmb250cy4KLy8KLy89PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0rCgovKioKICogQGZpbGUKICogVGhpcyBpcyBhIGNvbW1hbmQgbGluZSBzY3JpcHQgdG8gZ2VuZXJhdGUgVENQREYgZm9udHMuPGJyPgogKiBAcGFja2FnZSBjb20udGVjbmljay50Y3BkZgogKiBAdmVyc2lvbiAxLjAuMDAwCiAqLwoKaWYgKHBocF9zYXBpX25hbWUoKSAhPSAnY2xpJykgewogIGVjaG8gJ1lvdSBuZWVkIHRvIHJ1biB0aGlzIGNvbW1hbmQgZnJvbSBjb25zb2xlLic7CiAgZXhpdCgxKTsKfQoKJHRjcGRmX2luY2x1ZGVfZGlycyA9IGFycmF5KHJlYWxwYXRoKGRpcm5hbWUoX19GSUxFX18pLicvLi4vdGNwZGYucGhwJyksICcvdXNyL3NoYXJlL3BocC90Y3BkZi90Y3BkZi5waHAnLCAnL3Vzci9zaGFyZS90Y3BkZi90Y3BkZi5waHAnLCAnL3Vzci9zaGFyZS9waHAtdGNwZGYvdGNwZGYucGhwJywgJy92YXIvd3d3L3RjcGRmL3RjcGRmLnBocCcsICcvdmFyL3d3dy9odG1sL3RjcGRmL3RjcGRmLnBocCcsICcvdXNyL2xvY2FsL2FwYWNoZTIvaHRkb2NzL3RjcGRmL3RjcGRmLnBocCcpOwpmb3JlYWNoICgkdGNwZGZfaW5jbHVkZV9kaXJzIGFzICR0Y3BkZl9pbmNsdWRlX3BhdGgpIHsKCWlmIChAZmlsZV9leGlzdHMoJHRjcGRmX2luY2x1ZGVfcGF0aCkpIHsKCQlyZXF1aXJlX29uY2UoJHRjcGRmX2luY2x1ZGVfcGF0aCk7CgkJYnJlYWs7Cgl9Cn0KCi8qKgogKiBEaXNwbGF5IGhlbHAgZ3VpZGUgZm9yIHRoaXMgY29tbWFuZC4KICovCmZ1bmN0aW9uIHNob3dIZWxwKCkgewoJJGhlbHAgPSA8PDxFT0QKdGNwZGZfYWRkZm9udCAtIGNvbW1hbmQgbGluZSB0b29sIHRvIGNvbnZlcnQgZm9udHMgZm9yIHRoZSBUQ1BERiBsaWJyYXJ5LgoKVXNhZ2U6IHRjcGRmX2FkZGZvbnQucGhwIFsgb3B0aW9ucyBdIC1pIGZvbnRmaWxlWyxmb250ZmlsZV0uLi4KCk9wdGlvbnM6CgoJLXQKCS0tdHlwZSAgICAgIEZvbnQgdHlwZS4gTGVhdmUgZW1wdHkgZm9yIGF1dG9kZXRlY3QgbW9kZS4KCSAgICAgICAgICAgIFZhbGlkIHZhbHVlcyBhcmU6CgkJCQkJVHJ1ZVR5cGVVbmljb2RlCgkJCQkJVHJ1ZVR5cGUKCQkJCQlUeXBlMQoJCQkJCUNJRDBKUCA9IENJRC0wIEphcGFuZXNlCgkJCQkJQ0lEMEtSID0gQ0lELTAgS29yZWFuCgkJCQkJQ0lEMENTID0gQ0lELTAgQ2hpbmVzZSBTaW1wbGlmaWVkCgkJCQkJQ0lEMENUID0gQ0lELTAgQ2hpbmVzZSBUcmFkaXRpb25hbAoKCS1lCgktLWVuYyAgICAgICBOYW1lIG9mIHRoZSBlbmNvZGluZyB0YWJsZSB0byB1c2UuIExlYXZlIGVtcHR5IGZvcgoJICAgICAgICAgICAgZGVmYXVsdCBtb2RlLiBPbWl0IHRoaXMgcGFyYW1ldGVyIGZvciBUcnVlVHlwZSBVbmljb2RlCgkgICAgICAgICAgICBhbmQgc3ltYm9saWMgZm9udHMgbGlrZSBTeW1ib2wgb3IgWmFwZkRpbmdCYXRzLgoKCS1mCgktLWZsYWdzICAgICBVbnNpZ25lZCAzMi1iaXQgaW50ZWdlciBjb250YWluaW5nIGZsYWdzIHNwZWNpZnlpbmcKCSAgICAgICAgICAgIHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBmb250IChQREYzMjAwMDoyMDA4IC0KCSAgICAgICAgICAgIDkuOC4yIEZvbnQgRGVzY3JpcHRvciBGbGFncyk6ICsxIGZvciBmaXhlZCBmb250OyArNCBmb3IKCSAgICAgICAgICAgIHN5bWJvbCBvciArMzIgZm9yIG5vbi1zeW1ib2w7ICs2NCBmb3IgaXRhbGljLiBGaXhlZCBhbmQKCSAgICAgICAgICAgIEl0YWxpYyBtb2RlIGFyZSBnZW5lcmFsbHkgYXV0b2RldGVjdGVkIHNvIHlvdSBoYXZlIHRvCgkgICAgICAgICAgICBzZXQgaXQgdG8gMzIgPSBub24tc3ltYm9saWMgZm9udCAoZGVmYXVsdCkgb3IgNCA9CgkgICAgICAgICAgICBzeW1ib2xpYyBmb250LgoKCS1vCgktLW91dHBhdGggICBPdXRwdXQgcGF0aCBmb3IgZ2VuZXJhdGVkIGZvbnQgZmlsZXMgKG11c3QgYmUgd3JpdGVhYmxlCgkgICAgICAgICAgICBieSB0aGUgd2ViIHNlcnZlcikuIExlYXZlIGVtcHR5IGZvciBkZWZhdWx0IGZvbnQgZm9sZGVyLgoKCS1wCgktLXBsYXRpZCAgICBQbGF0Zm9ybSBJRCBmb3IgQ01BUCB0YWJsZSB0byBleHRyYWN0ICh3aGVuIGJ1aWxkaW5nIGEKCSAgICAgICAgICAgIFVuaWNvZGUgZm9udCBmb3IgV2luZG93cyB0aGlzIHZhbHVlIHNob3VsZCBiZSAzLCBmb3IKCSAgICAgICAgICAgIE1hY2ludG9zaCBzaG91bGQgYmUgMSkuCgoJLW4KCS0tZW5jaWQgICAgIEVuY29kaW5nIElEIGZvciBDTUFQIHRhYmxlIHRvIGV4dHJhY3QgKHdoZW4gYnVpbGRpbmcgYQoJICAgICAgICAgICAgVW5pY29kZSBmb250IGZvciBXaW5kb3dzIHRoaXMgdmFsdWUgc2hvdWxkIGJlIDEsIGZvcgoJICAgICAgICAgICAgTWFjaW50b3NoIHNob3VsZCBiZSAwKS4gV2hlbiBQbGF0Zm9ybSBJRCBpcyAzLCBsZWdhbAoJICAgICAgICAgICAgdmFsdWVzIGZvciBFbmNvZGluZyBJRCBhcmU6IDA9U3ltYm9sLCAxPVVuaWNvZGUsCgkgICAgICAgICAgICAyPVNoaWZ0SklTLCAzPVBSQywgND1CaWc1LCA1PVdhbnN1bmcsIDY9Sm9oYWIsCgkgICAgICAgICAgICA3PVJlc2VydmVkLCA4PVJlc2VydmVkLCA5PVJlc2VydmVkLCAxMD1VQ1MtNC4KCgktYgoJLS1hZGRjYmJveCAgSW5jbHVkZXMgdGhlIGNoYXJhY3RlciBib3VuZGluZyBib3ggaW5mb3JtYXRpb24gb24gdGhlCgkgICAgICAgICAgICBwaHAgZm9udCBmaWxlLgoKCS1sCgktLWxpbmsgICAgICBMaW5rIHRvIHN5c3RlbSBmb250IGluc3RlYWQgb2YgY29weWluZyB0aGUgZm9udCBkYXRhICMKCSAgICAgICAgICAgIChub3QgdHJhbnNwb3J0YWJsZSkgLSBOb3RlOiBkbyBub3Qgd29yayB3aXRoIFR5cGUxIGZvbnRzLgoKCS1pCgktLWZvbnRzICAgICBDb21tYS1zZXBhcmF0ZWQgbGlzdCBvZiBpbnB1dCBmb250IGZpbGVzLgoKCS1oCgktLWhlbHAgICAgICBEaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KRU9EOwoJZWNobyAkaGVscC4iXG5cbiI7CglleGl0KDApOwp9CgovLyByZW1vdmUgdGhlIG5hbWUgb2YgdGhlIGV4ZWN1dGluZyBzY3JpcHQKYXJyYXlfc2hpZnQoJGFyZ3YpOwoKLy8gbm8gb3B0aW9ucyBjaG9zZW4KaWYgKCFpc19hcnJheSgkYXJndikpIHsKICBzaG93SGVscCgpOwp9CgovLyBpbml0aWFsaXplIHRoZSBhcnJheSBvZiBvcHRpb25zCiRvcHRpb25zID0gYXJyYXkoJ3R5cGUnPT4nJywgJ2VuYyc9PicnLCAnZmxhZ3MnPT4zMiwgJ291dHBhdGgnPT5LX1BBVEhfRk9OVFMsICdwbGF0aWQnPT4zLCAnZW5jaWQnPT4xLCAnYWRkY2Jib3gnPT5mYWxzZSwgJ2xpbmsnPT5mYWxzZSk7CgovLyBzaG9ydCBpbnB1dCBvcHRpb25zCiRzb3B0ID0gJyc7CiRzb3B0IC49ICd0Oic7CiRzb3B0IC49ICdlOic7CiRzb3B0IC49ICdmOic7CiRzb3B0IC49ICdvOic7CiRzb3B0IC49ICdwOic7CiRzb3B0IC49ICduOic7CiRzb3B0IC49ICdiJzsKJHNvcHQgLj0gJ2wnOwokc29wdCAuPSAnaTonOwokc29wdCAuPSAnaCc7CgovLyBsb25nIGlucHV0IG9wdGlvbnMKJGxvcHQgPSBhcnJheSgpOwokbG9wdFtdID0gJ3R5cGU6JzsKJGxvcHRbXSA9ICdlbmM6JzsKJGxvcHRbXSA9ICdmbGFnczonOwokbG9wdFtdID0gJ291dHBhdGg6JzsKJGxvcHRbXSA9ICdwbGF0aWQ6JzsKJGxvcHRbXSA9ICdlbmNpZDonOwokbG9wdFtdID0gJ2FkZGNiYm94JzsKJGxvcHRbXSA9ICdsaW5rJzsKJGxvcHRbXSA9ICdmb250czonOwokbG9wdFtdID0gJ2hlbHAnOwoKLy8gcGFyc2UgaW5wdXQgb3B0aW9ucwokaW5vcHQgPSBnZXRvcHQoJHNvcHQsICRsb3B0KTsKCi8vIGltcG9ydCBvcHRpb25zICh3aXRoIHNvbWUgc2FuaXRpemF0aW9uKQpmb3JlYWNoICgkaW5vcHQgYXMgJG9wdCA9PiAkdmFsKSB7Cglzd2l0Y2ggKCRvcHQpIHsKCQljYXNlICd0JzoKCQljYXNlICd0eXBlJzogewoJCQlpZiAoaW5fYXJyYXkoJHZhbCwgYXJyYXkoJ1RydWVUeXBlVW5pY29kZScsICdUcnVlVHlwZScsICdUeXBlMScsICdDSUQwSlAnLCAnQ0lEMEtSJywgJ0NJRDBDUycsICdDSUQwQ1QnKSkpIHsKCQkJCSRvcHRpb25zWyd0eXBlJ10gPSAkdmFsOwoJCQl9CgkJCWJyZWFrOwoJCX0KCQljYXNlICdlJzoKCQljYXNlICdlbmMnOiB7CgkJCSRvcHRpb25zWydlbmMnXSA9ICR2YWw7CgkJCWJyZWFrOwoJCX0KCQljYXNlICdmJzoKCQljYXNlICdmbGFncyc6IHsKCQkJJG9wdGlvbnNbJ2ZsYWdzJ10gPSBpbnR2YWwoJHZhbCk7CgkJCWJyZWFrOwoJCX0KCQljYXNlICdvJzoKCQljYXNlICdvdXRwYXRoJzogewoJCQkkb3B0aW9uc1snb3V0cGF0aCddID0gcmVhbHBhdGgoJHZhbCk7CgkJCWlmIChzdWJzdHIoJG9wdGlvbnNbJ291dHBhdGgnXSwgLTEpICE9ICcvJykgewoJCQkJJG9wdGlvbnNbJ291dHBhdGgnXSAuPSAnLyc7CgkJCX0KCQkJYnJlYWs7CgkJfQoJCWNhc2UgJ3AnOgoJCWNhc2UgJ3BsYXRpZCc6IHsKCQkJJG9wdGlvbnNbJ3BsYXRpZCddID0gbWluKG1heCgxLCBpbnR2YWwoJHZhbCkpLCAzKTsKCQkJYnJlYWs7CgkJfQoJCWNhc2UgJ24nOgoJCWNhc2UgJ2VuY2lkJzogewoJCQkkb3B0aW9uc1snZW5jaWQnXSA9IG1pbihtYXgoMCwgaW50dmFsKCR2YWwpKSwgMTApOwoJCQlicmVhazsKCQl9CgkJY2FzZSAnYic6CgkJY2FzZSAnYWRkY2Jib3gnOiB7CgkJCSRvcHRpb25zWydhZGRjYmJveCddID0gdHJ1ZTsKCQkJYnJlYWs7CgkJfQoJCWNhc2UgJ2wnOgoJCWNhc2UgJ2xpbmsnOiB7CgkJCSRvcHRpb25zWydsaW5rJ10gPSB0cnVlOwoJCQlicmVhazsKCQl9CgkJY2FzZSAnaSc6CgkJY2FzZSAnZm9udHMnOiB7CgkJCSRvcHRpb25zWydmb250cyddID0gZXhwbG9kZSgnLCcsICR2YWwpOwoJCQlicmVhazsKCQl9CgkJY2FzZSAnaCc6CgkJY2FzZSAnaGVscCc6CgkJZGVmYXVsdDogewoJCQlzaG93SGVscCgpOwoJCQlicmVhazsKCQl9Cgl9IC8vIGVuZCBvZiBzd2l0Y2gKfSAvLyBlbmQgb2Ygd2hpbGUgbG9vcAoKaWYgKGVtcHR5KCRvcHRpb25zWydmb250cyddKSkgewoJZWNobyAiRVJST1I6IG1pc3NpbmcgaW5wdXQgZm9udHMgKHRyeSAtLWhlbHAgZm9yIHVzYWdlKVxuXG4iOwoJZXhpdCgyKTsKfQoKLy8gY2hlY2sgdGhlIG91dHB1dCBwYXRoCmlmICghaXNfZGlyKCRvcHRpb25zWydvdXRwYXRoJ10pIE9SICFpc193cml0YWJsZSgkb3B0aW9uc1snb3V0cGF0aCddKSkgewoJZWNobyAiRVJST1I6IENhbid0IHdyaXRlIHRvICIuJG9wdGlvbnNbJ291dHBhdGgnXS4iXG5cbiI7CglleGl0KDMpOwp9CgplY2hvICJcbj4+PiBDb252ZXJ0aW5nIGZvbnRzIGZvciBUQ1BERjpcbiI7CgplY2hvICcqKiogT3V0cHV0IGRpciBzZXQgdG8gJy4kb3B0aW9uc1snb3V0cGF0aCddLiJcbiI7CgovLyBjaGVjayBpZiB0aGVyZSBhcmUgY29udmVyc2lvbiBlcnJvcnMKJGVycm9ycyA9IGZhbHNlOwoKZm9yZWFjaCAoJG9wdGlvbnNbJ2ZvbnRzJ10gYXMgJGZvbnQpIHsKCSRmb250ZmlsZSA9IHJlYWxwYXRoKCRmb250KTsKCSRmb250bmFtZSA9IFRDUERGX0ZPTlRTOjphZGRUVEZmb250KCRmb250ZmlsZSwgJG9wdGlvbnNbJ3R5cGUnXSwgJG9wdGlvbnNbJ2VuYyddLCAkb3B0aW9uc1snZmxhZ3MnXSwgJG9wdGlvbnNbJ291dHBhdGgnXSwgJG9wdGlvbnNbJ3BsYXRpZCddLCAkb3B0aW9uc1snZW5jaWQnXSwgJG9wdGlvbnNbJ2FkZGNiYm94J10sICRvcHRpb25zWydsaW5rJ10pOwoJaWYgKCRmb250bmFtZSA9PT0gZmFsc2UpIHsKCQkkZXJyb3JzID0gdHJ1ZTsKCQllY2hvICItLS0gRVJST1I6IGNhbid0IGFkZCAiLiRmb250LiJcbiI7Cgl9IGVsc2UgewoJCWVjaG8gIisrKyBPSyAgIDogIi4kZm9udGZpbGUuJyBhZGRlZCBhcyAnLiRmb250bmFtZS4iXG4iOwoJfQp9CgppZiAoJGVycm9ycykgewoJZWNobyAiLS0tIFByb2Nlc3MgY29tcGxldGVkIHdpdGggRVJST1JTIVxuXG4iOwoJZXhpdCg0KTsKfQoKZWNobyAiPj4+IFByb2Nlc3Mgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCFcblxuIjsKZXhpdCgwKTsKCi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09KwovLyBFTkQgT0YgRklMRQovLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSsK]]></data>
	</file>
</module>
